@phnx-labs/agents-cli 1.22.39 → 1.22.41
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 +316 -0
- package/README.md +116 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +259 -0
- package/dist/commands/accounts.d.ts +20 -0
- package/dist/commands/accounts.js +186 -25
- package/dist/commands/apply.d.ts +3 -3
- package/dist/commands/apply.js +20 -63
- package/dist/commands/browser.d.ts +15 -0
- package/dist/commands/browser.js +318 -131
- package/dist/commands/budget.d.ts +7 -6
- package/dist/commands/budget.js +8 -7
- package/dist/commands/cloud.js +17 -20
- package/dist/commands/commands.js +1 -1
- package/dist/commands/computer-actions.d.ts +1 -35
- package/dist/commands/computer-actions.js +13 -181
- package/dist/commands/computer.d.ts +28 -3
- package/dist/commands/computer.js +93 -65
- package/dist/commands/config.js +16 -3
- package/dist/commands/cost.d.ts +2 -1
- package/dist/commands/cost.js +7 -6
- package/dist/commands/daemon.js +151 -4
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +19 -11
- package/dist/commands/events.js +1 -1
- package/dist/commands/exec.d.ts +2 -50
- package/dist/commands/exec.js +160 -215
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +12 -23
- package/dist/commands/fleet-capture.js +25 -27
- package/dist/commands/focus.d.ts +2 -3
- package/dist/commands/focus.js +34 -9
- package/dist/commands/go.js +15 -5
- package/dist/commands/harness.d.ts +3 -3
- package/dist/commands/harness.js +53 -5
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +2 -2
- package/dist/commands/insights.d.ts +5 -5
- package/dist/commands/insights.js +15 -9
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +4 -16
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +9 -9
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/memory.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/mine.d.ts +11 -8
- package/dist/commands/mine.js +11 -10
- package/dist/commands/models.js +1 -1
- package/dist/commands/modes.js +1 -1
- package/dist/commands/monitors.js +23 -6
- package/dist/commands/output.d.ts +7 -6
- package/dist/commands/output.js +11 -10
- package/dist/commands/packages.js +4 -4
- package/dist/commands/perf.js +1 -1
- package/dist/commands/permissions.js +49 -32
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.js +3 -3
- package/dist/commands/profiles.d.ts +6 -9
- package/dist/commands/profiles.js +8 -321
- package/dist/commands/projects.d.ts +9 -0
- package/dist/commands/projects.js +140 -8
- package/dist/commands/prune.js +5 -13
- package/dist/commands/refresh-rules.js +1 -1
- package/dist/commands/repo.d.ts +5 -7
- package/dist/commands/repo.js +34 -18
- package/dist/commands/resource-view.js +4 -0
- package/dist/commands/resume.d.ts +11 -7
- package/dist/commands/resume.js +82 -98
- package/dist/commands/route.d.ts +12 -0
- package/dist/commands/route.js +261 -0
- package/dist/commands/routines.d.ts +2 -3
- package/dist/commands/routines.js +120 -145
- package/dist/commands/rules.js +1 -1
- package/dist/commands/run-account-picker.d.ts +1 -1
- package/dist/commands/run-account-picker.js +2 -2
- package/dist/commands/run-broadcast.d.ts +21 -0
- package/dist/commands/run-broadcast.js +89 -0
- package/dist/commands/run-cloud.js +1 -1
- package/dist/commands/secrets-vault.d.ts +10 -0
- package/dist/commands/{login.js → secrets-vault.js} +34 -14
- package/dist/commands/secrets.d.ts +4 -4
- package/dist/commands/secrets.js +158 -159
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-browser.d.ts +1 -1
- package/dist/commands/sessions-browser.js +9 -5
- package/dist/commands/sessions-export.js +2 -2
- package/dist/commands/sessions-inject.js +4 -5
- package/dist/commands/sessions-migrate.js +16 -27
- package/dist/commands/sessions-picker.d.ts +14 -0
- package/dist/commands/sessions-picker.js +209 -13
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-share.d.ts +25 -0
- package/dist/commands/sessions-share.js +166 -0
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +144 -180
- package/dist/commands/setup-browser.js +1 -1
- package/dist/commands/setup-computer.js +1 -1
- package/dist/commands/setup-fleet.js +3 -0
- package/dist/commands/setup-mine.d.ts +7 -3
- package/dist/commands/setup-mine.js +13 -8
- package/dist/commands/setup-preferences.js +2 -2
- package/dist/commands/setup-secrets.js +2 -2
- package/dist/commands/setup-watchdog.js +2 -2
- package/dist/commands/setup.js +7 -2
- package/dist/commands/share.d.ts +65 -0
- package/dist/commands/share.js +253 -20
- package/dist/commands/skills.js +3 -3
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +9 -9
- package/dist/commands/ssh.d.ts +1 -1
- package/dist/commands/ssh.js +186 -64
- package/dist/commands/subagents.js +1 -1
- package/dist/commands/sync.js +24 -9
- package/dist/commands/teams.d.ts +2 -2
- package/dist/commands/teams.js +9 -18
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/trash.js +1 -1
- package/dist/commands/usage.d.ts +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +4 -14
- package/dist/commands/utils.js +6 -27
- package/dist/commands/versions.js +2 -2
- package/dist/commands/view.d.ts +9 -77
- package/dist/commands/view.js +23 -8
- package/dist/commands/watchdog.js +1 -1
- package/dist/commands/webhook.js +25 -34
- package/dist/commands/workflows.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/account-capabilities.d.ts +39 -0
- package/dist/lib/account-capabilities.js +59 -0
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +66 -0
- package/dist/lib/account-registry.js +151 -5
- package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
- package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
- package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
- package/dist/lib/{usage.js → accounting/usage.js} +11 -11
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +72 -4
- package/dist/lib/agents.js +231 -199
- package/dist/lib/answer-router.d.ts +2 -2
- package/dist/lib/ask-classifier.d.ts +1 -1
- package/dist/lib/ask-classifier.js +1 -1
- package/dist/lib/audit/log.js +1 -1
- package/dist/lib/auth-health.d.ts +1 -1
- package/dist/lib/auth-health.js +2 -2
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/caller-identity.d.ts +28 -0
- package/dist/lib/browser/caller-identity.js +156 -0
- package/dist/lib/browser/cdp.js +5 -1
- package/dist/lib/browser/chrome.js +12 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +3 -2
- package/dist/lib/browser/hygiene.d.ts +10 -2
- package/dist/lib/browser/hygiene.js +7 -4
- package/dist/lib/browser/ipc.d.ts +22 -2
- package/dist/lib/browser/ipc.js +185 -21
- package/dist/lib/browser/profiles.d.ts +69 -5
- package/dist/lib/browser/profiles.js +135 -13
- package/dist/lib/browser/remote-control.d.ts +2 -2
- package/dist/lib/browser/remote-control.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +79 -0
- package/dist/lib/browser/runtime-state.js +119 -1
- package/dist/lib/browser/service.d.ts +137 -2
- package/dist/lib/browser/service.js +492 -54
- package/dist/lib/browser/sessions-list.d.ts +2 -1
- package/dist/lib/browser/sessions-list.js +4 -13
- package/dist/lib/browser/types.d.ts +19 -1
- package/dist/lib/budget/config.js +1 -1
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/byok-usage.js +1 -1
- package/dist/lib/capabilities.js +3 -15
- package/dist/lib/catchup.d.ts +1 -1
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/host.d.ts +3 -3
- package/dist/lib/cloud/host.js +5 -5
- package/dist/lib/cloud/rush.d.ts +9 -21
- package/dist/lib/cloud/rush.js +33 -120
- package/dist/lib/cloud/types.d.ts +2 -2
- package/dist/lib/commands.js +3 -13
- package/dist/lib/computer/actions.d.ts +36 -0
- package/dist/lib/computer/actions.js +162 -0
- package/dist/lib/computer/dispatch.d.ts +2 -2
- package/dist/lib/computer/dispatch.js +2 -2
- package/dist/lib/computer/sessions-list.d.ts +3 -3
- package/dist/lib/computer/sessions-list.js +2 -2
- package/dist/lib/config-keys.d.ts +2 -1
- package/dist/lib/config-keys.js +8 -4
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +5 -2
- package/dist/lib/crabbox/lease.js +9 -1
- package/dist/lib/crabbox/runtimes.d.ts +32 -7
- package/dist/lib/crabbox/runtimes.js +72 -30
- package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
- package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
- package/dist/lib/daemon-services.d.ts +1 -1
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-ticks.d.ts +25 -0
- package/dist/lib/daemon-ticks.js +31 -1
- package/dist/lib/daemon-webhooks.d.ts +104 -0
- package/dist/lib/daemon-webhooks.js +215 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +280 -142
- package/dist/lib/devices/config-migration.d.ts +29 -34
- package/dist/lib/devices/config-migration.js +209 -130
- package/dist/lib/devices/connect.d.ts +2 -2
- package/dist/lib/devices/connect.js +2 -2
- package/dist/lib/devices/discovery-policy.d.ts +30 -0
- package/dist/lib/devices/discovery-policy.js +101 -0
- package/dist/lib/devices/fleet-inventory.js +8 -3
- package/dist/lib/devices/harness-inventory.d.ts +1 -1
- package/dist/lib/devices/harness-inventory.js +12 -3
- package/dist/lib/devices/known-hosts.js +1 -1
- package/dist/lib/devices/pool.d.ts +10 -5
- package/dist/lib/devices/pool.js +5 -7
- package/dist/lib/devices/registry.d.ts +1 -1
- package/dist/lib/devices/registry.js +1 -1
- package/dist/lib/devices/resolve-profile.d.ts +2 -2
- package/dist/lib/devices/resolve-profile.js +2 -2
- package/dist/lib/devices/resolve-target.d.ts +1 -1
- package/dist/lib/devices/resolve-target.js +4 -4
- package/dist/lib/devices/self-host.d.ts +1 -1
- package/dist/lib/devices/self-host.js +3 -3
- package/dist/lib/devices/ssh-config.d.ts +1 -1
- package/dist/lib/devices/stats-cache.js +1 -1
- package/dist/lib/devices/sync.d.ts +3 -1
- package/dist/lib/devices/sync.js +3 -3
- package/dist/lib/doctor-diff.js +4 -4
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.js +2 -2
- package/dist/lib/event-families.d.ts +1 -1
- package/dist/lib/event-stream.d.ts +1 -1
- package/dist/lib/event-stream.js +2 -2
- package/dist/lib/events-ingest.js +2 -2
- package/dist/lib/exec.d.ts +4 -4
- package/dist/lib/exec.js +11 -11
- package/dist/lib/factory/snapshot.d.ts +1 -1
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
- package/dist/lib/{activity.js → feed/activity.js} +7 -7
- package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
- package/dist/lib/{events.js → feed/events.js} +5 -5
- package/dist/lib/{feed.js → feed/feed.js} +4 -4
- package/dist/lib/feed-outcome.d.ts +1 -1
- package/dist/lib/feed-policy.d.ts +1 -1
- package/dist/lib/feed-policy.js +1 -1
- package/dist/lib/feed-post.d.ts +1 -1
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -6
- package/dist/lib/fleet/apply.js +18 -45
- package/dist/lib/fleet/auth-sync.d.ts +16 -35
- package/dist/lib/fleet/auth-sync.js +16 -75
- package/dist/lib/fleet/capture.js +8 -6
- package/dist/lib/fleet/manifest.js +23 -11
- package/dist/lib/fleet/types.d.ts +19 -7
- package/dist/lib/fleet-cache.d.ts +1 -1
- package/dist/lib/fleet-cache.js +1 -1
- package/dist/lib/format.d.ts +19 -0
- package/dist/lib/format.js +44 -1
- package/dist/lib/friction-heuristics.d.ts +1 -1
- package/dist/lib/git.d.ts +24 -1
- package/dist/lib/git.js +82 -38
- package/dist/lib/heal.js +3 -3
- package/dist/lib/hooks.d.ts +18 -0
- package/dist/lib/hooks.js +113 -1
- package/dist/lib/hosts/credentials.d.ts +30 -10
- package/dist/lib/hosts/credentials.js +38 -26
- package/dist/lib/hosts/dispatch.d.ts +3 -3
- package/dist/lib/hosts/dispatch.js +3 -3
- package/dist/lib/hosts/option.d.ts +3 -3
- package/dist/lib/hosts/option.js +7 -8
- package/dist/lib/hosts/passthrough.d.ts +17 -17
- package/dist/lib/hosts/passthrough.js +67 -50
- package/dist/lib/hosts/providers/devices.d.ts +1 -1
- package/dist/lib/hosts/providers/devices.js +1 -1
- package/dist/lib/hosts/reconcile.d.ts +1 -1
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +1 -1
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +5 -5
- package/dist/lib/hosts/registry.js +5 -5
- package/dist/lib/hosts/remote-cmd.d.ts +10 -10
- package/dist/lib/hosts/remote-cmd.js +25 -18
- package/dist/lib/hosts/remote-os.d.ts +4 -4
- package/dist/lib/hosts/remote-os.js +4 -4
- package/dist/lib/hosts/remote-session-id.d.ts +2 -2
- package/dist/lib/hosts/remote-session-id.js +2 -2
- package/dist/lib/hosts/routing-flag.d.ts +3 -3
- package/dist/lib/hosts/routing-flag.js +4 -5
- package/dist/lib/hosts/run-target.d.ts +4 -4
- package/dist/lib/hosts/run-target.js +4 -4
- package/dist/lib/hosts/session-index.d.ts +2 -2
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/session-marker.d.ts +1 -1
- package/dist/lib/hosts/session-marker.js +1 -1
- package/dist/lib/hosts/types.d.ts +2 -2
- package/dist/lib/hosts/types.js +2 -2
- package/dist/lib/import.js +1 -1
- package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
- package/dist/lib/installations/resolve.js +1 -1
- package/dist/lib/installations/strategies.js +1 -1
- package/dist/lib/installations/update.js +2 -2
- package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
- package/dist/lib/{versions.js → installations/versions.js} +51 -31
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/linear-projects.d.ts +28 -0
- package/dist/lib/linear-projects.js +30 -0
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-gc.js +1 -1
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/mcp-registry.d.ts +62 -0
- package/dist/lib/mcp-registry.js +177 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.js +124 -307
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/menubar/install-menubar.d.ts +7 -0
- package/dist/lib/menubar/install-menubar.js +24 -6
- package/dist/lib/menubar/snapshot.d.ts +7 -0
- package/dist/lib/menubar/snapshot.js +8 -6
- package/dist/lib/models.js +1 -1
- package/dist/lib/monitors/config.d.ts +12 -0
- package/dist/lib/monitors/config.js +3 -0
- package/dist/lib/monitors/dispatch.js +26 -5
- package/dist/lib/monitors/engine.js +10 -0
- package/dist/lib/monitors/sources/webhook.d.ts +1 -1
- package/dist/lib/monitors/state.d.ts +42 -0
- package/dist/lib/monitors/state.js +30 -0
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/observe-aliases.d.ts +3 -3
- package/dist/lib/observe-aliases.js +3 -21
- package/dist/lib/output/git-output.js +2 -2
- package/dist/lib/overdue.d.ts +1 -1
- package/dist/lib/overdue.js +1 -1
- package/dist/lib/permissions-registry.d.ts +65 -0
- package/dist/lib/permissions-registry.js +599 -0
- package/dist/lib/permissions.d.ts +24 -13
- package/dist/lib/permissions.js +52 -271
- package/dist/lib/picker.d.ts +16 -0
- package/dist/lib/picker.js +33 -3
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +4 -4
- package/dist/lib/platform/paths.d.ts +8 -0
- package/dist/lib/platform/paths.js +11 -0
- package/dist/lib/platform/posixpath.js +3 -3
- package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
- package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
- package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
- package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
- package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
- package/dist/lib/{skills.js → plugins/skills.js} +7 -7
- package/dist/lib/pricing/cost.d.ts +1 -1
- package/dist/lib/pricing/cost.js +1 -1
- package/dist/lib/profiles-presets.d.ts +1 -1
- package/dist/lib/profiles-presets.js +1 -1
- package/dist/lib/profiles.js +2 -2
- package/dist/lib/project-import.js +4 -1
- package/dist/lib/project-key.js +7 -0
- package/dist/lib/project-launch.d.ts +1 -1
- package/dist/lib/project-launch.js +3 -3
- package/dist/lib/project-pull.d.ts +128 -0
- package/dist/lib/project-pull.js +384 -0
- package/dist/lib/project-root.d.ts +2 -2
- package/dist/lib/project-root.js +2 -2
- package/dist/lib/project-status.js +1 -1
- package/dist/lib/projects.d.ts +23 -0
- package/dist/lib/projects.js +29 -6
- package/dist/lib/refresh.d.ts +12 -1
- package/dist/lib/refresh.js +16 -9
- package/dist/lib/registry.d.ts +9 -2
- package/dist/lib/registry.js +11 -4
- package/dist/lib/resources.d.ts +2 -2
- package/dist/lib/resources.js +2 -2
- package/dist/lib/routers.d.ts +81 -0
- package/dist/lib/routers.js +153 -0
- package/dist/lib/routine-context.d.ts +1 -0
- package/dist/lib/routine-context.js +7 -2
- package/dist/lib/routine-notify-owner.d.ts +1 -1
- package/dist/lib/routine-notify.d.ts +1 -1
- package/dist/lib/routine-notify.js +1 -1
- package/dist/lib/routine-process-cleanup.d.ts +1 -1
- package/dist/lib/routine-readiness.d.ts +1 -1
- package/dist/lib/routine-readiness.js +11 -4
- package/dist/lib/routines-placement.d.ts +12 -2
- package/dist/lib/routines-placement.js +20 -3
- package/dist/lib/routines-project.d.ts +1 -1
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +1 -0
- package/dist/lib/rules/compile.js +10 -2
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/run-notify.js +1 -1
- package/dist/lib/runner.d.ts +80 -2
- package/dist/lib/runner.js +261 -67
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
- package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.js +2 -2
- package/dist/lib/secrets/audit.js +1 -1
- package/dist/lib/secrets/bundles.d.ts +4 -4
- package/dist/lib/secrets/bundles.js +8 -8
- package/dist/lib/secrets/headless.d.ts +16 -0
- package/dist/lib/secrets/headless.js +21 -0
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.d.ts +1 -1
- package/dist/lib/secrets/list-filter.js +2 -2
- package/dist/lib/secrets/push.d.ts +1 -1
- package/dist/lib/secrets/push.js +10 -12
- package/dist/lib/secrets/remote.d.ts +21 -17
- package/dist/lib/secrets/remote.js +39 -23
- package/dist/lib/secrets/vault.js +2 -2
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/self-update.d.ts +39 -4
- package/dist/lib/self-update.js +78 -25
- package/dist/lib/serve/control.d.ts +1 -1
- package/dist/lib/serve/control.js +4 -4
- package/dist/lib/serve/data.d.ts +1 -1
- package/dist/lib/serve/data.js +1 -1
- package/dist/lib/serve/stream.js +1 -1
- package/dist/lib/service-manifest.d.ts +29 -0
- package/dist/lib/service-manifest.js +80 -0
- package/dist/lib/session/active.d.ts +59 -7
- package/dist/lib/session/active.js +158 -17
- package/dist/lib/session/bash-command.js +1 -1
- package/dist/lib/session/claude-accounts.d.ts +1 -1
- package/dist/lib/session/claude-accounts.js +1 -1
- package/dist/lib/session/db.d.ts +10 -2
- package/dist/lib/session/db.js +25 -6
- package/dist/lib/session/discover.d.ts +77 -0
- package/dist/lib/session/discover.js +130 -25
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/insights.d.ts +1 -1
- package/dist/lib/session/insights.js +1 -1
- package/dist/lib/session/live-metadata.d.ts +15 -0
- package/dist/lib/session/live-metadata.js +76 -0
- package/dist/lib/session/migrate-targets.d.ts +1 -1
- package/dist/lib/session/recovery.d.ts +1 -1
- package/dist/lib/session/recovery.js +2 -2
- package/dist/lib/session/remote-active.d.ts +10 -1
- package/dist/lib/session/remote-active.js +8 -3
- package/dist/lib/session/remote-bundle.d.ts +1 -1
- package/dist/lib/session/remote-bundle.js +2 -2
- package/dist/lib/session/remote-list.d.ts +15 -4
- package/dist/lib/session/remote-list.js +40 -3
- package/dist/lib/session/remote.d.ts +5 -5
- package/dist/lib/session/remote.js +13 -17
- package/dist/lib/session/resume-command.d.ts +3 -2
- package/dist/lib/session/resume-command.js +4 -3
- package/dist/lib/session/resume-owner.d.ts +3 -3
- package/dist/lib/session/resume-owner.js +3 -3
- package/dist/lib/session/session-cache.d.ts +12 -0
- package/dist/lib/session/session-cache.js +2 -0
- package/dist/lib/session/share-html.d.ts +55 -0
- package/dist/lib/session/share-html.js +319 -0
- package/dist/lib/session/shell-programs.js +1 -1
- package/dist/lib/session/state.js +5 -5
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/team-filter.js +1 -1
- package/dist/lib/session/types.d.ts +3 -3
- package/dist/lib/session/width.d.ts +2 -2
- package/dist/lib/session/width.js +2 -2
- package/dist/lib/settings-manifest.d.ts +2 -0
- package/dist/lib/settings-manifest.js +81 -3
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +120 -0
- package/dist/lib/share/publish.js +243 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +4 -4
- package/dist/lib/smart-launch.js +6 -4
- package/dist/lib/snapshot.d.ts +4 -4
- package/dist/lib/snapshot.js +2 -2
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +2 -2
- package/dist/lib/ssh-tunnel.d.ts +10 -10
- package/dist/lib/ssh-tunnel.js +12 -12
- package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
- package/dist/lib/staleness/checkers/hooks.js +1 -1
- package/dist/lib/staleness/detectors/permissions.js +0 -23
- package/dist/lib/staleness/detectors/plugins.js +1 -1
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/layers.d.ts +1 -1
- package/dist/lib/staleness/layers.js +1 -1
- package/dist/lib/staleness/writers/mcp.js +3 -1
- package/dist/lib/staleness/writers/plugins.js +1 -1
- package/dist/lib/staleness/writers/types.d.ts +8 -0
- package/dist/lib/startup/command-registry.d.ts +6 -147
- package/dist/lib/startup/command-registry.js +40 -303
- package/dist/lib/startup/dev-build.d.ts +0 -21
- package/dist/lib/startup/dev-build.js +29 -8
- package/dist/lib/state.d.ts +19 -1
- package/dist/lib/state.js +120 -51
- package/dist/lib/subagents.js +1 -1
- package/dist/lib/sync-status.js +1 -1
- package/dist/lib/sync-umbrella.d.ts +6 -1
- package/dist/lib/sync-umbrella.js +9 -4
- package/dist/lib/teams/agents.js +2 -2
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
- package/dist/lib/terminal/engine.js +1 -1
- package/dist/lib/terminal/index.d.ts +4 -0
- package/dist/lib/terminal/index.js +3 -0
- package/dist/lib/terminal/inject.d.ts +2 -2
- package/dist/lib/terminal/inject.js +2 -2
- package/dist/lib/terminal/transport.js +1 -1
- package/dist/lib/tmux/index.d.ts +1 -1
- package/dist/lib/tmux/index.js +1 -1
- package/dist/lib/tmux/session.d.ts +21 -5
- package/dist/lib/tmux/session.js +76 -22
- package/dist/lib/triggers/handlers.d.ts +38 -3
- package/dist/lib/triggers/handlers.js +58 -7
- package/dist/lib/triggers/webhook.d.ts +113 -5
- package/dist/lib/triggers/webhook.js +223 -44
- package/dist/lib/types.d.ts +19 -7
- package/dist/lib/usage-fleet.d.ts +1 -1
- package/dist/lib/usage-fleet.js +1 -1
- package/dist/lib/usage-refresh.d.ts +1 -1
- package/dist/lib/usage-refresh.js +3 -3
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/view-types.d.ts +56 -0
- package/dist/lib/view-types.js +1 -0
- package/dist/lib/watchdog/rotate.d.ts +2 -2
- package/dist/lib/watchdog/rotate.js +3 -3
- package/dist/lib/watchdog/runner.d.ts +2 -3
- package/dist/lib/watchdog/runner.js +3 -4
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/wrap.d.ts +33 -0
- package/dist/lib/wrap.js +70 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +2 -2
- package/dist/commands/bench.d.ts +0 -2
- package/dist/commands/bench.js +0 -101
- package/dist/commands/cp.d.ts +0 -84
- package/dist/commands/cp.js +0 -231
- package/dist/commands/login.d.ts +0 -2
- package/dist/lib/resources/commands.d.ts +0 -46
- package/dist/lib/resources/commands.js +0 -211
- package/dist/lib/resources/hooks.d.ts +0 -16
- package/dist/lib/resources/hooks.js +0 -153
- package/dist/lib/resources/mcp.d.ts +0 -34
- package/dist/lib/resources/mcp.js +0 -250
- package/dist/lib/resources/memory.d.ts +0 -15
- package/dist/lib/resources/memory.js +0 -46
- package/dist/lib/resources/permissions.d.ts +0 -13
- package/dist/lib/resources/permissions.js +0 -202
- package/dist/lib/resources/rules.d.ts +0 -46
- package/dist/lib/resources/rules.js +0 -179
- package/dist/lib/resources/skills.d.ts +0 -37
- package/dist/lib/resources/skills.js +0 -247
- package/dist/lib/resources/subagents.d.ts +0 -46
- package/dist/lib/resources/subagents.js +0 -202
- /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { buildRoutineListJson } from '
|
|
4
|
-
import { backfillActiveRowsFromIndex, isRunningLiveSession, serializeActiveSessionsForJson, serializeSessionsJson } from '
|
|
3
|
+
import { buildRoutineListJson } from '../scheduling/routines.js';
|
|
4
|
+
import { backfillActiveRowsFromIndex, isRunningLiveSession, serializeActiveSessionsForJson, serializeSessionsJson } from '../session/active.js';
|
|
5
5
|
import { getConfigValue, loadAutoLaunchPreferences } from '../device-config.js';
|
|
6
6
|
import { loadDevices } from '../devices/registry.js';
|
|
7
7
|
import { machineId } from '../machine-id.js';
|
|
8
8
|
import { querySessions } from '../session/db.js';
|
|
9
9
|
import { readActiveSessionsCache } from '../session/session-cache.js';
|
|
10
10
|
import { getRuntimeStateDir } from '../state.js';
|
|
11
|
+
import { getCliVersion } from '../version.js';
|
|
11
12
|
/**
|
|
12
13
|
* The full registered-device roster for the menu bar, from the local registry
|
|
13
14
|
* file only (no ssh, no stats probe) — as cheap as `buildRoutineListJson()`, so
|
|
14
15
|
* it rides the same 3-minute snapshot poll instead of a second timer.
|
|
15
16
|
*/
|
|
16
17
|
async function buildMenubarDevices() {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const reg = await loadDevices();
|
|
19
|
+
// Pass the roster so a fleet-wide default (fleet.defaults.config) reaches
|
|
20
|
+
// devices that have no doc of their own.
|
|
21
|
+
const prefs = loadAutoLaunchPreferences(Object.keys(reg));
|
|
21
22
|
const interactiveHost = getConfigValue('interactive.host').value;
|
|
22
23
|
const self = machineId();
|
|
23
24
|
return Object.keys(reg)
|
|
@@ -63,6 +64,7 @@ export async function computeMenubarSnapshot() {
|
|
|
63
64
|
return {
|
|
64
65
|
version: 1,
|
|
65
66
|
capturedAt: new Date().toISOString(),
|
|
67
|
+
cliVersion: getCliVersion(),
|
|
66
68
|
routines,
|
|
67
69
|
recentSessions: JSON.parse(serializeSessionsJson(recent)),
|
|
68
70
|
activeSessions: serializeActiveSessionsForJson(activeSessions),
|
package/dist/lib/models.js
CHANGED
|
@@ -11,7 +11,7 @@ import * as fs from 'fs';
|
|
|
11
11
|
import * as path from 'path';
|
|
12
12
|
import { execFileSync } from 'child_process';
|
|
13
13
|
import chalk from 'chalk';
|
|
14
|
-
import { getVersionDir, getVersionHomePath, getBinaryPath } from './versions.js';
|
|
14
|
+
import { getVersionDir, getVersionHomePath, getBinaryPath } from './installations/versions.js';
|
|
15
15
|
import { getModelsCachePath } from './state.js';
|
|
16
16
|
import { agentConfigDirName } from './agents.js';
|
|
17
17
|
import { resolveRunDefaults } from './run-defaults.js';
|
|
@@ -105,6 +105,18 @@ export interface MonitorConfig {
|
|
|
105
105
|
devices?: string[];
|
|
106
106
|
/** Execute the ACTION on this machine over SSH (placement), distinct from the owner that fires it. */
|
|
107
107
|
runOn?: string;
|
|
108
|
+
/**
|
|
109
|
+
* Working directory for a `run` action, in the routines-portable form
|
|
110
|
+
* (`~/…`, or relative to the execution target's home). Optional: a monitor
|
|
111
|
+
* watches a source rather than owning a project, so `dispatchAction` defaults
|
|
112
|
+
* it to the target's home (`~`) when unset.
|
|
113
|
+
*
|
|
114
|
+
* Without this, every `run` action was blocked at readiness with
|
|
115
|
+
* `execution_context_missing` — `resolveJobExecutionContext` refuses an
|
|
116
|
+
* agent job carrying neither `project` nor `cwd` (`lib/routine-context.ts`),
|
|
117
|
+
* and a monitor had no field with which to supply one (RUSH-2681).
|
|
118
|
+
*/
|
|
119
|
+
cwd?: string;
|
|
108
120
|
/** Firehose guard: auto-pause the monitor if it fires more than `max` times per `per`. */
|
|
109
121
|
rateLimit?: {
|
|
110
122
|
max: number;
|
|
@@ -261,6 +261,9 @@ export function validateMonitor(config) {
|
|
|
261
261
|
if (config.runOn !== undefined && (typeof config.runOn !== 'string' || config.runOn.trim() === '')) {
|
|
262
262
|
errors.push('runOn must be a non-empty machine name (a registered host, device, capability tag, or user@host)');
|
|
263
263
|
}
|
|
264
|
+
if (config.cwd !== undefined && (typeof config.cwd !== 'string' || config.cwd.trim() === '')) {
|
|
265
|
+
errors.push('cwd must be a non-empty path (home-relative or ~/…)');
|
|
266
|
+
}
|
|
264
267
|
// ─── HYGIENE ─────────────────────────────────────────────────────────────────
|
|
265
268
|
if (config.rateLimit !== undefined) {
|
|
266
269
|
const rl = config.rateLimit;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* `webhook-out` POSTs the event.
|
|
12
12
|
*/
|
|
13
13
|
import { executeJobDetached } from '../runner.js';
|
|
14
|
-
import { readJob } from '../routines.js';
|
|
14
|
+
import { readJob } from '../scheduling/routines.js';
|
|
15
15
|
import { sendToOwner } from '../notify.js';
|
|
16
16
|
/** Replace `{event}` in a prompt with the fired event summary. */
|
|
17
17
|
export function injectEvent(prompt, event) {
|
|
@@ -29,19 +29,37 @@ export async function dispatchAction(monitor, event, meta) {
|
|
|
29
29
|
if (action.type === 'run') {
|
|
30
30
|
const job = {
|
|
31
31
|
name: monitor.name,
|
|
32
|
+
// This job is not a routine — no definition, no yaml, never listed by
|
|
33
|
+
// `agents routines` — so it can never be a member of this device's routine
|
|
34
|
+
// activation manifest and MUST NOT be gated on it. Before this marker the
|
|
35
|
+
// gate refused every monitor `run` action with `wrong_owner` and an empty
|
|
36
|
+
// allowlist ("Job '<name>' can only run on: "), so no monitor action ever
|
|
37
|
+
// executed (RUSH-2681). The monitor's own `device:` pin already resolved
|
|
38
|
+
// exactly-once ownership before this dispatch.
|
|
39
|
+
dispatchedBy: 'monitor',
|
|
32
40
|
agent: action.agent,
|
|
33
41
|
mode: action.mode ?? 'auto',
|
|
34
42
|
effort: action.effort ?? 'auto',
|
|
35
43
|
timeout: action.timeout ?? '10m',
|
|
36
44
|
enabled: true,
|
|
37
45
|
prompt: injectEvent(action.prompt ?? '', event),
|
|
46
|
+
// A monitor watches a source; it owns no project, and until `cwd` existed
|
|
47
|
+
// it had no field able to supply one — so `resolveJobExecutionContext`
|
|
48
|
+
// blocked every `run` action with `execution_context_missing`
|
|
49
|
+
// (lib/routine-context.ts) once the eligibility gate above stopped
|
|
50
|
+
// swallowing them first. `~` is the execution TARGET's home, so it stays
|
|
51
|
+
// portable across a `runOn:` SSH hop.
|
|
52
|
+
cwd: monitor.cwd ?? '~',
|
|
38
53
|
...(monitor.variables ? { variables: monitor.variables } : {}),
|
|
39
54
|
...(monitor.version ? { version: monitor.version } : {}),
|
|
40
55
|
...(monitor.runOn ? { host: monitor.runOn } : {}),
|
|
41
56
|
};
|
|
42
57
|
try {
|
|
43
|
-
const
|
|
44
|
-
|
|
58
|
+
const runMeta = await executeJobDetached(job);
|
|
59
|
+
if (runMeta.status === 'skipped' || runMeta.status === 'blocked' || runMeta.status === 'failed') {
|
|
60
|
+
return { kind: 'run', ok: false, runId: runMeta.runId, error: runMeta.errorMessage ?? runMeta.status };
|
|
61
|
+
}
|
|
62
|
+
return { kind: 'run', ok: true, runId: runMeta.runId };
|
|
45
63
|
}
|
|
46
64
|
catch (err) {
|
|
47
65
|
return { kind: 'run', ok: false, error: err.message };
|
|
@@ -55,8 +73,11 @@ export async function dispatchAction(monitor, event, meta) {
|
|
|
55
73
|
// Inject the event into the routine's prompt so the fired routine sees it.
|
|
56
74
|
const fired = { ...routine, prompt: injectEvent(routine.prompt ?? '', event) };
|
|
57
75
|
try {
|
|
58
|
-
const
|
|
59
|
-
|
|
76
|
+
const runMeta = await executeJobDetached(fired);
|
|
77
|
+
if (runMeta.status === 'skipped' || runMeta.status === 'blocked' || runMeta.status === 'failed') {
|
|
78
|
+
return { kind: 'routine', ok: false, runId: runMeta.runId, error: runMeta.errorMessage ?? runMeta.status };
|
|
79
|
+
}
|
|
80
|
+
return { kind: 'routine', ok: true, runId: runMeta.runId };
|
|
60
81
|
}
|
|
61
82
|
catch (err) {
|
|
62
83
|
return { kind: 'routine', ok: false, error: err.message };
|
|
@@ -16,6 +16,7 @@ import { evaluateSource } from './sources/index.js';
|
|
|
16
16
|
import { hasChanged, readState, writeState, recordFireTime, writeFireRecord, recordCheck, markDroughtNotified, } from './state.js';
|
|
17
17
|
import { dispatchAction } from './dispatch.js';
|
|
18
18
|
import { sendToOwner } from '../notify.js';
|
|
19
|
+
import { readRunMeta } from '../scheduling/routines.js';
|
|
19
20
|
/** How often the engine wakes to check which monitors are due. */
|
|
20
21
|
const TICK_MS = 5_000;
|
|
21
22
|
/** Default evaluation cadence for sources that carry no explicit interval. */
|
|
@@ -273,11 +274,20 @@ export class MonitorEngine {
|
|
|
273
274
|
catch (err) {
|
|
274
275
|
result = { kind: monitor.action.type, ok: false, error: err.message };
|
|
275
276
|
}
|
|
277
|
+
// Best-effort snapshot of the run's status AT THIS INSTANT — the same
|
|
278
|
+
// synchronous view `dispatchAction` just returned from. For the async-race
|
|
279
|
+
// case (RUSH-2690) this reads 'running': the dispatched process is still
|
|
280
|
+
// in flight, `ok` was frozen on that transient state, and the real outcome
|
|
281
|
+
// is not known yet. Recorded so a future reconciliation pass can find
|
|
282
|
+
// exactly the fires whose `ok` needs revisiting; `resolveFireOutcome`
|
|
283
|
+
// (state.ts) never trusts this field — it re-reads the run fresh instead.
|
|
284
|
+
const runStatusAtFire = result.runId ? readRunMeta(monitor.name, result.runId)?.status : undefined;
|
|
276
285
|
writeFireRecord(event, {
|
|
277
286
|
...(result.runId ? { runId: result.runId } : {}),
|
|
278
287
|
action: result.kind,
|
|
279
288
|
ok: result.ok,
|
|
280
289
|
...(result.error ? { error: result.error } : {}),
|
|
290
|
+
...(runStatusAtFire ? { runStatusAtFire } : {}),
|
|
281
291
|
});
|
|
282
292
|
writeState(monitor.name, decision.value, decision.dedupeKey, { lastFiredAt: event.firedAt, fireTimes });
|
|
283
293
|
this.logFn(result.ok ? 'INFO' : 'ERROR', `monitor '${monitor.name}' fired → ${result.kind}` +
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* synthesized JobConfig-shaped trigger.
|
|
9
9
|
*/
|
|
10
10
|
import { type IncomingWebhook } from '../../triggers/webhook.js';
|
|
11
|
-
import type { JobTrigger } from '../../routines.js';
|
|
11
|
+
import type { JobTrigger } from '../../scheduling/routines.js';
|
|
12
12
|
import type { MonitorSource, MonitorConfig } from '../config.js';
|
|
13
13
|
import type { Observation } from './types.js';
|
|
14
14
|
/** Push-only: nothing to snapshot on a poll tick. */
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* ~/.agents/.history/monitors/<name>/state.json # last-seen hash/value + fire bookkeeping
|
|
11
11
|
* ~/.agents/.history/monitors/<name>/fires/<id>/… # fire history
|
|
12
12
|
*/
|
|
13
|
+
import { type RunMeta } from '../scheduling/routines.js';
|
|
13
14
|
import type { MonitorEvent } from './config.js';
|
|
14
15
|
/** Persisted last-seen state for one monitor. */
|
|
15
16
|
export interface MonitorState {
|
|
@@ -103,6 +104,47 @@ export interface FireRecord extends MonitorEvent {
|
|
|
103
104
|
action?: string;
|
|
104
105
|
ok?: boolean;
|
|
105
106
|
error?: string;
|
|
107
|
+
/**
|
|
108
|
+
* The dispatched run's status AT FIRE TIME, best-effort (RUSH-2690).
|
|
109
|
+
* `dispatchAction` (lib/monitors/dispatch.ts) only sees a synchronous
|
|
110
|
+
* snapshot: `executeJobDetached` writes `status: 'running'` before spawning
|
|
111
|
+
* and returns immediately — the real outcome (`completed`/`failed`/`timeout`)
|
|
112
|
+
* lands later, asynchronously, in `executeJobDetachedClaimed`'s own
|
|
113
|
+
* `settle()` on child exit/error (lib/runner.ts). So a fire recorded
|
|
114
|
+
* `runStatusAtFire: 'running'` had its `ok` frozen before the run actually
|
|
115
|
+
* finished — that is the signal a future reconciliation pass (a daemon tick
|
|
116
|
+
* that revisits `running`-at-fire records and patches `ok` for real) would
|
|
117
|
+
* scan for. Never used to gate `ok` itself; `resolveFireOutcome` re-reads the
|
|
118
|
+
* run fresh on every call instead of trusting this snapshot.
|
|
119
|
+
*/
|
|
120
|
+
runStatusAtFire?: RunMeta['status'];
|
|
106
121
|
}
|
|
107
122
|
/** List a monitor's fire history, chronologically ascending. */
|
|
108
123
|
export declare function listFires(name: string): FireRecord[];
|
|
124
|
+
/** The reconciled outcome of one fire, resolved against the run's live status. */
|
|
125
|
+
export interface ReconciledFireOutcome {
|
|
126
|
+
/** True fire outcome, correcting the frozen `ok` against the run's CURRENT status. */
|
|
127
|
+
ok: boolean;
|
|
128
|
+
/** The run's live terminal status, when a runId is present and resolvable. */
|
|
129
|
+
runStatus?: RunMeta['status'];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Reconcile a fire's frozen `ok` against its dispatched run's REAL, current
|
|
133
|
+
* status — the render-time fix for RUSH-2690.
|
|
134
|
+
*
|
|
135
|
+
* `writeFireRecord` (this module) persists `ok` once, at fire time, from
|
|
136
|
+
* `dispatchAction`'s synchronous return. For a `run`/`routine` action that
|
|
137
|
+
* return is a snapshot: `executeJobDetached` writes `status: 'running'` before
|
|
138
|
+
* spawning and hands that back immediately, so `dispatchAction`'s negative
|
|
139
|
+
* check (`skipped`/`blocked`/`failed`) never sees the async outcome that lands
|
|
140
|
+
* later via `settle()` — a run that goes on to fail, time out, or otherwise
|
|
141
|
+
* never produce output still reads `ok: true` in `agents monitors runs`
|
|
142
|
+
* forever, while `agents monitors logs` (which reads the run record fresh)
|
|
143
|
+
* shows the real status. Re-reading the run here, at DISPLAY time, closes that
|
|
144
|
+
* gap without touching the write path or the frozen historical record on disk.
|
|
145
|
+
*
|
|
146
|
+
* A fire with no `runId` (a `notify`/`webhook-out` action, or a `run`/`routine`
|
|
147
|
+
* dispatch that never got a runId at all) has nothing to reconcile against —
|
|
148
|
+
* its frozen `ok` is the only signal and is returned as-is.
|
|
149
|
+
*/
|
|
150
|
+
export declare function resolveFireOutcome(jobName: string, fire: FireRecord): ReconciledFireOutcome;
|
|
@@ -15,6 +15,7 @@ import * as path from 'path';
|
|
|
15
15
|
import { createHash } from 'crypto';
|
|
16
16
|
import { getMonitorsHistoryDir, ensureAgentsDir } from '../state.js';
|
|
17
17
|
import { safeJoin } from '../paths.js';
|
|
18
|
+
import { readRunMeta } from '../scheduling/routines.js';
|
|
18
19
|
const MAX_STORED_VALUE = 4096;
|
|
19
20
|
/** Per-monitor history root, with the (untrusted) name contained to one segment. */
|
|
20
21
|
export function getMonitorHistoryDir(name) {
|
|
@@ -198,3 +199,32 @@ export function listFires(name) {
|
|
|
198
199
|
}
|
|
199
200
|
return fires;
|
|
200
201
|
}
|
|
202
|
+
/** Run statuses that read as a healthy fire: still in flight, or settled clean. */
|
|
203
|
+
const OK_RUN_STATUSES = new Set(['running', 'completed']);
|
|
204
|
+
/**
|
|
205
|
+
* Reconcile a fire's frozen `ok` against its dispatched run's REAL, current
|
|
206
|
+
* status — the render-time fix for RUSH-2690.
|
|
207
|
+
*
|
|
208
|
+
* `writeFireRecord` (this module) persists `ok` once, at fire time, from
|
|
209
|
+
* `dispatchAction`'s synchronous return. For a `run`/`routine` action that
|
|
210
|
+
* return is a snapshot: `executeJobDetached` writes `status: 'running'` before
|
|
211
|
+
* spawning and hands that back immediately, so `dispatchAction`'s negative
|
|
212
|
+
* check (`skipped`/`blocked`/`failed`) never sees the async outcome that lands
|
|
213
|
+
* later via `settle()` — a run that goes on to fail, time out, or otherwise
|
|
214
|
+
* never produce output still reads `ok: true` in `agents monitors runs`
|
|
215
|
+
* forever, while `agents monitors logs` (which reads the run record fresh)
|
|
216
|
+
* shows the real status. Re-reading the run here, at DISPLAY time, closes that
|
|
217
|
+
* gap without touching the write path or the frozen historical record on disk.
|
|
218
|
+
*
|
|
219
|
+
* A fire with no `runId` (a `notify`/`webhook-out` action, or a `run`/`routine`
|
|
220
|
+
* dispatch that never got a runId at all) has nothing to reconcile against —
|
|
221
|
+
* its frozen `ok` is the only signal and is returned as-is.
|
|
222
|
+
*/
|
|
223
|
+
export function resolveFireOutcome(jobName, fire) {
|
|
224
|
+
if (!fire.runId)
|
|
225
|
+
return { ok: fire.ok !== false };
|
|
226
|
+
const run = readRunMeta(jobName, fire.runId);
|
|
227
|
+
if (!run)
|
|
228
|
+
return { ok: fire.ok !== false };
|
|
229
|
+
return { ok: OK_RUN_STATUSES.has(run.status), runStatus: run.status };
|
|
230
|
+
}
|
package/dist/lib/notify.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* monitor daemon and the feed-dispatch loop call in here, and `process.exit()`
|
|
14
14
|
* would take them down on a typo'd channel name, bypassing their try/catch.
|
|
15
15
|
*/
|
|
16
|
-
import type { OpenBlock } from './feed.js';
|
|
16
|
+
import type { OpenBlock } from './feed/feed.js';
|
|
17
17
|
import type { Meta } from './types.js';
|
|
18
18
|
import type { SendResult } from './channels/registry.js';
|
|
19
19
|
export interface OwnerNotifyOptions {
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
* remain the stores; these are doors that point at the right reader.
|
|
6
6
|
*
|
|
7
7
|
* inbox → feed (needs-you default)
|
|
8
|
-
* timeline → feed --filter updates (agent progress stream)
|
|
9
|
-
* roster → sessions --active (live agent roster)
|
|
10
8
|
*
|
|
9
|
+
* `roster` was removed — use `agents sessions --active`.
|
|
10
|
+
* `timeline` was removed — use `agents feed --filter updates` (RUSH-2692).
|
|
11
11
|
* `audit` is NOT an alias here — `agents audit` is already the tamper-evident
|
|
12
12
|
* run-dispatch log. Ops trail = `agents events` (optionally `--audit`).
|
|
13
13
|
*/
|
|
14
|
-
export type ObserveAlias = 'inbox'
|
|
14
|
+
export type ObserveAlias = 'inbox';
|
|
15
15
|
export declare const OBSERVE_ALIASES: readonly ObserveAlias[];
|
|
16
16
|
export interface ObserveExpandResult {
|
|
17
17
|
/** argv for the real command (no program name): e.g. ['feed', '--filter', 'updates'] */
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
* remain the stores; these are doors that point at the right reader.
|
|
6
6
|
*
|
|
7
7
|
* inbox → feed (needs-you default)
|
|
8
|
-
* timeline → feed --filter updates (agent progress stream)
|
|
9
|
-
* roster → sessions --active (live agent roster)
|
|
10
8
|
*
|
|
9
|
+
* `roster` was removed — use `agents sessions --active`.
|
|
10
|
+
* `timeline` was removed — use `agents feed --filter updates` (RUSH-2692).
|
|
11
11
|
* `audit` is NOT an alias here — `agents audit` is already the tamper-evident
|
|
12
12
|
* run-dispatch log. Ops trail = `agents events` (optionally `--audit`).
|
|
13
13
|
*/
|
|
14
|
-
export const OBSERVE_ALIASES = ['inbox'
|
|
14
|
+
export const OBSERVE_ALIASES = ['inbox'];
|
|
15
15
|
/** True when `rest` already carries a `--filter` / `--filter=…` flag. */
|
|
16
16
|
export function hasFilterFlag(rest) {
|
|
17
17
|
return rest.some((a) => a === '--filter' || a.startsWith('--filter='));
|
|
@@ -32,24 +32,6 @@ export function expandObserveAlias(alias, rest = []) {
|
|
|
32
32
|
argv: ['feed', ...tail],
|
|
33
33
|
note: 'agents inbox → agents feed (needs-you inbox)',
|
|
34
34
|
};
|
|
35
|
-
case 'timeline': {
|
|
36
|
-
const argv = hasFilterFlag(tail)
|
|
37
|
-
? ['feed', ...tail]
|
|
38
|
-
: ['feed', '--filter', 'updates', ...tail];
|
|
39
|
-
return {
|
|
40
|
-
argv,
|
|
41
|
-
note: 'agents timeline → agents feed --filter updates',
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
case 'roster': {
|
|
45
|
-
const argv = hasActiveFlag(tail)
|
|
46
|
-
? ['sessions', ...tail]
|
|
47
|
-
: ['sessions', '--active', ...tail];
|
|
48
|
-
return {
|
|
49
|
-
argv,
|
|
50
|
-
note: 'agents roster → agents sessions --active',
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
35
|
default:
|
|
54
36
|
return null;
|
|
55
37
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Git / GitHub "output" collector — the shipped-work half of `agents output`.
|
|
2
|
+
* Git / GitHub "output" collector — the shipped-work half of `agents insights output`.
|
|
3
3
|
*
|
|
4
|
-
* `agents cost` answers "what did we burn?"; this answers "what did we ship?".
|
|
4
|
+
* `agents insights cost` answers "what did we burn?"; this answers "what did we ship?".
|
|
5
5
|
* It counts commits (across every author identity, so multi-account totals stay
|
|
6
6
|
* correct regardless of which `gh` login is active) and PRs opened / merged in a
|
|
7
7
|
* time window. Pure `git`/`gh` over child_process — no server, no telemetry,
|
package/dist/lib/overdue.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Surfaced two ways: a desktop notification on daemon startup, and a
|
|
12
12
|
* `agents routines catchup` command that runs them on demand.
|
|
13
13
|
*/
|
|
14
|
-
import { type JobConfig } from './routines.js';
|
|
14
|
+
import { type JobConfig } from './scheduling/routines.js';
|
|
15
15
|
export interface OverdueJob {
|
|
16
16
|
name: string;
|
|
17
17
|
/** Most recent expected fire time per the cron expression. */
|
package/dist/lib/overdue.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import * as fs from 'fs';
|
|
15
15
|
import { Cron } from 'croner';
|
|
16
|
-
import { listJobs, getLatestRun, resolveJobFilePath, isPastEndAt, isOneShotRoutine, jobRunsOnThisDevice } from './routines.js';
|
|
16
|
+
import { listJobs, getLatestRun, resolveJobFilePath, isPastEndAt, isOneShotRoutine, jobRunsOnThisDevice } from './scheduling/routines.js';
|
|
17
17
|
import { notifyDesktop } from './menubar/notify-desktop.js';
|
|
18
18
|
// Tolerance between "expected fire" and "recorded run start" — accounts for
|
|
19
19
|
// the small gap between the cron tick and when the runner writes meta.json.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AgentId, PermissionSet } from './types.js';
|
|
2
|
+
/** Canonical tool (lowercased) -> Grok's lowercase tool vocabulary. */
|
|
3
|
+
export declare const GROK_TOOL_BY_CANONICAL: Record<string, string | undefined>;
|
|
4
|
+
/** Canonical tool -> Kiro CLI v3 capability id. */
|
|
5
|
+
export declare const KIRO_CAPABILITY_BY_TOOL: Record<string, string | undefined>;
|
|
6
|
+
/** Canonical tool -> OpenClaw tool id (tool-level granularity only). */
|
|
7
|
+
export declare const CANONICAL_TO_OPENCLAW_TOOL: Record<string, string>;
|
|
8
|
+
/** Canonical tool -> Antigravity's action namespace. */
|
|
9
|
+
export declare const ANTIGRAVITY_ACTION_BY_TOOL: Record<string, string | undefined>;
|
|
10
|
+
/**
|
|
11
|
+
* Strip JSON comments for JSONC parsing, only OUTSIDE string literals.
|
|
12
|
+
*
|
|
13
|
+
* A naive `//`-to-end-of-line regex destroys
|
|
14
|
+
* `"$schema": "https://opencode.ai/config.json"` — which every
|
|
15
|
+
* opencode-generated config carries — so the file then fails to parse and its
|
|
16
|
+
* permissions read back as absent, the very defect this registry exists to fix.
|
|
17
|
+
* Exported so `permissions.ts` shares this one implementation instead of
|
|
18
|
+
* keeping its own copy.
|
|
19
|
+
*/
|
|
20
|
+
export declare function stripJsonComments(content: string): string;
|
|
21
|
+
/** The complete permissions contract for one agent. */
|
|
22
|
+
export interface PermissionTarget {
|
|
23
|
+
/** Permissions file under a HOME root (a version home, or the real HOME). */
|
|
24
|
+
home(home: string): string;
|
|
25
|
+
/** Permissions file for a project checkout, when the harness reads one. */
|
|
26
|
+
project?: (cwd: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Read `configPath` and project it to canonical form. Returns null when the
|
|
29
|
+
* file is absent, unreadable, or records no permissions — never throws.
|
|
30
|
+
*/
|
|
31
|
+
toCanonical(configPath: string): PermissionSet | null;
|
|
32
|
+
/** One line naming what this harness's shape loses on the way back. */
|
|
33
|
+
lossyBecause: string;
|
|
34
|
+
/**
|
|
35
|
+
* Extra path suffixes this harness's config may use, for DETECTION only.
|
|
36
|
+
*
|
|
37
|
+
* `home()`/`project()` may probe the filesystem to pick between accepted
|
|
38
|
+
* spellings, which is correct when resolving a real root but meaningless for
|
|
39
|
+
* detection — `detectPermissionAgentFromPath` passes `''`, so the probe would
|
|
40
|
+
* resolve against `process.cwd()` and make the same input detect differently
|
|
41
|
+
* depending on where the CLI was run.
|
|
42
|
+
*
|
|
43
|
+
* Detection still calls `home('')`/`project('')`, since most targets are pure
|
|
44
|
+
* `path.join` and need no entry. A target whose resolver probes MUST list
|
|
45
|
+
* EVERY spelling it can return — that is what makes the probe's answer
|
|
46
|
+
* irrelevant rather than unreachable. `existingOr` (opencode) is the only
|
|
47
|
+
* probing resolver today; `permissions-registry.test.ts` pins the invariant
|
|
48
|
+
* for the whole table rather than leaving it as prose.
|
|
49
|
+
*/
|
|
50
|
+
altSuffixes?: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Single source of truth for where each allowlist-capable agent stores
|
|
54
|
+
* permissions and how to read them back. Keys MUST equal
|
|
55
|
+
* `capableAgents('allowlist')` — pinned by `permissions-registry.test.ts`.
|
|
56
|
+
*/
|
|
57
|
+
export declare const PERMISSION_TARGETS: Partial<Record<AgentId, PermissionTarget>>;
|
|
58
|
+
/** The registry entry for `agent`, or undefined when it stores no permissions. */
|
|
59
|
+
export declare function permissionTarget(agent: AgentId): PermissionTarget | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Read `agent`'s permissions from `home` (a version home or the real HOME) and
|
|
62
|
+
* project them to canonical form. `scope: 'project'` reads the repo-local file
|
|
63
|
+
* for the harnesses that have one, and returns null for those that do not.
|
|
64
|
+
*/
|
|
65
|
+
export declare function readCanonicalPermissions(agent: AgentId, scope?: 'user' | 'project', cwd?: string, home?: string): PermissionSet | null;
|