@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
|
@@ -4,9 +4,10 @@ export declare class ContextMessageComponent implements Component {
|
|
|
4
4
|
private readonly label;
|
|
5
5
|
private readonly labelText;
|
|
6
6
|
private readonly collapsedHint;
|
|
7
|
+
private readonly expandsWithTools;
|
|
7
8
|
private expanded;
|
|
8
9
|
private readonly expandedBody;
|
|
9
|
-
constructor(body: string, expanded: boolean, dim: (s: string) => string, label: (s: string) => string, labelText?: string, collapsedHint?: string);
|
|
10
|
+
constructor(body: string, expanded: boolean, dim: (s: string) => string, label: (s: string) => string, labelText?: string, collapsedHint?: string, expandsWithTools?: boolean);
|
|
10
11
|
/** Ctrl+O global tool-output toggle (ChatView.isExpandable duck-type). */
|
|
11
12
|
setExpanded(expanded: boolean): void;
|
|
12
13
|
render(width: number): string[];
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// render/context-message.ts — the terminal viewer's foldable renderer for
|
|
2
|
-
// crouter-generated context. Session bearings, situational updates,
|
|
3
|
-
//
|
|
4
|
-
// runtime role
|
|
5
|
-
// collapsed →
|
|
6
|
-
// surface, regardless of the message's runtime role.
|
|
7
|
-
// `setExpanded
|
|
8
|
-
// tool output. Classification
|
|
9
|
-
//
|
|
2
|
+
// crouter-generated context. Session bearings, situational updates, lifecycle
|
|
3
|
+
// steering, recovery prompts, and inbox digests retain their model-visible body
|
|
4
|
+
// and runtime role. This display-only component renders the disclosure body it
|
|
5
|
+
// receives: collapsed → a padded dim line; expanded (Ctrl+O) → the ordinary
|
|
6
|
+
// user-message surface, regardless of the message's runtime role. Selected
|
|
7
|
+
// cards implement `setExpanded` for the global tool-display cycle; other cards
|
|
8
|
+
// remain folded while tool output is shown. Classification and disclosure
|
|
9
|
+
// selection live in shared/generated-context.ts; this component only renders
|
|
10
|
+
// the presentation it is handed.
|
|
10
11
|
import { UserMessageComponent } from '@earendil-works/pi-coding-agent';
|
|
11
12
|
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
|
|
12
13
|
import { attachMarkdownTheme } from '../config.js';
|
|
@@ -19,19 +20,22 @@ export class ContextMessageComponent {
|
|
|
19
20
|
label;
|
|
20
21
|
labelText;
|
|
21
22
|
collapsedHint;
|
|
23
|
+
expandsWithTools;
|
|
22
24
|
expanded;
|
|
23
25
|
expandedBody;
|
|
24
|
-
constructor(body, expanded, dim, label, labelText = LABEL, collapsedHint = COLLAPSED_HINT) {
|
|
26
|
+
constructor(body, expanded, dim, label, labelText = LABEL, collapsedHint = COLLAPSED_HINT, expandsWithTools = true) {
|
|
25
27
|
this.dim = dim;
|
|
26
28
|
this.label = label;
|
|
27
29
|
this.labelText = labelText;
|
|
28
30
|
this.collapsedHint = collapsedHint;
|
|
29
|
-
this.
|
|
31
|
+
this.expandsWithTools = expandsWithTools;
|
|
32
|
+
this.expanded = expandsWithTools && expanded;
|
|
30
33
|
this.expandedBody = new UserMessageComponent(styleAttachMarkdownHeadings(body), attachMarkdownTheme());
|
|
31
34
|
}
|
|
32
35
|
/** Ctrl+O global tool-output toggle (ChatView.isExpandable duck-type). */
|
|
33
36
|
setExpanded(expanded) {
|
|
34
|
-
this.
|
|
37
|
+
if (this.expandsWithTools)
|
|
38
|
+
this.expanded = expanded;
|
|
35
39
|
}
|
|
36
40
|
render(width) {
|
|
37
41
|
const w = width > 0 ? width : 80;
|
|
@@ -44,8 +48,8 @@ export class ContextMessageComponent {
|
|
|
44
48
|
const rest = this.collapsedHint;
|
|
45
49
|
const labelW = visibleWidth(labelTag);
|
|
46
50
|
if (labelW >= w)
|
|
47
|
-
return [this.label(truncateToWidth(labelTag, w, '…'))];
|
|
48
|
-
return [this.label(labelTag) + this.dim(truncateToWidth(rest, w - labelW, '…'))];
|
|
51
|
+
return ['', this.label(truncateToWidth(labelTag, w, '…')), ''];
|
|
52
|
+
return ['', this.label(labelTag) + this.dim(truncateToWidth(rest, w - labelW, '…')), ''];
|
|
49
53
|
}
|
|
50
54
|
const lines = this.expandedBody.render(w);
|
|
51
55
|
if (lines.at(-1) !== '')
|
|
@@ -651,9 +651,7 @@ class CrtrResultComponent {
|
|
|
651
651
|
}
|
|
652
652
|
return clampRenderedLines(['', ...statusLines, ...generic.lines], width);
|
|
653
653
|
}
|
|
654
|
-
invalidate() {
|
|
655
|
-
this.context.invalidate?.();
|
|
656
|
-
}
|
|
654
|
+
invalidate() { }
|
|
657
655
|
}
|
|
658
656
|
/** First-line convention from crtr-commands/index.ts's pi.sendMessage:
|
|
659
657
|
* `$ crtr <argv>\n\n<output>`. Help-only here, never suppressOutput: this
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
// byte-identical to `--color off`). So the rendered lines are safe to splice
|
|
12
12
|
// back into markdown inside a plain ``` code fence — pi's Markdown then shows
|
|
13
13
|
// them verbatim in monospace, no escape-code leakage, no re-wrapping.
|
|
14
|
-
// • `renderMarkdown` (
|
|
14
|
+
// • `renderMarkdown` (crouter's sole org-wide termrender binding) is
|
|
15
15
|
// synchronous and memoized, so this is a plain string→string transform with
|
|
16
16
|
// no async swap or component lifecycle.
|
|
17
17
|
//
|
|
18
18
|
// Scope: Mermaid and a single-line `text`/`plain`/untagged Unicode-arrow chain.
|
|
19
19
|
// The wider termrender directive vocabulary remains out of scope — see the base
|
|
20
20
|
// prompt's Diagrams note.
|
|
21
|
-
import { ensureRenderer, isRendererReady, renderMarkdown } from '
|
|
21
|
+
import { ensureRenderer, isRendererReady, renderMarkdown } from '../../../core/termrender/termrender.js';
|
|
22
22
|
/** A complete Mermaid fence, including normal Markdown's optional three-space
|
|
23
23
|
* indentation. Line-anchored (m flag), non-greedy body (captured). An unclosed
|
|
24
24
|
* fence (still streaming) does not match, so mid-stream text is left raw and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FoldedToolCallController } from './tool-calls.js';
|
|
1
|
+
import { FoldedToolCallController, type FileLineChanges } from './tool-calls.js';
|
|
2
2
|
type ToolResultLike = {
|
|
3
3
|
content?: Array<{
|
|
4
4
|
type?: unknown;
|
|
@@ -14,6 +14,9 @@ export type CrtrEditToolView = {
|
|
|
14
14
|
definition: unknown;
|
|
15
15
|
observeResult: EditResultObserver;
|
|
16
16
|
};
|
|
17
|
+
/** Count only changed rows in pi's display diff; context and ellipsis rows do
|
|
18
|
+
* not contribute to the folded file summary. */
|
|
19
|
+
export declare function countDisplayDiffLines(diff: string): FileLineChanges;
|
|
17
20
|
/** Crouter owns edit presentation while the imported tool owns execution. The
|
|
18
21
|
* card has two explicit phases: streamed argument diff, then executed result
|
|
19
22
|
* diff. No asynchronous preview can write after settlement. */
|
|
@@ -84,11 +84,7 @@ function themeBgRgb(theme, name, fallback) {
|
|
|
84
84
|
return fallback;
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
// Diff body rendering
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
/** pi's display-diff line format: "+123 content" / "-123 content" / " 123 content". */
|
|
91
|
-
function parseDiffLine(line) {
|
|
87
|
+
function parseDisplayDiffLine(line) {
|
|
92
88
|
const match = line.match(/^([+-\s])(\s*\d*)\s(.*)$/);
|
|
93
89
|
if (!match)
|
|
94
90
|
return null;
|
|
@@ -96,11 +92,11 @@ function parseDiffLine(line) {
|
|
|
96
92
|
}
|
|
97
93
|
/** Count only changed rows in pi's display diff; context and ellipsis rows do
|
|
98
94
|
* not contribute to the folded file summary. */
|
|
99
|
-
function
|
|
95
|
+
export function countDisplayDiffLines(diff) {
|
|
100
96
|
let added = 0;
|
|
101
97
|
let removed = 0;
|
|
102
98
|
for (const line of diff.split('\n')) {
|
|
103
|
-
const parsed =
|
|
99
|
+
const parsed = parseDisplayDiffLine(line);
|
|
104
100
|
if (parsed?.prefix === '+')
|
|
105
101
|
added++;
|
|
106
102
|
if (parsed?.prefix === '-')
|
|
@@ -185,7 +181,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
|
|
|
185
181
|
const lines = diffText.split('\n');
|
|
186
182
|
let i = 0;
|
|
187
183
|
while (i < lines.length) {
|
|
188
|
-
const parsed =
|
|
184
|
+
const parsed = parseDisplayDiffLine(lines[i]);
|
|
189
185
|
if (!parsed) {
|
|
190
186
|
pushLine(theme.fg('toolDiffContext', lines[i]));
|
|
191
187
|
i++;
|
|
@@ -194,7 +190,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
|
|
|
194
190
|
if (parsed.prefix === '-') {
|
|
195
191
|
const removed = [];
|
|
196
192
|
while (i < lines.length) {
|
|
197
|
-
const p =
|
|
193
|
+
const p = parseDisplayDiffLine(lines[i]);
|
|
198
194
|
if (!p || p.prefix !== '-')
|
|
199
195
|
break;
|
|
200
196
|
removed.push({ lineNum: p.lineNum, content: replaceTabs(p.content) });
|
|
@@ -202,7 +198,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
|
|
|
202
198
|
}
|
|
203
199
|
const added = [];
|
|
204
200
|
while (i < lines.length) {
|
|
205
|
-
const p =
|
|
201
|
+
const p = parseDisplayDiffLine(lines[i]);
|
|
206
202
|
if (!p || p.prefix !== '+')
|
|
207
203
|
break;
|
|
208
204
|
added.push({ lineNum: p.lineNum, content: replaceTabs(p.content) });
|
|
@@ -281,7 +277,7 @@ export function createCrtrEditToolDefinition(cwd, fold = new FoldedToolCallContr
|
|
|
281
277
|
renderShell: 'self',
|
|
282
278
|
renderCall(args, theme, context) {
|
|
283
279
|
const diff = state.settled ? state.diff : streamedArgumentDiff(args);
|
|
284
|
-
const changes = state.settled && !state.isError && state.diff ?
|
|
280
|
+
const changes = state.settled && !state.isError && state.diff ? countDisplayDiffLines(state.diff) : undefined;
|
|
285
281
|
const header = foldedFileCallLine('edit', editPath(args), theme, context.cwd ?? cwd, changes);
|
|
286
282
|
if (fold.folded)
|
|
287
283
|
return fold.capture(new Text(header, 0, 0));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type FileActivity = {
|
|
2
|
+
key: string;
|
|
3
|
+
displayPath: string;
|
|
4
|
+
kind: 'edit' | 'write';
|
|
5
|
+
added: number;
|
|
6
|
+
removed: number;
|
|
7
|
+
hasKnownCounts: boolean;
|
|
8
|
+
countsIncomplete: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type MemoryActivity = {
|
|
11
|
+
name: string;
|
|
12
|
+
path?: string;
|
|
13
|
+
};
|
|
14
|
+
export type GroupActivity = {
|
|
15
|
+
files: readonly FileActivity[];
|
|
16
|
+
memories: readonly MemoryActivity[];
|
|
17
|
+
};
|
|
18
|
+
/** Per-group recorder. Calls retain only their current transcript references
|
|
19
|
+
* until they settle; the settled activity is plain immutable evidence. */
|
|
20
|
+
export declare class GroupActivityRecorder {
|
|
21
|
+
private readonly cwd;
|
|
22
|
+
private readonly calls;
|
|
23
|
+
private readonly files;
|
|
24
|
+
private readonly memories;
|
|
25
|
+
private readonly memorySet;
|
|
26
|
+
constructor(cwd: string);
|
|
27
|
+
noteCall(id: string, name: string, args: unknown): void;
|
|
28
|
+
settle(id: string, result: unknown, isError: boolean): void;
|
|
29
|
+
resolveWithoutResult(id: string): void;
|
|
30
|
+
activity(): GroupActivity;
|
|
31
|
+
private extract;
|
|
32
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Deterministic, transcript-derived activity evidence for one folded tool group.
|
|
2
|
+
// This deliberately knows no rendering or broker state: it reduces completed
|
|
3
|
+
// calls into the exact evidence already present in the session transcript.
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join, resolve } from 'node:path';
|
|
6
|
+
import { countDisplayDiffLines } from './edit-diff.js';
|
|
7
|
+
const EMPTY_ACTIVITY = Object.freeze({
|
|
8
|
+
files: Object.freeze([]),
|
|
9
|
+
memories: Object.freeze([]),
|
|
10
|
+
});
|
|
11
|
+
function object(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null ? value : undefined;
|
|
13
|
+
}
|
|
14
|
+
function filePath(args) {
|
|
15
|
+
const value = object(args);
|
|
16
|
+
const path = value?.file_path ?? value?.path;
|
|
17
|
+
return typeof path === 'string' && path !== '' ? path : undefined;
|
|
18
|
+
}
|
|
19
|
+
function resultText(result) {
|
|
20
|
+
const content = object(result)?.content;
|
|
21
|
+
if (typeof content === 'string')
|
|
22
|
+
return content;
|
|
23
|
+
if (!Array.isArray(content))
|
|
24
|
+
return '';
|
|
25
|
+
return content
|
|
26
|
+
.flatMap((part) => {
|
|
27
|
+
const value = object(part);
|
|
28
|
+
return value?.type === 'text' && typeof value.text === 'string' ? [value.text] : [];
|
|
29
|
+
})
|
|
30
|
+
.join('');
|
|
31
|
+
}
|
|
32
|
+
function lineCount(content) {
|
|
33
|
+
if (content.length === 0)
|
|
34
|
+
return 0;
|
|
35
|
+
return (content.match(/\n/g)?.length ?? 0) + (content.endsWith('\n') ? 0 : 1);
|
|
36
|
+
}
|
|
37
|
+
/** Shell-level command segments only: a quoted `crtr memory read` is data, not
|
|
38
|
+
* an invocation. This intentionally handles the same separators the viewer's
|
|
39
|
+
* command preview treats as command boundaries. */
|
|
40
|
+
function shellSegments(command) {
|
|
41
|
+
const segments = [];
|
|
42
|
+
let segment = '';
|
|
43
|
+
let quote;
|
|
44
|
+
for (let i = 0; i < command.length; i++) {
|
|
45
|
+
const char = command[i];
|
|
46
|
+
if (char === '\\' && quote !== "'") {
|
|
47
|
+
segment += char + (command[++i] ?? '');
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (quote !== undefined) {
|
|
51
|
+
if (char === quote)
|
|
52
|
+
quote = undefined;
|
|
53
|
+
segment += char;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (char === '"' || char === "'") {
|
|
57
|
+
quote = char;
|
|
58
|
+
segment += char;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (char === '\n' || char === ';' || char === '|' || char === '&' || char === '(' || char === ')') {
|
|
62
|
+
if (segment.trim())
|
|
63
|
+
segments.push(segment);
|
|
64
|
+
segment = '';
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
segment += char;
|
|
68
|
+
}
|
|
69
|
+
if (segment.trim())
|
|
70
|
+
segments.push(segment);
|
|
71
|
+
return segments;
|
|
72
|
+
}
|
|
73
|
+
function shellTokens(segment) {
|
|
74
|
+
return segment.match(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\S+/g)?.map((token) => token.length >= 2 && ((token.startsWith('"') && token.endsWith('"')) || (token.startsWith("'") && token.endsWith("'")))
|
|
75
|
+
? token.slice(1, -1)
|
|
76
|
+
: token) ?? [];
|
|
77
|
+
}
|
|
78
|
+
/** Deliberately match an executable token, not a result-shaped string or a
|
|
79
|
+
* quoted command fragment. */
|
|
80
|
+
function invokesMemoryRead(args) {
|
|
81
|
+
const command = object(args)?.command;
|
|
82
|
+
if (typeof command !== 'string')
|
|
83
|
+
return false;
|
|
84
|
+
return shellSegments(command).some((segment) => {
|
|
85
|
+
const tokens = shellTokens(segment);
|
|
86
|
+
while (/^[A-Za-z_][A-Za-z0-9_]*=\S+$/.test(tokens[0] ?? ''))
|
|
87
|
+
tokens.shift();
|
|
88
|
+
const executable = tokens[0]?.split('/').at(-1);
|
|
89
|
+
return (executable === 'crtr' || executable === 'crouter') && tokens[1] === 'memory' && tokens[2] === 'read';
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/** A resolved read starts with the complete three-line identity emitted by
|
|
93
|
+
* `memory read`; its source path follows as optional display metadata. Links and
|
|
94
|
+
* discovery output intentionally do not satisfy this shape. */
|
|
95
|
+
function resolvedMemories(result) {
|
|
96
|
+
const memories = [];
|
|
97
|
+
const identity = /^- name:\s*([^\r\n]+)\r?\n- kind:\s*[^\r\n]+\r?\n- scope:\s*[^\r\n]+(?:\r?\n- path:\s*([^\r\n]+)|\r?\n\r?\n\*\*path:\*\*\s*([^\r\n]+))?/gm;
|
|
98
|
+
for (const match of resultText(result).matchAll(identity)) {
|
|
99
|
+
const name = match[1]?.trim();
|
|
100
|
+
const path = (match[2] ?? match[3])?.trim();
|
|
101
|
+
if (name)
|
|
102
|
+
memories.push(path ? { name, path } : { name });
|
|
103
|
+
}
|
|
104
|
+
return memories;
|
|
105
|
+
}
|
|
106
|
+
/** Local mirror of pi's `resolveToCwd`: file tools expand `~` before resolving
|
|
107
|
+
* against the node cwd, and the recap must key the exact same file identically. */
|
|
108
|
+
function canonicalPath(rawPath, cwd) {
|
|
109
|
+
const normalized = rawPath === '~'
|
|
110
|
+
? homedir()
|
|
111
|
+
: rawPath.startsWith('~/') ? join(homedir(), rawPath.slice(2)) : rawPath;
|
|
112
|
+
return resolve(cwd, normalized);
|
|
113
|
+
}
|
|
114
|
+
function fileChange(name, args, result) {
|
|
115
|
+
if (name === 'edit') {
|
|
116
|
+
const diff = object(object(result)?.details)?.diff;
|
|
117
|
+
return typeof diff === 'string'
|
|
118
|
+
? { kind: 'edit', ...countDisplayDiffLines(diff), known: true }
|
|
119
|
+
: { kind: 'edit', added: 0, removed: 0, known: false };
|
|
120
|
+
}
|
|
121
|
+
if (name === 'write') {
|
|
122
|
+
const content = object(args)?.content;
|
|
123
|
+
return typeof content === 'string'
|
|
124
|
+
? { kind: 'write', added: lineCount(content), removed: 0, known: true }
|
|
125
|
+
: { kind: 'write', added: 0, removed: 0, known: false };
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
/** Per-group recorder. Calls retain only their current transcript references
|
|
130
|
+
* until they settle; the settled activity is plain immutable evidence. */
|
|
131
|
+
export class GroupActivityRecorder {
|
|
132
|
+
cwd;
|
|
133
|
+
calls = new Map();
|
|
134
|
+
files = new Map();
|
|
135
|
+
memories = [];
|
|
136
|
+
memorySet = new Set();
|
|
137
|
+
constructor(cwd) {
|
|
138
|
+
this.cwd = cwd;
|
|
139
|
+
}
|
|
140
|
+
noteCall(id, name, args) {
|
|
141
|
+
const existing = this.calls.get(id);
|
|
142
|
+
if (existing?.settled)
|
|
143
|
+
return;
|
|
144
|
+
this.calls.set(id, { name, args, settled: false });
|
|
145
|
+
}
|
|
146
|
+
settle(id, result, isError) {
|
|
147
|
+
const entry = this.calls.get(id);
|
|
148
|
+
if (!entry || entry.settled)
|
|
149
|
+
return;
|
|
150
|
+
entry.settled = true;
|
|
151
|
+
if (!isError && object(result)?.isError !== true)
|
|
152
|
+
this.extract(entry, result);
|
|
153
|
+
// Release message-owned references after the operation is reduced.
|
|
154
|
+
entry.args = undefined;
|
|
155
|
+
}
|
|
156
|
+
resolveWithoutResult(id) {
|
|
157
|
+
const entry = this.calls.get(id);
|
|
158
|
+
if (!entry || entry.settled)
|
|
159
|
+
return;
|
|
160
|
+
entry.settled = true;
|
|
161
|
+
entry.args = undefined;
|
|
162
|
+
}
|
|
163
|
+
activity() {
|
|
164
|
+
if (this.files.size === 0 && this.memories.length === 0)
|
|
165
|
+
return EMPTY_ACTIVITY;
|
|
166
|
+
const files = [...this.files.values()].map((file) => Object.freeze({ ...file }));
|
|
167
|
+
const memories = this.memories.map((memory) => Object.freeze({ ...memory }));
|
|
168
|
+
return Object.freeze({ files: Object.freeze(files), memories: Object.freeze(memories) });
|
|
169
|
+
}
|
|
170
|
+
extract(entry, result) {
|
|
171
|
+
if (entry.name === 'bash' && invokesMemoryRead(entry.args)) {
|
|
172
|
+
for (const memory of resolvedMemories(result)) {
|
|
173
|
+
if (!this.memorySet.has(memory.name)) {
|
|
174
|
+
this.memorySet.add(memory.name);
|
|
175
|
+
this.memories.push(memory);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const rawPath = filePath(entry.args);
|
|
181
|
+
const change = fileChange(entry.name, entry.args, result);
|
|
182
|
+
if (!rawPath || !change)
|
|
183
|
+
return;
|
|
184
|
+
const pathKey = canonicalPath(rawPath, this.cwd);
|
|
185
|
+
// Keep edits and writes distinct: a write is its own durable action even
|
|
186
|
+
// when it touches a path already changed by an edit in this group.
|
|
187
|
+
const key = `${change.kind}:${pathKey}`;
|
|
188
|
+
let file = this.files.get(key);
|
|
189
|
+
if (!file) {
|
|
190
|
+
file = {
|
|
191
|
+
key: pathKey,
|
|
192
|
+
displayPath: rawPath,
|
|
193
|
+
kind: change.kind,
|
|
194
|
+
added: 0,
|
|
195
|
+
removed: 0,
|
|
196
|
+
hasKnownCounts: false,
|
|
197
|
+
countsIncomplete: false,
|
|
198
|
+
};
|
|
199
|
+
this.files.set(key, file);
|
|
200
|
+
}
|
|
201
|
+
file.added += change.added;
|
|
202
|
+
file.removed += change.removed;
|
|
203
|
+
file.hasKnownCounts ||= change.known;
|
|
204
|
+
file.countsIncomplete ||= !change.known;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Container } from '@earendil-works/pi-tui';
|
|
2
|
+
import type { AttachPalette } from '../config.js';
|
|
3
|
+
import type { ToolGroupSummary } from '../../../shared/tool-groups.js';
|
|
4
|
+
import type { GroupActivity } from './group-activity.js';
|
|
5
|
+
/** Direct history child for a folded group. It is empty (zero rows) unless the
|
|
6
|
+
* group is eligible to collapse, preserving the member rows for Ctrl+O. */
|
|
7
|
+
export declare class GroupRecapComponent extends Container {
|
|
8
|
+
setRecap(summary: ToolGroupSummary | undefined, toolCount: number, activity: GroupActivity, detailed: boolean, palette: AttachPalette): void;
|
|
9
|
+
private addFile;
|
|
10
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Folded visual recap for one broker-summarized tool group. All evidence arrives
|
|
2
|
+
// pre-reduced from GroupActivityRecorder; this component owns only layout/color.
|
|
3
|
+
import { Container, Spacer, Text, getCapabilities, hyperlink, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { ICON } from '../../../core/inspector/model.js';
|
|
7
|
+
import { TOOL_ICON } from '../../../core/preview-registry.js';
|
|
8
|
+
const MEMORY_ICON = String.fromCodePoint(0xf02d);
|
|
9
|
+
function count(value, singular, plural) {
|
|
10
|
+
return `${value} ${value === 1 ? singular : plural}`;
|
|
11
|
+
}
|
|
12
|
+
function shortened(path) {
|
|
13
|
+
const home = homedir();
|
|
14
|
+
return path.startsWith(home) ? `~${path.slice(home.length)}` : path;
|
|
15
|
+
}
|
|
16
|
+
function filePath(file) {
|
|
17
|
+
const path = shortened(file.displayPath);
|
|
18
|
+
return getCapabilities().hyperlinks ? hyperlink(path, pathToFileURL(file.key).href) : path;
|
|
19
|
+
}
|
|
20
|
+
function memoryName(memory, palette) {
|
|
21
|
+
const name = palette.muted(memory.name);
|
|
22
|
+
return memory.path && getCapabilities().hyperlinks
|
|
23
|
+
? hyperlink(name, pathToFileURL(memory.path).href)
|
|
24
|
+
: name;
|
|
25
|
+
}
|
|
26
|
+
function distinctFileCount(files) {
|
|
27
|
+
return new Set(files.map((file) => file.key)).size;
|
|
28
|
+
}
|
|
29
|
+
class RecapDetailLine {
|
|
30
|
+
prefix;
|
|
31
|
+
path;
|
|
32
|
+
suffix;
|
|
33
|
+
constructor(prefix, path, suffix) {
|
|
34
|
+
this.prefix = prefix;
|
|
35
|
+
this.path = path;
|
|
36
|
+
this.suffix = suffix;
|
|
37
|
+
}
|
|
38
|
+
invalidate() { }
|
|
39
|
+
render(width) {
|
|
40
|
+
const pathWidth = Math.max(1, width - visibleWidth(this.prefix) - visibleWidth(this.suffix));
|
|
41
|
+
const path = truncateToWidth(this.path, pathWidth, '…');
|
|
42
|
+
return [truncateToWidth(`${this.prefix}${path}${this.suffix}`, width, '')];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Direct history child for a folded group. It is empty (zero rows) unless the
|
|
46
|
+
* group is eligible to collapse, preserving the member rows for Ctrl+O. */
|
|
47
|
+
export class GroupRecapComponent extends Container {
|
|
48
|
+
setRecap(summary, toolCount, activity, detailed, palette) {
|
|
49
|
+
this.clear();
|
|
50
|
+
if (!summary)
|
|
51
|
+
return;
|
|
52
|
+
this.addChild(new Spacer(1));
|
|
53
|
+
if (detailed) {
|
|
54
|
+
for (const memory of activity.memories) {
|
|
55
|
+
this.addChild(new RecapDetailLine(`${palette.info(MEMORY_ICON)} `, memoryName(memory, palette), ''));
|
|
56
|
+
}
|
|
57
|
+
for (const file of activity.files)
|
|
58
|
+
this.addFile(file, palette);
|
|
59
|
+
}
|
|
60
|
+
const toolCallCount = `${palette.active(TOOL_ICON.bash)} ${palette.muted(count(toolCount, 'tool call', 'tool calls'))}`;
|
|
61
|
+
if (detailed) {
|
|
62
|
+
this.addChild(new Text(toolCallCount, 0, 0));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const stats = [toolCallCount];
|
|
66
|
+
if (summary.nodesSpawned >= 1) {
|
|
67
|
+
stats.push(`${palette.accent(ICON.graph)} ${palette.muted(count(summary.nodesSpawned, 'node spawned', 'nodes spawned'))}`);
|
|
68
|
+
}
|
|
69
|
+
const changedFiles = distinctFileCount(activity.files);
|
|
70
|
+
if (changedFiles >= 1) {
|
|
71
|
+
stats.push(`${palette.warning(TOOL_ICON.edit)} ${palette.muted(count(changedFiles, 'file changed', 'files changed'))}`);
|
|
72
|
+
}
|
|
73
|
+
if (activity.memories.length >= 1) {
|
|
74
|
+
stats.push(`${palette.info(MEMORY_ICON)} ${palette.muted(count(activity.memories.length, 'memory read', 'memory reads'))}`);
|
|
75
|
+
}
|
|
76
|
+
this.addChild(new Text(stats.join(palette.muted(' · ')), 0, 0));
|
|
77
|
+
}
|
|
78
|
+
for (const bullet of summary.bullets)
|
|
79
|
+
this.addChild(new Text(palette.muted(` • ${bullet.trim()}`), 0, 0));
|
|
80
|
+
this.addChild(new Spacer(1));
|
|
81
|
+
}
|
|
82
|
+
addFile(file, palette) {
|
|
83
|
+
const counts = file.hasKnownCounts
|
|
84
|
+
? `${palette.diffAdded(`+${file.added}`)}${file.kind === 'edit' ? ` ${palette.diffRemoved(`-${file.removed}`)}` : ''}`
|
|
85
|
+
: '';
|
|
86
|
+
const availability = file.countsIncomplete
|
|
87
|
+
? palette.muted(file.hasKnownCounts ? ' · counts incomplete' : 'counts unavailable')
|
|
88
|
+
: '';
|
|
89
|
+
const suffix = counts || availability ? ` ${counts}${availability}` : '';
|
|
90
|
+
const icon = file.kind === 'write' ? TOOL_ICON.write : TOOL_ICON.edit;
|
|
91
|
+
this.addChild(new RecapDetailLine(`${palette.warning(icon)} `, filePath(file), suffix));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface HtmlMarkdownStyles {
|
|
2
|
+
kbd: (text: string) => string;
|
|
3
|
+
mark: (text: string) => string;
|
|
4
|
+
hint: (text: string) => string;
|
|
5
|
+
}
|
|
6
|
+
export interface HtmlMarkdownOptions {
|
|
7
|
+
/** Undefined honors each block's `open` attribute. A boolean is the viewer's
|
|
8
|
+
* global Ctrl+O override. */
|
|
9
|
+
detailsExpanded: boolean | undefined;
|
|
10
|
+
styles: HtmlMarkdownStyles;
|
|
11
|
+
}
|
|
12
|
+
/** Transform the strict supported HTML subset in one Markdown string. */
|
|
13
|
+
export declare function transformHtmlMarkdown(source: string, options: HtmlMarkdownOptions): string;
|
|
14
|
+
/** Copy an assistant message for terminal rendering, enhancing only text parts. */
|
|
15
|
+
export declare function transformMessageHtml<T extends {
|
|
16
|
+
content?: unknown;
|
|
17
|
+
}>(message: T, options: HtmlMarkdownOptions): T;
|