@crouton-kit/crouter 0.3.32 → 0.3.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/README.md +10 -2
  2. package/dist/build-root.js +4 -6
  3. package/dist/builtin-memory/crouter-development/marketplaces.md +8 -8
  4. package/dist/builtin-memory/crouter-development/personas/base-prompt.md +2 -2
  5. package/dist/builtin-memory/crouter-development/personas/orchestrator-prompt.md +5 -5
  6. package/dist/builtin-memory/crouter-development/personas.md +3 -4
  7. package/dist/builtin-memory/crouter-development/plugins.md +31 -31
  8. package/dist/builtin-memory/design.md +4 -1
  9. package/dist/builtin-memory/development.md +4 -1
  10. package/dist/builtin-memory/internal/INDEX.md +1 -1
  11. package/dist/builtin-memory/internal/examples/imessage-assistant.md +3 -3
  12. package/dist/builtin-memory/internal/nodes-and-canvas.md +9 -9
  13. package/dist/builtin-memory/internal/storage-tiers.md +5 -5
  14. package/dist/builtin-memory/planning.md +4 -1
  15. package/dist/builtin-memory/product.md +80 -0
  16. package/dist/builtin-memory/spec.md +4 -1
  17. package/dist/builtin-personas/advisor/PERSONA.md +10 -0
  18. package/dist/builtin-personas/design/PERSONA.md +2 -2
  19. package/dist/builtin-personas/design/orchestrator.md +3 -3
  20. package/dist/builtin-personas/developer/PERSONA.md +1 -1
  21. package/dist/builtin-personas/developer/orchestrator.md +2 -2
  22. package/dist/builtin-personas/explore/PERSONA.md +3 -3
  23. package/dist/builtin-personas/explore/orchestrator.md +4 -2
  24. package/dist/builtin-personas/general/PERSONA.md +1 -1
  25. package/dist/builtin-personas/general/orchestrator.md +1 -1
  26. package/dist/builtin-personas/orchestration-kernel.md +8 -15
  27. package/dist/builtin-personas/plan/PERSONA.md +1 -1
  28. package/dist/builtin-personas/plan/orchestrator.md +2 -2
  29. package/dist/builtin-personas/plan/reviewers/architecture-fit/PERSONA.md +1 -1
  30. package/dist/builtin-personas/plan/reviewers/code-smells/PERSONA.md +1 -1
  31. package/dist/builtin-personas/plan/reviewers/pattern-consistency/PERSONA.md +1 -1
  32. package/dist/builtin-personas/plan/reviewers/requirements-coverage/PERSONA.md +1 -1
  33. package/dist/builtin-personas/plan/reviewers/security/PERSONA.md +1 -1
  34. package/dist/builtin-personas/product/PERSONA.md +18 -0
  35. package/dist/builtin-personas/product/orchestrator.md +14 -0
  36. package/dist/builtin-personas/product/teardown/PERSONA.md +13 -0
  37. package/dist/builtin-personas/review/PERSONA.md +1 -1
  38. package/dist/builtin-personas/review/orchestrator.md +1 -1
  39. package/dist/builtin-personas/runtime-base.md +5 -0
  40. package/dist/builtin-personas/spec/PERSONA.md +1 -1
  41. package/dist/builtin-personas/spec/orchestrator.md +2 -2
  42. package/dist/builtin-personas/spec/requirements/PERSONA.md +1 -1
  43. package/dist/builtin-personas/waiting.md +1 -1
  44. package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +71 -0
  45. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-help-gate.test.ts +41 -0
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +663 -0
  47. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +52 -0
  48. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +418 -0
  49. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crouter-help.ts +87 -0
  50. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/filters.json +7 -0
  51. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-commands/index.ts +174 -0
  52. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/crtr-help-gate.ts +408 -0
  53. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +442 -0
  54. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +119 -0
  55. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/nested-context.ts +327 -0
  56. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +574 -0
  57. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +260 -0
  58. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/strip-skills-docs.ts +40 -0
  59. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/sysprompt-window.ts +19 -0
  60. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/package.json +3 -0
  61. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.js +1 -0
  62. package/dist/builtin-pi-packages/pi-crtr-extensions/lib/subscription-state.ts +479 -0
  63. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/LICENSE +13 -0
  64. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/README.md +172 -0
  65. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/bin.mjs +11 -0
  66. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  67. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  68. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  69. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  70. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  71. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  72. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  73. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  74. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  75. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  76. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  77. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  78. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  79. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  80. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  81. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  82. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  83. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  84. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  85. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  86. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  87. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/errors.js +57 -0
  88. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/index.js +17 -0
  89. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/log.js +11 -0
  90. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  91. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  92. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  93. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  94. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  95. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  96. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  97. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  98. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  99. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  100. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  101. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  102. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  103. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  104. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  105. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  106. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  107. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/public-api.js +102 -0
  108. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  109. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  110. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  111. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  112. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  113. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  114. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  115. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  116. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  117. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  118. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  119. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  120. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  121. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  122. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  123. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  124. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  125. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  126. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  127. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  128. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  129. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  130. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  131. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  132. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  133. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  134. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  135. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  136. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  137. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/util.js +11 -0
  138. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/dist/visit.js +233 -0
  139. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/index.js +5 -0
  140. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/browser/package.json +3 -0
  141. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.d.ts +8 -0
  142. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/cli.mjs +201 -0
  143. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  144. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  145. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  146. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  147. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  148. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-node.js +112 -0
  149. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  150. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  151. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  152. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/composer.js +224 -0
  153. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  154. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  155. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  156. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  157. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  158. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  159. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  160. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  161. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  162. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  163. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  164. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  165. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  166. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  167. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  168. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  169. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  170. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  171. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  172. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  173. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  174. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  175. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  176. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/Document.js +337 -0
  177. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  178. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/anchors.js +76 -0
  179. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  180. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  181. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  182. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/createNode.js +90 -0
  183. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  184. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/doc/directives.js +178 -0
  185. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.d.ts +21 -0
  186. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/errors.js +62 -0
  187. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.d.ts +25 -0
  188. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/index.js +50 -0
  189. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.d.ts +3 -0
  190. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/log.js +19 -0
  191. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  192. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Alias.js +118 -0
  193. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  194. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Collection.js +151 -0
  195. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  196. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Node.js +40 -0
  197. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  198. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Pair.js +39 -0
  199. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  200. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  201. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  202. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  203. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  204. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  205. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  206. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  207. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  208. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/identity.js +53 -0
  209. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  210. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/nodes/toJS.js +39 -0
  211. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/options.d.ts +350 -0
  212. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  213. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  214. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  215. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  216. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  217. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  218. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  219. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/cst.js +112 -0
  220. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  221. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/lexer.js +723 -0
  222. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  223. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/line-counter.js +41 -0
  224. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  225. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/parse/parser.js +980 -0
  226. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.d.ts +44 -0
  227. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/public-api.js +107 -0
  228. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  229. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/Schema.js +39 -0
  230. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  231. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/map.js +19 -0
  232. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  233. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/null.js +17 -0
  234. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  235. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/seq.js +19 -0
  236. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  237. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/common/string.js +16 -0
  238. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  239. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/bool.js +21 -0
  240. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  241. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/float.js +47 -0
  242. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  243. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/int.js +42 -0
  244. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  245. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/core/schema.js +25 -0
  246. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  247. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json/schema.js +64 -0
  248. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  249. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  250. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/tags.js +99 -0
  251. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/types.d.ts +92 -0
  252. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  253. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  254. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  255. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  256. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  257. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  258. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  259. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  260. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  261. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  262. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  263. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  264. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  265. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  266. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  267. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  268. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  269. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  270. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  271. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  272. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  273. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  274. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  275. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringify.js +132 -0
  276. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  277. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  278. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  279. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  280. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  281. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  282. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  283. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  284. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  285. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  286. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  287. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  288. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.d.ts +4 -0
  289. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/test-events.js +134 -0
  290. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.d.ts +16 -0
  291. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/util.js +28 -0
  292. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.d.ts +102 -0
  293. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/dist/visit.js +236 -0
  294. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/package.json +97 -0
  295. package/dist/builtin-pi-packages/pi-crtr-extensions/node_modules/yaml/util.js +2 -0
  296. package/dist/builtin-pi-packages/pi-crtr-extensions/package-lock.json +3385 -0
  297. package/dist/builtin-pi-packages/pi-crtr-extensions/package.json +25 -0
  298. package/dist/builtin-pi-packages/pi-mode-switch/README.md +64 -0
  299. package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +40 -0
  300. package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +422 -0
  301. package/dist/builtin-pi-packages/pi-mode-switch/package.json +13 -0
  302. package/dist/builtin-views/canvas/core.mjs +82 -1
  303. package/dist/builtin-views/canvas/tui.mjs +9 -5
  304. package/dist/builtin-views/canvas/web.jsx +3 -2
  305. package/dist/builtin-views/chat/core.mjs +725 -0
  306. package/dist/builtin-views/chat/text.mjs +101 -0
  307. package/dist/builtin-views/chat/tui.mjs +368 -0
  308. package/dist/builtin-views/chat/web.jsx +367 -0
  309. package/dist/builtin-views/prompt-review/core.mjs +863 -0
  310. package/dist/builtin-views/prompt-review/text.mjs +15 -0
  311. package/dist/builtin-views/prompt-review/tui.mjs +196 -0
  312. package/dist/builtin-views/prompt-review/web.jsx +484 -0
  313. package/dist/builtin-views/settings/core.mjs +397 -0
  314. package/dist/builtin-views/settings/text.mjs +40 -0
  315. package/dist/builtin-views/settings/tui.mjs +95 -0
  316. package/dist/builtin-views/settings/web.jsx +167 -0
  317. package/dist/cli.js +16 -3
  318. package/dist/clients/attach/__tests__/crtr-output-coverage.test.js +55 -0
  319. package/dist/clients/attach/__tests__/crtr-output-render.test.js +2340 -0
  320. package/dist/clients/attach/attach-cmd.d.ts +18 -0
  321. package/dist/clients/attach/attach-cmd.js +1797 -797
  322. package/dist/clients/attach/auth-pickers.js +2 -2
  323. package/dist/clients/attach/canvas-panels.js +3 -3
  324. package/dist/clients/attach/chat-view.d.ts +13 -2
  325. package/dist/clients/attach/chat-view.js +53 -10
  326. package/dist/clients/attach/clipboard-image.js +1 -1
  327. package/dist/clients/attach/clipboard-text.js +1 -1
  328. package/dist/clients/attach/config-load.d.ts +8 -4
  329. package/dist/clients/attach/config-load.js +3 -1
  330. package/dist/clients/attach/crtr-output-render.d.ts +48 -0
  331. package/dist/clients/attach/crtr-output-render.js +646 -0
  332. package/dist/clients/attach/extension-dialogs.d.ts +2 -3
  333. package/dist/clients/attach/extension-dialogs.js +8 -10
  334. package/dist/clients/attach/graph-overlay.js +6 -5
  335. package/dist/clients/attach/input-controller.d.ts +4 -3
  336. package/dist/clients/attach/input-controller.js +25 -4
  337. package/dist/clients/attach/pickers.js +1 -1
  338. package/dist/clients/attach/slash-commands.d.ts +7 -7
  339. package/dist/clients/attach/slash-commands.js +40 -17
  340. package/dist/clients/attach/titled-editor.d.ts +4 -0
  341. package/dist/clients/attach/titled-editor.js +31 -15
  342. package/dist/clients/attach/view-socket.d.ts +2 -1
  343. package/dist/clients/attach/view-socket.js +28 -9
  344. package/dist/clients/web/__tests__/source-cache.test.js +32 -0
  345. package/dist/clients/web/dev-server.js +1 -0
  346. package/dist/clients/web/events.js +9 -11
  347. package/dist/clients/web/server.d.ts +4 -3
  348. package/dist/clients/web/server.js +166 -35
  349. package/dist/clients/web/source-cache.d.ts +10 -0
  350. package/dist/clients/web/source-cache.js +57 -0
  351. package/dist/clients/web/web-cmd.js +32 -13
  352. package/dist/commands/__tests__/human.test.js +30 -28
  353. package/dist/commands/canvas-history/search.js +1 -1
  354. package/dist/commands/canvas-history.js +5 -8
  355. package/dist/commands/canvas-issue.d.ts +2 -0
  356. package/dist/commands/canvas-issue.js +148 -0
  357. package/dist/commands/canvas-prune.js +43 -2
  358. package/dist/commands/canvas-rebuild-index.d.ts +2 -0
  359. package/dist/commands/canvas-rebuild-index.js +57 -0
  360. package/dist/commands/canvas-snapshot.d.ts +2 -0
  361. package/dist/commands/canvas-snapshot.js +51 -0
  362. package/dist/commands/canvas-tmux-spread.d.ts +2 -0
  363. package/dist/commands/canvas-tmux-spread.js +188 -0
  364. package/dist/commands/canvas.d.ts +1 -0
  365. package/dist/commands/canvas.js +16 -1
  366. package/dist/commands/chord.js +143 -48
  367. package/dist/commands/daemon.js +3 -3
  368. package/dist/commands/human/prompts.d.ts +0 -1
  369. package/dist/commands/human/prompts.js +39 -54
  370. package/dist/commands/human/queue.d.ts +12 -1
  371. package/dist/commands/human/queue.js +468 -73
  372. package/dist/commands/human/shared.d.ts +3 -4
  373. package/dist/commands/human/shared.js +3 -3
  374. package/dist/commands/human.js +12 -11
  375. package/dist/commands/memory/find.js +3 -2
  376. package/dist/commands/memory/lint.js +15 -8
  377. package/dist/commands/memory/list.js +4 -3
  378. package/dist/commands/memory/origin.d.ts +1 -0
  379. package/dist/commands/memory/origin.js +88 -0
  380. package/dist/commands/memory/read.js +3 -3
  381. package/dist/commands/memory/shared.d.ts +9 -4
  382. package/dist/commands/memory/shared.js +28 -10
  383. package/dist/commands/memory/write.js +19 -14
  384. package/dist/commands/memory.js +6 -8
  385. package/dist/commands/node-context.d.ts +2 -0
  386. package/dist/commands/node-context.js +172 -0
  387. package/dist/commands/node-snapshot.d.ts +2 -0
  388. package/dist/commands/node-snapshot.js +126 -0
  389. package/dist/commands/node.d.ts +2 -2
  390. package/dist/commands/node.js +987 -603
  391. package/dist/commands/pkg/market-inspect.d.ts +2 -1
  392. package/dist/commands/pkg/market-inspect.js +14 -32
  393. package/dist/commands/pkg/market-manage.d.ts +3 -1
  394. package/dist/commands/pkg/market-manage.js +58 -154
  395. package/dist/commands/pkg/market.js +7 -7
  396. package/dist/commands/pkg/plugin-inspect.d.ts +2 -1
  397. package/dist/commands/pkg/plugin-inspect.js +13 -29
  398. package/dist/commands/pkg/plugin-manage.d.ts +5 -1
  399. package/dist/commands/pkg/plugin-manage.js +246 -172
  400. package/dist/commands/pkg/plugin.js +6 -6
  401. package/dist/commands/pkg.js +7 -7
  402. package/dist/commands/push.d.ts +2 -0
  403. package/dist/commands/push.js +79 -11
  404. package/dist/commands/revive.js +79 -4
  405. package/dist/commands/search/answer.d.ts +1 -0
  406. package/dist/commands/search/answer.js +50 -0
  407. package/dist/commands/search/contents.d.ts +1 -0
  408. package/dist/commands/search/contents.js +96 -0
  409. package/dist/commands/search/exa.d.ts +53 -0
  410. package/dist/commands/search/exa.js +155 -0
  411. package/dist/commands/search/puremd.d.ts +11 -0
  412. package/dist/commands/search/puremd.js +53 -0
  413. package/dist/commands/search/web.d.ts +1 -0
  414. package/dist/commands/search/web.js +65 -0
  415. package/dist/commands/search.d.ts +2 -0
  416. package/dist/commands/search.js +24 -0
  417. package/dist/commands/surface.d.ts +2 -0
  418. package/dist/commands/surface.js +43 -0
  419. package/dist/commands/sys/__tests__/sync-import.test.js +72 -0
  420. package/dist/commands/sys/config.js +59 -10
  421. package/dist/commands/sys/doctor.js +56 -4
  422. package/dist/commands/sys/prompt-review.d.ts +1 -0
  423. package/dist/commands/sys/prompt-review.js +178 -0
  424. package/dist/commands/sys/promptstudio.d.ts +2 -0
  425. package/dist/commands/sys/promptstudio.js +65 -0
  426. package/dist/commands/sys/settings.d.ts +2 -0
  427. package/dist/commands/sys/settings.js +16 -0
  428. package/dist/commands/sys/setup-core.d.ts +88 -0
  429. package/dist/commands/sys/setup-core.js +352 -0
  430. package/dist/commands/sys/setup.d.ts +2 -0
  431. package/dist/commands/sys/setup.js +516 -0
  432. package/dist/commands/sys/sync.js +311 -159
  433. package/dist/commands/sys/sysprompt.d.ts +1 -0
  434. package/dist/commands/sys/sysprompt.js +89 -0
  435. package/dist/commands/sys.js +10 -5
  436. package/dist/commands/view-cycle.js +5 -5
  437. package/dist/commands/view-list.js +3 -3
  438. package/dist/commands/view-new.js +6 -6
  439. package/dist/commands/view-pick.js +6 -6
  440. package/dist/commands/view-run.js +14 -14
  441. package/dist/commands/view.js +3 -3
  442. package/dist/commands/workspace.js +10 -10
  443. package/dist/core/__tests__/boot.test.js +140 -0
  444. package/dist/core/__tests__/broker-preflight.test.js +85 -0
  445. package/dist/core/__tests__/broker-sdk-wiring.test.js +10 -16
  446. package/dist/core/__tests__/canvas.test.js +37 -1
  447. package/dist/core/__tests__/chat-view-reconnect.test.js +70 -0
  448. package/dist/core/__tests__/child-death-wake.test.js +11 -2
  449. package/dist/core/__tests__/close.test.js +39 -1
  450. package/dist/core/__tests__/connection-reconnect-resume.test.js +37 -0
  451. package/dist/core/__tests__/context-intro.test.js +48 -14
  452. package/dist/core/__tests__/daemon-boot.test.js +204 -9
  453. package/dist/core/__tests__/fixtures/fake-engine.d.ts +30 -4
  454. package/dist/core/__tests__/fixtures/fake-engine.js +157 -18
  455. package/dist/core/__tests__/fixtures/fake-pi-host.js +10 -1
  456. package/dist/core/__tests__/full/broker-attach-limits.test.js +1 -1
  457. package/dist/core/__tests__/full/broker-attach-stream.test.js +1 -1
  458. package/dist/core/__tests__/full/broker-crash-teardown.test.js +10 -5
  459. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +1 -1
  460. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +1 -1
  461. package/dist/core/__tests__/full/broker-pane-resolution.test.js +1 -1
  462. package/dist/core/__tests__/full/cascade-close.test.js +31 -18
  463. package/dist/core/__tests__/full/detach-focus.test.js +2 -2
  464. package/dist/core/__tests__/full/human-new-window-regression.test.js +1 -1
  465. package/dist/core/__tests__/hearth-bootstrap.test.js +136 -0
  466. package/dist/core/__tests__/helpers/harness.d.ts +1 -1
  467. package/dist/core/__tests__/helpers/harness.js +3 -3
  468. package/dist/core/__tests__/human-stranded-deliver.test.js +38 -1
  469. package/dist/core/__tests__/human-surface-target.test.js +1 -1
  470. package/dist/core/__tests__/kickoff.test.js +18 -19
  471. package/dist/core/__tests__/live-mutation-verbs.test.js +10 -10
  472. package/dist/core/__tests__/live-mutation.test.js +8 -8
  473. package/dist/core/__tests__/migration.test.js +172 -13
  474. package/dist/core/__tests__/on-read-dedup-resume.test.js +40 -0
  475. package/dist/core/__tests__/preview-registry-sync.test.js +36 -0
  476. package/dist/core/__tests__/prune-to-limit.test.js +91 -0
  477. package/dist/core/__tests__/push-final-guard.test.js +7 -1
  478. package/dist/core/__tests__/relaunch-root.test.js +9 -9
  479. package/dist/core/__tests__/revive.test.js +100 -27
  480. package/dist/core/__tests__/spawn-root.test.js +24 -1
  481. package/dist/core/__tests__/stop-guard.test.js +10 -0
  482. package/dist/core/__tests__/stranded-relaunch.test.js +72 -0
  483. package/dist/core/__tests__/tmux-surface.test.js +5 -1
  484. package/dist/core/__tests__/trigger-migration.test.js +48 -0
  485. package/dist/core/__tests__/wake-bearings.test.js +23 -21
  486. package/dist/core/__tests__/wake-origin.test.js +36 -33
  487. package/dist/core/__tests__/yield-ensures-daemon.test.js +54 -0
  488. package/dist/core/artifact.d.ts +2 -33
  489. package/dist/core/artifact.js +27 -87
  490. package/dist/core/bootstrap.js +2 -0
  491. package/dist/core/canvas/boot.d.ts +48 -0
  492. package/dist/core/canvas/boot.js +157 -0
  493. package/dist/core/canvas/browse/__tests__/model.test.js +35 -1
  494. package/dist/core/canvas/browse/app.js +87 -17
  495. package/dist/core/canvas/browse/model.d.ts +10 -1
  496. package/dist/core/canvas/browse/model.js +37 -1
  497. package/dist/core/canvas/browse/render.js +35 -33
  498. package/dist/core/canvas/canvas.d.ts +33 -0
  499. package/dist/core/canvas/canvas.js +138 -8
  500. package/dist/core/canvas/db.js +121 -9
  501. package/dist/core/canvas/index.d.ts +1 -1
  502. package/dist/core/canvas/index.js +1 -1
  503. package/dist/core/canvas/labels.d.ts +6 -8
  504. package/dist/core/canvas/labels.js +8 -11
  505. package/dist/core/canvas/nav-model.d.ts +5 -4
  506. package/dist/core/canvas/nav-model.js +32 -18
  507. package/dist/core/canvas/paths.d.ts +18 -1
  508. package/dist/core/canvas/paths.js +31 -2
  509. package/dist/core/canvas/pid.d.ts +6 -0
  510. package/dist/core/canvas/pid.js +13 -0
  511. package/dist/core/canvas/render.d.ts +25 -0
  512. package/dist/core/canvas/render.js +96 -13
  513. package/dist/core/canvas/status-glyph.d.ts +35 -0
  514. package/dist/core/canvas/status-glyph.js +104 -0
  515. package/dist/core/canvas/triggers.d.ts +108 -0
  516. package/dist/core/canvas/triggers.js +320 -0
  517. package/dist/core/canvas/types.d.ts +130 -48
  518. package/dist/core/command.js +13 -4
  519. package/dist/core/config.js +114 -16
  520. package/dist/core/fault-classifier.d.ts +41 -0
  521. package/dist/core/fault-classifier.js +110 -0
  522. package/dist/core/feed/inbox.d.ts +15 -0
  523. package/dist/core/feed/inbox.js +40 -14
  524. package/dist/core/frontmatter.d.ts +1 -11
  525. package/dist/core/frontmatter.js +1 -55
  526. package/dist/core/hearth/__tests__/model-auth-guest.test.js +151 -0
  527. package/dist/core/hearth/config.d.ts +3 -0
  528. package/dist/core/hearth/config.js +111 -0
  529. package/dist/core/hearth/guest-env.d.ts +9 -0
  530. package/dist/core/hearth/guest-env.js +27 -0
  531. package/dist/core/hearth/index.d.ts +5 -0
  532. package/dist/core/hearth/index.js +5 -0
  533. package/dist/core/hearth/model-auth-guest.d.ts +8 -0
  534. package/dist/core/hearth/model-auth-guest.js +435 -0
  535. package/dist/core/hearth/provider.d.ts +28 -0
  536. package/dist/core/hearth/provider.js +10 -0
  537. package/dist/core/hearth/providers/blaxel-bootstrap.d.ts +12 -0
  538. package/dist/core/hearth/providers/blaxel-bootstrap.js +147 -0
  539. package/dist/core/hearth/providers/blaxel-home.d.ts +15 -0
  540. package/dist/core/hearth/providers/blaxel-home.js +136 -0
  541. package/dist/core/hearth/providers/blaxel.d.ts +31 -0
  542. package/dist/core/hearth/providers/blaxel.js +282 -0
  543. package/dist/core/hearth/providers/types.d.ts +77 -0
  544. package/dist/core/hearth/registry.d.ts +15 -0
  545. package/dist/core/hearth/registry.js +180 -0
  546. package/dist/core/hearth/types.d.ts +156 -0
  547. package/dist/core/help.d.ts +16 -0
  548. package/dist/core/help.js +2 -0
  549. package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.js +79 -0
  550. package/dist/core/{skill-sync → host-exports}/builtins.d.ts +21 -13
  551. package/dist/core/host-exports/builtins.js +68 -0
  552. package/dist/core/{skill-sync → host-exports}/export.d.ts +9 -6
  553. package/dist/core/{skill-sync → host-exports}/export.js +37 -14
  554. package/dist/core/io.js +1 -1
  555. package/dist/core/log.d.ts +9 -0
  556. package/dist/core/log.js +113 -0
  557. package/dist/core/memory-resolver.d.ts +13 -13
  558. package/dist/core/memory-resolver.js +70 -51
  559. package/dist/core/personas/index.d.ts +4 -4
  560. package/dist/core/personas/index.js +2 -2
  561. package/dist/core/personas/loader.d.ts +51 -0
  562. package/dist/core/personas/loader.js +54 -50
  563. package/dist/core/personas/resolve.d.ts +43 -27
  564. package/dist/core/personas/resolve.js +336 -94
  565. package/dist/core/preview-registry.d.ts +25 -0
  566. package/dist/core/preview-registry.js +2047 -0
  567. package/dist/core/resolver.d.ts +1 -0
  568. package/dist/core/resolver.js +23 -16
  569. package/dist/core/runtime/auth-reload.d.ts +7 -0
  570. package/dist/core/runtime/auth-reload.js +69 -0
  571. package/dist/core/runtime/bearings.d.ts +46 -25
  572. package/dist/core/runtime/bearings.js +313 -52
  573. package/dist/core/runtime/branded-host.d.ts +4 -2
  574. package/dist/core/runtime/branded-host.js +66 -4
  575. package/dist/core/runtime/broker-protocol.d.ts +40 -5
  576. package/dist/core/runtime/broker-protocol.js +2 -2
  577. package/dist/core/runtime/broker.js +343 -18
  578. package/dist/core/runtime/close.js +39 -31
  579. package/dist/core/runtime/connectivity.d.ts +12 -0
  580. package/dist/core/runtime/connectivity.js +73 -0
  581. package/dist/core/runtime/fault-recovery-nudge.d.ts +2 -0
  582. package/dist/core/runtime/fault-recovery-nudge.js +2 -0
  583. package/dist/core/runtime/fault-recovery.d.ts +23 -0
  584. package/dist/core/runtime/fault-recovery.js +74 -0
  585. package/dist/core/runtime/fault.d.ts +25 -0
  586. package/dist/core/runtime/fault.js +176 -0
  587. package/dist/core/runtime/front-door.d.ts +1 -1
  588. package/dist/core/runtime/front-door.js +2 -2
  589. package/dist/core/runtime/host.d.ts +10 -0
  590. package/dist/core/runtime/host.js +71 -9
  591. package/dist/core/runtime/kickoff.js +32 -46
  592. package/dist/core/runtime/launch.d.ts +41 -21
  593. package/dist/core/runtime/launch.js +165 -52
  594. package/dist/core/runtime/lifecycle.js +7 -7
  595. package/dist/core/runtime/model-swap.d.ts +18 -0
  596. package/dist/core/runtime/model-swap.js +95 -0
  597. package/dist/core/runtime/naming.d.ts +7 -0
  598. package/dist/core/runtime/naming.js +61 -9
  599. package/dist/core/runtime/nodes.js +6 -1
  600. package/dist/core/runtime/persona.js +16 -17
  601. package/dist/core/runtime/placement.d.ts +41 -36
  602. package/dist/core/runtime/placement.js +159 -74
  603. package/dist/core/runtime/promote.d.ts +2 -0
  604. package/dist/core/runtime/promote.js +23 -3
  605. package/dist/core/runtime/recycle.js +13 -11
  606. package/dist/core/runtime/reset.d.ts +6 -3
  607. package/dist/core/runtime/reset.js +5 -5
  608. package/dist/core/runtime/revive-all.d.ts +5 -2
  609. package/dist/core/runtime/revive-all.js +5 -2
  610. package/dist/core/runtime/revive.d.ts +19 -8
  611. package/dist/core/runtime/revive.js +79 -25
  612. package/dist/core/runtime/roadmap.d.ts +1 -1
  613. package/dist/core/runtime/roadmap.js +1 -1
  614. package/dist/core/runtime/spawn.d.ts +3 -3
  615. package/dist/core/runtime/spawn.js +37 -13
  616. package/dist/core/runtime/stop-guard.js +11 -6
  617. package/dist/core/runtime/surface-bg.js +1 -1
  618. package/dist/core/runtime/tmux-chrome.d.ts +1 -1
  619. package/dist/core/runtime/tmux-chrome.js +1 -1
  620. package/dist/core/runtime/tmux.d.ts +30 -7
  621. package/dist/core/runtime/tmux.js +138 -84
  622. package/dist/core/runtime/view-socket-client.d.ts +46 -0
  623. package/dist/core/runtime/view-socket-client.js +203 -0
  624. package/dist/core/scope.d.ts +9 -0
  625. package/dist/core/scope.js +37 -15
  626. package/dist/core/substrate/index.d.ts +1 -1
  627. package/dist/core/substrate/index.js +1 -1
  628. package/dist/core/substrate/on-read.js +39 -25
  629. package/dist/core/substrate/render.d.ts +10 -13
  630. package/dist/core/substrate/render.js +56 -51
  631. package/dist/core/tui/host.js +83 -18
  632. package/dist/core/view/__tests__/transport-cache.test.js +62 -0
  633. package/dist/core/view/contract.d.ts +20 -0
  634. package/dist/core/view/loader.js +2 -2
  635. package/dist/core/view/stream-local.d.ts +3 -0
  636. package/dist/core/view/stream-local.js +184 -0
  637. package/dist/core/view/transport-cache.d.ts +8 -0
  638. package/dist/core/view/transport-cache.js +38 -0
  639. package/dist/core/view/transport-local.js +4 -0
  640. package/dist/core/view/transport.d.ts +7 -1
  641. package/dist/core/wake.d.ts +2 -2
  642. package/dist/core/wake.js +7 -7
  643. package/dist/daemon/__tests__/predicate-eval.test.js +109 -0
  644. package/dist/daemon/crtrd.d.ts +3 -19
  645. package/dist/daemon/crtrd.js +360 -280
  646. package/dist/daemon/manage.d.ts +18 -1
  647. package/dist/daemon/manage.js +54 -9
  648. package/dist/daemon/predicate-eval.d.ts +52 -0
  649. package/dist/daemon/predicate-eval.js +248 -0
  650. package/dist/hearth/control-plane/__tests__/node-message.test.js +60 -0
  651. package/dist/hearth/control-plane/__tests__/rate-limit-recurrence.test.js +49 -0
  652. package/dist/hearth/control-plane/__tests__/relay-security.test.js +314 -0
  653. package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.d.ts +1 -0
  654. package/dist/hearth/control-plane/__tests__/scheduler-scan-loop.test.js +133 -0
  655. package/dist/hearth/control-plane/__tests__/trigger-delivery.test.d.ts +1 -0
  656. package/dist/hearth/control-plane/__tests__/trigger-delivery.test.js +170 -0
  657. package/dist/hearth/control-plane/__tests__/webhook-ingress.test.d.ts +1 -0
  658. package/dist/hearth/control-plane/__tests__/webhook-ingress.test.js +167 -0
  659. package/dist/hearth/control-plane/config.d.ts +21 -0
  660. package/dist/hearth/control-plane/config.js +77 -0
  661. package/dist/hearth/control-plane/db.d.ts +30 -0
  662. package/dist/hearth/control-plane/db.js +534 -0
  663. package/dist/hearth/control-plane/ingress/rate-limit.d.ts +24 -0
  664. package/dist/hearth/control-plane/ingress/rate-limit.js +100 -0
  665. package/dist/hearth/control-plane/ingress/route-store.d.ts +31 -0
  666. package/dist/hearth/control-plane/ingress/route-store.js +61 -0
  667. package/dist/hearth/control-plane/ingress/webhook-delivery-store.d.ts +41 -0
  668. package/dist/hearth/control-plane/ingress/webhook-delivery-store.js +69 -0
  669. package/dist/hearth/control-plane/ingress/webhook-route.d.ts +55 -0
  670. package/dist/hearth/control-plane/ingress/webhook-route.js +285 -0
  671. package/dist/hearth/control-plane/main.d.ts +1 -0
  672. package/dist/hearth/control-plane/main.js +88 -0
  673. package/dist/hearth/control-plane/node-message.d.ts +31 -0
  674. package/dist/hearth/control-plane/node-message.js +98 -0
  675. package/dist/hearth/control-plane/register.d.ts +15 -0
  676. package/dist/hearth/control-plane/register.js +34 -0
  677. package/dist/hearth/control-plane/registry.d.ts +17 -0
  678. package/dist/hearth/control-plane/registry.js +161 -0
  679. package/dist/hearth/control-plane/relay.d.ts +40 -0
  680. package/dist/hearth/control-plane/relay.js +642 -0
  681. package/dist/hearth/control-plane/scheduler/fire-store.d.ts +36 -0
  682. package/dist/hearth/control-plane/scheduler/fire-store.js +73 -0
  683. package/dist/hearth/control-plane/scheduler/recurrence.d.ts +7 -0
  684. package/dist/hearth/control-plane/scheduler/recurrence.js +58 -0
  685. package/dist/hearth/control-plane/scheduler/scan-loop.d.ts +38 -0
  686. package/dist/hearth/control-plane/scheduler/scan-loop.js +138 -0
  687. package/dist/hearth/control-plane/scheduler/schedule-store.d.ts +32 -0
  688. package/dist/hearth/control-plane/scheduler/schedule-store.js +66 -0
  689. package/dist/hearth/control-plane/secrets.d.ts +17 -0
  690. package/dist/hearth/control-plane/secrets.js +113 -0
  691. package/dist/hearth/control-plane/server.d.ts +27 -0
  692. package/dist/hearth/control-plane/server.js +346 -0
  693. package/dist/hearth/control-plane/session.d.ts +68 -0
  694. package/dist/hearth/control-plane/session.js +273 -0
  695. package/dist/hearth/control-plane/triggers/acl.d.ts +14 -0
  696. package/dist/hearth/control-plane/triggers/acl.js +52 -0
  697. package/dist/hearth/control-plane/triggers/audit-store.d.ts +38 -0
  698. package/dist/hearth/control-plane/triggers/audit-store.js +79 -0
  699. package/dist/hearth/control-plane/triggers/deliver.d.ts +43 -0
  700. package/dist/hearth/control-plane/triggers/deliver.js +76 -0
  701. package/dist/hearth/control-plane/triggers/envelope.d.ts +29 -0
  702. package/dist/hearth/control-plane/triggers/envelope.js +38 -0
  703. package/dist/hearth/control-plane/types.d.ts +66 -0
  704. package/dist/hearth/control-plane/types.js +1 -0
  705. package/dist/hearth/control-plane/wake.d.ts +80 -0
  706. package/dist/hearth/control-plane/wake.js +312 -0
  707. package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.d.ts +1 -0
  708. package/dist/hearth/wake-proxy/__tests__/anthropic-oauth.test.js +289 -0
  709. package/dist/hearth/wake-proxy/__tests__/config-timeout.test.d.ts +1 -0
  710. package/dist/hearth/wake-proxy/__tests__/config-timeout.test.js +34 -0
  711. package/dist/hearth/wake-proxy/__tests__/guest-source.test.d.ts +1 -0
  712. package/dist/hearth/wake-proxy/__tests__/guest-source.test.js +203 -0
  713. package/dist/hearth/wake-proxy/__tests__/hardening.test.d.ts +1 -0
  714. package/dist/hearth/wake-proxy/__tests__/hardening.test.js +59 -0
  715. package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.d.ts +1 -0
  716. package/dist/hearth/wake-proxy/__tests__/hearth-status-route.test.js +372 -0
  717. package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.d.ts +1 -0
  718. package/dist/hearth/wake-proxy/__tests__/http-running-route-fast-path.test.js +258 -0
  719. package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.d.ts +1 -0
  720. package/dist/hearth/wake-proxy/__tests__/model-auth-routes.test.js +437 -0
  721. package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.d.ts +1 -0
  722. package/dist/hearth/wake-proxy/__tests__/static-asset-allowlist.test.js +15 -0
  723. package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.d.ts +1 -0
  724. package/dist/hearth/wake-proxy/__tests__/warm-path-concurrency.test.js +141 -0
  725. package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.d.ts +1 -0
  726. package/dist/hearth/wake-proxy/__tests__/ws-teardown-accounting.test.js +143 -0
  727. package/dist/hearth/wake-proxy/anthropic-oauth.d.ts +58 -0
  728. package/dist/hearth/wake-proxy/anthropic-oauth.js +189 -0
  729. package/dist/hearth/wake-proxy/auth.d.ts +22 -0
  730. package/dist/hearth/wake-proxy/auth.js +128 -0
  731. package/dist/hearth/wake-proxy/config.d.ts +2 -0
  732. package/dist/hearth/wake-proxy/config.js +151 -0
  733. package/dist/hearth/wake-proxy/guest-source.d.ts +14 -0
  734. package/dist/hearth/wake-proxy/guest-source.js +130 -0
  735. package/dist/hearth/wake-proxy/hearth-status.d.ts +44 -0
  736. package/dist/hearth/wake-proxy/hearth-status.js +267 -0
  737. package/dist/hearth/wake-proxy/home.d.ts +61 -0
  738. package/dist/hearth/wake-proxy/home.js +333 -0
  739. package/dist/hearth/wake-proxy/main.d.ts +1 -0
  740. package/dist/hearth/wake-proxy/main.js +134 -0
  741. package/dist/hearth/wake-proxy/model-auth.d.ts +13 -0
  742. package/dist/hearth/wake-proxy/model-auth.js +345 -0
  743. package/dist/hearth/wake-proxy/proxy.d.ts +35 -0
  744. package/dist/hearth/wake-proxy/proxy.js +716 -0
  745. package/dist/hearth/wake-proxy/public-source-gate.d.ts +9 -0
  746. package/dist/hearth/wake-proxy/public-source-gate.js +409 -0
  747. package/dist/hearth/wake-proxy/redact.d.ts +1 -0
  748. package/dist/hearth/wake-proxy/redact.js +17 -0
  749. package/dist/hearth/wake-proxy/server.d.ts +11 -0
  750. package/dist/hearth/wake-proxy/server.js +142 -0
  751. package/dist/hearth/wake-proxy/state.d.ts +18 -0
  752. package/dist/hearth/wake-proxy/state.js +342 -0
  753. package/dist/hearth/wake-proxy/types.d.ts +76 -0
  754. package/dist/hearth/wake-proxy/types.js +1 -0
  755. package/dist/index.js +3 -2
  756. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +6 -5
  757. package/dist/pi-extensions/canvas-context-intro.js +7 -7
  758. package/dist/pi-extensions/canvas-doc-substrate.js +47 -24
  759. package/dist/pi-extensions/canvas-nav.js +16 -9
  760. package/dist/pi-extensions/canvas-stophook.d.ts +1 -1
  761. package/dist/pi-extensions/canvas-stophook.js +78 -11
  762. package/dist/prompts/view.js +7 -8
  763. package/dist/types.d.ts +39 -20
  764. package/dist/types.js +38 -13
  765. package/dist/web/runtime.js +141 -42
  766. package/dist/web/transport-http.js +7 -5
  767. package/dist/web/transport-stream.d.ts +3 -0
  768. package/dist/web/transport-stream.js +204 -0
  769. package/dist/web-client/assets/fragment-mono-latin-400-normal-BYwT3kSJ.woff +0 -0
  770. package/dist/web-client/assets/fragment-mono-latin-400-normal-yxdJ5AmL.woff2 +0 -0
  771. package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-BbKYyvR9.woff2 +0 -0
  772. package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-CT4YFKeK.woff +0 -0
  773. package/dist/web-client/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2 +0 -0
  774. package/dist/web-client/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2 +0 -0
  775. package/dist/web-client/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2 +0 -0
  776. package/dist/web-client/assets/index-BRKxe-hy.js +80 -0
  777. package/dist/web-client/assets/index-BZUxTkv5.css +2 -0
  778. package/dist/web-client/assets/instrument-sans-latin-ext-wght-normal-B5bTHO_g.woff2 +0 -0
  779. package/dist/web-client/assets/instrument-sans-latin-wght-normal-BbzFLZTg.woff2 +0 -0
  780. package/dist/web-client/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2 +0 -0
  781. package/dist/web-client/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2 +0 -0
  782. package/dist/web-client/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2 +0 -0
  783. package/dist/web-client/index.html +3 -2
  784. package/package.json +37 -11
  785. package/scripts/postinstall.mjs +8 -0
  786. package/dist/clients/attach/__tests__/action-parity.test.js +0 -48
  787. package/dist/clients/attach/__tests__/clipboard-image.test.js +0 -76
  788. package/dist/clients/attach/__tests__/editor-newline.test.js +0 -82
  789. package/dist/clients/attach/__tests__/git-info.test.js +0 -31
  790. package/dist/clients/attach/__tests__/onrequest-wired.test.js +0 -20
  791. package/dist/clients/attach/__tests__/reconnect-giveup.test.js +0 -30
  792. package/dist/clients/attach/__tests__/slash-quit-copy.test.js +0 -42
  793. package/dist/clients/attach/__tests__/titled-editor.test.js +0 -39
  794. package/dist/commands/memory/__tests__/lint-schema.test.js +0 -52
  795. package/dist/core/__tests__/argv-parser.test.js +0 -217
  796. package/dist/core/__tests__/draw-style.test.js +0 -258
  797. package/dist/core/__tests__/error-stall-recycle.test.js +0 -141
  798. package/dist/core/__tests__/frame-decoder-perf.test.js +0 -224
  799. package/dist/core/__tests__/keystone.test.js +0 -185
  800. package/dist/core/__tests__/listing-completeness.test.js +0 -31
  801. package/dist/core/__tests__/memory-resolver.test.js +0 -108
  802. package/dist/core/__tests__/memory.test.js +0 -60
  803. package/dist/core/__tests__/pane-column.test.js +0 -153
  804. package/dist/core/__tests__/persona-compose.test.js +0 -53
  805. package/dist/core/__tests__/persona-subkind.test.js +0 -65
  806. package/dist/core/__tests__/persona.test.js +0 -107
  807. package/dist/core/__tests__/unknown-path.test.js +0 -58
  808. package/dist/core/canvas/wakeups.d.ts +0 -76
  809. package/dist/core/canvas/wakeups.js +0 -185
  810. package/dist/core/skill-sync/__tests__/dry-run-wrote-count.test.js +0 -57
  811. package/dist/core/skill-sync/builtins.js +0 -112
  812. package/dist/core/skill-sync/claude-plugins.d.ts +0 -23
  813. package/dist/core/skill-sync/claude-plugins.js +0 -71
  814. package/dist/core/skill-sync/engine.d.ts +0 -42
  815. package/dist/core/skill-sync/engine.js +0 -633
  816. package/dist/core/skill-sync/manifest.d.ts +0 -64
  817. package/dist/core/skill-sync/manifest.js +0 -181
  818. package/dist/core/skill-sync/profile.d.ts +0 -76
  819. package/dist/core/skill-sync/profile.js +0 -173
  820. package/dist/core/skill-sync/snapshot.d.ts +0 -57
  821. package/dist/core/skill-sync/snapshot.js +0 -120
  822. package/dist/pi-extensions/canvas-commands.d.ts +0 -37
  823. package/dist/pi-extensions/canvas-commands.js +0 -113
  824. package/dist/pi-extensions/canvas-resume.d.ts +0 -21
  825. package/dist/pi-extensions/canvas-resume.js +0 -83
  826. package/dist/pi-extensions/canvas-view.d.ts +0 -21
  827. package/dist/pi-extensions/canvas-view.js +0 -76
  828. package/dist/web-client/assets/index-BUvQb4hR.css +0 -2
  829. package/dist/web-client/assets/index-ClLQXYAE.js +0 -10
  830. /package/dist/clients/attach/__tests__/{action-parity.test.d.ts → crtr-output-coverage.test.d.ts} +0 -0
  831. /package/dist/clients/attach/__tests__/{clipboard-image.test.d.ts → crtr-output-render.test.d.ts} +0 -0
  832. /package/dist/clients/{attach/__tests__/editor-newline.test.d.ts → web/__tests__/source-cache.test.d.ts} +0 -0
  833. /package/dist/{clients/attach/__tests__/git-info.test.d.ts → commands/sys/__tests__/sync-import.test.d.ts} +0 -0
  834. /package/dist/{clients/attach/__tests__/onrequest-wired.test.d.ts → core/__tests__/boot.test.d.ts} +0 -0
  835. /package/dist/{clients/attach/__tests__/reconnect-giveup.test.d.ts → core/__tests__/broker-preflight.test.d.ts} +0 -0
  836. /package/dist/{clients/attach/__tests__/slash-quit-copy.test.d.ts → core/__tests__/chat-view-reconnect.test.d.ts} +0 -0
  837. /package/dist/{clients/attach/__tests__/titled-editor.test.d.ts → core/__tests__/connection-reconnect-resume.test.d.ts} +0 -0
  838. /package/dist/{commands/memory/__tests__/lint-schema.test.d.ts → core/__tests__/hearth-bootstrap.test.d.ts} +0 -0
  839. /package/dist/core/__tests__/{argv-parser.test.d.ts → preview-registry-sync.test.d.ts} +0 -0
  840. /package/dist/core/__tests__/{draw-style.test.d.ts → prune-to-limit.test.d.ts} +0 -0
  841. /package/dist/core/__tests__/{error-stall-recycle.test.d.ts → stranded-relaunch.test.d.ts} +0 -0
  842. /package/dist/core/__tests__/{frame-decoder-perf.test.d.ts → trigger-migration.test.d.ts} +0 -0
  843. /package/dist/core/__tests__/{keystone.test.d.ts → yield-ensures-daemon.test.d.ts} +0 -0
  844. /package/dist/core/{__tests__/listing-completeness.test.d.ts → hearth/__tests__/model-auth-guest.test.d.ts} +0 -0
  845. /package/dist/core/{__tests__/memory-resolver.test.d.ts → hearth/providers/types.js} +0 -0
  846. /package/dist/core/{__tests__/memory.test.d.ts → hearth/types.js} +0 -0
  847. /package/dist/core/{__tests__/pane-column.test.d.ts → host-exports/__tests__/export-prunes-boot-skill.test.d.ts} +0 -0
  848. /package/dist/core/{__tests__/persona-compose.test.d.ts → view/__tests__/transport-cache.test.d.ts} +0 -0
  849. /package/dist/{core/__tests__/persona-subkind.test.d.ts → daemon/__tests__/predicate-eval.test.d.ts} +0 -0
  850. /package/dist/{core/__tests__/persona.test.d.ts → hearth/control-plane/__tests__/node-message.test.d.ts} +0 -0
  851. /package/dist/{core/__tests__/unknown-path.test.d.ts → hearth/control-plane/__tests__/rate-limit-recurrence.test.d.ts} +0 -0
  852. /package/dist/{core/skill-sync/__tests__/dry-run-wrote-count.test.d.ts → hearth/control-plane/__tests__/relay-security.test.d.ts} +0 -0
