@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { capabilityCheckId } from '../../context/capabilities.js';
|
|
2
|
+
import { browserEngineCheck } from './browser.js';
|
|
2
3
|
import { providerChainCheck } from './chain.js';
|
|
3
4
|
import { credentialSourcesCheck } from './credentials.js';
|
|
4
5
|
import { invariantsCheck } from './invariants.js';
|
|
@@ -6,6 +7,7 @@ import { loggingPipelineCheck } from './logging.js';
|
|
|
6
7
|
import { providersRegisteredCheck } from './providers.js';
|
|
7
8
|
import { cwdWritableCheck, tmpdirWritableCheck } from './runtime.js';
|
|
8
9
|
import { sandboxPlatformCheck } from './sandbox.js';
|
|
10
|
+
import { schedulerCheck } from './scheduler.js';
|
|
9
11
|
import { describeInstalledPackage, telemetryInstalledCheck } from './telemetry.js';
|
|
10
12
|
import { vaultRegisteredCheck } from './vault.js';
|
|
11
13
|
/**
|
|
@@ -35,12 +37,13 @@ function installedCheck(specifier, category) {
|
|
|
35
37
|
export const sandboxInstalledCheck = installedCheck('@namzu/sandbox', 'sandbox');
|
|
36
38
|
export const filesInstalledCheck = installedCheck('@namzu/files', 'custom');
|
|
37
39
|
export const computerUseInstalledCheck = installedCheck('@namzu/computer-use', 'custom');
|
|
40
|
+
export const browserInstalledCheck = installedCheck('@namzu/browser', 'custom');
|
|
38
41
|
// NOTE the fix versus the original submission: sandboxInstalledCheck /
|
|
39
42
|
// filesInstalledCheck / computerUseInstalledCheck are NOT repeated here.
|
|
40
43
|
// They already carry their own `export` keyword above; naming them again in
|
|
41
44
|
// this aggregation block is a duplicate-export declaration and fails
|
|
42
45
|
// `tsc --build` with TS2323/TS2484 (confirmed by building this exact file).
|
|
43
|
-
export { credentialSourcesCheck, providerChainCheck, providersRegisteredCheck, cwdWritableCheck, tmpdirWritableCheck, invariantsCheck, loggingPipelineCheck, sandboxPlatformCheck, telemetryInstalledCheck, vaultRegisteredCheck, };
|
|
46
|
+
export { browserEngineCheck, credentialSourcesCheck, providerChainCheck, providersRegisteredCheck, cwdWritableCheck, tmpdirWritableCheck, invariantsCheck, loggingPipelineCheck, sandboxPlatformCheck, schedulerCheck, telemetryInstalledCheck, vaultRegisteredCheck, };
|
|
44
47
|
export const builtInDoctorChecks = [
|
|
45
48
|
sandboxPlatformCheck,
|
|
46
49
|
cwdWritableCheck,
|
|
@@ -55,7 +58,11 @@ export const builtInDoctorChecks = [
|
|
|
55
58
|
sandboxInstalledCheck,
|
|
56
59
|
filesInstalledCheck,
|
|
57
60
|
computerUseInstalledCheck,
|
|
61
|
+
browserInstalledCheck,
|
|
62
|
+
// After the package check: which browser it would drive here, and how.
|
|
63
|
+
browserEngineCheck,
|
|
58
64
|
telemetryInstalledCheck,
|
|
65
|
+
schedulerCheck,
|
|
59
66
|
// Last, deliberately: it reports what the pipeline did to the records
|
|
60
67
|
// every check above it just produced, so running it first would report a
|
|
61
68
|
// process that had barely logged anything yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/checks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,SAAiB,EAAE,QAAiC;IAC3E,OAAO;QACN,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC;QAChC,QAAQ;QACR,GAAG,EAAE,GAA+B,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC;KAC1E,CAAA;AACF,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAgB,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAgB,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAgB,cAAc,CACnE,qBAAqB,EACrB,QAAQ,CACR,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/checks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,SAAiB,EAAE,QAAiC;IAC3E,OAAO;QACN,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC;QAChC,QAAQ;QACR,GAAG,EAAE,GAA+B,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC;KAC1E,CAAA;AACF,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAgB,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAgB,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAgB,cAAc,CACnE,qBAAqB,EACrB,QAAQ,CACR,CAAA;AACD,MAAM,CAAC,MAAM,qBAAqB,GAAgB,cAAc,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;AAE5F,uEAAuE;AACvE,yEAAyE;AACzE,4EAA4E;AAC5E,qEAAqE;AACrE,4EAA4E;AAC5E,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,GACpB,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IAC1D,oBAAoB;IACpB,gBAAgB;IAChB,mBAAmB;IACnB,wBAAwB;IACxB,sBAAsB;IACtB,4EAA4E;IAC5E,0EAA0E;IAC1E,wCAAwC;IACxC,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,yBAAyB;IACzB,qBAAqB;IACrB,uEAAuE;IACvE,kBAAkB;IAClB,uBAAuB;IACvB,cAAc;IACd,sEAAsE;IACtE,yEAAyE;IACzE,+CAA+C;IAC/C,oBAAoB;IACpB,eAAe;CACf,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DoctorCheck } from '@namzu/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* The scheduler, as far as files can tell without asking a service manager:
|
|
4
|
+
* whether jobs exist without a scheduler to run them, whether the installed
|
|
5
|
+
* service points at a node and a CLI that still exist, and how long ago the
|
|
6
|
+
* daemon last wrote its heartbeat. `namzu schedule status` asks the service
|
|
7
|
+
* manager too.
|
|
8
|
+
*/
|
|
9
|
+
export declare const schedulerCheck: DoctorCheck;
|
|
10
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAA;AAMhE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,WAwD5B,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { readFileSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { resolveNamzuHome } from '../../integrations/state/home.js';
|
|
3
|
+
import { schedulePaths } from '../../schedule/paths.js';
|
|
4
|
+
import { readManifest } from '../../schedule/service/manifest.js';
|
|
5
|
+
import { listJobs } from '../../schedule/store/jobs.js';
|
|
6
|
+
/**
|
|
7
|
+
* The scheduler, as far as files can tell without asking a service manager:
|
|
8
|
+
* whether jobs exist without a scheduler to run them, whether the installed
|
|
9
|
+
* service points at a node and a CLI that still exist, and how long ago the
|
|
10
|
+
* daemon last wrote its heartbeat. `namzu schedule status` asks the service
|
|
11
|
+
* manager too.
|
|
12
|
+
*/
|
|
13
|
+
export const schedulerCheck = {
|
|
14
|
+
id: 'scheduler.service',
|
|
15
|
+
category: 'runtime',
|
|
16
|
+
async run(ctx) {
|
|
17
|
+
const paths = schedulePaths(resolveNamzuHome({ env: ctx.env }));
|
|
18
|
+
let jobs = 0;
|
|
19
|
+
try {
|
|
20
|
+
jobs = listJobs(paths).jobs.filter((j) => j.state === 'active').length;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
jobs = 0;
|
|
24
|
+
}
|
|
25
|
+
let manifest;
|
|
26
|
+
try {
|
|
27
|
+
manifest = readManifest(paths);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return { status: 'fail', message: error instanceof Error ? error.message : String(error) };
|
|
31
|
+
}
|
|
32
|
+
if (!manifest) {
|
|
33
|
+
return jobs > 0
|
|
34
|
+
? {
|
|
35
|
+
status: 'warn',
|
|
36
|
+
message: `${jobs} active scheduled job(s) and no scheduler installed; they will not run`,
|
|
37
|
+
remediation: 'namzu schedule install',
|
|
38
|
+
}
|
|
39
|
+
: { status: 'skipped', message: 'no scheduled jobs and no scheduler installed' };
|
|
40
|
+
}
|
|
41
|
+
for (const path of [manifest.nodePath, manifest.binPath]) {
|
|
42
|
+
try {
|
|
43
|
+
realpathSync(path);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return {
|
|
47
|
+
status: 'fail',
|
|
48
|
+
message: `the scheduler service starts ${path}, which no longer exists`,
|
|
49
|
+
remediation: 'namzu schedule install',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
let age;
|
|
54
|
+
try {
|
|
55
|
+
const beat = JSON.parse(readFileSync(paths.heartbeat, 'utf8'));
|
|
56
|
+
age = beat.at ? Date.now() - Date.parse(beat.at) : undefined;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
age = undefined;
|
|
60
|
+
}
|
|
61
|
+
if (age === undefined || age > 90_000) {
|
|
62
|
+
return {
|
|
63
|
+
status: 'warn',
|
|
64
|
+
message: `${manifest.name} (${manifest.platform}) is installed but the daemon has not been seen ${age === undefined ? 'yet' : `for ${Math.round(age / 1000)} s`}`,
|
|
65
|
+
remediation: 'namzu schedule status',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
status: 'pass',
|
|
70
|
+
message: `${manifest.name} (${manifest.platform}) running; ${jobs} active job(s)`,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/doctor/checks/scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { createDoctorRegistry, doctor, DoctorRegistry, registerDoctorCheck, runDoctor, } from './doctor/registry.js';
|
|
7
7
|
export type { RunDoctorOptions } from './doctor/registry.js';
|
|
8
|
-
export { builtInDoctorChecks, computerUseInstalledCheck, credentialSourcesCheck, cwdWritableCheck, filesInstalledCheck, providerChainCheck, providersRegisteredCheck, sandboxInstalledCheck, sandboxPlatformCheck, telemetryInstalledCheck, tmpdirWritableCheck, vaultRegisteredCheck, } from './doctor/checks/index.js';
|
|
8
|
+
export { browserEngineCheck, browserInstalledCheck, builtInDoctorChecks, computerUseInstalledCheck, credentialSourcesCheck, cwdWritableCheck, filesInstalledCheck, providerChainCheck, providersRegisteredCheck, sandboxInstalledCheck, sandboxPlatformCheck, telemetryInstalledCheck, tmpdirWritableCheck, vaultRegisteredCheck, } from './doctor/checks/index.js';
|
|
9
9
|
export { type CapabilityProbe, NAMZU_OPTIONAL_CAPABILITIES, probeCapabilities, probeOptionalPackage, } from './context/capabilities.js';
|
|
10
10
|
export { runDoctorCommand } from './commands/doctor.js';
|
|
11
11
|
export { runCli, type RunCliOptions } from './cli.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACN,oBAAoB,EACpB,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,SAAS,GACT,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,EACN,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACN,KAAK,eAAe,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACN,WAAW,EACX,eAAe,EACf,KAAK,eAAe,GACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,eAAe,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,SAAS,GACd,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACN,oBAAoB,EACpB,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,SAAS,GACT,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACN,KAAK,eAAe,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACN,WAAW,EACX,eAAe,EACf,KAAK,eAAe,GACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,eAAe,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,SAAS,GACd,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// Doctor library API (pre-M0; preserved for embedded consumers).
|
|
7
7
|
export { createDoctorRegistry, doctor, DoctorRegistry, registerDoctorCheck, runDoctor, } from './doctor/registry.js';
|
|
8
|
-
export { builtInDoctorChecks, computerUseInstalledCheck, credentialSourcesCheck, cwdWritableCheck, filesInstalledCheck, providerChainCheck, providersRegisteredCheck, sandboxInstalledCheck, sandboxPlatformCheck, telemetryInstalledCheck, tmpdirWritableCheck, vaultRegisteredCheck, } from './doctor/checks/index.js';
|
|
8
|
+
export { browserEngineCheck, browserInstalledCheck, builtInDoctorChecks, computerUseInstalledCheck, credentialSourcesCheck, cwdWritableCheck, filesInstalledCheck, providerChainCheck, providersRegisteredCheck, sandboxInstalledCheck, sandboxPlatformCheck, telemetryInstalledCheck, tmpdirWritableCheck, vaultRegisteredCheck, } from './doctor/checks/index.js';
|
|
9
9
|
export { NAMZU_OPTIONAL_CAPABILITIES, probeCapabilities, probeOptionalPackage, } from './context/capabilities.js';
|
|
10
10
|
export { runDoctorCommand } from './commands/doctor.js';
|
|
11
11
|
// Shell + extension surface for the CLI.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iEAAiE;AACjE,OAAO,EACN,oBAAoB,EACpB,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,SAAS,GACT,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACN,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAEN,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AAOrD,OAAO,EACN,WAAW,EACX,eAAe,GAEf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,eAAe,EAIf,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,wBAAwB,GAKxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,cAAc,GAQd,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iEAAiE;AACjE,OAAO,EACN,oBAAoB,EACpB,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,SAAS,GACT,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAEN,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AAOrD,OAAO,EACN,WAAW,EACX,eAAe,GAEf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACN,eAAe,EAIf,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,wBAAwB,GAKxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,cAAc,GAQd,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Linux desktop notification over the session bus: `notify-send` when it
|
|
3
|
+
* is installed (arguments are argv, never a shell), else `gdbus`, whose
|
|
4
|
+
* arguments are GVariant text and so are quoted as GVariant strings here.
|
|
5
|
+
*/
|
|
6
|
+
/** A GVariant string literal: single-quoted, backslash and quote escaped. */
|
|
7
|
+
export declare function gvariantString(text: string): string;
|
|
8
|
+
export declare function notifySendArguments(title: string, body: string): string[];
|
|
9
|
+
export declare function gdbusArguments(title: string, body: string): string[];
|
|
10
|
+
//# sourceMappingURL=freedesktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freedesktop.d.ts","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/freedesktop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Linux desktop notification over the session bus: `notify-send` when it
|
|
3
|
+
* is installed (arguments are argv, never a shell), else `gdbus`, whose
|
|
4
|
+
* arguments are GVariant text and so are quoted as GVariant strings here.
|
|
5
|
+
*/
|
|
6
|
+
/** A GVariant string literal: single-quoted, backslash and quote escaped. */
|
|
7
|
+
export function gvariantString(text) {
|
|
8
|
+
return `'${text.replaceAll('\\', '\\\\').replaceAll("'", "\\'")}'`;
|
|
9
|
+
}
|
|
10
|
+
export function notifySendArguments(title, body) {
|
|
11
|
+
return ['--app-name=namzu', '--', title, body];
|
|
12
|
+
}
|
|
13
|
+
export function gdbusArguments(title, body) {
|
|
14
|
+
return [
|
|
15
|
+
'call',
|
|
16
|
+
'--session',
|
|
17
|
+
'--dest',
|
|
18
|
+
'org.freedesktop.Notifications',
|
|
19
|
+
'--object-path',
|
|
20
|
+
'/org/freedesktop/Notifications',
|
|
21
|
+
'--method',
|
|
22
|
+
'org.freedesktop.Notifications.Notify',
|
|
23
|
+
gvariantString('namzu'),
|
|
24
|
+
'0',
|
|
25
|
+
gvariantString(''),
|
|
26
|
+
gvariantString(title),
|
|
27
|
+
gvariantString(body),
|
|
28
|
+
'[]',
|
|
29
|
+
'{}',
|
|
30
|
+
'10000',
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=freedesktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freedesktop.js","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/freedesktop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,IAAY;IAC9D,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAY;IACzD,OAAO;QACN,MAAM;QACN,WAAW;QACX,QAAQ;QACR,+BAA+B;QAC/B,eAAe;QACf,gCAAgC;QAChC,UAAU;QACV,sCAAsC;QACtC,cAAc,CAAC,OAAO,CAAC;QACvB,GAAG;QACH,cAAc,CAAC,EAAE,CAAC;QAClB,cAAc,CAAC,KAAK,CAAC;QACrB,cAAc,CAAC,IAAI,CAAC;QACpB,IAAI;QACJ,IAAI;QACJ,OAAO;KACP,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A macOS notification through `osascript`. The title and body are argv
|
|
3
|
+
* items the script reads (`item 1 of argv`), never text spliced into it.
|
|
4
|
+
*/
|
|
5
|
+
export declare function osascriptArguments(title: string, body: string): string[];
|
|
6
|
+
//# sourceMappingURL=macos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.d.ts","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/macos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWxE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A macOS notification through `osascript`. The title and body are argv
|
|
3
|
+
* items the script reads (`item 1 of argv`), never text spliced into it.
|
|
4
|
+
*/
|
|
5
|
+
export function osascriptArguments(title, body) {
|
|
6
|
+
return [
|
|
7
|
+
'-e',
|
|
8
|
+
'on run argv',
|
|
9
|
+
'-e',
|
|
10
|
+
'display notification (item 2 of argv) with title (item 1 of argv)',
|
|
11
|
+
'-e',
|
|
12
|
+
'end run',
|
|
13
|
+
title,
|
|
14
|
+
body,
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=macos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.js","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/macos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,IAAY;IAC7D,OAAO;QACN,IAAI;QACJ,aAAa;QACb,IAAI;QACJ,mEAAmE;QACnE,IAAI;QACJ,SAAS;QACT,KAAK;QACL,IAAI;KACJ,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text that crosses into another program — a desktop notification, a history
|
|
3
|
+
* summary — is data, and is made safe to show as data.
|
|
4
|
+
*
|
|
5
|
+
* Control characters (C0, DEL, C1), format characters that render as nothing
|
|
6
|
+
* (zero-width space and joiners, soft hyphen, the byte-order mark) and the
|
|
7
|
+
* bidirectional controls (embeddings, overrides, isolates, marks) are removed;
|
|
8
|
+
* whitespace runs become one space; the result is capped with an ellipsis.
|
|
9
|
+
* Written over code points rather than a regular expression so the ranges are
|
|
10
|
+
* plain numbers a reader can check.
|
|
11
|
+
*/
|
|
12
|
+
/** One safe line of at most `max` characters. */
|
|
13
|
+
export declare function sanitizeLine(text: string, max: number): string;
|
|
14
|
+
/** The first non-empty line of `text`, made safe and capped: a run's summary. */
|
|
15
|
+
export declare function summaryOf(text: string, max?: number): string;
|
|
16
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAMzD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text that crosses into another program — a desktop notification, a history
|
|
3
|
+
* summary — is data, and is made safe to show as data.
|
|
4
|
+
*
|
|
5
|
+
* Control characters (C0, DEL, C1), format characters that render as nothing
|
|
6
|
+
* (zero-width space and joiners, soft hyphen, the byte-order mark) and the
|
|
7
|
+
* bidirectional controls (embeddings, overrides, isolates, marks) are removed;
|
|
8
|
+
* whitespace runs become one space; the result is capped with an ellipsis.
|
|
9
|
+
* Written over code points rather than a regular expression so the ranges are
|
|
10
|
+
* plain numbers a reader can check.
|
|
11
|
+
*/
|
|
12
|
+
const STRIPPED = [
|
|
13
|
+
[0x0000, 0x001f], // C0 controls (newline and tab too: a notification is one line)
|
|
14
|
+
[0x007f, 0x009f], // DEL and C1 controls
|
|
15
|
+
[0x00ad, 0x00ad], // soft hyphen
|
|
16
|
+
[0x061c, 0x061c], // Arabic letter mark
|
|
17
|
+
[0x180e, 0x180e], // Mongolian vowel separator
|
|
18
|
+
[0x200b, 0x200f], // zero-width space, joiners, LRM, RLM
|
|
19
|
+
[0x2028, 0x202e], // line and paragraph separators, embeddings and overrides
|
|
20
|
+
[0x2060, 0x206f], // word joiner, invisible operators, isolates, deprecated formats
|
|
21
|
+
[0xfeff, 0xfeff], // byte-order mark
|
|
22
|
+
[0xfff9, 0xfffb], // interlinear annotations
|
|
23
|
+
];
|
|
24
|
+
function stripped(code) {
|
|
25
|
+
return STRIPPED.some(([lo, hi]) => code >= lo && code <= hi);
|
|
26
|
+
}
|
|
27
|
+
/** One safe line of at most `max` characters. */
|
|
28
|
+
export function sanitizeLine(text, max) {
|
|
29
|
+
let out = '';
|
|
30
|
+
for (const ch of text) {
|
|
31
|
+
const code = ch.codePointAt(0) ?? 0;
|
|
32
|
+
if (code === 0x09 || code === 0x0a || code === 0x0d)
|
|
33
|
+
out += ' ';
|
|
34
|
+
else if (!stripped(code))
|
|
35
|
+
out += ch;
|
|
36
|
+
}
|
|
37
|
+
out = out.replace(/\s+/g, ' ').trim();
|
|
38
|
+
const chars = [...out];
|
|
39
|
+
return chars.length > max ? `${chars.slice(0, max - 1).join('')}…` : out;
|
|
40
|
+
}
|
|
41
|
+
/** The first non-empty line of `text`, made safe and capped: a run's summary. */
|
|
42
|
+
export function summaryOf(text, max = 200) {
|
|
43
|
+
const first = text
|
|
44
|
+
.split(/\r?\n/)
|
|
45
|
+
.map((line) => line.replace(/^[#>*\-\s`]+/, '').trim())
|
|
46
|
+
.find((line) => line.length > 0);
|
|
47
|
+
return first ? sanitizeLine(first, max) : '';
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,QAAQ,GAA2C;IACxD,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,gEAAgE;IAClF,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,sBAAsB;IACxC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAChC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,qBAAqB;IACvC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,4BAA4B;IAC9C,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,sCAAsC;IACxD,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,0DAA0D;IAC5E,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,iEAAiE;IACnF,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;IACpC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,0BAA0B;CAC5C,CAAA;AAED,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;AAC7D,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAW;IACrD,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,GAAG,IAAI,GAAG,CAAA;aAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,IAAI,EAAE,CAAA;IACpC,CAAC;IACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;IACtB,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AACzE,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAG,GAAG,GAAG;IAChD,MAAM,KAAK,GAAG,IAAI;SAChB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACtD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* At most one notification per job every ten minutes and twenty a day in
|
|
3
|
+
* all; what is held back is counted, for the TUI's next startup line.
|
|
4
|
+
* Kept in `schedule/daemon/notify.json`, written only by the daemon.
|
|
5
|
+
*/
|
|
6
|
+
/** Whether a notification for `jobId` may go out now; records it when it may. */
|
|
7
|
+
export declare function admitNotification(path: string, jobId: string, now?: number): boolean;
|
|
8
|
+
/** How many notifications were held back since the count was last taken; resets it. */
|
|
9
|
+
export declare function takeSuppressedCount(path: string): number;
|
|
10
|
+
//# sourceMappingURL=throttle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/throttle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAUxF;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* At most one notification per job every ten minutes and twenty a day in
|
|
3
|
+
* all; what is held back is counted, for the TUI's next startup line.
|
|
4
|
+
* Kept in `schedule/daemon/notify.json`, written only by the daemon.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync } from 'node:fs';
|
|
7
|
+
import { writeJsonAtomic } from '../../../schedule/store/atomic.js';
|
|
8
|
+
const PER_JOB_MS = 10 * 60_000;
|
|
9
|
+
const PER_DAY = 20;
|
|
10
|
+
const DAY_MS = 24 * 60 * 60_000;
|
|
11
|
+
function read(path) {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
14
|
+
if (parsed.kind === 'schedule-notify' && Array.isArray(parsed.sent))
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
catch { }
|
|
18
|
+
return { v: 1, kind: 'schedule-notify', sent: [], suppressed: 0 };
|
|
19
|
+
}
|
|
20
|
+
/** Whether a notification for `jobId` may go out now; records it when it may. */
|
|
21
|
+
export function admitNotification(path, jobId, now = Date.now()) {
|
|
22
|
+
const file = read(path);
|
|
23
|
+
const recent = file.sent.filter((s) => now - s.at < DAY_MS);
|
|
24
|
+
const jobRecent = recent.some((s) => s.jobId === jobId && now - s.at < PER_JOB_MS);
|
|
25
|
+
if (jobRecent || recent.length >= PER_DAY) {
|
|
26
|
+
writeJsonAtomic(path, { ...file, sent: recent, suppressed: file.suppressed + 1 });
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
writeJsonAtomic(path, { ...file, sent: [...recent, { jobId, at: now }] });
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
/** How many notifications were held back since the count was last taken; resets it. */
|
|
33
|
+
export function takeSuppressedCount(path) {
|
|
34
|
+
const file = read(path);
|
|
35
|
+
if (file.suppressed > 0)
|
|
36
|
+
writeJsonAtomic(path, { ...file, suppressed: 0 });
|
|
37
|
+
return file.suppressed;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=throttle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/throttle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAEnE,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,CAAA;AAC9B,MAAM,OAAO,GAAG,EAAE,CAAA;AAClB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;AAS/B,SAAS,IAAI,CAAC,IAAY;IACzB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAA;QACrE,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAA;IACnF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;AAClE,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAA;IAClF,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3C,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAA;QACjF,OAAO,KAAK,CAAA;IACb,CAAC;IACD,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACzE,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;QAAE,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IAC1E,OAAO,IAAI,CAAC,UAAU,CAAA;AACvB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Windows toast through PowerShell and the WinRT notification API — no
|
|
3
|
+
* module to install. Used natively and from WSL (through interop).
|
|
4
|
+
*
|
|
5
|
+
* The script is a CONSTANT, sent as `-EncodedCommand` with no arguments after
|
|
6
|
+
* it: `-Command` would join trailing arguments into the script text, which is
|
|
7
|
+
* exactly the injection this avoids. The title and body reach it only through
|
|
8
|
+
* the environment (`NAMZU_NOTIFY_TITLE`, `NAMZU_NOTIFY_BODY`) and are
|
|
9
|
+
* XML-escaped inside the script before they touch the toast's XML.
|
|
10
|
+
*/
|
|
11
|
+
export declare const TOAST_SCRIPT: string;
|
|
12
|
+
/** The script as `-EncodedCommand` wants it: base64 of UTF-16LE. */
|
|
13
|
+
export declare function encodedToastScript(): string;
|
|
14
|
+
/** For a test: the script never changes with its input. */
|
|
15
|
+
export declare function toastScriptHash(): string;
|
|
16
|
+
export declare function toastArguments(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* The environment for the PowerShell process. Under WSL a Linux variable
|
|
19
|
+
* reaches a Windows process only when `WSLENV` names it; without this the
|
|
20
|
+
* toast would arrive empty.
|
|
21
|
+
*/
|
|
22
|
+
export declare function toastEnvironment(base: NodeJS.ProcessEnv, title: string, body: string, wsl: boolean): NodeJS.ProcessEnv;
|
|
23
|
+
//# sourceMappingURL=windows-toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-toast.d.ts","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/windows-toast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,YAAY,QAUb,CAAA;AAEZ,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CASzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACV,MAAM,CAAC,UAAU,CASnB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Windows toast through PowerShell and the WinRT notification API — no
|
|
3
|
+
* module to install. Used natively and from WSL (through interop).
|
|
4
|
+
*
|
|
5
|
+
* The script is a CONSTANT, sent as `-EncodedCommand` with no arguments after
|
|
6
|
+
* it: `-Command` would join trailing arguments into the script text, which is
|
|
7
|
+
* exactly the injection this avoids. The title and body reach it only through
|
|
8
|
+
* the environment (`NAMZU_NOTIFY_TITLE`, `NAMZU_NOTIFY_BODY`) and are
|
|
9
|
+
* XML-escaped inside the script before they touch the toast's XML.
|
|
10
|
+
*/
|
|
11
|
+
import { createHash } from 'node:crypto';
|
|
12
|
+
export const TOAST_SCRIPT = [
|
|
13
|
+
"$ErrorActionPreference = 'Stop'",
|
|
14
|
+
'[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null',
|
|
15
|
+
'[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null',
|
|
16
|
+
'$title = [Security.SecurityElement]::Escape([string]$env:NAMZU_NOTIFY_TITLE)',
|
|
17
|
+
'$body = [Security.SecurityElement]::Escape([string]$env:NAMZU_NOTIFY_BODY)',
|
|
18
|
+
'$xml = New-Object Windows.Data.Xml.Dom.XmlDocument',
|
|
19
|
+
"$xml.LoadXml('<toast><visual><binding template=\"ToastGeneric\"><text>' + $title + '</text><text>' + $body + '</text></binding></visual></toast>')",
|
|
20
|
+
"$app = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\WindowsPowerShell\\v1.0\\powershell.exe'",
|
|
21
|
+
'[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($app).Show([Windows.UI.Notifications.ToastNotification]::new($xml))',
|
|
22
|
+
].join('\n');
|
|
23
|
+
/** The script as `-EncodedCommand` wants it: base64 of UTF-16LE. */
|
|
24
|
+
export function encodedToastScript() {
|
|
25
|
+
return Buffer.from(TOAST_SCRIPT, 'utf16le').toString('base64');
|
|
26
|
+
}
|
|
27
|
+
/** For a test: the script never changes with its input. */
|
|
28
|
+
export function toastScriptHash() {
|
|
29
|
+
return createHash('sha256').update(TOAST_SCRIPT).digest('hex');
|
|
30
|
+
}
|
|
31
|
+
export function toastArguments() {
|
|
32
|
+
return [
|
|
33
|
+
'-NoProfile',
|
|
34
|
+
'-NonInteractive',
|
|
35
|
+
'-ExecutionPolicy',
|
|
36
|
+
'Bypass',
|
|
37
|
+
'-EncodedCommand',
|
|
38
|
+
encodedToastScript(),
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The environment for the PowerShell process. Under WSL a Linux variable
|
|
43
|
+
* reaches a Windows process only when `WSLENV` names it; without this the
|
|
44
|
+
* toast would arrive empty.
|
|
45
|
+
*/
|
|
46
|
+
export function toastEnvironment(base, title, body, wsl) {
|
|
47
|
+
const env = { ...base, NAMZU_NOTIFY_TITLE: title, NAMZU_NOTIFY_BODY: body };
|
|
48
|
+
if (wsl) {
|
|
49
|
+
const existing = (base.WSLENV ?? '')
|
|
50
|
+
.split(':')
|
|
51
|
+
.filter((v) => v && !v.startsWith('NAMZU_NOTIFY_'));
|
|
52
|
+
env.WSLENV = [...existing, 'NAMZU_NOTIFY_TITLE', 'NAMZU_NOTIFY_BODY'].join(':');
|
|
53
|
+
}
|
|
54
|
+
return env;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=windows-toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-toast.js","sourceRoot":"","sources":["../../../../src/integrations/notifications/desktop/windows-toast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,iCAAiC;IACjC,wHAAwH;IACxH,+GAA+G;IAC/G,8EAA8E;IAC9E,4EAA4E;IAC5E,oDAAoD;IACpD,oJAAoJ;IACpJ,0FAA0F;IAC1F,8IAA8I;CAC9I,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,oEAAoE;AACpE,MAAM,UAAU,kBAAkB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO;QACN,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,QAAQ;QACR,iBAAiB;QACjB,kBAAkB,EAAE;KACpB,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC/B,IAAuB,EACvB,KAAa,EACb,IAAY,EACZ,GAAY;IAEZ,MAAM,GAAG,GAAsB,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAA;IAC9F,IAAI,GAAG,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;aAClC,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAA;QACpD,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop notifications for scheduled runs.
|
|
3
|
+
*
|
|
4
|
+
* | Backend | When | How |
|
|
5
|
+
* |---|---|---|
|
|
6
|
+
* | `wsl-toast` | WSL with interop and `powershell.exe` | a Windows toast through interop |
|
|
7
|
+
* | `windows-toast` | Windows | the same toast |
|
|
8
|
+
* | `macos` | macOS | `osascript`, title and body as argv |
|
|
9
|
+
* | `freedesktop` | Linux with a session bus | `notify-send`, else `gdbus` |
|
|
10
|
+
* | `none` | nothing works | the reason is kept and shown by `schedule status` |
|
|
11
|
+
*
|
|
12
|
+
* Title and body are DATA: they reach the other program as argv items or
|
|
13
|
+
* environment variables, never as script text, and are stripped of control,
|
|
14
|
+
* format and bidirectional characters first. By default a notification says
|
|
15
|
+
* which job and what happened, nothing from the model; a job opts into its
|
|
16
|
+
* one-line summary with `notify.includeSummary`.
|
|
17
|
+
*/
|
|
18
|
+
export type DesktopBackendKind = 'wsl-toast' | 'windows-toast' | 'macos' | 'freedesktop' | 'none';
|
|
19
|
+
export interface DesktopBackend {
|
|
20
|
+
readonly kind: DesktopBackendKind;
|
|
21
|
+
/** Why `none`, or which program the backend runs. */
|
|
22
|
+
readonly detail: string;
|
|
23
|
+
readonly command?: string;
|
|
24
|
+
readonly args?: (title: string, body: string) => string[];
|
|
25
|
+
readonly env?: (base: NodeJS.ProcessEnv, title: string, body: string) => NodeJS.ProcessEnv;
|
|
26
|
+
readonly cwd?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface BackendProbe {
|
|
29
|
+
readonly platform?: NodeJS.Platform;
|
|
30
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
31
|
+
readonly exists?: (path: string) => boolean;
|
|
32
|
+
/** A program on PATH, by name. */
|
|
33
|
+
readonly which?: (name: string) => string | undefined;
|
|
34
|
+
/** `powershell.exe` under WSL, as recorded at install. */
|
|
35
|
+
readonly powershell?: string;
|
|
36
|
+
/** Where WSL mounts the Windows drives; absent reads `/etc/wsl.conf`. */
|
|
37
|
+
readonly mountRoot?: string;
|
|
38
|
+
/** The kernel release (`/proc/sys/kernel/osrelease`); WSL's names Microsoft. */
|
|
39
|
+
readonly osRelease?: () => string | undefined;
|
|
40
|
+
/** WSL's interop sockets (`/run/WSL/*_interop`), each with its modification time. */
|
|
41
|
+
readonly interopSockets?: () => readonly {
|
|
42
|
+
readonly path: string;
|
|
43
|
+
readonly mtimeMs: number;
|
|
44
|
+
}[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The interop socket a process without `WSL_INTEROP` can use — a systemd
|
|
48
|
+
* service's, which WSL starts outside any session. `1_interop` is the one
|
|
49
|
+
* WSL links for systemd to the distro's own init, so it lives as long as the
|
|
50
|
+
* distro; failing that, the newest session's.
|
|
51
|
+
*/
|
|
52
|
+
export declare function findInteropSocket(sockets: readonly {
|
|
53
|
+
readonly path: string;
|
|
54
|
+
readonly mtimeMs: number;
|
|
55
|
+
}[]): string | undefined;
|
|
56
|
+
/** Pick the backend this machine supports. */
|
|
57
|
+
export declare function selectDesktopBackend(probe?: BackendProbe): DesktopBackend;
|
|
58
|
+
export interface DesktopNotification {
|
|
59
|
+
readonly title: string;
|
|
60
|
+
readonly body: string;
|
|
61
|
+
}
|
|
62
|
+
export type DesktopNotifyResult = {
|
|
63
|
+
readonly kind: 'sent';
|
|
64
|
+
} | {
|
|
65
|
+
readonly kind: 'unavailable';
|
|
66
|
+
readonly detail: string;
|
|
67
|
+
} | {
|
|
68
|
+
readonly kind: 'failed';
|
|
69
|
+
readonly detail: string;
|
|
70
|
+
};
|
|
71
|
+
export type Spawn = (command: string, args: readonly string[], options: {
|
|
72
|
+
readonly env: NodeJS.ProcessEnv;
|
|
73
|
+
readonly cwd?: string;
|
|
74
|
+
readonly timeoutMs: number;
|
|
75
|
+
}) => Promise<{
|
|
76
|
+
readonly code: number | null;
|
|
77
|
+
readonly stderr: string;
|
|
78
|
+
}>;
|
|
79
|
+
/** Send one notification. Never throws. */
|
|
80
|
+
export declare function sendDesktopNotification(backend: DesktopBackend, notification: DesktopNotification, options?: {
|
|
81
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
82
|
+
readonly spawn?: Spawn;
|
|
83
|
+
}): Promise<DesktopNotifyResult>;
|
|
84
|
+
//# sourceMappingURL=desktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../../src/integrations/notifications/desktop.ts"],"names":[],"mappings":"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"}
|