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
@@ -57,8 +57,9 @@ Before writing, identify the project state:
57
57
 
58
58
  Choose the install scope before scaffold writes:
59
59
 
60
- - `--install-scope project` (default): full Harness scaffold is project-local.
61
- - `--install-scope global`: write shared runtime assets to the selected global Harness directory and copy Claude Code, Codex, and OpenCode command/skill surfaces to host-global directories while keeping `Harness/tasks/`, `Harness/PROGRESS.md`, project memory, research, architecture, and project settings under the target project.
60
+ - `--install-scope global` (default for a new or empty target): write shared runtime assets to the selected global Harness directory and copy Claude Code, Codex, and OpenCode command/skill surfaces to host-global directories while keeping `Harness/tasks/`, `Harness/PROGRESS.md`, project memory, research, architecture, and project settings under the target project.
61
+ - `--install-scope project` (default for an existing non-empty target): keep the full Harness scaffold project-local for compatibility, self-contained installs, and offline/CI use.
62
+ - An explicit `--install-scope` always wins. The CLI detects only whether the target is new/empty or existing/non-empty; it never silently changes an explicit choice.
62
63
  - Use `--global-dir <dir>` when the global runtime location must be explicit.
63
64
  - Use `--host-global-dir <dir>` only when the host-global copy base must be explicit; the installer creates `claude/`, `codex/`, and `opencode/` subdirectories under it.
64
65
  - Project settings in `Harness/settings.json` override global settings defaults. Existing user-authored files at config, command, skill, or agent paths are preserved or surfaced for review unless they carry a Harness ownership marker.
@@ -160,7 +161,7 @@ The harness validator checks for specific structural invariants. When comparing
160
161
  | `Harness/tasks/<id>/PROGRESS.md` | `## Current Goal`, `## Phase`, `## Heartbeat`, `## Loaded Context` headings |
161
162
  | `Harness/tasks/<id>/PLAN.md` | `## Tasks`, `## Parallel Dispatch`, `## Subagent Synthesis`, `## Verification` headings |
162
163
  | `Harness/specs/guides/SETUP.md` | Retained install/bootstrap guide for new projects, existing projects, legacy upgrades, and Harness update decisions. Keep "Install or Upgrade Path" present. |
163
- | `.claude/skills/wf-browser/SKILL.md` and `.agents/skills/wf-browser/SKILL.md` | Built-in browser workflow requires `data-testid`, `accessible labels/roles`, and `inputs, buttons, filters, rows, empty/error/loading states` guidance |
164
+ | `.claude/skills/wf-browser/SKILL.md` and `.agents/skills/wf-browser/SKILL.md` | Built-in agent-operable browser workflow requires architecture design track, runtime control track, readiness levels, WebSocket bridge, observe/act primitives, virtual cursor, multi-window/subagent leases, `Harness/wf-browser/` artifacts, `data-testid`, `accessible labels/roles`, and `inputs, buttons, filters, rows, empty/error/loading states` guidance |
164
165
  | `Harness/workflows/ts-react-frontend.md` (if installed as optional) | Same UI selector contract as above |
165
166
 
166
167
  **Files that do NOT need manual merge when the path does not already exist (auto-created by harness):**
@@ -1,25 +1,60 @@
1
1
  # Harness Bridge
2
2
 
3
- Purpose: define a test-only bridge for validating frontend, backend, state, and side effects without making test selectors part of production behavior.
3
+ Purpose: define the first-party browser debug/control bridge used by
4
+ `wf-browser`. The bridge makes a web UI agent-operable: the frontend exposes
5
+ semantic state and atomic actions, the backend brokers sessions and evidence,
6
+ and agents control the browser through scripts or skills instead of brittle DOM
7
+ or coordinate guesses.
4
8
 
5
- Harness Bridge is not a business feature. It is enabled only in dev/test environments and must be absent or inert in production builds.
9
+ Harness Bridge is a dev/test/debug capability. Production builds may include an
10
+ inert client only when the product explicitly supports operator diagnostics.
11
+
12
+ ## Agent-Operable Web Runtime
13
+
14
+ The bridge turns the browser into an agent-operable runtime. The agent does not
15
+ drive the page primarily through raw DOM selectors, CSS paths, or coordinates.
16
+ It asks the backend broker to run small `observe.*` and `act.*` primitives, and
17
+ the frontend debug client resolves those primitives against semantic UI
18
+ capabilities, component state, and visible user-like interactions.
19
+
20
+ ## Architecture
21
+
22
+ ```text
23
+ agent script/skill <-> Harness backend broker <-> WebSocket <-> frontend debug client
24
+ ```
25
+
26
+ The frontend is responsible for DOM/component truth, screenshots, UI tree,
27
+ visible virtual cursor rendering, and app-state serialization. The backend is
28
+ responsible for session identity, window leases, command sequencing, artifact
29
+ storage, cleanup, and compact summaries for agents.
6
30
 
