@namzu/cli 29.0.1 → 30.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +194 -0
- package/README.md +20 -0
- package/dist/browser/commands.d.ts +29 -0
- package/dist/browser/commands.d.ts.map +1 -0
- package/dist/browser/commands.js +361 -0
- package/dist/browser/commands.js.map +1 -0
- package/dist/browser/control.d.ts +79 -0
- package/dist/browser/control.d.ts.map +1 -0
- package/dist/browser/control.js +140 -0
- package/dist/browser/control.js.map +1 -0
- package/dist/browser/describe.d.ts +12 -0
- package/dist/browser/describe.d.ts.map +1 -0
- package/dist/browser/describe.js +27 -0
- package/dist/browser/describe.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +1 -0
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/browser.d.ts +7 -0
- package/dist/commands/browser.d.ts.map +1 -0
- package/dist/commands/browser.js +16 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/commands/drain.d.ts +2 -1
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +6 -3
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/exec-flags.d.ts +2 -1
- package/dist/commands/exec-flags.d.ts.map +1 -1
- package/dist/commands/exec-flags.js +6 -3
- package/dist/commands/exec-flags.js.map +1 -1
- package/dist/commands/exec-json.d.ts.map +1 -1
- package/dist/commands/exec-json.js +2 -1
- package/dist/commands/exec-json.js.map +1 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +5 -1
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/host-queries.d.ts.map +1 -1
- package/dist/commands/host-queries.js +10 -3
- package/dist/commands/host-queries.js.map +1 -1
- package/dist/commands/schedule.d.ts +9 -0
- package/dist/commands/schedule.d.ts.map +1 -0
- package/dist/commands/schedule.js +126 -0
- package/dist/commands/schedule.js.map +1 -0
- package/dist/commands/serve.d.ts +3 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +5 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/skills.d.ts +10 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +23 -7
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +11 -0
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/config/load.d.ts +39 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +232 -1
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +78 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/user-config.d.ts +23 -0
- package/dist/config/user-config.d.ts.map +1 -0
- package/dist/config/user-config.js +48 -0
- package/dist/config/user-config.js.map +1 -0
- package/dist/context/capabilities.d.ts +1 -1
- package/dist/context/capabilities.d.ts.map +1 -1
- package/dist/context/capabilities.js +1 -0
- package/dist/context/capabilities.js.map +1 -1
- package/dist/context/environment.d.ts +26 -3
- package/dist/context/environment.d.ts.map +1 -1
- package/dist/context/environment.js +68 -9
- package/dist/context/environment.js.map +1 -1
- package/dist/doctor/checks/browser.d.ts +15 -0
- package/dist/doctor/checks/browser.d.ts.map +1 -0
- package/dist/doctor/checks/browser.js +63 -0
- package/dist/doctor/checks/browser.js.map +1 -0
- package/dist/doctor/checks/index.d.ts +4 -1
- package/dist/doctor/checks/index.d.ts.map +1 -1
- package/dist/doctor/checks/index.js +8 -1
- package/dist/doctor/checks/index.js.map +1 -1
- package/dist/doctor/checks/scheduler.d.ts +10 -0
- package/dist/doctor/checks/scheduler.d.ts.map +1 -0
- package/dist/doctor/checks/scheduler.js +74 -0
- package/dist/doctor/checks/scheduler.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/notifications/desktop/freedesktop.d.ts +10 -0
- package/dist/integrations/notifications/desktop/freedesktop.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop/freedesktop.js +33 -0
- package/dist/integrations/notifications/desktop/freedesktop.js.map +1 -0
- package/dist/integrations/notifications/desktop/macos.d.ts +6 -0
- package/dist/integrations/notifications/desktop/macos.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop/macos.js +17 -0
- package/dist/integrations/notifications/desktop/macos.js.map +1 -0
- package/dist/integrations/notifications/desktop/sanitize.d.ts +16 -0
- package/dist/integrations/notifications/desktop/sanitize.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop/sanitize.js +49 -0
- package/dist/integrations/notifications/desktop/sanitize.js.map +1 -0
- package/dist/integrations/notifications/desktop/throttle.d.ts +10 -0
- package/dist/integrations/notifications/desktop/throttle.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop/throttle.js +39 -0
- package/dist/integrations/notifications/desktop/throttle.js.map +1 -0
- package/dist/integrations/notifications/desktop/windows-toast.d.ts +23 -0
- package/dist/integrations/notifications/desktop/windows-toast.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop/windows-toast.js +56 -0
- package/dist/integrations/notifications/desktop/windows-toast.js.map +1 -0
- package/dist/integrations/notifications/desktop.d.ts +84 -0
- package/dist/integrations/notifications/desktop.d.ts.map +1 -0
- package/dist/integrations/notifications/desktop.js +199 -0
- package/dist/integrations/notifications/desktop.js.map +1 -0
- package/dist/integrations/plugins/runtime.d.ts +8 -2
- package/dist/integrations/plugins/runtime.d.ts.map +1 -1
- package/dist/integrations/plugins/runtime.js +14 -8
- package/dist/integrations/plugins/runtime.js.map +1 -1
- package/dist/integrations/providers/harness-credentials.d.ts +9 -4
- package/dist/integrations/providers/harness-credentials.d.ts.map +1 -1
- package/dist/integrations/providers/harness-credentials.js +16 -8
- package/dist/integrations/providers/harness-credentials.js.map +1 -1
- package/dist/integrations/resident/session-step.d.ts.map +1 -1
- package/dist/integrations/resident/session-step.js +1 -0
- package/dist/integrations/resident/session-step.js.map +1 -1
- package/dist/integrations/subagents/runtime.d.ts +6 -0
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +14 -5
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/web/open-url.d.ts +24 -0
- package/dist/integrations/web/open-url.d.ts.map +1 -0
- package/dist/integrations/web/open-url.js +73 -0
- package/dist/integrations/web/open-url.js.map +1 -0
- package/dist/permissions/browser-sites.d.ts +95 -0
- package/dist/permissions/browser-sites.d.ts.map +1 -0
- package/dist/permissions/browser-sites.js +270 -0
- package/dist/permissions/browser-sites.js.map +1 -0
- package/dist/schedule/build.d.ts +86 -0
- package/dist/schedule/build.d.ts.map +1 -0
- package/dist/schedule/build.js +267 -0
- package/dist/schedule/build.js.map +1 -0
- package/dist/schedule/changes.d.ts +28 -0
- package/dist/schedule/changes.d.ts.map +1 -0
- package/dist/schedule/changes.js +65 -0
- package/dist/schedule/changes.js.map +1 -0
- package/dist/schedule/commands/add.d.ts +24 -0
- package/dist/schedule/commands/add.d.ts.map +1 -0
- package/dist/schedule/commands/add.js +447 -0
- package/dist/schedule/commands/add.js.map +1 -0
- package/dist/schedule/commands/args.d.ts +22 -0
- package/dist/schedule/commands/args.d.ts.map +1 -0
- package/dist/schedule/commands/args.js +80 -0
- package/dist/schedule/commands/args.js.map +1 -0
- package/dist/schedule/commands/confirm-prompt.d.ts +6 -0
- package/dist/schedule/commands/confirm-prompt.d.ts.map +1 -0
- package/dist/schedule/commands/confirm-prompt.js +21 -0
- package/dist/schedule/commands/confirm-prompt.js.map +1 -0
- package/dist/schedule/commands/lifecycle.d.ts +39 -0
- package/dist/schedule/commands/lifecycle.d.ts.map +1 -0
- package/dist/schedule/commands/lifecycle.js +586 -0
- package/dist/schedule/commands/lifecycle.js.map +1 -0
- package/dist/schedule/commands/list.d.ts +33 -0
- package/dist/schedule/commands/list.d.ts.map +1 -0
- package/dist/schedule/commands/list.js +206 -0
- package/dist/schedule/commands/list.js.map +1 -0
- package/dist/schedule/commands/logs.d.ts +7 -0
- package/dist/schedule/commands/logs.d.ts.map +1 -0
- package/dist/schedule/commands/logs.js +106 -0
- package/dist/schedule/commands/logs.js.map +1 -0
- package/dist/schedule/commands/service.d.ts +16 -0
- package/dist/schedule/commands/service.d.ts.map +1 -0
- package/dist/schedule/commands/service.js +458 -0
- package/dist/schedule/commands/service.js.map +1 -0
- package/dist/schedule/daemon/daemon.d.ts +156 -0
- package/dist/schedule/daemon/daemon.d.ts.map +1 -0
- package/dist/schedule/daemon/daemon.js +1253 -0
- package/dist/schedule/daemon/daemon.js.map +1 -0
- package/dist/schedule/daemon/endpoint.d.ts +38 -0
- package/dist/schedule/daemon/endpoint.d.ts.map +1 -0
- package/dist/schedule/daemon/endpoint.js +158 -0
- package/dist/schedule/daemon/endpoint.js.map +1 -0
- package/dist/schedule/daemon/exit.d.ts +8 -0
- package/dist/schedule/daemon/exit.d.ts.map +1 -0
- package/dist/schedule/daemon/exit.js +8 -0
- package/dist/schedule/daemon/exit.js.map +1 -0
- package/dist/schedule/daemon/log.d.ts +12 -0
- package/dist/schedule/daemon/log.d.ts.map +1 -0
- package/dist/schedule/daemon/log.js +53 -0
- package/dist/schedule/daemon/log.js.map +1 -0
- package/dist/schedule/daemon/notify.d.ts +38 -0
- package/dist/schedule/daemon/notify.d.ts.map +1 -0
- package/dist/schedule/daemon/notify.js +115 -0
- package/dist/schedule/daemon/notify.js.map +1 -0
- package/dist/schedule/daemon/retention.d.ts +16 -0
- package/dist/schedule/daemon/retention.d.ts.map +1 -0
- package/dist/schedule/daemon/retention.js +46 -0
- package/dist/schedule/daemon/retention.js.map +1 -0
- package/dist/schedule/daemon/sessions.d.ts +23 -0
- package/dist/schedule/daemon/sessions.d.ts.map +1 -0
- package/dist/schedule/daemon/sessions.js +52 -0
- package/dist/schedule/daemon/sessions.js.map +1 -0
- package/dist/schedule/env.d.ts +32 -0
- package/dist/schedule/env.d.ts.map +1 -0
- package/dist/schedule/env.js +106 -0
- package/dist/schedule/env.js.map +1 -0
- package/dist/schedule/fire/browser-preflight.d.ts +41 -0
- package/dist/schedule/fire/browser-preflight.d.ts.map +1 -0
- package/dist/schedule/fire/browser-preflight.js +73 -0
- package/dist/schedule/fire/browser-preflight.js.map +1 -0
- package/dist/schedule/fire/calls.d.ts +49 -0
- package/dist/schedule/fire/calls.d.ts.map +1 -0
- package/dist/schedule/fire/calls.js +114 -0
- package/dist/schedule/fire/calls.js.map +1 -0
- package/dist/schedule/fire/fire.d.ts +78 -0
- package/dist/schedule/fire/fire.d.ts.map +1 -0
- package/dist/schedule/fire/fire.js +490 -0
- package/dist/schedule/fire/fire.js.map +1 -0
- package/dist/schedule/fire/result.d.ts +13 -0
- package/dist/schedule/fire/result.d.ts.map +1 -0
- package/dist/schedule/fire/result.js +18 -0
- package/dist/schedule/fire/result.js.map +1 -0
- package/dist/schedule/fire/unattended-note.d.ts +22 -0
- package/dist/schedule/fire/unattended-note.d.ts.map +1 -0
- package/dist/schedule/fire/unattended-note.js +46 -0
- package/dist/schedule/fire/unattended-note.js.map +1 -0
- package/dist/schedule/floor.d.ts +136 -0
- package/dist/schedule/floor.d.ts.map +1 -0
- package/dist/schedule/floor.js +1289 -0
- package/dist/schedule/floor.js.map +1 -0
- package/dist/schedule/folder.d.ts +34 -0
- package/dist/schedule/folder.d.ts.map +1 -0
- package/dist/schedule/folder.js +84 -0
- package/dist/schedule/folder.js.map +1 -0
- package/dist/schedule/paths.d.ts +49 -0
- package/dist/schedule/paths.d.ts.map +1 -0
- package/dist/schedule/paths.js +53 -0
- package/dist/schedule/paths.js.map +1 -0
- package/dist/schedule/policy.d.ts +141 -0
- package/dist/schedule/policy.d.ts.map +1 -0
- package/dist/schedule/policy.js +378 -0
- package/dist/schedule/policy.js.map +1 -0
- package/dist/schedule/resume-command.d.ts +36 -0
- package/dist/schedule/resume-command.d.ts.map +1 -0
- package/dist/schedule/resume-command.js +72 -0
- package/dist/schedule/resume-command.js.map +1 -0
- package/dist/schedule/service/detect.d.ts +22 -0
- package/dist/schedule/service/detect.d.ts.map +1 -0
- package/dist/schedule/service/detect.js +29 -0
- package/dist/schedule/service/detect.js.map +1 -0
- package/dist/schedule/service/index.d.ts +48 -0
- package/dist/schedule/service/index.d.ts.map +1 -0
- package/dist/schedule/service/index.js +361 -0
- package/dist/schedule/service/index.js.map +1 -0
- package/dist/schedule/service/launchd.d.ts +24 -0
- package/dist/schedule/service/launchd.d.ts.map +1 -0
- package/dist/schedule/service/launchd.js +84 -0
- package/dist/schedule/service/launchd.js.map +1 -0
- package/dist/schedule/service/manifest.d.ts +44 -0
- package/dist/schedule/service/manifest.d.ts.map +1 -0
- package/dist/schedule/service/manifest.js +16 -0
- package/dist/schedule/service/manifest.js.map +1 -0
- package/dist/schedule/service/names.d.ts +9 -0
- package/dist/schedule/service/names.d.ts.map +1 -0
- package/dist/schedule/service/names.js +22 -0
- package/dist/schedule/service/names.js.map +1 -0
- package/dist/schedule/service/quote.d.ts +24 -0
- package/dist/schedule/service/quote.d.ts.map +1 -0
- package/dist/schedule/service/quote.js +64 -0
- package/dist/schedule/service/quote.js.map +1 -0
- package/dist/schedule/service/runner.d.ts +17 -0
- package/dist/schedule/service/runner.d.ts.map +1 -0
- package/dist/schedule/service/runner.js +31 -0
- package/dist/schedule/service/runner.js.map +1 -0
- package/dist/schedule/service/systemd.d.ts +37 -0
- package/dist/schedule/service/systemd.d.ts.map +1 -0
- package/dist/schedule/service/systemd.js +96 -0
- package/dist/schedule/service/systemd.js.map +1 -0
- package/dist/schedule/service/windows-task.d.ts +58 -0
- package/dist/schedule/service/windows-task.d.ts.map +1 -0
- package/dist/schedule/service/windows-task.js +199 -0
- package/dist/schedule/service/windows-task.js.map +1 -0
- package/dist/schedule/service/wsl.d.ts +69 -0
- package/dist/schedule/service/wsl.d.ts.map +1 -0
- package/dist/schedule/service/wsl.js +121 -0
- package/dist/schedule/service/wsl.js.map +1 -0
- package/dist/schedule/store/atomic.d.ts +43 -0
- package/dist/schedule/store/atomic.d.ts.map +1 -0
- package/dist/schedule/store/atomic.js +135 -0
- package/dist/schedule/store/atomic.js.map +1 -0
- package/dist/schedule/store/claims.d.ts +26 -0
- package/dist/schedule/store/claims.d.ts.map +1 -0
- package/dist/schedule/store/claims.js +57 -0
- package/dist/schedule/store/claims.js.map +1 -0
- package/dist/schedule/store/digest.d.ts +18 -0
- package/dist/schedule/store/digest.d.ts.map +1 -0
- package/dist/schedule/store/digest.js +139 -0
- package/dist/schedule/store/digest.js.map +1 -0
- package/dist/schedule/store/history.d.ts +21 -0
- package/dist/schedule/store/history.d.ts.map +1 -0
- package/dist/schedule/store/history.js +114 -0
- package/dist/schedule/store/history.js.map +1 -0
- package/dist/schedule/store/jobs.d.ts +61 -0
- package/dist/schedule/store/jobs.d.ts.map +1 -0
- package/dist/schedule/store/jobs.js +210 -0
- package/dist/schedule/store/jobs.js.map +1 -0
- package/dist/schedule/store/state.d.ts +19 -0
- package/dist/schedule/store/state.d.ts.map +1 -0
- package/dist/schedule/store/state.js +38 -0
- package/dist/schedule/store/state.js.map +1 -0
- package/dist/schedule/types.d.ts +283 -0
- package/dist/schedule/types.d.ts.map +1 -0
- package/dist/schedule/types.js +9 -0
- package/dist/schedule/types.js.map +1 -0
- package/dist/skills/catalog.d.ts +96 -0
- package/dist/skills/catalog.d.ts.map +1 -0
- package/dist/skills/catalog.js +226 -0
- package/dist/skills/catalog.js.map +1 -0
- package/dist/skills/directory.d.ts +38 -0
- package/dist/skills/directory.d.ts.map +1 -0
- package/dist/skills/directory.js +51 -0
- package/dist/skills/directory.js.map +1 -0
- package/dist/skills/save.d.ts +148 -0
- package/dist/skills/save.d.ts.map +1 -0
- package/dist/skills/save.js +344 -0
- package/dist/skills/save.js.map +1 -0
- package/dist/skills/store.d.ts +103 -16
- package/dist/skills/store.d.ts.map +1 -1
- package/dist/skills/store.js +227 -30
- package/dist/skills/store.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +609 -74
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/LiveActivity.d.ts +8 -1
- package/dist/tui/LiveActivity.d.ts.map +1 -1
- package/dist/tui/LiveActivity.js +20 -4
- package/dist/tui/LiveActivity.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts +36 -4
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +135 -15
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/SaveSkillOverlay.d.ts +33 -0
- package/dist/tui/SaveSkillOverlay.d.ts.map +1 -0
- package/dist/tui/SaveSkillOverlay.js +118 -0
- package/dist/tui/SaveSkillOverlay.js.map +1 -0
- package/dist/tui/agent.d.ts +208 -6
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +371 -58
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/browser-notices.d.ts +33 -0
- package/dist/tui/browser-notices.d.ts.map +1 -0
- package/dist/tui/browser-notices.js +102 -0
- package/dist/tui/browser-notices.js.map +1 -0
- package/dist/tui/open-browser.d.ts +29 -1
- package/dist/tui/open-browser.d.ts.map +1 -1
- package/dist/tui/open-browser.js +83 -11
- package/dist/tui/open-browser.js.map +1 -1
- package/dist/tui/permission-review.d.ts +10 -1
- package/dist/tui/permission-review.d.ts.map +1 -1
- package/dist/tui/permission-review.js +228 -22
- package/dist/tui/permission-review.js.map +1 -1
- package/dist/tui/schedule/host-commands.d.ts +34 -0
- package/dist/tui/schedule/host-commands.d.ts.map +1 -0
- package/dist/tui/schedule/host-commands.js +310 -0
- package/dist/tui/schedule/host-commands.js.map +1 -0
- package/dist/tui/schedule/integration.d.ts +62 -0
- package/dist/tui/schedule/integration.d.ts.map +1 -0
- package/dist/tui/schedule/integration.js +145 -0
- package/dist/tui/schedule/integration.js.map +1 -0
- package/dist/tui/schedule/loop-host.d.ts +42 -0
- package/dist/tui/schedule/loop-host.d.ts.map +1 -0
- package/dist/tui/schedule/loop-host.js +153 -0
- package/dist/tui/schedule/loop-host.js.map +1 -0
- package/dist/tui/schedule/resume.d.ts +122 -0
- package/dist/tui/schedule/resume.d.ts.map +1 -0
- package/dist/tui/schedule/resume.js +324 -0
- package/dist/tui/schedule/resume.js.map +1 -0
- package/dist/tui/schedule/startup.d.ts +11 -0
- package/dist/tui/schedule/startup.d.ts.map +1 -0
- package/dist/tui/schedule/startup.js +121 -0
- package/dist/tui/schedule/startup.js.map +1 -0
- package/dist/tui/schedule/tool-host.d.ts +58 -0
- package/dist/tui/schedule/tool-host.d.ts.map +1 -0
- package/dist/tui/schedule/tool-host.js +479 -0
- package/dist/tui/schedule/tool-host.js.map +1 -0
- package/dist/tui/skills/learning.d.ts +74 -0
- package/dist/tui/skills/learning.d.ts.map +1 -0
- package/dist/tui/skills/learning.js +131 -0
- package/dist/tui/skills/learning.js.map +1 -0
- package/dist/tui/skills/suggest-setting.d.ts +22 -0
- package/dist/tui/skills/suggest-setting.d.ts.map +1 -0
- package/dist/tui/skills/suggest-setting.js +55 -0
- package/dist/tui/skills/suggest-setting.js.map +1 -0
- package/dist/tui/skills/suggestion-ledger.d.ts +35 -0
- package/dist/tui/skills/suggestion-ledger.d.ts.map +1 -0
- package/dist/tui/skills/suggestion-ledger.js +52 -0
- package/dist/tui/skills/suggestion-ledger.js.map +1 -0
- package/dist/tui/slashCommands.d.ts +20 -0
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +76 -2
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/turn-interruption.d.ts +20 -1
- package/dist/tui/turn-interruption.d.ts.map +1 -1
- package/dist/tui/turn-interruption.js +43 -0
- package/dist/tui/turn-interruption.js.map +1 -1
- package/dist/tui/types.d.ts +9 -1
- package/dist/tui/types.d.ts.map +1 -1
- package/package.json +7 -5
- package/skills/README.md +20 -0
- package/skills/browser-automation/SKILL.md +84 -0
- package/skills/schedule-task/SKILL.md +146 -0
- package/skills/skill-creator/SKILL.md +101 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `namzu schedule __fire`: one scheduled run, as a headless turn in the
|
|
3
|
+
* job's folder. Started only by the daemon (or `schedule run-now` without
|
|
4
|
+
* one), never by hand, and not listed in help.
|
|
5
|
+
*
|
|
6
|
+
* It composes what `exec` composes — trust, the project's config, a new
|
|
7
|
+
* conversation, `createAgentSession`, `send`, the provider wait — without
|
|
8
|
+
* sharing `exec`'s runner: `exec` resolves `prompt` into `auto` because
|
|
9
|
+
* nobody can answer, and a scheduled run must do the opposite. Here every
|
|
10
|
+
* batch that would reach a person is HELD (`SendOptions.reviewHold`): the
|
|
11
|
+
* turn parks durably, the run records `awaiting-approval`, and the operator
|
|
12
|
+
* answers later in the TUI.
|
|
13
|
+
*
|
|
14
|
+
* Checks before any model call, each ending the run as `blocked-config` with
|
|
15
|
+
* zero tokens spent: the job still exists at the revision the daemon
|
|
16
|
+
* claimed, is active and still matches its confirmation; the folder is the
|
|
17
|
+
* canonical folder trust was granted for and can be listed; the project's
|
|
18
|
+
* code-executing config is the one confirmed; every permission rule compiles;
|
|
19
|
+
* the pinned provider has a credential in the service's environment.
|
|
20
|
+
*
|
|
21
|
+
* The child's own watchdog enforces the wall clock: the kernel's turn
|
|
22
|
+
* timeout first, then, a minute later, it releases its session lease and
|
|
23
|
+
* exits. The daemon never kills a run by a pid it read from disk.
|
|
24
|
+
*/
|
|
25
|
+
import type { CommandContext } from '../../commands/types.js';
|
|
26
|
+
import type { SchedulePaths } from '../paths.js';
|
|
27
|
+
import type { ScheduleJob, ScheduleRunTrigger } from '../types.js';
|
|
28
|
+
import { browserPreflight } from './browser-preflight.js';
|
|
29
|
+
export declare const HOLD_REASON = "Scheduled run: waiting for the operator to approve";
|
|
30
|
+
/** How long past the turn's own timeout the child waits before it stops itself. */
|
|
31
|
+
export declare const WATCHDOG_GRACE_MS = 60000;
|
|
32
|
+
export interface FireArgs {
|
|
33
|
+
readonly jobId: string;
|
|
34
|
+
readonly runId: string;
|
|
35
|
+
readonly key: string;
|
|
36
|
+
readonly revision: number;
|
|
37
|
+
readonly trigger: ScheduleRunTrigger;
|
|
38
|
+
readonly scheduledFor?: string;
|
|
39
|
+
readonly daemonEpoch?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function parseFireArgs(argv: readonly string[]): FireArgs | {
|
|
42
|
+
error: string;
|
|
43
|
+
};
|
|
44
|
+
export declare const BORROWED_CREDENTIAL_WARNING = "This run used another program's sign-in. Refreshing it here can race that program's own refresh; store a credential with `namzu login` or daemon.env for unattended runs.";
|
|
45
|
+
export interface FireDependencies {
|
|
46
|
+
/** The environment the service gave this process; read, never modified. */
|
|
47
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
48
|
+
/** Test seam: the agent module. */
|
|
49
|
+
readonly agent?: Pick<typeof import('../../tui/agent.js'), 'probeAgentSession' | 'createAgentSession'>;
|
|
50
|
+
/** Test seam: stop the process after the watchdog grace. */
|
|
51
|
+
readonly exit?: (code: number) => void;
|
|
52
|
+
readonly now?: () => Date;
|
|
53
|
+
/** Test seam: how long past the turn timeout the watchdog waits. */
|
|
54
|
+
readonly graceMs?: number;
|
|
55
|
+
/** Test seam: leave the process's logging as it is. */
|
|
56
|
+
readonly keepLogging?: boolean;
|
|
57
|
+
/** Test seam: whether the job's browser can run (see `browser-preflight.ts`). */
|
|
58
|
+
readonly browserPreflight?: typeof browserPreflight;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Run one fire. Returns the exit code; the result file is the record. Exit
|
|
62
|
+
* codes follow `exec`: 0 completed or parked, 1 failed, 64 usage, 75 the
|
|
63
|
+
* provider stayed unavailable, 77 the folder is not trusted for this job.
|
|
64
|
+
*/
|
|
65
|
+
export declare function runFire(ctx: CommandContext, paths: SchedulePaths, args: FireArgs, deps?: FireDependencies): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* What a parked run tells the operator it needs: the tool's reason, and for
|
|
68
|
+
* the browser the command that signs in again. "http://… is showing a
|
|
69
|
+
* sign-in page" alone, in a notification and `schedule list`, left what to
|
|
70
|
+
* do unsaid.
|
|
71
|
+
*/
|
|
72
|
+
export declare function handoffReason(handoff: {
|
|
73
|
+
readonly reason: string;
|
|
74
|
+
readonly detail?: Readonly<Record<string, string>>;
|
|
75
|
+
}): string;
|
|
76
|
+
/** A one-line description for logs and notifications; never the prompt. */
|
|
77
|
+
export declare function describeJob(job: ScheduleJob): string;
|
|
78
|
+
//# sourceMappingURL=fire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire.d.ts","sourceRoot":"","sources":["../../../src/schedule/fire/fire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAgB7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,OAAO,KAAK,EACX,WAAW,EAGX,kBAAkB,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAyB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAKhF,eAAO,MAAM,WAAW,uDAAuD,CAAA;AAC/E,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA2BnF;AAyBD,eAAO,MAAM,2BAA2B,8KACoI,CAAA;AAE5K,MAAM,WAAW,gBAAgB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAChC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CACpB,cAAc,oBAAoB,CAAC,EACnC,mBAAmB,GAAG,oBAAoB,CAC1C,CAAA;IACD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAA;CACnD;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC5B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE,gBAAqB,GACzB,OAAO,CAAC,MAAM,CAAC,CAuYjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD,GAAG,MAAM,CAGT;AAcD,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `namzu schedule __fire`: one scheduled run, as a headless turn in the
|
|
3
|
+
* job's folder. Started only by the daemon (or `schedule run-now` without
|
|
4
|
+
* one), never by hand, and not listed in help.
|
|
5
|
+
*
|
|
6
|
+
* It composes what `exec` composes — trust, the project's config, a new
|
|
7
|
+
* conversation, `createAgentSession`, `send`, the provider wait — without
|
|
8
|
+
* sharing `exec`'s runner: `exec` resolves `prompt` into `auto` because
|
|
9
|
+
* nobody can answer, and a scheduled run must do the opposite. Here every
|
|
10
|
+
* batch that would reach a person is HELD (`SendOptions.reviewHold`): the
|
|
11
|
+
* turn parks durably, the run records `awaiting-approval`, and the operator
|
|
12
|
+
* answers later in the TUI.
|
|
13
|
+
*
|
|
14
|
+
* Checks before any model call, each ending the run as `blocked-config` with
|
|
15
|
+
* zero tokens spent: the job still exists at the revision the daemon
|
|
16
|
+
* claimed, is active and still matches its confirmation; the folder is the
|
|
17
|
+
* canonical folder trust was granted for and can be listed; the project's
|
|
18
|
+
* code-executing config is the one confirmed; every permission rule compiles;
|
|
19
|
+
* the pinned provider has a credential in the service's environment.
|
|
20
|
+
*
|
|
21
|
+
* The child's own watchdog enforces the wall clock: the kernel's turn
|
|
22
|
+
* timeout first, then, a minute later, it releases its session lease and
|
|
23
|
+
* exits. The daemon never kills a run by a pid it read from disk.
|
|
24
|
+
*/
|
|
25
|
+
import { hostname } from 'node:os';
|
|
26
|
+
import { TurnCancelled, asSessionId, describeSchedule, hostTimeZone, releaseHeldSessionLeases, } from '@namzu/sdk';
|
|
27
|
+
import { pauseWait } from '../../commands/provider-wait.js';
|
|
28
|
+
import { readPermissionLayers } from '../../config/load.js';
|
|
29
|
+
import { resolveTrustedProjectContext } from '../../config/trusted-project-context.js';
|
|
30
|
+
import { sanitizeLine, summaryOf } from '../../integrations/notifications/desktop/sanitize.js';
|
|
31
|
+
import { closeSessions, openSessions, setTitle, startConversation, } from '../../integrations/sessions/store.js';
|
|
32
|
+
import { cliLogger, createStderrSink, installCliLogging } from '../../logging.js';
|
|
33
|
+
import { describeTurnInterruption, retryAfterMs } from '../../tui/turn-interruption.js';
|
|
34
|
+
import { readDaemonEnv } from '../env.js';
|
|
35
|
+
import { checkJobFolder, folderReadable } from '../folder.js';
|
|
36
|
+
import { compileJobPolicy, withheldTools } from '../policy.js';
|
|
37
|
+
import { computeProjectDigest, projectDigestChanges } from '../store/digest.js';
|
|
38
|
+
import { confirmationHolds, readJob } from '../store/jobs.js';
|
|
39
|
+
import { browserPreflight } from './browser-preflight.js';
|
|
40
|
+
import { CallTally } from './calls.js';
|
|
41
|
+
import { writeRunResult } from './result.js';
|
|
42
|
+
import { unattendedNote } from './unattended-note.js';
|
|
43
|
+
export const HOLD_REASON = 'Scheduled run: waiting for the operator to approve';
|
|
44
|
+
/** How long past the turn's own timeout the child waits before it stops itself. */
|
|
45
|
+
export const WATCHDOG_GRACE_MS = 60_000;
|
|
46
|
+
export function parseFireArgs(argv) {
|
|
47
|
+
const get = (name) => {
|
|
48
|
+
const at = argv.indexOf(`--${name}`);
|
|
49
|
+
return at >= 0 ? argv[at + 1] : undefined;
|
|
50
|
+
};
|
|
51
|
+
const jobId = get('job');
|
|
52
|
+
const runId = get('run');
|
|
53
|
+
const key = get('key');
|
|
54
|
+
const revision = Number(get('revision'));
|
|
55
|
+
const trigger = (get('trigger') ?? 'scheduled');
|
|
56
|
+
if (!jobId || !runId || !key || !Number.isSafeInteger(revision)) {
|
|
57
|
+
return { error: '__fire needs --job, --run, --key and --revision' };
|
|
58
|
+
}
|
|
59
|
+
if (!['scheduled', 'late', 'catch-up', 'manual'].includes(trigger)) {
|
|
60
|
+
return { error: `__fire: unknown trigger ${trigger}` };
|
|
61
|
+
}
|
|
62
|
+
const scheduledFor = get('scheduled-for');
|
|
63
|
+
const daemonEpoch = get('epoch');
|
|
64
|
+
return {
|
|
65
|
+
jobId,
|
|
66
|
+
runId,
|
|
67
|
+
key,
|
|
68
|
+
revision,
|
|
69
|
+
trigger,
|
|
70
|
+
...(scheduledFor ? { scheduledFor } : {}),
|
|
71
|
+
...(daemonEpoch ? { daemonEpoch } : {}),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Where a credential came from, in words, and whether it is another program's. */
|
|
75
|
+
function credentialSource(source) {
|
|
76
|
+
switch (source.kind) {
|
|
77
|
+
case 'env':
|
|
78
|
+
return { text: `environment variable ${source.envName ?? ''}`.trim(), borrowed: false };
|
|
79
|
+
case 'claude-file':
|
|
80
|
+
return { text: `Claude Code's sign-in (${source.path ?? ''})`, borrowed: true };
|
|
81
|
+
case 'codex-file':
|
|
82
|
+
return { text: `Codex's sign-in (${source.path ?? ''})`, borrowed: true };
|
|
83
|
+
case 'gemini-file':
|
|
84
|
+
return { text: `Gemini CLI's sign-in (${source.path ?? ''})`, borrowed: true };
|
|
85
|
+
case 'stored':
|
|
86
|
+
return { text: `namzu's credential store (${source.path ?? ''})`, borrowed: false };
|
|
87
|
+
case 'keychain':
|
|
88
|
+
return { text: 'the system keychain', borrowed: true };
|
|
89
|
+
default:
|
|
90
|
+
return { text: source.kind, borrowed: false };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export const BORROWED_CREDENTIAL_WARNING = "This run used another program's sign-in. Refreshing it here can race that program's own refresh; store a credential with `namzu login` or daemon.env for unattended runs.";
|
|
94
|
+
/**
|
|
95
|
+
* Run one fire. Returns the exit code; the result file is the record. Exit
|
|
96
|
+
* codes follow `exec`: 0 completed or parked, 1 failed, 64 usage, 75 the
|
|
97
|
+
* provider stayed unavailable, 77 the folder is not trusted for this job.
|
|
98
|
+
*/
|
|
99
|
+
export async function runFire(ctx, paths, args, deps = {}) {
|
|
100
|
+
const now = deps.now ?? (() => new Date());
|
|
101
|
+
const startedAt = now().toISOString();
|
|
102
|
+
if (!deps.keepLogging)
|
|
103
|
+
installCliLogging(createStderrSink('json'), 'info');
|
|
104
|
+
const log = cliLogger();
|
|
105
|
+
let sessionId;
|
|
106
|
+
let projectSlug;
|
|
107
|
+
let turnId;
|
|
108
|
+
const warnings = [];
|
|
109
|
+
const found = {};
|
|
110
|
+
let calls = new CallTally();
|
|
111
|
+
const base = () => ({
|
|
112
|
+
v: 1,
|
|
113
|
+
kind: 'schedule-run-result',
|
|
114
|
+
runId: args.runId,
|
|
115
|
+
jobId: args.jobId,
|
|
116
|
+
startedAt,
|
|
117
|
+
...(sessionId ? { sessionId } : {}),
|
|
118
|
+
...(projectSlug ? { projectSlug } : {}),
|
|
119
|
+
...(turnId ? { turnId } : {}),
|
|
120
|
+
...(found.credential ? { credentialSource: found.credential } : {}),
|
|
121
|
+
...(warnings.length > 0 ? { warnings: [...warnings] } : {}),
|
|
122
|
+
...calls.tallies(),
|
|
123
|
+
});
|
|
124
|
+
// Once the watchdog has recorded the wall clock, nothing after it rewrites the result.
|
|
125
|
+
let settledByWatchdog = false;
|
|
126
|
+
const finish = (status, exitCode, extra = {}) => {
|
|
127
|
+
if (settledByWatchdog)
|
|
128
|
+
return 1;
|
|
129
|
+
writeRunResult(paths, { ...base(), status, exitCode, endedAt: now().toISOString(), ...extra });
|
|
130
|
+
log.info('scheduled run finished', {
|
|
131
|
+
'namzu.schedule.job_id': args.jobId,
|
|
132
|
+
'namzu.schedule.run_id': args.runId,
|
|
133
|
+
'namzu.schedule.status': status,
|
|
134
|
+
});
|
|
135
|
+
return exitCode;
|
|
136
|
+
};
|
|
137
|
+
const blocked = (reason, exitCode = 1) => finish('blocked-config', exitCode, { reason });
|
|
138
|
+
writeRunResult(paths, { ...base(), status: 'running', exitCode: 0 });
|
|
139
|
+
// ── the job, as claimed ───────────────────────────────────────────────
|
|
140
|
+
let job;
|
|
141
|
+
try {
|
|
142
|
+
job = readJob(paths, args.jobId);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return blocked(error instanceof Error ? error.message : String(error));
|
|
146
|
+
}
|
|
147
|
+
if (!job)
|
|
148
|
+
return blocked('the job was removed before the run started');
|
|
149
|
+
if (job.revision !== args.revision) {
|
|
150
|
+
return blocked(`job changed: revision ${job.revision}, the run was claimed for ${args.revision}`);
|
|
151
|
+
}
|
|
152
|
+
if (job.state !== 'active')
|
|
153
|
+
return blocked(`the job is ${job.state}`);
|
|
154
|
+
if (!confirmationHolds(job)) {
|
|
155
|
+
return blocked(`job changed outside namzu since it was confirmed; run namzu schedule confirm ${job.name}`);
|
|
156
|
+
}
|
|
157
|
+
// ── the folder, as trusted ────────────────────────────────────────────
|
|
158
|
+
const folder = checkJobFolder(job.folder.path, { namzuHome: paths.home });
|
|
159
|
+
if (!folder.ok)
|
|
160
|
+
return blocked(folder.reason, 77);
|
|
161
|
+
if (folder.canonical !== job.folder.canonical || job.trust?.canonical !== folder.canonical) {
|
|
162
|
+
return blocked(`folder moved or replaced: ${job.folder.path} is now ${folder.canonical}, the job was confirmed for ${job.folder.canonical}`, 77);
|
|
163
|
+
}
|
|
164
|
+
const readable = folderReadable(folder.canonical);
|
|
165
|
+
if (!readable.ok)
|
|
166
|
+
return blocked(readable.reason);
|
|
167
|
+
const changed = projectDigestChanges(job.projectDigest, computeProjectDigest(folder.canonical));
|
|
168
|
+
if (changed.length > 0) {
|
|
169
|
+
return blocked(`project config changed since the job was confirmed (${changed.join(', ')}); run namzu schedule confirm ${job.name}`);
|
|
170
|
+
}
|
|
171
|
+
// ── what the run may do ───────────────────────────────────────────────
|
|
172
|
+
let projectCtx;
|
|
173
|
+
let layers;
|
|
174
|
+
try {
|
|
175
|
+
projectCtx = resolveTrustedProjectContext(ctx, folder.canonical);
|
|
176
|
+
// The user config is the scheduler's home's, whatever NAMZU_HOME the
|
|
177
|
+
// environment given to the run names (or leaves unset).
|
|
178
|
+
layers = readPermissionLayers({
|
|
179
|
+
cwd: folder.canonical,
|
|
180
|
+
env: { ...(deps.env ?? process.env), NAMZU_HOME: paths.home },
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return blocked(`config cannot be read: ${error instanceof Error ? error.message : String(error)}`);
|
|
185
|
+
}
|
|
186
|
+
const policy = compileJobPolicy(job.permissions, {
|
|
187
|
+
layers,
|
|
188
|
+
namzuHome: paths.home,
|
|
189
|
+
folder: job.folder,
|
|
190
|
+
});
|
|
191
|
+
if (policy.diagnostics.length > 0) {
|
|
192
|
+
// A rule someone believes is in force and that would be dropped is
|
|
193
|
+
// worse than not running.
|
|
194
|
+
return blocked(`permission rules do not compile: ${policy.diagnostics.join('; ')}`);
|
|
195
|
+
}
|
|
196
|
+
// ── the browser, when the job has one ─────────────────────────────────
|
|
197
|
+
const grant = job.permissions.browser;
|
|
198
|
+
let browser;
|
|
199
|
+
if (grant) {
|
|
200
|
+
const checked = await (deps.browserPreflight ?? browserPreflight)(grant, paths.home, {
|
|
201
|
+
env: deps.env ?? process.env,
|
|
202
|
+
});
|
|
203
|
+
if (!checked.ok)
|
|
204
|
+
return blocked(checked.reason);
|
|
205
|
+
browser = checked;
|
|
206
|
+
warnings.push(...checked.warnings);
|
|
207
|
+
}
|
|
208
|
+
// ── the provider, as the service sees it ──────────────────────────────
|
|
209
|
+
const daemonEnv = readDaemonEnv(paths.daemonEnv);
|
|
210
|
+
warnings.push(...daemonEnv.warnings);
|
|
211
|
+
const discoveryEnv = { ...(deps.env ?? process.env), ...daemonEnv.values };
|
|
212
|
+
const agent = deps.agent ?? (await import('../../tui/agent.js'));
|
|
213
|
+
const probe = await agent.probeAgentSession({ env: discoveryEnv });
|
|
214
|
+
const detected = probe.detected.find((d) => d.entry.id === job.model.provider);
|
|
215
|
+
if (!detected) {
|
|
216
|
+
return blocked(`no credential for ${job.model.provider} in the scheduler's environment; run namzu login, or put the key in ${paths.daemonEnv}`);
|
|
217
|
+
}
|
|
218
|
+
const source = credentialSource(detected.source);
|
|
219
|
+
found.credential = source.text;
|
|
220
|
+
if (source.borrowed)
|
|
221
|
+
warnings.push(BORROWED_CREDENTIAL_WARNING);
|
|
222
|
+
const prefs = {
|
|
223
|
+
version: 3,
|
|
224
|
+
providers: [
|
|
225
|
+
{
|
|
226
|
+
id: job.model.provider,
|
|
227
|
+
...(job.model.model ? { model: job.model.model } : {}),
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
subagents: { active: [] },
|
|
231
|
+
};
|
|
232
|
+
const withheld = withheldTools(job.permissions, policy);
|
|
233
|
+
calls = new CallTally(withheld);
|
|
234
|
+
// ── the conversation ──────────────────────────────────────────────────
|
|
235
|
+
let sessions;
|
|
236
|
+
try {
|
|
237
|
+
sessions = await openSessions(folder.canonical, { stateRoot: paths.home });
|
|
238
|
+
projectSlug = sessions.slug;
|
|
239
|
+
sessionId = await startConversation(sessions, {
|
|
240
|
+
origin: { protocol: 'cli', kind: 'prompt' },
|
|
241
|
+
});
|
|
242
|
+
const when = args.scheduledFor ?? startedAt;
|
|
243
|
+
const tz = job.schedule.kind === 'cron' ? job.schedule.tz : undefined;
|
|
244
|
+
await setTitle(sessions, asSessionId(sessionId), `⏲ ${job.name} · ${describeWhen(when, tz)}`);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return finish('failed', 1, {
|
|
248
|
+
reason: `the conversation could not be started: ${error instanceof Error ? error.message : String(error)}`,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
writeRunResult(paths, { ...base(), status: 'running', exitCode: 0 });
|
|
252
|
+
const config = projectCtx.config;
|
|
253
|
+
const session = await agent.createAgentSession(prefs, [detected], {
|
|
254
|
+
cwd: folder.canonical,
|
|
255
|
+
stateRoot: paths.home,
|
|
256
|
+
conversationSessions: sessions,
|
|
257
|
+
scope: {
|
|
258
|
+
sessionId: asSessionId(sessionId),
|
|
259
|
+
topicId: sessions.topicId,
|
|
260
|
+
projectId: sessions.projectId,
|
|
261
|
+
tenantId: sessions.tenantId,
|
|
262
|
+
},
|
|
263
|
+
rules: policy.rules,
|
|
264
|
+
permissionMode: policy.mode,
|
|
265
|
+
withheldTools: withheld,
|
|
266
|
+
...(config.mcpServers ? { mcpServers: config.mcpServers } : {}),
|
|
267
|
+
...(config.plugins ? { plugins: config.plugins } : {}),
|
|
268
|
+
...(config.skills ? { skills: config.skills } : {}),
|
|
269
|
+
...(config.hooks ? { hooks: config.hooks } : {}),
|
|
270
|
+
...(policy.network && config.web ? { web: config.web } : {}),
|
|
271
|
+
...(config.compaction ? { compaction: config.compaction } : {}),
|
|
272
|
+
...(config.memory ? { memory: config.memory } : {}),
|
|
273
|
+
sandbox: job.permissions.execution === 'sandbox'
|
|
274
|
+
? { ...(config.sandbox ?? {}), enabled: true }
|
|
275
|
+
: { enabled: false },
|
|
276
|
+
...(job.permissions.additionalDirectories
|
|
277
|
+
? { additionalDirectories: [...job.permissions.additionalDirectories] }
|
|
278
|
+
: {}),
|
|
279
|
+
...(grant && browser
|
|
280
|
+
? {
|
|
281
|
+
browser: {
|
|
282
|
+
profile: grant.profile,
|
|
283
|
+
engine: browser.engine,
|
|
284
|
+
headless: grant.headed ? 'never' : 'always',
|
|
285
|
+
// The host checks every landing against the same sites the
|
|
286
|
+
// gate was given: the grant, what a config file denies, and
|
|
287
|
+
// nothing else.
|
|
288
|
+
sites: {
|
|
289
|
+
...grant.sites,
|
|
290
|
+
...Object.fromEntries(layers.flatMap((layer) => layer.browserDenies ?? []).map((site) => [site, 'deny'])),
|
|
291
|
+
'*': 'deny',
|
|
292
|
+
},
|
|
293
|
+
home: paths.home,
|
|
294
|
+
mode: 'unattended',
|
|
295
|
+
},
|
|
296
|
+
}
|
|
297
|
+
: {}),
|
|
298
|
+
limits: {
|
|
299
|
+
maxIterations: job.budget.maxIterations,
|
|
300
|
+
tokenBudget: job.budget.tokenBudget,
|
|
301
|
+
timeoutMs: job.budget.timeoutMs,
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
const closeAll = async () => {
|
|
305
|
+
await session.close().catch(() => undefined);
|
|
306
|
+
closeSessions(sessions);
|
|
307
|
+
};
|
|
308
|
+
if (!session.hasProvider) {
|
|
309
|
+
await closeAll();
|
|
310
|
+
return blocked(session.errorHint ?? 'the provider could not be started');
|
|
311
|
+
}
|
|
312
|
+
if (session.mcpFailed.length > 0) {
|
|
313
|
+
await closeAll();
|
|
314
|
+
return blocked(`tool servers unavailable: ${session.mcpFailed.map((f) => `${f.name} (${f.reason})`).join(', ')}`);
|
|
315
|
+
}
|
|
316
|
+
// ── the turn ──────────────────────────────────────────────────────────
|
|
317
|
+
const abort = new AbortController();
|
|
318
|
+
const exit = deps.exit ?? ((code) => process.exit(code));
|
|
319
|
+
const watchdog = setTimeout(() => {
|
|
320
|
+
abort.abort(new TurnCancelled('user'));
|
|
321
|
+
void (async () => {
|
|
322
|
+
finish('timed-out', 1, {
|
|
323
|
+
reason: `the run exceeded its ${job.budget.timeoutMs} ms wall clock`,
|
|
324
|
+
});
|
|
325
|
+
settledByWatchdog = true;
|
|
326
|
+
await releaseHeldSessionLeases().catch(() => undefined);
|
|
327
|
+
exit(1);
|
|
328
|
+
})();
|
|
329
|
+
}, job.budget.timeoutMs + (deps.graceMs ?? WATCHDOG_GRACE_MS));
|
|
330
|
+
watchdog.unref();
|
|
331
|
+
let text = '';
|
|
332
|
+
let totalTokens;
|
|
333
|
+
let costUsd;
|
|
334
|
+
let paused = null;
|
|
335
|
+
let failed = null;
|
|
336
|
+
let stopReason;
|
|
337
|
+
const consume = async (stream) => {
|
|
338
|
+
paused = null;
|
|
339
|
+
failed = null;
|
|
340
|
+
for await (const event of stream) {
|
|
341
|
+
switch (event.kind) {
|
|
342
|
+
case 'delta':
|
|
343
|
+
text += event.text;
|
|
344
|
+
break;
|
|
345
|
+
case 'usage':
|
|
346
|
+
totalTokens = event.totalTokens;
|
|
347
|
+
costUsd = event.cost?.totalCost;
|
|
348
|
+
break;
|
|
349
|
+
case 'paused':
|
|
350
|
+
paused = event;
|
|
351
|
+
turnId = event.turnId;
|
|
352
|
+
failed = describeTurnInterruption(event);
|
|
353
|
+
break;
|
|
354
|
+
case 'error':
|
|
355
|
+
failed = describeTurnInterruption(event);
|
|
356
|
+
break;
|
|
357
|
+
case 'done':
|
|
358
|
+
if (event.text !== undefined)
|
|
359
|
+
text = event.text;
|
|
360
|
+
stopReason = event.stopReason;
|
|
361
|
+
if (event.turnId)
|
|
362
|
+
turnId = event.turnId;
|
|
363
|
+
break;
|
|
364
|
+
case 'tool-start':
|
|
365
|
+
log.info('scheduled run tool call', {
|
|
366
|
+
'namzu.schedule.run_id': args.runId,
|
|
367
|
+
'namzu.tool.name': event.toolName,
|
|
368
|
+
});
|
|
369
|
+
break;
|
|
370
|
+
case 'tool-end':
|
|
371
|
+
calls.observe(event);
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
try {
|
|
377
|
+
await consume(session.send([{ role: 'user', content: job.prompt, timestamp: Date.now() }], {
|
|
378
|
+
signal: abort.signal,
|
|
379
|
+
permissionMode: policy.mode,
|
|
380
|
+
reviewHold: { reason: HOLD_REASON },
|
|
381
|
+
systemNote: unattendedNote(job.name, {
|
|
382
|
+
browser: grant !== undefined,
|
|
383
|
+
now: now(),
|
|
384
|
+
tz: job.schedule.kind === 'cron' ? job.schedule.tz : hostTimeZone(),
|
|
385
|
+
}),
|
|
386
|
+
...(job.model.effort ? { effort: job.model.effort } : {}),
|
|
387
|
+
}));
|
|
388
|
+
// A provider pause is waited out inside the job's budget, from the
|
|
389
|
+
// checkpoint, as `exec --wait-for-provider` does.
|
|
390
|
+
let waits = 0;
|
|
391
|
+
let waitedMs = 0;
|
|
392
|
+
for (;;) {
|
|
393
|
+
const current = paused;
|
|
394
|
+
if (!current || !(current.providerError || current.failure))
|
|
395
|
+
break;
|
|
396
|
+
const asked = retryAfterMs(current);
|
|
397
|
+
const decision = pauseWait({
|
|
398
|
+
waited: waits,
|
|
399
|
+
...(asked !== undefined ? { retryAfterMs: asked } : {}),
|
|
400
|
+
waitedMs,
|
|
401
|
+
budgetMs: job.budget.waitForProviderMs,
|
|
402
|
+
});
|
|
403
|
+
if (decision.kind === 'stop') {
|
|
404
|
+
await closeAll();
|
|
405
|
+
clearTimeout(watchdog);
|
|
406
|
+
return finish('failed', 75, {
|
|
407
|
+
reason: `${failed ?? 'the provider paused the turn'}; not resumed: ${decision.reason}`,
|
|
408
|
+
...(asked !== undefined ? { retryAfterMs: asked } : {}),
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
waits++;
|
|
412
|
+
await new Promise((resolve) => setTimeout(resolve, decision.delayMs));
|
|
413
|
+
waitedMs += decision.delayMs;
|
|
414
|
+
await consume(session.resumePaused({
|
|
415
|
+
turnId: current.turnId,
|
|
416
|
+
checkpointId: current.checkpointId,
|
|
417
|
+
signal: abort.signal,
|
|
418
|
+
permissionMode: policy.mode,
|
|
419
|
+
reviewHold: { reason: HOLD_REASON },
|
|
420
|
+
}));
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
clearTimeout(watchdog);
|
|
425
|
+
}
|
|
426
|
+
await closeAll();
|
|
427
|
+
const usage = {
|
|
428
|
+
...(totalTokens !== undefined ? { totalTokens } : {}),
|
|
429
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
430
|
+
};
|
|
431
|
+
const withUsage = Object.keys(usage).length > 0 ? { usage } : {};
|
|
432
|
+
const summary = summaryOf(text);
|
|
433
|
+
const parked = paused;
|
|
434
|
+
if (parked) {
|
|
435
|
+
// A tool that asked for a person parks the run the same way a held
|
|
436
|
+
// batch does: the operator continues it from the TUI. The reason is
|
|
437
|
+
// what they have to do, so it is recorded as the reason.
|
|
438
|
+
const handoff = parked.handoff ? sanitizeLine(handoffReason(parked.handoff), 300) : '';
|
|
439
|
+
return finish('awaiting-approval', 0, {
|
|
440
|
+
reason: handoff || parked.reason,
|
|
441
|
+
...(handoff ? { handoff: { reason: handoff } } : {}),
|
|
442
|
+
...(summary ? { summary } : {}),
|
|
443
|
+
...withUsage,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (failed)
|
|
447
|
+
return finish('failed', 1, { reason: failed, ...(summary ? { summary } : {}), ...withUsage });
|
|
448
|
+
if (stopReason === 'timeout') {
|
|
449
|
+
return finish('timed-out', 1, {
|
|
450
|
+
reason: `the turn reached its ${job.budget.timeoutMs} ms time limit`,
|
|
451
|
+
...(summary ? { summary } : {}),
|
|
452
|
+
...withUsage,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
if (stopReason && stopReason !== 'end_turn') {
|
|
456
|
+
return finish('failed', 1, {
|
|
457
|
+
reason: `the turn did not finish normally: ${stopReason}`,
|
|
458
|
+
...(summary ? { summary } : {}),
|
|
459
|
+
...withUsage,
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
return finish('completed', 0, { ...(summary ? { summary } : {}), ...withUsage });
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* What a parked run tells the operator it needs: the tool's reason, and for
|
|
466
|
+
* the browser the command that signs in again. "http://… is showing a
|
|
467
|
+
* sign-in page" alone, in a notification and `schedule list`, left what to
|
|
468
|
+
* do unsaid.
|
|
469
|
+
*/
|
|
470
|
+
export function handoffReason(handoff) {
|
|
471
|
+
const login = handoff.detail?.tool === 'browser' ? handoff.detail.loginCommand : undefined;
|
|
472
|
+
return login ? `${handoff.reason}; sign in again with ${login}` : handoff.reason;
|
|
473
|
+
}
|
|
474
|
+
function describeWhen(iso, tz) {
|
|
475
|
+
try {
|
|
476
|
+
return new Intl.DateTimeFormat('en-GB', {
|
|
477
|
+
dateStyle: 'medium',
|
|
478
|
+
timeStyle: 'short',
|
|
479
|
+
...(tz ? { timeZone: tz } : {}),
|
|
480
|
+
}).format(new Date(iso));
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
return iso;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
/** A one-line description for logs and notifications; never the prompt. */
|
|
487
|
+
export function describeJob(job) {
|
|
488
|
+
return `${job.name} (${describeSchedule(job.schedule, job.schedule.kind === 'cron' ? { tz: job.schedule.tz } : {})}) on ${hostname()}`;
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=fire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire.js","sourceRoot":"","sources":["../../../src/schedule/fire/fire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `schedule/runs/<job-id>/<run-id>.json`: what a fire child leaves behind.
|
|
3
|
+
* Written first when the run starts (so a session id is visible while it
|
|
4
|
+
* runs) and again when it ends. The daemon finalises from this file, never
|
|
5
|
+
* from an exit code alone.
|
|
6
|
+
*/
|
|
7
|
+
import type { SchedulePaths } from '../paths.js';
|
|
8
|
+
import type { ScheduleRunResult } from '../types.js';
|
|
9
|
+
export declare function writeRunResult(paths: SchedulePaths, result: ScheduleRunResult): void;
|
|
10
|
+
export declare function readRunResult(paths: SchedulePaths, jobId: string, runId: string): ScheduleRunResult | undefined;
|
|
11
|
+
/** Whether a result is final (the child is done with it). */
|
|
12
|
+
export declare function isFinal(result: ScheduleRunResult | undefined): boolean;
|
|
13
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/schedule/fire/result.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEpF;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED,6DAA6D;AAC7D,wBAAgB,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAEtE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `schedule/runs/<job-id>/<run-id>.json`: what a fire child leaves behind.
|
|
3
|
+
* Written first when the run starts (so a session id is visible while it
|
|
4
|
+
* runs) and again when it ends. The daemon finalises from this file, never
|
|
5
|
+
* from an exit code alone.
|
|
6
|
+
*/
|
|
7
|
+
import { readVersioned, writeJsonAtomic } from '../store/atomic.js';
|
|
8
|
+
export function writeRunResult(paths, result) {
|
|
9
|
+
writeJsonAtomic(paths.runResult(result.jobId, result.runId), result);
|
|
10
|
+
}
|
|
11
|
+
export function readRunResult(paths, jobId, runId) {
|
|
12
|
+
return readVersioned(paths.runResult(jobId, runId), 'schedule-run-result');
|
|
13
|
+
}
|
|
14
|
+
/** Whether a result is final (the child is done with it). */
|
|
15
|
+
export function isFinal(result) {
|
|
16
|
+
return result !== undefined && result.status !== 'running';
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/schedule/fire/result.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGnE,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,MAAyB;IAC7E,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,KAAoB,EACpB,KAAa,EACb,KAAa;IAEb,OAAO,aAAa,CAAoB,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAA;AAC9F,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,OAAO,CAAC,MAAqC;IAC5D,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAA;AAC3D,CAAC"}
|