@crouton-kit/crouter 0.3.33 → 0.3.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/build-root.js +3 -6
- package/dist/builtin-memory/crouter-development/marketplaces.md +6 -6
- package/dist/builtin-memory/crouter-development/plugins.md +13 -13
- package/dist/builtin-memory/internal/examples/imessage-assistant.md +3 -3
- package/dist/builtin-memory/internal/nodes-and-canvas.md +4 -4
- package/dist/builtin-personas/developer/PERSONA.md +1 -1
- package/dist/builtin-personas/orchestration-kernel.md +1 -1
- package/dist/builtin-personas/waiting.md +1 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-help-gate.test.ts +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +663 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +52 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +418 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crouter-help.ts +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/filters.json +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/index.ts +174 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-help-gate.ts +408 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +442 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +119 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/nested-context.ts +327 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +574 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +260 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/strip-skills-docs.ts +40 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/sysprompt-window.ts +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.js +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.ts +479 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/LICENSE +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/README.md +172 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/bin.mjs +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/errors.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/index.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/log.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/util.js +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/visit.js +233 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/index.js +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/package.json +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.mjs +201 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.js +224 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.js +337 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.js +178 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.js +62 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.d.ts +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/options.d.ts +350 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.js +112 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.js +980 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.js +107 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.js +99 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.js +134 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.d.ts +16 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.js +28 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.d.ts +102 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.js +236 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/package.json +97 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/util.js +2 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package-lock.json +3385 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/package.json +25 -0
- package/dist/builtin-pi-packages/pi-mode-switch/README.md +64 -0
- package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +40 -0
- package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +422 -0
- package/dist/builtin-pi-packages/pi-mode-switch/package.json +13 -0
- package/dist/clients/attach/__tests__/crtr-output-coverage.test.js +55 -0
- package/dist/clients/attach/__tests__/crtr-output-render.test.js +2340 -0
- package/dist/clients/attach/attach-cmd.js +826 -754
- package/dist/clients/attach/auth-pickers.js +2 -2
- package/dist/clients/attach/canvas-panels.js +1 -1
- package/dist/clients/attach/chat-view.d.ts +3 -2
- package/dist/clients/attach/chat-view.js +30 -10
- package/dist/clients/attach/clipboard-image.js +1 -1
- package/dist/clients/attach/clipboard-text.js +1 -1
- package/dist/clients/attach/config-load.js +1 -1
- package/dist/clients/attach/crtr-output-render.d.ts +48 -0
- package/dist/clients/attach/crtr-output-render.js +646 -0
- package/dist/clients/attach/extension-dialogs.js +1 -1
- package/dist/clients/attach/graph-overlay.js +3 -3
- package/dist/clients/attach/input-controller.js +1 -1
- package/dist/clients/attach/pickers.js +1 -1
- package/dist/clients/attach/slash-commands.js +5 -6
- package/dist/clients/attach/titled-editor.d.ts +4 -0
- package/dist/clients/attach/titled-editor.js +13 -1
- package/dist/clients/attach/view-socket.js +1 -1
- package/dist/clients/web/__tests__/source-cache.test.js +5 -5
- package/dist/clients/web/server.js +29 -5
- package/dist/clients/web/source-cache.js +3 -3
- package/dist/clients/web/web-cmd.js +7 -7
- package/dist/commands/canvas-issue.js +1 -1
- package/dist/commands/canvas-prune.js +24 -2
- package/dist/commands/canvas-snapshot.js +3 -0
- package/dist/commands/canvas-tmux-spread.js +3 -3
- package/dist/commands/human.js +1 -1
- package/dist/commands/memory/lint.js +15 -8
- package/dist/commands/memory/origin.d.ts +1 -0
- package/dist/commands/memory/origin.js +88 -0
- package/dist/commands/memory/shared.d.ts +8 -0
- package/dist/commands/memory/shared.js +22 -1
- package/dist/commands/memory/write.js +17 -12
- package/dist/commands/memory.js +4 -3
- package/dist/commands/node-context.js +4 -4
- package/dist/commands/node-snapshot.js +4 -1
- package/dist/commands/node.d.ts +2 -2
- package/dist/commands/node.js +814 -606
- package/dist/commands/pkg/market-inspect.d.ts +2 -1
- package/dist/commands/pkg/market-inspect.js +14 -32
- package/dist/commands/pkg/market-manage.d.ts +3 -1
- package/dist/commands/pkg/market-manage.js +58 -154
- package/dist/commands/pkg/market.js +7 -7
- package/dist/commands/pkg/plugin-inspect.d.ts +2 -1
- package/dist/commands/pkg/plugin-inspect.js +8 -24
- package/dist/commands/pkg/plugin-manage.d.ts +5 -1
- package/dist/commands/pkg/plugin-manage.js +245 -171
- package/dist/commands/pkg/plugin.js +6 -6
- package/dist/commands/pkg.js +5 -5
- package/dist/commands/revive.js +5 -3
- package/dist/commands/search/answer.js +1 -1
- package/dist/commands/search/contents.js +1 -1
- package/dist/commands/search/web.js +2 -2
- package/dist/commands/search.js +1 -1
- package/dist/commands/surface.d.ts +2 -0
- package/dist/commands/surface.js +43 -0
- package/dist/commands/sys/promptstudio.js +1 -1
- package/dist/commands/sys/settings.js +2 -2
- package/dist/commands/sys/setup-core.d.ts +88 -0
- package/dist/commands/sys/setup-core.js +352 -0
- package/dist/commands/sys/setup.d.ts +2 -0
- package/dist/commands/sys/setup.js +516 -0
- package/dist/commands/sys/sysprompt.js +3 -0
- package/dist/commands/sys.js +3 -2
- package/dist/commands/view-cycle.js +5 -5
- package/dist/commands/view-list.js +3 -3
- package/dist/commands/view-new.js +5 -5
- package/dist/commands/view-pick.js +6 -6
- package/dist/commands/view-run.js +14 -14
- package/dist/commands/view.js +3 -3
- package/dist/commands/workspace.js +10 -10
- package/dist/core/__tests__/boot.test.js +140 -0
- package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -27
- package/dist/core/__tests__/daemon-boot.test.js +22 -0
- package/dist/core/__tests__/fixtures/fake-engine.js +1 -1
- package/dist/core/__tests__/full/broker-attach-limits.test.js +1 -1
- package/dist/core/__tests__/full/broker-attach-stream.test.js +1 -1
- package/dist/core/__tests__/full/broker-crash-teardown.test.js +10 -5
- package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +1 -1
- package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +1 -1
- package/dist/core/__tests__/full/broker-pane-resolution.test.js +1 -1
- package/dist/core/__tests__/full/cascade-close.test.js +31 -18
- package/dist/core/__tests__/full/detach-focus.test.js +2 -2
- package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
- package/dist/core/__tests__/helpers/harness.js +1 -1
- package/dist/core/__tests__/live-mutation-verbs.test.js +10 -10
- package/dist/core/__tests__/live-mutation.test.js +8 -8
- package/dist/core/__tests__/migration.test.js +124 -0
- package/dist/core/__tests__/on-read-dedup-resume.test.js +40 -0
- package/dist/core/__tests__/preview-registry-sync.test.js +36 -0
- package/dist/core/__tests__/prune-to-limit.test.js +91 -0
- package/dist/core/__tests__/revive.test.js +64 -21
- package/dist/core/__tests__/trigger-migration.test.js +48 -0
- package/dist/core/__tests__/wake-bearings.test.js +23 -21
- package/dist/core/__tests__/wake-origin.test.js +36 -33
- package/dist/core/canvas/boot.d.ts +48 -0
- package/dist/core/canvas/boot.js +157 -0
- package/dist/core/canvas/canvas.d.ts +27 -1
- package/dist/core/canvas/canvas.js +86 -5
- package/dist/core/canvas/db.js +86 -1
- package/dist/core/canvas/index.d.ts +1 -1
- package/dist/core/canvas/index.js +1 -1
- package/dist/core/canvas/nav-model.js +1 -1
- package/dist/core/canvas/pid.d.ts +6 -0
- package/dist/core/canvas/pid.js +13 -0
- package/dist/core/canvas/triggers.d.ts +108 -0
- package/dist/core/canvas/triggers.js +320 -0
- package/dist/core/canvas/types.d.ts +128 -46
- package/dist/core/command.js +13 -4
- package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
- package/dist/core/hearth/config.d.ts +1 -0
- package/dist/core/hearth/config.js +36 -0
- package/dist/core/hearth/guest-env.d.ts +7 -0
- package/dist/core/hearth/guest-env.js +17 -1
- package/dist/core/hearth/model-auth-guest.d.ts +8 -0
- package/dist/core/hearth/model-auth-guest.js +435 -0
- package/dist/core/hearth/provider.d.ts +13 -6
- package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +2 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.js +127 -19
- package/dist/core/hearth/providers/blaxel-home.d.ts +8 -4
- package/dist/core/hearth/providers/blaxel-home.js +85 -75
- package/dist/core/hearth/providers/blaxel.d.ts +5 -0
- package/dist/core/hearth/providers/blaxel.js +86 -12
- package/dist/core/hearth/providers/types.d.ts +6 -1
- package/dist/core/hearth/registry.js +2 -1
- package/dist/core/hearth/types.d.ts +35 -0
- package/dist/core/help.d.ts +16 -0
- package/dist/core/help.js +2 -0
- package/dist/core/memory-resolver.d.ts +8 -8
- package/dist/core/memory-resolver.js +58 -26
- package/dist/core/preview-registry.d.ts +25 -0
- package/dist/core/preview-registry.js +2047 -0
- package/dist/core/resolver.d.ts +1 -0
- package/dist/core/resolver.js +23 -16
- package/dist/core/runtime/bearings.d.ts +11 -10
- package/dist/core/runtime/bearings.js +8 -8
- package/dist/core/runtime/broker-protocol.d.ts +2 -2
- package/dist/core/runtime/broker-protocol.js +2 -2
- package/dist/core/runtime/close.js +2 -2
- package/dist/core/runtime/kickoff.js +1 -1
- package/dist/core/runtime/launch.d.ts +9 -3
- package/dist/core/runtime/launch.js +17 -9
- package/dist/core/runtime/lifecycle.js +7 -7
- package/dist/core/runtime/model-swap.js +1 -1
- package/dist/core/runtime/placement.d.ts +5 -5
- package/dist/core/runtime/placement.js +10 -10
- package/dist/core/runtime/recycle.js +7 -7
- package/dist/core/runtime/reset.d.ts +1 -1
- package/dist/core/runtime/reset.js +3 -3
- package/dist/core/runtime/revive-all.d.ts +5 -2
- package/dist/core/runtime/revive-all.js +5 -2
- package/dist/core/runtime/revive.d.ts +15 -8
- package/dist/core/runtime/revive.js +52 -16
- package/dist/core/runtime/spawn.d.ts +1 -1
- package/dist/core/runtime/spawn.js +7 -7
- package/dist/core/runtime/stop-guard.js +5 -5
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux.d.ts +1 -1
- package/dist/core/runtime/tmux.js +4 -4
- package/dist/core/scope.d.ts +9 -0
- package/dist/core/scope.js +37 -15
- package/dist/core/substrate/on-read.js +23 -21
- package/dist/core/substrate/render.js +3 -3
- package/dist/core/view/loader.js +2 -2
- package/dist/core/wake.d.ts +2 -2
- package/dist/core/wake.js +7 -7
- package/dist/daemon/__tests__/predicate-eval.test.js +109 -0
- package/dist/daemon/crtrd.js +222 -103
- package/dist/daemon/predicate-eval.d.ts +52 -0
- package/dist/daemon/predicate-eval.js +248 -0
- package/dist/hearth/control-plane/__tests__/node-message.test.js +60 -0
- package/dist/hearth/control-plane/__tests__/rate-limit-recurrence.test.js +49 -0
- package/dist/hearth/control-plane/__tests__/relay-security.test.js +314 -0
- package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
- package/dist/hearth/control-plane/__tests__/webhook-ingress.test.js +167 -0
- package/dist/hearth/control-plane/config.d.ts +21 -0
- package/dist/hearth/control-plane/config.js +77 -0
- package/dist/hearth/control-plane/db.d.ts +30 -0
- package/dist/hearth/control-plane/db.js +534 -0
- package/dist/hearth/control-plane/ingress/rate-limit.d.ts +24 -0
- package/dist/hearth/control-plane/ingress/rate-limit.js +100 -0
- package/dist/hearth/control-plane/ingress/route-store.d.ts +31 -0
- package/dist/hearth/control-plane/ingress/route-store.js +61 -0
- package/dist/hearth/control-plane/ingress/webhook-delivery-store.d.ts +41 -0
- package/dist/hearth/control-plane/ingress/webhook-delivery-store.js +69 -0
- package/dist/hearth/control-plane/ingress/webhook-route.d.ts +55 -0
- package/dist/hearth/control-plane/ingress/webhook-route.js +285 -0
- package/dist/hearth/control-plane/main.js +88 -0
- package/dist/hearth/control-plane/node-message.d.ts +31 -0
- package/dist/hearth/control-plane/node-message.js +98 -0
- package/dist/hearth/control-plane/register.d.ts +15 -0
- package/dist/hearth/control-plane/register.js +34 -0
- package/dist/hearth/control-plane/registry.d.ts +17 -0
- package/dist/hearth/control-plane/registry.js +161 -0
- package/dist/hearth/control-plane/relay.d.ts +40 -0
- package/dist/hearth/control-plane/relay.js +642 -0
- package/dist/hearth/control-plane/scheduler/fire-store.d.ts +36 -0
- package/dist/hearth/control-plane/scheduler/fire-store.js +73 -0
- package/dist/hearth/control-plane/scheduler/recurrence.d.ts +7 -0
- package/dist/hearth/control-plane/scheduler/recurrence.js +58 -0
- package/dist/hearth/control-plane/scheduler/scan-loop.d.ts +38 -0
- package/dist/hearth/control-plane/scheduler/scan-loop.js +138 -0
- package/dist/hearth/control-plane/scheduler/schedule-store.d.ts +32 -0
- package/dist/hearth/control-plane/scheduler/schedule-store.js +66 -0
- package/dist/hearth/control-plane/secrets.d.ts +17 -0
- package/dist/hearth/control-plane/secrets.js +113 -0
- package/dist/hearth/control-plane/server.d.ts +27 -0
- package/dist/hearth/control-plane/server.js +346 -0
- package/dist/hearth/control-plane/session.d.ts +68 -0
- package/dist/hearth/control-plane/session.js +273 -0
- package/dist/hearth/control-plane/triggers/acl.d.ts +14 -0
- package/dist/hearth/control-plane/triggers/acl.js +52 -0
- package/dist/hearth/control-plane/triggers/audit-store.d.ts +38 -0
- package/dist/hearth/control-plane/triggers/audit-store.js +79 -0
- package/dist/hearth/control-plane/triggers/deliver.d.ts +43 -0
- package/dist/hearth/control-plane/triggers/deliver.js +76 -0
- package/dist/hearth/control-plane/triggers/envelope.d.ts +29 -0
- package/dist/hearth/control-plane/triggers/envelope.js +38 -0
- package/dist/hearth/control-plane/types.d.ts +66 -0
- package/dist/hearth/control-plane/wake.d.ts +80 -0
- package/dist/hearth/control-plane/wake.js +312 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +2 -2
- package/dist/hearth/wake-proxy/home.d.ts +2 -8
- package/dist/hearth/wake-proxy/home.js +48 -12
- package/dist/pi-extensions/canvas-doc-substrate.js +28 -2
- package/dist/pi-extensions/canvas-nav.js +1 -1
- package/dist/prompts/view.js +7 -8
- package/dist/types.js +4 -4
- package/dist/web-client/assets/{index-D36PNBj4.js → index-BRKxe-hy.js} +2 -2
- package/dist/web-client/index.html +1 -1
- package/package.json +12 -8
- package/scripts/postinstall.mjs +8 -0
- package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
- package/dist/clients/attach/__tests__/autocomplete-and-bash-mode.test.js +0 -96
- package/dist/clients/attach/__tests__/bash-bang-routing.test.js +0 -58
- package/dist/clients/attach/__tests__/bundle-pi-tui-dedup.test.js +0 -56
- package/dist/clients/attach/__tests__/clipboard-image.test.js +0 -76
- package/dist/clients/attach/__tests__/editor-newline.test.js +0 -82
- package/dist/clients/attach/__tests__/git-info.test.js +0 -31
- package/dist/clients/attach/__tests__/onrequest-wired.test.js +0 -20
- package/dist/clients/attach/__tests__/reconnect-giveup.test.js +0 -30
- package/dist/clients/attach/__tests__/slash-quit-copy.test.js +0 -42
- package/dist/clients/attach/__tests__/titled-editor.test.js +0 -60
- package/dist/commands/memory/__tests__/lint-schema.test.js +0 -52
- package/dist/core/__tests__/argv-parser.test.js +0 -217
- package/dist/core/__tests__/artifact-paths.test.js +0 -44
- package/dist/core/__tests__/draw-style.test.js +0 -258
- package/dist/core/__tests__/editor-label.test.js +0 -26
- package/dist/core/__tests__/fault-marker.test.js +0 -112
- package/dist/core/__tests__/fault-retry-rewind.test.d.ts +0 -1
- package/dist/core/__tests__/fault-retry-rewind.test.js +0 -123
- package/dist/core/__tests__/frame-decoder-perf.test.d.ts +0 -1
- package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
- package/dist/core/__tests__/keystone.test.d.ts +0 -1
- package/dist/core/__tests__/keystone.test.js +0 -185
- package/dist/core/__tests__/listing-completeness.test.d.ts +0 -1
- package/dist/core/__tests__/listing-completeness.test.js +0 -31
- package/dist/core/__tests__/memory-resolver.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver.test.js +0 -119
- package/dist/core/__tests__/memory.test.d.ts +0 -1
- package/dist/core/__tests__/memory.test.js +0 -60
- package/dist/core/__tests__/model-ladders.test.d.ts +0 -1
- package/dist/core/__tests__/model-ladders.test.js +0 -160
- package/dist/core/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/__tests__/node-env.test.js +0 -26
- package/dist/core/__tests__/pane-column.test.d.ts +0 -1
- package/dist/core/__tests__/pane-column.test.js +0 -153
- package/dist/core/__tests__/persona-compose.test.d.ts +0 -1
- package/dist/core/__tests__/persona-compose.test.js +0 -53
- package/dist/core/__tests__/persona-subkind.test.d.ts +0 -1
- package/dist/core/__tests__/persona-subkind.test.js +0 -65
- package/dist/core/__tests__/persona.test.d.ts +0 -1
- package/dist/core/__tests__/persona.test.js +0 -107
- package/dist/core/__tests__/unknown-path.test.d.ts +0 -1
- package/dist/core/__tests__/unknown-path.test.js +0 -58
- package/dist/core/canvas/wakeups.d.ts +0 -76
- package/dist/core/canvas/wakeups.js +0 -185
- package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.d.ts +0 -1
- package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.js +0 -455
- /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{autocomplete-and-bash-mode.test.d.ts → crtr-output-render.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/bash-bang-routing.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/bundle-pi-tui-dedup.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/clipboard-image.test.d.ts → core/__tests__/preview-registry-sync.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/editor-newline.test.d.ts → core/__tests__/prune-to-limit.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/git-info.test.d.ts → core/__tests__/trigger-migration.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
- /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
- /package/dist/{core/__tests__/argv-parser.test.d.ts → hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts} +0 -0
- /package/dist/{core/__tests__/artifact-paths.test.d.ts → hearth/control-plane/__tests__/trigger-delivery.test.d.ts} +0 -0
- /package/dist/{core/__tests__/draw-style.test.d.ts → hearth/control-plane/__tests__/webhook-ingress.test.d.ts} +0 -0
- /package/dist/{core/__tests__/editor-label.test.d.ts → hearth/control-plane/main.d.ts} +0 -0
- /package/dist/{core/__tests__/fault-marker.test.d.ts → hearth/control-plane/types.js} +0 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
// triggers.ts — the TRIGGERS table data-access layer (canvas.db, migration v9).
|
|
2
|
+
//
|
|
3
|
+
// One-module-per-table (the focuses.ts precedent, and the now-deleted
|
|
4
|
+
// wakeups.ts before it): ALL SQL that touches the `triggers` table lives HERE
|
|
5
|
+
// and nowhere else. A TRIGGER is one durable row generalizing the old
|
|
6
|
+
// per-kind wakeup row: trigger → action. It
|
|
7
|
+
// decides WHEN to fire (trigger_type: at/every/when/until) and the row
|
|
8
|
+
// separately says WHAT enacts (action: msg/new) and HOW (action_mode:
|
|
9
|
+
// inbox_message/fresh_revive/deadline_message/node_birth). See the
|
|
10
|
+
// node-trigger-grammar spec for the full model.
|
|
11
|
+
//
|
|
12
|
+
// Two anchors, two reap rules, carried forward unchanged from the wakeups
|
|
13
|
+
// design:
|
|
14
|
+
// - node_id → the target AND the node-anchored cancel anchor; carries the
|
|
15
|
+
// `ON DELETE CASCADE` FK, so a pruned node's node-anchored triggers are
|
|
16
|
+
// reaped for free in pruneNodes' DELETE FROM nodes. NULL = canvas-detached
|
|
17
|
+
// (a deferred/recurring node_birth).
|
|
18
|
+
// - owner_id → the armer; a PLAIN indexed column with NO FK, so a crashed-
|
|
19
|
+
// then-pruned armer's detached trigger is NOT cascade-dropped. Reaped only
|
|
20
|
+
// by the explicit cancelTriggersFor DELETE on deliberate close.
|
|
21
|
+
//
|
|
22
|
+
// Each function is a single-statement query mirroring the canvas.ts atomic-
|
|
23
|
+
// setter pattern — no read-modify-write, serialized by WAL. The data-access
|
|
24
|
+
// layer OWNS payload serialization: armTrigger JSON.stringifies the typed
|
|
25
|
+
// per-action_mode union on write; dueClockTriggers/listTriggers/duePredicate-
|
|
26
|
+
// Triggers JSON.parse it back on read, so callers consume `payload.body` /
|
|
27
|
+
// `payload as SpawnChildOpts` directly.
|
|
28
|
+
//
|
|
29
|
+
// `trigger_id` is CALLER-SUPPLIED (the command surface mints the id): the
|
|
30
|
+
// canvas layer never imports newNodeId from runtime/nodes.ts — that would
|
|
31
|
+
// force a canvas → runtime → canvas import cycle.
|
|
32
|
+
//
|
|
33
|
+
// Predicate (`--when`) primitives below (duePredicateTriggers through
|
|
34
|
+
// resetPredicateLease) are DAO-only plumbing for Phase 3's daemon-owned
|
|
35
|
+
// evaluator — nothing in the current command surface or daemon arms or
|
|
36
|
+
// evaluates a `trigger_type='when'` row yet.
|
|
37
|
+
import { openDb } from './db.js';
|
|
38
|
+
import { killProcessGroup } from './pid.js';
|
|
39
|
+
/** A thrown integrity-backstop error from armTrigger. `code` is mapped by the
|
|
40
|
+
* command surface to a rendered error block — armTrigger carries integrity
|
|
41
|
+
* backstops only (empty body / recur-on-deadline / unknown action_mode);
|
|
42
|
+
* target-resolvability + recoverable-state + per-owner cap checks live in the
|
|
43
|
+
* surface, so a non-surface armer could insert a dangling trigger — every
|
|
44
|
+
* armer MUST route through the surface. */
|
|
45
|
+
export class TriggerArmError extends Error {
|
|
46
|
+
code;
|
|
47
|
+
constructor(code, message) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.code = code;
|
|
50
|
+
this.name = 'TriggerArmError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Hydrate a raw row into a Trigger, JSON.parsing `payload` back into the typed
|
|
54
|
+
* per-action_mode union (NULL column → null). */
|
|
55
|
+
function triggerFrom(r) {
|
|
56
|
+
const raw = r['payload'];
|
|
57
|
+
return {
|
|
58
|
+
trigger_id: r['trigger_id'],
|
|
59
|
+
owner_id: r['owner_id'],
|
|
60
|
+
node_id: r['node_id'] ?? null,
|
|
61
|
+
action: r['action'],
|
|
62
|
+
action_mode: r['action_mode'],
|
|
63
|
+
trigger_type: r['trigger_type'],
|
|
64
|
+
fire_at: r['fire_at'] ?? null,
|
|
65
|
+
recur: r['recur'] ?? null,
|
|
66
|
+
payload: raw == null ? null : JSON.parse(raw),
|
|
67
|
+
when_script: r['when_script'] ?? null,
|
|
68
|
+
eval_every: r['eval_every'] ?? null,
|
|
69
|
+
next_eval_at: r['next_eval_at'] ?? null,
|
|
70
|
+
timeout_at: r['timeout_at'] ?? null,
|
|
71
|
+
eval_state: r['eval_state'],
|
|
72
|
+
eval_started_at: r['eval_started_at'] ?? null,
|
|
73
|
+
eval_pid: r['eval_pid'] ?? null,
|
|
74
|
+
eval_lease_owner: r['eval_lease_owner'] ?? null,
|
|
75
|
+
last_eval_at: r['last_eval_at'] ?? null,
|
|
76
|
+
last_exit: r['last_exit'] ?? null,
|
|
77
|
+
last_stderr: r['last_stderr'] ?? null,
|
|
78
|
+
created: r['created'],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Writes — each a single-statement INSERT/UPDATE/DELETE.
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
/** INSERT one trigger row from the pinned spec, returning its (caller-supplied)
|
|
85
|
+
* `trigger_id`. JSON.stringifies the typed `payload` union into the TEXT
|
|
86
|
+
* column and stamps `created`.
|
|
87
|
+
*
|
|
88
|
+
* Deadline upsert (≤1 deadline per node): for `action_mode === 'deadline_message'`
|
|
89
|
+
* the node's existing deadline is canceled first, then the new one inserted —
|
|
90
|
+
* the partial unique index `idx_triggers_deadline` is the schema-level
|
|
91
|
+
* backstop.
|
|
92
|
+
*
|
|
93
|
+
* Integrity backstops (throw TriggerArmError):
|
|
94
|
+
* - empty/whitespace payload `body` for inbox_message/deadline_message → `empty_body`
|
|
95
|
+
* (a `trigger_type='when'` inbox_message may omit body entirely instead —
|
|
96
|
+
* that is the stdout-as-body case, not a violation).
|
|
97
|
+
* - non-NULL `recur` on a deadline_message → `deadline_cannot_recur`.
|
|
98
|
+
* - unknown `action_mode` → `bad_action_mode`. */
|
|
99
|
+
export function armTrigger(spec) {
|
|
100
|
+
const { action_mode } = spec;
|
|
101
|
+
if (action_mode !== 'inbox_message' &&
|
|
102
|
+
action_mode !== 'fresh_revive' &&
|
|
103
|
+
action_mode !== 'deadline_message' &&
|
|
104
|
+
action_mode !== 'node_birth') {
|
|
105
|
+
throw new TriggerArmError('bad_action_mode', `unknown trigger action_mode: ${String(action_mode)}`);
|
|
106
|
+
}
|
|
107
|
+
if (action_mode === 'inbox_message' || action_mode === 'deadline_message') {
|
|
108
|
+
const body = spec.payload?.body;
|
|
109
|
+
// A predicate (`trigger_type='when'`) inbox_message may omit body entirely:
|
|
110
|
+
// the daemon fills it from captured stdout when the predicate exits 0 (spec's
|
|
111
|
+
// stdout-as-body rule). Every other inbox_message/deadline_message row
|
|
112
|
+
// (now/clock/deadline) still requires a non-empty body — there is no other
|
|
113
|
+
// source to fill it from at fire time.
|
|
114
|
+
const bodyFromStdout = action_mode === 'inbox_message' && spec.trigger_type === 'when' && body === undefined;
|
|
115
|
+
if (!bodyFromStdout && (typeof body !== 'string' || body.trim() === '')) {
|
|
116
|
+
throw new TriggerArmError('empty_body', `a ${action_mode} trigger requires a non-empty payload body.`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (action_mode === 'deadline_message' && spec.recur != null) {
|
|
120
|
+
throw new TriggerArmError('deadline_cannot_recur', 'a deadline trigger cannot recur.');
|
|
121
|
+
}
|
|
122
|
+
if (action_mode === 'deadline_message' && spec.node_id != null) {
|
|
123
|
+
cancelDeadlinesFor(spec.node_id);
|
|
124
|
+
}
|
|
125
|
+
const payloadText = spec.payload == null ? null : JSON.stringify(spec.payload);
|
|
126
|
+
openDb()
|
|
127
|
+
.prepare(`INSERT INTO triggers (
|
|
128
|
+
trigger_id, owner_id, node_id, action, action_mode, trigger_type,
|
|
129
|
+
fire_at, recur, payload, when_script, eval_every, next_eval_at,
|
|
130
|
+
timeout_at, created
|
|
131
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
132
|
+
.run(spec.trigger_id, spec.owner_id, spec.node_id ?? null, spec.action, spec.action_mode, spec.trigger_type, spec.fire_at ?? null, spec.recur ?? null, payloadText, spec.when_script ?? null, spec.eval_every ?? null, spec.next_eval_at ?? null, spec.timeout_at ?? null, new Date().toISOString());
|
|
133
|
+
return spec.trigger_id;
|
|
134
|
+
}
|
|
135
|
+
/** UPDATE the next fire time — clock recurrence advancement (the daemon settles
|
|
136
|
+
* a recurring row to its next slot BEFORE enacting, crash-safe). */
|
|
137
|
+
export function advanceTrigger(trigger_id, nextFireIso) {
|
|
138
|
+
openDb().prepare('UPDATE triggers SET fire_at = ? WHERE trigger_id = ?').run(nextFireIso, trigger_id);
|
|
139
|
+
}
|
|
140
|
+
/** DELETE one trigger by id — one-shot consumption (the daemon settles a
|
|
141
|
+
* one-shot row BEFORE enacting, crash-safe). */
|
|
142
|
+
/** Deletes the row and reports whether it actually removed a LIVE one (vs a
|
|
143
|
+
* no-op on an already-gone trigger) — callers racing another consumer of the
|
|
144
|
+
* same trigger (e.g. predicate-eval.ts's close handler racing a wall-clock
|
|
145
|
+
* reaper's kill) use the return value to no-op instead of double-enacting. */
|
|
146
|
+
export function consumeTrigger(trigger_id) {
|
|
147
|
+
return openDb().prepare('DELETE FROM triggers WHERE trigger_id = ?').run(trigger_id).changes > 0;
|
|
148
|
+
}
|
|
149
|
+
/** Kill any in-flight predicate process group for rows about to be deleted —
|
|
150
|
+
* spec's "trigger cancellation always kills any in-flight predicate process
|
|
151
|
+
* group" (§Deterministic removal). Selects eval_state/eval_pid for the same
|
|
152
|
+
* WHERE clause the delete uses, signals any 'running' row's process group,
|
|
153
|
+
* then deletes. The single seam every cancel/reap path (explicit `node
|
|
154
|
+
* triggers cancel`, node close/reap via cancelTriggersFor, finalize via
|
|
155
|
+
* cancelSelfAlarms) shares, so none of them need their own kill logic. */
|
|
156
|
+
function reapInFlightThenDelete(whereSql, params) {
|
|
157
|
+
const db = openDb();
|
|
158
|
+
const rows = db
|
|
159
|
+
.prepare(`SELECT eval_state, eval_pid FROM triggers WHERE ${whereSql}`)
|
|
160
|
+
.all(...params);
|
|
161
|
+
for (const r of rows) {
|
|
162
|
+
if (r.eval_state === 'running' && r.eval_pid != null)
|
|
163
|
+
killProcessGroup(r.eval_pid);
|
|
164
|
+
}
|
|
165
|
+
db.prepare(`DELETE FROM triggers WHERE ${whereSql}`).run(...params);
|
|
166
|
+
}
|
|
167
|
+
/** DELETE one trigger by id — the explicit user/surface cancel. Idempotent:
|
|
168
|
+
* 0 rows ⇒ no error. Kills any in-flight predicate process group for this
|
|
169
|
+
* trigger before deleting. */
|
|
170
|
+
export function cancelTrigger(trigger_id) {
|
|
171
|
+
reapInFlightThenDelete('trigger_id = ?', [trigger_id]);
|
|
172
|
+
}
|
|
173
|
+
/** DELETE every trigger anchored to this node AND every detached trigger it
|
|
174
|
+
* ARMED — deliberate close/reap. Hooked at transition('cancel'). */
|
|
175
|
+
export function cancelTriggersFor(node_id) {
|
|
176
|
+
reapInFlightThenDelete('node_id = ? OR owner_id = ?', [node_id, node_id]);
|
|
177
|
+
}
|
|
178
|
+
/** DELETE this node's one-shot self-alarms (recur IS NULL); node-anchored
|
|
179
|
+
* recurring triggers SURVIVE — finalize is the instance finishing, not a
|
|
180
|
+
* teardown of standing schedules. Hooked at transition('finalize'). */
|
|
181
|
+
export function cancelSelfAlarms(node_id) {
|
|
182
|
+
reapInFlightThenDelete('node_id = ? AND recur IS NULL', [node_id]);
|
|
183
|
+
}
|
|
184
|
+
/** DELETE this node's pending deadline(s) — cancel-on-wake. Hooked at
|
|
185
|
+
* reviveNode, so the deadline always belongs to the dormancy left. */
|
|
186
|
+
export function cancelDeadlinesFor(node_id) {
|
|
187
|
+
openDb()
|
|
188
|
+
.prepare("DELETE FROM triggers WHERE node_id = ? AND action_mode = 'deadline_message'")
|
|
189
|
+
.run(node_id);
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// Reads — clock triggers.
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
/** The daemon's per-tick due query for CLOCK triggers only (`at`/`every`/
|
|
195
|
+
* `until` — predicate `when` triggers fire via next_eval_at, see
|
|
196
|
+
* duePredicateTriggers): every row whose fire_at has arrived, in fire_at
|
|
197
|
+
* order, with `payload` parsed into the typed union. Returns exactly ONE row
|
|
198
|
+
* per recurring trigger regardless of missed slots — coalescing is structural. */
|
|
199
|
+
export function dueClockTriggers(nowIso) {
|
|
200
|
+
return openDb()
|
|
201
|
+
.prepare(`SELECT * FROM triggers
|
|
202
|
+
WHERE trigger_type IN ('at', 'every', 'until') AND fire_at <= ?
|
|
203
|
+
ORDER BY fire_at`)
|
|
204
|
+
.all(nowIso).map(triggerFrom);
|
|
205
|
+
}
|
|
206
|
+
/** List triggers for a scope (node / owner / subtree / due / canvas), `payload`
|
|
207
|
+
* parsed as in dueClockTriggers. The subtree variant binds the id set with `?`
|
|
208
|
+
* placeholders (mirroring listNodes — the codebase's one safe dynamic-IN
|
|
209
|
+
* spot); ids are NEVER string-concatenated. The `due` scope is clock-only,
|
|
210
|
+
* matching dueClockTriggers' filter. */
|
|
211
|
+
export function listTriggers(scope) {
|
|
212
|
+
const db = openDb();
|
|
213
|
+
let rows;
|
|
214
|
+
if ('node' in scope) {
|
|
215
|
+
rows = db
|
|
216
|
+
.prepare('SELECT * FROM triggers WHERE node_id = ? ORDER BY fire_at')
|
|
217
|
+
.all(scope.node);
|
|
218
|
+
}
|
|
219
|
+
else if ('owner' in scope) {
|
|
220
|
+
rows = db
|
|
221
|
+
.prepare('SELECT * FROM triggers WHERE owner_id = ? ORDER BY fire_at')
|
|
222
|
+
.all(scope.owner);
|
|
223
|
+
}
|
|
224
|
+
else if ('subtree' in scope) {
|
|
225
|
+
if (scope.subtree.length === 0)
|
|
226
|
+
return [];
|
|
227
|
+
const placeholders = scope.subtree.map(() => '?').join(',');
|
|
228
|
+
rows = db
|
|
229
|
+
.prepare(`SELECT * FROM triggers WHERE node_id IN (${placeholders}) ORDER BY fire_at`)
|
|
230
|
+
.all(...scope.subtree);
|
|
231
|
+
}
|
|
232
|
+
else if ('due' in scope) {
|
|
233
|
+
rows = db
|
|
234
|
+
.prepare(`SELECT * FROM triggers WHERE trigger_type IN ('at', 'every', 'until') AND fire_at <= ? ORDER BY fire_at`)
|
|
235
|
+
.all(scope.due);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
rows = db.prepare('SELECT * FROM triggers ORDER BY fire_at').all();
|
|
239
|
+
}
|
|
240
|
+
return rows.map(triggerFrom);
|
|
241
|
+
}
|
|
242
|
+
/** True if the node has ANY pending self-anchored trigger (of any type).
|
|
243
|
+
* Consumed by the stop-guard self-wake seam so a no-child poll node releases
|
|
244
|
+
* dormant after arming instead of being nagged to finish. */
|
|
245
|
+
export function hasPendingSelfTrigger(node_id) {
|
|
246
|
+
return (openDb().prepare('SELECT 1 FROM triggers WHERE node_id = ? LIMIT 1').get(node_id) !== undefined);
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Predicate (`--when`) primitives — Phase 3 daemon-evaluator plumbing.
|
|
250
|
+
// Nothing in this phase arms a `trigger_type='when'` row; these exist so the
|
|
251
|
+
// daemon's evaluator can be built directly against this DAO without another
|
|
252
|
+
// storage-layer pass.
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
/** Predicate triggers due for evaluation: idle, `next_eval_at` arrived,
|
|
255
|
+
* deterministic order (`next_eval_at`, then `created`, then `trigger_id` —
|
|
256
|
+
* spec §Daemon behavior step 3). Capacity enforcement (max concurrent
|
|
257
|
+
* canvas-wide / per-owner) is the daemon's job, not this query's. */
|
|
258
|
+
export function duePredicateTriggers(nowIso) {
|
|
259
|
+
return openDb()
|
|
260
|
+
.prepare(`SELECT * FROM triggers
|
|
261
|
+
WHERE trigger_type = 'when' AND eval_state = 'idle' AND next_eval_at <= ?
|
|
262
|
+
ORDER BY next_eval_at, created, trigger_id`)
|
|
263
|
+
.all(nowIso).map(triggerFrom);
|
|
264
|
+
}
|
|
265
|
+
/** Atomically acquire the idle lease for one predicate evaluation: flips
|
|
266
|
+
* `eval_state` to 'running' and records lease/pid metadata, but ONLY if the
|
|
267
|
+
* row is still idle (the `WHERE eval_state = 'idle'` guard is the atomicity —
|
|
268
|
+
* two daemons racing the same row can't both win). Returns whether THIS call
|
|
269
|
+
* acquired it. */
|
|
270
|
+
export function acquirePredicateLease(trigger_id, leaseOwner, pid, startedAtIso) {
|
|
271
|
+
const res = openDb()
|
|
272
|
+
.prepare(`UPDATE triggers
|
|
273
|
+
SET eval_state = 'running', eval_started_at = ?, eval_pid = ?, eval_lease_owner = ?
|
|
274
|
+
WHERE trigger_id = ? AND eval_state = 'idle'`)
|
|
275
|
+
.run(startedAtIso, pid, leaseOwner, trigger_id);
|
|
276
|
+
return Number(res.changes) > 0;
|
|
277
|
+
}
|
|
278
|
+
/** Record a non-firing predicate evaluation result (exit non-zero, or a
|
|
279
|
+
* per-eval timeout): releases the lease back to idle and schedules the next
|
|
280
|
+
* check. Exit-0 (fire) is NOT recorded here — the spec's settle-before-enact
|
|
281
|
+
* rule means a firing predicate is consumed (consumeTrigger) then enacted,
|
|
282
|
+
* never left as an idle row. */
|
|
283
|
+
export function recordPredicateEvalResult(trigger_id, result) {
|
|
284
|
+
openDb()
|
|
285
|
+
.prepare(`UPDATE triggers
|
|
286
|
+
SET eval_state = 'idle', eval_started_at = NULL, eval_pid = NULL, eval_lease_owner = NULL,
|
|
287
|
+
last_eval_at = ?, last_exit = ?, last_stderr = ?, next_eval_at = ?
|
|
288
|
+
WHERE trigger_id = ?`)
|
|
289
|
+
.run(result.completedAtIso, result.exitCode, result.stderrTail, result.nextEvalAtIso, trigger_id);
|
|
290
|
+
}
|
|
291
|
+
/** Every predicate trigger currently marked 'running' — the daemon's stale-
|
|
292
|
+
* lease recovery scan on restart checks each recorded `eval_pid` for
|
|
293
|
+
* liveness and calls resetPredicateLease for any that's gone. */
|
|
294
|
+
export function runningPredicateTriggers() {
|
|
295
|
+
return openDb()
|
|
296
|
+
.prepare(`SELECT * FROM triggers WHERE trigger_type = 'when' AND eval_state = 'running'`)
|
|
297
|
+
.all().map(triggerFrom);
|
|
298
|
+
}
|
|
299
|
+
/** Reset a predicate trigger's lease back to idle without recording a result —
|
|
300
|
+
* stale-lease recovery for a row whose recorded eval_pid is no longer alive
|
|
301
|
+
* (the prior daemon instance died mid-evaluation). */
|
|
302
|
+
export function resetPredicateLease(trigger_id) {
|
|
303
|
+
openDb()
|
|
304
|
+
.prepare(`UPDATE triggers
|
|
305
|
+
SET eval_state = 'idle', eval_started_at = NULL, eval_pid = NULL, eval_lease_owner = NULL
|
|
306
|
+
WHERE trigger_id = ?`)
|
|
307
|
+
.run(trigger_id);
|
|
308
|
+
}
|
|
309
|
+
/** Predicate triggers whose WALL-CLOCK timeout has arrived, regardless of
|
|
310
|
+
* eval_state (an in-flight evaluation past its own trigger's timeout_at is
|
|
311
|
+
* still reaped — the caller kills the process group itself since this is a
|
|
312
|
+
* read, not a mutation). Spec §Predicate triggers: "Wall-clock timeout_at
|
|
313
|
+
* reached: consume and notify owner." */
|
|
314
|
+
export function duePredicateTimeouts(nowIso) {
|
|
315
|
+
return openDb()
|
|
316
|
+
.prepare(`SELECT * FROM triggers
|
|
317
|
+
WHERE trigger_type = 'when' AND timeout_at IS NOT NULL AND timeout_at <= ?
|
|
318
|
+
ORDER BY timeout_at, created, trigger_id`)
|
|
319
|
+
.all(nowIso).map(triggerFrom);
|
|
320
|
+
}
|
|
@@ -206,66 +206,148 @@ export interface SubscriptionRef {
|
|
|
206
206
|
active: boolean;
|
|
207
207
|
created: string;
|
|
208
208
|
}
|
|
209
|
-
/**
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
209
|
+
/** What a trigger enacts when it fires: append/revive an existing node, or
|
|
210
|
+
* birth a new one. Orthogonal to HOW it enacts (action_mode) and WHEN it
|
|
211
|
+
* fires (trigger_type) — see the node-trigger-grammar spec's §Model. */
|
|
212
|
+
export type TriggerAction = 'msg' | 'new';
|
|
213
|
+
/** HOW a trigger enacts (spec §Model):
|
|
214
|
+
* - inbox_message → append a message to the target's inbox (action='msg').
|
|
215
|
+
* - fresh_revive → revive the target with no inbox entry (action='msg').
|
|
216
|
+
* - deadline_message → append an urgent timeout message; ≤1 per node (action='msg').
|
|
217
|
+
* - node_birth → spawnChild a fresh node from a stored recipe (action='new'). */
|
|
218
|
+
export type TriggerActionMode = 'inbox_message' | 'fresh_revive' | 'deadline_message' | 'node_birth';
|
|
219
|
+
/** WHEN a trigger fires:
|
|
220
|
+
* - at → one future clock instant (fire_at).
|
|
221
|
+
* - every → recurring clock cadence (fire_at advances by recur).
|
|
222
|
+
* - until → a deadline backstop (fire_at; deadline_message only).
|
|
223
|
+
* - when → a daemon-evaluated predicate, polled every eval_every until exit 0
|
|
224
|
+
* or wall-clock timeout_at (driven by next_eval_at, not fire_at). */
|
|
225
|
+
export type TriggerType = 'at' | 'every' | 'when' | 'until';
|
|
226
|
+
/** payload for action_mode='fresh_revive' — `null`, or a label carried only for
|
|
227
|
+
* `node triggers list` rendering. */
|
|
228
|
+
export interface FreshRevivePayload {
|
|
217
229
|
label?: string;
|
|
218
230
|
}
|
|
219
|
-
/** payload for
|
|
220
|
-
|
|
221
|
-
|
|
231
|
+
/** payload for action_mode='inbox_message' — a non-empty message body + a
|
|
232
|
+
* ≤120-char first-line label. `tier` mirrors feed/inbox.ts's InboxTier
|
|
233
|
+
* ('critical'|'urgent'|'normal'|'deferred'); inlined rather than imported to
|
|
234
|
+
* avoid a canvas→feed value coupling. Absent tier ⇒ daemon enacts at 'normal'.
|
|
235
|
+
* `body` is optional ONLY for a `trigger_type='when'` row armed with no inline
|
|
236
|
+
* body: the spec's stdout-as-body rule means the daemon fills it from the
|
|
237
|
+
* predicate's captured stdout when it fires. Every non-predicate inbox_message
|
|
238
|
+
* row (now/clock) still requires a non-empty body — armTrigger enforces this
|
|
239
|
+
* per trigger_type, not this type alone. */
|
|
240
|
+
export interface InboxMessagePayload {
|
|
241
|
+
body?: string;
|
|
222
242
|
label: string;
|
|
243
|
+
tier?: 'critical' | 'urgent' | 'normal' | 'deferred';
|
|
223
244
|
}
|
|
224
|
-
/** payload for
|
|
225
|
-
* `timeout` mirror. The VISIBLE timeout signal rides the
|
|
226
|
-
* this flag (inbox digests never surface arbitrary
|
|
227
|
-
|
|
245
|
+
/** payload for action_mode='deadline_message' — a non-empty timeout note + the
|
|
246
|
+
* machine-readable `timeout` mirror. The VISIBLE timeout signal rides the
|
|
247
|
+
* RENDERED label/body, not this flag (inbox digests never surface arbitrary
|
|
248
|
+
* data keys). ≤1 per node (enforced by the partial unique index on node_id
|
|
249
|
+
* WHERE action_mode='deadline_message'). */
|
|
250
|
+
export interface DeadlineMessagePayload {
|
|
228
251
|
body: string;
|
|
229
252
|
timeout: true;
|
|
230
253
|
label: string;
|
|
231
254
|
}
|
|
232
|
-
/** The parsed per-
|
|
233
|
-
* this on write and JSON.parses it back on read, so callers
|
|
234
|
-
* / `payload as SpawnChildOpts` directly with no
|
|
235
|
-
*
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
*
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
255
|
+
/** The parsed per-action_mode payload union: the data-access layer
|
|
256
|
+
* JSON.stringifies this on write and JSON.parses it back on read, so callers
|
|
257
|
+
* consume `payload.body` / `payload as SpawnChildOpts` directly with no
|
|
258
|
+
* re-parse. The discriminator is the row's OWN `action_mode` column, never
|
|
259
|
+
* inferred from payload shape (spec §Data model). A node_birth payload is a
|
|
260
|
+
* SpawnChildOpts recipe with `parent` resolved to a NON-NULL armer id at arm
|
|
261
|
+
* time. */
|
|
262
|
+
export type TriggerPayload = null | FreshRevivePayload | InboxMessagePayload | DeadlineMessagePayload | SpawnChildOpts;
|
|
263
|
+
/** A predicate trigger's in-flight evaluation state — a trigger has at most one
|
|
264
|
+
* evaluation running at a time (spec §Lease / in-flight contract). */
|
|
265
|
+
export type TriggerEvalState = 'idle' | 'running';
|
|
266
|
+
/** A trigger row as stored in the `triggers` table (canvas.db, migration v9).
|
|
267
|
+
* One row = "enact <action>/<action_mode> on <trigger_type> [at fire_at |
|
|
268
|
+
* polling next_eval_at]". `node_id` is the TARGET + node-anchored cancel
|
|
269
|
+
* anchor (NULL = canvas-detached, e.g. a deferred/recurring node_birth);
|
|
270
|
+
* `owner_id` is the ARMER, set on every row. `payload` is the PARSED
|
|
271
|
+
* per-action_mode union, never the raw JSON string. Predicate-only fields
|
|
272
|
+
* (`when_script` through `last_stderr`) are null/idle on every clock trigger. */
|
|
273
|
+
export interface Trigger {
|
|
274
|
+
/** Stable id (caller-supplied at arm time; preserved from the legacy
|
|
275
|
+
* `wakeup_id` for rows migrated from the v7 `wakeups` table). */
|
|
276
|
+
trigger_id: string;
|
|
277
|
+
/** The node that armed this trigger; set on EVERY row. == node_id for a
|
|
278
|
+
* self-targeted trigger. */
|
|
247
279
|
owner_id: string;
|
|
248
|
-
/**
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
280
|
+
/** Revive/message/spawn-detach target + node-anchored cancel anchor; NULL =
|
|
281
|
+
* canvas-detached (a deferred/recurring node_birth). */
|
|
282
|
+
node_id: string | null;
|
|
283
|
+
action: TriggerAction;
|
|
284
|
+
action_mode: TriggerActionMode;
|
|
285
|
+
trigger_type: TriggerType;
|
|
286
|
+
/** Next absolute clock fire time, ISO 8601 UTC; NULL for a predicate trigger
|
|
287
|
+
* (which fires via next_eval_at instead). */
|
|
288
|
+
fire_at: string | null;
|
|
289
|
+
/** NULL = one-shot/adaptive clock trigger; else the recur JSON the daemon
|
|
290
|
+
* advances (interval or cron). A predicate `--every` reuses this same shape
|
|
291
|
+
* to express EVALUATION cadence, not a recurring action. */
|
|
252
292
|
recur: string | null;
|
|
253
|
-
|
|
254
|
-
|
|
293
|
+
payload: TriggerPayload;
|
|
294
|
+
/** Predicate source for trigger_type='when'; NULL otherwise. */
|
|
295
|
+
when_script: string | null;
|
|
296
|
+
/** Predicate evaluation cadence (recur-shaped JSON); NULL otherwise. */
|
|
297
|
+
eval_every: string | null;
|
|
298
|
+
/** Next predicate evaluation instant; set to arm time when a predicate
|
|
299
|
+
* trigger is armed so the first evaluation is deterministic. NULL for a
|
|
300
|
+
* clock trigger. */
|
|
301
|
+
next_eval_at: string | null;
|
|
302
|
+
/** Wall-clock predicate expiry; NULL for a clock trigger. */
|
|
303
|
+
timeout_at: string | null;
|
|
304
|
+
eval_state: TriggerEvalState;
|
|
305
|
+
eval_started_at: string | null;
|
|
306
|
+
eval_pid: number | null;
|
|
307
|
+
eval_lease_owner: string | null;
|
|
308
|
+
last_eval_at: string | null;
|
|
309
|
+
last_exit: number | null;
|
|
310
|
+
last_stderr: string | null;
|
|
255
311
|
/** ISO 8601, audit/order. */
|
|
256
312
|
created: string;
|
|
257
313
|
}
|
|
258
|
-
/** The arm-a-
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
|
|
264
|
-
|
|
314
|
+
/** The arm-a-trigger spec. `trigger_id` is CALLER-SUPPLIED — the canvas layer
|
|
315
|
+
* never mints ids (importing newNodeId from runtime/nodes.ts would force a
|
|
316
|
+
* canvas → runtime → canvas cycle); the command surface mints the id and
|
|
317
|
+
* passes it in. `owner_id` is required on every row; `node_id` is NULL for a
|
|
318
|
+
* detached trigger (deferred/recurring node_birth). Predicate fields
|
|
319
|
+
* (`when_script` through `timeout_at`) are set together for trigger_type='when'
|
|
320
|
+
* and left absent otherwise. */
|
|
321
|
+
export interface ArmTriggerSpec {
|
|
322
|
+
trigger_id: string;
|
|
265
323
|
node_id?: string | null;
|
|
266
324
|
owner_id: string;
|
|
267
|
-
|
|
268
|
-
|
|
325
|
+
action: TriggerAction;
|
|
326
|
+
action_mode: TriggerActionMode;
|
|
327
|
+
trigger_type: TriggerType;
|
|
328
|
+
fire_at?: string | null;
|
|
269
329
|
recur?: string | null;
|
|
270
|
-
payload?:
|
|
330
|
+
payload?: TriggerPayload;
|
|
331
|
+
when_script?: string | null;
|
|
332
|
+
eval_every?: string | null;
|
|
333
|
+
next_eval_at?: string | null;
|
|
334
|
+
timeout_at?: string | null;
|
|
271
335
|
}
|
|
336
|
+
/** Which triggers a listTriggers call returns. Distinguished by which key is
|
|
337
|
+
* present (mirrors listNodes' filter shape):
|
|
338
|
+
* - { node } — triggers anchored to this node (node_id = ?).
|
|
339
|
+
* - { owner } — triggers this node ARMED (owner_id = ?); the per-owner cap count.
|
|
340
|
+
* - { subtree } — triggers anchored to any node in this id set (node_id IN (…)).
|
|
341
|
+
* - { due } — CLOCK triggers whose fire_at <= this ISO instant.
|
|
342
|
+
* - { canvas } — every trigger on the canvas. */
|
|
343
|
+
export type TriggerScope = {
|
|
344
|
+
node: string;
|
|
345
|
+
} | {
|
|
346
|
+
owner: string;
|
|
347
|
+
} | {
|
|
348
|
+
subtree: string[];
|
|
349
|
+
} | {
|
|
350
|
+
due: string;
|
|
351
|
+
} | {
|
|
352
|
+
canvas: true;
|
|
353
|
+
};
|
package/dist/core/command.js
CHANGED
|
@@ -367,16 +367,25 @@ export async function runCli(root, argv) {
|
|
|
367
367
|
}
|
|
368
368
|
const { node, path, remaining } = walk(root, tokens);
|
|
369
369
|
try {
|
|
370
|
+
// A root/branch node's `remaining` is only non-empty because walk hit
|
|
371
|
+
// -h/--help or an unmatched child name (a leaf always consumes the rest
|
|
372
|
+
// of the path itself). So a non-help leading token here is always the
|
|
373
|
+
// latter: reject it as an unknown path before rendering any help, even
|
|
374
|
+
// when a -h/--help token also appears later in `remaining` — otherwise a
|
|
375
|
+
// removed/misspelled subcommand followed by -h would render the parent's
|
|
376
|
+
// help and exit 0 instead of failing.
|
|
377
|
+
if ((node.kind === 'root' || node.kind === 'branch')
|
|
378
|
+
&& remaining.length > 0
|
|
379
|
+
&& remaining[0] !== '-h' && remaining[0] !== '--help') {
|
|
380
|
+
throw unknownPathError(node, path, remaining[0]);
|
|
381
|
+
}
|
|
370
382
|
// Help anywhere in remaining tokens → print node help and exit
|
|
371
383
|
if (helpRequested(remaining)) {
|
|
372
384
|
process.stdout.write(renderNode(node) + '\n');
|
|
373
385
|
process.exit(ExitCode.SUCCESS);
|
|
374
386
|
}
|
|
375
|
-
// Bare branch or bare root (no -h,
|
|
387
|
+
// Bare branch or bare root (no -h, remaining fully consumed) → help surface
|
|
376
388
|
if (node.kind === 'root' || node.kind === 'branch') {
|
|
377
|
-
if (remaining.length > 0) {
|
|
378
|
-
throw unknownPathError(node, path, remaining[0]);
|
|
379
|
-
}
|
|
380
389
|
process.stdout.write(renderNode(node) + '\n');
|
|
381
390
|
process.exit(ExitCode.SUCCESS);
|
|
382
391
|
}
|