@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
|
@@ -46,7 +46,7 @@ export declare function identityLoopbackMismatch(profile: BrowserProfileWithDecl
|
|
|
46
46
|
* The one-value-per-file fields are kept for backward compat with older
|
|
47
47
|
* builds; `meta.json` is additive and consulted preferentially.
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
interface ProfileRuntime {
|
|
50
50
|
pid: number;
|
|
51
51
|
port?: number;
|
|
52
52
|
command?: string;
|
|
@@ -110,7 +110,7 @@ export declare function isProcessAlive(pid: number, expectedCommand?: string): b
|
|
|
110
110
|
* Combines the on-disk meta record with live-process probes so callers can
|
|
111
111
|
* tell at a glance which entries are alive, stale, or have outright leaked.
|
|
112
112
|
*/
|
|
113
|
-
|
|
113
|
+
interface ProfileSnapshot {
|
|
114
114
|
/** Composite name as the cache dir is keyed: `<profile>` or `<profile>@<endpoint>`. */
|
|
115
115
|
name: string;
|
|
116
116
|
/** Absolute path of the cache dir. */
|
|
@@ -144,10 +144,59 @@ export declare function listAllProfileSnapshots(): ProfileSnapshot[];
|
|
|
144
144
|
* alone — we'd rather leak than wrongly kill a user-owned process that
|
|
145
145
|
* happens to share metadata.
|
|
146
146
|
*/
|
|
147
|
+
/**
|
|
148
|
+
* Clean up what a DEAD daemon genuinely left behind — which is not the browser.
|
|
149
|
+
*
|
|
150
|
+
* A live local browser outliving its daemon is the NORMAL case, not an orphan.
|
|
151
|
+
* `BrowserService.shutdown` deliberately closes only CDP and leaves the browser
|
|
152
|
+
* running, and on macOS the spawn is detached so the daemon's own positive-pid
|
|
153
|
+
* `killTree` reaches the daemon alone. This reaper used to read "the recorded
|
|
154
|
+
* `daemonPid` has exited" as "everything it recorded is garbage" and SIGTERM the
|
|
155
|
+
* browser — so replacing the daemon (a menubar activation, an upgrade, a crash
|
|
156
|
+
* restart) killed a browser the user was looking at, and `clearProfileRuntime`
|
|
157
|
+
* then removed the `port`/meta that {@link readProfileRuntime} needs, so even a
|
|
158
|
+
* survivor could not be re-attached and a second browser would launch beside it.
|
|
159
|
+
*
|
|
160
|
+
* The three cases are now decided independently:
|
|
161
|
+
*
|
|
162
|
+
* - **A live local browser/electron is preserved untouched** — not signalled, not
|
|
163
|
+
* cleared, and its `daemonPid` deliberately NOT rewritten. Ownership is adopted
|
|
164
|
+
* only after an identity-checked attach succeeds (`adoptProfileRuntimeOwner`,
|
|
165
|
+
* called from the reuse branch in `BrowserService.connectProfile`), so nothing
|
|
166
|
+
* claims a browser it has not proven it can talk to. Re-running this is a no-op.
|
|
167
|
+
* - **A dead browser record is cleared**, with no signal sent: there is nothing
|
|
168
|
+
* alive to signal, and the stale pid/port would otherwise mislead the next
|
|
169
|
+
* attach.
|
|
170
|
+
* - **A stale tunnel IS reaped.** A local `ssh -L` cannot outlive its purpose, so
|
|
171
|
+
* a dead owner does make it an orphan. This is the one thing the old code was
|
|
172
|
+
* right about; it just shared a code path with the browser.
|
|
173
|
+
*
|
|
174
|
+
* The accepted trade: a genuinely leaked browser from a long-dead daemon is no
|
|
175
|
+
* longer force-killed here. Idle/abandoned cleanup has its own owner in
|
|
176
|
+
* `browser/hygiene.ts` (session-dead + idle), which the daemon's periodic tick and
|
|
177
|
+
* `agents browser prune` both call — that is the right place for it, because it can
|
|
178
|
+
* tell "idle and abandoned" from "in use right now" and this function cannot.
|
|
179
|
+
*/
|
|
147
180
|
export declare function reapOrphanedProcesses(): {
|
|
148
181
|
reaped: number;
|
|
149
182
|
details: string[];
|
|
150
183
|
};
|
|
184
|
+
/**
|
|
185
|
+
* Take ownership of a runtime record after an identity-checked attach succeeded.
|
|
186
|
+
*
|
|
187
|
+
* Called from the reuse branch in `BrowserService.connectProfile`, which has just
|
|
188
|
+
* probed `/json/version` and run `verifyBrowserIdentity` against the profile's
|
|
189
|
+
* expected browser family — so by this point the process on the recorded port is
|
|
190
|
+
* proven to be ours. Only then may a new service claim it.
|
|
191
|
+
*
|
|
192
|
+
* Rewrites `daemonPid` ALONE. Every other field — `pid`, `port`, `command`,
|
|
193
|
+
* `userDataDir`, `spawnedAt`, `kind`, `tunnelPid` — is the original launch's
|
|
194
|
+
* metadata and stays exactly as recorded: this is an ownership handover, not a
|
|
195
|
+
* re-registration, and rewriting the rest would lose the provenance the reaper and
|
|
196
|
+
* the hygiene pass both read. A record that has since disappeared is left alone
|
|
197
|
+
* rather than recreated from a partial view.
|
|
198
|
+
*/
|
|
199
|
+
export declare function adoptProfileRuntimeOwner(profileName: string, daemonPid?: number): boolean;
|
|
151
200
|
/**
|
|
152
201
|
* True when ANY cache dir belonging to this profile still has a live browser or
|
|
153
202
|
* SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
|
|
@@ -160,7 +209,7 @@ export declare function reapOrphanedProcesses(): {
|
|
|
160
209
|
*/
|
|
161
210
|
export declare function isProfileInUse(profileName: string): boolean;
|
|
162
211
|
/** Why a profile is considered dead. */
|
|
163
|
-
|
|
212
|
+
type PruneReason = 'binary-missing' | 'never-used';
|
|
164
213
|
export interface PruneCandidate {
|
|
165
214
|
name: string;
|
|
166
215
|
scope: PruneProfileClass;
|
|
@@ -168,7 +217,7 @@ export interface PruneCandidate {
|
|
|
168
217
|
/** Cache dirs that would be removed along with the config entry. */
|
|
169
218
|
cacheDirs: string[];
|
|
170
219
|
}
|
|
171
|
-
|
|
220
|
+
interface PrunePlan {
|
|
172
221
|
/** Profiles that would be (or were) removed. */
|
|
173
222
|
candidates: PruneCandidate[];
|
|
174
223
|
/** Profiles deliberately left alone, with the guard that kept them. */
|
|
@@ -233,4 +282,10 @@ export declare function buildProfilePrunePlan(): Promise<PrunePlan>;
|
|
|
233
282
|
* went, matching what `--dry-run` printed.
|
|
234
283
|
*/
|
|
235
284
|
export declare function pruneProfiles(plan: PrunePlan): Promise<PrunePlan>;
|
|
285
|
+
/**
|
|
286
|
+
* The executable/image name the live `pid` is running, or null if it can't be
|
|
287
|
+
* determined. The process-listing API differs per OS: Windows has no `ps`, so
|
|
288
|
+
* we query `tasklist` (CSV image name in column 1); POSIX uses `ps -o comm=`.
|
|
289
|
+
*/
|
|
290
|
+
export declare function liveProcessCommand(pid: number): string | null;
|
|
236
291
|
export {};
|
|
@@ -258,6 +258,39 @@ function readTaskCount(dir) {
|
|
|
258
258
|
* alone — we'd rather leak than wrongly kill a user-owned process that
|
|
259
259
|
* happens to share metadata.
|
|
260
260
|
*/
|
|
261
|
+
/**
|
|
262
|
+
* Clean up what a DEAD daemon genuinely left behind — which is not the browser.
|
|
263
|
+
*
|
|
264
|
+
* A live local browser outliving its daemon is the NORMAL case, not an orphan.
|
|
265
|
+
* `BrowserService.shutdown` deliberately closes only CDP and leaves the browser
|
|
266
|
+
* running, and on macOS the spawn is detached so the daemon's own positive-pid
|
|
267
|
+
* `killTree` reaches the daemon alone. This reaper used to read "the recorded
|
|
268
|
+
* `daemonPid` has exited" as "everything it recorded is garbage" and SIGTERM the
|
|
269
|
+
* browser — so replacing the daemon (a menubar activation, an upgrade, a crash
|
|
270
|
+
* restart) killed a browser the user was looking at, and `clearProfileRuntime`
|
|
271
|
+
* then removed the `port`/meta that {@link readProfileRuntime} needs, so even a
|
|
272
|
+
* survivor could not be re-attached and a second browser would launch beside it.
|
|
273
|
+
*
|
|
274
|
+
* The three cases are now decided independently:
|
|
275
|
+
*
|
|
276
|
+
* - **A live local browser/electron is preserved untouched** — not signalled, not
|
|
277
|
+
* cleared, and its `daemonPid` deliberately NOT rewritten. Ownership is adopted
|
|
278
|
+
* only after an identity-checked attach succeeds (`adoptProfileRuntimeOwner`,
|
|
279
|
+
* called from the reuse branch in `BrowserService.connectProfile`), so nothing
|
|
280
|
+
* claims a browser it has not proven it can talk to. Re-running this is a no-op.
|
|
281
|
+
* - **A dead browser record is cleared**, with no signal sent: there is nothing
|
|
282
|
+
* alive to signal, and the stale pid/port would otherwise mislead the next
|
|
283
|
+
* attach.
|
|
284
|
+
* - **A stale tunnel IS reaped.** A local `ssh -L` cannot outlive its purpose, so
|
|
285
|
+
* a dead owner does make it an orphan. This is the one thing the old code was
|
|
286
|
+
* right about; it just shared a code path with the browser.
|
|
287
|
+
*
|
|
288
|
+
* The accepted trade: a genuinely leaked browser from a long-dead daemon is no
|
|
289
|
+
* longer force-killed here. Idle/abandoned cleanup has its own owner in
|
|
290
|
+
* `browser/hygiene.ts` (session-dead + idle), which the daemon's periodic tick and
|
|
291
|
+
* `agents browser prune` both call — that is the right place for it, because it can
|
|
292
|
+
* tell "idle and abandoned" from "in use right now" and this function cannot.
|
|
293
|
+
*/
|
|
261
294
|
export function reapOrphanedProcesses() {
|
|
262
295
|
const root = getBrowserRuntimeDir();
|
|
263
296
|
if (!fs.existsSync(root))
|
|
@@ -275,28 +308,76 @@ export function reapOrphanedProcesses() {
|
|
|
275
308
|
// Owning daemon still alive — leave its kids alone.
|
|
276
309
|
if (isProcessAlive(meta.daemonPid))
|
|
277
310
|
continue;
|
|
278
|
-
//
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
311
|
+
// A local `ssh -L` whose owner is gone is genuinely orphaned: nothing is
|
|
312
|
+
// driving it and it cannot be re-adopted, so it is the one process to signal.
|
|
313
|
+
// Matched against the recorded command (or `ssh`) so a recycled pid is not
|
|
314
|
+
// mistaken for our tunnel.
|
|
315
|
+
if (meta.tunnelPid && meta.tunnelPid !== 0) {
|
|
316
|
+
const cmdOk = !meta.command
|
|
317
|
+
|| matchesCommand(meta.tunnelPid, meta.command)
|
|
318
|
+
|| matchesCommand(meta.tunnelPid, 'ssh');
|
|
319
|
+
if (cmdOk) {
|
|
320
|
+
try {
|
|
321
|
+
process.kill(meta.tunnelPid, 'SIGTERM');
|
|
322
|
+
reaped++;
|
|
323
|
+
details.push(`reaped tunnel ${meta.tunnelPid} (profile ${profileName})`);
|
|
324
|
+
}
|
|
325
|
+
catch { /* already gone */ }
|
|
291
326
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
327
|
+
}
|
|
328
|
+
// A tunnel-kind record has no local browser of its own, so clearing it is the
|
|
329
|
+
// whole cleanup. `pid` on such a record is the REMOTE browser (normally 0) and
|
|
330
|
+
// is never ours to signal.
|
|
331
|
+
if (meta.kind === 'tunnel') {
|
|
332
|
+
clearProfileRuntime(profileName);
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
// `isProcessAlive` re-checks the recorded command, so a recycled pid does not
|
|
336
|
+
// read as our browser. A record with no pid at all is stale by definition.
|
|
337
|
+
const liveBrowser = !!meta.pid && meta.pid !== 0 && isProcessAlive(meta.pid, meta.command);
|
|
338
|
+
if (liveBrowser) {
|
|
339
|
+
details.push(`preserved live browser ${meta.pid} (profile ${profileName})`);
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
// Dead browser: clear the stale record. No signal — there is nothing there.
|
|
296
343
|
clearProfileRuntime(profileName);
|
|
344
|
+
if (meta.pid)
|
|
345
|
+
details.push(`cleared dead browser record ${meta.pid} (profile ${profileName})`);
|
|
297
346
|
}
|
|
298
347
|
return { reaped, details };
|
|
299
348
|
}
|
|
349
|
+
/**
|
|
350
|
+
* Take ownership of a runtime record after an identity-checked attach succeeded.
|
|
351
|
+
*
|
|
352
|
+
* Called from the reuse branch in `BrowserService.connectProfile`, which has just
|
|
353
|
+
* probed `/json/version` and run `verifyBrowserIdentity` against the profile's
|
|
354
|
+
* expected browser family — so by this point the process on the recorded port is
|
|
355
|
+
* proven to be ours. Only then may a new service claim it.
|
|
356
|
+
*
|
|
357
|
+
* Rewrites `daemonPid` ALONE. Every other field — `pid`, `port`, `command`,
|
|
358
|
+
* `userDataDir`, `spawnedAt`, `kind`, `tunnelPid` — is the original launch's
|
|
359
|
+
* metadata and stays exactly as recorded: this is an ownership handover, not a
|
|
360
|
+
* re-registration, and rewriting the rest would lose the provenance the reaper and
|
|
361
|
+
* the hygiene pass both read. A record that has since disappeared is left alone
|
|
362
|
+
* rather than recreated from a partial view.
|
|
363
|
+
*/
|
|
364
|
+
export function adoptProfileRuntimeOwner(profileName, daemonPid = process.pid) {
|
|
365
|
+
const meta = readProfileRuntimeMeta(profileName);
|
|
366
|
+
if (!meta)
|
|
367
|
+
return false;
|
|
368
|
+
if (meta.daemonPid === daemonPid)
|
|
369
|
+
return true;
|
|
370
|
+
const dir = getProfileRuntimeDir(profileName);
|
|
371
|
+
try {
|
|
372
|
+
fs.writeFileSync(path.join(dir, META_FILE), JSON.stringify({ ...meta, daemonPid }));
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Losing the handover is not worth failing an otherwise good attach; the next
|
|
377
|
+
// startup simply preserves the browser again and re-attaches.
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
300
381
|
/**
|
|
301
382
|
* True when ANY cache dir belonging to this profile still has a live browser or
|
|
302
383
|
* SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
|
|
@@ -478,7 +559,7 @@ function matchesCommand(pid, expectedCommand) {
|
|
|
478
559
|
* determined. The process-listing API differs per OS: Windows has no `ps`, so
|
|
479
560
|
* we query `tasklist` (CSV image name in column 1); POSIX uses `ps -o comm=`.
|
|
480
561
|
*/
|
|
481
|
-
function liveProcessCommand(pid) {
|
|
562
|
+
export function liveProcessCommand(pid) {
|
|
482
563
|
try {
|
|
483
564
|
if (process.platform === 'win32') {
|
|
484
565
|
const out = execFileSync('tasklist', ['/FI', `PID eq ${pid}`, '/NH', '/FO', 'CSV'], {
|
|
@@ -6,7 +6,7 @@ import { type ReapOptions } from './hygiene.js';
|
|
|
6
6
|
import { type RefOpts, type RefNode } from './refs.js';
|
|
7
7
|
import type { TargetFilter, PageOpenResult, ArcNativeProfileIdentity, FirefoxProfileIdentity } from './types.js';
|
|
8
8
|
import { FirefoxBiDiClient } from './drivers/firefox.js';
|
|
9
|
-
|
|
9
|
+
type UploadMode = 'auto' | 'input' | 'drop' | 'chooser';
|
|
10
10
|
export declare function resolveScreenshotOutputPath(outputPath: string | undefined, automaticPath: string): string;
|
|
11
11
|
/**
|
|
12
12
|
* Parse a `targetFilter` string into its kind + value, or return `null`
|
|
@@ -137,7 +137,7 @@ type TargetInfo = {
|
|
|
137
137
|
title?: string;
|
|
138
138
|
};
|
|
139
139
|
/** Describes a ref that was re-resolved from a drifted integer via its cached descriptor. */
|
|
140
|
-
|
|
140
|
+
interface HealInfo {
|
|
141
141
|
from: number;
|
|
142
142
|
to: number;
|
|
143
143
|
role: string;
|
|
@@ -161,7 +161,7 @@ export declare function resolveTaskIdentity(forwarded: {
|
|
|
161
161
|
launchId?: string;
|
|
162
162
|
sessionId?: string;
|
|
163
163
|
};
|
|
164
|
-
|
|
164
|
+
interface StartOptions {
|
|
165
165
|
taskName?: string;
|
|
166
166
|
url?: string;
|
|
167
167
|
endpointName?: string;
|
|
@@ -180,7 +180,7 @@ export interface StartOptions {
|
|
|
180
180
|
/** Injected reachability probe — production uses ssh; tests pass a fake. */
|
|
181
181
|
probe?: DeviceProbe;
|
|
182
182
|
}
|
|
183
|
-
|
|
183
|
+
interface StartResult {
|
|
184
184
|
task: string;
|
|
185
185
|
name: string;
|
|
186
186
|
tabId?: string;
|
|
@@ -8,7 +8,7 @@ import { assertRemoteControlAllowedForRequest } from './remote-control.js';
|
|
|
8
8
|
import { connectLocal } from './drivers/local.js';
|
|
9
9
|
import { connectSSH, shellQuote } from './drivers/ssh.js';
|
|
10
10
|
import { adoptLegacyRuntimeIfLocal, isLegacyEndpointKey, resolveBrowserTarget, shouldForkProfile, } from './resolve-target.js';
|
|
11
|
-
import { clearProfileRuntime, listProfileCacheDirs, readProfileRuntimeMeta, isProcessAlive } from './runtime-state.js';
|
|
11
|
+
import { adoptProfileRuntimeOwner, clearProfileRuntime, listProfileCacheDirs, readProfileRuntimeMeta, isProcessAlive } from './runtime-state.js';
|
|
12
12
|
import { resolveDomainSkill } from './domain-skills.js';
|
|
13
13
|
import { generateTaskId, generateShortId, asConnectionKey, parseConnectionKey, keyBelongsToProfile, } from './types.js';
|
|
14
14
|
import { reapAbandonedTasks, resolveLiveIdentities, taskOwnerIsGone, } from './hygiene.js';
|
|
@@ -1212,6 +1212,8 @@ export class BrowserService {
|
|
|
1212
1212
|
await this.saveTaskState(task.profile, conn.tasks);
|
|
1213
1213
|
return { tabId: resolvedTabId };
|
|
1214
1214
|
}
|
|
1215
|
+
requireCdp(conn, 'enumerate');
|
|
1216
|
+
await conn.cdp.send('Target.activateTarget', { targetId: task.tabs[resolvedTabId] });
|
|
1215
1217
|
task.currentTabId = resolvedTabId;
|
|
1216
1218
|
await this.saveTaskState(task.profile, conn.tasks);
|
|
1217
1219
|
return { tabId: resolvedTabId };
|
|
@@ -2771,6 +2773,12 @@ export class BrowserService {
|
|
|
2771
2773
|
await cdp.connect(wsUrl);
|
|
2772
2774
|
await this.enableDomains(cdp);
|
|
2773
2775
|
const tasks = this.loadTaskState(key);
|
|
2776
|
+
// The attach is now PROVEN: the stored port answered /json/version and
|
|
2777
|
+
// `verifyBrowserIdentity` matched the profile's browser family. Only here
|
|
2778
|
+
// may this service claim a browser the startup reaper deliberately left
|
|
2779
|
+
// alone — it rewrites `daemonPid` only, keeping the original launch's
|
|
2780
|
+
// metadata. An ambiguous identity throws above and adopts nothing.
|
|
2781
|
+
adoptProfileRuntimeOwner(key);
|
|
2774
2782
|
return {
|
|
2775
2783
|
backend: 'cdp',
|
|
2776
2784
|
cdp,
|
|
@@ -3398,6 +3406,10 @@ export class BrowserService {
|
|
|
3398
3406
|
const port = parseEndpointUrl(resolved.target)?.port ?? 9600;
|
|
3399
3407
|
try {
|
|
3400
3408
|
const ff = await connectFirefox(profile, key, port, { profileDir: profile.userDataDir });
|
|
3409
|
+
// A served port that accepted a fresh BiDi session is this profile's own
|
|
3410
|
+
// Firefox, so claim the record for this daemon (see the local-CDP claim
|
|
3411
|
+
// below for why adoption waits for a proven attach).
|
|
3412
|
+
adoptProfileRuntimeOwner(key);
|
|
3401
3413
|
const tasks = this.loadTaskState(key);
|
|
3402
3414
|
for (const [k, t] of diskTasks) {
|
|
3403
3415
|
if (!tasks.has(k))
|
|
@@ -3476,6 +3488,14 @@ export class BrowserService {
|
|
|
3476
3488
|
const cdp = new CDPClient();
|
|
3477
3489
|
await cdp.connect(wsUrl);
|
|
3478
3490
|
await this.enableDomains(cdp);
|
|
3491
|
+
// This is the path a replacement daemon takes to recover a browser its
|
|
3492
|
+
// predecessor launched, so it is where ownership actually transfers. Only
|
|
3493
|
+
// now — after `verifyBrowserIdentity` confirmed the browser family on the
|
|
3494
|
+
// recorded port and CDP is attached — is it proven that this record
|
|
3495
|
+
// describes a browser we are driving. `adoptProfileRuntimeOwner` rewrites
|
|
3496
|
+
// `daemonPid` alone; an ambiguous identity throws above and adopts
|
|
3497
|
+
// nothing, leaving the record (and the browser) untouched.
|
|
3498
|
+
adoptProfileRuntimeOwner(key);
|
|
3479
3499
|
const tasks = this.loadTaskState(key);
|
|
3480
3500
|
for (const [k, t] of diskTasks) {
|
|
3481
3501
|
if (!tasks.has(k))
|
|
@@ -15,16 +15,6 @@ export interface ProfileArtifacts {
|
|
|
15
15
|
profile: string;
|
|
16
16
|
artifacts: BrowserArtifact[];
|
|
17
17
|
}
|
|
18
|
-
/** Every capture for one profile, newest first. */
|
|
19
|
-
export declare function listProfileArtifacts(profile: string): BrowserArtifact[];
|
|
20
|
-
/**
|
|
21
|
-
* Captures grouped by profile. With `only` set, returns just that profile (even
|
|
22
|
-
* when empty); otherwise every profile dir on disk that has at least one capture.
|
|
23
|
-
*/
|
|
24
|
-
export declare function listBrowserSessions(only?: string): ProfileArtifacts[];
|
|
25
|
-
/** Per-kind counts over a flat artifact list — shared by the printed table and
|
|
26
|
-
* the interactive row labels. */
|
|
27
|
-
export declare function countByKind(artifacts: BrowserArtifact[]): Record<ArtifactKind, number>;
|
|
28
18
|
/** Human table for the CLI. Returns lines (no trailing newline). */
|
|
29
19
|
export declare function renderBrowserSessions(groups: ProfileArtifacts[]): string;
|
|
30
20
|
/**
|
|
@@ -62,7 +62,7 @@ function walkFiles(dir) {
|
|
|
62
62
|
return out;
|
|
63
63
|
}
|
|
64
64
|
/** Every capture for one profile, newest first. */
|
|
65
|
-
|
|
65
|
+
function listProfileArtifacts(profile) {
|
|
66
66
|
const root = getProfileRuntimeDir(profile);
|
|
67
67
|
const artifacts = [];
|
|
68
68
|
const sessionsRoot = path.join(root, 'sessions');
|
|
@@ -97,7 +97,7 @@ export function listProfileArtifacts(profile) {
|
|
|
97
97
|
* Captures grouped by profile. With `only` set, returns just that profile (even
|
|
98
98
|
* when empty); otherwise every profile dir on disk that has at least one capture.
|
|
99
99
|
*/
|
|
100
|
-
|
|
100
|
+
function listBrowserSessions(only) {
|
|
101
101
|
let profiles;
|
|
102
102
|
if (only) {
|
|
103
103
|
// A profile's live tasks/captures may live under a composite runtime dir
|
|
@@ -127,7 +127,7 @@ export function listBrowserSessions(only) {
|
|
|
127
127
|
}
|
|
128
128
|
/** Per-kind counts over a flat artifact list — shared by the printed table and
|
|
129
129
|
* the interactive row labels. */
|
|
130
|
-
|
|
130
|
+
function countByKind(artifacts) {
|
|
131
131
|
const counts = { screenshot: 0, pdf: 0, recording: 0, download: 0 };
|
|
132
132
|
for (const a of artifacts)
|
|
133
133
|
counts[a.kind]++;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Readable, Writable } from 'stream';
|
|
2
|
-
|
|
2
|
+
interface BrowserIPCStreamOptions {
|
|
3
3
|
input: Readable;
|
|
4
4
|
output: Writable;
|
|
5
5
|
task?: string;
|
|
@@ -14,3 +14,4 @@ export interface BrowserIPCStreamOptions {
|
|
|
14
14
|
* The Node process and daemon connection stay alive until input closes.
|
|
15
15
|
*/
|
|
16
16
|
export declare function runBrowserIPCStream(options: BrowserIPCStreamOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
interface TaskBinding {
|
|
2
2
|
device: string;
|
|
3
3
|
profile?: string;
|
|
4
4
|
url?: string;
|
|
@@ -6,9 +6,9 @@ export interface TaskBinding {
|
|
|
6
6
|
launchId?: string;
|
|
7
7
|
createdAt: number;
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
type TaskIndex = Record<string, TaskBinding>;
|
|
10
10
|
export declare const REJECT_DEVICE_MESSAGE: string;
|
|
11
|
-
|
|
11
|
+
type TaskRoute = {
|
|
12
12
|
kind: 'proceed';
|
|
13
13
|
task?: string;
|
|
14
14
|
device: string;
|
|
@@ -24,7 +24,6 @@ export type TaskRoute = {
|
|
|
24
24
|
message: string;
|
|
25
25
|
};
|
|
26
26
|
export declare function isTerminalBrowserVerb(verb: string): boolean;
|
|
27
|
-
export declare function taskIndexPath(): string;
|
|
28
27
|
export declare function readTaskIndex(): TaskIndex;
|
|
29
28
|
export declare function getTaskBinding(name: string): TaskBinding | undefined;
|
|
30
29
|
export declare function listTaskBindings(): Array<{
|
|
@@ -76,3 +75,4 @@ export declare function resolveTaskRoute(opts: {
|
|
|
76
75
|
* the captured file to the requested path. Same path → no copy.
|
|
77
76
|
*/
|
|
78
77
|
export declare function honorScreenshotOutput(requested: string | undefined, daemonPath: string): string;
|
|
78
|
+
export {};
|
|
@@ -32,7 +32,7 @@ const TERMINAL_BROWSER_VERBS = new Set(['done', 'stop']);
|
|
|
32
32
|
export function isTerminalBrowserVerb(verb) {
|
|
33
33
|
return TERMINAL_BROWSER_VERBS.has(verb);
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
function taskIndexPath() {
|
|
36
36
|
return path.join(getBrowserRuntimeDir(), 'task-index.json');
|
|
37
37
|
}
|
|
38
38
|
export function readTaskIndex() {
|
|
@@ -523,17 +523,6 @@ export interface PageOpenResult {
|
|
|
523
523
|
refreshed: boolean;
|
|
524
524
|
message?: string;
|
|
525
525
|
}
|
|
526
|
-
/** Subset of IPCResponse describing a recording start result. */
|
|
527
|
-
export interface RecordStartFields {
|
|
528
|
-
fps?: number;
|
|
529
|
-
durationCapSec?: number;
|
|
530
|
-
maxMb?: number;
|
|
531
|
-
}
|
|
532
|
-
/** Subset of IPCResponse describing a recording stop result. */
|
|
533
|
-
export interface RecordStopFields {
|
|
534
|
-
durationMs?: number;
|
|
535
|
-
stopReason?: 'manual' | 'duration-cap' | 'size-cap';
|
|
536
|
-
}
|
|
537
526
|
export interface IPCResponse {
|
|
538
527
|
ok: boolean;
|
|
539
528
|
error?: string;
|
|
@@ -635,15 +624,6 @@ export interface DeviceDescriptor {
|
|
|
635
624
|
deviceScaleFactor: number;
|
|
636
625
|
mobile: boolean;
|
|
637
626
|
}
|
|
638
|
-
export declare const TASK_ID_REGEX: RegExp;
|
|
639
627
|
export declare function isValidTaskId(id: string): boolean;
|
|
640
628
|
export declare function generateTaskId(): string;
|
|
641
629
|
export declare function generateShortId(): string;
|
|
642
|
-
export declare function generateFunName(): string;
|
|
643
|
-
/**
|
|
644
|
-
* Auto-generated task name: `<adjective>-<noun>-<noun>-<hex8>`, e.g.
|
|
645
|
-
* `swift-crab-falcon-a3f92b1c`. Three English words make it memorable and
|
|
646
|
-
* easy to read; 32 bits of hex give every spawned task enough entropy that
|
|
647
|
-
* parallel agents never collide on the daemon side.
|
|
648
|
-
*/
|
|
649
|
-
export declare function generateTaskName(): string;
|
|
@@ -49,7 +49,7 @@ export function parseConnectionKey(key) {
|
|
|
49
49
|
export function keyBelongsToProfile(key, profile) {
|
|
50
50
|
return parseConnectionKey(key).profile === profile;
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
const TASK_ID_REGEX = /^[a-z0-9][a-z0-9-]*$/;
|
|
53
53
|
export function isValidTaskId(id) {
|
|
54
54
|
return TASK_ID_REGEX.test(id) && id.length <= 64;
|
|
55
55
|
}
|
|
@@ -59,36 +59,3 @@ export function generateTaskId() {
|
|
|
59
59
|
export function generateShortId() {
|
|
60
60
|
return crypto.randomUUID().split('-')[0]; // 8 chars
|
|
61
61
|
}
|
|
62
|
-
const ADJECTIVES = [
|
|
63
|
-
'swift', 'cosmic', 'jolly', 'quiet', 'bold', 'bright', 'calm', 'eager',
|
|
64
|
-
'golden', 'happy', 'keen', 'lucky', 'noble', 'proud', 'quick', 'royal',
|
|
65
|
-
'silver', 'amber', 'crimson', 'misty', 'sunny', 'gentle', 'wild', 'brave',
|
|
66
|
-
'merry', 'sleek', 'wise', 'fierce', 'curious', 'humble', 'spry', 'witty',
|
|
67
|
-
];
|
|
68
|
-
const NOUNS = [
|
|
69
|
-
'falcon', 'comet', 'tiger', 'nebula', 'phoenix', 'river', 'summit', 'wave',
|
|
70
|
-
'aurora', 'breeze', 'crystal', 'dragon', 'ember', 'forest', 'glacier', 'harbor',
|
|
71
|
-
'crab', 'otter', 'hawk', 'fox', 'wolf', 'panda', 'lynx', 'raven',
|
|
72
|
-
'meadow', 'canyon', 'valley', 'orchid', 'cedar', 'thistle', 'lotus', 'briar',
|
|
73
|
-
];
|
|
74
|
-
export function generateFunName() {
|
|
75
|
-
const adj = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
|
|
76
|
-
const noun = NOUNS[Math.floor(Math.random() * NOUNS.length)];
|
|
77
|
-
return `${adj}-${noun}`;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Auto-generated task name: `<adjective>-<noun>-<noun>-<hex8>`, e.g.
|
|
81
|
-
* `swift-crab-falcon-a3f92b1c`. Three English words make it memorable and
|
|
82
|
-
* easy to read; 32 bits of hex give every spawned task enough entropy that
|
|
83
|
-
* parallel agents never collide on the daemon side.
|
|
84
|
-
*/
|
|
85
|
-
export function generateTaskName() {
|
|
86
|
-
const adj = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
|
|
87
|
-
const noun1 = NOUNS[Math.floor(Math.random() * NOUNS.length)];
|
|
88
|
-
let noun2 = NOUNS[Math.floor(Math.random() * NOUNS.length)];
|
|
89
|
-
while (noun2 === noun1) {
|
|
90
|
-
noun2 = NOUNS[Math.floor(Math.random() * NOUNS.length)];
|
|
91
|
-
}
|
|
92
|
-
const hex8 = crypto.randomUUID().replace(/-/g, '').slice(0, 8);
|
|
93
|
-
return `${adj}-${noun1}-${noun2}-${hex8}`;
|
|
94
|
-
}
|
|
@@ -1,32 +1,5 @@
|
|
|
1
1
|
import type { CDPClient } from './cdp.js';
|
|
2
2
|
import { type RefNode } from './refs.js';
|
|
3
|
-
/**
|
|
4
|
-
* File upload strategies for `agents browser upload`.
|
|
5
|
-
*
|
|
6
|
-
* Every uploader on the web is one of three patterns:
|
|
7
|
-
*
|
|
8
|
-
* A. Direct file input — the page exposes (or hides) `<input type=file>`.
|
|
9
|
-
* `DOM.setFileInputFiles` plants the paths directly. The cleanest
|
|
10
|
-
* path; works whenever the input is in the DOM, even when CSS-hidden
|
|
11
|
-
* or visually offscreen.
|
|
12
|
-
*
|
|
13
|
-
* B. Drag-drop target — the page listens for `drop` events on a region
|
|
14
|
-
* (Canva, Notion, Linear, GitHub PRs). We dispatch synthetic
|
|
15
|
-
* `dragenter`/`dragover`/`drop` events with a `DataTransfer` whose
|
|
16
|
-
* `files` list carries a `File` built from disk bytes. The dispatch
|
|
17
|
-
* uses real elementFromPoint coordinates so React/DOM listeners fire.
|
|
18
|
-
*
|
|
19
|
-
* C. Native chooser interception — the user clicks a button that calls
|
|
20
|
-
* `input.click()` and the only file input is dynamically created in
|
|
21
|
-
* response. `Page.setInterceptFileChooserDialog` flips the chooser
|
|
22
|
-
* from a blocking OS dialog into a CDP event; we click the trigger,
|
|
23
|
-
* wait for `Page.fileChooserOpened`, then satisfy it with
|
|
24
|
-
* `Page.handleFileChooser({ action: 'accept', files })`. Lifecycle:
|
|
25
|
-
* enable interception -> click -> wait -> accept -> disable.
|
|
26
|
-
*/
|
|
27
|
-
export interface UploadOptions {
|
|
28
|
-
files: string[];
|
|
29
|
-
}
|
|
30
3
|
export declare function getUploadStagingDir(): string;
|
|
31
4
|
export declare function stageUploadFile(source: string): string;
|
|
32
5
|
/** Pattern A — direct file input via `DOM.setFileInputFiles`. */
|
|
@@ -29,8 +29,6 @@ export interface UsageObservation {
|
|
|
29
29
|
cacheReadTokens?: number;
|
|
30
30
|
cacheCreationTokens?: number;
|
|
31
31
|
}
|
|
32
|
-
/** Default ledger path: <history>/spend/ledger.jsonl. */
|
|
33
|
-
export declare function defaultLedgerPath(): string;
|
|
34
32
|
/** Local YYYY-MM-DD for a Date (defaults to now). Local, not UTC — caps are a human-day notion. */
|
|
35
33
|
export declare function localDay(d?: Date): string;
|
|
36
34
|
/**
|
|
@@ -17,7 +17,7 @@ import * as path from 'path';
|
|
|
17
17
|
import { getHistoryDir } from '../state.js';
|
|
18
18
|
import { actualCost } from '../pricing/index.js';
|
|
19
19
|
/** Default ledger path: <history>/spend/ledger.jsonl. */
|
|
20
|
-
|
|
20
|
+
function defaultLedgerPath() {
|
|
21
21
|
return path.join(getHistoryDir(), 'spend', 'ledger.jsonl');
|
|
22
22
|
}
|
|
23
23
|
/** Local YYYY-MM-DD for a Date (defaults to now). Local, not UTC — caps are a human-day notion. */
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { CloudProvider, CloudEvent } from '../cloud/types.js';
|
|
16
16
|
import { type BreachInfo } from './enforce.js';
|
|
17
17
|
/** Result surface exposed to the caller so it can act on a mid-stream breach. */
|
|
18
|
-
|
|
18
|
+
interface CloudBudgetGate {
|
|
19
19
|
/** True once a cap crossed and cancel() was invoked. */
|
|
20
20
|
breached(): boolean;
|
|
21
21
|
breach(): BreachInfo | null;
|
|
@@ -40,3 +40,4 @@ export declare function wrapStreamWithBudgetGate(args: {
|
|
|
40
40
|
wrap: (source: AsyncIterable<CloudEvent>) => AsyncIterable<CloudEvent>;
|
|
41
41
|
gate: CloudBudgetGate;
|
|
42
42
|
} | null;
|
|
43
|
+
export {};
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { BudgetConfig } from '../types.js';
|
|
16
16
|
import type { SpendEntry } from './ledger.js';
|
|
17
17
|
/** A pre-flight cost estimate for one run. */
|
|
18
|
-
|
|
18
|
+
interface RunEstimate {
|
|
19
19
|
/** Estimated USD for this run. 0 when the model is unpriced. */
|
|
20
20
|
estUsd: number;
|
|
21
21
|
/** How the token count was derived. */
|
|
@@ -48,7 +48,7 @@ export declare function ledgerAverageTokens(agent: string, ledger: SpendEntry[])
|
|
|
48
48
|
output: number;
|
|
49
49
|
} | null;
|
|
50
50
|
/** Decision returned by the pre-flight gate. */
|
|
51
|
-
|
|
51
|
+
interface PreflightDecision {
|
|
52
52
|
/** Whether the run may proceed. */
|
|
53
53
|
allow: boolean;
|
|
54
54
|
/** Whether the caller must interactively confirm (estimate >= require_confirm_over). */
|
|
@@ -80,10 +80,8 @@ export declare function ledgerStateFor(agent: string, project: string, ledger?:
|
|
|
80
80
|
* reports the truth).
|
|
81
81
|
*/
|
|
82
82
|
export declare function enforcePreflight(cfg: BudgetConfig, state: LedgerState, est: RunEstimate): PreflightDecision;
|
|
83
|
-
/** Build a one-line human estimate banner for `agents run` preamble. */
|
|
84
|
-
export declare function formatEstimateBanner(agent: string, model: string, est: RunEstimate): string;
|
|
85
83
|
/** Result of the high-level run gate consumed by `agents run` / teams / cloud. */
|
|
86
|
-
|
|
84
|
+
interface PreflightGateResult {
|
|
87
85
|
/** True when no caps are configured — budget feature dormant, nothing to do. */
|
|
88
86
|
dormant: boolean;
|
|
89
87
|
cfg: BudgetConfig;
|
|
@@ -153,7 +153,7 @@ export function enforcePreflight(cfg, state, est) {
|
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
155
|
/** Build a one-line human estimate banner for `agents run` preamble. */
|
|
156
|
-
|
|
156
|
+
function formatEstimateBanner(agent, model, est) {
|
|
157
157
|
const cost = est.priced ? formatUsd(est.estUsd) : 'unpriced';
|
|
158
158
|
const basisLabel = est.basis === 'ledger-average'
|
|
159
159
|
? 'recent average'
|
package/dist/lib/catchup.d.ts
CHANGED
|
@@ -87,7 +87,7 @@ export declare function missedRunId(expectedAt: Date): string;
|
|
|
87
87
|
* still on the record for a human to see and re-run.
|
|
88
88
|
*/
|
|
89
89
|
export declare function claimMissedFire(job: JobConfig, expectedAt: Date): RunMeta | null;
|
|
90
|
-
|
|
90
|
+
interface CatchupOptions {
|
|
91
91
|
/** Record misses but start no late runs. Powers `catchup --dry-run`. */
|
|
92
92
|
dryRun?: boolean;
|
|
93
93
|
/** Clock injection seam for tests. */
|
|
@@ -103,3 +103,4 @@ export interface CatchupOptions {
|
|
|
103
103
|
* same routine.
|
|
104
104
|
*/
|
|
105
105
|
export declare function runCatchup(opts?: CatchupOptions): Promise<CatchupOutcome[]>;
|
|
106
|
+
export {};
|