@phnx-labs/agents-cli 1.22.35 → 1.22.37
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 +666 -2
- package/README.md +75 -35
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1211 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/attach.js +17 -4
- package/dist/commands/audit.d.ts +8 -8
- package/dist/commands/audit.js +57 -47
- package/dist/commands/browser.js +15 -11
- package/dist/commands/cloud.js +1 -1
- package/dist/commands/commands.js +0 -11
- package/dist/commands/computer-actions.js +33 -0
- package/dist/commands/computer-sessions-picker.d.ts +21 -0
- package/dist/commands/computer-sessions-picker.js +141 -0
- package/dist/commands/computer.d.ts +16 -0
- package/dist/commands/computer.js +37 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.js +401 -0
- package/dist/commands/cp.d.ts +84 -0
- package/dist/commands/cp.js +231 -0
- package/dist/commands/daemon.js +243 -14
- package/dist/commands/detach-core.d.ts +1 -1
- package/dist/commands/detach-core.js +12 -2
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +64 -5
- package/dist/commands/events.d.ts +24 -12
- package/dist/commands/events.js +144 -28
- package/dist/commands/exec.js +85 -41
- package/dist/commands/feed.d.ts +1 -1
- package/dist/commands/feed.js +16 -8
- package/dist/commands/focus.d.ts +33 -1
- package/dist/commands/focus.js +177 -17
- package/dist/commands/funnel.d.ts +1 -1
- package/dist/commands/go.js +9 -8
- package/dist/commands/harness-wizard.d.ts +1 -0
- package/dist/commands/harness-wizard.js +18 -20
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +59 -26
- package/dist/commands/hooks.js +0 -11
- package/dist/commands/inspect.d.ts +94 -1
- package/dist/commands/inspect.js +866 -40
- package/dist/commands/lease.d.ts +4 -4
- package/dist/commands/lease.js +6 -6
- package/dist/commands/login.js +0 -13
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +2 -2
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/memory.js +7 -2
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +37 -6
- package/dist/commands/models.js +4 -0
- package/dist/commands/monitors.d.ts +0 -1
- package/dist/commands/monitors.js +199 -16
- package/dist/commands/open.d.ts +18 -0
- package/dist/commands/open.js +57 -0
- package/dist/commands/packages.js +2 -107
- package/dist/commands/plugins.js +6 -3
- package/dist/commands/profiles.d.ts +1 -0
- package/dist/commands/profiles.js +16 -160
- package/dist/commands/projects.d.ts +28 -0
- package/dist/commands/projects.js +125 -5
- package/dist/commands/reconnect.js +9 -3
- package/dist/commands/repo.js +42 -1
- package/dist/commands/resource-view.d.ts +17 -0
- package/dist/commands/resource-view.js +36 -14
- package/dist/commands/resume.js +9 -2
- package/dist/commands/routines.d.ts +0 -2
- package/dist/commands/routines.js +473 -289
- package/dist/commands/secrets.js +52 -9
- package/dist/commands/sessions-export.d.ts +47 -0
- package/dist/commands/sessions-export.js +116 -6
- package/dist/commands/sessions-import.d.ts +17 -0
- package/dist/commands/sessions-import.js +114 -6
- package/dist/commands/sessions-migrate.d.ts +27 -0
- package/dist/commands/sessions-migrate.js +50 -9
- package/dist/commands/sessions-picker.js +23 -4
- package/dist/commands/sessions-resume.d.ts +5 -3
- package/dist/commands/sessions-resume.js +30 -8
- package/dist/commands/sessions-watch.d.ts +2 -0
- package/dist/commands/sessions-watch.js +53 -0
- package/dist/commands/sessions.d.ts +66 -3
- package/dist/commands/sessions.js +298 -47
- package/dist/commands/set.d.ts +1 -1
- package/dist/commands/set.js +2 -2
- package/dist/commands/setup-browser.js +2 -2
- package/dist/commands/setup-mine.js +0 -1
- package/dist/commands/setup-preferences.js +1 -1
- package/dist/commands/setup-share.js +34 -4
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +26 -0
- package/dist/commands/share.d.ts +67 -0
- package/dist/commands/share.js +275 -12
- package/dist/commands/skills.js +0 -11
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/ssh.d.ts +18 -0
- package/dist/commands/ssh.js +549 -210
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +212 -32
- package/dist/commands/teams.d.ts +13 -0
- package/dist/commands/teams.js +187 -30
- package/dist/commands/tickets.d.ts +2 -0
- package/dist/commands/tickets.js +43 -0
- package/dist/commands/update.js +2 -4
- package/dist/commands/usage.js +5 -3
- package/dist/commands/versions.js +11 -5
- package/dist/commands/view.js +15 -7
- package/dist/commands/webhook.d.ts +2 -2
- package/dist/commands/webhook.js +7 -7
- package/dist/index.d.ts +18 -2
- package/dist/index.js +53 -1264
- package/dist/lib/account-catalog.d.ts +18 -0
- package/dist/lib/account-catalog.js +38 -0
- package/dist/lib/account-provider-registry.d.ts +18 -0
- package/dist/lib/account-provider-registry.js +59 -0
- package/dist/lib/account-registry.d.ts +40 -0
- package/dist/lib/account-registry.js +239 -0
- package/dist/lib/account-schema.d.ts +44 -0
- package/dist/lib/account-schema.js +91 -0
- package/dist/lib/account-state-service.d.ts +21 -0
- package/dist/lib/account-state-service.js +60 -0
- package/dist/lib/activity.d.ts +1 -1
- package/dist/lib/activity.js +8 -1
- package/dist/lib/add-dir.d.ts +80 -0
- package/dist/lib/add-dir.js +241 -0
- package/dist/lib/agent-cli-commands.d.ts +11 -0
- package/dist/lib/agent-cli-commands.js +30 -0
- package/dist/lib/agents.js +44 -36
- package/dist/lib/answer-router.js +1 -1
- package/dist/lib/audit/log.d.ts +10 -27
- package/dist/lib/audit/log.js +20 -33
- package/dist/lib/auth-health.d.ts +9 -2
- package/dist/lib/auth-health.js +42 -9
- package/dist/lib/auto-pull-worker.js +7 -3
- package/dist/lib/auto-pull.d.ts +44 -3
- package/dist/lib/auto-pull.js +88 -5
- package/dist/lib/binary-shadow.d.ts +28 -0
- package/dist/lib/binary-shadow.js +121 -0
- package/dist/lib/brand.js +9 -3
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +81 -4
- package/dist/lib/browser/profiles.d.ts +3 -2
- package/dist/lib/browser/profiles.js +65 -22
- package/dist/lib/browser/service.d.ts +4 -0
- package/dist/lib/browser/service.js +30 -3
- package/dist/lib/browser/sessions-list.d.ts +22 -2
- package/dist/lib/browser/sessions-list.js +54 -6
- package/dist/lib/browser/stream.d.ts +2 -0
- package/dist/lib/browser/stream.js +1 -0
- package/dist/lib/browser/types.d.ts +19 -0
- package/dist/lib/byok-usage.d.ts +9 -2
- package/dist/lib/byok-usage.js +133 -31
- package/dist/lib/cli-entry.d.ts +11 -0
- package/dist/lib/cli-entry.js +46 -0
- package/dist/lib/cloud/host.d.ts +1 -1
- package/dist/lib/cloud/host.js +2 -2
- package/dist/lib/cloud/registry.js +1 -1
- package/dist/lib/cloud/types.d.ts +1 -1
- package/dist/lib/commands.d.ts +2 -0
- package/dist/lib/commands.js +2 -0
- package/dist/lib/computer/sessions-list.d.ts +150 -0
- package/dist/lib/computer/sessions-list.js +363 -0
- package/dist/lib/config-keys.d.ts +86 -0
- package/dist/lib/config-keys.js +193 -0
- package/dist/lib/config-machine-keys.d.ts +12 -0
- package/dist/lib/config-machine-keys.js +17 -0
- package/dist/lib/config-transfer.js +3 -4
- package/dist/lib/crabbox/cli.d.ts +2 -2
- package/dist/lib/crabbox/cli.js +3 -3
- package/dist/lib/daemon-health.d.ts +22 -0
- package/dist/lib/daemon-health.js +33 -3
- package/dist/lib/daemon-services.d.ts +50 -0
- package/dist/lib/daemon-services.js +147 -0
- package/dist/lib/daemon-ticks.d.ts +35 -66
- package/dist/lib/daemon-ticks.js +77 -159
- package/dist/lib/daemon.d.ts +72 -4
- package/dist/lib/daemon.js +792 -202
- package/dist/lib/deeplink/register.d.ts +49 -0
- package/dist/lib/deeplink/register.js +253 -0
- package/dist/lib/deeplink/url.d.ts +34 -0
- package/dist/lib/deeplink/url.js +78 -0
- package/dist/lib/device-config.d.ts +124 -29
- package/dist/lib/device-config.js +346 -141
- package/dist/lib/devices/config-migration.d.ts +42 -0
- package/dist/lib/devices/config-migration.js +203 -0
- package/dist/lib/devices/connect.js +14 -7
- package/dist/lib/devices/doctor-findings.d.ts +4 -1
- package/dist/lib/devices/doctor-findings.js +20 -1
- package/dist/lib/devices/harness-inventory.d.ts +11 -2
- package/dist/lib/devices/harness-inventory.js +0 -0
- package/dist/lib/devices/health.d.ts +1 -1
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/pending.d.ts +22 -1
- package/dist/lib/devices/pending.js +67 -2
- package/dist/lib/devices/registry.d.ts +0 -25
- package/dist/lib/devices/registry.js +2 -83
- package/dist/lib/devices/resolve-profile.d.ts +20 -0
- package/dist/lib/devices/resolve-profile.js +44 -0
- package/dist/lib/devices/rollout-verify.d.ts +101 -0
- package/dist/lib/devices/rollout-verify.js +193 -0
- package/dist/lib/devices/ssh-config.js +10 -6
- package/dist/lib/event-families.d.ts +28 -0
- package/dist/lib/event-families.js +159 -0
- package/dist/lib/event-stream.d.ts +9 -1
- package/dist/lib/event-stream.js +26 -9
- package/dist/lib/events.d.ts +9 -1
- package/dist/lib/events.js +21 -6
- package/dist/lib/exec.d.ts +30 -0
- package/dist/lib/exec.js +219 -121
- package/dist/lib/feed-broadcast.d.ts +25 -0
- package/dist/lib/feed-broadcast.js +33 -0
- package/dist/lib/feed.d.ts +1 -1
- package/dist/lib/feed.js +12 -2
- package/dist/lib/fleet/capture.js +15 -0
- package/dist/lib/fleet/manifest.js +9 -0
- package/dist/lib/fleet/types.d.ts +9 -0
- package/dist/lib/fleet-status.js +10 -8
- package/dist/lib/git.d.ts +20 -6
- package/dist/lib/git.js +121 -17
- package/dist/lib/hosts/dispatch.d.ts +8 -3
- package/dist/lib/hosts/dispatch.js +29 -3
- package/dist/lib/hosts/logs.d.ts +2 -2
- package/dist/lib/hosts/logs.js +2 -2
- package/dist/lib/hosts/option.js +1 -1
- package/dist/lib/hosts/passthrough.d.ts +2 -3
- package/dist/lib/hosts/passthrough.js +10 -24
- package/dist/lib/hosts/progress.js +2 -2
- package/dist/lib/hosts/providers/devices.d.ts +3 -3
- package/dist/lib/hosts/providers/devices.js +18 -12
- package/dist/lib/hosts/ready.d.ts +5 -1
- package/dist/lib/hosts/ready.js +9 -3
- package/dist/lib/hosts/reconcile.d.ts +2 -2
- package/dist/lib/hosts/reconcile.js +2 -2
- package/dist/lib/hosts/registry.js +14 -9
- package/dist/lib/hosts/remote-cmd.js +1 -1
- package/dist/lib/hosts/remote-os.d.ts +9 -6
- package/dist/lib/hosts/remote-os.js +13 -6
- package/dist/lib/hosts/routing-flag.d.ts +23 -0
- package/dist/lib/hosts/routing-flag.js +41 -0
- package/dist/lib/hosts/run-target.js +1 -1
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/tasks.d.ts +6 -6
- package/dist/lib/hosts/tasks.js +4 -4
- package/dist/lib/hosts/types.js +1 -2
- package/dist/lib/installations/resolve.js +2 -8
- package/dist/lib/isolation-boundary-report.js +0 -1
- package/dist/lib/linear-cache.d.ts +7 -0
- package/dist/lib/linear-cache.js +31 -4
- package/dist/lib/linear-project-counts.d.ts +1 -1
- package/dist/lib/linear-project-counts.js +2 -3
- package/dist/lib/linear-projects.js +1 -1
- package/dist/lib/loop.d.ts +2 -2
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-target.d.ts +1 -1
- package/dist/lib/mailbox-target.js +1 -1
- package/dist/lib/manifest.js +7 -4
- 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/snapshot.d.ts +3 -2
- package/dist/lib/menubar/snapshot.js +6 -2
- package/dist/lib/migrate-fold.d.ts +33 -0
- package/dist/lib/migrate-fold.js +130 -0
- package/dist/lib/migrate.d.ts +34 -34
- package/dist/lib/migrate.js +106 -128
- package/dist/lib/model-tier-overrides.d.ts +1 -1
- package/dist/lib/model-tier-overrides.js +15 -2
- package/dist/lib/monitors/config.d.ts +17 -3
- package/dist/lib/monitors/config.js +52 -18
- package/dist/lib/monitors/engine.d.ts +32 -1
- package/dist/lib/monitors/engine.js +94 -11
- package/dist/lib/monitors/fingerprint.d.ts +46 -0
- package/dist/lib/monitors/fingerprint.js +100 -0
- package/dist/lib/monitors/remote.d.ts +47 -0
- package/dist/lib/monitors/remote.js +81 -0
- package/dist/lib/monitors/state.d.ts +39 -0
- package/dist/lib/monitors/state.js +56 -0
- package/dist/lib/onepassword.d.ts +17 -0
- package/dist/lib/onepassword.js +52 -22
- package/dist/lib/open-url.js +1 -1
- package/dist/lib/picker.d.ts +14 -2
- package/dist/lib/picker.js +35 -13
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +32 -0
- package/dist/lib/pr-land-detach.js +79 -0
- package/dist/lib/profiles-presets.js +13 -0
- package/dist/lib/profiles.d.ts +2 -0
- package/dist/lib/profiles.js +44 -1
- package/dist/lib/project-focus.d.ts +1 -1
- package/dist/lib/project-focus.js +1 -1
- package/dist/lib/project-probe.d.ts +4 -1
- package/dist/lib/project-probe.js +5 -4
- package/dist/lib/project-resources.js +2 -18
- package/dist/lib/project-root.d.ts +16 -0
- package/dist/lib/project-root.js +20 -2
- package/dist/lib/projects.d.ts +20 -1
- package/dist/lib/projects.js +78 -1
- package/dist/lib/refresh-coordinator.d.ts +24 -0
- package/dist/lib/refresh-coordinator.js +52 -0
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +1 -1
- package/dist/lib/resource-aliases.d.ts +13 -0
- package/dist/lib/resource-aliases.js +26 -0
- package/dist/lib/resources/types.d.ts +1 -1
- package/dist/lib/resources.d.ts +16 -0
- package/dist/lib/resources.js +66 -10
- package/dist/lib/rotate.d.ts +3 -4
- package/dist/lib/rotate.js +4 -5
- package/dist/lib/routine-activation.d.ts +22 -2
- package/dist/lib/routine-activation.js +63 -16
- package/dist/lib/routine-context.d.ts +9 -2
- package/dist/lib/routine-context.js +21 -6
- package/dist/lib/routines-project.d.ts +58 -48
- package/dist/lib/routines-project.js +190 -159
- package/dist/lib/routines.d.ts +41 -6
- package/dist/lib/routines.js +92 -34
- package/dist/lib/run-defaults.d.ts +5 -0
- package/dist/lib/run-defaults.js +11 -1
- package/dist/lib/runner.d.ts +10 -8
- package/dist/lib/runner.js +122 -39
- 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.d.ts +10 -3
- package/dist/lib/secrets/agent.js +43 -8
- package/dist/lib/secrets/bundles.d.ts +1 -0
- package/dist/lib/secrets/bundles.js +92 -80
- package/dist/lib/secrets/index.js +32 -9
- package/dist/lib/secrets/install-helper.d.ts +4 -4
- package/dist/lib/secrets/install-helper.js +4 -4
- package/dist/lib/secrets/push.d.ts +40 -6
- package/dist/lib/secrets/push.js +58 -11
- package/dist/lib/secrets/read-backoff.d.ts +1 -1
- package/dist/lib/secrets/read-backoff.js +1 -1
- package/dist/lib/secrets/remote.d.ts +24 -0
- package/dist/lib/secrets/remote.js +54 -4
- package/dist/lib/self-update.d.ts +108 -0
- package/dist/lib/self-update.js +276 -1
- package/dist/lib/session/active.d.ts +89 -5
- package/dist/lib/session/active.js +165 -10
- package/dist/lib/session/actor-sidecar.d.ts +1 -1
- package/dist/lib/session/actor-sidecar.js +2 -1
- package/dist/lib/session/db.d.ts +176 -2
- package/dist/lib/session/db.js +484 -17
- package/dist/lib/session/discover.js +27 -4
- package/dist/lib/session/hook-sessions.js +2 -2
- package/dist/lib/session/host-link.d.ts +2 -2
- package/dist/lib/session/host-link.js +2 -2
- package/dist/lib/session/pid-registry.d.ts +21 -0
- package/dist/lib/session/pid-registry.js +57 -0
- package/dist/lib/session/remote-active.js +15 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/session-cache.d.ts +14 -7
- package/dist/lib/session/session-cache.js +51 -9
- package/dist/lib/session/state.d.ts +2 -2
- package/dist/lib/session/state.js +1 -1
- package/dist/lib/session/sync/config.d.ts +10 -10
- package/dist/lib/session/sync/config.js +10 -10
- package/dist/lib/session/sync/r2.d.ts +34 -0
- package/dist/lib/session/sync/r2.js +123 -0
- package/dist/lib/session/throughput.d.ts +1 -1
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/types.d.ts +23 -1
- package/dist/lib/session/types.js +15 -0
- package/dist/lib/session/viewing-in.d.ts +1 -1
- package/dist/lib/session/viewing-in.js +1 -1
- package/dist/lib/session/watch.d.ts +101 -0
- package/dist/lib/session/watch.js +242 -0
- package/dist/lib/share/config.d.ts +4 -0
- package/dist/lib/share/config.js +1 -0
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +50 -0
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +116 -3
- package/dist/lib/share/worker-template.js +71 -6
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +98 -26
- package/dist/lib/signin-badge.js +3 -2
- package/dist/lib/skills.js +2 -0
- package/dist/lib/smart-launch.d.ts +8 -8
- package/dist/lib/smart-launch.js +80 -59
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +1 -1
- package/dist/lib/staleness/prune.d.ts +88 -0
- package/dist/lib/staleness/prune.js +69 -0
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/commands.js +34 -2
- package/dist/lib/staleness/writers/hooks.js +16 -0
- package/dist/lib/staleness/writers/kinds.d.ts +6 -0
- package/dist/lib/staleness/writers/skills.js +19 -0
- package/dist/lib/staleness/writers/subagents.d.ts +2 -3
- package/dist/lib/staleness/writers/subagents.js +0 -4
- package/dist/lib/staleness/writers/types.d.ts +32 -0
- package/dist/lib/startup/command-registry.d.ts +6 -12
- package/dist/lib/startup/command-registry.js +11 -31
- package/dist/lib/startup/dev-build.d.ts +10 -0
- package/dist/lib/startup/dev-build.js +13 -1
- package/dist/lib/startup/spellcheck.d.ts +18 -0
- package/dist/lib/startup/spellcheck.js +45 -0
- package/dist/lib/state.d.ts +36 -9
- package/dist/lib/state.js +96 -46
- package/dist/lib/subagents-registry.d.ts +0 -7
- package/dist/lib/subagents-registry.js +38 -65
- package/dist/lib/subagents.d.ts +0 -33
- package/dist/lib/subagents.js +0 -75
- package/dist/lib/sync-umbrella.js +1 -1
- package/dist/lib/teams/agents.d.ts +41 -1
- package/dist/lib/teams/agents.js +187 -9
- package/dist/lib/teams/api.d.ts +11 -1
- package/dist/lib/teams/api.js +11 -2
- package/dist/lib/teams/delivery.d.ts +41 -0
- package/dist/lib/teams/delivery.js +60 -0
- package/dist/lib/teams/registry.d.ts +14 -0
- package/dist/lib/teams/registry.js +51 -1
- package/dist/lib/teams/remoteWorktree.d.ts +19 -0
- package/dist/lib/teams/remoteWorktree.js +29 -0
- package/dist/lib/teams/scheduler.d.ts +1 -1
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/worktree.d.ts +24 -0
- package/dist/lib/teams/worktree.js +42 -0
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
- package/dist/lib/terminal/engine.d.ts +4 -0
- package/dist/lib/terminal/engine.js +8 -2
- package/dist/lib/terminal/types.d.ts +21 -2
- package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
- package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
- package/dist/lib/tickets/list.d.ts +53 -0
- package/dist/lib/tickets/list.js +153 -0
- package/dist/lib/tmux/orphan-reap.d.ts +320 -0
- package/dist/lib/tmux/orphan-reap.js +644 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +95 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +6 -1
- package/dist/lib/types.d.ts +46 -34
- package/dist/lib/usage-fleet.d.ts +32 -0
- package/dist/lib/usage-fleet.js +125 -0
- package/dist/lib/usage-refresh.d.ts +3 -3
- package/dist/lib/usage-refresh.js +19 -16
- package/dist/lib/usage.d.ts +51 -47
- package/dist/lib/usage.js +145 -153
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/versions.d.ts +56 -13
- package/dist/lib/versions.js +195 -45
- package/dist/lib/watchdog/log.d.ts +1 -1
- package/dist/lib/watchdog/log.js +3 -3
- package/dist/lib/watchdog/rotate.d.ts +6 -6
- package/dist/lib/watchdog/rotate.js +6 -6
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/yaml-io.d.ts +47 -0
- package/dist/lib/yaml-io.js +55 -0
- package/package.json +2 -1
- package/scripts/install-helper.js +2 -2
- package/scripts/postinstall.js +23 -20
- package/dist/commands/defaults.d.ts +0 -7
- package/dist/commands/defaults.js +0 -107
- package/dist/commands/export.d.ts +0 -11
- package/dist/commands/export.js +0 -215
- package/dist/commands/helper.d.ts +0 -12
- package/dist/commands/helper.js +0 -87
- package/dist/commands/hosts.d.ts +0 -11
- package/dist/commands/hosts.js +0 -330
- package/dist/commands/lock.d.ts +0 -12
- package/dist/commands/lock.js +0 -70
- package/dist/commands/pull.d.ts +0 -17
- package/dist/commands/pull.js +0 -39
- package/dist/commands/push.d.ts +0 -14
- package/dist/commands/push.js +0 -30
- package/dist/commands/wallet.d.ts +0 -20
- package/dist/commands/wallet.js +0 -216
- package/dist/commands/worktree.d.ts +0 -19
- package/dist/commands/worktree.js +0 -272
- package/dist/lib/account-labels.d.ts +0 -24
- package/dist/lib/account-labels.js +0 -72
- package/dist/lib/auto-dispatch-linear.d.ts +0 -18
- package/dist/lib/auto-dispatch-linear.js +0 -107
- package/dist/lib/auto-dispatch-provider.d.ts +0 -10
- package/dist/lib/auto-dispatch-provider.js +0 -30
- package/dist/lib/auto-dispatch.d.ts +0 -93
- package/dist/lib/auto-dispatch.js +0 -128
- package/dist/lib/export.d.ts +0 -72
- package/dist/lib/export.js +0 -269
- package/dist/lib/lock.d.ts +0 -93
- package/dist/lib/lock.js +0 -207
- package/dist/lib/wallet/index.d.ts +0 -78
- package/dist/lib/wallet/index.js +0 -253
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event stream families — sessions-style --include / --exclude for the unified
|
|
3
|
+
* event reader. One vocabulary maps onto existing filters (includeActivity,
|
|
4
|
+
* eventTypes, level) so the engine stays single-path.
|
|
5
|
+
*/
|
|
6
|
+
export const EVENT_FAMILIES = [
|
|
7
|
+
'ops',
|
|
8
|
+
'activity',
|
|
9
|
+
'commands',
|
|
10
|
+
'runs',
|
|
11
|
+
'security',
|
|
12
|
+
];
|
|
13
|
+
const FAMILY_SET = new Set(EVENT_FAMILIES);
|
|
14
|
+
export function isEventFamily(value) {
|
|
15
|
+
return FAMILY_SET.has(value);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse a comma-separated family list. Throws on unknown names or empty list
|
|
19
|
+
* after split (same discipline as sessions role lists).
|
|
20
|
+
*/
|
|
21
|
+
export function parseFamilyList(raw, flagName) {
|
|
22
|
+
const parts = raw.split(',').map((s) => s.trim()).filter(Boolean);
|
|
23
|
+
if (parts.length === 0) {
|
|
24
|
+
throw new Error(`${flagName} requires at least one family: ${EVENT_FAMILIES.join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const p of parts) {
|
|
28
|
+
if (!isEventFamily(p)) {
|
|
29
|
+
throw new Error(`Unknown family ${JSON.stringify(p)} in ${flagName}. Use: ${EVENT_FAMILIES.join(', ')}`);
|
|
30
|
+
}
|
|
31
|
+
if (!out.includes(p))
|
|
32
|
+
out.push(p);
|
|
33
|
+
}
|
|
34
|
+
return out;
|
|
35
|
+
}
|
|
36
|
+
/** Command-churn event kinds. */
|
|
37
|
+
export const COMMAND_EVENT_TYPES = ['command.start', 'command.end'];
|
|
38
|
+
/** Run-dispatch outcome kinds (replaces the separate audit/log.jsonl product). */
|
|
39
|
+
export const RUN_EVENT_TYPES = ['run.dispatched', 'agent.run.end'];
|
|
40
|
+
/**
|
|
41
|
+
* Fold family include/exclude into a UnifiedQuery.
|
|
42
|
+
* Precedence: family narrows sources/types; field filters (module, event, …)
|
|
43
|
+
* still apply on top.
|
|
44
|
+
*
|
|
45
|
+
* --include and --exclude are mutually exclusive at the CLI layer; this
|
|
46
|
+
* function accepts only one of includeFamilies / excludeFamilies.
|
|
47
|
+
*/
|
|
48
|
+
export function applyFamilies(q) {
|
|
49
|
+
const include = q.includeFamilies;
|
|
50
|
+
const exclude = q.excludeFamilies;
|
|
51
|
+
if (include?.length && exclude?.length) {
|
|
52
|
+
throw new Error('--include and --exclude are mutually exclusive');
|
|
53
|
+
}
|
|
54
|
+
if (!include?.length && !exclude?.length)
|
|
55
|
+
return q;
|
|
56
|
+
if (include?.length)
|
|
57
|
+
return applyInclude(q, include);
|
|
58
|
+
return applyExclude(q, exclude);
|
|
59
|
+
}
|
|
60
|
+
function applyInclude(q, families) {
|
|
61
|
+
const has = (f) => families.includes(f);
|
|
62
|
+
const typeSets = [];
|
|
63
|
+
let level = q.level;
|
|
64
|
+
let includeActivity = false;
|
|
65
|
+
let forceModule;
|
|
66
|
+
// Source selection — multi-family include is a UNION of each family's rows.
|
|
67
|
+
if (has('activity'))
|
|
68
|
+
includeActivity = true;
|
|
69
|
+
if (has('ops') || has('commands') || has('runs') || has('security')) {
|
|
70
|
+
// ops path open (includeActivity stays true when activity is also listed)
|
|
71
|
+
}
|
|
72
|
+
else if (has('activity')) {
|
|
73
|
+
// activity-only
|
|
74
|
+
forceModule = q.module ?? 'activity';
|
|
75
|
+
includeActivity = true;
|
|
76
|
+
}
|
|
77
|
+
// Default when include lists only type-scoping / ops / security: activity off
|
|
78
|
+
// unless activity is listed.
|
|
79
|
+
if (!has('activity') && (has('ops') || has('commands') || has('runs') || has('security'))) {
|
|
80
|
+
includeActivity = false;
|
|
81
|
+
}
|
|
82
|
+
// include ops + activity explicitly
|
|
83
|
+
if (has('ops') && has('activity'))
|
|
84
|
+
includeActivity = true;
|
|
85
|
+
if (has('commands'))
|
|
86
|
+
typeSets.push([...COMMAND_EVENT_TYPES]);
|
|
87
|
+
if (has('runs'))
|
|
88
|
+
typeSets.push([...RUN_EVENT_TYPES]);
|
|
89
|
+
if (has('security')) {
|
|
90
|
+
if (!level)
|
|
91
|
+
level = 'audit';
|
|
92
|
+
// security without activity stays ops-only
|
|
93
|
+
if (!has('activity'))
|
|
94
|
+
includeActivity = false;
|
|
95
|
+
}
|
|
96
|
+
// Type-scoped families (commands / runs) only restrict eventTypes when no
|
|
97
|
+
// broader ops-side family is in the include list. ops and security already
|
|
98
|
+
// cover those kinds; AND-ing a type filter would shrink the union (e.g.
|
|
99
|
+
// --include security,runs would drop secrets.get and keep only run.dispatched).
|
|
100
|
+
const broadOps = has('ops') || has('security');
|
|
101
|
+
let eventTypes = q.eventTypes ? [...q.eventTypes] : undefined;
|
|
102
|
+
if (typeSets.length > 0 && !broadOps) {
|
|
103
|
+
const union = new Set();
|
|
104
|
+
for (const set of typeSets)
|
|
105
|
+
for (const t of set)
|
|
106
|
+
union.add(t);
|
|
107
|
+
if (eventTypes?.length) {
|
|
108
|
+
// Intersect with --event; empty means no match (never silently widen).
|
|
109
|
+
const allowed = new Set(eventTypes);
|
|
110
|
+
eventTypes = [...union].filter((t) => allowed.has(t));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
eventTypes = [...union];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
...q,
|
|
118
|
+
includeActivity,
|
|
119
|
+
...(forceModule != null ? { module: forceModule } : {}),
|
|
120
|
+
...(level ? { level } : {}),
|
|
121
|
+
...(eventTypes ? { eventTypes } : {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function applyExclude(q, families) {
|
|
125
|
+
const has = (f) => families.includes(f);
|
|
126
|
+
let includeActivity = q.includeActivity !== false;
|
|
127
|
+
const excludeEventTypes = [...(q.excludeEventTypes ?? [])];
|
|
128
|
+
let excludeLevel = q.excludeLevel;
|
|
129
|
+
let forceModule;
|
|
130
|
+
// Exclude ops first (→ activity-only), then activity (may clear the reopen).
|
|
131
|
+
// --exclude ops,activity must not re-open activity after both sources are out.
|
|
132
|
+
if (has('ops')) {
|
|
133
|
+
forceModule = q.module ?? 'activity';
|
|
134
|
+
includeActivity = true;
|
|
135
|
+
}
|
|
136
|
+
if (has('activity'))
|
|
137
|
+
includeActivity = false;
|
|
138
|
+
if (has('commands')) {
|
|
139
|
+
for (const t of COMMAND_EVENT_TYPES) {
|
|
140
|
+
if (!excludeEventTypes.includes(t))
|
|
141
|
+
excludeEventTypes.push(t);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (has('runs')) {
|
|
145
|
+
for (const t of RUN_EVENT_TYPES) {
|
|
146
|
+
if (!excludeEventTypes.includes(t))
|
|
147
|
+
excludeEventTypes.push(t);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (has('security'))
|
|
151
|
+
excludeLevel = 'audit';
|
|
152
|
+
return {
|
|
153
|
+
...q,
|
|
154
|
+
includeActivity,
|
|
155
|
+
...(forceModule != null ? { module: forceModule } : {}),
|
|
156
|
+
...(excludeEventTypes.length ? { excludeEventTypes } : {}),
|
|
157
|
+
...(excludeLevel ? { excludeLevel } : {}),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
@@ -12,11 +12,16 @@
|
|
|
12
12
|
* single READ surface that merges them; nothing here writes.
|
|
13
13
|
*/
|
|
14
14
|
import { type EventRecord, type EventType, type EventLevel } from './events.js';
|
|
15
|
+
import { type EventFamily } from './event-families.js';
|
|
15
16
|
export interface UnifiedQuery {
|
|
16
17
|
startDate?: Date;
|
|
17
18
|
endDate?: Date;
|
|
18
19
|
eventTypes?: EventType[];
|
|
20
|
+
/** Drop these event kinds after read (used by --exclude commands / runs). */
|
|
21
|
+
excludeEventTypes?: EventType[];
|
|
19
22
|
level?: EventLevel;
|
|
23
|
+
/** Drop this level (used by --exclude security). */
|
|
24
|
+
excludeLevel?: EventLevel;
|
|
20
25
|
agent?: string;
|
|
21
26
|
/** Only events stamped with this session id (payload `sessionId`, the provenance floor). */
|
|
22
27
|
sessionId?: string;
|
|
@@ -31,6 +36,9 @@ export interface UnifiedQuery {
|
|
|
31
36
|
includeActivity?: boolean;
|
|
32
37
|
/** Override the activity dir (tests). */
|
|
33
38
|
activityRoot?: string;
|
|
39
|
+
/** Sessions-style family filters (resolved via applyFamilies). */
|
|
40
|
+
includeFamilies?: EventFamily[];
|
|
41
|
+
excludeFamilies?: EventFamily[];
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
44
|
* Read a unified, newest-first event stream. Operational events come from
|
|
@@ -40,4 +48,4 @@ export interface UnifiedQuery {
|
|
|
40
48
|
* eventTypes for activity, eventTypes/module/bundle for ops — so the top-N is
|
|
41
49
|
* exact for those filters).
|
|
42
50
|
*/
|
|
43
|
-
export declare function readUnifiedEvents(
|
|
51
|
+
export declare function readUnifiedEvents(raw?: UnifiedQuery): EventRecord[];
|
package/dist/lib/event-stream.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { query, levelFor } from './events.js';
|
|
15
15
|
import { readActivityAsEventRecords } from './activity.js';
|
|
16
|
+
import { applyFamilies } from './event-families.js';
|
|
16
17
|
/** Apply the same filters query() applies, to an activity-derived record. */
|
|
17
18
|
function matches(r, q) {
|
|
18
19
|
const ms = Date.parse(r.ts);
|
|
@@ -25,7 +26,12 @@ function matches(r, q) {
|
|
|
25
26
|
return false;
|
|
26
27
|
if (q.eventTypes && !q.eventTypes.includes(r.event))
|
|
27
28
|
return false;
|
|
28
|
-
if (q.
|
|
29
|
+
if (q.excludeEventTypes?.includes(r.event))
|
|
30
|
+
return false;
|
|
31
|
+
const lvl = r.level ?? levelFor(r.event);
|
|
32
|
+
if (q.level && lvl !== q.level)
|
|
33
|
+
return false;
|
|
34
|
+
if (q.excludeLevel && lvl === q.excludeLevel)
|
|
29
35
|
return false;
|
|
30
36
|
if (q.agent && r.agent !== q.agent)
|
|
31
37
|
return false;
|
|
@@ -50,9 +56,18 @@ function matches(r, q) {
|
|
|
50
56
|
* eventTypes for activity, eventTypes/module/bundle for ops — so the top-N is
|
|
51
57
|
* exact for those filters).
|
|
52
58
|
*/
|
|
53
|
-
export function readUnifiedEvents(
|
|
59
|
+
export function readUnifiedEvents(raw = {}) {
|
|
60
|
+
const q = applyFamilies(raw);
|
|
54
61
|
// `bundle` is filtered inside query()'s scan (before its limit cutoff) so a
|
|
55
62
|
// matching-bundle record older than the newest-`limit` window is not dropped.
|
|
63
|
+
// Over-fetch when we will post-filter excludeEventTypes / excludeLevel so the
|
|
64
|
+
// top-N is still meaningful after drops.
|
|
65
|
+
const needsPost = Boolean(q.excludeEventTypes?.length || q.excludeLevel);
|
|
66
|
+
const fetchLimit = q.limit === undefined
|
|
67
|
+
? undefined
|
|
68
|
+
: needsPost
|
|
69
|
+
? Math.min(q.limit * 4, q.limit + 500)
|
|
70
|
+
: q.limit;
|
|
56
71
|
const ops = query({
|
|
57
72
|
startDate: q.startDate,
|
|
58
73
|
endDate: q.endDate,
|
|
@@ -64,14 +79,16 @@ export function readUnifiedEvents(q = {}) {
|
|
|
64
79
|
command: q.command,
|
|
65
80
|
module: q.module,
|
|
66
81
|
bundle: q.bundle,
|
|
67
|
-
limit:
|
|
68
|
-
});
|
|
69
|
-
if (q.includeActivity === false)
|
|
70
|
-
return ops;
|
|
82
|
+
limit: fetchLimit,
|
|
83
|
+
}).filter((r) => matches(r, q));
|
|
84
|
+
if (q.includeActivity === false) {
|
|
85
|
+
return typeof q.limit === 'number' ? ops.slice(0, q.limit) : ops;
|
|
86
|
+
}
|
|
71
87
|
// Activity events always stamp module: 'activity'. A non-activity module
|
|
72
88
|
// filter can never match them — skip the activity scan entirely.
|
|
73
|
-
if (q.module != null && q.module !== 'activity')
|
|
74
|
-
return ops;
|
|
89
|
+
if (q.module != null && q.module !== 'activity') {
|
|
90
|
+
return typeof q.limit === 'number' ? ops.slice(0, q.limit) : ops;
|
|
91
|
+
}
|
|
75
92
|
// Push eventTypes into the activity reader so `limit` is applied AFTER the
|
|
76
93
|
// event-type filter (readRecentActivity already does this for `events`).
|
|
77
94
|
// Without this, a rare match older than the newest-`limit` window of routine
|
|
@@ -80,7 +97,7 @@ export function readUnifiedEvents(q = {}) {
|
|
|
80
97
|
// run via matches() for fields activity.ts does not pre-filter.
|
|
81
98
|
const acts = readActivityAsEventRecords({
|
|
82
99
|
sinceMs: q.startDate?.getTime(),
|
|
83
|
-
limit:
|
|
100
|
+
limit: fetchLimit,
|
|
84
101
|
root: q.activityRoot,
|
|
85
102
|
events: q.eventTypes,
|
|
86
103
|
}).filter((r) => matches(r, q));
|
package/dist/lib/events.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { ActorKind } from './actor.js';
|
|
15
15
|
export type EventLevel = 'audit' | 'warn' | 'info' | 'debug';
|
|
16
|
-
export type EventType = 'agent.run.start' | 'agent.run.end' | 'agent.spawn.start' | 'agent.spawn.end' | 'version.install' | 'version.switch' | 'version.remove' | 'skill.install' | 'skill.remove' | 'browser.launch' | 'browser.close' | 'browser.navigate' | 'browser.screenshot' | 'computer.action' | 'secrets.get' | 'secrets.unlocked' | 'secrets.create' | 'secrets.import' | 'secrets.export' | 'secrets.view' | 'secrets.lease-denied' | 'secrets.lease-expire' | 'secrets.set' | 'secrets.delete' | 'secrets.rename' | 'cloud.dispatch' | 'cloud.complete' | 'cloud.cancel' | 'cloud.message' | 'teams.create' | 'teams.add' | 'teams.start' | 'teams.complete' | 'teams.disband' | 'hook.fire' | 'hook.complete' | 'hook.error' | 'mcp.add' | 'mcp.remove' | 'mcp.register' | 'resource.sync' | 'rotation.resolved' | 'command.start' | 'command.end' | 'perf.timing' | 'session.start' | 'session.end' | 'webhook.received' | 'webhook.authorized' | 'webhook.rejected' | 'webhook.matched' | 'webhook.fired' | 'webhook.handler.start' | 'webhook.handler.end' | 'plan.created' | 'pr.opened' | 'pr.merged' | 'worktree.created' | 'worktree.removed' | 'commit.created' | 'pushed' | 'subagent.spawned' | 'artifact.created' | 'task.completed' | 'checklist.created' | 'status.posted' | 'file.edited' | 'factory.command' | 'factory.action' | 'factory.uri' | 'factory.launch' | 'friction' | 'error' | 'warn' | 'info' | 'debug';
|
|
16
|
+
export type EventType = 'agent.run.start' | 'agent.run.end' | 'agent.spawn.start' | 'agent.spawn.end' | 'run.dispatched' | 'daemon.start' | 'daemon.stop' | 'daemon.error' | 'daemon.info' | 'routine.start' | 'routine.end' | 'watchdog.action' | 'version.install' | 'version.switch' | 'version.remove' | 'skill.install' | 'skill.remove' | 'browser.launch' | 'browser.close' | 'browser.navigate' | 'browser.screenshot' | 'computer.action' | 'secrets.get' | 'secrets.unlocked' | 'secrets.create' | 'secrets.import' | 'secrets.export' | 'secrets.view' | 'secrets.lease-denied' | 'secrets.lease-expire' | 'secrets.set' | 'secrets.delete' | 'secrets.rename' | 'cloud.dispatch' | 'cloud.complete' | 'cloud.cancel' | 'cloud.message' | 'teams.create' | 'teams.add' | 'teams.start' | 'teams.complete' | 'teams.disband' | 'hook.fire' | 'hook.complete' | 'hook.error' | 'mcp.add' | 'mcp.remove' | 'mcp.register' | 'resource.sync' | 'rotation.resolved' | 'command.start' | 'command.end' | 'perf.timing' | 'session.start' | 'session.end' | 'webhook.received' | 'webhook.authorized' | 'webhook.rejected' | 'webhook.matched' | 'webhook.fired' | 'webhook.handler.start' | 'webhook.handler.end' | 'plan.created' | 'pr.opened' | 'pr.merged' | 'worktree.created' | 'worktree.removed' | 'commit.created' | 'pushed' | 'subagent.spawned' | 'artifact.created' | 'task.completed' | 'checklist.created' | 'status.posted' | 'file.edited' | 'factory.command' | 'factory.action' | 'factory.uri' | 'factory.launch' | 'friction' | 'error' | 'warn' | 'info' | 'debug';
|
|
17
17
|
/** Every known event kind. Derived from {@link EVENT_TYPE_TABLE}, never hand-listed. */
|
|
18
18
|
export declare const EVENT_TYPES: readonly EventType[];
|
|
19
19
|
/** Runtime guard for an event kind arriving from outside this process. */
|
|
@@ -135,6 +135,14 @@ export declare function emit(event: EventType, payload?: EventPayload, overrides
|
|
|
135
135
|
* done({ exitCode: 0 }); // emits agent.run.end with durationMs
|
|
136
136
|
*/
|
|
137
137
|
export declare function emitStart(startEvent: EventType, payload?: EventPayload): (endPayload?: EventPayload) => void;
|
|
138
|
+
export declare function emitRoutineEnd(meta: {
|
|
139
|
+
jobName: string;
|
|
140
|
+
runId?: string;
|
|
141
|
+
status: string;
|
|
142
|
+
duration?: number;
|
|
143
|
+
exitCode?: number | null;
|
|
144
|
+
detail?: string;
|
|
145
|
+
}): void;
|
|
138
146
|
/**
|
|
139
147
|
* Measure execution time of a synchronous function.
|
|
140
148
|
* Emits a perf.timing event with the duration.
|
package/dist/lib/events.js
CHANGED
|
@@ -109,6 +109,10 @@ const FILE_MODE = 0o600;
|
|
|
109
109
|
*/
|
|
110
110
|
const EVENT_TYPE_TABLE = {
|
|
111
111
|
'agent.run.start': true, 'agent.run.end': true, 'agent.spawn.start': true, 'agent.spawn.end': true,
|
|
112
|
+
'run.dispatched': true,
|
|
113
|
+
'daemon.start': true, 'daemon.stop': true, 'daemon.error': true, 'daemon.info': true,
|
|
114
|
+
'routine.start': true, 'routine.end': true,
|
|
115
|
+
'watchdog.action': true,
|
|
112
116
|
'version.install': true, 'version.switch': true, 'version.remove': true,
|
|
113
117
|
'skill.install': true, 'skill.remove': true,
|
|
114
118
|
'browser.launch': true, 'browser.close': true, 'browser.navigate': true, 'browser.screenshot': true,
|
|
@@ -141,6 +145,7 @@ export function isEventType(value) {
|
|
|
141
145
|
}
|
|
142
146
|
const AUDIT_EVENTS = new Set([
|
|
143
147
|
'command.start', 'command.end',
|
|
148
|
+
'run.dispatched',
|
|
144
149
|
'secrets.get', 'secrets.unlocked', 'secrets.create', 'secrets.import', 'secrets.export', 'secrets.view', 'secrets.lease-denied', 'secrets.lease-expire',
|
|
145
150
|
'secrets.set', 'secrets.delete', 'secrets.rename',
|
|
146
151
|
'teams.create', 'teams.add', 'teams.start', 'teams.complete', 'teams.disband',
|
|
@@ -150,6 +155,10 @@ const AUDIT_EVENTS = new Set([
|
|
|
150
155
|
'mcp.add', 'mcp.remove', 'mcp.register',
|
|
151
156
|
'rotation.resolved',
|
|
152
157
|
'session.start', 'session.end',
|
|
158
|
+
// Daemon lifecycle (always-on process start/stop/error is audit-relevant).
|
|
159
|
+
// browser.* / computer.action stay info — they are already on the event stream;
|
|
160
|
+
// elevating them to audit would flood the security lane (see events.test.ts).
|
|
161
|
+
'daemon.start', 'daemon.stop', 'daemon.error',
|
|
153
162
|
// An external process reaching into the user's editor (the CLI's
|
|
154
163
|
// vscodium-agent backend driving `/spawn` / `/inject` / `/focus`) is a
|
|
155
164
|
// "who reached in from outside" fact, which is what the audit lane answers.
|
|
@@ -528,15 +537,21 @@ let _chmoddedPath;
|
|
|
528
537
|
export function emitStart(startEvent, payload = {}) {
|
|
529
538
|
const startTime = Date.now();
|
|
530
539
|
emit(startEvent, payload);
|
|
531
|
-
const endEvent = startEvent.replace('.start', '.end');
|
|
532
540
|
return (endPayload = {}) => {
|
|
533
|
-
emit(
|
|
534
|
-
...payload,
|
|
535
|
-
...endPayload,
|
|
536
|
-
durationMs: Date.now() - startTime,
|
|
537
|
-
});
|
|
541
|
+
emit(startEvent.replace('.start', '.end'), { ...payload, ...endPayload, durationMs: Date.now() - startTime });
|
|
538
542
|
};
|
|
539
543
|
}
|
|
544
|
+
export function emitRoutineEnd(meta) {
|
|
545
|
+
emit('routine.end', {
|
|
546
|
+
module: 'routine',
|
|
547
|
+
name: meta.jobName,
|
|
548
|
+
status: meta.status,
|
|
549
|
+
...(meta.runId ? { runId: meta.runId } : {}),
|
|
550
|
+
...(meta.duration != null ? { durationMs: meta.duration } : {}),
|
|
551
|
+
...(meta.exitCode != null ? { exitCode: meta.exitCode } : {}),
|
|
552
|
+
...(meta.detail ? { detail: meta.detail } : {}),
|
|
553
|
+
});
|
|
554
|
+
}
|
|
540
555
|
// ─── Timing Utilities ─────────────────────────────────────────────────────────
|
|
541
556
|
/**
|
|
542
557
|
* Measure execution time of a synchronous function.
|
package/dist/lib/exec.d.ts
CHANGED
|
@@ -353,6 +353,29 @@ export declare function execShimPassthrough(agent: AgentId, rawArgs: string[], c
|
|
|
353
353
|
* `[detached]` with no explanation.
|
|
354
354
|
*/
|
|
355
355
|
export declare function shouldRecapDeadPane(status: number | undefined, interactive: boolean): boolean;
|
|
356
|
+
/**
|
|
357
|
+
* The exit code a tmux-wrapped run resolves with (RUSH-2185 / EXEC-23b).
|
|
358
|
+
*
|
|
359
|
+
* Three inputs, one rule: report success ONLY for an outcome tmux actually told
|
|
360
|
+
* us about. A clean user detach (`knownAlive`) is 0; a dead pane reports the
|
|
361
|
+
* status tmux read off it; everything else — pane unreadable because the server
|
|
362
|
+
* or session went away, or dead with no status — is UNKNOWN and resolves to
|
|
363
|
+
* {@link UNKNOWN_OUTCOME_EXIT_CODE}, never 0.
|
|
364
|
+
*
|
|
365
|
+
* Why this is not `status ?? 0`: an interactive run whose tmux server died mid-
|
|
366
|
+
* work landed on exactly those unknown branches and returned 0, so `agents run`
|
|
367
|
+
* printed a failure banner while handing its caller a success code. The same
|
|
368
|
+
* "1 if unknown" rule already governs the `--host` follow path
|
|
369
|
+
* (`docs/specifications.md` §Agent execution, exit-code table).
|
|
370
|
+
*
|
|
371
|
+
* @param pane What `paneExitStatus` read back for the agent pane.
|
|
372
|
+
* @param knownAlive Positive proof the pane is still alive (see
|
|
373
|
+
* {@link isPaneKnownAliveFromQueryResult}) — a clean detach.
|
|
374
|
+
*/
|
|
375
|
+
export declare function tmuxRunExitCode(pane: {
|
|
376
|
+
dead: boolean;
|
|
377
|
+
status?: number;
|
|
378
|
+
}, knownAlive: boolean): number;
|
|
356
379
|
/**
|
|
357
380
|
* True only when a `display-message #{pane_dead}` tmux query explicitly returned
|
|
358
381
|
* "0" (pane alive). Used to distinguish "pane alive" from "query failed" in
|
|
@@ -439,6 +462,13 @@ export declare function writeTmuxEnvFile(env: NodeJS.ProcessEnv, filePath: strin
|
|
|
439
462
|
export declare function formatPaneTail(raw: string, maxLines?: number): string;
|
|
440
463
|
/** Exit code spawnAgent resolves with when a run is killed for crossing a budget cap. */
|
|
441
464
|
export declare const BUDGET_KILL_EXIT_CODE = 7;
|
|
465
|
+
/**
|
|
466
|
+
* Exit code a tmux-wrapped run resolves with when tmux cannot tell us how the
|
|
467
|
+
* agent finished — the pane is unreadable, or it is dead with no reported status
|
|
468
|
+
* (EXEC-23b). Never 0: an unknown outcome reported as success is how a run killed
|
|
469
|
+
* mid-work gets counted as a clean finish by whatever scripted it.
|
|
470
|
+
*/
|
|
471
|
+
export declare const UNKNOWN_OUTCOME_EXIT_CODE = 1;
|
|
442
472
|
/**
|
|
443
473
|
* Patterns that indicate a rate/usage limit. Matching is intentionally broad
|
|
444
474
|
* because providers phrase these differently -- Anthropic uses "5-hour limit"
|