7
31
  ## Modules
8
32
 
9
33
  | Module | Purpose | Output |
10
34
  | --- | --- | --- |
11
- | UI Test ID Contract | stable selectors for browser tests | `UI_CONTRACT.md` or task contract table |
12
- | API Contract | endpoint, payload, response, and failure behavior | `API_CONTRACT.md` or OpenAPI/schema reference |
35
+ | UI Capability Contract | stable selectors plus semantic component/action registry | `UI_CONTRACT.md`, route capability manifest |
36
+ | API Contract | endpoint, payload, response, failure behavior, side effects | `API_CONTRACT.md` or schema reference |
13
37
  | Test Data Seeder | deterministic local data and mock external services | seed script or test fixture |
14
- | Runtime State Probe | test-only access to route/store/toast state | `window.__HARNESS__` or equivalent |
15
- | Network Trace Collector | CDP/Playwright capture of request/response behavior | trace file and assertion output |
38
+ | Frontend Debug Client | WebSocket client, capability registry, virtual cursor, capture primitives | browser connection and command results |
39
+ | Backend Control Broker | sessions, window pool, leases, command queue, artifact index | HTTP/WS endpoints and run manifests |
40
+ | Observation Primitives | route/UI tree/screenshot/state/log/network/AST capture | artifacts under `Harness/wf-browser/` |
41
+ | Action Primitives | atomic visible user-like operations and semantic component commands | action results and replay log |
42
+ | Network Trace Collector | frontend/backend request summary and fallback CDP/Playwright traces | JSONL artifact and assertion output |
43
+ | Artifact Workspace | screenshots, UI trees, state, logs, network, AST, replay, analysis | `Harness/wf-browser/runs/<runId>/...` |
16
44
 
17
- ## UI Test ID Contract
45
+ ## UI Capability Contract
18
46
 
19
- Every critical interactive element needs a stable selector before UI acceptance.
47
+ Every critical interactive element needs a stable selector and, when source is
48
+ editable, a semantic capability entry before UI acceptance.
20
49
 
21
50
  ```tsx
22
- <button data-testid="login-submit-button">Log in</button>
51
+ <button
52
+ data-testid="login-submit-button"
53
+ aria-label="Log in"
54
+ data-wf-capability="auth.submit"
55
+ >
56
+ Log in
57
+ </button>
23
58
  ```
24
59
 
25
60
  Contract shape:
@@ -27,17 +62,386 @@ Contract shape:
27
62
  ```markdown
28
63
  # UI Contract
29
64
 
30
- | Element | data-testid | Role | AC IDs |
31
- | --- | --- | --- | --- |
32
- | Phone input | `phone-input` | input phone number | AC-001, AC-002 |
33
- | Submit button | `login-submit-button` | submit login | AC-004, AC-006 |
65
+ | Element | Capability ID | data-testid | Role/Label | Actions | State | AC IDs |
66
+ | --- | --- | --- | --- | --- | --- | --- |
67
+ | Submit button | `auth.submit` | `login-submit-button` | button / Log in | `act.click`, `act.intent(auth.submit)` | disabled/loading/error | AC-004 |
68
+ ```
69
+
70
+ No stable target contract, no UI acceptance. `data-testid`, accessible
71
+ labels/roles, durable `data-*` keys, and component ids are all valid selectors;
72
+ the best first-party contract is a capability id tied to product semantics.
73
+
74
+ Required coverage targets remain: inputs, buttons, filters, rows,
75
+ empty/error/loading states.
76
+
77
+ ## Capability Registry
78
+
79
+ The frontend debug client should register route, component, element, canvas,
80
+ graph, and form capabilities. Each capability describes what an agent can
81
+ observe and do.
82
+
83
+ ```ts
84
+ type WfBrowserCapability = {
85
+ id: string;
86
+ kind: "route" | "component" | "element" | "canvas" | "graph" | "form";
87
+ label: string;
88
+ selectors?: { testId?: string; selector?: string; role?: string; name?: string };
89
+ keys?: Record<string, string>;
90
+ bounds?: { x: number; y: number; width: number; height: number };
91
+ state?: () => unknown;
92
+ actions?: Record<string, WfBrowserActionSpec>;
93
+ captures?: Array<"screenshot" | "ui-tree" | "state" | "logs" | "network" | "ast" | "replay" | "analysis">;
94
+ };
34
95
  ```
