@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
|
@@ -20,8 +20,10 @@ test('setup keybinding draft edits, disables, resets, and discards transactional
|
|
|
20
20
|
const draft = new SetupKeybindingsDraft({ 'crtr.attach.graph.toggle': ['alt+x'] });
|
|
21
21
|
assert.equal(draft.expression('crtr.attach.graph.toggle'), 'alt+x');
|
|
22
22
|
assert.equal(draft.dirty, false);
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
// M-U (not M-Y): alt+shift+y is now the crtr.attach.copy.message default, so
|
|
24
|
+
// the uppercase-normalization probe must use a gesture no catalog entry owns.
|
|
25
|
+
assert.equal(draft.edit('crtr.attach.graph.toggle', 'M-U, ctrl+g').ok, true);
|
|
26
|
+
assert.deepEqual(draft.overrides()['crtr.attach.graph.toggle'], ['alt+shift+u', 'ctrl+g']);
|
|
25
27
|
assert.equal(draft.dirty, true);
|
|
26
28
|
assert.equal(draft.unbind('crtr.attach.graph.toggle').ok, true);
|
|
27
29
|
assert.deepEqual(draft.overrides()['crtr.attach.graph.toggle'], []);
|
|
@@ -34,9 +36,11 @@ test('setup keybinding draft edits, disables, resets, and discards transactional
|
|
|
34
36
|
});
|
|
35
37
|
test('setup keybinding draft binds the comma key, which doubles as the gesture separator', () => {
|
|
36
38
|
const draft = new SetupKeybindingsDraft(undefined);
|
|
37
|
-
// A comma with nothing on one side is the comma KEY, not a separator.
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
// A comma with nothing on one side is the comma KEY, not a separator. Bound
|
|
40
|
+
// onto a menu selector whose default is NOT the comma (settings already
|
|
41
|
+
// defaults to it), so the draft records a real override.
|
|
42
|
+
assert.equal(draft.edit('crtr.tmux.menu.attach.whip', ',').ok, true);
|
|
43
|
+
assert.deepEqual(draft.overrides()['crtr.tmux.menu.attach.whip'], [',']);
|
|
40
44
|
// A list containing the comma key round-trips through the rendered expression.
|
|
41
45
|
assert.equal(draft.edit('crtr.attach.graph.toggle', ', , ctrl+g').ok, true);
|
|
42
46
|
assert.deepEqual(draft.overrides()['crtr.attach.graph.toggle'], [',', 'ctrl+g']);
|
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
// Run with: node --import tsx/esm --test src/commands/sys/__tests__/setup-front-door.test.ts
|
|
2
2
|
//
|
|
3
|
-
// M1 — `crtr sys setup` front-door reconciliation
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// isolated with a temp XDG_STATE_HOME (see human-deliver.test.ts); the canvas is
|
|
8
|
-
// isolated with a temp CRTR_HOME + HOME.
|
|
9
|
-
//
|
|
10
|
-
// Stage B-9: `reconcileInboxFrontDoor` no longer opens canvas.db — its node
|
|
11
|
-
// enumeration goes through the crtrd API (`cliClient().listNodes()`). Each test
|
|
12
|
-
// therefore stands up an in-process `createApiServer()` bound to the isolated
|
|
13
|
-
// CRTR_HOME's unix socket; `cliClient()` (autostart on) connects to it, so no
|
|
14
|
-
// real daemon is spawned. `spawnNode` still seeds the canvas rows the server
|
|
15
|
-
// reads back.
|
|
3
|
+
// M1 — `crtr sys setup` front-door reconciliation refreshes crouter's tmux
|
|
4
|
+
// bindings, including the inbox toggle, as a best-effort operation. The fixture
|
|
5
|
+
// isolates its canvas with a temporary CRTR_HOME + HOME and legacy binding state
|
|
6
|
+
// with a temporary XDG_STATE_HOME.
|
|
16
7
|
import { test, before, beforeEach, afterEach, after } from 'node:test';
|
|
17
8
|
import assert from 'node:assert/strict';
|
|
18
9
|
import { spawnSync } from 'node:child_process';
|
|
19
|
-
import { existsSync, mkdtempSync
|
|
10
|
+
import { existsSync, mkdtempSync } from 'node:fs';
|
|
20
11
|
import { tmpdir } from 'node:os';
|
|
21
12
|
import { join } from 'node:path';
|
|
22
|
-
import { listInboxRoots } from '@crouton-kit/humanloop';
|
|
23
13
|
import { spawnNode } from '../../../core/runtime/nodes.js';
|
|
24
14
|
import { closeDb } from '../../../core/canvas/index.js';
|
|
25
|
-
import { apiSocketPath
|
|
15
|
+
import { apiSocketPath } from '../../../core/canvas/paths.js';
|
|
26
16
|
import { createApiServer } from '../../../daemon/api/server.js';
|
|
27
17
|
import { reconcileInboxFrontDoor } from '../setup-core.js';
|
|
28
18
|
import { sysSetupLeaf } from '../setup.js';
|
|
@@ -66,19 +56,6 @@ after(() => {
|
|
|
66
56
|
delete process.env['CRTR_HOME'];
|
|
67
57
|
delete process.env['XDG_STATE_HOME'];
|
|
68
58
|
});
|
|
69
|
-
test('reconcile registers the one canvas nodes root, regardless of how many node cwds exist', async () => {
|
|
70
|
-
// Node cwds no longer fan out into per-cwd roots: every bridge ticket lives
|
|
71
|
-
// under the canvas nodes root, so that single root is the whole contract.
|
|
72
|
-
const otherCwd = mkdtempSync(join(tmpdir(), 'crtr-setup-cwd-'));
|
|
73
|
-
spawnNode({ kind: 'general', parent: null, cwd: home, name: 'a' });
|
|
74
|
-
spawnNode({ kind: 'general', parent: null, cwd: home, name: 'b' });
|
|
75
|
-
spawnNode({ kind: 'general', parent: null, cwd: otherCwd, name: 'c' });
|
|
76
|
-
const { interactionRootsRegistered } = await reconcileInboxFrontDoor();
|
|
77
|
-
assert.equal(interactionRootsRegistered, 1, 'exactly one registration: the canvas nodes root');
|
|
78
|
-
const crouterRoots = listInboxRoots().filter((r) => r.owner === 'crouter');
|
|
79
|
-
assert.equal(crouterRoots.length, 1, 'no per-cwd roots linger in the humanloop registry');
|
|
80
|
-
assert.equal(crouterRoots[0]?.root, realpathSync(nodesRoot()), 'the registered root is the canvas nodes root');
|
|
81
|
-
});
|
|
82
59
|
test('invoking `crtr sys setup` (non-TTY leaf run) reconciles the front door', async () => {
|
|
83
60
|
// Exercise the real control flow — sysSetupLeaf.run() → runSetup() →
|
|
84
61
|
// reconcileInboxFrontDoor — not the helper directly. With no TTY the leaf
|
|
@@ -97,11 +74,6 @@ test('invoking `crtr sys setup` (non-TTY leaf run) reconciles the front door', a
|
|
|
97
74
|
process.stdout.write = originalWrite;
|
|
98
75
|
Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY, configurable: true });
|
|
99
76
|
}
|
|
100
|
-
const homeReal = realpathSync(home);
|
|
101
|
-
const crouterRoots = listInboxRoots().filter((r) => r.owner === 'crouter');
|
|
102
|
-
// registerCrouterRoot maps the node cwd to its workspace interactions dir
|
|
103
|
-
// under that cwd, so the registered root is rooted at the node's home.
|
|
104
|
-
assert.ok(crouterRoots.some((r) => r.root.startsWith(homeReal)), 'the leaf invocation registered the node cwd as an owner-crouter interaction root');
|
|
105
77
|
});
|
|
106
78
|
test('reconcile refreshes the inbox tmux binding', async (t) => {
|
|
107
79
|
if (spawnSync('tmux', ['-V']).status !== 0) {
|
|
@@ -118,7 +90,7 @@ test('reconcile refreshes the inbox tmux binding', async (t) => {
|
|
|
118
90
|
try {
|
|
119
91
|
await reconcileInboxFrontDoor();
|
|
120
92
|
const binding = spawnSync('tmux', ['-S', socket, 'list-keys', '-T', 'root'], { encoding: 'utf8' }).stdout;
|
|
121
|
-
assert.match(binding, /bind-key\s+-T root M-i\s+run-shell.*
|
|
93
|
+
assert.match(binding, /bind-key\s+-T root M-i\s+run-shell.*crtr human inbox toggle/);
|
|
122
94
|
}
|
|
123
95
|
finally {
|
|
124
96
|
if (priorTmux === undefined)
|
|
@@ -128,10 +100,3 @@ test('reconcile refreshes the inbox tmux binding', async (t) => {
|
|
|
128
100
|
spawnSync('tmux', ['-S', socket, 'kill-server'], { encoding: 'utf8' });
|
|
129
101
|
}
|
|
130
102
|
});
|
|
131
|
-
test('reconcile is idempotent for owner crouter — re-running does not error and keeps the roots', async () => {
|
|
132
|
-
spawnNode({ kind: 'general', parent: null, cwd: home, name: 'a' });
|
|
133
|
-
await reconcileInboxFrontDoor();
|
|
134
|
-
const { interactionRootsRegistered } = await reconcileInboxFrontDoor();
|
|
135
|
-
assert.equal(interactionRootsRegistered, 1);
|
|
136
|
-
assert.ok(listInboxRoots().some((r) => r.owner === 'crouter'));
|
|
137
|
-
});
|
|
@@ -41,6 +41,16 @@ function assertUserScopeBrokerThresholds(key, scope) {
|
|
|
41
41
|
throw usage('brokerThresholds are available only in user scope');
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
+
function assertWorkingGerundsScope(key, scope) {
|
|
45
|
+
if (key === 'working_gerunds' && scope !== 'user') {
|
|
46
|
+
throw usage('working_gerunds is available only in user scope');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function assertWhipMessagesScope(key, scope) {
|
|
50
|
+
if (key === 'whip_messages' && scope !== 'user') {
|
|
51
|
+
throw usage('whip_messages are available only in user scope');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
44
54
|
function assertUserSettingScope(key, scope) {
|
|
45
55
|
if (findUserSetting(key) !== undefined && scope !== 'user') {
|
|
46
56
|
throw usage(`${key} is available only in user scope`);
|
|
@@ -80,6 +90,20 @@ function modelLadderPatch(key, rawValue) {
|
|
|
80
90
|
function setNestedValue(cfg, key, rawValue, value) {
|
|
81
91
|
const parts = key.split('.');
|
|
82
92
|
const topKey = parts[0];
|
|
93
|
+
if (key === 'working_gerunds' || key === 'whip_messages') {
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(rawValue);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
throw usage(`${key} must be a JSON array of non-empty strings`);
|
|
100
|
+
}
|
|
101
|
+
if (!Array.isArray(parsed) || parsed.length === 0 || !parsed.every((entry) => typeof entry === 'string' && entry.trim() !== '')) {
|
|
102
|
+
throw usage(`${key} must be a non-empty JSON array of non-empty strings`);
|
|
103
|
+
}
|
|
104
|
+
cfg[key] = parsed.map((entry) => entry.trim());
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
83
107
|
if (topKey === 'keybindings') {
|
|
84
108
|
throw usage('keybindings are edited only through `crtr sys setup`');
|
|
85
109
|
}
|
|
@@ -152,13 +176,13 @@ const configGet = defineLeaf({
|
|
|
152
176
|
const configSet = defineLeaf({
|
|
153
177
|
name: 'set',
|
|
154
178
|
description: 'write a config value by key',
|
|
155
|
-
whenToUse: 'you want to change a supported
|
|
179
|
+
whenToUse: 'you want to change a supported crtr setting in user or project scope. Use sys setup instead for keybindings, and sys config get to inspect values.',
|
|
156
180
|
help: {
|
|
157
181
|
name: 'sys config set',
|
|
158
182
|
summary: 'write a config value by dotted key',
|
|
159
183
|
params: [
|
|
160
|
-
{ kind: 'positional', name: 'key', type: 'string', required: true, constraint: `Dotted key path. User-scope scalar settings: ${SCALAR_SETTING_HELP}. Also supported: brokerThresholds.warning and brokerThresholds.automaticReviveCap (user scope; integer >= 1), modelLadders.defaultProvider, and modelLadders.<anthropic|openai>.<ultra|strong|medium|light>. Keybindings are edited only through sys setup.` },
|
|
161
|
-
{ kind: 'flag', name: 'value', type: 'string', required: true, constraint: 'value VALUE — string, required.
|
|
184
|
+
{ kind: 'positional', name: 'key', type: 'string', required: true, constraint: `Dotted key path. User-scope scalar settings: ${SCALAR_SETTING_HELP}. Also supported: working_gerunds and whip_messages (non-empty JSON string arrays), brokerThresholds.warning and brokerThresholds.automaticReviveCap (user scope; integer >= 1), modelLadders.defaultProvider, and modelLadders.<anthropic|openai>.<ultra|strong|medium|light>. Keybindings are edited only through sys setup.` },
|
|
185
|
+
{ kind: 'flag', name: 'value', type: 'string', required: true, constraint: 'value VALUE — string, required. working_gerunds and whip_messages accept JSON arrays; other values are stored as-is if quoted and coerced to number or boolean when unambiguous.' },
|
|
162
186
|
{ kind: 'flag', name: 'scope', type: 'enum', choices: ['user', 'project'], required: false, constraint: 'Scope to write to. Default: user. Project scope is supported only for modelLadders.' },
|
|
163
187
|
],
|
|
164
188
|
output: [
|
|
@@ -174,6 +198,8 @@ const configSet = defineLeaf({
|
|
|
174
198
|
const rawValue = input['value'];
|
|
175
199
|
const scope = resolveScope(input['scope']);
|
|
176
200
|
assertUserScopeBrokerThresholds(key, scope);
|
|
201
|
+
assertWorkingGerundsScope(key, scope);
|
|
202
|
+
assertWhipMessagesScope(key, scope);
|
|
177
203
|
assertUserSettingScope(key, scope);
|
|
178
204
|
// Flags are stringly-typed; coerce to number or boolean when unambiguous
|
|
179
205
|
const parsed = parseConfigValue(rawValue);
|
|
@@ -18,7 +18,7 @@ import { projectTier1Event, readLogSnapshot } from '../../core/events/read.js';
|
|
|
18
18
|
import { readPackageVersion } from './shared.js';
|
|
19
19
|
/** Canonical repo for crtr harness feedback — feedback is always about the
|
|
20
20
|
* tool, regardless of which project the reporting agent is working in. */
|
|
21
|
-
const FEEDBACK_REPO = '
|
|
21
|
+
const FEEDBACK_REPO = 'vallum-security/crouter';
|
|
22
22
|
async function collectContext() {
|
|
23
23
|
const env = process.env;
|
|
24
24
|
const nodeId = env['CRTR_NODE_ID'] ?? null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type BindingId, type BindingResolution, type KeybindingDiagnostic, type SparseKeybindingOverrides } from '../../core/keybindings/index.js';
|
|
2
|
-
export type SetupPackageId = 'crtr-extensions' | '
|
|
2
|
+
export type SetupPackageId = 'crtr-extensions' | 'oauth-adapter' | 'capture-plugin';
|
|
3
3
|
/** `nerd-font` is not a command on PATH like the other two — it is an installed
|
|
4
4
|
* font face, detected by fontconfig/font-directory scan. The viewer renders
|
|
5
5
|
* every tool and command icon with Nerd Font codepoints, so without it a fresh
|
|
@@ -55,7 +55,6 @@ export interface SetupExecutionSummary {
|
|
|
55
55
|
skipped: string[];
|
|
56
56
|
exaKeyWritten: boolean;
|
|
57
57
|
exaKeyPath: string;
|
|
58
|
-
interactionRootsRegistered: number;
|
|
59
58
|
}
|
|
60
59
|
export interface SetupInitialState {
|
|
61
60
|
manifest: SetupPackageManifestEntry[];
|
|
@@ -75,10 +74,17 @@ export declare class SetupKeybindingsDraft {
|
|
|
75
74
|
private baselineInvalidRoot;
|
|
76
75
|
private invalidRoot;
|
|
77
76
|
private resolutionCache;
|
|
78
|
-
|
|
77
|
+
private expectedPassthrough;
|
|
78
|
+
private baselinePassthrough;
|
|
79
|
+
private currentPassthrough;
|
|
80
|
+
constructor(rawKeybindings: unknown, rawTmuxPassthrough?: unknown);
|
|
79
81
|
get dirty(): boolean;
|
|
80
82
|
overrides(): Record<string, unknown>;
|
|
81
83
|
expectedKeybindings(): unknown;
|
|
84
|
+
tmuxPassthrough(): readonly BindingId[];
|
|
85
|
+
expectedTmuxPassthrough(): unknown;
|
|
86
|
+
usesTmuxPassthrough(id: BindingId): boolean;
|
|
87
|
+
toggleTmuxPassthrough(id: BindingId): void;
|
|
82
88
|
resolution(): BindingResolution<BindingId>;
|
|
83
89
|
/** True while the persisted `keybindings` root is a non-object (e.g. a string):
|
|
84
90
|
* edits cannot be layered onto an invalid root, so the tab must reset-all first. */
|
|
@@ -89,7 +95,7 @@ export declare class SetupKeybindingsDraft {
|
|
|
89
95
|
resetRow(id: BindingId): void;
|
|
90
96
|
resetAll(): void;
|
|
91
97
|
discard(): void;
|
|
92
|
-
markSaved(overrides: SparseKeybindingOverrides<BindingId
|
|
98
|
+
markSaved(overrides: SparseKeybindingOverrides<BindingId>, tmuxPassthrough?: readonly BindingId[]): void;
|
|
93
99
|
}
|
|
94
100
|
export declare function buildSetupManifest(resolveBuiltinPackageDir?: (name: string) => string): SetupPackageManifestEntry[];
|
|
95
101
|
export declare function normalizePackageIdentity(source: string, settingsDir: string, homeDir: string): SetupPackageIdentity;
|
|
@@ -123,12 +129,8 @@ export declare function buildSetupStaticInstructions(opts: {
|
|
|
123
129
|
}): SetupStaticInstructions;
|
|
124
130
|
export declare function renderSetupStaticInstructions(state: Pick<SetupInitialState, 'manifest' | 'installedPackageIds' | 'systemTools' | 'exaKeyPath'>): string;
|
|
125
131
|
export declare function writeExaKey(exaKeyPath: string, exaKey: string): Promise<void>;
|
|
126
|
-
/** Refresh crouter-owned tmux bindings
|
|
127
|
-
|
|
128
|
-
* Both are best-effort: setup must never fail because tmux or humanloop is unavailable. */
|
|
129
|
-
export declare function reconcileInboxFrontDoor(): Promise<{
|
|
130
|
-
interactionRootsRegistered: number;
|
|
131
|
-
}>;
|
|
132
|
+
/** Refresh crouter-owned tmux bindings. Setup must never fail because tmux is unavailable. */
|
|
133
|
+
export declare function reconcileInboxFrontDoor(): Promise<void>;
|
|
132
134
|
export declare function summarizeSetupExecution(result: {
|
|
133
135
|
installedPackages: string[];
|
|
134
136
|
skippedPackages: string[];
|
|
@@ -136,7 +138,6 @@ export declare function summarizeSetupExecution(result: {
|
|
|
136
138
|
skippedSystemDeps: string[];
|
|
137
139
|
exaKeyWritten: boolean;
|
|
138
140
|
exaKeyPath: string;
|
|
139
|
-
interactionRootsRegistered: number;
|
|
140
141
|
}): SetupExecutionSummary;
|
|
141
142
|
export declare function formatSetupExecutionSummary(summary: SetupExecutionSummary): string;
|
|
142
143
|
export declare function executeSetupSubmission(submission: SetupSubmission): Promise<SetupExecutionSummary>;
|
|
@@ -9,9 +9,9 @@ import { builtinPiPackageDir } from '../../core/scope.js';
|
|
|
9
9
|
import { readJsonIfExists } from '../../core/fs-utils.js';
|
|
10
10
|
import { resolveBundledPiCliPath } from '../../core/runtime/pi-cli.js';
|
|
11
11
|
import { installTmuxBindings } from '../../core/runtime/tmux-chrome.js';
|
|
12
|
+
import { normalizeTmuxPassthrough } from '../../core/config.js';
|
|
12
13
|
import { detectNerdFont, nerdFontInstallCommand, NERD_FONT_SELECT_HINT } from '../../core/runtime/nerd-font.js';
|
|
13
|
-
import {
|
|
14
|
-
import { registerCrouterRoot } from '../human/shared.js';
|
|
14
|
+
import { ensureRenderer, isRendererReady } from '../../core/termrender/termrender.js';
|
|
15
15
|
import { installFromMarketplace } from '../pkg/plugin-manage.js';
|
|
16
16
|
import { findPluginByName } from '../../core/resolver.js';
|
|
17
17
|
function isKeybindingsObject(value) {
|
|
@@ -33,16 +33,23 @@ export class SetupKeybindingsDraft {
|
|
|
33
33
|
baselineInvalidRoot;
|
|
34
34
|
invalidRoot;
|
|
35
35
|
resolutionCache;
|
|
36
|
-
|
|
36
|
+
expectedPassthrough;
|
|
37
|
+
baselinePassthrough;
|
|
38
|
+
currentPassthrough;
|
|
39
|
+
constructor(rawKeybindings, rawTmuxPassthrough = undefined) {
|
|
37
40
|
this.expected = rawKeybindings;
|
|
38
41
|
this.baseline = cloneKeybindings(rawKeybindings);
|
|
39
42
|
this.current = cloneKeybindings(rawKeybindings);
|
|
40
43
|
this.baselineInvalidRoot = rawKeybindings !== undefined && !isKeybindingsObject(rawKeybindings) ? rawKeybindings : undefined;
|
|
41
44
|
this.invalidRoot = this.baselineInvalidRoot;
|
|
45
|
+
this.expectedPassthrough = rawTmuxPassthrough;
|
|
46
|
+
this.baselinePassthrough = normalizeTmuxPassthrough(rawTmuxPassthrough);
|
|
47
|
+
this.currentPassthrough = [...this.baselinePassthrough];
|
|
42
48
|
}
|
|
43
49
|
get dirty() {
|
|
44
50
|
return !isDeepStrictEqual(this.current, this.baseline)
|
|
45
|
-
|| !isDeepStrictEqual(this.invalidRoot, this.baselineInvalidRoot)
|
|
51
|
+
|| !isDeepStrictEqual(this.invalidRoot, this.baselineInvalidRoot)
|
|
52
|
+
|| !isDeepStrictEqual(this.currentPassthrough, this.baselinePassthrough);
|
|
46
53
|
}
|
|
47
54
|
overrides() {
|
|
48
55
|
return cloneKeybindings(this.current);
|
|
@@ -50,6 +57,20 @@ export class SetupKeybindingsDraft {
|
|
|
50
57
|
expectedKeybindings() {
|
|
51
58
|
return this.expected;
|
|
52
59
|
}
|
|
60
|
+
tmuxPassthrough() {
|
|
61
|
+
return [...this.currentPassthrough];
|
|
62
|
+
}
|
|
63
|
+
expectedTmuxPassthrough() {
|
|
64
|
+
return this.expectedPassthrough;
|
|
65
|
+
}
|
|
66
|
+
usesTmuxPassthrough(id) {
|
|
67
|
+
return this.currentPassthrough.includes(id);
|
|
68
|
+
}
|
|
69
|
+
toggleTmuxPassthrough(id) {
|
|
70
|
+
this.currentPassthrough = this.currentPassthrough.includes(id)
|
|
71
|
+
? this.currentPassthrough.filter((candidate) => candidate !== id)
|
|
72
|
+
: [...this.currentPassthrough, id];
|
|
73
|
+
}
|
|
53
74
|
resolution() {
|
|
54
75
|
if (this.resolutionCache === undefined) {
|
|
55
76
|
this.resolutionCache = resolveKeybindings(this.invalidRoot === undefined ? this.current : this.invalidRoot);
|
|
@@ -124,18 +145,23 @@ export class SetupKeybindingsDraft {
|
|
|
124
145
|
}
|
|
125
146
|
resetAll() {
|
|
126
147
|
this.current = {};
|
|
148
|
+
this.currentPassthrough = [];
|
|
127
149
|
this.invalidRoot = undefined;
|
|
128
150
|
this.resolutionCache = undefined;
|
|
129
151
|
}
|
|
130
152
|
discard() {
|
|
131
153
|
this.current = cloneKeybindings(this.baseline);
|
|
154
|
+
this.currentPassthrough = [...this.baselinePassthrough];
|
|
132
155
|
this.invalidRoot = this.baselineInvalidRoot;
|
|
133
156
|
this.resolutionCache = undefined;
|
|
134
157
|
}
|
|
135
|
-
markSaved(overrides) {
|
|
158
|
+
markSaved(overrides, tmuxPassthrough = []) {
|
|
136
159
|
this.expected = Object.keys(overrides).length === 0 ? undefined : cloneKeybindings(overrides);
|
|
137
160
|
this.baseline = cloneKeybindings(overrides);
|
|
138
161
|
this.current = cloneKeybindings(overrides);
|
|
162
|
+
this.expectedPassthrough = tmuxPassthrough.length === 0 ? undefined : [...tmuxPassthrough];
|
|
163
|
+
this.baselinePassthrough = [...tmuxPassthrough];
|
|
164
|
+
this.currentPassthrough = [...tmuxPassthrough];
|
|
139
165
|
this.baselineInvalidRoot = undefined;
|
|
140
166
|
this.invalidRoot = undefined;
|
|
141
167
|
this.resolutionCache = undefined;
|
|
@@ -147,11 +173,6 @@ const PACKAGE_COPY = {
|
|
|
147
173
|
shortDescription: 'crtr companion extensions — command palette, help gating, statusline, subscription/OAuth rotation, nested context.',
|
|
148
174
|
longDescription: 'Bundles the extensions built for crtr: a crtr slash-command palette, crtr/crouter help gating, surfacing of Claude Code marketplace plugin commands, nested AGENTS.md/CLAUDE.md loading, a model/subscription/token statusline badge, OAuth login + rotation across multiple Claude subscriptions (provider-rotation), and system-prompt trimming. The OAuth/rotation piece is what lets crtr authenticate your Claude account.',
|
|
149
175
|
},
|
|
150
|
-
'mode-switch': {
|
|
151
|
-
name: 'pi-mode-switch',
|
|
152
|
-
shortDescription: 'Alt+Shift+P cycles spec / plan / normal modes; injects mode-specific guidance on change.',
|
|
153
|
-
longDescription: 'Press Alt+Shift+P to rotate between three operating modes — spec (requirements gathering), plan (design before code), and normal (execution). Each switch appends mode-tailored guidance to keep the agent in the right gear.',
|
|
154
|
-
},
|
|
155
176
|
'oauth-adapter': {
|
|
156
177
|
name: 'pi-claude-oauth-adapter',
|
|
157
178
|
shortDescription: 'Anthropic OAuth / Claude Code credential compatibility for pi.',
|
|
@@ -165,20 +186,17 @@ const PACKAGE_COPY = {
|
|
|
165
186
|
};
|
|
166
187
|
const PACKAGE_SOURCES = {
|
|
167
188
|
'crtr-extensions': { kind: 'local-path', source: builtinPiPackageDir('pi-crtr-extensions') },
|
|
168
|
-
'mode-switch': { kind: 'local-path', source: builtinPiPackageDir('pi-mode-switch') },
|
|
169
189
|
'oauth-adapter': { kind: 'npm', source: 'npm:pi-claude-oauth-adapter@0.1.2' },
|
|
170
190
|
'capture-plugin': { kind: 'marketplace-plugin', source: 'crouter-official-marketplace/capture' },
|
|
171
191
|
};
|
|
172
192
|
const LOCAL_PACKAGE_NAME_ALIASES = {
|
|
173
193
|
'crtr-extensions': ['pi-crtr-extensions'],
|
|
174
|
-
'mode-switch': ['pi-mode-switch'],
|
|
175
194
|
'oauth-adapter': [],
|
|
176
195
|
'capture-plugin': [],
|
|
177
196
|
};
|
|
178
197
|
export function buildSetupManifest(resolveBuiltinPackageDir = builtinPiPackageDir) {
|
|
179
198
|
return [
|
|
180
199
|
'crtr-extensions',
|
|
181
|
-
'mode-switch',
|
|
182
200
|
'oauth-adapter',
|
|
183
201
|
'capture-plugin',
|
|
184
202
|
].map((id) => {
|
|
@@ -452,7 +470,7 @@ export function renderSetupStaticInstructions(state) {
|
|
|
452
470
|
'',
|
|
453
471
|
instructions.exaLine,
|
|
454
472
|
'',
|
|
455
|
-
`Inbox
|
|
473
|
+
`Inbox: the inbox-toggle key (${inboxShortcut() ?? 'disabled'}) is a crouter keybinding — view or rebind it in the \`crtr sys setup\` keybindings tab; it is installed on the same tmux server as every other crouter binding.`,
|
|
456
474
|
instructions.footer,
|
|
457
475
|
].join('\n') + '\n';
|
|
458
476
|
}
|
|
@@ -468,38 +486,27 @@ function installPiPackage(source, piCliPath = resolveBundledPiCliPath()) {
|
|
|
468
486
|
throw new Error(`pi install failed: ${source}`);
|
|
469
487
|
}
|
|
470
488
|
}
|
|
471
|
-
/**
|
|
472
|
-
*
|
|
473
|
-
*
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
runShellCommand(command);
|
|
481
|
-
return true;
|
|
489
|
+
/** Provision the pinned termrender venv — crouter's one remaining out-of-tree
|
|
490
|
+
* dependency. Best-effort: a renderer that will not provision (no `uv`, no
|
|
491
|
+
* network) reports as skipped and never fails setup. */
|
|
492
|
+
function ensureManagedRenderer() {
|
|
493
|
+
if (isRendererReady())
|
|
494
|
+
return 'current';
|
|
495
|
+
process.stdout.write('Provisioning the pinned termrender renderer…\n');
|
|
496
|
+
ensureRenderer();
|
|
497
|
+
return isRendererReady() ? 'provisioned' : 'unavailable';
|
|
482
498
|
}
|
|
483
499
|
export async function writeExaKey(exaKeyPath, exaKey) {
|
|
484
500
|
await mkdir(dirname(exaKeyPath), { recursive: true });
|
|
485
501
|
await writeFile(exaKeyPath, `${exaKey}\n`, 'utf8');
|
|
486
502
|
await chmod(exaKeyPath, 0o600).catch(() => undefined);
|
|
487
503
|
}
|
|
488
|
-
/** Refresh crouter-owned tmux bindings
|
|
489
|
-
* with humanloop so every bridge ticket can call back into `human _deliver`.
|
|
490
|
-
* Both are best-effort: setup must never fail because tmux or humanloop is unavailable. */
|
|
504
|
+
/** Refresh crouter-owned tmux bindings. Setup must never fail because tmux is unavailable. */
|
|
491
505
|
export async function reconcileInboxFrontDoor() {
|
|
492
506
|
try {
|
|
493
507
|
installTmuxBindings();
|
|
494
508
|
}
|
|
495
509
|
catch { /* best-effort: no tmux server */ }
|
|
496
|
-
try {
|
|
497
|
-
registerCrouterRoot();
|
|
498
|
-
return { interactionRootsRegistered: 1 };
|
|
499
|
-
}
|
|
500
|
-
catch {
|
|
501
|
-
return { interactionRootsRegistered: 0 };
|
|
502
|
-
}
|
|
503
510
|
}
|
|
504
511
|
export function summarizeSetupExecution(result) {
|
|
505
512
|
return {
|
|
@@ -507,7 +514,6 @@ export function summarizeSetupExecution(result) {
|
|
|
507
514
|
skipped: [...result.skippedPackages, ...result.skippedSystemDeps],
|
|
508
515
|
exaKeyWritten: result.exaKeyWritten,
|
|
509
516
|
exaKeyPath: result.exaKeyPath,
|
|
510
|
-
interactionRootsRegistered: result.interactionRootsRegistered,
|
|
511
517
|
};
|
|
512
518
|
}
|
|
513
519
|
export function formatSetupExecutionSummary(summary) {
|
|
@@ -516,7 +522,6 @@ export function formatSetupExecutionSummary(summary) {
|
|
|
516
522
|
summary.installed.length > 0 ? `installed: ${summary.installed.join(', ')}` : 'installed: none',
|
|
517
523
|
summary.skipped.length > 0 ? `skipped: ${summary.skipped.join(', ')}` : 'skipped: none',
|
|
518
524
|
summary.exaKeyWritten ? `exa key written: ${summary.exaKeyPath}` : 'exa key written: no',
|
|
519
|
-
`interaction roots registered: ${summary.interactionRootsRegistered}`,
|
|
520
525
|
].join('\n') + '\n';
|
|
521
526
|
}
|
|
522
527
|
/** Marketplace-plugin manifest entries already installed in any scope — the
|
|
@@ -572,18 +577,23 @@ export async function executeSetupSubmission(submission) {
|
|
|
572
577
|
runShellCommand(plan.command);
|
|
573
578
|
installedSystemDeps.push(plan.tool);
|
|
574
579
|
}
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
580
|
+
switch (ensureManagedRenderer()) {
|
|
581
|
+
case 'provisioned':
|
|
582
|
+
installedPackages.push('termrender renderer');
|
|
583
|
+
break;
|
|
584
|
+
case 'current':
|
|
585
|
+
skippedPackages.push('termrender renderer (current)');
|
|
586
|
+
break;
|
|
587
|
+
case 'unavailable':
|
|
588
|
+
skippedPackages.push('termrender renderer (unavailable — install uv)');
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
579
591
|
const exaKeyWritten = submission.exaKey.trim() !== '';
|
|
580
592
|
if (exaKeyWritten) {
|
|
581
593
|
await writeExaKey(submission.exaKeyPath, submission.exaKey);
|
|
582
594
|
}
|
|
583
|
-
// Front-door reconciliation
|
|
584
|
-
|
|
585
|
-
// best-effort.
|
|
586
|
-
const { interactionRootsRegistered } = await reconcileInboxFrontDoor();
|
|
595
|
+
// Front-door reconciliation refreshes crouter-owned tmux bindings.
|
|
596
|
+
await reconcileInboxFrontDoor();
|
|
587
597
|
return summarizeSetupExecution({
|
|
588
598
|
installedPackages,
|
|
589
599
|
skippedPackages,
|
|
@@ -591,6 +601,5 @@ export async function executeSetupSubmission(submission) {
|
|
|
591
601
|
skippedSystemDeps,
|
|
592
602
|
exaKeyWritten,
|
|
593
603
|
exaKeyPath: submission.exaKeyPath,
|
|
594
|
-
interactionRootsRegistered,
|
|
595
604
|
});
|
|
596
605
|
}
|
|
@@ -61,6 +61,7 @@ export declare class SetupWizard implements Component, Focusable {
|
|
|
61
61
|
private keyDiagnostics;
|
|
62
62
|
private keyConfirm;
|
|
63
63
|
private keyNotice;
|
|
64
|
+
private keyTmuxOccupancy;
|
|
64
65
|
private brokerLimitIndex;
|
|
65
66
|
private brokerLimitNotice;
|
|
66
67
|
private settingsIndex;
|
|
@@ -71,7 +72,7 @@ export declare class SetupWizard implements Component, Focusable {
|
|
|
71
72
|
private _focused;
|
|
72
73
|
onSubmit?: (submission: SetupSubmission) => void;
|
|
73
74
|
onCancel?: () => void;
|
|
74
|
-
constructor(manifest: SetupPackageManifestEntry[], installedPackageIds: Set<SetupPackageId>, systemTools: SetupSystemToolState[], tui: TUI, agentDir: string, runtime: ModelRuntime, registry: ModelRegistry, openingBindings: BindingResolution<BindingId>, rawKeybindings: unknown, terminalRows: () => number);
|
|
75
|
+
constructor(manifest: SetupPackageManifestEntry[], installedPackageIds: Set<SetupPackageId>, systemTools: SetupSystemToolState[], tui: TUI, agentDir: string, runtime: ModelRuntime, registry: ModelRegistry, openingBindings: BindingResolution<BindingId>, rawKeybindings: unknown, terminalRows: () => number, rawTmuxPassthrough?: unknown);
|
|
75
76
|
set focused(value: boolean);
|
|
76
77
|
get focused(): boolean;
|
|
77
78
|
invalidate(): void;
|
|
@@ -107,6 +108,8 @@ export declare class SetupWizard implements Component, Focusable {
|
|
|
107
108
|
private filteredKeybindings;
|
|
108
109
|
private selectedKeyRow;
|
|
109
110
|
private selectedKeybinding;
|
|
111
|
+
private tmuxPassthroughOffer;
|
|
112
|
+
private toggleTmuxPassthrough;
|
|
110
113
|
private moveKey;
|
|
111
114
|
private moveKeyField;
|
|
112
115
|
private keyViewportLines;
|