feat(desktop): per-job reasoning effort picker in the cron editor - #93004
feat(desktop): per-job reasoning effort picker in the cron editor#93004the3asic wants to merge 1 commit into
Conversation
Surfaces the per-job reasoning_effort pin (4e1dd1a, shipped in v0.20.5) in the desktop cron UI: - editor dropdown with inherit (default: follow config resolution at fire time) / none (explicitly disabled) / minimal..ultra, following the same optional-override pattern as the per-job model picker - detail panel shows the pinned effort only when set, with localized labels - script-only (no_agent) jobs never render the picker and never touch the stored field — the scheduler ignores it for them - saving always writes the axis for agent jobs so resetting to inherit clears a previous pin (null), matching the model/provider override contract in cronEditorUpdates - CronJob / CreatePayload / Updates types carry the field (boolean | null | string — YAML false means disabled, mirroring hermes_constants.parse_reasoning_effort) - i18n: en / ja / zh / zh-hant labels Ported from NousResearch#65679 (closed in favor of the landed backend); desktop was the surface that implementation covered and the landed commit did not. The web dashboard surface is separately in flight in NousResearch#92101.
Complete feature slice: model layer, editor UI, detail view, payload typing, all four locales plus the shared type, and unit tests covering set/clear and the script-only exemption. The Findings:
Minor: |
Summary
Surfaces the per-job
reasoning_effortpin (landed in 4e1dd1a, shipped v0.20.5) in the desktop cron UI. The backend commit covered CLI + agent tool + docs; #92101 is in flight for the web dashboard; this covers the Electron/desktop surface, ported from the desktop section of #65679 (closed in favor of the landed backend).What it adds
inherit(default — follow config resolution at fire time:agent.reasoning_overrides>agent.reasoning_effort),none(explicitly disabled — the shared parser mapsnone/false/disabled/YAMLfalseto{"enabled": False}),minimal…ultra.inheritclears a previous pin (null); script-only (no_agent) jobs never render the picker and never touch the stored field (the scheduler ignores it for them).CronJob/CronJobCreatePayload/CronJobUpdatescarryreasoning_effort?: boolean | null | string.Validation
vitest run src/app/cron/cron-job-model.test.ts— 16 passed (incl. new set/clear/script-only-untouched assertions)npm run typecheck— renderer + electron + e2e tsconfigs clean