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
@@ -1,19 +1,52 @@
1
1
  ---
2
2
  name: wf-browser
3
- description: Built-in browser automation and E2E verification workflow. Use for Claude /wf-browser, Codex $wf-browser or /skills wf-browser, Browser Use, Playwright, Chrome DevTools/CDP, screenshots, forms, UI verification, and browser-visible acceptance.
3
+ description: Built-in agent-operable web UI architecture and runtime-control workflow. Use for /wf-browser, $wf-browser, designing UI debug/control bridges, UI capability contracts, WebSocket control loops, browser automation, UI debugging, screenshots, logs, multi-window/subagent browser testing, Playwright/CDP fallback, and browser-visible acceptance.
4
4
  ---
5
5
 
6
6
  # WF Browser
7
7
 
8
- This skill is the single Browser E2E entry. Do not use or create a separate
9
- browser E2E skill. The browser evidence contract lives here plus
10
- `Harness/specs/protocols/HARNESS_BRIDGE.md`.
8
+ `wf-browser` is the Harness design contract for web UIs that agents can
9
+ understand, control, debug, verify, and replay. It is not primarily a
10
+ Playwright/CDP wrapper. Playwright, CDP, Browser Use, Playwright MCP, and
11
+ external browser agents are fallback drivers. The preferred path is a first-party
12
+ Agent-Operable Web Runtime:
11
13
 
12
- ## Invocation
14
+ ```text
15
+ agent script/skill <-> Harness backend broker <-> WebSocket <-> frontend debug client
16
+ ```
17
+
18
+ The goal is to make the web page a human-visible, agent-controllable, and
19
+ system-recorded runtime. If project source can be changed, improve the UI
20
+ control contract before writing brittle browser scripts.
21
+
22
+ ## Two Jobs
23
+
24
+ Use `wf-browser` for both sides of the same system:
25
+
26
+ 1. **Architecture design**: design a web app so agents can later observe,
27
+ control, debug, verify, and replay it through stable first-party contracts.
28
+ 2. **Runtime control**: operate that designed app through the Harness backend
29
+ broker, WebSocket frontend debug client, atomic actions, and artifact
30
+ evidence.
31
+
32
+ An invocation may be design-only, control-only, or design-then-control. If the
33
+ project source is editable and the UI is not controllable, prefer improving the
34
+ architecture contract before writing fallback Playwright/CDP scripts.
35
+
36
+ ## Readiness Levels
37
+
38
+ Use these levels to classify the current web surface and choose the next move:
13
39
 
14
- - Claude Code: use `/wf-browser <task>` or select the `wf-browser` skill.
15
- - Codex CLI or IDE: use `$wf-browser <task>` or `/skills` then choose `wf-browser`.
16
- - OpenCode: use `/wf-browser <task>`.
40
+ | Level | Name | Meaning |
41
+ | --- | --- | --- |
42
+ | L0 | Fallback-only | third-party or uneditable page; use injection, accessibility tree, Playwright/CDP, or Browser Use |
43
+ | L1 | Selector-ready | critical UI has stable `data-testid`, accessible labels/roles, durable keys, and visible states |
44
+ | L2 | Capability-ready | frontend exposes semantic capability ids, serializable state, supported actions, and captures |
45
+ | L3 | Bridge-ready | WebSocket debug client and backend broker support `observe.*`, `act.*`, artifacts, logs, network, and replay |
46
+ | L4 | Multi-agent-ready | window pool, leases, isolated fixtures, run partitioning, cleanup, and mixed-control handling exist |
47
+
48
+ Do not claim L3 without a working frontend/backend bridge. Do not claim L4
49
+ without lease enforcement that prevents two agents from mutating the same window.
17
50
 
18
51
  ## Load
19
52
 
@@ -21,156 +54,428 @@ browser E2E skill. The browser evidence contract lives here plus
21
54
  - `Harness/MEMORY.md` index only per Memory Preflight
22
55
  - `Harness/README.md`
23
56
  - `Harness/specs/protocols/HARNESS_BRIDGE.md`
57
+ - For architecture comparison or skill-design review, load
58
+ `references/BROWSER_CONTROL_PATTERNS.md`.
24
59
  - Project run/build/test instructions
