@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
@@ -0,0 +1,66 @@
1
+ import type { GuestNodeId, MachineId, TenantId } from '../../core/hearth/types.js';
2
+ export type HearthProvider = 'blaxel';
3
+ export type HomeId = string;
4
+ export type UserId = string;
5
+ export type ProviderSandboxId = MachineId;
6
+ export type ProviderVolumeId = string;
7
+ export type PreviewEndpoint = string;
8
+ export type RelayAuthRef = string;
9
+ export type HomeStatus = 'provisioning' | 'running' | 'suspended' | 'restoring' | 'terminating' | 'terminated' | 'unknown';
10
+ export type HomeHealthVerdict = 'healthy' | 'degraded' | 'unknown';
11
+ export interface Home {
12
+ home_id: HomeId;
13
+ tenant_id: TenantId;
14
+ user_id: UserId;
15
+ provider: HearthProvider;
16
+ provider_sandbox_id: ProviderSandboxId | null;
17
+ provider_volume_id: ProviderVolumeId | null;
18
+ preview_endpoint: PreviewEndpoint | null;
19
+ home_agent_target: GuestNodeId | null;
20
+ relay_auth_ref: RelayAuthRef | null;
21
+ status: HomeStatus;
22
+ template_version: string | null;
23
+ last_ready_at: string | null;
24
+ last_wake_at: string | null;
25
+ last_suspend_at: string | null;
26
+ last_wake_latency_ms: number | null;
27
+ health_verdict: HomeHealthVerdict;
28
+ created_at: string;
29
+ updated_at: string;
30
+ }
31
+ export type ResolvedHome = Home;
32
+ export interface CreateHomeInput {
33
+ home_id: HomeId;
34
+ tenant_id: TenantId;
35
+ user_id: UserId;
36
+ provider?: HearthProvider;
37
+ provider_sandbox_id?: ProviderSandboxId | null;
38
+ provider_volume_id?: ProviderVolumeId | null;
39
+ preview_endpoint?: PreviewEndpoint | null;
40
+ home_agent_target?: GuestNodeId | null;
41
+ relay_auth_ref?: RelayAuthRef | null;
42
+ status?: HomeStatus;
43
+ template_version?: string | null;
44
+ last_ready_at?: string | null;
45
+ last_wake_at?: string | null;
46
+ last_suspend_at?: string | null;
47
+ last_wake_latency_ms?: number | null;
48
+ health_verdict?: HomeHealthVerdict;
49
+ created_at?: string;
50
+ updated_at?: string;
51
+ }
52
+ export interface RefreshProviderPointersInput {
53
+ provider_sandbox_id: ProviderSandboxId | null;
54
+ preview_endpoint: PreviewEndpoint | null;
55
+ status?: HomeStatus;
56
+ template_version?: string | null;
57
+ }
58
+ export interface TouchWakeInput {
59
+ at?: string;
60
+ latency_ms?: number | null;
61
+ }
62
+ export type HomePatch = Partial<Pick<Home, 'provider_sandbox_id' | 'provider_volume_id' | 'preview_endpoint' | 'relay_auth_ref' | 'status' | 'template_version' | 'last_ready_at' | 'last_wake_at' | 'last_suspend_at' | 'last_wake_latency_ms' | 'health_verdict'>>;
63
+ export interface TenantSession {
64
+ tenant_id: TenantId;
65
+ user_id: UserId;
66
+ }
@@ -0,0 +1,80 @@
1
+ import { type HomeBackend } from '../../core/hearth/provider.js';
2
+ import type { M0Config } from '../../core/hearth/types.js';
3
+ import { type ControlPlaneConfig } from './config.js';
4
+ import { getHomeById, refreshProviderPointers, setHomeStatus, touchReady, touchWake } from './registry.js';
5
+ import { resolveSecret } from './secrets.js';
6
+ import type { HomeId, HomeStatus } from './types.js';
7
+ export interface WakeResult {
8
+ preview_endpoint: string;
9
+ relayToken: string;
10
+ }
11
+ /** Normalize a provider-observed runtime status into the CP `HomeStatus`
12
+ * vocabulary before it is ever persisted (Q3 / P3.4 review Minor finding):
13
+ * the provider's `MachineState` is broad (and may include future
14
+ * pause/suspend/standby spellings the SDK doesn't expose yet); CP's
15
+ * `HomeStatus` enum does not have a `'paused'` member. Anything
16
+ * pause/suspend/standby-shaped collapses to `'suspended'`; an exact
17
+ * `'running'` passes through; everything else (provisioning, terminating,
18
+ * terminated, restoring, unrecognized) becomes `'unknown'` rather than
19
+ * guessing a more specific CP status from a provider-specific string. */
20
+ export declare function normalizeProviderStatus(providerStatus: string | null | undefined): HomeStatus;
21
+ /** One bounded attempt: open a WebSocket to `/node/<target>` carrying the
22
+ * relay token and require the upgrade to both succeed AND survive a short
23
+ * settle window (or yield a first frame) within `attemptTimeoutMs` — proof
24
+ * the in-guest web server answered AND relayed to a live broker `view.sock`
25
+ * (R-WAKE-2), not just that the SPA shell route is up. Every branch
26
+ * (success, handshake rejection, error, premature close, attempt timeout)
27
+ * closes the socket and resolves exactly once — a success closes gracefully
28
+ * (code 1000) so the guest relay does not record a false fault, anything
29
+ * else terminates it. */
30
+ declare function probeNodeOnce(previewEndpoint: string, target: string, relayToken: string, attemptTimeoutMs: number): Promise<boolean>;
31
+ /** Retry the single-shot probe until it confirms `/node/<target>` is serving
32
+ * or `windowMs` elapses. Always runs at least one attempt (R-WAKE-1: "a
33
+ * single failed probe does not abort"). Every timer this loop starts
34
+ * (the per-attempt abort timeout, the inter-attempt backoff) is cleared/
35
+ * resolved before the loop returns — nothing is left armed. */
36
+ declare function probeNodeReady(previewEndpoint: string, target: string, relayToken: string, windowMs: number): Promise<boolean>;
37
+ /** Indirection seam so a smoke/test script can swap any step (the provider
38
+ * backend, the registry setters, the secret resolver, the probe itself, the
39
+ * clock) without touching a real DB/provider/filesystem. Production code
40
+ * never reassigns these; only ad hoc verification scripts do. */
41
+ export declare const wakeInternals: {
42
+ getHomeById: typeof getHomeById;
43
+ refreshProviderPointers: typeof refreshProviderPointers;
44
+ setHomeStatus: typeof setHomeStatus;
45
+ touchWake: typeof touchWake;
46
+ touchReady: typeof touchReady;
47
+ resolveSecret: typeof resolveSecret;
48
+ getHomeBackend: (config: M0Config) => HomeBackend;
49
+ loadM0Config: () => M0Config;
50
+ loadControlPlaneConfig: () => ControlPlaneConfig;
51
+ probeNodeOnce: typeof probeNodeOnce;
52
+ probeNodeReady: typeof probeNodeReady;
53
+ now: () => number;
54
+ };
55
+ /** Cheap, non-probing fast path: return a still-fresh warm-verdict cache hit
56
+ * for `home_id`, or `null` if there is none (expired or never confirmed).
57
+ * Never reads the registry and never calls the provider — callers fall back
58
+ * to `ensureAwake` on a `null` (Q1: "no call to provider"). */
59
+ export declare function resolveRunning(home_id: HomeId): WakeResult | null;
60
+ /** Drop the cached warm verdict for a home (e.g. an upstream relay forward
61
+ * failed) so the next `ensureAwake`/`resolveRunning` re-checks instead of
62
+ * trusting a stale "ready" answer. */
63
+ export declare function invalidateWarmVerdict(home_id: HomeId): void;
64
+ /** Clear all warm verdicts and in-flight wake coalescing. Test/smoke-script
65
+ * hygiene only — production never needs this (one CP process, S2). */
66
+ export declare function resetWakeCacheForTests(): void;
67
+ /** Bring a home up and ready, returning the route to relay to once it is.
68
+ * Reads the registry, resolves the relay token, calls the provider
69
+ * wake/resume seam, ready-probes `/node/<home_agent_target>`, refreshes
70
+ * provider pointers on a recreate, records wake/ready timing, and returns
71
+ * `{ preview_endpoint, relayToken }`. Throws on a ready-probe timeout
72
+ * (wake-failure UX is deferred — gap note 2 — a throw is the accepted
73
+ * cutover behavior).
74
+ *
75
+ * A fresh warm-verdict cache hit short-circuits without re-entering this
76
+ * pipeline at all. Otherwise concurrent callers for the SAME `home_id`
77
+ * coalesce onto one in-flight wake (Q1) instead of each driving their own
78
+ * provider call. */
79
+ export declare function ensureAwake(home_id: HomeId): Promise<WakeResult>;
80
+ export {};
@@ -0,0 +1,312 @@
1
+ // control-plane/wake.ts — CP wake orchestration (P4.2 / part-plan T3.1).
2
+ //
3
+ // Generalizes M0 `wake-proxy/home.ts` (`ensureAwake`/`resolveRunningHome`/
4
+ // `probeRelayServing`) onto the CP `home` registry, with one deliberate
5
+ // behavior drop: NO idle-pause machinery (S3 — the provider owns
6
+ // idle->suspend; M0's `scheduleIdlePause`/`pauseNow` timer chain is not
7
+ // reproduced here, by design, not oversight).
8
+ //
9
+ // Pipeline (R-WAKE-1): read the `home` row -> resolve the relay token handle
10
+ // -> call the provider wake/resume seam (`HomeBackend.wake`, owned by the
11
+ // home/provider slice, IP-1) -> ready-probe the in-guest web server on
12
+ // `/node/<home_agent_target>` over a short retried window, carrying the
13
+ // relay token -> if the provider returned a new sandbox/preview (a
14
+ // recreate), persist the refreshed pointers; `home_agent_target` is NEVER
15
+ // part of that patch (R-WAKE-6 — `refreshProviderPointers` doesn't accept it)
16
+ // -> record wake/ready timing -> return the route. Readiness here means the
17
+ // guest web server answers `/node/<target>` AND relays to a live broker
18
+ // `view.sock` (R-WAKE-2 — not "the SPA shell renders"). `src/clients/web/
19
+ // server.ts` only proves that second half on a WS upgrade: `bridgeConnection`
20
+ // opens `view.sock` AFTER the 101 response and closes the socket with 1011
21
+ // the instant that fails (ECONNREFUSED/ENOENT — "no running broker"), so an
22
+ // HTTP GET 200 on `/node/<target>` (the SPA static/fallback route) proves
23
+ // only that the guest web server is up, not that the broker is. The probe
24
+ // therefore opens a real WebSocket to `/node/<target>` and requires a
25
+ // successful upgrade that SURVIVES a short settle window (or yields a first
26
+ // frame) before declaring readiness.
27
+ //
28
+ // All timers used during a probe retry window are cleared before the
29
+ // function that started them returns — there is no `setTimeout`/`setInterval`
30
+ // left armed once `ensureAwake`/`resolveRunning` resolve (S3 regression bar).
31
+ import { setTimeout as delay } from 'node:timers/promises';
32
+ import { WebSocket } from 'ws';
33
+ import { general } from '../../core/errors.js';
34
+ import { loadM0Config } from '../../core/hearth/config.js';
35
+ import { getHomeBackend } from '../../core/hearth/provider.js';
36
+ import { loadControlPlaneConfig } from './config.js';
37
+ import { getHomeById, refreshProviderPointers, setHomeStatus, touchReady, touchWake } from './registry.js';
38
+ import { resolveSecret } from './secrets.js';
39
+ // Individual probe attempt timeout — bounded short so a dead route fails
40
+ // fast and the retry loop gets multiple attempts inside the overall window,
41
+ // rather than one attempt eating the whole window (mirrors M0's
42
+ // `READY_PROBE_TIMEOUT_MS`).
43
+ const READY_PROBE_ATTEMPT_TIMEOUT_MS = 1_500;
44
+ // Backoff between probe attempts (Q1: "500ms backoff between attempts").
45
+ const READY_PROBE_BACKOFF_MS = 500;
46
+ // How long a confirmed-ready verdict is trusted before `resolveRunning`/
47
+ // `ensureAwake` re-checks instead of trusting a stale answer (Q1: "10s TTL,
48
+ // in-process"). Single CP process, no distributed cache (S2).
49
+ const WARM_VERDICT_TTL_MS = 10_000;
50
+ /** Normalize a provider-observed runtime status into the CP `HomeStatus`
51
+ * vocabulary before it is ever persisted (Q3 / P3.4 review Minor finding):
52
+ * the provider's `MachineState` is broad (and may include future
53
+ * pause/suspend/standby spellings the SDK doesn't expose yet); CP's
54
+ * `HomeStatus` enum does not have a `'paused'` member. Anything
55
+ * pause/suspend/standby-shaped collapses to `'suspended'`; an exact
56
+ * `'running'` passes through; everything else (provisioning, terminating,
57
+ * terminated, restoring, unrecognized) becomes `'unknown'` rather than
58
+ * guessing a more specific CP status from a provider-specific string. */
59
+ export function normalizeProviderStatus(providerStatus) {
60
+ if (providerStatus === null || providerStatus === undefined)
61
+ return 'unknown';
62
+ const normalized = providerStatus.trim().toLowerCase();
63
+ if (normalized === 'paused' || normalized === 'suspended' || normalized === 'standby')
64
+ return 'suspended';
65
+ if (normalized === 'running')
66
+ return 'running';
67
+ return 'unknown';
68
+ }
69
+ function requireHomeField(value, field, home_id) {
70
+ if (value === null || value === undefined || (typeof value === 'string' && value.trim() === '')) {
71
+ throw general(`home ${home_id} is missing ${field} — cannot wake`, { home_id, field });
72
+ }
73
+ return value;
74
+ }
75
+ function buildDescriptor(home, relayToken) {
76
+ return {
77
+ homeId: home.home_id,
78
+ tenantId: home.tenant_id,
79
+ userId: home.user_id,
80
+ providerName: home.provider,
81
+ providerSandboxId: requireHomeField(home.provider_sandbox_id, 'provider_sandbox_id', home.home_id),
82
+ providerVolumeId: requireHomeField(home.provider_volume_id, 'provider_volume_id', home.home_id),
83
+ previewEndpoint: home.preview_endpoint,
84
+ homeAgentTarget: requireHomeField(home.home_agent_target, 'home_agent_target', home.home_id),
85
+ relayAuthRef: home.relay_auth_ref,
86
+ relayToken,
87
+ status: home.status,
88
+ templateVersion: home.template_version,
89
+ };
90
+ }
91
+ // After a successful 101 upgrade, `bridgeConnection` (server.ts) still has to
92
+ // dial the broker's `view.sock` and can close the socket (1011, "no running
93
+ // broker") the instant that dial fails. That happens fast on a local unix
94
+ // socket (ECONNREFUSED/ENOENT are immediate), so a settle window this short
95
+ // is enough to let a dead-broker close win the race against a false-positive
96
+ // `open` before the probe declares readiness.
97
+ const READY_PROBE_WS_SETTLE_MS = 300;
98
+ function wsUrlForNode(previewEndpoint, target) {
99
+ const url = new URL(`/node/${encodeURIComponent(target)}`, previewEndpoint);
100
+ url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
101
+ return url;
102
+ }
103
+ /** One bounded attempt: open a WebSocket to `/node/<target>` carrying the
104
+ * relay token and require the upgrade to both succeed AND survive a short
105
+ * settle window (or yield a first frame) within `attemptTimeoutMs` — proof
106
+ * the in-guest web server answered AND relayed to a live broker `view.sock`
107
+ * (R-WAKE-2), not just that the SPA shell route is up. Every branch
108
+ * (success, handshake rejection, error, premature close, attempt timeout)
109
+ * closes the socket and resolves exactly once — a success closes gracefully
110
+ * (code 1000) so the guest relay does not record a false fault, anything
111
+ * else terminates it. */
112
+ async function probeNodeOnce(previewEndpoint, target, relayToken, attemptTimeoutMs) {
113
+ return new Promise((resolveProbe) => {
114
+ let settled = false;
115
+ let settleTimer = null;
116
+ let ws;
117
+ try {
118
+ ws = new WebSocket(wsUrlForNode(previewEndpoint, target), {
119
+ headers: { authorization: `Bearer ${relayToken}` },
120
+ perMessageDeflate: false,
121
+ });
122
+ }
123
+ catch {
124
+ resolveProbe(false);
125
+ return;
126
+ }
127
+ const finish = (ready) => {
128
+ if (settled)
129
+ return;
130
+ settled = true;
131
+ if (settleTimer !== null)
132
+ clearTimeout(settleTimer);
133
+ clearTimeout(attemptTimer);
134
+ try {
135
+ // A confirmed-ready probe closes gracefully (code 1000) so the guest
136
+ // relay's `bridgeConnection` sees a normal browser close and does NOT
137
+ // record a false browser<->relay fault (P4.2 re-review Major). `close()`
138
+ // sends the close frame synchronously off the OPEN socket, so resolving
139
+ // right after calling it still delivers a normal close to the guest —
140
+ // the probe does not need to wait for the closing handshake to finish.
141
+ // Failure/timeout/error paths still abort hard via `terminate()`: there
142
+ // is nothing graceful to negotiate when the socket never proved ready.
143
+ if (ready) {
144
+ ws.close(1000, 'readiness probe complete');
145
+ }
146
+ else {
147
+ ws.terminate();
148
+ }
149
+ }
150
+ catch {
151
+ /* ignore */
152
+ }
153
+ resolveProbe(ready);
154
+ };
155
+ const attemptTimer = setTimeout(() => finish(false), attemptTimeoutMs);
156
+ ws.once('open', () => {
157
+ // The attempt timer (above) still bounds the total wait, so it is safe
158
+ // to always arm the full settle window here — whichever timer fires
159
+ // first wins via `finish`'s once-only guard.
160
+ settleTimer = setTimeout(() => finish(true), Math.min(READY_PROBE_WS_SETTLE_MS, attemptTimeoutMs));
161
+ });
162
+ ws.once('message', () => finish(true));
163
+ ws.once('unexpected-response', () => finish(false));
164
+ ws.once('error', () => finish(false));
165
+ ws.once('close', () => finish(false));
166
+ });
167
+ }
168
+ /** Retry the single-shot probe until it confirms `/node/<target>` is serving
169
+ * or `windowMs` elapses. Always runs at least one attempt (R-WAKE-1: "a
170
+ * single failed probe does not abort"). Every timer this loop starts
171
+ * (the per-attempt abort timeout, the inter-attempt backoff) is cleared/
172
+ * resolved before the loop returns — nothing is left armed. */
173
+ async function probeNodeReady(previewEndpoint, target, relayToken, windowMs) {
174
+ const deadline = Date.now() + Math.max(0, windowMs);
175
+ let firstAttempt = true;
176
+ for (;;) {
177
+ const remaining = deadline - Date.now();
178
+ // Past the first attempt, an already-expired budget ends the loop here
179
+ // instead of spending one more full attempt timeout (P4.2 re-review
180
+ // Minor) — only the very first attempt is unconditional (R-WAKE-1: "a
181
+ // single failed probe does not abort"/at-least-one-attempt).
182
+ if (!firstAttempt && remaining <= 0)
183
+ return false;
184
+ const attemptTimeoutMs = firstAttempt
185
+ ? Math.max(250, Math.min(READY_PROBE_ATTEMPT_TIMEOUT_MS, windowMs))
186
+ : Math.min(READY_PROBE_ATTEMPT_TIMEOUT_MS, remaining);
187
+ firstAttempt = false;
188
+ if (await wakeInternals.probeNodeOnce(previewEndpoint, target, relayToken, attemptTimeoutMs))
189
+ return true;
190
+ const remainingAfter = deadline - Date.now();
191
+ if (remainingAfter <= 0)
192
+ return false;
193
+ await delay(Math.min(READY_PROBE_BACKOFF_MS, remainingAfter));
194
+ }
195
+ }
196
+ /** Indirection seam so a smoke/test script can swap any step (the provider
197
+ * backend, the registry setters, the secret resolver, the probe itself, the
198
+ * clock) without touching a real DB/provider/filesystem. Production code
199
+ * never reassigns these; only ad hoc verification scripts do. */
200
+ export const wakeInternals = {
201
+ getHomeById,
202
+ refreshProviderPointers,
203
+ setHomeStatus,
204
+ touchWake,
205
+ touchReady,
206
+ resolveSecret,
207
+ getHomeBackend: (config) => getHomeBackend(config),
208
+ loadM0Config: () => loadM0Config(),
209
+ loadControlPlaneConfig: () => loadControlPlaneConfig(),
210
+ probeNodeOnce,
211
+ probeNodeReady,
212
+ now: () => Date.now(),
213
+ };
214
+ const warmVerdicts = new Map();
215
+ const inflightWakes = new Map();
216
+ /** Cheap, non-probing fast path: return a still-fresh warm-verdict cache hit
217
+ * for `home_id`, or `null` if there is none (expired or never confirmed).
218
+ * Never reads the registry and never calls the provider — callers fall back
219
+ * to `ensureAwake` on a `null` (Q1: "no call to provider"). */
220
+ export function resolveRunning(home_id) {
221
+ const warm = warmVerdicts.get(home_id);
222
+ if (warm === undefined)
223
+ return null;
224
+ if (wakeInternals.now() - warm.confirmedAt >= WARM_VERDICT_TTL_MS)
225
+ return null;
226
+ return warm.result;
227
+ }
228
+ /** Drop the cached warm verdict for a home (e.g. an upstream relay forward
229
+ * failed) so the next `ensureAwake`/`resolveRunning` re-checks instead of
230
+ * trusting a stale "ready" answer. */
231
+ export function invalidateWarmVerdict(home_id) {
232
+ warmVerdicts.delete(home_id);
233
+ }
234
+ /** Clear all warm verdicts and in-flight wake coalescing. Test/smoke-script
235
+ * hygiene only — production never needs this (one CP process, S2). */
236
+ export function resetWakeCacheForTests() {
237
+ warmVerdicts.clear();
238
+ inflightWakes.clear();
239
+ }
240
+ async function runEnsureAwake(home_id) {
241
+ const home = wakeInternals.getHomeById(home_id);
242
+ if (home === null)
243
+ throw general(`home not found: ${home_id}`, { home_id });
244
+ const relayAuthRef = requireHomeField(home.relay_auth_ref, 'relay_auth_ref', home_id);
245
+ const relayToken = wakeInternals.resolveSecret(relayAuthRef);
246
+ const target = requireHomeField(home.home_agent_target, 'home_agent_target', home_id);
247
+ const descriptor = buildDescriptor(home, relayToken);
248
+ const startedAt = wakeInternals.now();
249
+ const m0 = wakeInternals.loadM0Config();
250
+ const refresh = await wakeInternals.getHomeBackend(m0).wake(descriptor);
251
+ const normalizedStatus = normalizeProviderStatus(refresh.status);
252
+ const recreated = refresh.providerSandboxId !== home.provider_sandbox_id || (refresh.previewEndpoint ?? null) !== home.preview_endpoint;
253
+ let previewEndpoint;
254
+ if (recreated) {
255
+ // R-WAKE-6, non-negotiable: persist the new sandbox/preview pointers but
256
+ // never the home node target — `refreshProviderPointers`'s input shape
257
+ // has no `home_agent_target` field, so there is no way for this call to
258
+ // touch it even by accident.
259
+ const updated = wakeInternals.refreshProviderPointers(home_id, {
260
+ provider_sandbox_id: refresh.providerSandboxId,
261
+ preview_endpoint: refresh.previewEndpoint ?? null,
262
+ status: normalizedStatus,
263
+ template_version: refresh.templateVersion ?? home.template_version,
264
+ });
265
+ previewEndpoint = updated.preview_endpoint;
266
+ }
267
+ else {
268
+ wakeInternals.setHomeStatus(home_id, normalizedStatus);
269
+ previewEndpoint = home.preview_endpoint;
270
+ }
271
+ const resolvedPreviewEndpoint = requireHomeField(previewEndpoint, 'preview_endpoint', home_id);
272
+ const controlPlaneConfig = wakeInternals.loadControlPlaneConfig();
273
+ const ready = await wakeInternals.probeNodeReady(resolvedPreviewEndpoint, target, relayToken, controlPlaneConfig.readyTimeoutMs);
274
+ if (!ready) {
275
+ throw general(`guest web relay did not become ready before timeout: ${home_id}`, { home_id, previewEndpoint: resolvedPreviewEndpoint });
276
+ }
277
+ const readyAt = new Date().toISOString();
278
+ wakeInternals.touchWake(home_id, { at: new Date(startedAt).toISOString(), latency_ms: wakeInternals.now() - startedAt });
279
+ wakeInternals.touchReady(home_id, readyAt);
280
+ return { preview_endpoint: resolvedPreviewEndpoint, relayToken };
281
+ }
282
+ /** Bring a home up and ready, returning the route to relay to once it is.
283
+ * Reads the registry, resolves the relay token, calls the provider
284
+ * wake/resume seam, ready-probes `/node/<home_agent_target>`, refreshes
285
+ * provider pointers on a recreate, records wake/ready timing, and returns
286
+ * `{ preview_endpoint, relayToken }`. Throws on a ready-probe timeout
287
+ * (wake-failure UX is deferred — gap note 2 — a throw is the accepted
288
+ * cutover behavior).
289
+ *
290
+ * A fresh warm-verdict cache hit short-circuits without re-entering this
291
+ * pipeline at all. Otherwise concurrent callers for the SAME `home_id`
292
+ * coalesce onto one in-flight wake (Q1) instead of each driving their own
293
+ * provider call. */
294
+ export async function ensureAwake(home_id) {
295
+ const warm = resolveRunning(home_id);
296
+ if (warm !== null)
297
+ return warm;
298
+ const inflight = inflightWakes.get(home_id);
299
+ if (inflight !== undefined)
300
+ return inflight;
301
+ const promise = runEnsureAwake(home_id)
302
+ .then((result) => {
303
+ warmVerdicts.set(home_id, { result, confirmedAt: wakeInternals.now() });
304
+ return result;
305
+ })
306
+ .finally(() => {
307
+ if (inflightWakes.get(home_id) === promise)
308
+ inflightWakes.delete(home_id);
309
+ });
310
+ inflightWakes.set(home_id, promise);
311
+ return promise;
312
+ }
@@ -45,6 +45,31 @@ import { loadInjectedDocs, saveInjectedDocs } from '../core/substrate/injected-s
45
45
  * to reach for while reading the tools, so memory docs/preferences must sit
