@crouton-kit/crouter 0.3.33 → 0.3.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/README.md +2 -2
  2. package/dist/build-root.js +3 -6
  3. package/dist/builtin-memory/crouter-development/marketplaces.md +6 -6
  4. package/dist/builtin-memory/crouter-development/plugins.md +13 -13
  5. package/dist/builtin-memory/internal/examples/imessage-assistant.md +3 -3
  6. package/dist/builtin-memory/internal/nodes-and-canvas.md +4 -4
  7. package/dist/builtin-personas/developer/PERSONA.md +1 -1
  8. package/dist/builtin-personas/orchestration-kernel.md +1 -1
  9. package/dist/builtin-personas/waiting.md +1 -1
  10. package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +71 -0
  11. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-help-gate.test.ts +41 -0
  12. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +663 -0
  13. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +52 -0
  14. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +418 -0
  15. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crouter-help.ts +87 -0
  16. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/filters.json +7 -0
  17. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/index.ts +174 -0
  18. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-help-gate.ts +408 -0
  19. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +442 -0
  20. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +119 -0
  21. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/nested-context.ts +327 -0
  22. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +574 -0
  23. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +260 -0
  24. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/strip-skills-docs.ts +40 -0
  25. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/sysprompt-window.ts +19 -0
  26. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/package.json +3 -0
  27. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.js +1 -0
  28. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.ts +479 -0
  29. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/LICENSE +13 -0
  30. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/README.md +172 -0
  31. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/bin.mjs +11 -0
  32. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  33. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  34. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  35. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  36. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  37. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  38. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  39. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  40. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  41. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  42. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  43. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  44. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  45. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  47. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  48. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  49. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  50. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  51. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  52. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  53. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/errors.js +57 -0
  54. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/index.js +17 -0
  55. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/log.js +11 -0
  56. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  57. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  58. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  59. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  60. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  61. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  62. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  63. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  64. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  65. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  66. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  67. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  68. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  69. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  70. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  71. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  72. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  73. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/public-api.js +102 -0
  74. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  75. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  76. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  77. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  78. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  79. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  80. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  81. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  82. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  83. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  84. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  85. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  86. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  87. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  88. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  89. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  90. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  91. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  92. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  93. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  94. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  95. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  96. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  97. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  98. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  99. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  100. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  101. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  102. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  103. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/util.js +11 -0
  104. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/visit.js +233 -0
  105. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/index.js +5 -0
  106. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/package.json +3 -0
  107. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.d.ts +8 -0
  108. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.mjs +201 -0
  109. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  110. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  111. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  112. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  113. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  114. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.js +112 -0
  115. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  116. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  117. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  118. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.js +224 -0
  119. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  120. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  121. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  122. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  123. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  124. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  125. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  126. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  127. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  128. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  129. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  130. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  131. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  132. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  133. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  134. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  135. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  136. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  137. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  138. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  139. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  140. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  141. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  142. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.js +337 -0
  143. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  144. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.js +76 -0
  145. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  146. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  147. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  148. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.js +90 -0
  149. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  150. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.js +178 -0
  151. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.d.ts +21 -0
  152. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.js +62 -0
  153. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.d.ts +25 -0
  154. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.js +50 -0
  155. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.d.ts +3 -0
  156. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.js +19 -0
  157. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  158. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.js +118 -0
  159. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  160. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.js +151 -0
  161. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  162. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.js +40 -0
  163. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  164. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.js +39 -0
  165. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  166. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  167. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  168. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  169. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  170. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  171. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  172. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  173. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  174. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.js +53 -0
  175. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  176. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.js +39 -0
  177. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/options.d.ts +350 -0
  178. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  179. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  180. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  181. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  182. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  183. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  184. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  185. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.js +112 -0
  186. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  187. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.js +723 -0
  188. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  189. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.js +41 -0
  190. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  191. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.js +980 -0
  192. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.d.ts +44 -0
  193. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.js +107 -0
  194. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  195. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.js +39 -0
  196. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  197. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.js +19 -0
  198. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  199. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.js +17 -0
  200. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  201. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.js +19 -0
  202. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  203. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.js +16 -0
  204. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  205. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.js +21 -0
  206. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  207. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.js +47 -0
  208. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  209. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.js +42 -0
  210. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  211. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.js +25 -0
  212. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  213. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.js +64 -0
  214. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  215. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  216. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.js +99 -0
  217. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/types.d.ts +92 -0
  218. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  219. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  220. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  221. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  222. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  223. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  224. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  225. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  226. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  227. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  228. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  229. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  230. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  231. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  232. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  233. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  234. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  235. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  236. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  237. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  238. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  239. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  240. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  241. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.js +132 -0
  242. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  243. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  244. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  245. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  246. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  247. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  248. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  249. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  250. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  251. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  252. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  253. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  254. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.d.ts +4 -0
  255. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.js +134 -0
  256. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.d.ts +16 -0
  257. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.js +28 -0
  258. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.d.ts +102 -0
  259. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.js +236 -0
  260. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/package.json +97 -0
  261. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/util.js +2 -0
  262. package/dist/builtin-pi-packages/pi-crtr-extensions/package-lock.json +3385 -0
  263. package/dist/builtin-pi-packages/pi-crtr-extensions/package.json +25 -0
  264. package/dist/builtin-pi-packages/pi-mode-switch/README.md +64 -0
  265. package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +40 -0
  266. package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +422 -0
  267. package/dist/builtin-pi-packages/pi-mode-switch/package.json +13 -0
  268. package/dist/clients/attach/__tests__/crtr-output-coverage.test.js +55 -0
  269. package/dist/clients/attach/__tests__/crtr-output-render.test.js +2340 -0
  270. package/dist/clients/attach/attach-cmd.js +826 -754
  271. package/dist/clients/attach/auth-pickers.js +2 -2
  272. package/dist/clients/attach/canvas-panels.js +1 -1
  273. package/dist/clients/attach/chat-view.d.ts +3 -2
  274. package/dist/clients/attach/chat-view.js +30 -10
  275. package/dist/clients/attach/clipboard-image.js +1 -1
  276. package/dist/clients/attach/clipboard-text.js +1 -1
  277. package/dist/clients/attach/config-load.js +1 -1
  278. package/dist/clients/attach/crtr-output-render.d.ts +48 -0
  279. package/dist/clients/attach/crtr-output-render.js +646 -0
  280. package/dist/clients/attach/extension-dialogs.js +1 -1
  281. package/dist/clients/attach/graph-overlay.js +3 -3
  282. package/dist/clients/attach/input-controller.js +1 -1
  283. package/dist/clients/attach/pickers.js +1 -1
  284. package/dist/clients/attach/slash-commands.js +5 -6
  285. package/dist/clients/attach/titled-editor.d.ts +4 -0
  286. package/dist/clients/attach/titled-editor.js +13 -1
  287. package/dist/clients/attach/view-socket.js +1 -1
  288. package/dist/clients/web/__tests__/source-cache.test.js +5 -5
  289. package/dist/clients/web/server.js +29 -5
  290. package/dist/clients/web/source-cache.js +3 -3
  291. package/dist/clients/web/web-cmd.js +7 -7
  292. package/dist/commands/canvas-issue.js +1 -1
  293. package/dist/commands/canvas-prune.js +24 -2
  294. package/dist/commands/canvas-snapshot.js +3 -0
  295. package/dist/commands/canvas-tmux-spread.js +3 -3
  296. package/dist/commands/human.js +1 -1
  297. package/dist/commands/memory/lint.js +15 -8
  298. package/dist/commands/memory/origin.d.ts +1 -0
  299. package/dist/commands/memory/origin.js +88 -0
  300. package/dist/commands/memory/shared.d.ts +8 -0
  301. package/dist/commands/memory/shared.js +22 -1
  302. package/dist/commands/memory/write.js +17 -12
  303. package/dist/commands/memory.js +4 -3
  304. package/dist/commands/node-context.js +4 -4
  305. package/dist/commands/node-snapshot.js +4 -1
  306. package/dist/commands/node.d.ts +2 -2
  307. package/dist/commands/node.js +814 -606
  308. package/dist/commands/pkg/market-inspect.d.ts +2 -1
  309. package/dist/commands/pkg/market-inspect.js +14 -32
  310. package/dist/commands/pkg/market-manage.d.ts +3 -1
  311. package/dist/commands/pkg/market-manage.js +58 -154
  312. package/dist/commands/pkg/market.js +7 -7
  313. package/dist/commands/pkg/plugin-inspect.d.ts +2 -1
  314. package/dist/commands/pkg/plugin-inspect.js +8 -24
  315. package/dist/commands/pkg/plugin-manage.d.ts +5 -1
  316. package/dist/commands/pkg/plugin-manage.js +245 -171
  317. package/dist/commands/pkg/plugin.js +6 -6
  318. package/dist/commands/pkg.js +5 -5
  319. package/dist/commands/revive.js +5 -3
  320. package/dist/commands/search/answer.js +1 -1
  321. package/dist/commands/search/contents.js +1 -1
  322. package/dist/commands/search/web.js +2 -2
  323. package/dist/commands/search.js +1 -1
  324. package/dist/commands/surface.d.ts +2 -0
  325. package/dist/commands/surface.js +43 -0
  326. package/dist/commands/sys/promptstudio.js +1 -1
  327. package/dist/commands/sys/settings.js +2 -2
  328. package/dist/commands/sys/setup-core.d.ts +88 -0
  329. package/dist/commands/sys/setup-core.js +352 -0
  330. package/dist/commands/sys/setup.d.ts +2 -0
  331. package/dist/commands/sys/setup.js +516 -0
  332. package/dist/commands/sys/sysprompt.js +3 -0
  333. package/dist/commands/sys.js +3 -2
  334. package/dist/commands/view-cycle.js +5 -5
  335. package/dist/commands/view-list.js +3 -3
  336. package/dist/commands/view-new.js +5 -5
  337. package/dist/commands/view-pick.js +6 -6
  338. package/dist/commands/view-run.js +14 -14
  339. package/dist/commands/view.js +3 -3
  340. package/dist/commands/workspace.js +10 -10
  341. package/dist/core/__tests__/boot.test.js +140 -0
  342. package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -27
  343. package/dist/core/__tests__/daemon-boot.test.js +22 -0
  344. package/dist/core/__tests__/fixtures/fake-engine.js +1 -1
  345. package/dist/core/__tests__/full/broker-attach-limits.test.js +1 -1
  346. package/dist/core/__tests__/full/broker-attach-stream.test.js +1 -1
  347. package/dist/core/__tests__/full/broker-crash-teardown.test.js +10 -5
  348. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +1 -1
  349. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +1 -1
  350. package/dist/core/__tests__/full/broker-pane-resolution.test.js +1 -1
  351. package/dist/core/__tests__/full/cascade-close.test.js +31 -18
  352. package/dist/core/__tests__/full/detach-focus.test.js +2 -2
  353. package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
  354. package/dist/core/__tests__/helpers/harness.js +1 -1
  355. package/dist/core/__tests__/live-mutation-verbs.test.js +10 -10
  356. package/dist/core/__tests__/live-mutation.test.js +8 -8
  357. package/dist/core/__tests__/migration.test.js +124 -0
  358. package/dist/core/__tests__/on-read-dedup-resume.test.js +40 -0
  359. package/dist/core/__tests__/preview-registry-sync.test.js +36 -0
  360. package/dist/core/__tests__/prune-to-limit.test.js +91 -0
  361. package/dist/core/__tests__/revive.test.js +64 -21
  362. package/dist/core/__tests__/trigger-migration.test.js +48 -0
  363. package/dist/core/__tests__/wake-bearings.test.js +23 -21
  364. package/dist/core/__tests__/wake-origin.test.js +36 -33
  365. package/dist/core/canvas/boot.d.ts +48 -0
  366. package/dist/core/canvas/boot.js +157 -0
  367. package/dist/core/canvas/canvas.d.ts +27 -1
  368. package/dist/core/canvas/canvas.js +86 -5
  369. package/dist/core/canvas/db.js +86 -1
  370. package/dist/core/canvas/index.d.ts +1 -1
  371. package/dist/core/canvas/index.js +1 -1
  372. package/dist/core/canvas/nav-model.js +1 -1
  373. package/dist/core/canvas/pid.d.ts +6 -0
  374. package/dist/core/canvas/pid.js +13 -0
  375. package/dist/core/canvas/triggers.d.ts +108 -0
  376. package/dist/core/canvas/triggers.js +320 -0
  377. package/dist/core/canvas/types.d.ts +128 -46
  378. package/dist/core/command.js +13 -4
  379. package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
  380. package/dist/core/hearth/config.d.ts +1 -0
  381. package/dist/core/hearth/config.js +36 -0
  382. package/dist/core/hearth/guest-env.d.ts +7 -0
  383. package/dist/core/hearth/guest-env.js +17 -1
  384. package/dist/core/hearth/model-auth-guest.d.ts +8 -0
  385. package/dist/core/hearth/model-auth-guest.js +435 -0
  386. package/dist/core/hearth/provider.d.ts +13 -6
  387. package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +2 -0
  388. package/dist/core/hearth/providers/blaxel-bootstrap.js +127 -19
  389. package/dist/core/hearth/providers/blaxel-home.d.ts +8 -4
  390. package/dist/core/hearth/providers/blaxel-home.js +85 -75
  391. package/dist/core/hearth/providers/blaxel.d.ts +5 -0
  392. package/dist/core/hearth/providers/blaxel.js +86 -12
  393. package/dist/core/hearth/providers/types.d.ts +6 -1
  394. package/dist/core/hearth/registry.js +2 -1
  395. package/dist/core/hearth/types.d.ts +35 -0
  396. package/dist/core/help.d.ts +16 -0
  397. package/dist/core/help.js +2 -0
  398. package/dist/core/memory-resolver.d.ts +8 -8
  399. package/dist/core/memory-resolver.js +58 -26
  400. package/dist/core/preview-registry.d.ts +25 -0
  401. package/dist/core/preview-registry.js +2047 -0
  402. package/dist/core/resolver.d.ts +1 -0
  403. package/dist/core/resolver.js +23 -16
  404. package/dist/core/runtime/bearings.d.ts +11 -10
  405. package/dist/core/runtime/bearings.js +8 -8
  406. package/dist/core/runtime/broker-protocol.d.ts +2 -2
  407. package/dist/core/runtime/broker-protocol.js +2 -2
  408. package/dist/core/runtime/close.js +2 -2
  409. package/dist/core/runtime/kickoff.js +1 -1
  410. package/dist/core/runtime/launch.d.ts +9 -3
  411. package/dist/core/runtime/launch.js +17 -9
  412. package/dist/core/runtime/lifecycle.js +7 -7
  413. package/dist/core/runtime/model-swap.js +1 -1
  414. package/dist/core/runtime/placement.d.ts +5 -5
  415. package/dist/core/runtime/placement.js +10 -10
  416. package/dist/core/runtime/recycle.js +7 -7
  417. package/dist/core/runtime/reset.d.ts +1 -1
  418. package/dist/core/runtime/reset.js +3 -3
  419. package/dist/core/runtime/revive-all.d.ts +5 -2
  420. package/dist/core/runtime/revive-all.js +5 -2
  421. package/dist/core/runtime/revive.d.ts +15 -8
  422. package/dist/core/runtime/revive.js +52 -16
  423. package/dist/core/runtime/spawn.d.ts +1 -1
  424. package/dist/core/runtime/spawn.js +7 -7
  425. package/dist/core/runtime/stop-guard.js +5 -5
  426. package/dist/core/runtime/surface-bg.js +1 -1
  427. package/dist/core/runtime/tmux.d.ts +1 -1
  428. package/dist/core/runtime/tmux.js +4 -4
  429. package/dist/core/scope.d.ts +9 -0
  430. package/dist/core/scope.js +37 -15
  431. package/dist/core/substrate/on-read.js +23 -21
  432. package/dist/core/substrate/render.js +3 -3
  433. package/dist/core/view/loader.js +2 -2
  434. package/dist/core/wake.d.ts +2 -2
  435. package/dist/core/wake.js +7 -7
  436. package/dist/daemon/__tests__/predicate-eval.test.js +109 -0
  437. package/dist/daemon/crtrd.js +222 -103
  438. package/dist/daemon/predicate-eval.d.ts +52 -0
  439. package/dist/daemon/predicate-eval.js +248 -0
  440. package/dist/hearth/control-plane/__tests__/node-message.test.js +60 -0
  441. package/dist/hearth/control-plane/__tests__/rate-limit-recurrence.test.js +49 -0
  442. package/dist/hearth/control-plane/__tests__/relay-security.test.js +314 -0
  443. package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
  444. package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
  445. package/dist/hearth/control-plane/__tests__/webhook-ingress.test.js +167 -0
  446. package/dist/hearth/control-plane/config.d.ts +21 -0
  447. package/dist/hearth/control-plane/config.js +77 -0
  448. package/dist/hearth/control-plane/db.d.ts +30 -0
  449. package/dist/hearth/control-plane/db.js +534 -0
  450. package/dist/hearth/control-plane/ingress/rate-limit.d.ts +24 -0
  451. package/dist/hearth/control-plane/ingress/rate-limit.js +100 -0
  452. package/dist/hearth/control-plane/ingress/route-store.d.ts +31 -0
  453. package/dist/hearth/control-plane/ingress/route-store.js +61 -0
  454. package/dist/hearth/control-plane/ingress/webhook-delivery-store.d.ts +41 -0
  455. package/dist/hearth/control-plane/ingress/webhook-delivery-store.js +69 -0
  456. package/dist/hearth/control-plane/ingress/webhook-route.d.ts +55 -0
  457. package/dist/hearth/control-plane/ingress/webhook-route.js +285 -0
  458. package/dist/hearth/control-plane/main.js +88 -0
  459. package/dist/hearth/control-plane/node-message.d.ts +31 -0
  460. package/dist/hearth/control-plane/node-message.js +98 -0
  461. package/dist/hearth/control-plane/register.d.ts +15 -0
  462. package/dist/hearth/control-plane/register.js +34 -0
  463. package/dist/hearth/control-plane/registry.d.ts +17 -0
  464. package/dist/hearth/control-plane/registry.js +161 -0
  465. package/dist/hearth/control-plane/relay.d.ts +40 -0
  466. package/dist/hearth/control-plane/relay.js +642 -0
  467. package/dist/hearth/control-plane/scheduler/fire-store.d.ts +36 -0
  468. package/dist/hearth/control-plane/scheduler/fire-store.js +73 -0
  469. package/dist/hearth/control-plane/scheduler/recurrence.d.ts +7 -0
  470. package/dist/hearth/control-plane/scheduler/recurrence.js +58 -0
  471. package/dist/hearth/control-plane/scheduler/scan-loop.d.ts +38 -0
  472. package/dist/hearth/control-plane/scheduler/scan-loop.js +138 -0
  473. package/dist/hearth/control-plane/scheduler/schedule-store.d.ts +32 -0
  474. package/dist/hearth/control-plane/scheduler/schedule-store.js +66 -0
  475. package/dist/hearth/control-plane/secrets.d.ts +17 -0
  476. package/dist/hearth/control-plane/secrets.js +113 -0
  477. package/dist/hearth/control-plane/server.d.ts +27 -0
  478. package/dist/hearth/control-plane/server.js +346 -0
  479. package/dist/hearth/control-plane/session.d.ts +68 -0
  480. package/dist/hearth/control-plane/session.js +273 -0
  481. package/dist/hearth/control-plane/triggers/acl.d.ts +14 -0
  482. package/dist/hearth/control-plane/triggers/acl.js +52 -0
  483. package/dist/hearth/control-plane/triggers/audit-store.d.ts +38 -0
  484. package/dist/hearth/control-plane/triggers/audit-store.js +79 -0
  485. package/dist/hearth/control-plane/triggers/deliver.d.ts +43 -0
  486. package/dist/hearth/control-plane/triggers/deliver.js +76 -0
  487. package/dist/hearth/control-plane/triggers/envelope.d.ts +29 -0
  488. package/dist/hearth/control-plane/triggers/envelope.js +38 -0
  489. package/dist/hearth/control-plane/types.d.ts +66 -0
  490. package/dist/hearth/control-plane/wake.d.ts +80 -0
  491. package/dist/hearth/control-plane/wake.js +312 -0
  492. package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +2 -2
  493. package/dist/hearth/wake-proxy/home.d.ts +2 -8
  494. package/dist/hearth/wake-proxy/home.js +48 -12
  495. package/dist/pi-extensions/canvas-doc-substrate.js +28 -2
  496. package/dist/pi-extensions/canvas-nav.js +1 -1
  497. package/dist/prompts/view.js +7 -8
  498. package/dist/types.js +4 -4
  499. package/dist/web-client/assets/{index-D36PNBj4.js → index-BRKxe-hy.js} +2 -2
  500. package/dist/web-client/index.html +1 -1
  501. package/package.json +12 -8
  502. package/scripts/postinstall.mjs +8 -0
  503. package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
  504. package/dist/clients/attach/__tests__/autocomplete-and-bash-mode.test.js +0 -96
  505. package/dist/clients/attach/__tests__/bash-bang-routing.test.js +0 -58
  506. package/dist/clients/attach/__tests__/bundle-pi-tui-dedup.test.js +0 -56
  507. package/dist/clients/attach/__tests__/clipboard-image.test.js +0 -76
  508. package/dist/clients/attach/__tests__/editor-newline.test.js +0 -82
  509. package/dist/clients/attach/__tests__/git-info.test.js +0 -31
  510. package/dist/clients/attach/__tests__/onrequest-wired.test.js +0 -20
  511. package/dist/clients/attach/__tests__/reconnect-giveup.test.js +0 -30
  512. package/dist/clients/attach/__tests__/slash-quit-copy.test.js +0 -42
  513. package/dist/clients/attach/__tests__/titled-editor.test.js +0 -60
  514. package/dist/commands/memory/__tests__/lint-schema.test.js +0 -52
  515. package/dist/core/__tests__/argv-parser.test.js +0 -217
  516. package/dist/core/__tests__/artifact-paths.test.js +0 -44
  517. package/dist/core/__tests__/draw-style.test.js +0 -258
  518. package/dist/core/__tests__/editor-label.test.js +0 -26
  519. package/dist/core/__tests__/fault-marker.test.js +0 -112
  520. package/dist/core/__tests__/fault-retry-rewind.test.d.ts +0 -1
  521. package/dist/core/__tests__/fault-retry-rewind.test.js +0 -123
  522. package/dist/core/__tests__/frame-decoder-perf.test.d.ts +0 -1
  523. package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
  524. package/dist/core/__tests__/keystone.test.d.ts +0 -1
  525. package/dist/core/__tests__/keystone.test.js +0 -185
  526. package/dist/core/__tests__/listing-completeness.test.d.ts +0 -1
  527. package/dist/core/__tests__/listing-completeness.test.js +0 -31
  528. package/dist/core/__tests__/memory-resolver.test.d.ts +0 -1
  529. package/dist/core/__tests__/memory-resolver.test.js +0 -119
  530. package/dist/core/__tests__/memory.test.d.ts +0 -1
  531. package/dist/core/__tests__/memory.test.js +0 -60
  532. package/dist/core/__tests__/model-ladders.test.d.ts +0 -1
  533. package/dist/core/__tests__/model-ladders.test.js +0 -160
  534. package/dist/core/__tests__/node-env.test.d.ts +0 -1
  535. package/dist/core/__tests__/node-env.test.js +0 -26
  536. package/dist/core/__tests__/pane-column.test.d.ts +0 -1
  537. package/dist/core/__tests__/pane-column.test.js +0 -153
  538. package/dist/core/__tests__/persona-compose.test.d.ts +0 -1
  539. package/dist/core/__tests__/persona-compose.test.js +0 -53
  540. package/dist/core/__tests__/persona-subkind.test.d.ts +0 -1
  541. package/dist/core/__tests__/persona-subkind.test.js +0 -65
  542. package/dist/core/__tests__/persona.test.d.ts +0 -1
  543. package/dist/core/__tests__/persona.test.js +0 -107
  544. package/dist/core/__tests__/unknown-path.test.d.ts +0 -1
  545. package/dist/core/__tests__/unknown-path.test.js +0 -58
  546. package/dist/core/canvas/wakeups.d.ts +0 -76
  547. package/dist/core/canvas/wakeups.js +0 -185
  548. package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.d.ts +0 -1
  549. package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.js +0 -455
  550. /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
  551. /package/dist/clients/attach/__tests__/{autocomplete-and-bash-mode.test.d.ts → crtr-output-render.test.d.ts} +0 -0
  552. /package/dist/{clients/attach/__tests__/bash-bang-routing.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
  553. /package/dist/{clients/attach/__tests__/bundle-pi-tui-dedup.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
  554. /package/dist/{clients/attach/__tests__/clipboard-image.test.d.ts → core/__tests__/preview-registry-sync.test.d.ts} +0 -0
  555. /package/dist/{clients/attach/__tests__/editor-newline.test.d.ts → core/__tests__/prune-to-limit.test.d.ts} +0 -0
  556. /package/dist/{clients/attach/__tests__/git-info.test.d.ts → core/__tests__/trigger-migration.test.d.ts} +0 -0
  557. /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
  558. /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
  559. /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
  560. /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
  561. /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
  562. /package/dist/{core/__tests__/argv-parser.test.d.ts → hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts} +0 -0
  563. /package/dist/{core/__tests__/artifact-paths.test.d.ts → hearth/control-plane/__tests__/trigger-delivery.test.d.ts} +0 -0
  564. /package/dist/{core/__tests__/draw-style.test.d.ts → hearth/control-plane/__tests__/webhook-ingress.test.d.ts} +0 -0
  565. /package/dist/{core/__tests__/editor-label.test.d.ts → hearth/control-plane/main.d.ts} +0 -0
  566. /package/dist/{core/__tests__/fault-marker.test.d.ts → hearth/control-plane/types.js} +0 -0
@@ -1,185 +0,0 @@
1
- // Phase 2 keystone — runtime authority moved into the WAL'd row.
2
- //
3
- // These four guard the load-bearing invariants of the split:
4
- // 1. concurrency — two writers of DIFFERENT runtime fields both land (the old
5
- // whole-meta read-modify-write dropped one).
6
- // 2. isolation — a single-column setter never disturbs the other runtime
7
- // fields (single-statement atomicity).
8
- // 3. persistence — meta.json on disk holds NO runtime fields, yet getNode
9
- // still returns them (hydrated from the row).
10
- // 4. backfill — a v2-shaped db with runtime still in meta migrates (v3) so
11
- // runtime lands in the authoritative row.
12
- import { test, before, beforeEach, after } from 'node:test';
13
- import assert from 'node:assert/strict';
14
- import { mkdtempSync, mkdirSync, rmSync, readFileSync, writeFileSync, } from 'node:fs';
15
- import { tmpdir } from 'node:os';
16
- import { join } from 'node:path';
17
- import { DatabaseSync } from 'node:sqlite';
18
- import { createNode, getNode, setStatus, setIntent, setPresence, recordPid, clearPid, } from '../canvas/canvas.js';
19
- import { openDb, closeDb, MIGRATIONS } from '../canvas/db.js';
20
- import { nodeDir, nodeMetaPath, canvasDbPath, ensureHome, } from '../canvas/paths.js';
21
- let home;
22
- function node(id, over = {}) {
23
- return {
24
- node_id: id,
25
- name: id,
26
- created: new Date().toISOString(),
27
- cwd: '/tmp/work',
28
- kind: 'general',
29
- mode: 'base',
30
- lifecycle: 'terminal',
31
- status: 'active',
32
- ...over,
33
- };
34
- }
35
- before(() => {
36
- home = mkdtempSync(join(tmpdir(), 'crtr-keystone-'));
37
- process.env['CRTR_HOME'] = home;
38
- });
39
- beforeEach(() => {
40
- closeDb();
41
- rmSync(home, { recursive: true, force: true });
42
- });
43
- after(() => {
44
- closeDb();
45
- rmSync(home, { recursive: true, force: true });
46
- delete process.env['CRTR_HOME'];
47
- });
48
- // 1. concurrency — both interleaved writers survive.
49
- test('concurrency: an interleaved setStatus and recordPid both land', () => {
50
- createNode(node('a', { status: 'active', pi_pid: null }));
51
- // Two writers each take a STALE snapshot, exactly as the old cross-process
52
- // race did (the daemon stamping pi_pid while the node flips status).
53
- const snapDaemon = getNode('a');
54
- const snapNode = getNode('a');
55
- assert.equal(snapDaemon?.pi_pid ?? null, null);
56
- assert.equal(snapNode?.status, 'active');
57
- // Interleave their writes through the atomic per-column setters.
58
- recordPid('a', 4321); // writer 1 (daemon)
59
- setStatus('a', 'idle'); // writer 2 (node)
60
- // Under the OLD whole-meta read-modify-write, writer 2 writing back its stale
61
- // snapshot (pi_pid still null) would have CLOBBERED writer 1's pid. Atomic
62
- // single-column UPDATEs serialized by WAL keep BOTH.
63
- const m = getNode('a');
64
- assert.equal(m?.pi_pid, 4321, 'the pid write survived');
65
- assert.equal(m?.status, 'idle', 'the status write survived');
66
- });
67
- // 2. isolation — single-column atomicity in both directions.
68
- test('isolation: setPresence and setStatus/setIntent never disturb each other', () => {
69
- createNode(node('a', { status: 'active', intent: 'refresh', pi_pid: 99 }));
70
- setPresence('a', { tmux_session: 's', window: '@1' });
71
- let m = getNode('a');
72
- assert.equal(m?.status, 'active', 'status undisturbed by setPresence');
73
- assert.equal(m?.intent, 'refresh', 'intent undisturbed by setPresence');
74
- assert.equal(m?.pi_pid, 99, 'pi_pid undisturbed by setPresence');
75
- assert.equal(m?.tmux_session, 's');
76
- assert.equal(m?.window, '@1');
77
- // The reverse: flipping status + intent leaves presence and pid intact.
78
- setStatus('a', 'done');
79
- setIntent('a', 'done');
80
- m = getNode('a');
81
- assert.equal(m?.status, 'done');
82
- assert.equal(m?.intent, 'done');
83
- assert.equal(m?.tmux_session, 's', 'tmux_session undisturbed by setStatus/setIntent');
84
- assert.equal(m?.window, '@1', 'window undisturbed by setStatus/setIntent');
85
- assert.equal(m?.pi_pid, 99, 'pi_pid undisturbed by setStatus/setIntent');
86
- clearPid('a');
87
- assert.equal(getNode('a')?.pi_pid, null, 'clearPid nulls only the pid');
88
- assert.equal(getNode('a')?.tmux_session, 's', 'clearPid leaves presence intact');
89
- });
90
- // 3. persistence-split — meta.json has no runtime; getNode still hydrates it.
91
- test('persistence-split: meta.json holds no runtime fields, getNode hydrates them', () => {
92
- createNode(node('a', {
93
- status: 'active',
94
- intent: 'refresh',
95
- pi_pid: 7,
96
- tmux_session: 's',
97
- window: '@1',
98
- }));
99
- setStatus('a', 'done');
100
- setPresence('a', { tmux_session: 's2', window: '@2' });
101
- const raw = JSON.parse(readFileSync(nodeMetaPath('a'), 'utf8'));
102
- for (const k of ['status', 'intent', 'pi_pid', 'window', 'tmux_session']) {
103
- assert.ok(!(k in raw), `meta.json must NOT contain runtime field "${k}"`);
104
- }
105
- // identity is still on disk
106
- assert.equal(raw['kind'], 'general');
107
- assert.equal(raw['node_id'], 'a');
108
- // ...while the hydrated view returns runtime from the authoritative row.
109
- const m = getNode('a');
110
- assert.equal(m?.status, 'done');
111
- assert.equal(m?.tmux_session, 's2');
112
- assert.equal(m?.window, '@2');
113
- assert.equal(m?.intent, 'refresh');
114
- assert.equal(m?.pi_pid, 7);
115
- });
116
- // 4. backfill — v2-shaped db with runtime in meta migrates so runtime lands in
117
- // the row.
118
- test('backfill (v3): runtime in legacy meta.json is copied into the row', () => {
119
- ensureHome();
120
- // A legacy meta with runtime STILL on disk (pre-keystone shape).
121
- mkdirSync(nodeDir('n1'), { recursive: true });
122
- writeFileSync(nodeMetaPath('n1'), JSON.stringify({
123
- node_id: 'n1',
124
- name: 'N1',
125
- created: '2020-01-01T00:00:00Z',
126
- cwd: '/tmp/work',
127
- kind: 'general',
128
- mode: 'base',
129
- lifecycle: 'terminal',
130
- // legacy runtime, still living in meta.json:
131
- status: 'idle',
132
- intent: 'refresh',
133
- pi_pid: 555,
134
- window: '@9',
135
- tmux_session: 'sess',
136
- }, null, 2));
137
- // Hand-build a v2-shaped db: all columns present, runtime seeded NULL,
138
- // user_version 2 (so the runner runs ONLY v3 = backfill).
139
- const raw = new DatabaseSync(canvasDbPath());
140
- raw.exec(`
141
- CREATE TABLE nodes (
142
- node_id TEXT PRIMARY KEY,
143
- name TEXT NOT NULL,
144
- kind TEXT NOT NULL,
145
- mode TEXT NOT NULL DEFAULT 'base',
146
- lifecycle TEXT NOT NULL DEFAULT 'terminal',
147
- status TEXT NOT NULL DEFAULT 'active',
148
- cwd TEXT NOT NULL,
149
- parent TEXT,
150
- created TEXT NOT NULL,
151
- intent TEXT,
152
- pi_pid INTEGER,
153
- "window" TEXT,
154
- tmux_session TEXT
155
- );
156
- `);
157
- raw
158
- .prepare('INSERT INTO nodes (node_id, name, kind, mode, lifecycle, status, cwd, parent, created) VALUES (?,?,?,?,?,?,?,?,?)')
159
- .run('n1', 'N1', 'general', 'base', 'terminal', 'idle', '/tmp/work', null, '2020-01-01T00:00:00Z');
160
- raw.exec('PRAGMA user_version = 2;');
161
- // Precondition: runtime columns are NULL before the backfill.
162
- const before = raw
163
- .prepare('SELECT intent, pi_pid, "window", tmux_session FROM nodes WHERE node_id = ?')
164
- .get('n1');
165
- assert.equal(before['intent'], null);
166
- assert.equal(before['pi_pid'], null);
167
- raw.close();
168
- // openDb() runs the migration runner forward → v3 backfill copies meta→row.
169
- const db = openDb();
170
- assert.equal(db.prepare('PRAGMA user_version').get().user_version, MIGRATIONS.length);
171
- const r = db
172
- .prepare('SELECT status, intent, pi_pid, "window", tmux_session FROM nodes WHERE node_id = ?')
173
- .get('n1');
174
- assert.equal(r['status'], 'idle', 'status already mirrored — untouched');
175
- assert.equal(r['intent'], 'refresh', 'intent backfilled from meta');
176
- assert.equal(r['pi_pid'], 555, 'pi_pid backfilled from meta');
177
- assert.equal(r['window'], '@9', 'window backfilled from meta');
178
- assert.equal(r['tmux_session'], 'sess', 'tmux_session backfilled from meta');
179
- // And the hydrated view now reflects it.
180
- const m = getNode('n1');
181
- assert.equal(m?.intent, 'refresh');
182
- assert.equal(m?.pi_pid, 555);
183
- assert.equal(m?.window, '@9');
184
- assert.equal(m?.tmux_session, 'sess');
185
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,31 +0,0 @@
1
- // Completeness guard for the assembled parent-level listings.
2
- // Run with: node --import tsx/esm --test src/core/__tests__/listing-completeness.test.ts
3
- //
4
- // Each non-hidden child surfaced in a branch's `help.listing` must carry a real
5
- // self-description: both `description` and `whenToUse` non-empty. The listing is
6
- // assembled by defineBranch from the child defs, so a blank attribute here means
7
- // a child def forgot to declare its description/whenToUse. Walks the whole live
8
- // command tree (buildRoot) so every shipped subtree is covered.
9
- import { test } from 'node:test';
10
- import assert from 'node:assert/strict';
11
- import { buildRoot } from '../../build-root.js';
12
- test('every non-hidden listing child declares description + whenToUse', async () => {
13
- const root = await buildRoot();
14
- const missing = [];
15
- const walk = (branch, path) => {
16
- for (const child of branch.help.listing ?? []) {
17
- if (child.tier === 'hidden')
18
- continue;
19
- if (child.description.trim() === '' || child.whenToUse.trim() === '') {
20
- missing.push(`${path} ${child.name}: empty description/whenToUse`);
21
- }
22
- }
23
- for (const child of branch.children) {
24
- if (child.kind === 'branch')
25
- walk(child, `${path} ${child.name}`);
26
- }
27
- };
28
- for (const subtree of root.subtrees)
29
- walk(subtree, subtree.name);
30
- assert.deepEqual(missing, [], `listing children missing self-description:\n${missing.join('\n')}`);
31
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,119 +0,0 @@
1
- // Regression test for the namespaced plugin-doc READ path in resolveMemoryDoc.
2
- //
3
- // Bug (substrate-unification cut f1b071b, fixed by 945d121): plugin memory docs
4
- // mount at a virtual `<pluginName>/` namespace and ARE enumerated by
5
- // listAllMemoryDocs, so `crtr memory list` advertises canonical names like
6
- // `claude-capture/capture`. But findMemoryMatches (the direct-path lookup inside
7
- // resolveMemoryDoc) only searched the NATIVE scopeMemoryDir, never each plugin's
8
- // pluginMemoryDir — so `crtr memory read <plugin>/<leaf>` returned not_found for
9
- // a name that `list` had just shown. Only the bare-leaf fallback (`read capture`)
10
- // resolved. The fix taught findMemoryMatches to resolve `<plugin>/<rest>` against
11
- // each enabled plugin's pluginMemoryDir, native-before-plugin precedence kept.
12
- //
13
- // Follow-up bug (same seat): the `<plugin>/<rest>` branch required a non-empty
14
- // rest (`if (slash <= 0) continue`), so a BARE plugin name never tried the
15
- // plugin-root INDEX.md — `read claude-godot-prompter` / `read ai` returned
16
- // not_found even though `<plugin>/INDEX` and `<plugin>/<child>` resolved. The
17
- // fix resolves a bare plugin name to `<plugin>/memory/INDEX.md`, mirroring the
18
- // native bare-dir-name -> INDEX.md contract, native-before-plugin kept.
19
- //
20
- // This test FAILS on the pre-fix code (the fully-qualified and bare-plugin-name
21
- // reads throw notFound) and PASSES on the current code.
22
- //
23
- // Run: node --import tsx/esm --test src/core/__tests__/memory-resolver.test.ts
24
- import { test, before, after } from 'node:test';
25
- import assert from 'node:assert/strict';
26
- import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from 'node:fs';
27
- import { tmpdir } from 'node:os';
28
- import { join } from 'node:path';
29
- import { listAllMemoryDocs, resolveMemoryDoc } from '../memory-resolver.js';
30
- import { resetScopeCache } from '../scope.js';
31
- // Fixture: a temp PROJECT scope (a `.crouter/` dir discovered by walking up from
32
- // cwd) holding both a native memory/ tree and one enabled fixture plugin whose
33
- // memory/ tree mounts under the `fixplug/` namespace.
34
- let projectDir;
35
- let prevCwd;
36
- const PLUGIN = 'fixplug';
37
- function doc(name) {
38
- return `---\nkind: knowledge\nwhen-and-why-to-read: fixture doc ${name}\n---\n\n# ${name}\n`;
39
- }
40
- before(() => {
41
- prevCwd = process.cwd();
42
- projectDir = mkdtempSync(join(tmpdir(), 'crtr-memres-'));
43
- const scopeRoot = join(projectDir, '.crouter');
44
- // Native scope docs. `fixplug/shared` is a native SHADOW of a plugin doc of
45
- // the same canonical name — it must win (native-before-plugin precedence).
46
- const memDir = join(scopeRoot, 'memory');
47
- mkdirSync(join(memDir, PLUGIN), { recursive: true });
48
- writeFileSync(join(memDir, PLUGIN, 'shared.md'), doc('native-shared'));
49
- // Fixture plugin: enabled manifest + a flat substrate doc and a nested one.
50
- const pluginRoot = join(scopeRoot, 'plugins', PLUGIN);
51
- mkdirSync(join(pluginRoot, '.crouter-plugin'), { recursive: true });
52
- writeFileSync(join(pluginRoot, '.crouter-plugin', 'plugin.json'), JSON.stringify({ name: PLUGIN, version: '0.0.0' }));
53
- const pluginMem = join(pluginRoot, 'memory');
54
- mkdirSync(join(pluginMem, 'area'), { recursive: true });
55
- writeFileSync(join(pluginMem, 'widget.md'), doc('plugin-widget'));
56
- writeFileSync(join(pluginMem, 'area', 'zone.md'), doc('plugin-zone'));
57
- writeFileSync(join(pluginMem, 'shared.md'), doc('plugin-shared'));
58
- writeFileSync(join(pluginMem, 'SKILL.md'), doc('legacy-plugin-skill'));
59
- mkdirSync(join(memDir, 'legacy'), { recursive: true });
60
- writeFileSync(join(memDir, 'legacy', 'SKILL.md'), doc('legacy-native-skill'));
61
- // Plugin-root INDEX.md: a BARE plugin name must resolve this (mirrors the
62
- // native bare-dir-name -> INDEX.md contract for the plugin mount root).
63
- writeFileSync(join(pluginMem, 'INDEX.md'), doc('plugin-root-index'));
64
- // Explicitly enable the plugin in config (default is enabled, but be robust).
65
- writeFileSync(join(scopeRoot, 'config.json'), JSON.stringify({ plugins: { [PLUGIN]: { enabled: true } } }));
66
- // Point the scope resolver at the fixture: project scope is found by walking
67
- // up from cwd, so chdir into the temp dir and clear the cached project root.
68
- process.chdir(projectDir);
69
- resetScopeCache();
70
- });
71
- after(() => {
72
- process.chdir(prevCwd);
73
- resetScopeCache();
74
- rmSync(projectDir, { recursive: true, force: true });
75
- });
76
- test('fully-qualified <plugin>/<leaf> resolves to the plugin substrate doc', () => {
77
- // Pre-fix this threw notFound (findMemoryMatches never searched pluginMemoryDir).
78
- const d = resolveMemoryDoc(`${PLUGIN}/widget`);
79
- assert.equal(d.name, `${PLUGIN}/widget`);
80
- assert.ok(d.path.endsWith(join('plugins', PLUGIN, 'memory', 'widget.md')));
81
- });
82
- test('fully-qualified multi-segment <plugin>/<a>/<b> resolves the nested doc', () => {
83
- // Pre-fix this also threw notFound.
84
- const d = resolveMemoryDoc(`${PLUGIN}/area/zone`);
85
- assert.equal(d.name, `${PLUGIN}/area/zone`);
86
- assert.ok(d.path.endsWith(join('plugins', PLUGIN, 'memory', 'area', 'zone.md')));
87
- });
88
- test('the bare leaf still resolves via last-segment fallback', () => {
89
- // This worked even pre-fix (leaf fallback scans listAllMemoryDocs, which DID
90
- // enumerate plugin docs) — the gap was the direct fully-qualified path only.
91
- const d = resolveMemoryDoc('widget');
92
- assert.equal(d.name, `${PLUGIN}/widget`);
93
- });
94
- test('bare plugin name resolves the plugin-root INDEX.md', () => {
95
- // Regression: findMemoryMatches skipped the plugin branch for a bare name
96
- // (`if (slash <= 0) continue`), so a bare plugin name never tried the
97
- // plugin-root INDEX.md and returned not_found — even though `<plugin>/INDEX`
98
- // resolved. The fix resolves the bare mount root to <plugin>/memory/INDEX.md.
99
- const d = resolveMemoryDoc(PLUGIN);
100
- assert.equal(d.name, PLUGIN);
101
- assert.ok(d.path.endsWith(join('plugins', PLUGIN, 'memory', 'INDEX.md')));
102
- });
103
- test('native doc wins over a plugin doc of the same canonical name', () => {
104
- // native-before-plugin precedence: findMemoryMatches checks scopeMemoryDir
105
- // before pluginMemoryDir, so the native shadow at memory/fixplug/shared.md
106
- // wins over the plugin's memory/shared.md.
107
- const d = resolveMemoryDoc(`${PLUGIN}/shared`);
108
- assert.equal(d.name, `${PLUGIN}/shared`);
109
- assert.ok(d.path.endsWith(join('memory', PLUGIN, 'shared.md')));
110
- assert.ok(!d.path.includes(join('plugins', PLUGIN)));
111
- });
112
- test('legacy SKILL.md bundles are not memory docs', () => {
113
- const names = listAllMemoryDocs('project').map((d) => d.name);
114
- assert.ok(!names.includes('legacy'));
115
- assert.ok(!names.includes(`${PLUGIN}/SKILL`));
116
- assert.throws(() => resolveMemoryDoc('legacy'), /memory document not found/);
117
- assert.throws(() => resolveMemoryDoc('legacy/SKILL'), /memory document not found/);
118
- assert.throws(() => resolveMemoryDoc(`${PLUGIN}/SKILL`), /memory document not found/);
119
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,60 +0,0 @@
1
- // Tests for the substrate memory surface in the orchestration kernel:
2
- // 1. The kernel names the three memory scopes and the document substrate flow
3
- // (crtr memory write/list/find/read).
4
- // 2. Promotion guidance names the three stores without re-listing their dirs.
5
- //
6
- // Run: node --import tsx/esm --test src/core/__tests__/memory.test.ts
7
- import { test, before, beforeEach, after } from 'node:test';
8
- import assert from 'node:assert/strict';
9
- import { mkdtempSync, rmSync } from 'node:fs';
10
- import { tmpdir } from 'node:os';
11
- import { join } from 'node:path';
12
- import { closeDb } from '../canvas/db.js';
13
- import { spawnNode } from '../runtime/nodes.js';
14
- import { promote } from '../runtime/promote.js';
15
- import { personaDrift } from '../runtime/persona.js';
16
- import { loadKernel } from '../personas/index.js';
17
- let home;
18
- before(() => {
19
- home = mkdtempSync(join(tmpdir(), 'crtr-memory-'));
20
- process.env['CRTR_HOME'] = home;
21
- });
22
- beforeEach(() => {
23
- closeDb();
24
- rmSync(home, { recursive: true, force: true });
25
- });
26
- after(() => {
27
- closeDb();
28
- rmSync(home, { recursive: true, force: true });
29
- delete process.env['CRTR_HOME'];
30
- });
31
- // ---------------------------------------------------------------------------
32
- // Kernel + guidance: the document substrate flow
33
- // ---------------------------------------------------------------------------
34
- test('the orchestration kernel names the three stores and the substrate commands', () => {
35
- const kernel = loadKernel();
36
- for (const store of ['user-global', 'project', 'node-local']) {
37
- assert.ok(kernel.includes(store), `kernel names the ${store} store`);
38
- }
39
- // The substrate commands must be present.
40
- assert.ok(kernel.includes('crtr memory write'), 'kernel mentions crtr memory write');
41
- assert.ok(kernel.includes('crtr memory list'), 'kernel mentions crtr memory list');
42
- assert.ok(kernel.includes('crtr memory find'), 'kernel mentions crtr memory find');
43
- assert.ok(kernel.includes('crtr memory read'), 'kernel mentions crtr memory read');
44
- // It teaches the substrate flow only — no MEMORY.md pointer-line index.
45
- assert.ok(!kernel.includes('MEMORY.md'), 'kernel does not mention MEMORY.md');
46
- assert.ok(!kernel.includes('pointer line'), 'kernel does not teach the pointer-line flow');
47
- });
48
- test('promotion guidance references the three stores; no <memory> block', () => {
49
- const meta = spawnNode({ kind: 'general', cwd: '/tmp/work', parent: null });
50
- promote(meta.node_id);
51
- const drift = personaDrift(meta.node_id);
52
- assert.ok(drift !== null, 'promotion drifts the persona');
53
- const guidance = drift.guidance;
54
- // It NAMES the three stores so a promoting node knows its memory scopes.
55
- for (const store of ['user-global', 'project', 'node-local']) {
56
- assert.ok(guidance.includes(store), `guidance names the ${store} store`);
57
- }
58
- // The guidance points at the substrate flow, not a <memory> block.
59
- assert.ok(!guidance.includes('<memory>'), 'guidance does not point at a <memory> block');
60
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,160 +0,0 @@
1
- // Run: node --import tsx/esm --test src/core/__tests__/model-ladders.test.ts
2
- //
3
- // The runtime model ladder is user-configurable: config.json can override the
4
- // provider default, the per-provider ladder cells, and persona-strength picks.
5
- // This test verifies both the merge shape and the cached sync read invalidation
6
- // on config edits.
7
- import { test, before, after, beforeEach } from 'node:test';
8
- import assert from 'node:assert/strict';
9
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
10
- import { tmpdir } from 'node:os';
11
- import { join } from 'node:path';
12
- import { readConfig } from '../config.js';
13
- import { buildLaunchSpec, equivalentOtherProviderModel, normalizeModel } from '../runtime/launch.js';
14
- let home;
15
- const crtrRoot = () => join(home, '.crouter');
16
- const configFile = () => join(crtrRoot(), 'config.json');
17
- function writeConfig(config) {
18
- mkdirSync(crtrRoot(), { recursive: true });
19
- writeFileSync(configFile(), `${JSON.stringify(config, null, 2)}\n`, 'utf8');
20
- }
21
- before(() => {
22
- home = mkdtempSync(join(tmpdir(), 'crtr-model-ladders-'));
23
- process.env['HOME'] = home;
24
- });
25
- beforeEach(() => {
26
- rmSync(crtrRoot(), { recursive: true, force: true });
27
- });
28
- after(() => {
29
- rmSync(home, { recursive: true, force: true });
30
- delete process.env['HOME'];
31
- });
32
- test('config merge keeps ladder defaults while honoring overrides', () => {
33
- writeConfig({
34
- modelLadders: {
35
- defaultProvider: 'openai',
36
- anthropic: {
37
- ultra: 'anthropic/custom-ultra-1',
38
- strong: 'anthropic/custom-strong-1',
39
- medium: 'anthropic/custom-medium-1',
40
- light: 'anthropic/custom-light-1',
41
- },
42
- openai: {
43
- ultra: 'openai/custom-ultra-1',
44
- strong: 'openai/custom-strong-1',
45
- medium: 'openai/custom-medium-1',
46
- light: 'openai/custom-light-1',
47
- },
48
- },
49
- personaStrengths: {
50
- developer: 'light',
51
- },
52
- });
53
- const cfg = readConfig('user');
54
- assert.equal(cfg.modelLadders.defaultProvider, 'openai');
55
- assert.equal(cfg.modelLadders.openai.strong, 'openai/custom-strong-1');
56
- assert.equal(cfg.modelLadders.anthropic.light, 'anthropic/custom-light-1');
57
- assert.equal(cfg.personaStrengths.developer, 'light');
58
- });
59
- test('normalizeModel and buildLaunchSpec honor config overrides, and edits invalidate the cache', () => {
60
- writeConfig({
61
- modelLadders: {
62
- defaultProvider: 'openai',
63
- anthropic: {
64
- ultra: 'anthropic/custom-ultra-1',
65
- strong: 'anthropic/custom-strong-1',
66
- medium: 'anthropic/custom-medium-1',
67
- light: 'anthropic/custom-light-1',
68
- },
69
- openai: {
70
- ultra: 'openai/custom-ultra-1',
71
- strong: 'openai/custom-strong-1',
72
- medium: 'openai/custom-medium-1',
73
- light: 'openai/custom-light-1',
74
- },
75
- },
76
- personaStrengths: {
77
- developer: 'light',
78
- },
79
- });
80
- assert.equal(normalizeModel('strong'), 'openai/custom-strong-1', 'config default provider wins over env/default');
81
- assert.equal(normalizeModel('opus'), 'anthropic/custom-strong-1', 'family aliases still map to anthropic');
82
- const override = buildLaunchSpec('developer', 'base', {
83
- lifecycle: 'terminal',
84
- hasManager: true,
85
- model: 'medium',
86
- });
87
- assert.equal(override.launch.model, 'openai/custom-medium-1', 'meta.model_override wins over personaStrengths');
88
- const persona = buildLaunchSpec('developer', 'base', {
89
- lifecycle: 'terminal',
90
- hasManager: true,
91
- });
92
- assert.equal(persona.launch.model, 'openai/custom-light-1', 'personaStrengths wins over persona frontmatter');
93
- writeConfig({
94
- modelLadders: {
95
- defaultProvider: 'anthropic',
96
- anthropic: {
97
- ultra: 'anthropic/custom-ultra-2',
98
- strong: 'anthropic/custom-strong-2',
99
- medium: 'anthropic/custom-medium-2',
100
- light: 'anthropic/custom-light-2',
101
- },
102
- openai: {
103
- ultra: 'openai/custom-ultra-2',
104
- strong: 'openai/custom-strong-2',
105
- medium: 'openai/custom-medium-2',
106
- light: 'openai/custom-light-2',
107
- },
108
- },
109
- personaStrengths: {
110
- developer: 'strong',
111
- },
112
- });
113
- assert.equal(normalizeModel('strong'), 'anthropic/custom-strong-2', 'a config edit invalidates the cached sync read');
114
- const edited = buildLaunchSpec('developer', 'base', {
115
- lifecycle: 'terminal',
116
- hasManager: true,
117
- });
118
- assert.equal(edited.launch.model, 'anthropic/custom-strong-2', 'edited personaStrengths are picked up on the next launch');
119
- });
120
- test('equivalentOtherProviderModel maps a failed ladder model to the other provider at the same strength', () => {
121
- writeConfig({
122
- modelLadders: {
123
- defaultProvider: 'anthropic',
124
- anthropic: {
125
- ultra: 'anthropic/custom-ultra',
126
- strong: 'anthropic/custom-strong:high',
127
- medium: 'anthropic/custom-medium',
128
- light: 'anthropic/custom-light',
129
- },
130
- openai: {
131
- ultra: 'openai/custom-ultra',
132
- strong: 'openai/custom-strong:xhigh',
133
- medium: 'openai/custom-medium',
134
- light: 'openai/custom-light',
135
- },
136
- },
137
- });
138
- assert.deepEqual(equivalentOtherProviderModel('anthropic/custom-strong:medium'), {
139
- fromProvider: 'anthropic',
140
- toProvider: 'openai',
141
- strength: 'strong',
142
- model: 'openai/custom-strong:xhigh',
143
- });
144
- assert.deepEqual(equivalentOtherProviderModel('openai/custom-light'), {
145
- fromProvider: 'openai',
146
- toProvider: 'anthropic',
147
- strength: 'light',
148
- model: 'anthropic/custom-light',
149
- });
150
- assert.equal(equivalentOtherProviderModel('anthropic/custom-strong:medium', new Set(['anthropic'])), null);
151
- assert.equal(equivalentOtherProviderModel('some-provider/not-in-ladder'), null);
152
- });
153
- test('malformed existing user config surfaces instead of falling back to defaults', () => {
154
- mkdirSync(crtrRoot(), { recursive: true });
155
- writeFileSync(configFile(), '{\n', 'utf8');
156
- assert.throws(() => buildLaunchSpec('developer', 'base', {
157
- lifecycle: 'terminal',
158
- hasManager: true,
159
- }), /JSON|Unexpected token|Unexpected end/);
160
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { nodeEnv } from '../runtime/nodes.js';
4
- function meta(over = {}) {
5
- return {
6
- node_id: 'n',
7
- name: 'alpha-beta',
8
- created: '2026-01-01T00:00:00.000Z',
9
- cwd: '/tmp/work',
10
- kind: 'developer',
11
- mode: 'base',
12
- lifecycle: 'terminal',
13
- status: 'active',
14
- ...over,
15
- };
16
- }
17
- test('nodeEnv exports CRTR_CYCLES from meta.cycles', () => {
18
- const env = nodeEnv(meta({ cycles: 9 }));
19
- assert.equal(env.CRTR_CYCLES, '9');
20
- });
21
- test('nodeEnv defaults CRTR_CYCLES to 0 when meta.cycles is absent', () => {
22
- const withoutCycles = meta();
23
- delete withoutCycles.cycles;
24
- const env = nodeEnv(withoutCycles);
25
- assert.equal(env.CRTR_CYCLES, '0');
26
- });
@@ -1 +0,0 @@
1
- export {};