@crouton-kit/crouter 0.3.31 → 0.3.33
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/README.md +8 -0
- package/dist/build-root.js +1 -0
- package/dist/builtin-memory/crouter-development/marketplaces.md +2 -2
- package/dist/builtin-memory/crouter-development/personas/base-prompt.md +2 -2
- package/dist/builtin-memory/crouter-development/personas/orchestrator-prompt.md +5 -5
- package/dist/builtin-memory/crouter-development/personas.md +3 -4
- package/dist/builtin-memory/crouter-development/plugins.md +18 -18
- package/dist/builtin-memory/design.md +4 -1
- package/dist/builtin-memory/development.md +4 -1
- package/dist/builtin-memory/internal/INDEX.md +1 -1
- package/dist/builtin-memory/internal/nodes-and-canvas.md +6 -6
- package/dist/builtin-memory/internal/storage-tiers.md +5 -5
- package/dist/builtin-memory/planning.md +4 -1
- package/dist/builtin-memory/product.md +80 -0
- package/dist/builtin-memory/spec.md +4 -1
- package/dist/builtin-personas/advisor/PERSONA.md +10 -0
- package/dist/builtin-personas/design/PERSONA.md +2 -2
- package/dist/builtin-personas/design/orchestrator.md +3 -3
- package/dist/builtin-personas/developer/PERSONA.md +1 -1
- package/dist/builtin-personas/developer/orchestrator.md +2 -2
- package/dist/builtin-personas/explore/PERSONA.md +3 -3
- package/dist/builtin-personas/explore/orchestrator.md +4 -2
- package/dist/builtin-personas/general/PERSONA.md +1 -1
- package/dist/builtin-personas/general/orchestrator.md +1 -1
- package/dist/builtin-personas/orchestration-kernel.md +7 -14
- package/dist/builtin-personas/plan/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/orchestrator.md +2 -2
- package/dist/builtin-personas/plan/reviewers/architecture-fit/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/code-smells/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/pattern-consistency/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/requirements-coverage/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/security/PERSONA.md +1 -1
- package/dist/builtin-personas/product/PERSONA.md +18 -0
- package/dist/builtin-personas/product/orchestrator.md +14 -0
- package/dist/builtin-personas/product/teardown/PERSONA.md +13 -0
- package/dist/builtin-personas/review/PERSONA.md +1 -1
- package/dist/builtin-personas/review/orchestrator.md +1 -1
- package/dist/builtin-personas/runtime-base.md +5 -0
- package/dist/builtin-personas/spec/PERSONA.md +1 -1
- package/dist/builtin-personas/spec/orchestrator.md +2 -2
- package/dist/builtin-personas/spec/requirements/PERSONA.md +1 -1
- package/dist/builtin-views/canvas/core.mjs +82 -1
- package/dist/builtin-views/canvas/tui.mjs +9 -5
- package/dist/builtin-views/canvas/web.jsx +3 -2
- package/dist/builtin-views/chat/core.mjs +725 -0
- package/dist/builtin-views/chat/text.mjs +101 -0
- package/dist/builtin-views/chat/tui.mjs +368 -0
- package/dist/builtin-views/chat/web.jsx +367 -0
- package/dist/builtin-views/prompt-review/core.mjs +863 -0
- package/dist/builtin-views/prompt-review/text.mjs +15 -0
- package/dist/builtin-views/prompt-review/tui.mjs +196 -0
- package/dist/builtin-views/prompt-review/web.jsx +484 -0
- package/dist/builtin-views/settings/core.mjs +397 -0
- package/dist/builtin-views/settings/text.mjs +40 -0
- package/dist/builtin-views/settings/tui.mjs +95 -0
- package/dist/builtin-views/settings/web.jsx +167 -0
- package/dist/cli.js +16 -3
- package/dist/clients/attach/__tests__/autocomplete-and-bash-mode.test.js +96 -0
- package/dist/clients/attach/__tests__/bash-bang-routing.test.js +58 -0
- package/dist/clients/attach/__tests__/bundle-pi-tui-dedup.test.d.ts +1 -0
- package/dist/clients/attach/__tests__/bundle-pi-tui-dedup.test.js +56 -0
- package/dist/clients/attach/__tests__/titled-editor.test.js +22 -1
- package/dist/clients/attach/attach-cmd.d.ts +18 -0
- package/dist/clients/attach/attach-cmd.js +1723 -795
- package/dist/clients/attach/canvas-panels.js +2 -2
- package/dist/clients/attach/chat-view.d.ts +10 -0
- package/dist/clients/attach/chat-view.js +23 -0
- package/dist/clients/attach/config-load.d.ts +8 -4
- package/dist/clients/attach/config-load.js +2 -0
- package/dist/clients/attach/extension-dialogs.d.ts +2 -3
- package/dist/clients/attach/extension-dialogs.js +7 -9
- package/dist/clients/attach/graph-overlay.js +3 -2
- package/dist/clients/attach/input-controller.d.ts +4 -3
- package/dist/clients/attach/input-controller.js +24 -3
- package/dist/clients/attach/slash-commands.d.ts +7 -7
- package/dist/clients/attach/slash-commands.js +38 -14
- package/dist/clients/attach/titled-editor.js +18 -14
- package/dist/clients/attach/view-socket.d.ts +2 -1
- package/dist/clients/attach/view-socket.js +27 -8
- package/dist/clients/web/__tests__/source-cache.test.d.ts +1 -0
- package/dist/clients/web/__tests__/source-cache.test.js +32 -0
- package/dist/clients/web/dev-server.js +1 -0
- package/dist/clients/web/events.js +9 -11
- package/dist/clients/web/server.d.ts +4 -3
- package/dist/clients/web/server.js +138 -31
- package/dist/clients/web/source-cache.d.ts +10 -0
- package/dist/clients/web/source-cache.js +57 -0
- package/dist/clients/web/web-cmd.js +28 -9
- package/dist/commands/__tests__/human.test.js +30 -28
- package/dist/commands/canvas-history/search.js +1 -1
- package/dist/commands/canvas-history.js +5 -8
- package/dist/commands/canvas-issue.d.ts +2 -0
- package/dist/commands/canvas-issue.js +148 -0
- package/dist/commands/canvas-prune.js +19 -0
- package/dist/commands/canvas-rebuild-index.d.ts +2 -0
- package/dist/commands/canvas-rebuild-index.js +57 -0
- package/dist/commands/canvas-snapshot.d.ts +2 -0
- package/dist/commands/canvas-snapshot.js +48 -0
- package/dist/commands/canvas-tmux-spread.d.ts +2 -0
- package/dist/commands/canvas-tmux-spread.js +188 -0
- package/dist/commands/canvas.d.ts +1 -0
- package/dist/commands/canvas.js +16 -1
- package/dist/commands/chord.js +143 -48
- package/dist/commands/daemon.js +3 -3
- package/dist/commands/human/prompts.d.ts +0 -1
- package/dist/commands/human/prompts.js +39 -54
- package/dist/commands/human/queue.d.ts +12 -1
- package/dist/commands/human/queue.js +468 -73
- package/dist/commands/human/shared.d.ts +3 -4
- package/dist/commands/human/shared.js +3 -3
- package/dist/commands/human.js +11 -10
- package/dist/commands/memory/find.js +3 -2
- package/dist/commands/memory/list.js +4 -3
- package/dist/commands/memory/read.js +3 -3
- package/dist/commands/memory/shared.d.ts +1 -4
- package/dist/commands/memory/shared.js +6 -9
- package/dist/commands/memory/write.js +3 -3
- package/dist/commands/memory.js +4 -7
- package/dist/commands/node-context.d.ts +2 -0
- package/dist/commands/node-context.js +172 -0
- package/dist/commands/node-snapshot.d.ts +2 -0
- package/dist/commands/node-snapshot.js +123 -0
- package/dist/commands/node.js +228 -52
- package/dist/commands/pkg/plugin-inspect.js +6 -6
- package/dist/commands/pkg/plugin-manage.js +1 -1
- package/dist/commands/pkg/plugin.js +2 -2
- package/dist/commands/pkg.js +2 -2
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.js +79 -11
- package/dist/commands/revive.js +74 -1
- package/dist/commands/search/answer.d.ts +1 -0
- package/dist/commands/search/answer.js +50 -0
- package/dist/commands/search/contents.d.ts +1 -0
- package/dist/commands/search/contents.js +96 -0
- package/dist/commands/search/exa.d.ts +53 -0
- package/dist/commands/search/exa.js +155 -0
- package/dist/commands/search/puremd.d.ts +11 -0
- package/dist/commands/search/puremd.js +53 -0
- package/dist/commands/search/web.d.ts +1 -0
- package/dist/commands/search/web.js +65 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.js +24 -0
- package/dist/commands/sys/__tests__/sync-import.test.d.ts +1 -0
- package/dist/commands/sys/__tests__/sync-import.test.js +72 -0
- package/dist/commands/sys/config.js +59 -10
- package/dist/commands/sys/doctor.js +56 -4
- package/dist/commands/sys/prompt-review.d.ts +1 -0
- package/dist/commands/sys/prompt-review.js +178 -0
- package/dist/commands/sys/promptstudio.d.ts +2 -0
- package/dist/commands/sys/promptstudio.js +65 -0
- package/dist/commands/sys/settings.d.ts +2 -0
- package/dist/commands/sys/settings.js +16 -0
- package/dist/commands/sys/sync.js +311 -159
- package/dist/commands/sys/sysprompt.d.ts +1 -0
- package/dist/commands/sys/sysprompt.js +86 -0
- package/dist/commands/sys.js +9 -5
- package/dist/commands/view-new.js +2 -2
- package/dist/core/__tests__/artifact-paths.test.d.ts +1 -0
- package/dist/core/__tests__/artifact-paths.test.js +44 -0
- package/dist/core/__tests__/broker-preflight.test.d.ts +1 -0
- package/dist/core/__tests__/broker-preflight.test.js +85 -0
- package/dist/core/__tests__/broker-sdk-wiring.test.js +15 -0
- package/dist/core/__tests__/canvas.test.js +37 -1
- package/dist/core/__tests__/chat-view-reconnect.test.d.ts +1 -0
- package/dist/core/__tests__/chat-view-reconnect.test.js +70 -0
- package/dist/core/__tests__/child-death-wake.test.js +11 -2
- package/dist/core/__tests__/close.test.js +39 -1
- package/dist/core/__tests__/connection-reconnect-resume.test.d.ts +1 -0
- package/dist/core/__tests__/connection-reconnect-resume.test.js +37 -0
- package/dist/core/__tests__/context-intro.test.js +48 -14
- package/dist/core/__tests__/daemon-boot.test.js +182 -9
- package/dist/core/__tests__/editor-label.test.d.ts +1 -0
- package/dist/core/__tests__/editor-label.test.js +26 -0
- package/dist/core/__tests__/fault-marker.test.d.ts +1 -0
- package/dist/core/__tests__/fault-marker.test.js +112 -0
- package/dist/core/__tests__/fault-retry-rewind.test.d.ts +1 -0
- package/dist/core/__tests__/fault-retry-rewind.test.js +123 -0
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +30 -4
- package/dist/core/__tests__/fixtures/fake-engine.js +156 -17
- package/dist/core/__tests__/fixtures/fake-pi-host.js +10 -1
- package/dist/core/__tests__/full/human-new-window-regression.test.js +1 -1
- package/dist/core/__tests__/helpers/harness.d.ts +1 -1
- package/dist/core/__tests__/helpers/harness.js +9 -3
- package/dist/core/__tests__/human-stranded-deliver.test.js +38 -1
- package/dist/core/__tests__/human-surface-target.test.js +1 -1
- package/dist/core/__tests__/kickoff.test.js +18 -19
- package/dist/core/__tests__/memory-resolver.test.js +12 -1
- package/dist/core/__tests__/migration.test.js +49 -14
- package/dist/core/__tests__/model-ladders.test.d.ts +1 -0
- package/dist/core/__tests__/model-ladders.test.js +160 -0
- package/dist/core/__tests__/node-env.test.d.ts +1 -0
- package/dist/core/__tests__/node-env.test.js +26 -0
- package/dist/core/__tests__/push-final-guard.test.js +7 -1
- package/dist/core/__tests__/relaunch-root.test.js +9 -9
- package/dist/core/__tests__/revive.test.js +36 -6
- package/dist/core/__tests__/spawn-root.test.js +24 -1
- package/dist/core/__tests__/stop-guard.test.js +10 -0
- package/dist/core/__tests__/stranded-relaunch.test.d.ts +1 -0
- package/dist/core/__tests__/stranded-relaunch.test.js +72 -0
- package/dist/core/__tests__/tmux-surface.test.js +5 -1
- package/dist/core/__tests__/unknown-path.test.js +19 -19
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +1 -0
- package/dist/core/__tests__/yield-ensures-daemon.test.js +54 -0
- package/dist/core/artifact.d.ts +2 -33
- package/dist/core/artifact.js +27 -87
- package/dist/core/bootstrap.js +2 -0
- package/dist/core/canvas/browse/__tests__/model.test.js +35 -1
- package/dist/core/canvas/browse/app.js +87 -17
- package/dist/core/canvas/browse/model.d.ts +10 -1
- package/dist/core/canvas/browse/model.js +37 -1
- package/dist/core/canvas/browse/render.js +35 -33
- package/dist/core/canvas/canvas.d.ts +7 -0
- package/dist/core/canvas/canvas.js +54 -5
- package/dist/core/canvas/db.js +35 -8
- package/dist/core/canvas/labels.d.ts +6 -8
- package/dist/core/canvas/labels.js +8 -11
- package/dist/core/canvas/nav-model.d.ts +5 -4
- package/dist/core/canvas/nav-model.js +31 -17
- package/dist/core/canvas/paths.d.ts +18 -1
- package/dist/core/canvas/paths.js +37 -2
- package/dist/core/canvas/render.d.ts +25 -0
- package/dist/core/canvas/render.js +96 -13
- package/dist/core/canvas/status-glyph.d.ts +35 -0
- package/dist/core/canvas/status-glyph.js +104 -0
- package/dist/core/canvas/types.d.ts +2 -2
- package/dist/core/config.js +114 -16
- package/dist/core/fault-classifier.d.ts +41 -0
- package/dist/core/fault-classifier.js +110 -0
- package/dist/core/feed/__tests__/empty-node-guard.test.d.ts +1 -0
- package/dist/core/feed/__tests__/empty-node-guard.test.js +45 -0
- package/dist/core/feed/feed.js +8 -0
- package/dist/core/feed/inbox.d.ts +15 -0
- package/dist/core/feed/inbox.js +40 -14
- package/dist/core/frontmatter.d.ts +1 -11
- package/dist/core/frontmatter.js +1 -55
- package/dist/core/hearth/config.d.ts +2 -0
- package/dist/core/hearth/config.js +75 -0
- package/dist/core/hearth/guest-env.d.ts +2 -0
- package/dist/core/hearth/guest-env.js +11 -0
- package/dist/core/hearth/index.d.ts +5 -0
- package/dist/core/hearth/index.js +5 -0
- package/dist/core/hearth/provider.d.ts +21 -0
- package/dist/core/hearth/provider.js +10 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +10 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.js +39 -0
- package/dist/core/hearth/providers/blaxel-home.d.ts +11 -0
- package/dist/core/hearth/providers/blaxel-home.js +126 -0
- package/dist/core/hearth/providers/blaxel.d.ts +26 -0
- package/dist/core/hearth/providers/blaxel.js +208 -0
- package/dist/core/hearth/providers/types.d.ts +72 -0
- package/dist/core/hearth/providers/types.js +1 -0
- package/dist/core/hearth/registry.d.ts +15 -0
- package/dist/core/hearth/registry.js +179 -0
- package/dist/core/hearth/types.d.ts +121 -0
- package/dist/core/hearth/types.js +1 -0
- package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.d.ts +1 -0
- package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.js +79 -0
- package/dist/core/{skill-sync → host-exports}/builtins.d.ts +21 -13
- package/dist/core/host-exports/builtins.js +68 -0
- package/dist/core/{skill-sync → host-exports}/export.d.ts +9 -6
- package/dist/core/{skill-sync → host-exports}/export.js +37 -14
- package/dist/core/io.js +1 -1
- package/dist/core/log.d.ts +9 -0
- package/dist/core/log.js +113 -0
- package/dist/core/memory-resolver.d.ts +8 -8
- package/dist/core/memory-resolver.js +15 -28
- package/dist/core/personas/index.d.ts +4 -4
- package/dist/core/personas/index.js +2 -2
- package/dist/core/personas/loader.d.ts +51 -0
- package/dist/core/personas/loader.js +54 -50
- package/dist/core/personas/resolve.d.ts +43 -27
- package/dist/core/personas/resolve.js +336 -94
- package/dist/core/runtime/auth-reload.d.ts +7 -0
- package/dist/core/runtime/auth-reload.js +69 -0
- package/dist/core/runtime/bearings.d.ts +35 -15
- package/dist/core/runtime/bearings.js +305 -44
- package/dist/core/runtime/branded-host.d.ts +4 -2
- package/dist/core/runtime/branded-host.js +66 -4
- package/dist/core/runtime/broker-protocol.d.ts +38 -3
- package/dist/core/runtime/broker.js +343 -18
- package/dist/core/runtime/close.js +37 -29
- package/dist/core/runtime/connectivity.d.ts +12 -0
- package/dist/core/runtime/connectivity.js +73 -0
- package/dist/core/runtime/fault-recovery-nudge.d.ts +2 -0
- package/dist/core/runtime/fault-recovery-nudge.js +2 -0
- package/dist/core/runtime/fault-recovery.d.ts +23 -0
- package/dist/core/runtime/fault-recovery.js +74 -0
- package/dist/core/runtime/fault.d.ts +25 -0
- package/dist/core/runtime/fault.js +176 -0
- package/dist/core/runtime/front-door.d.ts +1 -1
- package/dist/core/runtime/front-door.js +2 -2
- package/dist/core/runtime/host.d.ts +10 -0
- package/dist/core/runtime/host.js +71 -9
- package/dist/core/runtime/kickoff.js +31 -45
- package/dist/core/runtime/launch.d.ts +32 -18
- package/dist/core/runtime/launch.js +148 -43
- package/dist/core/runtime/model-swap.d.ts +18 -0
- package/dist/core/runtime/model-swap.js +95 -0
- package/dist/core/runtime/naming.d.ts +7 -0
- package/dist/core/runtime/naming.js +61 -9
- package/dist/core/runtime/nodes.js +6 -1
- package/dist/core/runtime/persona.js +16 -17
- package/dist/core/runtime/placement.d.ts +36 -31
- package/dist/core/runtime/placement.js +149 -64
- package/dist/core/runtime/promote.d.ts +2 -0
- package/dist/core/runtime/promote.js +23 -3
- package/dist/core/runtime/recycle.js +6 -4
- package/dist/core/runtime/reset.d.ts +5 -2
- package/dist/core/runtime/reset.js +2 -2
- package/dist/core/runtime/revive.d.ts +4 -0
- package/dist/core/runtime/revive.js +27 -9
- package/dist/core/runtime/roadmap.d.ts +1 -1
- package/dist/core/runtime/roadmap.js +1 -1
- package/dist/core/runtime/spawn.d.ts +2 -2
- package/dist/core/runtime/spawn.js +30 -6
- package/dist/core/runtime/stop-guard.js +6 -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 +29 -6
- package/dist/core/runtime/tmux.js +134 -80
- package/dist/core/runtime/view-socket-client.d.ts +46 -0
- package/dist/core/runtime/view-socket-client.js +203 -0
- package/dist/core/substrate/index.d.ts +1 -1
- package/dist/core/substrate/index.js +1 -1
- package/dist/core/substrate/on-read.js +16 -4
- package/dist/core/substrate/render.d.ts +10 -13
- package/dist/core/substrate/render.js +56 -51
- package/dist/core/tui/host.js +83 -18
- package/dist/core/view/__tests__/transport-cache.test.d.ts +1 -0
- package/dist/core/view/__tests__/transport-cache.test.js +62 -0
- package/dist/core/view/contract.d.ts +20 -0
- package/dist/core/view/stream-local.d.ts +3 -0
- package/dist/core/view/stream-local.js +184 -0
- package/dist/core/view/transport-cache.d.ts +8 -0
- package/dist/core/view/transport-cache.js +38 -0
- package/dist/core/view/transport-local.js +4 -0
- package/dist/core/view/transport.d.ts +7 -1
- package/dist/daemon/crtrd.d.ts +3 -19
- package/dist/daemon/crtrd.js +139 -178
- package/dist/daemon/manage.d.ts +18 -1
- package/dist/daemon/manage.js +54 -9
- package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.js +289 -0
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.js +34 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +203 -0
- package/dist/hearth/wake-proxy/__tests__/hardening.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/hardening.test.js +59 -0
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.js +372 -0
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.js +258 -0
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.js +437 -0
- package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.js +455 -0
- package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.js +15 -0
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.js +141 -0
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.js +143 -0
- package/dist/hearth/wake-proxy/anthropic-oauth.d.ts +58 -0
- package/dist/hearth/wake-proxy/anthropic-oauth.js +189 -0
- package/dist/hearth/wake-proxy/auth.d.ts +22 -0
- package/dist/hearth/wake-proxy/auth.js +128 -0
- package/dist/hearth/wake-proxy/config.d.ts +2 -0
- package/dist/hearth/wake-proxy/config.js +151 -0
- package/dist/hearth/wake-proxy/guest-source.d.ts +14 -0
- package/dist/hearth/wake-proxy/guest-source.js +130 -0
- package/dist/hearth/wake-proxy/hearth-status.d.ts +44 -0
- package/dist/hearth/wake-proxy/hearth-status.js +267 -0
- package/dist/hearth/wake-proxy/home.d.ts +67 -0
- package/dist/hearth/wake-proxy/home.js +297 -0
- package/dist/hearth/wake-proxy/main.d.ts +1 -0
- package/dist/hearth/wake-proxy/main.js +134 -0
- package/dist/hearth/wake-proxy/model-auth.d.ts +13 -0
- package/dist/hearth/wake-proxy/model-auth.js +345 -0
- package/dist/hearth/wake-proxy/proxy.d.ts +35 -0
- package/dist/hearth/wake-proxy/proxy.js +716 -0
- package/dist/hearth/wake-proxy/public-source-gate.d.ts +9 -0
- package/dist/hearth/wake-proxy/public-source-gate.js +409 -0
- package/dist/hearth/wake-proxy/redact.d.ts +1 -0
- package/dist/hearth/wake-proxy/redact.js +17 -0
- package/dist/hearth/wake-proxy/server.d.ts +11 -0
- package/dist/hearth/wake-proxy/server.js +142 -0
- package/dist/hearth/wake-proxy/state.d.ts +18 -0
- package/dist/hearth/wake-proxy/state.js +342 -0
- package/dist/hearth/wake-proxy/types.d.ts +76 -0
- package/dist/hearth/wake-proxy/types.js +1 -0
- package/dist/index.js +3 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +6 -5
- package/dist/pi-extensions/canvas-context-intro.js +7 -7
- package/dist/pi-extensions/canvas-doc-substrate.js +19 -22
- package/dist/pi-extensions/canvas-nav.js +15 -8
- package/dist/pi-extensions/canvas-stophook.d.ts +1 -1
- package/dist/pi-extensions/canvas-stophook.js +78 -11
- package/dist/types.d.ts +39 -20
- package/dist/types.js +38 -13
- package/dist/web/runtime.js +141 -42
- package/dist/web/transport-http.js +7 -5
- package/dist/web/transport-stream.d.ts +3 -0
- package/dist/web/transport-stream.js +204 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-BYwT3kSJ.woff +0 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-yxdJ5AmL.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-BbKYyvR9.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-CT4YFKeK.woff +0 -0
- package/dist/web-client/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2 +0 -0
- package/dist/web-client/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2 +0 -0
- package/dist/web-client/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2 +0 -0
- package/dist/web-client/assets/index-BZUxTkv5.css +2 -0
- package/dist/web-client/assets/index-D36PNBj4.js +80 -0
- package/dist/web-client/assets/instrument-sans-latin-ext-wght-normal-B5bTHO_g.woff2 +0 -0
- package/dist/web-client/assets/instrument-sans-latin-wght-normal-BbzFLZTg.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2 +0 -0
- package/dist/web-client/index.html +3 -2
- package/package.json +32 -10
- package/dist/core/__tests__/error-stall-recycle.test.js +0 -141
- package/dist/core/skill-sync/__tests__/dry-run-wrote-count.test.js +0 -57
- package/dist/core/skill-sync/builtins.js +0 -112
- package/dist/core/skill-sync/claude-plugins.d.ts +0 -23
- package/dist/core/skill-sync/claude-plugins.js +0 -71
- package/dist/core/skill-sync/engine.d.ts +0 -42
- package/dist/core/skill-sync/engine.js +0 -633
- package/dist/core/skill-sync/manifest.d.ts +0 -64
- package/dist/core/skill-sync/manifest.js +0 -181
- package/dist/core/skill-sync/profile.d.ts +0 -76
- package/dist/core/skill-sync/profile.js +0 -173
- package/dist/core/skill-sync/snapshot.d.ts +0 -57
- package/dist/core/skill-sync/snapshot.js +0 -120
- package/dist/pi-extensions/canvas-commands.d.ts +0 -37
- package/dist/pi-extensions/canvas-commands.js +0 -113
- package/dist/pi-extensions/canvas-resume.d.ts +0 -21
- package/dist/pi-extensions/canvas-resume.js +0 -83
- package/dist/pi-extensions/canvas-view.d.ts +0 -21
- package/dist/pi-extensions/canvas-view.js +0 -76
- package/dist/web-client/assets/index-BUvQb4hR.css +0 -2
- package/dist/web-client/assets/index-ClLQXYAE.js +0 -10
- /package/dist/{core/__tests__/error-stall-recycle.test.d.ts → clients/attach/__tests__/autocomplete-and-bash-mode.test.d.ts} +0 -0
- /package/dist/{core/skill-sync/__tests__/dry-run-wrote-count.test.d.ts → clients/attach/__tests__/bash-bang-routing.test.d.ts} +0 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* One-way export of crtr-generated host artifacts — the sole writer of
|
|
3
|
-
* generated
|
|
4
|
-
* `~/.pi/agent/prompts`.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* generated slash-command templates to `~/.claude/commands` and
|
|
4
|
+
* `~/.pi/agent/prompts`.
|
|
5
|
+
*
|
|
6
|
+
* crouter no longer exports Agent Skills / SKILL.md bundles. The export pass
|
|
7
|
+
* still prunes old marker-bearing `crtr-skills` bundles so hosts stop surfacing
|
|
8
|
+
* pi/Claude native skills after the memory cutover. Markerless files are
|
|
9
|
+
* user-owned and never removed.
|
|
8
10
|
*
|
|
9
11
|
* Triggered per-run by cli.ts (argv-gated, exactly as the old writers were) so
|
|
10
12
|
* first-run provisioning is preserved. Best-effort: a provisioning fault must
|
|
@@ -14,8 +16,8 @@
|
|
|
14
16
|
import { writeFileSync } from 'node:fs';
|
|
15
17
|
import { homedir } from 'node:os';
|
|
16
18
|
import { dirname, join } from 'node:path';
|
|
17
|
-
import { ensureDir, pathExists, readText } from '../fs-utils.js';
|
|
18
|
-
import { builtinExportPairs } from './builtins.js';
|
|
19
|
+
import { ensureDir, pathExists, readText, removePath } from '../fs-utils.js';
|
|
20
|
+
import { builtinExportPairs, legacyExportArtifacts } from './builtins.js';
|
|
19
21
|
const SKIP_SUBCOMMANDS = new Set([
|
|
20
22
|
'help',
|
|
21
23
|
'--help',
|
|
@@ -23,12 +25,14 @@ const SKIP_SUBCOMMANDS = new Set([
|
|
|
23
25
|
'--version',
|
|
24
26
|
'-v',
|
|
25
27
|
]);
|
|
26
|
-
/** Skip provisioning for help/version invocations
|
|
27
|
-
function
|
|
28
|
+
/** Skip provisioning side effects entirely for help/version invocations. */
|
|
29
|
+
function shouldSkipAllForArgv(argv) {
|
|
28
30
|
const sub = argv[2];
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
return sub !== undefined && SKIP_SUBCOMMANDS.has(sub);
|
|
32
|
+
}
|
|
33
|
+
/** Skip slash-command writes for bare front-door boot; pruning still runs. */
|
|
34
|
+
function shouldSkipWritesForArgv(argv) {
|
|
35
|
+
return argv[2] === undefined;
|
|
32
36
|
}
|
|
33
37
|
/** Whether a host runtime is in use (its root dir exists). crtr writes into a
|
|
34
38
|
* host's dirs only when present and never creates `~/.claude` or `~/.pi`. */
|
|
@@ -59,14 +63,33 @@ export function writeIfOurs(path, content, markerPrefix) {
|
|
|
59
63
|
ensureDir(dirname(path));
|
|
60
64
|
writeFileSync(path, content, 'utf8');
|
|
61
65
|
}
|
|
62
|
-
/**
|
|
66
|
+
/** Remove a legacy artifact only when its marker proves crtr generated it. */
|
|
67
|
+
function removeIfOurs(path, target, markerPrefix) {
|
|
68
|
+
if (!pathExists(path))
|
|
69
|
+
return;
|
|
70
|
+
const existing = readText(path);
|
|
71
|
+
if (!existing.includes(markerPrefix))
|
|
72
|
+
return;
|
|
73
|
+
removePath(target.layout === 'bundle' ? dirname(path) : path);
|
|
74
|
+
}
|
|
75
|
+
/** Render and write every built-in export artifact to every present host, while
|
|
76
|
+
* pruning legacy generated artifacts that should no longer be surfaced.
|
|
63
77
|
* Best-effort: swallows errors (debug-logged) so a provisioning fault never
|
|
64
78
|
* breaks an unrelated `crtr` command. Kill switch: `CRTR_NO_EXPORTS=1`. */
|
|
65
79
|
export function provisionExports(root, argv = process.argv) {
|
|
66
80
|
try {
|
|
67
81
|
if (process.env.CRTR_NO_EXPORTS === '1')
|
|
68
82
|
return;
|
|
69
|
-
if (
|
|
83
|
+
if (shouldSkipAllForArgv(argv))
|
|
84
|
+
return;
|
|
85
|
+
for (const artifact of legacyExportArtifacts()) {
|
|
86
|
+
for (const target of artifact.targets) {
|
|
87
|
+
if (!hostRootExists(target.host))
|
|
88
|
+
continue;
|
|
89
|
+
removeIfOurs(targetPath(target, artifact.name), target, artifact.markerPrefix);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (shouldSkipWritesForArgv(argv))
|
|
70
93
|
return;
|
|
71
94
|
for (const pair of builtinExportPairs(root)) {
|
|
72
95
|
const content = pair.render();
|
package/dist/core/io.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// agent-ready markdown/XML the caller acts on directly (the result rendered FOR
|
|
3
3
|
// the model, not data it parses); structured errors; stderr is diagnostics only
|
|
4
4
|
// and never carries the result. The raw JSON object is available behind the
|
|
5
|
-
// `--json` global for tooling. See cli-design
|
|
5
|
+
// `--json` global for tooling. See the cli-design reference.
|
|
6
6
|
import { CrtrError } from './errors.js';
|
|
7
7
|
import { ExitCode } from '../types.js';
|
|
8
8
|
import { renderError } from './render.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
2
|
+
export declare function formatLogLine(level: LogLevel, component: string, message: string, fields?: Record<string, unknown>): string;
|
|
3
|
+
export declare function appendLogLine(path: string, line: string): void;
|
|
4
|
+
export declare function logger(component: string): {
|
|
5
|
+
error: (message: string, fields?: Record<string, unknown>) => void;
|
|
6
|
+
warn: (message: string, fields?: Record<string, unknown>) => void;
|
|
7
|
+
info: (message: string, fields?: Record<string, unknown>) => void;
|
|
8
|
+
debug: (message: string, fields?: Record<string, unknown>) => void;
|
|
9
|
+
};
|
package/dist/core/log.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, renameSync, rmSync, statSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { crtrHome } from './canvas/paths.js';
|
|
4
|
+
const LEVEL_RANK = {
|
|
5
|
+
error: 1,
|
|
6
|
+
warn: 2,
|
|
7
|
+
info: 3,
|
|
8
|
+
debug: 4,
|
|
9
|
+
};
|
|
10
|
+
const MAX_BYTES = 5 * 1024 * 1024;
|
|
11
|
+
const ROTATIONS = 2;
|
|
12
|
+
function envLevel() {
|
|
13
|
+
const raw = String(process.env['CRTR_LOG'] ?? '').trim().toLowerCase();
|
|
14
|
+
return raw === 'warn' || raw === 'info' || raw === 'debug' ? raw : 'error';
|
|
15
|
+
}
|
|
16
|
+
function shouldLog(level) {
|
|
17
|
+
return LEVEL_RANK[level] <= LEVEL_RANK[envLevel()];
|
|
18
|
+
}
|
|
19
|
+
function escapeControlChars(value) {
|
|
20
|
+
return value.replace(/[\0-\x1f\x7f]/g, (ch) => {
|
|
21
|
+
switch (ch) {
|
|
22
|
+
case '\n': return '\\n';
|
|
23
|
+
case '\r': return '\\r';
|
|
24
|
+
case '\t': return '\\t';
|
|
25
|
+
default: return `\\u${ch.charCodeAt(0).toString(16).padStart(4, '0')}`;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function formatValue(value) {
|
|
30
|
+
if (typeof value === 'string') {
|
|
31
|
+
const escaped = escapeControlChars(value);
|
|
32
|
+
return /^[^\s"'=]+$/.test(escaped) ? escaped : JSON.stringify(escaped);
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean')
|
|
35
|
+
return String(value);
|
|
36
|
+
if (value === null)
|
|
37
|
+
return 'null';
|
|
38
|
+
if (value === undefined)
|
|
39
|
+
return 'undefined';
|
|
40
|
+
return JSON.stringify(value, (_key, nested) => (typeof nested === 'string' ? escapeControlChars(nested) : nested));
|
|
41
|
+
}
|
|
42
|
+
export function formatLogLine(level, component, message, fields) {
|
|
43
|
+
const parts = [`${new Date().toISOString()} ${level.toUpperCase()} [${component}] ${escapeControlChars(message)}`];
|
|
44
|
+
if (fields !== undefined) {
|
|
45
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
46
|
+
parts.push(`${key}=${formatValue(value)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return parts.join(' ');
|
|
50
|
+
}
|
|
51
|
+
function rotateIfNeeded(path, nextLineBytes) {
|
|
52
|
+
if (!existsSync(path))
|
|
53
|
+
return;
|
|
54
|
+
let size = 0;
|
|
55
|
+
try {
|
|
56
|
+
size = statSync(path).size;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (size + nextLineBytes < MAX_BYTES)
|
|
62
|
+
return;
|
|
63
|
+
const second = `${path}.2`;
|
|
64
|
+
const first = `${path}.1`;
|
|
65
|
+
try {
|
|
66
|
+
rmSync(second, { force: true });
|
|
67
|
+
}
|
|
68
|
+
catch { /* best-effort */ }
|
|
69
|
+
try {
|
|
70
|
+
if (existsSync(first))
|
|
71
|
+
renameSync(first, second);
|
|
72
|
+
}
|
|
73
|
+
catch { /* best-effort */ }
|
|
74
|
+
try {
|
|
75
|
+
renameSync(path, first);
|
|
76
|
+
}
|
|
77
|
+
catch { /* best-effort */ }
|
|
78
|
+
}
|
|
79
|
+
export function appendLogLine(path, line) {
|
|
80
|
+
try {
|
|
81
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
82
|
+
appendFileSync(path, `${line}\n`, 'utf8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* best-effort */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function appendRotatingLogLine(path, line) {
|
|
89
|
+
try {
|
|
90
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
91
|
+
rotateIfNeeded(path, Buffer.byteLength(`${line}\n`, 'utf8'));
|
|
92
|
+
appendFileSync(path, `${line}\n`, 'utf8');
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* best-effort */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function logger(component) {
|
|
99
|
+
const sink = component === 'crtrd' ? join(crtrHome(), 'crtrd.log') : null;
|
|
100
|
+
const emit = (level, message, fields) => {
|
|
101
|
+
const line = formatLogLine(level, component, message, fields);
|
|
102
|
+
if (sink !== null && (level !== 'debug' || shouldLog(level)))
|
|
103
|
+
appendRotatingLogLine(sink, line);
|
|
104
|
+
if (shouldLog(level))
|
|
105
|
+
process.stderr.write(`${line}\n`);
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
error: (message, fields) => emit('error', message, fields),
|
|
109
|
+
warn: (message, fields) => emit('warn', message, fields),
|
|
110
|
+
info: (message, fields) => emit('info', message, fields),
|
|
111
|
+
debug: (message, fields) => emit('debug', message, fields),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import type { InstalledPlugin, Scope } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Thin memory-document resolver for the document substrate.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* precedence order project > user > builtin (the same precedence concept as
|
|
8
|
-
* orderPluginsByResolution, minus plugins). It returns the raw parsed
|
|
3
|
+
* Thin memory-document resolver for the document substrate. Resolution is scope
|
|
4
|
+
* + leaf/path only: qualifier parse → scope precedence → direct path lookup →
|
|
5
|
+
* leaf-name fallback. The three memory scopes resolve in precedence order
|
|
6
|
+
* project > user > builtin. It returns the raw parsed
|
|
9
7
|
* frontmatter + body; it does NOT interpret the schema, kind, gate, or rungs —
|
|
10
8
|
* that is the schema/gate layer's job (callers filter by `frontmatter.kind`).
|
|
11
9
|
*/
|
|
@@ -29,7 +27,9 @@ export interface MemoryResolutionOpts {
|
|
|
29
27
|
/** Canonical, unambiguous identifier for a memory document: `<scope>/<name>`. */
|
|
30
28
|
export declare function memoryDocId(doc: MemoryDoc): string;
|
|
31
29
|
/** All memory docs in one scope's memory/ dir, scanned recursively for *.md
|
|
32
|
-
* (topical subdirs supported), sorted by path-derived name.
|
|
30
|
+
* (topical subdirs supported), sorted by path-derived name. SKILL.md bundles
|
|
31
|
+
* are legacy Agent Skills and are ignored; crouter memory docs are plain .md
|
|
32
|
+
* files under memory/. */
|
|
33
33
|
export declare function listMemoryDocs(scope: Scope): MemoryDoc[];
|
|
34
34
|
/** All of one plugin's substrate docs, mounted under the virtual `<pluginName>/`
|
|
35
35
|
* namespace. Walks `pluginMemoryDir(plugin)` recursively for *.md, deriving each
|
|
@@ -44,7 +44,7 @@ export declare function listAllMemoryDocs(scope?: Scope): MemoryDoc[];
|
|
|
44
44
|
/**
|
|
45
45
|
* Resolve a path-derived name to a single memory document.
|
|
46
46
|
*
|
|
47
|
-
* Accepted identifier forms
|
|
47
|
+
* Accepted identifier forms:
|
|
48
48
|
* <name> — bare name; resolved by scope precedence project>user>builtin
|
|
49
49
|
* <scope>/<name> — pinned to one scope (user|project)
|
|
50
50
|
* `<name>` may carry topical subdirs (`taste/foo`); a bare leaf (`foo`) falls
|
|
@@ -28,16 +28,14 @@ function loadMemoryDoc(name, scope, path) {
|
|
|
28
28
|
return { name, scope, path, frontmatter: data, body };
|
|
29
29
|
}
|
|
30
30
|
/** All memory docs in one scope's memory/ dir, scanned recursively for *.md
|
|
31
|
-
* (topical subdirs supported), sorted by path-derived name.
|
|
31
|
+
* (topical subdirs supported), sorted by path-derived name. SKILL.md bundles
|
|
32
|
+
* are legacy Agent Skills and are ignored; crouter memory docs are plain .md
|
|
33
|
+
* files under memory/. */
|
|
32
34
|
export function listMemoryDocs(scope) {
|
|
33
35
|
const dir = scopeMemoryDir(scope);
|
|
34
36
|
if (!dir || !pathExists(dir))
|
|
35
37
|
return [];
|
|
36
38
|
const docs = [];
|
|
37
|
-
// Walk: a dir containing SKILL.md is a single substrate bundle — emit ONE doc
|
|
38
|
-
// named by the dir's relative path, sourced from its SKILL.md, and STOP
|
|
39
|
-
// descending (deeper files are bundle assets, not docs). Every other dir
|
|
40
|
-
// yields its flat *.md files (topical subdirs / INDEX.md) as before.
|
|
41
39
|
const found = [];
|
|
42
40
|
const stack = [dir];
|
|
43
41
|
while (stack.length) {
|
|
@@ -49,17 +47,10 @@ export function listMemoryDocs(scope) {
|
|
|
49
47
|
catch {
|
|
50
48
|
continue;
|
|
51
49
|
}
|
|
52
|
-
const hasSkill = entries.some((e) => e.isFile() && e.name === 'SKILL.md');
|
|
53
|
-
if (hasSkill) {
|
|
54
|
-
const name = relative(dir, d).split(sep).join('/');
|
|
55
|
-
if (name)
|
|
56
|
-
found.push({ path: join(d, 'SKILL.md'), name });
|
|
57
|
-
continue; // stop descent — deeper dirs are assets
|
|
58
|
-
}
|
|
59
50
|
for (const e of entries) {
|
|
60
51
|
if (e.isDirectory())
|
|
61
52
|
stack.push(join(d, e.name));
|
|
62
|
-
else if (e.isFile() && e.name.endsWith('.md')) {
|
|
53
|
+
else if (e.isFile() && e.name.endsWith('.md') && e.name !== 'SKILL.md') {
|
|
63
54
|
const file = join(d, e.name);
|
|
64
55
|
const name = relative(dir, file).replace(/\.md$/i, '').split(sep).join('/');
|
|
65
56
|
if (name)
|
|
@@ -90,7 +81,7 @@ export function listPluginMemoryDocs(plugin, scope) {
|
|
|
90
81
|
if (!pathExists(dir))
|
|
91
82
|
return [];
|
|
92
83
|
const docs = [];
|
|
93
|
-
for (const file of walkFiles(dir, (n) => n.endsWith('.md'))) {
|
|
84
|
+
for (const file of walkFiles(dir, (n) => n.endsWith('.md') && n !== 'SKILL.md')) {
|
|
94
85
|
const derived = relative(dir, file).replace(/\.md$/i, '').split(sep).join('/');
|
|
95
86
|
if (!derived)
|
|
96
87
|
continue;
|
|
@@ -127,23 +118,18 @@ export function listAllMemoryDocs(scope) {
|
|
|
127
118
|
* resolves directly as the file path.) */
|
|
128
119
|
function findMemoryMatches(name, scope) {
|
|
129
120
|
const matches = [];
|
|
121
|
+
const segments = name.split('/');
|
|
122
|
+
const isLegacySkillDoc = segments.at(-1) === 'SKILL';
|
|
130
123
|
for (const s of scopesInPrecedence(scope)) {
|
|
131
124
|
// Native scope memory dir first (native-before-plugin precedence).
|
|
132
125
|
const dir = scopeMemoryDir(s);
|
|
133
126
|
if (dir) {
|
|
134
|
-
const path = join(dir, ...
|
|
135
|
-
if (pathExists(path)) {
|
|
127
|
+
const path = join(dir, ...segments) + '.md';
|
|
128
|
+
if (!isLegacySkillDoc && pathExists(path)) {
|
|
136
129
|
matches.push(loadMemoryDoc(name, s, path));
|
|
137
130
|
continue;
|
|
138
131
|
}
|
|
139
|
-
|
|
140
|
-
// dir name to its bundle doc, and wins over INDEX.md if both exist.
|
|
141
|
-
const skillPath = join(dir, ...name.split('/'), 'SKILL.md');
|
|
142
|
-
if (pathExists(skillPath)) {
|
|
143
|
-
matches.push(loadMemoryDoc(name, s, skillPath));
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
const indexPath = join(dir, ...name.split('/'), 'INDEX.md');
|
|
132
|
+
const indexPath = join(dir, ...segments, 'INDEX.md');
|
|
147
133
|
if (pathExists(indexPath)) {
|
|
148
134
|
matches.push(loadMemoryDoc(name, s, indexPath));
|
|
149
135
|
continue;
|
|
@@ -162,8 +148,9 @@ function findMemoryMatches(name, scope) {
|
|
|
162
148
|
continue;
|
|
163
149
|
const pdir = pluginMemoryDir(p);
|
|
164
150
|
if (rest) {
|
|
165
|
-
const
|
|
166
|
-
|
|
151
|
+
const restSegments = rest.split('/');
|
|
152
|
+
const ppath = join(pdir, ...restSegments) + '.md';
|
|
153
|
+
if (restSegments.at(-1) !== 'SKILL' && pathExists(ppath)) {
|
|
167
154
|
matches.push(loadMemoryDoc(name, s, ppath));
|
|
168
155
|
break;
|
|
169
156
|
}
|
|
@@ -182,7 +169,7 @@ function findMemoryMatches(name, scope) {
|
|
|
182
169
|
}
|
|
183
170
|
/** Leaf-name fallback: match docs whose final path segment equals `leaf`.
|
|
184
171
|
* Only meaningful for a bare segment (a slashed query can never equal a single
|
|
185
|
-
* segment)
|
|
172
|
+
* segment). Returns matches precedence-ordered. */
|
|
186
173
|
function findMemoryByLeaf(leaf, scope) {
|
|
187
174
|
if (leaf.includes('/'))
|
|
188
175
|
return [];
|
|
@@ -202,7 +189,7 @@ function formatLeafAmbiguous(leaf, matches) {
|
|
|
202
189
|
/**
|
|
203
190
|
* Resolve a path-derived name to a single memory document.
|
|
204
191
|
*
|
|
205
|
-
* Accepted identifier forms
|
|
192
|
+
* Accepted identifier forms:
|
|
206
193
|
* <name> — bare name; resolved by scope precedence project>user>builtin
|
|
207
194
|
* <scope>/<name> — pinned to one scope (user|project)
|
|
208
195
|
* `<name>` may carry topical subdirs (`taste/foo`); a bare leaf (`foo`) falls
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - resolve (high-level composer)
|
|
8
8
|
* - ResolvedPersona (return type of resolve)
|
|
9
9
|
*/
|
|
10
|
-
export { loadPersona, loadKernel, availableKinds, kindWhenToUse, subPersonasFor, loadLifecycleFragment, loadSpineFragment } from './loader.js';
|
|
11
|
-
export type { LoadedPersona, SubPersona } from './loader.js';
|
|
12
|
-
export { resolve } from './resolve.js';
|
|
13
|
-
export type { ResolvedPersona } from './resolve.js';
|
|
10
|
+
export { loadPersona, loadPersonaSource, loadKernel, loadKernelSource, availableKinds, kindWhenToUse, subPersonasFor, loadLifecycleFragment, loadLifecycleFragmentSource, loadSpineFragment, loadSpineFragmentSource, loadRuntimeBase, loadRuntimeBaseSource, loadWaitingFragment, loadWaitingFragmentSource, loadScopedText, } from './loader.js';
|
|
11
|
+
export type { LoadedPersona, LoadedPersonaSource, SubPersona } from './loader.js';
|
|
12
|
+
export { resolve, resolveLayers, resolvePromptReview } from './resolve.js';
|
|
13
|
+
export type { ResolvedPersona, PromptReviewData, PromptReviewConfig, PromptLayer, PromptSource } from './resolve.js';
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
* - resolve (high-level composer)
|
|
8
8
|
* - ResolvedPersona (return type of resolve)
|
|
9
9
|
*/
|
|
10
|
-
export { loadPersona, loadKernel, availableKinds, kindWhenToUse, subPersonasFor, loadLifecycleFragment, loadSpineFragment } from './loader.js';
|
|
11
|
-
export { resolve } from './resolve.js';
|
|
10
|
+
export { loadPersona, loadPersonaSource, loadKernel, loadKernelSource, availableKinds, kindWhenToUse, subPersonasFor, loadLifecycleFragment, loadLifecycleFragmentSource, loadSpineFragment, loadSpineFragmentSource, loadRuntimeBase, loadRuntimeBaseSource, loadWaitingFragment, loadWaitingFragmentSource, loadScopedText, } from './loader.js';
|
|
11
|
+
export { resolve, resolveLayers, resolvePromptReview } from './resolve.js';
|
|
@@ -14,12 +14,36 @@
|
|
|
14
14
|
* compiled build), resolved relative to this module — mirrors the pattern used
|
|
15
15
|
* for STOPHOOK_PATH in spawn.ts.
|
|
16
16
|
*/
|
|
17
|
+
import type { Scope } from '../../types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Find the first existing file across the scope roots.
|
|
20
|
+
* `relativePath` is relative to each root (e.g. 'general/PERSONA.md').
|
|
21
|
+
*/
|
|
22
|
+
export interface ResolvedPersonaSource {
|
|
23
|
+
path: string;
|
|
24
|
+
scope: Scope;
|
|
25
|
+
}
|
|
26
|
+
export declare function loadScopedText(relativePath: string): {
|
|
27
|
+
text: string;
|
|
28
|
+
sourcePath: string;
|
|
29
|
+
scope: Scope;
|
|
30
|
+
} | null;
|
|
17
31
|
export interface LoadedPersona {
|
|
18
32
|
/** Raw, uncoerced frontmatter key/value record (null when no frontmatter). */
|
|
19
33
|
frontmatter: Record<string, unknown> | null;
|
|
20
34
|
/** Body text with any @include directives inlined. */
|
|
21
35
|
body: string;
|
|
22
36
|
}
|
|
37
|
+
export interface LoadedPersonaSource extends LoadedPersona {
|
|
38
|
+
/** Raw body text before @include expansion. */
|
|
39
|
+
rawBody: string;
|
|
40
|
+
/** Absolute source path. */
|
|
41
|
+
sourcePath: string;
|
|
42
|
+
/** Scope the file was resolved from. */
|
|
43
|
+
scope: Scope;
|
|
44
|
+
/** Relative source path within the scope root, e.g. `personas/developer/PERSONA.md`. */
|
|
45
|
+
source: string;
|
|
46
|
+
}
|
|
23
47
|
/**
|
|
24
48
|
* Load and parse a persona file for the given `kind` and `mode`.
|
|
25
49
|
*
|
|
@@ -27,11 +51,18 @@ export interface LoadedPersona {
|
|
|
27
51
|
* On success, `@include` directives in the body are resolved and inlined.
|
|
28
52
|
*/
|
|
29
53
|
export declare function loadPersona(kind: string, mode: 'base' | 'orchestrator'): LoadedPersona | null;
|
|
54
|
+
/** Load a persona file together with its provenance. */
|
|
55
|
+
export declare function loadPersonaSource(kind: string, mode: 'base' | 'orchestrator'): LoadedPersonaSource | null;
|
|
30
56
|
/**
|
|
31
57
|
* Load the raw text of the orchestration kernel (no frontmatter, body only).
|
|
32
58
|
* Returns an empty string if the kernel file cannot be found.
|
|
33
59
|
*/
|
|
34
60
|
export declare function loadKernel(): string;
|
|
61
|
+
export declare function loadKernelSource(): {
|
|
62
|
+
text: string;
|
|
63
|
+
sourcePath: string;
|
|
64
|
+
scope: Scope;
|
|
65
|
+
} | null;
|
|
35
66
|
/**
|
|
36
67
|
* Load the base runtime prompt — the node operating protocol prepended to
|
|
37
68
|
* EVERY persona (delegate/ask/promote). Returns '' if not found. The
|
|
@@ -39,6 +70,11 @@ export declare function loadKernel(): string;
|
|
|
39
70
|
* live in their own fragments, loaded below.
|
|
40
71
|
*/
|
|
41
72
|
export declare function loadRuntimeBase(): string;
|
|
73
|
+
export declare function loadRuntimeBaseSource(): {
|
|
74
|
+
text: string;
|
|
75
|
+
sourcePath: string;
|
|
76
|
+
scope: Scope;
|
|
77
|
+
} | null;
|
|
42
78
|
/**
|
|
43
79
|
* Load the waiting fragment — the cross-kind "waiting is a way to end a turn"
|
|
44
80
|
* operating posture (arm a wake + go dormant instead of busy-looping or
|
|
@@ -46,6 +82,11 @@ export declare function loadRuntimeBase(): string;
|
|
|
46
82
|
* the lifecycle fragment (resolve.ts). Returns '' if the fragment is missing.
|
|
47
83
|
*/
|
|
48
84
|
export declare function loadWaitingFragment(): string;
|
|
85
|
+
export declare function loadWaitingFragmentSource(): {
|
|
86
|
+
text: string;
|
|
87
|
+
sourcePath: string;
|
|
88
|
+
scope: Scope;
|
|
89
|
+
} | null;
|
|
49
90
|
/**
|
|
50
91
|
* Load the lifecycle fragment — the "how you end" contract, keyed on the node's
|
|
51
92
|
* lifecycle axis: `terminal` (drive to done + `push final`) or `resident`
|
|
@@ -54,6 +95,11 @@ export declare function loadWaitingFragment(): string;
|
|
|
54
95
|
* Returns '' if the fragment file cannot be found.
|
|
55
96
|
*/
|
|
56
97
|
export declare function loadLifecycleFragment(lifecycle: 'terminal' | 'resident'): string;
|
|
98
|
+
export declare function loadLifecycleFragmentSource(lifecycle: 'terminal' | 'resident'): {
|
|
99
|
+
text: string;
|
|
100
|
+
sourcePath: string;
|
|
101
|
+
scope: Scope;
|
|
102
|
+
} | null;
|
|
57
103
|
/**
|
|
58
104
|
* Load the spine fragment — the "who you report to" contract, keyed on whether
|
|
59
105
|
* the node has a manager (anyone it reports up to). `has-manager` teaches the
|
|
@@ -62,6 +108,11 @@ export declare function loadLifecycleFragment(lifecycle: 'terminal' | 'resident'
|
|
|
62
108
|
* Returns '' if the fragment file cannot be found.
|
|
63
109
|
*/
|
|
64
110
|
export declare function loadSpineFragment(hasManager: boolean): string;
|
|
111
|
+
export declare function loadSpineFragmentSource(hasManager: boolean): {
|
|
112
|
+
text: string;
|
|
113
|
+
sourcePath: string;
|
|
114
|
+
scope: Scope;
|
|
115
|
+
} | null;
|
|
65
116
|
/**
|
|
66
117
|
* Enumerate the kinds with at least one persona file (PERSONA.md or
|
|
67
118
|
* orchestrator.md) across all scope roots (project/user/builtin). Used to
|