25
- - Official Browser Use skill text from `browser-use skill` when Browser Use is used
60
+ - Existing UI contracts, API contracts, component docs, and route ownership
61
+ - Fallback driver docs only when needed: Browser Use, Playwright, CDP, or MCP
62
+
63
+ ## Mode Selection
64
+
65
+ Start by deciding which track applies:
66
+
67
+ - **Architecture Design Track**: use when building or refactoring a web app,
68
+ creating UI/API contracts, adding debug infrastructure, designing an agent
69
+ control surface, or making a feature testable.
70
+ - **Runtime Control Track**: use when a browser-visible flow must be operated,
71
+ debugged, verified, replayed, or captured with evidence.
72
+ - **Recovery Track**: use when runtime control fails because selectors,
73
+ capabilities, bridge messages, logs, screenshots, fixtures, or leases are
74
+ missing; return to architecture design for the smallest contract fix.
26
75
 
27
76
  ## Cache Discipline
28
77
 
29
- Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`: keep stable
30
- workflow docs first, then append only the current URL, selectors, concise browser
31
- state, screenshot paths, trace paths, and failing assertions. Do not paste full
32
- accessibility trees, browser logs, screenshots, videos, or network dumps into
33
- task state.
78
+ Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`.
79
+ Keep stable protocol docs first, then append only the current run id, window id,
80
+ artifact paths, compact UI tree excerpts, failing actions, and high-signal logs.
81
+ Do not paste full screenshots, full DOM trees, videos, network dumps, or long
82
+ event streams into task state. Store them under `Harness/wf-browser/` and cite
83
+ paths.
84
+
85
+ ## External Pattern Anchors
86
+
87
+ Use external browser-agent patterns as references, not as the Harness contract.
88
+ For the current comparison, tradeoffs, and skill-design notes, read
89
+ `references/BROWSER_CONTROL_PATTERNS.md`.
90
+
91
+ ## Design Principle
92
+
93
+ Every agent-browser loop has two primitive families:
94
+
95
+ 1. `observe.*`: gather truth from the frontend and backend.
96
+ 2. `act.*`: perform visible, atomic, human-like operations.
97
+
98
+ Do not make the agent infer component intent from CSS, DOM depth, or coordinates
99
+ when the project can expose a semantic capability. Coordinates are fallback
100
+ inputs after a target has been resolved through the UI tree or visual markup.
101
+
102
+ ## Architecture Design Track
103
+
104
+ When the task is design/build/refactor, produce an agent-operable architecture
105
+ before planning browser scripts.
106
+
107
+ Required design outputs:
108
+
109
+ - Route inventory: route ids, feature ownership, expected app states, and
110
+ backend dependencies.
111
+ - Capability map: stable capability ids for route, component, form, table,
112
+ graph, canvas, and element targets.
113
+ - UI contract: selectors, accessible labels/roles, durable keys, visible states,
114
+ supported `act.*` operations, and `observe.*` captures.
115
+ - State contract: serializable app stores, router state, component state,
116
+ domain ids, and state diff rules.
117
+ - Backend broker contract: run/session/window/lease identity, HTTP endpoints,
118
+ WebSocket message types, command queue, timeouts, and artifact index.
119
+ - Fixture contract: seeded data, reset rules, per-agent isolation, and backend
120
+ side effects.
121
+ - Evidence contract: screenshot, UI tree, state, logs, network, AST, replay,
122
+ analysis, and retention paths under `Harness/wf-browser/`.
123
+ - Fallback contract: what remains under Playwright/CDP/Browser Use/MCP when the
124
+ first-party bridge cannot handle a browser capability.
125
+
126
+ The design is incomplete if it answers only "how will the agent click?" It must
127
+ also answer how the agent locates targets, observes truth, waits for settlement,
128
+ detects errors, explains visible operation to the user, replays actions,
129
+ isolates concurrent agents, and cleans up artifacts.
130
+
131
+ ## Runtime Control Track
132
+
133
+ When controlling an existing page, execute a closed loop:
134
+
135
+ 1. Create or resume a run and acquire `agentId`, `sessionId`, `windowId`,
136
+ `runId`, and `leaseId`.
137
+ 2. Run `observe.route`, `observe.capabilities`, `observe.uiTree`, and focused
138
+ logs/network/state observations before acting.
139
+ 3. Resolve targets by capability id, durable ids, `data-testid`, and accessible
140
+ labels/roles before falling back to text or coordinates.
141
+ 4. Run one atomic `act.*` command at a time with visible virtual cursor feedback
142
+ when the operation matters to the user.
143
+ 5. Wait for settlement by route, state, network, selector, or capability event.
144
+ 6. Capture after-state and `observe.diff`; store artifacts under the current
145
+ run/window folder.
146
+ 7. Decide pass/fail/blocked/unsupported from evidence, not from command success
147
+ alone.
148
+ 8. Release leases and clean up unreferenced windows/artifacts when done.
149
+
150
+ If any step cannot run because the bridge lacks a primitive, record the missing
151
+ contract and either add the first-party capability or normalize fallback driver
152
+ output into the same run layout.
153
+
154
+ ## Control Reliability Rules
155
+
156
+ Use these rules when a source-editable UI is flaky under browser control:
157
+
158
+ - Do not return `ok` from `act.*` until the UI and backend have settled. Acks are
159
+ not acceptance; wait for DOM/state/network/capability evidence after the act.
160
+ - Graph and canvas routes must expose a readiness signal after layout, fitView,
161
+ async previews, and at least one paint. Coordinate gestures must wait for that
162
+ signal before sampling bounds or moving the virtual cursor.
163
+ - If an app server serves built assets, rebuild before browser acceptance and
164
+ confirm the browser is reading the current artifact. Stale `dist` makes good
165
+ source fixes look broken.
166
+ - Every declared component port, handle, or capability must have a real
167
+ targetable UI handle or an explicit normalization rule. Semantic graph edges
168
+ that reference non-rendered handles are contract failures.
169
+ - Layering is part of the UI contract. Node controls must be hit-testable above
170
+ edge labels; edge labels above paths; menus, panels, toasts, and fullscreen
171
+ editors above canvas chrome according to declared z-index tiers.
172
+ - Visible overlays used as evidence must be hit-testable unless they are
173
+ explicitly click-through. Modal or fullscreen close actions must immediately
174
+ release the controlled surface, even if open animations remain.
175
+ - Prefer deterministic status hooks or capabilities for overlay/error states
176
+ instead of manufacturing accidental failures only to make a toast appear.
34
177
 
