@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,646 @@
1
+ import { truncateToVisualLines } from '@earendil-works/pi-coding-agent';
2
+ import { Box, Text, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
3
+ import { HELP_ICON, iconForPath, suppressOutputForPath, summarizePath, } from '../../core/preview-registry.js';
4
+ // Hard cap on a collapsed crtr card's total rendered lines (rule 12,
5
+ // inline-ui-placement): help synthesis or a normal truncated result never
6
+ // shows more than this many lines total, blank spacer + status + body +
7
+ // expand hint included. PREVIEW_BODY_BUDGET reserves the 3 fixed/possible
8
+ // non-body lines (leading blank, status line, one-line expand hint — shown
9
+ // unconditionally for help, conditionally for a normal truncated result) so
10
+ // blank(1) + status(1) + body(<=budget) + hint(<=1) never exceeds the cap.
11
+ const PREVIEW_MAX_LINES = 20;
12
+ const PREVIEW_BODY_BUDGET = PREVIEW_MAX_LINES - 3;
13
+ const HEREDOC_OPEN = /<<-?\s*(["']?)([A-Za-z_][A-Za-z0-9_]*)\1/g;
14
+ const CRTR_IN_COMMAND_POSITION = /(?:^|[\n;&|()]\s*)(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*(?:[^\s;&|()]+\/)?(?:crtr|crouter)(?=\s|$)/;
15
+ export const CRTR_OUTPUT_CUSTOM_TYPE = 'crtr-output';
16
+ export function stripHeredocBodies(command) {
17
+ const lines = command.split('\n');
18
+ const out = [];
19
+ let i = 0;
20
+ while (i < lines.length) {
21
+ const line = lines[i];
22
+ out.push(line);
23
+ i++;
24
+ const delims = [];
25
+ HEREDOC_OPEN.lastIndex = 0;
26
+ let match;
27
+ while ((match = HEREDOC_OPEN.exec(line)) !== null)
28
+ delims.push(match[2]);
29
+ for (const delim of delims) {
30
+ while (i < lines.length) {
31
+ const probe = lines[i].replace(/^\t+/, '');
32
+ i++;
33
+ if (probe === delim)
34
+ break;
35
+ }
36
+ }
37
+ }
38
+ return out.join('\n');
39
+ }
40
+ export function isCrtrBashCommand(command) {
41
+ return typeof command === 'string' && CRTR_IN_COMMAND_POSITION.test(stripHeredocBodies(command));
42
+ }
43
+ /** Pull the crtr/crouter invocation's own argv tokens out of a full shell
44
+ * command string: drop everything before the matched binary token, then cut
45
+ * at the next shell-level terminator so a chained `&& echo done` or piped
46
+ * `| cat` doesn't leak into the "argv". Tokenized with quote-awareness (see
47
+ * tokenizeShellSegment) so a quoted argument that merely *contains* `-h` (a
48
+ * prompt string, a literal flag mentioned in prose) is one opaque token, not
49
+ * split into a bare `-h` — still not a real shell parse (no backslash escapes,
50
+ * no `$()`), but adequate for viewer-only chrome (worst case: a stale/empty
51
+ * lookup, never a wrong agent result). */
52
+ function extractCrtrInvocationTokens(command) {
53
+ const stripped = stripHeredocBodies(command);
54
+ const match = CRTR_IN_COMMAND_POSITION.exec(stripped);
55
+ if (match === null)
56
+ return undefined;
57
+ const tail = stripped.slice(match.index + match[0].length);
58
+ const stopAt = tail.search(/[\n;&|)]/);
59
+ const segment = (stopAt === -1 ? tail : tail.slice(0, stopAt)).trim();
60
+ return segment === '' ? [] : dropRedirectTail(tokenizeShellSegment(segment));
61
+ }
62
+ /** A crtr invocation's own argv never includes a shell redirect (`>`, `>>`,
63
+ * `<`, `<<`, with an optional leading fd digit and/or trailing `&fd`
64
+ * duplication, e.g. `2>&1`, `&>`, `1>`) — that's plumbing on the OUTER bash
65
+ * call, not part of crtr's own path/args. The terminator scan above already
66
+ * cuts the segment on a bare `&`, which coincidentally lands mid-redirect
67
+ * for something like `-h 2>&1` (segment becomes `-h 2>`, leaving a dangling
68
+ * `2>` token) — rather than special-case that scan, this drops the first
69
+ * token that STARTS WITH a redirect operator (and everything after it, since
70
+ * nothing past a redirect is ever crtr's own arg). Matching on the prefix
71
+ * (not the whole token) is what catches an operator glued to its target with
72
+ * no separating space, e.g. `2>/tmp/log` / `>/tmp/log` — bash treats those as
73
+ * operator+word regardless of spacing, but this whitespace tokenizer keeps
74
+ * them as one token, so a full-string match would miss them. */
75
+ const REDIRECT_TOKEN = /^(?:\d*|&)(?:>>|<<|>|<)/;
76
+ function dropRedirectTail(tokens) {
77
+ const redirectIdx = tokens.findIndex((t) => REDIRECT_TOKEN.test(t));
78
+ return redirectIdx === -1 ? tokens : tokens.slice(0, redirectIdx);
79
+ }
80
+ /** Split a shell command segment into tokens, treating a single- or
81
+ * double-quoted span as one opaque token (quote characters stripped, no
82
+ * escape handling) instead of letting whitespace inside it create extra
83
+ * tokens. This is what keeps `-h` embedded in a quoted prompt string (e.g.
84
+ * `node new "write about -h flags"`) from ever being mistaken for a real
85
+ * `-h` token by isCrtrHelpInvocation below. */
86
+ function tokenizeShellSegment(segment) {
87
+ const tokens = [];
88
+ let current = '';
89
+ let inToken = false;
90
+ let quote = null;
91
+ for (const ch of segment) {
92
+ if (quote !== null) {
93
+ if (ch === quote)
94
+ quote = null;
95
+ else
96
+ current += ch;
97
+ inToken = true;
98
+ continue;
99
+ }
100
+ if (ch === '"' || ch === "'") {
101
+ quote = ch;
102
+ inToken = true;
103
+ continue;
104
+ }
105
+ if (/\s/.test(ch)) {
106
+ if (inToken) {
107
+ tokens.push(current);
108
+ current = '';
109
+ inToken = false;
110
+ }
111
+ continue;
112
+ }
113
+ current += ch;
114
+ inToken = true;
115
+ }
116
+ if (inToken)
117
+ tokens.push(current);
118
+ return tokens;
119
+ }
120
+ /** True when a crtr bash invocation's OWN argv carries a bare -h/--help
121
+ * token — the dispatcher renders the leaf's schema, not a result, so it is
122
+ * never useful to preview like a normal command's output (see
123
+ * src/core/help.ts renderLeafArgv: schema text, not agent-facing result
124
+ * text). Checked against extractCrtrInvocationTokens' tokens (scoped to the
125
+ * crtr segment only, quote-aware), never the raw command string — a `-h`
126
+ * appearing before the crtr segment (`echo -h && crtr canvas snapshot`),
127
+ * after it (`crtr canvas snapshot && echo --help`), or inside a quoted
128
+ * argument (`crtr node new "write about -h flags"`) must never count. This is
129
+ * structural (every leaf's -h has the same shape), so it needs no per-leaf
130
+ * metadata — unlike suppressOutput below, which is command-owned. */
131
+ export function isCrtrHelpInvocation(command) {
132
+ if (typeof command !== 'string')
133
+ return false;
134
+ const tokens = extractCrtrInvocationTokens(command);
135
+ return tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
136
+ }
137
+ export function commandPreviewMeta(command) {
138
+ const tokens = extractCrtrInvocationTokens(command);
139
+ const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
140
+ return {
141
+ isHelp,
142
+ suppressOutput: tokens !== undefined && tokens.length > 0 && suppressOutputForPath(tokens),
143
+ };
144
+ }
145
+ function commandFromArgs(args) {
146
+ if (!args || typeof args !== 'object')
147
+ return '';
148
+ const command = args.command;
149
+ return typeof command === 'string' ? command : '';
150
+ }
151
+ function resultText(result) {
152
+ return (result.content ?? [])
153
+ .filter((part) => part?.type === 'text' || typeof part?.text === 'string')
154
+ .map((part) => part.text ?? '')
155
+ .join('\n')
156
+ .trimEnd();
157
+ }
158
+ function lineStyle(line, theme) {
159
+ const trimmed = line.trim();
160
+ if (trimmed === '')
161
+ return '';
162
+ if (/^<\/?(?:command|subcommand|runtime-state|crtr-[^>\s]+|error)(?:\s|>|$)/.test(trimmed)) {
163
+ const color = trimmed.startsWith('<error') ? 'error' : 'accent';
164
+ return theme.fg(color, theme.bold(line));
165
+ }
166
+ if (/^(Input|Output|Effects|Branches|Output \(|Effects$)/.test(trimmed)) {
167
+ return theme.fg('toolTitle', theme.bold(line));
168
+ }
169
+ if (/^(Spawned|Created|Updated|Wrote|Deleted|Promoted|Demoted|Closed|Revived|Recycled)\b/.test(trimmed)) {
170
+ return theme.fg('success', line);
171
+ }
172
+ if (/^(crtr:|Command exited|Command timed out|Command aborted|unknown subcommand|error\b)/i.test(trimmed)) {
173
+ return theme.fg('error', line);
174
+ }
175
+ if (/^(warning|warn|blocked|attention)\b/i.test(trimmed) || trimmed.includes('⚠')) {
176
+ return theme.fg('warning', line);
177
+ }
178
+ if (/^[●✓]/.test(trimmed))
179
+ return theme.fg('success', line);
180
+ if (/^[○◌]/.test(trimmed))
181
+ return theme.fg('muted', line);
182
+ if (/^[✗⊘]/.test(trimmed))
183
+ return theme.fg('error', line);
184
+ if (/^[├└│]/.test(trimmed))
185
+ return theme.fg('toolOutput', line);
186
+ if (/^\s*-\s+/.test(line)) {
187
+ const idx = line.indexOf('-');
188
+ return `${line.slice(0, idx)}${theme.fg('muted', '-')}${theme.fg('toolOutput', line.slice(idx + 1))}`;
189
+ }
190
+ return theme.fg('toolOutput', line);
191
+ }
192
+ export function renderCrtrOutputText(text, theme) {
193
+ const body = text || '(no output)';
194
+ return body.split('\n').map((line) => lineStyle(line, theme)).join('\n');
195
+ }
196
+ // ---------------------------------------------------------------------------
197
+ // Help preview synthesis
198
+ // ---------------------------------------------------------------------------
199
+ //
200
+ // A collapsed `-h` card must never just parrot the call header (the command
201
+ // path, already shown by renderCall) or bottom out in a bare "(schema — ctrl+o
202
+ // to expand)" with zero information. Instead it synthesizes a short,
203
+ // human-useful slice straight out of the command's own rendered help text —
204
+ // still the command's own words (rule 12: previews are command-owned content,
205
+ // not generic renderer chrome), just the compact slice of it. Parsed directly
206
+ // off the exact shapes renderRoot/renderBranch/renderLeafArgv produce
207
+ // (src/core/help.ts) — text-only parsing (no import of help.ts/command.ts:
208
+ // this file must stay bundle-safe, see preview-registry.ts's header) so it is
209
+ // necessarily best-effort, not a real re-parse.
210
+ /** A slash-command echo message's body is `$ crtr <argv>\n\n<schema>`
211
+ * (see isHelpFromCrtrOutputContent below); strip that echo line + its
212
+ * blank-line separator so synthesis always sees the bare schema, same as
213
+ * the bash-card path where `text` already IS the bare schema. */
214
+ function stripCrtrEchoPrefix(text) {
215
+ if (!text.startsWith('$ '))
216
+ return text;
217
+ const nlIdx = text.indexOf('\n');
218
+ if (nlIdx === -1)
219
+ return '';
220
+ const rest = text.slice(nlIdx + 1);
221
+ return rest.startsWith('\n') ? rest.slice(1) : rest;
222
+ }
223
+ /** renderRoot emits one `<command name="X">` block per subtree with NO
224
+ * description attribute; renderBranch emits exactly one `<command
225
+ * name="X" description="Y">` block (always WITH the attribute) for the
226
+ * branch itself. Leaf help (renderLeafArgv) never emits a `<command>` tag at
227
+ * all. That structural difference is enough to tell all three apart from
228
+ * the rendered text alone, with no shared type import. */
229
+ function classifyHelpText(text) {
230
+ const tag = /<command name="[^"]*"([^>]*)>/.exec(text);
231
+ if (tag === null)
232
+ return 'leaf';
233
+ return /\bdescription="/.test(tag[1]) ? 'branch' : 'root';
234
+ }
235
+ /** Root help: a tagline, then one `<command name="X">\n<concept line>` block
236
+ * per subtree (see renderRoot). Preview = tagline + `name — concept` per
237
+ * subtree, in source order — the same information density as the root -h's
238
+ * own orientation line, just one row per subtree instead of the full
239
+ * useWhen/subcommand-listing/state detail. */
240
+ function synthesizeRootPreview(text) {
241
+ const firstTagIdx = text.indexOf('<command name="');
242
+ const tagline = (firstTagIdx === -1 ? text : text.slice(0, firstTagIdx)).trim();
243
+ const commands = [];
244
+ const re = /<command name="([^"]*)">\n([^\n]*)/g;
245
+ let m;
246
+ while ((m = re.exec(text)) !== null)
247
+ commands.push(`${m[1]} \u2014 ${m[2]}`);
248
+ return [tagline, ...(commands.length > 0 ? ['', ...commands] : [])].join('\n');
249
+ }
250
+ /** Branch help: one `<command name="X" description="Y">` block, then one
251
+ * self-closing `<subcommand name="..." description="..." whenToUse="..."/>`
252
+ * per child (see renderBranch). Preview = `name — description` for the
253
+ * branch itself, then the same for each subcommand — dropping whenToUse
254
+ * (already the longest field) and any dynamicState/model prose, which is
255
+ * exactly the detail ctrl+o exists to reveal. */
256
+ function synthesizeBranchPreview(text) {
257
+ const head = /^<command name="([^"]*)" description="([^"]*)">/.exec(text);
258
+ const name = head?.[1] ?? '';
259
+ const description = head?.[2] ?? '';
260
+ const subs = [];
261
+ const re = /<subcommand name="([^"]*)" description="([^"]*)"[^>]*\/>/g;
262
+ let m;
263
+ while ((m = re.exec(text)) !== null)
264
+ subs.push(`${m[1]} \u2014 ${m[2]}`);
265
+ return [`${name} \u2014 ${description}`, ...(subs.length > 0 ? ['', ...subs] : [])].join('\n');
266
+ }
267
+ /** Leaf help: `name: summary.` first line, then an `Input`-headed param block
268
+ * (each row ` LABEL description...`, or one un-indented note line when the
269
+ * leaf takes no params — see renderLeafArgv/paramLabel). Preview = the
270
+ * summary line verbatim (already concise) plus a compact param-name roll-call
271
+ * (or the note line) — never the per-param descriptions, Output, or
272
+ * Effects sections, which is exactly the schema detail ctrl+o reveals. */
273
+ function synthesizeLeafPreview(text) {
274
+ const lines = text.split('\n');
275
+ const out = [lines[0] ?? ''];
276
+ const inputIdx = lines.indexOf('Input');
277
+ if (inputIdx === -1)
278
+ return out.join('\n');
279
+ const outputIdx = lines.findIndex((l) => l.startsWith('Output ('));
280
+ const end = outputIdx === -1 ? lines.length : outputIdx;
281
+ const block = lines.slice(inputIdx + 1, end).filter((l) => l.trim() !== '');
282
+ const paramNames = block.map((l) => /^\s{2}(\S+)/.exec(l)?.[1]);
283
+ if (block.length > 0 && paramNames.every((n) => n !== undefined)) {
284
+ out.push('', `Params: ${paramNames.join(', ')}`);
285
+ }
286
+ else if (block.length > 0) {
287
+ // No param rows (renderLeafArgv's inputNote path) — the note is itself
288
+ // already a one-line summary, e.g. "No input parameters."
289
+ out.push('', block[0]);
290
+ }
291
+ return out.join('\n');
292
+ }
293
+ /** Synthesize a collapsed-preview body for any `-h` schema text, dispatching
294
+ * on classifyHelpText. This is the ONLY place that turns raw help text into
295
+ * preview prose — both the bash-card path (CrtrResultComponent) and the
296
+ * slash-command echo path (CrtrOutputMessageComponent, via
297
+ * stripCrtrEchoPrefix) route through it, so the two surfaces read the same
298
+ * way. */
299
+ function synthesizeHelpPreviewText(rawText) {
300
+ const text = stripCrtrEchoPrefix(rawText);
301
+ const kind = classifyHelpText(text);
302
+ if (kind === 'root')
303
+ return synthesizeRootPreview(text);
304
+ if (kind === 'branch')
305
+ return synthesizeBranchPreview(text);
306
+ return synthesizeLeafPreview(text);
307
+ }
308
+ /** Style one summarizer-produced SummaryLine for terminal rendering: an
309
+ * empty text stays blank (no color codes to wrap nothing in), otherwise the
310
+ * tone maps straight to a theme color name \u2014 'plain' is the same
311
+ * 'toolOutput' color the generic renderer's default line style uses,
312
+ * everything else (success/error/warning/muted/accent) is already a real
313
+ * theme color name used elsewhere in this file. */
314
+ function renderSummaryLine(line, theme) {
315
+ if (line.text === '')
316
+ return '';
317
+ const color = line.tone === undefined || line.tone === 'plain' ? 'toolOutput' : line.tone;
318
+ return theme.fg(color, line.text);
319
+ }
320
+ /** Only ever rendered for a running or failed call (see statusLines below): a
321
+ * SUCCESSFUL call shows no body status line at all, so the success/help
322
+ * branches would be dead here. */
323
+ function statusLine(options, theme) {
324
+ return options.isPartial ? theme.fg('warning', '⟳ crtr running') : theme.fg('error', '✗ crtr failed');
325
+ }
326
+ const DEFAULT_PREVIEW_STATE = { isHelp: false, suppressOutput: false };
327
+ function clampRenderedLines(lines, width) {
328
+ if (width <= 0)
329
+ return lines.map(() => '');
330
+ return lines.map((line) => truncateToWidth(line, width, '…'));
331
+ }
332
+ const PI_TRUNCATION_MARKER = /^\[Showing lines \d+-\d+ of \d+ \([^)]+ limit\)\. Full output: .+\]$/;
333
+ function isPiTruncationMarker(line) {
334
+ return PI_TRUNCATION_MARKER.test(line.trim());
335
+ }
336
+ function splitGenericTableRow(line) {
337
+ const trimmed = line.trim();
338
+ if (!trimmed.includes('|'))
339
+ return null;
340
+ // GFM permits omitting either outer pipe (`name | version`, `--- | ---`);
341
+ // only strip the ones actually present rather than requiring both.
342
+ const body = trimmed.replace(/^\|/, '').replace(/\|$/, '');
343
+ const cells = [];
344
+ let current = '';
345
+ let i = 0;
346
+ while (i < body.length) {
347
+ const ch = body[i];
348
+ if (ch === '\\' && body[i + 1] === '|') {
349
+ current += '|';
350
+ i += 2;
351
+ continue;
352
+ }
353
+ if (ch === '|') {
354
+ cells.push(current.trim());
355
+ current = '';
356
+ i++;
357
+ continue;
358
+ }
359
+ current += ch;
360
+ i++;
361
+ }
362
+ cells.push(current.trim());
363
+ return cells.length >= 2 ? cells : null;
364
+ }
365
+ function isTableSeparator(cells) {
366
+ return cells.every((cell) => /^:?-{3,}:?$/.test(cell));
367
+ }
368
+ function hasEdgePipe(line) {
369
+ const trimmed = line.trim();
370
+ return trimmed.startsWith('|') || trimmed.endsWith('|');
371
+ }
372
+ function readGenericTableBlock(lines, start) {
373
+ const first = splitGenericTableRow(lines[start]);
374
+ if (first === null)
375
+ return null;
376
+ const rows = [first];
377
+ let next = start + 1;
378
+ while (next < lines.length) {
379
+ const cells = splitGenericTableRow(lines[next]);
380
+ if (cells === null || cells.length !== first.length)
381
+ break;
382
+ rows.push(cells);
383
+ next++;
384
+ }
385
+ // A single matched row with no edge pipe at all (e.g. prose that happens
386
+ // to contain one literal `|`, `warning: use x | y`) is too weak a signal
387
+ // to treat as a table — a real GFM row omitting both edges only reads as
388
+ // one when it's part of a multi-row block (header+separator, or several
389
+ // consecutive same-shaped rows).
390
+ if (rows.length === 1 && !hasEdgePipe(lines[start]))
391
+ return null;
392
+ const separatorIndex = rows.findIndex(isTableSeparator);
393
+ if (separatorIndex === 1) {
394
+ return { next, rows: [rows[0], ...rows.slice(2)], headerRows: 1 };
395
+ }
396
+ if (separatorIndex !== -1) {
397
+ return { next, rows: rows.filter((_, i) => i !== separatorIndex), headerRows: 0 };
398
+ }
399
+ return { next, rows, headerRows: 0 };
400
+ }
401
+ function sum(nums) {
402
+ return nums.reduce((acc, n) => acc + n, 0);
403
+ }
404
+ function tableColumnWidths(rows, width) {
405
+ const columnCount = rows[0]?.length ?? 0;
406
+ if (columnCount === 0)
407
+ return [];
408
+ const separatorWidth = Math.max(0, columnCount - 1) * 2;
409
+ const available = Math.max(columnCount, width - separatorWidth);
410
+ const minWidth = available >= columnCount * 3 ? 3 : 1;
411
+ const widths = Array.from({ length: columnCount }, (_, col) => Math.max(1, ...rows.map((row) => visibleWidth(row[col] ?? ''))));
412
+ while (sum(widths) > available) {
413
+ let widest = -1;
414
+ for (let i = 0; i < widths.length; i++) {
415
+ if (widths[i] > minWidth && (widest === -1 || widths[i] > widths[widest]))
416
+ widest = i;
417
+ }
418
+ if (widest === -1)
419
+ break;
420
+ widths[widest] = widths[widest] - 1;
421
+ }
422
+ return widths;
423
+ }
424
+ function padToVisibleWidth(text, width) {
425
+ const missing = width - visibleWidth(text);
426
+ return missing > 0 ? `${text}${' '.repeat(missing)}` : text;
427
+ }
428
+ function formatGenericTableRow(cells, widths) {
429
+ return cells
430
+ .map((cell, i) => padToVisibleWidth(truncateToWidth(cell, widths[i] ?? 1, '…'), widths[i] ?? 1))
431
+ .join(' ')
432
+ .trimEnd();
433
+ }
434
+ function collectGenericPreviewLines(text, lineBudget, width) {
435
+ const sourceLines = (text || '(no output)').split('\n');
436
+ const lines = [];
437
+ let skippedCount = 0;
438
+ const push = (line) => {
439
+ if (lines.length < lineBudget)
440
+ lines.push(line);
441
+ else
442
+ skippedCount++;
443
+ };
444
+ let i = 0;
445
+ while (i < sourceLines.length) {
446
+ const table = readGenericTableBlock(sourceLines, i);
447
+ if (table !== null) {
448
+ const widths = tableColumnWidths(table.rows, width);
449
+ for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex++) {
450
+ push({
451
+ text: formatGenericTableRow(table.rows[rowIndex], widths),
452
+ tone: rowIndex < table.headerRows ? 'accent' : undefined,
453
+ });
454
+ }
455
+ i = table.next;
456
+ continue;
457
+ }
458
+ const textLine = sourceLines[i];
459
+ push({
460
+ text: truncateToWidth(textLine, width, '…'),
461
+ tone: isPiTruncationMarker(textLine) ? 'muted' : undefined,
462
+ });
463
+ i++;
464
+ }
465
+ return { lines, skippedCount };
466
+ }
467
+ function renderGenericPreview(text, lineBudget, width, theme) {
468
+ const preview = collectGenericPreviewLines(text, lineBudget, width);
469
+ return {
470
+ skippedCount: preview.skippedCount,
471
+ lines: preview.lines.map((line) => {
472
+ if (line.tone !== undefined)
473
+ return renderSummaryLine(line, theme);
474
+ return lineStyle(line.text, theme);
475
+ }),
476
+ };
477
+ }
478
+ class CrtrResultComponent {
479
+ text;
480
+ options;
481
+ context;
482
+ theme;
483
+ command;
484
+ staticPreview;
485
+ constructor(text, options, context, theme,
486
+ /** Source command for the preview lookup (the bash-call path). Omit (or
487
+ * pass a static preview below) for a path with no per-leaf lookup, e.g.
488
+ * CrtrOutputMessageComponent. */
489
+ command, staticPreview = DEFAULT_PREVIEW_STATE) {
490
+ this.text = text;
491
+ this.options = options;
492
+ this.context = context;
493
+ this.theme = theme;
494
+ this.command = command;
495
+ this.staticPreview = staticPreview;
496
+ }
497
+ /** Both isHelp and suppressOutput are synchronous structural lookups (see
498
+ * commandPreviewMeta), so this never needs to invalidate/upgrade a later
499
+ * paint — the first render already has the final answer. */
500
+ currentPreview() {
501
+ if (this.command === undefined)
502
+ return this.staticPreview;
503
+ return commandPreviewMeta(this.command);
504
+ }
505
+ render(width) {
506
+ const preview = this.currentPreview();
507
+ const isPartial = Boolean(this.options.isPartial);
508
+ const isError = Boolean(this.context.isError);
509
+ const isRunningOrFailed = isPartial || isError;
510
+ // The body carries a status line ONLY while running or failed (⟳ running /
511
+ // ✗ failed) — the states the call header never shows and where the detail
512
+ // matters. A SUCCESSFUL call (help or normal) gets NO body status: the
513
+ // header already named the command (<icon> crtr <path> / <icon> crtr help) and the
514
+ // output speaks for itself, so a "✓ crtr done" line is pure noise.
515
+ const statusLines = isRunningOrFailed ? [statusLine(this.options, this.theme)] : [];
516
+ if (this.options.expanded) {
517
+ // Expanded = raw truth (never redirect-/-h-stripped, never
518
+ // synthesized): the exact command as invoked, plus the exact output,
519
+ // still lineStyle-colored for readability but otherwise unmodified.
520
+ const styled = renderCrtrOutputText(this.text, this.theme);
521
+ const commandLine = this.command !== undefined
522
+ ? [this.theme.fg('muted', `$ ${this.command}`), '']
523
+ : [];
524
+ return clampRenderedLines(['', ...statusLines, ...commandLine, ...styled.split('\n')], width);
525
+ }
526
+ // Collapse order (rule 12, inline-ui-placement): help schema synthesis,
527
+ // then a command-owned computed summary (summarizePath — memory read,
528
+ // memory lint, ...), then a bare suppressOutput hint, then generic
529
+ // truncation. A still-RUNNING command is always shown raw — there is
530
+ // nothing to summarize yet. A FAILED command still tries the
531
+ // command-owned summarizer first: a real `crtr memory lint` failure
532
+ // (findings) IS command-owned computed content the same as its 0-findings
533
+ // success shape, not noise to suppress — only when the summarizer
534
+ // recognizes neither shape (returns null) does the raw failed output show.
535
+ // suppressOutput stays success-only (checked below): a failure is exactly
536
+ // when a suppressed leaf's raw output becomes diagnostically important.
537
+ if (!isPartial) {
538
+ if (preview.isHelp) {
539
+ // A collapsed -h card gets a synthesized preview of the schema (rule
540
+ // 12), never the header's own path repeated and never the raw schema
541
+ // dump — see synthesizeHelpPreviewText. A -h invocation is never
542
+ // partial-or-failed in practice (the dispatcher renders the schema
543
+ // unconditionally), so statusLines is effectively always [] here and
544
+ // the body is JUST the preview content, no repeated help label.
545
+ const styled = renderCrtrOutputText(synthesizeHelpPreviewText(this.text), this.theme);
546
+ const truncated = truncateToVisualLines(styled, PREVIEW_BODY_BUDGET, width);
547
+ const lines = truncated.visualLines ?? [];
548
+ const hint = this.theme.fg('muted', '(schema — ctrl+o to expand)');
549
+ return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
550
+ }
551
+ const tokens = this.command !== undefined ? extractCrtrInvocationTokens(this.command) : undefined;
552
+ const summary = tokens !== undefined ? summarizePath(tokens, this.text) : null;
553
+ if (summary !== null) {
554
+ // A command-owned computed summary (e.g. memory read's frontmatter
555
+ // glance, memory lint's PASS/findings line) — never the raw payload.
556
+ const summaryLines = summary.map((line) => renderSummaryLine(line, this.theme));
557
+ const truncated = truncateToVisualLines(summaryLines.join('\n'), PREVIEW_BODY_BUDGET, width);
558
+ const lines = truncated.visualLines ?? [];
559
+ const hint = this.theme.fg('muted', '(ctrl+o to expand)');
560
+ return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
561
+ }
562
+ if (!isError && preview.suppressOutput) {
563
+ // suppressOutput leaves (command-owned, e.g. canvas snapshot) stay a
564
+ // bare hint — the payload is a machine-readable dump with no useful
565
+ // human slice to synthesize, unlike help text's structured shape.
566
+ // Success-only: a failed run of a suppressed leaf still shows the raw
567
+ // output below, since that is exactly when the detail matters.
568
+ const hint = this.theme.fg('muted', '(suppressed — ctrl+o to expand)');
569
+ return clampRenderedLines(['', ...statusLines, hint], width);
570
+ }
571
+ }
572
+ const generic = renderGenericPreview(this.text, PREVIEW_BODY_BUDGET, width, this.theme);
573
+ if (generic.skippedCount > 0) {
574
+ const hint = this.theme.fg('muted', `… (${generic.skippedCount} more lines, ctrl+o to expand)`);
575
+ return clampRenderedLines(['', ...statusLines, ...generic.lines, hint], width);
576
+ }
577
+ return clampRenderedLines(['', ...statusLines, ...generic.lines], width);
578
+ }
579
+ invalidate() {
580
+ this.context.invalidate?.();
581
+ }
582
+ }
583
+ /** First-line convention from crtr-commands/index.ts's pi.sendMessage:
584
+ * `$ crtr <argv>\n\n<output>`. Help-only here, never suppressOutput: this
585
+ * path renders a slash-command's own static `$ crtr ...` echo, not a live
586
+ * bash-call result keyed to a real leaf path, so there is no per-leaf
587
+ * suppressOutput lookup to make. */
588
+ function isHelpFromCrtrOutputContent(content) {
589
+ const firstLine = content.split('\n', 1)[0];
590
+ return firstLine.startsWith('$ ') && isCrtrHelpInvocation(firstLine.slice(2));
591
+ }
592
+ export class CrtrOutputMessageComponent extends Box {
593
+ content;
594
+ theme;
595
+ body;
596
+ expanded;
597
+ constructor(content, expanded, theme) {
598
+ super(1, 1, (text) => theme.bg('customMessageBg', text));
599
+ this.content = content;
600
+ this.theme = theme;
601
+ this.expanded = expanded;
602
+ const preview = { isHelp: isHelpFromCrtrOutputContent(content), suppressOutput: false };
603
+ this.body = new CrtrResultComponent(content, { expanded }, {}, theme, undefined, preview);
604
+ this.addChild(this.body);
605
+ }
606
+ setExpanded(expanded) {
607
+ if (this.expanded === expanded)
608
+ return;
609
+ this.expanded = expanded;
610
+ const preview = { isHelp: isHelpFromCrtrOutputContent(this.content), suppressOutput: false };
611
+ this.body = new CrtrResultComponent(this.content, { expanded }, {}, this.theme, undefined, preview);
612
+ this.clear();
613
+ this.addChild(this.body);
614
+ }
615
+ }
616
+ export function createCrtrBashToolDefinition(args) {
617
+ const command = commandFromArgs(args);
618
+ if (!isCrtrBashCommand(command))
619
+ return undefined;
620
+ return {
621
+ name: 'bash',
622
+ label: 'bash',
623
+ description: 'Render crtr bash output with crtr-specific chrome in the attach viewer.',
624
+ parameters: {},
625
+ renderCall(callArgs, theme) {
626
+ const currentCommand = commandFromArgs(callArgs) || command;
627
+ // Semantic card, not a bash echo: the header names what the invocation
628
+ // IS (help schema vs. a crtr command), and the body previews only the
629
+ // crtr segment's own path/args (extractCrtrInvocationTokens, -h/--help
630
+ // stripped) — no leading `$`, no raw shell chrome (chained `&&`/`|`
631
+ // siblings, env-var prefixes) leaking through.
632
+ const tokens = extractCrtrInvocationTokens(currentCommand);
633
+ const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
634
+ const pathTokens = (tokens ?? []).filter((t) => t !== '-h' && t !== '--help');
635
+ const path = pathTokens.join(' ');
636
+ const icon = isHelp ? HELP_ICON : iconForPath(pathTokens);
637
+ const prefix = isHelp ? `${icon} crtr help` : `${icon} crtr`;
638
+ const styledPrefix = theme.fg('accent', theme.bold(prefix));
639
+ const styledPath = path ? ` ${theme.fg('toolTitle', theme.bold(path))}` : '';
640
+ return new Text(`${styledPrefix}${styledPath}`, 0, 0);
641
+ },
642
+ renderResult(result, options, theme, context) {
643
+ return new CrtrResultComponent(resultText(result), options, context, theme, command);
644
+ },
645
+ };
646
+ }
@@ -1,4 +1,4 @@
1
- // extension-dialogs.ts — the blocking-dialog renderer for `crtr attach` (T5).
1
+ // extension-dialogs.ts — the blocking-dialog renderer for `crtr surface attach` (T5).
2
2
  //