@@ -8,7 +8,7 @@
8
8
  // Layout (the framing a revived node sees):
9
9
  // <roadmap file=…>…</roadmap> its evolving plan — the source of truth
10
10
  // <context-dir path=…>…</context-dir> what artifacts exist on disk
11
- // <feed>Awaiting N nodes … digest</feed> who it waits on + unread reports
11
+ // <feed>Awaiting N nodes … digest</feed> live wait state + unread/catch-up feed
12
12
  // <yield-message>…</yield-message> the note its prior self left on yield
13
13
  //
14
14
  // The roadmap (NOT the original spawn prompt) carries the goal on a refresh: its
@@ -19,7 +19,6 @@
19
19
  // yield-message is one-shot (consumed on the next revive).
20
20
  import { existsSync, readFileSync, writeFileSync, rmSync, mkdirSync, readdirSync, } from 'node:fs';
21
21
  import { join } from 'node:path';
22
- import { homedir } from 'node:os';
23
22
  import { contextDir, reportsDir, getNode, subscriptionsOf, subscribersOf, } from '../canvas/index.js';
24
23
  import { readRoadmap, roadmapPath } from './roadmap.js';
25
24
  import { buildWakeBearings } from './bearings.js';
@@ -132,56 +131,41 @@ export function drainBearings(meta) {
132
131
  // conversation is gone AND the monotonic inbox cursor has already advanced past
133
132
  // everything drained pre-yield, so the revived node loses sight of reports its
134
133
  // subscriptions pushed BEFORE the yield. The bodies are never lost — they persist
135
- // at reports/<ts>-<kind>.md forever — but nothing pointed the revived node at
136
- // them. reportHistoryLines renders those existing on-disk paths so it can catch
137
- // up; PATHS ONLY (the node dereferences what it needs), no body read, no parse.
138
- const REPORT_HISTORY_PER_SOURCE = 5;
139
- const REPORT_HISTORY_TOTAL_CAP = 20;
140
- /** Collapse the home-dir prefix of an absolute path to a leading `~`, so report
141
- * paths render as `~/.crouter/canvas/nodes/<id>/reports/<ts>.md` instead of
142
- * repeating the long absolute home prefix on every catch-up line — cheaper
143
- * context, still dereferenceable by the revived node. A path NOT under the home
144
- * dir (e.g. a CRTR_HOME / project-scope home elsewhere) is returned unchanged,
145
- * so we never mangle a non-home path. */
146
- function tildify(p) {
147
- const home = homedir();
148
- return p.startsWith(home) ? '~' + p.slice(home.length) : p;
134
+ // at reports/<ts>-<kind>.md forever — but a fresh revive needs a bounded index
135
+ // that says history exists and how to expand it, not every path preloaded.
136
+ const REPORT_HISTORY_SOURCE_CAP = 8;
137
+ function reportKind(filename) {
138
+ return filename.match(/^[0-9]{8}T[0-9]{6}-(.+)\.md$/)?.[1] ?? 'report';
149
139
  }
150
- /** Recent report file PATHS (most-recent-first), grouped by publisher, for each
151
- * ACTIVE subscription of `nodeId` — independent of publisher liveness, so a
152
- * finished worker's history still surfaces for catch-up. Skips subscriptions
153
- * whose reports dir is empty/missing. Returns [] when the node has no active
154
- * subscriptions or none have reports yet (caller renders nothing extra). */
155
- function reportHistoryLines(nodeId) {
156
- const lines = [];
157
- let total = 0;
140
+ /** Condensed report-history index for each ACTIVE subscription of `nodeId`
141
+ * independent of publisher liveness, so a finished worker's history still
142
+ * surfaces for catch-up. Each source carries only its count and newest report
143
+ * ref; older refs stay one command away via `canvas history show`. */
144
+ function reportHistorySources(nodeId) {
145
+ const out = [];
158
146
  for (const sub of subscriptionsOf(nodeId).filter((s) => s.active)) {
159
- if (total >= REPORT_HISTORY_TOTAL_CAP)
160
- break;
161
147
  const dir = reportsDir(sub.node_id);
162
148
  if (!existsSync(dir))
163
149
  continue;
164
150
  const files = readdirSync(dir)
165
151
  .filter((f) => f.endsWith('.md'))
166
152
  .sort() // YYYYMMDDTHHmmss-<kind>.md — lexical sort = chronological
167
- .reverse() // most recent first
168
- .slice(0, REPORT_HISTORY_PER_SOURCE);
153
+ .reverse(); // most recent first
169
154
  if (files.length === 0)
170
155
  continue;
171
156
  const pub = getNode(sub.node_id);
172
- lines.push(` ${pub !== null ? `${pub.name} (${sub.node_id})` : sub.node_id}:`);
173
- for (const f of files) {
174
- if (total >= REPORT_HISTORY_TOTAL_CAP)
175
- break;
176
- lines.push(` ${tildify(join(dir, f))}`);
177
- total++;
178
- }
157
+ out.push({
158
+ nodeId: sub.node_id,
159
+ name: pub?.name ?? sub.node_id,
160
+ count: files.length,
161
+ latest: files[0],
162
+ });
179
163
  }
180
- return lines;
164
+ return out.sort((a, b) => b.latest.localeCompare(a.latest));
181
165
  }
182
166
  /** Render the <feed> block PURELY: the live "awaiting" roster (a read), the
183
- * already-drained unread digest (from drainBearings), and the on-disk report
184
- * history of this node's subscriptions (catch-up pointers). No cursor write. */
167
+ * already-drained unread digest (from drainBearings), and a progressive index
168
+ * to on-disk report history. No cursor write. */
185
169
  function feedBlock(nodeId, unreadDigest) {
186
170
  // Awaiting = active subscriptions whose publisher is still live (active|idle).
187
171
  const awaiting = subscriptionsOf(nodeId)
@@ -210,14 +194,16 @@ function feedBlock(nodeId, unreadDigest) {
210
194
  }
211
195
  // Catch-up history. The unread digest above only covers what arrived since the
212
196
  // cursor; on a refresh-revive the cursor has already passed everything drained
213
- // pre-yield, so point the node at the durable report history that persists on
214
- // disk. Renders nothing when the node has no active subscriptions with reports.
215
- const history = reportHistoryLines(nodeId);
197
+ // pre-yield, so preserve the breadcrumb without preloading every old report.
198
+ const history = reportHistorySources(nodeId);
216
199
  if (history.length > 0) {
217
- lines.push('', 'Report history on disk — the nodes you subscribe to keep every push they made; ' +
218
- 'these persist across your context refresh (the unread digest above only covers ' +
219
- 'what arrived since your cursor). Most recent first; dereference any you need. ' +
220
- '`crtr feed read --all` replays the full inbox history, cursor-independent.', ...history);
200
+ const visible = history.slice(0, REPORT_HISTORY_SOURCE_CAP);
201
+ const hidden = history.length - visible.length;
202
+ const total = history.reduce((sum, h) => sum + h.count, 0);
203
+ lines.push('', `Report history on disk (collapsed): ${total} report${total === 1 ? '' : 's'} across ${history.length} subscribed node${history.length === 1 ? '' : 's'}. This is a catch-up index for reports your cursor already passed; read only what matters.`, ...visible.map((h) => {
204
+ const ref = `${h.nodeId}:reports/${h.latest}`;
205
+ return ` - ${h.name} (${h.nodeId}): ${h.count} report${h.count === 1 ? '' : 's'}; latest ${reportKind(h.latest)}: ${ref}`;
206
+ }), ...(hidden > 0 ? [` - … ${hidden} more subscribed node${hidden === 1 ? '' : 's'} with reports hidden`] : []), 'Expand: `crtr canvas history read <ref>` for one listed report; `crtr canvas history show <node-id> --type report` for that node\'s full report list; `crtr feed read --all` for cursor-independent inbox history.');
221
207
  }
222
208
  return `<feed>\n${lines.join('\n')}\n</feed>`;
223
209
  }
@@ -282,7 +268,7 @@ export function buildReviveKickoff(meta, bearings, wakeReason) {
282
268
  'directly with the user, so stay available and continue the conversation when they ' +
283
269
  'write back.');
284
270
  // Persona-transition catch-up. If the node's mode/lifecycle was changed
285
- // EXTERNALLY while it was dormant (e.g. a human ran `crtr node lifecycle` /
271
+ // EXTERNALLY while it was dormant (e.g. a human ran `crtr node config --lifecycle` /
286
272
  // `node promote --node` on it), it never saw the turn_end injector. drainBearings
287
273
  // captured the guidance for its new persona and committed the ack (the second
288
274
  // and only other delivery site); we just surface it. A clean fresh revive has
@@ -1,4 +1,5 @@
1
1
  import type { NodeMeta, LaunchSpec, Mode, Lifecycle } from '../canvas/index.js';
2
+ import type { ModelProvider, ModelStrength } from '../../types.js';
2
3
  export declare const CANVAS_STOPHOOK_PATH: string;
3
4
  export declare const CANVAS_INBOX_WATCHER_PATH: string;
4
5
  export declare const CANVAS_NAV_PATH: string;
@@ -7,32 +8,46 @@ export declare const CANVAS_GOAL_CAPTURE_PATH: string;
7
8
  export declare const CANVAS_PASSIVE_CONTEXT_PATH: string;
8
9
  export declare const CANVAS_CONTEXT_INTRO_PATH: string;
9
10
  export declare const CANVAS_DOC_SUBSTRATE_PATH: string;
10
- export declare const CANVAS_COMMANDS_PATH: string;
11
- export declare const CANVAS_RESUME_PATH: string;
12
- export declare const CANVAS_VIEW_PATH: string;
13
11
  /** The canvas extensions every node loads, in order: stophook (routing +
14
12
  * telemetry + session-id capture), inbox-watcher (wake), nav (in-editor
15
13
  * graph chrome), recap (the per-node inactivity recap card — Haiku over the
16
14
  * conversation, shown above the manager line after 300s of no message),
17
15
  * goal-capture (persist the first user message as the goal),
18
16
  * passive-context (drain passive backlog as pre-text on the next message),
19
- * context-intro (inject the <crtr-context> bearings block carrying the
20
- * <knowledge> catalog as its own session message, once per brand-new chat),
21
- * doc-substrate (the unified document substrate's two hooks: <preferences> +
22
- * <memory-guidance> at boot, on-read context injection), commands (the /promote slash-command), resume (the /resume-node
23
- * whole-canvas picker → `crtr node focus`), view (the /view popup → `crtr
24
- * view pick` / `crtr view run <name>`).
17
+ * context-intro (inject the <crtr-bearings> block + the <memory kind="knowledge">
18
+ * catalog as its own session message, once per brand-new chat),
19
+ * doc-substrate (the unified document substrate's two hooks: the
20
+ * <memory kind="preference"> block at boot, on-read context injection).
25
21
  * All self-gate on CRTR_NODE_ID. goal-capture precedes passive-context so it
26
22
  * reads the raw user text. */
27
23
  export declare const CANVAS_EXTENSIONS: string[];
28
- /** The named capability tiers a caller picks with `--model`, in descending
29
- * strength. Each maps to a concrete pi model spec. `strong`/`medium`/`light`
30
- * resolve to the latest opus/sonnet/haiku; `ultra` to the frontier model. */
31
- export declare const MODEL_TIERS: Record<string, string>;
32
- /** Resolve a model token to the spec pi gets via `--model`. A named tier
33
- * (ultra/strong/medium/light) maps to its concrete spec; a bare family alias
34
- * (sonnet/opus/haiku) maps to that family's current versioned id; anything
35
- * with a `/` or an unknown name passes through. */
24
+ /** Env var naming the DEFAULT provider for an UNqualified bare strength only.
25
+ * `CRTR_MODEL_PROVIDER=openai` (case-insensitive) makes a bare `strong` resolve
26
+ * on the OpenAI ladder; anything else defaults to Anthropic. A configured
27
+ * defaultProvider in config.json wins over this env. */
28
+ export declare const OPENAI_PROVIDER_ENV = "CRTR_MODEL_PROVIDER";
29
+ export interface EquivalentProviderModel {
30
+ fromProvider: ModelProvider;
31
+ toProvider: ModelProvider;
32
+ strength: ModelStrength;
33
+ model: string;
34
+ }
35
+ /** Map a concrete ladder model back to its provider×strength cell, then return
36
+ * the other configured provider's model at the same strength. `failedProviders`
37
+ * is per-turn state: once a provider has produced a retryable outage error, do
38
+ * not bounce back to it or keep reattempting the same failed provider. */
39
+ export declare function equivalentOtherProviderModel(currentModel: string, failedProviders?: ReadonlySet<ModelProvider>): EquivalentProviderModel | null;
40
+ /** Resolve a persona/caller `model:` token to the concrete `model:thinking`
41
+ * spec pi gets via `--model`, in order:
42
+ * 1. `provider/rest` — apply strength aliases to `rest`; if `provider` is
43
+ * `anthropic`/`openai` AND `rest` is a strength, return that ladder cell
44
+ * (the word `openai` maps to the openai-codex ladder). Otherwise it is a
45
+ * concrete `provider/id` (incl. any `:thinking` suffix) → pass through.
46
+ * 2. Bare strength (incl. aliases normal/weak) → the default-provider ladder
47
+ * cell (config default provider, then CRTR_MODEL_PROVIDER, else anthropic).
48
+ * 3. Bare family alias (opus/sonnet/haiku) → the Anthropic ladder's
49
+ * strong/medium/light, ALWAYS anthropic (ignores the env/config default).
50
+ * 4. Anything else → pass through unchanged. */
36
51
  export declare function normalizeModel(model: string): string;
37
52
  /** Compose a node's full pi launch recipe from its persona. The system prompt
38
53
  * is composed from FOUR inputs: kind×mode (the persona body) plus lifecycle
@@ -49,7 +64,6 @@ export declare function buildLaunchSpec(kind: string, mode: Mode, opts: {
49
64
  }): {
50
65
  launch: LaunchSpec;
51
66
  lifecycle: 'terminal' | 'resident';
52
- skills: string[];
53
67
  };
54
68
  export interface PiInvocation {
55
69
  /** argv after the `pi` binary. */
@@ -63,8 +77,12 @@ export interface PiInvocation {
63
77
  * — pi COPIES that conversation into a NEW session for this node, then `prompt`
64
78
  * is delivered as the next message. One-shot at birth: the node thereafter
65
79
  * captures its OWN pi_session_file and revives by `--session` like any other.
66
- * - revive idle/done: pass `resumeSessionPath` (absolute .jsonl path, preferred)
67
- * or `resumeSessionId` (bare uuid fallback) to `--session` (keeps conversation).
80
+ * - revive idle/done: pass `resumeSessionPath` (absolute .jsonl path) to
81
+ * `--session` (keeps conversation). `resumeSessionId` (a bare uuid) is
82
+ * accepted here too, but revive.ts's `resumeArgs` never produces one —
83
+ * `headlessBrokerHost`'s preflight (host.ts) fatally rejects a bare
84
+ * `--session` id before ever spawning the broker, so a real revive only
85
+ * ever resumes by path (or falls through to fresh when no path exists).
68
86
  * - refresh-yield: fresh again (no resume) — the node re-reads its roadmap. */
69
87
  export declare function buildPiArgv(meta: NodeMeta, opts?: {
70
88
  prompt?: string;
@@ -90,7 +108,9 @@ export interface BrokerSdkConfig {
90
108
  forkFrom?: string;
91
109
  /** Resume by absolute `.jsonl` path (preferred — `SessionManager.open`). */
92
110
  resumeSessionPath?: string;
93
- /** Resume by bare session uuid (legacy fallback). */
111
+ /** Resume by bare session uuid. Accepted by the generic builder, but no live
112
+ * caller sets it — revive resumes by absolute path only, and the broker
113
+ * preflight rejects a bare `--session`. */
94
114
  resumeSessionId?: string;
95
115
  /** Model spec, e.g. `anthropic/sonnet` (`--model`). */
96
116
  model?: string;
@@ -2,17 +2,20 @@
2
2
  //
3
3
  // pi-only. No claude branch — we are a super-opinionated system. A node's
4
4
  // LaunchSpec (persisted in meta.json) is the canonical recipe the daemon
5
- // replays to revive it faithfully: `--session <id>` to wake a done/idle node
6
- // (keeps its conversation), or fresh (against the context dir) for a refresh-yield.
5
+ // replays to revive it faithfully: `--session <path>` (the saved conversation's
6
+ // absolute .jsonl) to wake a done/idle node, or fresh (against the context dir)
7
+ // for a refresh-yield.
7
8
  // The spec is rewritten on every polymorph (base→orchestrator) so a node
8
9
  // always comes back as its *current* self.
9
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
10
+ import { existsSync, mkdirSync, statSync, writeFileSync } from 'node:fs';
10
11
  import { dirname, join } from 'node:path';
11
12
  import { fileURLToPath } from 'node:url';
13
+ import { readConfig, configPath as userConfigPath } from '../config.js';
12
14
  import { resolve as resolvePersona } from '../personas/index.js';
13
15
  import { nodeEnv } from './nodes.js';
14
16
  import { editorLabel } from '../canvas/index.js';
15
17
  import { nodeDir } from '../canvas/paths.js';
18
+ import { defaultScopeConfig } from '../../types.js';
16
19
  // ---------------------------------------------------------------------------
17
20
  // The two canvas pi-extensions every node loads. They self-gate on the live
18
21
  // {kind,mode} env, so the worker→orchestrator polymorph flips hook behavior
@@ -34,21 +37,16 @@ export const CANVAS_GOAL_CAPTURE_PATH = resolveExtension('canvas-goal-capture');
34
37
  export const CANVAS_PASSIVE_CONTEXT_PATH = resolveExtension('canvas-passive-context');
35
38
  export const CANVAS_CONTEXT_INTRO_PATH = resolveExtension('canvas-context-intro');
36
39
  export const CANVAS_DOC_SUBSTRATE_PATH = resolveExtension('canvas-doc-substrate');
37
- export const CANVAS_COMMANDS_PATH = resolveExtension('canvas-commands');
38
- export const CANVAS_RESUME_PATH = resolveExtension('canvas-resume');
39
- export const CANVAS_VIEW_PATH = resolveExtension('canvas-view');
40
40
  /** The canvas extensions every node loads, in order: stophook (routing +
41
41
  * telemetry + session-id capture), inbox-watcher (wake), nav (in-editor
42
42
  * graph chrome), recap (the per-node inactivity recap card — Haiku over the
43
43
  * conversation, shown above the manager line after 300s of no message),
44
44
  * goal-capture (persist the first user message as the goal),
45
45
  * passive-context (drain passive backlog as pre-text on the next message),
46
- * context-intro (inject the <crtr-context> bearings block carrying the
47
- * <knowledge> catalog as its own session message, once per brand-new chat),
48
- * doc-substrate (the unified document substrate's two hooks: <preferences> +
49
- * <memory-guidance> at boot, on-read context injection), commands (the /promote slash-command), resume (the /resume-node
50
- * whole-canvas picker → `crtr node focus`), view (the /view popup → `crtr
51
- * view pick` / `crtr view run <name>`).
46
+ * context-intro (inject the <crtr-bearings> block + the <memory kind="knowledge">
47
+ * catalog as its own session message, once per brand-new chat),
48
+ * doc-substrate (the unified document substrate's two hooks: the
49
+ * <memory kind="preference"> block at boot, on-read context injection).
52
50
  * All self-gate on CRTR_NODE_ID. goal-capture precedes passive-context so it
53
51
  * reads the raw user text. */
54
52
  export const CANVAS_EXTENSIONS = [
@@ -60,37 +58,141 @@ export const CANVAS_EXTENSIONS = [
60
58
  CANVAS_PASSIVE_CONTEXT_PATH,
61
59
  CANVAS_CONTEXT_INTRO_PATH,
62
60
  CANVAS_DOC_SUBSTRATE_PATH,
63
- CANVAS_COMMANDS_PATH,
64
- CANVAS_RESUME_PATH,
65
- CANVAS_VIEW_PATH,
66
61
  ];
67
- /** The named capability tiers a caller picks with `--model`, in descending
68
- * strength. Each maps to a concrete pi model spec. `strong`/`medium`/`light`
69
- * resolve to the latest opus/sonnet/haiku; `ultra` to the frontier model. */
70
- export const MODEL_TIERS = {
71
- ultra: 'anthropic/claude-fable-5',
72
- strong: 'anthropic/claude-opus-4-8',
73
- medium: 'anthropic/claude-sonnet-4-6',
74
- light: 'anthropic/claude-haiku-4-5',
75
- };
76
- /** Bare family aliases the same concrete versioned ids as the tiers. These
77
- * MUST be real registry ids (see `pi --list-models`): an unversioned spec like
78
- * `anthropic/sonnet` is NOT in the registry and silently falls back to the SDK
79
- * default (opus), so it can never be the resolution target. */
80
- const BARE_ALIASES = {
81
- opus: 'anthropic/claude-opus-4-8',
82
- sonnet: 'anthropic/claude-sonnet-4-6',
83
- haiku: 'anthropic/claude-haiku-4-5',
62
+ // ---------------------------------------------------------------------------
63
+ // Two-axis model resolution: (provider × strength) concrete `model:thinking`.
64
+ //
65
+ // A persona declares ONE `model:` field valued `provider/strength` (e.g.
66
+ // `openai/strong`, `anthropic/light`). The provider is a fixed per-persona
67
+ // property; the caller/persona thinks only in strength; the concrete model id
68
+ // AND the thinking level both fall out of the per-provider ladder below. The
69
+ // ladder itself and the default provider are user-configurable in config.json;
70
+ // pi accepts the `:thinking` suffix on `--model` (off,minimal,low,medium,high,
71
+ // xhigh confirmed via `pi --help`), so the resolved spec is exactly the
72
+ // string buildPiArgv passes to `--model`; no extra launch plumbing.
73
+ // ---------------------------------------------------------------------------
74
+ /** Cached user config for model resolution. The launch path is hot and reads
75
+ * config synchronously, so cache the merged config and invalidate on mtime/size
76
+ * changes rather than rereading on every normalizeModel/buildLaunchSpec call. */
77
+ let cachedUserConfig = null;
78
+ function readUserConfigCached() {
79
+ const path = userConfigPath('user');
80
+ if (path === null)
81
+ return defaultScopeConfig();
82
+ try {
83
+ const stat = statSync(path);
84
+ if (cachedUserConfig !== null &&
85
+ cachedUserConfig.path === path &&
86
+ cachedUserConfig.mtimeMs === stat.mtimeMs &&
87
+ cachedUserConfig.size === stat.size) {
88
+ return cachedUserConfig.config;
89
+ }
90
+ const config = readConfig('user');
91
+ cachedUserConfig = { path, mtimeMs: stat.mtimeMs, size: stat.size, config };
92
+ return config;
93
+ }
94
+ catch (error) {
95
+ if (error.code === 'ENOENT') {
96
+ cachedUserConfig = null;
97
+ return defaultScopeConfig();
98
+ }
99
+ throw error;
100
+ }
101
+ }
102
+ const DEFAULT_MODEL_LADDERS = defaultScopeConfig().modelLadders;
103
+ function modelLadders() {
104
+ return readUserConfigCached().modelLadders ?? DEFAULT_MODEL_LADDERS;
105
+ }
106
+ function ladderFor(provider, ladders = modelLadders()) {
107
+ return ladders[provider];
108
+ }
109
+ /** Env var naming the DEFAULT provider for an UNqualified bare strength only.
110
+ * `CRTR_MODEL_PROVIDER=openai` (case-insensitive) makes a bare `strong` resolve
111
+ * on the OpenAI ladder; anything else defaults to Anthropic. A configured
112
+ * defaultProvider in config.json wins over this env. */
113
+ export const OPENAI_PROVIDER_ENV = 'CRTR_MODEL_PROVIDER';
114
+ function defaultProvider() {
115
+ const cfgProvider = readUserConfigCached().modelLadders.defaultProvider;
116
+ if (cfgProvider === 'anthropic' || cfgProvider === 'openai')
117
+ return cfgProvider;
118
+ return (process.env[OPENAI_PROVIDER_ENV] ?? '').toLowerCase() === 'openai' ? 'openai' : 'anthropic';
119
+ }
120
+ /** Strength synonyms accepted from personas/callers. */
121
+ const STRENGTH_ALIASES = {
122
+ ultra: 'ultra',
123
+ strong: 'strong',
124
+ medium: 'medium',
125
+ light: 'light',
126
+ normal: 'medium',
127
+ weak: 'light',
84
128
  };
85
- /** Resolve a model token to the spec pi gets via `--model`. A named tier
86
- * (ultra/strong/medium/light) maps to its concrete spec; a bare family alias
87
- * (sonnet/opus/haiku) maps to that family's current versioned id; anything
88
- * with a `/` or an unknown name passes through. */
129
+ const MODEL_PROVIDER_KEYS = ['anthropic', 'openai'];
130
+ const MODEL_STRENGTHS = ['ultra', 'strong', 'medium', 'light'];
131
+ const THINKING_SUFFIXES = new Set(['off', 'minimal', 'low', 'medium', 'high', 'xhigh']);
132
+ function stripThinkingSuffix(spec) {
133
+ const i = spec.lastIndexOf(':');
134
+ if (i <= 0)
135
+ return spec;
136
+ return THINKING_SUFFIXES.has(spec.slice(i + 1)) ? spec.slice(0, i) : spec;
137
+ }
138
+ /** Map a concrete ladder model back to its provider×strength cell, then return
139
+ * the other configured provider's model at the same strength. `failedProviders`
140
+ * is per-turn state: once a provider has produced a retryable outage error, do
141
+ * not bounce back to it or keep reattempting the same failed provider. */
142
+ export function equivalentOtherProviderModel(currentModel, failedProviders = new Set()) {
143
+ const ladders = modelLadders();
144
+ const currentComparable = stripThinkingSuffix(normalizeModel(currentModel));
145
+ for (const fromProvider of MODEL_PROVIDER_KEYS) {
146
+ for (const strength of MODEL_STRENGTHS) {
147
+ if (stripThinkingSuffix(ladders[fromProvider][strength]) !== currentComparable)
148
+ continue;
149
+ if (failedProviders.has(fromProvider))
150
+ return null;
151
+ const toProvider = fromProvider === 'anthropic' ? 'openai' : 'anthropic';
152
+ if (failedProviders.has(toProvider))
153
+ return null;
154
+ return { fromProvider, toProvider, strength, model: ladders[toProvider][strength] };
155
+ }
156
+ }
157
+ return null;
158
+ }
159
+ /** Resolve a persona/caller `model:` token to the concrete `model:thinking`
160
+ * spec pi gets via `--model`, in order:
161
+ * 1. `provider/rest` — apply strength aliases to `rest`; if `provider` is
162
+ * `anthropic`/`openai` AND `rest` is a strength, return that ladder cell
163
+ * (the word `openai` maps to the openai-codex ladder). Otherwise it is a
164
+ * concrete `provider/id` (incl. any `:thinking` suffix) → pass through.
165
+ * 2. Bare strength (incl. aliases normal/weak) → the default-provider ladder
166
+ * cell (config default provider, then CRTR_MODEL_PROVIDER, else anthropic).
167
+ * 3. Bare family alias (opus/sonnet/haiku) → the Anthropic ladder's
168
+ * strong/medium/light, ALWAYS anthropic (ignores the env/config default).
169
+ * 4. Anything else → pass through unchanged. */
89
170
  export function normalizeModel(model) {
90
- if (model in MODEL_TIERS)
91
- return MODEL_TIERS[model];
92
- if (model in BARE_ALIASES)
93
- return BARE_ALIASES[model];
171
+ const ladders = modelLadders();
172
+ // 1. Qualified provider/rest.
173
+ if (model.includes('/')) {
174
+ const slash = model.indexOf('/');
175
+ const provider = model.slice(0, slash);
176
+ const rest = model.slice(slash + 1);
177
+ const strength = STRENGTH_ALIASES[rest];
178
+ if (strength !== undefined && (provider === 'anthropic' || provider === 'openai')) {
179
+ return ladderFor(provider, ladders)[strength];
180
+ }
181
+ // Concrete `provider/id` (optionally `...:thinking`) — pass through.
182
+ return model;
183
+ }
184
+ // 2. Bare strength → default-provider ladder.
185
+ const strength = STRENGTH_ALIASES[model];
186
+ if (strength !== undefined)
187
+ return ladderFor(defaultProvider(), ladders)[strength];
188
+ // 3. Bare family alias → always Anthropic.
189
+ if (model === 'opus')
190
+ return ladders.anthropic.strong;
191
+ if (model === 'sonnet')
192
+ return ladders.anthropic.medium;
193
+ if (model === 'haiku')
194
+ return ladders.anthropic.light;
195
+ // 4. Unknown — pass through.
94
196
  return model;
95
197
  }
96
198
  // ---------------------------------------------------------------------------
@@ -105,10 +207,14 @@ export function normalizeModel(model) {
105
207
  * declared extensions follow. */
106
208
  export function buildLaunchSpec(kind, mode, opts) {
107
209
  const p = resolvePersona(kind, mode, { lifecycle: opts.lifecycle, hasManager: opts.hasManager });
108
- // A caller-supplied override (durable on `meta.model_override`, re-passed on
109
- // every polymorph) wins over the persona's declared default; absent both, the
110
- // model is left unset and the node inherits pi's default.
111
- const chosenModel = opts.model ?? p.model;
210
+ const cfg = readUserConfigCached();
211
+ // Precedence, from strongest to weakest:
212
+ // 1. Caller-supplied override (durable on `meta.model_override`, re-passed on
213
+ // every polymorph).
214
+ // 2. Configured persona strength for this kind.
215
+ // 3. The persona file's own frontmatter model.
216
+ // 4. Unset → pi default.
217
+ const chosenModel = opts.model ?? cfg.personaStrengths[kind] ?? p.model;
112
218
  const launch = {
113
219
  model: chosenModel !== undefined ? normalizeModel(chosenModel) : undefined,
114
220
  tools: p.tools,
@@ -116,7 +222,7 @@ export function buildLaunchSpec(kind, mode, opts) {
116
222
  systemPrompt: p.systemPrompt,
117
223
  env: { ...(opts.extraEnv ?? {}) },
118
224
  };
119
- return { launch, lifecycle: p.lifecycle, skills: p.skills };
225
+ return { launch, lifecycle: p.lifecycle };
120
226
  }
121
227
  // ---------------------------------------------------------------------------
122
228
  // Build the pi argv to launch / revive a node
@@ -144,8 +250,12 @@ function writeSystemPromptFile(nodeId, prompt) {
144
250
  * — pi COPIES that conversation into a NEW session for this node, then `prompt`
145
251
  * is delivered as the next message. One-shot at birth: the node thereafter
146
252
  * captures its OWN pi_session_file and revives by `--session` like any other.
147
- * - revive idle/done: pass `resumeSessionPath` (absolute .jsonl path, preferred)
148
- * or `resumeSessionId` (bare uuid fallback) to `--session` (keeps conversation).
253
+ * - revive idle/done: pass `resumeSessionPath` (absolute .jsonl path) to
254
+ * `--session` (keeps conversation). `resumeSessionId` (a bare uuid) is
255
+ * accepted here too, but revive.ts's `resumeArgs` never produces one —
256
+ * `headlessBrokerHost`'s preflight (host.ts) fatally rejects a bare
257
+ * `--session` id before ever spawning the broker, so a real revive only
258
+ * ever resumes by path (or falls through to fresh when no path exists).
149
259
  * - refresh-yield: fresh again (no resume) — the node re-reads its roadmap. */
150
260
  export function buildPiArgv(meta, opts = {}) {
151
261
  const spec = meta.launch;
@@ -159,8 +269,10 @@ export function buildPiArgv(meta, opts = {}) {
159
269
  // absolute FILE path when present: pi resolves a bare id cwd-relative first
160
270
  // and shows a cross-project "Fork? [y/N]" prompt when the revive cwd differs
161
271
  // from the session's creation cwd, whereas a path (contains `/` or ends
162
- // `.jsonl`) is opened directly — immune to any cwd discrepancy. The bare uuid
163
- // is the fallback for older nodes booted before pi_session_file was captured.
272
+ // `.jsonl`) is opened directly — immune to any cwd discrepancy. In practice
273
+ // revive always passes the absolute path: a resume happens only when the saved
274
+ // `.jsonl` exists (resumeArgs), and the broker preflight rejects a bare id
275
+ // outright, so `resumeSessionId` is a generic builder param no live caller sets.
164
276
  // `--fork <path|id>` is the spawn-time branch: pi copies the source session
165
277
  // into a fresh one for this node (the source is untouched), then delivers the
166
278
  // kickoff prompt as the next message. Mutually exclusive with `--session`
@@ -223,9 +335,10 @@ export function piInvocationToSdkConfig(inv) {
223
335
  break;
224
336
  case '--session': {
225
337
  const v = argv[++i];
226
- // A path (contains `/` or ends `.jsonl`) resumes via SessionManager.open;
227
- // a bare uuid is the legacy fallback. Same classification buildPiArgv
228
- // documents (path preferred, immune to cwd discrepancy).
338
+ // A path (contains `/` or ends `.jsonl`) resumes via SessionManager.open.
339
+ // A bare uuid is classified here for completeness but is rejected by the
340
+ // broker preflight and never produced by revive — the live path is always
341
+ // the absolute path. Same classification buildPiArgv documents.
229
342
  if (v.includes('/') || v.endsWith('.jsonl'))
230
343
  cfg.resumeSessionPath = v;
231
344
  else
@@ -35,7 +35,7 @@
35
35
  // row UPDATE directly via openDb — the one sanctioned exception to "only
36
36
  // canvas.ts touches the db" (see canvas/CLAUDE.md), exactly as db.ts's backfill
37
37
  // is the sanctioned exception for a data migration.
38
- import { openDb, getNode, cancelWakesFor, cancelSelfAlarms } from '../canvas/index.js';
38
+ import { openDb, getNode, cancelTriggersFor, cancelSelfAlarms } from '../canvas/index.js';
39
39
  const ANY = '*';
40
40
  /** The supervised statuses — a live node the daemon watches. */
41
41
  const LIVE = ['active', 'idle'];
@@ -88,19 +88,19 @@ export function transition(nodeId, event) {
88
88
  else if (writeIntent) {
89
89
  db.prepare('UPDATE nodes SET intent = ? WHERE node_id = ?').run(spec.intent ?? null, nodeId);
90
90
  }
91
- // Wakeups cleanup — writes a DIFFERENT table (wakeups) AFTER the atomic
91
+ // Triggers cleanup — writes a DIFFERENT table (triggers) AFTER the atomic
92
92
  // status/intent write above, so the single-(status,intent)-writer rule holds.
93
- // Event-gated; exactly ONE delegated wakeups helper per event, never inline
94
- // wakeups SQL here (design §6.7 / D2 / D6, Q1/Q2):
95
- // cancel → cancelWakesFor: reap node-anchored AND owner-armed detached
96
- // wakes this node armed (ruling A) — covers both cancel sites
93
+ // Event-gated; exactly ONE delegated triggers helper per event, never inline
94
+ // triggers SQL here (design §6.7 / D2 / D6, Q1/Q2):
95
+ // cancel → cancelTriggersFor: reap node-anchored AND owner-armed detached
96
+ // triggers this node armed (ruling A) — covers both cancel sites
97
97
  // uniformly (close cascade · reapDescendants).
98
98
  // finalize → cancelSelfAlarms: clear this node's one-shot self-alarms only;
99
99
  // node-anchored declarative crons SURVIVE a finishing instance (Q1).
100
100
  // crash → NOTHING. A fault is not a deliberate end-of-waiting; self-alarms
101
101
  // and crons MUST survive instance death (D2 / Invariant E / AC-R3).
102
102
  if (event === 'cancel')
103
- cancelWakesFor(nodeId);
103
+ cancelTriggersFor(nodeId);
104
104
  else if (event === 'finalize')
105
105
  cancelSelfAlarms(nodeId);
106
106
  return getNode(nodeId);
@@ -0,0 +1,18 @@
1
+ import { type NodeMeta } from '../canvas/index.js';
2
+ /** True when the node's broker engine is reachable: its recorded pid is alive
3
+ * AND its view.sock exists. Both are required — a dead pid with a stale socket,
4
+ * or a live pid mid-boot before it binds the socket, is NOT a live broker. */
5
+ export declare function isBrokerLive(meta: NodeMeta): boolean;
6
+ /** Swap a LIVE node's model over its view.sock. Connects, claims controller
7
+ * (hello + request_control, so an attached viewer never blocks the swap), sends
8
+ * `set_model`, and resolves with the broker-resolved `provider/id` on its ack —
9
+ * read back from the row the broker just persisted (model_changed.model carries
10
+ * only the bare id). Rejects with the broker's message on an `error` frame (e.g.
11
+ * `no model matching '<spec>' in the registry`), on connect failure, or timeout. */
12
+ export declare function setModelLive(nodeId: string, spec: string): Promise<string>;
13
+ /** Persist a model choice into a DORMANT node's durable recipe — mirrors exactly
14
+ * what the broker's persistModelChoice writes on a live switch: `model_override`
15
+ * (so polymorphs preserve it via buildLaunchSpec) and `launch.model` (the recipe
16
+ * buildPiArgv replays on revive). `spec` must already be a concrete `provider/id`
17
+ * (normalizeModel maps tiers/aliases; a bare substring cannot resolve offline). */
18
+ export declare function persistDormantModel(nodeId: string, spec: string): void;