@north-light/crouter 0.3.170 → 0.3.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/client.d.ts +37 -11
- package/dist/api/client.js +84 -15
- package/dist/api/dto/human.d.ts +53 -39
- package/dist/api/dto/human.js +2 -3
- package/dist/api/dto/inbox.d.ts +0 -1
- package/dist/api/dto/nodes.d.ts +12 -0
- package/dist/api/dto/review-comments.d.ts +137 -0
- package/dist/api/dto/review-comments.js +5 -0
- package/dist/api/dto/reviews.d.ts +109 -0
- package/dist/api/dto/reviews.js +5 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/routes.d.ts +17 -4
- package/dist/api/routes.js +21 -5
- package/dist/build-root.d.ts +1 -16
- package/dist/build-root.js +1 -25
- package/dist/builtin-memory/00-runtime-base.md +7 -5
- package/dist/builtin-memory/04-base-worker.md +1 -1
- package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
- package/dist/builtin-memory/05-kinds/design/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/review/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/review/companion/00-base.md +20 -0
- package/dist/builtin-memory/05-kinds/spec/00-base.md +3 -7
- package/dist/builtin-memory/05-kinds/spec/01-orchestrator.md +3 -3
- package/dist/builtin-memory/05-kinds/spec/requirements.md +3 -3
- package/dist/builtin-memory/design.md +2 -2
- package/dist/builtin-memory/insights/capture.md +50 -0
- package/dist/builtin-memory/insights/init.md +45 -0
- package/dist/builtin-memory/insights/listen.md +9 -0
- package/dist/builtin-memory/internal/agent-shaping.md +2 -2
- package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
- package/dist/builtin-memory/internal/plugins.md +12 -11
- package/dist/builtin-memory/internal/storage-tiers.md +2 -2
- package/dist/builtin-memory/{planning.md → plan/roadmap.md} +3 -3
- package/dist/builtin-memory/plan.md +19 -0
- package/dist/builtin-memory/spec/guide.md +38 -0
- package/dist/builtin-memory/spec/requirements.md +31 -0
- package/dist/builtin-memory/spec/roadmap.md +35 -0
- package/dist/builtin-memory/spec.md +10 -86
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +3 -4
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +49 -5
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +56 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +920 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +221 -156
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +4 -5
- package/dist/cli.js +2 -6
- package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +7 -35
- package/dist/clients/attach/__tests__/attach-keybindings.test.js +32 -16
- package/dist/clients/attach/__tests__/context-message.test.js +142 -6
- package/dist/clients/attach/__tests__/crtr-output.test.js +29 -45
- package/dist/clients/attach/__tests__/diagram.test.js +1 -1
- package/dist/clients/attach/__tests__/file-review-focus.test.js +48 -0
- package/dist/clients/attach/__tests__/group-activity.test.js +266 -0
- package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +32 -0
- package/dist/clients/attach/__tests__/session-identity-refresh.test.js +32 -0
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +1 -2
- package/dist/clients/attach/chrome/header.d.ts +10 -0
- package/dist/clients/attach/chrome/header.js +30 -0
- package/dist/clients/attach/chrome/recap.d.ts +7 -0
- package/dist/clients/attach/chrome/recap.js +19 -0
- package/dist/clients/attach/chrome/status-line.d.ts +3 -0
- package/dist/clients/attach/chrome/status-line.js +5 -0
- package/dist/clients/attach/chrome/widgets.js +11 -21
- package/dist/clients/attach/command.js +11 -7
- package/dist/clients/attach/config.d.ts +4 -0
- package/dist/clients/attach/config.js +3 -0
- package/dist/clients/attach/input/controller.d.ts +19 -0
- package/dist/clients/attach/input/controller.js +62 -28
- package/dist/clients/attach/input/titled-editor.d.ts +0 -4
- package/dist/clients/attach/input/titled-editor.js +2 -10
- package/dist/clients/attach/overlays/file-review.d.ts +9 -5
- package/dist/clients/attach/overlays/file-review.js +9 -70
- package/dist/clients/attach/overlays/help.d.ts +33 -0
- package/dist/clients/attach/overlays/help.js +204 -0
- package/dist/clients/attach/render/activity-slot.d.ts +4 -0
- package/dist/clients/attach/render/activity-slot.js +13 -0
- package/dist/clients/attach/render/chat-view.d.ts +117 -12
- package/dist/clients/attach/render/chat-view.js +604 -135
- package/dist/clients/attach/render/context-message.d.ts +2 -1
- package/dist/clients/attach/render/context-message.js +17 -13
- package/dist/clients/attach/render/crtr-output.js +1 -3
- package/dist/clients/attach/render/diagram.js +2 -2
- package/dist/clients/attach/render/edit-diff.d.ts +4 -1
- package/dist/clients/attach/render/edit-diff.js +7 -11
- package/dist/clients/attach/render/group-activity.d.ts +32 -0
- package/dist/clients/attach/render/group-activity.js +206 -0
- package/dist/clients/attach/render/group-recap.d.ts +10 -0
- package/dist/clients/attach/render/group-recap.js +93 -0
- package/dist/clients/attach/render/html-markdown.d.ts +17 -0
- package/dist/clients/attach/render/html-markdown.js +228 -0
- package/dist/clients/attach/render/measured-container.d.ts +96 -0
- package/dist/clients/attach/render/measured-container.js +322 -0
- package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
- package/dist/clients/attach/render/scroll-animation.js +80 -0
- package/dist/clients/attach/render/tool-calls.js +6 -6
- package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
- package/dist/clients/attach/render/transcript-copy.js +81 -0
- package/dist/clients/attach/render/viewport.d.ts +29 -0
- package/dist/clients/attach/render/viewport.js +159 -0
- package/dist/clients/attach/session/bindings.d.ts +10 -7
- package/dist/clients/attach/session/bindings.js +23 -8
- package/dist/clients/attach/session/connection.js +4 -5
- package/dist/clients/attach/session/context.d.ts +6 -4
- package/dist/clients/attach/session/frame.d.ts +34 -0
- package/dist/clients/attach/session/frame.js +176 -0
- package/dist/clients/attach/session/frames.d.ts +4 -1
- package/dist/clients/attach/session/frames.js +14 -1
- package/dist/clients/attach/session/identity.js +4 -3
- package/dist/clients/attach/session/input-wiring.d.ts +14 -4
- package/dist/clients/attach/session/input-wiring.js +15 -13
- package/dist/clients/attach/session/invariant.d.ts +9 -0
- package/dist/clients/attach/session/invariant.js +15 -0
- package/dist/clients/attach/session/keys.d.ts +10 -2
- package/dist/clients/attach/session/keys.js +13 -5
- package/dist/clients/attach/session/layout.d.ts +10 -8
- package/dist/clients/attach/session/layout.js +33 -34
- package/dist/clients/attach/session/mouse.d.ts +18 -0
- package/dist/clients/attach/session/mouse.js +64 -0
- package/dist/clients/attach/session/pane-tag.d.ts +3 -0
- package/dist/clients/attach/session/pane-tag.js +51 -8
- package/dist/clients/attach/session/reconnect.d.ts +3 -0
- package/dist/clients/attach/session/reconnect.js +42 -5
- package/dist/clients/attach/session/surface-frame.d.ts +20 -0
- package/dist/clients/attach/session/surface-frame.js +73 -0
- package/dist/clients/attach/session/surface-host.d.ts +64 -0
- package/dist/clients/attach/session/surface-host.js +255 -0
- package/dist/clients/attach/session/whip.d.ts +17 -0
- package/dist/clients/attach/session/whip.js +334 -0
- package/dist/clients/attach/slash/dispatch.d.ts +13 -1
- package/dist/clients/attach/slash/dispatch.js +51 -29
- package/dist/clients/attach/viewer.js +907 -819
- package/dist/clients/conversation/conversation.d.ts +65 -0
- package/dist/clients/conversation/conversation.js +318 -0
- package/dist/clients/conversation/frames.d.ts +30 -0
- package/dist/clients/conversation/frames.js +52 -0
- package/dist/clients/conversation/region.d.ts +51 -0
- package/dist/clients/conversation/region.js +265 -0
- package/dist/clients/conversation/submit.d.ts +38 -0
- package/dist/clients/conversation/submit.js +51 -0
- package/dist/clients/inbox/__tests__/inbox-controller.test.js +247 -0
- package/dist/clients/inbox/__tests__/mount-panel.test.js +776 -0
- package/dist/clients/inbox/controller.d.ts +79 -0
- package/dist/clients/inbox/controller.js +448 -0
- package/dist/clients/inbox/deck-adapter.d.ts +29 -0
- package/dist/clients/inbox/deck-adapter.js +62 -0
- package/dist/clients/inbox/layout.d.ts +8 -0
- package/dist/clients/inbox/layout.js +9 -0
- package/dist/clients/inbox/resolve.d.ts +10 -0
- package/dist/clients/inbox/resolve.js +34 -0
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +29 -0
- package/dist/clients/inbox/review/__tests__/remap.test.js +196 -0
- package/dist/clients/inbox/review/__tests__/review-core.test.js +341 -0
- package/dist/clients/inbox/review/anchors.d.ts +41 -0
- package/dist/clients/inbox/review/anchors.js +89 -0
- package/dist/clients/inbox/review/columns.d.ts +22 -0
- package/dist/clients/inbox/review/columns.js +40 -0
- package/dist/clients/inbox/review/comments-client.d.ts +66 -0
- package/dist/clients/inbox/review/comments-client.js +98 -0
- package/dist/clients/inbox/review/composition.d.ts +60 -0
- package/dist/clients/inbox/review/composition.js +278 -0
- package/dist/clients/inbox/review/document-region.d.ts +120 -0
- package/dist/clients/inbox/review/document-region.js +902 -0
- package/dist/clients/inbox/review/frame.d.ts +45 -0
- package/dist/clients/inbox/review/frame.js +215 -0
- package/dist/clients/inbox/review/keys.d.ts +67 -0
- package/dist/clients/inbox/review/keys.js +130 -0
- package/dist/clients/inbox/review/launch.d.ts +10 -0
- package/dist/clients/inbox/review/launch.js +129 -0
- package/dist/clients/inbox/review/live-source.d.ts +24 -0
- package/dist/clients/inbox/review/live-source.js +160 -0
- package/dist/clients/inbox/review/nvim.d.ts +13 -0
- package/dist/clients/inbox/review/nvim.js +42 -0
- package/dist/clients/inbox/review/remap.d.ts +51 -0
- package/dist/clients/inbox/review/remap.js +157 -0
- package/dist/clients/inbox/review/review-client.d.ts +30 -0
- package/dist/clients/inbox/review/review-client.js +107 -0
- package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
- package/dist/clients/inbox/review/roundtrip.js +36 -0
- package/dist/clients/inbox/review/state.d.ts +143 -0
- package/dist/clients/inbox/review/state.js +282 -0
- package/dist/clients/inbox/review-adapter.d.ts +29 -0
- package/dist/clients/inbox/review-adapter.js +92 -0
- package/dist/clients/inbox/review-visibility.d.ts +5 -0
- package/dist/clients/inbox/review-visibility.js +19 -0
- package/dist/clients/inbox/surface.d.ts +19 -0
- package/dist/clients/inbox/surface.js +128 -0
- package/dist/clients/inbox/tui/ansi.d.ts +66 -0
- package/dist/clients/inbox/tui/ansi.js +317 -0
- package/dist/clients/inbox/tui/clipboard.d.ts +2 -0
- package/dist/clients/inbox/tui/clipboard.js +26 -0
- package/dist/clients/inbox/tui/input.d.ts +7 -0
- package/dist/clients/inbox/tui/input.js +653 -0
- package/dist/clients/inbox/tui/keys.d.ts +28 -0
- package/dist/clients/inbox/tui/keys.js +111 -0
- package/dist/clients/inbox/tui/panel.d.ts +2 -0
- package/dist/clients/inbox/tui/panel.js +217 -0
- package/dist/clients/inbox/tui/render.d.ts +37 -0
- package/dist/clients/inbox/tui/render.js +476 -0
- package/dist/clients/inbox/tui/types.d.ts +57 -0
- package/dist/clients/inbox/tui/types.js +1 -0
- package/dist/clients/inbox/tui.d.ts +6 -0
- package/dist/clients/inbox/tui.js +74 -0
- package/dist/clients/surfaces/host.d.ts +66 -0
- package/dist/clients/surfaces/host.js +1 -0
- package/dist/clients/surfaces/region.d.ts +16 -0
- package/dist/clients/surfaces/region.js +1 -0
- package/dist/clients/web/__tests__/push-engine.test.js +14 -158
- package/dist/clients/web/dev-server.d.ts +3 -3
- package/dist/clients/web/dev-server.js +9 -23
- package/dist/clients/web/events.js +4 -6
- package/dist/clients/web/push-engine.d.ts +2 -66
- package/dist/clients/web/push-engine.js +30 -161
- package/dist/clients/web/push-registry.d.ts +0 -4
- package/dist/clients/web/push-registry.js +2 -7
- package/dist/clients/web/server.js +3 -35
- package/dist/clients/web/web-client/shared/protocol.d.ts +0 -108
- package/dist/clients/web/web-cmd.js +2 -2
- package/dist/commands/__tests__/human.test.js +27 -15
- package/dist/commands/api-client.js +3 -3
- package/dist/commands/canvas-browse.js +1 -1
- package/dist/commands/canvas-issue.js +1 -1
- package/dist/commands/canvas-use.js +1 -1
- package/dist/commands/human/doc.d.ts +2 -0
- package/dist/commands/human/doc.js +98 -0
- package/dist/commands/human/inbox.d.ts +2 -0
- package/dist/commands/human/inbox.js +101 -0
- package/dist/commands/human/prompts.d.ts +2 -3
- package/dist/commands/human/prompts.js +27 -180
- package/dist/commands/human/queue.d.ts +1 -5
- package/dist/commands/human/queue.js +54 -216
- package/dist/commands/human/review.d.ts +2 -0
- package/dist/commands/human/review.js +298 -0
- package/dist/commands/human/shared.d.ts +2 -69
- package/dist/commands/human/shared.js +1 -181
- package/dist/commands/human.js +15 -20
- package/dist/commands/memory/__tests__/lint.test.d.ts +1 -0
- package/dist/commands/memory/__tests__/lint.test.js +15 -0
- package/dist/commands/memory/delete.js +2 -2
- package/dist/commands/memory/lint.d.ts +1 -0
- package/dist/commands/memory/lint.js +21 -3
- package/dist/commands/memory/read.js +4 -4
- package/dist/commands/node.js +8 -7
- package/dist/commands/pkg/plugin-manage.js +143 -68
- package/dist/commands/surface-inspect.js +2 -2
- package/dist/commands/surface.js +6 -12
- package/dist/commands/sys/__tests__/setup-core.test.js +9 -5
- package/dist/commands/sys/__tests__/setup-front-door.test.js +7 -42
- package/dist/commands/sys/config.js +29 -3
- package/dist/commands/sys/feedback.js +1 -1
- package/dist/commands/sys/setup-core.d.ts +12 -11
- package/dist/commands/sys/setup-core.js +55 -46
- package/dist/commands/sys/setup-wizard.d.ts +4 -1
- package/dist/commands/sys/setup-wizard.js +50 -9
- package/dist/commands/sys/sync-deps.js +1 -1
- package/dist/commands/sys.js +4 -6
- package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -1
- package/dist/core/__tests__/broker-snapshot-history.test.js +9 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +3 -4
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +8 -5
- package/dist/core/__tests__/fixtures/fake-engine.js +28 -2
- package/dist/core/__tests__/full/broker-provider-retry.test.js +87 -2
- package/dist/core/__tests__/full/broker-whip-interrupt.test.d.ts +1 -0
- package/dist/core/__tests__/full/broker-whip-interrupt.test.js +39 -0
- package/dist/core/__tests__/full/detach-focus.test.js +1 -1
- package/dist/core/__tests__/human-deliver-e2e.test.js +64 -64
- package/dist/core/__tests__/human-deliver.test.js +71 -345
- package/dist/core/__tests__/inline-memory-refs.test.js +2 -12
- package/dist/core/__tests__/memory-resolver-precedence.test.js +12 -15
- package/dist/core/__tests__/migration.test.js +10 -0
- package/dist/core/__tests__/model-pin-durability.test.js +14 -0
- package/dist/core/__tests__/phase4-review-migration.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-migration.test.js +100 -0
- package/dist/core/__tests__/phase4-review-store.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-store.test.js +143 -0
- package/dist/core/__tests__/remote-canvas-target.test.js +2 -2
- package/dist/core/__tests__/revive.test.js +22 -53
- package/dist/core/__tests__/session-cycles.test.js +48 -18
- package/dist/core/__tests__/spawn-no-kickoff.test.js +8 -12
- package/dist/core/__tests__/stop-guard.test.js +16 -1
- package/dist/core/__tests__/tmux-surface.test.js +21 -25
- package/dist/core/asset-root.d.ts +7 -0
- package/dist/core/asset-root.js +18 -0
- package/dist/core/broker-client/client.d.ts +0 -7
- package/dist/core/broker-client/client.js +4 -10
- package/dist/core/broker-client/transport-relay.d.ts +3 -4
- package/dist/core/broker-client/transport-relay.js +3 -4
- package/dist/core/canvas/__tests__/attention.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +1 -0
- package/dist/core/{view/__tests__/transport-remote.test.js → canvas/__tests__/remote-transport.test.js} +2 -2
- package/dist/core/canvas/__tests__/render-remote.test.js +1 -1
- package/dist/core/canvas/attention.js +4 -4
- package/dist/core/canvas/canvas.d.ts +6 -11
- package/dist/core/canvas/canvas.js +11 -33
- package/dist/core/canvas/db.js +207 -38
- package/dist/core/canvas/extensions.d.ts +1 -1
- package/dist/core/canvas/extensions.js +8 -1
- package/dist/core/canvas/index.d.ts +0 -1
- package/dist/core/canvas/index.js +0 -1
- package/dist/core/canvas/nav-model.d.ts +1 -1
- package/dist/core/canvas/nav-model.js +1 -1
- package/dist/core/canvas/paths.d.ts +5 -0
- package/dist/core/canvas/paths.js +16 -0
- package/dist/core/canvas/remote-canvas-source.js +2 -2
- package/dist/core/canvas/remote-transport.d.ts +7 -0
- package/dist/core/{view/transport-remote.js → canvas/remote-transport.js} +3 -4
- package/dist/core/canvas/source.js +1 -1
- package/dist/core/canvas/status-glyph.js +4 -12
- package/dist/core/canvas/types.d.ts +10 -35
- package/dist/core/clipboard-text.d.ts +8 -0
- package/dist/core/clipboard-text.js +18 -0
- package/dist/core/command-manifests/registry.d.ts +1 -3
- package/dist/core/command-plugins/bundle.d.ts +29 -0
- package/dist/core/command-plugins/bundle.js +198 -0
- package/dist/core/command-plugins/discovery.d.ts +0 -8
- package/dist/core/command-plugins/discovery.js +2 -39
- package/dist/core/command-plugins/transport/http-fetch.d.ts +4 -30
- package/dist/core/command-plugins/transport/http-fetch.js +17 -95
- package/dist/core/command.d.ts +1 -13
- package/dist/core/command.js +1 -16
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.js +28 -3
- package/dist/core/document-lines.d.ts +4 -0
- package/dist/core/document-lines.js +6 -0
- package/dist/core/feed/feed.d.ts +2 -0
- package/dist/core/feed/feed.js +11 -7
- package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-cancel-worker.js +7 -0
- package/dist/core/human/__tests__/inbox-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-claim-worker.js +17 -0
- package/dist/core/human/__tests__/inbox-core.test.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-core.test.js +144 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.js +8 -0
- package/dist/core/human/__tests__/visible-paths.test.d.ts +1 -0
- package/dist/{clients/attach → core/human}/__tests__/visible-paths.test.js +9 -0
- package/dist/core/human/claim.d.ts +23 -0
- package/dist/core/human/claim.js +67 -0
- package/dist/core/human/convention.d.ts +30 -0
- package/dist/core/human/convention.js +202 -0
- package/dist/core/human/deck-factories.d.ts +8 -0
- package/dist/core/human/deck-factories.js +15 -0
- package/dist/core/human/deck-schema.d.ts +70 -0
- package/dist/core/human/deck-schema.js +92 -0
- package/dist/core/human/root.d.ts +7 -0
- package/dist/core/human/root.js +37 -0
- package/dist/core/human/scan.d.ts +3 -0
- package/dist/core/human/scan.js +76 -0
- package/dist/core/human/summary.d.ts +8 -0
- package/dist/core/human/summary.js +44 -0
- package/dist/core/human/tickets.d.ts +49 -0
- package/dist/core/human/tickets.js +190 -0
- package/dist/core/human/types.d.ts +136 -0
- package/dist/core/human/types.js +5 -0
- package/dist/{clients/attach → core/human}/visible-paths.d.ts +1 -1
- package/dist/{clients/attach → core/human}/visible-paths.js +3 -2
- package/dist/core/inspector/chrome.d.ts +6 -0
- package/dist/core/inspector/chrome.js +14 -0
- package/dist/core/inspector/contract.d.ts +105 -0
- package/dist/core/inspector/contract.js +1 -0
- package/dist/core/inspector/core.d.ts +4 -5
- package/dist/core/inspector/core.js +3 -5
- package/dist/core/inspector/host.d.ts +46 -0
- package/dist/core/{tui → inspector}/host.js +42 -208
- package/dist/core/inspector/text.d.ts +2 -2
- package/dist/core/inspector/transport.d.ts +6 -0
- package/dist/core/inspector/transport.js +36 -0
- package/dist/core/inspector/tui.d.ts +2 -2
- package/dist/core/inspector/tui.js +15 -15
- package/dist/core/keybindings/__tests__/inbox-affordance.test.js +11 -11
- package/dist/core/keybindings/__tests__/resolve.test.js +10 -19
- package/dist/core/keybindings/attach-control.d.ts +9 -3
- package/dist/core/keybindings/attach-control.js +3 -1
- package/dist/core/keybindings/catalog.d.ts +6 -5
- package/dist/core/keybindings/catalog.js +61 -133
- package/dist/core/keybindings/inbox.d.ts +5 -6
- package/dist/core/keybindings/inbox.js +9 -10
- package/dist/core/keybindings/index.d.ts +3 -3
- package/dist/core/keybindings/index.js +3 -3
- package/dist/core/keybindings/persistence.d.ts +5 -1
- package/dist/core/keybindings/persistence.js +24 -6
- package/dist/core/keybindings/resolve.d.ts +6 -0
- package/dist/core/keybindings/resolve.js +10 -3
- package/dist/core/memory/inline-ref-grammar.js +2 -3
- package/dist/core/memory-resolver.d.ts +27 -29
- package/dist/core/memory-resolver.js +45 -39
- package/dist/core/model-routes.d.ts +33 -0
- package/dist/core/model-routes.js +42 -3
- package/dist/core/preview-registry.js +17 -55
- package/dist/core/profiles/select.js +3 -3
- package/dist/core/{view/remote-canvas-target.d.ts → remote-canvas-target.d.ts} +2 -2
- package/dist/core/{view/remote-canvas-target.js → remote-canvas-target.js} +4 -4
- package/dist/core/review/__tests__/capture-origin.test.d.ts +1 -0
- package/dist/core/review/__tests__/capture-origin.test.js +139 -0
- package/dist/core/review/__tests__/comments.test.d.ts +1 -0
- package/dist/core/review/__tests__/comments.test.js +98 -0
- package/dist/core/review/__tests__/project.test.d.ts +1 -0
- package/dist/core/review/__tests__/project.test.js +71 -0
- package/dist/core/review/__tests__/remap.test.d.ts +1 -0
- package/dist/core/review/__tests__/remap.test.js +159 -0
- package/dist/core/review/__tests__/stage-identity.test.d.ts +1 -0
- package/dist/core/review/__tests__/stage-identity.test.js +140 -0
- package/dist/core/review/birth.d.ts +7 -0
- package/dist/core/review/birth.js +23 -0
- package/dist/core/review/comments.d.ts +69 -0
- package/dist/core/review/comments.js +295 -0
- package/dist/core/review/companion.d.ts +35 -0
- package/dist/core/review/companion.js +205 -0
- package/dist/core/review/document.d.ts +27 -0
- package/dist/core/review/document.js +138 -0
- package/dist/core/review/project.d.ts +13 -0
- package/dist/core/review/project.js +58 -0
- package/dist/core/review/realize.d.ts +19 -0
- package/dist/core/review/realize.js +217 -0
- package/dist/core/review/remap.d.ts +24 -0
- package/dist/core/review/remap.js +156 -0
- package/dist/core/review/signal.d.ts +5 -0
- package/dist/core/review/signal.js +31 -0
- package/dist/core/review/stage.d.ts +26 -0
- package/dist/core/review/stage.js +184 -0
- package/dist/core/review/store.d.ts +46 -0
- package/dist/core/review/store.js +163 -0
- package/dist/core/review/ticket-filter.d.ts +17 -0
- package/dist/core/review/ticket-filter.js +32 -0
- package/dist/core/review/types.d.ts +130 -0
- package/dist/core/review/types.js +23 -0
- package/dist/core/runtime/__tests__/session-visibility.test.d.ts +1 -0
- package/dist/core/runtime/__tests__/session-visibility.test.js +119 -0
- package/dist/core/runtime/bearings.d.ts +5 -17
- package/dist/core/runtime/bearings.js +88 -71
- package/dist/core/runtime/broker-protocol.d.ts +31 -8
- package/dist/core/runtime/broker.d.ts +15 -1
- package/dist/core/runtime/broker.js +573 -141
- package/dist/core/runtime/canvas-extensions.d.ts +4 -5
- package/dist/core/runtime/canvas-extensions.js +5 -5
- package/dist/core/runtime/front-door.js +4 -4
- package/dist/core/runtime/headless-pi.d.ts +24 -0
- package/dist/core/runtime/headless-pi.js +152 -0
- package/dist/core/runtime/kickoff.d.ts +1 -5
- package/dist/core/runtime/kickoff.js +1 -5
- package/dist/core/runtime/model-registry.d.ts +3 -0
- package/dist/core/runtime/model-registry.js +13 -0
- package/dist/core/runtime/naming-persist.d.ts +4 -0
- package/dist/core/runtime/naming-persist.js +27 -1
- package/dist/core/runtime/naming.d.ts +17 -12
- package/dist/core/runtime/naming.js +91 -140
- package/dist/core/runtime/node-read.js +19 -10
- package/dist/core/runtime/nodes.d.ts +9 -14
- package/dist/core/runtime/nodes.js +3 -53
- package/dist/core/runtime/package-health.d.ts +6 -21
- package/dist/core/runtime/package-health.js +12 -123
- package/dist/core/runtime/placement-tmux.d.ts +2 -1
- package/dist/core/runtime/placement-tmux.js +6 -4
- package/dist/core/runtime/placement.d.ts +1 -0
- package/dist/core/runtime/placement.js +4 -8
- package/dist/core/runtime/promote.js +3 -0
- package/dist/core/runtime/recap.d.ts +2 -7
- package/dist/core/runtime/recap.js +35 -69
- package/dist/core/runtime/revive.js +34 -77
- package/dist/core/runtime/session-cycles.d.ts +4 -0
- package/dist/core/runtime/session-cycles.js +14 -1
- package/dist/core/runtime/session-visibility.d.ts +37 -0
- package/dist/core/runtime/session-visibility.js +83 -0
- package/dist/core/runtime/spawn.js +10 -22
- package/dist/core/runtime/stop-guard.d.ts +1 -1
- package/dist/core/runtime/stop-guard.js +18 -13
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux-chrome.d.ts +1 -1
- package/dist/core/runtime/tmux-chrome.js +1 -1
- package/dist/core/runtime/tmux.d.ts +35 -7
- package/dist/core/runtime/tmux.js +439 -62
- package/dist/core/runtime/tool-group-summary.d.ts +19 -0
- package/dist/core/runtime/tool-group-summary.js +88 -0
- package/dist/core/scope.d.ts +2 -7
- package/dist/core/scope.js +9 -35
- package/dist/core/substrate/schema.d.ts +2 -2
- package/dist/core/termrender/code-doc.d.ts +12 -0
- package/dist/core/termrender/code-doc.js +92 -0
- package/dist/core/termrender/display.d.ts +12 -0
- package/dist/core/termrender/display.js +19 -0
- package/dist/core/termrender/termrender.d.ts +73 -0
- package/dist/core/termrender/termrender.js +795 -0
- package/dist/core/termrender/version.d.ts +1 -0
- package/dist/core/termrender/version.js +1 -0
- package/dist/core/tui/terminal.js +1 -2
- package/dist/core/user-settings.d.ts +71 -3
- package/dist/core/user-settings.js +83 -1
- package/dist/daemon/api/__tests__/inbox.test.js +44 -133
- package/dist/daemon/api/handlers/human.d.ts +0 -10
- package/dist/daemon/api/handlers/human.js +104 -702
- package/dist/daemon/api/handlers/inbox.js +113 -142
- package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
- package/dist/daemon/api/handlers/review-comments.js +500 -0
- package/dist/daemon/api/handlers/reviews.d.ts +2 -0
- package/dist/daemon/api/handlers/reviews.js +287 -0
- package/dist/daemon/api/map.d.ts +22 -7
- package/dist/daemon/api/map.js +159 -11
- package/dist/daemon/api/server.js +4 -0
- package/dist/daemon/cron-run.js +6 -9
- package/dist/daemon/crtrd.js +17 -33
- package/dist/daemon/fleet.d.ts +1 -8
- package/dist/daemon/fleet.js +4 -30
- package/dist/daemon/human/finish.d.ts +14 -0
- package/dist/daemon/human/finish.js +115 -0
- package/dist/daemon/human/sweep.d.ts +6 -0
- package/dist/daemon/human/sweep.js +49 -0
- package/dist/daemon/messaging/node-message.d.ts +18 -0
- package/dist/daemon/messaging/node-message.js +70 -0
- package/dist/daemon/review/comment-notify.d.ts +26 -0
- package/dist/daemon/review/comment-notify.js +107 -0
- package/dist/daemon/review/deliver.d.ts +7 -0
- package/dist/daemon/review/deliver.js +56 -0
- package/dist/daemon/review/finish.d.ts +22 -0
- package/dist/daemon/review/finish.js +254 -0
- package/dist/daemon/review/sweep.d.ts +11 -0
- package/dist/daemon/review/sweep.js +120 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +42 -64
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +159 -0
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +16 -38
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +63 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +8 -11
- package/dist/pi-extensions/canvas-context-intro.js +50 -104
- package/dist/pi-extensions/canvas-recap.d.ts +15 -2
- package/dist/pi-extensions/canvas-recap.js +192 -69
- package/dist/pi-extensions/canvas-review-boundary.d.ts +59 -0
- package/dist/pi-extensions/canvas-review-boundary.js +81 -0
- package/dist/pi-extensions/canvas-stophook.d.ts +3 -3
- package/dist/pi-extensions/canvas-stophook.js +78 -128
- package/dist/pi-extensions/canvas-structured-output.js +52 -8
- package/dist/shared/generated-context.d.ts +29 -4
- package/dist/shared/generated-context.js +122 -7
- package/dist/shared/tool-groups.d.ts +23 -0
- package/dist/shared/tool-groups.js +60 -0
- package/dist/shared/working-activity.d.ts +8 -0
- package/dist/shared/working-activity.js +26 -0
- package/dist/types.d.ts +36 -2
- package/dist/types.js +51 -0
- package/dist/web-client/assets/index-CCPaLeW7.css +2 -0
- package/dist/web-client/assets/index-kyOWsnZK.js +86 -0
- package/dist/web-client/index.html +2 -2
- package/dist/web-client/sw.js +1 -1
- package/docs/compat/hearth-crtr-v4.md +2 -2
- package/docs/compat/hearth-crtr-v5.md +4 -2
- package/docs/public-api.md +3 -3
- package/package.json +21 -14
- package/runtime.lock.json +4661 -1453
- package/scripts/postinstall.mjs +15 -2
- package/dist/builtin-pi-packages/pi-mode-switch/README.md +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +0 -449
- package/dist/builtin-pi-packages/pi-mode-switch/package.json +0 -14
- package/dist/builtin-pi-packages/pi-mode-switch/tsconfig.json +0 -9
- package/dist/builtin-views/_lib/states.mjs +0 -161
- package/dist/builtin-views/canvas/core.mjs +0 -657
- package/dist/builtin-views/canvas/text.mjs +0 -58
- package/dist/builtin-views/canvas/tui.mjs +0 -168
- package/dist/builtin-views/canvas/web.jsx +0 -121
- package/dist/builtin-views/chat/core.mjs +0 -684
- package/dist/builtin-views/chat/text.mjs +0 -101
- package/dist/builtin-views/chat/tui.mjs +0 -360
- package/dist/builtin-views/chat/web.jsx +0 -362
- package/dist/builtin-views/git-pr/core.mjs +0 -673
- package/dist/builtin-views/git-pr/text.mjs +0 -84
- package/dist/builtin-views/git-pr/tui.mjs +0 -301
- package/dist/builtin-views/git-pr/web.jsx +0 -216
- package/dist/builtin-views/inbox/_lib/render.mjs +0 -175
- package/dist/builtin-views/inbox/core.mjs +0 -1273
- package/dist/builtin-views/inbox/text.mjs +0 -73
- package/dist/builtin-views/inbox/tui.mjs +0 -314
- package/dist/builtin-views/inbox/web.jsx +0 -188
- package/dist/builtin-views/linkedin/core.mjs +0 -906
- package/dist/builtin-views/linkedin/text.mjs +0 -69
- package/dist/builtin-views/linkedin/tui.mjs +0 -413
- package/dist/builtin-views/linkedin/web.jsx +0 -206
- package/dist/builtin-views/prompt-review/core.mjs +0 -735
- package/dist/builtin-views/prompt-review/text.mjs +0 -15
- package/dist/builtin-views/prompt-review/tui.mjs +0 -196
- package/dist/builtin-views/prompt-review/web.jsx +0 -484
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.js +0 -50
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.ts +0 -53
- package/dist/builtin-views/workspace-sidebar/core.mjs +0 -670
- package/dist/builtin-views/workspace-sidebar/text.mjs +0 -53
- package/dist/builtin-views/workspace-sidebar/tui.mjs +0 -141
- package/dist/builtin-views/workspace-sidebar/web.jsx +0 -109
- package/dist/clients/attach/session/mode.d.ts +0 -25
- package/dist/clients/attach/session/mode.js +0 -97
- package/dist/commands/sys/promptstudio.d.ts +0 -2
- package/dist/commands/sys/promptstudio.js +0 -65
- package/dist/commands/view-cycle.d.ts +0 -2
- package/dist/commands/view-cycle.js +0 -130
- package/dist/commands/view-list.d.ts +0 -2
- package/dist/commands/view-list.js +0 -66
- package/dist/commands/view-new.d.ts +0 -2
- package/dist/commands/view-new.js +0 -74
- package/dist/commands/view-pick.d.ts +0 -6
- package/dist/commands/view-pick.js +0 -129
- package/dist/commands/view-run.d.ts +0 -2
- package/dist/commands/view-run.js +0 -214
- package/dist/commands/view.d.ts +0 -2
- package/dist/commands/view.js +0 -31
- package/dist/commands/workspace.d.ts +0 -2
- package/dist/commands/workspace.js +0 -165
- package/dist/core/__tests__/chat-view-reconnect.test.js +0 -105
- package/dist/core/__tests__/full/consult-startup-failure.test.js +0 -124
- package/dist/core/canvas/__tests__/human-work-outbox.test.js +0 -123
- package/dist/core/canvas/human-work-outbox.d.ts +0 -73
- package/dist/core/canvas/human-work-outbox.js +0 -261
- package/dist/core/command-plugins/store.d.ts +0 -16
- package/dist/core/command-plugins/store.js +0 -64
- package/dist/core/keybindings/__tests__/bespoke-consumers.test.js +0 -40
- package/dist/core/runtime/fault-recovery-nudge.d.ts +0 -3
- package/dist/core/runtime/fault-recovery-nudge.js +0 -3
- package/dist/core/tui/__tests__/host-keybindings.test.js +0 -113
- package/dist/core/tui/host.d.ts +0 -66
- package/dist/core/view/__tests__/transport-cache.test.js +0 -62
- package/dist/core/view/bridge.d.ts +0 -10
- package/dist/core/view/bridge.js +0 -31
- package/dist/core/view/chrome.d.ts +0 -9
- package/dist/core/view/chrome.js +0 -22
- package/dist/core/view/contract.d.ts +0 -205
- package/dist/core/view/contract.js +0 -23
- package/dist/core/view/loader.d.ts +0 -31
- package/dist/core/view/loader.js +0 -188
- package/dist/core/view/stream-local.d.ts +0 -3
- package/dist/core/view/stream-local.js +0 -231
- package/dist/core/view/transport-cache.d.ts +0 -8
- package/dist/core/view/transport-cache.js +0 -38
- package/dist/core/view/transport-local.d.ts +0 -7
- package/dist/core/view/transport-local.js +0 -83
- package/dist/core/view/transport-remote.d.ts +0 -2
- package/dist/core/view/transport.d.ts +0 -10
- package/dist/core/view/transport.js +0 -15
- package/dist/pi-extensions/naming-tool.d.ts +0 -24
- package/dist/pi-extensions/naming-tool.js +0 -67
- package/dist/prompts/view.d.ts +0 -7
- package/dist/prompts/view.js +0 -172
- package/dist/web/ViewChrome.d.ts +0 -7
- package/dist/web/ViewChrome.js +0 -28
- package/dist/web/ViewPane.d.ts +0 -39
- package/dist/web/ViewPane.js +0 -48
- package/dist/web/index.d.ts +0 -8
- package/dist/web/index.js +0 -22
- package/dist/web/runtime.d.ts +0 -39
- package/dist/web/runtime.js +0 -232
- package/dist/web/states.d.ts +0 -24
- package/dist/web/states.js +0 -24
- package/dist/web/transport-http.d.ts +0 -5
- package/dist/web/transport-http.js +0 -34
- package/dist/web/transport-stream.d.ts +0 -3
- package/dist/web/transport-stream.js +0 -204
- package/dist/web-client/assets/index-U_NZ66VE.js +0 -79
- package/dist/web-client/assets/index-aaeu4adv.css +0 -2
- /package/dist/{builtin-views/workspace-sidebar/__tests__/core.test.d.ts → clients/attach/__tests__/file-review-focus.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{visible-paths.test.d.ts → group-activity.test.d.ts} +0 -0
- /package/dist/{core/__tests__/chat-view-reconnect.test.d.ts → clients/attach/__tests__/input-controller-extension-command.test.d.ts} +0 -0
- /package/dist/{core/__tests__/full/consult-startup-failure.test.d.ts → clients/attach/__tests__/session-identity-refresh.test.d.ts} +0 -0
- /package/dist/{core/canvas/__tests__/human-work-outbox.test.d.ts → clients/inbox/__tests__/inbox-controller.test.d.ts} +0 -0
- /package/dist/{core/keybindings/__tests__/bespoke-consumers.test.d.ts → clients/inbox/__tests__/mount-panel.test.d.ts} +0 -0
- /package/dist/{core/tui/__tests__/host-keybindings.test.d.ts → clients/inbox/review/__tests__/editor-roundtrip.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-cache.test.d.ts → clients/inbox/review/__tests__/remap.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-remote.test.d.ts → clients/inbox/review/__tests__/review-core.test.d.ts} +0 -0
package/dist/core/canvas/db.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
// owns, so the db is authoritative for them.
|
|
7
7
|
import { DatabaseSync } from 'node:sqlite';
|
|
8
8
|
import { existsSync, readFileSync, readdirSync, appendFileSync } from 'node:fs';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { canvasDbPath, ensureHome, nodesRoot, nodeMetaPath } from './paths.js';
|
|
9
|
+
import { basename, join, resolve } from 'node:path';
|
|
10
|
+
import { canvasDbPath, ensureHome, isSafeNodeId, nodesRoot, nodeMetaPath } from './paths.js';
|
|
11
11
|
import { customExtensionPaths } from './extensions.js';
|
|
12
12
|
import { updateJsonFileDurably } from './meta-file.js';
|
|
13
13
|
// --- Schema as a forward-only migration list ------------------------------
|
|
@@ -448,46 +448,20 @@ function addMessageWaitGenerationColumn(db) {
|
|
|
448
448
|
const columns = nodeColumns(db);
|
|
449
449
|
addNodeColumnIfMissing(db, columns, 'waiting_for_generation', `ALTER TABLE nodes ADD COLUMN waiting_for_generation INTEGER NOT NULL DEFAULT 0;`);
|
|
450
450
|
}
|
|
451
|
-
/** v18 — the `consult_outbox` table
|
|
452
|
-
*
|
|
453
|
-
*
|
|
454
|
-
*
|
|
455
|
-
*
|
|
456
|
-
* only when the row is promoted armed→pending inside the SAME SQLite
|
|
457
|
-
* transaction that commits the fork's canonical final (`feed.ts
|
|
458
|
-
* commitCanonicalFinal`) — that atomicity is the whole point of the outbox:
|
|
459
|
-
* a crash between commit and dispatch still leaves a durable `pending` row
|
|
460
|
-
* for follow-up reconciliation to redeliver. `dir`/`root`/`request_id` bind
|
|
461
|
-
* the row back to the humanloop ticket + the exact follow-up request it
|
|
462
|
-
* answers, so a stale/superseded fork's late delivery is a no-op at the
|
|
463
|
-
* humanloop layer (compare-and-publish under `.followup-lock`), never here.
|
|
464
|
-
*
|
|
465
|
-
* NO foreign key on `node_id` (matches the authoritative design's schema
|
|
466
|
-
* exactly — it declares no FK at all): unlike the retired `triggers`/`wakeups`
|
|
467
|
-
* tables did, an
|
|
468
|
-
* unsettled (`armed`/`pending`) receipt is the ONLY durable record that a
|
|
469
|
-
* follow-up answer is still owed, and ordinary node pruning (`canvas.ts`
|
|
470
|
-
* `pruneNodes`) deletes terminal node rows + their `reports/` dirs on a
|
|
471
|
-
* routine schedule that has nothing to do with whether humanloop has
|
|
472
|
-
* actually accepted the delivery. A `nodes` cascade would let a prune race
|
|
473
|
-
* silently erase that receipt (and, once `final_report` is set, the report
|
|
474
|
-
* file itself) before follow-up reconciliation/delivery ever
|
|
475
|
-
* runs — the crash-safety net the whole table exists to provide. Only
|
|
476
|
-
* `acked`/`errored`/`canceled` rows are truly done; those are reaped by the
|
|
477
|
-
* outbox's own housekeeping, never by a `nodes` FK. Two composite indexes
|
|
478
|
-
* back the request-bound and ticket-bound DAO reads a `_consult`/`_deliver`
|
|
479
|
-
* caller needs (`getActiveFollowUpWorkByRequest`,
|
|
480
|
-
* `listActiveFollowUpWorkByDir` in human-work-outbox.ts) without scanning
|
|
481
|
-
* every row in the table. Additive, forward-only. */
|
|
451
|
+
/** v18 — create the historical `consult_outbox` table. The old schema stays
|
|
452
|
+
* replayable for existing databases until its later migration removes it.
|
|
453
|
+
* No current user-facing flow creates rows. Its remaining diagnostics and
|
|
454
|
+
* retention readers keep armed/pending legacy rows from losing their node
|
|
455
|
+
* before startup or crash reconciliation terminalizes those rows. */
|
|
482
456
|
function addHumanWorkOutboxTable(db) {
|
|
483
457
|
db.exec(`
|
|
484
458
|
CREATE TABLE IF NOT EXISTS consult_outbox (
|
|
485
|
-
node_id TEXT PRIMARY KEY, --
|
|
486
|
-
dir TEXT NOT NULL, -- ticket
|
|
487
|
-
root TEXT NOT NULL, -- registered root
|
|
488
|
-
request_id TEXT NOT NULL, --
|
|
459
|
+
node_id TEXT PRIMARY KEY, -- legacy work node id
|
|
460
|
+
dir TEXT NOT NULL, -- legacy ticket directory
|
|
461
|
+
root TEXT NOT NULL, -- legacy registered root
|
|
462
|
+
request_id TEXT NOT NULL, -- legacy request id
|
|
489
463
|
status TEXT NOT NULL, -- armed | pending | acked | errored | canceled
|
|
490
|
-
final_report TEXT, --
|
|
464
|
+
final_report TEXT, -- legacy final report basename
|
|
491
465
|
updated_at TEXT NOT NULL
|
|
492
466
|
);
|
|
493
467
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_status ON consult_outbox(status);
|
|
@@ -968,6 +942,196 @@ CREATE TABLE IF NOT EXISTS warm_pool (
|
|
|
968
942
|
CREATE INDEX IF NOT EXISTS idx_warm_pool_recipe ON warm_pool(recipe_key, created);
|
|
969
943
|
`);
|
|
970
944
|
}
|
|
945
|
+
/** v26 — narrow `consult_outbox` for the humanloop absorption into
|
|
946
|
+
* `src/core/human/` (absorb-humanloop
|
|
947
|
+
* design, "The human-work receipt table"; Landing 2 Part E task E2). The
|
|
948
|
+
* five-column trust binding (`handler_command`, `handler_args_json`,
|
|
949
|
+
* `claim_token`, `generation_id`, `interaction_snapshot`) existed only to let
|
|
950
|
+
* crtrd re-verify that a Visual event arrived through crouter's own
|
|
951
|
+
* registered handler argv — that registry is deleted in this landing, so
|
|
952
|
+
* there is nothing left to bind. `dir`/`root` collapse into `ticket_node_id`,
|
|
953
|
+
* the bridge node id a ticket's directory is derived from at every call site
|
|
954
|
+
* (`ticketDir(nodeId)` in `src/core/human/root.ts`) — `basename(dir)` IS that
|
|
955
|
+
* node id today, already relied on as such at
|
|
956
|
+
* `src/daemon/api/handlers/human.ts:290` (`const jobId = basename(dir)`) and
|
|
957
|
+
* `src/core/canvas/attention.ts:21`.
|
|
958
|
+
*
|
|
959
|
+
* THIS IS A TABLE REBUILD, NOT `ALTER TABLE … DROP COLUMN`: six of the nine
|
|
960
|
+
* existing indexes are on `dir` (`idx_consult_outbox_dir`,
|
|
961
|
+
* `idx_consult_outbox_dir_request_status`, `idx_consult_outbox_dir_status`
|
|
962
|
+
* from v18; `idx_consult_outbox_human_work_dir_status`,
|
|
963
|
+
* `idx_consult_outbox_human_work_request_status`, and the partial-unique
|
|
964
|
+
* `idx_consult_outbox_visual_request` from v19), and SQLite refuses
|
|
965
|
+
* `DROP COLUMN` on any indexed column. `ticket_node_id` cannot be a SQL
|
|
966
|
+
* DEFAULT either — SQLite has no `basename()` — so it is computed per row in
|
|
967
|
+
* JS: read every existing row through a prepared SELECT, insert each into a
|
|
968
|
+
* freshly created `consult_outbox_new` with `ticket_node_id = basename(dir)`,
|
|
969
|
+
* drop the old table (dropping its indexes with it), rename the new table
|
|
970
|
+
* into place, and recreate exactly five indexes on the narrowed shape. Every
|
|
971
|
+
* row is carried, including terminal ones, EXCEPT a row whose legacy `dir` is
|
|
972
|
+
* not a canonical direct child of its recorded `root`, or whose basename is
|
|
973
|
+
* not a safe node id — either would create an unaddressable or aliased ticket
|
|
974
|
+
* id once `root` is discarded. A warning names how many are dropped.
|
|
975
|
+
*
|
|
976
|
+
* THERE IS NO ROLLBACK. A sealed older runtime generation still running
|
|
977
|
+
* against this canvas.db fails on the Visual lane (`INSERT INTO
|
|
978
|
+
* consult_outbox (… dir, root, handler_command …)`) once this has run —
|
|
979
|
+
* acceptable because this migration lands WITH a generation roll
|
|
980
|
+
* (`npm run build && npm run install-runtime && crtr sys daemon restart`),
|
|
981
|
+
* never alongside one. Not self-transactional: like every ordinary migration
|
|
982
|
+
* it runs inside `migrate()`'s per-step `BEGIN IMMEDIATE`, so an interrupted
|
|
983
|
+
* run leaves `consult_outbox` exactly as it was (SQLite DDL is transactional)
|
|
984
|
+
* and a re-open resumes cleanly at the same step. */
|
|
985
|
+
function narrowHumanWorkOutbox(db) {
|
|
986
|
+
const rows = db
|
|
987
|
+
.prepare('SELECT node_id, dir, root, request_id, work_kind, status, final_report, updated_at FROM consult_outbox')
|
|
988
|
+
.all();
|
|
989
|
+
db.exec(`
|
|
990
|
+
CREATE TABLE consult_outbox_new (
|
|
991
|
+
node_id TEXT PRIMARY KEY,
|
|
992
|
+
ticket_node_id TEXT NOT NULL,
|
|
993
|
+
request_id TEXT NOT NULL,
|
|
994
|
+
work_kind TEXT NOT NULL DEFAULT 'follow_up',
|
|
995
|
+
status TEXT NOT NULL,
|
|
996
|
+
final_report TEXT,
|
|
997
|
+
updated_at TEXT NOT NULL
|
|
998
|
+
);
|
|
999
|
+
`);
|
|
1000
|
+
const insert = db.prepare(`
|
|
1001
|
+
INSERT INTO consult_outbox_new (node_id, ticket_node_id, request_id, work_kind, status, final_report, updated_at)
|
|
1002
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`);
|
|
1003
|
+
let dropped = 0;
|
|
1004
|
+
for (const row of rows) {
|
|
1005
|
+
const ticketNodeId = basename(row.dir);
|
|
1006
|
+
const directChild = row.root === resolve(row.root) && row.dir === join(row.root, ticketNodeId);
|
|
1007
|
+
if (!directChild || !isSafeNodeId(ticketNodeId)) {
|
|
1008
|
+
dropped += 1;
|
|
1009
|
+
continue;
|
|
1010
|
+
}
|
|
1011
|
+
insert.run(row.node_id, ticketNodeId, row.request_id, row.work_kind, row.status, row.final_report, row.updated_at);
|
|
1012
|
+
}
|
|
1013
|
+
if (dropped > 0) {
|
|
1014
|
+
console.warn(`[canvas migration v26] dropped ${dropped} consult_outbox row(s) whose legacy ticket path cannot safely map to a ticket node id`);
|
|
1015
|
+
}
|
|
1016
|
+
db.exec(`
|
|
1017
|
+
DROP TABLE consult_outbox;
|
|
1018
|
+
ALTER TABLE consult_outbox_new RENAME TO consult_outbox;
|
|
1019
|
+
|
|
1020
|
+
CREATE INDEX IF NOT EXISTS idx_consult_outbox_status ON consult_outbox(status);
|
|
1021
|
+
CREATE INDEX IF NOT EXISTS idx_consult_outbox_human_work_status ON consult_outbox(work_kind, status);
|
|
1022
|
+
CREATE INDEX IF NOT EXISTS idx_consult_outbox_ticket_status ON consult_outbox(ticket_node_id, work_kind, status);
|
|
1023
|
+
CREATE INDEX IF NOT EXISTS idx_consult_outbox_ticket_request_status ON consult_outbox(ticket_node_id, request_id, work_kind, status);
|
|
1024
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_consult_outbox_visual_request ON consult_outbox(ticket_node_id, request_id, work_kind) WHERE work_kind = 'visual';
|
|
1025
|
+
`);
|
|
1026
|
+
}
|
|
1027
|
+
/** v27 — the canonical daemon-owned review record. */
|
|
1028
|
+
function addReviewsTable(db) {
|
|
1029
|
+
db.exec(`
|
|
1030
|
+
CREATE TABLE IF NOT EXISTS reviews (
|
|
1031
|
+
review_id TEXT PRIMARY KEY,
|
|
1032
|
+
idempotency_key TEXT NOT NULL UNIQUE,
|
|
1033
|
+
origin_kind TEXT NOT NULL CHECK (origin_kind IN ('ticket', 'inline')),
|
|
1034
|
+
origin_node_id TEXT NOT NULL,
|
|
1035
|
+
bridge_node_id TEXT,
|
|
1036
|
+
companion_node_id TEXT NOT NULL UNIQUE,
|
|
1037
|
+
review_dir TEXT NOT NULL,
|
|
1038
|
+
file TEXT NOT NULL,
|
|
1039
|
+
origin_session_file TEXT NOT NULL,
|
|
1040
|
+
origin_session_id TEXT NOT NULL,
|
|
1041
|
+
origin_leaf_id TEXT NOT NULL,
|
|
1042
|
+
model_spec TEXT NOT NULL,
|
|
1043
|
+
branch_file TEXT NOT NULL,
|
|
1044
|
+
baseline_sha256 TEXT NOT NULL,
|
|
1045
|
+
baseline_bytes INTEGER NOT NULL,
|
|
1046
|
+
anchor_base_sha256 TEXT NOT NULL,
|
|
1047
|
+
anchor_base_bytes BLOB NOT NULL,
|
|
1048
|
+
state TEXT NOT NULL CHECK (state IN ('binding', 'open', 'approved', 'canceled')),
|
|
1049
|
+
created TEXT NOT NULL,
|
|
1050
|
+
captured_at TEXT NOT NULL,
|
|
1051
|
+
opened_at TEXT,
|
|
1052
|
+
output_path TEXT,
|
|
1053
|
+
subtitle TEXT,
|
|
1054
|
+
approved_at TEXT,
|
|
1055
|
+
approved_sha256 TEXT,
|
|
1056
|
+
changed INTEGER,
|
|
1057
|
+
comments_total INTEGER,
|
|
1058
|
+
comments_unresolved INTEGER,
|
|
1059
|
+
result_json TEXT,
|
|
1060
|
+
canceled_at TEXT,
|
|
1061
|
+
cancel_reason TEXT,
|
|
1062
|
+
cancel_actor TEXT,
|
|
1063
|
+
delivery_entry_id TEXT,
|
|
1064
|
+
delivered_at TEXT,
|
|
1065
|
+
delivery_error TEXT,
|
|
1066
|
+
projected_at TEXT,
|
|
1067
|
+
projection_error TEXT
|
|
1068
|
+
);
|
|
1069
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_state ON reviews(state);
|
|
1070
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_origin ON reviews(origin_node_id);
|
|
1071
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_file ON reviews(file);
|
|
1072
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_bridge ON reviews(bridge_node_id);
|
|
1073
|
+
`);
|
|
1074
|
+
}
|
|
1075
|
+
/** v28 — current review-comment projection and append-only comment audit. */
|
|
1076
|
+
function addReviewCommentTables(db) {
|
|
1077
|
+
db.exec(`
|
|
1078
|
+
CREATE TABLE IF NOT EXISTS review_comments (
|
|
1079
|
+
comment_id TEXT PRIMARY KEY,
|
|
1080
|
+
review_id TEXT NOT NULL,
|
|
1081
|
+
status TEXT NOT NULL CHECK (status IN ('open', 'resolved', 'deleted')),
|
|
1082
|
+
revision INTEGER NOT NULL,
|
|
1083
|
+
text TEXT NOT NULL,
|
|
1084
|
+
anchor_line INTEGER NOT NULL,
|
|
1085
|
+
anchor_end_line INTEGER NOT NULL,
|
|
1086
|
+
anchor_col_start INTEGER,
|
|
1087
|
+
anchor_col_end INTEGER,
|
|
1088
|
+
anchor_quote TEXT,
|
|
1089
|
+
anchor_line_text TEXT NOT NULL,
|
|
1090
|
+
anchor_doc_hash TEXT NOT NULL,
|
|
1091
|
+
author_kind TEXT NOT NULL CHECK (author_kind IN ('human', 'node')),
|
|
1092
|
+
author_node_id TEXT,
|
|
1093
|
+
updated_by_kind TEXT NOT NULL CHECK (updated_by_kind IN ('human', 'node')),
|
|
1094
|
+
updated_by_node_id TEXT,
|
|
1095
|
+
created_at TEXT NOT NULL,
|
|
1096
|
+
updated_at TEXT NOT NULL,
|
|
1097
|
+
resolved_at TEXT,
|
|
1098
|
+
deleted_at TEXT,
|
|
1099
|
+
created_seq INTEGER NOT NULL
|
|
1100
|
+
);
|
|
1101
|
+
CREATE TABLE IF NOT EXISTS review_comment_events (
|
|
1102
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1103
|
+
review_id TEXT NOT NULL,
|
|
1104
|
+
comment_id TEXT NOT NULL,
|
|
1105
|
+
kind TEXT NOT NULL CHECK (kind IN ('created', 'edited', 'resolved', 'reopened', 'deleted', 'reanchored', 'notified', 'notify_failed')),
|
|
1106
|
+
state_change INTEGER NOT NULL,
|
|
1107
|
+
revision_after INTEGER,
|
|
1108
|
+
actor_kind TEXT NOT NULL CHECK (actor_kind IN ('human', 'node', 'system')),
|
|
1109
|
+
actor_node_id TEXT,
|
|
1110
|
+
at TEXT NOT NULL,
|
|
1111
|
+
operation_id TEXT NOT NULL,
|
|
1112
|
+
payload TEXT
|
|
1113
|
+
);
|
|
1114
|
+
CREATE INDEX IF NOT EXISTS idx_review_comments_review_line_seq
|
|
1115
|
+
ON review_comments(review_id, anchor_line, created_seq);
|
|
1116
|
+
CREATE INDEX IF NOT EXISTS idx_review_comments_review_status
|
|
1117
|
+
ON review_comments(review_id, status);
|
|
1118
|
+
CREATE INDEX IF NOT EXISTS idx_review_comment_events_review_seq
|
|
1119
|
+
ON review_comment_events(review_id, seq);
|
|
1120
|
+
CREATE INDEX IF NOT EXISTS idx_review_comment_events_comment_seq
|
|
1121
|
+
ON review_comment_events(comment_id, seq);
|
|
1122
|
+
`);
|
|
1123
|
+
}
|
|
1124
|
+
/** v29 — durable review-comment anchor disposition. v28 is already released, so this corrects both fresh and migrated databases without rewriting its historical schema. */
|
|
1125
|
+
function addReviewCommentAnchorState(db) {
|
|
1126
|
+
db.exec(`
|
|
1127
|
+
ALTER TABLE review_comments
|
|
1128
|
+
ADD COLUMN anchor_state TEXT NOT NULL DEFAULT 'live' CHECK (anchor_state IN ('live', 'detached'));
|
|
1129
|
+
`);
|
|
1130
|
+
}
|
|
1131
|
+
/** v30 — remove the retired human-work receipt table after every runtime reader is gone. */
|
|
1132
|
+
function dropConsultOutbox(db) {
|
|
1133
|
+
db.exec('DROP TABLE IF EXISTS consult_outbox');
|
|
1134
|
+
}
|
|
971
1135
|
/** The ordered migration list. Index `i` is migration version `i + 1`; the db's
|
|
972
1136
|
* `user_version` tracks how many have been applied. Append only. */
|
|
973
1137
|
export const MIGRATIONS = [
|
|
@@ -998,6 +1162,11 @@ export const MIGRATIONS = [
|
|
|
998
1162
|
/* v23 */ addCronRunPidIdentityColumn,
|
|
999
1163
|
/* v24 */ addCronOutOfBandColumn,
|
|
1000
1164
|
/* v25 */ addWarmPoolTable,
|
|
1165
|
+
/* v26 */ narrowHumanWorkOutbox,
|
|
1166
|
+
/* v27 */ addReviewsTable,
|
|
1167
|
+
/* v28 */ addReviewCommentTables,
|
|
1168
|
+
/* v29 */ addReviewCommentAnchorState,
|
|
1169
|
+
/* v30 */ dropConsultOutbox,
|
|
1001
1170
|
];
|
|
1002
1171
|
/** Migration indexes that manage their OWN transaction and therefore must not
|
|
1003
1172
|
* be wrapped by `migrate()` — `node:sqlite` rejects a nested BEGIN. Index 3
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CANVAS_EXTENSION_NAMES: readonly ["canvas-inbox-watcher", "canvas-stophook", "canvas-recap", "canvas-goal-capture", "canvas-passive-context", "canvas-context-intro", "canvas-tool-guide", "canvas-doc-substrate", "canvas-structured-output", "canvas-bash-valve"];
|
|
1
|
+
export declare const CANVAS_EXTENSION_NAMES: readonly ["canvas-inbox-watcher", "canvas-review-boundary", "canvas-stophook", "canvas-recap", "canvas-goal-capture", "canvas-passive-context", "canvas-context-intro", "canvas-tool-guide", "canvas-doc-substrate", "canvas-structured-output", "canvas-bash-valve"];
|
|
2
2
|
/** Remove a complete persisted canvas prefix while retaining every genuine
|
|
3
3
|
* caller/kind extra, including a custom extension whose basename happens to
|
|
4
4
|
* resemble a canvas hook. */
|
|
@@ -3,12 +3,19 @@
|
|
|
3
3
|
// canvas-inbox-watcher must load before canvas-stophook: at agent_settled it
|
|
4
4
|
// commits the cursor the stophook then reads to decide idle release.
|
|
5
5
|
export const CANVAS_EXTENSION_NAMES = [
|
|
6
|
-
'canvas-inbox-watcher', 'canvas-stophook', 'canvas-recap',
|
|
6
|
+
'canvas-inbox-watcher', 'canvas-review-boundary', 'canvas-stophook', 'canvas-recap',
|
|
7
7
|
'canvas-goal-capture', 'canvas-passive-context', 'canvas-context-intro',
|
|
8
8
|
'canvas-tool-guide', 'canvas-doc-substrate', 'canvas-structured-output',
|
|
9
9
|
'canvas-bash-valve',
|
|
10
10
|
];
|
|
11
11
|
const HISTORICAL_CANVAS_EXTENSION_PREFIXES = [
|
|
12
|
+
[
|
|
13
|
+
'canvas-inbox-watcher', 'canvas-stophook', 'canvas-recap',
|
|
14
|
+
'canvas-goal-capture', 'canvas-passive-context', 'canvas-review-boundary',
|
|
15
|
+
'canvas-context-intro',
|
|
16
|
+
'canvas-tool-guide', 'canvas-doc-substrate', 'canvas-structured-output',
|
|
17
|
+
'canvas-bash-valve',
|
|
18
|
+
],
|
|
12
19
|
[
|
|
13
20
|
'canvas-inbox-watcher', 'canvas-stophook', 'canvas-recap',
|
|
14
21
|
'canvas-goal-capture', 'canvas-passive-context', 'canvas-context-intro',
|
|
@@ -10,7 +10,7 @@ export declare function cSubscriptions(id: string): SubscriptionRef[];
|
|
|
10
10
|
export declare function cSubscribers(id: string): SubscriptionRef[];
|
|
11
11
|
/** First manager (by created) — the UP step for the ancestry spine. */
|
|
12
12
|
export declare function managerOf(id: string): string | undefined;
|
|
13
|
-
/** A kind:'human' node is a control-plane ASK (a
|
|
13
|
+
/** A kind:'human' node is a control-plane ASK (a deck on the human's
|
|
14
14
|
* screen), NOT a pi conversation — it has no session, so focusing/reviving it
|
|
15
15
|
* boots a confused blank "you have been revived" pi. Its pending-ask signal
|
|
16
16
|
* already rides the ⚑ badge on the ASKING node (attention.ts follows the
|
|
@@ -101,7 +101,7 @@ export function cSubscribers(id) {
|
|
|
101
101
|
export function managerOf(id) {
|
|
102
102
|
return cSubscribers(id)[0]?.node_id;
|
|
103
103
|
}
|
|
104
|
-
/** A kind:'human' node is a control-plane ASK (a
|
|
104
|
+
/** A kind:'human' node is a control-plane ASK (a deck on the human's
|
|
105
105
|
* screen), NOT a pi conversation — it has no session, so focusing/reviving it
|
|
106
106
|
* boots a confused blank "you have been revived" pi. Its pending-ask signal
|
|
107
107
|
* already rides the ⚑ badge on the ASKING node (attention.ts follows the
|
|
@@ -16,6 +16,11 @@ export declare function canvasDbPath(): string;
|
|
|
16
16
|
* it binds. */
|
|
17
17
|
export declare function viewSocketPath(nodeId: string): string;
|
|
18
18
|
export declare function nodesRoot(): string;
|
|
19
|
+
export declare function reviewsRoot(): string;
|
|
20
|
+
export declare function reviewDir(reviewId: string): string;
|
|
21
|
+
export declare function reviewBranchPath(reviewId: string): string;
|
|
22
|
+
export declare function reviewResultPath(reviewId: string): string;
|
|
23
|
+
export declare function ensureReviewDir(reviewId: string): void;
|
|
19
24
|
/** Absolute path to crtrd's API listener unix socket, a sibling of
|
|
20
25
|
* `canvasDbPath()` under the canvas home (`~/.crouter/canvas/crtrd.sock` unless
|
|
21
26
|
* `CRTR_HOME` is set). Pure path builder — no db reach — so both the daemon
|
|
@@ -47,6 +47,22 @@ export function viewSocketPath(nodeId) {
|
|
|
47
47
|
export function nodesRoot() {
|
|
48
48
|
return join(crtrHome(), 'nodes');
|
|
49
49
|
}
|
|
50
|
+
export function reviewsRoot() {
|
|
51
|
+
return join(crtrHome(), 'reviews');
|
|
52
|
+
}
|
|
53
|
+
export function reviewDir(reviewId) {
|
|
54
|
+
assertSafeNodeId(reviewId);
|
|
55
|
+
return join(reviewsRoot(), reviewId);
|
|
56
|
+
}
|
|
57
|
+
export function reviewBranchPath(reviewId) {
|
|
58
|
+
return join(reviewDir(reviewId), 'branch-point.jsonl');
|
|
59
|
+
}
|
|
60
|
+
export function reviewResultPath(reviewId) {
|
|
61
|
+
return join(reviewDir(reviewId), 'result.json');
|
|
62
|
+
}
|
|
63
|
+
export function ensureReviewDir(reviewId) {
|
|
64
|
+
mkdirSync(reviewDir(reviewId), { recursive: true, mode: 0o700 });
|
|
65
|
+
}
|
|
50
66
|
/** Absolute path to crtrd's API listener unix socket, a sibling of
|
|
51
67
|
* `canvasDbPath()` under the canvas home (`~/.crouter/canvas/crtrd.sock` unless
|
|
52
68
|
* `CRTR_HOME` is set). Pure path builder — no db reach — so both the daemon
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// remote-canvas-source.ts — a CanvasSource backed by a remote canvas over the
|
|
2
|
-
// relay-token-authed `/__crtr/source` transport (see `transport
|
|
2
|
+
// relay-token-authed `/__crtr/source` transport (see `remote-transport.ts`).
|
|
3
3
|
// Every method shells out to an EXISTING `crtr --json <subcommand>` in-guest —
|
|
4
4
|
// no new in-guest command, no remote SQLite read, no drive-plane verb. A
|
|
5
5
|
// short-TTL cache coalesces the fan-out a single browse/inspect frame would
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// crtrd `/v1` API. Repointing remote canvases at a crtrd proxy shell is a P2
|
|
11
11
|
// item; until then this subsystem is a settled, intentional exception to the
|
|
12
12
|
// "every process is a /v1 client" architecture (which governs LOCAL access).
|
|
13
|
-
import { createRemoteExec } from '
|
|
13
|
+
import { createRemoteExec } from './remote-transport.js';
|
|
14
14
|
const CACHE_TTL_MS = 1000;
|
|
15
15
|
// ---------------------------------------------------------------------------
|
|
16
16
|
// Remote JSON shape validation.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface RemoteExecResponse {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
exitCode?: number;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createRemoteExec(previewEndpoint: string, relayToken: string, timeoutMs?: number): (bin: string, args: string[]) => Promise<RemoteExecResponse>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
// transport
|
|
2
|
-
// RemoteCanvasSource. POSTs
|
|
3
|
-
// `/__crtr/source` route
|
|
4
|
-
// browser/web transport already speaks), bearer-authed with the relay token.
|
|
1
|
+
// remote-transport.ts — the Node-side remote exec transport for a
|
|
2
|
+
// RemoteCanvasSource. POSTs an exec request to a Blaxel preview endpoint's
|
|
3
|
+
// `/__crtr/source` route, bearer-authed with the relay token.
|
|
5
4
|
//
|
|
6
5
|
// This is the ONLY way RemoteCanvasSource reaches the remote canvas: it never
|
|
7
6
|
// reads a remote SQLite file, and it never invokes an in-guest command that
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getNode, getRow, listNodes, subscriptionsOf, subscribersOf, view, hasActiveLiveSubscription, } from './canvas.js';
|
|
2
2
|
import { ticketCountsForNodes } from './attention.js';
|
|
3
3
|
import { readState } from '../config.js';
|
|
4
|
-
import { resolveRemoteCanvasTarget } from '../
|
|
4
|
+
import { resolveRemoteCanvasTarget } from '../remote-canvas-target.js';
|
|
5
5
|
import { RemoteCanvasSource } from './remote-canvas-source.js';
|
|
6
6
|
export class LocalCanvasSource {
|
|
7
7
|
async getNode(nodeId) {
|
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
// status-glyph.ts — the canonical status
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// STATUS_COLOR literals those two files used to carry.
|
|
5
|
-
//
|
|
6
|
-
// SCOPE: only the surfaces the hanging-node feature touches. The workspace rail,
|
|
7
|
-
// feed/push roster, and attach chat-view keep their own glyph copies (out of
|
|
8
|
-
// scope). The portable `.mjs` canvas monitor view CANNOT import this (TS dist) —
|
|
9
|
-
// it carries its own mirrored map with a pointer back to fault.ts.
|
|
10
|
-
//
|
|
11
|
-
// OVERLAY PRECEDENCE: hanging > streaming > status. `hanging` and `streaming` are
|
|
1
|
+
// status-glyph.ts — the canonical status glyph and color map used by the canvas
|
|
2
|
+
// ASCII forest and interactive browser. The overlay precedence is
|
|
3
|
+
// hanging > streaming > status. `hanging` and `streaming` are
|
|
12
4
|
// mutually exclusive in practice (hanging means the turn ended, so `busy` is
|
|
13
5
|
// gone) but the precedence is defined regardless.
|
|
14
6
|
import { FAULT_QUIET_MS } from '../runtime/fault.js';
|
|
@@ -20,7 +12,7 @@ export const STATUS_GLYPH = {
|
|
|
20
12
|
dead: '✗',
|
|
21
13
|
canceled: '⊘',
|
|
22
14
|
};
|
|
23
|
-
// ── Status hue: numeric SGR codes per status
|
|
15
|
+
// ── Status hue: numeric SGR codes per status. ─────────────────────────────────
|
|
24
16
|
// Reinforces the glyph; the glyph SHAPE stays the NO_COLOR carrier.
|
|
25
17
|
export const STATUS_COLOR = {
|
|
26
18
|
active: 32, // green
|
|
@@ -56,30 +56,14 @@ export interface ManagedWorktree {
|
|
|
56
56
|
created: string;
|
|
57
57
|
closed?: string;
|
|
58
58
|
}
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
export
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
} | {
|
|
68
|
-
work_kind: 'visual';
|
|
69
|
-
dir: string;
|
|
70
|
-
request_id: string;
|
|
71
|
-
root: string;
|
|
72
|
-
};
|
|
73
|
-
/** Whether a private human-work fork still needs its first writable Pi session
|
|
74
|
-
* created from immutable provenance, or has bound that child session and can
|
|
75
|
-
* only resume it. */
|
|
76
|
-
export type PrivateForkPhase = 'fork_pending' | 'session_started';
|
|
77
|
-
/** The one-shot portion of a private fork's persisted launch recipe. The other
|
|
78
|
-
* immutable recipe facts stay in their existing canonical fields:
|
|
79
|
-
* `NodeIdentity.fork_from` is the absolute provenance file and
|
|
80
|
-
* `LaunchSpec.model` with `modelExact` is the exact runtime selection. */
|
|
81
|
-
export interface PrivateForkRecipe {
|
|
82
|
-
kickoff: string;
|
|
59
|
+
/** Immutable review-companion provenance. The origin session/leaf/model
|
|
60
|
+
* coordinates remain canonical in the review row rather than being duplicated
|
|
61
|
+
* into node metadata. */
|
|
62
|
+
export interface ReviewBinding {
|
|
63
|
+
review_id: string;
|
|
64
|
+
origin_node_id: string;
|
|
65
|
+
branch_file: string;
|
|
66
|
+
target_file: string;
|
|
83
67
|
}
|
|
84
68
|
/** A node's DURABLE IDENTITY — the subset that `meta.json` persists on disk.
|
|
85
69
|
* Written rarely (birth, polymorph, session-id capture, naming); never touched
|
|
@@ -147,17 +131,8 @@ export interface NodeIdentity {
|
|
|
147
131
|
* (without it a fork impersonates its source). Undefined for a fresh node;
|
|
148
132
|
* identity/audit only. */
|
|
149
133
|
fork_from?: string | null;
|
|
150
|
-
/** Immutable
|
|
151
|
-
|
|
152
|
-
* lifecycle child exists to answer. Undefined for ordinary nodes. */
|
|
153
|
-
human_work_target?: HumanWorkTarget | null;
|
|
154
|
-
/** Private fork birth is explicit across the pre-session crash boundary.
|
|
155
|
-
* `fork_pending` launches only from the immutable provenance + kickoff;
|
|
156
|
-
* `session_started` launches only from the bound child session. */
|
|
157
|
-
private_fork_phase?: PrivateForkPhase | null;
|
|
158
|
-
/** Persisted one-shot kickoff for `fork_pending`; ignored after the child
|
|
159
|
-
* session is bound. See `PrivateForkRecipe` for the rest of the recipe. */
|
|
160
|
-
private_fork_recipe?: PrivateForkRecipe | null;
|
|
134
|
+
/** Immutable review-companion binding. Undefined for ordinary nodes. */
|
|
135
|
+
review_binding?: ReviewBinding | null;
|
|
161
136
|
/** New subscriptions this node opens default to passive when true. */
|
|
162
137
|
passive_default?: boolean;
|
|
163
138
|
/** The pi session id for `--session <id>` revival. */
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
/** Write `text` to the system clipboard. Returns true on success, false when no
|
|
2
2
|
* clipboard tool is available or every attempt failed. Never throws. */
|
|
3
3
|
export declare function writeClipboardText(text: string): boolean;
|
|
4
|
+
/** Write `text` to the system clipboard AND, inside tmux, to the tmux paste
|
|
5
|
+
* buffer via `tmux load-buffer -w -` (which makes tmux emit OSC 52 outward on
|
|
6
|
+
* the app's behalf). Never emits OSC 52 from this process. Never throws.
|
|
7
|
+
* Returns which operations succeeded. */
|
|
8
|
+
export declare function writeClipboardTextEverywhere(text: string): {
|
|
9
|
+
system: boolean;
|
|
10
|
+
tmux: boolean;
|
|
11
|
+
};
|
|
@@ -37,3 +37,21 @@ export function writeClipboardText(text) {
|
|
|
37
37
|
}
|
|
38
38
|
return false;
|
|
39
39
|
}
|
|
40
|
+
/** Write `text` to the system clipboard AND, inside tmux, to the tmux paste
|
|
41
|
+
* buffer via `tmux load-buffer -w -` (which makes tmux emit OSC 52 outward on
|
|
42
|
+
* the app's behalf). Never emits OSC 52 from this process. Never throws.
|
|
43
|
+
* Returns which operations succeeded. */
|
|
44
|
+
export function writeClipboardTextEverywhere(text) {
|
|
45
|
+
const system = writeClipboardText(text);
|
|
46
|
+
let tmux = false;
|
|
47
|
+
if (process.env.TMUX !== undefined) {
|
|
48
|
+
const result = spawnSync('tmux', ['load-buffer', '-w', '-'], {
|
|
49
|
+
input: text,
|
|
50
|
+
timeout: SPAWN_TIMEOUT_MS,
|
|
51
|
+
encoding: 'utf-8',
|
|
52
|
+
});
|
|
53
|
+
// Success if no error and exit status 0.
|
|
54
|
+
tmux = !result.error && result.status === 0;
|
|
55
|
+
}
|
|
56
|
+
return { system, tmux };
|
|
57
|
+
}
|
|
@@ -25,9 +25,7 @@ export interface ContributorIssue extends CommandManifestIssue {
|
|
|
25
25
|
contributor: CommandContributorRef;
|
|
26
26
|
}
|
|
27
27
|
/** Invocation-local registry snapshot after collision resolution: the accepted
|
|
28
|
-
* contributions and every discovered issue.
|
|
29
|
-
* machinery, so there is no owner-routing map — an unknown-token miss hydrates
|
|
30
|
-
* ALL absent-store registrations once (§5.1), never a single known owner. */
|
|
28
|
+
* contributions and every discovered issue. */
|
|
31
29
|
export interface CommandRegistrySnapshot {
|
|
32
30
|
/** Accepted top-level contributions, deterministically ordered by
|
|
33
31
|
* contributor name. */
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ValidatedCommandManifest } from '../command-manifests/manifest.js';
|
|
2
|
+
export interface BundleIssue {
|
|
3
|
+
code: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
message: string;
|
|
6
|
+
received: string;
|
|
7
|
+
expected: string;
|
|
8
|
+
next: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ValidatedBundle {
|
|
11
|
+
bundleVersion: 1;
|
|
12
|
+
commands: ValidatedCommandManifest;
|
|
13
|
+
commandsBytes: Uint8Array;
|
|
14
|
+
directories: ReadonlyArray<{
|
|
15
|
+
path: string;
|
|
16
|
+
}>;
|
|
17
|
+
memory: ReadonlyArray<{
|
|
18
|
+
path: string;
|
|
19
|
+
bytes: Uint8Array;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface PluginBundleValidation {
|
|
23
|
+
bundle?: ValidatedBundle;
|
|
24
|
+
issues: BundleIssue[];
|
|
25
|
+
}
|
|
26
|
+
/** Validate a Core-served plugin directory archive entirely in memory. */
|
|
27
|
+
export declare function validatePluginBundle(archive: Uint8Array, options: {
|
|
28
|
+
reservedCoreNames: ReadonlySet<string>;
|
|
29
|
+
}): Promise<PluginBundleValidation>;
|