@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
|
@@ -39,6 +39,7 @@ import { atomicWriteFileSync } from './fs-atomic.js';
|
|
|
39
39
|
import { machineId } from './machine-id.js';
|
|
40
40
|
import { assertValidDeviceName, assertRegistrableDeviceName } from './devices/registry.js';
|
|
41
41
|
import { migrateDeviceConfigStores } from './devices/config-migration.js';
|
|
42
|
+
import { parseAddress } from './address.js';
|
|
42
43
|
import { isAgentId } from './types.js';
|
|
43
44
|
const DEVICE_PLATFORMS = ['windows', 'linux', 'macos', 'unknown'];
|
|
44
45
|
const SSH_AUTH_METHODS = ['key', 'password'];
|
|
@@ -46,6 +47,16 @@ const SSH_AUTH_METHODS = ['key', 'password'];
|
|
|
46
47
|
const DEVICE_ROLES = ['worker', 'personal', 'desktop'];
|
|
47
48
|
/** Which devices automatic placement may pick — see the `auto.pool` key below. */
|
|
48
49
|
const AUTO_POOL_MODES = ['workers', 'all'];
|
|
50
|
+
/**
|
|
51
|
+
* A device's physical form factor (`formFactor` key) — a factual hardware fact
|
|
52
|
+
* the menu bar shows as an icon. Set explicitly per device (no inference from
|
|
53
|
+
* platform, no hardcoded device names). `unknown` is the effective default.
|
|
54
|
+
*/
|
|
55
|
+
const DEVICE_FORM_FACTORS = ['laptop', 'desktop', 'server', 'unknown'];
|
|
56
|
+
/** A validate() that accepts only one of `allowed` — the enum-string keys reuse it. */
|
|
57
|
+
function oneOf(name, allowed) {
|
|
58
|
+
return (v) => (allowed.includes(v) ? null : `${name} must be one of ${allowed.join(' | ')}.`);
|
|
59
|
+
}
|
|
49
60
|
export const CONFIG_KEYS = [
|
|
50
61
|
{
|
|
51
62
|
name: 'interactive.host',
|
|
@@ -133,6 +144,28 @@ export const CONFIG_KEYS = [
|
|
|
133
144
|
type: 'string',
|
|
134
145
|
description: 'Browser profile `agents browser start` resolves to without --profile (set via `agents browser use`).',
|
|
135
146
|
},
|
|
147
|
+
{
|
|
148
|
+
name: 'computer.host',
|
|
149
|
+
yamlKey: 'computerHost',
|
|
150
|
+
scope: 'device',
|
|
151
|
+
visibility: 'shared',
|
|
152
|
+
type: 'string',
|
|
153
|
+
description: 'The --host address (PHNX-4090) `agents computer --device <name>` forwards to the standalone engine: ' +
|
|
154
|
+
'ssh://[user@]host[:port], vnc://host[:port], or tcp://host:port. Unset falls back to the fleet ssh ' +
|
|
155
|
+
'identity (ssh://user@host resolved against the device registry).',
|
|
156
|
+
validate: (v) => {
|
|
157
|
+
try {
|
|
158
|
+
const addr = parseAddress(v);
|
|
159
|
+
if (addr.scheme !== 'ssh' && addr.scheme !== 'vnc' && addr.scheme !== 'tcp') {
|
|
160
|
+
return `computer.host speaks ssh://, vnc:// and tcp:// only (got ${addr.scheme}://).`;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return err?.message ?? String(err);
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
},
|
|
136
169
|
{
|
|
137
170
|
name: 'browser.device',
|
|
138
171
|
yamlKey: 'defaultBrowserDevice',
|
|
@@ -344,6 +377,134 @@ export const CONFIG_KEYS = [
|
|
|
344
377
|
defaultValue: false,
|
|
345
378
|
description: 'Boost this device in `--device auto` ranking (default off) — picked ahead of load-equal peers when eligible.',
|
|
346
379
|
},
|
|
380
|
+
{
|
|
381
|
+
name: 'formFactor',
|
|
382
|
+
yamlKey: 'formFactor',
|
|
383
|
+
scope: 'device',
|
|
384
|
+
visibility: 'shared',
|
|
385
|
+
type: 'string',
|
|
386
|
+
defaultValue: 'unknown',
|
|
387
|
+
description: "This device's physical form factor, a factual hardware fact the menu bar renders as an icon: " +
|
|
388
|
+
'laptop, desktop, server, or unknown. Synced fleet-wide (any box may set it for any device). Set it ' +
|
|
389
|
+
'explicitly — never inferred from the OS platform. Unset reads as `unknown`.',
|
|
390
|
+
validate: oneOf('formFactor', DEVICE_FORM_FACTORS),
|
|
391
|
+
},
|
|
392
|
+
// ─── AGI Menu preferences (PHNX-3999) ──────────────────────────────────────
|
|
393
|
+
// User-scope so one value syncs fleet-wide via `agents repo push/pull` and the
|
|
394
|
+
// native menu reads it from `agents config list --json`. Names mirror the Swift
|
|
395
|
+
// MenuPreferences local-cache keys. `config list` OMITS an unset key, so the
|
|
396
|
+
// native app falls back to its own known defaults — the defaults documented
|
|
397
|
+
// here match those, they are not substituted on read.
|
|
398
|
+
{
|
|
399
|
+
name: 'menubar.menu.defaultProject',
|
|
400
|
+
yamlKey: 'menubarMenuDefaultProject',
|
|
401
|
+
scope: 'user',
|
|
402
|
+
type: 'string',
|
|
403
|
+
description: 'AGI Menu: the project name the menu opens focused on. Unset = no default project.',
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
name: 'menubar.menu.workingRowsShown',
|
|
407
|
+
yamlKey: 'menubarMenuWorkingRowsShown',
|
|
408
|
+
scope: 'user',
|
|
409
|
+
type: 'int',
|
|
410
|
+
defaultValue: 3,
|
|
411
|
+
description: 'AGI Menu: how many working (in-progress) rows to show per group — 2, 3, or 4.',
|
|
412
|
+
validate: (v) => ([2, 3, 4].includes(v) ? null : 'menubar.menu.workingRowsShown must be 2, 3, or 4.'),
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
name: 'menubar.menu.showPreviews',
|
|
416
|
+
yamlKey: 'menubarMenuShowPreviews',
|
|
417
|
+
scope: 'user',
|
|
418
|
+
type: 'bool',
|
|
419
|
+
defaultValue: true,
|
|
420
|
+
description: 'AGI Menu: show the session preview line under each row.',
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
name: 'menubar.menu.projectPriorityFilter',
|
|
424
|
+
yamlKey: 'menubarMenuProjectPriorityFilter',
|
|
425
|
+
scope: 'user',
|
|
426
|
+
type: 'string',
|
|
427
|
+
defaultValue: 'all',
|
|
428
|
+
description: 'AGI Menu: minimum project priority shown — all, urgent, high, or medium.',
|
|
429
|
+
validate: oneOf('menubar.menu.projectPriorityFilter', ['all', 'urgent', 'high', 'medium']),
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
name: 'menubar.menu.hideCompletedMilestones',
|
|
433
|
+
yamlKey: 'menubarMenuHideCompletedMilestones',
|
|
434
|
+
scope: 'user',
|
|
435
|
+
type: 'bool',
|
|
436
|
+
defaultValue: true,
|
|
437
|
+
description: 'AGI Menu: hide milestones that are fully complete.',
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
name: 'menubar.menu.bannerWhenNeedsYou',
|
|
441
|
+
yamlKey: 'menubarMenuBannerWhenNeedsYou',
|
|
442
|
+
scope: 'user',
|
|
443
|
+
type: 'bool',
|
|
444
|
+
defaultValue: true,
|
|
445
|
+
description: 'AGI Menu: show a top banner when a session needs the operator.',
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: 'menubar.menu.includeOtherDeviceRequests',
|
|
449
|
+
yamlKey: 'menubarMenuIncludeOtherDeviceRequests',
|
|
450
|
+
scope: 'user',
|
|
451
|
+
type: 'bool',
|
|
452
|
+
defaultValue: true,
|
|
453
|
+
description: 'AGI Menu: include needs-you requests from sessions on OTHER fleet devices.',
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
name: 'menubar.menu.groupBy',
|
|
457
|
+
yamlKey: 'menubarMenuGroupBy',
|
|
458
|
+
scope: 'user',
|
|
459
|
+
type: 'string',
|
|
460
|
+
defaultValue: 'project',
|
|
461
|
+
description: 'AGI Menu: primary grouping of rows — none, project, agent, or device.',
|
|
462
|
+
validate: oneOf('menubar.menu.groupBy', ['none', 'project', 'agent', 'device']),
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
name: 'menubar.menu.thenBy',
|
|
466
|
+
yamlKey: 'menubarMenuThenBy',
|
|
467
|
+
scope: 'user',
|
|
468
|
+
type: 'string',
|
|
469
|
+
defaultValue: 'none',
|
|
470
|
+
description: 'AGI Menu: secondary grouping within each group — none, project, agent, or device.',
|
|
471
|
+
validate: oneOf('menubar.menu.thenBy', ['none', 'project', 'agent', 'device']),
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
name: 'menubar.menu.projectScope',
|
|
475
|
+
yamlKey: 'menubarMenuProjectScope',
|
|
476
|
+
scope: 'user',
|
|
477
|
+
type: 'string',
|
|
478
|
+
defaultValue: 'cycle',
|
|
479
|
+
description: 'AGI Menu: which project issues to show — the current cycle only, or all.',
|
|
480
|
+
validate: oneOf('menubar.menu.projectScope', ['cycle', 'all']),
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
name: 'menubar.menu.projectSort',
|
|
484
|
+
yamlKey: 'menubarMenuProjectSort',
|
|
485
|
+
scope: 'user',
|
|
486
|
+
type: 'string',
|
|
487
|
+
defaultValue: 'updated',
|
|
488
|
+
description: 'AGI Menu: how projects are ordered — updated, priority, or name.',
|
|
489
|
+
validate: oneOf('menubar.menu.projectSort', ['updated', 'priority', 'name']),
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
name: 'menubar.menu.ticketSort',
|
|
493
|
+
yamlKey: 'menubarMenuTicketSort',
|
|
494
|
+
scope: 'user',
|
|
495
|
+
type: 'string',
|
|
496
|
+
defaultValue: 'priority',
|
|
497
|
+
description: 'AGI Menu: how tickets within a project are ordered — priority, updated, or title.',
|
|
498
|
+
validate: oneOf('menubar.menu.ticketSort', ['priority', 'updated', 'title']),
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
name: 'menubar.menu.showPullRequests',
|
|
502
|
+
yamlKey: 'menubarMenuShowPullRequests',
|
|
503
|
+
scope: 'user',
|
|
504
|
+
type: 'bool',
|
|
505
|
+
defaultValue: true,
|
|
506
|
+
description: 'AGI Menu: show the open pull requests section for each project.',
|
|
507
|
+
},
|
|
347
508
|
];
|
|
348
509
|
/** Look up a key spec by CLI dotted name, or throw listing the known keys. */
|
|
349
510
|
/**
|
|
@@ -377,7 +538,7 @@ export function configKeySpec(name) {
|
|
|
377
538
|
return spec;
|
|
378
539
|
}
|
|
379
540
|
/** Throw when `value` does not match the key's declared type or validation. */
|
|
380
|
-
function assertValidValue(spec, value) {
|
|
541
|
+
export function assertValidValue(spec, value) {
|
|
381
542
|
switch (spec.type) {
|
|
382
543
|
case 'string':
|
|
383
544
|
if (typeof value !== 'string' || value.length === 0) {
|
|
@@ -413,7 +574,7 @@ let migrationDone = false;
|
|
|
413
574
|
* same gate bootstrap's runMigration uses (tests pin it so a fork never folds
|
|
414
575
|
* the developer's real ~/.agents as a side effect).
|
|
415
576
|
*/
|
|
416
|
-
|
|
577
|
+
function ensureDeviceConfigMigrated() {
|
|
417
578
|
if (migrationDone || process.env.AGENTS_SKIP_MIGRATION === '1')
|
|
418
579
|
return;
|
|
419
580
|
try {
|
|
@@ -499,7 +660,7 @@ function writeDeviceDoc(device, doc) {
|
|
|
499
660
|
atomicWriteFileSync(p, META_HEADER + yaml.stringify(doc));
|
|
500
661
|
}
|
|
501
662
|
/** The fleet-defaults config layer (central `fleet.defaults.config`; {} when unset). */
|
|
502
|
-
|
|
663
|
+
function readFleetConfigDefaults() {
|
|
503
664
|
const config = readMeta().fleet?.defaults?.config;
|
|
504
665
|
return config && typeof config === 'object' && !Array.isArray(config) ? config : {};
|
|
505
666
|
}
|
|
@@ -609,11 +770,6 @@ export function listConfig(opts) {
|
|
|
609
770
|
: CONFIG_KEYS;
|
|
610
771
|
return visible.map((spec) => getConfigValue(spec.name, opts));
|
|
611
772
|
}
|
|
612
|
-
/** List user-scope config keys with their values. Used to show inherited settings
|
|
613
|
-
* in per-device views without implying those keys are device-local. */
|
|
614
|
-
export function listUserConfig() {
|
|
615
|
-
return CONFIG_KEYS.filter((spec) => spec.scope === 'user').map((spec) => getConfigValue(spec.name));
|
|
616
|
-
}
|
|
617
773
|
// ─── Writes ───────────────────────────────────────────────────────────────────
|
|
618
774
|
/** The fleet manifest for a defaults write: `devices` materializes as an
|
|
619
775
|
* explicit empty map (NOT 'all') so `agents apply` targets nothing until the
|
|
@@ -91,7 +91,7 @@ export declare function markFleetRemote(cmd: string[], device: Pick<DeviceProfil
|
|
|
91
91
|
*/
|
|
92
92
|
export declare function buildInteractiveShellCommand(device: DeviceProfile, mirrorCwd: string | undefined): string | undefined;
|
|
93
93
|
/** Host-key posture for {@link buildSshInvocation}. */
|
|
94
|
-
|
|
94
|
+
interface SshHostKeyOptions {
|
|
95
95
|
/**
|
|
96
96
|
* True when the device's host key is already pinned in the managed
|
|
97
97
|
* known_hosts store — connections then verify with `StrictHostKeyChecking=yes`
|
|
@@ -162,3 +162,4 @@ export declare function buildAskpassShimBody(launch?: {
|
|
|
162
162
|
* protocol back into the CLI, which then resolves the bundle.
|
|
163
163
|
*/
|
|
164
164
|
export declare function writeAskpassShim(): string;
|
|
165
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
type DeviceDiscoveryStatus = 'approved' | 'ignored';
|
|
2
|
+
interface DeviceDiscoveryReconcileResult {
|
|
3
3
|
approved: string[];
|
|
4
4
|
ignored: string[];
|
|
5
5
|
registered: string[];
|
|
@@ -40,3 +40,4 @@ export declare function loadDeviceDiscoveryPolicies(): Map<string, DeviceDiscove
|
|
|
40
40
|
export declare function reconcileDeviceDiscoveryPolicies(): Promise<DeviceDiscoveryReconcileResult>;
|
|
41
41
|
/** Complete reconciliation from real `tailscale status --json` output. */
|
|
42
42
|
export declare function registerApprovedDevicesFromTailscale(json: string, approved: string[], ignored: string[], missing: string[]): Promise<DeviceDiscoveryReconcileResult>;
|
|
43
|
+
export {};
|
|
@@ -244,7 +244,7 @@ export function remediationFor(finding) {
|
|
|
244
244
|
case 'content-drift':
|
|
245
245
|
case 'stale':
|
|
246
246
|
// doctor diagnoses; `agents sync` fixes (the superset of the old
|
|
247
|
-
// `
|
|
247
|
+
// `agents sync`). A bare `agents sync <agent>` hits only the default
|
|
248
248
|
// version, so an agent-only row collapsed across versions must ask for
|
|
249
249
|
// @all to reach every one it covers.
|
|
250
250
|
if (agent && version)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Serve a cached snapshot without recomputing while it is younger than this. */
|
|
2
2
|
export declare const DOCTOR_OVERVIEW_FRESH_MS = 90000;
|
|
3
3
|
/** Injectable IO + clock so tests exercise the real fs at a temp dir, no mocks. */
|
|
4
|
-
|
|
4
|
+
interface DoctorOverviewCacheDeps {
|
|
5
5
|
/** Cache directory (default: the real `~/.agents/.cache`). */
|
|
6
6
|
dir?: string;
|
|
7
7
|
/** Clock (default: {@link Date.now}). */
|
|
@@ -29,7 +29,7 @@ export declare function invalidateDoctorOverviewCache(deps?: DoctorOverviewCache
|
|
|
29
29
|
* the way out. Call `release()` in a `finally` so a compute that throws still
|
|
30
30
|
* frees the lock promptly (idempotent).
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
interface OverviewGate {
|
|
33
33
|
cached: string | null;
|
|
34
34
|
release?: () => void;
|
|
35
35
|
}
|
|
@@ -50,3 +50,4 @@ export declare function enterDoctorOverviewGate(opts?: {
|
|
|
50
50
|
forceRefresh?: boolean;
|
|
51
51
|
freshMs?: number;
|
|
52
52
|
}, deps?: DoctorOverviewCacheDeps): Promise<OverviewGate>;
|
|
53
|
+
export {};
|
|
@@ -111,7 +111,7 @@ export interface FleetDivergence {
|
|
|
111
111
|
/** Human-readable one-liner, ready for the warnings list. */
|
|
112
112
|
message: string;
|
|
113
113
|
}
|
|
114
|
-
|
|
114
|
+
interface FleetDivergenceReport {
|
|
115
115
|
/** Name of the device used as the comparison baseline (the local machine). */
|
|
116
116
|
baseline: string;
|
|
117
117
|
divergences: FleetDivergence[];
|
|
@@ -132,3 +132,4 @@ export interface FleetDivergenceReport {
|
|
|
132
132
|
* JSON output — and the tests — are stable.
|
|
133
133
|
*/
|
|
134
134
|
export declare function compareFleetInventories(devices: DeviceInventory[], baselineName: string): FleetDivergenceReport;
|
|
135
|
+
export {};
|
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
import type { DeviceProfile, DeviceRegistry } from './registry.js';
|
|
11
11
|
import type { DeviceStats } from './health.js';
|
|
12
12
|
export type FleetSkipReason = 'offline' | 'no-address';
|
|
13
|
-
/** npm dist-tags / semver pins only — rejects shell metacharacters. */
|
|
14
|
-
export declare const FLEET_VERSION_RE: RegExp;
|
|
15
13
|
export interface FleetTarget {
|
|
16
14
|
device: DeviceProfile;
|
|
17
15
|
/** When set, this device is not reached (skip with reason). */
|
|
@@ -112,7 +110,7 @@ export declare function runLocalCommand(cmd: string[], opts?: {
|
|
|
112
110
|
* cannot inject shell metacharacters into the remote command line.
|
|
113
111
|
*/
|
|
114
112
|
export declare function upgradeCommand(version?: string): string[];
|
|
115
|
-
|
|
113
|
+
interface RunFleetOptions {
|
|
116
114
|
/**
|
|
117
115
|
* Name of THIS machine. Its target runs the command **locally** (no ssh) — a
|
|
118
116
|
* box can't reliably ssh to itself and doesn't need to. Omit to ssh every
|
|
@@ -132,7 +130,7 @@ export interface RunFleetOptions {
|
|
|
132
130
|
* recorded as `failed` so one bad device never aborts the rest.
|
|
133
131
|
*/
|
|
134
132
|
export declare function runFleet(targets: FleetTarget[], cmd: string[], opts?: RunFleetOptions): FleetRunResult[];
|
|
135
|
-
|
|
133
|
+
interface FanOutDeviceOptions {
|
|
136
134
|
/**
|
|
137
135
|
* Per-device deadline in milliseconds. When set, any probe that does not
|
|
138
136
|
* settle within this window is abandoned via `Promise.race` against a
|
|
@@ -149,3 +147,4 @@ export interface FanOutDeviceOptions {
|
|
|
149
147
|
}
|
|
150
148
|
/** Run one async probe per device in parallel, preserving input order. */
|
|
151
149
|
export declare function fanOutDevices<T, Target extends FanOutDeviceTarget = FanOutDeviceTarget>(targets: Target[], probe: (target: Target) => Promise<T>, opts?: FanOutDeviceOptions): Promise<FanOutDeviceResult<T>[]>;
|
|
150
|
+
export {};
|
|
@@ -11,7 +11,7 @@ import { spawnSync } from 'child_process';
|
|
|
11
11
|
import { isSelfHost } from './self-host.js';
|
|
12
12
|
import { buildSshInvocation, sshTargetFor, writeAskpassShim } from './connect.js';
|
|
13
13
|
/** npm dist-tags / semver pins only — rejects shell metacharacters. */
|
|
14
|
-
|
|
14
|
+
const FLEET_VERSION_RE = /^[A-Za-z0-9._-]+$/;
|
|
15
15
|
/**
|
|
16
16
|
* Classify each registered device for a fleet operation.
|
|
17
17
|
*
|
|
@@ -51,7 +51,7 @@ export interface HostHarnessResult {
|
|
|
51
51
|
skipped?: string;
|
|
52
52
|
}
|
|
53
53
|
/** An account collapsed across the installs on one host that share it. */
|
|
54
|
-
|
|
54
|
+
interface AccountGroup {
|
|
55
55
|
/** Account display label, or null for the signed-out bucket. */
|
|
56
56
|
account: string | null;
|
|
57
57
|
/** Distinct agent ids using this account, sorted. */
|
|
@@ -130,7 +130,7 @@ export declare function renderHarnessMatrix(results: HostHarnessResult[]): strin
|
|
|
130
130
|
* account (installs sharing it collapsed), showing which harnesses use it. Pure.
|
|
131
131
|
*/
|
|
132
132
|
export declare function renderAccountsMatrix(results: HostHarnessResult[]): string[];
|
|
133
|
-
|
|
133
|
+
interface AccountFleetMatrixRow {
|
|
134
134
|
harness: AgentId;
|
|
135
135
|
name: string | null;
|
|
136
136
|
identityLabel: string;
|
|
@@ -147,3 +147,4 @@ export interface AccountFleetMatrixRow {
|
|
|
147
147
|
export declare function renderAccountFleetMatrix(rows: AccountFleetMatrixRow[], opts?: {
|
|
148
148
|
uncoveredDevices?: string[];
|
|
149
149
|
}): string[];
|
|
150
|
+
export {};
|
|
@@ -52,7 +52,7 @@ export interface FleetHealthRow {
|
|
|
52
52
|
* Undefined when no row has been published for the host yet. */
|
|
53
53
|
agents?: FleetAgentCounts;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
interface FleetWarning {
|
|
56
56
|
kind: 'unreachable' | 'drift' | 'cli' | 'version-skew' | 'divergence';
|
|
57
57
|
devices: string[];
|
|
58
58
|
message: string;
|
|
@@ -82,7 +82,7 @@ export declare function freshnessFooter(rows: FleetHealthRow[], now?: number): s
|
|
|
82
82
|
export declare function shortVersion(version: string | null | undefined): string;
|
|
83
83
|
/** OS bucket label for grouping. Anything unrecognized falls under "Other". */
|
|
84
84
|
export declare function platformGroupLabel(platform: string | undefined): 'macOS' | 'Linux' | 'Windows' | 'Other';
|
|
85
|
-
|
|
85
|
+
interface FleetAttentionItem {
|
|
86
86
|
/** Leading mark: `○` offline, `⚠` config/CLI/version issue. */
|
|
87
87
|
glyph: 'offline' | 'warn';
|
|
88
88
|
subject: string;
|
|
@@ -106,3 +106,4 @@ export declare function renderFleetSummary(report: FleetHealthReport, opts?: {
|
|
|
106
106
|
self?: string;
|
|
107
107
|
now?: number;
|
|
108
108
|
}): string[];
|
|
109
|
+
export {};
|
|
@@ -49,13 +49,6 @@ export declare function probeBudgetMs(device: DeviceProfile): number;
|
|
|
49
49
|
export declare const WIN_PROBE_TIMEOUT_MS = 6000;
|
|
50
50
|
/** One-shot remote snapshot: load, memory, core count, then root filesystem. */
|
|
51
51
|
export declare const PROBE_SNIPPET = "uptime; echo ---AGSTAT---; (vm_stat 2>/dev/null || cat /proc/meminfo 2>/dev/null); echo ---AGSTAT---; (nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null); echo ---AGSTAT---; df -Pk / 2>/dev/null | tail -1";
|
|
52
|
-
/** Windows equivalent, one labeled line via CIM. PowerShell 5.1-safe: no `||`
|
|
53
|
-
* chaining, plain string concatenation. `LoadPercentage` is $null on some
|
|
54
|
-
* hosts/VMs, which concatenates to an empty field — the parser treats that as
|
|
55
|
-
* "no load signal" and headroom falls back to memory pressure alone.
|
|
56
|
-
* wrapRemoteCommand base64-encodes this for powershell-shell devices, so the
|
|
57
|
-
* quoting survives ssh intact. */
|
|
58
|
-
export declare const WIN_PROBE_SNIPPET = "$os = Get-CimInstance Win32_OperatingSystem; $cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average; $disk = Get-CimInstance Win32_LogicalDisk -Filter \"DeviceID='C:'\"; Write-Output ('AGWINSTAT load=' + $cpu + ' freeKb=' + $os.FreePhysicalMemory + ' totalKb=' + $os.TotalVisibleMemorySize + ' ncpu=' + $env:NUMBER_OF_PROCESSORS + ' diskFreeKb=' + ($disk.FreeSpace / 1KB) + ' diskTotalKb=' + ($disk.Size / 1KB))";
|
|
59
52
|
export declare function localProbeInvocation(platform: NodeJS.Platform): {
|
|
60
53
|
file: string;
|
|
61
54
|
args: string[];
|
|
@@ -114,7 +107,7 @@ export declare function parseProbeOutput(host: string, stdout: string, fetchedAt
|
|
|
114
107
|
* (e.g. CIM unavailable) keeps `reachable: true` — ssh answered — with no
|
|
115
108
|
* numbers, mirroring how garbage POSIX output degrades. */
|
|
116
109
|
export declare function parseWinProbeOutput(host: string, stdout: string, fetchedAt: number): DeviceStats;
|
|
117
|
-
|
|
110
|
+
interface FleetCapacity {
|
|
118
111
|
reachable: number;
|
|
119
112
|
cores: number;
|
|
120
113
|
memTotalBytes: number;
|
|
@@ -63,7 +63,7 @@ export const PROBE_SNIPPET = `uptime; echo ${SEP}; (vm_stat 2>/dev/null || cat /
|
|
|
63
63
|
* "no load signal" and headroom falls back to memory pressure alone.
|
|
64
64
|
* wrapRemoteCommand base64-encodes this for powershell-shell devices, so the
|
|
65
65
|
* quoting survives ssh intact. */
|
|
66
|
-
|
|
66
|
+
const WIN_PROBE_SNIPPET = `$os = Get-CimInstance Win32_OperatingSystem; $cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average; $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'"; Write-Output ('AGWINSTAT load=' + $cpu + ' freeKb=' + $os.FreePhysicalMemory + ' totalKb=' + $os.TotalVisibleMemorySize + ' ncpu=' + $env:NUMBER_OF_PROCESSORS + ' diskFreeKb=' + ($disk.FreeSpace / 1KB) + ' diskTotalKb=' + ($disk.Size / 1KB))`;
|
|
67
67
|
export function localProbeInvocation(platform) {
|
|
68
68
|
return platform === 'win32'
|
|
69
69
|
? { file: 'powershell', args: ['-NoProfile', '-Command', WIN_PROBE_SNIPPET] }
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/** The reserved `--device` value meaning the box the human is at. */
|
|
2
|
-
export declare const INTERACTIVE_DEVICE_SENTINEL = "interactive";
|
|
3
1
|
/** True when a host flag value is the interactive sentinel. */
|
|
4
2
|
export declare function isDeviceInteractive(value: string | undefined | null): boolean;
|
|
5
3
|
/**
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import { getConfigValue } from '../device-config.js';
|
|
20
20
|
import { RESERVED_DEVICE_NAMES } from './registry.js';
|
|
21
21
|
/** The reserved `--device` value meaning the box the human is at. */
|
|
22
|
-
|
|
22
|
+
const INTERACTIVE_DEVICE_SENTINEL = 'interactive';
|
|
23
23
|
/** True when a host flag value is the interactive sentinel. */
|
|
24
24
|
export function isDeviceInteractive(value) {
|
|
25
25
|
return typeof value === 'string' && value.trim().toLowerCase() === INTERACTIVE_DEVICE_SENTINEL;
|
|
@@ -3,8 +3,6 @@ import type { DeviceProfile } from './registry.js';
|
|
|
3
3
|
export declare function managedKnownHostsPath(): string;
|
|
4
4
|
/** Ensure the parent directory of the managed store exists (mode 0700). */
|
|
5
5
|
export declare function ensureManagedKnownHostsDir(file?: string): void;
|
|
6
|
-
/** Read the managed store, or '' when it does not exist yet. */
|
|
7
|
-
export declare function readManagedKnownHosts(file?: string): string;
|
|
8
6
|
/**
|
|
9
7
|
* True if `host` has at least one pinned key line in `content`. Pure (content
|
|
10
8
|
* in) so the match logic is unit-testable without touching disk. Matching is
|
|
@@ -44,7 +42,7 @@ export declare function hostKeyCheckingOpts(pinned: boolean, file?: string): str
|
|
|
44
42
|
* contract is unit-testable without spawning ssh-keyscan.
|
|
45
43
|
*/
|
|
46
44
|
export declare function newKnownHostsLines(existing: string, scanned: string): string[];
|
|
47
|
-
|
|
45
|
+
interface PinResult {
|
|
48
46
|
/** True if the host is pinned in the managed store after this call. */
|
|
49
47
|
pinned: boolean;
|
|
50
48
|
/** How many new key lines were appended. */
|
|
@@ -58,20 +56,4 @@ export interface PinResult {
|
|
|
58
56
|
* network (the spawn stays in `pinHostKey`).
|
|
59
57
|
*/
|
|
60
58
|
export declare function recordScannedKeys(host: string, scanned: string, file?: string): PinResult;
|
|
61
|
-
|
|
62
|
-
* `ssh-keyscan` a host at a trusted moment and append any new key lines to the
|
|
63
|
-
* managed store, idempotently. This is the explicit pin path; the implicit one
|
|
64
|
-
* is a normal `accept-new` connection whose learned key lands in the same store.
|
|
65
|
-
* Returns whether the host is pinned afterward.
|
|
66
|
-
*
|
|
67
|
-
* Host-name-agnostic: it scans whatever address it is handed, so it also pins a
|
|
68
|
-
* host `agents ssh` can't reach — notably a bare `~/.ssh/config` `Host` alias,
|
|
69
|
-
* which is not a registered device. The `--copy-creds` gate (commands/exec.ts)
|
|
70
|
-
* calls this for exactly that case so the credential copy is usable for
|
|
71
|
-
* ssh-config-alias hosts (RUSH-1767).
|
|
72
|
-
*/
|
|
73
|
-
export declare function pinHostKey(host: string, opts?: {
|
|
74
|
-
file?: string;
|
|
75
|
-
timeoutMs?: number;
|
|
76
|
-
port?: number;
|
|
77
|
-
}): PinResult;
|
|
59
|
+
export {};
|
|
@@ -32,7 +32,7 @@ export function ensureManagedKnownHostsDir(file = managedKnownHostsPath()) {
|
|
|
32
32
|
fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
33
33
|
}
|
|
34
34
|
/** Read the managed store, or '' when it does not exist yet. */
|
|
35
|
-
|
|
35
|
+
function readManagedKnownHosts(file = managedKnownHostsPath()) {
|
|
36
36
|
try {
|
|
37
37
|
return fs.readFileSync(file, 'utf-8');
|
|
38
38
|
}
|
|
@@ -135,7 +135,7 @@ export function recordScannedKeys(host, scanned, file = managedKnownHostsPath())
|
|
|
135
135
|
* calls this for exactly that case so the credential copy is usable for
|
|
136
136
|
* ssh-config-alias hosts (RUSH-1767).
|
|
137
137
|
*/
|
|
138
|
-
|
|
138
|
+
function pinHostKey(host, opts = {}) {
|
|
139
139
|
// Same injection guard as sshExec: a host starting with `-` (or carrying shell
|
|
140
140
|
// metacharacters) must never reach ssh-keyscan as a bare argv where it could
|
|
141
141
|
// be parsed as a flag.
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* ranker ({@link autoLaunchPreferredSet}, applied by `pickBestDevice`).
|
|
31
31
|
*/
|
|
32
32
|
import { type AutoLaunchPreference, type AutoPoolMode, type ConfiguredDeviceRole } from '../device-config.js';
|
|
33
|
-
|
|
33
|
+
interface AutoPoolOptions {
|
|
34
34
|
/** Pool mode; defaults to the configured `auto.pool`. */
|
|
35
35
|
mode?: AutoPoolMode;
|
|
36
36
|
/** Configured roles by device name; defaults to the fleet-shared block. */
|
|
@@ -77,3 +77,4 @@ export declare function listWorkerDevices(opts?: Pick<AutoPoolOptions, 'roles'>)
|
|
|
77
77
|
* callers can append it unconditionally.
|
|
78
78
|
*/
|
|
79
79
|
export declare function describeAutoPool(opts?: AutoPoolOptions): string;
|
|
80
|
+
export {};
|
|
@@ -3,14 +3,14 @@ import { type DeviceProfile } from './registry.js';
|
|
|
3
3
|
export { splitUserHost };
|
|
4
4
|
/** A dialable peer: the ssh target, the machine id used to tag its rows, a
|
|
5
5
|
* display name, and the OS family that picks the remote shell dialect. */
|
|
6
|
-
|
|
6
|
+
interface ResolvedSshTarget {
|
|
7
7
|
target: string;
|
|
8
8
|
machine: string;
|
|
9
9
|
name: string;
|
|
10
10
|
os?: string;
|
|
11
11
|
extraSshArgs?: string[];
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
interface ResolvedExplicitTargetSet {
|
|
14
14
|
targets: ResolvedSshTarget[];
|
|
15
15
|
unresolved: string[];
|
|
16
16
|
}
|
|
@@ -43,7 +43,7 @@ import { runLocalCommand, runOnDevice, type FleetRunResult, type FleetTarget } f
|
|
|
43
43
|
* falling back to the unresolved path where `readlink -f` is unavailable.
|
|
44
44
|
*/
|
|
45
45
|
export declare function rolloutVerifyCommand(): string[];
|
|
46
|
-
|
|
46
|
+
interface RolloutProbe {
|
|
47
47
|
/** Path the box's own `agents` resolves to, symlinks followed. */
|
|
48
48
|
resolvedPath?: string;
|
|
49
49
|
/** Version that resolved copy reports. */
|
|
@@ -81,7 +81,7 @@ export declare function isRolloutSuccess(verdict: RolloutVerdict): boolean;
|
|
|
81
81
|
export declare function resolveRolloutTarget(explicitVersion: string | undefined, probes: RolloutProbe[]): string | undefined;
|
|
82
82
|
/** Classify one box's probe against the rollout target. */
|
|
83
83
|
export declare function classifyRolloutVerification(probe: RolloutProbe, targetVersion: string | undefined): RolloutVerification;
|
|
84
|
-
|
|
84
|
+
interface VerifyFleetRolloutOptions {
|
|
85
85
|
/** Name of THIS machine; its target is probed locally, mirroring `runFleet`. */
|
|
86
86
|
self?: string;
|
|
87
87
|
/** Injectable ssh runner (tests). */
|
|
@@ -99,3 +99,4 @@ export interface VerifyFleetRolloutOptions {
|
|
|
99
99
|
* "we could not check" and "it is upgraded" are different answers.
|
|
100
100
|
*/
|
|
101
101
|
export declare function verifyFleetRollout(targets: FleetTarget[], results: FleetRunResult[], explicitVersion: string | undefined, opts?: VerifyFleetRolloutOptions): Map<string, RolloutVerification>;
|
|
102
|
+
export {};
|
|
@@ -42,7 +42,7 @@ export declare function writeStatsCache(entries: Record<string, DeviceStats>): v
|
|
|
42
42
|
export declare function removeStatsCacheEntry(name: string): void;
|
|
43
43
|
/** Immutable cache pruning primitive, exported for lifecycle regression tests. */
|
|
44
44
|
export declare function pruneStatsCache(entries: Record<string, DeviceStats>, name: string): Record<string, DeviceStats>;
|
|
45
|
-
|
|
45
|
+
interface FleetStatsResult {
|
|
46
46
|
/** name → stats for every requested device (cache-served + freshly probed). */
|
|
47
47
|
stats: Map<string, DeviceStats>;
|
|
48
48
|
/** Oldest `fetchedAt` among the returned rows, or null when empty. Drives the
|
|
@@ -51,7 +51,7 @@ export interface FleetStatsResult {
|
|
|
51
51
|
/** True when at least one row was served from cache rather than probed this call. */
|
|
52
52
|
servedFromCache: boolean;
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
interface LoadFleetStatsOptions {
|
|
55
55
|
/** Skip the cache and live-probe every device (the `--refresh`/`--live` path). */
|
|
56
56
|
forceRefresh?: boolean;
|
|
57
57
|
/** Device name of THIS machine — always probed locally (no ssh), never cached-served. */
|
|
@@ -70,3 +70,4 @@ export interface LoadFleetStatsOptions {
|
|
|
70
70
|
* `reachable: false` row exactly as the live probe does.
|
|
71
71
|
*/
|
|
72
72
|
export declare function loadFleetStats(devices: DeviceProfile[], opts?: LoadFleetStatsOptions): Promise<FleetStatsResult>;
|
|
73
|
+
export {};
|
|
@@ -34,8 +34,8 @@ export declare function withDefaultUser(input: DeviceInput, prevUser: string | u
|
|
|
34
34
|
* through the menu-bar "NEW DEVICES → Register / Ignore" gate instead of
|
|
35
35
|
* silently landing in the registry.
|
|
36
36
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
type DeviceSyncMode = 'bootstrap' | 'refresh';
|
|
38
|
+
interface DeviceSyncResult {
|
|
39
39
|
/** False when discovery could not run (e.g. tailscale absent) in soft mode. */
|
|
40
40
|
ok: boolean;
|
|
41
41
|
/** Number of tailscale nodes upserted into the registry. */
|
|
@@ -89,7 +89,7 @@ export declare function runDeviceSync(opts?: {
|
|
|
89
89
|
soft?: boolean;
|
|
90
90
|
mode?: DeviceSyncMode;
|
|
91
91
|
}): Promise<DeviceSyncResult>;
|
|
92
|
-
|
|
92
|
+
interface EnsureDevicesResult {
|
|
93
93
|
/** Names newly resolved from Tailscale and upserted into the registry. */
|
|
94
94
|
registered: string[];
|
|
95
95
|
/** Names that could not be resolved (not on the tailnet / tailscale absent). */
|
|
@@ -102,7 +102,7 @@ export interface EnsureDevicesResult {
|
|
|
102
102
|
* registered names need nothing. Pure so the bootstrap's filter matrix is
|
|
103
103
|
* unit-testable without a tailnet or registry writes.
|
|
104
104
|
*/
|
|
105
|
-
|
|
105
|
+
interface WantedPartition {
|
|
106
106
|
toRegister: string[];
|
|
107
107
|
unresolved: string[];
|
|
108
108
|
}
|
|
@@ -127,10 +127,11 @@ export declare function ensureDevicesRegistered(wantedNames: string[]): Promise<
|
|
|
127
127
|
* => remove from the registry if it was there, and ignore it so auto-sync never
|
|
128
128
|
* re-adds it.
|
|
129
129
|
*/
|
|
130
|
-
|
|
130
|
+
interface DeviceReconciliation {
|
|
131
131
|
toRegister: string[];
|
|
132
132
|
toUnignore: string[];
|
|
133
133
|
toRemove: string[];
|
|
134
134
|
toIgnore: string[];
|
|
135
135
|
}
|
|
136
136
|
export declare function planDeviceReconciliation(allNames: Iterable<string>, keep: Iterable<string>, registered: Iterable<string>, ignored: Iterable<string>): DeviceReconciliation;
|
|
137
|
+
export {};
|