35
178
  ## Browser Evidence Contract
36
179
 
37
- Every browser-visible claim needs real browser evidence:
38
-
39
- 1. URL and viewport/browser scope.
40
- 2. Stable selector contract using `data-testid` and accessible labels/roles.
41
- 3. Real interaction evidence from Browser Use, Playwright, Chrome DevTools/CDP,
42
- or documented manual browser checks.
43
- 4. Console and network checks for runtime exceptions, failed requests, and
44
- frontend-backend side effects.
45
- 5. Screenshot, trace, video, state snapshot, or command output path.
180
+ Every browser-visible claim needs evidence from the control loop or a fallback
181
+ driver:
182
+
183
+ 1. URL, route, viewport, browser/window id, agent id, run id, and window lease.
184
+ 2. Stable selector or semantic target contract using `data-testid`, accessible
185
+ labels/roles, component ids, route ids, and durable item keys.
186
+ 3. Action evidence: command payload, ack/result, before/after observations, and
187
+ virtual cursor or operation trace when visual behavior matters.
188
+ 4. Frontend state, console logs, runtime errors, network summaries, and backend
189
+ side effects.
190
+ 5. Screenshot, UI tree, state snapshot, event timeline, replay log, or fallback
191
+ Playwright/CDP trace path.
46
192
  6. AC-by-AC validation matrix when acceptance criteria exist.
47
193
 
48
- No `data-testid` or stable accessible selector, no UI acceptance. No API
49
- contract, no backend integration acceptance.
194
+ No stable target contract, no UI acceptance. No API contract, no backend
195
+ integration acceptance. Syntax-only checks cannot satisfy browser-visible ACs.
196
+
197
+ ## Design-To-Control Continuity
50
198
 
51
- ## Controllable UI Contract
199
+ Every architecture contract must have a runtime proof path:
52
200
 
