@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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Broker view-socket readiness — one connect probe and its distinct wait policies.
|
|
2
|
+
//
|
|
3
|
+
// A successful Unix-socket connect proves a broker is listening; socket-file
|
|
4
|
+
// existence alone can be stale after a broker exit. This stays canvas-db-free so
|
|
5
|
+
// command callers can wait without reaching a runtime placement owner.
|
|
6
|
+
import { createConnection } from 'node:net';
|
|
7
|
+
import { viewSocketPath } from '../canvas/paths.js';
|
|
8
|
+
const BROKER_FOCUS_SOCKET_WAIT_MS = 30_000;
|
|
9
|
+
const BROKER_FOCUS_SOCKET_RETRY_MS = 100;
|
|
10
|
+
/** The shared cold-start deadline (ms) a freshly-opened viewer waits for its
|
|
11
|
+
* broker's view.sock — one source of truth for CRTR_ATTACH_WAIT_MS. */
|
|
12
|
+
export const BROKER_VIEW_SOCKET_WAIT_MS = BROKER_FOCUS_SOCKET_WAIT_MS;
|
|
13
|
+
function sleep(ms) {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
setTimeout(resolve, ms);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** Resolve true exactly when `sockPath` accepts a connection within `timeoutMs`. */
|
|
19
|
+
export function probeViewSocket(sockPath, timeoutMs) {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
let settled = false;
|
|
22
|
+
let socket = null;
|
|
23
|
+
const finish = (ok) => {
|
|
24
|
+
if (settled)
|
|
25
|
+
return;
|
|
26
|
+
settled = true;
|
|
27
|
+
if (socket !== null)
|
|
28
|
+
socket.destroy();
|
|
29
|
+
resolve(ok);
|
|
30
|
+
};
|
|
31
|
+
try {
|
|
32
|
+
socket = createConnection(sockPath);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
finish(false);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
socket.once('connect', () => finish(true));
|
|
39
|
+
socket.once('error', () => finish(false));
|
|
40
|
+
socket.setTimeout(timeoutMs, () => finish(false));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/** Bounded retry for the revive leaf, which has no launch handle to observe. */
|
|
44
|
+
export async function waitForViewSocketReady(nodeId) {
|
|
45
|
+
const sockPath = viewSocketPath(nodeId);
|
|
46
|
+
const deadline = Date.now() + BROKER_FOCUS_SOCKET_WAIT_MS;
|
|
47
|
+
while (Date.now() <= deadline) {
|
|
48
|
+
if (await probeViewSocket(sockPath, BROKER_FOCUS_SOCKET_RETRY_MS))
|
|
49
|
+
return true;
|
|
50
|
+
await sleep(BROKER_FOCUS_SOCKET_RETRY_MS);
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/** Wait for a launched broker's view.sock, failing fast when its launch handle
|
|
55
|
+
* exits. `exited` remains optional for existing callers that only need the same
|
|
56
|
+
* bounded readiness deadline without a handle. */
|
|
57
|
+
export async function waitForBrokerViewSocket(nodeId, exited) {
|
|
58
|
+
const sockPath = viewSocketPath(nodeId);
|
|
59
|
+
const deadline = Date.now() + BROKER_FOCUS_SOCKET_WAIT_MS;
|
|
60
|
+
const exitSeen = exited?.then(() => 'exit');
|
|
61
|
+
while (Date.now() <= deadline) {
|
|
62
|
+
const remaining = Math.max(0, deadline - Date.now());
|
|
63
|
+
const probe = probeViewSocket(sockPath, Math.min(BROKER_FOCUS_SOCKET_RETRY_MS, remaining))
|
|
64
|
+
.then((ok) => (ok ? 'ready' : 'retry'));
|
|
65
|
+
const outcome = exitSeen === undefined ? await probe : await Promise.race([probe, exitSeen]);
|
|
66
|
+
if (outcome === 'ready')
|
|
67
|
+
return true;
|
|
68
|
+
if (outcome === 'exit')
|
|
69
|
+
return false;
|
|
70
|
+
if (exitSeen !== undefined) {
|
|
71
|
+
const sleptOrExit = await Promise.race([
|
|
72
|
+
sleep(BROKER_FOCUS_SOCKET_RETRY_MS).then(() => 'sleep'),
|
|
73
|
+
exitSeen,
|
|
74
|
+
]);
|
|
75
|
+
if (sleptOrExit === 'exit')
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
await sleep(BROKER_FOCUS_SOCKET_RETRY_MS);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
@@ -36,8 +36,7 @@ export interface SessionState {
|
|
|
36
36
|
* a welcome is a COMPLETE catch-up, so a welcome naming none clears it.
|
|
37
37
|
* (The terminal viewer does not read this field: its overlay is owned by
|
|
38
38
|
* `InputController`, which holds a live TUI handle rather than data. The field
|
|
39
|
-
*
|
|
40
|
-
* web SPA renders straight off it.) */
|
|
39
|
+
* remains session state because it is derived solely from broker frames.) */
|
|
41
40
|
dialog: RpcExtensionUIRequest | null;
|
|
42
41
|
}
|
|
43
42
|
export declare function initialSessionState(role?: ClientRole): SessionState;
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
// session-state.ts — the ONE model of "what the broker has told this viewer".
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// `isStreaming` on `agent_settled` (the frozen-`Working…` fix) and the web never
|
|
7
|
-
// did. One reducer, two heads.
|
|
3
|
+
// Terminal attach folds every broker-derived fact through this reducer instead
|
|
4
|
+
// of patching mutable state in individual frame handlers. One reducer keeps the
|
|
5
|
+
// protocol projection coherent across every terminal consumer.
|
|
8
6
|
//
|
|
9
7
|
// The cut line is mechanical:
|
|
10
8
|
//
|
|
11
9
|
// SESSION state = anything derived SOLELY from what the broker sent.
|
|
12
|
-
// VIEWER state = anything derived from local input or this terminal
|
|
10
|
+
// VIEWER state = anything derived from local input or this terminal viewer.
|
|
13
11
|
//
|
|
14
12
|
// So `role` belongs here even though it differs per viewer (the broker fixes it
|
|
15
13
|
// from this viewer's `hello` and never changes it — "identical across viewers"
|
|
16
14
|
// would get it wrong), while a transient notice, a connection phase, a
|
|
17
15
|
// correlation id this viewer minted, and the transcript
|
|
18
16
|
// RENDERING all stay with the viewer. The transcript itself is deliberately out
|
|
19
|
-
// of scope
|
|
20
|
-
// wholesale, and that difference is legitimate.
|
|
17
|
+
// of scope because the terminal accumulates it into scrollback.
|
|
21
18
|
//
|
|
22
19
|
// `reduce` is pure and total over `BrokerToClient`: unknown/irrelevant frames
|
|
23
20
|
// return the SAME object reference, so a viewer can drive its repaints off
|
package/dist/core/spawn.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* nodes of human-in-the-loop. */
|
|
6
6
|
export declare function isInTmux(): boolean;
|
|
7
7
|
/** Is the canvas tmux SERVER reachable? The canvas runs on the DEFAULT tmux
|
|
8
|
-
* socket (no -L/-S in core/runtime/tmux.ts), so any `crtr` child — including a
|
|
8
|
+
* socket (no -L/-S in core/runtime/tmux-driver.ts), so any `crtr` child — including a
|
|
9
9
|
* headless-broker child that has deleted its own $TMUX — can split panes into
|
|
10
10
|
* it. The human surface gates on THIS (can I reach the server to open a pane
|
|
11
11
|
* the user is watching?), not on the caller's $TMUX. `list-clients` exits 0
|
package/dist/core/spawn.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// The human surface gates on whether the canvas tmux server is reachable
|
|
4
4
|
// (tmuxServerReachable) so it can decide whether to surface a prompt or degrade
|
|
5
5
|
// to the inbox-drain follow-up. The canvas runtime has its own
|
|
6
|
-
// one-window-per-node machinery in core/runtime/tmux.ts.
|
|
6
|
+
// one-window-per-node machinery in core/runtime/placement-tmux.ts.
|
|
7
7
|
import { spawnSync } from 'node:child_process';
|
|
8
8
|
/** Does THIS process sit inside a tmux client (its own $TMUX is set)? NOT the
|
|
9
9
|
* gate for the human surface — see tmuxServerReachable. A headless-broker child
|
|
@@ -14,7 +14,7 @@ export function isInTmux() {
|
|
|
14
14
|
return Boolean(process.env.TMUX);
|
|
15
15
|
}
|
|
16
16
|
/** Is the canvas tmux SERVER reachable? The canvas runs on the DEFAULT tmux
|
|
17
|
-
* socket (no -L/-S in core/runtime/tmux.ts), so any `crtr` child — including a
|
|
17
|
+
* socket (no -L/-S in core/runtime/tmux-driver.ts), so any `crtr` child — including a
|
|
18
18
|
* headless-broker child that has deleted its own $TMUX — can split panes into
|
|
19
19
|
* it. The human surface gates on THIS (can I reach the server to open a pane
|
|
20
20
|
* the user is watching?), not on the caller's $TMUX. `list-clients` exits 0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SubstrateDoc } from './schema.js';
|
|
2
|
-
import type { NodeConfigSubject } from './subject.js';
|
|
2
|
+
import type { NodeConfigSubject } from './subject-fields.js';
|
|
3
3
|
/** Does `doc` pass its gate for `subject`?
|
|
4
4
|
*
|
|
5
5
|
* - No gate (field absent) ⇒ `true`: always eligible (the common case).
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NodeConfigSubject } from './subject-fields.js';
|
|
2
|
+
/** Surface docs matched by a successful read tool call using the caller-supplied
|
|
3
|
+
* daemon snapshot subject. */
|
|
4
|
+
export declare function renderOnReadDocsForSubject(subject: NodeConfigSubject, readFilePath: string, seen?: Set<string>): string;
|
|
5
|
+
/** Workspace boot docs using the snapshot's cwd/profile instead of a canvas
|
|
6
|
+
* lookup. */
|
|
7
|
+
export declare function renderWorkspaceOpenDocsForSubject(subject: NodeConfigSubject, cwd: string, profileId: string | null): string;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// on-read.ts — file-context delivery for the document substrate.
|
|
2
|
+
//
|
|
3
|
+
// A memory with file-read visibility participates only through an explicit
|
|
4
|
+
// `applies-to` path glob (authoring lint requires one). Two events use that one
|
|
5
|
+
// routing mechanism:
|
|
6
|
+
//
|
|
7
|
+
// • A successful `read` tool call evaluates the read file against every
|
|
8
|
+
// visible substrate doc. Project stores encountered between that file and
|
|
9
|
+
// the filesystem root join the resolved cwd/profile corpus, so a nested
|
|
10
|
+
// workspace can contribute guidance exactly when a file beneath it is read.
|
|
11
|
+
// • Opening a workspace evaluates the reserved `applies-to: "."` target for
|
|
12
|
+
// every project store mounted by the cwd and selected profile. This happens
|
|
13
|
+
// while the first-message bearings are assembled, so workspace-wide context
|
|
14
|
+
// arrives before the task rather than waiting for an arbitrary first file.
|
|
15
|
+
//
|
|
16
|
+
// `read-when` remains an additional OR trigger over a read markdown file's own
|
|
17
|
+
// frontmatter. It does not replace `applies-to`: every non-none file-read rung
|
|
18
|
+
// still declares its path boundary explicitly.
|
|
19
|
+
//
|
|
20
|
+
// Every candidate renders at its own fileReadVisibility rung. Explicit routing
|
|
21
|
+
// is the whole on-read model, so directory INDEX ceilings remain a boot-catalog
|
|
22
|
+
// concern and do not cap a deliberately matched document.
|
|
23
|
+
import { realpathSync } from 'node:fs';
|
|
24
|
+
import { homedir } from 'node:os';
|
|
25
|
+
import { basename, dirname, matchesGlob, parse, relative, sep } from 'node:path';
|
|
26
|
+
import { CRTR_DIR_NAME } from '../../types.js';
|
|
27
|
+
import { pathExists, readText, walkFiles } from '../fs-utils.js';
|
|
28
|
+
import { parseFrontmatterGeneric } from '../frontmatter.js';
|
|
29
|
+
import { evalCondition } from '../predicate.js';
|
|
30
|
+
import { listAllMemoryDocs, listProjectMemoryDocs } from '../memory-resolver.js';
|
|
31
|
+
import { userScopeRoot } from '../scope.js';
|
|
32
|
+
import { displayName } from './ceiling.js';
|
|
33
|
+
import { gatePasses } from './gate.js';
|
|
34
|
+
import { normalizeDocName, parseSubstrateDoc, parseSubstrateFrontmatter, previewLine, resolveDocName } from './schema.js';
|
|
35
|
+
import { cachedSubstrateDocs } from './session-cache.js';
|
|
36
|
+
const JUNK_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.cache', '.yalc']);
|
|
37
|
+
function realpathOrSelf(p) {
|
|
38
|
+
try {
|
|
39
|
+
return realpathSync(p);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return p;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function attr(s) {
|
|
46
|
+
return s
|
|
47
|
+
.replace(/&/g, '&')
|
|
48
|
+
.replace(/"/g, '"')
|
|
49
|
+
.replace(/</g, '<')
|
|
50
|
+
.replace(/>/g, '>');
|
|
51
|
+
}
|
|
52
|
+
function gitRootOf(p) {
|
|
53
|
+
let d = p;
|
|
54
|
+
const root = parse(d).root;
|
|
55
|
+
while (true) {
|
|
56
|
+
if (pathExists(`${d}${sep}.git`))
|
|
57
|
+
return d;
|
|
58
|
+
if (d === root)
|
|
59
|
+
return null;
|
|
60
|
+
const parent = dirname(d);
|
|
61
|
+
if (parent === d)
|
|
62
|
+
return null;
|
|
63
|
+
d = parent;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function disp(p) {
|
|
67
|
+
const root = gitRootOf(p);
|
|
68
|
+
if (!root)
|
|
69
|
+
return p;
|
|
70
|
+
const rel = relative(root, p);
|
|
71
|
+
return rel === '' ? '.' : rel;
|
|
72
|
+
}
|
|
73
|
+
function isJunkAncestor(dir) {
|
|
74
|
+
return dir.split(sep).some((segment) => JUNK_DIRS.has(segment));
|
|
75
|
+
}
|
|
76
|
+
function owningRootOf(doc) {
|
|
77
|
+
const parts = doc.path.split(sep);
|
|
78
|
+
const idx = parts.lastIndexOf(CRTR_DIR_NAME);
|
|
79
|
+
if (idx <= 0)
|
|
80
|
+
return null;
|
|
81
|
+
return parts.slice(0, idx).join(sep) || sep;
|
|
82
|
+
}
|
|
83
|
+
function loadProjectDoc(file, memoryDir) {
|
|
84
|
+
try {
|
|
85
|
+
const raw = relative(memoryDir, file)
|
|
86
|
+
.replace(/\.md$/i, '')
|
|
87
|
+
.split(sep)
|
|
88
|
+
.join('/');
|
|
89
|
+
const fallbackName = normalizeDocName(raw);
|
|
90
|
+
if (fallbackName === '')
|
|
91
|
+
return null;
|
|
92
|
+
const { data, body } = parseFrontmatterGeneric(readText(file));
|
|
93
|
+
const schema = parseSubstrateFrontmatter(data);
|
|
94
|
+
if (schema === null)
|
|
95
|
+
return null;
|
|
96
|
+
return {
|
|
97
|
+
...schema,
|
|
98
|
+
name: resolveDocName(data, fallbackName),
|
|
99
|
+
scope: 'project',
|
|
100
|
+
path: file,
|
|
101
|
+
body,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function safeWalkMarkdown(dir) {
|
|
109
|
+
try {
|
|
110
|
+
return walkFiles(dir, (name) => name.toLowerCase().endsWith('.md'));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Project docs from every workspace store enclosing the read file. This is a
|
|
117
|
+
* discovery walk only: each returned doc must still match an explicit trigger. */
|
|
118
|
+
function enclosingProjectDocs(absReadFile) {
|
|
119
|
+
const docs = [];
|
|
120
|
+
const seen = new Set();
|
|
121
|
+
const home = realpathOrSelf(homedir());
|
|
122
|
+
const userRoot = realpathOrSelf(userScopeRoot());
|
|
123
|
+
const fsRoot = parse(absReadFile).root;
|
|
124
|
+
let dir = dirname(absReadFile);
|
|
125
|
+
while (true) {
|
|
126
|
+
if (dir !== home && dir !== userRoot && !isJunkAncestor(dir)) {
|
|
127
|
+
const memoryDir = `${dir}${sep}${CRTR_DIR_NAME}${sep}memory`;
|
|
128
|
+
if (pathExists(memoryDir)) {
|
|
129
|
+
for (const file of safeWalkMarkdown(memoryDir)) {
|
|
130
|
+
const real = realpathOrSelf(file);
|
|
131
|
+
if (seen.has(real))
|
|
132
|
+
continue;
|
|
133
|
+
seen.add(real);
|
|
134
|
+
const doc = loadProjectDoc(file, memoryDir);
|
|
135
|
+
if (doc !== null)
|
|
136
|
+
docs.push(doc);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (dir === home || dir === fsRoot)
|
|
141
|
+
break;
|
|
142
|
+
const parent = dirname(dir);
|
|
143
|
+
if (parent === dir)
|
|
144
|
+
break;
|
|
145
|
+
dir = parent;
|
|
146
|
+
}
|
|
147
|
+
return docs;
|
|
148
|
+
}
|
|
149
|
+
function resolvedDocs() {
|
|
150
|
+
try {
|
|
151
|
+
return cachedSubstrateDocs(listAllMemoryDocs, parseSubstrateDoc);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function dedupeByPhysicalPath(docs) {
|
|
158
|
+
const seen = new Set();
|
|
159
|
+
const out = [];
|
|
160
|
+
for (const doc of docs) {
|
|
161
|
+
const real = realpathOrSelf(doc.path);
|
|
162
|
+
if (seen.has(real))
|
|
163
|
+
continue;
|
|
164
|
+
seen.add(real);
|
|
165
|
+
out.push(doc);
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
169
|
+
function globMatches(glob, absReadFile, owningRoot) {
|
|
170
|
+
const targets = [absReadFile, basename(absReadFile)];
|
|
171
|
+
if (owningRoot !== null)
|
|
172
|
+
targets.push(relative(owningRoot, absReadFile));
|
|
173
|
+
return targets.some((target) => {
|
|
174
|
+
try {
|
|
175
|
+
return matchesGlob(target, glob);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function readFileFrontmatter(absReadFile) {
|
|
183
|
+
if (!/\.(md|mdx|markdown)$/i.test(absReadFile))
|
|
184
|
+
return {};
|
|
185
|
+
try {
|
|
186
|
+
return parseFrontmatterGeneric(readText(absReadFile)).data ?? {};
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return {};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function matchesReadEvent(doc, absReadFile, readFrontmatter) {
|
|
193
|
+
const pathMatch = doc.appliesTo?.some((glob) => globMatches(glob, absReadFile, owningRootOf(doc))) === true;
|
|
194
|
+
const frontmatterMatch = doc.readWhen !== undefined &&
|
|
195
|
+
Object.keys(readFrontmatter).length > 0 &&
|
|
196
|
+
evalCondition(doc.readWhen, readFrontmatter);
|
|
197
|
+
return pathMatch || frontmatterMatch;
|
|
198
|
+
}
|
|
199
|
+
function envelopeName(doc) {
|
|
200
|
+
const displayed = displayName(doc.name);
|
|
201
|
+
if (displayed !== '')
|
|
202
|
+
return displayed;
|
|
203
|
+
const root = owningRootOf(doc);
|
|
204
|
+
return root === null ? doc.name : basename(root);
|
|
205
|
+
}
|
|
206
|
+
function renderDocEnvelope(doc) {
|
|
207
|
+
const rung = doc.fileReadVisibility;
|
|
208
|
+
if (rung === 'none')
|
|
209
|
+
return null;
|
|
210
|
+
let body = '';
|
|
211
|
+
if (rung === 'content')
|
|
212
|
+
body = doc.body.trim();
|
|
213
|
+
else if (rung === 'preview')
|
|
214
|
+
body = previewLine(doc);
|
|
215
|
+
const attrs = `kind="${attr(doc.kind)}" name="${attr(envelopeName(doc))}" src="${attr(disp(doc.path))}"`;
|
|
216
|
+
return body === '' ? `<memory ${attrs} />` : `<memory ${attrs}>\n${body}\n</memory>`;
|
|
217
|
+
}
|
|
218
|
+
function renderCandidates(subject, docs, seen) {
|
|
219
|
+
const rendered = [];
|
|
220
|
+
for (const doc of docs) {
|
|
221
|
+
const real = realpathOrSelf(doc.path);
|
|
222
|
+
if (seen.has(real))
|
|
223
|
+
continue;
|
|
224
|
+
try {
|
|
225
|
+
if (!gatePasses(doc, subject))
|
|
226
|
+
continue;
|
|
227
|
+
const block = renderDocEnvelope(doc);
|
|
228
|
+
if (block === null)
|
|
229
|
+
continue;
|
|
230
|
+
seen.add(real);
|
|
231
|
+
rendered.push(block);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return rendered.length === 0
|
|
238
|
+
? ''
|
|
239
|
+
: `<auto-loaded-context>\n${rendered.join('\n')}\n</auto-loaded-context>`;
|
|
240
|
+
}
|
|
241
|
+
/** Surface docs matched by a successful read tool call using the caller-supplied
|
|
242
|
+
* daemon snapshot subject. */
|
|
243
|
+
export function renderOnReadDocsForSubject(subject, readFilePath, seen = new Set()) {
|
|
244
|
+
const absReadFile = realpathOrSelf(readFilePath);
|
|
245
|
+
const readFrontmatter = readFileFrontmatter(absReadFile);
|
|
246
|
+
const docs = dedupeByPhysicalPath([...enclosingProjectDocs(absReadFile), ...resolvedDocs()])
|
|
247
|
+
.filter((doc) => realpathOrSelf(doc.path) !== absReadFile)
|
|
248
|
+
.filter((doc) => matchesReadEvent(doc, absReadFile, readFrontmatter));
|
|
249
|
+
return renderCandidates(subject, docs, seen);
|
|
250
|
+
}
|
|
251
|
+
/** Workspace boot docs using the snapshot's cwd/profile instead of a canvas
|
|
252
|
+
* lookup. */
|
|
253
|
+
export function renderWorkspaceOpenDocsForSubject(subject, cwd, profileId) {
|
|
254
|
+
let docs;
|
|
255
|
+
try {
|
|
256
|
+
docs = listProjectMemoryDocs(cwd, profileId)
|
|
257
|
+
.map(parseSubstrateDoc)
|
|
258
|
+
.filter((doc) => doc !== null);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return '';
|
|
262
|
+
}
|
|
263
|
+
docs = dedupeByPhysicalPath(docs)
|
|
264
|
+
.filter((doc) => doc.appliesTo?.some((glob) => glob.trim() === '.') === true)
|
|
265
|
+
.sort((a, b) => {
|
|
266
|
+
const aRoot = owningRootOf(a) ?? '';
|
|
267
|
+
const bRoot = owningRootOf(b) ?? '';
|
|
268
|
+
const depth = aRoot.split(sep).filter(Boolean).length - bRoot.split(sep).filter(Boolean).length;
|
|
269
|
+
return depth || aRoot.localeCompare(bRoot) || a.path.localeCompare(b.path);
|
|
270
|
+
});
|
|
271
|
+
return renderCandidates(subject, docs, new Set());
|
|
272
|
+
}
|
|
@@ -458,7 +458,37 @@ function wrap(text, maxWidth) {
|
|
|
458
458
|
return out.length > 0 ? out : [''];
|
|
459
459
|
}
|
|
460
460
|
// ── Render surface ───────────────────────────────────────────────────────────
|
|
461
|
-
|
|
461
|
+
/** Simple bounded LRU cache: evicts the oldest (first) entry when maxEntries is reached.
|
|
462
|
+
* Preserves Map's insertion-order invariant so iteration order is LRU order. */
|
|
463
|
+
class BoundedLRUCache {
|
|
464
|
+
map = new Map();
|
|
465
|
+
maxEntries;
|
|
466
|
+
constructor(maxEntries) {
|
|
467
|
+
this.maxEntries = maxEntries;
|
|
468
|
+
}
|
|
469
|
+
get(key) {
|
|
470
|
+
if (!this.map.has(key))
|
|
471
|
+
return undefined;
|
|
472
|
+
const value = this.map.get(key);
|
|
473
|
+
// Move to end (most recently used) by delete+re-insert.
|
|
474
|
+
this.map.delete(key);
|
|
475
|
+
this.map.set(key, value);
|
|
476
|
+
return value;
|
|
477
|
+
}
|
|
478
|
+
set(key, value) {
|
|
479
|
+
// Remove if exists to update order.
|
|
480
|
+
if (this.map.has(key)) {
|
|
481
|
+
this.map.delete(key);
|
|
482
|
+
}
|
|
483
|
+
else if (this.map.size >= this.maxEntries) {
|
|
484
|
+
// Evict oldest (first entry in iteration order).
|
|
485
|
+
const firstKey = this.map.keys().next().value;
|
|
486
|
+
this.map.delete(firstKey);
|
|
487
|
+
}
|
|
488
|
+
this.map.set(key, value);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
const _bodyCache = new BoundedLRUCache(20);
|
|
462
492
|
/** Render markdown to terminal lines via the pinned binary; plaintext fallback. */
|
|
463
493
|
export function renderMarkdown(md, width) {
|
|
464
494
|
const key = `${md}\0${width}`;
|
|
@@ -618,7 +648,7 @@ function fallbackDocWithMap(md, width) {
|
|
|
618
648
|
});
|
|
619
649
|
return { lines, rows, spans, blocks };
|
|
620
650
|
}
|
|
621
|
-
const _mapCache = new
|
|
651
|
+
const _mapCache = new BoundedLRUCache(20);
|
|
622
652
|
/** Render markdown with a row→source-line map via the pinned binary
|
|
623
653
|
* (`doc render --line-map`); plaintext paragraph-block fallback. */
|
|
624
654
|
export function renderMarkdownWithMap(md, width) {
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import type { ScopeConfig } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Which settings destination owns a preference row. Every settings-surface row
|
|
4
|
+
* must name one, so a new preference cannot be added without deciding where a
|
|
5
|
+
* human finds it.
|
|
6
|
+
*/
|
|
7
|
+
export type UserSettingGroup = 'display' | 'panes' | 'updates';
|
|
2
8
|
export interface UserSettingDefinition<Key extends string = string> {
|
|
3
9
|
key: Key;
|
|
4
10
|
label: string;
|
|
5
11
|
description: string;
|
|
6
12
|
valueConstraint: string;
|
|
7
13
|
applies: string;
|
|
14
|
+
group: UserSettingGroup;
|
|
8
15
|
order: number;
|
|
9
16
|
format: (config: ScopeConfig) => string;
|
|
10
17
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -40,6 +47,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
40
47
|
description: string;
|
|
41
48
|
valueConstraint: string;
|
|
42
49
|
applies: string;
|
|
50
|
+
group: "updates";
|
|
43
51
|
order: number;
|
|
44
52
|
format: (config: ScopeConfig) => "notify" | "apply" | "off";
|
|
45
53
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -51,6 +59,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
51
59
|
description: string;
|
|
52
60
|
valueConstraint: string;
|
|
53
61
|
applies: string;
|
|
62
|
+
group: "updates";
|
|
54
63
|
order: number;
|
|
55
64
|
format: (config: ScopeConfig) => "notify" | "apply" | "off";
|
|
56
65
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -62,6 +71,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
62
71
|
description: string;
|
|
63
72
|
valueConstraint: string;
|
|
64
73
|
applies: string;
|
|
74
|
+
group: "updates";
|
|
65
75
|
order: number;
|
|
66
76
|
format: (config: ScopeConfig) => string;
|
|
67
77
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -77,6 +87,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
77
87
|
description: string;
|
|
78
88
|
valueConstraint: string;
|
|
79
89
|
applies: string;
|
|
90
|
+
group: "panes";
|
|
80
91
|
order: number;
|
|
81
92
|
format: (config: ScopeConfig) => string;
|
|
82
93
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -91,6 +102,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
91
102
|
description: string;
|
|
92
103
|
valueConstraint: string;
|
|
93
104
|
applies: string;
|
|
105
|
+
group: "panes";
|
|
94
106
|
order: number;
|
|
95
107
|
format: (config: ScopeConfig) => "on" | "off";
|
|
96
108
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -109,6 +121,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
109
121
|
description: string;
|
|
110
122
|
valueConstraint: string;
|
|
111
123
|
applies: string;
|
|
124
|
+
group: "display";
|
|
112
125
|
order: number;
|
|
113
126
|
format: (config: ScopeConfig) => "on" | "off";
|
|
114
127
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -127,6 +140,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
127
140
|
description: string;
|
|
128
141
|
valueConstraint: string;
|
|
129
142
|
applies: string;
|
|
143
|
+
group: "display";
|
|
130
144
|
order: number;
|
|
131
145
|
format: (config: ScopeConfig) => "on" | "off";
|
|
132
146
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -145,6 +159,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
145
159
|
description: string;
|
|
146
160
|
valueConstraint: string;
|
|
147
161
|
applies: string;
|
|
162
|
+
group: "display";
|
|
148
163
|
order: number;
|
|
149
164
|
format: (config: ScopeConfig) => "on" | "off" | "follow tmux";
|
|
150
165
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -159,6 +174,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
159
174
|
description: string;
|
|
160
175
|
valueConstraint: string;
|
|
161
176
|
applies: string;
|
|
177
|
+
group: "display";
|
|
162
178
|
order: number;
|
|
163
179
|
format: (config: ScopeConfig) => string;
|
|
164
180
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -173,6 +189,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
173
189
|
description: string;
|
|
174
190
|
valueConstraint: string;
|
|
175
191
|
applies: string;
|
|
192
|
+
group: "display";
|
|
176
193
|
order: number;
|
|
177
194
|
format: (config: ScopeConfig) => "user" | "none" | "agent" | "both";
|
|
178
195
|
cycle: (config: ScopeConfig, delta: number) => void;
|
|
@@ -187,6 +204,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
187
204
|
description: string;
|
|
188
205
|
valueConstraint: string;
|
|
189
206
|
applies: string;
|
|
207
|
+
group: "display";
|
|
190
208
|
order: number;
|
|
191
209
|
format: (config: ScopeConfig) => "on" | "off";
|
|
192
210
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -201,6 +219,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
201
219
|
description: string;
|
|
202
220
|
valueConstraint: string;
|
|
203
221
|
applies: string;
|
|
222
|
+
group: "display";
|
|
204
223
|
order: number;
|
|
205
224
|
format: (config: ScopeConfig) => "on" | "off";
|
|
206
225
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -215,6 +234,7 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
215
234
|
description: string;
|
|
216
235
|
valueConstraint: string;
|
|
217
236
|
applies: string;
|
|
237
|
+
group: "display";
|
|
218
238
|
order: number;
|
|
219
239
|
format: (config: ScopeConfig) => "on" | "off";
|
|
220
240
|
cycle: (config: ScopeConfig) => void;
|
|
@@ -256,6 +276,8 @@ export declare const CONFIG_SETTINGS_COVERAGE: {
|
|
|
256
276
|
};
|
|
257
277
|
/** The exhaustive top-level key list used by config persistence and help. */
|
|
258
278
|
export declare const SCOPE_CONFIG_KEYS: (keyof ScopeConfig)[];
|
|
259
|
-
/** The single row registry shared by `sys
|
|
279
|
+
/** The single row registry shared by `sys settings` and `sys config set`. */
|
|
260
280
|
export declare const USER_SETTINGS: readonly UserSettingDefinition[];
|
|
261
281
|
export declare function findUserSetting(key: string): UserSettingDefinition | undefined;
|
|
282
|
+
/** The rows one settings destination owns, in registry order. */
|
|
283
|
+
export declare function userSettingsInGroup(group: UserSettingGroup): readonly UserSettingDefinition[];
|