@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
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-driven tool-activity collector — the thing that makes the rows in
|
|
3
|
+
* `tools.ts` reach the feed stream without a poll.
|
|
4
|
+
*
|
|
5
|
+
* THE COST THIS EXISTS TO AVOID. A status surface that wants "which browser
|
|
6
|
+
* tasks and computer runs are there right now" has, until this module, one way
|
|
7
|
+
* to ask: run `agents browser sessions --json` and `agents computer sessions
|
|
8
|
+
* --json`, per device, on a timer. Two subprocesses per tool per device per
|
|
9
|
+
* tick, each paying a full CLI boot, to answer "nothing changed" almost every
|
|
10
|
+
* time. A menu bar at a one-minute cadence over a ten-device fleet is 1,200
|
|
11
|
+
* process spawns an hour for, typically, zero new rows.
|
|
12
|
+
*
|
|
13
|
+
* WHAT REPLACES IT. The two sources are files on the machine that owns them:
|
|
14
|
+
* the browser runtime tree (task index + capture dirs) and the event ledger
|
|
15
|
+
* that `computer.action` appends to. This collector watches those roots, and
|
|
16
|
+
* re-projects ONLY when one of them reports a change. A warm idle does no work
|
|
17
|
+
* at all: no directory read, no subprocess, no emission. When something does
|
|
18
|
+
* change it re-projects and emits the DIFF — the changed rows and the vanished
|
|
19
|
+
* row keys — never a full snapshot, so a single new screenshot costs one
|
|
20
|
+
* `tool.upsert`.
|
|
21
|
+
*
|
|
22
|
+
* WHEN THE WATCHERS CANNOT ARM (an unsupported filesystem, a root that does not
|
|
23
|
+
* exist yet) the collector says so on `armed` and re-projects on the bounded
|
|
24
|
+
* sweep cadence instead. That is a stated degradation, not a silent one: a
|
|
25
|
+
* caller can surface it, and the diff shape is identical either way.
|
|
26
|
+
*/
|
|
27
|
+
import * as fs from 'node:fs';
|
|
28
|
+
import * as path from 'node:path';
|
|
29
|
+
import { getBrowserRuntimeDir } from '../state.js';
|
|
30
|
+
import { getEventsDir } from './events.js';
|
|
31
|
+
import { listTaskBindings } from '../browser/task-index.js';
|
|
32
|
+
import { buildBrowserSessionRows } from '../browser/sessions-list.js';
|
|
33
|
+
import { buildComputerSessionRows, standaloneComputerActionsDir } from '../computer/sessions-list.js';
|
|
34
|
+
import { boundBrowserRow, projectBrowserToolRow, projectComputerToolRow, sortToolRows } from './tools.js';
|
|
35
|
+
/** Re-projection cadence used only while no directory watcher could arm. */
|
|
36
|
+
export const TOOL_SWEEP_MS = 5_000;
|
|
37
|
+
/** Computer ledger rows read per projection. Bounds the newest-first window. */
|
|
38
|
+
const TOOL_COMPUTER_LIMIT = 500;
|
|
39
|
+
/**
|
|
40
|
+
* Project every browser task and computer run this machine knows about into
|
|
41
|
+
* canonical tool rows, newest first. Impure by design — the three readers are
|
|
42
|
+
* injectable so a test drives real temp stores rather than a mocked service.
|
|
43
|
+
*/
|
|
44
|
+
export function collectToolRows(scope, sources = {}) {
|
|
45
|
+
let complete = true;
|
|
46
|
+
const read = (source, empty) => {
|
|
47
|
+
try {
|
|
48
|
+
return source();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
complete = false;
|
|
52
|
+
return empty;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const bindings = new Map();
|
|
56
|
+
for (const binding of read(sources.bindings ?? listTaskBindings, []))
|
|
57
|
+
bindings.set(binding.name, binding);
|
|
58
|
+
const liveTasks = new Map();
|
|
59
|
+
for (const task of read(sources.liveTasks ?? (() => readLiveBrowserTasks()), []))
|
|
60
|
+
liveTasks.set(task.task, task);
|
|
61
|
+
const rows = [];
|
|
62
|
+
const browserRows = read(sources.browserRows ?? (() => buildBrowserSessionRows()), []);
|
|
63
|
+
const captured = new Set();
|
|
64
|
+
for (const row of browserRows) {
|
|
65
|
+
if (row.task)
|
|
66
|
+
captured.add(row.task);
|
|
67
|
+
rows.push(projectBrowserToolRow(scope, row, row.task ? bindings.get(row.task) : undefined, row.task ? liveTasks.get(row.task) : undefined));
|
|
68
|
+
}
|
|
69
|
+
// Neither the capture tree nor the task index alone answers "which tasks exist".
|
|
70
|
+
// `tasks.json` is the live authority (and the only source of tabs); the task
|
|
71
|
+
// index additionally routes a task whose browser runs on ANOTHER device, which
|
|
72
|
+
// has no local live record. A task bound a second ago is live and closable with
|
|
73
|
+
// no capture to its name, and deriving rows from captures alone hid exactly that.
|
|
74
|
+
for (const task of new Set([...liveTasks.keys(), ...bindings.keys()])) {
|
|
75
|
+
if (captured.has(task))
|
|
76
|
+
continue;
|
|
77
|
+
const binding = bindings.get(task);
|
|
78
|
+
const live = liveTasks.get(task);
|
|
79
|
+
rows.push(projectBrowserToolRow(scope, boundBrowserRow(task, live ?? binding ?? {}), binding, live));
|
|
80
|
+
}
|
|
81
|
+
const computerRows = read(sources.computerRows ?? (() => buildComputerSessionRows({ limit: TOOL_COMPUTER_LIMIT, observer: scope })), []);
|
|
82
|
+
for (const row of computerRows)
|
|
83
|
+
rows.push(projectComputerToolRow(scope, row));
|
|
84
|
+
return { rows: sortToolRows(rows), complete };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Holds the last projected row set and answers "what changed?".
|
|
88
|
+
*
|
|
89
|
+
* Row identity is the projection's own `rowKey`, so a browser task that gains a
|
|
90
|
+
* capture upserts under the same key, and a closed task — gone from both the
|
|
91
|
+
* index and the capture tree — comes back as a remove.
|
|
92
|
+
*/
|
|
93
|
+
export class ToolRowSet {
|
|
94
|
+
rows = new Map();
|
|
95
|
+
/** The diff from the current set to `next`, and adopt `next` as current. */
|
|
96
|
+
diff(next) {
|
|
97
|
+
const upserts = [];
|
|
98
|
+
const seen = new Set();
|
|
99
|
+
for (const row of next) {
|
|
100
|
+
seen.add(row.rowKey);
|
|
101
|
+
const serialized = JSON.stringify(row);
|
|
102
|
+
if (this.rows.get(row.rowKey) === serialized)
|
|
103
|
+
continue;
|
|
104
|
+
this.rows.set(row.rowKey, serialized);
|
|
105
|
+
upserts.push(row);
|
|
106
|
+
}
|
|
107
|
+
const removes = [];
|
|
108
|
+
for (const key of [...this.rows.keys()]) {
|
|
109
|
+
if (seen.has(key))
|
|
110
|
+
continue;
|
|
111
|
+
this.rows.delete(key);
|
|
112
|
+
removes.push(key);
|
|
113
|
+
}
|
|
114
|
+
return { upserts, removes };
|
|
115
|
+
}
|
|
116
|
+
/** Adopt `rows` as the current set without emitting a diff (a reset). */
|
|
117
|
+
reset(rows) {
|
|
118
|
+
this.rows.clear();
|
|
119
|
+
for (const row of rows)
|
|
120
|
+
this.rows.set(row.rowKey, JSON.stringify(row));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The directory roots whose contents back the tool rows.
|
|
125
|
+
*
|
|
126
|
+
* The standalone computer ledger is its OWN root: the engine writes there
|
|
127
|
+
* directly, without going through agents-cli, so nothing under the event-ledger
|
|
128
|
+
* or browser roots changes when an operator runs `computer` by hand. Omitting it
|
|
129
|
+
* meant those actions were only ever noticed on a sweep triggered by unrelated
|
|
130
|
+
* activity.
|
|
131
|
+
*/
|
|
132
|
+
export function toolWatchRoots() {
|
|
133
|
+
return [getBrowserRuntimeDir(), getEventsDir(), standaloneComputerActionsDir()];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* One profile's live task records, with the tabs each task addresses.
|
|
137
|
+
*
|
|
138
|
+
* THROWS on a read it cannot trust. An absent `tasks.json` is the ordinary "no
|
|
139
|
+
* live browser on this profile" case and returns nothing — but EACCES, EMFILE, a
|
|
140
|
+
* truncated file or malformed JSON are failures, and swallowing them returned an
|
|
141
|
+
* empty list that is indistinguishable from "every task closed". The caller then
|
|
142
|
+
* published a remove for every live row. Failing loud here is what lets
|
|
143
|
+
* `collectToolRows` mark the projection incomplete and PRESERVE the rows it has.
|
|
144
|
+
*/
|
|
145
|
+
function readLiveTasksFor(profileDir) {
|
|
146
|
+
const file = path.join(profileDir, 'tasks.json');
|
|
147
|
+
let raw;
|
|
148
|
+
try {
|
|
149
|
+
raw = fs.readFileSync(file, 'utf8');
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
// Only "it isn't there" is benign. Anything else is a read we cannot trust.
|
|
153
|
+
if (error.code === 'ENOENT')
|
|
154
|
+
return [];
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
let parsed;
|
|
158
|
+
try {
|
|
159
|
+
parsed = JSON.parse(raw);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
// A JSON error is NOT benign: the browser rewrites this file in place, so a
|
|
163
|
+
// parse failure usually means we caught a write in progress — and the tasks
|
|
164
|
+
// are still very much alive.
|
|
165
|
+
throw new Error(`unreadable live task state at ${file}: ${error.message}`);
|
|
166
|
+
}
|
|
167
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
168
|
+
throw new Error(`unexpected live task state at ${file}: expected an object of tasks`);
|
|
169
|
+
}
|
|
170
|
+
const out = [];
|
|
171
|
+
for (const [name, value] of Object.entries(parsed)) {
|
|
172
|
+
if (!value || typeof value !== 'object')
|
|
173
|
+
continue;
|
|
174
|
+
const record = value;
|
|
175
|
+
// `tabs` maps the task's SHORT id -> the engine's target id. The short id is
|
|
176
|
+
// what `browser tab focus` takes and what stays stable across a reconnect,
|
|
177
|
+
// so it is the id published; the target id is never surfaced.
|
|
178
|
+
const borrowed = new Set(Array.isArray(record.borrowedTabs) ? record.borrowedTabs.filter((id) => typeof id === 'string') : []);
|
|
179
|
+
const tabs = [];
|
|
180
|
+
if (record.tabs && typeof record.tabs === 'object') {
|
|
181
|
+
for (const id of Object.keys(record.tabs)) {
|
|
182
|
+
tabs.push({ id, ...(record.currentTabId === id ? { current: true } : {}), ...(borrowed.has(id) ? { borrowed: true } : {}) });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
out.push({
|
|
186
|
+
task: typeof record.name === 'string' ? record.name : name,
|
|
187
|
+
...(typeof record.profile === 'string' ? { profile: record.profile } : {}),
|
|
188
|
+
...(typeof record.label === 'string' ? { label: record.label } : {}),
|
|
189
|
+
tabs,
|
|
190
|
+
// The real persisted schema is `createdAt` + `lastActionAt` (`browser/types.ts`
|
|
191
|
+
// `Task`). An earlier revision read `startedAt`, which the DTO at
|
|
192
|
+
// `service.ts` uses but `tasks.json` never carries — so every zero-capture
|
|
193
|
+
// task reported no start time at all and sorted to the bottom.
|
|
194
|
+
...(typeof record.createdAt === 'number' ? { startedAtMs: record.createdAt } : {}),
|
|
195
|
+
// `lastActionAt` is refreshed by every task-scoped action, which makes it
|
|
196
|
+
// the honest freshness key for a task that has produced no capture yet.
|
|
197
|
+
// Tasks written before RUSH-2622 carry none; `createdAt` is the fallback the
|
|
198
|
+
// browser's own reader normalizes them to.
|
|
199
|
+
...(typeof record.lastActionAt === 'number' ? { lastActionAtMs: record.lastActionAt }
|
|
200
|
+
: typeof record.createdAt === 'number' ? { lastActionAtMs: record.createdAt } : {}),
|
|
201
|
+
...(typeof record.sessionId === 'string' ? { sessionId: record.sessionId } : {}),
|
|
202
|
+
...(typeof record.launchId === 'string' ? { launchId: record.launchId } : {}),
|
|
203
|
+
...(typeof record.actor === 'string' ? { actor: record.actor } : {}),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Every live browser task on this machine, across every profile runtime dir.
|
|
210
|
+
*
|
|
211
|
+
* THROWS for the same reason {@link readLiveTasksFor} does. A runtime dir that
|
|
212
|
+
* does not exist means no browser has ever run here — genuinely no tasks. A
|
|
213
|
+
* readdir that fails for any other reason (EACCES, EMFILE) is a failure, and
|
|
214
|
+
* returning `[]` for it would tell the differ every task had closed.
|
|
215
|
+
*/
|
|
216
|
+
export function readLiveBrowserTasks(root = getBrowserRuntimeDir()) {
|
|
217
|
+
let entries;
|
|
218
|
+
try {
|
|
219
|
+
entries = fs.readdirSync(root, { withFileTypes: true });
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
if (error.code === 'ENOENT')
|
|
223
|
+
return [];
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
const out = [];
|
|
227
|
+
for (const entry of entries) {
|
|
228
|
+
if (!entry.isDirectory() || entry.name === 'sessions')
|
|
229
|
+
continue;
|
|
230
|
+
out.push(...readLiveTasksFor(path.join(root, entry.name)));
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Watch the tool roots and report diffs until `signal` aborts.
|
|
236
|
+
*
|
|
237
|
+
* `armed()` reports whether every root currently has a live watcher. It is a
|
|
238
|
+
* FUNCTION, not a flag captured at setup: a watcher can die later (its directory
|
|
239
|
+
* is removed and recreated, an inotify limit is hit), and a frozen `armed: true`
|
|
240
|
+
* meant the tick kept short-circuiting on `!dirty` from a watcher that would
|
|
241
|
+
* never report again — changes were then missed permanently, with the handle
|
|
242
|
+
* still claiming to be armed. Each tick re-arms whatever is missing and sweeps
|
|
243
|
+
* until everything is watched again.
|
|
244
|
+
*/
|
|
245
|
+
export function watchToolActivity(options) {
|
|
246
|
+
const roots = options.roots ?? toolWatchRoots();
|
|
247
|
+
const set = new ToolRowSet();
|
|
248
|
+
if (options.initial)
|
|
249
|
+
set.reset(options.initial);
|
|
250
|
+
let dirty = false;
|
|
251
|
+
let stopped = false;
|
|
252
|
+
/** One entry per root; `undefined` means that root needs re-arming. */
|
|
253
|
+
const watchers = new Map(roots.map((root) => [root, undefined]));
|
|
254
|
+
const armRoot = (root) => {
|
|
255
|
+
if (stopped || watchers.get(root))
|
|
256
|
+
return;
|
|
257
|
+
try {
|
|
258
|
+
// A root that does not exist yet (no browser has ever run here) cannot be
|
|
259
|
+
// watched, and would never be retried. Creating it arms the watcher now.
|
|
260
|
+
fs.mkdirSync(root, { recursive: true });
|
|
261
|
+
// Recursive: a capture lands in <root>/<profile>/sessions/<task>/, several
|
|
262
|
+
// levels below the root, and a non-recursive watch never sees it.
|
|
263
|
+
const watcher = fs.watch(root, { recursive: true }, () => { dirty = true; });
|
|
264
|
+
watcher.on('error', () => {
|
|
265
|
+
watcher.close();
|
|
266
|
+
// Release the slot AND mark dirty: the events this watcher dropped
|
|
267
|
+
// between failing and being replaced have to be picked up by a sweep,
|
|
268
|
+
// or a change that landed inside that gap is lost for good.
|
|
269
|
+
if (watchers.get(root) === watcher)
|
|
270
|
+
watchers.set(root, undefined);
|
|
271
|
+
dirty = true;
|
|
272
|
+
});
|
|
273
|
+
watchers.set(root, watcher);
|
|
274
|
+
}
|
|
275
|
+
catch { /* reported by armed(); the sweep covers it until it arms */ }
|
|
276
|
+
};
|
|
277
|
+
for (const root of roots)
|
|
278
|
+
armRoot(root);
|
|
279
|
+
const armed = () => [...watchers.values()].every((watcher) => watcher !== undefined);
|
|
280
|
+
const reproject = () => {
|
|
281
|
+
const snapshot = collectToolRows(options.scope, options.sources);
|
|
282
|
+
// An incomplete read is not evidence a task closed. Keep the rows we have and
|
|
283
|
+
// stay dirty so the next tick retries — publishing removes here is what made
|
|
284
|
+
// live rows flicker out on a transient failure.
|
|
285
|
+
if (!snapshot.complete) {
|
|
286
|
+
dirty = true;
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const diff = set.diff(snapshot.rows);
|
|
290
|
+
if (diff.upserts.length > 0 || diff.removes.length > 0)
|
|
291
|
+
options.onDiff(diff);
|
|
292
|
+
};
|
|
293
|
+
const timer = setInterval(() => {
|
|
294
|
+
for (const root of roots)
|
|
295
|
+
armRoot(root);
|
|
296
|
+
// Fully-armed watchers mean a tick with nothing reported does NOTHING — no
|
|
297
|
+
// directory read, no projection. That is the warm-idle guarantee, and it is
|
|
298
|
+
// conditional on every root actually being watched right now.
|
|
299
|
+
if (armed() && !dirty)
|
|
300
|
+
return;
|
|
301
|
+
dirty = false;
|
|
302
|
+
reproject();
|
|
303
|
+
}, options.sweepMs ?? TOOL_SWEEP_MS);
|
|
304
|
+
const stop = () => {
|
|
305
|
+
stopped = true;
|
|
306
|
+
clearInterval(timer);
|
|
307
|
+
for (const watcher of watchers.values())
|
|
308
|
+
watcher?.close();
|
|
309
|
+
watchers.clear();
|
|
310
|
+
};
|
|
311
|
+
options.signal.addEventListener('abort', stop, { once: true });
|
|
312
|
+
return { armed, stop };
|
|
313
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import type { BrowserSessionRow, ArtifactKind } from '../browser/sessions-list.js';
|
|
2
|
+
import type { ComputerRunRow } from '../computer/sessions-list.js';
|
|
3
|
+
/** Newest captures retained per row. A task with hundreds of screenshots must
|
|
4
|
+
* not turn one stream envelope into a megabyte. */
|
|
5
|
+
export declare const TOOL_CAPTURE_LIMIT = 20;
|
|
6
|
+
/** Newest actions retained per computer row, for the same reason. */
|
|
7
|
+
export declare const TOOL_ACTION_LIMIT = 50;
|
|
8
|
+
export type ToolKind = 'browser' | 'computer';
|
|
9
|
+
/** Why a row carries no owning session: `linked` resolved one, `unresolved` has
|
|
10
|
+
* an id that no indexed session matches, `unlinked` never had one. Mirrors the
|
|
11
|
+
* status both source modules already publish. */
|
|
12
|
+
export type ToolLinkStatus = 'linked' | 'unresolved' | 'unlinked';
|
|
13
|
+
/** One artifact a tool produced. Path only — never contents. */
|
|
14
|
+
export interface ToolCapture {
|
|
15
|
+
kind: ArtifactKind;
|
|
16
|
+
name: string;
|
|
17
|
+
/**
|
|
18
|
+
* Absolute path ON {@link ToolCapture.host}. A capture lives on the machine
|
|
19
|
+
* whose browser produced it, so a fleet reader on another box must not treat
|
|
20
|
+
* this as a local path — it has to open it through that host. Carrying the host
|
|
21
|
+
* per capture is what makes the path meaningful off-box at all.
|
|
22
|
+
*/
|
|
23
|
+
path: string;
|
|
24
|
+
/** The device that holds this file. */
|
|
25
|
+
host: string;
|
|
26
|
+
bytes?: number;
|
|
27
|
+
atMs: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One tab a browser task has open, with the id the task itself addresses it by.
|
|
31
|
+
*
|
|
32
|
+
* `id` is the task's SHORT tab id (the key of `Task.tabs`), not the underlying
|
|
33
|
+
* CDP target id: the short id is what `agents browser tab focus <id>` accepts
|
|
34
|
+
* and what stays stable for the life of the tab, while the target id is an
|
|
35
|
+
* engine-internal handle that a reconnect can change.
|
|
36
|
+
*/
|
|
37
|
+
export interface ToolTab {
|
|
38
|
+
id: string;
|
|
39
|
+
url?: string;
|
|
40
|
+
title?: string;
|
|
41
|
+
/** The tab URL-less verbs act on. */
|
|
42
|
+
current?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* The task drives this tab but did not open it, so no close path touches it.
|
|
45
|
+
* Surfaced so a UI does not offer to close someone else's tab.
|
|
46
|
+
*/
|
|
47
|
+
borrowed?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* An argv a consumer may run verbatim, plus the device it must run ON.
|
|
51
|
+
*
|
|
52
|
+
* `runOn` is load-bearing and is NOT a `--device` flag. A browser task is bound
|
|
53
|
+
* to its device at `start`, and every later verb resolves that binding from the
|
|
54
|
+
* local task index — `agents browser done --task x --device y` is explicitly
|
|
55
|
+
* REJECTED (`browser/task-index.ts` `REJECT_DEVICE_MESSAGE`). So the way to act
|
|
56
|
+
* on a task observed from another box is to run the plain argv on the host that
|
|
57
|
+
* holds the binding, which is what this names.
|
|
58
|
+
*/
|
|
59
|
+
export interface ToolCommand {
|
|
60
|
+
command: 'agents';
|
|
61
|
+
args: string[];
|
|
62
|
+
runOn: string;
|
|
63
|
+
}
|
|
64
|
+
/** The agent session that drove the tool, as a click-through target. */
|
|
65
|
+
export interface ToolOwner {
|
|
66
|
+
sessionId: string;
|
|
67
|
+
device: string;
|
|
68
|
+
label?: string;
|
|
69
|
+
agent?: string;
|
|
70
|
+
}
|
|
71
|
+
interface ToolRowBase {
|
|
72
|
+
kind: ToolKind;
|
|
73
|
+
/** Opaque, stable identity for this row within one device scope. */
|
|
74
|
+
rowKey: string;
|
|
75
|
+
/** The observing device that reported the row. */
|
|
76
|
+
scope: string;
|
|
77
|
+
/** The DRIVEN machine — for `--device` runs this differs from `scope`. */
|
|
78
|
+
device: string;
|
|
79
|
+
/** Is this a resource that still exists and can be acted on? */
|
|
80
|
+
live: boolean;
|
|
81
|
+
task?: string;
|
|
82
|
+
sessionId?: string;
|
|
83
|
+
launchId?: string;
|
|
84
|
+
agent?: string;
|
|
85
|
+
owner?: ToolOwner;
|
|
86
|
+
linkStatus: ToolLinkStatus;
|
|
87
|
+
startedAtMs: number;
|
|
88
|
+
updatedAtMs: number;
|
|
89
|
+
/** Newest first, bounded by {@link TOOL_CAPTURE_LIMIT}. */
|
|
90
|
+
captures: ToolCapture[];
|
|
91
|
+
captureCounts: Record<string, number>;
|
|
92
|
+
}
|
|
93
|
+
export interface BrowserToolRow extends ToolRowBase {
|
|
94
|
+
kind: 'browser';
|
|
95
|
+
profile: string;
|
|
96
|
+
/** Redacted by {@link redactToolUrl}; absent when the binding recorded none. */
|
|
97
|
+
url?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Tabs the task has open, newest-known first. Absent — not empty — when this
|
|
100
|
+
* host holds no live task record to read them from (a task bound to another
|
|
101
|
+
* device, or one whose run already ended leaving only captures). Absent means
|
|
102
|
+
* "unknown here", `[]` means "genuinely none".
|
|
103
|
+
*/
|
|
104
|
+
tabs?: ToolTab[];
|
|
105
|
+
/**
|
|
106
|
+
* Focus one of this task's tabs. Present only while `live` and only for a tab
|
|
107
|
+
* the task actually owns.
|
|
108
|
+
*/
|
|
109
|
+
showCommand?: ToolCommand;
|
|
110
|
+
/**
|
|
111
|
+
* The command that closes this task. Present ONLY while `live` — a task the
|
|
112
|
+
* index no longer binds has nothing left to close, and offering the command
|
|
113
|
+
* anyway would fail loud at the operator instead of at this boundary.
|
|
114
|
+
*/
|
|
115
|
+
closeCommand?: ToolCommand;
|
|
116
|
+
}
|
|
117
|
+
export interface ComputerToolRow extends ToolRowBase {
|
|
118
|
+
kind: 'computer';
|
|
119
|
+
/** Always false: see the module docblock. A run is history, not a session. */
|
|
120
|
+
live: false;
|
|
121
|
+
bundle?: string;
|
|
122
|
+
/** Newest first, bounded by {@link TOOL_ACTION_LIMIT}. */
|
|
123
|
+
actions: {
|
|
124
|
+
verb: string;
|
|
125
|
+
atMs: number;
|
|
126
|
+
host?: string;
|
|
127
|
+
bundle?: string;
|
|
128
|
+
}[];
|
|
129
|
+
actionCounts: Record<string, number>;
|
|
130
|
+
/** Total actions for a row whose per-verb detail the ledger already pruned. */
|
|
131
|
+
recoveredActionCount?: number;
|
|
132
|
+
}
|
|
133
|
+
export type ToolRow = BrowserToolRow | ComputerToolRow;
|
|
134
|
+
/**
|
|
135
|
+
* A task the local browser holds LIVE state for, read from its `tasks.json`.
|
|
136
|
+
*
|
|
137
|
+
* This is the only authority on a task's tabs: `tasks.json` is rewritten from
|
|
138
|
+
* the live task map, so an entry here means the task exists right now, and its
|
|
139
|
+
* `tabs` map is what `agents browser tab focus` addresses. A task whose run has
|
|
140
|
+
* ended is absent even though its captures remain, which is exactly the
|
|
141
|
+
* distinction `live` on a row reports.
|
|
142
|
+
*/
|
|
143
|
+
export interface LiveBrowserTask {
|
|
144
|
+
task: string;
|
|
145
|
+
profile?: string;
|
|
146
|
+
label?: string;
|
|
147
|
+
tabs?: ToolTab[];
|
|
148
|
+
/** `Task.createdAt` — when the task was opened. */
|
|
149
|
+
startedAtMs?: number;
|
|
150
|
+
/** `Task.lastActionAt` — refreshed by every task-scoped action. */
|
|
151
|
+
lastActionAtMs?: number;
|
|
152
|
+
sessionId?: string;
|
|
153
|
+
launchId?: string;
|
|
154
|
+
/** `Task.actor` — who launched it, when the record carries one. */
|
|
155
|
+
actor?: string;
|
|
156
|
+
}
|
|
157
|
+
/** Stable identity for one tool row within one device scope. */
|
|
158
|
+
export declare function toolRowKey(scope: string, kind: ToolKind, identity: string): string;
|
|
159
|
+
/**
|
|
160
|
+
* A task URL safe to publish: userinfo removed and credential-shaped query
|
|
161
|
+
* parameters replaced. A string that does not parse as a URL is dropped
|
|
162
|
+
* entirely rather than published unexamined — it cannot be redacted safely.
|
|
163
|
+
*/
|
|
164
|
+
export declare function redactToolUrl(raw: string | undefined): string | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* A browser task the task index binds but that has produced no capture yet.
|
|
167
|
+
*
|
|
168
|
+
* `buildBrowserSessionRows` derives its rows from captures on disk, so a task
|
|
169
|
+
* that was just opened — bound, live, drivable, closable — had no row at all
|
|
170
|
+
* until its first screenshot landed. That is the window an operator most wants
|
|
171
|
+
* to see, and it is exactly when a Sessions pane showed nothing. This
|
|
172
|
+
* synthesizes the zero-capture row so it goes through the SAME projection rather
|
|
173
|
+
* than a second parallel one.
|
|
174
|
+
*/
|
|
175
|
+
export declare function boundBrowserRow(task: string, binding: {
|
|
176
|
+
profile?: string;
|
|
177
|
+
}): BrowserSessionRow;
|
|
178
|
+
/**
|
|
179
|
+
* One browser task (or a profile's downloads bucket) as a tool row. Pure: the
|
|
180
|
+
* liveness verdict is passed in, because only the machine running the browser
|
|
181
|
+
* daemon holds the task index that answers it.
|
|
182
|
+
*/
|
|
183
|
+
export declare function projectBrowserToolRow(scope: string, row: BrowserSessionRow, binding?: {
|
|
184
|
+
device?: string;
|
|
185
|
+
profile?: string;
|
|
186
|
+
url?: string;
|
|
187
|
+
createdAt?: number;
|
|
188
|
+
sessionId?: string;
|
|
189
|
+
launchId?: string;
|
|
190
|
+
}, live?: LiveBrowserTask): BrowserToolRow;
|
|
191
|
+
/**
|
|
192
|
+
* One computer run as a tool row. `live` is pinned false and no close/stop
|
|
193
|
+
* command is produced: the emitting CLI process is already gone.
|
|
194
|
+
*/
|
|
195
|
+
export declare function projectComputerToolRow(scope: string, row: ComputerRunRow): ComputerToolRow;
|
|
196
|
+
/** Newest first across both kinds — the order a consumer renders. */
|
|
197
|
+
export declare function sortToolRows(rows: ToolRow[]): ToolRow[];
|
|
198
|
+
export {};
|