@phnx-labs/agents-cli 1.22.112 → 1.22.114
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 +37 -0
- package/README.md +10 -11
- package/dist/cli/command-registry.d.ts +0 -60
- package/dist/cli/command-registry.js +59 -61
- package/dist/commands/apply.d.ts +0 -4
- package/dist/commands/apply.js +3 -3
- package/dist/commands/browser-picker.d.ts +3 -6
- package/dist/commands/browser-picker.js +2 -2
- package/dist/commands/browser-sessions-picker.d.ts +2 -1
- package/dist/commands/computer-sessions-picker.d.ts +2 -1
- package/dist/commands/computer.d.ts +14 -19
- package/dist/commands/computer.js +65 -10
- package/dist/commands/config.js +46 -2
- package/dist/commands/daemon.d.ts +0 -23
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/detach-core.d.ts +2 -1
- package/dist/commands/detach.d.ts +0 -3
- package/dist/commands/detach.js +3 -3
- package/dist/commands/feed.d.ts +3 -3
- package/dist/commands/feed.js +1 -1
- package/dist/commands/focus.d.ts +4 -4
- package/dist/commands/harness-hooks.d.ts +0 -7
- package/dist/commands/harness-hooks.js +1 -1
- package/dist/commands/harness-wizard.d.ts +2 -2
- package/dist/commands/harness.d.ts +3 -8
- package/dist/commands/harness.js +1 -1
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +3 -3
- package/dist/commands/projects.d.ts +2 -18
- package/dist/commands/projects.js +89 -3
- package/dist/commands/resource-view.d.ts +3 -2
- package/dist/commands/resume.d.ts +0 -1
- package/dist/commands/resume.js +1 -1
- package/dist/commands/routines.d.ts +1 -3
- package/dist/commands/routines.js +1 -1
- package/dist/commands/run-account-picker.d.ts +2 -1
- package/dist/commands/run-broadcast.d.ts +2 -1
- package/dist/commands/run-device-picker.d.ts +2 -1
- package/dist/commands/secrets-passthrough.d.ts +14 -0
- package/dist/commands/secrets-passthrough.js +21 -2
- package/dist/commands/sessions-backfill.d.ts +2 -35
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-bookmark.d.ts +0 -10
- package/dist/commands/sessions-bookmark.js +1 -1
- package/dist/commands/sessions-inject.d.ts +2 -3
- package/dist/commands/sessions-inject.js +8 -17
- package/dist/commands/sessions-picker-factory.d.ts +4 -14
- package/dist/commands/sessions-picker-factory.js +2 -2
- package/dist/commands/sessions-picker.d.ts +3 -9
- package/dist/commands/sessions-picker.js +2 -2
- package/dist/commands/sessions-resume.d.ts +2 -4
- package/dist/commands/sessions-resume.js +0 -5
- package/dist/commands/sessions-stats.d.ts +2 -1
- package/dist/commands/sessions-stop.d.ts +0 -3
- package/dist/commands/sessions-stop.js +1 -1
- package/dist/commands/sessions-tail.d.ts +2 -1
- package/dist/commands/sessions-trace.d.ts +4 -6
- package/dist/commands/sessions-trace.js +1 -1
- package/dist/commands/sessions.d.ts +14 -104
- package/dist/commands/sessions.js +22 -10
- package/dist/commands/setup-mine.d.ts +0 -6
- package/dist/commands/setup-mine.js +1 -1
- package/dist/commands/setup.d.ts +3 -4
- package/dist/commands/setup.js +1 -1
- package/dist/commands/share.d.ts +8 -8
- package/dist/commands/teams-picker.d.ts +2 -5
- package/dist/commands/teams-picker.js +2 -2
- package/dist/commands/teams.d.ts +1 -7
- package/dist/commands/teams.js +1 -1
- package/dist/commands/tmux.d.ts +1 -1
- package/dist/commands/tmux.js +1 -1
- package/dist/commands/upgrade.d.ts +2 -1
- package/dist/commands/utils.d.ts +1 -1
- package/dist/commands/utils.js +1 -1
- package/dist/lib/account-capabilities.d.ts +2 -1
- package/dist/lib/account-catalog.d.ts +4 -13
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +3 -4
- package/dist/lib/account-registry.js +1 -1
- package/dist/lib/accounting/account-launch.d.ts +4 -3
- package/dist/lib/accounting/account-pool.d.ts +2 -1
- package/dist/lib/accounting/rotate.d.ts +3 -9
- package/dist/lib/accounting/rotate.js +2 -14
- package/dist/lib/accounting/usage-sync.d.ts +5 -4
- package/dist/lib/accounting/usage.d.ts +7 -31
- package/dist/lib/accounting/usage.js +4 -4
- package/dist/lib/accounts/migrate.d.ts +8 -8
- package/dist/lib/accounts/migrate.js +1 -1
- package/dist/lib/acp/client.d.ts +3 -2
- package/dist/lib/acp/harnesses.d.ts +2 -2
- package/dist/lib/acp/harnesses.js +1 -1
- package/dist/lib/acp/run.d.ts +2 -1
- package/dist/lib/actor.d.ts +3 -2
- package/dist/lib/add-dir.d.ts +2 -17
- package/dist/lib/add-dir.js +2 -6
- package/dist/lib/address.d.ts +56 -0
- package/dist/lib/address.js +143 -0
- package/dist/lib/agent-spec/agents.d.ts +12 -28
- package/dist/lib/agent-spec/agents.js +2 -6
- package/dist/lib/agent-spec/primitives.d.ts +0 -7
- package/dist/lib/agent-spec/primitives.js +0 -6
- package/dist/lib/agent-spec/types.d.ts +2 -1
- package/dist/lib/analytics/dashboard.d.ts +1 -5
- package/dist/lib/analytics/dashboard.js +0 -2
- package/dist/lib/analytics/mix-commands.d.ts +0 -7
- package/dist/lib/analytics/mix-commands.js +3 -3
- package/dist/lib/analytics/recipes.d.ts +0 -12
- package/dist/lib/analytics/recipes.js +7 -31
- package/dist/lib/analytics/usage-db.d.ts +5 -32
- package/dist/lib/analytics/usage-db.js +1 -70
- package/dist/lib/answer-router.d.ts +7 -6
- package/dist/lib/answer-router.js +5 -11
- package/dist/lib/artifact-actions.d.ts +0 -4
- package/dist/lib/ask-classifier.d.ts +3 -4
- package/dist/lib/ask-classifier.js +0 -7
- package/dist/lib/auth-health.d.ts +3 -46
- package/dist/lib/auth-health.js +3 -3
- package/dist/lib/auth-mint.d.ts +6 -6
- package/dist/lib/auth-mint.js +5 -5
- package/dist/lib/bench/runner.d.ts +2 -2
- package/dist/lib/bench/runner.js +1 -1
- package/dist/lib/bench/storage.d.ts +0 -1
- package/dist/lib/bench/storage.js +1 -1
- package/dist/lib/boot-profile.d.ts +0 -2
- package/dist/lib/boot-profile.js +0 -4
- package/dist/lib/brand.d.ts +0 -6
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/arc-discovery.d.ts +4 -12
- package/dist/lib/browser/arc-discovery.js +1 -1
- package/dist/lib/browser/cdp.d.ts +1 -1
- package/dist/lib/browser/chrome.d.ts +2 -2
- package/dist/lib/browser/chrome.js +0 -4
- package/dist/lib/browser/chromium-discovery.d.ts +3 -2
- package/dist/lib/browser/drivers/arc.d.ts +3 -20
- package/dist/lib/browser/drivers/arc.js +2 -7
- package/dist/lib/browser/drivers/firefox.d.ts +2 -6
- package/dist/lib/browser/drivers/firefox.js +1 -1
- package/dist/lib/browser/drivers/local.d.ts +2 -1
- package/dist/lib/browser/drivers/ssh.d.ts +2 -3
- package/dist/lib/browser/drivers/ssh.js +0 -7
- package/dist/lib/browser/firefox-discovery.d.ts +4 -3
- package/dist/lib/browser/har.d.ts +8 -7
- package/dist/lib/browser/hygiene.d.ts +2 -3
- package/dist/lib/browser/hygiene.js +1 -1
- package/dist/lib/browser/ipc.d.ts +4 -3
- package/dist/lib/browser/ipc.js +1 -1
- package/dist/lib/browser/login-detection.d.ts +1 -8
- package/dist/lib/browser/registry.d.ts +2 -1
- package/dist/lib/browser/remote-control.d.ts +0 -7
- package/dist/lib/browser/remote-control.js +2 -2
- package/dist/lib/browser/resolve-target.d.ts +2 -6
- package/dist/lib/browser/resolve-target.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +4 -4
- package/dist/lib/browser/service.d.ts +4 -4
- package/dist/lib/browser/sessions-list.d.ts +0 -10
- package/dist/lib/browser/sessions-list.js +3 -3
- package/dist/lib/browser/stream.d.ts +2 -1
- package/dist/lib/browser/task-index.d.ts +4 -4
- package/dist/lib/browser/task-index.js +1 -1
- package/dist/lib/browser/types.d.ts +0 -20
- package/dist/lib/browser/types.js +1 -34
- package/dist/lib/browser/upload.d.ts +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -2
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/budget/live-cloud.d.ts +2 -1
- package/dist/lib/budget/preflight.d.ts +3 -5
- package/dist/lib/budget/preflight.js +1 -1
- package/dist/lib/catchup.d.ts +2 -1
- package/dist/lib/channels/owner-forward.d.ts +5 -4
- package/dist/lib/channels/owner-sink.js +2 -2
- package/dist/lib/channels/providers/desktop.js +1 -1
- package/dist/lib/channels/providers/rush.d.ts +2 -1
- package/dist/lib/channels/registry.d.ts +1 -1
- package/dist/lib/channels/registry.js +1 -1
- package/dist/lib/channels/resolve.d.ts +3 -2
- package/dist/lib/channels/send.d.ts +5 -4
- package/dist/lib/cli-resources.d.ts +3 -9
- package/dist/lib/cli-resources.js +1 -1
- package/dist/lib/cloud/cursor.d.ts +1 -2
- package/dist/lib/cloud/cursor.js +1 -1
- package/dist/lib/cloud/dispatch.d.ts +2 -1
- package/dist/lib/cloud/factory.d.ts +0 -2
- package/dist/lib/cloud/factory.js +1 -1
- package/dist/lib/cloud/rush.d.ts +3 -11
- package/dist/lib/cloud/rush.js +1 -1
- package/dist/lib/cloud/session-index.d.ts +2 -1
- package/dist/lib/cloud/types.d.ts +2 -1
- package/dist/lib/codex-policy.d.ts +2 -1
- package/dist/lib/commands.d.ts +7 -7
- package/dist/lib/commands.js +1 -1
- package/dist/lib/comms-render.d.ts +1 -1
- package/dist/lib/computer/context.d.ts +11 -3
- package/dist/lib/computer/context.js +2 -2
- package/dist/lib/computer/policy.d.ts +0 -12
- package/dist/lib/computer/policy.js +1 -1
- package/dist/lib/computer-client.d.ts +3 -3
- package/dist/lib/computer-client.js +0 -1
- package/dist/lib/concurrency.d.ts +2 -1
- package/dist/lib/config-keys.d.ts +16 -3
- package/dist/lib/config-keys.js +47 -2
- package/dist/lib/convert.d.ts +0 -12
- package/dist/lib/convert.js +1 -12
- package/dist/lib/crabbox/cli.d.ts +6 -24
- package/dist/lib/crabbox/cli.js +2 -28
- package/dist/lib/crabbox/lease.d.ts +5 -6
- package/dist/lib/crabbox/lease.js +1 -1
- package/dist/lib/crabbox/progress.d.ts +2 -1
- package/dist/lib/crabbox/setup-copy.d.ts +2 -3
- package/dist/lib/crabbox/setup-copy.js +1 -1
- package/dist/lib/daemon/account-state-daemon-service.d.ts +1 -1
- package/dist/lib/daemon/attention-notify-service.d.ts +2 -1
- package/dist/lib/daemon/catchup-service.d.ts +2 -1
- package/dist/lib/daemon/daemon.d.ts +4 -12
- package/dist/lib/daemon/daemon.js +42 -23
- package/dist/lib/daemon/harness-update-service.d.ts +2 -19
- package/dist/lib/daemon/harness-update-service.js +3 -3
- package/dist/lib/daemon/runner.d.ts +3 -3
- package/dist/lib/daemon/self-update-service.d.ts +1 -16
- package/dist/lib/daemon/self-update-service.js +6 -6
- package/dist/lib/daemon/state-dir-check-service.d.ts +2 -1
- package/dist/lib/daemon/supervisor.d.ts +3 -2
- package/dist/lib/daemon/testdata/process-view-daemon.d.ts +1 -0
- package/dist/lib/daemon/testdata/process-view-daemon.js +14 -0
- package/dist/lib/daemon/testdata/process-view-start.d.ts +1 -0
- package/dist/lib/daemon/testdata/process-view-start.js +43 -0
- package/dist/lib/daemon-services.d.ts +2 -1
- package/dist/lib/daemon-webhooks.d.ts +1 -1
- package/dist/lib/deeplink/register.d.ts +3 -13
- package/dist/lib/deeplink/register.js +3 -3
- package/dist/lib/deeplink/url.d.ts +3 -2
- package/dist/lib/device-config.d.ts +4 -15
- package/dist/lib/device-config.js +164 -8
- package/dist/lib/devices/connect.d.ts +2 -1
- package/dist/lib/devices/discovery-policy.d.ts +3 -2
- package/dist/lib/devices/doctor-findings.js +1 -1
- package/dist/lib/devices/doctor-overview-cache.d.ts +3 -2
- package/dist/lib/devices/fleet-divergence.d.ts +2 -1
- package/dist/lib/devices/fleet.d.ts +3 -4
- package/dist/lib/devices/fleet.js +1 -1
- package/dist/lib/devices/harness-inventory.d.ts +3 -2
- package/dist/lib/devices/health-report.d.ts +3 -2
- package/dist/lib/devices/health.d.ts +1 -8
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/interactive-host.d.ts +0 -2
- package/dist/lib/devices/interactive-host.js +1 -1
- package/dist/lib/devices/known-hosts.d.ts +2 -20
- package/dist/lib/devices/known-hosts.js +2 -2
- package/dist/lib/devices/pool.d.ts +2 -1
- package/dist/lib/devices/resolve-target.d.ts +2 -2
- package/dist/lib/devices/rollout-verify.d.ts +3 -2
- package/dist/lib/devices/stats-cache.d.ts +3 -2
- package/dist/lib/devices/sync.d.ts +6 -5
- package/dist/lib/devices/worker-pick.d.ts +3 -12
- package/dist/lib/devices/worker-pick.js +1 -1
- package/dist/lib/diff-text.d.ts +2 -1
- package/dist/lib/doctor-diff.d.ts +2 -1
- package/dist/lib/drift-sync.d.ts +3 -2
- package/dist/lib/drift.d.ts +3 -3
- package/dist/lib/drift.js +1 -1
- package/dist/lib/event-families.d.ts +0 -6
- package/dist/lib/event-families.js +3 -3
- package/dist/lib/event-provenance.d.ts +4 -1
- package/dist/lib/event-provenance.js +4 -0
- package/dist/lib/events-ingest.d.ts +4 -3
- package/dist/lib/exec-account-home.d.ts +2 -4
- package/dist/lib/exec-account-home.js +1 -1
- package/dist/lib/exec-bounded.d.ts +3 -4
- package/dist/lib/exec-bounded.js +1 -1
- package/dist/lib/exec.d.ts +6 -18
- package/dist/lib/exec.js +28 -8
- package/dist/lib/factory/snapshot.d.ts +2 -2
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/feed/activity-stream.d.ts +2 -5
- package/dist/lib/feed/activity-stream.js +11 -2
- package/dist/lib/feed/activity.d.ts +16 -33
- package/dist/lib/feed/activity.js +69 -26
- package/dist/lib/feed/answer.d.ts +3 -2
- package/dist/lib/feed/attention.js +5 -1
- package/dist/lib/feed/events.d.ts +2 -47
- package/dist/lib/feed/events.js +1 -141
- package/dist/lib/feed/feed.d.ts +9 -42
- package/dist/lib/feed/feed.js +1 -60
- package/dist/lib/feed/pr-status.d.ts +0 -2
- package/dist/lib/feed/pr-status.js +1 -5
- package/dist/lib/feed/watch.d.ts +10 -2
- package/dist/lib/feed/watch.js +91 -4
- package/dist/lib/feed-broadcast.d.ts +5 -47
- package/dist/lib/feed-broadcast.js +9 -9
- package/dist/lib/feed-outcome.d.ts +3 -6
- package/dist/lib/feed-outcome.js +2 -2
- package/dist/lib/feed-policy.d.ts +5 -6
- package/dist/lib/feed-policy.js +2 -2
- package/dist/lib/feed-post.d.ts +3 -4
- package/dist/lib/feed-post.js +2 -2
- package/dist/lib/feed-ranking.d.ts +2 -2
- package/dist/lib/feed-ranking.js +1 -1
- package/dist/lib/fleet/apply.d.ts +5 -6
- package/dist/lib/fleet/apply.js +4 -4
- package/dist/lib/fleet/manifest.d.ts +2 -1
- package/dist/lib/fleet/remote-login.d.ts +18 -36
- package/dist/lib/fleet/remote-login.js +20 -19
- package/dist/lib/fleet/types.d.ts +0 -8
- package/dist/lib/fleet-cache.d.ts +1 -18
- package/dist/lib/fleet-cache.js +0 -5
- package/dist/lib/fleet-shared-repo-sync.d.ts +3 -3
- package/dist/lib/fleet-shared-repo-sync.js +1 -1
- package/dist/lib/fleet-shared-state.d.ts +3 -2
- package/dist/lib/format.d.ts +2 -1
- package/dist/lib/friction-heuristics.d.ts +2 -1
- package/dist/lib/fs-walk.d.ts +2 -1
- package/dist/lib/fuzzy.d.ts +2 -1
- package/dist/lib/gemini-settings.d.ts +0 -1
- package/dist/lib/gemini-settings.js +1 -1
- package/dist/lib/git.d.ts +7 -65
- package/dist/lib/git.js +3 -142
- package/dist/lib/github/gh-overload.d.ts +0 -4
- package/dist/lib/github/gh-overload.js +2 -2
- package/dist/lib/github/project-prs.d.ts +118 -0
- package/dist/lib/github/project-prs.js +173 -0
- package/dist/lib/github/rest.d.ts +2 -1
- package/dist/lib/harness/exec-config-version.d.ts +2 -1
- package/dist/lib/harness-auth-capabilities.d.ts +5 -4
- package/dist/lib/harness-connection-test.d.ts +2 -1
- package/dist/lib/heal.d.ts +3 -20
- package/dist/lib/heal.js +2 -39
- package/dist/lib/help.d.ts +3 -2
- package/dist/lib/helper-download.d.ts +0 -12
- package/dist/lib/helper-download.js +2 -2
- package/dist/lib/helper-versions.d.ts +2 -1
- package/dist/lib/helper-versions.js +1 -1
- package/dist/lib/hooks/install.d.ts +8 -49
- package/dist/lib/hooks/install.js +2 -96
- package/dist/lib/hooks/match.d.ts +2 -1
- package/dist/lib/hosts/credential-transport.d.ts +0 -2
- package/dist/lib/hosts/credential-transport.js +1 -1
- package/dist/lib/hosts/dispatch.d.ts +2 -34
- package/dist/lib/hosts/dispatch.js +4 -21
- package/dist/lib/hosts/logs.d.ts +2 -1
- package/dist/lib/hosts/passthrough.d.ts +1 -1
- package/dist/lib/hosts/passthrough.js +0 -1
- package/dist/lib/hosts/progress.d.ts +0 -5
- package/dist/lib/hosts/progress.js +1 -1
- package/dist/lib/hosts/ready.d.ts +3 -4
- package/dist/lib/hosts/ready.js +0 -8
- package/dist/lib/hosts/reconcile.d.ts +2 -8
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +4 -11
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +1 -1
- package/dist/lib/hosts/remote-cmd.d.ts +4 -3
- package/dist/lib/hosts/remote-session-id.d.ts +5 -27
- package/dist/lib/hosts/remote-session-id.js +18 -61
- package/dist/lib/hosts/session-index.d.ts +3 -2
- package/dist/lib/hosts/ssh-config.d.ts +2 -3
- package/dist/lib/hosts/ssh-config.js +0 -10
- package/dist/lib/humans.d.ts +0 -2
- package/dist/lib/humans.js +2 -2
- package/dist/lib/import.d.ts +4 -3
- package/dist/lib/installations/installation-lock.d.ts +0 -2
- package/dist/lib/installations/installation-lock.js +2 -2
- package/dist/lib/installations/launch-gate.d.ts +0 -9
- package/dist/lib/installations/launch-gate.js +1 -1
- package/dist/lib/installations/migrate.d.ts +0 -11
- package/dist/lib/installations/migrate.js +1 -1
- package/dist/lib/installations/shims.d.ts +1 -1
- package/dist/lib/installations/shims.js +2 -2
- package/dist/lib/installations/update-runtime.js +1 -1
- package/dist/lib/launch-identity.d.ts +10 -0
- package/dist/lib/launch-identity.js +31 -0
- package/dist/lib/linear-cache.d.ts +2 -1
- package/dist/lib/linux-userns.d.ts +2 -3
- package/dist/lib/linux-userns.js +0 -4
- package/dist/lib/loop.d.ts +2 -1
- package/dist/lib/mailbox-gc.d.ts +2 -1
- package/dist/lib/mailbox-target.d.ts +2 -1
- package/dist/lib/mailbox.d.ts +0 -6
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/manifest.d.ts +0 -14
- package/dist/lib/manifest.js +2 -2
- package/dist/lib/mcp-registry.d.ts +2 -1
- package/dist/lib/memory.d.ts +2 -13
- package/dist/lib/memory.js +4 -4
- package/dist/lib/menubar/download-menubar.d.ts +0 -2
- package/dist/lib/menubar/download-menubar.js +1 -5
- package/dist/lib/menubar/install-menubar.d.ts +3 -14
- package/dist/lib/menubar/install-menubar.js +3 -3
- package/dist/lib/menubar/migrate-prefs.d.ts +53 -0
- package/dist/lib/menubar/migrate-prefs.js +168 -0
- package/dist/lib/menubar/resolve-version.d.ts +1 -9
- package/dist/lib/menubar/resolve-version.js +4 -4
- package/dist/lib/menubar/snapshot.d.ts +24 -2
- package/dist/lib/menubar/snapshot.js +26 -0
- package/dist/lib/model-tier-overrides.d.ts +3 -2
- package/dist/lib/monitors/config.d.ts +0 -2
- package/dist/lib/monitors/config.js +0 -4
- package/dist/lib/monitors/engine.d.ts +1 -1
- package/dist/lib/monitors/remote.d.ts +3 -2
- package/dist/lib/monitors/sources/webhook.d.ts +2 -15
- package/dist/lib/monitors/sources/webhook.js +1 -38
- package/dist/lib/monitors/state.d.ts +4 -7
- package/dist/lib/monitors/state.js +2 -2
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/notify.js +1 -1
- package/dist/lib/onepassword.d.ts +5 -14
- package/dist/lib/onepassword.js +0 -64
- package/dist/lib/open-url.d.ts +3 -2
- package/dist/lib/openclaw-keychain.d.ts +4 -17
- package/dist/lib/openclaw-keychain.js +3 -33
- package/dist/lib/operator.d.ts +2 -2
- package/dist/lib/operator.js +1 -1
- package/dist/lib/output/git-output.d.ts +4 -14
- package/dist/lib/output/git-output.js +1 -1
- package/dist/lib/owner-message.d.ts +3 -29
- package/dist/lib/owner-message.js +3 -3
- package/dist/lib/packages/output-home.d.ts +2 -4
- package/dist/lib/packages/output-home.js +2 -2
- package/dist/lib/perf/db.d.ts +0 -2
- package/dist/lib/perf/db.js +2 -7
- package/dist/lib/permissions-registry.d.ts +2 -3
- package/dist/lib/permissions-registry.js +0 -4
- package/dist/lib/permissions.d.ts +6 -16
- package/dist/lib/permissions.js +2 -15
- package/dist/lib/picker.d.ts +6 -5
- package/dist/lib/placement.d.ts +3 -6
- package/dist/lib/placement.js +0 -17
- package/dist/lib/platform/posixpath.d.ts +2 -1
- package/dist/lib/platform/winpath.d.ts +2 -1
- package/dist/lib/plugins/plugin-marketplace.d.ts +2 -2
- package/dist/lib/plugins/plugin-marketplace.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +2 -1
- package/dist/lib/profiles-presets.d.ts +2 -1
- package/dist/lib/profiles.d.ts +3 -9
- package/dist/lib/profiles.js +1 -9
- package/dist/lib/project-doctor.d.ts +2 -1
- package/dist/lib/project-launch.d.ts +2 -2
- package/dist/lib/project-probe.d.ts +4 -3
- package/dist/lib/project-pull.d.ts +2 -1
- package/dist/lib/project-resources.d.ts +2 -2
- package/dist/lib/project-resources.js +1 -1
- package/dist/lib/project-root.d.ts +2 -6
- package/dist/lib/project-root.js +1 -1
- package/dist/lib/project-schedule.d.ts +2 -1
- package/dist/lib/project-status.d.ts +2 -16
- package/dist/lib/project-status.js +3 -3
- package/dist/lib/reconcile-and-repair.d.ts +5 -4
- package/dist/lib/redact.d.ts +7 -1
- package/dist/lib/redact.js +94 -3
- package/dist/lib/refresh-coordinator.d.ts +2 -1
- package/dist/lib/refresh.d.ts +3 -2
- package/dist/lib/remote-agents-json.d.ts +3 -2
- package/dist/lib/reserved-stores.d.ts +0 -2
- package/dist/lib/reserved-stores.js +3 -5
- package/dist/lib/resource-content-diff.d.ts +0 -2
- package/dist/lib/resource-content-diff.js +1 -1
- package/dist/lib/resource-patterns.d.ts +2 -1
- package/dist/lib/resource-profiles.d.ts +2 -8
- package/dist/lib/resource-profiles.js +3 -27
- package/dist/lib/resources/workflows.d.ts +1 -1
- package/dist/lib/resources.d.ts +4 -9
- package/dist/lib/resources.js +1 -1
- package/dist/lib/routine-context.d.ts +2 -5
- package/dist/lib/routine-context.js +2 -2
- package/dist/lib/routine-notify-owner.d.ts +8 -7
- package/dist/lib/routine-notify-owner.js +5 -5
- package/dist/lib/routine-process-cleanup.d.ts +2 -1
- package/dist/lib/routine-readiness.d.ts +0 -2
- package/dist/lib/routine-readiness.js +0 -7
- package/dist/lib/routines-project.d.ts +3 -4
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +3 -25
- package/dist/lib/rules/compile.js +1 -1
- package/dist/lib/rules/compose.d.ts +3 -9
- package/dist/lib/rules/rules.d.ts +4 -15
- package/dist/lib/rules/rules.js +1 -64
- package/dist/lib/run-defaults.d.ts +1 -1
- package/dist/lib/run-notify.d.ts +2 -1
- package/dist/lib/run-trace-sync.d.ts +1 -1
- package/dist/lib/run-trace-sync.js +1 -1
- package/dist/lib/scheduler.d.ts +2 -1
- package/dist/lib/scheduling/routines.d.ts +9 -21
- package/dist/lib/scheduling/routines.js +3 -46
- package/dist/lib/secrets-client.d.ts +0 -17
- package/dist/lib/secrets-client.js +4 -26
- package/dist/lib/secrets-policy.d.ts +12 -17
- package/dist/lib/secrets-policy.js +5 -5
- package/dist/lib/secrets-types.d.ts +3 -2
- package/dist/lib/secrets-types.js +2 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -1
- package/dist/lib/self-heal/registry.d.ts +3 -2
- package/dist/lib/self-heal/types.d.ts +1 -1
- package/dist/lib/self-heal/types.js +1 -1
- package/dist/lib/self-update.d.ts +5 -5
- package/dist/lib/self-update.js +4 -4
- package/dist/lib/session/active.js +9 -3
- package/dist/lib/session/actor-sidecar.d.ts +3 -2
- package/dist/lib/session/artifacts.d.ts +0 -2
- package/dist/lib/session/artifacts.js +1 -1
- package/dist/lib/session/bash-command.d.ts +2 -7
- package/dist/lib/session/bundle.d.ts +4 -6
- package/dist/lib/session/bundle.js +1 -5
- package/dist/lib/session/cloud.d.ts +0 -4
- package/dist/lib/session/cloud.js +2 -15
- package/dist/lib/session/db.d.ts +2 -1
- package/dist/lib/session/db.js +39 -4
- package/dist/lib/session/detached.d.ts +2 -1
- package/dist/lib/session/detached.js +2 -2
- package/dist/lib/session/digest.d.ts +2 -2
- package/dist/lib/session/digest.js +1 -1
- package/dist/lib/session/discover.js +7 -2
- package/dist/lib/session/fork.d.ts +3 -2
- package/dist/lib/session/highlights.d.ts +6 -5
- package/dist/lib/session/hook-sessions.d.ts +12 -1
- package/dist/lib/session/hook-sessions.js +139 -6
- package/dist/lib/session/host-link.d.ts +2 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/inject.js +1 -1
- package/dist/lib/session/insights.d.ts +3 -15
- package/dist/lib/session/insights.js +2 -2
- package/dist/lib/session/local-tmux-attach.d.ts +2 -18
- package/dist/lib/session/local-tmux-attach.js +1 -1
- package/dist/lib/session/migrations.d.ts +0 -1
- package/dist/lib/session/migrations.js +1 -1
- package/dist/lib/session/mirror.d.ts +5 -8
- package/dist/lib/session/mirror.js +2 -2
- package/dist/lib/session/parse.d.ts +1 -32
- package/dist/lib/session/parse.js +4 -4
- package/dist/lib/session/pid-registry.d.ts +18 -5
- package/dist/lib/session/pid-registry.js +164 -17
- package/dist/lib/session/presence.d.ts +2 -1
- package/dist/lib/session/process-view.d.ts +25 -0
- package/dist/lib/session/process-view.js +176 -0
- package/dist/lib/session/projection.d.ts +13 -0
- package/dist/lib/session/projection.js +101 -0
- package/dist/lib/session/prompt.d.ts +3 -2
- package/dist/lib/session/prompt.js +38 -1
- package/dist/lib/session/recovery.d.ts +3 -2
- package/dist/lib/session/remote/peer-stream.d.ts +2 -5
- package/dist/lib/session/remote/peer-stream.js +2 -2
- package/dist/lib/session/remote/remote-bundle.d.ts +2 -1
- package/dist/lib/session/remote/remote-list.d.ts +5 -5
- package/dist/lib/session/remote/remote.d.ts +4 -3
- package/dist/lib/session/remote/watch.d.ts +10 -7
- package/dist/lib/session/remote/watch.js +10 -6
- package/dist/lib/session/remote-active.d.ts +2 -1
- package/dist/lib/session/render.d.ts +2 -2
- package/dist/lib/session/render.js +1 -1
- package/dist/lib/session/resume-owner.d.ts +1 -1
- package/dist/lib/session/resume-owner.js +1 -1
- package/dist/lib/session/run-names.d.ts +2 -1
- package/dist/lib/session/session-cache.d.ts +7 -26
- package/dist/lib/session/session-cache.js +17 -8
- package/dist/lib/session/share-html.d.ts +1 -21
- package/dist/lib/session/share-html.js +1 -1
- package/dist/lib/session/shell-programs.d.ts +2 -1
- package/dist/lib/session/state.d.ts +41 -8
- package/dist/lib/session/state.js +112 -11
- package/dist/lib/session/stream-render.d.ts +2 -1
- package/dist/lib/session/sync/agents.d.ts +0 -4
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +5 -5
- package/dist/lib/session/sync/managed-config.d.ts +0 -8
- package/dist/lib/session/sync/managed-key.d.ts +0 -2
- package/dist/lib/session/sync/managed-key.js +1 -1
- package/dist/lib/session/sync/r2.d.ts +4 -1
- package/dist/lib/session/sync/r2.js +4 -7
- package/dist/lib/session/sync/transcript-crypto.d.ts +2 -1
- package/dist/lib/session/tail.d.ts +2 -1
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/testdata/pid-registry-namespace.d.ts +1 -0
- package/dist/lib/session/testdata/pid-registry-namespace.js +27 -0
- package/dist/lib/session/testdata/process-view-namespace.d.ts +1 -0
- package/dist/lib/session/testdata/process-view-namespace.js +56 -0
- package/dist/lib/session/testdata/process-view-private.d.ts +1 -0
- package/dist/lib/session/testdata/process-view-private.js +12 -0
- package/dist/lib/session/throughput.d.ts +2 -3
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/timeline-pass.d.ts +3 -42
- package/dist/lib/session/timeline-pass.js +4 -4
- package/dist/lib/session/timeline.d.ts +3 -13
- package/dist/lib/session/timeline.js +3 -3
- package/dist/lib/session/tool-calls.d.ts +2 -2
- package/dist/lib/session/tool-calls.js +1 -1
- package/dist/lib/session/tool-index.d.ts +0 -8
- package/dist/lib/session/tool-index.js +2 -2
- package/dist/lib/session/tool-store.d.ts +2 -1
- package/dist/lib/session/trajectory-compare.d.ts +2 -1
- package/dist/lib/session/trajectory-lineage.d.ts +2 -1
- package/dist/lib/session/trajectory-text.d.ts +3 -2
- package/dist/lib/session/trajectory.d.ts +2 -1
- package/dist/lib/session/viewing-in.d.ts +2 -1
- package/dist/lib/settings-manifest.d.ts +2 -1
- package/dist/lib/share/delete.d.ts +5 -4
- package/dist/lib/share/html.d.ts +0 -2
- package/dist/lib/share/html.js +9 -9
- package/dist/lib/share/http-error.d.ts +3 -2
- package/dist/lib/share/og.d.ts +2 -1
- package/dist/lib/share/provision.d.ts +2 -2
- package/dist/lib/share/publish.d.ts +4 -13
- package/dist/lib/share/publish.js +2 -2
- package/dist/lib/shim-heal.d.ts +1 -5
- package/dist/lib/shim-heal.js +0 -6
- package/dist/lib/smart-launch.d.ts +4 -5
- package/dist/lib/smart-launch.js +1 -1
- package/dist/lib/snapshot.d.ts +3 -2
- package/dist/lib/ssh-exec.d.ts +5 -4
- package/dist/lib/ssh-tunnel.d.ts +3 -2
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -2
- package/dist/lib/staleness/checkers/permissions.js +1 -1
- package/dist/lib/staleness/fingerprint.d.ts +0 -7
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/prune.d.ts +3 -2
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/sources.d.ts +0 -8
- package/dist/lib/staleness/writers/sources.js +1 -1
- package/dist/lib/startup/command-registry.js +1 -1
- package/dist/lib/state.d.ts +1 -3
- package/dist/lib/state.js +1 -4
- package/dist/lib/subagents-registry.d.ts +4 -3
- package/dist/lib/subagents.d.ts +2 -1
- package/dist/lib/subagents.js +3 -2
- package/dist/lib/summarizer/pass.d.ts +3 -6
- package/dist/lib/summarizer/pass.js +2 -2
- package/dist/lib/summarizer/summarize.d.ts +4 -3
- package/dist/lib/sync-passphrase.d.ts +3 -2
- package/dist/lib/sync-status.d.ts +3 -16
- package/dist/lib/sync-status.js +2 -2
- package/dist/lib/sync-umbrella.d.ts +4 -3
- package/dist/lib/system-run-sync.d.ts +2 -1
- package/dist/lib/teams/agents.d.ts +2 -4
- package/dist/lib/teams/agents.js +1 -1
- package/dist/lib/teams/forEach.d.ts +3 -2
- package/dist/lib/teams/pr-watch.d.ts +4 -11
- package/dist/lib/teams/pr-watch.js +4 -4
- package/dist/lib/teams/registry.d.ts +2 -3
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/teams/remoteWorktree.d.ts +0 -16
- package/dist/lib/teams/remoteWorktree.js +3 -3
- package/dist/lib/teams/scheduler.d.ts +6 -5
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/supervisor.d.ts +4 -3
- package/dist/lib/teams/worktree.d.ts +0 -9
- package/dist/lib/teams/worktree.js +0 -32
- package/dist/lib/term-client.d.ts +44 -0
- package/dist/lib/term-client.js +117 -0
- package/dist/lib/terminal/inject.d.ts +3 -16
- package/dist/lib/terminal/inject.js +1 -29
- package/dist/lib/terminal/resolve.d.ts +3 -9
- package/dist/lib/terminal/resolve.js +3 -7
- package/dist/lib/tmux/binary.d.ts +2 -1
- package/dist/lib/tmux/orphan-reap.d.ts +6 -7
- package/dist/lib/tmux/orphan-reap.js +1 -1
- package/dist/lib/tmux/session.d.ts +4 -3
- package/dist/lib/traces/classify.d.ts +3 -2
- package/dist/lib/traces/config.d.ts +0 -8
- package/dist/lib/traces/insights.d.ts +2 -1
- package/dist/lib/traces/phenotype.d.ts +3 -3
- package/dist/lib/traces/provision.d.ts +1 -3
- package/dist/lib/traces/provision.js +1 -1
- package/dist/lib/traces/schema2-build.d.ts +1 -1
- package/dist/lib/traces/schema2-danger.d.ts +2 -1
- package/dist/lib/traces/schema2.d.ts +5 -4
- package/dist/lib/traces/segments.d.ts +4 -20
- package/dist/lib/traces/segments.js +3 -3
- package/dist/lib/traces/sync.d.ts +2 -3
- package/dist/lib/traces/sync.js +1 -1
- package/dist/lib/triggers/handlers.d.ts +4 -13
- package/dist/lib/triggers/handlers.js +1 -1
- package/dist/lib/triggers/webhook.d.ts +5 -27
- package/dist/lib/triggers/webhook.js +4 -4
- package/dist/lib/types.d.ts +3 -3
- package/dist/lib/usage-refresh.d.ts +4 -10
- package/dist/lib/usage-refresh.js +3 -8
- package/dist/lib/verbs.d.ts +2 -1
- package/dist/lib/version-duplicates.d.ts +2 -3
- package/dist/lib/version-duplicates.js +3 -33
- package/dist/lib/version.d.ts +2 -1
- package/dist/lib/warn-unpushed.d.ts +2 -1
- package/dist/lib/watchdog/history.d.ts +3 -2
- package/dist/lib/watchdog/log.d.ts +0 -6
- package/dist/lib/watchdog/log.js +1 -1
- package/dist/lib/watchdog/rotate.d.ts +2 -26
- package/dist/lib/watchdog/rotate.js +4 -12
- package/dist/lib/watchdog/runner.d.ts +0 -7
- package/dist/lib/watchdog/runner.js +4 -4
- package/dist/lib/watchdog/service.d.ts +2 -2
- package/dist/lib/watchdog/service.js +1 -1
- package/dist/lib/watchdog/watchdog-agent.d.ts +2 -1
- package/dist/lib/watchdog/watchdog.d.ts +2 -1
- package/dist/lib/watchdog/watchdogTail.d.ts +2 -1
- package/dist/lib/workflows-registry.d.ts +3 -2
- package/dist/lib/workflows.d.ts +4 -7
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/worktree/held.d.ts +4 -28
- package/dist/lib/worktree/held.js +3 -3
- package/package.json +2 -3
- package/scripts/postinstall.js +5 -4
- package/dist/commands/pty.d.ts +0 -20
- package/dist/commands/pty.js +0 -404
- package/dist/lib/config-machine-keys.d.ts +0 -14
- package/dist/lib/config-machine-keys.js +0 -21
- package/dist/lib/pty-client.d.ts +0 -49
- package/dist/lib/pty-client.js +0 -315
- package/dist/lib/pty-server.d.ts +0 -59
- package/dist/lib/pty-server.js +0 -653
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { type OpenBlock, type AnswerRecord } from './feed/feed.js';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type BlockClass = 'approval' | 'decision';
|
|
3
|
+
interface ClassPolicy {
|
|
4
4
|
timeoutMinutes: number;
|
|
5
5
|
/** For approval class only: the answer to apply when the timeout fires. */
|
|
6
6
|
safeDefault?: string;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
interface FeedPolicy {
|
|
9
9
|
approval: ClassPolicy;
|
|
10
10
|
decision: ClassPolicy;
|
|
11
11
|
/** High-cost-of-delay blocks below this threshold do not page the phone. */
|
|
12
12
|
phoneNotifyThreshold: 'low' | 'medium' | 'high';
|
|
13
13
|
}
|
|
14
14
|
export declare const DEFAULT_POLICY: FeedPolicy;
|
|
15
|
-
export declare function getPolicyPath(root?: string): string;
|
|
16
15
|
export declare function loadPolicy(root?: string): FeedPolicy;
|
|
17
16
|
export declare function blockClass(block: OpenBlock): BlockClass;
|
|
18
17
|
export declare function isPhoneUrgent(block: OpenBlock, policy: FeedPolicy): boolean;
|
|
19
|
-
export declare function minutesElapsed(block: OpenBlock, now: Date): number;
|
|
20
18
|
export declare function isTimedOut(block: OpenBlock, policy: FeedPolicy, now: Date): boolean;
|
|
21
|
-
|
|
19
|
+
interface PolicyResult {
|
|
22
20
|
blockId: string;
|
|
23
21
|
action: 'none' | 'defaulted' | 'parked';
|
|
24
22
|
answer?: AnswerRecord;
|
|
@@ -28,3 +26,4 @@ export interface PolicyResult {
|
|
|
28
26
|
* Caller is responsible for persistence/logging side effects not owned by feed.ts.
|
|
29
27
|
*/
|
|
30
28
|
export declare function applyPolicyToBlock(block: OpenBlock, policy: FeedPolicy, now: Date, root?: string, mailboxRoot?: string): PolicyResult;
|
|
29
|
+
export {};
|
package/dist/lib/feed-policy.js
CHANGED
|
@@ -25,7 +25,7 @@ export const DEFAULT_POLICY = {
|
|
|
25
25
|
decision: { timeoutMinutes: 60 },
|
|
26
26
|
phoneNotifyThreshold: 'medium',
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
function getPolicyPath(root) {
|
|
29
29
|
return path.join(root ?? getUserAgentsDir(), POLICY_FILE);
|
|
30
30
|
}
|
|
31
31
|
function normalizeClassPolicy(raw, fallback) {
|
|
@@ -65,7 +65,7 @@ export function isPhoneUrgent(block, policy) {
|
|
|
65
65
|
const cost = block.costOfDelay ?? 'low';
|
|
66
66
|
return COST_RANK[cost] >= COST_RANK[policy.phoneNotifyThreshold];
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
function minutesElapsed(block, now) {
|
|
69
69
|
const ts = Date.parse(block.ts);
|
|
70
70
|
if (Number.isNaN(ts))
|
|
71
71
|
return 0;
|
package/dist/lib/feed-post.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type PidSessionEntry } from './session/pid-registry.js';
|
|
|
4
4
|
export declare const STATUS_POST_MAX_CHARS = 500;
|
|
5
5
|
/** Title is a phone subject line - about four or five words, not a paragraph. */
|
|
6
6
|
export declare const STATUS_TITLE_MAX_CHARS = 60;
|
|
7
|
-
|
|
7
|
+
interface FeedPostInput {
|
|
8
8
|
/**
|
|
9
9
|
* Short subject (required for new posts). ~4–5 words. Phone broadcasts put
|
|
10
10
|
* this on the first line so a scan names the topic before the body.
|
|
@@ -53,7 +53,7 @@ export interface FeedPostInput {
|
|
|
53
53
|
/** Override full registry list for launchId match (tests). */
|
|
54
54
|
listEntries?: () => PidSessionEntry[];
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
interface FeedPostResult {
|
|
57
57
|
event: ActivityEvent;
|
|
58
58
|
}
|
|
59
59
|
export interface PostIdentity {
|
|
@@ -78,8 +78,6 @@ export interface PostIdentity {
|
|
|
78
78
|
export declare function resolvePostIdentity(input: Pick<FeedPostInput, 'sessionId' | 'env' | 'cwd' | 'activityRoot' | 'startPid' | 'getParentPid' | 'readEntry' | 'listEntries'>): PostIdentity | undefined;
|
|
79
79
|
/** Walk up to 16 ancestors looking for a by-pid registry entry with a session. */
|
|
80
80
|
export declare function walkPidRegistry(startPid: number, getParent: (pid: number) => number | undefined, readEntry: (pid: number) => PidSessionEntry | undefined): PidSessionEntry | undefined;
|
|
81
|
-
/** Best-effort parent pid of `pid` (Linux /proc, else `ps`). */
|
|
82
|
-
export declare function parentPidOf(pid: number): number | undefined;
|
|
83
81
|
/**
|
|
84
82
|
* Turn one `--attach` token into an {@link Attachment}. Remote URLs become
|
|
85
83
|
* `link` (or a media kind when the extension is unambiguous). Local files are
|
|
@@ -112,3 +110,4 @@ export declare function normalizeStatusTitle(title: string): string;
|
|
|
112
110
|
* Throws if title/text is empty or session identity cannot be resolved.
|
|
113
111
|
*/
|
|
114
112
|
export declare function postFeedStatus(input: FeedPostInput): FeedPostResult;
|
|
113
|
+
export {};
|
package/dist/lib/feed-post.js
CHANGED
|
@@ -21,7 +21,7 @@ import { resolveProjectNameForCwd, listProjectDefs } from './projects.js';
|
|
|
21
21
|
import { getHistoryDir } from './state.js';
|
|
22
22
|
import { machineId } from './machine-id.js';
|
|
23
23
|
import { isValidMailboxId } from './mailbox.js';
|
|
24
|
-
import { listPidSessionEntries, readPidSessionEntry, } from './session/pid-registry.js';
|
|
24
|
+
import { listPidSessionEntries, readLivePidSessionEntry as readPidSessionEntry, } from './session/pid-registry.js';
|
|
25
25
|
/** Soft cap so a runaway agent can't flood the activity lane with essays. */
|
|
26
26
|
export const STATUS_POST_MAX_CHARS = 500;
|
|
27
27
|
/** Title is a phone subject line - about four or five words, not a paragraph. */
|
|
@@ -120,7 +120,7 @@ export function walkPidRegistry(startPid, getParent, readEntry) {
|
|
|
120
120
|
return firstHit;
|
|
121
121
|
}
|
|
122
122
|
/** Best-effort parent pid of `pid` (Linux /proc, else `ps`). */
|
|
123
|
-
|
|
123
|
+
function parentPidOf(pid) {
|
|
124
124
|
if (!Number.isInteger(pid) || pid <= 1)
|
|
125
125
|
return undefined;
|
|
126
126
|
if (process.platform === 'linux') {
|
|
@@ -20,14 +20,14 @@ export interface FeedSessionSignal {
|
|
|
20
20
|
cloudProvider?: string;
|
|
21
21
|
cloudTaskId?: string;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
interface RankedFeedBlock extends OpenBlock {
|
|
24
24
|
delayRank: NonNullable<OpenBlock['delayRank']>;
|
|
25
25
|
}
|
|
26
26
|
export declare function buildSessionSignals(active: ActiveSession[], metas?: SessionMeta[]): FeedSessionSignal[];
|
|
27
27
|
export declare function decisionIrreducibility(c: Classification): number;
|
|
28
28
|
export declare function burnUsdPerHour(signal: FeedSessionSignal | undefined, block: OpenBlock): number;
|
|
29
29
|
export declare function rankFeedBlocks(blocks: OpenBlock[], signals?: FeedSessionSignal[], now?: Date): RankedFeedBlock[];
|
|
30
|
-
export declare function recentAskCount(stats: FeedAskStats, now?: Date): number;
|
|
31
30
|
export declare function needyControlCards(stats: FeedAskStats[], signals?: FeedSessionSignal[], now?: Date, threshold?: number): OpenBlock[];
|
|
32
31
|
export declare function runawayControlCards(signals: FeedSessionSignal[], now?: Date): OpenBlock[];
|
|
33
32
|
export declare function synthesizeControlCards(signals: FeedSessionSignal[], stats: FeedAskStats[], now?: Date): OpenBlock[];
|
|
33
|
+
export {};
|
package/dist/lib/feed-ranking.js
CHANGED
|
@@ -127,7 +127,7 @@ export function rankFeedBlocks(blocks, signals = [], now = new Date()) {
|
|
|
127
127
|
return Date.parse(a.ts) - Date.parse(b.ts);
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
|
-
|
|
130
|
+
function recentAskCount(stats, now = new Date()) {
|
|
131
131
|
const cutoff = now.getTime() - 60 * 60_000;
|
|
132
132
|
return stats.recentAskTimestamps.filter((ts) => {
|
|
133
133
|
const parsed = Date.parse(ts);
|
|
@@ -52,7 +52,7 @@ export interface SourceAuth {
|
|
|
52
52
|
* list (PHNX-2371).
|
|
53
53
|
*/
|
|
54
54
|
export declare function fleetSecretsBundles(declared: string[] | undefined): string[];
|
|
55
|
-
|
|
55
|
+
interface DiffContext {
|
|
56
56
|
/** agents-cli version the source is on — the fleet target version. */
|
|
57
57
|
targetCliVersion: string;
|
|
58
58
|
sourceAuth: SourceAuth;
|
|
@@ -72,7 +72,7 @@ export interface DiffContext {
|
|
|
72
72
|
/** Pure: desired vs probed -> per-device diff + flat action list. */
|
|
73
73
|
export declare function diffFleet(desired: DeviceDesired[], probes: Map<string, DeviceProbe>, ctx: DiffContext): FleetPlan;
|
|
74
74
|
/** Why a declared bundle is or is not pushed to one device. */
|
|
75
|
-
|
|
75
|
+
interface SecretPushDecision {
|
|
76
76
|
push: boolean;
|
|
77
77
|
/** Where it would land on the remote. Only meaningful when `push`. */
|
|
78
78
|
backend: RemoteBackend;
|
|
@@ -108,7 +108,7 @@ export interface SecretPushDecision {
|
|
|
108
108
|
* the one fleet-shared setup-token store (PHNX-2371).
|
|
109
109
|
*/
|
|
110
110
|
export declare function decideSecretPush(bundle: string, desired: DeviceDesired, probe: DeviceProbe, ctx: DiffContext): SecretPushDecision;
|
|
111
|
-
|
|
111
|
+
interface ProbeOptions {
|
|
112
112
|
/** Also fetch per-agent installed versions (one extra `agents view --json`
|
|
113
113
|
* round-trip). Enable only when the plan has a version-pinned spec. */
|
|
114
114
|
withVersions?: boolean;
|
|
@@ -141,18 +141,17 @@ export interface DeviceApplyResult {
|
|
|
141
141
|
steps: ApplyStep[];
|
|
142
142
|
note?: string;
|
|
143
143
|
}
|
|
144
|
-
|
|
144
|
+
interface ExecContext {
|
|
145
145
|
targetCliVersion: string;
|
|
146
146
|
source: string;
|
|
147
147
|
sourceAuth: SourceAuth;
|
|
148
148
|
/** Set for a dry run — probe + plan only, execute nothing. */
|
|
149
149
|
dryRun?: boolean;
|
|
150
150
|
}
|
|
151
|
-
/** Execute one device's planned actions in order. Real SSH — no mocks. */
|
|
152
|
-
export declare function reconcileDevice(row: DeviceDiff, device: DeviceProfile, ctx: ExecContext): Promise<DeviceApplyResult>;
|
|
153
151
|
/** Run a pool of async tasks with a concurrency cap, preserving input order. */
|
|
154
152
|
export declare function pool<T, R>(items: T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
155
153
|
/** Reconcile every device row in parallel (capped). */
|
|
156
154
|
export declare function runFleetApply(rows: DeviceDiff[], nameToProfile: Map<string, DeviceProfile>, ctx: ExecContext, concurrency?: number): Promise<DeviceApplyResult[]>;
|
|
157
155
|
/** Default home for source snapshots (overridable in tests). */
|
|
158
156
|
export declare function sourceHome(): string;
|
|
157
|
+
export {};
|
package/dist/lib/fleet/apply.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import * as os from 'os';
|
|
11
11
|
import { pushBundleToHost } from '../secrets-client.js';
|
|
12
|
-
import {
|
|
12
|
+
import { AUTH_STORE_ALIAS, inspectReservedAuthBundle, isReservedBundleName } from '../secrets-policy.js';
|
|
13
13
|
import { deviceIdentityArgs, sshTargetFor } from '../devices/connect.js';
|
|
14
14
|
import { readyProbe, bootstrapAgentsCli } from '../hosts/ready.js';
|
|
15
15
|
import { buildRemoteAgentsInvocation } from '../hosts/remote-cmd.js';
|
|
@@ -98,8 +98,8 @@ export function parseInstalledVersions(stdout) {
|
|
|
98
98
|
export function fleetSecretsBundles(declared) {
|
|
99
99
|
const out = [...(declared ?? [])];
|
|
100
100
|
const auth = inspectReservedAuthBundle();
|
|
101
|
-
if (auth.exists && auth.ok && !out.includes(
|
|
102
|
-
out.push(
|
|
101
|
+
if (auth.exists && auth.ok && !out.includes(AUTH_STORE_ALIAS)) {
|
|
102
|
+
out.push(AUTH_STORE_ALIAS);
|
|
103
103
|
}
|
|
104
104
|
return out;
|
|
105
105
|
}
|
|
@@ -371,7 +371,7 @@ export function parseRemoteBundles(stdout) {
|
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
373
|
/** Execute one device's planned actions in order. Real SSH — no mocks. */
|
|
374
|
-
|
|
374
|
+
async function reconcileDevice(row, device, ctx) {
|
|
375
375
|
if (!row.probe.reachable) {
|
|
376
376
|
return { device: row.device, ok: false, steps: [], note: row.probe.note ?? 'unreachable' };
|
|
377
377
|
}
|
|
@@ -12,7 +12,7 @@ import type { FleetManifest, DeviceDesired } from './types.js';
|
|
|
12
12
|
export declare function parseFleetManifest(raw: unknown): FleetManifest;
|
|
13
13
|
/** Read a YAML file and extract + validate its `fleet:` block. */
|
|
14
14
|
export declare function readFleetFile(filePath: string): FleetManifest;
|
|
15
|
-
|
|
15
|
+
interface ResolveContext {
|
|
16
16
|
/** Device names currently online (used to expand `devices: all`). */
|
|
17
17
|
onlineDevices: string[];
|
|
18
18
|
/** All registered device names (used to validate explicit entries). */
|
|
@@ -50,3 +50,4 @@ export declare function emptyTargetsMessage(manifest: FleetManifest): {
|
|
|
50
50
|
style: 'hint' | 'plain';
|
|
51
51
|
lines: string[];
|
|
52
52
|
};
|
|
53
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import type { DeviceProfile } from '../devices/registry.js';
|
|
|
3
3
|
import { type AuthVerdict, type AuthHealth } from '../auth-health.js';
|
|
4
4
|
import { type LoginFlow } from './auth-sync.js';
|
|
5
5
|
/** A verification URL + user code scraped from a device-code login screen. */
|
|
6
|
-
|
|
6
|
+
interface ScrapedLogin {
|
|
7
7
|
url?: string;
|
|
8
8
|
code?: string;
|
|
9
9
|
}
|
|
@@ -17,7 +17,7 @@ export interface ScrapedLogin {
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function scrapeLogin(screenText: string, flow: LoginFlow): ScrapedLogin;
|
|
19
19
|
/** Why a logged-out (agent, device) pair can or cannot be driven remotely. */
|
|
20
|
-
|
|
20
|
+
interface FlowClassification {
|
|
21
21
|
flow: LoginFlow | null;
|
|
22
22
|
remotable: boolean;
|
|
23
23
|
reason?: string;
|
|
@@ -38,7 +38,7 @@ export declare function classifyLoginFlow(agent: AgentId | string, platform: str
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function isPendingVerdict(verdict: AuthVerdict | undefined): boolean;
|
|
40
40
|
/** A logged-out (agent, device) pair `fleet login` will target or explain. */
|
|
41
|
-
|
|
41
|
+
interface PendingLogin {
|
|
42
42
|
device: string;
|
|
43
43
|
agent: AgentId | string;
|
|
44
44
|
platform?: string;
|
|
@@ -51,7 +51,7 @@ export interface PendingLogin {
|
|
|
51
51
|
/** Present when `!remotable` — why it must be done on the box itself. */
|
|
52
52
|
reason?: string;
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
interface SelectLoginOptions {
|
|
55
55
|
/** Include pairs already logged-in (verdict live/unverified) — for a forced re-login. */
|
|
56
56
|
includeLoggedIn?: boolean;
|
|
57
57
|
}
|
|
@@ -68,7 +68,7 @@ export interface SelectLoginOptions {
|
|
|
68
68
|
export declare function selectLoginTargets(devices: DeviceProfile[], agents: (AgentId | string)[], cache: Record<string, AuthHealth>, opts?: SelectLoginOptions): PendingLogin[];
|
|
69
69
|
/**
|
|
70
70
|
* Build the `ssh -tt <target> <loginCommand>` command string driven through the
|
|
71
|
-
*
|
|
71
|
+
* `term` CLI. `-tt` forces a tty so the remote CLI enters its interactive
|
|
72
72
|
* device-code flow; `accept-new` learns a first-seen host key without a prompt.
|
|
73
73
|
* Both the target and the login command are shell-quoted. Pure/testable.
|
|
74
74
|
*
|
|
@@ -77,7 +77,7 @@ export declare function selectLoginTargets(devices: DeviceProfile[], agents: (Ag
|
|
|
77
77
|
* are a follow-up (TODO), surfaced as an error rather than silently mis-driven.
|
|
78
78
|
*/
|
|
79
79
|
export declare function buildRemoteLoginSshCommand(target: string, flow: LoginFlow, extraSshArgs?: string[]): string;
|
|
80
|
-
|
|
80
|
+
type LoginMode = 'bulk' | 'interactive';
|
|
81
81
|
/** Per-pair status shape shared between the driver, the status endpoint, and the page. */
|
|
82
82
|
export type LoginStatusState = 'pending' | 'driving' | 'ready' | 'authorized' | 'error' | 'skipped';
|
|
83
83
|
export interface LoginStatus {
|
|
@@ -101,8 +101,8 @@ export interface LoginStatus {
|
|
|
101
101
|
* light variant via `prefers-color-scheme`.
|
|
102
102
|
*/
|
|
103
103
|
export declare function buildDashboardHtml(pending: PendingLogin[], mode: LoginMode): string;
|
|
104
|
-
/** The subset of the
|
|
105
|
-
export interface
|
|
104
|
+
/** The subset of the `term` CLI `driveRemoteLogin` needs — faked in tests. */
|
|
105
|
+
export interface TermDriver {
|
|
106
106
|
start(opts?: {
|
|
107
107
|
rows?: number;
|
|
108
108
|
cols?: number;
|
|
@@ -115,8 +115,8 @@ export interface PtyDriver {
|
|
|
115
115
|
}>;
|
|
116
116
|
stop(id: string): Promise<void>;
|
|
117
117
|
}
|
|
118
|
-
/** Real driver over the
|
|
119
|
-
export declare function
|
|
118
|
+
/** Real driver over the standalone `term` CLI (`../term-client.js`). */
|
|
119
|
+
export declare function defaultTermDriver(): TermDriver;
|
|
120
120
|
export interface DriveOptions {
|
|
121
121
|
/** Wait after launching ssh before steering / scraping (default 4000ms). */
|
|
122
122
|
initialDelayMs?: number;
|
|
@@ -125,41 +125,22 @@ export interface DriveOptions {
|
|
|
125
125
|
/** Overall scrape deadline (default 90000ms). */
|
|
126
126
|
timeoutMs?: number;
|
|
127
127
|
}
|
|
128
|
-
|
|
128
|
+
interface DriveResult extends ScrapedLogin {
|
|
129
129
|
/** True when the underlying ssh session already exited (login finished or failed). */
|
|
130
130
|
exited: boolean;
|
|
131
|
-
/** The
|
|
131
|
+
/** The term session id, so the caller can keep polling / stop it. */
|
|
132
132
|
sessionId: string;
|
|
133
133
|
}
|
|
134
134
|
/**
|
|
135
135
|
* Drive one remote device-code login: launch `ssh -tt <target> <loginCommand>`
|
|
136
|
-
* in a
|
|
136
|
+
* in a `term` session, send the flow's `deviceCodeSelect` keystrokes (if any) to reach the
|
|
137
137
|
* device-code path, then poll the screen until {@link scrapeLogin} yields both a
|
|
138
138
|
* URL and a code (or the deadline / session-exit). The human completes the code
|
|
139
139
|
* in the browser; the caller polls the credential file for completion. Testable
|
|
140
|
-
* against a fake {@link
|
|
140
|
+
* against a fake {@link TermDriver}.
|
|
141
141
|
*/
|
|
142
|
-
export declare function driveRemoteLogin(target: string, flow: LoginFlow, driver:
|
|
143
|
-
|
|
144
|
-
agents?: (AgentId | string)[];
|
|
145
|
-
devices?: string[];
|
|
146
|
-
includeLoggedIn?: boolean;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Resolve the online fleet devices, then compute pending logins
|
|
150
|
-
* from the shared auth-health cache (populated by `agents fleet ping`). Thin I/O
|
|
151
|
-
* over the pure {@link selectLoginTargets}. Devices/agents can be narrowed by the
|
|
152
|
-
* caller's flags; the default agent set is every agent with a defined flow.
|
|
153
|
-
*/
|
|
154
|
-
export declare function detectPending(opts?: DetectOptions): Promise<PendingLogin[]>;
|
|
155
|
-
/**
|
|
156
|
-
* Best-effort epoch-seconds mtime of a home-relative file on a remote box, or 0
|
|
157
|
-
* when it is absent/unreadable. Used to detect the credential file appearing /
|
|
158
|
-
* bumping after the human completes the browser step. POSIX `stat` only (the
|
|
159
|
-
* device-code agents are all POSIX-fleet).
|
|
160
|
-
*/
|
|
161
|
-
export declare function remoteFileMtime(target: string, homeRel: string, extraSshArgs?: string[]): Promise<number>;
|
|
162
|
-
export interface RunFleetLoginOptions {
|
|
142
|
+
export declare function driveRemoteLogin(target: string, flow: LoginFlow, driver: TermDriver, opts?: DriveOptions, extraSshArgs?: string[]): Promise<DriveResult>;
|
|
143
|
+
interface RunFleetLoginOptions {
|
|
163
144
|
agents?: (AgentId | string)[];
|
|
164
145
|
devices?: string[];
|
|
165
146
|
interactive?: boolean;
|
|
@@ -167,7 +148,7 @@ export interface RunFleetLoginOptions {
|
|
|
167
148
|
/** Target every device-code pair regardless of cached login state (cold cache / forced re-login). */
|
|
168
149
|
all?: boolean;
|
|
169
150
|
/** Overrides for testing / non-default cadence. */
|
|
170
|
-
driver?:
|
|
151
|
+
driver?: TermDriver;
|
|
171
152
|
drive?: DriveOptions;
|
|
172
153
|
/** Port for the local dashboard (0 = ephemeral). */
|
|
173
154
|
port?: number;
|
|
@@ -186,3 +167,4 @@ export interface RunFleetLoginOptions {
|
|
|
186
167
|
* this wires them to the live fleet.
|
|
187
168
|
*/
|
|
188
169
|
export declare function runFleetLogin(opts?: RunFleetLoginOptions): Promise<LoginStatus[]>;
|
|
170
|
+
export {};
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
* Layering — pure vs I/O, so the valuable logic is unit-testable without SSH:
|
|
18
18
|
* - `scrapeLogin` / `classifyLoginFlow` / `selectLoginTargets` /
|
|
19
19
|
* `buildRemoteLoginSshCommand` / `buildDashboardHtml` are PURE.
|
|
20
|
-
* - `driveRemoteLogin` drives a
|
|
21
|
-
* (fake in tests; real over the
|
|
20
|
+
* - `driveRemoteLogin` drives a terminal through an injectable {@link TermDriver}
|
|
21
|
+
* (fake in tests; real over the standalone `term` CLI in prod — see
|
|
22
|
+
* `../term-client.js`).
|
|
22
23
|
* - `detectPending` / `runFleetLogin` do the real fleet I/O.
|
|
23
24
|
*
|
|
24
25
|
* The device codes have a ~15 min TTL, so the default (bulk) mode requests every
|
|
@@ -32,7 +33,7 @@ import { deviceIdentityArgs, fleetDialTarget } from '../devices/connect.js';
|
|
|
32
33
|
import { planFleetTargets } from '../devices/fleet.js';
|
|
33
34
|
import { assertValidSshTarget, shellQuote, sshExecAsync } from '../ssh-exec.js';
|
|
34
35
|
import { machineId } from '../session/sync/config.js';
|
|
35
|
-
import {
|
|
36
|
+
import { termStart, termExec, termWrite, termScreen, termStop } from '../term-client.js';
|
|
36
37
|
import { showUrl } from '../open-url.js';
|
|
37
38
|
import { readAuthHealthCache, } from '../auth-health.js';
|
|
38
39
|
import { FLEET_LOGIN_FLOWS, KEYCHAIN_BOUND_ON_MAC, } from './auth-sync.js';
|
|
@@ -144,7 +145,7 @@ export function selectLoginTargets(devices, agents, cache, opts = {}) {
|
|
|
144
145
|
}
|
|
145
146
|
/**
|
|
146
147
|
* Build the `ssh -tt <target> <loginCommand>` command string driven through the
|
|
147
|
-
*
|
|
148
|
+
* `term` CLI. `-tt` forces a tty so the remote CLI enters its interactive
|
|
148
149
|
* device-code flow; `accept-new` learns a first-seen host key without a prompt.
|
|
149
150
|
* Both the target and the login command are shell-quoted. Pure/testable.
|
|
150
151
|
*
|
|
@@ -331,42 +332,42 @@ export function buildDashboardHtml(pending, mode) {
|
|
|
331
332
|
</body>
|
|
332
333
|
</html>`;
|
|
333
334
|
}
|
|
334
|
-
/** Real driver over the
|
|
335
|
-
export function
|
|
335
|
+
/** Real driver over the standalone `term` CLI (`../term-client.js`). */
|
|
336
|
+
export function defaultTermDriver() {
|
|
336
337
|
const expectOk = (res, what) => {
|
|
337
338
|
if (!res.ok)
|
|
338
|
-
throw new Error(`
|
|
339
|
+
throw new Error(`term ${what} failed: ${res.error ?? 'unknown'}`);
|
|
339
340
|
};
|
|
340
341
|
return {
|
|
341
342
|
async start(opts) {
|
|
342
|
-
const res = await
|
|
343
|
+
const res = await termStart({ rows: opts?.rows ?? 40, cols: opts?.cols ?? 120 });
|
|
343
344
|
expectOk(res, 'start');
|
|
344
345
|
return res.id;
|
|
345
346
|
},
|
|
346
347
|
async exec(id, command) {
|
|
347
|
-
expectOk(await
|
|
348
|
+
expectOk(await termExec(id, command), 'exec');
|
|
348
349
|
},
|
|
349
350
|
async write(id, input) {
|
|
350
|
-
expectOk(await
|
|
351
|
+
expectOk(await termWrite(id, input), 'write');
|
|
351
352
|
},
|
|
352
353
|
async screen(id) {
|
|
353
|
-
const res = await
|
|
354
|
+
const res = await termScreen(id);
|
|
354
355
|
expectOk(res, 'screen');
|
|
355
356
|
return { screen: res.screen ?? '', exited: Boolean(res.exited) };
|
|
356
357
|
},
|
|
357
358
|
async stop(id) {
|
|
358
|
-
await
|
|
359
|
+
await termStop(id).catch(() => undefined);
|
|
359
360
|
},
|
|
360
361
|
};
|
|
361
362
|
}
|
|
362
363
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
363
364
|
/**
|
|
364
365
|
* Drive one remote device-code login: launch `ssh -tt <target> <loginCommand>`
|
|
365
|
-
* in a
|
|
366
|
+
* in a `term` session, send the flow's `deviceCodeSelect` keystrokes (if any) to reach the
|
|
366
367
|
* device-code path, then poll the screen until {@link scrapeLogin} yields both a
|
|
367
368
|
* URL and a code (or the deadline / session-exit). The human completes the code
|
|
368
369
|
* in the browser; the caller polls the credential file for completion. Testable
|
|
369
|
-
* against a fake {@link
|
|
370
|
+
* against a fake {@link TermDriver}.
|
|
370
371
|
*/
|
|
371
372
|
export async function driveRemoteLogin(target, flow, driver, opts = {}, extraSshArgs = []) {
|
|
372
373
|
const initialDelayMs = opts.initialDelayMs ?? 4000;
|
|
@@ -374,8 +375,8 @@ export async function driveRemoteLogin(target, flow, driver, opts = {}, extraSsh
|
|
|
374
375
|
const timeoutMs = opts.timeoutMs ?? 90000;
|
|
375
376
|
const id = await driver.start();
|
|
376
377
|
// Everything past start() must tear the session down on a mid-flight throw —
|
|
377
|
-
// otherwise the caller never receives a sessionId and the
|
|
378
|
-
// `ssh -tt` process it drives) leaks until
|
|
378
|
+
// otherwise the caller never receives a sessionId and the term session (and
|
|
379
|
+
// the `ssh -tt` process it drives) leaks until term's own idle reaper. On the
|
|
379
380
|
// normal return paths the caller owns stop() via the returned sessionId.
|
|
380
381
|
try {
|
|
381
382
|
await driver.exec(id, buildRemoteLoginSshCommand(target, flow, extraSshArgs));
|
|
@@ -412,7 +413,7 @@ export async function driveRemoteLogin(target, flow, driver, opts = {}, extraSsh
|
|
|
412
413
|
* over the pure {@link selectLoginTargets}. Devices/agents can be narrowed by the
|
|
413
414
|
* caller's flags; the default agent set is every agent with a defined flow.
|
|
414
415
|
*/
|
|
415
|
-
|
|
416
|
+
async function detectPending(opts = {}) {
|
|
416
417
|
const reg = await loadDevices();
|
|
417
418
|
const self = machineId();
|
|
418
419
|
const online = planFleetTargets(reg)
|
|
@@ -432,7 +433,7 @@ export async function detectPending(opts = {}) {
|
|
|
432
433
|
* bumping after the human completes the browser step. POSIX `stat` only (the
|
|
433
434
|
* device-code agents are all POSIX-fleet).
|
|
434
435
|
*/
|
|
435
|
-
|
|
436
|
+
async function remoteFileMtime(target, homeRel, extraSshArgs = []) {
|
|
436
437
|
const cmd = `stat -c %Y "$HOME/${homeRel}" 2>/dev/null || stat -f %m "$HOME/${homeRel}" 2>/dev/null || echo 0`;
|
|
437
438
|
const res = await sshExecAsync(target, cmd, { timeoutMs: 15000, multiplex: true, extraSshArgs }).catch(() => null);
|
|
438
439
|
if (!res || res.code !== 0)
|
|
@@ -507,7 +508,7 @@ export async function runFleetLogin(opts = {}) {
|
|
|
507
508
|
console.error(` ${dashUrl}`);
|
|
508
509
|
}
|
|
509
510
|
}
|
|
510
|
-
const driver = opts.driver ??
|
|
511
|
+
const driver = opts.driver ?? defaultTermDriver();
|
|
511
512
|
const remotable = pending.filter((p) => p.remotable);
|
|
512
513
|
const driveOne = async (p) => {
|
|
513
514
|
const k = key(p.device, p.agent);
|
|
@@ -204,14 +204,6 @@ export interface AuthFilePayload {
|
|
|
204
204
|
/** POSIX mode to restore (e.g. 0o600 for credentials). */
|
|
205
205
|
mode: number;
|
|
206
206
|
}
|
|
207
|
-
/** The plaintext we encrypt before shipping auth over the wire. */
|
|
208
|
-
export interface AuthBundle {
|
|
209
|
-
/** Schema version for forward-compat. */
|
|
210
|
-
v: 1;
|
|
211
|
-
/** Source machine name the snapshot was taken on. */
|
|
212
|
-
source: string;
|
|
213
|
-
files: AuthFilePayload[];
|
|
214
|
-
}
|
|
215
207
|
/** Result of classifying one source agent's auth for propagation. */
|
|
216
208
|
export interface AuthSnapshotResult {
|
|
217
209
|
files: AuthFilePayload[];
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One synchronous, disk-only read facade over the fleet/usage caches.
|
|
3
|
-
*
|
|
4
|
-
* These readers NEVER touch the network and NEVER SSH — they read the caches
|
|
5
|
-
* the daemon keeps warm (usage snapshot, projected headroom, fleet status) and
|
|
6
|
-
* return instantly. That is the whole point: the routing hot path
|
|
7
|
-
* (`agents run` → rotate.ts), device affinity (smart-launch.ts), and Factory can
|
|
8
|
-
* consult live-ish fleet state without paying a provider fetch or an ssh probe
|
|
9
|
-
* on a latency-sensitive path.
|
|
10
|
-
*
|
|
11
|
-
* Writers live elsewhere (the daemon's `runUsageRefresh` for usage/headroom,
|
|
12
|
-
* `runFleetStatusPublish` for the fleet-status mirror); this module is the read
|
|
13
|
-
* side only.
|
|
14
|
-
*/
|
|
15
|
-
import { type UsageSnapshot } from './accounting/usage.js';
|
|
16
1
|
import { type FleetStatusRow } from './fleet-status.js';
|
|
17
2
|
/**
|
|
18
3
|
* The fleet-status union the daemon publishes (own row) and the fleet-status
|
|
@@ -21,10 +6,8 @@ import { type FleetStatusRow } from './fleet-status.js';
|
|
|
21
6
|
*/
|
|
22
7
|
export declare function readFleetStatus(): Record<string, FleetStatusRow>;
|
|
23
8
|
export type { FleetStatusRow };
|
|
24
|
-
/** The last cached usage snapshot for an account, or null. Cache-only. */
|
|
25
|
-
export declare function readAccountUsage(usageKey: string): UsageSnapshot | null;
|
|
26
9
|
/** An account's projected headroom, as published by the daemon refresher. */
|
|
27
|
-
|
|
10
|
+
interface AccountHeadroom {
|
|
28
11
|
status: 'available' | 'rate_limited' | null;
|
|
29
12
|
/** Projected minutes until the session window caps; null = unknown/idle. */
|
|
30
13
|
minutesToLimit: number | null;
|
package/dist/lib/fleet-cache.js
CHANGED
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
* `runFleetStatusPublish` for the fleet-status mirror); this module is the read
|
|
13
13
|
* side only.
|
|
14
14
|
*/
|
|
15
|
-
import { readClaudeUsageCache } from './accounting/usage.js';
|
|
16
15
|
import { readHeadroomEntry } from './usage-refresh.js';
|
|
17
16
|
import { readFleetStatus as readFleetStatusMirror } from './fleet-status.js';
|
|
18
17
|
/**
|
|
@@ -23,10 +22,6 @@ import { readFleetStatus as readFleetStatusMirror } from './fleet-status.js';
|
|
|
23
22
|
export function readFleetStatus() {
|
|
24
23
|
return readFleetStatusMirror();
|
|
25
24
|
}
|
|
26
|
-
/** The last cached usage snapshot for an account, or null. Cache-only. */
|
|
27
|
-
export function readAccountUsage(usageKey) {
|
|
28
|
-
return readClaudeUsageCache(usageKey);
|
|
29
|
-
}
|
|
30
25
|
/**
|
|
31
26
|
* The daemon-computed headroom for an account, or null when nothing has been
|
|
32
27
|
* published yet. Cache-only — a cold cache simply yields null, and callers
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare const FLEET_SHARED_REPO_SYNC_DEADLINE_MS = 45000;
|
|
2
|
-
export declare const FLEET_SHARED_REPO_KILL_GRACE_MS = 250;
|
|
3
2
|
export declare const FLEET_SHARED_REPO_OUTPUT_MAX_BYTES: number;
|
|
4
3
|
/**
|
|
5
4
|
* When the shared-state exchange last completed successfully, in epoch ms, or
|
|
@@ -7,13 +6,13 @@ export declare const FLEET_SHARED_REPO_OUTPUT_MAX_BYTES: number;
|
|
|
7
6
|
* Reads the default daemon-dir marker the periodic exchange writes.
|
|
8
7
|
*/
|
|
9
8
|
export declare function readLastSuccessfulExchangeMs(): number | null;
|
|
10
|
-
|
|
9
|
+
interface BoundedProcessResult {
|
|
11
10
|
code: number | null;
|
|
12
11
|
stdout: string;
|
|
13
12
|
stderr: string;
|
|
14
13
|
timedOut: boolean;
|
|
15
14
|
}
|
|
16
|
-
|
|
15
|
+
interface FleetSharedRepoSyncOptions {
|
|
17
16
|
userAgentsDir?: string;
|
|
18
17
|
device?: string;
|
|
19
18
|
timeoutMs?: number;
|
|
@@ -53,3 +52,4 @@ export declare function runBoundedProcess(command: string, args: string[], optio
|
|
|
53
52
|
* this resolves successfully.
|
|
54
53
|
*/
|
|
55
54
|
export declare function syncFleetSharedStateRepo(options?: FleetSharedRepoSyncOptions): Promise<FleetSharedRepoSyncResult>;
|
|
55
|
+
export {};
|
|
@@ -18,7 +18,7 @@ import { logAndContinueOnLockCompromised } from './lock-compromise.js';
|
|
|
18
18
|
import { machineId } from './session/sync/config.js';
|
|
19
19
|
import { getDaemonDir, getUserAgentsDir } from './state.js';
|
|
20
20
|
export const FLEET_SHARED_REPO_SYNC_DEADLINE_MS = 45_000;
|
|
21
|
-
|
|
21
|
+
const FLEET_SHARED_REPO_KILL_GRACE_MS = 250;
|
|
22
22
|
export const FLEET_SHARED_REPO_OUTPUT_MAX_BYTES = 1024 * 1024;
|
|
23
23
|
const FLEET_SHARED_REPO_PUSH_ATTEMPTS = 3;
|
|
24
24
|
const FLEET_SHARED_REPO_REBASE_CLEANUP_RESERVE_MS = 5_000;
|
|
@@ -57,12 +57,12 @@ export interface FleetSharedDeviceState {
|
|
|
57
57
|
rows: SessionMirrorRow[];
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
interface FleetSharedStatePatch {
|
|
61
61
|
usage?: FleetSharedDeviceState['usage'];
|
|
62
62
|
auth?: FleetSharedDeviceState['auth'];
|
|
63
63
|
sessions?: FleetSharedDeviceState['sessions'];
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
interface FleetSharedStateReadResult {
|
|
66
66
|
states: FleetSharedDeviceState[];
|
|
67
67
|
errors: Array<{
|
|
68
68
|
device: string;
|
|
@@ -89,3 +89,4 @@ export declare function updateFleetSharedDeviceStateAsync(device: string, patch:
|
|
|
89
89
|
}>;
|
|
90
90
|
/** Read every valid peer-owned state file; malformed peers fail separately. */
|
|
91
91
|
export declare function readFleetSharedDeviceStates(userAgentsDir?: string): FleetSharedStateReadResult;
|
|
92
|
+
export {};
|
package/dist/lib/format.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Options for {@link die} — opt into machine-readable failure output. */
|
|
2
|
-
|
|
2
|
+
interface DieOptions {
|
|
3
3
|
/**
|
|
4
4
|
* Emit a machine-readable `{"error", "hint"?}` object to **stdout** instead of
|
|
5
5
|
* red text on stderr. Pass `isJsonMode(options)` from a `--json` command so an
|
|
@@ -98,3 +98,4 @@ export declare function readStdinSync(): string;
|
|
|
98
98
|
* stdout is a TTY; otherwise return `text` unchanged.
|
|
99
99
|
*/
|
|
100
100
|
export declare function termLink(text: string, filePath: string): string;
|
|
101
|
+
export {};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* an agent stuck retrying the SAME denied action instead of adapting.
|
|
8
8
|
*/
|
|
9
9
|
import type { EventRecord } from './feed/events.js';
|
|
10
|
-
|
|
10
|
+
interface RepeatedGuardBlockFinding {
|
|
11
11
|
/** Session id the repeated blocks happened in, or 'unknown' when the
|
|
12
12
|
* friction event carried no session (e.g. a guard fired outside any
|
|
13
13
|
* tracked agent session). */
|
|
@@ -30,3 +30,4 @@ export interface RepeatedGuardBlockFinding {
|
|
|
30
30
|
export declare function detectRepeatedGuardBlocks(events: EventRecord[], opts?: {
|
|
31
31
|
minRepeats?: number;
|
|
32
32
|
}): RepeatedGuardBlockFinding[];
|
|
33
|
+
export {};
|
package/dist/lib/fs-walk.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** A file surfaced by the walk, carrying the mtime+size from the walk's own stat. */
|
|
2
|
-
|
|
2
|
+
interface WalkedFile {
|
|
3
3
|
path: string;
|
|
4
4
|
mtimeMs: number;
|
|
5
5
|
size: number;
|
|
@@ -19,3 +19,4 @@ export declare function walkForFiles(dir: string, ext: string, limit: number): s
|
|
|
19
19
|
* Hot-path helper for the `agents run` account-recency probe.
|
|
20
20
|
*/
|
|
21
21
|
export declare function latestFileMtimeMs(dir: string, ext: string): number | null;
|
|
22
|
+
export {};
|