53
- UI built for browser control must expose targetable, user-meaningful controls:
201
+ | Design item | Runtime proof |
202
+ | --- | --- |
203
+ | capability id | `observe.capabilities` lists it and `act.intent` or target action can use it |
204
+ | selector/state contract | `observe.uiTree` shows target, state, bounds, role/name, and durable ids |
205
+ | broker message | WebSocket `ack` and `result` include command id, lease id, status, and artifact ids |
206
+ | fixture contract | run manifest records seed ids and backend side effects |
207
+ | visual operation | screenshot or cursor trail shows hover/click/type/drag path |
208
+ | concurrency rule | lease log proves rejected conflicting `act.*` or isolated window ownership |
209
+ | fallback path | Playwright/CDP/MCP evidence is normalized into `Harness/wf-browser/` |
210
+
211
+ Do not let design docs and runtime scripts drift. If an agent cannot control a
212
+ designed capability, update the capability contract or mark the level lower.
213
+
214
+ ## Agent-Operable UI Contract
215
+
216
+ UI built for `wf-browser` must expose targetable, user-meaningful controls and
217
+ agent-readable capabilities.
54
218
 
55
219
  | Category | Required control surface |
56
220
  | --- | --- |
57
- | Inputs | `<label>` association or `aria-label`, `data-testid`, disabled/invalid states, deterministic placeholder only as fallback |
58
- | Buttons | accessible name, `data-testid`, disabled/loading state, no icon-only button without `aria-label` |
59
- | Filters | stable test id for input/menu/chip, selected state, clear/reset control |
60
- | Rows/items | stable row/item test id plus durable item key such as `data-row-id`; avoid index-only targeting |
221
+ | Inputs | `<label>` association or `aria-label`, `data-testid`, value/invalid/disabled/loading state, deterministic placeholder only as fallback |
222
+ | Buttons | accessible name, `data-testid`, disabled/loading state, no icon-only button without `aria-label`, command outcome |
223
+ | Filters | stable test id for input/menu/chip, selected state, clear/reset action, result count or empty state |
224
+ | Rows/items | stable row/item test id, durable key such as `data-row-id`, selectable state, row actions; avoid index-only targeting |
225
+ | Complex widgets | component id, semantic role, supported `act.*` operations, serializable state, bounds, child capabilities |
61
226
  | Empty state | visible empty container with `data-testid="empty-state"` or feature-specific equivalent |
62
- | Error state | inline error/toast/banner with stable test id and accessible role when appropriate |
227
+ | Error state | inline error/toast/banner with stable test id, accessible role when appropriate, error code/source |
63
228
  | Loading state | stable spinner/skeleton/progress test id; verify duplicate submit prevention |
64
229
 
65
230
  Required coverage targets: inputs, buttons, filters, rows, empty/error/loading states.
66
231
 
67
232
  Selector priority:
68
233
 
69
- 1. `data-testid`
70
- 2. accessible labels/roles
71
- 3. visible text for stable user-facing copy
234
+ 1. Component capability id or domain id (`componentId`, `nodeId`, `routeId`)
235
+ 2. `data-testid` and durable `data-*` keys
236
+ 3. accessible labels/roles
237
+ 4. visible text for stable user-facing copy
238
+ 5. coordinates only after one of the above resolves the target
72
239
 
73
240
  Do not use generated class names, brittle CSS chains, XPath, DOM index selectors,
74
- or raw coordinates as the primary test contract. Coordinates are acceptable only
75
- after locating an element through the accessibility tree or when testing canvas
76
- or other non-DOM UI.
77
-
78
- ## Browser Use CLI
79
-
80
- Use the current script-style Browser Use CLI; old `browser-use open/state/click/screenshot/input/wait` subcommands are removed from the current CLI and must not be used in new docs or tests.
81
-
82
- Health check:
83
-
84
- ```bash
85
- browser-use --doctor
86
- browser-use skill
87
- ```
88
-
89
- PowerShell smoke:
241
+ or raw coordinates as the primary test contract.
90
242
 
91
- ```powershell
92
- @'
93
- new_tab("https://example.com")
94
- wait_for_load()
95
- print(page_info())
96
- path = capture_screenshot("Harness/tasks/<task-id>/evidence/example.png")
97
- print(path)
98
- '@ | browser-use
99
- ```
243
+ ## Capability Registry
100
244
 
101
- Bash smoke:
245
+ First-party frontends should register capabilities with the debug client. A
246
+ capability describes what an agent can observe and do, not just how the DOM
247
+ looks.
102
248
 
