@phnx-labs/agents-cli 1.22.112 → 1.22.114
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 +37 -0
- package/README.md +10 -11
- package/dist/cli/command-registry.d.ts +0 -60
- package/dist/cli/command-registry.js +59 -61
- package/dist/commands/apply.d.ts +0 -4
- package/dist/commands/apply.js +3 -3
- package/dist/commands/browser-picker.d.ts +3 -6
- package/dist/commands/browser-picker.js +2 -2
- package/dist/commands/browser-sessions-picker.d.ts +2 -1
- package/dist/commands/computer-sessions-picker.d.ts +2 -1
- package/dist/commands/computer.d.ts +14 -19
- package/dist/commands/computer.js +65 -10
- package/dist/commands/config.js +46 -2
- package/dist/commands/daemon.d.ts +0 -23
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/detach-core.d.ts +2 -1
- package/dist/commands/detach.d.ts +0 -3
- package/dist/commands/detach.js +3 -3
- package/dist/commands/feed.d.ts +3 -3
- package/dist/commands/feed.js +1 -1
- package/dist/commands/focus.d.ts +4 -4
- package/dist/commands/harness-hooks.d.ts +0 -7
- package/dist/commands/harness-hooks.js +1 -1
- package/dist/commands/harness-wizard.d.ts +2 -2
- package/dist/commands/harness.d.ts +3 -8
- package/dist/commands/harness.js +1 -1
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +3 -3
- package/dist/commands/projects.d.ts +2 -18
- package/dist/commands/projects.js +89 -3
- package/dist/commands/resource-view.d.ts +3 -2
- package/dist/commands/resume.d.ts +0 -1
- package/dist/commands/resume.js +1 -1
- package/dist/commands/routines.d.ts +1 -3
- package/dist/commands/routines.js +1 -1
- package/dist/commands/run-account-picker.d.ts +2 -1
- package/dist/commands/run-broadcast.d.ts +2 -1
- package/dist/commands/run-device-picker.d.ts +2 -1
- package/dist/commands/secrets-passthrough.d.ts +14 -0
- package/dist/commands/secrets-passthrough.js +21 -2
- package/dist/commands/sessions-backfill.d.ts +2 -35
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-bookmark.d.ts +0 -10
- package/dist/commands/sessions-bookmark.js +1 -1
- package/dist/commands/sessions-inject.d.ts +2 -3
- package/dist/commands/sessions-inject.js +8 -17
- package/dist/commands/sessions-picker-factory.d.ts +4 -14
- package/dist/commands/sessions-picker-factory.js +2 -2
- package/dist/commands/sessions-picker.d.ts +3 -9
- package/dist/commands/sessions-picker.js +2 -2
- package/dist/commands/sessions-resume.d.ts +2 -4
- package/dist/commands/sessions-resume.js +0 -5
- package/dist/commands/sessions-stats.d.ts +2 -1
- package/dist/commands/sessions-stop.d.ts +0 -3
- package/dist/commands/sessions-stop.js +1 -1
- package/dist/commands/sessions-tail.d.ts +2 -1
- package/dist/commands/sessions-trace.d.ts +4 -6
- package/dist/commands/sessions-trace.js +1 -1
- package/dist/commands/sessions.d.ts +14 -104
- package/dist/commands/sessions.js +22 -10
- package/dist/commands/setup-mine.d.ts +0 -6
- package/dist/commands/setup-mine.js +1 -1
- package/dist/commands/setup.d.ts +3 -4
- package/dist/commands/setup.js +1 -1
- package/dist/commands/share.d.ts +8 -8
- package/dist/commands/teams-picker.d.ts +2 -5
- package/dist/commands/teams-picker.js +2 -2
- package/dist/commands/teams.d.ts +1 -7
- package/dist/commands/teams.js +1 -1
- package/dist/commands/tmux.d.ts +1 -1
- package/dist/commands/tmux.js +1 -1
- package/dist/commands/upgrade.d.ts +2 -1
- package/dist/commands/utils.d.ts +1 -1
- package/dist/commands/utils.js +1 -1
- package/dist/lib/account-capabilities.d.ts +2 -1
- package/dist/lib/account-catalog.d.ts +4 -13
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +3 -4
- package/dist/lib/account-registry.js +1 -1
- package/dist/lib/accounting/account-launch.d.ts +4 -3
- package/dist/lib/accounting/account-pool.d.ts +2 -1
- package/dist/lib/accounting/rotate.d.ts +3 -9
- package/dist/lib/accounting/rotate.js +2 -14
- package/dist/lib/accounting/usage-sync.d.ts +5 -4
- package/dist/lib/accounting/usage.d.ts +7 -31
- package/dist/lib/accounting/usage.js +4 -4
- package/dist/lib/accounts/migrate.d.ts +8 -8
- package/dist/lib/accounts/migrate.js +1 -1
- package/dist/lib/acp/client.d.ts +3 -2
- package/dist/lib/acp/harnesses.d.ts +2 -2
- package/dist/lib/acp/harnesses.js +1 -1
- package/dist/lib/acp/run.d.ts +2 -1
- package/dist/lib/actor.d.ts +3 -2
- package/dist/lib/add-dir.d.ts +2 -17
- package/dist/lib/add-dir.js +2 -6
- package/dist/lib/address.d.ts +56 -0
- package/dist/lib/address.js +143 -0
- package/dist/lib/agent-spec/agents.d.ts +12 -28
- package/dist/lib/agent-spec/agents.js +2 -6
- package/dist/lib/agent-spec/primitives.d.ts +0 -7
- package/dist/lib/agent-spec/primitives.js +0 -6
- package/dist/lib/agent-spec/types.d.ts +2 -1
- package/dist/lib/analytics/dashboard.d.ts +1 -5
- package/dist/lib/analytics/dashboard.js +0 -2
- package/dist/lib/analytics/mix-commands.d.ts +0 -7
- package/dist/lib/analytics/mix-commands.js +3 -3
- package/dist/lib/analytics/recipes.d.ts +0 -12
- package/dist/lib/analytics/recipes.js +7 -31
- package/dist/lib/analytics/usage-db.d.ts +5 -32
- package/dist/lib/analytics/usage-db.js +1 -70
- package/dist/lib/answer-router.d.ts +7 -6
- package/dist/lib/answer-router.js +5 -11
- package/dist/lib/artifact-actions.d.ts +0 -4
- package/dist/lib/ask-classifier.d.ts +3 -4
- package/dist/lib/ask-classifier.js +0 -7
- package/dist/lib/auth-health.d.ts +3 -46
- package/dist/lib/auth-health.js +3 -3
- package/dist/lib/auth-mint.d.ts +6 -6
- package/dist/lib/auth-mint.js +5 -5
- package/dist/lib/bench/runner.d.ts +2 -2
- package/dist/lib/bench/runner.js +1 -1
- package/dist/lib/bench/storage.d.ts +0 -1
- package/dist/lib/bench/storage.js +1 -1
- package/dist/lib/boot-profile.d.ts +0 -2
- package/dist/lib/boot-profile.js +0 -4
- package/dist/lib/brand.d.ts +0 -6
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/arc-discovery.d.ts +4 -12
- package/dist/lib/browser/arc-discovery.js +1 -1
- package/dist/lib/browser/cdp.d.ts +1 -1
- package/dist/lib/browser/chrome.d.ts +2 -2
- package/dist/lib/browser/chrome.js +0 -4
- package/dist/lib/browser/chromium-discovery.d.ts +3 -2
- package/dist/lib/browser/drivers/arc.d.ts +3 -20
- package/dist/lib/browser/drivers/arc.js +2 -7
- package/dist/lib/browser/drivers/firefox.d.ts +2 -6
- package/dist/lib/browser/drivers/firefox.js +1 -1
- package/dist/lib/browser/drivers/local.d.ts +2 -1
- package/dist/lib/browser/drivers/ssh.d.ts +2 -3
- package/dist/lib/browser/drivers/ssh.js +0 -7
- package/dist/lib/browser/firefox-discovery.d.ts +4 -3
- package/dist/lib/browser/har.d.ts +8 -7
- package/dist/lib/browser/hygiene.d.ts +2 -3
- package/dist/lib/browser/hygiene.js +1 -1
- package/dist/lib/browser/ipc.d.ts +4 -3
- package/dist/lib/browser/ipc.js +1 -1
- package/dist/lib/browser/login-detection.d.ts +1 -8
- package/dist/lib/browser/registry.d.ts +2 -1
- package/dist/lib/browser/remote-control.d.ts +0 -7
- package/dist/lib/browser/remote-control.js +2 -2
- package/dist/lib/browser/resolve-target.d.ts +2 -6
- package/dist/lib/browser/resolve-target.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +4 -4
- package/dist/lib/browser/service.d.ts +4 -4
- package/dist/lib/browser/sessions-list.d.ts +0 -10
- package/dist/lib/browser/sessions-list.js +3 -3
- package/dist/lib/browser/stream.d.ts +2 -1
- package/dist/lib/browser/task-index.d.ts +4 -4
- package/dist/lib/browser/task-index.js +1 -1
- package/dist/lib/browser/types.d.ts +0 -20
- package/dist/lib/browser/types.js +1 -34
- package/dist/lib/browser/upload.d.ts +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -2
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/budget/live-cloud.d.ts +2 -1
- package/dist/lib/budget/preflight.d.ts +3 -5
- package/dist/lib/budget/preflight.js +1 -1
- package/dist/lib/catchup.d.ts +2 -1
- package/dist/lib/channels/owner-forward.d.ts +5 -4
- package/dist/lib/channels/owner-sink.js +2 -2
- package/dist/lib/channels/providers/desktop.js +1 -1
- package/dist/lib/channels/providers/rush.d.ts +2 -1
- package/dist/lib/channels/registry.d.ts +1 -1
- package/dist/lib/channels/registry.js +1 -1
- package/dist/lib/channels/resolve.d.ts +3 -2
- package/dist/lib/channels/send.d.ts +5 -4
- package/dist/lib/cli-resources.d.ts +3 -9
- package/dist/lib/cli-resources.js +1 -1
- package/dist/lib/cloud/cursor.d.ts +1 -2
- package/dist/lib/cloud/cursor.js +1 -1
- package/dist/lib/cloud/dispatch.d.ts +2 -1
- package/dist/lib/cloud/factory.d.ts +0 -2
- package/dist/lib/cloud/factory.js +1 -1
- package/dist/lib/cloud/rush.d.ts +3 -11
- package/dist/lib/cloud/rush.js +1 -1
- package/dist/lib/cloud/session-index.d.ts +2 -1
- package/dist/lib/cloud/types.d.ts +2 -1
- package/dist/lib/codex-policy.d.ts +2 -1
- package/dist/lib/commands.d.ts +7 -7
- package/dist/lib/commands.js +1 -1
- package/dist/lib/comms-render.d.ts +1 -1
- package/dist/lib/computer/context.d.ts +11 -3
- package/dist/lib/computer/context.js +2 -2
- package/dist/lib/computer/policy.d.ts +0 -12
- package/dist/lib/computer/policy.js +1 -1
- package/dist/lib/computer-client.d.ts +3 -3
- package/dist/lib/computer-client.js +0 -1
- package/dist/lib/concurrency.d.ts +2 -1
- package/dist/lib/config-keys.d.ts +16 -3
- package/dist/lib/config-keys.js +47 -2
- package/dist/lib/convert.d.ts +0 -12
- package/dist/lib/convert.js +1 -12
- package/dist/lib/crabbox/cli.d.ts +6 -24
- package/dist/lib/crabbox/cli.js +2 -28
- package/dist/lib/crabbox/lease.d.ts +5 -6
- package/dist/lib/crabbox/lease.js +1 -1
- package/dist/lib/crabbox/progress.d.ts +2 -1
- package/dist/lib/crabbox/setup-copy.d.ts +2 -3
- package/dist/lib/crabbox/setup-copy.js +1 -1
- package/dist/lib/daemon/account-state-daemon-service.d.ts +1 -1
- package/dist/lib/daemon/attention-notify-service.d.ts +2 -1
- package/dist/lib/daemon/catchup-service.d.ts +2 -1
- package/dist/lib/daemon/daemon.d.ts +4 -12
- package/dist/lib/daemon/daemon.js +42 -23
- package/dist/lib/daemon/harness-update-service.d.ts +2 -19
- package/dist/lib/daemon/harness-update-service.js +3 -3
- package/dist/lib/daemon/runner.d.ts +3 -3
- package/dist/lib/daemon/self-update-service.d.ts +1 -16
- package/dist/lib/daemon/self-update-service.js +6 -6
- package/dist/lib/daemon/state-dir-check-service.d.ts +2 -1
- package/dist/lib/daemon/supervisor.d.ts +3 -2
- package/dist/lib/daemon/testdata/process-view-daemon.d.ts +1 -0
- package/dist/lib/daemon/testdata/process-view-daemon.js +14 -0
- package/dist/lib/daemon/testdata/process-view-start.d.ts +1 -0
- package/dist/lib/daemon/testdata/process-view-start.js +43 -0
- package/dist/lib/daemon-services.d.ts +2 -1
- package/dist/lib/daemon-webhooks.d.ts +1 -1
- package/dist/lib/deeplink/register.d.ts +3 -13
- package/dist/lib/deeplink/register.js +3 -3
- package/dist/lib/deeplink/url.d.ts +3 -2
- package/dist/lib/device-config.d.ts +4 -15
- package/dist/lib/device-config.js +164 -8
- package/dist/lib/devices/connect.d.ts +2 -1
- package/dist/lib/devices/discovery-policy.d.ts +3 -2
- package/dist/lib/devices/doctor-findings.js +1 -1
- package/dist/lib/devices/doctor-overview-cache.d.ts +3 -2
- package/dist/lib/devices/fleet-divergence.d.ts +2 -1
- package/dist/lib/devices/fleet.d.ts +3 -4
- package/dist/lib/devices/fleet.js +1 -1
- package/dist/lib/devices/harness-inventory.d.ts +3 -2
- package/dist/lib/devices/health-report.d.ts +3 -2
- package/dist/lib/devices/health.d.ts +1 -8
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/interactive-host.d.ts +0 -2
- package/dist/lib/devices/interactive-host.js +1 -1
- package/dist/lib/devices/known-hosts.d.ts +2 -20
- package/dist/lib/devices/known-hosts.js +2 -2
- package/dist/lib/devices/pool.d.ts +2 -1
- package/dist/lib/devices/resolve-target.d.ts +2 -2
- package/dist/lib/devices/rollout-verify.d.ts +3 -2
- package/dist/lib/devices/stats-cache.d.ts +3 -2
- package/dist/lib/devices/sync.d.ts +6 -5
- package/dist/lib/devices/worker-pick.d.ts +3 -12
- package/dist/lib/devices/worker-pick.js +1 -1
- package/dist/lib/diff-text.d.ts +2 -1
- package/dist/lib/doctor-diff.d.ts +2 -1
- package/dist/lib/drift-sync.d.ts +3 -2
- package/dist/lib/drift.d.ts +3 -3
- package/dist/lib/drift.js +1 -1
- package/dist/lib/event-families.d.ts +0 -6
- package/dist/lib/event-families.js +3 -3
- package/dist/lib/event-provenance.d.ts +4 -1
- package/dist/lib/event-provenance.js +4 -0
- package/dist/lib/events-ingest.d.ts +4 -3
- package/dist/lib/exec-account-home.d.ts +2 -4
- package/dist/lib/exec-account-home.js +1 -1
- package/dist/lib/exec-bounded.d.ts +3 -4
- package/dist/lib/exec-bounded.js +1 -1
- package/dist/lib/exec.d.ts +6 -18
- package/dist/lib/exec.js +28 -8
- package/dist/lib/factory/snapshot.d.ts +2 -2
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/feed/activity-stream.d.ts +2 -5
- package/dist/lib/feed/activity-stream.js +11 -2
- package/dist/lib/feed/activity.d.ts +16 -33
- package/dist/lib/feed/activity.js +69 -26
- package/dist/lib/feed/answer.d.ts +3 -2
- package/dist/lib/feed/attention.js +5 -1
- package/dist/lib/feed/events.d.ts +2 -47
- package/dist/lib/feed/events.js +1 -141
- package/dist/lib/feed/feed.d.ts +9 -42
- package/dist/lib/feed/feed.js +1 -60
- package/dist/lib/feed/pr-status.d.ts +0 -2
- package/dist/lib/feed/pr-status.js +1 -5
- package/dist/lib/feed/watch.d.ts +10 -2
- package/dist/lib/feed/watch.js +91 -4
- package/dist/lib/feed-broadcast.d.ts +5 -47
- package/dist/lib/feed-broadcast.js +9 -9
- package/dist/lib/feed-outcome.d.ts +3 -6
- package/dist/lib/feed-outcome.js +2 -2
- package/dist/lib/feed-policy.d.ts +5 -6
- package/dist/lib/feed-policy.js +2 -2
- package/dist/lib/feed-post.d.ts +3 -4
- package/dist/lib/feed-post.js +2 -2
- package/dist/lib/feed-ranking.d.ts +2 -2
- package/dist/lib/feed-ranking.js +1 -1
- package/dist/lib/fleet/apply.d.ts +5 -6
- package/dist/lib/fleet/apply.js +4 -4
- package/dist/lib/fleet/manifest.d.ts +2 -1
- package/dist/lib/fleet/remote-login.d.ts +18 -36
- package/dist/lib/fleet/remote-login.js +20 -19
- package/dist/lib/fleet/types.d.ts +0 -8
- package/dist/lib/fleet-cache.d.ts +1 -18
- package/dist/lib/fleet-cache.js +0 -5
- package/dist/lib/fleet-shared-repo-sync.d.ts +3 -3
- package/dist/lib/fleet-shared-repo-sync.js +1 -1
- package/dist/lib/fleet-shared-state.d.ts +3 -2
- package/dist/lib/format.d.ts +2 -1
- package/dist/lib/friction-heuristics.d.ts +2 -1
- package/dist/lib/fs-walk.d.ts +2 -1
- package/dist/lib/fuzzy.d.ts +2 -1
- package/dist/lib/gemini-settings.d.ts +0 -1
- package/dist/lib/gemini-settings.js +1 -1
- package/dist/lib/git.d.ts +7 -65
- package/dist/lib/git.js +3 -142
- package/dist/lib/github/gh-overload.d.ts +0 -4
- package/dist/lib/github/gh-overload.js +2 -2
- package/dist/lib/github/project-prs.d.ts +118 -0
- package/dist/lib/github/project-prs.js +173 -0
- package/dist/lib/github/rest.d.ts +2 -1
- package/dist/lib/harness/exec-config-version.d.ts +2 -1
- package/dist/lib/harness-auth-capabilities.d.ts +5 -4
- package/dist/lib/harness-connection-test.d.ts +2 -1
- package/dist/lib/heal.d.ts +3 -20
- package/dist/lib/heal.js +2 -39
- package/dist/lib/help.d.ts +3 -2
- package/dist/lib/helper-download.d.ts +0 -12
- package/dist/lib/helper-download.js +2 -2
- package/dist/lib/helper-versions.d.ts +2 -1
- package/dist/lib/helper-versions.js +1 -1
- package/dist/lib/hooks/install.d.ts +8 -49
- package/dist/lib/hooks/install.js +2 -96
- package/dist/lib/hooks/match.d.ts +2 -1
- package/dist/lib/hosts/credential-transport.d.ts +0 -2
- package/dist/lib/hosts/credential-transport.js +1 -1
- package/dist/lib/hosts/dispatch.d.ts +2 -34
- package/dist/lib/hosts/dispatch.js +4 -21
- package/dist/lib/hosts/logs.d.ts +2 -1
- package/dist/lib/hosts/passthrough.d.ts +1 -1
- package/dist/lib/hosts/passthrough.js +0 -1
- package/dist/lib/hosts/progress.d.ts +0 -5
- package/dist/lib/hosts/progress.js +1 -1
- package/dist/lib/hosts/ready.d.ts +3 -4
- package/dist/lib/hosts/ready.js +0 -8
- package/dist/lib/hosts/reconcile.d.ts +2 -8
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +4 -11
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +1 -1
- package/dist/lib/hosts/remote-cmd.d.ts +4 -3
- package/dist/lib/hosts/remote-session-id.d.ts +5 -27
- package/dist/lib/hosts/remote-session-id.js +18 -61
- package/dist/lib/hosts/session-index.d.ts +3 -2
- package/dist/lib/hosts/ssh-config.d.ts +2 -3
- package/dist/lib/hosts/ssh-config.js +0 -10
- package/dist/lib/humans.d.ts +0 -2
- package/dist/lib/humans.js +2 -2
- package/dist/lib/import.d.ts +4 -3
- package/dist/lib/installations/installation-lock.d.ts +0 -2
- package/dist/lib/installations/installation-lock.js +2 -2
- package/dist/lib/installations/launch-gate.d.ts +0 -9
- package/dist/lib/installations/launch-gate.js +1 -1
- package/dist/lib/installations/migrate.d.ts +0 -11
- package/dist/lib/installations/migrate.js +1 -1
- package/dist/lib/installations/shims.d.ts +1 -1
- package/dist/lib/installations/shims.js +2 -2
- package/dist/lib/installations/update-runtime.js +1 -1
- package/dist/lib/launch-identity.d.ts +10 -0
- package/dist/lib/launch-identity.js +31 -0
- package/dist/lib/linear-cache.d.ts +2 -1
- package/dist/lib/linux-userns.d.ts +2 -3
- package/dist/lib/linux-userns.js +0 -4
- package/dist/lib/loop.d.ts +2 -1
- package/dist/lib/mailbox-gc.d.ts +2 -1
- package/dist/lib/mailbox-target.d.ts +2 -1
- package/dist/lib/mailbox.d.ts +0 -6
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/manifest.d.ts +0 -14
- package/dist/lib/manifest.js +2 -2
- package/dist/lib/mcp-registry.d.ts +2 -1
- package/dist/lib/memory.d.ts +2 -13
- package/dist/lib/memory.js +4 -4
- package/dist/lib/menubar/download-menubar.d.ts +0 -2
- package/dist/lib/menubar/download-menubar.js +1 -5
- package/dist/lib/menubar/install-menubar.d.ts +3 -14
- package/dist/lib/menubar/install-menubar.js +3 -3
- package/dist/lib/menubar/migrate-prefs.d.ts +53 -0
- package/dist/lib/menubar/migrate-prefs.js +168 -0
- package/dist/lib/menubar/resolve-version.d.ts +1 -9
- package/dist/lib/menubar/resolve-version.js +4 -4
- package/dist/lib/menubar/snapshot.d.ts +24 -2
- package/dist/lib/menubar/snapshot.js +26 -0
- package/dist/lib/model-tier-overrides.d.ts +3 -2
- package/dist/lib/monitors/config.d.ts +0 -2
- package/dist/lib/monitors/config.js +0 -4
- package/dist/lib/monitors/engine.d.ts +1 -1
- package/dist/lib/monitors/remote.d.ts +3 -2
- package/dist/lib/monitors/sources/webhook.d.ts +2 -15
- package/dist/lib/monitors/sources/webhook.js +1 -38
- package/dist/lib/monitors/state.d.ts +4 -7
- package/dist/lib/monitors/state.js +2 -2
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/notify.js +1 -1
- package/dist/lib/onepassword.d.ts +5 -14
- package/dist/lib/onepassword.js +0 -64
- package/dist/lib/open-url.d.ts +3 -2
- package/dist/lib/openclaw-keychain.d.ts +4 -17
- package/dist/lib/openclaw-keychain.js +3 -33
- package/dist/lib/operator.d.ts +2 -2
- package/dist/lib/operator.js +1 -1
- package/dist/lib/output/git-output.d.ts +4 -14
- package/dist/lib/output/git-output.js +1 -1
- package/dist/lib/owner-message.d.ts +3 -29
- package/dist/lib/owner-message.js +3 -3
- package/dist/lib/packages/output-home.d.ts +2 -4
- package/dist/lib/packages/output-home.js +2 -2
- package/dist/lib/perf/db.d.ts +0 -2
- package/dist/lib/perf/db.js +2 -7
- package/dist/lib/permissions-registry.d.ts +2 -3
- package/dist/lib/permissions-registry.js +0 -4
- package/dist/lib/permissions.d.ts +6 -16
- package/dist/lib/permissions.js +2 -15
- package/dist/lib/picker.d.ts +6 -5
- package/dist/lib/placement.d.ts +3 -6
- package/dist/lib/placement.js +0 -17
- package/dist/lib/platform/posixpath.d.ts +2 -1
- package/dist/lib/platform/winpath.d.ts +2 -1
- package/dist/lib/plugins/plugin-marketplace.d.ts +2 -2
- package/dist/lib/plugins/plugin-marketplace.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +2 -1
- package/dist/lib/profiles-presets.d.ts +2 -1
- package/dist/lib/profiles.d.ts +3 -9
- package/dist/lib/profiles.js +1 -9
- package/dist/lib/project-doctor.d.ts +2 -1
- package/dist/lib/project-launch.d.ts +2 -2
- package/dist/lib/project-probe.d.ts +4 -3
- package/dist/lib/project-pull.d.ts +2 -1
- package/dist/lib/project-resources.d.ts +2 -2
- package/dist/lib/project-resources.js +1 -1
- package/dist/lib/project-root.d.ts +2 -6
- package/dist/lib/project-root.js +1 -1
- package/dist/lib/project-schedule.d.ts +2 -1
- package/dist/lib/project-status.d.ts +2 -16
- package/dist/lib/project-status.js +3 -3
- package/dist/lib/reconcile-and-repair.d.ts +5 -4
- package/dist/lib/redact.d.ts +7 -1
- package/dist/lib/redact.js +94 -3
- package/dist/lib/refresh-coordinator.d.ts +2 -1
- package/dist/lib/refresh.d.ts +3 -2
- package/dist/lib/remote-agents-json.d.ts +3 -2
- package/dist/lib/reserved-stores.d.ts +0 -2
- package/dist/lib/reserved-stores.js +3 -5
- package/dist/lib/resource-content-diff.d.ts +0 -2
- package/dist/lib/resource-content-diff.js +1 -1
- package/dist/lib/resource-patterns.d.ts +2 -1
- package/dist/lib/resource-profiles.d.ts +2 -8
- package/dist/lib/resource-profiles.js +3 -27
- package/dist/lib/resources/workflows.d.ts +1 -1
- package/dist/lib/resources.d.ts +4 -9
- package/dist/lib/resources.js +1 -1
- package/dist/lib/routine-context.d.ts +2 -5
- package/dist/lib/routine-context.js +2 -2
- package/dist/lib/routine-notify-owner.d.ts +8 -7
- package/dist/lib/routine-notify-owner.js +5 -5
- package/dist/lib/routine-process-cleanup.d.ts +2 -1
- package/dist/lib/routine-readiness.d.ts +0 -2
- package/dist/lib/routine-readiness.js +0 -7
- package/dist/lib/routines-project.d.ts +3 -4
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +3 -25
- package/dist/lib/rules/compile.js +1 -1
- package/dist/lib/rules/compose.d.ts +3 -9
- package/dist/lib/rules/rules.d.ts +4 -15
- package/dist/lib/rules/rules.js +1 -64
- package/dist/lib/run-defaults.d.ts +1 -1
- package/dist/lib/run-notify.d.ts +2 -1
- package/dist/lib/run-trace-sync.d.ts +1 -1
- package/dist/lib/run-trace-sync.js +1 -1
- package/dist/lib/scheduler.d.ts +2 -1
- package/dist/lib/scheduling/routines.d.ts +9 -21
- package/dist/lib/scheduling/routines.js +3 -46
- package/dist/lib/secrets-client.d.ts +0 -17
- package/dist/lib/secrets-client.js +4 -26
- package/dist/lib/secrets-policy.d.ts +12 -17
- package/dist/lib/secrets-policy.js +5 -5
- package/dist/lib/secrets-types.d.ts +3 -2
- package/dist/lib/secrets-types.js +2 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -1
- package/dist/lib/self-heal/registry.d.ts +3 -2
- package/dist/lib/self-heal/types.d.ts +1 -1
- package/dist/lib/self-heal/types.js +1 -1
- package/dist/lib/self-update.d.ts +5 -5
- package/dist/lib/self-update.js +4 -4
- package/dist/lib/session/active.js +9 -3
- package/dist/lib/session/actor-sidecar.d.ts +3 -2
- package/dist/lib/session/artifacts.d.ts +0 -2
- package/dist/lib/session/artifacts.js +1 -1
- package/dist/lib/session/bash-command.d.ts +2 -7
- package/dist/lib/session/bundle.d.ts +4 -6
- package/dist/lib/session/bundle.js +1 -5
- package/dist/lib/session/cloud.d.ts +0 -4
- package/dist/lib/session/cloud.js +2 -15
- package/dist/lib/session/db.d.ts +2 -1
- package/dist/lib/session/db.js +39 -4
- package/dist/lib/session/detached.d.ts +2 -1
- package/dist/lib/session/detached.js +2 -2
- package/dist/lib/session/digest.d.ts +2 -2
- package/dist/lib/session/digest.js +1 -1
- package/dist/lib/session/discover.js +7 -2
- package/dist/lib/session/fork.d.ts +3 -2
- package/dist/lib/session/highlights.d.ts +6 -5
- package/dist/lib/session/hook-sessions.d.ts +12 -1
- package/dist/lib/session/hook-sessions.js +139 -6
- package/dist/lib/session/host-link.d.ts +2 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/inject.js +1 -1
- package/dist/lib/session/insights.d.ts +3 -15
- package/dist/lib/session/insights.js +2 -2
- package/dist/lib/session/local-tmux-attach.d.ts +2 -18
- package/dist/lib/session/local-tmux-attach.js +1 -1
- package/dist/lib/session/migrations.d.ts +0 -1
- package/dist/lib/session/migrations.js +1 -1
- package/dist/lib/session/mirror.d.ts +5 -8
- package/dist/lib/session/mirror.js +2 -2
- package/dist/lib/session/parse.d.ts +1 -32
- package/dist/lib/session/parse.js +4 -4
- package/dist/lib/session/pid-registry.d.ts +18 -5
- package/dist/lib/session/pid-registry.js +164 -17
- package/dist/lib/session/presence.d.ts +2 -1
- package/dist/lib/session/process-view.d.ts +25 -0
- package/dist/lib/session/process-view.js +176 -0
- package/dist/lib/session/projection.d.ts +13 -0
- package/dist/lib/session/projection.js +101 -0
- package/dist/lib/session/prompt.d.ts +3 -2
- package/dist/lib/session/prompt.js +38 -1
- package/dist/lib/session/recovery.d.ts +3 -2
- package/dist/lib/session/remote/peer-stream.d.ts +2 -5
- package/dist/lib/session/remote/peer-stream.js +2 -2
- package/dist/lib/session/remote/remote-bundle.d.ts +2 -1
- package/dist/lib/session/remote/remote-list.d.ts +5 -5
- package/dist/lib/session/remote/remote.d.ts +4 -3
- package/dist/lib/session/remote/watch.d.ts +10 -7
- package/dist/lib/session/remote/watch.js +10 -6
- package/dist/lib/session/remote-active.d.ts +2 -1
- package/dist/lib/session/render.d.ts +2 -2
- package/dist/lib/session/render.js +1 -1
- package/dist/lib/session/resume-owner.d.ts +1 -1
- package/dist/lib/session/resume-owner.js +1 -1
- package/dist/lib/session/run-names.d.ts +2 -1
- package/dist/lib/session/session-cache.d.ts +7 -26
- package/dist/lib/session/session-cache.js +17 -8
- package/dist/lib/session/share-html.d.ts +1 -21
- package/dist/lib/session/share-html.js +1 -1
- package/dist/lib/session/shell-programs.d.ts +2 -1
- package/dist/lib/session/state.d.ts +41 -8
- package/dist/lib/session/state.js +112 -11
- package/dist/lib/session/stream-render.d.ts +2 -1
- package/dist/lib/session/sync/agents.d.ts +0 -4
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +5 -5
- package/dist/lib/session/sync/managed-config.d.ts +0 -8
- package/dist/lib/session/sync/managed-key.d.ts +0 -2
- package/dist/lib/session/sync/managed-key.js +1 -1
- package/dist/lib/session/sync/r2.d.ts +4 -1
- package/dist/lib/session/sync/r2.js +4 -7
- package/dist/lib/session/sync/transcript-crypto.d.ts +2 -1
- package/dist/lib/session/tail.d.ts +2 -1
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/testdata/pid-registry-namespace.d.ts +1 -0
- package/dist/lib/session/testdata/pid-registry-namespace.js +27 -0
- package/dist/lib/session/testdata/process-view-namespace.d.ts +1 -0
- package/dist/lib/session/testdata/process-view-namespace.js +56 -0
- package/dist/lib/session/testdata/process-view-private.d.ts +1 -0
- package/dist/lib/session/testdata/process-view-private.js +12 -0
- package/dist/lib/session/throughput.d.ts +2 -3
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/timeline-pass.d.ts +3 -42
- package/dist/lib/session/timeline-pass.js +4 -4
- package/dist/lib/session/timeline.d.ts +3 -13
- package/dist/lib/session/timeline.js +3 -3
- package/dist/lib/session/tool-calls.d.ts +2 -2
- package/dist/lib/session/tool-calls.js +1 -1
- package/dist/lib/session/tool-index.d.ts +0 -8
- package/dist/lib/session/tool-index.js +2 -2
- package/dist/lib/session/tool-store.d.ts +2 -1
- package/dist/lib/session/trajectory-compare.d.ts +2 -1
- package/dist/lib/session/trajectory-lineage.d.ts +2 -1
- package/dist/lib/session/trajectory-text.d.ts +3 -2
- package/dist/lib/session/trajectory.d.ts +2 -1
- package/dist/lib/session/viewing-in.d.ts +2 -1
- package/dist/lib/settings-manifest.d.ts +2 -1
- package/dist/lib/share/delete.d.ts +5 -4
- package/dist/lib/share/html.d.ts +0 -2
- package/dist/lib/share/html.js +9 -9
- package/dist/lib/share/http-error.d.ts +3 -2
- package/dist/lib/share/og.d.ts +2 -1
- package/dist/lib/share/provision.d.ts +2 -2
- package/dist/lib/share/publish.d.ts +4 -13
- package/dist/lib/share/publish.js +2 -2
- package/dist/lib/shim-heal.d.ts +1 -5
- package/dist/lib/shim-heal.js +0 -6
- package/dist/lib/smart-launch.d.ts +4 -5
- package/dist/lib/smart-launch.js +1 -1
- package/dist/lib/snapshot.d.ts +3 -2
- package/dist/lib/ssh-exec.d.ts +5 -4
- package/dist/lib/ssh-tunnel.d.ts +3 -2
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -2
- package/dist/lib/staleness/checkers/permissions.js +1 -1
- package/dist/lib/staleness/fingerprint.d.ts +0 -7
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/prune.d.ts +3 -2
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/sources.d.ts +0 -8
- package/dist/lib/staleness/writers/sources.js +1 -1
- package/dist/lib/startup/command-registry.js +1 -1
- package/dist/lib/state.d.ts +1 -3
- package/dist/lib/state.js +1 -4
- package/dist/lib/subagents-registry.d.ts +4 -3
- package/dist/lib/subagents.d.ts +2 -1
- package/dist/lib/subagents.js +3 -2
- package/dist/lib/summarizer/pass.d.ts +3 -6
- package/dist/lib/summarizer/pass.js +2 -2
- package/dist/lib/summarizer/summarize.d.ts +4 -3
- package/dist/lib/sync-passphrase.d.ts +3 -2
- package/dist/lib/sync-status.d.ts +3 -16
- package/dist/lib/sync-status.js +2 -2
- package/dist/lib/sync-umbrella.d.ts +4 -3
- package/dist/lib/system-run-sync.d.ts +2 -1
- package/dist/lib/teams/agents.d.ts +2 -4
- package/dist/lib/teams/agents.js +1 -1
- package/dist/lib/teams/forEach.d.ts +3 -2
- package/dist/lib/teams/pr-watch.d.ts +4 -11
- package/dist/lib/teams/pr-watch.js +4 -4
- package/dist/lib/teams/registry.d.ts +2 -3
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/teams/remoteWorktree.d.ts +0 -16
- package/dist/lib/teams/remoteWorktree.js +3 -3
- package/dist/lib/teams/scheduler.d.ts +6 -5
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/supervisor.d.ts +4 -3
- package/dist/lib/teams/worktree.d.ts +0 -9
- package/dist/lib/teams/worktree.js +0 -32
- package/dist/lib/term-client.d.ts +44 -0
- package/dist/lib/term-client.js +117 -0
- package/dist/lib/terminal/inject.d.ts +3 -16
- package/dist/lib/terminal/inject.js +1 -29
- package/dist/lib/terminal/resolve.d.ts +3 -9
- package/dist/lib/terminal/resolve.js +3 -7
- package/dist/lib/tmux/binary.d.ts +2 -1
- package/dist/lib/tmux/orphan-reap.d.ts +6 -7
- package/dist/lib/tmux/orphan-reap.js +1 -1
- package/dist/lib/tmux/session.d.ts +4 -3
- package/dist/lib/traces/classify.d.ts +3 -2
- package/dist/lib/traces/config.d.ts +0 -8
- package/dist/lib/traces/insights.d.ts +2 -1
- package/dist/lib/traces/phenotype.d.ts +3 -3
- package/dist/lib/traces/provision.d.ts +1 -3
- package/dist/lib/traces/provision.js +1 -1
- package/dist/lib/traces/schema2-build.d.ts +1 -1
- package/dist/lib/traces/schema2-danger.d.ts +2 -1
- package/dist/lib/traces/schema2.d.ts +5 -4
- package/dist/lib/traces/segments.d.ts +4 -20
- package/dist/lib/traces/segments.js +3 -3
- package/dist/lib/traces/sync.d.ts +2 -3
- package/dist/lib/traces/sync.js +1 -1
- package/dist/lib/triggers/handlers.d.ts +4 -13
- package/dist/lib/triggers/handlers.js +1 -1
- package/dist/lib/triggers/webhook.d.ts +5 -27
- package/dist/lib/triggers/webhook.js +4 -4
- package/dist/lib/types.d.ts +3 -3
- package/dist/lib/usage-refresh.d.ts +4 -10
- package/dist/lib/usage-refresh.js +3 -8
- package/dist/lib/verbs.d.ts +2 -1
- package/dist/lib/version-duplicates.d.ts +2 -3
- package/dist/lib/version-duplicates.js +3 -33
- package/dist/lib/version.d.ts +2 -1
- package/dist/lib/warn-unpushed.d.ts +2 -1
- package/dist/lib/watchdog/history.d.ts +3 -2
- package/dist/lib/watchdog/log.d.ts +0 -6
- package/dist/lib/watchdog/log.js +1 -1
- package/dist/lib/watchdog/rotate.d.ts +2 -26
- package/dist/lib/watchdog/rotate.js +4 -12
- package/dist/lib/watchdog/runner.d.ts +0 -7
- package/dist/lib/watchdog/runner.js +4 -4
- package/dist/lib/watchdog/service.d.ts +2 -2
- package/dist/lib/watchdog/service.js +1 -1
- package/dist/lib/watchdog/watchdog-agent.d.ts +2 -1
- package/dist/lib/watchdog/watchdog.d.ts +2 -1
- package/dist/lib/watchdog/watchdogTail.d.ts +2 -1
- package/dist/lib/workflows-registry.d.ts +3 -2
- package/dist/lib/workflows.d.ts +4 -7
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/worktree/held.d.ts +4 -28
- package/dist/lib/worktree/held.js +3 -3
- package/package.json +2 -3
- package/scripts/postinstall.js +5 -4
- package/dist/commands/pty.d.ts +0 -20
- package/dist/commands/pty.js +0 -404
- package/dist/lib/config-machine-keys.d.ts +0 -14
- package/dist/lib/config-machine-keys.js +0 -21
- package/dist/lib/pty-client.d.ts +0 -49
- package/dist/lib/pty-client.js +0 -315
- package/dist/lib/pty-server.d.ts +0 -59
- package/dist/lib/pty-server.js +0 -653
package/dist/commands/config.js
CHANGED
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
import chalk from 'chalk';
|
|
16
16
|
import { AGENTS } from '../lib/agents.js';
|
|
17
17
|
import { setHelpSections } from '../lib/help.js';
|
|
18
|
-
import { parseConfigKey, formatAgentVersion, devicePropertyToConfigName, configKeyStorageHint, } from '../lib/config-keys.js';
|
|
18
|
+
import { parseConfigKey, formatConfigKey, formatAgentVersion, devicePropertyToConfigName, configKeyStorageHint, MENUBAR_MENU_PROPERTIES, } from '../lib/config-keys.js';
|
|
19
19
|
import { registerBudgetCommand } from './budget.js';
|
|
20
20
|
import { resolveRunDefaults, setRunDefaultModel, setRunDefaultMode, setRunDefaultEffort, unsetRunDefault, } from '../lib/run-defaults.js';
|
|
21
21
|
import { resolveTierOverride, setTierOverride, clearTierOverride } from '../lib/model-tier-overrides.js';
|
|
22
|
-
import { getConfigValue, setConfigValue, unsetConfigValue, listConfig, } from '../lib/device-config.js';
|
|
22
|
+
import { getConfigValue, setConfigValue, unsetConfigValue, listConfig, configKeySpec, } from '../lib/device-config.js';
|
|
23
23
|
import { readMeta, updateMeta } from '../lib/state.js';
|
|
24
24
|
import { MODEL_TIERS } from '../lib/model-tiers.js';
|
|
25
25
|
import { machineId } from '../lib/machine-id.js';
|
|
@@ -51,6 +51,20 @@ function parseValue(key, parsed, raw) {
|
|
|
51
51
|
return parsed.property === 'enabled' ? parseBool(raw, key) : raw.trim();
|
|
52
52
|
case 'updates':
|
|
53
53
|
return parseBool(raw, key);
|
|
54
|
+
case 'menubar': {
|
|
55
|
+
// The type (and enum validation) live in the device-config spec; parse the
|
|
56
|
+
// raw string to that type here so setConfigValue's assertion passes.
|
|
57
|
+
const spec = configKeySpec(formatConfigKey(parsed));
|
|
58
|
+
if (spec.type === 'bool')
|
|
59
|
+
return parseBool(raw, key);
|
|
60
|
+
if (spec.type === 'int') {
|
|
61
|
+
if (!/^\d+$/.test(raw.trim())) {
|
|
62
|
+
throw new Error(`Config key '${key}' expects an integer, got '${raw}'.`);
|
|
63
|
+
}
|
|
64
|
+
return Number.parseInt(raw.trim(), 10);
|
|
65
|
+
}
|
|
66
|
+
return raw.trim();
|
|
67
|
+
}
|
|
54
68
|
case 'device': {
|
|
55
69
|
const property = parsed.property;
|
|
56
70
|
switch (property) {
|
|
@@ -74,8 +88,11 @@ function parseValue(key, parsed, raw) {
|
|
|
74
88
|
return Number.parseInt(raw.trim(), 10);
|
|
75
89
|
case 'notes':
|
|
76
90
|
return raw.trim();
|
|
91
|
+
case 'formFactor':
|
|
92
|
+
return raw.trim();
|
|
77
93
|
case 'browser.profile':
|
|
78
94
|
case 'browser.viewer':
|
|
95
|
+
case 'computer.host':
|
|
79
96
|
return raw.trim();
|
|
80
97
|
}
|
|
81
98
|
// A device property with no arm above used to fall out of the switch and
|
|
@@ -143,6 +160,10 @@ function setConfig(parsed, value) {
|
|
|
143
160
|
setGlobalAutoUpdateEnabled(value);
|
|
144
161
|
return;
|
|
145
162
|
}
|
|
163
|
+
case 'menubar': {
|
|
164
|
+
setConfigValue(formatConfigKey(parsed), value);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
146
167
|
case 'device': {
|
|
147
168
|
const configName = devicePropertyToConfigName(parsed.property);
|
|
148
169
|
if (parsed.property === 'notes') {
|
|
@@ -217,6 +238,12 @@ function unsetConfig(parsed) {
|
|
|
217
238
|
unsetGlobalAutoUpdateEnabled();
|
|
218
239
|
return had;
|
|
219
240
|
}
|
|
241
|
+
case 'menubar': {
|
|
242
|
+
const name = formatConfigKey(parsed);
|
|
243
|
+
const had = getConfigValue(name).value !== undefined;
|
|
244
|
+
unsetConfigValue(name);
|
|
245
|
+
return had;
|
|
246
|
+
}
|
|
220
247
|
case 'device': {
|
|
221
248
|
const configName = devicePropertyToConfigName(parsed.property);
|
|
222
249
|
const had = getConfigValue(configName, { device: parsed.device }).value !== undefined;
|
|
@@ -251,6 +278,8 @@ function getConfig(parsed) {
|
|
|
251
278
|
return getConfigValue(`summarizer.${parsed.property}`).value;
|
|
252
279
|
case 'updates':
|
|
253
280
|
return parsed.agent ? rawAgentAutoUpdateSetting(parsed.agent) : rawGlobalAutoUpdateSetting();
|
|
281
|
+
case 'menubar':
|
|
282
|
+
return getConfigValue(formatConfigKey(parsed)).value;
|
|
254
283
|
case 'device': {
|
|
255
284
|
const configName = devicePropertyToConfigName(parsed.property);
|
|
256
285
|
return getConfigValue(configName, { device: parsed.device }).value;
|
|
@@ -345,6 +374,15 @@ function* listCentralConfigEntries() {
|
|
|
345
374
|
yield { key, value, hint: configKeyStorageHint(parseConfigKey(key)) };
|
|
346
375
|
}
|
|
347
376
|
}
|
|
377
|
+
// AGI Menu preferences (PHNX-3999) — user scope, syncs fleet-wide. Only set
|
|
378
|
+
// keys are listed; the native menu falls back to its own defaults for the rest.
|
|
379
|
+
for (const prop of MENUBAR_MENU_PROPERTIES) {
|
|
380
|
+
const key = `menubar.menu.${prop}`;
|
|
381
|
+
const value = getConfigValue(key).value;
|
|
382
|
+
if (value !== undefined) {
|
|
383
|
+
yield { key, value, hint: configKeyStorageHint(parseConfigKey(key)) };
|
|
384
|
+
}
|
|
385
|
+
}
|
|
348
386
|
}
|
|
349
387
|
/** Collect device-scope config entries. */
|
|
350
388
|
function* listDeviceConfigEntries(device) {
|
|
@@ -378,6 +416,9 @@ function* listDeviceConfigEntries(device) {
|
|
|
378
416
|
case 'notes':
|
|
379
417
|
key = `${prefix}notes`;
|
|
380
418
|
break;
|
|
419
|
+
case 'formFactor':
|
|
420
|
+
key = `${prefix}formFactor`;
|
|
421
|
+
break;
|
|
381
422
|
case 'browser.profile':
|
|
382
423
|
// The self device's default browser profile is already surfaced as the
|
|
383
424
|
// top-level `browser.profile` key; skip it here to avoid duplication.
|
|
@@ -391,6 +432,9 @@ function* listDeviceConfigEntries(device) {
|
|
|
391
432
|
continue;
|
|
392
433
|
key = `${prefix}browser.viewer`;
|
|
393
434
|
break;
|
|
435
|
+
case 'computer.host':
|
|
436
|
+
key = `${prefix}computer.host`;
|
|
437
|
+
break;
|
|
394
438
|
default:
|
|
395
439
|
// A `default: continue` here silently drops any device property with no
|
|
396
440
|
// arm — which is how browser.viewer was invisible to `config list` after
|
|
@@ -17,29 +17,6 @@
|
|
|
17
17
|
* duplicating it.
|
|
18
18
|
*/
|
|
19
19
|
import type { Command } from 'commander';
|
|
20
|
-
import { type DaemonServiceId } from '../lib/daemon-services.js';
|
|
21
|
-
/** Parse a `ps -o etime=` value (`[[dd-]hh:]mm:ss`) into elapsed seconds. */
|
|
22
|
-
export declare function parseEtimeToSeconds(raw: string): number | null;
|
|
23
20
|
/** Elapsed wall-clock seconds since `pid` started, or null if unavailable (best-effort, POSIX only). */
|
|
24
21
|
export declare function uptimeSeconds(pid: number): number | null;
|
|
25
|
-
/** One row of the roster every registered daemon service — supervisor-managed or legacy — renders in `agents daemon services`. */
|
|
26
|
-
export interface DaemonServiceRow {
|
|
27
|
-
id: DaemonServiceId;
|
|
28
|
-
title: string;
|
|
29
|
-
description: string;
|
|
30
|
-
enabled: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* `ServiceSupervisor`'s real lifecycle state when `supervised` is true
|
|
33
|
-
* (`idle`/`running`/`parked`/`stopped`, written cross-process via
|
|
34
|
-
* `recordSubsystemState`). A legacy `setInterval`-driven service has no such
|
|
35
|
-
* record, so its state is inferred from `enabled` + whether the daemon
|
|
36
|
-
* process is up — labelled distinctly so a reader can't mistake it for a
|
|
37
|
-
* measured value.
|
|
38
|
-
*/
|
|
39
|
-
state: string;
|
|
40
|
-
supervised: boolean;
|
|
41
|
-
lastRunMs: number | null;
|
|
42
|
-
lastError: string | null;
|
|
43
|
-
consecutiveFailures: number;
|
|
44
|
-
}
|
|
45
22
|
export declare function registerDaemonCommand(program: Command): void;
|
package/dist/commands/daemon.js
CHANGED
|
@@ -254,7 +254,7 @@ function registryScopedDuplicates(processes, ownerPid) {
|
|
|
254
254
|
return processes.filter((p) => registered.has(p.pid));
|
|
255
255
|
}
|
|
256
256
|
/** Parse a `ps -o etime=` value (`[[dd-]hh:]mm:ss`) into elapsed seconds. */
|
|
257
|
-
|
|
257
|
+
function parseEtimeToSeconds(raw) {
|
|
258
258
|
const m = raw.match(/^(?:(\d+)-)?(?:(\d+):)?(\d+):(\d+)$/);
|
|
259
259
|
if (!m)
|
|
260
260
|
return null;
|
|
@@ -18,7 +18,7 @@ export declare const BACKGROUND_NUDGE: string;
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function buildBackgroundArgv(agent: string, sessionId: string, cwd?: string): string[];
|
|
20
20
|
/** What to do with a resolved session, given which machine we're on. */
|
|
21
|
-
|
|
21
|
+
type DetachTarget = {
|
|
22
22
|
kind: 'local';
|
|
23
23
|
sessionId: string;
|
|
24
24
|
} | {
|
|
@@ -44,3 +44,4 @@ export declare function resolveDetachTarget(s: ActiveSession, self: string): Det
|
|
|
44
44
|
export declare function resolveOne(activeById: Map<string, ActiveSession>, id: string): ActiveSession | {
|
|
45
45
|
error: string;
|
|
46
46
|
};
|
|
47
|
+
export {};
|
|
@@ -13,6 +13,3 @@ export declare function registerDetachCommand(program: Command): void;
|
|
|
13
13
|
* socket; it is a parameter only so a test can drive an isolated tmux server.
|
|
14
14
|
*/
|
|
15
15
|
export declare function stopInteractive(s: ActiveSession, socket?: string): Promise<void>;
|
|
16
|
-
export declare function detachAction(id: string, opts?: {
|
|
17
|
-
local?: boolean;
|
|
18
|
-
}): Promise<void>;
|
package/dist/commands/detach.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `agents sessions detach <id>` — send a live agent session to the background:
|
|
3
3
|
* stop its interactive process and continue it headless, unattended, so it drives
|
|
4
4
|
* its task to completion without holding a terminal. Bring it back with
|
|
5
|
-
* `agents sessions
|
|
5
|
+
* `agents sessions resume`. A sibling of `sessions focus` on the session
|
|
6
6
|
* lifecycle axis.
|
|
7
7
|
*
|
|
8
8
|
* Agent-agnostic and version-pinned by construction: it re-invokes
|
|
@@ -18,7 +18,7 @@ import { gatherLiveTargets } from './go.js';
|
|
|
18
18
|
import { killSession } from '../lib/tmux/index.js';
|
|
19
19
|
import { getDefaultSocketPath } from '../lib/tmux/paths.js';
|
|
20
20
|
import { getAgentsInvocation } from '../lib/daemon/daemon.js';
|
|
21
|
-
import { captureProcessStartTime } from '../lib/
|
|
21
|
+
import { captureProcessStartTime } from '../lib/platform/process.js';
|
|
22
22
|
import { writeDetachRecord } from '../lib/session/detached.js';
|
|
23
23
|
import { getLogsDir } from '../lib/state.js';
|
|
24
24
|
import { runOnPeer } from '../lib/session/remote-list.js';
|
|
@@ -122,7 +122,7 @@ function spawnHeadless(command, args, logFile) {
|
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
|
-
|
|
125
|
+
async function detachAction(id, opts = {}) {
|
|
126
126
|
const { self, activeById } = await gatherLiveTargets(!!opts.local, { includeCloud: true, selector: id });
|
|
127
127
|
const resolved = resolveOne(activeById, id);
|
|
128
128
|
if ('error' in resolved) {
|
package/dist/commands/feed.d.ts
CHANGED
|
@@ -21,7 +21,6 @@ import { type OutcomeGroup, type SessionOutcomeHint } from '../lib/feed-outcome.
|
|
|
21
21
|
import { filterBlocksForFeed } from '../lib/ask-classifier.js';
|
|
22
22
|
import { type FeedSessionSignal } from '../lib/feed-ranking.js';
|
|
23
23
|
export declare const FEED_POST_HELP = "\nExamples:\n # Title (subject) + body. Phone broadcasts put title first, body after a\n # blank line, then a \"Sent from agent/session on host\" footer.\n agents feed post --title \"CHANGELOG pushed\" \"Watching CI and mac-mini E2E\"\n agents feed post --title \"Cover ready\" \"render at ./out/cover.png\" --attach ./out/cover.png\n agents feed post --title \"Ready for review\" \"PR opened, waiting on prix-cloud\" --json\n\n # Worth interrupting someone over - reaches sinks gated on minLevel: important:\n agents feed post --title \"npm token expired\" \"Cannot publish the release\" --level important\n\n # Also raise a local desktop banner on THIS machine (same notifier as run\n # --notify), on top of any configured broadcast - useful when you are at the box:\n agents feed post --title \"Build green\" \"all checks passed\" --notify\n\n # Stuck: opens a needs-you block and always broadcasts at important:\n agents feed post --title \"Force-push denied\" \"git-guard blocked PR #1749\" --blocked\n agents feed post --title \"Publish or wait?\" \"npm publish now or after review\" --blocked --option publish --option wait\n agents feed post --title \"Delete preview env?\" \"stale preview still running\" --blocked --default \"leave it\"\n\n # Exhaust self-serve FIRST. A block is for what you genuinely cannot do:\n # a credential only the user holds, a decision only they can make, an\n # approval only they can give. Not \"should I do the obvious next step?\".\n\n # Outside a run, pass the session explicitly:\n agents feed post --title \"Manual note\" \"context for the next agent\" --session 00998b0e-2d15-4d2f-a58b-974a886c9b47\n\nIdentity (session, agent, host, runtime, pid, launchId) is stamped automatically\nand rides the phone footer of feed.broadcast {message}. Domain facts (tickets,\nPRs) are not CLI flags - the ticket is joined from the session index at post\ntime. No em-dashes in title/body - they are scrubbed on the way out.\n\nConfigure where a post is mirrored under feed.broadcast in agents.yaml - see\ndocs/observability.md. A channel sink may set message: with placeholders such\nas {message} and {ticket}; a missing placeholder skips that sink. A milestone is always recorded, but it does not text\nthe owner when the sink has minLevel: important. Add --level important for a\nphone-worthy successful update. Use --blocked only when work cannot continue.\nThe owner destination comes from humans.yaml; do not duplicate it in agents.yaml.\n";
|
|
24
|
-
export declare const FEED_NO_FANOUT_ENV = "AGENTS_FEED_LOCAL";
|
|
25
24
|
/** Right-hand masthead summary: `N blocks · M agents`. */
|
|
26
25
|
export declare function formatFeedMastheadRight(blocks: OpenBlock[]): string;
|
|
27
26
|
/** Reply hint matching the shared fleet-comms reply line. */
|
|
@@ -29,7 +28,7 @@ export declare function formatFeedReplyHint(mailboxId: string): string;
|
|
|
29
28
|
export declare function parseRemoteFeed(stdout: string, machine: string): OpenBlock[];
|
|
30
29
|
/** Merge local and remote rows, keeping the first copy of a host/session block. */
|
|
31
30
|
export declare function mergeFeedBlocks(...groups: OpenBlock[][]): OpenBlock[];
|
|
32
|
-
|
|
31
|
+
type FeedControlAction = 'pause' | 'kill';
|
|
33
32
|
export declare function controlFeedSession(action: FeedControlAction, target: string, signals: FeedSessionSignal[]): Promise<string>;
|
|
34
33
|
export declare function shouldIncludeLocalFeed(hosts: string[] | undefined, self: string): boolean;
|
|
35
34
|
export declare function remoteFeedHostsToDial(hosts: string[] | undefined, self: string): string[] | undefined;
|
|
@@ -85,6 +84,7 @@ export declare function loadSessionMetasForFeedEnrichment<T>(load: () => Promise
|
|
|
85
84
|
}>;
|
|
86
85
|
export declare function registerFeedCommand(program: Command): void;
|
|
87
86
|
/** Feed view selector (RUSH-2015): decisions, progress, or both. */
|
|
88
|
-
|
|
87
|
+
type FeedFilter = 'needs' | 'updates' | 'all';
|
|
89
88
|
/** Normalize a raw --filter value; unknown/empty falls back to the default. */
|
|
90
89
|
export declare function resolveFeedFilter(raw: string | undefined): FeedFilter;
|
|
90
|
+
export {};
|
package/dist/commands/feed.js
CHANGED
|
@@ -65,7 +65,7 @@ the owner when the sink has minLevel: important. Add --level important for a
|
|
|
65
65
|
phone-worthy successful update. Use --blocked only when work cannot continue.
|
|
66
66
|
The owner destination comes from humans.yaml; do not duplicate it in agents.yaml.
|
|
67
67
|
`;
|
|
68
|
-
|
|
68
|
+
const FEED_NO_FANOUT_ENV = 'AGENTS_FEED_LOCAL';
|
|
69
69
|
/** Right-hand masthead summary: `N blocks · M agents`. */
|
|
70
70
|
export function formatFeedMastheadRight(blocks) {
|
|
71
71
|
const agents = new Set(blocks.map((b) => b.mailboxId)).size;
|
package/dist/commands/focus.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export { looksLikeTmuxAlias, resolveTmuxAliasState, shouldAttachLocalTmuxAliasBe
|
|
|
20
20
|
import { type LiveStatusFilter } from './sessions.js';
|
|
21
21
|
import { openSurfaces, type Backend } from '../lib/terminal/index.js';
|
|
22
22
|
/** Options for `sessions focus` — device scope + the `--active` live-state filters. */
|
|
23
|
-
|
|
23
|
+
interface FocusOptions {
|
|
24
24
|
/**
|
|
25
25
|
* Resolve the target from the launcher's AGENT_LAUNCH_ID instead of a session
|
|
26
26
|
* id (RUSH-3125).
|
|
@@ -123,7 +123,7 @@ export declare function focusSelectedSession(meta: SessionMeta, active: ActiveSe
|
|
|
123
123
|
* running); never a silent drop.
|
|
124
124
|
* - `skip` — not resumable AND no rail: reported, not dropped.
|
|
125
125
|
*/
|
|
126
|
-
|
|
126
|
+
type FocusSurfacePlan = {
|
|
127
127
|
kind: 'attach';
|
|
128
128
|
command: string[];
|
|
129
129
|
note: string;
|
|
@@ -152,9 +152,9 @@ export declare function tmuxAttachScript(mux: {
|
|
|
152
152
|
*/
|
|
153
153
|
export declare function planFocusSurface(s: ActiveSession, self: string, resumeCommandFor: (s: ActiveSession) => string[] | null, rail?: AttachRailLiveness): FocusSurfacePlan;
|
|
154
154
|
/** The engine seam — real `openSurfaces`, overridable in tests to assert the tab requests. */
|
|
155
|
-
|
|
155
|
+
type OpenSurfacesFn = typeof openSurfaces;
|
|
156
156
|
/** Test seams for `openFocusTabs`: inject the engine boundary + force a backend. */
|
|
157
|
-
|
|
157
|
+
interface OpenFocusTabsDeps {
|
|
158
158
|
open?: OpenSurfacesFn;
|
|
159
159
|
/** Skip `resolveBackend` (which needs a live terminal) when set — tests pass 'tmux'. */
|
|
160
160
|
backend?: Backend | 'inplace';
|
|
@@ -18,13 +18,6 @@
|
|
|
18
18
|
import type { AgentId } from '../lib/types.js';
|
|
19
19
|
import { type ModelInfo } from '../lib/models.js';
|
|
20
20
|
import { type WizardHooks, type WizardIO, type WizardChoice } from './harness-wizard.js';
|
|
21
|
-
/**
|
|
22
|
-
* The installed version whose model catalog to read for a host. The wizard has
|
|
23
|
-
* no version in hand for a fresh create, so it reads the host's default (or its
|
|
24
|
-
* sole installed) version — the same version a bare `agents run <host>` uses.
|
|
25
|
-
* Null when the host has no installed version to probe (→ free-text model).
|
|
26
|
-
*/
|
|
27
|
-
export declare function catalogVersionFor(host: AgentId): string | null;
|
|
28
21
|
/**
|
|
29
22
|
* Build the model `select` choices from a catalog. Pure, so the labelling +
|
|
30
23
|
* escape-hatch rows are unit-tested with no catalog probe. Every list ends with
|
|
@@ -29,7 +29,7 @@ const KEEP_MODEL = '__keep_model__';
|
|
|
29
29
|
* sole installed) version — the same version a bare `agents run <host>` uses.
|
|
30
30
|
* Null when the host has no installed version to probe (→ free-text model).
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
function catalogVersionFor(host) {
|
|
33
33
|
return getGlobalDefault(host) || listInstalledVersions(host)[0] || null;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -132,13 +132,13 @@ export interface HarnessEditable {
|
|
|
132
132
|
fallback: boolean;
|
|
133
133
|
}
|
|
134
134
|
/** One field's editability plus, when disabled, the one-line reason to surface. */
|
|
135
|
-
|
|
135
|
+
interface EditableField {
|
|
136
136
|
enabled: boolean;
|
|
137
137
|
/** Set only when `enabled` is false — the greyed field's stated reason. */
|
|
138
138
|
reason?: string;
|
|
139
139
|
}
|
|
140
140
|
/** Per-host editability with a reason attached to every disabled field. */
|
|
141
|
-
|
|
141
|
+
interface HarnessEditability {
|
|
142
142
|
model: EditableField;
|
|
143
143
|
baseUrl: EditableField;
|
|
144
144
|
auth: EditableField;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { Command } from 'commander';
|
|
14
14
|
import { type AddProfileOptions } from './profiles.js';
|
|
15
|
-
import { type Profile
|
|
15
|
+
import { type Profile } from '../lib/profiles.js';
|
|
16
16
|
import { type HarnessDraft } from './harness-wizard.js';
|
|
17
17
|
/**
|
|
18
18
|
* Print one custom harness. Shared by `agents harness view <name>` and by
|
|
@@ -62,12 +62,6 @@ export interface EditOptions {
|
|
|
62
62
|
* copy a model from.
|
|
63
63
|
*/
|
|
64
64
|
export declare function buildFork(source: string, name: string, opts: ForkOptions): Profile;
|
|
65
|
-
/** Map `agents harness edit` flags onto {@link ForkProfileOptions} — the same
|
|
66
|
-
* override shape `editProfile`/`forkProfile` apply. `--version ''` (unpin) is
|
|
67
|
-
* handled by the caller ({@link buildEdit}), not here: `forkProfile`'s own
|
|
68
|
-
* ternary treats an empty string as "no override" and would otherwise inherit
|
|
69
|
-
* the source's version instead of clearing it. */
|
|
70
|
-
export declare function buildEditOverrides(opts: EditOptions): ForkProfileOptions;
|
|
71
65
|
/** True when at least one recognized edit flag was given. */
|
|
72
66
|
export declare function hasEditFlags(opts: EditOptions): boolean;
|
|
73
67
|
/**
|
|
@@ -85,7 +79,7 @@ export declare function forkNeedsWizard(source: string | undefined, name: string
|
|
|
85
79
|
* fallback instead of being routed into the wizard. */
|
|
86
80
|
export declare function addNeedsWizard(name: string | undefined, opts: AddProfileOptions): boolean;
|
|
87
81
|
/** Whether the pre-save connection test runs, or must be asked for on a TTY. */
|
|
88
|
-
|
|
82
|
+
type ConnectionTestGate = 'on' | 'off' | 'ask';
|
|
89
83
|
/**
|
|
90
84
|
* Resolve the tri-state connection-test gate (RUSH-2221), pure so the branching
|
|
91
85
|
* is unit-tested with no prompt or spawn. `--test` forces it on, `--no-test`
|
|
@@ -106,3 +100,4 @@ export declare function connectionTestGate(testFlag: boolean | undefined, intera
|
|
|
106
100
|
*/
|
|
107
101
|
export declare function draftToEditOptions(draft: HarnessDraft, original: Profile): EditOptions;
|
|
108
102
|
export declare function registerHarnessCommands(program: Command): void;
|
|
103
|
+
export {};
|
package/dist/commands/harness.js
CHANGED
|
@@ -122,7 +122,7 @@ function authEnvKeyForHostOrThrow(host) {
|
|
|
122
122
|
* handled by the caller ({@link buildEdit}), not here: `forkProfile`'s own
|
|
123
123
|
* ternary treats an empty string as "no override" and would otherwise inherit
|
|
124
124
|
* the source's version instead of clearing it. */
|
|
125
|
-
|
|
125
|
+
function buildEditOverrides(opts) {
|
|
126
126
|
const overrides = {};
|
|
127
127
|
if (opts.model !== undefined)
|
|
128
128
|
overrides.model = opts.model;
|
|
@@ -62,7 +62,6 @@ export interface InspectOptions {
|
|
|
62
62
|
routine?: string;
|
|
63
63
|
}
|
|
64
64
|
export declare function registerInspectCommand(program: Command): void;
|
|
65
|
-
export declare function inspectAction(target: string, options: InspectOptions): Promise<void>;
|
|
66
65
|
export interface RepoTarget {
|
|
67
66
|
/** Display label: 'user' | 'system' | 'project', an extra-repo alias, or a path-derived name. */
|
|
68
67
|
label: string;
|
|
@@ -134,7 +133,7 @@ export declare function pathSize(p: string): {
|
|
|
134
133
|
files: number;
|
|
135
134
|
};
|
|
136
135
|
/** Human byte size: "84 KB", "3.1 MB". */
|
|
137
|
-
|
|
136
|
+
interface ManifestSummary {
|
|
138
137
|
/** `run.<agent>.strategy` pairs from agents.yaml. */
|
|
139
138
|
strategies: Array<{
|
|
140
139
|
agent: string;
|
|
@@ -148,7 +147,7 @@ export interface ManifestSummary {
|
|
|
148
147
|
}
|
|
149
148
|
/** Parse the repo's own agents.yaml into the version pins + run strategies it declares. */
|
|
150
149
|
export declare function repoManifestSummary(root: string): ManifestSummary | null;
|
|
151
|
-
|
|
150
|
+
interface RepoGitInfo {
|
|
152
151
|
branch: string;
|
|
153
152
|
dirty: number;
|
|
154
153
|
dirtyFiles: string[];
|
package/dist/commands/inspect.js
CHANGED
|
@@ -139,7 +139,7 @@ export function registerInspectCommand(program) {
|
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
// ─── Main dispatcher ─────────────────────────────────────────────────────────
|
|
142
|
-
|
|
142
|
+
async function inspectAction(target, options) {
|
|
143
143
|
const agentKey = target.split('@')[0].toLowerCase();
|
|
144
144
|
if (!(agentKey in AGENTS)) {
|
|
145
145
|
const repo = resolveRepoTarget(target);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Delivery is routed by agent state (RUSH-1474):
|
|
5
5
|
* - running, between tool calls → mailbox spool (PreToolUse inject)
|
|
6
|
-
* - parked on AskUserQuestion with a tmux/iterm
|
|
6
|
+
* - parked on AskUserQuestion with a tmux/iterm rail → keystroke inject
|
|
7
7
|
* - parked headless (no rail) → `agents run --resume <id> -- <answer>`
|
|
8
8
|
* - cloud task → provider.message()
|
|
9
9
|
*
|
package/dist/commands/message.js
CHANGED
|
@@ -157,7 +157,7 @@ async function deliverViaHostReroute(route, text, opts) {
|
|
|
157
157
|
*/
|
|
158
158
|
const CONTROL_PLANE_NOTES = `
|
|
159
159
|
Planes (do not mix them up):
|
|
160
|
-
message / sessions inject - CONTROL a running agent (mailbox answer,
|
|
160
|
+
message / sessions inject - CONTROL a running agent (mailbox answer, terminal keystroke, or resume by runtime)
|
|
161
161
|
send / notify - DELIVER a message to a human recipient over a channel provider
|
|
162
162
|
feed post - RECORD progress / milestones (optional broadcast may call send/notify)
|
|
163
163
|
|
|
@@ -169,7 +169,7 @@ const CONTROL_PLANE_NOTES = `
|
|
|
169
169
|
export function registerMessageCommand(program) {
|
|
170
170
|
const messageCmd = program
|
|
171
171
|
.command('message <target> <text>')
|
|
172
|
-
.description('Send a message to a running or parked agent (mailbox /
|
|
172
|
+
.description('Send a message to a running or parked agent (mailbox / terminal-select / resume by runtime).')
|
|
173
173
|
.option('--from <who>', 'Label recorded as the sender of this message')
|
|
174
174
|
.option('--as <operator>', 'Verified operator id answering a high-consequence block')
|
|
175
175
|
.option('--surface <surface>', 'Surface that is sending this answer (feed, terminal, etc.)', 'cli')
|
|
@@ -222,7 +222,7 @@ export function registerMessageCommand(program) {
|
|
|
222
222
|
await deliverViaMailbox(res.id, text, block, { from: opts.from, ttlSeconds });
|
|
223
223
|
return;
|
|
224
224
|
}
|
|
225
|
-
if (route.kind === 'tmux' || route.kind === 'iterm'
|
|
225
|
+
if (route.kind === 'tmux' || route.kind === 'iterm') {
|
|
226
226
|
await deliverViaInject(route, res.id);
|
|
227
227
|
if (block) {
|
|
228
228
|
recordMessageReceipt(block.blockId, {
|
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
import type { Command } from 'commander';
|
|
11
11
|
import { type ProjectDef, type ProjectRepo } from '../lib/projects.js';
|
|
12
12
|
import { type LinearMilestone } from '../lib/linear-project-counts.js';
|
|
13
|
-
/** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
|
|
14
|
-
export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
|
|
15
13
|
/**
|
|
16
14
|
* A path-shaped `agents projects view` argument — `.`, `..`, a `~`-prefixed
|
|
17
15
|
* value, or anything containing a path separator — means "auto-detect the
|
|
@@ -20,7 +18,7 @@ export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
|
|
|
20
18
|
*/
|
|
21
19
|
export declare function looksLikePath(token: string): boolean;
|
|
22
20
|
/** Machine-readable shape of `agents projects view <path> --json`. */
|
|
23
|
-
|
|
21
|
+
interface ViewDetection {
|
|
24
22
|
/** Detected project name, or null when no definition contains the path. */
|
|
25
23
|
name: string | null;
|
|
26
24
|
/** The detected project's Linear binding; fields are null when unbound. */
|
|
@@ -121,19 +119,5 @@ export declare function formatMilestoneDue(targetDate: string, nowMs: number): s
|
|
|
121
119
|
export declare function formatMilestoneLines(milestones: LinearMilestone[], next: LinearMilestone | undefined, nowMs: number, limit: number): string[];
|
|
122
120
|
/** The `next` card line: what this project is due to hit, and how far along it is. */
|
|
123
121
|
export declare function formatNextMilestone(ms: LinearMilestone, nowMs: number): string;
|
|
124
|
-
/** Options shared by `status` and `view`. */
|
|
125
|
-
export type ProjectCardOpts = {
|
|
126
|
-
json?: boolean;
|
|
127
|
-
window?: string;
|
|
128
|
-
remote?: boolean;
|
|
129
|
-
/** Scope the fleet fan-out to specific devices; undefined = the whole fleet. */
|
|
130
|
-
deviceFilter?: string[];
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* Merge `--device a b` (variadic) and `--devices a,b,c` (comma list) into one
|
|
134
|
-
* deduped device filter; undefined when neither was given (= whole fleet).
|
|
135
|
-
*/
|
|
136
|
-
export declare function resolveDeviceFilter(device?: string[], devices?: string): string[] | undefined;
|
|
137
|
-
/** Print the YAML-side fields that sit under the shared card in `view` mode. */
|
|
138
|
-
export declare function printProjectDefinition(def: ProjectDef, name: string): void;
|
|
139
122
|
export declare function registerProjectsCommands(program: Command): void;
|
|
123
|
+
export {};
|
|
@@ -30,8 +30,9 @@ import { checkRepoSlug } from '../lib/project-doctor.js';
|
|
|
30
30
|
import { formatFocusAreas, readFocusAreas } from '../lib/project-focus.js';
|
|
31
31
|
import { formatVerdict, scheduleVerdict } from '../lib/project-schedule.js';
|
|
32
32
|
import { buildLinearImportCandidates, validateImportOpts, } from '../lib/project-import.js';
|
|
33
|
+
import { buildProjectPrs } from '../lib/github/project-prs.js';
|
|
33
34
|
/** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
|
|
34
|
-
|
|
35
|
+
const PROJECTS_NO_FANOUT_ENV = 'AGENTS_PROJECTS_LOCAL';
|
|
35
36
|
/** Max peers named in the skipped note before the rest collapse to `+N`. */
|
|
36
37
|
const SKIPPED_NAME_LIMIT = 4;
|
|
37
38
|
/**
|
|
@@ -482,7 +483,7 @@ warnWorkspaces = []) {
|
|
|
482
483
|
* Merge `--device a b` (variadic) and `--devices a,b,c` (comma list) into one
|
|
483
484
|
* deduped device filter; undefined when neither was given (= whole fleet).
|
|
484
485
|
*/
|
|
485
|
-
|
|
486
|
+
function resolveDeviceFilter(device, devices) {
|
|
486
487
|
const merged = [
|
|
487
488
|
...(device ?? []),
|
|
488
489
|
...(devices ? devices.split(',').map((s) => s.trim()).filter(Boolean) : []),
|
|
@@ -490,7 +491,7 @@ export function resolveDeviceFilter(device, devices) {
|
|
|
490
491
|
return merged.length ? [...new Set(merged)] : undefined;
|
|
491
492
|
}
|
|
492
493
|
/** Print the YAML-side fields that sit under the shared card in `view` mode. */
|
|
493
|
-
|
|
494
|
+
function printProjectDefinition(def, name) {
|
|
494
495
|
console.log();
|
|
495
496
|
if (def.root)
|
|
496
497
|
console.log(` ${chalk.dim('root')} ${def.root}`);
|
|
@@ -818,6 +819,91 @@ export function registerProjectsCommands(program) {
|
|
|
818
819
|
const mode = name ? 'view' : 'status';
|
|
819
820
|
await runProjectCard(name, opts, mode);
|
|
820
821
|
});
|
|
822
|
+
// ---- prs ----
|
|
823
|
+
const prsCmd = projects
|
|
824
|
+
.command('prs <name>')
|
|
825
|
+
.description('Every OPEN pull request across a project\'s attached repos (drafts included, no author filter).')
|
|
826
|
+
.option('--json', 'Machine-readable output (the AGI Menu contract shape)')
|
|
827
|
+
.option('--repo <owner/repo>', 'Restrict to one of the project\'s attached repos')
|
|
828
|
+
.option('--number <n>', 'Lazy detail: enrich exactly this PR with checks + reviewDecision (requires --repo)')
|
|
829
|
+
.action(async (name, opts) => {
|
|
830
|
+
const def = loadProjectDef(name);
|
|
831
|
+
if (!def) {
|
|
832
|
+
console.error(chalk.red(`No project named "${name}". List them: agents projects list`));
|
|
833
|
+
process.exit(1);
|
|
834
|
+
}
|
|
835
|
+
let number;
|
|
836
|
+
if (opts.number !== undefined) {
|
|
837
|
+
if (!opts.repo) {
|
|
838
|
+
console.error(chalk.red('--number names one PR in one repo; pass --repo <owner/repo> with it.'));
|
|
839
|
+
process.exit(1);
|
|
840
|
+
}
|
|
841
|
+
// Require the WHOLE token to be digits — Number.parseInt would accept
|
|
842
|
+
// "12junk" / "12.9" as 12 and silently query the wrong PR.
|
|
843
|
+
const raw = opts.number.trim();
|
|
844
|
+
number = /^\d+$/.test(raw) ? Number.parseInt(raw, 10) : NaN;
|
|
845
|
+
if (!Number.isSafeInteger(number) || number <= 0) {
|
|
846
|
+
console.error(chalk.red(`--number expects a positive integer, got "${opts.number}".`));
|
|
847
|
+
process.exit(1);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
let envelope;
|
|
851
|
+
try {
|
|
852
|
+
envelope = await buildProjectPrs(def, { repo: opts.repo, number }, undefined);
|
|
853
|
+
}
|
|
854
|
+
catch (e) {
|
|
855
|
+
// A restriction error (repo not attached) is a hard, up-front failure —
|
|
856
|
+
// distinct from a per-repo fetch failure, which rides in the envelope.
|
|
857
|
+
console.error(chalk.red(e instanceof Error ? e.message : String(e)));
|
|
858
|
+
process.exit(1);
|
|
859
|
+
}
|
|
860
|
+
if (opts.json) {
|
|
861
|
+
// A machine caller reads the envelope from stdout regardless of exit
|
|
862
|
+
// code: `partial` + per-repo `error` ARE the failure signal, and the
|
|
863
|
+
// successful repositories ride alongside them. So --json always exits 0
|
|
864
|
+
// (the envelope is authoritative); a native consumer must not discard
|
|
865
|
+
// stdout on a non-zero exit. Only the human path below exits non-zero.
|
|
866
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
else {
|
|
870
|
+
for (const r of envelope.repositories) {
|
|
871
|
+
if (r.error) {
|
|
872
|
+
console.log(`${chalk.bold(r.slug)} ${chalk.red(`— fetch failed: ${r.error}`)}`);
|
|
873
|
+
continue;
|
|
874
|
+
}
|
|
875
|
+
console.log(`${chalk.bold(r.slug)} ${chalk.dim(`${r.pullRequests.length} open`)}`);
|
|
876
|
+
for (const pr of r.pullRequests) {
|
|
877
|
+
const draft = pr.isDraft ? chalk.gray(' [draft]') : '';
|
|
878
|
+
console.log(` #${pr.number}${draft} ${pr.title} ${chalk.gray(`@${pr.author.login} · ${pr.headRefName}`)}`);
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
if (envelope.partial) {
|
|
882
|
+
console.log(chalk.yellow('\nSome repositories could not be fetched — the list above is incomplete.'));
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
// A partial result (any repo fetch failed) is not a clean success.
|
|
886
|
+
if (envelope.partial)
|
|
887
|
+
process.exit(1);
|
|
888
|
+
});
|
|
889
|
+
setHelpSections(prsCmd, {
|
|
890
|
+
examples: `
|
|
891
|
+
agents projects prs rush --json # every open PR across rush's repos
|
|
892
|
+
agents projects prs rush --json --repo phnx-labs/agi-cli
|
|
893
|
+
agents projects prs rush --json --repo phnx-labs/agi-cli --number 3646 # one PR, with checks + review
|
|
894
|
+
`,
|
|
895
|
+
notes: `
|
|
896
|
+
Repos come from the project definition's attached repos only (repo + repos[].slug);
|
|
897
|
+
--repo is refused unless it is one of them.
|
|
898
|
+
|
|
899
|
+
The list is read from GitHub over REST and paginated in full, drafts included,
|
|
900
|
+
with no author filter. checks and reviewDecision are null in the list; --number
|
|
901
|
+
enriches exactly that one PR against its live head SHA.
|
|
902
|
+
|
|
903
|
+
A repository whose fetch fails is reported with an error and marks the result
|
|
904
|
+
partial (JSON reports errors per repository; text mode exits non-zero).
|
|
905
|
+
`,
|
|
906
|
+
});
|
|
821
907
|
// ---- edit ----
|
|
822
908
|
projects
|
|
823
909
|
.command('edit <name>')
|
|
@@ -22,7 +22,7 @@ export interface ResourceRow {
|
|
|
22
22
|
targets: SyncTarget[];
|
|
23
23
|
buildDetail: () => string;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
interface ResourceViewOptions {
|
|
26
26
|
resourcePlural: string;
|
|
27
27
|
resourceSingular: string;
|
|
28
28
|
extraLabel?: string;
|
|
@@ -55,7 +55,7 @@ export interface ResourceViewOptions {
|
|
|
55
55
|
}
|
|
56
56
|
/** Display a resource list: interactive picker in TTY mode, plain table otherwise. */
|
|
57
57
|
export declare function showResourceList(opts: ResourceViewOptions): Promise<void>;
|
|
58
|
-
|
|
58
|
+
interface ResourceLayout {
|
|
59
59
|
mode: 'table' | 'cards';
|
|
60
60
|
nameW: number;
|
|
61
61
|
extraW: number;
|
|
@@ -77,4 +77,5 @@ export declare function resourceLayout(cols: number, o: {
|
|
|
77
77
|
}): ResourceLayout;
|
|
78
78
|
/** Build the sync targets section showing version pills grouped by agent. */
|
|
79
79
|
export declare function buildTargetsSection(targets: SyncTarget[]): string;
|
|
80
|
+
export {};
|
|
80
81
|
/** Pad a string to a fixed width, accounting for ANSI escape codes in length calculation. */
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { SessionMeta } from '../lib/session/types.js';
|
|
2
|
-
export declare const RESUME_SOURCE_ENV = "AGENTS_RESUME_SOURCE_JSON";
|
|
3
2
|
/** Inspect local archived context after the owner hop fails. Recovery still
|
|
4
3
|
* requires readable content and explicit replay consent before starting a run. */
|
|
5
4
|
export declare function resumeLocalFallbackSource(session: SessionMeta, self?: string): SessionMeta;
|
package/dist/commands/resume.js
CHANGED
|
@@ -8,7 +8,7 @@ import chalk from 'chalk';
|
|
|
8
8
|
import { resolveSessionMetadataValue } from './sessions.js';
|
|
9
9
|
import { sessionOwnerDevice, consumeResumePinned, RESUME_PINNED_ENV } from '../lib/session/resume-owner.js';
|
|
10
10
|
import { machineId } from '../lib/machine-id.js';
|
|
11
|
-
|
|
11
|
+
const RESUME_SOURCE_ENV = 'AGENTS_RESUME_SOURCE_JSON';
|
|
12
12
|
/** Inspect local archived context after the owner hop fails. Recovery still
|
|
13
13
|
* requires readable content and explicit replay consent before starting a run. */
|
|
14
14
|
export function resumeLocalFallbackSource(session, self = machineId()) {
|