@phnx-labs/agents-cli 1.22.120 → 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 +227 -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 +17 -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/commands/inspect.js
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents inspect <target>` — detail view for one agent+version or one DotAgents repo.
|
|
3
|
-
*
|
|
4
|
-
* Agent targets (`claude`, `claude@2.1.170`) show the per-version header (paths,
|
|
5
|
-
* shim, capabilities, resource counts, sessions). Repo targets (`user`, `system`,
|
|
6
|
-
* `project`, a registered extra-repo alias, or a filesystem path to a repo with a
|
|
7
|
-
* `.agents/` dir or to a DotAgents root itself) show the repo root, git state, and
|
|
8
|
-
* per-kind resource counts. Drill-down flags (`--skills`, `--hooks`, `--mcp`, ...)
|
|
9
|
-
* list one resource kind for either target form; passing a positional query to the
|
|
10
|
-
* same flag fuzzy-searches for a single resource and prints its detail. Resource
|
|
11
|
-
* names render as OSC-8 hyperlinks to the marker file (SKILL.md / WORKFLOW.md /
|
|
12
|
-
* AGENT.md / the file itself) so users can click straight to the source.
|
|
13
|
-
*/
|
|
14
1
|
import { execFileSync } from 'child_process';
|
|
15
2
|
import { addHostOption } from '../lib/hosts/option.js';
|
|
16
3
|
import * as fs from 'fs';
|
|
@@ -36,13 +23,12 @@ import { showResourceList } from './resource-view.js';
|
|
|
36
23
|
import { PLUGIN_GROUP_COLORS } from './plugins.js';
|
|
37
24
|
import { isInteractiveTerminal } from './utils.js';
|
|
38
25
|
import { countSessionsInScope } from '../lib/session/discover.js';
|
|
39
|
-
import { isSessionTrackedAgent } from '
|
|
26
|
+
import { isSessionTrackedAgent } from '@phnx-labs/sessions-cli/reader';
|
|
40
27
|
import { damerauLevenshtein } from '../lib/fuzzy.js';
|
|
41
28
|
import { terminalWidth, truncateToWidth, stringWidth, stripAnsi } from '../lib/session/width.js';
|
|
42
29
|
import { readJobFileResult, getJobRunsDir, readRunMeta, isOneShotRoutine, isPastOneShotRoutine, listJobs, } from '../lib/scheduling/routines.js';
|
|
43
30
|
import { routineDeviceIndex, currentRoutineDevice, routineEnabledOnThisDevice, } from '../lib/routine-activation.js';
|
|
44
31
|
import { humanizeCron } from '../lib/routines-format.js';
|
|
45
|
-
/** Resource kinds the inspect command can drill into. */
|
|
46
32
|
const DRILLABLE_KINDS = [
|
|
47
33
|
'commands',
|
|
48
34
|
'skills',
|
|
@@ -54,23 +40,10 @@ const DRILLABLE_KINDS = [
|
|
|
54
40
|
'subagents',
|
|
55
41
|
'routines',
|
|
56
42
|
];
|
|
57
|
-
/**
|
|
58
|
-
* Summary-view partition. SIMPLE kinds render as a one-line count + name preview;
|
|
59
|
-
* RICH kinds (hooks/plugins/mcp/routines) get their own expanded section showing
|
|
60
|
-
* each item's key detail (events/predicates, bundle contents, transport/url,
|
|
61
|
-
* schedule + where a routine actually fires). Together they cover every
|
|
62
|
-
* DrillableKind — the type below makes that claim load-bearing.
|
|
63
|
-
*/
|
|
64
43
|
const SIMPLE_KINDS = ['commands', 'skills', 'rules', 'subagents', 'workflows'];
|
|
65
44
|
const RICH_KINDS = ['hooks', 'plugins', 'mcp', 'routines'];
|
|
66
45
|
const _kindsPartitioned = true;
|
|
67
46
|
void _kindsPartitioned;
|
|
68
|
-
/**
|
|
69
|
-
* Singular aliases for the plural drill-down flags. `--plugin code` reads as
|
|
70
|
-
* "show the one plugin named code" — a required-value flag that always lands in
|
|
71
|
-
* detail mode, the natural counterpart to `--plugins` (list). `mcp` has no
|
|
72
|
-
* distinct singular, so it is intentionally absent.
|
|
73
|
-
*/
|
|
74
47
|
const SINGULAR_DRILL_ALIASES = {
|
|
75
48
|
command: 'commands',
|
|
76
49
|
skill: 'skills',
|
|
@@ -84,7 +57,6 @@ const SINGULAR_DRILL_ALIASES = {
|
|
|
84
57
|
const CAPABILITY_NAMES = [
|
|
85
58
|
'hooks', 'mcp', 'skills', 'commands', 'subagents', 'plugins', 'workflows', 'rules', 'allowlist',
|
|
86
59
|
];
|
|
87
|
-
/** Wrap a separator-joined value list under `prefix`, preserving a hanging indent. */
|
|
88
60
|
export function wrapJoined(prefix, items, sep, width) {
|
|
89
61
|
if (items.length === 0)
|
|
90
62
|
return [];
|
|
@@ -122,7 +94,6 @@ function printWrappedJoined(prefix, items, sep) {
|
|
|
122
94
|
function truncateValueForPrefix(prefix, value) {
|
|
123
95
|
return truncateToWidth(stripAnsi(value), Math.max(1, terminalWidth() - stringWidth(prefix)));
|
|
124
96
|
}
|
|
125
|
-
// ─── Command registration ────────────────────────────────────────────────────
|
|
126
97
|
export function registerInspectCommand(program) {
|
|
127
98
|
const cmd = addHostOption(program.command('inspect <target>'))
|
|
128
99
|
.description('Inspect one installed agent harness at one version (not a model), or a DotAgents repo — paths, capabilities, resources, and hook capable/on-disk/wired state.')
|
|
@@ -138,7 +109,6 @@ export function registerInspectCommand(program) {
|
|
|
138
109
|
await inspectAction(target, options);
|
|
139
110
|
});
|
|
140
111
|
}
|
|
141
|
-
// ─── Main dispatcher ─────────────────────────────────────────────────────────
|
|
142
112
|
async function inspectAction(target, options) {
|
|
143
113
|
const agentKey = target.split('@')[0].toLowerCase();
|
|
144
114
|
if (!(agentKey in AGENTS)) {
|
|
@@ -147,8 +117,6 @@ async function inspectAction(target, options) {
|
|
|
147
117
|
await inspectRepo(repo, options);
|
|
148
118
|
return;
|
|
149
119
|
}
|
|
150
|
-
// Repo targets take precedence over typo correction; only fall through to
|
|
151
|
-
// parseTarget when the key resolves to an agent (alias or single-edit fix).
|
|
152
120
|
if (!resolveAgentName(agentKey)) {
|
|
153
121
|
const extras = getEnabledExtraRepos();
|
|
154
122
|
console.error(chalk.red(`Unknown target: ${target}`));
|
|
@@ -180,9 +148,6 @@ async function inspectAction(target, options) {
|
|
|
180
148
|
await renderSummary(agent, version, versionHome, options);
|
|
181
149
|
}
|
|
182
150
|
function parseTarget(target) {
|
|
183
|
-
// Route through the agent-spec engine: bare resolves project pin → global
|
|
184
|
-
// default → sole installed (the meta-only lookup here previously ignored
|
|
185
|
-
// project pins); @default/@latest/@oldest/@x.y.z all handled uniformly.
|
|
186
151
|
try {
|
|
187
152
|
const { agent, version } = resolveSingleAgentTarget(target);
|
|
188
153
|
return { agent, version };
|
|
@@ -202,7 +167,6 @@ function pickDrillKind(options) {
|
|
|
202
167
|
if (value !== undefined)
|
|
203
168
|
active.push({ flag: `--${kind}`, kind, query: value });
|
|
204
169
|
}
|
|
205
|
-
// Singular aliases (`--plugin code`) always carry a name → detail mode.
|
|
206
170
|
for (const [singular, plural] of Object.entries(SINGULAR_DRILL_ALIASES)) {
|
|
207
171
|
const value = options[singular];
|
|
208
172
|
if (typeof value === 'string')
|
|
@@ -216,14 +180,7 @@ function pickDrillKind(options) {
|
|
|
216
180
|
}
|
|
217
181
|
return { kind: active[0].kind, query: active[0].query };
|
|
218
182
|
}
|
|
219
|
-
/** Files at a DotAgents root that mark it as one, beyond the per-kind dirs. */
|
|
220
183
|
const REPO_MARKER_FILES = ['agents.yaml', 'hooks.yaml'];
|
|
221
|
-
/**
|
|
222
|
-
* Resolve a non-agent target as a DotAgents repo: the built-in layer names,
|
|
223
|
-
* a registered extra-repo alias, or a filesystem path. Paths accept either a
|
|
224
|
-
* DotAgents root itself or a repo whose `.agents/` dir should be inspected.
|
|
225
|
-
* Returns null when the target is none of these.
|
|
226
|
-
*/
|
|
227
184
|
export function resolveRepoTarget(target, cwd) {
|
|
228
185
|
if (target === 'user')
|
|
229
186
|
return { label: 'user', root: getUserAgentsDir() };
|
|
@@ -246,21 +203,13 @@ export function resolveRepoTarget(target, cwd) {
|
|
|
246
203
|
const stat = safeStat(abs);
|
|
247
204
|
if (!stat || !stat.isDirectory())
|
|
248
205
|
return null;
|
|
249
|
-
// A dir literally named `.agents` is the root itself.
|
|
250
206
|
if (path.basename(abs) === '.agents') {
|
|
251
207
|
return { label: path.basename(path.dirname(abs)), root: abs };
|
|
252
208
|
}
|
|
253
|
-
// A nested `.agents/` that is a populated DotAgents root wins over `abs` — the
|
|
254
|
-
// project case (`agents inspect .` from a repo root whose resources live under
|
|
255
|
-
// `.agents/`, while the repo's own top-level `skills/`, `agents.yaml` pin, etc.
|
|
256
|
-
// are unrelated source, not a DotAgents tree).
|
|
257
209
|
const nested = path.join(abs, '.agents');
|
|
258
210
|
if (isDotAgentsRoot(nested)) {
|
|
259
211
|
return { label: path.basename(abs), root: nested };
|
|
260
212
|
}
|
|
261
|
-
// Otherwise treat `abs` itself as the root: standalone clones and extra repos
|
|
262
|
-
// like ~/.agents-extras keep resources at the top level and use `.agents/`
|
|
263
|
-
// only for worktrees (so their nested `.agents/` is not a DotAgents root).
|
|
264
213
|
if (isDotAgentsRoot(abs)) {
|
|
265
214
|
return { label: path.basename(abs), root: abs };
|
|
266
215
|
}
|
|
@@ -272,11 +221,6 @@ function isDotAgentsRoot(dir) {
|
|
|
272
221
|
return true;
|
|
273
222
|
}
|
|
274
223
|
for (const kind of DRILLABLE_KINDS) {
|
|
275
|
-
// `routines/` alone is NOT a marker. Shipping example routine YAML for
|
|
276
|
-
// `agents routines add` is a documented pattern (this repo's own
|
|
277
|
-
// cli/routines/), and that directory is the ONLY kind dir there — so
|
|
278
|
-
// counting it would make `agents inspect cli` resolve a source tree as
|
|
279
|
-
// a DotAgents repo. Same reasoning as the nested-`.agents/` case above.
|
|
280
224
|
if (kind === 'routines')
|
|
281
225
|
continue;
|
|
282
226
|
if (safeStat(path.join(dir, kind))?.isDirectory())
|
|
@@ -288,9 +232,6 @@ export async function inspectRepo(repo, options) {
|
|
|
288
232
|
const drill = pickDrillKind(options);
|
|
289
233
|
const jsonHead = { repo: repo.label, root: repo.root };
|
|
290
234
|
if (drill) {
|
|
291
|
-
// Routines carry live state, and an unreadable device document silently
|
|
292
|
-
// removes that device from every `devices` cell — say so on this path too,
|
|
293
|
-
// not only in the overview.
|
|
294
235
|
let items;
|
|
295
236
|
if (drill.kind === 'routines') {
|
|
296
237
|
const provider = defaultRoutineLive();
|
|
@@ -305,9 +246,6 @@ export async function inspectRepo(repo, options) {
|
|
|
305
246
|
items = collectRepoKind(repo, drill.kind);
|
|
306
247
|
}
|
|
307
248
|
if (drill.query === true || drill.query === undefined) {
|
|
308
|
-
// A repo's hooks are wired by its OWN agents.yaml, not by whatever this
|
|
309
|
-
// machine has installed centrally — the same manifest the repo overview
|
|
310
|
-
// reads at collectRepoKind.
|
|
311
249
|
await renderItemList(repo.label, jsonHead, drill.kind, items, options, drill.kind === 'hooks'
|
|
312
250
|
? hookManifestByScript(hookManifestFromFile(path.join(repo.root, 'agents.yaml')))
|
|
313
251
|
: undefined);
|
|
@@ -319,42 +257,19 @@ export async function inspectRepo(repo, options) {
|
|
|
319
257
|
}
|
|
320
258
|
renderRepoSummary(repo, options);
|
|
321
259
|
}
|
|
322
|
-
/** List one resource kind from a single repo root — no layering, no overrides. */
|
|
323
260
|
export function collectRepoKind(repo, kind) {
|
|
324
|
-
// Plugins are bundles with a manifest + nested skills/commands/hooks — read
|
|
325
|
-
// them through the plugin discoverer so the manifest description and bundled
|
|
326
|
-
// resources surface, rather than treating each as an opaque directory.
|
|
327
261
|
if (kind === 'plugins') {
|
|
328
262
|
return discoverPluginsInDir(path.join(repo.root, 'plugins'))
|
|
329
263
|
.map(p => pluginToItem(p, repo.label))
|
|
330
264
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
331
265
|
}
|
|
332
|
-
// Hooks live nested under event directories (`hooks/pre-tool-use/…`), and a
|
|
333
|
-
// script pairs with its data sidecar. repoHookItems already reads them that
|
|
334
|
-
// way for the summary view; a flat readdir here returned the event dirs
|
|
335
|
-
// themselves plus README/test scaffolding, so `--hooks` and the summary
|
|
336
|
-
// reported different counts for the same repo.
|
|
337
266
|
if (kind === 'hooks')
|
|
338
267
|
return repoHookItems(repo);
|
|
339
|
-
// A repo's `rules/` holds the COMPOSED output (AGENTS.md plus its CLAUDE.md /
|
|
340
|
-
// GEMINI.md symlinks) alongside a `subrules/` dir of the individually named
|
|
341
|
-
// fragments. The fragments are what `--rule <name>` resolves and what a reader
|
|
342
|
-
// means by "a rule"; the composed file is a build artifact. Without this,
|
|
343
|
-
// `subrules` listed as a single opaque leaf and every real rule was unreachable.
|
|
344
|
-
// Deliberately exclusive: once `subrules/` exists it is the sole home for
|
|
345
|
-
// rules (composeRules only ever resolves names under it — lib/rules/compose.ts),
|
|
346
|
-
// so loose top-level `.md` files are not listed. A repo mid-migration to the
|
|
347
|
-
// subrules convention would see those legacy files disappear from `--rules`;
|
|
348
|
-
// that is the correct signal, since composeRules would not load them either.
|
|
349
268
|
if (kind === 'rules') {
|
|
350
269
|
const subrulesDir = path.join(repo.root, kind, 'subrules');
|
|
351
270
|
if (fs.existsSync(subrulesDir))
|
|
352
271
|
return readResourceDir(subrulesDir, kind, repo.label);
|
|
353
272
|
}
|
|
354
|
-
// Routines are YAML job definitions whose real state (does it fire, where, how
|
|
355
|
-
// did it last run) lives outside the file. Their directory also holds
|
|
356
|
-
// `<name>/home/` sandbox overlays, which a flat readdir would count as
|
|
357
|
-
// routines — on this author's box that turned 24 routines into 49.
|
|
358
273
|
if (kind === 'routines')
|
|
359
274
|
return collectRepoRoutines(repo);
|
|
360
275
|
return readResourceDir(path.join(repo.root, kind), kind, repo.label);
|
|
@@ -362,25 +277,9 @@ export function collectRepoKind(repo, kind) {
|
|
|
362
277
|
const NO_LIVE_STATE = {
|
|
363
278
|
devices: [], materialized: false, thisDevice: '', enabledHere: null, lastStatus: null, lastAt: null,
|
|
364
279
|
};
|
|
365
|
-
/**
|
|
366
|
-
* Whether the routine actually runs on this machine.
|
|
367
|
-
*
|
|
368
|
-
* Exactly `applyDeviceActivation` (`lib/routines.ts`): this device's own
|
|
369
|
-
* allowlist answer wins when it exists, and the file's `enabled:` governs only
|
|
370
|
-
* while that answer is `null`. Measured at the same scope as the daemon's, so
|
|
371
|
-
* `agents inspect --routines` and `agents routines list` cannot disagree.
|
|
372
|
-
*/
|
|
373
280
|
function routineEnabledHere(config, live) {
|
|
374
281
|
return live.enabledHere === null ? config.enabled : live.enabledHere;
|
|
375
282
|
}
|
|
376
|
-
/**
|
|
377
|
-
* The last run we can read, without paying for the whole history.
|
|
378
|
-
*
|
|
379
|
-
* `getLatestRun` goes through `listRuns`, which parses EVERY meta.json under the
|
|
380
|
-
* routine — one firing every 3 minutes accumulates hundreds. Run ids are ISO-ish
|
|
381
|
-
* and sort lexicographically, so walking from the newest and stopping at the
|
|
382
|
-
* first readable record gives the same answer for a bounded number of reads.
|
|
383
|
-
*/
|
|
384
283
|
function latestRunOf(name, maxProbes = 20) {
|
|
385
284
|
let runIds;
|
|
386
285
|
try {
|
|
@@ -400,14 +299,6 @@ function latestRunOf(name, maxProbes = 20) {
|
|
|
400
299
|
}
|
|
401
300
|
return null;
|
|
402
301
|
}
|
|
403
|
-
/**
|
|
404
|
-
* Default live provider: one fleet index per collect, one bounded run read per
|
|
405
|
-
* routine, and this device's own activation answer per routine.
|
|
406
|
-
*
|
|
407
|
-
* Returns the collected `errors` alongside so the caller can surface an
|
|
408
|
-
* unreadable device document instead of letting the affected device silently
|
|
409
|
-
* vanish from every `devices` cell.
|
|
410
|
-
*/
|
|
411
302
|
function defaultRoutineLive() {
|
|
412
303
|
let index;
|
|
413
304
|
try {
|
|
@@ -423,10 +314,6 @@ function defaultRoutineLive() {
|
|
|
423
314
|
return '';
|
|
424
315
|
} })();
|
|
425
316
|
const errors = [...index.errors];
|
|
426
|
-
// This device's own doc is read through readMeta, which THROWS on a corrupt
|
|
427
|
-
// one. Falling back to the file's `enabled:` silently would be the same
|
|
428
|
-
// silent-failure class the index's error collection just removed, so record it
|
|
429
|
-
// once — the answer is identical for every routine on this machine.
|
|
430
317
|
let ownDocError = null;
|
|
431
318
|
const enabledOnThisDevice = (name) => {
|
|
432
319
|
try {
|
|
@@ -446,7 +333,6 @@ function defaultRoutineLive() {
|
|
|
446
333
|
devices: index.byRoutine.get(name) ?? [],
|
|
447
334
|
materialized: index.materialized,
|
|
448
335
|
thisDevice,
|
|
449
|
-
// The same call applyDeviceActivation makes — per-machine, not fleet-wide.
|
|
450
336
|
enabledHere: enabledOnThisDevice(name),
|
|
451
337
|
lastStatus: run?.status ?? null,
|
|
452
338
|
lastAt: run?.startedAt ?? null,
|
|
@@ -454,7 +340,6 @@ function defaultRoutineLive() {
|
|
|
454
340
|
};
|
|
455
341
|
return { live, errors };
|
|
456
342
|
}
|
|
457
|
-
/** `2h` / `3d` / `just now` — compact enough for a 10-column cell. */
|
|
458
343
|
export function compactAge(iso, now = new Date()) {
|
|
459
344
|
if (!iso)
|
|
460
345
|
return '';
|
|
@@ -474,7 +359,6 @@ export function compactAge(iso, now = new Date()) {
|
|
|
474
359
|
return `${days}d`;
|
|
475
360
|
return `${Math.floor(days / 365)}y`;
|
|
476
361
|
}
|
|
477
|
-
/** What makes this routine fire: a humanized cron, an event trigger, or nothing. */
|
|
478
362
|
export function routineFireLabel(job, now = new Date()) {
|
|
479
363
|
const parts = [];
|
|
480
364
|
if (job.schedule)
|
|
@@ -492,7 +376,6 @@ export function routineFireLabel(job, now = new Date()) {
|
|
|
492
376
|
}
|
|
493
377
|
return parts.join(' · ');
|
|
494
378
|
}
|
|
495
|
-
/** What the routine actually executes. Exactly one of agent/workflow/command is set. */
|
|
496
379
|
export function routineTargetLabel(job) {
|
|
497
380
|
const agent = manifestText(job.agent);
|
|
498
381
|
if (agent)
|
|
@@ -504,14 +387,6 @@ export function routineTargetLabel(job) {
|
|
|
504
387
|
return 'command (shell)';
|
|
505
388
|
return 'nothing configured';
|
|
506
389
|
}
|
|
507
|
-
/**
|
|
508
|
-
* A routine's one-line intent.
|
|
509
|
-
*
|
|
510
|
-
* Routine YAML has no `description:` key, so the generic first-prose-line reader
|
|
511
|
-
* returns `name: growth-metrics` for one file and a real sentence for the next.
|
|
512
|
-
* Prefer the prompt's first sentence, then the file's leading comment block, then
|
|
513
|
-
* the first meaningful line of a shell command.
|
|
514
|
-
*/
|
|
515
390
|
export function routineDescription(job, raw) {
|
|
516
391
|
const prompt = job ? manifestText(job.prompt).trim() : '';
|
|
517
392
|
if (prompt)
|
|
@@ -526,7 +401,6 @@ export function routineDescription(job, raw) {
|
|
|
526
401
|
continue;
|
|
527
402
|
}
|
|
528
403
|
const text = comment[1].trim().replace(/^Routine:\s*/i, '');
|
|
529
|
-
// Skip the shebang-ish and install-instruction noise that opens many files.
|
|
530
404
|
if (!text || /^(yaml-language-server|Install:|Usage:)/i.test(text))
|
|
531
405
|
continue;
|
|
532
406
|
return summaryLine(text);
|
|
@@ -540,15 +414,6 @@ export function routineDescription(job, raw) {
|
|
|
540
414
|
}
|
|
541
415
|
return '';
|
|
542
416
|
}
|
|
543
|
-
/**
|
|
544
|
-
* Read every routine one DotAgents repo declares.
|
|
545
|
-
*
|
|
546
|
-
* Reads exactly `<root>/routines/`, never the layered `listJobs` — `collectRepoKind`
|
|
547
|
-
* is a single-root view, and returning `~/.agents` routines while inspecting a
|
|
548
|
-
* project repo would be a lie. `live` is injectable because `getUserAgentsDir()`
|
|
549
|
-
* and `getRunsDir()` have no env override, so tests cannot otherwise keep this
|
|
550
|
-
* off the developer's real fleet state.
|
|
551
|
-
*/
|
|
552
417
|
export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now = new Date()) {
|
|
553
418
|
const dir = path.join(repo.root, 'routines');
|
|
554
419
|
let entries;
|
|
@@ -560,12 +425,6 @@ export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now
|
|
|
560
425
|
}
|
|
561
426
|
const items = [];
|
|
562
427
|
const seen = new Map();
|
|
563
|
-
// Files only: `routines/<name>/home/` is a sandbox overlay HOME, not a routine.
|
|
564
|
-
//
|
|
565
|
-
// `.yml` before `.yaml` for the same basename, because that is the order
|
|
566
|
-
// `readJobFromDir` tries — so when both exist we describe the file the daemon
|
|
567
|
-
// actually loads. A plain alphabetical sort put `.yaml` first and reported the
|
|
568
|
-
// wrong schedule and command for a routine that fires from its sibling.
|
|
569
428
|
const files = entries
|
|
570
429
|
.filter(e => e.isFile() && /\.ya?ml$/.test(e.name) && !e.name.startsWith('.'))
|
|
571
430
|
.map(e => e.name)
|
|
@@ -582,9 +441,6 @@ export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now
|
|
|
582
441
|
const name = config?.name || basename;
|
|
583
442
|
const existing = seen.get(name);
|
|
584
443
|
if (existing) {
|
|
585
|
-
// `writeJob` refuses to edit a routine with both extensions. Keep the item
|
|
586
|
-
// built from the file that loads, and flag the ambiguity on it — in `extra`
|
|
587
|
-
// for the panes AND in `json` so a --json consumer sees it too.
|
|
588
444
|
const collision = `both .yml and .yaml exist — ${file} is ignored; resolve before editing`;
|
|
589
445
|
existing.extra = [...(existing.extra ?? []), ['problem', collision]];
|
|
590
446
|
if (existing.json)
|
|
@@ -638,9 +494,6 @@ export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now
|
|
|
638
494
|
linkTarget: filePath,
|
|
639
495
|
description: routineDescription(config, raw),
|
|
640
496
|
extra,
|
|
641
|
-
// Field names match `agents routines list --json` where they overlap, so
|
|
642
|
-
// one script can consume both. `devices` is what the YAML pins;
|
|
643
|
-
// `enabledDevices` is what the fleet actually allows — the diagnostic pair.
|
|
644
497
|
json: {
|
|
645
498
|
path: filePath,
|
|
646
499
|
schedule: config?.schedule ?? null,
|
|
@@ -652,9 +505,7 @@ export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now
|
|
|
652
505
|
command: config?.command ?? null,
|
|
653
506
|
timezone: config?.timezone ?? null,
|
|
654
507
|
repo: config?.repo ?? null,
|
|
655
|
-
// Effective on THIS machine, matching `agents routines list`.
|
|
656
508
|
enabled: config ? routineEnabledHere(config, state) : false,
|
|
657
|
-
// What the file itself declares, before device activation overrides it.
|
|
658
509
|
enabledInFile: config?.enabled ?? false,
|
|
659
510
|
catchup: config ? config.catchup !== false : null,
|
|
660
511
|
devices: config ? manifestList(config.devices) : [],
|
|
@@ -672,15 +523,9 @@ export function collectRepoRoutines(repo, live = defaultRoutineLive().live, now
|
|
|
672
523
|
}
|
|
673
524
|
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
674
525
|
}
|
|
675
|
-
/** Read one `extra` row back out — the renderers' only accessor. */
|
|
676
526
|
function extraOf(item, key) {
|
|
677
527
|
return item.extra?.find(([k]) => k === key)?.[1] ?? '';
|
|
678
528
|
}
|
|
679
|
-
/**
|
|
680
|
-
* Enumerate one directory of resources of `kind`, skipping dotfiles, build caches,
|
|
681
|
-
* and directory docs. Shared so the rules `subrules/` branch and the default
|
|
682
|
-
* `<repo>/<kind>/` branch cannot drift apart.
|
|
683
|
-
*/
|
|
684
529
|
function readResourceDir(dir, kind, source) {
|
|
685
530
|
let entries;
|
|
686
531
|
try {
|
|
@@ -693,13 +538,9 @@ function readResourceDir(dir, kind, source) {
|
|
|
693
538
|
for (const entry of entries) {
|
|
694
539
|
if (entry.name.startsWith('.'))
|
|
695
540
|
continue;
|
|
696
|
-
// Build/tooling caches are never resources — they only inflate counts.
|
|
697
541
|
if (entry.name === '__pycache__' || entry.name === 'node_modules')
|
|
698
542
|
continue;
|
|
699
543
|
const name = entry.name.replace(/\.(md|yaml|yml|toml|json)$/, '');
|
|
700
|
-
// README/AGENTS/CLAUDE/GEMINI describe the directory, not resources of this
|
|
701
|
-
// kind. CLAUDE.md/GEMINI.md are symlinks to AGENTS.md, so a Dirent reports
|
|
702
|
-
// isFile() === false — use !isDirectory() to catch them (mirrors resources.ts).
|
|
703
544
|
if (!entry.isDirectory() && isDirectoryDoc(kind, name))
|
|
704
545
|
continue;
|
|
705
546
|
const p = path.join(dir, entry.name);
|
|
@@ -713,7 +554,6 @@ function readResourceDir(dir, kind, source) {
|
|
|
713
554
|
}
|
|
714
555
|
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
715
556
|
}
|
|
716
|
-
/** A few resource names for the at-a-glance preview, with a `…(+N)` tail. */
|
|
717
557
|
function previewNames(items, n) {
|
|
718
558
|
if (items.length === 0)
|
|
719
559
|
return '';
|
|
@@ -721,7 +561,6 @@ function previewNames(items, n) {
|
|
|
721
561
|
const extra = items.length - shown.length;
|
|
722
562
|
return shown.join(', ') + (extra > 0 ? ` …(+${extra})` : '');
|
|
723
563
|
}
|
|
724
|
-
/** Recursive size + file count of a path; symlinks are not followed. */
|
|
725
564
|
export function pathSize(p) {
|
|
726
565
|
let stat;
|
|
727
566
|
try {
|
|
@@ -751,10 +590,6 @@ export function pathSize(p) {
|
|
|
751
590
|
}
|
|
752
591
|
return { bytes, files };
|
|
753
592
|
}
|
|
754
|
-
/**
|
|
755
|
-
* Weigh only the entries actually listed, for a kind whose directory holds more
|
|
756
|
-
* than its resources (routines share theirs with sandbox overlay HOMEs).
|
|
757
|
-
*/
|
|
758
593
|
function itemsSize(items) {
|
|
759
594
|
let bytes = 0, files = 0;
|
|
760
595
|
for (const item of items) {
|
|
@@ -764,7 +599,6 @@ function itemsSize(items) {
|
|
|
764
599
|
}
|
|
765
600
|
return { bytes, files };
|
|
766
601
|
}
|
|
767
|
-
/** Parse the repo's own agents.yaml into the version pins + run strategies it declares. */
|
|
768
602
|
export function repoManifestSummary(root) {
|
|
769
603
|
let parsed;
|
|
770
604
|
try {
|
|
@@ -806,8 +640,6 @@ function renderRepoSummary(repo, options) {
|
|
|
806
640
|
let routineActivationErrors = [];
|
|
807
641
|
if (!options.brief) {
|
|
808
642
|
for (const kind of DRILLABLE_KINDS) {
|
|
809
|
-
// Routines share one live provider across the collect so the fleet index is
|
|
810
|
-
// read once, and so its errors survive to be reported below.
|
|
811
643
|
let items;
|
|
812
644
|
if (kind === 'routines') {
|
|
813
645
|
const provider = defaultRoutineLive();
|
|
@@ -817,9 +649,6 @@ function renderRepoSummary(repo, options) {
|
|
|
817
649
|
else {
|
|
818
650
|
items = collectRepoKind(repo, kind);
|
|
819
651
|
}
|
|
820
|
-
// `routines/` also holds `<name>/home/` sandbox overlays — often far larger
|
|
821
|
-
// than the definitions and not resources at all, so weigh the files listed
|
|
822
|
-
// rather than the directory tree.
|
|
823
652
|
const size = kind === 'routines' ? itemsSize(items) : pathSize(path.join(repo.root, kind));
|
|
824
653
|
kindData[kind] = { items, size };
|
|
825
654
|
totalBytes += size.bytes;
|
|
@@ -873,7 +702,6 @@ function renderRepoSummary(repo, options) {
|
|
|
873
702
|
return;
|
|
874
703
|
}
|
|
875
704
|
console.log('\n' + chalk.bold(repo.label) + ' ' + chalk.gray('[dotagents repo]') + '\n');
|
|
876
|
-
// Indent for continuation sub-rows: 2 leading + 10 key column + 1 space.
|
|
877
705
|
const sub = (label, value) => console.log(` ${''.padEnd(10)} ${chalk.gray(label.padEnd(8))} ${value}`);
|
|
878
706
|
console.log(` ${'root'.padEnd(10)} ${termLink(repo.root, repo.root)}`);
|
|
879
707
|
if (git) {
|
|
@@ -916,8 +744,6 @@ function renderRepoSummary(repo, options) {
|
|
|
916
744
|
const { items, size } = kindData[kind];
|
|
917
745
|
const count = String(items.length).padStart(4);
|
|
918
746
|
const sz = items.length > 0 ? formatBytes(size.bytes).padStart(8) : ''.padEnd(8);
|
|
919
|
-
// Width-aware, not a fixed 60: the old cap cut its own "…(+16)" tail off
|
|
920
|
-
// the rules row identically at 80, 100 and 160 columns.
|
|
921
747
|
const prefix = ` ${kind.padEnd(10)} ${count} ${sz} `;
|
|
922
748
|
const preview = items.length > 0
|
|
923
749
|
? chalk.gray(truncateToWidth(previewNames(items, 4), Math.max(12, terminalWidth() - stringWidth(prefix))))
|
|
@@ -934,8 +760,6 @@ function renderRepoSummary(repo, options) {
|
|
|
934
760
|
console.log(` ${chalk.yellow('⚠')} ${dark}`);
|
|
935
761
|
console.log(chalk.gray(` Fix: agents routines devices <name> --set <device>`));
|
|
936
762
|
}
|
|
937
|
-
// An unreadable device document silently removes that device from every
|
|
938
|
-
// `devices` cell, which reads as "not enabled there" — say so instead.
|
|
939
763
|
for (const err of routineActivationErrors) {
|
|
940
764
|
console.log(chalk.gray(` device config unreadable — ${err}`));
|
|
941
765
|
}
|
|
@@ -956,8 +780,6 @@ export function repoGitInfo(root) {
|
|
|
956
780
|
const branch = git(['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
957
781
|
if (branch === null)
|
|
958
782
|
return null;
|
|
959
|
-
// Read status WITHOUT trimming — trimming would strip the leading
|
|
960
|
-
// space of the first porcelain line (`XY path`), corrupting the path slice.
|
|
961
783
|
let statusRaw;
|
|
962
784
|
try {
|
|
963
785
|
statusRaw = execFileSync('git', ['-C', root, 'status', '--porcelain'], { stdio: ['ignore', 'pipe', 'ignore'], encoding: 'utf8' });
|
|
@@ -984,7 +806,6 @@ export function repoGitInfo(root) {
|
|
|
984
806
|
}
|
|
985
807
|
return { branch, dirty: dirtyFiles.length, dirtyFiles, url: git(['remote', 'get-url', 'origin']), lastCommit, ahead, behind };
|
|
986
808
|
}
|
|
987
|
-
// ─── Summary mode ────────────────────────────────────────────────────────────
|
|
988
809
|
async function renderSummary(agent, version, versionHome, options) {
|
|
989
810
|
const meta = readMeta();
|
|
990
811
|
const isDefault = meta.agents?.[agent] === version;
|
|
@@ -992,18 +813,11 @@ async function renderSummary(agent, version, versionHome, options) {
|
|
|
992
813
|
const cliState = await getCliState(agent).catch(() => null);
|
|
993
814
|
const configSymlink = path.join(os.homedir(), `.${agent}`);
|
|
994
815
|
const configTarget = readSymlinkSafe(configSymlink);
|
|
995
|
-
// Report the bare shim only when it is actually there. An isolated install
|
|
996
|
-
// deliberately has none — that is the promise — so printing the path
|
|
997
|
-
// unconditionally told the user this copy sits on their PATH when it does not.
|
|
998
|
-
// Same failure mode as `agents view` claiming an isolated copy was `(global)`.
|
|
999
816
|
const shimPathIfPresent = fs.existsSync(path.join(getShimsDir(), AGENTS[agent].cliCommand))
|
|
1000
817
|
? path.join(getShimsDir(), AGENTS[agent].cliCommand)
|
|
1001
818
|
: null;
|
|
1002
819
|
const aliasPath = getVersionedAliasPath(agent, version);
|
|
1003
820
|
const isolated = isVersionIsolated(agent, version);
|
|
1004
|
-
// `default` means the GLOBAL default, which an isolated copy can never be. Report
|
|
1005
|
-
// the isolated pointer separately rather than leaving it invisible: it is what a
|
|
1006
|
-
// bare `agents run <agent>` resolves to, so "default: false" alone is misleading.
|
|
1007
821
|
const isIsolatedDefault = isolated && getIsolatedDefault(agent) === version;
|
|
1008
822
|
const capabilities = collectCapabilities(agent, version);
|
|
1009
823
|
const itemsByKind = options.brief ? null : collectItemsByKind(agent, versionHome);
|
|
@@ -1041,7 +855,6 @@ async function renderSummary(agent, version, versionHome, options) {
|
|
|
1041
855
|
console.log(JSON.stringify(json, null, 2));
|
|
1042
856
|
return;
|
|
1043
857
|
}
|
|
1044
|
-
// Plain text — model sits right beside the version, same priority (no label).
|
|
1045
858
|
const configuredModel = resolveConfiguredModel(agent, version)?.model;
|
|
1046
859
|
const modelPart = configuredModel ? ' ' + chalk.yellow(configuredModel) : '';
|
|
1047
860
|
const head = `${chalk.bold(agent)} ${chalk.gray('@')} ${chalk.cyan(version)}${modelPart}${isDefault ? ' ' + chalk.green('[default]') : ''}${isolated ? ' ' + chalk.gray(isIsolatedDefault ? '[isolated default]' : '[isolated]') : ''}`;
|
|
@@ -1064,9 +877,6 @@ async function renderSummary(agent, version, versionHome, options) {
|
|
|
1064
877
|
const reason = res.ok ? '' : chalk.gray(`(${res.reason}${res.need ? ' ' + res.need : ''})`);
|
|
1065
878
|
console.log(` ${cap.padEnd(10)} ${mark} ${reason}`);
|
|
1066
879
|
}
|
|
1067
|
-
// Permission modes are a separate axis from the capability booleans above —
|
|
1068
|
-
// same data as `agents modes <agent>`, kept next to the rest of the inspect
|
|
1069
|
-
// surface so a human/agent does not have to leave this view.
|
|
1070
880
|
{
|
|
1071
881
|
const modeCat = getAgentModesCatalog(agent, version);
|
|
1072
882
|
const modeList = modeCat.modes.map((m) => (m.isDefault ? `${m.mode}*` : m.mode)).join('/');
|
|
@@ -1094,7 +904,6 @@ async function renderSummary(agent, version, versionHome, options) {
|
|
|
1094
904
|
console.log(chalk.gray(`Diagnose: agents doctor ${agent}@${version}`));
|
|
1095
905
|
console.log('');
|
|
1096
906
|
}
|
|
1097
|
-
// ─── List mode ───────────────────────────────────────────────────────────────
|
|
1098
907
|
async function renderList(agent, version, versionHome, kind, options) {
|
|
1099
908
|
const items = collectKind(agent, versionHome, kind);
|
|
1100
909
|
await renderItemList(`${agent}@${version}`, { agent, version }, kind, items, options);
|
|
@@ -1122,44 +931,17 @@ async function renderItemList(header, jsonHead, kind, items, options, hookManife
|
|
|
1122
931
|
console.log('');
|
|
1123
932
|
return;
|
|
1124
933
|
}
|
|
1125
|
-
// Route through the shared resource view: an interactive picker with a live
|
|
1126
|
-
// preview in a TTY, a plain aligned table when piped. This is the same
|
|
1127
|
-
// renderer `agents skills list`, `agents commands` and four others already
|
|
1128
|
-
// use — inspect was the last drill-down printing its own two-line-per-entry
|
|
1129
|
-
// dump with a `[source]` tag repeated on every row.
|
|
1130
|
-
//
|
|
1131
|
-
// Sync targets are deliberately off: for a repo the resources ARE the source,
|
|
1132
|
-
// so the column would read "no installed versions" for every row.
|
|
1133
934
|
const sources = new Set(items.map(i => i.source));
|
|
1134
|
-
// A hook has no prose description — it is a script. Leaving the column blank
|
|
1135
|
-
// is honest but useless, so it carries what the Hooks view is actually for:
|
|
1136
|
-
// the events that fire it. Same string the overview prints.
|
|
1137
935
|
const hookEvents = kind !== 'hooks' ? null : (hookManifest ?? hookManifestByScript(loadCentralHookManifest()));
|
|
1138
|
-
// A routine's byte size says nothing; whether it last ran, and where it is
|
|
1139
|
-
// allowed to run, is the whole question. Devices needs the room, so it only
|
|
1140
|
-
// takes a column on a wide terminal — below that it folds into the description
|
|
1141
|
-
// rather than being dropped.
|
|
1142
936
|
const isRoutines = kind === 'routines';
|
|
1143
937
|
const routineDevicesColumn = isRoutines && terminalWidth() >= 100;
|
|
1144
938
|
await showResourceList({
|
|
1145
939
|
resourcePlural: kind,
|
|
1146
940
|
resourceSingular: kind.replace(/s$/, ''),
|
|
1147
941
|
extraLabel: isRoutines ? 'Last' : 'Size',
|
|
1148
|
-
// Only carry a source column when the rows actually differ; a uniform
|
|
1149
|
-
// `[.system]` on every row is 13 columns spent on one bit of information.
|
|
1150
942
|
extra2Label: routineDevicesColumn ? 'Devices' : (isRoutines ? undefined : (sources.size > 1 ? 'Source' : undefined)),
|
|
1151
943
|
showSync: false,
|
|
1152
|
-
// inspect's names run long — hook scripts (`00-agent-verify-work-complete`
|
|
1153
|
-
// and its `_test` sibling) and namespaced plugin entries (`/swarm:orchestrate`)
|
|
1154
|
-
// both blow past the 22-char default and truncate to the same string.
|
|
1155
|
-
//
|
|
1156
|
-
// Gate on terminal width, NOT on "do any rows have a description": that
|
|
1157
|
-
// proxy depended on which path built the items — the repo path hardcodes an
|
|
1158
|
-
// empty description so it widened, while the agent path filled one from the
|
|
1159
|
-
// script's shebang so it never did. Same command, two behaviours.
|
|
1160
944
|
nameCap: terminalWidth() >= 120 ? 40 : undefined,
|
|
1161
|
-
// Keep names clickable — the pre-picker list wrapped every name in an OSC-8
|
|
1162
|
-
// link to its file, and losing that would be a silent capability regression.
|
|
1163
945
|
linkFor: row => items.find(i => i.name === row.name)?.linkTarget,
|
|
1164
946
|
emptyMessage: ` (none installed)`,
|
|
1165
947
|
rows: items.map(item => ({
|
|
@@ -1172,8 +954,6 @@ async function renderItemList(header, jsonHead, kind, items, options, hookManife
|
|
|
1172
954
|
const problem = extraOf(item, 'problem');
|
|
1173
955
|
if (problem)
|
|
1174
956
|
return problem;
|
|
1175
|
-
// Compose at the row, leaving item.description pure prose for JSON.
|
|
1176
|
-
// Also makes "daily" and "zion" searchable in the picker's filter.
|
|
1177
957
|
return [
|
|
1178
958
|
extraOf(item, 'fires'),
|
|
1179
959
|
routineDevicesColumn ? '' : compactDeviceCell(extraOf(item, 'devices')),
|
|
@@ -1187,16 +967,9 @@ async function renderItemList(header, jsonHead, kind, items, options, hookManife
|
|
|
1187
967
|
? compactDeviceCell(extraOf(item, 'devices')) || 'none'
|
|
1188
968
|
: (isRoutines ? undefined : (sources.size > 1 ? item.source : undefined)),
|
|
1189
969
|
targets: [],
|
|
1190
|
-
// Pass the resolved manifest: the picker rebuilds this on every arrow
|
|
1191
|
-
// key, so re-reading ~11 KB of YAML per keystroke is wasted work on top
|
|
1192
|
-
// of being the wrong manifest for a repo target.
|
|
1193
970
|
buildDetail: () => previewFor(kind, item, hookEvents ?? new Map()),
|
|
1194
971
|
})),
|
|
1195
972
|
});
|
|
1196
|
-
// On a TTY the picker's preview pane carries each plugin's bundled skills and
|
|
1197
|
-
// commands. Piped, there is no pane — and the pre-picker output printed those
|
|
1198
|
-
// lines under every row, so a table alone would silently drop what a plugin
|
|
1199
|
-
// actually ships from `agents inspect . --plugins | grep`.
|
|
1200
973
|
if (!isInteractiveTerminal() && items.some(i => i.groups?.length)) {
|
|
1201
974
|
for (const item of items) {
|
|
1202
975
|
if (!item.groups?.length)
|
|
@@ -1205,36 +978,21 @@ async function renderItemList(header, jsonHead, kind, items, options, hookManife
|
|
|
1205
978
|
const width = Math.max(...item.groups.map(g => g.label.length));
|
|
1206
979
|
for (const g of item.groups) {
|
|
1207
980
|
const colorFn = PLUGIN_GROUP_COLORS[g.label] ?? chalk.white;
|
|
1208
|
-
// Wrapped, not truncated: routing these through a truncating helper is
|
|
1209
|
-
// what once showed 4 of a 10-command plugin at 80 columns.
|
|
1210
981
|
printWrappedJoined(` ${chalk.gray(g.label.padEnd(width))} `, g.items.map(s => colorFn(s)), ', ');
|
|
1211
982
|
}
|
|
1212
983
|
}
|
|
1213
984
|
console.log('');
|
|
1214
985
|
}
|
|
1215
986
|
}
|
|
1216
|
-
/**
|
|
1217
|
-
* The scannable half of a description: everything before the trigger clause, and
|
|
1218
|
-
* only the first sentence of that. 15 of 20 skills in .system lead with their
|
|
1219
|
-
* purpose and then append "Triggers on: …" — in a one-line row that boilerplate
|
|
1220
|
-
* is what survives truncation, so the row says nothing. The full text still
|
|
1221
|
-
* renders in the preview pane.
|
|
1222
|
-
*/
|
|
1223
987
|
export function summaryLine(description) {
|
|
1224
988
|
if (!description)
|
|
1225
989
|
return '';
|
|
1226
990
|
const cutAtTrigger = description.split(/\s*(?:Triggers on|Use this skill when|Invoke when)\b/i)[0];
|
|
1227
|
-
// A description that OPENS with the trigger clause splits to an empty head.
|
|
1228
|
-
// Returning that would blank the row while --json still carried the text —
|
|
1229
|
-
// showing less than we have is worse than showing boilerplate.
|
|
1230
991
|
const trimmed = cutAtTrigger.trim() || description.trim();
|
|
1231
|
-
// First sentence, but only when the split leaves something substantial —
|
|
1232
|
-
// "e.g." and friends would otherwise chop a description to a fragment.
|
|
1233
992
|
const firstSentence = trimmed.match(/^.*?[.!?](?=\s+[A-Z(`])/)?.[0];
|
|
1234
993
|
const candidate = firstSentence && firstSentence.length >= 40 ? firstSentence : trimmed;
|
|
1235
994
|
return candidate.replace(/\s+/g, ' ').trim();
|
|
1236
995
|
}
|
|
1237
|
-
/** Compact size for a list row: `18 KB` for a bundle, `413 B` for a single file. */
|
|
1238
996
|
function itemSizeLabel(p) {
|
|
1239
997
|
if (!p)
|
|
1240
998
|
return '';
|
|
@@ -1246,7 +1004,6 @@ function itemSizeLabel(p) {
|
|
|
1246
1004
|
const { bytes } = pathSize(p);
|
|
1247
1005
|
return formatBytes(bytes);
|
|
1248
1006
|
}
|
|
1249
|
-
// ─── Detail mode (fuzzy) ─────────────────────────────────────────────────────
|
|
1250
1007
|
async function renderDetail(agent, version, versionHome, kind, query, options) {
|
|
1251
1008
|
const items = collectKind(agent, versionHome, kind);
|
|
1252
1009
|
renderItemDetail(`${agent}@${version}`, { agent, version }, kind, query, items, options);
|
|
@@ -1283,22 +1040,11 @@ function renderItemDetail(header, jsonHead, kind, query, items, options) {
|
|
|
1283
1040
|
const matchTag = best.matchKind === 'exact' ? 'exact' : best.matchKind === 'substring' ? 'substring' : `~${best.distance}`;
|
|
1284
1041
|
console.log(` ${chalk.green('✓')} ${termLink(chalk.bold.cyan(best.item.name), best.item.linkTarget)} ${chalk.gray(`[${matchTag}, ${best.item.source}]`)}`);
|
|
1285
1042
|
if (best.item.description) {
|
|
1286
|
-
// Wrap to the real terminal width. This used to be truncate(desc, 100): a
|
|
1287
|
-
// character count blind to the window, so a long description lost its
|
|
1288
|
-
// sentence at 80 columns AND wasted the space at 200.
|
|
1289
1043
|
for (const line of wrapJoined(' ', best.item.description.split(/\s+/), ' ', terminalWidth())) {
|
|
1290
1044
|
console.log(chalk.gray(line));
|
|
1291
1045
|
}
|
|
1292
1046
|
}
|
|
1293
1047
|
for (const [k, v] of buildDetailRows(best.item, kind)) {
|
|
1294
|
-
// Wrap, never truncate. These values are `, `-joined lists (commands,
|
|
1295
|
-
// skills, triggers, tools) and cutting them hides real entries — a 9-command
|
|
1296
|
-
// plugin would show 4. Before the detail view wrapped at all, the terminal
|
|
1297
|
-
// soft-wrapped these in full, so truncating here would lose information the
|
|
1298
|
-
// old output had.
|
|
1299
|
-
// String(v) is belt-and-braces: pluginToItem now coerces every manifest field
|
|
1300
|
-
// through manifestText, so nothing non-string should reach here. Kept because
|
|
1301
|
-
// this is the choke point every future row kind flows through.
|
|
1302
1048
|
printWrappedJoined(` ${chalk.gray(k.padEnd(10))} `, String(v).split(', '), ', ');
|
|
1303
1049
|
}
|
|
1304
1050
|
if (others.length > 0) {
|
|
@@ -1310,7 +1056,6 @@ function renderItemDetail(header, jsonHead, kind, query, items, options) {
|
|
|
1310
1056
|
}
|
|
1311
1057
|
console.log('');
|
|
1312
1058
|
}
|
|
1313
|
-
// ─── Data collection ─────────────────────────────────────────────────────────
|
|
1314
1059
|
function collectCapabilities(agent, version) {
|
|
1315
1060
|
const out = {};
|
|
1316
1061
|
for (const cap of CAPABILITY_NAMES) {
|
|
@@ -1330,18 +1075,12 @@ function collectItemsByKind(agent, versionHome) {
|
|
|
1330
1075
|
out[kind] = collectKind(agent, versionHome, kind);
|
|
1331
1076
|
return out;
|
|
1332
1077
|
}
|
|
1333
|
-
/** A simple-kind count row: `kind N user:30 system:12 name, name …(+K)`. */
|
|
1334
1078
|
function printSimpleResourceRow(kind, items) {
|
|
1335
1079
|
const count = String(items.length).padStart(4);
|
|
1336
1080
|
const breakdown = chalk.gray(scopeBreakdownPlain(countBySource(items.map(i => i.source))).padEnd(18));
|
|
1337
1081
|
const preview = items.length > 0 ? chalk.gray(truncate(previewNames(items, 3), 48)) : '';
|
|
1338
1082
|
console.log(` ${kind.padEnd(10)} ${count} ${breakdown} ${preview}`.trimEnd());
|
|
1339
1083
|
}
|
|
1340
|
-
/**
|
|
1341
|
-
* Build the `resources` JSON: every kind keeps `total` + `bySource` (back-compat),
|
|
1342
|
-
* simple kinds add `names`, and the rich kinds add structured `items` (hook
|
|
1343
|
-
* events/predicates, mcp transport/url/command, plugin version + group counts).
|
|
1344
|
-
*/
|
|
1345
1084
|
function summaryResourcesJson(itemsByKind, hookByScript, mcpConfigs, hookInventory) {
|
|
1346
1085
|
const out = {};
|
|
1347
1086
|
for (const kind of DRILLABLE_KINDS) {
|
|
@@ -1417,14 +1156,6 @@ function collectKind(agent, versionHome, kind) {
|
|
|
1417
1156
|
return agentRoutineItems(agent);
|
|
1418
1157
|
}
|
|
1419
1158
|
}
|
|
1420
|
-
/**
|
|
1421
|
-
* The routines that dispatch this agent.
|
|
1422
|
-
*
|
|
1423
|
-
* Version-invariant, like the `rules`/`subagents` cases above which also ignore
|
|
1424
|
-
* `versionHome`: a routine names an agent, never an agent@version. `listJobs()`
|
|
1425
|
-
* with no cwd is deliberate — it is the daemon's own view (user + system), so an
|
|
1426
|
-
* unsynced project routine that can never fire is not listed as if it could.
|
|
1427
|
-
*/
|
|
1428
1159
|
function agentRoutineItems(agent) {
|
|
1429
1160
|
const { live } = defaultRoutineLive();
|
|
1430
1161
|
const now = new Date();
|
|
@@ -1447,8 +1178,6 @@ function agentRoutineItems(agent) {
|
|
|
1447
1178
|
description: routineDescription(job, ''),
|
|
1448
1179
|
extra: [
|
|
1449
1180
|
['fires', routineFireLabel(job, now)],
|
|
1450
|
-
// listJobs already applied device activation, so job.enabled is the
|
|
1451
|
-
// effective answer here — no need to re-derive it.
|
|
1452
1181
|
['enabled', job.enabled ? 'yes' : 'no'],
|
|
1453
1182
|
['devices', state.devices.length > 0
|
|
1454
1183
|
? state.devices.join(', ')
|
|
@@ -1464,26 +1193,11 @@ function agentRoutineItems(agent) {
|
|
|
1464
1193
|
function pluginItems() {
|
|
1465
1194
|
return discoverPlugins().map(p => pluginToItem(p, 'user'));
|
|
1466
1195
|
}
|
|
1467
|
-
/**
|
|
1468
|
-
* Map a discovered plugin to a resource item, surfacing the manifest description
|
|
1469
|
-
* and the bundle's nested resources (skills, commands, hooks, ...) as detail rows.
|
|
1470
|
-
*
|
|
1471
|
-
* EVERY field read here comes from an uncontrolled `plugin.json`:
|
|
1472
|
-
* `loadPluginManifest` casts parsed JSON straight to `PluginManifest` and
|
|
1473
|
-
* validates only name/version (`lib/plugins.ts`), so the declared types are a
|
|
1474
|
-
* hope, not a guarantee. A non-string reaching a renderer throws on `.split` /
|
|
1475
|
-
* `.replace`, and `pluginToItem` runs while BUILDING THE LIST — so one malformed
|
|
1476
|
-
* manifest anywhere takes down `inspect .`, `--plugins`, `--json`, and even a
|
|
1477
|
-
* query for a different, valid plugin. Coerce every field through `manifestText`;
|
|
1478
|
-
* never trust the annotation.
|
|
1479
|
-
*/
|
|
1480
1196
|
function pluginToItem(plugin, source) {
|
|
1481
1197
|
const extra = [];
|
|
1482
1198
|
const version = manifestText(plugin.manifest.version);
|
|
1483
1199
|
if (version)
|
|
1484
1200
|
extra.push(['version', version]);
|
|
1485
|
-
// Which execution surfaces the bundle actually carries. Detection already
|
|
1486
|
-
// exists for the plugin picker; the detail view simply never asked for it.
|
|
1487
1201
|
const surfaces = pluginCapabilityLabels(inspectPluginCapabilities(plugin.root));
|
|
1488
1202
|
if (surfaces.length > 0)
|
|
1489
1203
|
extra.push(['surfaces', surfaces.join(', ')]);
|
|
@@ -1491,7 +1205,6 @@ function pluginToItem(plugin, source) {
|
|
|
1491
1205
|
const authorLabel = manifestText(typeof author === 'object' && author !== null ? author.name : author);
|
|
1492
1206
|
if (authorLabel)
|
|
1493
1207
|
extra.push(['author', authorLabel]);
|
|
1494
|
-
// `.length` is truthy for a bare string too, and a string has no `.join`.
|
|
1495
1208
|
const deps = plugin.manifest.dependencies;
|
|
1496
1209
|
const depsLabel = Array.isArray(deps)
|
|
1497
1210
|
? deps.map(manifestText).filter(Boolean).join(', ')
|
|
@@ -1503,18 +1216,11 @@ function pluginToItem(plugin, source) {
|
|
|
1503
1216
|
source,
|
|
1504
1217
|
path: plugin.root,
|
|
1505
1218
|
linkTarget: linkTarget(plugin.root),
|
|
1506
|
-
// `?? ''` catches only null/undefined — a numeric or array description used
|
|
1507
|
-
// to reach truncateToWidth/`.split` and kill the render for every plugin.
|
|
1508
1219
|
description: manifestText(plugin.manifest.description),
|
|
1509
1220
|
extra,
|
|
1510
1221
|
groups: pluginResourceGroups(plugin),
|
|
1511
1222
|
};
|
|
1512
1223
|
}
|
|
1513
|
-
/**
|
|
1514
|
-
* Render one uncontrolled manifest value as display text. Objects and arrays
|
|
1515
|
-
* carry no sensible one-line form, so they become '' (the row is then dropped)
|
|
1516
|
-
* rather than `[object Object]`; everything else stringifies.
|
|
1517
|
-
*/
|
|
1518
1224
|
function manifestText(v) {
|
|
1519
1225
|
if (v === null || v === undefined)
|
|
1520
1226
|
return '';
|
|
@@ -1522,12 +1228,6 @@ function manifestText(v) {
|
|
|
1522
1228
|
return '';
|
|
1523
1229
|
return String(v);
|
|
1524
1230
|
}
|
|
1525
|
-
/**
|
|
1526
|
-
* Render one uncontrolled value as a list of display strings. A scalar becomes a
|
|
1527
|
-
* one-element list — the case `?? []` and `Array.isArray` both miss, and the one
|
|
1528
|
-
* that threw on `.join`. Object entries drop out rather than becoming
|
|
1529
|
-
* `[object Object]`.
|
|
1530
|
-
*/
|
|
1531
1231
|
function manifestList(v) {
|
|
1532
1232
|
if (v === null || v === undefined)
|
|
1533
1233
|
return [];
|
|
@@ -1544,12 +1244,6 @@ function entriesFromAgentResources(agent, versionHome, kind) {
|
|
|
1544
1244
|
source: e.scope,
|
|
1545
1245
|
path: e.path,
|
|
1546
1246
|
linkTarget: linkTarget(e.path),
|
|
1547
|
-
// A hook is a shell/Python script with no human description, so the prose
|
|
1548
|
-
// fallback returned code: all 53 under an agent home read "!/usr/bin/env
|
|
1549
|
-
// bash" (the `#` strip eating the shebang), and skipping that line only
|
|
1550
|
-
// promoted `set -euo pipefail`. repoHookItems already hardcodes '' for the
|
|
1551
|
-
// repo path; this makes the agent path agree instead of guessing. The
|
|
1552
|
-
// Hooks view shows firing events in that column.
|
|
1553
1247
|
description: kind === 'hooks' ? '' : readDescription(e.path),
|
|
1554
1248
|
}));
|
|
1555
1249
|
}
|
|
@@ -1573,7 +1267,6 @@ function mcpItems(agent, versionHome) {
|
|
|
1573
1267
|
description: m.version ? `version ${m.version}` : '',
|
|
1574
1268
|
}));
|
|
1575
1269
|
}
|
|
1576
|
-
// ─── Detail field builders ───────────────────────────────────────────────────
|
|
1577
1270
|
function buildDetail(item, kind) {
|
|
1578
1271
|
const rows = buildDetailRows(item, kind);
|
|
1579
1272
|
const out = {
|
|
@@ -1586,15 +1279,6 @@ function buildDetail(item, kind) {
|
|
|
1586
1279
|
out[k] = v;
|
|
1587
1280
|
return out;
|
|
1588
1281
|
}
|
|
1589
|
-
/**
|
|
1590
|
-
* The preview pane for one row, refreshed as the selection moves.
|
|
1591
|
-
*
|
|
1592
|
-
* Adaptive on purpose — the sessions picker sets the precedent: a Cursor
|
|
1593
|
-
* session shows Dirs/Repos/Artifacts, a Codex one shows a different set, and
|
|
1594
|
-
* empty fields simply do not render. A hook's useful metadata (what fires it,
|
|
1595
|
-
* whether it is wired) has nothing in common with a skill's (what invokes it,
|
|
1596
|
-
* where it is synced), so each kind contributes its own rows and blanks drop out.
|
|
1597
|
-
*/
|
|
1598
1282
|
export function previewFor(kind, item, hookManifest) {
|
|
1599
1283
|
const out = [];
|
|
1600
1284
|
const label = (k, v) => ` ${chalk.gray(k.padEnd(11))}${v}`;
|
|
@@ -1606,16 +1290,7 @@ export function previewFor(kind, item, hookManifest) {
|
|
|
1606
1290
|
}
|
|
1607
1291
|
}
|
|
1608
1292
|
const rows = [];
|
|
1609
|
-
// A hook's identity is when it fires — the summary view has always shown this
|
|
1610
|
-
// while the drill-down showed only a size.
|
|
1611
1293
|
if (kind === 'hooks') {
|
|
1612
|
-
// Use the manifest the caller already resolved. Re-resolving the CENTRAL
|
|
1613
|
-
// one here made the preview contradict its own row: a repo hook wired by
|
|
1614
|
-
// that repo's agents.yaml showed `PreToolUse(Bash)` in the table and
|
|
1615
|
-
// "not registered" in the pane below it, and the mirror case credited a
|
|
1616
|
-
// central registration to the repo. No `?? loadCentralHookManifest()`
|
|
1617
|
-
// fallback: it would be dead in production and would silently reinstate
|
|
1618
|
-
// exactly that bug the next time a caller forgot the argument.
|
|
1619
1294
|
const hook = hookManifest.get(item.name);
|
|
1620
1295
|
if (hook) {
|
|
1621
1296
|
rows.push(['fires', chalk.yellow(summarizeHook(hook))]);
|
|
@@ -1651,7 +1326,6 @@ export function previewFor(kind, item, hookManifest) {
|
|
|
1651
1326
|
for (const [k, v] of rows)
|
|
1652
1327
|
out.push(label(k, v));
|
|
1653
1328
|
}
|
|
1654
|
-
// A plugin's bundled resources, each on its own line rather than a comma run.
|
|
1655
1329
|
if (item.groups?.length) {
|
|
1656
1330
|
for (const g of item.groups) {
|
|
1657
1331
|
out.push('');
|
|
@@ -1664,7 +1338,6 @@ export function previewFor(kind, item, hookManifest) {
|
|
|
1664
1338
|
}
|
|
1665
1339
|
return out.join('\n');
|
|
1666
1340
|
}
|
|
1667
|
-
/** `18 KB · 3 files` for a bundle, `413 B` for a single file. */
|
|
1668
1341
|
function itemSizeDetail(p) {
|
|
1669
1342
|
if (!p)
|
|
1670
1343
|
return '';
|
|
@@ -1680,8 +1353,6 @@ function buildDetailRows(item, kind) {
|
|
|
1680
1353
|
const rows = [];
|
|
1681
1354
|
if (item.path && kind !== 'mcp') {
|
|
1682
1355
|
const stat = safeStat(item.path);
|
|
1683
|
-
// A bundle reports its real recursive weight. `(bundle)` carried no
|
|
1684
|
-
// information, and pathSize/formatBytes already back the summary view.
|
|
1685
1356
|
if (stat) {
|
|
1686
1357
|
if (stat.isDirectory()) {
|
|
1687
1358
|
const { bytes, files } = pathSize(item.path);
|
|
@@ -1692,17 +1363,12 @@ function buildDetailRows(item, kind) {
|
|
|
1692
1363
|
}
|
|
1693
1364
|
}
|
|
1694
1365
|
}
|
|
1695
|
-
// Kind-specific fields
|
|
1696
1366
|
if (kind === 'skills' || kind === 'commands' || kind === 'subagents') {
|
|
1697
1367
|
const fm = readFrontmatter(item.path);
|
|
1698
1368
|
if (fm) {
|
|
1699
|
-
// description was already printed by caller; skip if redundant
|
|
1700
1369
|
if (typeof fm.description === 'string' && fm.description.trim() !== item.description.trim()) {
|
|
1701
1370
|
rows.push(['description', truncate(fm.description, 120)]);
|
|
1702
1371
|
}
|
|
1703
|
-
// Frontmatter is uncontrolled YAML too. These were type-guarded against a
|
|
1704
|
-
// crash but still rendered `[object Object]` for an entry that is a map,
|
|
1705
|
-
// and dropped a scalar `triggers: foo` entirely.
|
|
1706
1372
|
const triggers = manifestList(fm.triggers).join(', ');
|
|
1707
1373
|
if (triggers)
|
|
1708
1374
|
rows.push(['triggers', triggers]);
|
|
@@ -1714,35 +1380,19 @@ function buildDetailRows(item, kind) {
|
|
|
1714
1380
|
rows.push(['tools', tools]);
|
|
1715
1381
|
}
|
|
1716
1382
|
}
|
|
1717
|
-
// Plugin bundles surface their nested resources (skills, commands, …) plus
|
|
1718
|
-
// scalar rows (version).
|
|
1719
1383
|
if (kind === 'plugins') {
|
|
1720
1384
|
if (item.groups)
|
|
1721
1385
|
for (const g of item.groups)
|
|
1722
1386
|
rows.push([g.label, g.items.join(', ')]);
|
|
1723
1387
|
}
|
|
1724
|
-
// Every kind's scalar rows. previewFor already renders `extra` unconditionally,
|
|
1725
|
-
// so gating it on plugins here made the detail view and its own preview pane
|
|
1726
|
-
// disagree about the same item — and dropped a routine's schedule/status from
|
|
1727
|
-
// `--routine <name> --json` entirely.
|
|
1728
1388
|
if (item.extra)
|
|
1729
1389
|
rows.push(...item.extra);
|
|
1730
1390
|
return rows;
|
|
1731
1391
|
}
|
|
1732
|
-
/** `system` → `sys`; everything else unchanged. Keeps the tag column narrow. */
|
|
1733
1392
|
function abbrevSource(s) {
|
|
1734
1393
|
return s === 'system' ? 'sys' : s;
|
|
1735
1394
|
}
|
|
1736
|
-
/**
|
|
1737
|
-
* Compact one-liner for a hook from its manifest entry: the firing events (with
|
|
1738
|
-
* the matcher/tool-name in parens), then a `·`-separated predicate summary, then
|
|
1739
|
-
* an optional cache tail. Plain text — the caller applies color.
|
|
1740
|
-
*/
|
|
1741
1395
|
export function summarizeHook(hook) {
|
|
1742
|
-
// `hook` is an unvalidated YAML cast from agents.yaml, so `??` is not enough:
|
|
1743
|
-
// a scalar `events: PreToolUse` is neither null nor an array, and `.join` threw
|
|
1744
|
-
// — taking down bare `agents inspect <repo>`, and via the central manifest
|
|
1745
|
-
// `agents inspect <agent>` on every box. Same shape as the plugin.json bug.
|
|
1746
1396
|
const events = manifestList(hook.events).join('/') || '(no event)';
|
|
1747
1397
|
let matcher = manifestText(hook.matcher);
|
|
1748
1398
|
if (!matcher && hook.matches?.tool_name) {
|
|
@@ -1759,12 +1409,9 @@ export function summarizeHook(hook) {
|
|
|
1759
1409
|
line += ` (${ttl} cache)`;
|
|
1760
1410
|
return line;
|
|
1761
1411
|
}
|
|
1762
|
-
/** `·`-separated predicate summary from a hook's `matches:` block (tool_name omitted — shown in the matcher parens). */
|
|
1763
1412
|
function summarizeMatches(m) {
|
|
1764
1413
|
if (!m)
|
|
1765
1414
|
return '';
|
|
1766
|
-
// Every predicate is raw YAML. `truncate` calls `.slice`, so a numeric
|
|
1767
|
-
// `prompt_contains: 12345` threw here just like the events case above.
|
|
1768
1415
|
const bits = [];
|
|
1769
1416
|
if (m.git_dirty)
|
|
1770
1417
|
bits.push('git_dirty');
|
|
@@ -1785,25 +1432,19 @@ function summarizeMatches(m) {
|
|
|
1785
1432
|
bits.push(`has ${projectHas}`);
|
|
1786
1433
|
return bits.join(' · ');
|
|
1787
1434
|
}
|
|
1788
|
-
/** Normalize a hook cache shorthand/object to a display ttl ("5m", "1h"); null when uncached. */
|
|
1789
1435
|
function hookCacheTtl(cache) {
|
|
1790
1436
|
if (cache === undefined || cache === null)
|
|
1791
1437
|
return null;
|
|
1792
1438
|
if (typeof cache === 'string')
|
|
1793
1439
|
return cache.replace(/-bg$/, '');
|
|
1794
|
-
// A bare `cache: 5` has no `.ttl`, and `cache: {ttl: {…}}` has a non-scalar
|
|
1795
|
-
// one — String() on either rendered `(undefined cache)` / `([object Object]
|
|
1796
|
-
// cache)`. No ttl to show means no cache tail.
|
|
1797
1440
|
return manifestText(cache.ttl) || null;
|
|
1798
1441
|
}
|
|
1799
|
-
/** Compact one-liner for an MCP server: padded transport + the url (http) or command line (stdio). */
|
|
1800
1442
|
export function summarizeMcp(cfg) {
|
|
1801
1443
|
const target = cfg.transport === 'http'
|
|
1802
1444
|
? (cfg.url ?? '')
|
|
1803
1445
|
: [cfg.command, ...(cfg.args ?? [])].filter(Boolean).join(' ');
|
|
1804
1446
|
return `${cfg.transport.padEnd(5)} ${truncate(target, 60)}`.trimEnd();
|
|
1805
1447
|
}
|
|
1806
|
-
/** Print `Title (N)` then up to `max` aligned `[source] name detail` rows with a `…(+K)` tail. */
|
|
1807
1448
|
function printExpandedSection(title, rows, max = 6) {
|
|
1808
1449
|
console.log('\n' + chalk.bold(title) + chalk.gray(` (${rows.length})`));
|
|
1809
1450
|
if (rows.length === 0) {
|
|
@@ -1822,23 +1463,15 @@ function printExpandedSection(title, rows, max = 6) {
|
|
|
1822
1463
|
if (rows.length > max)
|
|
1823
1464
|
console.log(chalk.gray(` …(+${rows.length - max})`));
|
|
1824
1465
|
}
|
|
1825
|
-
/** Tally a source list into `{user: n, system: m}`. */
|
|
1826
1466
|
function countBySource(sources) {
|
|
1827
1467
|
const out = {};
|
|
1828
1468
|
for (const s of sources)
|
|
1829
1469
|
out[s] = (out[s] || 0) + 1;
|
|
1830
1470
|
return out;
|
|
1831
1471
|
}
|
|
1832
|
-
/** Unbracketed scope breakdown for the simple count rows: `user:30 system:12`. */
|
|
1833
1472
|
function scopeBreakdownPlain(bySource) {
|
|
1834
1473
|
return Object.entries(bySource).map(([k, v]) => `${k}:${v}`).join(' ');
|
|
1835
1474
|
}
|
|
1836
|
-
/**
|
|
1837
|
-
* Index a hook manifest by script basename (no extension). Installed hooks are
|
|
1838
|
-
* named after their script file (`04-capture-…`), while the manifest is keyed by
|
|
1839
|
-
* logical name (`capture-…`) with the filename in `script:` — so we join on the
|
|
1840
|
-
* script basename, not the manifest key.
|
|
1841
|
-
*/
|
|
1842
1475
|
export function hookManifestByScript(manifest) {
|
|
1843
1476
|
const out = new Map();
|
|
1844
1477
|
for (const hook of Object.values(manifest)) {
|
|
@@ -1848,12 +1481,7 @@ export function hookManifestByScript(manifest) {
|
|
|
1848
1481
|
}
|
|
1849
1482
|
return out;
|
|
1850
1483
|
}
|
|
1851
|
-
/** Build hook rows by enriching the installed hook items with manifest events/predicates. */
|
|
1852
1484
|
function hookRows(items, byScript) {
|
|
1853
|
-
// The section shows only the first handful before a `…(+N)` tail, so order
|
|
1854
|
-
// matters: wired hooks first. Alphabetically `00-…_test` sorts next to the
|
|
1855
|
-
// hook it tests, so half the visible rows were test scaffolding with a blank
|
|
1856
|
-
// event column while real registered hooks hid behind the tail.
|
|
1857
1485
|
const ordered = [...items].sort((a, b) => {
|
|
1858
1486
|
const aw = byScript.has(a.name) ? 0 : 1;
|
|
1859
1487
|
const bw = byScript.has(b.name) ? 0 : 1;
|
|
@@ -1865,13 +1493,10 @@ function hookRows(items, byScript) {
|
|
|
1865
1493
|
source: item.source,
|
|
1866
1494
|
name: item.name,
|
|
1867
1495
|
linkTarget: item.linkTarget,
|
|
1868
|
-
// Hooks are shell scripts with no human description — show events/predicates
|
|
1869
|
-
// from the manifest, or nothing rather than a meaningless shebang line.
|
|
1870
1496
|
detail: hook ? summarizeHook(hook) : '',
|
|
1871
1497
|
};
|
|
1872
1498
|
});
|
|
1873
1499
|
}
|
|
1874
|
-
/** Build plugin rows: `vVERSION skills:6 commands:5 …` from the bundle's groups. */
|
|
1875
1500
|
function pluginRows(items) {
|
|
1876
1501
|
return items.map(item => {
|
|
1877
1502
|
const version = item.extra?.find(([k]) => k === 'version')?.[1];
|
|
@@ -1880,16 +1505,7 @@ function pluginRows(items) {
|
|
|
1880
1505
|
return { source: item.source, name: item.name, detail, linkTarget: item.linkTarget };
|
|
1881
1506
|
});
|
|
1882
1507
|
}
|
|
1883
|
-
/** Statuses that mean the last run did not do its job. */
|
|
1884
1508
|
const UNHEALTHY_RUN = new Set(['failed', 'timeout', 'missed', 'blocked']);
|
|
1885
|
-
/**
|
|
1886
|
-
* Health tier for the section ordering. Lower sorts first.
|
|
1887
|
-
*
|
|
1888
|
-
* `printExpandedSection` shows only the first handful before a `…(+N)` tail, so
|
|
1889
|
-
* for a repo with 24 routines the sort IS the section. Same reasoning as
|
|
1890
|
-
* `hookRows` putting wired hooks first: a routine that fires nowhere is exactly
|
|
1891
|
-
* what the reader opened this for, and must never hide behind the tail.
|
|
1892
|
-
*/
|
|
1893
1509
|
export function routineHealthTier(item) {
|
|
1894
1510
|
if (extraOf(item, 'problem'))
|
|
1895
1511
|
return 0;
|
|
@@ -1906,34 +1522,23 @@ export function routineHealthTier(item) {
|
|
|
1906
1522
|
return 3;
|
|
1907
1523
|
return 4;
|
|
1908
1524
|
}
|
|
1909
|
-
/** Build routine rows: `daily at 9:00 AM zion completed · 2h ago`. Broken first. */
|
|
1910
1525
|
function routineRows(items) {
|
|
1911
1526
|
const ordered = [...items].sort((a, b) => {
|
|
1912
1527
|
const at = routineHealthTier(a), bt = routineHealthTier(b);
|
|
1913
1528
|
return at !== bt ? at - bt : a.name.localeCompare(b.name);
|
|
1914
1529
|
});
|
|
1915
1530
|
const nameW = ordered.length > 0 ? Math.max(...ordered.slice(0, 6).map(r => r.name.length)) : 0;
|
|
1916
|
-
// Budget the three cells against what printExpandedSection leaves after the
|
|
1917
|
-
// `[source]` tag and the name column, so the status never truncates to `fai…`.
|
|
1918
1531
|
const budget = Math.max(30, terminalWidth() - nameW - 14);
|
|
1919
1532
|
const firesW = Math.min(21, Math.max(12, Math.floor(budget * 0.42)));
|
|
1920
1533
|
const devicesW = Math.min(14, Math.max(7, Math.floor(budget * 0.22)));
|
|
1921
1534
|
return ordered.map(item => {
|
|
1922
1535
|
const problem = extraOf(item, 'problem');
|
|
1923
1536
|
const fires = extraOf(item, 'fires');
|
|
1924
|
-
// A routine with no `fires` never parsed — the problem IS the whole row. One
|
|
1925
|
-
// that parsed but carries a problem (a duplicate-extension sibling) keeps its
|
|
1926
|
-
// schedule and status, with the problem appended rather than replacing them.
|
|
1927
1537
|
if (problem && !fires) {
|
|
1928
1538
|
return { source: item.source, name: item.name, linkTarget: item.linkTarget, detail: chalk.red(problem) };
|
|
1929
1539
|
}
|
|
1930
1540
|
const devices = compactDeviceCell(extraOf(item, 'devices'));
|
|
1931
1541
|
const last = extraOf(item, 'last');
|
|
1932
|
-
// Pad the PLAIN strings, then colour. Padding a chalk-wrapped string counts
|
|
1933
|
-
// the escape codes as width and silently steals columns from the next cell.
|
|
1934
|
-
// The trailing problem gets what the three sized cells leave, or it would
|
|
1935
|
-
// blow the row past the terminal and break the alignment this budget exists
|
|
1936
|
-
// to hold — a 147-column row at COLUMNS=100 in testing.
|
|
1937
1542
|
const problemW = Math.max(12, budget - firesW - devicesW - stringWidth(last) - 8);
|
|
1938
1543
|
const detail = [
|
|
1939
1544
|
chalk.gray(truncateToWidth(fires, firesW).padEnd(firesW)),
|
|
@@ -1949,10 +1554,6 @@ function routineRows(items) {
|
|
|
1949
1554
|
};
|
|
1950
1555
|
});
|
|
1951
1556
|
}
|
|
1952
|
-
/**
|
|
1953
|
-
* Routine rows for an agent target: `daily at 9:00 AM completed · 2h ago`.
|
|
1954
|
-
* No devices column — an agent view is inherently about this machine.
|
|
1955
|
-
*/
|
|
1956
1557
|
function agentRoutineRows(items) {
|
|
1957
1558
|
const ordered = [...items].sort((a, b) => {
|
|
1958
1559
|
const at = routineHealthTier(a), bt = routineHealthTier(b);
|
|
@@ -1964,13 +1565,6 @@ function agentRoutineRows(items) {
|
|
|
1964
1565
|
detail: `${extraOf(item, 'fires').padEnd(20)} ${colorLast(extraOf(item, 'last'))}`,
|
|
1965
1566
|
}));
|
|
1966
1567
|
}
|
|
1967
|
-
/**
|
|
1968
|
-
* `ok 2h` / `fail 3d` / `never` — the Last column, clamped to the 10-wide cell.
|
|
1969
|
-
*
|
|
1970
|
-
* The picker path pads without truncating, so an 11-char `blocked 3d` would push
|
|
1971
|
-
* the next column; the abbreviations cover only the two commonest statuses, so
|
|
1972
|
-
* the clamp is what actually holds the invariant.
|
|
1973
|
-
*/
|
|
1974
1568
|
function routineLastCell(item, width = 10) {
|
|
1975
1569
|
const last = extraOf(item, 'last');
|
|
1976
1570
|
if (!last || last === 'never run')
|
|
@@ -1979,12 +1573,6 @@ function routineLastCell(item, width = 10) {
|
|
|
1979
1573
|
const word = status === 'completed' ? 'ok' : status === 'failed' ? 'fail' : status;
|
|
1980
1574
|
return truncateToWidth(age ? `${word} ${age}` : word, width);
|
|
1981
1575
|
}
|
|
1982
|
-
/**
|
|
1983
|
-
* Trim the long-form `devices` phrasing down to a cell.
|
|
1984
|
-
*
|
|
1985
|
-
* The extra row is written for the detail pane ("no device — will not fire");
|
|
1986
|
-
* a 16-column cell needs the same fact in two words.
|
|
1987
|
-
*/
|
|
1988
1576
|
function compactDeviceCell(devices) {
|
|
1989
1577
|
if (devices.startsWith('no device —'))
|
|
1990
1578
|
return 'none ⚠';
|
|
@@ -2003,12 +1591,6 @@ function colorLast(last) {
|
|
|
2003
1591
|
return chalk.red(last);
|
|
2004
1592
|
return chalk.gray(last);
|
|
2005
1593
|
}
|
|
2006
|
-
/**
|
|
2007
|
-
* The one-line warning under the Routines section, or null when it would mislead.
|
|
2008
|
-
*
|
|
2009
|
-
* Silent until some device has materialized a `routines:` list — before that,
|
|
2010
|
-
* every routine is legitimately unpinned and "will not fire" would be noise.
|
|
2011
|
-
*/
|
|
2012
1594
|
export function routineDarkWarning(items) {
|
|
2013
1595
|
const materialized = items.some(i => {
|
|
2014
1596
|
const d = extraOf(i, 'devices');
|
|
@@ -2019,21 +1601,17 @@ export function routineDarkWarning(items) {
|
|
|
2019
1601
|
const dark = items.filter(i => extraOf(i, 'devices').startsWith('no device —')).length;
|
|
2020
1602
|
if (dark === 0)
|
|
2021
1603
|
return null;
|
|
2022
|
-
// The noun pluralizes on the total ("1 of 2 routines"), the verb on the count
|
|
2023
|
-
// that is actually dark ("... is on no device's allowlist").
|
|
2024
1604
|
const noun = items.length === 1 ? 'routine' : 'routines';
|
|
2025
1605
|
const verb = dark === 1 ? 'is' : 'are';
|
|
2026
1606
|
const pronoun = dark === 1 ? 'it' : 'they';
|
|
2027
1607
|
return `${dark} of ${items.length} ${noun} ${verb} on no device's allowlist — ${pronoun} will not fire.`;
|
|
2028
1608
|
}
|
|
2029
|
-
/** Build MCP rows by joining the installed mcp items with their full configs (transport/url/command). */
|
|
2030
1609
|
function mcpRows(items, configs) {
|
|
2031
1610
|
return items.map(item => {
|
|
2032
1611
|
const cfg = configs.get(item.name);
|
|
2033
1612
|
return { source: item.source, name: item.name, detail: cfg ? summarizeMcp(cfg) : item.description };
|
|
2034
1613
|
});
|
|
2035
1614
|
}
|
|
2036
|
-
/** Read a repo/agents.yaml `hooks:` section into a name→ManifestHook map (best-effort). */
|
|
2037
1615
|
export function hookManifestFromFile(agentsYamlPath) {
|
|
2038
1616
|
try {
|
|
2039
1617
|
const meta = yaml.parse(fs.readFileSync(agentsYamlPath, 'utf-8'));
|
|
@@ -2043,29 +1621,12 @@ export function hookManifestFromFile(agentsYamlPath) {
|
|
|
2043
1621
|
return {};
|
|
2044
1622
|
}
|
|
2045
1623
|
}
|
|
2046
|
-
/**
|
|
2047
|
-
* Merge the system + user `agents.yaml` hook manifests (user wins on key
|
|
2048
|
-
* collision). Built directly from the two layer files rather than via
|
|
2049
|
-
* `parseHookManifest()` so inspecting never emits the shadow/override warnings
|
|
2050
|
-
* that the registrar path prints.
|
|
2051
|
-
*/
|
|
2052
1624
|
function loadCentralHookManifest() {
|
|
2053
1625
|
return {
|
|
2054
1626
|
...hookManifestFromFile(path.join(getSystemAgentsDir(), 'agents.yaml')),
|
|
2055
1627
|
...hookManifestFromFile(path.join(getUserAgentsDir(), 'agents.yaml')),
|
|
2056
1628
|
};
|
|
2057
1629
|
}
|
|
2058
|
-
/**
|
|
2059
|
-
* Hook items for a repo's Hooks section. Uses the grouped hook reader (script +
|
|
2060
|
-
* data file collapsed into one entry, non-hook files like promptcuts.yaml or
|
|
2061
|
-
* README.md filtered out) rather than a naive readdir, so names are clean and
|
|
2062
|
-
* join cleanly against the manifest by script basename.
|
|
2063
|
-
*
|
|
2064
|
-
* `description` is intentionally blank: a hook is a script, and the only text a
|
|
2065
|
-
* readdir-based reader could scrape from one is its shebang (the old flat path
|
|
2066
|
-
* surfaced `!/usr/bin/env bash` as a description). The Hooks section shows firing
|
|
2067
|
-
* events via summarizeHook instead, which is the useful signal.
|
|
2068
|
-
*/
|
|
2069
1630
|
function repoHookItems(repo) {
|
|
2070
1631
|
return listHookEntriesFromDir(path.join(repo.root, 'hooks')).map(h => ({
|
|
2071
1632
|
name: h.name,
|
|
@@ -2091,7 +1652,6 @@ function findMatches(items, query) {
|
|
|
2091
1652
|
out.sort((a, b) => rankMatch(a) - rankMatch(b));
|
|
2092
1653
|
return out;
|
|
2093
1654
|
}
|
|
2094
|
-
// No substring hits — fall back to edit distance.
|
|
2095
1655
|
const threshold = Math.max(2, Math.floor(q.length * 0.3));
|
|
2096
1656
|
for (const item of items) {
|
|
2097
1657
|
const d = damerauLevenshtein(q, item.name.toLowerCase());
|
|
@@ -2114,16 +1674,12 @@ function suggestClosest(items, query, n) {
|
|
|
2114
1674
|
scored.sort((a, b) => a.d - b.d);
|
|
2115
1675
|
return scored.slice(0, n).map(s => s.item);
|
|
2116
1676
|
}
|
|
2117
|
-
// ─── Frontmatter + description helpers ───────────────────────────────────────
|
|
2118
1677
|
function readDescription(p) {
|
|
2119
1678
|
if (!p)
|
|
2120
1679
|
return '';
|
|
2121
1680
|
let filePath = p;
|
|
2122
1681
|
try {
|
|
2123
1682
|
if (fs.statSync(p).isDirectory()) {
|
|
2124
|
-
// `rule.md` is the directory form of a subrule (SUBRULE_RULE_FILE in
|
|
2125
|
-
// lib/rules/compose.ts); without it the four dir-form subrules on disk
|
|
2126
|
-
// drill in with a blank preview.
|
|
2127
1683
|
for (const marker of ['SKILL.md', 'WORKFLOW.md', 'AGENT.md', 'rule.md', 'README.md']) {
|
|
2128
1684
|
const c = path.join(p, marker);
|
|
2129
1685
|
if (fs.existsSync(c)) {
|
|
@@ -2195,7 +1751,6 @@ function readFirstProseLine(p) {
|
|
|
2195
1751
|
if (stat.size > 64 * 1024)
|
|
2196
1752
|
return '';
|
|
2197
1753
|
const text = fs.readFileSync(p, 'utf-8');
|
|
2198
|
-
// Skip frontmatter
|
|
2199
1754
|
let body = text;
|
|
2200
1755
|
if (body.startsWith('---')) {
|
|
2201
1756
|
const end = body.indexOf('\n---', 3);
|
|
@@ -2211,10 +1766,9 @@ function readFirstProseLine(p) {
|
|
|
2211
1766
|
return line;
|
|
2212
1767
|
}
|
|
2213
1768
|
}
|
|
2214
|
-
catch {
|
|
1769
|
+
catch { }
|
|
2215
1770
|
return '';
|
|
2216
1771
|
}
|
|
2217
|
-
// ─── OSC-8 + path helpers ────────────────────────────────────────────────────
|
|
2218
1772
|
function linkTarget(p) {
|
|
2219
1773
|
if (!p)
|
|
2220
1774
|
return '';
|