create-harness-vibe-coding 0.8.19 → 0.9.3

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 (656) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README-CN.md +4 -2
  3. package/README.md +23 -4
  4. package/package.json +17 -2
  5. package/src/generator.js +19 -6
  6. package/src/index.js +531 -38
  7. package/src/prompts.js +4 -4
  8. package/src/ui/dist/assets/AgentsRoute-BGGs90wH.js +7 -0
  9. package/src/ui/dist/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
  10. package/src/ui/dist/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
  11. package/src/ui/dist/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
  12. package/src/ui/dist/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
  13. package/src/ui/dist/assets/Combination-DhBLEmof.js +42 -0
  14. package/src/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  15. package/src/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  16. package/src/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  17. package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  18. package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  19. package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  20. package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  21. package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  22. package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  23. package/src/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  24. package/src/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  25. package/src/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  26. package/src/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  27. package/src/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  28. package/src/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  29. package/src/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  30. package/src/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  31. package/src/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  32. package/src/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  33. package/src/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  34. package/src/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  35. package/src/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  36. package/src/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  37. package/src/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  38. package/src/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  39. package/src/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  40. package/src/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  41. package/src/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  42. package/src/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  43. package/src/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  44. package/src/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  45. package/src/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  46. package/src/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  47. package/src/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  48. package/src/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  49. package/src/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  50. package/src/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  51. package/src/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  52. package/src/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  53. package/src/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  54. package/src/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  55. package/src/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  56. package/src/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  57. package/src/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  58. package/src/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  59. package/src/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  60. package/src/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  61. package/src/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  62. package/src/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  63. package/src/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  64. package/src/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  65. package/src/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  66. package/src/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  67. package/src/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  68. package/src/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  69. package/src/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  70. package/src/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  71. package/src/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  72. package/src/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  73. package/src/ui/dist/assets/RolesRoute-DnodCSz0.js +2 -0
  74. package/src/ui/dist/assets/RuntimePicker-CucD8TGn.js +7 -0
  75. package/src/ui/dist/assets/SettingsRoute-DquMWjac.js +2 -0
  76. package/src/ui/dist/assets/TaskList-Bxc0Uktx.js +7 -0
  77. package/src/ui/dist/assets/TerminalDrawer-CDusYltc.js +36 -0
  78. package/src/ui/dist/assets/WorkflowRoute-BN8yHmUs.css +1 -0
  79. package/src/ui/dist/assets/WorkflowRoute-D-0wVDpY.js +334 -0
  80. package/src/ui/dist/assets/abnfDiagram-VRR7QNED-zkRKkaxO.js +2 -0
  81. package/src/ui/dist/assets/apl-B4CMkyY2.js +2 -0
  82. package/src/ui/dist/assets/ar-SA-G6X2FPQ2-BiHaArx5.js +11 -0
  83. package/src/ui/dist/assets/arc-CBnLtOFO.js +2 -0
  84. package/src/ui/dist/assets/architectureDiagram-ZJ3FMSHR-DWXRXsh1.js +37 -0
  85. package/src/ui/dist/assets/asciiarmor-Df11BRmG.js +2 -0
  86. package/src/ui/dist/assets/asn1-EdZsLKOL.js +2 -0
  87. package/src/ui/dist/assets/asterisk-B-8jnY81.js +2 -0
  88. package/src/ui/dist/assets/az-AZ-76LH7QW2-CiT05voO.js +2 -0
  89. package/src/ui/dist/assets/bg-BG-XCXSNQG7-L-UM9tNf.js +6 -0
  90. package/src/ui/dist/assets/blockDiagram-677ZJIJ3-BIyh3Bry.js +133 -0
  91. package/src/ui/dist/assets/bn-BD-2XOGV67Q-NdgbA0bC.js +6 -0
  92. package/src/ui/dist/assets/brainfuck-C4LP7Hcl.js +2 -0
  93. package/src/ui/dist/assets/c4Diagram-LMCZKHZV-CA54vWWM.js +11 -0
  94. package/src/ui/dist/assets/ca-ES-6MX7JW3Y-BKZZsQ5J.js +9 -0
  95. package/src/ui/dist/assets/channel-Da_-zcAu.js +2 -0
  96. package/src/ui/dist/assets/chunk-2Q5K7J3B-DE4cxr1v.js +2 -0
  97. package/src/ui/dist/assets/chunk-32BRIVSS-i7FwbEU9.js +2 -0
  98. package/src/ui/dist/assets/chunk-5VM5RSS4-BhIcOYSu.js +16 -0
  99. package/src/ui/dist/assets/chunk-EX3LRPZG-Ci9zZRIs.js +232 -0
  100. package/src/ui/dist/assets/chunk-JWPE2WC7-BFdkcz-G.js +2 -0
  101. package/src/ui/dist/assets/chunk-MOJQB5TN-Dzmapl_S.js +89 -0
  102. package/src/ui/dist/assets/chunk-RYQCIY6F-RTmp7FOy.js +2 -0
  103. package/src/ui/dist/assets/chunk-V7JOEXUC-DInU3v3D.js +207 -0
  104. package/src/ui/dist/assets/chunk-VR4S4FIN-BHoyGBQO.js +2 -0
  105. package/src/ui/dist/assets/chunk-XXDRQBXY-DfeLZNZx.js +2 -0
  106. package/src/ui/dist/assets/classDiagram-OUVF2IWQ-FKbUS0bu.js +2 -0
  107. package/src/ui/dist/assets/classDiagram-v2-EOCWNBFH-FKbUS0bu.js +2 -0
  108. package/src/ui/dist/assets/clike-B9uivgTg.js +2 -0
  109. package/src/ui/dist/assets/clojure-BMjYHr_A.js +2 -0
  110. package/src/ui/dist/assets/cmake-BQqOBYOt.js +2 -0
  111. package/src/ui/dist/assets/cobol-CWcv1MsR.js +2 -0
  112. package/src/ui/dist/assets/coffeescript-S37ZYGWr.js +2 -0
  113. package/src/ui/dist/assets/commonlisp-DBKNyK5s.js +2 -0
  114. package/src/ui/dist/assets/cose-bilkent-JH36ORCC-_5PUJ615.js +2 -0
  115. package/src/ui/dist/assets/crystal-SjHAIU92.js +2 -0
  116. package/src/ui/dist/assets/cs-CZ-2BRQDIVT-DnkfnhDU.js +12 -0
  117. package/src/ui/dist/assets/css-BnMrqG3P.js +2 -0
  118. package/src/ui/dist/assets/cynefin-VYW2F7L2-CmkcFv-b.js +179 -0
  119. package/src/ui/dist/assets/cynefinDiagram-TSTJHNR4-D72VZn8H.js +63 -0
  120. package/src/ui/dist/assets/cypher-C_CwsFkJ.js +2 -0
  121. package/src/ui/dist/assets/cytoscape.esm-DTSO7Bv0.js +332 -0
  122. package/src/ui/dist/assets/d-pRatUO7H.js +2 -0
  123. package/src/ui/dist/assets/da-DK-5WZEPLOC-C54tQUgd.js +6 -0
  124. package/src/ui/dist/assets/dagre-VKFMJZFB-0BsAkrmo.js +5 -0
  125. package/src/ui/dist/assets/de-DE-XR44H4JA-DGfZlR10.js +9 -0
  126. package/src/ui/dist/assets/defaultLocale-DX6XiGOO.js +2 -0
  127. package/src/ui/dist/assets/diagram-FQU43EPY-C1ZJDOca.js +4 -0
  128. package/src/ui/dist/assets/diagram-G47NLZAW-D3pr3FSP.js +25 -0
  129. package/src/ui/dist/assets/diagram-NH7WQ7WH-Bwry0NV-.js +25 -0
  130. package/src/ui/dist/assets/diagram-OA4YK3LP-L6g09cmV.js +31 -0
  131. package/src/ui/dist/assets/diagram-WEI45ONY-Bh1puYVX.js +42 -0
  132. package/src/ui/dist/assets/diff-DbItnlRl.js +2 -0
  133. package/src/ui/dist/assets/directory-open-01563666-DWU9wJ6I.js +2 -0
  134. package/src/ui/dist/assets/directory-open-4ed118d0-CunoC1EB.js +2 -0
  135. package/src/ui/dist/assets/dockerfile-BKs6k2Af.js +2 -0
  136. package/src/ui/dist/assets/dtd-DF_7sFjM.js +2 -0
  137. package/src/ui/dist/assets/dylan-DwRh75JA.js +2 -0
  138. package/src/ui/dist/assets/ebnf-CDyGwa7X.js +2 -0
  139. package/src/ui/dist/assets/ebnfDiagram-CCIWWBDH-BC_mBRR5.js +2 -0
  140. package/src/ui/dist/assets/ecl-Cabwm37j.js +2 -0
  141. package/src/ui/dist/assets/eiffel-CnydiIhH.js +2 -0
  142. package/src/ui/dist/assets/el-GR-BZB4AONW-DsnwWweL.js +11 -0
  143. package/src/ui/dist/assets/elm-vLlmbW-K.js +2 -0
  144. package/src/ui/dist/assets/erDiagram-Q63AITRT-Bkxam36l.js +86 -0
  145. package/src/ui/dist/assets/erlang-BNw1qcRV.js +2 -0
  146. package/src/ui/dist/assets/es-ES-U4NZUMDT-CRxBcQgC.js +10 -0
  147. package/src/ui/dist/assets/eu-ES-A7QVB2H4-CTd_E7YR.js +12 -0
  148. package/src/ui/dist/assets/excalidraw-default-bMWIgNCy.svg +1 -0
  149. package/src/ui/dist/assets/fa-IR-HGAKTJCU-DO56k7eG.js +9 -0
  150. package/src/ui/dist/assets/factor-kuTfRLto.js +2 -0
  151. package/src/ui/dist/assets/fcl-Kvtd6kyn.js +2 -0
  152. package/src/ui/dist/assets/fi-FI-Z5N7JZ37-DEDCF9WB.js +7 -0
  153. package/src/ui/dist/assets/file-open-002ab408-DIuFHtCF.js +2 -0
  154. package/src/ui/dist/assets/file-open-7c801643-684qeFg4.js +2 -0
  155. package/src/ui/dist/assets/file-save-3189631c-C1wFhQhH.js +2 -0
  156. package/src/ui/dist/assets/file-save-745eba88-Bb9F9Kg7.js +2 -0
  157. package/src/ui/dist/assets/flowDiagram-23GEKE2U-C3SAEao7.js +157 -0
  158. package/src/ui/dist/assets/forth-Ffai-XNe.js +2 -0
  159. package/src/ui/dist/assets/fortran-DYz_wnZ1.js +2 -0
  160. package/src/ui/dist/assets/fr-FR-RHASNOE6-DE2nPyDt.js +10 -0
  161. package/src/ui/dist/assets/ganttDiagram-NO4QXBWP-U-J_Xi-_.js +293 -0
  162. package/src/ui/dist/assets/gas-Bneqetm1.js +2 -0
  163. package/src/ui/dist/assets/gherkin-heZmZLOM.js +2 -0
  164. package/src/ui/dist/assets/gitGraphDiagram-IHSO6WYX-BADVbD-a.js +107 -0
  165. package/src/ui/dist/assets/gl-ES-HMX3MZ6V-mCqVgQHC.js +11 -0
  166. package/src/ui/dist/assets/graph-C9eacEi8.js +2 -0
  167. package/src/ui/dist/assets/groovy-D9Dt4D0W.js +2 -0
  168. package/src/ui/dist/assets/haskell-Cw1EW3IL.js +2 -0
  169. package/src/ui/dist/assets/haxe-H-WmDvRZ.js +2 -0
  170. package/src/ui/dist/assets/he-IL-6SHJWFNN-KnaLrCzw.js +11 -0
  171. package/src/ui/dist/assets/hi-IN-IWLTKZ5I-wuqiaaWt.js +5 -0
  172. package/src/ui/dist/assets/http-DBlCnlav.js +2 -0
  173. package/src/ui/dist/assets/hu-HU-A5ZG7DT2-DLg_zm22.js +8 -0
  174. package/src/ui/dist/assets/id-ID-SAP4L64H-MB2mXqcR.js +11 -0
  175. package/src/ui/dist/assets/idl-BEugSyMb.js +2 -0
  176. package/src/ui/dist/assets/image-blob-reduce.esm-HwCm7IZ0.js +8 -0
  177. package/src/ui/dist/assets/index-39SJtrt0.js +2 -0
  178. package/src/ui/dist/assets/index-BQ0LIrW-.js +2 -0
  179. package/src/ui/dist/assets/index-BcAUh2Nm.css +1 -0
  180. package/src/ui/dist/assets/index-BcThOK-i.js +331 -0
  181. package/src/ui/dist/assets/index-BnxV3k_S.js +3 -0
  182. package/src/ui/dist/assets/index-C7MZBHbT.js +117 -0
  183. package/src/ui/dist/assets/index-CCvKI2rM.js +2 -0
  184. package/src/ui/dist/assets/index-CZvmcCab.js +8 -0
  185. package/src/ui/dist/assets/index-Cp3hLKNl.js +2 -0
  186. package/src/ui/dist/assets/index-D7ayFxcx.js +2 -0
  187. package/src/ui/dist/assets/index-DAYxSQGU.js +2 -0
  188. package/src/ui/dist/assets/index-DD-HeMV0.css +1 -0
  189. package/src/ui/dist/assets/index-DPMxd3Qn.js +2 -0
  190. package/src/ui/dist/assets/index-DSe2jx3k.js +4 -0
  191. package/src/ui/dist/assets/index-DUirCkgW.js +2 -0
  192. package/src/ui/dist/assets/index-DaKPQ2hN.js +159 -0
  193. package/src/ui/dist/assets/index-DzpuR0Jg.js +2 -0
  194. package/src/ui/dist/assets/index-POndwsCI.js +2 -0
  195. package/src/ui/dist/assets/index-R8NM9I_9.js +2 -0
  196. package/src/ui/dist/assets/index-TCDuDhBj.js +2 -0
  197. package/src/ui/dist/assets/index-TckzASdM.js +2 -0
  198. package/src/ui/dist/assets/index-Yi5ytFFr.js +2 -0
  199. package/src/ui/dist/assets/infoDiagram-FWYZ7A6U-CiGBlFqH.js +3 -0
  200. package/src/ui/dist/assets/init-Gi6I4Gst.js +2 -0
  201. package/src/ui/dist/assets/ishikawaDiagram-FXEZZL3T-B1aheRbz.js +71 -0
  202. package/src/ui/dist/assets/it-IT-JPQ66NNP-DT3HSU7X.js +12 -0
  203. package/src/ui/dist/assets/ja-JP-DBVTYXUO-CsfJjjWt.js +9 -0
  204. package/src/ui/dist/assets/javascript-iXu5QeM3.js +2 -0
  205. package/src/ui/dist/assets/journeyDiagram-5HDEW3XC-DtnJPxub.js +140 -0
  206. package/src/ui/dist/assets/julia-DuME0IfC.js +2 -0
  207. package/src/ui/dist/assets/kaa-6HZHGXH3-DQz-1-Gn.js +2 -0
  208. package/src/ui/dist/assets/kab-KAB-ZGHBKWFO-CaH-LSoK.js +9 -0
  209. package/src/ui/dist/assets/kanban-definition-HUTT4EX6-CZatSm3e.js +90 -0
  210. package/src/ui/dist/assets/katex-C5jXJg4s.js +258 -0
  211. package/src/ui/dist/assets/kk-KZ-P5N5QNE5-BMXmcm55.js +2 -0
  212. package/src/ui/dist/assets/km-KH-HSX4SM5Z-ZeoJNBpN.js +12 -0
  213. package/src/ui/dist/assets/ko-KR-MTYHY66A-BeaLRKph.js +10 -0
  214. package/src/ui/dist/assets/ku-TR-6OUDTVRD-B_28KrkR.js +10 -0
  215. package/src/ui/dist/assets/layout-DEXfKzaS.js +2 -0
  216. package/src/ui/dist/assets/linear-CpEDnQRC.js +2 -0
  217. package/src/ui/dist/assets/livescript-BwQOo05w.js +2 -0
  218. package/src/ui/dist/assets/lt-LT-XHIRWOB4-BxDcnUhp.js +4 -0
  219. package/src/ui/dist/assets/lua-VAEuO923.js +2 -0
  220. package/src/ui/dist/assets/lv-LV-5QDEKY6T-DpKDl1_y.js +8 -0
  221. package/src/ui/dist/assets/map-Czzmt4hB.js +2 -0
  222. package/src/ui/dist/assets/mathematica-DTrFuWx2.js +2 -0
  223. package/src/ui/dist/assets/mbox-CNhZ1qSd.js +2 -0
  224. package/src/ui/dist/assets/mermaidLoader-CBO31t0J.js +305 -0
  225. package/src/ui/dist/assets/mermaidLoader-CEK31ho9.css +1 -0
  226. package/src/ui/dist/assets/mindmap-definition-LN4V7U3C-CQ0TccEr.js +97 -0
  227. package/src/ui/dist/assets/mirc-CjQqDB4T.js +2 -0
  228. package/src/ui/dist/assets/mllike-CXdrOF99.js +2 -0
  229. package/src/ui/dist/assets/modelica-Dc1JOy9r.js +2 -0
  230. package/src/ui/dist/assets/mr-IN-CRQNXWMA-BKCZT58p.js +14 -0
  231. package/src/ui/dist/assets/mscgen-BA5vi2Kp.js +2 -0
  232. package/src/ui/dist/assets/mumps-BT43cFF4.js +2 -0
  233. package/src/ui/dist/assets/my-MM-5M5IBNSE-D34k0G9T.js +2 -0
  234. package/src/ui/dist/assets/nb-NO-T6EIAALU-DXr_KW8J.js +11 -0
  235. package/src/ui/dist/assets/nginx-DdIZxoE0.js +2 -0
  236. package/src/ui/dist/assets/nl-NL-IS3SIHDZ-C1L0aVDR.js +9 -0
  237. package/src/ui/dist/assets/nn-NO-6E72VCQL-CLWVSxbZ.js +9 -0
  238. package/src/ui/dist/assets/nsis-LdVXkNf5.js +2 -0
  239. package/src/ui/dist/assets/ntriples-BfvgReVJ.js +2 -0
  240. package/src/ui/dist/assets/oc-FR-POXYY2M6-nf8_J3eR.js +9 -0
  241. package/src/ui/dist/assets/octave-Ck1zUtKM.js +2 -0
  242. package/src/ui/dist/assets/ordinal-Cboi1Yqb.js +2 -0
  243. package/src/ui/dist/assets/oz-BzwKVEFT.js +2 -0
  244. package/src/ui/dist/assets/pa-IN-N4M65BXN-CAMJ-xd6.js +5 -0
  245. package/src/ui/dist/assets/pascal--L3eBynH.js +2 -0
  246. package/src/ui/dist/assets/pegDiagram-2B236MQR-Bj2RcmRd.js +2 -0
  247. package/src/ui/dist/assets/percentages-BXMCSKIN-s9yWFdr6.js +160 -0
  248. package/src/ui/dist/assets/perl-CdXCOZ3F.js +2 -0
  249. package/src/ui/dist/assets/pica-BGv_AhAB.js +8 -0
  250. package/src/ui/dist/assets/pieDiagram-ENE6RG2P-obpzz8dC.js +40 -0
  251. package/src/ui/dist/assets/pig-CevX1Tat.js +2 -0
  252. package/src/ui/dist/assets/pl-PL-T2D74RX3-DKJ5H85v.js +10 -0
  253. package/src/ui/dist/assets/powershell-CFHJl5sT.js +2 -0
  254. package/src/ui/dist/assets/properties-C78fOPTZ.js +2 -0
  255. package/src/ui/dist/assets/protobuf-ChK-085T.js +2 -0
  256. package/src/ui/dist/assets/{proxy-D0vUbds5.js → proxy-BSmwef4H.js} +2 -2
  257. package/src/ui/dist/assets/pt-BR-5N22H2LF-B5kow-kN.js +10 -0
  258. package/src/ui/dist/assets/pt-PT-UZXXM6DQ-B2G34fso.js +10 -0
  259. package/src/ui/dist/assets/pug-DeIclll2.js +2 -0
  260. package/src/ui/dist/assets/puppet-DMA9R1ak.js +2 -0
  261. package/src/ui/dist/assets/python-BuPzkPfP.js +2 -0
  262. package/src/ui/dist/assets/q-pXgVlZs6.js +2 -0
  263. package/src/ui/dist/assets/quadrantDiagram-ABIIQ3AL-Cl-T7NkJ.js +8 -0
  264. package/src/ui/dist/assets/r-B6wPVr8A.js +2 -0
  265. package/src/ui/dist/assets/railroadDiagram-RFXS5EU6-DMq82RHg.js +2 -0
  266. package/src/ui/dist/assets/{refresh-cw-JNmExijd.js → refresh-cw-CbFd7guV.js} +2 -2
  267. package/src/ui/dist/assets/requirementDiagram-TGXJPOKE-tGInMDgU.js +85 -0
  268. package/src/ui/dist/assets/ro-RO-JPDTUUEW-BwLdZW91.js +12 -0
  269. package/src/ui/dist/assets/roundRect-0PYZxl1G.js +2 -0
  270. package/src/ui/dist/assets/rpm-CTu-6PCP.js +2 -0
  271. package/src/ui/dist/assets/ru-RU-B4JR7IUQ-DpdAgIJc.js +10 -0
  272. package/src/ui/dist/assets/ruby-B2Rjki9n.js +2 -0
  273. package/src/ui/dist/assets/runtimeBrand-BoKPimsz.js +2 -0
  274. package/src/ui/dist/assets/sankeyDiagram-HTMAVEWB-C7X-ET4m.js +41 -0
  275. package/src/ui/dist/assets/sas-B4kiWyti.js +2 -0
  276. package/src/ui/dist/assets/save-D1CXHwBw.js +12 -0
  277. package/src/ui/dist/assets/scheme-C41bIUwD.js +2 -0
  278. package/src/ui/dist/assets/sequenceDiagram-DBY2YBRQ-Bn24i_nY.js +163 -0
  279. package/src/ui/dist/assets/settings-2-DtSNAAcU.js +22 -0
  280. package/src/ui/dist/assets/shell-CjFT_Tl9.js +2 -0
  281. package/src/ui/dist/assets/shield-check-BVbJ8T_N.js +7 -0
  282. package/src/ui/dist/assets/si-LK-N5RQ5JYF-naJaUy5u.js +2 -0
  283. package/src/ui/dist/assets/sieve-C3Gn_uJK.js +2 -0
  284. package/src/ui/dist/assets/simple-mode-GW_nhZxv.js +2 -0
  285. package/src/ui/dist/assets/sizeCapture-X5ZJPWSS-DAQHfm82.js +2 -0
  286. package/src/ui/dist/assets/sk-SK-C5VTKIMK-1NPz1J_d.js +7 -0
  287. package/src/ui/dist/assets/sl-SI-NN7IZMDC-D8RfmNQw.js +7 -0
  288. package/src/ui/dist/assets/smalltalk-CnHTOXQT.js +2 -0
  289. package/src/ui/dist/assets/solr-DehyRSwq.js +2 -0
  290. package/src/ui/dist/assets/sparql-DkYu6x3z.js +2 -0
  291. package/src/ui/dist/assets/spreadsheet-BCZA_wO0.js +2 -0
  292. package/src/ui/dist/assets/sql-D0XecflT.js +2 -0
  293. package/src/ui/dist/assets/stateDiagram-2N3HPSRC-Ck48D1ck.js +2 -0
  294. package/src/ui/dist/assets/stateDiagram-v2-6OUMAXLB-CdfRCJAJ.js +2 -0
  295. package/src/ui/dist/assets/stex-C3f8Ysf7.js +2 -0
  296. package/src/ui/dist/assets/style-C3QI7VPf.css +1 -0
  297. package/src/ui/dist/assets/stylus-B533Al4x.js +2 -0
  298. package/src/ui/dist/assets/subset-shared.chunk-eAtLHmbi.js +85 -0
  299. package/src/ui/dist/assets/subset-worker.chunk-DeHCTnTk.js +2 -0
  300. package/src/ui/dist/assets/sv-SE-XGPEYMSR-BeOYCU-8.js +11 -0
  301. package/src/ui/dist/assets/swift-BzpIVaGY.js +2 -0
  302. package/src/ui/dist/assets/swimlanes-5IMT3BWC-DOy22UjP.js +3 -0
  303. package/src/ui/dist/assets/swimlanesDiagram-G3AALYLV-sicPbVOg.js +9 -0
  304. package/src/ui/dist/assets/ta-IN-2NMHFXQM-CtS68WDd.js +10 -0
  305. package/src/ui/dist/assets/tcl-DVfN8rqt.js +2 -0
  306. package/src/ui/dist/assets/{terminal-BBQvnOAK.js → terminal-DEby5Y_P.js} +2 -2
  307. package/src/ui/dist/assets/terminalControl-BkFeDVXo.js +134 -0
  308. package/src/ui/dist/assets/textile-CnDTJFAw.js +2 -0
  309. package/src/ui/dist/assets/th-TH-HPSO5L25-DCHY9-Co.js +3 -0
  310. package/src/ui/dist/assets/tiddlywiki-DO-Gjzrf.js +2 -0
  311. package/src/ui/dist/assets/tiki-DGYXhP31.js +2 -0
  312. package/src/ui/dist/assets/timeline-definition-FHXFAJF6-DVkG72qO.js +121 -0
  313. package/src/ui/dist/assets/toml-Bm5Em-hy.js +2 -0
  314. package/src/ui/dist/assets/tr-TR-DEFEU3FU-y5-vjTv8.js +8 -0
  315. package/src/ui/dist/assets/troff-wAsdV37c.js +2 -0
  316. package/src/ui/dist/assets/ttcn-CfJYG6tj.js +2 -0
  317. package/src/ui/dist/assets/ttcn-cfg-B9xdYoR4.js +2 -0
  318. package/src/ui/dist/assets/turtle-B1tBg_DP.js +2 -0
  319. package/src/ui/dist/assets/uk-UA-QMV73CPH-BRbR5It6.js +7 -0
  320. package/src/ui/dist/assets/useReducedMotion-D07XP52Q.js +12 -0
  321. package/src/ui/dist/assets/vb-CmGdzxic.js +2 -0
  322. package/src/ui/dist/assets/vbscript-BuJXcnF6.js +2 -0
  323. package/src/ui/dist/assets/velocity-D8B20fx6.js +2 -0
  324. package/src/ui/dist/assets/vennDiagram-L72KCM5P-DwMwBlf-.js +35 -0
  325. package/src/ui/dist/assets/verilog-C6RDOZhf.js +2 -0
  326. package/src/ui/dist/assets/vhdl-lSbBsy5d.js +2 -0
  327. package/src/ui/dist/assets/vi-VN-M7AON7JQ-s6wSBv2s.js +6 -0
  328. package/src/ui/dist/assets/wardleyDiagram-EHGQE667-CNuuvzEg.js +79 -0
  329. package/src/ui/dist/assets/webidl-ZXfAyPTL.js +2 -0
  330. package/src/ui/dist/assets/{x-DoIOGAJz.js → x-B84wq78k.js} +2 -2
  331. package/src/ui/dist/assets/xquery-DzFWVndE.js +2 -0
  332. package/src/ui/dist/assets/xychartDiagram-FW5EYKEG-dUpZxmn6.js +8 -0
  333. package/src/ui/dist/assets/yacas-BJ4BC0dw.js +2 -0
  334. package/src/ui/dist/assets/z80-Hz9HOZM7.js +2 -0
  335. package/src/ui/dist/assets/zh-CN-LNUGB5OW-Cu_-POQN.js +11 -0
  336. package/src/ui/dist/assets/zh-HK-E62DVLB3-BCx4W4qZ.js +2 -0
  337. package/src/ui/dist/assets/zh-TW-RAJ6MFWO-02wx_Mrj.js +10 -0
  338. package/src/ui/dist/icons/excalidraw.svg +1 -0
  339. package/src/ui/dist/icons/markdown.svg +1 -0
  340. package/src/ui/dist/index.html +2 -2
  341. package/src/ui/package.json +10 -0
  342. package/src/ui/playwright.config.ts +36 -0
  343. package/src/ui/pnpm-workspace.yaml +2 -0
  344. package/src/ui/public/icons/excalidraw.svg +1 -0
  345. package/src/ui/public/icons/markdown.svg +1 -0
  346. package/src/ui/tsconfig.json +2 -1
  347. package/src/ui/vite.config.ts +1 -0
  348. package/src/wf-ui-server/__tests__/a2a-store.test.mjs +432 -15
  349. package/src/wf-ui-server/__tests__/action-registry-loader.test.mjs +156 -0
  350. package/src/wf-ui-server/__tests__/claude-stream-json.test.mjs +397 -0
  351. package/src/wf-ui-server/__tests__/codex-appserver.test.mjs +392 -0
  352. package/src/wf-ui-server/__tests__/component-node-api.test.mjs +881 -0
  353. package/src/wf-ui-server/__tests__/component-node-store.test.mjs +401 -0
  354. package/src/wf-ui-server/__tests__/control-plane-acceptance.test.mjs +2027 -0
  355. package/src/wf-ui-server/__tests__/control-plane-cli-smoke.test.mjs +1014 -0
  356. package/src/wf-ui-server/__tests__/dispatch-lifecycle.test.mjs +330 -0
  357. package/src/wf-ui-server/__tests__/effort-compatibility-red-092.test.mjs +151 -0
  358. package/src/wf-ui-server/__tests__/graph-layout-agent-tree.test.mjs +254 -0
  359. package/src/wf-ui-server/__tests__/graph-layout-tidy.test.mjs +260 -0
  360. package/src/wf-ui-server/__tests__/graph-layout.test.mjs +84 -0
  361. package/src/wf-ui-server/__tests__/node-config-api.test.mjs +384 -0
  362. package/src/wf-ui-server/__tests__/opencode-server.test.mjs +526 -0
  363. package/src/wf-ui-server/__tests__/peer-capsule.test.mjs +2 -2
  364. package/src/wf-ui-server/__tests__/pty-adapter.test.mjs +71 -1
  365. package/src/wf-ui-server/__tests__/runtime-config.test.mjs +3 -3
  366. package/src/wf-ui-server/__tests__/runtime-detector.test.mjs +21 -0
  367. package/src/wf-ui-server/__tests__/runtime-review.test.mjs +828 -0
  368. package/src/wf-ui-server/__tests__/server.integration.test.mjs +1463 -11
  369. package/src/wf-ui-server/__tests__/session-cleanup.test.mjs +159 -0
  370. package/src/wf-ui-server/__tests__/session-registry.test.mjs +52 -3
  371. package/src/wf-ui-server/__tests__/settings.test.mjs +12 -2
  372. package/src/wf-ui-server/__tests__/spawn-gate.test.mjs +78 -0
  373. package/src/wf-ui-server/__tests__/task-group-parser.test.mjs +120 -0
  374. package/src/wf-ui-server/__tests__/task-group-tag.test.mjs +264 -0
  375. package/src/wf-ui-server/__tests__/task-parser.test.mjs +49 -3
  376. package/src/wf-ui-server/__tests__/terminal-context-hardening.test.mjs +122 -0
  377. package/src/wf-ui-server/__tests__/terminal-context.test.mjs +164 -0
  378. package/src/wf-ui-server/__tests__/terminal-store.test.mjs +4 -4
  379. package/src/wf-ui-server/__tests__/wf-browser-api.test.mjs +599 -0
  380. package/src/wf-ui-server/__tests__/wf-browser-store.test.mjs +184 -0
  381. package/src/wf-ui-server/__tests__/workflow-action-registry.test.mjs +282 -0
  382. package/src/wf-ui-server/__tests__/workflow-agent-communication.test.mjs +411 -0
  383. package/src/wf-ui-server/__tests__/workflow-agent-context.test.mjs +323 -0
  384. package/src/wf-ui-server/__tests__/workflow-agent-cooperation-permissions.test.mjs +318 -0
  385. package/src/wf-ui-server/__tests__/workflow-agent-messages-structured.test.mjs +458 -0
  386. package/src/wf-ui-server/__tests__/workflow-agent-routing.test.mjs +434 -0
  387. package/src/wf-ui-server/__tests__/workflow-agent-runtime.test.mjs +324 -0
  388. package/src/wf-ui-server/__tests__/workflow-api-integration.test.mjs +263 -0
  389. package/src/wf-ui-server/__tests__/workflow-api-phase3.test.mjs +1213 -0
  390. package/src/wf-ui-server/__tests__/workflow-claude-materialize.test.mjs +209 -0
  391. package/src/wf-ui-server/__tests__/workflow-cli-registry-manuals.test.mjs +173 -0
  392. package/src/wf-ui-server/__tests__/workflow-cli-surface.test.mjs +176 -0
  393. package/src/wf-ui-server/__tests__/workflow-codex-resume-id.test.mjs +556 -0
  394. package/src/wf-ui-server/__tests__/workflow-cooperation-enforcement.test.mjs +553 -0
  395. package/src/wf-ui-server/__tests__/workflow-depth-resume-dock.test.mjs +846 -0
  396. package/src/wf-ui-server/__tests__/workflow-display-node.test.mjs +150 -0
  397. package/src/wf-ui-server/__tests__/workflow-edge-update.test.mjs +296 -0
  398. package/src/wf-ui-server/__tests__/workflow-file-cache-lock-watch.test.mjs +380 -0
  399. package/src/wf-ui-server/__tests__/workflow-file-formats.test.mjs +994 -0
  400. package/src/wf-ui-server/__tests__/workflow-file-node-actions.test.mjs +294 -0
  401. package/src/wf-ui-server/__tests__/workflow-goal-actions.test.mjs +357 -0
  402. package/src/wf-ui-server/__tests__/workflow-goal-task-autoclose.test.mjs +256 -0
  403. package/src/wf-ui-server/__tests__/workflow-graceful-stop.test.mjs +108 -0
  404. package/src/wf-ui-server/__tests__/workflow-graph-undo.test.mjs +524 -0
  405. package/src/wf-ui-server/__tests__/workflow-layout.test.mjs +732 -0
  406. package/src/wf-ui-server/__tests__/workflow-magnetic-topology.test.mjs +222 -0
  407. package/src/wf-ui-server/__tests__/workflow-markdown-lock.test.mjs +359 -0
  408. package/src/wf-ui-server/__tests__/workflow-mcp-hub.test.mjs +174 -0
  409. package/src/wf-ui-server/__tests__/workflow-node-manual-schema.test.mjs +241 -0
  410. package/src/wf-ui-server/__tests__/workflow-node-runtime.test.mjs +1991 -0
  411. package/src/wf-ui-server/__tests__/workflow-node-store-utils.test.mjs +125 -0
  412. package/src/wf-ui-server/__tests__/workflow-registry-drift.test.mjs +296 -0
  413. package/src/wf-ui-server/__tests__/workflow-resource-handle-four-side.test.mjs +217 -0
  414. package/src/wf-ui-server/__tests__/workflow-role-profile.test.mjs +234 -0
  415. package/src/wf-ui-server/__tests__/workflow-set-model.test.mjs +261 -0
  416. package/src/wf-ui-server/__tests__/workflow-skill-group-context-enabled.test.mjs +131 -0
  417. package/src/wf-ui-server/__tests__/workflow-skill-group-enable-disable.test.mjs +186 -0
  418. package/src/wf-ui-server/__tests__/workflow-skills-hub.test.mjs +125 -0
  419. package/src/wf-ui-server/__tests__/workflow-state-reconcile.test.mjs +139 -0
  420. package/src/wf-ui-server/__tests__/workflow-subagent-strategy-matrix.test.mjs +529 -0
  421. package/src/wf-ui-server/__tests__/workflow-team-flow.test.mjs +278 -0
  422. package/src/wf-ui-server/__tests__/workflow-terminal-control-live.test.mjs +294 -0
  423. package/src/wf-ui-server/__tests__/workflow-terminal-control.test.mjs +631 -0
  424. package/src/wf-ui-server/__tests__/workflow-timer-wakeup.test.mjs +318 -0
  425. package/src/wf-ui-server/__tests__/workflow-unified-resume.test.mjs +537 -0
  426. package/src/wf-ui-server/__tests__/workspace-api-hardening.test.mjs +187 -0
  427. package/src/wf-ui-server/__tests__/workspace-api.test.mjs +382 -0
  428. package/src/wf-ui-server/__tests__/workspace-reveal.test.mjs +138 -0
  429. package/src/wf-ui-server/__tests__/workspace-store-hardening.test.mjs +255 -0
  430. package/src/wf-ui-server/__tests__/workspace-store.test.mjs +208 -0
  431. package/src/wf-ui-server/__tests__/ws-events.integration.test.mjs +52 -25
  432. package/src/wf-ui-server/__tests__/ws-terminal.integration.test.mjs +12 -6
  433. package/src/wf-ui-server/__tests__/ws-wf-browser.integration.test.mjs +488 -0
  434. package/src/wf-ui-server/a2a-store.mjs +3007 -89
  435. package/src/wf-ui-server/action-registry.mjs +277 -0
  436. package/src/wf-ui-server/bridge-store.mjs +276 -0
  437. package/src/wf-ui-server/chat-driver.mjs +220 -0
  438. package/src/wf-ui-server/chat-store.mjs +109 -0
  439. package/src/wf-ui-server/claude-transcript-materializer.mjs +235 -0
  440. package/src/wf-ui-server/codex-update-prompt.mjs +53 -0
  441. package/src/wf-ui-server/component-node-store.mjs +689 -0
  442. package/src/wf-ui-server/composition-api.mjs +436 -0
  443. package/src/wf-ui-server/control-plane-token.mjs +17 -0
  444. package/src/wf-ui-server/dispatch-contract.mjs +150 -0
  445. package/src/wf-ui-server/drivers/claude-stream-json.mjs +371 -0
  446. package/src/wf-ui-server/drivers/codex-appserver.mjs +513 -0
  447. package/src/wf-ui-server/drivers/opencode-server.mjs +486 -0
  448. package/src/wf-ui-server/excalidraw-svg.mjs +141 -0
  449. package/src/wf-ui-server/file-format-adapters.mjs +511 -0
  450. package/src/wf-ui-server/file-watcher.mjs +215 -0
  451. package/src/wf-ui-server/graph-layout.mjs +778 -0
  452. package/src/wf-ui-server/harness-env.mjs +46 -0
  453. package/src/wf-ui-server/json-store-utils.mjs +48 -0
  454. package/src/wf-ui-server/model-capability.mjs +773 -0
  455. package/src/wf-ui-server/node-config-store.mjs +233 -0
  456. package/src/wf-ui-server/node-store-utils.mjs +88 -0
  457. package/src/wf-ui-server/peer-capsule.mjs +56 -1
  458. package/src/wf-ui-server/pty-adapter.mjs +513 -11
  459. package/src/wf-ui-server/reveal-foreground.mjs +69 -0
  460. package/src/wf-ui-server/runtime-detector.mjs +52 -6
  461. package/src/wf-ui-server/server.mjs +5613 -403
  462. package/src/wf-ui-server/session-cleanup.mjs +363 -0
  463. package/src/wf-ui-server/session-registry.mjs +179 -3
  464. package/src/wf-ui-server/settings.mjs +25 -0
  465. package/src/wf-ui-server/spawn-gate.mjs +46 -0
  466. package/src/wf-ui-server/task-parser.mjs +88 -3
  467. package/src/wf-ui-server/terminal-store.mjs +225 -11
  468. package/src/wf-ui-server/timer-wakeup-scheduler.mjs +226 -0
  469. package/src/wf-ui-server/wf-browser-store.mjs +733 -0
  470. package/src/wf-ui-server/workflow-agent-context.mjs +1731 -0
  471. package/src/wf-ui-server/workflow-capability-node-store.mjs +676 -0
  472. package/src/wf-ui-server/workflow-event-node-store.mjs +623 -0
  473. package/src/wf-ui-server/workflow-goal-node-store.mjs +328 -0
  474. package/src/wf-ui-server/workflow-graph-store.mjs +623 -0
  475. package/src/wf-ui-server/workflow-mcp-hub.mjs +286 -0
  476. package/src/wf-ui-server/workflow-node-runtime.mjs +1767 -0
  477. package/src/wf-ui-server/workflow-node-settings-store.mjs +339 -0
  478. package/src/wf-ui-server/workflow-node-types/agent-node.mjs +920 -0
  479. package/src/wf-ui-server/workflow-node-types/display-node.mjs +151 -0
  480. package/src/wf-ui-server/workflow-node-types/excalidraw-node.mjs +145 -0
  481. package/src/wf-ui-server/workflow-node-types/file-node.mjs +484 -0
  482. package/src/wf-ui-server/workflow-node-types/github-trigger-node.mjs +207 -0
  483. package/src/wf-ui-server/workflow-node-types/goal-node.mjs +491 -0
  484. package/src/wf-ui-server/workflow-node-types/markdown-node.mjs +225 -0
  485. package/src/wf-ui-server/workflow-node-types/mcp-connector-node.mjs +71 -0
  486. package/src/wf-ui-server/workflow-node-types/role-profile-store.mjs +191 -0
  487. package/src/wf-ui-server/workflow-node-types/skill-group-node.mjs +98 -0
  488. package/src/wf-ui-server/workflow-node-types/timer-node.mjs +607 -0
  489. package/src/wf-ui-server/workflow-ontology.mjs +681 -0
  490. package/src/wf-ui-server/workflow-operation-store.mjs +115 -0
  491. package/src/wf-ui-server/workflow-skills-hub.mjs +366 -0
  492. package/src/wf-ui-server/workflow-skills-market.mjs +723 -0
  493. package/src/wf-ui-server/workspace-store.mjs +951 -0
  494. package/src/wf-ui-server/ws-chat.mjs +299 -0
  495. package/src/wf-ui-server/ws-events.mjs +45 -20
  496. package/src/wf-ui-server/ws-terminal.mjs +165 -22
  497. package/src/wf-ui-server/ws-wf-browser.mjs +419 -0
  498. package/templates/common/.claude/agents/review-manager.md +33 -29
  499. package/templates/common/.claude/commands/wf-browser.md +1 -1
  500. package/templates/common/.claude/commands/wf-help.md +5 -3
  501. package/templates/common/.claude/commands/wf-init.md +44 -0
  502. package/templates/common/.claude/commands/wf-learn.md +34 -8
  503. package/templates/common/.claude/commands/wf-max.md +19 -9
  504. package/templates/common/.claude/commands/wf-review.md +3 -3
  505. package/templates/common/.claude/commands/wf-search.md +55 -0
  506. package/templates/common/.claude/commands/wf-task-archive.md +5 -4
  507. package/templates/common/.claude/commands/wf-task-list.md +6 -3
  508. package/templates/common/.claude/commands/wf-task-record.md +10 -2
  509. package/templates/common/.claude/commands/wf-ui.md +12 -5
  510. package/templates/common/.claude/commands/wf-update.md +4 -0
  511. package/templates/common/.claude/commands/wf.md +12 -1
  512. package/templates/common/.claude/rules/ecc/common.md +10 -1
  513. package/templates/common/.claude/skills/wf/SKILL.md +36 -0
  514. package/templates/common/.claude/skills/wf-browser/SKILL.md +427 -122
  515. package/templates/common/.claude/skills/wf-browser/references/BROWSER_CONTROL_PATTERNS.md +43 -0
  516. package/templates/common/.claude/skills/wf-init/SKILL.md +33 -0
  517. package/templates/common/.claude/skills/wf-learn/SKILL.md +106 -26
  518. package/templates/common/.claude/skills/wf-max/SKILL.md +45 -11
  519. package/templates/common/.claude/skills/wf-review/SKILL.md +26 -54
  520. package/templates/common/.claude/skills/wf-search/SKILL.md +122 -0
  521. package/templates/common/.claude/skills/wf-search/references/evidence-contract.md +77 -0
  522. package/templates/common/.claude/skills/wf-search/references/policies/compare.md +38 -0
  523. package/templates/common/.claude/skills/wf-search/references/policies/fact.md +39 -0
  524. package/templates/common/.claude/skills/wf-search/references/policies/troubleshoot.md +39 -0
  525. package/templates/common/.claude/skills/wf-search/references/policies/verify.md +44 -0
  526. package/templates/common/.claude/skills/wf-search/references/source-routing.md +40 -0
  527. package/templates/common/.claude/skills/wf-search/references/tool-adapters.md +38 -0
  528. package/templates/common/.claude/skills/wf-ui/SKILL.md +146 -12
  529. package/templates/common/.claude/skills/wf-update/SKILL.md +5 -1
  530. package/templates/common/.harness-version +188 -85
  531. package/templates/common/.opencode/agents/review-manager.md +31 -27
  532. package/templates/common/.opencode/commands/wf-browser.md +1 -1
  533. package/templates/common/.opencode/commands/wf-help.md +5 -3
  534. package/templates/common/.opencode/commands/wf-init.md +44 -0
  535. package/templates/common/.opencode/commands/wf-learn.md +34 -8
  536. package/templates/common/.opencode/commands/wf-max.md +19 -9
  537. package/templates/common/.opencode/commands/wf-review.md +3 -3
  538. package/templates/common/.opencode/commands/wf-search.md +55 -0
  539. package/templates/common/.opencode/commands/wf-task-archive.md +5 -7
  540. package/templates/common/.opencode/commands/wf-task-list.md +6 -6
  541. package/templates/common/.opencode/commands/wf-task-record.md +10 -5
  542. package/templates/common/.opencode/commands/wf-ui.md +12 -5
  543. package/templates/common/.opencode/commands/wf-update.md +4 -0
  544. package/templates/common/.opencode/commands/wf.md +12 -1
  545. package/templates/common/CLAUDE.md +61 -3
  546. package/templates/common/Harness/MEMORY.md +8 -5
  547. package/templates/common/Harness/README.md +14 -10
  548. package/templates/common/Harness/a2a/action-registry.json +4397 -0
  549. package/templates/common/Harness/a2a/role-graph.json +16 -3
  550. package/templates/common/Harness/a2a/skills/terminal-control.json +45 -1
  551. package/templates/common/Harness/a2a/skills/wf-ui-map.json +50 -0
  552. package/templates/common/Harness/a2a/skills/workflow-agent-node.json +143 -0
  553. package/templates/common/Harness/a2a/skills/workflow-context.json +95 -0
  554. package/templates/common/Harness/a2a/skills/workflow-diagram-node.json +60 -0
  555. package/templates/common/Harness/a2a/skills/workflow-display-node.json +69 -0
  556. package/templates/common/Harness/a2a/skills/workflow-file-node.json +92 -0
  557. package/templates/common/Harness/a2a/skills/workflow-goal-node.json +76 -0
  558. package/templates/common/Harness/a2a/skills/workflow-markdown-node.json +79 -0
  559. package/templates/common/Harness/a2a/skills/workflow-mcp-connector-node.json +59 -0
  560. package/templates/common/Harness/a2a/skills/workflow-node-actions.json +105 -0
  561. package/templates/common/Harness/a2a/skills/workflow-node-map.json +71 -0
  562. package/templates/common/Harness/a2a/skills/workflow-ontology.json +54 -0
  563. package/templates/common/Harness/a2a/skills/workflow-resource-node.json +68 -0
  564. package/templates/common/Harness/a2a/skills/workflow-skill-group-node.json +56 -0
  565. package/templates/common/Harness/a2a/skills/workflow-timer-node.json +81 -0
  566. package/templates/common/Harness/a2a/workflows.json +33 -0
  567. package/templates/common/Harness/ownership.manifest.json +263 -2
  568. package/templates/common/Harness/project/architecture.md +499 -0
  569. package/templates/common/Harness/research/README.md +20 -0
  570. package/templates/common/Harness/scripts/README.md +70 -6
  571. package/templates/common/Harness/scripts/a2a-terminal.mjs +12 -4
  572. package/templates/common/Harness/scripts/context-budget.mjs +7 -3
  573. package/templates/common/Harness/scripts/lib/memory-context.mjs +400 -0
  574. package/templates/common/Harness/scripts/lib/path-scope.mjs +77 -0
  575. package/templates/common/Harness/scripts/lib/research-policy.mjs +99 -0
  576. package/templates/common/Harness/scripts/lib/wf-search.mjs +189 -0
  577. package/templates/common/Harness/scripts/memory-context.mjs +63 -0
  578. package/templates/common/Harness/scripts/research-policy.mjs +27 -0
  579. package/templates/common/Harness/scripts/task-context.mjs +547 -0
  580. package/templates/common/Harness/scripts/task-group-index.mjs +242 -0
  581. package/templates/common/Harness/scripts/task-state.mjs +659 -95
  582. package/templates/common/Harness/scripts/validate-harness.mjs +70 -28
  583. package/templates/common/Harness/scripts/wf-auto-update-prompt.mjs +24 -0
  584. package/templates/common/Harness/scripts/wf-remove.mjs +10 -0
  585. package/templates/common/Harness/scripts/wf-search.mjs +10 -0
  586. package/templates/common/Harness/scripts/wf-ui-control.mjs +3144 -0
  587. package/templates/common/Harness/scripts/wf-update-check.mjs +274 -51
  588. package/templates/common/Harness/scripts/wf-update-runner.mjs +53 -16
  589. package/templates/common/Harness/settings.json +10 -0
  590. package/templates/common/Harness/specs/guides/SETUP.md +4 -3
  591. package/templates/common/Harness/specs/protocols/HARNESS_BRIDGE.md +429 -48
  592. package/templates/common/Harness/specs/protocols/MEMORY_PROTOCOL.md +24 -0
  593. package/templates/common/Harness/specs/protocols/TASK_ARCHIVE.md +14 -11
  594. package/templates/common/Harness/specs/runtime/command-surface.json +28 -0
  595. package/templates/common/Harness/specs/runtime/context-loading.md +6 -0
  596. package/templates/common/Harness/specs/runtime/dispatch.md +9 -1
  597. package/templates/common/Harness/specs/runtime/subagents.md +20 -5
  598. package/templates/common/Harness/specs/workflows/WF-AUTO-SPARK.md +19 -0
  599. package/templates/common/Harness/specs/workflows/WF-AUTO.md +21 -0
  600. package/templates/common/Harness/specs/workflows/WF-KERNEL.md +4 -2
  601. package/templates/common/Harness/specs/workflows/WF-MAX.md +39 -12
  602. package/templates/common/Harness/specs/workflows/WF-STATE.md +62 -14
  603. package/templates/common/Harness/specs/workflows/WF.md +32 -0
  604. package/templates/common/Harness/tasks/INDEX.json +7 -0
  605. package/templates/common/Harness/tasks/INDEX.md +12 -0
  606. package/templates/common/Harness/tasks/_template/PLAN.md +6 -0
  607. package/templates/common/Harness/tasks/_template/PROGRESS.md +5 -0
  608. package/templates/common/Harness/tasks/_template/STATE.json +22 -0
  609. package/templates/common/Harness/templates/TEST_PLAN.template.md +5 -4
  610. package/templates/common/Harness/templates/UI_CONTRACT.template.md +7 -5
  611. package/templates/common/Harness/wf-browser/README.md +69 -0
  612. package/templates/common/README.md +17 -0
  613. package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js +0 -17
  614. package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js.map +0 -1
  615. package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js +0 -7
  616. package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js.map +0 -1
  617. package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js +0 -12
  618. package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js.map +0 -1
  619. package/src/ui/dist/assets/TaskList-BN4r8s1i.js +0 -50
  620. package/src/ui/dist/assets/TaskList-BN4r8s1i.js.map +0 -1
  621. package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js +0 -74
  622. package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js.map +0 -1
  623. package/src/ui/dist/assets/WorkflowRoute-BnuhLJ6X.css +0 -1
  624. package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js +0 -39
  625. package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js.map +0 -1
  626. package/src/ui/dist/assets/index-BOVYWntB.js +0 -117
  627. package/src/ui/dist/assets/index-BOVYWntB.js.map +0 -1
  628. package/src/ui/dist/assets/index-DaUObq0H.css +0 -1
  629. package/src/ui/dist/assets/maximize-2-LNrr_rKr.js +0 -7
  630. package/src/ui/dist/assets/maximize-2-LNrr_rKr.js.map +0 -1
  631. package/src/ui/dist/assets/plus-QuTJyoT3.js +0 -7
  632. package/src/ui/dist/assets/plus-QuTJyoT3.js.map +0 -1
  633. package/src/ui/dist/assets/proxy-D0vUbds5.js.map +0 -1
  634. package/src/ui/dist/assets/refresh-cw-JNmExijd.js.map +0 -1
  635. package/src/ui/dist/assets/terminal-BBQvnOAK.js.map +0 -1
  636. package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js +0 -7
  637. package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js.map +0 -1
  638. package/src/ui/dist/assets/x-DoIOGAJz.js.map +0 -1
  639. package/src/ui/pnpm-lock.yaml +0 -1582
  640. package/src/ui/src/App.tsx +0 -86
  641. package/src/ui/src/api.ts +0 -93
  642. package/src/ui/src/components/AgentsRoute.tsx +0 -503
  643. package/src/ui/src/components/Footer.tsx +0 -69
  644. package/src/ui/src/components/Header.tsx +0 -175
  645. package/src/ui/src/components/LoadingView.tsx +0 -22
  646. package/src/ui/src/components/RolesRoute.tsx +0 -169
  647. package/src/ui/src/components/SettingsRoute.tsx +0 -166
  648. package/src/ui/src/components/TaskList.tsx +0 -388
  649. package/src/ui/src/components/TerminalDrawer.tsx +0 -611
  650. package/src/ui/src/components/WorkflowRoute.tsx +0 -670
  651. package/src/ui/src/hooks/useReducedMotion.ts +0 -17
  652. package/src/ui/src/hooks/useServerConnection.ts +0 -114
  653. package/src/ui/src/index.css +0 -281
  654. package/src/ui/src/main.tsx +0 -11
  655. package/src/ui/src/types.ts +0 -108
  656. /package/src/ui/dist/assets/{TerminalDrawer-6GBZ9nXN.css → terminalControl-6GBZ9nXN.css} +0 -0
