@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
|
@@ -3,30 +3,25 @@
|
|
|
3
3
|
//
|
|
4
4
|
// A node's editor label is `<mode-icon> <name> <kind>` (see editorLabel in
|
|
5
5
|
// labels.ts). The `<name>` is a 3-8 word kebab-case "description" derived from
|
|
6
|
-
// the first prompt by asking
|
|
7
|
-
//
|
|
6
|
+
// the first prompt by asking Pi headlessly, persisted on the node's meta so it
|
|
7
|
+
// survives revives and updates the live session name.
|
|
8
8
|
//
|
|
9
9
|
// The namer returns a STRUCTURED result — {name, icon} — produced by constrained
|
|
10
|
-
// sampling
|
|
11
|
-
//
|
|
10
|
+
// sampling through the one-shot `name_session` tool, not by parsing prose. The
|
|
11
|
+
// icon is a Nerd Font glyph the model picks freely
|
|
12
12
|
// (guided by example blocks, not a closed enum) and is stored as its own meta
|
|
13
13
|
// field, so each surface decides whether to render it.
|
|
14
14
|
//
|
|
15
|
-
// One entry point: generateAndPersistName — async
|
|
15
|
+
// One entry point: generateAndPersistName — async and non-blocking.
|
|
16
16
|
// Naming happens INSIDE the named node's own pi process, off the first real
|
|
17
17
|
// message (the kickoff task or a human's first line), never on the spawn path:
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
18
|
+
// the one-shot runs asynchronously, so it delays only its eventual label. The
|
|
19
|
+
// headless namer loads only provider rotation, so it carries no canvas hooks and
|
|
20
|
+
// cannot recurse into spawn/name.
|
|
21
21
|
//
|
|
22
22
|
// Best-effort: a failed/slow/garbled pi call falls back to a local slug of the
|
|
23
23
|
// prompt, so a node always gets a sane name.
|
|
24
|
-
import {
|
|
25
|
-
import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
26
|
-
import { tmpdir } from 'node:os';
|
|
27
|
-
import { join } from 'node:path';
|
|
28
|
-
import { bundledPiSubprocessEnv, resolveBundledPiCliPath } from './pi-cli.js';
|
|
29
|
-
import { NAMING_TOOL_PATH } from './canvas-extensions.js';
|
|
24
|
+
import { headlessText, headlessToolCall } from './headless-pi.js';
|
|
30
25
|
import { defaultProvider, modelLadders, stripThinkingSuffix } from './model-selection.js';
|
|
31
26
|
/** Cap on prompt text fed to the namer — a name needs only the gist. */
|
|
32
27
|
const PROMPT_CAP = 2000;
|
|
@@ -76,12 +71,12 @@ const NAME_SYSTEM_PROMPT = 'You name coding-agent work sessions. The name is a l
|
|
|
76
71
|
'is actually about something.\n\n' +
|
|
77
72
|
'Generic fallback set, by kind of work:\n' +
|
|
78
73
|
ICON_EXAMPLES;
|
|
79
|
-
/** Put the
|
|
80
|
-
* model reads the
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
function nameUserPrompt(
|
|
84
|
-
return `<
|
|
74
|
+
/** Put the source text FIRST in a delimited block, then the instruction, so the
|
|
75
|
+
* model reads the work before being told what to do and never mistakes source
|
|
76
|
+
* text for the instruction. The source is capped first, so the closing tag is
|
|
77
|
+
* always present. */
|
|
78
|
+
function nameUserPrompt(source, sourceCap = PROMPT_CAP) {
|
|
79
|
+
return `<source>\n${source.slice(0, sourceCap)}\n</source>\n\nName this session based on the work described above, and pick an icon depicting it. Call \`name_session\` once, then stop.`;
|
|
85
80
|
}
|
|
86
81
|
/** A short stop-word set so the local-slug fallback skips filler words. */
|
|
87
82
|
const STOPWORDS = new Set([
|
|
@@ -114,63 +109,43 @@ export function slugFromPrompt(prompt) {
|
|
|
114
109
|
return sanitizeSessionName(picked.join('-')) || 'session';
|
|
115
110
|
}
|
|
116
111
|
/** The namer's model: the `light` rung of the DEFAULT provider's ladder, with
|
|
117
|
-
* any thinking suffix stripped
|
|
118
|
-
*
|
|
119
|
-
* ladder rather than pinning a concrete model id keeps naming working for a
|
|
112
|
+
* any thinking suffix stripped because the one-shot session uses thinking off.
|
|
113
|
+
* Reading the ladder rather than pinning a concrete model id keeps naming working for a
|
|
120
114
|
* user who never configured Anthropic: an OpenAI default provider resolves to
|
|
121
115
|
* its own light rung. `CRTR_NAME_MODEL` still overrides. */
|
|
122
|
-
function
|
|
123
|
-
const override = process.env[
|
|
116
|
+
export function lightModel(overrideEnv) {
|
|
117
|
+
const override = overrideEnv === undefined ? undefined : process.env[overrideEnv];
|
|
124
118
|
if (override !== undefined && override.trim() !== '')
|
|
125
119
|
return override.trim();
|
|
126
120
|
const ladders = modelLadders();
|
|
127
121
|
return stripThinkingSuffix(ladders[defaultProvider(ladders)].light);
|
|
128
122
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'--no-skills',
|
|
140
|
-
'--no-prompt-templates',
|
|
141
|
-
'--no-themes',
|
|
142
|
-
'--no-tools',
|
|
143
|
-
'--mode', 'text',
|
|
144
|
-
// A trivial one-line classification — no thinking budget, ever.
|
|
145
|
-
'--thinking', 'off',
|
|
146
|
-
'--model', model,
|
|
147
|
-
'--system-prompt', systemPrompt,
|
|
148
|
-
userPrompt,
|
|
149
|
-
];
|
|
150
|
-
}
|
|
151
|
-
/** The pi argv for a headless STRUCTURED name request: same stripped-down run,
|
|
152
|
-
* but with the naming tool loaded explicitly (`-e` still works under
|
|
153
|
-
* `--no-extensions`) and the tool allowlist narrowed to it, so the model's only
|
|
154
|
-
* possible action is one constrained-schema emission. */
|
|
155
|
-
function nameArgs(prompt) {
|
|
156
|
-
return [
|
|
157
|
-
'-p',
|
|
158
|
-
'--no-session',
|
|
159
|
-
'--no-context-files',
|
|
160
|
-
'--no-extensions',
|
|
161
|
-
'--no-skills',
|
|
162
|
-
'--no-prompt-templates',
|
|
163
|
-
'--no-themes',
|
|
164
|
-
'-e', NAMING_TOOL_PATH,
|
|
165
|
-
'--tools', 'name_session',
|
|
166
|
-
'--mode', 'text',
|
|
167
|
-
// A trivial one-shot classification — no thinking budget, ever.
|
|
168
|
-
'--thinking', 'off',
|
|
169
|
-
'--model', nameModel(),
|
|
170
|
-
'--system-prompt', NAME_SYSTEM_PROMPT,
|
|
171
|
-
nameUserPrompt(prompt),
|
|
172
|
-
];
|
|
123
|
+
function nameModelRequest() {
|
|
124
|
+
const override = process.env['CRTR_NAME_MODEL'];
|
|
125
|
+
if (override !== undefined && override.trim() !== '')
|
|
126
|
+
return { modelSpec: override.trim() };
|
|
127
|
+
const ladders = modelLadders();
|
|
128
|
+
const provider = defaultProvider(ladders);
|
|
129
|
+
return {
|
|
130
|
+
modelSpec: stripThinkingSuffix(ladders[provider].light),
|
|
131
|
+
modelIntent: `${provider}/light`,
|
|
132
|
+
};
|
|
173
133
|
}
|
|
134
|
+
const NAME_SESSION_SCHEMA = {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
name: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'A 3-8 word kebab-case session name: lowercase words joined by single hyphens, e.g. refactor-auth-token-flow. No punctuation, quotes, or prose.',
|
|
140
|
+
},
|
|
141
|
+
icon: {
|
|
142
|
+
type: 'string',
|
|
143
|
+
description: 'The Nerd Font glyph depicting this session, as a codepoint in U+XXXX form (e.g. U+F188).',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
required: ['name', 'icon'],
|
|
147
|
+
additionalProperties: false,
|
|
148
|
+
};
|
|
174
149
|
/** Normalize a model-supplied icon to a single renderable glyph, or '' when
|
|
175
150
|
* nothing usable came back.
|
|
176
151
|
*
|
|
@@ -206,64 +181,41 @@ export function sanitizeIcon(raw) {
|
|
|
206
181
|
return '';
|
|
207
182
|
return points[0].codePointAt(0) >= 0x2000 ? trimmed : '';
|
|
208
183
|
}
|
|
209
|
-
/** Ask
|
|
210
|
-
* to a sanitized SessionName, or `{name:'',icon:''}` on
|
|
211
|
-
*
|
|
212
|
-
* a local slug. Owns the subprocess mechanics — crucially it hands pi an
|
|
213
|
-
* immediate stdin EOF: `pi -p` reads stdin, and execFile's default stdin is an
|
|
214
|
-
* OPEN pipe that never closes, so without this pi blocks waiting for EOF and
|
|
215
|
-
* the call exits non-zero (the regression that silently lost every LLM name to
|
|
216
|
-
* the slug fallback).
|
|
184
|
+
/** Ask Pi headlessly for a structured {name, icon} for `body`, async. Resolves
|
|
185
|
+
* to a sanitized SessionName, or `{name:'',icon:''}` on timeout, a missing tool
|
|
186
|
+
* call, or a malformed emission so the caller can fall back to a local slug.
|
|
217
187
|
*
|
|
218
188
|
* Exported (not just for tests): the canvas-coupled persistence wrapper
|
|
219
189
|
* generateAndPersistName lives in naming-persist.ts to keep this module
|
|
220
190
|
* canvas-free, and imports this pure helper. */
|
|
221
|
-
export function headlessName(body) {
|
|
191
|
+
export async function headlessName(body, sourceCap = PROMPT_CAP) {
|
|
222
192
|
const empty = { name: '', icon: '' };
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
};
|
|
237
|
-
const child = execFile(process.execPath, [resolveBundledPiCliPath(), ...nameArgs(body)], {
|
|
238
|
-
encoding: 'utf8',
|
|
239
|
-
timeout: NAME_TIMEOUT_MS,
|
|
240
|
-
env: { ...bundledPiSubprocessEnv(), CRTR_NAME_RESULT_FILE: resultFile },
|
|
241
|
-
}, () => {
|
|
242
|
-
// The tool call is the ONLY channel: a non-zero exit still counts when
|
|
243
|
-
// the emission already landed (pi print-mode can exit oddly after a
|
|
244
|
-
// terminating tool), and a clean exit without the file is a failure.
|
|
245
|
-
try {
|
|
246
|
-
const parsed = JSON.parse(readFileSync(resultFile, 'utf8'));
|
|
247
|
-
const name = sanitizeSessionName(typeof parsed['name'] === 'string' ? parsed['name'] : '');
|
|
248
|
-
const icon = sanitizeIcon(typeof parsed['icon'] === 'string' ? parsed['icon'] : '');
|
|
249
|
-
done(name !== '' ? { name, icon } : empty);
|
|
250
|
-
}
|
|
251
|
-
catch {
|
|
252
|
-
done(empty);
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
child.stdin?.end(); // immediate EOF — see the doc above
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
if (dir !== null) {
|
|
259
|
-
try {
|
|
260
|
-
rmSync(dir, { recursive: true, force: true });
|
|
261
|
-
}
|
|
262
|
-
catch { /* temp */ }
|
|
263
|
-
}
|
|
264
|
-
resolve(empty);
|
|
265
|
-
}
|
|
193
|
+
const route = nameModelRequest();
|
|
194
|
+
const emitted = await headlessToolCall({
|
|
195
|
+
systemPrompt: NAME_SYSTEM_PROMPT,
|
|
196
|
+
userPrompt: nameUserPrompt(body, sourceCap),
|
|
197
|
+
...route,
|
|
198
|
+
timeoutMs: NAME_TIMEOUT_MS,
|
|
199
|
+
tool: {
|
|
200
|
+
name: 'name_session',
|
|
201
|
+
label: 'Name session',
|
|
202
|
+
description: 'Record the name and icon for this coding session. Call exactly once, then stop.',
|
|
203
|
+
parameters: NAME_SESSION_SCHEMA,
|
|
204
|
+
constrainedSampling: { type: 'json_schema', strict: 'prefer' },
|
|
205
|
+
},
|
|
266
206
|
});
|
|
207
|
+
if (emitted === null || typeof emitted !== 'object')
|
|
208
|
+
return empty;
|
|
209
|
+
const parsed = emitted;
|
|
210
|
+
const name = sanitizeSessionName(typeof parsed['name'] === 'string' ? parsed['name'] : '');
|
|
211
|
+
const icon = sanitizeIcon(typeof parsed['icon'] === 'string' ? parsed['icon'] : '');
|
|
212
|
+
return name !== '' ? { name, icon } : empty;
|
|
213
|
+
}
|
|
214
|
+
/** Generate a name from a bounded conversation source rather than a single
|
|
215
|
+
* kickoff message. The caller owns selecting representative conversation text;
|
|
216
|
+
* this cap keeps the one-shot prompt compact. */
|
|
217
|
+
export function headlessNameFromConversation(conversation) {
|
|
218
|
+
return headlessName(conversation, 30_000);
|
|
267
219
|
}
|
|
268
220
|
// ---------------------------------------------------------------------------
|
|
269
221
|
// Issue titles — turn a free-text todo/idea/bug note into a short, human-readable
|
|
@@ -293,25 +245,24 @@ export function titleSlug(title) {
|
|
|
293
245
|
.filter((w) => w !== '');
|
|
294
246
|
return words.slice(0, 8).join('-') || 'untitled';
|
|
295
247
|
}
|
|
296
|
-
/** Ask
|
|
297
|
-
* generated title, or a local first-line fallback on
|
|
298
|
-
*
|
|
299
|
-
export function generateIssueTitle(note) {
|
|
248
|
+
/** Ask Pi headlessly for a one-line issue title for `note`. Resolves to the
|
|
249
|
+
* generated title, or a local first-line fallback on timeout or empty output.
|
|
250
|
+
* Async; never throws. */
|
|
251
|
+
export async function generateIssueTitle(note) {
|
|
300
252
|
const body = (note ?? '').trim();
|
|
301
253
|
if (body === '')
|
|
302
|
-
return
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
});
|
|
254
|
+
return 'untitled';
|
|
255
|
+
try {
|
|
256
|
+
const reply = await headlessText({
|
|
257
|
+
systemPrompt: TITLE_SYSTEM_PROMPT,
|
|
258
|
+
userPrompt: titleUserPrompt(body),
|
|
259
|
+
...nameModelRequest(),
|
|
260
|
+
timeoutMs: NAME_TIMEOUT_MS,
|
|
261
|
+
});
|
|
262
|
+
const title = reply.split('\n').map((line) => line.trim()).find((line) => line !== '') ?? '';
|
|
263
|
+
return title !== '' ? title.replace(/^["']|["']$/g, '').replace(/\.$/, '') : firstLineTitle(body);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return firstLineTitle(body);
|
|
267
|
+
}
|
|
317
268
|
}
|
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
// and were imported into the handlers from there; Stage B-3 relocated them here
|
|
9
9
|
// so the CLI leaves' import graph reaches no canvas state store (spec §1/§10).
|
|
10
10
|
import { copyFileSync, existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
11
|
+
import { readJsonIfExists } from '../fs-utils.js';
|
|
11
12
|
import { tmpdir } from 'node:os';
|
|
12
13
|
import { basename, join } from 'node:path';
|
|
13
14
|
import { InputError } from '../io.js';
|
|
14
15
|
import { fullName, getNode } from '../canvas/index.js';
|
|
15
16
|
import { jobDir, nodeDir, sessionPtrPath } from '../canvas/paths.js';
|
|
16
17
|
import { SessionManager } from './broker-sdk.js';
|
|
17
|
-
import {
|
|
18
|
+
import { openModelRegistry } from './model-registry.js';
|
|
18
19
|
import { BUILTIN_SLASH_COMMANDS } from './pi-vendored.js';
|
|
19
20
|
import { cycleAwareMessages } from './session-cycles.js';
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
21
|
+
import { visibleMessages } from './session-visibility.js';
|
|
22
|
+
import { normalizeToolGroupSummaryRecord } from '../../shared/tool-groups.js';
|
|
22
23
|
/** A session `.jsonl` records only `{ provider, modelId }` — pi never persists a
|
|
23
24
|
* whole `Model`. Resolve it back through pi's own registry so a dormant
|
|
24
25
|
* snapshot's `state.model` is the SAME `Model` a live broker's `get_state`
|
|
@@ -35,12 +36,7 @@ async function resolveRecordedModel(recorded) {
|
|
|
35
36
|
if (recorded === null)
|
|
36
37
|
return undefined;
|
|
37
38
|
try {
|
|
38
|
-
|
|
39
|
-
const runtime = await ModelRuntime.create({
|
|
40
|
-
credentials: new PoolCredentialStore(join(agentDir, 'auth.json')),
|
|
41
|
-
modelsPath: join(agentDir, 'models.json'),
|
|
42
|
-
});
|
|
43
|
-
return new ModelRegistry(runtime).find(recorded.provider, recorded.modelId);
|
|
39
|
+
return (await openModelRegistry()).find(recorded.provider, recorded.modelId);
|
|
44
40
|
}
|
|
45
41
|
catch {
|
|
46
42
|
return undefined;
|
|
@@ -131,6 +127,15 @@ function readIfPresent(path) {
|
|
|
131
127
|
return null;
|
|
132
128
|
}
|
|
133
129
|
}
|
|
130
|
+
function readToolGroupSummaries(nodeId) {
|
|
131
|
+
try {
|
|
132
|
+
const raw = readJsonIfExists(join(jobDir(nodeId), 'tool-summaries.json'));
|
|
133
|
+
return normalizeToolGroupSummaryRecord(raw);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return {};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
134
139
|
/** Reconstruct a persisted session without launching its broker. Backs the
|
|
135
140
|
* machine-readable snapshot endpoint and the human transcript render. */
|
|
136
141
|
export async function readNodeSnapshot(nodeId) {
|
|
@@ -148,7 +153,7 @@ export async function readNodeSnapshot(nodeId) {
|
|
|
148
153
|
copyFileSync(sessionFile, copy);
|
|
149
154
|
const manager = SessionManager.open(copy);
|
|
150
155
|
const context = manager.buildSessionContext();
|
|
151
|
-
const messages = cycleAwareMessages(manager);
|
|
156
|
+
const messages = visibleMessages(cycleAwareMessages(manager), { reviewCompanion: node.review_binding != null });
|
|
152
157
|
const sessionId = manager.getSessionId();
|
|
153
158
|
const sessionName = manager.getSessionName();
|
|
154
159
|
const snapshot = {
|
|
@@ -175,6 +180,10 @@ export async function readNodeSnapshot(nodeId) {
|
|
|
175
180
|
// process state (last setStatus/setWidget/setTitle) and is not persisted,
|
|
176
181
|
// so an offline read has none.
|
|
177
182
|
display: { statuses: {}, widgets: {}, title: undefined },
|
|
183
|
+
// Sidecar summaries survive broker exit so a dormant transcript receives
|
|
184
|
+
// the same completed-group data as a live welcome snapshot. Malformed or
|
|
185
|
+
// absent sidecars are deliberately ignored: tool calls remain visible.
|
|
186
|
+
toolGroupSummaries: readToolGroupSummaries(nodeId),
|
|
178
187
|
};
|
|
179
188
|
return {
|
|
180
189
|
nodeId,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type NodeMeta, type Mode, type Lifecycle, type LaunchSpec, type ManagedWorktree, type
|
|
1
|
+
import { type NodeMeta, type Mode, type Lifecycle, type LaunchSpec, type ManagedWorktree, type ReviewBinding } from '../canvas/index.js';
|
|
2
2
|
/** Explicitly set the resolved install id. crtrd calls this once at boot,
|
|
3
3
|
* immediately after `resolveInstallId()` — see crtrd.ts — so a provisioning
|
|
4
4
|
* mismatch fails the daemon loudly at STARTUP rather than lazily on first
|
|
@@ -70,14 +70,12 @@ export interface SpawnNodeOpts {
|
|
|
70
70
|
* the boot intro can re-assert this node's OWN identity over the source's
|
|
71
71
|
* copied-in conversation. Omit for a fresh node. */
|
|
72
72
|
forkFrom?: string | null;
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* `fork_pending`; the recipe remains persisted after session bind for audit. */
|
|
80
|
-
privateForkRecipe?: PrivateForkRecipe | null;
|
|
73
|
+
/** Suppress the spawn-time parent→child ACTIVE subscription. Default true
|
|
74
|
+
* (every existing caller keeps its edge). False gives ordinary canvas
|
|
75
|
+
* placement with no wake path back to the parent. */
|
|
76
|
+
subscribe?: boolean;
|
|
77
|
+
/** Immutable review-companion provenance. Omit for every ordinary node. */
|
|
78
|
+
reviewBinding?: ReviewBinding | null;
|
|
81
79
|
/** New subscriptions this node opens default to passive when true. */
|
|
82
80
|
passiveDefault?: boolean;
|
|
83
81
|
/** Resolved pi launch recipe (from resolve(kind,mode)). */
|
|
@@ -96,12 +94,9 @@ export interface SpawnNodeOpts {
|
|
|
96
94
|
profile_id?: string | null;
|
|
97
95
|
/** Managed worktree already created for this node, if any. */
|
|
98
96
|
managedWorktree?: ManagedWorktree;
|
|
99
|
-
/** Keep a private human-work child inert until its request has been rechecked
|
|
100
|
-
* and `reviveNode()` authorizes its one lifecycle-owned launch. */
|
|
101
|
-
initialStatus?: 'canceled';
|
|
102
97
|
/** Override the generated id — either an internally pre-allocated id
|
|
103
|
-
* (worktree naming
|
|
104
|
-
*
|
|
98
|
+
* (worktree naming; always valid+fresh) or an external caller's explicit id
|
|
99
|
+
* (`--node-id`), which is format-validated
|
|
105
100
|
* and duplicate-rejected (`NodeIdConflictError`) here. */
|
|
106
101
|
nodeId?: string;
|
|
107
102
|
}
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
// is also recorded.
|
|
15
15
|
import { randomBytes } from 'node:crypto';
|
|
16
16
|
import { mkdirSync } from 'node:fs';
|
|
17
|
-
import { isAbsolute } from 'node:path';
|
|
18
17
|
import { createNode, getNode, getRow, subscribe, recordSpawn, contextDir, } from '../canvas/index.js';
|
|
19
18
|
import { memoryDir } from './memory.js';
|
|
20
19
|
import { resolveInstallId } from '../canvas/install-id.js';
|
|
@@ -207,59 +206,12 @@ export function nodeEnv(meta) {
|
|
|
207
206
|
// Merge any launch-spec env last (it may override / extend).
|
|
208
207
|
return { ...env, ...(meta.launch?.env ?? {}) };
|
|
209
208
|
}
|
|
210
|
-
// ---------------------------------------------------------------------------
|
|
211
|
-
// Birth
|
|
212
|
-
// ---------------------------------------------------------------------------
|
|
213
|
-
function isHumanWorkTarget(value) {
|
|
214
|
-
if (value === null || typeof value !== 'object')
|
|
215
|
-
return false;
|
|
216
|
-
const target = value;
|
|
217
|
-
return ((target.work_kind === 'follow_up' || target.work_kind === 'visual') &&
|
|
218
|
-
typeof target.dir === 'string' && target.dir !== '' &&
|
|
219
|
-
typeof target.request_id === 'string' && target.request_id !== '' &&
|
|
220
|
-
typeof target.root === 'string' && target.root !== '');
|
|
221
|
-
}
|
|
222
|
-
/** Refuse malformed private claims before createNode leaves a durable half-node.
|
|
223
|
-
* This is intentionally private to the lifecycle-owned human-work birth API;
|
|
224
|
-
* ordinary spawn callers do not acquire a second generic validation surface. */
|
|
225
|
-
function validatePrivateForkBirth(opts) {
|
|
226
|
-
const hasTarget = opts.humanWorkTarget != null;
|
|
227
|
-
const hasPhase = opts.privateForkPhase != null;
|
|
228
|
-
const hasRecipe = opts.privateForkRecipe != null;
|
|
229
|
-
if (!hasTarget && !hasPhase && !hasRecipe) {
|
|
230
|
-
if (opts.initialStatus !== undefined)
|
|
231
|
-
throw new Error('only private human-work births may start inert');
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
if (!isHumanWorkTarget(opts.humanWorkTarget)) {
|
|
235
|
-
throw new Error('private human-work birth requires a recognized humanWorkTarget');
|
|
236
|
-
}
|
|
237
|
-
if (opts.privateForkPhase !== 'fork_pending') {
|
|
238
|
-
throw new Error('private human-work birth requires privateForkPhase=fork_pending');
|
|
239
|
-
}
|
|
240
|
-
if (typeof opts.privateForkRecipe?.kickoff !== 'string' || opts.privateForkRecipe.kickoff.trim() === '') {
|
|
241
|
-
throw new Error('private human-work birth requires a non-empty kickoff recipe');
|
|
242
|
-
}
|
|
243
|
-
if (typeof opts.forkFrom !== 'string' || !isAbsolute(opts.forkFrom)) {
|
|
244
|
-
throw new Error('private human-work birth requires an absolute forkFrom provenance file');
|
|
245
|
-
}
|
|
246
|
-
if (opts.parent !== null && opts.parent !== undefined) {
|
|
247
|
-
throw new Error('private human-work birth must be parent-null');
|
|
248
|
-
}
|
|
249
|
-
if ((opts.lifecycle ?? 'terminal') !== 'terminal') {
|
|
250
|
-
throw new Error('private human-work birth must be terminal');
|
|
251
|
-
}
|
|
252
|
-
if (opts.launch?.modelExact !== true || typeof opts.launch.model !== 'string' || opts.launch.model.trim() === '') {
|
|
253
|
-
throw new Error('private human-work birth requires an exact persisted model');
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
209
|
/** Create a node on the canvas and wire its spawn-time edges.
|
|
257
210
|
*
|
|
258
211
|
* For a child (parent given): the parent auto-subscribes ACTIVE to the child
|
|
259
212
|
* (so it's woken when the child finishes), and a spawned_by audit edge is
|
|
260
213
|
* recorded. For a root (no parent): no edges, resident by default. */
|
|
261
214
|
export function spawnNode(opts) {
|
|
262
|
-
validatePrivateForkBirth(opts);
|
|
263
215
|
const nodeId = opts.nodeId !== undefined ? validatedExplicitNodeId(opts.nodeId) : newNodeId();
|
|
264
216
|
const parent = opts.parent ?? null;
|
|
265
217
|
const isRoot = parent === null;
|
|
@@ -288,13 +240,11 @@ export function spawnNode(opts) {
|
|
|
288
240
|
// guidance" for the state it starts in (its bearings carry it), so the
|
|
289
241
|
// persona injector sees no drift on its first turn boundary.
|
|
290
242
|
persona_ack: { mode, lifecycle },
|
|
291
|
-
status:
|
|
243
|
+
status: 'active',
|
|
292
244
|
parent,
|
|
293
245
|
spawned_by: spawnedBy,
|
|
294
246
|
fork_from: opts.forkFrom,
|
|
295
|
-
|
|
296
|
-
private_fork_phase: opts.privateForkPhase,
|
|
297
|
-
private_fork_recipe: opts.privateForkRecipe,
|
|
247
|
+
review_binding: opts.reviewBinding,
|
|
298
248
|
model_override: opts.modelOverride ?? null,
|
|
299
249
|
passive_default: opts.passiveDefault ?? false,
|
|
300
250
|
...(opts.managedWorktree !== undefined ? { managed_worktree: opts.managedWorktree } : {}),
|
|
@@ -316,7 +266,7 @@ export function spawnNode(opts) {
|
|
|
316
266
|
if (meta.kind !== 'human') {
|
|
317
267
|
mkdirSync(memoryDir(meta.node_id), { recursive: true });
|
|
318
268
|
}
|
|
319
|
-
if (parent !== null) {
|
|
269
|
+
if (parent !== null && opts.subscribe !== false) {
|
|
320
270
|
// The load-bearing seed: parent subscribes (active) to child so it learns
|
|
321
271
|
// when the work finishes. This mirrors spawn structure into the spine.
|
|
322
272
|
// A root (parent=null) gets NO subscription — nobody is woken by it.
|
|
@@ -4,27 +4,12 @@ export interface MissingPackage {
|
|
|
4
4
|
/** Absolute path it resolved to (which does not exist). */
|
|
5
5
|
resolved: string;
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* dependency range in crouter's package.json. The bundled copy is the floor
|
|
14
|
-
* required by crouter's generated `hl inbox toggle` binding. */
|
|
15
|
-
export declare function bundledHumanloopVersion(): string | null;
|
|
16
|
-
/** Read the PATH-visible `hl` package directly. Spawning `npm ls -g` here
|
|
17
|
-
* makes every front-door boot pay for npm's global dependency-tree scan; a
|
|
18
|
-
* linked development install can make that scan take many seconds. The real
|
|
19
|
-
* executable points into the package for both ordinary and npm-linked installs,
|
|
20
|
-
* so walking upward to its package.json is authoritative for the CLI crtr will
|
|
21
|
-
* actually invoke. */
|
|
22
|
-
export declare function globalHumanloopVersion(): string | null;
|
|
23
|
-
export declare function globalHumanloopHealth(): GlobalHumanloopHealth;
|
|
24
|
-
/** A non-fatal action-oriented diagnostic for a missing, unreadable, or stale
|
|
25
|
-
* global `hl` executable. */
|
|
26
|
-
export declare function globalHumanloopWarning(): string | null;
|
|
27
|
-
export declare function globalHumanloopInstallCommand(): string;
|
|
7
|
+
/** A non-fatal, action-oriented diagnostic for an unprovisioned managed
|
|
8
|
+
* renderer — the one remaining out-of-tree dependency. Deliberately calls
|
|
9
|
+
* `isRendererReady()`, NOT `ensureRenderer()`: this runs on the front-door boot
|
|
10
|
+
* path and at crtrd startup, where a `uv pip install` (up to 180s) must never
|
|
11
|
+
* happen. Readiness is a handful of fs stats, no subprocess. */
|
|
12
|
+
export declare function rendererWarning(): string | null;
|
|
28
13
|
/**
|
|
29
14
|
* The pi agent config dir (`~/.pi/agent`, or `$PI_CODING_AGENT_DIR`) — a local
|
|
30
15
|
* reimplementation of pi's `getAgentDir()`. Reimplemented (not imported) ON
|