@phnx-labs/agents-cli 1.22.113 → 1.22.115
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 +139 -0
- package/README.md +32 -113
- package/dist/browser.js +0 -0
- package/dist/cli/command-registry.d.ts +0 -60
- package/dist/cli/command-registry.js +57 -66
- package/dist/commands/accounts.d.ts +3 -77
- package/dist/commands/accounts.js +13 -366
- package/dist/commands/apply.d.ts +0 -4
- package/dist/commands/apply.js +3 -3
- package/dist/commands/audit.js +1 -1
- package/dist/commands/auth.js +0 -2
- 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/browser.d.ts +53 -0
- package/dist/commands/browser.js +199 -9
- 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/doctor.d.ts +2 -3
- package/dist/commands/doctor.js +0 -11
- package/dist/commands/events.d.ts +1 -3
- package/dist/commands/events.js +4 -7
- package/dist/commands/exec.d.ts +0 -1
- package/dist/commands/exec.js +2 -7
- package/dist/commands/feed-watch.js +52 -8
- 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/focus.js +1 -1
- package/dist/commands/go.d.ts +0 -17
- package/dist/commands/go.js +2 -19
- 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/logs.js +1 -1
- package/dist/commands/mcp.js +8 -83
- package/dist/commands/memory.js +4 -47
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/plugins.js +1 -93
- package/dist/commands/projects.d.ts +2 -18
- package/dist/commands/projects.js +89 -3
- package/dist/commands/repo.js +0 -44
- package/dist/commands/resource-view.d.ts +3 -2
- package/dist/commands/resume.d.ts +0 -1
- package/dist/commands/resume.js +5 -2
- 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 +23 -4
- package/dist/commands/send.d.ts +4 -4
- package/dist/commands/send.js +6 -51
- package/dist/commands/sessions-backfill.d.ts +2 -35
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-backup-setup.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 -6
- package/dist/commands/sessions-share.d.ts +5 -7
- package/dist/commands/sessions-share.js +98 -49
- 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 +13 -104
- package/dist/commands/sessions.js +11 -18
- package/dist/commands/setup-browser.js +18 -2
- package/dist/commands/setup-computer.js +20 -6
- package/dist/commands/setup-mine.d.ts +0 -6
- package/dist/commands/setup-mine.js +1 -1
- package/dist/commands/setup-secrets.js +24 -4
- package/dist/commands/setup-terminal.d.ts +3 -0
- package/dist/commands/setup-terminal.js +22 -0
- package/dist/commands/setup.d.ts +3 -4
- package/dist/commands/setup.js +21 -11
- package/dist/commands/skills.js +0 -8
- package/dist/commands/ssh.d.ts +6 -0
- package/dist/commands/ssh.js +92 -233
- package/dist/commands/sync.js +14 -5
- 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 +2 -2
- package/dist/commands/tmux.d.ts +1 -1
- package/dist/commands/tmux.js +1 -1
- package/dist/commands/traces.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/add.d.ts +0 -5
- package/dist/lib/accounts/add.js +1 -7
- 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/artifacts-client.d.ts +20 -0
- package/dist/lib/artifacts-client.js +46 -0
- 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 +7 -7
- 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 +59 -4
- package/dist/lib/browser/runtime-state.js +99 -18
- package/dist/lib/browser/service.d.ts +4 -4
- package/dist/lib/browser/service.js +21 -1
- 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 +4 -2
- 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/dispatch.js +1 -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/cloudflare/creds.d.ts +10 -0
- package/dist/lib/cloudflare/creds.js +46 -0
- package/dist/lib/cloudflare/provision.d.ts +35 -0
- package/dist/lib/cloudflare/provision.js +144 -0
- 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/sessions-list.d.ts +55 -0
- package/dist/lib/computer/sessions-list.js +168 -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 -4
- package/dist/lib/daemon/daemon.js +9 -2
- package/dist/lib/daemon/feed-stream-service.d.ts +23 -0
- package/dist/lib/daemon/feed-stream-service.js +40 -0
- 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-services.d.ts +3 -2
- package/dist/lib/daemon-services.js +5 -0
- 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 +51 -6
- package/dist/lib/devices/connect.js +169 -21
- 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 +2 -1
- 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 +1 -1
- 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 +2 -2
- package/dist/lib/feed/activity.d.ts +8 -33
- package/dist/lib/feed/activity.js +8 -8
- package/dist/lib/feed/answer.d.ts +3 -2
- package/dist/lib/feed/attention.js +5 -1
- package/dist/lib/feed/envelope.d.ts +79 -0
- package/dist/lib/feed/envelope.js +23 -0
- package/dist/lib/feed/events.d.ts +8 -47
- package/dist/lib/feed/events.js +9 -141
- package/dist/lib/feed/feed.d.ts +9 -42
- package/dist/lib/feed/feed.js +1 -60
- package/dist/lib/feed/hub-server.d.ts +86 -0
- package/dist/lib/feed/hub-server.js +334 -0
- package/dist/lib/feed/hub.d.ts +95 -0
- package/dist/lib/feed/hub.js +255 -0
- package/dist/lib/feed/pr-status.d.ts +0 -2
- package/dist/lib/feed/pr-status.js +1 -5
- package/dist/lib/feed/tool-activity.d.ts +108 -0
- package/dist/lib/feed/tool-activity.js +313 -0
- package/dist/lib/feed/tools.d.ts +198 -0
- package/dist/lib/feed/tools.js +265 -0
- package/dist/lib/feed/watch.d.ts +51 -52
- package/dist/lib/feed/watch.js +147 -17
- 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 +1 -1
- 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 +3 -2
- package/dist/lib/format.js +1 -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 -81
- package/dist/lib/git.js +2 -199
- 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 -24
- package/dist/lib/hosts/dispatch.js +2 -2
- 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 +55 -4
- package/dist/lib/hosts/remote-cmd.js +125 -8
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +2 -0
- package/dist/lib/hosts/remote-cmd.test-fixture.js +22 -0
- 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/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/mcp.js +17 -11
- 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/probe.d.ts +4 -1
- package/dist/lib/probe.js +5 -2
- 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/pwsh.d.ts +33 -0
- package/dist/lib/pwsh.js +56 -0
- package/dist/lib/reconcile-and-repair.d.ts +5 -4
- package/dist/lib/redact.d.ts +15 -1
- package/dist/lib/redact.js +105 -3
- package/dist/lib/refresh-coordinator.d.ts +2 -1
- package/dist/lib/refresh.d.ts +9 -4
- package/dist/lib/refresh.js +92 -72
- 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-cli.d.ts +11 -0
- package/dist/lib/secrets-cli.js +30 -0
- package/dist/lib/secrets-client.d.ts +0 -17
- package/dist/lib/secrets-client.js +7 -28
- 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/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/detached.d.ts +9 -1
- package/dist/lib/session/detached.js +31 -2
- package/dist/lib/session/digest.d.ts +2 -2
- package/dist/lib/session/digest.js +1 -1
- 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 +2 -1
- 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/presence.d.ts +2 -1
- 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 +26 -7
- package/dist/lib/session/remote/peer-stream.js +35 -8
- 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 +2 -7
- package/dist/lib/session/remote/watch.js +3 -3
- 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 +2 -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 +8 -8
- package/dist/lib/session/sync/backend.js +3 -3
- 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/provision.d.ts +1 -1
- package/dist/lib/session/sync/provision.js +2 -2
- 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/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/sessions-client.js +0 -3
- package/dist/lib/settings-manifest.d.ts +2 -1
- package/dist/lib/setup-tool-install.d.ts +3 -0
- package/dist/lib/setup-tool-install.js +26 -0
- package/dist/lib/setup-tool-status.d.ts +22 -0
- package/dist/lib/setup-tool-status.js +215 -0
- package/dist/lib/share-runtime.d.ts +11 -0
- package/dist/lib/share-runtime.js +63 -0
- package/dist/lib/shim-heal.d.ts +1 -5
- package/dist/lib/shim-heal.js +0 -6
- package/dist/lib/smart-launch.d.ts +5 -10
- package/dist/lib/smart-launch.js +4 -12
- package/dist/lib/snapshot.d.ts +3 -2
- package/dist/lib/ssh-exec.d.ts +49 -4
- package/dist/lib/ssh-exec.js +119 -0
- 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.d.ts +6 -4
- package/dist/lib/startup/command-registry.js +11 -8
- package/dist/lib/state.d.ts +1 -3
- package/dist/lib/state.js +3 -6
- package/dist/lib/storage/selection.d.ts +2 -2
- package/dist/lib/storage/selection.js +2 -2
- 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 +9 -3
- package/dist/lib/sync-umbrella.js +18 -10
- 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/backend.d.ts +1 -2
- package/dist/lib/traces/backend.js +1 -2
- 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 +2 -4
- package/dist/lib/traces/provision.js +3 -3
- 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 +11 -9
- 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 +3 -5
- package/scripts/postinstall.js +5 -4
- package/dist/commands/artifacts-setup.d.ts +0 -53
- package/dist/commands/artifacts-setup.js +0 -161
- package/dist/commands/artifacts.d.ts +0 -18
- package/dist/commands/artifacts.js +0 -58
- package/dist/commands/attach.d.ts +0 -12
- package/dist/commands/attach.js +0 -86
- package/dist/commands/auth-mint.d.ts +0 -12
- package/dist/commands/auth-mint.js +0 -108
- package/dist/commands/pty.d.ts +0 -20
- package/dist/commands/pty.js +0 -404
- package/dist/commands/reconnect.d.ts +0 -46
- package/dist/commands/reconnect.js +0 -115
- package/dist/commands/share.d.ts +0 -293
- package/dist/commands/share.js +0 -1424
- 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/lib/share/analytics.d.ts +0 -13
- package/dist/lib/share/analytics.js +0 -45
- package/dist/lib/share/backend.d.ts +0 -120
- package/dist/lib/share/backend.js +0 -176
- package/dist/lib/share/capture.d.ts +0 -31
- package/dist/lib/share/capture.js +0 -174
- package/dist/lib/share/config.d.ts +0 -72
- package/dist/lib/share/config.js +0 -211
- package/dist/lib/share/delete.d.ts +0 -122
- package/dist/lib/share/delete.js +0 -173
- package/dist/lib/share/html.d.ts +0 -22
- package/dist/lib/share/html.js +0 -88
- package/dist/lib/share/http-error.d.ts +0 -52
- package/dist/lib/share/http-error.js +0 -65
- package/dist/lib/share/og.d.ts +0 -25
- package/dist/lib/share/og.js +0 -84
- package/dist/lib/share/provision.d.ts +0 -127
- package/dist/lib/share/provision.js +0 -285
- package/dist/lib/share/publish.d.ts +0 -388
- package/dist/lib/share/publish.js +0 -818
- package/dist/lib/share/worker-template.d.ts +0 -27
- package/dist/lib/share/worker-template.js +0 -2424
- package/dist/lib/storage/index.d.ts +0 -14
- package/dist/lib/storage/index.js +0 -14
- package/dist/lib/storage/visibility.d.ts +0 -82
- package/dist/lib/storage/visibility.js +0 -99
|
@@ -45,7 +45,7 @@ export interface CrabboxBox {
|
|
|
45
45
|
/** Idle-timeout window in seconds, or null. */
|
|
46
46
|
idleTimeoutSecs: number | null;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
interface CrabboxOptions {
|
|
49
49
|
/**
|
|
50
50
|
* Name of a secrets bundle whose env (e.g. `HCLOUD_TOKEN`) crabbox needs to
|
|
51
51
|
* reach its cloud provider. Resolved via agents-cli's own keychain-backed
|
|
@@ -63,21 +63,8 @@ export interface CrabboxOptions {
|
|
|
63
63
|
}
|
|
64
64
|
/** Locate the crabbox binary, or throw an actionable error. */
|
|
65
65
|
export declare function findCrabbox(): string;
|
|
66
|
-
/**
|
|
67
|
-
* Env keys that mark a secrets bundle as usable for `--lease` — the provider
|
|
68
|
-
* tokens crabbox reads to reach a cloud API. Matching a bundle needs only its
|
|
69
|
-
* declared key NAMES; only the matched key's VALUE is ever injected (see
|
|
70
|
-
* `crabboxEnv`), so an auto-detected bundle can't leak its other secrets.
|
|
71
|
-
*/
|
|
72
|
-
export declare const LEASE_PROVIDER_TOKEN_KEYS: string[];
|
|
73
66
|
/** The first bundle that declares a provider token key, or undefined. Pure over `bundles`. */
|
|
74
67
|
export declare function pickLeaseBundleFromList(bundles: SecretsBundle[]): string | undefined;
|
|
75
|
-
/**
|
|
76
|
-
* Env keys a bundle may use for a Tailscale auth key. crabbox reads
|
|
77
|
-
* `CRABBOX_TAILSCALE_AUTH_KEY` to join a leased box to the tailnet; we accept the
|
|
78
|
-
* common alternate names too and rename to that canonical key on injection.
|
|
79
|
-
*/
|
|
80
|
-
export declare const TAILSCALE_AUTH_KEY_NAMES: string[];
|
|
81
68
|
/** The first bundle + key that declares a Tailscale auth key, or undefined. Pure over `bundles`. */
|
|
82
69
|
export declare function pickTailscaleBundleFromList(bundles: SecretsBundle[]): {
|
|
83
70
|
name: string;
|
|
@@ -86,7 +73,7 @@ export declare function pickTailscaleBundleFromList(bundles: SecretsBundle[]): {
|
|
|
86
73
|
/** Test seam: drop every crabboxEnv secrets memo so each test resolves fresh. */
|
|
87
74
|
export declare function resetCrabboxSecretsMemosForTest(): void;
|
|
88
75
|
/** A resolved lease bundle: its name, plus (auto-detect only) the exact keys to inject. */
|
|
89
|
-
|
|
76
|
+
interface ResolvedLeaseBundle {
|
|
90
77
|
name: string;
|
|
91
78
|
/** When set (auto-detect), inject ONLY these keys — not the whole bundle. */
|
|
92
79
|
keys?: string[];
|
|
@@ -122,7 +109,7 @@ export declare function crabboxFind(slug: string, opts?: CrabboxOptions): Crabbo
|
|
|
122
109
|
* (mirrors scripts/sandbox.sh's `box_ready`).
|
|
123
110
|
*/
|
|
124
111
|
export declare function crabboxStatusReady(slug: string, opts?: CrabboxOptions): boolean;
|
|
125
|
-
|
|
112
|
+
interface PoolMatchOptions {
|
|
126
113
|
/**
|
|
127
114
|
* Lease pool label (shared default, or `.crabbox.yaml leaseProfile:` opt-in;
|
|
128
115
|
* see config.ts). Both sides normalize an unset profile to
|
|
@@ -149,7 +136,7 @@ export interface PoolMatchOptions {
|
|
|
149
136
|
* run may be mid-boot on it, and crabbox's idle timeout reaps genuine duds.
|
|
150
137
|
*/
|
|
151
138
|
export declare function poolReusableBoxes(boxes: CrabboxBox[], opts?: PoolMatchOptions): CrabboxBox[];
|
|
152
|
-
|
|
139
|
+
interface WarmupOptions extends CrabboxOptions {
|
|
153
140
|
class?: string;
|
|
154
141
|
profile?: string;
|
|
155
142
|
/** Provision web code-server capability on the box. */
|
|
@@ -181,7 +168,7 @@ export declare function crabboxWaitReady(slug: string, opts?: CrabboxOptions & {
|
|
|
181
168
|
intervalMs?: number;
|
|
182
169
|
sleep?: (ms: number) => Promise<void>;
|
|
183
170
|
}): Promise<CrabboxBox>;
|
|
184
|
-
|
|
171
|
+
interface CrabboxRunOptions extends CrabboxOptions {
|
|
185
172
|
/** Called with each chunk of combined stdout/stderr as it streams. */
|
|
186
173
|
onData?: (chunk: string) => void;
|
|
187
174
|
/** Force a full remote resync before running. */
|
|
@@ -189,12 +176,6 @@ export interface CrabboxRunOptions extends CrabboxOptions {
|
|
|
189
176
|
/** Refresh an existing lease with this idle window before running. */
|
|
190
177
|
renewIdleTimeoutSecs?: number;
|
|
191
178
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Run `remoteCmd` on the leased box via `crabbox run` (crabbox syncs the dirty
|
|
194
|
-
* checkout and owns the SSH). Streams combined output; resolves with the remote
|
|
195
|
-
* exit code (or null if crabbox itself failed to dispatch).
|
|
196
|
-
*/
|
|
197
|
-
export declare function crabboxRun(slug: string, remoteCmd: string, opts?: CrabboxRunOptions): Promise<number | null>;
|
|
198
179
|
/**
|
|
199
180
|
* Upload `script` to the box via `crabbox run --script-stdin` and run it.
|
|
200
181
|
*
|
|
@@ -251,3 +232,4 @@ export declare function reapOrphans(opts?: CrabboxOptions & {
|
|
|
251
232
|
candidates: CrabboxBox[];
|
|
252
233
|
reaped: string[];
|
|
253
234
|
};
|
|
235
|
+
export {};
|
package/dist/lib/crabbox/cli.js
CHANGED
|
@@ -29,7 +29,7 @@ export function findCrabbox() {
|
|
|
29
29
|
* declared key NAMES; only the matched key's VALUE is ever injected (see
|
|
30
30
|
* `crabboxEnv`), so an auto-detected bundle can't leak its other secrets.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
const LEASE_PROVIDER_TOKEN_KEYS = ['HCLOUD_TOKEN', 'AWS_ACCESS_KEY_ID', 'DIGITALOCEAN_TOKEN', 'DO_TOKEN'];
|
|
33
33
|
/** The first bundle that declares a provider token key, or undefined. Pure over `bundles`. */
|
|
34
34
|
export function pickLeaseBundleFromList(bundles) {
|
|
35
35
|
for (const b of bundles) {
|
|
@@ -43,7 +43,7 @@ export function pickLeaseBundleFromList(bundles) {
|
|
|
43
43
|
* `CRABBOX_TAILSCALE_AUTH_KEY` to join a leased box to the tailnet; we accept the
|
|
44
44
|
* common alternate names too and rename to that canonical key on injection.
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
const TAILSCALE_AUTH_KEY_NAMES = ['CRABBOX_TAILSCALE_AUTH_KEY', 'TAILSCALE_AUTH_KEY', 'TS_AUTHKEY'];
|
|
47
47
|
/** The first bundle + key that declares a Tailscale auth key, or undefined. Pure over `bundles`. */
|
|
48
48
|
export function pickTailscaleBundleFromList(bundles) {
|
|
49
49
|
for (const b of bundles) {
|
|
@@ -447,32 +447,6 @@ export async function crabboxWaitReady(slug, opts = {}) {
|
|
|
447
447
|
}
|
|
448
448
|
throw new Error(`crabbox box "${slug}" did not become ready within ${Math.round(timeoutMs / 1000)}s (state: ${last?.state ?? 'gone'}).`);
|
|
449
449
|
}
|
|
450
|
-
/**
|
|
451
|
-
* Run `remoteCmd` on the leased box via `crabbox run` (crabbox syncs the dirty
|
|
452
|
-
* checkout and owns the SSH). Streams combined output; resolves with the remote
|
|
453
|
-
* exit code (or null if crabbox itself failed to dispatch).
|
|
454
|
-
*/
|
|
455
|
-
export function crabboxRun(slug, remoteCmd, opts = {}) {
|
|
456
|
-
findCrabbox();
|
|
457
|
-
const args = ['run', '--id', slug, '--reclaim'];
|
|
458
|
-
if (opts.fullResync)
|
|
459
|
-
args.push('--full-resync');
|
|
460
|
-
args.push('--', 'bash', '-lc', remoteCmd);
|
|
461
|
-
return new Promise((resolve) => {
|
|
462
|
-
const proc = spawn('crabbox', args, { env: crabboxEnv(opts), stdio: ['ignore', 'pipe', 'pipe'] });
|
|
463
|
-
const pump = (chunk) => {
|
|
464
|
-
const s = chunk.toString('utf-8');
|
|
465
|
-
if (opts.onData)
|
|
466
|
-
opts.onData(s);
|
|
467
|
-
else
|
|
468
|
-
process.stdout.write(s);
|
|
469
|
-
};
|
|
470
|
-
proc.stdout.on('data', pump);
|
|
471
|
-
proc.stderr.on('data', pump);
|
|
472
|
-
proc.on('error', () => resolve(null));
|
|
473
|
-
proc.on('close', (code) => resolve(code));
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
450
|
/**
|
|
477
451
|
* Upload `script` to the box via `crabbox run --script-stdin` and run it.
|
|
478
452
|
*
|
|
@@ -33,7 +33,7 @@ import type { AgentId } from '../types.js';
|
|
|
33
33
|
import { type CrabboxBox } from './cli.js';
|
|
34
34
|
import { type DetectedRuntime } from './runtimes.js';
|
|
35
35
|
/** Phase signal for a lease run, so the command layer can drive a progress UI. */
|
|
36
|
-
|
|
36
|
+
type LeasePhase = {
|
|
37
37
|
kind: 'warmup';
|
|
38
38
|
backend?: string;
|
|
39
39
|
} | {
|
|
@@ -46,7 +46,7 @@ export type LeasePhase = {
|
|
|
46
46
|
} | {
|
|
47
47
|
kind: 'teardown';
|
|
48
48
|
};
|
|
49
|
-
|
|
49
|
+
interface LeaseRunOptions {
|
|
50
50
|
agent: string;
|
|
51
51
|
prompt: string;
|
|
52
52
|
mode?: string;
|
|
@@ -110,7 +110,7 @@ export interface LeaseDispatchProfile {
|
|
|
110
110
|
provider?: string;
|
|
111
111
|
fallbackModel?: string;
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
interface LeaseRunResult {
|
|
114
114
|
box: CrabboxBox;
|
|
115
115
|
exitCode: number | null;
|
|
116
116
|
toreDown: boolean;
|
|
@@ -126,8 +126,6 @@ export interface LeaseRunResult {
|
|
|
126
126
|
export declare const LEASE_BOOTSTRAP_FAILED_CODE = 97;
|
|
127
127
|
/** Build a shell-safe, collision-resistant workspace id for one lease run. */
|
|
128
128
|
export declare function leaseWorkspaceId(repoRoot: string, startedAtMs?: number, pid?: number): string;
|
|
129
|
-
/** Isolated box-home path for one run, relative to the shared box user's home. */
|
|
130
|
-
export declare function leaseHomeDir(workspaceId: string): string;
|
|
131
129
|
/**
|
|
132
130
|
* Build the single bootstrap script run on the box: ensure agents-cli, install
|
|
133
131
|
* the picked runtime CLIs, write their credentials, run the agent, then shred
|
|
@@ -136,7 +134,7 @@ export declare function leaseHomeDir(workspaceId: string): string;
|
|
|
136
134
|
export declare function buildBootstrapScript(opts: LeaseRunOptions): string;
|
|
137
135
|
/** Untouched-for-this-long ⇒ no active run holds the box, so an expired one is a stray. */
|
|
138
136
|
export declare const STRAY_GRACE_SECS = 600;
|
|
139
|
-
|
|
137
|
+
interface StrayMatchOptions {
|
|
140
138
|
/** Pool the lease belongs to (defaults to DEFAULT_CRABBOX_PROFILE). */
|
|
141
139
|
profile?: string;
|
|
142
140
|
/** Network mode of the lease (default 'public'); a box is partitioned by it. */
|
|
@@ -160,3 +158,4 @@ export interface StrayMatchOptions {
|
|
|
160
158
|
*/
|
|
161
159
|
export declare function isExpiredPoolStray(box: CrabboxBox, opts: StrayMatchOptions): boolean;
|
|
162
160
|
export declare function leaseAndRun(opts: LeaseRunOptions): Promise<LeaseRunResult>;
|
|
161
|
+
export {};
|
|
@@ -55,7 +55,7 @@ export function leaseWorkspaceId(repoRoot, startedAtMs = Date.now(), pid = proce
|
|
|
55
55
|
return `${safeRepo}-${startedAtMs.toString(36)}-${pid.toString(36)}`;
|
|
56
56
|
}
|
|
57
57
|
/** Isolated box-home path for one run, relative to the shared box user's home. */
|
|
58
|
-
|
|
58
|
+
function leaseHomeDir(workspaceId) {
|
|
59
59
|
return `lease-homes/${workspaceId}`;
|
|
60
60
|
}
|
|
61
61
|
function profileRemotePath(name) {
|
|
@@ -61,7 +61,7 @@ export declare function createSpinner(opts?: {
|
|
|
61
61
|
enabled?: boolean;
|
|
62
62
|
intervalMs?: number;
|
|
63
63
|
}): Spinner;
|
|
64
|
-
|
|
64
|
+
interface LeaseOutputRouter {
|
|
65
65
|
/** Feed a raw chunk of the crabbox run's combined stdout/stderr. */
|
|
66
66
|
push(chunk: string): void;
|
|
67
67
|
/** Flush any buffered partial line (call once the stream closes). */
|
|
@@ -91,3 +91,4 @@ export declare function createLeaseOutputRouter(cb: {
|
|
|
91
91
|
marker?: string;
|
|
92
92
|
now?: () => number;
|
|
93
93
|
}): LeaseOutputRouter;
|
|
94
|
+
export {};
|
|
@@ -22,9 +22,7 @@
|
|
|
22
22
|
* ride the box-side bootstrap script (that only echoes the `copy-setup` progress
|
|
23
23
|
* sentinel — see `buildBootstrapScript`).
|
|
24
24
|
*/
|
|
25
|
-
|
|
26
|
-
export declare const REMOTE_AGENTS_DIR = ".agents/";
|
|
27
|
-
export interface CopySetupOptions {
|
|
25
|
+
interface CopySetupOptions {
|
|
28
26
|
/** crabbox box slug to push to — its per-lease ssh key does the auth. */
|
|
29
27
|
slug: string;
|
|
30
28
|
/** Secrets bundle whose env the ssh/rsync children inherit (crabbox parity). */
|
|
@@ -90,3 +88,4 @@ export declare function buildSetupRsyncArgs(opts: {
|
|
|
90
88
|
* the returned exit codes.
|
|
91
89
|
*/
|
|
92
90
|
export declare function copySetupToBox(opts: CopySetupOptions): Promise<CopySetupResult>;
|
|
91
|
+
export {};
|
|
@@ -29,7 +29,7 @@ import * as path from 'path';
|
|
|
29
29
|
import { getUserAgentsDir } from '../state.js';
|
|
30
30
|
import { crabboxEnv, crabboxSshArgv } from './cli.js';
|
|
31
31
|
/** Remote path (relative to the box user's home) the tracked config lands in. */
|
|
32
|
-
|
|
32
|
+
const REMOTE_AGENTS_DIR = '.agents/';
|
|
33
33
|
/** Top-level paths that must never be pushed, even if somehow tracked. */
|
|
34
34
|
const NEVER_COPY = new Set(['.claude', '.claude.json']);
|
|
35
35
|
/**
|
|
@@ -28,7 +28,7 @@ export declare const USAGE_STATE_TICK_MS = 60000;
|
|
|
28
28
|
export declare const AUTH_STATE_TICK_MS: number;
|
|
29
29
|
type AccountAuthRefresh = (signal: AbortSignal) => Promise<AuthProbeRow[] | void>;
|
|
30
30
|
type AccountTransitionNotifier = (transition: DeadAccountTransition) => Promise<void>;
|
|
31
|
-
|
|
31
|
+
interface DeadAccountTransition {
|
|
32
32
|
agent: AuthProbeRow['agent'];
|
|
33
33
|
/** Display label (email / account name) — presentation only, never a key. */
|
|
34
34
|
account: string;
|
|
@@ -35,7 +35,7 @@ import type { DaemonServiceId } from '../daemon-services.js';
|
|
|
35
35
|
* through here, so what ships is what is asserted.
|
|
36
36
|
*/
|
|
37
37
|
export declare function buildAttentionNotification(item: AttentionItem, session: ActiveSession): DesktopNotification | undefined;
|
|
38
|
-
|
|
38
|
+
interface AttentionNotifyServiceOptions {
|
|
39
39
|
/** Live-session source (default: the real active-session query). Injected in tests. */
|
|
40
40
|
getSessions?: () => Promise<ActiveSession[]>;
|
|
41
41
|
/** Notifier (default: the real desktop notifier). Injected in tests to capture posts. */
|
|
@@ -67,3 +67,4 @@ export declare class AttentionNotifyService extends BasePeriodicService {
|
|
|
67
67
|
private markNotified;
|
|
68
68
|
private pruneLedger;
|
|
69
69
|
}
|
|
70
|
+
export {};
|
|
@@ -24,7 +24,7 @@ import type { DaemonServiceId } from '../daemon-services.js';
|
|
|
24
24
|
* recovering from a wedge or an OS suspend the process survived.
|
|
25
25
|
*/
|
|
26
26
|
export declare const CATCHUP_TICK_MS: number;
|
|
27
|
-
|
|
27
|
+
interface CatchupServiceDeps {
|
|
28
28
|
/**
|
|
29
29
|
* Whether the routine scheduler is currently booted. When false (the
|
|
30
30
|
* `scheduler.enabled` gate is off), the pass no-ops — there is nothing to
|
|
@@ -49,3 +49,4 @@ export declare class CatchupService extends BasePeriodicService {
|
|
|
49
49
|
protected onStop(): Promise<void>;
|
|
50
50
|
protected onTick(_ctx: DaemonContext, signal: AbortSignal): Promise<void>;
|
|
51
51
|
}
|
|
52
|
+
export {};
|
|
@@ -67,7 +67,7 @@ export declare const DAEMON_AUTOSTART_FAILURE_LIMIT = 5;
|
|
|
67
67
|
* !running + enabled → boot (gate flipped on since boot)
|
|
68
68
|
* !running + !enabled → none (stay dark)
|
|
69
69
|
*/
|
|
70
|
-
|
|
70
|
+
type SchedulerGateTransition = 'reload' | 'stop' | 'boot' | 'none';
|
|
71
71
|
export declare function schedulerGateTransition(running: boolean, enabled: boolean): SchedulerGateTransition;
|
|
72
72
|
/**
|
|
73
73
|
* Wrap an async routine so it runs AT MOST ONCE, however many callers fire it.
|
|
@@ -104,7 +104,7 @@ export declare function readDaemonPid(daemonDir?: string): number | null;
|
|
|
104
104
|
export declare function writeDaemonPid(pid: number): void;
|
|
105
105
|
/** Remove the daemon PID file. */
|
|
106
106
|
export declare function removeDaemonPid(): void;
|
|
107
|
-
|
|
107
|
+
interface DaemonHeartbeat {
|
|
108
108
|
lastTick: string;
|
|
109
109
|
pid: number;
|
|
110
110
|
}
|
|
@@ -409,7 +409,7 @@ export declare function startDetached(opts?: StartDetachedOptions): {
|
|
|
409
409
|
* One piece of daemon state that a graceful `handleShutdown` removes and an
|
|
410
410
|
* escalated kill leaves behind (RUSH-2421).
|
|
411
411
|
*/
|
|
412
|
-
|
|
412
|
+
interface StopResidueArtifact {
|
|
413
413
|
label: string;
|
|
414
414
|
present: boolean;
|
|
415
415
|
/** The file names a live owner, including a stopped target that survived. */
|
|
@@ -438,7 +438,7 @@ export declare function stopResidueArtifacts(stoppedPid: number | null, survivor
|
|
|
438
438
|
* in-flight routine children that survive deliberately (SING-11a) and are
|
|
439
439
|
* reported, never killed.
|
|
440
440
|
*/
|
|
441
|
-
|
|
441
|
+
interface DaemonStopResult {
|
|
442
442
|
ok: boolean;
|
|
443
443
|
stoppedPid: number | null;
|
|
444
444
|
escalated: boolean;
|
|
@@ -878,7 +878,7 @@ export async function runDaemon() {
|
|
|
878
878
|
assertTestDaemonHome();
|
|
879
879
|
// Lifecycle readers and launchers do not run services. Load their code only
|
|
880
880
|
// in the daemon process, before it claims or publishes lifecycle state.
|
|
881
|
-
const [{ BrowserService }, { SessionIndexService }, { SessionSummarizerService }, { SessionTitleService }, { MonitorEngineService }, { AccountUsageService, AccountAuthService }, { CatchupService }, { BrowserIPCService }, { WatchdogService }, { DeviceProbeService }, { SelfHealService }, { SelfUpdateService }, { HarnessUpdateService }, { AuthSyncService }, { UsageSyncService }, { StateDirCheckService }, { SessionStateService }, { AttentionNotifyService }, { WebhookReceiverService }, { HeartbeatService }, { TmuxReapService }, { BrowserTaskReapService },] = await Promise.all([
|
|
881
|
+
const [{ BrowserService }, { SessionIndexService }, { SessionSummarizerService }, { SessionTitleService }, { MonitorEngineService }, { AccountUsageService, AccountAuthService }, { CatchupService }, { BrowserIPCService }, { WatchdogService }, { DeviceProbeService }, { SelfHealService }, { SelfUpdateService }, { HarnessUpdateService }, { AuthSyncService }, { UsageSyncService }, { StateDirCheckService }, { SessionStateService }, { FeedStreamService }, { AttentionNotifyService }, { WebhookReceiverService }, { HeartbeatService }, { TmuxReapService }, { BrowserTaskReapService },] = await Promise.all([
|
|
882
882
|
import('../browser/service.js'),
|
|
883
883
|
import('./session-index-service.js'),
|
|
884
884
|
import('./session-summarizer-service.js'),
|
|
@@ -896,6 +896,7 @@ export async function runDaemon() {
|
|
|
896
896
|
import('./usage-sync-service.js'),
|
|
897
897
|
import('./state-dir-check-service.js'),
|
|
898
898
|
import('./session-state-service.js'),
|
|
899
|
+
import('./feed-stream-service.js'),
|
|
899
900
|
import('./attention-notify-service.js'),
|
|
900
901
|
import('./webhook-receiver-service.js'),
|
|
901
902
|
import('./heartbeat-service.js'),
|
|
@@ -1021,6 +1022,12 @@ export async function runDaemon() {
|
|
|
1021
1022
|
}
|
|
1022
1023
|
else
|
|
1023
1024
|
log('INFO', 'Live session-state service disabled');
|
|
1025
|
+
// The shared feed fan-out. Registered even when disabled at boot so a later
|
|
1026
|
+
// `agents daemon services enable feed-stream` brings it up over SIGHUP, the
|
|
1027
|
+
// same live-transition shape browser IPC uses.
|
|
1028
|
+
supervisor.register(new FeedStreamService(), { enabled: isEnabled('feed-stream') });
|
|
1029
|
+
if (!isEnabled('feed-stream'))
|
|
1030
|
+
log('INFO', 'Shared feed stream service disabled');
|
|
1024
1031
|
const monitorEngineSvc = new MonitorEngineService();
|
|
1025
1032
|
if (isEnabled('monitors'))
|
|
1026
1033
|
supervisor.register(monitorEngineSvc);
|
|
@@ -1226,7 +1233,7 @@ export async function runDaemon() {
|
|
|
1226
1233
|
}
|
|
1227
1234
|
catch { /* best-effort */ }
|
|
1228
1235
|
// RUSH-2288: the pre-spawn failure (e.g. auth_failed) is exactly the one the
|
|
1229
|
-
// per-routine `agents
|
|
1236
|
+
// per-routine `agents send --to owner` prompt can never send — its agent never ran —
|
|
1230
1237
|
// so the daemon reaches the owner directly.
|
|
1231
1238
|
void notifyOwnerRoutineStartFailed(config, message)
|
|
1232
1239
|
.then((r) => {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared feed collector's lifecycle as a `DaemonService`.
|
|
3
|
+
*
|
|
4
|
+
* WHY THE DAEMON OWNS IT. Dialing every peer over ssh and holding those
|
|
5
|
+
* connections open is an ACTION on the fleet, so by the repo's one-scheduler /
|
|
6
|
+
* one-executor rule it belongs to the daemon and not to a UI surface. Before
|
|
7
|
+
* this service, every consumer of `agents feed watch --json` ran its own
|
|
8
|
+
* `watchFleetFeed`, which is N ssh children per peer for N readers. The daemon
|
|
9
|
+
* runs one, and the readers attach over a socket (`feed/hub-server.ts`).
|
|
10
|
+
*
|
|
11
|
+
* The server binds on start, but the fan-out itself is DEMAND-GATED by the hub:
|
|
12
|
+
* with no client connected there is no `watchFleetFeed`, so an idle box holds no
|
|
13
|
+
* peer connections — the same idle-cost rule `SessionStateService` follows for
|
|
14
|
+
* its gather.
|
|
15
|
+
*/
|
|
16
|
+
import { BaseDaemonService, type DaemonContext } from './service.js';
|
|
17
|
+
import type { DaemonServiceId } from '../daemon-services.js';
|
|
18
|
+
export declare class FeedStreamService extends BaseDaemonService {
|
|
19
|
+
readonly id: DaemonServiceId;
|
|
20
|
+
private server;
|
|
21
|
+
protected onStart(ctx: DaemonContext): Promise<void>;
|
|
22
|
+
protected onStop(): Promise<void>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared feed collector's lifecycle as a `DaemonService`.
|
|
3
|
+
*
|
|
4
|
+
* WHY THE DAEMON OWNS IT. Dialing every peer over ssh and holding those
|
|
5
|
+
* connections open is an ACTION on the fleet, so by the repo's one-scheduler /
|
|
6
|
+
* one-executor rule it belongs to the daemon and not to a UI surface. Before
|
|
7
|
+
* this service, every consumer of `agents feed watch --json` ran its own
|
|
8
|
+
* `watchFleetFeed`, which is N ssh children per peer for N readers. The daemon
|
|
9
|
+
* runs one, and the readers attach over a socket (`feed/hub-server.ts`).
|
|
10
|
+
*
|
|
11
|
+
* The server binds on start, but the fan-out itself is DEMAND-GATED by the hub:
|
|
12
|
+
* with no client connected there is no `watchFleetFeed`, so an idle box holds no
|
|
13
|
+
* peer connections — the same idle-cost rule `SessionStateService` follows for
|
|
14
|
+
* its gather.
|
|
15
|
+
*/
|
|
16
|
+
import { BaseDaemonService } from './service.js';
|
|
17
|
+
import { FeedHub } from '../feed/hub.js';
|
|
18
|
+
import { FeedHubServer } from '../feed/hub-server.js';
|
|
19
|
+
import { sharedLocalFeedHub, watchFleetFeed } from '../feed/watch.js';
|
|
20
|
+
export class FeedStreamService extends BaseDaemonService {
|
|
21
|
+
id = 'feed-stream';
|
|
22
|
+
server = null;
|
|
23
|
+
async onStart(ctx) {
|
|
24
|
+
// Two collectors, one socket. The fleet hub holds one ssh child per peer plus
|
|
25
|
+
// this box's rows; the local hub is this box ONLY and cannot fan out, so a
|
|
26
|
+
// reader that wants just this machine never causes a peer dial. They are
|
|
27
|
+
// separate hubs rather than one filtered stream because demand must be
|
|
28
|
+
// separate too: a local-only reader must not start the fleet fan-out.
|
|
29
|
+
const fleet = new FeedHub({ watch: watchFleetFeed });
|
|
30
|
+
this.server = new FeedHubServer(fleet, undefined, sharedLocalFeedHub());
|
|
31
|
+
await this.server.start();
|
|
32
|
+
ctx.log('INFO', 'Feed stream hub listening (fan-out starts on first reader)');
|
|
33
|
+
}
|
|
34
|
+
async onStop() {
|
|
35
|
+
const server = this.server;
|
|
36
|
+
this.server = null;
|
|
37
|
+
if (server)
|
|
38
|
+
await server.stop();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -33,24 +33,7 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import { BasePeriodicService, type DaemonContext } from './service.js';
|
|
35
35
|
import type { DaemonServiceId } from '../daemon-services.js';
|
|
36
|
-
|
|
37
|
-
* Cancellation deadline per tick. A real pass can touch several installations, each an npm
|
|
38
|
-
* install (`INSTALL_TIMEOUT_MS` = 120s in strategies.ts) plus two launch
|
|
39
|
-
* probes; 10 minutes leaves headroom for a handful of harnesses in one pass
|
|
40
|
-
* while staying comfortably under the 15-minute cadence above.
|
|
41
|
-
*/
|
|
42
|
-
export declare const HARNESS_UPDATE_DEADLINE_MS: number;
|
|
43
|
-
/**
|
|
44
|
-
* How long to wait for the child to exit AFTER a cooperative cancel before
|
|
45
|
-
* force-reaping it as an orphan backstop. The child's own work is bounded — one
|
|
46
|
-
* npm install (`INSTALL_TIMEOUT_MS` = 120s in strategies.ts) plus two launch
|
|
47
|
-
* probes, then a fast synchronous swap — so a healthy child stops well within
|
|
48
|
-
* this window. A slow staging/postinstall can also exhaust it, but a delivered
|
|
49
|
-
* cancel prevents that stage from committing. The backstop kills the process
|
|
50
|
-
* group on POSIX and the worker on Windows; the tick reports a failure.
|
|
51
|
-
*/
|
|
52
|
-
export declare const HARNESS_UPDATE_CANCEL_GRACE_MS: number;
|
|
53
|
-
export interface HarnessUpdateOutcome {
|
|
36
|
+
interface HarnessUpdateOutcome {
|
|
54
37
|
ran: boolean;
|
|
55
38
|
reason?: string;
|
|
56
39
|
exitCode?: number | null;
|
|
@@ -72,7 +55,6 @@ export interface CooperativeChildResult {
|
|
|
72
55
|
export interface HarnessUpdateDeps {
|
|
73
56
|
runAutoUpdatePass(signal: AbortSignal): Promise<CooperativeChildResult>;
|
|
74
57
|
}
|
|
75
|
-
export declare function defaultHarnessUpdateDeps(): HarnessUpdateDeps;
|
|
76
58
|
/**
|
|
77
59
|
* Spawn `command args` as a child over a Node IPC channel and drive it to a TRUE
|
|
78
60
|
* completion, requesting a cooperative stop (never a kill) when `signal` aborts —
|
|
@@ -108,3 +90,4 @@ export declare class HarnessUpdateService extends BasePeriodicService {
|
|
|
108
90
|
protected onStop(): Promise<void>;
|
|
109
91
|
protected onTick(ctx: DaemonContext, signal: AbortSignal): Promise<void>;
|
|
110
92
|
}
|
|
93
|
+
export {};
|
|
@@ -43,7 +43,7 @@ const HARNESS_UPDATE_TICK_MS = 15 * 60_000;
|
|
|
43
43
|
* probes; 10 minutes leaves headroom for a handful of harnesses in one pass
|
|
44
44
|
* while staying comfortably under the 15-minute cadence above.
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
const HARNESS_UPDATE_DEADLINE_MS = 10 * 60_000;
|
|
47
47
|
/** First tick fires 60 seconds after daemon boot — long enough for shims/PATH to settle, short enough that a fresh box doesn't wait a full interval for its first check. */
|
|
48
48
|
const HARNESS_UPDATE_STARTUP_DELAY_MS = 60_000;
|
|
49
49
|
/**
|
|
@@ -55,8 +55,8 @@ const HARNESS_UPDATE_STARTUP_DELAY_MS = 60_000;
|
|
|
55
55
|
* cancel prevents that stage from committing. The backstop kills the process
|
|
56
56
|
* group on POSIX and the worker on Windows; the tick reports a failure.
|
|
57
57
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
const HARNESS_UPDATE_CANCEL_GRACE_MS = 3 * 60_000;
|
|
59
|
+
function defaultHarnessUpdateDeps() {
|
|
60
60
|
return {
|
|
61
61
|
runAutoUpdatePass(signal) {
|
|
62
62
|
const { command, args } = getCliLaunch([HARNESS_UPDATE_CHILD_CMD], getAgentsBinPath());
|
|
@@ -54,7 +54,7 @@ export declare function activeRunSkipStreak(runs: RunMeta[]): number;
|
|
|
54
54
|
*/
|
|
55
55
|
export declare function launcherClaimPid(): number | null;
|
|
56
56
|
/** How a routine attempt was triggered, plus the schedule slot it belongs to. */
|
|
57
|
-
|
|
57
|
+
interface RoutineTrigger {
|
|
58
58
|
kind: NonNullable<RunMeta['triggerKind']>;
|
|
59
59
|
/** UTC fire time for a schedule/catchup attempt; keys the single-fire slot claim. */
|
|
60
60
|
scheduledFor?: Date | string;
|
|
@@ -103,7 +103,7 @@ export declare function buildJobCommand(config: JobConfig, resolvedPrompt: strin
|
|
|
103
103
|
export declare function snapshotRoutineTranscriptBase(meta: Pick<RunMeta, 'jobName' | 'agent' | 'version'>, runDir: string, overlayHome?: string): void;
|
|
104
104
|
export declare function archiveRoutineTranscripts(meta: Pick<RunMeta, 'jobName' | 'runId' | 'agent' | 'version'>, runDir: string, overlayHome?: string): void;
|
|
105
105
|
/** Pre-flight version/account selection for a routine job. */
|
|
106
|
-
|
|
106
|
+
interface RoutineLaunchPlan {
|
|
107
107
|
/** Ordered attempts: primary first, then same-agent failover accounts. */
|
|
108
108
|
chain: FallbackEntry[];
|
|
109
109
|
/** Full rotation result when strategy selected among healthy accounts; null when pinned. */
|
|
@@ -219,7 +219,7 @@ declare function executeJobOnHost(config: JobConfig, opts: {
|
|
|
219
219
|
* observes the live running→terminal transition (the monitor tick would already
|
|
220
220
|
* see a finalized record and skip it). Never let a hook throw into finalization.
|
|
221
221
|
*/
|
|
222
|
-
|
|
222
|
+
interface RoutineHooks {
|
|
223
223
|
/** Called once with the finalized meta when the run reaches a terminal state. */
|
|
224
224
|
onFinish?: (meta: RunMeta) => void;
|
|
225
225
|
}
|
|
@@ -35,16 +35,7 @@
|
|
|
35
35
|
*/
|
|
36
36
|
import { BasePeriodicService, type DaemonContext } from './service.js';
|
|
37
37
|
import type { DaemonServiceId } from '../daemon-services.js';
|
|
38
|
-
|
|
39
|
-
* Hard cap per tick: a real download + npm/bun install + verify can
|
|
40
|
-
* legitimately take minutes on a slow link. 15 minutes matches the task's
|
|
41
|
-
* stated budget and is short relative to the ~75min cadence. Exported so the
|
|
42
|
-
* on-demand `request-self-update` IPC handler (`browser/ipc.ts`) can bound
|
|
43
|
-
* its own `AbortController` on the SAME budget the periodic tick runs under —
|
|
44
|
-
* one deadline, not two independently-tuned numbers that could drift apart.
|
|
45
|
-
*/
|
|
46
|
-
export declare const SELF_UPDATE_DEADLINE_MS: number;
|
|
47
|
-
export interface SelfUpdateOutcome {
|
|
38
|
+
interface SelfUpdateOutcome {
|
|
48
39
|
updated: boolean;
|
|
49
40
|
reason?: string;
|
|
50
41
|
}
|
|
@@ -75,7 +66,6 @@ export interface SelfUpdateDeps {
|
|
|
75
66
|
syncSystemRepo(): Promise<void>;
|
|
76
67
|
syncLocal(): Promise<void>;
|
|
77
68
|
}
|
|
78
|
-
export declare function fetchLatestNpmMetadata(signal: AbortSignal): Promise<NpmLatestMetadata>;
|
|
79
69
|
/**
|
|
80
70
|
* Install + byte-verify `metadata` into `packageRoot`'s install, exactly the
|
|
81
71
|
* sequence `bootstrap.ts`'s `installResolvedPackage` runs for `agents
|
|
@@ -101,7 +91,6 @@ export declare function fetchLatestNpmMetadata(signal: AbortSignal): Promise<Npm
|
|
|
101
91
|
* it's guarding (found in review, PHNX-3695).
|
|
102
92
|
*/
|
|
103
93
|
export declare function installAndVerifyDefault(metadata: NpmLatestMetadata, packageRoot: string, signal: AbortSignal): Promise<void>;
|
|
104
|
-
export declare function defaultSelfUpdateDeps(): SelfUpdateDeps;
|
|
105
94
|
/**
|
|
106
95
|
* Core self-update decision + action, shared by the periodic tick
|
|
107
96
|
* ({@link SelfUpdateService.onTick}) and the on-demand IPC path
|
|
@@ -167,10 +156,6 @@ export declare function triggerSelfUpdateInBackground(ctx: DaemonContext, deps?:
|
|
|
167
156
|
* reason, or `null` to proceed to the (backgrounded) install path.
|
|
168
157
|
*/
|
|
169
158
|
export declare function selfUpdateSyncDeclineReason(deps?: SelfUpdateDeps): string | null;
|
|
170
|
-
export declare const DEV_BUILD_DECLINE = "dev build \u2014 self-update is a no-op";
|
|
171
|
-
export declare const SHADOW_DECLINE = "another agents binary shadows this install \u2014 self-update is a no-op";
|
|
172
|
-
/** True when the package on disk is a strictly newer release than the one this process booted with. */
|
|
173
|
-
export declare function installedIsNewerThanRunning(installed: string, running: string): boolean;
|
|
174
159
|
export declare class SelfUpdateService extends BasePeriodicService {
|
|
175
160
|
readonly id: DaemonServiceId;
|
|
176
161
|
readonly intervalMs: number;
|
|
@@ -56,7 +56,7 @@ const SELF_UPDATE_TICK_MS = 75 * 60_000;
|
|
|
56
56
|
* its own `AbortController` on the SAME budget the periodic tick runs under —
|
|
57
57
|
* one deadline, not two independently-tuned numbers that could drift apart.
|
|
58
58
|
*/
|
|
59
|
-
|
|
59
|
+
const SELF_UPDATE_DEADLINE_MS = 15 * 60_000;
|
|
60
60
|
/**
|
|
61
61
|
* First tick fires 5 minutes after daemon boot — deliberately longer than
|
|
62
62
|
* self-heal's 30s stagger (`self-heal-service.ts`): self-heal repairs local
|
|
@@ -67,7 +67,7 @@ export const SELF_UPDATE_DEADLINE_MS = 15 * 60_000;
|
|
|
67
67
|
* a restart). Every later tick still fires on the normal cadence.
|
|
68
68
|
*/
|
|
69
69
|
const SELF_UPDATE_STARTUP_DELAY_MS = 5 * 60_000;
|
|
70
|
-
|
|
70
|
+
async function fetchLatestNpmMetadata(signal) {
|
|
71
71
|
const response = await fetch(`https://registry.npmjs.org/${NPM_PACKAGE_NAME}/latest`, { signal });
|
|
72
72
|
if (!response.ok) {
|
|
73
73
|
throw new Error(`registry.npmjs.org responded ${response.status}`);
|
|
@@ -148,7 +148,7 @@ export async function installAndVerifyDefault(metadata, packageRoot, signal) {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
|
|
151
|
+
function defaultSelfUpdateDeps() {
|
|
152
152
|
return {
|
|
153
153
|
currentVersion: () => getCliVersion(),
|
|
154
154
|
installedVersion: () => getCliVersionFresh(),
|
|
@@ -362,10 +362,10 @@ export function selfUpdateSyncDeclineReason(deps = defaultSelfUpdateDeps()) {
|
|
|
362
362
|
}
|
|
363
363
|
return null;
|
|
364
364
|
}
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
const DEV_BUILD_DECLINE = 'dev build — self-update is a no-op';
|
|
366
|
+
const SHADOW_DECLINE = 'another agents binary shadows this install — self-update is a no-op';
|
|
367
367
|
/** True when the package on disk is a strictly newer release than the one this process booted with. */
|
|
368
|
-
|
|
368
|
+
function installedIsNewerThanRunning(installed, running) {
|
|
369
369
|
if (installed === 'unknown' || running === 'unknown')
|
|
370
370
|
return false;
|
|
371
371
|
return compareVersions(installed, running) > 0;
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { BasePeriodicService, type DaemonContext } from './service.js';
|
|
26
26
|
import type { DaemonServiceId } from '../daemon-services.js';
|
|
27
|
-
|
|
27
|
+
interface StateDirCheckServiceOptions {
|
|
28
28
|
lifetimePath: string;
|
|
29
29
|
lifetimeToken: string;
|
|
30
30
|
onMissing: () => void;
|
|
@@ -41,3 +41,4 @@ export declare class StateDirCheckService extends BasePeriodicService {
|
|
|
41
41
|
protected onStop(): Promise<void>;
|
|
42
42
|
protected onTick(ctx: DaemonContext): Promise<void>;
|
|
43
43
|
}
|
|
44
|
+
export {};
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import type { DaemonServiceId } from '../daemon-services.js';
|
|
34
34
|
import type { DaemonContext, DaemonService, ServiceHealth } from './service.js';
|
|
35
|
-
|
|
35
|
+
interface ServiceSupervisorOptions {
|
|
36
36
|
/** Consecutive thrown tick failures before a service is parked. Deadline breaches park immediately. Default 3. */
|
|
37
37
|
parkAfterFailures?: number;
|
|
38
38
|
/** First restart backoff delay, doubled on each further failed restart attempt. Default 5s. */
|
|
@@ -48,7 +48,7 @@ export interface ServiceSupervisorOptions {
|
|
|
48
48
|
*/
|
|
49
49
|
lifecycleDeadlineMs?: number;
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
interface RegisterServiceOptions {
|
|
52
52
|
/** Register the lifecycle owner but leave it stopped until a live enable. */
|
|
53
53
|
enabled?: boolean;
|
|
54
54
|
}
|
|
@@ -135,3 +135,4 @@ export declare class ServiceSupervisor {
|
|
|
135
135
|
private recordFailure;
|
|
136
136
|
private finishTick;
|
|
137
137
|
}
|
|
138
|
+
export {};
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* enabled without pulling in the whole daemon lifecycle.
|
|
8
8
|
*/
|
|
9
9
|
/** Every service the daemon can host. IDs are kebab-case and stable. */
|
|
10
|
-
export type DaemonServiceId = 'scheduler' | 'catchup' | 'monitors' | 'browser-ipc' | 'webhook-receiver' | 'self-heal' | 'self-update' | 'account-state' | 'account-auth' | 'watchdog' | 'device-probe' | 'state-dir-check' | 'session-index' | 'session-title' | 'auth-sync' | 'usage-sync' | 'daemon-heartbeat' | 'tmux-reap' | 'browser-task-reap' | 'session-state' | 'session-summarizer' | 'attention-notify' | 'harness-update';
|
|
10
|
+
export type DaemonServiceId = 'scheduler' | 'catchup' | 'monitors' | 'browser-ipc' | 'webhook-receiver' | 'self-heal' | 'self-update' | 'account-state' | 'account-auth' | 'watchdog' | 'device-probe' | 'state-dir-check' | 'session-index' | 'session-title' | 'auth-sync' | 'usage-sync' | 'daemon-heartbeat' | 'tmux-reap' | 'browser-task-reap' | 'session-state' | 'feed-stream' | 'session-summarizer' | 'attention-notify' | 'harness-update';
|
|
11
11
|
/** Human-readable metadata for each service. */
|
|
12
|
-
|
|
12
|
+
interface DaemonServiceDef {
|
|
13
13
|
id: DaemonServiceId;
|
|
14
14
|
title: string;
|
|
15
15
|
description: string;
|
|
@@ -55,3 +55,4 @@ export declare function queueDaemonServiceRestart(id: DaemonServiceId): void;
|
|
|
55
55
|
* daemon; never throws. Clears the file so a request is applied at most once.
|
|
56
56
|
*/
|
|
57
57
|
export declare function drainDaemonServiceRestartQueue(): DaemonServiceId[];
|
|
58
|
+
export {};
|