@phnx-labs/agents-cli 1.22.119 → 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 +236 -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 +20 -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
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents projects` — named, multi-repo projects and the progress
|
|
3
|
-
* rollup. Definitions live in `~/.agents/projects/<name>.yaml` (see
|
|
4
|
-
* `lib/projects.ts`); this registers the command tree over them.
|
|
5
|
-
*
|
|
6
|
-
* The headline is `status`: instead of the vague per-agent activity line, it
|
|
7
|
-
* rolls every session up by project (matched on cwd) into one card — agents by
|
|
8
|
-
* lifecycle state, plan completion, open PRs, and tickets in flight.
|
|
9
|
-
*/
|
|
10
1
|
import chalk from 'chalk';
|
|
11
2
|
import * as fs from 'fs';
|
|
12
3
|
import * as path from 'path';
|
|
@@ -30,29 +21,24 @@ import { checkRepoSlug } from '../lib/project-doctor.js';
|
|
|
30
21
|
import { formatFocusAreas, readFocusAreas } from '../lib/project-focus.js';
|
|
31
22
|
import { formatVerdict, scheduleVerdict } from '../lib/project-schedule.js';
|
|
32
23
|
import { buildLinearImportCandidates, validateImportOpts, } from '../lib/project-import.js';
|
|
33
|
-
import { buildProjectPrs, mergeProjectPr, resolveTargetSlugs, MERGE_METHODS } from '../lib/github/project-prs.js';
|
|
24
|
+
import { approveProjectPr, buildProjectPrs, commentOnProjectPr, markProjectPrReady, mergeProjectPr, resolveTargetSlugs, setProjectPrAutoMerge, MERGE_METHODS, MERGED_WINDOW_DAYS, } from '../lib/github/project-prs.js';
|
|
34
25
|
import { ghExec } from '../lib/github/pr-mergeable.js';
|
|
35
|
-
|
|
26
|
+
import { readCiFailure, rerunFailedJobs } from '../lib/github/ci-failure.js';
|
|
27
|
+
import { registerProjectTodoCommands } from './projects-todo.js';
|
|
28
|
+
function ciMark(state) {
|
|
29
|
+
if (state === 'SUCCESS')
|
|
30
|
+
return chalk.green('✓');
|
|
31
|
+
if (state === 'FAILURE' || state === 'ERROR')
|
|
32
|
+
return chalk.red('✗');
|
|
33
|
+
if (state === 'PENDING' || state === 'EXPECTED')
|
|
34
|
+
return chalk.yellow('●');
|
|
35
|
+
return ' ';
|
|
36
|
+
}
|
|
36
37
|
const PROJECTS_NO_FANOUT_ENV = 'AGENTS_PROJECTS_LOCAL';
|
|
37
|
-
/** Max peers named in the skipped note before the rest collapse to `+N`. */
|
|
38
38
|
const SKIPPED_NAME_LIMIT = 4;
|
|
39
|
-
/**
|
|
40
|
-
* A path-shaped `agents projects view` argument — `.`, `..`, a `~`-prefixed
|
|
41
|
-
* value, or anything containing a path separator — means "auto-detect the
|
|
42
|
-
* project for this DIRECTORY", not "a project named literally this". A bare
|
|
43
|
-
* token (no separators) stays a project name, exactly as before.
|
|
44
|
-
*/
|
|
45
39
|
export function looksLikePath(token) {
|
|
46
40
|
return token === '.' || token === '..' || token.startsWith('~') || token.includes('/');
|
|
47
41
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Best-effort cwd->project detection for `agents projects view <path>`. Delegates
|
|
50
|
-
* to the shared {@link projectNameForCwd} (def-root containment, longest wins),
|
|
51
|
-
* then reads the matched definition's Linear binding and root so ONE call yields
|
|
52
|
-
* the name AND the Linear projectId. Fail-open: an all-null shape when nothing
|
|
53
|
-
* contains the path — never throws, so a scripted caller stays unscoped rather
|
|
54
|
-
* than crashing. This subsumes the removed `agents projects for-cwd`.
|
|
55
|
-
*/
|
|
56
42
|
export function detectProjectForPath(cwd, defs) {
|
|
57
43
|
const name = projectNameForCwd(cwd, defs);
|
|
58
44
|
const def = name ? defs.find((d) => d.name === name) : undefined;
|
|
@@ -65,13 +51,6 @@ export function detectProjectForPath(cwd, defs) {
|
|
|
65
51
|
root: def?.root ?? null,
|
|
66
52
|
};
|
|
67
53
|
}
|
|
68
|
-
/**
|
|
69
|
-
* One compact trailing note for peers that didn't answer the `--fleet`
|
|
70
|
-
* fan-out — unreachable, running an agents-cli too old to carry `projects
|
|
71
|
-
* probe`, or too slow to finish inside the 12s SSH budget. Mirrors
|
|
72
|
-
* `formatUnreachableNote` (activity) with the probe-specific reasons; empty
|
|
73
|
-
* string when everything answered.
|
|
74
|
-
*/
|
|
75
54
|
export function formatFleetSkippedNote(skipped) {
|
|
76
55
|
if (skipped.length === 0)
|
|
77
56
|
return '';
|
|
@@ -81,14 +60,6 @@ export function formatFleetSkippedNote(skipped) {
|
|
|
81
60
|
const noun = skipped.length === 1 ? 'device' : 'devices';
|
|
82
61
|
return chalk.gray(` · ${skipped.length} ${noun} didn't answer (unreachable, older agents-cli, or timed out): ${list}\n`);
|
|
83
62
|
}
|
|
84
|
-
/**
|
|
85
|
-
* One compact trailing note for peers that DID answer a fan-out but whose
|
|
86
|
-
* payload failed verification — a wrong machine id, a fingerprint that doesn't
|
|
87
|
-
* match the targets we sent, or a malformed row. Deliberately separate from
|
|
88
|
-
* {@link formatFleetSkippedNote}: silence means a peer never ran, while this
|
|
89
|
-
* means it ran and we cannot trust what it reports, which is the worse state.
|
|
90
|
-
* Empty string when every answer verified.
|
|
91
|
-
*/
|
|
92
63
|
export function formatFleetUnverifiedNote(unverified) {
|
|
93
64
|
if (unverified.length === 0)
|
|
94
65
|
return '';
|
|
@@ -98,14 +69,12 @@ export function formatFleetUnverifiedNote(unverified) {
|
|
|
98
69
|
const noun = unverified.length === 1 ? 'device' : 'devices';
|
|
99
70
|
return chalk.red(` · ${unverified.length} ${noun} answered with a result that could not be verified: ${list}\n`);
|
|
100
71
|
}
|
|
101
|
-
/** `path:purpose` → a context anchor. Purpose may contain colons. */
|
|
102
72
|
function parseContextFlag(raw) {
|
|
103
73
|
const i = raw.indexOf(':');
|
|
104
74
|
if (i === -1)
|
|
105
75
|
return { path: raw.trim(), purpose: '' };
|
|
106
76
|
return { path: raw.slice(0, i).trim(), purpose: raw.slice(i + 1).trim() };
|
|
107
77
|
}
|
|
108
|
-
/** `objective:measure` → a goal. The measure is optional; the objective may contain colons only after the first is claimed. */
|
|
109
78
|
function parseGoalFlag(raw) {
|
|
110
79
|
const i = raw.indexOf(':');
|
|
111
80
|
if (i === -1)
|
|
@@ -116,14 +85,6 @@ function parseGoalFlag(raw) {
|
|
|
116
85
|
goal.measure = measure;
|
|
117
86
|
return goal;
|
|
118
87
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Best-effort `owner/repo` from a repo's origin remote.
|
|
121
|
-
*
|
|
122
|
-
* `stderr: 'ignore'` is load-bearing, not tidiness. A checkout with no origin
|
|
123
|
-
* makes git print `error: No such remote 'origin'` on ITS stderr, which is the
|
|
124
|
-
* terminal's — the catch below never sees it. Absence of a remote is an
|
|
125
|
-
* expected answer here (`undefined`), not something to report.
|
|
126
|
-
*/
|
|
127
88
|
export function originSlug(cwd) {
|
|
128
89
|
try {
|
|
129
90
|
const url = execFileSync('git', ['remote', 'get-url', 'origin'], {
|
|
@@ -137,18 +98,6 @@ export function originSlug(cwd) {
|
|
|
137
98
|
return undefined;
|
|
138
99
|
}
|
|
139
100
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Turn a `--dir` / `--add-dir` value into a `repos[]` row.
|
|
142
|
-
*
|
|
143
|
-
* The slug comes from the DIRECTORY'S OWN origin remote, never from its path:
|
|
144
|
-
* a checkout at `~/src/github.com/muqsitnawaz/agents-cli` whose origin is
|
|
145
|
-
* `phnx-labs/agents-cli` must record the remote it actually pushes to. Pass
|
|
146
|
-
* `slugOverride` for a directory with no origin (a vendored tree, a fresh
|
|
147
|
-
* `git init`).
|
|
148
|
-
*
|
|
149
|
-
* The stored `path` is left for `writeProjectDef` to normalize home-relative,
|
|
150
|
-
* so the same definition re-roots on every machine.
|
|
151
|
-
*/
|
|
152
101
|
export function projectRepoFromDir(dir, slugOverride) {
|
|
153
102
|
const abs = path.resolve(expandLocalHome(dir));
|
|
154
103
|
if (!fs.existsSync(abs))
|
|
@@ -165,12 +114,6 @@ export function projectRepoFromDir(dir, slugOverride) {
|
|
|
165
114
|
}
|
|
166
115
|
return { ok: true, repo: { slug, path: toHomeRelative(abs) } };
|
|
167
116
|
}
|
|
168
|
-
/**
|
|
169
|
-
* List the workspace's Linear projects and plan their import, binding each to a
|
|
170
|
-
* local checkout under the configured projects root when the names match
|
|
171
|
-
* exactly. A missing / logged-out `linear` CLI is loud (this is an explicit user
|
|
172
|
-
* command), and nothing is written before the whole plan is built.
|
|
173
|
-
*/
|
|
174
117
|
function runLinearImport(existing, opts) {
|
|
175
118
|
let list;
|
|
176
119
|
try {
|
|
@@ -180,8 +123,6 @@ function runLinearImport(existing, opts) {
|
|
|
180
123
|
console.error(chalk.red(e instanceof Error ? e.message : String(e)));
|
|
181
124
|
process.exit(1);
|
|
182
125
|
}
|
|
183
|
-
// No projects root configured (or unreadable) → no local matching; every def
|
|
184
|
-
// still imports, carrying its Linear link and nothing it can't prove.
|
|
185
126
|
const rootAbs = getProjectRoot() ? expandLocalHome(getProjectRoot()) : undefined;
|
|
186
127
|
let localDirs = [];
|
|
187
128
|
if (rootAbs) {
|
|
@@ -201,14 +142,7 @@ function runLinearImport(existing, opts) {
|
|
|
201
142
|
resolveOrigin: (dir) => (rootAbs ? originSlug(path.join(rootAbs, dir)) : undefined),
|
|
202
143
|
}, opts);
|
|
203
144
|
}
|
|
204
|
-
/** Longest path a `list` row shows before it truncates. */
|
|
205
145
|
const LIST_PATH_MAX = 48;
|
|
206
|
-
/**
|
|
207
|
-
* Column widths for `projects list`, sized to the rows actually being printed.
|
|
208
|
-
* Fixed padding was the bug: home-relative roots run past 50 characters, so a
|
|
209
|
-
* hardcoded 32 pushed the repo column off its gridline on every long path.
|
|
210
|
-
* Paths longer than {@link LIST_PATH_MAX} truncate rather than widen the table.
|
|
211
|
-
*/
|
|
212
146
|
export function computeProjectListWidths(rows) {
|
|
213
147
|
const widest = (pick, cap) => Math.min(cap, rows.reduce((w, r) => Math.max(w, pick(r).length), 0));
|
|
214
148
|
return {
|
|
@@ -217,13 +151,6 @@ export function computeProjectListWidths(rows) {
|
|
|
217
151
|
repo: widest((r) => r.repo, 64),
|
|
218
152
|
};
|
|
219
153
|
}
|
|
220
|
-
/**
|
|
221
|
-
* A milestone's target date as a person would say it — "due tomorrow",
|
|
222
|
-
* "overdue by 3 days", "due Aug 21" — never a raw `2026-08-21` or a duration in
|
|
223
|
-
* hours. Linear stores a calendar date with no timezone, so both sides are
|
|
224
|
-
* compared at LOCAL midnight; parsing `YYYY-MM-DD` with `new Date(str)` would
|
|
225
|
-
* read it as UTC and shift the answer by a day for anyone west of Greenwich.
|
|
226
|
-
*/
|
|
227
154
|
export function formatMilestoneDue(targetDate, nowMs) {
|
|
228
155
|
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(targetDate.trim());
|
|
229
156
|
if (!m)
|
|
@@ -252,25 +179,10 @@ export function formatMilestoneDue(targetDate, nowMs) {
|
|
|
252
179
|
});
|
|
253
180
|
return `due ${label}`;
|
|
254
181
|
}
|
|
255
|
-
/**
|
|
256
|
-
* The milestone block. `status` prints one line — the next checkpoint — because
|
|
257
|
-
* a roll-up across projects has to stay scannable. `view` prints every declared
|
|
258
|
-
* milestone, because "how many are there and when are they due" is the shape of
|
|
259
|
-
* the plan and the reason to open one project.
|
|
260
|
-
*
|
|
261
|
-
* Pure (chalk only) so the layout is testable without a Linear account.
|
|
262
|
-
*/
|
|
263
182
|
export function formatMilestoneLines(milestones, next, nowMs, limit) {
|
|
264
183
|
if (milestones.length === 0) {
|
|
265
|
-
// `next` without a list only happens on a cached answer written before the
|
|
266
|
-
// list existed; render what we have rather than dropping the row.
|
|
267
184
|
return next ? [` ${chalk.dim('next')} ${formatNextMilestone(next, nowMs)}`] : [];
|
|
268
185
|
}
|
|
269
|
-
// The next milestone leads, always. Linear can flag a LATER-dated milestone
|
|
270
|
-
// as next, and `milestones` is date-ordered — so slicing the front would show
|
|
271
|
-
// an earlier one and hide the actual next behind "+N more", which is the one
|
|
272
|
-
// thing this row exists to say. Identity is name+targetDate: two milestones
|
|
273
|
-
// can share a name, and matching on name alone labelled the wrong row.
|
|
274
186
|
const key = (m) => `${m.name}${m.targetDate ?? ''}`;
|
|
275
187
|
const lead = next ? milestones.filter((m) => key(m) === key(next)).slice(0, 1) : [];
|
|
276
188
|
const others = next ? milestones.filter((m) => key(m) !== key(next)) : milestones;
|
|
@@ -286,11 +198,8 @@ export function formatMilestoneLines(milestones, next, nowMs, limit) {
|
|
|
286
198
|
}
|
|
287
199
|
return out;
|
|
288
200
|
}
|
|
289
|
-
/** The `next` card line: what this project is due to hit, and how far along it is. */
|
|
290
201
|
export function formatNextMilestone(ms, nowMs) {
|
|
291
202
|
const parts = [chalk.bold(ms.name)];
|
|
292
|
-
// A milestone with nothing filed under it yet has no progress to report —
|
|
293
|
-
// `0/0` is noise, not information.
|
|
294
203
|
if (ms.total > 0)
|
|
295
204
|
parts.push(`${ms.done}/${ms.total}`);
|
|
296
205
|
const due = ms.targetDate ? formatMilestoneDue(ms.targetDate, nowMs) : undefined;
|
|
@@ -309,36 +218,16 @@ function statusBar(r) {
|
|
|
309
218
|
push(r.byStatus.input_required, 'need-input', chalk.yellow);
|
|
310
219
|
push(r.byStatus.queued, 'queued', chalk.gray);
|
|
311
220
|
const shown = (r.byStatus.running ?? 0) + (r.byStatus.idle ?? 0) + (r.byStatus.input_required ?? 0) + (r.byStatus.queued ?? 0);
|
|
312
|
-
// The remainder is the LIVE sessions in a state without its own chip
|
|
313
|
-
// (orphaned, unknown). Dead ones are on their own row now, so counting them
|
|
314
|
-
// here made the line disagree with the headline — `19 live` beside
|
|
315
|
-
// `+24 other`, which invites the reader to trust neither.
|
|
316
221
|
const live = liveDeadSplit(r.byStatus).live;
|
|
317
222
|
if (live > shown)
|
|
318
223
|
parts.push(chalk.gray(`+${live - shown} other`));
|
|
319
224
|
return parts.join(' · ') || chalk.gray('no live agents');
|
|
320
225
|
}
|
|
321
|
-
/**
|
|
322
|
-
* Gather the live/remote/Linear/focus signals for the projects about to be
|
|
323
|
-
* rendered. `status` and `view` share this deliberately: `view` used to build
|
|
324
|
-
* its own thinner picture, so the command you open to learn everything about
|
|
325
|
-
* ONE project showed strictly less than the roll-up across all of them — no
|
|
326
|
-
* agents, no ships, no focus, no schedule verdict. One gatherer means a signal
|
|
327
|
-
* added for either surface appears on both.
|
|
328
|
-
*
|
|
329
|
-
* Only the shown projects are enriched. `skipRemote` still reads the local
|
|
330
|
-
* artifact log and git focus, and skips just the network calls (`gh`, Linear).
|
|
331
|
-
*/
|
|
332
226
|
async function enrichProjectsForRender(defs, all, opts) {
|
|
333
|
-
// Local getActiveSessions() leaves `machine` unset (the sessions renderer
|
|
334
|
-
// falls back to this box). Host-grouped agents need an explicit stamp so
|
|
335
|
-
// under `--fleet` this box does not render as `@local` next to peers that
|
|
336
|
-
// carry real device ids.
|
|
337
227
|
const local = withDefaultMachine(await getActiveSessions(), machineId());
|
|
338
228
|
const roll = rollupSessionsByProject(all, [...local, ...(opts.extraSessions ?? [])]);
|
|
339
229
|
const remote = new Map();
|
|
340
230
|
const linear = new Map();
|
|
341
|
-
// Local git, no API, no rate limit — measured 0.23s over a 897-commit week.
|
|
342
231
|
const focus = new Map();
|
|
343
232
|
await Promise.all(defs.map(async (d) => {
|
|
344
233
|
const [sig, counts] = await Promise.all([
|
|
@@ -355,34 +244,15 @@ async function enrichProjectsForRender(defs, all, opts) {
|
|
|
355
244
|
}));
|
|
356
245
|
return { roll, remote, linear, focus };
|
|
357
246
|
}
|
|
358
|
-
function renderCard(def, r, remote, fleet, linear, nowMs = Date.now(),
|
|
359
|
-
/** How many milestones to print. `status` shows the next one; `view` shows all. */
|
|
360
|
-
milestoneLimit = 1,
|
|
361
|
-
/** Directories the window's work landed in, from local git. */
|
|
362
|
-
focus = [],
|
|
363
|
-
/** `view` mode: the caller prints the stored definition in full afterwards. */
|
|
364
|
-
detail = false,
|
|
365
|
-
/**
|
|
366
|
-
* Workspace probe rows used only for the warnings footer. May be the full
|
|
367
|
-
* `--fleet` set or a local-only probe so drift is never silent by default.
|
|
368
|
-
*/
|
|
369
|
-
warnWorkspaces = []) {
|
|
370
|
-
// The headline counts LIVE agents. It used to be every matched session, which
|
|
371
|
-
// read `39 agents` on a project where 19 had crashed. `planPct` used to sit
|
|
372
|
-
// here too and is gone: it summed each session's latest checklist snapshot,
|
|
373
|
-
// so one agent opening a fresh 40-item plan rendered the whole project `0%`.
|
|
247
|
+
function renderCard(def, r, remote, fleet, linear, nowMs = Date.now(), milestoneLimit = 1, focus = [], detail = false, warnWorkspaces = []) {
|
|
374
248
|
const split = r ? liveDeadSplit(r.byStatus) : { live: 0, dead: 0, deadByStatus: [] };
|
|
375
249
|
console.log(`${chalk.bold(def.name)} ${chalk.dim('·')} ${chalk.bold(`${split.live} live`)}`);
|
|
376
250
|
if (def.description)
|
|
377
251
|
console.log(` ${chalk.dim(def.description)}`);
|
|
378
252
|
console.log(` ${chalk.dim('live')} ${r ? statusBar(r) : chalk.gray('no live agents')}`);
|
|
379
253
|
if (split.dead > 0) {
|
|
380
|
-
// Wreckage is worth a number of its own — 19 crashed sessions is a thing to
|
|
381
|
-
// go fix, not a throughput signal to fold into the headline.
|
|
382
254
|
console.log(` ${chalk.dim('dead')} ${formatDeadSummary(split)}`);
|
|
383
255
|
}
|
|
384
|
-
// Live only, grouped by host when machine stamps exist so "who is on which
|
|
385
|
-
// box" is visible. Flat collapse hid that when harness×status matched across hosts.
|
|
386
256
|
const liveMembers = r?.members.filter((m) => !isDeadStatus(m.status)) ?? [];
|
|
387
257
|
if (liveMembers.length) {
|
|
388
258
|
const agentLines = formatProjectMembersByHost(liveMembers);
|
|
@@ -409,8 +279,6 @@ warnWorkspaces = []) {
|
|
|
409
279
|
for (const line of formatMilestoneLines(linear?.milestones ?? [], linear?.nextMilestone, nowMs, milestoneLimit)) {
|
|
410
280
|
console.log(line);
|
|
411
281
|
}
|
|
412
|
-
// Informational schedule only. Warn-level verdicts land in the footer so the
|
|
413
|
-
// bottom of the card is the one place you look for "what needs attention".
|
|
414
282
|
const verdict = linear?.milestones?.length ? formatVerdict(scheduleVerdict(linear.milestones, nowMs)) : undefined;
|
|
415
283
|
if (verdict && !verdict.warn) {
|
|
416
284
|
console.log(` ${chalk.dim('schedule')} ${verdict.text}`);
|
|
@@ -428,9 +296,6 @@ warnWorkspaces = []) {
|
|
|
428
296
|
console.log(` ${chalk.dim('fleet')} ${chalk.gray('no workspace paths (set root or repos[].path)')}`);
|
|
429
297
|
}
|
|
430
298
|
else {
|
|
431
|
-
// A compact health line first (scan without reading every host), then the
|
|
432
|
-
// full per-host table under it. The grouped footer carries the actionable
|
|
433
|
-
// subset; this line + the table carry the whole picture.
|
|
434
299
|
[formatFleetSummary(fleet), ...table].forEach((line, i) => {
|
|
435
300
|
console.log(` ${chalk.dim((i === 0 ? 'fleet' : '').padEnd(5))} ${line}`);
|
|
436
301
|
});
|
|
@@ -443,8 +308,6 @@ warnWorkspaces = []) {
|
|
|
443
308
|
const repos = [def.repo, ...(def.repos ?? []).map((x) => x.slug)].filter(Boolean);
|
|
444
309
|
if (repos.length)
|
|
445
310
|
console.log(` ${chalk.dim('repos')} ${[...new Set(repos)].join(' · ')}`);
|
|
446
|
-
// Warnings footer — critical (🔴) then continue (⚠️). Sources: repo slug
|
|
447
|
-
// mismatch, workspace drift/dirty/missing, schedule that cannot measure.
|
|
448
311
|
const warnings = [];
|
|
449
312
|
const mismatch = def.root ? checkRepoSlug(def, originSlug(expandLocalHome(def.root))) : undefined;
|
|
450
313
|
if (mismatch) {
|
|
@@ -466,8 +329,6 @@ warnWorkspaces = []) {
|
|
|
466
329
|
}
|
|
467
330
|
for (const line of formatProjectWarnings(warnings))
|
|
468
331
|
console.log(line);
|
|
469
|
-
// `view` prints these in full (path + purpose, label + URL) right below, so
|
|
470
|
-
// the compact one-line summaries would just say the same thing twice.
|
|
471
332
|
if (!detail && def.goals?.length) {
|
|
472
333
|
console.log(` ${chalk.dim('goal')} ${def.goals.map((g) => g.objective).join(' · ')}`);
|
|
473
334
|
}
|
|
@@ -480,10 +341,6 @@ warnWorkspaces = []) {
|
|
|
480
341
|
if (!detail)
|
|
481
342
|
console.log('');
|
|
482
343
|
}
|
|
483
|
-
/**
|
|
484
|
-
* Merge `--device a b` (variadic) and `--devices a,b,c` (comma list) into one
|
|
485
|
-
* deduped device filter; undefined when neither was given (= whole fleet).
|
|
486
|
-
*/
|
|
487
344
|
function resolveDeviceFilter(device, devices) {
|
|
488
345
|
const merged = [
|
|
489
346
|
...(device ?? []),
|
|
@@ -491,7 +348,6 @@ function resolveDeviceFilter(device, devices) {
|
|
|
491
348
|
];
|
|
492
349
|
return merged.length ? [...new Set(merged)] : undefined;
|
|
493
350
|
}
|
|
494
|
-
/** Print the YAML-side fields that sit under the shared card in `view` mode. */
|
|
495
351
|
function printProjectDefinition(def, name) {
|
|
496
352
|
console.log();
|
|
497
353
|
if (def.root)
|
|
@@ -518,6 +374,57 @@ function printProjectDefinition(def, name) {
|
|
|
518
374
|
console.log(` ${chalk.dim('doc')} ${d}`);
|
|
519
375
|
console.log(chalk.gray(` ${projectDefPath(name)}`));
|
|
520
376
|
}
|
|
377
|
+
function prFail(message) {
|
|
378
|
+
console.error(chalk.red(message));
|
|
379
|
+
process.exit(1);
|
|
380
|
+
}
|
|
381
|
+
function prProjectOrExit(name) {
|
|
382
|
+
return loadProjectDef(name) ?? prFail(`No project named "${name}". List them: agents projects list`);
|
|
383
|
+
}
|
|
384
|
+
function prNumberOrExit(raw) {
|
|
385
|
+
const t = raw.trim();
|
|
386
|
+
const number = /^\d+$/.test(t) ? Number.parseInt(t, 10) : NaN;
|
|
387
|
+
if (!Number.isSafeInteger(number) || number <= 0)
|
|
388
|
+
prFail(`--number expects a positive integer, got "${raw}".`);
|
|
389
|
+
return number;
|
|
390
|
+
}
|
|
391
|
+
function prShaOrExit(raw) {
|
|
392
|
+
const sha = raw.trim();
|
|
393
|
+
if (!/^[0-9a-f]{7,40}$/i.test(sha))
|
|
394
|
+
prFail(`--sha expects a commit SHA, got "${raw}".`);
|
|
395
|
+
return sha;
|
|
396
|
+
}
|
|
397
|
+
function prCommentBodyOrExit(body, bodyFile) {
|
|
398
|
+
if ((body === undefined) === (bodyFile === undefined))
|
|
399
|
+
prFail('Pass exactly one of --body <text> or --body-file <path|->.');
|
|
400
|
+
let text = body;
|
|
401
|
+
if (bodyFile !== undefined) {
|
|
402
|
+
try {
|
|
403
|
+
text = fs.readFileSync(bodyFile === '-' ? 0 : bodyFile, 'utf-8');
|
|
404
|
+
}
|
|
405
|
+
catch (e) {
|
|
406
|
+
prFail(`Could not read --body-file ${bodyFile}: ${e instanceof Error ? e.message : String(e)}`);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
if (!text || !text.trim())
|
|
410
|
+
prFail('The comment is empty.');
|
|
411
|
+
return text.trimEnd();
|
|
412
|
+
}
|
|
413
|
+
function prMethodOrExit(raw) {
|
|
414
|
+
if (raw !== undefined && !MERGE_METHODS.includes(raw)) {
|
|
415
|
+
prFail(`--method expects one of ${MERGE_METHODS.join(', ')}, got "${raw}".`);
|
|
416
|
+
}
|
|
417
|
+
return raw;
|
|
418
|
+
}
|
|
419
|
+
async function prRepoOrExit(def, repo) {
|
|
420
|
+
try {
|
|
421
|
+
const [resolved] = await resolveTargetSlugs(def, repo, ghExec);
|
|
422
|
+
return resolved;
|
|
423
|
+
}
|
|
424
|
+
catch (e) {
|
|
425
|
+
return prFail(e instanceof Error ? e.message : String(e));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
521
428
|
export function registerProjectsCommands(program) {
|
|
522
429
|
const projects = program
|
|
523
430
|
.command('projects')
|
|
@@ -553,7 +460,6 @@ export function registerProjectsCommands(program) {
|
|
|
553
460
|
an --add-dir grant (Claude, Codex, Cursor, Kimi, Grok consume it; others ignore).
|
|
554
461
|
`,
|
|
555
462
|
});
|
|
556
|
-
// ---- list ----
|
|
557
463
|
projects
|
|
558
464
|
.command('list')
|
|
559
465
|
.description('List defined projects (definitions only by default; no session scan).')
|
|
@@ -561,9 +467,6 @@ export function registerProjectsCommands(program) {
|
|
|
561
467
|
.option('--with-agents', 'Include local active agent counts (opt-in; never SSH)')
|
|
562
468
|
.action(async (opts) => {
|
|
563
469
|
const defs = listProjectDefs();
|
|
564
|
-
// Definitions-only by default: zero session scan / SSH. --with-agents is
|
|
565
|
-
// an explicit opt-in for local active counts only (getActiveSessions is
|
|
566
|
-
// local; it never fans out).
|
|
567
470
|
const roll = opts.withAgents
|
|
568
471
|
? rollupSessionsByProject(defs, await getActiveSessions())
|
|
569
472
|
: undefined;
|
|
@@ -589,7 +492,6 @@ export function registerProjectsCommands(program) {
|
|
|
589
492
|
console.log(` ${chalk.bold(row.name.padEnd(w.name))} ${chalk.dim(row.path.padEnd(w.path))} ${chalk.cyan(row.repo.padEnd(w.repo))}${agentsSuffix}`);
|
|
590
493
|
}
|
|
591
494
|
});
|
|
592
|
-
// ---- add ----
|
|
593
495
|
projects
|
|
594
496
|
.command('add <name>')
|
|
595
497
|
.description('Define a project. Infers root and repo from the current git repo when not given.')
|
|
@@ -656,8 +558,6 @@ export function registerProjectsCommands(program) {
|
|
|
656
558
|
async function runProjectCard(name, opts, mode) {
|
|
657
559
|
const detail = mode === 'view';
|
|
658
560
|
const all = listProjectDefs();
|
|
659
|
-
// Named lookup goes through the strict single-def loader so a broken
|
|
660
|
-
// <name>.yaml surfaces its validation error instead of "No project named".
|
|
661
561
|
const defs = name ? [loadProjectDef(name)].filter((d) => d !== undefined) : all;
|
|
662
562
|
if (name && !defs.length) {
|
|
663
563
|
console.error(chalk.red(detail
|
|
@@ -674,11 +574,6 @@ export function registerProjectsCommands(program) {
|
|
|
674
574
|
}
|
|
675
575
|
const windowDays = Math.max(1, Number.parseInt(opts.window ?? '7', 10) || 7);
|
|
676
576
|
const nowMs = Date.now();
|
|
677
|
-
// Fleet is the default: probe each shown def's workspace paths (root +
|
|
678
|
-
// repos[].path) locally AND on every peer in one parallel SSH round, and
|
|
679
|
-
// widen the live-session rollup to the fleet via the sessions fan-out.
|
|
680
|
-
// `--device`/`--devices` scopes the remote fan-out to a subset; with no
|
|
681
|
-
// filter every registered device is dialled.
|
|
682
577
|
const fleetTargets = [...new Set(defs.flatMap(workspaceTargetsForDef))];
|
|
683
578
|
let fleetWs = [];
|
|
684
579
|
let fleetSkipped = [];
|
|
@@ -708,7 +603,6 @@ export function registerProjectsCommands(program) {
|
|
|
708
603
|
skipRemote: opts.remote === false,
|
|
709
604
|
extraSessions: fleetSessions,
|
|
710
605
|
});
|
|
711
|
-
/** This def's slice of the fleet probe, in its own target order. */
|
|
712
606
|
const fleetFor = (d) => {
|
|
713
607
|
const targets = new Set(workspaceTargetsForDef(d));
|
|
714
608
|
return fleetWs.filter((s) => targets.has(s.path));
|
|
@@ -716,9 +610,6 @@ export function registerProjectsCommands(program) {
|
|
|
716
610
|
if (opts.json) {
|
|
717
611
|
if (fleetSkipped.length > 0)
|
|
718
612
|
process.stderr.write(formatFleetSkippedNote(fleetSkipped));
|
|
719
|
-
// `view` used to nest the def fields at the top level and omit plan /
|
|
720
|
-
// worktrees / windowDays; keep one machine shape for both verbs so a
|
|
721
|
-
// consumer that switches `status`↔`view` does not re-learn the schema.
|
|
722
613
|
console.log(JSON.stringify(defs.map((d) => {
|
|
723
614
|
const r = roll.get(d.name);
|
|
724
615
|
const rem = remote.get(d.name);
|
|
@@ -748,11 +639,7 @@ export function registerProjectsCommands(program) {
|
|
|
748
639
|
}), null, 2));
|
|
749
640
|
return;
|
|
750
641
|
}
|
|
751
|
-
// Compact rollup shows the next milestone; `view` shows every declared one.
|
|
752
642
|
const milestoneLimit = detail ? Number.POSITIVE_INFINITY : 1;
|
|
753
|
-
// Stamp the fleet-wide rollup with when it was taken, so a scrollback isn't
|
|
754
|
-
// mistaken for a live snapshot. A single named `view` skips it (one card, and
|
|
755
|
-
// its own detail makes the freshness obvious).
|
|
756
643
|
if (!detail) {
|
|
757
644
|
const t = new Date(nowMs);
|
|
758
645
|
const hhmm = `${String(t.getHours()).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}`;
|
|
@@ -760,10 +647,7 @@ export function registerProjectsCommands(program) {
|
|
|
760
647
|
console.log('');
|
|
761
648
|
}
|
|
762
649
|
for (const d of defs) {
|
|
763
|
-
renderCard(d, roll.get(d.name), remote.get(d.name), fleetFor(d), linear.get(d.name), nowMs, milestoneLimit, focus.get(d.name) ?? [], detail,
|
|
764
|
-
// Always feed workspace rows into the warnings footer so behind/dirty
|
|
765
|
-
// is never silent.
|
|
766
|
-
fleetFor(d));
|
|
650
|
+
renderCard(d, roll.get(d.name), remote.get(d.name), fleetFor(d), linear.get(d.name), nowMs, milestoneLimit, focus.get(d.name) ?? [], detail, fleetFor(d));
|
|
767
651
|
if (detail)
|
|
768
652
|
printProjectDefinition(d, d.name);
|
|
769
653
|
}
|
|
@@ -781,12 +665,6 @@ export function registerProjectsCommands(program) {
|
|
|
781
665
|
.option('--device <name...>', 'Scope fleet status to one or more devices (repeatable)')
|
|
782
666
|
.option('--devices <names>', 'Scope fleet status to a comma-separated list of devices')
|
|
783
667
|
.action(async (name, rawOpts) => {
|
|
784
|
-
// Path mode: an explicit --path, or a path-shaped positional (., .., a
|
|
785
|
-
// ~-prefixed value, or a /-containing value) means "auto-detect the
|
|
786
|
-
// project for this DIRECTORY" rather than "a project named literally
|
|
787
|
-
// this". projectNameForCwd resolves the dir (expandLocalHome +
|
|
788
|
-
// path.resolve), so `.`, `~/…`, and relative paths all normalize. This
|
|
789
|
-
// subsumes the removed `agents projects for-cwd`.
|
|
790
668
|
let detectDir;
|
|
791
669
|
if (typeof rawOpts.path === 'string')
|
|
792
670
|
detectDir = rawOpts.path;
|
|
@@ -804,13 +682,8 @@ export function registerProjectsCommands(program) {
|
|
|
804
682
|
console.log(chalk.gray(`No defined project contains ${detectDir}`));
|
|
805
683
|
return;
|
|
806
684
|
}
|
|
807
|
-
// Non-JSON: fall through and render the full card for the detected project.
|
|
808
685
|
name = detection.name;
|
|
809
686
|
}
|
|
810
|
-
// Named invocation = `view` depth (all milestones + definition). Unnamed
|
|
811
|
-
// stays the scannable multi-project rollup. `view` is a commander alias
|
|
812
|
-
// of this same command, so there is only one implementation.
|
|
813
|
-
// Fleet is dialled by default; --device/--devices narrows it to a subset.
|
|
814
687
|
const opts = {
|
|
815
688
|
json: rawOpts.json,
|
|
816
689
|
window: rawOpts.window,
|
|
@@ -820,12 +693,9 @@ export function registerProjectsCommands(program) {
|
|
|
820
693
|
const mode = name ? 'view' : 'status';
|
|
821
694
|
await runProjectCard(name, opts, mode);
|
|
822
695
|
});
|
|
823
|
-
// ---- prs ----
|
|
824
|
-
// `list` is the default so `prs <name>` keeps its shape; a bare parent with
|
|
825
|
-
// no options of its own is what lets `prs merge` own --repo/--number/--json.
|
|
826
696
|
const prsCmd = projects
|
|
827
697
|
.command('prs')
|
|
828
|
-
.description('A project\'s open pull requests: list them (default),
|
|
698
|
+
.description('A project\'s open pull requests: list them (default), act on one (ready, review, comment, merge), or read and re-run failed CI (failure, rerun).');
|
|
829
699
|
const prsListCmd = prsCmd
|
|
830
700
|
.command('list <name>', { isDefault: true })
|
|
831
701
|
.description('Every OPEN pull request across a project\'s attached repos (drafts included, no author filter), scoped to this project\'s paths in a shared repo.')
|
|
@@ -844,8 +714,6 @@ export function registerProjectsCommands(program) {
|
|
|
844
714
|
console.error(chalk.red('--number names one PR in one repo; pass --repo <owner/repo> with it.'));
|
|
845
715
|
process.exit(1);
|
|
846
716
|
}
|
|
847
|
-
// Require the WHOLE token to be digits — Number.parseInt would accept
|
|
848
|
-
// "12junk" / "12.9" as 12 and silently query the wrong PR.
|
|
849
717
|
const raw = opts.number.trim();
|
|
850
718
|
number = /^\d+$/.test(raw) ? Number.parseInt(raw, 10) : NaN;
|
|
851
719
|
if (!Number.isSafeInteger(number) || number <= 0) {
|
|
@@ -858,17 +726,10 @@ export function registerProjectsCommands(program) {
|
|
|
858
726
|
envelope = await buildProjectPrs(def, { repo: opts.repo, number }, undefined, listProjectDefs());
|
|
859
727
|
}
|
|
860
728
|
catch (e) {
|
|
861
|
-
// A restriction error (repo not attached) is a hard, up-front failure —
|
|
862
|
-
// distinct from a per-repo fetch failure, which rides in the envelope.
|
|
863
729
|
console.error(chalk.red(e instanceof Error ? e.message : String(e)));
|
|
864
730
|
process.exit(1);
|
|
865
731
|
}
|
|
866
732
|
if (opts.json) {
|
|
867
|
-
// A machine caller reads the envelope from stdout regardless of exit
|
|
868
|
-
// code: `partial` + per-repo `error` ARE the failure signal, and the
|
|
869
|
-
// successful repositories ride alongside them. So --json always exits 0
|
|
870
|
-
// (the envelope is authoritative); a native consumer must not discard
|
|
871
|
-
// stdout on a non-zero exit. Only the human path below exits non-zero.
|
|
872
733
|
console.log(JSON.stringify(envelope, null, 2));
|
|
873
734
|
return;
|
|
874
735
|
}
|
|
@@ -878,18 +739,35 @@ export function registerProjectsCommands(program) {
|
|
|
878
739
|
console.log(`${chalk.bold(r.slug)} ${chalk.red(`— fetch failed: ${r.error}`)}`);
|
|
879
740
|
continue;
|
|
880
741
|
}
|
|
881
|
-
|
|
742
|
+
const branch = r.defaultBranch ? ` ${r.defaultBranch.name} ${ciMark(r.defaultBranch.ciState)}` : '';
|
|
743
|
+
console.log(`${chalk.bold(r.slug)} ${chalk.dim(`${r.pullRequests.length} open`)}${branch}`);
|
|
882
744
|
for (const pr of r.pullRequests) {
|
|
883
745
|
const draft = pr.isDraft ? chalk.gray(' [draft]') : '';
|
|
884
746
|
const wide = pr.scope === 'repo-wide' ? chalk.gray(' [repo-wide]') : '';
|
|
885
|
-
console.log(` #${pr.number}${draft}${wide} ${pr.title} ${chalk.gray(`@${pr.author.login} · ${pr.headRefName}`)}`);
|
|
747
|
+
console.log(` ${ciMark(pr.ciState)} #${pr.number}${draft}${wide} ${pr.title} ${chalk.gray(`@${pr.author.login} · ${pr.headRefName}`)}`);
|
|
748
|
+
}
|
|
749
|
+
if (r.release) {
|
|
750
|
+
const npm = r.release.npm?.version ? ` · npm ${r.release.npm.version}` : '';
|
|
751
|
+
const since = `${r.release.mergesSince}${r.release.mergesSinceComplete ? '' : '+'}`;
|
|
752
|
+
console.log(chalk.dim(` ${r.release.latestTag} tagged ${r.release.latestTagAt.slice(0, 10)}${npm} · ${since} merged since`));
|
|
753
|
+
}
|
|
754
|
+
if (r.releaseError)
|
|
755
|
+
console.log(chalk.yellow(` Latest release could not be read: ${r.releaseError}`));
|
|
756
|
+
if (r.ciError)
|
|
757
|
+
console.log(chalk.yellow(` CI and merged PRs are incomplete: ${r.ciError}`));
|
|
758
|
+
if (r.truncated)
|
|
759
|
+
console.log(chalk.yellow(' Merged list may be missing PRs: too many closed PRs were updated this week to read them all.'));
|
|
760
|
+
if (r.recentlyMerged.length > 0) {
|
|
761
|
+
console.log(chalk.dim(` merged in the last ${MERGED_WINDOW_DAYS} days:`));
|
|
762
|
+
for (const pr of r.recentlyMerged) {
|
|
763
|
+
console.log(` ${ciMark(pr.ciState)} #${pr.number} ${pr.title} ${chalk.gray(`@${pr.author.login} · ${pr.mergedAt.slice(0, 10)}`)}`);
|
|
764
|
+
}
|
|
886
765
|
}
|
|
887
766
|
}
|
|
888
767
|
if (envelope.partial) {
|
|
889
768
|
console.log(chalk.yellow('\nSome repositories could not be fetched — the list above is incomplete.'));
|
|
890
769
|
}
|
|
891
770
|
}
|
|
892
|
-
// A partial result (any repo fetch failed) is not a clean success.
|
|
893
771
|
if (envelope.partial)
|
|
894
772
|
process.exit(1);
|
|
895
773
|
});
|
|
@@ -900,36 +778,15 @@ export function registerProjectsCommands(program) {
|
|
|
900
778
|
.requiredOption('--number <n>', 'The PR number')
|
|
901
779
|
.requiredOption('--sha <head-sha>', 'The head SHA you reviewed; GitHub refuses if the branch moved since')
|
|
902
780
|
.option('--method <method>', `${MERGE_METHODS.join(' | ')} (default: the first the repo allows, in that order)`)
|
|
781
|
+
.option('--admin', 'Merge a PR branch protection blocks, as a repository admin. For a person\'s explicit confirm only; agents must never pass it')
|
|
903
782
|
.option('--json', 'Machine-readable result')
|
|
904
783
|
.action(async (name, opts) => {
|
|
905
|
-
const def =
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
const
|
|
911
|
-
const number = /^\d+$/.test(raw) ? Number.parseInt(raw, 10) : NaN;
|
|
912
|
-
if (!Number.isSafeInteger(number) || number <= 0) {
|
|
913
|
-
console.error(chalk.red(`--number expects a positive integer, got "${opts.number}".`));
|
|
914
|
-
process.exit(1);
|
|
915
|
-
}
|
|
916
|
-
if (!/^[0-9a-f]{7,40}$/i.test(opts.sha.trim())) {
|
|
917
|
-
console.error(chalk.red(`--sha expects a commit SHA, got "${opts.sha}".`));
|
|
918
|
-
process.exit(1);
|
|
919
|
-
}
|
|
920
|
-
if (opts.method !== undefined && !MERGE_METHODS.includes(opts.method)) {
|
|
921
|
-
console.error(chalk.red(`--method expects one of ${MERGE_METHODS.join(', ')}, got "${opts.method}".`));
|
|
922
|
-
process.exit(1);
|
|
923
|
-
}
|
|
924
|
-
let repo;
|
|
925
|
-
try {
|
|
926
|
-
[repo] = await resolveTargetSlugs(def, opts.repo, ghExec);
|
|
927
|
-
}
|
|
928
|
-
catch (e) {
|
|
929
|
-
console.error(chalk.red(e instanceof Error ? e.message : String(e)));
|
|
930
|
-
process.exit(1);
|
|
931
|
-
}
|
|
932
|
-
const result = await mergeProjectPr(repo, number, opts.sha.trim(), opts.method);
|
|
784
|
+
const def = prProjectOrExit(name);
|
|
785
|
+
const number = prNumberOrExit(opts.number);
|
|
786
|
+
const sha = prShaOrExit(opts.sha);
|
|
787
|
+
const method = prMethodOrExit(opts.method);
|
|
788
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
789
|
+
const result = await mergeProjectPr(repo, number, sha, method, { admin: opts.admin === true });
|
|
933
790
|
if (opts.json) {
|
|
934
791
|
console.log(JSON.stringify(result, null, 2));
|
|
935
792
|
}
|
|
@@ -950,16 +807,263 @@ export function registerProjectsCommands(program) {
|
|
|
950
807
|
`,
|
|
951
808
|
notes: `
|
|
952
809
|
The merge is a single REST call pinned to --sha: if anything was pushed after
|
|
953
|
-
you read the PR, GitHub refuses and nothing merges.
|
|
954
|
-
|
|
955
|
-
|
|
810
|
+
you read the PR, GitHub refuses and nothing merges. Without --admin, a PR whose
|
|
811
|
+
live mergeable_state is not clean/unstable/has_hooks (blocked by a pending or red
|
|
812
|
+
required check or a review, behind, conflicted, or not computed yet) is refused
|
|
813
|
+
before the call. --admin skips that refusal and lets a
|
|
814
|
+
repository admin merge past branch protection where GitHub allows it; it exists
|
|
815
|
+
for a person's explicit confirm (AGI Menu's "Confirm admin merge") and agents
|
|
816
|
+
must never pass it. To land a PR once its checks pass, use prs automerge. A
|
|
817
|
+
refusal exits 1 with GitHub's reason (merged: false in --json).
|
|
818
|
+
`,
|
|
819
|
+
});
|
|
820
|
+
const automergeCmd = prsCmd
|
|
821
|
+
.command('automerge <name>')
|
|
822
|
+
.description('Turn GitHub auto-merge on (or off with --off) for one open PR, so it merges itself once its required checks pass.')
|
|
823
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
824
|
+
.requiredOption('--number <n>', 'The PR number')
|
|
825
|
+
.option('--sha <head-sha>', 'The head SHA you reviewed (required to turn it on); GitHub refuses if the branch moved since')
|
|
826
|
+
.option('--method <method>', `${MERGE_METHODS.join(' | ')} (default: the first the repo allows, in that order)`)
|
|
827
|
+
.option('--off', 'Turn auto-merge off instead')
|
|
828
|
+
.option('--json', 'Machine-readable result')
|
|
829
|
+
.action(async (name, opts) => {
|
|
830
|
+
const def = prProjectOrExit(name);
|
|
831
|
+
const number = prNumberOrExit(opts.number);
|
|
832
|
+
const enable = opts.off !== true;
|
|
833
|
+
if (enable && opts.sha === undefined)
|
|
834
|
+
prFail('Pass --sha <head-sha>: auto-merge is pinned to the head you reviewed.');
|
|
835
|
+
if (!enable && opts.method !== undefined)
|
|
836
|
+
prFail('--method only applies when turning auto-merge on.');
|
|
837
|
+
const sha = opts.sha === undefined ? undefined : prShaOrExit(opts.sha);
|
|
838
|
+
const method = prMethodOrExit(opts.method);
|
|
839
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
840
|
+
const result = await setProjectPrAutoMerge(repo, number, enable && sha !== undefined ? { enable: true, sha, method } : { enable: false });
|
|
841
|
+
const ok = result.enabled === enable;
|
|
842
|
+
if (opts.json)
|
|
843
|
+
console.log(JSON.stringify(result, null, 2));
|
|
844
|
+
else if (ok)
|
|
845
|
+
console.log(`${chalk.green(result.message)}: ${repo}#${number}`);
|
|
846
|
+
else
|
|
847
|
+
console.error(chalk.red(`Auto-merge not changed: ${repo}#${number}: ${result.message}`));
|
|
848
|
+
if (!ok)
|
|
849
|
+
process.exit(1);
|
|
850
|
+
});
|
|
851
|
+
setHelpSections(automergeCmd, {
|
|
852
|
+
examples: `
|
|
853
|
+
agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # read headSha + merge.autoMergeAllowed
|
|
854
|
+
agents projects prs automerge rush --repo phnx-labs/agi-cli --number 3646 --sha <headSha>
|
|
855
|
+
agents projects prs automerge rush --repo phnx-labs/agi-cli --number 3646 --off --json
|
|
856
|
+
`,
|
|
857
|
+
notes: `
|
|
858
|
+
GitHub has no REST endpoint for auto-merge, so each call is one GraphQL
|
|
859
|
+
mutation (enablePullRequestAutoMerge / disablePullRequestAutoMerge) after a REST
|
|
860
|
+
read. Turning it on passes expectedHeadOid, so a branch that moved since --sha
|
|
861
|
+
is refused. The repository must allow auto-merge (merge.autoMergeAllowed in
|
|
862
|
+
prs --json), and GitHub refuses it on a PR that can already merge: use prs merge
|
|
863
|
+
for that. Exits 1 unless auto-merge ends in the requested state.
|
|
864
|
+
`,
|
|
865
|
+
});
|
|
866
|
+
const readyCmd = prsCmd
|
|
867
|
+
.command('ready <name>')
|
|
868
|
+
.description('Mark one draft PR of a project ready for review.')
|
|
869
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
870
|
+
.requiredOption('--number <n>', 'The PR number')
|
|
871
|
+
.option('--sha <head-sha>', 'The head SHA you looked at; refused if the branch moved since')
|
|
872
|
+
.option('--json', 'Machine-readable result')
|
|
873
|
+
.action(async (name, opts) => {
|
|
874
|
+
const def = prProjectOrExit(name);
|
|
875
|
+
const number = prNumberOrExit(opts.number);
|
|
876
|
+
const sha = opts.sha === undefined ? undefined : prShaOrExit(opts.sha);
|
|
877
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
878
|
+
const result = await markProjectPrReady(repo, number, sha);
|
|
879
|
+
if (opts.json)
|
|
880
|
+
console.log(JSON.stringify(result, null, 2));
|
|
881
|
+
else if (result.ready)
|
|
882
|
+
console.log(`${chalk.green(result.message)}: ${repo}#${number}`);
|
|
883
|
+
else
|
|
884
|
+
console.error(chalk.red(`Not marked ready: ${repo}#${number}: ${result.message}`));
|
|
885
|
+
if (!result.ready)
|
|
886
|
+
process.exit(1);
|
|
887
|
+
});
|
|
888
|
+
setHelpSections(readyCmd, {
|
|
889
|
+
examples: `
|
|
890
|
+
agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # read isDraft + headSha
|
|
891
|
+
agents projects prs ready rush --repo phnx-labs/agi-cli --number 3646 --sha <headSha>
|
|
892
|
+
agents projects prs ready rush --repo phnx-labs/agi-cli --number 3646 --json
|
|
893
|
+
`,
|
|
894
|
+
notes: `
|
|
895
|
+
GitHub has no REST endpoint for this, so it is one GraphQL mutation
|
|
896
|
+
(markPullRequestReadyForReview) after a REST read. A PR that is already ready
|
|
897
|
+
succeeds without a write. With --sha, a head that moved is refused before the
|
|
898
|
+
write; GitHub cannot pin the mutation itself, so that check is not atomic.
|
|
899
|
+
`,
|
|
900
|
+
});
|
|
901
|
+
const reviewCmd = prsCmd
|
|
902
|
+
.command('review <name>')
|
|
903
|
+
.description('Approve one open PR of a project, pinned to the head SHA you reviewed.')
|
|
904
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
905
|
+
.requiredOption('--number <n>', 'The PR number')
|
|
906
|
+
.requiredOption('--sha <head-sha>', 'The head SHA you reviewed; refused if the branch moved since')
|
|
907
|
+
.option('--approve', 'Submit an approving review (the only review this command submits)')
|
|
908
|
+
.option('--body <text>', 'Text to post with the approval')
|
|
909
|
+
.option('--json', 'Machine-readable result')
|
|
910
|
+
.action(async (name, opts) => {
|
|
911
|
+
const def = prProjectOrExit(name);
|
|
912
|
+
const number = prNumberOrExit(opts.number);
|
|
913
|
+
const sha = prShaOrExit(opts.sha);
|
|
914
|
+
if (!opts.approve)
|
|
915
|
+
prFail('Pass --approve: approving is the only review this command submits.');
|
|
916
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
917
|
+
const result = await approveProjectPr(repo, number, sha, opts.body);
|
|
918
|
+
if (opts.json)
|
|
919
|
+
console.log(JSON.stringify(result, null, 2));
|
|
920
|
+
else if (result.submitted)
|
|
921
|
+
console.log(`${chalk.green('Approved')} ${repo}#${number} at ${chalk.gray((result.sha ?? '').slice(0, 7))}`);
|
|
922
|
+
else
|
|
923
|
+
console.error(chalk.red(`Not approved: ${repo}#${number}: ${result.message}`));
|
|
924
|
+
if (!result.submitted)
|
|
925
|
+
process.exit(1);
|
|
926
|
+
});
|
|
927
|
+
setHelpSections(reviewCmd, {
|
|
928
|
+
examples: `
|
|
929
|
+
agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # read headSha
|
|
930
|
+
agents projects prs review rush --repo phnx-labs/agi-cli --number 3646 --approve --sha <headSha>
|
|
931
|
+
agents projects prs review rush --repo phnx-labs/agi-cli --number 3646 --approve --sha <headSha> --body "Checked the migration" --json
|
|
932
|
+
`,
|
|
933
|
+
notes: `
|
|
934
|
+
One REST call (POST pulls/{n}/reviews, event APPROVE). The live head is read
|
|
935
|
+
first and a moved head is refused; the review carries commit_id = that SHA, so
|
|
936
|
+
it is recorded against the code you saw. On your own PR it answers at once
|
|
937
|
+
(exit 1, submitted: false) without calling GitHub, which never allows that.
|
|
938
|
+
`,
|
|
939
|
+
});
|
|
940
|
+
const commentCmd = prsCmd
|
|
941
|
+
.command('comment <name>')
|
|
942
|
+
.description('Post a comment on one open PR of a project.')
|
|
943
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
944
|
+
.requiredOption('--number <n>', 'The PR number')
|
|
945
|
+
.option('--body <text>', 'The comment text')
|
|
946
|
+
.option('--body-file <path>', 'Read the comment from a file; - reads stdin')
|
|
947
|
+
.option('--json', 'Machine-readable result')
|
|
948
|
+
.action(async (name, opts) => {
|
|
949
|
+
const def = prProjectOrExit(name);
|
|
950
|
+
const number = prNumberOrExit(opts.number);
|
|
951
|
+
const body = prCommentBodyOrExit(opts.body, opts.bodyFile);
|
|
952
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
953
|
+
const result = await commentOnProjectPr(repo, number, body);
|
|
954
|
+
if (opts.json)
|
|
955
|
+
console.log(JSON.stringify(result, null, 2));
|
|
956
|
+
else if (result.commented)
|
|
957
|
+
console.log(`${chalk.green('Commented')} on ${repo}#${number} ${chalk.gray(result.url ?? '')}`);
|
|
958
|
+
else
|
|
959
|
+
console.error(chalk.red(`Not commented: ${repo}#${number}: ${result.message}`));
|
|
960
|
+
if (!result.commented)
|
|
961
|
+
process.exit(1);
|
|
962
|
+
});
|
|
963
|
+
setHelpSections(commentCmd, {
|
|
964
|
+
examples: `
|
|
965
|
+
agents projects prs comment rush --repo phnx-labs/agi-cli --number 3646 --body "Looks good once CI is green"
|
|
966
|
+
printf 'Two notes:\\n- one\\n- two\\n' | agents projects prs comment rush --repo phnx-labs/agi-cli --number 3646 --body-file - --json
|
|
967
|
+
`,
|
|
968
|
+
notes: `
|
|
969
|
+
One REST call (POST issues/{n}/comments), not the GraphQL-backed gh pr comment.
|
|
970
|
+
Pass exactly one of --body or --body-file; an empty comment is refused.
|
|
971
|
+
`,
|
|
972
|
+
});
|
|
973
|
+
const failureCmd = prsCmd
|
|
974
|
+
.command('failure <name>')
|
|
975
|
+
.description('Why one commit\'s CI failed: each failing check with the error lines of its job log.')
|
|
976
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
977
|
+
.requiredOption('--sha <commit>', 'The commit whose checks failed: a PR head, a merge commit, or the default branch head')
|
|
978
|
+
.option('--json', 'Machine-readable result')
|
|
979
|
+
.action(async (name, opts) => {
|
|
980
|
+
const def = prProjectOrExit(name);
|
|
981
|
+
const sha = prShaOrExit(opts.sha);
|
|
982
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
983
|
+
const report = await readCiFailure(repo, sha);
|
|
984
|
+
if (opts.json) {
|
|
985
|
+
console.log(JSON.stringify(report, null, 2));
|
|
986
|
+
}
|
|
987
|
+
else if (report.error) {
|
|
988
|
+
console.error(chalk.red(`Could not read the checks of ${repo}@${sha.slice(0, 7)}: ${report.error}`));
|
|
989
|
+
}
|
|
990
|
+
else if (report.checks.length === 0) {
|
|
991
|
+
console.log(`No failing checks on ${repo}@${sha.slice(0, 7)}.`);
|
|
992
|
+
}
|
|
993
|
+
else {
|
|
994
|
+
for (const check of report.checks) {
|
|
995
|
+
console.log(`${chalk.red('✗')} ${chalk.bold(check.name)} ${chalk.gray(check.conclusion.toLowerCase())}${check.url ? ` ${chalk.gray(check.url)}` : ''}`);
|
|
996
|
+
for (const line of check.excerpt)
|
|
997
|
+
console.log(` ${line}`);
|
|
998
|
+
if (check.excerptError)
|
|
999
|
+
console.log(chalk.yellow(` ${check.excerptError}`));
|
|
1000
|
+
if (check.runId !== null)
|
|
1001
|
+
console.log(chalk.gray(` re-run: agents projects prs rerun ${name} --repo ${repo} --run-id ${check.runId}`));
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
if (report.error)
|
|
1005
|
+
process.exit(1);
|
|
1006
|
+
});
|
|
1007
|
+
setHelpSections(failureCmd, {
|
|
1008
|
+
examples: `
|
|
1009
|
+
agents projects prs rush --json # read a ✗: defaultBranch.sha, a PR's headSha, or a merge's mergeCommitSha
|
|
1010
|
+
agents projects prs failure rush --repo phnx-labs/agi-cli --sha <sha>
|
|
1011
|
+
agents projects prs failure rush --repo phnx-labs/agi-cli --sha <sha> --json
|
|
1012
|
+
`,
|
|
1013
|
+
notes: `
|
|
1014
|
+
REST only: the commit's check runs and statuses, then each failing GitHub
|
|
1015
|
+
Actions job's log (GET actions/jobs/{job}/logs). The excerpt drops timestamps,
|
|
1016
|
+
colour and the runner's cleanup after "Post job cleanup.", and keeps the lines
|
|
1017
|
+
that read like an error with one line of context each side, at most 12. A log
|
|
1018
|
+
that cannot be read empties that excerpt and says why in excerptError; a check
|
|
1019
|
+
that is not an Actions job has no log here. Exits 1 only when the checks
|
|
1020
|
+
themselves could not be read.
|
|
1021
|
+
`,
|
|
1022
|
+
});
|
|
1023
|
+
const rerunCmd = prsCmd
|
|
1024
|
+
.command('rerun <name>')
|
|
1025
|
+
.description('Re-run the failed jobs of one GitHub Actions workflow run.')
|
|
1026
|
+
.requiredOption('--repo <owner/repo>', 'One of the project\'s attached repos')
|
|
1027
|
+
.requiredOption('--run-id <id>', 'The workflow run (runId from prs failure --json)')
|
|
1028
|
+
.option('--json', 'Machine-readable result')
|
|
1029
|
+
.action(async (name, opts) => {
|
|
1030
|
+
const def = prProjectOrExit(name);
|
|
1031
|
+
const raw = opts.runId.trim();
|
|
1032
|
+
const runId = /^\d+$/.test(raw) ? Number(raw) : NaN;
|
|
1033
|
+
if (!Number.isSafeInteger(runId) || runId <= 0)
|
|
1034
|
+
prFail(`--run-id expects a positive integer, got "${opts.runId}".`);
|
|
1035
|
+
const repo = await prRepoOrExit(def, opts.repo);
|
|
1036
|
+
const result = await rerunFailedJobs(repo, runId);
|
|
1037
|
+
if (opts.json)
|
|
1038
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1039
|
+
else if (result.requested)
|
|
1040
|
+
console.log(`${chalk.green(result.message)}: ${repo} run ${runId}`);
|
|
1041
|
+
else
|
|
1042
|
+
console.error(chalk.red(`Not re-run: ${repo} run ${runId}: ${result.message}`));
|
|
1043
|
+
if (!result.requested)
|
|
1044
|
+
process.exit(1);
|
|
1045
|
+
});
|
|
1046
|
+
setHelpSections(rerunCmd, {
|
|
1047
|
+
examples: `
|
|
1048
|
+
agents projects prs failure rush --repo phnx-labs/agi-cli --sha <sha> --json # runId per failing check
|
|
1049
|
+
agents projects prs rerun rush --repo phnx-labs/agi-cli --run-id 37243157132
|
|
1050
|
+
`,
|
|
1051
|
+
notes: `
|
|
1052
|
+
One REST call (POST actions/runs/{id}/rerun-failed-jobs). Re-running only
|
|
1053
|
+
repeats jobs, so it is safe to click again; GitHub refuses a run that is still
|
|
1054
|
+
in progress (exit 1, requested: false in --json).
|
|
956
1055
|
`,
|
|
957
1056
|
});
|
|
958
1057
|
setHelpSections(prsCmd, {
|
|
959
1058
|
examples: `
|
|
960
1059
|
agents projects prs rush --json # every open PR across rush's repos (= prs list rush)
|
|
961
1060
|
agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # one PR, with checks + mergeability
|
|
1061
|
+
agents projects prs ready rush --repo phnx-labs/agi-cli --number 3646 --sha <headSha>
|
|
1062
|
+
agents projects prs review rush --repo phnx-labs/agi-cli --number 3646 --approve --sha <headSha>
|
|
1063
|
+
agents projects prs comment rush --repo phnx-labs/agi-cli --number 3646 --body-file -
|
|
962
1064
|
agents projects prs merge rush --repo phnx-labs/agi-cli --number 3646 --sha <headSha>
|
|
1065
|
+
agents projects prs failure rush --repo phnx-labs/agi-cli --sha <sha>
|
|
1066
|
+
agents projects prs rerun rush --repo phnx-labs/agi-cli --run-id <runId>
|
|
963
1067
|
`,
|
|
964
1068
|
});
|
|
965
1069
|
setHelpSections(prsListCmd, {
|
|
@@ -989,7 +1093,7 @@ export function registerProjectsCommands(program) {
|
|
|
989
1093
|
partial (JSON reports errors per repository; text mode exits non-zero).
|
|
990
1094
|
`,
|
|
991
1095
|
});
|
|
992
|
-
|
|
1096
|
+
registerProjectTodoCommands(projects);
|
|
993
1097
|
projects
|
|
994
1098
|
.command('edit <name>')
|
|
995
1099
|
.description('Open the project YAML in $EDITOR (it is hand-editable regardless).')
|
|
@@ -1000,33 +1104,21 @@ export function registerProjectsCommands(program) {
|
|
|
1000
1104
|
process.exit(1);
|
|
1001
1105
|
}
|
|
1002
1106
|
const editor = process.env.VISUAL || process.env.EDITOR || 'vi';
|
|
1003
|
-
// $EDITOR commonly carries args ("code --wait") — split like monitors/routines do.
|
|
1004
1107
|
const parts = editor.split(/\s+/).filter(Boolean);
|
|
1005
1108
|
const res = spawnSync(parts[0], [...parts.slice(1), target], { stdio: 'inherit' });
|
|
1006
1109
|
process.exit(res.status ?? 0);
|
|
1007
1110
|
});
|
|
1008
|
-
// ---- probe (hidden; the peer half of `status --fleet`) ----
|
|
1009
1111
|
projects
|
|
1010
1112
|
.command('probe [paths...]', { hidden: true })
|
|
1011
1113
|
.description('Probe workspace repos (presence, branch, drift, dirtiness) and print JSON. Answers for this machine only.')
|
|
1012
1114
|
.action((paths) => {
|
|
1013
|
-
// Never fans out — the recursion guard env is set by the parent fan-out,
|
|
1014
|
-
// and this command has no remote code path either way.
|
|
1015
1115
|
console.log(JSON.stringify(probeProjectWorkspaces(paths ?? []), null, 2));
|
|
1016
1116
|
});
|
|
1017
|
-
// ---- pull-local (hidden; the peer half of `pull`) ----
|
|
1018
1117
|
projects
|
|
1019
1118
|
.command('pull-local', { hidden: true })
|
|
1020
1119
|
.description('Fast-forward workspace repos (default-branch only) and print JSON. Answers for this machine only.')
|
|
1021
1120
|
.requiredOption('--targets <json>', 'JSON array of {path, expectedSlug} targets, from the orchestrating `pull`')
|
|
1022
1121
|
.action(async (opts) => {
|
|
1023
|
-
// Never fans out — this is the peer half of the fleet fan-out.
|
|
1024
|
-
//
|
|
1025
|
-
// Targets arrive as {path, expectedSlug} PAIRS, not bare paths: the slug
|
|
1026
|
-
// is what lets this machine refuse to fast-forward a directory hosting a
|
|
1027
|
-
// different repo, and it is hashed into the fingerprint the caller
|
|
1028
|
-
// verifies. Decoding failures exit non-zero so the caller records this
|
|
1029
|
-
// peer as skipped instead of reading a missing answer as "nothing to do".
|
|
1030
1122
|
let targets;
|
|
1031
1123
|
try {
|
|
1032
1124
|
targets = decodePullTargets(opts.targets);
|
|
@@ -1039,7 +1131,6 @@ export function registerProjectsCommands(program) {
|
|
|
1039
1131
|
const envelope = buildPullEnvelope(results, targets);
|
|
1040
1132
|
console.log(JSON.stringify(envelope, null, 2));
|
|
1041
1133
|
});
|
|
1042
|
-
// ---- pull ----
|
|
1043
1134
|
const pullCmd = projects
|
|
1044
1135
|
.command('pull <name>')
|
|
1045
1136
|
.description('Fast-forward every fleet checkout of a named project to its remote default branch.')
|
|
@@ -1058,14 +1149,8 @@ export function registerProjectsCommands(program) {
|
|
|
1058
1149
|
process.exit(0);
|
|
1059
1150
|
}
|
|
1060
1151
|
const deviceFilter = resolveDeviceFilter(rawOpts.device, rawOpts.devices);
|
|
1061
|
-
// Pull locally first.
|
|
1062
1152
|
const self = machineId();
|
|
1063
1153
|
const localResults = await pullProjectTargets(targets, self);
|
|
1064
|
-
// Fan out to fleet peers. Send the full {path, expectedSlug} targets —
|
|
1065
|
-
// bare paths would disable slug verification on every peer AND make the
|
|
1066
|
-
// peer's fingerprint (which hashes the slug) unmatchable, so its whole
|
|
1067
|
-
// answer would be discarded. Compute the fingerprint once so every peer
|
|
1068
|
-
// envelope can be verified against the exact target set we sent.
|
|
1069
1154
|
const expectedFingerprint = fingerprintTargets(targets);
|
|
1070
1155
|
const remoteRes = await gatherRemoteAgentsJson({
|
|
1071
1156
|
args: pullLocalArgs(targets),
|
|
@@ -1077,10 +1162,6 @@ export function registerProjectsCommands(program) {
|
|
|
1077
1162
|
});
|
|
1078
1163
|
const allResults = [...localResults, ...remoteRes.items];
|
|
1079
1164
|
if (rawOpts.json) {
|
|
1080
|
-
// Mirror `status --json`: peers that didn't answer, or answered
|
|
1081
|
-
// unverifiably, go to stderr so a machine caller can still tell them
|
|
1082
|
-
// apart from a device with nothing to report (the JSON array itself
|
|
1083
|
-
// stays a clean result list).
|
|
1084
1165
|
if (remoteRes.skipped.length > 0)
|
|
1085
1166
|
process.stderr.write(formatFleetSkippedNote(remoteRes.skipped));
|
|
1086
1167
|
if (remoteRes.parseFailed.length > 0)
|
|
@@ -1090,8 +1171,6 @@ export function registerProjectsCommands(program) {
|
|
|
1090
1171
|
else {
|
|
1091
1172
|
printProjectPullSummary(name, allResults, remoteRes.skipped, remoteRes.parseFailed);
|
|
1092
1173
|
}
|
|
1093
|
-
// A peer whose answer could not be verified already ran a real pull whose
|
|
1094
|
-
// outcome we cannot see — that is a failed pull, not a quiet success.
|
|
1095
1174
|
if (!projectPullComplete(allResults) || remoteRes.parseFailed.length > 0) {
|
|
1096
1175
|
process.exit(1);
|
|
1097
1176
|
}
|
|
@@ -1119,7 +1198,6 @@ export function registerProjectsCommands(program) {
|
|
|
1119
1198
|
as unavailable and does not.
|
|
1120
1199
|
`,
|
|
1121
1200
|
});
|
|
1122
|
-
// ---- import ----
|
|
1123
1201
|
projects
|
|
1124
1202
|
.command('import')
|
|
1125
1203
|
.description('Import project definitions from Linear (via the `linear` CLI).')
|
|
@@ -1144,7 +1222,6 @@ export function registerProjectsCommands(program) {
|
|
|
1144
1222
|
for (const skip of result.skipped)
|
|
1145
1223
|
console.log(chalk.gray(` skip ${skip.name}: ${skip.reason}`));
|
|
1146
1224
|
});
|
|
1147
|
-
// ---- set ----
|
|
1148
1225
|
projects
|
|
1149
1226
|
.command('set <name>')
|
|
1150
1227
|
.description('Change one field on a project definition, preserving everything else.')
|
|
@@ -1168,15 +1245,10 @@ export function registerProjectsCommands(program) {
|
|
|
1168
1245
|
console.error(chalk.red('Nothing to set. Pass a field, e.g. --repo <owner/repo>.'));
|
|
1169
1246
|
process.exit(1);
|
|
1170
1247
|
}
|
|
1171
|
-
// One --slug cannot name two directories. Refuse rather than guess which
|
|
1172
|
-
// --add-dir it was meant for.
|
|
1173
1248
|
if (opts.slug && opts.addDir.length !== 1) {
|
|
1174
1249
|
console.error(chalk.red('--slug names a single --add-dir; pass exactly one --add-dir with it.'));
|
|
1175
1250
|
process.exit(1);
|
|
1176
1251
|
}
|
|
1177
|
-
// Load, mutate the named fields, write back — the `link` pattern. NEVER
|
|
1178
|
-
// the `add --force` pattern, which rebuilds the def from flags alone and
|
|
1179
|
-
// silently drops linear/contexts/integrations that were not re-passed.
|
|
1180
1252
|
if (opts.repo !== undefined)
|
|
1181
1253
|
def.repo = opts.repo;
|
|
1182
1254
|
if (opts.root !== undefined)
|
|
@@ -1186,11 +1258,6 @@ export function registerProjectsCommands(program) {
|
|
|
1186
1258
|
if (opts.goal?.length)
|
|
1187
1259
|
def.goals = opts.goal.map(parseGoalFlag);
|
|
1188
1260
|
if (opts.path !== undefined) {
|
|
1189
|
-
// `--path` is a subdir OF the root, so without one there is nothing to
|
|
1190
|
-
// hang it off. A def imported with `--from-linear` that found no local
|
|
1191
|
-
// checkout carries name + linear and no root — joining against '' there
|
|
1192
|
-
// would silently write `/apps/cli`, an absolute path at the filesystem
|
|
1193
|
-
// root, and the def would resolve somewhere that does not exist.
|
|
1194
1261
|
const base = (opts.root ?? def.root ?? '').replace(/\/$/, '');
|
|
1195
1262
|
if (!base) {
|
|
1196
1263
|
console.error(chalk.red(`"${def.name}" has no root, so --path has nothing to resolve against.`));
|
|
@@ -1199,8 +1266,6 @@ export function registerProjectsCommands(program) {
|
|
|
1199
1266
|
}
|
|
1200
1267
|
def.defaultPath = `${base}/${opts.path.replace(/^\//, '')}`;
|
|
1201
1268
|
}
|
|
1202
|
-
// --rm-dir before --add-dir, so re-pointing one directory in a single
|
|
1203
|
-
// command (`--rm-dir old --add-dir new`) does what it reads like.
|
|
1204
1269
|
const removed = [];
|
|
1205
1270
|
for (const d of opts.rmDir) {
|
|
1206
1271
|
const target = path.resolve(expandLocalHome(d));
|
|
@@ -1241,7 +1306,6 @@ export function registerProjectsCommands(program) {
|
|
|
1241
1306
|
for (const r of added)
|
|
1242
1307
|
console.log(chalk.gray(` + dir ${r.path} · ${r.slug}`));
|
|
1243
1308
|
});
|
|
1244
|
-
// ---- link ----
|
|
1245
1309
|
projects
|
|
1246
1310
|
.command('link <name>')
|
|
1247
1311
|
.description('Attach an external tracker to a project definition (writes linear.projectId + name into the YAML; re-run to pick up a Linear rename).')
|
|
@@ -1256,8 +1320,6 @@ export function registerProjectsCommands(program) {
|
|
|
1256
1320
|
console.error(chalk.red('Nothing to link. Pass a tracker flag, e.g. --linear [query].'));
|
|
1257
1321
|
process.exit(1);
|
|
1258
1322
|
}
|
|
1259
|
-
// Explicit user command — a missing/unauthenticated `linear` CLI is loud,
|
|
1260
|
-
// unlike the best-effort card enrichment.
|
|
1261
1323
|
let list;
|
|
1262
1324
|
try {
|
|
1263
1325
|
list = listLinearProjects();
|
|
@@ -1272,9 +1334,6 @@ export function registerProjectsCommands(program) {
|
|
|
1272
1334
|
pick = pickLinearProject(query, list);
|
|
1273
1335
|
}
|
|
1274
1336
|
else {
|
|
1275
|
-
// Auto-suggest from the def's own identity — the primary repo slug is
|
|
1276
|
-
// the sharpest key, then the def name. Only an exact normalized match
|
|
1277
|
-
// writes itself; anything weaker asks the user to disambiguate.
|
|
1278
1337
|
pick = { kind: 'none' };
|
|
1279
1338
|
for (const hint of [def.repo, def.name].filter((h) => typeof h === 'string' && h.length > 0)) {
|
|
1280
1339
|
const d = pickLinearProject(hint, list);
|
|
@@ -1301,21 +1360,16 @@ export function registerProjectsCommands(program) {
|
|
|
1301
1360
|
process.exit(1);
|
|
1302
1361
|
}
|
|
1303
1362
|
const p = pick.project;
|
|
1304
|
-
// Preserve every other field — load, set linear, write back. Keep a
|
|
1305
|
-
// previously linked url when the new CLI row carries none.
|
|
1306
1363
|
if (def.linear?.projectId && def.linear.projectId !== p.id) {
|
|
1307
1364
|
console.log(chalk.gray(` replacing previous Linear link (${def.linear.projectId})`));
|
|
1308
1365
|
}
|
|
1309
1366
|
if (def.linear?.name && def.linear.name !== p.name) {
|
|
1310
1367
|
console.log(chalk.gray(` renaming "${def.linear.name}" → "${p.name}" (Linear is authoritative)`));
|
|
1311
1368
|
}
|
|
1312
|
-
// Assigned, not spread over `def.linear`: a spread would resurrect a url
|
|
1313
|
-
// that nextLinearLink deliberately dropped. The block has no other fields.
|
|
1314
1369
|
def.linear = nextLinearLink(def.linear, p);
|
|
1315
1370
|
writeProjectDef(def);
|
|
1316
1371
|
console.log(chalk.green(`${def.name} → Linear project "${p.name}" (${p.id})${p.url ? ` ${p.url}` : ''}`));
|
|
1317
1372
|
});
|
|
1318
|
-
// ---- save ----
|
|
1319
1373
|
projects
|
|
1320
1374
|
.command('save')
|
|
1321
1375
|
.description('Create or update one project from a complete ProjectDef JSON object on stdin.')
|
|
@@ -1357,7 +1411,6 @@ export function registerProjectsCommands(program) {
|
|
|
1357
1411
|
}
|
|
1358
1412
|
console.log(JSON.stringify(saved, null, 2));
|
|
1359
1413
|
});
|
|
1360
|
-
// ---- rm ----
|
|
1361
1414
|
projects
|
|
1362
1415
|
.command('remove <name>')
|
|
1363
1416
|
.alias('rm')
|