@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,109 @@
|
|
|
1
|
+
// Regression for final-integrated-verdict Major #1: a predicate whose script
|
|
2
|
+
// writes more than STDOUT_CAP_BYTES to stdout AND exits non-zero must be
|
|
3
|
+
// RESCHEDULED (stay armed), never fired and never stuck running. Before the
|
|
4
|
+
// fix, `finish()` in `src/daemon/predicate-eval.ts` checked `overflowed`
|
|
5
|
+
// BEFORE the exit-code branch, so any verbose non-zero predicate got consumed
|
|
6
|
+
// on its first poll. The fix gates the overflow check on `code === 0 &&
|
|
7
|
+
// stdoutIsBody`. Drives the REAL `evaluateDuePredicates` — no child_process
|
|
8
|
+
// mocking, a real subprocess is spawned.
|
|
9
|
+
import { test, before, beforeEach, after } from 'node:test';
|
|
10
|
+
import assert from 'node:assert/strict';
|
|
11
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
12
|
+
import { tmpdir } from 'node:os';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { createNode, closeDb, armTrigger, listTriggers } from '../../core/canvas/index.js';
|
|
15
|
+
import { evaluateDuePredicates } from '../predicate-eval.js';
|
|
16
|
+
let home;
|
|
17
|
+
function node(id, cwd) {
|
|
18
|
+
return {
|
|
19
|
+
node_id: id,
|
|
20
|
+
name: id,
|
|
21
|
+
created: new Date().toISOString(),
|
|
22
|
+
cwd,
|
|
23
|
+
kind: 'general',
|
|
24
|
+
mode: 'base',
|
|
25
|
+
lifecycle: 'terminal',
|
|
26
|
+
status: 'active',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
before(() => {
|
|
30
|
+
home = mkdtempSync(join(tmpdir(), 'crtr-predicate-eval-'));
|
|
31
|
+
process.env['CRTR_HOME'] = home;
|
|
32
|
+
});
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
closeDb();
|
|
35
|
+
rmSync(home, { recursive: true, force: true });
|
|
36
|
+
});
|
|
37
|
+
after(() => {
|
|
38
|
+
closeDb();
|
|
39
|
+
rmSync(home, { recursive: true, force: true });
|
|
40
|
+
delete process.env['CRTR_HOME'];
|
|
41
|
+
});
|
|
42
|
+
/** Poll a trigger's row (via listTriggers) until an evaluation has completed
|
|
43
|
+
* (`last_exit` set) or the timeout elapses. Fire-and-forget evaluation
|
|
44
|
+
* settles asynchronously off a real child process. */
|
|
45
|
+
async function waitForEvalSettled(nodeId, timeoutMs = 5000) {
|
|
46
|
+
const start = Date.now();
|
|
47
|
+
for (;;) {
|
|
48
|
+
const rows = listTriggers({ node: nodeId });
|
|
49
|
+
if (rows.length > 0 && rows[0].last_exit !== null)
|
|
50
|
+
return;
|
|
51
|
+
if (Date.now() - start > timeoutMs)
|
|
52
|
+
throw new Error('timed out waiting for predicate evaluation to settle');
|
|
53
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
test('a >16KiB-stdout, non-zero-exit predicate stays armed (rescheduled, not fired/stuck)', async () => {
|
|
57
|
+
const meta = createNode(node('target-1', home));
|
|
58
|
+
const trigger_id = 'trig-overflow-nonzero';
|
|
59
|
+
armTrigger({
|
|
60
|
+
trigger_id,
|
|
61
|
+
node_id: meta.node_id,
|
|
62
|
+
owner_id: meta.node_id,
|
|
63
|
+
action: 'msg',
|
|
64
|
+
action_mode: 'inbox_message',
|
|
65
|
+
trigger_type: 'when',
|
|
66
|
+
when_script: `node -e "process.stdout.write('x'.repeat(20000)); process.exit(1)"`,
|
|
67
|
+
eval_every: JSON.stringify({ every: '1m' }),
|
|
68
|
+
next_eval_at: new Date(Date.now() - 1000).toISOString(),
|
|
69
|
+
payload: { label: 'test' },
|
|
70
|
+
});
|
|
71
|
+
const outcomes = [];
|
|
72
|
+
evaluateDuePredicates(Date.now(), (o) => outcomes.push(o));
|
|
73
|
+
await waitForEvalSettled(meta.node_id);
|
|
74
|
+
// Nothing fired/canceled: onDone was never invoked for this trigger.
|
|
75
|
+
assert.equal(outcomes.length, 0);
|
|
76
|
+
// The trigger row still exists (still armed), rescheduled to idle with the
|
|
77
|
+
// non-zero exit recorded — not stuck 'running'.
|
|
78
|
+
const rows = listTriggers({ node: meta.node_id });
|
|
79
|
+
assert.equal(rows.length, 1);
|
|
80
|
+
assert.equal(rows[0].trigger_id, trigger_id);
|
|
81
|
+
assert.equal(rows[0].eval_state, 'idle');
|
|
82
|
+
assert.notEqual(rows[0].last_exit, 0);
|
|
83
|
+
});
|
|
84
|
+
test('sanity: a small-output exit-0 predicate fires and is consumed', async () => {
|
|
85
|
+
const meta = createNode(node('target-2', home));
|
|
86
|
+
const trigger_id = 'trig-fires-clean';
|
|
87
|
+
armTrigger({
|
|
88
|
+
trigger_id,
|
|
89
|
+
node_id: meta.node_id,
|
|
90
|
+
owner_id: meta.node_id,
|
|
91
|
+
action: 'msg',
|
|
92
|
+
action_mode: 'inbox_message',
|
|
93
|
+
trigger_type: 'when',
|
|
94
|
+
when_script: `echo ok`,
|
|
95
|
+
eval_every: JSON.stringify({ every: '1m' }),
|
|
96
|
+
next_eval_at: new Date(Date.now() - 1000).toISOString(),
|
|
97
|
+
payload: { label: 'test' },
|
|
98
|
+
});
|
|
99
|
+
const outcomes = [];
|
|
100
|
+
evaluateDuePredicates(Date.now(), (o) => outcomes.push(o));
|
|
101
|
+
const start = Date.now();
|
|
102
|
+
while (outcomes.length === 0 && Date.now() - start < 5000) {
|
|
103
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
104
|
+
}
|
|
105
|
+
assert.equal(outcomes.length, 1);
|
|
106
|
+
assert.equal(outcomes[0].kind, 'fired');
|
|
107
|
+
// Consumed: the trigger row is gone.
|
|
108
|
+
assert.equal(listTriggers({ node: meta.node_id }).length, 0);
|
|
109
|
+
});
|
package/dist/daemon/crtrd.js
CHANGED
|
@@ -50,13 +50,14 @@ import { writeFileSync, readFileSync, rmSync, existsSync, mkdirSync, statSync, }
|
|
|
50
50
|
import { dirname, join } from 'node:path';
|
|
51
51
|
import { homedir } from 'node:os';
|
|
52
52
|
import { crtrHome, nodeDir, jobDir } from '../core/canvas/paths.js';
|
|
53
|
-
import { listNodes, getRow, getNode,
|
|
53
|
+
import { listNodes, getRow, getNode, dueClockTriggers, consumeTrigger, advanceTrigger, listFocuses, closeFocusRow, pruneToLimit, } from '../core/canvas/index.js';
|
|
54
54
|
import { transition } from '../core/runtime/lifecycle.js';
|
|
55
55
|
import { isBusy } from '../core/runtime/busy.js';
|
|
56
56
|
import { FAULT_QUIET_MS } from '../core/runtime/fault.js';
|
|
57
57
|
import { logger } from '../core/log.js';
|
|
58
58
|
export { FAULT_QUIET_MS };
|
|
59
59
|
import { isPidAlive } from '../core/canvas/pid.js';
|
|
60
|
+
import { reconcileBootLiveness } from '../core/canvas/boot.js';
|
|
60
61
|
import { listLivePanes, tearDownNode } from '../core/runtime/placement.js';
|
|
61
62
|
import { reviveNode } from '../core/runtime/revive.js';
|
|
62
63
|
import { isBrokerLive } from '../core/runtime/model-swap.js';
|
|
@@ -66,6 +67,7 @@ import { wakeOriginFrom } from '../core/runtime/bearings.js';
|
|
|
66
67
|
import { pushUrgent } from '../core/feed/feed.js';
|
|
67
68
|
import { appendInbox, readInboxSince, readCursor } from '../core/feed/inbox.js';
|
|
68
69
|
import { nextSlotAfter } from '../core/wake.js';
|
|
70
|
+
import { evaluateDuePredicates, reapTimedOutPredicates, recoverStalePredicateLeases, predicateCapacity, } from './predicate-eval.js';
|
|
69
71
|
/** Surface a vehicle that never booted.
|
|
70
72
|
*
|
|
71
73
|
* `spawnChild` returns status="active" the instant the tmux window opens — it
|
|
@@ -87,6 +89,18 @@ async function surfaceBootFailure(meta) {
|
|
|
87
89
|
await pushUrgent(meta.node_id, body, { from: meta.node_id });
|
|
88
90
|
}
|
|
89
91
|
const DEFAULT_INTERVAL_MS = 2000;
|
|
92
|
+
// Count-based auto-prune of the canvas (pruneToLimit). The canvas grows
|
|
93
|
+
// unbounded — the TTL `crtr canvas prune` is manual, so without this a long-lived
|
|
94
|
+
// daemon's canvas accumulates thousands of terminal nodes, making every scan +
|
|
95
|
+
// `canvas snapshot` expensive. Keep the AUTO_PRUNE_MAX most-recently-active nodes
|
|
96
|
+
// (live nodes are NEVER deleted, so the real floor is max(AUTO_PRUNE_MAX,
|
|
97
|
+
// liveCount)). It's a DB sweep, not per-tick work — throttled to PRUNE_INTERVAL_MS.
|
|
98
|
+
const AUTO_PRUNE_MAX = 2000;
|
|
99
|
+
const PRUNE_INTERVAL_MS = 60 * 60 * 1000;
|
|
100
|
+
// Last auto-prune wall-clock. -Infinity so the FIRST tick after start runs it
|
|
101
|
+
// (the canvas may already be huge at boot); thereafter every PRUNE_INTERVAL_MS.
|
|
102
|
+
// In-memory only — a daemon restart re-runs it once, which is harmless.
|
|
103
|
+
let lastPruneAt = Number.NEGATIVE_INFINITY;
|
|
90
104
|
const log = logger('crtrd');
|
|
91
105
|
// How long a node's broker pid may be observed dead before the daemon revives
|
|
92
106
|
// it. MUST exceed worst-case broker boot time: a refresh / crash-revive
|
|
@@ -116,13 +130,13 @@ const KILL_ESCALATE_MS = 20_000;
|
|
|
116
130
|
// unhealthySince — a daemon restart resets them (worst case: one extra grace).
|
|
117
131
|
const yieldStallSince = new Map();
|
|
118
132
|
const yieldTermAt = new Map();
|
|
119
|
-
//
|
|
133
|
+
// Trigger-failure dedup latch (third pass): trigger_ids we've already fail-loud
|
|
120
134
|
// notified about, so a permanently-broken spawn-cron (or a quarantined recurrence)
|
|
121
135
|
// notifies the armer ONCE and then stays quiet until the next success or cancel —
|
|
122
136
|
// the unrotated, append-only inbox.jsonl must not be flooded (Min-9). In-memory
|
|
123
137
|
// only, like unhealthySince; a daemon restart resets it (worst case: one repeat
|
|
124
138
|
// notice). A successful spawn clears its entry so a future failure re-notifies.
|
|
125
|
-
const
|
|
139
|
+
const notifiedTriggerFailures = new Set();
|
|
126
140
|
/** Refresh-stall decision (§H refresh-authority; audit 2026-06-09, Bug 1 — node
|
|
127
141
|
* mq5v9hfa-74493d45 and siblings; stuck-refresh — parent mq7s5o93): a `node
|
|
128
142
|
* yield` / refresh records intent='refresh' and relies on the in-process
|
|
@@ -293,6 +307,11 @@ export function livenessVerdict(piPidAlive, deadFor) {
|
|
|
293
307
|
* revives it fresh. Fault recovery now runs in a separate pass: live,
|
|
294
308
|
* daemon-owned provider faults are retried by inbox nudge, while dead-pid
|
|
295
309
|
* crashes still fall through the ordinary resume path below.
|
|
310
|
+
* • pid null + intent==='idle-release' → dormant by choice; its pid may have
|
|
311
|
+
* just been cleared by boot reconciliation, but a null pid here is still
|
|
312
|
+
* that chosen dormancy, not a stranded relaunch — leave it, the second pass
|
|
313
|
+
* revives (resume) on the next unseen inbox entry (mirrors the dead-pid
|
|
314
|
+
* idle-release case).
|
|
296
315
|
* • pid null + pi_session_id set (a relaunch in flight — reviveNode clears
|
|
297
316
|
* pi_pid right after launch) → leave through a boot grace; a healthy engine
|
|
298
317
|
* re-records its pid well within it. If the grace ELAPSES with still no pid,
|
|
@@ -345,6 +364,18 @@ async function handleNodeLiveness(row, now, revivedThisTick) {
|
|
|
345
364
|
unhealthySince.delete(id); // row gone from meta — nothing to supervise
|
|
346
365
|
return;
|
|
347
366
|
}
|
|
367
|
+
// Dormant by choice: an idle-release node freed itself while dormant. Boot
|
|
368
|
+
// reconciliation may have just cleared its recorded pid to null, but a null
|
|
369
|
+
// pid here is still that chosen dormancy — NOT a stranded relaunch and NOT a
|
|
370
|
+
// failed boot. Honor it exactly like the dead-pid idle-release branch below:
|
|
371
|
+
// leave it idle; the second pass revives it (resume) the moment its inbox
|
|
372
|
+
// gains an unseen entry. Without this, boot reconciliation clearing the pid
|
|
373
|
+
// would drop this node into the boot-grace path and spuriously wake it after
|
|
374
|
+
// the grace with no work waiting.
|
|
375
|
+
if (row.intent === 'idle-release') {
|
|
376
|
+
unhealthySince.delete(id);
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
348
379
|
const since = unhealthySince.get(id);
|
|
349
380
|
if (since === undefined) {
|
|
350
381
|
unhealthySince.set(id, now); // start the boot grace clock
|
|
@@ -405,19 +436,20 @@ async function handleNodeLiveness(row, now, revivedThisTick) {
|
|
|
405
436
|
reviveNode(id, { resume: true });
|
|
406
437
|
revivedThisTick.add(id); // third-pass bare double-spawn guard (Maj-4)
|
|
407
438
|
}
|
|
408
|
-
/** Fail loud for a drifted/broken
|
|
409
|
-
* via appendInbox — NOT pushUrgent, which fans to subscribersOf(owner),
|
|
410
|
-
* DETACHED spawn has no subscribers (so the armer would never be
|
|
411
|
-
* literal {from:null} is also a type error for pushUrgent.
|
|
412
|
-
* (notify once, suppress until the next success/cancel
|
|
413
|
-
* so a broken spawn-cron can't flood the
|
|
414
|
-
* loud daemon-log line when the owner
|
|
415
|
-
|
|
416
|
-
|
|
439
|
+
/** Fail loud for a drifted/broken trigger (design §6.6/Q5): wake the ARMER
|
|
440
|
+
* DIRECTLY via appendInbox — NOT pushUrgent, which fans to subscribersOf(owner),
|
|
441
|
+
* and a DETACHED spawn has no subscribers (so the armer would never be
|
|
442
|
+
* reached); the literal {from:null} is also a type error for pushUrgent.
|
|
443
|
+
* Deduped per trigger_id (notify once, suppress until the next success/cancel
|
|
444
|
+
* via notifiedTriggerFailures) so a broken spawn-cron can't flood the
|
|
445
|
+
* unrotated inbox.jsonl. Falls back to a loud daemon-log line when the owner
|
|
446
|
+
* no longer resolves to a node. */
|
|
447
|
+
function failLoudTrigger(t, label, body) {
|
|
448
|
+
if (notifiedTriggerFailures.has(t.trigger_id))
|
|
417
449
|
return;
|
|
418
|
-
|
|
419
|
-
if (getRow(
|
|
420
|
-
appendInbox(
|
|
450
|
+
notifiedTriggerFailures.add(t.trigger_id);
|
|
451
|
+
if (getRow(t.owner_id) !== null) {
|
|
452
|
+
appendInbox(t.owner_id, {
|
|
421
453
|
from: null,
|
|
422
454
|
tier: 'urgent',
|
|
423
455
|
kind: 'urgent',
|
|
@@ -426,7 +458,63 @@ function failLoudWake(w, label, body) {
|
|
|
426
458
|
});
|
|
427
459
|
}
|
|
428
460
|
else {
|
|
429
|
-
process.stderr.write(`[crtrd]
|
|
461
|
+
process.stderr.write(`[crtrd] trigger ${t.trigger_id} failed (owner ${t.owner_id} gone): ${body}\n`);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/** Notify the owner once for a settled (already-consumed) predicate outcome —
|
|
465
|
+
* never deduped like failLoudTrigger, because the trigger is gone by the time
|
|
466
|
+
* this fires so there is no repeat-notification risk to guard against. */
|
|
467
|
+
function notifyOwnerUrgent(t, label, body) {
|
|
468
|
+
if (getRow(t.owner_id) !== null) {
|
|
469
|
+
appendInbox(t.owner_id, { from: null, tier: 'urgent', kind: 'urgent', label, data: { body } });
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
process.stderr.write(`[crtrd] trigger ${t.trigger_id} notice undelivered (owner ${t.owner_id} gone): ${body}\n`);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/** Settle a predicate outcome onto the SAME enactment paths pass 3 uses
|
|
476
|
+
* (appendInbox / spawnChild) — fresh_revive/deadline_message never reach here
|
|
477
|
+
* (the command surface never pairs `--when` with those action_modes; see the
|
|
478
|
+
* spec's valid flag matrix). stdout_overflow/target_gone are terminal
|
|
479
|
+
* failures the trigger was already consumed for by predicate-eval.ts — this
|
|
480
|
+
* only sends the owner notice. */
|
|
481
|
+
async function handlePredicateOutcome(outcome) {
|
|
482
|
+
const t = outcome.trigger;
|
|
483
|
+
if (outcome.kind === 'stdout_overflow') {
|
|
484
|
+
notifyOwnerUrgent(t, '⚠ predicate stdout too large', `Trigger ${t.trigger_id}'s predicate exceeded the 16 KiB stdout limit — the action was not delivered and the trigger has been canceled.`);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
if (outcome.kind === 'target_gone') {
|
|
488
|
+
notifyOwnerUrgent(t, '⚠ predicate target gone', `Trigger ${t.trigger_id}'s target no longer exists — the trigger has been canceled.`);
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
// outcome.kind === 'fired'
|
|
492
|
+
if (t.action === 'msg' && t.action_mode === 'inbox_message') {
|
|
493
|
+
const p = t.payload;
|
|
494
|
+
const body = (p.body ?? outcome.stdout).trim();
|
|
495
|
+
if (body === '') {
|
|
496
|
+
notifyOwnerUrgent(t, '⚠ predicate fired with no message', `Trigger ${t.trigger_id}'s predicate exited 0 but produced no body (no supplied body, empty stdout) — nothing was delivered.`);
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
if (t.node_id == null)
|
|
500
|
+
return; // integrity backstop only — armTrigger requires a target here
|
|
501
|
+
appendInbox(t.node_id, {
|
|
502
|
+
from: t.owner_id ?? null,
|
|
503
|
+
tier: p.tier ?? 'normal',
|
|
504
|
+
kind: 'message',
|
|
505
|
+
label: `⏰ predicate fired — ${p.label}`,
|
|
506
|
+
data: { body },
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
else if (t.action === 'new' && t.action_mode === 'node_birth') {
|
|
510
|
+
const recipe = t.payload;
|
|
511
|
+
try {
|
|
512
|
+
await spawnChild({ ...recipe, wakeOrigin: wakeOriginFrom(t) });
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
failLoudTrigger(t, '⚠ deferred predicate spawn failed', `Deferred spawn (${recipe.kind} @ ${recipe.cwd}) failed after its predicate fired: ` +
|
|
516
|
+
`${err.message}\n\nRe-home (fix the cwd/parent) or re-arm the trigger.`);
|
|
517
|
+
}
|
|
430
518
|
}
|
|
431
519
|
}
|
|
432
520
|
// How long a dead node's on-disk record must have been QUIET (no meta/telemetry
|
|
@@ -642,143 +730,142 @@ export async function superviseTick(now = Date.now()) {
|
|
|
642
730
|
process.stderr.write(`[crtrd] error polling inbox ${row.node_id}: ${err.message}\n`);
|
|
643
731
|
}
|
|
644
732
|
}
|
|
645
|
-
// Third pass: FIRE DUE
|
|
733
|
+
// Third pass: FIRE DUE CLOCK TRIGGERS (the triggers engine, migration v9).
|
|
646
734
|
// Runs immediately AFTER the inbox second pass — the ordering is load-bearing
|
|
647
735
|
// (design §6.4): a same-tick inbox revive runs cancelDeadlinesFor (inside
|
|
648
|
-
// reviveNode) BEFORE this pass's
|
|
649
|
-
// deadline deletes its row before it can fire. The pass-2 inbox loop above
|
|
650
|
-
// otherwise untouched (design D3) — it stays the generic wake-on-message
|
|
651
|
-
// that
|
|
652
|
-
// observation that the
|
|
736
|
+
// reviveNode) BEFORE this pass's dueClockTriggers query, so an event that wins
|
|
737
|
+
// a deadline deletes its row before it can fire. The pass-2 inbox loop above
|
|
738
|
+
// is otherwise untouched (design D3) — it stays the generic wake-on-message
|
|
739
|
+
// path that inbox_message/deadline_message rely on; the only addition is the
|
|
740
|
+
// revivedThisTick.add observation that the fresh_revive branch below needs to
|
|
741
|
+
// avoid a double-spawn.
|
|
653
742
|
// For each due row, in fire_at order, settle the row FIRST (advance-or-consume
|
|
654
|
-
// — crash-safety, design D4) THEN enact by
|
|
655
|
-
//
|
|
743
|
+
// — crash-safety, design D4) THEN enact by action/action_mode, wrapped per-row
|
|
744
|
+
// so one bad trigger never kills the tick.
|
|
656
745
|
const nowIso = new Date(now).toISOString();
|
|
657
746
|
const nowDate = new Date(now);
|
|
658
747
|
let due;
|
|
659
748
|
try {
|
|
660
|
-
due =
|
|
749
|
+
due = dueClockTriggers(nowIso);
|
|
661
750
|
}
|
|
662
751
|
catch (err) {
|
|
663
|
-
process.stderr.write(`[crtrd]
|
|
752
|
+
process.stderr.write(`[crtrd] dueClockTriggers error: ${err.message}\n`);
|
|
664
753
|
due = [];
|
|
665
754
|
}
|
|
666
|
-
for (const
|
|
755
|
+
for (const t of due) {
|
|
667
756
|
try {
|
|
668
|
-
// 1.
|
|
669
|
-
//
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
consumeWake(w.wakeup_id);
|
|
757
|
+
// 1. Settle FIRST: crash-safety — advance/consume the trigger before
|
|
758
|
+
// enacting it, so a crash between settle and enact never re-fires.
|
|
759
|
+
if (t.recur == null) {
|
|
760
|
+
consumeTrigger(t.trigger_id);
|
|
673
761
|
}
|
|
674
762
|
else {
|
|
675
763
|
let nextFire;
|
|
676
764
|
try {
|
|
677
|
-
nextFire = nextSlotAfter(
|
|
765
|
+
nextFire = nextSlotAfter(t.recur, nowDate);
|
|
678
766
|
}
|
|
679
767
|
catch (err) {
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
// row pending would re-qualify it EVERY tick (silent CPU spin, enact
|
|
683
|
-
// never reached), so quarantine it (consume) + fail loud ONCE; never
|
|
684
|
-
// re-query it each tick (Min-8).
|
|
685
|
-
consumeWake(w.wakeup_id);
|
|
686
|
-
failLoudWake(w, '⚠ recurrence quarantined', `Scheduled wake ${w.wakeup_id} has an unparseable recurrence and was removed: ` +
|
|
768
|
+
consumeTrigger(t.trigger_id);
|
|
769
|
+
failLoudTrigger(t, '⚠ recurrence quarantined', `Scheduled trigger ${t.trigger_id} has an unparseable recurrence and was removed: ` +
|
|
687
770
|
`${err.message}\n\nRe-arm it with a valid cadence.`);
|
|
688
771
|
continue;
|
|
689
772
|
}
|
|
690
|
-
|
|
773
|
+
advanceTrigger(t.trigger_id, nextFire);
|
|
691
774
|
}
|
|
692
|
-
// 2. Enact by
|
|
693
|
-
if (
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
// Same-tick double-spawn guard (Maj-4): pass 1/2 (or an earlier bare row
|
|
700
|
-
// this pass) may have revived this node THIS tick — reviveNode clears
|
|
701
|
-
// pi_pid to NULL before the fresh pi re-records it, so the pi_pid==null
|
|
702
|
-
// liveness check below would falsely read "not live" and a second
|
|
703
|
-
// reviveNode would launch a SECOND pi on the same .jsonl (corruption).
|
|
704
|
-
// (Pane-existence is the WRONG guard — it would no-op a frozen-focus bare
|
|
705
|
-
// wake, which is pane-alive/pi-dead by design.)
|
|
775
|
+
// 2. Enact by action/action_mode.
|
|
776
|
+
if (t.action === 'msg' && t.action_mode === 'fresh_revive') {
|
|
777
|
+
const target = t.node_id == null ? null : getRow(t.node_id);
|
|
778
|
+
if (target === null) {
|
|
779
|
+
notifyOwnerUrgent(t, '⚠ scheduled trigger target gone', `Trigger ${t.trigger_id}'s target no longer exists — no revive happened.`);
|
|
780
|
+
continue;
|
|
781
|
+
}
|
|
706
782
|
if (revivedThisTick.has(target.node_id))
|
|
707
783
|
continue;
|
|
708
|
-
// pi live → no-op (AC-E3 bare): an already-awake node needs no revive.
|
|
709
784
|
if (target.pi_pid != null && isPidAlive(target.pi_pid))
|
|
710
785
|
continue;
|
|
711
786
|
process.stderr.write(`[crtrd] wake ${target.node_id} (bare alarm)\n`);
|
|
712
|
-
|
|
713
|
-
// leads with a <crtr-wake> block (Invariant B/D: the node learns a clock,
|
|
714
|
-
// not an event, woke it) instead of a generic context-refresh framing.
|
|
715
|
-
reviveNode(target.node_id, { resume: false, wakeReason: wakeOriginFrom(w) });
|
|
787
|
+
reviveNode(target.node_id, { resume: false, wakeReason: wakeOriginFrom(t) });
|
|
716
788
|
revivedThisTick.add(target.node_id);
|
|
717
789
|
}
|
|
718
|
-
else if (
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
if (w.node_id == null)
|
|
790
|
+
else if (t.action === 'msg' && t.action_mode === 'inbox_message') {
|
|
791
|
+
if (t.node_id == null) {
|
|
792
|
+
notifyOwnerUrgent(t, '⚠ scheduled trigger target gone', `Trigger ${t.trigger_id}'s target no longer exists — nothing was delivered.`);
|
|
722
793
|
continue;
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
// `node msg`, not indistinguishable from it.
|
|
729
|
-
appendInbox(w.node_id, {
|
|
730
|
-
from: w.owner_id ?? null,
|
|
731
|
-
tier: 'normal',
|
|
794
|
+
}
|
|
795
|
+
const p = t.payload;
|
|
796
|
+
appendInbox(t.node_id, {
|
|
797
|
+
from: t.owner_id ?? null,
|
|
798
|
+
tier: p.tier ?? 'normal',
|
|
732
799
|
kind: 'message',
|
|
733
800
|
label: `⏰ scheduled wake — ${p.label}`,
|
|
734
|
-
data: { body: p.body },
|
|
801
|
+
data: { body: p.body ?? '' },
|
|
735
802
|
});
|
|
736
803
|
}
|
|
737
|
-
else if (
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
// so the timeout signal MUST ride the visible label/body (Maj-8);
|
|
741
|
-
// data.timeout is a machine-readable mirror only. body is always non-
|
|
742
|
-
// empty (the surface supplies a default timeout note when none is
|
|
743
|
-
// authored, Maj-7). One-shot — already consumed in step 1.
|
|
744
|
-
if (w.node_id == null)
|
|
804
|
+
else if (t.action === 'msg' && t.action_mode === 'deadline_message') {
|
|
805
|
+
if (t.node_id == null) {
|
|
806
|
+
notifyOwnerUrgent(t, '⚠ scheduled trigger target gone', `Trigger ${t.trigger_id}'s target no longer exists — nothing was delivered.`);
|
|
745
807
|
continue;
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
808
|
+
}
|
|
809
|
+
const p = t.payload;
|
|
810
|
+
appendInbox(t.node_id, {
|
|
811
|
+
from: t.owner_id ?? null,
|
|
749
812
|
tier: 'urgent',
|
|
750
813
|
kind: 'message',
|
|
751
814
|
label: `⏰ deadline reached — ${p.label}`,
|
|
752
815
|
data: { body: p.body, timeout: true },
|
|
753
816
|
});
|
|
754
817
|
}
|
|
755
|
-
else if (
|
|
756
|
-
|
|
757
|
-
// resolved armer id (T2/T7 guarantee it), so spawnChild never throws the
|
|
758
|
-
// "requires a calling node" error even for a --root recipe.
|
|
759
|
-
const recipe = w.payload;
|
|
818
|
+
else if (t.action === 'new' && t.action_mode === 'node_birth') {
|
|
819
|
+
const recipe = t.payload;
|
|
760
820
|
try {
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
// block — it learns, by construction, that a timer birthed it (and, for
|
|
764
|
-
// a spawn-cron, that it is one run of a standing job).
|
|
765
|
-
await spawnChild({ ...recipe, wakeOrigin: wakeOriginFrom(w) });
|
|
766
|
-
notifiedWakeFailures.delete(w.wakeup_id); // success clears the dedup latch
|
|
821
|
+
await spawnChild({ ...recipe, wakeOrigin: wakeOriginFrom(t) });
|
|
822
|
+
notifiedTriggerFailures.delete(t.trigger_id);
|
|
767
823
|
}
|
|
768
824
|
catch (err) {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
// permanently-broken spawn-cron stays deduped-noisy until cancel.
|
|
772
|
-
failLoudWake(w, '⚠ deferred spawn failed', `Deferred spawn (${recipe.kind} @ ${recipe.cwd}) failed: ` +
|
|
773
|
-
`${err.message}\n\nRe-home (fix the cwd/parent) or re-arm the wake.`);
|
|
825
|
+
failLoudTrigger(t, '⚠ deferred spawn failed', `Deferred spawn (${recipe.kind} @ ${recipe.cwd}) failed: ` +
|
|
826
|
+
`${err.message}\n\nRe-home (fix the cwd/parent) or re-arm the trigger.`);
|
|
774
827
|
}
|
|
775
828
|
}
|
|
776
829
|
}
|
|
777
830
|
catch (err) {
|
|
778
|
-
|
|
779
|
-
process.stderr.write(`[crtrd] error firing wake ${w.wakeup_id}: ${err.message}\n`);
|
|
831
|
+
process.stderr.write(`[crtrd] error firing trigger ${t.trigger_id}: ${err.message}\n`);
|
|
780
832
|
}
|
|
781
833
|
}
|
|
834
|
+
// Pass 3a: recover stale predicate leases stranded by a PRIOR daemon
|
|
835
|
+
// instance (crash/restart mid-evaluation) — BEFORE 3b/3c, so a row a dead
|
|
836
|
+
// daemon left `eval_state='running'` forever can rejoin the idle pool
|
|
837
|
+
// instead of being wedged out of duePredicateTriggers' idle-only filter
|
|
838
|
+
// (spec §Daemon-behavior step 1, acceptance criterion 9: survives restart).
|
|
839
|
+
try {
|
|
840
|
+
recoverStalePredicateLeases(now, predicateCapacity());
|
|
841
|
+
}
|
|
842
|
+
catch (err) {
|
|
843
|
+
process.stderr.write(`[crtrd] recoverStalePredicateLeases error: ${err.message}\n`);
|
|
844
|
+
}
|
|
845
|
+
// Pass 3b: wall-clock predicate timeouts — reap regardless of eval_state,
|
|
846
|
+
// BEFORE selecting fresh evaluations (so a timed-out row can never also be
|
|
847
|
+
// evaluated this same tick — consumeTrigger removes it from the due query).
|
|
848
|
+
try {
|
|
849
|
+
reapTimedOutPredicates(now, (t) => {
|
|
850
|
+
notifyOwnerUrgent(t, '⚠ predicate timed out', `Trigger ${t.trigger_id}'s wall-clock timeout was reached before its predicate ever fired — it has been canceled.`);
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
catch (err) {
|
|
854
|
+
process.stderr.write(`[crtrd] reapTimedOutPredicates error: ${err.message}\n`);
|
|
855
|
+
}
|
|
856
|
+
// Pass 3c: kick off due predicate evaluations. Fire-and-forget — settlement
|
|
857
|
+
// happens async via onDone, decoupled from this tick (never awaited; a slow/
|
|
858
|
+
// hung predicate must never block supervision, spec §Predicate triggers).
|
|
859
|
+
try {
|
|
860
|
+
evaluateDuePredicates(now, (outcome) => {
|
|
861
|
+
handlePredicateOutcome(outcome).catch((err) => {
|
|
862
|
+
process.stderr.write(`[crtrd] predicate outcome error: ${err.message}\n`);
|
|
863
|
+
});
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
catch (err) {
|
|
867
|
+
process.stderr.write(`[crtrd] evaluateDuePredicates error: ${err.message}\n`);
|
|
868
|
+
}
|
|
782
869
|
// Fourth pass: reap the leftover placement of long-dead nodes (Bug 3), then
|
|
783
870
|
// sweep focus rows whose pane died outside the sanctioned teardown paths
|
|
784
871
|
// (Bug 5). Reap first so the GC also catches any focus row a reaped pane
|
|
@@ -786,6 +873,25 @@ export async function superviseTick(now = Date.now()) {
|
|
|
786
873
|
// re-anchored.
|
|
787
874
|
reapDeadResidue(now);
|
|
788
875
|
gcStaleFocuses();
|
|
876
|
+
// Fifth pass: count-based auto-prune, throttled to once per PRUNE_INTERVAL_MS
|
|
877
|
+
// (NOT every 2s tick — it's a full-canvas DB sweep). Keeps the AUTO_PRUNE_MAX
|
|
878
|
+
// most-recently-active nodes; live nodes are never deleted (pruneToLimit's
|
|
879
|
+
// floor is max(AUTO_PRUNE_MAX, liveCount)). Wrapped so a sweep failure never
|
|
880
|
+
// crashes the tick; the tick is already serialized (recursive setTimeout), so
|
|
881
|
+
// this runs sequentially within it.
|
|
882
|
+
if (now - lastPruneAt >= PRUNE_INTERVAL_MS) {
|
|
883
|
+
lastPruneAt = now;
|
|
884
|
+
try {
|
|
885
|
+
const before = listNodes().length;
|
|
886
|
+
const { pruned } = pruneToLimit({ maxNodes: AUTO_PRUNE_MAX });
|
|
887
|
+
if (pruned.length > 0) {
|
|
888
|
+
process.stderr.write(`[crtrd] auto-prune: removed ${pruned.length} nodes (kept ${before - pruned.length})\n`);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
catch (err) {
|
|
892
|
+
process.stderr.write(`[crtrd] auto-prune error: ${err.message}\n`);
|
|
893
|
+
}
|
|
894
|
+
}
|
|
789
895
|
}
|
|
790
896
|
/** Start the supervisor loop.
|
|
791
897
|
*
|
|
@@ -802,6 +908,19 @@ export function runDaemon(opts = {}) {
|
|
|
802
908
|
process.exit(0);
|
|
803
909
|
}
|
|
804
910
|
const interval = opts.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
911
|
+
// Once, before the first tick ever inspects a single `pi_pid`: detect a boot
|
|
912
|
+
// change (a host reboot, or a sandbox/VM destroy+recreate — canvas.db is
|
|
913
|
+
// durable and survives either, but every `pi_pid` it carries is a raw OS pid
|
|
914
|
+
// from the process table THAT reset) and clear every stale pid up front. This
|
|
915
|
+
// must run before the tick loop, not lazily inside reviveNode: the daemon's
|
|
916
|
+
// OWN liveness poll (handleNodeLiveness) treats `isPidAlive(pid) === true` as
|
|
917
|
+
// "leave it, nothing to revive" and never calls reviveNode at all — a
|
|
918
|
+
// pid-reuse collision on the first post-boot tick would silently no-op
|
|
919
|
+
// forever with no revive attempt to even hit reviveNode's own reconcile call.
|
|
920
|
+
const { changed, cleared } = reconcileBootLiveness();
|
|
921
|
+
if (changed) {
|
|
922
|
+
process.stderr.write(`[crtrd] boot change detected — cleared ${cleared.length} stale pi_pid(s) recorded before this boot\n`);
|
|
923
|
+
}
|
|
805
924
|
writePidfile();
|
|
806
925
|
log.info(`started (pid ${process.pid}, interval ${interval}ms)`);
|
|
807
926
|
let running = true;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type Trigger } from '../core/canvas/index.js';
|
|
2
|
+
export declare const STDOUT_CAP_BYTES: number;
|
|
3
|
+
export declare const STDERR_TAIL_BYTES: number;
|
|
4
|
+
export interface PredicateCapacity {
|
|
5
|
+
maxCanvas: number;
|
|
6
|
+
maxPerOwner: number;
|
|
7
|
+
evalTimeoutMs: number;
|
|
8
|
+
}
|
|
9
|
+
/** Read fresh each pass (not cached at module load) so a test/operator can
|
|
10
|
+
* tune it via env without a daemon restart mid-run. */
|
|
11
|
+
export declare function predicateCapacity(): PredicateCapacity;
|
|
12
|
+
/** One id per daemon PROCESS instance — distinguishes THIS process's own
|
|
13
|
+
* in-flight leases from a stale 'running' row a prior (crashed/restarted)
|
|
14
|
+
* daemon left behind (spec §Lease / in-flight contract, daemon-restart
|
|
15
|
+
* recovery). Generated once per process; tests that want deterministic
|
|
16
|
+
* recovery behavior can ignore it (recovery only special-cases OWN leases). */
|
|
17
|
+
export declare const daemonInstanceId: `${string}-${string}-${string}-${string}-${string}`;
|
|
18
|
+
export type PredicateOutcome = {
|
|
19
|
+
kind: 'fired';
|
|
20
|
+
trigger: Trigger;
|
|
21
|
+
stdout: string;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'stdout_overflow';
|
|
24
|
+
trigger: Trigger;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'target_gone';
|
|
27
|
+
trigger: Trigger;
|
|
28
|
+
};
|
|
29
|
+
/** Recover stale in-flight rows left by a PRIOR daemon instance (crash/
|
|
30
|
+
* restart): a still-alive process group past its own eval timeout is killed +
|
|
31
|
+
* recorded as a timeout; a dead pid resets straight to idle with no
|
|
32
|
+
* diagnostics (spec: "if not alive, the row is reset to idle and eligible for
|
|
33
|
+
* the next evaluation slot"). Rows this SAME instance owns are left alone —
|
|
34
|
+
* they are genuinely in flight, not stale. */
|
|
35
|
+
export declare function recoverStalePredicateLeases(now: number, config: PredicateCapacity): void;
|
|
36
|
+
/** Wall-clock `timeout_at` reap — independent of eval_state/next_eval_at.
|
|
37
|
+
* Kills any in-flight process group for a timed-out row, consumes it, and
|
|
38
|
+
* invokes `onTimeout` once per row so the caller can send the owner urgent
|
|
39
|
+
* notice (spec: "consume and notify owner"). Call BEFORE
|
|
40
|
+
* evaluateDuePredicates each tick so a timed-out row can never also be
|
|
41
|
+
* freshly evaluated in the same tick (consumeTrigger removes it from the due
|
|
42
|
+
* query). */
|
|
43
|
+
export declare function reapTimedOutPredicates(now: number, onTimeout: (t: Trigger) => void): void;
|
|
44
|
+
/** Pass 3c: select due idle predicates (deterministic order from the DAO),
|
|
45
|
+
* enforce capacity in-memory (seeded from the current running-row snapshot),
|
|
46
|
+
* and kick off evaluations — NEVER awaited. `onDone` fires per trigger,
|
|
47
|
+
* whenever it settles (possibly after this call returns). Rows over capacity,
|
|
48
|
+
* or whose owner is at its per-owner cap, are left untouched (idle,
|
|
49
|
+
* next_eval_at unchanged) and are retried next tick. A `msg` trigger whose
|
|
50
|
+
* target no longer exists is reaped here (consumed + `target_gone`) instead
|
|
51
|
+
* of being spawned against a dangling id. */
|
|
52
|
+
export declare function evaluateDuePredicates(now: number, onDone: (o: PredicateOutcome) => void): void;
|