@crouton-kit/crouter 0.3.33 → 0.3.35
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 +427 -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 +843 -743
- 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 +19 -9
- package/dist/core/__tests__/flagship-lifecycle.test.js +4 -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 +2 -2
- 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 +17 -3
- 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 +17 -11
- package/dist/core/__tests__/live-mutation.test.js +15 -10
- 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 -3
- package/dist/core/hearth/guest-env.d.ts +7 -0
- package/dist/core/hearth/guest-env.js +17 -1
- package/dist/core/hearth/index.d.ts +0 -1
- package/dist/core/hearth/index.js +0 -1
- package/dist/core/hearth/model-auth-guest.d.ts +8 -0
- package/dist/core/hearth/model-auth-guest.js +430 -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/types.d.ts +35 -1
- 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/{wake-proxy/proxy.js → control-plane/relay.js} +201 -275
- 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/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-DUThOUzU.css +2 -0
- package/dist/web-client/assets/index-IAJVtuVe.js +80 -0
- package/dist/web-client/index.html +2 -2
- package/package.json +12 -9
- 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.d.ts +0 -1
- package/dist/core/__tests__/editor-label.test.js +0 -26
- package/dist/core/__tests__/fault-marker.test.d.ts +0 -1
- 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/core/hearth/registry.d.ts +0 -15
- package/dist/core/hearth/registry.js +0 -179
- package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.js +0 -289
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.js +0 -34
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +0 -203
- package/dist/hearth/wake-proxy/__tests__/hardening.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/hardening.test.js +0 -59
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.js +0 -372
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.js +0 -258
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.js +0 -437
- 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/hearth/wake-proxy/__tests__/static-asset-allowlist.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.js +0 -15
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.js +0 -141
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.js +0 -143
- package/dist/hearth/wake-proxy/anthropic-oauth.d.ts +0 -58
- package/dist/hearth/wake-proxy/anthropic-oauth.js +0 -189
- package/dist/hearth/wake-proxy/auth.d.ts +0 -22
- package/dist/hearth/wake-proxy/auth.js +0 -128
- package/dist/hearth/wake-proxy/config.d.ts +0 -2
- package/dist/hearth/wake-proxy/config.js +0 -151
- package/dist/hearth/wake-proxy/guest-source.d.ts +0 -14
- package/dist/hearth/wake-proxy/guest-source.js +0 -130
- package/dist/hearth/wake-proxy/hearth-status.d.ts +0 -44
- package/dist/hearth/wake-proxy/hearth-status.js +0 -267
- package/dist/hearth/wake-proxy/home.d.ts +0 -67
- package/dist/hearth/wake-proxy/home.js +0 -297
- package/dist/hearth/wake-proxy/main.js +0 -134
- package/dist/hearth/wake-proxy/model-auth.d.ts +0 -13
- package/dist/hearth/wake-proxy/model-auth.js +0 -345
- package/dist/hearth/wake-proxy/proxy.d.ts +0 -35
- package/dist/hearth/wake-proxy/public-source-gate.d.ts +0 -9
- package/dist/hearth/wake-proxy/public-source-gate.js +0 -409
- package/dist/hearth/wake-proxy/redact.d.ts +0 -1
- package/dist/hearth/wake-proxy/redact.js +0 -17
- package/dist/hearth/wake-proxy/server.d.ts +0 -11
- package/dist/hearth/wake-proxy/server.js +0 -142
- package/dist/hearth/wake-proxy/state.d.ts +0 -18
- package/dist/hearth/wake-proxy/state.js +0 -342
- package/dist/hearth/wake-proxy/types.d.ts +0 -76
- package/dist/web-client/assets/index-BZUxTkv5.css +0 -2
- package/dist/web-client/assets/index-D36PNBj4.js +0 -80
- /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/hearth/{wake-proxy → control-plane}/main.d.ts +0 -0
- /package/dist/hearth/{wake-proxy → control-plane}/types.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// input-controller.ts — the input half of `crtr attach` (T6).
|
|
1
|
+
// input-controller.ts — the input half of `crtr surface attach` (T6).
|
|
2
2
|
//
|
|
3
3
|
// Owns the editor's behavior: turns keystrokes + submits into `ClientToBroker`
|
|
4
4
|
// command frames (sent via `hooks.onCommand`), reads pasted clipboard images to
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// pickers.ts — native interactive pickers for `crtr attach`, built against the
|
|
1
|
+
// pickers.ts — native interactive pickers for `crtr surface attach`, built against the
|
|
2
2
|
// operator-view wire contract (broker read-op `data` frames). Each builder turns
|
|
3
3
|
// a serialized picker payload into the REAL pi `*SelectorComponent`, wired so a
|
|
4
4
|
// selection dispatches the SAME command frame the text-arg slash path sends and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// slash-commands.ts — builtin slash-command parse + dispatch for `crtr attach` (C6).
|
|
1
|
+
// slash-commands.ts — builtin slash-command parse + dispatch for `crtr surface attach` (C6).
|
|
2
2
|
//
|
|
3
3
|
// Builtin slash commands are NOT engine-interpreted: `session.prompt('/model')`
|
|
4
4
|
// ships "/model" to the LLM as literal text. So the viewer recognizes the 21
|
|
@@ -329,8 +329,7 @@ function resumeNode(ctx) {
|
|
|
329
329
|
popup(cmd);
|
|
330
330
|
return true;
|
|
331
331
|
}
|
|
332
|
-
/** `/view [name]`. Bare opens the picker
|
|
333
|
-
* `/view <name>` opens that view directly (`crtr view run <name>`). Self-contained
|
|
332
|
+
/** `/view [name]`. Bare opens the picker; with a name it opens that view directly. Self-contained
|
|
334
333
|
* popup — no node-focus, no return-pane. */
|
|
335
334
|
function openView(arg, ctx) {
|
|
336
335
|
if (process.env['TMUX'] === undefined) {
|
|
@@ -338,11 +337,11 @@ function openView(arg, ctx) {
|
|
|
338
337
|
return true;
|
|
339
338
|
}
|
|
340
339
|
const name = arg.trim();
|
|
341
|
-
const cmd = name === '' ? 'crtr view pick' : `crtr view run ${shellQuote(name)}`;
|
|
340
|
+
const cmd = name === '' ? 'crtr surface view pick' : `crtr surface view run ${shellQuote(name)}`;
|
|
342
341
|
popup(cmd);
|
|
343
342
|
return true;
|
|
344
343
|
}
|
|
345
|
-
/** `/context`. Opens `crtr node context` as a popup — a
|
|
344
|
+
/** `/context`. Opens `crtr node inspect context` as a popup — a
|
|
346
345
|
* read-only nvim explorer over this node's + its subscriptions' context dirs.
|
|
347
346
|
* Self-contained popup — no node-focus, no return-pane. */
|
|
348
347
|
function openContext(ctx) {
|
|
@@ -357,7 +356,7 @@ function openContext(ctx) {
|
|
|
357
356
|
ctx.notify('/context: no node to root on (viewer has no node id)');
|
|
358
357
|
return true;
|
|
359
358
|
}
|
|
360
|
-
popup(`crtr node context --node ${shellQuote(nodeId)}`);
|
|
359
|
+
popup(`crtr node inspect context --node ${shellQuote(nodeId)}`);
|
|
361
360
|
return true;
|
|
362
361
|
}
|
|
363
362
|
/** Open `cmd` as a fire-and-forget tmux display-popup (same geometry as the canvas
|
|
@@ -43,9 +43,13 @@ export declare class TitledEditor extends CustomEditor {
|
|
|
43
43
|
/** Pre-styled context string painted into the RIGHT of the top border (cwd /
|
|
44
44
|
* branch / git status). Already colorized by the caller; empty → omitted. */
|
|
45
45
|
info: string;
|
|
46
|
+
/** Mode badge painted into the bottom-right of the outline. Empty → omitted. */
|
|
47
|
+
mode: string;
|
|
46
48
|
/** Paint the chip solid so the name reads as a label sitting on the border
|
|
47
49
|
* rule. Defaults to the reverse-video chip; attach-cmd swaps in a
|
|
48
50
|
* thinking-colored background (bold white text) on each state update. */
|
|
49
51
|
titleStyle: (s: string) => string;
|
|
52
|
+
/** Mode badge colorizer, matched to the current mode type. */
|
|
53
|
+
modeStyle: (s: string) => string;
|
|
50
54
|
render(width: number): string[];
|
|
51
55
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// titled-editor.ts — the `crtr attach` input editor with two bits of chrome pi's
|
|
1
|
+
// titled-editor.ts — the `crtr surface attach` input editor with two bits of chrome pi's
|
|
2
2
|
// stock editor doesn't give us:
|
|
3
3
|
// 1. the session name painted INTO the top border as a solid-background chip,
|
|
4
4
|
// so it stays pinned to the editor instead of scrolling off as a free badge;
|
|
@@ -103,10 +103,14 @@ export class TitledEditor extends CustomEditor {
|
|
|
103
103
|
/** Pre-styled context string painted into the RIGHT of the top border (cwd /
|
|
104
104
|
* branch / git status). Already colorized by the caller; empty → omitted. */
|
|
105
105
|
info = '';
|
|
106
|
+
/** Mode badge painted into the bottom-right of the outline. Empty → omitted. */
|
|
107
|
+
mode = '';
|
|
106
108
|
/** Paint the chip solid so the name reads as a label sitting on the border
|
|
107
109
|
* rule. Defaults to the reverse-video chip; attach-cmd swaps in a
|
|
108
110
|
* thinking-colored background (bold white text) on each state update. */
|
|
109
111
|
titleStyle = defaultTitleStyle;
|
|
112
|
+
/** Mode badge colorizer, matched to the current mode type. */
|
|
113
|
+
modeStyle = defaultTitleStyle;
|
|
110
114
|
render(width) {
|
|
111
115
|
const lines = super.render(width);
|
|
112
116
|
if ((this.title || this.info) && lines.length > 0) {
|
|
@@ -114,6 +118,14 @@ export class TitledEditor extends CustomEditor {
|
|
|
114
118
|
// border color.
|
|
115
119
|
lines[0] = composeTopBorder(width, this.title, this.info, this.titleStyle, (s) => this.borderColor(s));
|
|
116
120
|
}
|
|
121
|
+
if (this.mode && lines.length > 0) {
|
|
122
|
+
const badge = this.modeStyle(this.mode);
|
|
123
|
+
const badgeWidth = visibleWidth(badge);
|
|
124
|
+
if (badgeWidth + 2 < width) {
|
|
125
|
+
const last = lines.length - 1;
|
|
126
|
+
lines[last] = truncateToWidth(lines[last], width - badgeWidth, '') + badge;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
117
129
|
return lines;
|
|
118
130
|
}
|
|
119
131
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// view-socket.ts — the socket client half of `crtr attach` (Phase 4, T7).
|
|
1
|
+
// view-socket.ts — the socket client half of `crtr surface attach` (Phase 4, T7).
|
|
2
2
|
//
|
|
3
3
|
// The §0 ONE-WRITER INVARIANT lives in this directory: a viewer has ONLY a
|
|
4
4
|
// socket. ViewSocketClient connects to a node's ALREADY-running headless broker
|
|
@@ -7,26 +7,26 @@ test('coalesces the idempotent crtr --json reads the SSE burst fans out', () =>
|
|
|
7
7
|
// duplicate subprocesses because shouldCache only matched `canvas snapshot`.
|
|
8
8
|
assert.equal(isCoalescableSourceRequest(exec(['canvas', 'snapshot', '--json'])), true);
|
|
9
9
|
assert.equal(isCoalescableSourceRequest(exec(['human', 'list', '--json'])), true);
|
|
10
|
-
assert.equal(isCoalescableSourceRequest(exec(['view', 'list', '--json'])), true);
|
|
11
|
-
assert.equal(isCoalescableSourceRequest(exec(['node', 'snapshot', 'abc-123', '--json'])), true);
|
|
10
|
+
assert.equal(isCoalescableSourceRequest(exec(['surface', 'view', 'list', '--json'])), true);
|
|
11
|
+
assert.equal(isCoalescableSourceRequest(exec(['node', 'inspect', 'snapshot', 'abc-123', '--json'])), true);
|
|
12
12
|
assert.equal(isCoalescableSourceRequest(exec(['node', 'inspect', 'show', 'abc-123', '--json'])), true);
|
|
13
13
|
});
|
|
14
14
|
test('does NOT coalesce writes, side-effecting, or target-mismatched requests', () => {
|
|
15
15
|
// Writes — must never be cached (would drop a mutation).
|
|
16
16
|
assert.equal(isCoalescableSourceRequest(exec(['node', 'new', '--json'], { stdin: 'prompt' })), false);
|
|
17
17
|
assert.equal(isCoalescableSourceRequest(exec(['canvas', 'revive', 'abc', '--json'])), false);
|
|
18
|
-
assert.equal(isCoalescableSourceRequest(exec(['node', 'msg', 'abc', '--json'], { stdin: 'hi' })), false);
|
|
18
|
+
assert.equal(isCoalescableSourceRequest(exec(['node', 'spine', 'msg', 'abc', '--json'], { stdin: 'hi' })), false);
|
|
19
19
|
// human resolve / deck are on-demand writes, not the cached list read.
|
|
20
20
|
assert.equal(isCoalescableSourceRequest(exec(['human', 'resolve', 'q1', '--json'])), false);
|
|
21
21
|
// Any stdin or cwd override disqualifies even an allowlisted command shape.
|
|
22
22
|
assert.equal(isCoalescableSourceRequest(exec(['canvas', 'snapshot', '--json'], { stdin: 'x' })), false);
|
|
23
|
-
assert.equal(isCoalescableSourceRequest(exec(['view', 'list', '--json'], { cwd: '/elsewhere' })), false);
|
|
23
|
+
assert.equal(isCoalescableSourceRequest(exec(['surface', 'view', 'list', '--json'], { cwd: '/elsewhere' })), false);
|
|
24
24
|
// Non-exec requests are never cacheable.
|
|
25
25
|
assert.equal(isCoalescableSourceRequest({ kind: 'file', path: '/tmp/x' }), false);
|
|
26
26
|
assert.equal(isCoalescableSourceRequest({ kind: 'http', method: 'GET', url: 'http://x' }), false);
|
|
27
27
|
// Non-crtr bin, missing --json, or wrong arity must not match.
|
|
28
28
|
assert.equal(isCoalescableSourceRequest(exec(['human', 'list', '--json'], { bin: 'sh' })), false);
|
|
29
29
|
assert.equal(isCoalescableSourceRequest(exec(['human', 'list'])), false);
|
|
30
|
-
assert.equal(isCoalescableSourceRequest(exec(['node', 'snapshot', '--json'])), false);
|
|
30
|
+
assert.equal(isCoalescableSourceRequest(exec(['node', 'inspect', 'snapshot', '--json'])), false);
|
|
31
31
|
assert.equal(isCoalescableSourceRequest(exec(['node', 'inspect', 'show', '--json'])), false);
|
|
32
32
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// server.ts — the unified
|
|
1
|
+
// server.ts — the unified surface web server: the crouter web UI server.
|
|
2
2
|
//
|
|
3
3
|
// ONE long-running server process on the bound host that serves THREE concerns
|
|
4
4
|
// on one origin (the §2 unified server):
|
|
@@ -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
|
|
@@ -43,6 +43,12 @@ import { runSourceRequest } from '../../core/view/bridge.js';
|
|
|
43
43
|
import { startEventHub } from './events.js';
|
|
44
44
|
import { createDevServer } from './dev-server.js';
|
|
45
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';
|
|
46
52
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
47
53
|
/** Candidate dirs to serve the shell SPA bundle from, in priority order: an
|
|
48
54
|
* explicit override, the compiled-module-relative `dist/web-client/` (what
|
|
@@ -189,7 +195,7 @@ function serveStatic(clientDir, req, res) {
|
|
|
189
195
|
}
|
|
190
196
|
if (!existsSync(filePath)) {
|
|
191
197
|
res.writeHead(503, { 'content-type': 'text/plain; charset=utf-8' });
|
|
192
|
-
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 ' +
|
|
193
199
|
`${clientDir} (or pass --dev for Vite middleware)\n`);
|
|
194
200
|
return;
|
|
195
201
|
}
|
|
@@ -364,7 +370,7 @@ export async function startWebServer(opts) {
|
|
|
364
370
|
const dev = opts.dev ?? false;
|
|
365
371
|
const tokenRequired = !isLoopbackHost(host);
|
|
366
372
|
if (tokenRequired && (token === undefined || token === '')) {
|
|
367
|
-
throw new Error(`crtr web serve --host ${host} requires --token for remote-capable endpoints`);
|
|
373
|
+
throw new Error(`crtr surface web serve --host ${host} requires --token for remote-capable endpoints`);
|
|
368
374
|
}
|
|
369
375
|
const clientDir = resolveClientDir();
|
|
370
376
|
// The bridge runs view sources + command verbs locally, in the cwd crtr was
|
|
@@ -441,6 +447,24 @@ export async function startWebServer(opts) {
|
|
|
441
447
|
eventHub.addClient(res);
|
|
442
448
|
return;
|
|
443
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
|
+
}
|
|
444
468
|
// --dev: Vite middleware owns all remaining asset/HTML serving (incl. its
|
|
445
469
|
// own SPA fallback). It is mounted AFTER the bridge + SSE checks above, so
|
|
446
470
|
// those never fall through to Vite.
|
|
@@ -520,7 +544,7 @@ export async function startWebServer(opts) {
|
|
|
520
544
|
// A server error AFTER listen (e.g. an accept failure) must not be an
|
|
521
545
|
// unhandled 'error' that crashes the process (n9) — log + carry on.
|
|
522
546
|
httpServer.on('error', (err) => {
|
|
523
|
-
process.stderr.write(`crtr web: server error: ${err.message}\n`);
|
|
547
|
+
process.stderr.write(`crtr surface web: server error: ${err.message}\n`);
|
|
524
548
|
});
|
|
525
549
|
const addr = httpServer.address();
|
|
526
550
|
const port = typeof addr === 'object' && addr !== null ? addr.port : opts.port;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// (node new / canvas revive / node msg), file reads, http requests, and any
|
|
13
13
|
// request carrying stdin or an overridden cwd are NEVER cacheable — caching
|
|
14
14
|
// those would drop a mutation or serve a stale cross-cwd read. Target-dependent
|
|
15
|
-
// reads (node snapshot/
|
|
15
|
+
// reads (node inspect snapshot/show for a specific id) ARE cacheable because the id
|
|
16
16
|
// is part of the request and therefore part of the coalescing key, so distinct
|
|
17
17
|
// ids never collide.
|
|
18
18
|
/** TTL for coalesced source reads. Must comfortably exceed the SSE debounce
|
|
@@ -26,8 +26,8 @@ export const SOURCE_CACHE_TTL_MS = 500;
|
|
|
26
26
|
const CACHEABLE_READS = [
|
|
27
27
|
['canvas', 'snapshot', '--json'],
|
|
28
28
|
['human', 'list', '--json'],
|
|
29
|
-
['view', 'list', '--json'],
|
|
30
|
-
['node', 'snapshot', '*', '--json'],
|
|
29
|
+
['surface', 'view', 'list', '--json'],
|
|
30
|
+
['node', 'inspect', 'snapshot', '*', '--json'],
|
|
31
31
|
['node', 'inspect', 'show', '*', '--json'],
|
|
32
32
|
];
|
|
33
33
|
function argsMatch(pattern, args) {
|
|
@@ -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
6
|
// browser ⇄ broker relay on `ws://HOST:PORT/node/<id>` (the browser becomes
|
|
7
|
-
// the SAME protocol peer as
|
|
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,7 +37,7 @@ 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 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
|
|
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
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>)',
|
|
@@ -100,7 +100,7 @@ const webServeLeaf = defineLeaf({
|
|
|
100
100
|
const server = await startWebServer({ port, host, token, dev });
|
|
101
101
|
const nodeUrlShape = `${server.url}/node/<id>`;
|
|
102
102
|
const browserUrl = token !== undefined ? `${server.url}?token=${encodeURIComponent(token)}` : server.url;
|
|
103
|
-
process.stdout.write(`crtr web serving on ${server.url}${dev ? ' (--dev: Vite middleware)' : ''}\n` +
|
|
103
|
+
process.stdout.write(`crtr surface web serving on ${server.url}${dev ? ' (--dev: Vite middleware)' : ''}\n` +
|
|
104
104
|
` open a node: ${nodeUrlShape}\n` +
|
|
105
105
|
` bridge: POST ${server.url}/__crtr/source\n` +
|
|
106
106
|
` events (SSE): GET ${server.url}/__crtr/events\n` +
|
|
@@ -127,12 +127,12 @@ export function registerWeb() {
|
|
|
127
127
|
rootEntry: {
|
|
128
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',
|
|
129
129
|
desc: 'serve the crouter web UI for the canvas and headless nodes',
|
|
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
|
|
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.',
|
|
131
131
|
},
|
|
132
132
|
help: {
|
|
133
133
|
name: 'web',
|
|
134
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',
|
|
135
|
-
model: '`serve` starts the
|
|
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.',
|
|
136
136
|
},
|
|
137
137
|
children: [webServeLeaf],
|
|
138
138
|
});
|
|
@@ -70,7 +70,7 @@ export const issueNewLeaf = defineLeaf({
|
|
|
70
70
|
name: 'canvas issue new',
|
|
71
71
|
summary: 'Capture a free-text note as a GitHub issue labeled with its type (idea|bug). Reads the note from the popup TTY, auto-generates the title via a headless pi call, and files it with `gh issue create` when the cwd is a GitHub repo, else writes `<git-root>/.todos/<slug>.md`. Bound to the alt+c \u2192 i prefix chord.',
|
|
72
72
|
params: [
|
|
73
|
-
{ kind: 'flag', name: 'type', type: '
|
|
73
|
+
{ kind: 'flag', name: 'type', type: 'enum', choices: ['idea', 'bug'], required: true, constraint: 'Issue type / label.' },
|
|
74
74
|
{ kind: 'flag', name: 'body', type: 'string', required: false, constraint: 'The note text. Omit to read it from stdin/the popup TTY (type, Ctrl-D to submit).' },
|
|
75
75
|
{ kind: 'flag', name: 'cwd', type: 'string', required: false, constraint: 'Directory whose repo the issue targets. Defaults to --pane\u2019s path, then process.cwd().' },
|
|
76
76
|
{ kind: 'flag', name: 'pane', type: 'string', required: false, constraint: 'tmux pane whose cwd/client to use for repo resolution and the confirmation toast.' },
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
//
|
|
9
9
|
// Exported as a leaf; `crtr canvas` (canvas.ts) mounts it.
|
|
10
10
|
import { defineLeaf } from '../core/command.js';
|
|
11
|
-
import { pruneNodes } from '../core/canvas/index.js';
|
|
11
|
+
import { pruneNodes, pruneToLimit } from '../core/canvas/index.js';
|
|
12
12
|
import { reapEmptyNodes } from '../core/runtime/placement.js';
|
|
13
13
|
const DEFAULT_TTL_DAYS = 14;
|
|
14
14
|
export const canvasPruneLeaf = defineLeaf({
|
|
@@ -17,8 +17,15 @@ export const canvasPruneLeaf = defineLeaf({
|
|
|
17
17
|
whenToUse: 'you want to bound the canvas\u2019s on-disk growth \u2014 sweep away nodes that are finished (done), crashed (dead), or closed (canceled) and older than a retention window, reclaiming their rows, edges (cascade-deleted by the schema), and `nodes/<id>/` dirs. Run it as an operator/cron chore; live nodes (active/idle) are never touched, and you can preview the sweep before it deletes anything',
|
|
18
18
|
help: {
|
|
19
19
|
name: 'canvas prune',
|
|
20
|
-
summary: 'delete terminal nodes older than a TTL (edges cascade, dirs removed); --dry-run to preview',
|
|
20
|
+
summary: 'delete terminal nodes older than a TTL (edges cascade, dirs removed); --max N for a count cap; --dry-run to preview',
|
|
21
21
|
params: [
|
|
22
|
+
{
|
|
23
|
+
kind: 'flag',
|
|
24
|
+
name: 'max',
|
|
25
|
+
type: 'int',
|
|
26
|
+
required: false,
|
|
27
|
+
constraint: 'COUNT mode (instead of the TTL sweep): keep only the N most-recently-active nodes, deleting the oldest terminal nodes beyond the cap. LIVE nodes (active/idle with a running pi) are NEVER deleted, so the real floor is max(N, liveCount). Recency = telemetry.json mtime, falling back to created. Combine with --dry-run to preview.',
|
|
28
|
+
},
|
|
22
29
|
{
|
|
23
30
|
kind: 'flag',
|
|
24
31
|
name: 'ttl',
|
|
@@ -60,6 +67,7 @@ export const canvasPruneLeaf = defineLeaf({
|
|
|
60
67
|
],
|
|
61
68
|
outputKind: 'object',
|
|
62
69
|
effects: [
|
|
70
|
+
'With --max N: COUNT mode — keep only the N most-recently-active nodes, deleting the oldest terminal beyond max(N, liveCount); live (active/idle with a running pi) nodes and the caller are never deleted. Takes precedence over the TTL/--empty sweeps.',
|
|
63
71
|
'Deletes matching `nodes` rows; their edges cascade-delete via the FK; each node\u2019s `nodes/<id>/` dir is removed.',
|
|
64
72
|
'No-op on live nodes (active/idle) and on terminal nodes newer than the TTL. With --include-stale: also deletes active/idle nodes past the TTL whose process is gone (pi_pid null/dead); genuinely-running nodes and the caller are kept.',
|
|
65
73
|
'Under --dry-run: read-only, deletes nothing.',
|
|
@@ -70,6 +78,20 @@ export const canvasPruneLeaf = defineLeaf({
|
|
|
70
78
|
const dryRun = input['dryRun'] ?? false;
|
|
71
79
|
const includeStale = input['includeStale'] ?? false;
|
|
72
80
|
const empty = input['empty'] ?? false;
|
|
81
|
+
const maxNodes = input['max'];
|
|
82
|
+
if (maxNodes !== undefined) {
|
|
83
|
+
const result = pruneToLimit({ maxNodes, dryRun });
|
|
84
|
+
return {
|
|
85
|
+
pruned: dryRun ? 0 : result.pruned.length,
|
|
86
|
+
dryRun,
|
|
87
|
+
ttlDays,
|
|
88
|
+
nodes: result.pruned.map((p) => ({
|
|
89
|
+
node_id: p.node_id,
|
|
90
|
+
status: p.status,
|
|
91
|
+
created: p.created,
|
|
92
|
+
})),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
73
95
|
if (empty) {
|
|
74
96
|
const ids = reapEmptyNodes({ dryRun });
|
|
75
97
|
return {
|
|
@@ -15,6 +15,9 @@ export const canvasSnapshotLeaf = defineLeaf({
|
|
|
15
15
|
],
|
|
16
16
|
outputKind: 'object',
|
|
17
17
|
effects: ['Read-only: queries canvas.db, focus rows, telemetry files, and human ask counts.'],
|
|
18
|
+
// Machine-readable dump for the browser canvas, not for an agent/human to
|
|
19
|
+
// glance at — collapse it in the attach viewer by default.
|
|
20
|
+
preview: { suppressOutput: true },
|
|
18
21
|
},
|
|
19
22
|
run: async () => {
|
|
20
23
|
const rows = dashboardRowsAll();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Bound by the alt+c → `e` chord (config: prefixBinds['e'].run = "canvas
|
|
4
4
|
// tmux-spread {self}"). It "expands" the graph you are watching: the caller's
|
|
5
|
-
// own viewer pane is broken out into a BRAND-NEW window, then a
|
|
5
|
+
// own viewer pane is broken out into a BRAND-NEW window, then a surface-attach
|
|
6
6
|
// viewer pane is tiled beside it for every broker-alive node in the local
|
|
7
7
|
// subtree (ancestry root → self → descendants), so the user lands on a single
|
|
8
8
|
// window showing the whole live subtree at once.
|
|
@@ -51,7 +51,7 @@ export const tmuxSpreadLeaf = defineLeaf({
|
|
|
51
51
|
whenToUse: 'you want the whole live subtree you are watching on one tiled tmux window at once — bound to the alt+c → e chord; rarely run by hand',
|
|
52
52
|
help: {
|
|
53
53
|
name: 'canvas tmux-spread',
|
|
54
|
-
summary: 'Explode the local subtree into a tiled grid: break the caller\'s viewer pane into a brand-new window, then tile a
|
|
54
|
+
summary: 'Explode the local subtree into a tiled grid: break the caller\'s viewer pane into a brand-new window, then tile a surface-attach viewer pane beside it for every broker-alive node (status active/idle + live pi_pid) in the ancestry-root subtree, most-recently-active first, capped at 8 panes',
|
|
55
55
|
params: [
|
|
56
56
|
{
|
|
57
57
|
kind: 'positional',
|
|
@@ -77,7 +77,7 @@ export const tmuxSpreadLeaf = defineLeaf({
|
|
|
77
77
|
outputKind: 'object',
|
|
78
78
|
effects: [
|
|
79
79
|
'Breaks the caller\'s viewer pane into a brand-new tmux window (tmux break-pane).',
|
|
80
|
-
'Opens a
|
|
80
|
+
'Opens a surface-attach viewer pane (and a focuses row) for each shown sibling, moving any that had a viewer elsewhere into the spread.',
|
|
81
81
|
'Tiles the window and switches the client onto it.',
|
|
82
82
|
],
|
|
83
83
|
},
|
package/dist/commands/human.js
CHANGED
|
@@ -20,7 +20,7 @@ export function registerHuman() {
|
|
|
20
20
|
rootEntry: {
|
|
21
21
|
concept: 'human-in-the-loop decisions, document review, and live display',
|
|
22
22
|
desc: 'ask, review, notify, show, cancel, inbox, list',
|
|
23
|
-
useWhen: 'you have a question for the user, want their feedback, or are presenting them with options or a choice — always reach for human instead of guessing or assuming, or laying a choice out as prose, when a person can decide; and whenever the user wants to review a spec, plan, or requirements document, this is the command
|
|
23
|
+
useWhen: 'you have a question for the user, want their feedback, or are presenting them with options or a choice — always reach for human instead of guessing or assuming, or laying a choice out as prose, when a person can decide; and whenever the user wants to review a spec, plan, or requirements document, this is the command for anchored line-by-line comments.'
|
|
24
24
|
},
|
|
25
25
|
help: {
|
|
26
26
|
name: 'human',
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// `crtr memory lint` — the permanent valid-YAML gate over the bounded corpus
|
|
2
2
|
// (the CTO green-checkpoint: zero frontmatter parse errors at authoring time,
|
|
3
3
|
// so an invalid doc fails HERE instead of being silently isolated at runtime).
|
|
4
|
-
// Bounded corpus = the substrate memory dirs (
|
|
5
|
-
// filesystem-wide scan.
|
|
6
|
-
import { basename, relative, sep } from 'node:path';
|
|
4
|
+
// Bounded corpus = the substrate memory dirs (ancestor projects/user/builtin).
|
|
5
|
+
// Never a filesystem-wide scan.
|
|
6
|
+
import { basename, join, relative, sep } from 'node:path';
|
|
7
7
|
import { defineLeaf } from '../../core/command.js';
|
|
8
8
|
import { general } from '../../core/errors.js';
|
|
9
9
|
import { warn } from '../../core/output.js';
|
|
10
10
|
import { pathExists, readText, walkFiles } from '../../core/fs-utils.js';
|
|
11
11
|
import { parseFrontmatterGeneric } from '../../core/frontmatter.js';
|
|
12
|
-
import { listInstalledPlugins } from '../../core/resolver.js';
|
|
13
|
-
import { pluginMemoryDir, scopeMemoryDir } from '../../core/scope.js';
|
|
12
|
+
import { listInstalledPlugins, listInstalledPluginsInRoot } from '../../core/resolver.js';
|
|
13
|
+
import { pluginMemoryDir, projectScopeRoots, scopeMemoryDir } from '../../core/scope.js';
|
|
14
14
|
import { isDocKind, RUNGS } from '../../core/substrate/index.js';
|
|
15
15
|
/** The parser normalizes the `always` alias to `content`, so it lints valid. */
|
|
16
16
|
const VALID_RUNGS = [...RUNGS, 'always'];
|
|
@@ -107,8 +107,8 @@ export const lintLeaf = defineLeaf({
|
|
|
107
107
|
run: async () => {
|
|
108
108
|
const findings = [];
|
|
109
109
|
let memoryCount = 0;
|
|
110
|
-
// Substrate memory stores (
|
|
111
|
-
// corpus is its NATIVE memory dir plus each enabled plugin's memory dir —
|
|
110
|
+
// Substrate memory stores (ancestor projects/user/builtin), schema-aware.
|
|
111
|
+
// A source's corpus is its NATIVE memory dir plus each enabled plugin's memory dir —
|
|
112
112
|
// plugin docs are substrate docs and lint through the same schema gate.
|
|
113
113
|
// MEMORY.md index files are not substrate docs — YAML-parse only.
|
|
114
114
|
const lintDir = (dir) => {
|
|
@@ -121,7 +121,14 @@ export const lintLeaf = defineLeaf({
|
|
|
121
121
|
lintFile(file, basename(file) !== 'MEMORY.md', findings);
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
|
-
for (const
|
|
124
|
+
for (const root of projectScopeRoots()) {
|
|
125
|
+
lintDir(join(root, 'memory'));
|
|
126
|
+
for (const plugin of listInstalledPluginsInRoot('project', root)) {
|
|
127
|
+
if (plugin.enabled)
|
|
128
|
+
lintDir(pluginMemoryDir(plugin));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
for (const scope of ['user', 'builtin']) {
|
|
125
132
|
lintDir(scopeMemoryDir(scope));
|
|
126
133
|
for (const plugin of listInstalledPlugins(scope)) {
|
|
127
134
|
if (plugin.enabled)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const originLeaf: import("../../core/command.js").LeafDef;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { defineLeaf } from '../../core/command.js';
|
|
2
|
+
import { CrtrError, notFound } from '../../core/errors.js';
|
|
3
|
+
import { resolveMemoryDoc } from '../../core/memory-resolver.js';
|
|
4
|
+
import { getNode } from '../../core/canvas/canvas.js';
|
|
5
|
+
import { contextDir } from '../../core/canvas/paths.js';
|
|
6
|
+
export const originLeaf = defineLeaf({
|
|
7
|
+
name: 'origin',
|
|
8
|
+
description: 'deref a memory document back to the node + conversation that created it',
|
|
9
|
+
whenToUse: 'you are looking at a stored memory and want to know WHERE it came from — which node authored it, in what conversation, when, and in which project. Reads the `origin` provenance block the runtime stamps at creation and derefs the node pointer to its live session conversation, context dir, and current state. Docs hand-authored or created before provenance capture carry no origin — the command says so rather than guessing.',
|
|
10
|
+
help: {
|
|
11
|
+
name: 'memory origin',
|
|
12
|
+
summary: 'resolve a doc name to its creation provenance and deref the originating node',
|
|
13
|
+
params: [
|
|
14
|
+
{ kind: 'positional', name: 'name', required: true, constraint: 'Path-derived memory identifier (e.g. `topic` or `area/topic`). Resolved across scopes: project > user > builtin.' },
|
|
15
|
+
],
|
|
16
|
+
output: [
|
|
17
|
+
{ name: 'name', type: 'string', required: true, constraint: 'Resolved document name.' },
|
|
18
|
+
{ name: 'path', type: 'string', required: true, constraint: 'Absolute path to the document on disk.' },
|
|
19
|
+
{ name: 'origin_recorded', type: 'boolean', required: true, constraint: 'true when the doc carries an `origin` provenance block; false for hand-authored or pre-provenance docs.' },
|
|
20
|
+
{ name: 'created', type: 'string', required: false, constraint: 'ISO timestamp the doc was created. Absent when origin_recorded is false.' },
|
|
21
|
+
{ name: 'cwd', type: 'string', required: false, constraint: 'Working directory the authoring conversation ran in.' },
|
|
22
|
+
{ name: 'node', type: 'string', required: false, constraint: 'Node id that authored the doc, or null when written by a human at the CLI (no node).' },
|
|
23
|
+
{ name: 'node_present', type: 'boolean', required: false, constraint: 'true when that node still exists on the canvas (deref below is live); false when it has been pruned.' },
|
|
24
|
+
{ name: 'node_kind', type: 'string', required: false, constraint: 'Kind of the authoring node (only when node_present).' },
|
|
25
|
+
{ name: 'node_mode', type: 'string', required: false, constraint: 'Mode of the authoring node (only when node_present).' },
|
|
26
|
+
{ name: 'node_status', type: 'string', required: false, constraint: 'Current lifecycle status of the authoring node (only when node_present).' },
|
|
27
|
+
{ name: 'node_description', type: 'string', required: false, constraint: 'The authoring node\u2019s description (only when node_present).' },
|
|
28
|
+
{ name: 'session_file', type: 'string', required: false, constraint: 'Absolute path to the originating conversation\u2019s pi session .jsonl (only when node_present and a session was captured) \u2014 read it to see the conversation that produced the doc.' },
|
|
29
|
+
{ name: 'context_dir', type: 'string', required: false, constraint: 'Absolute path to the authoring node\u2019s context dir (its shared document store).' },
|
|
30
|
+
{ name: 'follow_up', type: 'string', required: true, constraint: 'Concrete next commands to inspect the origin.' },
|
|
31
|
+
],
|
|
32
|
+
outputKind: 'object',
|
|
33
|
+
effects: ['None. Read-only.'],
|
|
34
|
+
},
|
|
35
|
+
run: async (input) => {
|
|
36
|
+
const nameRaw = input['name'];
|
|
37
|
+
let doc;
|
|
38
|
+
try {
|
|
39
|
+
doc = resolveMemoryDoc(nameRaw);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
if (!(e instanceof CrtrError && e.code === 'not_found'))
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
if (doc === undefined) {
|
|
46
|
+
throw notFound(`memory document not found: ${nameRaw}`, {
|
|
47
|
+
memory: nameRaw,
|
|
48
|
+
next: 'Run `crtr memory find <query>` to discover documents, or `crtr memory list` to browse the inventory.',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const origin = doc.frontmatter?.['origin'];
|
|
52
|
+
if (origin === undefined || typeof origin !== 'object') {
|
|
53
|
+
return {
|
|
54
|
+
name: doc.name,
|
|
55
|
+
path: doc.path,
|
|
56
|
+
origin_recorded: false,
|
|
57
|
+
follow_up: 'No provenance recorded \u2014 this doc was hand-authored or created before provenance capture. Read its body with `crtr memory read ' +
|
|
58
|
+
doc.name +
|
|
59
|
+
'`.',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const str = (v) => (typeof v === 'string' ? v : null);
|
|
63
|
+
const nodeId = str(origin['node']);
|
|
64
|
+
const node = nodeId !== null ? getNode(nodeId) : null;
|
|
65
|
+
const sessionFile = str(node?.pi_session_file);
|
|
66
|
+
const followUp = node !== null
|
|
67
|
+
? `Read the originating conversation at \`${sessionFile ?? '(no session captured)'}\`, browse its shared docs at \`${contextDir(nodeId)}\`, or attach live with \`crtr surface attach ${nodeId}\`.`
|
|
68
|
+
: nodeId !== null
|
|
69
|
+
? `The authoring node \`${nodeId}\` has been pruned from the canvas; its context dir may persist at \`${contextDir(nodeId)}\`.`
|
|
70
|
+
: 'Authored by a human at the CLI \u2014 no node conversation to deref.';
|
|
71
|
+
return {
|
|
72
|
+
name: doc.name,
|
|
73
|
+
path: doc.path,
|
|
74
|
+
origin_recorded: true,
|
|
75
|
+
created: str(origin['created']) ?? undefined,
|
|
76
|
+
cwd: str(origin['cwd']) ?? undefined,
|
|
77
|
+
node: nodeId ?? undefined,
|
|
78
|
+
node_present: nodeId !== null ? node !== null : undefined,
|
|
79
|
+
node_kind: node?.kind ?? undefined,
|
|
80
|
+
node_mode: node?.mode ?? undefined,
|
|
81
|
+
node_status: node?.status ?? undefined,
|
|
82
|
+
node_description: node?.description ?? undefined,
|
|
83
|
+
session_file: sessionFile ?? undefined,
|
|
84
|
+
context_dir: nodeId !== null ? contextDir(nodeId) : undefined,
|
|
85
|
+
follow_up: followUp,
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
});
|
|
@@ -26,6 +26,14 @@ export declare function coerceReadWhen(raw: string): Record<string, unknown>;
|
|
|
26
26
|
/** Coerce a `--applies-to` string to the schema's glob form: a comma-separated
|
|
27
27
|
* list becomes an array, a single glob stays a string. */
|
|
28
28
|
export declare function coerceAppliesTo(raw: string): unknown;
|
|
29
|
+
/** Provenance for a doc at the moment it is created: when, where, and which
|
|
30
|
+
* node's conversation authored it. Read from the env the runtime injects into
|
|
31
|
+
* every node's pi process (CRTR_NODE_ID/KIND/MODE/NODE_CWD); when invoked
|
|
32
|
+
* outside a node (a human at the CLI) only `created` + `cwd` are recorded.
|
|
33
|
+
* Stamped ONCE at create and preserved verbatim on every later update —
|
|
34
|
+
* `crtr memory origin <name>` derefs the `node` pointer back to the live node
|
|
35
|
+
* (its session conversation, context dir, current state). */
|
|
36
|
+
export declare function buildOrigin(): Record<string, unknown>;
|
|
29
37
|
/** Serialize a substrate frontmatter record + body into a complete `.md`
|
|
30
38
|
* document. Frontmatter is emitted as a `---` fenced YAML block (the `yaml`
|
|
31
39
|
* package — the same one the parser uses — so nested gate maps and applies-to
|
|
@@ -102,7 +102,9 @@ export function coerceAppliesTo(raw) {
|
|
|
102
102
|
return parts.length === 1 ? parts[0] : parts;
|
|
103
103
|
}
|
|
104
104
|
// Canonical frontmatter field order for a substrate document. Known fields come
|
|
105
|
-
// first in this order; any preserved-on-update extras append after.
|
|
105
|
+
// first in this order; any preserved-on-update extras append after. `origin` is
|
|
106
|
+
// provenance the runtime stamps at creation (never the author) — it sorts last
|
|
107
|
+
// of the known fields so the authoring contract stays at the top of the block.
|
|
106
108
|
const FRONTMATTER_ORDER = [
|
|
107
109
|
'kind',
|
|
108
110
|
'when-and-why-to-read',
|
|
@@ -112,7 +114,26 @@ const FRONTMATTER_ORDER = [
|
|
|
112
114
|
'gate',
|
|
113
115
|
'applies-to',
|
|
114
116
|
'read-when',
|
|
117
|
+
'origin',
|
|
115
118
|
];
|
|
119
|
+
/** Provenance for a doc at the moment it is created: when, where, and which
|
|
120
|
+
* node's conversation authored it. Read from the env the runtime injects into
|
|
121
|
+
* every node's pi process (CRTR_NODE_ID/KIND/MODE/NODE_CWD); when invoked
|
|
122
|
+
* outside a node (a human at the CLI) only `created` + `cwd` are recorded.
|
|
123
|
+
* Stamped ONCE at create and preserved verbatim on every later update —
|
|
124
|
+
* `crtr memory origin <name>` derefs the `node` pointer back to the live node
|
|
125
|
+
* (its session conversation, context dir, current state). */
|
|
126
|
+
export function buildOrigin() {
|
|
127
|
+
const env = process.env;
|
|
128
|
+
const origin = {
|
|
129
|
+
created: new Date().toISOString(),
|
|
130
|
+
cwd: env['CRTR_NODE_CWD'] ?? process.cwd(),
|
|
131
|
+
};
|
|
132
|
+
const nodeId = env['CRTR_NODE_ID'];
|
|
133
|
+
if (nodeId !== undefined && nodeId !== '')
|
|
134
|
+
origin['node'] = nodeId;
|
|
135
|
+
return origin;
|
|
136
|
+
}
|
|
116
137
|
/** Serialize a substrate frontmatter record + body into a complete `.md`
|
|
117
138
|
* document. Frontmatter is emitted as a `---` fenced YAML block (the `yaml`
|
|
118
139
|
* package — the same one the parser uses — so nested gate maps and applies-to
|