@crouton-kit/crouter 0.3.32 → 0.3.34
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 +10 -2
- package/dist/build-root.js +4 -6
- package/dist/builtin-memory/crouter-development/marketplaces.md +8 -8
- 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 +31 -31
- 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/examples/imessage-assistant.md +3 -3
- package/dist/builtin-memory/internal/nodes-and-canvas.md +9 -9
- 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 +8 -15
- 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-personas/waiting.md +1 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-help-gate.test.ts +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +663 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +52 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +418 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crouter-help.ts +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/filters.json +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/index.ts +174 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-help-gate.ts +408 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +442 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +119 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/nested-context.ts +327 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +574 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +260 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/strip-skills-docs.ts +40 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/sysprompt-window.ts +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.js +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.ts +479 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/LICENSE +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/README.md +172 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/bin.mjs +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/errors.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/index.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/log.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/util.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/visit.js +233 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/index.js +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.mjs +201 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.js +224 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.js +337 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.js +178 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.d.ts +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/options.d.ts +350 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.js +980 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.js +107 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.js +134 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.d.ts +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.d.ts +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.js +236 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/package.json +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/util.js +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package-lock.json +3385 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package.json +25 -0
- package/dist/builtin-pi-packages/pi-mode-switch/README.md +64 -0
- package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +40 -0
- package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +422 -0
- package/dist/builtin-pi-packages/pi-mode-switch/package.json +13 -0
- 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__/crtr-output-coverage.test.js +55 -0
- package/dist/clients/attach/__tests__/crtr-output-render.test.js +2340 -0
- package/dist/clients/attach/attach-cmd.d.ts +18 -0
- package/dist/clients/attach/attach-cmd.js +1797 -797
- package/dist/clients/attach/auth-pickers.js +2 -2
- package/dist/clients/attach/canvas-panels.js +3 -3
- package/dist/clients/attach/chat-view.d.ts +13 -2
- package/dist/clients/attach/chat-view.js +53 -10
- package/dist/clients/attach/clipboard-image.js +1 -1
- package/dist/clients/attach/clipboard-text.js +1 -1
- package/dist/clients/attach/config-load.d.ts +8 -4
- package/dist/clients/attach/config-load.js +3 -1
- package/dist/clients/attach/crtr-output-render.d.ts +48 -0
- package/dist/clients/attach/crtr-output-render.js +646 -0
- package/dist/clients/attach/extension-dialogs.d.ts +2 -3
- package/dist/clients/attach/extension-dialogs.js +8 -10
- package/dist/clients/attach/graph-overlay.js +6 -5
- package/dist/clients/attach/input-controller.d.ts +4 -3
- package/dist/clients/attach/input-controller.js +25 -4
- package/dist/clients/attach/pickers.js +1 -1
- package/dist/clients/attach/slash-commands.d.ts +7 -7
- package/dist/clients/attach/slash-commands.js +40 -17
- package/dist/clients/attach/titled-editor.d.ts +4 -0
- package/dist/clients/attach/titled-editor.js +31 -15
- package/dist/clients/attach/view-socket.d.ts +2 -1
- package/dist/clients/attach/view-socket.js +28 -9
- 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 +166 -35
- 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 +32 -13
- 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 +43 -2
- 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 +51 -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 +12 -11
- package/dist/commands/memory/find.js +3 -2
- package/dist/commands/memory/lint.js +15 -8
- package/dist/commands/memory/list.js +4 -3
- package/dist/commands/memory/origin.d.ts +1 -0
- package/dist/commands/memory/origin.js +88 -0
- package/dist/commands/memory/read.js +3 -3
- package/dist/commands/memory/shared.d.ts +9 -4
- package/dist/commands/memory/shared.js +28 -10
- package/dist/commands/memory/write.js +19 -14
- package/dist/commands/memory.js +6 -8
- 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 +126 -0
- package/dist/commands/node.d.ts +2 -2
- package/dist/commands/node.js +987 -603
- package/dist/commands/pkg/market-inspect.d.ts +2 -1
- package/dist/commands/pkg/market-inspect.js +14 -32
- package/dist/commands/pkg/market-manage.d.ts +3 -1
- package/dist/commands/pkg/market-manage.js +58 -154
- package/dist/commands/pkg/market.js +7 -7
- package/dist/commands/pkg/plugin-inspect.d.ts +2 -1
- package/dist/commands/pkg/plugin-inspect.js +13 -29
- package/dist/commands/pkg/plugin-manage.d.ts +5 -1
- package/dist/commands/pkg/plugin-manage.js +246 -172
- package/dist/commands/pkg/plugin.js +6 -6
- package/dist/commands/pkg.js +7 -7
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.js +79 -11
- package/dist/commands/revive.js +79 -4
- 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/surface.d.ts +2 -0
- package/dist/commands/surface.js +43 -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/setup-core.d.ts +88 -0
- package/dist/commands/sys/setup-core.js +352 -0
- package/dist/commands/sys/setup.d.ts +2 -0
- package/dist/commands/sys/setup.js +516 -0
- package/dist/commands/sys/sync.js +311 -159
- package/dist/commands/sys/sysprompt.d.ts +1 -0
- package/dist/commands/sys/sysprompt.js +89 -0
- package/dist/commands/sys.js +10 -5
- package/dist/commands/view-cycle.js +5 -5
- package/dist/commands/view-list.js +3 -3
- package/dist/commands/view-new.js +6 -6
- package/dist/commands/view-pick.js +6 -6
- package/dist/commands/view-run.js +14 -14
- package/dist/commands/view.js +3 -3
- package/dist/commands/workspace.js +10 -10
- package/dist/core/__tests__/boot.test.js +140 -0
- package/dist/core/__tests__/broker-preflight.test.js +85 -0
- package/dist/core/__tests__/broker-sdk-wiring.test.js +10 -16
- package/dist/core/__tests__/canvas.test.js +37 -1
- 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.js +37 -0
- package/dist/core/__tests__/context-intro.test.js +48 -14
- package/dist/core/__tests__/daemon-boot.test.js +204 -9
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +30 -4
- package/dist/core/__tests__/fixtures/fake-engine.js +157 -18
- package/dist/core/__tests__/fixtures/fake-pi-host.js +10 -1
- package/dist/core/__tests__/full/broker-attach-limits.test.js +1 -1
- package/dist/core/__tests__/full/broker-attach-stream.test.js +1 -1
- package/dist/core/__tests__/full/broker-crash-teardown.test.js +10 -5
- package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +1 -1
- package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +1 -1
- package/dist/core/__tests__/full/broker-pane-resolution.test.js +1 -1
- package/dist/core/__tests__/full/cascade-close.test.js +31 -18
- package/dist/core/__tests__/full/detach-focus.test.js +2 -2
- package/dist/core/__tests__/full/human-new-window-regression.test.js +1 -1
- package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
- package/dist/core/__tests__/helpers/harness.d.ts +1 -1
- package/dist/core/__tests__/helpers/harness.js +3 -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__/live-mutation-verbs.test.js +10 -10
- package/dist/core/__tests__/live-mutation.test.js +8 -8
- package/dist/core/__tests__/migration.test.js +172 -13
- package/dist/core/__tests__/on-read-dedup-resume.test.js +40 -0
- package/dist/core/__tests__/preview-registry-sync.test.js +36 -0
- package/dist/core/__tests__/prune-to-limit.test.js +91 -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 +100 -27
- 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.js +72 -0
- package/dist/core/__tests__/tmux-surface.test.js +5 -1
- package/dist/core/__tests__/trigger-migration.test.js +48 -0
- package/dist/core/__tests__/wake-bearings.test.js +23 -21
- package/dist/core/__tests__/wake-origin.test.js +36 -33
- 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/boot.d.ts +48 -0
- package/dist/core/canvas/boot.js +157 -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 +33 -0
- package/dist/core/canvas/canvas.js +138 -8
- package/dist/core/canvas/db.js +121 -9
- package/dist/core/canvas/index.d.ts +1 -1
- package/dist/core/canvas/index.js +1 -1
- 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 +32 -18
- package/dist/core/canvas/paths.d.ts +18 -1
- package/dist/core/canvas/paths.js +31 -2
- package/dist/core/canvas/pid.d.ts +6 -0
- package/dist/core/canvas/pid.js +13 -0
- 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/triggers.d.ts +108 -0
- package/dist/core/canvas/triggers.js +320 -0
- package/dist/core/canvas/types.d.ts +130 -48
- package/dist/core/command.js +13 -4
- 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/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/__tests__/model-auth-guest.test.js +151 -0
- package/dist/core/hearth/config.d.ts +3 -0
- package/dist/core/hearth/config.js +111 -0
- package/dist/core/hearth/guest-env.d.ts +9 -0
- package/dist/core/hearth/guest-env.js +27 -0
- package/dist/core/hearth/index.d.ts +5 -0
- package/dist/core/hearth/index.js +5 -0
- package/dist/core/hearth/model-auth-guest.d.ts +8 -0
- package/dist/core/hearth/model-auth-guest.js +435 -0
- package/dist/core/hearth/provider.d.ts +28 -0
- package/dist/core/hearth/provider.js +10 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +12 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.js +147 -0
- package/dist/core/hearth/providers/blaxel-home.d.ts +15 -0
- package/dist/core/hearth/providers/blaxel-home.js +136 -0
- package/dist/core/hearth/providers/blaxel.d.ts +31 -0
- package/dist/core/hearth/providers/blaxel.js +282 -0
- package/dist/core/hearth/providers/types.d.ts +77 -0
- package/dist/core/hearth/registry.d.ts +15 -0
- package/dist/core/hearth/registry.js +180 -0
- package/dist/core/hearth/types.d.ts +156 -0
- package/dist/core/help.d.ts +16 -0
- package/dist/core/help.js +2 -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 +13 -13
- package/dist/core/memory-resolver.js +70 -51
- 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/preview-registry.d.ts +25 -0
- package/dist/core/preview-registry.js +2047 -0
- package/dist/core/resolver.d.ts +1 -0
- package/dist/core/resolver.js +23 -16
- 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 +46 -25
- package/dist/core/runtime/bearings.js +313 -52
- 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 +40 -5
- package/dist/core/runtime/broker-protocol.js +2 -2
- package/dist/core/runtime/broker.js +343 -18
- package/dist/core/runtime/close.js +39 -31
- 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 +32 -46
- package/dist/core/runtime/launch.d.ts +41 -21
- package/dist/core/runtime/launch.js +165 -52
- package/dist/core/runtime/lifecycle.js +7 -7
- 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 +41 -36
- package/dist/core/runtime/placement.js +159 -74
- package/dist/core/runtime/promote.d.ts +2 -0
- package/dist/core/runtime/promote.js +23 -3
- package/dist/core/runtime/recycle.js +13 -11
- package/dist/core/runtime/reset.d.ts +6 -3
- package/dist/core/runtime/reset.js +5 -5
- package/dist/core/runtime/revive-all.d.ts +5 -2
- package/dist/core/runtime/revive-all.js +5 -2
- package/dist/core/runtime/revive.d.ts +19 -8
- package/dist/core/runtime/revive.js +79 -25
- package/dist/core/runtime/roadmap.d.ts +1 -1
- package/dist/core/runtime/roadmap.js +1 -1
- package/dist/core/runtime/spawn.d.ts +3 -3
- package/dist/core/runtime/spawn.js +37 -13
- package/dist/core/runtime/stop-guard.js +11 -6
- 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 +30 -7
- package/dist/core/runtime/tmux.js +138 -84
- package/dist/core/runtime/view-socket-client.d.ts +46 -0
- package/dist/core/runtime/view-socket-client.js +203 -0
- package/dist/core/scope.d.ts +9 -0
- package/dist/core/scope.js +37 -15
- package/dist/core/substrate/index.d.ts +1 -1
- package/dist/core/substrate/index.js +1 -1
- package/dist/core/substrate/on-read.js +39 -25
- 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.js +62 -0
- package/dist/core/view/contract.d.ts +20 -0
- package/dist/core/view/loader.js +2 -2
- 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/core/wake.d.ts +2 -2
- package/dist/core/wake.js +7 -7
- package/dist/daemon/__tests__/predicate-eval.test.js +109 -0
- package/dist/daemon/crtrd.d.ts +3 -19
- package/dist/daemon/crtrd.js +360 -280
- package/dist/daemon/manage.d.ts +18 -1
- package/dist/daemon/manage.js +54 -9
- package/dist/daemon/predicate-eval.d.ts +52 -0
- package/dist/daemon/predicate-eval.js +248 -0
- package/dist/hearth/control-plane/__tests__/node-message.test.js +60 -0
- package/dist/hearth/control-plane/__tests__/rate-limit-recurrence.test.js +49 -0
- package/dist/hearth/control-plane/__tests__/relay-security.test.js +314 -0
- package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts +1 -0
- package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.d.ts +1 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
- package/dist/hearth/control-plane/__tests__/webhook-ingress.test.d.ts +1 -0
- package/dist/hearth/control-plane/__tests__/webhook-ingress.test.js +167 -0
- package/dist/hearth/control-plane/config.d.ts +21 -0
- package/dist/hearth/control-plane/config.js +77 -0
- package/dist/hearth/control-plane/db.d.ts +30 -0
- package/dist/hearth/control-plane/db.js +534 -0
- package/dist/hearth/control-plane/ingress/rate-limit.d.ts +24 -0
- package/dist/hearth/control-plane/ingress/rate-limit.js +100 -0
- package/dist/hearth/control-plane/ingress/route-store.d.ts +31 -0
- package/dist/hearth/control-plane/ingress/route-store.js +61 -0
- package/dist/hearth/control-plane/ingress/webhook-delivery-store.d.ts +41 -0
- package/dist/hearth/control-plane/ingress/webhook-delivery-store.js +69 -0
- package/dist/hearth/control-plane/ingress/webhook-route.d.ts +55 -0
- package/dist/hearth/control-plane/ingress/webhook-route.js +285 -0
- package/dist/hearth/control-plane/main.d.ts +1 -0
- package/dist/hearth/control-plane/main.js +88 -0
- package/dist/hearth/control-plane/node-message.d.ts +31 -0
- package/dist/hearth/control-plane/node-message.js +98 -0
- package/dist/hearth/control-plane/register.d.ts +15 -0
- package/dist/hearth/control-plane/register.js +34 -0
- package/dist/hearth/control-plane/registry.d.ts +17 -0
- package/dist/hearth/control-plane/registry.js +161 -0
- package/dist/hearth/control-plane/relay.d.ts +40 -0
- package/dist/hearth/control-plane/relay.js +642 -0
- package/dist/hearth/control-plane/scheduler/fire-store.d.ts +36 -0
- package/dist/hearth/control-plane/scheduler/fire-store.js +73 -0
- package/dist/hearth/control-plane/scheduler/recurrence.d.ts +7 -0
- package/dist/hearth/control-plane/scheduler/recurrence.js +58 -0
- package/dist/hearth/control-plane/scheduler/scan-loop.d.ts +38 -0
- package/dist/hearth/control-plane/scheduler/scan-loop.js +138 -0
- package/dist/hearth/control-plane/scheduler/schedule-store.d.ts +32 -0
- package/dist/hearth/control-plane/scheduler/schedule-store.js +66 -0
- package/dist/hearth/control-plane/secrets.d.ts +17 -0
- package/dist/hearth/control-plane/secrets.js +113 -0
- package/dist/hearth/control-plane/server.d.ts +27 -0
- package/dist/hearth/control-plane/server.js +346 -0
- package/dist/hearth/control-plane/session.d.ts +68 -0
- package/dist/hearth/control-plane/session.js +273 -0
- package/dist/hearth/control-plane/triggers/acl.d.ts +14 -0
- package/dist/hearth/control-plane/triggers/acl.js +52 -0
- package/dist/hearth/control-plane/triggers/audit-store.d.ts +38 -0
- package/dist/hearth/control-plane/triggers/audit-store.js +79 -0
- package/dist/hearth/control-plane/triggers/deliver.d.ts +43 -0
- package/dist/hearth/control-plane/triggers/deliver.js +76 -0
- package/dist/hearth/control-plane/triggers/envelope.d.ts +29 -0
- package/dist/hearth/control-plane/triggers/envelope.js +38 -0
- package/dist/hearth/control-plane/types.d.ts +66 -0
- package/dist/hearth/control-plane/types.js +1 -0
- package/dist/hearth/control-plane/wake.d.ts +80 -0
- package/dist/hearth/control-plane/wake.js +312 -0
- 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__/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 +61 -0
- package/dist/hearth/wake-proxy/home.js +333 -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 +47 -24
- package/dist/pi-extensions/canvas-nav.js +16 -9
- package/dist/pi-extensions/canvas-stophook.d.ts +1 -1
- package/dist/pi-extensions/canvas-stophook.js +78 -11
- package/dist/prompts/view.js +7 -8
- 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-BRKxe-hy.js +80 -0
- package/dist/web-client/assets/index-BZUxTkv5.css +2 -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 +37 -11
- package/scripts/postinstall.mjs +8 -0
- package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
- package/dist/clients/attach/__tests__/clipboard-image.test.js +0 -76
- package/dist/clients/attach/__tests__/editor-newline.test.js +0 -82
- package/dist/clients/attach/__tests__/git-info.test.js +0 -31
- package/dist/clients/attach/__tests__/onrequest-wired.test.js +0 -20
- package/dist/clients/attach/__tests__/reconnect-giveup.test.js +0 -30
- package/dist/clients/attach/__tests__/slash-quit-copy.test.js +0 -42
- package/dist/clients/attach/__tests__/titled-editor.test.js +0 -39
- package/dist/commands/memory/__tests__/lint-schema.test.js +0 -52
- package/dist/core/__tests__/argv-parser.test.js +0 -217
- package/dist/core/__tests__/draw-style.test.js +0 -258
- package/dist/core/__tests__/error-stall-recycle.test.js +0 -141
- package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
- package/dist/core/__tests__/keystone.test.js +0 -185
- package/dist/core/__tests__/listing-completeness.test.js +0 -31
- package/dist/core/__tests__/memory-resolver.test.js +0 -108
- package/dist/core/__tests__/memory.test.js +0 -60
- package/dist/core/__tests__/pane-column.test.js +0 -153
- package/dist/core/__tests__/persona-compose.test.js +0 -53
- package/dist/core/__tests__/persona-subkind.test.js +0 -65
- package/dist/core/__tests__/persona.test.js +0 -107
- package/dist/core/__tests__/unknown-path.test.js +0 -58
- package/dist/core/canvas/wakeups.d.ts +0 -76
- package/dist/core/canvas/wakeups.js +0 -185
- 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/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{clipboard-image.test.d.ts → crtr-output-render.test.d.ts} +0 -0
- /package/dist/clients/{attach/__tests__/editor-newline.test.d.ts → web/__tests__/source-cache.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/git-info.test.d.ts → commands/sys/__tests__/sync-import.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → core/__tests__/broker-preflight.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → core/__tests__/chat-view-reconnect.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → core/__tests__/connection-reconnect-resume.test.d.ts} +0 -0
- /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
- /package/dist/core/__tests__/{argv-parser.test.d.ts → preview-registry-sync.test.d.ts} +0 -0
- /package/dist/core/__tests__/{draw-style.test.d.ts → prune-to-limit.test.d.ts} +0 -0
- /package/dist/core/__tests__/{error-stall-recycle.test.d.ts → stranded-relaunch.test.d.ts} +0 -0
- /package/dist/core/__tests__/{frame-decoder-perf.test.d.ts → trigger-migration.test.d.ts} +0 -0
- /package/dist/core/__tests__/{keystone.test.d.ts → yield-ensures-daemon.test.d.ts} +0 -0
- /package/dist/core/{__tests__/listing-completeness.test.d.ts → hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
- /package/dist/core/{__tests__/memory-resolver.test.d.ts → hearth/providers/types.js} +0 -0
- /package/dist/core/{__tests__/memory.test.d.ts → hearth/types.js} +0 -0
- /package/dist/core/{__tests__/pane-column.test.d.ts → host-exports/__tests__/export-prunes-boot-skill.test.d.ts} +0 -0
- /package/dist/core/{__tests__/persona-compose.test.d.ts → view/__tests__/transport-cache.test.d.ts} +0 -0
- /package/dist/{core/__tests__/persona-subkind.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
- /package/dist/{core/__tests__/persona.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
- /package/dist/{core/__tests__/unknown-path.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
- /package/dist/{core/skill-sync/__tests__/dry-run-wrote-count.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// server.ts — the unified
|
|
1
|
+
// server.ts — the unified surface web server: the crouter web UI server.
|
|
2
2
|
//
|
|
3
|
-
// ONE long-running server process on
|
|
4
|
-
// origin (the §2 unified server):
|
|
3
|
+
// ONE long-running server process on the bound host that serves THREE concerns
|
|
4
|
+
// on one origin (the §2 unified server):
|
|
5
5
|
// • GET /* → the shell SPA (static dist/web-client/, or Vite
|
|
6
6
|
// middleware in --dev) + SPA fallback.
|
|
7
7
|
// • POST /__crtr/source → the source + command bridge: decode a SourceRequest
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// • WS /node/<id> → open that node's ALREADY-running broker `view.sock`
|
|
14
14
|
// and relay frames VERBATIM both directions. The relay
|
|
15
15
|
// adds NOTHING — the browser is the SAME protocol peer
|
|
16
|
-
// as `crtr attach`.
|
|
16
|
+
// as `crtr surface attach`.
|
|
17
17
|
//
|
|
18
18
|
// §0 ONE-WRITER INVARIANT: the WS relay is ONLY a socket relay. It NEVER calls
|
|
19
19
|
// reviveNode, NEVER spawns `pi --session`, NEVER touches SessionManager, and
|
|
@@ -21,23 +21,34 @@
|
|
|
21
21
|
// ALREADY-running broker's `view.sock`; if the broker is not running the WS is
|
|
22
22
|
// closed with a clear reason. The relay NEVER launches an engine. ALL writes go
|
|
23
23
|
// through the bridge running `crtr` SUBPROCESSES — this process is never the
|
|
24
|
-
// sanctioned writer; the CLI it shells out to is.
|
|
24
|
+
// sanctioned writer; the CLI it shells out to is. The sanctioned exception is a
|
|
25
|
+
// relay fault record written directly to the node when the broker socket fails.
|
|
25
26
|
//
|
|
26
27
|
// One `view.sock` connection per browser-WS (N browsers of one node = N broker
|
|
27
28
|
// clients) — the broker fans out natively, so there is no bridge-side fan-out.
|
|
28
29
|
import { createServer as createHttpServer } from 'node:http';
|
|
29
|
-
import { createConnection } from 'node:net';
|
|
30
|
+
import { createConnection, isIP } from 'node:net';
|
|
30
31
|
import { createReadStream, existsSync, statSync } from 'node:fs';
|
|
31
32
|
import { fileURLToPath } from 'node:url';
|
|
32
33
|
import { dirname, extname, join, normalize, resolve } from 'node:path';
|
|
33
34
|
import { WebSocketServer } from 'ws';
|
|
34
|
-
import {
|
|
35
|
+
import { viewSocketPath } from '../../core/canvas/paths.js';
|
|
35
36
|
import { getNode } from '../../core/canvas/index.js';
|
|
36
37
|
import { BROKER_READ_CAPS, CLIENT_READ_CAPS, FrameDecoder, FrameOverflowError, } from '../../core/runtime/broker-protocol.js';
|
|
38
|
+
import { classify } from '../../core/fault-classifier.js';
|
|
39
|
+
import { clearFault, recordFault } from '../../core/runtime/fault.js';
|
|
37
40
|
import { createLocalTransport } from '../../core/view/transport-local.js';
|
|
41
|
+
import { createBurstCoalescingTransport } from '../../core/view/transport-cache.js';
|
|
38
42
|
import { runSourceRequest } from '../../core/view/bridge.js';
|
|
39
43
|
import { startEventHub } from './events.js';
|
|
40
44
|
import { createDevServer } from './dev-server.js';
|
|
45
|
+
import { SOURCE_CACHE_TTL_MS, isCoalescableSourceRequest } from './source-cache.js';
|
|
46
|
+
// ── Hearth product seam: model-auth lane (P3.3b, Silas-approved exception) ──
|
|
47
|
+
// This is the ONLY Hearth-aware import in this file. All OAuth/status/start/
|
|
48
|
+
// finish product logic lives in core/hearth/model-auth-guest.ts; this module
|
|
49
|
+
// provides only routing + relay-token enforcement for the lane (see the route
|
|
50
|
+
// block in startWebServer below).
|
|
51
|
+
import { handleHearthModelAuthRequest } from '../../core/hearth/model-auth-guest.js';
|
|
41
52
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
42
53
|
/** Candidate dirs to serve the shell SPA bundle from, in priority order: an
|
|
43
54
|
* explicit override, the compiled-module-relative `dist/web-client/` (what
|
|
@@ -94,11 +105,46 @@ function nodeIdFromPath(pathname) {
|
|
|
94
105
|
return null; // malformed percent-encoding — treat as no match
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
|
-
/** A node id is used to build `
|
|
98
|
-
* path separator or `..` (e.g. a decoded `..%2f..`
|
|
108
|
+
/** A node id is used to build the broker socket path via `viewSocketPath(id)`, so
|
|
109
|
+
* it MUST NOT contain a path separator or `..` (e.g. a decoded `..%2f..`). */
|
|
99
110
|
function isSafeNodeId(id) {
|
|
100
111
|
return id !== '' && !/[/\\]/.test(id) && !id.includes('..');
|
|
101
112
|
}
|
|
113
|
+
function isLoopbackHost(host) {
|
|
114
|
+
const lower = host.toLowerCase();
|
|
115
|
+
const ipVersion = isIP(host);
|
|
116
|
+
if (lower === 'localhost' || lower === '::1')
|
|
117
|
+
return true;
|
|
118
|
+
if (ipVersion === 4 && host.startsWith('127.'))
|
|
119
|
+
return true;
|
|
120
|
+
if (lower === '::ffff:127.0.0.1')
|
|
121
|
+
return true;
|
|
122
|
+
if (ipVersion === 6 && lower.startsWith('::ffff:127.'))
|
|
123
|
+
return true;
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
function hostForUrl(host) {
|
|
127
|
+
return host.includes(':') ? `[${host}]` : host;
|
|
128
|
+
}
|
|
129
|
+
function requestTokens(req) {
|
|
130
|
+
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
131
|
+
const tokens = [];
|
|
132
|
+
const queryToken = url.searchParams.get('token');
|
|
133
|
+
if (queryToken !== null && queryToken !== '')
|
|
134
|
+
tokens.push(queryToken);
|
|
135
|
+
const authorization = req.headers.authorization;
|
|
136
|
+
if (typeof authorization === 'string') {
|
|
137
|
+
const match = /^Bearer\s+(.+)$/.exec(authorization);
|
|
138
|
+
if (match !== null && match[1] !== '')
|
|
139
|
+
tokens.push(match[1]);
|
|
140
|
+
}
|
|
141
|
+
return tokens;
|
|
142
|
+
}
|
|
143
|
+
function requestTokenMatches(req, secret) {
|
|
144
|
+
if (secret === undefined)
|
|
145
|
+
return false;
|
|
146
|
+
return requestTokens(req).some((token) => token === secret);
|
|
147
|
+
}
|
|
102
148
|
/** A WS close reason is capped at 123 UTF-8 bytes by the protocol. */
|
|
103
149
|
function clampReason(reason) {
|
|
104
150
|
const buf = Buffer.from(reason, 'utf8');
|
|
@@ -149,7 +195,7 @@ function serveStatic(clientDir, req, res) {
|
|
|
149
195
|
}
|
|
150
196
|
if (!existsSync(filePath)) {
|
|
151
197
|
res.writeHead(503, { 'content-type': 'text/plain; charset=utf-8' });
|
|
152
|
-
res.end('crtr web shell bundle not found — run `npm run build` to emit it into ' +
|
|
198
|
+
res.end('crtr surface web shell bundle not found — run `npm run build` to emit it into ' +
|
|
153
199
|
`${clientDir} (or pass --dev for Vite middleware)\n`);
|
|
154
200
|
return;
|
|
155
201
|
}
|
|
@@ -192,10 +238,15 @@ function bridgeConnection(ws, nodeId) {
|
|
|
192
238
|
}
|
|
193
239
|
return;
|
|
194
240
|
}
|
|
195
|
-
|
|
241
|
+
clearFault(nodeId, { link: 'browser↔relay' });
|
|
242
|
+
const sockPath = viewSocketPath(nodeId);
|
|
196
243
|
const socket = createConnection(sockPath);
|
|
197
244
|
const decoder = new FrameDecoder(CLIENT_READ_CAPS);
|
|
198
245
|
let closed = false;
|
|
246
|
+
let browserFaultRecorded = false;
|
|
247
|
+
socket.on('connect', () => {
|
|
248
|
+
clearFault(nodeId, { link: 'relay↔broker' });
|
|
249
|
+
});
|
|
199
250
|
const teardown = (wsCode, reason) => {
|
|
200
251
|
if (closed)
|
|
201
252
|
return;
|
|
@@ -234,12 +285,62 @@ function bridgeConnection(ws, nodeId) {
|
|
|
234
285
|
}
|
|
235
286
|
});
|
|
236
287
|
socket.on('error', (err) => {
|
|
288
|
+
const classification = classify('relay↔broker', err);
|
|
289
|
+
recordFault(nodeId, {
|
|
290
|
+
link: 'relay↔broker',
|
|
291
|
+
op: 'bridge socket',
|
|
292
|
+
kind: classification.kind,
|
|
293
|
+
retry: { disposition: 'manual' },
|
|
294
|
+
message: err.message,
|
|
295
|
+
});
|
|
237
296
|
const reason = err.code === 'ECONNREFUSED' || err.code === 'ENOENT'
|
|
238
297
|
? `no running broker for ${nodeId}`
|
|
239
298
|
: `view socket error for ${nodeId}: ${err.message}`;
|
|
240
299
|
teardown(1011, reason);
|
|
241
300
|
});
|
|
242
|
-
socket.on('close', () =>
|
|
301
|
+
socket.on('close', (hadError) => {
|
|
302
|
+
if (closed || hadError)
|
|
303
|
+
return;
|
|
304
|
+
clearFault(nodeId, { link: 'relay↔broker' });
|
|
305
|
+
teardown(1000, 'broker socket closed');
|
|
306
|
+
});
|
|
307
|
+
ws.on('close', (code, reason) => {
|
|
308
|
+
const reasonText = reason.toString('utf8');
|
|
309
|
+
if (closed) {
|
|
310
|
+
if (code === 1000)
|
|
311
|
+
clearFault(nodeId, { link: 'browser↔relay' });
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (code === 1000) {
|
|
315
|
+
clearFault(nodeId, { link: 'browser↔relay' });
|
|
316
|
+
}
|
|
317
|
+
else if (!browserFaultRecorded) {
|
|
318
|
+
browserFaultRecorded = true;
|
|
319
|
+
const classification = classify('browser↔relay', { code, reason: reasonText });
|
|
320
|
+
recordFault(nodeId, {
|
|
321
|
+
link: 'browser↔relay',
|
|
322
|
+
op: 'browser websocket',
|
|
323
|
+
kind: classification.kind,
|
|
324
|
+
retry: { disposition: 'manual' },
|
|
325
|
+
message: reasonText || `browser relay closed (${code})`,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
teardown(code, reasonText || `browser relay closed (${code})`);
|
|
329
|
+
});
|
|
330
|
+
ws.on('error', () => {
|
|
331
|
+
if (!browserFaultRecorded) {
|
|
332
|
+
browserFaultRecorded = true;
|
|
333
|
+
const classification = classify('browser↔relay', { code: 1006, reason: 'browser ws error' });
|
|
334
|
+
recordFault(nodeId, {
|
|
335
|
+
link: 'browser↔relay',
|
|
336
|
+
op: 'browser websocket',
|
|
337
|
+
kind: classification.kind,
|
|
338
|
+
retry: { disposition: 'manual' },
|
|
339
|
+
message: 'browser ws error',
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
teardown(1011, 'browser ws error');
|
|
343
|
+
});
|
|
243
344
|
// WS → socket: re-frame each message as one newline-terminated JSON line.
|
|
244
345
|
// VERBATIM (no parse) — the broker validates and bounds its own reads.
|
|
245
346
|
ws.on('message', (data) => {
|
|
@@ -259,34 +360,43 @@ function bridgeConnection(ws, nodeId) {
|
|
|
259
360
|
/* dead socket — its 'close' drives teardown */
|
|
260
361
|
}
|
|
261
362
|
});
|
|
262
|
-
ws.on('close', () => teardown(1000, 'browser closed'));
|
|
263
|
-
ws.on('error', () => teardown(1011, 'browser ws error'));
|
|
264
363
|
}
|
|
265
|
-
/** Build + start the unified web server. Binds
|
|
266
|
-
*
|
|
267
|
-
*
|
|
364
|
+
/** Build + start the unified web server. Binds the requested host/port and
|
|
365
|
+
* resolves once the server is listening. Async because --dev awaits a Vite
|
|
366
|
+
* middleware server before listening. */
|
|
268
367
|
export async function startWebServer(opts) {
|
|
269
368
|
const host = opts.host ?? '127.0.0.1';
|
|
369
|
+
const token = opts.token !== undefined && opts.token !== '' ? opts.token : undefined;
|
|
270
370
|
const dev = opts.dev ?? false;
|
|
371
|
+
const tokenRequired = !isLoopbackHost(host);
|
|
372
|
+
if (tokenRequired && (token === undefined || token === '')) {
|
|
373
|
+
throw new Error(`crtr surface web serve --host ${host} requires --token for remote-capable endpoints`);
|
|
374
|
+
}
|
|
271
375
|
const clientDir = resolveClientDir();
|
|
272
376
|
// The bridge runs view sources + command verbs locally, in the cwd crtr was
|
|
273
377
|
// invoked from (a git-pr view inspects THIS repo; a `crtr node new` lands here).
|
|
274
|
-
const transport = createLocalTransport({ cwd: process.cwd() })
|
|
378
|
+
const transport = createBurstCoalescingTransport(createLocalTransport({ cwd: process.cwd() }), {
|
|
379
|
+
ttlMs: SOURCE_CACHE_TTL_MS,
|
|
380
|
+
shouldCache: isCoalescableSourceRequest,
|
|
381
|
+
});
|
|
275
382
|
// The SSE change lane — one hub, fanned to every connected EventSource.
|
|
276
383
|
const eventHub = startEventHub();
|
|
277
|
-
// Same-origin allowlist
|
|
278
|
-
//
|
|
279
|
-
// otherwise
|
|
280
|
-
// /__crtr/source to run ARBITRARY exec. The same gate guards all three write/
|
|
281
|
-
// drive surfaces (WS upgrade, bridge POST, SSE GET). Populated once we know the
|
|
282
|
-
// bound port. A request with NO Origin (a CLI/curl/test client, not a browser)
|
|
283
|
-
// is allowed — the threat model is foreign browser pages, which always send it.
|
|
384
|
+
// Same-origin allowlist: tokenless localhost pages keep the legacy guard,
|
|
385
|
+
// while a valid relay token can authorize remote Hearth route origins that would
|
|
386
|
+
// otherwise be rejected by originAllowed().
|
|
284
387
|
let allowedOrigins = new Set();
|
|
285
388
|
const originAllowed = (origin) => {
|
|
286
389
|
if (origin === undefined || origin === '')
|
|
287
390
|
return true;
|
|
288
391
|
return allowedOrigins.has(origin);
|
|
289
392
|
};
|
|
393
|
+
const requestAllowed = (req) => {
|
|
394
|
+
if (requestTokenMatches(req, token))
|
|
395
|
+
return true;
|
|
396
|
+
if (tokenRequired)
|
|
397
|
+
return false;
|
|
398
|
+
return originAllowed(req.headers.origin);
|
|
399
|
+
};
|
|
290
400
|
// Assigned before listen() when --dev; the request handler closes over it.
|
|
291
401
|
let vite;
|
|
292
402
|
const httpServer = createHttpServer((req, res) => {
|
|
@@ -294,15 +404,16 @@ export async function startWebServer(opts) {
|
|
|
294
404
|
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
295
405
|
const pathname = url.pathname;
|
|
296
406
|
// The source + command bridge: POST /__crtr/source → run the SourceRequest
|
|
297
|
-
// through the local transport.
|
|
298
|
-
// arbitrary exec from a foreign browser page is exactly what
|
|
407
|
+
// through the local transport. Token-or-origin gated (same guard as the WS
|
|
408
|
+
// relay): arbitrary exec from a foreign browser page is exactly what the
|
|
409
|
+
// remote binding guard prevents.
|
|
299
410
|
if (pathname === '/__crtr/source') {
|
|
300
411
|
if (req.method !== 'POST') {
|
|
301
412
|
res.writeHead(405, { 'content-type': 'text/plain; charset=utf-8', allow: 'POST' });
|
|
302
413
|
res.end('method not allowed\n');
|
|
303
414
|
return;
|
|
304
415
|
}
|
|
305
|
-
if (!
|
|
416
|
+
if (!requestAllowed(req)) {
|
|
306
417
|
res.writeHead(403, { 'content-type': 'text/plain; charset=utf-8' });
|
|
307
418
|
res.end('forbidden\n');
|
|
308
419
|
return;
|
|
@@ -319,15 +430,16 @@ export async function startWebServer(opts) {
|
|
|
319
430
|
});
|
|
320
431
|
return;
|
|
321
432
|
}
|
|
322
|
-
// The SSE change-invalidation lane: GET /__crtr/events.
|
|
323
|
-
// a foreign page should not even learn the user's graph is
|
|
433
|
+
// The SSE change-invalidation lane: GET /__crtr/events. Token-or-origin
|
|
434
|
+
// gated too — a foreign page should not even learn the user's graph is
|
|
435
|
+
// mutating.
|
|
324
436
|
if (pathname === '/__crtr/events') {
|
|
325
437
|
if (req.method !== 'GET') {
|
|
326
438
|
res.writeHead(405, { 'content-type': 'text/plain; charset=utf-8', allow: 'GET' });
|
|
327
439
|
res.end('method not allowed\n');
|
|
328
440
|
return;
|
|
329
441
|
}
|
|
330
|
-
if (!
|
|
442
|
+
if (!requestAllowed(req)) {
|
|
331
443
|
res.writeHead(403, { 'content-type': 'text/plain; charset=utf-8' });
|
|
332
444
|
res.end('forbidden\n');
|
|
333
445
|
return;
|
|
@@ -335,6 +447,24 @@ export async function startWebServer(opts) {
|
|
|
335
447
|
eventHub.addClient(res);
|
|
336
448
|
return;
|
|
337
449
|
}
|
|
450
|
+
// ── Hearth product seam: model-auth lane ──
|
|
451
|
+
// Isolated per the P3.3a/P3.3b approved exception. ALL Hearth/OAuth logic
|
|
452
|
+
// lives in core/hearth/model-auth-guest.ts; this block is ONLY routing +
|
|
453
|
+
// the relay-token gate. CRITICAL: this lane uses the STRICT token-only
|
|
454
|
+
// predicate requestTokenMatches(req, token), never requestAllowed() —
|
|
455
|
+
// requestAllowed() also accepts a same-origin loopback request with NO
|
|
456
|
+
// token at all, which would make this lane tokenless on local/dev binds.
|
|
457
|
+
// Every /__hearth/model-auth/* request fails closed (401) without an
|
|
458
|
+
// exact relay-token match, even on loopback.
|
|
459
|
+
if (pathname.startsWith('/__hearth/model-auth/anthropic/')) {
|
|
460
|
+
if (!requestTokenMatches(req, token)) {
|
|
461
|
+
res.writeHead(401, { 'content-type': 'text/plain; charset=utf-8' });
|
|
462
|
+
res.end('relay token required\n');
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
void handleHearthModelAuthRequest(req, res);
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
338
468
|
// --dev: Vite middleware owns all remaining asset/HTML serving (incl. its
|
|
339
469
|
// own SPA fallback). It is mounted AFTER the bridge + SSE checks above, so
|
|
340
470
|
// those never fall through to Vite.
|
|
@@ -383,7 +513,7 @@ export async function startWebServer(opts) {
|
|
|
383
513
|
socket.destroy();
|
|
384
514
|
return;
|
|
385
515
|
}
|
|
386
|
-
if (!
|
|
516
|
+
if (!requestAllowed(req)) {
|
|
387
517
|
socket.write('HTTP/1.1 403 Forbidden\r\n\r\n');
|
|
388
518
|
socket.destroy();
|
|
389
519
|
return;
|
|
@@ -414,13 +544,14 @@ export async function startWebServer(opts) {
|
|
|
414
544
|
// A server error AFTER listen (e.g. an accept failure) must not be an
|
|
415
545
|
// unhandled 'error' that crashes the process (n9) — log + carry on.
|
|
416
546
|
httpServer.on('error', (err) => {
|
|
417
|
-
process.stderr.write(`crtr web: server error: ${err.message}\n`);
|
|
547
|
+
process.stderr.write(`crtr surface web: server error: ${err.message}\n`);
|
|
418
548
|
});
|
|
419
549
|
const addr = httpServer.address();
|
|
420
550
|
const port = typeof addr === 'object' && addr !== null ? addr.port : opts.port;
|
|
421
|
-
const
|
|
551
|
+
const hostUrl = hostForUrl(host);
|
|
552
|
+
const url = `http://${hostUrl}:${port}`;
|
|
422
553
|
allowedOrigins = new Set([
|
|
423
|
-
`http://${
|
|
554
|
+
`http://${hostUrl}:${port}`,
|
|
424
555
|
`http://127.0.0.1:${port}`,
|
|
425
556
|
`http://localhost:${port}`,
|
|
426
557
|
]);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SourceRequest } from '../../core/view/contract.js';
|
|
2
|
+
/** TTL for coalesced source reads. Must comfortably exceed the SSE debounce
|
|
3
|
+
* (events.ts, 150 ms) so a single mutation's fan-out collapses to one
|
|
4
|
+
* subprocess per distinct read, while staying short enough that the next
|
|
5
|
+
* poll/SSE refreshes promptly. */
|
|
6
|
+
export declare const SOURCE_CACHE_TTL_MS = 500;
|
|
7
|
+
/** True iff `req` is an idempotent `crtr … --json` read safe to burst-coalesce.
|
|
8
|
+
* Anything carrying stdin or a cwd override, any non-exec request, and any
|
|
9
|
+
* command not on the {@link CACHEABLE_READS} allowlist is rejected. */
|
|
10
|
+
export declare function isCoalescableSourceRequest(req: SourceRequest): boolean;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// source-cache.ts — which `/__crtr/source` requests the host may burst-coalesce.
|
|
2
|
+
//
|
|
3
|
+
// The web client has no data API: every read is a `crtr … --json` subprocess
|
|
4
|
+
// POSTed to /__crtr/source, and one SSE invalidation fans out to N independent
|
|
5
|
+
// React subscribers that each re-issue their own read. On NFS-backed canvas
|
|
6
|
+
// state each such subprocess is expensive, so an SSE burst spawns a storm of
|
|
7
|
+
// duplicate reads. The host wraps the transport in a burst-coalescing decorator
|
|
8
|
+
// (transport-cache.ts) keyed on JSON.stringify(req); this predicate decides
|
|
9
|
+
// which requests are safe to share/cache within a short TTL.
|
|
10
|
+
//
|
|
11
|
+
// ONLY idempotent, side-effect-free `crtr` reads belong here. Writes
|
|
12
|
+
// (node new / canvas revive / node msg), file reads, http requests, and any
|
|
13
|
+
// request carrying stdin or an overridden cwd are NEVER cacheable — caching
|
|
14
|
+
// those would drop a mutation or serve a stale cross-cwd read. Target-dependent
|
|
15
|
+
// reads (node inspect snapshot/show for a specific id) ARE cacheable because the id
|
|
16
|
+
// is part of the request and therefore part of the coalescing key, so distinct
|
|
17
|
+
// ids never collide.
|
|
18
|
+
/** TTL for coalesced source reads. Must comfortably exceed the SSE debounce
|
|
19
|
+
* (events.ts, 150 ms) so a single mutation's fan-out collapses to one
|
|
20
|
+
* subprocess per distinct read, while staying short enough that the next
|
|
21
|
+
* poll/SSE refreshes promptly. */
|
|
22
|
+
export const SOURCE_CACHE_TTL_MS = 500;
|
|
23
|
+
/** The literal `crtr … --json` read commands the web client re-issues on every
|
|
24
|
+
* SSE burst. Each entry is matched positionally against the exec args; an
|
|
25
|
+
* `'*'` placeholder matches exactly one arbitrary arg (a target id). */
|
|
26
|
+
const CACHEABLE_READS = [
|
|
27
|
+
['canvas', 'snapshot', '--json'],
|
|
28
|
+
['human', 'list', '--json'],
|
|
29
|
+
['surface', 'view', 'list', '--json'],
|
|
30
|
+
['node', 'inspect', 'snapshot', '*', '--json'],
|
|
31
|
+
['node', 'inspect', 'show', '*', '--json'],
|
|
32
|
+
];
|
|
33
|
+
function argsMatch(pattern, args) {
|
|
34
|
+
if (pattern.length !== args.length)
|
|
35
|
+
return false;
|
|
36
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
37
|
+
if (pattern[i] === '*')
|
|
38
|
+
continue;
|
|
39
|
+
if (pattern[i] !== args[i])
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
/** True iff `req` is an idempotent `crtr … --json` read safe to burst-coalesce.
|
|
45
|
+
* Anything carrying stdin or a cwd override, any non-exec request, and any
|
|
46
|
+
* command not on the {@link CACHEABLE_READS} allowlist is rejected. */
|
|
47
|
+
export function isCoalescableSourceRequest(req) {
|
|
48
|
+
if (req.kind !== 'exec')
|
|
49
|
+
return false;
|
|
50
|
+
if (req.bin !== 'crtr')
|
|
51
|
+
return false;
|
|
52
|
+
if (req.stdin !== undefined)
|
|
53
|
+
return false;
|
|
54
|
+
if (req.cwd !== undefined)
|
|
55
|
+
return false;
|
|
56
|
+
return CACHEABLE_READS.some((pattern) => argsMatch(pattern, req.args));
|
|
57
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
// web-cmd.ts — the `crtr web` command leaf + registration.
|
|
1
|
+
// web-cmd.ts — the `crtr surface web` command leaf + registration.
|
|
2
2
|
//
|
|
3
3
|
// Starts the ONE long-running unified web server (server.ts): the crouter web UI
|
|
4
4
|
// host. It serves the shell SPA, the source + command bridge (POST
|
|
5
5
|
// /__crtr/source), the SSE change lane (GET /__crtr/events), and a VERBATIM
|
|
6
|
-
// browser ⇄ broker relay on `ws://
|
|
7
|
-
// the SAME protocol peer as
|
|
6
|
+
// browser ⇄ broker relay on `ws://HOST:PORT/node/<id>` (the browser becomes
|
|
7
|
+
// the SAME protocol peer as surface attach). The node is selected by the URL, so
|
|
8
8
|
// there is NO positional node here.
|
|
9
9
|
//
|
|
10
10
|
// Command shape (plan §3.6): the CLI path-walker forbids a flat top-level leaf
|
|
11
11
|
// (`defineRoot.subtrees` is `BranchDef[]`), so `web` is a BRANCH wrapping a
|
|
12
|
-
// single leaf: `crtr web serve`.
|
|
12
|
+
// single leaf: `crtr surface web serve`.
|
|
13
13
|
import { spawn } from 'node:child_process';
|
|
14
14
|
import { defineBranch, defineLeaf } from '../../core/command.js';
|
|
15
15
|
import { startWebServer } from './server.js';
|
|
@@ -37,10 +37,10 @@ function openBrowser(url) {
|
|
|
37
37
|
const webServeLeaf = defineLeaf({
|
|
38
38
|
name: 'serve',
|
|
39
39
|
description: 'start the crouter web UI server — the shell, the source/command bridge, and a browser ⇄ broker relay',
|
|
40
|
-
whenToUse: 'you want the crouter web UI: a browser shell to watch the canvas and drive headless nodes, instead of a terminal pane. It starts ONE long-running
|
|
40
|
+
whenToUse: 'you want the crouter web UI: a browser shell to watch the canvas and drive headless nodes, instead of a terminal pane. It starts ONE long-running server (default 127.0.0.1) that serves the shell SPA, the source + command bridge (POST /__crtr/source — views\' reads AND `crtr` command writes), an SSE change-invalidation lane (GET /__crtr/events), and a VERBATIM browser ⇄ broker relay on /node/<id> (the browser becomes the same protocol peer as surface attach: one controller drives, extra viewers follow read-only). If you bind a non-loopback host, pass --token so the remote-capable bridge, SSE, and relay endpoints can authorize the page. The relay NEVER starts an engine — each node must already have a running headless broker (focus or revive it first); all writes flow through `crtr` subprocesses the bridge runs. Pass --dev for Vite middleware (HMR) while iterating on the shell. The server runs until ctrl+c; the node is picked in the browser via the URL, not on the command line.',
|
|
41
41
|
help: {
|
|
42
42
|
name: 'web serve',
|
|
43
|
-
summary: 'start the long-running crouter web UI server
|
|
43
|
+
summary: 'start the long-running crouter web UI server: serves the shell SPA, the POST /__crtr/source bridge, the GET /__crtr/events SSE lane, and a VERBATIM browser ⇄ node-broker relay (browser picks the node via /node/<id>)',
|
|
44
44
|
params: [
|
|
45
45
|
{
|
|
46
46
|
kind: 'flag',
|
|
@@ -50,6 +50,21 @@ const webServeLeaf = defineLeaf({
|
|
|
50
50
|
default: DEFAULT_PORT,
|
|
51
51
|
constraint: `TCP port to bind on 127.0.0.1. Default ${DEFAULT_PORT}.`,
|
|
52
52
|
},
|
|
53
|
+
{
|
|
54
|
+
kind: 'flag',
|
|
55
|
+
name: 'host',
|
|
56
|
+
type: 'string',
|
|
57
|
+
required: false,
|
|
58
|
+
default: '127.0.0.1',
|
|
59
|
+
constraint: 'TCP host to bind. Default 127.0.0.1. Non-loopback binds require --token.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
kind: 'flag',
|
|
63
|
+
name: 'token',
|
|
64
|
+
type: 'string',
|
|
65
|
+
required: false,
|
|
66
|
+
constraint: 'Bearer token for remote-capable bridge, SSE, and broker relay requests. Required for non-loopback binds.',
|
|
67
|
+
},
|
|
53
68
|
{
|
|
54
69
|
kind: 'flag',
|
|
55
70
|
name: 'open',
|
|
@@ -70,25 +85,29 @@ const webServeLeaf = defineLeaf({
|
|
|
70
85
|
output: [],
|
|
71
86
|
outputKind: 'object',
|
|
72
87
|
effects: [
|
|
73
|
-
'Binds a long-running HTTP+WebSocket server on
|
|
74
|
-
'Serves the shell SPA (static dist/web-client/, or Vite middleware under --dev), runs the POST /__crtr/source bridge (exec/file/http in this cwd), streams the GET /__crtr/events SSE change lane, and on a browser ws://
|
|
88
|
+
'Binds a long-running HTTP+WebSocket server on the requested host and port and keeps serving until interrupted (ctrl+c / SIGTERM). Safe to run non-interactively (daemon-like): it prints the URL and serves.',
|
|
89
|
+
'Serves the shell SPA (static dist/web-client/, or Vite middleware under --dev), runs the POST /__crtr/source bridge (exec/file/http in this cwd), streams the GET /__crtr/events SSE change lane, and on a browser ws://HOST:<port>/node/<id> connection opens that node\'s running broker view.sock and relays frames VERBATIM both directions. Non-loopback binds require a token so the remote Hearth route is not an unauthenticated command surface.',
|
|
75
90
|
'The relay NEVER spawns pi and NEVER writes any session — it only opens a socket to an already-running broker; if the broker is not running, the browser connection is closed with a clear reason. All graph mutations go through `crtr` subprocesses the bridge runs.',
|
|
76
91
|
],
|
|
77
92
|
},
|
|
78
93
|
run: async (input) => {
|
|
79
94
|
const port = input['port'] ?? DEFAULT_PORT;
|
|
95
|
+
const host = input['host'] ?? '127.0.0.1';
|
|
96
|
+
const tokenRaw = input['token'];
|
|
97
|
+
const token = tokenRaw !== undefined && tokenRaw !== '' ? tokenRaw : undefined;
|
|
80
98
|
const open = input['open'] ?? false;
|
|
81
99
|
const dev = input['dev'] ?? false;
|
|
82
|
-
const server = await startWebServer({ port, dev });
|
|
100
|
+
const server = await startWebServer({ port, host, token, dev });
|
|
83
101
|
const nodeUrlShape = `${server.url}/node/<id>`;
|
|
84
|
-
|
|
102
|
+
const browserUrl = token !== undefined ? `${server.url}?token=${encodeURIComponent(token)}` : server.url;
|
|
103
|
+
process.stdout.write(`crtr surface web serving on ${server.url}${dev ? ' (--dev: Vite middleware)' : ''}\n` +
|
|
85
104
|
` open a node: ${nodeUrlShape}\n` +
|
|
86
105
|
` bridge: POST ${server.url}/__crtr/source\n` +
|
|
87
106
|
` events (SSE): GET ${server.url}/__crtr/events\n` +
|
|
88
107
|
` shell assets: ${dev ? 'Vite middleware (HMR)' : server.clientDir}\n` +
|
|
89
108
|
` (ctrl+c to stop)\n`);
|
|
90
109
|
if (open)
|
|
91
|
-
openBrowser(
|
|
110
|
+
openBrowser(browserUrl);
|
|
92
111
|
// Long-running: resolve only on a shutdown signal, tearing down cleanly.
|
|
93
112
|
await new Promise((resolveShutdown) => {
|
|
94
113
|
const shutdown = () => {
|
|
@@ -108,12 +127,12 @@ export function registerWeb() {
|
|
|
108
127
|
rootEntry: {
|
|
109
128
|
concept: 'the crouter web UI server — one host serving the browser shell, the source/command bridge, an SSE change lane, and a VERBATIM relay to nodes\' running brokers',
|
|
110
129
|
desc: 'serve the crouter web UI for the canvas and headless nodes',
|
|
111
|
-
useWhen: 'you want the crouter web UI in a browser instead of a tmux pane: watch the canvas and drive headless nodes. It runs one long-lived
|
|
130
|
+
useWhen: 'you want the crouter web UI in a browser instead of a tmux pane: watch the canvas and drive headless nodes. It runs one long-lived server that serves the shell SPA, runs view sources and crtr command writes over POST /__crtr/source, streams canvas-change invalidations over GET /__crtr/events, and relays a browser connection VERBATIM to a node\'s already-running broker on /node/<id>. The node is selected in the browser via the URL; if the server is bound off-loopback, the page must carry a token so the relay and bridge can authorize.',
|
|
112
131
|
},
|
|
113
132
|
help: {
|
|
114
133
|
name: 'web',
|
|
115
134
|
summary: 'serve the crouter web UI: the shell SPA, the source/command bridge, the SSE change lane, and a VERBATIM relay to headless nodes\' brokers',
|
|
116
|
-
model: '
|
|
135
|
+
model: 'The branch is a long-running browser surface. `serve` starts the unified server on the bound host and port, serves the shell SPA, exposes the source/command bridge and SSE change lane, and relays browser frames to a node\'s running broker. The node is chosen in the browser via the URL; the server itself only hosts the surface and never spawns an engine.',
|
|
117
136
|
},
|
|
118
137
|
children: [webServeLeaf],
|
|
119
138
|
});
|
|
@@ -10,6 +10,8 @@ import { tmpdir } from 'node:os';
|
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
import { randomBytes } from 'node:crypto';
|
|
12
12
|
import { parseArgv } from '../../core/command.js';
|
|
13
|
+
import { renderLeafArgv } from '../../core/help.js';
|
|
14
|
+
import { humanAsk } from '../human/prompts.js';
|
|
13
15
|
import { humanCancel } from '../human/queue.js';
|
|
14
16
|
import { createNode, getNode, closeDb } from '../../core/canvas/index.js';
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
@@ -23,34 +25,6 @@ function tmpJson(obj) {
|
|
|
23
25
|
return p;
|
|
24
26
|
}
|
|
25
27
|
// ---------------------------------------------------------------------------
|
|
26
|
-
// human approve — positional title + optional flags
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
describe('human approve: params', () => {
|
|
29
|
-
const params = [
|
|
30
|
-
{ kind: 'positional', name: 'title', type: 'string', required: true, constraint: 'The question.' },
|
|
31
|
-
{ kind: 'flag', name: 'subtitle', type: 'string', required: false, constraint: 'One-line context.' },
|
|
32
|
-
{ kind: 'flag', name: 'body', type: 'string', required: false, constraint: 'Markdown body.' },
|
|
33
|
-
];
|
|
34
|
-
test('parses positional title', async () => {
|
|
35
|
-
const result = await parseArgv(params, ['Deploy to prod?']);
|
|
36
|
-
assert.equal(result['title'], 'Deploy to prod?');
|
|
37
|
-
});
|
|
38
|
-
test('parses title with optional flags', async () => {
|
|
39
|
-
const result = await parseArgv(params, ['Deploy?', '--subtitle', 'v1.2.3', '--body', 'LGTM']);
|
|
40
|
-
assert.equal(result['title'], 'Deploy?');
|
|
41
|
-
assert.equal(result['subtitle'], 'v1.2.3');
|
|
42
|
-
assert.equal(result['body'], 'LGTM');
|
|
43
|
-
});
|
|
44
|
-
test('flags absent → undefined', async () => {
|
|
45
|
-
const result = await parseArgv(params, ['Deploy?']);
|
|
46
|
-
assert.equal(result['subtitle'], undefined);
|
|
47
|
-
assert.equal(result['body'], undefined);
|
|
48
|
-
});
|
|
49
|
-
test('missing title throws missing_parameter', async () => {
|
|
50
|
-
await assert.rejects(() => parseArgv(params, []), (err) => { assert.match(err.message, /required parameter is missing/); return true; });
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
28
|
// human review — positional file (path) + optional --output
|
|
55
29
|
// ---------------------------------------------------------------------------
|
|
56
30
|
describe('human review: params', () => {
|
|
@@ -172,6 +146,34 @@ describe('human ask: params', () => {
|
|
|
172
146
|
});
|
|
173
147
|
});
|
|
174
148
|
// ---------------------------------------------------------------------------
|
|
149
|
+
// human ask — shorthand question + strict --context-file deck
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
describe('human ask: shorthand', () => {
|
|
152
|
+
test('help documents both the bare question and --context-file forms', () => {
|
|
153
|
+
const out = renderLeafArgv(humanAsk.help);
|
|
154
|
+
assert.match(out, /QUESTION/);
|
|
155
|
+
assert.match(out, /--context-file PATH/);
|
|
156
|
+
assert.match(out, /crtr human ask "<question>"/);
|
|
157
|
+
assert.match(out, /crtr human ask --context-file deck\.json/);
|
|
158
|
+
});
|
|
159
|
+
test('parses a positional question into input.question', async () => {
|
|
160
|
+
const result = await parseArgv(humanAsk.help.params ?? [], ['Should we ship today?']);
|
|
161
|
+
assert.equal(result['question'], 'Should we ship today?');
|
|
162
|
+
assert.equal(result['wait'], false);
|
|
163
|
+
});
|
|
164
|
+
test('parses --context-file into input.deck while keeping the strict deck path', async () => {
|
|
165
|
+
const deck = {
|
|
166
|
+
title: 'Choose a path',
|
|
167
|
+
interactions: [
|
|
168
|
+
{ id: 'q', title: 'Pick one', options: [{ id: 'yes', label: 'Yes' }] },
|
|
169
|
+
],
|
|
170
|
+
};
|
|
171
|
+
const path = tmpJson(deck);
|
|
172
|
+
const result = await parseArgv(humanAsk.help.params ?? [], ['--context-file', path]);
|
|
173
|
+
assert.deepEqual(result['deck'], deck);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
175
177
|
// human cancel — positional job_id + optional --reason
|
|
176
178
|
// ---------------------------------------------------------------------------
|
|
177
179
|
describe('human cancel: params', () => {
|
|
@@ -2,7 +2,7 @@ import { defineLeaf } from '../../core/command.js';
|
|
|
2
2
|
import { usage } from '../../core/errors.js';
|
|
3
3
|
import { buildCorpus, } from '../../core/canvas/index.js';
|
|
4
4
|
const TYPES = ['report', 'doc', 'roadmap', 'meta'];
|
|
5
|
-
const NODE_KINDS = ['developer', 'spec', 'design', 'review', 'explore', 'plan', 'general'];
|
|
5
|
+
const NODE_KINDS = ['advisor', 'developer', 'spec', 'design', 'review', 'explore', 'plan', 'general'];
|
|
6
6
|
const STATUSES = ['active', 'idle', 'done', 'dead', 'canceled'];
|
|
7
7
|
const SORTS = ['relevance', 'recency', 'oldest'];
|
|
8
8
|
const REL_UNITS = {
|
|
@@ -9,15 +9,12 @@ import { defineBranch } from '../core/command.js';
|
|
|
9
9
|
import { searchLeaf } from './canvas-history/search.js';
|
|
10
10
|
import { readLeaf } from './canvas-history/read.js';
|
|
11
11
|
import { showLeaf } from './canvas-history/show.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
* enumerate). Soft-fails to omission if the db is unreachable. */
|
|
12
|
+
/** A tiny per-cwd `<corpus>` marker for branch -h — just enough context to
|
|
13
|
+
* anchor the help text without scanning nodes or files. Uses only the injected
|
|
14
|
+
* node cwd env (or the process cwd outside a node), so help stays cheap. */
|
|
16
15
|
function corpusBlock() {
|
|
17
|
-
const cwd =
|
|
18
|
-
|
|
19
|
-
const span = s.span !== null ? `${s.span.from} → ${s.span.to}` : 'n/a';
|
|
20
|
-
return `<corpus cwd="${cwd}" nodes="${s.nodes}" reports="${s.reports}" docs="${s.docs}" span="${span}"/>`;
|
|
16
|
+
const cwd = process.env['CRTR_NODE_CWD'] ?? process.cwd();
|
|
17
|
+
return `<corpus cwd="${cwd}"/>`;
|
|
21
18
|
}
|
|
22
19
|
export const historyBranch = defineBranch({
|
|
23
20
|
name: 'history',
|