35
96
 
36
- No `data-testid`, no UI acceptance, unless a stable accessible role/label is explicitly documented.
97
+ Capabilities should expose product intent when possible:
98
+
99
+ - `graph.moveNode`, `graph.connectNodes`, `graph.openNodeSettings`
100
+ - `form.fill`, `form.submit`, `form.assertValidation`
101
+ - `table.filter`, `table.sort`, `row.open`
102
+ - `canvas.captureRegion`, `canvas.dragPath`
103
+
104
+ ## Observation Primitives
105
+
106
+ Observation is read-only. Use the smallest useful observation first.
107
+
108
+ | Primitive | Output |
109
+ | --- | --- |
110
+ | `observe.route` | URL, route id, viewport, title, feature flags |
111
+ | `observe.capabilities` | current route/window capability registry |
112
+ | `observe.uiTree` | compressed semantic tree: role/name/testId/dataAttrs/registeredCapabilityIds/bounds/state |
113
+ | `observe.screenshot` | viewport, full page, component, element, or region image |
114
+ | `observe.state` | selected app stores, router state, component state |
115
+ | `observe.logs` | console, error boundary, unhandled rejection, app logs |
116
+ | `observe.network` | request/response summary, status, timings, payload keys |
117
+ | `observe.replay` | bounded primitive timeline with command ids, statuses, targets, and deltas |
118
+ | `observe.ast` | source/component metadata in dev builds |
119
+ | `observe.diff` | before/after UI, state, network, or log comparison |
120
+
121
+ ### State Snapshot Contract
122
+
123
+ Observation payloads must distinguish references from renderable state:
124
+
125
+ - `stateRef`, `contentRef`, and `componentStateRefs` are references. They may
126
+ include path, revision, type, title, handles, capabilities, and compact file
127
+ metadata, but they must not be treated as complete UI state.
128
+ - UI hydration snapshots must include full renderable component state under a
129
+ dedicated state collection such as `componentNodes`. A route that paints
130
+ previews or editors from a snapshot must not infer persisted content from refs.
131
+ - If a persisted component node is present but its hydration state is missing,
132
+ malformed, or revision-mismatched, global route observations should omit that
133
+ component and dangling edges while direct component reads expose the mismatch
134
+ error. The backend must not crash the whole observation and must not silently
135
+ replace persisted content with empty Markdown, empty Excalidraw scenes, or
136
+ empty file metadata.
137
+ - Tests that mock observations must mirror the production state contract:
138
+ `Harness/a2a/component-nodes/<nodeId>/state.json`, matching revisions across
139
+ refs and hydration state, and type-specific handles from the backend model.
140
+ - Connection refs in observations must mirror production graph semantics:
141
+ default workflow links use `direction: "bidirectional"` plus
142
+ endpoint-specific `endpointRole`, while persisted `from`/`to` or
143
+ `source`/`target` fields remain endpoint-order metadata for rendering and
144
+ handles.
145
+ - Mocked graph snapshots must include `edgeId`, `localHandle`, `peerHandle`,
146
+ `sourceHandle`, `targetHandle`, semantic `relation`, and reverse-duplicate
147
+ rejection behavior. Display labels such as `markdown <-> context` are UI text
148
+ and must not be reused as `relation`.
149
+ - Resource-node observations must distinguish semantic ports from physical
150
+ handles. Markdown exposes semantic port `markdown`; Excalidraw exposes
151
+ semantic port `scene`. The browser may expose side handles such as
152
+ `markdown:left`/`markdown:right` or `scene:left`/`scene:right` for geometry,
153
+ but observations, labels, and agent context must report the semantic resource
154
+ port. Markdown and Excalidraw must not be mocked as separate input/output
155
+ ports. A bidirectional physical side must appear as one DOM/UI-tree handle;
156
+ hidden overlapping source/target handles for the same side are invalid because
157
+ they make drag hit-testing ambiguous.
158
+ - Event-node observations may expose explicit directed event edges. Timer uses
159
+ `direction: "source-to-target"`, relation `event`, a local `event` output, a
160
+ `config` input, and event refs such as `eventStateRefs` and
161
+ `connectedEventRefs`. This directed contract is limited to event emission and
162
+ must not be inferred for resource or capability links.
163
+ - Advanced Timer observations may include base heartbeat, watchdog heartbeat,
164
+ once/interval/cron/loop/adaptive/watchdog/while/task cadence metadata, task
165
+ binding, and control policy. Agent-observed Timer control actions require an
166
+ Agent-to-Timer relation `control` edge. While/loop/task/adaptive metadata is
167
+ declarative only; UI and runtime bridges must not evaluate user-authored code
168
+ from Timer settings.
169
+ - Double-clicking a Timer node opens `workflow-timer-expanded-node`; schedule
170
+ saves go through typed `timer.configure` actions rather than direct state-file
171
+ edits.
172
+ - Goal-node observations expose active Harness task state as `workflow-goal-node`
173
+ plus `goalNodes`/`connectedGoalRefs`. Agent completion is two-phase:
174
+ `goal.requestCompletion` writes a proposal sidecar and must not directly mark
175
+ task `STATE.json` complete. WDT acknowledgement is tracked separately from
176
+ task completion state.
177
+ - Double-clicking a Goal node opens `workflow-goal-expanded-node`; user edits
178
+ go through `goal.update` without `actorNodeId`, while Agent-authored
179
+ `goal.update` calls require a bidirectional `goal` edge and must reject
180
+ unlinked actors with `GOAL_EDGE_REQUIRED`. `goal.update` edits title,
181
+ objective, next action, acceptance, and WDT metadata only; task status,
182
+ phase, gate, and completion transitions are outside this action.
183
+ - Browser tests must exercise real drag/connect behavior for resource ports.
184
+ Intent-only graph actions are not sufficient proof that ReactFlow hit targets
185
+ can receive a manual connection on the requested physical side.
186
+ Tests must assert both the semantic edge payload and the actual DOM handle
187
+ count for bidirectional resource nodes.
188
+ - Agent capability observations must expose config-attached Skills as
189
+ `connectedCapabilityRefs`, `effectiveSkills`, and `skillPolicy`. Skill refs
190
+ are metadata only, use relation `capability`, preserve
191
+ `direction: "bidirectional"`, and must not include skill bodies, absolute
192
+ local paths, command output, secrets, or MCP credential probes.
193
+ - Agent context observations must expose self `identity`, self `workspace`, and
194
+ `skillTriggers` in addition to connected refs. `workflow-context` and
195
+ `agent.readContext` must return the same canonical context fields so Agents
196
+ do not reason from a reduced terminal-only view.
197
+ - Skill group capability-node observations must expose the node as
198
+ `workflow-capability-node` with `data-skill-count`, one semantic bidirectional
199
+ `capability` port, and physical side handles `capability:left` and
200
+ `capability:right`. Connected Agent observations must include
201
+ `connectedCapabilityNodeRefs`, merged `connectedCapabilityRefs`, and
202
+ `effectiveSkills` without skill bodies, absolute local paths, command output,
203
+ secrets, or MCP credential probes.
204
+ - Skills Hub group creation uses `workflow-capability-hub-group` plus
205
+ `workflow-capability-create-node`. The resulting edge to an Agent, when a
206
+ target Agent exists, is relation `capability`, direction `bidirectional`, and
207
+ executor `agent`; group creation from a no-target Hub creates only the
208
+ capability node.
209
+ - MCP Hub observations are metadata-only. They may expose project-scoped server
210
+ names, transports, command names, arg counts, redacted URLs, env key names,
211
+ source summaries, and safety flags. They must not expose secret values, spawn
212
+ MCP servers, or probe credentials.
213
+ - MCP connector creation uses `workflow-capability-create-node` from an MCP Hub
214
+ item and sends only `mcpServerId`. The resulting node must render as
215
+ `workflow-capability-node` with `data-capability-type="mcp-connector"`,
216
+ `data-server-count`, one semantic bidirectional `capability` port, and
217
+ physical side handles `capability:left` and `capability:right`. If a target
218
+ Agent exists, creation also writes a relation `capability`, direction
219
+ `bidirectional` edge to that Agent.
220
+ - MCP direct attach, credential checks, tool-list discovery, and tool invocation
221
+ remain gated and must not be enabled by the Hub create path.
222
+
223
+ The default UI tree is compressed. Full DOM, full AST, large screenshots, videos,
224
+ and network bodies must be artifact files, not chat content.
225
+
226
+ ## Action Primitives
227
+
228
+ Actions mutate state or visible UI. Every action is atomic and returns a settled
229
+ result with before/after observation ids.
230
+
231
+ | Primitive | Purpose |
232
+ | --- | --- |
233
+ | `act.intent` | semantic app command, for example `graph.connectNodes` |
234
+ | `act.click` | visible virtual-cursor click on a resolved target |
235
+ | `act.contextMenu` | visible virtual-cursor right-click/contextmenu on a resolved target |
236
+ | `act.focus` | focus a resolved input, editable region, listbox, or terminal surface |
237
+ | `act.type` | focus target and type text |
238
+ | `act.clear` | clear a resolved text/editable target |
239
+ | `act.press` | key or shortcut |
240
+ | `act.scroll` | scroll viewport, element, or region |
241
+ | `act.hover` | move virtual cursor and show hover state |
242
+ | `act.drag` | drag target to target, point, or path |
243
+ | `act.doubleClick` | open the target node's primary workbench without opening lightweight settings |
244
+ | `act.select` | choose menu/listbox/combobox option |
245
+ | `act.upload` | file chooser fallback when supported |
246
+ | `act.wait` | wait for route, state, network, selector, or event |
247
+ | `act.replay` | replay a recorded action sequence |
248
+
249
+ Semantic workflow graph intents:
250
+
251
+ | Intent | Meaning |
252
+ |---|---|
253
+ | `graph.createNode` | create one workflow runtime node through the typed node API |
254
+ | `graph.connectNodes` | create one semantic workflow edge |
255
+ | `graph.disconnectNodes` | remove one semantic workflow edge |
256
+ | `graph.moveNode` | persist one node position change |
257
+ | `graph.deleteNode` | delete or hide one workflow node through the typed node API |
258
+ | `graph.deleteNodes` | delete or hide multiple workflow nodes through the typed node API |
259
+
260
+ Rules:
261
+
262
+ - A semantic graph intent performs one semantic mutation request. It must not
263
+ combine a node/edge API mutation with a second full graph-map PUT for the same
264
+ intent.
265
+ - Successful graph intents return operation metadata with at least
266
+ `{ id, kind }`.
267
+ - When an Agent is the actor, the implementation should use the matching
268
+ `agent.*` graph action and the resulting operation record should drive canvas
269
+ aura, controlled-node glow, and edge data-flow animation.
270
+ - Agent node-map skills and CLI commands must route graph mutations through the
271
+ typed backend Agent actions at
272
+ `POST /api/workflow/nodes/:actor/actions/agent.*`. `Harness/a2a/workflow-map.json`,
273
+ component state, event/capability/goal state, and node-home files are
274
+ backend-owned storage. Agents may inspect them only as diagnostic context and
275
+ must not edit/delete them to control the canvas.
276
+ - Compatibility commands such as `wf-ui-control.mjs connect` and
277
+ `wf-ui-control.mjs delete-node` must delegate to `agent.connectNodes` and
278
+ `agent.deleteNode`; they must not perform whole-map PUTs or call legacy
279
+ graph-node delete routes directly.
280
+ - Agent delete intents use `agent.deleteNode` or `agent.deleteNodes`; they must
281
+ not delete the actor itself, and bulk delete skips the actor and live Agents by
282
+ default unless a future explicit permission model says otherwise.
283
+ - Visual control state must be derived from operation metadata, not from DOM
284
+ gestures, edge direction, node type, or handle geometry.
285
+
286
+ Result shape:
287
+
288
+ ```json
289
+ {
290
+ "commandId": "cmd-001",
291
+ "agentId": "agent-a",
292
+ "sessionId": "session-001",
293
+ "windowId": "window-001",
294
+ "runId": "run-001",
295
+ "leaseId": "lease-001",
296
+ "status": "ok",
297
+ "target": { "capabilityId": "auth.submit", "testId": "login-submit-button" },
298
+ "before": "artifacts/state/before.json",
299
+ "after": "artifacts/state/after.json",
300
+ "events": ["artifacts/logs/action-events.jsonl"],
301
+ "screenshot": "artifacts/screenshots/after.webp"
302
+ }
303
+ ```
304
+
305
+ ## Visible Agent Operation
306
+
307
+ The frontend debug client should render agent activity without using or stealing
308
+ the user's real pointer:
309
+
310
+ - one virtual cursor per `agentId`
311
+ - hover outlines, click pulses, and drag paths
312
+ - typing focus ring and operation label
313
+ - rejected target/drop markers
314
+ - optional operation feed or timeline overlay
315
+
316
+ If the real user interacts with the same window, the frontend reports a
317
+ mixed-control event. The backend then pauses or releases the agent lease.
318
+
319
+ ## Backend Broker Protocol
320
+
321
+ Recommended channels:
322
+
323
+ - HTTP: create/list runs, allocate launch URLs, list artifacts, read compact
324
+ snapshots, cleanup.
325
+ - WebSocket: frontend registration, command dispatch, acks/results, events,
326
+ heartbeats, and lease lifecycle.
327
+ - Fallback driver: Playwright/CDP/Browser Use/MCP for pages without the
328
+ first-party client.
329
+
330
+ Message types:
331
+
332
+ - `hello`
333
+ - `lease.request`
334
+ - `lease.granted`
335
+ - `lease.release`
336
+ - `command`
337
+ - `ack`
338
+ - `result`
339
+ - `event`
340
+ - `heartbeat`
341
+ - `artifact`
342
+
343
+ WebSocket messages must be bounded because browser WebSocket has no
344
+ backpressure. Large data goes to disk; WebSocket carries ids, paths, hashes,
345
+ sizes, and short summaries.
346
+
347
+ ## Multi-Agent Window Contract
348
+
349
+ Multiple subagents must be able to debug different features concurrently.
350
+
351
+ - Each subagent owns an `agentId`, `sessionId`, `windowId`, `runId`, and
352
+ `leaseId`.
353
+ - A control lease is exclusive per window. Two agents must not run `act.*` in
354
+ the same window at the same time.
355
+ - Read-only `observe.*` may share a window only under a read-only lease.
356
+ - The backend should provide a window pool: create, assign, list, release, and
357
+ cleanup.
358
+ - Each run stores artifacts separately:
359
+ `Harness/wf-browser/runs/<runId>/windows/<windowId>/...`.
360
+ - Test data must be isolated when multiple agents mutate backend state.
361
+ - The task plan records which subagent owns which feature/window/data fixture.
362
+
363
+ Window-pool operations:
364
+
365
+ | Operation | Purpose |
366
+ | --- | --- |
367
+ | `window.create` | open a new browser window/context for an agent, route, viewport, and fixture scope |
368
+ | `window.allocateMany` | create multiple independent window/lease/launch URL assignments for concurrent subagents |
369
+ | `window.open` | launch a visible browser window using a per-run/window profile and store launch metadata |
370
+ | `window.close` | list/close selected browser launches and remove per-window profiles during release or cleanup |
371
+ | `window.assign` | bind an idle existing window to an `agentId` and `runId` |
372
+ | `window.lease` | grant `control` or `observe` access with expiry and renew policy |
373
+ | `window.launchUrl` | return a loopback UI URL with token, run/window/lease ids, agent id, and debug overlay flags |
374
+ | `window.snapshot` | capture compact route, capability, UI tree, state, log, network, replay, and diff observations before handoff |
375
+ | `window.release` | stop command intake, flush artifacts, and mark the lease released |
376
+ | `window.list` | list a run's current windows for subagent dispatch and handoff |
377
+ | `window.wait` | wait until a target frontend window registers on the WebSocket bridge before observe/act dispatch |
378
+ | `window.cleanup` | remove unreferenced artifacts and browser profiles after retention rules pass |
379
+
380
+ Subagent dispatch packets should include `agentId`, `runId`, requested
381
+ `windowId` or `window.create` requirements, allowed route/feature scope,
382
+ fixture scope, and whether the subagent may run `act.*` or only `observe.*`.
383
+ The backend rejects `act.*` commands when the `leaseId` is missing, expired,
384
+ read-only, or owned by another agent. This is the concurrency guard that allows
385
+ many subagents to test many features at once without two agents mutating the
386
+ same browser window.
387
+
388
+ ## Third-Party Pages
389
+
390
+ When source cannot be changed:
391
+
392
+ 1. Inject a lightweight debug client when possible.
393
+ 2. Generate a temporary semantic tree from accessibility roles, labels, visible
394
+ text, bounds, and editable state.
395
+ 3. Let the agent add temporary target aliases for the current run.
396
+ 4. Use Playwright, CDP, Browser Use, or Playwright MCP only for unsupported
397
+ navigation, native input, permissions, screenshots, downloads, or hostile
398
+ pages.
399
+
400
+ The output shape must still match the first-party artifact and action-result
401
+ schema.
402
+
403
+ ## Artifact Workspace
404
+
405
+ Default layout:
406
+
407
+ ```text
408
+ Harness/wf-browser/
409
+ README.md
410
+ runs/
411
+ <runId>/
412
+ manifest.json
413
+ timeline.jsonl
414
+ sessions.json
415
+ windows/
416
+ <windowId>/
417
+ browser-launches.json
418
+ actions.jsonl
419
+ screenshots/
420
+ ui-tree/
421
+ state/
422
+ logs/
423
+ network/
424
+ ast/
425
+ replay/
426
+ analysis/
427
+ ```
428
+
429
+ Retention:
430
+
431
+ - Keep latest 20 runs or 7 days by default.
432
+ - Keep artifacts referenced by an active task until closeout.
433
+ - Cleanup should be command-driven through
434
+ `node Harness/scripts/wf-ui-control.mjs browser-cleanup`.
435
+ - Do not store large artifacts in `Harness/tasks/` or chat.
436
+
437
+ Default local debugging is trusted and open. No automatic redaction is required
438
+ unless a project policy or user instruction asks for it. Do not publish artifacts
439
+ outside the workspace without explicit user approval.
37
440
 
