@north-light/crouter 0.3.318 → 0.3.320
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/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +6 -4
- package/runtime.lock.json +5 -5
- package/scripts/pack-minify.mjs +108 -0
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,905 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
export const CRTR_OUTPUT_CUSTOM_TYPE = 'crtr-output';
|
|
19
|
-
export function stripHeredocBodies(command) {
|
|
20
|
-
const lines = command.split('\n');
|
|
21
|
-
const out = [];
|
|
22
|
-
let i = 0;
|
|
23
|
-
while (i < lines.length) {
|
|
24
|
-
const line = lines[i];
|
|
25
|
-
out.push(line);
|
|
26
|
-
i++;
|
|
27
|
-
const delims = [];
|
|
28
|
-
HEREDOC_OPEN.lastIndex = 0;
|
|
29
|
-
let match;
|
|
30
|
-
while ((match = HEREDOC_OPEN.exec(line)) !== null)
|
|
31
|
-
delims.push(match[2]);
|
|
32
|
-
for (const delim of delims) {
|
|
33
|
-
while (i < lines.length) {
|
|
34
|
-
const probe = lines[i].replace(/^\t+/, '');
|
|
35
|
-
i++;
|
|
36
|
-
if (probe === delim)
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return out.join('\n');
|
|
42
|
-
}
|
|
43
|
-
export function isCrtrBashCommand(command) {
|
|
44
|
-
return typeof command === 'string' && CRTR_IN_COMMAND_POSITION.test(stripHeredocBodies(command));
|
|
45
|
-
}
|
|
46
|
-
/** Pull the crtr/crouter invocation's own argv tokens out of a full shell
|
|
47
|
-
* command string: drop everything before the matched binary token, then cut
|
|
48
|
-
* at the next shell-level terminator so a chained `&& echo done` or piped
|
|
49
|
-
* `| cat` doesn't leak into the "argv". Tokenized with quote-awareness (see
|
|
50
|
-
* tokenizeShellSegment) so a quoted argument that merely *contains* `-h` (a
|
|
51
|
-
* prompt string, a literal flag mentioned in prose) is one opaque token, not
|
|
52
|
-
* split into a bare `-h` — still not a real shell parse (no backslash escapes,
|
|
53
|
-
* no `$()`), but adequate for viewer-only chrome (worst case: a stale/empty
|
|
54
|
-
* lookup, never a wrong agent result). */
|
|
55
|
-
function extractCrtrInvocationTokens(command) {
|
|
56
|
-
const stripped = stripHeredocBodies(command);
|
|
57
|
-
const match = CRTR_IN_COMMAND_POSITION.exec(stripped);
|
|
58
|
-
if (match === null)
|
|
59
|
-
return undefined;
|
|
60
|
-
const tail = stripped.slice(match.index + match[0].length);
|
|
61
|
-
const stopAt = tail.search(/[\n;&|)]/);
|
|
62
|
-
const segment = (stopAt === -1 ? tail : tail.slice(0, stopAt)).trim();
|
|
63
|
-
return segment === '' ? [] : dropRedirectTail(tokenizeShellSegment(segment));
|
|
64
|
-
}
|
|
65
|
-
/** A crtr invocation's own argv never includes a shell redirect (`>`, `>>`,
|
|
66
|
-
* `<`, `<<`, with an optional leading fd digit and/or trailing `&fd`
|
|
67
|
-
* duplication, e.g. `2>&1`, `&>`, `1>`) — that's plumbing on the OUTER bash
|
|
68
|
-
* call, not part of crtr's own path/args. The terminator scan above already
|
|
69
|
-
* cuts the segment on a bare `&`, which coincidentally lands mid-redirect
|
|
70
|
-
* for something like `-h 2>&1` (segment becomes `-h 2>`, leaving a dangling
|
|
71
|
-
* `2>` token) — rather than special-case that scan, this drops the first
|
|
72
|
-
* token that STARTS WITH a redirect operator (and everything after it, since
|
|
73
|
-
* nothing past a redirect is ever crtr's own arg). Matching on the prefix
|
|
74
|
-
* (not the whole token) is what catches an operator glued to its target with
|
|
75
|
-
* no separating space, e.g. `2>/tmp/log` / `>/tmp/log` — bash treats those as
|
|
76
|
-
* operator+word regardless of spacing, but this whitespace tokenizer keeps
|
|
77
|
-
* them as one token, so a full-string match would miss them. */
|
|
78
|
-
const REDIRECT_TOKEN = /^(?:\d*|&)(?:>>|<<|>|<)/;
|
|
79
|
-
function dropRedirectTail(tokens) {
|
|
80
|
-
const redirectIdx = tokens.findIndex((t) => REDIRECT_TOKEN.test(t));
|
|
81
|
-
return redirectIdx === -1 ? tokens : tokens.slice(0, redirectIdx);
|
|
82
|
-
}
|
|
83
|
-
/** Split a shell command segment into tokens, treating a single- or
|
|
84
|
-
* double-quoted span as one opaque token (quote characters stripped, no
|
|
85
|
-
* escape handling) instead of letting whitespace inside it create extra
|
|
86
|
-
* tokens. This is what keeps `-h` embedded in a quoted prompt string (e.g.
|
|
87
|
-
* `node new "write about -h flags"`) from ever being mistaken for a real
|
|
88
|
-
* `-h` token by isCrtrHelpInvocation below. */
|
|
89
|
-
function tokenizeShellSegment(segment) {
|
|
90
|
-
const tokens = [];
|
|
91
|
-
let current = '';
|
|
92
|
-
let inToken = false;
|
|
93
|
-
let quote = null;
|
|
94
|
-
for (const ch of segment) {
|
|
95
|
-
if (quote !== null) {
|
|
96
|
-
if (ch === quote)
|
|
97
|
-
quote = null;
|
|
98
|
-
else
|
|
99
|
-
current += ch;
|
|
100
|
-
inToken = true;
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
if (ch === '"' || ch === "'") {
|
|
104
|
-
quote = ch;
|
|
105
|
-
inToken = true;
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
if (/\s/.test(ch)) {
|
|
109
|
-
if (inToken) {
|
|
110
|
-
tokens.push(current);
|
|
111
|
-
current = '';
|
|
112
|
-
inToken = false;
|
|
113
|
-
}
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
current += ch;
|
|
117
|
-
inToken = true;
|
|
118
|
-
}
|
|
119
|
-
if (inToken)
|
|
120
|
-
tokens.push(current);
|
|
121
|
-
return tokens;
|
|
122
|
-
}
|
|
123
|
-
/** True when a crtr bash invocation's OWN argv carries a bare -h/--help
|
|
124
|
-
* token — the dispatcher renders the leaf's schema, not a result, so it is
|
|
125
|
-
* never useful to preview like a normal command's output (see
|
|
126
|
-
* src/core/help.ts renderLeafArgv: schema text, not agent-facing result
|
|
127
|
-
* text). Checked against extractCrtrInvocationTokens' tokens (scoped to the
|
|
128
|
-
* crtr segment only, quote-aware), never the raw command string — a `-h`
|
|
129
|
-
* appearing before the crtr segment (`echo -h && crtr canvas snapshot`),
|
|
130
|
-
* after it (`crtr canvas snapshot && echo --help`), or inside a quoted
|
|
131
|
-
* argument (`crtr node new "write about -h flags"`) must never count. This is
|
|
132
|
-
* structural (every leaf's -h has the same shape), so it needs no per-leaf
|
|
133
|
-
* metadata — unlike suppressOutput below, which is command-owned. */
|
|
134
|
-
export function isCrtrHelpInvocation(command) {
|
|
135
|
-
if (typeof command !== 'string')
|
|
136
|
-
return false;
|
|
137
|
-
const tokens = extractCrtrInvocationTokens(command);
|
|
138
|
-
return tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
|
|
139
|
-
}
|
|
140
|
-
export function commandPreviewMeta(command) {
|
|
141
|
-
const tokens = extractCrtrInvocationTokens(command);
|
|
142
|
-
const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
|
|
143
|
-
return {
|
|
144
|
-
isHelp,
|
|
145
|
-
suppressOutput: tokens !== undefined && tokens.length > 0 && suppressOutputForPath(tokens),
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
function commandFromArgs(args) {
|
|
149
|
-
if (!args || typeof args !== 'object')
|
|
150
|
-
return '';
|
|
151
|
-
const command = args.command;
|
|
152
|
-
return typeof command === 'string' ? command : '';
|
|
153
|
-
}
|
|
154
|
-
const CRTR_FLAG_TOKEN = /^-{1,2}[A-Za-z0-9]/;
|
|
155
|
-
const CRTR_ATTACHED_FLAG_VALUE = /^(--?[A-Za-z0-9][^=]*)(=)(.*)$/;
|
|
156
|
-
const CRTR_NUMBER_VALUE = /^-?(?:\d+(?:\.\d+)?|\.\d+)$/;
|
|
157
|
-
// Memory routing
|
|
158
|
-
//
|
|
159
|
-
// `memory write` and `memory edit` decide who sees a document, when, and at what
|
|
160
|
-
// context cost. Folded, their argv is a wall of frontmatter flags that wraps over
|
|
161
|
-
// several rows, so the row states the routing itself instead: the scope the
|
|
162
|
-
// document landed in, its gate, its surface entries with the rung each delivers
|
|
163
|
-
// at, and its `when-and-why-to-read` line.
|
|
164
|
-
//
|
|
165
|
-
// The frontmatter flags are in the invocation's own argv — the same text the
|
|
166
|
-
// write copies verbatim into the document. `scope` is not a flag: the selector
|
|
167
|
-
// rules resolve it, and the leaf reports it in its RESULT. The result is
|
|
168
|
-
// reachable here because this definition observes every settled tool result
|
|
169
|
-
// (`observeResult`), which runs before a fold hides the result record.
|
|
170
|
-
const MEMORY_ROUTING_LEAVES = new Set(['memory write', 'memory edit']);
|
|
171
|
-
/** Every value the invocation passed for one flag, in either spelling
|
|
172
|
-
* (`--flag value`, `--flag=value`). A flag left without a value takes the next
|
|
173
|
-
* flag token as its own, so the separated spelling only claims a non-flag. */
|
|
174
|
-
function crtrFlagValues(tokens, flag) {
|
|
175
|
-
const attached = `--${flag}=`;
|
|
176
|
-
const values = [];
|
|
177
|
-
tokens.forEach((token, index) => {
|
|
178
|
-
if (token === `--${flag}`) {
|
|
179
|
-
const value = tokens[index + 1];
|
|
180
|
-
if (value !== undefined && !CRTR_FLAG_TOKEN.test(value))
|
|
181
|
-
values.push(value);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
if (token.startsWith(attached))
|
|
185
|
-
values.push(token.slice(attached.length));
|
|
186
|
-
});
|
|
187
|
-
return values;
|
|
188
|
-
}
|
|
189
|
-
function crtrFlagValue(tokens, flag) {
|
|
190
|
-
return crtrFlagValues(tokens, flag)[0];
|
|
191
|
-
}
|
|
192
|
-
function parsedYaml(raw) {
|
|
193
|
-
try {
|
|
194
|
-
return parseYaml(raw);
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
return undefined;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/** A predicate printed the way it is authored on the command line: one-line
|
|
201
|
-
* YAML flow. Anything that is not a field→matcher map is shown as typed. */
|
|
202
|
-
function predicateText(raw) {
|
|
203
|
-
const parsed = parsedYaml(raw);
|
|
204
|
-
return parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)
|
|
205
|
-
? raw.trim()
|
|
206
|
-
: stringifyYaml(parsed, { collectionStyle: 'flow', flowCollectionPadding: false, lineWidth: 0 }).trim();
|
|
207
|
-
}
|
|
208
|
-
function predicateValueText(value) {
|
|
209
|
-
return stringifyYaml(value, { collectionStyle: 'flow', flowCollectionPadding: false, lineWidth: 0 }).trim();
|
|
210
|
-
}
|
|
211
|
-
function stringField(record, field) {
|
|
212
|
-
const value = record?.[field];
|
|
213
|
-
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
214
|
-
}
|
|
215
|
-
/** The routing a `memory write`/`memory edit` invocation states, or undefined
|
|
216
|
-
* for every other leaf. The result record is authoritative where it speaks:
|
|
217
|
-
* it carries the scope the selector rules chose and the resolved canonical
|
|
218
|
-
* name, which composes the store's namespace onto the name that was passed. */
|
|
219
|
-
function memoryRouting(tokens, records) {
|
|
220
|
-
const leaf = tokens.slice(0, 2).join(' ');
|
|
221
|
-
if (!MEMORY_ROUTING_LEAVES.has(leaf))
|
|
222
|
-
return undefined;
|
|
223
|
-
const positional = tokens[2] !== undefined && !CRTR_FLAG_TOKEN.test(tokens[2]) ? tokens[2] : undefined;
|
|
224
|
-
// One bash call may run several crtr invocations; the row shows the first, so
|
|
225
|
-
// it reads the first record this leaf produced.
|
|
226
|
-
const result = records.find((record) => record.path === leaf)?.result;
|
|
227
|
-
const gate = crtrFlagValue(tokens, 'gate');
|
|
228
|
-
return {
|
|
229
|
-
leaf,
|
|
230
|
-
name: stringField(result, 'name') ?? positional ?? '',
|
|
231
|
-
scope: stringField(result, 'scope') ?? crtrFlagValue(tokens, 'scope'),
|
|
232
|
-
gate: gate === undefined ? undefined : predicateText(gate),
|
|
233
|
-
surfaces: parseSurfaces(crtrFlagValues(tokens, 'surface').map(parsedYaml)),
|
|
234
|
-
whenAndWhyToRead: crtrFlagValue(tokens, 'when-and-why-to-read'),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
/** How much of the document the entry delivers, toned by how much context it
|
|
238
|
-
* costs every agent it reaches. */
|
|
239
|
-
function rungTone(rung) {
|
|
240
|
-
return rung === 'content' ? 'warning' : rung === 'preview' ? 'accent' : 'muted';
|
|
241
|
-
}
|
|
242
|
-
/** One `surfaces` entry in its authored key order: the event, what it matches,
|
|
243
|
-
* the predicates that narrow it, and the rung it delivers at. */
|
|
244
|
-
function surfaceEntryText(entry, theme) {
|
|
245
|
-
const constraints = [entry.on];
|
|
246
|
-
if (entry.match !== undefined)
|
|
247
|
-
constraints.push(entry.match.join(' '));
|
|
248
|
-
if (entry.matchFrontmatter !== undefined)
|
|
249
|
-
constraints.push(`match-frontmatter ${predicateValueText(entry.matchFrontmatter)}`);
|
|
250
|
-
if (entry.gate !== undefined)
|
|
251
|
-
constraints.push(`gate ${predicateValueText(entry.gate)}`);
|
|
252
|
-
return `${theme.fg('text', constraints.join(' '))} ${theme.fg('dim', 'at')} ${theme.fg(rungTone(entry.at), entry.at)}`;
|
|
253
|
-
}
|
|
254
|
-
const ROUTING_INDENT = ' ';
|
|
255
|
-
/** The routing block under the folded call's header line: one line per field,
|
|
256
|
-
* in the order the substrate resolves them. A fact the invocation does not
|
|
257
|
-
* state is left out rather than shown as empty. */
|
|
258
|
-
function memoryRoutingFields(routing, theme) {
|
|
259
|
-
const label = (text) => theme.fg('dim', text);
|
|
260
|
-
const fields = [];
|
|
261
|
-
if (routing.scope !== undefined)
|
|
262
|
-
fields.push({ label: label('scope'), values: [theme.fg('text', routing.scope)] });
|
|
263
|
-
if (routing.gate !== undefined)
|
|
264
|
-
fields.push({ label: label('gate'), values: [theme.fg('text', routing.gate)] });
|
|
265
|
-
fields.push({
|
|
266
|
-
label: label('surface'),
|
|
267
|
-
values: routing.surfaces.length === 0
|
|
268
|
-
? [theme.fg('muted', 'none')]
|
|
269
|
-
: routing.surfaces.map((entry) => surfaceEntryText(entry, theme)),
|
|
270
|
-
});
|
|
271
|
-
if (routing.whenAndWhyToRead !== undefined) {
|
|
272
|
-
fields.push({ label: label('when-and-why-to-read'), values: [theme.fg('text', routing.whenAndWhyToRead)] });
|
|
273
|
-
}
|
|
274
|
-
return fields;
|
|
275
|
-
}
|
|
276
|
-
/** One field's rows: the label, then its values in a column of their own. Each
|
|
277
|
-
* value starts at that column — so a second surface entry reads as a sibling of
|
|
278
|
-
* the first — and a value too long for the pane wraps under it. A field that
|
|
279
|
-
* states SEVERAL values wraps one notch deeper still, which is what keeps a
|
|
280
|
-
* wrapped surface entry from reading as the next entry. */
|
|
281
|
-
function routingFieldLines(field, width) {
|
|
282
|
-
const head = `${ROUTING_INDENT}${field.label} `;
|
|
283
|
-
const column = visibleWidth(head);
|
|
284
|
-
const valueIndent = ' '.repeat(column);
|
|
285
|
-
const wrapIndent = field.values.length > 1 ? `${valueIndent} ` : valueIndent;
|
|
286
|
-
const lines = [];
|
|
287
|
-
for (const value of field.values) {
|
|
288
|
-
const wrapped = wrapTextWithAnsi(value, Math.max(1, width - visibleWidth(wrapIndent)));
|
|
289
|
-
wrapped.forEach((line, index) => {
|
|
290
|
-
const prefix = index > 0 ? wrapIndent : lines.length === 0 ? head : valueIndent;
|
|
291
|
-
lines.push(`${prefix}${line}`);
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
return lines;
|
|
295
|
-
}
|
|
296
|
-
/** A folded memory call: its header line, then its routing fields. Values WRAP
|
|
297
|
-
* rather than clip — the row states the document's whole reach, so a value cut
|
|
298
|
-
* off at the pane edge is routing the human cannot read. Wrapping keeps the
|
|
299
|
-
* folded call painting exactly the rows it reports, because the viewer
|
|
300
|
-
* measures a block by rendering it at the width it paints at and caches that
|
|
301
|
-
* measurement per width (MeasuredContainer). What must hold at every width is
|
|
302
|
-
* that no row overhangs the pane, or the terminal wraps a row nobody counted. */
|
|
303
|
-
class FoldedCrtrCallComponent {
|
|
304
|
-
header;
|
|
305
|
-
fields;
|
|
306
|
-
constructor(header, fields) {
|
|
307
|
-
this.header = header;
|
|
308
|
-
this.fields = fields;
|
|
309
|
-
}
|
|
310
|
-
invalidate() { }
|
|
311
|
-
render(width) {
|
|
312
|
-
const lines = wrapTextWithAnsi(this.header, Math.max(1, width));
|
|
313
|
-
for (const field of this.fields)
|
|
314
|
-
lines.push(...routingFieldLines(field, width));
|
|
315
|
-
// Final backstop: a pane too narrow to leave the value column any room to
|
|
316
|
-
// wrap into (24 cells for when-and-why-to-read, 12 for a wrapped surface
|
|
317
|
-
// entry) is the only way a row can overhang. It erases the value it clips
|
|
318
|
-
// rather than trimming it — at that width the label alone fills the pane.
|
|
319
|
-
return lines.map((line) => truncateToWidth(line, width, ''));
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
/** Syntax-color flags and their values while leaving the command path and
|
|
323
|
-
* positional arguments in the folded row's existing bold title style. */
|
|
324
|
-
function styleFoldedCrtrTokens(tokens, theme) {
|
|
325
|
-
let expectsValue = false;
|
|
326
|
-
return tokens.map((token) => {
|
|
327
|
-
const attached = CRTR_ATTACHED_FLAG_VALUE.exec(token);
|
|
328
|
-
if (attached !== null) {
|
|
329
|
-
expectsValue = false;
|
|
330
|
-
const valueColor = CRTR_NUMBER_VALUE.test(attached[3]) ? 'syntaxNumber' : 'syntaxString';
|
|
331
|
-
return `${theme.fg('syntaxKeyword', attached[1])}${theme.fg('syntaxOperator', attached[2])}${theme.fg(valueColor, attached[3])}`;
|
|
332
|
-
}
|
|
333
|
-
if (expectsValue && !CRTR_FLAG_TOKEN.test(token)) {
|
|
334
|
-
expectsValue = false;
|
|
335
|
-
return theme.fg(CRTR_NUMBER_VALUE.test(token) ? 'syntaxNumber' : 'syntaxString', token);
|
|
336
|
-
}
|
|
337
|
-
if (CRTR_FLAG_TOKEN.test(token)) {
|
|
338
|
-
expectsValue = true;
|
|
339
|
-
return theme.fg('syntaxKeyword', token);
|
|
340
|
-
}
|
|
341
|
-
expectsValue = false;
|
|
342
|
-
return theme.fg('toolTitle', theme.bold(token));
|
|
343
|
-
}).join(' ');
|
|
344
|
-
}
|
|
345
|
-
function resultText(result) {
|
|
346
|
-
return (result.content ?? [])
|
|
347
|
-
.filter((part) => part?.type === 'text' || typeof part?.text === 'string')
|
|
348
|
-
.map((part) => part.text ?? '')
|
|
349
|
-
.join('\n')
|
|
350
|
-
.trimEnd();
|
|
351
|
-
}
|
|
352
|
-
function styledLabelValue(indent, marker, label, separator, value, theme) {
|
|
353
|
-
const styledMarker = marker === '' ? '' : theme.fg('accent', marker);
|
|
354
|
-
return `${indent}${styledMarker}${theme.fg('dim', label)}${theme.fg('dim', separator)}${theme.fg('text', value)}`;
|
|
355
|
-
}
|
|
356
|
-
function lineStyle(line, theme, preserveSyntax = false) {
|
|
357
|
-
const trimmed = line.trim();
|
|
358
|
-
if (trimmed === '')
|
|
359
|
-
return '';
|
|
360
|
-
if (/^<\/?(?:command|subcommand|runtime-state|crtr-[^>\s]+|error)(?:\s|>|$)/.test(trimmed)) {
|
|
361
|
-
const color = trimmed.startsWith('<error') ? 'error' : 'accent';
|
|
362
|
-
return theme.fg(color, theme.bold(line));
|
|
363
|
-
}
|
|
364
|
-
if (/^(Input|Output|Effects|Branches|Globals|Output \(|Effects$)/.test(trimmed)) {
|
|
365
|
-
return theme.fg('toolTitle', theme.bold(line));
|
|
366
|
-
}
|
|
367
|
-
if (/^(Spawned|Created|Updated|Wrote|Deleted|Promoted|Demoted|Closed|Revived|Recycled|Configured|Registered|Removed|Subscribed|Unsubscribed|Canceled)\b/i.test(trimmed)) {
|
|
368
|
-
return theme.fg('success', line);
|
|
369
|
-
}
|
|
370
|
-
if (/^(crtr:|Command exited|Command timed out|Command aborted|unknown subcommand|error\b)/i.test(trimmed)) {
|
|
371
|
-
return theme.fg('error', line);
|
|
372
|
-
}
|
|
373
|
-
if (/^(warning|warn|blocked|attention)\b/i.test(trimmed) || trimmed.includes('⚠')) {
|
|
374
|
-
return theme.fg('warning', line);
|
|
375
|
-
}
|
|
376
|
-
if (/^[●✓]/.test(trimmed))
|
|
377
|
-
return theme.fg('success', line);
|
|
378
|
-
if (/^[○◌]/.test(trimmed))
|
|
379
|
-
return theme.fg('muted', line);
|
|
380
|
-
if (/^[✗⊘]/.test(trimmed))
|
|
381
|
-
return theme.fg('error', line);
|
|
382
|
-
const bulletField = /^(\s*)-\s+([^:]+)(:\s*)(.*)$/.exec(line);
|
|
383
|
-
if (bulletField !== null) {
|
|
384
|
-
return styledLabelValue(bulletField[1], preserveSyntax ? '- ' : '• ', bulletField[2], bulletField[3], bulletField[4], theme);
|
|
385
|
-
}
|
|
386
|
-
const proseField = /^(\s*)\*\*([^*]+):\*\*(\s*)(.*)$/.exec(line);
|
|
387
|
-
if (proseField !== null) {
|
|
388
|
-
if (preserveSyntax) {
|
|
389
|
-
return `${proseField[1]}${theme.fg('dim', '**')}${theme.fg('dim', proseField[2])}${theme.fg('dim', ':**')}${proseField[3]}${theme.fg('text', proseField[4])}`;
|
|
390
|
-
}
|
|
391
|
-
return styledLabelValue(proseField[1], '', proseField[2], `:${proseField[3]}`, proseField[4], theme);
|
|
392
|
-
}
|
|
393
|
-
if (/^\s*-\s+/.test(line)) {
|
|
394
|
-
const match = /^(\s*)-\s+(.*)$/.exec(line);
|
|
395
|
-
const marker = preserveSyntax ? '-' : '•';
|
|
396
|
-
return `${match[1]}${theme.fg('accent', marker)} ${theme.fg('text', match[2])}`;
|
|
397
|
-
}
|
|
398
|
-
const countHeading = /^(\s*)(\d+\s+[^:]+:)$/.exec(line);
|
|
399
|
-
if (countHeading !== null)
|
|
400
|
-
return `${countHeading[1]}${theme.fg('toolTitle', theme.bold(countHeading[2]))}`;
|
|
401
|
-
const next = /^(\s*)(Next:)(\s*)(.*)$/.exec(line);
|
|
402
|
-
if (next !== null) {
|
|
403
|
-
return `${next[1]}${theme.fg('accent', theme.bold(next[2]))}${next[3]}${theme.fg('text', next[4])}`;
|
|
404
|
-
}
|
|
405
|
-
const tree = /^(\s*)([├└│─┬┼┌┐┘└]+\s*)(.*)$/.exec(line);
|
|
406
|
-
if (tree !== null)
|
|
407
|
-
return `${tree[1]}${theme.fg('border', tree[2])}${theme.fg('text', tree[3])}`;
|
|
408
|
-
return theme.fg('text', line);
|
|
409
|
-
}
|
|
410
|
-
export function renderCrtrOutputText(text, theme, preserveSyntax = false) {
|
|
411
|
-
const body = text || '(no output)';
|
|
412
|
-
return body.split('\n').map((line) => lineStyle(line, theme, preserveSyntax)).join('\n');
|
|
413
|
-
}
|
|
414
|
-
// Help preview synthesis
|
|
415
|
-
//
|
|
416
|
-
// A collapsed `-h` card must never just parrot the call header (the command
|
|
417
|
-
// path, already shown by renderCall) or bottom out in a bare "(schema — ctrl+o
|
|
418
|
-
// to expand)" with zero information. Instead it synthesizes a short,
|
|
419
|
-
// human-useful slice straight out of the command's own rendered help text —
|
|
420
|
-
// still the command's own words (rule 12: previews are command-owned content,
|
|
421
|
-
// not generic renderer chrome), just the compact slice of it. Parsed directly
|
|
422
|
-
// off the exact shapes renderRoot/renderBranch/renderLeafArgv produce
|
|
423
|
-
// (src/core/help.ts) — text-only parsing (no import of help.ts/command.ts:
|
|
424
|
-
// this file must stay bundle-safe, see preview-registry.ts's header) so it is
|
|
425
|
-
// necessarily best-effort, not a real re-parse.
|
|
426
|
-
/** A slash-command echo message's body is `$ crtr <argv>\n\n<schema>`
|
|
427
|
-
* (see isHelpFromCrtrOutputContent below); strip that echo line + its
|
|
428
|
-
* blank-line separator so synthesis always sees the bare schema, same as
|
|
429
|
-
* the bash-card path where `text` already IS the bare schema. */
|
|
430
|
-
function stripCrtrEchoPrefix(text) {
|
|
431
|
-
if (!text.startsWith('$ '))
|
|
432
|
-
return text;
|
|
433
|
-
const nlIdx = text.indexOf('\n');
|
|
434
|
-
if (nlIdx === -1)
|
|
435
|
-
return '';
|
|
436
|
-
const rest = text.slice(nlIdx + 1);
|
|
437
|
-
return rest.startsWith('\n') ? rest.slice(1) : rest;
|
|
438
|
-
}
|
|
439
|
-
/** renderRoot emits one `<command name="X">` block per subtree with NO
|
|
440
|
-
* description attribute; renderBranch emits exactly one `<command
|
|
441
|
-
* name="X" description="Y">` block (always WITH the attribute) for the
|
|
442
|
-
* branch itself. Leaf help (renderLeafArgv) never emits a `<command>` tag at
|
|
443
|
-
* all. That structural difference is enough to tell all three apart from
|
|
444
|
-
* the rendered text alone, with no shared type import. */
|
|
445
|
-
function classifyHelpText(text) {
|
|
446
|
-
const tag = /<command name="[^"]*"([^>]*)>/.exec(text);
|
|
447
|
-
if (tag === null)
|
|
448
|
-
return 'leaf';
|
|
449
|
-
return /\bdescription="/.test(tag[1]) ? 'branch' : 'root';
|
|
450
|
-
}
|
|
451
|
-
/** Root help: a tagline, then one `<command name="X">\n<concept line>` block
|
|
452
|
-
* per subtree (see renderRoot). Preview = tagline + `name — concept` per
|
|
453
|
-
* subtree, in source order — the same information density as the root -h's
|
|
454
|
-
* own orientation line, just one row per subtree instead of the full
|
|
455
|
-
* useWhen/subcommand-listing/state detail. */
|
|
456
|
-
function synthesizeRootPreview(text) {
|
|
457
|
-
const firstTagIdx = text.indexOf('<command name="');
|
|
458
|
-
const tagline = (firstTagIdx === -1 ? text : text.slice(0, firstTagIdx)).trim();
|
|
459
|
-
const commands = [];
|
|
460
|
-
const re = /<command name="([^"]*)">\n([^\n]*)/g;
|
|
461
|
-
let m;
|
|
462
|
-
while ((m = re.exec(text)) !== null)
|
|
463
|
-
commands.push(`${m[1]} \u2014 ${m[2]}`);
|
|
464
|
-
return [tagline, ...(commands.length > 0 ? ['', ...commands] : [])].join('\n');
|
|
465
|
-
}
|
|
466
|
-
/** Branch help: one `<command name="X" description="Y">` block, then one
|
|
467
|
-
* self-closing `<subcommand name="..." description="..." whenToUse="..."/>`
|
|
468
|
-
* per child (see renderBranch). Preview = `name — description` for the
|
|
469
|
-
* branch itself, then the same for each subcommand — dropping whenToUse
|
|
470
|
-
* (already the longest field) and any dynamicState/model prose, which is
|
|
471
|
-
* exactly the detail ctrl+o exists to reveal. */
|
|
472
|
-
function synthesizeBranchPreview(text) {
|
|
473
|
-
const head = /^<command name="([^"]*)" description="([^"]*)">/.exec(text);
|
|
474
|
-
const name = head?.[1] ?? '';
|
|
475
|
-
const description = head?.[2] ?? '';
|
|
476
|
-
const subs = [];
|
|
477
|
-
const re = /<subcommand name="([^"]*)" description="([^"]*)"[^>]*\/>/g;
|
|
478
|
-
let m;
|
|
479
|
-
while ((m = re.exec(text)) !== null)
|
|
480
|
-
subs.push(`${m[1]} \u2014 ${m[2]}`);
|
|
481
|
-
return [`${name} \u2014 ${description}`, ...(subs.length > 0 ? ['', ...subs] : [])].join('\n');
|
|
482
|
-
}
|
|
483
|
-
/** Leaf help: `name: summary.` first line, then an `Input`-headed param block
|
|
484
|
-
* (each row ` LABEL description...`, or one un-indented note line when the
|
|
485
|
-
* leaf takes no params — see renderLeafArgv/paramLabel). Preview = the
|
|
486
|
-
* summary line verbatim (already concise) plus a compact param-name roll-call
|
|
487
|
-
* (or the note line) — never the per-param descriptions, Output, or
|
|
488
|
-
* Effects sections, which is exactly the schema detail ctrl+o reveals. */
|
|
489
|
-
function synthesizeLeafPreview(text) {
|
|
490
|
-
const lines = text.split('\n');
|
|
491
|
-
const out = [lines[0] ?? ''];
|
|
492
|
-
const inputIdx = lines.indexOf('Input');
|
|
493
|
-
if (inputIdx === -1)
|
|
494
|
-
return out.join('\n');
|
|
495
|
-
const outputIdx = lines.findIndex((l) => l.startsWith('Output ('));
|
|
496
|
-
const end = outputIdx === -1 ? lines.length : outputIdx;
|
|
497
|
-
const block = lines.slice(inputIdx + 1, end).filter((l) => l.trim() !== '');
|
|
498
|
-
const paramNames = block.map((l) => /^\s{2}(\S+)/.exec(l)?.[1]);
|
|
499
|
-
if (block.length > 0 && paramNames.every((n) => n !== undefined)) {
|
|
500
|
-
out.push('', `Params: ${paramNames.join(', ')}`);
|
|
501
|
-
}
|
|
502
|
-
else if (block.length > 0) {
|
|
503
|
-
// No param rows (renderLeafArgv's inputNote path) — the note is itself
|
|
504
|
-
// already a one-line summary, e.g. "No input parameters."
|
|
505
|
-
out.push('', block[0]);
|
|
506
|
-
}
|
|
507
|
-
return out.join('\n');
|
|
508
|
-
}
|
|
509
|
-
/** Synthesize a collapsed-preview body for any `-h` schema text, dispatching
|
|
510
|
-
* on classifyHelpText. This is the ONLY place that turns raw help text into
|
|
511
|
-
* preview prose — both the bash-card path (CrtrResultComponent) and the
|
|
512
|
-
* slash-command echo path (CrtrOutputMessageComponent, via
|
|
513
|
-
* stripCrtrEchoPrefix) route through it, so the two surfaces read the same
|
|
514
|
-
* way. */
|
|
515
|
-
function synthesizeHelpPreviewText(rawText) {
|
|
516
|
-
const text = stripCrtrEchoPrefix(rawText);
|
|
517
|
-
const kind = classifyHelpText(text);
|
|
518
|
-
if (kind === 'root')
|
|
519
|
-
return synthesizeRootPreview(text);
|
|
520
|
-
if (kind === 'branch')
|
|
521
|
-
return synthesizeBranchPreview(text);
|
|
522
|
-
return synthesizeLeafPreview(text);
|
|
523
|
-
}
|
|
524
|
-
/** Style one summarizer-produced SummaryLine for terminal rendering: an
|
|
525
|
-
* empty text stays blank (no color codes to wrap nothing in), otherwise the
|
|
526
|
-
* tone maps straight to a theme color name \u2014 'plain' is the same
|
|
527
|
-
* 'toolOutput' color the generic renderer's default line style uses,
|
|
528
|
-
* everything else (success/error/warning/muted/accent) is already a real
|
|
529
|
-
* theme color name used elsewhere in this file. */
|
|
530
|
-
function renderSummaryLine(line, theme, lead = false) {
|
|
531
|
-
if (line.text === '')
|
|
532
|
-
return '';
|
|
533
|
-
// The shared mutation grammar emits aligned `label : value` rows. Keep the
|
|
534
|
-
// alignment, but establish hierarchy inside the row instead of painting the
|
|
535
|
-
// whole receipt the same gray.
|
|
536
|
-
const keyValue = /^(.*?)(\s*:\s{2})(.*)$/.exec(line.text);
|
|
537
|
-
if (keyValue !== null && (line.tone === undefined || line.tone === 'plain')) {
|
|
538
|
-
return `${theme.fg('dim', keyValue[1])}${theme.fg('dim', keyValue[2])}${theme.fg('text', keyValue[3])}`;
|
|
539
|
-
}
|
|
540
|
-
const tone = line.tone ?? 'plain';
|
|
541
|
-
if (tone === 'muted')
|
|
542
|
-
return theme.fg('muted', line.text);
|
|
543
|
-
const color = tone === 'plain' ? 'text' : tone;
|
|
544
|
-
const rendered = theme.fg(color, line.text);
|
|
545
|
-
return lead && tone === 'plain' ? theme.bold(rendered) : rendered;
|
|
546
|
-
}
|
|
547
|
-
/** Only ever rendered for a running or failed call (see statusLines below): a
|
|
548
|
-
* SUCCESSFUL call shows no body status line at all, so the success/help
|
|
549
|
-
* branches would be dead here. */
|
|
550
|
-
function statusLine(options, theme) {
|
|
551
|
-
return options.isPartial ? theme.fg('warning', '⟳ crtr running') : theme.fg('error', '✗ crtr failed');
|
|
552
|
-
}
|
|
553
|
-
const DEFAULT_PREVIEW_STATE = { isHelp: false, suppressOutput: false };
|
|
554
|
-
/** Collapsed previews are line-budgeted cards: a line wider than the pane is
|
|
555
|
-
* clipped with an ellipsis so one long line can never blow the budget. */
|
|
556
|
-
function clampRenderedLines(lines, width) {
|
|
557
|
-
if (width <= 0)
|
|
558
|
-
return lines.map(() => '');
|
|
559
|
-
return lines.map((line) => truncateToWidth(line, width, '…'));
|
|
560
|
-
}
|
|
561
|
-
/** Expanded = raw truth, so every line wraps instead of clipping — an expanded
|
|
562
|
-
* card has no line budget to protect and clipped output hides the very detail
|
|
563
|
-
* the expansion was for (long paths, findings, stack frames). */
|
|
564
|
-
function wrapRenderedLines(lines, width) {
|
|
565
|
-
if (width <= 0)
|
|
566
|
-
return lines.map(() => '');
|
|
567
|
-
return lines.flatMap((line) => (line === '' ? [''] : wrapTextWithAnsi(line, width)));
|
|
568
|
-
}
|
|
569
|
-
const PI_TRUNCATION_MARKER = /^\[Showing lines \d+-\d+ of \d+ \([^)]+ limit\)\. Full output: .+\]$/;
|
|
570
|
-
function isPiTruncationMarker(line) {
|
|
571
|
-
return PI_TRUNCATION_MARKER.test(line.trim());
|
|
572
|
-
}
|
|
573
|
-
function splitGenericTableRow(line) {
|
|
574
|
-
const trimmed = line.trim();
|
|
575
|
-
if (!trimmed.includes('|'))
|
|
576
|
-
return null;
|
|
577
|
-
// GFM permits omitting either outer pipe (`name | version`, `--- | ---`);
|
|
578
|
-
// only strip the ones actually present rather than requiring both.
|
|
579
|
-
const body = trimmed.replace(/^\|/, '').replace(/\|$/, '');
|
|
580
|
-
const cells = [];
|
|
581
|
-
let current = '';
|
|
582
|
-
let i = 0;
|
|
583
|
-
while (i < body.length) {
|
|
584
|
-
const ch = body[i];
|
|
585
|
-
if (ch === '\\' && body[i + 1] === '|') {
|
|
586
|
-
current += '|';
|
|
587
|
-
i += 2;
|
|
588
|
-
continue;
|
|
589
|
-
}
|
|
590
|
-
if (ch === '|') {
|
|
591
|
-
cells.push(current.trim());
|
|
592
|
-
current = '';
|
|
593
|
-
i++;
|
|
594
|
-
continue;
|
|
595
|
-
}
|
|
596
|
-
current += ch;
|
|
597
|
-
i++;
|
|
598
|
-
}
|
|
599
|
-
cells.push(current.trim());
|
|
600
|
-
return cells.length >= 2 ? cells : null;
|
|
601
|
-
}
|
|
602
|
-
function isTableSeparator(cells) {
|
|
603
|
-
return cells.every((cell) => /^:?-{3,}:?$/.test(cell));
|
|
604
|
-
}
|
|
605
|
-
function hasEdgePipe(line) {
|
|
606
|
-
const trimmed = line.trim();
|
|
607
|
-
return trimmed.startsWith('|') || trimmed.endsWith('|');
|
|
608
|
-
}
|
|
609
|
-
function readGenericTableBlock(lines, start) {
|
|
610
|
-
const first = splitGenericTableRow(lines[start]);
|
|
611
|
-
if (first === null)
|
|
612
|
-
return null;
|
|
613
|
-
const rows = [first];
|
|
614
|
-
let next = start + 1;
|
|
615
|
-
while (next < lines.length) {
|
|
616
|
-
const cells = splitGenericTableRow(lines[next]);
|
|
617
|
-
if (cells === null || cells.length !== first.length)
|
|
618
|
-
break;
|
|
619
|
-
rows.push(cells);
|
|
620
|
-
next++;
|
|
621
|
-
}
|
|
622
|
-
// A single matched row with no edge pipe at all (e.g. prose that happens
|
|
623
|
-
// to contain one literal `|`, `warning: use x | y`) is too weak a signal
|
|
624
|
-
// to treat as a table — a real GFM row omitting both edges only reads as
|
|
625
|
-
// one when it's part of a multi-row block (header+separator, or several
|
|
626
|
-
// consecutive same-shaped rows).
|
|
627
|
-
if (rows.length === 1 && !hasEdgePipe(lines[start]))
|
|
628
|
-
return null;
|
|
629
|
-
const separatorIndex = rows.findIndex(isTableSeparator);
|
|
630
|
-
if (separatorIndex === 1) {
|
|
631
|
-
return { next, rows: [rows[0], ...rows.slice(2)], headerRows: 1 };
|
|
632
|
-
}
|
|
633
|
-
if (separatorIndex !== -1) {
|
|
634
|
-
return { next, rows: rows.filter((_, i) => i !== separatorIndex), headerRows: 0 };
|
|
635
|
-
}
|
|
636
|
-
return { next, rows, headerRows: 0 };
|
|
637
|
-
}
|
|
638
|
-
function sum(nums) {
|
|
639
|
-
return nums.reduce((acc, n) => acc + n, 0);
|
|
640
|
-
}
|
|
641
|
-
function tableColumnWidths(rows, width) {
|
|
642
|
-
const columnCount = rows[0]?.length ?? 0;
|
|
643
|
-
if (columnCount === 0)
|
|
644
|
-
return [];
|
|
645
|
-
const separatorWidth = Math.max(0, columnCount - 1) * 2;
|
|
646
|
-
const available = Math.max(columnCount, width - separatorWidth);
|
|
647
|
-
const minWidth = available >= columnCount * 3 ? 3 : 1;
|
|
648
|
-
const widths = Array.from({ length: columnCount }, (_, col) => Math.max(1, ...rows.map((row) => visibleWidth(row[col] ?? ''))));
|
|
649
|
-
while (sum(widths) > available) {
|
|
650
|
-
let widest = -1;
|
|
651
|
-
for (let i = 0; i < widths.length; i++) {
|
|
652
|
-
if (widths[i] > minWidth && (widest === -1 || widths[i] > widths[widest]))
|
|
653
|
-
widest = i;
|
|
654
|
-
}
|
|
655
|
-
if (widest === -1)
|
|
656
|
-
break;
|
|
657
|
-
widths[widest] = widths[widest] - 1;
|
|
658
|
-
}
|
|
659
|
-
return widths;
|
|
660
|
-
}
|
|
661
|
-
function padToVisibleWidth(text, width) {
|
|
662
|
-
const missing = width - visibleWidth(text);
|
|
663
|
-
return missing > 0 ? `${text}${' '.repeat(missing)}` : text;
|
|
664
|
-
}
|
|
665
|
-
function formatGenericTableRow(cells, widths) {
|
|
666
|
-
return cells
|
|
667
|
-
.map((cell, i) => padToVisibleWidth(truncateToWidth(cell, widths[i] ?? 1, '…'), widths[i] ?? 1))
|
|
668
|
-
.join(' ')
|
|
669
|
-
.trimEnd();
|
|
670
|
-
}
|
|
671
|
-
/** Collect the preview's logical lines. NO line budget and NO horizontal
|
|
672
|
-
* clipping happens here: tables are grid-shaped so their cells are clipped to
|
|
673
|
-
* their column width (wrapping a cell would break the grid), but ordinary text
|
|
674
|
-
* lines are kept whole and wrapped later, where the budget is applied to the
|
|
675
|
-
* resulting VISUAL lines (renderGenericPreview). Clipping a preview line would
|
|
676
|
-
* hide content twice over — the card is already shortened vertically. */
|
|
677
|
-
function collectGenericPreviewLines(text, width) {
|
|
678
|
-
const sourceLines = (text || '(no output)').split('\n');
|
|
679
|
-
const lines = [];
|
|
680
|
-
const push = (line) => {
|
|
681
|
-
lines.push(line);
|
|
682
|
-
};
|
|
683
|
-
let i = 0;
|
|
684
|
-
while (i < sourceLines.length) {
|
|
685
|
-
const table = readGenericTableBlock(sourceLines, i);
|
|
686
|
-
if (table !== null) {
|
|
687
|
-
const widths = tableColumnWidths(table.rows, width);
|
|
688
|
-
for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex++) {
|
|
689
|
-
push({
|
|
690
|
-
text: formatGenericTableRow(table.rows[rowIndex], widths),
|
|
691
|
-
tone: rowIndex < table.headerRows ? 'accent' : undefined,
|
|
692
|
-
});
|
|
693
|
-
}
|
|
694
|
-
i = table.next;
|
|
695
|
-
continue;
|
|
696
|
-
}
|
|
697
|
-
const textLine = sourceLines[i];
|
|
698
|
-
push({
|
|
699
|
-
text: textLine,
|
|
700
|
-
tone: isPiTruncationMarker(textLine) ? 'muted' : undefined,
|
|
701
|
-
});
|
|
702
|
-
i++;
|
|
703
|
-
}
|
|
704
|
-
return lines;
|
|
705
|
-
}
|
|
706
|
-
/** Style, wrap, then budget — the same order pi's own previews use
|
|
707
|
-
* (truncateToVisualLines renders through a Text component first). The budget
|
|
708
|
-
* counts VISUAL lines, so a wrapped long line costs what it actually occupies
|
|
709
|
-
* and nothing is silently clipped off the right edge. */
|
|
710
|
-
function renderGenericPreview(text, lineBudget, width, theme) {
|
|
711
|
-
const styled = collectGenericPreviewLines(text, width).map((line) => line.tone !== undefined ? renderSummaryLine(line, theme, line.tone === 'accent') : lineStyle(line.text, theme));
|
|
712
|
-
const visual = wrapRenderedLines(styled, width);
|
|
713
|
-
if (visual.length <= lineBudget)
|
|
714
|
-
return { lines: visual, skippedCount: 0 };
|
|
715
|
-
return { lines: visual.slice(0, lineBudget), skippedCount: visual.length - lineBudget };
|
|
716
|
-
}
|
|
717
|
-
class CrtrResultComponent {
|
|
718
|
-
text;
|
|
719
|
-
options;
|
|
720
|
-
context;
|
|
721
|
-
theme;
|
|
722
|
-
command;
|
|
723
|
-
staticPreview;
|
|
724
|
-
structuredPreview;
|
|
725
|
-
constructor(text, options, context, theme,
|
|
726
|
-
/** Source command for the preview lookup (the bash-call path). Omit (or
|
|
727
|
-
* pass a static preview below) for a path with no per-leaf lookup, e.g.
|
|
728
|
-
* CrtrOutputMessageComponent. */
|
|
729
|
-
command, staticPreview = DEFAULT_PREVIEW_STATE, structuredPreview) {
|
|
730
|
-
this.text = text;
|
|
731
|
-
this.options = options;
|
|
732
|
-
this.context = context;
|
|
733
|
-
this.theme = theme;
|
|
734
|
-
this.command = command;
|
|
735
|
-
this.staticPreview = staticPreview;
|
|
736
|
-
this.structuredPreview = structuredPreview;
|
|
737
|
-
}
|
|
738
|
-
/** Both isHelp and suppressOutput are synchronous structural lookups (see
|
|
739
|
-
* commandPreviewMeta), so this never needs to invalidate/upgrade a later
|
|
740
|
-
* paint — the first render already has the final answer. */
|
|
741
|
-
currentPreview() {
|
|
742
|
-
if (this.command === undefined)
|
|
743
|
-
return this.staticPreview;
|
|
744
|
-
return commandPreviewMeta(this.command);
|
|
745
|
-
}
|
|
746
|
-
render(width) {
|
|
747
|
-
const preview = this.currentPreview();
|
|
748
|
-
const isPartial = Boolean(this.options.isPartial);
|
|
749
|
-
const isError = Boolean(this.context.isError);
|
|
750
|
-
const isRunningOrFailed = isPartial || isError;
|
|
751
|
-
// The body carries a status line ONLY while running or failed (⟳ running /
|
|
752
|
-
// ✗ failed) — the states the call header never shows and where the detail
|
|
753
|
-
// matters. A SUCCESSFUL call (help or normal) gets NO body status: the
|
|
754
|
-
// header already named the command (<icon> crtr <path> / <icon> crtr help) and the
|
|
755
|
-
// output speaks for itself, so a "✓ crtr done" line is pure noise.
|
|
756
|
-
const statusLines = isRunningOrFailed ? [statusLine(this.options, this.theme)] : [];
|
|
757
|
-
if (this.options.expanded) {
|
|
758
|
-
// Expanded = raw truth (never redirect-/-h-stripped, never
|
|
759
|
-
// synthesized): the exact command as invoked, plus the exact output,
|
|
760
|
-
// still lineStyle-colored for readability but otherwise unmodified.
|
|
761
|
-
const styled = renderCrtrOutputText(this.text, this.theme, true);
|
|
762
|
-
const commandLine = this.command !== undefined
|
|
763
|
-
? [this.theme.fg('muted', `$ ${this.command}`), '']
|
|
764
|
-
: [];
|
|
765
|
-
return wrapRenderedLines(['', ...statusLines, ...commandLine, ...styled.split('\n')], width);
|
|
766
|
-
}
|
|
767
|
-
// Collapse order (rule 12, inline-ui-placement): help schema synthesis,
|
|
768
|
-
// then a command-owned structured summary (summarizePath), then a bare
|
|
769
|
-
// suppressOutput hint, then generic truncation. A still-RUNNING command
|
|
770
|
-
// is always shown raw — there is nothing to summarize yet. Structured
|
|
771
|
-
// errors can be summarized too; a result without a preview record retains
|
|
772
|
-
// the exact generic raw fallback.
|
|
773
|
-
// suppressOutput stays success-only (checked below): a failure is exactly
|
|
774
|
-
// when a suppressed leaf's raw output becomes diagnostically important.
|
|
775
|
-
if (!isPartial) {
|
|
776
|
-
if (preview.isHelp) {
|
|
777
|
-
// A collapsed -h card gets a synthesized preview of the schema (rule
|
|
778
|
-
// 12), never the header's own path repeated and never the raw schema
|
|
779
|
-
// dump — see synthesizeHelpPreviewText. A -h invocation is never
|
|
780
|
-
// partial-or-failed in practice (the dispatcher renders the schema
|
|
781
|
-
// unconditionally), so statusLines is effectively always [] here and
|
|
782
|
-
// the body is JUST the preview content, no repeated help label.
|
|
783
|
-
const styled = renderCrtrOutputText(synthesizeHelpPreviewText(this.text), this.theme);
|
|
784
|
-
const truncated = truncateToVisualLines(styled, PREVIEW_BODY_BUDGET, width);
|
|
785
|
-
const lines = truncated.visualLines ?? [];
|
|
786
|
-
const hint = this.theme.fg('dim', '(schema — ctrl+o to expand)');
|
|
787
|
-
return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
|
|
788
|
-
}
|
|
789
|
-
const tokens = this.command !== undefined ? extractCrtrInvocationTokens(this.command) : undefined;
|
|
790
|
-
const summary = tokens !== undefined && this.structuredPreview !== undefined
|
|
791
|
-
? summarizePath(this.structuredPreview, tokens)
|
|
792
|
-
: null;
|
|
793
|
-
if (summary !== null) {
|
|
794
|
-
// A command-owned summary of the leaf's exact result object — never
|
|
795
|
-
// a parse of its rendered payload.
|
|
796
|
-
const firstContentIndex = summary.findIndex((line) => line.text !== '');
|
|
797
|
-
const summaryLines = summary.map((line, index) => renderSummaryLine(line, this.theme, index === firstContentIndex));
|
|
798
|
-
const truncated = truncateToVisualLines(summaryLines.join('\n'), PREVIEW_BODY_BUDGET, width);
|
|
799
|
-
const lines = truncated.visualLines ?? [];
|
|
800
|
-
const hint = this.theme.fg('dim', '(ctrl+o to expand)');
|
|
801
|
-
return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
|
|
802
|
-
}
|
|
803
|
-
if (!isError && preview.suppressOutput) {
|
|
804
|
-
// suppressOutput leaves (command-owned, e.g. canvas snapshot) stay a
|
|
805
|
-
// bare hint — the payload is a machine-readable dump with no useful
|
|
806
|
-
// human slice to synthesize, unlike help text's structured shape.
|
|
807
|
-
// Success-only: a failed run of a suppressed leaf still shows the raw
|
|
808
|
-
// output below, since that is exactly when the detail matters.
|
|
809
|
-
const hint = this.theme.fg('dim', '(suppressed — ctrl+o to expand)');
|
|
810
|
-
return clampRenderedLines(['', ...statusLines, hint], width);
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
const generic = renderGenericPreview(this.text, PREVIEW_BODY_BUDGET, width, this.theme);
|
|
814
|
-
if (generic.skippedCount > 0) {
|
|
815
|
-
const hint = this.theme.fg('dim', `… (${generic.skippedCount} more lines, ctrl+o to expand)`);
|
|
816
|
-
return clampRenderedLines(['', ...statusLines, ...generic.lines, hint], width);
|
|
817
|
-
}
|
|
818
|
-
return clampRenderedLines(['', ...statusLines, ...generic.lines], width);
|
|
819
|
-
}
|
|
820
|
-
invalidate() { }
|
|
821
|
-
}
|
|
822
|
-
/** First-line convention from crtr-commands/index.ts's pi.sendMessage:
|
|
823
|
-
* `$ crtr <argv>\n\n<output>`. Help-only here, never suppressOutput: this
|
|
824
|
-
* path renders a slash-command's own static `$ crtr ...` echo, not a live
|
|
825
|
-
* bash-call result keyed to a real leaf path, so there is no per-leaf
|
|
826
|
-
* suppressOutput lookup to make. */
|
|
827
|
-
function isHelpFromCrtrOutputContent(content) {
|
|
828
|
-
const firstLine = content.split('\n', 1)[0];
|
|
829
|
-
return firstLine.startsWith('$ ') && isCrtrHelpInvocation(firstLine.slice(2));
|
|
830
|
-
}
|
|
831
|
-
export class CrtrOutputMessageComponent extends Box {
|
|
832
|
-
content;
|
|
833
|
-
theme;
|
|
834
|
-
body;
|
|
835
|
-
expanded;
|
|
836
|
-
constructor(content, expanded, theme) {
|
|
837
|
-
super(1, 1, (text) => theme.bg('customMessageBg', text));
|
|
838
|
-
this.content = content;
|
|
839
|
-
this.theme = theme;
|
|
840
|
-
this.expanded = expanded;
|
|
841
|
-
const preview = { isHelp: isHelpFromCrtrOutputContent(content), suppressOutput: false };
|
|
842
|
-
this.body = new CrtrResultComponent(content, { expanded }, {}, theme, undefined, preview);
|
|
843
|
-
this.addChild(this.body);
|
|
844
|
-
}
|
|
845
|
-
setExpanded(expanded) {
|
|
846
|
-
if (this.expanded === expanded)
|
|
847
|
-
return;
|
|
848
|
-
this.expanded = expanded;
|
|
849
|
-
const preview = { isHelp: isHelpFromCrtrOutputContent(this.content), suppressOutput: false };
|
|
850
|
-
this.body = new CrtrResultComponent(this.content, { expanded }, {}, this.theme, undefined, preview);
|
|
851
|
-
this.clear();
|
|
852
|
-
this.addChild(this.body);
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
export function createCrtrBashToolDefinition(args, fold = new FoldedToolCallController()) {
|
|
856
|
-
const command = commandFromArgs(args);
|
|
857
|
-
if (!isCrtrBashCommand(command))
|
|
858
|
-
return undefined;
|
|
859
|
-
// The invocations' own result records, kept from the settled tool result so a
|
|
860
|
-
// folded row can still state a fact the argv does not carry.
|
|
861
|
-
let records = [];
|
|
862
|
-
const observeResult = (result, isPartial) => {
|
|
863
|
-
if (isPartial)
|
|
864
|
-
return;
|
|
865
|
-
records = crtrPreviewRecords(result);
|
|
866
|
-
};
|
|
867
|
-
const definition = {
|
|
868
|
-
name: 'bash',
|
|
869
|
-
label: 'bash',
|
|
870
|
-
description: 'Render crtr bash output with crtr-specific chrome in the attach viewer.',
|
|
871
|
-
parameters: {},
|
|
872
|
-
renderCall(callArgs, theme, context) {
|
|
873
|
-
const currentCommand = commandFromArgs(callArgs) || command;
|
|
874
|
-
// Semantic card, not a bash echo: the header names what the invocation
|
|
875
|
-
// IS (help schema vs. a crtr command), and the body previews only the
|
|
876
|
-
// crtr segment's own path/args (extractCrtrInvocationTokens, -h/--help
|
|
877
|
-
// stripped) — no leading `$`, no raw shell chrome (chained `&&`/`|`
|
|
878
|
-
// siblings, env-var prefixes) leaking through.
|
|
879
|
-
const tokens = extractCrtrInvocationTokens(currentCommand);
|
|
880
|
-
const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
|
|
881
|
-
const pathTokens = (tokens ?? []).filter((t) => t !== '-h' && t !== '--help');
|
|
882
|
-
const path = pathTokens.join(' ');
|
|
883
|
-
const icon = isHelp ? HELP_ICON : iconForPath(pathTokens);
|
|
884
|
-
const prefix = isHelp ? `${icon} crtr help` : `${icon} crtr`;
|
|
885
|
-
const styledPrefix = theme.fg('accent', theme.bold(prefix));
|
|
886
|
-
// A memory write/edit folds to its routing, not to its flag dump: the
|
|
887
|
-
// fold is what the human scans, and these flags are the document's whole
|
|
888
|
-
// reach.
|
|
889
|
-
const routing = fold.folded && !isHelp ? memoryRouting(pathTokens, records) : undefined;
|
|
890
|
-
if (routing !== undefined) {
|
|
891
|
-
const named = routing.name === '' ? '' : ` ${theme.fg('toolTitle', theme.bold(routing.name))}`;
|
|
892
|
-
const header = `${styledPrefix} ${theme.fg('toolTitle', theme.bold(routing.leaf))}${named}`;
|
|
893
|
-
return fold.capture(new FoldedCrtrCallComponent(header, memoryRoutingFields(routing, theme)));
|
|
894
|
-
}
|
|
895
|
-
const styledPath = path
|
|
896
|
-
? ` ${fold.folded ? styleFoldedCrtrTokens(pathTokens, theme) : theme.fg('toolTitle', theme.bold(path))}`
|
|
897
|
-
: '';
|
|
898
|
-
return fold.capture(new Text(`${styledPrefix}${styledPath}`, 0, 0));
|
|
899
|
-
},
|
|
900
|
-
renderResult(result, options, theme, context) {
|
|
901
|
-
return new CrtrResultComponent(resultText(result), options, context, theme, command, DEFAULT_PREVIEW_STATE, crtrPreviewRecords(result).at(-1));
|
|
902
|
-
},
|
|
903
|
-
};
|
|
904
|
-
return { definition, observeResult };
|
|
905
|
-
}
|
|
1
|
+
var X=Object.defineProperty;var c=(e,t)=>X(e,"name",{value:t,configurable:!0});import{truncateToVisualLines as O}from"@earendil-works/pi-coding-agent";import{Box as J,Text as Q,truncateToWidth as R,visibleWidth as T,wrapTextWithAnsi as v}from"@earendil-works/pi-tui";import{parse as tt,stringify as _}from"yaml";import{crtrPreviewRecords as A,HELP_ICON as et,iconForPath as nt,suppressOutputForPath as rt,summarizePath as st}from"../../../core/preview-registry.js";import{parseSurfaces as it}from"../../../core/substrate/schema.js";import{FoldedToolCallController as ot}from"./tool-calls.js";const ct=20,P=ct-3,L=/<<-?\s*(["']?)([A-Za-z_][A-Za-z0-9_]*)\1/g,W=/(?:^|[\n;&|()]\s*)(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*(?:[^\s;&|()]+\/)?(?:crtr|crouter)(?=\s|$)/,Xt="crtr-output";function F(e){const t=e.split(`
|
|
2
|
+
`),n=[];let r=0;for(;r<t.length;){const s=t[r];n.push(s),r++;const i=[];L.lastIndex=0;let o;for(;(o=L.exec(s))!==null;)i.push(o[2]);for(const u of i)for(;r<t.length;){const a=t[r].replace(/^\t+/,"");if(r++,a===u)break}}return n.join(`
|
|
3
|
+
`)}c(F,"stripHeredocBodies");function ut(e){return typeof e=="string"&&W.test(F(e))}c(ut,"isCrtrBashCommand");function y(e){const t=F(e),n=W.exec(t);if(n===null)return;const r=t.slice(n.index+n[0].length),s=r.search(/[\n;&|)]/),i=(s===-1?r:r.slice(0,s)).trim();return i===""?[]:lt(dt(i))}c(y,"extractCrtrInvocationTokens");const at=/^(?:\d*|&)(?:>>|<<|>|<)/;function lt(e){const t=e.findIndex(n=>at.test(n));return t===-1?e:e.slice(0,t)}c(lt,"dropRedirectTail");function dt(e){const t=[];let n="",r=!1,s=null;for(const i of e){if(s!==null){i===s?s=null:n+=i,r=!0;continue}if(i==='"'||i==="'"){s=i,r=!0;continue}if(/\s/.test(i)){r&&(t.push(n),n="",r=!1);continue}n+=i,r=!0}return r&&t.push(n),t}c(dt,"tokenizeShellSegment");function ft(e){if(typeof e!="string")return!1;const t=y(e);return t!==void 0&&t.some(n=>n==="-h"||n==="--help")}c(ft,"isCrtrHelpInvocation");function pt(e){const t=y(e);return{isHelp:t!==void 0&&t.some(r=>r==="-h"||r==="--help"),suppressOutput:t!==void 0&&t.length>0&&rt(t)}}c(pt,"commandPreviewMeta");function M(e){if(!e||typeof e!="object")return"";const t=e.command;return typeof t=="string"?t:""}c(M,"commandFromArgs");const C=/^-{1,2}[A-Za-z0-9]/,mt=/^(--?[A-Za-z0-9][^=]*)(=)(.*)$/,N=/^-?(?:\d+(?:\.\d+)?|\.\d+)$/,ht=new Set(["memory write","memory edit"]);function S(e,t){const n=`--${t}=`,r=[];return e.forEach((s,i)=>{if(s===`--${t}`){const o=e[i+1];o!==void 0&&!C.test(o)&&r.push(o);return}s.startsWith(n)&&r.push(s.slice(n.length))}),r}c(S,"crtrFlagValues");function E(e,t){return S(e,t)[0]}c(E,"crtrFlagValue");function j(e){try{return tt(e)}catch{return}}c(j,"parsedYaml");function gt(e){const t=j(e);return t===null||typeof t!="object"||Array.isArray(t)?e.trim():_(t,{collectionStyle:"flow",flowCollectionPadding:!1,lineWidth:0}).trim()}c(gt,"predicateText");function H(e){return _(e,{collectionStyle:"flow",flowCollectionPadding:!1,lineWidth:0}).trim()}c(H,"predicateValueText");function V(e,t){const n=e?.[t];return typeof n=="string"&&n!==""?n:void 0}c(V,"stringField");function xt(e,t){const n=e.slice(0,2).join(" ");if(!ht.has(n))return;const r=e[2]!==void 0&&!C.test(e[2])?e[2]:void 0,s=t.find(o=>o.path===n)?.result,i=E(e,"gate");return{leaf:n,name:V(s,"name")??r??"",scope:V(s,"scope")??E(e,"scope"),gate:i===void 0?void 0:gt(i),surfaces:it(S(e,"surface").map(j)),whenAndWhyToRead:E(e,"when-and-why-to-read")}}c(xt,"memoryRouting");function $t(e){return e==="content"?"warning":e==="preview"?"accent":"muted"}c($t,"rungTone");function bt(e,t){const n=[e.on];return e.match!==void 0&&n.push(e.match.join(" ")),e.matchFrontmatter!==void 0&&n.push(`match-frontmatter ${H(e.matchFrontmatter)}`),e.gate!==void 0&&n.push(`gate ${H(e.gate)}`),`${t.fg("text",n.join(" "))} ${t.fg("dim","at")} ${t.fg($t(e.at),e.at)}`}c(bt,"surfaceEntryText");const wt=" ";function Tt(e,t){const n=c(s=>t.fg("dim",s),"label"),r=[];return e.scope!==void 0&&r.push({label:n("scope"),values:[t.fg("text",e.scope)]}),e.gate!==void 0&&r.push({label:n("gate"),values:[t.fg("text",e.gate)]}),r.push({label:n("surface"),values:e.surfaces.length===0?[t.fg("muted","none")]:e.surfaces.map(s=>bt(s,t))}),e.whenAndWhyToRead!==void 0&&r.push({label:n("when-and-why-to-read"),values:[t.fg("text",e.whenAndWhyToRead)]}),r}c(Tt,"memoryRoutingFields");function yt(e,t){const n=`${wt}${e.label} `,r=T(n),s=" ".repeat(r),i=e.values.length>1?`${s} `:s,o=[];for(const u of e.values)v(u,Math.max(1,t-T(i))).forEach((l,d)=>{const f=d>0?i:o.length===0?n:s;o.push(`${f}${l}`)});return o}c(yt,"routingFieldLines");class Ct{static{c(this,"FoldedCrtrCallComponent")}header;fields;constructor(t,n){this.header=t,this.fields=n}invalidate(){}render(t){const n=v(this.header,Math.max(1,t));for(const r of this.fields)n.push(...yt(r,t));return n.map(r=>R(r,t,""))}}function Rt(e,t){let n=!1;return e.map(r=>{const s=mt.exec(r);if(s!==null){n=!1;const i=N.test(s[3])?"syntaxNumber":"syntaxString";return`${t.fg("syntaxKeyword",s[1])}${t.fg("syntaxOperator",s[2])}${t.fg(i,s[3])}`}return n&&!C.test(r)?(n=!1,t.fg(N.test(r)?"syntaxNumber":"syntaxString",r)):C.test(r)?(n=!0,t.fg("syntaxKeyword",r)):(n=!1,t.fg("toolTitle",t.bold(r)))}).join(" ")}c(Rt,"styleFoldedCrtrTokens");function vt(e){return(e.content??[]).filter(t=>t?.type==="text"||typeof t?.text=="string").map(t=>t.text??"").join(`
|
|
4
|
+
`).trimEnd()}c(vt,"resultText");function U(e,t,n,r,s,i){const o=t===""?"":i.fg("accent",t);return`${e}${o}${i.fg("dim",n)}${i.fg("dim",r)}${i.fg("text",s)}`}c(U,"styledLabelValue");function z(e,t,n=!1){const r=e.trim();if(r==="")return"";if(/^<\/?(?:command|subcommand|runtime-state|crtr-[^>\s]+|error)(?:\s|>|$)/.test(r)){const l=r.startsWith("<error")?"error":"accent";return t.fg(l,t.bold(e))}if(/^(Input|Output|Effects|Branches|Globals|Output \(|Effects$)/.test(r))return t.fg("toolTitle",t.bold(e));if(/^(Spawned|Created|Updated|Wrote|Deleted|Promoted|Demoted|Closed|Revived|Recycled|Configured|Registered|Removed|Subscribed|Unsubscribed|Canceled)\b/i.test(r))return t.fg("success",e);if(/^(crtr:|Command exited|Command timed out|Command aborted|unknown subcommand|error\b)/i.test(r))return t.fg("error",e);if(/^(warning|warn|blocked|attention)\b/i.test(r)||r.includes("\u26A0"))return t.fg("warning",e);if(/^[●✓]/.test(r))return t.fg("success",e);if(/^[○◌]/.test(r))return t.fg("muted",e);if(/^[✗⊘]/.test(r))return t.fg("error",e);const s=/^(\s*)-\s+([^:]+)(:\s*)(.*)$/.exec(e);if(s!==null)return U(s[1],n?"- ":"\u2022 ",s[2],s[3],s[4],t);const i=/^(\s*)\*\*([^*]+):\*\*(\s*)(.*)$/.exec(e);if(i!==null)return n?`${i[1]}${t.fg("dim","**")}${t.fg("dim",i[2])}${t.fg("dim",":**")}${i[3]}${t.fg("text",i[4])}`:U(i[1],"",i[2],`:${i[3]}`,i[4],t);if(/^\s*-\s+/.test(e)){const l=/^(\s*)-\s+(.*)$/.exec(e),d=n?"-":"\u2022";return`${l[1]}${t.fg("accent",d)} ${t.fg("text",l[2])}`}const o=/^(\s*)(\d+\s+[^:]+:)$/.exec(e);if(o!==null)return`${o[1]}${t.fg("toolTitle",t.bold(o[2]))}`;const u=/^(\s*)(Next:)(\s*)(.*)$/.exec(e);if(u!==null)return`${u[1]}${t.fg("accent",t.bold(u[2]))}${u[3]}${t.fg("text",u[4])}`;const a=/^(\s*)([├└│─┬┼┌┐┘└]+\s*)(.*)$/.exec(e);return a!==null?`${a[1]}${t.fg("border",a[2])}${t.fg("text",a[3])}`:t.fg("text",e)}c(z,"lineStyle");function B(e,t,n=!1){return(e||"(no output)").split(`
|
|
5
|
+
`).map(s=>z(s,t,n)).join(`
|
|
6
|
+
`)}c(B,"renderCrtrOutputText");function Pt(e){if(!e.startsWith("$ "))return e;const t=e.indexOf(`
|
|
7
|
+
`);if(t===-1)return"";const n=e.slice(t+1);return n.startsWith(`
|
|
8
|
+
`)?n.slice(1):n}c(Pt,"stripCrtrEchoPrefix");function Et(e){const t=/<command name="[^"]*"([^>]*)>/.exec(e);return t===null?"leaf":/\bdescription="/.test(t[1])?"branch":"root"}c(Et,"classifyHelpText");function It(e){const t=e.indexOf('<command name="'),n=(t===-1?e:e.slice(0,t)).trim(),r=[],s=/<command name="([^"]*)">\n([^\n]*)/g;let i;for(;(i=s.exec(e))!==null;)r.push(`${i[1]} \u2014 ${i[2]}`);return[n,...r.length>0?["",...r]:[]].join(`
|
|
9
|
+
`)}c(It,"synthesizeRootPreview");function Ot(e){const t=/^<command name="([^"]*)" description="([^"]*)">/.exec(e),n=t?.[1]??"",r=t?.[2]??"",s=[],i=/<subcommand name="([^"]*)" description="([^"]*)"[^>]*\/>/g;let o;for(;(o=i.exec(e))!==null;)s.push(`${o[1]} \u2014 ${o[2]}`);return[`${n} \u2014 ${r}`,...s.length>0?["",...s]:[]].join(`
|
|
10
|
+
`)}c(Ot,"synthesizeBranchPreview");function _t(e){const t=e.split(`
|
|
11
|
+
`),n=[t[0]??""],r=t.indexOf("Input");if(r===-1)return n.join(`
|
|
12
|
+
`);const s=t.findIndex(a=>a.startsWith("Output (")),i=s===-1?t.length:s,o=t.slice(r+1,i).filter(a=>a.trim()!==""),u=o.map(a=>/^\s{2}(\S+)/.exec(a)?.[1]);return o.length>0&&u.every(a=>a!==void 0)?n.push("",`Params: ${u.join(", ")}`):o.length>0&&n.push("",o[0]),n.join(`
|
|
13
|
+
`)}c(_t,"synthesizeLeafPreview");function At(e){const t=Pt(e),n=Et(t);return n==="root"?It(t):n==="branch"?Ot(t):_t(t)}c(At,"synthesizeHelpPreviewText");function D(e,t,n=!1){if(e.text==="")return"";const r=/^(.*?)(\s*:\s{2})(.*)$/.exec(e.text);if(r!==null&&(e.tone===void 0||e.tone==="plain"))return`${t.fg("dim",r[1])}${t.fg("dim",r[2])}${t.fg("text",r[3])}`;const s=e.tone??"plain";if(s==="muted")return t.fg("muted",e.text);const i=s==="plain"?"text":s,o=t.fg(i,e.text);return n&&s==="plain"?t.bold(o):o}c(D,"renderSummaryLine");function Lt(e,t){return e.isPartial?t.fg("warning","\u27F3 crtr running"):t.fg("error","\u2717 crtr failed")}c(Lt,"statusLine");const G={isHelp:!1,suppressOutput:!1};function $(e,t){return t<=0?e.map(()=>""):e.map(n=>R(n,t,"\u2026"))}c($,"clampRenderedLines");function k(e,t){return t<=0?e.map(()=>""):e.flatMap(n=>n===""?[""]:v(n,t))}c(k,"wrapRenderedLines");const Wt=/^\[Showing lines \d+-\d+ of \d+ \([^)]+ limit\)\. Full output: .+\]$/;function Ft(e){return Wt.test(e.trim())}c(Ft,"isPiTruncationMarker");function Y(e){const t=e.trim();if(!t.includes("|"))return null;const n=t.replace(/^\|/,"").replace(/\|$/,""),r=[];let s="",i=0;for(;i<n.length;){const o=n[i];if(o==="\\"&&n[i+1]==="|"){s+="|",i+=2;continue}if(o==="|"){r.push(s.trim()),s="",i++;continue}s+=o,i++}return r.push(s.trim()),r.length>=2?r:null}c(Y,"splitGenericTableRow");function Mt(e){return e.every(t=>/^:?-{3,}:?$/.test(t))}c(Mt,"isTableSeparator");function Nt(e){const t=e.trim();return t.startsWith("|")||t.endsWith("|")}c(Nt,"hasEdgePipe");function St(e,t){const n=Y(e[t]);if(n===null)return null;const r=[n];let s=t+1;for(;s<e.length;){const o=Y(e[s]);if(o===null||o.length!==n.length)break;r.push(o),s++}if(r.length===1&&!Nt(e[t]))return null;const i=r.findIndex(Mt);return i===1?{next:s,rows:[r[0],...r.slice(2)],headerRows:1}:i!==-1?{next:s,rows:r.filter((o,u)=>u!==i),headerRows:0}:{next:s,rows:r,headerRows:0}}c(St,"readGenericTableBlock");function jt(e){return e.reduce((t,n)=>t+n,0)}c(jt,"sum");function Ht(e,t){const n=e[0]?.length??0;if(n===0)return[];const r=Math.max(0,n-1)*2,s=Math.max(n,t-r),i=s>=n*3?3:1,o=Array.from({length:n},(u,a)=>Math.max(1,...e.map(l=>T(l[a]??""))));for(;jt(o)>s;){let u=-1;for(let a=0;a<o.length;a++)o[a]>i&&(u===-1||o[a]>o[u])&&(u=a);if(u===-1)break;o[u]=o[u]-1}return o}c(Ht,"tableColumnWidths");function Vt(e,t){const n=t-T(e);return n>0?`${e}${" ".repeat(n)}`:e}c(Vt,"padToVisibleWidth");function Ut(e,t){return e.map((n,r)=>Vt(R(n,t[r]??1,"\u2026"),t[r]??1)).join(" ").trimEnd()}c(Ut,"formatGenericTableRow");function zt(e,t){const n=(e||"(no output)").split(`
|
|
14
|
+
`),r=[],s=c(o=>{r.push(o)},"push");let i=0;for(;i<n.length;){const o=St(n,i);if(o!==null){const a=Ht(o.rows,t);for(let l=0;l<o.rows.length;l++)s({text:Ut(o.rows[l],a),tone:l<o.headerRows?"accent":void 0});i=o.next;continue}const u=n[i];s({text:u,tone:Ft(u)?"muted":void 0}),i++}return r}c(zt,"collectGenericPreviewLines");function Bt(e,t,n,r){const s=zt(e,n).map(o=>o.tone!==void 0?D(o,r,o.tone==="accent"):z(o.text,r)),i=k(s,n);return i.length<=t?{lines:i,skippedCount:0}:{lines:i.slice(0,t),skippedCount:i.length-t}}c(Bt,"renderGenericPreview");class I{static{c(this,"CrtrResultComponent")}text;options;context;theme;command;staticPreview;structuredPreview;constructor(t,n,r,s,i,o=G,u){this.text=t,this.options=n,this.context=r,this.theme=s,this.command=i,this.staticPreview=o,this.structuredPreview=u}currentPreview(){return this.command===void 0?this.staticPreview:pt(this.command)}render(t){const n=this.currentPreview(),r=!!this.options.isPartial,s=!!this.context.isError,o=r||s?[Lt(this.options,this.theme)]:[];if(this.options.expanded){const a=B(this.text,this.theme,!0),l=this.command!==void 0?[this.theme.fg("muted",`$ ${this.command}`),""]:[];return k(["",...o,...l,...a.split(`
|
|
15
|
+
`)],t)}if(!r){if(n.isHelp){const d=B(At(this.text),this.theme),p=O(d,P,t).visualLines??[],h=this.theme.fg("dim","(schema \u2014 ctrl+o to expand)");return $(["",...o,...p,h],t)}const a=this.command!==void 0?y(this.command):void 0,l=a!==void 0&&this.structuredPreview!==void 0?st(this.structuredPreview,a):null;if(l!==null){const d=l.findIndex(g=>g.text!==""),f=l.map((g,w)=>D(g,this.theme,w===d)),h=O(f.join(`
|
|
16
|
+
`),P,t).visualLines??[],b=this.theme.fg("dim","(ctrl+o to expand)");return $(["",...o,...h,b],t)}if(!s&&n.suppressOutput){const d=this.theme.fg("dim","(suppressed \u2014 ctrl+o to expand)");return $(["",...o,d],t)}}const u=Bt(this.text,P,t,this.theme);if(u.skippedCount>0){const a=this.theme.fg("dim",`\u2026 (${u.skippedCount} more lines, ctrl+o to expand)`);return $(["",...o,...u.lines,a],t)}return $(["",...o,...u.lines],t)}invalidate(){}}function Z(e){const t=e.split(`
|
|
17
|
+
`,1)[0];return t.startsWith("$ ")&&ft(t.slice(2))}c(Z,"isHelpFromCrtrOutputContent");class Jt extends J{static{c(this,"CrtrOutputMessageComponent")}content;theme;body;expanded;constructor(t,n,r){super(1,1,i=>r.bg("customMessageBg",i)),this.content=t,this.theme=r,this.expanded=n;const s={isHelp:Z(t),suppressOutput:!1};this.body=new I(t,{expanded:n},{},r,void 0,s),this.addChild(this.body)}setExpanded(t){if(this.expanded===t)return;this.expanded=t;const n={isHelp:Z(this.content),suppressOutput:!1};this.body=new I(this.content,{expanded:t},{},this.theme,void 0,n),this.clear(),this.addChild(this.body)}}function Qt(e,t=new ot){const n=M(e);if(!ut(n))return;let r=[];return{definition:{name:"bash",label:"bash",description:"Render crtr bash output with crtr-specific chrome in the attach viewer.",parameters:{},renderCall(o,u,a){const l=M(o)||n,d=y(l),f=d!==void 0&&d.some(m=>m==="-h"||m==="--help"),p=(d??[]).filter(m=>m!=="-h"&&m!=="--help"),h=p.join(" "),b=f?et:nt(p),g=f?`${b} crtr help`:`${b} crtr`,w=u.fg("accent",u.bold(g)),x=t.folded&&!f?xt(p,r):void 0;if(x!==void 0){const m=x.name===""?"":` ${u.fg("toolTitle",u.bold(x.name))}`,q=`${w} ${u.fg("toolTitle",u.bold(x.leaf))}${m}`;return t.capture(new Ct(q,Tt(x,u)))}const K=h?` ${t.folded?Rt(p,u):u.fg("toolTitle",u.bold(h))}`:"";return t.capture(new Q(`${w}${K}`,0,0))},renderResult(o,u,a,l){return new I(vt(o),u,l,a,n,G,A(o).at(-1))}},observeResult:c((o,u)=>{u||(r=A(o))},"observeResult")}}c(Qt,"createCrtrBashToolDefinition");export{Xt as CRTR_OUTPUT_CUSTOM_TYPE,Jt as CrtrOutputMessageComponent,pt as commandPreviewMeta,Qt as createCrtrBashToolDefinition,ut as isCrtrBashCommand,ft as isCrtrHelpInvocation,B as renderCrtrOutputText,F as stripHeredocBodies};
|