@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,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TUI's side of the `schedule` tool: it computes everything the person
|
|
3
|
+
* confirming is shown — from the job the CLI would build, never from the
|
|
4
|
+
* model's words — and asks on the terminal.
|
|
5
|
+
*
|
|
6
|
+
* The confirmation is the TUI's own question, answered with a keypress:
|
|
7
|
+
* "Cancel" is the first (default) choice, and nothing but "Create" or
|
|
8
|
+
* "Create paused" creates a job. A job created here records
|
|
9
|
+
* `confirmation.surface: tool-confirmed`.
|
|
10
|
+
*/
|
|
11
|
+
import { realpathSync } from 'node:fs';
|
|
12
|
+
import { isAbsolute, relative, resolve } from 'node:path';
|
|
13
|
+
import { describeSchedule, hostTimeZone, revealHiddenCharacters, upcomingFireTimes, validateTimeZone, } from '@namzu/sdk';
|
|
14
|
+
import { readPermissionLayers } from '../../config/load.js';
|
|
15
|
+
import { discoverProviders } from '../../integrations/providers/discover.js';
|
|
16
|
+
import { DEFAULT_MAX_ITERATIONS, DEFAULT_TIMEOUT_MS, DEFAULT_TOKEN_BUDGET, JobRequestError, buildJob, confirmJob, editedJob, previewLines, runsPerDay, } from '../../schedule/build.js';
|
|
17
|
+
import { changesBlock, changesSinceConfirmed, confirmationView, describeChanges, permissionsChanged, } from '../../schedule/changes.js';
|
|
18
|
+
import { callsCount } from '../../schedule/fire/calls.js';
|
|
19
|
+
import { schedulePaths } from '../../schedule/paths.js';
|
|
20
|
+
import { compileJobPolicy, } from '../../schedule/policy.js';
|
|
21
|
+
import { readManifest } from '../../schedule/service/manifest.js';
|
|
22
|
+
import { appendHistory, readHistory } from '../../schedule/store/history.js';
|
|
23
|
+
import { ScheduleConflictError, createJob, deleteJob, findJob, listJobs, updateJob, } from '../../schedule/store/jobs.js';
|
|
24
|
+
import { nextFireOf, readState } from '../../schedule/store/state.js';
|
|
25
|
+
function within(root, path) {
|
|
26
|
+
const rel = relative(root, path);
|
|
27
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
28
|
+
}
|
|
29
|
+
/** The session's folder as a job records its own: canonical, symbolic links resolved. */
|
|
30
|
+
function canonicalCwd(cwd) {
|
|
31
|
+
try {
|
|
32
|
+
return realpathSync(cwd);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return resolve(cwd);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** A job as the tool reports it; `here` when it runs in the session's folder, which alone shows its prompt. */
|
|
39
|
+
function summary(job, here, home) {
|
|
40
|
+
const tz = job.schedule.kind === 'cron' ? job.schedule.tz : hostTimeZone();
|
|
41
|
+
const state = readState(schedulePaths(home), job.id);
|
|
42
|
+
return {
|
|
43
|
+
name: job.name,
|
|
44
|
+
folder: job.folder.canonical,
|
|
45
|
+
state: job.state,
|
|
46
|
+
schedule: describeSchedule(job.schedule, { tz }),
|
|
47
|
+
...(nextFireOf(job, state) ? { nextFireAt: nextFireOf(job, state) } : {}),
|
|
48
|
+
...(state.lastRun
|
|
49
|
+
? {
|
|
50
|
+
lastStatus: callsCount(state.lastRun)
|
|
51
|
+
? `${state.lastRun.status} (${callsCount(state.lastRun)})`
|
|
52
|
+
: state.lastRun.status,
|
|
53
|
+
}
|
|
54
|
+
: {}),
|
|
55
|
+
...(here ? { prompt: job.prompt, inSessionFolder: true } : {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function credentialText(provider) {
|
|
59
|
+
try {
|
|
60
|
+
const found = (await discoverProviders({ skipProbes: true })).find((d) => d.entry.id === provider);
|
|
61
|
+
if (!found)
|
|
62
|
+
return `no ${provider} credential found here; the scheduler must find one (namzu login or daemon.env)`;
|
|
63
|
+
const source = found.source;
|
|
64
|
+
return source.kind === 'env'
|
|
65
|
+
? `environment variable ${source.envName ?? ''} (a service does not see your shell's variables)`
|
|
66
|
+
: `${source.kind}${source.path ? ` (${source.path})` : ''}`;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return 'unknown';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** The preview lines, the credential, the warnings, and the full prompt with hidden characters shown. */
|
|
73
|
+
function confirmationBody(p, findings, lines) {
|
|
74
|
+
return [
|
|
75
|
+
...lines,
|
|
76
|
+
`Credential ${p.credentialSource ?? 'unknown'}`,
|
|
77
|
+
...p.warnings.map((w) => `Warning ${w}`),
|
|
78
|
+
...findings.map((f) => `Warning ${f}`),
|
|
79
|
+
'Prompt (exactly as the run will read it)',
|
|
80
|
+
...revealHiddenCharacters(p.prompt)
|
|
81
|
+
.split('\n')
|
|
82
|
+
.map((l) => ` │ ${l}`),
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
/** The preview lines, the full prompt with hidden characters shown, and the tripwire's findings. */
|
|
86
|
+
export function renderConfirmation(request, lines) {
|
|
87
|
+
return [
|
|
88
|
+
'⏲ PROPOSED BY THE MODEL, NOT BY YOU — a scheduled job that runs later with nobody watching.',
|
|
89
|
+
...confirmationBody(request.preview, request.promptFindings, lines),
|
|
90
|
+
].join('\n');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A change the model proposed: what changes first (`-`/`+` lines, as
|
|
94
|
+
* `schedule edit` shows them), a warning when the permissions change, then
|
|
95
|
+
* the job as it would run, whole.
|
|
96
|
+
*/
|
|
97
|
+
export function renderUpdateConfirmation(request, lines) {
|
|
98
|
+
return [
|
|
99
|
+
`⏲ PROPOSED BY THE MODEL, NOT BY YOU — a change to the scheduled job ${request.preview.name}, which runs later with nobody watching.`,
|
|
100
|
+
...changesBlock(request.changes),
|
|
101
|
+
...(request.permissionsChange
|
|
102
|
+
? [
|
|
103
|
+
'Warning THE PERMISSIONS CHANGE: from its next run the job may do what the rules below allow.',
|
|
104
|
+
]
|
|
105
|
+
: []),
|
|
106
|
+
...confirmationBody(request.preview, request.promptFindings, lines),
|
|
107
|
+
].join('\n');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The request `buildJob` rebuilds a job from, for a change the model
|
|
111
|
+
* proposed: every field it left out as the job has it. A new permission set
|
|
112
|
+
* keeps the job's `execution` unless it names one, and the job's additional
|
|
113
|
+
* directories (which only the operator sets).
|
|
114
|
+
*/
|
|
115
|
+
export function updateRequest(current, changes, cwd) {
|
|
116
|
+
const cron = current.schedule.kind === 'cron' ? current.schedule : undefined;
|
|
117
|
+
let spec;
|
|
118
|
+
if (changes.when === undefined) {
|
|
119
|
+
if (changes.tz === undefined)
|
|
120
|
+
spec = current.schedule;
|
|
121
|
+
else if (cron)
|
|
122
|
+
spec = { ...cron, tz: validateTimeZone(changes.tz) };
|
|
123
|
+
else
|
|
124
|
+
throw new JobRequestError(`a time zone changes only a cron schedule, and "${current.name}" is not one; give when as well.`);
|
|
125
|
+
}
|
|
126
|
+
const tz = changes.tz ?? cron?.tz;
|
|
127
|
+
const dirs = current.permissions.additionalDirectories;
|
|
128
|
+
const kept = dirs && dirs.length > 0 ? { additionalDirectories: [...dirs] } : {};
|
|
129
|
+
const proposed = changes.permissions;
|
|
130
|
+
const permissions = proposed
|
|
131
|
+
? {
|
|
132
|
+
...(proposed.preset ? { preset: proposed.preset } : {}),
|
|
133
|
+
...(proposed.rules ? { rules: proposed.rules } : {}),
|
|
134
|
+
unmatched: proposed.unmatched,
|
|
135
|
+
execution: proposed.execution ?? current.permissions.execution,
|
|
136
|
+
...kept,
|
|
137
|
+
...(proposed.browser ? { browser: proposed.browser } : {}),
|
|
138
|
+
}
|
|
139
|
+
: {
|
|
140
|
+
rules: current.permissions.rules,
|
|
141
|
+
unmatched: current.permissions.unmatched,
|
|
142
|
+
execution: current.permissions.execution,
|
|
143
|
+
...kept,
|
|
144
|
+
...(current.permissions.browser ? { browser: current.permissions.browser } : {}),
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
name: current.name,
|
|
148
|
+
prompt: changes.prompt ?? current.prompt,
|
|
149
|
+
when: changes.when ?? '',
|
|
150
|
+
...(spec ? { spec } : {}),
|
|
151
|
+
folder: changes.folder !== undefined ? resolve(cwd, changes.folder) : current.folder.path,
|
|
152
|
+
...(tz ? { tz } : {}),
|
|
153
|
+
permissions,
|
|
154
|
+
budget: { ...current.budget, ...(changes.budget ?? {}) },
|
|
155
|
+
model: `${current.model.provider}${current.model.model ? `/${current.model.model}` : ''}`,
|
|
156
|
+
...(current.model.effort ? { effort: current.model.effort } : {}),
|
|
157
|
+
includeSummary: current.notify.includeSummary,
|
|
158
|
+
keepSessions: current.retention.keepSessions,
|
|
159
|
+
pauseAfterFailures: current.failurePolicy.pauseAfterFailures,
|
|
160
|
+
approvalTtlMs: current.approvalTtlMs,
|
|
161
|
+
createdBy: current.createdBy,
|
|
162
|
+
// `unmatched: allow` on the host is the operator's choice
|
|
163
|
+
// (`--allow-unattended-host`); a change that keeps the permissions
|
|
164
|
+
// keeps it, and the tool can never propose it.
|
|
165
|
+
allowUnattendedHost: proposed === undefined && current.permissions.unmatched === 'allow',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Each optional value the model set to something other than what the
|
|
170
|
+
* operator would get by leaving it out, in words. Models fill optional fields
|
|
171
|
+
* in: one proposal set the time zone to America/New_York on a machine in
|
|
172
|
+
* Istanbul and ran commands in the sandbox, which nobody had asked for.
|
|
173
|
+
*/
|
|
174
|
+
export function chosenByTheModel(draft, job, cwd, config) {
|
|
175
|
+
const zone = hostTimeZone();
|
|
176
|
+
const limits = config.limits ?? {};
|
|
177
|
+
const out = [];
|
|
178
|
+
if (draft.tz !== undefined && draft.tz !== zone)
|
|
179
|
+
out.push(`time zone ${draft.tz}, not this machine's ${zone}`);
|
|
180
|
+
const session = resolve(cwd);
|
|
181
|
+
if (draft.folder !== undefined && resolve(session, draft.folder) !== session)
|
|
182
|
+
out.push(`folder ${job.folder.canonical}, not this session's`);
|
|
183
|
+
if (draft.permissions.execution === 'sandbox')
|
|
184
|
+
out.push('commands run in the sandbox; the default is this machine');
|
|
185
|
+
const iterations = limits.maxIterations || DEFAULT_MAX_ITERATIONS;
|
|
186
|
+
if (draft.budget?.maxIterations !== undefined && draft.budget.maxIterations !== iterations)
|
|
187
|
+
out.push(`${draft.budget.maxIterations} iterations per run (the default is ${iterations})`);
|
|
188
|
+
const tokens = limits.tokenBudget || DEFAULT_TOKEN_BUDGET;
|
|
189
|
+
if (draft.budget?.tokenBudget !== undefined && draft.budget.tokenBudget !== tokens)
|
|
190
|
+
out.push(`${draft.budget.tokenBudget.toLocaleString('en-US')} tokens per run (the default is ${tokens.toLocaleString('en-US')})`);
|
|
191
|
+
const timeout = limits.timeoutMs || DEFAULT_TIMEOUT_MS;
|
|
192
|
+
if (draft.budget?.timeoutMs !== undefined && draft.budget.timeoutMs !== timeout)
|
|
193
|
+
out.push(`${Math.round(draft.budget.timeoutMs / 1000)} s per run (the default is ${Math.round(timeout / 60_000)} min)`);
|
|
194
|
+
if (draft.permissions.browser?.headed)
|
|
195
|
+
out.push('a visible browser window during each run');
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
198
|
+
export function createScheduleToolHost(ui) {
|
|
199
|
+
const built = new WeakMap();
|
|
200
|
+
const proposedUpdates = new WeakMap();
|
|
201
|
+
/** What the person is shown for a job, every field computed here; `extra` warnings last. */
|
|
202
|
+
const previewOf = async (job, extra, now) => {
|
|
203
|
+
const policy = compileJobPolicy(job.permissions, {
|
|
204
|
+
layers: readPermissionLayers({ cwd: job.folder.canonical }),
|
|
205
|
+
namzuHome: ui.home(),
|
|
206
|
+
folder: job.folder,
|
|
207
|
+
});
|
|
208
|
+
if (policy.diagnostics.length > 0)
|
|
209
|
+
throw new Error(`The rules do not compile: ${policy.diagnostics.join('; ')}`);
|
|
210
|
+
const roots = [ui.cwd(), ...ui.extraRoots()];
|
|
211
|
+
const outside = !roots.some((root) => within(root, job.folder.canonical));
|
|
212
|
+
const perDay = runsPerDay(job.schedule, now);
|
|
213
|
+
const warnings = [
|
|
214
|
+
...(outside
|
|
215
|
+
? ['The folder is outside this session’s working directory and added directories.']
|
|
216
|
+
: []),
|
|
217
|
+
...(policy.network ? ['This run can reach the network.'] : []),
|
|
218
|
+
...(job.permissions.browser
|
|
219
|
+
? [
|
|
220
|
+
`This run drives the browser signed in as you (profile ${job.permissions.browser.profile}) on ${Object.keys(job.permissions.browser.sites).join(', ')}.`,
|
|
221
|
+
]
|
|
222
|
+
: []),
|
|
223
|
+
...extra,
|
|
224
|
+
];
|
|
225
|
+
const preview = {
|
|
226
|
+
name: job.name,
|
|
227
|
+
folder: job.folder.canonical,
|
|
228
|
+
outsideSessionRoots: outside,
|
|
229
|
+
prompt: job.prompt,
|
|
230
|
+
schedule: describeSchedule(job.schedule, {
|
|
231
|
+
tz: job.schedule.kind === 'cron' ? job.schedule.tz : hostTimeZone(),
|
|
232
|
+
}),
|
|
233
|
+
nextFireTimes: upcomingFireTimes(job.schedule, now, 3).map((t) => t.toISOString()),
|
|
234
|
+
rules: policy.lines,
|
|
235
|
+
unmatched: job.permissions.unmatched,
|
|
236
|
+
execution: job.permissions.execution,
|
|
237
|
+
networkAccess: policy.network,
|
|
238
|
+
budget: {
|
|
239
|
+
maxIterations: job.budget.maxIterations,
|
|
240
|
+
tokenBudget: job.budget.tokenBudget,
|
|
241
|
+
timeoutMs: job.budget.timeoutMs,
|
|
242
|
+
},
|
|
243
|
+
...(job.schedule.kind === 'at' ? {} : { dailyTokenCeiling: perDay * job.budget.tokenBudget }),
|
|
244
|
+
model: `${job.model.provider}${job.model.model ? `/${job.model.model}` : ''}`,
|
|
245
|
+
credentialSource: await credentialText(job.model.provider),
|
|
246
|
+
warnings,
|
|
247
|
+
};
|
|
248
|
+
return { preview, policy };
|
|
249
|
+
};
|
|
250
|
+
const NOT_INSTALLED_NOTE = 'No scheduler is installed on this machine, so the job does not run until the operator runs `namzu schedule install`. Tell them; do not say it will run.';
|
|
251
|
+
const paths = () => schedulePaths(ui.home());
|
|
252
|
+
const history = (job, action) => appendHistory(paths(), job.id, {
|
|
253
|
+
v: 1,
|
|
254
|
+
kind: 'job',
|
|
255
|
+
at: new Date().toISOString(),
|
|
256
|
+
action,
|
|
257
|
+
by: 'tool',
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
// The job stores the grant, the fire enforces it, and the
|
|
261
|
+
// confirmation shows it line by line, so the model may propose one.
|
|
262
|
+
browserGrants: true,
|
|
263
|
+
async preview(draft) {
|
|
264
|
+
const model = ui.model();
|
|
265
|
+
if (!model)
|
|
266
|
+
throw new Error('This session has no model; a scheduled job runs on the session’s model.');
|
|
267
|
+
const now = new Date();
|
|
268
|
+
const folder = resolve(ui.cwd(), draft.folder ?? '.');
|
|
269
|
+
const job = buildJob({
|
|
270
|
+
name: draft.name,
|
|
271
|
+
prompt: draft.prompt,
|
|
272
|
+
when: draft.when,
|
|
273
|
+
folder,
|
|
274
|
+
...(draft.tz ? { tz: draft.tz } : {}),
|
|
275
|
+
permissions: {
|
|
276
|
+
...(draft.permissions.preset ? { preset: draft.permissions.preset } : {}),
|
|
277
|
+
...(draft.permissions.rules ? { rules: draft.permissions.rules } : {}),
|
|
278
|
+
unmatched: draft.permissions.unmatched,
|
|
279
|
+
...(draft.permissions.execution ? { execution: draft.permissions.execution } : {}),
|
|
280
|
+
...(draft.permissions.browser ? { browser: draft.permissions.browser } : {}),
|
|
281
|
+
},
|
|
282
|
+
...(draft.budget ? { budget: draft.budget } : {}),
|
|
283
|
+
model: `${model.provider}${model.model ? `/${model.model}` : ''}`,
|
|
284
|
+
createdBy: {
|
|
285
|
+
surface: 'tool',
|
|
286
|
+
...(ui.sessionId() ? { sessionId: ui.sessionId() } : {}),
|
|
287
|
+
},
|
|
288
|
+
}, { paths: paths(), config: ui.config(), now });
|
|
289
|
+
const chosen = chosenByTheModel(draft, job, ui.cwd(), ui.config()).map((line) => `Chosen by the model, not the default: ${line}`);
|
|
290
|
+
const { preview, policy } = await previewOf(job, chosen, now);
|
|
291
|
+
built.set(preview, { job, lines: previewLines(job, policy, now) });
|
|
292
|
+
return preview;
|
|
293
|
+
},
|
|
294
|
+
async confirm(request, signal) {
|
|
295
|
+
const entry = built.get(request.preview);
|
|
296
|
+
if (!entry)
|
|
297
|
+
return 'cancel';
|
|
298
|
+
ui.say(renderConfirmation(request, entry.lines));
|
|
299
|
+
const answer = await ui.ask({
|
|
300
|
+
questionId: `schedule:${entry.job.id}`,
|
|
301
|
+
question: `Create the scheduled job "${entry.job.name}" the model proposed? (details above)`,
|
|
302
|
+
header: 'Proposed by the model',
|
|
303
|
+
options: [
|
|
304
|
+
{ id: 'cancel', label: 'Cancel', description: 'Create nothing' },
|
|
305
|
+
{
|
|
306
|
+
id: 'create-paused',
|
|
307
|
+
label: 'Create paused',
|
|
308
|
+
description: 'Create it, but do not run it until /schedule resume',
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
id: 'create',
|
|
312
|
+
label: 'Create',
|
|
313
|
+
description: 'It runs on schedule with the permissions above',
|
|
314
|
+
},
|
|
315
|
+
],
|
|
316
|
+
multiSelect: false,
|
|
317
|
+
allowFreeText: false,
|
|
318
|
+
}, signal);
|
|
319
|
+
if (answer.kind !== 'answer')
|
|
320
|
+
return 'cancel';
|
|
321
|
+
const id = answer.selectedOptionIds[0];
|
|
322
|
+
return id === 'create' || id === 'create-paused' ? id : 'cancel';
|
|
323
|
+
},
|
|
324
|
+
async create(_draft, preview, options) {
|
|
325
|
+
const entry = built.get(preview);
|
|
326
|
+
if (!entry)
|
|
327
|
+
throw new Error('That proposal is no longer current; propose it again.');
|
|
328
|
+
const job = createJob(paths(), confirmJob(entry.job, 'tool-confirmed', new Date(), { paused: options.paused }));
|
|
329
|
+
history(job, 'created');
|
|
330
|
+
// A job with no scheduler to run it does nothing, and the model's
|
|
331
|
+
// "done" said nothing about that.
|
|
332
|
+
const installed = readManifest(paths()) !== undefined;
|
|
333
|
+
ui.say(`⏲ Scheduled job ${job.name} created${options.paused ? ' (paused)' : ''}. /schedule lists it.${installed ? '' : ' The scheduler is not installed, so it does not run until you install it: namzu schedule install.'}`);
|
|
334
|
+
return { name: job.name, ...(installed ? {} : { note: NOT_INSTALLED_NOTE }) };
|
|
335
|
+
},
|
|
336
|
+
// A change is confirmed like a new job, whole, with what changes
|
|
337
|
+
// above it, and saved to the same job: its id, name and history stay.
|
|
338
|
+
// Every field it can touch is in the confirmation's digest, so the
|
|
339
|
+
// saved job carries the operator's new confirmation, as an edit on a
|
|
340
|
+
// terminal does.
|
|
341
|
+
async previewUpdate(ref, changes) {
|
|
342
|
+
const current = findJob(paths(), ref);
|
|
343
|
+
const now = new Date();
|
|
344
|
+
const job = editedJob(current, buildJob(updateRequest(current, changes, ui.cwd()), {
|
|
345
|
+
paths: paths(),
|
|
346
|
+
config: ui.config(),
|
|
347
|
+
now,
|
|
348
|
+
}));
|
|
349
|
+
const { preview, policy } = await previewOf(job, [], now);
|
|
350
|
+
const view = (j) => confirmationView(j, compileJobPolicy(j.permissions, {
|
|
351
|
+
layers: readPermissionLayers({ cwd: j.folder.canonical }),
|
|
352
|
+
namzuHome: ui.home(),
|
|
353
|
+
folder: j.folder,
|
|
354
|
+
}), now);
|
|
355
|
+
const differs = describeChanges(view(current), view(job));
|
|
356
|
+
if (differs.length === 0)
|
|
357
|
+
throw new Error(`That changes nothing in "${current.name}".`);
|
|
358
|
+
const lines = [...changesSinceConfirmed(readHistory(paths(), current.id)), ...differs];
|
|
359
|
+
proposedUpdates.set(preview, {
|
|
360
|
+
current,
|
|
361
|
+
job,
|
|
362
|
+
lines: previewLines(job, policy, now),
|
|
363
|
+
changes: lines,
|
|
364
|
+
});
|
|
365
|
+
return { preview, changes: lines, permissionsChange: permissionsChanged(current, job) };
|
|
366
|
+
},
|
|
367
|
+
async confirmUpdate(request, signal) {
|
|
368
|
+
const entry = proposedUpdates.get(request.preview);
|
|
369
|
+
if (!entry)
|
|
370
|
+
return false;
|
|
371
|
+
ui.say(renderUpdateConfirmation(request, entry.lines));
|
|
372
|
+
const answer = await ui.ask({
|
|
373
|
+
questionId: `schedule-update:${entry.current.id}`,
|
|
374
|
+
question: `Save the change the model proposed to the scheduled job "${entry.current.name}"? (details above)`,
|
|
375
|
+
header: 'Proposed by the model',
|
|
376
|
+
options: [
|
|
377
|
+
{ id: 'cancel', label: 'Cancel', description: 'Change nothing' },
|
|
378
|
+
{
|
|
379
|
+
id: 'save',
|
|
380
|
+
label: 'Save',
|
|
381
|
+
description: request.permissionsChange
|
|
382
|
+
? 'It keeps its history and runs under the new permissions above'
|
|
383
|
+
: 'It keeps its history and runs as shown above',
|
|
384
|
+
},
|
|
385
|
+
],
|
|
386
|
+
multiSelect: false,
|
|
387
|
+
allowFreeText: false,
|
|
388
|
+
}, signal);
|
|
389
|
+
return answer.kind === 'answer' && answer.selectedOptionIds[0] === 'save';
|
|
390
|
+
},
|
|
391
|
+
async update(preview) {
|
|
392
|
+
const entry = proposedUpdates.get(preview);
|
|
393
|
+
if (!entry)
|
|
394
|
+
throw new Error('That proposal is no longer current; propose it again.');
|
|
395
|
+
const now = new Date();
|
|
396
|
+
let next;
|
|
397
|
+
try {
|
|
398
|
+
next = updateJob(paths(), entry.current.id, entry.current.revision, () => confirmJob(entry.job, 'tool-confirmed', now, {
|
|
399
|
+
paused: entry.current.state === 'paused',
|
|
400
|
+
}));
|
|
401
|
+
}
|
|
402
|
+
catch (error) {
|
|
403
|
+
if (error instanceof ScheduleConflictError)
|
|
404
|
+
throw new Error(`"${entry.current.name}" changed while the operator was being asked; propose the change again.`);
|
|
405
|
+
throw error;
|
|
406
|
+
}
|
|
407
|
+
proposedUpdates.delete(preview);
|
|
408
|
+
appendHistory(paths(), next.id, {
|
|
409
|
+
v: 1,
|
|
410
|
+
kind: 'job',
|
|
411
|
+
at: now.toISOString(),
|
|
412
|
+
action: 'edited',
|
|
413
|
+
by: 'tool',
|
|
414
|
+
changes: entry.changes,
|
|
415
|
+
});
|
|
416
|
+
const installed = readManifest(paths()) !== undefined;
|
|
417
|
+
ui.say(`⏲ Scheduled job ${next.name} changed (${next.state}); it keeps its history. /schedule shows it.${installed ? '' : ' The scheduler is not installed, so it does not run until you install it: namzu schedule install.'}`);
|
|
418
|
+
return { name: next.name, ...(installed ? {} : { note: NOT_INSTALLED_NOTE }) };
|
|
419
|
+
},
|
|
420
|
+
// Every job, whatever `allFolders` says: a model that has just created
|
|
421
|
+
// a job in another folder, and does not pass `allFolders`, was told
|
|
422
|
+
// "No scheduled jobs." while `namzu schedule list` showed it. The
|
|
423
|
+
// session folder's are marked, and only theirs carry the prompt.
|
|
424
|
+
async list() {
|
|
425
|
+
const cwd = canonicalCwd(ui.cwd());
|
|
426
|
+
return listJobs(paths()).jobs.map((job) => summary(job, job.folder.canonical === cwd, ui.home()));
|
|
427
|
+
},
|
|
428
|
+
async find(ref) {
|
|
429
|
+
try {
|
|
430
|
+
const job = findJob(paths(), ref);
|
|
431
|
+
return summary(job, job.folder.canonical === canonicalCwd(ui.cwd()), ui.home());
|
|
432
|
+
}
|
|
433
|
+
catch {
|
|
434
|
+
return undefined;
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
async confirmAction(job, action, signal) {
|
|
438
|
+
const answer = await ui.ask({
|
|
439
|
+
questionId: `schedule-${action}:${job.name}`,
|
|
440
|
+
question: `${action === 'delete' ? 'Delete' : 'Resume'} the scheduled job "${job.name}" (${job.schedule}, in ${job.folder})? The model asked.`,
|
|
441
|
+
header: 'Proposed by the model',
|
|
442
|
+
options: [
|
|
443
|
+
{ id: 'no', label: 'No', description: 'Leave it as it is' },
|
|
444
|
+
{ id: 'yes', label: action === 'delete' ? 'Delete it' : 'Resume it', description: '' },
|
|
445
|
+
],
|
|
446
|
+
multiSelect: false,
|
|
447
|
+
allowFreeText: false,
|
|
448
|
+
}, signal);
|
|
449
|
+
return answer.kind === 'answer' && answer.selectedOptionIds.includes('yes');
|
|
450
|
+
},
|
|
451
|
+
async pause(ref) {
|
|
452
|
+
const job = findJob(paths(), ref);
|
|
453
|
+
updateJob(paths(), job.id, job.revision, (j) => ({
|
|
454
|
+
...j,
|
|
455
|
+
state: 'paused',
|
|
456
|
+
pausedAt: new Date().toISOString(),
|
|
457
|
+
pausedBy: 'tool',
|
|
458
|
+
}));
|
|
459
|
+
history(job, 'paused');
|
|
460
|
+
ui.say(`⏲ The model paused the scheduled job ${job.name}. /schedule resume ${job.name} starts it again.`);
|
|
461
|
+
},
|
|
462
|
+
async resume(ref) {
|
|
463
|
+
const job = findJob(paths(), ref);
|
|
464
|
+
updateJob(paths(), job.id, job.revision, (j) => ({
|
|
465
|
+
...j,
|
|
466
|
+
state: 'active',
|
|
467
|
+
pausedAt: undefined,
|
|
468
|
+
pausedBy: undefined,
|
|
469
|
+
}));
|
|
470
|
+
history(job, 'resumed');
|
|
471
|
+
},
|
|
472
|
+
async delete(ref) {
|
|
473
|
+
const job = findJob(paths(), ref);
|
|
474
|
+
deleteJob(paths(), job.id);
|
|
475
|
+
history(job, 'removed');
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
//# sourceMappingURL=tool-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-host.js","sourceRoot":"","sources":["../../../src/tui/schedule/tool-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a finished turn is worth proposing as a skill.
|
|
3
|
+
*
|
|
4
|
+
* The interactive TUI's alone: `exec`, `drain`, ACP, a scheduled run and a
|
|
5
|
+
* sub-agent never import this (a test says so). Nothing here saves anything
|
|
6
|
+
* or costs a model call; it only decides whether one dim line is printed
|
|
7
|
+
* under the reply. Saving is `/skills save`, which the operator types.
|
|
8
|
+
*
|
|
9
|
+
* Pure: it reads the turn's `AgentEvent`s and the facts the App passes in.
|
|
10
|
+
* Persistence of the anti-nag counter lives in `suggestion-ledger.ts`.
|
|
11
|
+
*/
|
|
12
|
+
import type { AgentEvent } from '../agent.js';
|
|
13
|
+
/** `skills.suggestMinToolCalls` when the config does not say. */
|
|
14
|
+
export declare const DEFAULT_SUGGEST_MIN_TOOL_CALLS = 6;
|
|
15
|
+
/** Distinct tools a turn must have used. One tool run many times is a loop, not a procedure. */
|
|
16
|
+
export declare const SUGGEST_MIN_DISTINCT_TOOLS = 2;
|
|
17
|
+
/** How many of the last tool results must have succeeded. */
|
|
18
|
+
export declare const SUGGEST_CLEAN_TAIL = 3;
|
|
19
|
+
/** One turn, observed. Mutable so the App can feed it event by event. */
|
|
20
|
+
export interface TurnActivity {
|
|
21
|
+
/** Successful tool results, bookkeeping writes left out. */
|
|
22
|
+
steps: number;
|
|
23
|
+
readonly tools: Set<string>;
|
|
24
|
+
/** A successful call whose tool does not declare itself read-only for its input. */
|
|
25
|
+
changedSomething: boolean;
|
|
26
|
+
/** Every result in order, true when it succeeded (bookkeeping included). */
|
|
27
|
+
readonly results: boolean[];
|
|
28
|
+
/** Tool names refused and not later run successfully. */
|
|
29
|
+
readonly unresolvedDenials: Set<string>;
|
|
30
|
+
/** The turn loaded a skill with the skill tool. */
|
|
31
|
+
skillUsed: boolean;
|
|
32
|
+
/** The turn called `save_skill`: it was already saving one. */
|
|
33
|
+
savedSkill: boolean;
|
|
34
|
+
/** How the turn ended. `running` until a terminal event arrives. */
|
|
35
|
+
ending: 'running' | 'answered' | 'stopped' | 'paused' | 'failed';
|
|
36
|
+
readonly started: Map<string, {
|
|
37
|
+
readonly toolName: string;
|
|
38
|
+
readonly readOnly: boolean;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
export declare function createTurnActivity(): TurnActivity;
|
|
42
|
+
/** Feed one event of the turn. Events of other kinds are ignored. */
|
|
43
|
+
export declare function observeTurnEvent(activity: TurnActivity, event: AgentEvent): void;
|
|
44
|
+
/** What the App knows that the events do not. */
|
|
45
|
+
export interface SuggestionContext {
|
|
46
|
+
/** `skills.suggest`; only `false` turns proposals off. */
|
|
47
|
+
readonly suggest?: boolean;
|
|
48
|
+
/** `skills.suggestMinToolCalls`. */
|
|
49
|
+
readonly minToolCalls?: number;
|
|
50
|
+
/** The turn ran in `plan` mode, or the mode is `plan` now. */
|
|
51
|
+
readonly planMode: boolean;
|
|
52
|
+
/** A skill was loaded earlier in this conversation (skill tool or `/skills <name>`). */
|
|
53
|
+
readonly skillUsedInConversation: boolean;
|
|
54
|
+
/** This conversation already proposed one (or said proposals stopped). */
|
|
55
|
+
readonly proposedInConversation: boolean;
|
|
56
|
+
/** The turn was sent by `/skills save` or `/skills new`. */
|
|
57
|
+
readonly skillFlowTurn: boolean;
|
|
58
|
+
}
|
|
59
|
+
export type SuggestionVerdict = {
|
|
60
|
+
readonly suggest: true;
|
|
61
|
+
readonly steps: number;
|
|
62
|
+
readonly tools: number;
|
|
63
|
+
} | {
|
|
64
|
+
readonly suggest: false;
|
|
65
|
+
readonly reason: SuggestionRefusal;
|
|
66
|
+
};
|
|
67
|
+
export type SuggestionRefusal = 'turned-off' | 'not-answered' | 'plan-mode' | 'already-proposed' | 'skill-used' | 'skill-flow' | 'too-few-steps' | 'one-tool' | 'read-only' | 'failing-tail' | 'unresolved-denial';
|
|
68
|
+
/** Whether this turn earns the proposal. The order is cheapest reason first. */
|
|
69
|
+
export declare function judgeSkillSuggestion(activity: TurnActivity, context: SuggestionContext): SuggestionVerdict;
|
|
70
|
+
/** The dim row under the reply. */
|
|
71
|
+
export declare function skillSuggestionNotice(steps: number, tools: number): string;
|
|
72
|
+
/** Said once, in place of the proposal that would have followed three ignored ones. */
|
|
73
|
+
export declare const SUGGESTIONS_STOPPED_NOTICE = "Not suggesting skills any more: the last three suggestions went unused. /skills save on turns them back on.";
|
|
74
|
+
//# sourceMappingURL=learning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../src/tui/skills/learning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,IAAI,CAAA;AAC/C,gGAAgG;AAChG,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,IAAI,CAAA;AASnC,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC5B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,oFAAoF;IACpF,gBAAgB,EAAE,OAAO,CAAA;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvC,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAA;IAClB,+DAA+D;IAC/D,UAAU,EAAE,OAAO,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAChE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACxF;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAYjD;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA2ChF;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,wFAAwF;IACxF,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IACxC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAElE,MAAM,MAAM,iBAAiB,GAC1B,YAAY,GACZ,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,UAAU,GACV,WAAW,GACX,cAAc,GACd,mBAAmB,CAAA;AAEtB,gFAAgF;AAChF,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,iBAAiB,GACxB,iBAAiB,CAgBnB;AAQD,mCAAmC;AACnC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,uFAAuF;AACvF,eAAO,MAAM,0BAA0B,gHACuE,CAAA"}
|