@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
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* before the bundle is ever installed. This matches the release-time gate in
|
|
21
21
|
* `scripts/verify-menubar-helper.sh`.
|
|
22
22
|
*/
|
|
23
|
-
import { EXPECTED_TEAM_ID, downloadHelperApp, helperAssetUrls, helperCacheDir
|
|
23
|
+
import { EXPECTED_TEAM_ID, downloadHelperApp, helperAssetUrls, helperCacheDir } from '../helper-download.js';
|
|
24
24
|
/** The zipped `.app` release asset name. */
|
|
25
25
|
export const MENUBAR_HELPER_ASSET = 'MenubarHelper.app.zip';
|
|
26
26
|
/** The bundle directory name once extracted. */
|
|
@@ -50,10 +50,6 @@ export function menubarHelperAssetUrls(version) {
|
|
|
50
50
|
export function menubarHelperCacheDir(version) {
|
|
51
51
|
return helperCacheDir(MENUBAR_HELPER_SPEC, version);
|
|
52
52
|
}
|
|
53
|
-
/** Verify a menu-bar helper `.app`: codesign + Team + DR pin + notarization. */
|
|
54
|
-
export function verifyMenubarHelper(appPath) {
|
|
55
|
-
verifyHelperApp(appPath, MENUBAR_HELPER_SPEC);
|
|
56
|
-
}
|
|
57
53
|
/**
|
|
58
54
|
* Download the menu-bar helper release asset for `version`, verify sha256 +
|
|
59
55
|
* signature + DR pin, and return the path to the extracted `MenubarHelper.app`
|
|
@@ -45,7 +45,7 @@ export declare function serviceLabel(): string;
|
|
|
45
45
|
*/
|
|
46
46
|
/** Version label for a bundle that has none of its own (a local dev build). */
|
|
47
47
|
export declare const LOCAL_BUILD_LABEL = "local";
|
|
48
|
-
|
|
48
|
+
type MenubarStamp = {
|
|
49
49
|
source: 'release';
|
|
50
50
|
helperVersion: string;
|
|
51
51
|
} | {
|
|
@@ -64,10 +64,6 @@ export type MenubarStamp = {
|
|
|
64
64
|
* package, or a dev checkout without a built bundle).
|
|
65
65
|
*/
|
|
66
66
|
export declare function resolveInstalledMenubarExecutable(): string | null;
|
|
67
|
-
/** True if the user explicitly disabled the menu bar (don't auto-enable on upgrade). */
|
|
68
|
-
export declare function menubarDisabledByUser(): boolean;
|
|
69
|
-
/** True if the launchd plist for the menu-bar service is installed. */
|
|
70
|
-
export declare function menubarServiceInstalled(): boolean;
|
|
71
67
|
/** Where a downloaded copy of the floor release sits once fetched and verified. */
|
|
72
68
|
export declare function cachedFloorBundlePath(): string;
|
|
73
69
|
/**
|
|
@@ -76,14 +72,6 @@ export declare function cachedFloorBundlePath(): string;
|
|
|
76
72
|
* The startup self-heal installs from here, network-free.
|
|
77
73
|
*/
|
|
78
74
|
export declare function cachedReleaseBundlePath(): string;
|
|
79
|
-
/**
|
|
80
|
-
* The release version an explicit install should fetch: the newest published
|
|
81
|
-
* build, but never below what this Mac already runs — a release deleted after
|
|
82
|
-
* it was installed must not roll the helper back through `setup`/`enable`.
|
|
83
|
-
*/
|
|
84
|
-
export declare function menubarVersionToInstall(opts?: {
|
|
85
|
-
force?: boolean;
|
|
86
|
-
}): Promise<string>;
|
|
87
75
|
/** True when the bundle carries a signature the kernel will accept at launch. */
|
|
88
76
|
export declare function codesignVerifies(appPath: string): boolean;
|
|
89
77
|
/**
|
|
@@ -526,7 +514,7 @@ export declare function isMenubarProcessStaleAgainstBundle(pidStartedAtMs: numbe
|
|
|
526
514
|
*/
|
|
527
515
|
export declare function buildMenubarDoctorReport(): MenubarDoctorReport;
|
|
528
516
|
/** Outcome of one auto-update pass (`updateMenubarHelperIfNewer`). */
|
|
529
|
-
|
|
517
|
+
interface MenubarUpdateResult {
|
|
530
518
|
outcome: 'updated' | 'current' | 'skipped' | 'failed';
|
|
531
519
|
installed: string | null;
|
|
532
520
|
available: string;
|
|
@@ -567,3 +555,4 @@ export declare function updateMenubarHelperIfNewer(opts?: {
|
|
|
567
555
|
dryRun?: boolean;
|
|
568
556
|
force?: boolean;
|
|
569
557
|
}): Promise<MenubarUpdateResult>;
|
|
558
|
+
export {};
|
|
@@ -155,11 +155,11 @@ function disabledSentinelPath() {
|
|
|
155
155
|
return path.join(getRuntimeStateDir(), 'menubar.disabled');
|
|
156
156
|
}
|
|
157
157
|
/** True if the user explicitly disabled the menu bar (don't auto-enable on upgrade). */
|
|
158
|
-
|
|
158
|
+
function menubarDisabledByUser() {
|
|
159
159
|
return fs.existsSync(disabledSentinelPath());
|
|
160
160
|
}
|
|
161
161
|
/** True if the launchd plist for the menu-bar service is installed. */
|
|
162
|
-
|
|
162
|
+
function menubarServiceInstalled() {
|
|
163
163
|
return onDarwin() && fs.existsSync(servicePlistPath());
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
@@ -238,7 +238,7 @@ export function cachedReleaseBundlePath() {
|
|
|
238
238
|
* build, but never below what this Mac already runs — a release deleted after
|
|
239
239
|
* it was installed must not roll the helper back through `setup`/`enable`.
|
|
240
240
|
*/
|
|
241
|
-
|
|
241
|
+
async function menubarVersionToInstall(opts = {}) {
|
|
242
242
|
const resolved = await resolveMenubarVersion({ force: opts.force });
|
|
243
243
|
const installed = readInstalledMenubarStamp();
|
|
244
244
|
if (installed?.source === 'release' && compareVersions(installed.helperVersion, resolved) > 0)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time, CLI-owned migration of AGI Menu preferences from the macOS
|
|
3
|
+
* UserDefaults domain `com.phnx-labs.agents-menubar` into the registered
|
|
4
|
+
* `menubar.menu.*` config keys (PHNX-3999).
|
|
5
|
+
*
|
|
6
|
+
* Why here: before the preferences became `agents config` keys, the stable menu
|
|
7
|
+
* bar stored them in its own UserDefaults. A user upgrading must keep those
|
|
8
|
+
* settings, but the CLI is now the single source of truth and syncs fleet-wide,
|
|
9
|
+
* so the values are lifted into config ONCE and then owned there.
|
|
10
|
+
*
|
|
11
|
+
* The rules (from the integration contract) are all fail-safe:
|
|
12
|
+
* - macOS only. On any other platform this is a no-op (Linux derives canonical
|
|
13
|
+
* config only).
|
|
14
|
+
* - The PRODUCTION domain only — never the dev bundle
|
|
15
|
+
* `com.phnx-labs.agents-menubar.dev` (we simply never read it).
|
|
16
|
+
* - Import only KNOWN keys ({@link MENUBAR_MENU_PROPERTIES}) that are still
|
|
17
|
+
* UNSET in config — an already-set (synced) value is never overridden.
|
|
18
|
+
* - One-shot, gated by a sentinel, so a later `agents config unset` cannot
|
|
19
|
+
* resurrect the legacy value on the next run.
|
|
20
|
+
*
|
|
21
|
+
* The stable app stores each preference under its FULL `menubar.menu.*` key name
|
|
22
|
+
* (the Swift MenuPreferences local-cache key), so the migration matches on the
|
|
23
|
+
* full name. If a key is stored under a different name, it simply is not matched
|
|
24
|
+
* and the migration stays a safe no-op for it. The read uses `defaults export
|
|
25
|
+
* <domain> -` piped through `plutil` (NOT `defaults read <domain> -json`, which
|
|
26
|
+
* treats `-json` as a key and errors).
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Pure plan step: which UserDefaults entries should be imported. The stable app
|
|
30
|
+
* stores each preference under its FULL `menubar.menu.*` key name (the Swift
|
|
31
|
+
* MenuPreferences local-cache key), so we match on the full name — only known
|
|
32
|
+
* keys that are present in `userDefaults` AND currently unset in config
|
|
33
|
+
* (`isUnset`) are imported, so an already-set value is preserved. Values are
|
|
34
|
+
* returned raw; the caller coerces + validates them against each key's spec.
|
|
35
|
+
*/
|
|
36
|
+
export declare function planMenubarPrefMigration(userDefaults: Record<string, unknown>, isUnset: (fullName: string) => boolean): Array<{
|
|
37
|
+
name: string;
|
|
38
|
+
value: unknown;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Coerce a raw UserDefaults value to the type its config key expects. The
|
|
42
|
+
* `plutil` scalar output is text, but a bool can arrive as
|
|
43
|
+
* 0/1 or "true"/"false" and an int as a numeric string, so normalize before
|
|
44
|
+
* validation. Returns undefined for a value that cannot be coerced (skipped,
|
|
45
|
+
* never forced).
|
|
46
|
+
*/
|
|
47
|
+
export declare function coerceMenubarPrefValue(name: string, raw: unknown): unknown;
|
|
48
|
+
/**
|
|
49
|
+
* Run the one-shot migration. macOS only, gated by the sentinel, best-effort:
|
|
50
|
+
* any failure is swallowed (a migration must never break the snapshot read that
|
|
51
|
+
* calls it) and a failed read remains eligible for a later retry.
|
|
52
|
+
*/
|
|
53
|
+
export declare function migrateMenubarPreferencesFromUserDefaults(): void;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time, CLI-owned migration of AGI Menu preferences from the macOS
|
|
3
|
+
* UserDefaults domain `com.phnx-labs.agents-menubar` into the registered
|
|
4
|
+
* `menubar.menu.*` config keys (PHNX-3999).
|
|
5
|
+
*
|
|
6
|
+
* Why here: before the preferences became `agents config` keys, the stable menu
|
|
7
|
+
* bar stored them in its own UserDefaults. A user upgrading must keep those
|
|
8
|
+
* settings, but the CLI is now the single source of truth and syncs fleet-wide,
|
|
9
|
+
* so the values are lifted into config ONCE and then owned there.
|
|
10
|
+
*
|
|
11
|
+
* The rules (from the integration contract) are all fail-safe:
|
|
12
|
+
* - macOS only. On any other platform this is a no-op (Linux derives canonical
|
|
13
|
+
* config only).
|
|
14
|
+
* - The PRODUCTION domain only — never the dev bundle
|
|
15
|
+
* `com.phnx-labs.agents-menubar.dev` (we simply never read it).
|
|
16
|
+
* - Import only KNOWN keys ({@link MENUBAR_MENU_PROPERTIES}) that are still
|
|
17
|
+
* UNSET in config — an already-set (synced) value is never overridden.
|
|
18
|
+
* - One-shot, gated by a sentinel, so a later `agents config unset` cannot
|
|
19
|
+
* resurrect the legacy value on the next run.
|
|
20
|
+
*
|
|
21
|
+
* The stable app stores each preference under its FULL `menubar.menu.*` key name
|
|
22
|
+
* (the Swift MenuPreferences local-cache key), so the migration matches on the
|
|
23
|
+
* full name. If a key is stored under a different name, it simply is not matched
|
|
24
|
+
* and the migration stays a safe no-op for it. The read uses `defaults export
|
|
25
|
+
* <domain> -` piped through `plutil` (NOT `defaults read <domain> -json`, which
|
|
26
|
+
* treats `-json` as a key and errors).
|
|
27
|
+
*/
|
|
28
|
+
import { execFileSync } from 'child_process';
|
|
29
|
+
import * as fs from 'fs';
|
|
30
|
+
import * as path from 'path';
|
|
31
|
+
import { assertValidValue, configKeySpec, getConfigValue, setConfigValue } from '../device-config.js';
|
|
32
|
+
import { getRuntimeStateDir } from '../state.js';
|
|
33
|
+
import { MENUBAR_MENU_PROPERTIES } from '../config-keys.js';
|
|
34
|
+
/** The production menu-bar UserDefaults domain (NOT the `.dev` bundle). */
|
|
35
|
+
const USER_DEFAULTS_DOMAIN = 'com.phnx-labs.agents-menubar';
|
|
36
|
+
/** Sentinel marking the one-shot done; its presence blocks every later run. */
|
|
37
|
+
function sentinelPath() {
|
|
38
|
+
return path.join(getRuntimeStateDir(), 'menubar-prefs-migrated');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pure plan step: which UserDefaults entries should be imported. The stable app
|
|
42
|
+
* stores each preference under its FULL `menubar.menu.*` key name (the Swift
|
|
43
|
+
* MenuPreferences local-cache key), so we match on the full name — only known
|
|
44
|
+
* keys that are present in `userDefaults` AND currently unset in config
|
|
45
|
+
* (`isUnset`) are imported, so an already-set value is preserved. Values are
|
|
46
|
+
* returned raw; the caller coerces + validates them against each key's spec.
|
|
47
|
+
*/
|
|
48
|
+
export function planMenubarPrefMigration(userDefaults, isUnset) {
|
|
49
|
+
const plan = [];
|
|
50
|
+
for (const prop of MENUBAR_MENU_PROPERTIES) {
|
|
51
|
+
const name = `menubar.menu.${prop}`;
|
|
52
|
+
if (!(name in userDefaults))
|
|
53
|
+
continue;
|
|
54
|
+
if (!isUnset(name))
|
|
55
|
+
continue;
|
|
56
|
+
plan.push({ name, value: userDefaults[name] });
|
|
57
|
+
}
|
|
58
|
+
return plan;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Coerce a raw UserDefaults value to the type its config key expects. The
|
|
62
|
+
* `plutil` scalar output is text, but a bool can arrive as
|
|
63
|
+
* 0/1 or "true"/"false" and an int as a numeric string, so normalize before
|
|
64
|
+
* validation. Returns undefined for a value that cannot be coerced (skipped,
|
|
65
|
+
* never forced).
|
|
66
|
+
*/
|
|
67
|
+
export function coerceMenubarPrefValue(name, raw) {
|
|
68
|
+
const type = configKeySpec(name).type;
|
|
69
|
+
if (type === 'bool') {
|
|
70
|
+
if (typeof raw === 'boolean')
|
|
71
|
+
return raw;
|
|
72
|
+
if (raw === 1 || raw === '1' || raw === 'true' || raw === 'YES')
|
|
73
|
+
return true;
|
|
74
|
+
if (raw === 0 || raw === '0' || raw === 'false' || raw === 'NO')
|
|
75
|
+
return false;
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (type === 'int') {
|
|
79
|
+
if (typeof raw === 'number' && Number.isInteger(raw))
|
|
80
|
+
return raw;
|
|
81
|
+
if (typeof raw === 'string' && /^\d+$/.test(raw.trim()))
|
|
82
|
+
return Number.parseInt(raw.trim(), 10);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return typeof raw === 'string' ? raw : undefined;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Read known scalar preferences from the production domain.
|
|
89
|
+
*
|
|
90
|
+
* `defaults read <domain> -json` does NOT exist — `defaults read` treats `-json`
|
|
91
|
+
* as a KEY name and errors. The correct read is `defaults export <domain> -`,
|
|
92
|
+
* which writes the domain's plist to stdout (an EMPTY plist, exit 0, when the
|
|
93
|
+
* domain is absent — a legitimate "nothing to migrate"), read one known scalar key at a time with `plutil -extract … raw`. Other
|
|
94
|
+
* defaults may contain dates or data that cannot be represented as JSON.
|
|
95
|
+
*
|
|
96
|
+
* Returns `{ ok }` so the caller can tell a genuine read/convert FAILURE (do not
|
|
97
|
+
* write the sentinel — retry next run) from an ABSENT domain (ok, empty values —
|
|
98
|
+
* mark done). A failure never fabricates an empty map.
|
|
99
|
+
*/
|
|
100
|
+
function readUserDefaultsDomain() {
|
|
101
|
+
try {
|
|
102
|
+
const plist = execFileSync('defaults', ['export', USER_DEFAULTS_DOMAIN, '-'], {
|
|
103
|
+
encoding: 'utf8', timeout: 5_000,
|
|
104
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
105
|
+
});
|
|
106
|
+
const values = {};
|
|
107
|
+
for (const property of MENUBAR_MENU_PROPERTIES) {
|
|
108
|
+
const key = `menubar.menu.${property}`;
|
|
109
|
+
try {
|
|
110
|
+
values[key] = execFileSync('plutil', ['-extract', key.replaceAll('.', '\\.'), 'raw', '-o', '-', '-'], {
|
|
111
|
+
input: plist, encoding: 'utf8', timeout: 5_000, stdio: ['pipe', 'pipe', 'ignore'],
|
|
112
|
+
}).trimEnd();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Missing or non-scalar legacy keys are outside the preference contract.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { ok: true, values };
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// `defaults`/`plutil` missing, a non-zero exit, or malformed output — a real
|
|
122
|
+
// failure. Do NOT claim an empty domain; the caller must retry.
|
|
123
|
+
return { ok: false, values: {} };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Run the one-shot migration. macOS only, gated by the sentinel, best-effort:
|
|
128
|
+
* any failure is swallowed (a migration must never break the snapshot read that
|
|
129
|
+
* calls it) and a failed read remains eligible for a later retry.
|
|
130
|
+
*/
|
|
131
|
+
export function migrateMenubarPreferencesFromUserDefaults() {
|
|
132
|
+
if (process.platform !== 'darwin')
|
|
133
|
+
return;
|
|
134
|
+
const sentinel = sentinelPath();
|
|
135
|
+
if (fs.existsSync(sentinel))
|
|
136
|
+
return;
|
|
137
|
+
const { ok, values } = readUserDefaultsDomain();
|
|
138
|
+
// A genuine read/convert failure must NOT mark the migration done — retry on a
|
|
139
|
+
// later run rather than silently skipping the user's real settings forever. An
|
|
140
|
+
// ABSENT domain reads ok with empty values and legitimately marks done.
|
|
141
|
+
if (!ok)
|
|
142
|
+
return;
|
|
143
|
+
try {
|
|
144
|
+
const plan = planMenubarPrefMigration(values, (name) => getConfigValue(name).value === undefined);
|
|
145
|
+
for (const { name, value } of plan) {
|
|
146
|
+
const coerced = coerceMenubarPrefValue(name, value);
|
|
147
|
+
if (coerced === undefined)
|
|
148
|
+
continue; // unrepresentable — skip, never force
|
|
149
|
+
try {
|
|
150
|
+
assertValidValue(configKeySpec(name), coerced);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
setConfigValue(name, coerced);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
fs.mkdirSync(path.dirname(sentinel), { recursive: true });
|
|
163
|
+
fs.writeFileSync(sentinel, new Date().toISOString() + '\n');
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
/* if we cannot mark it, a later run retries — still safe (idempotent) */
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -18,10 +18,6 @@
|
|
|
18
18
|
* (`downloadMenubarHelperApp`: sha256, codesign, Team, designated-requirement
|
|
19
19
|
* pin, notarization) is unchanged — resolution only chooses the version.
|
|
20
20
|
*/
|
|
21
|
-
/** The repo whose releases carry `menubar/v*` tags (same as the download URL). */
|
|
22
|
-
export declare const MENUBAR_RELEASES_API = "https://api.github.com/repos/phnx-labs/agi-cli/releases?per_page=100";
|
|
23
|
-
/** How long a resolved answer is trusted before the release list is re-read. */
|
|
24
|
-
export declare const MENUBAR_RESOLVE_TTL_MS: number;
|
|
25
21
|
/** One release as the resolver sees it — the subset of the GitHub shape it reads. */
|
|
26
22
|
export interface ReleaseCandidate {
|
|
27
23
|
tagName: string;
|
|
@@ -29,7 +25,7 @@ export interface ReleaseCandidate {
|
|
|
29
25
|
draft?: boolean;
|
|
30
26
|
prerelease?: boolean;
|
|
31
27
|
}
|
|
32
|
-
|
|
28
|
+
interface MenubarResolveCache {
|
|
33
29
|
/** Epoch ms of the release-list read this answer came from. */
|
|
34
30
|
checkedAt: number;
|
|
35
31
|
/** The newest published helper version at that time (never below the floor then). */
|
|
@@ -41,8 +37,6 @@ export interface MenubarResolveCache {
|
|
|
41
37
|
* pre-release, and carry both the zip and its `.sha256`.
|
|
42
38
|
*/
|
|
43
39
|
export declare function pickNewestMenubarVersion(candidates: ReleaseCandidate[], floor: string): string;
|
|
44
|
-
/** Where the resolved answer lives: beside the helper's own download cache. */
|
|
45
|
-
export declare function menubarResolveCachePath(): string;
|
|
46
40
|
export declare function readMenubarResolveCache(file: string): MenubarResolveCache | null;
|
|
47
41
|
/**
|
|
48
42
|
* The cached answer when it is usable offline: at or above the floor, of any
|
|
@@ -61,8 +55,6 @@ type FetchLike = (input: string, init?: {
|
|
|
61
55
|
status: number;
|
|
62
56
|
json(): Promise<unknown>;
|
|
63
57
|
}>;
|
|
64
|
-
/** Read the release list. Unauthenticated: release metadata is public and this runs at most once a day per machine. */
|
|
65
|
-
export declare function fetchMenubarReleaseCandidates(fetchImpl?: FetchLike): Promise<ReleaseCandidate[]>;
|
|
66
58
|
/**
|
|
67
59
|
* The helper version to install now: the newest published build >= floor.
|
|
68
60
|
*
|
|
@@ -26,9 +26,9 @@ import { helperFloor } from '../helper-versions.js';
|
|
|
26
26
|
import { getCliVersion } from '../version.js';
|
|
27
27
|
import { MENUBAR_HELPER_ASSET } from './download-menubar.js';
|
|
28
28
|
/** The repo whose releases carry `menubar/v*` tags (same as the download URL). */
|
|
29
|
-
|
|
29
|
+
const MENUBAR_RELEASES_API = 'https://api.github.com/repos/phnx-labs/agi-cli/releases?per_page=100';
|
|
30
30
|
/** How long a resolved answer is trusted before the release list is re-read. */
|
|
31
|
-
|
|
31
|
+
const MENUBAR_RESOLVE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
32
32
|
const TAG = /^menubar\/v(\d+\.\d+\.\d+)$/;
|
|
33
33
|
/**
|
|
34
34
|
* Pure: the newest candidate at or above `floor`, else the floor. A tag must be
|
|
@@ -51,7 +51,7 @@ export function pickNewestMenubarVersion(candidates, floor) {
|
|
|
51
51
|
return best;
|
|
52
52
|
}
|
|
53
53
|
/** Where the resolved answer lives: beside the helper's own download cache. */
|
|
54
|
-
|
|
54
|
+
function menubarResolveCachePath() {
|
|
55
55
|
return path.join(getCacheDir(), 'menubar', 'latest.json');
|
|
56
56
|
}
|
|
57
57
|
export function readMenubarResolveCache(file) {
|
|
@@ -84,7 +84,7 @@ export function cachedMenubarVersion(opts = {}) {
|
|
|
84
84
|
return cache && compareVersions(cache.version, floor) >= 0 ? cache.version : floor;
|
|
85
85
|
}
|
|
86
86
|
/** Read the release list. Unauthenticated: release metadata is public and this runs at most once a day per machine. */
|
|
87
|
-
|
|
87
|
+
async function fetchMenubarReleaseCandidates(fetchImpl = fetch) {
|
|
88
88
|
const res = await fetchImpl(MENUBAR_RELEASES_API, {
|
|
89
89
|
headers: {
|
|
90
90
|
Accept: 'application/vnd.github+json',
|
|
@@ -8,14 +8,20 @@ import type { WatchdogTickResult } from '../watchdog/runner.js';
|
|
|
8
8
|
* is deliberately NOT claimed here (the registry's cached tailscale flag is
|
|
9
9
|
* documented as stale in both directions — registry.ts isLikelyOnline).
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
interface MenubarDevice {
|
|
12
12
|
name: string;
|
|
13
13
|
platform: string;
|
|
14
|
+
/**
|
|
15
|
+
* Physical form factor for a factual hardware icon: `laptop` | `desktop` |
|
|
16
|
+
* `server` | `unknown` (PHNX-3999). A shared device-scope config fact set
|
|
17
|
+
* explicitly per device — never inferred from `platform`. `unknown` when unset.
|
|
18
|
+
*/
|
|
19
|
+
formFactor: string;
|
|
14
20
|
interactive: boolean;
|
|
15
21
|
isLocal: boolean;
|
|
16
22
|
preferred: boolean;
|
|
17
23
|
}
|
|
18
|
-
|
|
24
|
+
interface MenubarSnapshot {
|
|
19
25
|
version: 1;
|
|
20
26
|
capturedAt: string;
|
|
21
27
|
/**
|
|
@@ -29,11 +35,27 @@ export interface MenubarSnapshot {
|
|
|
29
35
|
recentSessions: Record<string, unknown>[];
|
|
30
36
|
activeSessions: Record<string, unknown>[];
|
|
31
37
|
devices: MenubarDevice[];
|
|
38
|
+
/**
|
|
39
|
+
* AGI Menu preferences (PHNX-3999), keyed by the full `menubar.menu.*` config
|
|
40
|
+
* name, carrying the EFFECTIVE value — the stored value, else the registered
|
|
41
|
+
* default. The native menu consumes this from the snapshot it already polls
|
|
42
|
+
* rather than a second preference-read mechanism. `menubar.menu.defaultProject`
|
|
43
|
+
* is omitted when unset (it has no default); every other key is always present.
|
|
44
|
+
* Writes stay one `agents config set/unset <key>` per setting.
|
|
45
|
+
*/
|
|
46
|
+
menuPreferences: Record<string, unknown>;
|
|
32
47
|
watchdog: {
|
|
33
48
|
enabled: boolean;
|
|
34
49
|
lastTick: Pick<WatchdogTickResult, 'didNudge' | 'counts'> | null;
|
|
35
50
|
};
|
|
36
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* The effective AGI Menu preferences map for the snapshot: each `menubar.menu.*`
|
|
54
|
+
* key's stored value, or its registered default when unset. A key with neither
|
|
55
|
+
* (only `defaultProject`) is omitted so the native app keeps its own default.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildMenuPreferences(): Record<string, unknown>;
|
|
37
58
|
export declare function readLastWatchdogTick(stateDir?: string): WatchdogTickResult | null;
|
|
38
59
|
/** One-process read model for AGI Menu's repeating three-minute refresh. */
|
|
39
60
|
export declare function computeMenubarSnapshot(): Promise<MenubarSnapshot>;
|
|
61
|
+
export {};
|
|
@@ -3,12 +3,31 @@ import * as path from 'path';
|
|
|
3
3
|
import { buildRoutineListJson } from '../scheduling/routines.js';
|
|
4
4
|
import { backfillActiveRowsFromIndex, isRunningLiveSession, serializeActiveSessionsForJson, serializeSessionsJson } from '../session/active.js';
|
|
5
5
|
import { getConfigValue, loadAutoLaunchPreferences } from '../device-config.js';
|
|
6
|
+
import { MENUBAR_MENU_PROPERTIES } from '../config-keys.js';
|
|
7
|
+
import { migrateMenubarPreferencesFromUserDefaults } from './migrate-prefs.js';
|
|
6
8
|
import { loadDevices } from '../devices/registry.js';
|
|
7
9
|
import { machineId } from '../machine-id.js';
|
|
8
10
|
import { querySessions } from '../session/db.js';
|
|
9
11
|
import { readActiveSessionsCache } from '../session/session-cache.js';
|
|
10
12
|
import { getRuntimeStateDir } from '../state.js';
|
|
11
13
|
import { getCliVersion } from '../version.js';
|
|
14
|
+
/**
|
|
15
|
+
* The effective AGI Menu preferences map for the snapshot: each `menubar.menu.*`
|
|
16
|
+
* key's stored value, or its registered default when unset. A key with neither
|
|
17
|
+
* (only `defaultProject`) is omitted so the native app keeps its own default.
|
|
18
|
+
*/
|
|
19
|
+
export function buildMenuPreferences() {
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const prop of MENUBAR_MENU_PROPERTIES) {
|
|
22
|
+
const name = `menubar.menu.${prop}`;
|
|
23
|
+
const entry = getConfigValue(name);
|
|
24
|
+
const value = entry.value !== undefined ? entry.value : entry.spec.defaultValue;
|
|
25
|
+
if (value === undefined)
|
|
26
|
+
continue; // unset defaultProject — no default to emit
|
|
27
|
+
out[name] = value;
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
12
31
|
/**
|
|
13
32
|
* The full registered-device roster for the menu bar, from the local registry
|
|
14
33
|
* file only (no ssh, no stats probe) — as cheap as `buildRoutineListJson()`, so
|
|
@@ -26,6 +45,8 @@ async function buildMenubarDevices() {
|
|
|
26
45
|
.map((name) => ({
|
|
27
46
|
name,
|
|
28
47
|
platform: reg[name].platform,
|
|
48
|
+
// Shared device-scope fact (readable for any device); `unknown` when unset.
|
|
49
|
+
formFactor: getConfigValue('formFactor', { device: name }).value ?? 'unknown',
|
|
29
50
|
interactive: name === interactiveHost,
|
|
30
51
|
isLocal: name === self,
|
|
31
52
|
preferred: prefs[name]?.preferred === true,
|
|
@@ -41,6 +62,10 @@ export function readLastWatchdogTick(stateDir = path.join(getRuntimeStateDir(),
|
|
|
41
62
|
}
|
|
42
63
|
/** One-process read model for AGI Menu's repeating three-minute refresh. */
|
|
43
64
|
export async function computeMenubarSnapshot() {
|
|
65
|
+
// One-shot, sentinel-gated, macOS-only lift of legacy UserDefaults prefs into
|
|
66
|
+
// config before we read them. After the first run it is a cheap existsSync
|
|
67
|
+
// no-op; it never throws into the snapshot.
|
|
68
|
+
migrateMenubarPreferencesFromUserDefaults();
|
|
44
69
|
const [routines, recent, devices] = await Promise.all([
|
|
45
70
|
Promise.resolve(buildRoutineListJson()),
|
|
46
71
|
Promise.resolve(querySessions({ limit: 40, skipExistenceCheck: true })),
|
|
@@ -69,6 +94,7 @@ export async function computeMenubarSnapshot() {
|
|
|
69
94
|
recentSessions: JSON.parse(serializeSessionsJson(recent)),
|
|
70
95
|
activeSessions: serializeActiveSessionsForJson(activeSessions),
|
|
71
96
|
devices,
|
|
97
|
+
menuPreferences: buildMenuPreferences(),
|
|
72
98
|
watchdog: {
|
|
73
99
|
enabled: getConfigValue('watchdog.enabled').value === true,
|
|
74
100
|
lastTick: (() => {
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import type { AgentId } from './types.js';
|
|
24
24
|
import { type ModelTier } from './model-tiers.js';
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
type TierOverrideMap = Partial<Record<ModelTier, string>>;
|
|
26
|
+
interface TierOverrideEntry {
|
|
27
27
|
selector: string;
|
|
28
28
|
tiers: TierOverrideMap;
|
|
29
29
|
}
|
|
@@ -41,3 +41,4 @@ export declare function listTierOverrides(): TierOverrideEntry[];
|
|
|
41
41
|
export declare function setTierOverride(selectorInput: string, tierInput: string | ModelTier, model: string): TierOverrideEntry;
|
|
42
42
|
/** Clear one tier (or all tiers when `tierInput` is omitted) for a selector. Returns true if anything changed. */
|
|
43
43
|
export declare function clearTierOverride(selectorInput: string, tierInput?: string): boolean;
|
|
44
|
+
export {};
|
|
@@ -262,5 +262,3 @@ export declare function writeMonitor(config: MonitorConfig): void;
|
|
|
262
262
|
export declare function deleteMonitor(name: string): boolean;
|
|
263
263
|
/** Enable or disable a monitor by name. */
|
|
264
264
|
export declare function setMonitorEnabled(name: string, enabled: boolean): void;
|
|
265
|
-
/** Check whether a monitor with the given name exists on disk. */
|
|
266
|
-
export declare function monitorExists(name: string): boolean;
|
|
@@ -500,7 +500,3 @@ export function setMonitorEnabled(name, enabled) {
|
|
|
500
500
|
monitor.enabled = enabled;
|
|
501
501
|
writeMonitor(monitor);
|
|
502
502
|
}
|
|
503
|
-
/** Check whether a monitor with the given name exists on disk. */
|
|
504
|
-
export function monitorExists(name) {
|
|
505
|
-
return readMonitor(name) !== null;
|
|
506
|
-
}
|
|
@@ -29,7 +29,7 @@ interface MonitorLivenessLike {
|
|
|
29
29
|
droughtNotifiedAt?: string;
|
|
30
30
|
}
|
|
31
31
|
/** The fire/no-fire decision for one observation, plus what to persist. */
|
|
32
|
-
|
|
32
|
+
interface FireDecision {
|
|
33
33
|
fire: boolean;
|
|
34
34
|
/** The value whose de-dupe signature is stored on persist. */
|
|
35
35
|
value: string;
|
|
@@ -49,7 +49,7 @@ export interface RemoteMonitor {
|
|
|
49
49
|
* must never blank the guard for the rest of the fleet.
|
|
50
50
|
*/
|
|
51
51
|
export declare function parseRemoteMonitors(stdout: string, machine: string): RemoteMonitor[];
|
|
52
|
-
|
|
52
|
+
interface FleetMonitorsResult {
|
|
53
53
|
monitors: RemoteMonitor[];
|
|
54
54
|
/** Target discovery failed before any peer was dialed — the fleet was not
|
|
55
55
|
* consulted at all, which must not read as "no duplicate anywhere". */
|
|
@@ -58,7 +58,7 @@ export interface FleetMonitorsResult {
|
|
|
58
58
|
* silently treating "we could not ask" as "there is no duplicate". */
|
|
59
59
|
skipped: string[];
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
interface GatherFleetMonitorsOptions {
|
|
62
62
|
/** When supplied, the fan-out aborts as soon as any peer returns a monitor with
|
|
63
63
|
* this behavioral fingerprint. The miss path still waits for every peer so the
|
|
64
64
|
* guard can prove absence fleet-wide. */
|
|
@@ -80,3 +80,4 @@ export interface GatherFleetMonitorsOptions {
|
|
|
80
80
|
* knowable once every peer has answered.
|
|
81
81
|
*/
|
|
82
82
|
export declare function gatherFleetMonitors(options?: GatherFleetMonitorsOptions): Promise<FleetMonitorsResult>;
|
|
83
|
+
export {};
|
|
@@ -2,22 +2,9 @@
|
|
|
2
2
|
* Webhook source evaluator.
|
|
3
3
|
*
|
|
4
4
|
* Webhooks are push-based (an inbound signed HTTP delivery), so the poll-model
|
|
5
|
-
* `evaluate` returns null.
|
|
6
|
-
* against monitors with `matchWebhook`, which reuses the github/linear matchers
|
|
7
|
-
* from lib/triggers/webhook.ts by projecting the monitor's webhook filters onto a
|
|
8
|
-
* synthesized JobConfig-shaped trigger.
|
|
5
|
+
* `evaluate` returns null.
|
|
9
6
|
*/
|
|
10
|
-
import {
|
|
11
|
-
import type { JobTrigger } from '../../scheduling/routines.js';
|
|
12
|
-
import type { MonitorSource, MonitorConfig } from '../config.js';
|
|
7
|
+
import type { MonitorSource } from '../config.js';
|
|
13
8
|
import type { Observation } from './types.js';
|
|
14
9
|
/** Push-only: nothing to snapshot on a poll tick. */
|
|
15
10
|
export declare function evaluate(_source: MonitorSource): Promise<Observation | null>;
|
|
16
|
-
/** Project a monitor's webhook source onto a JobTrigger for the shared matcher. */
|
|
17
|
-
export declare function monitorTrigger(source: MonitorSource): JobTrigger | null;
|
|
18
|
-
/**
|
|
19
|
-
* True when an incoming webhook matches this monitor's webhook source — reuses
|
|
20
|
-
* the routines matcher (lib/triggers/webhook.ts) so github/linear filter
|
|
21
|
-
* semantics stay in one place.
|
|
22
|
-
*/
|
|
23
|
-
export declare function matchWebhook(monitor: MonitorConfig, webhook: IncomingWebhook): boolean;
|
|
@@ -2,46 +2,9 @@
|
|
|
2
2
|
* Webhook source evaluator.
|
|
3
3
|
*
|
|
4
4
|
* Webhooks are push-based (an inbound signed HTTP delivery), so the poll-model
|
|
5
|
-
* `evaluate` returns null.
|
|
6
|
-
* against monitors with `matchWebhook`, which reuses the github/linear matchers
|
|
7
|
-
* from lib/triggers/webhook.ts by projecting the monitor's webhook filters onto a
|
|
8
|
-
* synthesized JobConfig-shaped trigger.
|
|
5
|
+
* `evaluate` returns null.
|
|
9
6
|
*/
|
|
10
|
-
import { jobMatchesWebhook } from '../../triggers/webhook.js';
|
|
11
7
|
/** Push-only: nothing to snapshot on a poll tick. */
|
|
12
8
|
export function evaluate(_source) {
|
|
13
9
|
return Promise.resolve(null);
|
|
14
10
|
}
|
|
15
|
-
/** Project a monitor's webhook source onto a JobTrigger for the shared matcher. */
|
|
16
|
-
export function monitorTrigger(source) {
|
|
17
|
-
const w = source.webhook;
|
|
18
|
-
if (!w)
|
|
19
|
-
return null;
|
|
20
|
-
if (w.source === 'github') {
|
|
21
|
-
return {
|
|
22
|
-
type: 'github_event',
|
|
23
|
-
event: w.event,
|
|
24
|
-
...(w.repo ? { repo: w.repo } : {}),
|
|
25
|
-
...(w.branch ? { branch: w.branch } : {}),
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
type: 'linear_event',
|
|
30
|
-
event: w.event,
|
|
31
|
-
...(w.action ? { action: w.action } : {}),
|
|
32
|
-
...(w.teamKey ? { teamKey: w.teamKey } : {}),
|
|
33
|
-
...(w.label ? { label: w.label } : {}),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* True when an incoming webhook matches this monitor's webhook source — reuses
|
|
38
|
-
* the routines matcher (lib/triggers/webhook.ts) so github/linear filter
|
|
39
|
-
* semantics stay in one place.
|
|
40
|
-
*/
|
|
41
|
-
export function matchWebhook(monitor, webhook) {
|
|
42
|
-
const trigger = monitorTrigger(monitor.source);
|
|
43
|
-
if (!trigger)
|
|
44
|
-
return false;
|
|
45
|
-
const shim = { name: monitor.name, trigger };
|
|
46
|
-
return jobMatchesWebhook(shim, webhook);
|
|
47
|
-
}
|