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