@@ -45,6 +45,24 @@ Use interfaces and module boundaries to protect real seams in the generator, not
45
45
  - Avoid speculative abstraction: do not add plugin systems, generic runners, extra config layers, or service containers until a real second use or testability boundary exists.
46
46
  - When a boundary is real, express it with a small data contract and test it through generated output behavior.
47
47
 
48
+ ## 2.1 Intelligence Routing and Source Reuse
49
+
50
+ Context and research are routing boundaries, not implicit dependencies. WF and
51
+ WF-MAX create a role-scoped task-context pack and consult the local research
52
+ policy only for a capability gap, volatile API, explicit request, repeated
53
+ failure, or benchmark gap. A source is recorded with URL, checked date,
54
+ version/terms, and an adopt/adapt/reject reason before any contract is reused;
55
+ prose ideas do not imply copied code or a dependency.
56
+
57
+ | Source | Reuse decision | Boundary |
58
+ | --- | --- | --- |
59
+ | [Anthropic: Building effective agents](https://www.anthropic.com/research/building-effective-agents) | Adapt composable-role and evaluator ideas | Validate against local runtime evidence; no code copied |
60
+ | [Anthropic: Effective context engineering](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents) | Adapt finite, task-specific context budgeting | Implement as bounded packs; do not claim provider cache gains without telemetry |
61
+ | [Anthropic: Effective harnesses for long-running agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents) | Adapt resumable handoff/evaluation framing | Bind to local STATE/A2A contracts and holdout checks |
62
+ | [OpenAI: Harness engineering](https://openai.com/index/harness-engineering/) | Adapt repository feedback-loop concepts | Process reference only; no equivalence or SOTA claim |
63
+ | [Hugging Face: smolagents agents reference](https://huggingface.co/docs/smolagents/en/reference/agents) | Adapt bounded managed-agent/step-limit concepts | Reject Python dependency import; verify version before reuse |
64
+ | [Hugging Face: ScreenSuite](https://huggingface.co/blog/screensuite) | Adapt hierarchical/holdout evaluation framing | Do not borrow scores or claim SOTA |
65
+
48
66
  ## 3. State Design
49
67
 
50
68
  State in this repo should be explicit, serializable, and owned by one layer.
@@ -55,6 +73,406 @@ State in this repo should be explicit, serializable, and owned by one layer.
55
73
  - Release state lives in `package.json`, npm, git tags, and GitHub; document commands in `README.md`, not `CLAUDE.md`.
56
74
  - Long-running agent work records resumable status in `Harness/tasks/<task-id>/PLAN.md#Heartbeat`.
57
75
 
76
+ ### 3.1 WF-UI Component Node State Contract
77
+
78
+ WF-UI component nodes have three distinct state shapes. Code, tests, and fixtures
79
+ must keep them separate:
80
+
81
+ - **Persistent state** lives at `Harness/a2a/component-nodes/<nodeId>/state.json`.
82
+ It is backend-owned, revisioned, and is the source of truth for user-editable
83
+ Markdown, Excalidraw, and File component state.
84
+ - **Agent refs** live in `stateRef`, `contentRef`, and `componentStateRefs`.
85
+ Refs contain only enough metadata for agents to locate state: path, revision,
86
+ type, title, and small file metadata when needed. Refs are not renderable UI
87
+ state and must not inline `markdown`, `scene`, or editable file payloads.
88
+ - **UI hydration state** lives in `/api/a2a/snapshot#componentNodes`. The first
89
+ paint workflow UI must receive full component state here so previews,
90
+ fullscreen editors, save buttons, and thumbnails hydrate from the same
91
+ revision the backend will later guard on save.
92
+
93
+ Invariants:
94
+
95
+ - `index.json`, `state.json`, `/api/workflow/nodes/:nodeId`,
96
+ `graph.componentStateRefs`, and `snapshot.componentNodes` must agree on
97
+ `nodeId`, `type`, `statePath`, and `revision`.
98
+ - `statePath` must use `Harness/a2a/component-nodes/<nodeId>/state.json`; the
99
+ legacy `Harness/a2a/component-nodes/<nodeId>.json` shape is invalid for new
100
+ code, tests, and docs.
101
+ - Defaults may seed newly created component nodes only. Existing persisted nodes
102
+ must not silently hydrate to empty Markdown, empty Excalidraw scenes, or empty
103
+ file metadata when their state file is missing or malformed.
104
+ - Global workflow snapshots, graph maps, runtime node lists, and Agent contexts
105
+ enumerate live component nodes only. If `index.json` still references a
106
+ missing, malformed, or revision-mismatched `state.json`, the global snapshot
107
+ must skip that component and any dangling edges instead of crashing the
108
+ backend or synthesizing empty state.
109
+ - Direct component reads remain strict: `GET /api/a2a/component-nodes/:id` and
110
+ typed component state updates must return the state mismatch error until the
111
+ stale index entry is deleted or repaired. Delete paths must still be able to
112
+ remove stale index entries whose state file is already gone.
113
+ - UI tests and Playwright fixtures must either use real backend endpoints or
114
+ mirror this contract exactly; mocks must not invent alternate handles, paths,
115
+ revisions, or hydration shapes.
116
+
117
+ ### 3.2 WF-UI Workflow Connection State Contract
118
+
119
+ WF-UI graph connections are bidirectional by default. Persisted edge endpoint
120
+ fields preserve geometry and handle ordering; they are not a semantic permission
121
+ direction.
122
+
123
+ Invariants:
124
+
125
+ - Persisted graph edges may store `from`/`to` and `source`/`target`, but these
126
+ fields identify stable endpoint order for rendering, handles, offsets, and
127
+ revisioned graph writes only.
128
+ - Runtime node snapshots, A2A resource refs, and agent-readable graph context
129
+ must expose `direction: "bidirectional"` plus endpoint-specific
130
+ `endpointRole: "source" | "target"`.
131
+ - Connection refs must include `edgeId`, `localHandle`, `peerHandle`,
132
+ `sourceHandle`, `targetHandle`, and `relation`. UI display labels must not be
133
+ reused as semantic `relation` values.
134
+ - Resource nodes with one shared editable surface must expose one semantic
135
+ bidirectional resource port and separate physical side handles. Markdown uses
136
+ semantic port `markdown`; Excalidraw uses semantic port `scene`. ReactFlow may
137
+ render them as `markdown:left`/`markdown:right` and
138
+ `scene:left`/`scene:right`, but those physical handles are geometry only.
139
+ - Markdown and Excalidraw must not be modeled as `input`/`output` split ports.
140
+ Both physical sides can start or receive a connection. Agent-readable context,
141
+ labels, and capability checks use the semantic port, not the physical side.
142
+ - A bidirectional physical side must render as exactly one user-visible and DOM
143
+ handle for that side. Do not stack hidden source/target handles with the same
144
+ id to simulate bidirectionality; that creates ambiguous ReactFlow hit targets
145
+ and can snap a user drag to the wrong node. If a canvas library cannot support
146
+ one DOM handle that can start and receive connections, add an adapter-level
147
+ abstraction or tests before shipping that node.
148
+ - Graph readers and writers must normalize missing or legacy aliases at every
149
+ boundary that touches persisted graph state: graph-map load/write, workflow
150
+ edge APIs, A2A snapshots, runtime node snapshots, and ReactFlow import/export.
151
+ - Bare physical aliases such as `left` and `right` preserve their side before
152
+ semantic fallback. Normalizers must not invert them by source/target role.
153
+ - Duplicate edge validation is undirected. `A -> B` and `B -> A` are the same
154
+ workflow connection unless a future explicit permission/direction mode adds a
155
+ separate contract.
156
+ - UI labels and markers must present default workflow links as bidirectional.
157
+ Tests and fixtures must include the same connection shape as production and
158
+ must reject reverse duplicate pairs.
159
+
160
+ ### 3.3 WF-UI Node Catalog Contract
161
+
162
+ WF-UI node creation must be registry-driven. The top-right create button and the
163
+ canvas create-node path render the same searchable catalog; they must not keep
164
+ separate hardcoded button grids.
165
+
166
+ Invariants:
167
+
168
+ - `src/ui/src/components/workflow/nodeRegistry.tsx` owns create-node catalog
169
+ metadata: `kind`, `category`, `state`, `label`, `description`,
170
+ `agentSemantics`, `searchText`, and icon.
171
+ - Catalog `state` is either `ready` or `planned`. `ready` items may create
172
+ runtime nodes. `planned` items are visible for discoverability. Most planned
173
+ items are disabled, but planned capability items may open a read-only Hub
174
+ drawer when they declare explicit hub metadata; opening a Hub is not the same
175
+ as creating a runtime node.
176
+ - The ready direct-create set is currently Agent, File, Markdown, Diagram, and
177
+ Timer. Skill group and MCP connector catalog entries open Hubs that may create
178
+ backend-owned capability nodes. Single Skill remains attach-only through an
179
+ Agent-targeted Skills Hub. Planned items still cover Trigger, GitHub trigger,
180
+ and Group/subgraph. Goal nodes are synthetic views over active Harness tasks
181
+ and are not direct-create catalog items.
182
+ - Search, category grouping, disabled state, and semantic copy are derived from
183
+ catalog metadata. UI tests must assert the same selectors used by production:
184
+ `workflow-create-node-search`, `workflow-create-node-options`,
185
+ `workflow-create-node-group`, and `workflow-create-node-option` with
186
+ `data-node-kind`, `data-node-category`, `data-node-state`,
187
+ `data-node-action`, optional `data-node-hub`, and `data-agent-semantics`.
188
+ - A future node type may not become `ready` as a canvas-only widget. It must
189
+ declare its Node Runtime adapter, storage/state ownership, graph ports,
190
+ direction semantics, settings/action schema, and browser/API regression tests
191
+ first.
192
+
193
+ ### 3.4 WF-UI Capability Hub Contract
194
+
195
+ Skills and MCP entries are capability providers for Agent nodes. They are not
196
+ standalone executors until a later runtime contract defines lifecycle,
197
+ sandboxing, permissions, and audit logs.
198
+
199
+ Invariants:
200
+
201
+ - `GET /api/workflow/skills-hub` is a read-only metadata index. It scans only
202
+ allowed skill roots, defaults to project scope, reads only bounded `SKILL.md`
203
+ files, and returns `schemaVersion`, `query`, `roots`, `summary`,
204
+ `nodeSemantics`, `skills`, and `groups`.
205
+ - Hub responses must not expose absolute local paths, skill bodies, secrets, or
206
+ executable command output. Source locations are project-relative or `~/...`
207
+ display paths only.
208
+ - The create-node catalog may open the Skills Hub for Skill and Skill group
209
+ entries and may open the MCP Hub for MCP connector entries. Runtime creation
210
+ is allowed only for node types with backend-owned state, runtime adapters,
211
+ graph ports, Agent context refs, and browser/API regression tests.
212
+ - The Hub drawer contract is stable: `workflow-capability-hub-drawer`,
213
+ `workflow-capability-hub-search`, `workflow-capability-hub-item`,
214
+ `workflow-capability-attach`, and `workflow-capability-create-node`, with
215
+ `data-hub-kind`, `data-origin`, and optional `data-target-agent-id`.
216
+ - Skill attachment is enabled only when the Hub has a target Agent node. The
217
+ attach action updates that Agent config through `skills` and
218
+ `skillPolicy: "manual"`; a Hub opened without an Agent target remains
219
+ read-only with disabled attach controls.
220
+ - Agent-readable context exposes attached skills through
221
+ `connectedCapabilityRefs`, `effectiveSkills`, and `skillPolicy`. These refs
222
+ use relation `capability`, `direction: "bidirectional"`, and
223
+ `executor: "agent"` because the Agent remains the executor and mediator.
224
+ - `skill-group` is the first runtime capability-provider node. Its state lives
225
+ under `Harness/a2a/capability-nodes/<nodeId>/state.json`, is revisioned, and
226
+ appears in snapshots through `capabilityNodes` and `capabilityStateRefs`.
227
+ - A Skill group node is created from a Skills Hub group, not as a standalone
228
+ executor. It exposes one semantic bidirectional `capability` port rendered as
229
+ physical handles `capability:left` and `capability:right`; both sides may start
230
+ or receive resource/capability links.
231
+ - When connected to an Agent, a Skill group contributes
232
+ `connectedCapabilityNodeRefs`, merged `connectedCapabilityRefs`, and
233
+ `effectiveSkills` to that Agent context. The link uses relation `capability`,
234
+ `direction: "bidirectional"`, and `executor: "agent"`.
235
+ - Skill group nodes may store only bounded metadata: group id/label/kind, skill
236
+ names, source summaries, and counts. They must not persist skill bodies,
237
+ absolute local paths, command output, secrets, or MCP credential probes.
238
+ - `GET /api/workflow/mcp-hub` is a no-spawn, no-secret, read-only metadata
239
+ endpoint. It indexes project MCP config files only, exposes redacted server
240
+ metadata and summary counts, and never launches servers, tests credentials, or
241
+ leaks environment values.
242
+ - `mcp-connector` is a runtime capability-provider node created from MCP Hub
243
+ server metadata. The frontend sends only `mcpServerId`; the backend re-reads
244
+ the Hub and persists only the sanitized record: server names, transport,
245
+ command basename, arg count, redacted URL, env key names, source summaries,
246
+ risk flags, and counts. It exposes the same bidirectional `capability` port
247
+ and `capability:left|right` physical handles as other capability providers.
248
+ - When connected to an Agent, an MCP connector contributes
249
+ `connectedCapabilityNodeRefs` and merged `connectedCapabilityRefs`, but does
250
+ not add server names to `effectiveSkills`. Direct MCP attach, credential
251
+ probing, tool listing, and tool invocation remain gated until a separate
252
+ permission/audit/runtime contract exists.
253
+
254
+ ### 3.5 WF-UI Event Node Contract
255
+
256
+ Timer is the first runtime event node. Event nodes may use directed event
257
+ outputs, but that direction is explicit and local to event emission. It must not
258
+ change the default bidirectional semantics of Agent, Markdown, Excalidraw, File,
259
+ Skill, or MCP capability links.
260
+
261
+ Invariants:
262
+
263
+ - Timer state lives under `Harness/a2a/event-nodes/<nodeId>/state.json` and is
264
+ backend-owned, revisioned, and represented in snapshots through `eventNodes`,
265
+ `eventStateRefs`, and `connectedEventRefs`.
266
+ - Timer exposes a directed `event` output, a `config` input, and an optional
267
+ bidirectional `status` port. The persisted Timer-to-Agent event edge uses
268
+ `direction: "source-to-target"` and relation `event`; Agent-to-Timer mutable
269
+ control uses a separate relation `control` edge.
270
+ - Advanced Timer state may include once, interval, cron, loop, adaptive,
271
+ watchdog, while, and task cadence metadata plus base heartbeat, watchdog
272
+ heartbeat, task binding, and control policy. Loop/while/task/adaptive modes
273
+ are declarative metadata only; runtime tick logic must never evaluate
274
+ user-authored code from Timer settings.
275
+ - Timer double-click opens the expanded Timer workbench for schedule mode,
276
+ base heartbeat, and WDT configuration. The right-click settings panel stays a
277
+ lightweight management surface and must not be the only way to edit schedule
278
+ details.
279
+ - Agent Timer actions such as interval changes, WDT ack/reset, enable/disable,
280
+ and mode changes require an explicit control edge and must be exposed through
281
+ bounded runtime actions instead of direct state-file writes.
282
+ - A directed event edge is duplicate-checked by ordered endpoints, relation, and
283
+ handles. This is separate from the unordered duplicate rule for default
284
+ bidirectional workflow links.
285
+ - Event node catalog entries become `ready` only after storage, runtime adapter,
286
+ graph-map direction persistence, agent context refs, settings/actions, and
287
+ browser/API regression tests are green.
288
+ - Trigger and GitHub trigger remain planned until their webhook/auth/replay,
289
+ dedupe, security, and audit contracts are written and tested.
290
+
291
+ ### 3.6 WF-UI Goal Node Contract
292
+
293
+ Goal nodes are synthetic task-state nodes generated from active Harness tasks.
294
+ They let the workflow canvas show completion intent, acceptance state, progress,
295
+ and watchdog state without giving arbitrary Agents direct authority over task
296
+ closeout.
297
+
298
+ Invariants:
299
+
300
+ - Goal node ids are derived from task ids and state is read from
301
+ `Harness/tasks/<taskId>/STATE.json` plus a backend-owned sidecar under
302
+ `Harness/a2a/goal-nodes/<goalId>/state.json`.
303
+ - Goal nodes expose bidirectional `goal:left|right` handles for Agent
304
+ collaboration links and appear in snapshots through `goalNodes` and
305
+ `connectedGoalRefs`.
306
+ - Goal double-click opens the expanded Goal workbench for user-owned edits to
307
+ title, objective, next action, acceptance rows, and WDT settings. These edits
308
+ write the Goal sidecar and do not directly mutate task `STATE.json`.
309
+ - `goal.update` must not accept closeout authority fields such as task status,
310
+ phase, or gate. Completion/status transitions use the dedicated two-phase
311
+ Goal actions.
312
+ - Agent-authored mutable Goal actions, including `goal.update`, require an
313
+ existing bidirectional `goal` edge when `actorNodeId` is present. UI/user
314
+ edits omit `actorNodeId`; unlinked Agent writes are rejected with
315
+ `GOAL_EDGE_REQUIRED`.
316
+ - Agent completion is two-phase: `goal.requestCompletion` writes a proposal to
317
+ the sidecar, while direct mutation of task `STATE.json` remains gated behind a
318
+ separate closeout authority contract.
319
+ - Goal WDT acknowledgement/feed state is separate from task completion state so
320
+ failed or stopped Agents can be recovered without marking the task complete.
321
+
322
+ ### 3.7 WF-UI Node Operation Language
323
+
324
+ Workflow node gestures must map to a stable operation model across node kinds.
325
+
326
+ Invariants:
327
+
328
+ - Single-click selects a node and never opens a heavy editor.
329
+ - Right-click opens a lightweight context menu or settings panel for node
330
+ management actions such as settings, delete, duplicate, copy, cut, and
331
+ open-config affordances.
332
+ - Double-click opens the node's primary workbench: Agent opens terminal mode,
333
+ Markdown opens the enlarged editor, Excalidraw opens the enlarged scene
334
+ editor, Timer opens the expanded schedule workbench, and Goal opens the
335
+ expanded Goal workbench.
336
+ - Expanded workbenches own draft UI state and save through typed node runtime
337
+ actions. Backend-owned snapshots and revisioned sidecars remain the source of
338
+ truth after save.
339
+
340
+ ### 3.8 Agent Graph Operation Control
341
+
342
+ Agent-authored graph changes are first-class operations, not inferred UI state.
343
+
344
+ Invariants:
345
+
346
+ - Main Agent graph authority is exposed through typed `agent.*` node runtime
347
+ actions: `agent.readGraph`, `agent.createNode`, `agent.connectNodes`,
348
+ `agent.disconnectNodes`, `agent.moveNode`, `agent.deleteNode`, and
349
+ `agent.deleteNodes`.
350
+ - Agent node-map skills and CLI commands are API wrappers over
351
+ `POST /api/workflow/nodes/:actor/actions/agent.*`. `Harness/a2a/workflow-map.json`
352
+ and node state sidecars are backend-owned storage and may be read for
353
+ diagnostics only; Agent nodes must never edit or delete those files to control
354
+ the canvas.
355
+ - Compatibility commands such as `wf-ui-control.mjs connect` and
356
+ `wf-ui-control.mjs delete-node` must delegate to the same typed `agent.*`
357
+ actions instead of writing a whole graph map or calling legacy graph-node
358
+ delete routes directly.
359
+ - Non-main Agents cannot mutate the whole graph unless a future permission model
360
+ grants that authority explicitly. Unauthorized graph mutations must fail with a
361
+ 403-style error.
362
+ - Every successful Agent graph action appends a bounded operation record under
363
+ `workflow.operations.recent[]` with only audit/animation metadata:
364
+ `id`, `kind`, `actor`, `targetNodeIds`, `edgeIds`, `status`, `startedAt`,
365
+ `completedAt`, and `expiresAt`.
366
+ - Operation records must not store prompts, transcripts, payload bodies, secrets,
367
+ raw MCP config, or large user content.
368
+ - The frontend visualizes Agent control from operation records only. Canvas
369
+ aura, controlled-node glow, and Agent-to-node data-flow edge animation must
370
+ read `targetNodeIds` and `edgeIds`; they must not guess control from node type,
371
+ handle side, or edge direction.
372
+ - Browser bridge graph intents use the same operation vocabulary as human UI:
373
+ `graph.createNode`, `graph.connectNodes`, `graph.disconnectNodes`, and
374
+ `graph.moveNode`, `graph.deleteNode`, and `graph.deleteNodes`. A semantic
375
+ intent must issue one semantic mutation request and return operation metadata
376
+ on success.
377
+ - Delete operations must protect the active controller: self-delete is rejected,
378
+ bulk delete skips the actor and live Agents by default, and virtual Goal node
379
+ deletion hides the canvas node without mutating the underlying task capsule.
380
+ - Operation records are observability and handoff metadata. They are not a durable
381
+ scheduler, retry engine, authorization policy, or workflow-run state machine.
382
+
383
+ ### 3.9 Agent Node Context, Workspace, Skills, and Final Debug Matrix
384
+
385
+ Agent nodes are graph actors with a bounded local workspace and a typed control
386
+ plane. They must not rely on terminal prompt text alone to understand the graph.
387
+
388
+ Current required contract:
389
+
390
+ - Identity comes from environment plus node home:
391
+ `HARNESS_WORKFLOW_NODE_ID`, `HARNESS_PEER_SESSION_ID`,
392
+ `HARNESS_AGENT_KIND`, `HARNESS_WF_UI_URL`, `HARNESS_NODE_HOME`, and
393
+ `HARNESS_NODE_INIT`.
394
+ - Each Agent node owns a durable node home under
395
+ `Harness/a2a/nodes/<sessionId>/` with `STATE.json`, `init.md`, and a startup
396
+ `graph-snapshot.json`. This folder is the Agent's local run workspace, not the
397
+ node-map control surface.
398
+ - Agent working directory (`cwd`) is explicit session config and remains bounded
399
+ by the project workspace APIs. Workspace file changes go through
400
+ `/api/workspace/*`; graph and node state changes go through `/api/workflow/*`.
401
+ - Canonical context has one shape. `GET /api/workflow/context/:node`,
402
+ `workflow-context`, and `agent.readContext` must expose the same core Agent
403
+ context fields: `identity`, `workspace`, `connectedResourceRefs`, `connectedAgentRefs`,
404
+ `connectedEventRefs`, `connectedCapabilityRefs`,
405
+ `connectedCapabilityNodeRefs`, `connectedGoalRefs`, `defaultSkills`,
406
+ `effectiveSkills`, `skillTriggers`, `ontology`, `affordances`, and
407
+ `outputRouting`.
408
+ - Default Agent skills are machine-readable capabilities, not only prompt text:
409
+ `workflow-ontology`, `workflow-context`, `workflow-node-actions`,
410
+ `workflow-node-map`, and `terminal-control`. Each workflow skill must include
411
+ short trigger phrases for semantic selection, for example graph control,
412
+ connected-context observation, flowchart/diagram output, Goal updates, Timer
413
+ control, direct Agent messaging, broadcast Agent messaging, shared Markdown
414
+ context, worker delegation, and output readback.
415
+ - Capability nodes and Skill groups attach metadata to Agent context. They do
416
+ not execute independently. MCP connector nodes are metadata-only until a
417
+ separate permission, tool-list, invocation, audit, and sandbox contract exists.
418
+ - Before acting, an Agent must run the loop `observe -> plan -> act -> verify ->
419
+ report`: read ontology, read its context, choose connected affordances, perform
420
+ typed actions, then verify by reading the mutated node or peer output.
421
+ - Durable output selection is modality-aware. Connected writable Excalidraw is
422
+ the preferred target for diagrams, flowcharts, sketches, and visual plans.
423
+ Connected writable Markdown is the preferred target for reports, notes, plans,
424
+ and long-form text. Terminal prose is a summary or fallback.
425
+ - Connected Agent nodes are collaborators only when they appear in
426
+ `connectedAgentRefs`. Any connected Agent may send a one-to-one message with
427
+ `send-agent-message`/`agent.sendMessage` and reply through the same action.
428
+ One-to-many communication uses `broadcast-agent-message`/
429
+ `agent.broadcastMessage`, which records one bridge envelope per recipient.
430
+ Main Agents may still use legacy `delegate-agent`/`agent.sendInput` for
431
+ worker prompt submission, then verify with `read-agent`,
432
+ `read-agent-messages`, or `bridge-messages`. Built-in subagents are a
433
+ fallback when the graph lacks a suitable connected worker.
434
+ - A connected Markdown node with relation `shared-context` is the local
435
+ blackboard for Agent collaboration. Agents read/write it through typed
436
+ Markdown actions only; File nodes can be shared read context through file
437
+ actions but are not the default writable blackboard.
438
+ - Parallelism is a graph scheduling decision, not a terminal waiting habit.
439
+ Independent work packets may fan out to connected Agent workers; dependent
440
+ packets must wait for verified outputs or explicit Goal/Timer state.
441
+ - Agent prompt delivery must use the canonical prompt-submit path: write prompt
442
+ body first, then send Enter after a short delay. Tests must cover delayed
443
+ Enter behavior and durable node-state readback.
444
+
445
+ Final debug matrix:
446
+
447
+ | Area | Probe | Pass condition |
448
+ | --- | --- | --- |
449
+ | Agent identity/workspace | Start or create Agent, read node home and `self` output | `STATE.json`, `init.md`, env ids, `cwd`, `nodeHomeRel`, and graph node id agree |
450
+ | Canonical context | Compare `workflow-context` and `agent.readContext` | Both expose ontology, effective skills, connected refs, affordances, and output routing |
451
+ | Connected resource output | Ask Agent for a flowchart or long-form note | Agent uses connected Excalidraw/Markdown node actions and verifies revision/content |
452
+ | Graph control | Ask Main Agent to create/connect/move/delete nodes | Only typed `agent.*` actions mutate graph; operation records appear in `workflow.operations.recent[]` |
453
+ | Agent direct communication | Connect A-B and ask each side to message/reply | Both sides use `agent.sendMessage`, bridge envelopes record node/session ids, and `agent.readMessages` reads the thread |
454
+ | Agent broadcast communication | Connect A to B/C and broadcast one task | A records one delivered bridge envelope per connected recipient and reports skipped/unconnected recipients |
455
+ | Shared context | Connect A/B to one Markdown `shared-context` node | Both Agents see the same Markdown ref and use typed Markdown actions as a local blackboard |
456
+ | Worker orchestration | Connect Agent workers and delegate independent tasks | Main Agent chooses connected workers first, submits prompts, reads outputs, and records bridge evidence |
457
+ | Authority edges | Try Timer/Goal writes with and without links | Timer control needs `control`; Goal writes need bidirectional `goal`; unlinked Agent writes fail |
458
+ | Readback consistency | After every mutation, read through API, context, and UI snapshot | Node ids, revisions, handles, relations, and affordances match across all paths |
459
+ | Browser evidence | Run wf-browser or Browser-plugin route checks | UI-visible graph operations and operation animations match backend operation records |
460
+
461
+ Implementation path:
462
+
463
+ 1. Keep closing duplicate context surfaces first. Any Agent-readable context API
464
+ must delegate to the canonical builder or prove field parity in tests.
465
+ 2. Expand default workflow skills by semantic trigger phrases and keep generated
466
+ templates, dogfood manifests, Agent init text, and tests synchronized.
467
+ 3. Add an Agent-run orchestrator only after connected-Agent delegation, retry,
468
+ cancel, timeout, result collation, and Goal/Timer state transitions have a
469
+ durable state machine separate from `workflow.operations.recent[]`.
470
+ 4. Add scheduler/event delivery only after Timer due events have a durable queue,
471
+ replay/idempotency keys, watchdog recovery, and Agent wake-up semantics.
472
+ 5. Treat every new node type as incomplete until it has storage, runtime actions,
473
+ ontology entries, context refs, UI handles, settings/workbench UX, browser
474
+ evidence, and readback tests.
475
+
58
476
  ## 4. Core Components
59
477
 
60
478
  ### 4.1 CLI Entry
@@ -96,6 +514,77 @@ State in this repo should be explicit, serializable, and owned by one layer.
96
514
  - **Responsibility**: Govern future AI-agent work in this repository.
97
515
  - **Does NOT handle**: Changing package output unless edits are made to `templates/**` or source code.
98
516
 
517
+ ### 4.7 WF-UI Agent-Operable Browser Control Plane
518
+
519
+ - **Location**: `src/wf-ui-server/wf-browser-store.mjs`, `src/wf-ui-server/ws-wf-browser.mjs`, `src/wf-ui-server/server.mjs`, `src/ui/src/wfBrowserClient.ts`, `src/ui/src/wfBrowserDebug.tsx`, `src/ui/src/wfBrowserRouteCapabilities.ts`, `Harness/scripts/wf-ui-control.mjs`
520
+ - **Template location**: `templates/common/Harness/scripts/wf-ui-control.mjs`, `templates/common/.claude/skills/wf-ui/SKILL.md`
521
+ - **Responsibility**: Provide the backend foundation, launch URL allocator, frontend debug bridge, visible action primitives, first-party route capability maps, and local browser launch/close lifecycle for `wf-browser` run/window/lease/artifact/command control without coupling it to task parsing, terminal PTY state, or the existing task invalidation WebSocket.
522
+ - **Does NOT handle yet**: Trusted screenshot capture from the browser process, browser-process network/AST capture, replay playback UI, automatic close on every closeout path, or deep route-owned capability maps for every nested wf-ui surface.
523
+
524
+ Data contract:
525
+
526
+ ```text
527
+ Harness/wf-browser/
528
+ runs/
529
+ <runId>/
530
+ manifest.json
531
+ timeline.jsonl
532
+ sessions.json
533
+ windows/
534
+ <windowId>/
535
+ window.json
536
+ leases.json
537
+ browser-launches.json
538
+ artifacts.jsonl
539
+ screenshots/
540
+ ui-tree/
541
+ state/
542
+ logs/
543
+ network/
544
+ ast/
545
+ replay/
546
+ analysis/
547
+ ```
548
+
549
+ Control rules:
550
+
551
+ - `POST /api/wf-browser/runs` creates an isolated browser evidence run.
552
+ - `GET /api/wf-browser/runs/:runId/windows` lists a run's current window pool for multi-subagent dispatch and handoff.
553
+ - `POST /api/wf-browser/runs/:runId/windows` creates a logical browser window slot for one agent, route, viewport, and fixture scope.
554
+ - `POST /api/wf-browser/runs/:runId/windows/:windowId/lease` grants `control` or read-only `observe` access.
555
+ - A `control` lease is exclusive per window; conflicting mutating agents receive `LEASE_CONFLICT`.
556
+ - `GET /api/wf-browser/runs/:runId/windows/:windowId/launch-url` returns the local wf-ui URL with no frontend token and debug-only params: `wfRun`, `wfWindow`, optional `wfLease`, and `wfDebug`.
557
+ - `GET /api/wf-browser/connections` lists currently registered frontend debug clients; `Harness/scripts/wf-ui-control.mjs browser-wait` polls it before command dispatch when a launch URL was just opened or refreshed.
558
+ - `POST /api/wf-browser/runs/:runId/windows/:windowId/commands` validates the lease, dispatches a bounded `observe.*` or `act.*` command over `/ws/wf-browser`, records action evidence, and stores observation artifacts when applicable.
559
+ - `POST /api/wf-browser/runs/:runId/windows/:windowId/artifacts` stores bulky evidence files under the run/window folder and records compact metadata.
560
+ - `Harness/scripts/wf-ui-control.mjs browser-open` launches a visible browser for a launch URL, uses an isolated per-run/window profile when `--context isolated` is set, stores launch metadata as an `analysis` artifact, and records local lifecycle state in `browser-launches.json`.
561
+ - `Harness/scripts/wf-ui-control.mjs browser-launches` lists per-window launch state with process liveness; `browser-close` closes selected or all launches and safely removes per-window profiles under `Harness/wf-browser/tmp/browser-profiles/`.
562
+ - `Harness/scripts/wf-ui-control.mjs browser-release --close true` releases the backend lease and runs local browser cleanup as one closeout command.
563
+ - `POST /api/wf-browser/cleanup` previews or removes non-active run folders by retention policy; `Harness/scripts/wf-ui-control.mjs browser-cleanup` exposes this to agents.
564
+
565
+ Readiness boundary:
566
+
567
+ - Current implementation is an L3-minimal bridge for wf-browser: the opt-in frontend runtime registers with `/ws/wf-browser`, returns compact route/capability/UI-tree/state/log/network/replay/diff observations, and executes visible hover/click/focus/type/clear/select/press/drag/scroll/wait operations.
568
+ - `Harness/scripts/wf-ui-control.mjs browser-snapshot` captures a connected
569
+ window handoff bundle by serially running the standard observation primitives
570
+ through the current lease and returning artifact paths.
571
+ - `Harness/scripts/wf-ui-control.mjs browser-wait` is the connection-readiness
572
+ guard: it waits for the requested run/window/agent frontend registration
573
+ before `observe.*`, `act.*`, or snapshot dispatch.
574
+ - `Harness/scripts/wf-ui-control.mjs browser-open` is the isolated visible
575
+ launch foundation: it can create a per-window browser profile under
576
+ `Harness/wf-browser/tmp/browser-profiles/`, launch Chrome/Edge/Chromium,
577
+ record the exact command/profile metadata as a run/window artifact, and write
578
+ `browser-launches.json` for later closeout.
579
+ - `Harness/scripts/wf-ui-control.mjs browser-launches`, `browser-close`, and
580
+ `browser-release --close true` provide the first local process/profile
581
+ lifecycle layer for visible isolated agent windows.
582
+ - `Harness/scripts/wf-ui-control.mjs browser-allocate` is the window allocator foundation: it creates or reuses a run, creates a window, grants a lease, and returns a launch URL for one visible agent window. `browser-allocate-many` repeats that allocation for a batch of subagents in one run, and `browser-windows` lists allocated windows before dispatch, handoff, or cleanup.
583
+ - The React app shell registers base wf-browser capabilities for `app.shell`, header, navigation routes, theme toggle, and route-specific task/workflow/agents/roles/settings/terminal surfaces. `observe.uiTree` annotates matched DOM nodes with `registeredCapabilityIds`.
584
+ - Claim full L3 only after trusted screenshot/AST coverage and deeper route-owned component maps are implemented.
585
+ - Claim full L4 only after automatic cleanup coverage on all closeout paths and
586
+ concurrent isolated-window subagent runtime proof are recorded.
587
+
99
588
  ## 5. Data Flow
100
589
 
101
590
  ```text
@@ -124,3 +613,13 @@ CLI args / prompts
124
613
  - Interactive confirmation currently happens before full conflict-plan display in interactive mode.
125
614
  - Some README tests assert exact prose and can be made more structural.
126
615
  - `subagent-orchestrator` routing priority should continue to be tightened in templates.
616
+
617
+ ## 8. Agent Terminal Trigger Model
618
+
619
+ Agent terminals are triggered through three layers, depending on task kind:
620
+
621
+ 1. **Spawn-time task**: `initialPrompt` argv → the runtime TUI auto-submits the initial message (codex/claude positional prompt; opencode `--prompt`). Enter-free, preferred path.
622
+ 2. **In-session task**: ready-gated injection — wait for the prompt marker (`❯`/`›`), write the text, then a single `\r`; retry once on swallow; never send `\r\n`.
623
+ 3. **Headless task**: `codex exec --json` (one process per task, JSONL result capture, exit semantics). Interface reserved; full productization later.
624
+
625
+ The PTY input sink is single: `writePtyInput` → `ptyProcess.write`. Frontend xterm WS `pty:input` and backend `send-input` share it, so a fix at the sink fixes both paths.
@@ -111,6 +111,26 @@ Use these patterns when turning research into PRD or feature docs:
111
111
 
112
112
  ## Architecture Decision References
113
113
 
114
+ ## Executable research policy (0.9.2)
115
+
116
+ Use `node Harness/scripts/research-policy.mjs decide --task-type chore --json`
117
+ before external research. The optional repeatable triggers are
118
+ `capability-gap`, `volatile-api`, `user-request`, `repeated-failure`, and
119
+ `benchmark-gap`; without a trigger a simple local chore does not require web
120
+ research. The decision output is `{search, reasons, addDependency:false}`.
121
+
122
+ Record a checked source in the task capsule with:
123
+
124
+ ```text
125
+ node Harness/scripts/research-policy.mjs record --project ROOT --task TASK --input REFERENCE.json [--apply] --json
126
+ ```
127
+
128
+ The JSON reference contains `url`, `title`, `sourceType`, `version`, `license`,
129
+ `decision` (`adopt|adapt|reject`), `reason`, `acIds`, and `checkedAt`. Recording
130
+ is dry-run unless `--apply` is supplied, writes only that task's
131
+ `REFERENCES.md`, rejects adopting a code dependency without a license, and does
132
+ not download or execute external code.
133
+
114
134
  When filling `Harness/project/architecture.md` and `Harness/research/research-results.md`, use these high-trust sources as starting points. Search within them; do not read them whole.
115
135
 
116
136
  ### System Design & Architecture Patterns
@@ -9,16 +9,18 @@ Agents: use `task-state.mjs` for all task lifecycle operations. Other scripts ar
9
9
  Single entry point for all task capsule operations. Use this for any task CRUD.
10
10
 
11
11
  ```bash
12
- # Active tasks
13
- node Harness/scripts/task-state.mjs list [--json]
14
- node Harness/scripts/task-state.mjs open [--json]
12
+ # Task routing and lifecycle
13
+ node Harness/scripts/task-state.mjs list [--project <project>] [--status <status>] [--json]
14
+ node Harness/scripts/task-state.mjs open [--project <project>] [--status <status>] [--json]
15
+ node Harness/scripts/task-state.mjs index
16
+ node Harness/scripts/task-state.mjs query <keyword> [--project <project>] [--status <status>] --json
15
17
  node Harness/scripts/task-state.mjs validate [--strict] [--json]
16
18
  node Harness/scripts/task-state.mjs reconcile [--dry-run|--apply] [--json]
17
- node Harness/scripts/task-state.mjs set-active <task-id>
19
+ node Harness/scripts/task-state.mjs set-active <task-id> # focus an open WF task when one is managed
18
20
  node Harness/scripts/task-state.mjs transition <task-id> --status <s> --phase <p>
19
21
 
20
22
  # Task creation
21
- node Harness/scripts/task-state.mjs record <task-id> --create --text "goal" [--status <s>] [--dry-run|--apply]
23
+ node Harness/scripts/task-state.mjs record <task-id> --create --text "goal" [--status <s>] [--phase <p>] [--project <project>] [--tag <tag[,tag...]>] [--dry-run|--apply]
22
24
  node Harness/scripts/task-state.mjs record --title "title" --note "note" # auto-generates ID
23
25
 
24
26
  # Archive (moves completed tasks to _archive/YYYY/MM/DD/)
@@ -33,13 +35,75 @@ node Harness/scripts/task-state.mjs history delete <task-id> [--dry-run|--apply]
33
35
 
34
36
  **When to use:**
35
37
  - `/wf-task-list` calls `task-state.mjs list`
38
+ - `index` rebuilds the generated task route after task metadata changes.
39
+ - `query` performs deterministic keyword lookup across task metadata and capsule notes.
36
40
  - `/wf-task-archive` calls `task-state.mjs archive`
37
41
  - `/wf-task-record` calls `task-state.mjs record`
38
42
  - Resume: check `task-state.mjs open` for blocked/open tasks
39
- - Closeout: run `task-state.mjs archive --apply` to clean up verified tasks
43
+ - Closeout: transition a task to `closed`, then run `task-state.mjs archive --apply`
44
+ - Durable WF: only tasks explicitly created with `--mode wf` or `--mode wf-max` auto-resume across sessions; mode is immutable and closed is terminal.
45
+ - Direct coexistence: direct tasks may stay open, but cannot replace an open WF focus or be promoted into WF.
40
46
  - Debug: run `task-state.mjs validate --strict` to check state integrity
41
47
  - Research: run `task-state.mjs history search <keyword>` to find past solutions
42
48
 
49
+ ### Bounded context and conditional research
50
+
51
+ Workflow controllers and workers can exchange a bounded, role-scoped task pack:
52
+
53
+ ```bash
54
+ node Harness/scripts/task-context.mjs pack <task-id> --project <absolutePath> --role <role> --budget-bytes <n> --json
55
+ node Harness/scripts/task-context.mjs show <task-id> --project <absolutePath> --json
56
+ ```
57
+
58
+ `pack` is also the resume input; it omits entries outside the role/work item or
59
+ the byte budget. The output is a structural context boundary, not a semantic
60
+ safety guarantee. `update` is write-enabled only with `--apply`; without it the
61
+ command is a dry run and changes no task state.
62
+
63
+ Ask whether external research is warranted before using a network tool:
64
+
65
+ ```bash
66
+ node Harness/scripts/research-policy.mjs decide --trigger <trigger> --task-type <type> --json
67
+ node Harness/scripts/research-policy.mjs record --project <absolutePath> --task <task-id> --input <reference.json> --apply --json
68
+ ```
69
+
70
+ Use `capability-gap`, `volatile-api`, `user-request`, `repeated-failure`, or
71
+ `benchmark-gap` as triggers. A permitted search must read the actual primary
72
+ source and retain its URL, title, version, license/terms, date, and
73
+ adopt/adapt/reject rationale in task evidence.
74
+
75
+ ### Runtime capability declarations
76
+
77
+ Native provider catalogs are preferred. A runtime without a native effort
78
+ catalog may use an exact operator declaration in `Harness/settings.json`:
79
+
80
+ ```json
81
+ {
82
+ "runtimeCapabilities": {
83
+ "claude": {
84
+ "models": {
85
+ "gateway/claude-luna": {
86
+ "supportedEfforts": ["low", "high", "xhigh"]
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ The model key and effort names are exact. `operator-configured` is provenance
95
+ only: it is not provider measurement, account entitlement, or task success.
96
+ HTTP settings updates must preserve the declaration; payloads cannot add,
97
+ replace, delete, null, or invalidate `runtimeCapabilities`. Reject invalid
98
+ capability mutations before any settings write.
99
+
100
+ ### Scoped memory learning
101
+
102
+ `memory-context.mjs query` narrows existing entries before `validate`, `apply`,
103
+ or task-local `feedback`; it is not a full-memory preload. A method candidate
104
+ needs evidence, a counterexample, and passed verification, but this structural
105
+ gate does not replace semantic review.
106
+
43
107
  ### `archive-tasks.mjs`
44
108
 
45
109
  Compatibility alias for `task-state.mjs archive`. Delegates all flags.