@phnx-labs/agents-cli 1.22.120 → 1.22.121
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 +227 -0
- package/README.md +19 -2
- package/dist/bootstrap.d.ts +0 -15
- package/dist/bootstrap.js +10 -409
- package/dist/cli/command-registry.d.ts +0 -58
- package/dist/cli/command-registry.js +2 -74
- package/dist/commands/accounts.d.ts +0 -17
- package/dist/commands/accounts.js +1 -52
- package/dist/commands/alias.d.ts +0 -12
- package/dist/commands/alias.js +0 -6
- package/dist/commands/apply.d.ts +0 -15
- package/dist/commands/apply.js +0 -63
- package/dist/commands/audit.d.ts +0 -12
- package/dist/commands/audit.js +0 -13
- package/dist/commands/auth.js +4 -12
- package/dist/commands/beta.d.ts +0 -6
- package/dist/commands/beta.js +2 -6
- package/dist/commands/browser-sessions-picker.d.ts +0 -8
- package/dist/commands/browser-sessions-picker.js +0 -26
- package/dist/commands/browser.d.ts +0 -57
- package/dist/commands/browser.js +0 -80
- package/dist/commands/budget.d.ts +0 -13
- package/dist/commands/budget.js +0 -2
- package/dist/commands/cli.d.ts +0 -12
- package/dist/commands/cli.js +0 -4
- package/dist/commands/cloud.d.ts +0 -9
- package/dist/commands/cloud.js +0 -43
- package/dist/commands/commands.d.ts +0 -9
- package/dist/commands/commands.js +0 -18
- package/dist/commands/computer-sessions-picker.d.ts +0 -11
- package/dist/commands/computer-sessions-picker.js +0 -29
- package/dist/commands/computer.d.ts +0 -62
- package/dist/commands/computer.js +3 -114
- package/dist/commands/config.d.ts +0 -14
- package/dist/commands/config.js +21 -60
- package/dist/commands/cost.d.ts +0 -11
- package/dist/commands/cost.js +1 -17
- package/dist/commands/daemon-test-harness.d.ts +0 -32
- package/dist/commands/daemon-test-harness.js +1 -36
- package/dist/commands/daemon.d.ts +0 -46
- package/dist/commands/daemon.js +8 -255
- package/dist/commands/detach-core.d.ts +0 -28
- package/dist/commands/detach-core.js +0 -30
- package/dist/commands/detach.d.ts +1 -12
- package/dist/commands/detach.js +16 -52
- package/dist/commands/device-config-test-harness.js +0 -12
- package/dist/commands/doctor.d.ts +0 -103
- package/dist/commands/doctor.js +3 -279
- package/dist/commands/events.d.ts +0 -29
- package/dist/commands/events.js +1 -55
- package/dist/commands/exec.d.ts +0 -163
- package/dist/commands/exec.js +15 -964
- package/dist/commands/factory.d.ts +0 -6
- package/dist/commands/factory.js +0 -2
- package/dist/commands/feed-watch.js +0 -20
- package/dist/commands/feed.d.ts +0 -38
- package/dist/commands/feed.js +1 -151
- package/dist/commands/feedback.d.ts +0 -5
- package/dist/commands/feedback.js +0 -5
- package/dist/commands/fleet-capture.d.ts +0 -12
- package/dist/commands/fleet-capture.js +1 -39
- package/dist/commands/focus.d.ts +6 -94
- package/dist/commands/focus.js +13 -183
- package/dist/commands/fork.d.ts +0 -21
- package/dist/commands/fork.js +0 -45
- package/dist/commands/funnel.d.ts +0 -3
- package/dist/commands/go.d.ts +2 -71
- package/dist/commands/go.js +5 -99
- package/dist/commands/harness-hooks.d.ts +0 -41
- package/dist/commands/harness-hooks.js +0 -48
- package/dist/commands/harness-wizard.d.ts +0 -137
- package/dist/commands/harness-wizard.js +0 -109
- package/dist/commands/harness.d.ts +0 -63
- package/dist/commands/harness.js +0 -103
- package/dist/commands/hooks.d.ts +0 -9
- package/dist/commands/hooks.js +0 -26
- package/dist/commands/humans.d.ts +0 -8
- package/dist/commands/humans.js +0 -8
- package/dist/commands/import.d.ts +0 -22
- package/dist/commands/import.js +0 -79
- package/dist/commands/insights.d.ts +0 -37
- package/dist/commands/insights.js +3 -115
- package/dist/commands/inspect.d.ts +0 -117
- package/dist/commands/inspect.js +2 -448
- package/dist/commands/lease.d.ts +0 -28
- package/dist/commands/lease.js +0 -43
- package/dist/commands/logs.d.ts +0 -23
- package/dist/commands/logs.js +0 -30
- package/dist/commands/mailboxes.d.ts +0 -18
- package/dist/commands/mailboxes.js +0 -29
- package/dist/commands/mcp.d.ts +0 -9
- package/dist/commands/mcp.js +0 -53
- package/dist/commands/memory.d.ts +0 -7
- package/dist/commands/memory.js +0 -7
- package/dist/commands/menubar.d.ts +0 -8
- package/dist/commands/menubar.js +0 -24
- package/dist/commands/message.d.ts +0 -23
- package/dist/commands/message.js +0 -50
- package/dist/commands/mine.d.ts +0 -22
- package/dist/commands/mine.js +0 -21
- package/dist/commands/models.d.ts +0 -8
- package/dist/commands/models.js +0 -33
- package/dist/commands/modes.d.ts +0 -10
- package/dist/commands/modes.js +0 -13
- package/dist/commands/monitors.d.ts +0 -9
- package/dist/commands/monitors.js +3 -160
- package/dist/commands/open.d.ts +0 -26
- package/dist/commands/open.js +0 -10
- package/dist/commands/output.d.ts +0 -18
- package/dist/commands/output.js +1 -34
- package/dist/commands/packages-materialize.d.ts +0 -11
- package/dist/commands/packages-materialize.js +0 -3
- package/dist/commands/packages.d.ts +0 -10
- package/dist/commands/packages.js +0 -50
- package/dist/commands/perf.d.ts +0 -41
- package/dist/commands/perf.js +0 -55
- package/dist/commands/permissions.d.ts +0 -9
- package/dist/commands/permissions.js +0 -43
- package/dist/commands/plugins.d.ts +0 -14
- package/dist/commands/plugins.js +2 -55
- package/dist/commands/profiles.d.ts +0 -25
- package/dist/commands/profiles.js +0 -27
- package/dist/commands/projects-todo.d.ts +2 -0
- package/dist/commands/projects-todo.js +132 -0
- package/dist/commands/projects.d.ts +0 -85
- package/dist/commands/projects.js +344 -291
- package/dist/commands/prune.js +0 -30
- package/dist/commands/ps-roster.d.ts +92 -0
- package/dist/commands/ps-roster.js +744 -0
- package/dist/commands/ps.d.ts +6 -0
- package/dist/commands/ps.js +98 -0
- package/dist/commands/refresh-rules.d.ts +0 -13
- package/dist/commands/refresh-rules.js +0 -14
- package/dist/commands/reminders.d.ts +0 -7
- package/dist/commands/repo.d.ts +0 -89
- package/dist/commands/repo.js +7 -205
- package/dist/commands/resource-view.d.ts +0 -33
- package/dist/commands/resource-view.js +0 -49
- package/dist/commands/resume.d.ts +1 -19
- package/dist/commands/resume.js +0 -50
- package/dist/commands/route.d.ts +0 -10
- package/dist/commands/route.js +0 -19
- package/dist/commands/routines.d.ts +0 -42
- package/dist/commands/routines.js +5 -290
- package/dist/commands/routines.test-fixture.d.ts +0 -34
- package/dist/commands/routines.test-fixture.js +4 -100
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +1 -6
- package/dist/commands/run-account-picker.d.ts +0 -59
- package/dist/commands/run-account-picker.js +0 -71
- package/dist/commands/run-broadcast.d.ts +0 -9
- package/dist/commands/run-broadcast.js +0 -7
- package/dist/commands/run-cloud.d.ts +0 -15
- package/dist/commands/run-cloud.js +0 -37
- package/dist/commands/run-device-picker.d.ts +0 -25
- package/dist/commands/run-device-picker.js +1 -53
- package/dist/commands/secrets-passthrough.d.ts +0 -31
- package/dist/commands/secrets-passthrough.js +0 -10
- package/dist/commands/send.d.ts +0 -20
- package/dist/commands/send.js +14 -18
- package/dist/commands/sessions-backfill.d.ts +0 -7
- package/dist/commands/sessions-backfill.js +1 -16
- package/dist/commands/sessions-backup-setup.js +0 -11
- package/dist/commands/sessions-bookmark.d.ts +0 -8
- package/dist/commands/sessions-bookmark.js +0 -28
- package/dist/commands/sessions-browser.d.ts +2 -117
- package/dist/commands/sessions-browser.js +5 -243
- package/dist/commands/sessions-export.d.ts +1 -26
- package/dist/commands/sessions-export.js +3 -81
- package/dist/commands/sessions-import.d.ts +0 -14
- package/dist/commands/sessions-import.js +0 -59
- package/dist/commands/sessions-inject.d.ts +0 -60
- package/dist/commands/sessions-inject.js +3 -96
- package/dist/commands/sessions-migrate.d.ts +2 -37
- package/dist/commands/sessions-migrate.js +7 -159
- package/dist/commands/sessions-optimize.d.ts +0 -12
- package/dist/commands/sessions-picker-factory.d.ts +0 -7
- package/dist/commands/sessions-picker-factory.js +0 -8
- package/dist/commands/sessions-picker.d.ts +4 -103
- package/dist/commands/sessions-picker.js +13 -352
- package/dist/commands/sessions-render.d.ts +1 -2
- package/dist/commands/sessions-render.js +3 -7
- package/dist/commands/sessions-resume.d.ts +1 -24
- package/dist/commands/sessions-resume.js +2 -65
- package/dist/commands/sessions-share.d.ts +1 -9
- package/dist/commands/sessions-share.js +1 -45
- package/dist/commands/sessions-stats.d.ts +0 -24
- package/dist/commands/sessions-stats.js +0 -49
- package/dist/commands/sessions-stop.d.ts +1 -20
- package/dist/commands/sessions-stop.js +4 -9
- package/dist/commands/sessions-tail.d.ts +1 -19
- package/dist/commands/sessions-tail.js +3 -36
- package/dist/commands/sessions-trace.d.ts +5 -36
- package/dist/commands/sessions-trace.js +7 -82
- package/dist/commands/sessions.d.ts +1 -666
- package/dist/commands/sessions.js +30 -2279
- package/dist/commands/sessions.test-fixture.d.ts +0 -9
- package/dist/commands/sessions.test-fixture.js +8 -23
- package/dist/commands/setup-accounts.d.ts +0 -6
- package/dist/commands/setup-browser.d.ts +0 -23
- package/dist/commands/setup-browser.js +0 -28
- package/dist/commands/setup-computer.d.ts +0 -16
- package/dist/commands/setup-computer.js +0 -28
- package/dist/commands/setup-fleet.d.ts +0 -8
- package/dist/commands/setup-fleet.js +0 -11
- package/dist/commands/setup-mine.d.ts +0 -14
- package/dist/commands/setup-mine.js +0 -25
- package/dist/commands/setup-preferences.d.ts +0 -47
- package/dist/commands/setup-preferences.js +0 -53
- package/dist/commands/setup-secrets.d.ts +2 -24
- package/dist/commands/setup-secrets.js +0 -24
- package/dist/commands/setup-term.d.ts +0 -21
- package/dist/commands/setup-term.js +0 -21
- package/dist/commands/setup-terminal.d.ts +0 -1
- package/dist/commands/setup-terminal.js +0 -1
- package/dist/commands/setup-tools.d.ts +2 -0
- package/dist/commands/setup-tools.js +73 -0
- package/dist/commands/setup.d.ts +0 -20
- package/dist/commands/setup.js +4 -57
- package/dist/commands/skills.d.ts +0 -9
- package/dist/commands/skills.js +1 -22
- package/dist/commands/snapshot.d.ts +0 -9
- package/dist/commands/snapshot.js +0 -10
- package/dist/commands/ssh.d.ts +0 -64
- package/dist/commands/ssh.js +9 -420
- package/dist/commands/status.d.ts +0 -12
- package/dist/commands/status.js +0 -26
- package/dist/commands/subagents.d.ts +0 -8
- package/dist/commands/subagents.js +0 -31
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -256
- package/dist/commands/teams-picker.d.ts +0 -3
- package/dist/commands/teams-picker.js +0 -34
- package/dist/commands/teams.d.ts +1 -76
- package/dist/commands/teams.js +9 -477
- package/dist/commands/tmux.d.ts +0 -25
- package/dist/commands/tmux.js +0 -46
- package/dist/commands/traces.js +0 -19
- package/dist/commands/trash.d.ts +0 -17
- package/dist/commands/trash.js +1 -11
- package/dist/commands/uninstall.d.ts +0 -9
- package/dist/commands/uninstall.js +0 -6
- package/dist/commands/update.d.ts +0 -22
- package/dist/commands/update.js +0 -44
- package/dist/commands/upgrade.d.ts +0 -1
- package/dist/commands/upgrade.js +0 -1
- package/dist/commands/utils.d.ts +0 -85
- package/dist/commands/utils.js +1 -95
- package/dist/commands/versions.d.ts +0 -16
- package/dist/commands/versions.js +0 -134
- package/dist/commands/view.d.ts +0 -90
- package/dist/commands/view.js +4 -343
- package/dist/commands/watchdog.d.ts +0 -19
- package/dist/commands/watchdog.js +3 -43
- package/dist/commands/webhook.d.ts +0 -8
- package/dist/commands/webhook.js +0 -14
- package/dist/commands/workflows.d.ts +0 -8
- package/dist/commands/workflows.js +0 -6
- package/dist/index.d.ts +0 -25
- package/dist/index.js +5 -119
- package/dist/lib/account-capabilities.d.ts +0 -34
- package/dist/lib/account-capabilities.js +0 -32
- package/dist/lib/account-catalog.d.ts +0 -128
- package/dist/lib/account-catalog.js +8 -154
- package/dist/lib/account-provider-registry.d.ts +0 -14
- package/dist/lib/account-provider-registry.js +0 -8
- package/dist/lib/account-registry.d.ts +0 -74
- package/dist/lib/account-registry.js +14 -189
- package/dist/lib/account-schema.d.ts +0 -19
- package/dist/lib/account-schema.js +0 -43
- package/dist/lib/accounting/account-launch.d.ts +0 -15
- package/dist/lib/accounting/account-launch.js +1 -3
- package/dist/lib/accounting/account-pool-collect.d.ts +0 -26
- package/dist/lib/accounting/account-pool-collect.js +0 -42
- package/dist/lib/accounting/account-pool.d.ts +0 -41
- package/dist/lib/accounting/account-pool.js +0 -17
- package/dist/lib/accounting/capacity.d.ts +0 -32
- package/dist/lib/accounting/capacity.js +0 -32
- package/dist/lib/accounting/rotate.d.ts +0 -518
- package/dist/lib/accounting/rotate.js +4 -598
- package/dist/lib/accounting/usage-ingest.d.ts +0 -1
- package/dist/lib/accounting/usage-ingest.js +0 -44
- package/dist/lib/accounting/usage-sync.d.ts +0 -60
- package/dist/lib/accounting/usage-sync.js +4 -51
- package/dist/lib/accounting/usage.d.ts +0 -632
- package/dist/lib/accounting/usage.js +14 -1055
- package/dist/lib/accounts/add.d.ts +0 -60
- package/dist/lib/accounts/add.js +0 -127
- package/dist/lib/accounts/auth-operation-lock.d.ts +0 -1
- package/dist/lib/accounts/auth-operation-lock.js +0 -4
- package/dist/lib/accounts/migrate.d.ts +0 -9
- package/dist/lib/accounts/migrate.js +3 -42
- package/dist/lib/accounts/slots.d.ts +0 -25
- package/dist/lib/accounts/slots.js +1 -49
- package/dist/lib/acp/client.d.ts +0 -16
- package/dist/lib/acp/client.js +0 -29
- package/dist/lib/acp/harnesses.d.ts +0 -15
- package/dist/lib/acp/harnesses.js +0 -16
- package/dist/lib/acp/run.d.ts +0 -8
- package/dist/lib/acp/run.js +0 -8
- package/dist/lib/actor.d.ts +1 -71
- package/dist/lib/actor.js +1 -99
- package/dist/lib/add-dir.d.ts +0 -46
- package/dist/lib/add-dir.js +1 -70
- package/dist/lib/address.d.ts +0 -17
- package/dist/lib/address.js +0 -15
- package/dist/lib/agent-cli-commands.d.ts +0 -10
- package/dist/lib/agent-cli-commands.js +0 -10
- package/dist/lib/agent-modes.d.ts +0 -29
- package/dist/lib/agent-modes.js +0 -31
- package/dist/lib/agent-spec/agents.d.ts +0 -426
- package/dist/lib/agent-spec/agents.js +37 -924
- package/dist/lib/agent-spec/index.d.ts +0 -5
- package/dist/lib/agent-spec/index.js +0 -14
- package/dist/lib/agent-spec/materialize.d.ts +0 -10
- package/dist/lib/agent-spec/materialize.js +2 -139
- package/dist/lib/agent-spec/package-resolve.d.ts +0 -8
- package/dist/lib/agent-spec/package-resolve.js +1 -44
- package/dist/lib/agent-spec/package-schema.d.ts +0 -2
- package/dist/lib/agent-spec/package-schema.js +0 -11
- package/dist/lib/agent-spec/package-types.d.ts +0 -27
- package/dist/lib/agent-spec/package-types.js +0 -1
- package/dist/lib/agent-spec/primitives.d.ts +0 -18
- package/dist/lib/agent-spec/primitives.js +0 -27
- package/dist/lib/agent-spec/provider.js +0 -2
- package/dist/lib/agent-spec/resolve.d.ts +0 -23
- package/dist/lib/agent-spec/resolve.js +0 -41
- package/dist/lib/agent-spec/types.d.ts +0 -34
- package/dist/lib/agent-spec/types.js +0 -6
- package/dist/lib/agents.d.ts +0 -1
- package/dist/lib/agents.js +0 -1
- package/dist/lib/analytics/mix-commands.d.ts +0 -23
- package/dist/lib/analytics/mix-commands.js +0 -26
- package/dist/lib/analytics/recipes.d.ts +0 -1
- package/dist/lib/analytics/recipes.js +5 -10
- package/dist/lib/analytics/usage-db.js +4 -6
- package/dist/lib/answer-router.d.ts +0 -61
- package/dist/lib/answer-router.js +0 -57
- package/dist/lib/app-bundle-install.d.ts +0 -13
- package/dist/lib/app-bundle-install.js +0 -50
- package/dist/lib/artifact-actions.d.ts +0 -15
- package/dist/lib/artifact-actions.js +0 -18
- package/dist/lib/artifacts-client.d.ts +0 -10
- package/dist/lib/artifacts-client.js +0 -17
- package/dist/lib/ask-classifier.d.ts +0 -38
- package/dist/lib/ask-classifier.js +0 -27
- package/dist/lib/audit/log.d.ts +0 -47
- package/dist/lib/audit/log.js +1 -59
- package/dist/lib/auth-health.d.ts +0 -213
- package/dist/lib/auth-health.js +16 -266
- package/dist/lib/auth-mint.d.ts +0 -83
- package/dist/lib/auth-mint.js +8 -85
- package/dist/lib/auto-pull-worker.d.ts +0 -10
- package/dist/lib/auto-pull-worker.js +3 -48
- package/dist/lib/auto-pull.d.ts +0 -64
- package/dist/lib/auto-pull.js +0 -79
- package/dist/lib/beta.d.ts +0 -9
- package/dist/lib/beta.js +0 -9
- package/dist/lib/binary-shadow.d.ts +0 -22
- package/dist/lib/binary-shadow.js +4 -34
- package/dist/lib/boot-profile.d.ts +0 -10
- package/dist/lib/boot-profile.js +1 -31
- package/dist/lib/brand.d.ts +0 -20
- package/dist/lib/brand.js +0 -50
- package/dist/lib/browser/context.d.ts +0 -54
- package/dist/lib/browser/context.js +0 -49
- package/dist/lib/browser/paths.d.ts +0 -21
- package/dist/lib/browser/paths.js +0 -26
- package/dist/lib/browser/record.d.ts +0 -34
- package/dist/lib/browser/record.js +0 -38
- package/dist/lib/browser/sessions-list.d.ts +1 -79
- package/dist/lib/browser/sessions-list.js +2 -98
- package/dist/lib/browser-client.d.ts +0 -112
- package/dist/lib/browser-client.js +1 -90
- package/dist/lib/budget/config.d.ts +0 -6
- package/dist/lib/budget/config.js +0 -29
- package/dist/lib/budget/enforce.d.ts +0 -50
- package/dist/lib/budget/enforce.js +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -23
- package/dist/lib/budget/ledger.js +0 -28
- package/dist/lib/budget/live-cloud.d.ts +0 -26
- package/dist/lib/budget/live-cloud.js +0 -12
- package/dist/lib/budget/live-team.d.ts +0 -17
- package/dist/lib/budget/live-team.js +1 -35
- package/dist/lib/budget/preflight.d.ts +0 -51
- package/dist/lib/budget/preflight.js +0 -36
- package/dist/lib/byok-usage.d.ts +0 -20
- package/dist/lib/byok-usage.js +1 -24
- package/dist/lib/capabilities.d.ts +0 -24
- package/dist/lib/capabilities.js +0 -29
- package/dist/lib/catchup.d.ts +0 -87
- package/dist/lib/catchup.js +1 -81
- package/dist/lib/channels/owner-forward.d.ts +0 -70
- package/dist/lib/channels/owner-forward.js +1 -43
- package/dist/lib/channels/owner-sink.js +0 -21
- package/dist/lib/channels/providers/desktop.d.ts +0 -37
- package/dist/lib/channels/providers/desktop.js +0 -72
- package/dist/lib/channels/providers/index.d.ts +0 -1
- package/dist/lib/channels/providers/index.js +2 -6
- package/dist/lib/channels/providers/mailbox.js +0 -7
- package/dist/lib/channels/providers/openclaw-telegram.js +0 -8
- package/dist/lib/channels/providers/rush.d.ts +0 -2
- package/dist/lib/channels/providers/rush.js +0 -26
- package/dist/lib/channels/providers/session.d.ts +2 -0
- package/dist/lib/channels/providers/session.js +26 -0
- package/dist/lib/channels/registry.d.ts +0 -27
- package/dist/lib/channels/registry.js +0 -10
- package/dist/lib/channels/resolve.d.ts +0 -19
- package/dist/lib/channels/resolve.js +0 -2
- package/dist/lib/channels/send.d.ts +0 -50
- package/dist/lib/channels/send.js +0 -25
- package/dist/lib/checkpoint.d.ts +0 -36
- package/dist/lib/checkpoint.js +0 -28
- package/dist/lib/claude-account-token.d.ts +0 -98
- package/dist/lib/claude-account-token.js +7 -169
- package/dist/lib/claude-statusline.d.ts +0 -41
- package/dist/lib/claude-statusline.js +0 -68
- package/dist/lib/cli-entry.d.ts +0 -26
- package/dist/lib/cli-entry.js +1 -61
- package/dist/lib/cli-resources.d.ts +31 -89
- package/dist/lib/cli-resources.js +116 -152
- package/dist/lib/cloud/antigravity.d.ts +0 -29
- package/dist/lib/cloud/antigravity.js +0 -36
- package/dist/lib/cloud/codex.d.ts +0 -8
- package/dist/lib/cloud/codex.js +0 -41
- package/dist/lib/cloud/cursor.d.ts +0 -5
- package/dist/lib/cloud/cursor.js +2 -7
- package/dist/lib/cloud/dispatch.d.ts +0 -13
- package/dist/lib/cloud/dispatch.js +1 -48
- package/dist/lib/cloud/factory.d.ts +0 -52
- package/dist/lib/cloud/factory.js +3 -67
- package/dist/lib/cloud/host.d.ts +0 -39
- package/dist/lib/cloud/host.js +5 -48
- package/dist/lib/cloud/registry.d.ts +0 -25
- package/dist/lib/cloud/registry.js +0 -29
- package/dist/lib/cloud/rush.d.ts +0 -47
- package/dist/lib/cloud/rush.js +1 -82
- package/dist/lib/cloud/session-index.d.ts +0 -27
- package/dist/lib/cloud/session-index.js +1 -32
- package/dist/lib/cloud/store.d.ts +0 -18
- package/dist/lib/cloud/store.js +0 -28
- package/dist/lib/cloud/stream.d.ts +0 -14
- package/dist/lib/cloud/stream.js +0 -25
- package/dist/lib/cloud/types.d.ts +0 -168
- package/dist/lib/cloud/types.js +0 -46
- package/dist/lib/cloudflare/creds.d.ts +0 -2
- package/dist/lib/cloudflare/creds.js +0 -14
- package/dist/lib/cloudflare/provision.d.ts +0 -8
- package/dist/lib/cloudflare/provision.js +1 -19
- package/dist/lib/codex-home.d.ts +0 -60
- package/dist/lib/codex-home.js +2 -72
- package/dist/lib/codex-policy.d.ts +0 -10
- package/dist/lib/codex-policy.js +0 -13
- package/dist/lib/command-skills.d.ts +0 -10
- package/dist/lib/command-skills.js +0 -10
- package/dist/lib/commands.d.ts +0 -74
- package/dist/lib/commands.js +0 -112
- package/dist/lib/comms-render.d.ts +0 -5
- package/dist/lib/comms-render.js +0 -5
- package/dist/lib/computer/context.d.ts +0 -23
- package/dist/lib/computer/context.js +0 -14
- package/dist/lib/computer/policy.d.ts +0 -20
- package/dist/lib/computer/policy.js +0 -53
- package/dist/lib/computer/record.d.ts +0 -33
- package/dist/lib/computer/record.js +1 -48
- package/dist/lib/computer/sessions-list.d.ts +1 -128
- package/dist/lib/computer/sessions-list.js +6 -165
- package/dist/lib/computer-client.d.ts +0 -106
- package/dist/lib/computer-client.js +5 -86
- package/dist/lib/concurrency.d.ts +0 -14
- package/dist/lib/concurrency.js +0 -3
- package/dist/lib/config-drift.d.ts +0 -31
- package/dist/lib/config-drift.js +0 -32
- package/dist/lib/config-keys.d.ts +1 -65
- package/dist/lib/config-keys.js +6 -52
- package/dist/lib/config-transfer.d.ts +0 -14
- package/dist/lib/config-transfer.js +0 -26
- package/dist/lib/convert.d.ts +0 -17
- package/dist/lib/convert.js +0 -18
- package/dist/lib/crabbox/cli.d.ts +0 -156
- package/dist/lib/crabbox/cli.js +1 -188
- package/dist/lib/crabbox/config.d.ts +0 -18
- package/dist/lib/crabbox/config.js +1 -19
- package/dist/lib/crabbox/lease.d.ts +0 -93
- package/dist/lib/crabbox/lease.js +4 -148
- package/dist/lib/crabbox/progress.d.ts +0 -56
- package/dist/lib/crabbox/progress.js +2 -49
- package/dist/lib/crabbox/runtimes.d.ts +0 -94
- package/dist/lib/crabbox/runtimes.js +1 -111
- package/dist/lib/crabbox/setup-copy.d.ts +0 -64
- package/dist/lib/crabbox/setup-copy.js +1 -53
- package/dist/lib/daemon/account-state-daemon-service.d.ts +0 -48
- package/dist/lib/daemon/account-state-daemon-service.js +2 -63
- package/dist/lib/daemon/attention-notify-service.d.ts +0 -12
- package/dist/lib/daemon/attention-notify-service.js +1 -24
- package/dist/lib/daemon/auth-sync-service.d.ts +0 -28
- package/dist/lib/daemon/auth-sync-service.js +0 -56
- package/dist/lib/daemon/catchup-service.d.ts +0 -34
- package/dist/lib/daemon/catchup-service.js +0 -30
- package/dist/lib/daemon/daemon.d.ts +0 -374
- package/dist/lib/daemon/daemon.js +44 -1049
- package/dist/lib/daemon/daemon.test-fixture.d.ts +0 -19
- package/dist/lib/daemon/daemon.test-fixture.js +1 -24
- package/dist/lib/daemon/device-probe-service.d.ts +0 -16
- package/dist/lib/daemon/device-probe-service.js +0 -20
- package/dist/lib/daemon/feed-stream-service.d.ts +0 -15
- package/dist/lib/daemon/feed-stream-service.js +0 -20
- package/dist/lib/daemon/harness-update-service.d.ts +2 -61
- package/dist/lib/daemon/harness-update-service.js +6 -86
- package/dist/lib/daemon/heartbeat-service.d.ts +0 -1
- package/dist/lib/daemon/heartbeat-service.js +0 -1
- package/dist/lib/daemon/leaked-daemons.d.ts +0 -46
- package/dist/lib/daemon/leaked-daemons.js +2 -78
- package/dist/lib/daemon/monitor-engine-service.d.ts +0 -13
- package/dist/lib/daemon/monitor-engine-service.js +3 -15
- package/dist/lib/daemon/runner.d.ts +0 -194
- package/dist/lib/daemon/runner.js +39 -760
- package/dist/lib/daemon/self-heal-service.d.ts +18 -17
- package/dist/lib/daemon/self-heal-service.js +83 -37
- package/dist/lib/daemon/self-update-service.d.ts +1 -131
- package/dist/lib/daemon/self-update-service.js +26 -189
- package/dist/lib/daemon/service.d.ts +0 -73
- package/dist/lib/daemon/service.js +0 -34
- package/dist/lib/daemon/session-index-service.d.ts +0 -12
- package/dist/lib/daemon/session-index-service.js +0 -23
- package/dist/lib/daemon/session-state-service.d.ts +0 -8
- package/dist/lib/daemon/session-state-service.js +0 -8
- package/dist/lib/daemon/session-summarizer-service.d.ts +0 -14
- package/dist/lib/daemon/session-summarizer-service.js +1 -19
- package/dist/lib/daemon/session-title-service.d.ts +0 -25
- package/dist/lib/daemon/session-title-service.js +0 -32
- package/dist/lib/daemon/state-dir-check-service.d.ts +0 -24
- package/dist/lib/daemon/state-dir-check-service.js +0 -29
- package/dist/lib/daemon/supervisor.d.ts +0 -112
- package/dist/lib/daemon/supervisor.js +4 -147
- package/dist/lib/daemon/testdata/process-view-daemon.js +0 -2
- package/dist/lib/daemon/testdata/process-view-start.js +0 -5
- package/dist/lib/daemon/tmux-reap-service.d.ts +0 -1
- package/dist/lib/daemon/tmux-reap-service.js +0 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +0 -23
- package/dist/lib/daemon/usage-sync-service.js +0 -26
- package/dist/lib/daemon/watchdog-service.d.ts +0 -9
- package/dist/lib/daemon/watchdog-service.js +0 -13
- package/dist/lib/daemon/webhook-receiver-service.d.ts +0 -1
- package/dist/lib/daemon/webhook-receiver-service.js +0 -1
- package/dist/lib/daemon-health.d.ts +0 -55
- package/dist/lib/daemon-health.js +4 -77
- package/dist/lib/daemon-services.d.ts +0 -36
- package/dist/lib/daemon-services.js +0 -45
- package/dist/lib/daemon-ticks.d.ts +0 -126
- package/dist/lib/daemon-ticks.js +1 -156
- package/dist/lib/daemon-webhooks.d.ts +0 -57
- package/dist/lib/daemon-webhooks.js +2 -54
- package/dist/lib/deeplink/register.d.ts +0 -15
- package/dist/lib/deeplink/register.js +0 -60
- package/dist/lib/deeplink/url.d.ts +0 -24
- package/dist/lib/deeplink/url.js +1 -33
- package/dist/lib/device-config.d.ts +1 -192
- package/dist/lib/device-config.js +86 -240
- package/dist/lib/devices/config-migration.d.ts +0 -43
- package/dist/lib/devices/config-migration.js +7 -127
- package/dist/lib/devices/connect.d.ts +0 -168
- package/dist/lib/devices/connect.js +6 -254
- package/dist/lib/devices/device-docs.d.ts +0 -24
- package/dist/lib/devices/device-docs.js +0 -46
- package/dist/lib/devices/discovery-policy.d.ts +0 -30
- package/dist/lib/devices/discovery-policy.js +3 -34
- package/dist/lib/devices/doctor-findings.d.ts +0 -109
- package/dist/lib/devices/doctor-findings.js +30 -326
- package/dist/lib/devices/doctor-overview-cache.d.ts +0 -33
- package/dist/lib/devices/doctor-overview-cache.js +0 -81
- package/dist/lib/devices/fleet-divergence.d.ts +0 -89
- package/dist/lib/devices/fleet-divergence.js +1 -60
- package/dist/lib/devices/fleet-inventory.d.ts +0 -27
- package/dist/lib/devices/fleet-inventory.js +0 -38
- package/dist/lib/devices/fleet.d.ts +0 -95
- package/dist/lib/devices/fleet.js +0 -79
- package/dist/lib/devices/harness-inventory.d.ts +0 -75
- package/dist/lib/devices/harness-inventory.js +0 -101
- package/dist/lib/devices/health-report.d.ts +0 -37
- package/dist/lib/devices/health-report.js +0 -73
- package/dist/lib/devices/health.d.ts +0 -71
- package/dist/lib/devices/health.js +2 -82
- package/dist/lib/devices/interactive-host.d.ts +0 -10
- package/dist/lib/devices/interactive-host.js +0 -34
- package/dist/lib/devices/known-hosts.d.ts +0 -45
- package/dist/lib/devices/known-hosts.js +0 -77
- package/dist/lib/devices/pending.d.ts +0 -31
- package/dist/lib/devices/pending.js +7 -67
- package/dist/lib/devices/pool.d.ts +0 -36
- package/dist/lib/devices/pool.js +0 -30
- package/dist/lib/devices/reachability.d.ts +0 -25
- package/dist/lib/devices/reachability.js +0 -14
- package/dist/lib/devices/registry.d.ts +0 -141
- package/dist/lib/devices/registry.js +4 -151
- package/dist/lib/devices/resolve-profile.d.ts +0 -18
- package/dist/lib/devices/resolve-profile.js +0 -18
- package/dist/lib/devices/resolve-target.d.ts +0 -20
- package/dist/lib/devices/resolve-target.js +1 -51
- package/dist/lib/devices/rollout-verify.d.ts +1 -81
- package/dist/lib/devices/rollout-verify.js +0 -77
- package/dist/lib/devices/self-host.d.ts +0 -7
- package/dist/lib/devices/self-host.js +1 -29
- package/dist/lib/devices/ssh-config.d.ts +0 -18
- package/dist/lib/devices/ssh-config.js +0 -9
- package/dist/lib/devices/stats-cache.d.ts +0 -48
- package/dist/lib/devices/stats-cache.js +0 -80
- package/dist/lib/devices/sync.d.ts +0 -97
- package/dist/lib/devices/sync.js +0 -88
- package/dist/lib/devices/tailscale.d.ts +0 -18
- package/dist/lib/devices/tailscale.js +1 -38
- package/dist/lib/devices/terminfo.d.ts +0 -27
- package/dist/lib/devices/terminfo.js +2 -64
- package/dist/lib/devices/worker-pick.d.ts +0 -15
- package/dist/lib/devices/worker-pick.js +0 -48
- package/dist/lib/diff-text.d.ts +0 -18
- package/dist/lib/diff-text.js +0 -15
- package/dist/lib/doctor-diff.d.ts +0 -79
- package/dist/lib/doctor-diff.js +2 -181
- package/dist/lib/drift-sync.d.ts +0 -29
- package/dist/lib/drift-sync.js +0 -40
- package/dist/lib/drift.d.ts +0 -43
- package/dist/lib/drift.js +0 -31
- package/dist/lib/event-families.d.ts +0 -17
- package/dist/lib/event-families.js +0 -33
- package/dist/lib/event-provenance.d.ts +0 -4
- package/dist/lib/event-provenance.js +0 -5
- package/dist/lib/event-stream.d.ts +0 -29
- package/dist/lib/event-stream.js +0 -36
- package/dist/lib/events-ingest.d.ts +0 -27
- package/dist/lib/events-ingest.js +0 -54
- package/dist/lib/exec-account-home.d.ts +0 -24
- package/dist/lib/exec-account-home.js +0 -41
- package/dist/lib/exec-bounded.d.ts +1 -37
- package/dist/lib/exec-bounded.js +10 -46
- package/dist/lib/exec.d.ts +3 -583
- package/dist/lib/exec.js +18 -1025
- package/dist/lib/factory/snapshot.js +1 -15
- package/dist/lib/feed/activity-stream.d.ts +0 -27
- package/dist/lib/feed/activity-stream.js +4 -80
- package/dist/lib/feed/activity.d.ts +1 -243
- package/dist/lib/feed/activity.js +8 -273
- package/dist/lib/feed/answer.d.ts +0 -103
- package/dist/lib/feed/answer.js +0 -267
- package/dist/lib/feed/attention.d.ts +0 -56
- package/dist/lib/feed/attention.js +0 -161
- package/dist/lib/feed/envelope.d.ts +2 -17
- package/dist/lib/feed/envelope.js +0 -14
- package/dist/lib/feed/events.d.ts +0 -118
- package/dist/lib/feed/events.js +13 -213
- package/dist/lib/feed/feed.d.ts +1 -250
- package/dist/lib/feed/feed.js +24 -334
- package/dist/lib/feed/hub-server.d.ts +0 -100
- package/dist/lib/feed/hub-server.js +1 -191
- package/dist/lib/feed/hub.d.ts +0 -53
- package/dist/lib/feed/hub.js +0 -89
- package/dist/lib/feed/pr-status.d.ts +1 -19
- package/dist/lib/feed/pr-status.js +0 -18
- package/dist/lib/feed/tool-activity.d.ts +0 -59
- package/dist/lib/feed/tool-activity.js +1 -119
- package/dist/lib/feed/tools.d.ts +0 -100
- package/dist/lib/feed/tools.js +0 -89
- package/dist/lib/feed/watch.d.ts +0 -33
- package/dist/lib/feed/watch.js +2 -94
- package/dist/lib/feed-broadcast.d.ts +0 -148
- package/dist/lib/feed-broadcast.js +1 -283
- package/dist/lib/feed-outcome.d.ts +0 -50
- package/dist/lib/feed-outcome.js +1 -67
- package/dist/lib/feed-policy.d.ts +0 -6
- package/dist/lib/feed-policy.js +1 -27
- package/dist/lib/feed-post.d.ts +0 -61
- package/dist/lib/feed-post.js +4 -61
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -64
- package/dist/lib/fleet/apply.js +0 -125
- package/dist/lib/fleet/auth-sync.d.ts +0 -48
- package/dist/lib/fleet/auth-sync.js +4 -49
- package/dist/lib/fleet/capture.d.ts +0 -26
- package/dist/lib/fleet/capture.js +1 -36
- package/dist/lib/fleet/manifest.d.ts +0 -38
- package/dist/lib/fleet/manifest.js +0 -40
- package/dist/lib/fleet/types.d.ts +1 -138
- package/dist/lib/fleet/types.js +0 -12
- package/dist/lib/fleet-cache.d.ts +0 -12
- package/dist/lib/fleet-cache.js +0 -24
- package/dist/lib/fleet-shared-state.d.ts +6 -59
- package/dist/lib/fleet-shared-state.js +5 -51
- package/dist/lib/fleet-status.d.ts +0 -27
- package/dist/lib/fleet-status.js +0 -48
- package/dist/lib/format.d.ts +0 -74
- package/dist/lib/format.js +3 -77
- package/dist/lib/friction-heuristics.d.ts +0 -20
- package/dist/lib/friction-heuristics.js +0 -8
- package/dist/lib/fs-atomic.d.ts +0 -51
- package/dist/lib/fs-atomic.js +8 -66
- package/dist/lib/fs-walk.d.ts +0 -13
- package/dist/lib/fs-walk.js +0 -22
- package/dist/lib/fuzzy.d.ts +0 -29
- package/dist/lib/fuzzy.js +0 -31
- package/dist/lib/gemini-settings.js +0 -12
- package/dist/lib/git.d.ts +0 -366
- package/dist/lib/git.js +7 -574
- package/dist/lib/github/ci-failure.d.ts +30 -0
- package/dist/lib/github/ci-failure.js +95 -0
- package/dist/lib/github/gh-overload.d.ts +0 -38
- package/dist/lib/github/gh-overload.js +3 -55
- package/dist/lib/github/pr-mergeable.d.ts +3 -34
- package/dist/lib/github/pr-mergeable.js +2 -42
- package/dist/lib/github/pr-verdict.d.ts +0 -44
- package/dist/lib/github/pr-verdict.js +0 -36
- package/dist/lib/github/project-prs.d.ts +135 -105
- package/dist/lib/github/project-prs.js +530 -170
- package/dist/lib/github/release-drift.d.ts +45 -0
- package/dist/lib/github/release-drift.js +91 -0
- package/dist/lib/github/rest.d.ts +0 -50
- package/dist/lib/github/rest.js +0 -49
- package/dist/lib/github/viewer.d.ts +27 -0
- package/dist/lib/github/viewer.js +101 -0
- package/dist/lib/goose-commands.d.ts +0 -29
- package/dist/lib/goose-commands.js +3 -48
- package/dist/lib/harness/adapter.d.ts +0 -151
- package/dist/lib/harness/adapter.js +0 -41
- package/dist/lib/harness/adapters/claude.d.ts +0 -8
- package/dist/lib/harness/adapters/claude.js +0 -89
- package/dist/lib/harness/adapters/codex.js +0 -18
- package/dist/lib/harness/adapters/copilot.js +0 -3
- package/dist/lib/harness/adapters/cursor.js +0 -16
- package/dist/lib/harness/adapters/droid.js +0 -3
- package/dist/lib/harness/adapters/kimi.js +0 -19
- package/dist/lib/harness/adapters/muse.js +0 -9
- package/dist/lib/harness/adapters/opencode.js +0 -2
- package/dist/lib/harness/exec-config-version.d.ts +0 -2
- package/dist/lib/harness/exec-config-version.js +0 -13
- package/dist/lib/harness/index.js +0 -10
- package/dist/lib/harness-auth-capabilities.d.ts +0 -26
- package/dist/lib/harness-auth-capabilities.js +0 -18
- package/dist/lib/harness-connection-test.d.ts +0 -27
- package/dist/lib/harness-connection-test.js +2 -20
- package/dist/lib/heal.d.ts +0 -45
- package/dist/lib/heal.js +2 -82
- package/dist/lib/help.d.ts +0 -32
- package/dist/lib/help.js +0 -41
- package/dist/lib/helper-download.d.ts +0 -85
- package/dist/lib/helper-download.js +0 -95
- package/dist/lib/helper-versions.d.ts +0 -51
- package/dist/lib/helper-versions.js +1 -45
- package/dist/lib/hooks/cache.d.ts +0 -40
- package/dist/lib/hooks/cache.js +8 -122
- package/dist/lib/hooks/install.d.ts +0 -253
- package/dist/lib/hooks/install.js +49 -822
- package/dist/lib/hooks/match.d.ts +0 -24
- package/dist/lib/hooks/match.js +0 -31
- package/dist/lib/hooks/profile.d.ts +0 -21
- package/dist/lib/hooks/profile.js +0 -28
- package/dist/lib/hosts/credential-transport.d.ts +0 -6
- package/dist/lib/hosts/credential-transport.js +0 -17
- package/dist/lib/hosts/credentials.d.ts +0 -35
- package/dist/lib/hosts/credentials.js +0 -38
- package/dist/lib/hosts/dispatch.d.ts +0 -140
- package/dist/lib/hosts/dispatch.js +0 -176
- package/dist/lib/hosts/logs.d.ts +0 -25
- package/dist/lib/hosts/logs.js +1 -51
- package/dist/lib/hosts/option.d.ts +0 -12
- package/dist/lib/hosts/option.js +0 -12
- package/dist/lib/hosts/passthrough.d.ts +0 -129
- package/dist/lib/hosts/passthrough.js +12 -249
- package/dist/lib/hosts/progress.d.ts +0 -90
- package/dist/lib/hosts/progress.js +5 -115
- package/dist/lib/hosts/providers/devices.d.ts +0 -19
- package/dist/lib/hosts/providers/devices.js +1 -34
- package/dist/lib/hosts/providers/local.d.ts +0 -14
- package/dist/lib/hosts/providers/local.js +0 -22
- package/dist/lib/hosts/ready.d.ts +0 -99
- package/dist/lib/hosts/ready.js +0 -101
- package/dist/lib/hosts/reconcile.d.ts +0 -38
- package/dist/lib/hosts/reconcile.js +1 -50
- package/dist/lib/hosts/reconnect.d.ts +0 -75
- package/dist/lib/hosts/reconnect.js +0 -98
- package/dist/lib/hosts/registry.d.ts +0 -74
- package/dist/lib/hosts/registry.js +0 -110
- package/dist/lib/hosts/remote-cmd.d.ts +1 -228
- package/dist/lib/hosts/remote-cmd.js +19 -294
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +0 -1
- package/dist/lib/hosts/remote-cmd.test-fixture.js +0 -12
- package/dist/lib/hosts/remote-os.d.ts +0 -19
- package/dist/lib/hosts/remote-os.js +0 -22
- package/dist/lib/hosts/remote-session-id.d.ts +0 -22
- package/dist/lib/hosts/remote-session-id.js +0 -24
- package/dist/lib/hosts/routing-flag.d.ts +0 -21
- package/dist/lib/hosts/routing-flag.js +0 -21
- package/dist/lib/hosts/run-target.d.ts +0 -53
- package/dist/lib/hosts/run-target.js +0 -56
- package/dist/lib/hosts/session-index.d.ts +1 -53
- package/dist/lib/hosts/session-index.js +2 -59
- package/dist/lib/hosts/session-marker.d.ts +0 -31
- package/dist/lib/hosts/session-marker.js +0 -32
- package/dist/lib/hosts/ssh-config.d.ts +0 -25
- package/dist/lib/hosts/ssh-config.js +1 -32
- package/dist/lib/hosts/tasks.d.ts +0 -54
- package/dist/lib/hosts/tasks.js +0 -35
- package/dist/lib/hosts/types.d.ts +0 -39
- package/dist/lib/hosts/types.js +0 -22
- package/dist/lib/humans.d.ts +0 -21
- package/dist/lib/humans.js +0 -30
- package/dist/lib/identity/client.d.ts +1 -35
- package/dist/lib/identity/client.js +3 -29
- package/dist/lib/identity/index.d.ts +3 -27
- package/dist/lib/identity/index.js +8 -24
- package/dist/lib/import.d.ts +0 -104
- package/dist/lib/import.js +1 -137
- package/dist/lib/installations/active-check.d.ts +0 -53
- package/dist/lib/installations/active-check.js +0 -49
- package/dist/lib/installations/index.d.ts +0 -9
- package/dist/lib/installations/index.js +0 -9
- package/dist/lib/installations/installation-lock.js +0 -8
- package/dist/lib/installations/launch-gate.d.ts +0 -56
- package/dist/lib/installations/launch-gate.js +0 -83
- package/dist/lib/installations/migrate.d.ts +0 -100
- package/dist/lib/installations/migrate.js +105 -572
- package/dist/lib/installations/native-command.d.ts +0 -1
- package/dist/lib/installations/native-command.js +0 -6
- package/dist/lib/installations/resolve.d.ts +0 -24
- package/dist/lib/installations/resolve.js +0 -24
- package/dist/lib/installations/shims.d.ts +0 -395
- package/dist/lib/installations/shims.js +30 -957
- package/dist/lib/installations/store.d.ts +0 -199
- package/dist/lib/installations/store.js +1 -297
- package/dist/lib/installations/strategies.d.ts +0 -44
- package/dist/lib/installations/strategies.js +0 -87
- package/dist/lib/installations/types.d.ts +1 -67
- package/dist/lib/installations/types.js +0 -6
- package/dist/lib/installations/update-cancellation.d.ts +0 -74
- package/dist/lib/installations/update-cancellation.js +0 -74
- package/dist/lib/installations/update-policy.d.ts +0 -57
- package/dist/lib/installations/update-policy.js +0 -62
- package/dist/lib/installations/update-runtime.d.ts +0 -88
- package/dist/lib/installations/update-runtime.js +1 -127
- package/dist/lib/installations/update.d.ts +0 -53
- package/dist/lib/installations/update.js +0 -95
- package/dist/lib/installations/versions.d.ts +0 -310
- package/dist/lib/installations/versions.js +14 -837
- package/dist/lib/isolation-boundary-report.d.ts +0 -7
- package/dist/lib/isolation-boundary-report.js +0 -7
- package/dist/lib/launch-identity.d.ts +0 -8
- package/dist/lib/launch-identity.js +0 -8
- package/dist/lib/linear-autoclose.d.ts +0 -25
- package/dist/lib/linear-autoclose.js +0 -19
- package/dist/lib/linear-cache.d.ts +0 -57
- package/dist/lib/linear-cache.js +1 -81
- package/dist/lib/linear-project-counts.d.ts +0 -83
- package/dist/lib/linear-project-counts.js +2 -64
- package/dist/lib/linear-projects.d.ts +0 -62
- package/dist/lib/linear-projects.js +0 -85
- package/dist/lib/linear-rate-limit.d.ts +0 -21
- package/dist/lib/linear-rate-limit.js +1 -93
- package/dist/lib/linux-userns.d.ts +1 -42
- package/dist/lib/linux-userns.js +0 -47
- package/dist/lib/lock-compromise.d.ts +0 -7
- package/dist/lib/lock-compromise.js +0 -7
- package/dist/lib/log-follow.d.ts +0 -2
- package/dist/lib/log-follow.js +5 -15
- package/dist/lib/loop.d.ts +0 -106
- package/dist/lib/loop.js +0 -135
- package/dist/lib/machine-id.d.ts +0 -19
- package/dist/lib/machine-id.js +0 -19
- package/dist/lib/mailbox-gc.d.ts +0 -7
- package/dist/lib/mailbox-gc.js +0 -25
- package/dist/lib/mailbox-target.d.ts +0 -31
- package/dist/lib/mailbox-target.js +0 -27
- package/dist/lib/mailbox.d.ts +0 -77
- package/dist/lib/mailbox.js +5 -105
- package/dist/lib/manifest.d.ts +0 -4
- package/dist/lib/manifest.js +0 -36
- package/dist/lib/markdown.d.ts +0 -3
- package/dist/lib/markdown.js +0 -9
- package/dist/lib/mcp-registry.d.ts +1 -50
- package/dist/lib/mcp-registry.js +0 -64
- package/dist/lib/mcp.d.ts +0 -115
- package/dist/lib/mcp.js +3 -199
- package/dist/lib/memory-cache.d.ts +0 -11
- package/dist/lib/memory-cache.js +0 -9
- package/dist/lib/memory.d.ts +0 -52
- package/dist/lib/memory.js +12 -74
- package/dist/lib/menubar/download-menubar.d.ts +0 -35
- package/dist/lib/menubar/download-menubar.js +0 -38
- package/dist/lib/menubar/install-menubar.d.ts +0 -405
- package/dist/lib/menubar/install-menubar.js +25 -667
- package/dist/lib/menubar/migrate-prefs.d.ts +0 -47
- package/dist/lib/menubar/migrate-prefs.js +1 -70
- package/dist/lib/menubar/notify-desktop.d.ts +0 -82
- package/dist/lib/menubar/notify-desktop.js +0 -68
- package/dist/lib/menubar/resolve-version.d.ts +0 -41
- package/dist/lib/menubar/resolve-version.js +2 -44
- package/dist/lib/menubar/snapshot.d.ts +13 -66
- package/dist/lib/menubar/snapshot.js +45 -39
- package/dist/lib/merged-resources.d.ts +0 -10
- package/dist/lib/merged-resources.js +0 -10
- package/dist/lib/migrate-fold.d.ts +0 -31
- package/dist/lib/migrate-fold.js +6 -38
- package/dist/lib/model-tier-overrides.d.ts +0 -30
- package/dist/lib/model-tier-overrides.js +0 -14
- package/dist/lib/model-tiers.d.ts +0 -43
- package/dist/lib/model-tiers.js +5 -78
- package/dist/lib/models.d.ts +0 -145
- package/dist/lib/models.js +3 -333
- package/dist/lib/monitors/config.d.ts +0 -187
- package/dist/lib/monitors/config.js +4 -101
- package/dist/lib/monitors/dispatch.d.ts +0 -22
- package/dist/lib/monitors/dispatch.js +0 -35
- package/dist/lib/monitors/engine.d.ts +1 -53
- package/dist/lib/monitors/engine.js +17 -106
- package/dist/lib/monitors/fingerprint.d.ts +0 -43
- package/dist/lib/monitors/fingerprint.js +0 -57
- package/dist/lib/monitors/pid-watch.d.ts +0 -31
- package/dist/lib/monitors/pid-watch.js +0 -31
- package/dist/lib/monitors/remote.d.ts +0 -52
- package/dist/lib/monitors/remote.js +0 -42
- package/dist/lib/monitors/sources/command.d.ts +2 -9
- package/dist/lib/monitors/sources/command.js +13 -34
- package/dist/lib/monitors/sources/device.d.ts +0 -10
- package/dist/lib/monitors/sources/device.js +0 -14
- package/dist/lib/monitors/sources/failure.d.ts +0 -27
- package/dist/lib/monitors/sources/failure.js +0 -27
- package/dist/lib/monitors/sources/file.d.ts +0 -10
- package/dist/lib/monitors/sources/file.js +0 -11
- package/dist/lib/monitors/sources/http.d.ts +0 -7
- package/dist/lib/monitors/sources/http.js +0 -9
- package/dist/lib/monitors/sources/index.d.ts +0 -9
- package/dist/lib/monitors/sources/index.js +0 -9
- package/dist/lib/monitors/sources/poll.d.ts +0 -8
- package/dist/lib/monitors/sources/poll.js +0 -8
- package/dist/lib/monitors/sources/types.d.ts +0 -18
- package/dist/lib/monitors/sources/types.js +0 -8
- package/dist/lib/monitors/sources/webhook.d.ts +0 -7
- package/dist/lib/monitors/sources/webhook.js +0 -7
- package/dist/lib/monitors/sources/ws.d.ts +0 -10
- package/dist/lib/monitors/sources/ws.js +3 -13
- package/dist/lib/monitors/state.d.ts +0 -132
- package/dist/lib/monitors/state.js +2 -86
- package/dist/lib/native-accounts.d.ts +0 -32
- package/dist/lib/native-accounts.js +0 -17
- package/dist/lib/net-close.d.ts +0 -9
- package/dist/lib/net-close.js +0 -5
- package/dist/lib/notify.d.ts +0 -47
- package/dist/lib/notify.js +0 -30
- package/dist/lib/onepassword.d.ts +0 -14
- package/dist/lib/onepassword.js +0 -12
- package/dist/lib/open-url.d.ts +0 -38
- package/dist/lib/open-url.js +1 -69
- package/dist/lib/openclaw-keychain.js +2 -7
- package/dist/lib/operator.d.ts +0 -9
- package/dist/lib/operator.js +0 -34
- package/dist/lib/origin-machine.d.ts +0 -16
- package/dist/lib/origin-machine.js +0 -16
- package/dist/lib/output/git-output.d.ts +0 -31
- package/dist/lib/output/git-output.js +4 -43
- package/dist/lib/overdue.d.ts +0 -35
- package/dist/lib/overdue.js +0 -60
- package/dist/lib/owner-message.d.ts +0 -20
- package/dist/lib/owner-message.js +1 -40
- package/dist/lib/packages/output-home.d.ts +0 -28
- package/dist/lib/packages/output-home.js +0 -114
- package/dist/lib/paths.d.ts +0 -26
- package/dist/lib/paths.js +1 -27
- package/dist/lib/percentile.d.ts +0 -11
- package/dist/lib/percentile.js +0 -11
- package/dist/lib/perf/db.d.ts +0 -16
- package/dist/lib/perf/db.js +3 -32
- package/dist/lib/perf/spool.d.ts +0 -12
- package/dist/lib/perf/spool.js +0 -13
- package/dist/lib/perf/types.d.ts +0 -26
- package/dist/lib/perf/types.js +0 -1
- package/dist/lib/permissions-registry.d.ts +0 -48
- package/dist/lib/permissions-registry.js +0 -108
- package/dist/lib/permissions.d.ts +0 -215
- package/dist/lib/permissions.js +4 -407
- package/dist/lib/picker.d.ts +0 -124
- package/dist/lib/picker.js +0 -140
- package/dist/lib/placement.d.ts +0 -57
- package/dist/lib/placement.js +0 -47
- package/dist/lib/platform/exec.d.ts +0 -73
- package/dist/lib/platform/exec.js +0 -80
- package/dist/lib/platform/index.d.ts +0 -14
- package/dist/lib/platform/index.js +0 -14
- package/dist/lib/platform/ipc.d.ts +0 -10
- package/dist/lib/platform/ipc.js +0 -13
- package/dist/lib/platform/links.d.ts +0 -14
- package/dist/lib/platform/links.js +0 -25
- package/dist/lib/platform/paths.d.ts +0 -48
- package/dist/lib/platform/paths.js +0 -52
- package/dist/lib/platform/posixpath.d.ts +0 -18
- package/dist/lib/platform/posixpath.js +0 -62
- package/dist/lib/platform/process.d.ts +0 -67
- package/dist/lib/platform/process.js +5 -99
- package/dist/lib/platform/winpath.d.ts +0 -50
- package/dist/lib/platform/winpath.js +0 -81
- package/dist/lib/plugins/plugin-marketplace.d.ts +0 -165
- package/dist/lib/plugins/plugin-marketplace.js +10 -238
- package/dist/lib/plugins/plugins.d.ts +0 -238
- package/dist/lib/plugins/plugins.js +20 -454
- package/dist/lib/plugins/skills.d.ts +0 -86
- package/dist/lib/plugins/skills.js +1 -139
- package/dist/lib/pr-land-detach.d.ts +0 -17
- package/dist/lib/pr-land-detach.js +0 -30
- package/dist/lib/pricing/cost.d.ts +0 -29
- package/dist/lib/pricing/cost.js +0 -38
- package/dist/lib/pricing/index.d.ts +0 -6
- package/dist/lib/pricing/index.js +0 -6
- package/dist/lib/pricing/table.d.ts +0 -8
- package/dist/lib/pricing/table.js +3 -56
- package/dist/lib/probe.d.ts +0 -5
- package/dist/lib/probe.js +0 -40
- package/dist/lib/profiles-presets.d.ts +0 -20
- package/dist/lib/profiles-presets.js +1 -36
- package/dist/lib/profiles.d.ts +0 -185
- package/dist/lib/profiles.js +1 -158
- package/dist/lib/project-doctor.d.ts +0 -29
- package/dist/lib/project-doctor.js +0 -26
- package/dist/lib/project-focus.d.ts +0 -41
- package/dist/lib/project-focus.js +0 -49
- package/dist/lib/project-import.d.ts +0 -41
- package/dist/lib/project-import.js +0 -36
- package/dist/lib/project-key.d.ts +0 -65
- package/dist/lib/project-key.js +0 -70
- package/dist/lib/project-launch.d.ts +0 -49
- package/dist/lib/project-launch.js +2 -91
- package/dist/lib/project-probe.d.ts +0 -86
- package/dist/lib/project-probe.js +1 -88
- package/dist/lib/project-pull.d.ts +0 -96
- package/dist/lib/project-pull.js +0 -122
- package/dist/lib/project-resources.d.ts +0 -44
- package/dist/lib/project-resources.js +7 -171
- package/dist/lib/project-root.d.ts +0 -95
- package/dist/lib/project-root.js +0 -101
- package/dist/lib/project-schedule.d.ts +0 -43
- package/dist/lib/project-schedule.js +0 -52
- package/dist/lib/project-status.d.ts +0 -108
- package/dist/lib/project-status.js +0 -117
- package/dist/lib/projects.d.ts +0 -197
- package/dist/lib/projects.js +1 -213
- package/dist/lib/pwsh.d.ts +0 -41
- package/dist/lib/pwsh.js +0 -51
- package/dist/lib/quick-todo.d.ts +84 -0
- package/dist/lib/quick-todo.js +243 -0
- package/dist/lib/reconcile-and-repair.d.ts +0 -78
- package/dist/lib/reconcile-and-repair.js +3 -66
- package/dist/lib/redact.d.ts +0 -29
- package/dist/lib/redact.js +0 -54
- package/dist/lib/refresh-coordinator.d.ts +0 -15
- package/dist/lib/refresh-coordinator.js +0 -10
- package/dist/lib/refresh.d.ts +0 -39
- package/dist/lib/refresh.js +0 -45
- package/dist/lib/registry.d.ts +0 -65
- package/dist/lib/registry.js +0 -127
- package/dist/lib/reminders.d.ts +0 -21
- package/dist/lib/reminders.js +0 -30
- package/dist/lib/remote-agents-json.d.ts +0 -44
- package/dist/lib/remote-agents-json.js +1 -44
- package/dist/lib/reserved-stores.d.ts +0 -28
- package/dist/lib/reserved-stores.js +2 -28
- package/dist/lib/resource-aliases.d.ts +0 -12
- package/dist/lib/resource-aliases.js +0 -12
- package/dist/lib/resource-content-diff.d.ts +0 -28
- package/dist/lib/resource-content-diff.js +7 -34
- package/dist/lib/resource-inventory.d.ts +0 -51
- package/dist/lib/resource-inventory.js +0 -45
- package/dist/lib/resource-patterns.d.ts +0 -32
- package/dist/lib/resource-patterns.js +0 -34
- package/dist/lib/resource-profiles.d.ts +0 -7
- package/dist/lib/resource-profiles.js +0 -11
- package/dist/lib/resources/types.d.ts +0 -50
- package/dist/lib/resources/types.js +0 -7
- package/dist/lib/resources/workflows.d.ts +0 -7
- package/dist/lib/resources/workflows.js +0 -13
- package/dist/lib/resources.d.ts +0 -65
- package/dist/lib/resources.js +0 -78
- package/dist/lib/routers.d.ts +0 -67
- package/dist/lib/routers.js +0 -60
- package/dist/lib/routine-activation.d.ts +0 -23
- package/dist/lib/routine-activation.js +0 -24
- package/dist/lib/routine-context.d.ts +1 -91
- package/dist/lib/routine-context.js +0 -107
- package/dist/lib/routine-notify-owner.d.ts +0 -79
- package/dist/lib/routine-notify-owner.js +1 -103
- package/dist/lib/routine-notify.d.ts +0 -70
- package/dist/lib/routine-notify.js +1 -75
- package/dist/lib/routine-process-cleanup.d.ts +0 -1
- package/dist/lib/routine-process-cleanup.js +1 -4
- package/dist/lib/routine-readiness.d.ts +0 -63
- package/dist/lib/routine-readiness.js +4 -86
- package/dist/lib/routines-format.d.ts +0 -40
- package/dist/lib/routines-format.js +0 -67
- package/dist/lib/routines-placement.d.ts +0 -33
- package/dist/lib/routines-placement.js +0 -40
- package/dist/lib/routines-project.d.ts +0 -57
- package/dist/lib/routines-project.js +6 -80
- package/dist/lib/rules/compile.d.ts +0 -66
- package/dist/lib/rules/compile.js +6 -118
- package/dist/lib/rules/compose.d.ts +0 -56
- package/dist/lib/rules/compose.js +2 -83
- package/dist/lib/rules/rules.d.ts +0 -23
- package/dist/lib/rules/rules.js +0 -35
- package/dist/lib/rules/run-sync.d.ts +0 -16
- package/dist/lib/rules/run-sync.js +1 -44
- package/dist/lib/run-config.d.ts +0 -7
- package/dist/lib/run-config.js +0 -8
- package/dist/lib/run-defaults.d.ts +0 -14
- package/dist/lib/run-defaults.js +0 -14
- package/dist/lib/run-notify.d.ts +0 -18
- package/dist/lib/run-notify.js +0 -36
- package/dist/lib/run-trace-sync.d.ts +0 -21
- package/dist/lib/run-trace-sync.js +2 -66
- package/dist/lib/rush-session.d.ts +0 -26
- package/dist/lib/rush-session.js +0 -28
- package/dist/lib/sandbox.d.ts +0 -45
- package/dist/lib/sandbox.js +5 -93
- package/dist/lib/scheduler.d.ts +0 -28
- package/dist/lib/scheduler.js +0 -45
- package/dist/lib/scheduling/routines.d.ts +0 -652
- package/dist/lib/scheduling/routines.js +8 -475
- package/dist/lib/secrets-cli.d.ts +3 -8
- package/dist/lib/secrets-cli.js +1 -19
- package/dist/lib/secrets-client.d.ts +0 -117
- package/dist/lib/secrets-client.js +4 -275
- package/dist/lib/secrets-policy.d.ts +0 -142
- package/dist/lib/secrets-policy.js +4 -237
- package/dist/lib/secrets-types.d.ts +0 -87
- package/dist/lib/secrets-types.js +0 -13
- package/dist/lib/self-heal/checks/hook-manifest.js +0 -25
- package/dist/lib/self-heal/checks/hook-runtime.js +0 -5
- package/dist/lib/self-heal/checks/install-staging.d.ts +0 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -28
- package/dist/lib/self-heal/checks/menubar-helper.js +0 -5
- package/dist/lib/self-heal/checks/path.js +0 -9
- package/dist/lib/self-heal/checks/resources.js +0 -5
- package/dist/lib/self-heal/checks/shadowing.js +2 -16
- package/dist/lib/self-heal/checks/shims.js +0 -14
- package/dist/lib/self-heal/child.d.ts +12 -0
- package/dist/lib/self-heal/child.js +23 -0
- package/dist/lib/self-heal/registry.d.ts +0 -9
- package/dist/lib/self-heal/registry.js +0 -16
- package/dist/lib/self-heal/types.d.ts +0 -12
- package/dist/lib/self-heal/types.js +0 -15
- package/dist/lib/self-update.d.ts +0 -312
- package/dist/lib/self-update.js +9 -360
- package/dist/lib/service-manifest.d.ts +0 -39
- package/dist/lib/service-manifest.js +0 -72
- package/dist/lib/session/active.d.ts +13 -869
- package/dist/lib/session/active.js +17 -976
- package/dist/lib/session/actor-sidecar.d.ts +1 -32
- package/dist/lib/session/actor-sidecar.js +1 -41
- package/dist/lib/session/bookmarks.d.ts +0 -33
- package/dist/lib/session/bookmarks.js +0 -37
- package/dist/lib/session/bundle.d.ts +0 -86
- package/dist/lib/session/bundle.js +0 -54
- package/dist/lib/session/claude-accounts.d.ts +0 -40
- package/dist/lib/session/claude-accounts.js +0 -49
- package/dist/lib/session/cloud.d.ts +1 -23
- package/dist/lib/session/cloud.js +0 -26
- package/dist/lib/session/db.d.ts +5 -658
- package/dist/lib/session/db.js +22 -1443
- package/dist/lib/session/detached.d.ts +0 -21
- package/dist/lib/session/detached.js +0 -29
- package/dist/lib/session/discover.d.ts +3 -420
- package/dist/lib/session/discover.js +30 -1123
- package/dist/lib/session/fork.d.ts +1 -41
- package/dist/lib/session/fork.js +0 -19
- package/dist/lib/session/ghostty-tabs.d.ts +0 -24
- package/dist/lib/session/ghostty-tabs.js +0 -37
- package/dist/lib/session/glance-files.d.ts +19 -0
- package/dist/lib/session/glance-files.js +258 -0
- package/dist/lib/session/hook-sessions.d.ts +0 -33
- package/dist/lib/session/hook-sessions.js +4 -99
- package/dist/lib/session/host-link.d.ts +1 -94
- package/dist/lib/session/host-link.js +1 -81
- package/dist/lib/session/inject-target.d.ts +8 -0
- package/dist/lib/session/inject-target.js +32 -0
- package/dist/lib/session/inject.d.ts +0 -15
- package/dist/lib/session/inject.js +0 -15
- package/dist/lib/session/live-metadata.d.ts +1 -34
- package/dist/lib/session/live-metadata.js +1 -73
- package/dist/lib/session/local-tmux-attach.d.ts +0 -37
- package/dist/lib/session/local-tmux-attach.js +1 -76
- package/dist/lib/session/migrate-targets.d.ts +0 -46
- package/dist/lib/session/migrate-targets.js +0 -24
- package/dist/lib/session/migrations.d.ts +0 -12
- package/dist/lib/session/migrations.js +1 -20
- package/dist/lib/session/mirror.d.ts +0 -32
- package/dist/lib/session/mirror.js +0 -77
- package/dist/lib/session/origin-machine.js +0 -3
- package/dist/lib/session/pid-registry.d.ts +0 -80
- package/dist/lib/session/pid-registry.js +2 -81
- package/dist/lib/session/presence.d.ts +0 -39
- package/dist/lib/session/presence.js +2 -52
- package/dist/lib/session/process-view.d.ts +0 -11
- package/dist/lib/session/process-view.js +0 -25
- package/dist/lib/session/projection.d.ts +0 -3
- package/dist/lib/session/projection.js +0 -10
- package/dist/lib/session/provenance.d.ts +1 -37
- package/dist/lib/session/provenance.js +0 -69
- package/dist/lib/session/recovery.d.ts +1 -40
- package/dist/lib/session/recovery.js +2 -80
- package/dist/lib/session/relative-time.js +0 -3
- package/dist/lib/session/remote/peer-stream.d.ts +0 -42
- package/dist/lib/session/remote/peer-stream.js +0 -64
- package/dist/lib/session/remote/remote-bundle.d.ts +0 -6
- package/dist/lib/session/remote/remote-bundle.js +0 -21
- package/dist/lib/session/remote/remote-list.d.ts +1 -110
- package/dist/lib/session/remote/remote-list.js +5 -139
- package/dist/lib/session/remote/remote.d.ts +0 -98
- package/dist/lib/session/remote/remote.js +3 -119
- package/dist/lib/session/remote/watch.d.ts +1 -34
- package/dist/lib/session/remote/watch.js +12 -72
- package/dist/lib/session/remote-active.d.ts +0 -35
- package/dist/lib/session/remote-active.js +0 -48
- package/dist/lib/session/remote-bundle.js +0 -2
- package/dist/lib/session/remote-list.js +0 -2
- package/dist/lib/session/remote-preview-cache.d.ts +0 -7
- package/dist/lib/session/remote-preview-cache.js +1 -76
- package/dist/lib/session/remote.js +0 -2
- package/dist/lib/session/resume-command.d.ts +0 -6
- package/dist/lib/session/resume-command.js +0 -6
- package/dist/lib/session/resume-owner.d.ts +1 -52
- package/dist/lib/session/resume-owner.js +0 -56
- package/dist/lib/session/run-names.d.ts +0 -24
- package/dist/lib/session/run-names.js +0 -26
- package/dist/lib/session/session-cache.d.ts +2 -146
- package/dist/lib/session/session-cache.js +26 -203
- package/dist/lib/session/short-id.js +0 -3
- package/dist/lib/session/sync/agents.d.ts +0 -68
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +0 -39
- package/dist/lib/session/sync/backend.js +0 -45
- package/dist/lib/session/sync/config.d.ts +0 -27
- package/dist/lib/session/sync/config.js +0 -56
- package/dist/lib/session/sync/managed-config.d.ts +0 -17
- package/dist/lib/session/sync/managed-config.js +0 -17
- package/dist/lib/session/sync/managed-key.d.ts +0 -38
- package/dist/lib/session/sync/managed-key.js +1 -42
- package/dist/lib/session/sync/net-client.d.ts +0 -36
- package/dist/lib/session/sync/net-client.js +0 -30
- package/dist/lib/session/sync/provision.d.ts +0 -2
- package/dist/lib/session/sync/provision.js +0 -13
- package/dist/lib/session/sync/r2.d.ts +0 -20
- package/dist/lib/session/sync/r2.js +0 -20
- package/dist/lib/session/sync/transcript-crypto.d.ts +0 -37
- package/dist/lib/session/sync/transcript-crypto.js +5 -37
- package/dist/lib/session/sync/worker-template.d.ts +0 -5
- package/dist/lib/session/sync/worker-template.js +0 -40
- package/dist/lib/session/testdata/pid-registry-namespace.js +0 -2
- package/dist/lib/session/testdata/process-view-private.js +0 -1
- package/dist/lib/session/throughput.d.ts +0 -24
- package/dist/lib/session/throughput.js +1 -25
- package/dist/lib/session/timeline-pass.d.ts +1 -63
- package/dist/lib/session/timeline-pass.js +161 -148
- package/dist/lib/session/title.d.ts +0 -182
- package/dist/lib/session/title.js +0 -139
- package/dist/lib/session/tool-index.d.ts +2 -21
- package/dist/lib/session/tool-index.js +3 -75
- package/dist/lib/session/tool-store.d.ts +2 -48
- package/dist/lib/session/tool-store.js +1 -33
- package/dist/lib/session/viewing-in.d.ts +0 -67
- package/dist/lib/session/viewing-in.js +1 -71
- package/dist/lib/session/watch.js +0 -2
- package/dist/lib/session/width.js +0 -3
- package/dist/lib/sessions-client.d.ts +0 -46
- package/dist/lib/sessions-client.js +36 -113
- package/dist/lib/settings-manifest.d.ts +1 -17
- package/dist/lib/settings-manifest.js +4 -57
- package/dist/lib/setup-tool-install.d.ts +0 -1
- package/dist/lib/setup-tool-install.js +2 -7
- package/dist/lib/setup-tool-status.d.ts +0 -3
- package/dist/lib/setup-tool-status.js +4 -14
- package/dist/lib/sha256-asset.d.ts +0 -20
- package/dist/lib/sha256-asset.js +0 -20
- package/dist/lib/share-runtime.d.ts +0 -10
- package/dist/lib/share-runtime.js +1 -27
- package/dist/lib/shim-heal.d.ts +0 -15
- package/dist/lib/shim-heal.js +3 -29
- package/dist/lib/signin-badge.d.ts +0 -72
- package/dist/lib/signin-badge.js +0 -86
- package/dist/lib/sink-format.d.ts +0 -32
- package/dist/lib/sink-format.js +0 -14
- package/dist/lib/smart-launch.d.ts +0 -75
- package/dist/lib/smart-launch.js +1 -83
- package/dist/lib/snapshot.d.ts +0 -46
- package/dist/lib/snapshot.js +5 -31
- package/dist/lib/spinner.d.ts +0 -37
- package/dist/lib/spinner.js +0 -37
- package/dist/lib/sqlite.d.ts +0 -13
- package/dist/lib/sqlite.js +3 -71
- package/dist/lib/ssh-exec.d.ts +0 -209
- package/dist/lib/ssh-exec.js +11 -248
- package/dist/lib/ssh-tunnel.d.ts +0 -43
- package/dist/lib/ssh-tunnel.js +2 -48
- package/dist/lib/staleness/checkers/commands.d.ts +0 -4
- package/dist/lib/staleness/checkers/commands.js +0 -4
- package/dist/lib/staleness/checkers/hooks.d.ts +0 -10
- package/dist/lib/staleness/checkers/hooks.js +0 -15
- package/dist/lib/staleness/checkers/mcp.d.ts +0 -9
- package/dist/lib/staleness/checkers/mcp.js +0 -9
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -12
- package/dist/lib/staleness/checkers/permissions.js +0 -13
- package/dist/lib/staleness/checkers/plugins.d.ts +0 -8
- package/dist/lib/staleness/checkers/plugins.js +0 -8
- package/dist/lib/staleness/checkers/rules.d.ts +0 -15
- package/dist/lib/staleness/checkers/rules.js +0 -26
- package/dist/lib/staleness/checkers/skills.d.ts +0 -4
- package/dist/lib/staleness/checkers/skills.js +0 -4
- package/dist/lib/staleness/checkers/subagents.d.ts +0 -9
- package/dist/lib/staleness/checkers/subagents.js +0 -9
- package/dist/lib/staleness/checkers/types.d.ts +0 -34
- package/dist/lib/staleness/checkers/types.js +0 -19
- package/dist/lib/staleness/checkers/workflows.d.ts +0 -7
- package/dist/lib/staleness/checkers/workflows.js +0 -7
- package/dist/lib/staleness/detectors/commands.js +0 -17
- package/dist/lib/staleness/detectors/hooks.js +1 -6
- package/dist/lib/staleness/detectors/mcp.js +0 -4
- package/dist/lib/staleness/detectors/permissions.js +10 -23
- package/dist/lib/staleness/detectors/rules.js +0 -6
- package/dist/lib/staleness/detectors/skills.d.ts +0 -1
- package/dist/lib/staleness/detectors/skills.js +1 -12
- package/dist/lib/staleness/detectors/types.d.ts +0 -10
- package/dist/lib/staleness/fingerprint.d.ts +0 -19
- package/dist/lib/staleness/fingerprint.js +0 -35
- package/dist/lib/staleness/index.d.ts +0 -28
- package/dist/lib/staleness/index.js +1 -45
- package/dist/lib/staleness/layers.d.ts +0 -23
- package/dist/lib/staleness/layers.js +0 -34
- package/dist/lib/staleness/prune.d.ts +0 -71
- package/dist/lib/staleness/prune.js +2 -27
- package/dist/lib/staleness/registry.d.ts +0 -10
- package/dist/lib/staleness/registry.js +3 -33
- package/dist/lib/staleness/types.d.ts +0 -36
- package/dist/lib/staleness/types.js +0 -5
- package/dist/lib/staleness/writers/commands.js +1 -48
- package/dist/lib/staleness/writers/hooks.js +1 -18
- package/dist/lib/staleness/writers/kinds.d.ts +0 -12
- package/dist/lib/staleness/writers/kinds.js +0 -1
- package/dist/lib/staleness/writers/lazy-map.d.ts +0 -11
- package/dist/lib/staleness/writers/mcp.js +0 -13
- package/dist/lib/staleness/writers/plugins.js +0 -4
- package/dist/lib/staleness/writers/rules.d.ts +0 -1
- package/dist/lib/staleness/writers/rules.js +1 -19
- package/dist/lib/staleness/writers/skills.js +3 -14
- package/dist/lib/staleness/writers/sources.d.ts +0 -11
- package/dist/lib/staleness/writers/sources.js +0 -32
- package/dist/lib/staleness/writers/subagents.js +0 -16
- package/dist/lib/staleness/writers/types.d.ts +0 -58
- package/dist/lib/staleness/writers/workflows.js +1 -1
- package/dist/lib/standalone-tools.d.ts +24 -0
- package/dist/lib/standalone-tools.js +58 -0
- package/dist/lib/star-nudge.d.ts +0 -32
- package/dist/lib/star-nudge.js +2 -36
- package/dist/lib/startup/command-registry.d.ts +0 -45
- package/dist/lib/startup/command-registry.js +1 -46
- package/dist/lib/startup/dev-build.d.ts +0 -9
- package/dist/lib/startup/dev-build.js +1 -42
- package/dist/lib/startup/root-command.d.ts +0 -19
- package/dist/lib/startup/root-command.js +0 -19
- package/dist/lib/startup/spellcheck.d.ts +0 -13
- package/dist/lib/startup/spellcheck.js +0 -13
- package/dist/lib/state.d.ts +0 -376
- package/dist/lib/state.js +19 -737
- package/dist/lib/storage/selection.d.ts +0 -40
- package/dist/lib/storage/selection.js +0 -29
- package/dist/lib/subagents-registry.d.ts +0 -56
- package/dist/lib/subagents-registry.js +0 -99
- package/dist/lib/subagents.d.ts +0 -128
- package/dist/lib/subagents.js +1 -158
- package/dist/lib/summarizer/config.d.ts +0 -37
- package/dist/lib/summarizer/config.js +0 -37
- package/dist/lib/summarizer/pass.d.ts +0 -20
- package/dist/lib/summarizer/pass.js +1 -34
- package/dist/lib/summarizer/summarize.d.ts +1 -49
- package/dist/lib/summarizer/summarize.js +0 -35
- package/dist/lib/sync-passphrase.d.ts +0 -16
- package/dist/lib/sync-passphrase.js +1 -18
- package/dist/lib/sync-status.d.ts +0 -72
- package/dist/lib/sync-status.js +0 -55
- package/dist/lib/sync-umbrella.d.ts +0 -54
- package/dist/lib/sync-umbrella.js +0 -48
- package/dist/lib/system-run-sync.d.ts +0 -5
- package/dist/lib/system-run-sync.js +1 -31
- package/dist/lib/teams/agents.d.ts +1 -444
- package/dist/lib/teams/agents.js +11 -871
- package/dist/lib/teams/api.d.ts +2 -52
- package/dist/lib/teams/api.js +4 -63
- package/dist/lib/teams/debug.d.ts +0 -6
- package/dist/lib/teams/debug.js +0 -6
- package/dist/lib/teams/delivery.d.ts +0 -41
- package/dist/lib/teams/delivery.js +0 -32
- package/dist/lib/teams/file_ops.d.ts +0 -11
- package/dist/lib/teams/file_ops.js +0 -11
- package/dist/lib/teams/forEach.d.ts +0 -76
- package/dist/lib/teams/forEach.js +1 -77
- package/dist/lib/teams/index.d.ts +1 -7
- package/dist/lib/teams/index.js +1 -7
- package/dist/lib/teams/parsers.d.ts +0 -4
- package/dist/lib/teams/parsers.js +0 -81
- package/dist/lib/teams/persistence.d.ts +0 -2
- package/dist/lib/teams/persistence.js +0 -12
- package/dist/lib/teams/placement-probe.d.ts +0 -12
- package/dist/lib/teams/placement-probe.js +1 -51
- package/dist/lib/teams/pr-watch.d.ts +0 -107
- package/dist/lib/teams/pr-watch.js +1 -107
- package/dist/lib/teams/registry.d.ts +0 -36
- package/dist/lib/teams/registry.js +0 -47
- package/dist/lib/teams/remoteWorktree.d.ts +0 -50
- package/dist/lib/teams/remoteWorktree.js +1 -96
- package/dist/lib/teams/scheduler.d.ts +0 -111
- package/dist/lib/teams/scheduler.js +2 -125
- package/dist/lib/teams/summarizer.d.ts +0 -22
- package/dist/lib/teams/summarizer.js +6 -50
- package/dist/lib/teams/supervisor.d.ts +0 -38
- package/dist/lib/teams/supervisor.js +0 -21
- package/dist/lib/teams/worktree.d.ts +0 -95
- package/dist/lib/teams/worktree.js +3 -110
- package/dist/lib/template.d.ts +0 -21
- package/dist/lib/template.js +0 -23
- package/dist/lib/term-client.d.ts +0 -26
- package/dist/lib/term-client.js +0 -48
- package/dist/lib/term-driver.d.ts +0 -5
- package/dist/lib/term-driver.js +0 -8
- package/dist/lib/terminal/backends/ghostty.d.ts +0 -2
- package/dist/lib/terminal/backends/ghostty.js +0 -12
- package/dist/lib/terminal/backends/index.d.ts +0 -17
- package/dist/lib/terminal/backends/index.js +0 -15
- package/dist/lib/terminal/backends/iterm.d.ts +0 -2
- package/dist/lib/terminal/backends/iterm.js +0 -10
- package/dist/lib/terminal/backends/terminal-app.d.ts +0 -10
- package/dist/lib/terminal/backends/terminal-app.js +0 -30
- package/dist/lib/terminal/backends/tmux.d.ts +0 -10
- package/dist/lib/terminal/backends/tmux.js +0 -2
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +0 -25
- package/dist/lib/terminal/backends/vscodium-agent.js +0 -36
- package/dist/lib/terminal/engine.d.ts +0 -17
- package/dist/lib/terminal/engine.js +0 -10
- package/dist/lib/terminal/index.d.ts +0 -8
- package/dist/lib/terminal/inject.d.ts +1 -173
- package/dist/lib/terminal/inject.js +0 -146
- package/dist/lib/terminal/policy.d.ts +0 -8
- package/dist/lib/terminal/policy.js +0 -1
- package/dist/lib/terminal/preferred.d.ts +0 -66
- package/dist/lib/terminal/preferred.js +0 -30
- package/dist/lib/terminal/quote.d.ts +0 -8
- package/dist/lib/terminal/quote.js +0 -8
- package/dist/lib/terminal/resolve.d.ts +0 -46
- package/dist/lib/terminal/resolve.js +0 -30
- package/dist/lib/terminal/run-surface.d.ts +0 -56
- package/dist/lib/terminal/run-surface.js +0 -46
- package/dist/lib/terminal/shell.d.ts +0 -3
- package/dist/lib/terminal/shell.js +0 -13
- package/dist/lib/terminal/transport.d.ts +0 -14
- package/dist/lib/terminal/transport.js +1 -30
- package/dist/lib/terminal/types.d.ts +0 -40
- package/dist/lib/terminal/types.js +0 -10
- package/dist/lib/text/relative-time.d.ts +0 -36
- package/dist/lib/text/relative-time.js +0 -43
- package/dist/lib/text/short-id.d.ts +0 -16
- package/dist/lib/text/short-id.js +0 -16
- package/dist/lib/text/width.d.ts +0 -24
- package/dist/lib/text/width.js +10 -52
- package/dist/lib/tmux/binary.d.ts +0 -36
- package/dist/lib/tmux/binary.js +0 -28
- package/dist/lib/tmux/index.d.ts +0 -5
- package/dist/lib/tmux/index.js +0 -5
- package/dist/lib/tmux/orphan-reap.d.ts +0 -253
- package/dist/lib/tmux/orphan-reap.js +3 -299
- package/dist/lib/tmux/paths.d.ts +0 -14
- package/dist/lib/tmux/paths.js +0 -14
- package/dist/lib/tmux/session.d.ts +0 -263
- package/dist/lib/tmux/session.js +6 -344
- package/dist/lib/traces/backend.d.ts +0 -20
- package/dist/lib/traces/backend.js +0 -23
- package/dist/lib/traces/classify.d.ts +0 -20
- package/dist/lib/traces/classify.js +0 -7
- package/dist/lib/traces/insights.d.ts +1 -84
- package/dist/lib/traces/insights.js +0 -126
- package/dist/lib/traces/phenotype.d.ts +0 -69
- package/dist/lib/traces/phenotype.js +0 -150
- package/dist/lib/traces/provision.d.ts +0 -1
- package/dist/lib/traces/provision.js +0 -5
- package/dist/lib/traces/schema2-build.d.ts +3 -60
- package/dist/lib/traces/schema2-build.js +8 -149
- package/dist/lib/traces/schema2-danger.d.ts +0 -30
- package/dist/lib/traces/schema2-danger.js +1 -63
- package/dist/lib/traces/schema2.d.ts +0 -11
- package/dist/lib/traces/segments.d.ts +0 -44
- package/dist/lib/traces/segments.js +0 -65
- package/dist/lib/traces/sync.d.ts +2 -239
- package/dist/lib/traces/sync.js +15 -237
- package/dist/lib/traces/worker-template.d.ts +0 -3
- package/dist/lib/traces/worker-template.js +0 -29
- package/dist/lib/triggers/handlers.d.ts +0 -82
- package/dist/lib/triggers/handlers.js +0 -75
- package/dist/lib/triggers/webhook.d.ts +0 -158
- package/dist/lib/triggers/webhook.js +0 -143
- package/dist/lib/types.d.ts +0 -736
- package/dist/lib/types.js +0 -50
- package/dist/lib/uninstall.d.ts +0 -17
- package/dist/lib/uninstall.js +0 -75
- package/dist/lib/usage-backoff.d.ts +0 -20
- package/dist/lib/usage-backoff.js +3 -60
- package/dist/lib/usage-refresh.d.ts +0 -154
- package/dist/lib/usage-refresh.js +8 -212
- package/dist/lib/verbs.d.ts +0 -12
- package/dist/lib/verbs.js +0 -12
- package/dist/lib/version-duplicates.d.ts +0 -6
- package/dist/lib/version-duplicates.js +0 -6
- package/dist/lib/version.d.ts +0 -55
- package/dist/lib/version.js +1 -58
- package/dist/lib/view-types.d.ts +0 -48
- package/dist/lib/warn-unpushed.d.ts +0 -27
- package/dist/lib/warn-unpushed.js +1 -45
- package/dist/lib/watchdog/history.d.ts +0 -1
- package/dist/lib/watchdog/history.js +0 -3
- package/dist/lib/watchdog/index.js +0 -2
- package/dist/lib/watchdog/log.d.ts +0 -19
- package/dist/lib/watchdog/log.js +0 -34
- package/dist/lib/watchdog/read.d.ts +0 -27
- package/dist/lib/watchdog/read.js +3 -58
- package/dist/lib/watchdog/rotate.d.ts +0 -139
- package/dist/lib/watchdog/rotate.js +2 -151
- package/dist/lib/watchdog/runner.d.ts +0 -125
- package/dist/lib/watchdog/runner.js +3 -223
- package/dist/lib/watchdog/service.d.ts +0 -1
- package/dist/lib/watchdog/service.js +0 -2
- package/dist/lib/watchdog/watchdog-agent.d.ts +0 -31
- package/dist/lib/watchdog/watchdog-agent.js +0 -27
- package/dist/lib/watchdog/watchdog.d.ts +0 -7
- package/dist/lib/watchdog/watchdog.js +0 -10
- package/dist/lib/watchdog/watchdogTail.js +0 -7
- package/dist/lib/whats-new.d.ts +0 -10
- package/dist/lib/whats-new.js +0 -21
- package/dist/lib/workflows-registry.d.ts +0 -45
- package/dist/lib/workflows-registry.js +0 -60
- package/dist/lib/workflows.d.ts +0 -282
- package/dist/lib/workflows.js +3 -213
- package/dist/lib/worktree/held.d.ts +0 -89
- package/dist/lib/worktree/held.js +1 -103
- package/dist/lib/wrap.d.ts +0 -32
- package/dist/lib/wrap.js +0 -32
- package/dist/lib/yaml-io.d.ts +0 -45
- package/dist/lib/yaml-io.js +0 -47
- package/dist/session-tracker/dist/adapters/claude.js +0 -2
- package/dist/session-tracker/dist/hook.sh +4 -37
- package/dist/session-tracker/dist/index.d.ts +0 -7
- package/dist/session-tracker/dist/index.js +0 -5
- package/dist/session-tracker/dist/install-hook.d.ts +0 -5
- package/dist/session-tracker/dist/install-hook.js +1 -15
- package/dist/session-tracker/dist/prune-state.js +0 -4
- package/dist/session-tracker/dist/reader.js +0 -4
- package/dist/session-tracker/dist/state-file.d.ts +0 -3
- package/dist/session-tracker/dist/state-file.js +3 -8
- package/package.json +3 -4
- package/scripts/postinstall.js +8 -116
- package/dist/lib/session/artifacts.d.ts +0 -14
- package/dist/lib/session/artifacts.js +0 -101
- package/dist/lib/session/bash-command.d.ts +0 -63
- package/dist/lib/session/bash-command.js +0 -490
- package/dist/lib/session/digest.d.ts +0 -66
- package/dist/lib/session/digest.js +0 -328
- package/dist/lib/session/highlights.d.ts +0 -151
- package/dist/lib/session/highlights.js +0 -391
- package/dist/lib/session/insights.d.ts +0 -165
- package/dist/lib/session/insights.js +0 -563
- package/dist/lib/session/linear.d.ts +0 -19
- package/dist/lib/session/linear.js +0 -99
- package/dist/lib/session/parse.d.ts +0 -224
- package/dist/lib/session/parse.js +0 -2408
- package/dist/lib/session/prompt.d.ts +0 -213
- package/dist/lib/session/prompt.js +0 -601
- package/dist/lib/session/render.d.ts +0 -133
- package/dist/lib/session/render.js +0 -1047
- package/dist/lib/session/share-html.d.ts +0 -35
- package/dist/lib/session/share-html.js +0 -319
- package/dist/lib/session/shell-programs.d.ts +0 -33
- package/dist/lib/session/shell-programs.js +0 -380
- package/dist/lib/session/state.d.ts +0 -269
- package/dist/lib/session/state.js +0 -777
- package/dist/lib/session/stream-render.d.ts +0 -4
- package/dist/lib/session/stream-render.js +0 -131
- package/dist/lib/session/tail.d.ts +0 -88
- package/dist/lib/session/tail.js +0 -294
- package/dist/lib/session/team-filter.d.ts +0 -129
- package/dist/lib/session/team-filter.js +0 -269
- package/dist/lib/session/timeline.d.ts +0 -172
- package/dist/lib/session/timeline.js +0 -636
- package/dist/lib/session/tool-calls.d.ts +0 -132
- package/dist/lib/session/tool-calls.js +0 -674
- package/dist/lib/session/trajectory-compare.d.ts +0 -48
- package/dist/lib/session/trajectory-compare.js +0 -116
- package/dist/lib/session/trajectory-html.d.ts +0 -19
- package/dist/lib/session/trajectory-html.js +0 -771
- package/dist/lib/session/trajectory-lineage.d.ts +0 -93
- package/dist/lib/session/trajectory-lineage.js +0 -195
- package/dist/lib/session/trajectory-text.d.ts +0 -38
- package/dist/lib/session/trajectory-text.js +0 -284
- package/dist/lib/session/trajectory.d.ts +0 -145
- package/dist/lib/session/trajectory.js +0 -394
- package/dist/lib/session/types.d.ts +0 -627
- package/dist/lib/session/types.js +0 -43
package/dist/commands/teams.js
CHANGED
|
@@ -51,7 +51,6 @@ const AGENT_NAMES = {
|
|
|
51
51
|
warp: 'Warp',
|
|
52
52
|
};
|
|
53
53
|
const VALID_AGENTS = ['claude', 'codex', 'cursor', 'opencode', 'grok', 'antigravity', 'kimi', 'droid', 'warp'];
|
|
54
|
-
// 'full' kept as historical alias for 'skip'; normalized to 'skip' downstream.
|
|
55
54
|
const VALID_MODES = ['plan', 'edit', 'auto', 'skip', 'full'];
|
|
56
55
|
const VALID_EFFORTS = ['low', 'medium', 'high', 'xhigh', 'max', 'auto'];
|
|
57
56
|
const VALID_CLOUD_PROVIDERS = ['rush', 'codex', 'factory'];
|
|
@@ -60,8 +59,8 @@ function statusColor(status) {
|
|
|
60
59
|
case 'pending': return chalk.blue;
|
|
61
60
|
case 'running': return chalk.yellow;
|
|
62
61
|
case 'completed': return chalk.green;
|
|
63
|
-
case 'pr_open': return chalk.magenta;
|
|
64
|
-
case 'stranded': return chalk.yellow;
|
|
62
|
+
case 'pr_open': return chalk.magenta;
|
|
63
|
+
case 'stranded': return chalk.yellow;
|
|
65
64
|
case 'failed': return chalk.red;
|
|
66
65
|
case 'stopped': return chalk.gray;
|
|
67
66
|
default: return chalk.white;
|
|
@@ -157,11 +156,6 @@ function fullName(type, version) {
|
|
|
157
156
|
const name = AGENT_NAMES[type];
|
|
158
157
|
return version ? `${name} ${version}` : name;
|
|
159
158
|
}
|
|
160
|
-
/**
|
|
161
|
-
* One-line operator nudge after `teams start`: teammates are briefed to post
|
|
162
|
-
* IMPORTANT milestones to the feed (RUSH-2250), and this is how to watch them.
|
|
163
|
-
* Print-only — no engine behavior.
|
|
164
|
-
*/
|
|
165
159
|
export function printFeedHint(team) {
|
|
166
160
|
console.log(chalk.gray('Tip: teammates post IMPORTANT milestones to the feed (') +
|
|
167
161
|
chalk.cyan('agents feed timeline') +
|
|
@@ -169,20 +163,6 @@ export function printFeedHint(team) {
|
|
|
169
163
|
chalk.cyan(`agents teams status ${team}`) +
|
|
170
164
|
chalk.gray('.'));
|
|
171
165
|
}
|
|
172
|
-
/**
|
|
173
|
-
* Resolve a teammate spec to its execution target.
|
|
174
|
-
*
|
|
175
|
-
* Accepts:
|
|
176
|
-
* - `claude` — default version of an installed agent
|
|
177
|
-
* - `claude@2.1.112` — pinned version of an installed agent
|
|
178
|
-
* - `<profile-name>` — runs through `agents run <profile>`, with the
|
|
179
|
-
* profile's host agent used as the underlying
|
|
180
|
-
* AgentType for event parsing and CLI checks.
|
|
181
|
-
*
|
|
182
|
-
* `agent` is always the underlying harness so event parsers, CLI-availability
|
|
183
|
-
* checks, and version pins keep working. `profileName` is set only when the
|
|
184
|
-
* spec resolved through a profile.
|
|
185
|
-
*/
|
|
186
166
|
function parseTeammate(spec) {
|
|
187
167
|
const [name, version] = spec.split('@');
|
|
188
168
|
if (VALID_AGENTS.includes(name)) {
|
|
@@ -193,9 +173,6 @@ function parseTeammate(spec) {
|
|
|
193
173
|
profileName: null,
|
|
194
174
|
};
|
|
195
175
|
}
|
|
196
|
-
// Not a built-in agent id — try resolving as a profile name. A profile
|
|
197
|
-
// pinning a version is allowed; `profile@<override>` is not (would conflict
|
|
198
|
-
// with the profile's own host.version).
|
|
199
176
|
if (!version && profileExists(name)) {
|
|
200
177
|
try {
|
|
201
178
|
const profile = readProfile(name);
|
|
@@ -215,14 +192,6 @@ function parseTeammate(spec) {
|
|
|
215
192
|
function shortId(id) {
|
|
216
193
|
return id.slice(0, 8);
|
|
217
194
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Decide how a follow-up to a teammate is delivered from its reconciled status.
|
|
220
|
-
* Pure — the source of truth for the routing table, unit-tested without I/O.
|
|
221
|
-
* - pending -> not-started (tell them to `teams start`)
|
|
222
|
-
* - running + message -> steer (mailbox)
|
|
223
|
-
* - stopped/etc + message -> resume (re-enter session)
|
|
224
|
-
* - any actionable + no message -> need-message
|
|
225
|
-
*/
|
|
226
195
|
export function decideTeamMessageRoute(status, hasMessage) {
|
|
227
196
|
if (status === AgentStatus.PENDING)
|
|
228
197
|
return { kind: 'not-started' };
|
|
@@ -232,11 +201,6 @@ export function decideTeamMessageRoute(status, hasMessage) {
|
|
|
232
201
|
return { kind: 'steer' };
|
|
233
202
|
return { kind: 'resume' };
|
|
234
203
|
}
|
|
235
|
-
/**
|
|
236
|
-
* Preamble injected into every factory worker's prompt. Tells the worker
|
|
237
|
-
* which team + teammate name + task-type it is, and how to file new tasks.
|
|
238
|
-
* The actual how-to lives in the /factory-worker skill.
|
|
239
|
-
*/
|
|
240
204
|
function factoryWorkerPreamble(team, name, taskType, after) {
|
|
241
205
|
const n = name ?? '<anonymous>';
|
|
242
206
|
const deps = after.length > 0 ? after.join(', ') : '(none)';
|
|
@@ -255,33 +219,6 @@ function factoryWorkerPreamble(team, name, taskType, after) {
|
|
|
255
219
|
function mkManager() {
|
|
256
220
|
return new AgentManager();
|
|
257
221
|
}
|
|
258
|
-
/**
|
|
259
|
-
* Tell the user a worktree from a failed `teams add` is still on disk, and give
|
|
260
|
-
* them the exact commands to remove it. Reached only when we could not remove it
|
|
261
|
-
* ourselves — a leftover `agents/<name>` branch is what makes the retry fail with
|
|
262
|
-
* `fatal: a branch ... already exists`, so it must never be silent (RUSH-2356).
|
|
263
|
-
*/
|
|
264
|
-
/**
|
|
265
|
-
* Tear down a worktree a failed operation left behind — but ONLY if it is a
|
|
266
|
-
* genuine orphan.
|
|
267
|
-
*
|
|
268
|
-
* Extracted because this guard was hand-duplicated at two call sites (`teams
|
|
269
|
-
* add` and the pr-watch fixer) and the copy at the fixer path was written
|
|
270
|
-
* WITHOUT it, which is RUSH-2356 reoccurring at the one site that skipped the
|
|
271
|
-
* check. One implementation, one place to get it right.
|
|
272
|
-
*
|
|
273
|
-
* The two errors here are not symmetric, so the guard deliberately fails
|
|
274
|
-
* CLOSED: a spurious "claimed" strands a branch a human can delete, while a
|
|
275
|
-
* spurious "unclaimed" runs `git worktree remove --force` over a live
|
|
276
|
-
* teammate's checkout and destroys uncommitted work. So an unreadable record
|
|
277
|
-
* means "leave it alone and tell the user", never "assume it is free".
|
|
278
|
-
*
|
|
279
|
-
* A staged teammate is exactly the case that makes this necessary: `spawn()`
|
|
280
|
-
* persists its meta.json and only THEN runs the retention pass, which refreshes
|
|
281
|
-
* every sibling and can throw on a distributed one — so a failure can land here
|
|
282
|
-
* with a live, durably-recorded, merely-pending `--after` teammate already
|
|
283
|
-
* owning this worktree.
|
|
284
|
-
*/
|
|
285
222
|
export async function tearDownOrphanWorktree(mgr, baseCwd, name) {
|
|
286
223
|
try {
|
|
287
224
|
if (await mgr.isWorktreeClaimed(name))
|
|
@@ -303,34 +240,15 @@ function warnOrphanWorktree(baseCwd, name, reason) {
|
|
|
303
240
|
` Remove it manually: git -C ${baseCwd} worktree remove --force .agents/worktrees/${name} ` +
|
|
304
241
|
`&& git -C ${baseCwd} branch -D agents/${name}\n`));
|
|
305
242
|
}
|
|
306
|
-
/** Pluralize a commit count: "1 commit" / "3 commits". */
|
|
307
243
|
function commitsWord(behind) {
|
|
308
244
|
return `${behind} commit${behind === 1 ? '' : 's'}`;
|
|
309
245
|
}
|
|
310
|
-
/**
|
|
311
|
-
* The blocking message when `teams add` is pointed at a stale checkout. Pure so
|
|
312
|
-
* the guidance is pinned by tests (mirrors `remoteCwdOnAddError`): it MUST name
|
|
313
|
-
* how far behind, tell the caller to sync with remote main, and mention `--confirm`
|
|
314
|
-
* as the override.
|
|
315
|
-
*/
|
|
316
246
|
export function staleRepoError(params) {
|
|
317
247
|
return (`${params.where} is ${commitsWord(params.behind)} behind origin/${params.base}. ` +
|
|
318
248
|
`A team started here would build on stale code — bring it up to date with remote main first:\n` +
|
|
319
249
|
` ${params.sync}\n` +
|
|
320
250
|
`Then re-run \`agents teams add ${params.team} …\`, or pass --confirm to start on the stale repo anyway.`);
|
|
321
251
|
}
|
|
322
|
-
/**
|
|
323
|
-
* Guard against pointing a team at a stale checkout. Before a teammate is bound
|
|
324
|
-
* to a repo, this fetches origin and counts how far behind `origin/<default>` the
|
|
325
|
-
* base checkout is (the local cwd, or the repo provisioned on a `--device` host).
|
|
326
|
-
* If it is behind and the caller did NOT pass `--confirm`, the add is refused with
|
|
327
|
-
* {@link staleRepoError} — because a team started on stale code reasons and builds
|
|
328
|
-
* against a tree that has already moved on (the 71-commit-stale s1 checkout
|
|
329
|
-
* incident). With `--confirm` it prints a one-line advisory and proceeds.
|
|
330
|
-
*
|
|
331
|
-
* A `null` behind-count (offline, non-repo, unreachable host) is "can't tell" and
|
|
332
|
-
* never blocks — this is a freshness nudge, not a hard prerequisite.
|
|
333
|
-
*/
|
|
334
252
|
async function assertRepoFreshOrConfirm(params) {
|
|
335
253
|
const { team, confirm, json } = params;
|
|
336
254
|
const res = params.remote
|
|
@@ -354,11 +272,6 @@ async function assertRepoFreshOrConfirm(params) {
|
|
|
354
272
|
}
|
|
355
273
|
dieFriction('teams', 'repo-stale', staleRepoError({ team, where, behind: res.behind, base: res.base, sync }), 1, { json });
|
|
356
274
|
}
|
|
357
|
-
/**
|
|
358
|
-
* Register the generic cloud dispatcher — staged cloud teammates get
|
|
359
|
-
* dispatched when their --after deps resolve, using repo/branch stored on
|
|
360
|
-
* the teammate itself so we don't need the original --cloud CLI args.
|
|
361
|
-
*/
|
|
362
275
|
function wireCloudDispatcher(mgr) {
|
|
363
276
|
mgr.setCloudDispatcher(async (a) => {
|
|
364
277
|
if (!a.cloudProvider) {
|
|
@@ -372,9 +285,6 @@ function wireCloudDispatcher(mgr) {
|
|
|
372
285
|
}
|
|
373
286
|
export function cloudDispatchOptions(agent) {
|
|
374
287
|
return {
|
|
375
|
-
// PHNX-3236: a cloud teammate runs in the provider sandbox and never inherits
|
|
376
|
-
// the local merge-guard.sh hook, so the prompt policy is its ONLY self-merge
|
|
377
|
-
// boundary — apply the same helper buildRunArgv uses for local/remote.
|
|
378
288
|
prompt: withTeammatePrPolicy(agent.prompt, agent.mode),
|
|
379
289
|
agent: agent.agentType,
|
|
380
290
|
repo: agent.cloudRepo ?? undefined,
|
|
@@ -383,17 +293,6 @@ export function cloudDispatchOptions(agent) {
|
|
|
383
293
|
env: shareRuntimeEnv(),
|
|
384
294
|
};
|
|
385
295
|
}
|
|
386
|
-
/**
|
|
387
|
-
* Advisory: warn once per agent type of any still-pending (staged `--after`)
|
|
388
|
-
* teammate whose CLI may not be signed in. Warn-only — never blocks `start`.
|
|
389
|
-
* Local teammates only; cloud teammates authenticate through their provider.
|
|
390
|
-
*/
|
|
391
|
-
/**
|
|
392
|
-
* Advisory line for a version-pinned teammate whose account can't serve a run
|
|
393
|
-
* right now. A pinned target (`agents run <agent>@<version>`) bypasses account
|
|
394
|
-
* rotation — the pin IS the target — so unlike a bare teammate it can't route
|
|
395
|
-
* around a throttled/expired account; it will launch and likely 429 at once.
|
|
396
|
-
*/
|
|
397
296
|
function throttleWarningLine(agent, version, r) {
|
|
398
297
|
const who = `${AGENT_NAMES[agent]} ${version}`;
|
|
399
298
|
const acct = r.email ? ` (${r.email})` : '';
|
|
@@ -405,21 +304,13 @@ function throttleWarningLine(agent, version, r) {
|
|
|
405
304
|
chalk.gray(`\n A pinned version skips account rotation, so it will launch on this account and may immediately hit its limit.` +
|
|
406
305
|
`\n Use a bare \`${agent}\` teammate to let the team pick a healthy account, or pass --force to silence this.`));
|
|
407
306
|
}
|
|
408
|
-
/**
|
|
409
|
-
* Advisory: for each staged VERSION-PINNED teammate, warn if its account is
|
|
410
|
-
* rate-limited / out of credits / signed out right now — reusing the router's
|
|
411
|
-
* own eligibility signal (`checkRunAccountReadiness`) so the warning matches
|
|
412
|
-
* what the spawn would actually do. Bare teammates (rotation handles them) and
|
|
413
|
-
* profile/cloud teammates (account not locally checkable) are skipped. Warns,
|
|
414
|
-
* never blocks. Deduped by agent@version so N teammates on one account warn once.
|
|
415
|
-
*/
|
|
416
307
|
async function warnThrottledTeammates(mgr, team) {
|
|
417
308
|
let pending;
|
|
418
309
|
try {
|
|
419
310
|
pending = (await mgr.listByTask(team)).filter((a) => a.status === 'pending' && !a.cloudProvider && !a.profileName && a.version);
|
|
420
311
|
}
|
|
421
312
|
catch {
|
|
422
|
-
return;
|
|
313
|
+
return;
|
|
423
314
|
}
|
|
424
315
|
const seen = new Set();
|
|
425
316
|
for (const a of pending) {
|
|
@@ -440,7 +331,7 @@ async function warnUnsignedTeammates(mgr, team) {
|
|
|
440
331
|
pending = (await mgr.listByTask(team)).filter((a) => a.status === 'pending' && !a.cloudProvider);
|
|
441
332
|
}
|
|
442
333
|
catch {
|
|
443
|
-
return;
|
|
334
|
+
return;
|
|
444
335
|
}
|
|
445
336
|
const seen = new Set();
|
|
446
337
|
for (const a of pending) {
|
|
@@ -454,14 +345,6 @@ async function warnUnsignedTeammates(mgr, team) {
|
|
|
454
345
|
}
|
|
455
346
|
}
|
|
456
347
|
}
|
|
457
|
-
/**
|
|
458
|
-
* Single-wave start used by `teams start` without --watch. startReady()
|
|
459
|
-
* terminalizes a placement/spawn/cloud/dependency failure to FAILED with
|
|
460
|
-
* evidence rather than leaving it PENDING, so a teammate that failed this wave
|
|
461
|
-
* appears in neither `launched` nor `still_pending` — it must be diffed against
|
|
462
|
-
* the pre-wave roster and reported explicitly, or the wave reads as a success.
|
|
463
|
-
* A wave that only produced failures sets a non-zero exit code.
|
|
464
|
-
*/
|
|
465
348
|
export async function runOneWave(mgr, team, json) {
|
|
466
349
|
const preWavePending = new Set((await mgr.listByTask(team)).filter((a) => a.status === 'pending').map((a) => a.agentId));
|
|
467
350
|
const launched = await mgr.startReady(team);
|
|
@@ -512,12 +395,6 @@ export async function runOneWave(mgr, team, json) {
|
|
|
512
395
|
if (launched.length > 0)
|
|
513
396
|
printFeedHint(team);
|
|
514
397
|
}
|
|
515
|
-
/**
|
|
516
|
-
* Path to the pr-watch dedupe-state file for a team. Persists the set of
|
|
517
|
-
* already-handled check/comment dedupe keys so a restart of `teams pr-watch`
|
|
518
|
-
* never re-spawns a fix wave for a failure it already reacted to. Lives in the
|
|
519
|
-
* teammate base dir; it's a flat file so loadExistingAgents (dir-only) skips it.
|
|
520
|
-
*/
|
|
521
398
|
async function prWatchStatePath(team) {
|
|
522
399
|
const safe = team.replace(/[^A-Za-z0-9_-]/g, '_');
|
|
523
400
|
return path.join(await getAgentsDir(), `pr-watch-${safe}.json`);
|
|
@@ -544,12 +421,6 @@ async function savePrWatchState(team, state) {
|
|
|
544
421
|
debug(`Could not persist pr-watch state for ${team}: ${err.message}`);
|
|
545
422
|
}
|
|
546
423
|
}
|
|
547
|
-
/**
|
|
548
|
-
* Resolve the PRs opened by a team's teammates, de-duplicated by PR URL. A
|
|
549
|
-
* teammate's PR URL comes from its own `pr_url` field or, failing that, the
|
|
550
|
-
* session it ran (detected from the transcript's `gh pr create`). The teammate
|
|
551
|
-
* name is the `--after` anchor for the fix/bugfix teammate we spawn.
|
|
552
|
-
*/
|
|
553
424
|
async function resolvePrWatchTargets(mgr, team) {
|
|
554
425
|
const status = await handleStatus(mgr, team, 'all');
|
|
555
426
|
const sessions = await resolveTeammateSessions(status.agents);
|
|
@@ -559,38 +430,22 @@ async function resolvePrWatchTargets(mgr, team) {
|
|
|
559
430
|
if (!prUrl)
|
|
560
431
|
continue;
|
|
561
432
|
if (byPr.has(prUrl))
|
|
562
|
-
continue;
|
|
433
|
+
continue;
|
|
563
434
|
byPr.set(prUrl, { prUrl, sourceTeammate: a.name ?? null });
|
|
564
435
|
}
|
|
565
436
|
return [...byPr.values()];
|
|
566
437
|
}
|
|
567
|
-
/**
|
|
568
|
-
* React to one decided pr-watch action by spawning a follow-up teammate on the
|
|
569
|
-
* same PR — a ci-fix teammate on RED CI, or a `bugfix` teammate on a new review
|
|
570
|
-
* comment — linked `--after` the teammate that opened the PR so it slots into
|
|
571
|
-
* the same DAG the supervisor already drains. Returns the teammate label.
|
|
572
|
-
*/
|
|
573
438
|
async function reactWithTeammate(mgr, team, action, prompt) {
|
|
574
|
-
// Unique name per reaction. The dedupe key is stable across waves (keyed on the
|
|
575
|
-
// check NAME), so the wave number is what keeps successive fixers' names — and
|
|
576
|
-
// their worktrees — distinct within the team.
|
|
577
439
|
const uniq = action.dedupeKey.replace(/[^A-Za-z0-9]/g, '').slice(-10) || `${action.wave}`;
|
|
578
440
|
const slug = `${uniq}-w${action.wave}`;
|
|
579
441
|
const name = action.kind === 'ci-fix' ? `cifix-${slug}` : `bugfix-${slug}`;
|
|
580
442
|
const taskType = action.kind === 'review-fix' ? 'bugfix' : null;
|
|
581
|
-
// Link --after the source teammate when it's a real, resolvable sibling; a
|
|
582
|
-
// missing source means the PR couldn't be traced to a named teammate, so the
|
|
583
|
-
// fix runs immediately with no dependency edge.
|
|
584
443
|
const after = [];
|
|
585
444
|
if (action.sourceTeammate) {
|
|
586
445
|
const resolved = await mgr.resolveAgentIdInTask(team, action.sourceTeammate);
|
|
587
446
|
if (resolved.kind === 'ok')
|
|
588
447
|
after.push(action.sourceTeammate);
|
|
589
448
|
}
|
|
590
|
-
// Isolate each fixer in its own worktree so concurrent `gh pr checkout`s (across
|
|
591
|
-
// PRs, or across waves) never clash in a shared cwd. Requires a git repo — which
|
|
592
|
-
// pr-watch always is, since it operates on PRs; fall back to the cwd only when
|
|
593
|
-
// the checkout somehow isn't a repo.
|
|
594
449
|
const baseCwd = process.cwd();
|
|
595
450
|
let worktreeName = null;
|
|
596
451
|
let worktreePath = null;
|
|
@@ -610,36 +465,15 @@ async function reactWithTeammate(mgr, team, action, prompt) {
|
|
|
610
465
|
}
|
|
611
466
|
let result;
|
|
612
467
|
try {
|
|
613
|
-
result = await handleSpawn(mgr, team, 'claude', prompt, cwd, 'edit', 'medium', null, cwd, null, name, after, null, null, taskType, null, null, null, null, worktreeName, worktreePath, null,
|
|
614
|
-
null, // hostName
|
|
615
|
-
null, // hostTarget
|
|
616
|
-
null, // repoPath
|
|
617
|
-
// A pr-watch fixer belongs to the same team, so it gets the same project
|
|
618
|
-
// grants as any other teammate. Wiring `--project` into only the
|
|
619
|
-
// `teams add` caller would have left this one silently without them.
|
|
620
|
-
(await getTeam(team))?.project ?? null);
|
|
468
|
+
result = await handleSpawn(mgr, team, 'claude', prompt, cwd, 'edit', 'medium', null, cwd, null, name, after, null, null, taskType, null, null, null, null, worktreeName, worktreePath, null, null, null, null, (await getTeam(team))?.project ?? null);
|
|
621
469
|
}
|
|
622
470
|
catch (err) {
|
|
623
|
-
// The spawn failed after we created this fixer's worktree — tear it down so
|
|
624
|
-
// the branch `agents/<name>` doesn't block the next wave's retry with
|
|
625
|
-
// `fatal: a branch ... already exists` (RUSH-2356). Best-effort; the
|
|
626
|
-
// original failure is what propagates.
|
|
627
|
-
//
|
|
628
|
-
// Guarded exactly like the `teams add` teardown, and for the same reason:
|
|
629
|
-
// handleSpawn -> manager.spawn() persists a staged teammate's meta.json and
|
|
630
|
-
// only THEN runs the retention pass, which refreshes every sibling and can
|
|
631
|
-
// throw on a distributed one. A fixer teammate is staged with `--after` when
|
|
632
|
-
// it follows a source teammate, so a throw there lands here with a LIVE,
|
|
633
|
-
// durably-recorded, merely-pending teammate already owning this worktree —
|
|
634
|
-
// and removing it would destroy real work. Only tear down a genuine orphan.
|
|
635
471
|
if (worktreeName)
|
|
636
472
|
await tearDownOrphanWorktree(mgr, baseCwd, worktreeName);
|
|
637
473
|
throw err;
|
|
638
474
|
}
|
|
639
475
|
return result.name ?? shortId(result.agent_id);
|
|
640
476
|
}
|
|
641
|
-
// Pick the display handle for a teammate: explicit teammate name, Claude
|
|
642
|
-
// session label, then the 8-char UUID prefix.
|
|
643
477
|
function handle(a) {
|
|
644
478
|
return a.name || a.session_label || shortId(a.agent_id);
|
|
645
479
|
}
|
|
@@ -649,8 +483,6 @@ function displayHandle(a) {
|
|
|
649
483
|
}
|
|
650
484
|
return handle(a);
|
|
651
485
|
}
|
|
652
|
-
// Resolve a teammate reference (name / UUID / UUID prefix) by scanning every
|
|
653
|
-
// meta.json under the agents dir. Team hint narrows the search.
|
|
654
486
|
async function resolveTeammateAcrossTeams(base, ref, teamHint) {
|
|
655
487
|
let entries = [];
|
|
656
488
|
try {
|
|
@@ -659,13 +491,10 @@ async function resolveTeammateAcrossTeams(base, ref, teamHint) {
|
|
|
659
491
|
catch {
|
|
660
492
|
return { kind: 'none' };
|
|
661
493
|
}
|
|
662
|
-
// Cheap path: exact UUID or unique UUID prefix match by directory name.
|
|
663
494
|
const byDir = entries.filter((e) => e === ref || e.startsWith(ref));
|
|
664
495
|
if (byDir.length === 1 && byDir[0] === ref) {
|
|
665
496
|
return { kind: 'ok', agentId: ref };
|
|
666
497
|
}
|
|
667
|
-
// Otherwise scan meta.json files to match on name as well, and respect the
|
|
668
|
-
// team hint if given.
|
|
669
498
|
const candidates = [];
|
|
670
499
|
for (const dir of entries) {
|
|
671
500
|
try {
|
|
@@ -684,31 +513,18 @@ async function resolveTeammateAcrossTeams(base, ref, teamHint) {
|
|
|
684
513
|
}
|
|
685
514
|
}
|
|
686
515
|
catch {
|
|
687
|
-
/* skip entries without readable meta.json */
|
|
688
516
|
}
|
|
689
517
|
}
|
|
690
518
|
if (candidates.length === 0)
|
|
691
519
|
return { kind: 'none' };
|
|
692
520
|
if (candidates.length === 1)
|
|
693
521
|
return { kind: 'ok', agentId: candidates[0].agentId };
|
|
694
|
-
// If multiple match but one is an exact name hit, prefer it.
|
|
695
522
|
const exactName = candidates.filter((c) => c.name === ref);
|
|
696
523
|
if (exactName.length === 1)
|
|
697
524
|
return { kind: 'ok', agentId: exactName[0].agentId };
|
|
698
525
|
return { kind: 'ambiguous', candidates };
|
|
699
526
|
}
|
|
700
|
-
// Print a teammate block using the same session preview the sessions picker
|
|
701
|
-
// uses — one canonical renderer across `agents sessions`, teams picker
|
|
702
|
-
// preview, and teams status output.
|
|
703
|
-
//
|
|
704
|
-
// Layout:
|
|
705
|
-
// alice claude COMPLETED · 5.0 minutes
|
|
706
|
-
// after: bob
|
|
707
|
-
// <buildSessionPreview output> (when the session file was found)
|
|
708
|
-
// ! reported an error (if flagged)
|
|
709
|
-
// PR: <url> (if set)
|
|
710
527
|
function printAgentDetail(a, session) {
|
|
711
|
-
// RUSH-2380: process COMPLETED + open PR → show PR OPEN, not COMPLETED.
|
|
712
528
|
const delivery = a.delivery ??
|
|
713
529
|
resolveTeammateDelivery({ status: a.status, prUrl: a.pr_url });
|
|
714
530
|
const colorKey = deliveryColorKey(delivery, a.status);
|
|
@@ -743,23 +559,16 @@ function printAgentDetail(a, session) {
|
|
|
743
559
|
if (a.failure) {
|
|
744
560
|
console.log(` ${chalk.red('failure ')} ${a.failure.code}: ${a.failure.message}`);
|
|
745
561
|
}
|
|
746
|
-
// If the agent's internal session id differs from ours (non-Claude), show
|
|
747
|
-
// it as a hint for `agents sessions <id>`.
|
|
748
562
|
if (a.remote_session_id && a.remote_session_id !== a.agent_id) {
|
|
749
563
|
console.log(` ${chalk.gray('session ')} ${chalk.gray(a.remote_session_id)}`);
|
|
750
564
|
}
|
|
751
565
|
if (session) {
|
|
752
|
-
// Hand off to the same renderer the sessions picker uses. Indent so the
|
|
753
|
-
// block visually belongs to this teammate.
|
|
754
566
|
const preview = buildSessionPreview(session);
|
|
755
567
|
for (const line of preview.split('\n')) {
|
|
756
568
|
console.log(line ? ` ${line}` : '');
|
|
757
569
|
}
|
|
758
570
|
}
|
|
759
571
|
else {
|
|
760
|
-
// Session file not yet on disk (e.g. teammate is pending, or their
|
|
761
|
-
// agent type writes sessions elsewhere). Fall back to a compact summary
|
|
762
|
-
// derived from the live status payload.
|
|
763
572
|
const activity = [];
|
|
764
573
|
if (a.files_modified.length)
|
|
765
574
|
activity.push(`${a.files_modified.length} modified`);
|
|
@@ -794,15 +603,10 @@ function printAgentDetail(a, session) {
|
|
|
794
603
|
if (a.pr_url)
|
|
795
604
|
console.log(` ${chalk.gray('PR ')}${a.pr_url}`);
|
|
796
605
|
}
|
|
797
|
-
// Resolve each live teammate to its on-disk session (Claude/Codex/Gemini/
|
|
798
|
-
// OpenCode all write parseable session files). `agent_id === remote_session_id`
|
|
799
|
-
// for Claude teammates; non-Claude agents may carry their own session UUID on
|
|
800
|
-
// `remote_session_id`. We try both.
|
|
801
606
|
async function resolveTeammateSessions(agents) {
|
|
802
607
|
const map = new Map();
|
|
803
608
|
if (agents.length === 0)
|
|
804
609
|
return map;
|
|
805
|
-
// Scan every project dir — team teammates may have run from anywhere.
|
|
806
610
|
const all = await discoverSessions({ all: true, limit: 5000 });
|
|
807
611
|
for (const a of agents) {
|
|
808
612
|
const candidates = [a.remote_session_id, a.agent_id].filter(Boolean);
|
|
@@ -818,10 +622,6 @@ async function resolveTeammateSessions(agents) {
|
|
|
818
622
|
}
|
|
819
623
|
return map;
|
|
820
624
|
}
|
|
821
|
-
// Default compact renderer — one block per teammate, optimized for the
|
|
822
|
-
// orchestrator scanning "what state, what did you touch, what did you say
|
|
823
|
-
// last." Caller passes the projected AgentStatusSummary; for the full
|
|
824
|
-
// verbose layout use printAgentDetail above.
|
|
825
625
|
function printAgentSummary(s) {
|
|
826
626
|
const delivery = s.delivery ??
|
|
827
627
|
resolveTeammateDelivery({ status: s.status, prUrl: s.pr_url });
|
|
@@ -837,7 +637,6 @@ function printAgentSummary(s) {
|
|
|
837
637
|
if (s.failure) {
|
|
838
638
|
console.log(` ${chalk.red('failure ')} ${s.failure.code}: ${s.failure.message}`);
|
|
839
639
|
}
|
|
840
|
-
// Files: counts + basenames. Read is count only.
|
|
841
640
|
const fileLines = [];
|
|
842
641
|
const renderCat = (label, cat) => {
|
|
843
642
|
if (cat.count === 0)
|
|
@@ -854,7 +653,6 @@ function printAgentSummary(s) {
|
|
|
854
653
|
if (fileLines.length) {
|
|
855
654
|
console.log(` ${chalk.gray('files ')} ${fileLines.join(chalk.gray(' · '))}`);
|
|
856
655
|
}
|
|
857
|
-
// Last 3 bash commands.
|
|
858
656
|
const recentBash = s.bash_commands.slice(-3);
|
|
859
657
|
if (recentBash.length) {
|
|
860
658
|
console.log(` ${chalk.gray('bash ')}`);
|
|
@@ -862,7 +660,6 @@ function printAgentSummary(s) {
|
|
|
862
660
|
console.log(` ${chalk.gray('$')} ${truncate(cmd, 96)}`);
|
|
863
661
|
}
|
|
864
662
|
}
|
|
865
|
-
// Last messages — first non-empty line of each, truncated.
|
|
866
663
|
if (s.last_messages.length) {
|
|
867
664
|
console.log(` ${chalk.gray('messages')}`);
|
|
868
665
|
for (const msg of s.last_messages) {
|
|
@@ -894,8 +691,6 @@ function formatTeamStatusSummary(summary) {
|
|
|
894
691
|
parts.push(`${summary.stopped} stopped`);
|
|
895
692
|
return `(${parts.join(', ')})`;
|
|
896
693
|
}
|
|
897
|
-
// Render a team's status in the same format the `status` subcommand uses, so
|
|
898
|
-
// the interactive picker's Enter action drops the user into a familiar view.
|
|
899
694
|
async function printTeamStatus(team, result) {
|
|
900
695
|
const { summary, agents } = result;
|
|
901
696
|
console.log(chalk.bold(`Team ${chalk.cyan(team)} `) + chalk.gray(formatTeamStatusSummary(summary)));
|
|
@@ -918,10 +713,6 @@ async function printTeamStatus(team, result) {
|
|
|
918
713
|
console.log();
|
|
919
714
|
console.log(chalk.gray(`cursor: ${result.cursor}`));
|
|
920
715
|
}
|
|
921
|
-
// Compact default renderer — no session-file dive, no per-teammate
|
|
922
|
-
// 15-line preview. One block per teammate, suitable for the orchestrator
|
|
923
|
-
// scanning what each agent did. Use `printTeamStatus` (above) for the
|
|
924
|
-
// verbose/legacy layout.
|
|
925
716
|
function printTeamSummary(team, result) {
|
|
926
717
|
const { summary, agents } = result;
|
|
927
718
|
console.log(chalk.bold(`Team ${chalk.cyan(team)} `) + chalk.gray(formatTeamStatusSummary(summary)));
|
|
@@ -945,14 +736,6 @@ function printTeamSummary(team, result) {
|
|
|
945
736
|
console.log(chalk.gray('Full detail: agents teams status ' + team + ' --verbose'));
|
|
946
737
|
console.log(chalk.gray('Raw log: agents teams logs --team ' + team + ' --teammate <name>'));
|
|
947
738
|
}
|
|
948
|
-
// Classify a team into a single bucket for --status filtering.
|
|
949
|
-
// - empty: no teammates (created but nobody added yet)
|
|
950
|
-
// - waiting: only staged teammates — call `teams start` to kick them off
|
|
951
|
-
// - working: at least one teammate still running
|
|
952
|
-
// - failed: at least one teammate failed or was stopped (any failure wins —
|
|
953
|
-
// even if others finished, you want to know about the failure)
|
|
954
|
-
// - stranded: everyone finished, but at least one has uncommitted work and no PR
|
|
955
|
-
// - done: everyone finished successfully, no failures, no stranded work
|
|
956
739
|
function classifyTeamStatus(t) {
|
|
957
740
|
if (t.agent_count === 0)
|
|
958
741
|
return 'empty';
|
|
@@ -960,19 +743,13 @@ function classifyTeamStatus(t) {
|
|
|
960
743
|
return 'working';
|
|
961
744
|
if (t.failed + t.stopped > 0)
|
|
962
745
|
return 'failed';
|
|
963
|
-
// At this point nobody is running/failed/stopped. If there's any pending
|
|
964
|
-
// teammate (agent_count > running+completed+failed+stopped), it's "waiting".
|
|
965
746
|
const accounted = t.running + t.completed + t.failed + t.stopped;
|
|
966
747
|
if (accounted < t.agent_count)
|
|
967
748
|
return 'waiting';
|
|
968
|
-
// Completed-without-delivery is not "done": the work is still in the worktree
|
|
969
|
-
// and will be lost on cleanup (PHNX-2951).
|
|
970
749
|
if ((t.stranded ?? 0) > 0)
|
|
971
750
|
return 'stranded';
|
|
972
751
|
return 'done';
|
|
973
752
|
}
|
|
974
|
-
// Merge persistent team registry with tasks derived from live agents so empty
|
|
975
|
-
// teams (created but no teammates yet) still show up.
|
|
976
753
|
function mergeTeams(registry, tasks) {
|
|
977
754
|
const byName = new Map();
|
|
978
755
|
for (const t of tasks)
|
|
@@ -1026,7 +803,6 @@ async function buildTasksFromSnapshots(agents) {
|
|
|
1026
803
|
failed++;
|
|
1027
804
|
else if (status === AgentStatus.STOPPED)
|
|
1028
805
|
stopped++;
|
|
1029
|
-
// Stranded = completed with no PR and a dirty local worktree (PHNX-2951).
|
|
1030
806
|
if (status === AgentStatus.COMPLETED &&
|
|
1031
807
|
!agent.pr_url?.trim() &&
|
|
1032
808
|
!agent.host &&
|
|
@@ -1065,9 +841,7 @@ async function buildTasksFromSnapshots(agents) {
|
|
|
1065
841
|
}
|
|
1066
842
|
return tasks.sort((a, b) => new Date(b.modified_at).getTime() - new Date(a.modified_at).getTime());
|
|
1067
843
|
}
|
|
1068
|
-
export async function buildTeamRowsFromSnapshots(registry, agents,
|
|
1069
|
-
/** team name -> the session that spawned it (see teamSpawners). */
|
|
1070
|
-
spawners) {
|
|
844
|
+
export async function buildTeamRowsFromSnapshots(registry, agents, spawners) {
|
|
1071
845
|
const byTeam = new Map();
|
|
1072
846
|
for (const agent of agents) {
|
|
1073
847
|
const details = byTeam.get(agent.task_name) || [];
|
|
@@ -1075,8 +849,6 @@ spawners) {
|
|
|
1075
849
|
byTeam.set(agent.task_name, details);
|
|
1076
850
|
}
|
|
1077
851
|
const teams = mergeTeams(registry, await buildTasksFromSnapshots(agents));
|
|
1078
|
-
// Recompute delivery for cached snapshots so `teams list` reflects stranded
|
|
1079
|
-
// work discovered by probing the real worktree (PHNX-2951).
|
|
1080
852
|
for (const details of byTeam.values()) {
|
|
1081
853
|
for (const a of details) {
|
|
1082
854
|
const snapshot = agents.find((s) => s.agent_id === a.agent_id);
|
|
@@ -1151,24 +923,16 @@ async function loadTeamAgentSnapshots() {
|
|
|
1151
923
|
}));
|
|
1152
924
|
return snapshots.filter((snapshot) => snapshot !== null);
|
|
1153
925
|
}
|
|
1154
|
-
// Build cached rows for the `list` picker. Shared between `list` and picker
|
|
1155
|
-
// fallbacks for `status` / `start`; full status stays lazy until a team is picked.
|
|
1156
926
|
async function loadTeamRows(_mgr) {
|
|
1157
927
|
const [registry, agents] = await Promise.all([loadTeams(), loadTeamAgentSnapshots()]);
|
|
1158
|
-
// Lineage is read off the session index, not the team registry: the registry is
|
|
1159
|
-
// per-machine runtime state, while the transcript that ran `teams create` is
|
|
1160
|
-
// indexed, survives the teammate cleanup, and covers teams created before this.
|
|
1161
928
|
let spawners;
|
|
1162
929
|
try {
|
|
1163
930
|
spawners = teamSpawners();
|
|
1164
931
|
}
|
|
1165
932
|
catch {
|
|
1166
|
-
// The index is an enrichment here — a missing/locked DB just drops the column.
|
|
1167
933
|
}
|
|
1168
934
|
return await buildTeamRowsFromSnapshots(registry, agents, spawners);
|
|
1169
935
|
}
|
|
1170
|
-
// Picker fallback for `teams logs` when the teammate ref is omitted. Shows a
|
|
1171
|
-
// flat list of every teammate with their team context; Enter picks one.
|
|
1172
936
|
async function pickTeammateOr(mgr, command) {
|
|
1173
937
|
if (!isInteractiveTerminal()) {
|
|
1174
938
|
requireInteractiveSelection(`Picking a teammate for \`${command}\``, [
|
|
@@ -1218,9 +982,6 @@ async function pickTeammateOr(mgr, command) {
|
|
|
1218
982
|
throw err;
|
|
1219
983
|
}
|
|
1220
984
|
}
|
|
1221
|
-
// Fallback for read-only / constructive subcommands when the user omits the
|
|
1222
|
-
// team argument. In a TTY, show the picker and return the chosen team. Outside
|
|
1223
|
-
// a TTY, hard-fail with a clear error so scripts surface the missing arg.
|
|
1224
985
|
async function pickTeamOr(mgr, command) {
|
|
1225
986
|
if (!isInteractiveTerminal()) {
|
|
1226
987
|
requireInteractiveSelection(`Picking a team for \`${command}\``, [
|
|
@@ -1244,16 +1005,6 @@ async function pickTeamOr(mgr, command) {
|
|
|
1244
1005
|
throw err;
|
|
1245
1006
|
}
|
|
1246
1007
|
}
|
|
1247
|
-
/**
|
|
1248
|
-
* `teams add --remote-cwd` is a no-op trap. `--remote-cwd` comes from the shared
|
|
1249
|
-
* `--device` option family (option.ts) and is meaningful for commands that *route*
|
|
1250
|
-
* to a host, but `teams add` special-cases `--device`/`--device` as PLACEMENT, so
|
|
1251
|
-
* the flag is never read — a teammate's directory is the team's repo plus its
|
|
1252
|
-
* `--worktree`, not a path passed here. Silently ignoring it misleads you into
|
|
1253
|
-
* thinking it set the teammate's repo path (the exact wrong model that turns one
|
|
1254
|
-
* team into a teardown-and-rebuild). Reject with guidance instead. Exported for
|
|
1255
|
-
* the unit test that pins the message.
|
|
1256
|
-
*/
|
|
1257
1008
|
export function remoteCwdOnAddError(team) {
|
|
1258
1009
|
return (`--remote-cwd has no effect on 'teams add' — it does not set a teammate's repo or directory.\n` +
|
|
1259
1010
|
` A teammate works in the team's repo plus its own --worktree:\n` +
|
|
@@ -1261,7 +1012,6 @@ export function remoteCwdOnAddError(team) {
|
|
|
1261
1012
|
` • Place the teammate on a machine: agents teams add ${team} <agent> "<task>" --device <host> --worktree <name>\n` +
|
|
1262
1013
|
` (Remote worktrees fork from the host's freshly-fetched origin/<default> automatically.)`);
|
|
1263
1014
|
}
|
|
1264
|
-
/** Register the `agents teams` command tree (list, create, add, status, start, remove, disband, logs, doctor). */
|
|
1265
1015
|
export function registerTeamsCommands(program) {
|
|
1266
1016
|
const teams = program
|
|
1267
1017
|
.command('teams')
|
|
@@ -1324,7 +1074,6 @@ export function registerTeamsCommands(program) {
|
|
|
1324
1074
|
teams rm = remove teams d = disband teams ls = list
|
|
1325
1075
|
`,
|
|
1326
1076
|
});
|
|
1327
|
-
// list
|
|
1328
1077
|
addHostOption(teams.command('list [query]'))
|
|
1329
1078
|
.alias('ls')
|
|
1330
1079
|
.description('List your teams, most recent activity first')
|
|
@@ -1340,29 +1089,23 @@ export function registerTeamsCommands(program) {
|
|
|
1340
1089
|
loadTeams(),
|
|
1341
1090
|
loadTeamAgentSnapshots(),
|
|
1342
1091
|
]);
|
|
1343
|
-
// Group agents by team so we can filter on agent-type / version.
|
|
1344
1092
|
const byTeam = new Map();
|
|
1345
1093
|
for (const a of everyAgent) {
|
|
1346
1094
|
const arr = byTeam.get(a.task_name) || [];
|
|
1347
1095
|
arr.push(a);
|
|
1348
1096
|
byTeam.set(a.task_name, arr);
|
|
1349
1097
|
}
|
|
1350
|
-
// Same lineage enrichment as loadTeamRows — without it this listing is the
|
|
1351
|
-
// one `teams list` surface that silently drops the "spawned by" column.
|
|
1352
1098
|
let spawners;
|
|
1353
1099
|
try {
|
|
1354
1100
|
spawners = teamSpawners();
|
|
1355
1101
|
}
|
|
1356
1102
|
catch {
|
|
1357
|
-
// The session index is an enrichment here; a missing one drops the column.
|
|
1358
1103
|
}
|
|
1359
1104
|
let rows = (await buildTeamRowsFromSnapshots(registry, everyAgent, spawners)).rows;
|
|
1360
|
-
// --- query: substring match on team name ---
|
|
1361
1105
|
if (query) {
|
|
1362
1106
|
const q = query.toLowerCase();
|
|
1363
1107
|
rows = rows.filter((row) => row.team.task_name.toLowerCase().includes(q));
|
|
1364
1108
|
}
|
|
1365
|
-
// --- --agent: filter teams containing a matching teammate ---
|
|
1366
1109
|
if (opts.agent) {
|
|
1367
1110
|
const [wantType, rawVersion] = opts.agent.split('@');
|
|
1368
1111
|
const wantVersion = VALID_AGENTS.includes(wantType)
|
|
@@ -1373,7 +1116,6 @@ export function registerTeamsCommands(program) {
|
|
|
1373
1116
|
return teammates.some((m) => m.agent_type === wantType && (!wantVersion || m.version === wantVersion));
|
|
1374
1117
|
});
|
|
1375
1118
|
}
|
|
1376
|
-
// --- --status: classify each team, filter ---
|
|
1377
1119
|
if (opts.status) {
|
|
1378
1120
|
const want = opts.status.toLowerCase();
|
|
1379
1121
|
const validStatuses = ['working', 'done', 'stranded', 'failed', 'empty'];
|
|
@@ -1382,7 +1124,6 @@ export function registerTeamsCommands(program) {
|
|
|
1382
1124
|
}
|
|
1383
1125
|
rows = rows.filter((row) => classifyTeamStatus(row.team) === want);
|
|
1384
1126
|
}
|
|
1385
|
-
// --- --since / --until: filter by activity window ---
|
|
1386
1127
|
if (opts.since) {
|
|
1387
1128
|
const cutoff = parseTimeFilter(opts.since);
|
|
1388
1129
|
if (!cutoff)
|
|
@@ -1414,7 +1155,6 @@ export function registerTeamsCommands(program) {
|
|
|
1414
1155
|
try {
|
|
1415
1156
|
const picked = await teamPicker(rows, query);
|
|
1416
1157
|
if (picked) {
|
|
1417
|
-
// Fall through to the status subcommand's action for the picked team.
|
|
1418
1158
|
const mgr = mkManager();
|
|
1419
1159
|
const result = await handleStatus(mgr, picked.team, 'all');
|
|
1420
1160
|
await printTeamStatus(picked.team, result);
|
|
@@ -1426,11 +1166,8 @@ export function registerTeamsCommands(program) {
|
|
|
1426
1166
|
}
|
|
1427
1167
|
return;
|
|
1428
1168
|
}
|
|
1429
|
-
// Non-interactive fallback: rows flow without a header, matching the
|
|
1430
|
-
// shape of `agents sessions` when piped.
|
|
1431
1169
|
printTeamTable(rows);
|
|
1432
1170
|
});
|
|
1433
|
-
// create
|
|
1434
1171
|
addHostOption(teams.command('create <team>'))
|
|
1435
1172
|
.aliases(['c', 'new'])
|
|
1436
1173
|
.description('Start a new team. No teammates yet; add them with `teams add`.')
|
|
@@ -1443,9 +1180,6 @@ export function registerTeamsCommands(program) {
|
|
|
1443
1180
|
.option('--json', 'Output machine-readable JSON')
|
|
1444
1181
|
.action(async (team, opts) => {
|
|
1445
1182
|
try {
|
|
1446
|
-
// Fail here, not at the first `teams add`: a team created against a
|
|
1447
|
-
// project that does not resolve would silently fall back to the
|
|
1448
|
-
// orchestrator's cwd for every teammate.
|
|
1449
1183
|
if (opts.project) {
|
|
1450
1184
|
const { resolveProjectRef } = await import('../lib/project-root.js');
|
|
1451
1185
|
try {
|
|
@@ -1455,18 +1189,9 @@ export function registerTeamsCommands(program) {
|
|
|
1455
1189
|
dieFriction('teams', 'project-unresolved', err.message);
|
|
1456
1190
|
}
|
|
1457
1191
|
}
|
|
1458
|
-
// --devices / --hosts are aliases; commander can't express a two-name
|
|
1459
|
-
// option that isn't a short flag, so merge them here. Split on comma,
|
|
1460
|
-
// trim, drop blanks, dedupe (preserving first-seen order).
|
|
1461
1192
|
const rawPool = [opts.devices, opts.hosts].filter(Boolean).join(',');
|
|
1462
1193
|
const devices = [];
|
|
1463
1194
|
for (const raw of rawPool.split(',').map((s) => s.trim()).filter(Boolean)) {
|
|
1464
|
-
// Resolve `interactive` to the concrete device HERE, the same way the
|
|
1465
|
-
// single `--device` pin does. A pool is a set of specific machines the
|
|
1466
|
-
// scheduler picks between, so persisting the sentinel would let the
|
|
1467
|
-
// pool's membership change silently the next time `interactive.host`
|
|
1468
|
-
// is re-pinned — and every later friction message would quote
|
|
1469
|
-
// "interactive" instead of a box the user can act on.
|
|
1470
1195
|
let d = raw;
|
|
1471
1196
|
if (isDeviceInteractive(d)) {
|
|
1472
1197
|
const pinned = resolveInteractiveDevice();
|
|
@@ -1479,9 +1204,6 @@ export function registerTeamsCommands(program) {
|
|
|
1479
1204
|
if (!devices.includes(d))
|
|
1480
1205
|
devices.push(d);
|
|
1481
1206
|
}
|
|
1482
|
-
// Validate every pooled device resolves + is POSIX (v1 remote monitor is
|
|
1483
|
-
// POSIX-only). A device equal to the local machine is fine (runs local),
|
|
1484
|
-
// so skip the resolve/POSIX check for it.
|
|
1485
1207
|
for (const name of devices) {
|
|
1486
1208
|
if (name.toLowerCase() === machineId())
|
|
1487
1209
|
continue;
|
|
@@ -1495,9 +1217,6 @@ export function registerTeamsCommands(program) {
|
|
|
1495
1217
|
`the teams remote monitor is POSIX-only. Use a Linux/macOS device.`);
|
|
1496
1218
|
}
|
|
1497
1219
|
}
|
|
1498
|
-
// --repo: how each device gets the code. Default to the local checkout's
|
|
1499
|
-
// origin when a pool is declared and we're inside a git repo, so the user
|
|
1500
|
-
// never hand-manages a path per box. A poolless team leaves repo unset.
|
|
1501
1220
|
let repo = opts.repo;
|
|
1502
1221
|
if (!repo && devices.length > 0) {
|
|
1503
1222
|
const cwd = process.cwd();
|
|
@@ -1545,7 +1264,6 @@ export function registerTeamsCommands(program) {
|
|
|
1545
1264
|
dieFriction('teams', 'create-failed', err.message);
|
|
1546
1265
|
}
|
|
1547
1266
|
});
|
|
1548
|
-
// add
|
|
1549
1267
|
addHostOption(teams.command('add <team> <teammate> <task>'))
|
|
1550
1268
|
.alias('a')
|
|
1551
1269
|
.description("Add a teammate to work on a task. Runs in background; returns immediately. Use 'status' to check in.")
|
|
@@ -1565,10 +1283,6 @@ export function registerTeamsCommands(program) {
|
|
|
1565
1283
|
.option('--confirm', 'Proceed even when the base checkout/repo is behind origin/main (a stale repo otherwise blocks the add)')
|
|
1566
1284
|
.option('--json', 'Output machine-readable JSON')
|
|
1567
1285
|
.action(async (team, teammate, task, opts) => {
|
|
1568
|
-
// `--remote-cwd` rides the shared --device option family but is never read by
|
|
1569
|
-
// `teams add` (placement, not routing). Fail loud with guidance rather than
|
|
1570
|
-
// silently ignoring it — see remoteCwdOnAddError. `!== undefined` so even an
|
|
1571
|
-
// explicit empty value (`--remote-cwd ""`) is rejected, not silently dropped.
|
|
1572
1286
|
if (opts.remoteCwd !== undefined) {
|
|
1573
1287
|
dieFriction('teams', 'remote-cwd-on-add', remoteCwdOnAddError(team));
|
|
1574
1288
|
}
|
|
@@ -1595,32 +1309,15 @@ export function registerTeamsCommands(program) {
|
|
|
1595
1309
|
dieFriction('teams', 'cloud-rush-needs-repo', `--cloud rush requires --repo <owner/repo>`);
|
|
1596
1310
|
}
|
|
1597
1311
|
}
|
|
1598
|
-
// Auto-create the team if it doesn't exist yet (friendlier UX than erroring),
|
|
1599
|
-
// then load its metadata — needed here for the distributed --repo (how each
|
|
1600
|
-
// device gets the code) before we resolve a per-teammate --device pin.
|
|
1601
1312
|
await ensureTeam(team);
|
|
1602
1313
|
const teamMeta = await getTeam(team);
|
|
1603
|
-
// For `teams add` the passthrough special-cases --device as PLACEMENT,
|
|
1604
|
-
// not routing, so the local action reads it here.
|
|
1605
1314
|
let explicitDevice = opts.device ?? null;
|
|
1606
|
-
// `auto` is the same live fleet sentinel `agents run --device auto` resolves
|
|
1607
|
-
// (RUSH-2185) — pick the concrete device name up front so the local-machine
|
|
1608
|
-
// check right below (and every dieFriction message further down) sees the
|
|
1609
|
-
// real target instead of the literal string "auto".
|
|
1610
1315
|
if (explicitDevice && isDeviceAuto(explicitDevice)) {
|
|
1611
1316
|
const plan = await resolveDeviceAuto(parseTeammate(teammate).agent);
|
|
1612
1317
|
const picked = plan.host ?? machineId();
|
|
1613
1318
|
process.stderr.write(chalk.gray(`[teams] device=auto → ${picked === machineId() ? 'local' : picked}\n`));
|
|
1614
1319
|
explicitDevice = picked;
|
|
1615
1320
|
}
|
|
1616
|
-
// `interactive` needs the same up-front resolution, and for a sharper
|
|
1617
|
-
// reason: `teams add`/`create` bail out of the fleet passthrough
|
|
1618
|
-
// (passthrough.ts, the teams subcommand guard), so the sentinel block
|
|
1619
|
-
// there never runs and this is the only resolver. Left literal, the
|
|
1620
|
-
// local-machine check below compares 'interactive' against the machine id,
|
|
1621
|
-
// takes the remote branch on the pinned box itself, and pins the teammate
|
|
1622
|
-
// to an SSH hop into this same machine — skipping three local preflights
|
|
1623
|
-
// on the way.
|
|
1624
1321
|
if (explicitDevice && isDeviceInteractive(explicitDevice)) {
|
|
1625
1322
|
const pinned = resolveInteractiveDevice();
|
|
1626
1323
|
if (!pinned) {
|
|
@@ -1629,11 +1326,6 @@ export function registerTeamsCommands(program) {
|
|
|
1629
1326
|
process.stderr.write(chalk.gray(`[teams] device=interactive → ${pinned === machineId() ? 'local' : pinned}\n`));
|
|
1630
1327
|
explicitDevice = pinned;
|
|
1631
1328
|
}
|
|
1632
|
-
// Distributed teams: --device <name> PINS this teammate to a machine over
|
|
1633
|
-
// SSH. Resolve + validate the placement here so a bad target fails at `add`
|
|
1634
|
-
// time, not silently at launch. Persisted (hostName/hostTarget/repoPath) so
|
|
1635
|
-
// startReady()/launchRemoteProcess dispatch over SSH. Unpinned teammates
|
|
1636
|
-
// leave these null — the launch-time scheduler resolves the pool cascade.
|
|
1637
1329
|
let hostName = null;
|
|
1638
1330
|
let hostTarget = null;
|
|
1639
1331
|
let hostRepoPath = null;
|
|
@@ -1647,9 +1339,6 @@ export function registerTeamsCommands(program) {
|
|
|
1647
1339
|
dieFriction('teams', 'device-not-resolvable', `Couldn't resolve --device "${explicitDevice}". Register it with \`agents devices add ${explicitDevice} <target>\`, ` +
|
|
1648
1340
|
`or pass user@host.`);
|
|
1649
1341
|
}
|
|
1650
|
-
// POSIX-only in v1: the remote follow/monitor layer offset-tails the log
|
|
1651
|
-
// with tail/cat/kill, which don't exist under PowerShell. Refuse Windows
|
|
1652
|
-
// up front, mirroring dispatch.ts launchDetached.
|
|
1653
1342
|
if (remoteShellFor(host.os ?? resolveRemoteOsSync(host.name)) === 'powershell') {
|
|
1654
1343
|
dieFriction('teams', 'device-windows-unsupported', `Distributed teammates on Windows host "${host.name}" are not supported yet — ` +
|
|
1655
1344
|
`the teams remote monitor is POSIX-only (offset-tails the remote log with tail/cat/kill). ` +
|
|
@@ -1661,11 +1350,6 @@ export function registerTeamsCommands(program) {
|
|
|
1661
1350
|
catch (err) {
|
|
1662
1351
|
dieFriction('teams', 'ssh-target-unresolvable', `Can't resolve an ssh target for "${host.name}": ${err.message}`);
|
|
1663
1352
|
}
|
|
1664
|
-
// Ensure agents-cli is present + the pin is installed on the host.
|
|
1665
|
-
// Bare agent names still only warn; a concrete pin fails loud so
|
|
1666
|
-
// `teams add --device` never stages a teammate the box cannot run
|
|
1667
|
-
// (RUSH-2313). parseTeammate already resolves @latest/etc. to a concrete
|
|
1668
|
-
// version when one is pinned on the teammate spec.
|
|
1669
1353
|
try {
|
|
1670
1354
|
const parsed = parseTeammate(teammate);
|
|
1671
1355
|
const { warnings } = ensureHostReady(host, {
|
|
@@ -1678,19 +1362,10 @@ export function registerTeamsCommands(program) {
|
|
|
1678
1362
|
catch (err) {
|
|
1679
1363
|
dieFriction('teams', 'host-not-ready', `Host "${host.name}" is not ready: ${err.message}`);
|
|
1680
1364
|
}
|
|
1681
|
-
// Provision the repo on the host from the team's --repo (clone into
|
|
1682
|
-
// ~/.agents/repos/<team> or reuse an existing checkout), resolving to the
|
|
1683
|
-
// ABSOLUTE git root so every later remote command works from an absolute
|
|
1684
|
-
// path (dispatch `cd`, worktree create, polling). When the team has no
|
|
1685
|
-
// --repo (the common "just send one teammate elsewhere" case, created
|
|
1686
|
-
// without a pool), fall back to THIS checkout's origin so the headline case
|
|
1687
|
-
// works with zero extra flags whenever you run `add` inside a git repo.
|
|
1688
1365
|
let effectiveRepo = teamMeta?.repo ?? '';
|
|
1689
1366
|
if (!effectiveRepo && (await isGitRepo(process.cwd()))) {
|
|
1690
1367
|
effectiveRepo = (await getRemoteUrl(process.cwd())) ?? '';
|
|
1691
1368
|
}
|
|
1692
|
-
// Capture the ssh args ensureRemoteRepo uses so the staleness probe below
|
|
1693
|
-
// reaches the host with the same identity.
|
|
1694
1369
|
hostExtraSshArgs = host.identityFile ? ['-i', host.identityFile, '-o', 'IdentitiesOnly=yes'] : [];
|
|
1695
1370
|
try {
|
|
1696
1371
|
hostRepoPath = ensureRemoteRepo(hostTarget, effectiveRepo, team, {
|
|
@@ -1705,26 +1380,15 @@ export function registerTeamsCommands(program) {
|
|
|
1705
1380
|
}
|
|
1706
1381
|
const { agent, version, profileName } = parseTeammate(teammate);
|
|
1707
1382
|
warnAgentDeprecated(agent);
|
|
1708
|
-
// Version-installed check is about the LOCAL machine — a distributed (--on)
|
|
1709
|
-
// teammate's agent/version lives on the host, verified by ensureHostReady.
|
|
1710
1383
|
if (version && !hostName && !isVersionInstalled(agent, version)) {
|
|
1711
1384
|
dieFriction('teams', 'agent-version-not-installed', `${AGENT_NAMES[agent]} ${version} isn't installed.\n` +
|
|
1712
1385
|
` Install it: agents add ${agent}@${version}\n` +
|
|
1713
1386
|
` Or see what's installed (incl. @latest): agents view ${agent}`);
|
|
1714
1387
|
}
|
|
1715
|
-
// Advisory sign-in check: warn but NEVER block. Detection is unreliable
|
|
1716
|
-
// for opaque-cred agents, so a false negative must not stop a team. Cloud
|
|
1717
|
-
// dispatch authenticates through the provider, not the local CLI — skip it.
|
|
1718
|
-
// Distributed (--on) teammates authenticate on the host, not locally — skip.
|
|
1719
1388
|
if (!opts.force && !cloudProviderId && !hostName && !(await checkCliSignedIn(agent))) {
|
|
1720
1389
|
console.error(chalk.yellow(`⚠ ${AGENT_NAMES[agent]} may not be signed in (detection is unreliable). Adding anyway.`) +
|
|
1721
1390
|
chalk.gray(`\n If it fails to start, run \`${AGENTS[agent].cliCommand}\` to log in, or pass --force to silence this.`));
|
|
1722
1391
|
}
|
|
1723
|
-
// Advisory throttle check — only for a version-pinned teammate, which
|
|
1724
|
-
// bypasses account rotation and so can't route around a rate-limited /
|
|
1725
|
-
// out-of-credits / signed-out account (see throttleWarningLine). Skip bare
|
|
1726
|
-
// targets (rotation handles them), profiles (auth-injected account isn't
|
|
1727
|
-
// the version-home one we can read), and cloud dispatch. Warn, never block.
|
|
1728
1392
|
if (!opts.force && !cloudProviderId && !hostName && !profileName && version) {
|
|
1729
1393
|
const readiness = await checkRunAccountReadiness(agent, version);
|
|
1730
1394
|
if (!readiness.ready)
|
|
@@ -1753,27 +1417,17 @@ export function registerTeamsCommands(program) {
|
|
|
1753
1417
|
catch (err) {
|
|
1754
1418
|
dieFriction('teams', 'invalid-env', err.message);
|
|
1755
1419
|
}
|
|
1756
|
-
// Team already ensured + loaded above (teamMeta) for the --repo provisioning.
|
|
1757
1420
|
const worktreesEnabled = teamMeta?.enable_worktrees ?? false;
|
|
1758
1421
|
const sharedWorktree = teamMeta?.use_worktree ?? null;
|
|
1759
1422
|
let worktreeName = null;
|
|
1760
1423
|
let worktreePath = null;
|
|
1761
1424
|
const mgr = mkManager();
|
|
1762
|
-
// Validate name uniqueness + --after deps BEFORE creating a worktree
|
|
1763
|
-
// (RUSH-2356): a rejected add must not leave an orphan `agents/<name>`
|
|
1764
|
-
// branch that then breaks the retry with `fatal: a branch ... already
|
|
1765
|
-
// exists`. spawn() calls the same method, which memoizes this result for
|
|
1766
|
-
// exactly one consumer — so validation still lives in one place without
|
|
1767
|
-
// paying for a second sibling status refresh on the way there.
|
|
1768
1425
|
try {
|
|
1769
1426
|
await mgr.validateAddPreconditions(team, opts.name ?? null, after);
|
|
1770
1427
|
}
|
|
1771
1428
|
catch (err) {
|
|
1772
1429
|
dieFriction('teams', 'add-precondition-failed', err.message);
|
|
1773
1430
|
}
|
|
1774
|
-
// Stale-repo guard: refuse to point a team at a checkout behind origin/main
|
|
1775
|
-
// unless --confirm. A cloud teammate clones fresh in the provider, so it has
|
|
1776
|
-
// no local/remote checkout to assess — skip it there.
|
|
1777
1431
|
if (!cloudProviderId) {
|
|
1778
1432
|
if (hostName) {
|
|
1779
1433
|
await assertRepoFreshOrConfirm({
|
|
@@ -1790,10 +1444,6 @@ export function registerTeamsCommands(program) {
|
|
|
1790
1444
|
}
|
|
1791
1445
|
}
|
|
1792
1446
|
}
|
|
1793
|
-
// Track a worktree WE create in this add so a later failure (dep race,
|
|
1794
|
-
// launch error, cloud dispatch) can tear it down instead of stranding the
|
|
1795
|
-
// branch. Only a worktree THIS add created is ever torn down, so a
|
|
1796
|
-
// legitimately-pending teammate's worktree is never touched.
|
|
1797
1447
|
let createdWorktree = null;
|
|
1798
1448
|
const tearDownCreatedWorktree = async () => {
|
|
1799
1449
|
if (!createdWorktree)
|
|
@@ -1803,10 +1453,6 @@ export function registerTeamsCommands(program) {
|
|
|
1803
1453
|
await tearDownOrphanWorktree(mgr, baseCwd, name);
|
|
1804
1454
|
};
|
|
1805
1455
|
if (hostName) {
|
|
1806
|
-
// Distributed teammate: the checkout lives on the host, so we NEVER touch
|
|
1807
|
-
// the local filesystem here. A shared local worktree makes no sense for a
|
|
1808
|
-
// remote teammate; a per-teammate worktree is created ON THE HOST at launch
|
|
1809
|
-
// (createRemoteWorktree in launchRemoteProcess) — we just capture its name.
|
|
1810
1456
|
if (sharedWorktree) {
|
|
1811
1457
|
dieFriction('teams', 'shared-worktree-remote-conflict', `Team '${team}' uses a shared local --use-worktree, which can't apply to a --device (remote) teammate.`);
|
|
1812
1458
|
}
|
|
@@ -1822,10 +1468,8 @@ export function registerTeamsCommands(program) {
|
|
|
1822
1468
|
else if (opts.worktree) {
|
|
1823
1469
|
dieFriction('teams', 'worktree-requires-enable-worktrees', `--worktree requires --enable-worktrees on the team. Recreate the team with: agents teams create ${team} --enable-worktrees`);
|
|
1824
1470
|
}
|
|
1825
|
-
// Local cwd stays null — the remote cwd is repoPath / the remote worktree.
|
|
1826
1471
|
}
|
|
1827
1472
|
else if (sharedWorktree) {
|
|
1828
|
-
// Team uses a shared worktree for all teammates
|
|
1829
1473
|
const fsp = await import('fs/promises');
|
|
1830
1474
|
try {
|
|
1831
1475
|
const stat = await fsp.stat(sharedWorktree);
|
|
@@ -1852,12 +1496,6 @@ export function registerTeamsCommands(program) {
|
|
|
1852
1496
|
if (!(await isGitRepo(baseCwd))) {
|
|
1853
1497
|
dieFriction('teams', 'worktree-needs-repo', `Worktrees require a git repository. ${baseCwd} is not inside a git repo.`);
|
|
1854
1498
|
}
|
|
1855
|
-
// Was anything under this name already here BEFORE we tried? That is
|
|
1856
|
-
// the only sound basis for cleaning up a failed create: the common
|
|
1857
|
-
// failure is `fatal: a branch named 'agents/<name>' already exists`,
|
|
1858
|
-
// and removing a checkout we did not make can destroy uncommitted work
|
|
1859
|
-
// (`teams stop` deliberately KEEPS a dirty worktree, and that teammate's
|
|
1860
|
-
// record is terminal by then, so no record-based check protects it).
|
|
1861
1499
|
const preexisting = await worktreeExists(baseCwd, opts.worktree).catch(() => true);
|
|
1862
1500
|
try {
|
|
1863
1501
|
worktreeName = opts.worktree;
|
|
@@ -1865,22 +1503,12 @@ export function registerTeamsCommands(program) {
|
|
|
1865
1503
|
createdWorktree = { baseCwd, name: worktreeName };
|
|
1866
1504
|
}
|
|
1867
1505
|
catch (err) {
|
|
1868
|
-
// `git worktree add -b` can also fail PART WAY — branch ref created,
|
|
1869
|
-
// checkout not — stranding `agents/<name>` in exactly the way that
|
|
1870
|
-
// breaks the retry. Clean that up only when nothing was here before
|
|
1871
|
-
// AND there is still no checkout now: all that can be left is a
|
|
1872
|
-
// dangling branch ref, so this can never delete anyone's files. The
|
|
1873
|
-
// second half matters because a concurrent add can create a real
|
|
1874
|
-
// worktree under this name during our `git fetch`, long after the
|
|
1875
|
-
// pre-flight probe answered.
|
|
1876
1506
|
const checkoutNow = await worktreeCheckoutExists(baseCwd, opts.worktree).catch(() => true);
|
|
1877
1507
|
if (!preexisting && !checkoutNow) {
|
|
1878
1508
|
try {
|
|
1879
1509
|
await removeWorktree(baseCwd, opts.worktree);
|
|
1880
1510
|
}
|
|
1881
1511
|
catch {
|
|
1882
|
-
// Nothing to remove (the add died before git wrote anything), or
|
|
1883
|
-
// we can't. Either way the real error below is what matters.
|
|
1884
1512
|
}
|
|
1885
1513
|
}
|
|
1886
1514
|
const detail = err.message;
|
|
@@ -1894,17 +1522,6 @@ export function registerTeamsCommands(program) {
|
|
|
1894
1522
|
else if (opts.worktree) {
|
|
1895
1523
|
dieFriction('teams', 'worktree-requires-enable-worktrees', `--worktree requires --enable-worktrees on the team. Recreate the team with: agents teams create ${team} --enable-worktrees`);
|
|
1896
1524
|
}
|
|
1897
|
-
// The team's project (`teams create --project`) contributes a base cwd and
|
|
1898
|
-
// the access grants for its other directories. It sits BELOW --cwd in the
|
|
1899
|
-
// precedence chain: an explicit --cwd on this teammate still wins.
|
|
1900
|
-
//
|
|
1901
|
-
// Grants are attached even when a worktree or --cwd owns the cwd — the
|
|
1902
|
-
// sibling repos are what the project binds, not where the teammate sits.
|
|
1903
|
-
// Only the base cwd is resolved here — a LOCAL teammate needs a concrete
|
|
1904
|
-
// directory to start in. The GRANTS are deliberately not resolved now:
|
|
1905
|
-
// an unpinned teammate on a --devices pool is placed at launch, so its
|
|
1906
|
-
// shape (absolute vs ~/…) is not yet knowable. The project name rides on
|
|
1907
|
-
// the record and resolveTeammateGrants resolves it per launch.
|
|
1908
1525
|
let projectCwd;
|
|
1909
1526
|
if (teamMeta?.project && !hostName) {
|
|
1910
1527
|
const { resolveProjectRef } = await import('../lib/project-root.js');
|
|
@@ -1915,29 +1532,16 @@ export function registerTeamsCommands(program) {
|
|
|
1915
1532
|
dieFriction('teams', 'project-unresolved', err.message);
|
|
1916
1533
|
}
|
|
1917
1534
|
}
|
|
1918
|
-
// Distributed teammates have no LOCAL cwd — their working dir lives on the
|
|
1919
|
-
// host (repoPath / the remote worktree). Local teammates default to the
|
|
1920
|
-
// worktree path, then --cwd, then the project's primary directory, then
|
|
1921
|
-
// the current directory.
|
|
1922
1535
|
const cwd = hostName ? null : (worktreePath ?? opts.cwd ?? projectCwd ?? process.cwd());
|
|
1923
|
-
// Factory teammates: prepend the worker-skill preamble to every task
|
|
1924
|
-
// prompt so implementers/testers/reviewers know about the Ledger, the
|
|
1925
|
-
// dynamic DAG, and the pattern for filing new tasks mid-flight. No
|
|
1926
|
-
// preamble when --task-type isn't set (plain teammates work as before).
|
|
1927
1536
|
let effectiveTask = task;
|
|
1928
1537
|
if (taskType) {
|
|
1929
1538
|
effectiveTask = factoryWorkerPreamble(team, opts.name ?? null, taskType, after) + '\n\n' + task;
|
|
1930
1539
|
}
|
|
1931
|
-
// Dispatcher callback: when a staged cloud teammate's deps resolve,
|
|
1932
|
-
// AgentManager.startReady() invokes this to kick off the remote task.
|
|
1933
1540
|
if (cloudProviderId) {
|
|
1934
1541
|
const providerId = cloudProviderId;
|
|
1935
1542
|
mgr.setCloudDispatcher(async (a) => {
|
|
1936
1543
|
const prov = resolveProvider(providerId);
|
|
1937
1544
|
const dispatchOpts = {
|
|
1938
|
-
// PHNX-3236: same self-merge boundary as the local/remote path — a
|
|
1939
|
-
// cloud teammate has no inherited merge-guard.sh, so the prompt is
|
|
1940
|
-
// its only layer.
|
|
1941
1545
|
prompt: withTeammatePrPolicy(a.prompt, a.mode),
|
|
1942
1546
|
agent: a.agentType,
|
|
1943
1547
|
repo: opts.repo,
|
|
@@ -2002,14 +1606,10 @@ export function registerTeamsCommands(program) {
|
|
|
2002
1606
|
}
|
|
2003
1607
|
}
|
|
2004
1608
|
catch (err) {
|
|
2005
|
-
// The add failed after we created its worktree — tear the worktree +
|
|
2006
|
-
// branch down so a retry isn't blocked by `fatal: a branch ... already
|
|
2007
|
-
// exists` (RUSH-2356). Best-effort: report the original failure either way.
|
|
2008
1609
|
await tearDownCreatedWorktree();
|
|
2009
1610
|
dieFriction('teams', 'add-failed', `Could not add ${fullName(agent, version)} to ${team}: ${err.message}`);
|
|
2010
1611
|
}
|
|
2011
1612
|
});
|
|
2012
|
-
// status
|
|
2013
1613
|
addHostOption(teams.command('status [team]'))
|
|
2014
1614
|
.aliases(['s', 'st', 'check'])
|
|
2015
1615
|
.description("Check in on a team: status, files touched, recent commands, last messages. Pass --verbose for the full per-teammate dump; --since for delta polling.")
|
|
@@ -2022,8 +1622,6 @@ export function registerTeamsCommands(program) {
|
|
|
2022
1622
|
.action(async (team, opts) => {
|
|
2023
1623
|
const filter = opts.filter;
|
|
2024
1624
|
const mgr = mkManager();
|
|
2025
|
-
// No team given → drop into the picker (TTY) or fail clearly (script).
|
|
2026
|
-
// --parent-session is its own lookup key, so it needs no team at all.
|
|
2027
1625
|
if (!team && !opts.parentSession) {
|
|
2028
1626
|
const picked = await pickTeamOr(mgr, 'agents teams status');
|
|
2029
1627
|
if (!picked)
|
|
@@ -2037,17 +1635,12 @@ export function registerTeamsCommands(program) {
|
|
|
2037
1635
|
: result.agents;
|
|
2038
1636
|
const filtered = { ...result, agents };
|
|
2039
1637
|
if (isJsonMode(opts)) {
|
|
2040
|
-
// JSON output also respects --verbose. Default = compact summary
|
|
2041
|
-
// shape; --verbose = full AgentStatusDetail. Same toggle covers
|
|
2042
|
-
// both text and JSON so MCP-style consumers can opt into detail.
|
|
2043
1638
|
const payload = opts.verbose
|
|
2044
1639
|
? filtered
|
|
2045
1640
|
: toTaskStatusSummary(filtered);
|
|
2046
1641
|
console.log(JSON.stringify(payload, null, 2));
|
|
2047
1642
|
return;
|
|
2048
1643
|
}
|
|
2049
|
-
// A --parent-session lookup spans teams, so there is no single team to
|
|
2050
|
-
// check for existence — its label is the session that spawned them.
|
|
2051
1644
|
const label = team ?? `session ${opts.parentSession.slice(0, 8)}`;
|
|
2052
1645
|
if (team) {
|
|
2053
1646
|
const exists = await teamExists(team);
|
|
@@ -2069,11 +1662,9 @@ export function registerTeamsCommands(program) {
|
|
|
2069
1662
|
}
|
|
2070
1663
|
}
|
|
2071
1664
|
catch (err) {
|
|
2072
|
-
// `team` is undefined for a --parent-session lookup, which spans teams.
|
|
2073
1665
|
dieFriction('teams', 'status-failed', `Could not check on ${team ? `team ${team}` : 'the requested session'}: ${err.message}`);
|
|
2074
1666
|
}
|
|
2075
1667
|
});
|
|
2076
|
-
// active — list every live teammate across every team, grouped by team.
|
|
2077
1668
|
teams
|
|
2078
1669
|
.command('active')
|
|
2079
1670
|
.description('List every teammate running right now, across all teams (PID-alive check).')
|
|
@@ -2109,7 +1700,6 @@ export function registerTeamsCommands(program) {
|
|
|
2109
1700
|
console.log(chalk.bold(`Team ${chalk.cyan(team)} ${chalk.gray(`(${agents.length} working)`)}`));
|
|
2110
1701
|
for (const a of agents) {
|
|
2111
1702
|
const ident = a.name || shortId(a.agentId);
|
|
2112
|
-
// A distributed teammate has no local pid; show its host + remote pid.
|
|
2113
1703
|
const pidStr = a.hostName
|
|
2114
1704
|
? chalk.cyan(`on ${a.hostName}`) + (a.remotePid ? chalk.gray(` (pid ${a.remotePid})`) : '')
|
|
2115
1705
|
: a.pid ? chalk.yellow(`pid ${a.pid}`) : chalk.gray('pid ?');
|
|
@@ -2120,7 +1710,6 @@ export function registerTeamsCommands(program) {
|
|
|
2120
1710
|
}
|
|
2121
1711
|
console.log(chalk.gray(`${running.length} teammate${running.length === 1 ? '' : 's'} running. See 'agents sessions --active' for the full cross-context view.`));
|
|
2122
1712
|
});
|
|
2123
|
-
// start — fire any staged teammates whose --after deps have all completed
|
|
2124
1713
|
addHostOption(teams.command('start [team]'))
|
|
2125
1714
|
.description('Launch ready teammates independently. Failed launch/placement and blocked --after dependencies persist in status; --watch keeps draining viable DAG branches.')
|
|
2126
1715
|
.option('--json', 'Output machine-readable JSON')
|
|
@@ -2137,10 +1726,6 @@ export function registerTeamsCommands(program) {
|
|
|
2137
1726
|
return;
|
|
2138
1727
|
team = picked;
|
|
2139
1728
|
}
|
|
2140
|
-
// RUSH-2450: a disbanded team must not be re-startable. Orphan PENDING
|
|
2141
|
-
// records can no longer resurrect after purge + saveMeta guard, but if a
|
|
2142
|
-
// caller still points start at a gone team name, fail loud with a reason
|
|
2143
|
-
// instead of launching nothing and looking successful.
|
|
2144
1729
|
if (!(await teamExists(team))) {
|
|
2145
1730
|
const orphanCount = (await mgr.listByTask(team)).length;
|
|
2146
1731
|
const msg = orphanCount > 0
|
|
@@ -2169,8 +1754,6 @@ export function registerTeamsCommands(program) {
|
|
|
2169
1754
|
const intervalMs = Math.max(1000, Number.parseInt(opts.interval, 10) * 1000 || 8000);
|
|
2170
1755
|
const maxWaves = Math.max(1, Number.parseInt(opts.maxWaves, 10) || 1000);
|
|
2171
1756
|
const json = isJsonMode(opts);
|
|
2172
|
-
// Live budget kill-switch (issue #399). Dormant when no caps set — the
|
|
2173
|
-
// factory dropping this in returns null and runSupervisor short-circuits.
|
|
2174
1757
|
const { createTeamBudgetWatcher } = await import('../lib/budget/live-team.js');
|
|
2175
1758
|
const budgetWatcher = createTeamBudgetWatcher({
|
|
2176
1759
|
manager: mgr,
|
|
@@ -2204,10 +1787,6 @@ export function registerTeamsCommands(program) {
|
|
|
2204
1787
|
emit('teams.complete', { module: 'teams', team, stoppedBy: result.stoppedBy, waves: result.waves, durationMs: result.elapsed_ms });
|
|
2205
1788
|
if (result.stoppedBy === 'drained') {
|
|
2206
1789
|
console.log(chalk.green(`Factory drained in ${elapsed}s (${result.waves} waves).`));
|
|
2207
|
-
// First-successful-team star nudge (one-time, non-nagging). "drained"
|
|
2208
|
-
// only means nothing is pending/running — teammates may have failed — so
|
|
2209
|
-
// gate on a clean drain (failed === 0). A team where every teammate
|
|
2210
|
-
// failed is not the success this nudge celebrates.
|
|
2211
1790
|
if ((result.failed ?? 0) === 0) {
|
|
2212
1791
|
maybeShowStarNudge({ quiet: opts.json });
|
|
2213
1792
|
}
|
|
@@ -2223,10 +1802,9 @@ export function registerTeamsCommands(program) {
|
|
|
2223
1802
|
console.error(chalk.red(`Budget kill-switch tripped after ${result.waves} waves` +
|
|
2224
1803
|
(b ? ` (cap ${b.cap}: $${b.spend.toFixed(2)} > $${b.limit.toFixed(2)})` : '') +
|
|
2225
1804
|
`.`));
|
|
2226
|
-
process.exitCode = 7;
|
|
1805
|
+
process.exitCode = 7;
|
|
2227
1806
|
}
|
|
2228
1807
|
});
|
|
2229
|
-
// pr-watch — autonomous PR lifecycle (issue #338)
|
|
2230
1808
|
addHostOption(teams.command('pr-watch [team]'))
|
|
2231
1809
|
.description('Watch the PRs a team opened and react autonomously: RED CI -> spawn a fix teammate with the failure logs; new review comment -> route a bugfix teammate. Both slot into the team DAG (visible in `teams status`).')
|
|
2232
1810
|
.option('--interval <seconds>', 'Seconds between polls (default 30)', '30')
|
|
@@ -2277,8 +1855,6 @@ export function registerTeamsCommands(program) {
|
|
|
2277
1855
|
console.error(`[${ts}] ${chalk.red('error')} on ${e.prUrl}: ${e.message}`);
|
|
2278
1856
|
}
|
|
2279
1857
|
};
|
|
2280
|
-
// A fixer's dedupe guard clears once it settles, so a still-red check can
|
|
2281
|
-
// spawn its next (budget-bounded) wave. Terminal = completed/failed/stopped.
|
|
2282
1858
|
const reactionSettled = async (label) => {
|
|
2283
1859
|
const roster = await mgr.listByTask(resolvedTeam);
|
|
2284
1860
|
const teammate = roster.find((a) => a.name === label || shortId(a.agentId) === label);
|
|
@@ -2290,9 +1866,6 @@ export function registerTeamsCommands(program) {
|
|
|
2290
1866
|
try {
|
|
2291
1867
|
const result = await runPrWatch({
|
|
2292
1868
|
resolveTargets: async () => {
|
|
2293
|
-
// Drive the DAG each pass so fix/bugfix teammates staged --after a
|
|
2294
|
-
// now-completed source teammate actually launch — no separate
|
|
2295
|
-
// `teams start --watch` needed.
|
|
2296
1869
|
await mgr.rescanFromDisk();
|
|
2297
1870
|
await mgr.startReady(resolvedTeam);
|
|
2298
1871
|
return resolvePrWatchTargets(mgr, resolvedTeam);
|
|
@@ -2323,7 +1896,6 @@ export function registerTeamsCommands(program) {
|
|
|
2323
1896
|
process.off('SIGTERM', onSig);
|
|
2324
1897
|
}
|
|
2325
1898
|
});
|
|
2326
|
-
// stop
|
|
2327
1899
|
addHostOption(teams.command('stop [team] [teammate]'))
|
|
2328
1900
|
.description('Stop a running teammate. Resume it later with `agents teams resume`. Cleans up worktree if no uncommitted changes.')
|
|
2329
1901
|
.option('--json', 'Output machine-readable JSON')
|
|
@@ -2364,12 +1936,10 @@ export function registerTeamsCommands(program) {
|
|
|
2364
1936
|
const stopRes = await handleStop(mgr, team, agentId);
|
|
2365
1937
|
if ('error' in stopRes)
|
|
2366
1938
|
dieFriction('teams', 'stop-failed', stopRes.error);
|
|
2367
|
-
// Clean up worktree if this teammate had one
|
|
2368
1939
|
let worktreeKept = false;
|
|
2369
1940
|
if (agent?.worktreeName && agent?.worktreePath) {
|
|
2370
1941
|
try {
|
|
2371
1942
|
if (agent.hostName && agent.hostTarget && agent.repoPath) {
|
|
2372
|
-
// Distributed teammate: guard + remove the worktree ON THE HOST.
|
|
2373
1943
|
const ssh = { extraSshArgs: agent.hostIdentityFile ? ['-i', agent.hostIdentityFile, '-o', 'IdentitiesOnly=yes'] : [] };
|
|
2374
1944
|
if (remoteWorktreeDirty(agent.hostTarget, agent.worktreePath, ssh)) {
|
|
2375
1945
|
worktreeKept = true;
|
|
@@ -2390,7 +1960,6 @@ export function registerTeamsCommands(program) {
|
|
|
2390
1960
|
}
|
|
2391
1961
|
}
|
|
2392
1962
|
catch {
|
|
2393
|
-
// best-effort cleanup
|
|
2394
1963
|
}
|
|
2395
1964
|
}
|
|
2396
1965
|
if (isJsonMode(opts)) {
|
|
@@ -2413,11 +1982,6 @@ export function registerTeamsCommands(program) {
|
|
|
2413
1982
|
console.log(chalk.yellow(`Worktree '${agent.worktreeName}' has uncommitted changes. Keeping it at: ${agent.worktreePath}`));
|
|
2414
1983
|
}
|
|
2415
1984
|
});
|
|
2416
|
-
// message / resume — send a follow-up message to a teammate. Routes by the
|
|
2417
|
-
// teammate's reconciled status: a RUNNING teammate is STEERED via its mailbox
|
|
2418
|
-
// (delivered at its next tool call); a STOPPED one (completed/failed/stopped)
|
|
2419
|
-
// is RESUMED — re-entering its own session with the message as the next user
|
|
2420
|
-
// turn, re-attaching it to the team as live.
|
|
2421
1985
|
async function teamMessageAction(team, ref, message, opts) {
|
|
2422
1986
|
const mgr = mkManager();
|
|
2423
1987
|
const lookup = await mgr.resolveAgentIdInTask(team, ref);
|
|
@@ -2428,9 +1992,6 @@ export function registerTeamsCommands(program) {
|
|
|
2428
1992
|
dieFriction('teams', 'teammate-ambiguous', `'${ref}' matches multiple teammates: ${shorts}. Use more characters or a name.`, 2);
|
|
2429
1993
|
}
|
|
2430
1994
|
const agentId = lookup.agentId;
|
|
2431
|
-
// mgr.get reconciles the teammate's status (PID + start-time guard / remote
|
|
2432
|
-
// .exit sentinel / exit-code reap) before we branch — so running-vs-stopped
|
|
2433
|
-
// is a fact, not a guess.
|
|
2434
1995
|
const agent = await mgr.get(agentId);
|
|
2435
1996
|
if (!agent)
|
|
2436
1997
|
dieFriction('teams', 'teammate-vanished', `Teammate ${shortId(agentId)} vanished from team ${team}.`);
|
|
@@ -2449,7 +2010,6 @@ export function registerTeamsCommands(program) {
|
|
|
2449
2010
|
dieFriction('teams', 'resume-needs-message', `Teammate '${display}' is ${status} — pass a message to resume it: \`agents teams resume ${team} ${display} "<message>"\`.`);
|
|
2450
2011
|
return;
|
|
2451
2012
|
case 'steer': {
|
|
2452
|
-
// Running -> steer via mailbox; never re-launch (that forks a 2nd session).
|
|
2453
2013
|
enqueue(mailboxDir(agentId), { to: agentId, text: message, from: opts.from });
|
|
2454
2014
|
if (isJsonMode(opts)) {
|
|
2455
2015
|
console.log(JSON.stringify({ team, agent_id: agentId, name: agent.name ?? null, action: 'steer', status }, null, 2));
|
|
@@ -2460,7 +2020,6 @@ export function registerTeamsCommands(program) {
|
|
|
2460
2020
|
return;
|
|
2461
2021
|
}
|
|
2462
2022
|
case 'resume': {
|
|
2463
|
-
// Stopped / completed / failed -> resume its own session with the message.
|
|
2464
2023
|
try {
|
|
2465
2024
|
await mgr.resumeTeammate(agentId, message);
|
|
2466
2025
|
}
|
|
@@ -2492,7 +2051,6 @@ export function registerTeamsCommands(program) {
|
|
|
2492
2051
|
.action(async (team, ref, message, opts) => {
|
|
2493
2052
|
await teamMessageAction(team, ref, message, opts);
|
|
2494
2053
|
});
|
|
2495
|
-
// remove
|
|
2496
2054
|
teams
|
|
2497
2055
|
.command('remove [team] [teammate]')
|
|
2498
2056
|
.alias('rm')
|
|
@@ -2533,7 +2091,6 @@ export function registerTeamsCommands(program) {
|
|
|
2533
2091
|
const agentId = lookup.agentId;
|
|
2534
2092
|
const agent = await mgr.get(agentId);
|
|
2535
2093
|
const display = agent?.name || shortId(agentId);
|
|
2536
|
-
// Require agent to be stopped first
|
|
2537
2094
|
if (agent?.status === 'running' || agent?.status === 'pending') {
|
|
2538
2095
|
dieFriction('teams', 'remove-still-running', `Teammate '${display}' is still ${agent.status}. Run 'agents teams stop ${team} ${display}' first.`);
|
|
2539
2096
|
}
|
|
@@ -2543,7 +2100,6 @@ export function registerTeamsCommands(program) {
|
|
|
2543
2100
|
await fs.rm(dir, { recursive: true, force: true });
|
|
2544
2101
|
}
|
|
2545
2102
|
catch {
|
|
2546
|
-
// best-effort cleanup
|
|
2547
2103
|
}
|
|
2548
2104
|
}
|
|
2549
2105
|
if (isJsonMode(opts)) {
|
|
@@ -2552,7 +2108,6 @@ export function registerTeamsCommands(program) {
|
|
|
2552
2108
|
}
|
|
2553
2109
|
console.log(chalk.green(`Removed ${chalk.cyan(display)} from team ${chalk.cyan(team)}.`));
|
|
2554
2110
|
});
|
|
2555
|
-
// disband
|
|
2556
2111
|
teams
|
|
2557
2112
|
.command('disband [team]')
|
|
2558
2113
|
.alias('d')
|
|
@@ -2574,11 +2129,8 @@ export function registerTeamsCommands(program) {
|
|
|
2574
2129
|
const stopRes = await handleStop(mgr, team);
|
|
2575
2130
|
if ('error' in stopRes)
|
|
2576
2131
|
dieFriction('teams', 'stop-failed', stopRes.error);
|
|
2577
|
-
// Snapshot the roster once for worktree cleanup + messaging. Purge below
|
|
2578
|
-
// is the terminal removal of teammate records (RUSH-2450).
|
|
2579
2132
|
const status = await handleStatus(mgr, team, 'all');
|
|
2580
2133
|
const rosterBefore = status.agents;
|
|
2581
|
-
// Clean up worktrees for all teammates
|
|
2582
2134
|
const baseCwd = process.cwd();
|
|
2583
2135
|
const keptWorktrees = [];
|
|
2584
2136
|
for (const a of rosterBefore) {
|
|
@@ -2586,7 +2138,6 @@ export function registerTeamsCommands(program) {
|
|
|
2586
2138
|
if (agent?.worktreeName && agent?.worktreePath) {
|
|
2587
2139
|
try {
|
|
2588
2140
|
if (agent.hostName && agent.hostTarget && agent.repoPath) {
|
|
2589
|
-
// Distributed teammate: guard + remove the worktree ON THE HOST.
|
|
2590
2141
|
const ssh = { extraSshArgs: agent.hostIdentityFile ? ['-i', agent.hostIdentityFile, '-o', 'IdentitiesOnly=yes'] : [] };
|
|
2591
2142
|
if (remoteWorktreeDirty(agent.hostTarget, agent.worktreePath, ssh)) {
|
|
2592
2143
|
keptWorktrees.push(agent.worktreeName);
|
|
@@ -2605,14 +2156,9 @@ export function registerTeamsCommands(program) {
|
|
|
2605
2156
|
}
|
|
2606
2157
|
}
|
|
2607
2158
|
}
|
|
2608
|
-
catch {
|
|
2159
|
+
catch { }
|
|
2609
2160
|
}
|
|
2610
2161
|
}
|
|
2611
|
-
// Drop the registry entry FIRST so any concurrent supervisor's saveMeta
|
|
2612
|
-
// (RUSH-2450) refuses to re-persist teammates for this team, then purge
|
|
2613
|
-
// the durable teammate records + in-memory cache. Order matters: purge
|
|
2614
|
-
// after removeTeam closes the race where a supervisor re-writes meta
|
|
2615
|
-
// between the two steps.
|
|
2616
2162
|
const existed = await removeTeam(team);
|
|
2617
2163
|
const removedIds = await mgr.purgeByTask(team, { keepLogs: Boolean(opts.keepLogs) });
|
|
2618
2164
|
if (isJsonMode(opts)) {
|
|
@@ -2626,8 +2172,6 @@ export function registerTeamsCommands(program) {
|
|
|
2626
2172
|
return;
|
|
2627
2173
|
}
|
|
2628
2174
|
if (!existed && stopRes.stopped.length === 0 && rosterBefore.length === 0 && removedIds.length === 0) {
|
|
2629
|
-
// Second disband on a fully-gone team: clean no-op, not a false success
|
|
2630
|
-
// that claims N logs were cleared again.
|
|
2631
2175
|
dieFriction('teams', 'team-not-found', `No team called '${team}' (already disbanded or never created)`, 2);
|
|
2632
2176
|
}
|
|
2633
2177
|
console.log(chalk.green(`Team ${chalk.cyan(team)} disbanded.`));
|
|
@@ -2643,7 +2187,6 @@ export function registerTeamsCommands(program) {
|
|
|
2643
2187
|
console.log(chalk.yellow(` Kept ${keptWorktrees.length} worktree(s) with uncommitted changes: ${keptWorktrees.join(', ')}`));
|
|
2644
2188
|
}
|
|
2645
2189
|
});
|
|
2646
|
-
// logs
|
|
2647
2190
|
teams
|
|
2648
2191
|
.command('logs [teammate]')
|
|
2649
2192
|
.alias('log')
|
|
@@ -2654,10 +2197,6 @@ export function registerTeamsCommands(program) {
|
|
|
2654
2197
|
.option('--teammate <name>', 'Teammate name (alias for the positional arg; useful for scripts)')
|
|
2655
2198
|
.action(async (ref, opts) => {
|
|
2656
2199
|
const base = await getAgentsDir();
|
|
2657
|
-
// Resolve teammate identity. Precedence:
|
|
2658
|
-
// 1. positional `[teammate]` arg (back-compat, most common)
|
|
2659
|
-
// 2. --teammate <name> flag (script-friendly alias)
|
|
2660
|
-
// 3. interactive picker (TTY only)
|
|
2661
2200
|
const teammateRef = ref ?? opts.teammate;
|
|
2662
2201
|
let agentId;
|
|
2663
2202
|
if (!teammateRef) {
|
|
@@ -2679,9 +2218,6 @@ export function registerTeamsCommands(program) {
|
|
|
2679
2218
|
}
|
|
2680
2219
|
agentId = resolved.agentId;
|
|
2681
2220
|
}
|
|
2682
|
-
// Concise by default: a teammate's agentId IS its agent session id (passed
|
|
2683
|
-
// as --session-id at launch), so render the same summary digest as
|
|
2684
|
-
// `agents sessions <id>`. --full / -n <lines> opt into the raw stdout.log.
|
|
2685
2221
|
if (!opts.full && !opts.tail) {
|
|
2686
2222
|
const all = await discoverSessions({ all: true, limit: 5000 });
|
|
2687
2223
|
const matches = resolveSessionById(all, agentId);
|
|
@@ -2689,8 +2225,6 @@ export function registerTeamsCommands(program) {
|
|
|
2689
2225
|
await renderSessionLog(matches[0], 'summary');
|
|
2690
2226
|
return;
|
|
2691
2227
|
}
|
|
2692
|
-
// No resolvable session (e.g. a non-Claude teammate) — fall through to a
|
|
2693
|
-
// bounded tail of raw stdout rather than dumping the whole file.
|
|
2694
2228
|
}
|
|
2695
2229
|
const logPath = path.join(base, agentId, 'stdout.log');
|
|
2696
2230
|
try {
|
|
@@ -2699,7 +2233,6 @@ export function registerTeamsCommands(program) {
|
|
|
2699
2233
|
process.stdout.write(content);
|
|
2700
2234
|
return;
|
|
2701
2235
|
}
|
|
2702
|
-
// Default tail size keeps an un-resolvable teammate's glance bounded too.
|
|
2703
2236
|
const n = opts.tail ? Math.max(1, parseInt(opts.tail, 10) || 50) : 40;
|
|
2704
2237
|
const lines = content.split('\n');
|
|
2705
2238
|
process.stdout.write(lines.slice(-n).join('\n'));
|
|
@@ -2708,7 +2241,6 @@ export function registerTeamsCommands(program) {
|
|
|
2708
2241
|
dieFriction('teams', 'teammate-notes-not-found', `No notes on record for teammate '${teammateRef ?? agentId}' (looked in ${logPath})`, 2);
|
|
2709
2242
|
}
|
|
2710
2243
|
});
|
|
2711
|
-
// doctor
|
|
2712
2244
|
teams
|
|
2713
2245
|
.command('doctor')
|
|
2714
2246
|
.alias('dr')
|