@north-light/crouter 0.3.173 → 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} +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/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
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// return is only a handoff. Exact cursor persistence at agent_settled is the
|
|
6
6
|
// durable boundary; an uncommitted process exit is recovered by rereading from
|
|
7
7
|
// the unchanged cursor.
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { coalesceBrokerInbox, readBrokerCanceledEntryIds, readBrokerCursor, readBrokerInboxSince, } from '../core/runtime/broker/inbox.js';
|
|
9
|
+
import { advanceBrokerInboxCursor, brokerExtensionState } from '../core/runtime/broker/daemon-ops.js';
|
|
10
10
|
import { emitEvent } from '../core/events/emit.js';
|
|
11
11
|
import { errorClassFromError } from '../core/events/errors.js';
|
|
12
12
|
import { operationIdContext } from '../core/events/operation-id.js';
|
|
@@ -14,8 +14,6 @@ import { readSituationalContext, SITUATIONAL_CONTEXT_CUSTOM_TYPE } from '../core
|
|
|
14
14
|
const DEFAULT_TICK_MS = 800;
|
|
15
15
|
const DEFAULT_DEBOUNCE_MS = 1000;
|
|
16
16
|
const MAX_PENDING_HANDOFFS = 64;
|
|
17
|
-
const REPLAY_RESERVED_HANDOFFS = 2;
|
|
18
|
-
const MAX_ORDINARY_HANDOFFS = MAX_PENDING_HANDOFFS - REPLAY_RESERVED_HANDOFFS;
|
|
19
17
|
const MAX_SOURCE_OPERATION_IDS = 16;
|
|
20
18
|
let currentWatcher;
|
|
21
19
|
let nextGeneration = 0;
|
|
@@ -181,12 +179,13 @@ class CanvasInboxWatcher {
|
|
|
181
179
|
buffer = [];
|
|
182
180
|
lastArrival = 0;
|
|
183
181
|
pendingHandoffs = [];
|
|
184
|
-
|
|
182
|
+
pendingCommit;
|
|
185
183
|
seeded = false;
|
|
186
184
|
disposed = false;
|
|
187
185
|
disposalReason;
|
|
188
186
|
fatalError;
|
|
189
187
|
fatalEscaped = false;
|
|
188
|
+
reportNodes = new Map();
|
|
190
189
|
constructor(pi, cadence, generation) {
|
|
191
190
|
this.pi = pi;
|
|
192
191
|
this.cadence = cadence;
|
|
@@ -212,6 +211,7 @@ class CanvasInboxWatcher {
|
|
|
212
211
|
return;
|
|
213
212
|
this.captureCtx(event, ctx);
|
|
214
213
|
this.arm();
|
|
214
|
+
void this.refreshReportNodes(currentNodeId());
|
|
215
215
|
});
|
|
216
216
|
this.pi.on('turn_end', capture);
|
|
217
217
|
this.pi.on('agent_start', (event, ctx) => {
|
|
@@ -227,7 +227,7 @@ class CanvasInboxWatcher {
|
|
|
227
227
|
this.streaming = false;
|
|
228
228
|
// agent_end can precede retry, compaction, or queued continuation.
|
|
229
229
|
});
|
|
230
|
-
this.pi.on('agent_settled', (event, ctx) => {
|
|
230
|
+
this.pi.on('agent_settled', async (event, ctx) => {
|
|
231
231
|
if (!this.canMutate())
|
|
232
232
|
return;
|
|
233
233
|
this.captureCtx(event, ctx);
|
|
@@ -236,22 +236,19 @@ class CanvasInboxWatcher {
|
|
|
236
236
|
return;
|
|
237
237
|
try {
|
|
238
238
|
this.assertNodeOwnership(nodeId, 'settle');
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
// not veto the commit here.
|
|
247
|
-
this.settle(nodeId, ctx, false, false);
|
|
248
|
-
}
|
|
239
|
+
// agent_settled is the authoritative durable boundary: Pi guarantees
|
|
240
|
+
// every queued continuation has drained, so hasPendingMessages() must
|
|
241
|
+
// not veto the commit here. Await crtrd before changing the in-memory
|
|
242
|
+
// durable cursor; a failed commit remains replayable after process exit.
|
|
243
|
+
const result = await this.settle(nodeId, ctx, false);
|
|
244
|
+
if (result === 'refresh_held')
|
|
245
|
+
this.dispose('refresh', false);
|
|
249
246
|
}
|
|
250
247
|
catch (error) {
|
|
251
248
|
this.dispose('shutdown', false, undefined, { error, stage: 'settle' });
|
|
252
249
|
}
|
|
253
250
|
});
|
|
254
|
-
this.pi.on('session_shutdown', (event) => {
|
|
251
|
+
this.pi.on('session_shutdown', async (event) => {
|
|
255
252
|
if (!this.canMutate())
|
|
256
253
|
return;
|
|
257
254
|
let runtimeReason;
|
|
@@ -273,12 +270,10 @@ class CanvasInboxWatcher {
|
|
|
273
270
|
});
|
|
274
271
|
}
|
|
275
272
|
try {
|
|
276
|
-
const nodeId = currentNodeId();
|
|
277
|
-
const refreshHeld = nodeId !== undefined && this.readRefreshIntentOrFatal(nodeId, 'settle');
|
|
278
273
|
// This is the graceful fallback when no agent_settled fired before exit.
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
this.
|
|
274
|
+
// crtrd rejects a cursor commit for a refresh, preserving every handoff
|
|
275
|
+
// that may have reached this discarded conversation for the next broker.
|
|
276
|
+
await this.disposeAtSettlement(reason, this.lastCtx);
|
|
282
277
|
}
|
|
283
278
|
catch (error) {
|
|
284
279
|
this.dispose(reason, false, undefined, { error, stage: 'settle' });
|
|
@@ -290,6 +285,19 @@ class CanvasInboxWatcher {
|
|
|
290
285
|
* or any other re-emission all land here). Called only from the
|
|
291
286
|
* `session_start` handler above, so it never runs before Pi's action
|
|
292
287
|
* methods are bound. */
|
|
288
|
+
async refreshReportNodes(nodeId) {
|
|
289
|
+
if (nodeId === undefined)
|
|
290
|
+
return;
|
|
291
|
+
try {
|
|
292
|
+
const state = await brokerExtensionState(nodeId);
|
|
293
|
+
if (!this.canMutate())
|
|
294
|
+
return;
|
|
295
|
+
this.reportNodes = new Map(state.report_nodes.map((node) => [node.node_id, node]));
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// Report bodies remain canonical pointers until the daemon projection is available.
|
|
299
|
+
}
|
|
300
|
+
}
|
|
293
301
|
arm() {
|
|
294
302
|
if (this.armed)
|
|
295
303
|
return;
|
|
@@ -301,31 +309,41 @@ class CanvasInboxWatcher {
|
|
|
301
309
|
// the normal debounce owns delivery instead of waiting a full tick.
|
|
302
310
|
this.runTick('schedule');
|
|
303
311
|
}
|
|
304
|
-
|
|
305
|
-
|
|
312
|
+
/** Settle the graceful-shutdown fallback before disposing its retry state.
|
|
313
|
+
* The daemon decides whether a refresh preserves the cursor, and this method
|
|
314
|
+
* awaits that decision so a process exit never outruns an accepted commit. */
|
|
315
|
+
async disposeAtSettlement(reason, ctx) {
|
|
316
|
+
const nodeId = currentNodeId();
|
|
317
|
+
if (nodeId === undefined) {
|
|
318
|
+
this.dispose(reason, false);
|
|
306
319
|
return;
|
|
307
|
-
|
|
308
|
-
this.disposalReason = reason;
|
|
309
|
-
this.clearTimer();
|
|
310
|
-
let fatal = fatalDisposal;
|
|
320
|
+
}
|
|
311
321
|
try {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
this.assertNodeOwnership(nodeId, 'settle');
|
|
316
|
-
this.settle(nodeId, settleCtx, refreshHeld, reason !== 'refresh');
|
|
317
|
-
}
|
|
318
|
-
}
|
|
322
|
+
this.assertNodeOwnership(nodeId, 'settle');
|
|
323
|
+
const result = await this.settle(nodeId, ctx, reason !== 'refresh');
|
|
324
|
+
this.dispose(result === 'refresh_held' ? 'refresh' : reason, false);
|
|
319
325
|
}
|
|
320
326
|
catch (error) {
|
|
321
|
-
|
|
327
|
+
this.dispose(reason, false, undefined, { error, stage: 'settle' });
|
|
322
328
|
}
|
|
323
|
-
|
|
324
|
-
|
|
329
|
+
}
|
|
330
|
+
dispose(reason, _atSettleBoundary, _settleCtx, fatalDisposal) {
|
|
331
|
+
if (this.disposed)
|
|
332
|
+
return;
|
|
333
|
+
this.disposed = true;
|
|
334
|
+
this.disposalReason = reason;
|
|
335
|
+
this.clearTimer();
|
|
336
|
+
const fatal = fatalDisposal;
|
|
337
|
+
{
|
|
338
|
+
const abandoned = [
|
|
339
|
+
...(this.pendingCommit?.handoffs ?? []),
|
|
340
|
+
...this.pendingHandoffs.splice(0),
|
|
341
|
+
];
|
|
325
342
|
this.buffer.length = 0;
|
|
326
343
|
this.cursor = undefined;
|
|
327
344
|
this.durableCursor = undefined;
|
|
328
|
-
this.
|
|
345
|
+
this.reportNodes.clear();
|
|
346
|
+
this.pendingCommit = undefined;
|
|
329
347
|
this.nodeId = undefined;
|
|
330
348
|
this.lastCtx = undefined;
|
|
331
349
|
this.lastArrival = 0;
|
|
@@ -367,14 +385,6 @@ class CanvasInboxWatcher {
|
|
|
367
385
|
}
|
|
368
386
|
return !this.streaming;
|
|
369
387
|
}
|
|
370
|
-
readRefreshIntentOrFatal(nodeId, stage) {
|
|
371
|
-
try {
|
|
372
|
-
return getNode(nodeId)?.intent === 'refresh';
|
|
373
|
-
}
|
|
374
|
-
catch (error) {
|
|
375
|
-
this.raiseReadFatal(stage, error);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
388
|
assertNodeOwnership(nodeId, stage) {
|
|
379
389
|
if (!this.seeded || this.nodeId === undefined || this.nodeId === nodeId)
|
|
380
390
|
return;
|
|
@@ -398,12 +408,6 @@ class CanvasInboxWatcher {
|
|
|
398
408
|
raiseReadFatal(stage, error) {
|
|
399
409
|
return this.raiseFatal('inbox.read.failed', `inbox ${stage} state is corrupt`, error, { stage });
|
|
400
410
|
}
|
|
401
|
-
raiseReplayFatal(gate, error) {
|
|
402
|
-
return this.raiseFatal('inbox.replay.load_failed', 'inbox replay range could not be loaded', error, {
|
|
403
|
-
after_entry_id: gate.afterEntryId ?? null,
|
|
404
|
-
through_entry_id: gate.throughEntryId,
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
411
|
raiseSituationalFatal(markerEntryId, error) {
|
|
408
412
|
return this.raiseFatal('inbox.situational_context.missing', 'situational context marker has no readable sidecar', error, {
|
|
409
413
|
entry_id: markerEntryId,
|
|
@@ -471,7 +475,7 @@ class CanvasInboxWatcher {
|
|
|
471
475
|
this.assertNodeOwnership(nodeId, 'poll');
|
|
472
476
|
if (this.seeded)
|
|
473
477
|
return true;
|
|
474
|
-
const initial = this.pollRead(() =>
|
|
478
|
+
const initial = this.pollRead(() => readBrokerCursor(nodeId));
|
|
475
479
|
if (!initial.ok)
|
|
476
480
|
return false;
|
|
477
481
|
this.nodeId = nodeId;
|
|
@@ -484,25 +488,21 @@ class CanvasInboxWatcher {
|
|
|
484
488
|
const nodeId = currentNodeId();
|
|
485
489
|
if (nodeId === undefined || !this.seed(nodeId))
|
|
486
490
|
return;
|
|
487
|
-
if (
|
|
488
|
-
|
|
489
|
-
if (this.replay !== undefined) {
|
|
490
|
-
this.processReplay(nodeId);
|
|
491
|
+
if (this.pendingCommit !== undefined) {
|
|
492
|
+
this.retryPendingCommitOnTick(nodeId);
|
|
491
493
|
return;
|
|
492
494
|
}
|
|
493
|
-
if (this.buffer.length === 0 && this.pendingHandoffs.length >=
|
|
495
|
+
if (this.buffer.length === 0 && this.pendingHandoffs.length >= MAX_PENDING_HANDOFFS)
|
|
494
496
|
return;
|
|
495
497
|
if (this.buffer.length > 0) {
|
|
496
498
|
const plan = this.ordinaryPlan();
|
|
497
|
-
if (plan.sendCount > 0 && this.pendingHandoffs.length + plan.sendCount >
|
|
499
|
+
if (plan.sendCount > 0 && this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
|
|
498
500
|
return;
|
|
499
501
|
}
|
|
500
|
-
const read = this.pollRead(() =>
|
|
502
|
+
const read = this.pollRead(() => readBrokerInboxSince(nodeId, this.cursor));
|
|
501
503
|
if (!read.ok)
|
|
502
504
|
return;
|
|
503
505
|
const newEntries = read.value;
|
|
504
|
-
if ((newEntries.length > 0 || this.buffer.length > 0) && this.readRefreshIntentOrFatal(nodeId, 'poll'))
|
|
505
|
-
return;
|
|
506
506
|
if (newEntries.length > 0) {
|
|
507
507
|
this.cursor = newEntries.at(-1).entry_id;
|
|
508
508
|
this.buffer.push(...newEntries);
|
|
@@ -516,11 +516,10 @@ class CanvasInboxWatcher {
|
|
|
516
516
|
// Interrupt-canceled entries (a human Esc racing a not-yet-injected send —
|
|
517
517
|
// `POST /v1/nodes/{id}/interrupt`) are excluded from BOTH channels. Read
|
|
518
518
|
// fresh each plan build: the cancel can land AFTER the entry was buffered.
|
|
519
|
-
//
|
|
520
|
-
//
|
|
521
|
-
//
|
|
522
|
-
|
|
523
|
-
const canceled = this.nodeId === undefined ? undefined : readCanceledEntryIds(this.nodeId);
|
|
519
|
+
// Skipped entries are never handed off; the durable cursor covers them
|
|
520
|
+
// positionally when a later entry settles (or they are re-filtered after a
|
|
521
|
+
// restart).
|
|
522
|
+
const canceled = this.nodeId === undefined ? undefined : readBrokerCanceledEntryIds(this.nodeId);
|
|
524
523
|
const live = canceled === undefined || canceled.size === 0
|
|
525
524
|
? entries
|
|
526
525
|
: entries.filter((entry) => !canceled.has(entry.entry_id));
|
|
@@ -580,7 +579,7 @@ class CanvasInboxWatcher {
|
|
|
580
579
|
}
|
|
581
580
|
digest(entries, stage) {
|
|
582
581
|
try {
|
|
583
|
-
return
|
|
582
|
+
return coalesceBrokerInbox(entries, this.reportNodes);
|
|
584
583
|
}
|
|
585
584
|
catch (error) {
|
|
586
585
|
this.raiseReadFatal(stage, error);
|
|
@@ -715,7 +714,7 @@ class CanvasInboxWatcher {
|
|
|
715
714
|
const plan = this.ordinaryPlan();
|
|
716
715
|
if (plan.deferredHold)
|
|
717
716
|
return 'held';
|
|
718
|
-
if (this.pendingHandoffs.length + plan.sendCount >
|
|
717
|
+
if (this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
|
|
719
718
|
return 'capacity-blocked';
|
|
720
719
|
const batch = [...this.buffer];
|
|
721
720
|
const execution = this.executePlan(nodeId, plan, 'poll');
|
|
@@ -725,45 +724,6 @@ class CanvasInboxWatcher {
|
|
|
725
724
|
this.requeueFromBatch(batch, execution.retryEntryIds);
|
|
726
725
|
return 'attempted';
|
|
727
726
|
}
|
|
728
|
-
processReplay(nodeId) {
|
|
729
|
-
const gate = this.replay;
|
|
730
|
-
if (gate === undefined)
|
|
731
|
-
return;
|
|
732
|
-
if (gate.entries === undefined) {
|
|
733
|
-
if (gate.attempted) {
|
|
734
|
-
this.raiseReplayFatal(gate, new Error('replay range was already attempted without retained entries'));
|
|
735
|
-
}
|
|
736
|
-
gate.attempted = true;
|
|
737
|
-
let entries;
|
|
738
|
-
try {
|
|
739
|
-
entries = readInboxRange(nodeId, gate.afterEntryId, gate.throughEntryId);
|
|
740
|
-
}
|
|
741
|
-
catch (error) {
|
|
742
|
-
this.raiseReplayFatal(gate, error);
|
|
743
|
-
}
|
|
744
|
-
if (entries.length === 0 || entries.at(-1).entry_id !== gate.throughEntryId) {
|
|
745
|
-
this.raiseReplayFatal(gate, new Error('replay range did not retain its inclusive target'));
|
|
746
|
-
}
|
|
747
|
-
gate.entries = entries;
|
|
748
|
-
}
|
|
749
|
-
const entries = gate.entries;
|
|
750
|
-
const plan = this.buildPlan(entries);
|
|
751
|
-
if (plan.hiddenEntries.length === 0 && plan.visibleEntries.length === 0) {
|
|
752
|
-
if (this.replay === gate)
|
|
753
|
-
this.replay = undefined;
|
|
754
|
-
return;
|
|
755
|
-
}
|
|
756
|
-
if (plan.deferredHold)
|
|
757
|
-
return;
|
|
758
|
-
if (this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
|
|
759
|
-
return;
|
|
760
|
-
const execution = this.executePlan(nodeId, plan, 'poll');
|
|
761
|
-
if (execution.inactive)
|
|
762
|
-
return;
|
|
763
|
-
if (this.canMutate() && this.replay === gate && this.replayCoverageComplete(entries)) {
|
|
764
|
-
this.replay = undefined;
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
727
|
coveredEntryIds(channel) {
|
|
768
728
|
const covered = new Set();
|
|
769
729
|
for (const handoff of this.pendingHandoffs) {
|
|
@@ -774,13 +734,54 @@ class CanvasInboxWatcher {
|
|
|
774
734
|
}
|
|
775
735
|
return covered;
|
|
776
736
|
}
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
737
|
+
retryPendingCommitOnTick(nodeId) {
|
|
738
|
+
void this.retryPendingCommit(nodeId).then((result) => {
|
|
739
|
+
if (result === 'refresh_held' && this.canMutate())
|
|
740
|
+
this.dispose('refresh', false);
|
|
741
|
+
}).catch((error) => {
|
|
742
|
+
if (this.canMutate())
|
|
743
|
+
this.dispose('shutdown', false, undefined, { error, stage: 'settle' });
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
retryPendingCommit(nodeId) {
|
|
747
|
+
const pending = this.pendingCommit;
|
|
748
|
+
if (pending === undefined)
|
|
749
|
+
return Promise.resolve('settled');
|
|
750
|
+
if (pending.attempt !== undefined)
|
|
751
|
+
return pending.attempt;
|
|
752
|
+
const attempt = this.attemptPendingCommit(nodeId, pending).finally(() => {
|
|
753
|
+
if (pending.attempt === attempt)
|
|
754
|
+
pending.attempt = undefined;
|
|
755
|
+
});
|
|
756
|
+
pending.attempt = attempt;
|
|
757
|
+
return attempt;
|
|
780
758
|
}
|
|
781
|
-
|
|
782
|
-
|
|
759
|
+
async attemptPendingCommit(nodeId, pending) {
|
|
760
|
+
try {
|
|
761
|
+
const directive = await advanceBrokerInboxCursor(nodeId, {
|
|
762
|
+
throughEntryId: pending.throughEntryId,
|
|
763
|
+
brokerPid: process.pid,
|
|
764
|
+
});
|
|
765
|
+
if (directive.action === 'hold_refresh')
|
|
766
|
+
return 'refresh_held';
|
|
767
|
+
}
|
|
768
|
+
catch (error) {
|
|
769
|
+
if (this.pendingCommit === pending) {
|
|
770
|
+
for (const handoff of pending.handoffs) {
|
|
771
|
+
emitDeliveryFailure(handoff.operationId, handoff, 'cursor_commit', error);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
783
774
|
return 'held';
|
|
775
|
+
}
|
|
776
|
+
if (this.pendingCommit !== pending)
|
|
777
|
+
return 'settled';
|
|
778
|
+
this.durableCursor = pending.throughEntryId;
|
|
779
|
+
this.pendingCommit = undefined;
|
|
780
|
+
for (const handoff of pending.handoffs)
|
|
781
|
+
emitDeliveryCompleted(handoff);
|
|
782
|
+
return 'settled';
|
|
783
|
+
}
|
|
784
|
+
async settle(nodeId, ctx, holdPendingMessages) {
|
|
784
785
|
if (holdPendingMessages) {
|
|
785
786
|
try {
|
|
786
787
|
if (ctx?.hasPendingMessages?.() === true)
|
|
@@ -790,8 +791,8 @@ class CanvasInboxWatcher {
|
|
|
790
791
|
// A missing context signal does not invent a pending-message hold.
|
|
791
792
|
}
|
|
792
793
|
}
|
|
793
|
-
if (this.
|
|
794
|
-
return
|
|
794
|
+
if (this.pendingCommit !== undefined)
|
|
795
|
+
return this.retryPendingCommit(nodeId);
|
|
795
796
|
if (this.pendingHandoffs.length === 0)
|
|
796
797
|
return 'settled';
|
|
797
798
|
const physical = this.readPhysicalSettlementState(nodeId);
|
|
@@ -811,33 +812,17 @@ class CanvasInboxWatcher {
|
|
|
811
812
|
if (physical.throughIndexes.get(handoff) > physical.throughIndexes.get(target))
|
|
812
813
|
target = handoff;
|
|
813
814
|
}
|
|
814
|
-
const
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
const failed = this.detachPending((handoff) => eligibleSet.has(handoff));
|
|
821
|
-
this.replay = {
|
|
822
|
-
afterEntryId: this.durableCursor,
|
|
823
|
-
throughEntryId: target.throughEntryId,
|
|
824
|
-
attempted: false,
|
|
825
|
-
};
|
|
826
|
-
for (const handoff of failed) {
|
|
827
|
-
emitDeliveryFailure(handoff.operationId, handoff, 'cursor_commit', error);
|
|
828
|
-
}
|
|
829
|
-
return 'settled';
|
|
830
|
-
}
|
|
831
|
-
this.durableCursor = target.throughEntryId;
|
|
832
|
-
const completed = this.detachPending((handoff) => physical.throughIndexes.get(handoff) <= targetIndex);
|
|
833
|
-
for (const handoff of completed)
|
|
834
|
-
emitDeliveryCompleted(handoff);
|
|
835
|
-
return 'settled';
|
|
815
|
+
const committing = new Set(eligible);
|
|
816
|
+
this.pendingCommit = {
|
|
817
|
+
handoffs: this.detachPending((handoff) => committing.has(handoff)),
|
|
818
|
+
throughEntryId: target.throughEntryId,
|
|
819
|
+
};
|
|
820
|
+
return this.retryPendingCommit(nodeId);
|
|
836
821
|
}
|
|
837
822
|
readPhysicalSettlementState(nodeId) {
|
|
838
823
|
let entries;
|
|
839
824
|
try {
|
|
840
|
-
entries =
|
|
825
|
+
entries = readBrokerInboxSince(nodeId);
|
|
841
826
|
}
|
|
842
827
|
catch (error) {
|
|
843
828
|
this.raiseReadFatal('settle', error);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BrokerPassiveEntry } from '../core/runtime/broker/passive.js';
|
|
2
2
|
interface InputEventLike {
|
|
3
3
|
type: 'input';
|
|
4
4
|
text: string;
|
|
@@ -15,13 +15,13 @@ type InputEventResultLike = {
|
|
|
15
15
|
action: 'handled';
|
|
16
16
|
};
|
|
17
17
|
interface PiLike {
|
|
18
|
-
on: (event: 'input', handler: (event: InputEventLike, ctx: any) => InputEventResultLike | void) => void;
|
|
18
|
+
on: (event: 'input', handler: (event: InputEventLike, ctx: any) => InputEventResultLike | void | Promise<InputEventResultLike | void>) => void;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Render drained passive entries (oldest first) into one XML pre-text block.
|
|
22
22
|
* Each accumulated message is its own timestamped `<update>` element.
|
|
23
23
|
*/
|
|
24
|
-
export declare function formatPassive(entries:
|
|
24
|
+
export declare function formatPassive(entries: BrokerPassiveEntry[], reportNodes?: ReadonlyMap<string, unknown>): string;
|
|
25
25
|
/**
|
|
26
26
|
* Register the passive-context drain on `pi`.
|
|
27
27
|
*
|
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
// Plain TS-with-types — no imports from @earendil-works/* so this compiles inside
|
|
20
20
|
// crouter's own tsc build without a dep on the pi packages.
|
|
21
21
|
import { existsSync, readFileSync } from 'node:fs';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
22
|
+
import { brokerExtensionState } from '../core/runtime/broker/daemon-ops.js';
|
|
23
|
+
import { reportPathFromRef } from '../core/runtime/broker-extension-render.js';
|
|
24
|
+
import { drainBrokerPassive } from '../core/runtime/broker/passive.js';
|
|
24
25
|
// Per-entry body cap so a single fat report can't blow the context budget. The
|
|
25
26
|
// full report stays on disk at `ref` if the agent needs more.
|
|
26
27
|
const BODY_CAP = 4_000;
|
|
@@ -37,24 +38,25 @@ function stripFrontmatter(raw) {
|
|
|
37
38
|
}
|
|
38
39
|
/** The content for one accumulated entry: the dereferenced report body when the
|
|
39
40
|
* pointer carries a `ref`, else the entry's own label/data. Capped + trimmed. */
|
|
40
|
-
function entryContent(e) {
|
|
41
|
+
function entryContent(e, reportNodes) {
|
|
41
42
|
if (e.ref !== undefined && e.ref !== '') {
|
|
42
|
-
// Push entries carry a canonical history handle
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
// Push entries carry a canonical history handle. crtrd has already
|
|
44
|
+
// projected the sender set; use that metadata to validate the local path
|
|
45
|
+
// without importing the canvas history resolver. Direct-message spill refs
|
|
46
|
+
// remain absolute filesystem paths and keep their existing behavior.
|
|
47
|
+
const reportPath = reportPathFromRef(e.ref, reportNodes);
|
|
48
|
+
if (reportPath !== null) {
|
|
49
|
+
try {
|
|
50
|
+
const body = stripFrontmatter(readFileSync(reportPath, 'utf8')).trim();
|
|
49
51
|
if (body !== '') {
|
|
50
52
|
return body.length > BODY_CAP
|
|
51
53
|
? `${body.slice(0, BODY_CAP)}\n… (truncated; read the full report with \`crtr canvas history read ${e.ref}\`)`
|
|
52
54
|
: body;
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
catch {
|
|
58
|
+
/* fall through to the absolute spill-file path */
|
|
59
|
+
}
|
|
58
60
|
}
|
|
59
61
|
if (existsSync(e.ref)) {
|
|
60
62
|
try {
|
|
@@ -87,13 +89,13 @@ function attr(s) {
|
|
|
87
89
|
* Render drained passive entries (oldest first) into one XML pre-text block.
|
|
88
90
|
* Each accumulated message is its own timestamped `<update>` element.
|
|
89
91
|
*/
|
|
90
|
-
export function formatPassive(entries) {
|
|
92
|
+
export function formatPassive(entries, reportNodes = new Map()) {
|
|
91
93
|
const blocks = entries
|
|
92
94
|
.map((e) => {
|
|
93
95
|
const from = attr(e.from ?? 'system');
|
|
94
96
|
const refAttr = e.ref !== undefined && e.ref !== '' ? ` ref="${attr(e.ref)}"` : '';
|
|
95
97
|
return (`<update from="${from}" kind="${attr(e.kind)}" at="${attr(e.ts)}"${refAttr}>\n` +
|
|
96
|
-
`${entryContent(e)}\n` +
|
|
98
|
+
`${entryContent(e, reportNodes)}\n` +
|
|
97
99
|
`</update>`);
|
|
98
100
|
})
|
|
99
101
|
.join('\n');
|
|
@@ -113,15 +115,17 @@ export function formatPassive(entries) {
|
|
|
113
115
|
* is the whole extension: drain on every message, prepend when non-empty.
|
|
114
116
|
*/
|
|
115
117
|
export function registerCanvasPassiveContext(pi) {
|
|
116
|
-
pi.on('input', (event) => {
|
|
118
|
+
pi.on('input', async (event) => {
|
|
117
119
|
try {
|
|
118
120
|
const nodeId = process.env['CRTR_NODE_ID'];
|
|
119
121
|
if (nodeId === undefined || nodeId.trim() === '')
|
|
120
122
|
return; // not a canvas node
|
|
121
|
-
const drained =
|
|
123
|
+
const drained = drainBrokerPassive(nodeId);
|
|
122
124
|
if (drained.length === 0)
|
|
123
125
|
return; // nothing accumulated → leave the message as-is
|
|
124
|
-
const
|
|
126
|
+
const state = await brokerExtensionState(nodeId);
|
|
127
|
+
const reportNodes = new Map(state.report_nodes.map((node) => [node.node_id, node]));
|
|
128
|
+
const preText = formatPassive(drained, reportNodes);
|
|
125
129
|
const text = event.text.trim() === '' ? preText : `${preText}\n\n${event.text}`;
|
|
126
130
|
return { action: 'transform', text, images: event.images };
|
|
127
131
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { regenerateAndPersistName } from '../core/runtime/naming-persist.js';
|
|
2
1
|
import { generateRecap } from '../core/runtime/recap.js';
|
|
3
2
|
interface TextContentLike {
|
|
4
3
|
type: string;
|
|
@@ -44,11 +43,12 @@ interface PiLike {
|
|
|
44
43
|
getSessionName?(): string | undefined;
|
|
45
44
|
setSessionName?(name: string): void;
|
|
46
45
|
}
|
|
46
|
+
type NameRegenerator = (nodeId: string, conversation: string, isStillAutomatic: () => boolean, onNamed?: (editorLabel: string) => void) => void;
|
|
47
47
|
/**
|
|
48
48
|
* Register the inactivity-recap chrome on `pi`.
|
|
49
49
|
*
|
|
50
50
|
* Returns immediately (inert) when CRTR_NODE_ID is absent — a plain pi session
|
|
51
51
|
* or legacy job agent loads it as a no-op.
|
|
52
52
|
*/
|
|
53
|
-
export declare function registerCanvasRecap(pi: PiLike, recapGenerator?: typeof generateRecap, nameRegenerator?:
|
|
53
|
+
export declare function registerCanvasRecap(pi: PiLike, recapGenerator?: typeof generateRecap, nameRegenerator?: NameRegenerator): void;
|
|
54
54
|
export default registerCanvasRecap;
|