@north-light/crouter 0.3.170 → 0.3.172
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/dist/api/client.d.ts +37 -11
- package/dist/api/client.js +84 -15
- package/dist/api/dto/human.d.ts +53 -39
- package/dist/api/dto/human.js +2 -3
- package/dist/api/dto/inbox.d.ts +0 -1
- package/dist/api/dto/nodes.d.ts +12 -0
- package/dist/api/dto/review-comments.d.ts +137 -0
- package/dist/api/dto/review-comments.js +5 -0
- package/dist/api/dto/reviews.d.ts +109 -0
- package/dist/api/dto/reviews.js +5 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/routes.d.ts +17 -4
- package/dist/api/routes.js +21 -5
- package/dist/build-root.d.ts +1 -16
- package/dist/build-root.js +1 -25
- package/dist/builtin-memory/00-runtime-base.md +7 -5
- package/dist/builtin-memory/04-base-worker.md +1 -1
- package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
- package/dist/builtin-memory/05-kinds/design/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/review/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/review/companion/00-base.md +20 -0
- package/dist/builtin-memory/05-kinds/spec/00-base.md +3 -7
- package/dist/builtin-memory/05-kinds/spec/01-orchestrator.md +3 -3
- package/dist/builtin-memory/05-kinds/spec/requirements.md +3 -3
- package/dist/builtin-memory/design.md +2 -2
- package/dist/builtin-memory/insights/capture.md +50 -0
- package/dist/builtin-memory/insights/init.md +45 -0
- package/dist/builtin-memory/insights/listen.md +9 -0
- package/dist/builtin-memory/internal/agent-shaping.md +2 -2
- package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
- package/dist/builtin-memory/internal/plugins.md +12 -11
- package/dist/builtin-memory/internal/storage-tiers.md +2 -2
- package/dist/builtin-memory/{planning.md → plan/roadmap.md} +3 -3
- package/dist/builtin-memory/plan.md +19 -0
- package/dist/builtin-memory/spec/guide.md +38 -0
- package/dist/builtin-memory/spec/requirements.md +31 -0
- package/dist/builtin-memory/spec/roadmap.md +35 -0
- package/dist/builtin-memory/spec.md +10 -86
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +3 -4
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +49 -5
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +56 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +920 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +221 -156
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +4 -5
- package/dist/cli.js +2 -6
- package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +7 -35
- package/dist/clients/attach/__tests__/attach-keybindings.test.js +32 -16
- package/dist/clients/attach/__tests__/context-message.test.js +142 -6
- package/dist/clients/attach/__tests__/crtr-output.test.js +29 -45
- package/dist/clients/attach/__tests__/diagram.test.js +1 -1
- package/dist/clients/attach/__tests__/file-review-focus.test.js +48 -0
- package/dist/clients/attach/__tests__/group-activity.test.js +266 -0
- package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +32 -0
- package/dist/clients/attach/__tests__/session-identity-refresh.test.js +32 -0
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +1 -2
- package/dist/clients/attach/chrome/header.d.ts +10 -0
- package/dist/clients/attach/chrome/header.js +30 -0
- package/dist/clients/attach/chrome/recap.d.ts +7 -0
- package/dist/clients/attach/chrome/recap.js +19 -0
- package/dist/clients/attach/chrome/status-line.d.ts +3 -0
- package/dist/clients/attach/chrome/status-line.js +5 -0
- package/dist/clients/attach/chrome/widgets.js +11 -21
- package/dist/clients/attach/command.js +11 -7
- package/dist/clients/attach/config.d.ts +4 -0
- package/dist/clients/attach/config.js +3 -0
- package/dist/clients/attach/input/controller.d.ts +19 -0
- package/dist/clients/attach/input/controller.js +62 -28
- package/dist/clients/attach/input/titled-editor.d.ts +0 -4
- package/dist/clients/attach/input/titled-editor.js +2 -10
- package/dist/clients/attach/overlays/file-review.d.ts +9 -5
- package/dist/clients/attach/overlays/file-review.js +9 -70
- package/dist/clients/attach/overlays/help.d.ts +33 -0
- package/dist/clients/attach/overlays/help.js +204 -0
- package/dist/clients/attach/render/activity-slot.d.ts +4 -0
- package/dist/clients/attach/render/activity-slot.js +13 -0
- package/dist/clients/attach/render/chat-view.d.ts +117 -12
- package/dist/clients/attach/render/chat-view.js +604 -135
- package/dist/clients/attach/render/context-message.d.ts +2 -1
- package/dist/clients/attach/render/context-message.js +17 -13
- package/dist/clients/attach/render/crtr-output.js +1 -3
- package/dist/clients/attach/render/diagram.js +2 -2
- package/dist/clients/attach/render/edit-diff.d.ts +4 -1
- package/dist/clients/attach/render/edit-diff.js +7 -11
- package/dist/clients/attach/render/group-activity.d.ts +32 -0
- package/dist/clients/attach/render/group-activity.js +206 -0
- package/dist/clients/attach/render/group-recap.d.ts +10 -0
- package/dist/clients/attach/render/group-recap.js +93 -0
- package/dist/clients/attach/render/html-markdown.d.ts +17 -0
- package/dist/clients/attach/render/html-markdown.js +228 -0
- package/dist/clients/attach/render/measured-container.d.ts +96 -0
- package/dist/clients/attach/render/measured-container.js +322 -0
- package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
- package/dist/clients/attach/render/scroll-animation.js +80 -0
- package/dist/clients/attach/render/tool-calls.js +6 -6
- package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
- package/dist/clients/attach/render/transcript-copy.js +81 -0
- package/dist/clients/attach/render/viewport.d.ts +29 -0
- package/dist/clients/attach/render/viewport.js +159 -0
- package/dist/clients/attach/session/bindings.d.ts +10 -7
- package/dist/clients/attach/session/bindings.js +23 -8
- package/dist/clients/attach/session/connection.js +4 -5
- package/dist/clients/attach/session/context.d.ts +6 -4
- package/dist/clients/attach/session/frame.d.ts +34 -0
- package/dist/clients/attach/session/frame.js +176 -0
- package/dist/clients/attach/session/frames.d.ts +4 -1
- package/dist/clients/attach/session/frames.js +14 -1
- package/dist/clients/attach/session/identity.js +4 -3
- package/dist/clients/attach/session/input-wiring.d.ts +14 -4
- package/dist/clients/attach/session/input-wiring.js +15 -13
- package/dist/clients/attach/session/invariant.d.ts +9 -0
- package/dist/clients/attach/session/invariant.js +15 -0
- package/dist/clients/attach/session/keys.d.ts +10 -2
- package/dist/clients/attach/session/keys.js +13 -5
- package/dist/clients/attach/session/layout.d.ts +10 -8
- package/dist/clients/attach/session/layout.js +33 -34
- package/dist/clients/attach/session/mouse.d.ts +18 -0
- package/dist/clients/attach/session/mouse.js +64 -0
- package/dist/clients/attach/session/pane-tag.d.ts +3 -0
- package/dist/clients/attach/session/pane-tag.js +51 -8
- package/dist/clients/attach/session/reconnect.d.ts +3 -0
- package/dist/clients/attach/session/reconnect.js +42 -5
- package/dist/clients/attach/session/surface-frame.d.ts +20 -0
- package/dist/clients/attach/session/surface-frame.js +73 -0
- package/dist/clients/attach/session/surface-host.d.ts +64 -0
- package/dist/clients/attach/session/surface-host.js +255 -0
- package/dist/clients/attach/session/whip.d.ts +17 -0
- package/dist/clients/attach/session/whip.js +334 -0
- package/dist/clients/attach/slash/dispatch.d.ts +13 -1
- package/dist/clients/attach/slash/dispatch.js +51 -29
- package/dist/clients/attach/viewer.js +907 -819
- package/dist/clients/conversation/conversation.d.ts +65 -0
- package/dist/clients/conversation/conversation.js +318 -0
- package/dist/clients/conversation/frames.d.ts +30 -0
- package/dist/clients/conversation/frames.js +52 -0
- package/dist/clients/conversation/region.d.ts +51 -0
- package/dist/clients/conversation/region.js +265 -0
- package/dist/clients/conversation/submit.d.ts +38 -0
- package/dist/clients/conversation/submit.js +51 -0
- package/dist/clients/inbox/__tests__/inbox-controller.test.js +247 -0
- package/dist/clients/inbox/__tests__/mount-panel.test.js +776 -0
- package/dist/clients/inbox/controller.d.ts +79 -0
- package/dist/clients/inbox/controller.js +448 -0
- package/dist/clients/inbox/deck-adapter.d.ts +29 -0
- package/dist/clients/inbox/deck-adapter.js +62 -0
- package/dist/clients/inbox/layout.d.ts +8 -0
- package/dist/clients/inbox/layout.js +9 -0
- package/dist/clients/inbox/resolve.d.ts +10 -0
- package/dist/clients/inbox/resolve.js +34 -0
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +29 -0
- package/dist/clients/inbox/review/__tests__/remap.test.js +196 -0
- package/dist/clients/inbox/review/__tests__/review-core.test.js +341 -0
- package/dist/clients/inbox/review/anchors.d.ts +41 -0
- package/dist/clients/inbox/review/anchors.js +89 -0
- package/dist/clients/inbox/review/columns.d.ts +22 -0
- package/dist/clients/inbox/review/columns.js +40 -0
- package/dist/clients/inbox/review/comments-client.d.ts +66 -0
- package/dist/clients/inbox/review/comments-client.js +98 -0
- package/dist/clients/inbox/review/composition.d.ts +60 -0
- package/dist/clients/inbox/review/composition.js +278 -0
- package/dist/clients/inbox/review/document-region.d.ts +120 -0
- package/dist/clients/inbox/review/document-region.js +902 -0
- package/dist/clients/inbox/review/frame.d.ts +45 -0
- package/dist/clients/inbox/review/frame.js +215 -0
- package/dist/clients/inbox/review/keys.d.ts +67 -0
- package/dist/clients/inbox/review/keys.js +130 -0
- package/dist/clients/inbox/review/launch.d.ts +10 -0
- package/dist/clients/inbox/review/launch.js +129 -0
- package/dist/clients/inbox/review/live-source.d.ts +24 -0
- package/dist/clients/inbox/review/live-source.js +160 -0
- package/dist/clients/inbox/review/nvim.d.ts +13 -0
- package/dist/clients/inbox/review/nvim.js +42 -0
- package/dist/clients/inbox/review/remap.d.ts +51 -0
- package/dist/clients/inbox/review/remap.js +157 -0
- package/dist/clients/inbox/review/review-client.d.ts +30 -0
- package/dist/clients/inbox/review/review-client.js +107 -0
- package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
- package/dist/clients/inbox/review/roundtrip.js +36 -0
- package/dist/clients/inbox/review/state.d.ts +143 -0
- package/dist/clients/inbox/review/state.js +282 -0
- package/dist/clients/inbox/review-adapter.d.ts +29 -0
- package/dist/clients/inbox/review-adapter.js +92 -0
- package/dist/clients/inbox/review-visibility.d.ts +5 -0
- package/dist/clients/inbox/review-visibility.js +19 -0
- package/dist/clients/inbox/surface.d.ts +19 -0
- package/dist/clients/inbox/surface.js +128 -0
- package/dist/clients/inbox/tui/ansi.d.ts +66 -0
- package/dist/clients/inbox/tui/ansi.js +317 -0
- package/dist/clients/inbox/tui/clipboard.d.ts +2 -0
- package/dist/clients/inbox/tui/clipboard.js +26 -0
- package/dist/clients/inbox/tui/input.d.ts +7 -0
- package/dist/clients/inbox/tui/input.js +653 -0
- package/dist/clients/inbox/tui/keys.d.ts +28 -0
- package/dist/clients/inbox/tui/keys.js +111 -0
- package/dist/clients/inbox/tui/panel.d.ts +2 -0
- package/dist/clients/inbox/tui/panel.js +217 -0
- package/dist/clients/inbox/tui/render.d.ts +37 -0
- package/dist/clients/inbox/tui/render.js +476 -0
- package/dist/clients/inbox/tui/types.d.ts +57 -0
- package/dist/clients/inbox/tui/types.js +1 -0
- package/dist/clients/inbox/tui.d.ts +6 -0
- package/dist/clients/inbox/tui.js +74 -0
- package/dist/clients/surfaces/host.d.ts +66 -0
- package/dist/clients/surfaces/host.js +1 -0
- package/dist/clients/surfaces/region.d.ts +16 -0
- package/dist/clients/surfaces/region.js +1 -0
- package/dist/clients/web/__tests__/push-engine.test.js +14 -158
- package/dist/clients/web/dev-server.d.ts +3 -3
- package/dist/clients/web/dev-server.js +9 -23
- package/dist/clients/web/events.js +4 -6
- package/dist/clients/web/push-engine.d.ts +2 -66
- package/dist/clients/web/push-engine.js +30 -161
- package/dist/clients/web/push-registry.d.ts +0 -4
- package/dist/clients/web/push-registry.js +2 -7
- package/dist/clients/web/server.js +3 -35
- package/dist/clients/web/web-client/shared/protocol.d.ts +0 -108
- package/dist/clients/web/web-cmd.js +2 -2
- package/dist/commands/__tests__/human.test.js +27 -15
- package/dist/commands/api-client.js +3 -3
- package/dist/commands/canvas-browse.js +1 -1
- package/dist/commands/canvas-issue.js +1 -1
- package/dist/commands/canvas-use.js +1 -1
- package/dist/commands/human/doc.d.ts +2 -0
- package/dist/commands/human/doc.js +98 -0
- package/dist/commands/human/inbox.d.ts +2 -0
- package/dist/commands/human/inbox.js +101 -0
- package/dist/commands/human/prompts.d.ts +2 -3
- package/dist/commands/human/prompts.js +27 -180
- package/dist/commands/human/queue.d.ts +1 -5
- package/dist/commands/human/queue.js +54 -216
- package/dist/commands/human/review.d.ts +2 -0
- package/dist/commands/human/review.js +298 -0
- package/dist/commands/human/shared.d.ts +2 -69
- package/dist/commands/human/shared.js +1 -181
- package/dist/commands/human.js +15 -20
- package/dist/commands/memory/__tests__/lint.test.d.ts +1 -0
- package/dist/commands/memory/__tests__/lint.test.js +15 -0
- package/dist/commands/memory/delete.js +2 -2
- package/dist/commands/memory/lint.d.ts +1 -0
- package/dist/commands/memory/lint.js +21 -3
- package/dist/commands/memory/read.js +4 -4
- package/dist/commands/node.js +8 -7
- package/dist/commands/pkg/plugin-manage.js +143 -68
- package/dist/commands/surface-inspect.js +2 -2
- package/dist/commands/surface.js +6 -12
- package/dist/commands/sys/__tests__/setup-core.test.js +9 -5
- package/dist/commands/sys/__tests__/setup-front-door.test.js +7 -42
- package/dist/commands/sys/config.js +29 -3
- package/dist/commands/sys/feedback.js +1 -1
- package/dist/commands/sys/setup-core.d.ts +12 -11
- package/dist/commands/sys/setup-core.js +55 -46
- package/dist/commands/sys/setup-wizard.d.ts +4 -1
- package/dist/commands/sys/setup-wizard.js +50 -9
- package/dist/commands/sys/sync-deps.js +1 -1
- package/dist/commands/sys.js +4 -6
- package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -1
- package/dist/core/__tests__/broker-snapshot-history.test.js +9 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +3 -4
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +8 -5
- package/dist/core/__tests__/fixtures/fake-engine.js +28 -2
- package/dist/core/__tests__/full/broker-provider-retry.test.js +87 -2
- package/dist/core/__tests__/full/broker-whip-interrupt.test.d.ts +1 -0
- package/dist/core/__tests__/full/broker-whip-interrupt.test.js +39 -0
- package/dist/core/__tests__/full/detach-focus.test.js +1 -1
- package/dist/core/__tests__/human-deliver-e2e.test.js +64 -64
- package/dist/core/__tests__/human-deliver.test.js +71 -345
- package/dist/core/__tests__/inline-memory-refs.test.js +2 -12
- package/dist/core/__tests__/memory-resolver-precedence.test.js +12 -15
- package/dist/core/__tests__/migration.test.js +10 -0
- package/dist/core/__tests__/model-pin-durability.test.js +14 -0
- package/dist/core/__tests__/phase4-review-migration.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-migration.test.js +100 -0
- package/dist/core/__tests__/phase4-review-store.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-store.test.js +143 -0
- package/dist/core/__tests__/remote-canvas-target.test.js +2 -2
- package/dist/core/__tests__/revive.test.js +22 -53
- package/dist/core/__tests__/session-cycles.test.js +48 -18
- package/dist/core/__tests__/spawn-no-kickoff.test.js +8 -12
- package/dist/core/__tests__/stop-guard.test.js +16 -1
- package/dist/core/__tests__/tmux-surface.test.js +21 -25
- package/dist/core/asset-root.d.ts +7 -0
- package/dist/core/asset-root.js +18 -0
- package/dist/core/broker-client/client.d.ts +0 -7
- package/dist/core/broker-client/client.js +4 -10
- package/dist/core/broker-client/transport-relay.d.ts +3 -4
- package/dist/core/broker-client/transport-relay.js +3 -4
- package/dist/core/canvas/__tests__/attention.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +1 -0
- package/dist/core/{view/__tests__/transport-remote.test.js → canvas/__tests__/remote-transport.test.js} +2 -2
- package/dist/core/canvas/__tests__/render-remote.test.js +1 -1
- package/dist/core/canvas/attention.js +4 -4
- package/dist/core/canvas/canvas.d.ts +6 -11
- package/dist/core/canvas/canvas.js +11 -33
- package/dist/core/canvas/db.js +207 -38
- package/dist/core/canvas/extensions.d.ts +1 -1
- package/dist/core/canvas/extensions.js +8 -1
- package/dist/core/canvas/index.d.ts +0 -1
- package/dist/core/canvas/index.js +0 -1
- package/dist/core/canvas/nav-model.d.ts +1 -1
- package/dist/core/canvas/nav-model.js +1 -1
- package/dist/core/canvas/paths.d.ts +5 -0
- package/dist/core/canvas/paths.js +16 -0
- package/dist/core/canvas/remote-canvas-source.js +2 -2
- package/dist/core/canvas/remote-transport.d.ts +7 -0
- package/dist/core/{view/transport-remote.js → canvas/remote-transport.js} +3 -4
- package/dist/core/canvas/source.js +1 -1
- package/dist/core/canvas/status-glyph.js +4 -12
- package/dist/core/canvas/types.d.ts +10 -35
- package/dist/core/clipboard-text.d.ts +8 -0
- package/dist/core/clipboard-text.js +18 -0
- package/dist/core/command-manifests/registry.d.ts +1 -3
- package/dist/core/command-plugins/bundle.d.ts +29 -0
- package/dist/core/command-plugins/bundle.js +198 -0
- package/dist/core/command-plugins/discovery.d.ts +0 -8
- package/dist/core/command-plugins/discovery.js +2 -39
- package/dist/core/command-plugins/transport/http-fetch.d.ts +4 -30
- package/dist/core/command-plugins/transport/http-fetch.js +17 -95
- package/dist/core/command.d.ts +1 -13
- package/dist/core/command.js +1 -16
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.js +28 -3
- package/dist/core/document-lines.d.ts +4 -0
- package/dist/core/document-lines.js +6 -0
- package/dist/core/feed/feed.d.ts +2 -0
- package/dist/core/feed/feed.js +11 -7
- package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-cancel-worker.js +7 -0
- package/dist/core/human/__tests__/inbox-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-claim-worker.js +17 -0
- package/dist/core/human/__tests__/inbox-core.test.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-core.test.js +144 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.js +8 -0
- package/dist/core/human/__tests__/visible-paths.test.d.ts +1 -0
- package/dist/{clients/attach → core/human}/__tests__/visible-paths.test.js +9 -0
- package/dist/core/human/claim.d.ts +23 -0
- package/dist/core/human/claim.js +67 -0
- package/dist/core/human/convention.d.ts +30 -0
- package/dist/core/human/convention.js +202 -0
- package/dist/core/human/deck-factories.d.ts +8 -0
- package/dist/core/human/deck-factories.js +15 -0
- package/dist/core/human/deck-schema.d.ts +70 -0
- package/dist/core/human/deck-schema.js +92 -0
- package/dist/core/human/root.d.ts +7 -0
- package/dist/core/human/root.js +37 -0
- package/dist/core/human/scan.d.ts +3 -0
- package/dist/core/human/scan.js +76 -0
- package/dist/core/human/summary.d.ts +8 -0
- package/dist/core/human/summary.js +44 -0
- package/dist/core/human/tickets.d.ts +49 -0
- package/dist/core/human/tickets.js +190 -0
- package/dist/core/human/types.d.ts +136 -0
- package/dist/core/human/types.js +5 -0
- package/dist/{clients/attach → core/human}/visible-paths.d.ts +1 -1
- package/dist/{clients/attach → core/human}/visible-paths.js +3 -2
- package/dist/core/inspector/chrome.d.ts +6 -0
- package/dist/core/inspector/chrome.js +14 -0
- package/dist/core/inspector/contract.d.ts +105 -0
- package/dist/core/inspector/contract.js +1 -0
- package/dist/core/inspector/core.d.ts +4 -5
- package/dist/core/inspector/core.js +3 -5
- package/dist/core/inspector/host.d.ts +46 -0
- package/dist/core/{tui → inspector}/host.js +42 -208
- package/dist/core/inspector/text.d.ts +2 -2
- package/dist/core/inspector/transport.d.ts +6 -0
- package/dist/core/inspector/transport.js +36 -0
- package/dist/core/inspector/tui.d.ts +2 -2
- package/dist/core/inspector/tui.js +15 -15
- package/dist/core/keybindings/__tests__/inbox-affordance.test.js +11 -11
- package/dist/core/keybindings/__tests__/resolve.test.js +10 -19
- package/dist/core/keybindings/attach-control.d.ts +9 -3
- package/dist/core/keybindings/attach-control.js +3 -1
- package/dist/core/keybindings/catalog.d.ts +6 -5
- package/dist/core/keybindings/catalog.js +61 -133
- package/dist/core/keybindings/inbox.d.ts +5 -6
- package/dist/core/keybindings/inbox.js +9 -10
- package/dist/core/keybindings/index.d.ts +3 -3
- package/dist/core/keybindings/index.js +3 -3
- package/dist/core/keybindings/persistence.d.ts +5 -1
- package/dist/core/keybindings/persistence.js +24 -6
- package/dist/core/keybindings/resolve.d.ts +6 -0
- package/dist/core/keybindings/resolve.js +10 -3
- package/dist/core/memory/inline-ref-grammar.js +2 -3
- package/dist/core/memory-resolver.d.ts +27 -29
- package/dist/core/memory-resolver.js +45 -39
- package/dist/core/model-routes.d.ts +33 -0
- package/dist/core/model-routes.js +42 -3
- package/dist/core/preview-registry.js +17 -55
- package/dist/core/profiles/select.js +3 -3
- package/dist/core/{view/remote-canvas-target.d.ts → remote-canvas-target.d.ts} +2 -2
- package/dist/core/{view/remote-canvas-target.js → remote-canvas-target.js} +4 -4
- package/dist/core/review/__tests__/capture-origin.test.d.ts +1 -0
- package/dist/core/review/__tests__/capture-origin.test.js +139 -0
- package/dist/core/review/__tests__/comments.test.d.ts +1 -0
- package/dist/core/review/__tests__/comments.test.js +98 -0
- package/dist/core/review/__tests__/project.test.d.ts +1 -0
- package/dist/core/review/__tests__/project.test.js +71 -0
- package/dist/core/review/__tests__/remap.test.d.ts +1 -0
- package/dist/core/review/__tests__/remap.test.js +159 -0
- package/dist/core/review/__tests__/stage-identity.test.d.ts +1 -0
- package/dist/core/review/__tests__/stage-identity.test.js +140 -0
- package/dist/core/review/birth.d.ts +7 -0
- package/dist/core/review/birth.js +23 -0
- package/dist/core/review/comments.d.ts +69 -0
- package/dist/core/review/comments.js +295 -0
- package/dist/core/review/companion.d.ts +35 -0
- package/dist/core/review/companion.js +205 -0
- package/dist/core/review/document.d.ts +27 -0
- package/dist/core/review/document.js +138 -0
- package/dist/core/review/project.d.ts +13 -0
- package/dist/core/review/project.js +58 -0
- package/dist/core/review/realize.d.ts +19 -0
- package/dist/core/review/realize.js +217 -0
- package/dist/core/review/remap.d.ts +24 -0
- package/dist/core/review/remap.js +156 -0
- package/dist/core/review/signal.d.ts +5 -0
- package/dist/core/review/signal.js +31 -0
- package/dist/core/review/stage.d.ts +26 -0
- package/dist/core/review/stage.js +184 -0
- package/dist/core/review/store.d.ts +46 -0
- package/dist/core/review/store.js +163 -0
- package/dist/core/review/ticket-filter.d.ts +17 -0
- package/dist/core/review/ticket-filter.js +32 -0
- package/dist/core/review/types.d.ts +130 -0
- package/dist/core/review/types.js +23 -0
- package/dist/core/runtime/__tests__/session-visibility.test.d.ts +1 -0
- package/dist/core/runtime/__tests__/session-visibility.test.js +119 -0
- package/dist/core/runtime/bearings.d.ts +5 -17
- package/dist/core/runtime/bearings.js +88 -71
- package/dist/core/runtime/broker-protocol.d.ts +31 -8
- package/dist/core/runtime/broker.d.ts +15 -1
- package/dist/core/runtime/broker.js +573 -141
- package/dist/core/runtime/canvas-extensions.d.ts +4 -5
- package/dist/core/runtime/canvas-extensions.js +5 -5
- package/dist/core/runtime/front-door.js +4 -4
- package/dist/core/runtime/headless-pi.d.ts +24 -0
- package/dist/core/runtime/headless-pi.js +152 -0
- package/dist/core/runtime/kickoff.d.ts +1 -5
- package/dist/core/runtime/kickoff.js +1 -5
- package/dist/core/runtime/model-registry.d.ts +3 -0
- package/dist/core/runtime/model-registry.js +13 -0
- package/dist/core/runtime/naming-persist.d.ts +4 -0
- package/dist/core/runtime/naming-persist.js +27 -1
- package/dist/core/runtime/naming.d.ts +17 -12
- package/dist/core/runtime/naming.js +91 -140
- package/dist/core/runtime/node-read.js +19 -10
- package/dist/core/runtime/nodes.d.ts +9 -14
- package/dist/core/runtime/nodes.js +3 -53
- package/dist/core/runtime/package-health.d.ts +6 -21
- package/dist/core/runtime/package-health.js +12 -123
- package/dist/core/runtime/placement-tmux.d.ts +2 -1
- package/dist/core/runtime/placement-tmux.js +6 -4
- package/dist/core/runtime/placement.d.ts +1 -0
- package/dist/core/runtime/placement.js +4 -8
- package/dist/core/runtime/promote.js +3 -0
- package/dist/core/runtime/recap.d.ts +2 -7
- package/dist/core/runtime/recap.js +35 -69
- package/dist/core/runtime/revive.js +34 -77
- package/dist/core/runtime/session-cycles.d.ts +4 -0
- package/dist/core/runtime/session-cycles.js +14 -1
- package/dist/core/runtime/session-visibility.d.ts +37 -0
- package/dist/core/runtime/session-visibility.js +83 -0
- package/dist/core/runtime/spawn.js +10 -22
- package/dist/core/runtime/stop-guard.d.ts +1 -1
- package/dist/core/runtime/stop-guard.js +18 -13
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux-chrome.d.ts +1 -1
- package/dist/core/runtime/tmux-chrome.js +1 -1
- package/dist/core/runtime/tmux.d.ts +35 -7
- package/dist/core/runtime/tmux.js +439 -62
- package/dist/core/runtime/tool-group-summary.d.ts +19 -0
- package/dist/core/runtime/tool-group-summary.js +88 -0
- package/dist/core/scope.d.ts +2 -7
- package/dist/core/scope.js +9 -35
- package/dist/core/substrate/schema.d.ts +2 -2
- package/dist/core/termrender/code-doc.d.ts +12 -0
- package/dist/core/termrender/code-doc.js +92 -0
- package/dist/core/termrender/display.d.ts +12 -0
- package/dist/core/termrender/display.js +19 -0
- package/dist/core/termrender/termrender.d.ts +73 -0
- package/dist/core/termrender/termrender.js +795 -0
- package/dist/core/termrender/version.d.ts +1 -0
- package/dist/core/termrender/version.js +1 -0
- package/dist/core/tui/terminal.js +1 -2
- package/dist/core/user-settings.d.ts +71 -3
- package/dist/core/user-settings.js +83 -1
- package/dist/daemon/api/__tests__/inbox.test.js +44 -133
- package/dist/daemon/api/handlers/human.d.ts +0 -10
- package/dist/daemon/api/handlers/human.js +104 -702
- package/dist/daemon/api/handlers/inbox.js +113 -142
- package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
- package/dist/daemon/api/handlers/review-comments.js +500 -0
- package/dist/daemon/api/handlers/reviews.d.ts +2 -0
- package/dist/daemon/api/handlers/reviews.js +287 -0
- package/dist/daemon/api/map.d.ts +22 -7
- package/dist/daemon/api/map.js +159 -11
- package/dist/daemon/api/server.js +4 -0
- package/dist/daemon/cron-run.js +6 -9
- package/dist/daemon/crtrd.js +17 -33
- package/dist/daemon/fleet.d.ts +1 -8
- package/dist/daemon/fleet.js +4 -30
- package/dist/daemon/human/finish.d.ts +14 -0
- package/dist/daemon/human/finish.js +115 -0
- package/dist/daemon/human/sweep.d.ts +6 -0
- package/dist/daemon/human/sweep.js +49 -0
- package/dist/daemon/messaging/node-message.d.ts +18 -0
- package/dist/daemon/messaging/node-message.js +70 -0
- package/dist/daemon/review/comment-notify.d.ts +26 -0
- package/dist/daemon/review/comment-notify.js +107 -0
- package/dist/daemon/review/deliver.d.ts +7 -0
- package/dist/daemon/review/deliver.js +56 -0
- package/dist/daemon/review/finish.d.ts +22 -0
- package/dist/daemon/review/finish.js +254 -0
- package/dist/daemon/review/sweep.d.ts +11 -0
- package/dist/daemon/review/sweep.js +120 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +42 -64
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +159 -0
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +16 -38
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +63 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +8 -11
- package/dist/pi-extensions/canvas-context-intro.js +50 -104
- package/dist/pi-extensions/canvas-recap.d.ts +15 -2
- package/dist/pi-extensions/canvas-recap.js +192 -69
- package/dist/pi-extensions/canvas-review-boundary.d.ts +59 -0
- package/dist/pi-extensions/canvas-review-boundary.js +81 -0
- package/dist/pi-extensions/canvas-stophook.d.ts +3 -3
- package/dist/pi-extensions/canvas-stophook.js +78 -128
- package/dist/pi-extensions/canvas-structured-output.js +52 -8
- package/dist/shared/generated-context.d.ts +29 -4
- package/dist/shared/generated-context.js +122 -7
- package/dist/shared/tool-groups.d.ts +23 -0
- package/dist/shared/tool-groups.js +60 -0
- package/dist/shared/working-activity.d.ts +8 -0
- package/dist/shared/working-activity.js +26 -0
- package/dist/types.d.ts +36 -2
- package/dist/types.js +51 -0
- package/dist/web-client/assets/index-CCPaLeW7.css +2 -0
- package/dist/web-client/assets/index-kyOWsnZK.js +86 -0
- package/dist/web-client/index.html +2 -2
- package/dist/web-client/sw.js +1 -1
- package/docs/compat/hearth-crtr-v4.md +2 -2
- package/docs/compat/hearth-crtr-v5.md +4 -2
- package/docs/public-api.md +3 -3
- package/package.json +21 -14
- package/runtime.lock.json +4661 -1453
- package/scripts/postinstall.mjs +15 -2
- package/dist/builtin-pi-packages/pi-mode-switch/README.md +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +0 -449
- package/dist/builtin-pi-packages/pi-mode-switch/package.json +0 -14
- package/dist/builtin-pi-packages/pi-mode-switch/tsconfig.json +0 -9
- package/dist/builtin-views/_lib/states.mjs +0 -161
- package/dist/builtin-views/canvas/core.mjs +0 -657
- package/dist/builtin-views/canvas/text.mjs +0 -58
- package/dist/builtin-views/canvas/tui.mjs +0 -168
- package/dist/builtin-views/canvas/web.jsx +0 -121
- package/dist/builtin-views/chat/core.mjs +0 -684
- package/dist/builtin-views/chat/text.mjs +0 -101
- package/dist/builtin-views/chat/tui.mjs +0 -360
- package/dist/builtin-views/chat/web.jsx +0 -362
- package/dist/builtin-views/git-pr/core.mjs +0 -673
- package/dist/builtin-views/git-pr/text.mjs +0 -84
- package/dist/builtin-views/git-pr/tui.mjs +0 -301
- package/dist/builtin-views/git-pr/web.jsx +0 -216
- package/dist/builtin-views/inbox/_lib/render.mjs +0 -175
- package/dist/builtin-views/inbox/core.mjs +0 -1273
- package/dist/builtin-views/inbox/text.mjs +0 -73
- package/dist/builtin-views/inbox/tui.mjs +0 -314
- package/dist/builtin-views/inbox/web.jsx +0 -188
- package/dist/builtin-views/linkedin/core.mjs +0 -906
- package/dist/builtin-views/linkedin/text.mjs +0 -69
- package/dist/builtin-views/linkedin/tui.mjs +0 -413
- package/dist/builtin-views/linkedin/web.jsx +0 -206
- package/dist/builtin-views/prompt-review/core.mjs +0 -735
- package/dist/builtin-views/prompt-review/text.mjs +0 -15
- package/dist/builtin-views/prompt-review/tui.mjs +0 -196
- package/dist/builtin-views/prompt-review/web.jsx +0 -484
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.js +0 -50
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.ts +0 -53
- package/dist/builtin-views/workspace-sidebar/core.mjs +0 -670
- package/dist/builtin-views/workspace-sidebar/text.mjs +0 -53
- package/dist/builtin-views/workspace-sidebar/tui.mjs +0 -141
- package/dist/builtin-views/workspace-sidebar/web.jsx +0 -109
- package/dist/clients/attach/session/mode.d.ts +0 -25
- package/dist/clients/attach/session/mode.js +0 -97
- package/dist/commands/sys/promptstudio.d.ts +0 -2
- package/dist/commands/sys/promptstudio.js +0 -65
- package/dist/commands/view-cycle.d.ts +0 -2
- package/dist/commands/view-cycle.js +0 -130
- package/dist/commands/view-list.d.ts +0 -2
- package/dist/commands/view-list.js +0 -66
- package/dist/commands/view-new.d.ts +0 -2
- package/dist/commands/view-new.js +0 -74
- package/dist/commands/view-pick.d.ts +0 -6
- package/dist/commands/view-pick.js +0 -129
- package/dist/commands/view-run.d.ts +0 -2
- package/dist/commands/view-run.js +0 -214
- package/dist/commands/view.d.ts +0 -2
- package/dist/commands/view.js +0 -31
- package/dist/commands/workspace.d.ts +0 -2
- package/dist/commands/workspace.js +0 -165
- package/dist/core/__tests__/chat-view-reconnect.test.js +0 -105
- package/dist/core/__tests__/full/consult-startup-failure.test.js +0 -124
- package/dist/core/canvas/__tests__/human-work-outbox.test.js +0 -123
- package/dist/core/canvas/human-work-outbox.d.ts +0 -73
- package/dist/core/canvas/human-work-outbox.js +0 -261
- package/dist/core/command-plugins/store.d.ts +0 -16
- package/dist/core/command-plugins/store.js +0 -64
- package/dist/core/keybindings/__tests__/bespoke-consumers.test.js +0 -40
- package/dist/core/runtime/fault-recovery-nudge.d.ts +0 -3
- package/dist/core/runtime/fault-recovery-nudge.js +0 -3
- package/dist/core/tui/__tests__/host-keybindings.test.js +0 -113
- package/dist/core/tui/host.d.ts +0 -66
- package/dist/core/view/__tests__/transport-cache.test.js +0 -62
- package/dist/core/view/bridge.d.ts +0 -10
- package/dist/core/view/bridge.js +0 -31
- package/dist/core/view/chrome.d.ts +0 -9
- package/dist/core/view/chrome.js +0 -22
- package/dist/core/view/contract.d.ts +0 -205
- package/dist/core/view/contract.js +0 -23
- package/dist/core/view/loader.d.ts +0 -31
- package/dist/core/view/loader.js +0 -188
- package/dist/core/view/stream-local.d.ts +0 -3
- package/dist/core/view/stream-local.js +0 -231
- package/dist/core/view/transport-cache.d.ts +0 -8
- package/dist/core/view/transport-cache.js +0 -38
- package/dist/core/view/transport-local.d.ts +0 -7
- package/dist/core/view/transport-local.js +0 -83
- package/dist/core/view/transport-remote.d.ts +0 -2
- package/dist/core/view/transport.d.ts +0 -10
- package/dist/core/view/transport.js +0 -15
- package/dist/pi-extensions/naming-tool.d.ts +0 -24
- package/dist/pi-extensions/naming-tool.js +0 -67
- package/dist/prompts/view.d.ts +0 -7
- package/dist/prompts/view.js +0 -172
- package/dist/web/ViewChrome.d.ts +0 -7
- package/dist/web/ViewChrome.js +0 -28
- package/dist/web/ViewPane.d.ts +0 -39
- package/dist/web/ViewPane.js +0 -48
- package/dist/web/index.d.ts +0 -8
- package/dist/web/index.js +0 -22
- package/dist/web/runtime.d.ts +0 -39
- package/dist/web/runtime.js +0 -232
- package/dist/web/states.d.ts +0 -24
- package/dist/web/states.js +0 -24
- package/dist/web/transport-http.d.ts +0 -5
- package/dist/web/transport-http.js +0 -34
- package/dist/web/transport-stream.d.ts +0 -3
- package/dist/web/transport-stream.js +0 -204
- package/dist/web-client/assets/index-U_NZ66VE.js +0 -79
- package/dist/web-client/assets/index-aaeu4adv.css +0 -2
- /package/dist/{builtin-views/workspace-sidebar/__tests__/core.test.d.ts → clients/attach/__tests__/file-review-focus.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{visible-paths.test.d.ts → group-activity.test.d.ts} +0 -0
- /package/dist/{core/__tests__/chat-view-reconnect.test.d.ts → clients/attach/__tests__/input-controller-extension-command.test.d.ts} +0 -0
- /package/dist/{core/__tests__/full/consult-startup-failure.test.d.ts → clients/attach/__tests__/session-identity-refresh.test.d.ts} +0 -0
- /package/dist/{core/canvas/__tests__/human-work-outbox.test.d.ts → clients/inbox/__tests__/inbox-controller.test.d.ts} +0 -0
- /package/dist/{core/keybindings/__tests__/bespoke-consumers.test.d.ts → clients/inbox/__tests__/mount-panel.test.d.ts} +0 -0
- /package/dist/{core/tui/__tests__/host-keybindings.test.d.ts → clients/inbox/review/__tests__/editor-roundtrip.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-cache.test.d.ts → clients/inbox/review/__tests__/remap.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-remote.test.d.ts → clients/inbox/review/__tests__/review-core.test.d.ts} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ToolGroupSummary } from '../../shared/tool-groups.js';
|
|
2
|
+
export type ToolGroupPiece = {
|
|
3
|
+
type: 'tool';
|
|
4
|
+
name: string;
|
|
5
|
+
args: unknown;
|
|
6
|
+
} | {
|
|
7
|
+
type: 'result';
|
|
8
|
+
name: string;
|
|
9
|
+
result: unknown;
|
|
10
|
+
isError: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'text';
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
/** Serialize only the causal material around one group, with fixed per-piece
|
|
16
|
+
* and total budgets so a verbose tool result cannot dominate the light-model call. */
|
|
17
|
+
export declare function serializeToolGroup(previousBoundaryProse: string, pieces: readonly ToolGroupPiece[]): string;
|
|
18
|
+
/** Generate a structured summary object, or null on every failure. */
|
|
19
|
+
export declare function headlessToolGroupSummary(segment: string): Promise<ToolGroupSummary | null>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Broker-side, best-effort tool-group summarization. The only successful output
|
|
2
|
+
// path is the constrained submit_summary tool; failures deliberately yield no
|
|
3
|
+
// substitute object so callers leave the normal folded calls visible.
|
|
4
|
+
import { Type } from '@earendil-works/pi-ai';
|
|
5
|
+
import { headlessToolCall } from './headless-pi.js';
|
|
6
|
+
import { defaultProvider, modelLadders } from './model-selection.js';
|
|
7
|
+
import { lightModel } from './naming.js';
|
|
8
|
+
import { normalizeToolGroupSummary } from '../../shared/tool-groups.js';
|
|
9
|
+
const BOUNDARY_CAP = 600;
|
|
10
|
+
const TOOL_ARGS_CAP = 300;
|
|
11
|
+
const RESULT_CAP = 400;
|
|
12
|
+
const TEXT_CAP = 1_000;
|
|
13
|
+
const SEGMENT_CAP = 10_000;
|
|
14
|
+
const SUMMARY_TIMEOUT_MS = 45_000;
|
|
15
|
+
function capped(value, cap) {
|
|
16
|
+
const normalized = value.replace(/\s+/g, ' ').trim();
|
|
17
|
+
return normalized.length <= cap ? normalized : `${normalized.slice(0, Math.max(0, cap - 1)).trimEnd()}…`;
|
|
18
|
+
}
|
|
19
|
+
function printable(value, cap) {
|
|
20
|
+
try {
|
|
21
|
+
return capped(typeof value === 'string' ? value : JSON.stringify(value), cap);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return capped(String(value), cap);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Serialize only the causal material around one group, with fixed per-piece
|
|
28
|
+
* and total budgets so a verbose tool result cannot dominate the light-model call. */
|
|
29
|
+
export function serializeToolGroup(previousBoundaryProse, pieces) {
|
|
30
|
+
const lines = [`Previous visible message: ${capped(previousBoundaryProse, BOUNDARY_CAP) || '(none)'}`, 'Between-message activity:'];
|
|
31
|
+
for (const piece of pieces) {
|
|
32
|
+
if (piece.type === 'tool')
|
|
33
|
+
lines.push(`- tool ${piece.name}(${printable(piece.args, TOOL_ARGS_CAP)})`);
|
|
34
|
+
else if (piece.type === 'result')
|
|
35
|
+
lines.push(`- ${piece.isError ? 'error' : 'result'} ${piece.name}: ${printable(piece.result, RESULT_CAP)}`);
|
|
36
|
+
else
|
|
37
|
+
lines.push(`- context: ${capped(piece.text, TEXT_CAP)}`);
|
|
38
|
+
}
|
|
39
|
+
return capped(lines.join('\n'), SEGMENT_CAP);
|
|
40
|
+
}
|
|
41
|
+
// Tool mechanics, identifiers, and inbox bookkeeping produce a machine log rather
|
|
42
|
+
// than the glanceable human recap this surface needs, so the prompt asks only for
|
|
43
|
+
// very short outcomes while the structured fields retain the underlying stats.
|
|
44
|
+
const SUMMARY_SYSTEM_PROMPT = 'Create a structured recap of this coding-agent tool activity. ' +
|
|
45
|
+
'Prefer 1–3 bullets and use at most 5 only for distinct meaningful outcomes. ' +
|
|
46
|
+
'Each bullet must be an extremely readable plain-English outcome of 3–10 words, without markdown markers. ' +
|
|
47
|
+
'Describe what changed or was accomplished, not the tools, commands, or investigation steps; for code work, say what capability was added to a one- or two-phrase plain-English part of the system, such as "Added scheduling controls to the worker service." ' +
|
|
48
|
+
'Never include IDs, hashes, paths, filenames, command names, tool names, raw values, or report text. ' +
|
|
49
|
+
'Omit inbox receipt, delivery, and queueing; node-response and report bookkeeping; help lookups; status checks; and summary-generation activity. ' +
|
|
50
|
+
'A node response may support a substantive outcome, but its arrival or resummarization is never itself an outcome. ' +
|
|
51
|
+
'If no meaningful outcome remains after those omissions, submit the single bullet "No meaningful changes." ' +
|
|
52
|
+
'Count nodes created and distinct files created, modified, or deleted only when evidenced by the supplied tool arguments or results; otherwise use zero, even when the corresponding mechanics are omitted from bullets. ' +
|
|
53
|
+
'Do not invent success when a result shows failure. ' +
|
|
54
|
+
'Call submit_summary exactly once with bullets, nodesSpawned, and filesEdited, then stop.';
|
|
55
|
+
const SUBMIT_SUMMARY_SCHEMA = Type.Object({
|
|
56
|
+
bullets: Type.Array(Type.String({
|
|
57
|
+
minLength: 1,
|
|
58
|
+
maxLength: 120,
|
|
59
|
+
description: 'A very short, plain-English outcome without bullet markers, identifiers, or operational bookkeeping.',
|
|
60
|
+
}), { minItems: 1, maxItems: 5 }),
|
|
61
|
+
nodesSpawned: Type.Integer({
|
|
62
|
+
minimum: 0,
|
|
63
|
+
description: 'Count of nodes created during the supplied segment, or zero when none are evidenced.',
|
|
64
|
+
}),
|
|
65
|
+
filesEdited: Type.Integer({
|
|
66
|
+
minimum: 0,
|
|
67
|
+
description: 'Count of distinct files created, modified, or deleted during the supplied segment, or zero when none are evidenced.',
|
|
68
|
+
}),
|
|
69
|
+
}, { additionalProperties: false });
|
|
70
|
+
/** Generate a structured summary object, or null on every failure. */
|
|
71
|
+
export async function headlessToolGroupSummary(segment) {
|
|
72
|
+
const ladders = modelLadders();
|
|
73
|
+
const modelIntent = `${defaultProvider(ladders)}/light`;
|
|
74
|
+
return normalizeToolGroupSummary(await headlessToolCall({
|
|
75
|
+
systemPrompt: SUMMARY_SYSTEM_PROMPT,
|
|
76
|
+
userPrompt: `<tool-group>\n${segment}\n</tool-group>\n\nSummarize the activity above.`,
|
|
77
|
+
modelSpec: lightModel(),
|
|
78
|
+
modelIntent,
|
|
79
|
+
timeoutMs: SUMMARY_TIMEOUT_MS,
|
|
80
|
+
tool: {
|
|
81
|
+
name: 'submit_summary',
|
|
82
|
+
label: 'Submit summary',
|
|
83
|
+
description: 'Submit the structured tool-group activity recap exactly once, then stop.',
|
|
84
|
+
parameters: SUBMIT_SUMMARY_SCHEMA,
|
|
85
|
+
constrainedSampling: false,
|
|
86
|
+
},
|
|
87
|
+
}));
|
|
88
|
+
}
|
package/dist/core/scope.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { InstalledPlugin, Scope } from '../types.js';
|
|
2
|
-
export declare function builtinViewsRoot(): string;
|
|
3
2
|
export declare function builtinMemoryRoot(): string;
|
|
4
3
|
export declare function builtinPiPackagesDir(): string;
|
|
5
4
|
export declare function builtinPiPackageDir(name: string): string;
|
|
@@ -27,16 +26,12 @@ export declare function pluginsDir(scope: Scope): string | null;
|
|
|
27
26
|
export declare function marketplacesDir(scope: Scope): string | null;
|
|
28
27
|
/** Where substrate memory documents live per scope. Builtin memory is the
|
|
29
28
|
* special case — its own package dir (builtinMemoryRoot), since the builtin
|
|
30
|
-
* scope has no scopeRoot
|
|
31
|
-
*
|
|
29
|
+
* scope has no scopeRoot. User and project memory live at
|
|
30
|
+
* scopeRoot(scope)/memory. */
|
|
32
31
|
export declare function scopeMemoryDir(scope: Scope): string | null;
|
|
33
32
|
/** Where a plugin's substrate memory documents live: `<plugin.root>/memory`.
|
|
34
33
|
* The resolver mounts these under the virtual `<pluginName>/` namespace. */
|
|
35
34
|
export declare function pluginMemoryDir(plugin: InstalledPlugin): string;
|
|
36
|
-
/** Where view definition dirs live per scope. Builtin views sit directly under
|
|
37
|
-
* builtinViewsRoot() (no `views/` segment — they ARE the builtin views dir),
|
|
38
|
-
* matching the loader's `<root>/<name>/core.mjs` resolution. */
|
|
39
|
-
export declare function viewsDir(scope: Scope): string | null;
|
|
40
35
|
export declare function resolveScopeArg(scopeArg: string | undefined): Scope | 'all';
|
|
41
36
|
export declare function listScopes(scopeArg: string | undefined): Scope[];
|
|
42
37
|
export declare function resetScopeCache(): void;
|
package/dist/core/scope.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { existsSync, statSync, realpathSync } from 'node:fs';
|
|
3
3
|
import { join, resolve, dirname } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
4
|
import { CRTR_DIR_NAME } from '../types.js';
|
|
5
|
+
import { assetRoot } from './asset-root.js';
|
|
6
6
|
import { usage } from './errors.js';
|
|
7
7
|
import { loadProfileManifest } from './profiles/manifest.js';
|
|
8
8
|
// Cache of resolved project-scope-root STACKS, keyed by (resolved cwd, profile
|
|
@@ -17,30 +17,13 @@ const scopeRootsCache = new Map();
|
|
|
17
17
|
function scopeRootsCacheKey(resolvedStartDir, profileId) {
|
|
18
18
|
return `${resolvedStartDir}\u0000${profileId ?? ''}`;
|
|
19
19
|
}
|
|
20
|
-
export function builtinViewsRoot() {
|
|
21
|
-
// Resolved relative to this file: dist/core/scope.js → dist/builtin-views/
|
|
22
|
-
// (src/ at dev time).
|
|
23
|
-
const thisFile = fileURLToPath(import.meta.url);
|
|
24
|
-
const coreDir = dirname(thisFile);
|
|
25
|
-
const pkgDir = dirname(coreDir); // src/ or dist/
|
|
26
|
-
return join(pkgDir, 'builtin-views');
|
|
27
|
-
}
|
|
28
20
|
export function builtinMemoryRoot() {
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
// memory is the only content the builtin scope carries — the scope has no
|
|
33
|
-
// scopeRoot (scopeRoot('builtin') is null).
|
|
34
|
-
const thisFile = fileURLToPath(import.meta.url);
|
|
35
|
-
const coreDir = dirname(thisFile);
|
|
36
|
-
const pkgDir = dirname(coreDir); // src/ or dist/
|
|
37
|
-
return join(pkgDir, 'builtin-memory');
|
|
21
|
+
// Builtin memory is the only content the builtin scope carries — the scope
|
|
22
|
+
// has no scopeRoot (scopeRoot('builtin') is null).
|
|
23
|
+
return join(assetRoot(), 'builtin-memory');
|
|
38
24
|
}
|
|
39
25
|
export function builtinPiPackagesDir() {
|
|
40
|
-
|
|
41
|
-
const coreDir = dirname(thisFile);
|
|
42
|
-
const pkgDir = dirname(coreDir); // src/ or dist/
|
|
43
|
-
return join(pkgDir, 'builtin-pi-packages');
|
|
26
|
+
return join(assetRoot(), 'builtin-pi-packages');
|
|
44
27
|
}
|
|
45
28
|
export function builtinPiPackageDir(name) {
|
|
46
29
|
return join(builtinPiPackagesDir(), name);
|
|
@@ -158,8 +141,8 @@ export function projectScopeRoots(startDir, profileId) {
|
|
|
158
141
|
return findProjectScopeRoots(startDir, profileId);
|
|
159
142
|
}
|
|
160
143
|
export function scopeRoot(scope) {
|
|
161
|
-
// The builtin scope has no scope-root dir
|
|
162
|
-
//
|
|
144
|
+
// The builtin scope has no scope-root dir; its content lives in dedicated
|
|
145
|
+
// package directories such as builtinMemoryRoot().
|
|
163
146
|
if (scope === 'builtin')
|
|
164
147
|
return null;
|
|
165
148
|
return scope === 'user' ? userScopeRoot() : projectScopeRoot();
|
|
@@ -197,8 +180,8 @@ export function marketplacesDir(scope) {
|
|
|
197
180
|
}
|
|
198
181
|
/** Where substrate memory documents live per scope. Builtin memory is the
|
|
199
182
|
* special case — its own package dir (builtinMemoryRoot), since the builtin
|
|
200
|
-
* scope has no scopeRoot
|
|
201
|
-
*
|
|
183
|
+
* scope has no scopeRoot. User and project memory live at
|
|
184
|
+
* scopeRoot(scope)/memory. */
|
|
202
185
|
export function scopeMemoryDir(scope) {
|
|
203
186
|
if (scope === 'builtin')
|
|
204
187
|
return builtinMemoryRoot();
|
|
@@ -210,15 +193,6 @@ export function scopeMemoryDir(scope) {
|
|
|
210
193
|
export function pluginMemoryDir(plugin) {
|
|
211
194
|
return join(plugin.root, 'memory');
|
|
212
195
|
}
|
|
213
|
-
/** Where view definition dirs live per scope. Builtin views sit directly under
|
|
214
|
-
* builtinViewsRoot() (no `views/` segment — they ARE the builtin views dir),
|
|
215
|
-
* matching the loader's `<root>/<name>/core.mjs` resolution. */
|
|
216
|
-
export function viewsDir(scope) {
|
|
217
|
-
if (scope === 'builtin')
|
|
218
|
-
return builtinViewsRoot();
|
|
219
|
-
const root = scope === 'user' ? userScopeRoot() : projectScopeRoot();
|
|
220
|
-
return root ? join(root, 'views') : null;
|
|
221
|
-
}
|
|
222
196
|
export function resolveScopeArg(scopeArg) {
|
|
223
197
|
if (scopeArg === undefined)
|
|
224
198
|
return 'all';
|
|
@@ -70,7 +70,7 @@ export interface SubstrateSchema {
|
|
|
70
70
|
* not invoked. Frontmatter key `slash`. */
|
|
71
71
|
slash: boolean;
|
|
72
72
|
/** The gap this doc exists to close — the observed agent failure that
|
|
73
|
-
* prompted it (CTO ruling 2026-07-03, `
|
|
73
|
+
* prompted it (CTO ruling 2026-07-03, `insights/agent-memory/document-substrate` §"Rationale
|
|
74
74
|
* is a frontmatter field, never delivered"). MAINTAINER-FACING ONLY: excluded
|
|
75
75
|
* from every delivered surface by construction — it is frontmatter, never
|
|
76
76
|
* body, so it never reaches a boot render, on-read injection, or `memory
|
|
@@ -86,7 +86,7 @@ export interface SubstrateSchema {
|
|
|
86
86
|
* path-derived fallback) and body. This single object flows through the whole
|
|
87
87
|
* pipeline (gate eval → boot/on-read render), so a renderer never re-parses. */
|
|
88
88
|
export interface SubstrateDoc extends SubstrateSchema {
|
|
89
|
-
/** Resolver-supplied identity, e.g. `
|
|
89
|
+
/** Resolver-supplied identity, e.g. `insights/agent-memory/document-substrate` or an explicit
|
|
90
90
|
* frontmatter name when one is present. */
|
|
91
91
|
name: string;
|
|
92
92
|
/** The scope this doc resolved from. */
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RenderedDoc } from './termrender.js';
|
|
2
|
+
export declare function isMarkdownFile(file: string): boolean;
|
|
3
|
+
/** Fence info string for a source file — `text` when the extension is unknown,
|
|
4
|
+
* which every highlighter degrades to plain text on. */
|
|
5
|
+
export declare function fenceLanguageFor(file: string): string;
|
|
6
|
+
/** Wrap source text as a fenced block. The fence is grown past the longest
|
|
7
|
+
* backtick run in the content, so a file that itself contains ``` can't close
|
|
8
|
+
* its own block. */
|
|
9
|
+
export declare function codeFenceDocument(content: string, language: string): string;
|
|
10
|
+
/** Render a source file as a syntax-highlighted code panel whose spans are
|
|
11
|
+
* source lines — the code-file counterpart of `renderReviewDoc`. */
|
|
12
|
+
export declare function codeRenderedDoc(content: string, language: string, width: number): RenderedDoc;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { extname } from 'node:path';
|
|
2
|
+
import { documentLines } from '../document-lines.js';
|
|
3
|
+
import { renderMarkdownWithMap } from './termrender.js';
|
|
4
|
+
// ── Source files as review documents ─────────────────────────────────────────
|
|
5
|
+
//
|
|
6
|
+
// A review ticket may point at a .ts/.py/.sql source file, not just a .md
|
|
7
|
+
// artifact. Every surface still wants ONE rendering story, so a source file is
|
|
8
|
+
// presented as a single fenced code block: termrender (Pygments) and the
|
|
9
|
+
// browser (highlight.js) then syntax-highlight it for free, and the fence's
|
|
10
|
+
// language comes from the file extension.
|
|
11
|
+
//
|
|
12
|
+
// The one cost is a line shift: the fence's opening line makes source line N
|
|
13
|
+
// land on line N+1 of the wrapped document. `codeRenderedDoc` folds that back
|
|
14
|
+
// out so every span/anchor the surfaces expose is a real SOURCE line number.
|
|
15
|
+
/** Extension → fence info string. Names are the ones Pygments (termrender) and
|
|
16
|
+
* highlight.js (browser) both accept, so one map serves every surface. */
|
|
17
|
+
const FENCE_BY_EXT = {
|
|
18
|
+
'.ts': 'typescript', '.mts': 'typescript', '.cts': 'typescript', '.tsx': 'tsx',
|
|
19
|
+
'.js': 'javascript', '.mjs': 'javascript', '.cjs': 'javascript', '.jsx': 'jsx',
|
|
20
|
+
'.py': 'python', '.rb': 'ruby', '.go': 'go', '.rs': 'rust', '.java': 'java',
|
|
21
|
+
'.c': 'c', '.h': 'c', '.cc': 'cpp', '.cpp': 'cpp', '.hpp': 'cpp', '.cs': 'csharp',
|
|
22
|
+
'.swift': 'swift', '.kt': 'kotlin', '.php': 'php', '.lua': 'lua', '.pl': 'perl',
|
|
23
|
+
'.sh': 'bash', '.bash': 'bash', '.zsh': 'bash', '.fish': 'fish',
|
|
24
|
+
'.sql': 'sql', '.json': 'json', '.jsonc': 'json', '.yaml': 'yaml', '.yml': 'yaml',
|
|
25
|
+
'.toml': 'toml', '.ini': 'ini', '.xml': 'xml', '.html': 'html', '.htm': 'html',
|
|
26
|
+
'.css': 'css', '.scss': 'scss', '.less': 'less', '.vim': 'vim', '.el': 'lisp',
|
|
27
|
+
'.ex': 'elixir', '.exs': 'elixir', '.erl': 'erlang', '.hs': 'haskell',
|
|
28
|
+
'.scala': 'scala', '.dart': 'dart', '.r': 'r', '.jl': 'julia', '.zig': 'zig',
|
|
29
|
+
'.tf': 'terraform', '.proto': 'protobuf', '.graphql': 'graphql', '.gql': 'graphql',
|
|
30
|
+
'.dockerfile': 'dockerfile', '.diff': 'diff', '.patch': 'diff', '.csv': 'text',
|
|
31
|
+
'.txt': 'text', '.log': 'text', '.env': 'bash', '.mk': 'makefile',
|
|
32
|
+
};
|
|
33
|
+
/** Markdown extensions render as a DOCUMENT (headings, tables, Mermaid); every
|
|
34
|
+
* other text file renders as code. */
|
|
35
|
+
const MARKDOWN_EXTENSIONS = new Set(['.md', '.markdown', '.mdown', '.mkd']);
|
|
36
|
+
export function isMarkdownFile(file) {
|
|
37
|
+
return MARKDOWN_EXTENSIONS.has(extname(file).toLowerCase());
|
|
38
|
+
}
|
|
39
|
+
/** Fence info string for a source file — `text` when the extension is unknown,
|
|
40
|
+
* which every highlighter degrades to plain text on. */
|
|
41
|
+
export function fenceLanguageFor(file) {
|
|
42
|
+
const ext = extname(file).toLowerCase();
|
|
43
|
+
if (ext === '') {
|
|
44
|
+
// Extensionless but conventionally-named files still have obvious types.
|
|
45
|
+
const base = file.slice(file.lastIndexOf('/') + 1).toLowerCase();
|
|
46
|
+
if (base === 'dockerfile')
|
|
47
|
+
return 'dockerfile';
|
|
48
|
+
if (base === 'makefile')
|
|
49
|
+
return 'makefile';
|
|
50
|
+
return 'text';
|
|
51
|
+
}
|
|
52
|
+
return FENCE_BY_EXT[ext] ?? 'text';
|
|
53
|
+
}
|
|
54
|
+
/** Wrap source text as a fenced block. The fence is grown past the longest
|
|
55
|
+
* backtick run in the content, so a file that itself contains ``` can't close
|
|
56
|
+
* its own block. */
|
|
57
|
+
export function codeFenceDocument(content, language) {
|
|
58
|
+
let longest = 0;
|
|
59
|
+
for (const run of content.matchAll(/`+/g))
|
|
60
|
+
longest = Math.max(longest, run[0].length);
|
|
61
|
+
const fence = '`'.repeat(Math.max(3, longest + 1));
|
|
62
|
+
const body = content.endsWith('\n') ? content.slice(0, -1) : content;
|
|
63
|
+
return `${fence}${language}\n${body}\n${fence}\n`;
|
|
64
|
+
}
|
|
65
|
+
/** Shift a rendered wrapped-document map back onto SOURCE line numbers: the
|
|
66
|
+
* opening fence occupies line 1, so document line N is source line N-1.
|
|
67
|
+
*
|
|
68
|
+
* Rows that touch a fence line are the panel's border/title chrome, not
|
|
69
|
+
* source: they lose BOTH their span and their block row so nothing anchors to
|
|
70
|
+
* them — otherwise the top border would be a step in j/k that selects the
|
|
71
|
+
* whole file. */
|
|
72
|
+
function foldFenceOffset(doc, sourceLineCount) {
|
|
73
|
+
const closingFenceLine = sourceLineCount + 2;
|
|
74
|
+
const clamp = (line) => Math.max(1, Math.min(line - 1, sourceLineCount));
|
|
75
|
+
const chrome = doc.spans.map((span) => span !== null && (span[0] <= 1 || span[1] >= closingFenceLine));
|
|
76
|
+
return {
|
|
77
|
+
lines: doc.lines,
|
|
78
|
+
rows: doc.rows.map((row, index) => (chrome[index] === true ? null : row)),
|
|
79
|
+
spans: doc.spans.map((span, index) => {
|
|
80
|
+
if (span === null || chrome[index] === true)
|
|
81
|
+
return null;
|
|
82
|
+
return [clamp(span[0]), clamp(span[1])];
|
|
83
|
+
}),
|
|
84
|
+
blocks: doc.blocks.map((block) => ({ type: block.type, start: clamp(block.start), end: clamp(block.end) })),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** Render a source file as a syntax-highlighted code panel whose spans are
|
|
88
|
+
* source lines — the code-file counterpart of `renderReviewDoc`. */
|
|
89
|
+
export function codeRenderedDoc(content, language, width) {
|
|
90
|
+
const sourceLineCount = documentLines(content).length;
|
|
91
|
+
return foldFenceOffset(renderMarkdownWithMap(codeFenceDocument(content, language), width), sourceLineCount);
|
|
92
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Options for `display()` — the live-watch tmux pane surface. The pane always
|
|
2
|
+
* watches the file and live-updates on edits; there is no non-watched mode. */
|
|
3
|
+
export interface DisplayOpts {
|
|
4
|
+
/** `'auto'` (default) splits until the pane budget, then opens a new window. */
|
|
5
|
+
window?: 'auto' | 'split' | 'new';
|
|
6
|
+
/** Pane budget per window before `'auto'` opens a new window. Default 3. */
|
|
7
|
+
maxPanes?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function countPanesInCurrentWindow(): number;
|
|
10
|
+
export declare function display(path: string, opts?: DisplayOpts): {
|
|
11
|
+
paneId?: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { displayInPane } from './termrender.js';
|
|
3
|
+
export function countPanesInCurrentWindow() {
|
|
4
|
+
// -t '' targets the current window of the current session.
|
|
5
|
+
const result = spawnSync('tmux', ['list-panes', '-F', '#{pane_id}'], {
|
|
6
|
+
encoding: 'utf8',
|
|
7
|
+
});
|
|
8
|
+
if (result.status !== 0)
|
|
9
|
+
return 0;
|
|
10
|
+
return result.stdout.split('\n').filter((line) => line.trim() !== '').length;
|
|
11
|
+
}
|
|
12
|
+
export function display(path, opts) {
|
|
13
|
+
const window = (opts?.window === 'split' || opts?.window === 'new') ? opts.window : 'auto';
|
|
14
|
+
const maxPanes = (opts?.maxPanes !== undefined && opts.maxPanes > 0) ? opts.maxPanes : 3;
|
|
15
|
+
const newWindow = window === 'new' ||
|
|
16
|
+
(window === 'auto' && countPanesInCurrentWindow() >= maxPanes);
|
|
17
|
+
// The pane always watches the file — displayed docs are live by definition.
|
|
18
|
+
return displayInPane(path, { newWindow });
|
|
19
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memoized, self-healing. Guarantees at most one authoritative renderer
|
|
3
|
+
* lifecycle per process: trust a valid stamp outright (zero subprocess spawns),
|
|
4
|
+
* else run ONE provision/verify/publish transition under the exclusive lock.
|
|
5
|
+
* There is no permanent legacy-verifier fallback — the spawn-based verify
|
|
6
|
+
* (`binaryOk` + `installedVersion`) is a step INSIDE that single transition,
|
|
7
|
+
* always followed by publishing the stamp, never a lasting alternate path.
|
|
8
|
+
*
|
|
9
|
+
* Single degradation path: `uv` absent → one stderr remediation line + plaintext.
|
|
10
|
+
* win32 → plaintext (no renderer).
|
|
11
|
+
*
|
|
12
|
+
* Invoked at postinstall AND lazily on the first render/check/display call,
|
|
13
|
+
* so `npm ci --ignore-scripts` consumers still self-heal on first use.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureRenderer(): void;
|
|
16
|
+
/** Cheap predicate — true when the pinned managed binary is verified ready. Does not install or spawn. */
|
|
17
|
+
export declare function isRendererReady(): boolean;
|
|
18
|
+
/** Render markdown to terminal lines via the pinned binary; plaintext fallback. */
|
|
19
|
+
export declare function renderMarkdown(md: string, width: number): string[];
|
|
20
|
+
export interface RenderedDoc {
|
|
21
|
+
/** Rendered ANSI rows — byte-identical to the plain `doc render` output. */
|
|
22
|
+
lines: string[];
|
|
23
|
+
/** Per-row index into `blocks`; null for the blank separator rows between blocks. */
|
|
24
|
+
rows: (number | null)[];
|
|
25
|
+
/** Per-row finest 1-indexed inclusive source-line range the renderer knows
|
|
26
|
+
* (a bullet, a table row, a code line…); null for separator rows and rows
|
|
27
|
+
* of unmapped blocks. Same length as `lines`. */
|
|
28
|
+
spans: ([number, number] | null)[];
|
|
29
|
+
/** Per top-level block: its termrender block type plus 1-indexed inclusive
|
|
30
|
+
* source-line bounds. Never empty. */
|
|
31
|
+
blocks: {
|
|
32
|
+
type: string;
|
|
33
|
+
start: number;
|
|
34
|
+
end: number;
|
|
35
|
+
}[];
|
|
36
|
+
}
|
|
37
|
+
/** Render markdown with a row→source-line map via the pinned binary
|
|
38
|
+
* (`doc render --line-map`); plaintext paragraph-block fallback. */
|
|
39
|
+
export declare function renderMarkdownWithMap(md: string, width: number): RenderedDoc;
|
|
40
|
+
/**
|
|
41
|
+
* The shared block-aware mapped render: prose blocks keep the readability cap
|
|
42
|
+
* (`proseWidth`), while diagram blocks are re-rendered at the pane's full
|
|
43
|
+
* `paneWidth` and spliced back in by block index. Both surfaces (terminal
|
|
44
|
+
* review and the ask deck) go through this, so "which blocks may be wide" is
|
|
45
|
+
* decided once, from the renderer's own block types, never by heuristics on
|
|
46
|
+
* the emitted rows.
|
|
47
|
+
*
|
|
48
|
+
* Row order, block list and source spans are the narrow render's; only the
|
|
49
|
+
* rows OF a wide block are replaced, so anchoring stays source-based and
|
|
50
|
+
* unchanged.
|
|
51
|
+
*/
|
|
52
|
+
export declare function renderMarkdownBlockAware(md: string, proseWidth: number, paneWidth: number): RenderedDoc;
|
|
53
|
+
/** Block-aware render as plain rows, for surfaces that do not anchor. */
|
|
54
|
+
export declare function renderMarkdownBlockAwareLines(md: string, proseWidth: number, paneWidth: number): string[];
|
|
55
|
+
/** Validate markdown via `termrender doc check`. */
|
|
56
|
+
export declare function checkMarkdown(md: string): {
|
|
57
|
+
ok: true;
|
|
58
|
+
} | {
|
|
59
|
+
ok: false;
|
|
60
|
+
error: string;
|
|
61
|
+
};
|
|
62
|
+
export interface DisplayInPaneOpts {
|
|
63
|
+
/** Open in a new tmux window instead of splitting the current one. */
|
|
64
|
+
newWindow?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Spawn termrender into a live tmux pane. The pane-budget policy (whether to
|
|
68
|
+
* split vs open a new window) is decided by the caller (`src/surfaces/
|
|
69
|
+
* display.ts`); this is the thin managed-binary spawn it delegates to.
|
|
70
|
+
*/
|
|
71
|
+
export declare function displayInPane(path: string, opts?: DisplayInPaneOpts): {
|
|
72
|
+
paneId?: string;
|
|
73
|
+
};
|