@phnx-labs/agents-cli 1.22.38 → 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 +302 -0
- package/README.md +111 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +46 -27
- 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 +47 -4
- 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 +161 -216
- 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 +318 -48
- 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 +12 -3
- package/dist/lib/config-keys.js +29 -6
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +6 -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 +116 -72
- package/dist/lib/device-config.js +366 -132
- 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 +61 -0
- package/dist/lib/devices/pool.js +83 -0
- 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 +8 -5
- package/dist/lib/exec.js +19 -13
- 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} +49 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +265 -38
- 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 +36 -6
- package/dist/lib/smart-launch.js +65 -8
- 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/lib/state.d.ts
CHANGED
|
@@ -47,6 +47,16 @@ export declare function getUserAgentsDir(): string;
|
|
|
47
47
|
* @deprecated Use getUserAgentsDir() directly.
|
|
48
48
|
*/
|
|
49
49
|
export declare function getOptionalUserAgentsDir(): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* True when `agentsPath` is a reserved `.agents` root that must never be
|
|
52
|
+
* treated as a project layer: the user repo (~/.agents), the system repo
|
|
53
|
+
* (~/.agents/.system), or a git checkout of either canonical DotAgents repo.
|
|
54
|
+
* `getProjectAgentsDir` skips these while walking up; direct-cwd callers
|
|
55
|
+
* (`compileRulesForProject`) consult the same predicate so `$HOME` — whose
|
|
56
|
+
* `.agents/rules` is the user layer itself — can never compile as a
|
|
57
|
+
* "project" (RUSH-2725).
|
|
58
|
+
*/
|
|
59
|
+
export declare function isReservedAgentsDir(agentsPath: string): boolean;
|
|
50
60
|
/** Walk up from startPath to find a project-scoped .agents/ directory (skipping both roots). */
|
|
51
61
|
export declare function getProjectAgentsDir(startPath?: string): string | null;
|
|
52
62
|
/** Return all .agents/ directories in scope: project, user, then system. */
|
|
@@ -250,8 +260,15 @@ export declare function getTeamsRegistryPath(): string;
|
|
|
250
260
|
export declare function getDevicesRegistryPath(): string;
|
|
251
261
|
/** Path to the device ignore-list — tailscale node names the user dismissed, so auto-discovery never re-suggests them. Per-machine, same dir as the registry. */
|
|
252
262
|
export declare function getDevicesIgnoredPath(): string;
|
|
253
|
-
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the
|
|
263
|
+
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the per-device doc `config:` block; only lib/devices/config-migration.ts still reads it (to fold + remove it). */
|
|
254
264
|
export declare function getDevicesAutoLaunchPath(): string;
|
|
265
|
+
/** Path to THIS machine's agent pins — the `agents:` global defaults and
|
|
266
|
+
* `isolatedAgents:` pointers. Each pin names a version installed on THIS
|
|
267
|
+
* machine, so it is machine-local runtime state and lives beside the device
|
|
268
|
+
* registry under `.history/devices/` (untracked) — NOT in the tracked
|
|
269
|
+
* per-device doc, where auto-written pins caused commit churn on every
|
|
270
|
+
* `agents use` / install. Read at call time like the other devices-dir paths. */
|
|
271
|
+
export declare function getDevicePinsPath(): string;
|
|
255
272
|
/** Dir of "pending device" sentinels (~/.agents/.cache/state/devices-pending/) — one empty-ish file per newly-discovered, not-yet-approved tailnet node. Written by the daemon probe, read by the menu-bar helper (mirrors the attention sentinel dir). */
|
|
256
273
|
export declare function getDevicesPendingDir(): string;
|
|
257
274
|
/** Path to cloud dispatch cache (~/.agents/.cache/cloud/). */
|
|
@@ -373,6 +390,7 @@ export declare function getDeviceMetaPath(): string;
|
|
|
373
390
|
* Gitignored (under .history/) and regenerable; never synced.
|
|
374
391
|
*/
|
|
375
392
|
export declare function getVersionResourcesPath(): string;
|
|
393
|
+
export declare function withMetaLock<T>(fn: () => T): T;
|
|
376
394
|
/**
|
|
377
395
|
* Read and cache ~/.agents/agents.yaml, migrating from legacy locations if needed.
|
|
378
396
|
*
|
package/dist/lib/state.js
CHANGED
|
@@ -267,14 +267,27 @@ function isUserOrSystemRepoCheckout(agentsPath) {
|
|
|
267
267
|
return false;
|
|
268
268
|
return canonicalDotAgentsRepoSlugs().has(origin);
|
|
269
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* True when `agentsPath` is a reserved `.agents` root that must never be
|
|
272
|
+
* treated as a project layer: the user repo (~/.agents), the system repo
|
|
273
|
+
* (~/.agents/.system), or a git checkout of either canonical DotAgents repo.
|
|
274
|
+
* `getProjectAgentsDir` skips these while walking up; direct-cwd callers
|
|
275
|
+
* (`compileRulesForProject`) consult the same predicate so `$HOME` — whose
|
|
276
|
+
* `.agents/rules` is the user layer itself — can never compile as a
|
|
277
|
+
* "project" (RUSH-2725).
|
|
278
|
+
*/
|
|
279
|
+
export function isReservedAgentsDir(agentsPath) {
|
|
280
|
+
return isSamePath(agentsPath, SYSTEM_AGENTS_DIR)
|
|
281
|
+
|| isSamePath(agentsPath, USER_AGENTS_DIR)
|
|
282
|
+
|| isUserOrSystemRepoCheckout(agentsPath);
|
|
283
|
+
}
|
|
270
284
|
/** Walk up from startPath to find a project-scoped .agents/ directory (skipping both roots). */
|
|
271
285
|
export function getProjectAgentsDir(startPath = process.cwd()) {
|
|
272
286
|
let dir = path.resolve(startPath);
|
|
273
287
|
while (true) {
|
|
274
288
|
const agentsPath = path.join(dir, '.agents');
|
|
275
289
|
if (fs.existsSync(agentsPath) && fs.statSync(agentsPath).isDirectory()) {
|
|
276
|
-
if (!
|
|
277
|
-
&& !isUserOrSystemRepoCheckout(agentsPath)) {
|
|
290
|
+
if (!isReservedAgentsDir(agentsPath)) {
|
|
278
291
|
return agentsPath;
|
|
279
292
|
}
|
|
280
293
|
}
|
|
@@ -564,8 +577,15 @@ function getDevicesDir() {
|
|
|
564
577
|
export function getDevicesRegistryPath() { return path.join(getDevicesDir(), 'registry.json'); }
|
|
565
578
|
/** Path to the device ignore-list — tailscale node names the user dismissed, so auto-discovery never re-suggests them. Per-machine, same dir as the registry. */
|
|
566
579
|
export function getDevicesIgnoredPath() { return path.join(getDevicesDir(), 'ignored.json'); }
|
|
567
|
-
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the
|
|
580
|
+
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the per-device doc `config:` block; only lib/devices/config-migration.ts still reads it (to fold + remove it). */
|
|
568
581
|
export function getDevicesAutoLaunchPath() { return path.join(getDevicesDir(), 'auto-launch.json'); }
|
|
582
|
+
/** Path to THIS machine's agent pins — the `agents:` global defaults and
|
|
583
|
+
* `isolatedAgents:` pointers. Each pin names a version installed on THIS
|
|
584
|
+
* machine, so it is machine-local runtime state and lives beside the device
|
|
585
|
+
* registry under `.history/devices/` (untracked) — NOT in the tracked
|
|
586
|
+
* per-device doc, where auto-written pins caused commit churn on every
|
|
587
|
+
* `agents use` / install. Read at call time like the other devices-dir paths. */
|
|
588
|
+
export function getDevicePinsPath() { return path.join(getDevicesDir(), `pins-${machineId()}.json`); }
|
|
569
589
|
/** Dir of "pending device" sentinels (~/.agents/.cache/state/devices-pending/) — one empty-ish file per newly-discovered, not-yet-approved tailnet node. Written by the daemon probe, read by the menu-bar helper (mirrors the attention sentinel dir). */
|
|
570
590
|
export function getDevicesPendingDir() { return path.join(getRuntimeStateDir(), 'devices-pending'); }
|
|
571
591
|
/** Path to cloud dispatch cache (~/.agents/.cache/cloud/). */
|
|
@@ -779,6 +799,7 @@ function currentMetaStamp() {
|
|
|
779
799
|
return safeMtimeMs(META_FILE)
|
|
780
800
|
+ '|' + safeMtimeMs(SYSTEM_META_FILE)
|
|
781
801
|
+ '|' + safeMtimeMs(getDeviceMetaPath())
|
|
802
|
+
+ '|' + safeMtimeMs(getDevicePinsPath())
|
|
782
803
|
+ '|' + safeMtimeMs(getVersionResourcesPath());
|
|
783
804
|
}
|
|
784
805
|
/** Memoize a parsed Meta against the current file mtimes. */
|
|
@@ -786,7 +807,7 @@ function rememberMeta(meta) {
|
|
|
786
807
|
metaCache = { stamp: currentMetaStamp(), meta };
|
|
787
808
|
return meta;
|
|
788
809
|
}
|
|
789
|
-
function withMetaLock(fn) {
|
|
810
|
+
export function withMetaLock(fn) {
|
|
790
811
|
ensureAgentsDir();
|
|
791
812
|
if (metaLockDepth > 0) {
|
|
792
813
|
metaLockDepth++;
|
|
@@ -821,12 +842,15 @@ function writeIfChanged(filePath, content) {
|
|
|
821
842
|
atomicWriteFileSync(filePath, content);
|
|
822
843
|
}
|
|
823
844
|
/**
|
|
824
|
-
* Partition the in-memory Meta across
|
|
845
|
+
* Partition the in-memory Meta across four files by sync-domain:
|
|
825
846
|
* - central `~/.agents/agents.yaml` — portable, everything else
|
|
826
|
-
* (including the user-scope `config:` block and the
|
|
827
|
-
*
|
|
828
|
-
* - device `~/.agents/devices/<machine>/agents.yaml` —
|
|
829
|
-
* `routines:` (
|
|
847
|
+
* (including the user-scope `config:` block and the fleet-wide
|
|
848
|
+
* config defaults under `fleet.defaults.config`)
|
|
849
|
+
* - device `~/.agents/devices/<machine>/agents.yaml` — TRACKED operator doc:
|
|
850
|
+
* `routines:` + `config:` (per-device operator settings) + machine-local
|
|
851
|
+
* `browser:` / `projectRoot` (never synced)
|
|
852
|
+
* - pins `~/.agents/.history/devices/pins-<host>.json` — `agents:` +
|
|
853
|
+
* `isolatedAgents:` (machine-local runtime, untracked)
|
|
830
854
|
* - history `~/.agents/.history/version-resources.json` — `versions:` (machine-local)
|
|
831
855
|
* All callers funnel through writeMeta → here, so nothing else changes. Empty
|
|
832
856
|
* `agents:` / `versions:` are not written (no empty committed files).
|
|
@@ -952,48 +976,83 @@ function writeMetaUnlocked(meta) {
|
|
|
952
976
|
const { agents, isolatedAgents, versions, deviceRoutines, deviceConfig, deviceBrowser, projectRoot, ...central } = meta;
|
|
953
977
|
// Write the machine-local files FIRST, then strip central — so a crash mid-write
|
|
954
978
|
// never removes pins/versions from central before they're persisted elsewhere.
|
|
955
|
-
const devicePath = getDeviceMetaPath();
|
|
956
979
|
const hasAgents = !!agents && Object.keys(agents).length > 0;
|
|
957
980
|
// The isolated pointer names a version installed on THIS machine, exactly like a
|
|
958
|
-
// global pin, so it belongs beside `agents
|
|
981
|
+
// global pin, so it belongs beside `agents` in the pins file rather than in the
|
|
959
982
|
// central doc that syncs — otherwise another machine inherits a pointer to a copy
|
|
960
983
|
// it does not have.
|
|
961
984
|
const hasIsolatedAgents = !!isolatedAgents && Object.keys(isolatedAgents).length > 0;
|
|
962
|
-
|
|
963
|
-
//
|
|
964
|
-
//
|
|
965
|
-
//
|
|
985
|
+
// Pins (`agents:` defaults + `isolatedAgents:`) are machine-local runtime
|
|
986
|
+
// state — they live in the untracked .history pins JSON, never in the tracked
|
|
987
|
+
// per-device doc (auto-written pins there caused commit churn on every
|
|
988
|
+
// `agents use` / install).
|
|
989
|
+
const pinsPath = getDevicePinsPath();
|
|
990
|
+
if (hasAgents || hasIsolatedAgents) {
|
|
991
|
+
const pins = {};
|
|
992
|
+
if (hasAgents)
|
|
993
|
+
pins.agents = agents;
|
|
994
|
+
if (hasIsolatedAgents)
|
|
995
|
+
pins.isolatedAgents = isolatedAgents;
|
|
996
|
+
fs.mkdirSync(path.dirname(pinsPath), { recursive: true });
|
|
997
|
+
writeIfChanged(pinsPath, JSON.stringify(pins, null, 2) + '\n');
|
|
998
|
+
}
|
|
999
|
+
else if (fs.existsSync(pinsPath)) {
|
|
1000
|
+
// Every pin was cleared. Persist the emptied file instead of skipping the
|
|
1001
|
+
// write — otherwise the stale pins file survives and overlayMachineLocal
|
|
1002
|
+
// re-applies the removed pin on the next read.
|
|
1003
|
+
writeIfChanged(pinsPath, '{}\n');
|
|
1004
|
+
}
|
|
1005
|
+
// The tracked per-device doc carries operator-owned fields: `routines:`
|
|
1006
|
+
// (device-local activation) from here, `config:` from lib/device-config.ts,
|
|
1007
|
+
// and machine-local browser defaults / projectRoot (never fleet policy).
|
|
1008
|
+
// Merge over the existing doc so a `config:` block written outside this path
|
|
1009
|
+
// is never clobbered. Pins are stripped defensively — they belong to the pins
|
|
1010
|
+
// file now (the migration strips them too; a hand-edited doc converges on the
|
|
1011
|
+
// next write).
|
|
1012
|
+
const devicePath = getDeviceMetaPath();
|
|
1013
|
+
let doc = {};
|
|
1014
|
+
if (fs.existsSync(devicePath)) {
|
|
1015
|
+
try {
|
|
1016
|
+
const parsed = yaml.parse(fs.readFileSync(devicePath, 'utf-8'));
|
|
1017
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
1018
|
+
doc = parsed;
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
catch { /* preserve the existing tolerance for malformed legacy device YAML */ }
|
|
1022
|
+
}
|
|
1023
|
+
delete doc.agents;
|
|
1024
|
+
delete doc.isolatedAgents;
|
|
1025
|
+
if (Array.isArray(deviceRoutines))
|
|
1026
|
+
doc.routines = deviceRoutines;
|
|
1027
|
+
else
|
|
1028
|
+
delete doc.routines;
|
|
966
1029
|
const hasDeviceConfig = !!deviceConfig && Object.keys(deviceConfig).length > 0;
|
|
1030
|
+
if (hasDeviceConfig)
|
|
1031
|
+
doc.config = deviceConfig;
|
|
1032
|
+
else
|
|
1033
|
+
delete doc.config;
|
|
967
1034
|
const hasDeviceBrowser = !!deviceBrowser && Object.keys(deviceBrowser).length > 0;
|
|
968
|
-
|
|
1035
|
+
if (hasDeviceBrowser)
|
|
1036
|
+
doc.browser = deviceBrowser;
|
|
1037
|
+
else
|
|
1038
|
+
delete doc.browser;
|
|
969
1039
|
const hasProjectRoot = typeof projectRoot === 'string' && projectRoot.length > 0;
|
|
970
|
-
if (
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
const deviceDoc = {};
|
|
976
|
-
if (hasAgents)
|
|
977
|
-
deviceDoc.agents = agents;
|
|
978
|
-
if (hasIsolatedAgents)
|
|
979
|
-
deviceDoc.isolatedAgents = isolatedAgents;
|
|
980
|
-
if (hasDeviceRoutines)
|
|
981
|
-
deviceDoc.routines = deviceRoutines;
|
|
982
|
-
if (hasDeviceConfig)
|
|
983
|
-
deviceDoc.config = deviceConfig;
|
|
984
|
-
if (hasDeviceBrowser)
|
|
985
|
-
deviceDoc.browser = deviceBrowser;
|
|
986
|
-
if (hasProjectRoot)
|
|
987
|
-
deviceDoc.projectRoot = projectRoot;
|
|
1040
|
+
if (hasProjectRoot)
|
|
1041
|
+
doc.projectRoot = projectRoot;
|
|
1042
|
+
else
|
|
1043
|
+
delete doc.projectRoot;
|
|
1044
|
+
if (Object.keys(doc).length > 0) {
|
|
988
1045
|
fs.mkdirSync(path.dirname(devicePath), { recursive: true });
|
|
989
|
-
writeIfChanged(devicePath, META_HEADER + yaml.stringify(
|
|
1046
|
+
writeIfChanged(devicePath, META_HEADER + yaml.stringify(doc));
|
|
990
1047
|
}
|
|
991
1048
|
else if (fs.existsSync(devicePath)) {
|
|
992
|
-
//
|
|
993
|
-
//
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
1049
|
+
// Nothing operator-owned remains — remove the doc rather than leaving an
|
|
1050
|
+
// empty tracked file behind.
|
|
1051
|
+
fs.rmSync(devicePath, { force: true });
|
|
1052
|
+
try {
|
|
1053
|
+
fs.rmdirSync(path.dirname(devicePath));
|
|
1054
|
+
}
|
|
1055
|
+
catch { /* not empty — other files live in the device dir */ }
|
|
997
1056
|
}
|
|
998
1057
|
if (versions && Object.keys(versions).length > 0) {
|
|
999
1058
|
const vrPath = getVersionResourcesPath();
|
|
@@ -1005,20 +1064,27 @@ function writeMetaUnlocked(meta) {
|
|
|
1005
1064
|
}
|
|
1006
1065
|
/**
|
|
1007
1066
|
* Overlay this machine's local state onto a central-portable Meta:
|
|
1008
|
-
* - `agents:` and `isolatedAgents:` from the
|
|
1067
|
+
* - `agents:` and `isolatedAgents:` from the pins file (device wins; the union
|
|
1009
1068
|
* both preserves the one-level merge and self-heals a pre-migration central that
|
|
1010
1069
|
* still has pins)
|
|
1011
|
-
* - `routines:`
|
|
1012
|
-
*
|
|
1070
|
+
* - `routines:` / machine-local `browser:` / `projectRoot` from the tracked device
|
|
1071
|
+
* doc (device-local; the doc's `config:` block is read by lib/device-config.ts,
|
|
1072
|
+
* not overlaid here)
|
|
1013
1073
|
* - `versions:` from the history JSON (wholesale replace; falls back to
|
|
1014
1074
|
* whatever central carried when the history file doesn't exist yet)
|
|
1015
|
-
*
|
|
1016
|
-
* (Device operator config is NOT overlaid here: it lives centrally under
|
|
1017
|
-
* `fleet.devices.<name>.config` — see lib/device-config.ts. The legacy
|
|
1018
|
-
* `config:`/`defaultBrowserProfile:` keys in a device doc are folded into the
|
|
1019
|
-
* central block by lib/devices/config-migration.ts.)
|
|
1020
1075
|
*/
|
|
1021
1076
|
function overlayMachineLocal(meta) {
|
|
1077
|
+
const pinsPath = getDevicePinsPath();
|
|
1078
|
+
if (fs.existsSync(pinsPath)) {
|
|
1079
|
+
try {
|
|
1080
|
+
const pins = JSON.parse(fs.readFileSync(pinsPath, 'utf-8'));
|
|
1081
|
+
if (pins?.agents)
|
|
1082
|
+
meta.agents = { ...meta.agents, ...pins.agents };
|
|
1083
|
+
if (pins?.isolatedAgents)
|
|
1084
|
+
meta.isolatedAgents = { ...meta.isolatedAgents, ...pins.isolatedAgents };
|
|
1085
|
+
}
|
|
1086
|
+
catch { /* ignore malformed pins file */ }
|
|
1087
|
+
}
|
|
1022
1088
|
const devicePath = getDeviceMetaPath();
|
|
1023
1089
|
if (fs.existsSync(devicePath)) {
|
|
1024
1090
|
let dm = null;
|
|
@@ -1027,10 +1093,13 @@ function overlayMachineLocal(meta) {
|
|
|
1027
1093
|
}
|
|
1028
1094
|
catch { /* preserve the existing tolerance for malformed legacy device YAML */ }
|
|
1029
1095
|
if (dm) {
|
|
1096
|
+
// Pre-migration pins may still live in the tracked doc — honor them until
|
|
1097
|
+
// migrateDeviceConfigStores strips them. Pins-file values already applied
|
|
1098
|
+
// above win on key conflict.
|
|
1030
1099
|
if (dm?.agents)
|
|
1031
|
-
meta.agents = { ...
|
|
1100
|
+
meta.agents = { ...dm.agents, ...meta.agents };
|
|
1032
1101
|
if (dm?.isolatedAgents)
|
|
1033
|
-
meta.isolatedAgents = { ...
|
|
1102
|
+
meta.isolatedAgents = { ...dm.isolatedAgents, ...meta.isolatedAgents };
|
|
1034
1103
|
if (typeof dm?.projectRoot === 'string')
|
|
1035
1104
|
meta.projectRoot = dm.projectRoot;
|
|
1036
1105
|
if (dm?.browser && typeof dm.browser === 'object' && !Array.isArray(dm.browser)) {
|
|
@@ -1039,7 +1108,7 @@ function overlayMachineLocal(meta) {
|
|
|
1039
1108
|
if (dm?.config && typeof dm.config === 'object' && !Array.isArray(dm.config)) {
|
|
1040
1109
|
meta.deviceConfig = { ...meta.deviceConfig, ...dm.config };
|
|
1041
1110
|
}
|
|
1042
|
-
if (
|
|
1111
|
+
if (Object.prototype.hasOwnProperty.call(dm, 'routines')) {
|
|
1043
1112
|
if (!Array.isArray(dm.routines) || dm.routines.some((name) => typeof name !== 'string')) {
|
|
1044
1113
|
throw new Error(`Device config corrupted at ${devicePath}: routines must be a string list.`);
|
|
1045
1114
|
}
|
package/dist/lib/subagents.js
CHANGED
|
@@ -11,7 +11,7 @@ import * as path from 'path';
|
|
|
11
11
|
import * as yaml from 'yaml';
|
|
12
12
|
import { capableAgents } from './capabilities.js';
|
|
13
13
|
import { getSubagentsDir, getUserSubagentsDir, getTrashSubagentsDir } from './state.js';
|
|
14
|
-
import { listInstalledVersions, getVersionHomePath } from './versions.js';
|
|
14
|
+
import { listInstalledVersions, getVersionHomePath } from './installations/versions.js';
|
|
15
15
|
import { safeJoin } from './paths.js';
|
|
16
16
|
import { subagentTarget, writeSubagentToHome, listInstalledSubagentNames, listInstalledSubagentsRich, removeSubagentFromHome, trashSubagentFromHome, copyDirWithRename, } from './subagents-registry.js';
|
|
17
17
|
/**
|
package/dist/lib/sync-status.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
import simpleGit from 'simple-git';
|
|
22
22
|
import { ALL_AGENT_IDS } from './agents.js';
|
|
23
23
|
import { diffVersionResources, } from './doctor-diff.js';
|
|
24
|
-
import { listInstalledVersions, getGlobalDefault } from './versions.js';
|
|
24
|
+
import { listInstalledVersions, getGlobalDefault } from './installations/versions.js';
|
|
25
25
|
import { loadManifest } from './staleness/index.js';
|
|
26
26
|
import { getSystemAgentsDir } from './state.js';
|
|
27
27
|
import { isGitRepo } from './git.js';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* repos -> git pull of ~/.agents + enabled ~/.agents-* extras (pullRepo)
|
|
13
13
|
* secrets -> listRemoteBundles + pullBundle (needs a passphrase; skipped
|
|
14
14
|
* cleanly when none is available — tokenized non-interactive auth
|
|
15
|
-
* arrives with `agents
|
|
15
|
+
* arrives with `agents secrets vault unlock`, #366/#367)
|
|
16
16
|
* reconcile-> refresh({ skipPrompts }) — re-materialize resources into homes
|
|
17
17
|
*/
|
|
18
18
|
/** The umbrella flags off `agents sync`. */
|
|
@@ -59,6 +59,11 @@ export interface UmbrellaResult {
|
|
|
59
59
|
skipped: boolean;
|
|
60
60
|
};
|
|
61
61
|
reconciled: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Resources the reconcile stage refused to write, as user-facing sentences.
|
|
64
|
+
* Empty when nothing was declined — never conflated with "nothing to do".
|
|
65
|
+
*/
|
|
66
|
+
declined: string[];
|
|
62
67
|
}
|
|
63
68
|
export interface RunUmbrellaArgs {
|
|
64
69
|
flags: UmbrellaFlags;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* repos -> git pull of ~/.agents + enabled ~/.agents-* extras (pullRepo)
|
|
13
13
|
* secrets -> listRemoteBundles + pullBundle (needs a passphrase; skipped
|
|
14
14
|
* cleanly when none is available — tokenized non-interactive auth
|
|
15
|
-
* arrives with `agents
|
|
15
|
+
* arrives with `agents secrets vault unlock`, #366/#367)
|
|
16
16
|
* reconcile-> refresh({ skipPrompts }) — re-materialize resources into homes
|
|
17
17
|
*/
|
|
18
18
|
import { pullRepo } from './git.js';
|
|
@@ -55,7 +55,7 @@ export function planUmbrellaStages(f) {
|
|
|
55
55
|
export async function runUmbrellaSync(args) {
|
|
56
56
|
const { flags, log, yes, passphrase, quiet = false } = args;
|
|
57
57
|
const plan = planUmbrellaStages(flags);
|
|
58
|
-
const result = { plan, reconciled: false };
|
|
58
|
+
const result = { plan, reconciled: false, declined: [] };
|
|
59
59
|
if (plan.fetchRepos) {
|
|
60
60
|
const dirs = [
|
|
61
61
|
{ alias: 'user', dir: getUserAgentsDir() },
|
|
@@ -74,13 +74,17 @@ export async function runUmbrellaSync(args) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
result.repos = { pulled, errors };
|
|
77
|
+
if (!errors.some((error) => error.startsWith('user:'))) {
|
|
78
|
+
const { reconcileDeviceDiscoveryPolicies } = await import('./devices/discovery-policy.js');
|
|
79
|
+
await reconcileDeviceDiscoveryPolicies();
|
|
80
|
+
}
|
|
77
81
|
}
|
|
78
82
|
if (plan.fetchSecrets) {
|
|
79
83
|
if (!passphrase) {
|
|
80
84
|
result.secrets = {
|
|
81
85
|
pulled: 0,
|
|
82
86
|
skipped: true,
|
|
83
|
-
reason: `no passphrase — set ${SYNC_PASSPHRASE_ENV} or run \`agents
|
|
87
|
+
reason: `no passphrase — set ${SYNC_PASSPHRASE_ENV} or run \`agents secrets vault unlock\` (#366)`,
|
|
84
88
|
errors: [],
|
|
85
89
|
};
|
|
86
90
|
log(`secrets: skipped (no passphrase — set ${SYNC_PASSPHRASE_ENV})`);
|
|
@@ -109,8 +113,9 @@ export async function runUmbrellaSync(args) {
|
|
|
109
113
|
}
|
|
110
114
|
if (plan.reconcile) {
|
|
111
115
|
const { refresh } = await import('./refresh.js');
|
|
112
|
-
await refresh({ skipPrompts: yes, quiet });
|
|
116
|
+
const refreshed = await refresh({ skipPrompts: yes, quiet });
|
|
113
117
|
result.reconciled = true;
|
|
118
|
+
result.declined = refreshed.declined;
|
|
114
119
|
// Keep already-registered devices' reachability current, and surface newly
|
|
115
120
|
// appeared tailnet nodes as "pending" for the menu-bar Register/Ignore gate
|
|
116
121
|
// rather than silently adding them (refresh mode). Soft: a machine without
|
package/dist/lib/teams/agents.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* multiple permission modes (plan, edit, full).
|
|
9
9
|
*/
|
|
10
10
|
import { spawn, execSync } from 'child_process';
|
|
11
|
-
import { getAgentsInvocation } from '../daemon.js';
|
|
11
|
+
import { getAgentsInvocation } from '../daemon/daemon.js';
|
|
12
12
|
import * as fs from 'fs/promises';
|
|
13
13
|
import * as fsSync from 'fs';
|
|
14
14
|
import * as path from 'path';
|
|
@@ -20,7 +20,7 @@ import { normalizeEvents } from './parsers.js';
|
|
|
20
20
|
import { debug } from './debug.js';
|
|
21
21
|
import { getAgentsDir as getSystemAgentsDir, getShimsDir } from '../state.js';
|
|
22
22
|
import { AGENTS, getAccountInfo } from '../agents.js';
|
|
23
|
-
import { resolveVersion, isVersionInstalled, verifyInstalledBinaryLaunches } from '../versions.js';
|
|
23
|
+
import { resolveVersion, isVersionInstalled, verifyInstalledBinaryLaunches } from '../installations/versions.js';
|
|
24
24
|
import { sanitizeProcessEnv } from '../secrets/bundles.js';
|
|
25
25
|
import { resolveActor, actorEnv } from '../actor.js';
|
|
26
26
|
import { recordRunName } from '../session/run-names.js';
|
|
@@ -13,7 +13,7 @@ import * as path from 'path';
|
|
|
13
13
|
import { randomBytes } from 'crypto';
|
|
14
14
|
import lockfile from 'proper-lockfile';
|
|
15
15
|
import { getTeamsRegistryPath } from '../state.js';
|
|
16
|
-
import { emit } from '../events.js';
|
|
16
|
+
import { emit } from '../feed/events.js';
|
|
17
17
|
async function registryPath() {
|
|
18
18
|
return getTeamsRegistryPath();
|
|
19
19
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* the editor CLI's `--open-url` flag. The extension opens an editor-tab terminal
|
|
8
8
|
* in `cwd`, runs `command`, and its shell-adoption promotes a resume command
|
|
9
9
|
* (e.g. `claude --resume <id>`) to the matching agent chip. Driving the editor
|
|
10
|
-
* CLI (not macOS `open`) means this works over `--
|
|
10
|
+
* CLI (not macOS `open`) means this works over `--device` SSH and on Linux, needs
|
|
11
11
|
* no OS URL-scheme handler registration, and sends the command into an
|
|
12
12
|
* already-interactive login shell — so no `zsh -ilc` wrap (the other backends'
|
|
13
13
|
* wrapper) is applied here.
|
|
@@ -19,7 +19,7 @@ export function specForRequest(req) {
|
|
|
19
19
|
export async function openSurface(req, opts = {}) {
|
|
20
20
|
try {
|
|
21
21
|
// Both can throw: specForRequest on an unknown backend, runSpec when the
|
|
22
|
-
// SSH transport rejects an invalid --
|
|
22
|
+
// SSH transport rejects an invalid --device target. Keep them inside the
|
|
23
23
|
// catch so a bad request degrades to a per-surface failure, never a throw.
|
|
24
24
|
const spec = specForRequest(req);
|
|
25
25
|
const res = await runSpec(spec, req.host, opts.resolveHost);
|
|
@@ -16,3 +16,7 @@ export { specForRequest, buildRequests, openSurface, openSurfaces, type OpenOpti
|
|
|
16
16
|
export { runLocal, runRemote, runSpec, remoteCommand, type HostResolver, type RunResult } from './transport.js';
|
|
17
17
|
export { injectIntoTerminal, tmuxSendKeysArgv, tmuxInjectSpecs, itermInjectScript, ghosttyInjectScript, appleScriptInjectSpec, vscodiumInjectUri, vscodiumInjectSpec, type InjectTarget, type InjectBackend, type InjectOptions, type InjectResult, } from './inject.js';
|
|
18
18
|
export { resolveInjectTarget, resolveInjectTargetForSession, type InjectResolution, type InjectRail, type ResolveOptions, } from './resolve.js';
|
|
19
|
+
export { iLoginShell } from './shell.js';
|
|
20
|
+
export { shellQuote } from './quote.js';
|
|
21
|
+
export { parseTerminalFlag, stripTerminalFlag, buildRunCommand, openRunInTerminal, toHostSamples, TERMINAL_FLAG_BACKENDS } from './run-surface.js';
|
|
22
|
+
export type { OpenRunSurfaceParams, OpenRunSurfaceResult } from './run-surface.js';
|
|
@@ -7,3 +7,6 @@ export { specForRequest, buildRequests, openSurface, openSurfaces, } from './eng
|
|
|
7
7
|
export { runLocal, runRemote, runSpec, remoteCommand } from './transport.js';
|
|
8
8
|
export { injectIntoTerminal, tmuxSendKeysArgv, tmuxInjectSpecs, itermInjectScript, ghosttyInjectScript, appleScriptInjectSpec, vscodiumInjectUri, vscodiumInjectSpec, } from './inject.js';
|
|
9
9
|
export { resolveInjectTarget, resolveInjectTargetForSession, } from './resolve.js';
|
|
10
|
+
export { iLoginShell } from './shell.js';
|
|
11
|
+
export { shellQuote } from './quote.js';
|
|
12
|
+
export { parseTerminalFlag, stripTerminalFlag, buildRunCommand, openRunInTerminal, toHostSamples, TERMINAL_FLAG_BACKENDS } from './run-surface.js';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* It mirrors the engine's shape exactly: pure per-backend spec builders (like
|
|
13
13
|
* `tmuxTabArgv` / `itermTabScript`) produce a `LaunchSpec` (argv), and the same
|
|
14
14
|
* `runSpec` transport runs it — so injection inherits the engine's local/remote
|
|
15
|
-
* (`--
|
|
15
|
+
* (`--device` over SSH) execution for free. A `LaunchSpec` never opens anything;
|
|
16
16
|
* building one is side-effect-free and unit-testable without a display.
|
|
17
17
|
*
|
|
18
18
|
* Backends (each addresses the EXACT split, not the frontmost surface):
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* into the swarmify `swarm-ext` extension's `/inject` verb, targeting
|
|
28
28
|
* a live-terminals.json terminal by id. Focus-independent, exact
|
|
29
29
|
* terminal, and (like the launch backend, src/lib/terminal/backends/
|
|
30
|
-
* vscodium-agent.ts) works over `--
|
|
30
|
+
* vscodium-agent.ts) works over `--device` SSH and on Linux.
|
|
31
31
|
* - ghostty (macOS) → COARSE only: Ghostty has no scripting dictionary, so
|
|
32
32
|
* there is no per-split addressing — this raises a window and types
|
|
33
33
|
* via System Events keystrokes, stealing focus. The resolver refuses
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* It mirrors the engine's shape exactly: pure per-backend spec builders (like
|
|
13
13
|
* `tmuxTabArgv` / `itermTabScript`) produce a `LaunchSpec` (argv), and the same
|
|
14
14
|
* `runSpec` transport runs it — so injection inherits the engine's local/remote
|
|
15
|
-
* (`--
|
|
15
|
+
* (`--device` over SSH) execution for free. A `LaunchSpec` never opens anything;
|
|
16
16
|
* building one is side-effect-free and unit-testable without a display.
|
|
17
17
|
*
|
|
18
18
|
* Backends (each addresses the EXACT split, not the frontmost surface):
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* into the swarmify `swarm-ext` extension's `/inject` verb, targeting
|
|
28
28
|
* a live-terminals.json terminal by id. Focus-independent, exact
|
|
29
29
|
* terminal, and (like the launch backend, src/lib/terminal/backends/
|
|
30
|
-
* vscodium-agent.ts) works over `--
|
|
30
|
+
* vscodium-agent.ts) works over `--device` SSH and on Linux.
|
|
31
31
|
* - ghostty (macOS) → COARSE only: Ghostty has no scripting dictionary, so
|
|
32
32
|
* there is no per-split addressing — this raises a window and types
|
|
33
33
|
* via System Events keystrokes, stealing focus. The resolver refuses
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* are short-lived commands that create the surface and return, so waiting gives
|
|
6
6
|
* a real success/failure. Remote: serialize the argv into one shell string and
|
|
7
7
|
* hand it to `sshExec` — the same hardened SSH primitive `agents sessions
|
|
8
|
-
* --
|
|
8
|
+
* --device` and the browser driver use (target-injection guard, POSIX quoting,
|
|
9
9
|
* connection multiplexing).
|
|
10
10
|
*/
|
|
11
11
|
import { spawn } from 'child_process';
|
package/dist/lib/tmux/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { findTmuxBinary, isTmuxInstalled, getTmuxVersion, isTmuxVersionSupported, MIN_TMUX_VERSION, assertTmuxAvailable, TmuxUnavailableError, TmuxCommandError, runTmux, attachTmux, } from './binary.js';
|
|
7
7
|
export { getDefaultSocketPath, getSessionMetaPath, ensureTmuxDir, } from './paths.js';
|
|
8
|
-
export { assertValidSessionName, slugifyName, hasSession, createSession, killSession, killAll, listSessions, splitPane, sendKeys, capturePane, readSessionMeta, TmuxSessionError, type SessionMeta, type CreateSessionOptions, type ListedSession, type SplitOptions, type SendOptions, type CaptureOptions, } from './session.js';
|
|
8
|
+
export { assertValidSessionName, slugifyName, hasSession, createSession, killSession, killAll, listSessions, splitPane, sendKeys, capturePane, readSessionMeta, TmuxSessionError, reconcileSessionHooks, ensureSessionHookRepaired, type SessionMeta, type CreateSessionOptions, type ListedSession, type SplitOptions, type SendOptions, type CaptureOptions, } from './session.js';
|
package/dist/lib/tmux/index.js
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { findTmuxBinary, isTmuxInstalled, getTmuxVersion, isTmuxVersionSupported, MIN_TMUX_VERSION, assertTmuxAvailable, TmuxUnavailableError, TmuxCommandError, runTmux, attachTmux, } from './binary.js';
|
|
7
7
|
export { getDefaultSocketPath, getSessionMetaPath, ensureTmuxDir, } from './paths.js';
|
|
8
|
-
export { assertValidSessionName, slugifyName, hasSession, createSession, killSession, killAll, listSessions, splitPane, sendKeys, capturePane, readSessionMeta, TmuxSessionError, } from './session.js';
|
|
8
|
+
export { assertValidSessionName, slugifyName, hasSession, createSession, killSession, killAll, listSessions, splitPane, sendKeys, capturePane, readSessionMeta, TmuxSessionError, reconcileSessionHooks, ensureSessionHookRepaired, } from './session.js';
|
|
@@ -188,7 +188,7 @@ export declare function paneExitStatus(pane: string, socket?: string): Promise<P
|
|
|
188
188
|
* Best-effort — returns false when tmux rejects the hook so callers do not
|
|
189
189
|
* stamp a schema marker and daemon reconciliation can retry later.
|
|
190
190
|
*/
|
|
191
|
-
export declare function setSessionHook(name: string, hook: string, command: string, socket?: string): Promise<boolean>;
|
|
191
|
+
export declare function setSessionHook(name: string, hook: string, command: string, socket?: string, timeoutMs?: number): Promise<boolean>;
|
|
192
192
|
/**
|
|
193
193
|
* Schema version of the `pane-died` hook installed on managed `agents run`
|
|
194
194
|
* sessions. Bump whenever the hook's SHAPE changes so the daemon reconcile
|
|
@@ -231,7 +231,7 @@ export declare const AGENT_HOOK_SCHEMA = 5;
|
|
|
231
231
|
*/
|
|
232
232
|
export declare function agentPaneDiedHook(sessionName: string, agentPane: string): string;
|
|
233
233
|
/** Stamp a session's hook-schema marker to the current version. */
|
|
234
|
-
export declare function markSessionHookSchema(name: string, socket?: string): Promise<void>;
|
|
234
|
+
export declare function markSessionHookSchema(name: string, socket?: string, timeoutMs?: number): Promise<void>;
|
|
235
235
|
/**
|
|
236
236
|
* The outcome of {@link prepareSessionForResume}. `attach` carries the pane it
|
|
237
237
|
* positively resolved so the caller can read that pane's exit status back after
|
|
@@ -261,15 +261,30 @@ export declare function prepareSessionForResume(name: string, socket?: string):
|
|
|
261
261
|
* exited a split — self-heals in place, without waiting for those agents to exit
|
|
262
262
|
* or for the server to be recycled.
|
|
263
263
|
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
264
|
+
* NOT a daemon poll — the 5-minute `tmux-reconcile` routine that used to call this
|
|
265
|
+
* was deleted (RUSH-2495). It survives as the version-skew ONE-SHOT: the daemon
|
|
266
|
+
* calls it once at startup (`runDaemon` in `../daemon.js`) and once from the
|
|
267
|
+
* upgrade-time migration (`runMigration` in `../migrate.js`), so a session a
|
|
268
|
+
* pre-fix binary left with a stale hook still self-heals without a live poller.
|
|
269
|
+
* `ensureSessionHookRepaired` covers the steady-state gap between those two
|
|
270
|
+
* points by repairing a single session right before it's attached to. The
|
|
271
|
+
* per-session `@ag_hook_schema` marker makes both paths a cheap no-op once a
|
|
272
|
+
* session is current. Only run-wrapped sessions (`ag-` prefix) are touched — an
|
|
267
273
|
* externally-created session on the socket keeps whatever hook it set.
|
|
268
274
|
*/
|
|
269
275
|
export declare function reconcileSessionHooks(socket?: string): Promise<{
|
|
270
276
|
scanned: number;
|
|
271
277
|
reconciled: number;
|
|
272
278
|
}>;
|
|
279
|
+
/**
|
|
280
|
+
* Repair a single managed session's `pane-died` hook right before it is
|
|
281
|
+
* attached to, so a legacy session left by a pre-fix binary self-heals on the
|
|
282
|
+
* next touch instead of waiting for the next daemon-startup/upgrade one-shot
|
|
283
|
+
* (RUSH-2435). Only `ag-`-prefixed (run-wrapped) sessions are touched; a no-op
|
|
284
|
+
* for anything else. Best-effort — never throws, so a repair failure can never
|
|
285
|
+
* block the attach it is protecting.
|
|
286
|
+
*/
|
|
287
|
+
export declare function ensureSessionHookRepaired(name: string, socket?: string): Promise<void>;
|
|
273
288
|
/**
|
|
274
289
|
* List live sessions on the socket. Reconciles meta JSONs against tmux's view:
|
|
275
290
|
* - tmux session with no meta → returned without `meta` (external session)
|
|
@@ -277,6 +292,7 @@ export declare function reconcileSessionHooks(socket?: string): Promise<{
|
|
|
277
292
|
*/
|
|
278
293
|
export declare function listSessions(opts?: {
|
|
279
294
|
socket?: string;
|
|
295
|
+
timeoutMs?: number;
|
|
280
296
|
}): Promise<ListedSession[]>;
|
|
281
297
|
export interface SplitOptions {
|
|
282
298
|
name: string;
|