@phnx-labs/agents-cli 1.22.39 → 1.22.41
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 +316 -0
- package/README.md +116 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +259 -0
- package/dist/commands/accounts.d.ts +20 -0
- package/dist/commands/accounts.js +186 -25
- package/dist/commands/apply.d.ts +3 -3
- package/dist/commands/apply.js +20 -63
- package/dist/commands/browser.d.ts +15 -0
- package/dist/commands/browser.js +318 -131
- package/dist/commands/budget.d.ts +7 -6
- package/dist/commands/budget.js +8 -7
- package/dist/commands/cloud.js +17 -20
- package/dist/commands/commands.js +1 -1
- package/dist/commands/computer-actions.d.ts +1 -35
- package/dist/commands/computer-actions.js +13 -181
- package/dist/commands/computer.d.ts +28 -3
- package/dist/commands/computer.js +93 -65
- package/dist/commands/config.js +16 -3
- package/dist/commands/cost.d.ts +2 -1
- package/dist/commands/cost.js +7 -6
- package/dist/commands/daemon.js +151 -4
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +19 -11
- package/dist/commands/events.js +1 -1
- package/dist/commands/exec.d.ts +2 -50
- package/dist/commands/exec.js +160 -215
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +12 -23
- package/dist/commands/fleet-capture.js +25 -27
- package/dist/commands/focus.d.ts +2 -3
- package/dist/commands/focus.js +34 -9
- package/dist/commands/go.js +15 -5
- package/dist/commands/harness.d.ts +3 -3
- package/dist/commands/harness.js +53 -5
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +2 -2
- package/dist/commands/insights.d.ts +5 -5
- package/dist/commands/insights.js +15 -9
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +4 -16
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +9 -9
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/memory.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/mine.d.ts +11 -8
- package/dist/commands/mine.js +11 -10
- package/dist/commands/models.js +1 -1
- package/dist/commands/modes.js +1 -1
- package/dist/commands/monitors.js +23 -6
- package/dist/commands/output.d.ts +7 -6
- package/dist/commands/output.js +11 -10
- package/dist/commands/packages.js +4 -4
- package/dist/commands/perf.js +1 -1
- package/dist/commands/permissions.js +49 -32
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.js +3 -3
- package/dist/commands/profiles.d.ts +6 -9
- package/dist/commands/profiles.js +8 -321
- package/dist/commands/projects.d.ts +9 -0
- package/dist/commands/projects.js +140 -8
- package/dist/commands/prune.js +5 -13
- package/dist/commands/refresh-rules.js +1 -1
- package/dist/commands/repo.d.ts +5 -7
- package/dist/commands/repo.js +34 -18
- package/dist/commands/resource-view.js +4 -0
- package/dist/commands/resume.d.ts +11 -7
- package/dist/commands/resume.js +82 -98
- package/dist/commands/route.d.ts +12 -0
- package/dist/commands/route.js +261 -0
- package/dist/commands/routines.d.ts +2 -3
- package/dist/commands/routines.js +120 -145
- package/dist/commands/rules.js +1 -1
- package/dist/commands/run-account-picker.d.ts +1 -1
- package/dist/commands/run-account-picker.js +2 -2
- package/dist/commands/run-broadcast.d.ts +21 -0
- package/dist/commands/run-broadcast.js +89 -0
- package/dist/commands/run-cloud.js +1 -1
- package/dist/commands/secrets-vault.d.ts +10 -0
- package/dist/commands/{login.js → secrets-vault.js} +34 -14
- package/dist/commands/secrets.d.ts +4 -4
- package/dist/commands/secrets.js +158 -159
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-browser.d.ts +1 -1
- package/dist/commands/sessions-browser.js +9 -5
- package/dist/commands/sessions-export.js +2 -2
- package/dist/commands/sessions-inject.js +4 -5
- package/dist/commands/sessions-migrate.js +16 -27
- package/dist/commands/sessions-picker.d.ts +14 -0
- package/dist/commands/sessions-picker.js +209 -13
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-share.d.ts +25 -0
- package/dist/commands/sessions-share.js +166 -0
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +144 -180
- package/dist/commands/setup-browser.js +1 -1
- package/dist/commands/setup-computer.js +1 -1
- package/dist/commands/setup-fleet.js +3 -0
- package/dist/commands/setup-mine.d.ts +7 -3
- package/dist/commands/setup-mine.js +13 -8
- package/dist/commands/setup-preferences.js +2 -2
- package/dist/commands/setup-secrets.js +2 -2
- package/dist/commands/setup-watchdog.js +2 -2
- package/dist/commands/setup.js +7 -2
- package/dist/commands/share.d.ts +65 -0
- package/dist/commands/share.js +253 -20
- package/dist/commands/skills.js +3 -3
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +9 -9
- package/dist/commands/ssh.d.ts +1 -1
- package/dist/commands/ssh.js +186 -64
- package/dist/commands/subagents.js +1 -1
- package/dist/commands/sync.js +24 -9
- package/dist/commands/teams.d.ts +2 -2
- package/dist/commands/teams.js +9 -18
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/trash.js +1 -1
- package/dist/commands/usage.d.ts +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +4 -14
- package/dist/commands/utils.js +6 -27
- package/dist/commands/versions.js +2 -2
- package/dist/commands/view.d.ts +9 -77
- package/dist/commands/view.js +23 -8
- package/dist/commands/watchdog.js +1 -1
- package/dist/commands/webhook.js +25 -34
- package/dist/commands/workflows.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/account-capabilities.d.ts +39 -0
- package/dist/lib/account-capabilities.js +59 -0
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +66 -0
- package/dist/lib/account-registry.js +151 -5
- package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
- package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
- package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
- package/dist/lib/{usage.js → accounting/usage.js} +11 -11
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +72 -4
- package/dist/lib/agents.js +231 -199
- package/dist/lib/answer-router.d.ts +2 -2
- package/dist/lib/ask-classifier.d.ts +1 -1
- package/dist/lib/ask-classifier.js +1 -1
- package/dist/lib/audit/log.js +1 -1
- package/dist/lib/auth-health.d.ts +1 -1
- package/dist/lib/auth-health.js +2 -2
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/caller-identity.d.ts +28 -0
- package/dist/lib/browser/caller-identity.js +156 -0
- package/dist/lib/browser/cdp.js +5 -1
- package/dist/lib/browser/chrome.js +12 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +3 -2
- package/dist/lib/browser/hygiene.d.ts +10 -2
- package/dist/lib/browser/hygiene.js +7 -4
- package/dist/lib/browser/ipc.d.ts +22 -2
- package/dist/lib/browser/ipc.js +185 -21
- package/dist/lib/browser/profiles.d.ts +69 -5
- package/dist/lib/browser/profiles.js +135 -13
- package/dist/lib/browser/remote-control.d.ts +2 -2
- package/dist/lib/browser/remote-control.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +79 -0
- package/dist/lib/browser/runtime-state.js +119 -1
- package/dist/lib/browser/service.d.ts +137 -2
- package/dist/lib/browser/service.js +492 -54
- package/dist/lib/browser/sessions-list.d.ts +2 -1
- package/dist/lib/browser/sessions-list.js +4 -13
- package/dist/lib/browser/types.d.ts +19 -1
- package/dist/lib/budget/config.js +1 -1
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/byok-usage.js +1 -1
- package/dist/lib/capabilities.js +3 -15
- package/dist/lib/catchup.d.ts +1 -1
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/host.d.ts +3 -3
- package/dist/lib/cloud/host.js +5 -5
- package/dist/lib/cloud/rush.d.ts +9 -21
- package/dist/lib/cloud/rush.js +33 -120
- package/dist/lib/cloud/types.d.ts +2 -2
- package/dist/lib/commands.js +3 -13
- package/dist/lib/computer/actions.d.ts +36 -0
- package/dist/lib/computer/actions.js +162 -0
- package/dist/lib/computer/dispatch.d.ts +2 -2
- package/dist/lib/computer/dispatch.js +2 -2
- package/dist/lib/computer/sessions-list.d.ts +3 -3
- package/dist/lib/computer/sessions-list.js +2 -2
- package/dist/lib/config-keys.d.ts +2 -1
- package/dist/lib/config-keys.js +8 -4
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +5 -2
- package/dist/lib/crabbox/lease.js +9 -1
- package/dist/lib/crabbox/runtimes.d.ts +32 -7
- package/dist/lib/crabbox/runtimes.js +72 -30
- package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
- package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
- package/dist/lib/daemon-services.d.ts +1 -1
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-ticks.d.ts +25 -0
- package/dist/lib/daemon-ticks.js +31 -1
- package/dist/lib/daemon-webhooks.d.ts +104 -0
- package/dist/lib/daemon-webhooks.js +215 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +280 -142
- package/dist/lib/devices/config-migration.d.ts +29 -34
- package/dist/lib/devices/config-migration.js +209 -130
- package/dist/lib/devices/connect.d.ts +2 -2
- package/dist/lib/devices/connect.js +2 -2
- package/dist/lib/devices/discovery-policy.d.ts +30 -0
- package/dist/lib/devices/discovery-policy.js +101 -0
- package/dist/lib/devices/fleet-inventory.js +8 -3
- package/dist/lib/devices/harness-inventory.d.ts +1 -1
- package/dist/lib/devices/harness-inventory.js +12 -3
- package/dist/lib/devices/known-hosts.js +1 -1
- package/dist/lib/devices/pool.d.ts +10 -5
- package/dist/lib/devices/pool.js +5 -7
- package/dist/lib/devices/registry.d.ts +1 -1
- package/dist/lib/devices/registry.js +1 -1
- package/dist/lib/devices/resolve-profile.d.ts +2 -2
- package/dist/lib/devices/resolve-profile.js +2 -2
- package/dist/lib/devices/resolve-target.d.ts +1 -1
- package/dist/lib/devices/resolve-target.js +4 -4
- package/dist/lib/devices/self-host.d.ts +1 -1
- package/dist/lib/devices/self-host.js +3 -3
- package/dist/lib/devices/ssh-config.d.ts +1 -1
- package/dist/lib/devices/stats-cache.js +1 -1
- package/dist/lib/devices/sync.d.ts +3 -1
- package/dist/lib/devices/sync.js +3 -3
- package/dist/lib/doctor-diff.js +4 -4
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.js +2 -2
- package/dist/lib/event-families.d.ts +1 -1
- package/dist/lib/event-stream.d.ts +1 -1
- package/dist/lib/event-stream.js +2 -2
- package/dist/lib/events-ingest.js +2 -2
- package/dist/lib/exec.d.ts +4 -4
- package/dist/lib/exec.js +11 -11
- package/dist/lib/factory/snapshot.d.ts +1 -1
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
- package/dist/lib/{activity.js → feed/activity.js} +7 -7
- package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
- package/dist/lib/{events.js → feed/events.js} +5 -5
- package/dist/lib/{feed.js → feed/feed.js} +4 -4
- package/dist/lib/feed-outcome.d.ts +1 -1
- package/dist/lib/feed-policy.d.ts +1 -1
- package/dist/lib/feed-policy.js +1 -1
- package/dist/lib/feed-post.d.ts +1 -1
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -6
- package/dist/lib/fleet/apply.js +18 -45
- package/dist/lib/fleet/auth-sync.d.ts +16 -35
- package/dist/lib/fleet/auth-sync.js +16 -75
- package/dist/lib/fleet/capture.js +8 -6
- package/dist/lib/fleet/manifest.js +23 -11
- package/dist/lib/fleet/types.d.ts +19 -7
- package/dist/lib/fleet-cache.d.ts +1 -1
- package/dist/lib/fleet-cache.js +1 -1
- package/dist/lib/format.d.ts +19 -0
- package/dist/lib/format.js +44 -1
- package/dist/lib/friction-heuristics.d.ts +1 -1
- package/dist/lib/git.d.ts +24 -1
- package/dist/lib/git.js +82 -38
- package/dist/lib/heal.js +3 -3
- package/dist/lib/hooks.d.ts +18 -0
- package/dist/lib/hooks.js +113 -1
- package/dist/lib/hosts/credentials.d.ts +30 -10
- package/dist/lib/hosts/credentials.js +38 -26
- package/dist/lib/hosts/dispatch.d.ts +3 -3
- package/dist/lib/hosts/dispatch.js +3 -3
- package/dist/lib/hosts/option.d.ts +3 -3
- package/dist/lib/hosts/option.js +7 -8
- package/dist/lib/hosts/passthrough.d.ts +17 -17
- package/dist/lib/hosts/passthrough.js +67 -50
- package/dist/lib/hosts/providers/devices.d.ts +1 -1
- package/dist/lib/hosts/providers/devices.js +1 -1
- package/dist/lib/hosts/reconcile.d.ts +1 -1
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +1 -1
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +5 -5
- package/dist/lib/hosts/registry.js +5 -5
- package/dist/lib/hosts/remote-cmd.d.ts +10 -10
- package/dist/lib/hosts/remote-cmd.js +25 -18
- package/dist/lib/hosts/remote-os.d.ts +4 -4
- package/dist/lib/hosts/remote-os.js +4 -4
- package/dist/lib/hosts/remote-session-id.d.ts +2 -2
- package/dist/lib/hosts/remote-session-id.js +2 -2
- package/dist/lib/hosts/routing-flag.d.ts +3 -3
- package/dist/lib/hosts/routing-flag.js +4 -5
- package/dist/lib/hosts/run-target.d.ts +4 -4
- package/dist/lib/hosts/run-target.js +4 -4
- package/dist/lib/hosts/session-index.d.ts +2 -2
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/session-marker.d.ts +1 -1
- package/dist/lib/hosts/session-marker.js +1 -1
- package/dist/lib/hosts/types.d.ts +2 -2
- package/dist/lib/hosts/types.js +2 -2
- package/dist/lib/import.js +1 -1
- package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
- package/dist/lib/installations/resolve.js +1 -1
- package/dist/lib/installations/strategies.js +1 -1
- package/dist/lib/installations/update.js +2 -2
- package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
- package/dist/lib/{versions.js → installations/versions.js} +51 -31
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/linear-projects.d.ts +28 -0
- package/dist/lib/linear-projects.js +30 -0
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-gc.js +1 -1
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/mcp-registry.d.ts +62 -0
- package/dist/lib/mcp-registry.js +177 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.js +124 -307
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/menubar/install-menubar.d.ts +7 -0
- package/dist/lib/menubar/install-menubar.js +24 -6
- package/dist/lib/menubar/snapshot.d.ts +7 -0
- package/dist/lib/menubar/snapshot.js +8 -6
- package/dist/lib/models.js +1 -1
- package/dist/lib/monitors/config.d.ts +12 -0
- package/dist/lib/monitors/config.js +3 -0
- package/dist/lib/monitors/dispatch.js +26 -5
- package/dist/lib/monitors/engine.js +10 -0
- package/dist/lib/monitors/sources/webhook.d.ts +1 -1
- package/dist/lib/monitors/state.d.ts +42 -0
- package/dist/lib/monitors/state.js +30 -0
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/observe-aliases.d.ts +3 -3
- package/dist/lib/observe-aliases.js +3 -21
- package/dist/lib/output/git-output.js +2 -2
- package/dist/lib/overdue.d.ts +1 -1
- package/dist/lib/overdue.js +1 -1
- package/dist/lib/permissions-registry.d.ts +65 -0
- package/dist/lib/permissions-registry.js +599 -0
- package/dist/lib/permissions.d.ts +24 -13
- package/dist/lib/permissions.js +52 -271
- package/dist/lib/picker.d.ts +16 -0
- package/dist/lib/picker.js +33 -3
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +4 -4
- package/dist/lib/platform/paths.d.ts +8 -0
- package/dist/lib/platform/paths.js +11 -0
- package/dist/lib/platform/posixpath.js +3 -3
- package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
- package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
- package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
- package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
- package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
- package/dist/lib/{skills.js → plugins/skills.js} +7 -7
- package/dist/lib/pricing/cost.d.ts +1 -1
- package/dist/lib/pricing/cost.js +1 -1
- package/dist/lib/profiles-presets.d.ts +1 -1
- package/dist/lib/profiles-presets.js +1 -1
- package/dist/lib/profiles.js +2 -2
- package/dist/lib/project-import.js +4 -1
- package/dist/lib/project-key.js +7 -0
- package/dist/lib/project-launch.d.ts +1 -1
- package/dist/lib/project-launch.js +3 -3
- package/dist/lib/project-pull.d.ts +128 -0
- package/dist/lib/project-pull.js +384 -0
- package/dist/lib/project-root.d.ts +2 -2
- package/dist/lib/project-root.js +2 -2
- package/dist/lib/project-status.js +1 -1
- package/dist/lib/projects.d.ts +23 -0
- package/dist/lib/projects.js +29 -6
- package/dist/lib/refresh.d.ts +12 -1
- package/dist/lib/refresh.js +16 -9
- package/dist/lib/registry.d.ts +9 -2
- package/dist/lib/registry.js +11 -4
- package/dist/lib/resources.d.ts +2 -2
- package/dist/lib/resources.js +2 -2
- package/dist/lib/routers.d.ts +81 -0
- package/dist/lib/routers.js +153 -0
- package/dist/lib/routine-context.d.ts +1 -0
- package/dist/lib/routine-context.js +7 -2
- package/dist/lib/routine-notify-owner.d.ts +1 -1
- package/dist/lib/routine-notify.d.ts +1 -1
- package/dist/lib/routine-notify.js +1 -1
- package/dist/lib/routine-process-cleanup.d.ts +1 -1
- package/dist/lib/routine-readiness.d.ts +1 -1
- package/dist/lib/routine-readiness.js +11 -4
- package/dist/lib/routines-placement.d.ts +12 -2
- package/dist/lib/routines-placement.js +20 -3
- package/dist/lib/routines-project.d.ts +1 -1
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +1 -0
- package/dist/lib/rules/compile.js +10 -2
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/run-notify.js +1 -1
- package/dist/lib/runner.d.ts +80 -2
- package/dist/lib/runner.js +261 -67
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
- package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.js +2 -2
- package/dist/lib/secrets/audit.js +1 -1
- package/dist/lib/secrets/bundles.d.ts +4 -4
- package/dist/lib/secrets/bundles.js +8 -8
- package/dist/lib/secrets/headless.d.ts +16 -0
- package/dist/lib/secrets/headless.js +21 -0
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.d.ts +1 -1
- package/dist/lib/secrets/list-filter.js +2 -2
- package/dist/lib/secrets/push.d.ts +1 -1
- package/dist/lib/secrets/push.js +10 -12
- package/dist/lib/secrets/remote.d.ts +21 -17
- package/dist/lib/secrets/remote.js +39 -23
- package/dist/lib/secrets/vault.js +2 -2
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/self-update.d.ts +39 -4
- package/dist/lib/self-update.js +78 -25
- package/dist/lib/serve/control.d.ts +1 -1
- package/dist/lib/serve/control.js +4 -4
- package/dist/lib/serve/data.d.ts +1 -1
- package/dist/lib/serve/data.js +1 -1
- package/dist/lib/serve/stream.js +1 -1
- package/dist/lib/service-manifest.d.ts +29 -0
- package/dist/lib/service-manifest.js +80 -0
- package/dist/lib/session/active.d.ts +59 -7
- package/dist/lib/session/active.js +158 -17
- package/dist/lib/session/bash-command.js +1 -1
- package/dist/lib/session/claude-accounts.d.ts +1 -1
- package/dist/lib/session/claude-accounts.js +1 -1
- package/dist/lib/session/db.d.ts +10 -2
- package/dist/lib/session/db.js +25 -6
- package/dist/lib/session/discover.d.ts +77 -0
- package/dist/lib/session/discover.js +130 -25
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/insights.d.ts +1 -1
- package/dist/lib/session/insights.js +1 -1
- package/dist/lib/session/live-metadata.d.ts +15 -0
- package/dist/lib/session/live-metadata.js +76 -0
- package/dist/lib/session/migrate-targets.d.ts +1 -1
- package/dist/lib/session/recovery.d.ts +1 -1
- package/dist/lib/session/recovery.js +2 -2
- package/dist/lib/session/remote-active.d.ts +10 -1
- package/dist/lib/session/remote-active.js +8 -3
- package/dist/lib/session/remote-bundle.d.ts +1 -1
- package/dist/lib/session/remote-bundle.js +2 -2
- package/dist/lib/session/remote-list.d.ts +15 -4
- package/dist/lib/session/remote-list.js +40 -3
- package/dist/lib/session/remote.d.ts +5 -5
- package/dist/lib/session/remote.js +13 -17
- package/dist/lib/session/resume-command.d.ts +3 -2
- package/dist/lib/session/resume-command.js +4 -3
- package/dist/lib/session/resume-owner.d.ts +3 -3
- package/dist/lib/session/resume-owner.js +3 -3
- package/dist/lib/session/session-cache.d.ts +12 -0
- package/dist/lib/session/session-cache.js +2 -0
- package/dist/lib/session/share-html.d.ts +55 -0
- package/dist/lib/session/share-html.js +319 -0
- package/dist/lib/session/shell-programs.js +1 -1
- package/dist/lib/session/state.js +5 -5
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/team-filter.js +1 -1
- package/dist/lib/session/types.d.ts +3 -3
- package/dist/lib/session/width.d.ts +2 -2
- package/dist/lib/session/width.js +2 -2
- package/dist/lib/settings-manifest.d.ts +2 -0
- package/dist/lib/settings-manifest.js +81 -3
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +120 -0
- package/dist/lib/share/publish.js +243 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +4 -4
- package/dist/lib/smart-launch.js +6 -4
- package/dist/lib/snapshot.d.ts +4 -4
- package/dist/lib/snapshot.js +2 -2
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +2 -2
- package/dist/lib/ssh-tunnel.d.ts +10 -10
- package/dist/lib/ssh-tunnel.js +12 -12
- package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
- package/dist/lib/staleness/checkers/hooks.js +1 -1
- package/dist/lib/staleness/detectors/permissions.js +0 -23
- package/dist/lib/staleness/detectors/plugins.js +1 -1
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/layers.d.ts +1 -1
- package/dist/lib/staleness/layers.js +1 -1
- package/dist/lib/staleness/writers/mcp.js +3 -1
- package/dist/lib/staleness/writers/plugins.js +1 -1
- package/dist/lib/staleness/writers/types.d.ts +8 -0
- package/dist/lib/startup/command-registry.d.ts +6 -147
- package/dist/lib/startup/command-registry.js +40 -303
- package/dist/lib/startup/dev-build.d.ts +0 -21
- package/dist/lib/startup/dev-build.js +29 -8
- package/dist/lib/state.d.ts +19 -1
- package/dist/lib/state.js +120 -51
- package/dist/lib/subagents.js +1 -1
- package/dist/lib/sync-status.js +1 -1
- package/dist/lib/sync-umbrella.d.ts +6 -1
- package/dist/lib/sync-umbrella.js +9 -4
- package/dist/lib/teams/agents.js +2 -2
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
- package/dist/lib/terminal/engine.js +1 -1
- package/dist/lib/terminal/index.d.ts +4 -0
- package/dist/lib/terminal/index.js +3 -0
- package/dist/lib/terminal/inject.d.ts +2 -2
- package/dist/lib/terminal/inject.js +2 -2
- package/dist/lib/terminal/transport.js +1 -1
- package/dist/lib/tmux/index.d.ts +1 -1
- package/dist/lib/tmux/index.js +1 -1
- package/dist/lib/tmux/session.d.ts +21 -5
- package/dist/lib/tmux/session.js +76 -22
- package/dist/lib/triggers/handlers.d.ts +38 -3
- package/dist/lib/triggers/handlers.js +58 -7
- package/dist/lib/triggers/webhook.d.ts +113 -5
- package/dist/lib/triggers/webhook.js +223 -44
- package/dist/lib/types.d.ts +19 -7
- package/dist/lib/usage-fleet.d.ts +1 -1
- package/dist/lib/usage-fleet.js +1 -1
- package/dist/lib/usage-refresh.d.ts +1 -1
- package/dist/lib/usage-refresh.js +3 -3
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/view-types.d.ts +56 -0
- package/dist/lib/view-types.js +1 -0
- package/dist/lib/watchdog/rotate.d.ts +2 -2
- package/dist/lib/watchdog/rotate.js +3 -3
- package/dist/lib/watchdog/runner.d.ts +2 -3
- package/dist/lib/watchdog/runner.js +3 -4
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/wrap.d.ts +33 -0
- package/dist/lib/wrap.js +70 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +2 -2
- package/dist/commands/bench.d.ts +0 -2
- package/dist/commands/bench.js +0 -101
- package/dist/commands/cp.d.ts +0 -84
- package/dist/commands/cp.js +0 -231
- package/dist/commands/login.d.ts +0 -2
- package/dist/lib/resources/commands.d.ts +0 -46
- package/dist/lib/resources/commands.js +0 -211
- package/dist/lib/resources/hooks.d.ts +0 -16
- package/dist/lib/resources/hooks.js +0 -153
- package/dist/lib/resources/mcp.d.ts +0 -34
- package/dist/lib/resources/mcp.js +0 -250
- package/dist/lib/resources/memory.d.ts +0 -15
- package/dist/lib/resources/memory.js +0 -46
- package/dist/lib/resources/permissions.d.ts +0 -13
- package/dist/lib/resources/permissions.js +0 -202
- package/dist/lib/resources/rules.d.ts +0 -46
- package/dist/lib/resources/rules.js +0 -179
- package/dist/lib/resources/skills.d.ts +0 -37
- package/dist/lib/resources/skills.js +0 -247
- package/dist/lib/resources/subagents.d.ts +0 -46
- package/dist/lib/resources/subagents.js +0 -202
- /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Consent gate for driving THIS machine's browser from another fleet machine.
|
|
3
3
|
*
|
|
4
|
-
* `browser --
|
|
4
|
+
* `browser --device <device>` routes a browser command to `<device>` over SSH (the
|
|
5
5
|
* fleet passthrough) and runs `agents browser ...` there. Every such remote
|
|
6
6
|
* invocation carries the {@link FLEET_REMOTE_ENV} marker, set once at the fleet
|
|
7
7
|
* dispatch site (`maybeRunOnHost`). A machine only accepts being driven when its
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { getConfigValue } from '../device-config.js';
|
|
16
16
|
/** Env marker set on every remote `agents` invocation by `buildRemoteAgentsInvocation`. */
|
|
17
17
|
export const FLEET_REMOTE_ENV = 'AGENTS_FLEET_REMOTE';
|
|
18
|
-
/** True when this process was dispatched to this machine by a fleet `--
|
|
18
|
+
/** True when this process was dispatched to this machine by a fleet `--device` run. */
|
|
19
19
|
export function isFleetRemoteInvocation(env = process.env) {
|
|
20
20
|
return env[FLEET_REMOTE_ENV] === '1';
|
|
21
21
|
}
|
|
@@ -42,7 +42,7 @@ export function assertRemoteControlAllowed(opts) {
|
|
|
42
42
|
if (enabled)
|
|
43
43
|
return;
|
|
44
44
|
const who = env.AGENTS_ACTOR_HOST || env.AGENTS_ACTOR || 'A fleet machine';
|
|
45
|
-
throw new Error(`${who} tried to drive this machine's browser over \`browser --
|
|
45
|
+
throw new Error(`${who} tried to drive this machine's browser over \`browser --device\`, but remote ` +
|
|
46
46
|
`browser control is off here. To allow it, run on THIS machine:\n` +
|
|
47
47
|
` agents browser remote-control on`);
|
|
48
48
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ProfileScope } from './profiles.js';
|
|
1
2
|
/**
|
|
2
3
|
* Per-profile runtime files we persist under
|
|
3
4
|
* `~/.agents/.cache/browser/<composite>/`:
|
|
@@ -114,3 +115,81 @@ export declare function reapOrphanedProcesses(): {
|
|
|
114
115
|
reaped: number;
|
|
115
116
|
details: string[];
|
|
116
117
|
};
|
|
118
|
+
/**
|
|
119
|
+
* True when ANY cache dir belonging to this profile still has a live browser or
|
|
120
|
+
* SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
|
|
121
|
+
* one profile can own several runtime dirs, so checking only
|
|
122
|
+
* `getProfileRuntimeDir(name)` would miss a running composite — and prune must
|
|
123
|
+
* never remove a profile that is in use.
|
|
124
|
+
*
|
|
125
|
+
* A recorded `pid: 0` means "attached to a browser someone else launched", so it
|
|
126
|
+
* is not our process to protect; an open task on that dir still counts as in use.
|
|
127
|
+
*/
|
|
128
|
+
export declare function isProfileInUse(profileName: string): boolean;
|
|
129
|
+
/** Why a profile is considered dead. */
|
|
130
|
+
export type PruneReason = 'binary-missing' | 'never-used';
|
|
131
|
+
export interface PruneCandidate {
|
|
132
|
+
name: string;
|
|
133
|
+
scope: ProfileScope;
|
|
134
|
+
reason: PruneReason;
|
|
135
|
+
/** Cache dirs that would be removed along with the config entry. */
|
|
136
|
+
cacheDirs: string[];
|
|
137
|
+
}
|
|
138
|
+
export interface PrunePlan {
|
|
139
|
+
/** Profiles that would be (or were) removed. */
|
|
140
|
+
candidates: PruneCandidate[];
|
|
141
|
+
/** Profiles deliberately left alone, with the guard that kept them. */
|
|
142
|
+
kept: Array<{
|
|
143
|
+
name: string;
|
|
144
|
+
scope: ProfileScope;
|
|
145
|
+
why: string;
|
|
146
|
+
}>;
|
|
147
|
+
}
|
|
148
|
+
export declare const PRUNE_REASON_TEXT: Record<PruneReason, string>;
|
|
149
|
+
/**
|
|
150
|
+
* Decide which browser profiles are dead, WITHOUT touching anything.
|
|
151
|
+
* `pruneProfiles` executes exactly this plan, so `--dry-run` and the real run
|
|
152
|
+
* can never disagree.
|
|
153
|
+
*
|
|
154
|
+
* Dead means one of {@link PruneReason}: the configured browser cannot launch
|
|
155
|
+
* here at all, or the profile has never been started so nothing on this disk
|
|
156
|
+
* refers to it. That second reason is what actually reclaims agent-minted
|
|
157
|
+
* throwaway profiles (RUSH-2716) — they are created for an installed browser, so
|
|
158
|
+
* only "never started" identifies them.
|
|
159
|
+
*
|
|
160
|
+
* Four guards, and each exists because removing that profile would be wrong
|
|
161
|
+
* rather than merely tidy:
|
|
162
|
+
* - **in use** — a live browser, SSH tunnel, or open task on any of its dirs.
|
|
163
|
+
* - **the configured default** — this machine resolves a bare
|
|
164
|
+
* `agents browser start` to it; removing it breaks that command.
|
|
165
|
+
* - **`default`** — auto-regenerated by `ensureDefaultBrowserProfile`, so
|
|
166
|
+
* pruning it is pure churn.
|
|
167
|
+
* - **fleet-synced** — deleting one removes it from EVERY machine, so it takes
|
|
168
|
+
* the explicit `includeFleet` opt-in.
|
|
169
|
+
*
|
|
170
|
+
* Known limitation: `BrowserProfileConfig` records no creation time, so a
|
|
171
|
+
* profile created seconds ago and not yet started is indistinguishable from an
|
|
172
|
+
* abandoned one and is reported `never-used`. That is why the verb is explicit
|
|
173
|
+
* and `--dry-run` exists.
|
|
174
|
+
*/
|
|
175
|
+
export declare function planProfilePrune(profiles: Array<{
|
|
176
|
+
name: string;
|
|
177
|
+
scope: ProfileScope;
|
|
178
|
+
launchableHere: boolean;
|
|
179
|
+
}>, opts?: {
|
|
180
|
+
includeFleet?: boolean;
|
|
181
|
+
configuredDefault?: string;
|
|
182
|
+
}): PrunePlan;
|
|
183
|
+
/**
|
|
184
|
+
* Build the prune plan from live config. Split from {@link planProfilePrune} so
|
|
185
|
+
* the decision rules stay unit-testable without a configured machine.
|
|
186
|
+
*/
|
|
187
|
+
export declare function buildProfilePrunePlan(opts?: {
|
|
188
|
+
includeFleet?: boolean;
|
|
189
|
+
}): Promise<PrunePlan>;
|
|
190
|
+
/**
|
|
191
|
+
* Execute a prune plan: drop each candidate's config entry and wipe its cache
|
|
192
|
+
* dirs. Returns the plan that was applied so the caller can report exactly what
|
|
193
|
+
* went, matching what `--dry-run` printed.
|
|
194
|
+
*/
|
|
195
|
+
export declare function pruneProfiles(plan: PrunePlan): Promise<PrunePlan>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { execFileSync } from 'child_process';
|
|
4
|
-
import { getProfileRuntimeDir, getBrowserRuntimeDir } from './profiles.js';
|
|
4
|
+
import { getProfileRuntimeDir, getBrowserRuntimeDir, listProfilesWithScope, getConfiguredDefaultProfileName, isProfileLaunchableHere, deleteProfile, DEFAULT_BROWSER_PROFILE_NAME, } from './profiles.js';
|
|
5
5
|
const PID_FILE = 'pid';
|
|
6
6
|
const PORT_FILE = 'port';
|
|
7
7
|
const COMMAND_FILE = 'command';
|
|
@@ -247,6 +247,124 @@ export function reapOrphanedProcesses() {
|
|
|
247
247
|
}
|
|
248
248
|
return { reaped, details };
|
|
249
249
|
}
|
|
250
|
+
/**
|
|
251
|
+
* True when ANY cache dir belonging to this profile still has a live browser or
|
|
252
|
+
* SSH tunnel, or an open task. The composite naming (`<name>@<endpoint>`) means
|
|
253
|
+
* one profile can own several runtime dirs, so checking only
|
|
254
|
+
* `getProfileRuntimeDir(name)` would miss a running composite — and prune must
|
|
255
|
+
* never remove a profile that is in use.
|
|
256
|
+
*
|
|
257
|
+
* A recorded `pid: 0` means "attached to a browser someone else launched", so it
|
|
258
|
+
* is not our process to protect; an open task on that dir still counts as in use.
|
|
259
|
+
*/
|
|
260
|
+
export function isProfileInUse(profileName) {
|
|
261
|
+
for (const dir of listProfileCacheDirs(profileName)) {
|
|
262
|
+
const entry = path.basename(dir);
|
|
263
|
+
if (readTaskCount(dir) > 0)
|
|
264
|
+
return true;
|
|
265
|
+
const meta = readProfileRuntimeMeta(entry);
|
|
266
|
+
if (!meta)
|
|
267
|
+
continue;
|
|
268
|
+
if (meta.pid && isProcessAlive(meta.pid, meta.command))
|
|
269
|
+
return true;
|
|
270
|
+
if (meta.tunnelPid && isProcessAlive(meta.tunnelPid, 'ssh'))
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
export const PRUNE_REASON_TEXT = {
|
|
276
|
+
'binary-missing': 'its browser/binary is not installed on this machine',
|
|
277
|
+
'never-used': 'it has never been started (no runtime dir)',
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Decide which browser profiles are dead, WITHOUT touching anything.
|
|
281
|
+
* `pruneProfiles` executes exactly this plan, so `--dry-run` and the real run
|
|
282
|
+
* can never disagree.
|
|
283
|
+
*
|
|
284
|
+
* Dead means one of {@link PruneReason}: the configured browser cannot launch
|
|
285
|
+
* here at all, or the profile has never been started so nothing on this disk
|
|
286
|
+
* refers to it. That second reason is what actually reclaims agent-minted
|
|
287
|
+
* throwaway profiles (RUSH-2716) — they are created for an installed browser, so
|
|
288
|
+
* only "never started" identifies them.
|
|
289
|
+
*
|
|
290
|
+
* Four guards, and each exists because removing that profile would be wrong
|
|
291
|
+
* rather than merely tidy:
|
|
292
|
+
* - **in use** — a live browser, SSH tunnel, or open task on any of its dirs.
|
|
293
|
+
* - **the configured default** — this machine resolves a bare
|
|
294
|
+
* `agents browser start` to it; removing it breaks that command.
|
|
295
|
+
* - **`default`** — auto-regenerated by `ensureDefaultBrowserProfile`, so
|
|
296
|
+
* pruning it is pure churn.
|
|
297
|
+
* - **fleet-synced** — deleting one removes it from EVERY machine, so it takes
|
|
298
|
+
* the explicit `includeFleet` opt-in.
|
|
299
|
+
*
|
|
300
|
+
* Known limitation: `BrowserProfileConfig` records no creation time, so a
|
|
301
|
+
* profile created seconds ago and not yet started is indistinguishable from an
|
|
302
|
+
* abandoned one and is reported `never-used`. That is why the verb is explicit
|
|
303
|
+
* and `--dry-run` exists.
|
|
304
|
+
*/
|
|
305
|
+
export function planProfilePrune(profiles, opts = {}) {
|
|
306
|
+
const plan = { candidates: [], kept: [] };
|
|
307
|
+
for (const { name, scope, launchableHere } of profiles) {
|
|
308
|
+
const keep = (why) => { plan.kept.push({ name, scope, why }); };
|
|
309
|
+
if (scope === 'fleet' && !opts.includeFleet) {
|
|
310
|
+
keep('fleet-synced (pass --fleet to include it)');
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (name === DEFAULT_BROWSER_PROFILE_NAME) {
|
|
314
|
+
keep('the auto-detected default profile');
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
if (opts.configuredDefault && name === opts.configuredDefault) {
|
|
318
|
+
keep("this machine's configured default profile");
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (isProfileInUse(name)) {
|
|
322
|
+
keep('in use (live browser, tunnel, or open task)');
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
const cacheDirs = listProfileCacheDirs(name);
|
|
326
|
+
if (!launchableHere) {
|
|
327
|
+
plan.candidates.push({ name, scope, reason: 'binary-missing', cacheDirs });
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (cacheDirs.length === 0) {
|
|
331
|
+
plan.candidates.push({ name, scope, reason: 'never-used', cacheDirs });
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
keep('healthy (browser installed, has runtime state)');
|
|
335
|
+
}
|
|
336
|
+
return plan;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Build the prune plan from live config. Split from {@link planProfilePrune} so
|
|
340
|
+
* the decision rules stay unit-testable without a configured machine.
|
|
341
|
+
*/
|
|
342
|
+
export async function buildProfilePrunePlan(opts = {}) {
|
|
343
|
+
const scoped = await listProfilesWithScope();
|
|
344
|
+
return planProfilePrune(scoped.map(({ profile, scope }) => ({
|
|
345
|
+
name: profile.name,
|
|
346
|
+
scope,
|
|
347
|
+
launchableHere: isProfileLaunchableHere(profile),
|
|
348
|
+
})), { includeFleet: opts.includeFleet, configuredDefault: getConfiguredDefaultProfileName() });
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Execute a prune plan: drop each candidate's config entry and wipe its cache
|
|
352
|
+
* dirs. Returns the plan that was applied so the caller can report exactly what
|
|
353
|
+
* went, matching what `--dry-run` printed.
|
|
354
|
+
*/
|
|
355
|
+
export async function pruneProfiles(plan) {
|
|
356
|
+
for (const candidate of plan.candidates) {
|
|
357
|
+
await deleteProfile(candidate.name);
|
|
358
|
+
for (const dir of candidate.cacheDirs) {
|
|
359
|
+
try {
|
|
360
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
361
|
+
}
|
|
362
|
+
catch { /* already gone */ }
|
|
363
|
+
}
|
|
364
|
+
removeProfileCache(candidate.name);
|
|
365
|
+
}
|
|
366
|
+
return plan;
|
|
367
|
+
}
|
|
250
368
|
function matchesCommand(pid, expectedCommand) {
|
|
251
369
|
const out = liveProcessCommand(pid);
|
|
252
370
|
if (!out)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CDPClient } from './cdp.js';
|
|
1
2
|
import { type ResolvedDomainSkill } from './domain-skills.js';
|
|
2
|
-
import { type Task, type TabInfo, type ProfileStatus, type HistoricalTask, type ReapResult } from './types.js';
|
|
3
|
+
import { type Task, type TabInfo, type ProfileStatus, type BrowserType, type HistoricalTask, type ReapResult } from './types.js';
|
|
3
4
|
import { type ReapOptions } from './hygiene.js';
|
|
4
5
|
import { type RefOpts, type RefNode } from './refs.js';
|
|
5
6
|
import type { TargetFilter } from './types.js';
|
|
@@ -44,6 +45,76 @@ export declare function pickWindowTarget<T extends {
|
|
|
44
45
|
export declare function parseSinceUntil(s: string): Date;
|
|
45
46
|
export declare function readNewestMatchingRemoteFileCommand(dir: string, prefix: string, tailLines: number): string;
|
|
46
47
|
export declare function readNewestMatchingFile(dir: string, prefix: string, tailLines: number): string;
|
|
48
|
+
interface ProfileConnection {
|
|
49
|
+
cdp: CDPClient;
|
|
50
|
+
port: number;
|
|
51
|
+
pid: number;
|
|
52
|
+
electron?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* The profile's declared browser family. Load-bearing for Arc: Arc answers
|
|
55
|
+
* `Browser.getVersion` but exposes zero CDP page targets and CRASHES on
|
|
56
|
+
* `Target.createTarget` (verified live, PR #2778), so any tab-creating path
|
|
57
|
+
* must refuse rather than crash the user's Arc. See `createPageTarget`.
|
|
58
|
+
*/
|
|
59
|
+
browserType?: BrowserType;
|
|
60
|
+
/** Raw `url:<v>` / `title:<v>` filter copied from the profile config. */
|
|
61
|
+
targetFilter?: string;
|
|
62
|
+
/**
|
|
63
|
+
* The composite key this connection is registered under in `this.connections`
|
|
64
|
+
* (`<profile>` / `<profile>@<endpoint>` / `<profile>.<fork>`). It is the same
|
|
65
|
+
* name used to key the profile's runtime dir, so downloads and session
|
|
66
|
+
* captures land under `.cache/browser/<profileName>/`. Set at registration.
|
|
67
|
+
*/
|
|
68
|
+
profileName?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Bare YAML profile name without the `@<endpoint>` suffix. Kept so
|
|
71
|
+
* `status --profile comet-local` matches the composite connection key
|
|
72
|
+
* `comet-local@endpoint-0` without prefix-matching wrong browsers.
|
|
73
|
+
*/
|
|
74
|
+
bareName?: string;
|
|
75
|
+
forkedFrom?: string;
|
|
76
|
+
tasks: Map<string, Task>;
|
|
77
|
+
windowId?: string;
|
|
78
|
+
targetCache?: {
|
|
79
|
+
targets: TargetInfo[];
|
|
80
|
+
ts: number;
|
|
81
|
+
};
|
|
82
|
+
sessionCache: Map<string, string>;
|
|
83
|
+
/**
|
|
84
|
+
* Connection-specific teardown (e.g. killing the SSH tunnel for an ssh://
|
|
85
|
+
* profile). Must be called whenever the connection is removed from
|
|
86
|
+
* `this.connections`, otherwise the tunnel leaks across daemon restarts
|
|
87
|
+
* and hijacks future `cdp://127.0.0.1:N` profiles on the same local port.
|
|
88
|
+
*/
|
|
89
|
+
cleanup?: () => void;
|
|
90
|
+
}
|
|
91
|
+
/** Join error lines so callers get a next command, not a dead-end message. */
|
|
92
|
+
export declare function actionable(...lines: string[]): string;
|
|
93
|
+
/**
|
|
94
|
+
* Arc answers `Browser.getVersion` (so a connection succeeds) but exposes zero
|
|
95
|
+
* CDP page targets via every discovery method and CRASHES when a new tab is
|
|
96
|
+
* requested via `Target.createTarget` (verified live, PR #2778). It is therefore
|
|
97
|
+
* not drivable. This is the single clear, actionable error every tab-creating
|
|
98
|
+
* path throws instead of crashing the user's Arc window.
|
|
99
|
+
*/
|
|
100
|
+
export declare function arcNotDrivableError(profileName?: string): Error;
|
|
101
|
+
/** Derive a human label from an explicit title or a navigated URL. */
|
|
102
|
+
export declare function deriveTaskLabel(opts: {
|
|
103
|
+
title?: string;
|
|
104
|
+
url?: string;
|
|
105
|
+
existing?: string;
|
|
106
|
+
}): string;
|
|
107
|
+
/**
|
|
108
|
+
* True when `key` is the bare profile name or one of its composite endpoint
|
|
109
|
+
* keys (`name@endpoint`). Used by status/stop so `comet-local` matches
|
|
110
|
+
* `comet-local@endpoint-0`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function connectionKeyMatchesProfile(key: string, profileName: string): boolean;
|
|
113
|
+
type TargetInfo = {
|
|
114
|
+
targetId: string;
|
|
115
|
+
url?: string;
|
|
116
|
+
title?: string;
|
|
117
|
+
};
|
|
47
118
|
/** Describes a ref that was re-resolved from a drifted integer via its cached descriptor. */
|
|
48
119
|
export interface HealInfo {
|
|
49
120
|
from: number;
|
|
@@ -94,6 +165,8 @@ export declare class BrowserService {
|
|
|
94
165
|
launchId?: string;
|
|
95
166
|
/** Calling agent session, forwarded from the CLI (see IPCRequest.sessionId). */
|
|
96
167
|
sessionId?: string;
|
|
168
|
+
/** Explicit human label (`--title`). */
|
|
169
|
+
title?: string;
|
|
97
170
|
}): Promise<{
|
|
98
171
|
task: string;
|
|
99
172
|
name: string;
|
|
@@ -264,6 +337,7 @@ export declare class BrowserService {
|
|
|
264
337
|
};
|
|
265
338
|
status(profileName?: string): Promise<ProfileStatus[]>;
|
|
266
339
|
private reconcileFromDisk;
|
|
340
|
+
private profileStatusFromDisk;
|
|
267
341
|
setViewport(taskId: string, width: number, height: number, options?: {
|
|
268
342
|
mobile?: boolean;
|
|
269
343
|
deviceScaleFactor?: number;
|
|
@@ -333,9 +407,47 @@ export declare class BrowserService {
|
|
|
333
407
|
private connectProfile;
|
|
334
408
|
private connectEndpoint;
|
|
335
409
|
private enableDomains;
|
|
410
|
+
/**
|
|
411
|
+
* The single path that opens a new CDP page/window target. It exists so the
|
|
412
|
+
* Arc guard lives in exactly one place: `Target.createTarget` crashes Arc
|
|
413
|
+
* (verified, PR #2778), so an Arc connection throws a clear, actionable error
|
|
414
|
+
* here instead of every call site re-checking. Every drivable Chromium-family
|
|
415
|
+
* browser goes straight through.
|
|
416
|
+
*/
|
|
417
|
+
private createPageTarget;
|
|
336
418
|
private getOrCreateWindow;
|
|
337
419
|
private hasTaskNamed;
|
|
338
|
-
|
|
420
|
+
/** Map key for a task on a connection (tasks are keyed by `name`). */
|
|
421
|
+
private taskMapKey;
|
|
422
|
+
/** Find a task by map key, id, or name on one connection. */
|
|
423
|
+
private lookupTaskOnConn;
|
|
424
|
+
private maybeUpdateLabelFromUrl;
|
|
425
|
+
/**
|
|
426
|
+
* Resolve a task for a page/close verb.
|
|
427
|
+
*
|
|
428
|
+
* - explicit `task` handle → look up (with disk rehydrate on RAM miss)
|
|
429
|
+
* - no handle, exactly one live task for this caller → use it
|
|
430
|
+
* - no handle, multiple for this caller → error listing them + `--task`
|
|
431
|
+
* - no handle, zero for this caller, createIfMissing → start a new task
|
|
432
|
+
* - no handle, zero, !createIfMissing → return null (caller reports "nothing to close")
|
|
433
|
+
*/
|
|
434
|
+
resolveOrCreateTask(opts: {
|
|
435
|
+
task?: string;
|
|
436
|
+
profile?: string;
|
|
437
|
+
actor?: string;
|
|
438
|
+
launchId?: string;
|
|
439
|
+
sessionId?: string;
|
|
440
|
+
createIfMissing: boolean;
|
|
441
|
+
title?: string;
|
|
442
|
+
url?: string;
|
|
443
|
+
}): Promise<{
|
|
444
|
+
conn: ProfileConnection;
|
|
445
|
+
task: Task;
|
|
446
|
+
profileName: string;
|
|
447
|
+
created: boolean;
|
|
448
|
+
} | null>;
|
|
449
|
+
private listTasksForCaller;
|
|
450
|
+
private currentUrlHint;
|
|
339
451
|
/**
|
|
340
452
|
* Mark a task as active, so the reaper's idle window measures time since the
|
|
341
453
|
* last real use rather than time since `start` (RUSH-2622).
|
|
@@ -356,6 +468,28 @@ export declare class BrowserService {
|
|
|
356
468
|
*/
|
|
357
469
|
private touchTask;
|
|
358
470
|
private findTask;
|
|
471
|
+
/**
|
|
472
|
+
* Soft-attach to an already-running browser for a runtime dir.
|
|
473
|
+
*
|
|
474
|
+
* Never launches a browser and never clears pid/port files on failure —
|
|
475
|
+
* `connectProfile` does both, which made `status()` wipe disk state when
|
|
476
|
+
* CDP was unreachable (CI / post-reaper) and then return an empty list.
|
|
477
|
+
* Returns null when nothing is speaking CDP so callers can fall through
|
|
478
|
+
* to disk reconcile.
|
|
479
|
+
*/
|
|
480
|
+
private attachRunningProfile;
|
|
481
|
+
/**
|
|
482
|
+
* Reconnect every profile runtime dir that still has a live browser and
|
|
483
|
+
* tasks.json entries. Used before identity-based resolution so a daemon
|
|
484
|
+
* restart does not make the caller's tasks invisible.
|
|
485
|
+
*/
|
|
486
|
+
private rehydrateAllFromDisk;
|
|
487
|
+
/**
|
|
488
|
+
* On a RAM miss, scan profile runtime dirs for a tasks.json entry matching
|
|
489
|
+
* `taskId`, soft-attach when CDP is still up, and register the connection.
|
|
490
|
+
* Does not launch browsers or clear runtime files.
|
|
491
|
+
*/
|
|
492
|
+
private rehydrateTaskFromDisk;
|
|
359
493
|
private getTabsForTask;
|
|
360
494
|
private getProfileStatus;
|
|
361
495
|
private getTarget;
|
|
@@ -366,3 +500,4 @@ export declare class BrowserService {
|
|
|
366
500
|
private saveToHistory;
|
|
367
501
|
getHistory(limit?: number): Promise<HistoricalTask[]>;
|
|
368
502
|
}
|
|
503
|
+
export {};
|