@phnx-labs/agents-cli 1.22.35 → 1.22.37
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 +666 -2
- package/README.md +75 -35
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1211 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/attach.js +17 -4
- package/dist/commands/audit.d.ts +8 -8
- package/dist/commands/audit.js +57 -47
- package/dist/commands/browser.js +15 -11
- package/dist/commands/cloud.js +1 -1
- package/dist/commands/commands.js +0 -11
- package/dist/commands/computer-actions.js +33 -0
- package/dist/commands/computer-sessions-picker.d.ts +21 -0
- package/dist/commands/computer-sessions-picker.js +141 -0
- package/dist/commands/computer.d.ts +16 -0
- package/dist/commands/computer.js +37 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.js +401 -0
- package/dist/commands/cp.d.ts +84 -0
- package/dist/commands/cp.js +231 -0
- package/dist/commands/daemon.js +243 -14
- package/dist/commands/detach-core.d.ts +1 -1
- package/dist/commands/detach-core.js +12 -2
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +64 -5
- package/dist/commands/events.d.ts +24 -12
- package/dist/commands/events.js +144 -28
- package/dist/commands/exec.js +85 -41
- package/dist/commands/feed.d.ts +1 -1
- package/dist/commands/feed.js +16 -8
- package/dist/commands/focus.d.ts +33 -1
- package/dist/commands/focus.js +177 -17
- package/dist/commands/funnel.d.ts +1 -1
- package/dist/commands/go.js +9 -8
- package/dist/commands/harness-wizard.d.ts +1 -0
- package/dist/commands/harness-wizard.js +18 -20
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +59 -26
- package/dist/commands/hooks.js +0 -11
- package/dist/commands/inspect.d.ts +94 -1
- package/dist/commands/inspect.js +866 -40
- package/dist/commands/lease.d.ts +4 -4
- package/dist/commands/lease.js +6 -6
- package/dist/commands/login.js +0 -13
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +2 -2
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/memory.js +7 -2
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +37 -6
- package/dist/commands/models.js +4 -0
- package/dist/commands/monitors.d.ts +0 -1
- package/dist/commands/monitors.js +199 -16
- package/dist/commands/open.d.ts +18 -0
- package/dist/commands/open.js +57 -0
- package/dist/commands/packages.js +2 -107
- package/dist/commands/plugins.js +6 -3
- package/dist/commands/profiles.d.ts +1 -0
- package/dist/commands/profiles.js +16 -160
- package/dist/commands/projects.d.ts +28 -0
- package/dist/commands/projects.js +125 -5
- package/dist/commands/reconnect.js +9 -3
- package/dist/commands/repo.js +42 -1
- package/dist/commands/resource-view.d.ts +17 -0
- package/dist/commands/resource-view.js +36 -14
- package/dist/commands/resume.js +9 -2
- package/dist/commands/routines.d.ts +0 -2
- package/dist/commands/routines.js +473 -289
- package/dist/commands/secrets.js +52 -9
- package/dist/commands/sessions-export.d.ts +47 -0
- package/dist/commands/sessions-export.js +116 -6
- package/dist/commands/sessions-import.d.ts +17 -0
- package/dist/commands/sessions-import.js +114 -6
- package/dist/commands/sessions-migrate.d.ts +27 -0
- package/dist/commands/sessions-migrate.js +50 -9
- package/dist/commands/sessions-picker.js +23 -4
- package/dist/commands/sessions-resume.d.ts +5 -3
- package/dist/commands/sessions-resume.js +30 -8
- package/dist/commands/sessions-watch.d.ts +2 -0
- package/dist/commands/sessions-watch.js +53 -0
- package/dist/commands/sessions.d.ts +66 -3
- package/dist/commands/sessions.js +298 -47
- package/dist/commands/set.d.ts +1 -1
- package/dist/commands/set.js +2 -2
- package/dist/commands/setup-browser.js +2 -2
- package/dist/commands/setup-mine.js +0 -1
- package/dist/commands/setup-preferences.js +1 -1
- package/dist/commands/setup-share.js +34 -4
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +26 -0
- package/dist/commands/share.d.ts +67 -0
- package/dist/commands/share.js +275 -12
- package/dist/commands/skills.js +0 -11
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/ssh.d.ts +18 -0
- package/dist/commands/ssh.js +549 -210
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +212 -32
- package/dist/commands/teams.d.ts +13 -0
- package/dist/commands/teams.js +187 -30
- package/dist/commands/tickets.d.ts +2 -0
- package/dist/commands/tickets.js +43 -0
- package/dist/commands/update.js +2 -4
- package/dist/commands/usage.js +5 -3
- package/dist/commands/versions.js +11 -5
- package/dist/commands/view.js +15 -7
- package/dist/commands/webhook.d.ts +2 -2
- package/dist/commands/webhook.js +7 -7
- package/dist/index.d.ts +18 -2
- package/dist/index.js +53 -1264
- package/dist/lib/account-catalog.d.ts +18 -0
- package/dist/lib/account-catalog.js +38 -0
- package/dist/lib/account-provider-registry.d.ts +18 -0
- package/dist/lib/account-provider-registry.js +59 -0
- package/dist/lib/account-registry.d.ts +40 -0
- package/dist/lib/account-registry.js +239 -0
- package/dist/lib/account-schema.d.ts +44 -0
- package/dist/lib/account-schema.js +91 -0
- package/dist/lib/account-state-service.d.ts +21 -0
- package/dist/lib/account-state-service.js +60 -0
- package/dist/lib/activity.d.ts +1 -1
- package/dist/lib/activity.js +8 -1
- package/dist/lib/add-dir.d.ts +80 -0
- package/dist/lib/add-dir.js +241 -0
- package/dist/lib/agent-cli-commands.d.ts +11 -0
- package/dist/lib/agent-cli-commands.js +30 -0
- package/dist/lib/agents.js +44 -36
- package/dist/lib/answer-router.js +1 -1
- package/dist/lib/audit/log.d.ts +10 -27
- package/dist/lib/audit/log.js +20 -33
- package/dist/lib/auth-health.d.ts +9 -2
- package/dist/lib/auth-health.js +42 -9
- package/dist/lib/auto-pull-worker.js +7 -3
- package/dist/lib/auto-pull.d.ts +44 -3
- package/dist/lib/auto-pull.js +88 -5
- package/dist/lib/binary-shadow.d.ts +28 -0
- package/dist/lib/binary-shadow.js +121 -0
- package/dist/lib/brand.js +9 -3
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +81 -4
- package/dist/lib/browser/profiles.d.ts +3 -2
- package/dist/lib/browser/profiles.js +65 -22
- package/dist/lib/browser/service.d.ts +4 -0
- package/dist/lib/browser/service.js +30 -3
- package/dist/lib/browser/sessions-list.d.ts +22 -2
- package/dist/lib/browser/sessions-list.js +54 -6
- package/dist/lib/browser/stream.d.ts +2 -0
- package/dist/lib/browser/stream.js +1 -0
- package/dist/lib/browser/types.d.ts +19 -0
- package/dist/lib/byok-usage.d.ts +9 -2
- package/dist/lib/byok-usage.js +133 -31
- package/dist/lib/cli-entry.d.ts +11 -0
- package/dist/lib/cli-entry.js +46 -0
- package/dist/lib/cloud/host.d.ts +1 -1
- package/dist/lib/cloud/host.js +2 -2
- package/dist/lib/cloud/registry.js +1 -1
- package/dist/lib/cloud/types.d.ts +1 -1
- package/dist/lib/commands.d.ts +2 -0
- package/dist/lib/commands.js +2 -0
- package/dist/lib/computer/sessions-list.d.ts +150 -0
- package/dist/lib/computer/sessions-list.js +363 -0
- package/dist/lib/config-keys.d.ts +86 -0
- package/dist/lib/config-keys.js +193 -0
- package/dist/lib/config-machine-keys.d.ts +12 -0
- package/dist/lib/config-machine-keys.js +17 -0
- package/dist/lib/config-transfer.js +3 -4
- package/dist/lib/crabbox/cli.d.ts +2 -2
- package/dist/lib/crabbox/cli.js +3 -3
- package/dist/lib/daemon-health.d.ts +22 -0
- package/dist/lib/daemon-health.js +33 -3
- package/dist/lib/daemon-services.d.ts +50 -0
- package/dist/lib/daemon-services.js +147 -0
- package/dist/lib/daemon-ticks.d.ts +35 -66
- package/dist/lib/daemon-ticks.js +77 -159
- package/dist/lib/daemon.d.ts +72 -4
- package/dist/lib/daemon.js +792 -202
- package/dist/lib/deeplink/register.d.ts +49 -0
- package/dist/lib/deeplink/register.js +253 -0
- package/dist/lib/deeplink/url.d.ts +34 -0
- package/dist/lib/deeplink/url.js +78 -0
- package/dist/lib/device-config.d.ts +124 -29
- package/dist/lib/device-config.js +346 -141
- package/dist/lib/devices/config-migration.d.ts +42 -0
- package/dist/lib/devices/config-migration.js +203 -0
- package/dist/lib/devices/connect.js +14 -7
- package/dist/lib/devices/doctor-findings.d.ts +4 -1
- package/dist/lib/devices/doctor-findings.js +20 -1
- package/dist/lib/devices/harness-inventory.d.ts +11 -2
- package/dist/lib/devices/harness-inventory.js +0 -0
- package/dist/lib/devices/health.d.ts +1 -1
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/pending.d.ts +22 -1
- package/dist/lib/devices/pending.js +67 -2
- package/dist/lib/devices/registry.d.ts +0 -25
- package/dist/lib/devices/registry.js +2 -83
- package/dist/lib/devices/resolve-profile.d.ts +20 -0
- package/dist/lib/devices/resolve-profile.js +44 -0
- package/dist/lib/devices/rollout-verify.d.ts +101 -0
- package/dist/lib/devices/rollout-verify.js +193 -0
- package/dist/lib/devices/ssh-config.js +10 -6
- package/dist/lib/event-families.d.ts +28 -0
- package/dist/lib/event-families.js +159 -0
- package/dist/lib/event-stream.d.ts +9 -1
- package/dist/lib/event-stream.js +26 -9
- package/dist/lib/events.d.ts +9 -1
- package/dist/lib/events.js +21 -6
- package/dist/lib/exec.d.ts +30 -0
- package/dist/lib/exec.js +219 -121
- package/dist/lib/feed-broadcast.d.ts +25 -0
- package/dist/lib/feed-broadcast.js +33 -0
- package/dist/lib/feed.d.ts +1 -1
- package/dist/lib/feed.js +12 -2
- package/dist/lib/fleet/capture.js +15 -0
- package/dist/lib/fleet/manifest.js +9 -0
- package/dist/lib/fleet/types.d.ts +9 -0
- package/dist/lib/fleet-status.js +10 -8
- package/dist/lib/git.d.ts +20 -6
- package/dist/lib/git.js +121 -17
- package/dist/lib/hosts/dispatch.d.ts +8 -3
- package/dist/lib/hosts/dispatch.js +29 -3
- package/dist/lib/hosts/logs.d.ts +2 -2
- package/dist/lib/hosts/logs.js +2 -2
- package/dist/lib/hosts/option.js +1 -1
- package/dist/lib/hosts/passthrough.d.ts +2 -3
- package/dist/lib/hosts/passthrough.js +10 -24
- package/dist/lib/hosts/progress.js +2 -2
- package/dist/lib/hosts/providers/devices.d.ts +3 -3
- package/dist/lib/hosts/providers/devices.js +18 -12
- package/dist/lib/hosts/ready.d.ts +5 -1
- package/dist/lib/hosts/ready.js +9 -3
- package/dist/lib/hosts/reconcile.d.ts +2 -2
- package/dist/lib/hosts/reconcile.js +2 -2
- package/dist/lib/hosts/registry.js +14 -9
- package/dist/lib/hosts/remote-cmd.js +1 -1
- package/dist/lib/hosts/remote-os.d.ts +9 -6
- package/dist/lib/hosts/remote-os.js +13 -6
- package/dist/lib/hosts/routing-flag.d.ts +23 -0
- package/dist/lib/hosts/routing-flag.js +41 -0
- package/dist/lib/hosts/run-target.js +1 -1
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/tasks.d.ts +6 -6
- package/dist/lib/hosts/tasks.js +4 -4
- package/dist/lib/hosts/types.js +1 -2
- package/dist/lib/installations/resolve.js +2 -8
- package/dist/lib/isolation-boundary-report.js +0 -1
- package/dist/lib/linear-cache.d.ts +7 -0
- package/dist/lib/linear-cache.js +31 -4
- package/dist/lib/linear-project-counts.d.ts +1 -1
- package/dist/lib/linear-project-counts.js +2 -3
- package/dist/lib/linear-projects.js +1 -1
- package/dist/lib/loop.d.ts +2 -2
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-target.d.ts +1 -1
- package/dist/lib/mailbox-target.js +1 -1
- package/dist/lib/manifest.js +7 -4
- 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/snapshot.d.ts +3 -2
- package/dist/lib/menubar/snapshot.js +6 -2
- package/dist/lib/migrate-fold.d.ts +33 -0
- package/dist/lib/migrate-fold.js +130 -0
- package/dist/lib/migrate.d.ts +34 -34
- package/dist/lib/migrate.js +106 -128
- package/dist/lib/model-tier-overrides.d.ts +1 -1
- package/dist/lib/model-tier-overrides.js +15 -2
- package/dist/lib/monitors/config.d.ts +17 -3
- package/dist/lib/monitors/config.js +52 -18
- package/dist/lib/monitors/engine.d.ts +32 -1
- package/dist/lib/monitors/engine.js +94 -11
- package/dist/lib/monitors/fingerprint.d.ts +46 -0
- package/dist/lib/monitors/fingerprint.js +100 -0
- package/dist/lib/monitors/remote.d.ts +47 -0
- package/dist/lib/monitors/remote.js +81 -0
- package/dist/lib/monitors/state.d.ts +39 -0
- package/dist/lib/monitors/state.js +56 -0
- package/dist/lib/onepassword.d.ts +17 -0
- package/dist/lib/onepassword.js +52 -22
- package/dist/lib/open-url.js +1 -1
- package/dist/lib/picker.d.ts +14 -2
- package/dist/lib/picker.js +35 -13
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +32 -0
- package/dist/lib/pr-land-detach.js +79 -0
- package/dist/lib/profiles-presets.js +13 -0
- package/dist/lib/profiles.d.ts +2 -0
- package/dist/lib/profiles.js +44 -1
- package/dist/lib/project-focus.d.ts +1 -1
- package/dist/lib/project-focus.js +1 -1
- package/dist/lib/project-probe.d.ts +4 -1
- package/dist/lib/project-probe.js +5 -4
- package/dist/lib/project-resources.js +2 -18
- package/dist/lib/project-root.d.ts +16 -0
- package/dist/lib/project-root.js +20 -2
- package/dist/lib/projects.d.ts +20 -1
- package/dist/lib/projects.js +78 -1
- package/dist/lib/refresh-coordinator.d.ts +24 -0
- package/dist/lib/refresh-coordinator.js +52 -0
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +1 -1
- package/dist/lib/resource-aliases.d.ts +13 -0
- package/dist/lib/resource-aliases.js +26 -0
- package/dist/lib/resources/types.d.ts +1 -1
- package/dist/lib/resources.d.ts +16 -0
- package/dist/lib/resources.js +66 -10
- package/dist/lib/rotate.d.ts +3 -4
- package/dist/lib/rotate.js +4 -5
- package/dist/lib/routine-activation.d.ts +22 -2
- package/dist/lib/routine-activation.js +63 -16
- package/dist/lib/routine-context.d.ts +9 -2
- package/dist/lib/routine-context.js +21 -6
- package/dist/lib/routines-project.d.ts +58 -48
- package/dist/lib/routines-project.js +190 -159
- package/dist/lib/routines.d.ts +41 -6
- package/dist/lib/routines.js +92 -34
- package/dist/lib/run-defaults.d.ts +5 -0
- package/dist/lib/run-defaults.js +11 -1
- package/dist/lib/runner.d.ts +10 -8
- package/dist/lib/runner.js +122 -39
- 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.d.ts +10 -3
- package/dist/lib/secrets/agent.js +43 -8
- package/dist/lib/secrets/bundles.d.ts +1 -0
- package/dist/lib/secrets/bundles.js +92 -80
- package/dist/lib/secrets/index.js +32 -9
- package/dist/lib/secrets/install-helper.d.ts +4 -4
- package/dist/lib/secrets/install-helper.js +4 -4
- package/dist/lib/secrets/push.d.ts +40 -6
- package/dist/lib/secrets/push.js +58 -11
- package/dist/lib/secrets/read-backoff.d.ts +1 -1
- package/dist/lib/secrets/read-backoff.js +1 -1
- package/dist/lib/secrets/remote.d.ts +24 -0
- package/dist/lib/secrets/remote.js +54 -4
- package/dist/lib/self-update.d.ts +108 -0
- package/dist/lib/self-update.js +276 -1
- package/dist/lib/session/active.d.ts +89 -5
- package/dist/lib/session/active.js +165 -10
- package/dist/lib/session/actor-sidecar.d.ts +1 -1
- package/dist/lib/session/actor-sidecar.js +2 -1
- package/dist/lib/session/db.d.ts +176 -2
- package/dist/lib/session/db.js +484 -17
- package/dist/lib/session/discover.js +27 -4
- package/dist/lib/session/hook-sessions.js +2 -2
- package/dist/lib/session/host-link.d.ts +2 -2
- package/dist/lib/session/host-link.js +2 -2
- package/dist/lib/session/pid-registry.d.ts +21 -0
- package/dist/lib/session/pid-registry.js +57 -0
- package/dist/lib/session/remote-active.js +15 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/session-cache.d.ts +14 -7
- package/dist/lib/session/session-cache.js +51 -9
- package/dist/lib/session/state.d.ts +2 -2
- package/dist/lib/session/state.js +1 -1
- package/dist/lib/session/sync/config.d.ts +10 -10
- package/dist/lib/session/sync/config.js +10 -10
- package/dist/lib/session/sync/r2.d.ts +34 -0
- package/dist/lib/session/sync/r2.js +123 -0
- package/dist/lib/session/throughput.d.ts +1 -1
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/types.d.ts +23 -1
- package/dist/lib/session/types.js +15 -0
- package/dist/lib/session/viewing-in.d.ts +1 -1
- package/dist/lib/session/viewing-in.js +1 -1
- package/dist/lib/session/watch.d.ts +101 -0
- package/dist/lib/session/watch.js +242 -0
- package/dist/lib/share/config.d.ts +4 -0
- package/dist/lib/share/config.js +1 -0
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +50 -0
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +116 -3
- package/dist/lib/share/worker-template.js +71 -6
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +98 -26
- package/dist/lib/signin-badge.js +3 -2
- package/dist/lib/skills.js +2 -0
- package/dist/lib/smart-launch.d.ts +8 -8
- package/dist/lib/smart-launch.js +80 -59
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +1 -1
- package/dist/lib/staleness/prune.d.ts +88 -0
- package/dist/lib/staleness/prune.js +69 -0
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/commands.js +34 -2
- package/dist/lib/staleness/writers/hooks.js +16 -0
- package/dist/lib/staleness/writers/kinds.d.ts +6 -0
- package/dist/lib/staleness/writers/skills.js +19 -0
- package/dist/lib/staleness/writers/subagents.d.ts +2 -3
- package/dist/lib/staleness/writers/subagents.js +0 -4
- package/dist/lib/staleness/writers/types.d.ts +32 -0
- package/dist/lib/startup/command-registry.d.ts +6 -12
- package/dist/lib/startup/command-registry.js +11 -31
- package/dist/lib/startup/dev-build.d.ts +10 -0
- package/dist/lib/startup/dev-build.js +13 -1
- package/dist/lib/startup/spellcheck.d.ts +18 -0
- package/dist/lib/startup/spellcheck.js +45 -0
- package/dist/lib/state.d.ts +36 -9
- package/dist/lib/state.js +96 -46
- package/dist/lib/subagents-registry.d.ts +0 -7
- package/dist/lib/subagents-registry.js +38 -65
- package/dist/lib/subagents.d.ts +0 -33
- package/dist/lib/subagents.js +0 -75
- package/dist/lib/sync-umbrella.js +1 -1
- package/dist/lib/teams/agents.d.ts +41 -1
- package/dist/lib/teams/agents.js +187 -9
- package/dist/lib/teams/api.d.ts +11 -1
- package/dist/lib/teams/api.js +11 -2
- package/dist/lib/teams/delivery.d.ts +41 -0
- package/dist/lib/teams/delivery.js +60 -0
- package/dist/lib/teams/registry.d.ts +14 -0
- package/dist/lib/teams/registry.js +51 -1
- package/dist/lib/teams/remoteWorktree.d.ts +19 -0
- package/dist/lib/teams/remoteWorktree.js +29 -0
- package/dist/lib/teams/scheduler.d.ts +1 -1
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/worktree.d.ts +24 -0
- package/dist/lib/teams/worktree.js +42 -0
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
- package/dist/lib/terminal/engine.d.ts +4 -0
- package/dist/lib/terminal/engine.js +8 -2
- package/dist/lib/terminal/types.d.ts +21 -2
- package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
- package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
- package/dist/lib/tickets/list.d.ts +53 -0
- package/dist/lib/tickets/list.js +153 -0
- package/dist/lib/tmux/orphan-reap.d.ts +320 -0
- package/dist/lib/tmux/orphan-reap.js +644 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +95 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +6 -1
- package/dist/lib/types.d.ts +46 -34
- package/dist/lib/usage-fleet.d.ts +32 -0
- package/dist/lib/usage-fleet.js +125 -0
- package/dist/lib/usage-refresh.d.ts +3 -3
- package/dist/lib/usage-refresh.js +19 -16
- package/dist/lib/usage.d.ts +51 -47
- package/dist/lib/usage.js +145 -153
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/versions.d.ts +56 -13
- package/dist/lib/versions.js +195 -45
- package/dist/lib/watchdog/log.d.ts +1 -1
- package/dist/lib/watchdog/log.js +3 -3
- package/dist/lib/watchdog/rotate.d.ts +6 -6
- package/dist/lib/watchdog/rotate.js +6 -6
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/yaml-io.d.ts +47 -0
- package/dist/lib/yaml-io.js +55 -0
- package/package.json +2 -1
- package/scripts/install-helper.js +2 -2
- package/scripts/postinstall.js +23 -20
- package/dist/commands/defaults.d.ts +0 -7
- package/dist/commands/defaults.js +0 -107
- package/dist/commands/export.d.ts +0 -11
- package/dist/commands/export.js +0 -215
- package/dist/commands/helper.d.ts +0 -12
- package/dist/commands/helper.js +0 -87
- package/dist/commands/hosts.d.ts +0 -11
- package/dist/commands/hosts.js +0 -330
- package/dist/commands/lock.d.ts +0 -12
- package/dist/commands/lock.js +0 -70
- package/dist/commands/pull.d.ts +0 -17
- package/dist/commands/pull.js +0 -39
- package/dist/commands/push.d.ts +0 -14
- package/dist/commands/push.js +0 -30
- package/dist/commands/wallet.d.ts +0 -20
- package/dist/commands/wallet.js +0 -216
- package/dist/commands/worktree.d.ts +0 -19
- package/dist/commands/worktree.js +0 -272
- package/dist/lib/account-labels.d.ts +0 -24
- package/dist/lib/account-labels.js +0 -72
- package/dist/lib/auto-dispatch-linear.d.ts +0 -18
- package/dist/lib/auto-dispatch-linear.js +0 -107
- package/dist/lib/auto-dispatch-provider.d.ts +0 -10
- package/dist/lib/auto-dispatch-provider.js +0 -30
- package/dist/lib/auto-dispatch.d.ts +0 -93
- package/dist/lib/auto-dispatch.js +0 -128
- package/dist/lib/export.d.ts +0 -72
- package/dist/lib/export.js +0 -269
- package/dist/lib/lock.d.ts +0 -93
- package/dist/lib/lock.js +0 -207
- package/dist/lib/wallet/index.d.ts +0 -78
- package/dist/lib/wallet/index.js +0 -253
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* Primitives for moving an agent config directory across the agents-cli boundary.
|
|
3
3
|
*
|
|
4
4
|
* Both helpers were part of {@link ./uninstall.ts} and are unchanged — teardown was
|
|
5
|
-
* simply the first caller.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* a module named for teardown.
|
|
5
|
+
* simply the first caller. Other config-transfer paths need the same operations, so
|
|
6
|
+
* they live here rather than being duplicated or imported out of a module named for
|
|
7
|
+
* teardown.
|
|
9
8
|
*/
|
|
10
9
|
import * as fs from 'fs';
|
|
11
10
|
import * as path from 'path';
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* checkout, and runs commands on them. We use it as the transport for
|
|
6
6
|
* `agents run --lease`: warm a box → run the agent on it via `crabbox run` →
|
|
7
7
|
* stop it. crabbox owns the SSH connection, so agents-cli never needs a direct
|
|
8
|
-
* ssh target (unlike the
|
|
8
|
+
* ssh target (unlike the host-dispatch model).
|
|
9
9
|
*
|
|
10
10
|
* crabbox talks to its cloud provider's API for list/status/warmup/stop, which
|
|
11
11
|
* needs a provider token (e.g. HCLOUD_TOKEN) in the environment. We inject it
|
|
@@ -242,7 +242,7 @@ export declare function reapSafeOrphans(boxes: CrabboxBox[], nowSecs: number): C
|
|
|
242
242
|
/**
|
|
243
243
|
* List reap-safe orphans and (unless `dryRun`) stop them. Returns the candidates
|
|
244
244
|
* considered and the slugs actually stopped. Best-effort per box — a stop failure
|
|
245
|
-
* is skipped, never thrown. Backs `agents lease gc` and the 403 auto-reap opt-in.
|
|
245
|
+
* is skipped, never thrown. Backs `agents devices lease gc` and the 403 auto-reap opt-in.
|
|
246
246
|
*/
|
|
247
247
|
export declare function reapOrphans(opts?: CrabboxOptions & {
|
|
248
248
|
nowSecs?: number;
|
package/dist/lib/crabbox/cli.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* checkout, and runs commands on them. We use it as the transport for
|
|
6
6
|
* `agents run --lease`: warm a box → run the agent on it via `crabbox run` →
|
|
7
7
|
* stop it. crabbox owns the SSH connection, so agents-cli never needs a direct
|
|
8
|
-
* ssh target (unlike the
|
|
8
|
+
* ssh target (unlike the host-dispatch model).
|
|
9
9
|
*
|
|
10
10
|
* crabbox talks to its cloud provider's API for list/status/warmup/stop, which
|
|
11
11
|
* needs a provider token (e.g. HCLOUD_TOKEN) in the environment. We inject it
|
|
@@ -394,7 +394,7 @@ export async function crabboxWarmup(opts = {}) {
|
|
|
394
394
|
if (orphans.length) {
|
|
395
395
|
hint =
|
|
396
396
|
` ${orphans.length} expired, idle box(es) are holding the quota — free them with ` +
|
|
397
|
-
`\`agents lease gc\` (or \`crabbox stop ${orphans[0].slug}\`).`;
|
|
397
|
+
`\`agents devices lease gc\` (or \`crabbox stop ${orphans[0].slug}\`).`;
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
400
|
catch {
|
|
@@ -586,7 +586,7 @@ export function reapSafeOrphans(boxes, nowSecs) {
|
|
|
586
586
|
/**
|
|
587
587
|
* List reap-safe orphans and (unless `dryRun`) stop them. Returns the candidates
|
|
588
588
|
* considered and the slugs actually stopped. Best-effort per box — a stop failure
|
|
589
|
-
* is skipped, never thrown. Backs `agents lease gc` and the 403 auto-reap opt-in.
|
|
589
|
+
* is skipped, never thrown. Backs `agents devices lease gc` and the 403 auto-reap opt-in.
|
|
590
590
|
*/
|
|
591
591
|
export function reapOrphans(opts = {}) {
|
|
592
592
|
const nowSecs = opts.nowSecs ?? Math.floor(Date.now() / 1000);
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/** Stable subsystem identifiers shared by the daemon (writer) and `agents daemon` (reader). */
|
|
2
2
|
export declare const SUBSYSTEM_SECRETS_BROKER = "secrets-broker";
|
|
3
3
|
export declare const SUBSYSTEM_BROWSER_IPC = "browser-ipc";
|
|
4
|
+
/**
|
|
5
|
+
* Daemon startup itself (RUSH-2418). Unlike the two above, this record is
|
|
6
|
+
* written from BOTH sides: the launching CLI records a start that produced no
|
|
7
|
+
* live daemon, and the daemon records its own successful claim. Its
|
|
8
|
+
* `consecutiveFailures` is what `ensureDaemonStarted` reads to open the
|
|
9
|
+
* auto-start circuit breaker, so a daemon dying on boot stops being relaunched
|
|
10
|
+
* by every foreground command that happens to want one.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SUBSYSTEM_DAEMON_START = "daemon-start";
|
|
4
13
|
/** One subsystem's health as of the last time it reported in. */
|
|
5
14
|
export interface SubsystemHealth {
|
|
6
15
|
/** Stable identifier, e.g. 'secrets-broker', 'browser-ipc'. */
|
|
@@ -18,6 +27,19 @@ export interface SubsystemHealth {
|
|
|
18
27
|
export declare function recordSubsystemOk(subsystem: string, at?: string): void;
|
|
19
28
|
/** Record a subsystem failure — bumps the consecutive-failure streak. */
|
|
20
29
|
export declare function recordSubsystemError(subsystem: string, error: string, at?: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Refine the reason on an already-counted failure, without bumping the streak.
|
|
32
|
+
*
|
|
33
|
+
* Exists because a start is counted BEFORE its outcome is known (RUSH-2418):
|
|
34
|
+
* the launcher marks the attempt, then replaces the provisional reason with the
|
|
35
|
+
* real one if it fails outright. Calling `recordSubsystemError` a second time
|
|
36
|
+
* would count one failed start as two.
|
|
37
|
+
*
|
|
38
|
+
* Describing a failure that was never counted would be a lie in the other
|
|
39
|
+
* direction — a `lastError` with `consecutiveFailures: 0` — so an unreported
|
|
40
|
+
* subsystem is left alone rather than given a blank record to decorate.
|
|
41
|
+
*/
|
|
42
|
+
export declare function recordSubsystemErrorReason(subsystem: string, error: string, at?: string): void;
|
|
21
43
|
/** Read one subsystem's health record, or null if it has never reported in. */
|
|
22
44
|
export declare function readSubsystemHealth(subsystem: string): SubsystemHealth | null;
|
|
23
45
|
/** Read every subsystem's health record, sorted by subsystem name. */
|
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Scheduled routines get this for free once migrated onto `agents routines`
|
|
13
13
|
* (their run history already carries success/failure — `agents routines
|
|
14
|
-
* stats`). This module exists for the
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* stats`). This module exists for the subsystems that predate routines and have
|
|
15
|
+
* no run history of their own: the secrets broker and the browser IPC server,
|
|
16
|
+
* plus the daemon's own startup (`SUBSYSTEM_DAEMON_START`, RUSH-2418) — which
|
|
17
|
+
* is the one record that also GATES behaviour rather than only reporting it.
|
|
17
18
|
*
|
|
18
19
|
* File-backed (one JSON object keyed by subsystem name) rather than in-memory
|
|
19
20
|
* because `agents daemon status` runs as a SEPARATE process from the daemon —
|
|
@@ -26,6 +27,15 @@ const HEALTH_FILE = 'health.json';
|
|
|
26
27
|
/** Stable subsystem identifiers shared by the daemon (writer) and `agents daemon` (reader). */
|
|
27
28
|
export const SUBSYSTEM_SECRETS_BROKER = 'secrets-broker';
|
|
28
29
|
export const SUBSYSTEM_BROWSER_IPC = 'browser-ipc';
|
|
30
|
+
/**
|
|
31
|
+
* Daemon startup itself (RUSH-2418). Unlike the two above, this record is
|
|
32
|
+
* written from BOTH sides: the launching CLI records a start that produced no
|
|
33
|
+
* live daemon, and the daemon records its own successful claim. Its
|
|
34
|
+
* `consecutiveFailures` is what `ensureDaemonStarted` reads to open the
|
|
35
|
+
* auto-start circuit breaker, so a daemon dying on boot stops being relaunched
|
|
36
|
+
* by every foreground command that happens to want one.
|
|
37
|
+
*/
|
|
38
|
+
export const SUBSYSTEM_DAEMON_START = 'daemon-start';
|
|
29
39
|
function getHealthPath() {
|
|
30
40
|
return path.join(getDaemonDir(), HEALTH_FILE);
|
|
31
41
|
}
|
|
@@ -74,6 +84,26 @@ export function recordSubsystemError(subsystem, error, at = new Date().toISOStri
|
|
|
74
84
|
};
|
|
75
85
|
writeAll(all);
|
|
76
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Refine the reason on an already-counted failure, without bumping the streak.
|
|
89
|
+
*
|
|
90
|
+
* Exists because a start is counted BEFORE its outcome is known (RUSH-2418):
|
|
91
|
+
* the launcher marks the attempt, then replaces the provisional reason with the
|
|
92
|
+
* real one if it fails outright. Calling `recordSubsystemError` a second time
|
|
93
|
+
* would count one failed start as two.
|
|
94
|
+
*
|
|
95
|
+
* Describing a failure that was never counted would be a lie in the other
|
|
96
|
+
* direction — a `lastError` with `consecutiveFailures: 0` — so an unreported
|
|
97
|
+
* subsystem is left alone rather than given a blank record to decorate.
|
|
98
|
+
*/
|
|
99
|
+
export function recordSubsystemErrorReason(subsystem, error, at = new Date().toISOString()) {
|
|
100
|
+
const all = readAll();
|
|
101
|
+
const existing = all[subsystem];
|
|
102
|
+
if (!existing)
|
|
103
|
+
return;
|
|
104
|
+
all[subsystem] = { ...existing, lastError: error, lastErrorAt: at };
|
|
105
|
+
writeAll(all);
|
|
106
|
+
}
|
|
77
107
|
/** Read one subsystem's health record, or null if it has never reported in. */
|
|
78
108
|
export function readSubsystemHealth(subsystem) {
|
|
79
109
|
return readAll()[subsystem] ?? null;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon service catalog + persistent toggle config.
|
|
3
|
+
*
|
|
4
|
+
* Defines the services the daemon hosts, loads their on/off state from
|
|
5
|
+
* ~/.agents/daemon/services.yaml, and exposes lightweight helpers so both the
|
|
6
|
+
* daemon and service clients (e.g. secrets) can check whether a service is
|
|
7
|
+
* enabled without pulling in the whole daemon lifecycle.
|
|
8
|
+
*/
|
|
9
|
+
/** Every service the daemon can host. IDs are kebab-case and stable. */
|
|
10
|
+
export type DaemonServiceId = 'secrets-broker' | 'scheduler' | 'monitors' | 'browser-ipc' | 'self-heal' | 'keychain-reap' | 'account-state' | 'watchdog' | 'device-probe' | 'state-dir-check';
|
|
11
|
+
/** Human-readable metadata for each service. */
|
|
12
|
+
export interface DaemonServiceDef {
|
|
13
|
+
id: DaemonServiceId;
|
|
14
|
+
title: string;
|
|
15
|
+
description: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const DAEMON_SERVICES: DaemonServiceDef[];
|
|
18
|
+
/** Stable order of service IDs. */
|
|
19
|
+
export declare const DAEMON_SERVICE_IDS: DaemonServiceId[];
|
|
20
|
+
/** Persistent service toggles. */
|
|
21
|
+
export interface DaemonServicesConfig {
|
|
22
|
+
services: Record<DaemonServiceId, boolean>;
|
|
23
|
+
}
|
|
24
|
+
/** Path to ~/.agents/daemon/services.yaml. */
|
|
25
|
+
export declare function getDaemonServicesConfigPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Read the services config from disk. Missing or malformed files return the
|
|
28
|
+
* default (all services enabled). Never throws.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readDaemonServicesConfig(): DaemonServicesConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Write the services config to disk, creating the daemon config dir if needed.
|
|
33
|
+
* Preserves unknown keys/ordering in the existing file when possible.
|
|
34
|
+
*/
|
|
35
|
+
export declare function writeDaemonServicesConfig(cfg: DaemonServicesConfig): void;
|
|
36
|
+
/**
|
|
37
|
+
* Check whether a single service is enabled. Returns true (enabled) when the
|
|
38
|
+
* config file is missing or the ID is unknown, so disabling must be explicit.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isDaemonServiceEnabled(id: DaemonServiceId): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Toggle one service and persist. Returns the new config.
|
|
43
|
+
*/
|
|
44
|
+
export declare function setDaemonServiceEnabled(id: DaemonServiceId, enabled: boolean): DaemonServicesConfig;
|
|
45
|
+
/**
|
|
46
|
+
* List every known service with its current enabled state and metadata.
|
|
47
|
+
*/
|
|
48
|
+
export declare function listDaemonServiceStates(): Array<DaemonServiceDef & {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
}>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon service catalog + persistent toggle config.
|
|
3
|
+
*
|
|
4
|
+
* Defines the services the daemon hosts, loads their on/off state from
|
|
5
|
+
* ~/.agents/daemon/services.yaml, and exposes lightweight helpers so both the
|
|
6
|
+
* daemon and service clients (e.g. secrets) can check whether a service is
|
|
7
|
+
* enabled without pulling in the whole daemon lifecycle.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as yaml from 'yaml';
|
|
12
|
+
import { getDaemonConfigDir } from './state.js';
|
|
13
|
+
import { atomicWriteFileSync } from './fs-atomic.js';
|
|
14
|
+
export const DAEMON_SERVICES = [
|
|
15
|
+
{
|
|
16
|
+
id: 'secrets-broker',
|
|
17
|
+
title: 'Secrets broker',
|
|
18
|
+
description: 'Hosts the keychain-backed secrets broker socket so unlocked bundles stay warm across agent runs.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'scheduler',
|
|
22
|
+
title: 'Routine scheduler',
|
|
23
|
+
description: 'Fires cron-scheduled routines and catches up missed fires.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'monitors',
|
|
27
|
+
title: 'Monitor engine',
|
|
28
|
+
description: 'Watches event sources and triggers monitor-driven routines.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'browser-ipc',
|
|
32
|
+
title: 'Browser IPC',
|
|
33
|
+
description: 'Keeps a supervised browser automation IPC socket available for sessions.',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'self-heal',
|
|
37
|
+
title: 'Self-heal registry',
|
|
38
|
+
description: 'Repairs shims, PATH, shadowing, and resource drift on a schedule.',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'keychain-reap',
|
|
42
|
+
title: 'Keychain reap',
|
|
43
|
+
description: 'Reaps orphaned keychain helpers and stuck agents processes.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'account-state',
|
|
47
|
+
title: 'Account state',
|
|
48
|
+
description: 'Refreshes account quota/usage and publishes the local fleet-status row.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'watchdog',
|
|
52
|
+
title: 'Watchdog',
|
|
53
|
+
description: 'Nudges stalled agent sessions on this host when opted in via watchdog.enabled.',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'device-probe',
|
|
57
|
+
title: 'Device probe',
|
|
58
|
+
description: 'Discovers Tailscale devices and surfaces pending ones for registration.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'state-dir-check',
|
|
62
|
+
title: 'State-dir self-check',
|
|
63
|
+
description: 'Self-terminates the daemon if its state directory is removed.',
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
/** Stable order of service IDs. */
|
|
67
|
+
export const DAEMON_SERVICE_IDS = DAEMON_SERVICES.map((s) => s.id);
|
|
68
|
+
function defaultServicesConfig() {
|
|
69
|
+
const services = {};
|
|
70
|
+
for (const id of DAEMON_SERVICE_IDS)
|
|
71
|
+
services[id] = true;
|
|
72
|
+
return { services };
|
|
73
|
+
}
|
|
74
|
+
/** Path to ~/.agents/daemon/services.yaml. */
|
|
75
|
+
export function getDaemonServicesConfigPath() {
|
|
76
|
+
return path.join(getDaemonConfigDir(), 'services.yaml');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Read the services config from disk. Missing or malformed files return the
|
|
80
|
+
* default (all services enabled). Never throws.
|
|
81
|
+
*/
|
|
82
|
+
export function readDaemonServicesConfig() {
|
|
83
|
+
const cfg = defaultServicesConfig();
|
|
84
|
+
try {
|
|
85
|
+
const raw = fs.readFileSync(getDaemonServicesConfigPath(), 'utf-8');
|
|
86
|
+
const parsed = yaml.parse(raw);
|
|
87
|
+
if (parsed && typeof parsed === 'object' && parsed.services && typeof parsed.services === 'object') {
|
|
88
|
+
for (const id of DAEMON_SERVICE_IDS) {
|
|
89
|
+
const value = parsed.services[id];
|
|
90
|
+
if (typeof value === 'boolean')
|
|
91
|
+
cfg.services[id] = value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Missing or corrupt -> defaults.
|
|
97
|
+
}
|
|
98
|
+
return cfg;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Write the services config to disk, creating the daemon config dir if needed.
|
|
102
|
+
* Preserves unknown keys/ordering in the existing file when possible.
|
|
103
|
+
*/
|
|
104
|
+
export function writeDaemonServicesConfig(cfg) {
|
|
105
|
+
const dir = getDaemonConfigDir();
|
|
106
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
107
|
+
const filePath = getDaemonServicesConfigPath();
|
|
108
|
+
// Preserve any extra top-level fields the user may have added.
|
|
109
|
+
let preserved = {};
|
|
110
|
+
try {
|
|
111
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
112
|
+
const parsed = yaml.parse(raw);
|
|
113
|
+
if (parsed && typeof parsed === 'object')
|
|
114
|
+
preserved = parsed;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// ignore
|
|
118
|
+
}
|
|
119
|
+
const services = {};
|
|
120
|
+
for (const id of DAEMON_SERVICE_IDS)
|
|
121
|
+
services[id] = cfg.services[id] ?? true;
|
|
122
|
+
const out = yaml.stringify({ ...preserved, services }, { sortMapEntries: false });
|
|
123
|
+
atomicWriteFileSync(filePath, out, 'utf-8');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check whether a single service is enabled. Returns true (enabled) when the
|
|
127
|
+
* config file is missing or the ID is unknown, so disabling must be explicit.
|
|
128
|
+
*/
|
|
129
|
+
export function isDaemonServiceEnabled(id) {
|
|
130
|
+
return readDaemonServicesConfig().services[id] !== false;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Toggle one service and persist. Returns the new config.
|
|
134
|
+
*/
|
|
135
|
+
export function setDaemonServiceEnabled(id, enabled) {
|
|
136
|
+
const cfg = readDaemonServicesConfig();
|
|
137
|
+
cfg.services[id] = enabled;
|
|
138
|
+
writeDaemonServicesConfig(cfg);
|
|
139
|
+
return cfg;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* List every known service with its current enabled state and metadata.
|
|
143
|
+
*/
|
|
144
|
+
export function listDaemonServiceStates() {
|
|
145
|
+
const cfg = readDaemonServicesConfig();
|
|
146
|
+
return DAEMON_SERVICES.map((s) => ({ ...s, enabled: cfg.services[s.id] !== false }));
|
|
147
|
+
}
|
|
@@ -1,81 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Daemon
|
|
2
|
+
* Daemon account-state tick bodies.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `command:` (via the `agents __daemon-tick <name>` entrypoint in index.ts)
|
|
10
|
-
* instead of an in-process interval closure.
|
|
4
|
+
* These two bodies are the `refreshUsage` / `refreshAuth` implementations the
|
|
5
|
+
* daemon's `account-state-service.ts` timers call directly, in-process, on a
|
|
6
|
+
* plain `setInterval` (usage every 60s, auth every ~3 min). They are NOT
|
|
7
|
+
* routines and are never fired through the scheduler — the daemon owns usage and
|
|
8
|
+
* authentication health as first-party device state (RUSH-2451).
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export declare function runWatchdogTick(): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Device probe: refresh registered devices' reachability and detect newly
|
|
26
|
-
* appeared tailnet nodes, dropping a sentinel per pending device so the
|
|
27
|
-
* menu-bar helper can surface "NEW DEVICES -> Register / Ignore". Refresh
|
|
28
|
-
* mode never auto-registers a newcomer. A machine without tailscale is a
|
|
29
|
-
* clean no-op. ~every 3 min.
|
|
30
|
-
*/
|
|
31
|
-
export declare function runDeviceProbeTick(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* tmux hook reconcile: retrofit the guarded `pane-died` hook onto managed
|
|
34
|
-
* `agents run` sessions a pre-fix binary left with the old unconditional
|
|
35
|
-
* hook. Non-destructive: set-hook only, never a kill or detach. ~every 5 min.
|
|
36
|
-
*/
|
|
37
|
-
export declare function runTmuxReconcileTick(): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Launch-health self-heal: probe that each agent's DEFAULT version actually
|
|
40
|
-
* LAUNCHES, and repair a gutted install. Never repoints the global default
|
|
41
|
-
* (allowDefaultSwitch: false) — a background default switch would be a
|
|
42
|
-
* silent logout. ~every 6h.
|
|
43
|
-
*/
|
|
44
|
-
export declare function runLaunchHealthTick(): Promise<void>;
|
|
10
|
+
* `refreshLocalFleetAuthState` is also called by `agents fleet`/`ssh` surfaces
|
|
11
|
+
* that need a fresh local auth snapshot on demand; provider-level work is guarded
|
|
12
|
+
* by the cross-process refresh lease so an explicit CLI refresh and the daemon
|
|
13
|
+
* timer converge on the same published result.
|
|
14
|
+
*/
|
|
15
|
+
import type { FleetStatusRow } from './fleet-status.js';
|
|
16
|
+
import type { AuthProbeRow } from './auth-health.js';
|
|
17
|
+
export declare function isFreshFleetAuthSnapshot(value: {
|
|
18
|
+
row: FleetStatusRow;
|
|
19
|
+
authRows: AuthProbeRow[];
|
|
20
|
+
}, minimumCapturedAt: number): boolean;
|
|
45
21
|
/**
|
|
46
22
|
* Fleet cache warm: publish THIS host's row for the caches `agents fleet
|
|
47
23
|
* status` / `agents devices list` read (PUBLISH-OWN / READ-UNION, RUSH-2061).
|
|
48
|
-
* ~every 3 min.
|
|
49
24
|
*/
|
|
25
|
+
export declare function refreshLocalFleetAuthState(): Promise<{
|
|
26
|
+
row: FleetStatusRow;
|
|
27
|
+
authRows: import('./auth-health.js').AuthProbeRow[];
|
|
28
|
+
}>;
|
|
50
29
|
export declare function runFleetCacheWarmTick(): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Session-status cache warm (RUSH-2062): publish THIS host's local active
|
|
53
|
-
* sessions so menubar / Factory / watchdog / CLI share one warm snapshot.
|
|
54
|
-
* Publish-own only (no cross-host SSH). ~every 3 min.
|
|
55
|
-
*/
|
|
56
|
-
export declare function runSessionCacheWarmTick(): Promise<void>;
|
|
57
30
|
/**
|
|
58
31
|
* Usage refresh: keep the usage cache the `agents run` router reads
|
|
59
32
|
* (RUSH-2061, readOnly hot path) fresh, WITHOUT the hot path ever fetching.
|
|
60
|
-
*
|
|
61
|
-
*
|
|
33
|
+
* The configured primary host is the fleet's sole provider-facing writer;
|
|
34
|
+
* subscribers import its token-free derived cache.
|
|
62
35
|
*/
|
|
63
36
|
export declare function runUsageRefreshTick(): Promise<void>;
|
|
64
37
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* agents-cli's own cloud-provider layer. OFF unless a project opts in; no
|
|
69
|
-
* opted-in project or no LINEAR_API_KEY is a clean no-op. ~every 3 min.
|
|
38
|
+
* Active-sessions warm (RUSH-2062 / RUSH-2484): publish THIS host's live session
|
|
39
|
+
* rows so `agents sessions watch` (and the extension that tails it) receive
|
|
40
|
+
* journal deltas. Publish-own only — no cross-host SSH.
|
|
70
41
|
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
/** Run one named tick, or throw for an unknown name (fails the routine run loud). */
|
|
81
|
-
export declare function runDaemonTick(name: string): Promise<void>;
|
|
42
|
+
* Cadence matches {@link DEFAULT_ACTIVE_CACHE_MAX_AGE_MS} so one-shot readers and
|
|
43
|
+
* long-lived watchers share one writer. Without this tick the journal has no
|
|
44
|
+
* continuous producer and Factory freezes after the initial cache snapshot.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runActiveSessionsWarmTick(opts?: {
|
|
47
|
+
gather?: () => Promise<import('./session/active.js').ActiveSession[]>;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
sessions: number;
|
|
50
|
+
}>;
|