46
46
  * there, not far below. Mirrors crouter-help.ts. Falls back to appending if absent. */
47
47
  const TOOLS_ANCHOR = '\n\nGuidelines:';
48
+ const AUTO_CONTEXT_RE = /<auto-loaded-context(?:\s[^>]*)?>\n([\s\S]*?)\n<\/auto-loaded-context>/;
49
+ function mergeAutoLoadedContext(injected, content) {
50
+ const match = injected.match(AUTO_CONTEXT_RE);
51
+ const inner = match?.[1]?.trim();
52
+ if (!inner)
53
+ return content;
54
+ const existingText = content.map((block) => block.text ?? '').join('\n');
55
+ if (existingText.includes(inner))
56
+ return content;
57
+ const existingIdx = content.findIndex((block) => typeof block.text === 'string' && AUTO_CONTEXT_RE.test(block.text));
58
+ if (existingIdx !== -1) {
59
+ return content.map((block, idx) => {
60
+ if (idx !== existingIdx || typeof block.text !== 'string')
61
+ return block;
62
+ return {
63
+ ...block,
64
+ text: block.text.replace(AUTO_CONTEXT_RE, (_whole, current) => {
65
+ const trimmed = String(current).trim();
66
+ return `<auto-loaded-context>\n${inner}${trimmed === '' ? '' : `\n${trimmed}`}\n</auto-loaded-context>`;
67
+ }),
68
+ };
69
+ });
70
+ }
71
+ return [{ type: 'text', text: `<auto-loaded-context>\n${inner}\n</auto-loaded-context>` }, ...content];
72
+ }
48
73
  /**
49
74
  * Register the document substrate's two render hooks on `pi`.
50
75
  *
@@ -115,8 +140,9 @@ export function registerCanvasDocSubstrate(pi) {
115
140
  // A doc surfaced → renderOnReadDocs grew injectedDocs; persist the set so
116
141
  // the dedup survives a later dormancy → revive(resume).
117
142
  saveInjectedDocs(nodeId, injectedDocs);
118
- // Prepend the surfacing docs ahead of the file contents.
119
- return { content: [{ type: 'text', text: injected }, ...event.content] };
143
+ // Fold into any existing auto-loaded-context block from sibling read hooks;
144
+ // otherwise prepend one quiet block ahead of the file contents.
145
+ return { content: mergeAutoLoadedContext(injected, event.content) };
120
146
  }
121
147
  catch {
122
148
  return; // inert on error — a bug must degrade a read, never break it
@@ -473,7 +473,7 @@ export function registerCanvasNav(pi) {
473
473
  const target = cursorId ?? nodeId;
474
474
  const n = cNode(target);
475
475
  const nm = n !== null ? fullName(n) : shortId(target);
476
- pendingConfirm = { label: `kill ${nm}?`, action: () => shellCrtr(['node', 'close', '--node', target], render) };
476
+ pendingConfirm = { label: `kill ${nm}?`, action: () => shellCrtr(['node', 'lifecycle', 'close', '--node', target], render) };
477
477
  render();
478
478
  return { consume: true };
479
479
  }
@@ -1,7 +1,7 @@
1
- // Scaffold stubs for `crtr view new`. Returns the four files of a dual-target
1
+ // Scaffold stubs for surface-view authoring. Returns the four files of a dual-target
2
2
  // view directory — a portable `core.mjs` plus the TUI / web / text presenters —
3
- // that runs as-is via `crtr view run <name>` (TUI), `crtr view serve <name>`
4
- // (web), and `crtr view run <name> | cat` (static snapshot).
3
+ // that runs as-is via the surface view host (TUI/static snapshot) and the surface
4
+ // web server (browser).
5
5
  //
6
6
  // Authoring guidance lives INSIDE each stub (the comment block at the top of the
7
7
  // generated file), so a view author reads the contract right where they edit.
@@ -21,15 +21,14 @@ function coreStub(v) {
21
21
  // imports NOTHING — no \`node:*\`, no crtr. ALL state + behavior live here;
22
22
  // presenters (tui.mjs / web.jsx) are pure reads that dispatch named intents.
23
23
  //
24
- // Run it: crtr view run ${v.id} (TUI, inside tmux)
25
- // crtr view run ${v.id} | cat (static snapshot, exits 0)
26
- // crtr view serve ${v.id} (React + Tailwind web page)
24
+ // Run it through the surface view host for TUI/static snapshots, or through
25
+ // the surface web server for the React + Tailwind browser page.
27
26
  //
28
27
  // THE CONTRACT:
29
28
  // manifest { id, title, description, refreshMs? } — id MUST equal
30
29
  // this view's directory name.
31
30
  // init(opts) cheap, SYNCHRONOUS initial state — NO fetch, NO screen.
32
- // CLI flags arrive in \`opts\` (crtr view run --port/--target).
31
+ // CLI flags arrive in \`opts\` (for example port/target options).
33
32
  // sources { request, parse } READ descriptors. The host's transport
34
33
  // runs request() (exec/file/http) and hands parse() the bytes
35
34
  // — your parse is pure, runs in Node AND the browser.
@@ -119,7 +118,7 @@ function webStub(v) {
119
118
  return `// ${v.title} — web presenter: a React + Tailwind component.
120
119
  //
121
120
  // A pure function of \`state\`; DOM events call \`dispatch(intent)\`. Consumed ONLY
122
- // by \`crtr view serve\` (Vite owns JSX + Tailwind) — never Node-imported. The
121
+ // by the surface web host (Vite owns JSX + Tailwind) — never Node-imported. The
123
122
  // SAME state + intents the TUI reads; zero shared render code (an intentional fork).
124
123
 
125
124
  export default function View({ state, dispatch }) {
package/dist/types.js CHANGED
@@ -39,9 +39,9 @@ export function defaultCanvasNavConfig() {
39
39
  prefixBinds: {
40
40
  o: { kind: 'keys', keys: '/promote', desc: 'promote to orchestrator' },
41
41
  r: { kind: 'keys', keys: '/resume-node', desc: 'resume node' },
42
- d: { kind: 'crtr', run: 'node demote --pane {pane}', desc: 'demote to terminal' },
43
- D: { kind: 'crtr', run: 'node demote --pane {pane} --detach', desc: 'detach to background' },
44
- x: { kind: 'crtr', run: 'node close --pane {pane}', desc: 'close agent + subtree' },
42
+ d: { kind: 'crtr', run: 'node lifecycle demote --pane {pane}', desc: 'demote to terminal' },
43
+ D: { kind: 'crtr', run: 'node lifecycle demote --pane {pane} --detach', desc: 'detach to background' },
44
+ x: { kind: 'crtr', run: 'node lifecycle close --pane {pane}', desc: 'close agent + subtree' },
45
45
  c: { kind: 'keys', keys: '/context', desc: 'browse context dirs' },
46
46
  g: { kind: 'keys', keys: '/graph', desc: 'graph view' },
47
47
  m: { kind: 'crtr', run: 'node focus {manager}', desc: 'focus manager' },
@@ -62,7 +62,7 @@ export function defaultModelLaddersConfig() {
62
62
  anthropic: {
63
63
  ultra: 'anthropic/claude-fable-5:high',
64
64
  strong: 'anthropic/claude-opus-4-8:high',
65
- medium: 'anthropic/claude-sonnet-4-6:high',
65
+ medium: 'anthropic/claude-sonnet-5:high',
66
66
  light: 'anthropic/claude-haiku-4-5:high',
67
67
  },
68
68
  openai: {