@north-light/crouter 0.3.317 → 0.3.319
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.d.ts +1 -1
- 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 +1 -1
- 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.d.ts +3 -2
- package/dist/core/runtime/warm-pool.js +1 -385
- 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 -943
- 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 -5
- package/runtime.lock.json +5 -5
- 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 -107
- 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,719 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const RENDERER_CACHE_DIR = join(resolve(process.env.XDG_CACHE_HOME || join(homedir(), '.cache')), 'crouter', 'termrender', TERMRENDER_VERSION);
|
|
16
|
-
const VENV_DIR = join(RENDERER_CACHE_DIR, 'venv');
|
|
17
|
-
const VENV_BIN = join(VENV_DIR, 'bin/termrender');
|
|
18
|
-
const VENV_PYTHON = join(VENV_DIR, 'bin/python');
|
|
19
|
-
// Readiness marker written by the single authoritative provisioning transition
|
|
20
|
-
// after a verified install. It fingerprints the ACTUAL verified environment —
|
|
21
|
-
// launcher + interpreter (mtime, size, mode) and the interpreter's realpath —
|
|
22
|
-
// so steady-state validation is a handful of cheap fs stats (no subprocess),
|
|
23
|
-
// yet a stripped exec bit, a swapped venv Python, or a rewritten launcher all
|
|
24
|
-
// invalidate it. Deeper corruption an fs stat can't see (e.g. mangled
|
|
25
|
-
// site-packages under an unchanged launcher) is caught by the other half of
|
|
26
|
-
// the contract: any `ready` invocation that fails to RUN invalidates this
|
|
27
|
-
// marker (see invalidateRenderer), so the next process repairs. Together these
|
|
28
|
-
// remove the ~149ms `termrender -h` + `importlib.metadata` spawn tax from the
|
|
29
|
-
// steady path without letting a stale marker trust a broken renderer forever.
|
|
30
|
-
const VENV_STAMP = join(VENV_DIR, '.crtr-termrender-stamp.json');
|
|
31
|
-
// Provisioning lock — lives OUTSIDE .venv (which `uv venv --clear` wipes) so it
|
|
32
|
-
// survives a reinstall. The user cache stays writable when crouter is installed
|
|
33
|
-
// in a read-only runtime image, and serializes venv mutation + stamp publication
|
|
34
|
-
// across processes: a stamp can never certify a concurrently-changing venv.
|
|
35
|
-
const VENV_LOCK = join(RENDERER_CACHE_DIR, '.crtr-termrender.lock');
|
|
36
|
-
// Absolute cap on how long a waiter spins before giving up to plaintext for
|
|
37
|
-
// this session (the next launch retries) — a safety valve so a wedged holder
|
|
38
|
-
// can never hang a process. Set comfortably above the worst-case held path
|
|
39
|
-
// (uv probe 5s + venv 60s + install 120s + re-verify ~10s ≈ 195s).
|
|
40
|
-
const LOCK_GIVE_UP_MS = 360_000;
|
|
41
|
-
let rendererState = 'unchecked';
|
|
42
|
-
function isFp(x) {
|
|
43
|
-
const e = x;
|
|
44
|
-
return !!e && typeof e.mtimeMs === 'number' && typeof e.size === 'number' && typeof e.mode === 'number';
|
|
45
|
-
}
|
|
46
|
-
function fingerprint(path) {
|
|
47
|
-
try {
|
|
48
|
-
const s = statSync(path);
|
|
49
|
-
return { mtimeMs: s.mtimeMs, size: s.size, mode: s.mode };
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function fpMatch(a, b) {
|
|
56
|
-
return !!a && a.mtimeMs === b.mtimeMs && a.size === b.size && a.mode === b.mode;
|
|
57
|
-
}
|
|
58
|
-
function readStamp() {
|
|
59
|
-
try {
|
|
60
|
-
const p = JSON.parse(readFileSync(VENV_STAMP, 'utf8'));
|
|
61
|
-
if (p && typeof p.version === 'string' && isFp(p.bin) && isFp(p.python) && typeof p.pythonRealpath === 'string') {
|
|
62
|
-
return p;
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Publish the readiness marker for the state we just verified. Failure to
|
|
71
|
-
// persist is surfaced explicitly (not swallowed): the renderer works for THIS
|
|
72
|
-
// process, but every future launch re-verifies the slow way until the marker
|
|
73
|
-
// can be written — the operator should know why launches stay slow.
|
|
74
|
-
function publishStamp() {
|
|
75
|
-
const bin = fingerprint(VENV_BIN);
|
|
76
|
-
const python = fingerprint(VENV_PYTHON);
|
|
77
|
-
if (!bin || !python) {
|
|
78
|
-
process.stderr.write('[crtr] termrender stamp skipped: venv files vanished immediately after verify\n');
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
let pythonRealpath;
|
|
82
|
-
try {
|
|
83
|
-
pythonRealpath = realpathSync(VENV_PYTHON);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
pythonRealpath = VENV_PYTHON;
|
|
87
|
-
}
|
|
88
|
-
const stamp = { version: TERMRENDER_VERSION, bin, python, pythonRealpath };
|
|
89
|
-
// Atomic publish: write a temp then rename, so a crash mid-write can't leave
|
|
90
|
-
// a half-written stamp and a concurrent reader never observes a torn file.
|
|
91
|
-
const tmp = `${VENV_STAMP}.${process.pid}.tmp`;
|
|
92
|
-
try {
|
|
93
|
-
writeFileSync(tmp, JSON.stringify(stamp));
|
|
94
|
-
renameSync(tmp, VENV_STAMP);
|
|
95
|
-
}
|
|
96
|
-
catch (err) {
|
|
97
|
-
try {
|
|
98
|
-
unlinkSync(tmp);
|
|
99
|
-
}
|
|
100
|
-
catch { /* nothing to clean up */ }
|
|
101
|
-
process.stderr.write(`[crtr] termrender ready but stamp not persisted (${err instanceof Error ? err.message : String(err)}); ` +
|
|
102
|
-
'future launches will re-verify the slow way\n');
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Invalidate the readiness marker when a supposedly-ready renderer misbehaves
|
|
106
|
-
// in a way that implicates the environment (spawn fault, or a `doc render`
|
|
107
|
-
// failure — render is best-effort by contract, so ANY failure means the tool,
|
|
108
|
-
// not the input, is broken; this catches site-packages corruption an fs stat
|
|
109
|
-
// can't see). Removes the on-disk marker so the next process repairs, and
|
|
110
|
-
// downgrades THIS process to plaintext to avoid retry thrash within the session.
|
|
111
|
-
function invalidateRenderer(reason) {
|
|
112
|
-
let removed = true;
|
|
113
|
-
try {
|
|
114
|
-
unlinkSync(VENV_STAMP);
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
// ENOENT means it's already gone (still invalidated); any other error means
|
|
118
|
-
// the marker SURVIVES and will keep certifying — say so honestly rather
|
|
119
|
-
// than promising a repair that can't happen until the file is removable.
|
|
120
|
-
if (err.code !== 'ENOENT')
|
|
121
|
-
removed = false;
|
|
122
|
-
}
|
|
123
|
-
rendererState = 'unavailable';
|
|
124
|
-
if (removed) {
|
|
125
|
-
process.stderr.write(`[crtr] termrender invocation failed (${reason}); invalidated readiness, future launches will repair\n`);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
process.stderr.write(`[crtr] termrender invocation failed (${reason}) but its readiness marker could not be removed; ` +
|
|
129
|
-
`future launches may keep trusting a broken renderer until ${VENV_STAMP} is deleted\n`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// True when a spawn was killed by its own timeout rather than failing to run —
|
|
133
|
-
// usually a slow/large document, not a broken environment. Excluded from
|
|
134
|
-
// invalidation so a reliably-slow render can't oscillate a healthy renderer
|
|
135
|
-
// (invalidate → slow re-verify → re-stamp) every session.
|
|
136
|
-
function isTimeout(err) {
|
|
137
|
-
const e = err;
|
|
138
|
-
return e?.code === 'ETIMEDOUT' || (!!e?.killed && !!e?.signal);
|
|
139
|
-
}
|
|
140
|
-
// Cheap steady-state trust — all fs stats, no subprocess. The pinned launcher
|
|
141
|
-
// is present, executable, and byte-for-byte the one the stamp verified; the
|
|
142
|
-
// interpreter it targets is the same file at the same realpath. Any of these
|
|
143
|
-
// drifting (version bump, stripped exec bit, rewritten launcher, swapped venv
|
|
144
|
-
// Python) forces the authoritative re-provision transition.
|
|
145
|
-
function stampValid() {
|
|
146
|
-
const stamp = readStamp();
|
|
147
|
-
if (!stamp || stamp.version !== TERMRENDER_VERSION)
|
|
148
|
-
return false;
|
|
149
|
-
try {
|
|
150
|
-
accessSync(VENV_BIN, constants.X_OK);
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
if (!fpMatch(fingerprint(VENV_BIN), stamp.bin))
|
|
156
|
-
return false;
|
|
157
|
-
if (!fpMatch(fingerprint(VENV_PYTHON), stamp.python))
|
|
158
|
-
return false;
|
|
159
|
-
try {
|
|
160
|
-
if (realpathSync(VENV_PYTHON) !== stamp.pythonRealpath)
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
return true;
|
|
167
|
-
}
|
|
168
|
-
// Run `provision` holding the exclusive provisioning lock, so no two processes
|
|
169
|
-
// mutate the venv (or certify it) at once. A crashed holder is reclaimed at
|
|
170
|
-
// once; a live one is waited on, and if it outlasts the give-up window this
|
|
171
|
-
// process falls back to plaintext for the session rather than break mutual
|
|
172
|
-
// exclusion. `provision` re-checks the stamp first, so a waiter that finally
|
|
173
|
-
// acquires adopts the peer's published result instead of reinstalling.
|
|
174
|
-
function withProvisionLock(provision) {
|
|
175
|
-
try {
|
|
176
|
-
mkdirSync(RENDERER_CACHE_DIR, { recursive: true });
|
|
177
|
-
}
|
|
178
|
-
catch (err) {
|
|
179
|
-
rendererState = 'unavailable';
|
|
180
|
-
process.stderr.write(`[crtr] termrender unavailable — renderer cache cannot be created (${err instanceof Error ? err.message : String(err)}); using plaintext fallback\n`);
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
try {
|
|
184
|
-
withExclusiveDirectoryLock(VENV_LOCK, provision, { timeoutMs: LOCK_GIVE_UP_MS });
|
|
185
|
-
}
|
|
186
|
-
catch {
|
|
187
|
-
rendererState = 'unavailable';
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
function binaryOk() {
|
|
191
|
-
if (!existsSync(VENV_BIN))
|
|
192
|
-
return false;
|
|
193
|
-
try {
|
|
194
|
-
// v2 contract: no --version flag; use -h (exit 0) as a liveness check.
|
|
195
|
-
execFileSync(VENV_BIN, ['-h'], {
|
|
196
|
-
encoding: 'utf8',
|
|
197
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
198
|
-
timeout: 5000,
|
|
199
|
-
});
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
// Returns the termrender version installed in the managed venv (via
|
|
207
|
-
// importlib.metadata), or null if the venv is missing/broken or termrender is
|
|
208
|
-
// not installed. Used by ensureRenderer() to detect drift from the pin and
|
|
209
|
-
// trigger a reinstall — otherwise a venv provisioned at an older pin sticks
|
|
210
|
-
// forever (binaryOk passes for any working binary, regardless of version).
|
|
211
|
-
function installedVersion() {
|
|
212
|
-
if (!existsSync(VENV_PYTHON))
|
|
213
|
-
return null;
|
|
214
|
-
try {
|
|
215
|
-
const out = execFileSync(VENV_PYTHON, ['-c', 'import importlib.metadata as m; print(m.version("termrender"))'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 5000 });
|
|
216
|
-
return out.trim() || null;
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
return null;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
function uvAvailable() {
|
|
223
|
-
try {
|
|
224
|
-
execFileSync('uv', ['--version'], { stdio: 'pipe', timeout: 5000 });
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
catch {
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Memoized, self-healing. Guarantees at most one authoritative renderer
|
|
233
|
-
* lifecycle per process: trust a valid stamp outright (zero subprocess spawns),
|
|
234
|
-
* else run ONE provision/verify/publish transition under the exclusive lock.
|
|
235
|
-
* There is no permanent legacy-verifier fallback — the spawn-based verify
|
|
236
|
-
* (`binaryOk` + `installedVersion`) is a step INSIDE that single transition,
|
|
237
|
-
* always followed by publishing the stamp, never a lasting alternate path.
|
|
238
|
-
*
|
|
239
|
-
* Single degradation path: `uv` absent → one stderr remediation line + plaintext.
|
|
240
|
-
* win32 → plaintext (no renderer).
|
|
241
|
-
*
|
|
242
|
-
* Invoked at postinstall AND lazily on the first render/check/display call,
|
|
243
|
-
* so `npm ci --ignore-scripts` consumers still self-heal on first use.
|
|
244
|
-
*/
|
|
245
|
-
export function ensureRenderer() {
|
|
246
|
-
if (rendererState !== 'unchecked')
|
|
247
|
-
return;
|
|
248
|
-
if (process.platform === 'win32') {
|
|
249
|
-
rendererState = 'unavailable';
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
// Steady state: trust the stamp — zero subprocess spawns.
|
|
253
|
-
if (stampValid()) {
|
|
254
|
-
rendererState = 'ready';
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
// No/invalid stamp → the single authoritative transition, serialized so no
|
|
258
|
-
// two processes mutate the venv (or certify it) concurrently.
|
|
259
|
-
provisionAndPublish();
|
|
260
|
-
}
|
|
261
|
-
// The one invalid-stamp transition. Under the exclusive lock: adopt a stamp a
|
|
262
|
-
// racing process just published; else verify the current venv (a healthy venv
|
|
263
|
-
// with no/stale stamp — an interrupted publish, or a peer
|
|
264
|
-
// that finished the venv but not the stamp — needs only re-verification, not a
|
|
265
|
-
// reinstall); reinstall via `uv` only when genuinely missing/drifted; then
|
|
266
|
-
// verify and publish. Every success path ends by publishing the stamp.
|
|
267
|
-
function provisionAndPublish() {
|
|
268
|
-
withProvisionLock(() => {
|
|
269
|
-
// A peer may have published between our unlocked stampValid() in
|
|
270
|
-
// ensureRenderer and our acquiring the lock here — adopt it, don't reinstall.
|
|
271
|
-
if (stampValid()) {
|
|
272
|
-
rendererState = 'ready';
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
let verified = binaryOk() && installedVersion() === TERMRENDER_VERSION;
|
|
276
|
-
if (!verified) {
|
|
277
|
-
if (!uvAvailable()) {
|
|
278
|
-
process.stderr.write('[crtr] termrender unavailable — install uv to enable rich rendering:\n' +
|
|
279
|
-
' curl -LsSf https://astral.sh/uv/install.sh | sh\n');
|
|
280
|
-
rendererState = 'unavailable';
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
try {
|
|
284
|
-
// (Re)create the venv whenever the interpreter is missing — covers both
|
|
285
|
-
// "directory absent" and "directory present but bin/python stripped"
|
|
286
|
-
// (seen when pnpm rebuilds/dedupes node_modules or uv rotates its
|
|
287
|
-
// managed Python store). `--clear` wipes any partial state rather than
|
|
288
|
-
// refusing on the existing dir. Intact interpreter → reuse the venv.
|
|
289
|
-
if (!existsSync(VENV_PYTHON)) {
|
|
290
|
-
execFileSync('uv', ['venv', '--clear', VENV_DIR], { stdio: 'pipe', timeout: 60000 });
|
|
291
|
-
}
|
|
292
|
-
// `--reinstall` forces uv to rebuild the package and rewrite its entry
|
|
293
|
-
// point even when the pinned version already appears satisfied — so this
|
|
294
|
-
// path actually REPAIRS a corrupt-but-present install (the case that
|
|
295
|
-
// drove us here via invalidation), not just a clean version drift.
|
|
296
|
-
execFileSync('uv', ['pip', 'install', '--reinstall', '--python', VENV_PYTHON, `termrender==${TERMRENDER_VERSION}`], { stdio: 'pipe', timeout: 120000 });
|
|
297
|
-
}
|
|
298
|
-
catch (err) {
|
|
299
|
-
process.stderr.write(`[crtr] termrender install failed (${err instanceof Error ? err.message : String(err)}); using plaintext fallback\n`);
|
|
300
|
-
rendererState = 'unavailable';
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
verified = binaryOk() && installedVersion() === TERMRENDER_VERSION;
|
|
304
|
-
}
|
|
305
|
-
if (!verified) {
|
|
306
|
-
rendererState = 'unavailable';
|
|
307
|
-
process.stderr.write('[crtr] termrender install completed but health check failed; using plaintext fallback\n');
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
publishStamp();
|
|
311
|
-
rendererState = 'ready';
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
/** Cheap predicate — true when the pinned managed binary is verified ready. Does not install or spawn. */
|
|
315
|
-
export function isRendererReady() {
|
|
316
|
-
if (rendererState === 'ready')
|
|
317
|
-
return true;
|
|
318
|
-
if (rendererState === 'unavailable')
|
|
319
|
-
return false;
|
|
320
|
-
return process.platform !== 'win32' && stampValid();
|
|
321
|
-
}
|
|
322
|
-
// ── Plaintext fallback helpers (kept here so this is the only termrender site) ─
|
|
323
|
-
const CONTROL_CHARS_RE = /\x1b\[[0-9;?]*[a-zA-Z]|\x1b[@-_]|[\x00-\x08\x0B\x0E-\x1F\x7F-\x9F]/g;
|
|
324
|
-
function sanitize(text) {
|
|
325
|
-
if (typeof text !== 'string')
|
|
326
|
-
return '';
|
|
327
|
-
return text.replace(CONTROL_CHARS_RE, '');
|
|
328
|
-
}
|
|
329
|
-
function sliceByWidth(s, maxWidth) {
|
|
330
|
-
let w = 0;
|
|
331
|
-
let out = '';
|
|
332
|
-
for (const ch of s) {
|
|
333
|
-
const cw = stringWidth(ch);
|
|
334
|
-
if (w + cw > maxWidth)
|
|
335
|
-
break;
|
|
336
|
-
out += ch;
|
|
337
|
-
w += cw;
|
|
338
|
-
}
|
|
339
|
-
if (out === '' && s.length > 0)
|
|
340
|
-
out = [...s][0];
|
|
341
|
-
return out;
|
|
342
|
-
}
|
|
343
|
-
function wrap(text, maxWidth) {
|
|
344
|
-
if (maxWidth < 1)
|
|
345
|
-
return [text];
|
|
346
|
-
const out = [];
|
|
347
|
-
const paragraphs = text.split('\n');
|
|
348
|
-
for (let p = 0; p < paragraphs.length; p++) {
|
|
349
|
-
const para = paragraphs[p];
|
|
350
|
-
if (para === '') {
|
|
351
|
-
out.push('');
|
|
352
|
-
continue;
|
|
353
|
-
}
|
|
354
|
-
const words = para.split(/[ \t]+/).filter(Boolean);
|
|
355
|
-
let current = '';
|
|
356
|
-
for (let word of words) {
|
|
357
|
-
while (stringWidth(word) > maxWidth) {
|
|
358
|
-
if (current) {
|
|
359
|
-
out.push(current);
|
|
360
|
-
current = '';
|
|
361
|
-
}
|
|
362
|
-
const piece = sliceByWidth(word, maxWidth);
|
|
363
|
-
out.push(piece);
|
|
364
|
-
word = word.slice(piece.length);
|
|
365
|
-
}
|
|
366
|
-
const candidate = current ? `${current} ${word}` : word;
|
|
367
|
-
if (stringWidth(candidate) <= maxWidth) {
|
|
368
|
-
current = candidate;
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
if (current)
|
|
372
|
-
out.push(current);
|
|
373
|
-
current = word;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
if (current)
|
|
377
|
-
out.push(current);
|
|
378
|
-
}
|
|
379
|
-
return out.length > 0 ? out : [''];
|
|
380
|
-
}
|
|
381
|
-
// ── Render surface ───────────────────────────────────────────────────────────
|
|
382
|
-
/** Simple bounded LRU cache: evicts the oldest (first) entry when maxEntries is reached.
|
|
383
|
-
* Preserves Map's insertion-order invariant so iteration order is LRU order. */
|
|
384
|
-
class BoundedLRUCache {
|
|
385
|
-
map = new Map();
|
|
386
|
-
maxEntries;
|
|
387
|
-
constructor(maxEntries) {
|
|
388
|
-
this.maxEntries = maxEntries;
|
|
389
|
-
}
|
|
390
|
-
get(key) {
|
|
391
|
-
if (!this.map.has(key))
|
|
392
|
-
return undefined;
|
|
393
|
-
const value = this.map.get(key);
|
|
394
|
-
// Move to end (most recently used) by delete+re-insert.
|
|
395
|
-
this.map.delete(key);
|
|
396
|
-
this.map.set(key, value);
|
|
397
|
-
return value;
|
|
398
|
-
}
|
|
399
|
-
set(key, value) {
|
|
400
|
-
// Remove if exists to update order.
|
|
401
|
-
if (this.map.has(key)) {
|
|
402
|
-
this.map.delete(key);
|
|
403
|
-
}
|
|
404
|
-
else if (this.map.size >= this.maxEntries) {
|
|
405
|
-
// Evict oldest (first entry in iteration order).
|
|
406
|
-
const firstKey = this.map.keys().next().value;
|
|
407
|
-
this.map.delete(firstKey);
|
|
408
|
-
}
|
|
409
|
-
this.map.set(key, value);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
const _bodyCache = new BoundedLRUCache(20);
|
|
413
|
-
/** Render markdown to terminal lines via the pinned binary; plaintext fallback.
|
|
414
|
-
* Callers own the returned array — every return is a fresh copy, so a caller
|
|
415
|
-
* that appends to it cannot grow the cached render on the next hit. */
|
|
416
|
-
export function renderMarkdown(md, width) {
|
|
417
|
-
const key = `${md}\0${width}`;
|
|
418
|
-
const cached = _bodyCache.get(key);
|
|
419
|
-
if (cached)
|
|
420
|
-
return [...cached];
|
|
421
|
-
ensureRenderer();
|
|
422
|
-
if (rendererState === 'ready') {
|
|
423
|
-
try {
|
|
424
|
-
const out = execFileSync(VENV_BIN, ['doc', 'render', '--width', String(width), '--color', 'on'], {
|
|
425
|
-
input: md,
|
|
426
|
-
encoding: 'utf-8',
|
|
427
|
-
timeout: 5000,
|
|
428
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
429
|
-
});
|
|
430
|
-
const lines = out.split('\n');
|
|
431
|
-
if (lines.length > 0 && lines[lines.length - 1] === '')
|
|
432
|
-
lines.pop();
|
|
433
|
-
_bodyCache.set(key, lines);
|
|
434
|
-
return [...lines];
|
|
435
|
-
}
|
|
436
|
-
catch (err) {
|
|
437
|
-
// `doc render` is best-effort, so a non-timeout failure implicates the
|
|
438
|
-
// tool, not the markdown: invalidate so the next process repairs. A
|
|
439
|
-
// timeout is a slow/large doc, not corruption — just fall to plaintext.
|
|
440
|
-
if (!isTimeout(err))
|
|
441
|
-
invalidateRenderer('doc render');
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
const fallback = wrap(sanitize(md), width);
|
|
445
|
-
_bodyCache.set(key, fallback);
|
|
446
|
-
return [...fallback];
|
|
447
|
-
}
|
|
448
|
-
/** Block types allowed to use the full pane width instead of the prose cap:
|
|
449
|
-
* a diagram is a picture, not prose, so a readability column limit only
|
|
450
|
-
* shrinks it below what the pane could show. */
|
|
451
|
-
const WIDE_BLOCK_TYPES = new Set(['mermaid']);
|
|
452
|
-
/** Validate + normalize `doc render --line-map` JSON into a RenderedDoc.
|
|
453
|
-
* Null block bounds (a scanner edge case) are filled from neighbors and
|
|
454
|
-
* clamped into the source range; an empty block list gets one whole-doc
|
|
455
|
-
* block so callers can always anchor. Malformed shape → null (tool fault). */
|
|
456
|
-
function parseRenderedDoc(out, source) {
|
|
457
|
-
let parsed;
|
|
458
|
-
try {
|
|
459
|
-
parsed = JSON.parse(out);
|
|
460
|
-
}
|
|
461
|
-
catch {
|
|
462
|
-
return null;
|
|
463
|
-
}
|
|
464
|
-
const p = parsed;
|
|
465
|
-
if (!Array.isArray(p.lines) || !Array.isArray(p.rows) || !Array.isArray(p.spans) || !Array.isArray(p.blocks))
|
|
466
|
-
return null;
|
|
467
|
-
if (p.rows.length !== p.lines.length || p.spans.length !== p.lines.length)
|
|
468
|
-
return null;
|
|
469
|
-
if (!p.lines.every((l) => typeof l === 'string'))
|
|
470
|
-
return null;
|
|
471
|
-
const blockCount = p.blocks.length;
|
|
472
|
-
if (!p.rows.every((r) => r === null || (typeof r === 'number' && Number.isInteger(r) && r >= 0 && r < blockCount)))
|
|
473
|
-
return null;
|
|
474
|
-
const totalSource = Math.max(1, source.split('\n').length);
|
|
475
|
-
const blocks = [];
|
|
476
|
-
let prevEnd = 0;
|
|
477
|
-
for (const raw of p.blocks) {
|
|
478
|
-
if (typeof raw !== 'object' || raw === null)
|
|
479
|
-
return null;
|
|
480
|
-
// The block type is what lets callers render diagrams differently from
|
|
481
|
-
// prose; a map without it cannot drive block-aware rendering at all.
|
|
482
|
-
if (typeof raw.type !== 'string' || raw.type === '')
|
|
483
|
-
return null;
|
|
484
|
-
// Bounds are integers or null — a fractional bound would otherwise flow
|
|
485
|
-
// into a recorded comment's line/endLine instead of tripping tool-fault.
|
|
486
|
-
if (raw.start != null && !Number.isInteger(raw.start))
|
|
487
|
-
return null;
|
|
488
|
-
if (raw.end != null && !Number.isInteger(raw.end))
|
|
489
|
-
return null;
|
|
490
|
-
const start = typeof raw.start === 'number' ? raw.start : prevEnd + 1;
|
|
491
|
-
const end = typeof raw.end === 'number' ? Math.max(raw.end, start) : start;
|
|
492
|
-
const s = Math.max(1, Math.min(start, totalSource));
|
|
493
|
-
const e = Math.max(s, Math.min(end, totalSource));
|
|
494
|
-
blocks.push({ type: raw.type, start: s, end: e });
|
|
495
|
-
prevEnd = e;
|
|
496
|
-
}
|
|
497
|
-
if (blocks.length === 0)
|
|
498
|
-
blocks.push({ type: 'paragraph', start: 1, end: totalSource });
|
|
499
|
-
const spans = [];
|
|
500
|
-
for (let r = 0; r < p.spans.length; r++) {
|
|
501
|
-
const raw = p.spans[r];
|
|
502
|
-
if (raw === null) {
|
|
503
|
-
spans.push(null);
|
|
504
|
-
continue;
|
|
505
|
-
}
|
|
506
|
-
// Same strictness as rows: a span is [start, end], 1-indexed inclusive
|
|
507
|
-
// integers in order, inside the source — these values flow straight into
|
|
508
|
-
// a recorded comment's line/endLine, so an out-of-range endpoint is tool
|
|
509
|
-
// fault to reject, never something to clamp into the wrong line.
|
|
510
|
-
if (!Array.isArray(raw) || raw.length !== 2)
|
|
511
|
-
return null;
|
|
512
|
-
const [s, e] = raw;
|
|
513
|
-
if (!Number.isInteger(s) || !Number.isInteger(e))
|
|
514
|
-
return null;
|
|
515
|
-
if (s < 1 || e < s || e > totalSource)
|
|
516
|
-
return null;
|
|
517
|
-
// Relational contract: a separator row (rows[r] === null) carries no
|
|
518
|
-
// span, and a leaf span stays inside its owning block's source range. A
|
|
519
|
-
// map that disagrees with its own rows/blocks would let a comment on a
|
|
520
|
-
// visible row record against unrelated source text.
|
|
521
|
-
const rowBlock = p.rows[r];
|
|
522
|
-
if (rowBlock === null)
|
|
523
|
-
return null;
|
|
524
|
-
const owner = blocks[rowBlock];
|
|
525
|
-
if (s < owner.start || e > owner.end)
|
|
526
|
-
return null;
|
|
527
|
-
spans.push([s, e]);
|
|
528
|
-
}
|
|
529
|
-
return { lines: p.lines, rows: p.rows, spans, blocks };
|
|
530
|
-
}
|
|
531
|
-
/** Renderer-free mapped render: group consecutive non-blank source lines into
|
|
532
|
-
* paragraph blocks and word-wrap each — the same shape as the termrender map,
|
|
533
|
-
* with degraded (plaintext) rendering. Each source line is wrapped on its own
|
|
534
|
-
* and spans exactly itself, so leaf anchoring degrades to true line-by-line. */
|
|
535
|
-
function fallbackDocWithMap(md, width) {
|
|
536
|
-
const src = sanitize(md).split('\n');
|
|
537
|
-
const blocks = [];
|
|
538
|
-
let openAt = null;
|
|
539
|
-
for (let i = 0; i < src.length; i++) {
|
|
540
|
-
if (src[i].trim() !== '') {
|
|
541
|
-
if (openAt === null)
|
|
542
|
-
openAt = i;
|
|
543
|
-
}
|
|
544
|
-
else if (openAt !== null) {
|
|
545
|
-
blocks.push({ type: 'paragraph', start: openAt + 1, end: i });
|
|
546
|
-
openAt = null;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
if (openAt !== null)
|
|
550
|
-
blocks.push({ type: 'paragraph', start: openAt + 1, end: src.length });
|
|
551
|
-
if (blocks.length === 0)
|
|
552
|
-
blocks.push({ type: 'paragraph', start: 1, end: Math.max(1, src.length) });
|
|
553
|
-
const lines = [];
|
|
554
|
-
const rows = [];
|
|
555
|
-
const spans = [];
|
|
556
|
-
blocks.forEach((b, bi) => {
|
|
557
|
-
if (bi > 0) {
|
|
558
|
-
lines.push('');
|
|
559
|
-
rows.push(null);
|
|
560
|
-
spans.push(null);
|
|
561
|
-
}
|
|
562
|
-
// wrap() treats each '\n'-separated line as its own paragraph, so wrapping
|
|
563
|
-
// line-by-line emits the exact rows the joined-block wrap produced.
|
|
564
|
-
for (let ln = b.start; ln <= b.end; ln++) {
|
|
565
|
-
for (const l of wrap(src[ln - 1] ?? '', width)) {
|
|
566
|
-
lines.push(l);
|
|
567
|
-
rows.push(bi);
|
|
568
|
-
spans.push([ln, ln]);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
});
|
|
572
|
-
return { lines, rows, spans, blocks };
|
|
573
|
-
}
|
|
574
|
-
const _mapCache = new BoundedLRUCache(20);
|
|
575
|
-
/** Render markdown with a row→source-line map via the pinned binary
|
|
576
|
-
* (`doc render --line-map`); plaintext paragraph-block fallback. */
|
|
577
|
-
export function renderMarkdownWithMap(md, width) {
|
|
578
|
-
const key = `${md}\0${width}`;
|
|
579
|
-
const cached = _mapCache.get(key);
|
|
580
|
-
if (cached)
|
|
581
|
-
return cached;
|
|
582
|
-
ensureRenderer();
|
|
583
|
-
if (rendererState === 'ready') {
|
|
584
|
-
try {
|
|
585
|
-
const out = execFileSync(VENV_BIN, ['doc', 'render', '--width', String(width), '--color', 'on', '--line-map'], {
|
|
586
|
-
input: md,
|
|
587
|
-
encoding: 'utf-8',
|
|
588
|
-
timeout: 5000,
|
|
589
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
590
|
-
// JSON-escaped ANSI inflates well past execFileSync's 1MB default.
|
|
591
|
-
maxBuffer: 64 * 1024 * 1024,
|
|
592
|
-
});
|
|
593
|
-
const doc = parseRenderedDoc(out.trim(), md);
|
|
594
|
-
if (doc !== null) {
|
|
595
|
-
_mapCache.set(key, doc);
|
|
596
|
-
return doc;
|
|
597
|
-
}
|
|
598
|
-
// A working renderer never emits a malformed map — tool fault.
|
|
599
|
-
invalidateRenderer('doc render --line-map (malformed output)');
|
|
600
|
-
}
|
|
601
|
-
catch (err) {
|
|
602
|
-
// Same contract as renderMarkdown: non-timeout failure implicates the
|
|
603
|
-
// tool; a timeout is a slow/large doc — just fall to the local map.
|
|
604
|
-
if (!isTimeout(err))
|
|
605
|
-
invalidateRenderer('doc render --line-map');
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
// The fallback is cheap to recompute and deliberately NOT cached: a
|
|
609
|
-
// transient failure (e.g. a timeout) must not pin degraded block anchoring
|
|
610
|
-
// for the rest of the session when a later re-render could succeed.
|
|
611
|
-
return fallbackDocWithMap(md, width);
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* The shared block-aware mapped render: prose blocks keep the readability cap
|
|
615
|
-
* (`proseWidth`), while diagram blocks are re-rendered at the pane's full
|
|
616
|
-
* `paneWidth` and spliced back in by block index. Both surfaces (terminal
|
|
617
|
-
* review and the ask page) go through this, so "which blocks may be wide" is
|
|
618
|
-
* decided once, from the renderer's own block types, never by heuristics on
|
|
619
|
-
* the emitted rows.
|
|
620
|
-
*
|
|
621
|
-
* Row order, block list and source spans are the narrow render's; only the
|
|
622
|
-
* rows OF a wide block are replaced, so anchoring stays source-based and
|
|
623
|
-
* unchanged.
|
|
624
|
-
*/
|
|
625
|
-
export function renderMarkdownBlockAware(md, proseWidth, paneWidth) {
|
|
626
|
-
const base = renderMarkdownWithMap(md, proseWidth);
|
|
627
|
-
if (paneWidth <= proseWidth)
|
|
628
|
-
return base;
|
|
629
|
-
if (!base.blocks.some((b) => WIDE_BLOCK_TYPES.has(b.type)))
|
|
630
|
-
return base;
|
|
631
|
-
const wide = renderMarkdownWithMap(md, paneWidth);
|
|
632
|
-
// Same source, so the two renders describe the same top-level blocks. A
|
|
633
|
-
// disagreement means one of the two maps is degraded (renderer failure mid
|
|
634
|
-
// session) — render the narrow one rather than splice mismatched rows.
|
|
635
|
-
if (wide.blocks.length !== base.blocks.length)
|
|
636
|
-
return base;
|
|
637
|
-
const lines = [];
|
|
638
|
-
const rows = [];
|
|
639
|
-
const spans = [];
|
|
640
|
-
for (let r = 0; r < base.lines.length; r++) {
|
|
641
|
-
const bi = base.rows[r] ?? null;
|
|
642
|
-
if (bi === null || !WIDE_BLOCK_TYPES.has(base.blocks[bi].type)) {
|
|
643
|
-
lines.push(base.lines[r]);
|
|
644
|
-
rows.push(bi);
|
|
645
|
-
spans.push(base.spans[r] ?? null);
|
|
646
|
-
continue;
|
|
647
|
-
}
|
|
648
|
-
// First row of this block's run: emit the wide render's rows for the same
|
|
649
|
-
// block, then skip the narrow run (a block's rows are contiguous).
|
|
650
|
-
if (r === 0 || base.rows[r - 1] !== bi) {
|
|
651
|
-
for (let q = 0; q < wide.lines.length; q++) {
|
|
652
|
-
if (wide.rows[q] !== bi)
|
|
653
|
-
continue;
|
|
654
|
-
lines.push(wide.lines[q]);
|
|
655
|
-
rows.push(bi);
|
|
656
|
-
spans.push(wide.spans[q] ?? null);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
return { lines, rows, spans, blocks: base.blocks };
|
|
661
|
-
}
|
|
662
|
-
/** Block-aware render as plain rows, for surfaces that do not anchor. The rows
|
|
663
|
-
* are the caller's own array: the block-aware render can pass the mapped
|
|
664
|
-
* cache's line array straight through, and a caller appending to it would
|
|
665
|
-
* otherwise poison every later render of the same document. */
|
|
666
|
-
export function renderMarkdownBlockAwareLines(md, proseWidth, paneWidth) {
|
|
667
|
-
return [...renderMarkdownBlockAware(md, proseWidth, paneWidth).lines];
|
|
668
|
-
}
|
|
669
|
-
/** Validate markdown via `termrender doc check`. */
|
|
670
|
-
export function checkMarkdown(md) {
|
|
671
|
-
ensureRenderer();
|
|
672
|
-
// Renderer unavailable → don't block validation; the body just renders as
|
|
673
|
-
// plaintext later. Bricking page validation here would be the wrong default.
|
|
674
|
-
if (rendererState !== 'ready')
|
|
675
|
-
return { ok: true };
|
|
676
|
-
const result = spawnSync(VENV_BIN, ['doc', 'check'], {
|
|
677
|
-
input: md,
|
|
678
|
-
encoding: 'utf-8',
|
|
679
|
-
timeout: 5000,
|
|
680
|
-
});
|
|
681
|
-
if (result.error) {
|
|
682
|
-
// A timeout (slow doc) is not an environment fault; anything else is a
|
|
683
|
-
// spawn fault → invalidate so the next process repairs.
|
|
684
|
-
const timedOut = result.error.code === 'ETIMEDOUT' || result.signal === 'SIGTERM';
|
|
685
|
-
if (!timedOut)
|
|
686
|
-
invalidateRenderer('doc check');
|
|
687
|
-
return { ok: false, error: `termrender: invocation failed: ${result.error.message}` };
|
|
688
|
-
}
|
|
689
|
-
let parsed = null;
|
|
690
|
-
const rawStdout = typeof result.stdout === 'string' ? result.stdout : '';
|
|
691
|
-
if (rawStdout) {
|
|
692
|
-
try {
|
|
693
|
-
parsed = JSON.parse(rawStdout.trim());
|
|
694
|
-
}
|
|
695
|
-
catch {
|
|
696
|
-
// stdout not parseable — fall through to exit-code handling
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
if (parsed !== null) {
|
|
700
|
-
if (parsed.ok)
|
|
701
|
-
return { ok: true };
|
|
702
|
-
const first = Array.isArray(parsed.errors) ? parsed.errors[0] : undefined;
|
|
703
|
-
const msg = (first && typeof first.message === 'string' && first.message) ? first.message : 'invalid markdown';
|
|
704
|
-
return { ok: false, error: `termrender: ${msg}` };
|
|
705
|
-
}
|
|
706
|
-
// exit code 2 = invalid per contract; any non-zero is an error
|
|
707
|
-
if (result.status !== 0) {
|
|
708
|
-
return { ok: false, error: `termrender: doc check exited ${result.status}` };
|
|
709
|
-
}
|
|
710
|
-
return { ok: true };
|
|
711
|
-
}
|
|
712
|
-
/** Shell command for a pane that live-renders `path` with crouter's pinned
|
|
713
|
-
* termrender. Null means the managed renderer could not be provisioned. */
|
|
714
|
-
export function documentWatchCommand(path) {
|
|
715
|
-
ensureRenderer();
|
|
716
|
-
if (rendererState !== 'ready')
|
|
717
|
-
return null;
|
|
718
|
-
return `${shellQuote(VENV_BIN)} doc watch ${shellQuote(path)}`;
|
|
719
|
-
}
|
|
1
|
+
var j=Object.defineProperty;var a=(r,e)=>j(r,"name",{value:e,configurable:!0});import{execFileSync as g,spawnSync as G}from"node:child_process";import{existsSync as A,readFileSync as X,writeFileSync as Y,statSync as q,mkdirSync as Q,unlinkSync as C,renameSync as W,accessSync as Z,realpathSync as I,constants as ee}from"node:fs";import{homedir as re}from"node:os";import{join as b,resolve as te}from"node:path";import N from"string-width";import{shellQuote as V}from"../../shared/shell-quote.js";import{withExclusiveDirectoryLock as ne}from"../exclusive-lock.js";import{TERMRENDER_VERSION as w}from"./version.js";const R=b(te(process.env.XDG_CACHE_HOME||b(re(),".cache")),"crouter","termrender",w),E=b(R,"venv"),h=b(E,"bin/termrender"),m=b(E,"bin/python"),k=b(E,".crtr-termrender-stamp.json"),se=b(R,".crtr-termrender.lock"),ie=36e4;let f="unchecked";function T(r){const e=r;return!!e&&typeof e.mtimeMs=="number"&&typeof e.size=="number"&&typeof e.mode=="number"}a(T,"isFp");function S(r){try{const e=q(r);return{mtimeMs:e.mtimeMs,size:e.size,mode:e.mode}}catch{return null}}a(S,"fingerprint");function D(r,e){return!!r&&r.mtimeMs===e.mtimeMs&&r.size===e.size&&r.mode===e.mode}a(D,"fpMatch");function oe(){try{const r=JSON.parse(X(k,"utf8"));return r&&typeof r.version=="string"&&T(r.bin)&&T(r.python)&&typeof r.pythonRealpath=="string"?r:null}catch{return null}}a(oe,"readStamp");function le(){const r=S(h),e=S(m);if(!r||!e){process.stderr.write(`[crtr] termrender stamp skipped: venv files vanished immediately after verify
|
|
2
|
+
`);return}let n;try{n=I(m)}catch{n=m}const t={version:w,bin:r,python:e,pythonRealpath:n},s=`${k}.${process.pid}.tmp`;try{Y(s,JSON.stringify(t)),W(s,k)}catch(o){try{C(s)}catch{}process.stderr.write(`[crtr] termrender ready but stamp not persisted (${o instanceof Error?o.message:String(o)}); future launches will re-verify the slow way
|
|
3
|
+
`)}}a(le,"publishStamp");function x(r){let e=!0;try{C(k)}catch(n){n.code!=="ENOENT"&&(e=!1)}f="unavailable",e?process.stderr.write(`[crtr] termrender invocation failed (${r}); invalidated readiness, future launches will repair
|
|
4
|
+
`):process.stderr.write(`[crtr] termrender invocation failed (${r}) but its readiness marker could not be removed; future launches may keep trusting a broken renderer until ${k} is deleted
|
|
5
|
+
`)}a(x,"invalidateRenderer");function B(r){const e=r;return e?.code==="ETIMEDOUT"||!!e?.killed&&!!e?.signal}a(B,"isTimeout");function _(){const r=oe();if(!r||r.version!==w)return!1;try{Z(h,ee.X_OK)}catch{return!1}if(!D(S(h),r.bin)||!D(S(m),r.python))return!1;try{if(I(m)!==r.pythonRealpath)return!1}catch{return!1}return!0}a(_,"stampValid");function ae(r){try{Q(R,{recursive:!0})}catch(e){f="unavailable",process.stderr.write(`[crtr] termrender unavailable \u2014 renderer cache cannot be created (${e instanceof Error?e.message:String(e)}); using plaintext fallback
|
|
6
|
+
`);return}try{ne(se,r,{timeoutMs:ie})}catch{f="unavailable"}}a(ae,"withProvisionLock");function L(){if(!A(h))return!1;try{return g(h,["-h"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:5e3}),!0}catch{return!1}}a(L,"binaryOk");function z(){if(!A(m))return null;try{return g(m,["-c",'import importlib.metadata as m; print(m.version("termrender"))'],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:5e3}).trim()||null}catch{return null}}a(z,"installedVersion");function ue(){try{return g("uv",["--version"],{stdio:"pipe",timeout:5e3}),!0}catch{return!1}}a(ue,"uvAvailable");function M(){if(f==="unchecked"){if(process.platform==="win32"){f="unavailable";return}if(_()){f="ready";return}ce()}}a(M,"ensureRenderer");function ce(){ae(()=>{if(_()){f="ready";return}let r=L()&&z()===w;if(!r){if(!ue()){process.stderr.write(`[crtr] termrender unavailable \u2014 install uv to enable rich rendering:
|
|
7
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
8
|
+
`),f="unavailable";return}try{A(m)||g("uv",["venv","--clear",E],{stdio:"pipe",timeout:6e4}),g("uv",["pip","install","--reinstall","--python",m,`termrender==${w}`],{stdio:"pipe",timeout:12e4})}catch(e){process.stderr.write(`[crtr] termrender install failed (${e instanceof Error?e.message:String(e)}); using plaintext fallback
|
|
9
|
+
`),f="unavailable";return}r=L()&&z()===w}if(!r){f="unavailable",process.stderr.write(`[crtr] termrender install completed but health check failed; using plaintext fallback
|
|
10
|
+
`);return}le(),f="ready"})}a(ce,"provisionAndPublish");function Me(){return f==="ready"?!0:f==="unavailable"?!1:process.platform!=="win32"&&_()}a(Me,"isRendererReady");const pe=/\x1b\[[0-9;?]*[a-zA-Z]|\x1b[@-_]|[\x00-\x08\x0B\x0E-\x1F\x7F-\x9F]/g;function F(r){return typeof r!="string"?"":r.replace(pe,"")}a(F,"sanitize");function fe(r,e){let n=0,t="";for(const s of r){const o=N(s);if(n+o>e)break;t+=s,n+=o}return t===""&&r.length>0&&(t=[...r][0]),t}a(fe,"sliceByWidth");function P(r,e){if(e<1)return[r];const n=[],t=r.split(`
|
|
11
|
+
`);for(let s=0;s<t.length;s++){const o=t[s];if(o===""){n.push("");continue}const c=o.split(/[ \t]+/).filter(Boolean);let p="";for(let l of c){for(;N(l)>e;){p&&(n.push(p),p="");const u=fe(l,e);n.push(u),l=l.slice(u.length)}const i=p?`${p} ${l}`:l;N(i)<=e?p=i:(p&&n.push(p),p=l)}p&&n.push(p)}return n.length>0?n:[""]}a(P,"wrap");class H{static{a(this,"BoundedLRUCache")}map=new Map;maxEntries;constructor(e){this.maxEntries=e}get(e){if(!this.map.has(e))return;const n=this.map.get(e);return this.map.delete(e),this.map.set(e,n),n}set(e,n){if(this.map.has(e))this.map.delete(e);else if(this.map.size>=this.maxEntries){const t=this.map.keys().next().value;this.map.delete(t)}this.map.set(e,n)}}const $=new H(20);function Ae(r,e){const n=`${r}\0${e}`,t=$.get(n);if(t)return[...t];if(M(),f==="ready")try{const c=g(h,["doc","render","--width",String(e),"--color","on"],{input:r,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).split(`
|
|
12
|
+
`);return c.length>0&&c[c.length-1]===""&&c.pop(),$.set(n,c),[...c]}catch(o){B(o)||x("doc render")}const s=P(F(r),e);return $.set(n,s),[...s]}a(Ae,"renderMarkdown");const K=new Set(["mermaid"]);function de(r,e){let n;try{n=JSON.parse(r)}catch{return null}const t=n;if(!Array.isArray(t.lines)||!Array.isArray(t.rows)||!Array.isArray(t.spans)||!Array.isArray(t.blocks)||t.rows.length!==t.lines.length||t.spans.length!==t.lines.length||!t.lines.every(i=>typeof i=="string"))return null;const s=t.blocks.length;if(!t.rows.every(i=>i===null||typeof i=="number"&&Number.isInteger(i)&&i>=0&&i<s))return null;const o=Math.max(1,e.split(`
|
|
13
|
+
`).length),c=[];let p=0;for(const i of t.blocks){if(typeof i!="object"||i===null||typeof i.type!="string"||i.type===""||i.start!=null&&!Number.isInteger(i.start)||i.end!=null&&!Number.isInteger(i.end))return null;const u=typeof i.start=="number"?i.start:p+1,d=typeof i.end=="number"?Math.max(i.end,u):u,y=Math.max(1,Math.min(u,o)),v=Math.max(y,Math.min(d,o));c.push({type:i.type,start:y,end:v}),p=v}c.length===0&&c.push({type:"paragraph",start:1,end:o});const l=[];for(let i=0;i<t.spans.length;i++){const u=t.spans[i];if(u===null){l.push(null);continue}if(!Array.isArray(u)||u.length!==2)return null;const[d,y]=u;if(!Number.isInteger(d)||!Number.isInteger(y)||d<1||y<d||y>o)return null;const v=t.rows[i];if(v===null)return null;const O=c[v];if(d<O.start||y>O.end)return null;l.push([d,y])}return{lines:t.lines,rows:t.rows,spans:l,blocks:c}}a(de,"parseRenderedDoc");function he(r,e){const n=F(r).split(`
|
|
14
|
+
`),t=[];let s=null;for(let l=0;l<n.length;l++)n[l].trim()!==""?s===null&&(s=l):s!==null&&(t.push({type:"paragraph",start:s+1,end:l}),s=null);s!==null&&t.push({type:"paragraph",start:s+1,end:n.length}),t.length===0&&t.push({type:"paragraph",start:1,end:Math.max(1,n.length)});const o=[],c=[],p=[];return t.forEach((l,i)=>{i>0&&(o.push(""),c.push(null),p.push(null));for(let u=l.start;u<=l.end;u++)for(const d of P(n[u-1]??"",e))o.push(d),c.push(i),p.push([u,u])}),{lines:o,rows:c,spans:p,blocks:t}}a(he,"fallbackDocWithMap");const J=new H(20);function U(r,e){const n=`${r}\0${e}`,t=J.get(n);if(t)return t;if(M(),f==="ready")try{const s=g(h,["doc","render","--width",String(e),"--color","on","--line-map"],{input:r,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"],maxBuffer:67108864}),o=de(s.trim(),r);if(o!==null)return J.set(n,o),o;x("doc render --line-map (malformed output)")}catch(s){B(s)||x("doc render --line-map")}return he(r,e)}a(U,"renderMarkdownWithMap");function me(r,e,n){const t=U(r,e);if(n<=e||!t.blocks.some(l=>K.has(l.type)))return t;const s=U(r,n);if(s.blocks.length!==t.blocks.length)return t;const o=[],c=[],p=[];for(let l=0;l<t.lines.length;l++){const i=t.rows[l]??null;if(i===null||!K.has(t.blocks[i].type)){o.push(t.lines[l]),c.push(i),p.push(t.spans[l]??null);continue}if(l===0||t.rows[l-1]!==i)for(let u=0;u<s.lines.length;u++)s.rows[u]===i&&(o.push(s.lines[u]),c.push(i),p.push(s.spans[u]??null))}return{lines:o,rows:c,spans:p,blocks:t.blocks}}a(me,"renderMarkdownBlockAware");function Ne(r,e,n){return[...me(r,e,n).lines]}a(Ne,"renderMarkdownBlockAwareLines");function Re(r){if(M(),f!=="ready")return{ok:!0};const e=G(h,["doc","check"],{input:r,encoding:"utf-8",timeout:5e3});if(e.error)return e.error.code==="ETIMEDOUT"||e.signal==="SIGTERM"||x("doc check"),{ok:!1,error:`termrender: invocation failed: ${e.error.message}`};let n=null;const t=typeof e.stdout=="string"?e.stdout:"";if(t)try{n=JSON.parse(t.trim())}catch{}if(n!==null){if(n.ok)return{ok:!0};const s=Array.isArray(n.errors)?n.errors[0]:void 0;return{ok:!1,error:`termrender: ${s&&typeof s.message=="string"&&s.message?s.message:"invalid markdown"}`}}return e.status!==0?{ok:!1,error:`termrender: doc check exited ${e.status}`}:{ok:!0}}a(Re,"checkMarkdown");function _e(r){return M(),f!=="ready"?null:`${V(h)} doc watch ${V(r)}`}a(_e,"documentWatchCommand");export{Re as checkMarkdown,_e as documentWatchCommand,M as ensureRenderer,Me as isRendererReady,Ae as renderMarkdown,me as renderMarkdownBlockAware,Ne as renderMarkdownBlockAwareLines,U as renderMarkdownWithMap};
|