@phnx-labs/agents-cli 1.22.39 → 1.22.40
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 +294 -0
- package/README.md +111 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -26
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +260 -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.js +206 -94
- 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 +9 -12
- 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 +72 -63
- 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 +13 -0
- package/dist/commands/sessions-picker.js +182 -8
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +142 -180
- 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-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 +11 -25
- 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 +1 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +2 -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 +67 -3
- package/dist/lib/browser/profiles.js +129 -7
- 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 +113 -1
- package/dist/lib/browser/service.js +454 -40
- 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 +18 -0
- 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 +102 -0
- package/dist/lib/daemon-webhooks.js +210 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +279 -141
- 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 +2 -2
- package/dist/lib/observe-aliases.js +2 -11
- 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-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 +241 -62
- 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 +3 -3
- package/dist/lib/secrets/bundles.js +7 -7
- 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 +12 -10
- package/dist/lib/secrets/remote.js +21 -14
- 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/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/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +82 -0
- package/dist/lib/share/publish.js +170 -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 +5 -147
- package/dist/lib/startup/command-registry.js +38 -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 +1 -1
- package/dist/lib/triggers/handlers.js +2 -2
- package/dist/lib/triggers/webhook.d.ts +36 -2
- package/dist/lib/triggers/webhook.js +97 -42
- package/dist/lib/types.d.ts +18 -6
- 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/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
package/dist/commands/cloud.js
CHANGED
|
@@ -5,8 +5,8 @@ import { insertTask, updateTaskStatus, getTaskById, listTasks as listStoredTasks
|
|
|
5
5
|
import { renderStream } from '../lib/cloud/stream.js';
|
|
6
6
|
import { MAX_IMAGES_PER_DISPATCH } from '../lib/cloud/types.js';
|
|
7
7
|
import { resolveCloudPrompt, executeCloudDispatch } from '../lib/cloud/dispatch.js';
|
|
8
|
-
import { normalizeTriggerEvent, validateTrigger, writeJob, setJobEnabled, jobExists, GITHUB_TRIGGER_EVENTS } from '../lib/routines.js';
|
|
9
|
-
import { emit } from '../lib/events.js';
|
|
8
|
+
import { normalizeTriggerEvent, validateTrigger, writeJob, setJobEnabled, jobExists, GITHUB_TRIGGER_EVENTS } from '../lib/scheduling/routines.js';
|
|
9
|
+
import { emit } from '../lib/feed/events.js';
|
|
10
10
|
/** Return a chalk color function appropriate for the given task status. */
|
|
11
11
|
export function statusColor(status) {
|
|
12
12
|
switch (status) {
|
|
@@ -95,9 +95,9 @@ Examples:
|
|
|
95
95
|
.option('--model <model>', 'Model override')
|
|
96
96
|
.option('--env <id>', 'Codex Cloud environment ID')
|
|
97
97
|
.option('--computer <name>', 'Factory/Droid computer target')
|
|
98
|
-
.option('--
|
|
99
|
-
.option('--remote-cwd <dir>', 'Working directory on the
|
|
100
|
-
.option('--any', 'With --
|
|
98
|
+
.option('--device <name>', 'One of your machines as the target (a registered device, capability tag, or user@host). Implies --provider host.')
|
|
99
|
+
.option('--remote-cwd <dir>', 'Working directory on the device (--provider host only)')
|
|
100
|
+
.option('--any', 'With --device <cap> (a capability tag), pick any matching device instead of erroring when several match')
|
|
101
101
|
.option('--autonomy <level>', 'Factory/Droid autonomy: low, medium, high (default high)')
|
|
102
102
|
.option('--mode <mode>', 'Execution mode (e.g., plan, edit, full)')
|
|
103
103
|
.option('--image <path>', `Attach an image (.png/.jpg/.webp) for vision dispatch. Repeatable, up to ${MAX_IMAGES_PER_DISPATCH} (Rush Cloud only).`, (value, previous) => {
|
|
@@ -112,7 +112,6 @@ Examples:
|
|
|
112
112
|
})
|
|
113
113
|
.option('-b, --balanced', 'Shortcut for --strategy balanced. Route the factory run across all healthy accounts.')
|
|
114
114
|
.option('--strategy <strategy>', 'Account selection strategy for the factory: balanced. Sends all healthy accounts so the factory pod rotates between them on rate-limit.')
|
|
115
|
-
.option('--upload-account-tokens', 'Upload Claude OAuth credentials to Rush Cloud on first dispatch (consent recorded for future runs).')
|
|
116
115
|
.option('--json', 'Structured JSON output')
|
|
117
116
|
.option('--no-follow', 'Dispatch and exit without streaming output')
|
|
118
117
|
.addHelpText('after', `
|
|
@@ -127,9 +126,9 @@ Examples:
|
|
|
127
126
|
# Codex Cloud
|
|
128
127
|
agents cloud run "add auth tests" --provider codex --env env_abc123
|
|
129
128
|
|
|
130
|
-
# One of your own machines (agents devices), over SSH
|
|
131
|
-
agents cloud run "run the nightly benchmark" --
|
|
132
|
-
agents cloud run "rebuild the index" --
|
|
129
|
+
# One of your own machines (agents hosts / agents devices), over SSH
|
|
130
|
+
agents cloud run "run the nightly benchmark" --device gpu-box --agent claude
|
|
131
|
+
agents cloud run "rebuild the index" --device gpu --any --remote-cwd ~/proj
|
|
133
132
|
|
|
134
133
|
# Default provider (set in ~/.agents/agents.yaml)
|
|
135
134
|
agents cloud run "refactor auth module" --repo user/repo
|
|
@@ -143,13 +142,13 @@ Examples:
|
|
|
143
142
|
json,
|
|
144
143
|
hint: 'agents cloud run "<task>" --repo <owner/repo>',
|
|
145
144
|
});
|
|
146
|
-
// --
|
|
145
|
+
// --device names one of YOUR machines as the target — that only means
|
|
147
146
|
// something to the host provider, so it implies --provider host rather
|
|
148
147
|
// than silently riding along to a cloud backend that would ignore it.
|
|
149
|
-
if (options.
|
|
150
|
-
die(`--
|
|
148
|
+
if (options.device && options.provider && options.provider !== 'host') {
|
|
149
|
+
die(`--device targets your own machines (--provider host), not ${options.provider}. Drop --device, or use --provider host.`, 1, { json });
|
|
151
150
|
}
|
|
152
|
-
const explicitProvider = options.provider ?? (options.
|
|
151
|
+
const explicitProvider = options.provider ?? (options.device ? 'host' : undefined);
|
|
153
152
|
// Agent-aware: with no --provider, the agent routes to its native cloud
|
|
154
153
|
// (claude→rush, codex→codex, droid→factory, antigravity→antigravity).
|
|
155
154
|
const provider = resolveProvider(explicitProvider, options.agent);
|
|
@@ -176,8 +175,8 @@ Examples:
|
|
|
176
175
|
dispatchOptions.providerOptions.env = options.env;
|
|
177
176
|
if (options.computer)
|
|
178
177
|
dispatchOptions.providerOptions.computer = options.computer;
|
|
179
|
-
if (options.
|
|
180
|
-
dispatchOptions.providerOptions.host = options.
|
|
178
|
+
if (options.device)
|
|
179
|
+
dispatchOptions.providerOptions.host = options.device;
|
|
181
180
|
if (options.remoteCwd)
|
|
182
181
|
dispatchOptions.providerOptions.remoteCwd = options.remoteCwd;
|
|
183
182
|
if (options.any)
|
|
@@ -189,8 +188,6 @@ Examples:
|
|
|
189
188
|
if (options.balanced || options.strategy === 'balanced') {
|
|
190
189
|
dispatchOptions.providerOptions.strategy = 'balanced';
|
|
191
190
|
}
|
|
192
|
-
if (options.uploadAccountTokens)
|
|
193
|
-
dispatchOptions.providerOptions.uploadAccountTokens = true;
|
|
194
191
|
// --on <event>: register this run as an event trigger instead of
|
|
195
192
|
// dispatching now. We parse + validate the event, attach it to
|
|
196
193
|
// dispatchOptions.trigger, and persist a trigger-bound routine so the
|
|
@@ -231,10 +228,10 @@ Examples:
|
|
|
231
228
|
};
|
|
232
229
|
if (repoValues[0])
|
|
233
230
|
routine.repo = repoValues[0];
|
|
234
|
-
// --
|
|
231
|
+
// --device controls where the enabled local receiver dispatches the run.
|
|
235
232
|
// Device activation remains in this receiver's device manifest.
|
|
236
|
-
if (options.
|
|
237
|
-
routine.host = options.
|
|
233
|
+
if (options.device) {
|
|
234
|
+
routine.host = options.device;
|
|
238
235
|
if (options.remoteCwd)
|
|
239
236
|
routine.remoteCwd = options.remoteCwd;
|
|
240
237
|
}
|
|
@@ -10,7 +10,7 @@ import { cloneRepo } from '../lib/git.js';
|
|
|
10
10
|
import { discoverCommands, resolveCommandSource, installCommandCentrally, listCentralCommands, listInstalledCommandsWithScope, getCommandInfo, diffVersionCommands, iterCommandsCapableVersions, removeCommandFromVersion, } from '../lib/commands.js';
|
|
11
11
|
import { getCommandsDir } from '../lib/state.js';
|
|
12
12
|
import { showResourceList, buildTargetsSection, } from './resource-view.js';
|
|
13
|
-
import { listInstalledVersions, getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, resolveInstalledAgentTargets, } from '../lib/versions.js';
|
|
13
|
+
import { listInstalledVersions, getGlobalDefault, syncResourcesToVersion, promptAgentVersionSelection, getVersionHomePath, resolveInstalledAgentTargets, } from '../lib/installations/versions.js';
|
|
14
14
|
import { recordVersionResources } from '../lib/state.js';
|
|
15
15
|
import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, promptRemovalTargets, resolveAgentTargetsAutoInstalling, resolveListFilterOrExit, } from './utils.js';
|
|
16
16
|
/** Register the `agents commands` command tree (list, add, remove, sync, prune, view). */
|
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { type ComputerClient, type RPCResponse } from '../lib/computer-rpc.js';
|
|
3
|
-
export
|
|
4
|
-
pid: number;
|
|
5
|
-
name: string;
|
|
6
|
-
bundle_id: string;
|
|
7
|
-
active: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function pickTarget(list: AppInfo[], opts: {
|
|
10
|
-
pid?: number;
|
|
11
|
-
bundle?: string;
|
|
12
|
-
}): {
|
|
13
|
-
ok: true;
|
|
14
|
-
app: AppInfo;
|
|
15
|
-
} | {
|
|
16
|
-
ok: false;
|
|
17
|
-
error: string;
|
|
18
|
-
};
|
|
3
|
+
export { emitComputerAction, pickTarget, resolveTargetPidDecision, type AppInfo } from '../lib/computer/actions.js';
|
|
19
4
|
export declare function parseXY(s: string, flag: string): {
|
|
20
5
|
x: number;
|
|
21
6
|
y: number;
|
|
@@ -55,21 +40,6 @@ export declare function buildWaitParams(opts: {
|
|
|
55
40
|
};
|
|
56
41
|
export declare function withClient<T>(fn: (client: ComputerClient) => Promise<T>): Promise<T>;
|
|
57
42
|
export declare function unwrap(r: RPCResponse): Record<string, unknown>;
|
|
58
|
-
export declare function resolveTargetPidDecision(client: ComputerClient, opts: {
|
|
59
|
-
pid?: number;
|
|
60
|
-
bundle?: string;
|
|
61
|
-
}, gate?: {
|
|
62
|
-
verb?: string;
|
|
63
|
-
env?: NodeJS.ProcessEnv;
|
|
64
|
-
nowMs?: number;
|
|
65
|
-
}): Promise<{
|
|
66
|
-
ok: true;
|
|
67
|
-
pid: number;
|
|
68
|
-
source: 'pid' | 'list_apps' | 'session_admission';
|
|
69
|
-
} | {
|
|
70
|
-
ok: false;
|
|
71
|
-
error: string;
|
|
72
|
-
}>;
|
|
73
43
|
export declare function focusStealNotes(opts: {
|
|
74
44
|
id?: string;
|
|
75
45
|
x?: number;
|
|
@@ -82,8 +52,4 @@ export declare function shouldRaise(opts: {
|
|
|
82
52
|
}): boolean;
|
|
83
53
|
export declare function appPathIsElectron(appPath: string | null, exists?: (p: string) => boolean): boolean;
|
|
84
54
|
export declare function electronWebviewTip(appLabel: string): string;
|
|
85
|
-
export declare function emitComputerAction(verb: string, targetPid: number | undefined, opts: {
|
|
86
|
-
bundle?: string;
|
|
87
|
-
host?: string;
|
|
88
|
-
}, extra?: Record<string, unknown>): void;
|
|
89
55
|
export declare function registerActionCommands(program: Command): void;
|
|
@@ -9,121 +9,13 @@
|
|
|
9
9
|
import { execFileSync } from 'child_process';
|
|
10
10
|
import * as fs from 'fs';
|
|
11
11
|
import * as path from 'path';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
import { emit as emitEvent } from '../lib/events.js';
|
|
16
|
-
import { recordComputerSession } from '../lib/session/db.js';
|
|
17
|
-
import { resolveActor } from '../lib/actor.js';
|
|
18
|
-
function isComputerInputVerb(verb) {
|
|
19
|
-
return typeof verb === 'string' && COMPUTER_INPUT_GATED_VERBS.includes(verb);
|
|
20
|
-
}
|
|
21
|
-
function computerSessionId(env = process.env) {
|
|
22
|
-
return env.CODEX_THREAD_ID
|
|
23
|
-
|| env.CLAUDE_CODE_SESSION_ID
|
|
24
|
-
|| env.CLAUDE_SESSION_ID
|
|
25
|
-
|| env.AGENTS_SESSION_ID
|
|
26
|
-
|| env.AGENTS_RUN_ID
|
|
27
|
-
|| null;
|
|
28
|
-
}
|
|
29
|
-
function admissionCachePath(env = process.env) {
|
|
30
|
-
if (env.AGENTS_COMPUTER_ADMISSION_CACHE)
|
|
31
|
-
return env.AGENTS_COMPUTER_ADMISSION_CACHE;
|
|
32
|
-
return path.join(path.dirname(resolvePolicyPath()), 'computer-target-admissions.json');
|
|
33
|
-
}
|
|
34
|
-
function targetSelector(opts) {
|
|
35
|
-
return opts.bundle ? `bundle:${opts.bundle}` : 'frontmost';
|
|
36
|
-
}
|
|
37
|
-
function readAdmissionCache(filePath) {
|
|
38
|
-
try {
|
|
39
|
-
const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
40
|
-
return Array.isArray(parsed.admissions) ? parsed.admissions.filter(isAdmission) : [];
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function isAdmission(v) {
|
|
47
|
-
if (!v || typeof v !== 'object')
|
|
48
|
-
return false;
|
|
49
|
-
const r = v;
|
|
50
|
-
return r.sessionId !== undefined
|
|
51
|
-
&& typeof r.sessionId === 'string'
|
|
52
|
-
&& typeof r.selector === 'string'
|
|
53
|
-
&& r.gateClass === 'input'
|
|
54
|
-
&& typeof r.pid === 'number'
|
|
55
|
-
&& typeof r.bundle_id === 'string'
|
|
56
|
-
&& typeof r.name === 'string'
|
|
57
|
-
&& typeof r.admittedAtMs === 'number'
|
|
58
|
-
&& isComputerInputVerb(r.admittedByVerb);
|
|
59
|
-
}
|
|
60
|
-
function rememberAdmission(app, opts) {
|
|
61
|
-
const sessionId = computerSessionId(opts.env);
|
|
62
|
-
if (!sessionId)
|
|
63
|
-
return;
|
|
64
|
-
const filePath = admissionCachePath(opts.env);
|
|
65
|
-
const admissions = readAdmissionCache(filePath);
|
|
66
|
-
const next = {
|
|
67
|
-
sessionId,
|
|
68
|
-
selector: opts.selector,
|
|
69
|
-
gateClass: 'input',
|
|
70
|
-
pid: app.pid,
|
|
71
|
-
bundle_id: app.bundle_id,
|
|
72
|
-
name: app.name,
|
|
73
|
-
admittedAtMs: opts.nowMs ?? Date.now(),
|
|
74
|
-
admittedByVerb: opts.verb,
|
|
75
|
-
};
|
|
76
|
-
const filtered = admissions.filter((a) => !(a.sessionId === sessionId && a.selector === opts.selector && a.gateClass === 'input'));
|
|
77
|
-
filtered.push(next);
|
|
78
|
-
try {
|
|
79
|
-
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
80
|
-
fs.writeFileSync(filePath, JSON.stringify({ admissions: filtered }, null, 2), { mode: 0o600 });
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
// Cache persistence is best-effort; the daemon remains the final gate.
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function findAdmission(opts) {
|
|
87
|
-
const sessionId = computerSessionId(opts.env);
|
|
88
|
-
if (!sessionId)
|
|
89
|
-
return null;
|
|
90
|
-
const admissions = readAdmissionCache(admissionCachePath(opts.env));
|
|
91
|
-
const matches = admissions
|
|
92
|
-
.filter((a) => a.sessionId === sessionId && a.selector === opts.selector && a.gateClass === 'input')
|
|
93
|
-
.sort((a, b) => b.admittedAtMs - a.admittedAtMs);
|
|
94
|
-
return matches[0] ?? null;
|
|
95
|
-
}
|
|
12
|
+
import { openComputerClient, describeTransport, } from '../lib/computer-rpc.js';
|
|
13
|
+
import { emitComputerAction, resolveTargetPidDecision } from '../lib/computer/actions.js';
|
|
14
|
+
export { emitComputerAction, pickTarget, resolveTargetPidDecision } from '../lib/computer/actions.js';
|
|
96
15
|
// Pure target picker — exercised by unit tests. Precedence: explicit --pid,
|
|
97
16
|
// then --bundle, then the frontmost active allow-listed app (the same default
|
|
98
17
|
// `screenshot` uses). Kept side-effect-free so the resolution rules are
|
|
99
18
|
// testable without a live daemon.
|
|
100
|
-
export function pickTarget(list, opts) {
|
|
101
|
-
if (opts.pid != null) {
|
|
102
|
-
const app = list.find((a) => a.pid === opts.pid);
|
|
103
|
-
// A --pid the daemon doesn't list (not allow-listed / not running) is
|
|
104
|
-
// still passed through: the daemon is the authority and will return a
|
|
105
|
-
// precise permission_denied / app_not_found. We don't second-guess it.
|
|
106
|
-
return { ok: true, app: app ?? { pid: opts.pid, name: '', bundle_id: '', active: false } };
|
|
107
|
-
}
|
|
108
|
-
if (opts.bundle) {
|
|
109
|
-
const app = list.find((a) => a.bundle_id === opts.bundle);
|
|
110
|
-
if (!app) {
|
|
111
|
-
return {
|
|
112
|
-
ok: false,
|
|
113
|
-
error: `bundle not in allow list (or not running): ${opts.bundle}\n${formatComputerPermissionGrantHint(opts.bundle)}`,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
return { ok: true, app };
|
|
117
|
-
}
|
|
118
|
-
const active = list.find((a) => a.active);
|
|
119
|
-
if (!active) {
|
|
120
|
-
return {
|
|
121
|
-
ok: false,
|
|
122
|
-
error: `no active app found in allow list\n${formatComputerPermissionGrantHint()}`,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
return { ok: true, app: active };
|
|
126
|
-
}
|
|
127
19
|
// Parse an "x,y" coordinate pair. Pure + tested.
|
|
128
20
|
export function parseXY(s, flag) {
|
|
129
21
|
const parts = s.split(',').map((v) => v.trim());
|
|
@@ -227,28 +119,6 @@ export function unwrap(r) {
|
|
|
227
119
|
}
|
|
228
120
|
return r.result ?? {};
|
|
229
121
|
}
|
|
230
|
-
export async function resolveTargetPidDecision(client, opts, gate) {
|
|
231
|
-
// A directly-supplied pid skips the list_apps roundtrip — the daemon gates.
|
|
232
|
-
if (opts.pid != null)
|
|
233
|
-
return { ok: true, pid: opts.pid, source: 'pid' };
|
|
234
|
-
const apps = unwrap(await client.call('list_apps'));
|
|
235
|
-
const list = apps.apps || [];
|
|
236
|
-
const picked = pickTarget(list, opts);
|
|
237
|
-
const verb = gate?.verb;
|
|
238
|
-
const selector = targetSelector(opts);
|
|
239
|
-
if (picked.ok && isComputerInputVerb(verb)) {
|
|
240
|
-
rememberAdmission(picked.app, { selector, verb, env: gate?.env, nowMs: gate?.nowMs });
|
|
241
|
-
}
|
|
242
|
-
if (!picked.ok) {
|
|
243
|
-
if (isComputerInputVerb(verb)) {
|
|
244
|
-
const admitted = findAdmission({ selector, env: gate?.env });
|
|
245
|
-
if (admitted)
|
|
246
|
-
return { ok: true, pid: admitted.pid, source: 'session_admission' };
|
|
247
|
-
}
|
|
248
|
-
return { ok: false, error: picked.error };
|
|
249
|
-
}
|
|
250
|
-
return { ok: true, pid: picked.app.pid, source: 'list_apps' };
|
|
251
|
-
}
|
|
252
122
|
// Resolve the target pid via list_apps + pickTarget, printing a precise error
|
|
253
123
|
// and exiting when no target matches.
|
|
254
124
|
async function resolveTargetPid(client, opts, gate) {
|
|
@@ -339,9 +209,9 @@ export function electronWebviewTip(appLabel) {
|
|
|
339
209
|
}
|
|
340
210
|
// Print the CDP steer when the target is a known Electron app. Keyed off --bundle
|
|
341
211
|
// (the recommended way to target); a frontmost-resolved target without --bundle is
|
|
342
|
-
// left alone to avoid a second RPC on the hot path. Skipped for remote --
|
|
212
|
+
// left alone to avoid a second RPC on the hot path. Skipped for remote --device.
|
|
343
213
|
function warnIfElectronWebview(opts) {
|
|
344
|
-
if (opts.
|
|
214
|
+
if (opts.device)
|
|
345
215
|
return;
|
|
346
216
|
if (opts.bundle && isElectronApp(opts.bundle))
|
|
347
217
|
console.error(electronWebviewTip(opts.bundle));
|
|
@@ -357,58 +227,20 @@ function emit(result, json, human) {
|
|
|
357
227
|
// Record one `computer.action` per verb invocation, one call site per command
|
|
358
228
|
// below. Session/agent/machine identity is stamped for free by emitEvent's
|
|
359
229
|
// provenance floor (events.ts resolveProvenance) — this only carries the
|
|
360
|
-
// action-specific facts: which verb, against which target pid/bundle/
|
|
230
|
+
// action-specific facts: which verb, against which target pid/bundle/device.
|
|
361
231
|
// NOTE: the field is `targetPid`, never `pid` — `pid` is a reserved envelope
|
|
362
232
|
// key (the emitting process's OWN pid, events.ts RESERVED_META_KEYS) that
|
|
363
233
|
// sanitizePayload() silently strips from the payload before it can collide.
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
targetPid,
|
|
370
|
-
bundle: opts.bundle,
|
|
371
|
-
host: opts.host,
|
|
372
|
-
...extra,
|
|
373
|
-
});
|
|
374
|
-
// Mirror the invocation's IDENTITY into the durable store (RUSH-2549). The
|
|
375
|
-
// event above stays the audit record, but the event ledger is bounded and
|
|
376
|
-
// prunes at 7 days / 50 MiB (events.ts), so a run's history used to vanish on
|
|
377
|
-
// day 8. This row is metadata only -- no screenshots, no typed text -- and
|
|
378
|
-
// `action_count` accumulates across the many calls one invocation makes.
|
|
379
|
-
//
|
|
380
|
-
// Identity is read from this process's own env, exactly as stampProvenance()
|
|
381
|
-
// does for the event: `agents computer` runs IN the caller's process, so there
|
|
382
|
-
// is no shared daemon to mis-attribute it to (the browser problem).
|
|
383
|
-
//
|
|
384
|
-
// Guarded for the same reason `emit` above guards itself ("logging should
|
|
385
|
-
// never break the CLI", events.ts): this is a RECORD of the action, not the
|
|
386
|
-
// action. An unwritable or locked session DB must not stop `agents computer
|
|
387
|
-
// click` from clicking. The action still happened and its event still landed;
|
|
388
|
-
// only this row is missed, and the next call re-records the identity.
|
|
389
|
-
try {
|
|
390
|
-
recordComputerSession({
|
|
391
|
-
invocationId: COMPUTER_INVOCATION_ID,
|
|
392
|
-
sessionId: process.env.AGENT_SESSION_ID || process.env.AGENTS_SESSION_ID,
|
|
393
|
-
launchId: process.env.AGENT_LAUNCH_ID,
|
|
394
|
-
actor: resolveActor().id,
|
|
395
|
-
actionCount: 1,
|
|
396
|
-
taskPreview: typeof extra.task === 'string' ? extra.task : undefined,
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
|
-
catch {
|
|
400
|
-
// Recording is best-effort; the action and its event are already done.
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
// Add the shared --pid/--bundle/--host target options to a verb. `--host` routes
|
|
404
|
-
// the verb at a remote Windows device: the `computer` preAction hook hydrates
|
|
405
|
-
// COMPUTER_HELPER_TCP from the tunnel `start --host` recorded, so withClient's
|
|
406
|
-
// openComputerClient() transparently selects the TCP transport.
|
|
234
|
+
// emitComputerAction lives in lib/computer/actions.ts (re-exported above).
|
|
235
|
+
// Add the shared --pid/--bundle/--device target options to a verb. `--device`
|
|
236
|
+
// routes the verb at a remote Windows device: the `computer` preAction hook
|
|
237
|
+
// hydrates COMPUTER_HELPER_TCP from the tunnel `start --device` recorded, so
|
|
238
|
+
// withClient's openComputerClient() transparently selects the TCP transport.
|
|
407
239
|
function addTargetOpts(cmd) {
|
|
408
240
|
return cmd
|
|
409
241
|
.option('--bundle <id>', 'Bundle id of the target app (default: frontmost allow-listed app)')
|
|
410
242
|
.option('--pid <n>', 'Target pid directly (overrides --bundle)', (v) => parseInt(v, 10))
|
|
411
|
-
.option('--
|
|
243
|
+
.option('--device <name>', 'Drive a remote Windows device (requires `agents computer start --device <name>` first)');
|
|
412
244
|
}
|
|
413
245
|
// Add the shared --id/--x/--y element-or-coords options to a verb.
|
|
414
246
|
function addElementOrCoordOpts(cmd) {
|
|
@@ -739,7 +571,7 @@ export function registerActionCommands(program) {
|
|
|
739
571
|
.option('--bundle <id>', 'Bundle id (e.g. com.apple.TextEdit)')
|
|
740
572
|
.option('--path <p>', 'Path to the .app bundle')
|
|
741
573
|
.option('--name <s>', 'App name (resolved via /Applications and LaunchServices)')
|
|
742
|
-
.option('--
|
|
574
|
+
.option('--device <name>', 'Drive a remote Windows device (requires `agents computer start --device <name>` first)')
|
|
743
575
|
.option('--json', 'Emit JSON')
|
|
744
576
|
.action(async (opts) => {
|
|
745
577
|
if (!opts.bundle && !opts.path && !opts.name) {
|
|
@@ -4,13 +4,13 @@ import { resolveHelperExec, resolveSocketPath } from '../lib/computer-rpc.js';
|
|
|
4
4
|
* Pure platform gate. The computer subsystem is macOS-only for LOCAL driving
|
|
5
5
|
* (Accessibility / launchctl). It is NOT blocked off macOS when a remote daemon
|
|
6
6
|
* is reachable — either a configured TCP endpoint (COMPUTER_HELPER_TCP, e.g. a
|
|
7
|
-
* Windows daemon over a tunnel) or a `--
|
|
7
|
+
* Windows daemon over a tunnel) or a `--device <name>` remote invocation. Kept
|
|
8
8
|
* pure so the gating rule is unit-testable without a live command tree.
|
|
9
9
|
*/
|
|
10
10
|
export declare function shouldBlockOffPlatform(opts: {
|
|
11
11
|
platform: NodeJS.Platform;
|
|
12
12
|
tcpConfigured: boolean;
|
|
13
|
-
|
|
13
|
+
device?: string;
|
|
14
14
|
}): boolean;
|
|
15
15
|
/**
|
|
16
16
|
* Sniff the image format from the leading magic bytes: PNG starts with the
|
|
@@ -52,8 +52,16 @@ export declare function buildRestartTaskScript(taskName: string, exeName: string
|
|
|
52
52
|
export declare function emitComputerRunTaskMarker(opts: {
|
|
53
53
|
task: string;
|
|
54
54
|
bundle?: string;
|
|
55
|
-
|
|
55
|
+
device?: string;
|
|
56
56
|
}): void;
|
|
57
|
+
/**
|
|
58
|
+
* launchd Label for this process's helper — the production identifier for a real
|
|
59
|
+
* invocation, namespaced under a redirected HOME (RUSH-2639). launchd routes
|
|
60
|
+
* bootout/bootstrap/kickstart/print by identifier alone, never by the plist's
|
|
61
|
+
* path, so without this a process running under a sandbox HOME tears down the
|
|
62
|
+
* operator's live helper.
|
|
63
|
+
*/
|
|
64
|
+
export declare function helperLabel(): string;
|
|
57
65
|
/**
|
|
58
66
|
* Install the macOS helper locally: resolve (or download + verify) the signed,
|
|
59
67
|
* notarized .app, copy it to /Applications, verify the destination signature,
|
|
@@ -80,5 +88,22 @@ export declare function activateComputerHelperMacLocal(): Promise<{
|
|
|
80
88
|
* Returns false (never throws) if the socket is down or the RPC errors — used to
|
|
81
89
|
* poll while the user grants permissions in System Settings. */
|
|
82
90
|
export declare function probeComputerTrust(): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* The helper's launchd plist.
|
|
93
|
+
*
|
|
94
|
+
* The `EnvironmentVariables` dict carries HOME (RUSH-2639, see
|
|
95
|
+
* `lib/service-manifest.ts`): launchd applies this dict on top of the LOGIN
|
|
96
|
+
* SESSION's environment, never the environment of whoever called `launchctl
|
|
97
|
+
* bootstrap`, so a manifest that omits HOME hands the helper the account home no
|
|
98
|
+
* matter which home the caller resolved. That is a silent escape from any
|
|
99
|
+
* redirected HOME — the hermetic test harness's, and an agent's isolated version
|
|
100
|
+
* home alike.
|
|
101
|
+
*/
|
|
102
|
+
export declare function renderLaunchAgentPlist(opts: {
|
|
103
|
+
label: string;
|
|
104
|
+
exec: string;
|
|
105
|
+
socketPath: string;
|
|
106
|
+
logPath: string;
|
|
107
|
+
}): string;
|
|
83
108
|
export { resolveHelperExec as resolveHelperPath };
|
|
84
109
|
export { resolveSocketPath };
|