103
- ```bash
104
- browser-use <<'PY'
105
- new_tab("https://example.com")
106
- wait_for_load()
107
- print(page_info())
108
- path = capture_screenshot("Harness/tasks/<task-id>/evidence/example.png")
109
- print(path)
110
- PY
249
+ ```ts
250
+ type WfBrowserCapability = {
251
+ id: string;
252
+ kind: "route" | "component" | "element" | "canvas" | "graph" | "form";
253
+ label: string;
254
+ selectors?: { testId?: string; selector?: string; role?: string; name?: string };
255
+ keys?: Record<string, string>;
256
+ bounds?: { x: number; y: number; width: number; height: number };
257
+ state?: () => unknown;
258
+ actions?: Record<string, WfBrowserActionSpec>;
259
+ captures?: Array<"screenshot" | "ui-tree" | "state" | "logs" | "network" | "ast" | "replay" | "analysis">;
260
+ };
111
261
  ```
112
262
 
113
- Useful helpers include `new_tab(url)`, `goto_url(url)`, `page_info()`,
114
- `capture_screenshot(path)`, `click_at_xy(x, y)`, `type_text(text)`,
115
- `fill_input(selector, text)`, `press_key(key)`, `scroll(x, y)`, `js(code)`,
116
- `cdp(method, ...)`, `wait_for_load()`, `wait_for_element(selector)`,
117
- `list_tabs()`, `switch_tab(target)`, and `close_tab(target)`.
263
+ Examples:
118
264
 
119
- For local Chrome connection problems, run `browser-use --doctor`. If Chrome asks
120
- to allow remote debugging, stop and ask the user to approve the browser prompt.
265
+ - Graph editor: `graph.moveNode`, `graph.connectNodes`, `graph.openNodeSettings`,
266
+ `graph.snapshot`.
267
+ - Form: `form.fill`, `form.submit`, `form.reset`, `form.assertValidation`.
268
+ - Table: `table.filter`, `table.sort`, `row.open`, `row.select`, `row.action`.
269
+ - Canvas: `canvas.markup`, `canvas.dragPath`, `canvas.captureRegion`.
121
270
 
122
- ## Playwright Test Pattern
271
+ ## Observation Primitives
123
272
 
124
- Prefer Playwright for repeatable E2E tests and Browser Use/CDP for exploratory
125
- or interactive checks.
273
+ Use focused observations first; expand only when the first signal is
274
+ insufficient.
126
275
 
127
- ```ts
128
- import { test, expect } from "@playwright/test";
129
-
130
- test("AC-001 user can submit the form", async ({ page }) => {
131
- const requests: Array<{ url: string; method: string; postData: string | null }> = [];
132
- page.on("request", request => {
133
- requests.push({
134
- url: request.url(),
135
- method: request.method(),
136
- postData: request.postData(),
137
- });
138
- });
139
-
140
- await page.goto("/example");
141
- await page.getByTestId("email-input").fill("test@example.com");
142
- await page.getByRole("button", { name: "Submit" }).click();
143
-
144
- await expect(page.getByTestId("loading-spinner")).toBeHidden();
145
- await expect(page.getByTestId("result-row")).toBeVisible();
146
- expect(requests.some(request => request.url.includes("/api/example"))).toBe(true);
147
- });
148
- ```
276
+ | Primitive | Purpose | Output |
277
+ | --- | --- | --- |
278
+ | `observe.route` | current URL, route id, title, viewport, feature flags | compact JSON |
279
+ | `observe.capabilities` | agent-operable registry for current route/window | compact JSON |
280
+ | `observe.uiTree` | semantic UI tree: role/name/testId/componentId/registeredCapabilityIds/bounds/state | JSON artifact |
281
+ | `observe.screenshot` | viewport, full page, element, component, or region image | image artifact |
282
+ | `observe.state` | selected app stores, router state, component state | JSON artifact |
283
+ | `observe.logs` | console, frontend error boundary, unhandled rejection, custom app logs | JSONL artifact |
284
+ | `observe.network` | request/response summary, payload keys, status, timings | JSONL artifact |
285
+ | `observe.replay` | bounded primitive timeline with command ids, statuses, targets, and deltas | JSON artifact |
286
+ | `observe.ast` | source/component metadata when available from dev build | JSON artifact |
287
+ | `observe.diff` | before/after UI/state/network comparison | JSON artifact |
149
288
 
150
- ## Chrome DevTools / CDP Checklist
289
+ The default UI tree is compressed. Include only visible or agent-relevant nodes
290
+ unless the task explicitly asks for a full DOM/AST dump.
151
291
 
152
- - [ ] Record URL, port, browser, and viewport.
153
- - [ ] Verify available Browser Use, Playwright, CDP, MCP, or manual tooling.
154
- - [ ] Check not just HTTP 200.
155
- - [ ] Verify no runtime exceptions, console errors, and failed network requests.
156
- - [ ] Confirm stable accessible labels/roles or `data-testid` on interactive elements.
157
- - [ ] Test the critical flow end-to-end with real user actions.
158
- - [ ] Capture screenshot, trace, video, state snapshot, or result artifact paths.
159
- - [ ] Produce an AC-by-AC validation matrix.
160
- - [ ] Clean up dev server or browser processes that the task started.
292
+ ## Action Primitives
161
293
 
162
- ## Security
294
+ Actions are atomic and return a settled result. Prefer semantic actions exposed
295
+ by the app, then target-based UI actions, then visual/coordinate actions, then
296
+ fallback drivers.
163
297
 
164
- - Never log or screenshot real credentials, API keys, tokens, or private data.
165
- - Use placeholder credentials in examples.
166
- - Ask before using a real Chrome profile because it contains cookies and private sessions.
167
- - Ask before leaving a remote/cloud browser running.
168
- - For scraping or repeated automated visits, confirm the user owns the target or has permission.
298
+ | Primitive | Purpose |
299
+ | --- | --- |
300
+ | `act.intent` | route/component semantic command such as `connectNodes` |
301
+ | `act.click` | virtual-cursor click on a resolved target |
302
+ | `act.focus` | focus a resolved input, editable region, listbox, or terminal surface |
303
+ | `act.type` | focus target and type text with visible cursor/focus trail |
304
+ | `act.clear` | clear a resolved text/editable target |
305
+ | `act.press` | keyboard key or shortcut |
306
+ | `act.scroll` | scroll target, viewport, or region |
307
+ | `act.hover` | move virtual cursor and show hover state |
308
+ | `act.drag` | drag target to target/point/path with visible trajectory |
309
+ | `act.select` | choose menu/listbox/combobox option |
310
+ | `act.upload` | file chooser fallback when supported |
311
+ | `act.wait` | wait for route, state, network idle, selector, or capability event |
312
+ | `act.replay` | replay a recorded action sequence against a window lease |
313
+
314
+ Every action result should include:
315
+
316
+ - `commandId`, `agentId`, `sessionId`, `windowId`, `runId`, `leaseId`
317
+ - target resolution details
318
+ - before/after observation ids
319
+ - event/log/network deltas
320
+ - screenshot or cursor trail path when visual behavior matters
321
+ - status: `ok`, `failed`, `blocked`, or `unsupported`
322
+
323
+ ## Visible Agent Operation
324
+
325
+ The frontend debug client should draw agent activity independently of the user
326
+ mouse:
327
+
328
+ - virtual cursor per `agentId`, with label/color and current operation
329
+ - hover target outline and click pulse
330
+ - drag path, drop target, and rejected-drop marker
331
+ - typing focus ring and redacted text only if the project asks for redaction
332
+ - operation timeline panel or event feed when the debug overlay is enabled
333
+
334
+ The virtual cursor is explanatory UI. It must not steal the user's pointer. If a
335
+ real user interacts with the same window, the backend must record the collision
336
+ and either pause the agent lease or mark the run as mixed-control.
337
+
338
+ ## Backend Broker
339
+
340
+ The backend owns sessions, leases, evidence, and fan-out. The frontend owns DOM,
341
+ component state, screenshots, and visible operation rendering.
342
+
343
+ Recommended channels:
344
+
345
+ - HTTP for run creation, artifact listing, cleanup, and stable snapshots.
346
+ - WebSocket for frontend registration, command dispatch, acks/results,
347
+ heartbeats, and live events.
348
+ - Optional fallback driver channel for Playwright/CDP/Browser Use when the
349
+ target page cannot load the first-party debug client.
350
+
351
+ Core message types:
352
+
353
+ - `hello`: frontend registers route/window/capabilities.
354
+ - `lease.request` / `lease.granted` / `lease.release`: exclusive control per
355
+ window.
356
+ - `command`: backend asks frontend to run one `observe.*` or `act.*` primitive.
357
+ - `ack`: frontend accepted or rejected the command shape.
358
+ - `result`: frontend completed the command and attached artifact ids.
359
+ - `event`: logs, errors, network, route changes, dialogs, downloads, user
360
+ collisions.
361
+ - `heartbeat`: liveness and buffered queue size.
362
+ - `artifact`: metadata for a stored screenshot/tree/state/log/network file.
363
+
364
+ WebSocket messages must be bounded. Browser WebSocket has no backpressure, so
365
+ large screenshots, UI trees, AST dumps, and videos are stored as files under
366
+ `Harness/wf-browser/`; messages carry metadata and paths.
367
+
368
+ ## Multi-Agent Window Contract
369
+
370
+ Multiple subagents must be able to debug different features at the same time.
371
+ Concurrency is protocol-level, not an afterthought.
372
+
373
+ - Each subagent gets its own `agentId`, `sessionId`, `windowId`, `runId`, and
374
+ `leaseId`.
375
+ - A control lease is exclusive for a window. Two agents must not send `act.*`
376
+ commands to the same window concurrently.
377
+ - Read-only `observe.*` may share a window only when the backend labels the
378
+ lease as read-only and the frontend can guarantee no state mutation.
379
+ - The backend should provide a window pool: create, list, assign, release, and
380
+ cleanup windows.
381
+ - Runs are artifact-isolated:
382
+ `Harness/wf-browser/runs/<runId>/windows/<windowId>/...`.
383
+ - Cross-agent coordination belongs in the task plan: which feature/window each
384
+ subagent owns, which data fixtures they may mutate, and how results merge.
385
+ - If two agents need the same global app state, seed separate test data or
386
+ separate browser contexts before dispatch.
387
+
388
+ Use `HARNESS_BRIDGE.md` for the full window-pool operation table. The minimum
389
+ runtime set is create/open, list, wait, lease, snapshot, release, close, and
390
+ cleanup.
391
+
392
+ Dispatch packets for subagents should include `agentId`, `runId`, intended
393
+ `windowId` or `window.create` requirements, allowed routes/features, fixture
394
+ scope, and whether the subagent may run `act.*` or only `observe.*`. The backend
395
+ must reject an `act.*` command whose `leaseId` is absent, expired, read-only, or
396
+ owned by another agent.
397
+
398
+ ## Third-Party Pages
399
+
400
+ For third-party pages or apps whose source cannot be changed:
401
+
402
+ 1. Try an injected lightweight debug client that builds a temporary semantic
403
+ tree from accessibility roles, labels, visible text, bounds, and editable
404
+ state.
405
+ 2. Let the agent add temporary tags or aliases to targets for the current run.
406
+ 3. Use Playwright MCP, Browser Use, CDP, or another browser driver as a fallback
407
+ for navigation, native input, permissions, screenshots, downloads, and pages
408
+ that block injection.
409
+ 4. Keep the same artifact and action-result shape so first-party and third-party
410
+ evidence remains comparable.
411
+
412
+ Third-party control will always be noisier. If the project source is available,
413
+ fix the UI contract instead of writing complex selector scripts.
414
+
415
+ ## Artifact Workspace
416
+
417
+ `Harness/wf-browser/` is the browser evidence workspace. Store high-volume
418
+ runtime data there, not in chat or task summaries.
419
+
420
+ Use the stable layout
421
+ `Harness/wf-browser/runs/<runId>/windows/<windowId>/...` with subfolders for
422
+ screenshots, ui-tree, state, logs, network, ast, replay, and analysis.
423
+
424
+ Retention:
425
+
426
+ - Keep the latest 20 runs or 7 days by default.
427
+ - Keep artifacts referenced by an active task until closeout.
428
+ - Use `node Harness/scripts/wf-ui-control.mjs browser-cleanup` to preview or
429
+ apply retention through the backend cleanup API.
430
+ - Never write unbounded screenshots, full DOM, or network bodies to task files.
431
+
432
+ Default local debugging is trusted and open. Do not redact screenshots, logs,
433
+ network payloads, or state unless the project or user asks for redaction. Do not
434
+ publish artifacts outside the workspace without explicit user approval.
435
+
436
+ ## Fallback Drivers
437
+
438
+ Use fallback drivers only for capabilities the first-party bridge cannot yet
439
+ provide:
440
+
441
+ - Playwright: repeatable E2E smoke, browser contexts, real navigation, trace
442
+ capture, and compatibility checks.
443
+ - CDP: low-level browser diagnostics, console/runtime/network details, native
444
+ screenshot or page snapshot, permissions, downloads, and hard browser facts.
445
+ - Browser Use or Playwright MCP: exploratory control of third-party pages and
446
+ accessibility-snapshot workflows.
447
+
448
+ Fallback output should be normalized into the same run/window artifact layout.
449
+
450
+ ## Quality Gates
451
+
452
+ Before calling a `wf-browser` result complete, verify the relevant gates:
453
+
454
+ - Design gate: readiness level assigned; route/capability/UI/state/broker/
455
+ fixture/evidence/fallback contracts exist for the requested scope.
456
+ - Control gate: real run id, window id, lease id, observations, atomic actions,
457
+ settlement, diffs, artifacts, and release status are recorded.
458
+ - Stability gate: selectors and capability ids are durable; no generated class,
459
+ XPath, DOM index, or raw coordinate is the primary target contract.
460
+ - Concurrency gate: subagent/window ownership is explicit; conflicting write
461
+ actions are rejected or avoided.
462
+ - Adaptability gate: first-party, third-party, local, CI, headed, headless,
463
+ desktop, and mobile viewport constraints are classified.
464
+ - Cleanup gate: high-volume artifacts remain in `Harness/wf-browser/`, retained
465
+ only while useful, and task files contain paths and summaries.
169
466
 
170
467
  ## Return
171
468
 
172
- - Commands or scripts run
173
- - Selectors used
174
- - Screenshot/trace/video/state paths
175
- - Verified flows and AC matrix
176
- - Failures and remaining risks
469
+ When returning from `wf-browser`, include:
470
+
471
+ - mode used: architecture design, runtime control, recovery, or mixed
472
+ - readiness level before and after the work
473
+ - design outputs updated: route inventory, capability map, UI contract, broker
474
+ contract, fixture contract, evidence contract, and fallback contract
475
+ - run id, session/window ids, and whether each window lease was released
476
+ - commands/scripts run
477
+ - capabilities used and targets controlled
478
+ - artifact paths under `Harness/wf-browser/`
479
+ - verified flows and AC matrix
480
+ - failures, unsupported primitives, and fallback driver use
481
+ - cleanup performed or artifacts intentionally retained
@@ -0,0 +1,43 @@
1
+ # Browser Control Patterns
2
+
3
+ Use this reference when comparing `wf-browser` against external browser-agent
4
+ patterns or refining the skill itself.
5
+
6
+ ## External Signals
7
+
8
+ - Playwright MCP favors structured accessibility snapshots with stable element
9
+ refs, which is better for agents than raw screenshot or DOM scraping. Harness
10
+ should keep `observe.uiTree` similarly structured, but add first-party
11
+ capability ids when source is editable.
12
+ - Stagehand separates `observe`, `act`, `extract`, and `agent`. Harness should
13
+ keep the same primitive boundary style while preferring deterministic
14
+ capability actions over natural-language target resolution for owned apps.
15
+ - Agent Browser Protocol frames browsing as one settled step at a time, with
16
+ input, screenshot, event log, and cursor evidence per step. Harness should
17
+ emulate that at the frontend/backend debug layer without requiring a custom
18
+ Chromium build.
19
+ - CDP is powerful for browser facts such as network, DOM snapshots, tracing,
20
+ permissions, and screenshots, but it is too low-level and unstable to be the
21
+ primary agent UI contract.
22
+ - Agent skill guidance favors concise `SKILL.md` files plus references/scripts.
23
+ Keep architecture rationale here and keep the main skill focused on the
24
+ workflow and contracts an agent must follow.
25
+
26
+ ## Harness Design Takeaways
27
+
28
+ - First-party app control: add route/component capability ids, stable
29
+ `data-testid` values, accessible names, serializable state, and explicit
30
+ `observe.*`/`act.*` support before writing browser scripts.
31
+ - Third-party fallback: build temporary semantic trees from accessibility,
32
+ visible text, bounds, and editable state; normalize Playwright/CDP/MCP output
33
+ into the same run/window artifacts.
34
+ - Multi-agent testing: allocate one run with many window/lease assignments,
35
+ open visible isolated browser profiles per window when needed, record/list
36
+ launch state, wait for each frontend WebSocket registration, then dispatch
37
+ bounded work by feature, route, fixture, and control permission; close browser
38
+ profiles during release/cleanup.
39
+ - Debuggability: every command result should have before/after observations,
40
+ settlement evidence, logs/network deltas, virtual cursor trace, and artifact
41
+ paths.
42
+ - Stability: selectors are implementation details; capability ids, durable
43
+ domain ids, and explicit state contracts are the real agent API.