@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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { daemonProcessViewAllowed, recordDaemonProcessView } from '../session/process-view.js';
|
|
1
2
|
/**
|
|
2
3
|
* Daemon lifecycle management for the routines scheduler.
|
|
3
4
|
*
|
|
@@ -22,7 +23,6 @@ import { detectOverdueJobs, notifyOverdue } from '../overdue.js';
|
|
|
22
23
|
import { runCatchup } from '../catchup.js';
|
|
23
24
|
import { notifyRoutineStart, notifyRoutineFinish, notifyRoutineStartFailed } from '../routine-notify.js';
|
|
24
25
|
import { notifyOwnerRoutineFinish, notifyOwnerRoutineStartFailed } from '../routine-notify-owner.js';
|
|
25
|
-
import { BrowserService } from '../browser/service.js';
|
|
26
26
|
import { getSocketPath as getBrowserIpcSocketPath } from '../browser/ipc.js';
|
|
27
27
|
import { redactSecrets } from '../redact.js';
|
|
28
28
|
import { getAgentsBinPath, getCliLaunch, BUN_VIRTUAL_ROOT } from '../cli-entry.js';
|
|
@@ -30,27 +30,6 @@ import { localBinDir } from '../platform/posixpath.js';
|
|
|
30
30
|
import { isSchedulerEnabled, assertSchedulerEnabled, isDaemonEnabled } from '../device-config.js';
|
|
31
31
|
import { recordSubsystemOk, recordSubsystemError, recordSubsystemErrorReason, readSubsystemHealth, SUBSYSTEM_DAEMON_START } from '../daemon-health.js';
|
|
32
32
|
import { ServiceSupervisor } from './supervisor.js';
|
|
33
|
-
import { SessionIndexService } from './session-index-service.js';
|
|
34
|
-
import { SessionSummarizerService } from './session-summarizer-service.js';
|
|
35
|
-
import { SessionTitleService } from './session-title-service.js';
|
|
36
|
-
import { MonitorEngineService } from './monitor-engine-service.js';
|
|
37
|
-
import { AccountUsageService, AccountAuthService } from './account-state-daemon-service.js';
|
|
38
|
-
import { CatchupService } from './catchup-service.js';
|
|
39
|
-
import { BrowserIPCService } from './browser-ipc-service.js';
|
|
40
|
-
import { WatchdogService } from './watchdog-service.js';
|
|
41
|
-
import { DeviceProbeService } from './device-probe-service.js';
|
|
42
|
-
import { SelfHealService } from './self-heal-service.js';
|
|
43
|
-
import { SelfUpdateService } from './self-update-service.js';
|
|
44
|
-
import { HarnessUpdateService } from './harness-update-service.js';
|
|
45
|
-
import { AuthSyncService } from './auth-sync-service.js';
|
|
46
|
-
import { UsageSyncService } from './usage-sync-service.js';
|
|
47
|
-
import { StateDirCheckService } from './state-dir-check-service.js';
|
|
48
|
-
import { SessionStateService } from './session-state-service.js';
|
|
49
|
-
import { AttentionNotifyService } from './attention-notify-service.js';
|
|
50
|
-
import { WebhookReceiverService } from './webhook-receiver-service.js';
|
|
51
|
-
import { HeartbeatService } from './heartbeat-service.js';
|
|
52
|
-
import { TmuxReapService } from './tmux-reap-service.js';
|
|
53
|
-
import { BrowserTaskReapService } from './browser-task-reap-service.js';
|
|
54
33
|
import { emit, emitAsync, emitRoutineEnd } from '../feed/events.js';
|
|
55
34
|
import { readDaemonServicesConfig, drainDaemonServiceRestartQueue } from '../daemon-services.js';
|
|
56
35
|
import { sleepSync } from '../fs-atomic.js';
|
|
@@ -478,6 +457,12 @@ export function isDaemonRunning() {
|
|
|
478
457
|
* liveness check and the write.
|
|
479
458
|
*/
|
|
480
459
|
export function claimDaemonInstance() {
|
|
460
|
+
// A nested caller cannot interpret legacy numeric lock/PID files. Authenticate
|
|
461
|
+
// before acquiring the lock (whose stale-PID cleanup itself mutates state).
|
|
462
|
+
if (!daemonProcessViewAllowed()) {
|
|
463
|
+
console.error('Daemon startup requires the owning process namespace. Automatic reuse of a private-container HOME across namespaces is unsupported; run in its owning namespace or use a fresh HOME.');
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
481
466
|
// A stop owns this same lock through teardown. Waiting here is load-bearing:
|
|
482
467
|
// returning false while stopDaemon() holds it lets this replacement exit 0,
|
|
483
468
|
// then the stop completes with no singleton left alive. The bounded lifecycle
|
|
@@ -488,6 +473,10 @@ export function claimDaemonInstance() {
|
|
|
488
473
|
if (!release)
|
|
489
474
|
return false;
|
|
490
475
|
try {
|
|
476
|
+
// Recheck under lifecycle serialization; invocation is not provenance.
|
|
477
|
+
if (!daemonProcessViewAllowed())
|
|
478
|
+
return false;
|
|
479
|
+
recordDaemonProcessView();
|
|
491
480
|
// Do not overwrite a live-but-uninspectable owner. This is the non-
|
|
492
481
|
// destructive side of the same fail-closed rule stopDaemon applies.
|
|
493
482
|
if (unverifiedLiveDaemonPid() !== null)
|
|
@@ -887,6 +876,32 @@ export async function runDaemon() {
|
|
|
887
876
|
// HOME override must refuse to run against the operator's real state rather than
|
|
888
877
|
// schedule against the real host. No-op in production (the marker is never set).
|
|
889
878
|
assertTestDaemonHome();
|
|
879
|
+
// Lifecycle readers and launchers do not run services. Load their code only
|
|
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([
|
|
882
|
+
import('../browser/service.js'),
|
|
883
|
+
import('./session-index-service.js'),
|
|
884
|
+
import('./session-summarizer-service.js'),
|
|
885
|
+
import('./session-title-service.js'),
|
|
886
|
+
import('./monitor-engine-service.js'),
|
|
887
|
+
import('./account-state-daemon-service.js'),
|
|
888
|
+
import('./catchup-service.js'),
|
|
889
|
+
import('./browser-ipc-service.js'),
|
|
890
|
+
import('./watchdog-service.js'),
|
|
891
|
+
import('./device-probe-service.js'),
|
|
892
|
+
import('./self-heal-service.js'),
|
|
893
|
+
import('./self-update-service.js'),
|
|
894
|
+
import('./harness-update-service.js'),
|
|
895
|
+
import('./auth-sync-service.js'),
|
|
896
|
+
import('./usage-sync-service.js'),
|
|
897
|
+
import('./state-dir-check-service.js'),
|
|
898
|
+
import('./session-state-service.js'),
|
|
899
|
+
import('./attention-notify-service.js'),
|
|
900
|
+
import('./webhook-receiver-service.js'),
|
|
901
|
+
import('./heartbeat-service.js'),
|
|
902
|
+
import('./tmux-reap-service.js'),
|
|
903
|
+
import('./browser-task-reap-service.js'),
|
|
904
|
+
]);
|
|
890
905
|
// Install the shared-daemon reload signal boundary BEFORE publishing our PID
|
|
891
906
|
// in claimDaemonInstance(). Browser/routines clients use that PID to decide a
|
|
892
907
|
// daemon exists and may request a service reload immediately. POSIX otherwise
|
|
@@ -1211,7 +1226,7 @@ export async function runDaemon() {
|
|
|
1211
1226
|
}
|
|
1212
1227
|
catch { /* best-effort */ }
|
|
1213
1228
|
// RUSH-2288: the pre-spawn failure (e.g. auth_failed) is exactly the one the
|
|
1214
|
-
// per-routine `agents
|
|
1229
|
+
// per-routine `agents send --to owner` prompt can never send — its agent never ran —
|
|
1215
1230
|
// so the daemon reaches the owner directly.
|
|
1216
1231
|
void notifyOwnerRoutineStartFailed(config, message)
|
|
1217
1232
|
.then((r) => {
|
|
@@ -1739,6 +1754,10 @@ function assertDaemonLaunchHomeAllowed() {
|
|
|
1739
1754
|
}
|
|
1740
1755
|
/** Start the daemon via launchd, systemd, or as a detached process. */
|
|
1741
1756
|
export function startDaemon(agentsBin) {
|
|
1757
|
+
// The public launcher must obey the same namespace boundary as its child:
|
|
1758
|
+
// even probing/repairing legacy PID state or pruning a lock can mutate it.
|
|
1759
|
+
if (!daemonProcessViewAllowed())
|
|
1760
|
+
throw new Error('Daemon startup requires the owning process namespace. Automatic reuse of a private-container HOME across namespaces is unsupported; run in its owning namespace or use a fresh HOME.');
|
|
1742
1761
|
if (isDaemonRunning()) {
|
|
1743
1762
|
const pid = readDaemonPid();
|
|
1744
1763
|
return { pid, method: 'already-running' };
|
|
@@ -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 {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Runs the production daemon entrypoint against an isolated HOME. No installed
|
|
2
|
+
// CLI, service manager, scheduler, or production socket participates.
|
|
3
|
+
import { runDaemon, startDaemon } from '../daemon.js';
|
|
4
|
+
if (process.argv[2] === '__start-daemon') {
|
|
5
|
+
try {
|
|
6
|
+
startDaemon();
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
console.log(error.message);
|
|
10
|
+
process.exitCode = 2;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
else
|
|
14
|
+
await runDaemon();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import net from 'node:net';
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { serviceManagerRegistrationAllowed } from '../../service-manifest.js';
|
|
7
|
+
import { startDaemon, stopDaemon } from '../daemon.js';
|
|
8
|
+
import { getDaemonDir, getTerminalsDir, getCacheDir } from '../../state.js';
|
|
9
|
+
// Tripwire precedes ALL lifecycle calls. Some older Bun versions return HOME
|
|
10
|
+
// from os.userInfo(), which would incorrectly allow the real service manager.
|
|
11
|
+
assert.equal(serviceManagerRegistrationAllowed().allowed, false, 'isolated fixture must never access the production service manager');
|
|
12
|
+
const cold = process.argv[3] === 'cold';
|
|
13
|
+
const child = cold ? spawn('bun', [process.argv[4], '__daemon-run'], { stdio: 'ignore', env: process.env }) : undefined;
|
|
14
|
+
const started = child ? { pid: child.pid, method: 'detached' } : startDaemon(process.argv[2]);
|
|
15
|
+
assert.equal(started.method, 'detached');
|
|
16
|
+
assert.ok(started.pid);
|
|
17
|
+
fs.writeFileSync(path.join(process.env.HOME, 'test-child.pid'), String(started.pid));
|
|
18
|
+
try {
|
|
19
|
+
if (!cold)
|
|
20
|
+
assert.ok(fs.existsSync(path.join(getDaemonDir(), 'health.json')), 'ordinary launcher publishes health before daemon starts');
|
|
21
|
+
const socket = path.join(getCacheDir(), 'helpers', 'browser', 'browser.sock');
|
|
22
|
+
let ready = false;
|
|
23
|
+
for (let i = 0; i < 80 && !ready; i++) {
|
|
24
|
+
ready = await new Promise(resolve => {
|
|
25
|
+
const client = net.createConnection(socket);
|
|
26
|
+
const done = (value) => { client.destroy(); resolve(value); };
|
|
27
|
+
client.setTimeout(100, () => done(false));
|
|
28
|
+
client.once('connect', () => done(true));
|
|
29
|
+
client.once('error', () => done(false));
|
|
30
|
+
});
|
|
31
|
+
if (!ready)
|
|
32
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
33
|
+
}
|
|
34
|
+
assert.ok(ready, 'ordinary fresh-home daemon must serve its actual browser socket');
|
|
35
|
+
assert.equal(fs.readFileSync(path.join(getDaemonDir(), 'daemon.pid'), 'utf8').trim(), String(started.pid));
|
|
36
|
+
const owner = JSON.parse(fs.readFileSync(path.join(getTerminalsDir(), 'process-view.json'), 'utf8'));
|
|
37
|
+
assert.equal(owner.pidNamespace, fs.readlinkSync('/proc/self/ns/pid'));
|
|
38
|
+
assert.equal(owner.bootId, fs.readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim());
|
|
39
|
+
console.log(`${cold ? 'cold runDaemon' : 'ordinary startDaemon: health published'}; canonical socket ready; namespace owner verified`);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
stopDaemon();
|
|
43
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
/** Every service the daemon can host. IDs are kebab-case and stable. */
|
|
10
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';
|
|
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 {};
|
|
@@ -35,7 +35,7 @@ export interface HostedReceiverConfig {
|
|
|
35
35
|
/** Public Funnel exposure; omit to bind localhost only. */
|
|
36
36
|
funnel?: HostedReceiverFunnel;
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
interface DaemonWebhooksConfig {
|
|
39
39
|
receivers: HostedReceiverConfig[];
|
|
40
40
|
}
|
|
41
41
|
/** Path to `~/.agents/daemon/webhooks.yaml`. */
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export declare const AGENTS_URL_SCHEME = "agents";
|
|
2
|
-
|
|
3
|
-
export interface SchemeStatus {
|
|
2
|
+
interface SchemeStatus {
|
|
4
3
|
registered: boolean;
|
|
5
4
|
platform: NodeJS.Platform;
|
|
6
5
|
/** One human line: where the handler is, or why it is not registered. */
|
|
@@ -11,15 +10,6 @@ export interface SchemeStatus {
|
|
|
11
10
|
* out of the handler command.
|
|
12
11
|
*/
|
|
13
12
|
export declare function shQuote(p: string): string;
|
|
14
|
-
/**
|
|
15
|
-
* Resolve how the OS handler should invoke this CLI, as an already-quoted
|
|
16
|
-
* command prefix (without the `open <url>` suffix).
|
|
17
|
-
*
|
|
18
|
-
* A macOS GUI app does NOT inherit the shell PATH, so the handler must use an
|
|
19
|
-
* absolute path. Prefer the `agents` shim on PATH (directly executable); fall
|
|
20
|
-
* back to `<node> <entry>` for a bare JS install.
|
|
21
|
-
*/
|
|
22
|
-
export declare function resolveAgentsInvocation(platform?: NodeJS.Platform): string;
|
|
23
13
|
/** The freedesktop `.desktop` entry that claims `x-scheme-handler/agents`. */
|
|
24
14
|
export declare function linuxDesktopEntry(invocation: string): string;
|
|
25
15
|
/**
|
|
@@ -33,10 +23,9 @@ export declare function macPlistBuddyCommands(plistPath: string): string[][];
|
|
|
33
23
|
/** `reg add` argv lists that register the scheme under HKCU on Windows. */
|
|
34
24
|
export declare function windowsRegistryCommands(invocation: string): string[][];
|
|
35
25
|
export declare function linuxDesktopPath(home?: string): string;
|
|
36
|
-
export declare function macAppPath(home?: string): string;
|
|
37
26
|
/** Whether the handler artifact exists on disk (a cheap, side-effect-free check). */
|
|
38
27
|
export declare function agentsUrlSchemeStatus(platform?: NodeJS.Platform, home?: string): SchemeStatus;
|
|
39
|
-
|
|
28
|
+
interface RegisterOptions {
|
|
40
29
|
platform?: NodeJS.Platform;
|
|
41
30
|
home?: string;
|
|
42
31
|
/** Skip if already present (used by best-effort callers like setup). */
|
|
@@ -47,3 +36,4 @@ export declare function unregisterAgentsUrlScheme(opts?: {
|
|
|
47
36
|
platform?: NodeJS.Platform;
|
|
48
37
|
home?: string;
|
|
49
38
|
}): SchemeStatus;
|
|
39
|
+
export {};
|
|
@@ -23,7 +23,7 @@ import * as os from 'node:os';
|
|
|
23
23
|
import * as path from 'node:path';
|
|
24
24
|
import { getAgentsBinPath } from '../cli-entry.js';
|
|
25
25
|
export const AGENTS_URL_SCHEME = 'agents';
|
|
26
|
-
|
|
26
|
+
const MAC_BUNDLE_ID = 'dev.agents.urlhandler';
|
|
27
27
|
const LINUX_DESKTOP_FILE = 'agents-url-handler.desktop';
|
|
28
28
|
const MAC_APP_NAME = 'AgentsURLHandler.app';
|
|
29
29
|
// ---------------------------------------------------------------------------
|
|
@@ -44,7 +44,7 @@ export function shQuote(p) {
|
|
|
44
44
|
* absolute path. Prefer the `agents` shim on PATH (directly executable); fall
|
|
45
45
|
* back to `<node> <entry>` for a bare JS install.
|
|
46
46
|
*/
|
|
47
|
-
|
|
47
|
+
function resolveAgentsInvocation(platform = os.platform()) {
|
|
48
48
|
const onPath = whichAgents(platform);
|
|
49
49
|
if (onPath)
|
|
50
50
|
return platform === 'win32' ? `"${onPath}"` : shQuote(onPath);
|
|
@@ -123,7 +123,7 @@ export function windowsRegistryCommands(invocation) {
|
|
|
123
123
|
export function linuxDesktopPath(home = os.homedir()) {
|
|
124
124
|
return path.join(home, '.local', 'share', 'applications', LINUX_DESKTOP_FILE);
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
function macAppPath(home = os.homedir()) {
|
|
127
127
|
return path.join(home, 'Applications', MAC_APP_NAME);
|
|
128
128
|
}
|
|
129
129
|
// ---------------------------------------------------------------------------
|
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
* agents://session/<id> — resume <id>, owner host resolved from the id
|
|
17
17
|
* agents://session/<id>?host=<name> — the same, with a routing hint
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
interface AgentsSessionLink {
|
|
20
20
|
kind: 'session';
|
|
21
21
|
/** The session id (or short-id/alias) to resume. */
|
|
22
22
|
id: string;
|
|
23
23
|
/** Optional owning-host hint; resume self-resolves the owner from the id regardless. */
|
|
24
24
|
host?: string;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
interface AgentsUrlError {
|
|
27
27
|
error: string;
|
|
28
28
|
}
|
|
29
29
|
export declare function isDeepLinkSessionId(raw: string): boolean;
|
|
@@ -32,3 +32,4 @@ export declare function isDeepLinkSessionId(raw: string): boolean;
|
|
|
32
32
|
* {@link AgentsUrlError} with a human reason. Never throws.
|
|
33
33
|
*/
|
|
34
34
|
export declare function parseAgentsUrl(input: string): AgentsSessionLink | AgentsUrlError;
|
|
35
|
+
export {};
|
|
@@ -44,7 +44,7 @@ export type ConfigScope = 'user' | 'device';
|
|
|
44
44
|
*/
|
|
45
45
|
export type ConfigVisibility = 'shared' | 'machine';
|
|
46
46
|
/** Value type of a config key — drives validation and `--json` rendering. */
|
|
47
|
-
|
|
47
|
+
type ConfigType = 'string' | 'int' | 'bool' | 'string-list';
|
|
48
48
|
/** Fields every key carries, regardless of scope. */
|
|
49
49
|
interface ConfigKeySpecBase {
|
|
50
50
|
/** CLI dotted name, e.g. `interactive.host`. */
|
|
@@ -81,7 +81,7 @@ export interface ConfigEntry {
|
|
|
81
81
|
source: ConfigSource;
|
|
82
82
|
}
|
|
83
83
|
/** Options scoping a read/write: a specific device (default: this machine), or the fleet-defaults layer. */
|
|
84
|
-
|
|
84
|
+
interface ConfigTarget {
|
|
85
85
|
device?: string;
|
|
86
86
|
/** Write/read the fleet-wide defaults layer (central fleet.defaults.config). */
|
|
87
87
|
fleet?: boolean;
|
|
@@ -92,16 +92,8 @@ declare const DEVICE_ROLES: readonly ["worker", "personal", "desktop"];
|
|
|
92
92
|
declare const AUTO_POOL_MODES: readonly ["workers", "all"];
|
|
93
93
|
export declare const CONFIG_KEYS: readonly ConfigKeySpec[];
|
|
94
94
|
export declare function configKeySpec(name: string): ConfigKeySpec;
|
|
95
|
-
/**
|
|
96
|
-
|
|
97
|
-
* process. A failure is loud but non-fatal — config reads must keep working,
|
|
98
|
-
* and the next process retries the fold. Honors AGENTS_SKIP_MIGRATION=1, the
|
|
99
|
-
* same gate bootstrap's runMigration uses (tests pin it so a fork never folds
|
|
100
|
-
* the developer's real ~/.agents as a side effect).
|
|
101
|
-
*/
|
|
102
|
-
export declare function ensureDeviceConfigMigrated(): void;
|
|
103
|
-
/** The fleet-defaults config layer (central `fleet.defaults.config`; {} when unset). */
|
|
104
|
-
export declare function readFleetConfigDefaults(): Record<string, unknown>;
|
|
95
|
+
/** Throw when `value` does not match the key's declared type or validation. */
|
|
96
|
+
export declare function assertValidValue(spec: ConfigKeySpec, value: unknown): void;
|
|
105
97
|
/**
|
|
106
98
|
* The effective device-scope config block for `device`: fleet.defaults.config
|
|
107
99
|
* overlaid with the per-device doc's config:. This is the single read path
|
|
@@ -130,9 +122,6 @@ export declare function getConfigValueAsync(name: string, opts?: ConfigTarget):
|
|
|
130
122
|
* must not hard-fail. Asking for such a key by name still errors.
|
|
131
123
|
*/
|
|
132
124
|
export declare function listConfig(opts?: ConfigTarget): ConfigEntry[];
|
|
133
|
-
/** List user-scope config keys with their values. Used to show inherited settings
|
|
134
|
-
* in per-device views without implying those keys are device-local. */
|
|
135
|
-
export declare function listUserConfig(): ConfigEntry[];
|
|
136
125
|
/**
|
|
137
126
|
* Set a config key (validated). Device-scope keys target this machine unless
|
|
138
127
|
* `opts.device` names a peer; `opts.fleet` writes the fleet-wide defaults layer
|