@crouton-kit/crouter 0.3.32 → 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 +10 -2
- package/dist/build-root.js +4 -6
- package/dist/builtin-memory/crouter-development/marketplaces.md +8 -8
- package/dist/builtin-memory/crouter-development/personas/base-prompt.md +2 -2
- package/dist/builtin-memory/crouter-development/personas/orchestrator-prompt.md +5 -5
- package/dist/builtin-memory/crouter-development/personas.md +3 -4
- package/dist/builtin-memory/crouter-development/plugins.md +31 -31
- package/dist/builtin-memory/design.md +4 -1
- package/dist/builtin-memory/development.md +4 -1
- package/dist/builtin-memory/internal/INDEX.md +1 -1
- package/dist/builtin-memory/internal/examples/imessage-assistant.md +3 -3
- package/dist/builtin-memory/internal/nodes-and-canvas.md +9 -9
- package/dist/builtin-memory/internal/storage-tiers.md +5 -5
- package/dist/builtin-memory/planning.md +4 -1
- package/dist/builtin-memory/product.md +80 -0
- package/dist/builtin-memory/spec.md +4 -1
- package/dist/builtin-personas/advisor/PERSONA.md +10 -0
- package/dist/builtin-personas/design/PERSONA.md +2 -2
- package/dist/builtin-personas/design/orchestrator.md +3 -3
- package/dist/builtin-personas/developer/PERSONA.md +1 -1
- package/dist/builtin-personas/developer/orchestrator.md +2 -2
- package/dist/builtin-personas/explore/PERSONA.md +3 -3
- package/dist/builtin-personas/explore/orchestrator.md +4 -2
- package/dist/builtin-personas/general/PERSONA.md +1 -1
- package/dist/builtin-personas/general/orchestrator.md +1 -1
- package/dist/builtin-personas/orchestration-kernel.md +8 -15
- package/dist/builtin-personas/plan/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/orchestrator.md +2 -2
- package/dist/builtin-personas/plan/reviewers/architecture-fit/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/code-smells/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/pattern-consistency/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/requirements-coverage/PERSONA.md +1 -1
- package/dist/builtin-personas/plan/reviewers/security/PERSONA.md +1 -1
- package/dist/builtin-personas/product/PERSONA.md +18 -0
- package/dist/builtin-personas/product/orchestrator.md +14 -0
- package/dist/builtin-personas/product/teardown/PERSONA.md +13 -0
- package/dist/builtin-personas/review/PERSONA.md +1 -1
- package/dist/builtin-personas/review/orchestrator.md +1 -1
- package/dist/builtin-personas/runtime-base.md +5 -0
- package/dist/builtin-personas/spec/PERSONA.md +1 -1
- package/dist/builtin-personas/spec/orchestrator.md +2 -2
- package/dist/builtin-personas/spec/requirements/PERSONA.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/builtin-views/canvas/core.mjs +82 -1
- package/dist/builtin-views/canvas/tui.mjs +9 -5
- package/dist/builtin-views/canvas/web.jsx +3 -2
- package/dist/builtin-views/chat/core.mjs +725 -0
- package/dist/builtin-views/chat/text.mjs +101 -0
- package/dist/builtin-views/chat/tui.mjs +368 -0
- package/dist/builtin-views/chat/web.jsx +367 -0
- package/dist/builtin-views/prompt-review/core.mjs +863 -0
- package/dist/builtin-views/prompt-review/text.mjs +15 -0
- package/dist/builtin-views/prompt-review/tui.mjs +196 -0
- package/dist/builtin-views/prompt-review/web.jsx +484 -0
- package/dist/builtin-views/settings/core.mjs +397 -0
- package/dist/builtin-views/settings/text.mjs +40 -0
- package/dist/builtin-views/settings/tui.mjs +95 -0
- package/dist/builtin-views/settings/web.jsx +167 -0
- package/dist/cli.js +16 -3
- 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.d.ts +18 -0
- package/dist/clients/attach/attach-cmd.js +1797 -797
- package/dist/clients/attach/auth-pickers.js +2 -2
- package/dist/clients/attach/canvas-panels.js +3 -3
- package/dist/clients/attach/chat-view.d.ts +13 -2
- package/dist/clients/attach/chat-view.js +53 -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.d.ts +8 -4
- package/dist/clients/attach/config-load.js +3 -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.d.ts +2 -3
- package/dist/clients/attach/extension-dialogs.js +8 -10
- package/dist/clients/attach/graph-overlay.js +6 -5
- package/dist/clients/attach/input-controller.d.ts +4 -3
- package/dist/clients/attach/input-controller.js +25 -4
- package/dist/clients/attach/pickers.js +1 -1
- package/dist/clients/attach/slash-commands.d.ts +7 -7
- package/dist/clients/attach/slash-commands.js +40 -17
- package/dist/clients/attach/titled-editor.d.ts +4 -0
- package/dist/clients/attach/titled-editor.js +31 -15
- package/dist/clients/attach/view-socket.d.ts +2 -1
- package/dist/clients/attach/view-socket.js +28 -9
- package/dist/clients/web/__tests__/source-cache.test.js +32 -0
- package/dist/clients/web/dev-server.js +1 -0
- package/dist/clients/web/events.js +9 -11
- package/dist/clients/web/server.d.ts +4 -3
- package/dist/clients/web/server.js +166 -35
- package/dist/clients/web/source-cache.d.ts +10 -0
- package/dist/clients/web/source-cache.js +57 -0
- package/dist/clients/web/web-cmd.js +32 -13
- package/dist/commands/__tests__/human.test.js +30 -28
- package/dist/commands/canvas-history/search.js +1 -1
- package/dist/commands/canvas-history.js +5 -8
- package/dist/commands/canvas-issue.d.ts +2 -0
- package/dist/commands/canvas-issue.js +148 -0
- package/dist/commands/canvas-prune.js +43 -2
- package/dist/commands/canvas-rebuild-index.d.ts +2 -0
- package/dist/commands/canvas-rebuild-index.js +57 -0
- package/dist/commands/canvas-snapshot.d.ts +2 -0
- package/dist/commands/canvas-snapshot.js +51 -0
- package/dist/commands/canvas-tmux-spread.d.ts +2 -0
- package/dist/commands/canvas-tmux-spread.js +188 -0
- package/dist/commands/canvas.d.ts +1 -0
- package/dist/commands/canvas.js +16 -1
- package/dist/commands/chord.js +143 -48
- package/dist/commands/daemon.js +3 -3
- package/dist/commands/human/prompts.d.ts +0 -1
- package/dist/commands/human/prompts.js +39 -54
- package/dist/commands/human/queue.d.ts +12 -1
- package/dist/commands/human/queue.js +468 -73
- package/dist/commands/human/shared.d.ts +3 -4
- package/dist/commands/human/shared.js +3 -3
- package/dist/commands/human.js +12 -11
- package/dist/commands/memory/find.js +3 -2
- package/dist/commands/memory/lint.js +15 -8
- package/dist/commands/memory/list.js +4 -3
- package/dist/commands/memory/origin.d.ts +1 -0
- package/dist/commands/memory/origin.js +88 -0
- package/dist/commands/memory/read.js +3 -3
- package/dist/commands/memory/shared.d.ts +9 -4
- package/dist/commands/memory/shared.js +28 -10
- package/dist/commands/memory/write.js +19 -14
- package/dist/commands/memory.js +6 -8
- package/dist/commands/node-context.d.ts +2 -0
- package/dist/commands/node-context.js +172 -0
- package/dist/commands/node-snapshot.d.ts +2 -0
- package/dist/commands/node-snapshot.js +126 -0
- package/dist/commands/node.d.ts +2 -2
- package/dist/commands/node.js +987 -603
- 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 +13 -29
- package/dist/commands/pkg/plugin-manage.d.ts +5 -1
- package/dist/commands/pkg/plugin-manage.js +246 -172
- package/dist/commands/pkg/plugin.js +6 -6
- package/dist/commands/pkg.js +7 -7
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.js +79 -11
- package/dist/commands/revive.js +79 -4
- package/dist/commands/search/answer.d.ts +1 -0
- package/dist/commands/search/answer.js +50 -0
- package/dist/commands/search/contents.d.ts +1 -0
- package/dist/commands/search/contents.js +96 -0
- package/dist/commands/search/exa.d.ts +53 -0
- package/dist/commands/search/exa.js +155 -0
- package/dist/commands/search/puremd.d.ts +11 -0
- package/dist/commands/search/puremd.js +53 -0
- package/dist/commands/search/web.d.ts +1 -0
- package/dist/commands/search/web.js +65 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.js +24 -0
- package/dist/commands/surface.d.ts +2 -0
- package/dist/commands/surface.js +43 -0
- package/dist/commands/sys/__tests__/sync-import.test.js +72 -0
- package/dist/commands/sys/config.js +59 -10
- package/dist/commands/sys/doctor.js +56 -4
- package/dist/commands/sys/prompt-review.d.ts +1 -0
- package/dist/commands/sys/prompt-review.js +178 -0
- package/dist/commands/sys/promptstudio.d.ts +2 -0
- package/dist/commands/sys/promptstudio.js +65 -0
- package/dist/commands/sys/settings.d.ts +2 -0
- package/dist/commands/sys/settings.js +16 -0
- 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/sync.js +311 -159
- package/dist/commands/sys/sysprompt.d.ts +1 -0
- package/dist/commands/sys/sysprompt.js +89 -0
- package/dist/commands/sys.js +10 -5
- package/dist/commands/view-cycle.js +5 -5
- package/dist/commands/view-list.js +3 -3
- package/dist/commands/view-new.js +6 -6
- 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-preflight.test.js +85 -0
- package/dist/core/__tests__/broker-sdk-wiring.test.js +10 -16
- package/dist/core/__tests__/canvas.test.js +37 -1
- package/dist/core/__tests__/chat-view-reconnect.test.js +70 -0
- package/dist/core/__tests__/child-death-wake.test.js +11 -2
- package/dist/core/__tests__/close.test.js +39 -1
- package/dist/core/__tests__/connection-reconnect-resume.test.js +37 -0
- package/dist/core/__tests__/context-intro.test.js +48 -14
- package/dist/core/__tests__/daemon-boot.test.js +204 -9
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +30 -4
- package/dist/core/__tests__/fixtures/fake-engine.js +157 -18
- package/dist/core/__tests__/fixtures/fake-pi-host.js +10 -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__/full/human-new-window-regression.test.js +1 -1
- package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
- package/dist/core/__tests__/helpers/harness.d.ts +1 -1
- package/dist/core/__tests__/helpers/harness.js +3 -3
- package/dist/core/__tests__/human-stranded-deliver.test.js +38 -1
- package/dist/core/__tests__/human-surface-target.test.js +1 -1
- package/dist/core/__tests__/kickoff.test.js +18 -19
- 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 +172 -13
- 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__/push-final-guard.test.js +7 -1
- package/dist/core/__tests__/relaunch-root.test.js +9 -9
- package/dist/core/__tests__/revive.test.js +100 -27
- package/dist/core/__tests__/spawn-root.test.js +24 -1
- package/dist/core/__tests__/stop-guard.test.js +10 -0
- package/dist/core/__tests__/stranded-relaunch.test.js +72 -0
- package/dist/core/__tests__/tmux-surface.test.js +5 -1
- 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/__tests__/yield-ensures-daemon.test.js +54 -0
- package/dist/core/artifact.d.ts +2 -33
- package/dist/core/artifact.js +27 -87
- package/dist/core/bootstrap.js +2 -0
- package/dist/core/canvas/boot.d.ts +48 -0
- package/dist/core/canvas/boot.js +157 -0
- package/dist/core/canvas/browse/__tests__/model.test.js +35 -1
- package/dist/core/canvas/browse/app.js +87 -17
- package/dist/core/canvas/browse/model.d.ts +10 -1
- package/dist/core/canvas/browse/model.js +37 -1
- package/dist/core/canvas/browse/render.js +35 -33
- package/dist/core/canvas/canvas.d.ts +33 -0
- package/dist/core/canvas/canvas.js +138 -8
- package/dist/core/canvas/db.js +121 -9
- package/dist/core/canvas/index.d.ts +1 -1
- package/dist/core/canvas/index.js +1 -1
- package/dist/core/canvas/labels.d.ts +6 -8
- package/dist/core/canvas/labels.js +8 -11
- package/dist/core/canvas/nav-model.d.ts +5 -4
- package/dist/core/canvas/nav-model.js +32 -18
- package/dist/core/canvas/paths.d.ts +18 -1
- package/dist/core/canvas/paths.js +31 -2
- package/dist/core/canvas/pid.d.ts +6 -0
- package/dist/core/canvas/pid.js +13 -0
- package/dist/core/canvas/render.d.ts +25 -0
- package/dist/core/canvas/render.js +96 -13
- package/dist/core/canvas/status-glyph.d.ts +35 -0
- package/dist/core/canvas/status-glyph.js +104 -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 +130 -48
- package/dist/core/command.js +13 -4
- package/dist/core/config.js +114 -16
- package/dist/core/fault-classifier.d.ts +41 -0
- package/dist/core/fault-classifier.js +110 -0
- package/dist/core/feed/inbox.d.ts +15 -0
- package/dist/core/feed/inbox.js +40 -14
- package/dist/core/frontmatter.d.ts +1 -11
- package/dist/core/frontmatter.js +1 -55
- package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
- package/dist/core/hearth/config.d.ts +3 -0
- package/dist/core/hearth/config.js +111 -0
- package/dist/core/hearth/guest-env.d.ts +9 -0
- package/dist/core/hearth/guest-env.js +27 -0
- package/dist/core/hearth/index.d.ts +5 -0
- package/dist/core/hearth/index.js +5 -0
- 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 +28 -0
- package/dist/core/hearth/provider.js +10 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +12 -0
- package/dist/core/hearth/providers/blaxel-bootstrap.js +147 -0
- package/dist/core/hearth/providers/blaxel-home.d.ts +15 -0
- package/dist/core/hearth/providers/blaxel-home.js +136 -0
- package/dist/core/hearth/providers/blaxel.d.ts +31 -0
- package/dist/core/hearth/providers/blaxel.js +282 -0
- package/dist/core/hearth/providers/types.d.ts +77 -0
- package/dist/core/hearth/registry.d.ts +15 -0
- package/dist/core/hearth/registry.js +180 -0
- package/dist/core/hearth/types.d.ts +156 -0
- package/dist/core/help.d.ts +16 -0
- package/dist/core/help.js +2 -0
- package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.js +79 -0
- package/dist/core/{skill-sync → host-exports}/builtins.d.ts +21 -13
- package/dist/core/host-exports/builtins.js +68 -0
- package/dist/core/{skill-sync → host-exports}/export.d.ts +9 -6
- package/dist/core/{skill-sync → host-exports}/export.js +37 -14
- package/dist/core/io.js +1 -1
- package/dist/core/log.d.ts +9 -0
- package/dist/core/log.js +113 -0
- package/dist/core/memory-resolver.d.ts +13 -13
- package/dist/core/memory-resolver.js +70 -51
- package/dist/core/personas/index.d.ts +4 -4
- package/dist/core/personas/index.js +2 -2
- package/dist/core/personas/loader.d.ts +51 -0
- package/dist/core/personas/loader.js +54 -50
- package/dist/core/personas/resolve.d.ts +43 -27
- package/dist/core/personas/resolve.js +336 -94
- 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/auth-reload.d.ts +7 -0
- package/dist/core/runtime/auth-reload.js +69 -0
- package/dist/core/runtime/bearings.d.ts +46 -25
- package/dist/core/runtime/bearings.js +313 -52
- package/dist/core/runtime/branded-host.d.ts +4 -2
- package/dist/core/runtime/branded-host.js +66 -4
- package/dist/core/runtime/broker-protocol.d.ts +40 -5
- package/dist/core/runtime/broker-protocol.js +2 -2
- package/dist/core/runtime/broker.js +343 -18
- package/dist/core/runtime/close.js +39 -31
- package/dist/core/runtime/connectivity.d.ts +12 -0
- package/dist/core/runtime/connectivity.js +73 -0
- package/dist/core/runtime/fault-recovery-nudge.d.ts +2 -0
- package/dist/core/runtime/fault-recovery-nudge.js +2 -0
- package/dist/core/runtime/fault-recovery.d.ts +23 -0
- package/dist/core/runtime/fault-recovery.js +74 -0
- package/dist/core/runtime/fault.d.ts +25 -0
- package/dist/core/runtime/fault.js +176 -0
- package/dist/core/runtime/front-door.d.ts +1 -1
- package/dist/core/runtime/front-door.js +2 -2
- package/dist/core/runtime/host.d.ts +10 -0
- package/dist/core/runtime/host.js +71 -9
- package/dist/core/runtime/kickoff.js +32 -46
- package/dist/core/runtime/launch.d.ts +41 -21
- package/dist/core/runtime/launch.js +165 -52
- package/dist/core/runtime/lifecycle.js +7 -7
- package/dist/core/runtime/model-swap.d.ts +18 -0
- package/dist/core/runtime/model-swap.js +95 -0
- package/dist/core/runtime/naming.d.ts +7 -0
- package/dist/core/runtime/naming.js +61 -9
- package/dist/core/runtime/nodes.js +6 -1
- package/dist/core/runtime/persona.js +16 -17
- package/dist/core/runtime/placement.d.ts +41 -36
- package/dist/core/runtime/placement.js +159 -74
- package/dist/core/runtime/promote.d.ts +2 -0
- package/dist/core/runtime/promote.js +23 -3
- package/dist/core/runtime/recycle.js +13 -11
- package/dist/core/runtime/reset.d.ts +6 -3
- package/dist/core/runtime/reset.js +5 -5
- 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 +19 -8
- package/dist/core/runtime/revive.js +79 -25
- package/dist/core/runtime/roadmap.d.ts +1 -1
- package/dist/core/runtime/roadmap.js +1 -1
- package/dist/core/runtime/spawn.d.ts +3 -3
- package/dist/core/runtime/spawn.js +37 -13
- package/dist/core/runtime/stop-guard.js +11 -6
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux-chrome.d.ts +1 -1
- package/dist/core/runtime/tmux-chrome.js +1 -1
- package/dist/core/runtime/tmux.d.ts +30 -7
- package/dist/core/runtime/tmux.js +138 -84
- package/dist/core/runtime/view-socket-client.d.ts +46 -0
- package/dist/core/runtime/view-socket-client.js +203 -0
- package/dist/core/scope.d.ts +9 -0
- package/dist/core/scope.js +37 -15
- package/dist/core/substrate/index.d.ts +1 -1
- package/dist/core/substrate/index.js +1 -1
- package/dist/core/substrate/on-read.js +39 -25
- package/dist/core/substrate/render.d.ts +10 -13
- package/dist/core/substrate/render.js +56 -51
- package/dist/core/tui/host.js +83 -18
- package/dist/core/view/__tests__/transport-cache.test.js +62 -0
- package/dist/core/view/contract.d.ts +20 -0
- package/dist/core/view/loader.js +2 -2
- package/dist/core/view/stream-local.d.ts +3 -0
- package/dist/core/view/stream-local.js +184 -0
- package/dist/core/view/transport-cache.d.ts +8 -0
- package/dist/core/view/transport-cache.js +38 -0
- package/dist/core/view/transport-local.js +4 -0
- package/dist/core/view/transport.d.ts +7 -1
- 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.d.ts +3 -19
- package/dist/daemon/crtrd.js +360 -280
- package/dist/daemon/manage.d.ts +18 -1
- package/dist/daemon/manage.js +54 -9
- 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.d.ts +1 -0
- package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.d.ts +1 -0
- package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
- package/dist/hearth/control-plane/__tests__/webhook-ingress.test.d.ts +1 -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.d.ts +1 -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/types.js +1 -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__/anthropic-oauth.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.js +289 -0
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/config-timeout.test.js +34 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +203 -0
- package/dist/hearth/wake-proxy/__tests__/hardening.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/hardening.test.js +59 -0
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.js +372 -0
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.js +258 -0
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.js +437 -0
- package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.js +15 -0
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.js +141 -0
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.d.ts +1 -0
- package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.js +143 -0
- package/dist/hearth/wake-proxy/anthropic-oauth.d.ts +58 -0
- package/dist/hearth/wake-proxy/anthropic-oauth.js +189 -0
- package/dist/hearth/wake-proxy/auth.d.ts +22 -0
- package/dist/hearth/wake-proxy/auth.js +128 -0
- package/dist/hearth/wake-proxy/config.d.ts +2 -0
- package/dist/hearth/wake-proxy/config.js +151 -0
- package/dist/hearth/wake-proxy/guest-source.d.ts +14 -0
- package/dist/hearth/wake-proxy/guest-source.js +130 -0
- package/dist/hearth/wake-proxy/hearth-status.d.ts +44 -0
- package/dist/hearth/wake-proxy/hearth-status.js +267 -0
- package/dist/hearth/wake-proxy/home.d.ts +61 -0
- package/dist/hearth/wake-proxy/home.js +333 -0
- package/dist/hearth/wake-proxy/main.d.ts +1 -0
- package/dist/hearth/wake-proxy/main.js +134 -0
- package/dist/hearth/wake-proxy/model-auth.d.ts +13 -0
- package/dist/hearth/wake-proxy/model-auth.js +345 -0
- package/dist/hearth/wake-proxy/proxy.d.ts +35 -0
- package/dist/hearth/wake-proxy/proxy.js +716 -0
- package/dist/hearth/wake-proxy/public-source-gate.d.ts +9 -0
- package/dist/hearth/wake-proxy/public-source-gate.js +409 -0
- package/dist/hearth/wake-proxy/redact.d.ts +1 -0
- package/dist/hearth/wake-proxy/redact.js +17 -0
- package/dist/hearth/wake-proxy/server.d.ts +11 -0
- package/dist/hearth/wake-proxy/server.js +142 -0
- package/dist/hearth/wake-proxy/state.d.ts +18 -0
- package/dist/hearth/wake-proxy/state.js +342 -0
- package/dist/hearth/wake-proxy/types.d.ts +76 -0
- package/dist/hearth/wake-proxy/types.js +1 -0
- package/dist/index.js +3 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +6 -5
- package/dist/pi-extensions/canvas-context-intro.js +7 -7
- package/dist/pi-extensions/canvas-doc-substrate.js +47 -24
- package/dist/pi-extensions/canvas-nav.js +16 -9
- package/dist/pi-extensions/canvas-stophook.d.ts +1 -1
- package/dist/pi-extensions/canvas-stophook.js +78 -11
- package/dist/prompts/view.js +7 -8
- package/dist/types.d.ts +39 -20
- package/dist/types.js +38 -13
- package/dist/web/runtime.js +141 -42
- package/dist/web/transport-http.js +7 -5
- package/dist/web/transport-stream.d.ts +3 -0
- package/dist/web/transport-stream.js +204 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-BYwT3kSJ.woff +0 -0
- package/dist/web-client/assets/fragment-mono-latin-400-normal-yxdJ5AmL.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-BbKYyvR9.woff2 +0 -0
- package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-CT4YFKeK.woff +0 -0
- package/dist/web-client/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2 +0 -0
- package/dist/web-client/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2 +0 -0
- package/dist/web-client/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2 +0 -0
- package/dist/web-client/assets/index-BRKxe-hy.js +80 -0
- package/dist/web-client/assets/index-BZUxTkv5.css +2 -0
- package/dist/web-client/assets/instrument-sans-latin-ext-wght-normal-B5bTHO_g.woff2 +0 -0
- package/dist/web-client/assets/instrument-sans-latin-wght-normal-BbzFLZTg.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2 +0 -0
- package/dist/web-client/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2 +0 -0
- package/dist/web-client/index.html +3 -2
- package/package.json +37 -11
- package/scripts/postinstall.mjs +8 -0
- package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
- 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 -39
- 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__/draw-style.test.js +0 -258
- package/dist/core/__tests__/error-stall-recycle.test.js +0 -141
- package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
- package/dist/core/__tests__/keystone.test.js +0 -185
- package/dist/core/__tests__/listing-completeness.test.js +0 -31
- package/dist/core/__tests__/memory-resolver.test.js +0 -108
- package/dist/core/__tests__/memory.test.js +0 -60
- package/dist/core/__tests__/pane-column.test.js +0 -153
- package/dist/core/__tests__/persona-compose.test.js +0 -53
- package/dist/core/__tests__/persona-subkind.test.js +0 -65
- package/dist/core/__tests__/persona.test.js +0 -107
- package/dist/core/__tests__/unknown-path.test.js +0 -58
- package/dist/core/canvas/wakeups.d.ts +0 -76
- package/dist/core/canvas/wakeups.js +0 -185
- package/dist/core/skill-sync/__tests__/dry-run-wrote-count.test.js +0 -57
- package/dist/core/skill-sync/builtins.js +0 -112
- package/dist/core/skill-sync/claude-plugins.d.ts +0 -23
- package/dist/core/skill-sync/claude-plugins.js +0 -71
- package/dist/core/skill-sync/engine.d.ts +0 -42
- package/dist/core/skill-sync/engine.js +0 -633
- package/dist/core/skill-sync/manifest.d.ts +0 -64
- package/dist/core/skill-sync/manifest.js +0 -181
- package/dist/core/skill-sync/profile.d.ts +0 -76
- package/dist/core/skill-sync/profile.js +0 -173
- package/dist/core/skill-sync/snapshot.d.ts +0 -57
- package/dist/core/skill-sync/snapshot.js +0 -120
- package/dist/pi-extensions/canvas-commands.d.ts +0 -37
- package/dist/pi-extensions/canvas-commands.js +0 -113
- package/dist/pi-extensions/canvas-resume.d.ts +0 -21
- package/dist/pi-extensions/canvas-resume.js +0 -83
- package/dist/pi-extensions/canvas-view.d.ts +0 -21
- package/dist/pi-extensions/canvas-view.js +0 -76
- package/dist/web-client/assets/index-BUvQb4hR.css +0 -2
- package/dist/web-client/assets/index-ClLQXYAE.js +0 -10
- /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{clipboard-image.test.d.ts → crtr-output-render.test.d.ts} +0 -0
- /package/dist/clients/{attach/__tests__/editor-newline.test.d.ts → web/__tests__/source-cache.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/git-info.test.d.ts → commands/sys/__tests__/sync-import.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → core/__tests__/broker-preflight.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → core/__tests__/chat-view-reconnect.test.d.ts} +0 -0
- /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → core/__tests__/connection-reconnect-resume.test.d.ts} +0 -0
- /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
- /package/dist/core/__tests__/{argv-parser.test.d.ts → preview-registry-sync.test.d.ts} +0 -0
- /package/dist/core/__tests__/{draw-style.test.d.ts → prune-to-limit.test.d.ts} +0 -0
- /package/dist/core/__tests__/{error-stall-recycle.test.d.ts → stranded-relaunch.test.d.ts} +0 -0
- /package/dist/core/__tests__/{frame-decoder-perf.test.d.ts → trigger-migration.test.d.ts} +0 -0
- /package/dist/core/__tests__/{keystone.test.d.ts → yield-ensures-daemon.test.d.ts} +0 -0
- /package/dist/core/{__tests__/listing-completeness.test.d.ts → hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
- /package/dist/core/{__tests__/memory-resolver.test.d.ts → hearth/providers/types.js} +0 -0
- /package/dist/core/{__tests__/memory.test.d.ts → hearth/types.js} +0 -0
- /package/dist/core/{__tests__/pane-column.test.d.ts → host-exports/__tests__/export-prunes-boot-skill.test.d.ts} +0 -0
- /package/dist/core/{__tests__/persona-compose.test.d.ts → view/__tests__/transport-cache.test.d.ts} +0 -0
- /package/dist/{core/__tests__/persona-subkind.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
- /package/dist/{core/__tests__/persona.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
- /package/dist/{core/__tests__/unknown-path.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
- /package/dist/{core/skill-sync/__tests__/dry-run-wrote-count.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { buildBootstrapScript } from '../hearth/providers/blaxel-bootstrap.js';
|
|
4
|
+
const FIRST_BOOT_OPTS = {
|
|
5
|
+
guestHome: '/home/agent',
|
|
6
|
+
crtrVersion: '0.3.33',
|
|
7
|
+
relayToken: 'relay-token',
|
|
8
|
+
webPort: 7878,
|
|
9
|
+
piAuthJson: '{"anthropic":{"type":"oauth","refresh":"r","access":"a","expires":1}}',
|
|
10
|
+
piPackages: ['npm:pi-claude-oauth-adapter@0.1.2'],
|
|
11
|
+
modelLaddersJson: '{"modelLadders":{"anthropic":{"strong":"anthropic/claude-opus-4-8:high"},"openai":{"strong":"openai-codex/gpt-5.5:high"},"defaultProvider":"anthropic"}}',
|
|
12
|
+
isFirstProvision: true,
|
|
13
|
+
};
|
|
14
|
+
function indexOf(script, needle) {
|
|
15
|
+
const i = script.indexOf(needle);
|
|
16
|
+
assert.ok(i !== -1, `expected to find ${JSON.stringify(needle)} in script`);
|
|
17
|
+
return i;
|
|
18
|
+
}
|
|
19
|
+
test('first provision seeds config/ladders and pi settings, never the rotation pool, and never installs', () => {
|
|
20
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
21
|
+
// Seeds that DO belong (config template + model ladders + pi settings +
|
|
22
|
+
// optional single auth.json).
|
|
23
|
+
assert.match(script, /settings\.json/);
|
|
24
|
+
assert.match(script, /pi-crtr-extensions/);
|
|
25
|
+
assert.match(script, /CRTR_CONFIG_JSON/);
|
|
26
|
+
assert.match(script, /PI_AUTH_JSON/);
|
|
27
|
+
// The rotation pool is dead product — bridge/migration only, never emitted
|
|
28
|
+
// by the rewritten bootstrap regardless of opts shape.
|
|
29
|
+
assert.doesNotMatch(script, /ANTHROPIC_SUBSCRIPTIONS_JSON/);
|
|
30
|
+
assert.doesNotMatch(script, /OPENAI_CODEX_SUBSCRIPTIONS_JSON/);
|
|
31
|
+
assert.doesNotMatch(script, /PROVIDER_ROTATION_JSON/);
|
|
32
|
+
assert.doesNotMatch(script, /anthropic-subscriptions\.json/);
|
|
33
|
+
assert.doesNotMatch(script, /openai-codex-subscriptions\.json/);
|
|
34
|
+
assert.doesNotMatch(script, /provider-rotation\.json/);
|
|
35
|
+
// No boot-time install of any kind — the image bakes crtr; bootstrap only
|
|
36
|
+
// asserts it.
|
|
37
|
+
assert.doesNotMatch(script, /npm install/);
|
|
38
|
+
});
|
|
39
|
+
test('recreate (isFirstProvision:false) emits no seeds at all and revives the existing node', () => {
|
|
40
|
+
const script = buildBootstrapScript({
|
|
41
|
+
...FIRST_BOOT_OPTS,
|
|
42
|
+
isFirstProvision: false,
|
|
43
|
+
nodeId: 'node-123',
|
|
44
|
+
});
|
|
45
|
+
assert.doesNotMatch(script, /settings\.json/);
|
|
46
|
+
assert.doesNotMatch(script, /CRTR_CONFIG_JSON/);
|
|
47
|
+
assert.doesNotMatch(script, /PI_AUTH_JSON/);
|
|
48
|
+
assert.doesNotMatch(script, /ANTHROPIC_SUBSCRIPTIONS_JSON/);
|
|
49
|
+
assert.doesNotMatch(script, /OPENAI_CODEX_SUBSCRIPTIONS_JSON/);
|
|
50
|
+
assert.doesNotMatch(script, /PROVIDER_ROTATION_JSON/);
|
|
51
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' canvas revive 'node-123'/);
|
|
52
|
+
assert.doesNotMatch(script, /node new --root/);
|
|
53
|
+
});
|
|
54
|
+
test('recreate without a nodeId fails fast at script-generation time, not inside the guest', () => {
|
|
55
|
+
assert.throws(() => buildBootstrapScript({ ...FIRST_BOOT_OPTS, isFirstProvision: false, nodeId: null }));
|
|
56
|
+
assert.throws(() => buildBootstrapScript({ ...FIRST_BOOT_OPTS, isFirstProvision: false, nodeId: ' ' }));
|
|
57
|
+
});
|
|
58
|
+
test('an empty relay token fails fast at script-generation time — the web lane must never bind unauthenticated', () => {
|
|
59
|
+
assert.throws(() => buildBootstrapScript({ ...FIRST_BOOT_OPTS, relayToken: '' }));
|
|
60
|
+
assert.throws(() => buildBootstrapScript({ ...FIRST_BOOT_OPTS, relayToken: ' ' }));
|
|
61
|
+
});
|
|
62
|
+
test('asserts the baked crtr command surface — never falls back to the retired top-level alias', () => {
|
|
63
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
64
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web -h/);
|
|
65
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web serve -h/);
|
|
66
|
+
assert.match(script, /command surface assertion FAILED/);
|
|
67
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web serve --host 0\.0\.0\.0/);
|
|
68
|
+
// Never the retired top-level alias, anywhere in the script (e.g. as a
|
|
69
|
+
// fallback if the surface assertion fails).
|
|
70
|
+
assert.doesNotMatch(script, /[^/]crtr web serve/);
|
|
71
|
+
});
|
|
72
|
+
test('asserts the pinned crtr version against the baked binary and fails closed on mismatch', () => {
|
|
73
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
74
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' --json sys version/);
|
|
75
|
+
assert.match(script, /crtr version assertion FAILED/);
|
|
76
|
+
assert.match(script, /!= '0\.3\.33'/);
|
|
77
|
+
});
|
|
78
|
+
test('every web-serve invocation carries a non-empty --token, enforcing relay-token auth on every lane', () => {
|
|
79
|
+
const firstBoot = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
80
|
+
const recreate = buildBootstrapScript({ ...FIRST_BOOT_OPTS, isFirstProvision: false, nodeId: 'node-123' });
|
|
81
|
+
for (const script of [firstBoot, recreate]) {
|
|
82
|
+
const serveLine = script.split('\n').find((line) => line.includes('surface web serve --host'));
|
|
83
|
+
assert.ok(serveLine, 'expected a crtr surface web serve invocation');
|
|
84
|
+
assert.match(serveLine, /--token 'relay-token'/);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
test('every crtr invocation targets the baked binary by absolute path, never a bare PATH lookup, defeating a stale volume-installed crtr shadowing it (review Major 1)', () => {
|
|
88
|
+
const firstBoot = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
89
|
+
const recreate = buildBootstrapScript({ ...FIRST_BOOT_OPTS, isFirstProvision: false, nodeId: 'node-123' });
|
|
90
|
+
for (const script of [firstBoot, recreate]) {
|
|
91
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' --json sys version/);
|
|
92
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web -h/);
|
|
93
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web serve -h/);
|
|
94
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' canvas daemon start/);
|
|
95
|
+
assert.match(script, /'\/usr\/local\/bin\/crtr' surface web serve --host 0\.0\.0\.0/);
|
|
96
|
+
// No bare `crtr <subcommand>` invocation anywhere — only the `command -v
|
|
97
|
+
// crtr` shadow-detection probe and human-readable error-message text are
|
|
98
|
+
// allowed to reference it by bare name.
|
|
99
|
+
const bareInvocations = script
|
|
100
|
+
.split('\n')
|
|
101
|
+
.filter((line) => !line.trim().startsWith('printf'))
|
|
102
|
+
.filter((line) => /(^|[\s(])crtr (canvas|surface|--json)/.test(line));
|
|
103
|
+
assert.deepEqual(bareInvocations, []);
|
|
104
|
+
}
|
|
105
|
+
assert.match(firstBoot, /'\/usr\/local\/bin\/crtr' --json node new --root/);
|
|
106
|
+
});
|
|
107
|
+
test('asserts a bare `crtr` PATH lookup resolves to the baked binary, catching a stale volume-installed crtr shadowing it', () => {
|
|
108
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
109
|
+
assert.match(script, /resolved_crtr="\$\(command -v crtr 2>\/dev\/null \|\| true\)"/);
|
|
110
|
+
assert.match(script, /if \[ "\$resolved_crtr" != '\/usr\/local\/bin\/crtr' \]; then/);
|
|
111
|
+
assert.match(script, /stale crtr shadowing baked binary/);
|
|
112
|
+
});
|
|
113
|
+
test('exports a PATH with the baked /usr/local/bin ahead of the legacy (dead) per-home runtime bin dir', () => {
|
|
114
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
115
|
+
assert.match(script, /export PATH='\/usr\/local\/bin:\/usr\/bin:\/bin'/);
|
|
116
|
+
assert.doesNotMatch(script, /crtr-runtime\/bin/);
|
|
117
|
+
});
|
|
118
|
+
test('mkdirs the tmpfs CRTR_SOCK_DIR/CRTR_PIDFILE dirs strictly before the daemon starts, and CRTR_CANVAS_DB stays unset', () => {
|
|
119
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
120
|
+
assert.match(script, /export CRTR_SOCK_DIR='\/run\/crtr\/socks'/);
|
|
121
|
+
assert.match(script, /export CRTR_PIDFILE='\/run\/crtr\/crtrd\.pid'/);
|
|
122
|
+
assert.match(script, /export CRTR_HOME='\/home\/agent\/\.crouter\/canvas'/);
|
|
123
|
+
assert.doesNotMatch(script, /CRTR_CANVAS_DB=/);
|
|
124
|
+
assert.match(script, /unset CRTR_CANVAS_DB/);
|
|
125
|
+
const mkdirIdx = indexOf(script, '/run/crtr/socks');
|
|
126
|
+
const daemonStartIdx = indexOf(script, "'/usr/local/bin/crtr' canvas daemon start");
|
|
127
|
+
assert.ok(mkdirIdx < daemonStartIdx, 'tmpfs mkdir must precede daemon start');
|
|
128
|
+
const mkdirLine = script.split('\n').find((line) => line.startsWith('mkdir -p') && line.includes('/run/crtr/socks'));
|
|
129
|
+
assert.ok(mkdirLine, 'expected a single mkdir line covering the tmpfs dirs');
|
|
130
|
+
});
|
|
131
|
+
test('primes the baked pi Claude OAuth adapter into the npm cache path pi resolves, existence-gated', () => {
|
|
132
|
+
const script = buildBootstrapScript(FIRST_BOOT_OPTS);
|
|
133
|
+
assert.match(script, /\/opt\/crouter\/node_modules\/pi-claude-oauth-adapter/);
|
|
134
|
+
assert.match(script, /\.pi\/agent\/npm\/node_modules\/pi-claude-oauth-adapter/);
|
|
135
|
+
assert.match(script, /cp -R/);
|
|
136
|
+
});
|
|
@@ -76,7 +76,7 @@ export interface Harness {
|
|
|
76
76
|
spawnHeadlessChild(parentId: string, task: string, o?: SpawnOpts): Promise<string>;
|
|
77
77
|
spawnHeadlessChildNoBoot(parentId: string, task: string, o?: SpawnOpts): Promise<string>;
|
|
78
78
|
turn(nodeId: string, text?: string): Promise<void>;
|
|
79
|
-
stop(nodeId: string, reason?: 'stop' | 'length' | 'aborted' | 'error'): Promise<void>;
|
|
79
|
+
stop(nodeId: string, reason?: 'stop' | 'length' | 'aborted' | 'error', errorMessage?: string): Promise<void>;
|
|
80
80
|
finish(nodeId: string, finalText: string): Promise<void>;
|
|
81
81
|
tick(now?: number): Promise<void>;
|
|
82
82
|
awaitBoot(nodeId: string, o?: {
|
|
@@ -344,7 +344,7 @@ export async function createHarness(opts = {}) {
|
|
|
344
344
|
async spawnHeadlessChild(parentId, task, o = {}) {
|
|
345
345
|
const before = new Set(nodeDirs());
|
|
346
346
|
// POST-CUT: `--headless` is gone — EVERY node is a broker. spawnChild may
|
|
347
|
-
// still open a background `crtr attach` viewer WINDOW (the §A.3 spawn UX),
|
|
347
|
+
// still open a background `crtr surface attach` viewer WINDOW (the §A.3 spawn UX),
|
|
348
348
|
// but that viewer connects to the broker over view.sock as a SEPARATE
|
|
349
349
|
// process and never touches the engine — so the broker-socket gates here
|
|
350
350
|
// (zero-viewer dialogs, controller arbitration, one-writer) are unaffected
|
|
@@ -389,9 +389,9 @@ export async function createHarness(opts = {}) {
|
|
|
389
389
|
sendCmd(nodeId, { cmd: 'turn', id: `turn-${Date.now()}`, text });
|
|
390
390
|
await awaitAgentEnd(nodeId, base, `turn agent_end for ${nodeId}`);
|
|
391
391
|
},
|
|
392
|
-
async stop(nodeId, reason = 'stop') {
|
|
392
|
+
async stop(nodeId, reason = 'stop', errorMessage) {
|
|
393
393
|
const base = eventCount(nodeId, 'agent_end');
|
|
394
|
-
sendCmd(nodeId, { cmd: 'stop', id: `stop-${Date.now()}`, reason });
|
|
394
|
+
sendCmd(nodeId, { cmd: 'stop', id: `stop-${Date.now()}`, reason, errorMessage });
|
|
395
395
|
await awaitAgentEnd(nodeId, base, `stop agent_end for ${nodeId}`);
|
|
396
396
|
},
|
|
397
397
|
async finish(nodeId, finalText) {
|
|
@@ -22,7 +22,7 @@ import { closeDb } from '../canvas/db.js';
|
|
|
22
22
|
import { readInboxSince } from '../feed/inbox.js';
|
|
23
23
|
import { interactionDir, interactionsRoot } from '../artifact.js';
|
|
24
24
|
import { atomicWriteJson, deckPath } from '@crouton-kit/humanloop';
|
|
25
|
-
import { finalizeResolvedInteraction } from '../../commands/human/queue.js';
|
|
25
|
+
import { finalizeResolvedInteraction, acquireInteractionClaim } from '../../commands/human/queue.js';
|
|
26
26
|
let home;
|
|
27
27
|
// A unique cwd so interactionDir (keyed off the REAL homedir + mangled cwd, NOT
|
|
28
28
|
// CRTR_HOME) lands in an isolated, cleanable subtree.
|
|
@@ -96,6 +96,43 @@ test('a canceled-on-disk response reaps the bridge without delivering a result',
|
|
|
96
96
|
const blob = JSON.stringify(readInboxSince('A'));
|
|
97
97
|
assert.match(blob, /no answer is coming/);
|
|
98
98
|
});
|
|
99
|
+
test('the _run held-claim path delivers, and finalize without the claim self-conflicts', async () => {
|
|
100
|
+
// BUG REGRESSION (_run ask self-claim): the detached `_run` ask worker holds
|
|
101
|
+
// the exclusive resolve.lock across the blocking ask(), then must deliver the
|
|
102
|
+
// answer. If it calls finalizeResolvedInteraction WITHOUT passing its held
|
|
103
|
+
// claim, finalize re-acquires the same lock, sees this very process's live
|
|
104
|
+
// lock (EEXIST, owner.pid == self, pidAlive true) -> 'claimed' -> returns
|
|
105
|
+
// false, and the human's answer never reaches the asker. Passing the held
|
|
106
|
+
// claim lets finalize run under the worker's own lock.
|
|
107
|
+
createNode(node('A', null));
|
|
108
|
+
createNode(node('B', 'A'));
|
|
109
|
+
subscribe('A', 'B');
|
|
110
|
+
// Set up the deck + run.json but NOT the answer yet, then hold the claim
|
|
111
|
+
// exactly as the _run worker does (no opts) BEFORE ask() resolves the deck.
|
|
112
|
+
const idir = interactionDir('B', workCwd);
|
|
113
|
+
mkdirSync(idir, { recursive: true });
|
|
114
|
+
atomicWriteJson(deckPath(idir), { interactions: [] });
|
|
115
|
+
atomicWriteJson(join(idir, 'run.json'), { mode: 'ask', job_id: 'B' });
|
|
116
|
+
const claim = acquireInteractionClaim(idir, 'B');
|
|
117
|
+
assert.equal(typeof claim === 'object', true, 'claim must be acquired');
|
|
118
|
+
if (typeof claim !== 'object')
|
|
119
|
+
return;
|
|
120
|
+
// ask() then writes the human's answer to disk while the claim is held.
|
|
121
|
+
atomicWriteJson(join(idir, 'response.json'), {
|
|
122
|
+
responses: [{ id: 'q', selectedOptionId: 'resync', freetext: 'go ahead' }],
|
|
123
|
+
completedAt: '2026-06-10T22:27:07.000Z',
|
|
124
|
+
});
|
|
125
|
+
// Without the held claim, finalize from the SAME pid self-conflicts on the
|
|
126
|
+
// live lock and must NOT deliver (this is the stranding regression).
|
|
127
|
+
assert.equal(await finalizeResolvedInteraction('B'), false, 'self-held lock must block claimless finalize');
|
|
128
|
+
assert.equal(getNode('B')?.status, 'active', 'bridge must still be live after the self-conflicting call');
|
|
129
|
+
// Passing the held claim lets finalize run under the worker's own lock and
|
|
130
|
+
// deliver the answer back to the asker, then reap the bridge.
|
|
131
|
+
assert.equal(await finalizeResolvedInteraction('B', claim), true, 'held claim must deliver');
|
|
132
|
+
assert.equal(getNode('B')?.status, 'done', 'bridge reaped after held-claim deliver');
|
|
133
|
+
assert.match(JSON.stringify(readInboxSince('A')), /resync/, 'asker must receive the human selection');
|
|
134
|
+
claim.release();
|
|
135
|
+
});
|
|
99
136
|
test('an unresolved (no response.json) live bridge is left untouched', async () => {
|
|
100
137
|
createNode(node('A', null));
|
|
101
138
|
createNode(node('B', 'A'));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Run with: node --import tsx/esm --test src/core/__tests__/human-surface-target.test.ts
|
|
2
2
|
//
|
|
3
|
-
// BUG REGRESSION: `crtr human ask|
|
|
3
|
+
// BUG REGRESSION: `crtr human ask|review|notify` surfaced its humanloop
|
|
4
4
|
// TUI in the backstage `crtr` session (the asking node's own pane) — a session
|
|
5
5
|
// the user never watches — because spawnAndDetach was called with no `-t`
|
|
6
6
|
// target. The fix routes the TUI to the HIGHEST FOCUSED node of the asking
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { test, before, after, beforeEach } from 'node:test';
|
|
9
9
|
import assert from 'node:assert/strict';
|
|
10
10
|
import { mkdtempSync, rmSync, existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
11
|
-
import {
|
|
11
|
+
import { tmpdir } from 'node:os';
|
|
12
12
|
import { join } from 'node:path';
|
|
13
13
|
import { createNode, subscribe } from '../canvas/canvas.js';
|
|
14
14
|
import { reportsDir } from '../canvas/paths.js';
|
|
@@ -29,9 +29,7 @@ function node(id) {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
before(() => {
|
|
32
|
-
|
|
33
|
-
// exercise the tildify() collapse in reportHistoryLines.
|
|
34
|
-
home = mkdtempSync(join(homedir(), '.crtr-kickoff-'));
|
|
32
|
+
home = mkdtempSync(join(tmpdir(), 'crtr-kickoff-'));
|
|
35
33
|
process.env['CRTR_HOME'] = home;
|
|
36
34
|
});
|
|
37
35
|
beforeEach(() => {
|
|
@@ -76,10 +74,10 @@ test('the feed block frames awaiting workers as alive + auto-waking, so a fresh
|
|
|
76
74
|
test('a fresh revive is pointed at its subscriptions\' on-disk report history (catch-up bug)', () => {
|
|
77
75
|
// Regression for the fresh-revive catch-up bug: on a refresh-yield
|
|
78
76
|
// (resume:false) the old conversation is gone AND the inbox cursor has already
|
|
79
|
-
// advanced past everything drained pre-yield, so the revived node
|
|
80
|
-
//
|
|
81
|
-
// forever at reports/<ts>-<kind>.md; the kickoff
|
|
82
|
-
//
|
|
77
|
+
// advanced past everything drained pre-yield, so the revived node needs a
|
|
78
|
+
// durable catch-up breadcrumb for reports its subscriptions pushed BEFORE the
|
|
79
|
+
// yield. The bodies persist forever at reports/<ts>-<kind>.md; the kickoff
|
|
80
|
+
// surfaces a collapsed index with the newest ref and expansion commands.
|
|
83
81
|
const parent = createNode(node('p1'));
|
|
84
82
|
const worker = createNode(node('w1'));
|
|
85
83
|
subscribe(parent.node_id, worker.node_id);
|
|
@@ -91,17 +89,18 @@ test('a fresh revive is pointed at its subscriptions\' on-disk report history (c
|
|
|
91
89
|
writeFileSync(older, '---\n---\nearly progress', 'utf8');
|
|
92
90
|
writeFileSync(newer, '---\n---\nthe result', 'utf8');
|
|
93
91
|
const msg = buildReviveKickoff(parent, drainBearings(parent));
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
assert.ok(msg.includes(
|
|
101
|
-
assert.ok(msg.includes(
|
|
102
|
-
assert.ok(!msg.includes(older), 'absolute
|
|
103
|
-
assert.ok(msg.
|
|
104
|
-
|
|
92
|
+
// The feed block stays condensed: it reports that history exists and surfaces
|
|
93
|
+
// the newest report ref for immediate dereference, while older refs stay one
|
|
94
|
+
// command away instead of being preloaded into the revive prompt.
|
|
95
|
+
const olderRef = `${worker.node_id}:reports/20260608T120000-update.md`;
|
|
96
|
+
const newerRef = `${worker.node_id}:reports/20260608T130000-final.md`;
|
|
97
|
+
assert.ok(/Report history on disk \(collapsed\): 2 reports across 1 subscribed node/.test(msg));
|
|
98
|
+
assert.ok(msg.includes(`latest final: ${newerRef}`), 'newest report ref surfaced');
|
|
99
|
+
assert.ok(!msg.includes(olderRef), 'older report ref omitted from collapsed kickoff');
|
|
100
|
+
assert.ok(!msg.includes(older), 'absolute report paths not rendered');
|
|
101
|
+
assert.ok(!msg.includes(newer), 'absolute report paths not rendered');
|
|
102
|
+
assert.ok(/canvas history read <ref>/.test(msg), 'points at one-report expansion');
|
|
103
|
+
assert.ok(/canvas history show <node-id> --type report/.test(msg), 'points at full per-node expansion');
|
|
105
104
|
assert.ok(/feed read --all/.test(msg), 'points at the cursor-independent full-history replay');
|
|
106
105
|
});
|
|
107
106
|
test('buildReviveKickoff is pure — building twice eats nothing', () => {
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
//
|
|
9
9
|
// THREE-PART LOCK HEADER ──────────────────────────────────────────────────
|
|
10
10
|
// (1) BUG LOCKED — the demote/recycle SPLIT and the A4 steer-loss boundary:
|
|
11
|
-
// • `node demote` flips lifecycle→TERMINAL IN PLACE — keeps MODE, parentage,
|
|
11
|
+
// • `node lifecycle demote` flips lifecycle→TERMINAL IN PLACE — keeps MODE, parentage,
|
|
12
12
|
// and a live (active) status; NOT finalized. It is NOT a mode flip.
|
|
13
|
-
// • `node recycle` is FINISH+RECYCLE — pushes a final → done (mode KEPT), and
|
|
13
|
+
// • `node lifecycle recycle` is FINISH+RECYCLE — pushes a final → done (mode KEPT), and
|
|
14
14
|
// mints a DIFFERENT fresh general/base/resident root.
|
|
15
15
|
// • A4: a base→orchestrator yield auto-promotes (mode→orchestrator) and sets
|
|
16
16
|
// intent=refresh but NEVER commits persona_ack — the drift is left pending
|
|
@@ -49,16 +49,16 @@ function persona(m) {
|
|
|
49
49
|
}
|
|
50
50
|
// ===========================================================================
|
|
51
51
|
// (b) THE demote / recycle SPLIT — two DISTINCT verbs:
|
|
52
|
-
// • `node demote` flips a LIVE node's lifecycle→TERMINAL IN PLACE — it keeps
|
|
52
|
+
// • `node lifecycle demote` flips a LIVE node's lifecycle→TERMINAL IN PLACE — it keeps
|
|
53
53
|
// its MODE and parentage, keeps running (active), is NOT finalized; it now
|
|
54
54
|
// merely owes a final up the spine (vision F5). MODE is untouched.
|
|
55
|
-
// • `node recycle` is FINISH+RECYCLE — push final → done, then recycle the pane
|
|
55
|
+
// • `node lifecycle recycle` is FINISH+RECYCLE — push final → done, then recycle the pane
|
|
56
56
|
// into a FRESH general/base/resident root (a DIFFERENT node). The recycled
|
|
57
57
|
// node keeps mode=orchestrator (it is merely `done`).
|
|
58
58
|
// This test drives demote via the real CLI verb and recycle via the real
|
|
59
59
|
// recycleNode, pinning each behavior at the model layer.
|
|
60
60
|
// ===========================================================================
|
|
61
|
-
test('node demote flips lifecycle→terminal IN PLACE; node recycle is FINISH+RECYCLE', { timeout: 20_000 }, async () => {
|
|
61
|
+
test('node lifecycle demote flips lifecycle→terminal IN PLACE; node lifecycle recycle is FINISH+RECYCLE', { timeout: 20_000 }, async () => {
|
|
62
62
|
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-live-demote' });
|
|
63
63
|
try {
|
|
64
64
|
const A = h.spawnRoot('resident root');
|
|
@@ -66,7 +66,7 @@ test('node demote flips lifecycle→terminal IN PLACE; node recycle is FINISH+RE
|
|
|
66
66
|
subscribe(A, B, true);
|
|
67
67
|
// Make B resident + orchestrator so the demote's flip→terminal is visible
|
|
68
68
|
// and we can prove MODE/parentage survive it.
|
|
69
|
-
assert.equal(h.cli(B, ['node', 'lifecycle', 'resident', '--node', B]).code, 0, 'B → resident');
|
|
69
|
+
assert.equal(h.cli(B, ['node', 'config', '--lifecycle', 'resident', '--node', B]).code, 0, 'B → resident');
|
|
70
70
|
assert.equal(h.cli(B, ['node', 'promote', '--kind', 'developer']).code, 0, 'promote B');
|
|
71
71
|
{
|
|
72
72
|
const b = h.node(B);
|
|
@@ -74,10 +74,10 @@ test('node demote flips lifecycle→terminal IN PLACE; node recycle is FINISH+RE
|
|
|
74
74
|
assert.equal(b.mode, 'orchestrator', 'B orchestrator before demote');
|
|
75
75
|
}
|
|
76
76
|
const bParent = h.node(B).parent;
|
|
77
|
-
// --- node demote: flip-to-terminal IN PLACE. Keeps B alive, MODE/parentage
|
|
77
|
+
// --- node lifecycle demote: flip-to-terminal IN PLACE. Keeps B alive, MODE/parentage
|
|
78
78
|
// untouched, NOT finalized.
|
|
79
|
-
const dem = h.cli(B, ['node', 'demote', '--node', B]);
|
|
80
|
-
assert.equal(dem.code, 0, `node demote exit 0\n${dem.stderr}`);
|
|
79
|
+
const dem = h.cli(B, ['node', 'lifecycle', 'demote', '--node', B]);
|
|
80
|
+
assert.equal(dem.code, 0, `node lifecycle demote exit 0\n${dem.stderr}`);
|
|
81
81
|
assert.match(dem.stdout, /^Demoted /, `demote rendered\n${dem.stdout}`);
|
|
82
82
|
{
|
|
83
83
|
const b = h.node(B);
|
|
@@ -87,7 +87,7 @@ test('node demote flips lifecycle→terminal IN PLACE; node recycle is FINISH+RE
|
|
|
87
87
|
assert.equal(b.status, 'active', 'demote does NOT finish B — it keeps running in place');
|
|
88
88
|
assert.notEqual(b.intent ?? null, 'done', 'demote does NOT finalize B');
|
|
89
89
|
}
|
|
90
|
-
// --- node recycle: FINISH + RECYCLE. Driven through the real recycleNode.
|
|
90
|
+
// --- node lifecycle recycle: FINISH + RECYCLE. Driven through the real recycleNode.
|
|
91
91
|
// Its FINISH+MINT model half runs fully; the pane respawn is the only
|
|
92
92
|
// tmux artifact (no pane for a broker node), so recycled:false while
|
|
93
93
|
// finalized:true and a fresh root IS minted — the bug-lock (recycle ≠
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// HEADLESS RETARGET (foundation-spec §C.12 + §E). AXIS: LIVE MUTATION of the
|
|
4
4
|
// 2×2 state vector (mode {base,orchestrator} × lifecycle {terminal,resident})
|
|
5
|
-
// driven through the REAL `node lifecycle` / `node promote` CLI verbs against
|
|
5
|
+
// driven through the REAL `node config --lifecycle` / `node promote` CLI verbs against
|
|
6
6
|
// FABRICATED broker-hosted (paneless) nodes — no real tmux session, no pane
|
|
7
7
|
// chrome, and NO real broker boot. The mutation verbs and the decisions they
|
|
8
8
|
// gate are host-independent model logic, so the file never pays the ~5s SDK-boot
|
|
@@ -50,7 +50,7 @@ function persona(m) {
|
|
|
50
50
|
}
|
|
51
51
|
const SIGNALS = { pushedFinal: false, askedHuman: false };
|
|
52
52
|
// ===========================================================================
|
|
53
|
-
// (a) LIFECYCLE FLIP — `crtr node lifecycle` on a LIVE node, both directions,
|
|
53
|
+
// (a) LIFECYCLE FLIP — `crtr node config --lifecycle` on a LIVE node, both directions,
|
|
54
54
|
// observing the idle-release DECISION change. A round-trip on ONE node
|
|
55
55
|
// (terminal→resident→terminal) proves both directions: a flipped-resident
|
|
56
56
|
// node no longer idle-releases (evaluateStop → dormant); flipped-terminal it
|
|
@@ -86,13 +86,13 @@ test('live lifecycle flip: terminal→resident suppresses idle-release; resident
|
|
|
86
86
|
// --- FLIP 1: terminal → RESIDENT (live). Oracle §4: sets lifecycle + the
|
|
87
87
|
// launch spec, status/intent UNTOUCHED. ---
|
|
88
88
|
{
|
|
89
|
-
const res = h.cli(B, ['node', 'lifecycle', 'resident', '--node', B]);
|
|
90
|
-
assert.equal(res.code, 0, `lifecycle resident exit 0\n${res.stderr}`);
|
|
89
|
+
const res = h.cli(B, ['node', 'config', '--lifecycle', 'resident', '--node', B]);
|
|
90
|
+
assert.equal(res.code, 0, `config --lifecycle resident exit 0\n${res.stderr}`);
|
|
91
91
|
const b = h.node(B);
|
|
92
92
|
assert.equal(b.lifecycle, 'resident', 'B → resident');
|
|
93
93
|
assert.equal(b.mode, 'base', 'mode UNCHANGED by a lifecycle flip (orthogonal axis)');
|
|
94
|
-
assert.equal(b.status, 'active', 'status UNTOUCHED by node lifecycle (oracle §4)');
|
|
95
|
-
assert.equal(b.intent ?? null, null, 'intent UNTOUCHED by node lifecycle (oracle §4)');
|
|
94
|
+
assert.equal(b.status, 'active', 'status UNTOUCHED by node config --lifecycle (oracle §4)');
|
|
95
|
+
assert.equal(b.intent ?? null, null, 'intent UNTOUCHED by node config --lifecycle (oracle §4)');
|
|
96
96
|
}
|
|
97
97
|
// THE SUPPRESSION LOCK — as RESIDENT, B's stop is 'dormant' (NOT awaiting):
|
|
98
98
|
// a resident node is never forced to submit a final, so it does NOT idle-
|
|
@@ -108,8 +108,8 @@ test('live lifecycle flip: terminal→resident suppresses idle-release; resident
|
|
|
108
108
|
}
|
|
109
109
|
// --- FLIP 2: resident → TERMINAL (live), on the now-resident node. ---
|
|
110
110
|
{
|
|
111
|
-
const res = h.cli(B, ['node', 'lifecycle', 'terminal', '--node', B]);
|
|
112
|
-
assert.equal(res.code, 0, `lifecycle terminal exit 0\n${res.stderr}`);
|
|
111
|
+
const res = h.cli(B, ['node', 'config', '--lifecycle', 'terminal', '--node', B]);
|
|
112
|
+
assert.equal(res.code, 0, `config --lifecycle terminal exit 0\n${res.stderr}`);
|
|
113
113
|
const b = h.node(B);
|
|
114
114
|
assert.equal(b.lifecycle, 'terminal', 'B → terminal');
|
|
115
115
|
assert.equal(b.status, 'active', 'status still UNTOUCHED by the flip');
|
|
@@ -6,6 +6,7 @@ import { join } from 'node:path';
|
|
|
6
6
|
import { DatabaseSync } from 'node:sqlite';
|
|
7
7
|
import { openDb, closeDb, migrate, MIGRATIONS } from '../canvas/db.js';
|
|
8
8
|
import { canvasDbPath, ensureHome } from '../canvas/paths.js';
|
|
9
|
+
import { listTriggers } from '../canvas/triggers.js';
|
|
9
10
|
const RUNTIME_COLUMNS = ['intent', 'pi_pid', 'window', 'tmux_session'];
|
|
10
11
|
let home;
|
|
11
12
|
function userVersion(db) {
|
|
@@ -219,20 +220,178 @@ test('v4 is idempotent on re-open', () => {
|
|
|
219
220
|
assert.equal(userVersion(db2), MIGRATIONS.length);
|
|
220
221
|
assert.equal(edgeCount(db2), 1);
|
|
221
222
|
});
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
function buildV4DbWithLaterColumns() {
|
|
224
|
+
ensureHome();
|
|
225
|
+
const raw = new DatabaseSync(canvasDbPath());
|
|
226
|
+
raw.exec(`
|
|
227
|
+
CREATE TABLE nodes (
|
|
228
|
+
node_id TEXT PRIMARY KEY,
|
|
229
|
+
name TEXT NOT NULL,
|
|
230
|
+
kind TEXT NOT NULL,
|
|
231
|
+
mode TEXT NOT NULL DEFAULT 'base',
|
|
232
|
+
lifecycle TEXT NOT NULL DEFAULT 'terminal',
|
|
233
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
234
|
+
cwd TEXT NOT NULL,
|
|
235
|
+
parent TEXT,
|
|
236
|
+
created TEXT NOT NULL,
|
|
237
|
+
intent TEXT,
|
|
238
|
+
pi_pid INTEGER,
|
|
239
|
+
window TEXT,
|
|
240
|
+
tmux_session TEXT,
|
|
241
|
+
pane TEXT,
|
|
242
|
+
host_kind TEXT
|
|
243
|
+
);
|
|
244
|
+
CREATE TABLE edges (
|
|
245
|
+
type TEXT NOT NULL,
|
|
246
|
+
from_id TEXT NOT NULL,
|
|
247
|
+
to_id TEXT NOT NULL,
|
|
248
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
249
|
+
created TEXT NOT NULL,
|
|
250
|
+
PRIMARY KEY (type, from_id, to_id)
|
|
251
|
+
);
|
|
252
|
+
PRAGMA user_version = 4;
|
|
253
|
+
`);
|
|
254
|
+
raw
|
|
255
|
+
.prepare('INSERT INTO nodes (node_id, name, kind, status, cwd, created, pane, host_kind) VALUES (?,?,?,?,?,?,?,?)')
|
|
256
|
+
.run('stale', 'Stale', 'general', 'idle', '/tmp/work', '2020-01-01T00:00:00Z', '%9', 'broker');
|
|
257
|
+
return raw;
|
|
258
|
+
}
|
|
259
|
+
test('bug #99: a stale v4 db with later columns already present migrates cleanly', () => {
|
|
260
|
+
const raw = buildV4DbWithLaterColumns();
|
|
261
|
+
assert.equal(userVersion(raw), 4);
|
|
262
|
+
assert.equal(nodeColumns(raw).includes('pane'), true, 'precondition: pane already exists even though user_version is stale');
|
|
263
|
+
raw.close();
|
|
224
264
|
const db = openDb();
|
|
225
265
|
assert.equal(userVersion(db), MIGRATIONS.length);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
assert.
|
|
266
|
+
const cols = nodeColumns(db);
|
|
267
|
+
assert.ok(cols.includes('pane'), 'pane survives the migration');
|
|
268
|
+
assert.ok(cols.includes('host_kind'), 'host_kind survives the migration');
|
|
269
|
+
const row = db
|
|
270
|
+
.prepare('SELECT pane, host_kind FROM nodes WHERE node_id = ?')
|
|
271
|
+
.get('stale');
|
|
272
|
+
assert.equal(row.pane, '%9');
|
|
273
|
+
assert.equal(row.host_kind, 'broker');
|
|
274
|
+
});
|
|
275
|
+
// --- v9: wakeups → triggers (the unified node-trigger-grammar substrate) ---
|
|
276
|
+
/** Build a hand-rolled db at exactly v8: baseline nodes/edges + the v7
|
|
277
|
+
* `wakeups` table, `user_version = 8` — the shape the live fleet reaches just
|
|
278
|
+
* before v9. Caller seeds `wakeups` rows, we close it; the next openDb() runs
|
|
279
|
+
* only v9 over it. */
|
|
280
|
+
function buildV8DbWithWakeups() {
|
|
281
|
+
ensureHome();
|
|
282
|
+
const raw = new DatabaseSync(canvasDbPath());
|
|
283
|
+
raw.exec(`
|
|
284
|
+
CREATE TABLE nodes (
|
|
285
|
+
node_id TEXT PRIMARY KEY,
|
|
286
|
+
name TEXT NOT NULL,
|
|
287
|
+
kind TEXT NOT NULL,
|
|
288
|
+
mode TEXT NOT NULL DEFAULT 'base',
|
|
289
|
+
lifecycle TEXT NOT NULL DEFAULT 'terminal',
|
|
290
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
291
|
+
cwd TEXT NOT NULL,
|
|
292
|
+
parent TEXT,
|
|
293
|
+
created TEXT NOT NULL,
|
|
294
|
+
intent TEXT,
|
|
295
|
+
pi_pid INTEGER,
|
|
296
|
+
window TEXT,
|
|
297
|
+
tmux_session TEXT,
|
|
298
|
+
pane TEXT,
|
|
299
|
+
host_kind TEXT
|
|
300
|
+
);
|
|
301
|
+
CREATE TABLE edges (
|
|
302
|
+
type TEXT NOT NULL,
|
|
303
|
+
from_id TEXT NOT NULL,
|
|
304
|
+
to_id TEXT NOT NULL,
|
|
305
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
306
|
+
created TEXT NOT NULL,
|
|
307
|
+
PRIMARY KEY (type, from_id, to_id)
|
|
308
|
+
);
|
|
309
|
+
CREATE TABLE wakeups (
|
|
310
|
+
wakeup_id TEXT PRIMARY KEY,
|
|
311
|
+
node_id TEXT,
|
|
312
|
+
owner_id TEXT NOT NULL,
|
|
313
|
+
fire_at TEXT NOT NULL,
|
|
314
|
+
kind TEXT NOT NULL,
|
|
315
|
+
recur TEXT,
|
|
316
|
+
payload TEXT,
|
|
317
|
+
created TEXT NOT NULL,
|
|
318
|
+
FOREIGN KEY (node_id) REFERENCES nodes(node_id) ON DELETE CASCADE
|
|
319
|
+
);
|
|
320
|
+
PRAGMA user_version = 8;
|
|
321
|
+
`);
|
|
322
|
+
insertNode(raw, 'armer');
|
|
323
|
+
insertNode(raw, 'tgt');
|
|
324
|
+
return raw;
|
|
325
|
+
}
|
|
326
|
+
function insertWakeup(db, row) {
|
|
327
|
+
db.prepare('INSERT INTO wakeups (wakeup_id, node_id, owner_id, fire_at, kind, recur, payload, created) VALUES (?,?,?,?,?,?,?,?)').run(row.wakeup_id, row.node_id, row.owner_id, row.fire_at, row.kind, row.recur ?? null, row.payload ?? null, '2020-01-01T00:00:00Z');
|
|
328
|
+
}
|
|
329
|
+
test('v9 migrates every wakeups row into triggers, preserving ids/fire data, then drops wakeups', () => {
|
|
330
|
+
const raw = buildV8DbWithWakeups();
|
|
331
|
+
insertWakeup(raw, { wakeup_id: 'wk-bare', node_id: 'tgt', owner_id: 'armer', fire_at: '2026-01-01T00:00:00.000Z', kind: 'bare' });
|
|
332
|
+
insertWakeup(raw, {
|
|
333
|
+
wakeup_id: 'wk-noted',
|
|
334
|
+
node_id: 'tgt',
|
|
335
|
+
owner_id: 'armer',
|
|
336
|
+
fire_at: '2026-01-02T00:00:00.000Z',
|
|
337
|
+
kind: 'noted',
|
|
338
|
+
payload: JSON.stringify({ body: 'check CI', label: 'check CI' }),
|
|
339
|
+
});
|
|
340
|
+
insertWakeup(raw, {
|
|
341
|
+
wakeup_id: 'wk-deadline',
|
|
342
|
+
node_id: 'tgt',
|
|
343
|
+
owner_id: 'tgt',
|
|
344
|
+
fire_at: '2026-01-03T00:00:00.000Z',
|
|
345
|
+
kind: 'deadline',
|
|
346
|
+
payload: JSON.stringify({ body: 'timed out', timeout: true, label: 'timed out' }),
|
|
347
|
+
});
|
|
348
|
+
insertWakeup(raw, {
|
|
349
|
+
wakeup_id: 'wk-spawn-cron',
|
|
350
|
+
node_id: null,
|
|
351
|
+
owner_id: 'armer',
|
|
352
|
+
fire_at: '2026-01-04T00:00:00.000Z',
|
|
353
|
+
kind: 'spawn',
|
|
354
|
+
recur: JSON.stringify({ every: '6h' }),
|
|
355
|
+
payload: JSON.stringify({ kind: 'general', mode: 'base', cwd: '/tmp/work', prompt: 'go', parent: 'armer' }),
|
|
356
|
+
});
|
|
357
|
+
assert.equal(userVersion(raw), 8);
|
|
358
|
+
raw.close();
|
|
359
|
+
const db = openDb();
|
|
229
360
|
assert.equal(userVersion(db), MIGRATIONS.length);
|
|
230
|
-
//
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
assert.
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
361
|
+
// The old table is gone — not kept as a parallel alias.
|
|
362
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table'").all().map((r) => r.name);
|
|
363
|
+
assert.ok(!tables.includes('wakeups'), 'wakeups table is dropped after migration');
|
|
364
|
+
assert.ok(tables.includes('triggers'), 'triggers table exists');
|
|
365
|
+
const byId = (id) => db.prepare('SELECT * FROM triggers WHERE trigger_id = ?').get(id);
|
|
366
|
+
const bare = byId('wk-bare');
|
|
367
|
+
assert.equal(bare.owner_id, 'armer');
|
|
368
|
+
assert.equal(bare.node_id, 'tgt');
|
|
369
|
+
assert.equal(bare.action, 'msg');
|
|
370
|
+
assert.equal(bare.action_mode, 'fresh_revive');
|
|
371
|
+
assert.equal(bare.trigger_type, 'at');
|
|
372
|
+
assert.equal(bare.fire_at, '2026-01-01T00:00:00.000Z');
|
|
373
|
+
const noted = byId('wk-noted');
|
|
374
|
+
assert.equal(noted.action, 'msg');
|
|
375
|
+
assert.equal(noted.action_mode, 'inbox_message');
|
|
376
|
+
assert.equal(noted.trigger_type, 'at');
|
|
377
|
+
assert.deepEqual(JSON.parse(noted.payload), { body: 'check CI', label: 'check CI' });
|
|
378
|
+
const deadline = byId('wk-deadline');
|
|
379
|
+
assert.equal(deadline.action, 'msg');
|
|
380
|
+
assert.equal(deadline.action_mode, 'deadline_message');
|
|
381
|
+
assert.equal(deadline.trigger_type, 'until', "a deadline row's trigger_type is 'until', not 'at'");
|
|
382
|
+
assert.equal(deadline.node_id, 'tgt');
|
|
383
|
+
const spawnCron = byId('wk-spawn-cron');
|
|
384
|
+
assert.equal(spawnCron.action, 'new');
|
|
385
|
+
assert.equal(spawnCron.action_mode, 'node_birth');
|
|
386
|
+
assert.equal(spawnCron.trigger_type, 'every', 'a recurring spawn keeps trigger_type=every');
|
|
387
|
+
assert.equal(spawnCron.node_id, null, 'a detached spawn-cron stays canvas-detached');
|
|
388
|
+
assert.equal(spawnCron.recur, JSON.stringify({ every: '6h' }));
|
|
389
|
+
// The migrated rows are readable via the current triggers DAO, keyed by
|
|
390
|
+
// trigger_id (preserved from wakeup_id) and the current action/action_mode
|
|
391
|
+
// vocabulary rather than the dropped per-kind wakeups shape.
|
|
392
|
+
const allTriggers = listTriggers({ canvas: true });
|
|
393
|
+
assert.equal(allTriggers.length, 4);
|
|
394
|
+
const migratedBare = allTriggers.find((t) => t.trigger_id === 'wk-bare');
|
|
395
|
+
assert.equal(migratedBare.action_mode, 'fresh_revive');
|
|
396
|
+
assert.equal(migratedBare.node_id, 'tgt');
|
|
238
397
|
});
|