@phnx-labs/agents-cli 1.22.35 → 1.22.38
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 +708 -2
- package/README.md +83 -43
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1212 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/artifacts-setup.d.ts +53 -0
- package/dist/commands/artifacts-setup.js +161 -0
- package/dist/commands/artifacts.d.ts +18 -0
- package/dist/commands/artifacts.js +58 -0
- 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 +17 -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 +86 -42
- 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 +71 -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/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.d.ts +5 -0
- package/dist/commands/setup.js +31 -5
- package/dist/commands/share.d.ts +87 -7
- package/dist/commands/share.js +320 -58
- 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/hygiene.d.ts +90 -0
- package/dist/lib/browser/hygiene.js +146 -0
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +93 -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 +79 -1
- package/dist/lib/browser/service.js +231 -14
- 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 +63 -1
- 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 +21 -7
- package/dist/lib/git.js +122 -18
- 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 +44 -7
- 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/analytics.js +1 -1
- package/dist/lib/share/capture.d.ts +1 -1
- package/dist/lib/share/capture.js +3 -3
- package/dist/lib/share/config.d.ts +6 -2
- package/dist/lib/share/config.js +6 -5
- package/dist/lib/share/delete.js +3 -3
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +51 -1
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +119 -6
- package/dist/lib/share/worker-template.d.ts +12 -1
- package/dist/lib/share/worker-template.js +83 -7
- 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 +16 -14
- package/dist/lib/startup/command-registry.js +26 -37
- 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 +316 -0
- package/dist/lib/tmux/orphan-reap.js +638 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +96 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +16 -1
- package/dist/lib/triggers/webhook.js +10 -0
- package/dist/lib/types.d.ts +47 -35
- 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/set.d.ts +0 -15
- package/dist/commands/set.js +0 -79
- package/dist/commands/setup-share.d.ts +0 -17
- package/dist/commands/setup-share.js +0 -85
- 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
package/dist/commands/doctor.js
CHANGED
|
@@ -38,7 +38,12 @@ import { auditWindowsSshEnrollment, diagnoseWindowsSshFailure } from '../lib/dev
|
|
|
38
38
|
import { scanUserRcFiles, masterPassphraseInEnv } from '../lib/secrets/rc-hygiene.js';
|
|
39
39
|
import { terminalWidth, truncateToWidth, stringWidth, padToWidth } from '../lib/session/width.js';
|
|
40
40
|
import { readRepoBehindMarkers } from '../lib/auto-pull.js';
|
|
41
|
+
import { detectAgentsBinaryShadows } from '../lib/binary-shadow.js';
|
|
42
|
+
import { remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, } from '../lib/self-update.js';
|
|
41
43
|
import * as fs from 'fs';
|
|
44
|
+
import * as path from 'path';
|
|
45
|
+
import { fileURLToPath } from 'url';
|
|
46
|
+
const __doctorDirname = path.dirname(fileURLToPath(import.meta.url));
|
|
42
47
|
const AGENT_NAMES = Object.fromEntries(ALL_AGENT_IDS.map((id) => [id, AGENTS[id].name]));
|
|
43
48
|
// ─── overview mode (no target) ────────────────────────────────────────────────
|
|
44
49
|
function collapseWhitespace(s) {
|
|
@@ -450,6 +455,7 @@ async function runDevicesDoctor(opts) {
|
|
|
450
455
|
// Can the owner-delivery lane escalate a block from THIS box? Local only —
|
|
451
456
|
// remote boxes self-report it in their own `agents doctor --json`.
|
|
452
457
|
ownerSink: await probeOwnerSink(readMeta()),
|
|
458
|
+
binaryShadows: detectAgentsBinaryShadows(),
|
|
453
459
|
}));
|
|
454
460
|
accounts[localName] = r.inventory?.signIn ?? {};
|
|
455
461
|
continue;
|
|
@@ -1160,6 +1166,40 @@ function renderHookRuntimeRepairText(repair) {
|
|
|
1160
1166
|
console.log(` ${chalk.red('hold ')} ${chalk.gray(unresolved)}`);
|
|
1161
1167
|
}
|
|
1162
1168
|
}
|
|
1169
|
+
/**
|
|
1170
|
+
* RUSH-2415: delete npx-cache / unsafe-legacy / pre-1.22.30 agents-cli copies
|
|
1171
|
+
* when a fixed peer already exists. Bare `doctor --fix` is the remediation
|
|
1172
|
+
* surface the multi-install warning points at; a targeted
|
|
1173
|
+
* `doctor <agent>@<version> --fix` only heals that version home and must not
|
|
1174
|
+
* touch other CLI installs on the box.
|
|
1175
|
+
*/
|
|
1176
|
+
function purgeStaleAgentsCliCopies(_opts) {
|
|
1177
|
+
let runningRoot;
|
|
1178
|
+
try {
|
|
1179
|
+
// dist/commands/doctor.js (or src/commands/doctor.ts under vitest) —
|
|
1180
|
+
// resolveRunningPackageRoot walks up until package.json names this package.
|
|
1181
|
+
runningRoot = resolveRunningPackageRoot(__doctorDirname);
|
|
1182
|
+
}
|
|
1183
|
+
catch {
|
|
1184
|
+
return null;
|
|
1185
|
+
}
|
|
1186
|
+
return remediateStaleAgentsCliInstalls({
|
|
1187
|
+
runningRoot,
|
|
1188
|
+
runningVersion: getCliVersion(),
|
|
1189
|
+
});
|
|
1190
|
+
}
|
|
1191
|
+
function renderStaleInstallPurgeText(purge) {
|
|
1192
|
+
if (purge.removed.length === 0 && purge.failed.length === 0)
|
|
1193
|
+
return;
|
|
1194
|
+
console.log(chalk.bold('\nStale agents-cli installs'));
|
|
1195
|
+
for (const r of purge.removed) {
|
|
1196
|
+
const why = r.reasons.join(', ');
|
|
1197
|
+
console.log(` ${chalk.green('purged')} ${chalk.gray(`${r.packageRoot} ${r.version} (${why})`)}`);
|
|
1198
|
+
}
|
|
1199
|
+
for (const f of purge.failed) {
|
|
1200
|
+
console.log(` ${chalk.red('hold ')} ${chalk.gray(`${f.packageRoot} ${f.version} — ${f.error}`)}`);
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1163
1203
|
async function runFix(parsed, opts) {
|
|
1164
1204
|
// Heal targets the global install — project layer is irrelevant, so cwd is
|
|
1165
1205
|
// left to heal's neutral default rather than process.cwd().
|
|
@@ -1180,23 +1220,41 @@ async function runFix(parsed, opts) {
|
|
|
1180
1220
|
// repair have settled. This routine never calls sync/register and never
|
|
1181
1221
|
// retries; unresolved wrappers remain an explicit non-zero doctor outcome.
|
|
1182
1222
|
const hookRuntimeRepair = repairManagedHookRuntimeArtifacts({ filter: runtimeRepairFilter(parsed) });
|
|
1223
|
+
// Bare doctor --fix also purges latent pre-fix / legacy agents-cli copies
|
|
1224
|
+
// that only warn today (RUSH-2415). A scoped agent@version fix leaves them
|
|
1225
|
+
// alone — the multi-install surface is machine-wide, not per-agent.
|
|
1226
|
+
const staleInstallPurge = parsed === null ? purgeStaleAgentsCliCopies(opts) : null;
|
|
1183
1227
|
const rewireFailed = rewired.some((entry) => entry.failure !== undefined);
|
|
1184
1228
|
if (healChangedAnything(result) ||
|
|
1185
1229
|
rewired.some((entry) => entry.rewired > 0 || entry.remaining > 0 || entry.failure !== undefined) ||
|
|
1186
|
-
hookRuntimeRepair.attempts.length > 0
|
|
1230
|
+
hookRuntimeRepair.attempts.length > 0 ||
|
|
1231
|
+
(staleInstallPurge !== null && (staleInstallPurge.removed.length > 0 || staleInstallPurge.failed.length > 0))) {
|
|
1187
1232
|
invalidateDoctorOverviewCache();
|
|
1188
1233
|
}
|
|
1189
1234
|
if (opts.json) {
|
|
1190
|
-
console.log(JSON.stringify({
|
|
1191
|
-
|
|
1235
|
+
console.log(JSON.stringify({
|
|
1236
|
+
...result,
|
|
1237
|
+
hookRewire: rewired,
|
|
1238
|
+
hookRuntimeRepair,
|
|
1239
|
+
...(staleInstallPurge ? { staleInstallPurge } : {}),
|
|
1240
|
+
}, null, 2));
|
|
1241
|
+
if (rewireFailed
|
|
1242
|
+
|| hookRuntimeRepair.needsAttention.length > 0
|
|
1243
|
+
|| (staleInstallPurge !== null && staleInstallPurge.failed.length > 0)) {
|
|
1192
1244
|
process.exitCode = 1;
|
|
1245
|
+
}
|
|
1193
1246
|
return;
|
|
1194
1247
|
}
|
|
1195
1248
|
renderHealText(result);
|
|
1196
1249
|
renderHookRewireText(rewired);
|
|
1197
1250
|
renderHookRuntimeRepairText(hookRuntimeRepair);
|
|
1198
|
-
if (
|
|
1251
|
+
if (staleInstallPurge)
|
|
1252
|
+
renderStaleInstallPurgeText(staleInstallPurge);
|
|
1253
|
+
if (rewireFailed
|
|
1254
|
+
|| hookRuntimeRepair.needsAttention.length > 0
|
|
1255
|
+
|| (staleInstallPurge !== null && staleInstallPurge.failed.length > 0)) {
|
|
1199
1256
|
process.exitCode = 1;
|
|
1257
|
+
}
|
|
1200
1258
|
}
|
|
1201
1259
|
function checkLabel(row) {
|
|
1202
1260
|
return `${AGENT_NAMES[row.agent] || row.agent}@${row.version}`;
|
|
@@ -1374,7 +1432,7 @@ export function registerDoctorCommand(program) {
|
|
|
1374
1432
|
.description('Diagnose CLI availability, sync status, and resource divergence (optionally for a specific agent[@version]).')
|
|
1375
1433
|
.option('--json', 'Output machine-readable JSON')
|
|
1376
1434
|
.option('--diff', 'In target mode, include unified diffs for divergent files')
|
|
1377
|
-
.option('--fix', 'Heal gaps: install missing resources, repair invalid plugin manifests, refresh stale plugins,
|
|
1435
|
+
.option('--fix', 'Heal gaps: install missing resources, repair invalid plugin manifests, refresh stale plugins, reconcile drift, and purge stale/legacy agents-cli installs (npx-cache, pre-1.22.30, unsafe helper installer) when a fixed peer exists')
|
|
1378
1436
|
.option('--kind <kinds>', 'Restrict to comma-separated resource kinds (commands,skills,hooks,rules,mcp,permissions,subagents,plugins,promptcuts)')
|
|
1379
1437
|
.option('--cwd <path>', 'Resolution cwd for project layer detection (default: process.cwd())')
|
|
1380
1438
|
.option('--adopt <agent>', "Take over the agent's native launcher that shadows the shim (symlink it to the version-managed shim; reversible with --release)")
|
|
@@ -1591,6 +1649,7 @@ export function registerDoctorCommand(program) {
|
|
|
1591
1649
|
.map((r) => `${r.agent}@${r.version}`);
|
|
1592
1650
|
const findings = buildLocalFindings({
|
|
1593
1651
|
device: localName,
|
|
1652
|
+
binaryShadows: detectAgentsBinaryShadows(),
|
|
1594
1653
|
syncRows,
|
|
1595
1654
|
orphanRows,
|
|
1596
1655
|
repoBehind: repoBehindMarkers,
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agents events` — read the unified event stream.
|
|
2
|
+
* `agents events` — read the unified event stream (the one ops/timeline product).
|
|
3
3
|
*
|
|
4
|
-
* One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
|
|
5
|
-
* `agents <module> <cmd>` invocation plus typed events like secrets access,
|
|
6
|
-
* version installs) AND agent-semantic events
|
|
7
|
-
* plans, PRs, worktrees, sub-agents, artifacts).
|
|
8
|
-
*
|
|
9
|
-
* created a team" AND the activity trail for "what did the agents just do".
|
|
4
|
+
* One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
|
|
5
|
+
* every `agents <module> <cmd>` invocation plus typed events like secrets access,
|
|
6
|
+
* browser/computer, daemon lifecycle, version installs) AND agent-semantic events
|
|
7
|
+
* (per-session activity: plans, PRs, worktrees, sub-agents, artifacts). Run-dispatch
|
|
8
|
+
* outcomes land here as `run.dispatched` (readable via `--include runs`).
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* `agents audit` and `agents logs` are thin aliases of this command.
|
|
11
|
+
*
|
|
12
|
+
* Filter with sessions-style `--include` / `--exclude` families (ops, activity,
|
|
13
|
+
* commands, runs, security) plus field filters (`--module`, `--event`, …).
|
|
15
14
|
*/
|
|
16
15
|
import type { Command } from 'commander';
|
|
17
16
|
/**
|
|
@@ -43,10 +42,23 @@ export interface EventsOptions {
|
|
|
43
42
|
limit?: string;
|
|
44
43
|
json?: boolean;
|
|
45
44
|
follow?: boolean;
|
|
45
|
+
/** @deprecated Prefer --include ops / --exclude activity */
|
|
46
46
|
audit?: boolean;
|
|
47
|
+
include?: string;
|
|
48
|
+
exclude?: string;
|
|
47
49
|
}
|
|
48
50
|
/** Add the one canonical event-reader option surface to a command or alias. */
|
|
49
51
|
export declare function addEventsReadOptions(command: Command, includeAuditFlag?: boolean): Command;
|
|
50
|
-
/** Canonical reader used by
|
|
52
|
+
/** Canonical reader used by `agents events`, `agents audit`, and `agents logs`. */
|
|
51
53
|
export declare function runEventsCommand(options: EventsOptions, forceAudit?: boolean): Promise<void>;
|
|
54
|
+
/** Shared by `events stats` and the `logs stats` alias. */
|
|
55
|
+
export declare function runEventsStats(opts: {
|
|
56
|
+
since?: string;
|
|
57
|
+
json?: boolean;
|
|
58
|
+
}): Promise<void>;
|
|
52
59
|
export declare function registerEventsCommand(program: Command): void;
|
|
60
|
+
/** Shared by `events rotate` and the `logs rotate` alias. */
|
|
61
|
+
export declare function runEventsRotate(opts: {
|
|
62
|
+
days?: string;
|
|
63
|
+
maxMb?: string;
|
|
64
|
+
}): void;
|
package/dist/commands/events.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agents events` — read the unified event stream.
|
|
2
|
+
* `agents events` — read the unified event stream (the one ops/timeline product).
|
|
3
3
|
*
|
|
4
|
-
* One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
|
|
5
|
-
* `agents <module> <cmd>` invocation plus typed events like secrets access,
|
|
6
|
-
* version installs) AND agent-semantic events
|
|
7
|
-
* plans, PRs, worktrees, sub-agents, artifacts).
|
|
8
|
-
*
|
|
9
|
-
* created a team" AND the activity trail for "what did the agents just do".
|
|
4
|
+
* One stream over BOTH operational events (`~/.agents/.history/events/YYYY-MM-DD/`:
|
|
5
|
+
* every `agents <module> <cmd>` invocation plus typed events like secrets access,
|
|
6
|
+
* browser/computer, daemon lifecycle, version installs) AND agent-semantic events
|
|
7
|
+
* (per-session activity: plans, PRs, worktrees, sub-agents, artifacts). Run-dispatch
|
|
8
|
+
* outcomes land here as `run.dispatched` (readable via `--include runs`).
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* `agents audit` and `agents logs` are thin aliases of this command.
|
|
11
|
+
*
|
|
12
|
+
* Filter with sessions-style `--include` / `--exclude` families (ops, activity,
|
|
13
|
+
* commands, runs, security) plus field filters (`--module`, `--event`, …).
|
|
15
14
|
*/
|
|
16
15
|
import chalk from 'chalk';
|
|
17
16
|
import * as fs from 'fs';
|
|
18
|
-
import { getLogsPath } from '../lib/events.js';
|
|
17
|
+
import { getLogsPath, stats, rotate } from '../lib/events.js';
|
|
19
18
|
import { readUnifiedEvents } from '../lib/event-stream.js';
|
|
19
|
+
import { parseFamilyList, EVENT_FAMILIES } from '../lib/event-families.js';
|
|
20
20
|
import { ingestBatch } from '../lib/events-ingest.js';
|
|
21
21
|
import { setHelpSections } from '../lib/help.js';
|
|
22
22
|
/**
|
|
@@ -86,6 +86,15 @@ function detailFor(r) {
|
|
|
86
86
|
bits.push(`skill=${r.skill}`);
|
|
87
87
|
if (typeof r.version === 'string')
|
|
88
88
|
bits.push(`v=${r.version}`);
|
|
89
|
+
// run.dispatched (and similar) — mode / outcome / exit / repo are the audit line.
|
|
90
|
+
if (typeof r.mode === 'string')
|
|
91
|
+
bits.push(`mode=${r.mode}`);
|
|
92
|
+
if (typeof r.outcome === 'string')
|
|
93
|
+
bits.push(`outcome=${r.outcome}`);
|
|
94
|
+
if (typeof r.exitCode === 'number')
|
|
95
|
+
bits.push(`exit=${r.exitCode}`);
|
|
96
|
+
if (typeof r.repo === 'string')
|
|
97
|
+
bits.push(chalk.gray(r.repo));
|
|
89
98
|
if (typeof r.profile === 'string')
|
|
90
99
|
bits.push(`profile=${r.profile}`);
|
|
91
100
|
if (typeof r.error === 'string')
|
|
@@ -187,9 +196,11 @@ function registerEmitSubcommand(events) {
|
|
|
187
196
|
/** Add the one canonical event-reader option surface to a command or alias. */
|
|
188
197
|
export function addEventsReadOptions(command, includeAuditFlag = true) {
|
|
189
198
|
command
|
|
190
|
-
.option('--
|
|
199
|
+
.option('--include <families>', `Only these families (comma-sep): ${EVENT_FAMILIES.join(', ')}`)
|
|
200
|
+
.option('--exclude <families>', `Drop these families (comma-sep): ${EVENT_FAMILIES.join(', ')}`)
|
|
201
|
+
.option('--module <name>', 'Only events from this group (e.g. teams, secrets, activity, daemon, routine, watchdog, browser)')
|
|
191
202
|
.option('--command <path>', 'Only this command path — prefix match (e.g. "teams create")')
|
|
192
|
-
.option('--event <type>', 'Only this typed event (repeatable, e.g. secrets.get,
|
|
203
|
+
.option('--event <type>', 'Only this typed event (repeatable, e.g. secrets.get, run.dispatched, pr.opened)', collect, [])
|
|
193
204
|
.option('--agent <name>', 'Only events tagged with this agent')
|
|
194
205
|
.option('--caller <kind>', 'Only this caller kind (claude-code, codex, gemini, cursor, terminal, script)')
|
|
195
206
|
.option('--level <level>', 'Only this level: audit, warn, info, debug')
|
|
@@ -199,11 +210,12 @@ export function addEventsReadOptions(command, includeAuditFlag = true) {
|
|
|
199
210
|
.option('--limit <n>', 'Max records to show; 0 for no cap (default 50)', '50')
|
|
200
211
|
.option('--json', 'Output raw records as JSON')
|
|
201
212
|
.option('-f, --follow', "Tail today's operational log live");
|
|
202
|
-
if (includeAuditFlag)
|
|
203
|
-
command.option('--audit', '
|
|
213
|
+
if (includeAuditFlag) {
|
|
214
|
+
command.option('--audit', 'Deprecated: operational events only — prefer --include ops or --exclude activity');
|
|
215
|
+
}
|
|
204
216
|
return command;
|
|
205
217
|
}
|
|
206
|
-
/** Canonical reader used by
|
|
218
|
+
/** Canonical reader used by `agents events`, `agents audit`, and `agents logs`. */
|
|
207
219
|
export async function runEventsCommand(options, forceAudit = false) {
|
|
208
220
|
if (options.follow) {
|
|
209
221
|
await followLog();
|
|
@@ -211,15 +223,29 @@ export async function runEventsCommand(options, forceAudit = false) {
|
|
|
211
223
|
}
|
|
212
224
|
let limit;
|
|
213
225
|
let startDate;
|
|
226
|
+
let includeFamilies;
|
|
227
|
+
let excludeFamilies;
|
|
214
228
|
try {
|
|
215
229
|
limit = resolveEventsLimit(options.limit);
|
|
216
230
|
startDate = options.since ? parseSince(options.since) : undefined;
|
|
231
|
+
if (options.include && options.exclude) {
|
|
232
|
+
throw new Error('--include and --exclude are mutually exclusive');
|
|
233
|
+
}
|
|
234
|
+
if (options.include)
|
|
235
|
+
includeFamilies = parseFamilyList(options.include, '--include');
|
|
236
|
+
if (options.exclude)
|
|
237
|
+
excludeFamilies = parseFamilyList(options.exclude, '--exclude');
|
|
217
238
|
}
|
|
218
239
|
catch (err) {
|
|
219
240
|
console.error(chalk.red(err.message));
|
|
220
241
|
process.exitCode = 2;
|
|
221
242
|
return;
|
|
222
243
|
}
|
|
244
|
+
// --audit / forceAudit = ops-only when no family flags. Families own the
|
|
245
|
+
// source selection via applyFamilies — never override includeActivity after.
|
|
246
|
+
const includeActivity = (includeFamilies !== undefined || excludeFamilies !== undefined)
|
|
247
|
+
? true
|
|
248
|
+
: !(forceAudit || options.audit);
|
|
223
249
|
const fetched = readUnifiedEvents({
|
|
224
250
|
startDate,
|
|
225
251
|
eventTypes: options.event && options.event.length ? options.event : undefined,
|
|
@@ -231,7 +257,9 @@ export async function runEventsCommand(options, forceAudit = false) {
|
|
|
231
257
|
command: options.command,
|
|
232
258
|
module: options.module,
|
|
233
259
|
limit: limit === undefined ? undefined : limit + 1,
|
|
234
|
-
includeActivity
|
|
260
|
+
includeActivity,
|
|
261
|
+
includeFamilies,
|
|
262
|
+
excludeFamilies,
|
|
235
263
|
});
|
|
236
264
|
const { records, truncated } = capRecords(fetched, limit);
|
|
237
265
|
const capNote = `Showing the newest ${limit} — more events matched. Pass --limit 0 for all.`;
|
|
@@ -251,29 +279,117 @@ export async function runEventsCommand(options, forceAudit = false) {
|
|
|
251
279
|
if (truncated)
|
|
252
280
|
console.log(chalk.yellow(capNote));
|
|
253
281
|
}
|
|
282
|
+
function humanBytes(bytes) {
|
|
283
|
+
if (bytes < 1024)
|
|
284
|
+
return `${bytes} B`;
|
|
285
|
+
if (bytes < 1024 * 1024)
|
|
286
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
287
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
288
|
+
}
|
|
289
|
+
function levelColor(level) {
|
|
290
|
+
if (level === 'audit')
|
|
291
|
+
return chalk.magenta(level);
|
|
292
|
+
if (level === 'warn')
|
|
293
|
+
return chalk.yellow(level);
|
|
294
|
+
if (level === 'debug')
|
|
295
|
+
return chalk.gray(level);
|
|
296
|
+
return chalk.blue(level);
|
|
297
|
+
}
|
|
298
|
+
/** Shared by `events stats` and the `logs stats` alias. */
|
|
299
|
+
export async function runEventsStats(opts) {
|
|
300
|
+
let days = 7;
|
|
301
|
+
if (opts.since) {
|
|
302
|
+
try {
|
|
303
|
+
const d = parseSince(opts.since);
|
|
304
|
+
days = Math.max(1, Math.ceil((Date.now() - d.getTime()) / 86_400_000));
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
console.error(chalk.red(err.message));
|
|
308
|
+
process.exitCode = 2;
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
const s = stats({ days });
|
|
313
|
+
if (opts.json) {
|
|
314
|
+
console.log(JSON.stringify(s, null, 2));
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
console.log(chalk.bold(`Event statistics (last ${days} day${days === 1 ? '' : 's'})\n`));
|
|
318
|
+
console.log(` Total events: ${s.totalEvents}`);
|
|
319
|
+
console.log(` Log files: ${s.fileCount} (${humanBytes(s.totalBytes)})`);
|
|
320
|
+
console.log(` Log path: ${chalk.gray(getLogsPath())}`);
|
|
321
|
+
if (Object.keys(s.byLevel).length) {
|
|
322
|
+
console.log(chalk.bold('\n By level:'));
|
|
323
|
+
for (const [k, v] of Object.entries(s.byLevel).sort((a, b) => b[1] - a[1])) {
|
|
324
|
+
console.log(` ${levelColor(k).padEnd(20)} ${v}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (Object.keys(s.byEvent).length) {
|
|
328
|
+
console.log(chalk.bold('\n By event (top 15):'));
|
|
329
|
+
for (const [k, v] of Object.entries(s.byEvent).sort((a, b) => b[1] - a[1]).slice(0, 15)) {
|
|
330
|
+
console.log(` ${chalk.cyan(k).padEnd(30)} ${v}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (Object.keys(s.byModule).length) {
|
|
334
|
+
console.log(chalk.bold('\n By module:'));
|
|
335
|
+
for (const [k, v] of Object.entries(s.byModule).sort((a, b) => b[1] - a[1])) {
|
|
336
|
+
console.log(` ${k.padEnd(20)} ${v}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
console.log();
|
|
340
|
+
}
|
|
254
341
|
export function registerEventsCommand(program) {
|
|
255
342
|
const events = addEventsReadOptions(program
|
|
256
343
|
.command('events')
|
|
257
|
-
.description('Read the unified event stream (
|
|
344
|
+
.description('Read the unified event stream (ops + activity + run dispatch)'))
|
|
258
345
|
.addHelpText('after', `
|
|
259
346
|
Examples:
|
|
260
347
|
agents events Everything — ops + agent activity
|
|
261
|
-
agents events --
|
|
262
|
-
agents events --
|
|
263
|
-
agents events --
|
|
348
|
+
agents events --exclude commands Drop CLI command.start/end noise
|
|
349
|
+
agents events --include runs Dispatched-run outcomes (was audit list)
|
|
350
|
+
agents events --include activity Agent milestones only
|
|
351
|
+
agents events --include ops Operational events only
|
|
352
|
+
agents events --include security Audit-level (secrets, command.*, daemon, …)
|
|
264
353
|
agents events --module secrets Every secret accessed or revealed
|
|
265
354
|
agents events --module secrets --bundle share
|
|
266
|
-
|
|
267
|
-
agents events --bundle share --session <id>
|
|
268
|
-
Trace one session's reads of a bundle
|
|
355
|
+
agents events --event pr.opened --since 7d
|
|
269
356
|
agents events -f Live tail (operational)
|
|
270
|
-
agents events
|
|
271
|
-
|
|
272
|
-
|
|
357
|
+
agents events stats
|
|
358
|
+
agents events rotate --days 7
|
|
359
|
+
|
|
360
|
+
agents audit Alias of: events --include runs
|
|
361
|
+
agents logs Alias of: events`)
|
|
273
362
|
.action((_options, command) => runEventsCommand(command.optsWithGlobals()));
|
|
274
363
|
// `events` both reads (its own action, above) and writes (this subcommand) —
|
|
275
364
|
// the same shape as `feed` / `feed post`.
|
|
276
365
|
registerEmitSubcommand(events);
|
|
366
|
+
events
|
|
367
|
+
.command('stats')
|
|
368
|
+
.description('Show aggregate event statistics')
|
|
369
|
+
.option('--since <time>', 'Window size (e.g. 7d, 30d; default 7d)')
|
|
370
|
+
.option('--json', 'Output stats as JSON')
|
|
371
|
+
.action(async (opts) => runEventsStats(opts));
|
|
372
|
+
events
|
|
373
|
+
.command('rotate')
|
|
374
|
+
.description('Apply event retention and the storage ceiling immediately')
|
|
375
|
+
.option('--days <n>', 'Retention period in days (default 7)', '7')
|
|
376
|
+
.option('--max-mb <n>', 'Total event storage ceiling in MiB (default 50)', '50')
|
|
377
|
+
.action((opts) => runEventsRotate(opts));
|
|
378
|
+
}
|
|
379
|
+
/** Shared by `events rotate` and the `logs rotate` alias. */
|
|
380
|
+
export function runEventsRotate(opts) {
|
|
381
|
+
const days = Math.max(1, parseInt(opts.days ?? '7', 10) || 7);
|
|
382
|
+
const maxMb = Math.max(1, parseInt(opts.maxMb ?? '50', 10) || 50);
|
|
383
|
+
const result = rotate(days, maxMb * 1024 * 1024);
|
|
384
|
+
const removed = result.removedByAge + result.removedBySize;
|
|
385
|
+
if (removed > 0) {
|
|
386
|
+
console.log(`Removed ${removed} event file${removed === 1 ? '' : 's'} ` +
|
|
387
|
+
`(${result.removedByAge} by age, ${result.removedBySize} by size); ` +
|
|
388
|
+
`reclaimed ${humanBytes(result.bytesReclaimed)}.`);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
console.log(chalk.gray(`No event files removed (retention ${days} days, ceiling ${maxMb} MiB).`));
|
|
392
|
+
}
|
|
277
393
|
}
|
|
278
394
|
/** commander repeatable-option collector. */
|
|
279
395
|
function collect(value, previous) {
|