@crouton-kit/crouter 0.3.33 → 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 +2 -2
- package/dist/build-root.js +3 -6
- package/dist/builtin-memory/crouter-development/marketplaces.md +6 -6
- package/dist/builtin-memory/crouter-development/plugins.md +13 -13
- package/dist/builtin-memory/internal/examples/imessage-assistant.md +3 -3
- package/dist/builtin-memory/internal/nodes-and-canvas.md +4 -4
- package/dist/builtin-personas/developer/PERSONA.md +1 -1
- package/dist/builtin-personas/orchestration-kernel.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/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.js +826 -754
- package/dist/clients/attach/auth-pickers.js +2 -2
- package/dist/clients/attach/canvas-panels.js +1 -1
- package/dist/clients/attach/chat-view.d.ts +3 -2
- package/dist/clients/attach/chat-view.js +30 -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.js +1 -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.js +1 -1
- package/dist/clients/attach/graph-overlay.js +3 -3
- package/dist/clients/attach/input-controller.js +1 -1
- package/dist/clients/attach/pickers.js +1 -1
- package/dist/clients/attach/slash-commands.js +5 -6
- package/dist/clients/attach/titled-editor.d.ts +4 -0
- package/dist/clients/attach/titled-editor.js +13 -1
- package/dist/clients/attach/view-socket.js +1 -1
- package/dist/clients/web/__tests__/source-cache.test.js +5 -5
- package/dist/clients/web/server.js +29 -5
- package/dist/clients/web/source-cache.js +3 -3
- package/dist/clients/web/web-cmd.js +7 -7
- package/dist/commands/canvas-issue.js +1 -1
- package/dist/commands/canvas-prune.js +24 -2
- package/dist/commands/canvas-snapshot.js +3 -0
- package/dist/commands/canvas-tmux-spread.js +3 -3
- package/dist/commands/human.js +1 -1
- package/dist/commands/memory/lint.js +15 -8
- package/dist/commands/memory/origin.d.ts +1 -0
- package/dist/commands/memory/origin.js +88 -0
- package/dist/commands/memory/shared.d.ts +8 -0
- package/dist/commands/memory/shared.js +22 -1
- package/dist/commands/memory/write.js +17 -12
- package/dist/commands/memory.js +4 -3
- package/dist/commands/node-context.js +4 -4
- package/dist/commands/node-snapshot.js +4 -1
- package/dist/commands/node.d.ts +2 -2
- package/dist/commands/node.js +814 -606
- 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 +8 -24
- package/dist/commands/pkg/plugin-manage.d.ts +5 -1
- package/dist/commands/pkg/plugin-manage.js +245 -171
- package/dist/commands/pkg/plugin.js +6 -6
- package/dist/commands/pkg.js +5 -5
- package/dist/commands/revive.js +5 -3
- package/dist/commands/search/answer.js +1 -1
- package/dist/commands/search/contents.js +1 -1
- package/dist/commands/search/web.js +2 -2
- package/dist/commands/search.js +1 -1
- package/dist/commands/surface.d.ts +2 -0
- package/dist/commands/surface.js +43 -0
- package/dist/commands/sys/promptstudio.js +1 -1
- package/dist/commands/sys/settings.js +2 -2
- 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/sysprompt.js +3 -0
- package/dist/commands/sys.js +3 -2
- package/dist/commands/view-cycle.js +5 -5
- package/dist/commands/view-list.js +3 -3
- package/dist/commands/view-new.js +5 -5
- 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-sdk-wiring.test.js +6 -27
- package/dist/core/__tests__/daemon-boot.test.js +22 -0
- package/dist/core/__tests__/fixtures/fake-engine.js +1 -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__/hearth-bootstrap.test.js +136 -0
- package/dist/core/__tests__/helpers/harness.js +1 -1
- 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 +124 -0
- 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__/revive.test.js +64 -21
- 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/canvas/boot.d.ts +48 -0
- package/dist/core/canvas/boot.js +157 -0
- package/dist/core/canvas/canvas.d.ts +27 -1
- package/dist/core/canvas/canvas.js +86 -5
- package/dist/core/canvas/db.js +86 -1
- package/dist/core/canvas/index.d.ts +1 -1
- package/dist/core/canvas/index.js +1 -1
- package/dist/core/canvas/nav-model.js +1 -1
- package/dist/core/canvas/pid.d.ts +6 -0
- package/dist/core/canvas/pid.js +13 -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 +128 -46
- package/dist/core/command.js +13 -4
- package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
- package/dist/core/hearth/config.d.ts +1 -0
- package/dist/core/hearth/config.js +36 -0
- package/dist/core/hearth/guest-env.d.ts +7 -0
- package/dist/core/hearth/guest-env.js +17 -1
- 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 +13 -6
- package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +2 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.js +127 -19
- package/dist/core/hearth/providers/blaxel-home.d.ts +8 -4
- package/dist/core/hearth/providers/blaxel-home.js +85 -75
- package/dist/core/hearth/providers/blaxel.d.ts +5 -0
- package/dist/core/hearth/providers/blaxel.js +86 -12
- package/dist/core/hearth/providers/types.d.ts +6 -1
- package/dist/core/hearth/registry.js +2 -1
- package/dist/core/hearth/types.d.ts +35 -0
- package/dist/core/help.d.ts +16 -0
- package/dist/core/help.js +2 -0
- package/dist/core/memory-resolver.d.ts +8 -8
- package/dist/core/memory-resolver.js +58 -26
- 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/bearings.d.ts +11 -10
- package/dist/core/runtime/bearings.js +8 -8
- package/dist/core/runtime/broker-protocol.d.ts +2 -2
- package/dist/core/runtime/broker-protocol.js +2 -2
- package/dist/core/runtime/close.js +2 -2
- package/dist/core/runtime/kickoff.js +1 -1
- package/dist/core/runtime/launch.d.ts +9 -3
- package/dist/core/runtime/launch.js +17 -9
- package/dist/core/runtime/lifecycle.js +7 -7
- package/dist/core/runtime/model-swap.js +1 -1
- package/dist/core/runtime/placement.d.ts +5 -5
- package/dist/core/runtime/placement.js +10 -10
- package/dist/core/runtime/recycle.js +7 -7
- package/dist/core/runtime/reset.d.ts +1 -1
- package/dist/core/runtime/reset.js +3 -3
- 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 +15 -8
- package/dist/core/runtime/revive.js +52 -16
- package/dist/core/runtime/spawn.d.ts +1 -1
- package/dist/core/runtime/spawn.js +7 -7
- package/dist/core/runtime/stop-guard.js +5 -5
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux.d.ts +1 -1
- package/dist/core/runtime/tmux.js +4 -4
- package/dist/core/scope.d.ts +9 -0
- package/dist/core/scope.js +37 -15
- package/dist/core/substrate/on-read.js +23 -21
- package/dist/core/substrate/render.js +3 -3
- package/dist/core/view/loader.js +2 -2
- 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.js +222 -103
- 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.js +133 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -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.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/wake.d.ts +80 -0
- package/dist/hearth/control-plane/wake.js +312 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +2 -2
- package/dist/hearth/wake-proxy/home.d.ts +2 -8
- package/dist/hearth/wake-proxy/home.js +48 -12
- package/dist/pi-extensions/canvas-doc-substrate.js +28 -2
- package/dist/pi-extensions/canvas-nav.js +1 -1
- package/dist/prompts/view.js +7 -8
- package/dist/types.js +4 -4
- package/dist/web-client/assets/{index-D36PNBj4.js → index-BRKxe-hy.js} +2 -2
- package/dist/web-client/index.html +1 -1
- package/package.json +12 -8
- package/scripts/postinstall.mjs +8 -0
- package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
- package/dist/clients/attach/__tests__/autocomplete-and-bash-mode.test.js +0 -96
- package/dist/clients/attach/__tests__/bash-bang-routing.test.js +0 -58
- package/dist/clients/attach/__tests__/bundle-pi-tui-dedup.test.js +0 -56
- 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 -60
- 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__/artifact-paths.test.js +0 -44
- package/dist/core/__tests__/draw-style.test.js +0 -258
- package/dist/core/__tests__/editor-label.test.js +0 -26
- package/dist/core/__tests__/fault-marker.test.js +0 -112
- package/dist/core/__tests__/fault-retry-rewind.test.d.ts +0 -1
- package/dist/core/__tests__/fault-retry-rewind.test.js +0 -123
- package/dist/core/__tests__/frame-decoder-perf.test.d.ts +0 -1
- package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
- package/dist/core/__tests__/keystone.test.d.ts +0 -1
- package/dist/core/__tests__/keystone.test.js +0 -185
- package/dist/core/__tests__/listing-completeness.test.d.ts +0 -1
- package/dist/core/__tests__/listing-completeness.test.js +0 -31
- package/dist/core/__tests__/memory-resolver.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver.test.js +0 -119
- package/dist/core/__tests__/memory.test.d.ts +0 -1
- package/dist/core/__tests__/memory.test.js +0 -60
- package/dist/core/__tests__/model-ladders.test.d.ts +0 -1
- package/dist/core/__tests__/model-ladders.test.js +0 -160
- package/dist/core/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/__tests__/node-env.test.js +0 -26
- package/dist/core/__tests__/pane-column.test.d.ts +0 -1
- package/dist/core/__tests__/pane-column.test.js +0 -153
- package/dist/core/__tests__/persona-compose.test.d.ts +0 -1
- package/dist/core/__tests__/persona-compose.test.js +0 -53
- package/dist/core/__tests__/persona-subkind.test.d.ts +0 -1
- package/dist/core/__tests__/persona-subkind.test.js +0 -65
- package/dist/core/__tests__/persona.test.d.ts +0 -1
- package/dist/core/__tests__/persona.test.js +0 -107
- package/dist/core/__tests__/unknown-path.test.d.ts +0 -1
- 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/hearth/wake-proxy/__tests__/source-bridge-gate.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.js +0 -455
- /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{autocomplete-and-bash-mode.test.d.ts → crtr-output-render.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/bash-bang-routing.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/bundle-pi-tui-dedup.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/clipboard-image.test.d.ts → core/__tests__/preview-registry-sync.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/editor-newline.test.d.ts → core/__tests__/prune-to-limit.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/git-info.test.d.ts → core/__tests__/trigger-migration.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
- /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
- /package/dist/{core/__tests__/argv-parser.test.d.ts → hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts} +0 -0
- /package/dist/{core/__tests__/artifact-paths.test.d.ts → hearth/control-plane/__tests__/trigger-delivery.test.d.ts} +0 -0
- /package/dist/{core/__tests__/draw-style.test.d.ts → hearth/control-plane/__tests__/webhook-ingress.test.d.ts} +0 -0
- /package/dist/{core/__tests__/editor-label.test.d.ts → hearth/control-plane/main.d.ts} +0 -0
- /package/dist/{core/__tests__/fault-marker.test.d.ts → hearth/control-plane/types.js} +0 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
// control-plane/server.ts — the CP front door. Generalizes the wake-proxy's
|
|
2
|
+
// server.ts (route dispatch) and proxy.ts's gate ordering into the CP shape:
|
|
3
|
+
// session-then-registry resolution before anything ever reaches a home, and
|
|
4
|
+
// a swappable relay dispatch boundary for the dynamic lanes the actual
|
|
5
|
+
// HTTP+WS relay engine (P4.3) will fill in.
|
|
6
|
+
//
|
|
7
|
+
// Route tree (master plan P4.1 / part-plan T2.2). Every dynamic lane is an
|
|
8
|
+
// exact method+path entry in `DYNAMIC_ROUTES` below; anything else on a
|
|
9
|
+
// known dynamic-lane path is a 405, and anything unrecognized is a 404 —
|
|
10
|
+
// neither ever reaches the relay:
|
|
11
|
+
// GET /__hearth/healthz -> liveness, no auth
|
|
12
|
+
// GET/HEAD / -> resolveTenantSession ->
|
|
13
|
+
// resolveHome -> 302 to
|
|
14
|
+
// the existing in-guest
|
|
15
|
+
// client path carrying
|
|
16
|
+
// ONLY the
|
|
17
|
+
// server-derived
|
|
18
|
+
// `home_agent_target`;
|
|
19
|
+
// absent/invalid session
|
|
20
|
+
// or unresolved home
|
|
21
|
+
// never reaches a home
|
|
22
|
+
// (no relay/wake call)
|
|
23
|
+
// WS /node/<id> -> dynamic lane, upgrade
|
|
24
|
+
// only (never a normal
|
|
25
|
+
// HTTP dispatcher entry),
|
|
26
|
+
// gated by the same
|
|
27
|
+
// write-capable auth as
|
|
28
|
+
// write lanes (trusted-
|
|
29
|
+
// Origin cookie OR
|
|
30
|
+
// no-Origin Bearer) and
|
|
31
|
+
// an exact single-segment
|
|
32
|
+
// `<id>` matcher
|
|
33
|
+
// POST /__crtr/source -> dynamic lane, write-auth
|
|
34
|
+
// GET /__crtr/events -> dynamic lane, read-auth
|
|
35
|
+
// GET /__hearth/model-auth/anthropic/status -> dynamic lane, read-auth
|
|
36
|
+
// POST /__hearth/model-auth/anthropic/start -> dynamic lane, write-auth
|
|
37
|
+
// POST /__hearth/model-auth/anthropic/finish -> dynamic lane, write-auth
|
|
38
|
+
// GET/HEAD /views/<view> -> dynamic lane, read-auth
|
|
39
|
+
// (the SPA shell `GET /`
|
|
40
|
+
// redirects to)
|
|
41
|
+
// GET/HEAD <static asset path> -> dynamic lane, read-auth
|
|
42
|
+
// (the JS/CSS/image
|
|
43
|
+
// assets the view shell
|
|
44
|
+
// loads) — still gated by
|
|
45
|
+
// session+registry, NOT a
|
|
46
|
+
// public/unauthenticated
|
|
47
|
+
// allowlist
|
|
48
|
+
//
|
|
49
|
+
// The relay engine itself (ensureAwake + HTTP/WS forwarding to
|
|
50
|
+
// preview_endpoint) is P4.2/P4.3 scope, not this file's. The `RelayDispatcher`
|
|
51
|
+
// seam below is the stub boundary: every dynamic-lane request is gated by
|
|
52
|
+
// session(+write-origin where required)+registry resolution here, then
|
|
53
|
+
// handed to the dispatcher, which today simply reports "not implemented yet"
|
|
54
|
+
// without contacting any home.
|
|
55
|
+
import { createServer } from 'node:http';
|
|
56
|
+
import { getControlPlaneDb } from './db.js';
|
|
57
|
+
import { resolveHome } from './registry.js';
|
|
58
|
+
import { resolveTenantSession, resolveTenantWriteAuth, swapQueryTokenForCookie, tenantSessionAuthRedactedMessage } from './session.js';
|
|
59
|
+
import { redactSecrets } from './secrets.js';
|
|
60
|
+
import { handleWebhookRequest, isWebhookPath, isWebhookRequest } from './register.js';
|
|
61
|
+
const notImplementedRelay = {
|
|
62
|
+
proxyHttp(_req, res) {
|
|
63
|
+
sendText(res, 501, 'hearth control-plane relay is not implemented yet (lands in P4.3)\n');
|
|
64
|
+
},
|
|
65
|
+
proxyUpgrade(_req, socket) {
|
|
66
|
+
socket.destroy();
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
function requestUrl(req) {
|
|
70
|
+
return new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
71
|
+
}
|
|
72
|
+
function sendText(res, statusCode, body) {
|
|
73
|
+
res.writeHead(statusCode, {
|
|
74
|
+
'content-type': 'text/plain; charset=utf-8',
|
|
75
|
+
'content-length': Buffer.byteLength(body),
|
|
76
|
+
'cache-control': 'no-store',
|
|
77
|
+
'referrer-policy': 'no-referrer',
|
|
78
|
+
});
|
|
79
|
+
res.end(body);
|
|
80
|
+
}
|
|
81
|
+
function redirectChat(res, target) {
|
|
82
|
+
res.writeHead(302, {
|
|
83
|
+
location: `/views/chat?target=${encodeURIComponent(target)}`,
|
|
84
|
+
'cache-control': 'no-store',
|
|
85
|
+
'referrer-policy': 'no-referrer',
|
|
86
|
+
});
|
|
87
|
+
res.end();
|
|
88
|
+
}
|
|
89
|
+
function respondHealthz(res) {
|
|
90
|
+
sendText(res, 200, 'ok\n');
|
|
91
|
+
}
|
|
92
|
+
/** `?token=` is intentionally not accepted as durable auth (`session.ts`); the
|
|
93
|
+
* one allowed query-token use is the single-use M0 handoff swap-to-cookie,
|
|
94
|
+
* attempted here only when no durable cookie/bearer session is already
|
|
95
|
+
* present, and only ever turned into a session via that one origin-checked
|
|
96
|
+
* swap function — never read/trusted directly by this route. */
|
|
97
|
+
function resolveRootSession(req, res, config, store) {
|
|
98
|
+
const direct = resolveTenantSession(req, { store });
|
|
99
|
+
if (direct !== null)
|
|
100
|
+
return direct;
|
|
101
|
+
try {
|
|
102
|
+
return swapQueryTokenForCookie(req, res, { publicOrigin: config.publicOrigin, store, cookie: { secure: config.cookieSecure } });
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** `GET /` entry resolution. Resolves fresh on every load (R-VIEW-1): no
|
|
109
|
+
* session -> no registry/home read at all; session resolves to no home, or a
|
|
110
|
+
* home with no `home_agent_target` yet -> still no relay/wake/provider call.
|
|
111
|
+
* The redirect target is always the value this process just read from the
|
|
112
|
+
* registry — never a client-supplied `?target=`. */
|
|
113
|
+
function respondRoot(req, res, db, config, store) {
|
|
114
|
+
const session = resolveRootSession(req, res, config, store);
|
|
115
|
+
if (session === null) {
|
|
116
|
+
sendText(res, 401, 'hearth session required\n');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const home = resolveHome(session.tenant_id, session.user_id, db);
|
|
120
|
+
if (home === null) {
|
|
121
|
+
sendText(res, 404, 'home not found\n');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const target = home.home_agent_target?.trim() ?? '';
|
|
125
|
+
if (target === '') {
|
|
126
|
+
sendText(res, 503, 'home not yet provisioned\n');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
redirectChat(res, target);
|
|
130
|
+
}
|
|
131
|
+
const DYNAMIC_ROUTES = [
|
|
132
|
+
{ method: 'POST', path: '/__crtr/source', auth: 'write' },
|
|
133
|
+
{ method: 'GET', path: '/__crtr/events', auth: 'read' },
|
|
134
|
+
{ method: 'GET', path: '/__hearth/model-auth/anthropic/status', auth: 'read' },
|
|
135
|
+
{ method: 'POST', path: '/__hearth/model-auth/anthropic/start', auth: 'write' },
|
|
136
|
+
{ method: 'POST', path: '/__hearth/model-auth/anthropic/finish', auth: 'write' },
|
|
137
|
+
];
|
|
138
|
+
const DYNAMIC_ROUTE_PATHS = new Set(DYNAMIC_ROUTES.map((route) => route.path));
|
|
139
|
+
function findDynamicRoute(method, pathname) {
|
|
140
|
+
return DYNAMIC_ROUTES.find((route) => route.path === pathname && route.method === method);
|
|
141
|
+
}
|
|
142
|
+
/** `GET /` redirects to `/views/<view>?target=...` (review finding #1) but
|
|
143
|
+
* that path never reached the relay — it 404'd even for a valid session.
|
|
144
|
+
* These two matchers extend the dynamic-lane gate (session+registry, same as
|
|
145
|
+
* every other lane above) to the SPA view shell and the static assets it
|
|
146
|
+
* loads, so the redirect target is actually servable. This is deliberately
|
|
147
|
+
* NOT a public/unauthenticated allowlist (the part-plan does not call for
|
|
148
|
+
* one) — every match below still goes through `respondDynamicLane`'s
|
|
149
|
+
* session+registry gate before `relay.proxyHttp` is ever invoked. */
|
|
150
|
+
function isViewShellPath(pathname) {
|
|
151
|
+
return /^\/views\/[^/?#]+$/.test(pathname);
|
|
152
|
+
}
|
|
153
|
+
const STATIC_ASSET_ROOT_PATHS = new Set([
|
|
154
|
+
'/favicon.ico',
|
|
155
|
+
'/favicon.svg',
|
|
156
|
+
'/favicon.png',
|
|
157
|
+
'/apple-touch-icon.png',
|
|
158
|
+
'/apple-touch-icon-precomposed.png',
|
|
159
|
+
'/manifest.webmanifest',
|
|
160
|
+
'/site.webmanifest',
|
|
161
|
+
'/robots.txt',
|
|
162
|
+
'/vite.svg',
|
|
163
|
+
]);
|
|
164
|
+
const STATIC_ASSET_EXTENSIONS = new Set(['.css', '.js', '.mjs', '.map', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.ico', '.json', '.txt']);
|
|
165
|
+
function isStaticAssetPath(pathname) {
|
|
166
|
+
if (pathname.startsWith('/assets/'))
|
|
167
|
+
return true;
|
|
168
|
+
if (STATIC_ASSET_ROOT_PATHS.has(pathname))
|
|
169
|
+
return true;
|
|
170
|
+
const match = /^\/[^/?#]+(\.[^/?#]+)$/.exec(pathname);
|
|
171
|
+
return match !== null && STATIC_ASSET_EXTENSIONS.has(match[1].toLowerCase());
|
|
172
|
+
}
|
|
173
|
+
function isRelayableViewOrAssetPath(pathname) {
|
|
174
|
+
return isViewShellPath(pathname) || isStaticAssetPath(pathname);
|
|
175
|
+
}
|
|
176
|
+
/** Session+registry gate shared by every dynamic lane. Absent/invalid session
|
|
177
|
+
* (or, for `auth: 'write'`, an untrusted Origin) or an unresolved home
|
|
178
|
+
* rejects before the relay dispatcher (and therefore before any
|
|
179
|
+
* wake/provider/home contact) is ever invoked. */
|
|
180
|
+
async function respondDynamicLane(req, res, db, config, store, relay, auth) {
|
|
181
|
+
const session = auth === 'write'
|
|
182
|
+
? resolveTenantWriteAuth(req, { store, publicOrigin: config.publicOrigin })
|
|
183
|
+
: resolveTenantSession(req, { store });
|
|
184
|
+
if (session === null) {
|
|
185
|
+
sendText(res, 401, 'hearth session required\n');
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const home = resolveHome(session.tenant_id, session.user_id, db);
|
|
189
|
+
if (home === null) {
|
|
190
|
+
sendText(res, 404, 'home not found\n');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
await relay.proxyHttp(req, res, home);
|
|
194
|
+
}
|
|
195
|
+
async function routeControlPlaneRequest(req, res, db, config, store, relay) {
|
|
196
|
+
const url = requestUrl(req);
|
|
197
|
+
if (req.method === 'GET' && url.pathname === '/__hearth/healthz') {
|
|
198
|
+
respondHealthz(res);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if ((req.method === 'GET' || req.method === 'HEAD') && url.pathname === '/') {
|
|
202
|
+
respondRoot(req, res, db, config, store);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// Public webhook ingress lane (`POST /webhook/:routing_key`). Authenticated
|
|
206
|
+
// ONLY by the per-route HMAC signature verified inside the handler, so it
|
|
207
|
+
// sits BEFORE — and deliberately outside — the session/registry gate every
|
|
208
|
+
// dynamic lane below goes through. A wrong method on the webhook path is a
|
|
209
|
+
// 405, never a fall-through to the relay.
|
|
210
|
+
if (isWebhookPath(url.pathname)) {
|
|
211
|
+
if (!isWebhookRequest(req.method, url.pathname)) {
|
|
212
|
+
sendText(res, 405, 'method not allowed\n');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
await handleWebhookRequest(req, res);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (DYNAMIC_ROUTE_PATHS.has(url.pathname)) {
|
|
219
|
+
const route = findDynamicRoute(req.method, url.pathname);
|
|
220
|
+
if (route === undefined) {
|
|
221
|
+
sendText(res, 405, 'method not allowed\n');
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
await respondDynamicLane(req, res, db, config, store, relay, route.auth);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if ((req.method === 'GET' || req.method === 'HEAD') && isRelayableViewOrAssetPath(url.pathname)) {
|
|
228
|
+
await respondDynamicLane(req, res, db, config, store, relay, 'read');
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
sendText(res, 404, 'not found\n');
|
|
232
|
+
}
|
|
233
|
+
/** Exact single-segment `/node/<id>` matcher (review finding #3). Rejects an
|
|
234
|
+
* empty id, additional path segments/trailing slash, an embedded `/` or `\`
|
|
235
|
+
* (pre- or post-decode), `..` traversal, and malformed percent-encoding —
|
|
236
|
+
* only a single clean path segment reaches `relay.proxyUpgrade`. Mirrors the
|
|
237
|
+
* M0 `extractNodeId` shape (`wake-proxy/proxy.ts`) without the loose
|
|
238
|
+
* `startsWith('/node/')` prefix match it replaces. */
|
|
239
|
+
function extractNodeId(pathname) {
|
|
240
|
+
const match = /^\/node\/([^/]+)$/.exec(pathname);
|
|
241
|
+
if (match === null)
|
|
242
|
+
return null;
|
|
243
|
+
const raw = match[1];
|
|
244
|
+
if (raw.includes('\\'))
|
|
245
|
+
return null;
|
|
246
|
+
let nodeId;
|
|
247
|
+
try {
|
|
248
|
+
nodeId = decodeURIComponent(raw);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
if (nodeId === '' || /[/\\]/.test(nodeId) || nodeId.includes('..'))
|
|
254
|
+
return null;
|
|
255
|
+
return nodeId;
|
|
256
|
+
}
|
|
257
|
+
/** WS upgrade gate for `/node/<id>`. Uses the same write-capable browser auth
|
|
258
|
+
* as write HTTP lanes (`resolveTenantWriteAuth`: trusted-Origin cookie OR
|
|
259
|
+
* no-Origin/non-browser Bearer — review finding #3) rather than plain
|
|
260
|
+
* `resolveTenantSession`, so a cross-site page cannot ride a victim's cookie
|
|
261
|
+
* into the bidirectional `/node/<id>` lane the way a same-site/no-Origin
|
|
262
|
+
* WS handshake can. Then mirrors `respondDynamicLane`'s registry gate before
|
|
263
|
+
* handing the socket to the relay dispatcher. */
|
|
264
|
+
async function handleUpgrade(req, socket, head, db, config, store, relay) {
|
|
265
|
+
const url = requestUrl(req);
|
|
266
|
+
const nodeId = extractNodeId(url.pathname);
|
|
267
|
+
if (nodeId === null) {
|
|
268
|
+
socket.destroy();
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const session = resolveTenantWriteAuth(req, { store, publicOrigin: config.publicOrigin });
|
|
272
|
+
if (session === null) {
|
|
273
|
+
socket.destroy();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const home = resolveHome(session.tenant_id, session.user_id, db);
|
|
277
|
+
if (home === null) {
|
|
278
|
+
socket.destroy();
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
relay.proxyUpgrade(req, socket, head, home);
|
|
282
|
+
}
|
|
283
|
+
function stripReferrerHeaders(req) {
|
|
284
|
+
delete req.headers.referer;
|
|
285
|
+
delete req.headers.referrer;
|
|
286
|
+
}
|
|
287
|
+
/** Redact secrets/session material out of a server-side error log line. The
|
|
288
|
+
* client never sees this text (see the 500 handler below) — it exists only
|
|
289
|
+
* so stderr never carries a raw bearer/cookie/relay-token value. */
|
|
290
|
+
function redactServerErrorMessage(message) {
|
|
291
|
+
return redactSecrets(tenantSessionAuthRedactedMessage(message));
|
|
292
|
+
}
|
|
293
|
+
/** Log a route/relay failure server-side only. The browser always gets the
|
|
294
|
+
* generic 500 body written by the caller — raw exception text (which can
|
|
295
|
+
* carry upstream URLs, headers, bearer/session strings, or DB paths once
|
|
296
|
+
* P4.3 plugs in the real relay) never reaches the client. */
|
|
297
|
+
function logRequestError(error, req) {
|
|
298
|
+
const raw = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
299
|
+
const details = {
|
|
300
|
+
level: 'error',
|
|
301
|
+
message: 'hearth control plane request failed',
|
|
302
|
+
method: req.method,
|
|
303
|
+
path: requestUrl(req).pathname,
|
|
304
|
+
error: redactServerErrorMessage(raw),
|
|
305
|
+
};
|
|
306
|
+
process.stderr.write(`${JSON.stringify(details)}\n`);
|
|
307
|
+
}
|
|
308
|
+
/** Build the CP HTTP+WS server. No registry seeding and no idle timers are
|
|
309
|
+
* started here or anywhere reachable from this constructor (master plan
|
|
310
|
+
* P4.1 / S3 — the provider owns idle->suspend, not the CP). `deps` lets
|
|
311
|
+
* callers inject the db handle, a session store, and a relay dispatcher —
|
|
312
|
+
* `main.ts` uses the real env-resolved defaults; tests/smoke checks inject
|
|
313
|
+
* fakes for all three without touching global env state. */
|
|
314
|
+
export function createControlPlaneServer(config, deps = {}) {
|
|
315
|
+
const db = deps.db ?? getControlPlaneDb();
|
|
316
|
+
const store = deps.sessionStore;
|
|
317
|
+
const relay = deps.relay ?? notImplementedRelay;
|
|
318
|
+
const server = createServer((req, res) => {
|
|
319
|
+
void routeControlPlaneRequest(req, res, db, config, store, relay).catch((error) => {
|
|
320
|
+
logRequestError(error, req);
|
|
321
|
+
if (!res.headersSent) {
|
|
322
|
+
sendText(res, 500, 'internal server error\n');
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
res.destroy();
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
server.prependListener('request', (req, res) => {
|
|
330
|
+
stripReferrerHeaders(req);
|
|
331
|
+
if (requestUrl(req).pathname === '/')
|
|
332
|
+
res.setHeader('Referrer-Policy', 'no-referrer');
|
|
333
|
+
});
|
|
334
|
+
server.prependListener('upgrade', (req) => {
|
|
335
|
+
stripReferrerHeaders(req);
|
|
336
|
+
});
|
|
337
|
+
server.on('connect', (_req, socket) => {
|
|
338
|
+
socket.end('HTTP/1.1 405 Method Not Allowed\r\nConnection: close\r\n\r\n');
|
|
339
|
+
});
|
|
340
|
+
server.on('upgrade', (req, socket, head) => {
|
|
341
|
+
void handleUpgrade(req, socket, head, db, config, store, relay).catch(() => {
|
|
342
|
+
socket.destroy();
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
return server;
|
|
346
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { TenantSession } from './types.js';
|
|
3
|
+
export declare const HEARTH_SESSION_COOKIE = "hearth_session";
|
|
4
|
+
type AuthSource = 'cookie' | 'bearer' | 'query-swap';
|
|
5
|
+
export interface TenantSessionAuth extends TenantSession {
|
|
6
|
+
source: AuthSource;
|
|
7
|
+
}
|
|
8
|
+
export interface TenantSessionTokenSeed extends TenantSession {
|
|
9
|
+
/** Raw cookie/bearer session token. Preferred for dogfood env seeding when
|
|
10
|
+
* query-token handoff must set a cookie. If omitted, `token_hash` can still
|
|
11
|
+
* validate existing cookies/bearer clients but cannot be emitted into a new
|
|
12
|
+
* Set-Cookie header. */
|
|
13
|
+
token?: string;
|
|
14
|
+
token_hash?: string;
|
|
15
|
+
/** Optional one-time M0 handoff token. It is not accepted by
|
|
16
|
+
* `resolveTenantSession`; it can only be consumed by
|
|
17
|
+
* `swapQueryTokenForCookie`, which requires a trusted Origin and marks the
|
|
18
|
+
* query hash spent in this CP process. */
|
|
19
|
+
query_token?: string;
|
|
20
|
+
query_token_hash?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface TenantSessionStore {
|
|
23
|
+
records: readonly NormalizedTenantSessionToken[];
|
|
24
|
+
consumed_query_token_hashes: Set<string>;
|
|
25
|
+
}
|
|
26
|
+
interface NormalizedTenantSessionToken extends TenantSession {
|
|
27
|
+
token_hash: string;
|
|
28
|
+
token: string | null;
|
|
29
|
+
query_token_hash: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface SessionCookieOptions {
|
|
32
|
+
secure?: boolean;
|
|
33
|
+
sameSite?: 'Lax' | 'Strict' | 'None';
|
|
34
|
+
maxAgeSeconds?: number;
|
|
35
|
+
path?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface ResolveTenantSessionOptions {
|
|
38
|
+
store?: TenantSessionStore;
|
|
39
|
+
}
|
|
40
|
+
export interface ResolveTenantWriteAuthOptions extends ResolveTenantSessionOptions {
|
|
41
|
+
publicOrigin: string;
|
|
42
|
+
}
|
|
43
|
+
export interface QueryTokenSwapOptions extends ResolveTenantWriteAuthOptions {
|
|
44
|
+
cookie?: SessionCookieOptions;
|
|
45
|
+
}
|
|
46
|
+
export declare function createTenantSessionStore(seeds: readonly TenantSessionTokenSeed[]): TenantSessionStore;
|
|
47
|
+
export declare function loadTenantSessionStore(env?: NodeJS.ProcessEnv): TenantSessionStore;
|
|
48
|
+
export declare function setSessionCookie(res: ServerResponse, token: string, options?: SessionCookieOptions): void;
|
|
49
|
+
export declare function clearSessionCookie(res: ServerResponse, options?: SessionCookieOptions): void;
|
|
50
|
+
/** Validate durable session credentials only: HttpOnly cookie for browsers or
|
|
51
|
+
* Bearer for non-browser clients. Query tokens are intentionally ignored here
|
|
52
|
+
* so a copied `?token=` URL is never durable authorization. */
|
|
53
|
+
export declare function resolveTenantSession(req: IncomingMessage, options?: ResolveTenantSessionOptions): TenantSessionAuth | null;
|
|
54
|
+
/** State-changing browser lanes require a valid session AND a trusted Origin;
|
|
55
|
+
* query tokens are not accepted here. Bearer remains available only to
|
|
56
|
+
* non-browser clients (no Origin header). */
|
|
57
|
+
export declare function resolveTenantWriteAuth(req: IncomingMessage, options: ResolveTenantWriteAuthOptions): TenantSessionAuth | null;
|
|
58
|
+
/** Consume an optional M0 handoff `?token=` exactly once and swap it to the
|
|
59
|
+
* HttpOnly/Secure/SameSite Hearth session cookie. This is the only query-token
|
|
60
|
+
* path. Safe top-level navigations (`GET`/`HEAD`) are permitted without a
|
|
61
|
+
* matching `Origin` header (see `originAcceptableForQueryTokenSwap`); any
|
|
62
|
+
* other method still requires a trusted Origin, matching the write-lane
|
|
63
|
+
* policy. Returns null on replay, invalid token, missing token, or a
|
|
64
|
+
* rejected Origin. */
|
|
65
|
+
export declare function swapQueryTokenForCookie(req: IncomingMessage, res: ServerResponse, options: QueryTokenSwapOptions): TenantSessionAuth | null;
|
|
66
|
+
export declare function tenantSessionAuthRedactedMessage(message: string): string;
|
|
67
|
+
export declare function resetTenantSessionStoreCacheForTests(): void;
|
|
68
|
+
export {};
|