@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
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
// Source-of-truth split: a node's meta.json is canonical for its own fields;
|
|
5
5
|
// the db row is a queryable index re-derivable from it. The subscribes_to edges
|
|
6
6
|
// are db-authoritative (mutable, many-writers — what WAL is for).
|
|
7
|
-
import { existsSync, readFileSync,
|
|
8
|
-
import { join } from 'node:path';
|
|
7
|
+
import { existsSync, readFileSync, renameSync, readdirSync, rmSync, openSync, writeSync, fsyncSync, closeSync, statSync, } from 'node:fs';
|
|
8
|
+
import { join, dirname } from 'node:path';
|
|
9
9
|
import { openDb } from './db.js';
|
|
10
10
|
import { isPidAlive } from './pid.js';
|
|
11
|
-
import {
|
|
11
|
+
import { cancelTriggersFor } from './triggers.js';
|
|
12
|
+
import { ensureHome, ensureNodeDirs, nodeMetaPath, nodeDir, nodesRoot, jobDir, } from './paths.js';
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// meta.json (durable identity — the source of truth for what PERSISTS)
|
|
14
15
|
//
|
|
@@ -40,14 +41,53 @@ function readMeta(nodeId) {
|
|
|
40
41
|
// Legacy metas may still carry runtime fields on disk; toIdentity-on-read is
|
|
41
42
|
// unnecessary (callers go through getNode, which overlays the row), but the
|
|
42
43
|
// raw parse is typed as identity — extra props are ignored.
|
|
43
|
-
|
|
44
|
+
//
|
|
45
|
+
// Tolerate an EMPTY or unparseable meta.json by treating it as MISSING (null)
|
|
46
|
+
// rather than throwing. A bare write-temp-then-rename without fsync can leave a
|
|
47
|
+
// 0-byte meta.json on an NFS-backed home after the holding process/sandbox dies
|
|
48
|
+
// (see writeMeta + the Hearth M0 cold-boot bug); a single corrupt node must not
|
|
49
|
+
// crash rebuildIndex/revive for the whole canvas. Recovery (re-seed from a
|
|
50
|
+
// durable snapshot) is the caller's job.
|
|
51
|
+
const raw = readFileSync(p, 'utf8');
|
|
52
|
+
if (raw.trim() === '')
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(raw);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
44
60
|
}
|
|
45
|
-
/** Serialize ONLY the identity subset → meta.json never holds runtime fields.
|
|
61
|
+
/** Serialize ONLY the identity subset → meta.json never holds runtime fields.
|
|
62
|
+
*
|
|
63
|
+
* Durable write: fsync the temp file before the rename, then fsync the parent
|
|
64
|
+
* directory so the rename itself is on disk. A bare writeFileSync+rename can
|
|
65
|
+
* leave a 0-byte meta.json on an NFS-backed home (Hearth's durable Volume mounts
|
|
66
|
+
* `local_lock=none,noac`): when meta.json is held open, the rename silly-renames
|
|
67
|
+
* the open inode and the new content is never flushed, so a sandbox
|
|
68
|
+
* recreate-from-template loses it. meta.json is written rarely (birth, polymorph,
|
|
69
|
+
* session-id capture, naming) so the per-write fsync cost is negligible.
|
|
70
|
+
* Bug: Hearth M0 cold-boot — 0-byte meta.json → rebuild-index/revive JSON.parse(''). */
|
|
46
71
|
function writeMeta(meta) {
|
|
47
72
|
const p = nodeMetaPath(meta.node_id);
|
|
48
73
|
const tmp = `${p}.tmp`;
|
|
49
|
-
|
|
74
|
+
const data = JSON.stringify(toIdentity(meta), null, 2);
|
|
75
|
+
const fd = openSync(tmp, 'w');
|
|
76
|
+
try {
|
|
77
|
+
writeSync(fd, data);
|
|
78
|
+
fsyncSync(fd);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
closeSync(fd);
|
|
82
|
+
}
|
|
50
83
|
renameSync(tmp, p);
|
|
84
|
+
const dirFd = openSync(dirname(p), 'r');
|
|
85
|
+
try {
|
|
86
|
+
fsyncSync(dirFd);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
closeSync(dirFd);
|
|
90
|
+
}
|
|
51
91
|
}
|
|
52
92
|
// ---------------------------------------------------------------------------
|
|
53
93
|
// row index — identity columns are a derived projection of meta; runtime
|
|
@@ -356,6 +396,22 @@ export function rebuildIndex() {
|
|
|
356
396
|
recordSpawn(meta.node_id, prov);
|
|
357
397
|
}
|
|
358
398
|
}
|
|
399
|
+
/** Hard-delete ONE node: drop its row (the edges→nodes FK, ON DELETE CASCADE,
|
|
400
|
+
* GCs its edges) and remove its on-disk `nodes/<id>/` dir. The single-node
|
|
401
|
+
* analogue of {@link pruneNodes}, for IMMEDIATE reaping — e.g. an empty node the
|
|
402
|
+
* user closed or detached from. Pure persisted-state removal: the caller MUST
|
|
403
|
+
* have already torn down the broker engine + viewer (this does not signal any
|
|
404
|
+
* process). Reaps this node's triggers FIRST (spec §Deterministic removal,
|
|
405
|
+
* criterion 15: target deletion kills any in-flight predicate process group and
|
|
406
|
+
* consumes target-bound + owner-armed trigger rows, instead of leaving them to
|
|
407
|
+
* the FK cascade alone with no kill and no notice) via the same
|
|
408
|
+
* `cancelTriggersFor` seam `close`/`cancel` already use. Best-effort dir removal
|
|
409
|
+
* after the row delete, mirroring pruneNodes. */
|
|
410
|
+
export function deleteNode(nodeId) {
|
|
411
|
+
cancelTriggersFor(nodeId);
|
|
412
|
+
openDb().prepare('DELETE FROM nodes WHERE node_id = ?').run(nodeId);
|
|
413
|
+
rmSync(nodeDir(nodeId), { recursive: true, force: true });
|
|
414
|
+
}
|
|
359
415
|
/** Retention sweep: remove TERMINAL nodes (status dead | done | canceled) whose
|
|
360
416
|
* `created` is older than `ttlDays`, bounding the otherwise-unbounded growth of
|
|
361
417
|
* node rows + dirs. The edges→nodes FK (`ON DELETE CASCADE`, migration v4) GCs
|
|
@@ -409,7 +465,24 @@ export function pruneNodes(opts) {
|
|
|
409
465
|
const candidates = [...terminal, ...stale];
|
|
410
466
|
if (dryRun || candidates.length === 0)
|
|
411
467
|
return { pruned: candidates, dryRun };
|
|
412
|
-
|
|
468
|
+
deletePrunedNodes(candidates);
|
|
469
|
+
return { pruned: candidates, dryRun };
|
|
470
|
+
}
|
|
471
|
+
/** Hard-delete a set of pruned nodes: reaps each node's triggers (killing any
|
|
472
|
+
* in-flight predicate process group and consuming target-bound + owner-armed
|
|
473
|
+
* rows — spec criterion 15, the same reap {@link deleteNode} does) BEFORE the
|
|
474
|
+
* transactioned row sweep (the edges→nodes FK, ON DELETE CASCADE, GCs their
|
|
475
|
+
* edges), followed by best-effort on-disk `nodes/<id>/` dir removal. Shared by
|
|
476
|
+
* {@link pruneNodes} (TTL) and {@link pruneToLimit} (count) so the delete
|
|
477
|
+
* semantics never drift. The fs isn't transactional, so dirs are removed AFTER
|
|
478
|
+
* COMMIT — by then the rows are gone, so a re-run never re-finds a
|
|
479
|
+
* half-deleted node. */
|
|
480
|
+
function deletePrunedNodes(candidates) {
|
|
481
|
+
if (candidates.length === 0)
|
|
482
|
+
return;
|
|
483
|
+
for (const c of candidates)
|
|
484
|
+
cancelTriggersFor(c.node_id);
|
|
485
|
+
const db = openDb();
|
|
413
486
|
db.exec('BEGIN');
|
|
414
487
|
try {
|
|
415
488
|
const del = db.prepare('DELETE FROM nodes WHERE node_id = ?');
|
|
@@ -421,9 +494,66 @@ export function pruneNodes(opts) {
|
|
|
421
494
|
db.exec('ROLLBACK');
|
|
422
495
|
throw e;
|
|
423
496
|
}
|
|
424
|
-
// Remove each pruned node's on-disk dir (best-effort, after COMMIT).
|
|
425
497
|
for (const c of candidates) {
|
|
426
498
|
rmSync(nodeDir(c.node_id), { recursive: true, force: true });
|
|
427
499
|
}
|
|
500
|
+
}
|
|
501
|
+
/** "Most recent activity" sort key (epoch ms) read CHEAPLY: a `statSync` (no file
|
|
502
|
+
* read, no parse) of the node's `job/telemetry.json` — rewritten on every
|
|
503
|
+
* turn_end at a deterministic path, so it tracks last-message recency without a
|
|
504
|
+
* meta read. Falls back to `created`'s epoch when a node never ran a turn.
|
|
505
|
+
* Mirrors render.ts's `sessionMtime` (the same key the snapshot roster surfaces
|
|
506
|
+
* as `last_activity`). Never throws. */
|
|
507
|
+
function recencyMs(nodeId, created) {
|
|
508
|
+
try {
|
|
509
|
+
const st = statSync(join(jobDir(nodeId), 'telemetry.json'), { throwIfNoEntry: false });
|
|
510
|
+
if (st !== undefined)
|
|
511
|
+
return st.mtimeMs;
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
/* fall through to created */
|
|
515
|
+
}
|
|
516
|
+
const t = Date.parse(created);
|
|
517
|
+
return Number.isNaN(t) ? 0 : t;
|
|
518
|
+
}
|
|
519
|
+
/** Count-based retention sweep: keep at most `maxNodes` of the MOST-RECENTLY-
|
|
520
|
+
* ACTIVE nodes, but NEVER delete a live node — so the real retained floor is
|
|
521
|
+
* `max(maxNodes, liveCount)`. Bounds the otherwise-unbounded growth the TTL
|
|
522
|
+
* sweep can't (a canvas that never crosses the TTL still grows without limit).
|
|
523
|
+
*
|
|
524
|
+
* Liveness (protected, always kept): status active|idle AND a live `pi_pid` —
|
|
525
|
+
* the SAME signal `pruneNodes`'s `includeStale` and placement use (`isPidAlive`).
|
|
526
|
+
* The caller ($CRTR_NODE_ID) is also always protected.
|
|
527
|
+
*
|
|
528
|
+
* Algorithm: order ALL nodes by recency DESC (telemetry.json mtime, falling back
|
|
529
|
+
* to `created`); `target = max(maxNodes, liveCount)`; delete every node ranked
|
|
530
|
+
* beyond `target` (0-indexed rank >= target) that is NOT live and NOT the caller.
|
|
531
|
+
* Retained = all live + the newest terminal nodes up to `target`.
|
|
532
|
+
*
|
|
533
|
+
* Mirrors {@link pruneNodes} exactly for the delete (shared `deletePrunedNodes`:
|
|
534
|
+
* transactioned row sweep + FK edge cascade + best-effort dir removal). `dryRun`
|
|
535
|
+
* reports the candidate set and deletes NOTHING. */
|
|
536
|
+
export function pruneToLimit(opts) {
|
|
537
|
+
const dryRun = opts.dryRun ?? false;
|
|
538
|
+
const selfId = process.env['CRTR_NODE_ID'] ?? '';
|
|
539
|
+
const rows = listNodes();
|
|
540
|
+
// Rank ALL nodes by recency DESC, tagging liveness as we go.
|
|
541
|
+
const ranked = rows
|
|
542
|
+
.map((r) => ({
|
|
543
|
+
node_id: r.node_id,
|
|
544
|
+
status: r.status,
|
|
545
|
+
created: r.created,
|
|
546
|
+
recency: recencyMs(r.node_id, r.created),
|
|
547
|
+
live: (r.status === 'active' || r.status === 'idle') && isPidAlive(r.pi_pid),
|
|
548
|
+
}))
|
|
549
|
+
.sort((a, b) => b.recency - a.recency);
|
|
550
|
+
const liveCount = ranked.filter((r) => r.live).length;
|
|
551
|
+
const target = Math.max(opts.maxNodes, liveCount);
|
|
552
|
+
const candidates = ranked
|
|
553
|
+
.filter((r, rank) => rank >= target && !r.live && r.node_id !== selfId)
|
|
554
|
+
.map((r) => ({ node_id: r.node_id, status: r.status, created: r.created }));
|
|
555
|
+
if (dryRun || candidates.length === 0)
|
|
556
|
+
return { pruned: candidates, dryRun };
|
|
557
|
+
deletePrunedNodes(candidates);
|
|
428
558
|
return { pruned: candidates, dryRun };
|
|
429
559
|
}
|
package/dist/core/canvas/db.js
CHANGED
|
@@ -44,15 +44,27 @@ CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(type, from_id);
|
|
|
44
44
|
CREATE INDEX IF NOT EXISTS idx_nodes_status ON nodes(status);
|
|
45
45
|
`);
|
|
46
46
|
}
|
|
47
|
+
/** The node row's current columns, used to make additive migrations safe to
|
|
48
|
+
* re-run against a partially applied schema. */
|
|
49
|
+
function nodeColumns(db) {
|
|
50
|
+
return new Set(db.prepare('PRAGMA table_info(nodes)').all().map((r) => r.name));
|
|
51
|
+
}
|
|
52
|
+
function addNodeColumnIfMissing(db, columns, name, ddl) {
|
|
53
|
+
if (columns.has(name))
|
|
54
|
+
return;
|
|
55
|
+
db.exec(ddl);
|
|
56
|
+
columns.add(name);
|
|
57
|
+
}
|
|
47
58
|
/** v2 — additive runtime columns the keystone (Phase 2) will make
|
|
48
59
|
* authoritative: `intent, pi_pid, window, tmux_session`. `status` already
|
|
49
60
|
* lives in the baseline row, so it is NOT re-added here. All four default to
|
|
50
61
|
* NULL, so nothing observes a behavior change until a later phase reads them. */
|
|
51
62
|
function addRuntimeColumns(db) {
|
|
52
|
-
|
|
53
|
-
db
|
|
54
|
-
db
|
|
55
|
-
db
|
|
63
|
+
const columns = nodeColumns(db);
|
|
64
|
+
addNodeColumnIfMissing(db, columns, 'intent', `ALTER TABLE nodes ADD COLUMN intent TEXT;`);
|
|
65
|
+
addNodeColumnIfMissing(db, columns, 'pi_pid', `ALTER TABLE nodes ADD COLUMN pi_pid INTEGER;`);
|
|
66
|
+
addNodeColumnIfMissing(db, columns, 'window', `ALTER TABLE nodes ADD COLUMN window TEXT;`);
|
|
67
|
+
addNodeColumnIfMissing(db, columns, 'tmux_session', `ALTER TABLE nodes ADD COLUMN tmux_session TEXT;`);
|
|
56
68
|
}
|
|
57
69
|
/** v3 — DATA backfill (keystone, Phase 2). The runtime fields
|
|
58
70
|
* (`intent, pi_pid, window, tmux_session`) become authoritative in the row;
|
|
@@ -190,7 +202,8 @@ CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(type, from_id);
|
|
|
190
202
|
* Defaults NULL — nothing reads it until the placement layer lands, so this
|
|
191
203
|
* observes no behavior change. Additive, forward-only. */
|
|
192
204
|
function addPaneColumn(db) {
|
|
193
|
-
|
|
205
|
+
const columns = nodeColumns(db);
|
|
206
|
+
addNodeColumnIfMissing(db, columns, 'pane', `ALTER TABLE nodes ADD COLUMN pane TEXT;`);
|
|
194
207
|
}
|
|
195
208
|
/** v6 — the `focuses` table: durable, PLURAL on-screen viewports, one row per
|
|
196
209
|
* viewport (Q7 widens canvas.db from "topology" to "topology + focuses"). Each
|
|
@@ -219,7 +232,7 @@ CREATE TABLE IF NOT EXISTS focuses (
|
|
|
219
232
|
* `owner_id` is the ARMER, set on EVERY row, and is deliberately a PLAIN indexed
|
|
220
233
|
* column with NO FK (design D1/D2): an FK on `owner_id` would cascade-drop a
|
|
221
234
|
* crashed-then-pruned armer's detached cron, violating Invariant E. A detached
|
|
222
|
-
* wake is reaped only by the explicit `
|
|
235
|
+
* wake is reaped only by the explicit `cancelTriggersFor` DELETE, never by cascade.
|
|
223
236
|
*
|
|
224
237
|
* `fire_at` is an ISO 8601 UTC string for the NEXT occurrence, so the per-tick
|
|
225
238
|
* due query is a lexicographic `<=` compare. The partial unique index
|
|
@@ -243,6 +256,76 @@ CREATE INDEX IF NOT EXISTS idx_wakeups_owner ON wakeups(owner_id);
|
|
|
243
256
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_wakeups_deadline ON wakeups(node_id) WHERE kind = 'deadline';
|
|
244
257
|
`);
|
|
245
258
|
}
|
|
259
|
+
/** v9 — generalize the `wakeups` table (v7) into the `triggers` table (the
|
|
260
|
+
* unified node-trigger-grammar substrate). The old `kind` axis (bare/noted/
|
|
261
|
+
* deadline/spawn) splits into three orthogonal axes: `action` (what enacts:
|
|
262
|
+
* 'msg'|'new') x `action_mode` (how: 'inbox_message'|'fresh_revive'|
|
|
263
|
+
* 'deadline_message'|'node_birth') x `trigger_type` (when: 'at'|'every'|
|
|
264
|
+
* 'when'|'until') — so a daemon-owned predicate (`--when`) trigger can live in
|
|
265
|
+
* the same table as a clock trigger. Predicate-only columns (`when_script`
|
|
266
|
+
* through `last_stderr`) are additive null/idle for every migrated clock row.
|
|
267
|
+
*
|
|
268
|
+
* Migration mapping, preserving every existing `wakeup_id` as `trigger_id`
|
|
269
|
+
* (so an old wake's id stays cancelable): bare→fresh_revive, noted→
|
|
270
|
+
* inbox_message, deadline→deadline_message (trigger_type='until'), spawn→
|
|
271
|
+
* node_birth. `payload` JSON carries over unchanged — the old per-kind
|
|
272
|
+
* payload shapes (plus SpawnChildOpts) map 1:1 onto the new payload union at
|
|
273
|
+
* the TS layer (triggers.ts), no JSON transform needed. The `wakeups` table
|
|
274
|
+
* is then DROPPED — not kept as a parallel table. Additive, forward-only. */
|
|
275
|
+
function migrateWakeupsToTriggers(db) {
|
|
276
|
+
db.exec(`
|
|
277
|
+
CREATE TABLE IF NOT EXISTS triggers (
|
|
278
|
+
trigger_id TEXT PRIMARY KEY,
|
|
279
|
+
owner_id TEXT NOT NULL,
|
|
280
|
+
node_id TEXT, -- TARGET + node-anchored cancel anchor; NULL = canvas-detached
|
|
281
|
+
action TEXT NOT NULL, -- 'msg' | 'new'
|
|
282
|
+
action_mode TEXT NOT NULL, -- 'inbox_message' | 'fresh_revive' | 'deadline_message' | 'node_birth'
|
|
283
|
+
trigger_type TEXT NOT NULL, -- 'at' | 'every' | 'when' | 'until'
|
|
284
|
+
fire_at TEXT, -- clock triggers: NEXT occurrence, ISO 8601 UTC; lexicographic <=
|
|
285
|
+
recur TEXT, -- NULL = one-shot; else the recur JSON the daemon advances
|
|
286
|
+
payload TEXT, -- JSON action payload, discriminated by action_mode
|
|
287
|
+
when_script TEXT, -- predicate triggers: the --when bash source
|
|
288
|
+
eval_every TEXT, -- predicate triggers: evaluation cadence (recur-shaped JSON)
|
|
289
|
+
next_eval_at TEXT, -- predicate triggers: next evaluation instant
|
|
290
|
+
timeout_at TEXT, -- predicate triggers: wall-clock expiry
|
|
291
|
+
eval_state TEXT NOT NULL DEFAULT 'idle', -- 'idle' | 'running'
|
|
292
|
+
eval_started_at TEXT,
|
|
293
|
+
eval_pid INTEGER,
|
|
294
|
+
eval_lease_owner TEXT,
|
|
295
|
+
last_eval_at TEXT,
|
|
296
|
+
last_exit INTEGER,
|
|
297
|
+
last_stderr TEXT,
|
|
298
|
+
created TEXT NOT NULL,
|
|
299
|
+
FOREIGN KEY (node_id) REFERENCES nodes(node_id) ON DELETE CASCADE
|
|
300
|
+
);
|
|
301
|
+
CREATE INDEX IF NOT EXISTS idx_triggers_fire ON triggers(fire_at); -- clock per-tick due query
|
|
302
|
+
CREATE INDEX IF NOT EXISTS idx_triggers_node ON triggers(node_id); -- by-node cancel / list
|
|
303
|
+
CREATE INDEX IF NOT EXISTS idx_triggers_owner ON triggers(owner_id); -- by-owner reap
|
|
304
|
+
CREATE INDEX IF NOT EXISTS idx_triggers_eval ON triggers(eval_state, next_eval_at); -- predicate due query
|
|
305
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_triggers_deadline ON triggers(node_id) WHERE action_mode = 'deadline_message';
|
|
306
|
+
|
|
307
|
+
INSERT INTO triggers (trigger_id, owner_id, node_id, action, action_mode, trigger_type, fire_at, recur, payload, created)
|
|
308
|
+
SELECT
|
|
309
|
+
wakeup_id,
|
|
310
|
+
owner_id,
|
|
311
|
+
node_id,
|
|
312
|
+
CASE kind WHEN 'spawn' THEN 'new' ELSE 'msg' END,
|
|
313
|
+
CASE kind
|
|
314
|
+
WHEN 'bare' THEN 'fresh_revive'
|
|
315
|
+
WHEN 'noted' THEN 'inbox_message'
|
|
316
|
+
WHEN 'deadline' THEN 'deadline_message'
|
|
317
|
+
WHEN 'spawn' THEN 'node_birth'
|
|
318
|
+
END,
|
|
319
|
+
CASE WHEN kind = 'deadline' THEN 'until' WHEN recur IS NULL THEN 'at' ELSE 'every' END,
|
|
320
|
+
fire_at,
|
|
321
|
+
recur,
|
|
322
|
+
payload,
|
|
323
|
+
created
|
|
324
|
+
FROM wakeups;
|
|
325
|
+
|
|
326
|
+
DROP TABLE wakeups;
|
|
327
|
+
`);
|
|
328
|
+
}
|
|
246
329
|
/** v8 — additive identity column `host_kind`: which HOST launches + supervises a
|
|
247
330
|
* node — `'tmux'` (a pane) or `'broker'` (the headless in-process engine). It is
|
|
248
331
|
* durable IDENTITY mirrored from meta.json like `cwd` (NOT runtime like `pane`),
|
|
@@ -250,7 +333,21 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_wakeups_deadline ON wakeups(node_id) WHERE
|
|
|
250
333
|
* Defaults NULL ⇒ `'tmux'` (every existing node is tmux-hosted); no data
|
|
251
334
|
* backfill. Additive, forward-only. */
|
|
252
335
|
function addHostKindColumn(db) {
|
|
253
|
-
|
|
336
|
+
const columns = nodeColumns(db);
|
|
337
|
+
addNodeColumnIfMissing(db, columns, 'host_kind', `ALTER TABLE nodes ADD COLUMN host_kind TEXT;`);
|
|
338
|
+
}
|
|
339
|
+
/** v10 — the `canvas_meta` key/value table: a single durable place for
|
|
340
|
+
* small, cross-process canvas-wide scalars that aren't node rows. First user:
|
|
341
|
+
* the boot marker (boot.ts), which records the last-seen kernel boot identity
|
|
342
|
+
* so boot-liveness reconciliation is a single-writer SQLite transaction on
|
|
343
|
+
* this row rather than a race-prone JSON file. Additive, forward-only. */
|
|
344
|
+
function addCanvasMetaTable(db) {
|
|
345
|
+
db.exec(`
|
|
346
|
+
CREATE TABLE IF NOT EXISTS canvas_meta (
|
|
347
|
+
key TEXT PRIMARY KEY,
|
|
348
|
+
value TEXT NOT NULL
|
|
349
|
+
);
|
|
350
|
+
`);
|
|
254
351
|
}
|
|
255
352
|
/** The ordered migration list. Index `i` is migration version `i + 1`; the db's
|
|
256
353
|
* `user_version` tracks how many have been applied. Append only. */
|
|
@@ -263,6 +360,8 @@ export const MIGRATIONS = [
|
|
|
263
360
|
/* v6 */ addFocusesTable,
|
|
264
361
|
/* v7 */ appendWakeupsTable,
|
|
265
362
|
/* v8 */ addHostKindColumn,
|
|
363
|
+
/* v9 */ migrateWakeupsToTriggers,
|
|
364
|
+
/* v10 */ addCanvasMetaTable,
|
|
266
365
|
];
|
|
267
366
|
/** Bring `db` up to the latest schema version. Reads `user_version`, runs each
|
|
268
367
|
* pending migration in order, and bumps `user_version` after each so the work
|
|
@@ -284,8 +383,21 @@ const handles = new Map();
|
|
|
284
383
|
export function openDb() {
|
|
285
384
|
const path = canvasDbPath();
|
|
286
385
|
const existing = handles.get(path);
|
|
287
|
-
if (existing)
|
|
288
|
-
|
|
386
|
+
if (existing) {
|
|
387
|
+
try {
|
|
388
|
+
existing.prepare('PRAGMA database_list').all();
|
|
389
|
+
return existing;
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
try {
|
|
393
|
+
existing.close();
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
/* ignore */
|
|
397
|
+
}
|
|
398
|
+
handles.delete(path);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
289
401
|
ensureHome();
|
|
290
402
|
const db = new DatabaseSync(path);
|
|
291
403
|
db.exec('PRAGMA journal_mode = WAL;');
|
|
@@ -6,6 +6,6 @@ export * from './paths.js';
|
|
|
6
6
|
export * from './canvas.js';
|
|
7
7
|
export * from './history.js';
|
|
8
8
|
export * from './focuses.js';
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './triggers.js';
|
|
10
10
|
export * from './telemetry.js';
|
|
11
11
|
export { openDb, closeDb } from './db.js';
|
|
@@ -15,13 +15,11 @@ export interface NamedNode {
|
|
|
15
15
|
* message). Never empty. */
|
|
16
16
|
export declare function fullName(node: NamedNode): string;
|
|
17
17
|
/** The pi session display name — the editor label in the top-left. Format is
|
|
18
|
-
* `<kind> (<mode>)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* cycle working the auth refactor. The name segment is omitted while it
|
|
23
|
-
* collapses to the bare kind (a bare root before its first message is named).
|
|
18
|
+
* `<fullName> <kind> (<mode>)`, where `<fullName>` is the node's handle plus
|
|
19
|
+
* the pi-generated description of its first task (see fullName). The name
|
|
20
|
+
* segment is omitted while it collapses to the bare kind (a bare root before
|
|
21
|
+
* its first message is named), so the fallback is just `<kind> (<mode>)`.
|
|
24
22
|
* Recomputed from meta on every revive (and pushed live via pi.setSessionName
|
|
25
|
-
* when a bare root is named mid-session), so a base→orchestrator polymorph
|
|
26
|
-
*
|
|
23
|
+
* when a bare root is named mid-session), so a base→orchestrator polymorph or
|
|
24
|
+
* a first-message naming update the label immediately. */
|
|
27
25
|
export declare function editorLabel(meta: NodeMeta): string;
|
|
@@ -19,18 +19,15 @@ export function fullName(node) {
|
|
|
19
19
|
return combined !== '' ? combined : node.name;
|
|
20
20
|
}
|
|
21
21
|
/** The pi session display name — the editor label in the top-left. Format is
|
|
22
|
-
* `<kind> (<mode>)
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* cycle working the auth refactor. The name segment is omitted while it
|
|
27
|
-
* collapses to the bare kind (a bare root before its first message is named).
|
|
22
|
+
* `<fullName> <kind> (<mode>)`, where `<fullName>` is the node's handle plus
|
|
23
|
+
* the pi-generated description of its first task (see fullName). The name
|
|
24
|
+
* segment is omitted while it collapses to the bare kind (a bare root before
|
|
25
|
+
* its first message is named), so the fallback is just `<kind> (<mode>)`.
|
|
28
26
|
* Recomputed from meta on every revive (and pushed live via pi.setSessionName
|
|
29
|
-
* when a bare root is named mid-session), so a base→orchestrator polymorph
|
|
30
|
-
*
|
|
27
|
+
* when a bare root is named mid-session), so a base→orchestrator polymorph or
|
|
28
|
+
* a first-message naming update the label immediately. */
|
|
31
29
|
export function editorLabel(meta) {
|
|
32
|
-
const base = `${meta.kind} (${meta.mode})`;
|
|
33
30
|
const full = fullName(meta);
|
|
34
|
-
const
|
|
35
|
-
return full !== '' && full !== meta.kind ? `${
|
|
31
|
+
const base = `${meta.kind} (${meta.mode})`;
|
|
32
|
+
return full !== '' && full !== meta.kind ? `${full} ${base}` : base;
|
|
36
33
|
}
|
|
@@ -18,8 +18,9 @@ export declare const RED = "\u001B[31m";
|
|
|
18
18
|
export declare const YELLOW = "\u001B[33m";
|
|
19
19
|
export declare const CYAN = "\u001B[36m";
|
|
20
20
|
export declare const GRAY = "\u001B[90m";
|
|
21
|
-
/**
|
|
22
|
-
|
|
21
|
+
/** Overlay-aware glyph for a node: hanging ⚠ outranks streaming ⟳, which
|
|
22
|
+
* outranks the base status glyph. */
|
|
23
|
+
export declare function nodeGlyph(node: NodeMeta | null): string;
|
|
23
24
|
/** Visible width, ignoring ANSI escapes. */
|
|
24
25
|
export declare function visibleWidth(s: string): number;
|
|
25
26
|
/** Truncate to `max` VISIBLE columns: escape sequences are copied through
|
|
@@ -151,8 +152,8 @@ export declare function computeDefaultExpanded(root: string, self: string): Set<
|
|
|
151
152
|
export declare function buildGraphModel(self: string, folds: FoldState, expand?: ReadonlySet<string>): FlatRow[];
|
|
152
153
|
/** Render one GRAPH row. CURSOR (selected) → reverse-video bar; an ATTACHED
|
|
153
154
|
* (human-watched) node → a coloured background bar; SELF → bold name. The
|
|
154
|
-
* cursor outranks the attached tint when both land on the same row.
|
|
155
|
-
*
|
|
155
|
+
* cursor outranks the attached tint when both land on the same row. The
|
|
156
|
+
* overlay-aware glyph alone carries the live signal (status / ⟳ / ⚠). */
|
|
156
157
|
export declare function renderGraphRow(r: FlatRow, isCursor: boolean, focused: ReadonlySet<string>, activeBelow: ReadonlyMap<string, number>, asks: Record<string, number>): string;
|
|
157
158
|
/** Total lines the GRAPH widget may emit. pi hard-caps extension widgets at
|
|
158
159
|
* MAX_WIDGET_LINES — anything past that pi truncates itself, eating our own
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// nav-model.ts — the pure model/render layer of the canvas graph-nav chrome.
|
|
2
2
|
//
|
|
3
3
|
// Extracted from src/pi-extensions/canvas-nav.ts so a SINGLE source feeds both
|
|
4
|
-
// the legacy pi extension (canvas-nav) and the headless `crtr attach` viewer.
|
|
4
|
+
// the legacy pi extension (canvas-nav) and the headless `crtr surface attach` viewer.
|
|
5
5
|
// Everything here is pi-API-free: it reads the canvas (sqlite + meta.json + node
|
|
6
6
|
// telemetry) and produces ANSI-styled strings + a flattened graph model. The
|
|
7
7
|
// extension-host wiring (widgets, key taps, the ask-poll timer, run/focus
|
|
@@ -15,6 +15,11 @@ import { execFileSync } from 'node:child_process';
|
|
|
15
15
|
import { existsSync, readFileSync } from 'node:fs';
|
|
16
16
|
import { join } from 'node:path';
|
|
17
17
|
import { getNode, subscribersOf, subscriptionsOf, jobDir, listFocuses } from './index.js';
|
|
18
|
+
import { isPidAlive } from './pid.js';
|
|
19
|
+
import { isBusy } from '../runtime/busy.js';
|
|
20
|
+
import { readFault } from '../runtime/fault.js';
|
|
21
|
+
import { activeFaultForDisplay } from './render.js';
|
|
22
|
+
import { resolveNodeVisual, faultSummary } from './status-glyph.js';
|
|
18
23
|
// ---------------------------------------------------------------------------
|
|
19
24
|
// Tuning constants
|
|
20
25
|
// ---------------------------------------------------------------------------
|
|
@@ -27,9 +32,9 @@ export const VIEWPORT_FALLBACK_ROWS = 30;
|
|
|
27
32
|
// ANSI styling. pi renders embedded escapes in widget lines and measures width
|
|
28
33
|
// ANSI-aware, so raw escapes are safe and need no pi-tui dependency. The cursor
|
|
29
34
|
// (selected row) uses a theme-agnostic ATTRIBUTE (reverse), so it reads under
|
|
30
|
-
// NO_COLOR; the attached-row tint is a background COLOUR, while the
|
|
31
|
-
// (
|
|
32
|
-
// stripped.
|
|
35
|
+
// NO_COLOR; the attached-row tint is a background COLOUR, while the overlay-
|
|
36
|
+
// aware glyph (●/○/✓/✗/⟳/⚠) carries the live signal independently, even where
|
|
37
|
+
// colour is stripped.
|
|
33
38
|
// ---------------------------------------------------------------------------
|
|
34
39
|
export const ESC = '\x1b[';
|
|
35
40
|
export const RESET = `${ESC}0m`;
|
|
@@ -45,18 +50,25 @@ export const RED = `${ESC}31m`;
|
|
|
45
50
|
export const YELLOW = `${ESC}33m`;
|
|
46
51
|
export const CYAN = `${ESC}36m`;
|
|
47
52
|
export const GRAY = `${ESC}90m`;
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
function hangingFor(node) {
|
|
54
|
+
return activeFaultForDisplay(node, readFault(node.node_id));
|
|
55
|
+
}
|
|
56
|
+
function streamingFor(node) {
|
|
57
|
+
if (node.status !== 'active' && node.status !== 'idle')
|
|
58
|
+
return false;
|
|
59
|
+
if (!isPidAlive(node.pi_pid))
|
|
60
|
+
return false;
|
|
61
|
+
// `isBusy` (the canonical mid-turn marker) AND-ed with the live pid above —
|
|
62
|
+
// a stale marker from a crashed pi fails the pid check, never the existsSync.
|
|
63
|
+
return isBusy(node.node_id);
|
|
64
|
+
}
|
|
65
|
+
/** Overlay-aware glyph for a node: hanging ⚠ outranks streaming ⟳, which
|
|
66
|
+
* outranks the base status glyph. */
|
|
67
|
+
export function nodeGlyph(node) {
|
|
50
68
|
if (node === null)
|
|
51
69
|
return '?';
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
case 'idle': return `${GRAY}○${RESET}`;
|
|
55
|
-
case 'done': return `${CYAN}✓${RESET}`;
|
|
56
|
-
case 'dead': return `${RED}✗${RESET}`;
|
|
57
|
-
case 'canceled': return `${YELLOW}⊘${RESET}`;
|
|
58
|
-
default: return '?';
|
|
59
|
-
}
|
|
70
|
+
const v = resolveNodeVisual(node.status, { streaming: streamingFor(node), hanging: hangingFor(node) });
|
|
71
|
+
return `${ESC}${v.color}m${v.glyph}${RESET}`;
|
|
60
72
|
}
|
|
61
73
|
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
62
74
|
/** Visible width, ignoring ANSI escapes. */
|
|
@@ -451,8 +463,8 @@ export function buildGraphModel(self, folds, expand) {
|
|
|
451
463
|
}
|
|
452
464
|
/** Render one GRAPH row. CURSOR (selected) → reverse-video bar; an ATTACHED
|
|
453
465
|
* (human-watched) node → a coloured background bar; SELF → bold name. The
|
|
454
|
-
* cursor outranks the attached tint when both land on the same row.
|
|
455
|
-
*
|
|
466
|
+
* cursor outranks the attached tint when both land on the same row. The
|
|
467
|
+
* overlay-aware glyph alone carries the live signal (status / ⟳ / ⚠). */
|
|
456
468
|
export function renderGraphRow(r, isCursor, focused, activeBelow, asks) {
|
|
457
469
|
const wrap = (line, attached) => isCursor ? fillBar(line, fillWidth(), REVERSE)
|
|
458
470
|
: attached ? fillBar(line, fillWidth(), BG_ATTACHED)
|
|
@@ -462,7 +474,7 @@ export function renderGraphRow(r, isCursor, focused, activeBelow, asks) {
|
|
|
462
474
|
return wrap(line, false);
|
|
463
475
|
}
|
|
464
476
|
const node = cNode(r.id);
|
|
465
|
-
const dot =
|
|
477
|
+
const dot = nodeGlyph(node);
|
|
466
478
|
const rawName = navLabel(node, r.id);
|
|
467
479
|
const name = r.isSelf ? `${BOLD}${rawName}${RESET}` : rawName;
|
|
468
480
|
const kind = `${DIM}${node?.kind ?? ''}${RESET}`;
|
|
@@ -473,7 +485,9 @@ export function renderGraphRow(r, isCursor, focused, activeBelow, asks) {
|
|
|
473
485
|
const expandable = r.hasKids && r.collapsed;
|
|
474
486
|
const caret = !isCursor && expandable ? `${DIM}▸${RESET} ` : ' ';
|
|
475
487
|
const fold = expandable ? ` ${DIM}[+${childCount(r.id)}]${RESET}` : '';
|
|
476
|
-
const
|
|
488
|
+
const fault = node !== null ? activeFaultForDisplay(node, readFault(r.id)) : null;
|
|
489
|
+
const faultSuffix = fault !== null ? ` · ${faultSummary(fault)}` : '';
|
|
490
|
+
const line = `${r.branch}${caret}${dot} ${name} ${kind} ${tokens}${cycleBadge(node)}${childBadge(node)}${liveBelowBadge(node, activeBelow)}${fold}${askBadge(r.id, asks)}${activityCell(r.id, node)}${faultSuffix}`;
|
|
477
491
|
return wrap(line, isAttached(r.id, node, focused));
|
|
478
492
|
}
|
|
479
493
|
/** Total lines the GRAPH widget may emit. pi hard-caps extension widgets at
|
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
/** Root of the global canvas home (`~/.crouter/canvas` unless `CRTR_HOME` is set).
|
|
2
2
|
* Nested under the `.crouter` scope root so the whole runtime lives in one
|
|
3
3
|
* visible top-level dir; `canvas/` keeps node-graph runtime state separate from
|
|
4
|
-
* durable user content (
|
|
4
|
+
* durable user content (memory/plugins/marketplaces/config) at the scope root. */
|
|
5
5
|
export declare function crtrHome(): string;
|
|
6
|
+
/** Absolute path to the SQLite canvas db file. Defaults to `canvas.db` under
|
|
7
|
+
* the canvas home, but `CRTR_CANVAS_DB` overrides ONLY this file's location
|
|
8
|
+
* (its `-wal`/`-shm` siblings follow it) while leaving `nodesRoot()` and all
|
|
9
|
+
* other node data under `crtrHome()`. This split exists for the Hearth guest:
|
|
10
|
+
* node data (meta.json/sessions, plain-file writes) stays on the durable NFS
|
|
11
|
+
* Volume via `CRTR_HOME`, but canvas.db's SQLite fcntl/WAL locks would hang on
|
|
12
|
+
* NFS (`local_lock=none`) — so it must live on local disk. Parent dir is
|
|
13
|
+
* created on use so an unset-default and an override both just work. */
|
|
6
14
|
export declare function canvasDbPath(): string;
|
|
15
|
+
/** Absolute path to a node's broker `view.sock`. Defaults to `view.sock` under
|
|
16
|
+
* the node dir, but `CRTR_SOCK_DIR` overrides the PARENT dir (the socket becomes
|
|
17
|
+
* `<CRTR_SOCK_DIR>/<nodeId>.sock`) while node data stays under `crtrHome()`.
|
|
18
|
+
* Sibling of `CRTR_CANVAS_DB`, and exists for the same Hearth-guest reason: an
|
|
19
|
+
* AF_UNIX socket cannot be bound on the durable NFS Volume (`bind()` → EACCES,
|
|
20
|
+
* even where plain file writes into the same dir succeed), so the broker socket
|
|
21
|
+
* must live on local disk. Unset (the default) is unchanged for normal
|
|
22
|
+
* local-disk hosts. Parent dir is created on use so both paths just work. */
|
|
23
|
+
export declare function viewSocketPath(nodeId: string): string;
|
|
7
24
|
export declare function nodesRoot(): string;
|
|
8
25
|
export declare function nodeDir(nodeId: string): string;
|
|
9
26
|
export declare function contextDir(nodeId: string): string;
|
|
@@ -13,22 +13,51 @@
|
|
|
13
13
|
//
|
|
14
14
|
// `CRTR_HOME` overrides the root (used by tests and isolated runs).
|
|
15
15
|
import { homedir } from 'node:os';
|
|
16
|
-
import { join } from 'node:path';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
17
|
import { mkdirSync } from 'node:fs';
|
|
18
18
|
import { CRTR_DIR_NAME } from '../../types.js';
|
|
19
19
|
/** Root of the global canvas home (`~/.crouter/canvas` unless `CRTR_HOME` is set).
|
|
20
20
|
* Nested under the `.crouter` scope root so the whole runtime lives in one
|
|
21
21
|
* visible top-level dir; `canvas/` keeps node-graph runtime state separate from
|
|
22
|
-
* durable user content (
|
|
22
|
+
* durable user content (memory/plugins/marketplaces/config) at the scope root. */
|
|
23
23
|
export function crtrHome() {
|
|
24
24
|
const override = process.env['CRTR_HOME'];
|
|
25
25
|
return override !== undefined && override !== ''
|
|
26
26
|
? override
|
|
27
27
|
: join(homedir(), CRTR_DIR_NAME, 'canvas');
|
|
28
28
|
}
|
|
29
|
+
/** Absolute path to the SQLite canvas db file. Defaults to `canvas.db` under
|
|
30
|
+
* the canvas home, but `CRTR_CANVAS_DB` overrides ONLY this file's location
|
|
31
|
+
* (its `-wal`/`-shm` siblings follow it) while leaving `nodesRoot()` and all
|
|
32
|
+
* other node data under `crtrHome()`. This split exists for the Hearth guest:
|
|
33
|
+
* node data (meta.json/sessions, plain-file writes) stays on the durable NFS
|
|
34
|
+
* Volume via `CRTR_HOME`, but canvas.db's SQLite fcntl/WAL locks would hang on
|
|
35
|
+
* NFS (`local_lock=none`) — so it must live on local disk. Parent dir is
|
|
36
|
+
* created on use so an unset-default and an override both just work. */
|
|
29
37
|
export function canvasDbPath() {
|
|
38
|
+
const override = process.env['CRTR_CANVAS_DB'];
|
|
39
|
+
if (override !== undefined && override !== '') {
|
|
40
|
+
mkdirSync(dirname(override), { recursive: true });
|
|
41
|
+
return override;
|
|
42
|
+
}
|
|
30
43
|
return join(crtrHome(), 'canvas.db');
|
|
31
44
|
}
|
|
45
|
+
/** Absolute path to a node's broker `view.sock`. Defaults to `view.sock` under
|
|
46
|
+
* the node dir, but `CRTR_SOCK_DIR` overrides the PARENT dir (the socket becomes
|
|
47
|
+
* `<CRTR_SOCK_DIR>/<nodeId>.sock`) while node data stays under `crtrHome()`.
|
|
48
|
+
* Sibling of `CRTR_CANVAS_DB`, and exists for the same Hearth-guest reason: an
|
|
49
|
+
* AF_UNIX socket cannot be bound on the durable NFS Volume (`bind()` → EACCES,
|
|
50
|
+
* even where plain file writes into the same dir succeed), so the broker socket
|
|
51
|
+
* must live on local disk. Unset (the default) is unchanged for normal
|
|
52
|
+
* local-disk hosts. Parent dir is created on use so both paths just work. */
|
|
53
|
+
export function viewSocketPath(nodeId) {
|
|
54
|
+
const override = process.env['CRTR_SOCK_DIR'];
|
|
55
|
+
if (override !== undefined && override !== '') {
|
|
56
|
+
mkdirSync(override, { recursive: true });
|
|
57
|
+
return join(override, `${nodeId}.sock`);
|
|
58
|
+
}
|
|
59
|
+
return join(nodeDir(nodeId), 'view.sock');
|
|
60
|
+
}
|
|
32
61
|
export function nodesRoot() {
|
|
33
62
|
return join(crtrHome(), 'nodes');
|
|
34
63
|
}
|