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.
- package/CHANGELOG.md +49 -0
- package/README-CN.md +4 -2
- package/README.md +23 -4
- package/package.json +17 -2
- package/src/generator.js +19 -6
- package/src/index.js +531 -38
- package/src/prompts.js +4 -4
- package/src/ui/dist/assets/AgentsRoute-BGGs90wH.js +7 -0
- package/src/ui/dist/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
- package/src/ui/dist/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
- package/src/ui/dist/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
- package/src/ui/dist/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
- package/src/ui/dist/assets/Combination-DhBLEmof.js +42 -0
- package/src/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/src/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/src/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/src/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/src/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/src/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/src/ui/dist/assets/RolesRoute-DnodCSz0.js +2 -0
- package/src/ui/dist/assets/RuntimePicker-CucD8TGn.js +7 -0
- package/src/ui/dist/assets/SettingsRoute-DquMWjac.js +2 -0
- package/src/ui/dist/assets/TaskList-Bxc0Uktx.js +7 -0
- package/src/ui/dist/assets/TerminalDrawer-CDusYltc.js +36 -0
- package/src/ui/dist/assets/WorkflowRoute-BN8yHmUs.css +1 -0
- package/src/ui/dist/assets/WorkflowRoute-D-0wVDpY.js +334 -0
- package/src/ui/dist/assets/abnfDiagram-VRR7QNED-zkRKkaxO.js +2 -0
- package/src/ui/dist/assets/apl-B4CMkyY2.js +2 -0
- package/src/ui/dist/assets/ar-SA-G6X2FPQ2-BiHaArx5.js +11 -0
- package/src/ui/dist/assets/arc-CBnLtOFO.js +2 -0
- package/src/ui/dist/assets/architectureDiagram-ZJ3FMSHR-DWXRXsh1.js +37 -0
- package/src/ui/dist/assets/asciiarmor-Df11BRmG.js +2 -0
- package/src/ui/dist/assets/asn1-EdZsLKOL.js +2 -0
- package/src/ui/dist/assets/asterisk-B-8jnY81.js +2 -0
- package/src/ui/dist/assets/az-AZ-76LH7QW2-CiT05voO.js +2 -0
- package/src/ui/dist/assets/bg-BG-XCXSNQG7-L-UM9tNf.js +6 -0
- package/src/ui/dist/assets/blockDiagram-677ZJIJ3-BIyh3Bry.js +133 -0
- package/src/ui/dist/assets/bn-BD-2XOGV67Q-NdgbA0bC.js +6 -0
- package/src/ui/dist/assets/brainfuck-C4LP7Hcl.js +2 -0
- package/src/ui/dist/assets/c4Diagram-LMCZKHZV-CA54vWWM.js +11 -0
- package/src/ui/dist/assets/ca-ES-6MX7JW3Y-BKZZsQ5J.js +9 -0
- package/src/ui/dist/assets/channel-Da_-zcAu.js +2 -0
- package/src/ui/dist/assets/chunk-2Q5K7J3B-DE4cxr1v.js +2 -0
- package/src/ui/dist/assets/chunk-32BRIVSS-i7FwbEU9.js +2 -0
- package/src/ui/dist/assets/chunk-5VM5RSS4-BhIcOYSu.js +16 -0
- package/src/ui/dist/assets/chunk-EX3LRPZG-Ci9zZRIs.js +232 -0
- package/src/ui/dist/assets/chunk-JWPE2WC7-BFdkcz-G.js +2 -0
- package/src/ui/dist/assets/chunk-MOJQB5TN-Dzmapl_S.js +89 -0
- package/src/ui/dist/assets/chunk-RYQCIY6F-RTmp7FOy.js +2 -0
- package/src/ui/dist/assets/chunk-V7JOEXUC-DInU3v3D.js +207 -0
- package/src/ui/dist/assets/chunk-VR4S4FIN-BHoyGBQO.js +2 -0
- package/src/ui/dist/assets/chunk-XXDRQBXY-DfeLZNZx.js +2 -0
- package/src/ui/dist/assets/classDiagram-OUVF2IWQ-FKbUS0bu.js +2 -0
- package/src/ui/dist/assets/classDiagram-v2-EOCWNBFH-FKbUS0bu.js +2 -0
- package/src/ui/dist/assets/clike-B9uivgTg.js +2 -0
- package/src/ui/dist/assets/clojure-BMjYHr_A.js +2 -0
- package/src/ui/dist/assets/cmake-BQqOBYOt.js +2 -0
- package/src/ui/dist/assets/cobol-CWcv1MsR.js +2 -0
- package/src/ui/dist/assets/coffeescript-S37ZYGWr.js +2 -0
- package/src/ui/dist/assets/commonlisp-DBKNyK5s.js +2 -0
- package/src/ui/dist/assets/cose-bilkent-JH36ORCC-_5PUJ615.js +2 -0
- package/src/ui/dist/assets/crystal-SjHAIU92.js +2 -0
- package/src/ui/dist/assets/cs-CZ-2BRQDIVT-DnkfnhDU.js +12 -0
- package/src/ui/dist/assets/css-BnMrqG3P.js +2 -0
- package/src/ui/dist/assets/cynefin-VYW2F7L2-CmkcFv-b.js +179 -0
- package/src/ui/dist/assets/cynefinDiagram-TSTJHNR4-D72VZn8H.js +63 -0
- package/src/ui/dist/assets/cypher-C_CwsFkJ.js +2 -0
- package/src/ui/dist/assets/cytoscape.esm-DTSO7Bv0.js +332 -0
- package/src/ui/dist/assets/d-pRatUO7H.js +2 -0
- package/src/ui/dist/assets/da-DK-5WZEPLOC-C54tQUgd.js +6 -0
- package/src/ui/dist/assets/dagre-VKFMJZFB-0BsAkrmo.js +5 -0
- package/src/ui/dist/assets/de-DE-XR44H4JA-DGfZlR10.js +9 -0
- package/src/ui/dist/assets/defaultLocale-DX6XiGOO.js +2 -0
- package/src/ui/dist/assets/diagram-FQU43EPY-C1ZJDOca.js +4 -0
- package/src/ui/dist/assets/diagram-G47NLZAW-D3pr3FSP.js +25 -0
- package/src/ui/dist/assets/diagram-NH7WQ7WH-Bwry0NV-.js +25 -0
- package/src/ui/dist/assets/diagram-OA4YK3LP-L6g09cmV.js +31 -0
- package/src/ui/dist/assets/diagram-WEI45ONY-Bh1puYVX.js +42 -0
- package/src/ui/dist/assets/diff-DbItnlRl.js +2 -0
- package/src/ui/dist/assets/directory-open-01563666-DWU9wJ6I.js +2 -0
- package/src/ui/dist/assets/directory-open-4ed118d0-CunoC1EB.js +2 -0
- package/src/ui/dist/assets/dockerfile-BKs6k2Af.js +2 -0
- package/src/ui/dist/assets/dtd-DF_7sFjM.js +2 -0
- package/src/ui/dist/assets/dylan-DwRh75JA.js +2 -0
- package/src/ui/dist/assets/ebnf-CDyGwa7X.js +2 -0
- package/src/ui/dist/assets/ebnfDiagram-CCIWWBDH-BC_mBRR5.js +2 -0
- package/src/ui/dist/assets/ecl-Cabwm37j.js +2 -0
- package/src/ui/dist/assets/eiffel-CnydiIhH.js +2 -0
- package/src/ui/dist/assets/el-GR-BZB4AONW-DsnwWweL.js +11 -0
- package/src/ui/dist/assets/elm-vLlmbW-K.js +2 -0
- package/src/ui/dist/assets/erDiagram-Q63AITRT-Bkxam36l.js +86 -0
- package/src/ui/dist/assets/erlang-BNw1qcRV.js +2 -0
- package/src/ui/dist/assets/es-ES-U4NZUMDT-CRxBcQgC.js +10 -0
- package/src/ui/dist/assets/eu-ES-A7QVB2H4-CTd_E7YR.js +12 -0
- package/src/ui/dist/assets/excalidraw-default-bMWIgNCy.svg +1 -0
- package/src/ui/dist/assets/fa-IR-HGAKTJCU-DO56k7eG.js +9 -0
- package/src/ui/dist/assets/factor-kuTfRLto.js +2 -0
- package/src/ui/dist/assets/fcl-Kvtd6kyn.js +2 -0
- package/src/ui/dist/assets/fi-FI-Z5N7JZ37-DEDCF9WB.js +7 -0
- package/src/ui/dist/assets/file-open-002ab408-DIuFHtCF.js +2 -0
- package/src/ui/dist/assets/file-open-7c801643-684qeFg4.js +2 -0
- package/src/ui/dist/assets/file-save-3189631c-C1wFhQhH.js +2 -0
- package/src/ui/dist/assets/file-save-745eba88-Bb9F9Kg7.js +2 -0
- package/src/ui/dist/assets/flowDiagram-23GEKE2U-C3SAEao7.js +157 -0
- package/src/ui/dist/assets/forth-Ffai-XNe.js +2 -0
- package/src/ui/dist/assets/fortran-DYz_wnZ1.js +2 -0
- package/src/ui/dist/assets/fr-FR-RHASNOE6-DE2nPyDt.js +10 -0
- package/src/ui/dist/assets/ganttDiagram-NO4QXBWP-U-J_Xi-_.js +293 -0
- package/src/ui/dist/assets/gas-Bneqetm1.js +2 -0
- package/src/ui/dist/assets/gherkin-heZmZLOM.js +2 -0
- package/src/ui/dist/assets/gitGraphDiagram-IHSO6WYX-BADVbD-a.js +107 -0
- package/src/ui/dist/assets/gl-ES-HMX3MZ6V-mCqVgQHC.js +11 -0
- package/src/ui/dist/assets/graph-C9eacEi8.js +2 -0
- package/src/ui/dist/assets/groovy-D9Dt4D0W.js +2 -0
- package/src/ui/dist/assets/haskell-Cw1EW3IL.js +2 -0
- package/src/ui/dist/assets/haxe-H-WmDvRZ.js +2 -0
- package/src/ui/dist/assets/he-IL-6SHJWFNN-KnaLrCzw.js +11 -0
- package/src/ui/dist/assets/hi-IN-IWLTKZ5I-wuqiaaWt.js +5 -0
- package/src/ui/dist/assets/http-DBlCnlav.js +2 -0
- package/src/ui/dist/assets/hu-HU-A5ZG7DT2-DLg_zm22.js +8 -0
- package/src/ui/dist/assets/id-ID-SAP4L64H-MB2mXqcR.js +11 -0
- package/src/ui/dist/assets/idl-BEugSyMb.js +2 -0
- package/src/ui/dist/assets/image-blob-reduce.esm-HwCm7IZ0.js +8 -0
- package/src/ui/dist/assets/index-39SJtrt0.js +2 -0
- package/src/ui/dist/assets/index-BQ0LIrW-.js +2 -0
- package/src/ui/dist/assets/index-BcAUh2Nm.css +1 -0
- package/src/ui/dist/assets/index-BcThOK-i.js +331 -0
- package/src/ui/dist/assets/index-BnxV3k_S.js +3 -0
- package/src/ui/dist/assets/index-C7MZBHbT.js +117 -0
- package/src/ui/dist/assets/index-CCvKI2rM.js +2 -0
- package/src/ui/dist/assets/index-CZvmcCab.js +8 -0
- package/src/ui/dist/assets/index-Cp3hLKNl.js +2 -0
- package/src/ui/dist/assets/index-D7ayFxcx.js +2 -0
- package/src/ui/dist/assets/index-DAYxSQGU.js +2 -0
- package/src/ui/dist/assets/index-DD-HeMV0.css +1 -0
- package/src/ui/dist/assets/index-DPMxd3Qn.js +2 -0
- package/src/ui/dist/assets/index-DSe2jx3k.js +4 -0
- package/src/ui/dist/assets/index-DUirCkgW.js +2 -0
- package/src/ui/dist/assets/index-DaKPQ2hN.js +159 -0
- package/src/ui/dist/assets/index-DzpuR0Jg.js +2 -0
- package/src/ui/dist/assets/index-POndwsCI.js +2 -0
- package/src/ui/dist/assets/index-R8NM9I_9.js +2 -0
- package/src/ui/dist/assets/index-TCDuDhBj.js +2 -0
- package/src/ui/dist/assets/index-TckzASdM.js +2 -0
- package/src/ui/dist/assets/index-Yi5ytFFr.js +2 -0
- package/src/ui/dist/assets/infoDiagram-FWYZ7A6U-CiGBlFqH.js +3 -0
- package/src/ui/dist/assets/init-Gi6I4Gst.js +2 -0
- package/src/ui/dist/assets/ishikawaDiagram-FXEZZL3T-B1aheRbz.js +71 -0
- package/src/ui/dist/assets/it-IT-JPQ66NNP-DT3HSU7X.js +12 -0
- package/src/ui/dist/assets/ja-JP-DBVTYXUO-CsfJjjWt.js +9 -0
- package/src/ui/dist/assets/javascript-iXu5QeM3.js +2 -0
- package/src/ui/dist/assets/journeyDiagram-5HDEW3XC-DtnJPxub.js +140 -0
- package/src/ui/dist/assets/julia-DuME0IfC.js +2 -0
- package/src/ui/dist/assets/kaa-6HZHGXH3-DQz-1-Gn.js +2 -0
- package/src/ui/dist/assets/kab-KAB-ZGHBKWFO-CaH-LSoK.js +9 -0
- package/src/ui/dist/assets/kanban-definition-HUTT4EX6-CZatSm3e.js +90 -0
- package/src/ui/dist/assets/katex-C5jXJg4s.js +258 -0
- package/src/ui/dist/assets/kk-KZ-P5N5QNE5-BMXmcm55.js +2 -0
- package/src/ui/dist/assets/km-KH-HSX4SM5Z-ZeoJNBpN.js +12 -0
- package/src/ui/dist/assets/ko-KR-MTYHY66A-BeaLRKph.js +10 -0
- package/src/ui/dist/assets/ku-TR-6OUDTVRD-B_28KrkR.js +10 -0
- package/src/ui/dist/assets/layout-DEXfKzaS.js +2 -0
- package/src/ui/dist/assets/linear-CpEDnQRC.js +2 -0
- package/src/ui/dist/assets/livescript-BwQOo05w.js +2 -0
- package/src/ui/dist/assets/lt-LT-XHIRWOB4-BxDcnUhp.js +4 -0
- package/src/ui/dist/assets/lua-VAEuO923.js +2 -0
- package/src/ui/dist/assets/lv-LV-5QDEKY6T-DpKDl1_y.js +8 -0
- package/src/ui/dist/assets/map-Czzmt4hB.js +2 -0
- package/src/ui/dist/assets/mathematica-DTrFuWx2.js +2 -0
- package/src/ui/dist/assets/mbox-CNhZ1qSd.js +2 -0
- package/src/ui/dist/assets/mermaidLoader-CBO31t0J.js +305 -0
- package/src/ui/dist/assets/mermaidLoader-CEK31ho9.css +1 -0
- package/src/ui/dist/assets/mindmap-definition-LN4V7U3C-CQ0TccEr.js +97 -0
- package/src/ui/dist/assets/mirc-CjQqDB4T.js +2 -0
- package/src/ui/dist/assets/mllike-CXdrOF99.js +2 -0
- package/src/ui/dist/assets/modelica-Dc1JOy9r.js +2 -0
- package/src/ui/dist/assets/mr-IN-CRQNXWMA-BKCZT58p.js +14 -0
- package/src/ui/dist/assets/mscgen-BA5vi2Kp.js +2 -0
- package/src/ui/dist/assets/mumps-BT43cFF4.js +2 -0
- package/src/ui/dist/assets/my-MM-5M5IBNSE-D34k0G9T.js +2 -0
- package/src/ui/dist/assets/nb-NO-T6EIAALU-DXr_KW8J.js +11 -0
- package/src/ui/dist/assets/nginx-DdIZxoE0.js +2 -0
- package/src/ui/dist/assets/nl-NL-IS3SIHDZ-C1L0aVDR.js +9 -0
- package/src/ui/dist/assets/nn-NO-6E72VCQL-CLWVSxbZ.js +9 -0
- package/src/ui/dist/assets/nsis-LdVXkNf5.js +2 -0
- package/src/ui/dist/assets/ntriples-BfvgReVJ.js +2 -0
- package/src/ui/dist/assets/oc-FR-POXYY2M6-nf8_J3eR.js +9 -0
- package/src/ui/dist/assets/octave-Ck1zUtKM.js +2 -0
- package/src/ui/dist/assets/ordinal-Cboi1Yqb.js +2 -0
- package/src/ui/dist/assets/oz-BzwKVEFT.js +2 -0
- package/src/ui/dist/assets/pa-IN-N4M65BXN-CAMJ-xd6.js +5 -0
- package/src/ui/dist/assets/pascal--L3eBynH.js +2 -0
- package/src/ui/dist/assets/pegDiagram-2B236MQR-Bj2RcmRd.js +2 -0
- package/src/ui/dist/assets/percentages-BXMCSKIN-s9yWFdr6.js +160 -0
- package/src/ui/dist/assets/perl-CdXCOZ3F.js +2 -0
- package/src/ui/dist/assets/pica-BGv_AhAB.js +8 -0
- package/src/ui/dist/assets/pieDiagram-ENE6RG2P-obpzz8dC.js +40 -0
- package/src/ui/dist/assets/pig-CevX1Tat.js +2 -0
- package/src/ui/dist/assets/pl-PL-T2D74RX3-DKJ5H85v.js +10 -0
- package/src/ui/dist/assets/powershell-CFHJl5sT.js +2 -0
- package/src/ui/dist/assets/properties-C78fOPTZ.js +2 -0
- package/src/ui/dist/assets/protobuf-ChK-085T.js +2 -0
- package/src/ui/dist/assets/{proxy-D0vUbds5.js → proxy-BSmwef4H.js} +2 -2
- package/src/ui/dist/assets/pt-BR-5N22H2LF-B5kow-kN.js +10 -0
- package/src/ui/dist/assets/pt-PT-UZXXM6DQ-B2G34fso.js +10 -0
- package/src/ui/dist/assets/pug-DeIclll2.js +2 -0
- package/src/ui/dist/assets/puppet-DMA9R1ak.js +2 -0
- package/src/ui/dist/assets/python-BuPzkPfP.js +2 -0
- package/src/ui/dist/assets/q-pXgVlZs6.js +2 -0
- package/src/ui/dist/assets/quadrantDiagram-ABIIQ3AL-Cl-T7NkJ.js +8 -0
- package/src/ui/dist/assets/r-B6wPVr8A.js +2 -0
- package/src/ui/dist/assets/railroadDiagram-RFXS5EU6-DMq82RHg.js +2 -0
- package/src/ui/dist/assets/{refresh-cw-JNmExijd.js → refresh-cw-CbFd7guV.js} +2 -2
- package/src/ui/dist/assets/requirementDiagram-TGXJPOKE-tGInMDgU.js +85 -0
- package/src/ui/dist/assets/ro-RO-JPDTUUEW-BwLdZW91.js +12 -0
- package/src/ui/dist/assets/roundRect-0PYZxl1G.js +2 -0
- package/src/ui/dist/assets/rpm-CTu-6PCP.js +2 -0
- package/src/ui/dist/assets/ru-RU-B4JR7IUQ-DpdAgIJc.js +10 -0
- package/src/ui/dist/assets/ruby-B2Rjki9n.js +2 -0
- package/src/ui/dist/assets/runtimeBrand-BoKPimsz.js +2 -0
- package/src/ui/dist/assets/sankeyDiagram-HTMAVEWB-C7X-ET4m.js +41 -0
- package/src/ui/dist/assets/sas-B4kiWyti.js +2 -0
- package/src/ui/dist/assets/save-D1CXHwBw.js +12 -0
- package/src/ui/dist/assets/scheme-C41bIUwD.js +2 -0
- package/src/ui/dist/assets/sequenceDiagram-DBY2YBRQ-Bn24i_nY.js +163 -0
- package/src/ui/dist/assets/settings-2-DtSNAAcU.js +22 -0
- package/src/ui/dist/assets/shell-CjFT_Tl9.js +2 -0
- package/src/ui/dist/assets/shield-check-BVbJ8T_N.js +7 -0
- package/src/ui/dist/assets/si-LK-N5RQ5JYF-naJaUy5u.js +2 -0
- package/src/ui/dist/assets/sieve-C3Gn_uJK.js +2 -0
- package/src/ui/dist/assets/simple-mode-GW_nhZxv.js +2 -0
- package/src/ui/dist/assets/sizeCapture-X5ZJPWSS-DAQHfm82.js +2 -0
- package/src/ui/dist/assets/sk-SK-C5VTKIMK-1NPz1J_d.js +7 -0
- package/src/ui/dist/assets/sl-SI-NN7IZMDC-D8RfmNQw.js +7 -0
- package/src/ui/dist/assets/smalltalk-CnHTOXQT.js +2 -0
- package/src/ui/dist/assets/solr-DehyRSwq.js +2 -0
- package/src/ui/dist/assets/sparql-DkYu6x3z.js +2 -0
- package/src/ui/dist/assets/spreadsheet-BCZA_wO0.js +2 -0
- package/src/ui/dist/assets/sql-D0XecflT.js +2 -0
- package/src/ui/dist/assets/stateDiagram-2N3HPSRC-Ck48D1ck.js +2 -0
- package/src/ui/dist/assets/stateDiagram-v2-6OUMAXLB-CdfRCJAJ.js +2 -0
- package/src/ui/dist/assets/stex-C3f8Ysf7.js +2 -0
- package/src/ui/dist/assets/style-C3QI7VPf.css +1 -0
- package/src/ui/dist/assets/stylus-B533Al4x.js +2 -0
- package/src/ui/dist/assets/subset-shared.chunk-eAtLHmbi.js +85 -0
- package/src/ui/dist/assets/subset-worker.chunk-DeHCTnTk.js +2 -0
- package/src/ui/dist/assets/sv-SE-XGPEYMSR-BeOYCU-8.js +11 -0
- package/src/ui/dist/assets/swift-BzpIVaGY.js +2 -0
- package/src/ui/dist/assets/swimlanes-5IMT3BWC-DOy22UjP.js +3 -0
- package/src/ui/dist/assets/swimlanesDiagram-G3AALYLV-sicPbVOg.js +9 -0
- package/src/ui/dist/assets/ta-IN-2NMHFXQM-CtS68WDd.js +10 -0
- package/src/ui/dist/assets/tcl-DVfN8rqt.js +2 -0
- package/src/ui/dist/assets/{terminal-BBQvnOAK.js → terminal-DEby5Y_P.js} +2 -2
- package/src/ui/dist/assets/terminalControl-BkFeDVXo.js +134 -0
- package/src/ui/dist/assets/textile-CnDTJFAw.js +2 -0
- package/src/ui/dist/assets/th-TH-HPSO5L25-DCHY9-Co.js +3 -0
- package/src/ui/dist/assets/tiddlywiki-DO-Gjzrf.js +2 -0
- package/src/ui/dist/assets/tiki-DGYXhP31.js +2 -0
- package/src/ui/dist/assets/timeline-definition-FHXFAJF6-DVkG72qO.js +121 -0
- package/src/ui/dist/assets/toml-Bm5Em-hy.js +2 -0
- package/src/ui/dist/assets/tr-TR-DEFEU3FU-y5-vjTv8.js +8 -0
- package/src/ui/dist/assets/troff-wAsdV37c.js +2 -0
- package/src/ui/dist/assets/ttcn-CfJYG6tj.js +2 -0
- package/src/ui/dist/assets/ttcn-cfg-B9xdYoR4.js +2 -0
- package/src/ui/dist/assets/turtle-B1tBg_DP.js +2 -0
- package/src/ui/dist/assets/uk-UA-QMV73CPH-BRbR5It6.js +7 -0
- package/src/ui/dist/assets/useReducedMotion-D07XP52Q.js +12 -0
- package/src/ui/dist/assets/vb-CmGdzxic.js +2 -0
- package/src/ui/dist/assets/vbscript-BuJXcnF6.js +2 -0
- package/src/ui/dist/assets/velocity-D8B20fx6.js +2 -0
- package/src/ui/dist/assets/vennDiagram-L72KCM5P-DwMwBlf-.js +35 -0
- package/src/ui/dist/assets/verilog-C6RDOZhf.js +2 -0
- package/src/ui/dist/assets/vhdl-lSbBsy5d.js +2 -0
- package/src/ui/dist/assets/vi-VN-M7AON7JQ-s6wSBv2s.js +6 -0
- package/src/ui/dist/assets/wardleyDiagram-EHGQE667-CNuuvzEg.js +79 -0
- package/src/ui/dist/assets/webidl-ZXfAyPTL.js +2 -0
- package/src/ui/dist/assets/{x-DoIOGAJz.js → x-B84wq78k.js} +2 -2
- package/src/ui/dist/assets/xquery-DzFWVndE.js +2 -0
- package/src/ui/dist/assets/xychartDiagram-FW5EYKEG-dUpZxmn6.js +8 -0
- package/src/ui/dist/assets/yacas-BJ4BC0dw.js +2 -0
- package/src/ui/dist/assets/z80-Hz9HOZM7.js +2 -0
- package/src/ui/dist/assets/zh-CN-LNUGB5OW-Cu_-POQN.js +11 -0
- package/src/ui/dist/assets/zh-HK-E62DVLB3-BCx4W4qZ.js +2 -0
- package/src/ui/dist/assets/zh-TW-RAJ6MFWO-02wx_Mrj.js +10 -0
- package/src/ui/dist/icons/excalidraw.svg +1 -0
- package/src/ui/dist/icons/markdown.svg +1 -0
- package/src/ui/dist/index.html +2 -2
- package/src/ui/package.json +10 -0
- package/src/ui/playwright.config.ts +36 -0
- package/src/ui/pnpm-workspace.yaml +2 -0
- package/src/ui/public/icons/excalidraw.svg +1 -0
- package/src/ui/public/icons/markdown.svg +1 -0
- package/src/ui/tsconfig.json +2 -1
- package/src/ui/vite.config.ts +1 -0
- package/src/wf-ui-server/__tests__/a2a-store.test.mjs +432 -15
- package/src/wf-ui-server/__tests__/action-registry-loader.test.mjs +156 -0
- package/src/wf-ui-server/__tests__/claude-stream-json.test.mjs +397 -0
- package/src/wf-ui-server/__tests__/codex-appserver.test.mjs +392 -0
- package/src/wf-ui-server/__tests__/component-node-api.test.mjs +881 -0
- package/src/wf-ui-server/__tests__/component-node-store.test.mjs +401 -0
- package/src/wf-ui-server/__tests__/control-plane-acceptance.test.mjs +2027 -0
- package/src/wf-ui-server/__tests__/control-plane-cli-smoke.test.mjs +1014 -0
- package/src/wf-ui-server/__tests__/dispatch-lifecycle.test.mjs +330 -0
- package/src/wf-ui-server/__tests__/effort-compatibility-red-092.test.mjs +151 -0
- package/src/wf-ui-server/__tests__/graph-layout-agent-tree.test.mjs +254 -0
- package/src/wf-ui-server/__tests__/graph-layout-tidy.test.mjs +260 -0
- package/src/wf-ui-server/__tests__/graph-layout.test.mjs +84 -0
- package/src/wf-ui-server/__tests__/node-config-api.test.mjs +384 -0
- package/src/wf-ui-server/__tests__/opencode-server.test.mjs +526 -0
- package/src/wf-ui-server/__tests__/peer-capsule.test.mjs +2 -2
- package/src/wf-ui-server/__tests__/pty-adapter.test.mjs +71 -1
- package/src/wf-ui-server/__tests__/runtime-config.test.mjs +3 -3
- package/src/wf-ui-server/__tests__/runtime-detector.test.mjs +21 -0
- package/src/wf-ui-server/__tests__/runtime-review.test.mjs +828 -0
- package/src/wf-ui-server/__tests__/server.integration.test.mjs +1463 -11
- package/src/wf-ui-server/__tests__/session-cleanup.test.mjs +159 -0
- package/src/wf-ui-server/__tests__/session-registry.test.mjs +52 -3
- package/src/wf-ui-server/__tests__/settings.test.mjs +12 -2
- package/src/wf-ui-server/__tests__/spawn-gate.test.mjs +78 -0
- package/src/wf-ui-server/__tests__/task-group-parser.test.mjs +120 -0
- package/src/wf-ui-server/__tests__/task-group-tag.test.mjs +264 -0
- package/src/wf-ui-server/__tests__/task-parser.test.mjs +49 -3
- package/src/wf-ui-server/__tests__/terminal-context-hardening.test.mjs +122 -0
- package/src/wf-ui-server/__tests__/terminal-context.test.mjs +164 -0
- package/src/wf-ui-server/__tests__/terminal-store.test.mjs +4 -4
- package/src/wf-ui-server/__tests__/wf-browser-api.test.mjs +599 -0
- package/src/wf-ui-server/__tests__/wf-browser-store.test.mjs +184 -0
- package/src/wf-ui-server/__tests__/workflow-action-registry.test.mjs +282 -0
- package/src/wf-ui-server/__tests__/workflow-agent-communication.test.mjs +411 -0
- package/src/wf-ui-server/__tests__/workflow-agent-context.test.mjs +323 -0
- package/src/wf-ui-server/__tests__/workflow-agent-cooperation-permissions.test.mjs +318 -0
- package/src/wf-ui-server/__tests__/workflow-agent-messages-structured.test.mjs +458 -0
- package/src/wf-ui-server/__tests__/workflow-agent-routing.test.mjs +434 -0
- package/src/wf-ui-server/__tests__/workflow-agent-runtime.test.mjs +324 -0
- package/src/wf-ui-server/__tests__/workflow-api-integration.test.mjs +263 -0
- package/src/wf-ui-server/__tests__/workflow-api-phase3.test.mjs +1213 -0
- package/src/wf-ui-server/__tests__/workflow-claude-materialize.test.mjs +209 -0
- package/src/wf-ui-server/__tests__/workflow-cli-registry-manuals.test.mjs +173 -0
- package/src/wf-ui-server/__tests__/workflow-cli-surface.test.mjs +176 -0
- package/src/wf-ui-server/__tests__/workflow-codex-resume-id.test.mjs +556 -0
- package/src/wf-ui-server/__tests__/workflow-cooperation-enforcement.test.mjs +553 -0
- package/src/wf-ui-server/__tests__/workflow-depth-resume-dock.test.mjs +846 -0
- package/src/wf-ui-server/__tests__/workflow-display-node.test.mjs +150 -0
- package/src/wf-ui-server/__tests__/workflow-edge-update.test.mjs +296 -0
- package/src/wf-ui-server/__tests__/workflow-file-cache-lock-watch.test.mjs +380 -0
- package/src/wf-ui-server/__tests__/workflow-file-formats.test.mjs +994 -0
- package/src/wf-ui-server/__tests__/workflow-file-node-actions.test.mjs +294 -0
- package/src/wf-ui-server/__tests__/workflow-goal-actions.test.mjs +357 -0
- package/src/wf-ui-server/__tests__/workflow-goal-task-autoclose.test.mjs +256 -0
- package/src/wf-ui-server/__tests__/workflow-graceful-stop.test.mjs +108 -0
- package/src/wf-ui-server/__tests__/workflow-graph-undo.test.mjs +524 -0
- package/src/wf-ui-server/__tests__/workflow-layout.test.mjs +732 -0
- package/src/wf-ui-server/__tests__/workflow-magnetic-topology.test.mjs +222 -0
- package/src/wf-ui-server/__tests__/workflow-markdown-lock.test.mjs +359 -0
- package/src/wf-ui-server/__tests__/workflow-mcp-hub.test.mjs +174 -0
- package/src/wf-ui-server/__tests__/workflow-node-manual-schema.test.mjs +241 -0
- package/src/wf-ui-server/__tests__/workflow-node-runtime.test.mjs +1991 -0
- package/src/wf-ui-server/__tests__/workflow-node-store-utils.test.mjs +125 -0
- package/src/wf-ui-server/__tests__/workflow-registry-drift.test.mjs +296 -0
- package/src/wf-ui-server/__tests__/workflow-resource-handle-four-side.test.mjs +217 -0
- package/src/wf-ui-server/__tests__/workflow-role-profile.test.mjs +234 -0
- package/src/wf-ui-server/__tests__/workflow-set-model.test.mjs +261 -0
- package/src/wf-ui-server/__tests__/workflow-skill-group-context-enabled.test.mjs +131 -0
- package/src/wf-ui-server/__tests__/workflow-skill-group-enable-disable.test.mjs +186 -0
- package/src/wf-ui-server/__tests__/workflow-skills-hub.test.mjs +125 -0
- package/src/wf-ui-server/__tests__/workflow-state-reconcile.test.mjs +139 -0
- package/src/wf-ui-server/__tests__/workflow-subagent-strategy-matrix.test.mjs +529 -0
- package/src/wf-ui-server/__tests__/workflow-team-flow.test.mjs +278 -0
- package/src/wf-ui-server/__tests__/workflow-terminal-control-live.test.mjs +294 -0
- package/src/wf-ui-server/__tests__/workflow-terminal-control.test.mjs +631 -0
- package/src/wf-ui-server/__tests__/workflow-timer-wakeup.test.mjs +318 -0
- package/src/wf-ui-server/__tests__/workflow-unified-resume.test.mjs +537 -0
- package/src/wf-ui-server/__tests__/workspace-api-hardening.test.mjs +187 -0
- package/src/wf-ui-server/__tests__/workspace-api.test.mjs +382 -0
- package/src/wf-ui-server/__tests__/workspace-reveal.test.mjs +138 -0
- package/src/wf-ui-server/__tests__/workspace-store-hardening.test.mjs +255 -0
- package/src/wf-ui-server/__tests__/workspace-store.test.mjs +208 -0
- package/src/wf-ui-server/__tests__/ws-events.integration.test.mjs +52 -25
- package/src/wf-ui-server/__tests__/ws-terminal.integration.test.mjs +12 -6
- package/src/wf-ui-server/__tests__/ws-wf-browser.integration.test.mjs +488 -0
- package/src/wf-ui-server/a2a-store.mjs +3007 -89
- package/src/wf-ui-server/action-registry.mjs +277 -0
- package/src/wf-ui-server/bridge-store.mjs +276 -0
- package/src/wf-ui-server/chat-driver.mjs +220 -0
- package/src/wf-ui-server/chat-store.mjs +109 -0
- package/src/wf-ui-server/claude-transcript-materializer.mjs +235 -0
- package/src/wf-ui-server/codex-update-prompt.mjs +53 -0
- package/src/wf-ui-server/component-node-store.mjs +689 -0
- package/src/wf-ui-server/composition-api.mjs +436 -0
- package/src/wf-ui-server/control-plane-token.mjs +17 -0
- package/src/wf-ui-server/dispatch-contract.mjs +150 -0
- package/src/wf-ui-server/drivers/claude-stream-json.mjs +371 -0
- package/src/wf-ui-server/drivers/codex-appserver.mjs +513 -0
- package/src/wf-ui-server/drivers/opencode-server.mjs +486 -0
- package/src/wf-ui-server/excalidraw-svg.mjs +141 -0
- package/src/wf-ui-server/file-format-adapters.mjs +511 -0
- package/src/wf-ui-server/file-watcher.mjs +215 -0
- package/src/wf-ui-server/graph-layout.mjs +778 -0
- package/src/wf-ui-server/harness-env.mjs +46 -0
- package/src/wf-ui-server/json-store-utils.mjs +48 -0
- package/src/wf-ui-server/model-capability.mjs +773 -0
- package/src/wf-ui-server/node-config-store.mjs +233 -0
- package/src/wf-ui-server/node-store-utils.mjs +88 -0
- package/src/wf-ui-server/peer-capsule.mjs +56 -1
- package/src/wf-ui-server/pty-adapter.mjs +513 -11
- package/src/wf-ui-server/reveal-foreground.mjs +69 -0
- package/src/wf-ui-server/runtime-detector.mjs +52 -6
- package/src/wf-ui-server/server.mjs +5613 -403
- package/src/wf-ui-server/session-cleanup.mjs +363 -0
- package/src/wf-ui-server/session-registry.mjs +179 -3
- package/src/wf-ui-server/settings.mjs +25 -0
- package/src/wf-ui-server/spawn-gate.mjs +46 -0
- package/src/wf-ui-server/task-parser.mjs +88 -3
- package/src/wf-ui-server/terminal-store.mjs +225 -11
- package/src/wf-ui-server/timer-wakeup-scheduler.mjs +226 -0
- package/src/wf-ui-server/wf-browser-store.mjs +733 -0
- package/src/wf-ui-server/workflow-agent-context.mjs +1731 -0
- package/src/wf-ui-server/workflow-capability-node-store.mjs +676 -0
- package/src/wf-ui-server/workflow-event-node-store.mjs +623 -0
- package/src/wf-ui-server/workflow-goal-node-store.mjs +328 -0
- package/src/wf-ui-server/workflow-graph-store.mjs +623 -0
- package/src/wf-ui-server/workflow-mcp-hub.mjs +286 -0
- package/src/wf-ui-server/workflow-node-runtime.mjs +1767 -0
- package/src/wf-ui-server/workflow-node-settings-store.mjs +339 -0
- package/src/wf-ui-server/workflow-node-types/agent-node.mjs +920 -0
- package/src/wf-ui-server/workflow-node-types/display-node.mjs +151 -0
- package/src/wf-ui-server/workflow-node-types/excalidraw-node.mjs +145 -0
- package/src/wf-ui-server/workflow-node-types/file-node.mjs +484 -0
- package/src/wf-ui-server/workflow-node-types/github-trigger-node.mjs +207 -0
- package/src/wf-ui-server/workflow-node-types/goal-node.mjs +491 -0
- package/src/wf-ui-server/workflow-node-types/markdown-node.mjs +225 -0
- package/src/wf-ui-server/workflow-node-types/mcp-connector-node.mjs +71 -0
- package/src/wf-ui-server/workflow-node-types/role-profile-store.mjs +191 -0
- package/src/wf-ui-server/workflow-node-types/skill-group-node.mjs +98 -0
- package/src/wf-ui-server/workflow-node-types/timer-node.mjs +607 -0
- package/src/wf-ui-server/workflow-ontology.mjs +681 -0
- package/src/wf-ui-server/workflow-operation-store.mjs +115 -0
- package/src/wf-ui-server/workflow-skills-hub.mjs +366 -0
- package/src/wf-ui-server/workflow-skills-market.mjs +723 -0
- package/src/wf-ui-server/workspace-store.mjs +951 -0
- package/src/wf-ui-server/ws-chat.mjs +299 -0
- package/src/wf-ui-server/ws-events.mjs +45 -20
- package/src/wf-ui-server/ws-terminal.mjs +165 -22
- package/src/wf-ui-server/ws-wf-browser.mjs +419 -0
- package/templates/common/.claude/agents/review-manager.md +33 -29
- package/templates/common/.claude/commands/wf-browser.md +1 -1
- package/templates/common/.claude/commands/wf-help.md +5 -3
- package/templates/common/.claude/commands/wf-init.md +44 -0
- package/templates/common/.claude/commands/wf-learn.md +34 -8
- package/templates/common/.claude/commands/wf-max.md +19 -9
- package/templates/common/.claude/commands/wf-review.md +3 -3
- package/templates/common/.claude/commands/wf-search.md +55 -0
- package/templates/common/.claude/commands/wf-task-archive.md +5 -4
- package/templates/common/.claude/commands/wf-task-list.md +6 -3
- package/templates/common/.claude/commands/wf-task-record.md +10 -2
- package/templates/common/.claude/commands/wf-ui.md +12 -5
- package/templates/common/.claude/commands/wf-update.md +4 -0
- package/templates/common/.claude/commands/wf.md +12 -1
- package/templates/common/.claude/rules/ecc/common.md +10 -1
- package/templates/common/.claude/skills/wf/SKILL.md +36 -0
- package/templates/common/.claude/skills/wf-browser/SKILL.md +427 -122
- package/templates/common/.claude/skills/wf-browser/references/BROWSER_CONTROL_PATTERNS.md +43 -0
- package/templates/common/.claude/skills/wf-init/SKILL.md +33 -0
- package/templates/common/.claude/skills/wf-learn/SKILL.md +106 -26
- package/templates/common/.claude/skills/wf-max/SKILL.md +45 -11
- package/templates/common/.claude/skills/wf-review/SKILL.md +26 -54
- package/templates/common/.claude/skills/wf-search/SKILL.md +122 -0
- package/templates/common/.claude/skills/wf-search/references/evidence-contract.md +77 -0
- package/templates/common/.claude/skills/wf-search/references/policies/compare.md +38 -0
- package/templates/common/.claude/skills/wf-search/references/policies/fact.md +39 -0
- package/templates/common/.claude/skills/wf-search/references/policies/troubleshoot.md +39 -0
- package/templates/common/.claude/skills/wf-search/references/policies/verify.md +44 -0
- package/templates/common/.claude/skills/wf-search/references/source-routing.md +40 -0
- package/templates/common/.claude/skills/wf-search/references/tool-adapters.md +38 -0
- package/templates/common/.claude/skills/wf-ui/SKILL.md +146 -12
- package/templates/common/.claude/skills/wf-update/SKILL.md +5 -1
- package/templates/common/.harness-version +188 -85
- package/templates/common/.opencode/agents/review-manager.md +31 -27
- package/templates/common/.opencode/commands/wf-browser.md +1 -1
- package/templates/common/.opencode/commands/wf-help.md +5 -3
- package/templates/common/.opencode/commands/wf-init.md +44 -0
- package/templates/common/.opencode/commands/wf-learn.md +34 -8
- package/templates/common/.opencode/commands/wf-max.md +19 -9
- package/templates/common/.opencode/commands/wf-review.md +3 -3
- package/templates/common/.opencode/commands/wf-search.md +55 -0
- package/templates/common/.opencode/commands/wf-task-archive.md +5 -7
- package/templates/common/.opencode/commands/wf-task-list.md +6 -6
- package/templates/common/.opencode/commands/wf-task-record.md +10 -5
- package/templates/common/.opencode/commands/wf-ui.md +12 -5
- package/templates/common/.opencode/commands/wf-update.md +4 -0
- package/templates/common/.opencode/commands/wf.md +12 -1
- package/templates/common/CLAUDE.md +61 -3
- package/templates/common/Harness/MEMORY.md +8 -5
- package/templates/common/Harness/README.md +14 -10
- package/templates/common/Harness/a2a/action-registry.json +4397 -0
- package/templates/common/Harness/a2a/role-graph.json +16 -3
- package/templates/common/Harness/a2a/skills/terminal-control.json +45 -1
- package/templates/common/Harness/a2a/skills/wf-ui-map.json +50 -0
- package/templates/common/Harness/a2a/skills/workflow-agent-node.json +143 -0
- package/templates/common/Harness/a2a/skills/workflow-context.json +95 -0
- package/templates/common/Harness/a2a/skills/workflow-diagram-node.json +60 -0
- package/templates/common/Harness/a2a/skills/workflow-display-node.json +69 -0
- package/templates/common/Harness/a2a/skills/workflow-file-node.json +92 -0
- package/templates/common/Harness/a2a/skills/workflow-goal-node.json +76 -0
- package/templates/common/Harness/a2a/skills/workflow-markdown-node.json +79 -0
- package/templates/common/Harness/a2a/skills/workflow-mcp-connector-node.json +59 -0
- package/templates/common/Harness/a2a/skills/workflow-node-actions.json +105 -0
- package/templates/common/Harness/a2a/skills/workflow-node-map.json +71 -0
- package/templates/common/Harness/a2a/skills/workflow-ontology.json +54 -0
- package/templates/common/Harness/a2a/skills/workflow-resource-node.json +68 -0
- package/templates/common/Harness/a2a/skills/workflow-skill-group-node.json +56 -0
- package/templates/common/Harness/a2a/skills/workflow-timer-node.json +81 -0
- package/templates/common/Harness/a2a/workflows.json +33 -0
- package/templates/common/Harness/ownership.manifest.json +263 -2
- package/templates/common/Harness/project/architecture.md +499 -0
- package/templates/common/Harness/research/README.md +20 -0
- package/templates/common/Harness/scripts/README.md +70 -6
- package/templates/common/Harness/scripts/a2a-terminal.mjs +12 -4
- package/templates/common/Harness/scripts/context-budget.mjs +7 -3
- package/templates/common/Harness/scripts/lib/memory-context.mjs +400 -0
- package/templates/common/Harness/scripts/lib/path-scope.mjs +77 -0
- package/templates/common/Harness/scripts/lib/research-policy.mjs +99 -0
- package/templates/common/Harness/scripts/lib/wf-search.mjs +189 -0
- package/templates/common/Harness/scripts/memory-context.mjs +63 -0
- package/templates/common/Harness/scripts/research-policy.mjs +27 -0
- package/templates/common/Harness/scripts/task-context.mjs +547 -0
- package/templates/common/Harness/scripts/task-group-index.mjs +242 -0
- package/templates/common/Harness/scripts/task-state.mjs +659 -95
- package/templates/common/Harness/scripts/validate-harness.mjs +70 -28
- package/templates/common/Harness/scripts/wf-auto-update-prompt.mjs +24 -0
- package/templates/common/Harness/scripts/wf-remove.mjs +10 -0
- package/templates/common/Harness/scripts/wf-search.mjs +10 -0
- package/templates/common/Harness/scripts/wf-ui-control.mjs +3144 -0
- package/templates/common/Harness/scripts/wf-update-check.mjs +274 -51
- package/templates/common/Harness/scripts/wf-update-runner.mjs +53 -16
- package/templates/common/Harness/settings.json +10 -0
- package/templates/common/Harness/specs/guides/SETUP.md +4 -3
- package/templates/common/Harness/specs/protocols/HARNESS_BRIDGE.md +429 -48
- package/templates/common/Harness/specs/protocols/MEMORY_PROTOCOL.md +24 -0
- package/templates/common/Harness/specs/protocols/TASK_ARCHIVE.md +14 -11
- package/templates/common/Harness/specs/runtime/command-surface.json +28 -0
- package/templates/common/Harness/specs/runtime/context-loading.md +6 -0
- package/templates/common/Harness/specs/runtime/dispatch.md +9 -1
- package/templates/common/Harness/specs/runtime/subagents.md +20 -5
- package/templates/common/Harness/specs/workflows/WF-AUTO-SPARK.md +19 -0
- package/templates/common/Harness/specs/workflows/WF-AUTO.md +21 -0
- package/templates/common/Harness/specs/workflows/WF-KERNEL.md +4 -2
- package/templates/common/Harness/specs/workflows/WF-MAX.md +39 -12
- package/templates/common/Harness/specs/workflows/WF-STATE.md +62 -14
- package/templates/common/Harness/specs/workflows/WF.md +32 -0
- package/templates/common/Harness/tasks/INDEX.json +7 -0
- package/templates/common/Harness/tasks/INDEX.md +12 -0
- package/templates/common/Harness/tasks/_template/PLAN.md +6 -0
- package/templates/common/Harness/tasks/_template/PROGRESS.md +5 -0
- package/templates/common/Harness/tasks/_template/STATE.json +22 -0
- package/templates/common/Harness/templates/TEST_PLAN.template.md +5 -4
- package/templates/common/Harness/templates/UI_CONTRACT.template.md +7 -5
- package/templates/common/Harness/wf-browser/README.md +69 -0
- package/templates/common/README.md +17 -0
- package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js +0 -17
- package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js.map +0 -1
- package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js +0 -7
- package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js.map +0 -1
- package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js +0 -12
- package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js.map +0 -1
- package/src/ui/dist/assets/TaskList-BN4r8s1i.js +0 -50
- package/src/ui/dist/assets/TaskList-BN4r8s1i.js.map +0 -1
- package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js +0 -74
- package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js.map +0 -1
- package/src/ui/dist/assets/WorkflowRoute-BnuhLJ6X.css +0 -1
- package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js +0 -39
- package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js.map +0 -1
- package/src/ui/dist/assets/index-BOVYWntB.js +0 -117
- package/src/ui/dist/assets/index-BOVYWntB.js.map +0 -1
- package/src/ui/dist/assets/index-DaUObq0H.css +0 -1
- package/src/ui/dist/assets/maximize-2-LNrr_rKr.js +0 -7
- package/src/ui/dist/assets/maximize-2-LNrr_rKr.js.map +0 -1
- package/src/ui/dist/assets/plus-QuTJyoT3.js +0 -7
- package/src/ui/dist/assets/plus-QuTJyoT3.js.map +0 -1
- package/src/ui/dist/assets/proxy-D0vUbds5.js.map +0 -1
- package/src/ui/dist/assets/refresh-cw-JNmExijd.js.map +0 -1
- package/src/ui/dist/assets/terminal-BBQvnOAK.js.map +0 -1
- package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js +0 -7
- package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js.map +0 -1
- package/src/ui/dist/assets/x-DoIOGAJz.js.map +0 -1
- package/src/ui/pnpm-lock.yaml +0 -1582
- package/src/ui/src/App.tsx +0 -86
- package/src/ui/src/api.ts +0 -93
- package/src/ui/src/components/AgentsRoute.tsx +0 -503
- package/src/ui/src/components/Footer.tsx +0 -69
- package/src/ui/src/components/Header.tsx +0 -175
- package/src/ui/src/components/LoadingView.tsx +0 -22
- package/src/ui/src/components/RolesRoute.tsx +0 -169
- package/src/ui/src/components/SettingsRoute.tsx +0 -166
- package/src/ui/src/components/TaskList.tsx +0 -388
- package/src/ui/src/components/TerminalDrawer.tsx +0 -611
- package/src/ui/src/components/WorkflowRoute.tsx +0 -670
- package/src/ui/src/hooks/useReducedMotion.ts +0 -17
- package/src/ui/src/hooks/useServerConnection.ts +0 -114
- package/src/ui/src/index.css +0 -281
- package/src/ui/src/main.tsx +0 -11
- package/src/ui/src/types.ts +0 -108
- /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
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
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
|
-
-
|
|
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
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
49
|
-
|
|
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
|
-
|
|
199
|
+
Every architecture contract must have a runtime proof path:
|
|
52
200
|
|
|
53
|
-
|
|
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/
|
|
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
|
|
60
|
-
| Rows/items | stable row/item test id
|
|
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
|
|
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. `
|
|
70
|
-
2.
|
|
71
|
-
3.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
```
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
##
|
|
271
|
+
## Observation Primitives
|
|
123
272
|
|
|
124
|
-
|
|
125
|
-
|
|
273
|
+
Use focused observations first; expand only when the first signal is
|
|
274
|
+
insufficient.
|
|
126
275
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
-
|
|
168
|
-
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
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.
|