3
3
  // The broker forwards an extension's user-blocking UI request as an
4
4
  // `extension_ui_request` frame (RpcExtensionUIRequest). The viewer renders it
@@ -1,4 +1,4 @@
1
- // graph-overlay.ts — the alt+g GRAPH navigator overlay for `crtr attach` (Unit Q).
1
+ // graph-overlay.ts — the alt+g GRAPH navigator overlay for `crtr surface attach` (Unit Q).
2
2
  //
3
3
  // Native reimplementation of canvas-nav.ts's GRAPH modal as a pi-tui OVERLAY
4
4
  // (the viewer has no pi extension host). `tui.showOverlay(this, …)` mounts this
@@ -13,7 +13,7 @@
13
13
  // canvas-nav). All model/render comes from the shared nav-model layer; keys are
14
14
  // decoded with pi-tui's canonical matchesKey (kitty/CSI-u aware).
15
15
  //
16
- // Enter/m/x SHELL `crtr` out-of-process (node focus / node close) — the viewer
16
+ // Enter/m/x SHELL `crtr` out-of-process (node focus / node lifecycle close) — the viewer
17
17
  // itself never spawns pi or opens a session (the §0 one-writer invariant). It
18
18
  // passes its own pane as `crtr node focus --pane <anchor>`: under the
19
19
  // one-viewer-per-node model the target's existing viewer is navigated in place,
@@ -276,7 +276,7 @@ export class GraphOverlay {
276
276
  const target = this.cursorId ?? this.self;
277
277
  const n = cNode(target);
278
278
  const nm = n !== null ? fullName(n) : shortId(target);
279
- this.pendingConfirm = { label: `kill ${nm}?`, action: () => this.shellCrtr(['node', 'close', '--node', target]) };
279
+ this.pendingConfirm = { label: `kill ${nm}?`, action: () => this.shellCrtr(['node', 'lifecycle', 'close', '--node', target]) };
280
280
  this.tui.requestRender();
281
281
  return;
282
282
  }