@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,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scheduler's records. These are the CLI's on-disk format and not SDK
|
|
3
|
+
* API: adding a status or a record kind here is a CLI change.
|
|
4
|
+
*
|
|
5
|
+
* Every file carries `v` and `kind`. A reader that finds a `v` it does not
|
|
6
|
+
* know refuses and names the file; it never rewrites it.
|
|
7
|
+
*/
|
|
8
|
+
import type { ScheduleBrowserGrant, ScheduleJobLifecycle, ScheduleSpec } from '@namzu/sdk';
|
|
9
|
+
import type { PermissionsConfig } from '../permissions/rules.js';
|
|
10
|
+
export declare const SCHEDULE_FORMAT_VERSION = 1;
|
|
11
|
+
/** What a scheduled run may do. Required on every job; there is no default. */
|
|
12
|
+
export interface SchedulePermissionSet {
|
|
13
|
+
/** A call no rule covers: `park` (wait for the operator), `deny`, or `allow`. */
|
|
14
|
+
readonly unmatched: 'park' | 'deny' | 'allow';
|
|
15
|
+
/** Where the run's commands execute. */
|
|
16
|
+
readonly execution: 'host' | 'sandbox';
|
|
17
|
+
/** The expanded rules, in the `[permissions]` vocabulary, stored verbatim. */
|
|
18
|
+
readonly rules: PermissionsConfig;
|
|
19
|
+
/** Extra roots besides the folder, canonical. */
|
|
20
|
+
readonly additionalDirectories?: readonly string[];
|
|
21
|
+
/** Where the rules came from, for display only. */
|
|
22
|
+
readonly preset?: 'read-only' | 'edit-in-folder' | 'custom';
|
|
23
|
+
/**
|
|
24
|
+
* Browser access. Absent: the `browser` and `browser_act` tools are
|
|
25
|
+
* denied. Present: the run drives the browser under `profile` (signed in
|
|
26
|
+
* beforehand with `namzu browser login`), reaches only the listed sites
|
|
27
|
+
* (canonical keys, never `*`) at their level, and every other site is
|
|
28
|
+
* denied. `ask` needs `unmatched: park`: each such call waits for the
|
|
29
|
+
* operator. No window unless `headed`.
|
|
30
|
+
*/
|
|
31
|
+
readonly browser?: ScheduleBrowserGrant;
|
|
32
|
+
}
|
|
33
|
+
export interface ScheduleBudget {
|
|
34
|
+
readonly maxIterations: number;
|
|
35
|
+
/** Required above zero: an unattended run always has a token ceiling. */
|
|
36
|
+
readonly tokenBudget: number;
|
|
37
|
+
/** Required above zero: an unattended run always has a wall clock. */
|
|
38
|
+
readonly timeoutMs: number;
|
|
39
|
+
readonly waitForProviderMs: number;
|
|
40
|
+
}
|
|
41
|
+
/** A digest of the project config that executes code, pinned at confirmation. */
|
|
42
|
+
export interface ProjectDigest {
|
|
43
|
+
readonly algo: 'sha256';
|
|
44
|
+
/** Relative path → content digest, or `absent`. */
|
|
45
|
+
readonly files: Readonly<Record<string, string>>;
|
|
46
|
+
/** The `namzu.config.json` sections covered. */
|
|
47
|
+
readonly sections: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
export type ConfirmationSurface = 'cli-tty' | 'tui' | 'tool-confirmed' | 'cli-noninteractive';
|
|
50
|
+
export interface ScheduleJob {
|
|
51
|
+
readonly v: 1;
|
|
52
|
+
readonly kind: 'schedule-job';
|
|
53
|
+
readonly id: string;
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly revision: number;
|
|
56
|
+
readonly createdAt: string;
|
|
57
|
+
readonly updatedAt: string;
|
|
58
|
+
readonly createdBy: {
|
|
59
|
+
readonly surface: 'cli' | 'tui' | 'tool';
|
|
60
|
+
readonly sessionId?: string;
|
|
61
|
+
};
|
|
62
|
+
readonly prompt: string;
|
|
63
|
+
readonly folder: {
|
|
64
|
+
readonly path: string;
|
|
65
|
+
readonly canonical: string;
|
|
66
|
+
};
|
|
67
|
+
readonly trust: {
|
|
68
|
+
readonly canonical: string;
|
|
69
|
+
readonly grantedAt: string;
|
|
70
|
+
readonly by: 'operator-confirmation';
|
|
71
|
+
} | null;
|
|
72
|
+
readonly schedule: ScheduleSpec;
|
|
73
|
+
readonly permissions: SchedulePermissionSet;
|
|
74
|
+
readonly budget: ScheduleBudget;
|
|
75
|
+
readonly model: {
|
|
76
|
+
readonly provider: string;
|
|
77
|
+
readonly model?: string;
|
|
78
|
+
readonly effort?: string;
|
|
79
|
+
};
|
|
80
|
+
readonly catchUp: {
|
|
81
|
+
readonly windowMs: number;
|
|
82
|
+
};
|
|
83
|
+
readonly notify: {
|
|
84
|
+
readonly finished: boolean;
|
|
85
|
+
readonly failed: boolean;
|
|
86
|
+
readonly awaitingApproval: boolean;
|
|
87
|
+
readonly includeSummary: boolean;
|
|
88
|
+
};
|
|
89
|
+
readonly failurePolicy: {
|
|
90
|
+
readonly pauseAfterFailures: number;
|
|
91
|
+
};
|
|
92
|
+
readonly retention: {
|
|
93
|
+
readonly keepSessions: number;
|
|
94
|
+
};
|
|
95
|
+
readonly state: ScheduleJobLifecycle;
|
|
96
|
+
readonly pausedAt?: string;
|
|
97
|
+
readonly pausedBy?: 'operator' | 'auto-failure-streak' | 'tool';
|
|
98
|
+
/** How long a run may stay parked on a decision before it is abandoned. */
|
|
99
|
+
readonly approvalTtlMs: number;
|
|
100
|
+
readonly projectDigest: ProjectDigest;
|
|
101
|
+
/** Null until confirmed on a terminal or in the TUI. */
|
|
102
|
+
readonly confirmation: {
|
|
103
|
+
readonly at: string;
|
|
104
|
+
readonly surface: ConfirmationSurface;
|
|
105
|
+
/** sha256 of the security fields at confirmation. */
|
|
106
|
+
readonly digest: string;
|
|
107
|
+
} | null;
|
|
108
|
+
}
|
|
109
|
+
export type ScheduleRunStatus = 'running' | 'completed' | 'failed' | 'awaiting-approval' | 'approval-expired' | 'interrupted' | 'timed-out' | 'blocked-config' | 'cancelled';
|
|
110
|
+
export type ScheduleRunTrigger = 'scheduled' | 'late' | 'catch-up' | 'manual';
|
|
111
|
+
/**
|
|
112
|
+
* Tool calls of one run that were refused (never ran) or failed (ran and
|
|
113
|
+
* returned an error): how many, and the first one's tool and reason, in one
|
|
114
|
+
* line. Written by the CLI, but a refusal's reason may quote the command the
|
|
115
|
+
* model wrote.
|
|
116
|
+
*/
|
|
117
|
+
export interface ScheduleCallTally {
|
|
118
|
+
readonly count: number;
|
|
119
|
+
readonly first: {
|
|
120
|
+
readonly tool: string;
|
|
121
|
+
readonly reason: string;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export interface ActiveRun {
|
|
125
|
+
readonly runId: string;
|
|
126
|
+
readonly key: string;
|
|
127
|
+
readonly trigger: ScheduleRunTrigger;
|
|
128
|
+
readonly scheduledFor?: string;
|
|
129
|
+
readonly startedAt: string;
|
|
130
|
+
readonly daemonEpoch: string;
|
|
131
|
+
readonly status: 'running' | 'awaiting-approval';
|
|
132
|
+
readonly sessionId?: string;
|
|
133
|
+
/** The session's project directory name under `projects/`. */
|
|
134
|
+
readonly projectSlug?: string;
|
|
135
|
+
readonly turnId?: string;
|
|
136
|
+
readonly parkedAt?: string;
|
|
137
|
+
readonly delayedMs?: number;
|
|
138
|
+
readonly delayReason?: 'concurrency-cap' | 'folder-busy';
|
|
139
|
+
/**
|
|
140
|
+
* Set when the run is parked because a tool asked for a person (a
|
|
141
|
+
* sign-in, a CAPTCHA) rather than on a batch waiting for approval: what
|
|
142
|
+
* the person has to do.
|
|
143
|
+
*/
|
|
144
|
+
readonly handoff?: {
|
|
145
|
+
readonly reason: string;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
export interface ScheduleJobState {
|
|
149
|
+
readonly v: 1;
|
|
150
|
+
readonly kind: 'schedule-state';
|
|
151
|
+
readonly jobId: string;
|
|
152
|
+
readonly jobRevision?: number;
|
|
153
|
+
readonly lastEvaluatedAt?: string;
|
|
154
|
+
readonly nextFireAt?: string;
|
|
155
|
+
/** An occurrence decided but not yet started (waiting for a slot or a lane). Claimed at dispatch. */
|
|
156
|
+
readonly queued?: {
|
|
157
|
+
readonly key: string;
|
|
158
|
+
readonly scheduledFor: string;
|
|
159
|
+
readonly trigger: ScheduleRunTrigger;
|
|
160
|
+
readonly queuedAt: string;
|
|
161
|
+
};
|
|
162
|
+
readonly activeRun?: ActiveRun;
|
|
163
|
+
readonly lastRun?: {
|
|
164
|
+
readonly runId: string;
|
|
165
|
+
readonly scheduledFor?: string;
|
|
166
|
+
readonly status: ScheduleRunStatus;
|
|
167
|
+
readonly endedAt: string;
|
|
168
|
+
readonly sessionId?: string;
|
|
169
|
+
/** How many of its calls were refused, when any were. */
|
|
170
|
+
readonly refusedCalls?: number;
|
|
171
|
+
/** How many of its calls failed, when any did. */
|
|
172
|
+
readonly failedCalls?: number;
|
|
173
|
+
};
|
|
174
|
+
readonly counters: {
|
|
175
|
+
readonly runs: number;
|
|
176
|
+
readonly failures: number;
|
|
177
|
+
readonly failureStreak: number;
|
|
178
|
+
};
|
|
179
|
+
readonly quotaHoldUntil?: string;
|
|
180
|
+
/** The last failure signature notified, so the same failure is told once. */
|
|
181
|
+
readonly lastIncident?: {
|
|
182
|
+
readonly signature: string;
|
|
183
|
+
readonly at: string;
|
|
184
|
+
};
|
|
185
|
+
/** The last definition-change notification, by digest, so it is told once. */
|
|
186
|
+
readonly lastHoldNotice?: string;
|
|
187
|
+
/** Sessions of this job's runs already archived by retention, newest last. */
|
|
188
|
+
readonly archivedSessions?: readonly string[];
|
|
189
|
+
}
|
|
190
|
+
export type ScheduleHistoryRecord = {
|
|
191
|
+
readonly v: 1;
|
|
192
|
+
readonly kind: 'run';
|
|
193
|
+
readonly at: string;
|
|
194
|
+
readonly runId: string;
|
|
195
|
+
readonly key: string;
|
|
196
|
+
readonly trigger: ScheduleRunTrigger;
|
|
197
|
+
readonly scheduledFor?: string;
|
|
198
|
+
readonly startedAt: string;
|
|
199
|
+
readonly endedAt?: string;
|
|
200
|
+
readonly delayedMs?: number;
|
|
201
|
+
readonly delayReason?: 'concurrency-cap' | 'folder-busy';
|
|
202
|
+
readonly sessionId?: string;
|
|
203
|
+
readonly status: ScheduleRunStatus;
|
|
204
|
+
readonly reason?: string;
|
|
205
|
+
readonly exitCode?: number;
|
|
206
|
+
readonly summary?: string;
|
|
207
|
+
readonly usage?: {
|
|
208
|
+
readonly totalTokens?: number;
|
|
209
|
+
readonly costUsd?: number;
|
|
210
|
+
};
|
|
211
|
+
readonly warnings?: readonly string[];
|
|
212
|
+
readonly refusedCalls?: ScheduleCallTally;
|
|
213
|
+
readonly failedCalls?: ScheduleCallTally;
|
|
214
|
+
} | {
|
|
215
|
+
readonly v: 1;
|
|
216
|
+
readonly kind: 'skip';
|
|
217
|
+
readonly at: string;
|
|
218
|
+
readonly scheduledFor: string;
|
|
219
|
+
readonly reason: string;
|
|
220
|
+
readonly count: number;
|
|
221
|
+
readonly detail?: string;
|
|
222
|
+
} | {
|
|
223
|
+
readonly v: 1;
|
|
224
|
+
readonly kind: 'missed';
|
|
225
|
+
readonly at: string;
|
|
226
|
+
readonly from: string;
|
|
227
|
+
readonly to: string;
|
|
228
|
+
readonly count: number;
|
|
229
|
+
readonly capped?: boolean;
|
|
230
|
+
readonly reason: string;
|
|
231
|
+
readonly caughtUpBy?: string;
|
|
232
|
+
} | {
|
|
233
|
+
readonly v: 1;
|
|
234
|
+
readonly kind: 'job';
|
|
235
|
+
readonly at: string;
|
|
236
|
+
readonly action: 'created' | 'edited' | 'confirmed' | 'paused' | 'resumed' | 'removed' | 'completed' | 'expired' | 'tampered' | 'blocked';
|
|
237
|
+
readonly by: string;
|
|
238
|
+
readonly detail?: string;
|
|
239
|
+
/** For `edited`: the preview lines that differ, `+ added` and `- removed`. */
|
|
240
|
+
readonly changes?: readonly string[];
|
|
241
|
+
};
|
|
242
|
+
/** What a fire child leaves behind. Authoritative over its exit code. */
|
|
243
|
+
export interface ScheduleRunResult {
|
|
244
|
+
readonly v: 1;
|
|
245
|
+
readonly kind: 'schedule-run-result';
|
|
246
|
+
readonly runId: string;
|
|
247
|
+
readonly jobId: string;
|
|
248
|
+
readonly sessionId?: string;
|
|
249
|
+
/** The session's project directory name under `projects/`. */
|
|
250
|
+
readonly projectSlug?: string;
|
|
251
|
+
readonly turnId?: string;
|
|
252
|
+
readonly status: ScheduleRunStatus;
|
|
253
|
+
readonly exitCode: number;
|
|
254
|
+
readonly reason?: string;
|
|
255
|
+
readonly summary?: string;
|
|
256
|
+
readonly usage?: {
|
|
257
|
+
readonly totalTokens?: number;
|
|
258
|
+
readonly costUsd?: number;
|
|
259
|
+
};
|
|
260
|
+
/** A provider asked to be left alone this long. */
|
|
261
|
+
readonly retryAfterMs?: number;
|
|
262
|
+
/**
|
|
263
|
+
* Set on `awaiting-approval` when a tool asked for a person rather than a
|
|
264
|
+
* batch waiting for approval: what the person has to do. Continuing the
|
|
265
|
+
* run needs no approval, only that.
|
|
266
|
+
*/
|
|
267
|
+
readonly handoff?: {
|
|
268
|
+
readonly reason: string;
|
|
269
|
+
};
|
|
270
|
+
readonly credentialSource?: string;
|
|
271
|
+
readonly warnings?: readonly string[];
|
|
272
|
+
/**
|
|
273
|
+
* Calls the run's permissions refused. The status says how the turn
|
|
274
|
+
* ended; a `completed` run with refused calls did not do all it was
|
|
275
|
+
* asked, and says so wherever the run is shown.
|
|
276
|
+
*/
|
|
277
|
+
readonly refusedCalls?: ScheduleCallTally;
|
|
278
|
+
/** Calls that ran and returned an error. */
|
|
279
|
+
readonly failedCalls?: ScheduleCallTally;
|
|
280
|
+
readonly startedAt: string;
|
|
281
|
+
readonly endedAt?: string;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schedule/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scheduler's records. These are the CLI's on-disk format and not SDK
|
|
3
|
+
* API: adding a status or a record kind here is a CLI change.
|
|
4
|
+
*
|
|
5
|
+
* Every file carries `v` and `kind`. A reader that finds a `v` it does not
|
|
6
|
+
* know refuses and names the file; it never rewrites it.
|
|
7
|
+
*/
|
|
8
|
+
export const SCHEDULE_FORMAT_VERSION = 1;
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schedule/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The skills a session offers the MODEL.
|
|
3
|
+
*
|
|
4
|
+
* `store.ts` discovers `SKILL.md` files for the operator. Until this module
|
|
5
|
+
* existed those files reached the model only when the operator pasted one in
|
|
6
|
+
* (`/skills <name>`, `exec --skills`): the kernel's manifest and its `skill`
|
|
7
|
+
* tool were wired for plugin skills alone. This builds one SDK
|
|
8
|
+
* `SkillRegistry` per session from the discovered tiers and, per turn, merges
|
|
9
|
+
* it with the plugin runtime's registry into what the turn receives:
|
|
10
|
+
*
|
|
11
|
+
* - `registry` — what the `skill` tool loads from (and lists, paged);
|
|
12
|
+
* - `manifest` — the skills described in the prompt's `<available_skills>`;
|
|
13
|
+
* - `overflowNote` — the names that did not fit the manifest's budget.
|
|
14
|
+
*
|
|
15
|
+
* Metadata only until the model asks: a skill's body is read when the `skill`
|
|
16
|
+
* tool loads it, never at session start.
|
|
17
|
+
*
|
|
18
|
+
* ## Gating
|
|
19
|
+
*
|
|
20
|
+
* A skill whose `metadata.namzu-requires-tools` names a tool the turn does
|
|
21
|
+
* not have is hidden from both the manifest and the tool — instructions for a
|
|
22
|
+
* capability the session lacks read as a capability to go looking for.
|
|
23
|
+
*
|
|
24
|
+
* ## Budget
|
|
25
|
+
*
|
|
26
|
+
* The manifest costs prompt on every request, so it is capped at
|
|
27
|
+
* min(2% of the context window, 4 KB). Skills that do not fit are named in
|
|
28
|
+
* one line and stay loadable; the `skill` tool lists them with descriptions,
|
|
29
|
+
* paged, when called without a name.
|
|
30
|
+
*/
|
|
31
|
+
import { type Logger, type Skill, SkillRegistry, type SkillRegistryRef } from '@namzu/sdk';
|
|
32
|
+
import type { SkillsConfig } from '../config/schema.js';
|
|
33
|
+
import { type SkillInfo } from './store.js';
|
|
34
|
+
/** The manifest never costs more than this many characters. */
|
|
35
|
+
export declare const SKILL_MANIFEST_MAX_CHARS = 4096;
|
|
36
|
+
/** Share of the context window the manifest may take. */
|
|
37
|
+
export declare const SKILL_MANIFEST_WINDOW_SHARE = 0.02;
|
|
38
|
+
/** min(2% of the window, 4 KB), in characters. */
|
|
39
|
+
export declare function skillManifestBudget(contextWindowTokens: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* What one skill's `<skill>` entry costs in the manifest. Mirrors the
|
|
42
|
+
* kernel's `renderSkillsSection` entry closely enough to budget with; the
|
|
43
|
+
* section's fixed preamble is not counted — it is paid once whatever fits.
|
|
44
|
+
*/
|
|
45
|
+
export declare function manifestEntryChars(skill: Skill): number;
|
|
46
|
+
/** The tools a skill says the session must have; see the module comment. */
|
|
47
|
+
export declare function requiredToolsOf(skill: Skill): readonly string[];
|
|
48
|
+
export interface TurnSkillsInput {
|
|
49
|
+
/** Every tool name registered for the turn: what gating is checked against. */
|
|
50
|
+
readonly toolNames: readonly string[];
|
|
51
|
+
/** The window the turn runs against, for the manifest budget. */
|
|
52
|
+
readonly contextWindowTokens: number;
|
|
53
|
+
/** The plugin runtime's registry, when plugins are on. */
|
|
54
|
+
readonly pluginSkills?: SkillRegistry;
|
|
55
|
+
}
|
|
56
|
+
export interface TurnSkills {
|
|
57
|
+
/** What the `skill` tool loads from; undefined when there is nothing to load. */
|
|
58
|
+
readonly registry: SkillRegistryRef | undefined;
|
|
59
|
+
/** What the prompt's `<available_skills>` describes; undefined when empty. */
|
|
60
|
+
readonly manifest: Skill[] | undefined;
|
|
61
|
+
/** One line naming the skills the budget left out, or null. */
|
|
62
|
+
readonly overflowNote: string | null;
|
|
63
|
+
/** The names left out of the manifest, in order. */
|
|
64
|
+
readonly overflow: readonly string[];
|
|
65
|
+
}
|
|
66
|
+
export interface SessionSkillCatalog {
|
|
67
|
+
/** The file skills registered for the model, highest precedence first, as of the last turn. */
|
|
68
|
+
readonly fileSkills: readonly SkillInfo[];
|
|
69
|
+
/** Whether the session should carry the `skill` tool for file skills. */
|
|
70
|
+
readonly hasFileSkills: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Re-read the tiers, then gate and budget for one turn. A skill added,
|
|
73
|
+
* replaced or removed since the last turn is reflected here.
|
|
74
|
+
*/
|
|
75
|
+
forTurn(input: TurnSkillsInput): Promise<TurnSkills>;
|
|
76
|
+
}
|
|
77
|
+
export interface SessionSkillCatalogOptions {
|
|
78
|
+
readonly cwd: string;
|
|
79
|
+
readonly home?: string;
|
|
80
|
+
readonly config?: SkillsConfig;
|
|
81
|
+
readonly systemDir?: string;
|
|
82
|
+
readonly log?: Logger;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Discover the file tiers and register each usable winner's metadata; every
|
|
86
|
+
* turn discovers again, so the catalog follows the files.
|
|
87
|
+
*
|
|
88
|
+
* A file the kernel loader refuses (a name that does not match its
|
|
89
|
+
* directory, a missing description, a contradictory `invocation`) is left
|
|
90
|
+
* out of the model's catalog with a warning; the operator still sees it in
|
|
91
|
+
* `/skills list` and can still activate it by name.
|
|
92
|
+
*/
|
|
93
|
+
export declare function createSessionSkillCatalog(options: SessionSkillCatalogOptions): Promise<SessionSkillCatalog>;
|
|
94
|
+
/** The one line naming skills the manifest had no room to describe. */
|
|
95
|
+
export declare function overflowNote(names: readonly string[]): string | null;
|
|
96
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EACN,KAAK,MAAM,EAEX,KAAK,KAAK,EACV,aAAa,EACb,KAAK,gBAAgB,EAErB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAGN,KAAK,SAAS,EAGd,MAAM,YAAY,CAAA;AAEnB,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAC5C,yDAAyD;AACzD,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAI/C,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAYvD;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,MAAM,EAAE,CAO/D;AAED,MAAM,WAAW,eAAe;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,iEAAiE;IACjE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAA;CACrC;AAED,MAAM,WAAW,UAAU;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC/C,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IACtC,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,mBAAmB;IACnC,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAA;IACzC,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACpD;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,0BAA0B,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA+I9B;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAGpE"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The skills a session offers the MODEL.
|
|
3
|
+
*
|
|
4
|
+
* `store.ts` discovers `SKILL.md` files for the operator. Until this module
|
|
5
|
+
* existed those files reached the model only when the operator pasted one in
|
|
6
|
+
* (`/skills <name>`, `exec --skills`): the kernel's manifest and its `skill`
|
|
7
|
+
* tool were wired for plugin skills alone. This builds one SDK
|
|
8
|
+
* `SkillRegistry` per session from the discovered tiers and, per turn, merges
|
|
9
|
+
* it with the plugin runtime's registry into what the turn receives:
|
|
10
|
+
*
|
|
11
|
+
* - `registry` — what the `skill` tool loads from (and lists, paged);
|
|
12
|
+
* - `manifest` — the skills described in the prompt's `<available_skills>`;
|
|
13
|
+
* - `overflowNote` — the names that did not fit the manifest's budget.
|
|
14
|
+
*
|
|
15
|
+
* Metadata only until the model asks: a skill's body is read when the `skill`
|
|
16
|
+
* tool loads it, never at session start.
|
|
17
|
+
*
|
|
18
|
+
* ## Gating
|
|
19
|
+
*
|
|
20
|
+
* A skill whose `metadata.namzu-requires-tools` names a tool the turn does
|
|
21
|
+
* not have is hidden from both the manifest and the tool — instructions for a
|
|
22
|
+
* capability the session lacks read as a capability to go looking for.
|
|
23
|
+
*
|
|
24
|
+
* ## Budget
|
|
25
|
+
*
|
|
26
|
+
* The manifest costs prompt on every request, so it is capped at
|
|
27
|
+
* min(2% of the context window, 4 KB). Skills that do not fit are named in
|
|
28
|
+
* one line and stay loadable; the `skill` tool lists them with descriptions,
|
|
29
|
+
* paged, when called without a name.
|
|
30
|
+
*/
|
|
31
|
+
import { dirname } from 'node:path';
|
|
32
|
+
import { SKILL_TOOL_NAME, SkillRegistry, isInvocableBy, } from '@namzu/sdk';
|
|
33
|
+
import { SKILL_TIERS, discoverSkills, parseRequiredTools, } from './store.js';
|
|
34
|
+
/** The manifest never costs more than this many characters. */
|
|
35
|
+
export const SKILL_MANIFEST_MAX_CHARS = 4096;
|
|
36
|
+
/** Share of the context window the manifest may take. */
|
|
37
|
+
export const SKILL_MANIFEST_WINDOW_SHARE = 0.02;
|
|
38
|
+
/** The kernel's own chars-per-token estimate. */
|
|
39
|
+
const CHARS_PER_TOKEN = 4;
|
|
40
|
+
/** min(2% of the window, 4 KB), in characters. */
|
|
41
|
+
export function skillManifestBudget(contextWindowTokens) {
|
|
42
|
+
const share = Math.floor(contextWindowTokens * SKILL_MANIFEST_WINDOW_SHARE * CHARS_PER_TOKEN);
|
|
43
|
+
return Math.max(0, Math.min(SKILL_MANIFEST_MAX_CHARS, share));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* What one skill's `<skill>` entry costs in the manifest. Mirrors the
|
|
47
|
+
* kernel's `renderSkillsSection` entry closely enough to budget with; the
|
|
48
|
+
* section's fixed preamble is not counted — it is paid once whatever fits.
|
|
49
|
+
*/
|
|
50
|
+
export function manifestEntryChars(skill) {
|
|
51
|
+
const m = skill.metadata;
|
|
52
|
+
let chars = '<skill>\n<name></name>\n<description></description>\n<location>/SKILL.md</location>\n</skill>\n'
|
|
53
|
+
.length +
|
|
54
|
+
m.name.length +
|
|
55
|
+
m.description.trim().length +
|
|
56
|
+
skill.dirPath.length;
|
|
57
|
+
if (m.compatibility)
|
|
58
|
+
chars += '<compatibility></compatibility>\n'.length + m.compatibility.length;
|
|
59
|
+
if (m.license)
|
|
60
|
+
chars += '<license></license>\n'.length + m.license.length;
|
|
61
|
+
if (m.allowedTools)
|
|
62
|
+
chars += '<allowed_tools></allowed_tools>\n'.length + m.allowedTools.length;
|
|
63
|
+
return chars;
|
|
64
|
+
}
|
|
65
|
+
/** The tools a skill says the session must have; see the module comment. */
|
|
66
|
+
export function requiredToolsOf(skill) {
|
|
67
|
+
const metadata = skill.metadata.metadata;
|
|
68
|
+
const declared = metadata && Object.hasOwn(metadata, 'namzu-requires-tools')
|
|
69
|
+
? metadata['namzu-requires-tools']
|
|
70
|
+
: undefined;
|
|
71
|
+
return parseRequiredTools(declared) ?? [];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Discover the file tiers and register each usable winner's metadata; every
|
|
75
|
+
* turn discovers again, so the catalog follows the files.
|
|
76
|
+
*
|
|
77
|
+
* A file the kernel loader refuses (a name that does not match its
|
|
78
|
+
* directory, a missing description, a contradictory `invocation`) is left
|
|
79
|
+
* out of the model's catalog with a warning; the operator still sees it in
|
|
80
|
+
* `/skills list` and can still activate it by name.
|
|
81
|
+
*/
|
|
82
|
+
export async function createSessionSkillCatalog(options) {
|
|
83
|
+
const discovery = {
|
|
84
|
+
cwd: options.cwd,
|
|
85
|
+
...(options.home !== undefined ? { home: options.home } : {}),
|
|
86
|
+
...(options.config ? { config: options.config } : {}),
|
|
87
|
+
...(options.systemDir !== undefined ? { systemDir: options.systemDir } : {}),
|
|
88
|
+
};
|
|
89
|
+
const files = new SkillRegistry(options.log);
|
|
90
|
+
let registered = [];
|
|
91
|
+
/** The path each registered name was read from, to notice a new winner. */
|
|
92
|
+
const registeredPaths = new Map();
|
|
93
|
+
let order = [];
|
|
94
|
+
// Re-run every turn: a skill written while the session runs (`save_skill`,
|
|
95
|
+
// or the operator's editor) reaches the next turn, a new winner in a
|
|
96
|
+
// higher tier replaces the one it shadows, and a removed file is dropped.
|
|
97
|
+
// Discovery reads a handful of small files; a turn costs far more.
|
|
98
|
+
const sync = async () => {
|
|
99
|
+
const candidates = discoverSkills(discovery)
|
|
100
|
+
.filter((skill) => skill.problem === undefined && skill.disabled !== true)
|
|
101
|
+
// Highest precedence first: when the budget runs out, the project's own
|
|
102
|
+
// skills are the last to lose their description.
|
|
103
|
+
.sort((a, b) => SKILL_TIERS.indexOf(b.tier) - SKILL_TIERS.indexOf(a.tier) || a.name.localeCompare(b.name));
|
|
104
|
+
const next = [];
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
for (const skill of candidates) {
|
|
107
|
+
seen.add(skill.name);
|
|
108
|
+
if (registeredPaths.get(skill.name) === skill.path) {
|
|
109
|
+
next.push(skill);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
await files.register(dirname(skill.path), 'metadata');
|
|
114
|
+
registeredPaths.set(skill.name, skill.path);
|
|
115
|
+
next.push(skill);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (registeredPaths.delete(skill.name))
|
|
119
|
+
files.unregister(skill.name);
|
|
120
|
+
options.log?.warn('skill not offered to the model', {
|
|
121
|
+
'namzu.skill.name': skill.name,
|
|
122
|
+
'namzu.skill.path': skill.path,
|
|
123
|
+
'namzu.skill.reason': error instanceof Error ? error.message : String(error),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const name of [...registeredPaths.keys()]) {
|
|
128
|
+
if (seen.has(name))
|
|
129
|
+
continue;
|
|
130
|
+
registeredPaths.delete(name);
|
|
131
|
+
files.unregister(name);
|
|
132
|
+
}
|
|
133
|
+
registered = next;
|
|
134
|
+
order = next.map((skill) => skill.name);
|
|
135
|
+
};
|
|
136
|
+
await sync();
|
|
137
|
+
return {
|
|
138
|
+
get fileSkills() {
|
|
139
|
+
return registered;
|
|
140
|
+
},
|
|
141
|
+
get hasFileSkills() {
|
|
142
|
+
return registered.length > 0;
|
|
143
|
+
},
|
|
144
|
+
async forTurn(input) {
|
|
145
|
+
await sync();
|
|
146
|
+
const tools = new Set(input.toolNames);
|
|
147
|
+
const gated = (skill) => requiredToolsOf(skill).every((name) => tools.has(name));
|
|
148
|
+
// `load` re-reads a changed file and drops a deleted one, so an edit
|
|
149
|
+
// made while the session runs reaches the next turn.
|
|
150
|
+
const fileSkills = [];
|
|
151
|
+
for (const name of order) {
|
|
152
|
+
const loaded = await files.load(name, 'metadata');
|
|
153
|
+
if (!loaded || !gated(loaded.skill))
|
|
154
|
+
continue;
|
|
155
|
+
// Metadata only. The registry keeps a body once the model has loaded
|
|
156
|
+
// it, and the kernel pastes any body it is handed into the prompt
|
|
157
|
+
// under "Loaded Skills" — every later request would then carry a
|
|
158
|
+
// second copy of what the tool result already put in the history.
|
|
159
|
+
const { body: _body, ...metadataOnly } = loaded.skill;
|
|
160
|
+
fileSkills.push(metadataOnly);
|
|
161
|
+
}
|
|
162
|
+
const offered = new Set(fileSkills.map((skill) => skill.metadata.name));
|
|
163
|
+
const plugins = input.pluginSkills;
|
|
164
|
+
const pluginSkills = [];
|
|
165
|
+
if (plugins) {
|
|
166
|
+
for (const name of plugins.names()) {
|
|
167
|
+
const loaded = await plugins.load(name, 'metadata');
|
|
168
|
+
if (loaded)
|
|
169
|
+
pluginSkills.push(loaded.skill);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const all = [...fileSkills, ...pluginSkills];
|
|
173
|
+
if (all.length === 0) {
|
|
174
|
+
return { registry: undefined, manifest: undefined, overflowNote: null, overflow: [] };
|
|
175
|
+
}
|
|
176
|
+
const budget = skillManifestBudget(input.contextWindowTokens);
|
|
177
|
+
const manifest = [];
|
|
178
|
+
const overflow = [];
|
|
179
|
+
let spent = 0;
|
|
180
|
+
for (const skill of all) {
|
|
181
|
+
// Operator-only skills are not in the manifest at all; the kernel
|
|
182
|
+
// filters them too, and they must not use up its budget.
|
|
183
|
+
if (!isInvocableBy(skill, 'model')) {
|
|
184
|
+
manifest.push(skill);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const cost = manifestEntryChars(skill);
|
|
188
|
+
if (overflow.length === 0 && spent + cost <= budget) {
|
|
189
|
+
manifest.push(skill);
|
|
190
|
+
spent += cost;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
overflow.push(skill.metadata.name);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const registry = {
|
|
197
|
+
names: () => [...offered, ...(plugins ? plugins.names() : [])],
|
|
198
|
+
async catalog() {
|
|
199
|
+
const fileEntries = (await files.catalog()).filter((entry) => offered.has(entry.registeredName));
|
|
200
|
+
const pluginEntries = plugins ? await plugins.catalog() : [];
|
|
201
|
+
return [...fileEntries, ...pluginEntries];
|
|
202
|
+
},
|
|
203
|
+
async load(name) {
|
|
204
|
+
if (offered.has(name))
|
|
205
|
+
return files.load(name);
|
|
206
|
+
if (plugins?.has(name))
|
|
207
|
+
return plugins.load(name);
|
|
208
|
+
return undefined;
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
return {
|
|
212
|
+
registry,
|
|
213
|
+
manifest: manifest.length > 0 ? manifest : undefined,
|
|
214
|
+
overflowNote: overflowNote(overflow),
|
|
215
|
+
overflow,
|
|
216
|
+
};
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/** The one line naming skills the manifest had no room to describe. */
|
|
221
|
+
export function overflowNote(names) {
|
|
222
|
+
if (names.length === 0)
|
|
223
|
+
return null;
|
|
224
|
+
return `More skills are available than the skills manifest describes: ${names.join(', ')}. Call the \`${SKILL_TOOL_NAME}\` tool without a name to list them with descriptions, or with a name to load one when the task matches it.`;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"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"}
|