@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
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
|
|
8
|
+
const exec = promisify(execFile);
|
|
9
|
+
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// crtr-commands: auto-generates a slash command for every node in the crtr
|
|
12
|
+
// CLI tree. `/node:new` runs `crtr node new -h`; `/node:list`
|
|
13
|
+
// runs `crtr node list -h`, and so on.
|
|
14
|
+
//
|
|
15
|
+
// Discovery is help-only (parses `-h` output), so walking the tree never
|
|
16
|
+
// executes a real crtr command. The tree is cached to tree-cache.json next
|
|
17
|
+
// to this file; rebuild it with `/crtr-refresh`.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
const CACHE_PATH = join(HERE, "tree-cache.json");
|
|
22
|
+
const FILTERS_PATH = join(HERE, "filters.json");
|
|
23
|
+
const CRTR = "crtr";
|
|
24
|
+
const MAX_DEPTH = 6;
|
|
25
|
+
|
|
26
|
+
// When true, injecting the output triggers an immediate agent response.
|
|
27
|
+
// When false (default), the output is loaded into context and the agent
|
|
28
|
+
// responds on your next message — closer to a prompt-template that primes
|
|
29
|
+
// context without forcing a turn.
|
|
30
|
+
const TRIGGER_TURN = false;
|
|
31
|
+
|
|
32
|
+
type Cache = { version: number; builtAt: number; nodes: string[][] };
|
|
33
|
+
type Filters = { include?: string[]; exclude?: string[] };
|
|
34
|
+
|
|
35
|
+
function loadFilters(): Filters {
|
|
36
|
+
if (!existsSync(FILTERS_PATH)) return {};
|
|
37
|
+
try {
|
|
38
|
+
const f = JSON.parse(readFileSync(FILTERS_PATH, "utf8")) as Filters;
|
|
39
|
+
return { include: f.include ?? [], exclude: f.exclude ?? [] };
|
|
40
|
+
} catch {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// An entry matches a node when it equals the node's colon-path OR is an
|
|
46
|
+
// ancestor prefix of it (entry "node" matches "node", "node:new", ...).
|
|
47
|
+
function matchesAny(name: string, entries: string[]): boolean {
|
|
48
|
+
return entries.some((e) => name === e || name.startsWith(e + ":"));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function isAllowed(name: string, filters: Filters): boolean {
|
|
52
|
+
const include = filters.include ?? [];
|
|
53
|
+
const exclude = filters.exclude ?? [];
|
|
54
|
+
if (include.length > 0 && !matchesAny(name, include)) return false;
|
|
55
|
+
if (exclude.length > 0 && matchesAny(name, exclude)) return false;
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function runCrtr(args: string[]): Promise<string> {
|
|
60
|
+
try {
|
|
61
|
+
const { stdout } = await exec(CRTR, args, { maxBuffer: 8 * 1024 * 1024 });
|
|
62
|
+
return stdout;
|
|
63
|
+
} catch (err: any) {
|
|
64
|
+
// crtr exits non-zero on errors but still prints to stdout.
|
|
65
|
+
return (err?.stdout as string) ?? `crtr ${args.join(" ")} failed: ${err?.message ?? err}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Parse child command names from a node's `-h` output (help-only, no execution).
|
|
70
|
+
function parseChildren(path: string[], helpText: string): string[] {
|
|
71
|
+
if (path.length === 0) {
|
|
72
|
+
// Root uses <command name="X"> tags.
|
|
73
|
+
return [...helpText.matchAll(/<command name="([^"]+)">/g)].map((m) => m[1]);
|
|
74
|
+
}
|
|
75
|
+
// Sub-nodes use a "Branches" block of indented rows.
|
|
76
|
+
const kids: string[] = [];
|
|
77
|
+
let inBranches = false;
|
|
78
|
+
for (const line of helpText.split("\n")) {
|
|
79
|
+
if (line.trim() === "Branches") {
|
|
80
|
+
inBranches = true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (inBranches) {
|
|
84
|
+
if (line.trim() === "") break;
|
|
85
|
+
if (!/^\s/.test(line)) break;
|
|
86
|
+
kids.push(line.trim().split(/\s+/)[0]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return kids;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function walkTree(): Promise<string[][]> {
|
|
93
|
+
const nodes: string[][] = [];
|
|
94
|
+
async function walk(path: string[], depth: number): Promise<void> {
|
|
95
|
+
if (path.length > 0) nodes.push(path);
|
|
96
|
+
if (depth > MAX_DEPTH) return;
|
|
97
|
+
const help = await runCrtr([...path, "-h"]);
|
|
98
|
+
for (const child of parseChildren(path, help)) {
|
|
99
|
+
if (child.startsWith("_")) continue; // skip internal commands
|
|
100
|
+
await walk([...path, child], depth + 1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
await walk([], 0);
|
|
104
|
+
return nodes;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function loadCache(): Cache | null {
|
|
108
|
+
if (!existsSync(CACHE_PATH)) return null;
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(readFileSync(CACHE_PATH, "utf8")) as Cache;
|
|
111
|
+
} catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function saveCache(nodes: string[][]): void {
|
|
117
|
+
const cache: Cache = { version: 1, builtAt: Date.now(), nodes };
|
|
118
|
+
writeFileSync(CACHE_PATH, JSON.stringify(cache, null, 2));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export default async function (pi: ExtensionAPI) {
|
|
122
|
+
let cache = loadCache();
|
|
123
|
+
if (!cache || !Array.isArray(cache.nodes) || cache.nodes.length === 0) {
|
|
124
|
+
const nodes = await walkTree();
|
|
125
|
+
saveCache(nodes);
|
|
126
|
+
cache = { version: 1, builtAt: Date.now(), nodes };
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const register = (path: string[]) => {
|
|
130
|
+
const name = path.join(":"); // e.g. ["node","new"] -> "node:new"
|
|
131
|
+
pi.registerCommand(name, {
|
|
132
|
+
description: `Run \`crtr ${path.join(" ")} -h\` (pass args to run the real command)`,
|
|
133
|
+
handler: async (args, ctx) => {
|
|
134
|
+
const extra = (args ?? "").trim();
|
|
135
|
+
// No args -> show help. With args -> run the real command.
|
|
136
|
+
const argv = extra ? [...path, ...extra.split(/\s+/)] : [...path, "-h"];
|
|
137
|
+
ctx.ui.setStatus("crtr-commands", `running crtr ${argv.join(" ")}`);
|
|
138
|
+
const output = await runCrtr(argv);
|
|
139
|
+
ctx.ui.setStatus("crtr-commands", "");
|
|
140
|
+
pi.sendMessage(
|
|
141
|
+
{
|
|
142
|
+
customType: "crtr-output",
|
|
143
|
+
content: `$ crtr ${argv.join(" ")}\n\n${output.trimEnd()}`,
|
|
144
|
+
display: true,
|
|
145
|
+
},
|
|
146
|
+
{ triggerTurn: TRIGGER_TURN },
|
|
147
|
+
);
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const filters = loadFilters();
|
|
153
|
+
let count = 0;
|
|
154
|
+
for (const path of cache.nodes) {
|
|
155
|
+
if (!isAllowed(path.join(":"), filters)) continue;
|
|
156
|
+
register(path);
|
|
157
|
+
count++;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
pi.on("session_start", async (_e, ctx) => {
|
|
161
|
+
ctx.ui.setStatus("crtr-commands", `${count} crtr commands`);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
pi.registerCommand("crtr-refresh", {
|
|
165
|
+
description: "Rebuild the crtr command tree cache (then run /reload)",
|
|
166
|
+
handler: async (_args, ctx) => {
|
|
167
|
+
ctx.ui.setStatus("crtr-commands", "walking crtr tree...");
|
|
168
|
+
const nodes = await walkTree();
|
|
169
|
+
saveCache(nodes);
|
|
170
|
+
ctx.ui.setStatus("crtr-commands", "");
|
|
171
|
+
ctx.ui.notify(`crtr-commands: cached ${nodes.length} commands. Run /reload to apply.`, "info");
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
5
|
+
import { join, dirname } from "node:path";
|
|
6
|
+
import { pathToFileURL } from "node:url";
|
|
7
|
+
|
|
8
|
+
const exec = promisify(execFile);
|
|
9
|
+
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// crtr-help-gate: refuse to let the agent EXECUTE a crtr leaf command until it
|
|
12
|
+
// has read that command's `-h` (its contract) in this pi session.
|
|
13
|
+
//
|
|
14
|
+
// Why: crtr's whole interface contract is "read the schema, then invoke". This
|
|
15
|
+
// guard makes that mechanical — a crtr method (a leaf like `node new`,
|
|
16
|
+
// `human ask`, `skill read`) cannot run until `crtr <that path> -h` (or
|
|
17
|
+
// `--help`) has been seen this session. The first blind attempt is BLOCKED:
|
|
18
|
+
// the agent gets the command's `-h` output inline plus the instruction to read
|
|
19
|
+
// it. So the method is never executed without its contract already in context.
|
|
20
|
+
//
|
|
21
|
+
// Scope of the gate:
|
|
22
|
+
// - Only LEAF executions are gated. `crtr`, `crtr node`, `crtr node -h`,
|
|
23
|
+
// `crtr node new -h` are all help/listing surfaces (crtr just prints help
|
|
24
|
+
// and exits) — they are allowed and the leaf-targeted ones record a bless.
|
|
25
|
+
// - Resolution uses crtr's OWN argv walker (`walk` + `buildRoot` from its
|
|
26
|
+
// installed dist), so a path resolves exactly the way `crtr` itself would:
|
|
27
|
+
// `crtr skill read some-skill` resolves to the leaf `skill read`, NOT to a
|
|
28
|
+
// bogus `skill read some-skill`.
|
|
29
|
+
// - "Help seen" survives /reload, /resume, /fork because it is rebuilt from
|
|
30
|
+
// the session's own command history on session_start.
|
|
31
|
+
//
|
|
32
|
+
// Fail-open: if crtr's dist can't be located/imported, the gate disables
|
|
33
|
+
// itself and never blocks anything (it must never brick the agent).
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
// When true (default): the block dumps the help AND blesses the path, so the
|
|
37
|
+
// immediate retry runs. Still guarantees the method never executes without
|
|
38
|
+
// its help already shown — just without an explicit extra `-h` call, and no
|
|
39
|
+
// risk of a re-block loop.
|
|
40
|
+
// When false (strict): a blocked command is NOT auto-blessed. The agent must
|
|
41
|
+
// run `crtr <path> -h` itself (which the gate allows + blesses), then
|
|
42
|
+
// re-issue — the help text is then shown twice.
|
|
43
|
+
const BLESS_ON_BLOCK = true;
|
|
44
|
+
|
|
45
|
+
const HELP_MAX = 16_000; // cap embedded -h output
|
|
46
|
+
|
|
47
|
+
type CrtrNode = { kind: "root" | "branch" | "leaf"; help?: { params?: unknown[] } };
|
|
48
|
+
type WalkResult = { node: CrtrNode; path: string[]; remaining: string[] };
|
|
49
|
+
type WalkFn = (root: unknown, tokens: string[]) => WalkResult;
|
|
50
|
+
|
|
51
|
+
let crtrRoot: unknown = null;
|
|
52
|
+
let walk: WalkFn | null = null;
|
|
53
|
+
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Locate + import crtr's real command tree and argv walker.
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
function resolveCrtrDist(): string | null {
|
|
59
|
+
const dirs = (process.env.PATH ?? "").split(":");
|
|
60
|
+
for (const d of dirs) {
|
|
61
|
+
if (!d) continue;
|
|
62
|
+
const cand = join(d, "crtr");
|
|
63
|
+
try {
|
|
64
|
+
if (!existsSync(cand)) continue;
|
|
65
|
+
const real = realpathSync(cand); // <checkout>/bin/crtr
|
|
66
|
+
const dist = join(dirname(real), "..", "dist");
|
|
67
|
+
if (existsSync(join(dist, "build-root.js")) && existsSync(join(dist, "core", "command.js"))) {
|
|
68
|
+
return dist;
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
/* keep scanning */
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function loadCrtr(): Promise<boolean> {
|
|
78
|
+
const dist = resolveCrtrDist();
|
|
79
|
+
if (!dist) return false;
|
|
80
|
+
try {
|
|
81
|
+
const cmdMod = (await import(pathToFileURL(join(dist, "core", "command.js")).href)) as {
|
|
82
|
+
walk: WalkFn;
|
|
83
|
+
};
|
|
84
|
+
const brMod = (await import(pathToFileURL(join(dist, "build-root.js")).href)) as {
|
|
85
|
+
buildRoot: () => unknown;
|
|
86
|
+
};
|
|
87
|
+
if (typeof cmdMod.walk !== "function" || typeof brMod.buildRoot !== "function") return false;
|
|
88
|
+
walk = cmdMod.walk;
|
|
89
|
+
crtrRoot = brMod.buildRoot();
|
|
90
|
+
return crtrRoot != null;
|
|
91
|
+
} catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Shell-aware tokenizer + crtr-invocation finder.
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
|
|
100
|
+
type Tok = { value: string; op: boolean };
|
|
101
|
+
|
|
102
|
+
// Opening half of a heredoc redirect: `<<DELIM`, `<<-DELIM`, `<< DELIM`,
|
|
103
|
+
// `<<'DELIM'`, `<<"DELIM"`. Group 1 = the `-` (strip-leading-tabs) variant;
|
|
104
|
+
// group 2 = the quote (if any); group 3 = the delimiter word. Deliberately does
|
|
105
|
+
// NOT match `<<<` (here-string) or `x << 2` (no word delimiter).
|
|
106
|
+
const HEREDOC_OPEN = /<<(-?)\s*(["']?)([A-Za-z_][A-Za-z0-9_]*)\2/g;
|
|
107
|
+
|
|
108
|
+
/** Remove heredoc BODIES (the stdin data between `<<DELIM` and its closing
|
|
109
|
+
* `DELIM` line) from a bash command before it is tokenized. The opening line
|
|
110
|
+
* is kept — `crtr push final <<'EOF'` is still a real `push final` invocation
|
|
111
|
+
* we want to gate — but the body lines, which are data fed on stdin and never
|
|
112
|
+
* executed as commands, are dropped. Without this the tokenizer's newline=
|
|
113
|
+
* command-separator rule would read every `crtr <leaf>` line inside a heredoc
|
|
114
|
+
* body (a spawn prompt, a push report) as a real invocation and gate it. */
|
|
115
|
+
export function stripHeredocs(cmd: string): string {
|
|
116
|
+
const lines = cmd.split("\n");
|
|
117
|
+
const out: string[] = [];
|
|
118
|
+
let i = 0;
|
|
119
|
+
while (i < lines.length) {
|
|
120
|
+
const line = lines[i];
|
|
121
|
+
out.push(line);
|
|
122
|
+
i++;
|
|
123
|
+
// Collect every heredoc opened on this line, in left-to-right order; their
|
|
124
|
+
// bodies stack and are consumed in that order.
|
|
125
|
+
const delims: { name: string; dash: boolean }[] = [];
|
|
126
|
+
HEREDOC_OPEN.lastIndex = 0;
|
|
127
|
+
let m: RegExpExecArray | null;
|
|
128
|
+
while ((m = HEREDOC_OPEN.exec(line)) !== null) {
|
|
129
|
+
delims.push({ name: m[3], dash: m[1] === "-" });
|
|
130
|
+
}
|
|
131
|
+
for (const d of delims) {
|
|
132
|
+
while (i < lines.length) {
|
|
133
|
+
const body = lines[i];
|
|
134
|
+
// `<<-` strips leading TABS from the body and the closing delimiter.
|
|
135
|
+
const probe = d.dash ? body.replace(/^\t+/, "") : body;
|
|
136
|
+
i++;
|
|
137
|
+
if (probe === d.name) break; // closing delimiter line — drop it, stop
|
|
138
|
+
// body line: dropped (not pushed to out)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return out.join("\n");
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function tokenize(cmd: string): Tok[] {
|
|
146
|
+
const out: Tok[] = [];
|
|
147
|
+
let cur = "";
|
|
148
|
+
let hasContent = false;
|
|
149
|
+
let quote: string | null = null;
|
|
150
|
+
const pushCur = (): void => {
|
|
151
|
+
if (hasContent) out.push({ value: cur, op: false });
|
|
152
|
+
cur = "";
|
|
153
|
+
hasContent = false;
|
|
154
|
+
};
|
|
155
|
+
const pushOp = (v: string): void => {
|
|
156
|
+
pushCur();
|
|
157
|
+
out.push({ value: v, op: true });
|
|
158
|
+
};
|
|
159
|
+
for (let i = 0; i < cmd.length; i++) {
|
|
160
|
+
const c = cmd[i];
|
|
161
|
+
if (quote) {
|
|
162
|
+
if (c === quote) {
|
|
163
|
+
quote = null;
|
|
164
|
+
} else if (quote === '"' && c === "\\" && i + 1 < cmd.length) {
|
|
165
|
+
cur += cmd[++i];
|
|
166
|
+
hasContent = true;
|
|
167
|
+
} else {
|
|
168
|
+
cur += c;
|
|
169
|
+
hasContent = true;
|
|
170
|
+
}
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (c === "'" || c === '"') {
|
|
174
|
+
quote = c;
|
|
175
|
+
hasContent = true; // an empty "" is still a token
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (c === "\\" && i + 1 < cmd.length) {
|
|
179
|
+
cur += cmd[++i];
|
|
180
|
+
hasContent = true;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (c === "&" && cmd[i + 1] === "&") {
|
|
184
|
+
pushOp("&&");
|
|
185
|
+
i++;
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (c === "|" && cmd[i + 1] === "|") {
|
|
189
|
+
pushOp("||");
|
|
190
|
+
i++;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (c === "&" || c === "|" || c === ";" || c === "\n" || c === "(" || c === ")" || c === "`") {
|
|
194
|
+
pushOp(c);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (c === " " || c === "\t" || c === "\r") {
|
|
198
|
+
pushCur();
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
cur += c;
|
|
202
|
+
hasContent = true;
|
|
203
|
+
}
|
|
204
|
+
pushCur();
|
|
205
|
+
return out;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function baseName(tok: string): string {
|
|
209
|
+
const parts = tok.split("/");
|
|
210
|
+
return parts[parts.length - 1] ?? tok;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const ENV_ASSIGN = /^[A-Za-z_][A-Za-z0-9_]*=/;
|
|
214
|
+
|
|
215
|
+
/** Return the argv (tokens after the binary) of every `crtr`/`crouter`
|
|
216
|
+
* invocation that sits in command position (start, after a shell operator, or
|
|
217
|
+
* after env-assignments / a command substitution opener). */
|
|
218
|
+
function findCrtrInvocations(tokens: Tok[]): string[][] {
|
|
219
|
+
const invs: string[][] = [];
|
|
220
|
+
let cmdPos = true;
|
|
221
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
222
|
+
const t = tokens[i];
|
|
223
|
+
if (t.op) {
|
|
224
|
+
cmdPos = true; // every operator (incl. `(`, `)`, backtick) opens command position
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (!cmdPos) continue;
|
|
228
|
+
if (ENV_ASSIGN.test(t.value)) continue; // env prefix — stay in command position
|
|
229
|
+
const base = baseName(t.value);
|
|
230
|
+
if (base === "crtr" || base === "crouter") {
|
|
231
|
+
const args: string[] = [];
|
|
232
|
+
let j = i + 1;
|
|
233
|
+
for (; j < tokens.length && !tokens[j].op; j++) args.push(tokens[j].value);
|
|
234
|
+
invs.push(args);
|
|
235
|
+
i = j - 1;
|
|
236
|
+
}
|
|
237
|
+
cmdPos = false; // consumed a command word
|
|
238
|
+
}
|
|
239
|
+
return invs;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
// Gate logic.
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
|
|
246
|
+
type InvKind = { kind: "help-leaf" | "exec-leaf" | "other"; path: string };
|
|
247
|
+
|
|
248
|
+
function evaluate(args: string[]): InvKind {
|
|
249
|
+
// `--json` is a crtr global stripped before its own walk; mirror that.
|
|
250
|
+
const toks = args.filter((a) => a !== "--json");
|
|
251
|
+
const { node, path, remaining } = walk!(crtrRoot, toks);
|
|
252
|
+
const help = remaining.some((t) => t === "-h" || t === "--help");
|
|
253
|
+
const key = path.join(" ");
|
|
254
|
+
if (node.kind === "leaf") {
|
|
255
|
+
// A leaf with no declared params has no input contract to read — there is
|
|
256
|
+
// nothing -h would teach beyond the name. Don't gate it.
|
|
257
|
+
const hasParams = (node.help?.params?.length ?? 0) > 0;
|
|
258
|
+
if (!hasParams) return { kind: "other", path: key };
|
|
259
|
+
return { kind: help ? "help-leaf" : "exec-leaf", path: key };
|
|
260
|
+
}
|
|
261
|
+
return { kind: "other", path: key };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** Evaluate one bash command. Mutates `blessed` (commits help-read blessings)
|
|
265
|
+
* ONLY when the command is allowed to run; a blocked command commits nothing
|
|
266
|
+
* (it never executes, so its help never prints) — except the offending path
|
|
267
|
+
* itself when BLESS_ON_BLOCK is set. */
|
|
268
|
+
export function processCommand(command: string, blessed: Set<string>): { block: false } | { block: true; path: string } {
|
|
269
|
+
const invs = findCrtrInvocations(tokenize(stripHeredocs(command)));
|
|
270
|
+
const localBless: string[] = [];
|
|
271
|
+
for (const args of invs) {
|
|
272
|
+
const r = evaluate(args);
|
|
273
|
+
if (r.kind === "help-leaf") {
|
|
274
|
+
localBless.push(r.path);
|
|
275
|
+
} else if (r.kind === "exec-leaf") {
|
|
276
|
+
if (!blessed.has(r.path) && !localBless.includes(r.path)) {
|
|
277
|
+
if (BLESS_ON_BLOCK) blessed.add(r.path);
|
|
278
|
+
return { block: true, path: r.path };
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
for (const p of localBless) blessed.add(p);
|
|
283
|
+
return { block: false };
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
async function captureHelp(pathKey: string): Promise<string> {
|
|
287
|
+
const parts = pathKey.split(" ").filter(Boolean);
|
|
288
|
+
try {
|
|
289
|
+
const { stdout } = await exec("crtr", [...parts, "-h"], { maxBuffer: 8 * 1024 * 1024, timeout: 10_000 });
|
|
290
|
+
return stdout.trim();
|
|
291
|
+
} catch (err) {
|
|
292
|
+
const out = (err as { stdout?: string })?.stdout;
|
|
293
|
+
return (out ?? "").trim() || `(could not capture \`crtr ${parts.join(" ")} -h\`)`;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** A blocked command is discarded IN FULL — pi executes NONE of it. When that
|
|
298
|
+
* same command also built the body (a heredoc, or output redirected to a file),
|
|
299
|
+
* a naive retry of ONLY the crtr call reads STALE/missing state. This is issue
|
|
300
|
+
* #5: `cat > /tmp/f <<EOF…EOF; crtr push final "$(cat /tmp/f)"` was blocked, the
|
|
301
|
+
* heredoc never wrote /tmp/f, and the retry `push final < /tmp/f` then published
|
|
302
|
+
* a days-old report a DIFFERENT node had left in that shared path. So the block
|
|
303
|
+
* reason MUST steer a re-issue of the WHOLE command and call out the discarded
|
|
304
|
+
* write — never let the agent believe only the crtr call needs re-issuing. */
|
|
305
|
+
function hasDiscardedWrite(command: string): boolean {
|
|
306
|
+
HEREDOC_OPEN.lastIndex = 0;
|
|
307
|
+
if (HEREDOC_OPEN.test(command)) return true;
|
|
308
|
+
// An output redirect to a FILE (`> f` / `>> f`), ignoring fd-dup forms
|
|
309
|
+
// (`>&2`, `2>&1`) that write no standalone file a retry would read back.
|
|
310
|
+
return /(?:^|\s)\d?>>?\s*(?![&])\S/.test(stripHeredocs(command));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export function buildReason(pathKey: string, help: string, command: string): string {
|
|
314
|
+
const cmd = `crtr ${pathKey}`;
|
|
315
|
+
const helpBlock = help.length > HELP_MAX ? `${help.slice(0, HELP_MAX)}\n…(truncated)` : help;
|
|
316
|
+
const discardLine = hasDiscardedWrite(command)
|
|
317
|
+
? "Your ENTIRE bash command was discarded before anything ran — the heredoc/redirect (`<<`, `cat >`, `>`, `>>`) that built the body did NOT execute and its output was NEVER written. Re-issue the WHOLE command (the setup AND the crtr call together), not just the crtr call — any file or `$(…)` the crtr call reads is now stale or missing, so re-issuing the crtr call alone would publish the wrong data."
|
|
318
|
+
: "Your ENTIRE bash command was discarded — nothing in it ran. Re-issue the WHOLE command, not just the crtr call.";
|
|
319
|
+
const next = BLESS_ON_BLOCK
|
|
320
|
+
? `The schema is shown below. ${discardLine} Re-issue the SAME command as-is, or adjust it based on the schema below — it runs on the second attempt.`
|
|
321
|
+
: `Run \`${cmd} -h\` yourself, read the schema, then re-issue your whole command. ${discardLine}`;
|
|
322
|
+
return [
|
|
323
|
+
`crtr help-gate: blocked \`${cmd}\`.`,
|
|
324
|
+
``,
|
|
325
|
+
`You have not run \`${cmd} -h\` in this pi session. Policy: read a crtr command's contract before invoking it — never call a method blindly.`,
|
|
326
|
+
``,
|
|
327
|
+
`Call a command with -h before trying to use it. ${next}`,
|
|
328
|
+
``,
|
|
329
|
+
`Output of \`${cmd} -h\`:`,
|
|
330
|
+
``,
|
|
331
|
+
helpBlock,
|
|
332
|
+
].join("\n");
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// ---------------------------------------------------------------------------
|
|
336
|
+
// Wiring.
|
|
337
|
+
// ---------------------------------------------------------------------------
|
|
338
|
+
|
|
339
|
+
export default async function (pi: ExtensionAPI) {
|
|
340
|
+
const ready = await loadCrtr();
|
|
341
|
+
const blessed = new Set<string>();
|
|
342
|
+
let warned = false;
|
|
343
|
+
|
|
344
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
345
|
+
if (!ready) {
|
|
346
|
+
if (!warned) {
|
|
347
|
+
ctx.ui.notify("crtr-help-gate: crtr dist not found — gate disabled.", "warn");
|
|
348
|
+
warned = true;
|
|
349
|
+
}
|
|
350
|
+
ctx.ui.setStatus("crtr-gate", "crtr-gate off");
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
// Rebuild "help seen" from this session's own bash history so the gate
|
|
354
|
+
// survives /reload, /resume, /fork.
|
|
355
|
+
blessed.clear();
|
|
356
|
+
try {
|
|
357
|
+
for (const entry of ctx.sessionManager.getEntries() as Array<{ message?: unknown }>) {
|
|
358
|
+
const msg = entry.message as { role?: string; content?: unknown } | undefined;
|
|
359
|
+
if (!msg || msg.role !== "assistant" || !Array.isArray(msg.content)) continue;
|
|
360
|
+
for (const part of msg.content as Array<Record<string, unknown>>) {
|
|
361
|
+
if (part?.type === "toolCall" && part?.name === "bash") {
|
|
362
|
+
const command = (part.arguments as { command?: unknown } | undefined)?.command;
|
|
363
|
+
if (typeof command === "string") processCommand(command, blessed);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
} catch {
|
|
368
|
+
/* best-effort replay */
|
|
369
|
+
}
|
|
370
|
+
ctx.ui.setStatus("crtr-gate", `crtr-gate: ${blessed.size} helped`);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
pi.on("tool_call", async (event) => {
|
|
374
|
+
if (!ready) return;
|
|
375
|
+
if ((event.toolName ?? "").toLowerCase() !== "bash") return;
|
|
376
|
+
const command = (event.input as { command?: unknown } | undefined)?.command;
|
|
377
|
+
if (typeof command !== "string") return;
|
|
378
|
+
if (!command.includes("crtr") && !command.includes("crouter")) return;
|
|
379
|
+
|
|
380
|
+
const res = processCommand(command, blessed);
|
|
381
|
+
if (!res.block) return;
|
|
382
|
+
const help = await captureHelp(res.path);
|
|
383
|
+
return { block: true, reason: buildReason(res.path, help, command) };
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
// Visibility / escape hatch.
|
|
387
|
+
pi.registerCommand("crtr-gate", {
|
|
388
|
+
description: "crtr help-gate: show or reset which crtr commands have been -h'd this session",
|
|
389
|
+
handler: async (args, ctx) => {
|
|
390
|
+
const arg = (args ?? "").trim();
|
|
391
|
+
if (!ready) {
|
|
392
|
+
ctx.ui.notify("crtr-help-gate is disabled (crtr dist not found).", "warn");
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
if (arg === "reset") {
|
|
396
|
+
blessed.clear();
|
|
397
|
+
ctx.ui.setStatus("crtr-gate", "crtr-gate: 0 helped");
|
|
398
|
+
ctx.ui.notify("crtr-help-gate: cleared. All crtr commands now require -h again.", "info");
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const list = [...blessed].sort();
|
|
402
|
+
ctx.ui.notify(
|
|
403
|
+
list.length ? `crtr commands -h'd this session:\n ${list.join("\n ")}` : "No crtr commands -h'd yet this session.",
|
|
404
|
+
"info",
|
|
405
|
+
);
|
|
406
|
+
},
|
|
407
|
+
});
|
|
408
|
+
}
|