@north-light/crouter 0.3.173 → 0.3.175
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/bin/runtime-selector.mjs +8 -1
- package/dist/api/__tests__/{client.test.js → serial/client.test.js} +2 -135
- package/dist/api/client.d.ts +12 -21
- package/dist/api/client.js +22 -31
- package/dist/api/dto/broker-ops.d.ts +158 -0
- package/dist/api/dto/broker-ops.js +6 -0
- package/dist/api/dto/crons.d.ts +6 -0
- package/dist/api/dto/human.d.ts +7 -1
- package/dist/api/dto/inbox.d.ts +1 -71
- package/dist/api/dto/inbox.js +1 -9
- package/dist/api/dto/nodes.d.ts +6 -7
- package/dist/api/dto/reviews.d.ts +1 -11
- package/dist/api/routes.d.ts +7 -4
- package/dist/api/routes.js +8 -5
- package/dist/build-root.js +3 -3
- package/dist/builtin-memory/04-base-worker.md +1 -4
- package/dist/builtin-memory/05-kinds/advisor/00-base.md +1 -5
- package/dist/builtin-memory/05-kinds/advisor/01-orchestrator.md +2 -7
- package/dist/builtin-memory/05-kinds/design/00-base.md +1 -6
- package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -6
- package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -4
- package/dist/builtin-memory/05-kinds/explore/01-orchestrator.md +1 -2
- package/dist/builtin-memory/05-kinds/general/00-base.md +1 -3
- package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -6
- package/dist/builtin-memory/05-kinds/plan/reviewers/00-base.md +1 -2
- package/dist/builtin-memory/05-kinds/plan/reviewers/architecture-fit.md +1 -3
- package/dist/builtin-memory/05-kinds/plan/reviewers/code-smells.md +1 -3
- package/dist/builtin-memory/05-kinds/plan/reviewers/pattern-consistency.md +1 -3
- package/dist/builtin-memory/05-kinds/plan/reviewers/requirements-coverage.md +1 -3
- package/dist/builtin-memory/05-kinds/plan/reviewers/security.md +1 -4
- package/dist/builtin-memory/05-kinds/review/companion/00-base.md +2 -3
- package/dist/builtin-memory/05-kinds/spec/00-base.md +1 -2
- package/dist/builtin-memory/advisor/council.md +1 -6
- package/dist/builtin-memory/design.md +2 -7
- package/dist/builtin-memory/development.md +9 -14
- package/dist/builtin-memory/internal/marketplaces.md +2 -6
- package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
- package/dist/builtin-memory/internal/plugins.md +2 -8
- package/dist/builtin-memory/internal/storage-tiers.md +1 -2
- package/dist/builtin-memory/testing.md +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/{provider-rotation.test.ts → serial/provider-rotation.test.ts} +27 -179
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +5 -15
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +1 -28
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/memory-slash-commands.ts +43 -88
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +7 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +9 -1
- package/dist/cli.js +2 -2
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +37 -131
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +71 -152
- package/dist/clients/attach/__tests__/context-message.test.js +16 -174
- package/dist/clients/attach/__tests__/crtr-output.test.js +36 -2069
- package/dist/clients/attach/__tests__/diagram.test.js +2 -2
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -4
- package/dist/clients/attach/__tests__/file-review-focus.test.js +2 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +40 -229
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +26 -76
- package/dist/clients/attach/__tests__/prompt-preview.test.js +4 -70
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +11 -125
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +14 -205
- package/dist/clients/attach/command.d.ts +2 -1
- package/dist/clients/attach/command.js +81 -76
- package/dist/clients/attach/input/capabilities.d.ts +27 -0
- package/dist/clients/attach/input/capabilities.js +96 -0
- package/dist/clients/attach/input/controller.d.ts +20 -182
- package/dist/clients/attach/input/controller.js +128 -537
- package/dist/clients/attach/input/overlay-owner.d.ts +41 -0
- package/dist/clients/attach/input/overlay-owner.js +199 -0
- package/dist/clients/attach/overlays/file-review.d.ts +0 -4
- package/dist/clients/attach/overlays/file-review.js +13 -5
- package/dist/clients/attach/overlays/graph.js +2 -10
- package/dist/clients/attach/render/chat-view.d.ts +4 -3
- package/dist/clients/attach/render/chat-view.js +39 -33
- package/dist/clients/attach/render/group-activity.d.ts +1 -0
- package/dist/clients/attach/render/group-activity.js +20 -13
- package/dist/clients/attach/render/group-recap.js +12 -3
- package/dist/clients/attach/session/connection.js +9 -15
- package/dist/clients/attach/session/editor-inventory.d.ts +6 -5
- package/dist/clients/attach/session/editor-inventory.js +7 -8
- package/dist/clients/attach/session/file-links.d.ts +13 -0
- package/dist/clients/attach/session/file-links.js +107 -0
- package/dist/clients/attach/session/frame.d.ts +3 -0
- package/dist/clients/attach/session/frame.js +10 -1
- package/dist/clients/attach/session/frames.js +2 -3
- package/dist/clients/attach/session/input-wiring.d.ts +4 -1
- package/dist/clients/attach/session/input-wiring.js +15 -14
- package/dist/clients/attach/session/mouse.d.ts +6 -1
- package/dist/clients/attach/session/mouse.js +8 -5
- package/dist/clients/attach/session/profile-files.js +18 -12
- package/dist/clients/attach/session/reconnect.js +1 -1
- package/dist/clients/attach/session/state-sync.js +1 -2
- package/dist/clients/attach/session/surface-host.d.ts +3 -2
- package/dist/clients/attach/session/surface-host.js +4 -4
- package/dist/clients/attach/slash/dispatch.d.ts +8 -31
- package/dist/clients/attach/slash/dispatch.js +34 -81
- package/dist/clients/attach/viewer.js +820 -860
- package/dist/clients/conversation/projection.d.ts +79 -0
- package/dist/clients/conversation/projection.js +341 -0
- package/dist/clients/inbox/__tests__/serial/inbox-controller.test.js +159 -0
- package/dist/clients/inbox/__tests__/serial/mount-panel.test.js +151 -0
- package/dist/clients/inbox/controller.d.ts +0 -4
- package/dist/clients/inbox/controller.js +0 -2
- package/dist/clients/inbox/review/__tests__/review-core.test.js +4 -293
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +100 -0
- package/dist/clients/inbox/review/comments-client.d.ts +3 -2
- package/dist/clients/inbox/review/comments-client.js +12 -12
- package/dist/clients/inbox/review/companion-pane.d.ts +30 -0
- package/dist/clients/inbox/review/companion-pane.js +86 -0
- package/dist/clients/inbox/review/document-surface.d.ts +182 -0
- package/dist/clients/inbox/review/{document-region.js → document-surface.js} +252 -48
- package/dist/clients/inbox/review/frame.js +5 -4
- package/dist/clients/inbox/review/launch.d.ts +8 -8
- package/dist/clients/inbox/review/launch.js +52 -92
- package/dist/clients/inbox/review/nvim.d.ts +2 -0
- package/dist/clients/inbox/review/nvim.js +14 -12
- package/dist/clients/inbox/review/review-client.d.ts +12 -8
- package/dist/clients/inbox/review/review-client.js +46 -35
- package/dist/clients/inbox/review-adapter.d.ts +3 -10
- package/dist/clients/inbox/review-adapter.js +27 -19
- package/dist/clients/inbox/surface.d.ts +0 -4
- package/dist/clients/inbox/surface.js +0 -2
- package/dist/clients/surfaces/host.d.ts +11 -3
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +7 -34
- package/dist/commands/__tests__/human.test.js +11 -322
- package/dist/commands/api-client.d.ts +5 -5
- package/dist/commands/api-client.js +6 -85
- package/dist/commands/canvas-browse.js +3 -29
- package/dist/commands/canvas-config.js +1 -1
- package/dist/commands/canvas-use.js +3 -3
- package/dist/commands/canvas.js +1 -1
- package/dist/commands/cron.js +5 -1
- package/dist/commands/human/queue.d.ts +0 -4
- package/dist/commands/human/queue.js +7 -40
- package/dist/commands/memory/list.d.ts +14 -0
- package/dist/commands/memory/list.js +35 -31
- package/dist/commands/memory/read.d.ts +7 -0
- package/dist/commands/memory/read.js +14 -8
- package/dist/commands/memory/write.js +13 -12
- package/dist/commands/node/bash.d.ts +1 -0
- package/dist/commands/node/bash.js +198 -0
- package/dist/commands/node/create.d.ts +23 -0
- package/dist/commands/node/create.js +207 -0
- package/dist/commands/node/inspect.d.ts +2 -0
- package/dist/commands/node/inspect.js +302 -0
- package/dist/commands/node/lifecycle.d.ts +4 -0
- package/dist/commands/node/lifecycle.js +415 -0
- package/dist/commands/node/message.d.ts +1 -0
- package/dist/commands/node/message.js +164 -0
- package/dist/commands/node/pyramid.d.ts +2 -0
- package/dist/commands/node/pyramid.js +79 -0
- package/dist/commands/node/subscription.d.ts +1 -0
- package/dist/commands/node/subscription.js +82 -0
- package/dist/commands/node/wait.d.ts +1 -0
- package/dist/commands/node/wait.js +159 -0
- package/dist/commands/node-lifecycle-revive.js +10 -57
- package/dist/commands/node.d.ts +0 -42
- package/dist/commands/node.js +11 -2065
- package/dist/commands/search.js +1 -1
- package/dist/commands/surface/node/cycle.d.ts +1 -0
- package/dist/commands/surface/node/cycle.js +83 -0
- package/dist/commands/surface/node/focus.d.ts +1 -0
- package/dist/commands/surface/node/focus.js +67 -0
- package/dist/commands/surface/node/id.d.ts +1 -0
- package/dist/commands/surface/node/id.js +38 -0
- package/dist/commands/surface/node/pin.d.ts +1 -0
- package/dist/commands/surface/node/pin.js +42 -0
- package/dist/commands/surface/node/placement.d.ts +46 -0
- package/dist/commands/surface/node/placement.js +124 -0
- package/dist/commands/surface-node.js +4 -1
- package/dist/commands/surface-reload.js +1 -2
- package/dist/commands/surface-tmux-spread.js +1 -1
- package/dist/commands/surface.js +5 -20
- package/dist/commands/sys/__tests__/setup-core.test.js +18 -271
- package/dist/commands/sys/config.js +6 -6
- package/dist/commands/sys/logs.js +1 -1
- package/dist/commands/sys/panels/broker-limits-panel.d.ts +17 -0
- package/dist/commands/sys/panels/broker-limits-panel.js +104 -0
- package/dist/commands/sys/panels/dependencies-panel.d.ts +14 -0
- package/dist/commands/sys/panels/dependencies-panel.js +80 -0
- package/dist/commands/sys/panels/keybindings-panel.d.ts +56 -0
- package/dist/commands/sys/panels/keybindings-panel.js +703 -0
- package/dist/commands/sys/panels/keys-panel.d.ts +16 -0
- package/dist/commands/sys/panels/keys-panel.js +60 -0
- package/dist/commands/sys/panels/models-panel.d.ts +77 -0
- package/dist/commands/sys/panels/models-panel.js +647 -0
- package/dist/commands/sys/panels/panel.d.ts +45 -0
- package/dist/commands/sys/panels/panel.js +137 -0
- package/dist/commands/sys/panels/plugins-panel.d.ts +16 -0
- package/dist/commands/sys/panels/plugins-panel.js +80 -0
- package/dist/commands/sys/panels/prefs-panel.d.ts +21 -0
- package/dist/commands/sys/panels/prefs-panel.js +85 -0
- package/dist/commands/sys/panels/provider-panel.d.ts +62 -0
- package/dist/commands/sys/panels/provider-panel.js +538 -0
- package/dist/commands/sys/settings-shell.d.ts +55 -0
- package/dist/commands/sys/settings-shell.js +400 -0
- package/dist/commands/sys/settings.d.ts +2 -0
- package/dist/commands/sys/settings.js +31 -0
- package/dist/commands/sys/setup-core.d.ts +3 -33
- package/dist/commands/sys/setup-core.js +27 -78
- package/dist/commands/sys/setup-settings-runner.d.ts +24 -0
- package/dist/commands/sys/setup-settings-runner.js +63 -0
- package/dist/commands/sys/setup-wizard.d.ts +26 -125
- package/dist/commands/sys/setup-wizard.js +209 -2473
- package/dist/commands/sys/setup.js +5 -7
- package/dist/commands/sys.js +3 -2
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +50 -0
- package/dist/core/__tests__/broker-launch-candidates.test.js +20 -9
- package/dist/core/__tests__/broker-preflight.test.js +1 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +108 -27
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +14 -0
- package/dist/core/__tests__/canvas.test.js +2 -36
- package/dist/core/__tests__/close.test.js +14 -3
- package/dist/core/__tests__/context-intro.test.js +32 -143
- package/dist/core/__tests__/cron-broker-capacity.test.js +22 -3
- package/dist/core/__tests__/daemon-boot.test.js +2 -20
- package/dist/core/__tests__/daemon-wedge.test.js +1 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +1 -18
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
- package/dist/core/__tests__/fixtures/fake-engine.js +2 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +2 -2
- package/dist/core/__tests__/focuses.test.js +4 -98
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -3
- package/dist/core/__tests__/helpers/broker-clients.js +0 -14
- package/dist/core/__tests__/helpers/harness.d.ts +0 -8
- package/dist/core/__tests__/helpers/harness.js +7 -87
- package/dist/core/__tests__/helpers/viewer-panes.js +1 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +5 -134
- package/dist/core/__tests__/kickoff.test.js +1 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +29 -1
- package/dist/core/__tests__/migration.test.js +35 -48
- package/dist/core/__tests__/on-read-dedup-resume.test.js +22 -12
- package/dist/core/__tests__/passive-subscription.test.js +26 -49
- package/dist/core/__tests__/preview-registry-sync.test.js +1 -2
- package/dist/core/__tests__/prune.test.js +94 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -32
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +255 -0
- package/dist/core/__tests__/{full → seam}/broker-attach-stream.test.js +39 -7
- package/dist/core/__tests__/{full → seam}/broker-crash-teardown.test.js +30 -29
- package/dist/core/__tests__/{full → seam}/broker-pane-resolution.test.js +54 -5
- package/dist/core/__tests__/{full → seam}/broker-provider-retry.test.js +134 -82
- package/dist/core/__tests__/{full → seam}/broker-whip-interrupt.test.js +15 -4
- package/dist/core/__tests__/{full/idle-release-settlement.test.js → seam/dormancy-release.test.js} +69 -17
- package/dist/core/__tests__/{full/yield-message-transaction.test.js → seam/yield-refresh-transaction.test.js} +31 -9
- package/dist/core/__tests__/secrets.test.js +1 -7
- package/dist/core/__tests__/{broker-fork-seam.test.js → serial/broker-fork-seam.test.js} +58 -7
- package/dist/core/__tests__/{broker-sdk-wiring.test.js → serial/broker-sdk-wiring.test.js} +18 -162
- package/dist/core/__tests__/{broker-snapshot-history.test.js → serial/broker-snapshot-history.test.js} +9 -9
- package/dist/core/__tests__/{command-plugins.test.js → serial/command-plugins.test.js} +105 -15
- package/dist/core/__tests__/{deferred-no-wake.test.js → serial/deferred-no-wake.test.js} +23 -20
- package/dist/core/__tests__/{flagship-lifecycle.test.js → serial/flagship-lifecycle.test.js} +7 -7
- package/dist/core/__tests__/{host-teardown-process-group.test.js → serial/host-teardown-process-group.test.js} +6 -6
- package/dist/core/__tests__/{human-deliver-e2e.test.js → serial/human-deliver-e2e.test.js} +12 -12
- package/dist/core/__tests__/{live-mutation.test.js → serial/live-mutation.test.js} +5 -5
- package/dist/core/__tests__/{refresh-stall-recycle.test.js → serial/refresh-stall-recycle.test.js} +5 -14
- package/dist/core/__tests__/{revive.test.js → serial/revive.test.js} +15 -100
- package/dist/core/__tests__/{spawn-root.test.js → serial/spawn-root.test.js} +32 -15
- package/dist/core/__tests__/serial/subscription-delivery.test.js +126 -0
- package/dist/core/__tests__/serial/tmux-surface.test.js +256 -0
- package/dist/core/__tests__/{worktree.test.js → serial/worktree.test.js} +15 -15
- package/dist/core/__tests__/session-model.test.js +0 -18
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +9 -0
- package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +50 -0
- package/dist/core/broker-client/__tests__/transport-relay.test.js +15 -16
- package/dist/core/broker-client/__tests__/transport-socket.test.js +28 -0
- package/dist/core/broker-client/client.d.ts +2 -2
- package/dist/core/broker-client/client.js +4 -7
- package/dist/core/broker-client/transport-relay.d.ts +13 -19
- package/dist/core/broker-client/transport-relay.js +19 -34
- package/dist/core/broker-client/transport-socket.d.ts +2 -2
- package/dist/core/broker-client/transport-socket.js +9 -2
- package/dist/core/broker-client/transport.d.ts +7 -3
- package/dist/core/broker-client/transport.js +4 -4
- package/dist/core/canvas/__tests__/attention.test.js +1 -18
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +7 -64
- package/dist/core/canvas/__tests__/remote-transport.test.js +2 -3
- package/dist/core/canvas/__tests__/render-remote.test.js +7 -52
- package/dist/core/canvas/browse/app.d.ts +2 -17
- package/dist/core/canvas/browse/app.js +16 -88
- package/dist/core/canvas/browse/model.d.ts +0 -4
- package/dist/core/canvas/browse/model.js +1 -12
- package/dist/core/canvas/browse/render.js +6 -3
- package/dist/core/canvas/crons.d.ts +8 -5
- package/dist/core/canvas/crons.js +7 -6
- package/dist/core/canvas/extensions.d.ts +7 -3
- package/dist/core/canvas/extensions.js +16 -4
- package/dist/core/canvas/nav-model.d.ts +0 -4
- package/dist/core/canvas/nav-model.js +2 -14
- package/dist/core/canvas/node-order.d.ts +3 -0
- package/dist/core/canvas/node-order.js +12 -0
- package/dist/core/canvas/remote-canvas-source.d.ts +3 -6
- package/dist/core/canvas/remote-canvas-source.js +8 -15
- package/dist/core/command.js +11 -4
- package/dist/core/config.js +3 -1
- package/dist/core/events/envelope.js +1 -1
- package/dist/core/events/read.js +7 -21
- package/dist/core/events/source.d.ts +0 -2
- package/dist/core/events/source.js +0 -16
- package/dist/core/events/types.d.ts +1 -1
- package/dist/core/fault-classifier.d.ts +1 -1
- package/dist/core/feed/passive.d.ts +0 -11
- package/dist/core/feed/passive.js +1 -62
- package/dist/core/human/__tests__/{inbox-core.test.js → serial/inbox-core.test.js} +6 -6
- package/dist/core/keybindings/__tests__/resolve.test.js +1 -96
- package/dist/core/keybindings/background-bash.js +3 -4
- package/dist/core/keybindings/catalog.js +1 -1
- package/dist/core/memory/inline-ref-grammar.js +3 -3
- package/dist/core/memory-resolver.d.ts +11 -25
- package/dist/core/memory-resolver.js +51 -33
- package/dist/core/model-routes.d.ts +15 -0
- package/dist/core/model-routes.js +12 -0
- package/dist/core/pool-credential-store.js +1 -1
- package/dist/core/preview-registry.js +8 -9
- package/dist/core/profiles/__tests__/root-profile.test.js +4 -14
- package/dist/core/review/realize.d.ts +0 -13
- package/dist/core/review/realize.js +0 -40
- package/dist/core/review/types.d.ts +1 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +2 -2
- package/dist/core/runtime/bearings.js +1 -11
- package/dist/core/runtime/broker/client-registry.d.ts +33 -0
- package/dist/core/runtime/broker/client-registry.js +164 -0
- package/dist/core/runtime/broker/daemon-ops.d.ts +19 -0
- package/dist/core/runtime/broker/daemon-ops.js +49 -0
- package/dist/core/runtime/broker/event-projection.d.ts +42 -0
- package/dist/core/runtime/broker/event-projection.js +178 -0
- package/dist/core/runtime/broker/fault-retry.d.ts +39 -0
- package/dist/core/runtime/broker/fault-retry.js +277 -0
- package/dist/core/runtime/broker/frame-dispatch.d.ts +238 -0
- package/dist/core/runtime/broker/frame-dispatch.js +1537 -0
- package/dist/core/runtime/broker/inbox.d.ts +22 -0
- package/dist/core/runtime/broker/inbox.js +167 -0
- package/dist/core/runtime/broker/passive.d.ts +16 -0
- package/dist/core/runtime/broker/passive.js +44 -0
- package/dist/core/runtime/broker/read-ops.d.ts +23 -0
- package/dist/core/runtime/broker/read-ops.js +150 -0
- package/dist/core/runtime/broker/rebind.d.ts +74 -0
- package/dist/core/runtime/broker/rebind.js +211 -0
- package/dist/core/runtime/broker/tool-groups.d.ts +39 -0
- package/dist/core/runtime/broker/tool-groups.js +244 -0
- package/dist/core/runtime/broker-extension-render.d.ts +11 -0
- package/dist/core/runtime/broker-extension-render.js +181 -0
- package/dist/core/runtime/broker-persona-guidance.d.ts +13 -0
- package/dist/core/runtime/broker-persona-guidance.js +58 -0
- package/dist/core/runtime/broker-protocol.d.ts +1 -1
- package/dist/core/runtime/broker-protocol.js +1 -1
- package/dist/core/runtime/broker.d.ts +5 -196
- package/dist/core/runtime/broker.js +276 -3059
- package/dist/core/runtime/canvas-extensions.js +11 -2
- package/dist/core/runtime/fault.js +1 -1
- package/dist/core/runtime/model-selection.d.ts +9 -0
- package/dist/core/runtime/model-selection.js +12 -0
- package/dist/core/runtime/model-swap.d.ts +3 -3
- package/dist/core/runtime/model-swap.js +33 -25
- package/dist/core/runtime/placement-tmux.d.ts +3 -14
- package/dist/core/runtime/placement-tmux.js +11 -80
- package/dist/core/runtime/placement.d.ts +4 -2
- package/dist/core/runtime/placement.js +7 -12
- package/dist/core/runtime/promote.d.ts +14 -1
- package/dist/core/runtime/promote.js +1 -1
- package/dist/core/runtime/reset.d.ts +1 -1
- package/dist/core/runtime/roadmap.js +1 -1
- package/dist/core/runtime/spawn.d.ts +8 -0
- package/dist/core/runtime/spawn.js +36 -6
- package/dist/core/runtime/stop-guard.d.ts +4 -3
- package/dist/core/runtime/stop-guard.js +36 -18
- package/dist/core/runtime/stop-signals.d.ts +4 -1
- package/dist/core/runtime/stream-watchdog.js +4 -5
- package/dist/core/runtime/structured-output.d.ts +15 -2
- package/dist/core/runtime/structured-output.js +35 -12
- package/dist/core/runtime/tmux-bindings.d.ts +25 -0
- package/dist/core/runtime/tmux-bindings.js +682 -0
- package/dist/core/runtime/tmux-chrome.d.ts +2 -1
- package/dist/core/runtime/tmux-chrome.js +3 -2
- package/dist/core/runtime/{tmux.d.ts → tmux-driver.d.ts} +18 -26
- package/dist/core/runtime/tmux-driver.js +598 -0
- package/dist/core/runtime/view-socket.d.ts +14 -0
- package/dist/core/runtime/view-socket.js +83 -0
- package/dist/core/session-model/session-state.d.ts +1 -2
- package/dist/core/session-model/session-state.js +5 -8
- package/dist/core/spawn.d.ts +1 -1
- package/dist/core/spawn.js +2 -2
- package/dist/core/substrate/gate.d.ts +1 -1
- package/dist/core/substrate/on-read-pure.d.ts +7 -0
- package/dist/core/substrate/on-read-pure.js +272 -0
- package/dist/core/termrender/termrender.js +32 -2
- package/dist/core/user-settings.d.ts +23 -1
- package/dist/core/user-settings.js +18 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +134 -0
- package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +98 -0
- package/dist/daemon/api/__tests__/{full → seam}/api-server.test.js +6 -48
- package/dist/daemon/api/__tests__/{full → seam}/b10-attach-modelauth.test.js +17 -44
- package/dist/daemon/api/__tests__/{full/push-parity.test.js → seam/leaf-api-parity.test.js} +61 -42
- package/dist/daemon/api/bridge.js +40 -81
- package/dist/daemon/api/handlers/broker-ops.d.ts +2 -0
- package/dist/daemon/api/handlers/broker-ops.js +383 -0
- package/dist/daemon/api/handlers/crons.js +9 -4
- package/dist/daemon/api/handlers/files.js +6 -7
- package/dist/daemon/api/handlers/inbox.js +2 -340
- package/dist/daemon/api/handlers/nodes.d.ts +10 -1
- package/dist/daemon/api/handlers/nodes.js +74 -39
- package/dist/daemon/api/handlers/review-comments.js +5 -1
- package/dist/daemon/api/handlers/reviews.js +0 -19
- package/dist/daemon/api/map.js +25 -4
- package/dist/daemon/api/router.js +2 -3
- package/dist/daemon/api/server.js +5 -7
- package/dist/daemon/cron-run.d.ts +4 -0
- package/dist/daemon/cron-run.js +30 -13
- package/dist/daemon/crtrd.d.ts +3 -58
- package/dist/daemon/crtrd.js +28 -1244
- package/dist/daemon/manage.js +0 -1
- package/dist/daemon/reconcilers/broker-supervision.d.ts +50 -0
- package/dist/daemon/reconcilers/broker-supervision.js +549 -0
- package/dist/daemon/reconcilers/cron-lane.d.ts +10 -0
- package/dist/daemon/reconcilers/cron-lane.js +32 -0
- package/dist/daemon/reconcilers/dormant-inbox.d.ts +18 -0
- package/dist/daemon/reconcilers/dormant-inbox.js +143 -0
- package/dist/daemon/reconcilers/storage-maintenance.d.ts +22 -0
- package/dist/daemon/reconcilers/storage-maintenance.js +213 -0
- package/dist/daemon/review/finish.js +2 -5
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +34 -53
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +16 -113
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +72 -99
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +29 -12
- package/dist/pi-extensions/broker-local.d.ts +20 -0
- package/dist/pi-extensions/broker-local.js +89 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +3 -3
- package/dist/pi-extensions/canvas-context-intro.js +22 -11
- package/dist/pi-extensions/canvas-doc-substrate.js +17 -34
- package/dist/pi-extensions/canvas-goal-capture.js +7 -12
- package/dist/pi-extensions/canvas-inbox-watcher.js +124 -139
- package/dist/pi-extensions/canvas-passive-context.d.ts +3 -3
- package/dist/pi-extensions/canvas-passive-context.js +22 -18
- package/dist/pi-extensions/canvas-recap.d.ts +2 -2
- package/dist/pi-extensions/canvas-recap.js +48 -21
- package/dist/pi-extensions/canvas-review-boundary.js +10 -4
- package/dist/pi-extensions/canvas-stophook.d.ts +0 -5
- package/dist/pi-extensions/canvas-stophook.js +149 -431
- package/dist/pi-extensions/canvas-structured-output.js +52 -30
- package/dist/pi-extensions/envelope-merge.d.ts +13 -0
- package/dist/pi-extensions/envelope-merge.js +29 -0
- package/dist/shared/working-activity.d.ts +3 -2
- package/dist/shared/working-activity.js +3 -2
- package/dist/types.d.ts +6 -5
- package/dist/types.js +2 -2
- package/docs/compat/hearth-crtr-v1.md +4 -12
- package/docs/compat/hearth-crtr-v2.md +3 -11
- package/docs/compat/hearth-crtr-v3.md +4 -12
- package/docs/compat/hearth-crtr-v4.md +3 -11
- package/docs/compat/hearth-crtr-v5.md +3 -11
- package/docs/public-api.md +3 -7
- package/package.json +7 -49
- package/runtime.lock.json +2766 -14533
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/claude-plugin-commands.test.ts +0 -49
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/memory-slash-commands.test.ts +0 -194
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +0 -68
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +0 -119
- package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +0 -439
- package/dist/clients/attach/__tests__/attach-keybindings.test.js +0 -170
- package/dist/clients/attach/__tests__/crtr-output-coverage.test.js +0 -57
- package/dist/clients/attach/__tests__/editor-frame-title.test.js +0 -19
- package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +0 -32
- package/dist/clients/attach/__tests__/markdown-headings.test.js +0 -35
- package/dist/clients/attach/__tests__/session-identity-refresh.test.js +0 -32
- package/dist/clients/conversation/conversation.d.ts +0 -65
- package/dist/clients/conversation/conversation.js +0 -318
- package/dist/clients/conversation/frames.d.ts +0 -30
- package/dist/clients/conversation/frames.js +0 -52
- package/dist/clients/conversation/region.d.ts +0 -51
- package/dist/clients/conversation/region.js +0 -265
- package/dist/clients/inbox/__tests__/inbox-controller.test.js +0 -247
- package/dist/clients/inbox/__tests__/mount-panel.test.js +0 -776
- package/dist/clients/inbox/review/__tests__/remap.test.js +0 -196
- package/dist/clients/inbox/review/columns.d.ts +0 -22
- package/dist/clients/inbox/review/columns.js +0 -40
- package/dist/clients/inbox/review/composition.d.ts +0 -60
- package/dist/clients/inbox/review/composition.js +0 -278
- package/dist/clients/inbox/review/document-region.d.ts +0 -120
- package/dist/clients/surfaces/region.d.ts +0 -16
- package/dist/clients/web/__tests__/push-engine.test.js +0 -158
- package/dist/clients/web/__tests__/push-registry.test.d.ts +0 -1
- package/dist/clients/web/__tests__/push-registry.test.js +0 -177
- package/dist/clients/web/dev-server.d.ts +0 -7
- package/dist/clients/web/dev-server.js +0 -46
- package/dist/clients/web/events.d.ts +0 -19
- package/dist/clients/web/events.js +0 -163
- package/dist/clients/web/push-engine.d.ts +0 -44
- package/dist/clients/web/push-engine.js +0 -125
- package/dist/clients/web/push-registry.d.ts +0 -85
- package/dist/clients/web/push-registry.js +0 -373
- package/dist/clients/web/server.d.ts +0 -19
- package/dist/clients/web/server.js +0 -661
- package/dist/clients/web/web-client/shared/protocol.d.ts +0 -214
- package/dist/clients/web/web-client/shared/protocol.js +0 -8
- package/dist/clients/web/web-cmd.d.ts +0 -2
- package/dist/clients/web/web-cmd.js +0 -141
- package/dist/commands/__tests__/api-canvas-source.test.d.ts +0 -1
- package/dist/commands/__tests__/api-canvas-source.test.js +0 -37
- package/dist/commands/__tests__/canvas-config.test.d.ts +0 -1
- package/dist/commands/__tests__/canvas-config.test.js +0 -107
- package/dist/commands/__tests__/node-no-kickoff-flag.test.d.ts +0 -1
- package/dist/commands/__tests__/node-no-kickoff-flag.test.js +0 -73
- package/dist/commands/__tests__/node-worktree-flag.test.d.ts +0 -1
- package/dist/commands/__tests__/node-worktree-flag.test.js +0 -49
- package/dist/commands/__tests__/search-contents.test.d.ts +0 -1
- package/dist/commands/__tests__/search-contents.test.js +0 -52
- package/dist/commands/memory/__tests__/lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/lint.test.js +0 -15
- package/dist/commands/sys/__tests__/config-broker-thresholds.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-broker-thresholds.test.js +0 -95
- package/dist/commands/sys/__tests__/config-keybindings.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-keybindings.test.js +0 -55
- package/dist/commands/sys/__tests__/helpers/setup-runtime.d.ts +0 -5
- package/dist/commands/sys/__tests__/helpers/setup-runtime.js +0 -19
- package/dist/commands/sys/__tests__/setup-front-door.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-front-door.test.js +0 -102
- package/dist/commands/sys/__tests__/setup-models.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-models.test.js +0 -205
- package/dist/commands/sys/__tests__/setup-providers-viewport.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-providers-viewport.test.js +0 -155
- package/dist/commands/sys/__tests__/sync-deps.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-deps.test.js +0 -179
- package/dist/commands/sys/__tests__/sync-import.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-import.test.js +0 -315
- package/dist/core/__tests__/base-worker-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/base-worker-prompt.test.js +0 -57
- package/dist/core/__tests__/command-plugins-surfaces.test.d.ts +0 -1
- package/dist/core/__tests__/command-plugins-surfaces.test.js +0 -359
- package/dist/core/__tests__/connection-reconnect-resume.test.d.ts +0 -1
- package/dist/core/__tests__/connection-reconnect-resume.test.js +0 -36
- package/dist/core/__tests__/finalization-migration.test.d.ts +0 -1
- package/dist/core/__tests__/finalization-migration.test.js +0 -38
- package/dist/core/__tests__/fixtures/extra-extension.d.ts +0 -1
- package/dist/core/__tests__/fixtures/extra-extension.js +0 -3
- package/dist/core/__tests__/fixtures/spawn-proof-target.test.d.ts +0 -1
- package/dist/core/__tests__/fixtures/spawn-proof-target.test.js +0 -15
- package/dist/core/__tests__/fork.test.d.ts +0 -1
- package/dist/core/__tests__/fork.test.js +0 -108
- package/dist/core/__tests__/full/broker-attach-limits.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-attach-limits.test.js +0 -147
- package/dist/core/__tests__/full/broker-deliver-ack.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-deliver-ack.test.js +0 -73
- package/dist/core/__tests__/full/broker-dialogs.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-dialogs.test.js +0 -180
- package/dist/core/__tests__/full/broker-display-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-display-snapshot.test.js +0 -75
- package/dist/core/__tests__/full/broker-dormant-wake.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-dormant-wake.test.js +0 -130
- package/dist/core/__tests__/full/broker-model-changed-broadcast.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +0 -57
- package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.d.ts +0 -1
- package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +0 -80
- package/dist/core/__tests__/full/cascade-close.test.d.ts +0 -1
- package/dist/core/__tests__/full/cascade-close.test.js +0 -240
- package/dist/core/__tests__/full/detach-focus.test.d.ts +0 -1
- package/dist/core/__tests__/full/detach-focus.test.js +0 -126
- package/dist/core/__tests__/full/idle-release-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/full/issue-146-yield-spawn-focus.test.d.ts +0 -1
- package/dist/core/__tests__/full/issue-146-yield-spawn-focus.test.js +0 -107
- package/dist/core/__tests__/full/park-clock-release.test.d.ts +0 -1
- package/dist/core/__tests__/full/park-clock-release.test.js +0 -56
- package/dist/core/__tests__/full/yield-message-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/memory-index-render.test.d.ts +0 -1
- package/dist/core/__tests__/memory-index-render.test.js +0 -60
- package/dist/core/__tests__/model-routes.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes.test.js +0 -41
- package/dist/core/__tests__/on-read-identity.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-identity.test.js +0 -61
- package/dist/core/__tests__/phase4-review-migration.test.d.ts +0 -1
- package/dist/core/__tests__/phase4-review-migration.test.js +0 -100
- package/dist/core/__tests__/prune-to-limit.test.d.ts +0 -1
- package/dist/core/__tests__/prune-to-limit.test.js +0 -126
- package/dist/core/__tests__/reset.test.d.ts +0 -1
- package/dist/core/__tests__/reset.test.js +0 -69
- package/dist/core/__tests__/spawn-no-kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-no-kickoff.test.js +0 -115
- package/dist/core/__tests__/steer-note.test.d.ts +0 -1
- package/dist/core/__tests__/steer-note.test.js +0 -41
- package/dist/core/__tests__/subcommand-tier.test.d.ts +0 -1
- package/dist/core/__tests__/subcommand-tier.test.js +0 -99
- package/dist/core/__tests__/subscription-delivery.test.js +0 -211
- package/dist/core/__tests__/test-runner-cheap-sharding.test.d.ts +0 -1
- package/dist/core/__tests__/test-runner-cheap-sharding.test.js +0 -97
- package/dist/core/__tests__/tmux-surface.test.js +0 -484
- package/dist/core/__tests__/wake-bearings.test.d.ts +0 -1
- package/dist/core/__tests__/wake-bearings.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-event-stream.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-event-stream.test.js +0 -146
- package/dist/core/canvas/__tests__/source-resolve.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/source-resolve.test.js +0 -77
- package/dist/core/canvas/browse/__tests__/model.test.d.ts +0 -1
- package/dist/core/canvas/browse/__tests__/model.test.js +0 -290
- package/dist/core/canvas/browse/__tests__/rebuild-coalescer.test.d.ts +0 -1
- package/dist/core/canvas/browse/__tests__/rebuild-coalescer.test.js +0 -134
- package/dist/core/canvas/browse/__tests__/render.test.d.ts +0 -1
- package/dist/core/canvas/browse/__tests__/render.test.js +0 -111
- package/dist/core/canvas/browse/rebuild-coalescer.d.ts +0 -7
- package/dist/core/canvas/browse/rebuild-coalescer.js +0 -61
- package/dist/core/canvas/remote-event-stream.d.ts +0 -24
- package/dist/core/canvas/remote-event-stream.js +0 -94
- package/dist/core/feed/__tests__/coalesce-human.test.d.ts +0 -1
- package/dist/core/feed/__tests__/coalesce-human.test.js +0 -36
- package/dist/core/feed/__tests__/empty-node-guard.test.d.ts +0 -1
- package/dist/core/feed/__tests__/empty-node-guard.test.js +0 -45
- package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.d.ts +0 -1
- package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.js +0 -84
- package/dist/core/human/__tests__/visible-paths.test.d.ts +0 -1
- package/dist/core/human/__tests__/visible-paths.test.js +0 -28
- package/dist/core/keybindings/__tests__/inbox-affordance.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/inbox-affordance.test.js +0 -38
- package/dist/core/review/__tests__/project.test.d.ts +0 -1
- package/dist/core/review/__tests__/project.test.js +0 -71
- package/dist/core/runtime/__tests__/command-expansion.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/command-expansion.test.js +0 -25
- package/dist/core/runtime/__tests__/session-visibility.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/session-visibility.test.js +0 -119
- package/dist/core/runtime/__tests__/spawn-at-given-id.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-at-given-id.test.js +0 -34
- package/dist/core/runtime/tmux.js +0 -1314
- package/dist/daemon/api/__tests__/full/push-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/full/worktree-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/full/worktree-parity.test.js +0 -160
- package/dist/daemon/api/__tests__/inbox.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/inbox.test.js +0 -489
- package/dist/web-client/apple-touch-icon.png +0 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-BYwT3kSJ.woff +0 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-yxdJ5AmL.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-BbKYyvR9.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-CT4YFKeK.woff +0 -0
- package/dist/web-client/assets/index-CCPaLeW7.css +0 -2
- package/dist/web-client/assets/index-kyOWsnZK.js +0 -86
- package/dist/web-client/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2 +0 -0
- package/dist/web-client/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -2
- package/dist/web-client/icon-192.png +0 -0
- package/dist/web-client/icon-512.png +0 -0
- package/dist/web-client/icon-maskable-512.png +0 -0
- package/dist/web-client/index.html +0 -17
- package/dist/web-client/manifest.webmanifest +0 -1
- package/dist/web-client/sw.js +0 -1
- /package/dist/api/__tests__/{client.test.d.ts → serial/client.test.d.ts} +0 -0
- /package/dist/clients/inbox/__tests__/{inbox-controller.test.d.ts → serial/inbox-controller.test.d.ts} +0 -0
- /package/dist/clients/inbox/__tests__/{mount-panel.test.d.ts → serial/mount-panel.test.d.ts} +0 -0
- /package/dist/clients/{attach/__tests__/attach-chrome-remote.test.d.ts → inbox/review/__tests__/teardown-notice.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/attach-keybindings.test.d.ts → core/__tests__/broker-extension-canvas-db-boundary.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/crtr-output-coverage.test.d.ts → core/__tests__/seam/broker-attach-multiclient.test.d.ts} +0 -0
- /package/dist/core/__tests__/{full → seam}/broker-attach-stream.test.d.ts +0 -0
- /package/dist/core/__tests__/{full → seam}/broker-crash-teardown.test.d.ts +0 -0
- /package/dist/core/__tests__/{full → seam}/broker-pane-resolution.test.d.ts +0 -0
- /package/dist/core/__tests__/{full → seam}/broker-provider-retry.test.d.ts +0 -0
- /package/dist/core/__tests__/{full → seam}/broker-whip-interrupt.test.d.ts +0 -0
- /package/dist/{clients/attach/__tests__/editor-frame-title.test.d.ts → core/__tests__/seam/dormancy-release.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/input-controller-extension-command.test.d.ts → core/__tests__/seam/yield-refresh-transaction.test.d.ts} +0 -0
- /package/dist/core/__tests__/{broker-fork-seam.test.d.ts → serial/broker-fork-seam.test.d.ts} +0 -0
- /package/dist/core/__tests__/{broker-sdk-wiring.test.d.ts → serial/broker-sdk-wiring.test.d.ts} +0 -0
- /package/dist/core/__tests__/{broker-snapshot-history.test.d.ts → serial/broker-snapshot-history.test.d.ts} +0 -0
- /package/dist/core/__tests__/{command-plugins.test.d.ts → serial/command-plugins.test.d.ts} +0 -0
- /package/dist/core/__tests__/{deferred-no-wake.test.d.ts → serial/deferred-no-wake.test.d.ts} +0 -0
- /package/dist/core/__tests__/{flagship-lifecycle.test.d.ts → serial/flagship-lifecycle.test.d.ts} +0 -0
- /package/dist/core/__tests__/{host-teardown-process-group.test.d.ts → serial/host-teardown-process-group.test.d.ts} +0 -0
- /package/dist/core/__tests__/{human-deliver-e2e.test.d.ts → serial/human-deliver-e2e.test.d.ts} +0 -0
- /package/dist/core/__tests__/{live-mutation.test.d.ts → serial/live-mutation.test.d.ts} +0 -0
- /package/dist/core/__tests__/{refresh-stall-recycle.test.d.ts → serial/refresh-stall-recycle.test.d.ts} +0 -0
- /package/dist/core/__tests__/{revive.test.d.ts → serial/revive.test.d.ts} +0 -0
- /package/dist/core/__tests__/{spawn-root.test.d.ts → serial/spawn-root.test.d.ts} +0 -0
- /package/dist/core/__tests__/{subscription-delivery.test.d.ts → serial/subscription-delivery.test.d.ts} +0 -0
- /package/dist/core/__tests__/{tmux-surface.test.d.ts → serial/tmux-surface.test.d.ts} +0 -0
- /package/dist/core/__tests__/{worktree.test.d.ts → serial/worktree.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/markdown-headings.test.d.ts → core/__tests__/watchdog-abort-arms-retry.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/session-identity-refresh.test.d.ts → core/broker-client/__tests__/transport-socket.test.d.ts} +0 -0
- /package/dist/core/human/__tests__/{inbox-core.test.d.ts → serial/inbox-core.test.d.ts} +0 -0
- /package/dist/{clients/inbox/review/__tests__/remap.test.d.ts → daemon/api/__tests__/node-model-validation.test.d.ts} +0 -0
- /package/dist/{clients/surfaces/region.js → daemon/api/__tests__/review-terminal-conflict.test.d.ts} +0 -0
- /package/dist/daemon/api/__tests__/{full → seam}/api-server.test.d.ts +0 -0
- /package/dist/daemon/api/__tests__/{full → seam}/b10-attach-modelauth.test.d.ts +0 -0
- /package/dist/{clients/web/__tests__/push-engine.test.d.ts → daemon/api/__tests__/seam/leaf-api-parity.test.d.ts} +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// Pure broker-side render adapters. crtrd supplies the fixed extension-state
|
|
2
|
+
// DTO; these functions only combine it with node-local/filesystem information.
|
|
3
|
+
import { contextDir, nodeDir } from '../canvas/paths.js';
|
|
4
|
+
import { execSync, spawnSync } from 'node:child_process';
|
|
5
|
+
import { readdirSync } from 'node:fs';
|
|
6
|
+
import { hostname } from 'node:os';
|
|
7
|
+
import { interpolateNodePaths } from '../canvas/paths.js';
|
|
8
|
+
import { fullName } from '../canvas/labels.js';
|
|
9
|
+
import { renderKnowledgeForSubject, renderPreferencesForSubject } from '../substrate/render.js';
|
|
10
|
+
import { renderWorkspaceOpenDocsForSubject } from '../substrate/on-read-pure.js';
|
|
11
|
+
import { loadProfileManifest } from '../profiles/manifest.js';
|
|
12
|
+
export function editorLabelForBrokerNode(node) {
|
|
13
|
+
const icon = (node.icon ?? '').trim();
|
|
14
|
+
const handle = node.name !== node.kind ? node.name.trim() : '';
|
|
15
|
+
const name = handle !== '' ? handle : (node.description ?? '').trim() || node.name;
|
|
16
|
+
return icon === '' ? name : `${icon} ${name}`;
|
|
17
|
+
}
|
|
18
|
+
function command(cwd, text) {
|
|
19
|
+
try {
|
|
20
|
+
return execSync(text, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Same environment-only project context rendered at normal boot, without a
|
|
27
|
+
* canvas import. */
|
|
28
|
+
export function buildProjectContextBlockForBroker(cwd) {
|
|
29
|
+
let listing;
|
|
30
|
+
try {
|
|
31
|
+
const entries = readdirSync(cwd, { withFileTypes: true }).sort((a, b) => Number(b.isDirectory()) - Number(a.isDirectory()) || a.name.localeCompare(b.name));
|
|
32
|
+
const shown = entries.slice(0, 50).map((entry) => `${entry.name}${entry.isDirectory() ? '/' : ''}`);
|
|
33
|
+
listing = entries.length > shown.length ? [...shown, `[+${entries.length - shown.length} more]`] : shown;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
listing = ['Directory listing: unavailable (cwd missing or unreadable).'];
|
|
37
|
+
}
|
|
38
|
+
const tmux = spawnSync('tmux', ['list-sessions'], { encoding: 'utf8', stdio: 'ignore' }).status === 0;
|
|
39
|
+
let git = 'Git: not a git repository.';
|
|
40
|
+
let worktrees = 'Worktrees: none.';
|
|
41
|
+
if (command(cwd, 'git rev-parse --is-inside-work-tree') !== '') {
|
|
42
|
+
const branch = command(cwd, 'git branch --show-current') || command(cwd, 'git rev-parse --abbrev-ref HEAD') || 'HEAD';
|
|
43
|
+
const sha = command(cwd, 'git rev-parse --short HEAD') || 'unknown';
|
|
44
|
+
const changes = command(cwd, 'git status --porcelain').split('\n').filter(Boolean).length;
|
|
45
|
+
const raw = command(cwd, 'git worktree list --porcelain').split('\n');
|
|
46
|
+
const found = [];
|
|
47
|
+
let path = '';
|
|
48
|
+
let wtBranch = 'detached HEAD';
|
|
49
|
+
for (const line of raw) {
|
|
50
|
+
if (line.startsWith('worktree ')) {
|
|
51
|
+
if (path !== '')
|
|
52
|
+
found.push(`${path} (${wtBranch})`);
|
|
53
|
+
path = line.slice(9);
|
|
54
|
+
wtBranch = 'detached HEAD';
|
|
55
|
+
}
|
|
56
|
+
else if (line.startsWith('branch '))
|
|
57
|
+
wtBranch = line.slice(7).replace(/^refs\/heads\//, '');
|
|
58
|
+
}
|
|
59
|
+
if (path !== '')
|
|
60
|
+
found.push(`${path} (${wtBranch})`);
|
|
61
|
+
git = `Git: ${branch} @ ${sha}; ${changes === 0 ? 'clean' : `${changes} uncommitted change${changes === 1 ? '' : 's'}`}; ${found.length} worktree${found.length === 1 ? '' : 's'}.`;
|
|
62
|
+
worktrees = found.length === 0 ? 'Worktrees: none.' : `Worktrees: ${found.join(', ')}`;
|
|
63
|
+
}
|
|
64
|
+
return `<project_context>\n\n<environment cwd="${cwd.replaceAll('&', '&').replaceAll('"', '"').replaceAll('<', '<')}">\nHost: ${process.platform} ${process.arch} · ${hostname()} · node ${process.version} · tmux server: ${tmux ? 'reachable' : 'none'}\nDirectory:\n${listing.map((line) => ` ${line}`).join('\n')}\n${git}\n${worktrees}\n</environment>\n</project_context>`;
|
|
65
|
+
}
|
|
66
|
+
function contextDirNote(nodeId) {
|
|
67
|
+
return `Your context directory is \`${contextDir(nodeId)}\` (also in the env as \`$CRTR_CONTEXT_DIR\`) — durable scratch space on disk, and the one place the other nodes on the canvas can read from. Put documents here that you want to share by reference instead of re-explaining them in a prompt: specs, designs, findings, notes worth pointing a sibling, child, or parent at. It is a shared document store, not a task tracker. **Address it by absolute path** — write artifacts as \`$CRTR_CONTEXT_DIR/<name>.md\` (or the full path above). Your working dir is the project, NOT this directory, so a bare relative \`context/...\` lands in the repo, not here — and other nodes can only read what is actually here. When you report a file, report its absolute path.`;
|
|
68
|
+
}
|
|
69
|
+
function profileNote(node) {
|
|
70
|
+
if (node.profile_id === null || node.profile_id === '')
|
|
71
|
+
return '';
|
|
72
|
+
try {
|
|
73
|
+
const entry = loadProfileManifest(node.profile_id);
|
|
74
|
+
if (entry.manifest.projects.length === 0)
|
|
75
|
+
return '';
|
|
76
|
+
return `Your working dir is \`${node.cwd}\`. Your profile **${entry.manifest.name}** also has purview over: ${entry.manifest.projects.join(', ')}.`;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return '';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function relativeLabel(node) {
|
|
83
|
+
const desc = fullName(node);
|
|
84
|
+
const descPart = desc !== '' && desc !== node.kind && desc !== node.name ? ` — ${desc}` : '';
|
|
85
|
+
return `${node.node_id} (${node.kind} · ${node.status})${descPart}`;
|
|
86
|
+
}
|
|
87
|
+
function graphMap(state) {
|
|
88
|
+
const { ancestors, children, node } = state;
|
|
89
|
+
if (ancestors.length === 0 && children.length === 0)
|
|
90
|
+
return '';
|
|
91
|
+
const indent = (depth) => ' '.repeat(depth);
|
|
92
|
+
const lines = ['Your place in the canvas graph (ancestry above you, your direct children below):'];
|
|
93
|
+
ancestors.forEach((ancestor, index) => lines.push(`${indent(index)}${index === 0 ? '' : '└ '}${relativeLabel(ancestor)}`));
|
|
94
|
+
const depth = ancestors.length;
|
|
95
|
+
lines.push(`${indent(depth)}${depth === 0 ? '' : '└ '}● you: ${node.node_id} (${node.kind}, ${node.mode})`);
|
|
96
|
+
const shown = children.slice(0, 5);
|
|
97
|
+
shown.forEach((child, index) => lines.push(`${indent(depth + 1)}${index === shown.length - 1 && children.length === shown.length ? '└ ' : '├ '}${relativeLabel(child)}`));
|
|
98
|
+
if (children.length > shown.length)
|
|
99
|
+
lines.push(`${indent(depth + 1)}└ +${children.length - shown.length} more`);
|
|
100
|
+
return lines.join('\n');
|
|
101
|
+
}
|
|
102
|
+
function identity(state) {
|
|
103
|
+
const { node, fork_source: source } = state;
|
|
104
|
+
const lines = [`You are node ${node.node_id} — kind ${node.kind}, mode ${node.mode}.`];
|
|
105
|
+
if (node.fork_from !== null && node.fork_from !== '') {
|
|
106
|
+
const sourceLabel = source === null ? node.fork_from : `${node.fork_from} ("${fullName(source)}")`;
|
|
107
|
+
lines.push('', `You are a new FORK of ${sourceLabel}, not ${sourceLabel}. Pi copied the earlier conversation into this session. Treat that first-person history as reference material, not your own past.`);
|
|
108
|
+
}
|
|
109
|
+
return lines.join('\n');
|
|
110
|
+
}
|
|
111
|
+
function worktreeNote(node) {
|
|
112
|
+
const worktree = node.managed_worktree;
|
|
113
|
+
if (worktree === null || worktree === undefined || worktree.state !== 'open')
|
|
114
|
+
return '';
|
|
115
|
+
return `Branch: \`${worktree.branch}\`\nWorktree: \`${worktree.path}\`\nBase: \`${worktree.base_ref}\` @ \`${worktree.base_sha}\`\nCommit work here. Land it with \`crtr node worktree close\` before finishing. Auto-drop applies only when the worktree is clean (no uncommitted changes) and nothing remains to land (zero commits ahead of the base, or its commits are already contained in the base); unlanded commits (commits not already contained in the base) or uncommitted changes require an explicit close/landing decision.`;
|
|
116
|
+
}
|
|
117
|
+
function reviewNote(node) {
|
|
118
|
+
const review = node.review_binding;
|
|
119
|
+
if (review === null || review === undefined)
|
|
120
|
+
return '';
|
|
121
|
+
return `You exist for one human review of \`${review.target_file}\`. The inherited conversation belongs to the origin node, not you — carry only the context needed for this review. The person's visible transcript begins at the boundary marker above; everything earlier is context they cannot see.`;
|
|
122
|
+
}
|
|
123
|
+
export function buildContextBearingsFromState(state, projectContext, situational = '') {
|
|
124
|
+
const { node } = state;
|
|
125
|
+
const bearings = ['<crtr-bearings>', identity(state)];
|
|
126
|
+
const map = graphMap(state);
|
|
127
|
+
if (map !== '')
|
|
128
|
+
bearings.push('', '## Your place in the canvas', map);
|
|
129
|
+
bearings.push('', '## Your context directory', contextDirNote(node.node_id));
|
|
130
|
+
const profile = profileNote(node);
|
|
131
|
+
if (profile !== '')
|
|
132
|
+
bearings.push('', profile);
|
|
133
|
+
const worktree = worktreeNote(node);
|
|
134
|
+
if (worktree !== '')
|
|
135
|
+
bearings.push('', '## Your managed worktree', worktree);
|
|
136
|
+
if (node.mode === 'orchestrator')
|
|
137
|
+
bearings.push('', `Because you persist across refresh cycles, your context directory (${contextDir(node.node_id)}) is also where a future cycle of you resumes the work — keep the working notes and decisions a refreshed you would need there, alongside the docs you share with the nodes you spawn.`);
|
|
138
|
+
bearings.push('</crtr-bearings>');
|
|
139
|
+
const knowledge = renderKnowledgeForSubject(state.subject, node.node_id);
|
|
140
|
+
const workspace = renderWorkspaceOpenDocsForSubject(state.subject, node.cwd, node.profile_id);
|
|
141
|
+
return [bearings.join('\n'), knowledge, workspace, situational, projectContext].filter((part) => part !== '').join('\n');
|
|
142
|
+
}
|
|
143
|
+
export function buildForkBearingsFromState(state, situational = '') {
|
|
144
|
+
const { node, fork_source: source } = state;
|
|
145
|
+
const bearings = ['<crtr-bearings>', identity(state), '', 'The source node’s earlier task, graph position, lifecycle, children, schedules, worktree, situational context, and context-directory path do not carry over. Shared conversation, project, and operating context remain reference material.', '', '## Your node now', `Lifecycle: ${node.lifecycle}.`];
|
|
146
|
+
const map = graphMap(state);
|
|
147
|
+
bearings.push(...(map === '' ? ['Canvas: independent root with no parent or inherited graph edges.'] : ['', map]));
|
|
148
|
+
bearings.push(`Context directory: \`${contextDir(node.node_id)}\` (\`$CRTR_CONTEXT_DIR\`). Use this path in place of every source-node context path above.`);
|
|
149
|
+
if (source === null || source.cwd !== node.cwd)
|
|
150
|
+
bearings.push(`Working directory: \`${node.cwd}\`.`);
|
|
151
|
+
if (source === null || source.profile_id !== node.profile_id) {
|
|
152
|
+
const profile = profileNote(node);
|
|
153
|
+
if (profile !== '')
|
|
154
|
+
bearings.push(profile);
|
|
155
|
+
}
|
|
156
|
+
const worktree = worktreeNote(node);
|
|
157
|
+
if (worktree !== '')
|
|
158
|
+
bearings.push('', '## Your managed worktree', worktree);
|
|
159
|
+
if (node.mode === 'orchestrator')
|
|
160
|
+
bearings.push('', `Because you persist across refresh cycles, your context directory (${contextDir(node.node_id)}) is also where a future cycle of you resumes the work — keep the working notes and decisions a refreshed you would need there, alongside the docs you share with the nodes you spawn.`);
|
|
161
|
+
const review = reviewNote(node);
|
|
162
|
+
if (review !== '')
|
|
163
|
+
bearings.push('', review);
|
|
164
|
+
bearings.push('', 'The first real user message after these bearings is your mandate.', '</crtr-bearings>');
|
|
165
|
+
return [bearings.join('\n'), situational].filter((part) => part !== '').join('\n');
|
|
166
|
+
}
|
|
167
|
+
export function renderPreferencesFromState(state) {
|
|
168
|
+
return interpolateNodePaths(renderPreferencesForSubject(state.subject).block, state.node.node_id);
|
|
169
|
+
}
|
|
170
|
+
/** A canonical report ref has already been validated by crtrd in state. The
|
|
171
|
+
* broker reads only its local filesystem content; no canvas accessor is needed. */
|
|
172
|
+
export function reportPathFromRef(ref, reportNodes) {
|
|
173
|
+
const separator = ref.indexOf(':');
|
|
174
|
+
if (separator <= 0)
|
|
175
|
+
return null;
|
|
176
|
+
const nodeId = ref.slice(0, separator);
|
|
177
|
+
const relpath = ref.slice(separator + 1);
|
|
178
|
+
if (!reportNodes.has(nodeId) || !relpath.startsWith('reports/') || relpath.includes('..') || relpath.startsWith('/'))
|
|
179
|
+
return null;
|
|
180
|
+
return `${nodeDir(nodeId)}/${relpath}`;
|
|
181
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BrokerExtensionNodeDTO } from '../../api/dto/broker-ops.js';
|
|
2
|
+
export interface BrokerPersona {
|
|
3
|
+
mode: 'base' | 'orchestrator';
|
|
4
|
+
lifecycle: 'terminal' | 'resident';
|
|
5
|
+
}
|
|
6
|
+
export interface BrokerPersonaDrift {
|
|
7
|
+
from: BrokerPersona;
|
|
8
|
+
to: BrokerPersona;
|
|
9
|
+
guidance: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function transitionGuidanceFromBrokerState(node: BrokerExtensionNodeDTO, from: BrokerPersona, to: BrokerPersona): string;
|
|
12
|
+
/** Return an unacknowledged persona transition from crtrd's fixed extension state. */
|
|
13
|
+
export declare function personaDriftFromBrokerState(node: BrokerExtensionNodeDTO): BrokerPersonaDrift | null;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Broker-local persona transition guidance. Canvas state is supplied by crtrd;
|
|
2
|
+
// this module reads only the node's own roadmap and durable memory files.
|
|
3
|
+
import { resolveMemoryDoc } from '../memory-resolver.js';
|
|
4
|
+
import { contextDir } from '../canvas/paths.js';
|
|
5
|
+
import { readRoadmap, roadmapPath } from './roadmap.js';
|
|
6
|
+
function loadMemoryBody(name) {
|
|
7
|
+
try {
|
|
8
|
+
return resolveMemoryDoc(name).body.trim();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function orchestratorContextNote(nodeId) {
|
|
15
|
+
return `Because you persist across refresh cycles, your context directory (${contextDir(nodeId)}) is also where a future cycle of you resumes the work — keep the working notes and decisions a refreshed you would need there, alongside the docs you share with the nodes you spawn.`;
|
|
16
|
+
}
|
|
17
|
+
function orchestrationGuidance(node) {
|
|
18
|
+
const kernel = loadMemoryBody('orchestration-kernel');
|
|
19
|
+
const roadmap = readRoadmap(node.node_id) ?? '(no roadmap yet)';
|
|
20
|
+
const rmPath = roadmapPath(node.node_id);
|
|
21
|
+
return [
|
|
22
|
+
`You are now a ${node.kind.toUpperCase()} ORCHESTRATOR. Your scarce resource is your own context window.`,
|
|
23
|
+
'Your job is to manage context and delegate — not to do the goal yourself.',
|
|
24
|
+
'',
|
|
25
|
+
kernel,
|
|
26
|
+
'',
|
|
27
|
+
`Your roadmap scaffold (\`${rmPath}\`) — author it now: state the goal, exit criteria, and the phase skeleton, using the approach above. Current contents:`,
|
|
28
|
+
'',
|
|
29
|
+
roadmap,
|
|
30
|
+
'',
|
|
31
|
+
orchestratorContextNote(node.node_id),
|
|
32
|
+
'',
|
|
33
|
+
'Your three long-term memory scopes (user-global, project, node-local) already surface in your bearings at boot. What promotion changes is USE, not access: you now persist across refresh cycles, so node-local carries what THIS goal needs between your refreshes, and durable facts you commit to user-global or project outlive this node. Use `crtr memory write` to save a document; `crtr memory list` to browse; `crtr memory find` to search (see "Your long-term memory" above for the full substrate flow).',
|
|
34
|
+
'',
|
|
35
|
+
'Then delegate each phase with `crtr node new --kind <kind>`. When your context fills, run `crtr node yield` to refresh against this roadmap.',
|
|
36
|
+
].join('\n');
|
|
37
|
+
}
|
|
38
|
+
function baseModeGuidance() {
|
|
39
|
+
return 'You are HANDS-ON again — base mode. Do the work yourself in THIS window and finish it here; stop delegating by default. You no longer drive a roadmap, so `crtr node yield` is not your exit. Spawn a child only for a cleanly separable unit, never as your first move.';
|
|
40
|
+
}
|
|
41
|
+
export function transitionGuidanceFromBrokerState(node, from, to) {
|
|
42
|
+
const sections = [];
|
|
43
|
+
if (from.mode !== to.mode) {
|
|
44
|
+
sections.push(to.mode === 'orchestrator' ? orchestrationGuidance(node) : baseModeGuidance());
|
|
45
|
+
}
|
|
46
|
+
if (from.lifecycle !== to.lifecycle) {
|
|
47
|
+
sections.push(loadMemoryBody(to.lifecycle === 'resident' ? 'lifecycle/resident' : 'lifecycle/terminal'));
|
|
48
|
+
}
|
|
49
|
+
return sections.join('\n\n');
|
|
50
|
+
}
|
|
51
|
+
/** Return an unacknowledged persona transition from crtrd's fixed extension state. */
|
|
52
|
+
export function personaDriftFromBrokerState(node) {
|
|
53
|
+
const to = { mode: node.mode, lifecycle: node.lifecycle };
|
|
54
|
+
const from = node.persona_ack ?? to;
|
|
55
|
+
if (from.mode === to.mode && from.lifecycle === to.lifecycle)
|
|
56
|
+
return null;
|
|
57
|
+
return { from, to, guidance: transitionGuidanceFromBrokerState(node, from, to) };
|
|
58
|
+
}
|
|
@@ -61,7 +61,7 @@ export interface HelloFrame {
|
|
|
61
61
|
type: 'hello';
|
|
62
62
|
role: ClientRole;
|
|
63
63
|
client_id: string;
|
|
64
|
-
/** Terminal geometry of a tmux-pane viewer; absent for a
|
|
64
|
+
/** Terminal geometry of a tmux-pane viewer; absent for a headless client. */
|
|
65
65
|
term?: {
|
|
66
66
|
cols: number;
|
|
67
67
|
rows: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// broker-protocol.ts — the client↔broker wire protocol for the headless node
|
|
2
2
|
// Surface (design §5.2). Pure types + a newline-delimited JSON codec; no I/O, no
|
|
3
3
|
// SDK construction. Consumed by the broker (src/core/runtime/broker.ts) and, in
|
|
4
|
-
// Phase 4, by the `crtr surface attach` terminal client and
|
|
4
|
+
// Phase 4, by the `crtr surface attach` terminal client and crtrd's attach bridge.
|
|
5
5
|
//
|
|
6
6
|
// The transport is one unix socket per node (`nodeDir(id)/view.sock`) speaking
|
|
7
7
|
// newline-delimited JSON frames. Live engine events are relayed VERBATIM — the
|
|
@@ -1,204 +1,14 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type AgentSessionRuntime, type AgentSessionServices, type CreateAgentSessionResult, type ExtensionUIContext, type PromptOptions } from '@earendil-works/pi-coding-agent';
|
|
3
|
-
import { type ImageContent } from '@earendil-works/pi-ai';
|
|
1
|
+
import { type AgentSessionRuntime, type AgentSessionServices, type CreateAgentSessionResult, type ExtensionUIContext } from '@earendil-works/pi-coding-agent';
|
|
4
2
|
import { type BrokerSdkConfig } from './launch.js';
|
|
5
3
|
import { type BrokerEngine } from './broker-sdk.js';
|
|
6
4
|
import { type KnownStreamWaitControl } from './stream-watchdog.js';
|
|
7
|
-
import {
|
|
5
|
+
import { type BrokerClient } from './broker/client-registry.js';
|
|
6
|
+
import { type BrokerSnapshot, type BrokerToClient, type RpcExtensionUIRequest, type RpcExtensionUIResponse } from './broker-protocol.js';
|
|
8
7
|
/** A review companion may only navigate or fork within a branch whose ancestry
|
|
9
8
|
* has crossed its durable transcript boundary. The broker sends this typed local
|
|
10
9
|
* failure as a dedicated error frame without invoking pi's tree mutation. */
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
readonly targetId: string;
|
|
14
|
-
readonly code = "review_boundary_navigation";
|
|
15
|
-
constructor(targetId: string);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* The pinned pi SDK never yields `session.model === undefined` for a model-less
|
|
19
|
-
* boot: Agent.createMutableAgentState() falls back to a hardcoded
|
|
20
|
-
* `{ provider:'unknown', id:'unknown', api:'unknown', … }` stub (DEFAULT_MODEL)
|
|
21
|
-
* whenever no model is supplied at construction, and `session.model` returns it
|
|
22
|
-
* verbatim. This mirrors the SDK's own (non-exported) interactive-mode.js
|
|
23
|
-
* `isUnknownModel()` so the broker recognizes that stub as "no model" wherever it
|
|
24
|
-
* guards the model-less launch path (kickoff deferral, reload_auth re-drive) and
|
|
25
|
-
* refuses to record/broadcast it as a real `unknown/unknown` model.
|
|
26
|
-
*/
|
|
27
|
-
export declare function isUnknownModel(model: {
|
|
28
|
-
provider?: string;
|
|
29
|
-
id?: string;
|
|
30
|
-
api?: string;
|
|
31
|
-
} | null | undefined): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Route a writable client's `prompt`/`follow_up` frame against the LIVE session
|
|
34
|
-
* state. The client picks its frame type off a possibly-STALE `isStreaming`
|
|
35
|
-
* snapshot, so the broker is authoritative and the client's choice is a HINT:
|
|
36
|
-
*
|
|
37
|
-
* - m-B (streaming-safe prompt): a `prompt` arriving mid-stream needs
|
|
38
|
-
* PromptOptions.streamingBehavior ("Required if streaming"; prompt() throws
|
|
39
|
-
* without it). "steer" mirrors pi interactive-mode's own
|
|
40
|
-
* Enter-while-streaming submit (`prompt(text, { streamingBehavior: "steer" })`).
|
|
41
|
-
* - m-C (idle-safe follow_up): pi's followUp() only enqueues into a RUNNING
|
|
42
|
-
* agent loop — on an idle session nothing ever drains the queue and the text
|
|
43
|
-
* is silently lost. An idle `follow_up` therefore runs as a prompt now.
|
|
44
|
-
*
|
|
45
|
-
* driveEngine calls this synchronously with `session.isStreaming`, so the
|
|
46
|
-
* routed state cannot go stale between the check and the engine call.
|
|
47
|
-
* C1: images ride as a field on PromptOptions (pi: `prompt(text, { images })`).
|
|
48
|
-
*/
|
|
49
|
-
export declare function resolveEngineRoute(frame: {
|
|
50
|
-
type: 'prompt' | 'follow_up';
|
|
51
|
-
images?: ImageContent[];
|
|
52
|
-
}, isStreaming: boolean): {
|
|
53
|
-
call: 'prompt';
|
|
54
|
-
options: PromptOptions;
|
|
55
|
-
} | {
|
|
56
|
-
call: 'followUp';
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* True iff `text` would be consumed by pi's OWN leading-name preflight before
|
|
60
|
-
* `session.prompt/steer/followUp` ever sees it as prose — an extension command
|
|
61
|
-
* (`session.extensionRunner.getCommand`), a `/skill:name` skill, or a `/name`
|
|
62
|
-
* prompt template (mirrors `_tryExecuteExtensionCommand` / `_expandSkillCommand`
|
|
63
|
-
* / `expandPromptTemplate` in the pinned SDK verbatim, including the exact
|
|
64
|
-
* name-parsing substrings). Inline memory-reference guidance must NEVER fire
|
|
65
|
-
* for these — the leading token routes to the engine's own command surface,
|
|
66
|
-
* not prose referencing a memory doc. Each lookup is independently wrapped so
|
|
67
|
-
* an engine missing one accessor (the fake, or a degraded session) degrades
|
|
68
|
-
* that check to "not a match" rather than aborting the whole classification —
|
|
69
|
-
* matching `buildCommandList`'s existing "no live extensionRunner" tolerance.
|
|
70
|
-
*/
|
|
71
|
-
export declare function isLeadingEngineCommand(text: string, session: {
|
|
72
|
-
extensionRunner?: {
|
|
73
|
-
getCommand(name: string): unknown;
|
|
74
|
-
};
|
|
75
|
-
resourceLoader?: {
|
|
76
|
-
getSkills(): {
|
|
77
|
-
skills: Array<{
|
|
78
|
-
name: string;
|
|
79
|
-
}>;
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
promptTemplates?: ReadonlyArray<{
|
|
83
|
-
name: string;
|
|
84
|
-
}>;
|
|
85
|
-
}): boolean;
|
|
86
|
-
/** A `steer` frame normally maps directly to pi's steer queue. Engine commands,
|
|
87
|
-
* skills, and templates must instead pass through prompt()'s leading-command
|
|
88
|
-
* preflight; with streamingBehavior:'steer', ordinary expanded text still lands
|
|
89
|
-
* in the same queue. */
|
|
90
|
-
export declare function resolveSteerCall(text: string, session: Parameters<typeof isLeadingEngineCommand>[1]): 'prompt' | 'steer';
|
|
91
|
-
/**
|
|
92
|
-
* Enumerate every leading-token STRING this session's engine would
|
|
93
|
-
* independently consume as a leading command/skill/template dispatch BEFORE
|
|
94
|
-
* inline memory-reference guidance ever applies — the read-op sibling of
|
|
95
|
-
* `isLeadingEngineCommand`'s point-lookup, gathered as a full enumeration for
|
|
96
|
-
* viewer-side suppression instead of a per-submission membership check. Same
|
|
97
|
-
* three sources, same shape of the leading match `isLeadingEngineCommand`
|
|
98
|
-
* checks (bare extension-command invocation names and prompt-template names,
|
|
99
|
-
* `skill:<name>` for skills), so `/${token}` round-trips through
|
|
100
|
-
* `isLeadingEngineCommand(text, session)` for every emitted token (locked by
|
|
101
|
-
* a test). Kept STRICTLY separate from `buildCommandList` (command
|
|
102
|
-
* completion) and the ref inventory (`RefMeta` rows) — this is neither.
|
|
103
|
-
*/
|
|
104
|
-
export declare function engineLeadingCommandTokens(session: {
|
|
105
|
-
extensionRunner?: {
|
|
106
|
-
getRegisteredCommands(): Array<{
|
|
107
|
-
invocationName: string;
|
|
108
|
-
}>;
|
|
109
|
-
};
|
|
110
|
-
resourceLoader?: {
|
|
111
|
-
getSkills(): {
|
|
112
|
-
skills: Array<{
|
|
113
|
-
name: string;
|
|
114
|
-
}>;
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
promptTemplates?: ReadonlyArray<{
|
|
118
|
-
name: string;
|
|
119
|
-
}>;
|
|
120
|
-
}): string[];
|
|
121
|
-
/**
|
|
122
|
-
* Choose how the hidden `crtr-memory-refs` guidance custom message rides
|
|
123
|
-
* alongside a human frame's own engine call (design Flow B). Pure over the
|
|
124
|
-
* frame's routing outcome — never reads live session state itself, so a
|
|
125
|
-
* caller can decide the delivery mode from the exact same `route`
|
|
126
|
-
* `resolveEngineRoute` already computed for the human call.
|
|
127
|
-
*
|
|
128
|
-
* - `steer` frame -> 'steer' (always; no route call exists).
|
|
129
|
-
* - a TRUE mid-stream follow_up (`routeCall === 'followUp'`) -> 'followUp'.
|
|
130
|
-
* - every other `prompt`/`follow_up` routed as `routeCall === 'prompt'`:
|
|
131
|
-
* idle -> 'nextTurn' (the ONLY case guidance precedes the human call —
|
|
132
|
-
* pi's `prompt()` reads+clears its pending-nextTurn queue synchronously
|
|
133
|
-
* into the SAME turn as the new user message); streaming (m-B
|
|
134
|
-
* steer-while-streaming) -> 'steer', never 'nextTurn' (that would attach
|
|
135
|
-
* to a later, unrelated turn).
|
|
136
|
-
*/
|
|
137
|
-
export declare function chooseGuidanceDeliveryMode(frameType: 'prompt' | 'follow_up' | 'steer', routeCall: 'prompt' | 'followUp' | undefined, isStreaming: boolean): 'steer' | 'followUp' | 'nextTurn';
|
|
138
|
-
/**
|
|
139
|
-
* Deliver a `nextTurn` guidance custom message ATOMICALLY around the idle-
|
|
140
|
-
* prompt call it's meant to ride alongside. Pi's `_pendingNextTurnMessages`
|
|
141
|
-
* queue (the only public seam for `deliverAs:'nextTurn'`) is drained ONLY deep
|
|
142
|
-
* inside `session.prompt()`, well after several await points — extension-
|
|
143
|
-
* command interception, the `input` extension transform, a streaming reroute,
|
|
144
|
-
* model/auth validation, pre-turn compaction — that can return or throw BEFORE
|
|
145
|
-
* the drain ever runs. `sendCustomMessage`'s nextTurn branch pushes
|
|
146
|
-
* synchronously and unconditionally, so any of those early exits strands the
|
|
147
|
-
* pushed guidance in the queue to attach itself to whichever LATER, unrelated
|
|
148
|
-
* prompt happens to reach the drain first.
|
|
149
|
-
*
|
|
150
|
-
* There is no public SDK seam to observe or cancel a pending nextTurn message
|
|
151
|
-
* (`_pendingNextTurnMessages` is TS-`private` only — a plain runtime field, not
|
|
152
|
-
* `#private`), so this reaches into that one field and removes EXACTLY the
|
|
153
|
-
* entry this call pushed, identified by object identity via a locally-
|
|
154
|
-
* generated marker riding the message's own `details` field (never surfaced to
|
|
155
|
-
* the model, and irrelevant if the message WAS consumed normally — `details`
|
|
156
|
-
* is just carried through like any other field once folded into a real turn).
|
|
157
|
-
* Runs UNCONDITIONALLY after the human call settles, success or failure/early-
|
|
158
|
-
* return alike — a "successful" `prompt()` promise can just as easily be an
|
|
159
|
-
* early return that skipped the drain (an intercepted extension command, an
|
|
160
|
-
* `input` transform, a streaming reroute) as a genuine consumed turn, so only
|
|
161
|
-
* checking `.catch` is not enough.
|
|
162
|
-
*/
|
|
163
|
-
export declare function promptWithNextTurnGuidance(session: {
|
|
164
|
-
sendCustomMessage(message: {
|
|
165
|
-
customType: string;
|
|
166
|
-
content: unknown;
|
|
167
|
-
display?: boolean;
|
|
168
|
-
details?: unknown;
|
|
169
|
-
}, options?: {
|
|
170
|
-
deliverAs?: 'steer' | 'followUp' | 'nextTurn';
|
|
171
|
-
}): Promise<void>;
|
|
172
|
-
}, guidance: string, runPrompt: () => Promise<void>): Promise<void>;
|
|
173
|
-
/** True iff a parsed JSONL branch-entry line is a hidden (`display:false`)
|
|
174
|
-
* custom message — the general display boundary crossed if left in an
|
|
175
|
-
* exported branch (not just `crtr-memory-refs` guidance; any hidden custom
|
|
176
|
-
* content). Covers both persisted shapes a branch entry can take: a
|
|
177
|
-
* `type:'custom_message'` entry (display at the entry's own top level) and a
|
|
178
|
-
* `type:'message'` entry wrapping a `role:'custom'` message (display nested
|
|
179
|
-
* under `.message`). */
|
|
180
|
-
export declare function isHiddenJsonlBranchEntry(entry: unknown): boolean;
|
|
181
|
-
/** Rewrite an already-exported JSONL file in place, dropping every hidden
|
|
182
|
-
* (`display:false`) branch entry while re-chaining `parentId` so the
|
|
183
|
-
* remaining entries stay a single valid linear branch — applying the general
|
|
184
|
-
* display:false boundary to `session.exportToJsonl`'s own output, which
|
|
185
|
-
* serializes every entry verbatim regardless of display. The header line
|
|
186
|
-
* (line 1) is copied through untouched. */
|
|
187
|
-
export declare function stripHiddenEntriesFromJsonlExport(filePath: string): void;
|
|
188
|
-
interface BrokerClient {
|
|
189
|
-
id: string;
|
|
190
|
-
role: ClientRole;
|
|
191
|
-
socket: Socket;
|
|
192
|
-
decoder: FrameDecoder;
|
|
193
|
-
helloed: boolean;
|
|
194
|
-
/** Unflushed outbound bytes handed to `socket.write` but not yet flushed to the
|
|
195
|
-
* OS (M1 backpressure accounting). Incremented before each write, decremented
|
|
196
|
-
* in that write's completion callback. */
|
|
197
|
-
pendingBytes: number;
|
|
198
|
-
/** Outbound frames written but not yet flushed (the queue-depth half of the
|
|
199
|
-
* high-water mark). */
|
|
200
|
-
queuedFrames: number;
|
|
201
|
-
}
|
|
10
|
+
export { ReviewBoundaryNavigationError, REVIEW_BOUNDARY_NAVIGATION_CODE } from './broker/frame-dispatch.js';
|
|
11
|
+
export type { SubscriptionGeneration } from './broker/rebind.js';
|
|
202
12
|
/** A blocking dialog awaiting a response from ANY writable client, the
|
|
203
13
|
* broker-side default timeout, or the engine's abort. The dialog is fanned out
|
|
204
14
|
* to every writable client at raise time; this entry is the single settlement
|
|
@@ -252,4 +62,3 @@ export interface BrokerDialogDeps {
|
|
|
252
62
|
onKnownStreamWait?: KnownStreamWaitControl;
|
|
253
63
|
}
|
|
254
64
|
export declare function makeBrokerUiContext(deps: BrokerDialogDeps): ExtensionUIContext;
|
|
255
|
-
export {};
|