@phnx-labs/agents-cli 1.22.119 → 1.22.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +236 -0
- package/README.md +19 -2
- package/dist/bootstrap.d.ts +0 -15
- package/dist/bootstrap.js +10 -409
- package/dist/cli/command-registry.d.ts +0 -58
- package/dist/cli/command-registry.js +2 -74
- package/dist/commands/accounts.d.ts +0 -17
- package/dist/commands/accounts.js +1 -52
- package/dist/commands/alias.d.ts +0 -12
- package/dist/commands/alias.js +0 -6
- package/dist/commands/apply.d.ts +0 -15
- package/dist/commands/apply.js +0 -63
- package/dist/commands/audit.d.ts +0 -12
- package/dist/commands/audit.js +0 -13
- package/dist/commands/auth.js +4 -12
- package/dist/commands/beta.d.ts +0 -6
- package/dist/commands/beta.js +2 -6
- package/dist/commands/browser-sessions-picker.d.ts +0 -8
- package/dist/commands/browser-sessions-picker.js +0 -26
- package/dist/commands/browser.d.ts +0 -57
- package/dist/commands/browser.js +0 -80
- package/dist/commands/budget.d.ts +0 -13
- package/dist/commands/budget.js +0 -2
- package/dist/commands/cli.d.ts +0 -12
- package/dist/commands/cli.js +0 -4
- package/dist/commands/cloud.d.ts +0 -9
- package/dist/commands/cloud.js +0 -43
- package/dist/commands/commands.d.ts +0 -9
- package/dist/commands/commands.js +0 -18
- package/dist/commands/computer-sessions-picker.d.ts +0 -11
- package/dist/commands/computer-sessions-picker.js +0 -29
- package/dist/commands/computer.d.ts +0 -62
- package/dist/commands/computer.js +3 -114
- package/dist/commands/config.d.ts +0 -14
- package/dist/commands/config.js +21 -60
- package/dist/commands/cost.d.ts +0 -11
- package/dist/commands/cost.js +1 -17
- package/dist/commands/daemon-test-harness.d.ts +0 -32
- package/dist/commands/daemon-test-harness.js +1 -36
- package/dist/commands/daemon.d.ts +0 -46
- package/dist/commands/daemon.js +8 -255
- package/dist/commands/detach-core.d.ts +0 -28
- package/dist/commands/detach-core.js +0 -30
- package/dist/commands/detach.d.ts +1 -12
- package/dist/commands/detach.js +16 -52
- package/dist/commands/device-config-test-harness.js +0 -12
- package/dist/commands/doctor.d.ts +0 -103
- package/dist/commands/doctor.js +3 -279
- package/dist/commands/events.d.ts +0 -29
- package/dist/commands/events.js +1 -55
- package/dist/commands/exec.d.ts +0 -163
- package/dist/commands/exec.js +15 -964
- package/dist/commands/factory.d.ts +0 -6
- package/dist/commands/factory.js +0 -2
- package/dist/commands/feed-watch.js +0 -20
- package/dist/commands/feed.d.ts +0 -38
- package/dist/commands/feed.js +1 -151
- package/dist/commands/feedback.d.ts +0 -5
- package/dist/commands/feedback.js +0 -5
- package/dist/commands/fleet-capture.d.ts +0 -12
- package/dist/commands/fleet-capture.js +1 -39
- package/dist/commands/focus.d.ts +6 -94
- package/dist/commands/focus.js +13 -183
- package/dist/commands/fork.d.ts +0 -21
- package/dist/commands/fork.js +0 -45
- package/dist/commands/funnel.d.ts +0 -3
- package/dist/commands/go.d.ts +2 -71
- package/dist/commands/go.js +5 -99
- package/dist/commands/harness-hooks.d.ts +0 -41
- package/dist/commands/harness-hooks.js +0 -48
- package/dist/commands/harness-wizard.d.ts +0 -137
- package/dist/commands/harness-wizard.js +0 -109
- package/dist/commands/harness.d.ts +0 -63
- package/dist/commands/harness.js +0 -103
- package/dist/commands/hooks.d.ts +0 -9
- package/dist/commands/hooks.js +0 -26
- package/dist/commands/humans.d.ts +0 -8
- package/dist/commands/humans.js +0 -8
- package/dist/commands/import.d.ts +0 -22
- package/dist/commands/import.js +0 -79
- package/dist/commands/insights.d.ts +0 -37
- package/dist/commands/insights.js +3 -115
- package/dist/commands/inspect.d.ts +0 -117
- package/dist/commands/inspect.js +2 -448
- package/dist/commands/lease.d.ts +0 -28
- package/dist/commands/lease.js +0 -43
- package/dist/commands/logs.d.ts +0 -23
- package/dist/commands/logs.js +0 -30
- package/dist/commands/mailboxes.d.ts +0 -18
- package/dist/commands/mailboxes.js +0 -29
- package/dist/commands/mcp.d.ts +0 -9
- package/dist/commands/mcp.js +0 -53
- package/dist/commands/memory.d.ts +0 -7
- package/dist/commands/memory.js +0 -7
- package/dist/commands/menubar.d.ts +0 -8
- package/dist/commands/menubar.js +0 -24
- package/dist/commands/message.d.ts +0 -23
- package/dist/commands/message.js +0 -50
- package/dist/commands/mine.d.ts +0 -22
- package/dist/commands/mine.js +0 -21
- package/dist/commands/models.d.ts +0 -8
- package/dist/commands/models.js +0 -33
- package/dist/commands/modes.d.ts +0 -10
- package/dist/commands/modes.js +0 -13
- package/dist/commands/monitors.d.ts +0 -9
- package/dist/commands/monitors.js +3 -160
- package/dist/commands/open.d.ts +0 -26
- package/dist/commands/open.js +0 -10
- package/dist/commands/output.d.ts +0 -18
- package/dist/commands/output.js +1 -34
- package/dist/commands/packages-materialize.d.ts +0 -11
- package/dist/commands/packages-materialize.js +0 -3
- package/dist/commands/packages.d.ts +0 -10
- package/dist/commands/packages.js +0 -50
- package/dist/commands/perf.d.ts +0 -41
- package/dist/commands/perf.js +0 -55
- package/dist/commands/permissions.d.ts +0 -9
- package/dist/commands/permissions.js +0 -43
- package/dist/commands/plugins.d.ts +0 -14
- package/dist/commands/plugins.js +2 -55
- package/dist/commands/profiles.d.ts +0 -25
- package/dist/commands/profiles.js +0 -27
- package/dist/commands/projects-todo.d.ts +2 -0
- package/dist/commands/projects-todo.js +132 -0
- package/dist/commands/projects.d.ts +0 -85
- package/dist/commands/projects.js +344 -291
- package/dist/commands/prune.js +0 -30
- package/dist/commands/ps-roster.d.ts +92 -0
- package/dist/commands/ps-roster.js +744 -0
- package/dist/commands/ps.d.ts +6 -0
- package/dist/commands/ps.js +98 -0
- package/dist/commands/refresh-rules.d.ts +0 -13
- package/dist/commands/refresh-rules.js +0 -14
- package/dist/commands/reminders.d.ts +0 -7
- package/dist/commands/repo.d.ts +0 -89
- package/dist/commands/repo.js +7 -205
- package/dist/commands/resource-view.d.ts +0 -33
- package/dist/commands/resource-view.js +0 -49
- package/dist/commands/resume.d.ts +1 -19
- package/dist/commands/resume.js +0 -50
- package/dist/commands/route.d.ts +0 -10
- package/dist/commands/route.js +0 -19
- package/dist/commands/routines.d.ts +0 -42
- package/dist/commands/routines.js +5 -290
- package/dist/commands/routines.test-fixture.d.ts +0 -34
- package/dist/commands/routines.test-fixture.js +4 -100
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +1 -6
- package/dist/commands/run-account-picker.d.ts +0 -59
- package/dist/commands/run-account-picker.js +0 -71
- package/dist/commands/run-broadcast.d.ts +0 -9
- package/dist/commands/run-broadcast.js +0 -7
- package/dist/commands/run-cloud.d.ts +0 -15
- package/dist/commands/run-cloud.js +0 -37
- package/dist/commands/run-device-picker.d.ts +0 -25
- package/dist/commands/run-device-picker.js +1 -53
- package/dist/commands/secrets-passthrough.d.ts +0 -31
- package/dist/commands/secrets-passthrough.js +0 -10
- package/dist/commands/send.d.ts +0 -20
- package/dist/commands/send.js +14 -18
- package/dist/commands/sessions-backfill.d.ts +0 -7
- package/dist/commands/sessions-backfill.js +1 -16
- package/dist/commands/sessions-backup-setup.js +0 -11
- package/dist/commands/sessions-bookmark.d.ts +0 -8
- package/dist/commands/sessions-bookmark.js +0 -28
- package/dist/commands/sessions-browser.d.ts +2 -117
- package/dist/commands/sessions-browser.js +5 -243
- package/dist/commands/sessions-export.d.ts +1 -26
- package/dist/commands/sessions-export.js +3 -81
- package/dist/commands/sessions-import.d.ts +0 -14
- package/dist/commands/sessions-import.js +0 -59
- package/dist/commands/sessions-inject.d.ts +0 -60
- package/dist/commands/sessions-inject.js +3 -96
- package/dist/commands/sessions-migrate.d.ts +2 -37
- package/dist/commands/sessions-migrate.js +7 -159
- package/dist/commands/sessions-optimize.d.ts +0 -12
- package/dist/commands/sessions-picker-factory.d.ts +0 -7
- package/dist/commands/sessions-picker-factory.js +0 -8
- package/dist/commands/sessions-picker.d.ts +4 -103
- package/dist/commands/sessions-picker.js +13 -352
- package/dist/commands/sessions-render.d.ts +1 -2
- package/dist/commands/sessions-render.js +3 -7
- package/dist/commands/sessions-resume.d.ts +1 -24
- package/dist/commands/sessions-resume.js +2 -65
- package/dist/commands/sessions-share.d.ts +1 -9
- package/dist/commands/sessions-share.js +1 -45
- package/dist/commands/sessions-stats.d.ts +0 -24
- package/dist/commands/sessions-stats.js +0 -49
- package/dist/commands/sessions-stop.d.ts +1 -20
- package/dist/commands/sessions-stop.js +4 -9
- package/dist/commands/sessions-tail.d.ts +1 -19
- package/dist/commands/sessions-tail.js +3 -36
- package/dist/commands/sessions-trace.d.ts +5 -36
- package/dist/commands/sessions-trace.js +7 -82
- package/dist/commands/sessions.d.ts +1 -666
- package/dist/commands/sessions.js +30 -2279
- package/dist/commands/sessions.test-fixture.d.ts +0 -9
- package/dist/commands/sessions.test-fixture.js +8 -23
- package/dist/commands/setup-accounts.d.ts +0 -6
- package/dist/commands/setup-browser.d.ts +0 -23
- package/dist/commands/setup-browser.js +0 -28
- package/dist/commands/setup-computer.d.ts +0 -16
- package/dist/commands/setup-computer.js +0 -28
- package/dist/commands/setup-fleet.d.ts +0 -8
- package/dist/commands/setup-fleet.js +0 -11
- package/dist/commands/setup-mine.d.ts +0 -14
- package/dist/commands/setup-mine.js +0 -25
- package/dist/commands/setup-preferences.d.ts +0 -47
- package/dist/commands/setup-preferences.js +0 -53
- package/dist/commands/setup-secrets.d.ts +2 -24
- package/dist/commands/setup-secrets.js +0 -24
- package/dist/commands/setup-term.d.ts +0 -21
- package/dist/commands/setup-term.js +0 -21
- package/dist/commands/setup-terminal.d.ts +0 -1
- package/dist/commands/setup-terminal.js +0 -1
- package/dist/commands/setup-tools.d.ts +2 -0
- package/dist/commands/setup-tools.js +73 -0
- package/dist/commands/setup.d.ts +0 -20
- package/dist/commands/setup.js +4 -57
- package/dist/commands/skills.d.ts +0 -9
- package/dist/commands/skills.js +1 -22
- package/dist/commands/snapshot.d.ts +0 -9
- package/dist/commands/snapshot.js +0 -10
- package/dist/commands/ssh.d.ts +0 -64
- package/dist/commands/ssh.js +9 -420
- package/dist/commands/status.d.ts +0 -12
- package/dist/commands/status.js +0 -26
- package/dist/commands/subagents.d.ts +0 -8
- package/dist/commands/subagents.js +0 -31
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -256
- package/dist/commands/teams-picker.d.ts +0 -3
- package/dist/commands/teams-picker.js +0 -34
- package/dist/commands/teams.d.ts +1 -76
- package/dist/commands/teams.js +9 -477
- package/dist/commands/tmux.d.ts +0 -25
- package/dist/commands/tmux.js +0 -46
- package/dist/commands/traces.js +0 -19
- package/dist/commands/trash.d.ts +0 -17
- package/dist/commands/trash.js +1 -11
- package/dist/commands/uninstall.d.ts +0 -9
- package/dist/commands/uninstall.js +0 -6
- package/dist/commands/update.d.ts +0 -22
- package/dist/commands/update.js +0 -44
- package/dist/commands/upgrade.d.ts +0 -1
- package/dist/commands/upgrade.js +0 -1
- package/dist/commands/utils.d.ts +0 -85
- package/dist/commands/utils.js +1 -95
- package/dist/commands/versions.d.ts +0 -16
- package/dist/commands/versions.js +0 -134
- package/dist/commands/view.d.ts +0 -90
- package/dist/commands/view.js +4 -343
- package/dist/commands/watchdog.d.ts +0 -19
- package/dist/commands/watchdog.js +3 -43
- package/dist/commands/webhook.d.ts +0 -8
- package/dist/commands/webhook.js +0 -14
- package/dist/commands/workflows.d.ts +0 -8
- package/dist/commands/workflows.js +0 -6
- package/dist/index.d.ts +0 -25
- package/dist/index.js +5 -119
- package/dist/lib/account-capabilities.d.ts +0 -34
- package/dist/lib/account-capabilities.js +0 -32
- package/dist/lib/account-catalog.d.ts +0 -128
- package/dist/lib/account-catalog.js +8 -154
- package/dist/lib/account-provider-registry.d.ts +0 -14
- package/dist/lib/account-provider-registry.js +0 -8
- package/dist/lib/account-registry.d.ts +0 -74
- package/dist/lib/account-registry.js +14 -189
- package/dist/lib/account-schema.d.ts +0 -19
- package/dist/lib/account-schema.js +0 -43
- package/dist/lib/accounting/account-launch.d.ts +0 -15
- package/dist/lib/accounting/account-launch.js +1 -3
- package/dist/lib/accounting/account-pool-collect.d.ts +0 -26
- package/dist/lib/accounting/account-pool-collect.js +0 -42
- package/dist/lib/accounting/account-pool.d.ts +0 -41
- package/dist/lib/accounting/account-pool.js +0 -17
- package/dist/lib/accounting/capacity.d.ts +0 -32
- package/dist/lib/accounting/capacity.js +0 -32
- package/dist/lib/accounting/rotate.d.ts +0 -518
- package/dist/lib/accounting/rotate.js +4 -598
- package/dist/lib/accounting/usage-ingest.d.ts +0 -1
- package/dist/lib/accounting/usage-ingest.js +0 -44
- package/dist/lib/accounting/usage-sync.d.ts +0 -60
- package/dist/lib/accounting/usage-sync.js +4 -51
- package/dist/lib/accounting/usage.d.ts +0 -632
- package/dist/lib/accounting/usage.js +14 -1055
- package/dist/lib/accounts/add.d.ts +0 -60
- package/dist/lib/accounts/add.js +0 -127
- package/dist/lib/accounts/auth-operation-lock.d.ts +0 -1
- package/dist/lib/accounts/auth-operation-lock.js +0 -4
- package/dist/lib/accounts/migrate.d.ts +0 -9
- package/dist/lib/accounts/migrate.js +3 -42
- package/dist/lib/accounts/slots.d.ts +0 -25
- package/dist/lib/accounts/slots.js +1 -49
- package/dist/lib/acp/client.d.ts +0 -16
- package/dist/lib/acp/client.js +0 -29
- package/dist/lib/acp/harnesses.d.ts +0 -15
- package/dist/lib/acp/harnesses.js +0 -16
- package/dist/lib/acp/run.d.ts +0 -8
- package/dist/lib/acp/run.js +0 -8
- package/dist/lib/actor.d.ts +1 -71
- package/dist/lib/actor.js +1 -99
- package/dist/lib/add-dir.d.ts +0 -46
- package/dist/lib/add-dir.js +1 -70
- package/dist/lib/address.d.ts +0 -17
- package/dist/lib/address.js +0 -15
- package/dist/lib/agent-cli-commands.d.ts +0 -10
- package/dist/lib/agent-cli-commands.js +0 -10
- package/dist/lib/agent-modes.d.ts +0 -29
- package/dist/lib/agent-modes.js +0 -31
- package/dist/lib/agent-spec/agents.d.ts +0 -426
- package/dist/lib/agent-spec/agents.js +37 -924
- package/dist/lib/agent-spec/index.d.ts +0 -5
- package/dist/lib/agent-spec/index.js +0 -14
- package/dist/lib/agent-spec/materialize.d.ts +0 -10
- package/dist/lib/agent-spec/materialize.js +2 -139
- package/dist/lib/agent-spec/package-resolve.d.ts +0 -8
- package/dist/lib/agent-spec/package-resolve.js +1 -44
- package/dist/lib/agent-spec/package-schema.d.ts +0 -2
- package/dist/lib/agent-spec/package-schema.js +0 -11
- package/dist/lib/agent-spec/package-types.d.ts +0 -27
- package/dist/lib/agent-spec/package-types.js +0 -1
- package/dist/lib/agent-spec/primitives.d.ts +0 -18
- package/dist/lib/agent-spec/primitives.js +0 -27
- package/dist/lib/agent-spec/provider.js +0 -2
- package/dist/lib/agent-spec/resolve.d.ts +0 -23
- package/dist/lib/agent-spec/resolve.js +0 -41
- package/dist/lib/agent-spec/types.d.ts +0 -34
- package/dist/lib/agent-spec/types.js +0 -6
- package/dist/lib/agents.d.ts +0 -1
- package/dist/lib/agents.js +0 -1
- package/dist/lib/analytics/mix-commands.d.ts +0 -23
- package/dist/lib/analytics/mix-commands.js +0 -26
- package/dist/lib/analytics/recipes.d.ts +0 -1
- package/dist/lib/analytics/recipes.js +5 -10
- package/dist/lib/analytics/usage-db.js +4 -6
- package/dist/lib/answer-router.d.ts +0 -61
- package/dist/lib/answer-router.js +0 -57
- package/dist/lib/app-bundle-install.d.ts +0 -13
- package/dist/lib/app-bundle-install.js +0 -50
- package/dist/lib/artifact-actions.d.ts +0 -15
- package/dist/lib/artifact-actions.js +0 -18
- package/dist/lib/artifacts-client.d.ts +0 -10
- package/dist/lib/artifacts-client.js +0 -17
- package/dist/lib/ask-classifier.d.ts +0 -38
- package/dist/lib/ask-classifier.js +0 -27
- package/dist/lib/audit/log.d.ts +0 -47
- package/dist/lib/audit/log.js +1 -59
- package/dist/lib/auth-health.d.ts +0 -213
- package/dist/lib/auth-health.js +16 -266
- package/dist/lib/auth-mint.d.ts +0 -83
- package/dist/lib/auth-mint.js +8 -85
- package/dist/lib/auto-pull-worker.d.ts +0 -10
- package/dist/lib/auto-pull-worker.js +3 -48
- package/dist/lib/auto-pull.d.ts +0 -64
- package/dist/lib/auto-pull.js +0 -79
- package/dist/lib/beta.d.ts +0 -9
- package/dist/lib/beta.js +0 -9
- package/dist/lib/binary-shadow.d.ts +0 -22
- package/dist/lib/binary-shadow.js +4 -34
- package/dist/lib/boot-profile.d.ts +0 -10
- package/dist/lib/boot-profile.js +1 -31
- package/dist/lib/brand.d.ts +0 -20
- package/dist/lib/brand.js +0 -50
- package/dist/lib/browser/context.d.ts +0 -54
- package/dist/lib/browser/context.js +0 -49
- package/dist/lib/browser/paths.d.ts +0 -21
- package/dist/lib/browser/paths.js +0 -26
- package/dist/lib/browser/record.d.ts +0 -34
- package/dist/lib/browser/record.js +0 -38
- package/dist/lib/browser/sessions-list.d.ts +1 -79
- package/dist/lib/browser/sessions-list.js +2 -98
- package/dist/lib/browser-client.d.ts +0 -112
- package/dist/lib/browser-client.js +1 -90
- package/dist/lib/budget/config.d.ts +0 -6
- package/dist/lib/budget/config.js +0 -29
- package/dist/lib/budget/enforce.d.ts +0 -50
- package/dist/lib/budget/enforce.js +0 -27
- package/dist/lib/budget/ledger.d.ts +0 -23
- package/dist/lib/budget/ledger.js +0 -28
- package/dist/lib/budget/live-cloud.d.ts +0 -26
- package/dist/lib/budget/live-cloud.js +0 -12
- package/dist/lib/budget/live-team.d.ts +0 -17
- package/dist/lib/budget/live-team.js +1 -35
- package/dist/lib/budget/preflight.d.ts +0 -51
- package/dist/lib/budget/preflight.js +0 -36
- package/dist/lib/byok-usage.d.ts +0 -20
- package/dist/lib/byok-usage.js +1 -24
- package/dist/lib/capabilities.d.ts +0 -24
- package/dist/lib/capabilities.js +0 -29
- package/dist/lib/catchup.d.ts +0 -87
- package/dist/lib/catchup.js +1 -81
- package/dist/lib/channels/owner-forward.d.ts +0 -70
- package/dist/lib/channels/owner-forward.js +1 -43
- package/dist/lib/channels/owner-sink.js +0 -21
- package/dist/lib/channels/providers/desktop.d.ts +0 -37
- package/dist/lib/channels/providers/desktop.js +0 -72
- package/dist/lib/channels/providers/index.d.ts +0 -1
- package/dist/lib/channels/providers/index.js +2 -6
- package/dist/lib/channels/providers/mailbox.js +0 -7
- package/dist/lib/channels/providers/openclaw-telegram.js +0 -8
- package/dist/lib/channels/providers/rush.d.ts +0 -2
- package/dist/lib/channels/providers/rush.js +0 -26
- package/dist/lib/channels/providers/session.d.ts +2 -0
- package/dist/lib/channels/providers/session.js +26 -0
- package/dist/lib/channels/registry.d.ts +0 -27
- package/dist/lib/channels/registry.js +0 -10
- package/dist/lib/channels/resolve.d.ts +0 -19
- package/dist/lib/channels/resolve.js +0 -2
- package/dist/lib/channels/send.d.ts +0 -50
- package/dist/lib/channels/send.js +0 -25
- package/dist/lib/checkpoint.d.ts +0 -36
- package/dist/lib/checkpoint.js +0 -28
- package/dist/lib/claude-account-token.d.ts +0 -98
- package/dist/lib/claude-account-token.js +7 -169
- package/dist/lib/claude-statusline.d.ts +0 -41
- package/dist/lib/claude-statusline.js +0 -68
- package/dist/lib/cli-entry.d.ts +0 -26
- package/dist/lib/cli-entry.js +1 -61
- package/dist/lib/cli-resources.d.ts +31 -89
- package/dist/lib/cli-resources.js +116 -152
- package/dist/lib/cloud/antigravity.d.ts +0 -29
- package/dist/lib/cloud/antigravity.js +0 -36
- package/dist/lib/cloud/codex.d.ts +0 -8
- package/dist/lib/cloud/codex.js +0 -41
- package/dist/lib/cloud/cursor.d.ts +0 -5
- package/dist/lib/cloud/cursor.js +2 -7
- package/dist/lib/cloud/dispatch.d.ts +0 -13
- package/dist/lib/cloud/dispatch.js +1 -48
- package/dist/lib/cloud/factory.d.ts +0 -52
- package/dist/lib/cloud/factory.js +3 -67
- package/dist/lib/cloud/host.d.ts +0 -39
- package/dist/lib/cloud/host.js +5 -48
- package/dist/lib/cloud/registry.d.ts +0 -25
- package/dist/lib/cloud/registry.js +0 -29
- package/dist/lib/cloud/rush.d.ts +0 -47
- package/dist/lib/cloud/rush.js +1 -82
- package/dist/lib/cloud/session-index.d.ts +0 -27
- package/dist/lib/cloud/session-index.js +1 -32
- package/dist/lib/cloud/store.d.ts +0 -18
- package/dist/lib/cloud/store.js +0 -28
- package/dist/lib/cloud/stream.d.ts +0 -14
- package/dist/lib/cloud/stream.js +0 -25
- package/dist/lib/cloud/types.d.ts +0 -168
- package/dist/lib/cloud/types.js +0 -46
- package/dist/lib/cloudflare/creds.d.ts +0 -2
- package/dist/lib/cloudflare/creds.js +0 -14
- package/dist/lib/cloudflare/provision.d.ts +0 -8
- package/dist/lib/cloudflare/provision.js +1 -19
- package/dist/lib/codex-home.d.ts +0 -60
- package/dist/lib/codex-home.js +2 -72
- package/dist/lib/codex-policy.d.ts +0 -10
- package/dist/lib/codex-policy.js +0 -13
- package/dist/lib/command-skills.d.ts +0 -10
- package/dist/lib/command-skills.js +0 -10
- package/dist/lib/commands.d.ts +0 -74
- package/dist/lib/commands.js +0 -112
- package/dist/lib/comms-render.d.ts +0 -5
- package/dist/lib/comms-render.js +0 -5
- package/dist/lib/computer/context.d.ts +0 -23
- package/dist/lib/computer/context.js +0 -14
- package/dist/lib/computer/policy.d.ts +0 -20
- package/dist/lib/computer/policy.js +0 -53
- package/dist/lib/computer/record.d.ts +0 -33
- package/dist/lib/computer/record.js +1 -48
- package/dist/lib/computer/sessions-list.d.ts +1 -128
- package/dist/lib/computer/sessions-list.js +6 -165
- package/dist/lib/computer-client.d.ts +0 -106
- package/dist/lib/computer-client.js +5 -86
- package/dist/lib/concurrency.d.ts +0 -14
- package/dist/lib/concurrency.js +0 -3
- package/dist/lib/config-drift.d.ts +0 -31
- package/dist/lib/config-drift.js +0 -32
- package/dist/lib/config-keys.d.ts +1 -65
- package/dist/lib/config-keys.js +6 -52
- package/dist/lib/config-transfer.d.ts +0 -14
- package/dist/lib/config-transfer.js +0 -26
- package/dist/lib/convert.d.ts +0 -17
- package/dist/lib/convert.js +0 -18
- package/dist/lib/crabbox/cli.d.ts +0 -156
- package/dist/lib/crabbox/cli.js +1 -188
- package/dist/lib/crabbox/config.d.ts +0 -18
- package/dist/lib/crabbox/config.js +1 -19
- package/dist/lib/crabbox/lease.d.ts +0 -93
- package/dist/lib/crabbox/lease.js +4 -148
- package/dist/lib/crabbox/progress.d.ts +0 -56
- package/dist/lib/crabbox/progress.js +2 -49
- package/dist/lib/crabbox/runtimes.d.ts +0 -94
- package/dist/lib/crabbox/runtimes.js +1 -111
- package/dist/lib/crabbox/setup-copy.d.ts +0 -64
- package/dist/lib/crabbox/setup-copy.js +1 -53
- package/dist/lib/daemon/account-state-daemon-service.d.ts +0 -48
- package/dist/lib/daemon/account-state-daemon-service.js +2 -63
- package/dist/lib/daemon/attention-notify-service.d.ts +0 -12
- package/dist/lib/daemon/attention-notify-service.js +1 -24
- package/dist/lib/daemon/auth-sync-service.d.ts +0 -28
- package/dist/lib/daemon/auth-sync-service.js +0 -56
- package/dist/lib/daemon/catchup-service.d.ts +0 -34
- package/dist/lib/daemon/catchup-service.js +0 -30
- package/dist/lib/daemon/daemon.d.ts +0 -374
- package/dist/lib/daemon/daemon.js +44 -1049
- package/dist/lib/daemon/daemon.test-fixture.d.ts +0 -19
- package/dist/lib/daemon/daemon.test-fixture.js +1 -24
- package/dist/lib/daemon/device-probe-service.d.ts +0 -16
- package/dist/lib/daemon/device-probe-service.js +0 -20
- package/dist/lib/daemon/feed-stream-service.d.ts +0 -15
- package/dist/lib/daemon/feed-stream-service.js +0 -20
- package/dist/lib/daemon/harness-update-service.d.ts +2 -61
- package/dist/lib/daemon/harness-update-service.js +6 -86
- package/dist/lib/daemon/heartbeat-service.d.ts +0 -1
- package/dist/lib/daemon/heartbeat-service.js +0 -1
- package/dist/lib/daemon/leaked-daemons.d.ts +0 -46
- package/dist/lib/daemon/leaked-daemons.js +2 -78
- package/dist/lib/daemon/monitor-engine-service.d.ts +0 -13
- package/dist/lib/daemon/monitor-engine-service.js +3 -15
- package/dist/lib/daemon/runner.d.ts +0 -194
- package/dist/lib/daemon/runner.js +39 -760
- package/dist/lib/daemon/self-heal-service.d.ts +18 -17
- package/dist/lib/daemon/self-heal-service.js +83 -37
- package/dist/lib/daemon/self-update-service.d.ts +1 -131
- package/dist/lib/daemon/self-update-service.js +26 -189
- package/dist/lib/daemon/service.d.ts +0 -73
- package/dist/lib/daemon/service.js +0 -34
- package/dist/lib/daemon/session-index-service.d.ts +0 -12
- package/dist/lib/daemon/session-index-service.js +0 -23
- package/dist/lib/daemon/session-state-service.d.ts +0 -8
- package/dist/lib/daemon/session-state-service.js +0 -8
- package/dist/lib/daemon/session-summarizer-service.d.ts +0 -14
- package/dist/lib/daemon/session-summarizer-service.js +1 -19
- package/dist/lib/daemon/session-title-service.d.ts +0 -25
- package/dist/lib/daemon/session-title-service.js +0 -32
- package/dist/lib/daemon/state-dir-check-service.d.ts +0 -24
- package/dist/lib/daemon/state-dir-check-service.js +0 -29
- package/dist/lib/daemon/supervisor.d.ts +0 -112
- package/dist/lib/daemon/supervisor.js +4 -147
- package/dist/lib/daemon/testdata/process-view-daemon.js +0 -2
- package/dist/lib/daemon/testdata/process-view-start.js +0 -5
- package/dist/lib/daemon/tmux-reap-service.d.ts +0 -1
- package/dist/lib/daemon/tmux-reap-service.js +0 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +0 -23
- package/dist/lib/daemon/usage-sync-service.js +0 -26
- package/dist/lib/daemon/watchdog-service.d.ts +0 -9
- package/dist/lib/daemon/watchdog-service.js +0 -13
- package/dist/lib/daemon/webhook-receiver-service.d.ts +0 -1
- package/dist/lib/daemon/webhook-receiver-service.js +0 -1
- package/dist/lib/daemon-health.d.ts +0 -55
- package/dist/lib/daemon-health.js +4 -77
- package/dist/lib/daemon-services.d.ts +0 -36
- package/dist/lib/daemon-services.js +0 -45
- package/dist/lib/daemon-ticks.d.ts +0 -126
- package/dist/lib/daemon-ticks.js +1 -156
- package/dist/lib/daemon-webhooks.d.ts +0 -57
- package/dist/lib/daemon-webhooks.js +2 -54
- package/dist/lib/deeplink/register.d.ts +0 -15
- package/dist/lib/deeplink/register.js +0 -60
- package/dist/lib/deeplink/url.d.ts +0 -24
- package/dist/lib/deeplink/url.js +1 -33
- package/dist/lib/device-config.d.ts +1 -192
- package/dist/lib/device-config.js +86 -240
- package/dist/lib/devices/config-migration.d.ts +0 -43
- package/dist/lib/devices/config-migration.js +7 -127
- package/dist/lib/devices/connect.d.ts +0 -168
- package/dist/lib/devices/connect.js +6 -254
- package/dist/lib/devices/device-docs.d.ts +0 -24
- package/dist/lib/devices/device-docs.js +0 -46
- package/dist/lib/devices/discovery-policy.d.ts +0 -30
- package/dist/lib/devices/discovery-policy.js +3 -34
- package/dist/lib/devices/doctor-findings.d.ts +0 -109
- package/dist/lib/devices/doctor-findings.js +30 -326
- package/dist/lib/devices/doctor-overview-cache.d.ts +0 -33
- package/dist/lib/devices/doctor-overview-cache.js +0 -81
- package/dist/lib/devices/fleet-divergence.d.ts +0 -89
- package/dist/lib/devices/fleet-divergence.js +1 -60
- package/dist/lib/devices/fleet-inventory.d.ts +0 -27
- package/dist/lib/devices/fleet-inventory.js +0 -38
- package/dist/lib/devices/fleet.d.ts +0 -95
- package/dist/lib/devices/fleet.js +0 -79
- package/dist/lib/devices/harness-inventory.d.ts +0 -75
- package/dist/lib/devices/harness-inventory.js +0 -101
- package/dist/lib/devices/health-report.d.ts +0 -37
- package/dist/lib/devices/health-report.js +0 -73
- package/dist/lib/devices/health.d.ts +0 -71
- package/dist/lib/devices/health.js +2 -82
- package/dist/lib/devices/interactive-host.d.ts +0 -10
- package/dist/lib/devices/interactive-host.js +0 -34
- package/dist/lib/devices/known-hosts.d.ts +0 -45
- package/dist/lib/devices/known-hosts.js +0 -77
- package/dist/lib/devices/pending.d.ts +0 -31
- package/dist/lib/devices/pending.js +7 -67
- package/dist/lib/devices/pool.d.ts +0 -36
- package/dist/lib/devices/pool.js +0 -30
- package/dist/lib/devices/reachability.d.ts +0 -25
- package/dist/lib/devices/reachability.js +0 -14
- package/dist/lib/devices/registry.d.ts +0 -141
- package/dist/lib/devices/registry.js +4 -151
- package/dist/lib/devices/resolve-profile.d.ts +0 -18
- package/dist/lib/devices/resolve-profile.js +0 -18
- package/dist/lib/devices/resolve-target.d.ts +0 -20
- package/dist/lib/devices/resolve-target.js +1 -51
- package/dist/lib/devices/rollout-verify.d.ts +1 -81
- package/dist/lib/devices/rollout-verify.js +0 -77
- package/dist/lib/devices/self-host.d.ts +0 -7
- package/dist/lib/devices/self-host.js +1 -29
- package/dist/lib/devices/ssh-config.d.ts +0 -18
- package/dist/lib/devices/ssh-config.js +0 -9
- package/dist/lib/devices/stats-cache.d.ts +0 -48
- package/dist/lib/devices/stats-cache.js +0 -80
- package/dist/lib/devices/sync.d.ts +0 -97
- package/dist/lib/devices/sync.js +0 -88
- package/dist/lib/devices/tailscale.d.ts +0 -18
- package/dist/lib/devices/tailscale.js +1 -38
- package/dist/lib/devices/terminfo.d.ts +0 -27
- package/dist/lib/devices/terminfo.js +2 -64
- package/dist/lib/devices/worker-pick.d.ts +0 -15
- package/dist/lib/devices/worker-pick.js +0 -48
- package/dist/lib/diff-text.d.ts +0 -18
- package/dist/lib/diff-text.js +0 -15
- package/dist/lib/doctor-diff.d.ts +0 -79
- package/dist/lib/doctor-diff.js +2 -181
- package/dist/lib/drift-sync.d.ts +0 -29
- package/dist/lib/drift-sync.js +0 -40
- package/dist/lib/drift.d.ts +0 -43
- package/dist/lib/drift.js +0 -31
- package/dist/lib/event-families.d.ts +0 -17
- package/dist/lib/event-families.js +0 -33
- package/dist/lib/event-provenance.d.ts +0 -4
- package/dist/lib/event-provenance.js +0 -5
- package/dist/lib/event-stream.d.ts +0 -29
- package/dist/lib/event-stream.js +0 -36
- package/dist/lib/events-ingest.d.ts +0 -27
- package/dist/lib/events-ingest.js +0 -54
- package/dist/lib/exec-account-home.d.ts +0 -24
- package/dist/lib/exec-account-home.js +0 -41
- package/dist/lib/exec-bounded.d.ts +1 -37
- package/dist/lib/exec-bounded.js +10 -46
- package/dist/lib/exec.d.ts +3 -583
- package/dist/lib/exec.js +18 -1025
- package/dist/lib/factory/snapshot.js +1 -15
- package/dist/lib/feed/activity-stream.d.ts +0 -27
- package/dist/lib/feed/activity-stream.js +4 -80
- package/dist/lib/feed/activity.d.ts +1 -243
- package/dist/lib/feed/activity.js +8 -273
- package/dist/lib/feed/answer.d.ts +0 -103
- package/dist/lib/feed/answer.js +0 -267
- package/dist/lib/feed/attention.d.ts +0 -56
- package/dist/lib/feed/attention.js +0 -161
- package/dist/lib/feed/envelope.d.ts +2 -17
- package/dist/lib/feed/envelope.js +0 -14
- package/dist/lib/feed/events.d.ts +0 -118
- package/dist/lib/feed/events.js +13 -213
- package/dist/lib/feed/feed.d.ts +1 -250
- package/dist/lib/feed/feed.js +24 -334
- package/dist/lib/feed/hub-server.d.ts +0 -100
- package/dist/lib/feed/hub-server.js +1 -191
- package/dist/lib/feed/hub.d.ts +0 -53
- package/dist/lib/feed/hub.js +0 -89
- package/dist/lib/feed/pr-status.d.ts +1 -19
- package/dist/lib/feed/pr-status.js +0 -18
- package/dist/lib/feed/tool-activity.d.ts +0 -59
- package/dist/lib/feed/tool-activity.js +1 -119
- package/dist/lib/feed/tools.d.ts +0 -100
- package/dist/lib/feed/tools.js +0 -89
- package/dist/lib/feed/watch.d.ts +0 -33
- package/dist/lib/feed/watch.js +2 -94
- package/dist/lib/feed-broadcast.d.ts +0 -148
- package/dist/lib/feed-broadcast.js +1 -283
- package/dist/lib/feed-outcome.d.ts +0 -50
- package/dist/lib/feed-outcome.js +1 -67
- package/dist/lib/feed-policy.d.ts +0 -6
- package/dist/lib/feed-policy.js +1 -27
- package/dist/lib/feed-post.d.ts +0 -61
- package/dist/lib/feed-post.js +4 -61
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -64
- package/dist/lib/fleet/apply.js +0 -125
- package/dist/lib/fleet/auth-sync.d.ts +0 -48
- package/dist/lib/fleet/auth-sync.js +4 -49
- package/dist/lib/fleet/capture.d.ts +0 -26
- package/dist/lib/fleet/capture.js +1 -36
- package/dist/lib/fleet/manifest.d.ts +0 -38
- package/dist/lib/fleet/manifest.js +0 -40
- package/dist/lib/fleet/types.d.ts +1 -138
- package/dist/lib/fleet/types.js +0 -12
- package/dist/lib/fleet-cache.d.ts +0 -12
- package/dist/lib/fleet-cache.js +0 -24
- package/dist/lib/fleet-shared-state.d.ts +6 -59
- package/dist/lib/fleet-shared-state.js +5 -51
- package/dist/lib/fleet-status.d.ts +0 -27
- package/dist/lib/fleet-status.js +0 -48
- package/dist/lib/format.d.ts +0 -74
- package/dist/lib/format.js +3 -77
- package/dist/lib/friction-heuristics.d.ts +0 -20
- package/dist/lib/friction-heuristics.js +0 -8
- package/dist/lib/fs-atomic.d.ts +0 -51
- package/dist/lib/fs-atomic.js +8 -66
- package/dist/lib/fs-walk.d.ts +0 -13
- package/dist/lib/fs-walk.js +0 -22
- package/dist/lib/fuzzy.d.ts +0 -29
- package/dist/lib/fuzzy.js +0 -31
- package/dist/lib/gemini-settings.js +0 -12
- package/dist/lib/git.d.ts +0 -366
- package/dist/lib/git.js +7 -574
- package/dist/lib/github/ci-failure.d.ts +30 -0
- package/dist/lib/github/ci-failure.js +95 -0
- package/dist/lib/github/gh-overload.d.ts +0 -38
- package/dist/lib/github/gh-overload.js +3 -55
- package/dist/lib/github/pr-mergeable.d.ts +3 -34
- package/dist/lib/github/pr-mergeable.js +2 -42
- package/dist/lib/github/pr-verdict.d.ts +0 -44
- package/dist/lib/github/pr-verdict.js +0 -36
- package/dist/lib/github/project-prs.d.ts +135 -105
- package/dist/lib/github/project-prs.js +530 -170
- package/dist/lib/github/release-drift.d.ts +45 -0
- package/dist/lib/github/release-drift.js +91 -0
- package/dist/lib/github/rest.d.ts +0 -50
- package/dist/lib/github/rest.js +0 -49
- package/dist/lib/github/viewer.d.ts +27 -0
- package/dist/lib/github/viewer.js +101 -0
- package/dist/lib/goose-commands.d.ts +0 -29
- package/dist/lib/goose-commands.js +3 -48
- package/dist/lib/harness/adapter.d.ts +0 -151
- package/dist/lib/harness/adapter.js +0 -41
- package/dist/lib/harness/adapters/claude.d.ts +0 -8
- package/dist/lib/harness/adapters/claude.js +0 -89
- package/dist/lib/harness/adapters/codex.js +0 -18
- package/dist/lib/harness/adapters/copilot.js +0 -3
- package/dist/lib/harness/adapters/cursor.js +0 -16
- package/dist/lib/harness/adapters/droid.js +0 -3
- package/dist/lib/harness/adapters/kimi.js +0 -19
- package/dist/lib/harness/adapters/muse.js +0 -9
- package/dist/lib/harness/adapters/opencode.js +0 -2
- package/dist/lib/harness/exec-config-version.d.ts +0 -2
- package/dist/lib/harness/exec-config-version.js +0 -13
- package/dist/lib/harness/index.js +0 -10
- package/dist/lib/harness-auth-capabilities.d.ts +0 -26
- package/dist/lib/harness-auth-capabilities.js +0 -18
- package/dist/lib/harness-connection-test.d.ts +0 -27
- package/dist/lib/harness-connection-test.js +2 -20
- package/dist/lib/heal.d.ts +0 -45
- package/dist/lib/heal.js +2 -82
- package/dist/lib/help.d.ts +0 -32
- package/dist/lib/help.js +0 -41
- package/dist/lib/helper-download.d.ts +0 -85
- package/dist/lib/helper-download.js +0 -95
- package/dist/lib/helper-versions.d.ts +0 -51
- package/dist/lib/helper-versions.js +1 -45
- package/dist/lib/hooks/cache.d.ts +0 -40
- package/dist/lib/hooks/cache.js +8 -122
- package/dist/lib/hooks/install.d.ts +0 -253
- package/dist/lib/hooks/install.js +49 -822
- package/dist/lib/hooks/match.d.ts +0 -24
- package/dist/lib/hooks/match.js +0 -31
- package/dist/lib/hooks/profile.d.ts +0 -21
- package/dist/lib/hooks/profile.js +0 -28
- package/dist/lib/hosts/credential-transport.d.ts +0 -6
- package/dist/lib/hosts/credential-transport.js +0 -17
- package/dist/lib/hosts/credentials.d.ts +0 -35
- package/dist/lib/hosts/credentials.js +0 -38
- package/dist/lib/hosts/dispatch.d.ts +0 -140
- package/dist/lib/hosts/dispatch.js +0 -176
- package/dist/lib/hosts/logs.d.ts +0 -25
- package/dist/lib/hosts/logs.js +1 -51
- package/dist/lib/hosts/option.d.ts +0 -12
- package/dist/lib/hosts/option.js +0 -12
- package/dist/lib/hosts/passthrough.d.ts +0 -129
- package/dist/lib/hosts/passthrough.js +12 -249
- package/dist/lib/hosts/progress.d.ts +0 -90
- package/dist/lib/hosts/progress.js +5 -115
- package/dist/lib/hosts/providers/devices.d.ts +0 -19
- package/dist/lib/hosts/providers/devices.js +1 -34
- package/dist/lib/hosts/providers/local.d.ts +0 -14
- package/dist/lib/hosts/providers/local.js +0 -22
- package/dist/lib/hosts/ready.d.ts +0 -99
- package/dist/lib/hosts/ready.js +0 -101
- package/dist/lib/hosts/reconcile.d.ts +0 -38
- package/dist/lib/hosts/reconcile.js +1 -50
- package/dist/lib/hosts/reconnect.d.ts +0 -75
- package/dist/lib/hosts/reconnect.js +0 -98
- package/dist/lib/hosts/registry.d.ts +0 -74
- package/dist/lib/hosts/registry.js +0 -110
- package/dist/lib/hosts/remote-cmd.d.ts +1 -228
- package/dist/lib/hosts/remote-cmd.js +19 -294
- package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +0 -1
- package/dist/lib/hosts/remote-cmd.test-fixture.js +0 -12
- package/dist/lib/hosts/remote-os.d.ts +0 -19
- package/dist/lib/hosts/remote-os.js +0 -22
- package/dist/lib/hosts/remote-session-id.d.ts +0 -22
- package/dist/lib/hosts/remote-session-id.js +0 -24
- package/dist/lib/hosts/routing-flag.d.ts +0 -21
- package/dist/lib/hosts/routing-flag.js +0 -21
- package/dist/lib/hosts/run-target.d.ts +0 -53
- package/dist/lib/hosts/run-target.js +0 -56
- package/dist/lib/hosts/session-index.d.ts +1 -53
- package/dist/lib/hosts/session-index.js +2 -59
- package/dist/lib/hosts/session-marker.d.ts +0 -31
- package/dist/lib/hosts/session-marker.js +0 -32
- package/dist/lib/hosts/ssh-config.d.ts +0 -25
- package/dist/lib/hosts/ssh-config.js +1 -32
- package/dist/lib/hosts/tasks.d.ts +0 -54
- package/dist/lib/hosts/tasks.js +0 -35
- package/dist/lib/hosts/types.d.ts +0 -39
- package/dist/lib/hosts/types.js +0 -22
- package/dist/lib/humans.d.ts +0 -21
- package/dist/lib/humans.js +0 -30
- package/dist/lib/identity/client.d.ts +1 -35
- package/dist/lib/identity/client.js +3 -29
- package/dist/lib/identity/index.d.ts +3 -27
- package/dist/lib/identity/index.js +8 -24
- package/dist/lib/import.d.ts +0 -104
- package/dist/lib/import.js +1 -137
- package/dist/lib/installations/active-check.d.ts +0 -53
- package/dist/lib/installations/active-check.js +0 -49
- package/dist/lib/installations/index.d.ts +0 -9
- package/dist/lib/installations/index.js +0 -9
- package/dist/lib/installations/installation-lock.js +0 -8
- package/dist/lib/installations/launch-gate.d.ts +0 -56
- package/dist/lib/installations/launch-gate.js +0 -83
- package/dist/lib/installations/migrate.d.ts +0 -100
- package/dist/lib/installations/migrate.js +105 -572
- package/dist/lib/installations/native-command.d.ts +0 -1
- package/dist/lib/installations/native-command.js +0 -6
- package/dist/lib/installations/resolve.d.ts +0 -24
- package/dist/lib/installations/resolve.js +0 -24
- package/dist/lib/installations/shims.d.ts +0 -395
- package/dist/lib/installations/shims.js +30 -957
- package/dist/lib/installations/store.d.ts +0 -199
- package/dist/lib/installations/store.js +1 -297
- package/dist/lib/installations/strategies.d.ts +0 -44
- package/dist/lib/installations/strategies.js +0 -87
- package/dist/lib/installations/types.d.ts +1 -67
- package/dist/lib/installations/types.js +0 -6
- package/dist/lib/installations/update-cancellation.d.ts +0 -74
- package/dist/lib/installations/update-cancellation.js +0 -74
- package/dist/lib/installations/update-policy.d.ts +0 -57
- package/dist/lib/installations/update-policy.js +0 -62
- package/dist/lib/installations/update-runtime.d.ts +0 -88
- package/dist/lib/installations/update-runtime.js +1 -127
- package/dist/lib/installations/update.d.ts +0 -53
- package/dist/lib/installations/update.js +0 -95
- package/dist/lib/installations/versions.d.ts +0 -310
- package/dist/lib/installations/versions.js +14 -837
- package/dist/lib/isolation-boundary-report.d.ts +0 -7
- package/dist/lib/isolation-boundary-report.js +0 -7
- package/dist/lib/launch-identity.d.ts +0 -8
- package/dist/lib/launch-identity.js +0 -8
- package/dist/lib/linear-autoclose.d.ts +0 -25
- package/dist/lib/linear-autoclose.js +0 -19
- package/dist/lib/linear-cache.d.ts +0 -57
- package/dist/lib/linear-cache.js +1 -81
- package/dist/lib/linear-project-counts.d.ts +0 -83
- package/dist/lib/linear-project-counts.js +2 -64
- package/dist/lib/linear-projects.d.ts +0 -62
- package/dist/lib/linear-projects.js +0 -85
- package/dist/lib/linear-rate-limit.d.ts +0 -21
- package/dist/lib/linear-rate-limit.js +1 -93
- package/dist/lib/linux-userns.d.ts +1 -42
- package/dist/lib/linux-userns.js +0 -47
- package/dist/lib/lock-compromise.d.ts +0 -7
- package/dist/lib/lock-compromise.js +0 -7
- package/dist/lib/log-follow.d.ts +0 -2
- package/dist/lib/log-follow.js +5 -15
- package/dist/lib/loop.d.ts +0 -106
- package/dist/lib/loop.js +0 -135
- package/dist/lib/machine-id.d.ts +0 -19
- package/dist/lib/machine-id.js +0 -19
- package/dist/lib/mailbox-gc.d.ts +0 -7
- package/dist/lib/mailbox-gc.js +0 -25
- package/dist/lib/mailbox-target.d.ts +0 -31
- package/dist/lib/mailbox-target.js +0 -27
- package/dist/lib/mailbox.d.ts +0 -77
- package/dist/lib/mailbox.js +5 -105
- package/dist/lib/manifest.d.ts +0 -4
- package/dist/lib/manifest.js +0 -36
- package/dist/lib/markdown.d.ts +0 -3
- package/dist/lib/markdown.js +0 -9
- package/dist/lib/mcp-registry.d.ts +1 -50
- package/dist/lib/mcp-registry.js +0 -64
- package/dist/lib/mcp.d.ts +0 -115
- package/dist/lib/mcp.js +3 -199
- package/dist/lib/memory-cache.d.ts +0 -11
- package/dist/lib/memory-cache.js +0 -9
- package/dist/lib/memory.d.ts +0 -52
- package/dist/lib/memory.js +12 -74
- package/dist/lib/menubar/download-menubar.d.ts +0 -35
- package/dist/lib/menubar/download-menubar.js +0 -38
- package/dist/lib/menubar/install-menubar.d.ts +0 -405
- package/dist/lib/menubar/install-menubar.js +25 -667
- package/dist/lib/menubar/migrate-prefs.d.ts +0 -47
- package/dist/lib/menubar/migrate-prefs.js +1 -70
- package/dist/lib/menubar/notify-desktop.d.ts +0 -82
- package/dist/lib/menubar/notify-desktop.js +0 -68
- package/dist/lib/menubar/resolve-version.d.ts +0 -41
- package/dist/lib/menubar/resolve-version.js +2 -44
- package/dist/lib/menubar/snapshot.d.ts +13 -66
- package/dist/lib/menubar/snapshot.js +45 -39
- package/dist/lib/merged-resources.d.ts +0 -10
- package/dist/lib/merged-resources.js +0 -10
- package/dist/lib/migrate-fold.d.ts +0 -31
- package/dist/lib/migrate-fold.js +6 -38
- package/dist/lib/model-tier-overrides.d.ts +0 -30
- package/dist/lib/model-tier-overrides.js +0 -14
- package/dist/lib/model-tiers.d.ts +0 -43
- package/dist/lib/model-tiers.js +5 -78
- package/dist/lib/models.d.ts +0 -145
- package/dist/lib/models.js +3 -333
- package/dist/lib/monitors/config.d.ts +0 -187
- package/dist/lib/monitors/config.js +4 -101
- package/dist/lib/monitors/dispatch.d.ts +0 -22
- package/dist/lib/monitors/dispatch.js +0 -35
- package/dist/lib/monitors/engine.d.ts +1 -53
- package/dist/lib/monitors/engine.js +17 -106
- package/dist/lib/monitors/fingerprint.d.ts +0 -43
- package/dist/lib/monitors/fingerprint.js +0 -57
- package/dist/lib/monitors/pid-watch.d.ts +0 -31
- package/dist/lib/monitors/pid-watch.js +0 -31
- package/dist/lib/monitors/remote.d.ts +0 -52
- package/dist/lib/monitors/remote.js +0 -42
- package/dist/lib/monitors/sources/command.d.ts +2 -9
- package/dist/lib/monitors/sources/command.js +13 -34
- package/dist/lib/monitors/sources/device.d.ts +0 -10
- package/dist/lib/monitors/sources/device.js +0 -14
- package/dist/lib/monitors/sources/failure.d.ts +0 -27
- package/dist/lib/monitors/sources/failure.js +0 -27
- package/dist/lib/monitors/sources/file.d.ts +0 -10
- package/dist/lib/monitors/sources/file.js +0 -11
- package/dist/lib/monitors/sources/http.d.ts +0 -7
- package/dist/lib/monitors/sources/http.js +0 -9
- package/dist/lib/monitors/sources/index.d.ts +0 -9
- package/dist/lib/monitors/sources/index.js +0 -9
- package/dist/lib/monitors/sources/poll.d.ts +0 -8
- package/dist/lib/monitors/sources/poll.js +0 -8
- package/dist/lib/monitors/sources/types.d.ts +0 -18
- package/dist/lib/monitors/sources/types.js +0 -8
- package/dist/lib/monitors/sources/webhook.d.ts +0 -7
- package/dist/lib/monitors/sources/webhook.js +0 -7
- package/dist/lib/monitors/sources/ws.d.ts +0 -10
- package/dist/lib/monitors/sources/ws.js +3 -13
- package/dist/lib/monitors/state.d.ts +0 -132
- package/dist/lib/monitors/state.js +2 -86
- package/dist/lib/native-accounts.d.ts +0 -32
- package/dist/lib/native-accounts.js +0 -17
- package/dist/lib/net-close.d.ts +0 -9
- package/dist/lib/net-close.js +0 -5
- package/dist/lib/notify.d.ts +0 -47
- package/dist/lib/notify.js +0 -30
- package/dist/lib/onepassword.d.ts +0 -14
- package/dist/lib/onepassword.js +0 -12
- package/dist/lib/open-url.d.ts +0 -38
- package/dist/lib/open-url.js +1 -69
- package/dist/lib/openclaw-keychain.js +2 -7
- package/dist/lib/operator.d.ts +0 -9
- package/dist/lib/operator.js +0 -34
- package/dist/lib/origin-machine.d.ts +0 -16
- package/dist/lib/origin-machine.js +0 -16
- package/dist/lib/output/git-output.d.ts +0 -31
- package/dist/lib/output/git-output.js +4 -43
- package/dist/lib/overdue.d.ts +0 -35
- package/dist/lib/overdue.js +0 -60
- package/dist/lib/owner-message.d.ts +0 -20
- package/dist/lib/owner-message.js +1 -40
- package/dist/lib/packages/output-home.d.ts +0 -28
- package/dist/lib/packages/output-home.js +0 -114
- package/dist/lib/paths.d.ts +0 -26
- package/dist/lib/paths.js +1 -27
- package/dist/lib/percentile.d.ts +0 -11
- package/dist/lib/percentile.js +0 -11
- package/dist/lib/perf/db.d.ts +0 -16
- package/dist/lib/perf/db.js +3 -32
- package/dist/lib/perf/spool.d.ts +0 -12
- package/dist/lib/perf/spool.js +0 -13
- package/dist/lib/perf/types.d.ts +0 -26
- package/dist/lib/perf/types.js +0 -1
- package/dist/lib/permissions-registry.d.ts +0 -48
- package/dist/lib/permissions-registry.js +0 -108
- package/dist/lib/permissions.d.ts +0 -215
- package/dist/lib/permissions.js +4 -407
- package/dist/lib/picker.d.ts +0 -124
- package/dist/lib/picker.js +0 -140
- package/dist/lib/placement.d.ts +0 -57
- package/dist/lib/placement.js +0 -47
- package/dist/lib/platform/exec.d.ts +0 -73
- package/dist/lib/platform/exec.js +0 -80
- package/dist/lib/platform/index.d.ts +0 -14
- package/dist/lib/platform/index.js +0 -14
- package/dist/lib/platform/ipc.d.ts +0 -10
- package/dist/lib/platform/ipc.js +0 -13
- package/dist/lib/platform/links.d.ts +0 -14
- package/dist/lib/platform/links.js +0 -25
- package/dist/lib/platform/paths.d.ts +0 -48
- package/dist/lib/platform/paths.js +0 -52
- package/dist/lib/platform/posixpath.d.ts +0 -18
- package/dist/lib/platform/posixpath.js +0 -62
- package/dist/lib/platform/process.d.ts +0 -67
- package/dist/lib/platform/process.js +5 -99
- package/dist/lib/platform/winpath.d.ts +0 -50
- package/dist/lib/platform/winpath.js +0 -81
- package/dist/lib/plugins/plugin-marketplace.d.ts +0 -165
- package/dist/lib/plugins/plugin-marketplace.js +10 -238
- package/dist/lib/plugins/plugins.d.ts +0 -238
- package/dist/lib/plugins/plugins.js +20 -454
- package/dist/lib/plugins/skills.d.ts +0 -86
- package/dist/lib/plugins/skills.js +1 -139
- package/dist/lib/pr-land-detach.d.ts +0 -17
- package/dist/lib/pr-land-detach.js +0 -30
- package/dist/lib/pricing/cost.d.ts +0 -29
- package/dist/lib/pricing/cost.js +0 -38
- package/dist/lib/pricing/index.d.ts +0 -6
- package/dist/lib/pricing/index.js +0 -6
- package/dist/lib/pricing/table.d.ts +0 -8
- package/dist/lib/pricing/table.js +3 -56
- package/dist/lib/probe.d.ts +0 -5
- package/dist/lib/probe.js +0 -40
- package/dist/lib/profiles-presets.d.ts +0 -20
- package/dist/lib/profiles-presets.js +1 -36
- package/dist/lib/profiles.d.ts +0 -185
- package/dist/lib/profiles.js +1 -158
- package/dist/lib/project-doctor.d.ts +0 -29
- package/dist/lib/project-doctor.js +0 -26
- package/dist/lib/project-focus.d.ts +0 -41
- package/dist/lib/project-focus.js +0 -49
- package/dist/lib/project-import.d.ts +0 -41
- package/dist/lib/project-import.js +0 -36
- package/dist/lib/project-key.d.ts +0 -65
- package/dist/lib/project-key.js +0 -70
- package/dist/lib/project-launch.d.ts +0 -49
- package/dist/lib/project-launch.js +2 -91
- package/dist/lib/project-probe.d.ts +0 -86
- package/dist/lib/project-probe.js +1 -88
- package/dist/lib/project-pull.d.ts +0 -96
- package/dist/lib/project-pull.js +0 -122
- package/dist/lib/project-resources.d.ts +0 -44
- package/dist/lib/project-resources.js +7 -171
- package/dist/lib/project-root.d.ts +0 -95
- package/dist/lib/project-root.js +0 -101
- package/dist/lib/project-schedule.d.ts +0 -43
- package/dist/lib/project-schedule.js +0 -52
- package/dist/lib/project-status.d.ts +0 -108
- package/dist/lib/project-status.js +0 -117
- package/dist/lib/projects.d.ts +0 -197
- package/dist/lib/projects.js +1 -213
- package/dist/lib/pwsh.d.ts +0 -41
- package/dist/lib/pwsh.js +0 -51
- package/dist/lib/quick-todo.d.ts +84 -0
- package/dist/lib/quick-todo.js +243 -0
- package/dist/lib/reconcile-and-repair.d.ts +0 -78
- package/dist/lib/reconcile-and-repair.js +3 -66
- package/dist/lib/redact.d.ts +0 -29
- package/dist/lib/redact.js +0 -54
- package/dist/lib/refresh-coordinator.d.ts +0 -15
- package/dist/lib/refresh-coordinator.js +0 -10
- package/dist/lib/refresh.d.ts +0 -39
- package/dist/lib/refresh.js +0 -45
- package/dist/lib/registry.d.ts +0 -65
- package/dist/lib/registry.js +0 -127
- package/dist/lib/reminders.d.ts +0 -21
- package/dist/lib/reminders.js +0 -30
- package/dist/lib/remote-agents-json.d.ts +0 -44
- package/dist/lib/remote-agents-json.js +1 -44
- package/dist/lib/reserved-stores.d.ts +0 -28
- package/dist/lib/reserved-stores.js +2 -28
- package/dist/lib/resource-aliases.d.ts +0 -12
- package/dist/lib/resource-aliases.js +0 -12
- package/dist/lib/resource-content-diff.d.ts +0 -28
- package/dist/lib/resource-content-diff.js +7 -34
- package/dist/lib/resource-inventory.d.ts +0 -51
- package/dist/lib/resource-inventory.js +0 -45
- package/dist/lib/resource-patterns.d.ts +0 -32
- package/dist/lib/resource-patterns.js +0 -34
- package/dist/lib/resource-profiles.d.ts +0 -7
- package/dist/lib/resource-profiles.js +0 -11
- package/dist/lib/resources/types.d.ts +0 -50
- package/dist/lib/resources/types.js +0 -7
- package/dist/lib/resources/workflows.d.ts +0 -7
- package/dist/lib/resources/workflows.js +0 -13
- package/dist/lib/resources.d.ts +0 -65
- package/dist/lib/resources.js +0 -78
- package/dist/lib/routers.d.ts +0 -67
- package/dist/lib/routers.js +0 -60
- package/dist/lib/routine-activation.d.ts +0 -23
- package/dist/lib/routine-activation.js +0 -24
- package/dist/lib/routine-context.d.ts +1 -91
- package/dist/lib/routine-context.js +0 -107
- package/dist/lib/routine-notify-owner.d.ts +0 -79
- package/dist/lib/routine-notify-owner.js +1 -103
- package/dist/lib/routine-notify.d.ts +0 -70
- package/dist/lib/routine-notify.js +1 -75
- package/dist/lib/routine-process-cleanup.d.ts +0 -1
- package/dist/lib/routine-process-cleanup.js +1 -4
- package/dist/lib/routine-readiness.d.ts +0 -63
- package/dist/lib/routine-readiness.js +4 -86
- package/dist/lib/routines-format.d.ts +0 -40
- package/dist/lib/routines-format.js +0 -67
- package/dist/lib/routines-placement.d.ts +0 -33
- package/dist/lib/routines-placement.js +0 -40
- package/dist/lib/routines-project.d.ts +0 -57
- package/dist/lib/routines-project.js +6 -80
- package/dist/lib/rules/compile.d.ts +0 -66
- package/dist/lib/rules/compile.js +6 -118
- package/dist/lib/rules/compose.d.ts +0 -56
- package/dist/lib/rules/compose.js +2 -83
- package/dist/lib/rules/rules.d.ts +0 -23
- package/dist/lib/rules/rules.js +0 -35
- package/dist/lib/rules/run-sync.d.ts +0 -16
- package/dist/lib/rules/run-sync.js +1 -44
- package/dist/lib/run-config.d.ts +0 -7
- package/dist/lib/run-config.js +0 -8
- package/dist/lib/run-defaults.d.ts +0 -14
- package/dist/lib/run-defaults.js +0 -14
- package/dist/lib/run-notify.d.ts +0 -18
- package/dist/lib/run-notify.js +0 -36
- package/dist/lib/run-trace-sync.d.ts +0 -21
- package/dist/lib/run-trace-sync.js +2 -66
- package/dist/lib/rush-session.d.ts +0 -26
- package/dist/lib/rush-session.js +0 -28
- package/dist/lib/sandbox.d.ts +0 -45
- package/dist/lib/sandbox.js +5 -93
- package/dist/lib/scheduler.d.ts +0 -28
- package/dist/lib/scheduler.js +0 -45
- package/dist/lib/scheduling/routines.d.ts +0 -652
- package/dist/lib/scheduling/routines.js +8 -475
- package/dist/lib/secrets-cli.d.ts +3 -8
- package/dist/lib/secrets-cli.js +1 -19
- package/dist/lib/secrets-client.d.ts +0 -117
- package/dist/lib/secrets-client.js +4 -275
- package/dist/lib/secrets-policy.d.ts +0 -142
- package/dist/lib/secrets-policy.js +4 -237
- package/dist/lib/secrets-types.d.ts +0 -87
- package/dist/lib/secrets-types.js +0 -13
- package/dist/lib/self-heal/checks/hook-manifest.js +0 -25
- package/dist/lib/self-heal/checks/hook-runtime.js +0 -5
- package/dist/lib/self-heal/checks/install-staging.d.ts +0 -1
- package/dist/lib/self-heal/checks/install-staging.js +1 -28
- package/dist/lib/self-heal/checks/menubar-helper.js +0 -5
- package/dist/lib/self-heal/checks/path.js +0 -9
- package/dist/lib/self-heal/checks/resources.js +0 -5
- package/dist/lib/self-heal/checks/shadowing.js +2 -16
- package/dist/lib/self-heal/checks/shims.js +0 -14
- package/dist/lib/self-heal/child.d.ts +12 -0
- package/dist/lib/self-heal/child.js +23 -0
- package/dist/lib/self-heal/registry.d.ts +0 -9
- package/dist/lib/self-heal/registry.js +0 -16
- package/dist/lib/self-heal/types.d.ts +0 -12
- package/dist/lib/self-heal/types.js +0 -15
- package/dist/lib/self-update.d.ts +0 -312
- package/dist/lib/self-update.js +9 -360
- package/dist/lib/service-manifest.d.ts +0 -39
- package/dist/lib/service-manifest.js +0 -72
- package/dist/lib/session/active.d.ts +13 -869
- package/dist/lib/session/active.js +20 -976
- package/dist/lib/session/actor-sidecar.d.ts +1 -32
- package/dist/lib/session/actor-sidecar.js +1 -41
- package/dist/lib/session/bookmarks.d.ts +0 -33
- package/dist/lib/session/bookmarks.js +0 -37
- package/dist/lib/session/bundle.d.ts +0 -86
- package/dist/lib/session/bundle.js +0 -54
- package/dist/lib/session/claude-accounts.d.ts +0 -40
- package/dist/lib/session/claude-accounts.js +0 -49
- package/dist/lib/session/cloud.d.ts +1 -23
- package/dist/lib/session/cloud.js +0 -26
- package/dist/lib/session/db.d.ts +5 -658
- package/dist/lib/session/db.js +22 -1443
- package/dist/lib/session/detached.d.ts +0 -21
- package/dist/lib/session/detached.js +0 -29
- package/dist/lib/session/discover.d.ts +3 -420
- package/dist/lib/session/discover.js +30 -1123
- package/dist/lib/session/fork.d.ts +1 -41
- package/dist/lib/session/fork.js +0 -19
- package/dist/lib/session/ghostty-tabs.d.ts +0 -24
- package/dist/lib/session/ghostty-tabs.js +0 -37
- package/dist/lib/session/glance-files.d.ts +19 -0
- package/dist/lib/session/glance-files.js +258 -0
- package/dist/lib/session/hook-sessions.d.ts +0 -33
- package/dist/lib/session/hook-sessions.js +4 -99
- package/dist/lib/session/host-link.d.ts +1 -94
- package/dist/lib/session/host-link.js +1 -81
- package/dist/lib/session/inject-target.d.ts +8 -0
- package/dist/lib/session/inject-target.js +32 -0
- package/dist/lib/session/inject.d.ts +0 -15
- package/dist/lib/session/inject.js +0 -15
- package/dist/lib/session/live-metadata.d.ts +1 -34
- package/dist/lib/session/live-metadata.js +1 -73
- package/dist/lib/session/local-tmux-attach.d.ts +0 -37
- package/dist/lib/session/local-tmux-attach.js +1 -76
- package/dist/lib/session/migrate-targets.d.ts +0 -46
- package/dist/lib/session/migrate-targets.js +0 -24
- package/dist/lib/session/migrations.d.ts +0 -12
- package/dist/lib/session/migrations.js +1 -20
- package/dist/lib/session/mirror.d.ts +0 -32
- package/dist/lib/session/mirror.js +0 -77
- package/dist/lib/session/origin-machine.js +0 -3
- package/dist/lib/session/pid-registry.d.ts +0 -80
- package/dist/lib/session/pid-registry.js +2 -81
- package/dist/lib/session/presence.d.ts +0 -39
- package/dist/lib/session/presence.js +2 -52
- package/dist/lib/session/process-view.d.ts +0 -11
- package/dist/lib/session/process-view.js +0 -25
- package/dist/lib/session/projection.d.ts +0 -3
- package/dist/lib/session/projection.js +0 -10
- package/dist/lib/session/provenance.d.ts +1 -37
- package/dist/lib/session/provenance.js +0 -69
- package/dist/lib/session/recovery.d.ts +1 -40
- package/dist/lib/session/recovery.js +2 -80
- package/dist/lib/session/relative-time.js +0 -3
- package/dist/lib/session/remote/peer-stream.d.ts +0 -42
- package/dist/lib/session/remote/peer-stream.js +0 -64
- package/dist/lib/session/remote/remote-bundle.d.ts +0 -6
- package/dist/lib/session/remote/remote-bundle.js +0 -21
- package/dist/lib/session/remote/remote-list.d.ts +1 -110
- package/dist/lib/session/remote/remote-list.js +5 -139
- package/dist/lib/session/remote/remote.d.ts +0 -98
- package/dist/lib/session/remote/remote.js +3 -119
- package/dist/lib/session/remote/watch.d.ts +1 -34
- package/dist/lib/session/remote/watch.js +12 -72
- package/dist/lib/session/remote-active.d.ts +0 -35
- package/dist/lib/session/remote-active.js +0 -48
- package/dist/lib/session/remote-bundle.js +0 -2
- package/dist/lib/session/remote-list.js +0 -2
- package/dist/lib/session/remote-preview-cache.d.ts +0 -7
- package/dist/lib/session/remote-preview-cache.js +1 -76
- package/dist/lib/session/remote.js +0 -2
- package/dist/lib/session/resume-command.d.ts +0 -6
- package/dist/lib/session/resume-command.js +0 -6
- package/dist/lib/session/resume-owner.d.ts +1 -52
- package/dist/lib/session/resume-owner.js +0 -56
- package/dist/lib/session/run-names.d.ts +0 -24
- package/dist/lib/session/run-names.js +0 -26
- package/dist/lib/session/session-cache.d.ts +2 -146
- package/dist/lib/session/session-cache.js +26 -203
- package/dist/lib/session/short-id.js +0 -3
- package/dist/lib/session/sync/agents.d.ts +0 -68
- package/dist/lib/session/sync/agents.js +0 -0
- package/dist/lib/session/sync/backend.d.ts +0 -39
- package/dist/lib/session/sync/backend.js +0 -45
- package/dist/lib/session/sync/config.d.ts +0 -27
- package/dist/lib/session/sync/config.js +0 -56
- package/dist/lib/session/sync/managed-config.d.ts +0 -17
- package/dist/lib/session/sync/managed-config.js +0 -17
- package/dist/lib/session/sync/managed-key.d.ts +0 -38
- package/dist/lib/session/sync/managed-key.js +1 -42
- package/dist/lib/session/sync/net-client.d.ts +0 -36
- package/dist/lib/session/sync/net-client.js +0 -30
- package/dist/lib/session/sync/provision.d.ts +0 -2
- package/dist/lib/session/sync/provision.js +0 -13
- package/dist/lib/session/sync/r2.d.ts +0 -20
- package/dist/lib/session/sync/r2.js +0 -20
- package/dist/lib/session/sync/transcript-crypto.d.ts +0 -37
- package/dist/lib/session/sync/transcript-crypto.js +5 -37
- package/dist/lib/session/sync/worker-template.d.ts +0 -5
- package/dist/lib/session/sync/worker-template.js +0 -40
- package/dist/lib/session/testdata/pid-registry-namespace.js +0 -2
- package/dist/lib/session/testdata/process-view-private.js +0 -1
- package/dist/lib/session/throughput.d.ts +0 -24
- package/dist/lib/session/throughput.js +1 -25
- package/dist/lib/session/timeline-pass.d.ts +1 -63
- package/dist/lib/session/timeline-pass.js +161 -148
- package/dist/lib/session/title.d.ts +0 -182
- package/dist/lib/session/title.js +0 -139
- package/dist/lib/session/tool-index.d.ts +2 -21
- package/dist/lib/session/tool-index.js +3 -75
- package/dist/lib/session/tool-store.d.ts +2 -48
- package/dist/lib/session/tool-store.js +1 -33
- package/dist/lib/session/viewing-in.d.ts +0 -67
- package/dist/lib/session/viewing-in.js +1 -71
- package/dist/lib/session/watch.js +0 -2
- package/dist/lib/session/width.js +0 -3
- package/dist/lib/sessions-client.d.ts +0 -46
- package/dist/lib/sessions-client.js +36 -113
- package/dist/lib/settings-manifest.d.ts +1 -17
- package/dist/lib/settings-manifest.js +4 -57
- package/dist/lib/setup-tool-install.d.ts +0 -1
- package/dist/lib/setup-tool-install.js +2 -7
- package/dist/lib/setup-tool-status.d.ts +0 -3
- package/dist/lib/setup-tool-status.js +4 -14
- package/dist/lib/sha256-asset.d.ts +0 -20
- package/dist/lib/sha256-asset.js +0 -20
- package/dist/lib/share-runtime.d.ts +0 -10
- package/dist/lib/share-runtime.js +1 -27
- package/dist/lib/shim-heal.d.ts +0 -15
- package/dist/lib/shim-heal.js +3 -29
- package/dist/lib/signin-badge.d.ts +0 -72
- package/dist/lib/signin-badge.js +0 -86
- package/dist/lib/sink-format.d.ts +0 -32
- package/dist/lib/sink-format.js +0 -14
- package/dist/lib/smart-launch.d.ts +0 -75
- package/dist/lib/smart-launch.js +1 -83
- package/dist/lib/snapshot.d.ts +0 -46
- package/dist/lib/snapshot.js +5 -31
- package/dist/lib/spinner.d.ts +0 -37
- package/dist/lib/spinner.js +0 -37
- package/dist/lib/sqlite.d.ts +0 -13
- package/dist/lib/sqlite.js +3 -71
- package/dist/lib/ssh-exec.d.ts +0 -209
- package/dist/lib/ssh-exec.js +11 -248
- package/dist/lib/ssh-tunnel.d.ts +0 -43
- package/dist/lib/ssh-tunnel.js +2 -48
- package/dist/lib/staleness/checkers/commands.d.ts +0 -4
- package/dist/lib/staleness/checkers/commands.js +0 -4
- package/dist/lib/staleness/checkers/hooks.d.ts +0 -10
- package/dist/lib/staleness/checkers/hooks.js +0 -15
- package/dist/lib/staleness/checkers/mcp.d.ts +0 -9
- package/dist/lib/staleness/checkers/mcp.js +0 -9
- package/dist/lib/staleness/checkers/permissions.d.ts +0 -12
- package/dist/lib/staleness/checkers/permissions.js +0 -13
- package/dist/lib/staleness/checkers/plugins.d.ts +0 -8
- package/dist/lib/staleness/checkers/plugins.js +0 -8
- package/dist/lib/staleness/checkers/rules.d.ts +0 -15
- package/dist/lib/staleness/checkers/rules.js +0 -26
- package/dist/lib/staleness/checkers/skills.d.ts +0 -4
- package/dist/lib/staleness/checkers/skills.js +0 -4
- package/dist/lib/staleness/checkers/subagents.d.ts +0 -9
- package/dist/lib/staleness/checkers/subagents.js +0 -9
- package/dist/lib/staleness/checkers/types.d.ts +0 -34
- package/dist/lib/staleness/checkers/types.js +0 -19
- package/dist/lib/staleness/checkers/workflows.d.ts +0 -7
- package/dist/lib/staleness/checkers/workflows.js +0 -7
- package/dist/lib/staleness/detectors/commands.js +0 -17
- package/dist/lib/staleness/detectors/hooks.js +1 -6
- package/dist/lib/staleness/detectors/mcp.js +0 -4
- package/dist/lib/staleness/detectors/permissions.js +10 -23
- package/dist/lib/staleness/detectors/rules.js +0 -6
- package/dist/lib/staleness/detectors/skills.d.ts +0 -1
- package/dist/lib/staleness/detectors/skills.js +1 -12
- package/dist/lib/staleness/detectors/types.d.ts +0 -10
- package/dist/lib/staleness/fingerprint.d.ts +0 -19
- package/dist/lib/staleness/fingerprint.js +0 -35
- package/dist/lib/staleness/index.d.ts +0 -28
- package/dist/lib/staleness/index.js +1 -45
- package/dist/lib/staleness/layers.d.ts +0 -23
- package/dist/lib/staleness/layers.js +0 -34
- package/dist/lib/staleness/prune.d.ts +0 -71
- package/dist/lib/staleness/prune.js +2 -27
- package/dist/lib/staleness/registry.d.ts +0 -10
- package/dist/lib/staleness/registry.js +3 -33
- package/dist/lib/staleness/types.d.ts +0 -36
- package/dist/lib/staleness/types.js +0 -5
- package/dist/lib/staleness/writers/commands.js +1 -48
- package/dist/lib/staleness/writers/hooks.js +1 -18
- package/dist/lib/staleness/writers/kinds.d.ts +0 -12
- package/dist/lib/staleness/writers/kinds.js +0 -1
- package/dist/lib/staleness/writers/lazy-map.d.ts +0 -11
- package/dist/lib/staleness/writers/mcp.js +0 -13
- package/dist/lib/staleness/writers/plugins.js +0 -4
- package/dist/lib/staleness/writers/rules.d.ts +0 -1
- package/dist/lib/staleness/writers/rules.js +1 -19
- package/dist/lib/staleness/writers/skills.js +3 -14
- package/dist/lib/staleness/writers/sources.d.ts +0 -11
- package/dist/lib/staleness/writers/sources.js +0 -32
- package/dist/lib/staleness/writers/subagents.js +0 -16
- package/dist/lib/staleness/writers/types.d.ts +0 -58
- package/dist/lib/staleness/writers/workflows.js +1 -1
- package/dist/lib/standalone-tools.d.ts +24 -0
- package/dist/lib/standalone-tools.js +58 -0
- package/dist/lib/star-nudge.d.ts +0 -32
- package/dist/lib/star-nudge.js +2 -36
- package/dist/lib/startup/command-registry.d.ts +0 -45
- package/dist/lib/startup/command-registry.js +1 -46
- package/dist/lib/startup/dev-build.d.ts +0 -9
- package/dist/lib/startup/dev-build.js +1 -42
- package/dist/lib/startup/root-command.d.ts +0 -19
- package/dist/lib/startup/root-command.js +0 -19
- package/dist/lib/startup/spellcheck.d.ts +0 -13
- package/dist/lib/startup/spellcheck.js +0 -13
- package/dist/lib/state.d.ts +0 -376
- package/dist/lib/state.js +19 -737
- package/dist/lib/storage/selection.d.ts +0 -40
- package/dist/lib/storage/selection.js +0 -29
- package/dist/lib/subagents-registry.d.ts +0 -56
- package/dist/lib/subagents-registry.js +0 -99
- package/dist/lib/subagents.d.ts +0 -128
- package/dist/lib/subagents.js +1 -158
- package/dist/lib/summarizer/config.d.ts +0 -37
- package/dist/lib/summarizer/config.js +0 -37
- package/dist/lib/summarizer/pass.d.ts +0 -20
- package/dist/lib/summarizer/pass.js +1 -34
- package/dist/lib/summarizer/summarize.d.ts +1 -49
- package/dist/lib/summarizer/summarize.js +0 -35
- package/dist/lib/sync-passphrase.d.ts +0 -16
- package/dist/lib/sync-passphrase.js +1 -18
- package/dist/lib/sync-status.d.ts +0 -72
- package/dist/lib/sync-status.js +0 -55
- package/dist/lib/sync-umbrella.d.ts +0 -54
- package/dist/lib/sync-umbrella.js +0 -48
- package/dist/lib/system-run-sync.d.ts +0 -5
- package/dist/lib/system-run-sync.js +1 -31
- package/dist/lib/teams/agents.d.ts +1 -444
- package/dist/lib/teams/agents.js +11 -871
- package/dist/lib/teams/api.d.ts +2 -52
- package/dist/lib/teams/api.js +4 -63
- package/dist/lib/teams/debug.d.ts +0 -6
- package/dist/lib/teams/debug.js +0 -6
- package/dist/lib/teams/delivery.d.ts +0 -41
- package/dist/lib/teams/delivery.js +0 -32
- package/dist/lib/teams/file_ops.d.ts +0 -11
- package/dist/lib/teams/file_ops.js +0 -11
- package/dist/lib/teams/forEach.d.ts +0 -76
- package/dist/lib/teams/forEach.js +1 -77
- package/dist/lib/teams/index.d.ts +1 -7
- package/dist/lib/teams/index.js +1 -7
- package/dist/lib/teams/parsers.d.ts +0 -4
- package/dist/lib/teams/parsers.js +0 -81
- package/dist/lib/teams/persistence.d.ts +0 -2
- package/dist/lib/teams/persistence.js +0 -12
- package/dist/lib/teams/placement-probe.d.ts +0 -12
- package/dist/lib/teams/placement-probe.js +1 -51
- package/dist/lib/teams/pr-watch.d.ts +0 -107
- package/dist/lib/teams/pr-watch.js +1 -107
- package/dist/lib/teams/registry.d.ts +0 -36
- package/dist/lib/teams/registry.js +0 -47
- package/dist/lib/teams/remoteWorktree.d.ts +0 -50
- package/dist/lib/teams/remoteWorktree.js +1 -96
- package/dist/lib/teams/scheduler.d.ts +0 -111
- package/dist/lib/teams/scheduler.js +2 -125
- package/dist/lib/teams/summarizer.d.ts +0 -22
- package/dist/lib/teams/summarizer.js +6 -50
- package/dist/lib/teams/supervisor.d.ts +0 -38
- package/dist/lib/teams/supervisor.js +0 -21
- package/dist/lib/teams/worktree.d.ts +0 -95
- package/dist/lib/teams/worktree.js +3 -110
- package/dist/lib/template.d.ts +0 -21
- package/dist/lib/template.js +0 -23
- package/dist/lib/term-client.d.ts +0 -26
- package/dist/lib/term-client.js +0 -48
- package/dist/lib/term-driver.d.ts +0 -5
- package/dist/lib/term-driver.js +0 -8
- package/dist/lib/terminal/backends/ghostty.d.ts +0 -2
- package/dist/lib/terminal/backends/ghostty.js +0 -12
- package/dist/lib/terminal/backends/index.d.ts +0 -17
- package/dist/lib/terminal/backends/index.js +0 -15
- package/dist/lib/terminal/backends/iterm.d.ts +0 -2
- package/dist/lib/terminal/backends/iterm.js +0 -10
- package/dist/lib/terminal/backends/terminal-app.d.ts +0 -10
- package/dist/lib/terminal/backends/terminal-app.js +0 -30
- package/dist/lib/terminal/backends/tmux.d.ts +0 -10
- package/dist/lib/terminal/backends/tmux.js +0 -2
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +0 -25
- package/dist/lib/terminal/backends/vscodium-agent.js +0 -36
- package/dist/lib/terminal/engine.d.ts +0 -17
- package/dist/lib/terminal/engine.js +0 -10
- package/dist/lib/terminal/index.d.ts +0 -8
- package/dist/lib/terminal/inject.d.ts +1 -173
- package/dist/lib/terminal/inject.js +0 -146
- package/dist/lib/terminal/policy.d.ts +0 -8
- package/dist/lib/terminal/policy.js +0 -1
- package/dist/lib/terminal/preferred.d.ts +0 -66
- package/dist/lib/terminal/preferred.js +0 -30
- package/dist/lib/terminal/quote.d.ts +0 -8
- package/dist/lib/terminal/quote.js +0 -8
- package/dist/lib/terminal/resolve.d.ts +0 -46
- package/dist/lib/terminal/resolve.js +0 -30
- package/dist/lib/terminal/run-surface.d.ts +0 -56
- package/dist/lib/terminal/run-surface.js +0 -46
- package/dist/lib/terminal/shell.d.ts +0 -3
- package/dist/lib/terminal/shell.js +0 -13
- package/dist/lib/terminal/transport.d.ts +0 -14
- package/dist/lib/terminal/transport.js +1 -30
- package/dist/lib/terminal/types.d.ts +0 -40
- package/dist/lib/terminal/types.js +0 -10
- package/dist/lib/text/relative-time.d.ts +0 -36
- package/dist/lib/text/relative-time.js +0 -43
- package/dist/lib/text/short-id.d.ts +0 -16
- package/dist/lib/text/short-id.js +0 -16
- package/dist/lib/text/width.d.ts +0 -24
- package/dist/lib/text/width.js +10 -52
- package/dist/lib/tmux/binary.d.ts +0 -36
- package/dist/lib/tmux/binary.js +0 -28
- package/dist/lib/tmux/index.d.ts +0 -5
- package/dist/lib/tmux/index.js +0 -5
- package/dist/lib/tmux/orphan-reap.d.ts +0 -253
- package/dist/lib/tmux/orphan-reap.js +3 -299
- package/dist/lib/tmux/paths.d.ts +0 -14
- package/dist/lib/tmux/paths.js +0 -14
- package/dist/lib/tmux/session.d.ts +0 -263
- package/dist/lib/tmux/session.js +6 -344
- package/dist/lib/traces/backend.d.ts +0 -20
- package/dist/lib/traces/backend.js +0 -23
- package/dist/lib/traces/classify.d.ts +0 -20
- package/dist/lib/traces/classify.js +0 -7
- package/dist/lib/traces/insights.d.ts +1 -84
- package/dist/lib/traces/insights.js +0 -126
- package/dist/lib/traces/phenotype.d.ts +0 -69
- package/dist/lib/traces/phenotype.js +0 -150
- package/dist/lib/traces/provision.d.ts +0 -1
- package/dist/lib/traces/provision.js +0 -5
- package/dist/lib/traces/schema2-build.d.ts +3 -60
- package/dist/lib/traces/schema2-build.js +8 -149
- package/dist/lib/traces/schema2-danger.d.ts +0 -30
- package/dist/lib/traces/schema2-danger.js +1 -63
- package/dist/lib/traces/schema2.d.ts +0 -11
- package/dist/lib/traces/segments.d.ts +0 -44
- package/dist/lib/traces/segments.js +0 -65
- package/dist/lib/traces/sync.d.ts +2 -239
- package/dist/lib/traces/sync.js +15 -237
- package/dist/lib/traces/worker-template.d.ts +0 -3
- package/dist/lib/traces/worker-template.js +0 -29
- package/dist/lib/triggers/handlers.d.ts +0 -82
- package/dist/lib/triggers/handlers.js +0 -75
- package/dist/lib/triggers/webhook.d.ts +0 -158
- package/dist/lib/triggers/webhook.js +0 -143
- package/dist/lib/types.d.ts +0 -736
- package/dist/lib/types.js +0 -50
- package/dist/lib/uninstall.d.ts +0 -17
- package/dist/lib/uninstall.js +0 -75
- package/dist/lib/usage-backoff.d.ts +0 -20
- package/dist/lib/usage-backoff.js +3 -60
- package/dist/lib/usage-refresh.d.ts +0 -154
- package/dist/lib/usage-refresh.js +8 -212
- package/dist/lib/verbs.d.ts +0 -12
- package/dist/lib/verbs.js +0 -12
- package/dist/lib/version-duplicates.d.ts +0 -6
- package/dist/lib/version-duplicates.js +0 -6
- package/dist/lib/version.d.ts +0 -55
- package/dist/lib/version.js +1 -58
- package/dist/lib/view-types.d.ts +0 -48
- package/dist/lib/warn-unpushed.d.ts +0 -27
- package/dist/lib/warn-unpushed.js +1 -45
- package/dist/lib/watchdog/history.d.ts +0 -1
- package/dist/lib/watchdog/history.js +0 -3
- package/dist/lib/watchdog/index.js +0 -2
- package/dist/lib/watchdog/log.d.ts +0 -19
- package/dist/lib/watchdog/log.js +0 -34
- package/dist/lib/watchdog/read.d.ts +0 -27
- package/dist/lib/watchdog/read.js +3 -58
- package/dist/lib/watchdog/rotate.d.ts +0 -139
- package/dist/lib/watchdog/rotate.js +2 -151
- package/dist/lib/watchdog/runner.d.ts +0 -125
- package/dist/lib/watchdog/runner.js +3 -223
- package/dist/lib/watchdog/service.d.ts +0 -1
- package/dist/lib/watchdog/service.js +0 -2
- package/dist/lib/watchdog/watchdog-agent.d.ts +0 -31
- package/dist/lib/watchdog/watchdog-agent.js +0 -27
- package/dist/lib/watchdog/watchdog.d.ts +0 -7
- package/dist/lib/watchdog/watchdog.js +0 -10
- package/dist/lib/watchdog/watchdogTail.js +0 -7
- package/dist/lib/whats-new.d.ts +0 -10
- package/dist/lib/whats-new.js +0 -21
- package/dist/lib/workflows-registry.d.ts +0 -45
- package/dist/lib/workflows-registry.js +0 -60
- package/dist/lib/workflows.d.ts +0 -282
- package/dist/lib/workflows.js +3 -213
- package/dist/lib/worktree/held.d.ts +0 -89
- package/dist/lib/worktree/held.js +1 -103
- package/dist/lib/wrap.d.ts +0 -32
- package/dist/lib/wrap.js +0 -32
- package/dist/lib/yaml-io.d.ts +0 -45
- package/dist/lib/yaml-io.js +0 -47
- package/dist/session-tracker/dist/adapters/claude.js +0 -2
- package/dist/session-tracker/dist/hook.sh +4 -37
- package/dist/session-tracker/dist/index.d.ts +0 -7
- package/dist/session-tracker/dist/index.js +0 -5
- package/dist/session-tracker/dist/install-hook.d.ts +0 -5
- package/dist/session-tracker/dist/install-hook.js +1 -15
- package/dist/session-tracker/dist/prune-state.js +0 -4
- package/dist/session-tracker/dist/reader.js +0 -4
- package/dist/session-tracker/dist/state-file.d.ts +0 -3
- package/dist/session-tracker/dist/state-file.js +3 -8
- package/package.json +3 -4
- package/scripts/postinstall.js +8 -116
- package/dist/lib/session/artifacts.d.ts +0 -14
- package/dist/lib/session/artifacts.js +0 -101
- package/dist/lib/session/bash-command.d.ts +0 -63
- package/dist/lib/session/bash-command.js +0 -490
- package/dist/lib/session/digest.d.ts +0 -66
- package/dist/lib/session/digest.js +0 -328
- package/dist/lib/session/highlights.d.ts +0 -151
- package/dist/lib/session/highlights.js +0 -391
- package/dist/lib/session/insights.d.ts +0 -165
- package/dist/lib/session/insights.js +0 -563
- package/dist/lib/session/linear.d.ts +0 -19
- package/dist/lib/session/linear.js +0 -99
- package/dist/lib/session/parse.d.ts +0 -224
- package/dist/lib/session/parse.js +0 -2408
- package/dist/lib/session/prompt.d.ts +0 -213
- package/dist/lib/session/prompt.js +0 -601
- package/dist/lib/session/render.d.ts +0 -133
- package/dist/lib/session/render.js +0 -1047
- package/dist/lib/session/share-html.d.ts +0 -35
- package/dist/lib/session/share-html.js +0 -319
- package/dist/lib/session/shell-programs.d.ts +0 -33
- package/dist/lib/session/shell-programs.js +0 -380
- package/dist/lib/session/state.d.ts +0 -269
- package/dist/lib/session/state.js +0 -777
- package/dist/lib/session/stream-render.d.ts +0 -4
- package/dist/lib/session/stream-render.js +0 -131
- package/dist/lib/session/tail.d.ts +0 -88
- package/dist/lib/session/tail.js +0 -294
- package/dist/lib/session/team-filter.d.ts +0 -129
- package/dist/lib/session/team-filter.js +0 -269
- package/dist/lib/session/timeline.d.ts +0 -172
- package/dist/lib/session/timeline.js +0 -636
- package/dist/lib/session/tool-calls.d.ts +0 -132
- package/dist/lib/session/tool-calls.js +0 -674
- package/dist/lib/session/trajectory-compare.d.ts +0 -48
- package/dist/lib/session/trajectory-compare.js +0 -116
- package/dist/lib/session/trajectory-html.d.ts +0 -19
- package/dist/lib/session/trajectory-html.js +0 -771
- package/dist/lib/session/trajectory-lineage.d.ts +0 -93
- package/dist/lib/session/trajectory-lineage.js +0 -195
- package/dist/lib/session/trajectory-text.d.ts +0 -38
- package/dist/lib/session/trajectory-text.js +0 -284
- package/dist/lib/session/trajectory.d.ts +0 -145
- package/dist/lib/session/trajectory.js +0 -394
- package/dist/lib/session/types.d.ts +0 -627
- package/dist/lib/session/types.js +0 -43
|
@@ -1,1047 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session rendering: summary, markdown conversation, and JSON output.
|
|
3
|
-
*
|
|
4
|
-
* Provides the display layer for `agents sessions <id>`. The summary renderer
|
|
5
|
-
* produces a chalk-formatted activity overview (modified files, commands,
|
|
6
|
-
* errors, final message). The markdown renderer emits a full conversation
|
|
7
|
-
* transcript. Filtering by role and turn slicing is handled here as well.
|
|
8
|
-
*/
|
|
9
|
-
import chalk from 'chalk';
|
|
10
|
-
import { truncate } from '../format.js';
|
|
11
|
-
import { summarizeToolUse } from './parse.js';
|
|
12
|
-
import { cleanSessionPrompt, classifyUserPrompt, extractSessionTopic } from './prompt.js';
|
|
13
|
-
import { renderMarkdown } from '../markdown.js';
|
|
14
|
-
import { redactSecrets } from '../redact.js';
|
|
15
|
-
import { classifyFileChanges, changeCounts, toolHistogram, detectTestResult } from './digest.js';
|
|
16
|
-
import { classifyBashCommand, unwrapCommand, bucketKey } from './bash-command.js';
|
|
17
|
-
import { extractArtifacts, extractHooks, extractLinks, extractSkills } from './highlights.js';
|
|
18
|
-
import { extractTodoProgressFromEvents } from './state.js';
|
|
19
|
-
// ── Path helpers ──────────────────────────────────────────────────────────────
|
|
20
|
-
/**
|
|
21
|
-
* Return absPath relative to cwd; fall back to ~/… then absolute.
|
|
22
|
-
*/
|
|
23
|
-
export function relativeToCwd(absPath, cwd) {
|
|
24
|
-
if (cwd && (absPath === cwd || absPath.startsWith(cwd + '/'))) {
|
|
25
|
-
const rel = absPath.slice(cwd.length + 1);
|
|
26
|
-
return rel || '.';
|
|
27
|
-
}
|
|
28
|
-
const home = process.env.HOME || '';
|
|
29
|
-
if (home && (absPath === home || absPath.startsWith(home + '/'))) {
|
|
30
|
-
return '~' + absPath.slice(home.length);
|
|
31
|
-
}
|
|
32
|
-
return absPath;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Display form for a touched path: cwd-relative first; then collapse any
|
|
36
|
-
* `.agents/worktrees/<slug>` segment (in-cwd OR outside) to `⧉ <slug>/…` so
|
|
37
|
-
* group labels stay on one line instead of `~/src/…/.agents/worktrees/<slug>/…`;
|
|
38
|
-
* else home-collapse.
|
|
39
|
-
*/
|
|
40
|
-
export function displayPath(absPath, cwd) {
|
|
41
|
-
const rel = relativeToCwd(absPath, cwd);
|
|
42
|
-
const norm = rel.replace(/\\/g, '/');
|
|
43
|
-
const wt = norm.match(/(^|\/)\.agents\/worktrees\/([^/]+)/);
|
|
44
|
-
if (wt) {
|
|
45
|
-
const after = norm.slice(norm.indexOf(wt[0]) + wt[0].length).replace(/^\//, '');
|
|
46
|
-
return after ? `⧉ ${wt[2]}/${after}` : `⧉ ${wt[2]}`;
|
|
47
|
-
}
|
|
48
|
-
return rel;
|
|
49
|
-
}
|
|
50
|
-
/** One checklist line with a status marker: `[x] done` / `[>] doing` / `[ ] todo`. */
|
|
51
|
-
function renderTodoMarker(item) {
|
|
52
|
-
const text = item.content;
|
|
53
|
-
if (item.status === 'completed')
|
|
54
|
-
return chalk.green('[x]') + ' ' + chalk.gray(text);
|
|
55
|
-
if (item.status === 'in_progress')
|
|
56
|
-
return chalk.yellow('[>]') + ' ' + chalk.white(text);
|
|
57
|
-
return chalk.gray('[ ]') + ' ' + chalk.white(text);
|
|
58
|
-
}
|
|
59
|
-
/** Best-effort feature-detect for OSC 8 hyperlink support in the current TTY. */
|
|
60
|
-
function supportsHyperlinks() {
|
|
61
|
-
return Boolean(process.stdout.isTTY &&
|
|
62
|
-
(process.env.TERM_PROGRAM ||
|
|
63
|
-
process.env.WT_SESSION ||
|
|
64
|
-
process.env.KITTY_WINDOW_ID ||
|
|
65
|
-
process.env.WEZTERM_PANE));
|
|
66
|
-
}
|
|
67
|
-
/** Wrap `label` in an OSC 8 hyperlink to `target`. Callers gate on {@link supportsHyperlinks}. */
|
|
68
|
-
function osc8(target, label) {
|
|
69
|
-
return `\x1b]8;;${target}\x1b\\${label}\x1b]8;;\x1b\\`;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Wrap a filesystem path label in an OSC 8 `file://` hyperlink when the terminal
|
|
73
|
-
* supports it. Degrades to the plain label otherwise.
|
|
74
|
-
*/
|
|
75
|
-
export function linkPath(absPath, label) {
|
|
76
|
-
return supportsHyperlinks() ? osc8(`file://${absPath}`, label) : label;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Wrap a label in an OSC 8 hyperlink to an arbitrary URL (a PR on GitHub, a Linear
|
|
80
|
-
* issue, …) when the terminal supports it. Degrades to the plain label otherwise.
|
|
81
|
-
*/
|
|
82
|
-
export function linkUrl(url, label) {
|
|
83
|
-
return supportsHyperlinks() ? osc8(url, label) : label;
|
|
84
|
-
}
|
|
85
|
-
// ── Command grouping ──────────────────────────────────────────────────────────
|
|
86
|
-
/**
|
|
87
|
-
* Normalize a command so trivial flag/pipe variations collapse to the same key.
|
|
88
|
-
*/
|
|
89
|
-
export function normalizeForDedup(cmd) {
|
|
90
|
-
let s = cmd.trim();
|
|
91
|
-
s = s.replace(/\s+-[a-zA-Z]+/g, '');
|
|
92
|
-
s = s.replace(/\s+--[a-zA-Z][-a-zA-Z0-9]*(?:=\S+)?/g, '');
|
|
93
|
-
s = s.replace(/\s*\|\s*(head|tail|wc|less|more|cat)(\s+\S+)?.*$/, '');
|
|
94
|
-
s = s.replace(/\s*2>&1\s*$/, '');
|
|
95
|
-
s = s.replace(/\s*;\s*echo\b.*$/, '');
|
|
96
|
-
const home = process.env.HOME ?? '';
|
|
97
|
-
if (home) {
|
|
98
|
-
s = s.replace(new RegExp('^' + home.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')), '~');
|
|
99
|
-
}
|
|
100
|
-
return s.trim();
|
|
101
|
-
}
|
|
102
|
-
// Re-export the shared classifier/bucketing for callers in this module's surface.
|
|
103
|
-
// `bucketKey` is the single source of truth in bash-command.ts (correct subcommand
|
|
104
|
-
// scan + `ssh\u2192` remote prefix); render must not keep a divergent copy.
|
|
105
|
-
export { unwrapCommand, bucketKey };
|
|
106
|
-
const CATEGORY_NAMES = {
|
|
107
|
-
vcs: 'VCS',
|
|
108
|
-
'build-test': 'Build/test',
|
|
109
|
-
install: 'Install',
|
|
110
|
-
remote: 'Remote',
|
|
111
|
-
http: 'HTTP',
|
|
112
|
-
media: 'Media',
|
|
113
|
-
upscaling: 'Upscaling',
|
|
114
|
-
metadata: 'Metadata',
|
|
115
|
-
probe: 'Probes',
|
|
116
|
-
search: 'Search',
|
|
117
|
-
shell: 'Shell',
|
|
118
|
-
wait: 'Wait',
|
|
119
|
-
other: 'Other',
|
|
120
|
-
};
|
|
121
|
-
function categoryOf(cmd) {
|
|
122
|
-
const rawFirst = cmd.trim().split(/\s+/)[0]?.toLowerCase() ?? '';
|
|
123
|
-
// Remote wrappers: classify as Remote regardless of inner command.
|
|
124
|
-
if (['ssh', 'scp', 'rsync'].includes(rawFirst)) {
|
|
125
|
-
return { name: 'Remote', signal: 'mid' };
|
|
126
|
-
}
|
|
127
|
-
const info = classifyBashCommand(cmd);
|
|
128
|
-
if (info.category === 'other')
|
|
129
|
-
return null;
|
|
130
|
-
return { name: CATEGORY_NAMES[info.category], signal: info.signal };
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Collapse consecutive same-normalized commands within a 60-second window
|
|
134
|
-
* when they appear 3+ times. Fewer than 3 stay as separate entries.
|
|
135
|
-
*/
|
|
136
|
-
export function collapseRetries(commands) {
|
|
137
|
-
const groups = [];
|
|
138
|
-
for (const { cmd, ts } of commands) {
|
|
139
|
-
const normalized = normalizeForDedup(unwrapCommand(cmd));
|
|
140
|
-
const last = groups[groups.length - 1];
|
|
141
|
-
if (last && last.normalized === normalized && ts - last.lastTs <= 60_000) {
|
|
142
|
-
last.count++;
|
|
143
|
-
last.lastTs = ts;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
groups.push({ normalized, raw: cmd, firstTs: ts, lastTs: ts, count: 1 });
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Expand groups with count < 3 back to individual entries
|
|
150
|
-
const result = [];
|
|
151
|
-
for (const g of groups) {
|
|
152
|
-
if (g.count >= 3) {
|
|
153
|
-
result.push(g);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
for (let i = 0; i < g.count; i++) {
|
|
157
|
-
result.push({ normalized: g.normalized, raw: g.raw, firstTs: g.firstTs, lastTs: g.lastTs, count: 1 });
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return result;
|
|
162
|
-
}
|
|
163
|
-
/** Compute aggregate statistics (turns, tools, tokens, duration) from session events. */
|
|
164
|
-
export function computeSummaryStats(events) {
|
|
165
|
-
const modelSet = new Set();
|
|
166
|
-
const toolCounts = {};
|
|
167
|
-
let userTurns = 0;
|
|
168
|
-
let assistantTurns = 0;
|
|
169
|
-
let toolCount = 0;
|
|
170
|
-
let errorCount = 0;
|
|
171
|
-
let outputTokens = 0;
|
|
172
|
-
let cacheReadTokens = 0;
|
|
173
|
-
let firstTs = Infinity;
|
|
174
|
-
let lastTs = -Infinity;
|
|
175
|
-
for (const e of events) {
|
|
176
|
-
const ts = new Date(e.timestamp).getTime();
|
|
177
|
-
if (!isNaN(ts)) {
|
|
178
|
-
if (ts < firstTs)
|
|
179
|
-
firstTs = ts;
|
|
180
|
-
if (ts > lastTs)
|
|
181
|
-
lastTs = ts;
|
|
182
|
-
}
|
|
183
|
-
if (e.type === 'message') {
|
|
184
|
-
if (e.role === 'user')
|
|
185
|
-
userTurns++;
|
|
186
|
-
else if (e.role === 'assistant')
|
|
187
|
-
assistantTurns++;
|
|
188
|
-
}
|
|
189
|
-
else if (e.type === 'tool_use' && !e._local) {
|
|
190
|
-
toolCount++;
|
|
191
|
-
if (e.tool)
|
|
192
|
-
toolCounts[e.tool] = (toolCounts[e.tool] ?? 0) + 1;
|
|
193
|
-
}
|
|
194
|
-
else if (e.type === 'error') {
|
|
195
|
-
errorCount++;
|
|
196
|
-
}
|
|
197
|
-
else if (e.type === 'usage') {
|
|
198
|
-
if (e.model)
|
|
199
|
-
modelSet.add(shortenModel(e.model));
|
|
200
|
-
outputTokens += e.outputTokens ?? 0;
|
|
201
|
-
cacheReadTokens += e.cacheReadTokens ?? 0;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return {
|
|
205
|
-
models: Array.from(modelSet),
|
|
206
|
-
userTurns,
|
|
207
|
-
assistantTurns,
|
|
208
|
-
toolCount,
|
|
209
|
-
toolCounts,
|
|
210
|
-
errorCount,
|
|
211
|
-
outputTokens,
|
|
212
|
-
cacheReadTokens,
|
|
213
|
-
firstTs: firstTs === Infinity ? 0 : firstTs,
|
|
214
|
-
lastTs: lastTs === -Infinity ? 0 : lastTs,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
/** Strip the 'claude-' prefix and date suffix from a model identifier. */
|
|
218
|
-
export function shortenModel(model) {
|
|
219
|
-
return model.replace(/^claude-/, '').replace(/-\d{8}$/, '');
|
|
220
|
-
}
|
|
221
|
-
/** Format a token count as a human-readable string (e.g. 67.5K, 1.2M). */
|
|
222
|
-
export function formatTokenCount(n) {
|
|
223
|
-
if (n === 0)
|
|
224
|
-
return '0';
|
|
225
|
-
if (n < 1000)
|
|
226
|
-
return String(n);
|
|
227
|
-
if (n < 1_000_000) {
|
|
228
|
-
const k = n / 1000;
|
|
229
|
-
return (k >= 100 ? Math.round(k) : parseFloat(k.toFixed(1))) + 'K';
|
|
230
|
-
}
|
|
231
|
-
const m = n / 1_000_000;
|
|
232
|
-
return (m >= 100 ? Math.round(m) : parseFloat(m.toFixed(1))) + 'M';
|
|
233
|
-
}
|
|
234
|
-
/** Format a duration in milliseconds as a human-readable string (e.g. '12 min', '2h 30min'). */
|
|
235
|
-
export function formatDuration(ms) {
|
|
236
|
-
const totalMin = Math.round(ms / 60_000);
|
|
237
|
-
if (totalMin < 1)
|
|
238
|
-
return 'under 1 min';
|
|
239
|
-
if (totalMin < 60)
|
|
240
|
-
return `${totalMin} min`;
|
|
241
|
-
const hrs = Math.floor(totalMin / 60);
|
|
242
|
-
const mins = totalMin % 60;
|
|
243
|
-
return mins > 0 ? `${hrs}h ${mins}min` : `${hrs}h`;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Return the stats line for a session summary header.
|
|
247
|
-
* e.g. "221 turns · 198 tools (10 errors) · 67.5M cached / 361K out · 12 min"
|
|
248
|
-
*/
|
|
249
|
-
export function renderSummaryHeader(stats) {
|
|
250
|
-
const turns = stats.userTurns + stats.assistantTurns;
|
|
251
|
-
const parts = [];
|
|
252
|
-
parts.push(`${turns} turn${turns !== 1 ? 's' : ''}`);
|
|
253
|
-
if (stats.toolCount > 0) {
|
|
254
|
-
const toolPart = stats.errorCount > 0
|
|
255
|
-
? `${stats.toolCount} tools (${stats.errorCount} error${stats.errorCount !== 1 ? 's' : ''})`
|
|
256
|
-
: `${stats.toolCount} tools`;
|
|
257
|
-
parts.push(toolPart);
|
|
258
|
-
}
|
|
259
|
-
if (stats.cacheReadTokens > 0 || stats.outputTokens > 0) {
|
|
260
|
-
const tokenPart = stats.cacheReadTokens > 0
|
|
261
|
-
? `${formatTokenCount(stats.cacheReadTokens)} cached / ${formatTokenCount(stats.outputTokens)} out`
|
|
262
|
-
: `${formatTokenCount(stats.outputTokens)} out`;
|
|
263
|
-
parts.push(tokenPart);
|
|
264
|
-
}
|
|
265
|
-
if (stats.lastTs > stats.firstTs) {
|
|
266
|
-
parts.push(formatDuration(stats.lastTs - stats.firstTs));
|
|
267
|
-
}
|
|
268
|
-
return parts.join(' · ');
|
|
269
|
-
}
|
|
270
|
-
// ── Prompt reference extraction ───────────────────────────────────────────────
|
|
271
|
-
/** Extract @-mentions, slash paths, and ~/... references from a prompt string. */
|
|
272
|
-
function extractReferences(text) {
|
|
273
|
-
const refs = new Set();
|
|
274
|
-
for (const m of text.matchAll(/@[\w/.-]+/g))
|
|
275
|
-
refs.add(m[0]);
|
|
276
|
-
for (const m of text.matchAll(/(?:^|\s)(\/[\w/.-]{3,})/gm))
|
|
277
|
-
refs.add(m[1]);
|
|
278
|
-
for (const m of text.matchAll(/~\/[\w/.-]+/g))
|
|
279
|
-
refs.add(m[0]);
|
|
280
|
-
return Array.from(refs);
|
|
281
|
-
}
|
|
282
|
-
/** Render the Commands section of the summary, grouping by category and collapsing retries. */
|
|
283
|
-
function renderCommandsSection(cmds, lines) {
|
|
284
|
-
if (cmds.length === 0)
|
|
285
|
-
return;
|
|
286
|
-
const runs = collapseRetries(cmds);
|
|
287
|
-
// Group runs by category → key → {count, samples}
|
|
288
|
-
const catMap = new Map();
|
|
289
|
-
let otherCount = 0;
|
|
290
|
-
const otherKeys = new Map();
|
|
291
|
-
for (const run of runs) {
|
|
292
|
-
const cat = categoryOf(run.raw);
|
|
293
|
-
const key = bucketKey(run.raw);
|
|
294
|
-
if (cat) {
|
|
295
|
-
let catEntry = catMap.get(cat.name);
|
|
296
|
-
if (!catEntry) {
|
|
297
|
-
catEntry = { signal: cat.signal, keys: new Map() };
|
|
298
|
-
catMap.set(cat.name, catEntry);
|
|
299
|
-
}
|
|
300
|
-
const existing = catEntry.keys.get(key) ?? { count: 0, samples: [] };
|
|
301
|
-
existing.count += run.count;
|
|
302
|
-
if (existing.samples.length < 5 && !existing.samples.some(s => sharesPrefix(s, run.raw, 30))) {
|
|
303
|
-
existing.samples.push(run.raw);
|
|
304
|
-
}
|
|
305
|
-
catEntry.keys.set(key, existing);
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
otherCount += run.count;
|
|
309
|
-
const existing = otherKeys.get(key) ?? { count: 0, samples: [] };
|
|
310
|
-
existing.count += run.count;
|
|
311
|
-
if (existing.samples.length < 3)
|
|
312
|
-
existing.samples.push(run.raw);
|
|
313
|
-
otherKeys.set(key, existing);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
// Total command count (sum of all run counts)
|
|
317
|
-
const total = runs.reduce((sum, r) => sum + r.count, 0);
|
|
318
|
-
lines.push(chalk.bold('Commands') + chalk.gray(` (${total})`));
|
|
319
|
-
// Sort categories: high-signal first, then mid, then low, by total count desc. Other last.
|
|
320
|
-
const SIGNAL_ORDER = { high: 0, mid: 1, low: 2 };
|
|
321
|
-
const sortedCats = Array.from(catMap.entries()).sort((a, b) => {
|
|
322
|
-
const sigA = SIGNAL_ORDER[a[1].signal] ?? 3;
|
|
323
|
-
const sigB = SIGNAL_ORDER[b[1].signal] ?? 3;
|
|
324
|
-
if (sigA !== sigB)
|
|
325
|
-
return sigA - sigB;
|
|
326
|
-
const countA = Array.from(a[1].keys.values()).reduce((s, v) => s + v.count, 0);
|
|
327
|
-
const countB = Array.from(b[1].keys.values()).reduce((s, v) => s + v.count, 0);
|
|
328
|
-
return countB - countA;
|
|
329
|
-
});
|
|
330
|
-
for (const [catName, catEntry] of sortedCats) {
|
|
331
|
-
const catTotal = Array.from(catEntry.keys.values()).reduce((s, v) => s + v.count, 0);
|
|
332
|
-
if (catEntry.signal === 'low') {
|
|
333
|
-
// Single inline line: category name + top 5 first tokens
|
|
334
|
-
const topTokens = Array.from(catEntry.keys.keys()).slice(0, 5).join(', ');
|
|
335
|
-
lines.push(` ${chalk.dim(catName)} ${chalk.gray(`(${catTotal})`)} ${chalk.gray('— ' + topTokens)}`);
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
lines.push(` ${chalk.dim(catName)} ${chalk.gray(`(${catTotal})`)}`);
|
|
339
|
-
const keysSorted = Array.from(catEntry.keys.entries()).sort((a, b) => b[1].count - a[1].count);
|
|
340
|
-
const limit = catEntry.signal === 'high' ? Infinity : 3;
|
|
341
|
-
let shown = 0;
|
|
342
|
-
for (const [key, v] of keysSorted) {
|
|
343
|
-
if (shown >= limit)
|
|
344
|
-
break;
|
|
345
|
-
if (catEntry.signal === 'mid') {
|
|
346
|
-
// Mid signal: display the bucket key (e.g. ssh→openclaw browser) with aggregate count
|
|
347
|
-
const countSuffix = v.count > 1 ? chalk.gray(` × ${v.count}`) : '';
|
|
348
|
-
lines.push(` ${chalk.cyan(truncate(key, 80))}${countSuffix}`);
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
// High signal: display distinct raw sample commands
|
|
352
|
-
const distinctSamples = pickDistinct(v.samples, 3);
|
|
353
|
-
for (const sample of distinctSamples) {
|
|
354
|
-
const countSuffix = v.count > 1 ? chalk.gray(` × ${v.count}`) : '';
|
|
355
|
-
lines.push(` ${chalk.cyan(truncate(sample, 80))}${countSuffix}`);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
shown++;
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
if (otherCount > 0) {
|
|
363
|
-
lines.push(` ${chalk.dim('Other')} ${chalk.gray(`(${otherCount})`)}`);
|
|
364
|
-
for (const [, v] of Array.from(otherKeys.entries()).slice(0, 5)) {
|
|
365
|
-
const countSuffix = v.count > 1 ? chalk.gray(` × ${v.count}`) : '';
|
|
366
|
-
lines.push(` ${chalk.cyan(truncate(v.samples[0] ?? '', 80))}${countSuffix}`);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
lines.push('');
|
|
370
|
-
}
|
|
371
|
-
function sharesPrefix(a, b, len) {
|
|
372
|
-
return a.slice(0, len) === b.slice(0, len);
|
|
373
|
-
}
|
|
374
|
-
function pickDistinct(samples, max) {
|
|
375
|
-
const result = [];
|
|
376
|
-
for (const s of samples) {
|
|
377
|
-
if (result.length >= max)
|
|
378
|
-
break;
|
|
379
|
-
if (!result.some(r => sharesPrefix(r, s, 30)))
|
|
380
|
-
result.push(s);
|
|
381
|
-
}
|
|
382
|
-
return result.length > 0 ? result : samples.slice(0, max);
|
|
383
|
-
}
|
|
384
|
-
// ── File grouping ─────────────────────────────────────────────────────────────
|
|
385
|
-
/** Group file paths by their parent directory, in display form (cwd-relative,
|
|
386
|
-
* worktree-collapsed, home-collapsed). */
|
|
387
|
-
function groupByParentDir(paths, cwd) {
|
|
388
|
-
const groups = new Map();
|
|
389
|
-
for (const p of paths) {
|
|
390
|
-
const rel = displayPath(p, cwd);
|
|
391
|
-
const slashIdx = rel.lastIndexOf('/');
|
|
392
|
-
const dir = slashIdx >= 0 ? rel.slice(0, slashIdx) : '.';
|
|
393
|
-
const base = slashIdx >= 0 ? rel.slice(slashIdx + 1) : rel;
|
|
394
|
-
const arr = groups.get(dir) ?? [];
|
|
395
|
-
arr.push(base);
|
|
396
|
-
groups.set(dir, arr);
|
|
397
|
-
}
|
|
398
|
-
return new Map(Array.from(groups.entries()).sort((a, b) => b[1].length - a[1].length));
|
|
399
|
-
}
|
|
400
|
-
/** Render grouped file paths as indented, clickable terminal lines. */
|
|
401
|
-
function renderFileGroup(lines, groups, absPathMap) {
|
|
402
|
-
if (groups.size === 1) {
|
|
403
|
-
const [dir, files] = Array.from(groups.entries())[0];
|
|
404
|
-
for (const f of files) {
|
|
405
|
-
const abs = absPathMap.get(dir === '.' ? f : `${dir}/${f}`) ?? '';
|
|
406
|
-
const label = dir === '.' ? f : `${dir}/${f}`;
|
|
407
|
-
lines.push(' ' + chalk.cyan(abs ? linkPath(abs, label) : label));
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
for (const [dir, files] of groups) {
|
|
412
|
-
lines.push(` ${chalk.dim(dir + '/')}`);
|
|
413
|
-
for (const f of files) {
|
|
414
|
-
const abs = absPathMap.get(dir === '.' ? f : `${dir}/${f}`) ?? '';
|
|
415
|
-
const label = f;
|
|
416
|
-
lines.push(' ' + chalk.cyan(abs ? linkPath(abs, label) : label));
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
// ── Recent activity renderer ──────────────────────────────────────────────────
|
|
422
|
-
/** Render a single Recent Activity line as `<kind-tag> <label>`, colored by kind. */
|
|
423
|
-
function renderActivityLine(item) {
|
|
424
|
-
const MAX = 90;
|
|
425
|
-
const trim = (s) => (s.length <= MAX ? s : s.slice(0, MAX - 1) + '…');
|
|
426
|
-
switch (item.kind) {
|
|
427
|
-
case 'edit': {
|
|
428
|
-
const linked = item.absPath ? linkPath(item.absPath, item.label) : item.label;
|
|
429
|
-
return chalk.cyan('Edit ') + ' ' + linked;
|
|
430
|
-
}
|
|
431
|
-
case 'cmd':
|
|
432
|
-
return chalk.yellow('Bash ') + ' ' + chalk.gray(trim(item.label));
|
|
433
|
-
case 'agent':
|
|
434
|
-
return chalk.magenta('Agent') + ' ' + trim(item.label);
|
|
435
|
-
case 'error':
|
|
436
|
-
return chalk.red('Error') + ' ' + chalk.gray(trim(item.label));
|
|
437
|
-
case 'msg':
|
|
438
|
-
return chalk.green('Msg ') + ' ' + chalk.gray('"' + trim(item.label) + '"');
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
// ── Catch-up digest sections ──────────────────────────────────────────────────
|
|
442
|
-
const OP_GLYPH = {
|
|
443
|
-
created: (s) => chalk.green(s),
|
|
444
|
-
modified: (s) => chalk.yellow(s),
|
|
445
|
-
deleted: (s) => chalk.red(s),
|
|
446
|
-
};
|
|
447
|
-
const OP_MARK = { created: '+', modified: '~', deleted: '−' };
|
|
448
|
-
/**
|
|
449
|
-
* Render the Changes section: files grouped by directory, each tagged with its
|
|
450
|
-
* create/modify/delete lifecycle, plus a `+N ~N −N` summary. Replaces the old
|
|
451
|
-
* flat "Modified" list. Returns true if anything was rendered.
|
|
452
|
-
*/
|
|
453
|
-
function renderChangesSection(lines, allChanges, cwd) {
|
|
454
|
-
// In-project changes only; edits outside cwd (e.g. /tmp) keep their own
|
|
455
|
-
// "External edits" section so they don't clutter the project's changeset.
|
|
456
|
-
const inCwd = (p) => !cwd || !p.startsWith('/') || p.startsWith(cwd + '/');
|
|
457
|
-
const changes = allChanges.filter(ch => inCwd(ch.path));
|
|
458
|
-
if (changes.length === 0)
|
|
459
|
-
return false;
|
|
460
|
-
const c = changeCounts(changes);
|
|
461
|
-
const opByRel = new Map();
|
|
462
|
-
for (const ch of changes)
|
|
463
|
-
opByRel.set(displayPath(ch.path, cwd), ch.op);
|
|
464
|
-
const summary = [
|
|
465
|
-
c.created ? chalk.green(`+${c.created}`) : '',
|
|
466
|
-
c.modified ? chalk.yellow(`~${c.modified}`) : '',
|
|
467
|
-
c.deleted ? chalk.red(`−${c.deleted}`) : '',
|
|
468
|
-
].filter(Boolean).join(' ');
|
|
469
|
-
lines.push(chalk.bold('Changes') + chalk.gray(` (${changes.length}) `) + summary);
|
|
470
|
-
const groups = groupByParentDir(changes.map(ch => ch.path), cwd);
|
|
471
|
-
const single = groups.size === 1;
|
|
472
|
-
for (const [dir, files] of groups) {
|
|
473
|
-
// Single dir: show the full relative path per file (dir/base). Multiple
|
|
474
|
-
// dirs: a dir header, then bare filenames under it.
|
|
475
|
-
if (!single)
|
|
476
|
-
lines.push(' ' + chalk.dim(dir + '/'));
|
|
477
|
-
for (const f of files.sort()) {
|
|
478
|
-
const rel = dir === '.' ? f : `${dir}/${f}`;
|
|
479
|
-
const op = opByRel.get(rel) ?? 'modified';
|
|
480
|
-
const shown = single ? rel : f;
|
|
481
|
-
const name = op === 'deleted' ? chalk.strikethrough(chalk.gray(shown)) : shown;
|
|
482
|
-
lines.push((single ? ' ' : ' ') + OP_GLYPH[op](OP_MARK[op]) + ' ' + name);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
lines.push('');
|
|
486
|
-
return true;
|
|
487
|
-
}
|
|
488
|
-
/** Render the tool histogram: `Edit 61 · Bash 48 · Read 35 …`. */
|
|
489
|
-
function renderToolsSection(lines, stats) {
|
|
490
|
-
const hist = toolHistogram(stats.toolCounts, 8);
|
|
491
|
-
if (hist.length === 0)
|
|
492
|
-
return;
|
|
493
|
-
const parts = hist.map(h => `${chalk.white(h.tool)} ${chalk.gray(String(h.count))}`);
|
|
494
|
-
lines.push(chalk.bold('Tools') + ' ' + parts.join(chalk.gray(' · ')));
|
|
495
|
-
lines.push('');
|
|
496
|
-
}
|
|
497
|
-
/** Render the last test/build verdict, e.g. `Tests tests: 294 pass · 4 fail`. */
|
|
498
|
-
function renderTestsLine(lines, events) {
|
|
499
|
-
const r = detectTestResult(events);
|
|
500
|
-
if (!r || !r.ok)
|
|
501
|
-
return;
|
|
502
|
-
const bits = [];
|
|
503
|
-
if (r.passed !== undefined)
|
|
504
|
-
bits.push(chalk.green(`${r.passed} pass`));
|
|
505
|
-
if (r.failed !== undefined)
|
|
506
|
-
bits.push(r.failed > 0 ? chalk.red(`${r.failed} fail`) : chalk.gray('0 fail'));
|
|
507
|
-
const verdict = r.failed && r.failed > 0 ? chalk.red('✗') : chalk.green('✓');
|
|
508
|
-
lines.push(chalk.bold('Tests') + ` ${verdict} ${chalk.cyan(r.runner)} ${bits.join(chalk.gray(' · '))}`);
|
|
509
|
-
lines.push('');
|
|
510
|
-
}
|
|
511
|
-
// ── Main summary renderer ─────────────────────────────────────────────────────
|
|
512
|
-
/**
|
|
513
|
-
* Render session as an activity summary.
|
|
514
|
-
* Returns a chalk-formatted string (not markdown) for direct terminal output.
|
|
515
|
-
*/
|
|
516
|
-
export function renderSummary(events, cwd) {
|
|
517
|
-
// ── Collect data in a single chronological pass ───────────────────────────
|
|
518
|
-
let firstUserMessage = '';
|
|
519
|
-
const attachments = [];
|
|
520
|
-
let lastAssistantMessage = '';
|
|
521
|
-
// File paths (absolute) for grouping — split by whether they're inside cwd
|
|
522
|
-
const filesModifiedAbs = new Set();
|
|
523
|
-
const filesReadAbs = new Set();
|
|
524
|
-
const filesModifiedExternal = new Set();
|
|
525
|
-
// Commands with timestamps
|
|
526
|
-
const cmdList = [];
|
|
527
|
-
// Plan items (checklist entries keep their status for [x]/[>]/[ ] markers)
|
|
528
|
-
const todoItems = extractTodoProgressFromEvents(events)?.items ?? [];
|
|
529
|
-
let exitPlanContent = null;
|
|
530
|
-
let planFilePath = null;
|
|
531
|
-
// Subagent spawns
|
|
532
|
-
const subagents = [];
|
|
533
|
-
// Errors
|
|
534
|
-
const errors = [];
|
|
535
|
-
const recentActivity = [];
|
|
536
|
-
// Assistant message count (used to decide whether the session produced any narration)
|
|
537
|
-
let assistantCount = 0;
|
|
538
|
-
const isInsideCwd = (p) => !!(cwd && p.startsWith(cwd + '/'));
|
|
539
|
-
for (const event of events) {
|
|
540
|
-
const ts = new Date(event.timestamp).getTime() || 0;
|
|
541
|
-
if (event.type === 'tool_use') {
|
|
542
|
-
if (event._local)
|
|
543
|
-
continue;
|
|
544
|
-
const tool = event.tool || '';
|
|
545
|
-
const args = event.args || {};
|
|
546
|
-
const p = event.path || args.file_path || args.path || '';
|
|
547
|
-
if (['Read', 'read_file', 'view_file', 'cat_file', 'get_file'].includes(tool)) {
|
|
548
|
-
if (p)
|
|
549
|
-
filesReadAbs.add(p);
|
|
550
|
-
}
|
|
551
|
-
else if (['Write', 'Edit', 'Create', 'write_file', 'edit_file', 'create_file', 'replace', 'patch'].includes(tool)) {
|
|
552
|
-
if (p) {
|
|
553
|
-
if (p.includes('.claude/plans/') && p.endsWith('.md')) {
|
|
554
|
-
planFilePath = p;
|
|
555
|
-
}
|
|
556
|
-
else {
|
|
557
|
-
(isInsideCwd(p) || !cwd ? filesModifiedAbs : filesModifiedExternal).add(p);
|
|
558
|
-
recentActivity.push({ kind: 'edit', label: displayPath(p, cwd), ts, absPath: p });
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
if (event.command) {
|
|
563
|
-
const cmd = event.command.replace(/\n/g, ' ').trim();
|
|
564
|
-
if (cmd) {
|
|
565
|
-
cmdList.push({ cmd, ts });
|
|
566
|
-
recentActivity.push({ kind: 'cmd', label: cmd, ts });
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
if (tool === 'ExitPlanMode') {
|
|
570
|
-
exitPlanContent = args.result || args.plan || args.content || null;
|
|
571
|
-
}
|
|
572
|
-
// Subagent spawns
|
|
573
|
-
if ((tool === 'Agent' || tool === 'Task') && (args.description || args.prompt)) {
|
|
574
|
-
const description = String(args.description || args.prompt || '').slice(0, 120);
|
|
575
|
-
const subagentType = String(args.subagent_type || '');
|
|
576
|
-
subagents.push({ description, subagentType });
|
|
577
|
-
const typeSuffix = subagentType ? ` (${subagentType})` : '';
|
|
578
|
-
recentActivity.push({ kind: 'agent', label: description + typeSuffix, ts });
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
else if (event.type === 'error') {
|
|
582
|
-
const err = {
|
|
583
|
-
tool: event.tool || 'unknown',
|
|
584
|
-
cmd: event.args?.command ? String(event.args.command).slice(0, 80) : undefined,
|
|
585
|
-
content: event.content?.slice(0, 120),
|
|
586
|
-
};
|
|
587
|
-
errors.push(err);
|
|
588
|
-
const errLabel = err.cmd
|
|
589
|
-
? `${err.tool} "${err.cmd.slice(0, 60)}"`
|
|
590
|
-
: err.content
|
|
591
|
-
? `${err.tool}: ${err.content.slice(0, 60)}`
|
|
592
|
-
: err.tool;
|
|
593
|
-
recentActivity.push({ kind: 'error', label: errLabel, ts });
|
|
594
|
-
}
|
|
595
|
-
else if (event.type === 'message') {
|
|
596
|
-
if (event.role === 'user') {
|
|
597
|
-
if (!firstUserMessage) {
|
|
598
|
-
const content = event.content || '';
|
|
599
|
-
if (!/^\s*<local-command-caveat>/i.test(content)) {
|
|
600
|
-
const topic = extractSessionTopic(content);
|
|
601
|
-
if (topic)
|
|
602
|
-
firstUserMessage = content;
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
else if (event.role === 'assistant' && event.content) {
|
|
607
|
-
lastAssistantMessage = event.content;
|
|
608
|
-
assistantCount++;
|
|
609
|
-
const preview = event.content.replace(/\s+/g, ' ').trim().slice(0, 100);
|
|
610
|
-
if (preview)
|
|
611
|
-
recentActivity.push({ kind: 'msg', label: preview, ts });
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
else if (event.type === 'attachment') {
|
|
615
|
-
attachments.push({ mediaType: event.mediaType || 'image/png' });
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
// Dedupe: files in Modified should not appear in Read
|
|
619
|
-
for (const p of filesModifiedAbs)
|
|
620
|
-
filesReadAbs.delete(p);
|
|
621
|
-
for (const p of filesModifiedExternal)
|
|
622
|
-
filesReadAbs.delete(p);
|
|
623
|
-
// Build abs→display mapping for linkPath
|
|
624
|
-
const buildAbsMap = (absSet) => {
|
|
625
|
-
const m = new Map();
|
|
626
|
-
for (const abs of absSet) {
|
|
627
|
-
const rel = displayPath(abs, cwd);
|
|
628
|
-
m.set(rel, abs);
|
|
629
|
-
}
|
|
630
|
-
return m;
|
|
631
|
-
};
|
|
632
|
-
const readAbsMap = buildAbsMap(filesReadAbs);
|
|
633
|
-
// ── Render sections ───────────────────────────────────────────────────────
|
|
634
|
-
const lines = [''];
|
|
635
|
-
// 1. Prompt
|
|
636
|
-
if (firstUserMessage) {
|
|
637
|
-
const cleaned = cleanSessionPrompt(firstUserMessage);
|
|
638
|
-
// Show the classified prompt (a screenshot path folds to `[image]`, a
|
|
639
|
-
// pasted `$ cmd` to the command, a skill install path to `/<name>`) so the
|
|
640
|
-
// recap's first line is intent, never path noise (RUSH-3011).
|
|
641
|
-
const { clean } = classifyUserPrompt(firstUserMessage, { hasImageAttachment: attachments.length > 0 });
|
|
642
|
-
if (clean || cleaned) {
|
|
643
|
-
lines.push(chalk.bold('Prompt:') + ' ' + (clean || cleaned.split('\n')[0]));
|
|
644
|
-
const secondLine = cleaned.split('\n')[1]?.trim();
|
|
645
|
-
if (secondLine)
|
|
646
|
-
lines.push(' ' + secondLine);
|
|
647
|
-
const refs = extractReferences(cleaned);
|
|
648
|
-
if (refs.length > 0) {
|
|
649
|
-
lines.push(chalk.gray(' Referenced: ' + refs.join(', ')));
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
// Attachments (images/documents in the first user turn)
|
|
654
|
-
if (attachments.length > 0) {
|
|
655
|
-
const mediaTypes = [...new Set(attachments.map(a => a.mediaType))].join(', ');
|
|
656
|
-
lines.push(chalk.gray(` + ${attachments.length} screenshot${attachments.length !== 1 ? 's' : ''} (${mediaTypes})`));
|
|
657
|
-
}
|
|
658
|
-
if (firstUserMessage || attachments.length > 0)
|
|
659
|
-
lines.push('');
|
|
660
|
-
// 2. Recent Activity (first content section — chronological tail of the
|
|
661
|
-
// session so the top of the recap reflects what happened most recently).
|
|
662
|
-
if (recentActivity.length > 0) {
|
|
663
|
-
const RECENT_LIMIT = 7;
|
|
664
|
-
const tail = recentActivity.slice(-RECENT_LIMIT);
|
|
665
|
-
lines.push(chalk.bold('Recent Activity') + chalk.gray(` (last ${tail.length} of ${recentActivity.length})`));
|
|
666
|
-
for (const item of tail) {
|
|
667
|
-
lines.push(' ' + renderActivityLine(item));
|
|
668
|
-
}
|
|
669
|
-
lines.push('');
|
|
670
|
-
}
|
|
671
|
-
// 3. Plan — the plan document (ExitPlanMode text / plan file) AND the live
|
|
672
|
-
// checklist. Both render: the checklist used to be hidden whenever plan text
|
|
673
|
-
// existed, which read as "this session had no todos".
|
|
674
|
-
if (todoItems.length > 0 || exitPlanContent || planFilePath) {
|
|
675
|
-
lines.push(chalk.bold('Plan'));
|
|
676
|
-
if (planFilePath) {
|
|
677
|
-
const home = process.env.HOME ?? '';
|
|
678
|
-
const planPathDisplay = home && planFilePath.startsWith(home) ? planFilePath.replace(home, '~') : planFilePath;
|
|
679
|
-
lines.push(' ' + chalk.cyan(planPathDisplay));
|
|
680
|
-
}
|
|
681
|
-
if (exitPlanContent) {
|
|
682
|
-
const planLines = exitPlanContent.split('\n').slice(0, 10);
|
|
683
|
-
for (const l of planLines)
|
|
684
|
-
lines.push(' ' + l);
|
|
685
|
-
}
|
|
686
|
-
if (todoItems.length > 0) {
|
|
687
|
-
for (const item of todoItems.slice(0, 20)) {
|
|
688
|
-
lines.push(' ' + renderTodoMarker(item));
|
|
689
|
-
}
|
|
690
|
-
if (todoItems.length > 20) {
|
|
691
|
-
lines.push(' ' + chalk.gray(`… (${todoItems.length - 20} more)`));
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
lines.push('');
|
|
695
|
-
}
|
|
696
|
-
// 4. Subagents (describe attempts — grouped with Plan and Errors above the
|
|
697
|
-
// file/command deltas because they speak to *what was tried*, not the final state).
|
|
698
|
-
if (subagents.length > 0) {
|
|
699
|
-
lines.push(chalk.bold('Subagents') + chalk.gray(` (${subagents.length})`));
|
|
700
|
-
for (const s of subagents) {
|
|
701
|
-
const typeSuffix = s.subagentType ? chalk.gray(` (${s.subagentType})`) : '';
|
|
702
|
-
lines.push(' Task: ' + s.description + typeSuffix);
|
|
703
|
-
}
|
|
704
|
-
lines.push('');
|
|
705
|
-
}
|
|
706
|
-
// 4b. Highlights — what the session USED (skills, hooks) and the references
|
|
707
|
-
// it mentioned (links). Shared extraction with the picker preview so the two
|
|
708
|
-
// renders never disagree.
|
|
709
|
-
const skills = extractSkills(events);
|
|
710
|
-
if (skills.length > 0) {
|
|
711
|
-
const shown = skills.map(s => chalk.white(s.name) + (s.count > 1 ? chalk.gray(` ×${s.count}`) : ''));
|
|
712
|
-
lines.push(chalk.bold('Skills') + chalk.gray(` (${skills.length})`) + ' ' + shown.join(chalk.gray(' · ')));
|
|
713
|
-
lines.push('');
|
|
714
|
-
}
|
|
715
|
-
const hooks = extractHooks(events);
|
|
716
|
-
if (hooks.length > 0) {
|
|
717
|
-
const shown = hooks.map(h => chalk.white(h.name) + (h.count > 1 ? chalk.gray(` ×${h.count}`) : '') + (h.failed ? chalk.red(` (${h.failed} failed)`) : ''));
|
|
718
|
-
lines.push(chalk.bold('Hooks') + chalk.gray(` (${hooks.length})`) + ' ' + shown.join(chalk.gray(' · ')));
|
|
719
|
-
lines.push('');
|
|
720
|
-
}
|
|
721
|
-
const links = extractLinks(events);
|
|
722
|
-
if (links.length > 0) {
|
|
723
|
-
// Width-capped like the picker's Dirs line: a link-heavy session must not
|
|
724
|
-
// wrap the summary pane.
|
|
725
|
-
const shown = links.slice(0, 6).map(l => chalk.blue(linkUrl(l.url, l.label)));
|
|
726
|
-
const more = links.length > 6 ? chalk.gray(` · +${links.length - 6} more`) : '';
|
|
727
|
-
lines.push(chalk.bold('Links') + chalk.gray(` (${links.length})`) + ' ' + shown.join(chalk.gray(' · ')) + more);
|
|
728
|
-
lines.push('');
|
|
729
|
-
}
|
|
730
|
-
// 5. Errors (moved up from the bottom: it describes failed attempts, not the
|
|
731
|
-
// session's final state. Sitting at the bottom previously made early errors
|
|
732
|
-
// look recent, which confused readers.)
|
|
733
|
-
if (errors.length > 0) {
|
|
734
|
-
const first = errors[0];
|
|
735
|
-
const firstDesc = first.cmd
|
|
736
|
-
? `${first.tool} "${first.cmd.slice(0, 60)}"`
|
|
737
|
-
: first.content
|
|
738
|
-
? `${first.tool}: ${first.content.slice(0, 60)}`
|
|
739
|
-
: first.tool;
|
|
740
|
-
lines.push(chalk.red(chalk.bold('Errors')) +
|
|
741
|
-
chalk.gray(`: ${errors.length} failure${errors.length !== 1 ? 's' : ''} — first: ${firstDesc}`));
|
|
742
|
-
lines.push('');
|
|
743
|
-
}
|
|
744
|
-
// 6. Changes — files grouped by directory with create/modify/delete lifecycle
|
|
745
|
-
// (replaces the old flat "Modified" + "External edits" lists). Classified
|
|
746
|
-
// once here and shared with the Artifacts section below.
|
|
747
|
-
const allChanges = classifyFileChanges(events);
|
|
748
|
-
renderChangesSection(lines, allChanges, cwd);
|
|
749
|
-
// 6a. Artifacts — documents the session PRODUCED (`.agents/artifacts|plans|
|
|
750
|
-
// reports`, other *.md/*.html creations), named and clickable. These drown in
|
|
751
|
-
// the Changeset's source churn, so they get their own section.
|
|
752
|
-
const artifacts = extractArtifacts(allChanges);
|
|
753
|
-
if (artifacts.length > 0) {
|
|
754
|
-
lines.push(chalk.bold('Artifacts') + chalk.gray(` (${artifacts.length})`));
|
|
755
|
-
for (const a of artifacts) {
|
|
756
|
-
const tag = a.bucket === 'docs' ? '' : chalk.gray(` (${a.bucket})`);
|
|
757
|
-
lines.push(' ' + chalk.green('+') + ' ' + chalk.cyan(linkPath(a.path, a.basename)) + tag);
|
|
758
|
-
}
|
|
759
|
-
lines.push('');
|
|
760
|
-
}
|
|
761
|
-
// 6b. Catch-up signals: last test/build verdict, then the tool histogram.
|
|
762
|
-
renderTestsLine(lines, events);
|
|
763
|
-
renderToolsSection(lines, computeSummaryStats(events));
|
|
764
|
-
// 6c. External edits (files edited outside the project root — typically /tmp).
|
|
765
|
-
// Filter out plan files (already shown in Plan section).
|
|
766
|
-
const externalNonPlan = [...filesModifiedExternal].filter(p => !(p.includes('.claude/plans/') && p.endsWith('.md')));
|
|
767
|
-
if (externalNonPlan.length > 0) {
|
|
768
|
-
const externalList = externalNonPlan.sort();
|
|
769
|
-
const home = process.env.HOME ?? '';
|
|
770
|
-
const display = externalList.slice(0, 3).map(p => home && p.startsWith(home) ? p.replace(home, '~') : p);
|
|
771
|
-
const more = externalList.length > 3 ? chalk.gray(` +${externalList.length - 3} more`) : '';
|
|
772
|
-
lines.push(chalk.gray(`External edits (${externalList.length}): ${display.join(', ')}${more}`));
|
|
773
|
-
lines.push('');
|
|
774
|
-
}
|
|
775
|
-
// 7. Read files
|
|
776
|
-
if (filesReadAbs.size > 0) {
|
|
777
|
-
if (filesReadAbs.size <= 5) {
|
|
778
|
-
lines.push(chalk.bold('Read') + chalk.gray(` (${filesReadAbs.size})`));
|
|
779
|
-
const groups = groupByParentDir(filesReadAbs, cwd);
|
|
780
|
-
renderFileGroup(lines, groups, readAbsMap);
|
|
781
|
-
}
|
|
782
|
-
else {
|
|
783
|
-
lines.push(chalk.bold('Read') + chalk.gray(` ${filesReadAbs.size} other files`));
|
|
784
|
-
}
|
|
785
|
-
lines.push('');
|
|
786
|
-
}
|
|
787
|
-
// 8. Commands
|
|
788
|
-
renderCommandsSection(cmdList, lines);
|
|
789
|
-
// 9. Final message
|
|
790
|
-
if (lastAssistantMessage) {
|
|
791
|
-
const hasActivity = filesModifiedAbs.size > 0 || filesReadAbs.size > 0 || cmdList.length > 0;
|
|
792
|
-
if (hasActivity || errors.length > 0)
|
|
793
|
-
lines.push(chalk.gray('─'.repeat(60)));
|
|
794
|
-
lines.push('');
|
|
795
|
-
const truncated = lastAssistantMessage.length > 3000
|
|
796
|
-
? lastAssistantMessage.slice(0, 2997) + '...'
|
|
797
|
-
: lastAssistantMessage;
|
|
798
|
-
lines.push(renderMarkdown(truncated).trimEnd());
|
|
799
|
-
lines.push('');
|
|
800
|
-
}
|
|
801
|
-
else if (filesModifiedAbs.size === 0 &&
|
|
802
|
-
filesReadAbs.size === 0 &&
|
|
803
|
-
cmdList.length === 0 &&
|
|
804
|
-
assistantCount === 0) {
|
|
805
|
-
lines.push(chalk.gray('No activity recorded in this session.'));
|
|
806
|
-
lines.push('');
|
|
807
|
-
}
|
|
808
|
-
return lines.join('\n');
|
|
809
|
-
}
|
|
810
|
-
// ── Event filters ─────────────────────────────────────────────────────────────
|
|
811
|
-
/** Allowed values for --include/--exclude role filters. */
|
|
812
|
-
const VALID_ROLE_VALUES = ['user', 'assistant', 'thinking', 'tools'];
|
|
813
|
-
/**
|
|
814
|
-
* Parse a comma-separated role list (e.g. "user,assistant") into typed values.
|
|
815
|
-
* Throws with a clear message listing valid values on any unknown entry.
|
|
816
|
-
*/
|
|
817
|
-
export function parseRoleList(raw, flag) {
|
|
818
|
-
const parts = raw.split(',').map(s => s.trim()).filter(Boolean);
|
|
819
|
-
if (parts.length === 0) {
|
|
820
|
-
throw new Error(`${flag} requires at least one role. Valid values: ${VALID_ROLE_VALUES.join(', ')}`);
|
|
821
|
-
}
|
|
822
|
-
for (const p of parts) {
|
|
823
|
-
if (!VALID_ROLE_VALUES.includes(p)) {
|
|
824
|
-
throw new Error(`Invalid value "${p}" for ${flag}. Valid values: ${VALID_ROLE_VALUES.join(', ')}`);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
return parts;
|
|
828
|
-
}
|
|
829
|
-
function roleOfEvent(e) {
|
|
830
|
-
// Synthetic scaffolding still maps to 'user' here so `--exclude user` drops it
|
|
831
|
-
// like any other user-role event (pre-flag behavior). `--include user`'s
|
|
832
|
-
// "genuine intent only" carve-out lives in applyRoleFilter, not here.
|
|
833
|
-
if (e.type === 'message' && e.role === 'user')
|
|
834
|
-
return 'user';
|
|
835
|
-
if (e.type === 'message' && e.role === 'assistant')
|
|
836
|
-
return 'assistant';
|
|
837
|
-
if (e.type === 'thinking')
|
|
838
|
-
return 'thinking';
|
|
839
|
-
if (e.type === 'tool_use' || e.type === 'tool_result')
|
|
840
|
-
return 'tools';
|
|
841
|
-
return null;
|
|
842
|
-
}
|
|
843
|
-
/**
|
|
844
|
-
* Keep events whose role is in `include` (whitelist) or whose role is not in
|
|
845
|
-
* `exclude` (blacklist). Non-role events (errors, usage, attachments, init,
|
|
846
|
-
* result) are preserved unless explicitly constrained by `include` — that
|
|
847
|
-
* matches the user model: "include user" means "only user".
|
|
848
|
-
*/
|
|
849
|
-
function applyRoleFilter(events, opts) {
|
|
850
|
-
if (opts.include && opts.include.length > 0) {
|
|
851
|
-
const set = new Set(opts.include);
|
|
852
|
-
return events.filter(e => {
|
|
853
|
-
const role = roleOfEvent(e);
|
|
854
|
-
if (role === null)
|
|
855
|
-
return false;
|
|
856
|
-
// `--include user` means genuine user intent, so drop harness-injected
|
|
857
|
-
// `_synthetic` scaffolding (bash-input, system-reminder) even though it
|
|
858
|
-
// carries role=user. `--exclude user` still drops it via roleOfEvent.
|
|
859
|
-
if (role === 'user' && e._synthetic)
|
|
860
|
-
return false;
|
|
861
|
-
return set.has(role);
|
|
862
|
-
});
|
|
863
|
-
}
|
|
864
|
-
if (opts.exclude && opts.exclude.length > 0) {
|
|
865
|
-
const set = new Set(opts.exclude);
|
|
866
|
-
return events.filter(e => {
|
|
867
|
-
const role = roleOfEvent(e);
|
|
868
|
-
return role === null || !set.has(role);
|
|
869
|
-
});
|
|
870
|
-
}
|
|
871
|
-
return events;
|
|
872
|
-
}
|
|
873
|
-
/**
|
|
874
|
-
* A "turn" starts at each user message. `--first N` keeps events through the
|
|
875
|
-
* end of the Nth user turn; `--last N` keeps events from the start of the
|
|
876
|
-
* (M-N+1)th user turn to the end. If the session has no user messages, every
|
|
877
|
-
* assistant message counts as a turn instead.
|
|
878
|
-
*/
|
|
879
|
-
function applyTurnSlice(events, opts) {
|
|
880
|
-
if (opts.first === undefined && opts.last === undefined)
|
|
881
|
-
return events;
|
|
882
|
-
if (opts.first !== undefined && opts.last !== undefined) {
|
|
883
|
-
throw new Error('--first and --last are mutually exclusive');
|
|
884
|
-
}
|
|
885
|
-
const n = (opts.first ?? opts.last);
|
|
886
|
-
if (!Number.isFinite(n) || n <= 0) {
|
|
887
|
-
throw new Error(`Turn count must be a positive integer, got ${n}`);
|
|
888
|
-
}
|
|
889
|
-
// A turn starts at a GENUINE user message — harness-injected `_synthetic`
|
|
890
|
-
// scaffolding (`<bash-input>`/`<bash-stdout>`, etc.) does not start a turn,
|
|
891
|
-
// so `--first N` / `--last N` count real asks, not the jump command that
|
|
892
|
-
// opened the session and its shell output.
|
|
893
|
-
const isTurnStart = (e) => e.type === 'message' && e.role === 'user' && !e._synthetic;
|
|
894
|
-
const turnStartIdx = [];
|
|
895
|
-
for (let i = 0; i < events.length; i++)
|
|
896
|
-
if (isTurnStart(events[i]))
|
|
897
|
-
turnStartIdx.push(i);
|
|
898
|
-
// Fallback: no user messages — treat assistant messages as turn boundaries.
|
|
899
|
-
if (turnStartIdx.length === 0) {
|
|
900
|
-
for (let i = 0; i < events.length; i++) {
|
|
901
|
-
if (events[i].type === 'message' && events[i].role === 'assistant')
|
|
902
|
-
turnStartIdx.push(i);
|
|
903
|
-
}
|
|
904
|
-
}
|
|
905
|
-
if (turnStartIdx.length === 0)
|
|
906
|
-
return events;
|
|
907
|
-
if (opts.first !== undefined) {
|
|
908
|
-
if (n >= turnStartIdx.length)
|
|
909
|
-
return events;
|
|
910
|
-
const endIdx = turnStartIdx[n]; // exclusive
|
|
911
|
-
return events.slice(0, endIdx);
|
|
912
|
-
}
|
|
913
|
-
// --last
|
|
914
|
-
if (n >= turnStartIdx.length)
|
|
915
|
-
return events;
|
|
916
|
-
const startIdx = turnStartIdx[turnStartIdx.length - n];
|
|
917
|
-
return events.slice(startIdx);
|
|
918
|
-
}
|
|
919
|
-
/**
|
|
920
|
-
* Apply include/exclude/first/last. Turn slicing runs first so role filters
|
|
921
|
-
* operate on the sliced window (natural semantics: "last 3 turns, user only").
|
|
922
|
-
*/
|
|
923
|
-
export function filterEvents(events, opts) {
|
|
924
|
-
if (opts.include && opts.include.length > 0 && opts.exclude && opts.exclude.length > 0) {
|
|
925
|
-
throw new Error('--include and --exclude are mutually exclusive');
|
|
926
|
-
}
|
|
927
|
-
const sliced = applyTurnSlice(events, opts);
|
|
928
|
-
return applyRoleFilter(sliced, opts);
|
|
929
|
-
}
|
|
930
|
-
function markdownFence(content, language = '') {
|
|
931
|
-
const fence = content.includes('```') ? '````' : '```';
|
|
932
|
-
return `${fence}${language}\n${content}\n${fence}`;
|
|
933
|
-
}
|
|
934
|
-
function truncateToolOutput(content, maxChars) {
|
|
935
|
-
if (content.length <= maxChars)
|
|
936
|
-
return content;
|
|
937
|
-
return `${content.slice(0, maxChars)}\n\n[Output truncated: ${content.length - maxChars} characters omitted.]`;
|
|
938
|
-
}
|
|
939
|
-
export function renderConversationMarkdown(events, opts = {}) {
|
|
940
|
-
const parts = [];
|
|
941
|
-
const shouldRedact = opts.redact !== false;
|
|
942
|
-
const sanitize = (text) => shouldRedact ? redactSecrets(text, opts.knownSecrets) : text;
|
|
943
|
-
// Preserve the long-standing `sessions <id> --markdown` full-fidelity default.
|
|
944
|
-
// The shareable `sessions render` surface passes `omit` explicitly.
|
|
945
|
-
const reasoning = opts.reasoning ?? 'include';
|
|
946
|
-
const maxToolOutputChars = opts.maxToolOutputChars ?? 4000;
|
|
947
|
-
for (const event of events) {
|
|
948
|
-
if (event.type === 'message') {
|
|
949
|
-
if (event.role === 'user') {
|
|
950
|
-
parts.push(`## User\n\n${sanitize(event.content ?? '')}`);
|
|
951
|
-
}
|
|
952
|
-
else if (event.role === 'assistant') {
|
|
953
|
-
parts.push(`## Assistant\n\n${sanitize(event.content ?? '')}`);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
else if (event.type === 'thinking') {
|
|
957
|
-
if (event.content && reasoning === 'include') {
|
|
958
|
-
parts.push(`### Reasoning\n\n${sanitize(event.content)}`);
|
|
959
|
-
}
|
|
960
|
-
else if (event.content && reasoning === 'fold') {
|
|
961
|
-
parts.push(`<details>\n<summary>Reasoning</summary>\n\n${sanitize(event.content)}\n\n</details>`);
|
|
962
|
-
}
|
|
963
|
-
}
|
|
964
|
-
else if (event.type === 'tool_use') {
|
|
965
|
-
const tool = event.tool || 'unknown';
|
|
966
|
-
if (event.command) {
|
|
967
|
-
const args = event.args && Object.keys(event.args).length > 0
|
|
968
|
-
? `\n\nArguments:\n\n${markdownFence(sanitize(JSON.stringify(event.args, null, 2)), 'json')}`
|
|
969
|
-
: '';
|
|
970
|
-
parts.push(`### Tool: ${tool}\n\n${markdownFence(sanitize(event.command), 'bash')}${args}`);
|
|
971
|
-
}
|
|
972
|
-
else if (event.args && Object.keys(event.args).length > 0) {
|
|
973
|
-
parts.push(`### Tool: ${tool}\n\nArguments:\n\n${markdownFence(sanitize(JSON.stringify(event.args, null, 2)), 'json')}`);
|
|
974
|
-
}
|
|
975
|
-
else if (event.path) {
|
|
976
|
-
parts.push(`### Tool: ${tool}\n\n\`${sanitize(shortenPathTrace(event.path))}\``);
|
|
977
|
-
}
|
|
978
|
-
else {
|
|
979
|
-
const summary = summarizeToolUse(tool, event.args);
|
|
980
|
-
parts.push(`### Tool: ${tool}\n\n${sanitize(summary)}`);
|
|
981
|
-
}
|
|
982
|
-
}
|
|
983
|
-
else if (event.type === 'tool_result') {
|
|
984
|
-
const output = event.content || event.output;
|
|
985
|
-
if (output) {
|
|
986
|
-
const body = sanitize(truncateToolOutput(output, maxToolOutputChars));
|
|
987
|
-
parts.push(`### Tool Result${event.tool ? `: ${event.tool}` : ''}\n\n${markdownFence(body)}`);
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
else if (event.type === 'error') {
|
|
991
|
-
parts.push(`### Error\n\n${event.content ? sanitize(event.content) : (event.tool || 'Unknown error')}`);
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
return parts.join('\n\n');
|
|
995
|
-
}
|
|
996
|
-
/**
|
|
997
|
-
* Deep-redact every string reachable from a JSON value, preserving structure.
|
|
998
|
-
* `redactSecrets` only rewrites secret-shaped substrings, so non-secret strings
|
|
999
|
-
* (paths, URLs, ids) and non-strings (numbers, booleans) pass through unchanged.
|
|
1000
|
-
* Applied to the whole `--json` payload so every free-text field — event
|
|
1001
|
-
* `content`/`command`/`output`/`args`, and meta `topic`/`label`/`plan`/`todos`
|
|
1002
|
-
* — is covered, including fields added later.
|
|
1003
|
-
*/
|
|
1004
|
-
function redactDeep(value, sanitize) {
|
|
1005
|
-
if (typeof value === 'string')
|
|
1006
|
-
return sanitize(value);
|
|
1007
|
-
if (Array.isArray(value))
|
|
1008
|
-
return value.map((item) => redactDeep(item, sanitize));
|
|
1009
|
-
if (value && typeof value === 'object') {
|
|
1010
|
-
const out = {};
|
|
1011
|
-
for (const [key, val] of Object.entries(value))
|
|
1012
|
-
out[key] = redactDeep(val, sanitize);
|
|
1013
|
-
return out;
|
|
1014
|
-
}
|
|
1015
|
-
return value;
|
|
1016
|
-
}
|
|
1017
|
-
/**
|
|
1018
|
-
* Render one session's JSON output — the shape `agents sessions <id> --json`
|
|
1019
|
-
* emits. When `meta` is provided (the standard path), returns a
|
|
1020
|
-
* `{ session, events }` wrapper so top-level fields (`plan`, `prUrl`, …) that
|
|
1021
|
-
* live on `SessionMeta` are visible without re-parsing events. Legacy
|
|
1022
|
-
* callers that pass no meta still get a bare `SessionEvent[]` array.
|
|
1023
|
-
*
|
|
1024
|
-
* Secrets are redacted by default (`opts.redact !== false`), matching
|
|
1025
|
-
* `renderConversationMarkdown` — the JSON path must not be the one output
|
|
1026
|
-
* format that leaks credentials. Redaction covers both events AND the session
|
|
1027
|
-
* meta (e.g. `topic`, a verbatim first-message excerpt). Pass `{ redact: false }`
|
|
1028
|
-
* for `--no-redact`.
|
|
1029
|
-
*/
|
|
1030
|
-
export function renderJson(events, meta, opts = {}) {
|
|
1031
|
-
const redact = opts.redact !== false;
|
|
1032
|
-
const sanitize = (text) => redactSecrets(text);
|
|
1033
|
-
const safeEvents = redact ? events.map((event) => redactDeep(event, sanitize)) : events;
|
|
1034
|
-
if (!meta)
|
|
1035
|
-
return JSON.stringify(safeEvents, null, 2);
|
|
1036
|
-
// Strip internal-only bookkeeping fields the listing --json path also strips.
|
|
1037
|
-
const { _matchedTerms, _bm25Score, _remote, ...rest } = meta;
|
|
1038
|
-
const session = redact ? redactDeep(rest, sanitize) : rest;
|
|
1039
|
-
return JSON.stringify({ session, events: safeEvents }, null, 2);
|
|
1040
|
-
}
|
|
1041
|
-
/** Replace the home directory prefix with ~ for trace display. */
|
|
1042
|
-
function shortenPathTrace(p) {
|
|
1043
|
-
const home = process.env.HOME || '';
|
|
1044
|
-
if (home && p.startsWith(home))
|
|
1045
|
-
return '~' + p.slice(home.length);
|
|
1046
|
-
return p;
|
|
1047
|
-
}
|