@phnx-labs/agents-cli 1.22.119 → 1.22.121
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 +236 -0
- package/README.md +19 -2
- package/dist/bootstrap.d.ts +0 -15
- package/dist/bootstrap.js +10 -409
- package/dist/cli/command-registry.d.ts +0 -58
- package/dist/cli/command-registry.js +2 -74
- package/dist/commands/accounts.d.ts +0 -17
- package/dist/commands/accounts.js +1 -52
- package/dist/commands/alias.d.ts +0 -12
- package/dist/commands/alias.js +0 -6
- package/dist/commands/apply.d.ts +0 -15
- package/dist/commands/apply.js +0 -63
- package/dist/commands/audit.d.ts +0 -12
- package/dist/commands/audit.js +0 -13
- package/dist/commands/auth.js +4 -12
- package/dist/commands/beta.d.ts +0 -6
- package/dist/commands/beta.js +2 -6
- package/dist/commands/browser-sessions-picker.d.ts +0 -8
- package/dist/commands/browser-sessions-picker.js +0 -26
- package/dist/commands/browser.d.ts +0 -57
- package/dist/commands/browser.js +0 -80
- package/dist/commands/budget.d.ts +0 -13
- package/dist/commands/budget.js +0 -2
- package/dist/commands/cli.d.ts +0 -12
- package/dist/commands/cli.js +0 -4
- package/dist/commands/cloud.d.ts +0 -9
- package/dist/commands/cloud.js +0 -43
- package/dist/commands/commands.d.ts +0 -9
- package/dist/commands/commands.js +0 -18
- package/dist/commands/computer-sessions-picker.d.ts +0 -11
- package/dist/commands/computer-sessions-picker.js +0 -29
- package/dist/commands/computer.d.ts +0 -62
- package/dist/commands/computer.js +3 -114
- package/dist/commands/config.d.ts +0 -14
- package/dist/commands/config.js +21 -60
- package/dist/commands/cost.d.ts +0 -11
- package/dist/commands/cost.js +1 -17
- package/dist/commands/daemon-test-harness.d.ts +0 -32
- package/dist/commands/daemon-test-harness.js +1 -36
- package/dist/commands/daemon.d.ts +0 -46
- package/dist/commands/daemon.js +8 -255
- package/dist/commands/detach-core.d.ts +0 -28
- package/dist/commands/detach-core.js +0 -30
- package/dist/commands/detach.d.ts +1 -12
- package/dist/commands/detach.js +16 -52
- package/dist/commands/device-config-test-harness.js +0 -12
- package/dist/commands/doctor.d.ts +0 -103
- package/dist/commands/doctor.js +3 -279
- package/dist/commands/events.d.ts +0 -29
- package/dist/commands/events.js +1 -55
- package/dist/commands/exec.d.ts +0 -163
- package/dist/commands/exec.js +15 -964
- package/dist/commands/factory.d.ts +0 -6
- package/dist/commands/factory.js +0 -2
- package/dist/commands/feed-watch.js +0 -20
- package/dist/commands/feed.d.ts +0 -38
- package/dist/commands/feed.js +1 -151
- package/dist/commands/feedback.d.ts +0 -5
- package/dist/commands/feedback.js +0 -5
- package/dist/commands/fleet-capture.d.ts +0 -12
- package/dist/commands/fleet-capture.js +1 -39
- package/dist/commands/focus.d.ts +6 -94
- package/dist/commands/focus.js +13 -183
- package/dist/commands/fork.d.ts +0 -21
- package/dist/commands/fork.js +0 -45
- package/dist/commands/funnel.d.ts +0 -3
- package/dist/commands/go.d.ts +2 -71
- package/dist/commands/go.js +5 -99
- package/dist/commands/harness-hooks.d.ts +0 -41
- package/dist/commands/harness-hooks.js +0 -48
- package/dist/commands/harness-wizard.d.ts +0 -137
- package/dist/commands/harness-wizard.js +0 -109
- package/dist/commands/harness.d.ts +0 -63
- package/dist/commands/harness.js +0 -103
- package/dist/commands/hooks.d.ts +0 -9
- package/dist/commands/hooks.js +0 -26
- package/dist/commands/humans.d.ts +0 -8
- package/dist/commands/humans.js +0 -8
- package/dist/commands/import.d.ts +0 -22
- package/dist/commands/import.js +0 -79
- package/dist/commands/insights.d.ts +0 -37
- package/dist/commands/insights.js +3 -115
- package/dist/commands/inspect.d.ts +0 -117
- package/dist/commands/inspect.js +2 -448
- package/dist/commands/lease.d.ts +0 -28
- package/dist/commands/lease.js +0 -43
- package/dist/commands/logs.d.ts +0 -23
- package/dist/commands/logs.js +0 -30
- package/dist/commands/mailboxes.d.ts +0 -18
- package/dist/commands/mailboxes.js +0 -29
- package/dist/commands/mcp.d.ts +0 -9
- package/dist/commands/mcp.js +0 -53
- package/dist/commands/memory.d.ts +0 -7
- package/dist/commands/memory.js +0 -7
- package/dist/commands/menubar.d.ts +0 -8
- package/dist/commands/menubar.js +0 -24
- package/dist/commands/message.d.ts +0 -23
- package/dist/commands/message.js +0 -50
- package/dist/commands/mine.d.ts +0 -22
- package/dist/commands/mine.js +0 -21
- package/dist/commands/models.d.ts +0 -8
- package/dist/commands/models.js +0 -33
- package/dist/commands/modes.d.ts +0 -10
- package/dist/commands/modes.js +0 -13
- package/dist/commands/monitors.d.ts +0 -9
- package/dist/commands/monitors.js +3 -160
- package/dist/commands/open.d.ts +0 -26
- package/dist/commands/open.js +0 -10
- package/dist/commands/output.d.ts +0 -18
- package/dist/commands/output.js +1 -34
- package/dist/commands/packages-materialize.d.ts +0 -11
- package/dist/commands/packages-materialize.js +0 -3
- package/dist/commands/packages.d.ts +0 -10
- package/dist/commands/packages.js +0 -50
- package/dist/commands/perf.d.ts +0 -41
- package/dist/commands/perf.js +0 -55
- package/dist/commands/permissions.d.ts +0 -9
- package/dist/commands/permissions.js +0 -43
- package/dist/commands/plugins.d.ts +0 -14
- package/dist/commands/plugins.js +2 -55
- package/dist/commands/profiles.d.ts +0 -25
- package/dist/commands/profiles.js +0 -27
- package/dist/commands/projects-todo.d.ts +2 -0
- package/dist/commands/projects-todo.js +132 -0
- package/dist/commands/projects.d.ts +0 -85
- package/dist/commands/projects.js +344 -291
- package/dist/commands/prune.js +0 -30
- package/dist/commands/ps-roster.d.ts +92 -0
- package/dist/commands/ps-roster.js +744 -0
- package/dist/commands/ps.d.ts +6 -0
- package/dist/commands/ps.js +98 -0
- package/dist/commands/refresh-rules.d.ts +0 -13
- package/dist/commands/refresh-rules.js +0 -14
- package/dist/commands/reminders.d.ts +0 -7
- package/dist/commands/repo.d.ts +0 -89
- package/dist/commands/repo.js +7 -205
- package/dist/commands/resource-view.d.ts +0 -33
- package/dist/commands/resource-view.js +0 -49
- package/dist/commands/resume.d.ts +1 -19
- package/dist/commands/resume.js +0 -50
- package/dist/commands/route.d.ts +0 -10
- package/dist/commands/route.js +0 -19
- package/dist/commands/routines.d.ts +0 -42
- package/dist/commands/routines.js +5 -290
- package/dist/commands/routines.test-fixture.d.ts +0 -34
- package/dist/commands/routines.test-fixture.js +4 -100
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +1 -6
- package/dist/commands/run-account-picker.d.ts +0 -59
- package/dist/commands/run-account-picker.js +0 -71
- package/dist/commands/run-broadcast.d.ts +0 -9
- package/dist/commands/run-broadcast.js +0 -7
- package/dist/commands/run-cloud.d.ts +0 -15
- package/dist/commands/run-cloud.js +0 -37
- package/dist/commands/run-device-picker.d.ts +0 -25
- package/dist/commands/run-device-picker.js +1 -53
- package/dist/commands/secrets-passthrough.d.ts +0 -31
- package/dist/commands/secrets-passthrough.js +0 -10
- package/dist/commands/send.d.ts +0 -20
- package/dist/commands/send.js +14 -18
- package/dist/commands/sessions-backfill.d.ts +0 -7
- package/dist/commands/sessions-backfill.js +1 -16
- package/dist/commands/sessions-backup-setup.js +0 -11
- package/dist/commands/sessions-bookmark.d.ts +0 -8
- package/dist/commands/sessions-bookmark.js +0 -28
- package/dist/commands/sessions-browser.d.ts +2 -117
- package/dist/commands/sessions-browser.js +5 -243
- package/dist/commands/sessions-export.d.ts +1 -26
- package/dist/commands/sessions-export.js +3 -81
- package/dist/commands/sessions-import.d.ts +0 -14
- package/dist/commands/sessions-import.js +0 -59
- package/dist/commands/sessions-inject.d.ts +0 -60
- package/dist/commands/sessions-inject.js +3 -96
- package/dist/commands/sessions-migrate.d.ts +2 -37
- package/dist/commands/sessions-migrate.js +7 -159
- package/dist/commands/sessions-optimize.d.ts +0 -12
- package/dist/commands/sessions-picker-factory.d.ts +0 -7
- package/dist/commands/sessions-picker-factory.js +0 -8
- package/dist/commands/sessions-picker.d.ts +4 -103
- package/dist/commands/sessions-picker.js +13 -352
- package/dist/commands/sessions-render.d.ts +1 -2
- package/dist/commands/sessions-render.js +3 -7
- package/dist/commands/sessions-resume.d.ts +1 -24
- package/dist/commands/sessions-resume.js +2 -65
- package/dist/commands/sessions-share.d.ts +1 -9
- package/dist/commands/sessions-share.js +1 -45
- package/dist/commands/sessions-stats.d.ts +0 -24
- package/dist/commands/sessions-stats.js +0 -49
- package/dist/commands/sessions-stop.d.ts +1 -20
- package/dist/commands/sessions-stop.js +4 -9
- package/dist/commands/sessions-tail.d.ts +1 -19
- package/dist/commands/sessions-tail.js +3 -36
- package/dist/commands/sessions-trace.d.ts +5 -36
- package/dist/commands/sessions-trace.js +7 -82
- package/dist/commands/sessions.d.ts +1 -666
- package/dist/commands/sessions.js +30 -2279
- package/dist/commands/sessions.test-fixture.d.ts +0 -9
- package/dist/commands/sessions.test-fixture.js +8 -23
- package/dist/commands/setup-accounts.d.ts +0 -6
- package/dist/commands/setup-browser.d.ts +0 -23
- package/dist/commands/setup-browser.js +0 -28
- package/dist/commands/setup-computer.d.ts +0 -16
- package/dist/commands/setup-computer.js +0 -28
- package/dist/commands/setup-fleet.d.ts +0 -8
- package/dist/commands/setup-fleet.js +0 -11
- package/dist/commands/setup-mine.d.ts +0 -14
- package/dist/commands/setup-mine.js +0 -25
- package/dist/commands/setup-preferences.d.ts +0 -47
- package/dist/commands/setup-preferences.js +0 -53
- package/dist/commands/setup-secrets.d.ts +2 -24
- package/dist/commands/setup-secrets.js +0 -24
- package/dist/commands/setup-term.d.ts +0 -21
- package/dist/commands/setup-term.js +0 -21
- package/dist/commands/setup-terminal.d.ts +0 -1
- package/dist/commands/setup-terminal.js +0 -1
- package/dist/commands/setup-tools.d.ts +2 -0
- package/dist/commands/setup-tools.js +73 -0
- package/dist/commands/setup.d.ts +0 -20
- package/dist/commands/setup.js +4 -57
- package/dist/commands/skills.d.ts +0 -9
- package/dist/commands/skills.js +1 -22
- package/dist/commands/snapshot.d.ts +0 -9
- package/dist/commands/snapshot.js +0 -10
- package/dist/commands/ssh.d.ts +0 -64
- package/dist/commands/ssh.js +9 -420
- package/dist/commands/status.d.ts +0 -12
- package/dist/commands/status.js +0 -26
- package/dist/commands/subagents.d.ts +0 -8
- package/dist/commands/subagents.js +0 -31
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -256
- package/dist/commands/teams-picker.d.ts +0 -3
- package/dist/commands/teams-picker.js +0 -34
- package/dist/commands/teams.d.ts +1 -76
- package/dist/commands/teams.js +9 -477
- package/dist/commands/tmux.d.ts +0 -25
- package/dist/commands/tmux.js +0 -46
- package/dist/commands/traces.js +0 -19
- package/dist/commands/trash.d.ts +0 -17
- package/dist/commands/trash.js +1 -11
- package/dist/commands/uninstall.d.ts +0 -9
- package/dist/commands/uninstall.js +0 -6
- package/dist/commands/update.d.ts +0 -22
- package/dist/commands/update.js +0 -44
- package/dist/commands/upgrade.d.ts +0 -1
- package/dist/commands/upgrade.js +0 -1
- package/dist/commands/utils.d.ts +0 -85
- package/dist/commands/utils.js +1 -95
- package/dist/commands/versions.d.ts +0 -16
- package/dist/commands/versions.js +0 -134
- package/dist/commands/view.d.ts +0 -90
- package/dist/commands/view.js +4 -343
- package/dist/commands/watchdog.d.ts +0 -19
- package/dist/commands/watchdog.js +3 -43
- package/dist/commands/webhook.d.ts +0 -8
- package/dist/commands/webhook.js +0 -14
- package/dist/commands/workflows.d.ts +0 -8
- package/dist/commands/workflows.js +0 -6
- package/dist/index.d.ts +0 -25
- package/dist/index.js +5 -119
- package/dist/lib/account-capabilities.d.ts +0 -34
- package/dist/lib/account-capabilities.js +0 -32
- package/dist/lib/account-catalog.d.ts +0 -128
- package/dist/lib/account-catalog.js +8 -154
- package/dist/lib/account-provider-registry.d.ts +0 -14
- package/dist/lib/account-provider-registry.js +0 -8
- package/dist/lib/account-registry.d.ts +0 -74
- package/dist/lib/account-registry.js +14 -189
- package/dist/lib/account-schema.d.ts +0 -19
- package/dist/lib/account-schema.js +0 -43
- package/dist/lib/accounting/account-launch.d.ts +0 -15
- package/dist/lib/accounting/account-launch.js +1 -3
- package/dist/lib/accounting/account-pool-collect.d.ts +0 -26
- package/dist/lib/accounting/account-pool-collect.js +0 -42
- package/dist/lib/accounting/account-pool.d.ts +0 -41
- package/dist/lib/accounting/account-pool.js +0 -17
- package/dist/lib/accounting/capacity.d.ts +0 -32
- package/dist/lib/accounting/capacity.js +0 -32
- package/dist/lib/accounting/rotate.d.ts +0 -518
- package/dist/lib/accounting/rotate.js +4 -598
- package/dist/lib/accounting/usage-ingest.d.ts +0 -1
- package/dist/lib/accounting/usage-ingest.js +0 -44
- package/dist/lib/accounting/usage-sync.d.ts +0 -60
- package/dist/lib/accounting/usage-sync.js +4 -51
- package/dist/lib/accounting/usage.d.ts +0 -632
- package/dist/lib/accounting/usage.js +14 -1055
- package/dist/lib/accounts/add.d.ts +0 -60
- package/dist/lib/accounts/add.js +0 -127
- package/dist/lib/accounts/auth-operation-lock.d.ts +0 -1
- package/dist/lib/accounts/auth-operation-lock.js +0 -4
- package/dist/lib/accounts/migrate.d.ts +0 -9
- package/dist/lib/accounts/migrate.js +3 -42
- package/dist/lib/accounts/slots.d.ts +0 -25
- package/dist/lib/accounts/slots.js +1 -49
- package/dist/lib/acp/client.d.ts +0 -16
- package/dist/lib/acp/client.js +0 -29
- package/dist/lib/acp/harnesses.d.ts +0 -15
- package/dist/lib/acp/harnesses.js +0 -16
- package/dist/lib/acp/run.d.ts +0 -8
- package/dist/lib/acp/run.js +0 -8
- package/dist/lib/actor.d.ts +1 -71
- package/dist/lib/actor.js +1 -99
- package/dist/lib/add-dir.d.ts +0 -46
- package/dist/lib/add-dir.js +1 -70
- package/dist/lib/address.d.ts +0 -17
- package/dist/lib/address.js +0 -15
- package/dist/lib/agent-cli-commands.d.ts +0 -10
- package/dist/lib/agent-cli-commands.js +0 -10
- package/dist/lib/agent-modes.d.ts +0 -29
- package/dist/lib/agent-modes.js +0 -31
- package/dist/lib/agent-spec/agents.d.ts +0 -426
- package/dist/lib/agent-spec/agents.js +37 -924
- package/dist/lib/agent-spec/index.d.ts +0 -5
- package/dist/lib/agent-spec/index.js +0 -14
- package/dist/lib/agent-spec/materialize.d.ts +0 -10
- package/dist/lib/agent-spec/materialize.js +2 -139
- package/dist/lib/agent-spec/package-resolve.d.ts +0 -8
- package/dist/lib/agent-spec/package-resolve.js +1 -44
- package/dist/lib/agent-spec/package-schema.d.ts +0 -2
- package/dist/lib/agent-spec/package-schema.js +0 -11
- package/dist/lib/agent-spec/package-types.d.ts +0 -27
- package/dist/lib/agent-spec/package-types.js +0 -1
- package/dist/lib/agent-spec/primitives.d.ts +0 -18
- package/dist/lib/agent-spec/primitives.js +0 -27
- package/dist/lib/agent-spec/provider.js +0 -2
- package/dist/lib/agent-spec/resolve.d.ts +0 -23
- package/dist/lib/agent-spec/resolve.js +0 -41
- package/dist/lib/agent-spec/types.d.ts +0 -34
- package/dist/lib/agent-spec/types.js +0 -6
- package/dist/lib/agents.d.ts +0 -1
- package/dist/lib/agents.js +0 -1
- package/dist/lib/analytics/mix-commands.d.ts +0 -23
- package/dist/lib/analytics/mix-commands.js +0 -26
- package/dist/lib/analytics/recipes.d.ts +0 -1
- package/dist/lib/analytics/recipes.js +5 -10
- package/dist/lib/analytics/usage-db.js +4 -6
- package/dist/lib/answer-router.d.ts +0 -61
- package/dist/lib/answer-router.js +0 -57
- package/dist/lib/app-bundle-install.d.ts +0 -13
- package/dist/lib/app-bundle-install.js +0 -50
- package/dist/lib/artifact-actions.d.ts +0 -15
- package/dist/lib/artifact-actions.js +0 -18
- package/dist/lib/artifacts-client.d.ts +0 -10
- package/dist/lib/artifacts-client.js +0 -17
- package/dist/lib/ask-classifier.d.ts +0 -38
- package/dist/lib/ask-classifier.js +0 -27
- package/dist/lib/audit/log.d.ts +0 -47
- package/dist/lib/audit/log.js +1 -59
- package/dist/lib/auth-health.d.ts +0 -213
- package/dist/lib/auth-health.js +16 -266
- package/dist/lib/auth-mint.d.ts +0 -83
- package/dist/lib/auth-mint.js +8 -85
- package/dist/lib/auto-pull-worker.d.ts +0 -10
- package/dist/lib/auto-pull-worker.js +3 -48
- package/dist/lib/auto-pull.d.ts +0 -64
- package/dist/lib/auto-pull.js +0 -79
- package/dist/lib/beta.d.ts +0 -9
- package/dist/lib/beta.js +0 -9
- package/dist/lib/binary-shadow.d.ts +0 -22
- package/dist/lib/binary-shadow.js +4 -34
- package/dist/lib/boot-profile.d.ts +0 -10
- package/dist/lib/boot-profile.js +1 -31
- package/dist/lib/brand.d.ts +0 -20
- package/dist/lib/brand.js +0 -50
- package/dist/lib/browser/context.d.ts +0 -54
- package/dist/lib/browser/context.js +0 -49
- package/dist/lib/browser/paths.d.ts +0 -21
- package/dist/lib/browser/paths.js +0 -26
- package/dist/lib/browser/record.d.ts +0 -34
- package/dist/lib/browser/record.js +0 -38
- package/dist/lib/browser/sessions-list.d.ts +1 -79
- package/dist/lib/browser/sessions-list.js +2 -98
- package/dist/lib/browser-client.d.ts +0 -112
- package/dist/lib/browser-client.js +1 -90
- package/dist/lib/budget/config.d.ts +0 -6
- package/dist/lib/budget/config.js +0 -29
- package/dist/lib/budget/enforce.d.ts +0 -50
- package/dist/lib/budget/enforce.js +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -23
- package/dist/lib/budget/ledger.js +0 -28
- package/dist/lib/budget/live-cloud.d.ts +0 -26
- package/dist/lib/budget/live-cloud.js +0 -12
- package/dist/lib/budget/live-team.d.ts +0 -17
- package/dist/lib/budget/live-team.js +1 -35
- package/dist/lib/budget/preflight.d.ts +0 -51
- package/dist/lib/budget/preflight.js +0 -36
- package/dist/lib/byok-usage.d.ts +0 -20
- package/dist/lib/byok-usage.js +1 -24
- package/dist/lib/capabilities.d.ts +0 -24
- package/dist/lib/capabilities.js +0 -29
- package/dist/lib/catchup.d.ts +0 -87
- package/dist/lib/catchup.js +1 -81
- package/dist/lib/channels/owner-forward.d.ts +0 -70
- package/dist/lib/channels/owner-forward.js +1 -43
- package/dist/lib/channels/owner-sink.js +0 -21
- package/dist/lib/channels/providers/desktop.d.ts +0 -37
- package/dist/lib/channels/providers/desktop.js +0 -72
- package/dist/lib/channels/providers/index.d.ts +0 -1
- package/dist/lib/channels/providers/index.js +2 -6
- package/dist/lib/channels/providers/mailbox.js +0 -7
- package/dist/lib/channels/providers/openclaw-telegram.js +0 -8
- package/dist/lib/channels/providers/rush.d.ts +0 -2
- package/dist/lib/channels/providers/rush.js +0 -26
- package/dist/lib/channels/providers/session.d.ts +2 -0
- package/dist/lib/channels/providers/session.js +26 -0
- package/dist/lib/channels/registry.d.ts +0 -27
- package/dist/lib/channels/registry.js +0 -10
- package/dist/lib/channels/resolve.d.ts +0 -19
- package/dist/lib/channels/resolve.js +0 -2
- package/dist/lib/channels/send.d.ts +0 -50
- package/dist/lib/channels/send.js +0 -25
- package/dist/lib/checkpoint.d.ts +0 -36
- package/dist/lib/checkpoint.js +0 -28
- package/dist/lib/claude-account-token.d.ts +0 -98
- package/dist/lib/claude-account-token.js +7 -169
- package/dist/lib/claude-statusline.d.ts +0 -41
- package/dist/lib/claude-statusline.js +0 -68
- package/dist/lib/cli-entry.d.ts +0 -26
- package/dist/lib/cli-entry.js +1 -61
- package/dist/lib/cli-resources.d.ts +31 -89
- package/dist/lib/cli-resources.js +116 -152
- package/dist/lib/cloud/antigravity.d.ts +0 -29
- package/dist/lib/cloud/antigravity.js +0 -36
- package/dist/lib/cloud/codex.d.ts +0 -8
- package/dist/lib/cloud/codex.js +0 -41
- package/dist/lib/cloud/cursor.d.ts +0 -5
- package/dist/lib/cloud/cursor.js +2 -7
- package/dist/lib/cloud/dispatch.d.ts +0 -13
- package/dist/lib/cloud/dispatch.js +1 -48
- package/dist/lib/cloud/factory.d.ts +0 -52
- package/dist/lib/cloud/factory.js +3 -67
- package/dist/lib/cloud/host.d.ts +0 -39
- package/dist/lib/cloud/host.js +5 -48
- package/dist/lib/cloud/registry.d.ts +0 -25
- package/dist/lib/cloud/registry.js +0 -29
- package/dist/lib/cloud/rush.d.ts +0 -47
- package/dist/lib/cloud/rush.js +1 -82
- package/dist/lib/cloud/session-index.d.ts +0 -27
- package/dist/lib/cloud/session-index.js +1 -32
- package/dist/lib/cloud/store.d.ts +0 -18
- package/dist/lib/cloud/store.js +0 -28
- package/dist/lib/cloud/stream.d.ts +0 -14
- package/dist/lib/cloud/stream.js +0 -25
- package/dist/lib/cloud/types.d.ts +0 -168
- package/dist/lib/cloud/types.js +0 -46
- package/dist/lib/cloudflare/creds.d.ts +0 -2
- package/dist/lib/cloudflare/creds.js +0 -14
- package/dist/lib/cloudflare/provision.d.ts +0 -8
- package/dist/lib/cloudflare/provision.js +1 -19
- package/dist/lib/codex-home.d.ts +0 -60
- package/dist/lib/codex-home.js +2 -72
- package/dist/lib/codex-policy.d.ts +0 -10
- package/dist/lib/codex-policy.js +0 -13
- package/dist/lib/command-skills.d.ts +0 -10
- package/dist/lib/command-skills.js +0 -10
- package/dist/lib/commands.d.ts +0 -74
- package/dist/lib/commands.js +0 -112
- package/dist/lib/comms-render.d.ts +0 -5
- package/dist/lib/comms-render.js +0 -5
- package/dist/lib/computer/context.d.ts +0 -23
- package/dist/lib/computer/context.js +0 -14
- package/dist/lib/computer/policy.d.ts +0 -20
- package/dist/lib/computer/policy.js +0 -53
- package/dist/lib/computer/record.d.ts +0 -33
- package/dist/lib/computer/record.js +1 -48
- package/dist/lib/computer/sessions-list.d.ts +1 -128
- package/dist/lib/computer/sessions-list.js +6 -165
- package/dist/lib/computer-client.d.ts +0 -106
- package/dist/lib/computer-client.js +5 -86
- package/dist/lib/concurrency.d.ts +0 -14
- package/dist/lib/concurrency.js +0 -3
- package/dist/lib/config-drift.d.ts +0 -31
- package/dist/lib/config-drift.js +0 -32
- package/dist/lib/config-keys.d.ts +1 -65
- package/dist/lib/config-keys.js +6 -52
- package/dist/lib/config-transfer.d.ts +0 -14
- package/dist/lib/config-transfer.js +0 -26
- package/dist/lib/convert.d.ts +0 -17
- package/dist/lib/convert.js +0 -18
- package/dist/lib/crabbox/cli.d.ts +0 -156
- package/dist/lib/crabbox/cli.js +1 -188
- package/dist/lib/crabbox/config.d.ts +0 -18
- package/dist/lib/crabbox/config.js +1 -19
- package/dist/lib/crabbox/lease.d.ts +0 -93
- package/dist/lib/crabbox/lease.js +4 -148
- package/dist/lib/crabbox/progress.d.ts +0 -56
- package/dist/lib/crabbox/progress.js +2 -49
- package/dist/lib/crabbox/runtimes.d.ts +0 -94
- package/dist/lib/crabbox/runtimes.js +1 -111
- package/dist/lib/crabbox/setup-copy.d.ts +0 -64
- package/dist/lib/crabbox/setup-copy.js +1 -53
- package/dist/lib/daemon/account-state-daemon-service.d.ts +0 -48
- package/dist/lib/daemon/account-state-daemon-service.js +2 -63
- package/dist/lib/daemon/attention-notify-service.d.ts +0 -12
- package/dist/lib/daemon/attention-notify-service.js +1 -24
- package/dist/lib/daemon/auth-sync-service.d.ts +0 -28
- package/dist/lib/daemon/auth-sync-service.js +0 -56
- package/dist/lib/daemon/catchup-service.d.ts +0 -34
- package/dist/lib/daemon/catchup-service.js +0 -30
- package/dist/lib/daemon/daemon.d.ts +0 -374
- package/dist/lib/daemon/daemon.js +44 -1049
- package/dist/lib/daemon/daemon.test-fixture.d.ts +0 -19
- package/dist/lib/daemon/daemon.test-fixture.js +1 -24
- package/dist/lib/daemon/device-probe-service.d.ts +0 -16
- package/dist/lib/daemon/device-probe-service.js +0 -20
- package/dist/lib/daemon/feed-stream-service.d.ts +0 -15
- package/dist/lib/daemon/feed-stream-service.js +0 -20
- package/dist/lib/daemon/harness-update-service.d.ts +2 -61
- package/dist/lib/daemon/harness-update-service.js +6 -86
- package/dist/lib/daemon/heartbeat-service.d.ts +0 -1
- package/dist/lib/daemon/heartbeat-service.js +0 -1
- package/dist/lib/daemon/leaked-daemons.d.ts +0 -46
- package/dist/lib/daemon/leaked-daemons.js +2 -78
- package/dist/lib/daemon/monitor-engine-service.d.ts +0 -13
- package/dist/lib/daemon/monitor-engine-service.js +3 -15
- package/dist/lib/daemon/runner.d.ts +0 -194
- package/dist/lib/daemon/runner.js +39 -760
- package/dist/lib/daemon/self-heal-service.d.ts +18 -17
- package/dist/lib/daemon/self-heal-service.js +83 -37
- package/dist/lib/daemon/self-update-service.d.ts +1 -131
- package/dist/lib/daemon/self-update-service.js +26 -189
- package/dist/lib/daemon/service.d.ts +0 -73
- package/dist/lib/daemon/service.js +0 -34
- package/dist/lib/daemon/session-index-service.d.ts +0 -12
- package/dist/lib/daemon/session-index-service.js +0 -23
- package/dist/lib/daemon/session-state-service.d.ts +0 -8
- package/dist/lib/daemon/session-state-service.js +0 -8
- package/dist/lib/daemon/session-summarizer-service.d.ts +0 -14
- package/dist/lib/daemon/session-summarizer-service.js +1 -19
- package/dist/lib/daemon/session-title-service.d.ts +0 -25
- package/dist/lib/daemon/session-title-service.js +0 -32
- package/dist/lib/daemon/state-dir-check-service.d.ts +0 -24
- package/dist/lib/daemon/state-dir-check-service.js +0 -29
- package/dist/lib/daemon/supervisor.d.ts +0 -112
- package/dist/lib/daemon/supervisor.js +4 -147
- package/dist/lib/daemon/testdata/process-view-daemon.js +0 -2
- package/dist/lib/daemon/testdata/process-view-start.js +0 -5
- package/dist/lib/daemon/tmux-reap-service.d.ts +0 -1
- package/dist/lib/daemon/tmux-reap-service.js +0 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +0 -23
- package/dist/lib/daemon/usage-sync-service.js +0 -26
- package/dist/lib/daemon/watchdog-service.d.ts +0 -9
- package/dist/lib/daemon/watchdog-service.js +0 -13
- package/dist/lib/daemon/webhook-receiver-service.d.ts +0 -1
- package/dist/lib/daemon/webhook-receiver-service.js +0 -1
- package/dist/lib/daemon-health.d.ts +0 -55
- package/dist/lib/daemon-health.js +4 -77
- package/dist/lib/daemon-services.d.ts +0 -36
- package/dist/lib/daemon-services.js +0 -45
- package/dist/lib/daemon-ticks.d.ts +0 -126
- package/dist/lib/daemon-ticks.js +1 -156
- package/dist/lib/daemon-webhooks.d.ts +0 -57
- package/dist/lib/daemon-webhooks.js +2 -54
- package/dist/lib/deeplink/register.d.ts +0 -15
- package/dist/lib/deeplink/register.js +0 -60
- package/dist/lib/deeplink/url.d.ts +0 -24
- package/dist/lib/deeplink/url.js +1 -33
- package/dist/lib/device-config.d.ts +1 -192
- package/dist/lib/device-config.js +86 -240
- package/dist/lib/devices/config-migration.d.ts +0 -43
- package/dist/lib/devices/config-migration.js +7 -127
- package/dist/lib/devices/connect.d.ts +0 -168
- package/dist/lib/devices/connect.js +6 -254
- package/dist/lib/devices/device-docs.d.ts +0 -24
- package/dist/lib/devices/device-docs.js +0 -46
- package/dist/lib/devices/discovery-policy.d.ts +0 -30
- package/dist/lib/devices/discovery-policy.js +3 -34
- package/dist/lib/devices/doctor-findings.d.ts +0 -109
- package/dist/lib/devices/doctor-findings.js +30 -326
- package/dist/lib/devices/doctor-overview-cache.d.ts +0 -33
- package/dist/lib/devices/doctor-overview-cache.js +0 -81
- package/dist/lib/devices/fleet-divergence.d.ts +0 -89
- package/dist/lib/devices/fleet-divergence.js +1 -60
- package/dist/lib/devices/fleet-inventory.d.ts +0 -27
- package/dist/lib/devices/fleet-inventory.js +0 -38
- package/dist/lib/devices/fleet.d.ts +0 -95
- package/dist/lib/devices/fleet.js +0 -79
- package/dist/lib/devices/harness-inventory.d.ts +0 -75
- package/dist/lib/devices/harness-inventory.js +0 -101
- package/dist/lib/devices/health-report.d.ts +0 -37
- package/dist/lib/devices/health-report.js +0 -73
- package/dist/lib/devices/health.d.ts +0 -71
- package/dist/lib/devices/health.js +2 -82
- package/dist/lib/devices/interactive-host.d.ts +0 -10
- package/dist/lib/devices/interactive-host.js +0 -34
- package/dist/lib/devices/known-hosts.d.ts +0 -45
- package/dist/lib/devices/known-hosts.js +0 -77
- package/dist/lib/devices/pending.d.ts +0 -31
- package/dist/lib/devices/pending.js +7 -67
- package/dist/lib/devices/pool.d.ts +0 -36
- package/dist/lib/devices/pool.js +0 -30
- package/dist/lib/devices/reachability.d.ts +0 -25
- package/dist/lib/devices/reachability.js +0 -14
- package/dist/lib/devices/registry.d.ts +0 -141
- package/dist/lib/devices/registry.js +4 -151
- package/dist/lib/devices/resolve-profile.d.ts +0 -18
- package/dist/lib/devices/resolve-profile.js +0 -18
- package/dist/lib/devices/resolve-target.d.ts +0 -20
- package/dist/lib/devices/resolve-target.js +1 -51
- package/dist/lib/devices/rollout-verify.d.ts +1 -81
- package/dist/lib/devices/rollout-verify.js +0 -77
- package/dist/lib/devices/self-host.d.ts +0 -7
- package/dist/lib/devices/self-host.js +1 -29
- package/dist/lib/devices/ssh-config.d.ts +0 -18
- package/dist/lib/devices/ssh-config.js +0 -9
- package/dist/lib/devices/stats-cache.d.ts +0 -48
- package/dist/lib/devices/stats-cache.js +0 -80
- package/dist/lib/devices/sync.d.ts +0 -97
- package/dist/lib/devices/sync.js +0 -88
- package/dist/lib/devices/tailscale.d.ts +0 -18
- package/dist/lib/devices/tailscale.js +1 -38
- package/dist/lib/devices/terminfo.d.ts +0 -27
- package/dist/lib/devices/terminfo.js +2 -64
- package/dist/lib/devices/worker-pick.d.ts +0 -15
- package/dist/lib/devices/worker-pick.js +0 -48
- package/dist/lib/diff-text.d.ts +0 -18
- package/dist/lib/diff-text.js +0 -15
- package/dist/lib/doctor-diff.d.ts +0 -79
- package/dist/lib/doctor-diff.js +2 -181
- package/dist/lib/drift-sync.d.ts +0 -29
- package/dist/lib/drift-sync.js +0 -40
- package/dist/lib/drift.d.ts +0 -43
- package/dist/lib/drift.js +0 -31
- package/dist/lib/event-families.d.ts +0 -17
- package/dist/lib/event-families.js +0 -33
- package/dist/lib/event-provenance.d.ts +0 -4
- package/dist/lib/event-provenance.js +0 -5
- package/dist/lib/event-stream.d.ts +0 -29
- package/dist/lib/event-stream.js +0 -36
- package/dist/lib/events-ingest.d.ts +0 -27
- package/dist/lib/events-ingest.js +0 -54
- package/dist/lib/exec-account-home.d.ts +0 -24
- package/dist/lib/exec-account-home.js +0 -41
- package/dist/lib/exec-bounded.d.ts +1 -37
- package/dist/lib/exec-bounded.js +10 -46
- package/dist/lib/exec.d.ts +3 -583
- package/dist/lib/exec.js +18 -1025
- package/dist/lib/factory/snapshot.js +1 -15
- package/dist/lib/feed/activity-stream.d.ts +0 -27
- package/dist/lib/feed/activity-stream.js +4 -80
- package/dist/lib/feed/activity.d.ts +1 -243
- package/dist/lib/feed/activity.js +8 -273
- package/dist/lib/feed/answer.d.ts +0 -103
- package/dist/lib/feed/answer.js +0 -267
- package/dist/lib/feed/attention.d.ts +0 -56
- package/dist/lib/feed/attention.js +0 -161
- package/dist/lib/feed/envelope.d.ts +2 -17
- package/dist/lib/feed/envelope.js +0 -14
- package/dist/lib/feed/events.d.ts +0 -118
- package/dist/lib/feed/events.js +13 -213
- package/dist/lib/feed/feed.d.ts +1 -250
- package/dist/lib/feed/feed.js +24 -334
- package/dist/lib/feed/hub-server.d.ts +0 -100
- package/dist/lib/feed/hub-server.js +1 -191
- package/dist/lib/feed/hub.d.ts +0 -53
- package/dist/lib/feed/hub.js +0 -89
- package/dist/lib/feed/pr-status.d.ts +1 -19
- package/dist/lib/feed/pr-status.js +0 -18
- package/dist/lib/feed/tool-activity.d.ts +0 -59
- package/dist/lib/feed/tool-activity.js +1 -119
- package/dist/lib/feed/tools.d.ts +0 -100
- package/dist/lib/feed/tools.js +0 -89
- package/dist/lib/feed/watch.d.ts +0 -33
- package/dist/lib/feed/watch.js +2 -94
- package/dist/lib/feed-broadcast.d.ts +0 -148
- package/dist/lib/feed-broadcast.js +1 -283
- package/dist/lib/feed-outcome.d.ts +0 -50
- package/dist/lib/feed-outcome.js +1 -67
- package/dist/lib/feed-policy.d.ts +0 -6
- package/dist/lib/feed-policy.js +1 -27
- package/dist/lib/feed-post.d.ts +0 -61
- package/dist/lib/feed-post.js +4 -61
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -64
- package/dist/lib/fleet/apply.js +0 -125
- package/dist/lib/fleet/auth-sync.d.ts +0 -48
- package/dist/lib/fleet/auth-sync.js +4 -49
- package/dist/lib/fleet/capture.d.ts +0 -26
- package/dist/lib/fleet/capture.js +1 -36
- package/dist/lib/fleet/manifest.d.ts +0 -38
- package/dist/lib/fleet/manifest.js +0 -40
- package/dist/lib/fleet/types.d.ts +1 -138
- package/dist/lib/fleet/types.js +0 -12
- package/dist/lib/fleet-cache.d.ts +0 -12
- package/dist/lib/fleet-cache.js +0 -24
- package/dist/lib/fleet-shared-state.d.ts +6 -59
- package/dist/lib/fleet-shared-state.js +5 -51
- package/dist/lib/fleet-status.d.ts +0 -27
- package/dist/lib/fleet-status.js +0 -48
- package/dist/lib/format.d.ts +0 -74
- package/dist/lib/format.js +3 -77
- package/dist/lib/friction-heuristics.d.ts +0 -20
- package/dist/lib/friction-heuristics.js +0 -8
- package/dist/lib/fs-atomic.d.ts +0 -51
- package/dist/lib/fs-atomic.js +8 -66
- package/dist/lib/fs-walk.d.ts +0 -13
- package/dist/lib/fs-walk.js +0 -22
- package/dist/lib/fuzzy.d.ts +0 -29
- package/dist/lib/fuzzy.js +0 -31
- package/dist/lib/gemini-settings.js +0 -12
- package/dist/lib/git.d.ts +0 -366
- package/dist/lib/git.js +7 -574
- package/dist/lib/github/ci-failure.d.ts +30 -0
- package/dist/lib/github/ci-failure.js +95 -0
- package/dist/lib/github/gh-overload.d.ts +0 -38
- package/dist/lib/github/gh-overload.js +3 -55
- package/dist/lib/github/pr-mergeable.d.ts +3 -34
- package/dist/lib/github/pr-mergeable.js +2 -42
- package/dist/lib/github/pr-verdict.d.ts +0 -44
- package/dist/lib/github/pr-verdict.js +0 -36
- package/dist/lib/github/project-prs.d.ts +135 -105
- package/dist/lib/github/project-prs.js +530 -170
- package/dist/lib/github/release-drift.d.ts +45 -0
- package/dist/lib/github/release-drift.js +91 -0
- package/dist/lib/github/rest.d.ts +0 -50
- package/dist/lib/github/rest.js +0 -49
- package/dist/lib/github/viewer.d.ts +27 -0
- package/dist/lib/github/viewer.js +101 -0
- package/dist/lib/goose-commands.d.ts +0 -29
- package/dist/lib/goose-commands.js +3 -48
- package/dist/lib/harness/adapter.d.ts +0 -151
- package/dist/lib/harness/adapter.js +0 -41
- package/dist/lib/harness/adapters/claude.d.ts +0 -8
- package/dist/lib/harness/adapters/claude.js +0 -89
- package/dist/lib/harness/adapters/codex.js +0 -18
- package/dist/lib/harness/adapters/copilot.js +0 -3
- package/dist/lib/harness/adapters/cursor.js +0 -16
- package/dist/lib/harness/adapters/droid.js +0 -3
- package/dist/lib/harness/adapters/kimi.js +0 -19
- package/dist/lib/harness/adapters/muse.js +0 -9
- package/dist/lib/harness/adapters/opencode.js +0 -2
- package/dist/lib/harness/exec-config-version.d.ts +0 -2
- package/dist/lib/harness/exec-config-version.js +0 -13
- package/dist/lib/harness/index.js +0 -10
- package/dist/lib/harness-auth-capabilities.d.ts +0 -26
- package/dist/lib/harness-auth-capabilities.js +0 -18
- package/dist/lib/harness-connection-test.d.ts +0 -27
- package/dist/lib/harness-connection-test.js +2 -20
- package/dist/lib/heal.d.ts +0 -45
- package/dist/lib/heal.js +2 -82
- package/dist/lib/help.d.ts +0 -32
- package/dist/lib/help.js +0 -41
- package/dist/lib/helper-download.d.ts +0 -85
- package/dist/lib/helper-download.js +0 -95
- package/dist/lib/helper-versions.d.ts +0 -51
- package/dist/lib/helper-versions.js +1 -45
- package/dist/lib/hooks/cache.d.ts +0 -40
- package/dist/lib/hooks/cache.js +8 -122
- package/dist/lib/hooks/install.d.ts +0 -253
- package/dist/lib/hooks/install.js +49 -822
- package/dist/lib/hooks/match.d.ts +0 -24
- package/dist/lib/hooks/match.js +0 -31
- package/dist/lib/hooks/profile.d.ts +0 -21
- package/dist/lib/hooks/profile.js +0 -28
- package/dist/lib/hosts/credential-transport.d.ts +0 -6
- package/dist/lib/hosts/credential-transport.js +0 -17
- package/dist/lib/hosts/credentials.d.ts +0 -35
- package/dist/lib/hosts/credentials.js +0 -38
- package/dist/lib/hosts/dispatch.d.ts +0 -140
- package/dist/lib/hosts/dispatch.js +0 -176
- package/dist/lib/hosts/logs.d.ts +0 -25
- package/dist/lib/hosts/logs.js +1 -51
- package/dist/lib/hosts/option.d.ts +0 -12
- package/dist/lib/hosts/option.js +0 -12
- package/dist/lib/hosts/passthrough.d.ts +0 -129
- package/dist/lib/hosts/passthrough.js +12 -249
- package/dist/lib/hosts/progress.d.ts +0 -90
- package/dist/lib/hosts/progress.js +5 -115
- package/dist/lib/hosts/providers/devices.d.ts +0 -19
- package/dist/lib/hosts/providers/devices.js +1 -34
- package/dist/lib/hosts/providers/local.d.ts +0 -14
- package/dist/lib/hosts/providers/local.js +0 -22
- package/dist/lib/hosts/ready.d.ts +0 -99
- package/dist/lib/hosts/ready.js +0 -101
- package/dist/lib/hosts/reconcile.d.ts +0 -38
- package/dist/lib/hosts/reconcile.js +1 -50
- package/dist/lib/hosts/reconnect.d.ts +0 -75
- package/dist/lib/hosts/reconnect.js +0 -98
- package/dist/lib/hosts/registry.d.ts +0 -74
- package/dist/lib/hosts/registry.js +0 -110
- package/dist/lib/hosts/remote-cmd.d.ts +1 -228
- package/dist/lib/hosts/remote-cmd.js +19 -294
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +0 -1
- package/dist/lib/hosts/remote-cmd.test-fixture.js +0 -12
- package/dist/lib/hosts/remote-os.d.ts +0 -19
- package/dist/lib/hosts/remote-os.js +0 -22
- package/dist/lib/hosts/remote-session-id.d.ts +0 -22
- package/dist/lib/hosts/remote-session-id.js +0 -24
- package/dist/lib/hosts/routing-flag.d.ts +0 -21
- package/dist/lib/hosts/routing-flag.js +0 -21
- package/dist/lib/hosts/run-target.d.ts +0 -53
- package/dist/lib/hosts/run-target.js +0 -56
- package/dist/lib/hosts/session-index.d.ts +1 -53
- package/dist/lib/hosts/session-index.js +2 -59
- package/dist/lib/hosts/session-marker.d.ts +0 -31
- package/dist/lib/hosts/session-marker.js +0 -32
- package/dist/lib/hosts/ssh-config.d.ts +0 -25
- package/dist/lib/hosts/ssh-config.js +1 -32
- package/dist/lib/hosts/tasks.d.ts +0 -54
- package/dist/lib/hosts/tasks.js +0 -35
- package/dist/lib/hosts/types.d.ts +0 -39
- package/dist/lib/hosts/types.js +0 -22
- package/dist/lib/humans.d.ts +0 -21
- package/dist/lib/humans.js +0 -30
- package/dist/lib/identity/client.d.ts +1 -35
- package/dist/lib/identity/client.js +3 -29
- package/dist/lib/identity/index.d.ts +3 -27
- package/dist/lib/identity/index.js +8 -24
- package/dist/lib/import.d.ts +0 -104
- package/dist/lib/import.js +1 -137
- package/dist/lib/installations/active-check.d.ts +0 -53
- package/dist/lib/installations/active-check.js +0 -49
- package/dist/lib/installations/index.d.ts +0 -9
- package/dist/lib/installations/index.js +0 -9
- package/dist/lib/installations/installation-lock.js +0 -8
- package/dist/lib/installations/launch-gate.d.ts +0 -56
- package/dist/lib/installations/launch-gate.js +0 -83
- package/dist/lib/installations/migrate.d.ts +0 -100
- package/dist/lib/installations/migrate.js +105 -572
- package/dist/lib/installations/native-command.d.ts +0 -1
- package/dist/lib/installations/native-command.js +0 -6
- package/dist/lib/installations/resolve.d.ts +0 -24
- package/dist/lib/installations/resolve.js +0 -24
- package/dist/lib/installations/shims.d.ts +0 -395
- package/dist/lib/installations/shims.js +30 -957
- package/dist/lib/installations/store.d.ts +0 -199
- package/dist/lib/installations/store.js +1 -297
- package/dist/lib/installations/strategies.d.ts +0 -44
- package/dist/lib/installations/strategies.js +0 -87
- package/dist/lib/installations/types.d.ts +1 -67
- package/dist/lib/installations/types.js +0 -6
- package/dist/lib/installations/update-cancellation.d.ts +0 -74
- package/dist/lib/installations/update-cancellation.js +0 -74
- package/dist/lib/installations/update-policy.d.ts +0 -57
- package/dist/lib/installations/update-policy.js +0 -62
- package/dist/lib/installations/update-runtime.d.ts +0 -88
- package/dist/lib/installations/update-runtime.js +1 -127
- package/dist/lib/installations/update.d.ts +0 -53
- package/dist/lib/installations/update.js +0 -95
- package/dist/lib/installations/versions.d.ts +0 -310
- package/dist/lib/installations/versions.js +14 -837
- package/dist/lib/isolation-boundary-report.d.ts +0 -7
- package/dist/lib/isolation-boundary-report.js +0 -7
- package/dist/lib/launch-identity.d.ts +0 -8
- package/dist/lib/launch-identity.js +0 -8
- package/dist/lib/linear-autoclose.d.ts +0 -25
- package/dist/lib/linear-autoclose.js +0 -19
- package/dist/lib/linear-cache.d.ts +0 -57
- package/dist/lib/linear-cache.js +1 -81
- package/dist/lib/linear-project-counts.d.ts +0 -83
- package/dist/lib/linear-project-counts.js +2 -64
- package/dist/lib/linear-projects.d.ts +0 -62
- package/dist/lib/linear-projects.js +0 -85
- package/dist/lib/linear-rate-limit.d.ts +0 -21
- package/dist/lib/linear-rate-limit.js +1 -93
- package/dist/lib/linux-userns.d.ts +1 -42
- package/dist/lib/linux-userns.js +0 -47
- package/dist/lib/lock-compromise.d.ts +0 -7
- package/dist/lib/lock-compromise.js +0 -7
- package/dist/lib/log-follow.d.ts +0 -2
- package/dist/lib/log-follow.js +5 -15
- package/dist/lib/loop.d.ts +0 -106
- package/dist/lib/loop.js +0 -135
- package/dist/lib/machine-id.d.ts +0 -19
- package/dist/lib/machine-id.js +0 -19
- package/dist/lib/mailbox-gc.d.ts +0 -7
- package/dist/lib/mailbox-gc.js +0 -25
- package/dist/lib/mailbox-target.d.ts +0 -31
- package/dist/lib/mailbox-target.js +0 -27
- package/dist/lib/mailbox.d.ts +0 -77
- package/dist/lib/mailbox.js +5 -105
- package/dist/lib/manifest.d.ts +0 -4
- package/dist/lib/manifest.js +0 -36
- package/dist/lib/markdown.d.ts +0 -3
- package/dist/lib/markdown.js +0 -9
- package/dist/lib/mcp-registry.d.ts +1 -50
- package/dist/lib/mcp-registry.js +0 -64
- package/dist/lib/mcp.d.ts +0 -115
- package/dist/lib/mcp.js +3 -199
- package/dist/lib/memory-cache.d.ts +0 -11
- package/dist/lib/memory-cache.js +0 -9
- package/dist/lib/memory.d.ts +0 -52
- package/dist/lib/memory.js +12 -74
- package/dist/lib/menubar/download-menubar.d.ts +0 -35
- package/dist/lib/menubar/download-menubar.js +0 -38
- package/dist/lib/menubar/install-menubar.d.ts +0 -405
- package/dist/lib/menubar/install-menubar.js +25 -667
- package/dist/lib/menubar/migrate-prefs.d.ts +0 -47
- package/dist/lib/menubar/migrate-prefs.js +1 -70
- package/dist/lib/menubar/notify-desktop.d.ts +0 -82
- package/dist/lib/menubar/notify-desktop.js +0 -68
- package/dist/lib/menubar/resolve-version.d.ts +0 -41
- package/dist/lib/menubar/resolve-version.js +2 -44
- package/dist/lib/menubar/snapshot.d.ts +13 -66
- package/dist/lib/menubar/snapshot.js +45 -39
- package/dist/lib/merged-resources.d.ts +0 -10
- package/dist/lib/merged-resources.js +0 -10
- package/dist/lib/migrate-fold.d.ts +0 -31
- package/dist/lib/migrate-fold.js +6 -38
- package/dist/lib/model-tier-overrides.d.ts +0 -30
- package/dist/lib/model-tier-overrides.js +0 -14
- package/dist/lib/model-tiers.d.ts +0 -43
- package/dist/lib/model-tiers.js +5 -78
- package/dist/lib/models.d.ts +0 -145
- package/dist/lib/models.js +3 -333
- package/dist/lib/monitors/config.d.ts +0 -187
- package/dist/lib/monitors/config.js +4 -101
- package/dist/lib/monitors/dispatch.d.ts +0 -22
- package/dist/lib/monitors/dispatch.js +0 -35
- package/dist/lib/monitors/engine.d.ts +1 -53
- package/dist/lib/monitors/engine.js +17 -106
- package/dist/lib/monitors/fingerprint.d.ts +0 -43
- package/dist/lib/monitors/fingerprint.js +0 -57
- package/dist/lib/monitors/pid-watch.d.ts +0 -31
- package/dist/lib/monitors/pid-watch.js +0 -31
- package/dist/lib/monitors/remote.d.ts +0 -52
- package/dist/lib/monitors/remote.js +0 -42
- package/dist/lib/monitors/sources/command.d.ts +2 -9
- package/dist/lib/monitors/sources/command.js +13 -34
- package/dist/lib/monitors/sources/device.d.ts +0 -10
- package/dist/lib/monitors/sources/device.js +0 -14
- package/dist/lib/monitors/sources/failure.d.ts +0 -27
- package/dist/lib/monitors/sources/failure.js +0 -27
- package/dist/lib/monitors/sources/file.d.ts +0 -10
- package/dist/lib/monitors/sources/file.js +0 -11
- package/dist/lib/monitors/sources/http.d.ts +0 -7
- package/dist/lib/monitors/sources/http.js +0 -9
- package/dist/lib/monitors/sources/index.d.ts +0 -9
- package/dist/lib/monitors/sources/index.js +0 -9
- package/dist/lib/monitors/sources/poll.d.ts +0 -8
- package/dist/lib/monitors/sources/poll.js +0 -8
- package/dist/lib/monitors/sources/types.d.ts +0 -18
- package/dist/lib/monitors/sources/types.js +0 -8
- package/dist/lib/monitors/sources/webhook.d.ts +0 -7
- package/dist/lib/monitors/sources/webhook.js +0 -7
- package/dist/lib/monitors/sources/ws.d.ts +0 -10
- package/dist/lib/monitors/sources/ws.js +3 -13
- package/dist/lib/monitors/state.d.ts +0 -132
- package/dist/lib/monitors/state.js +2 -86
- package/dist/lib/native-accounts.d.ts +0 -32
- package/dist/lib/native-accounts.js +0 -17
- package/dist/lib/net-close.d.ts +0 -9
- package/dist/lib/net-close.js +0 -5
- package/dist/lib/notify.d.ts +0 -47
- package/dist/lib/notify.js +0 -30
- package/dist/lib/onepassword.d.ts +0 -14
- package/dist/lib/onepassword.js +0 -12
- package/dist/lib/open-url.d.ts +0 -38
- package/dist/lib/open-url.js +1 -69
- package/dist/lib/openclaw-keychain.js +2 -7
- package/dist/lib/operator.d.ts +0 -9
- package/dist/lib/operator.js +0 -34
- package/dist/lib/origin-machine.d.ts +0 -16
- package/dist/lib/origin-machine.js +0 -16
- package/dist/lib/output/git-output.d.ts +0 -31
- package/dist/lib/output/git-output.js +4 -43
- package/dist/lib/overdue.d.ts +0 -35
- package/dist/lib/overdue.js +0 -60
- package/dist/lib/owner-message.d.ts +0 -20
- package/dist/lib/owner-message.js +1 -40
- package/dist/lib/packages/output-home.d.ts +0 -28
- package/dist/lib/packages/output-home.js +0 -114
- package/dist/lib/paths.d.ts +0 -26
- package/dist/lib/paths.js +1 -27
- package/dist/lib/percentile.d.ts +0 -11
- package/dist/lib/percentile.js +0 -11
- package/dist/lib/perf/db.d.ts +0 -16
- package/dist/lib/perf/db.js +3 -32
- package/dist/lib/perf/spool.d.ts +0 -12
- package/dist/lib/perf/spool.js +0 -13
- package/dist/lib/perf/types.d.ts +0 -26
- package/dist/lib/perf/types.js +0 -1
- package/dist/lib/permissions-registry.d.ts +0 -48
- package/dist/lib/permissions-registry.js +0 -108
- package/dist/lib/permissions.d.ts +0 -215
- package/dist/lib/permissions.js +4 -407
- package/dist/lib/picker.d.ts +0 -124
- package/dist/lib/picker.js +0 -140
- package/dist/lib/placement.d.ts +0 -57
- package/dist/lib/placement.js +0 -47
- package/dist/lib/platform/exec.d.ts +0 -73
- package/dist/lib/platform/exec.js +0 -80
- package/dist/lib/platform/index.d.ts +0 -14
- package/dist/lib/platform/index.js +0 -14
- package/dist/lib/platform/ipc.d.ts +0 -10
- package/dist/lib/platform/ipc.js +0 -13
- package/dist/lib/platform/links.d.ts +0 -14
- package/dist/lib/platform/links.js +0 -25
- package/dist/lib/platform/paths.d.ts +0 -48
- package/dist/lib/platform/paths.js +0 -52
- package/dist/lib/platform/posixpath.d.ts +0 -18
- package/dist/lib/platform/posixpath.js +0 -62
- package/dist/lib/platform/process.d.ts +0 -67
- package/dist/lib/platform/process.js +5 -99
- package/dist/lib/platform/winpath.d.ts +0 -50
- package/dist/lib/platform/winpath.js +0 -81
- package/dist/lib/plugins/plugin-marketplace.d.ts +0 -165
- package/dist/lib/plugins/plugin-marketplace.js +10 -238
- package/dist/lib/plugins/plugins.d.ts +0 -238
- package/dist/lib/plugins/plugins.js +20 -454
- package/dist/lib/plugins/skills.d.ts +0 -86
- package/dist/lib/plugins/skills.js +1 -139
- package/dist/lib/pr-land-detach.d.ts +0 -17
- package/dist/lib/pr-land-detach.js +0 -30
- package/dist/lib/pricing/cost.d.ts +0 -29
- package/dist/lib/pricing/cost.js +0 -38
- package/dist/lib/pricing/index.d.ts +0 -6
- package/dist/lib/pricing/index.js +0 -6
- package/dist/lib/pricing/table.d.ts +0 -8
- package/dist/lib/pricing/table.js +3 -56
- package/dist/lib/probe.d.ts +0 -5
- package/dist/lib/probe.js +0 -40
- package/dist/lib/profiles-presets.d.ts +0 -20
- package/dist/lib/profiles-presets.js +1 -36
- package/dist/lib/profiles.d.ts +0 -185
- package/dist/lib/profiles.js +1 -158
- package/dist/lib/project-doctor.d.ts +0 -29
- package/dist/lib/project-doctor.js +0 -26
- package/dist/lib/project-focus.d.ts +0 -41
- package/dist/lib/project-focus.js +0 -49
- package/dist/lib/project-import.d.ts +0 -41
- package/dist/lib/project-import.js +0 -36
- package/dist/lib/project-key.d.ts +0 -65
- package/dist/lib/project-key.js +0 -70
- package/dist/lib/project-launch.d.ts +0 -49
- package/dist/lib/project-launch.js +2 -91
- package/dist/lib/project-probe.d.ts +0 -86
- package/dist/lib/project-probe.js +1 -88
- package/dist/lib/project-pull.d.ts +0 -96
- package/dist/lib/project-pull.js +0 -122
- package/dist/lib/project-resources.d.ts +0 -44
- package/dist/lib/project-resources.js +7 -171
- package/dist/lib/project-root.d.ts +0 -95
- package/dist/lib/project-root.js +0 -101
- package/dist/lib/project-schedule.d.ts +0 -43
- package/dist/lib/project-schedule.js +0 -52
- package/dist/lib/project-status.d.ts +0 -108
- package/dist/lib/project-status.js +0 -117
- package/dist/lib/projects.d.ts +0 -197
- package/dist/lib/projects.js +1 -213
- package/dist/lib/pwsh.d.ts +0 -41
- package/dist/lib/pwsh.js +0 -51
- package/dist/lib/quick-todo.d.ts +84 -0
- package/dist/lib/quick-todo.js +243 -0
- package/dist/lib/reconcile-and-repair.d.ts +0 -78
- package/dist/lib/reconcile-and-repair.js +3 -66
- package/dist/lib/redact.d.ts +0 -29
- package/dist/lib/redact.js +0 -54
- package/dist/lib/refresh-coordinator.d.ts +0 -15
- package/dist/lib/refresh-coordinator.js +0 -10
- package/dist/lib/refresh.d.ts +0 -39
- package/dist/lib/refresh.js +0 -45
- package/dist/lib/registry.d.ts +0 -65
- package/dist/lib/registry.js +0 -127
- package/dist/lib/reminders.d.ts +0 -21
- package/dist/lib/reminders.js +0 -30
- package/dist/lib/remote-agents-json.d.ts +0 -44
- package/dist/lib/remote-agents-json.js +1 -44
- package/dist/lib/reserved-stores.d.ts +0 -28
- package/dist/lib/reserved-stores.js +2 -28
- package/dist/lib/resource-aliases.d.ts +0 -12
- package/dist/lib/resource-aliases.js +0 -12
- package/dist/lib/resource-content-diff.d.ts +0 -28
- package/dist/lib/resource-content-diff.js +7 -34
- package/dist/lib/resource-inventory.d.ts +0 -51
- package/dist/lib/resource-inventory.js +0 -45
- package/dist/lib/resource-patterns.d.ts +0 -32
- package/dist/lib/resource-patterns.js +0 -34
- package/dist/lib/resource-profiles.d.ts +0 -7
- package/dist/lib/resource-profiles.js +0 -11
- package/dist/lib/resources/types.d.ts +0 -50
- package/dist/lib/resources/types.js +0 -7
- package/dist/lib/resources/workflows.d.ts +0 -7
- package/dist/lib/resources/workflows.js +0 -13
- package/dist/lib/resources.d.ts +0 -65
- package/dist/lib/resources.js +0 -78
- package/dist/lib/routers.d.ts +0 -67
- package/dist/lib/routers.js +0 -60
- package/dist/lib/routine-activation.d.ts +0 -23
- package/dist/lib/routine-activation.js +0 -24
- package/dist/lib/routine-context.d.ts +1 -91
- package/dist/lib/routine-context.js +0 -107
- package/dist/lib/routine-notify-owner.d.ts +0 -79
- package/dist/lib/routine-notify-owner.js +1 -103
- package/dist/lib/routine-notify.d.ts +0 -70
- package/dist/lib/routine-notify.js +1 -75
- package/dist/lib/routine-process-cleanup.d.ts +0 -1
- package/dist/lib/routine-process-cleanup.js +1 -4
- package/dist/lib/routine-readiness.d.ts +0 -63
- package/dist/lib/routine-readiness.js +4 -86
- package/dist/lib/routines-format.d.ts +0 -40
- package/dist/lib/routines-format.js +0 -67
- package/dist/lib/routines-placement.d.ts +0 -33
- package/dist/lib/routines-placement.js +0 -40
- package/dist/lib/routines-project.d.ts +0 -57
- package/dist/lib/routines-project.js +6 -80
- package/dist/lib/rules/compile.d.ts +0 -66
- package/dist/lib/rules/compile.js +6 -118
- package/dist/lib/rules/compose.d.ts +0 -56
- package/dist/lib/rules/compose.js +2 -83
- package/dist/lib/rules/rules.d.ts +0 -23
- package/dist/lib/rules/rules.js +0 -35
- package/dist/lib/rules/run-sync.d.ts +0 -16
- package/dist/lib/rules/run-sync.js +1 -44
- package/dist/lib/run-config.d.ts +0 -7
- package/dist/lib/run-config.js +0 -8
- package/dist/lib/run-defaults.d.ts +0 -14
- package/dist/lib/run-defaults.js +0 -14
- package/dist/lib/run-notify.d.ts +0 -18
- package/dist/lib/run-notify.js +0 -36
- package/dist/lib/run-trace-sync.d.ts +0 -21
- package/dist/lib/run-trace-sync.js +2 -66
- package/dist/lib/rush-session.d.ts +0 -26
- package/dist/lib/rush-session.js +0 -28
- package/dist/lib/sandbox.d.ts +0 -45
- package/dist/lib/sandbox.js +5 -93
- package/dist/lib/scheduler.d.ts +0 -28
- package/dist/lib/scheduler.js +0 -45
- package/dist/lib/scheduling/routines.d.ts +0 -652
- package/dist/lib/scheduling/routines.js +8 -475
- package/dist/lib/secrets-cli.d.ts +3 -8
- package/dist/lib/secrets-cli.js +1 -19
- package/dist/lib/secrets-client.d.ts +0 -117
- package/dist/lib/secrets-client.js +4 -275
- package/dist/lib/secrets-policy.d.ts +0 -142
- package/dist/lib/secrets-policy.js +4 -237
- package/dist/lib/secrets-types.d.ts +0 -87
- package/dist/lib/secrets-types.js +0 -13
- package/dist/lib/self-heal/checks/hook-manifest.js +0 -25
- package/dist/lib/self-heal/checks/hook-runtime.js +0 -5
- package/dist/lib/self-heal/checks/install-staging.d.ts +0 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -28
- package/dist/lib/self-heal/checks/menubar-helper.js +0 -5
- package/dist/lib/self-heal/checks/path.js +0 -9
- package/dist/lib/self-heal/checks/resources.js +0 -5
- package/dist/lib/self-heal/checks/shadowing.js +2 -16
- package/dist/lib/self-heal/checks/shims.js +0 -14
- package/dist/lib/self-heal/child.d.ts +12 -0
- package/dist/lib/self-heal/child.js +23 -0
- package/dist/lib/self-heal/registry.d.ts +0 -9
- package/dist/lib/self-heal/registry.js +0 -16
- package/dist/lib/self-heal/types.d.ts +0 -12
- package/dist/lib/self-heal/types.js +0 -15
- package/dist/lib/self-update.d.ts +0 -312
- package/dist/lib/self-update.js +9 -360
- package/dist/lib/service-manifest.d.ts +0 -39
- package/dist/lib/service-manifest.js +0 -72
- package/dist/lib/session/active.d.ts +13 -869
- package/dist/lib/session/active.js +20 -976
- package/dist/lib/session/actor-sidecar.d.ts +1 -32
- package/dist/lib/session/actor-sidecar.js +1 -41
- package/dist/lib/session/bookmarks.d.ts +0 -33
- package/dist/lib/session/bookmarks.js +0 -37
- package/dist/lib/session/bundle.d.ts +0 -86
- package/dist/lib/session/bundle.js +0 -54
- package/dist/lib/session/claude-accounts.d.ts +0 -40
- package/dist/lib/session/claude-accounts.js +0 -49
- package/dist/lib/session/cloud.d.ts +1 -23
- package/dist/lib/session/cloud.js +0 -26
- package/dist/lib/session/db.d.ts +5 -658
- package/dist/lib/session/db.js +22 -1443
- package/dist/lib/session/detached.d.ts +0 -21
- package/dist/lib/session/detached.js +0 -29
- package/dist/lib/session/discover.d.ts +3 -420
- package/dist/lib/session/discover.js +30 -1123
- package/dist/lib/session/fork.d.ts +1 -41
- package/dist/lib/session/fork.js +0 -19
- package/dist/lib/session/ghostty-tabs.d.ts +0 -24
- package/dist/lib/session/ghostty-tabs.js +0 -37
- package/dist/lib/session/glance-files.d.ts +19 -0
- package/dist/lib/session/glance-files.js +258 -0
- package/dist/lib/session/hook-sessions.d.ts +0 -33
- package/dist/lib/session/hook-sessions.js +4 -99
- package/dist/lib/session/host-link.d.ts +1 -94
- package/dist/lib/session/host-link.js +1 -81
- package/dist/lib/session/inject-target.d.ts +8 -0
- package/dist/lib/session/inject-target.js +32 -0
- package/dist/lib/session/inject.d.ts +0 -15
- package/dist/lib/session/inject.js +0 -15
- package/dist/lib/session/live-metadata.d.ts +1 -34
- package/dist/lib/session/live-metadata.js +1 -73
- package/dist/lib/session/local-tmux-attach.d.ts +0 -37
- package/dist/lib/session/local-tmux-attach.js +1 -76
- package/dist/lib/session/migrate-targets.d.ts +0 -46
- package/dist/lib/session/migrate-targets.js +0 -24
- package/dist/lib/session/migrations.d.ts +0 -12
- package/dist/lib/session/migrations.js +1 -20
- package/dist/lib/session/mirror.d.ts +0 -32
- package/dist/lib/session/mirror.js +0 -77
- package/dist/lib/session/origin-machine.js +0 -3
- package/dist/lib/session/pid-registry.d.ts +0 -80
- package/dist/lib/session/pid-registry.js +2 -81
- package/dist/lib/session/presence.d.ts +0 -39
- package/dist/lib/session/presence.js +2 -52
- package/dist/lib/session/process-view.d.ts +0 -11
- package/dist/lib/session/process-view.js +0 -25
- package/dist/lib/session/projection.d.ts +0 -3
- package/dist/lib/session/projection.js +0 -10
- package/dist/lib/session/provenance.d.ts +1 -37
- package/dist/lib/session/provenance.js +0 -69
- package/dist/lib/session/recovery.d.ts +1 -40
- package/dist/lib/session/recovery.js +2 -80
- package/dist/lib/session/relative-time.js +0 -3
- package/dist/lib/session/remote/peer-stream.d.ts +0 -42
- package/dist/lib/session/remote/peer-stream.js +0 -64
- package/dist/lib/session/remote/remote-bundle.d.ts +0 -6
- package/dist/lib/session/remote/remote-bundle.js +0 -21
- package/dist/lib/session/remote/remote-list.d.ts +1 -110
- package/dist/lib/session/remote/remote-list.js +5 -139
- package/dist/lib/session/remote/remote.d.ts +0 -98
- package/dist/lib/session/remote/remote.js +3 -119
- package/dist/lib/session/remote/watch.d.ts +1 -34
- package/dist/lib/session/remote/watch.js +12 -72
- package/dist/lib/session/remote-active.d.ts +0 -35
- package/dist/lib/session/remote-active.js +0 -48
- package/dist/lib/session/remote-bundle.js +0 -2
- package/dist/lib/session/remote-list.js +0 -2
- package/dist/lib/session/remote-preview-cache.d.ts +0 -7
- package/dist/lib/session/remote-preview-cache.js +1 -76
- package/dist/lib/session/remote.js +0 -2
- package/dist/lib/session/resume-command.d.ts +0 -6
- package/dist/lib/session/resume-command.js +0 -6
- package/dist/lib/session/resume-owner.d.ts +1 -52
- package/dist/lib/session/resume-owner.js +0 -56
- package/dist/lib/session/run-names.d.ts +0 -24
- package/dist/lib/session/run-names.js +0 -26
- package/dist/lib/session/session-cache.d.ts +2 -146
- package/dist/lib/session/session-cache.js +26 -203
- package/dist/lib/session/short-id.js +0 -3
- package/dist/lib/session/sync/agents.d.ts +0 -68
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +0 -39
- package/dist/lib/session/sync/backend.js +0 -45
- package/dist/lib/session/sync/config.d.ts +0 -27
- package/dist/lib/session/sync/config.js +0 -56
- package/dist/lib/session/sync/managed-config.d.ts +0 -17
- package/dist/lib/session/sync/managed-config.js +0 -17
- package/dist/lib/session/sync/managed-key.d.ts +0 -38
- package/dist/lib/session/sync/managed-key.js +1 -42
- package/dist/lib/session/sync/net-client.d.ts +0 -36
- package/dist/lib/session/sync/net-client.js +0 -30
- package/dist/lib/session/sync/provision.d.ts +0 -2
- package/dist/lib/session/sync/provision.js +0 -13
- package/dist/lib/session/sync/r2.d.ts +0 -20
- package/dist/lib/session/sync/r2.js +0 -20
- package/dist/lib/session/sync/transcript-crypto.d.ts +0 -37
- package/dist/lib/session/sync/transcript-crypto.js +5 -37
- package/dist/lib/session/sync/worker-template.d.ts +0 -5
- package/dist/lib/session/sync/worker-template.js +0 -40
- package/dist/lib/session/testdata/pid-registry-namespace.js +0 -2
- package/dist/lib/session/testdata/process-view-private.js +0 -1
- package/dist/lib/session/throughput.d.ts +0 -24
- package/dist/lib/session/throughput.js +1 -25
- package/dist/lib/session/timeline-pass.d.ts +1 -63
- package/dist/lib/session/timeline-pass.js +161 -148
- package/dist/lib/session/title.d.ts +0 -182
- package/dist/lib/session/title.js +0 -139
- package/dist/lib/session/tool-index.d.ts +2 -21
- package/dist/lib/session/tool-index.js +3 -75
- package/dist/lib/session/tool-store.d.ts +2 -48
- package/dist/lib/session/tool-store.js +1 -33
- package/dist/lib/session/viewing-in.d.ts +0 -67
- package/dist/lib/session/viewing-in.js +1 -71
- package/dist/lib/session/watch.js +0 -2
- package/dist/lib/session/width.js +0 -3
- package/dist/lib/sessions-client.d.ts +0 -46
- package/dist/lib/sessions-client.js +36 -113
- package/dist/lib/settings-manifest.d.ts +1 -17
- package/dist/lib/settings-manifest.js +4 -57
- package/dist/lib/setup-tool-install.d.ts +0 -1
- package/dist/lib/setup-tool-install.js +2 -7
- package/dist/lib/setup-tool-status.d.ts +0 -3
- package/dist/lib/setup-tool-status.js +4 -14
- package/dist/lib/sha256-asset.d.ts +0 -20
- package/dist/lib/sha256-asset.js +0 -20
- package/dist/lib/share-runtime.d.ts +0 -10
- package/dist/lib/share-runtime.js +1 -27
- package/dist/lib/shim-heal.d.ts +0 -15
- package/dist/lib/shim-heal.js +3 -29
- package/dist/lib/signin-badge.d.ts +0 -72
- package/dist/lib/signin-badge.js +0 -86
- package/dist/lib/sink-format.d.ts +0 -32
- package/dist/lib/sink-format.js +0 -14
- package/dist/lib/smart-launch.d.ts +0 -75
- package/dist/lib/smart-launch.js +1 -83
- package/dist/lib/snapshot.d.ts +0 -46
- package/dist/lib/snapshot.js +5 -31
- package/dist/lib/spinner.d.ts +0 -37
- package/dist/lib/spinner.js +0 -37
- package/dist/lib/sqlite.d.ts +0 -13
- package/dist/lib/sqlite.js +3 -71
- package/dist/lib/ssh-exec.d.ts +0 -209
- package/dist/lib/ssh-exec.js +11 -248
- package/dist/lib/ssh-tunnel.d.ts +0 -43
- package/dist/lib/ssh-tunnel.js +2 -48
- package/dist/lib/staleness/checkers/commands.d.ts +0 -4
- package/dist/lib/staleness/checkers/commands.js +0 -4
- package/dist/lib/staleness/checkers/hooks.d.ts +0 -10
- package/dist/lib/staleness/checkers/hooks.js +0 -15
- package/dist/lib/staleness/checkers/mcp.d.ts +0 -9
- package/dist/lib/staleness/checkers/mcp.js +0 -9
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -12
- package/dist/lib/staleness/checkers/permissions.js +0 -13
- package/dist/lib/staleness/checkers/plugins.d.ts +0 -8
- package/dist/lib/staleness/checkers/plugins.js +0 -8
- package/dist/lib/staleness/checkers/rules.d.ts +0 -15
- package/dist/lib/staleness/checkers/rules.js +0 -26
- package/dist/lib/staleness/checkers/skills.d.ts +0 -4
- package/dist/lib/staleness/checkers/skills.js +0 -4
- package/dist/lib/staleness/checkers/subagents.d.ts +0 -9
- package/dist/lib/staleness/checkers/subagents.js +0 -9
- package/dist/lib/staleness/checkers/types.d.ts +0 -34
- package/dist/lib/staleness/checkers/types.js +0 -19
- package/dist/lib/staleness/checkers/workflows.d.ts +0 -7
- package/dist/lib/staleness/checkers/workflows.js +0 -7
- package/dist/lib/staleness/detectors/commands.js +0 -17
- package/dist/lib/staleness/detectors/hooks.js +1 -6
- package/dist/lib/staleness/detectors/mcp.js +0 -4
- package/dist/lib/staleness/detectors/permissions.js +10 -23
- package/dist/lib/staleness/detectors/rules.js +0 -6
- package/dist/lib/staleness/detectors/skills.d.ts +0 -1
- package/dist/lib/staleness/detectors/skills.js +1 -12
- package/dist/lib/staleness/detectors/types.d.ts +0 -10
- package/dist/lib/staleness/fingerprint.d.ts +0 -19
- package/dist/lib/staleness/fingerprint.js +0 -35
- package/dist/lib/staleness/index.d.ts +0 -28
- package/dist/lib/staleness/index.js +1 -45
- package/dist/lib/staleness/layers.d.ts +0 -23
- package/dist/lib/staleness/layers.js +0 -34
- package/dist/lib/staleness/prune.d.ts +0 -71
- package/dist/lib/staleness/prune.js +2 -27
- package/dist/lib/staleness/registry.d.ts +0 -10
- package/dist/lib/staleness/registry.js +3 -33
- package/dist/lib/staleness/types.d.ts +0 -36
- package/dist/lib/staleness/types.js +0 -5
- package/dist/lib/staleness/writers/commands.js +1 -48
- package/dist/lib/staleness/writers/hooks.js +1 -18
- package/dist/lib/staleness/writers/kinds.d.ts +0 -12
- package/dist/lib/staleness/writers/kinds.js +0 -1
- package/dist/lib/staleness/writers/lazy-map.d.ts +0 -11
- package/dist/lib/staleness/writers/mcp.js +0 -13
- package/dist/lib/staleness/writers/plugins.js +0 -4
- package/dist/lib/staleness/writers/rules.d.ts +0 -1
- package/dist/lib/staleness/writers/rules.js +1 -19
- package/dist/lib/staleness/writers/skills.js +3 -14
- package/dist/lib/staleness/writers/sources.d.ts +0 -11
- package/dist/lib/staleness/writers/sources.js +0 -32
- package/dist/lib/staleness/writers/subagents.js +0 -16
- package/dist/lib/staleness/writers/types.d.ts +0 -58
- package/dist/lib/staleness/writers/workflows.js +1 -1
- package/dist/lib/standalone-tools.d.ts +24 -0
- package/dist/lib/standalone-tools.js +58 -0
- package/dist/lib/star-nudge.d.ts +0 -32
- package/dist/lib/star-nudge.js +2 -36
- package/dist/lib/startup/command-registry.d.ts +0 -45
- package/dist/lib/startup/command-registry.js +1 -46
- package/dist/lib/startup/dev-build.d.ts +0 -9
- package/dist/lib/startup/dev-build.js +1 -42
- package/dist/lib/startup/root-command.d.ts +0 -19
- package/dist/lib/startup/root-command.js +0 -19
- package/dist/lib/startup/spellcheck.d.ts +0 -13
- package/dist/lib/startup/spellcheck.js +0 -13
- package/dist/lib/state.d.ts +0 -376
- package/dist/lib/state.js +19 -737
- package/dist/lib/storage/selection.d.ts +0 -40
- package/dist/lib/storage/selection.js +0 -29
- package/dist/lib/subagents-registry.d.ts +0 -56
- package/dist/lib/subagents-registry.js +0 -99
- package/dist/lib/subagents.d.ts +0 -128
- package/dist/lib/subagents.js +1 -158
- package/dist/lib/summarizer/config.d.ts +0 -37
- package/dist/lib/summarizer/config.js +0 -37
- package/dist/lib/summarizer/pass.d.ts +0 -20
- package/dist/lib/summarizer/pass.js +1 -34
- package/dist/lib/summarizer/summarize.d.ts +1 -49
- package/dist/lib/summarizer/summarize.js +0 -35
- package/dist/lib/sync-passphrase.d.ts +0 -16
- package/dist/lib/sync-passphrase.js +1 -18
- package/dist/lib/sync-status.d.ts +0 -72
- package/dist/lib/sync-status.js +0 -55
- package/dist/lib/sync-umbrella.d.ts +0 -54
- package/dist/lib/sync-umbrella.js +0 -48
- package/dist/lib/system-run-sync.d.ts +0 -5
- package/dist/lib/system-run-sync.js +1 -31
- package/dist/lib/teams/agents.d.ts +1 -444
- package/dist/lib/teams/agents.js +11 -871
- package/dist/lib/teams/api.d.ts +2 -52
- package/dist/lib/teams/api.js +4 -63
- package/dist/lib/teams/debug.d.ts +0 -6
- package/dist/lib/teams/debug.js +0 -6
- package/dist/lib/teams/delivery.d.ts +0 -41
- package/dist/lib/teams/delivery.js +0 -32
- package/dist/lib/teams/file_ops.d.ts +0 -11
- package/dist/lib/teams/file_ops.js +0 -11
- package/dist/lib/teams/forEach.d.ts +0 -76
- package/dist/lib/teams/forEach.js +1 -77
- package/dist/lib/teams/index.d.ts +1 -7
- package/dist/lib/teams/index.js +1 -7
- package/dist/lib/teams/parsers.d.ts +0 -4
- package/dist/lib/teams/parsers.js +0 -81
- package/dist/lib/teams/persistence.d.ts +0 -2
- package/dist/lib/teams/persistence.js +0 -12
- package/dist/lib/teams/placement-probe.d.ts +0 -12
- package/dist/lib/teams/placement-probe.js +1 -51
- package/dist/lib/teams/pr-watch.d.ts +0 -107
- package/dist/lib/teams/pr-watch.js +1 -107
- package/dist/lib/teams/registry.d.ts +0 -36
- package/dist/lib/teams/registry.js +0 -47
- package/dist/lib/teams/remoteWorktree.d.ts +0 -50
- package/dist/lib/teams/remoteWorktree.js +1 -96
- package/dist/lib/teams/scheduler.d.ts +0 -111
- package/dist/lib/teams/scheduler.js +2 -125
- package/dist/lib/teams/summarizer.d.ts +0 -22
- package/dist/lib/teams/summarizer.js +6 -50
- package/dist/lib/teams/supervisor.d.ts +0 -38
- package/dist/lib/teams/supervisor.js +0 -21
- package/dist/lib/teams/worktree.d.ts +0 -95
- package/dist/lib/teams/worktree.js +3 -110
- package/dist/lib/template.d.ts +0 -21
- package/dist/lib/template.js +0 -23
- package/dist/lib/term-client.d.ts +0 -26
- package/dist/lib/term-client.js +0 -48
- package/dist/lib/term-driver.d.ts +0 -5
- package/dist/lib/term-driver.js +0 -8
- package/dist/lib/terminal/backends/ghostty.d.ts +0 -2
- package/dist/lib/terminal/backends/ghostty.js +0 -12
- package/dist/lib/terminal/backends/index.d.ts +0 -17
- package/dist/lib/terminal/backends/index.js +0 -15
- package/dist/lib/terminal/backends/iterm.d.ts +0 -2
- package/dist/lib/terminal/backends/iterm.js +0 -10
- package/dist/lib/terminal/backends/terminal-app.d.ts +0 -10
- package/dist/lib/terminal/backends/terminal-app.js +0 -30
- package/dist/lib/terminal/backends/tmux.d.ts +0 -10
- package/dist/lib/terminal/backends/tmux.js +0 -2
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +0 -25
- package/dist/lib/terminal/backends/vscodium-agent.js +0 -36
- package/dist/lib/terminal/engine.d.ts +0 -17
- package/dist/lib/terminal/engine.js +0 -10
- package/dist/lib/terminal/index.d.ts +0 -8
- package/dist/lib/terminal/inject.d.ts +1 -173
- package/dist/lib/terminal/inject.js +0 -146
- package/dist/lib/terminal/policy.d.ts +0 -8
- package/dist/lib/terminal/policy.js +0 -1
- package/dist/lib/terminal/preferred.d.ts +0 -66
- package/dist/lib/terminal/preferred.js +0 -30
- package/dist/lib/terminal/quote.d.ts +0 -8
- package/dist/lib/terminal/quote.js +0 -8
- package/dist/lib/terminal/resolve.d.ts +0 -46
- package/dist/lib/terminal/resolve.js +0 -30
- package/dist/lib/terminal/run-surface.d.ts +0 -56
- package/dist/lib/terminal/run-surface.js +0 -46
- package/dist/lib/terminal/shell.d.ts +0 -3
- package/dist/lib/terminal/shell.js +0 -13
- package/dist/lib/terminal/transport.d.ts +0 -14
- package/dist/lib/terminal/transport.js +1 -30
- package/dist/lib/terminal/types.d.ts +0 -40
- package/dist/lib/terminal/types.js +0 -10
- package/dist/lib/text/relative-time.d.ts +0 -36
- package/dist/lib/text/relative-time.js +0 -43
- package/dist/lib/text/short-id.d.ts +0 -16
- package/dist/lib/text/short-id.js +0 -16
- package/dist/lib/text/width.d.ts +0 -24
- package/dist/lib/text/width.js +10 -52
- package/dist/lib/tmux/binary.d.ts +0 -36
- package/dist/lib/tmux/binary.js +0 -28
- package/dist/lib/tmux/index.d.ts +0 -5
- package/dist/lib/tmux/index.js +0 -5
- package/dist/lib/tmux/orphan-reap.d.ts +0 -253
- package/dist/lib/tmux/orphan-reap.js +3 -299
- package/dist/lib/tmux/paths.d.ts +0 -14
- package/dist/lib/tmux/paths.js +0 -14
- package/dist/lib/tmux/session.d.ts +0 -263
- package/dist/lib/tmux/session.js +6 -344
- package/dist/lib/traces/backend.d.ts +0 -20
- package/dist/lib/traces/backend.js +0 -23
- package/dist/lib/traces/classify.d.ts +0 -20
- package/dist/lib/traces/classify.js +0 -7
- package/dist/lib/traces/insights.d.ts +1 -84
- package/dist/lib/traces/insights.js +0 -126
- package/dist/lib/traces/phenotype.d.ts +0 -69
- package/dist/lib/traces/phenotype.js +0 -150
- package/dist/lib/traces/provision.d.ts +0 -1
- package/dist/lib/traces/provision.js +0 -5
- package/dist/lib/traces/schema2-build.d.ts +3 -60
- package/dist/lib/traces/schema2-build.js +8 -149
- package/dist/lib/traces/schema2-danger.d.ts +0 -30
- package/dist/lib/traces/schema2-danger.js +1 -63
- package/dist/lib/traces/schema2.d.ts +0 -11
- package/dist/lib/traces/segments.d.ts +0 -44
- package/dist/lib/traces/segments.js +0 -65
- package/dist/lib/traces/sync.d.ts +2 -239
- package/dist/lib/traces/sync.js +15 -237
- package/dist/lib/traces/worker-template.d.ts +0 -3
- package/dist/lib/traces/worker-template.js +0 -29
- package/dist/lib/triggers/handlers.d.ts +0 -82
- package/dist/lib/triggers/handlers.js +0 -75
- package/dist/lib/triggers/webhook.d.ts +0 -158
- package/dist/lib/triggers/webhook.js +0 -143
- package/dist/lib/types.d.ts +0 -736
- package/dist/lib/types.js +0 -50
- package/dist/lib/uninstall.d.ts +0 -17
- package/dist/lib/uninstall.js +0 -75
- package/dist/lib/usage-backoff.d.ts +0 -20
- package/dist/lib/usage-backoff.js +3 -60
- package/dist/lib/usage-refresh.d.ts +0 -154
- package/dist/lib/usage-refresh.js +8 -212
- package/dist/lib/verbs.d.ts +0 -12
- package/dist/lib/verbs.js +0 -12
- package/dist/lib/version-duplicates.d.ts +0 -6
- package/dist/lib/version-duplicates.js +0 -6
- package/dist/lib/version.d.ts +0 -55
- package/dist/lib/version.js +1 -58
- package/dist/lib/view-types.d.ts +0 -48
- package/dist/lib/warn-unpushed.d.ts +0 -27
- package/dist/lib/warn-unpushed.js +1 -45
- package/dist/lib/watchdog/history.d.ts +0 -1
- package/dist/lib/watchdog/history.js +0 -3
- package/dist/lib/watchdog/index.js +0 -2
- package/dist/lib/watchdog/log.d.ts +0 -19
- package/dist/lib/watchdog/log.js +0 -34
- package/dist/lib/watchdog/read.d.ts +0 -27
- package/dist/lib/watchdog/read.js +3 -58
- package/dist/lib/watchdog/rotate.d.ts +0 -139
- package/dist/lib/watchdog/rotate.js +2 -151
- package/dist/lib/watchdog/runner.d.ts +0 -125
- package/dist/lib/watchdog/runner.js +3 -223
- package/dist/lib/watchdog/service.d.ts +0 -1
- package/dist/lib/watchdog/service.js +0 -2
- package/dist/lib/watchdog/watchdog-agent.d.ts +0 -31
- package/dist/lib/watchdog/watchdog-agent.js +0 -27
- package/dist/lib/watchdog/watchdog.d.ts +0 -7
- package/dist/lib/watchdog/watchdog.js +0 -10
- package/dist/lib/watchdog/watchdogTail.js +0 -7
- package/dist/lib/whats-new.d.ts +0 -10
- package/dist/lib/whats-new.js +0 -21
- package/dist/lib/workflows-registry.d.ts +0 -45
- package/dist/lib/workflows-registry.js +0 -60
- package/dist/lib/workflows.d.ts +0 -282
- package/dist/lib/workflows.js +3 -213
- package/dist/lib/worktree/held.d.ts +0 -89
- package/dist/lib/worktree/held.js +1 -103
- package/dist/lib/wrap.d.ts +0 -32
- package/dist/lib/wrap.js +0 -32
- package/dist/lib/yaml-io.d.ts +0 -45
- package/dist/lib/yaml-io.js +0 -47
- package/dist/session-tracker/dist/adapters/claude.js +0 -2
- package/dist/session-tracker/dist/hook.sh +4 -37
- package/dist/session-tracker/dist/index.d.ts +0 -7
- package/dist/session-tracker/dist/index.js +0 -5
- package/dist/session-tracker/dist/install-hook.d.ts +0 -5
- package/dist/session-tracker/dist/install-hook.js +1 -15
- package/dist/session-tracker/dist/prune-state.js +0 -4
- package/dist/session-tracker/dist/reader.js +0 -4
- package/dist/session-tracker/dist/state-file.d.ts +0 -3
- package/dist/session-tracker/dist/state-file.js +3 -8
- package/package.json +3 -4
- package/scripts/postinstall.js +8 -116
- package/dist/lib/session/artifacts.d.ts +0 -14
- package/dist/lib/session/artifacts.js +0 -101
- package/dist/lib/session/bash-command.d.ts +0 -63
- package/dist/lib/session/bash-command.js +0 -490
- package/dist/lib/session/digest.d.ts +0 -66
- package/dist/lib/session/digest.js +0 -328
- package/dist/lib/session/highlights.d.ts +0 -151
- package/dist/lib/session/highlights.js +0 -391
- package/dist/lib/session/insights.d.ts +0 -165
- package/dist/lib/session/insights.js +0 -563
- package/dist/lib/session/linear.d.ts +0 -19
- package/dist/lib/session/linear.js +0 -99
- package/dist/lib/session/parse.d.ts +0 -224
- package/dist/lib/session/parse.js +0 -2408
- package/dist/lib/session/prompt.d.ts +0 -213
- package/dist/lib/session/prompt.js +0 -601
- package/dist/lib/session/render.d.ts +0 -133
- package/dist/lib/session/render.js +0 -1047
- package/dist/lib/session/share-html.d.ts +0 -35
- package/dist/lib/session/share-html.js +0 -319
- package/dist/lib/session/shell-programs.d.ts +0 -33
- package/dist/lib/session/shell-programs.js +0 -380
- package/dist/lib/session/state.d.ts +0 -269
- package/dist/lib/session/state.js +0 -777
- package/dist/lib/session/stream-render.d.ts +0 -4
- package/dist/lib/session/stream-render.js +0 -131
- package/dist/lib/session/tail.d.ts +0 -88
- package/dist/lib/session/tail.js +0 -294
- package/dist/lib/session/team-filter.d.ts +0 -129
- package/dist/lib/session/team-filter.js +0 -269
- package/dist/lib/session/timeline.d.ts +0 -172
- package/dist/lib/session/timeline.js +0 -636
- package/dist/lib/session/tool-calls.d.ts +0 -132
- package/dist/lib/session/tool-calls.js +0 -674
- package/dist/lib/session/trajectory-compare.d.ts +0 -48
- package/dist/lib/session/trajectory-compare.js +0 -116
- package/dist/lib/session/trajectory-html.d.ts +0 -19
- package/dist/lib/session/trajectory-html.js +0 -771
- package/dist/lib/session/trajectory-lineage.d.ts +0 -93
- package/dist/lib/session/trajectory-lineage.js +0 -195
- package/dist/lib/session/trajectory-text.d.ts +0 -38
- package/dist/lib/session/trajectory-text.js +0 -284
- package/dist/lib/session/trajectory.d.ts +0 -145
- package/dist/lib/session/trajectory.js +0 -394
- package/dist/lib/session/types.d.ts +0 -627
- package/dist/lib/session/types.js +0 -43
package/dist/lib/state.js
CHANGED
|
@@ -1,27 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filesystem layout and persistent state for agents-cli.
|
|
3
|
-
*
|
|
4
|
-
* Single root at ~/.agents/ with three internal buckets:
|
|
5
|
-
*
|
|
6
|
-
* ~/.agents/ — user repo: user-authored resources + agents.yaml
|
|
7
|
-
* (git-tracked via `agents repo push`).
|
|
8
|
-
* ~/.agents/.system/ — system repo: npm-shipped resources, regenerable.
|
|
9
|
-
* Don't hand-edit; maintained by npm install /
|
|
10
|
-
* `agents repo pull system`.
|
|
11
|
-
* ~/.agents/.history/ — durable runtime data (sessions, versions, runs,
|
|
12
|
-
* teams/agents, trash, backups). Backed up by
|
|
13
|
-
* `agents repo push`.
|
|
14
|
-
* ~/.agents/.cache/ — regenerable runtime data (shims, packages, helpers
|
|
15
|
-
* for daemon, terminals, cloud, drive, browser
|
|
16
|
-
* chrome-data, logs, companion). Gitignored.
|
|
17
|
-
*
|
|
18
|
-
* Resolution precedence for resources: project > user > system.
|
|
19
|
-
* Every module that needs a path or reads/writes agents.yaml goes through here.
|
|
20
|
-
*
|
|
21
|
-
* Legacy layout (pre-fold): system repo lived at ~/.agents-system/ as a peer
|
|
22
|
-
* of ~/.agents/. runMigration() folds it into ~/.agents/.system/ on first run
|
|
23
|
-
* and leaves a back-compat symlink at the old path.
|
|
24
|
-
*/
|
|
25
1
|
import * as fs from 'fs';
|
|
26
2
|
import * as path from 'path';
|
|
27
3
|
import * as os from 'os';
|
|
@@ -32,11 +8,6 @@ import { ensureLockTarget, atomicWriteFileSync, withFileLock } from './fs-atomic
|
|
|
32
8
|
import { DEFAULT_SYSTEM_REPO, systemRepoSlug } from './types.js';
|
|
33
9
|
import { machineId } from './machine-id.js';
|
|
34
10
|
const HOME = process.env.HOME ?? os.homedir();
|
|
35
|
-
/**
|
|
36
|
-
* Compare two filesystem paths for identity, resolving symlinks and (on
|
|
37
|
-
* Windows) 8.3 short-name vs long-name divergence via the OS realpath.
|
|
38
|
-
* Falls back to a case-folded normalize when a path doesn't exist on disk.
|
|
39
|
-
*/
|
|
40
11
|
function isSamePath(a, b) {
|
|
41
12
|
try {
|
|
42
13
|
return fs.realpathSync.native(a) === fs.realpathSync.native(b);
|
|
@@ -46,26 +17,13 @@ function isSamePath(a, b) {
|
|
|
46
17
|
return norm(a) === norm(b);
|
|
47
18
|
}
|
|
48
19
|
}
|
|
49
|
-
// ─── Root directories ─────────────────────────────────────────────────────────
|
|
50
|
-
/** User repo — user-authored resources and agents.yaml. Always-on. */
|
|
51
20
|
const USER_AGENTS_DIR = path.join(HOME, '.agents');
|
|
52
|
-
/** System repo — npm-shipped, read-only from user commands. Lives inside the user repo. */
|
|
53
21
|
const SYSTEM_AGENTS_DIR = path.join(USER_AGENTS_DIR, '.system');
|
|
54
|
-
/**
|
|
55
|
-
* Legacy system-repo location (pre-fold). Exported so the migrator can fold
|
|
56
|
-
* it into SYSTEM_AGENTS_DIR. No runtime code outside the migrator should
|
|
57
|
-
* reference this — use SYSTEM_AGENTS_DIR.
|
|
58
|
-
*/
|
|
59
22
|
const LEGACY_SYSTEM_AGENTS_DIR = path.join(HOME, '.agents-system');
|
|
60
|
-
// ─── Meta file (agents.yaml lives in the user repo) ──────────────────────────
|
|
61
23
|
const META_FILE = path.join(USER_AGENTS_DIR, 'agents.yaml');
|
|
62
|
-
/** Legacy location — used only for one-shot migration in readMeta(). */
|
|
63
24
|
const SYSTEM_META_FILE = path.join(SYSTEM_AGENTS_DIR, 'agents.yaml');
|
|
64
|
-
/** Canonical path for the humans.yaml owner-identity/channel config. */
|
|
65
25
|
const HUMANS_FILE = path.join(USER_AGENTS_DIR, 'humans.yaml');
|
|
66
|
-
/** Return the absolute path to the humans.yaml file. */
|
|
67
26
|
export function getHumansFilePath() { return process.env.AGENTS_HUMANS_FILE ?? HUMANS_FILE; }
|
|
68
|
-
// ─── System resource dirs ─────────────────────────────────────────────────────
|
|
69
27
|
const SYSTEM_COMMANDS_DIR = path.join(SYSTEM_AGENTS_DIR, 'commands');
|
|
70
28
|
const SYSTEM_HOOKS_DIR = path.join(SYSTEM_AGENTS_DIR, 'hooks');
|
|
71
29
|
const SYSTEM_SKILLS_DIR = path.join(SYSTEM_AGENTS_DIR, 'skills');
|
|
@@ -75,46 +33,25 @@ const SYSTEM_PERMISSIONS_DIR = path.join(SYSTEM_AGENTS_DIR, 'permissions');
|
|
|
75
33
|
const SYSTEM_SUBAGENTS_DIR = path.join(SYSTEM_AGENTS_DIR, 'subagents');
|
|
76
34
|
const SYSTEM_WORKFLOWS_DIR = path.join(SYSTEM_AGENTS_DIR, 'workflows');
|
|
77
35
|
const SYSTEM_PLUGINS_DIR = path.join(SYSTEM_AGENTS_DIR, 'plugins');
|
|
78
|
-
// Built-in routines shipped in the system repo (gh:phnx-labs/.agents-system).
|
|
79
|
-
// Unioned under user routines by listJobs()/readJob() so a routine shipped here
|
|
80
|
-
// fires for every install, while a user routine of the same name overrides it.
|
|
81
36
|
const SYSTEM_ROUTINES_DIR = path.join(SYSTEM_AGENTS_DIR, 'routines');
|
|
82
|
-
// Built-in monitors shipped in the system repo (gh:phnx-labs/.agents-system).
|
|
83
|
-
// Unioned under user monitors by listMonitors()/readMonitor() so a monitor
|
|
84
|
-
// shipped here is available on every install, while a user monitor of the same
|
|
85
|
-
// name overrides it (a built-in with no `enabled:` field stays opt-in).
|
|
86
37
|
const SYSTEM_MONITORS_DIR = path.join(SYSTEM_AGENTS_DIR, 'monitors');
|
|
87
38
|
const SYSTEM_WEBHOOKS_DIR = path.join(SYSTEM_AGENTS_DIR, 'webhooks');
|
|
88
39
|
const SYSTEM_PROMPTCUTS_FILE = path.join(SYSTEM_AGENTS_DIR, 'hooks', 'promptcuts.yaml');
|
|
89
40
|
const SYSTEM_MCP_CONFIG_FILE = path.join(SYSTEM_AGENTS_DIR, 'mcp.json');
|
|
90
41
|
const SYSTEM_INSTRUCTIONS_FILE = path.join(SYSTEM_AGENTS_DIR, 'instructions.md');
|
|
91
|
-
// ─── User repo operational buckets ────────────────────────────────────────────
|
|
92
|
-
/** Durable runtime data (sessions, versions, runs, teams history, trash, backups). */
|
|
93
42
|
const HISTORY_DIR = path.join(USER_AGENTS_DIR, '.history');
|
|
94
|
-
/** Regenerable runtime data (shims, packages, helpers, terminals, cloud, drive, logs, browser). */
|
|
95
43
|
const CACHE_DIR = path.join(USER_AGENTS_DIR, '.cache');
|
|
96
|
-
// Top-level user dirs (config/definitions only — runtime moves into .history/.cache).
|
|
97
44
|
const ROUTINES_DIR = path.join(USER_AGENTS_DIR, 'routines');
|
|
98
45
|
const WEBHOOKS_DIR = path.join(USER_AGENTS_DIR, 'webhooks');
|
|
99
|
-
// Monitor definitions (event-triggered watchers). Sibling of ROUTINES_DIR: a
|
|
100
|
-
// monitor is a routine whose trigger is a watched source instead of a clock.
|
|
101
46
|
const MONITORS_DIR = path.join(USER_AGENTS_DIR, 'monitors');
|
|
102
47
|
const TEAMS_DIR = path.join(USER_AGENTS_DIR, 'teams');
|
|
103
|
-
// Named project definitions (the layer above the --project convention). Sibling
|
|
104
|
-
// of ROUTINES_DIR/TEAMS_DIR: hand-editable YAML, synced across machines by push/pull.
|
|
105
48
|
const PROJECTS_DIR = path.join(USER_AGENTS_DIR, 'projects');
|
|
106
|
-
// Daemon service toggles and persistent daemon config. Top-level config/definitions
|
|
107
|
-
// dir like routines/webhooks; runtime state (pid/heartbeat/logs) stays in .cache.
|
|
108
49
|
const DAEMON_CONFIG_DIR = path.join(USER_AGENTS_DIR, 'daemon');
|
|
109
|
-
// History bucket (durable).
|
|
110
50
|
const SESSIONS_DIR = path.join(HISTORY_DIR, 'sessions');
|
|
111
51
|
const SESSIONS_DB_PATH = path.join(SESSIONS_DIR, 'sessions.db');
|
|
112
52
|
const ANALYTICS_DIR = path.join(HISTORY_DIR, 'analytics');
|
|
113
53
|
const VERSIONS_DIR = path.join(HISTORY_DIR, 'versions');
|
|
114
54
|
const RUNS_DIR = path.join(HISTORY_DIR, 'runs');
|
|
115
|
-
// Durable per-monitor state-diff store + fire history (last-seen value/hash,
|
|
116
|
-
// fires/<id>/). Sibling of RUNS_DIR — the native diff store that replaces the
|
|
117
|
-
// hand-rolled markdown memory files monitors used to need.
|
|
118
55
|
const MONITORS_HISTORY_DIR = path.join(HISTORY_DIR, 'monitors');
|
|
119
56
|
const TEAMS_AGENTS_DIR = path.join(HISTORY_DIR, 'teams', 'agents');
|
|
120
57
|
const BACKUPS_DIR = path.join(HISTORY_DIR, 'backups');
|
|
@@ -122,19 +59,15 @@ const TRASH_DIR = path.join(HISTORY_DIR, 'trash');
|
|
|
122
59
|
const MAILBOX_DIR = path.join(HISTORY_DIR, 'mailbox');
|
|
123
60
|
const FEED_DIR = path.join(HISTORY_DIR, 'feed');
|
|
124
61
|
const ACTIVITY_DIR = path.join(HISTORY_DIR, 'activity');
|
|
125
|
-
// Cache bucket (regenerable).
|
|
126
62
|
const SHIMS_DIR = path.join(CACHE_DIR, 'shims');
|
|
127
63
|
const HOOK_SHIMS_DIR = path.join(SHIMS_DIR, 'hooks');
|
|
128
64
|
const HOOK_CACHE_DIR = path.join(CACHE_DIR, 'state', 'hooks');
|
|
129
65
|
const BIN_DIR = path.join(CACHE_DIR, 'bin');
|
|
130
66
|
const PACKAGES_DIR = path.join(CACHE_DIR, 'packages');
|
|
131
|
-
// Plugins are user-authored resources, alongside skills/, commands/, hooks/.
|
|
132
|
-
// They live at the user-root so they're git-tracked as source of truth.
|
|
133
67
|
const PLUGINS_DIR = path.join(USER_AGENTS_DIR, 'plugins');
|
|
134
68
|
const CLOUD_DIR = path.join(CACHE_DIR, 'cloud');
|
|
135
69
|
const TERMINALS_DIR = path.join(CACHE_DIR, 'terminals');
|
|
136
70
|
const LOGS_DIR = path.join(CACHE_DIR, 'logs');
|
|
137
|
-
/** Disposable performance samples (~/.agents/.cache/perf/) — safe to wipe. */
|
|
138
71
|
const PERF_DIR = path.join(CACHE_DIR, 'perf');
|
|
139
72
|
const RUNTIME_STATE_DIR = path.join(CACHE_DIR, 'state');
|
|
140
73
|
const COMPANION_CACHE_DIR = path.join(CACHE_DIR, 'companion');
|
|
@@ -147,7 +80,6 @@ const CLI_VERSION_CACHE_FILE = path.join(CACHE_DIR, '.cli-version-cache.json');
|
|
|
147
80
|
const MODELS_CACHE_FILE = path.join(CACHE_DIR, '.models-cache.json');
|
|
148
81
|
const UPDATE_CHECK_FILE = path.join(CACHE_DIR, '.update-check');
|
|
149
82
|
const MIGRATED_SENTINEL_FILE = path.join(CACHE_DIR, '.migrated');
|
|
150
|
-
// ─── User resource dirs ───────────────────────────────────────────────────────
|
|
151
83
|
const USER_COMMANDS_DIR = path.join(USER_AGENTS_DIR, 'commands');
|
|
152
84
|
const USER_HOOKS_DIR = path.join(USER_AGENTS_DIR, 'hooks');
|
|
153
85
|
const USER_SKILLS_DIR = path.join(USER_AGENTS_DIR, 'skills');
|
|
@@ -158,32 +90,21 @@ const USER_SUBAGENTS_DIR = path.join(USER_AGENTS_DIR, 'subagents');
|
|
|
158
90
|
const USER_WORKFLOWS_DIR = path.join(USER_AGENTS_DIR, 'workflows');
|
|
159
91
|
const USER_SECRETS_DIR = path.join(USER_AGENTS_DIR, 'secrets');
|
|
160
92
|
const USER_PROMPTCUTS_FILE = path.join(USER_AGENTS_DIR, 'hooks', 'promptcuts.yaml');
|
|
161
|
-
/**
|
|
162
|
-
* Header prepended to every agents.yaml the CLI writes (central and per-device
|
|
163
|
-
* docs). Carries the yaml-language-server schema hint so editors validate the
|
|
164
|
-
* file against `schema/agents-yaml.schema.json`. Exported so
|
|
165
|
-
* `lib/devices/config-migration.ts` rewrites a device doc with the same header.
|
|
166
|
-
*/
|
|
167
93
|
export const META_HEADER = `# agents-cli metadata
|
|
168
94
|
# Auto-generated - do not edit manually
|
|
169
95
|
# https://github.com/phnx-labs/agi-cli
|
|
170
96
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/phnx-labs/agi-cli/main/cli/schema/agents-yaml.schema.json
|
|
171
97
|
|
|
172
98
|
`;
|
|
173
|
-
// ─── Root getters ─────────────────────────────────────────────────────────────
|
|
174
|
-
/** Root of the system data directory (~/.agents/.system/). */
|
|
175
99
|
export function getAgentsDir() {
|
|
176
100
|
return SYSTEM_AGENTS_DIR;
|
|
177
101
|
}
|
|
178
|
-
/** Root of the system data directory (~/.agents/.system/). */
|
|
179
102
|
export function getSystemAgentsDir() {
|
|
180
103
|
return SYSTEM_AGENTS_DIR;
|
|
181
104
|
}
|
|
182
|
-
/** Legacy system-repo location (~/.agents-system/). Exported for migration only. */
|
|
183
105
|
export function getLegacySystemAgentsDir() {
|
|
184
106
|
return LEGACY_SYSTEM_AGENTS_DIR;
|
|
185
107
|
}
|
|
186
|
-
/** Root of the user repo (~/.agents/). Always present after ensureAgentsDir(). */
|
|
187
108
|
export function getUserAgentsDir() {
|
|
188
109
|
return USER_AGENTS_DIR;
|
|
189
110
|
}
|
|
@@ -207,17 +128,10 @@ export function getOptionalUserAgentsDir() {
|
|
|
207
128
|
}
|
|
208
129
|
}
|
|
209
130
|
}
|
|
210
|
-
catch {
|
|
131
|
+
catch { }
|
|
211
132
|
}
|
|
212
133
|
return USER_AGENTS_DIR;
|
|
213
134
|
}
|
|
214
|
-
/**
|
|
215
|
-
* Origin `owner/repo` slug (lowercased, `.git` stripped) of a git checkout, or
|
|
216
|
-
* null when `dir` isn't a git repo / has no origin. Extracts the slug from any
|
|
217
|
-
* remote URL form: `git@host:owner/repo.git`, `https://host/owner/repo.git`,
|
|
218
|
-
* `ssh://git@host/owner/repo`. Sync (uses `execFileSync`, not the async git
|
|
219
|
-
* helpers) so it can be used from the synchronous getProjectAgentsDir walk.
|
|
220
|
-
*/
|
|
221
135
|
function gitOriginSlug(dir) {
|
|
222
136
|
let url;
|
|
223
137
|
try {
|
|
@@ -233,7 +147,6 @@ function gitOriginSlug(dir) {
|
|
|
233
147
|
const m = url.replace(/\.git$/i, '').match(/[:/]([^/:]+\/[^/]+)$/);
|
|
234
148
|
return m ? m[1].toLowerCase() : null;
|
|
235
149
|
}
|
|
236
|
-
/** Slugs of the user + system DotAgents repos — a checkout of any of these is not a project layer. */
|
|
237
150
|
function canonicalDotAgentsRepoSlugs() {
|
|
238
151
|
const slugs = new Set([systemRepoSlug(DEFAULT_SYSTEM_REPO).toLowerCase()]);
|
|
239
152
|
for (const dir of [USER_AGENTS_DIR, SYSTEM_AGENTS_DIR]) {
|
|
@@ -243,21 +156,6 @@ function canonicalDotAgentsRepoSlugs() {
|
|
|
243
156
|
}
|
|
244
157
|
return slugs;
|
|
245
158
|
}
|
|
246
|
-
/**
|
|
247
|
-
* True when `agentsPath` is itself a git checkout of the user's or system's
|
|
248
|
-
* DotAgents repo — i.e. a *clone* of the very repo whose rules already load as
|
|
249
|
-
* the user/system layer (e.g. `git clone …/.agents.git ~/src/github.com/<you>/.agents`).
|
|
250
|
-
* Such a clone must NOT also be treated as a *project* layer: because project
|
|
251
|
-
* outranks user, a stale clone would silently shadow the live user rules by
|
|
252
|
-
* filename and plant a compiled AGENTS.md in an ancestor dir (RUSH-2037).
|
|
253
|
-
*
|
|
254
|
-
* A legitimate project layer is a plain subdirectory of a project and is never
|
|
255
|
-
* itself a git-repo root, so the cheap `.git` gate skips the (git-spawning)
|
|
256
|
-
* origin comparison for the common case — only a `.agents/` that is its own
|
|
257
|
-
* checkout pays it, and even then it's kept unless its origin matches the
|
|
258
|
-
* user/system DotAgents repo (an unrelated repo checked out at `.agents/`,
|
|
259
|
-
* or a project's own versioned `.agents/`, stays a valid project layer).
|
|
260
|
-
*/
|
|
261
159
|
function isUserOrSystemRepoCheckout(agentsPath) {
|
|
262
160
|
if (!fs.existsSync(path.join(agentsPath, '.git')))
|
|
263
161
|
return false;
|
|
@@ -266,21 +164,11 @@ function isUserOrSystemRepoCheckout(agentsPath) {
|
|
|
266
164
|
return false;
|
|
267
165
|
return canonicalDotAgentsRepoSlugs().has(origin);
|
|
268
166
|
}
|
|
269
|
-
/**
|
|
270
|
-
* True when `agentsPath` is a reserved `.agents` root that must never be
|
|
271
|
-
* treated as a project layer: the user repo (~/.agents), the system repo
|
|
272
|
-
* (~/.agents/.system), or a git checkout of either canonical DotAgents repo.
|
|
273
|
-
* `getProjectAgentsDir` skips these while walking up; direct-cwd callers
|
|
274
|
-
* (`compileRulesForProject`) consult the same predicate so `$HOME` — whose
|
|
275
|
-
* `.agents/rules` is the user layer itself — can never compile as a
|
|
276
|
-
* "project" (RUSH-2725).
|
|
277
|
-
*/
|
|
278
167
|
export function isReservedAgentsDir(agentsPath) {
|
|
279
168
|
return isSamePath(agentsPath, SYSTEM_AGENTS_DIR)
|
|
280
169
|
|| isSamePath(agentsPath, USER_AGENTS_DIR)
|
|
281
170
|
|| isUserOrSystemRepoCheckout(agentsPath);
|
|
282
171
|
}
|
|
283
|
-
/** Walk up from startPath to find a project-scoped .agents/ directory (skipping both roots). */
|
|
284
172
|
export function getProjectAgentsDir(startPath = process.cwd()) {
|
|
285
173
|
let dir = path.resolve(startPath);
|
|
286
174
|
while (true) {
|
|
@@ -300,7 +188,6 @@ export function getProjectAgentsDir(startPath = process.cwd()) {
|
|
|
300
188
|
}
|
|
301
189
|
return null;
|
|
302
190
|
}
|
|
303
|
-
/** Return all .agents/ directories in scope: project, user, then system. */
|
|
304
191
|
export function getScopedAgentsDirs(startPath = process.cwd()) {
|
|
305
192
|
const dirs = [];
|
|
306
193
|
const projectDir = getProjectAgentsDir(startPath);
|
|
@@ -311,41 +198,20 @@ export function getScopedAgentsDirs(startPath = process.cwd()) {
|
|
|
311
198
|
dirs.push({ scope: 'system', path: SYSTEM_AGENTS_DIR });
|
|
312
199
|
return dirs;
|
|
313
200
|
}
|
|
314
|
-
// ─── System resource getters (legacy aliases for read/sync paths) ─────────────
|
|
315
|
-
/** Path to slash command markdown files — system repo. */
|
|
316
201
|
export function getCommandsDir() { return SYSTEM_COMMANDS_DIR; }
|
|
317
|
-
/** Path to hook script directories — system repo. */
|
|
318
202
|
export function getHooksDir() { return SYSTEM_HOOKS_DIR; }
|
|
319
|
-
/** Path to skill bundles — system repo. */
|
|
320
203
|
export function getSkillsDir() { return SYSTEM_SKILLS_DIR; }
|
|
321
|
-
/** Path to the canonical rules directory — system repo. */
|
|
322
204
|
export function getRulesDir() { return SYSTEM_RULES_DIR; }
|
|
323
|
-
/** Read-side resolution for the canonical rules dir — system repo. */
|
|
324
205
|
export function getResolvedRulesDir() { return SYSTEM_RULES_DIR; }
|
|
325
|
-
/** Path to MCP server YAML configs — system repo. */
|
|
326
206
|
export function getMcpDir() { return SYSTEM_MCP_DIR; }
|
|
327
|
-
/** Path to permission group YAML files — system repo. */
|
|
328
207
|
export function getPermissionsDir() { return process.env.AGENTS_SYSTEM_PERMISSIONS_DIR ?? SYSTEM_PERMISSIONS_DIR; }
|
|
329
|
-
/** Path to subagent definition directories — system repo. */
|
|
330
208
|
export function getSubagentsDir() { return SYSTEM_SUBAGENTS_DIR; }
|
|
331
|
-
/** Path to ~/.agents/.system/hooks/promptcuts.yaml (system defaults). */
|
|
332
209
|
export function getPromptcutsPath() { return SYSTEM_PROMPTCUTS_FILE; }
|
|
333
|
-
/**
|
|
334
|
-
* Resolve the effective promptcuts file: user file if it exists, otherwise
|
|
335
|
-
* the system file. Use this for callers that need a single path (doctor
|
|
336
|
-
* diff, displaying which file is in play). Callers that need the merged
|
|
337
|
-
* shortcut set should use readMergedPromptcuts() instead.
|
|
338
|
-
*/
|
|
339
210
|
export function getEffectivePromptcutsPath() {
|
|
340
211
|
if (fs.existsSync(USER_PROMPTCUTS_FILE))
|
|
341
212
|
return USER_PROMPTCUTS_FILE;
|
|
342
213
|
return SYSTEM_PROMPTCUTS_FILE;
|
|
343
214
|
}
|
|
344
|
-
/**
|
|
345
|
-
* Read promptcuts from system + user with user precedence. Returns the
|
|
346
|
-
* merged `shortcuts` map. Same layering model as parseHookManifest().
|
|
347
|
-
* Returns an empty object when neither file exists or both fail to parse.
|
|
348
|
-
*/
|
|
349
215
|
export function readMergedPromptcuts() {
|
|
350
216
|
const merged = {};
|
|
351
217
|
for (const filePath of [SYSTEM_PROMPTCUTS_FILE, USER_PROMPTCUTS_FILE]) {
|
|
@@ -360,16 +226,12 @@ export function readMergedPromptcuts() {
|
|
|
360
226
|
}
|
|
361
227
|
}
|
|
362
228
|
catch {
|
|
363
|
-
// Skip unreadable file, keep going
|
|
364
229
|
}
|
|
365
230
|
}
|
|
366
231
|
return merged;
|
|
367
232
|
}
|
|
368
|
-
/** Path to the legacy MCP config JSON. */
|
|
369
233
|
export function getMcpConfigPath() { return SYSTEM_MCP_CONFIG_FILE; }
|
|
370
|
-
/** Path to the global instructions file. */
|
|
371
234
|
export function getInstructionsPath() { return SYSTEM_INSTRUCTIONS_FILE; }
|
|
372
|
-
// ─── System-specific getters ───────────────────────────────────────────────────
|
|
373
235
|
export function getSystemCommandsDir() { return SYSTEM_COMMANDS_DIR; }
|
|
374
236
|
export function getSystemHooksDir() { return SYSTEM_HOOKS_DIR; }
|
|
375
237
|
export function getSystemSkillsDir() { return SYSTEM_SKILLS_DIR; }
|
|
@@ -378,7 +240,6 @@ export function getSystemMcpDir() { return SYSTEM_MCP_DIR; }
|
|
|
378
240
|
export function getSystemPermissionsDir() { return SYSTEM_PERMISSIONS_DIR; }
|
|
379
241
|
export function getSystemSubagentsDir() { return SYSTEM_SUBAGENTS_DIR; }
|
|
380
242
|
export function getSystemPromptcutsPath() { return SYSTEM_PROMPTCUTS_FILE; }
|
|
381
|
-
// ─── User resource getters ────────────────────────────────────────────────────
|
|
382
243
|
export function getUserCommandsDir() { return USER_COMMANDS_DIR; }
|
|
383
244
|
export function getUserHooksDir() { return USER_HOOKS_DIR; }
|
|
384
245
|
export function getUserSkillsDir() { return USER_SKILLS_DIR; }
|
|
@@ -389,29 +250,9 @@ export function getUserSubagentsDir() { return USER_SUBAGENTS_DIR; }
|
|
|
389
250
|
export function getSystemWorkflowsDir() { return SYSTEM_WORKFLOWS_DIR; }
|
|
390
251
|
export function getUserWorkflowsDir() { return USER_WORKFLOWS_DIR; }
|
|
391
252
|
export function getUserSecretsDir() { return USER_SECRETS_DIR; }
|
|
392
|
-
/**
|
|
393
|
-
* Path to the secrets usage read-model database (~/.agents/secrets/secrets.db).
|
|
394
|
-
* Read at CALL time so a test can redirect it to a temp file via
|
|
395
|
-
* AGENTS_SECRETS_DB without racing the module-load capture of USER_SECRETS_DIR —
|
|
396
|
-
* mirrors the AGENTS_EVENTS_PATH / AGENTS_DEVICES_DIR escape hatches. Holds only
|
|
397
|
-
* value-free usage telemetry (which bundle was created/imported/exported/viewed/
|
|
398
|
-
* accessed/unlocked, when, by whom), never a secret value. It used to be a
|
|
399
|
-
* derived index fed FROM the in-repo secrets engine's own emitSecretAudit
|
|
400
|
-
* chokepoint — not a second write path — the same way sessions.db indexes
|
|
401
|
-
* session metadata off the real session flow. That engine (and its audit
|
|
402
|
-
* emission) moved out of this repo entirely with the standalone `secrets`
|
|
403
|
-
* engine (PHNX-3989), so nothing writes this DB from agents-cli today; the
|
|
404
|
-
* read-side queries in `analytics/usage-db.ts` have no current caller.
|
|
405
|
-
*/
|
|
406
253
|
export function getSecretsDbPath() {
|
|
407
254
|
return process.env.AGENTS_SECRETS_DB ?? path.join(USER_SECRETS_DIR, 'secrets.db');
|
|
408
255
|
}
|
|
409
|
-
/**
|
|
410
|
-
* Path to the durable resource-usage warehouse (~/.agents/.history/analytics/usage.db).
|
|
411
|
-
* Value-free frequency/lifecycle events (secrets, agents, browser, …). Read at CALL
|
|
412
|
-
* time so AGENTS_USAGE_DB can redirect tests. Sync shards may also appear as
|
|
413
|
-
* usage.<machine-id>.db beside this default file.
|
|
414
|
-
*/
|
|
415
256
|
export function getAnalyticsDir() {
|
|
416
257
|
return process.env.AGENTS_ANALYTICS_DIR ?? ANALYTICS_DIR;
|
|
417
258
|
}
|
|
@@ -419,303 +260,110 @@ export function getUsageDbPath() {
|
|
|
419
260
|
return process.env.AGENTS_USAGE_DB ?? path.join(getAnalyticsDir(), 'usage.db');
|
|
420
261
|
}
|
|
421
262
|
export function getUserPromptcutsPath() { return USER_PROMPTCUTS_FILE; }
|
|
422
|
-
// ─── User operational path getters ────────────────────────────────────────────
|
|
423
|
-
//
|
|
424
|
-
// Top-level dirs hold definitions/configs only; runtime data lives under
|
|
425
|
-
// .history/ (durable) or .cache/ (regenerable). See file header.
|
|
426
|
-
/** Canonical home anchor (HOME env override or os.homedir()). */
|
|
427
263
|
export function getHomeDir() { return HOME; }
|
|
428
|
-
/** Bucket root for durable runtime data (~/.agents/.history/). */
|
|
429
264
|
export function getHistoryDir() { return HISTORY_DIR; }
|
|
430
|
-
/** Bucket root for regenerable runtime data (~/.agents/.cache/). */
|
|
431
265
|
export function getCacheDir() { return CACHE_DIR; }
|
|
432
|
-
/** Path to cloned packages (~/.agents/.cache/packages/). */
|
|
433
266
|
export function getPackagesDir() { return PACKAGES_DIR; }
|
|
434
|
-
/** Path to routine YAML definitions (~/.agents/routines/). */
|
|
435
267
|
export function getRoutinesDir() { return process.env.AGENTS_ROUTINES_DIR ?? ROUTINES_DIR; }
|
|
436
|
-
/** Path to named project definitions (~/.agents/projects/). */
|
|
437
268
|
export function getProjectsDir() { return process.env.AGENTS_PROJECTS_DIR ?? PROJECTS_DIR; }
|
|
438
|
-
/** Path to daemon config directory (~/.agents/daemon/). Holds service toggles. */
|
|
439
269
|
export function getDaemonConfigDir() { return process.env.AGENTS_DAEMON_CONFIG_DIR ?? DAEMON_CONFIG_DIR; }
|
|
440
|
-
/**
|
|
441
|
-
* Path to webhook handler YAML definitions (~/.agents/webhooks/). Handlers are
|
|
442
|
-
* one-off triggers for agents/workflows/commands/routines, layered the same way
|
|
443
|
-
* as routines (project > user > system).
|
|
444
|
-
*/
|
|
445
270
|
export function getWebhooksDir() { return process.env.AGENTS_WEBHOOKS_DIR ?? WEBHOOKS_DIR; }
|
|
446
|
-
/**
|
|
447
|
-
* Path to built-in routine definitions shipped in the system repo
|
|
448
|
-
* (`~/.agents/.system/routines/`). Unioned under the user routines dir by
|
|
449
|
-
* listJobs()/readJob(): a routine shipped here fires for every install, and a
|
|
450
|
-
* user routine of the same name overrides it (a user copy with `enabled: false`
|
|
451
|
-
* disables the built-in). The daemon fires these; the directory need not exist.
|
|
452
|
-
*/
|
|
453
271
|
export function getSystemRoutinesDir() { return process.env.AGENTS_SYSTEM_ROUTINES_DIR ?? SYSTEM_ROUTINES_DIR; }
|
|
454
|
-
/**
|
|
455
|
-
* Path to built-in webhook handler definitions shipped in the system repo
|
|
456
|
-
* (`~/.agents/.system/webhooks/`). Layered under user handlers by `listHandlers()`.
|
|
457
|
-
*/
|
|
458
272
|
export function getSystemWebhooksDir() { return process.env.AGENTS_SYSTEM_WEBHOOKS_DIR ?? SYSTEM_WEBHOOKS_DIR; }
|
|
459
|
-
/**
|
|
460
|
-
* Path to a project-scoped routines directory (`<project>/.agents/routines/`),
|
|
461
|
-
* or null when no project `.agents/` is found by walking up from cwd.
|
|
462
|
-
*
|
|
463
|
-
* Project routines participate in `list`/`view` for inspection always. Daemon
|
|
464
|
-
* firing requires `agents routines enable <name>`, which materialises the
|
|
465
|
-
* routine into the user layer with `source:` provenance (so the daemon, which
|
|
466
|
-
* loads user + system only, can see it) and turns on the device flag in one
|
|
467
|
-
* step. Enablement lives solely in `meta.deviceRoutines`; a project YAML's own
|
|
468
|
-
* `enabled:` field never turns firing on, so a cloned repo cannot auto-run.
|
|
469
|
-
* See `lib/routines-project.ts`.
|
|
470
|
-
*/
|
|
471
273
|
export function getProjectRoutinesDir(cwd = process.cwd()) {
|
|
472
274
|
const projectAgentsDir = getProjectAgentsDir(cwd);
|
|
473
275
|
if (!projectAgentsDir)
|
|
474
276
|
return null;
|
|
475
277
|
return path.join(projectAgentsDir, 'routines');
|
|
476
278
|
}
|
|
477
|
-
/**
|
|
478
|
-
* Path to a project-scoped webhook handlers directory
|
|
479
|
-
* (`<project>/.agents/webhooks/`), or null when no project `.agents/` is found
|
|
480
|
-
* by walking up from cwd.
|
|
481
|
-
*/
|
|
482
279
|
export function getProjectWebhooksDir(cwd = process.cwd()) {
|
|
483
280
|
const projectAgentsDir = getProjectAgentsDir(cwd);
|
|
484
281
|
if (!projectAgentsDir)
|
|
485
282
|
return null;
|
|
486
283
|
return path.join(projectAgentsDir, 'webhooks');
|
|
487
284
|
}
|
|
488
|
-
/** Path to routine execution logs (~/.agents/.history/runs/). */
|
|
489
285
|
export function getRunsDir() { return RUNS_DIR; }
|
|
490
|
-
/** Path to monitor YAML definitions (~/.agents/monitors/). */
|
|
491
286
|
export function getMonitorsDir() { return process.env.AGENTS_MONITORS_DIR ?? MONITORS_DIR; }
|
|
492
|
-
/**
|
|
493
|
-
* Path to built-in monitor definitions shipped in the system repo
|
|
494
|
-
* (`~/.agents/.system/monitors/`). Unioned under the user monitors dir by
|
|
495
|
-
* listMonitors()/readMonitor(): a monitor shipped here is available on every
|
|
496
|
-
* install, and a user monitor of the same name overrides it. A built-in is
|
|
497
|
-
* enabled by default like every other system-layer resource — it runs on every
|
|
498
|
-
* install unless the user shadows it with `enabled: false` (via `agents monitors
|
|
499
|
-
* pause`, which materializes a user copy; writes never touch this pull-only
|
|
500
|
-
* mirror). A shared-input built-in still carries its own `device:` owner pin in
|
|
501
|
-
* the shipped YAML so exactly one box fires it (SING-9). The directory need not
|
|
502
|
-
* exist.
|
|
503
|
-
*/
|
|
504
287
|
export function getSystemMonitorsDir() { return process.env.AGENTS_SYSTEM_MONITORS_DIR ?? SYSTEM_MONITORS_DIR; }
|
|
505
|
-
/** Path to the durable per-monitor state-diff store + fire history
|
|
506
|
-
* (~/.agents/.history/monitors/). */
|
|
507
288
|
export function getMonitorsHistoryDir() { return MONITORS_HISTORY_DIR; }
|
|
508
|
-
/** Root for per-agent mailboxes (~/.agents/.history/mailbox/). */
|
|
509
289
|
export function getMailboxRootDir() { return MAILBOX_DIR; }
|
|
510
|
-
/** Root for open-block feed records (~/.agents/.history/feed/). */
|
|
511
290
|
export function getFeedDir() { return FEED_DIR; }
|
|
512
|
-
/** Append-only per-session agent-activity event logs (~/.agents/.history/activity/). */
|
|
513
291
|
export function getActivityDir() { return ACTIVITY_DIR; }
|
|
514
|
-
/** Path to installed agent CLI binaries (~/.agents/.history/versions/). */
|
|
515
292
|
export function getVersionsDir() { return VERSIONS_DIR; }
|
|
516
|
-
/** Path to version-switching shim scripts (~/.agents/.cache/shims/). */
|
|
517
293
|
export function getShimsDir() { return SHIMS_DIR; }
|
|
518
|
-
/**
|
|
519
|
-
* Path to generated per-hook caching/timing shims (~/.agents/.cache/shims/hooks/).
|
|
520
|
-
* Read at CALL time — since every hook now resolves through a shim (RUSH-2xxx,
|
|
521
|
-
* pass-through timing for matcher-only hooks), a test that registers hooks
|
|
522
|
-
* in-process (no subprocess HOME override) would otherwise write real shim
|
|
523
|
-
* files into the user's actual ~/.agents/.cache. AGENTS_HOOK_SHIMS_DIR mirrors
|
|
524
|
-
* the AGENTS_EVENTS_PATH / AGENTS_DEVICES_DIR test-isolation escape hatches;
|
|
525
|
-
* never set in production code.
|
|
526
|
-
*/
|
|
527
294
|
export function getHookShimsDir() {
|
|
528
295
|
return process.env.AGENTS_HOOK_SHIMS_DIR ?? HOOK_SHIMS_DIR;
|
|
529
296
|
}
|
|
530
|
-
/**
|
|
531
|
-
* Path to per-hook stdout cache files (~/.agents/.cache/state/hooks/). Read at
|
|
532
|
-
* CALL time for the same reason as {@link getHookShimsDir} — see its doc.
|
|
533
|
-
*/
|
|
534
297
|
export function getHookCacheDir() {
|
|
535
298
|
return process.env.AGENTS_HOOK_CACHE_DIR ?? HOOK_CACHE_DIR;
|
|
536
299
|
}
|
|
537
|
-
/** Path to per-agent installed CLI binaries (~/.agents/.cache/bin/). */
|
|
538
300
|
export function getBinDir() { return BIN_DIR; }
|
|
539
|
-
/** Path to config backups (~/.agents/.history/backups/). */
|
|
540
301
|
export function getBackupsDir() { return BACKUPS_DIR; }
|
|
541
|
-
/** Path to plugin bundles (~/.agents/plugins/) — user-authored resource. */
|
|
542
302
|
export function getPluginsDir() { return PLUGINS_DIR; }
|
|
543
|
-
/** Path to system plugin bundles (~/.agents/.system/plugins/) — npm-shipped, read-only defaults. */
|
|
544
303
|
export function getSystemPluginsDir() { return SYSTEM_PLUGINS_DIR; }
|
|
545
|
-
/** Path to an extra repo's plugin bundles (~/.agents-<alias>/plugins/). */
|
|
546
304
|
export function getExtraPluginsDir(alias) {
|
|
547
305
|
return path.join(getExtraRepoDir(alias), 'plugins');
|
|
548
306
|
}
|
|
549
|
-
/** Path to a project-scoped plugins directory (<project>/.agents/plugins/), or null when none. */
|
|
550
307
|
export function getProjectPluginsDir(cwd = process.cwd()) {
|
|
551
308
|
const projectAgentsDir = getProjectAgentsDir(cwd);
|
|
552
309
|
if (!projectAgentsDir)
|
|
553
310
|
return null;
|
|
554
311
|
return path.join(projectAgentsDir, 'plugins');
|
|
555
312
|
}
|
|
556
|
-
/** Path to soft-deleted resources (~/.agents/.history/trash/). */
|
|
557
313
|
export function getTrashDir() { return TRASH_DIR; }
|
|
558
|
-
/** Path to local session indexer storage (~/.agents/.history/sessions/). */
|
|
559
314
|
export function getSessionsDir() { return SESSIONS_DIR; }
|
|
560
|
-
/** Path to the session index database (~/.agents/.history/sessions/sessions.db). */
|
|
561
315
|
export function getSessionsDbPath() {
|
|
562
316
|
return process.env.AGENTS_SESSIONS_DB ?? SESSIONS_DB_PATH;
|
|
563
317
|
}
|
|
564
|
-
/** Path to teams config + registry (~/.agents/teams/). */
|
|
565
318
|
export function getTeamsDir() { return TEAMS_DIR; }
|
|
566
|
-
/** Path to teams execution history (~/.agents/.history/teams/agents/). */
|
|
567
319
|
export function getTeamsAgentsDir() { return TEAMS_AGENTS_DIR; }
|
|
568
|
-
/** Path to the team registry — list of named teams with timestamps. Durable runtime, per-machine. */
|
|
569
320
|
export function getTeamsRegistryPath() { return path.join(HISTORY_DIR, 'teams', 'registry.json'); }
|
|
570
|
-
/**
|
|
571
|
-
* The devices dir (the registry lives here; the ignore-list moved to the
|
|
572
|
-
* tracked central agents.yaml as `fleet.ignored` — RUSH-3062). Read at CALL
|
|
573
|
-
* time so a
|
|
574
|
-
* test can redirect it to a temp dir via AGENTS_DEVICES_DIR without racing the
|
|
575
|
-
* module-load capture of HISTORY_DIR — mirrors the AGENTS_EVENTS_PATH /
|
|
576
|
-
* AGENTS_SECRETS_AGENT_DIR test-isolation escape hatches. Never set in
|
|
577
|
-
* production code; it exists so the vitest fork's device-registry writes can
|
|
578
|
-
* never reach the user's real ~/.agents/.history/devices (RUSH-2042).
|
|
579
|
-
*/
|
|
580
321
|
function getDevicesDir() {
|
|
581
322
|
return process.env.AGENTS_DEVICES_DIR ?? path.join(HISTORY_DIR, 'devices');
|
|
582
323
|
}
|
|
583
|
-
/** Path to the device registry — SSH device profiles with platform/auth metadata. Durable runtime, per-machine (host list + addresses are NOT pulled by `agents repo push`). */
|
|
584
324
|
export function getDevicesRegistryPath() { return path.join(getDevicesDir(), 'registry.json'); }
|
|
585
|
-
/** Path to the LEGACY per-machine device ignore-list — superseded by the tracked `fleet.ignored` list in central agents.yaml (RUSH-3062); only lib/devices/config-migration.ts still reads it (to fold + remove it). */
|
|
586
325
|
export function getDevicesIgnoredPath() { return path.join(getDevicesDir(), 'ignored.json'); }
|
|
587
|
-
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the per-device doc `config:` block; only lib/devices/config-migration.ts still reads it (to fold + remove it). */
|
|
588
326
|
export function getDevicesAutoLaunchPath() { return path.join(getDevicesDir(), 'auto-launch.json'); }
|
|
589
|
-
/** Path to THIS machine's agent pins — the `agents:` global defaults and
|
|
590
|
-
* `isolatedAgents:` pointers. Each pin names a version installed on THIS
|
|
591
|
-
* machine, so it is machine-local runtime state and lives beside the device
|
|
592
|
-
* registry under `.history/devices/` (untracked) — NOT in the tracked
|
|
593
|
-
* per-device doc, where auto-written pins caused commit churn on every
|
|
594
|
-
* `agents use` / install. Read at call time like the other devices-dir paths. */
|
|
595
327
|
export function getDevicePinsPath() { return path.join(getDevicesDir(), `pins-${machineId()}.json`); }
|
|
596
|
-
/** Dir of "pending device" sentinels (~/.agents/.cache/state/devices-pending/) — one empty-ish file per newly-discovered, not-yet-approved tailnet node. Written by the daemon probe, read by the menu-bar helper (mirrors the attention sentinel dir). */
|
|
597
328
|
export function getDevicesPendingDir() { return path.join(getRuntimeStateDir(), 'devices-pending'); }
|
|
598
|
-
/** Path to cloud dispatch cache (~/.agents/.cache/cloud/). */
|
|
599
329
|
export function getCloudDir() { return CLOUD_DIR; }
|
|
600
|
-
/** Path to terminal session metadata (~/.agents/.cache/terminals/). */
|
|
601
330
|
export function getTerminalsDir() { return TERMINALS_DIR; }
|
|
602
|
-
/**
|
|
603
|
-
* Path to runtime logs (~/.agents/.cache/logs/). Read at CALL time so
|
|
604
|
-
* AGENTS_LOGS_DIR can redirect it in tests — same test-isolation escape hatch
|
|
605
|
-
* as {@link getHookShimsDir}; never set in production code.
|
|
606
|
-
*/
|
|
607
331
|
export function getLogsDir() {
|
|
608
332
|
return process.env.AGENTS_LOGS_DIR ?? LOGS_DIR;
|
|
609
333
|
}
|
|
610
|
-
/**
|
|
611
|
-
* Path to disposable performance samples (~/.agents/.cache/perf/).
|
|
612
|
-
* Holds `perf.db` + a hook-shim spool. Loss is acceptable — wipe freely.
|
|
613
|
-
* Read at CALL time: AGENTS_PERF_DIR (the same override perf/db.ts and
|
|
614
|
-
* perf/spool.ts already honor for their own internal resolution) redirects
|
|
615
|
-
* this canonical getter too, so a caller that goes through it directly
|
|
616
|
-
* (hooks/cache.ts's shim generator, the OpenCode timeout sample writer in
|
|
617
|
-
* hooks.ts) doesn't leak samples into the user's real perf warehouse either.
|
|
618
|
-
*/
|
|
619
334
|
export function getPerfDir() {
|
|
620
335
|
return process.env.AGENTS_PERF_DIR ?? PERF_DIR;
|
|
621
336
|
}
|
|
622
|
-
/** Path to the perf SQLite warehouse (~/.agents/.cache/perf/perf.db). */
|
|
623
337
|
export function getPerfDbPath() { return path.join(getPerfDir(), 'perf.db'); }
|
|
624
|
-
/** Path to the hook-shim NDJSON spool drained into perf.db on open. */
|
|
625
338
|
export function getPerfSpoolPath() { return path.join(getPerfDir(), 'spool.jsonl'); }
|
|
626
|
-
/**
|
|
627
|
-
* Path to per-process runtime state (~/.agents/.cache/state/).
|
|
628
|
-
*
|
|
629
|
-
* `AGENTS_STATE_DIR` redirects it in tests — the same test-isolation escape
|
|
630
|
-
* hatch as `AGENTS_DEVICES_DIR` / `AGENTS_LOGS_DIR`, and resolved at call time
|
|
631
|
-
* for the same reason (a suite pins it after this module is imported).
|
|
632
|
-
*
|
|
633
|
-
* Without it the suite writes into the operator's LIVE state. Concretely: the
|
|
634
|
-
* device registry and ignore-list already redirect via `AGENTS_DEVICES_DIR`, so
|
|
635
|
-
* under test both read empty — and any code path reaching
|
|
636
|
-
* `reconcilePendingSentinels` then computed "every tailnet node is new" and
|
|
637
|
-
* wrote those sentinels into the real `devices-pending/`, which is exactly what
|
|
638
|
-
* the menu bar renders. Running the suite on a dev machine surfaced all 20
|
|
639
|
-
* tailnet nodes as NEW DEVICES, including registered and explicitly ignored
|
|
640
|
-
* ones, and looked like the operator's ignore list had been lost.
|
|
641
|
-
*/
|
|
642
339
|
export function getRuntimeStateDir() { return process.env.AGENTS_STATE_DIR ?? RUNTIME_STATE_DIR; }
|
|
643
|
-
/** Path to companion-extension scratch (~/.agents/.cache/companion/). */
|
|
644
340
|
export function getCompanionDir() { return COMPANION_CACHE_DIR; }
|
|
645
|
-
/** Path to browser runtime data — chrome-data, pids (~/.agents/.cache/browser/). */
|
|
646
341
|
export function getBrowserRuntimeDir() { return BROWSER_RUNTIME_DIR; }
|
|
647
|
-
/**
|
|
648
|
-
* Path to DURABLE browser-profile data (~/.agents/.history/browser-profiles/).
|
|
649
|
-
*
|
|
650
|
-
* This is the persistent home for an attach-only profile's `--user-data-dir` —
|
|
651
|
-
* where a one-time browser sign-in lives. It sits under `.history` (durable),
|
|
652
|
-
* NOT `.cache` (regenerable), for two reasons the ticket (PHNX-3967) named:
|
|
653
|
-
* - `agents browser profiles remove` sweeps `~/.agents/.cache/browser/<name>*`;
|
|
654
|
-
* a durable dir here survives that so logins are not wiped by a routine cleanup.
|
|
655
|
-
* - A cache wipe or the daemon reaper never touches it, so a signed-in Comet
|
|
656
|
-
* survives quit+relaunch.
|
|
657
|
-
* The user's canonical Comet is launched with this as `--user-data-dir`, and the
|
|
658
|
-
* ownership guard in the local driver compares the running instance's
|
|
659
|
-
* `--user-data-dir` against it to reject a foreign port-squatter.
|
|
660
|
-
*/
|
|
661
342
|
export function getBrowserDurableDir() { return path.join(HISTORY_DIR, 'browser-profiles'); }
|
|
662
|
-
/** Path to helper subprocess scratch (~/.agents/.cache/helpers/). */
|
|
663
343
|
export function getHelpersDir() { return HELPERS_DIR; }
|
|
664
|
-
/**
|
|
665
|
-
* Path to scheduler daemon scratch (~/.agents/.cache/helpers/daemon/) — holds
|
|
666
|
-
* the daemon pid file, heartbeat, start lock, and log. AGENTS_DAEMON_DIR
|
|
667
|
-
* redirects it to a fork-private temp so daemon tests (which write pid/heartbeat
|
|
668
|
-
* files and acquire the real start lock) can never clobber a live daemon's state
|
|
669
|
-
* on a dev machine — the surgical mirror of AGENTS_DEVICES_DIR /
|
|
670
|
-
* AGENTS_HOOK_SHIMS_DIR, leaving HOME untouched. Read at CALL time (daemon.ts
|
|
671
|
-
* resolves every path helper through this), so tests/setup.ts can set it before
|
|
672
|
-
* the daemon module is exercised. Never set in production code.
|
|
673
|
-
*/
|
|
674
344
|
export function getDaemonDir() { return process.env.AGENTS_DAEMON_DIR ?? DAEMON_DIR; }
|
|
675
|
-
/** Path to tmux scratch (~/.agents/.cache/helpers/tmux/) — shared server socket + per-session meta JSONs. */
|
|
676
345
|
export function getTmuxDir() { return TMUX_DIR; }
|
|
677
|
-
/** Path to remote-resource auto-pull cache (~/.agents/.cache/.fetch/). */
|
|
678
346
|
export function getFetchCacheDir() { return FETCH_CACHE_DIR; }
|
|
679
|
-
/** Path to the CLI version cache file (~/.agents/.cache/.cli-version-cache.json). */
|
|
680
347
|
export function getCliVersionCachePath() { return CLI_VERSION_CACHE_FILE; }
|
|
681
|
-
/** Path to the models cache file (~/.agents/.cache/.models-cache.json). */
|
|
682
348
|
export function getModelsCachePath() { return MODELS_CACHE_FILE; }
|
|
683
|
-
/** Path to the daily update-check sentinel (~/.agents/.cache/.update-check). */
|
|
684
349
|
export function getUpdateCheckPath() { return UPDATE_CHECK_FILE; }
|
|
685
|
-
/** Path to the migration sentinel (~/.agents/.cache/.migrated). */
|
|
686
350
|
export function getMigratedSentinelPath() { return MIGRATED_SENTINEL_FILE; }
|
|
687
|
-
/** Path to soft-deleted version dirs (~/.agents/trash/versions/). */
|
|
688
351
|
export function getTrashVersionsDir() { return path.join(TRASH_DIR, 'versions'); }
|
|
689
|
-
/** Path to soft-deleted skills (~/.agents/trash/skills/). */
|
|
690
352
|
export function getTrashSkillsDir() { return path.join(TRASH_DIR, 'skills'); }
|
|
691
|
-
/** Path to soft-deleted commands (~/.agents/trash/commands/). */
|
|
692
353
|
export function getTrashCommandsDir() { return path.join(TRASH_DIR, 'commands'); }
|
|
693
|
-
/** Path to soft-deleted hooks (~/.agents/trash/hooks/). */
|
|
694
354
|
export function getTrashHooksDir() { return path.join(TRASH_DIR, 'hooks'); }
|
|
695
|
-
/** Path to soft-deleted plugins (~/.agents/trash/plugins/). */
|
|
696
355
|
export function getTrashPluginsDir() { return path.join(TRASH_DIR, 'plugins'); }
|
|
697
|
-
/** Path to soft-deleted subagents (~/.agents/trash/subagents/). */
|
|
698
356
|
export function getTrashSubagentsDir() { return path.join(TRASH_DIR, 'subagents'); }
|
|
699
357
|
export function getTrashWorkflowsDir() { return path.join(TRASH_DIR, 'workflows'); }
|
|
700
|
-
/**
|
|
701
|
-
* Path to a single user-level extra DotAgent repo clone (~/.agents-<alias>/).
|
|
702
|
-
*
|
|
703
|
-
* Extra repos are user-defined config — they live as peer dirs to ~/.agents/,
|
|
704
|
-
* not under the system repo. `agents repo add` clones here by default.
|
|
705
|
-
*/
|
|
706
358
|
export function getExtraRepoDir(alias) {
|
|
707
359
|
return path.join(HOME, `.agents-${alias}`);
|
|
708
360
|
}
|
|
709
|
-
/** Resolve the on-disk path for an extra repo, whether managed or user-owned. */
|
|
710
361
|
export function resolveExtraRepoDir(alias, config) {
|
|
711
362
|
if (config?.path) {
|
|
712
363
|
return path.resolve(config.path);
|
|
713
364
|
}
|
|
714
365
|
return getExtraRepoDir(alias);
|
|
715
366
|
}
|
|
716
|
-
/**
|
|
717
|
-
* Return enabled extra repos that exist on disk, in insertion order.
|
|
718
|
-
*/
|
|
719
367
|
export function getEnabledExtraRepos() {
|
|
720
368
|
const meta = readMeta();
|
|
721
369
|
const extras = meta.extraRepos || {};
|
|
@@ -730,11 +378,8 @@ export function getEnabledExtraRepos() {
|
|
|
730
378
|
}
|
|
731
379
|
return out;
|
|
732
380
|
}
|
|
733
|
-
// ─── Directory setup ───────────────────────────────────────────────────────────
|
|
734
|
-
/** Create both the system and user directory trees if any subdirectories are missing. */
|
|
735
381
|
export function ensureAgentsDir() {
|
|
736
382
|
const opts = { recursive: true, mode: 0o700 };
|
|
737
|
-
// User repo — minimal scaffold (sub-dirs created on first write)
|
|
738
383
|
if (!fs.existsSync(USER_AGENTS_DIR)) {
|
|
739
384
|
fs.mkdirSync(USER_AGENTS_DIR, opts);
|
|
740
385
|
}
|
|
@@ -742,7 +387,6 @@ export function ensureAgentsDir() {
|
|
|
742
387
|
fs.chmodSync(USER_AGENTS_DIR, 0o700);
|
|
743
388
|
}
|
|
744
389
|
catch { }
|
|
745
|
-
// System repo plus user-level operational state
|
|
746
390
|
if (!fs.existsSync(SYSTEM_AGENTS_DIR)) {
|
|
747
391
|
fs.mkdirSync(SYSTEM_AGENTS_DIR, opts);
|
|
748
392
|
}
|
|
@@ -777,14 +421,11 @@ export function ensureAgentsDir() {
|
|
|
777
421
|
}
|
|
778
422
|
catch { }
|
|
779
423
|
}
|
|
780
|
-
// ─── Meta (agents.yaml) ────────────────────────────────────────────────────────
|
|
781
|
-
/** Return an empty Meta object used when no agents.yaml exists yet. */
|
|
782
424
|
export function createDefaultMeta() {
|
|
783
425
|
return {};
|
|
784
426
|
}
|
|
785
427
|
let metaCache = null;
|
|
786
428
|
let metaLockDepth = 0;
|
|
787
|
-
/** Return mtimeMs for a file path, or 0 if the file is absent or unreadable. */
|
|
788
429
|
function safeMtimeMs(filePath) {
|
|
789
430
|
try {
|
|
790
431
|
return fs.statSync(filePath).mtimeMs;
|
|
@@ -793,28 +434,12 @@ function safeMtimeMs(filePath) {
|
|
|
793
434
|
return 0;
|
|
794
435
|
}
|
|
795
436
|
}
|
|
796
|
-
/**
|
|
797
|
-
* Per-device machine-local version pins — `~/.agents/devices/<machine>/agents.yaml`.
|
|
798
|
-
* Committed and synced, but each machine only ever writes its OWN folder, so
|
|
799
|
-
* pulls never conflict. `<machine>` = machineId() (Tailscale-aligned short name).
|
|
800
|
-
*/
|
|
801
437
|
export function getDeviceMetaPath() {
|
|
802
438
|
return path.join(USER_AGENTS_DIR, 'devices', machineId(), 'agents.yaml');
|
|
803
439
|
}
|
|
804
|
-
/**
|
|
805
|
-
* Machine-local per-version resource tracking — `~/.agents/.history/version-resources.json`.
|
|
806
|
-
* Gitignored (under .history/) and regenerable; never synced.
|
|
807
|
-
*/
|
|
808
440
|
export function getVersionResourcesPath() {
|
|
809
441
|
return path.join(HISTORY_DIR, 'version-resources.json');
|
|
810
442
|
}
|
|
811
|
-
/**
|
|
812
|
-
* Combined cache stamp across all four Meta sources: central + system
|
|
813
|
-
* agents.yaml, this machine's device pins, and the version-resources tracking.
|
|
814
|
-
* A delimited string, NOT a numeric sum — summing down-scaled epoch-ms values
|
|
815
|
-
* loses precision (float64 rounds sub-unit terms away at ~1.75e12), so a change
|
|
816
|
-
* in any one file must contribute at full resolution.
|
|
817
|
-
*/
|
|
818
443
|
function currentMetaStamp() {
|
|
819
444
|
return safeMtimeMs(META_FILE)
|
|
820
445
|
+ '|' + safeMtimeMs(SYSTEM_META_FILE)
|
|
@@ -822,7 +447,6 @@ function currentMetaStamp() {
|
|
|
822
447
|
+ '|' + safeMtimeMs(getDevicePinsPath())
|
|
823
448
|
+ '|' + safeMtimeMs(getVersionResourcesPath());
|
|
824
449
|
}
|
|
825
|
-
/** Memoize a parsed Meta against the current file mtimes. */
|
|
826
450
|
function rememberMeta(meta) {
|
|
827
451
|
metaCache = { stamp: currentMetaStamp(), meta };
|
|
828
452
|
return meta;
|
|
@@ -849,101 +473,40 @@ export function withMetaLock(fn) {
|
|
|
849
473
|
}
|
|
850
474
|
});
|
|
851
475
|
}
|
|
852
|
-
/** Atomic write only when the on-disk content differs — avoids needless mtime
|
|
853
|
-
* bumps (which would thrash the meta cache) on no-op field routing. Returns
|
|
854
|
-
* whether it actually wrote, so a caller can react only to a real change (e.g.
|
|
855
|
-
* commit the central agents.yaml exactly when its bytes moved). */
|
|
856
476
|
function writeIfChanged(filePath, content) {
|
|
857
477
|
let current = null;
|
|
858
478
|
try {
|
|
859
479
|
current = fs.readFileSync(filePath, 'utf-8');
|
|
860
480
|
}
|
|
861
|
-
catch {
|
|
481
|
+
catch { }
|
|
862
482
|
if (current === content)
|
|
863
483
|
return false;
|
|
864
484
|
atomicWriteFileSync(filePath, content);
|
|
865
485
|
return true;
|
|
866
486
|
}
|
|
867
|
-
/**
|
|
868
|
-
* Commit the central `agents.yaml` in the user repo, synchronously, so a CLI
|
|
869
|
-
* config mutation never leaves the working tree dirty on that one shared-line
|
|
870
|
-
* file at rest.
|
|
871
|
-
*
|
|
872
|
-
* Why this exists: CLI config commands rewrite the fleet-shared central
|
|
873
|
-
* agents.yaml as a plain file write. Left uncommitted, the tree is dirty on
|
|
874
|
-
* agents.yaml between the write and the daemon's next 15-min publish tick — and
|
|
875
|
-
* a peer's incoming publish commit (which also touches agents.yaml) then trips
|
|
876
|
-
* `dirtyTreeRefusal` ("incoming changes touch uncommitted paths: agents.yaml"),
|
|
877
|
-
* wedging `agents repo pull` fleet-wide (PHNX-3968). Committing the central edit
|
|
878
|
-
* in the same command that made it closes that window: agents.yaml is clean at
|
|
879
|
-
* rest, so nothing incoming can collide with it. Called AFTER the meta lock
|
|
880
|
-
* releases (see {@link commitCentralConfigAfterWrite}) so the git subprocesses
|
|
881
|
-
* never run inside the short, non-heartbeated lockfile window; the user repo
|
|
882
|
-
* already pushes.
|
|
883
|
-
*
|
|
884
|
-
* Scoped tightly: only called when the central bytes actually changed — from a
|
|
885
|
-
* CLI command and from the daemon alike, since no daemon tick commits the user
|
|
886
|
-
* repo any more (the shared-state exchange moved to SSH, PHNX-4116), so a
|
|
887
|
-
* daemon-side central write would otherwise sit dirty until the next CLI
|
|
888
|
-
* central edit. A commit failure fails open —
|
|
889
|
-
* a concurrent daemon holding `index.lock`, a mid-rebase repo — leaving
|
|
890
|
-
* agents.yaml dirty; the next successful central write commits it, and until
|
|
891
|
-
* then a pull that would collide refuses rather than losing data. A config
|
|
892
|
-
* command must never fail because git hiccuped.
|
|
893
|
-
*
|
|
894
|
-
* Returns whether a commit was created. Exported for the real-repo tests.
|
|
895
|
-
*/
|
|
896
487
|
export function commitCentralConfig(userDir) {
|
|
897
488
|
const rel = 'agents.yaml';
|
|
898
489
|
try {
|
|
899
490
|
execFileSync('git', ['-C', userDir, 'rev-parse', '--is-inside-work-tree'], { stdio: 'ignore' });
|
|
900
491
|
}
|
|
901
492
|
catch {
|
|
902
|
-
return false;
|
|
493
|
+
return false;
|
|
903
494
|
}
|
|
904
495
|
try {
|
|
905
496
|
execFileSync('git', ['-C', userDir, 'add', '--', rel], { stdio: 'ignore' });
|
|
906
|
-
// Nothing staged for agents.yaml (its bytes matched HEAD after all) → no
|
|
907
|
-
// empty commit. `diff --cached --quiet` exits 0 when the index equals HEAD
|
|
908
|
-
// for this path, 1 when it differs.
|
|
909
497
|
try {
|
|
910
498
|
execFileSync('git', ['-C', userDir, 'diff', '--cached', '--quiet', '--', rel], { stdio: 'ignore' });
|
|
911
499
|
return false;
|
|
912
500
|
}
|
|
913
|
-
catch {
|
|
914
|
-
// Pathspec-scoped commit: records ONLY agents.yaml even if other paths are
|
|
915
|
-
// staged, so a config write never sweeps unrelated staged work into its commit.
|
|
501
|
+
catch { }
|
|
916
502
|
execFileSync('git', ['-C', userDir, '-c', 'commit.gpgsign=false', 'commit', '--no-verify',
|
|
917
503
|
'-m', 'chore(config): update agents.yaml', '--', rel], { stdio: 'ignore' });
|
|
918
504
|
return true;
|
|
919
505
|
}
|
|
920
506
|
catch {
|
|
921
|
-
return false;
|
|
507
|
+
return false;
|
|
922
508
|
}
|
|
923
509
|
}
|
|
924
|
-
/**
|
|
925
|
-
* Partition the in-memory Meta across four files by sync-domain:
|
|
926
|
-
* - central `~/.agents/agents.yaml` — portable, everything else
|
|
927
|
-
* (including the user-scope `config:` block and the fleet-wide
|
|
928
|
-
* config defaults under `fleet.defaults.config`)
|
|
929
|
-
* - device `~/.agents/devices/<machine>/agents.yaml` — TRACKED operator doc:
|
|
930
|
-
* `routines:` + `config:` (per-device operator settings) + machine-local
|
|
931
|
-
* `browser:` / `projectRoot` (never synced)
|
|
932
|
-
* - pins `~/.agents/.history/devices/pins-<host>.json` — `agents:` +
|
|
933
|
-
* `isolatedAgents:` (machine-local runtime, untracked)
|
|
934
|
-
* - history `~/.agents/.history/version-resources.json` — `versions:` (machine-local)
|
|
935
|
-
* All callers funnel through writeMeta → here, so nothing else changes. Empty
|
|
936
|
-
* `agents:` / `versions:` are not written (no empty committed files).
|
|
937
|
-
*/
|
|
938
|
-
/**
|
|
939
|
-
* Fleet-shared (`central`) Meta keys — the OPT-IN allowlist. A key listed here is
|
|
940
|
-
* written to the synced `~/.agents/agents.yaml`. Device-scope is the DEFAULT:
|
|
941
|
-
* {@link metaKeyScope} returns `'device'` for every Meta key NOT listed here, so a
|
|
942
|
-
* newly-added key can never SILENTLY churn the shared file the way a
|
|
943
|
-
* central-by-default would — the very trap behind the recurring agents.yaml churn.
|
|
944
|
-
* Making a key fleet-shared is now a deliberate edit HERE, not the path of least
|
|
945
|
-
* resistance (PHNX-3315).
|
|
946
|
-
*/
|
|
947
510
|
const CENTRAL_META_KEYS = [
|
|
948
511
|
'accounts',
|
|
949
512
|
'run',
|
|
@@ -968,16 +531,6 @@ const CENTRAL_META_KEYS = [
|
|
|
968
531
|
'share',
|
|
969
532
|
'notify',
|
|
970
533
|
];
|
|
971
|
-
/**
|
|
972
|
-
* Device-scoped Meta keys with BESPOKE routing — each lands in a special file
|
|
973
|
-
* (pins JSON / version-resources JSON) or a REMAPPED device-doc sub-block
|
|
974
|
-
* (`deviceHosts`->`hosts:`, `deviceFleet`->`fleet:`, ...), so their handling is
|
|
975
|
-
* hand-written in {@link writeMetaUnlocked} / {@link overlayMachineLocal} and kept
|
|
976
|
-
* behavior-identical. A device-scoped key NOT listed here is a GENERIC device key:
|
|
977
|
-
* it round-trips through `devices/<host>/agents.yaml` under its OWN name with no
|
|
978
|
-
* bespoke wiring (see the generic loops in those two functions). The `browser`
|
|
979
|
-
* tombstone is bespoke too — drained by lib/browser/registry.ts.
|
|
980
|
-
*/
|
|
981
534
|
const BESPOKE_DEVICE_KEYS = [
|
|
982
535
|
'agents',
|
|
983
536
|
'isolatedAgents',
|
|
@@ -993,28 +546,14 @@ const BESPOKE_DEVICE_KEYS = [
|
|
|
993
546
|
const CENTRAL_KEY_SET = new Set(CENTRAL_META_KEYS);
|
|
994
547
|
const _metaKeysAreExhaustive = true;
|
|
995
548
|
void _metaKeysAreExhaustive;
|
|
996
|
-
/**
|
|
997
|
-
* Sync-domain of a Meta key. `'central'` ONLY for the opt-in allowlist; `'device'`
|
|
998
|
-
* by DEFAULT for everything else — so the classification is authoritative (it
|
|
999
|
-
* DRIVES the generic device-doc router below) rather than a decorative string map,
|
|
1000
|
-
* and forgetting to classify a new key routes it to the SAFE per-box file.
|
|
1001
|
-
*/
|
|
1002
549
|
function metaKeyScope(key) {
|
|
550
|
+
// Central sync is an explicit allowlist; every other key remains machine-local.
|
|
1003
551
|
return CENTRAL_KEY_SET.has(key) ? 'central' : 'device';
|
|
1004
552
|
}
|
|
1005
|
-
/** Bespoke device keys as a runtime Set (the generic router skips these). */
|
|
1006
553
|
const BESPOKE_DEVICE_KEY_SET = new Set([
|
|
1007
554
|
...BESPOKE_DEVICE_KEYS,
|
|
1008
|
-
// The `browser` tombstone is device-scoped but bespoke: lib/browser/registry.ts
|
|
1009
|
-
// drains it (collision-checked) into deviceBrowser, so the generic router must
|
|
1010
|
-
// never blindly relocate it.
|
|
1011
555
|
'browser',
|
|
1012
556
|
]);
|
|
1013
|
-
/**
|
|
1014
|
-
* Device-doc sub-block names the read/write paths handle BESPOKE-ly (each maps to
|
|
1015
|
-
* a different `device*` Meta key, or lives in a separate file). The generic
|
|
1016
|
-
* device-doc overlay skips these so it only surfaces genuine generic keys.
|
|
1017
|
-
*/
|
|
1018
557
|
const BESPOKE_DEVICE_DOC_KEYS = new Set([
|
|
1019
558
|
'agents',
|
|
1020
559
|
'isolatedAgents',
|
|
@@ -1025,61 +564,18 @@ const BESPOKE_DEVICE_DOC_KEYS = new Set([
|
|
|
1025
564
|
'hosts',
|
|
1026
565
|
'accounts',
|
|
1027
566
|
'projectRoot',
|
|
1028
|
-
// Legacy top-level doc key the config migration folds into `config:`; never
|
|
1029
|
-
// surfaced onto Meta before, so keep the generic overlay from doing so.
|
|
1030
567
|
'defaultBrowserProfile',
|
|
1031
568
|
]);
|
|
1032
|
-
/**
|
|
1033
|
-
* Every key this version models (central + device). serializeCentral deletes an
|
|
1034
|
-
* on-disk key only when it is KNOWN and absent from the write's in-memory object:
|
|
1035
|
-
* a central key the caller cleared, OR a device key that is legacy cruft in the
|
|
1036
|
-
* synced file (device keys are routed to the per-machine file, so one lingering
|
|
1037
|
-
* in central is stale and must be migrated out). A key NOT listed here — e.g. one
|
|
1038
|
-
* a newer CLI version added — is preserved verbatim, never dropped + synced away.
|
|
1039
|
-
*/
|
|
1040
569
|
const KNOWN_META_KEYS = new Set([
|
|
1041
570
|
...CENTRAL_META_KEYS,
|
|
1042
571
|
...BESPOKE_DEVICE_KEYS,
|
|
1043
|
-
// Removed browser-profile store. Kept only as a serializer tombstone so the
|
|
1044
|
-
// first registry read can migrate it into this device's file and delete it.
|
|
1045
572
|
'browser',
|
|
1046
573
|
]);
|
|
1047
|
-
/**
|
|
1048
|
-
* Rewrite a frozen `agents.yaml` header to the current {@link META_HEADER}.
|
|
1049
|
-
*
|
|
1050
|
-
* `serializeCentral` parses the existing file to preserve its hand-written body
|
|
1051
|
-
* comments, but that also preserves the leading metadata header verbatim, so a
|
|
1052
|
-
* top-level file written before the agi-cli rename (or before the `$schema` line
|
|
1053
|
-
* existed) keeps its stale header forever — every freshly-written device doc gets
|
|
1054
|
-
* the current header while the shared file is left behind (PHNX-3315).
|
|
1055
|
-
*
|
|
1056
|
-
* The header is healed TEXTUALLY, on the already-serialized string, rather than
|
|
1057
|
-
* via `doc.commentBefore`: the `yaml` library folds the whole leading comment
|
|
1058
|
-
* block onto the FIRST key's `commentBefore` when that key already carries a
|
|
1059
|
-
* hand-written comment, so the header is not reliably the document comment — but
|
|
1060
|
-
* it is always the top block of the output. Strip a leading `agents-cli metadata`
|
|
1061
|
-
* header (any pre-rename variant, with or without the `$schema` line — the URL
|
|
1062
|
-
* and schema lines are matched specifically so a hand-written body comment is
|
|
1063
|
-
* never mistaken for a header line) and prepend the canonical header. A file with
|
|
1064
|
-
* no recognizable header simply gains one. Body comments, which sit below the
|
|
1065
|
-
* blank line that terminates the header, are untouched.
|
|
1066
|
-
*/
|
|
1067
574
|
function healMetaHeader(serialized) {
|
|
1068
575
|
const headerBlock = /^# agents-cli metadata\n# Auto-generated - do not edit manually\n(?:# (?:https:\/\/github\.com\/phnx-labs\/[^\n]*|yaml-language-server: \$schema=[^\n]*)\n)*\n?/;
|
|
1069
576
|
const stripped = serialized.replace(headerBlock, '');
|
|
1070
|
-
// No metadata header present (replace was a no-op) → leave the file exactly as
|
|
1071
|
-
// it is. We heal a STALE header; we never prepend one to a file that never had
|
|
1072
|
-
// it (that would rewrite a hand-authored, headerless central file on the first
|
|
1073
|
-
// real central change). A current header round-trips to the identical bytes.
|
|
1074
577
|
return stripped === serialized ? serialized : META_HEADER + stripped;
|
|
1075
578
|
}
|
|
1076
|
-
/**
|
|
1077
|
-
* True when the top-level `~/.agents/agents.yaml` carries a metadata header that
|
|
1078
|
-
* is NOT the canonical {@link META_HEADER} — the P1 frozen-header case a box only
|
|
1079
|
-
* heals on its next central write (serializeCentral). An absent or headerless
|
|
1080
|
-
* file is NOT stale (a headerless central file is deliberately left alone).
|
|
1081
|
-
* Surfaced as config drift by `agents sync status` (PHNX-3315).
|
|
1082
|
-
*/
|
|
1083
579
|
export function hasStaleMetaHeader() {
|
|
1084
580
|
let content;
|
|
1085
581
|
try {
|
|
@@ -1090,13 +586,6 @@ export function hasStaleMetaHeader() {
|
|
|
1090
586
|
}
|
|
1091
587
|
return healMetaHeader(content) !== content;
|
|
1092
588
|
}
|
|
1093
|
-
/**
|
|
1094
|
-
* Parse the top-level user `agents.yaml` (this box's synced central file) WITHOUT
|
|
1095
|
-
* the system-repo merge, machine-local overlay, or cache — the raw on-disk central
|
|
1096
|
-
* map, or null when the file is absent/unparseable. Used by config-drift detection
|
|
1097
|
-
* to see the central blocks that should have folded into the device doc, without
|
|
1098
|
-
* mis-attributing a system-repo default as this box's own leak (PHNX-3315).
|
|
1099
|
-
*/
|
|
1100
589
|
export function readTopLevelUserMeta() {
|
|
1101
590
|
let content;
|
|
1102
591
|
try {
|
|
@@ -1111,46 +600,22 @@ export function readTopLevelUserMeta() {
|
|
|
1111
600
|
return parsed;
|
|
1112
601
|
}
|
|
1113
602
|
}
|
|
1114
|
-
catch {
|
|
603
|
+
catch { }
|
|
1115
604
|
return null;
|
|
1116
605
|
}
|
|
1117
|
-
/**
|
|
1118
|
-
* Top-level keys currently on disk in the central `agents.yaml` ({} when the file
|
|
1119
|
-
* is absent or unparseable). The generic device-doc router uses this to leave a
|
|
1120
|
-
* FOREIGN key — one this version does not model, already written to central by a
|
|
1121
|
-
* newer CLI — in place instead of relocating it to this box's device doc.
|
|
1122
|
-
*/
|
|
1123
606
|
function readCentralKeys() {
|
|
1124
607
|
return new Set(Object.keys(readTopLevelUserMeta() ?? {}));
|
|
1125
608
|
}
|
|
1126
|
-
/**
|
|
1127
|
-
* Serialize the central (synced) meta to `agents.yaml` WITHOUT destroying the
|
|
1128
|
-
* hand-written comments in the committed file.
|
|
1129
|
-
*
|
|
1130
|
-
* `yaml.stringify(central)` drops every comment, so the freshly-written bytes
|
|
1131
|
-
* never equal the comment-annotated file on disk — `writeIfChanged`'s byte
|
|
1132
|
-
* compare then rewrites on EVERY meta write, leaving `agents.yaml` perpetually
|
|
1133
|
-
* dirty and wedging `agents sync` ("Blocked by local changes"). Instead we parse
|
|
1134
|
-
* the existing file into a `yaml.Document` (which preserves comments + ordering)
|
|
1135
|
-
* and edit only the keys that actually changed — untouched keys, and all their
|
|
1136
|
-
* comments, are left byte-stable. If nothing central changed we return the exact
|
|
1137
|
-
* existing bytes, so a device-field-only write no longer touches `agents.yaml` at
|
|
1138
|
-
* all. Falls back to plain stringify only when the file doesn't exist yet.
|
|
1139
|
-
*/
|
|
1140
609
|
function serializeCentral(central) {
|
|
610
|
+
// Preserve unknown central keys so an older binary cannot sync away newer data.
|
|
1141
611
|
const isEmpty = Object.keys(central).length === 0;
|
|
1142
612
|
let existing = null;
|
|
1143
613
|
try {
|
|
1144
614
|
existing = fs.readFileSync(META_FILE, 'utf-8');
|
|
1145
615
|
}
|
|
1146
616
|
catch {
|
|
1147
|
-
/* first write — no file yet */
|
|
1148
617
|
}
|
|
1149
618
|
if (existing == null) {
|
|
1150
|
-
// Empty central → header only. `yaml.stringify({})` emits `{}` (a FLOW empty
|
|
1151
|
-
// map); once that lands on disk, a later parseDocument sees a flow root and
|
|
1152
|
-
// doc.set() below would inherit flow, flow-ifying the whole file. Writing just
|
|
1153
|
-
// the header avoids seeding that poison.
|
|
1154
619
|
return isEmpty ? META_HEADER : META_HEADER + yaml.stringify(central);
|
|
1155
620
|
}
|
|
1156
621
|
const doc = yaml.parseDocument(existing);
|
|
@@ -1163,58 +628,19 @@ function serializeCentral(central) {
|
|
|
1163
628
|
}
|
|
1164
629
|
}
|
|
1165
630
|
for (const k of Object.keys(current)) {
|
|
1166
|
-
// Only delete a key THIS version knows about. A key not in KNOWN_META_KEYS
|
|
1167
|
-
// (e.g. one a newer CLI version added) is preserved verbatim — deleting it
|
|
1168
|
-
// here would drop it and sync the deletion fleet-wide (the agents.yaml
|
|
1169
|
-
// config data-loss bug). A known device key lingering in the synced file is
|
|
1170
|
-
// still removed — it belongs in the per-machine file, not here.
|
|
1171
631
|
if (!(k in central) && KNOWN_META_KEYS.has(k)) {
|
|
1172
|
-
// RUSH-2837: a partial writeMeta (reconstructed Meta missing `share`)
|
|
1173
|
-
// deleted the share endpoint from agents.yaml and synced that deletion
|
|
1174
|
-
// fleet-wide. `share` is restored only by setup/join — never drop it
|
|
1175
|
-
// just because this write omitted the key. Explicit `share: null` still
|
|
1176
|
-
// goes through doc.set above.
|
|
1177
632
|
if (k === 'share')
|
|
1178
633
|
continue;
|
|
1179
634
|
doc.delete(k);
|
|
1180
635
|
changed = true;
|
|
1181
636
|
}
|
|
1182
637
|
}
|
|
1183
|
-
// No central field changed → keep the file byte-identical (comments intact), so
|
|
1184
|
-
// writeIfChanged skips it and the churn loop never starts. A device-only write
|
|
1185
|
-
// (pins/routines/etc. routed elsewhere) reaches here with changed=false and
|
|
1186
|
-
// MUST NOT rewrite the shared file — header healing waits for a genuine central
|
|
1187
|
-
// change below rather than dirtying agents.yaml on an unrelated write, which is
|
|
1188
|
-
// the very churn that wedges `agents sync` and blocks fleet pulls.
|
|
1189
638
|
if (!changed)
|
|
1190
639
|
return existing;
|
|
1191
|
-
// Everything cleared → header only (never leave a flow `{}` behind). Byte-stable
|
|
1192
|
-
// when the file is already exactly the current header.
|
|
1193
640
|
if (isEmpty)
|
|
1194
641
|
return existing === META_HEADER ? existing : META_HEADER;
|
|
1195
|
-
// A central key changed: serialize the edited doc and heal a frozen header on
|
|
1196
|
-
// the result. stringifyDoc still normalizes a legacy flow root (`{}`) to block,
|
|
1197
|
-
// so edited nodes do not render flow (`disabledCommands: [ teams ]` instead of a
|
|
1198
|
-
// `- teams` block list), but it no longer forces block on a normal document —
|
|
1199
|
-
// that flattened committed flow sequences and made this writer disagree with
|
|
1200
|
-
// feed.ts/activity.ts/migrate.ts on the same file (RUSH-2505). parseDocument
|
|
1201
|
-
// still preserves body comments + key ordering; healMetaHeader is a no-op unless
|
|
1202
|
-
// a stale metadata header is actually present, so a headerless central file is
|
|
1203
|
-
// updated in place without gaining one.
|
|
1204
642
|
return healMetaHeader(stringifyDoc(doc));
|
|
1205
643
|
}
|
|
1206
|
-
/**
|
|
1207
|
-
* Write `meta` to disk (central + device docs + pins) WITHOUT taking the meta
|
|
1208
|
-
* lock — the caller must already hold it via {@link withMetaLock}. Exported so a
|
|
1209
|
-
* writer that needs to read fresh state, decide, and commit within a SINGLE lock
|
|
1210
|
-
* acquisition (e.g. browser tombstone eviction) can do so without the
|
|
1211
|
-
* read-snapshot-then-separately-lock race that {@link updateMeta} would impose.
|
|
1212
|
-
*
|
|
1213
|
-
* Returns whether the central `agents.yaml` bytes actually changed, so the
|
|
1214
|
-
* caller can commit it once — {@link commitCentralConfig} — AFTER releasing the
|
|
1215
|
-
* meta lock (the git subprocesses must not run inside the short, non-heartbeated
|
|
1216
|
-
* lockfile window). This function never commits.
|
|
1217
|
-
*/
|
|
1218
644
|
export function writeMetaUnlocked(meta) {
|
|
1219
645
|
const writesDeviceRoutines = Object.prototype.hasOwnProperty.call(meta, 'deviceRoutines');
|
|
1220
646
|
const writesDeviceConfig = Object.prototype.hasOwnProperty.call(meta, 'deviceConfig');
|
|
@@ -1223,23 +649,9 @@ export function writeMetaUnlocked(meta) {
|
|
|
1223
649
|
const writesDeviceHosts = Object.prototype.hasOwnProperty.call(meta, 'deviceHosts');
|
|
1224
650
|
const writesDeviceAccounts = Object.prototype.hasOwnProperty.call(meta, 'deviceAccounts');
|
|
1225
651
|
const writesProjectRoot = Object.prototype.hasOwnProperty.call(meta, 'projectRoot');
|
|
1226
|
-
// INVARIANT: every key destructured here must also be in BESPOKE_DEVICE_KEYS (and
|
|
1227
|
-
// vice versa) — a bespoke device key that is classified but NOT pulled out here
|
|
1228
|
-
// would fall into `central`, and the generic router skips it (BESPOKE_DEVICE_KEY_SET),
|
|
1229
|
-
// so it would silently sync to the shared file. Keep the two lists in lockstep.
|
|
1230
652
|
const { agents, isolatedAgents, versions, deviceRoutines, deviceConfig, deviceBrowser, deviceFleet, deviceHosts, deviceAccounts, projectRoot, ...central } = meta;
|
|
1231
|
-
// Write the machine-local files FIRST, then strip central — so a crash mid-write
|
|
1232
|
-
// never removes pins/versions from central before they're persisted elsewhere.
|
|
1233
653
|
const hasAgents = !!agents && Object.keys(agents).length > 0;
|
|
1234
|
-
// The isolated pointer names a version installed on THIS machine, exactly like a
|
|
1235
|
-
// global pin, so it belongs beside `agents` in the pins file rather than in the
|
|
1236
|
-
// central doc that syncs — otherwise another machine inherits a pointer to a copy
|
|
1237
|
-
// it does not have.
|
|
1238
654
|
const hasIsolatedAgents = !!isolatedAgents && Object.keys(isolatedAgents).length > 0;
|
|
1239
|
-
// Pins (`agents:` defaults + `isolatedAgents:`) are machine-local runtime
|
|
1240
|
-
// state — they live in the untracked .history pins JSON, never in the tracked
|
|
1241
|
-
// per-device doc (auto-written pins there caused commit churn on every
|
|
1242
|
-
// `agents use` / install).
|
|
1243
655
|
const pinsPath = getDevicePinsPath();
|
|
1244
656
|
if (hasAgents || hasIsolatedAgents) {
|
|
1245
657
|
const pins = {};
|
|
@@ -1251,18 +663,8 @@ export function writeMetaUnlocked(meta) {
|
|
|
1251
663
|
writeIfChanged(pinsPath, JSON.stringify(pins, null, 2) + '\n');
|
|
1252
664
|
}
|
|
1253
665
|
else if (fs.existsSync(pinsPath)) {
|
|
1254
|
-
// Every pin was cleared. Persist the emptied file instead of skipping the
|
|
1255
|
-
// write — otherwise the stale pins file survives and overlayMachineLocal
|
|
1256
|
-
// re-applies the removed pin on the next read.
|
|
1257
666
|
writeIfChanged(pinsPath, '{}\n');
|
|
1258
667
|
}
|
|
1259
|
-
// The tracked per-device doc carries operator-owned fields: `routines:`
|
|
1260
|
-
// (device-local activation) from here, `config:` from lib/device-config.ts,
|
|
1261
|
-
// and machine-local browser defaults / projectRoot (never fleet policy).
|
|
1262
|
-
// Merge over the existing doc so a `config:` block written outside this path
|
|
1263
|
-
// is never clobbered. Pins are stripped defensively — they belong to the pins
|
|
1264
|
-
// file now (the migration strips them too; a hand-edited doc converges on the
|
|
1265
|
-
// next write).
|
|
1266
668
|
const devicePath = getDeviceMetaPath();
|
|
1267
669
|
let doc = {};
|
|
1268
670
|
if (fs.existsSync(devicePath)) {
|
|
@@ -1272,7 +674,7 @@ export function writeMetaUnlocked(meta) {
|
|
|
1272
674
|
doc = parsed;
|
|
1273
675
|
}
|
|
1274
676
|
}
|
|
1275
|
-
catch {
|
|
677
|
+
catch { }
|
|
1276
678
|
}
|
|
1277
679
|
delete doc.agents;
|
|
1278
680
|
delete doc.isolatedAgents;
|
|
@@ -1290,10 +692,6 @@ export function writeMetaUnlocked(meta) {
|
|
|
1290
692
|
doc.browser = deviceBrowser;
|
|
1291
693
|
else if (writesDeviceBrowser)
|
|
1292
694
|
delete doc.browser;
|
|
1293
|
-
// PHNX-3315 device-scoped fleet/hosts/accounts blocks. Each is this box's OWN
|
|
1294
|
-
// slice; the effective fleet view is unioned across every device doc at read
|
|
1295
|
-
// time (lib/devices/device-docs.ts). Empty slices are dropped so a box that
|
|
1296
|
-
// has made no decision leaves no key behind (no committed empty maps).
|
|
1297
695
|
const fleetDiscovery = deviceFleet?.discovery && Object.keys(deviceFleet.discovery).length > 0
|
|
1298
696
|
? deviceFleet.discovery : undefined;
|
|
1299
697
|
const fleetIgnored = deviceFleet?.ignored && deviceFleet.ignored.length > 0
|
|
@@ -1317,11 +715,8 @@ export function writeMetaUnlocked(meta) {
|
|
|
1317
715
|
? deviceAccounts.native : undefined;
|
|
1318
716
|
const accountsBindings = deviceAccounts?.bindings && Object.keys(deviceAccounts.bindings).length > 0
|
|
1319
717
|
? deviceAccounts.bindings : undefined;
|
|
1320
|
-
// This box's account⇄home map (PHNX-3940) is device-scoped, so it round-trips
|
|
1321
|
-
// through the device doc alongside native/bindings, never the synced central file.
|
|
1322
718
|
const accountsHomes = deviceAccounts?.homes && Object.keys(deviceAccounts.homes).length > 0
|
|
1323
719
|
? deviceAccounts.homes : undefined;
|
|
1324
|
-
// In-flight connect attempts (PHNX-3940), device-scoped like homes.
|
|
1325
720
|
const accountsPending = deviceAccounts?.pendingConnects && Object.keys(deviceAccounts.pendingConnects).length > 0
|
|
1326
721
|
? deviceAccounts.pendingConnects : undefined;
|
|
1327
722
|
const accountsSlots = deviceAccounts?.slots && Object.keys(deviceAccounts.slots).length > 0
|
|
@@ -1347,24 +742,15 @@ export function writeMetaUnlocked(meta) {
|
|
|
1347
742
|
doc.projectRoot = projectRoot;
|
|
1348
743
|
else if (writesProjectRoot)
|
|
1349
744
|
delete doc.projectRoot;
|
|
1350
|
-
// Generic device-scoped keys (PHNX-3315): any key left in `central` that this
|
|
1351
|
-
// version classifies as device but does NOT bespoke-route round-trips through
|
|
1352
|
-
// this box's device doc under its OWN name — so a NEWLY DECLARED device-scoped
|
|
1353
|
-
// key lands per-box BY DEFAULT, with no bespoke wiring, and never reaches the
|
|
1354
|
-
// synced central file. Today the bespoke set covers every device key, so this
|
|
1355
|
-
// loop moves nothing (behavior-identical). A key that is UNKNOWN to this version
|
|
1356
|
-
// AND already present in the on-disk central file is a FOREIGN key a newer CLI
|
|
1357
|
-
// wrote as central — left in `central` and preserved verbatim by serializeCentral
|
|
1358
|
-
// (the fleet-wide config-loss guard), never relocated to this box's doc.
|
|
1359
745
|
const centralRecord = central;
|
|
1360
746
|
const onDiskCentralKeys = readCentralKeys();
|
|
1361
747
|
for (const k of Object.keys(centralRecord)) {
|
|
1362
748
|
if (metaKeyScope(k) !== 'device')
|
|
1363
|
-
continue;
|
|
749
|
+
continue;
|
|
1364
750
|
if (BESPOKE_DEVICE_KEY_SET.has(k))
|
|
1365
|
-
continue;
|
|
751
|
+
continue;
|
|
1366
752
|
if (!KNOWN_META_KEYS.has(k) && onDiskCentralKeys.has(k))
|
|
1367
|
-
continue;
|
|
753
|
+
continue;
|
|
1368
754
|
doc[k] = centralRecord[k];
|
|
1369
755
|
delete centralRecord[k];
|
|
1370
756
|
}
|
|
@@ -1373,13 +759,11 @@ export function writeMetaUnlocked(meta) {
|
|
|
1373
759
|
writeIfChanged(devicePath, META_HEADER + yaml.stringify(doc));
|
|
1374
760
|
}
|
|
1375
761
|
else if (fs.existsSync(devicePath)) {
|
|
1376
|
-
// Nothing operator-owned remains — remove the doc rather than leaving an
|
|
1377
|
-
// empty tracked file behind.
|
|
1378
762
|
fs.rmSync(devicePath, { force: true });
|
|
1379
763
|
try {
|
|
1380
764
|
fs.rmdirSync(path.dirname(devicePath));
|
|
1381
765
|
}
|
|
1382
|
-
catch {
|
|
766
|
+
catch { }
|
|
1383
767
|
}
|
|
1384
768
|
if (versions && Object.keys(versions).length > 0) {
|
|
1385
769
|
const vrPath = getVersionResourcesPath();
|
|
@@ -1390,17 +774,6 @@ export function writeMetaUnlocked(meta) {
|
|
|
1390
774
|
metaCache = null;
|
|
1391
775
|
return centralChanged;
|
|
1392
776
|
}
|
|
1393
|
-
/**
|
|
1394
|
-
* Overlay this machine's local state onto a central-portable Meta:
|
|
1395
|
-
* - `agents:` and `isolatedAgents:` from the pins file (device wins; the union
|
|
1396
|
-
* both preserves the one-level merge and self-heals a pre-migration central that
|
|
1397
|
-
* still has pins)
|
|
1398
|
-
* - `routines:` / machine-local `browser:` / `projectRoot` from the tracked device
|
|
1399
|
-
* doc (device-local; the doc's `config:` block is read by lib/device-config.ts,
|
|
1400
|
-
* not overlaid here)
|
|
1401
|
-
* - `versions:` from the history JSON (wholesale replace; falls back to
|
|
1402
|
-
* whatever central carried when the history file doesn't exist yet)
|
|
1403
|
-
*/
|
|
1404
777
|
function overlayMachineLocal(meta) {
|
|
1405
778
|
const pinsPath = getDevicePinsPath();
|
|
1406
779
|
if (fs.existsSync(pinsPath)) {
|
|
@@ -1411,7 +784,7 @@ function overlayMachineLocal(meta) {
|
|
|
1411
784
|
if (pins?.isolatedAgents)
|
|
1412
785
|
meta.isolatedAgents = { ...meta.isolatedAgents, ...pins.isolatedAgents };
|
|
1413
786
|
}
|
|
1414
|
-
catch {
|
|
787
|
+
catch { }
|
|
1415
788
|
}
|
|
1416
789
|
const devicePath = getDeviceMetaPath();
|
|
1417
790
|
if (fs.existsSync(devicePath)) {
|
|
@@ -1419,11 +792,8 @@ function overlayMachineLocal(meta) {
|
|
|
1419
792
|
try {
|
|
1420
793
|
dm = yaml.parse(fs.readFileSync(devicePath, 'utf-8'));
|
|
1421
794
|
}
|
|
1422
|
-
catch {
|
|
795
|
+
catch { }
|
|
1423
796
|
if (dm) {
|
|
1424
|
-
// Pre-migration pins may still live in the tracked doc — honor them until
|
|
1425
|
-
// migrateDeviceConfigStores strips them. Pins-file values already applied
|
|
1426
|
-
// above win on key conflict.
|
|
1427
797
|
if (dm?.agents)
|
|
1428
798
|
meta.agents = { ...dm.agents, ...meta.agents };
|
|
1429
799
|
if (dm?.isolatedAgents)
|
|
@@ -1436,15 +806,6 @@ function overlayMachineLocal(meta) {
|
|
|
1436
806
|
if (dm?.config && typeof dm.config === 'object' && !Array.isArray(dm.config)) {
|
|
1437
807
|
meta.deviceConfig = { ...meta.deviceConfig, ...dm.config };
|
|
1438
808
|
}
|
|
1439
|
-
// PHNX-3315: this box's own device-scoped fleet/hosts/accounts slices.
|
|
1440
|
-
// These populate the `device*` keys the writers read-modify-write; the
|
|
1441
|
-
// effective UNION across all boxes is computed separately by
|
|
1442
|
-
// lib/devices/device-docs.ts, not here (this overlay is this box only).
|
|
1443
|
-
// A malformed block on THIS box's own doc is a HARD error, exactly like
|
|
1444
|
-
// `routines` below and the cross-box union readers (device-docs.ts): a
|
|
1445
|
-
// silent drop would let the next writeMetaUnlocked round-trip overwrite the
|
|
1446
|
-
// whole block with just the new entry, discarding the rest on this box's
|
|
1447
|
-
// tracked file (PHNX-3315).
|
|
1448
809
|
const isMap = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
1449
810
|
const dmRaw = dm;
|
|
1450
811
|
if (dmRaw.fleet !== undefined) {
|
|
@@ -1500,10 +861,6 @@ function overlayMachineLocal(meta) {
|
|
|
1500
861
|
}
|
|
1501
862
|
meta.deviceRoutines = dm.routines;
|
|
1502
863
|
}
|
|
1503
|
-
// Generic device-scoped keys (PHNX-3315): device-doc keys this overlay does
|
|
1504
|
-
// NOT bespoke-handle map straight back onto Meta under their own name —
|
|
1505
|
-
// symmetry with the generic write in writeMetaUnlocked. The bespoke sub-blocks
|
|
1506
|
-
// are handled above and skipped, so a stock device doc surfaces nothing extra.
|
|
1507
864
|
for (const [k, v] of Object.entries(dm)) {
|
|
1508
865
|
if (BESPOKE_DEVICE_DOC_KEYS.has(k))
|
|
1509
866
|
continue;
|
|
@@ -1518,14 +875,10 @@ function overlayMachineLocal(meta) {
|
|
|
1518
875
|
if (vr)
|
|
1519
876
|
meta.versions = vr;
|
|
1520
877
|
}
|
|
1521
|
-
catch {
|
|
878
|
+
catch { }
|
|
1522
879
|
}
|
|
1523
880
|
return meta;
|
|
1524
881
|
}
|
|
1525
|
-
/**
|
|
1526
|
-
* One-shot migration: move agents.yaml from system repo to user repo.
|
|
1527
|
-
* Idempotent — no-ops if user file already exists or system file absent.
|
|
1528
|
-
*/
|
|
1529
882
|
function migrateSystemMetaToUser() {
|
|
1530
883
|
if (fs.existsSync(META_FILE))
|
|
1531
884
|
return;
|
|
@@ -1539,39 +892,18 @@ function migrateSystemMetaToUser() {
|
|
|
1539
892
|
console.log('Migrated agents.yaml to ~/.agents/');
|
|
1540
893
|
}
|
|
1541
894
|
catch {
|
|
1542
|
-
// Best-effort; proceed with fresh state if it fails.
|
|
1543
895
|
}
|
|
1544
896
|
}
|
|
1545
|
-
/**
|
|
1546
|
-
* Read and cache ~/.agents/agents.yaml, migrating from legacy locations if needed.
|
|
1547
|
-
*
|
|
1548
|
-
* Cache invariants:
|
|
1549
|
-
* - Cache key is the mtime of the user agents.yaml.
|
|
1550
|
-
* - `writeMetaUnlocked` clears the cache; in-process callers always see fresh state.
|
|
1551
|
-
* - If the file is mutated by ANOTHER process while we hold a stale cache, the
|
|
1552
|
-
* mtime check below catches it on the next read (assuming the mtime advanced).
|
|
1553
|
-
* - The cache stores the merged system+user meta; both files' mtimes contribute.
|
|
1554
|
-
*/
|
|
1555
897
|
export function readMeta(options = {}) {
|
|
1556
898
|
const migrate = options.migrate !== false;
|
|
1557
899
|
if (migrate)
|
|
1558
900
|
ensureAgentsDir();
|
|
1559
|
-
// A preview must not suppress a later real migration by populating its cache.
|
|
1560
901
|
const remember = (meta) => migrate ? rememberMeta(meta) : meta;
|
|
1561
|
-
// Fast path: serve from cache when both source files are byte-identical to
|
|
1562
|
-
// what we last parsed. Reduces N readMeta calls per CLI invocation to ~2 stat
|
|
1563
|
-
// syscalls plus an in-memory object spread.
|
|
1564
902
|
if (migrate && metaCache) {
|
|
1565
903
|
if (currentMetaStamp() === metaCache.stamp) {
|
|
1566
904
|
return metaCache.meta;
|
|
1567
905
|
}
|
|
1568
906
|
}
|
|
1569
|
-
// NOTE: agents.yaml migration from ~/.agents-system/ to ~/.agents/ is handled
|
|
1570
|
-
// exclusively by runMigration() in migrate.ts, called from postinstall and
|
|
1571
|
-
// from a one-shot bootstrap step in src/index.ts. Calling it here would
|
|
1572
|
-
// mutate real-user filesystem state during test runs that import this
|
|
1573
|
-
// module, causing cross-test pollution.
|
|
1574
|
-
// Legacy migration: check for old meta.yaml in system dir
|
|
1575
907
|
const oldMetaFile = path.join(SYSTEM_AGENTS_DIR, 'meta.yaml');
|
|
1576
908
|
if (fs.existsSync(oldMetaFile) && !fs.existsSync(META_FILE)) {
|
|
1577
909
|
try {
|
|
@@ -1590,28 +922,18 @@ export function readMeta(options = {}) {
|
|
|
1590
922
|
if (parsed.registries) {
|
|
1591
923
|
meta.registries = parsed.registries;
|
|
1592
924
|
}
|
|
1593
|
-
// Lock-safe, commit-free write: withMetaLock is reentrant (see
|
|
1594
|
-
// metaLockDepth), so this writes under the lock when called standalone and
|
|
1595
|
-
// is a no-op re-entry when readMeta runs inside updateMeta/writeMeta's held
|
|
1596
|
-
// lock — and writeMetaUnlocked never spawns git. Calling the PUBLIC
|
|
1597
|
-
// writeMeta here would run commit-on-write's git subprocess inside a held,
|
|
1598
|
-
// non-heartbeated lock. This one-shot legacy migration needs no synchronous
|
|
1599
|
-
// commit: it self-heals on the daemon's next publish tick or the next real
|
|
1600
|
-
// CLI central write.
|
|
1601
925
|
if (migrate) {
|
|
1602
926
|
withMetaLock(() => writeMetaUnlocked(meta));
|
|
1603
927
|
try {
|
|
1604
928
|
fs.unlinkSync(oldMetaFile);
|
|
1605
929
|
}
|
|
1606
|
-
catch {
|
|
930
|
+
catch { }
|
|
1607
931
|
}
|
|
1608
932
|
return remember(meta);
|
|
1609
933
|
}
|
|
1610
934
|
catch {
|
|
1611
|
-
/* meta.yaml migration failed */
|
|
1612
935
|
}
|
|
1613
936
|
}
|
|
1614
|
-
// Merge agents.yaml from both system and user repos. User repo wins on conflicts.
|
|
1615
937
|
let systemMeta = null;
|
|
1616
938
|
let userMeta = null;
|
|
1617
939
|
if (fs.existsSync(SYSTEM_META_FILE)) {
|
|
@@ -1619,17 +941,16 @@ export function readMeta(options = {}) {
|
|
|
1619
941
|
const content = fs.readFileSync(SYSTEM_META_FILE, 'utf-8');
|
|
1620
942
|
systemMeta = yaml.parse(content);
|
|
1621
943
|
}
|
|
1622
|
-
catch {
|
|
944
|
+
catch { }
|
|
1623
945
|
}
|
|
1624
946
|
if (fs.existsSync(META_FILE)) {
|
|
1625
947
|
try {
|
|
1626
948
|
const content = fs.readFileSync(META_FILE, 'utf-8');
|
|
1627
949
|
userMeta = yaml.parse(content);
|
|
1628
950
|
}
|
|
1629
|
-
catch {
|
|
951
|
+
catch { }
|
|
1630
952
|
}
|
|
1631
953
|
if (systemMeta || userMeta) {
|
|
1632
|
-
// Merge: system as base, user overwrites
|
|
1633
954
|
const base = createDefaultMeta();
|
|
1634
955
|
const meta = {
|
|
1635
956
|
...base,
|
|
@@ -1637,7 +958,6 @@ export function readMeta(options = {}) {
|
|
|
1637
958
|
...userMeta,
|
|
1638
959
|
agents: { ...systemMeta?.agents, ...userMeta?.agents },
|
|
1639
960
|
};
|
|
1640
|
-
// Merge registries carefully to preserve type
|
|
1641
961
|
if (systemMeta?.registries || userMeta?.registries) {
|
|
1642
962
|
meta.registries = {
|
|
1643
963
|
...base.registries,
|
|
@@ -1652,12 +972,10 @@ export function readMeta(options = {}) {
|
|
|
1652
972
|
overlayMachineLocal(meta);
|
|
1653
973
|
return remember(meta);
|
|
1654
974
|
}
|
|
1655
|
-
/** Serialize and write agents.yaml to the user repo, invalidating the in-memory cache. */
|
|
1656
975
|
export function writeMeta(meta) {
|
|
1657
976
|
const centralChanged = withMetaLock(() => writeMetaUnlocked(meta));
|
|
1658
977
|
commitCentralConfigAfterWrite(centralChanged);
|
|
1659
978
|
}
|
|
1660
|
-
/** Update agents.yaml under lock and return the new state. */
|
|
1661
979
|
export function updateMeta(updates) {
|
|
1662
980
|
let centralChanged = false;
|
|
1663
981
|
const newMeta = withMetaLock(() => {
|
|
@@ -1671,19 +989,10 @@ export function updateMeta(updates) {
|
|
|
1671
989
|
commitCentralConfigAfterWrite(centralChanged);
|
|
1672
990
|
return newMeta;
|
|
1673
991
|
}
|
|
1674
|
-
/**
|
|
1675
|
-
* Commit-on-write, invoked AFTER {@link withMetaLock} releases so the git
|
|
1676
|
-
* subprocesses never run inside the short, non-heartbeated meta-lock window.
|
|
1677
|
-
* A CLI command that actually moved the fleet-shared central agents.yaml commits
|
|
1678
|
-
* it so the tree is never left dirty on that file at rest — the window that
|
|
1679
|
-
* trips `dirtyTreeRefusal` and wedges pulls fleet-wide (PHNX-3968). Gated on a
|
|
1680
|
-
* real byte change. See {@link commitCentralConfig}.
|
|
1681
|
-
*/
|
|
1682
992
|
export function commitCentralConfigAfterWrite(centralChanged) {
|
|
1683
993
|
if (centralChanged)
|
|
1684
994
|
commitCentralConfig(USER_AGENTS_DIR);
|
|
1685
995
|
}
|
|
1686
|
-
/** Derive a filesystem-safe local clone path for a package source URL. */
|
|
1687
996
|
export function getPackageLocalPath(source) {
|
|
1688
997
|
const sanitized = source
|
|
1689
998
|
.replace(/^gh:/, '')
|
|
@@ -1699,11 +1008,6 @@ export function getPackageLocalPath(source) {
|
|
|
1699
1008
|
export function recordVersionResources(_agent, _version, _resourceType, _resources) {
|
|
1700
1009
|
// intentional no-op — tracking moved to pattern-based ensureVersionResourcePatterns
|
|
1701
1010
|
}
|
|
1702
|
-
/**
|
|
1703
|
-
* Write default resource selection patterns for an agent@version.
|
|
1704
|
-
* Only writes each field when it is not already set, preserving user customization.
|
|
1705
|
-
* Pass all resource types you want to initialize in one call to batch the write.
|
|
1706
|
-
*/
|
|
1707
1011
|
export function ensureVersionResourcePatterns(agent, version, updates) {
|
|
1708
1012
|
const meta = readMeta();
|
|
1709
1013
|
if (!meta.versions)
|
|
@@ -1723,20 +1027,9 @@ export function ensureVersionResourcePatterns(agent, version, updates) {
|
|
|
1723
1027
|
if (changed)
|
|
1724
1028
|
writeMeta(meta);
|
|
1725
1029
|
}
|
|
1726
|
-
/**
|
|
1727
|
-
* Resource types that resolve across the extra-repo layer. Mirrors
|
|
1728
|
-
* `defaultPatterns()`: extras feed commands/skills/hooks/subagents/plugins/
|
|
1729
|
-
* workflows, but never permissions (`system:*`) or mcp (`user:*`).
|
|
1730
|
-
*/
|
|
1731
1030
|
const EXTRA_ELIGIBLE_TYPES = [
|
|
1732
1031
|
'commands', 'skills', 'hooks', 'subagents', 'plugins', 'workflows',
|
|
1733
1032
|
];
|
|
1734
|
-
/**
|
|
1735
|
-
* Insert `<alias>:*` at the canonical position (after the system/user/other-extra
|
|
1736
|
-
* includes, before `project:*`), unless the alias is already referenced — as an
|
|
1737
|
-
* include (`alias:...`) or an exclude (`!alias:...`). Returns a new array when it
|
|
1738
|
-
* changes, otherwise the same reference (so callers can detect no-ops cheaply).
|
|
1739
|
-
*/
|
|
1740
1033
|
export function withAlias(list, alias) {
|
|
1741
1034
|
const prefix = `${alias}:`;
|
|
1742
1035
|
if (list.some(p => p === `${alias}:*` || p.startsWith(prefix) || p.startsWith(`!${prefix}`))) {
|
|
@@ -1750,20 +1043,11 @@ export function withAlias(list, alias) {
|
|
|
1750
1043
|
next.push(`${alias}:*`);
|
|
1751
1044
|
return next;
|
|
1752
1045
|
}
|
|
1753
|
-
/** Strip every reference to `<alias>:...` / `!<alias>:...` from a selector list. */
|
|
1754
1046
|
export function withoutAlias(list, alias) {
|
|
1755
1047
|
const prefix = `${alias}:`;
|
|
1756
1048
|
const next = list.filter(p => !(p.startsWith(prefix) || p.startsWith(`!${prefix}`)));
|
|
1757
1049
|
return next.length === list.length ? list : next;
|
|
1758
1050
|
}
|
|
1759
|
-
/**
|
|
1760
|
-
* Backfill (add=true) or strip (add=false) an extra-repo alias across every
|
|
1761
|
-
* already-installed version's selectors. New versions get the alias via
|
|
1762
|
-
* `defaultPatterns()` at scaffold time; this keeps existing versions in sync
|
|
1763
|
-
* when an extra repo is registered/enabled or removed. Only touches selector
|
|
1764
|
-
* lists that are already set — an unset list is left for `defaultPatterns()`.
|
|
1765
|
-
* Returns the number of (agent, version) pairs changed.
|
|
1766
|
-
*/
|
|
1767
1051
|
export function applyExtraAliasToVersions(alias, add) {
|
|
1768
1052
|
const meta = readMeta();
|
|
1769
1053
|
if (!meta.versions)
|
|
@@ -1800,12 +1084,10 @@ export function getVersionResources(agent, version) {
|
|
|
1800
1084
|
const meta = readMeta();
|
|
1801
1085
|
return meta.versions?.[agent]?.[version] || null;
|
|
1802
1086
|
}
|
|
1803
|
-
/** Active rules preset for an agent@version. Defaults to "default" when unset. */
|
|
1804
1087
|
export function getActiveRulesPreset(agent, version) {
|
|
1805
1088
|
const meta = readMeta();
|
|
1806
1089
|
return meta.versions?.[agent]?.[version]?.rulesPreset || 'default';
|
|
1807
1090
|
}
|
|
1808
|
-
/** Persist the active rules preset for an agent@version. */
|
|
1809
1091
|
export function setActiveRulesPreset(agent, version, preset) {
|
|
1810
1092
|
const meta = readMeta();
|
|
1811
1093
|
if (!meta.versions)
|