@crouton-kit/crouter 0.3.33 → 0.3.35

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 (617) 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 +427 -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 +843 -743
  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 +19 -9
  345. package/dist/core/__tests__/flagship-lifecycle.test.js +4 -1
  346. package/dist/core/__tests__/full/broker-attach-limits.test.js +1 -1
  347. package/dist/core/__tests__/full/broker-attach-stream.test.js +1 -1
  348. package/dist/core/__tests__/full/broker-crash-teardown.test.js +10 -5
  349. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +1 -1
  350. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +2 -2
  351. package/dist/core/__tests__/full/broker-pane-resolution.test.js +1 -1
  352. package/dist/core/__tests__/full/cascade-close.test.js +31 -18
  353. package/dist/core/__tests__/full/detach-focus.test.js +17 -3
  354. package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
  355. package/dist/core/__tests__/helpers/harness.js +1 -1
  356. package/dist/core/__tests__/live-mutation-verbs.test.js +17 -11
  357. package/dist/core/__tests__/live-mutation.test.js +15 -10
  358. package/dist/core/__tests__/migration.test.js +124 -0
  359. package/dist/core/__tests__/on-read-dedup-resume.test.js +40 -0
  360. package/dist/core/__tests__/preview-registry-sync.test.js +36 -0
  361. package/dist/core/__tests__/prune-to-limit.test.js +91 -0
  362. package/dist/core/__tests__/revive.test.js +64 -21
  363. package/dist/core/__tests__/trigger-migration.test.js +48 -0
  364. package/dist/core/__tests__/wake-bearings.test.js +23 -21
  365. package/dist/core/__tests__/wake-origin.test.js +36 -33
  366. package/dist/core/canvas/boot.d.ts +48 -0
  367. package/dist/core/canvas/boot.js +157 -0
  368. package/dist/core/canvas/canvas.d.ts +27 -1
  369. package/dist/core/canvas/canvas.js +86 -5
  370. package/dist/core/canvas/db.js +86 -1
  371. package/dist/core/canvas/index.d.ts +1 -1
  372. package/dist/core/canvas/index.js +1 -1
  373. package/dist/core/canvas/nav-model.js +1 -1
  374. package/dist/core/canvas/pid.d.ts +6 -0
  375. package/dist/core/canvas/pid.js +13 -0
  376. package/dist/core/canvas/triggers.d.ts +108 -0
  377. package/dist/core/canvas/triggers.js +320 -0
  378. package/dist/core/canvas/types.d.ts +128 -46
  379. package/dist/core/command.js +13 -4
  380. package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
  381. package/dist/core/hearth/config.d.ts +1 -0
  382. package/dist/core/hearth/config.js +36 -3
  383. package/dist/core/hearth/guest-env.d.ts +7 -0
  384. package/dist/core/hearth/guest-env.js +17 -1
  385. package/dist/core/hearth/index.d.ts +0 -1
  386. package/dist/core/hearth/index.js +0 -1
  387. package/dist/core/hearth/model-auth-guest.d.ts +8 -0
  388. package/dist/core/hearth/model-auth-guest.js +430 -0
  389. package/dist/core/hearth/provider.d.ts +13 -6
  390. package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +2 -0
  391. package/dist/core/hearth/providers/blaxel-bootstrap.js +127 -19
  392. package/dist/core/hearth/providers/blaxel-home.d.ts +8 -4
  393. package/dist/core/hearth/providers/blaxel-home.js +85 -75
  394. package/dist/core/hearth/providers/blaxel.d.ts +5 -0
  395. package/dist/core/hearth/providers/blaxel.js +86 -12
  396. package/dist/core/hearth/providers/types.d.ts +6 -1
  397. package/dist/core/hearth/types.d.ts +35 -1
  398. package/dist/core/help.d.ts +16 -0
  399. package/dist/core/help.js +2 -0
  400. package/dist/core/memory-resolver.d.ts +8 -8
  401. package/dist/core/memory-resolver.js +58 -26
  402. package/dist/core/preview-registry.d.ts +25 -0
  403. package/dist/core/preview-registry.js +2047 -0
  404. package/dist/core/resolver.d.ts +1 -0
  405. package/dist/core/resolver.js +23 -16
  406. package/dist/core/runtime/bearings.d.ts +11 -10
  407. package/dist/core/runtime/bearings.js +8 -8
  408. package/dist/core/runtime/broker-protocol.d.ts +2 -2
  409. package/dist/core/runtime/broker-protocol.js +2 -2
  410. package/dist/core/runtime/close.js +2 -2
  411. package/dist/core/runtime/kickoff.js +1 -1
  412. package/dist/core/runtime/launch.d.ts +9 -3
  413. package/dist/core/runtime/launch.js +17 -9
  414. package/dist/core/runtime/lifecycle.js +7 -7
  415. package/dist/core/runtime/model-swap.js +1 -1
  416. package/dist/core/runtime/placement.d.ts +5 -5
  417. package/dist/core/runtime/placement.js +10 -10
  418. package/dist/core/runtime/recycle.js +7 -7
  419. package/dist/core/runtime/reset.d.ts +1 -1
  420. package/dist/core/runtime/reset.js +3 -3
  421. package/dist/core/runtime/revive-all.d.ts +5 -2
  422. package/dist/core/runtime/revive-all.js +5 -2
  423. package/dist/core/runtime/revive.d.ts +15 -8
  424. package/dist/core/runtime/revive.js +52 -16
  425. package/dist/core/runtime/spawn.d.ts +1 -1
  426. package/dist/core/runtime/spawn.js +7 -7
  427. package/dist/core/runtime/stop-guard.js +5 -5
  428. package/dist/core/runtime/surface-bg.js +1 -1
  429. package/dist/core/runtime/tmux.d.ts +1 -1
  430. package/dist/core/runtime/tmux.js +4 -4
  431. package/dist/core/scope.d.ts +9 -0
  432. package/dist/core/scope.js +37 -15
  433. package/dist/core/substrate/on-read.js +23 -21
  434. package/dist/core/substrate/render.js +3 -3
  435. package/dist/core/view/loader.js +2 -2
  436. package/dist/core/wake.d.ts +2 -2
  437. package/dist/core/wake.js +7 -7
  438. package/dist/daemon/__tests__/predicate-eval.test.js +109 -0
  439. package/dist/daemon/crtrd.js +222 -103
  440. package/dist/daemon/predicate-eval.d.ts +52 -0
  441. package/dist/daemon/predicate-eval.js +248 -0
  442. package/dist/hearth/control-plane/__tests__/node-message.test.js +60 -0
  443. package/dist/hearth/control-plane/__tests__/rate-limit-recurrence.test.js +49 -0
  444. package/dist/hearth/control-plane/__tests__/relay-security.test.js +314 -0
  445. package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
  446. package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
  447. package/dist/hearth/control-plane/__tests__/webhook-ingress.test.js +167 -0
  448. package/dist/hearth/control-plane/config.d.ts +21 -0
  449. package/dist/hearth/control-plane/config.js +77 -0
  450. package/dist/hearth/control-plane/db.d.ts +30 -0
  451. package/dist/hearth/control-plane/db.js +534 -0
  452. package/dist/hearth/control-plane/ingress/rate-limit.d.ts +24 -0
  453. package/dist/hearth/control-plane/ingress/rate-limit.js +100 -0
  454. package/dist/hearth/control-plane/ingress/route-store.d.ts +31 -0
  455. package/dist/hearth/control-plane/ingress/route-store.js +61 -0
  456. package/dist/hearth/control-plane/ingress/webhook-delivery-store.d.ts +41 -0
  457. package/dist/hearth/control-plane/ingress/webhook-delivery-store.js +69 -0
  458. package/dist/hearth/control-plane/ingress/webhook-route.d.ts +55 -0
  459. package/dist/hearth/control-plane/ingress/webhook-route.js +285 -0
  460. package/dist/hearth/control-plane/main.js +88 -0
  461. package/dist/hearth/control-plane/node-message.d.ts +31 -0
  462. package/dist/hearth/control-plane/node-message.js +98 -0
  463. package/dist/hearth/control-plane/register.d.ts +15 -0
  464. package/dist/hearth/control-plane/register.js +34 -0
  465. package/dist/hearth/control-plane/registry.d.ts +17 -0
  466. package/dist/hearth/control-plane/registry.js +161 -0
  467. package/dist/hearth/control-plane/relay.d.ts +40 -0
  468. package/dist/hearth/{wake-proxy/proxy.js → control-plane/relay.js} +201 -275
  469. package/dist/hearth/control-plane/scheduler/fire-store.d.ts +36 -0
  470. package/dist/hearth/control-plane/scheduler/fire-store.js +73 -0
  471. package/dist/hearth/control-plane/scheduler/recurrence.d.ts +7 -0
  472. package/dist/hearth/control-plane/scheduler/recurrence.js +58 -0
  473. package/dist/hearth/control-plane/scheduler/scan-loop.d.ts +38 -0
  474. package/dist/hearth/control-plane/scheduler/scan-loop.js +138 -0
  475. package/dist/hearth/control-plane/scheduler/schedule-store.d.ts +32 -0
  476. package/dist/hearth/control-plane/scheduler/schedule-store.js +66 -0
  477. package/dist/hearth/control-plane/secrets.d.ts +17 -0
  478. package/dist/hearth/control-plane/secrets.js +113 -0
  479. package/dist/hearth/control-plane/server.d.ts +27 -0
  480. package/dist/hearth/control-plane/server.js +346 -0
  481. package/dist/hearth/control-plane/session.d.ts +68 -0
  482. package/dist/hearth/control-plane/session.js +273 -0
  483. package/dist/hearth/control-plane/triggers/acl.d.ts +14 -0
  484. package/dist/hearth/control-plane/triggers/acl.js +52 -0
  485. package/dist/hearth/control-plane/triggers/audit-store.d.ts +38 -0
  486. package/dist/hearth/control-plane/triggers/audit-store.js +79 -0
  487. package/dist/hearth/control-plane/triggers/deliver.d.ts +43 -0
  488. package/dist/hearth/control-plane/triggers/deliver.js +76 -0
  489. package/dist/hearth/control-plane/triggers/envelope.d.ts +29 -0
  490. package/dist/hearth/control-plane/triggers/envelope.js +38 -0
  491. package/dist/hearth/control-plane/types.d.ts +66 -0
  492. package/dist/hearth/control-plane/wake.d.ts +80 -0
  493. package/dist/hearth/control-plane/wake.js +312 -0
  494. package/dist/pi-extensions/canvas-doc-substrate.js +28 -2
  495. package/dist/pi-extensions/canvas-nav.js +1 -1
  496. package/dist/prompts/view.js +7 -8
  497. package/dist/types.js +4 -4
  498. package/dist/web-client/assets/index-DUThOUzU.css +2 -0
  499. package/dist/web-client/assets/index-IAJVtuVe.js +80 -0
  500. package/dist/web-client/index.html +2 -2
  501. package/package.json +12 -9
  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.d.ts +0 -1
  519. package/dist/core/__tests__/editor-label.test.js +0 -26
  520. package/dist/core/__tests__/fault-marker.test.d.ts +0 -1
  521. package/dist/core/__tests__/fault-marker.test.js +0 -112
  522. package/dist/core/__tests__/fault-retry-rewind.test.d.ts +0 -1
  523. package/dist/core/__tests__/fault-retry-rewind.test.js +0 -123
  524. package/dist/core/__tests__/frame-decoder-perf.test.d.ts +0 -1
  525. package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
  526. package/dist/core/__tests__/keystone.test.d.ts +0 -1
  527. package/dist/core/__tests__/keystone.test.js +0 -185
  528. package/dist/core/__tests__/listing-completeness.test.d.ts +0 -1
  529. package/dist/core/__tests__/listing-completeness.test.js +0 -31
  530. package/dist/core/__tests__/memory-resolver.test.d.ts +0 -1
  531. package/dist/core/__tests__/memory-resolver.test.js +0 -119
  532. package/dist/core/__tests__/memory.test.d.ts +0 -1
  533. package/dist/core/__tests__/memory.test.js +0 -60
  534. package/dist/core/__tests__/model-ladders.test.d.ts +0 -1
  535. package/dist/core/__tests__/model-ladders.test.js +0 -160
  536. package/dist/core/__tests__/node-env.test.d.ts +0 -1
  537. package/dist/core/__tests__/node-env.test.js +0 -26
  538. package/dist/core/__tests__/pane-column.test.d.ts +0 -1
  539. package/dist/core/__tests__/pane-column.test.js +0 -153
  540. package/dist/core/__tests__/persona-compose.test.d.ts +0 -1
  541. package/dist/core/__tests__/persona-compose.test.js +0 -53
  542. package/dist/core/__tests__/persona-subkind.test.d.ts +0 -1
  543. package/dist/core/__tests__/persona-subkind.test.js +0 -65
  544. package/dist/core/__tests__/persona.test.d.ts +0 -1
  545. package/dist/core/__tests__/persona.test.js +0 -107
  546. package/dist/core/__tests__/unknown-path.test.d.ts +0 -1
  547. package/dist/core/__tests__/unknown-path.test.js +0 -58
  548. package/dist/core/canvas/wakeups.d.ts +0 -76
  549. package/dist/core/canvas/wakeups.js +0 -185
  550. package/dist/core/hearth/registry.d.ts +0 -15
  551. package/dist/core/hearth/registry.js +0 -179
  552. package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.d.ts +0 -1
  553. package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.js +0 -289
  554. package/dist/hearth/wake-proxy/__tests__/config-timeout.test.d.ts +0 -1
  555. package/dist/hearth/wake-proxy/__tests__/config-timeout.test.js +0 -34
  556. package/dist/hearth/wake-proxy/__tests__/guest-source.test.d.ts +0 -1
  557. package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +0 -203
  558. package/dist/hearth/wake-proxy/__tests__/hardening.test.d.ts +0 -1
  559. package/dist/hearth/wake-proxy/__tests__/hardening.test.js +0 -59
  560. package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.d.ts +0 -1
  561. package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.js +0 -372
  562. package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.d.ts +0 -1
  563. package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.js +0 -258
  564. package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.d.ts +0 -1
  565. package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.js +0 -437
  566. package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.d.ts +0 -1
  567. package/dist/hearth/wake-proxy/__tests__/source-bridge-gate.test.js +0 -455
  568. package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.d.ts +0 -1
  569. package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.js +0 -15
  570. package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.d.ts +0 -1
  571. package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.js +0 -141
  572. package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.d.ts +0 -1
  573. package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.js +0 -143
  574. package/dist/hearth/wake-proxy/anthropic-oauth.d.ts +0 -58
  575. package/dist/hearth/wake-proxy/anthropic-oauth.js +0 -189
  576. package/dist/hearth/wake-proxy/auth.d.ts +0 -22
  577. package/dist/hearth/wake-proxy/auth.js +0 -128
  578. package/dist/hearth/wake-proxy/config.d.ts +0 -2
  579. package/dist/hearth/wake-proxy/config.js +0 -151
  580. package/dist/hearth/wake-proxy/guest-source.d.ts +0 -14
  581. package/dist/hearth/wake-proxy/guest-source.js +0 -130
  582. package/dist/hearth/wake-proxy/hearth-status.d.ts +0 -44
  583. package/dist/hearth/wake-proxy/hearth-status.js +0 -267
  584. package/dist/hearth/wake-proxy/home.d.ts +0 -67
  585. package/dist/hearth/wake-proxy/home.js +0 -297
  586. package/dist/hearth/wake-proxy/main.js +0 -134
  587. package/dist/hearth/wake-proxy/model-auth.d.ts +0 -13
  588. package/dist/hearth/wake-proxy/model-auth.js +0 -345
  589. package/dist/hearth/wake-proxy/proxy.d.ts +0 -35
  590. package/dist/hearth/wake-proxy/public-source-gate.d.ts +0 -9
  591. package/dist/hearth/wake-proxy/public-source-gate.js +0 -409
  592. package/dist/hearth/wake-proxy/redact.d.ts +0 -1
  593. package/dist/hearth/wake-proxy/redact.js +0 -17
  594. package/dist/hearth/wake-proxy/server.d.ts +0 -11
  595. package/dist/hearth/wake-proxy/server.js +0 -142
  596. package/dist/hearth/wake-proxy/state.d.ts +0 -18
  597. package/dist/hearth/wake-proxy/state.js +0 -342
  598. package/dist/hearth/wake-proxy/types.d.ts +0 -76
  599. package/dist/web-client/assets/index-BZUxTkv5.css +0 -2
  600. package/dist/web-client/assets/index-D36PNBj4.js +0 -80
  601. /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
  602. /package/dist/clients/attach/__tests__/{autocomplete-and-bash-mode.test.d.ts → crtr-output-render.test.d.ts} +0 -0
  603. /package/dist/{clients/attach/__tests__/bash-bang-routing.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
  604. /package/dist/{clients/attach/__tests__/bundle-pi-tui-dedup.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
  605. /package/dist/{clients/attach/__tests__/clipboard-image.test.d.ts → core/__tests__/preview-registry-sync.test.d.ts} +0 -0
  606. /package/dist/{clients/attach/__tests__/editor-newline.test.d.ts → core/__tests__/prune-to-limit.test.d.ts} +0 -0
  607. /package/dist/{clients/attach/__tests__/git-info.test.d.ts → core/__tests__/trigger-migration.test.d.ts} +0 -0
  608. /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
  609. /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
  610. /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
  611. /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
  612. /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
  613. /package/dist/{core/__tests__/argv-parser.test.d.ts → hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts} +0 -0
  614. /package/dist/{core/__tests__/artifact-paths.test.d.ts → hearth/control-plane/__tests__/trigger-delivery.test.d.ts} +0 -0
  615. /package/dist/{core/__tests__/draw-style.test.d.ts → hearth/control-plane/__tests__/webhook-ingress.test.d.ts} +0 -0
  616. /package/dist/hearth/{wake-proxy → control-plane}/main.d.ts +0 -0
  617. /package/dist/hearth/{wake-proxy → control-plane}/types.js +0 -0
@@ -9,36 +9,47 @@
9
9
  // auto-reconnect), and a node with no viewer is brought on screen by the next
10
10
  // `focus`.
11
11
  //
12
- // resume=true → `pi --session <path|id>` — wakes the saved conversation,
13
- // preferring the absolute session-file path (cwd-immune) over
14
- // the bare session id.
12
+ // resume=true → `pi --session <path>` — wakes the saved conversation by its
13
+ // absolute session-file path (cwd-immune), but only when that
14
+ // file actually exists on disk; otherwise falls through to a
15
+ // fresh launch (see resumeArgs).
15
16
  // resume=false → fresh pi invocation — the node re-reads its roadmap/context dir.
16
17
  //
17
18
  // reviveNode remains the ONLY sanctioned launcher of the node engine.
19
+ import { existsSync } from 'node:fs';
18
20
  import { getNode, updateNode, clearPid, fullName, cancelDeadlinesFor, } from '../canvas/index.js';
19
21
  import { transition } from './lifecycle.js';
20
22
  import { buildPiArgv } from './launch.js';
21
23
  import { buildReviveKickoff, drainBearings } from './kickoff.js';
22
24
  import { headlessBrokerHost } from './host.js';
23
25
  import { isPidAlive } from '../canvas/pid.js';
26
+ import { reconcileBootLiveness } from '../canvas/boot.js';
24
27
  import { clearFault } from './fault.js';
25
28
  import { clearInjectedDocs } from '../substrate/injected-store.js';
26
29
  // ---------------------------------------------------------------------------
27
30
  // resumeArgs — which session source a revive resumes from
28
31
  // ---------------------------------------------------------------------------
29
- /** Pick the `--session` source for a revive. resume=true prefers the absolute
30
- * session-file path (immune to cwd; pi opens it directly) and keeps the bare
31
- * session id as the fallback for older nodes booted before pi_session_file was
32
- * captured. buildPiArgv prefers the path when both are present. resume=false (a
33
- * refresh-yield) selects neither the node re-reads its roadmap fresh. Pure so
34
- * the path-vs-id selection is unit-testable without tmux. */
32
+ /** Pick the `--session` source for a revive. resume=true resumes by the
33
+ * absolute session-file path (immune to cwd; pi opens it directly) but ONLY
34
+ * when that file actually exists on disk. A node's `pi_session_file` can be
35
+ * recorded in meta with nothing ever written there (e.g. its first-boot engine
36
+ * died before session_start ever ran), and `headlessBrokerHost.launch`'s
37
+ * preflight (host.ts) fatally rejects handing pi a `--session` for a missing
38
+ * path OR a bare id — either would crash the revive and strand the node dead
39
+ * with nothing to recover it. So when there is no real `.jsonl` to resume,
40
+ * this selects NEITHER source: the caller then falls through to a fresh
41
+ * (`--fresh`-equivalent) launch, which is always safe. resume=false (a
42
+ * refresh-yield) also selects neither — the node re-reads its roadmap fresh.
43
+ * Pure so the decision is unit-testable without tmux or a real filesystem
44
+ * fixture beyond a temp file. */
35
45
  export function resumeArgs(meta, resume) {
36
46
  if (!resume)
37
47
  return {};
38
- return {
39
- resumeSessionId: meta.pi_session_id ?? undefined,
40
- resumeSessionPath: meta.pi_session_file ?? undefined,
41
- };
48
+ const path = meta.pi_session_file;
49
+ if (path != null && path !== '' && existsSync(path)) {
50
+ return { resumeSessionPath: path };
51
+ }
52
+ return {};
42
53
  }
43
54
  // ---------------------------------------------------------------------------
44
55
  // reviveNode
@@ -62,6 +73,15 @@ export function reviveNode(nodeId, opts) {
62
73
  updateNode(nodeId, { host_kind: 'broker' });
63
74
  meta.host_kind = 'broker';
64
75
  }
76
+ // A durable-row / ephemeral-pid boot change (a sandbox/VM destroy+recreate,
77
+ // or a host reboot) invalidates every `pi_pid` recorded before it — the OS
78
+ // process table reset, so a small stale pid can coincidentally collide with
79
+ // an unrelated process on the new boot and fool the double-launch guard
80
+ // right below into believing a dead broker is still alive. Idempotent and
81
+ // cheap once reconciled (a single small file read) except the one time it
82
+ // actually matters, so it's safe to call on every revive regardless of
83
+ // entry point (daemon tick, or a direct/manual `canvas revive`).
84
+ reconcileBootLiveness();
65
85
  // Double-revive guard: the broker's isAlive IS isPidAlive(pi_pid), so a node
66
86
  // whose broker pid is still running was already revived by another path —
67
87
  // re-launching would put a SECOND broker on the same session file. No-op.
@@ -78,10 +98,26 @@ export function reviveNode(nodeId, opts) {
78
98
  // launches with the incremented count.
79
99
  meta.cycles = (meta.cycles ?? 0) + 1;
80
100
  updateNode(nodeId, { cycles: meta.cycles });
81
- // Decide whether to wake the saved pi conversation or start fresh. Prefer the
82
- // absolute session-file path (cwd-immune); fall back to the bare id.
101
+ // Decide whether to wake the saved pi conversation or start fresh. resumeArgs
102
+ // resumes ONLY by the absolute session-file path (cwd-immune) and ONLY when
103
+ // that .jsonl actually exists; there is no bare-id fallback (the broker
104
+ // preflight rejects a bare `--session`). Anything else is a fresh launch.
83
105
  const resume = resumeArgs(meta, opts.resume);
84
- const resuming = resume.resumeSessionPath !== undefined || resume.resumeSessionId !== undefined;
106
+ const resuming = resume.resumeSessionPath !== undefined;
107
+ // A fresh (non-resuming) launch starts a NEW pi session — the old session
108
+ // identity is dead. Clear it from meta NOW, before launch, so the recorded
109
+ // state matches what we're about to do. This is load-bearing for boot-failure
110
+ // classification: if this fresh broker dies BEFORE session_start (recording
111
+ // no new pid and no new session), the daemon's pid-null branch keys on
112
+ // pi_session_id — a leftover stale id would be misread as a "stranded
113
+ // relaunch" and retried forever instead of surfaced via transition('crash') +
114
+ // surfaceBootFailure. Clearing it makes the failure show as pid=NULL +
115
+ // session=NULL → boot failure, the correct terminal outcome.
116
+ if (!resuming && (meta.pi_session_id != null || meta.pi_session_file != null)) {
117
+ updateNode(nodeId, { pi_session_id: null, pi_session_file: null });
118
+ meta.pi_session_id = null;
119
+ meta.pi_session_file = null;
120
+ }
85
121
  // A fresh revive (no resume) gets a kickoff prompt so it re-reads its roadmap
86
122
  // and continues; resuming a saved conversation needs none. drainBearings is the
87
123
  // one-shot consuming step (yield note + feed cursor + persona ack); the builder
@@ -7,7 +7,7 @@ export interface BootRootOpts {
7
7
  /** Optional starter prompt (bare `crtr` requires none). */
8
8
  prompt?: string;
9
9
  }
10
- /** Create the front-door root: launch its broker engine, then exec `crtr attach`
10
+ /** Create the front-door root: launch its broker engine, then exec `crtr surface attach`
11
11
  * inline so THIS terminal becomes the broker's controller-viewer. Does not
12
12
  * return — it process.exit()s when the inline attach exits (detach leaves the
13
13
  * resident broker running, to be reconnected later). */
@@ -3,7 +3,7 @@
3
3
  // (resolve), launch (pi argv), and tmux (placement).
4
4
  //
5
5
  // bootRoot — the user-opened front door (bare `crtr`). Resident; launches the
6
- // root's broker engine, then execs `crtr attach` inline so THIS
6
+ // root's broker engine, then execs `crtr surface attach` inline so THIS
7
7
  // terminal becomes the broker's controller-viewer.
8
8
  // spawnChild — a node spawned by a live node (`crtr node new`). A managed,
9
9
  // terminal background worker by default; with `root`, an
@@ -42,12 +42,12 @@ function launchBrokerOrCrash(nodeId, inv, opts) {
42
42
  throw new Error(`[broker] refusing to launch ${nodeId}: ${error.message}`);
43
43
  }
44
44
  }
45
- /** Create the front-door root: launch its broker engine, then exec `crtr attach`
45
+ /** Create the front-door root: launch its broker engine, then exec `crtr surface attach`
46
46
  * inline so THIS terminal becomes the broker's controller-viewer. Does not
47
47
  * return — it process.exit()s when the inline attach exits (detach leaves the
48
48
  * resident broker running, to be reconnected later). */
49
49
  export async function bootRoot(opts) {
50
- // crtr is tmux-only: the front door execs `crtr attach` inline in THIS pane to
50
+ // crtr is tmux-only: the front door execs `crtr surface attach` inline in THIS pane to
51
51
  // become the root's controller-viewer, so there must be a tmux pane to anchor
52
52
  // on. Outside tmux there is no viewer surface — throw with a friendly message
53
53
  // rather than boot a root nobody can see.
@@ -101,7 +101,7 @@ export async function bootRoot(opts) {
101
101
  // pane lives in the focuses table (below).
102
102
  const here = currentTmux();
103
103
  // The FOREGROUND front-door terminal is the root's one viewer: record its pane
104
- // as the node's viewer focus row so focus/nav can find it. The `crtr attach`
104
+ // as the node's viewer focus row so focus/nav can find it. The `crtr surface attach`
105
105
  // exec below makes the terminal a controller-viewer of the broker; detaching
106
106
  // leaves the resident broker running.
107
107
  if (here !== null) {
@@ -113,7 +113,7 @@ export async function bootRoot(opts) {
113
113
  const inv = buildPiArgv(meta, { prompt: opts.prompt });
114
114
  // Broker is the only host: the root runs as a detached broker engine (so its
115
115
  // first refresh/revive doesn't strand this terminal — the daemon revives the
116
- // broker and the viewer reconnects), and THIS terminal execs `crtr attach`
116
+ // broker and the viewer reconnects), and THIS terminal execs `crtr surface attach`
117
117
  // inline to become its controller-viewer. The host sets CRTR_FRONT_DOOR.
118
118
  inv.env = { ...inv.env, CRTR_SUBTREE: rootOfSpine(meta.node_id) };
119
119
  const placed = launchBrokerOrCrash(meta.node_id, inv, {
@@ -140,7 +140,7 @@ export async function bootRoot(opts) {
140
140
  throw new Error(`the front-door root broker ${meta.node_id} never bound its view socket — cannot attach.`);
141
141
  }
142
142
  const attachEnv = { ...process.env, ...viewerSplitEnv() };
143
- const r = spawnSync('crtr', ['attach', 'to', meta.node_id], { stdio: 'inherit', env: attachEnv });
143
+ const r = spawnSync('crtr', ['surface', 'attach', 'to', meta.node_id], { stdio: 'inherit', env: attachEnv });
144
144
  process.exit(r.status ?? 0);
145
145
  }
146
146
  /** pi's sessions root, VENDORED from pi `config.getSessionsDir()` (= `<agentDir>/
@@ -314,7 +314,7 @@ export async function spawnChild(opts) {
314
314
  inv.env = { ...inv.env, CRTR_SUBTREE: rootOfSpine(meta.node_id) };
315
315
  // Broker is the only host: launch the detached broker ENGINE. A managed child
316
316
  // gets NO viewer — spawning it returns once the engine is launched and a human
317
- // opens a viewer on demand via `crtr node focus` / `crtr attach`. A --root gets
317
+ // opens a viewer on demand via `crtr node focus` / surface attach. A --root gets
318
318
  // one foreground viewer below.
319
319
  const placed = launchBrokerOrCrash(meta.node_id, inv, {
320
320
  cwd: meta.cwd,
@@ -16,7 +16,7 @@
16
16
  // Also fine.
17
17
  // • otherwise → a TERMINAL node with nothing live to wait for and no
18
18
  // final pushed. Re-prompt it to finish or escalate.
19
- import { hasActiveLiveSubscription, hasPendingSelfWake, getNode } from '../canvas/index.js';
19
+ import { hasActiveLiveSubscription, hasPendingSelfTrigger, getNode } from '../canvas/index.js';
20
20
  export const STALL_REPROMPT = "You've stopped but you're not waiting on anyone and haven't finished. " +
21
21
  'Run `crtr push final "<result>"` if the work is done, or `crtr human ask` if you are blocked or need the user.';
22
22
  /** Decide what to do when a node stops. Pure given the canvas + this turn's
@@ -40,10 +40,10 @@ export function evaluateStop(nodeId, signals) {
40
40
  if (node !== null && node.lifecycle === 'resident') {
41
41
  return { action: 'allow', reason: 'dormant' };
42
42
  }
43
- // A terminal node with a pending self-scheduled wakeup is legitimately
44
- // waiting on the clock: the daemon's wakeup sweep resumes it when the wake
45
- // fires, so it should idle-release rather than busy-wait holding pi/window.
46
- if (hasPendingSelfWake(nodeId))
43
+ // A terminal node with a pending self-scheduled trigger is legitimately
44
+ // waiting on the clock: the daemon's trigger sweep resumes it when the
45
+ // trigger fires, so it should idle-release rather than busy-wait holding pi/window.
46
+ if (hasPendingSelfTrigger(nodeId))
47
47
  return { action: 'allow', reason: 'scheduled' };
48
48
  // A terminal node holding something live to wake it is legitimately awaiting.
49
49
  if (hasActiveLiveSubscription(nodeId))
@@ -17,7 +17,7 @@
17
17
  // door (which never otherwise loads pi). We only READ the process-global symbol;
18
18
  // any process that needs styling (the attach viewer, a node's broker) has already
19
19
  // called `initTheme()` and populated it. Where the symbol is absent (the front
20
- // door, before it execs into the themed `crtr attach`), the tmux helpers return
20
+ // door, before it execs into the themed `crtr surface attach`), the tmux helpers return
21
21
  // no style args and the chrome stays at its default — the viewer re-themes it.
22
22
  const THEME_SYMBOL = Symbol.for('@earendil-works/pi-coding-agent:theme');
23
23
  /** The live pi Theme if a process has already run `initTheme()`, else undefined.
@@ -120,7 +120,7 @@ export declare function paneLocation(pane: string): {
120
120
  export declare function paneExists(pane: string): boolean;
121
121
  /** Does this pane exist AND have its command still RUNNING (`#{pane_dead}` = 0)?
122
122
  * Distinguishes a pane genuinely hosting a live process from a remain-on-exit
123
- * corpse frozen after exit (`pane_dead` = 1). Node viewer panes run `crtr attach`
123
+ * corpse frozen after exit (`pane_dead` = 1). Node viewer panes run `crtr surface attach`
124
124
  * as the pane command, so pane-running ⟹ a live viewer occupies it. */
125
125
  export declare function paneRunning(pane: string): boolean;
126
126
  /** Every live pane id on the server (`list-panes -a`), as a Set for membership
@@ -247,7 +247,7 @@ export function paneExists(pane) {
247
247
  }
248
248
  /** Does this pane exist AND have its command still RUNNING (`#{pane_dead}` = 0)?
249
249
  * Distinguishes a pane genuinely hosting a live process from a remain-on-exit
250
- * corpse frozen after exit (`pane_dead` = 1). Node viewer panes run `crtr attach`
250
+ * corpse frozen after exit (`pane_dead` = 1). Node viewer panes run `crtr surface attach`
251
251
  * as the pane command, so pane-running ⟹ a live viewer occupies it. */
252
252
  export function paneRunning(pane) {
253
253
  const r = tmux(['display-message', '-p', '-t', pane, '#{pane_id}\t#{pane_dead}']);
@@ -501,7 +501,7 @@ export function installNavBindings() {
501
501
  // is claimed, and bare Alt pairs are a minefield in real configs (e.g. Alt+,/.
502
502
  // and Alt+]/.[ commonly bound to window/pane nav). The bracket lives in the
503
503
  // private table, so it also sidesteps the M-[ vs CSI-introducer ambiguity that
504
- // dogs installNavBindings' Alt+[. Each key shells `crtr view cycle`, passing the
504
+ // dogs installNavBindings' Alt+[. Each key shells surface-view cycle, passing the
505
505
  // active pane; cycle reads the pane's @crtr_view tag and respawns it on the
506
506
  // next/prev view. Output discarded so the keypress never pops a results view.
507
507
  // Installed at root boot alongside the node nav + Alt+C menu.
@@ -523,11 +523,11 @@ export function installViewNavBindings() {
523
523
  ]).ok;
524
524
  const next = tmux([
525
525
  'bind-key', '-T', 'crtr-view', ']', 'run-shell',
526
- `crtr view cycle --dir next --pane '#{pane_id}' >/dev/null 2>&1`,
526
+ `crtr surface view cycle --dir next --pane '#{pane_id}' >/dev/null 2>&1`,
527
527
  ]).ok;
528
528
  const prev = tmux([
529
529
  'bind-key', '-T', 'crtr-view', '[', 'run-shell',
530
- `crtr view cycle --dir prev --pane '#{pane_id}' >/dev/null 2>&1`,
530
+ `crtr surface view cycle --dir prev --pane '#{pane_id}' >/dev/null 2>&1`,
531
531
  ]).ok;
532
532
  return enter && next && prev;
533
533
  }
@@ -1,9 +1,18 @@
1
1
  import type { InstalledPlugin, Scope } from '../types.js';
2
2
  export declare function builtinViewsRoot(): string;
3
3
  export declare function builtinMemoryRoot(): string;
4
+ export declare function builtinPiPackagesDir(): string;
5
+ export declare function builtinPiPackageDir(name: string): string;
4
6
  export declare function userScopeRoot(): string;
5
7
  export declare function findProjectScopeRoot(startDir?: string): string | null;
8
+ /** Every project scope root visible from `startDir`, nearest first. Each
9
+ * ancestor directory with a `.crouter/` contributes memory/preferences to the
10
+ * current workspace; the nearest root still wins for writes and duplicate doc
11
+ * names. The user-global `~/.crouter/` is excluded because it is the separate
12
+ * user scope, not a project ancestor. */
13
+ export declare function findProjectScopeRoots(startDir?: string): string[];
6
14
  export declare function projectScopeRoot(startDir?: string): string | null;
15
+ export declare function projectScopeRoots(startDir?: string): string[];
7
16
  export declare function scopeRoot(scope: Scope): string | null;
8
17
  export declare function requireScopeRoot(scope: Scope): string;
9
18
  export declare function ensureProjectScopeRoot(startDir?: string): string;
@@ -24,38 +24,60 @@ export function builtinMemoryRoot() {
24
24
  const pkgDir = dirname(coreDir); // src/ or dist/
25
25
  return join(pkgDir, 'builtin-memory');
26
26
  }
27
+ export function builtinPiPackagesDir() {
28
+ const thisFile = fileURLToPath(import.meta.url);
29
+ const coreDir = dirname(thisFile);
30
+ const pkgDir = dirname(coreDir); // src/ or dist/
31
+ return join(pkgDir, 'builtin-pi-packages');
32
+ }
33
+ export function builtinPiPackageDir(name) {
34
+ return join(builtinPiPackagesDir(), name);
35
+ }
27
36
  export function userScopeRoot() {
28
37
  return join(homedir(), CRTR_DIR_NAME);
29
38
  }
39
+ function isProjectScopeDir(candidate, userRoot) {
40
+ if (candidate === userRoot || !existsSync(candidate))
41
+ return false;
42
+ try {
43
+ return statSync(candidate).isDirectory();
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
30
49
  export function findProjectScopeRoot(startDir = process.cwd()) {
31
50
  if (cachedProjectRoot !== undefined)
32
51
  return cachedProjectRoot;
52
+ const roots = findProjectScopeRoots(startDir);
53
+ cachedProjectRoot = roots[0] ?? null;
54
+ return cachedProjectRoot;
55
+ }
56
+ /** Every project scope root visible from `startDir`, nearest first. Each
57
+ * ancestor directory with a `.crouter/` contributes memory/preferences to the
58
+ * current workspace; the nearest root still wins for writes and duplicate doc
59
+ * names. The user-global `~/.crouter/` is excluded because it is the separate
60
+ * user scope, not a project ancestor. */
61
+ export function findProjectScopeRoots(startDir = process.cwd()) {
62
+ const roots = [];
33
63
  const userRoot = userScopeRoot();
34
64
  let dir = resolve(startDir);
35
65
  while (true) {
36
66
  const candidate = join(dir, CRTR_DIR_NAME);
37
- if (candidate !== userRoot && existsSync(candidate)) {
38
- try {
39
- if (statSync(candidate).isDirectory()) {
40
- cachedProjectRoot = candidate;
41
- return candidate;
42
- }
43
- }
44
- catch {
45
- /* fall through */
46
- }
47
- }
67
+ if (isProjectScopeDir(candidate, userRoot))
68
+ roots.push(candidate);
48
69
  const parent = dirname(dir);
49
- if (parent === dir) {
50
- cachedProjectRoot = null;
51
- return null;
52
- }
70
+ if (parent === dir)
71
+ return roots;
53
72
  dir = parent;
54
73
  }
55
74
  }
56
75
  export function projectScopeRoot(startDir) {
57
76
  return findProjectScopeRoot(startDir);
58
77
  }
78
+ export function projectScopeRoots(startDir) {
79
+ return findProjectScopeRoots(startDir);
80
+ }
59
81
  export function scopeRoot(scope) {
60
82
  // The builtin scope has no scope-root dir: its only content is memory
61
83
  // (builtinMemoryRoot) and views (builtinViewsRoot), both hard special cases.
@@ -7,10 +7,12 @@
7
7
  // surface (design §4/§6; Stream A native rules):
8
8
  //
9
9
  // • POSITIONAL — walk the read file's ancestor dirs; any doc living in an
10
- // ancestor's `.crouter/memory/` surfaces (a doc surfaces when a file
11
- // beside/under its own scope dir is read), UNLESS it carries an explicit
12
- // read-trigger (see D5 below). This mirrors nested-context's `.claude/rules`
13
- // ancestor walk, but keyed on `.crouter/memory/`.
10
+ // ancestor PROJECT `.crouter/memory/` surfaces (a doc surfaces when a file
11
+ // beside/under its own project scope dir is read), UNLESS it carries an
12
+ // explicit read-trigger (see D5 below). This mirrors nested-context's
13
+ // `.claude/rules` ancestor walk, but keyed on `.crouter/memory/`. The
14
+ // user-global `~/.crouter/memory/` store is NOT positional; user docs only
15
+ // fire on reads through explicit `applies-to` / `read-when` triggers.
14
16
  // • applies-to GLOB — any RESOLVED substrate doc (user/project/builtin scope)
15
17
  // whose `appliesTo` glob matches the read file path surfaces, regardless of
16
18
  // where the read file sits relative to the doc.
@@ -35,8 +37,8 @@
35
37
  // parse → gatePasses(doc, assembleNodeSubject(nodeId)) → render
36
38
  // (content → body, preview → previewLine, name → bare tag, none → skip).
37
39
  // The result is the faithful envelope (verdict n1):
38
- // <auto-loaded-context file="…">
39
- // <doc kind="…" name="…" src="…" triggered-by="…">…body/preview…</doc>
40
+ // <auto-loaded-context>
41
+ // <memory kind="…" name="…" src="…">…body/preview…</memory>
40
42
  // </auto-loaded-context>
41
43
  // Returns '' when nothing surfaces.
42
44
  //
@@ -141,27 +143,28 @@ function safeWalkMd(dir) {
141
143
  function hasExplicitTrigger(doc) {
142
144
  return (doc.appliesTo !== undefined && doc.appliesTo.length > 0) || doc.readWhen !== undefined;
143
145
  }
144
- /** POSITIONAL trigger: every substrate doc in an ancestor dir's
146
+ /** POSITIONAL trigger: every substrate doc in an ancestor PROJECT dir's
145
147
  * `.crouter/memory/`, walking from the read file up to $HOME (or the
146
- * filesystem root for a read outside $HOME), skipping junk ancestors. */
148
+ * filesystem root for a read outside $HOME), skipping junk ancestors. The
149
+ * user-global `~/.crouter/memory/` store is deliberately skipped: otherwise
150
+ * every file read under $HOME would surface unrelated user-wide preferences. */
147
151
  function positionalCandidates(absReadFile) {
148
152
  const out = [];
149
153
  const seenDocPaths = new Set();
150
- const home = homedir();
154
+ const home = realpathOrSelf(homedir());
151
155
  const fsRoot = parse(absReadFile).root;
152
156
  let dir = dirname(absReadFile);
153
157
  let depth = 0;
154
158
  while (true) {
155
- if (!isJunkAncestor(dir)) {
159
+ if (dir !== home && !isJunkAncestor(dir)) {
156
160
  const memDir = join(dir, CRTR_DIR_NAME, 'memory');
157
161
  if (pathExists(memDir)) {
158
- const scope = dir === home ? 'user' : 'project';
159
162
  for (const file of safeWalkMd(memDir)) {
160
163
  const real = realpathOrSelf(file);
161
164
  if (seenDocPaths.has(real))
162
165
  continue;
163
166
  seenDocPaths.add(real);
164
- const doc = loadPositionalDoc(file, memDir, scope);
167
+ const doc = loadPositionalDoc(file, memDir, 'project');
165
168
  // D5: a doc with an explicit read-trigger (applies-to/read-when) does
166
169
  // NOT fire positionally — it surfaces only via that trigger.
167
170
  if (doc && !hasExplicitTrigger(doc))
@@ -276,10 +279,10 @@ function readWhenCandidates(readFileFm, taken) {
276
279
  // ---------------------------------------------------------------------------
277
280
  // Per-doc envelope render.
278
281
  // ---------------------------------------------------------------------------
279
- /** One doc as a `<doc …>` element at its fileReadVisibility rung, or null when
280
- * that rung is `none`. `content` → full body; `preview` → the routing line;
281
- * `name` → a bare self-closed tag (the `name=` attribute IS the surface). */
282
- function renderDocEnvelope(doc, absReadFile) {
282
+ /** One memory as a `<memory …>` element at its fileReadVisibility rung, or null
283
+ * when that rung is `none`. `content` → full body; `preview` → the routing
284
+ * line; `name` → a bare self-closed tag (the `name=` attribute IS the surface). */
285
+ function renderDocEnvelope(doc) {
283
286
  const rung = doc.fileReadVisibility;
284
287
  if (rung === 'none')
285
288
  return null;
@@ -289,9 +292,8 @@ function renderDocEnvelope(doc, absReadFile) {
289
292
  else if (rung === 'preview')
290
293
  body = previewLine(doc);
291
294
  // 'name' → body stays '' (the tag's name attribute is the whole surface).
292
- const attrs = `kind="${attr(doc.kind)}" name="${attr(doc.name)}" ` +
293
- `src="${attr(disp(doc.path))}" triggered-by="${attr(disp(absReadFile))}"`;
294
- return body === '' ? `<doc ${attrs} />` : `<doc ${attrs}>\n${body}\n</doc>`;
295
+ const attrs = `kind="${attr(doc.kind)}" name="${attr(doc.name)}" src="${attr(disp(doc.path))}"`;
296
+ return body === '' ? `<memory ${attrs} />` : `<memory ${attrs}>\n${body}\n</memory>`;
295
297
  }
296
298
  // ---------------------------------------------------------------------------
297
299
  // Public entry point.
@@ -366,7 +368,7 @@ export function renderOnReadDocs(nodeId, readFilePath, seen = new Set()) {
366
368
  const doc = rung === c.doc.fileReadVisibility && displayName(c.doc.name) === c.doc.name
367
369
  ? c.doc
368
370
  : { ...c.doc, fileReadVisibility: rung, name: displayName(c.doc.name) };
369
- block = renderDocEnvelope(doc, absReadFile);
371
+ block = renderDocEnvelope(doc);
370
372
  }
371
373
  catch {
372
374
  continue; // a single bad doc never breaks the read
@@ -378,5 +380,5 @@ export function renderOnReadDocs(nodeId, readFilePath, seen = new Set()) {
378
380
  }
379
381
  if (rendered.length === 0)
380
382
  return '';
381
- return `<auto-loaded-context file="${attr(disp(absReadFile))}">\n${rendered.join('\n')}\n</auto-loaded-context>`;
383
+ return `<auto-loaded-context>\n${rendered.join('\n')}\n</auto-loaded-context>`;
382
384
  }
@@ -285,9 +285,9 @@ const PREFERENCES_INTRO = 'Preferences are how the user wants you to behave —
285
285
  READ_LEGEND.replace('%s', 'preference');
286
286
  const PREFERENCES_OUTRO = 'If the user corrects you in a way that contradicts a preference, update the preference.';
287
287
  const KNOWLEDGE_INTRO = 'Knowledge documents are what you consult — playbooks and techniques for how to do things, and ' +
288
- 'references on the user, projects, and this node. They are aggregated from your three memory ' +
289
- 'scopes: user-global (`~/.crouter/memory/`), project (`<project-root>/.crouter/memory/`), and ' +
290
- "node-local (this node's `context/memory/`). To read one, run `crtr memory read <name>`. " +
288
+ 'references on the user, projects, and this node. They are aggregated from your memory stores: ' +
289
+ 'user-global (`~/.crouter/memory/`), every ancestor project store (`<dir>/.crouter/memory/`) ' +
290
+ "from the cwd upward, and node-local (this node's `context/memory/`). To read one, run `crtr memory read <name>`. " +
291
291
  'Each doc exists to prevent a specific mistake you would make without it, so when your task ' +
292
292
  'matches one — by its name or its `# read when:` line — read it before you act; consulting it ' +
293
293
  'only after the work is done forfeits the entire reason it exists. ' +
@@ -161,7 +161,7 @@ export function requireTui(r) {
161
161
  throw new InputError({
162
162
  error: 'view_web_only',
163
163
  message: `'${r.id}' is web-only — it ships no tui.mjs presenter`,
164
- next: `Run \`crtr view serve ${r.id}\` to open it in the browser.`,
164
+ next: 'Open it in the browser through the surface web server.',
165
165
  });
166
166
  }
167
167
  }
@@ -171,7 +171,7 @@ export function requireWeb(r) {
171
171
  throw new InputError({
172
172
  error: 'view_tui_only',
173
173
  message: `'${r.id}' is tui-only — it ships no web.jsx presenter`,
174
- next: `Run \`crtr view run ${r.id}\` to open it in a tmux pane.`,
174
+ next: 'Open it in a tmux pane with the surface view run leaf.',
175
175
  });
176
176
  }
177
177
  }
@@ -67,9 +67,9 @@ export declare function parseCadence(every: string, opts: ParseOpts): CadenceRes
67
67
  * - {"cron":"0 9 * * *","tz":"America/…"} -> ``cron `0 9 * * *` (America/…)``
68
68
  * - null / undefined / unparseable -> `none`
69
69
  *
70
- * The ONE cadence-display helper, shared by the `node wake` CLI surface
70
+ * The ONE cadence-display helper, shared by the `node triggers` CLI surface
71
71
  * (list/guidance) and the <crtr-wake> wake-provenance block (bearings.ts), so
72
- * the cadence an agent reads in its wake block matches `crtr node wake list`
72
+ * the cadence an agent reads in its wake block matches `crtr node triggers`
73
73
  * exactly. Cadence only — never an instance count.
74
74
  */
75
75
  export declare function cadenceDisplay(recur: string | null | undefined): string;
package/dist/core/wake.js CHANGED
@@ -1,9 +1,9 @@
1
- // Time grammar + recurrence evaluation for scheduled wakeups.
1
+ // Time grammar + recurrence evaluation for scheduled triggers.
2
2
  //
3
- // This is the ONE place that owns wakeup time logic. Both the CLI surface
4
- // (`node wake at|until|spawn`) and the daemon's firing pass import
5
- // from here, so there is no duplicated cron usage and no surface<->daemon
6
- // inverted dependency:
3
+ // This is the ONE place that owns trigger time logic. Both the CLI surface
4
+ // (`node new --at/--every/--when`, `node msg --at/--every/--when`) and the
5
+ // daemon's firing pass import from here, so there is no duplicated cron usage
6
+ // and no surface<->daemon inverted dependency:
7
7
  // - parseWhen / parseCadence — arm-time grammar (surface, T7)
8
8
  // - nextSlotAfter — per-tick advance / coalescing (daemon, T4)
9
9
  //
@@ -250,9 +250,9 @@ export function parseCadence(every, opts) {
250
250
  * - {"cron":"0 9 * * *","tz":"America/…"} -> ``cron `0 9 * * *` (America/…)``
251
251
  * - null / undefined / unparseable -> `none`
252
252
  *
253
- * The ONE cadence-display helper, shared by the `node wake` CLI surface
253
+ * The ONE cadence-display helper, shared by the `node triggers` CLI surface
254
254
  * (list/guidance) and the <crtr-wake> wake-provenance block (bearings.ts), so
255
- * the cadence an agent reads in its wake block matches `crtr node wake list`
255
+ * the cadence an agent reads in its wake block matches `crtr node triggers`
256
256
  * exactly. Cadence only — never an instance count.
257
257
  */
258
258
  export function cadenceDisplay(recur) {