38
441
  ## API Contract
39
442
 
40
- API-facing ACs need method, URL, payload, success response, failure response, and side effects.
443
+ API-facing ACs need method, URL, payload, success response, failure response, and
444
+ side effects.
41
445
 
42
446
  ````markdown
43
447
  # API Contract
@@ -64,12 +468,15 @@ No API contract, no backend integration acceptance.
64
468
 
65
469
  ## Test Data Seeder
66
470
 
67
- E2E tests must not depend on real SMS, payment providers, emails, or third-party side effects.
471
+ Concurrent browser validation must not depend on shared mutable fixtures unless
472
+ that is the behavior under test.
68
473
 
69
474
  Example contract:
70
475
 
71
476
  ```ts
72
477
  await bridge.seed({
478
+ runId,
479
+ windowId,
73
480
  user: {
74
481
  phone: "13800138000",
75
482
  code: "123456"
@@ -81,40 +488,13 @@ Seeder requirements:
81
488
 
82
489
  - deterministic
83
490
  - resettable between tests
84
- - scoped to dev/test
491
+ - scoped by run/window/agent where needed
85
492
  - records seeded IDs needed for assertions
86
493
 
87
- ## Runtime State Probe
88
-
89
- Expose only safe test state in dev/test:
90
-
91
- ```ts
92
- window.__HARNESS__ = {
93
- getRoute: () => router.currentRoute.value,
94
- getAuthState: () => authStore.state,
95
- getLastToast: () => toastStore.lastMessage
96
- };
97
- ```
494
+ ## Fallback Network Trace Collector
98
495
 
99
- Playwright may assert:
100
-
101
- ```ts
102
- const authState = await page.evaluate(() => window.__HARNESS__.getAuthState());
103
- expect(authState.isLoggedIn).toBe(true);
104
- ```
105
-
106
- Production builds must not expose secrets, tokens, private user data, or privileged mutation APIs through `window.__HARNESS__`.
107
-
108
- ## Network Trace Collector
109
-
110
- For frontend-backend ACs, collect network evidence:
111
-
112
- ```text
113
- user action
114
- -> CDP/Playwright records request
115
- -> assert URL, method, payload, response, duplicate-request behavior
116
- -> compare against API Contract
117
- ```
496
+ For frontend-backend ACs, collect network evidence from the bridge first and
497
+ fallback CDP/Playwright traces when the bridge is unavailable.
118
498
 
119
499
  Minimum checks:
120
500
 
@@ -125,4 +505,5 @@ Minimum checks:
125
505
  - disabled/loading behavior prevents duplicate submission
126
506
  - error state for network failure
127
507
 
128
- Trace evidence belongs under the task evidence folder or Playwright `test-results/`.
508
+ Trace evidence belongs under `Harness/wf-browser/runs/<runId>/network/` or
509
+ Playwright `test-results/` when using fallback tests.
@@ -177,3 +177,27 @@ When a lesson comes from acceptance work, include:
177
177
  - final fix or operating rule
178
178
 
179
179
  This keeps future agents from relearning the same acceptance gap.
180
+
181
+ ## Executable memory/reuse surface (0.9.2)
182
+
183
+ The project-local CLI is `node Harness/scripts/memory-context.mjs`:
184
+
185
+ ```text
186
+ query --project ROOT --text TEXT --scope project|global|task --top-k N --budget-bytes N --json
187
+ validate --project ROOT --input CANDIDATE.json --json
188
+ apply --project ROOT --input CANDIDATE.json [--apply] --json
189
+ set-status --project ROOT --id ID --status inactive|superseded|active [--superseded-by ID] [--apply] --json
190
+ feedback --project ROOT --task TASK --entry ID --outcome useful|unused|incorrect --reason TEXT [--apply] --json
191
+ ```
192
+
193
+ Memory markdown remains the source of truth. A durable entry is a
194
+ `harness-memory` JSON HTML comment immediately adjacent to its `- When ...`
195
+ bullet. Legacy bullets remain queryable, but have unknown verification status.
196
+ Query reports explainable hits, skipped reasons, and UTF-8 byte usage; inactive,
197
+ superseded, out-of-scope, and overdue `recheckAfter` entries are not returned.
198
+ `conflictsWith` and `recheckAfter` are surfaced explicitly rather than treated
199
+ as semantic authorization. Method candidates require evidence, a counterexample,
200
+ and passed verification. Apply and status changes require `--apply`, are
201
+ idempotent by `id`, and require an explicit `supersedes` relation for conflicting
202
+ content. Feedback is append-only task-local evidence and never updates durable
203
+ memory.
@@ -6,7 +6,7 @@ preserving all evidence.
6
6
  ## Archive Location
7
7
 
8
8
  Active tasks stay in `Harness/tasks/<task-id>/`.
9
- Archived tasks move to `Harness/tasks/_archive/YYYY/<task-id>/`.
9
+ Archived tasks move to `Harness/tasks/_archive/YYYY/MM/DD/<task-id>/`.
10
10
 
11
11
  ## What Is Never Archived
12
12
 
@@ -14,14 +14,15 @@ Archived tasks move to `Harness/tasks/_archive/YYYY/<task-id>/`.
14
14
  - `Harness/tasks/continuous/` - WF-AUTO/WF-AUTO-SPARK permanent state capsule, never moved unless
15
15
  explicitly allowed by WF-AUTO docs.
16
16
  - `Harness/tasks/_archive/` - the archive directory itself.
17
- - Active, blocked, in-progress, running, pending, or needs-user-decision tasks.
18
- - Tasks whose STATE.json status is `active`, `blocked`, `in_progress`,
19
- `running`, `pending`, or `needs-user-decision`.
17
+ - Active or blocked tasks.
18
+ - Legacy `in_progress`, `running`, `pending`, and `needs-user-decision` values
19
+ are treated as open during migration.
20
20
 
21
21
  ## What May Be Archived
22
22
 
23
- Tasks whose STATE.json or reconciled phase is: `complete`, `verified`,
24
- `archived`, `abandoned`, `obsolete`, `done`, `closed`, or `closeout`.
23
+ Tasks whose STATE.json or reconciled phase is `closed` may be archived.
24
+ Legacy completed values such as `complete`, `verified`, `done`, and `closeout`
25
+ remain readable and archiveable.
25
26
 
26
27
  `Harness/scripts/task-state.mjs` reads STATE.json `status`/`phase` first, then
27
28
  uses root/task PROGRESS phases only as reconciliation evidence. Missing or
@@ -31,11 +32,12 @@ machine state.
31
32
 
32
33
  ## Archive Process
33
34
 
34
- 1. Verify the task is not active/blocked/running/pending.
35
- 2. Ensure `Harness/tasks/_archive/YYYY/` exists.
35
+ 1. Verify the task is not active or blocked (including legacy open aliases).
36
+ 2. Ensure `Harness/tasks/_archive/YYYY/MM/DD/` exists.
36
37
  3. Move `Harness/tasks/<task-id>/` to
37
- `Harness/tasks/_archive/YYYY/<task-id>/`.
38
- 4. Update the moved STATE.json: `status` to `archived`, `phase` to `archived`.
38
+ `Harness/tasks/_archive/YYYY/MM/DD/<task-id>/`.
39
+ 4. Update the moved STATE.json: `status` to `archived`, `phase` to `archived`
40
+ as an archive-record marker; live task lifecycle writes use `closed`.
39
41
  5. Update `Harness/tasks/_archive/INDEX.md`.
40
42
  6. Rewrite `Harness/PROGRESS.md` Task Index from the remaining non-archived
41
43
  task capsules.
@@ -83,5 +85,6 @@ Compatibility entry: `Harness/scripts/archive-tasks.mjs` delegates to
83
85
  - Windows path safe. Use `path.resolve()` before moving.
84
86
  - Confirm target is within `Harness/tasks/` before any move.
85
87
  - Do NOT recursively delete.
86
- - Tasks with `needs-user-decision` status are never auto-archived.
88
+ - Tasks with `blocked` status (including legacy `needs-user-decision` and
89
+ `failed`) are never auto-archived.
87
90
  - Missing or invalid STATE.json is never archived without reconciliation.