@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,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reap the helper processes an exited agent leaves behind (RUSH-2521).
|
|
3
|
+
*
|
|
4
|
+
* ## The leak
|
|
5
|
+
*
|
|
6
|
+
* An interactive agent runs as the leaf of a detached tmux pane
|
|
7
|
+
* (`runInTmux` → `createSession`, [`../exec.ts`](../exec.ts)). Anything the
|
|
8
|
+
* harness spawns — MCP servers, background daemons, `exec` helper trees — is a
|
|
9
|
+
* child of that pane. When the agent exits, the kernel SIGHUPs the pane's
|
|
10
|
+
* FOREGROUND process group only. A helper that put itself in its own process
|
|
11
|
+
* group, or that ignores SIGHUP, survives: it reparents to init and keeps its
|
|
12
|
+
* memory forever. Measured on the fleet: one pane holding 2.5 GB of Claude Code
|
|
13
|
+
* background daemons 22 days after its session ended, and 34 orphaned
|
|
14
|
+
* `cgraph-mcp --daemon` processes on a single worker.
|
|
15
|
+
*
|
|
16
|
+
* ## Why attribution is by ENVIRONMENT, not by pid ancestry / tty / pgid
|
|
17
|
+
*
|
|
18
|
+
* Every obvious OS handle is destroyed by exactly the event we are detecting:
|
|
19
|
+
*
|
|
20
|
+
* - **ppid ancestry** — an orphan is reparented to init the instant its parent
|
|
21
|
+
* dies, so the chain back to the pane is gone.
|
|
22
|
+
* - **controlling terminal** — POSIX disassociates the controlling terminal from
|
|
23
|
+
* every process in a session when the session leader exits, so the orphan's
|
|
24
|
+
* `tty` reads `?`. Verified on Linux: an orphan under a dead pane leader shows
|
|
25
|
+
* `tty=?` while its own pane still reports `pane_tty=/dev/pts/6`.
|
|
26
|
+
* - **process group** — the helpers that survive are precisely the ones that
|
|
27
|
+
* left the pane's process group (that is why they survived the SIGHUP).
|
|
28
|
+
* - **POSIX session id** — durable and correct, but not portable: `ps -o sid=`
|
|
29
|
+
* exists on Linux and does not exist on macOS (`ps: sid: keyword not found`),
|
|
30
|
+
* `ps -o sess=` reports 0 there, and `pgrep -s` is Linux-only.
|
|
31
|
+
*
|
|
32
|
+
* What DOES survive all of it is the process environment. `runInTmux` stamps
|
|
33
|
+
* `AGENT_TMUX_SESSION_NAME` into the pane env ([`../exec.ts`](../exec.ts)), and
|
|
34
|
+
* every descendant inherits it — including a reparented one. So a process
|
|
35
|
+
* carrying `AGENT_TMUX_SESSION_NAME=<name>` is attributable to that tmux session
|
|
36
|
+
* with no heuristics at all, and tmux itself is the liveness oracle for whether
|
|
37
|
+
* that session's agent is still running.
|
|
38
|
+
*
|
|
39
|
+
* ## The second tier: harness daemons that scrub the environment
|
|
40
|
+
*
|
|
41
|
+
* Claude Code's background pool (`claude … daemon run`, which owns the
|
|
42
|
+
* `bg-pty-host` / `bg-spare` processes) starts with a clean environment, so tier
|
|
43
|
+
* one cannot see it. It does, however, declare its owner in its own argv:
|
|
44
|
+
* `daemon run --origin transient --spawned-by {"label":"claude",…,"pid":3834601}`.
|
|
45
|
+
* A pool whose declared spawner pid is dead is unowned, so it and its descendants
|
|
46
|
+
* are reaped. That rule lives in {@link DETACHED_HELPER_RULES} rather than an
|
|
47
|
+
* inline `if (agent === 'claude')`, so another harness that detaches helpers the
|
|
48
|
+
* same way is one table entry.
|
|
49
|
+
*
|
|
50
|
+
* ## Safety
|
|
51
|
+
*
|
|
52
|
+
* Nothing is killed without positive proof its owner is gone:
|
|
53
|
+
*
|
|
54
|
+
* - a tmux session that still exists AND whose agent pane process is alive
|
|
55
|
+
* protects every process it owns;
|
|
56
|
+
* - a tmux session with a client attached protects every process it owns,
|
|
57
|
+
* whatever the pane state;
|
|
58
|
+
* - the reaping process itself, its ancestors, pid 1, and every long-lived
|
|
59
|
+
* agents-cli service ({@link isProtectedAgentsService}) are never candidates.
|
|
60
|
+
* - an UNRELIABLE read of tmux's session state (the query threw, timed out, or
|
|
61
|
+
* tmux itself never answered) disables tier 1 for that sweep entirely — an
|
|
62
|
+
* absent map entry proves a session is gone only when the map is known-good.
|
|
63
|
+
* Distinguishing "tmux answered: no such session" (a completed, if nonzero,
|
|
64
|
+
* exit — genuinely nothing there) from "tmux did not answer" (a thrown
|
|
65
|
+
* error/timeout — unknown) is exactly this: a completed process is a real
|
|
66
|
+
* answer, a rejected promise is not one at all.
|
|
67
|
+
* - tier 2 is anchored on the actual claude EXECUTABLE (argv[0]'s basename),
|
|
68
|
+
* never a substring match anywhere in the command line, and excludes any
|
|
69
|
+
* process still structurally part of a LIVE pane leaf's process tree right
|
|
70
|
+
* now (tmux's own `#{pane_pid}`, expanded to its current descendants —
|
|
71
|
+
* independent of whether any of those processes' environment markers were
|
|
72
|
+
* ever readable) or that carries a marker whose own session is
|
|
73
|
+
* live/attached — a live interactive agent, OR a subprocess it spawns
|
|
74
|
+
* (e.g. its own Bash tool invoking `claude --print "…"` as a sub-task),
|
|
75
|
+
* whose argv happens to quote this file's docblock (it contains the exact
|
|
76
|
+
* `daemon run --spawned-by {"pid":...}` shape) must never become a kill
|
|
77
|
+
* seed, and that has to hold even where tier 1's marker is dead (macOS, or
|
|
78
|
+
* any `claude` invocation started outside an agents-cli pane). Two review
|
|
79
|
+
* rounds found this: first that marker-only exclusion left the whole
|
|
80
|
+
* macOS/bare-invocation case open (round 2, closed by the pane-pid check),
|
|
81
|
+
* then that the pane-pid check alone only covered the pane LEAF itself, not
|
|
82
|
+
* its own live children (round 3, closed by expanding the check to the
|
|
83
|
+
* leaf's current descendant set via {@link descendantsOf}). A process that
|
|
84
|
+
* has genuinely reparented away — a real detached daemon, no longer chained
|
|
85
|
+
* to any live leaf by ppid — is deliberately NOT in that set and remains
|
|
86
|
+
* reapable, whatever unrelated live agent happens to also be running.
|
|
87
|
+
*
|
|
88
|
+
* ## Known platform gap — tier 1 is Linux-only today
|
|
89
|
+
*
|
|
90
|
+
* Tier 1's env-marker attribution requires reading another process's
|
|
91
|
+
* environment. `/proc/<pid>/environ` makes that a plain file read on Linux.
|
|
92
|
+
* macOS has no `/proc`; `ps -E` was the fallback, but on modern macOS (verified
|
|
93
|
+
* live on mac-mini 15.6, macOS Sequoia) `ps -E` no longer prints another
|
|
94
|
+
* process's environment at all — only the CALLING process's own env shows up.
|
|
95
|
+
* `readAgentProcesses()` therefore returns every macOS process with
|
|
96
|
+
* `tmuxSession: undefined`, and tier 1's `if (!p.tmuxSession) continue` skips
|
|
97
|
+
* all of them. This is SAFE (tier 1 silently no-ops rather than misattributing
|
|
98
|
+
* anything) but not effective: on macOS, only tier 2 — the detached-helper
|
|
99
|
+
* registry — can reap anything today. A macOS fix needs a different channel
|
|
100
|
+
* entirely (env is inherently unreadable cross-process there without a native
|
|
101
|
+
* helper); it is not a parsing bug {@link parseTmuxSessionMarker} can fix.
|
|
102
|
+
*/
|
|
103
|
+
/** Grace between SIGTERM and SIGKILL for a reaped orphan. */
|
|
104
|
+
export declare const REAP_GRACE_MS = 2000;
|
|
105
|
+
/** Env var `runInTmux` stamps into the pane, inherited by every descendant. */
|
|
106
|
+
export declare const TMUX_SESSION_ENV = "AGENT_TMUX_SESSION_NAME";
|
|
107
|
+
/** One process, with the fields the reaper attributes on. */
|
|
108
|
+
export interface AgentProcess {
|
|
109
|
+
pid: number;
|
|
110
|
+
ppid: number;
|
|
111
|
+
/** Full command line (`ps -o args=`). */
|
|
112
|
+
args: string;
|
|
113
|
+
/** Value of {@link TMUX_SESSION_ENV} inherited from the pane, when present. */
|
|
114
|
+
tmuxSession?: string;
|
|
115
|
+
}
|
|
116
|
+
/** Liveness of the tmux session that owns a set of processes. */
|
|
117
|
+
export interface PaneOwner {
|
|
118
|
+
/** The session's agent pane process is still running. */
|
|
119
|
+
agentAlive: boolean;
|
|
120
|
+
/** A client is attached to the session — a human is looking at it. */
|
|
121
|
+
attached: boolean;
|
|
122
|
+
}
|
|
123
|
+
/** Why a process was selected, for human output and tests. */
|
|
124
|
+
export type OrphanReason = 'tmux-session-gone' | 'tmux-agent-exited' | 'detached-helper';
|
|
125
|
+
export interface OrphanCandidate {
|
|
126
|
+
pid: number;
|
|
127
|
+
args: string;
|
|
128
|
+
reason: OrphanReason;
|
|
129
|
+
/** Owning tmux session, when the process carried the marker. */
|
|
130
|
+
tmuxSession?: string;
|
|
131
|
+
}
|
|
132
|
+
export interface OrphanReapResult {
|
|
133
|
+
/** Processes signalled (SIGTERM, escalated to SIGKILL when they ignore it). */
|
|
134
|
+
killed: number;
|
|
135
|
+
/** One human-readable line per reaped process. */
|
|
136
|
+
details: string[];
|
|
137
|
+
/** Selected candidates, whether or not they were killed (`dryRun`). */
|
|
138
|
+
candidates: OrphanCandidate[];
|
|
139
|
+
/**
|
|
140
|
+
* Non-fatal observations worth logging — e.g. "tier 1 skipped this sweep:
|
|
141
|
+
* a tmux query failed" (see {@link selectOrphanProcesses}'s `ownersReliable`).
|
|
142
|
+
* Never gates the reap; it only explains why fewer candidates were found.
|
|
143
|
+
*/
|
|
144
|
+
warnings: string[];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* A harness that detaches helper daemons from the session environment, and the
|
|
148
|
+
* pid it records as their owner.
|
|
149
|
+
*
|
|
150
|
+
* Registry rather than per-agent branches: a second harness with the same shape
|
|
151
|
+
* is one entry, and the completeness of the table is what a reviewer checks.
|
|
152
|
+
*/
|
|
153
|
+
export interface DetachedHelperRule {
|
|
154
|
+
/** Harness id, for the reap detail line. */
|
|
155
|
+
agent: string;
|
|
156
|
+
/** Owner pid the helper declares in its own argv, or undefined when it is not this rule's process. */
|
|
157
|
+
spawnerPid(args: string): number | undefined;
|
|
158
|
+
}
|
|
159
|
+
export declare const DETACHED_HELPER_RULES: DetachedHelperRule[];
|
|
160
|
+
/**
|
|
161
|
+
* Long-lived agents-cli services that must never be reaped, even when they
|
|
162
|
+
* inherited a pane's environment because the CLI invocation that started them
|
|
163
|
+
* happened to run inside an agent pane.
|
|
164
|
+
*
|
|
165
|
+
* This is a safety invariant, not a fallback: the routines daemon runs this very
|
|
166
|
+
* reaper, so killing it would make the reaper delete its own executor, and the
|
|
167
|
+
* secrets broker holds the keychain session every live agent depends on.
|
|
168
|
+
*/
|
|
169
|
+
export declare function isProtectedAgentsService(args: string): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Pure. Select the processes whose owning agent is provably gone.
|
|
172
|
+
*
|
|
173
|
+
* `owners` maps a tmux session name to its liveness; a name ABSENT from the map
|
|
174
|
+
* is a session tmux no longer has, which is the strongest orphan signal there is
|
|
175
|
+
* — but ONLY when `owners` is itself known-complete. `opts.ownersReliable`
|
|
176
|
+
* (default `true`, so existing direct callers/tests keep their prior meaning)
|
|
177
|
+
* says whether the caller actually got a real answer from tmux for every
|
|
178
|
+
* socket it queried. When it is `false` — a query threw, timed out, or tmux
|
|
179
|
+
* itself never answered — tier 1 is skipped entirely for this call: an absent
|
|
180
|
+
* map entry proves nothing when the map itself might be missing entries for
|
|
181
|
+
* sessions tmux never got asked about (RUSH-2521 review — a flaky tick must
|
|
182
|
+
* never fall back to "treat every marked process as orphaned").
|
|
183
|
+
*/
|
|
184
|
+
export declare function selectOrphanProcesses(procs: AgentProcess[], owners: Map<string, PaneOwner>, opts: {
|
|
185
|
+
protectedPids: Set<number>;
|
|
186
|
+
isAlive?: (pid: number) => boolean;
|
|
187
|
+
ownersReliable?: boolean;
|
|
188
|
+
/**
|
|
189
|
+
* Every pane leaf pid tmux itself currently reports (see
|
|
190
|
+
* {@link parsePanePids}) — marker-independent, so it protects a live pane
|
|
191
|
+
* leaf process even when {@link TMUX_SESSION_ENV} was never readable for
|
|
192
|
+
* it (tier 1 is dead on macOS by design; a bare `claude` invocation
|
|
193
|
+
* outside an agents-cli-managed pane never carries the marker either).
|
|
194
|
+
* Without this, a live interactive agent whose OWN argv happened to
|
|
195
|
+
* quote {@link DETACHED_HELPER_RULES}'s match pattern (this file's own
|
|
196
|
+
* docblock does) could seed tier 2 the moment its marker was unreadable
|
|
197
|
+
* — the exact residual gap the executable anchor alone did not close
|
|
198
|
+
* (RUSH-2521 review, round 2).
|
|
199
|
+
*/
|
|
200
|
+
livePanePids?: Set<number>;
|
|
201
|
+
}): OrphanCandidate[];
|
|
202
|
+
/**
|
|
203
|
+
* Pure. `seeds` plus every process reachable from them through ppid links.
|
|
204
|
+
* Depth is bounded by the table size, so a ppid cycle (which the kernel cannot
|
|
205
|
+
* produce, but a malformed snapshot could) terminates.
|
|
206
|
+
*/
|
|
207
|
+
export declare function descendantsOf(procs: AgentProcess[], seeds: number[]): number[];
|
|
208
|
+
/** Pure. Parse `ps -A -o pid=,ppid=,args=` output. */
|
|
209
|
+
export declare function parseProcessRows(stdout: string): AgentProcess[];
|
|
210
|
+
/**
|
|
211
|
+
* Pure. Extract the pane marker from a blob that contains the process
|
|
212
|
+
* environment — a NUL-separated `/proc/<pid>/environ` on Linux, or the
|
|
213
|
+
* space-separated `KEY=VALUE` tail macOS `ps -E` appends after the command.
|
|
214
|
+
* Session names are `[A-Za-z0-9_-]` ({@link ../tmux/session.ts} `VALID_NAME`),
|
|
215
|
+
* so the value ends at the first character outside that set.
|
|
216
|
+
*/
|
|
217
|
+
export declare function parseTmuxSessionMarker(blob: string): string | undefined;
|
|
218
|
+
/** Pure. Parse `tmux list-panes -a -F '#{session_name}\t#{pane_pid}\t#{session_attached}'`. */
|
|
219
|
+
export declare function parsePaneOwners(stdout: string, isAlive?: (pid: number) => boolean): Map<string, PaneOwner>;
|
|
220
|
+
/**
|
|
221
|
+
* Pure. Every `#{pane_pid}` tmux reports in the same `list-panes -a` output
|
|
222
|
+
* {@link parsePaneOwners} reads — a pid tmux itself says is a pane's leaf
|
|
223
|
+
* process, independent of whether that process's OWN environment is readable.
|
|
224
|
+
*
|
|
225
|
+
* This is the marker-independent half of pane ownership: {@link parsePaneOwners}
|
|
226
|
+
* answers "is SESSION X owned" by aggregating over every pane a session has;
|
|
227
|
+
* this answers "is PID N itself a pane leaf tmux currently tracks" for exactly
|
|
228
|
+
* one candidate pid, with no dependency on {@link TMUX_SESSION_ENV} ever having
|
|
229
|
+
* been readable for it.
|
|
230
|
+
*/
|
|
231
|
+
export declare function parsePanePids(stdout: string): Set<number>;
|
|
232
|
+
/**
|
|
233
|
+
* Snapshot the process table with each process's pane marker.
|
|
234
|
+
*
|
|
235
|
+
* Two readers because no single command works on both platforms: Linux exposes
|
|
236
|
+
* `/proc/<pid>/environ` (one cheap read per pid), while macOS has no `/proc` and
|
|
237
|
+
* instead lets `ps -E` print a process's own-uid environment after its command
|
|
238
|
+
* — though on modern macOS `ps -E` no longer includes it at all (see the
|
|
239
|
+
* "Known platform gap" section in this file's docblock); tier 1 safely no-ops
|
|
240
|
+
* there rather than misattributing anything. Windows has no tmux integration
|
|
241
|
+
* at all, so it returns an empty table rather than pretending to reap.
|
|
242
|
+
*
|
|
243
|
+
* `opts.pids` restricts the `ps` snapshot to an explicit pid allowlist instead
|
|
244
|
+
* of the whole machine (`-A`) — a test-only escape hatch so a reap exercised
|
|
245
|
+
* against real spawned processes can never select or signal a real, unrelated
|
|
246
|
+
* process on a shared box (RUSH-2521 review: the integration tests previously
|
|
247
|
+
* called the machine-wide reap directly, which is safe only by construction of
|
|
248
|
+
* the fixture, not by anything the reaper itself guarantees).
|
|
249
|
+
*/
|
|
250
|
+
export declare function readAgentProcesses(opts?: {
|
|
251
|
+
pids?: number[];
|
|
252
|
+
}): Promise<AgentProcess[]>;
|
|
253
|
+
/** One socket's pane-ownership read. `ok: false` means tmux never actually answered. */
|
|
254
|
+
export interface PaneOwnersRead {
|
|
255
|
+
/**
|
|
256
|
+
* `true` when tmux completed the query (whatever its exit code — a nonzero
|
|
257
|
+
* exit from `list-panes -a` IS tmux affirmatively answering "no server /
|
|
258
|
+
* no sessions here", a real and trustworthy empty result). `false` means the
|
|
259
|
+
* query never got that far: a thrown error, a timeout, or a missing/wrong
|
|
260
|
+
* tmux — in which case `owners` carries no information and must not be
|
|
261
|
+
* trusted as "no sessions".
|
|
262
|
+
*/
|
|
263
|
+
ok: boolean;
|
|
264
|
+
owners: Map<string, PaneOwner>;
|
|
265
|
+
/** Every pane leaf pid tmux reported, marker-independent (see {@link parsePanePids}). */
|
|
266
|
+
panePids: Set<number>;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Read one tmux socket's session-ownership state.
|
|
270
|
+
*
|
|
271
|
+
* Distinguishes "tmux answered: nothing here" from "tmux did not answer" —
|
|
272
|
+
* the two were previously conflated (`.catch(() => null)` then `!res` folded
|
|
273
|
+
* into the same empty-map return as a clean nonzero exit), which meant a
|
|
274
|
+
* missing/wrong-version tmux, a spawn failure, or a wedged server were
|
|
275
|
+
* indistinguishable from a genuinely empty box. A completed process — even a
|
|
276
|
+
* nonzero exit — is a real answer; a rejected promise is not an answer at all
|
|
277
|
+
* (RUSH-2521 review).
|
|
278
|
+
*/
|
|
279
|
+
export declare function readPaneOwners(socket: string): Promise<PaneOwnersRead>;
|
|
280
|
+
/**
|
|
281
|
+
* Reap every helper process whose owning agent has exited.
|
|
282
|
+
*
|
|
283
|
+
* Called from the daemon's periodic tick and from `agents sessions reap`. Panes
|
|
284
|
+
* are read BEFORE processes so a session that disappears mid-scan is treated as
|
|
285
|
+
* gone (reapable) rather than as a live owner.
|
|
286
|
+
*
|
|
287
|
+
* `opts.pids` is the test-only process-table scope described on
|
|
288
|
+
* {@link readAgentProcesses} — never set by production callers.
|
|
289
|
+
*/
|
|
290
|
+
export declare function reapOrphanAgentProcesses(opts?: {
|
|
291
|
+
socket: string;
|
|
292
|
+
dryRun?: boolean;
|
|
293
|
+
graceMs?: number;
|
|
294
|
+
pids?: number[];
|
|
295
|
+
}): Promise<OrphanReapResult>;
|
|
296
|
+
/**
|
|
297
|
+
* Reap the helper processes belonging to ONE tmux session, on the teardown path.
|
|
298
|
+
*
|
|
299
|
+
* `killSession` calls this so an agent's helpers die with the session that owned
|
|
300
|
+
* them instead of waiting for the next daemon tick. The tmux session is being
|
|
301
|
+
* destroyed by the caller, so ownership needs no liveness check — anything still
|
|
302
|
+
* carrying this session's marker is leftover by definition, PROVIDED the name
|
|
303
|
+
* is unique to the socket in play.
|
|
304
|
+
*
|
|
305
|
+
* `socket` narrows that: a session name is only unique WITHIN one tmux server,
|
|
306
|
+
* so the exact same marker value could legitimately belong to a live, unrelated
|
|
307
|
+
* session on a DIFFERENT socket (e.g. the shared agents socket vs. a test's own
|
|
308
|
+
* temp socket). When `socket` names a non-default socket, this checks the
|
|
309
|
+
* default agents socket for a live/attached session of the same name and backs
|
|
310
|
+
* off entirely if one exists — the caller is tearing down one session, not a
|
|
311
|
+
* same-named one it does not own.
|
|
312
|
+
*
|
|
313
|
+
* `opts.pids` is the test-only process-table scope described on
|
|
314
|
+
* {@link readAgentProcesses} — never set by production callers.
|
|
315
|
+
*/
|
|
316
|
+
export declare function reapProcessesForTmuxSession(name: string, socket?: string, opts?: {
|
|
317
|
+
dryRun?: boolean;
|
|
318
|
+
graceMs?: number;
|
|
319
|
+
pids?: number[];
|
|
320
|
+
}): Promise<OrphanReapResult>;
|