@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,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the terminal says about the browser: the handoff notice when a page
|
|
3
|
+
* needs the operator, the site-rule line on the review screen, and
|
|
4
|
+
* `/browser`. Pure: App supplies the session's browser and prints the text.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolHandoff } from '@namzu/sdk';
|
|
7
|
+
import { type BrowserControl, type BrowserStatus } from '../browser/control.js';
|
|
8
|
+
/**
|
|
9
|
+
* The notice for a turn the browser paused, or `undefined` for a handoff
|
|
10
|
+
* from another tool. With a window, the operator does it there; without
|
|
11
|
+
* one (headless), `namzu browser login` opens one.
|
|
12
|
+
*/
|
|
13
|
+
export declare function describeBrowserHandoff(handoff: ToolHandoff, browser: Pick<BrowserStatus, 'headless' | 'profile'> | undefined): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* One line per browser call in a review: which site rule decided it, under
|
|
16
|
+
* which profile and engine. `site rule: https://github.com → ask · profile work · windows-cdp`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function browserSiteNotes(toolCalls: readonly {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly input: unknown;
|
|
21
|
+
}[], browser: Pick<BrowserStatus, 'sites' | 'profile' | 'engine'> | undefined): string[];
|
|
22
|
+
export declare const BROWSER_SLASH_USAGE: string;
|
|
23
|
+
/**
|
|
24
|
+
* `/browser [status] | profile [<name>]`. Returns the text to print, and the
|
|
25
|
+
* profile to remember when it switched one (so a rebuilt session keeps it).
|
|
26
|
+
*/
|
|
27
|
+
export declare function runBrowserSlash(control: BrowserControl | undefined, args: readonly string[], options: {
|
|
28
|
+
readonly busy: boolean;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
readonly text: string;
|
|
31
|
+
readonly profile?: string;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=browser-notices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-notices.d.ts","sourceRoot":"","sources":["../../src/tui/browser-notices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,MAAM,uBAAuB,CAAA;AAmB9B;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,GAC9D,MAAM,GAAG,SAAS,CAapB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,EACxE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,SAAS,GACtE,MAAM,EAAE,CAaV;AAED,eAAO,MAAM,mBAAmB,QAGpB,CAAA;AAEZ;;;GAGG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B/D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the terminal says about the browser: the handoff notice when a page
|
|
3
|
+
* needs the operator, the site-rule line on the review screen, and
|
|
4
|
+
* `/browser`. Pure: App supplies the session's browser and prints the text.
|
|
5
|
+
*/
|
|
6
|
+
import { describeBrowserStatus, } from '../browser/control.js';
|
|
7
|
+
import { browserCallOrigin, browserSiteRuleFor } from '../permissions/browser-sites.js';
|
|
8
|
+
import { terminalDisplayText } from './terminal-display.js';
|
|
9
|
+
function clean(value, max = 240) {
|
|
10
|
+
const flat = terminalDisplayText((value ?? '').replace(/\s+/g, ' ').trim());
|
|
11
|
+
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
12
|
+
}
|
|
13
|
+
/** What the operator does at the window, by the host's reason. */
|
|
14
|
+
const AT_THE_WINDOW = {
|
|
15
|
+
'sign-in': 'sign in to',
|
|
16
|
+
'two-factor': 'finish signing in to',
|
|
17
|
+
'http-auth': 'sign in to',
|
|
18
|
+
captcha: 'complete the check on',
|
|
19
|
+
'bot-block': 'get past the check on',
|
|
20
|
+
'credential-field': 'type the password or code on',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The notice for a turn the browser paused, or `undefined` for a handoff
|
|
24
|
+
* from another tool. With a window, the operator does it there; without
|
|
25
|
+
* one (headless), `namzu browser login` opens one.
|
|
26
|
+
*/
|
|
27
|
+
export function describeBrowserHandoff(handoff, browser) {
|
|
28
|
+
const detail = handoff.detail ?? {};
|
|
29
|
+
if (detail.tool !== 'browser')
|
|
30
|
+
return undefined;
|
|
31
|
+
const origin = clean(detail.origin, 200) || 'the site';
|
|
32
|
+
const profile = clean(detail.profile ?? browser?.profile, 64) || 'default';
|
|
33
|
+
const what = clean(handoff.reason);
|
|
34
|
+
const command = clean(detail.loginCommand, 400) || `namzu browser login ${profile} ${origin}`;
|
|
35
|
+
const lead = `The browser needs you: ${what}.`;
|
|
36
|
+
if (browser && !browser.headless) {
|
|
37
|
+
const verb = AT_THE_WINDOW[detail.cause ?? ''] ?? 'sign in to';
|
|
38
|
+
return `${lead}\n${verb.charAt(0).toUpperCase()}${verb.slice(1)} ${origin} in the browser window (profile ${profile}), then press Enter to continue · Esc to stop.`;
|
|
39
|
+
}
|
|
40
|
+
return `${lead}\nThis browser has no window, so namzu closed it to free the profile. In another terminal run:\n ${command}\nsign in in the window it opens, close it, then press Enter here to continue · Esc to stop.`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* One line per browser call in a review: which site rule decided it, under
|
|
44
|
+
* which profile and engine. `site rule: https://github.com → ask · profile work · windows-cdp`.
|
|
45
|
+
*/
|
|
46
|
+
export function browserSiteNotes(toolCalls, browser) {
|
|
47
|
+
if (!browser)
|
|
48
|
+
return [];
|
|
49
|
+
const notes = [];
|
|
50
|
+
for (const call of toolCalls) {
|
|
51
|
+
const origin = browserCallOrigin(call.name, call.input);
|
|
52
|
+
if (origin === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const rule = browserSiteRuleFor(browser.sites, origin);
|
|
55
|
+
const via = rule.site === origin ? '' : rule.site === '*' ? ' (any other site)' : ` (${rule.site})`;
|
|
56
|
+
const note = `site rule: ${origin}${via} → ${rule.level} · profile ${browser.profile} · ${browser.engine}`;
|
|
57
|
+
if (!notes.includes(note))
|
|
58
|
+
notes.push(note);
|
|
59
|
+
}
|
|
60
|
+
return notes;
|
|
61
|
+
}
|
|
62
|
+
export const BROWSER_SLASH_USAGE = [
|
|
63
|
+
'/browser which browser, profile and site rules this session uses',
|
|
64
|
+
'/browser profile <name> use another profile from the next browser call on',
|
|
65
|
+
].join('\n');
|
|
66
|
+
/**
|
|
67
|
+
* `/browser [status] | profile [<name>]`. Returns the text to print, and the
|
|
68
|
+
* profile to remember when it switched one (so a rebuilt session keeps it).
|
|
69
|
+
*/
|
|
70
|
+
export async function runBrowserSlash(control, args, options) {
|
|
71
|
+
if (!control) {
|
|
72
|
+
return {
|
|
73
|
+
text: 'This session has no browser. It is on by default in the interactive terminal; check `browser.enabled` in your config and `namzu doctor` (browser.installed, browser.engine).',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const [verb, name, ...rest] = args;
|
|
77
|
+
if (verb === undefined || (verb === 'status' && name === undefined)) {
|
|
78
|
+
return { text: describeBrowserStatus(control.status()) };
|
|
79
|
+
}
|
|
80
|
+
if (verb === 'profile' && rest.length === 0) {
|
|
81
|
+
if (name === undefined) {
|
|
82
|
+
return {
|
|
83
|
+
text: `Profile: ${control.status().profile}. Switch with /browser profile <name>; list profiles with \`namzu browser list\`.`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (options.busy) {
|
|
87
|
+
return { text: 'The profile cannot change while a turn is running. Try again when it ends.' };
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const status = await control.switchProfile(name);
|
|
91
|
+
return {
|
|
92
|
+
text: `The browser uses profile ${status.profile} from the next browser call on, in this session. Sign in to a site once with \`namzu browser login ${status.profile} <url>\`.`,
|
|
93
|
+
profile: status.profile,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return { text: error instanceof Error ? error.message : String(error) };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return { text: `Usage:\n${BROWSER_SLASH_USAGE}` };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=browser-notices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-notices.js","sourceRoot":"","sources":["../../src/tui/browser-notices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAGN,qBAAqB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,SAAS,KAAK,CAAC,KAAyB,EAAE,GAAG,GAAG,GAAG;IAClD,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3E,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/D,CAAC;AAED,kEAAkE;AAClE,MAAM,aAAa,GAA2B;IAC7C,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,uBAAuB;IAChC,WAAW,EAAE,uBAAuB;IACpC,kBAAkB,EAAE,8BAA8B;CAClD,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACrC,OAAoB,EACpB,OAAgE;IAEhE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACnC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,UAAU,CAAA;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,SAAS,CAAA;IAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,uBAAuB,OAAO,IAAI,MAAM,EAAE,CAAA;IAC7F,MAAM,IAAI,GAAG,0BAA0B,IAAI,GAAG,CAAA;IAC9C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,YAAY,CAAA;QAC9D,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,mCAAmC,OAAO,gDAAgD,CAAA;IACpK,CAAC;IACD,OAAO,GAAG,IAAI,qGAAqG,OAAO,8FAA8F,CAAA;AACzN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,SAAwE,EACxE,OAAwE;IAExE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACvD,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACtD,MAAM,GAAG,GACR,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAA;QACxF,MAAM,IAAI,GAAG,cAAc,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,cAAc,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,CAAA;QAC1G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,kFAAkF;IAClF,4EAA4E;CAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,OAAmC,EACnC,IAAuB,EACvB,OAAmC;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO;YACN,IAAI,EAAE,8KAA8K;SACpL,CAAA;IACF,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAClC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAA;IACzD,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;gBACN,IAAI,EAAE,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,mFAAmF;aAC7H,CAAA;QACF,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,EAAE,IAAI,EAAE,4EAA4E,EAAE,CAAA;QAC9F,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAChD,OAAO;gBACN,IAAI,EAAE,4BAA4B,MAAM,CAAC,OAAO,sGAAsG,MAAM,CAAC,OAAO,WAAW;gBAC/K,OAAO,EAAE,MAAM,CAAC,OAAO;aACvB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;QACxE,CAAC;IACF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,mBAAmB,EAAE,EAAE,CAAA;AAClD,CAAC"}
|
|
@@ -12,6 +12,20 @@
|
|
|
12
12
|
* path under the system directory so a same-named executable earlier on `PATH`
|
|
13
13
|
* cannot answer instead.
|
|
14
14
|
*
|
|
15
|
+
* ## WSL: the Windows browser
|
|
16
|
+
*
|
|
17
|
+
* Under WSL the desktop the user looks at is Windows', and `xdg-open` reaches
|
|
18
|
+
* a Linux browser at best (usually nothing). With interop on, the address goes
|
|
19
|
+
* to Windows' own protocol handler through `powershell.exe`, named by absolute
|
|
20
|
+
* path, running a CONSTANT script (`Start-Process -FilePath
|
|
21
|
+
* $env:NAMZU_OPEN_URL`) sent as `-EncodedCommand`: the address reaches it only
|
|
22
|
+
* as an environment variable named in `WSLENV`, so nothing parses it as code
|
|
23
|
+
* — the same shape as the WSL toast in `notifications/desktop/windows-toast.ts`.
|
|
24
|
+
* This is what the `open` package does on WSL too, minus its six dependencies
|
|
25
|
+
* and its quoting of the address into the script text. `cmd.exe /c start` is
|
|
26
|
+
* not used, for the reason above; `explorer.exe` is not used because it exits
|
|
27
|
+
* 1 even when it opened the page.
|
|
28
|
+
*
|
|
15
29
|
* ## Best effort, reported honestly
|
|
16
30
|
*
|
|
17
31
|
* Returns whether a launcher was even STARTED, not whether a browser appeared
|
|
@@ -20,5 +34,19 @@
|
|
|
20
34
|
* stop reading". On a machine with no graphical session there is nothing to
|
|
21
35
|
* start and this says so, which is the case the paste path exists for.
|
|
22
36
|
*/
|
|
23
|
-
|
|
37
|
+
/** Where Windows keeps PowerShell, under a WSL mount root (`/mnt/` by default). */
|
|
38
|
+
export declare function wslPowershell(mountRoot?: string): string;
|
|
39
|
+
/** PowerShell under the default mount root. */
|
|
40
|
+
export declare const WSL_POWERSHELL: string;
|
|
41
|
+
/** The whole WSL script. The address is data in the environment, never text here. */
|
|
42
|
+
export declare const WSL_OPEN_SCRIPT: string;
|
|
43
|
+
/** The machine, injectable so a test can describe one it is not running on. */
|
|
44
|
+
export interface BrowserHost {
|
|
45
|
+
readonly platform?: NodeJS.Platform;
|
|
46
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
47
|
+
readonly exists?: (path: string) => boolean;
|
|
48
|
+
/** Reads `/etc/wsl.conf`, for where the Windows drives are mounted. */
|
|
49
|
+
readonly readFile?: (path: string) => string | undefined;
|
|
50
|
+
}
|
|
51
|
+
export declare function openInBrowser(url: string, host?: BrowserHost): boolean;
|
|
24
52
|
//# sourceMappingURL=open-browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/tui/open-browser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/tui/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AA+BH,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,SAAS,GAAE,MAA+B,GAAG,MAAM,CAEhF;AAED,+CAA+C;AAC/C,eAAO,MAAM,cAAc,QAAkB,CAAA;AAE7C,qFAAqF;AACrF,eAAO,MAAM,eAAe,QAGhB,CAAA;AAEZ,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;CACxD;AAwDD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CA0B1E"}
|
package/dist/tui/open-browser.js
CHANGED
|
@@ -12,6 +12,20 @@
|
|
|
12
12
|
* path under the system directory so a same-named executable earlier on `PATH`
|
|
13
13
|
* cannot answer instead.
|
|
14
14
|
*
|
|
15
|
+
* ## WSL: the Windows browser
|
|
16
|
+
*
|
|
17
|
+
* Under WSL the desktop the user looks at is Windows', and `xdg-open` reaches
|
|
18
|
+
* a Linux browser at best (usually nothing). With interop on, the address goes
|
|
19
|
+
* to Windows' own protocol handler through `powershell.exe`, named by absolute
|
|
20
|
+
* path, running a CONSTANT script (`Start-Process -FilePath
|
|
21
|
+
* $env:NAMZU_OPEN_URL`) sent as `-EncodedCommand`: the address reaches it only
|
|
22
|
+
* as an environment variable named in `WSLENV`, so nothing parses it as code
|
|
23
|
+
* — the same shape as the WSL toast in `notifications/desktop/windows-toast.ts`.
|
|
24
|
+
* This is what the `open` package does on WSL too, minus its six dependencies
|
|
25
|
+
* and its quoting of the address into the script text. `cmd.exe /c start` is
|
|
26
|
+
* not used, for the reason above; `explorer.exe` is not used because it exits
|
|
27
|
+
* 1 even when it opened the page.
|
|
28
|
+
*
|
|
15
29
|
* ## Best effort, reported honestly
|
|
16
30
|
*
|
|
17
31
|
* Returns whether a launcher was even STARTED, not whether a browser appeared
|
|
@@ -21,12 +35,13 @@
|
|
|
21
35
|
* start and this says so, which is the case the paste path exists for.
|
|
22
36
|
*/
|
|
23
37
|
import { spawn } from 'node:child_process';
|
|
24
|
-
import { constants, accessSync } from 'node:fs';
|
|
38
|
+
import { constants, accessSync, existsSync } from 'node:fs';
|
|
25
39
|
import { platform } from 'node:os';
|
|
26
40
|
import { delimiter, isAbsolute, join } from 'node:path';
|
|
41
|
+
import { DEFAULT_WSL_MOUNT_ROOT, detectWsl, readWslMountRoot, wslSystem32, } from '../context/environment.js';
|
|
27
42
|
/** Resolve a launcher before claiming that one started. */
|
|
28
|
-
function executableOnPath(name) {
|
|
29
|
-
for (const directory of (
|
|
43
|
+
function executableOnPath(name, env) {
|
|
44
|
+
for (const directory of (env.PATH ?? '').split(delimiter)) {
|
|
30
45
|
// An empty or relative PATH member delegates executable authority to the
|
|
31
46
|
// project cwd. Opening an OAuth URL must never run a project-owned helper.
|
|
32
47
|
if (!directory || !isAbsolute(directory))
|
|
@@ -42,23 +57,80 @@ function executableOnPath(name) {
|
|
|
42
57
|
}
|
|
43
58
|
return null;
|
|
44
59
|
}
|
|
45
|
-
|
|
60
|
+
/** Where Windows keeps PowerShell, under a WSL mount root (`/mnt/` by default). */
|
|
61
|
+
export function wslPowershell(mountRoot = DEFAULT_WSL_MOUNT_ROOT) {
|
|
62
|
+
return `${wslSystem32(mountRoot)}/WindowsPowerShell/v1.0/powershell.exe`;
|
|
63
|
+
}
|
|
64
|
+
/** PowerShell under the default mount root. */
|
|
65
|
+
export const WSL_POWERSHELL = wslPowershell();
|
|
66
|
+
/** The whole WSL script. The address is data in the environment, never text here. */
|
|
67
|
+
export const WSL_OPEN_SCRIPT = [
|
|
68
|
+
"$ErrorActionPreference = 'Stop'",
|
|
69
|
+
'Start-Process -FilePath $env:NAMZU_OPEN_URL',
|
|
70
|
+
].join('\n');
|
|
71
|
+
/** Windows' protocol handler through interop, or `null` when this is not a WSL that can reach it. */
|
|
72
|
+
function wslLaunch(url, env, host) {
|
|
73
|
+
const exists = host.exists ?? existsSync;
|
|
74
|
+
// `/etc/wsl.conf` can move the drives (`[automount] root = /win/`), and
|
|
75
|
+
// PowerShell and the directory it starts in move with them.
|
|
76
|
+
const mountRoot = host.readFile ? readWslMountRoot(host.readFile) : readWslMountRoot();
|
|
77
|
+
const wsl = detectWsl(env, { exists, list: () => [], mountRoot });
|
|
78
|
+
if (!wsl?.interop)
|
|
79
|
+
return null;
|
|
80
|
+
const powershell = wslPowershell(mountRoot);
|
|
81
|
+
if (!exists(powershell))
|
|
82
|
+
return null;
|
|
83
|
+
const passed = (env.WSLENV ?? '')
|
|
84
|
+
.split(':')
|
|
85
|
+
.filter((name) => name && !name.startsWith('NAMZU_OPEN_URL'));
|
|
86
|
+
return {
|
|
87
|
+
command: powershell,
|
|
88
|
+
args: [
|
|
89
|
+
'-NoProfile',
|
|
90
|
+
'-NonInteractive',
|
|
91
|
+
'-ExecutionPolicy',
|
|
92
|
+
'Bypass',
|
|
93
|
+
'-EncodedCommand',
|
|
94
|
+
Buffer.from(WSL_OPEN_SCRIPT, 'utf16le').toString('base64'),
|
|
95
|
+
],
|
|
96
|
+
env: { ...env, NAMZU_OPEN_URL: url, WSLENV: [...passed, 'NAMZU_OPEN_URL'].join(':') },
|
|
97
|
+
// A Windows program started from a Linux directory warns about UNC
|
|
98
|
+
// paths; the drive PowerShell lives on is a Windows directory.
|
|
99
|
+
cwd: `${mountRoot}c`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function launchFor(url, host) {
|
|
103
|
+
const currentPlatform = host.platform ?? platform();
|
|
104
|
+
const env = host.env ?? process.env;
|
|
105
|
+
if (currentPlatform === 'win32') {
|
|
106
|
+
return {
|
|
107
|
+
command: join(env.SystemRoot ?? 'C:\\Windows', 'System32', 'rundll32.exe'),
|
|
108
|
+
args: ['url.dll,FileProtocolHandler', url],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (currentPlatform === 'linux') {
|
|
112
|
+
const wsl = wslLaunch(url, env, host);
|
|
113
|
+
if (wsl)
|
|
114
|
+
return wsl;
|
|
115
|
+
}
|
|
116
|
+
const command = executableOnPath(currentPlatform === 'darwin' ? 'open' : 'xdg-open', env);
|
|
117
|
+
return command ? { command, args: [url] } : null;
|
|
118
|
+
}
|
|
119
|
+
export function openInBrowser(url, host = {}) {
|
|
46
120
|
// Refuse anything that is not a web address. This is handed to the
|
|
47
121
|
// machine's protocol handler, and `file:` or a custom scheme reaching it
|
|
48
122
|
// would be this function opening something nobody named.
|
|
49
123
|
if (!/^https?:\/\//i.test(url))
|
|
50
124
|
return false;
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
? join(process.env.SystemRoot ?? 'C:\\Windows', 'System32', 'rundll32.exe')
|
|
54
|
-
: executableOnPath(currentPlatform === 'darwin' ? 'open' : 'xdg-open');
|
|
55
|
-
if (!command)
|
|
125
|
+
const launch = launchFor(url, host);
|
|
126
|
+
if (!launch)
|
|
56
127
|
return false;
|
|
57
|
-
const args = currentPlatform === 'win32' ? ['url.dll,FileProtocolHandler', url] : [url];
|
|
58
128
|
try {
|
|
59
|
-
const child = spawn(command, args, {
|
|
129
|
+
const child = spawn(launch.command, [...launch.args], {
|
|
60
130
|
stdio: 'ignore',
|
|
61
131
|
detached: true,
|
|
132
|
+
...(launch.env ? { env: launch.env } : {}),
|
|
133
|
+
...(launch.cwd ? { cwd: launch.cwd } : {}),
|
|
62
134
|
});
|
|
63
135
|
// A missing launcher — no `xdg-open` in a container — arrives as an
|
|
64
136
|
// async error event, long after this function returned. Swallowing it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/tui/open-browser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/tui/open-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,7 +89,16 @@ export declare function buildPermissionReview(calls: readonly PermissionReviewCa
|
|
|
89
89
|
* is the one case that opens exact-first: the formatter is stale, and a
|
|
90
90
|
* reader should see that rather than a projection that happens to be right.
|
|
91
91
|
*/
|
|
92
|
-
|
|
92
|
+
/** What the screen can learn, beyond the envelope, to make a call readable. */
|
|
93
|
+
export interface PermissionSummaryContext {
|
|
94
|
+
/**
|
|
95
|
+
* The control a `computer_use` `ui_act` ref names in the latest UI
|
|
96
|
+
* snapshot (`Button "Beş" (e30)`), from the session's tool. Absent, the
|
|
97
|
+
* ref alone is shown.
|
|
98
|
+
*/
|
|
99
|
+
readonly describeUiRef?: (ref: string) => string | undefined;
|
|
100
|
+
}
|
|
101
|
+
export declare function buildPermissionSummary(review: string, context?: PermissionSummaryContext): PermissionReviewSummary;
|
|
93
102
|
/**
|
|
94
103
|
* Project and wrap exact review text into PHYSICAL terminal rows.
|
|
95
104
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-review.d.ts","sourceRoot":"","sources":["../../src/tui/permission-review.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAA;AAEhD,qEAAqE;AACrE,eAAO,MAAM,2BAA2B,IAAI,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,SAAS;IACnB,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAA;QAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KACzC,CAAA;CACD,EAAE,GACD,OAAO,CAKT;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAAA;CAAE,CAAA;AAE3E,MAAM,WAAW,uBAAuB;IACvC,sFAAsF;IACtF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC1B;AASD,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,MAAM,CAIvF;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IACnC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC9B;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,SAAS,oBAAoB,EAAE,EACtC,QAAQ,SAA8B,GACpC,sBAAsB,CAqJxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"permission-review.d.ts","sourceRoot":"","sources":["../../src/tui/permission-review.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAA;AAEhD,qEAAqE;AACrE,eAAO,MAAM,2BAA2B,IAAI,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,SAAS;IACnB,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAA;QAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KACzC,CAAA;CACD,EAAE,GACD,OAAO,CAKT;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAAA;CAAE,CAAA;AAE3E,MAAM,WAAW,uBAAuB;IACvC,sFAAsF;IACtF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC1B;AASD,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,MAAM,CAIvF;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IACnC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC9B;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,SAAS,oBAAoB,EAAE,EACtC,QAAQ,SAA8B,GACpC,sBAAsB,CAqJxB;AAED;;;;;;;;;;;;;GAaG;AACH,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;CAC5D;AAED,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACpC,uBAAuB,CA+EzB;AA+kBD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,SAAS,GACjC,SAAS,mBAAmB,EAAE,CA6BhC"}
|