@north-light/crouter 0.3.172 → 0.3.174
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} +106 -177
- 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 +55 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +60 -0
- 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/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
|
@@ -1,26 +1,22 @@
|
|
|
1
|
-
// Run with: node --import tsx/esm --test src/daemon/api/__tests__/
|
|
1
|
+
// Run with: node --import tsx/esm --test src/daemon/api/__tests__/seam/leaf-api-parity.test.ts
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// CRTR_HOME-isolated in-process crtrd, with a real parent+child pair.
|
|
3
|
+
// The `crtr push` and `crtr node worktree close` leaves are pure crtrd API
|
|
4
|
+
// clients: the report write, the per-subscriber inbox fan, the lifecycle
|
|
5
|
+
// transition (spec §7.4), and the worktree land+close git transaction all
|
|
6
|
+
// happen SERVER-side. These tests drive the ACTUAL leaves (not the client
|
|
7
|
+
// methods directly) against a CRTR_HOME-isolated in-process crtrd, with real
|
|
8
|
+
// parent+child pairs and real git repos.
|
|
10
9
|
//
|
|
11
|
-
//
|
|
12
|
-
// / CI-only tier
|
|
13
|
-
//
|
|
14
|
-
//
|
|
10
|
+
// COMPILED SEAM (real-boot-bound): lives in `__tests__/seam/` for the 30s-per-test
|
|
11
|
+
// / CI-only tier, same harness as api-server.test.ts. tmux-free
|
|
12
|
+
// (createHeadlessHarness) but boots REAL broker processes with the fake engine
|
|
13
|
+
// — no LLM cost.
|
|
15
14
|
//
|
|
16
|
-
//
|
|
15
|
+
// A leaf resolves its client through `cliClient()` →
|
|
17
16
|
// `CrtrClient.forLocalSocket` → `apiSocketPath()` == `<CRTR_HOME>/crtrd.sock`,
|
|
18
17
|
// the SAME socket `createApiServer()` binds here. So `pushLeaf(tier).run()` in
|
|
19
|
-
// this process, with `CRTR_NODE_ID` set to the
|
|
20
|
-
// in-process server exactly as a real `crtr push` CLI process would.
|
|
21
|
-
// reaches ZERO canvas state-store code (proven separately by the emitted
|
|
22
|
-
// dist import-graph, reported in this node's B-5 final); this test proves the
|
|
23
|
-
// runtime behavior on the far side of that boundary.
|
|
18
|
+
// this process, with `CRTR_NODE_ID` set to the caller, connects to the
|
|
19
|
+
// in-process server exactly as a real `crtr push` CLI process would.
|
|
24
20
|
import { test, before, after } from 'node:test';
|
|
25
21
|
import assert from 'node:assert/strict';
|
|
26
22
|
import { existsSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
@@ -31,6 +27,7 @@ import { createApiServer } from '../../server.js';
|
|
|
31
27
|
import { apiSocketPath } from '../../../../core/canvas/paths.js';
|
|
32
28
|
import { CrtrClient } from '../../../../api/index.js';
|
|
33
29
|
import { registerPush } from '../../../../commands/push.js';
|
|
30
|
+
import { registerNode } from '../../../../commands/node.js';
|
|
34
31
|
import { createNode, getNode } from '../../../../core/canvas/canvas.js';
|
|
35
32
|
import { createManagedWorktree } from '../../../../core/worktree.js';
|
|
36
33
|
import { gitSync } from '../../../../core/git.js';
|
|
@@ -49,7 +46,7 @@ function git(args, cwd) {
|
|
|
49
46
|
/** A fresh git repo with one commit on `main` — the base a managed worktree
|
|
50
47
|
* branches off. Returns the repo dir (caller removes it). */
|
|
51
48
|
function initRepo() {
|
|
52
|
-
const repo = mkdtempSync(join(tmpdir(), 'crtr-
|
|
49
|
+
const repo = mkdtempSync(join(tmpdir(), 'crtr-leafparity-repo-'));
|
|
53
50
|
git(['init', '-b', 'main'], repo);
|
|
54
51
|
git(['config', 'user.email', 'test@example.com'], repo);
|
|
55
52
|
git(['config', 'user.name', 'Test'], repo);
|
|
@@ -88,8 +85,27 @@ async function runPushAs(caller, tier, body) {
|
|
|
88
85
|
process.env['CRTR_NODE_ID'] = prev;
|
|
89
86
|
}
|
|
90
87
|
}
|
|
88
|
+
// The `node worktree close` leaf, resolved from the real command tree exactly as
|
|
89
|
+
// the CLI dispatcher would, and driven as the given caller node.
|
|
90
|
+
async function runCloseAs(caller) {
|
|
91
|
+
const worktree = registerNode().children.find((c) => c.name === 'worktree');
|
|
92
|
+
assert.ok(worktree !== undefined && worktree.kind === 'branch', 'node worktree branch resolves');
|
|
93
|
+
const close = worktree.children.find((c) => c.name === 'close');
|
|
94
|
+
assert.ok(close !== undefined && close.kind === 'leaf', 'node worktree close leaf resolves');
|
|
95
|
+
const prev = process.env['CRTR_NODE_ID'];
|
|
96
|
+
process.env['CRTR_NODE_ID'] = caller;
|
|
97
|
+
try {
|
|
98
|
+
return (await close.run({}));
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
if (prev === undefined)
|
|
102
|
+
delete process.env['CRTR_NODE_ID'];
|
|
103
|
+
else
|
|
104
|
+
process.env['CRTR_NODE_ID'] = prev;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
91
107
|
before(async () => {
|
|
92
|
-
h = await createHeadlessHarness({ sessionPrefix: 'crtr-
|
|
108
|
+
h = await createHeadlessHarness({ sessionPrefix: 'crtr-leafparity' });
|
|
93
109
|
server = createApiServer(); // binds <h.home>/crtrd.sock (CRTR_HOME set by harness)
|
|
94
110
|
sockPath = apiSocketPath();
|
|
95
111
|
await h.waitFor(() => existsSync(sockPath), { label: 'api socket bound', timeoutMs: 10_000 });
|
|
@@ -112,28 +128,13 @@ after(async () => {
|
|
|
112
128
|
process.env['CRTR_NODE_ID'] = savedNodeId;
|
|
113
129
|
});
|
|
114
130
|
// ---------------------------------------------------------------------------
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// child (so the parent subscribes to the child); the child
|
|
131
|
+
// push final — the report write, the subscriber fan, and the lifecycle
|
|
132
|
+
// transition all happen server-side, driven through the real push.ts leaf. A
|
|
133
|
+
// parent spawns a child (so the parent subscribes to the child); the child
|
|
134
|
+
// pushes.
|
|
118
135
|
// ---------------------------------------------------------------------------
|
|
119
|
-
test('
|
|
120
|
-
const parent = h.spawnRoot('
|
|
121
|
-
const child = (await client.createNode({ kind: 'developer', parent, prompt: 'update worker' })).node_id;
|
|
122
|
-
await h.awaitBoot(child);
|
|
123
|
-
assert.equal(h.node(child)?.status, 'active', 'the child is live/active before the update push');
|
|
124
|
-
const out = await runPushAs(child, 'update', 'update from the child');
|
|
125
|
-
// report_path: an absolute path to a report file the server actually wrote.
|
|
126
|
-
assert.equal(typeof out['report_path'], 'string', 'report_path is a string');
|
|
127
|
-
assert.ok(existsSync(out['report_path']), `report file written at ${String(out['report_path'])}`);
|
|
128
|
-
// notified: the subscribed parent received an inbox pointer.
|
|
129
|
-
assert.ok(Array.isArray(out['notified']), 'notified is an array');
|
|
130
|
-
assert.ok(out['notified'].includes(parent), `update notifies the subscribed parent (notified=${JSON.stringify(out['notified'])})`);
|
|
131
|
-
// transitioned: ABSENT for a non-final tier — an update never flips lifecycle.
|
|
132
|
-
assert.equal('transitioned' in out, false, 'update carries no transitioned field');
|
|
133
|
-
assert.equal(h.node(child)?.status, 'active', 'the child stays active after an update (no transition)');
|
|
134
|
-
});
|
|
135
|
-
test('B1: `crtr push final` from a child writes a report, notifies the subscribed parent, AND transitions the child row active→done — leaf output carries transitioned={from,to} and the row is genuinely done', async () => {
|
|
136
|
-
const parent = h.spawnRoot('push-parity final parent');
|
|
136
|
+
test('`crtr push final` from a child writes a report, notifies the subscribed parent, AND transitions the child row active→done', async () => {
|
|
137
|
+
const parent = h.spawnRoot('leaf-api-parity final parent');
|
|
137
138
|
const child = (await client.createNode({ kind: 'developer', parent, prompt: 'final worker' })).node_id;
|
|
138
139
|
await h.awaitBoot(child);
|
|
139
140
|
assert.equal(h.node(child)?.status, 'active', 'the child is live/active before the final push');
|
|
@@ -179,7 +180,7 @@ test('re-homed guard: `crtr push final` on a node with a managed worktree holdin
|
|
|
179
180
|
rmSync(repo, { recursive: true, force: true });
|
|
180
181
|
}
|
|
181
182
|
});
|
|
182
|
-
test('
|
|
183
|
+
test('auto-drop: `crtr push final` on a node with a CLEAN, zero-commit managed worktree auto-drops it server-side, surfaces worktree_auto_dropped(+path) on the leaf output, and finalizes normally', async () => {
|
|
183
184
|
const repo = initRepo();
|
|
184
185
|
try {
|
|
185
186
|
const id = 'wt-clean-empty-final';
|
|
@@ -197,3 +198,21 @@ test('re-homed auto-drop: `crtr push final` on a node with a CLEAN, zero-commit
|
|
|
197
198
|
rmSync(repo, { recursive: true, force: true });
|
|
198
199
|
}
|
|
199
200
|
});
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// `node worktree close` error parity — the SPECIFIC WorktreeError code + its
|
|
203
|
+
// `next` remediation round-trip verbatim through the server → ApiError → the
|
|
204
|
+
// bespoke CLI mapper in node-worktree.ts, instead of collapsing to a generic
|
|
205
|
+
// status bucket. That mapper exists for exactly this contract, so this is the
|
|
206
|
+
// load-bearing regression to lock.
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
test('`crtr node worktree close` on a node with NO managed worktree round-trips the specific `no_managed_worktree` code + its exact next-hint (not a generic status bucket)', async () => {
|
|
209
|
+
const id = 'wt-close-none';
|
|
210
|
+
createNode({ node_id: id, name: id, created: new Date().toISOString(), cwd: process.cwd(), kind: 'developer', mode: 'base', lifecycle: 'terminal', status: 'active' });
|
|
211
|
+
await assert.rejects(() => runCloseAs(id), (e) => e instanceof InputError &&
|
|
212
|
+
e.payload.error === 'no_managed_worktree' &&
|
|
213
|
+
typeof e.payload.next === 'string' &&
|
|
214
|
+
e.payload.next.includes('Nothing to close'), 'the specific WorktreeError code + next survive the server → ApiError → custom CLI mapper');
|
|
215
|
+
});
|
|
216
|
+
test('`crtr node worktree close` for an UNKNOWN node round-trips the specific `unknown_node` code (a 404 that is NOT flattened to not_found)', async () => {
|
|
217
|
+
await assert.rejects(() => runCloseAs('no-such-node-xyz'), (e) => e instanceof InputError && e.payload.error === 'unknown_node', 'unknown_node keeps its specific code even though it maps to a 404 status');
|
|
218
|
+
});
|
|
@@ -1,34 +1,23 @@
|
|
|
1
|
-
// bridge.ts —
|
|
1
|
+
// bridge.ts — crtrd's WebSocket attach bridge (spec §5, especially §5.3).
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
// `
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// newline-terminated line into the socket. Idempotent teardown, no leaks, one
|
|
10
|
-
// `view.sock` connection per WS (the broker fans out natively).
|
|
3
|
+
// `GET /v1/nodes/{id}/attach` relays one remote WebSocket to one node broker
|
|
4
|
+
// `view.sock`. The bridge never interprets frames: each complete broker frame
|
|
5
|
+
// becomes one WebSocket text message (bounded by `FrameDecoder(CLIENT_READ_CAPS)`),
|
|
6
|
+
// and each WebSocket message becomes one newline-terminated socket line.
|
|
7
|
+
// Teardown is idempotent, and each WebSocket owns one `view.sock` connection;
|
|
8
|
+
// the broker fans out to its clients natively.
|
|
11
9
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
// boot fault) or the socket never becomes listenable, the upgrade is REFUSED with
|
|
20
|
-
// 409 and the WS is never opened. With revive opted out on a dormant node, the
|
|
21
|
-
// socket can't stream, so the upgrade is likewise refused 409 (spec §5.3's named
|
|
22
|
-
// asymmetry — the POST-local path returns a possibly-dead path instead). ALL
|
|
23
|
-
// pre-upgrade refusals write a plain HTTP error response to the raw socket and
|
|
24
|
-
// destroy it; only post-upgrade faults use WS close codes (1008/1009/1011).
|
|
10
|
+
// Attach implies revive. Before opening WebSocket, the upgrade handler calls
|
|
11
|
+
// `reviveNode(id, { resume: true })` unless `?revive=0` or
|
|
12
|
+
// `X-Crtr-Attach-Revive: 0` opts out, then waits for `view.sock` to become
|
|
13
|
+
// listenable. A failed revive or an unready socket refuses the upgrade with 409.
|
|
14
|
+
// With revive opted out, a dormant node also refuses with 409. Pre-upgrade
|
|
15
|
+
// refusals send a plain HTTP error and destroy the raw socket; post-upgrade
|
|
16
|
+
// faults use WebSocket close codes (1008/1009/1011).
|
|
25
17
|
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
// `reviveNode()` (spec §5.3), the canonical broker launcher; the relay itself
|
|
30
|
-
// launches nothing. The sole direct canvas write is a relay fault record when the
|
|
31
|
-
// broker socket fails.
|
|
18
|
+
// Once open, the bridge only relays sockets. It never touches SessionManager,
|
|
19
|
+
// spawns `pi --session`, or writes a `.jsonl`; `reviveNode()` is its sole engine
|
|
20
|
+
// launch path. It records a fault only when the broker socket fails.
|
|
32
21
|
import { createConnection } from 'node:net';
|
|
33
22
|
import { WebSocketServer } from 'ws';
|
|
34
23
|
import { isSafeNodeId, viewSocketPath } from '../../core/canvas/paths.js';
|
|
@@ -37,12 +26,12 @@ import { BROKER_READ_CAPS, CLIENT_READ_CAPS, FrameDecoder, FrameOverflowError, }
|
|
|
37
26
|
import { classify } from '../../core/fault-classifier.js';
|
|
38
27
|
import { clearFault, recordFault } from '../../core/runtime/fault.js';
|
|
39
28
|
import { reviveNode } from '../../core/runtime/revive.js';
|
|
40
|
-
import { waitForBrokerViewSocket } from '../../core/runtime/
|
|
29
|
+
import { probeViewSocket, waitForBrokerViewSocket } from '../../core/runtime/view-socket.js';
|
|
41
30
|
/** Our own noServer WS server: A-9 routes matched attach upgrades to
|
|
42
31
|
* {@link handleAttachUpgrade}, which performs the handshake through this. Bounds
|
|
43
32
|
* the INBOUND remote→broker path to the broker's OWN read cap (not the generous
|
|
44
|
-
* client cap) so a remote peer
|
|
45
|
-
*
|
|
33
|
+
* client cap) so a remote peer cannot buffer 256MiB before the broker's 24MiB
|
|
34
|
+
* decoder rejects the message. */
|
|
46
35
|
const wss = new WebSocketServer({ noServer: true, maxPayload: BROKER_READ_CAPS.maxLineBytes });
|
|
47
36
|
/** A WS close reason is capped at 123 UTF-8 bytes by the protocol. */
|
|
48
37
|
function clampReason(reason) {
|
|
@@ -84,35 +73,6 @@ function reviveOptedOut(req) {
|
|
|
84
73
|
const value = Array.isArray(header) ? header[0] : header;
|
|
85
74
|
return value === '0';
|
|
86
75
|
}
|
|
87
|
-
/** Single-shot connect probe: resolves true only if the broker's `view.sock`
|
|
88
|
-
* accepts a connection right now (a dormant node's socket refuses/absent →
|
|
89
|
-
* false). Used for the revive-opted-out dormant-refusal path, where a bounded
|
|
90
|
-
* retry loop would be wrong — we want a decisive is-it-live-NOW answer, not a
|
|
91
|
-
* wait. (placement's `probeBrokerViewSocket` is not exported.) */
|
|
92
|
-
function probeViewSocketOnce(sockPath, timeoutMs = 250) {
|
|
93
|
-
return new Promise((resolve) => {
|
|
94
|
-
let done = false;
|
|
95
|
-
let socket = null;
|
|
96
|
-
const finish = (ok) => {
|
|
97
|
-
if (done)
|
|
98
|
-
return;
|
|
99
|
-
done = true;
|
|
100
|
-
if (socket !== null)
|
|
101
|
-
socket.destroy();
|
|
102
|
-
resolve(ok);
|
|
103
|
-
};
|
|
104
|
-
try {
|
|
105
|
-
socket = createConnection(sockPath);
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
finish(false);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
socket.once('connect', () => finish(true));
|
|
112
|
-
socket.once('error', () => finish(false));
|
|
113
|
-
socket.setTimeout(timeoutMs, () => finish(false));
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
76
|
/** Relay one remote WS ⇄ one node broker `view.sock`. Opens the socket on
|
|
117
77
|
* connect; forwards each complete frame socket→WS (bounded decode, one WS
|
|
118
78
|
* message per frame) and re-frames each WS message WS→socket (trailing
|
|
@@ -120,8 +80,7 @@ function probeViewSocketOnce(sockPath, timeoutMs = 250) {
|
|
|
120
80
|
* (it only splits/joins the newline framing). Closes the WS on socket
|
|
121
81
|
* gone/no-broker, destroys the socket on WS close; idempotent teardown, no
|
|
122
82
|
* leaks. Validates the node id first (path-safety + existence) as belt-and-
|
|
123
|
-
* suspenders — the upgrade handler already guarded both.
|
|
124
|
-
* `bridgeConnection` from `clients/web/server.ts`. */
|
|
83
|
+
* suspenders — the upgrade handler already guarded both. */
|
|
125
84
|
function bridgeConnection(ws, nodeId) {
|
|
126
85
|
if (!isSafeNodeId(nodeId)) {
|
|
127
86
|
try {
|
|
@@ -141,12 +100,12 @@ function bridgeConnection(ws, nodeId) {
|
|
|
141
100
|
}
|
|
142
101
|
return;
|
|
143
102
|
}
|
|
144
|
-
clearFault(nodeId, { link: '
|
|
103
|
+
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
145
104
|
const sockPath = viewSocketPath(nodeId);
|
|
146
105
|
const socket = createConnection(sockPath);
|
|
147
106
|
const decoder = new FrameDecoder(CLIENT_READ_CAPS);
|
|
148
107
|
let closed = false;
|
|
149
|
-
let
|
|
108
|
+
let viewerFaultRecorded = false;
|
|
150
109
|
socket.on('connect', () => {
|
|
151
110
|
clearFault(nodeId, { link: 'relay↔broker' });
|
|
152
111
|
});
|
|
@@ -211,38 +170,38 @@ function bridgeConnection(ws, nodeId) {
|
|
|
211
170
|
const reasonText = reason.toString('utf8');
|
|
212
171
|
if (closed) {
|
|
213
172
|
if (code === 1000)
|
|
214
|
-
clearFault(nodeId, { link: '
|
|
173
|
+
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
215
174
|
return;
|
|
216
175
|
}
|
|
217
176
|
if (code === 1000) {
|
|
218
|
-
clearFault(nodeId, { link: '
|
|
177
|
+
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
219
178
|
}
|
|
220
|
-
else if (!
|
|
221
|
-
|
|
222
|
-
const classification = classify('
|
|
179
|
+
else if (!viewerFaultRecorded) {
|
|
180
|
+
viewerFaultRecorded = true;
|
|
181
|
+
const classification = classify('viewer↔crtrd', { code, reason: reasonText });
|
|
223
182
|
recordFault(nodeId, {
|
|
224
|
-
link: '
|
|
225
|
-
op: '
|
|
183
|
+
link: 'viewer↔crtrd',
|
|
184
|
+
op: 'remote attach websocket',
|
|
226
185
|
kind: classification.kind,
|
|
227
186
|
retry: { disposition: 'manual' },
|
|
228
|
-
message: reasonText || `
|
|
187
|
+
message: reasonText || `remote attach closed (${code})`,
|
|
229
188
|
});
|
|
230
189
|
}
|
|
231
|
-
teardown(code, reasonText || `
|
|
190
|
+
teardown(code, reasonText || `remote attach closed (${code})`);
|
|
232
191
|
});
|
|
233
192
|
ws.on('error', () => {
|
|
234
|
-
if (!
|
|
235
|
-
|
|
236
|
-
const classification = classify('
|
|
193
|
+
if (!viewerFaultRecorded) {
|
|
194
|
+
viewerFaultRecorded = true;
|
|
195
|
+
const classification = classify('viewer↔crtrd', { code: 1006, reason: 'remote attach websocket error' });
|
|
237
196
|
recordFault(nodeId, {
|
|
238
|
-
link: '
|
|
239
|
-
op: '
|
|
197
|
+
link: 'viewer↔crtrd',
|
|
198
|
+
op: 'remote attach websocket',
|
|
240
199
|
kind: classification.kind,
|
|
241
200
|
retry: { disposition: 'manual' },
|
|
242
|
-
message: '
|
|
201
|
+
message: 'remote attach websocket error',
|
|
243
202
|
});
|
|
244
203
|
}
|
|
245
|
-
teardown(1011, '
|
|
204
|
+
teardown(1011, 'remote attach websocket error');
|
|
246
205
|
});
|
|
247
206
|
// WS → socket: re-frame each message as one newline-terminated JSON line.
|
|
248
207
|
// VERBATIM (no parse) — the broker validates and bounds its own reads.
|
|
@@ -304,7 +263,7 @@ export async function handleAttachUpgrade(req, socket, head, nodeId) {
|
|
|
304
263
|
// (3) Revive opted out: the socket must already be live. A dormant node's
|
|
305
264
|
// socket can't stream, so refuse 409 rather than open a WS that would
|
|
306
265
|
// immediately 1011 (spec §5.3 named asymmetry).
|
|
307
|
-
if (!(await
|
|
266
|
+
if (!(await probeViewSocket(viewSocketPath(nodeId), 250))) {
|
|
308
267
|
refuseUpgrade(socket, 409, 'Conflict', 'node_dormant', `node ${nodeId} is dormant and revive was opted out (?revive=0)`);
|
|
309
268
|
return;
|
|
310
269
|
}
|