@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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentMessage } from '@earendil-works/pi-agent-core';
|
|
1
2
|
/** Test seam (M-1 regression): a FRESH-start kickoff prompt carrying this token
|
|
2
3
|
* makes the fake engine THROW inside bindExtensions BEFORE it fires
|
|
3
4
|
* session_start — the exact failure mode that records no pid and no session, so
|
|
@@ -64,10 +65,23 @@ interface ResourceLoader {
|
|
|
64
65
|
runtime: ExtRuntime;
|
|
65
66
|
};
|
|
66
67
|
}
|
|
68
|
+
interface TreeEntry {
|
|
69
|
+
type: 'message';
|
|
70
|
+
id: string;
|
|
71
|
+
parentId: string | null;
|
|
72
|
+
timestamp: string;
|
|
73
|
+
message: AgentMessage;
|
|
74
|
+
}
|
|
75
|
+
interface SessionTreeNode {
|
|
76
|
+
entry: TreeEntry;
|
|
77
|
+
children: SessionTreeNode[];
|
|
78
|
+
}
|
|
67
79
|
declare class FakeSession {
|
|
68
80
|
private readonly sm;
|
|
69
81
|
private readonly loader;
|
|
70
82
|
private readonly dir;
|
|
83
|
+
private readonly tree;
|
|
84
|
+
private promptFailuresRemaining;
|
|
71
85
|
private extensions;
|
|
72
86
|
private readonly injected;
|
|
73
87
|
private uiContext;
|
|
@@ -78,14 +92,25 @@ declare class FakeSession {
|
|
|
78
92
|
private timer;
|
|
79
93
|
private readonly listeners;
|
|
80
94
|
private readonly messageLog;
|
|
95
|
+
private turnEndLeafId;
|
|
81
96
|
constructor(sm: SessionManager, loader: ResourceLoader | undefined);
|
|
82
|
-
get messages():
|
|
97
|
+
get messages(): AgentMessage[];
|
|
83
98
|
get sessionManager(): {
|
|
84
99
|
buildSessionContext: () => {
|
|
85
|
-
messages:
|
|
100
|
+
messages: AgentMessage[];
|
|
86
101
|
thinkingLevel: string;
|
|
87
102
|
model: null;
|
|
88
103
|
};
|
|
104
|
+
getLeafId: () => string | null;
|
|
105
|
+
getEntry: (id: string) => TreeEntry | undefined;
|
|
106
|
+
getTree: () => SessionTreeNode[];
|
|
107
|
+
getUserMessagesForForking: () => Array<{
|
|
108
|
+
entryId: string;
|
|
109
|
+
text: string;
|
|
110
|
+
timestamp?: string;
|
|
111
|
+
}>;
|
|
112
|
+
getSessionId: () => string;
|
|
113
|
+
getSessionFile: () => string;
|
|
89
114
|
};
|
|
90
115
|
get sessionId(): string;
|
|
91
116
|
get sessionFile(): string | undefined;
|
|
@@ -98,6 +123,7 @@ declare class FakeSession {
|
|
|
98
123
|
}): Promise<void>;
|
|
99
124
|
get isStreaming(): boolean;
|
|
100
125
|
getSessionStats(): Record<string, unknown>;
|
|
126
|
+
private syncTreeSnapshot;
|
|
101
127
|
setSessionName(_name: string): void;
|
|
102
128
|
prompt(text: string, _options?: unknown): Promise<void>;
|
|
103
129
|
steer(_text: string): Promise<void>;
|
|
@@ -106,8 +132,8 @@ declare class FakeSession {
|
|
|
106
132
|
/** In-place tree rewind (broker `navigate_tree`). Mirrors the real SDK's
|
|
107
133
|
* contract: the session file is unchanged, the live history is truncated,
|
|
108
134
|
* and the navigated-to user message's text comes back as `editorText`. The
|
|
109
|
-
* fake's "rewind"
|
|
110
|
-
*
|
|
135
|
+
* fake's "rewind" re-anchors the active branch without deleting the abandoned
|
|
136
|
+
* tail so the welcome snapshot can prove the one-nudge property. */
|
|
111
137
|
navigateTree(targetId: string, _options?: unknown): Promise<{
|
|
112
138
|
editorText?: string;
|
|
113
139
|
cancelled: boolean;
|
|
@@ -104,7 +104,7 @@ export class SessionManager {
|
|
|
104
104
|
// ---------------------------------------------------------------------------
|
|
105
105
|
// AgentSessionEvent stream synthesis (T8 / G1, G3, G4, G8). The fake emits a
|
|
106
106
|
// REALISTIC streaming assistant turn through session.subscribe — the SAME channel
|
|
107
|
-
// the real pi engine feeds the broker's fan-out — so the frames a `crtr attach`
|
|
107
|
+
// the real pi engine feeds the broker's fan-out — so the frames a `crtr surface attach`
|
|
108
108
|
// client receives are byte-for-byte real AgentSessionEvents. The EMITTED event
|
|
109
109
|
// shapes are typed against the real `AgentSessionEvent` union from pi (whose full
|
|
110
110
|
// 17 variants are message_start/update/end, tool_execution_start/update/end,
|
|
@@ -140,10 +140,86 @@ function assistantMessage(text, pad = 0) {
|
|
|
140
140
|
function textDelta(partial, delta) {
|
|
141
141
|
return { type: 'text_delta', contentIndex: 0, delta, partial };
|
|
142
142
|
}
|
|
143
|
+
class SessionTree {
|
|
144
|
+
entries = new Map();
|
|
145
|
+
children = new Map();
|
|
146
|
+
leafId = null;
|
|
147
|
+
append(message) {
|
|
148
|
+
const entry = {
|
|
149
|
+
type: 'message',
|
|
150
|
+
id: randomUUID().slice(0, 8),
|
|
151
|
+
parentId: this.leafId,
|
|
152
|
+
timestamp: new Date().toISOString(),
|
|
153
|
+
message,
|
|
154
|
+
};
|
|
155
|
+
this.entries.set(entry.id, entry);
|
|
156
|
+
const siblings = this.children.get(entry.parentId) ?? [];
|
|
157
|
+
siblings.push(entry.id);
|
|
158
|
+
this.children.set(entry.parentId, siblings);
|
|
159
|
+
this.leafId = entry.id;
|
|
160
|
+
return entry;
|
|
161
|
+
}
|
|
162
|
+
navigateTree(targetId) {
|
|
163
|
+
const entry = this.entries.get(targetId);
|
|
164
|
+
if (entry === undefined)
|
|
165
|
+
throw new Error(`[fake-engine] navigateTree: unknown entry ${targetId}`);
|
|
166
|
+
this.leafId = targetId;
|
|
167
|
+
return { cancelled: false, editorText: this.textOf(entry.message) };
|
|
168
|
+
}
|
|
169
|
+
getLeafId() {
|
|
170
|
+
return this.leafId;
|
|
171
|
+
}
|
|
172
|
+
getEntry(id) {
|
|
173
|
+
return this.entries.get(id);
|
|
174
|
+
}
|
|
175
|
+
getTree() {
|
|
176
|
+
return (this.children.get(null) ?? []).map((id) => this.node(id)).filter((node) => node !== null);
|
|
177
|
+
}
|
|
178
|
+
getUserMessagesForForking() {
|
|
179
|
+
return [...this.entries.values()]
|
|
180
|
+
.filter((entry) => entry.message.role === 'user')
|
|
181
|
+
.map((entry) => ({ entryId: entry.id, text: this.textOf(entry.message), timestamp: entry.timestamp }));
|
|
182
|
+
}
|
|
183
|
+
buildSessionContext() {
|
|
184
|
+
return { messages: this.branchMessages(), thinkingLevel: 'off', model: null };
|
|
185
|
+
}
|
|
186
|
+
branchMessages() {
|
|
187
|
+
const ids = [];
|
|
188
|
+
let cur = this.leafId;
|
|
189
|
+
while (cur !== null) {
|
|
190
|
+
const entry = this.entries.get(cur);
|
|
191
|
+
if (entry === undefined)
|
|
192
|
+
break;
|
|
193
|
+
ids.push(cur);
|
|
194
|
+
cur = entry.parentId;
|
|
195
|
+
}
|
|
196
|
+
ids.reverse();
|
|
197
|
+
return ids.map((id) => this.entries.get(id)?.message).filter((m) => m !== undefined);
|
|
198
|
+
}
|
|
199
|
+
node(id) {
|
|
200
|
+
const entry = this.entries.get(id);
|
|
201
|
+
if (entry === undefined)
|
|
202
|
+
return null;
|
|
203
|
+
return {
|
|
204
|
+
entry,
|
|
205
|
+
children: (this.children.get(id) ?? []).map((child) => this.node(child)).filter((node) => node !== null),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
textOf(message) {
|
|
209
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
210
|
+
for (const part of content) {
|
|
211
|
+
if (typeof part?.text === 'string' && part.text !== '')
|
|
212
|
+
return part.text;
|
|
213
|
+
}
|
|
214
|
+
return '';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
143
217
|
class FakeSession {
|
|
144
218
|
sm;
|
|
145
219
|
loader;
|
|
146
220
|
dir;
|
|
221
|
+
tree = new SessionTree();
|
|
222
|
+
promptFailuresRemaining;
|
|
147
223
|
extensions = [];
|
|
148
224
|
injected = [];
|
|
149
225
|
uiContext;
|
|
@@ -156,25 +232,35 @@ class FakeSession {
|
|
|
156
232
|
// accumulating message history the catch-up snapshot serializes (G3).
|
|
157
233
|
listeners = new Set();
|
|
158
234
|
messageLog = [];
|
|
235
|
+
turnEndLeafId = null;
|
|
159
236
|
constructor(sm, loader) {
|
|
160
237
|
this.sm = sm;
|
|
161
238
|
this.loader = loader;
|
|
162
239
|
this.dir = nodeDirFromEnv();
|
|
240
|
+
const configured = Number(process.env['CRTR_FAKE_ENGINE_PROMPT_FAILS'] ?? '0');
|
|
241
|
+
this.promptFailuresRemaining = Number.isFinite(configured) && configured > 0 ? Math.floor(configured) : 0;
|
|
242
|
+
this.syncTreeSnapshot();
|
|
163
243
|
}
|
|
164
244
|
// --- broker-read getters. buildSnapshot (on a client hello) reads messages/
|
|
165
245
|
// stats/model: T8 clients attach and assert on welcome.snapshot, so messages
|
|
166
246
|
// returns the accrued history; stats/model stay cheap stubs. ---------------
|
|
167
247
|
get messages() {
|
|
168
|
-
return this.
|
|
248
|
+
return this.tree.buildSessionContext().messages;
|
|
169
249
|
}
|
|
170
250
|
// The broker's catch-up snapshot reconstructs history from the persisted
|
|
171
251
|
// session tree (sessionManager.buildSessionContext) — the single source of
|
|
172
252
|
// truth, since `session.messages` can be sliced by pi's retry/overflow/
|
|
173
253
|
// compaction recovery. Mirror that surface so the fake's snapshot still serves
|
|
174
|
-
// the accrued history (G2/G3). The fake's persisted analog
|
|
254
|
+
// the accrued history (G2/G3). The fake's persisted analog is the active branch.
|
|
175
255
|
get sessionManager() {
|
|
176
256
|
return {
|
|
177
|
-
buildSessionContext: () =>
|
|
257
|
+
buildSessionContext: () => this.tree.buildSessionContext(),
|
|
258
|
+
getLeafId: () => this.tree.getLeafId(),
|
|
259
|
+
getEntry: (id) => this.tree.getEntry(id),
|
|
260
|
+
getTree: () => this.tree.getTree(),
|
|
261
|
+
getUserMessagesForForking: () => this.tree.getUserMessagesForForking(),
|
|
262
|
+
getSessionId: () => this.sm.getSessionId(),
|
|
263
|
+
getSessionFile: () => this.sm.getSessionFile(),
|
|
178
264
|
};
|
|
179
265
|
}
|
|
180
266
|
get sessionId() {
|
|
@@ -200,19 +286,33 @@ class FakeSession {
|
|
|
200
286
|
getSessionStats() {
|
|
201
287
|
return { messages: 0, tokens: 0 };
|
|
202
288
|
}
|
|
289
|
+
syncTreeSnapshot() {
|
|
290
|
+
try {
|
|
291
|
+
writeFileSync(join(this.dir, 'fake-pi.tree.json'), JSON.stringify({
|
|
292
|
+
leafId: this.tree.getLeafId(),
|
|
293
|
+
activeBranch: this.tree.buildSessionContext().messages,
|
|
294
|
+
tree: this.tree.getTree(),
|
|
295
|
+
userMessagesForForking: this.tree.getUserMessagesForForking(),
|
|
296
|
+
}, null, 2));
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
/* best effort */
|
|
300
|
+
}
|
|
301
|
+
}
|
|
203
302
|
// --- naming is cosmetic (broker calls it in a try/catch) ---------------------
|
|
204
303
|
setSessionName(_name) {
|
|
205
304
|
/* no-op recording stub */
|
|
206
305
|
}
|
|
207
306
|
// --- controller-drive stubs (no controller connects in these tests) ----------
|
|
208
307
|
prompt(text, _options) {
|
|
209
|
-
// The broker calls this for
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
//
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
308
|
+
// The broker calls this for the controller-less retry path. Emit the turn
|
|
309
|
+
// on the broker's subscribe channel and also run the real extension hooks so
|
|
310
|
+
// the canvas stophook records the fault marker and the broker can schedule
|
|
311
|
+
// the next retry.
|
|
312
|
+
const fail = this.promptFailuresRemaining > 0;
|
|
313
|
+
if (fail)
|
|
314
|
+
this.promptFailuresRemaining--;
|
|
315
|
+
return this.emitTurn(text, { fail, runHooks: true });
|
|
216
316
|
}
|
|
217
317
|
steer(_text) {
|
|
218
318
|
return Promise.resolve();
|
|
@@ -226,11 +326,12 @@ class FakeSession {
|
|
|
226
326
|
/** In-place tree rewind (broker `navigate_tree`). Mirrors the real SDK's
|
|
227
327
|
* contract: the session file is unchanged, the live history is truncated,
|
|
228
328
|
* and the navigated-to user message's text comes back as `editorText`. The
|
|
229
|
-
* fake's "rewind"
|
|
230
|
-
*
|
|
329
|
+
* fake's "rewind" re-anchors the active branch without deleting the abandoned
|
|
330
|
+
* tail so the welcome snapshot can prove the one-nudge property. */
|
|
231
331
|
navigateTree(targetId, _options) {
|
|
232
|
-
this.
|
|
233
|
-
|
|
332
|
+
const result = this.tree.navigateTree(targetId);
|
|
333
|
+
this.syncTreeSnapshot();
|
|
334
|
+
return Promise.resolve(result);
|
|
234
335
|
}
|
|
235
336
|
// --- the single engine event stream the broker fans out (broker.ts subscribes
|
|
236
337
|
// here and broadcasts each event VERBATIM to every attached viewer) --------
|
|
@@ -266,6 +367,7 @@ class FakeSession {
|
|
|
266
367
|
const updates = opts.updates ?? 3;
|
|
267
368
|
const pad = opts.padBytes ?? 0;
|
|
268
369
|
const withTool = opts.tool ?? true;
|
|
370
|
+
const fail = opts.fail === true;
|
|
269
371
|
const small = assistantMessage(text);
|
|
270
372
|
// A normal turn yields with setImmediate (fast). A sized flood (G8, pad>0) is
|
|
271
373
|
// PACED with a small real delay so a fast (reading) viewer always drains each
|
|
@@ -274,6 +376,9 @@ class FakeSession {
|
|
|
274
376
|
// pace the burst outruns the reader's event loop and sheds the fast viewer too.
|
|
275
377
|
const yieldTick = () => pad > 0 ? new Promise((r) => setTimeout(r, 3)) : new Promise((r) => setImmediate(r));
|
|
276
378
|
this.streaming = true;
|
|
379
|
+
if (opts.runHooks === true) {
|
|
380
|
+
await this.fire('agent_start', {}, this.buildCtx());
|
|
381
|
+
}
|
|
277
382
|
this.emit({ type: 'agent_start' });
|
|
278
383
|
this.emit({ type: 'turn_start' });
|
|
279
384
|
this.emit({ type: 'message_start', message: small });
|
|
@@ -337,14 +442,39 @@ class FakeSession {
|
|
|
337
442
|
}
|
|
338
443
|
if (this.disposed)
|
|
339
444
|
return;
|
|
340
|
-
const
|
|
445
|
+
const userMsg = {
|
|
446
|
+
role: 'user',
|
|
447
|
+
content: [{ type: 'text', text }],
|
|
448
|
+
timestamp: Date.now(),
|
|
449
|
+
};
|
|
450
|
+
this.tree.append(userMsg);
|
|
451
|
+
this.syncTreeSnapshot();
|
|
452
|
+
const finalMsg = fail
|
|
453
|
+
? { ...assistantMessage(text), stopReason: 'error', errorMessage: 'Connection error.' }
|
|
454
|
+
: assistantMessage(text);
|
|
341
455
|
this.emit({ type: 'message_end', message: finalMsg });
|
|
342
456
|
this.emit({ type: 'turn_end', message: finalMsg, toolResults: [] });
|
|
343
457
|
this.messageLog.push(finalMsg);
|
|
458
|
+
const anchorBeforeFinal = this.tree.getLeafId();
|
|
459
|
+
this.turnEndLeafId = anchorBeforeFinal;
|
|
460
|
+
this.tree.append(finalMsg);
|
|
461
|
+
this.syncTreeSnapshot();
|
|
462
|
+
if (opts.runHooks === true) {
|
|
463
|
+
const hookCtx = this.buildCtx();
|
|
464
|
+
await this.fire('turn_end', { message: finalMsg, toolResults: [] }, hookCtx);
|
|
465
|
+
const hookMessages = fail
|
|
466
|
+
? [...this.tree.buildSessionContext().messages, finalMsg]
|
|
467
|
+
: this.tree.buildSessionContext().messages.slice();
|
|
468
|
+
await this.fire('agent_end', { messages: hookMessages, willRetry: false }, hookCtx);
|
|
469
|
+
}
|
|
470
|
+
this.turnEndLeafId = null;
|
|
344
471
|
this.streaming = false;
|
|
345
472
|
// agent_end on the SUBSCRIBE channel is a relayed frame ONLY (willRetry=false);
|
|
346
473
|
// it never runs the stophook, so the broker stays alive (G2/G3/G4/G8).
|
|
347
|
-
|
|
474
|
+
const agentEndMessages = fail
|
|
475
|
+
? [...this.tree.buildSessionContext().messages, finalMsg]
|
|
476
|
+
: this.tree.buildSessionContext().messages.slice();
|
|
477
|
+
this.emit({ type: 'agent_end', messages: agentEndMessages, willRetry: false });
|
|
348
478
|
}
|
|
349
479
|
dispose() {
|
|
350
480
|
this.disposed = true;
|
|
@@ -470,6 +600,7 @@ class FakeSession {
|
|
|
470
600
|
sessionManager: {
|
|
471
601
|
getSessionId: () => this.sm.getSessionId(),
|
|
472
602
|
getSessionFile: () => this.sm.getSessionFile(),
|
|
603
|
+
getLeafId: () => this.turnEndLeafId ?? this.tree.getLeafId(),
|
|
473
604
|
},
|
|
474
605
|
getContextUsage: () => ({ tokens: 1000 }),
|
|
475
606
|
// Wired to the broker's shutdownHandler: the stophook calls ctx.shutdown()
|
|
@@ -557,7 +688,15 @@ class FakeSession {
|
|
|
557
688
|
this.streaming = false;
|
|
558
689
|
await this.fire('agent_end', {
|
|
559
690
|
messages: [
|
|
560
|
-
{
|
|
691
|
+
{
|
|
692
|
+
role: 'assistant',
|
|
693
|
+
stopReason: cmd.reason ?? 'stop',
|
|
694
|
+
// A real engine attaches errorMessage on a stopReason:'error'
|
|
695
|
+
// turn; the stophook classifies it for the active-fault marker.
|
|
696
|
+
// Forward it so a test can drive a CONNECTION stall faithfully.
|
|
697
|
+
...(cmd.errorMessage === undefined ? {} : { errorMessage: cmd.errorMessage }),
|
|
698
|
+
content: [{ type: 'text', text: cmd.text ?? '' }],
|
|
699
|
+
},
|
|
561
700
|
],
|
|
562
701
|
}, ctx);
|
|
563
702
|
break;
|
|
@@ -255,7 +255,16 @@ async function dispatch(cmd) {
|
|
|
255
255
|
streaming = false;
|
|
256
256
|
await fire('agent_end', {
|
|
257
257
|
messages: [
|
|
258
|
-
{
|
|
258
|
+
{
|
|
259
|
+
role: 'assistant',
|
|
260
|
+
stopReason: cmd.reason ?? 'stop',
|
|
261
|
+
// A real engine attaches errorMessage on a stopReason:'error' turn;
|
|
262
|
+
// the stophook classifies it (connection/rate-limit/…) for the
|
|
263
|
+
// active-fault marker. Forward it so a test can drive a CONNECTION
|
|
264
|
+
// stall faithfully.
|
|
265
|
+
...(cmd.errorMessage === undefined ? {} : { errorMessage: cmd.errorMessage }),
|
|
266
|
+
content: [{ type: 'text', text: cmd.text ?? '' }],
|
|
267
|
+
},
|
|
259
268
|
],
|
|
260
269
|
}, ctx);
|
|
261
270
|
ack(id, { ok: true });
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// FULL TIER (real-boot-bound): tmux-free, but it boots a REAL broker process
|
|
4
4
|
// (~5s pi-SDK load), so it lives in full/ (CI), not the fast local loop.
|
|
5
5
|
//
|
|
6
|
-
// T8 — the `crtr attach` acceptance gate, gates G4/G7/G8/G9 (controller
|
|
6
|
+
// T8 — the `crtr surface attach` acceptance gate, gates G4/G7/G8/G9 (controller
|
|
7
7
|
// arbitration, decoder overflow caps, backpressure shedding, and the load-bearing
|
|
8
8
|
// ONE-WRITER proof). Split out of broker-lifecycle.test.ts; the gates are the
|
|
9
9
|
// original acceptance gate, unchanged.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// FULL TIER (real-boot-bound): tmux-free, but it boots a REAL broker process
|
|
4
4
|
// (~5s pi-SDK load), so it lives in full/ (CI), not the fast local loop.
|
|
5
5
|
//
|
|
6
|
-
// T8 — the `crtr attach` acceptance gate, gates G1/G1b/G2/G3 (controller drive,
|
|
6
|
+
// T8 — the `crtr surface attach` acceptance gate, gates G1/G1b/G2/G3 (controller drive,
|
|
7
7
|
// relay/coalescing, detach survival, catch-up snapshot). Split out of
|
|
8
8
|
// broker-lifecycle.test.ts; the gates are the original acceptance gate, unchanged.
|
|
9
9
|
//
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// • items 4–6: a CRASHED broker (pid killed out from under the daemon) must
|
|
13
13
|
// grace-revive RESUMING the saved .jsonl, ONE-WRITER (the crashed pid is
|
|
14
14
|
// dead BEFORE the revive launches and never resurrects; the revived pid is
|
|
15
|
-
// distinct); and a clean `node close` tears the broker down (shutdown frame
|
|
15
|
+
// distinct); and a clean `node lifecycle close` tears the broker down (shutdown frame
|
|
16
16
|
// → exit, socket unlinked, status canceled, daemon leaves it).
|
|
17
17
|
// • M-1/M-2: a broker that DIES before session_start records NO pid and NO
|
|
18
18
|
// session EVER. Read pid==null unconditionally as "still booting" and the
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
// RED. Verified by reverting that branch (see bug-injection report).
|
|
41
41
|
import { test, before, after } from 'node:test';
|
|
42
42
|
import assert from 'node:assert/strict';
|
|
43
|
-
import { existsSync } from 'node:fs';
|
|
43
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
44
|
+
import { join } from 'node:path';
|
|
44
45
|
import { createHarness } from '../helpers/harness.js';
|
|
45
46
|
import { subscribe } from '../../canvas/canvas.js';
|
|
46
47
|
import { isPidAlive } from '../../canvas/pid.js';
|
|
@@ -84,13 +85,17 @@ test('CRASH → grace-revive RESUME (one-writer), then clean teardown on close',
|
|
|
84
85
|
assert.ok(newPid != null && isPidAlive(newPid), 'the revived broker pid is alive');
|
|
85
86
|
assert.notEqual(newPid, oldPid, 'the revived pid is distinct from the crashed one');
|
|
86
87
|
assert.equal(isPidAlive(oldPid), false, 'one-writer: the crashed pid never resurrected');
|
|
87
|
-
// --- Item 5: clean teardown of the (revived, live) broker. node close marks
|
|
88
|
+
// --- Item 5: clean teardown of the (revived, live) broker. node lifecycle close marks
|
|
88
89
|
// canceled BEFORE teardown (crash-safe order), then hostFor(broker).teardown
|
|
89
90
|
// sends the `shutdown` frame → the broker disposes + exits, socket unlinked. ---
|
|
91
|
+
const sessionFile = h.node(id).pi_session_file;
|
|
92
|
+
assert.ok(sessionFile !== null && sessionFile !== undefined, 'revived broker has a session file');
|
|
93
|
+
mkdirSync(join(sessionFile, '..'), { recursive: true });
|
|
94
|
+
writeFileSync(sessionFile, JSON.stringify({ type: 'message', message: { role: 'assistant', content: [{ type: 'text', text: 'hi' }] } }) + '\n');
|
|
90
95
|
const sock = h.brokerSock(id);
|
|
91
96
|
await h.waitFor(() => existsSync(sock), { label: 'revived broker created its view.sock' });
|
|
92
|
-
const res = h.cli(root, ['node', 'close', '--node', id]);
|
|
93
|
-
assert.equal(res.code, 0, `node close should exit 0\n--stderr--\n${res.stderr}`);
|
|
97
|
+
const res = h.cli(root, ['node', 'lifecycle', 'close', '--node', id]);
|
|
98
|
+
assert.equal(res.code, 0, `node lifecycle close should exit 0\n--stderr--\n${res.stderr}`);
|
|
94
99
|
await h.waitFor(() => !isPidAlive(newPid), { label: 'broker process exited on shutdown frame' });
|
|
95
100
|
await h.waitFor(() => !existsSync(sock), { label: 'broker unlinked its socket on exit' });
|
|
96
101
|
assert.equal(h.status(id), 'canceled', 'the closed node is canceled');
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// FULL TIER (real-boot-bound): tmux-free, but it boots a REAL broker process,
|
|
4
4
|
// so it lives in full/ (CI), not the fast local loop.
|
|
5
5
|
//
|
|
6
|
-
// BUG-REGRESSION (real, observed 2026-06-11 in `crtr attach`): switching the
|
|
6
|
+
// BUG-REGRESSION (real, observed 2026-06-11 in `crtr surface attach`): switching the
|
|
7
7
|
// model (/model <provider/id> or the picker) visibly did nothing — the viewer's
|
|
8
8
|
// status bar kept showing the OLD model until some unrelated event happened to
|
|
9
9
|
// arrive.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// FULL TIER (real-boot-bound): tmux-free, but it boots a REAL broker process,
|
|
4
4
|
// so it lives in full/ (CI), not the fast local loop.
|
|
5
5
|
//
|
|
6
|
-
// BUG-REGRESSION (real, observed 2026-06-11 in `crtr attach`): double-Esc (or
|
|
6
|
+
// BUG-REGRESSION (real, observed 2026-06-11 in `crtr surface attach`): double-Esc (or
|
|
7
7
|
// /tree) opened the session-tree picker, but SELECTING an entry visibly did
|
|
8
8
|
// nothing — the viewer stayed on the old transcript instead of traveling back
|
|
9
9
|
// to the chosen point in time.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// (1) Gap 1 — `nodeInPane()` (src/commands/node.ts) resolved a pane via
|
|
8
8
|
// window→node ONLY. A broker engine runs DETACHED with window=null, and its
|
|
9
|
-
// on-screen presence is a `crtr attach` VIEWER pane, so the window lookup
|
|
9
|
+
// on-screen presence is a `crtr surface attach` VIEWER pane, so the window lookup
|
|
10
10
|
// never found it: `node cycle`/`recycle`/`close`/`demote`/`lifecycle` all
|
|
11
11
|
// broke when the current pane was a broker viewer. The fix has attach
|
|
12
12
|
// self-tag its pane `@crtr_node=<id>` and nodeInPane resolve that tag first.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Run with: node --import tsx/esm --test src/core/__tests__/cascade-close.test.ts
|
|
2
2
|
//
|
|
3
3
|
// CASCADE CLOSE + exclusive-subtree ownership — a FAITHFUL integration test of
|
|
4
|
-
// `crtr node close` on a MIDDLE node, driven through the REAL CLI against a REAL
|
|
4
|
+
// `crtr node lifecycle close` on a MIDDLE node, driven through the REAL CLI against a REAL
|
|
5
5
|
// isolated tmux session with REAL fake-pi vehicles in REAL panes, asserting off
|
|
6
6
|
// the canvas data layer and checked against the state-model ORACLE
|
|
7
|
-
// (state-model.md §4 `node close`, §5 cascade-close ownership, invariant 3,
|
|
7
|
+
// (state-model.md §4 `node lifecycle close`, §5 cascade-close ownership, invariant 3,
|
|
8
8
|
// ambiguity A5).
|
|
9
9
|
//
|
|
10
10
|
// WHY this exists alongside the unit `close.test.ts`: that test exercises
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
// └── S sideways sibling subtree — MUST survive
|
|
33
33
|
// └── G
|
|
34
34
|
//
|
|
35
|
-
// close(B) ⇒ exclusive subtree {B,C,D,E}
|
|
35
|
+
// close(B) ⇒ exclusive subtree {B,C,D,E} canceled; A,S,G untouched.
|
|
36
36
|
//
|
|
37
37
|
// CRITICAL DELIVERABLE (ambiguity A5): the EXACT terminal status a cascade-
|
|
38
|
-
//
|
|
39
|
-
//
|
|
38
|
+
// closed descendant receives under `node lifecycle close`. With the fixtures made
|
|
39
|
+
// non-empty below: status === 'canceled', intent === null (cleared) — for the
|
|
40
40
|
// cascade ROOT and EVERY descendant alike (`transition(id,'cancel')`,
|
|
41
41
|
// close.ts → lifecycle.ts cancel row: status='canceled', intent=null, from '*').
|
|
42
42
|
// This differs from the ancestor-RESET path (`reapDescendants` → `reap` → 'done')
|
|
@@ -52,12 +52,18 @@
|
|
|
52
52
|
import { test } from 'node:test';
|
|
53
53
|
import assert from 'node:assert/strict';
|
|
54
54
|
import { spawnSync } from 'node:child_process';
|
|
55
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
56
|
+
import { join } from 'node:path';
|
|
55
57
|
import { createHarness, hasTmux } from '../helpers/harness.js';
|
|
56
58
|
import { isPidAlive } from '../../canvas/pid.js';
|
|
57
59
|
function sessionExists(session) {
|
|
58
60
|
return spawnSync('tmux', ['has-session', '-t', session], { stdio: 'ignore' }).status === 0;
|
|
59
61
|
}
|
|
60
|
-
|
|
62
|
+
function seedAssistantSession(sessionFile) {
|
|
63
|
+
mkdirSync(join(sessionFile, '..'), { recursive: true });
|
|
64
|
+
writeFileSync(sessionFile, JSON.stringify({ type: 'message', message: { role: 'assistant', content: [{ type: 'text', text: 'hi' }] } }) + '\n');
|
|
65
|
+
}
|
|
66
|
+
test('cascade close: middle-node lifecycle close cancels EXACTLY its subtree, ancestor + sideways untouched, edges persist', { skip: !hasTmux() ? 'tmux unavailable' : false, timeout: 180_000 }, async () => {
|
|
61
67
|
const h = await createHarness({ sessionPrefix: 'crtr-cascade' });
|
|
62
68
|
try {
|
|
63
69
|
// ===================================================================
|
|
@@ -73,16 +79,23 @@ test('cascade close: middle-node close reaps EXACTLY its subtree (canceled), anc
|
|
|
73
79
|
const D = await h.spawnChild(B, 'B child two'); // breadth: B has {C, D}
|
|
74
80
|
const S = await h.spawnChild(A, 'sideways sibling of B'); // sideways subtree
|
|
75
81
|
const G = await h.spawnChild(S, 'child of the sideways sibling');
|
|
76
|
-
const subtree = [B, C, D, E]; // B's exclusive subtree (the expected
|
|
82
|
+
const subtree = [B, C, D, E]; // B's exclusive subtree (the expected cancel set)
|
|
77
83
|
const sideways = [S, G]; // a sibling subtree — must be wholly untouched
|
|
84
|
+
// Make the close-path fixtures NON-EMPTY so close exercises cancel+notice
|
|
85
|
+
// semantics instead of the new reap-empty path.
|
|
86
|
+
for (const id of subtree) {
|
|
87
|
+
const sessionFile = h.node(id).pi_session_file;
|
|
88
|
+
assert.ok(sessionFile !== null && sessionFile !== undefined, `${id} has a session file`);
|
|
89
|
+
seedAssistantSession(sessionFile);
|
|
90
|
+
}
|
|
78
91
|
// Pre-close sanity: every node live + present, spine wired as drawn.
|
|
79
92
|
{
|
|
80
93
|
for (const id of [B, C, D, E, S, G]) {
|
|
81
|
-
assert.
|
|
94
|
+
assert.ok(h.status(id) === 'active' || h.status(id) === 'idle', `${id} live before close`);
|
|
82
95
|
const pid = h.node(id).pi_pid;
|
|
83
96
|
assert.ok(pid != null && isPidAlive(pid), `${id} broker engine alive before close`);
|
|
84
97
|
}
|
|
85
|
-
assert.
|
|
98
|
+
assert.ok(h.status(A) === 'active' || h.status(A) === 'idle', 'A (root) live before close');
|
|
86
99
|
// Spine: A→{B,S}, B→{C,D}, C→{E}, S→{G} (all active spawn-seed edges).
|
|
87
100
|
const subIds = (n) => h.subscriptions(n).map((s) => s.node_id).sort();
|
|
88
101
|
assert.deepEqual(subIds(A), [B, S].sort(), 'A subscribes_to B and S');
|
|
@@ -105,19 +118,19 @@ test('cascade close: middle-node close reaps EXACTLY its subtree (canceled), anc
|
|
|
105
118
|
const aInboxBefore = h.inbox(A);
|
|
106
119
|
assert.ok(aInboxBefore.some((e) => e.from === B && e.kind === 'update'), "A's inbox holds B's pre-close update (non-vacuous 'intact' baseline)");
|
|
107
120
|
// ===================================================================
|
|
108
|
-
// CLOSE the MIDDLE node B, through the REAL CLI (`crtr node close --node B`,
|
|
121
|
+
// CLOSE the MIDDLE node B, through the REAL CLI (`crtr node lifecycle close --node B`,
|
|
109
122
|
// run AS the root A). closeNode is synchronous in the subprocess: by the
|
|
110
123
|
// time it returns, rows are flipped and panes are killed.
|
|
111
124
|
// ===================================================================
|
|
112
|
-
const closeRes = h.cli(A, ['node', 'close', '--node', B]);
|
|
113
|
-
assert.equal(closeRes.code, 0, `node close exit 0\n${closeRes.stderr}`);
|
|
125
|
+
const closeRes = h.cli(A, ['node', 'lifecycle', 'close', '--node', B]);
|
|
126
|
+
assert.equal(closeRes.code, 0, `node lifecycle close exit 0\n${closeRes.stderr}`);
|
|
114
127
|
// The CLI's own rendered report (plain markdown): cascade root B, exactly
|
|
115
128
|
// 4 closed, 0 spared (no spared clause is emitted when none were spared).
|
|
116
129
|
assert.match(closeRes.stdout, new RegExp(`^Closed ${B} and its exclusive subtree — 4 node\\(s\\) closed\\.`), `close report names B as root, count=4, spared=0\n${closeRes.stdout}`);
|
|
117
130
|
// ===================================================================
|
|
118
131
|
// ASSERT 1 — the A5 DELIVERABLE: the EXACT terminal status of every
|
|
119
|
-
// cascade-
|
|
120
|
-
//
|
|
132
|
+
// cascade-closed node. With the fixtures now non-empty, close exercises
|
|
133
|
+
// cancel+notice semantics and the rows remain present as canceled husks.
|
|
121
134
|
// ===================================================================
|
|
122
135
|
for (const id of subtree) {
|
|
123
136
|
const n = h.node(id);
|
|
@@ -125,11 +138,11 @@ test('cascade close: middle-node close reaps EXACTLY its subtree (canceled), anc
|
|
|
125
138
|
assert.strictEqual(n.intent ?? null, null, `${id} intent cleared to null on cancel`);
|
|
126
139
|
}
|
|
127
140
|
// Pin the exact field tuple once more, explicitly, for the human decision:
|
|
128
|
-
// a cascade-
|
|
141
|
+
// a cascade-closed descendant under `node lifecycle close` reads (canceled, null) —
|
|
129
142
|
// NOT (done, done) and NOT (done, null). This is the confirmed A5 fact.
|
|
130
143
|
{
|
|
131
144
|
const e = h.node(E); // the deepest descendant
|
|
132
|
-
assert.deepEqual({ status: e.status, intent: e.intent ?? null }, { status: 'canceled', intent: null }, "deepest
|
|
145
|
+
assert.deepEqual({ status: e.status, intent: e.intent ?? null }, { status: 'canceled', intent: null }, "deepest closed descendant E: (status,intent) === ('canceled', null)");
|
|
133
146
|
}
|
|
134
147
|
// ===================================================================
|
|
135
148
|
// ASSERT 2 — broker ENGINE torn down for the ENTIRE subtree (the real
|
|
@@ -146,7 +159,7 @@ test('cascade close: middle-node close reaps EXACTLY its subtree (canceled), anc
|
|
|
146
159
|
}
|
|
147
160
|
// ===================================================================
|
|
148
161
|
// ASSERT 3 — EXCLUSIVE-SUBTREE OWNERSHIP: nothing ABOVE (A) and nothing
|
|
149
|
-
// SIDEWAYS (S, G) was reaped. close(B)
|
|
162
|
+
// SIDEWAYS (S, G) was reaped. close(B) canceled EXACTLY B's own subtree.
|
|
150
163
|
// ===================================================================
|
|
151
164
|
// Ancestor A — lifecycle untouched (still the live resident root), but A is
|
|
152
165
|
// the SURVIVING manager of the close-root B, so the wake doctrine fix WAKES
|
|
@@ -168,7 +181,7 @@ test('cascade close: middle-node close reaps EXACTLY its subtree (canceled), anc
|
|
|
168
181
|
}
|
|
169
182
|
// Sideways subtree S→G — wholly alive: status active AND broker engine alive.
|
|
170
183
|
for (const id of sideways) {
|
|
171
|
-
assert.equal(h.status(id), 'active', `${id} (sideways) still active — not
|
|
184
|
+
assert.equal(h.status(id), 'active', `${id} (sideways) still active — not canceled`);
|
|
172
185
|
const pid = h.node(id).pi_pid;
|
|
173
186
|
assert.ok(pid != null && isPidAlive(pid), `${id} (sideways) broker engine still alive`);
|
|
174
187
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// BROKER-CUT ADAPTATION (taste/broker-is-the-host, 2026-06-10): every node is a
|
|
6
6
|
// detached headless broker. After a09b71f a managed child opens NO viewer on
|
|
7
7
|
// spawn — a viewer is opened on demand via `node focus`, registering its
|
|
8
|
-
// `crtr attach` VIEWER pane in the focuses table. The engine is NOT in a pane, so the
|
|
8
|
+
// `crtr surface attach` VIEWER pane in the focuses table. The engine is NOT in a pane, so the
|
|
9
9
|
// pre-cut "relocate the still-running pi pane to the backstage" behavior —
|
|
10
10
|
// detachToBackground's engine break-pane/release path, and its isGenerating()
|
|
11
11
|
// gate that released a non-generating node to dormant — is DELETED. The Bug-1
|
|
@@ -60,7 +60,7 @@ test('node demote --detach: flips terminal in place, CLOSES the viewer pane + fo
|
|
|
60
60
|
assert.equal(b0.status, 'active', 'B active after boot');
|
|
61
61
|
const brokerPid = b0.pi_pid;
|
|
62
62
|
assert.ok(brokerPid != null && isPidAlive(brokerPid), 'B broker engine alive before detach');
|
|
63
|
-
// Put B genuinely "on screen": `node focus` opens its one `crtr attach`
|
|
63
|
+
// Put B genuinely "on screen": `node focus` opens its one `crtr surface attach`
|
|
64
64
|
// VIEWER pane beside a caller pane in the harness session, registering the
|
|
65
65
|
// viewer focus row (§A.3) — the on-demand viewer the detach then tears down.
|
|
66
66
|
const caller = makePane(h.session);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Run with: node --import tsx/esm --test src/core/__tests__/human-new-window-regression.test.ts
|
|
2
2
|
//
|
|
3
|
-
// BUG REGRESSION: `crtr human ask|
|
|
3
|
+
// BUG REGRESSION: `crtr human ask|review|notify` opened NO pane at all.
|
|
4
4
|
//
|
|
5
5
|
// spawnAndDetach's 'new-window' placement passed a tmux PANE id straight to
|
|
6
6
|
// `new-window -t` (`new-window -d -a -t %<pane>`). tmux REJECTS a pane id for
|