@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,7 +1,7 @@
|
|
|
1
1
|
// broker-protocol.ts — the client↔broker wire protocol for the headless node
|
|
2
2
|
// Surface (design §5.2). Pure types + a newline-delimited JSON codec; no I/O, no
|
|
3
3
|
// SDK construction. Consumed by the broker (src/core/runtime/broker.ts) and, in
|
|
4
|
-
// Phase 4, by the `crtr attach` terminal client and the
|
|
4
|
+
// Phase 4, by the `crtr surface attach` terminal client and the surface web bridge.
|
|
5
5
|
//
|
|
6
6
|
// The transport is one unix socket per node (`nodeDir(id)/view.sock`) speaking
|
|
7
7
|
// newline-delimited JSON frames. Live engine events are relayed VERBATIM — the
|
|
@@ -88,7 +88,7 @@ export const BROKER_READ_CAPS = {
|
|
|
88
88
|
* arriving in ~64 KiB socket chunks costs O(frame) total instead of O(frame ×
|
|
89
89
|
* chunks). The old `buf += chunk; buf.indexOf('\n')` shape flattened + re-walked
|
|
90
90
|
* the whole carry per chunk: a 16 MiB welcome snapshot cost ~250 ms of
|
|
91
|
-
* event-loop stall in `crtr attach` (typing lag) and the same again in the
|
|
91
|
+
* event-loop stall in `crtr surface attach` (typing lag) and the same again in the
|
|
92
92
|
* broker; this shape decodes it in ~13 ms.
|
|
93
93
|
*
|
|
94
94
|
* A `StringDecoder` decodes incoming Buffer chunks: an incomplete trailing
|
|
@@ -22,13 +22,42 @@ import { tmpdir } from 'node:os';
|
|
|
22
22
|
import { join } from 'node:path';
|
|
23
23
|
import { randomUUID } from 'node:crypto';
|
|
24
24
|
import { getAgentDir, initTheme, } from '@earendil-works/pi-coding-agent';
|
|
25
|
-
import { jobDir, nodeDir } from '../canvas/paths.js';
|
|
25
|
+
import { jobDir, nodeDir, viewSocketPath } from '../canvas/paths.js';
|
|
26
26
|
import { getNode, updateNode } from '../canvas/index.js';
|
|
27
27
|
import { FRONT_DOOR_ENV } from './front-door.js';
|
|
28
|
-
import { piInvocationToSdkConfig } from './launch.js';
|
|
28
|
+
import { equivalentOtherProviderModel, normalizeModel, piInvocationToSdkConfig, } from './launch.js';
|
|
29
29
|
import { assertEngineVersion, loadBrokerEngine } from './broker-sdk.js';
|
|
30
|
+
import { classify } from '../fault-classifier.js';
|
|
31
|
+
import { isModelNotFoundError, readFault, recordFault } from './fault.js';
|
|
32
|
+
import { CONNECTION_FAULT_RECOVERY_BODY, PROVIDER_FAULT_RECOVERY_BODY } from './fault-recovery-nudge.js';
|
|
33
|
+
import { markFatalOnExhaust, nextFaultRetry, policyFor } from './fault-recovery.js';
|
|
34
|
+
import { probeOnline as probeOnlineReal } from './connectivity.js';
|
|
30
35
|
import { BUILTIN_SLASH_COMMANDS } from './pi-vendored.js';
|
|
31
36
|
import { encodeFrame, FrameDecoder, FrameOverflowError, BROKER_READ_CAPS, } from './broker-protocol.js';
|
|
37
|
+
const THINKING_LEVELS = new Set(['off', 'minimal', 'low', 'medium', 'high', 'xhigh']);
|
|
38
|
+
function parseModelSpec(spec) {
|
|
39
|
+
const i = spec.lastIndexOf(':');
|
|
40
|
+
if (i <= 0)
|
|
41
|
+
return { modelSpec: spec };
|
|
42
|
+
const suffix = spec.slice(i + 1);
|
|
43
|
+
if (!THINKING_LEVELS.has(suffix))
|
|
44
|
+
return { modelSpec: spec };
|
|
45
|
+
return { modelSpec: spec.slice(0, i), thinkingLevel: suffix };
|
|
46
|
+
}
|
|
47
|
+
function formatModelSpec(model, thinkingLevel) {
|
|
48
|
+
if (model === null || model === undefined)
|
|
49
|
+
return null;
|
|
50
|
+
const suffix = thinkingLevel !== undefined && thinkingLevel !== '' && thinkingLevel !== 'off' ? `:${thinkingLevel}` : '';
|
|
51
|
+
return `${model.provider}/${model.id}${suffix}`;
|
|
52
|
+
}
|
|
53
|
+
function faultRetryProbe() {
|
|
54
|
+
const mode = process.env['CRTR_FAULT_RETRY_PROBE'];
|
|
55
|
+
if (mode === 'always')
|
|
56
|
+
return async () => true;
|
|
57
|
+
if (mode === 'never')
|
|
58
|
+
return async () => false;
|
|
59
|
+
return probeOnlineReal;
|
|
60
|
+
}
|
|
32
61
|
// ---------------------------------------------------------------------------
|
|
33
62
|
// Tunables (T3 backpressure / T4 dialog anti-deadlock)
|
|
34
63
|
// ---------------------------------------------------------------------------
|
|
@@ -126,6 +155,7 @@ export async function runBroker(nodeId) {
|
|
|
126
155
|
// eslint-disable-next-line prefer-const
|
|
127
156
|
let { session, services, resuming, runtime } = await buildBrokerSession(engine, cfg);
|
|
128
157
|
activeSession = session;
|
|
158
|
+
const retryProbe = faultRetryProbe();
|
|
129
159
|
// Initialize pi's process-global theme. The pi binary does this at boot
|
|
130
160
|
// (main.js: initTheme(settingsManager.getTheme(), appMode === 'interactive')),
|
|
131
161
|
// but the SDK convenience path the broker uses does NOT. Without it, ANY
|
|
@@ -147,7 +177,7 @@ export async function runBroker(nodeId) {
|
|
|
147
177
|
// -------------------------------------------------------------------------
|
|
148
178
|
// Socket fan-out + controller arbitration state
|
|
149
179
|
// -------------------------------------------------------------------------
|
|
150
|
-
const sockPath =
|
|
180
|
+
const sockPath = viewSocketPath(nodeId);
|
|
151
181
|
const attachPath = join(jobDir(nodeId), 'attach.json');
|
|
152
182
|
const clients = new Set();
|
|
153
183
|
const pendingDialogs = new Map();
|
|
@@ -289,6 +319,7 @@ export async function runBroker(nodeId) {
|
|
|
289
319
|
// ---------------------------------------------------------------------------
|
|
290
320
|
let pendingUpdate = null;
|
|
291
321
|
let pendingUpdateTimer = null;
|
|
322
|
+
let faultRetryTimer = null;
|
|
292
323
|
const flushPendingUpdate = () => {
|
|
293
324
|
if (pendingUpdateTimer !== null) {
|
|
294
325
|
clearTimeout(pendingUpdateTimer);
|
|
@@ -300,8 +331,221 @@ export async function runBroker(nodeId) {
|
|
|
300
331
|
broadcast(frame);
|
|
301
332
|
}
|
|
302
333
|
};
|
|
334
|
+
const clearFaultRetryTimer = () => {
|
|
335
|
+
if (faultRetryTimer === null)
|
|
336
|
+
return;
|
|
337
|
+
clearTimeout(faultRetryTimer);
|
|
338
|
+
faultRetryTimer = null;
|
|
339
|
+
};
|
|
340
|
+
const failedRetryProviders = new Set();
|
|
341
|
+
let providerFallbackInFlight = null;
|
|
342
|
+
// Models that have already produced a 404 not_found this session. Guards the
|
|
343
|
+
// not-found fallback below against an infinite swap→re-drive→404 loop when the
|
|
344
|
+
// fallback TARGET is itself unavailable (or equals the model that just failed).
|
|
345
|
+
const notFoundModels = new Set();
|
|
346
|
+
let notFoundFallbackInFlight = null;
|
|
347
|
+
const maybeSwitchProviderForRetry = (event) => {
|
|
348
|
+
if (event.type !== 'auto_retry_start')
|
|
349
|
+
return;
|
|
350
|
+
const retry = event;
|
|
351
|
+
const kind = classify('pi→provider', retry.errorMessage ?? '').kind;
|
|
352
|
+
if (kind !== 'rate-limit' && kind !== 'connection')
|
|
353
|
+
return;
|
|
354
|
+
if (providerFallbackInFlight !== null)
|
|
355
|
+
return;
|
|
356
|
+
const currentSpec = formatModelSpec(session.model, session.thinkingLevel);
|
|
357
|
+
if (currentSpec === null)
|
|
358
|
+
return;
|
|
359
|
+
const next = equivalentOtherProviderModel(currentSpec, failedRetryProviders);
|
|
360
|
+
if (next === null)
|
|
361
|
+
return;
|
|
362
|
+
providerFallbackInFlight = (async () => {
|
|
363
|
+
const model = findModelSpec(next.model);
|
|
364
|
+
if (model === undefined) {
|
|
365
|
+
logBroker(`provider fallback skipped: ${next.model} is not registered`);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
const requested = parseModelSpec(next.model);
|
|
369
|
+
await session.setModel(model);
|
|
370
|
+
if (requested.thinkingLevel !== undefined)
|
|
371
|
+
session.setThinkingLevel(requested.thinkingLevel);
|
|
372
|
+
failedRetryProviders.add(next.fromProvider);
|
|
373
|
+
broadcastModelChanged();
|
|
374
|
+
logBroker(`provider fallback after ${kind}: ${currentSpec} → ${formatModelSpec(session.model, session.thinkingLevel) ?? next.model}`);
|
|
375
|
+
})()
|
|
376
|
+
.catch((err) => {
|
|
377
|
+
logBroker(`provider fallback failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
378
|
+
})
|
|
379
|
+
.finally(() => {
|
|
380
|
+
providerFallbackInFlight = null;
|
|
381
|
+
});
|
|
382
|
+
};
|
|
383
|
+
// A 404 not_found is NOT one of pi's auto-retried kinds (it retries 429/5xx
|
|
384
|
+
// only) and never resolves on its own — the configured model id is wrong or
|
|
385
|
+
// decommissioned (e.g. the default `anthropic/ultra` pointing at a model the
|
|
386
|
+
// account can't reach). Left alone the node errors out, the stophook parks it
|
|
387
|
+
// as a stall, and the daemon force-recycles it onto the SAME bad model in a
|
|
388
|
+
// loop. Instead: fail the node over to the strong-anthropic ladder model and
|
|
389
|
+
// re-drive the turn so the work continues. broadcastModelChanged persists the
|
|
390
|
+
// swap into the durable launch recipe, so a later revive uses the good model
|
|
391
|
+
// too. Fires on the terminal-error message (stopReason 'error'), the signal a
|
|
392
|
+
// non-retried request surfaces.
|
|
393
|
+
const maybeFallbackOnModelNotFound = (event) => {
|
|
394
|
+
if (event.type !== 'message_end')
|
|
395
|
+
return;
|
|
396
|
+
const msg = event.message;
|
|
397
|
+
if (msg === undefined || msg.role !== 'assistant' || msg.stopReason !== 'error')
|
|
398
|
+
return;
|
|
399
|
+
if (!isModelNotFoundError(msg.errorMessage ?? ''))
|
|
400
|
+
return;
|
|
401
|
+
if (notFoundFallbackInFlight !== null)
|
|
402
|
+
return;
|
|
403
|
+
const currentSpec = formatModelSpec(session.model, session.thinkingLevel);
|
|
404
|
+
if (currentSpec === null)
|
|
405
|
+
return;
|
|
406
|
+
notFoundModels.add(currentSpec);
|
|
407
|
+
// The strong-anthropic ladder cell — "whatever the current strong anthropic
|
|
408
|
+
// provider model is" (config modelLadders.anthropic.strong), not hardcoded.
|
|
409
|
+
const target = normalizeModel('anthropic/strong');
|
|
410
|
+
// Don't loop: the failed model already IS the target, or the target itself
|
|
411
|
+
// 404'd earlier this session. Leave it to the normal stall/recycle path.
|
|
412
|
+
if (target === currentSpec || notFoundModels.has(target)) {
|
|
413
|
+
logBroker(`not_found fallback skipped: ${currentSpec} has no healthy strong-anthropic target (${target})`);
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
notFoundFallbackInFlight = (async () => {
|
|
417
|
+
const model = findModelSpec(target);
|
|
418
|
+
if (model === undefined) {
|
|
419
|
+
logBroker(`not_found fallback skipped: ${target} is not registered`);
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
const requested = parseModelSpec(target);
|
|
423
|
+
await session.setModel(model);
|
|
424
|
+
if (requested.thinkingLevel !== undefined)
|
|
425
|
+
session.setThinkingLevel(requested.thinkingLevel);
|
|
426
|
+
broadcastModelChanged();
|
|
427
|
+
const resolved = formatModelSpec(session.model, session.thinkingLevel) ?? target;
|
|
428
|
+
logBroker(`not_found fallback: ${currentSpec} unavailable → ${resolved}; re-driving turn`);
|
|
429
|
+
// Re-drive: a 404 left the turn errored, so the model swap alone changes
|
|
430
|
+
// nothing until the next prompt — re-issue so the now-healthy model picks
|
|
431
|
+
// the task back up. We fire on message_end, BEFORE the errored turn has
|
|
432
|
+
// fully settled, so wait for the engine to go idle first: prompt() THROWS
|
|
433
|
+
// if called while streaming without a streamingBehavior, which would swap
|
|
434
|
+
// the model but silently skip the continuation.
|
|
435
|
+
await session.agent.waitForIdle();
|
|
436
|
+
await session.prompt(`The previous model (${currentSpec}) was unavailable (provider 404 not_found), so you were automatically switched to ${resolved}. Continue the task from where the failed turn left off.`);
|
|
437
|
+
})()
|
|
438
|
+
.catch((err) => {
|
|
439
|
+
logBroker(`not_found fallback failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
440
|
+
})
|
|
441
|
+
.finally(() => {
|
|
442
|
+
notFoundFallbackInFlight = null;
|
|
443
|
+
});
|
|
444
|
+
};
|
|
445
|
+
const isActiveAutoFault = (fault) => {
|
|
446
|
+
if (fault === null)
|
|
447
|
+
return false;
|
|
448
|
+
if (fault.retry.disposition !== 'auto')
|
|
449
|
+
return false;
|
|
450
|
+
if (fault.retry.by !== 'daemon')
|
|
451
|
+
return false;
|
|
452
|
+
return fault.kind === 'connection' || fault.kind === 'rate-limit' || fault.kind === 'overloaded';
|
|
453
|
+
};
|
|
454
|
+
const faultRetryDelayMs = (fault, now) => {
|
|
455
|
+
if (fault.retry.nextAt !== undefined) {
|
|
456
|
+
const ms = Date.parse(fault.retry.nextAt) - now;
|
|
457
|
+
return Number.isFinite(ms) ? Math.max(0, ms) : null;
|
|
458
|
+
}
|
|
459
|
+
const plan = nextFaultRetry(fault, now);
|
|
460
|
+
return plan?.delayMs ?? null;
|
|
461
|
+
};
|
|
462
|
+
const clearAndArmFaultRetry = (delayMs) => {
|
|
463
|
+
clearFaultRetryTimer();
|
|
464
|
+
faultRetryTimer = setTimeout(() => {
|
|
465
|
+
faultRetryTimer = null;
|
|
466
|
+
void runFaultRetry().catch((err) => {
|
|
467
|
+
logBroker(`fault retry fire failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
468
|
+
});
|
|
469
|
+
}, delayMs);
|
|
470
|
+
if (typeof faultRetryTimer.unref === 'function')
|
|
471
|
+
faultRetryTimer.unref();
|
|
472
|
+
};
|
|
473
|
+
const scheduleFaultRetry = () => {
|
|
474
|
+
if (session.isStreaming)
|
|
475
|
+
return;
|
|
476
|
+
if (faultRetryTimer !== null)
|
|
477
|
+
return;
|
|
478
|
+
const fault = readFault(nodeId);
|
|
479
|
+
if (!isActiveAutoFault(fault)) {
|
|
480
|
+
clearFaultRetryTimer();
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const delayMs = faultRetryDelayMs(fault, Date.now());
|
|
484
|
+
if (delayMs === null)
|
|
485
|
+
return;
|
|
486
|
+
clearAndArmFaultRetry(delayMs);
|
|
487
|
+
};
|
|
488
|
+
const runFaultRetry = async () => {
|
|
489
|
+
if (session.isStreaming)
|
|
490
|
+
return;
|
|
491
|
+
const initial = readFault(nodeId);
|
|
492
|
+
if (!isActiveAutoFault(initial))
|
|
493
|
+
return;
|
|
494
|
+
let fault = initial;
|
|
495
|
+
if (initial.kind === 'connection') {
|
|
496
|
+
const online = await retryProbe();
|
|
497
|
+
// The probe can take seconds. A turn may have started, or the marker may
|
|
498
|
+
// have been cleared/replaced/recovered, in that window. Re-validate
|
|
499
|
+
// against fresh state before re-arming or consuming an attempt —
|
|
500
|
+
// otherwise a stale retry resurrects a recovered episode or double-drives
|
|
501
|
+
// a now-streaming session.
|
|
502
|
+
if (session.isStreaming)
|
|
503
|
+
return;
|
|
504
|
+
const fresh = readFault(nodeId);
|
|
505
|
+
if (!isActiveAutoFault(fresh) || fresh.since !== initial.since)
|
|
506
|
+
return;
|
|
507
|
+
if (!online) {
|
|
508
|
+
clearAndArmFaultRetry(policyFor(fresh.kind).baseDelayMs);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
fault = fresh;
|
|
512
|
+
}
|
|
513
|
+
const now = Date.now();
|
|
514
|
+
const attempt = fault.retry.attempt ?? 0;
|
|
515
|
+
const policy = policyFor(fault.kind);
|
|
516
|
+
if (attempt >= policy.max) {
|
|
517
|
+
recordFault(nodeId, markFatalOnExhaust(fault));
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
const plan = nextFaultRetry(fault, now);
|
|
521
|
+
if (plan === null) {
|
|
522
|
+
recordFault(nodeId, markFatalOnExhaust(fault));
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
const anchorEntryId = fault.anchorEntryId;
|
|
526
|
+
if (anchorEntryId !== undefined) {
|
|
527
|
+
try {
|
|
528
|
+
const leafId = session.sessionManager.getLeafId?.() ?? null;
|
|
529
|
+
if (leafId !== anchorEntryId) {
|
|
530
|
+
await session.navigateTree(anchorEntryId);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
catch (err) {
|
|
534
|
+
logBroker(`fault retry rewind skipped: ${err instanceof Error ? err.message : String(err)}`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
recordFault(nodeId, plan.fault);
|
|
538
|
+
await session.prompt(fault.kind === 'connection' ? CONNECTION_FAULT_RECOVERY_BODY : PROVIDER_FAULT_RECOVERY_BODY);
|
|
539
|
+
};
|
|
303
540
|
const relayEvent = (event) => {
|
|
304
|
-
|
|
541
|
+
maybeSwitchProviderForRetry(event);
|
|
542
|
+
maybeFallbackOnModelNotFound(event);
|
|
543
|
+
const type = event.type;
|
|
544
|
+
if (type === 'agent_start' || type === 'turn_start')
|
|
545
|
+
clearFaultRetryTimer();
|
|
546
|
+
if (type === 'agent_end' && !session.isStreaming)
|
|
547
|
+
scheduleFaultRetry();
|
|
548
|
+
if (type === 'message_update') {
|
|
305
549
|
pendingUpdate = event; // latest full-message update supersedes the held one
|
|
306
550
|
if (pendingUpdateTimer === null) {
|
|
307
551
|
pendingUpdateTimer = setTimeout(flushPendingUpdate, MESSAGE_UPDATE_COALESCE_MS);
|
|
@@ -330,10 +574,9 @@ export async function runBroker(nodeId) {
|
|
|
330
574
|
// broker's own env (merged by piInvocationToSdkConfig at boot).
|
|
331
575
|
const persistModelChoice = () => {
|
|
332
576
|
const nodeId = process.env['CRTR_NODE_ID'];
|
|
333
|
-
const
|
|
334
|
-
if (nodeId === undefined || nodeId === '' ||
|
|
577
|
+
const spec = formatModelSpec(session.model, session.thinkingLevel);
|
|
578
|
+
if (nodeId === undefined || nodeId === '' || spec === null)
|
|
335
579
|
return;
|
|
336
|
-
const spec = `${m.provider}/${m.id}`;
|
|
337
580
|
try {
|
|
338
581
|
const meta = getNode(nodeId);
|
|
339
582
|
if (meta === null)
|
|
@@ -478,6 +721,16 @@ export async function runBroker(nodeId) {
|
|
|
478
721
|
// a subscriber otherwise propagates as a run failure that would crash the broker.
|
|
479
722
|
// -------------------------------------------------------------------------
|
|
480
723
|
let unsubscribe;
|
|
724
|
+
const captureSystemPrompt = () => {
|
|
725
|
+
try {
|
|
726
|
+
const dir = jobDir(nodeId);
|
|
727
|
+
mkdirSync(dir, { recursive: true });
|
|
728
|
+
writeFileSync(join(dir, 'system-prompt.md'), session.systemPrompt, 'utf8');
|
|
729
|
+
}
|
|
730
|
+
catch {
|
|
731
|
+
/* non-fatal: diagnostic only */
|
|
732
|
+
}
|
|
733
|
+
};
|
|
481
734
|
const rebindSession = async () => {
|
|
482
735
|
if (runtime !== undefined) {
|
|
483
736
|
session = runtime.session; // the runtime replaced it; follow the new one
|
|
@@ -505,6 +758,7 @@ export async function runBroker(nodeId) {
|
|
|
505
758
|
clearTimeout(pendingUpdateTimer);
|
|
506
759
|
pendingUpdateTimer = null;
|
|
507
760
|
}
|
|
761
|
+
clearFaultRetryTimer();
|
|
508
762
|
pendingUpdate = null;
|
|
509
763
|
unsubscribe = session.subscribe((event) => {
|
|
510
764
|
try {
|
|
@@ -514,6 +768,7 @@ export async function runBroker(nodeId) {
|
|
|
514
768
|
logBroker(`event relay threw: ${String(err)}`);
|
|
515
769
|
}
|
|
516
770
|
});
|
|
771
|
+
captureSystemPrompt();
|
|
517
772
|
};
|
|
518
773
|
// Register the rebind BEFORE the first bind so a replacement triggered during
|
|
519
774
|
// startup is honored; then do the initial bind + subscribe.
|
|
@@ -521,6 +776,7 @@ export async function runBroker(nodeId) {
|
|
|
521
776
|
await rebindSession();
|
|
522
777
|
});
|
|
523
778
|
await rebindSession();
|
|
779
|
+
captureSystemPrompt();
|
|
524
780
|
// -------------------------------------------------------------------------
|
|
525
781
|
// Drive the engine on behalf of the single controller.
|
|
526
782
|
// -------------------------------------------------------------------------
|
|
@@ -555,8 +811,51 @@ export async function runBroker(nodeId) {
|
|
|
555
811
|
void session.followUp(frame.text, frame.images).catch(relayError);
|
|
556
812
|
break;
|
|
557
813
|
case 'abort':
|
|
558
|
-
|
|
814
|
+
// esc/abort cancels whatever is live: a running `!` command (abortBash)
|
|
815
|
+
// takes precedence over the agent turn, mirroring pi interactive mode.
|
|
816
|
+
if (session.isBashRunning)
|
|
817
|
+
session.abortBash();
|
|
818
|
+
else
|
|
819
|
+
void session.abort().catch(relayError);
|
|
820
|
+
break;
|
|
821
|
+
case 'bash': {
|
|
822
|
+
// `!`/`!!` bash: run via session.executeBash (records a bashExecution
|
|
823
|
+
// context message, starts NO agent turn) and relay its lifecycle to ALL
|
|
824
|
+
// viewers as bash_start/bash_output/bash_end so each renders the live
|
|
825
|
+
// component. Serialized like pi's interactive mode — reject a second `!`
|
|
826
|
+
// while one is already running rather than racing _bashAbortController.
|
|
827
|
+
const command = frame.command;
|
|
828
|
+
if (command.trim() === '')
|
|
829
|
+
break;
|
|
830
|
+
if (session.isBashRunning) {
|
|
831
|
+
sendFrame(client, {
|
|
832
|
+
type: 'error',
|
|
833
|
+
code: 'bash_busy',
|
|
834
|
+
message: 'A bash command is already running',
|
|
835
|
+
});
|
|
836
|
+
break;
|
|
837
|
+
}
|
|
838
|
+
const exclude = frame.excludeFromContext === true;
|
|
839
|
+
// Order before any held assistant message_update, so a `!` run mid-stream
|
|
840
|
+
// never renders ahead of the update it follows.
|
|
841
|
+
flushPendingUpdate();
|
|
842
|
+
broadcast({ type: 'bash_start', command, excludeFromContext: exclude });
|
|
843
|
+
void session
|
|
844
|
+
.executeBash(command, (chunk) => broadcast({ type: 'bash_output', chunk }), {
|
|
845
|
+
excludeFromContext: exclude,
|
|
846
|
+
})
|
|
847
|
+
.then((result) => {
|
|
848
|
+
broadcast({
|
|
849
|
+
type: 'bash_end',
|
|
850
|
+
exitCode: result.exitCode,
|
|
851
|
+
cancelled: result.cancelled,
|
|
852
|
+
truncated: result.truncated,
|
|
853
|
+
fullOutputPath: result.fullOutputPath,
|
|
854
|
+
});
|
|
855
|
+
})
|
|
856
|
+
.catch(relayError);
|
|
559
857
|
break;
|
|
858
|
+
}
|
|
560
859
|
}
|
|
561
860
|
};
|
|
562
861
|
// -------------------------------------------------------------------------
|
|
@@ -593,10 +892,11 @@ export async function runBroker(nodeId) {
|
|
|
593
892
|
* carries any extension-registered providers). Pure: returns undefined on a
|
|
594
893
|
* malformed spec or an unknown model. */
|
|
595
894
|
const findModelSpec = (spec) => {
|
|
596
|
-
const
|
|
895
|
+
const { modelSpec } = parseModelSpec(spec);
|
|
896
|
+
const slash = modelSpec.indexOf('/');
|
|
597
897
|
if (slash <= 0)
|
|
598
898
|
return undefined;
|
|
599
|
-
return services.modelRegistry.find(
|
|
899
|
+
return services.modelRegistry.find(modelSpec.slice(0, slash), modelSpec.slice(slash + 1));
|
|
600
900
|
};
|
|
601
901
|
/** Resolve a model from a free-text query — `/model opus`, `/model fable`. Tries
|
|
602
902
|
* the exact `provider/id` spec first; failing that, searches the registry the
|
|
@@ -767,6 +1067,10 @@ export async function runBroker(nodeId) {
|
|
|
767
1067
|
thinkingLevel: session.thinkingLevel,
|
|
768
1068
|
availableThinkingLevels: session.getAvailableThinkingLevels(),
|
|
769
1069
|
currentTheme: sm.getTheme() ?? '',
|
|
1070
|
+
// Light/dark appearance is a property of the terminal the VIEWER is attached
|
|
1071
|
+
// to; the headless broker has none, so emit a placeholder. The viewer owns
|
|
1072
|
+
// the theme submenu and resolves real terminal appearance locally.
|
|
1073
|
+
terminalTheme: 'dark',
|
|
770
1074
|
availableThemes,
|
|
771
1075
|
hideThinkingBlock: sm.getHideThinkingBlock(),
|
|
772
1076
|
collapseChangelog: sm.getCollapseChangelog(),
|
|
@@ -856,7 +1160,8 @@ export async function runBroker(nodeId) {
|
|
|
856
1160
|
case 'prompt':
|
|
857
1161
|
case 'steer':
|
|
858
1162
|
case 'follow_up':
|
|
859
|
-
case 'abort':
|
|
1163
|
+
case 'abort':
|
|
1164
|
+
case 'bash': {
|
|
860
1165
|
if (notController(client, 'drive the engine'))
|
|
861
1166
|
break;
|
|
862
1167
|
driveEngine(client, frame);
|
|
@@ -904,11 +1209,12 @@ export async function runBroker(nodeId) {
|
|
|
904
1209
|
case 'set_model': {
|
|
905
1210
|
if (notController(client, 'set the model'))
|
|
906
1211
|
break;
|
|
1212
|
+
const requested = parseModelSpec(frame.model);
|
|
907
1213
|
let model;
|
|
908
1214
|
try {
|
|
909
1215
|
// Accept both an exact `provider/id` (from the picker) and a free-text
|
|
910
1216
|
// query (`/model opus`) — resolveModelQuery falls back to a search match.
|
|
911
|
-
model = resolveModelQuery(
|
|
1217
|
+
model = resolveModelQuery(requested.modelSpec);
|
|
912
1218
|
}
|
|
913
1219
|
catch (err) {
|
|
914
1220
|
// N2: registry.find should never throw on the real SDK, but a degenerate
|
|
@@ -927,6 +1233,8 @@ export async function runBroker(nodeId) {
|
|
|
927
1233
|
void session
|
|
928
1234
|
.setModel(model)
|
|
929
1235
|
.then(() => {
|
|
1236
|
+
if (requested.thinkingLevel !== undefined)
|
|
1237
|
+
session.setThinkingLevel(requested.thinkingLevel);
|
|
930
1238
|
ackTo(client, 'set_model');
|
|
931
1239
|
broadcastModelChanged();
|
|
932
1240
|
})
|
|
@@ -1206,8 +1514,13 @@ export async function runBroker(nodeId) {
|
|
|
1206
1514
|
break;
|
|
1207
1515
|
}
|
|
1208
1516
|
case 'reload_auth': {
|
|
1209
|
-
|
|
1210
|
-
|
|
1517
|
+
// Open to any client: reload_auth is an idempotent local re-read of the
|
|
1518
|
+
// shared auth.json + a model-registry refresh. It does NOT steer the
|
|
1519
|
+
// conversation, so there is nothing to gate behind controller. Gating it
|
|
1520
|
+
// forced callers (notably the daemon's canvas-wide fan, which propagates
|
|
1521
|
+
// a single /login to every live broker) to first request_control, which
|
|
1522
|
+
// ALWAYS preempts — silently demoting any attached human to observer on
|
|
1523
|
+
// every login. Letting an observer trigger this is the safer default.
|
|
1211
1524
|
try {
|
|
1212
1525
|
services.authStorage.reload();
|
|
1213
1526
|
services.modelRegistry.refresh();
|
|
@@ -1293,6 +1606,7 @@ export async function runBroker(nodeId) {
|
|
|
1293
1606
|
});
|
|
1294
1607
|
server.on('error', (err) => {
|
|
1295
1608
|
process.stderr.write(`[broker] socket server error: ${String(err)}\n`);
|
|
1609
|
+
process.exit(1);
|
|
1296
1610
|
});
|
|
1297
1611
|
server.listen(sockPath);
|
|
1298
1612
|
// Initialize presence to the truthful zero state at boot — this also
|
|
@@ -1373,16 +1687,24 @@ export async function buildBrokerSession(engine, cfg) {
|
|
|
1373
1687
|
resourceLoaderOptions: {
|
|
1374
1688
|
additionalExtensionPaths: cfg.extensionPaths,
|
|
1375
1689
|
appendSystemPrompt: cfg.appendSystemPromptPath !== undefined ? [cfg.appendSystemPromptPath] : undefined,
|
|
1690
|
+
// Suppress pi's <project_context> in the SYSTEM PROMPT — crouter
|
|
1691
|
+
// re-renders the same AGENTS.md/CLAUDE.md files into the first-message
|
|
1692
|
+
// <crtr-context> bearings instead (buildProjectContextBlock), so all
|
|
1693
|
+
// project instructions ride the user message, not the system prompt.
|
|
1694
|
+
noContextFiles: true,
|
|
1376
1695
|
},
|
|
1377
1696
|
});
|
|
1378
1697
|
// 3. Resolve the model spec (`anthropic/sonnet` → a Model) against the
|
|
1379
1698
|
// SERVICES registry — which has any extension-provided providers (C3).
|
|
1380
1699
|
// Undefined ⇒ the SDK picks the settings default.
|
|
1381
1700
|
let model;
|
|
1701
|
+
let thinkingLevel;
|
|
1382
1702
|
if (cfg.model !== undefined && cfg.model !== '') {
|
|
1383
|
-
const
|
|
1703
|
+
const parsedModel = parseModelSpec(cfg.model);
|
|
1704
|
+
thinkingLevel = parsedModel.thinkingLevel;
|
|
1705
|
+
const slash = parsedModel.modelSpec.indexOf('/');
|
|
1384
1706
|
if (slash > 0) {
|
|
1385
|
-
model = services.modelRegistry.find(
|
|
1707
|
+
model = services.modelRegistry.find(parsedModel.modelSpec.slice(0, slash), parsedModel.modelSpec.slice(slash + 1));
|
|
1386
1708
|
if (model === undefined) {
|
|
1387
1709
|
process.stderr.write(`[broker] WARNING: model '${cfg.model}' not found in registry — ` +
|
|
1388
1710
|
`falling back to the SDK default model.\n`);
|
|
@@ -1397,6 +1719,7 @@ export async function buildBrokerSession(engine, cfg) {
|
|
|
1397
1719
|
services,
|
|
1398
1720
|
sessionManager: o.sessionManager,
|
|
1399
1721
|
model,
|
|
1722
|
+
thinkingLevel,
|
|
1400
1723
|
tools: cfg.tools,
|
|
1401
1724
|
sessionStartEvent: o.sessionStartEvent,
|
|
1402
1725
|
});
|
|
@@ -1565,8 +1888,10 @@ export function makeBrokerUiContext(deps) {
|
|
|
1565
1888
|
});
|
|
1566
1889
|
},
|
|
1567
1890
|
setTitle: (title) => deps.broadcast({ type: 'display_title', title }),
|
|
1568
|
-
|
|
1569
|
-
|
|
1891
|
+
notify: (message, type) => {
|
|
1892
|
+
const notifyType = type === 'warn' ? 'warning' : type;
|
|
1893
|
+
deps.broadcast({ type: 'extension_ui_request', id: randomUUID(), method: 'notify', message, notifyType });
|
|
1894
|
+
},
|
|
1570
1895
|
onTerminalInput: () => noop,
|
|
1571
1896
|
setWorkingMessage: noop,
|
|
1572
1897
|
setWorkingVisible: noop,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// close.ts — the "close this node + its subtree" action behind `crtr node close`.
|
|
1
|
+
// close.ts — the "close this node + its subtree" action behind `crtr node lifecycle close`.
|
|
2
2
|
//
|
|
3
3
|
// Closing a node tears down the focused node and every descendant it
|
|
4
4
|
// EXCLUSIVELY owns, walking DOWN the subscribes_to spine (subscriptionsOf = a
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
import { getNode, subscriptionsOf, subscribersOf, } from '../canvas/index.js';
|
|
34
34
|
import { transition } from './lifecycle.js';
|
|
35
35
|
import { headlessBrokerHost } from './host.js';
|
|
36
|
-
import { tearDownNode } from './placement.js';
|
|
36
|
+
import { tearDownNode, reapIfEmpty } from './placement.js';
|
|
37
37
|
import { appendInbox } from '../feed/inbox.js';
|
|
38
38
|
import { appendPassive } from '../feed/passive.js';
|
|
39
39
|
/** The set of nodes to close: the root plus every descendant reachable down the
|
|
@@ -139,35 +139,45 @@ export function closeNode(rootId, opts = {}) {
|
|
|
139
139
|
const deadChildren = subscriptionsOf(id)
|
|
140
140
|
.map((s) => s.node_id)
|
|
141
141
|
.filter((c) => closing.has(c));
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
142
|
+
// Surviving managers captured BEFORE any teardown — a reap (below) deletes
|
|
143
|
+
// this node's edges, so the step-4 fan-out must read them up front.
|
|
144
|
+
const survivors = subscribersOf(id).filter((s) => !closing.has(s.node_id));
|
|
145
|
+
// 0) An EMPTY node (engine never produced an assistant message) is a useless
|
|
146
|
+
// shell — don't park it as a canceled husk, reap it outright (engine +
|
|
147
|
+
// viewer + row + dir). reapIfEmpty handles the teardown; when it fires we
|
|
148
|
+
// skip the cancel transition + resume notice (the node is gone) but still
|
|
149
|
+
// fan the "child gone" wake out to surviving managers below.
|
|
150
|
+
if (!reapIfEmpty(id)) {
|
|
151
|
+
// 1) Terminal status set BEFORE the window dies (daemon race). The root may
|
|
152
|
+
// finalize to `done` (a deliberate "mark complete" close-out); every
|
|
153
|
+
// descendant, and the root by default, `cancel`s. finalize is legal only
|
|
154
|
+
// from a live status — an already-terminal root keeps its status.
|
|
155
|
+
if (id === rootId && rootEvent === 'finalize') {
|
|
156
|
+
if (m.status === 'active' || m.status === 'idle')
|
|
157
|
+
transition(id, 'finalize');
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
transition(id, 'cancel');
|
|
161
|
+
}
|
|
162
|
+
// 2) Tear the node's ENGINE down: send the `shutdown` frame so the broker
|
|
163
|
+
// PROCESS exits and releases the sole .jsonl writer. Then proactively
|
|
164
|
+
// close the viewer pane + registry row — attach auto-reconnects, so on a
|
|
165
|
+
// deliberate close the viewer must be torn down here or it lingers ~30s
|
|
166
|
+
// showing a misleading "reconnecting…" instead of going away at once.
|
|
167
|
+
headlessBrokerHost.teardown(id);
|
|
168
|
+
tearDownNode(id);
|
|
169
|
+
// 3) Leave the resume notice AFTER the watcher is gone, so it survives.
|
|
170
|
+
appendInbox(id, {
|
|
171
|
+
from: null,
|
|
172
|
+
tier: 'normal',
|
|
173
|
+
kind: 'message',
|
|
174
|
+
label: cancellationLabel(id === rootId, deadChildren),
|
|
175
|
+
data: { reason: 'user-close', cascade_root: rootId, canceled_children: deadChildren },
|
|
176
|
+
});
|
|
152
177
|
}
|
|
153
|
-
// 2) Tear the node's ENGINE down: send the `shutdown` frame so the broker
|
|
154
|
-
// PROCESS exits and releases the sole .jsonl writer. Then proactively
|
|
155
|
-
// close the viewer pane + registry row — attach auto-reconnects, so on a
|
|
156
|
-
// deliberate close the viewer must be torn down here or it lingers ~30s
|
|
157
|
-
// showing a misleading "reconnecting…" instead of going away at once.
|
|
158
|
-
headlessBrokerHost.teardown(id);
|
|
159
|
-
tearDownNode(id);
|
|
160
|
-
// 3) Leave the resume notice AFTER the watcher is gone, so it survives.
|
|
161
|
-
appendInbox(id, {
|
|
162
|
-
from: null,
|
|
163
|
-
tier: 'normal',
|
|
164
|
-
kind: 'message',
|
|
165
|
-
label: cancellationLabel(id === rootId, deadChildren),
|
|
166
|
-
data: { reason: 'user-close', cascade_root: rootId, canceled_children: deadChildren },
|
|
167
|
-
});
|
|
168
178
|
// 4) Wake any SURVIVING manager subscribed to this node — the doctrine wake.
|
|
169
179
|
// A node going dormant trusts the runtime to wake it on a child's
|
|
170
|
-
// terminal outcome; D-1 found that `node close` notified ONLY the closed
|
|
180
|
+
// terminal outcome; D-1 found that `node lifecycle close` notified ONLY the closed
|
|
171
181
|
// node itself, never its subscribers, so a parent that delegated then
|
|
172
182
|
// just stopped hangs forever when its child is closed out from under it.
|
|
173
183
|
// Only the close ROOT can have a surviving subscriber (closingSet adds a
|
|
@@ -176,9 +186,7 @@ export function closeNode(rootId, opts = {}) {
|
|
|
176
186
|
// never fires inside a self-contained cascade. Active → inbox (wakes a
|
|
177
187
|
// dormant manager via its live watcher / the daemon's dormant-revive
|
|
178
188
|
// second pass); passive → passive accumulator (delivered, not woken).
|
|
179
|
-
for (const sub of
|
|
180
|
-
if (closing.has(sub.node_id))
|
|
181
|
-
continue; // also being torn down — pointless
|
|
189
|
+
for (const sub of survivors) {
|
|
182
190
|
const notice = {
|
|
183
191
|
from: id,
|
|
184
192
|
tier: 'normal',
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Default per-target connect timeout. Short — a healthy network connects in
|
|
2
|
+
* tens of ms; a down network should be declared down quickly so the daemon tick
|
|
3
|
+
* isn't held up. */
|
|
4
|
+
export declare const PROBE_TIMEOUT_MS = 3000;
|
|
5
|
+
/** Resolve true iff a TCP connection to host:port completes within timeoutMs.
|
|
6
|
+
* Any error/timeout resolves false (never rejects). The socket is always torn
|
|
7
|
+
* down. Exported for unit testing against a local listener. */
|
|
8
|
+
export declare function tcpReachable(host: string, port: number, timeoutMs: number): Promise<boolean>;
|
|
9
|
+
/** True when the box can reach the internet (any PROBE_TARGET accepts a TCP
|
|
10
|
+
* connection within the timeout). The broker uses this for connection-fault
|
|
11
|
+
* retries. Never throws. */
|
|
12
|
+
export declare function probeOnline(timeoutMs?: number): Promise<boolean>;
|