agentic-qe 3.10.9 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/.claude/agents/v3/qe-learning-coordinator.md +1 -1
  2. package/.claude/skills/README.md +2 -2
  3. package/.claude/skills/agentic-quality-engineering/SKILL.md +6 -5
  4. package/.claude/skills/agentic-quality-engineering/schemas/output.json +7 -3
  5. package/.claude/skills/holistic-testing-pact/SKILL.md +50 -17
  6. package/.claude/skills/skills-manifest.json +6 -6
  7. package/.opencode/skills/qe-agentic-quality-engineering.yaml +5 -5
  8. package/.opencode/skills/qe-holistic-testing-pact.yaml +11 -11
  9. package/CHANGELOG.md +51 -0
  10. package/README.md +17 -0
  11. package/assets/agents/v3/qe-learning-coordinator.md +1 -1
  12. package/assets/skills/README.md +2 -2
  13. package/assets/skills/agentic-quality-engineering/SKILL.md +6 -5
  14. package/assets/skills/agentic-quality-engineering/schemas/output.json +7 -3
  15. package/assets/skills/holistic-testing-pact/SKILL.md +50 -17
  16. package/assets/skills/skills-manifest.json +6 -6
  17. package/dist/cli/bundle.js +5 -5
  18. package/dist/cli/chunks/adapter-WLFT5VMV.js +2 -0
  19. package/dist/cli/chunks/{agent-booster-wasm-RPAOJXZ3.js → agent-booster-wasm-5CSKQB4O.js} +2 -2
  20. package/dist/cli/chunks/{agent-handler-SMD5CAS6.js → agent-handler-EBV3OKTE.js} +2 -2
  21. package/dist/cli/chunks/{agent-memory-branch-3IOQIQ7Y.js → agent-memory-branch-RZ53YM2U.js} +2 -2
  22. package/dist/cli/chunks/aqe-learning-engine-JBH4GZUM.js +2 -0
  23. package/dist/cli/chunks/{arena-GT3D6EAO.js → arena-QWYTIQ6I.js} +2 -2
  24. package/dist/cli/chunks/{arena-AP2J62WO.js → arena-UCP74DRO.js} +4 -4
  25. package/dist/cli/chunks/{audit-Q3GJ5354.js → audit-M4FNIX47.js} +2 -2
  26. package/dist/cli/chunks/base-A7JGM473.js +2 -0
  27. package/dist/cli/chunks/{hnswlib-node-YTK7S7GL.js → better-sqlite3-RIBLRHJL.js} +2 -2
  28. package/dist/cli/chunks/{brain-handler-2Z4ILQF3.js → brain-handler-OY6Q2GY5.js} +3 -3
  29. package/dist/cli/chunks/{branch-enumerator-EZWGL4UM.js → branch-enumerator-TQWN4NIX.js} +2 -2
  30. package/dist/cli/chunks/{browser-YZELFPLJ.js → browser-2EH3RXJ2.js} +2 -2
  31. package/dist/cli/chunks/browser-workflow-TIDJWULK.js +2 -0
  32. package/dist/cli/chunks/{chunk-NOWGQ6YZ.js → chunk-2BBKA5J4.js} +1 -1
  33. package/dist/cli/chunks/{chunk-7PYEJ4NV.js → chunk-2QU6C3OS.js} +2 -2
  34. package/dist/cli/chunks/{chunk-MDED3HJI.js → chunk-2TUVBEWK.js} +2 -2
  35. package/dist/cli/chunks/{chunk-YB3PQ3UV.js → chunk-2WVLFT2I.js} +1 -1
  36. package/dist/cli/chunks/{chunk-OF3EMOWN.js → chunk-2ZC7S4UG.js} +2 -2
  37. package/dist/cli/chunks/{chunk-7S6D5K4X.js → chunk-3GWSHRDA.js} +2 -2
  38. package/dist/cli/chunks/{chunk-HQZX4XYH.js → chunk-3J6LYF6I.js} +2 -2
  39. package/dist/cli/chunks/{chunk-5HLOQEKL.js → chunk-3LP5GPGU.js} +1 -1
  40. package/dist/cli/chunks/{chunk-UUA2NVUN.js → chunk-453UDYD2.js} +229 -225
  41. package/dist/cli/chunks/{chunk-2I5QLMQF.js → chunk-4OTA6KYJ.js} +2 -2
  42. package/dist/cli/chunks/{chunk-CREORFJV.js → chunk-5ASPEVVF.js} +1 -1
  43. package/dist/cli/chunks/{chunk-DNE6MVNA.js → chunk-5DG6H553.js} +1 -1
  44. package/dist/cli/chunks/{chunk-UPGKS6Z3.js → chunk-5OJXVVTI.js} +2 -2
  45. package/dist/cli/chunks/{chunk-6TR3OM7C.js → chunk-6VQKNPGY.js} +2 -2
  46. package/dist/cli/chunks/{chunk-QFIKEZB5.js → chunk-72QNONO6.js} +2 -2
  47. package/dist/cli/chunks/{chunk-3HT4CT6F.js → chunk-73EWPVBJ.js} +2 -2
  48. package/dist/cli/chunks/{chunk-4MUZGQPE.js → chunk-7BD7DZCB.js} +2 -2
  49. package/dist/cli/chunks/{chunk-PYQZ4OA3.js → chunk-7E5NYLJT.js} +2 -2
  50. package/dist/cli/chunks/{chunk-YQBL5XTM.js → chunk-7MBF3S25.js} +1 -1
  51. package/dist/cli/chunks/{chunk-LHKQW72O.js → chunk-7PTA7AVW.js} +1 -1
  52. package/dist/cli/chunks/{chunk-G7V2HDTH.js → chunk-7Q6CMSMD.js} +3 -3
  53. package/dist/cli/chunks/{chunk-ABJPFKHE.js → chunk-ACV2WVMX.js} +1 -1
  54. package/dist/cli/chunks/{chunk-QL6ZJ7RV.js → chunk-AURDGQNB.js} +2 -2
  55. package/dist/cli/chunks/{chunk-O36VC7B7.js → chunk-AVKGDS6F.js} +2 -2
  56. package/dist/cli/chunks/{chunk-ZVF7QY4R.js → chunk-AYOTODUV.js} +1 -1
  57. package/dist/cli/chunks/{chunk-ILPIH4Z6.js → chunk-B4QA3YN6.js} +1 -1
  58. package/dist/cli/chunks/{chunk-5U5SEO7C.js → chunk-BA4WZIAQ.js} +2 -2
  59. package/dist/cli/chunks/{chunk-EL6F72JN.js → chunk-BEOGI5FC.js} +2 -2
  60. package/dist/cli/chunks/{chunk-OQUH7657.js → chunk-C33BMWYZ.js} +2 -2
  61. package/dist/cli/chunks/chunk-C4OYHUJV.js +2 -0
  62. package/dist/cli/chunks/{chunk-DK6WWNCL.js → chunk-CERSTEAJ.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XYRJL7YN.js → chunk-D3S4SRSA.js} +2 -2
  64. package/dist/cli/chunks/{chunk-57XCLC55.js → chunk-DCJIXDO6.js} +2 -2
  65. package/dist/cli/chunks/{chunk-Z6FRNWQA.js → chunk-DDQWW22L.js} +2 -2
  66. package/dist/cli/chunks/{chunk-5X73HV2P.js → chunk-DV7662EZ.js} +1 -1
  67. package/dist/cli/chunks/{chunk-QHPLU5BU.js → chunk-ETGEGMYS.js} +3 -3
  68. package/dist/cli/chunks/{chunk-TIR3Z6TE.js → chunk-ETZ62NFD.js} +1 -1
  69. package/dist/cli/chunks/{chunk-VHYNRISI.js → chunk-F62ZQZQQ.js} +2 -2
  70. package/dist/cli/chunks/{chunk-H4SHHYRD.js → chunk-F6Y7DTHR.js} +2 -2
  71. package/dist/cli/chunks/{chunk-L5IO7QNO.js → chunk-FGOVDO3R.js} +2 -2
  72. package/dist/cli/chunks/{chunk-62MH7QAQ.js → chunk-FMKALHT3.js} +2 -2
  73. package/dist/cli/chunks/{chunk-DZWZASDV.js → chunk-FMULOSBL.js} +1 -1
  74. package/dist/cli/chunks/{chunk-QL7OOCPO.js → chunk-FTOICJQG.js} +2 -2
  75. package/dist/cli/chunks/{chunk-I5C7O5IQ.js → chunk-G25YZ7Z6.js} +2 -2
  76. package/dist/cli/chunks/{chunk-WOGWIMQK.js → chunk-G5VE3HQW.js} +2 -2
  77. package/dist/cli/chunks/{chunk-EYGRNXQT.js → chunk-GBFAQ4DW.js} +1 -1
  78. package/dist/cli/chunks/{chunk-757YHKIJ.js → chunk-GGSXHGWD.js} +2 -2
  79. package/dist/cli/chunks/{chunk-VIHFC67B.js → chunk-HHSEIPSQ.js} +1 -1
  80. package/dist/cli/chunks/{chunk-42FBJF73.js → chunk-HJFQVKPI.js} +1 -1
  81. package/dist/cli/chunks/{chunk-6HPI6YX3.js → chunk-HMSPPGUF.js} +2 -2
  82. package/dist/cli/chunks/{chunk-RHOBDQXA.js → chunk-HNSZDIQU.js} +2 -2
  83. package/dist/cli/chunks/{chunk-4D3LVXUD.js → chunk-I2HQLBWG.js} +2 -2
  84. package/dist/cli/chunks/{chunk-X7677BX3.js → chunk-IFTEM672.js} +2 -2
  85. package/dist/cli/chunks/{chunk-NMQEU4BG.js → chunk-IHNBZ5XG.js} +2 -2
  86. package/dist/cli/chunks/{chunk-QHICG2NI.js → chunk-IKNDGXZZ.js} +2 -2
  87. package/dist/cli/chunks/{chunk-AHUX7QSE.js → chunk-IOQYSR5S.js} +2 -2
  88. package/dist/cli/chunks/{chunk-I7RTTJH5.js → chunk-IQSPL2H4.js} +2 -2
  89. package/dist/cli/chunks/{chunk-R2M3RMCN.js → chunk-ISVBO4XO.js} +2 -2
  90. package/dist/cli/chunks/{chunk-RSWQY4NZ.js → chunk-ITRUZ3WE.js} +2 -2
  91. package/dist/cli/chunks/{chunk-CWRSQQHV.js → chunk-J425SQFE.js} +2 -2
  92. package/dist/cli/chunks/{chunk-QWXJRZEH.js → chunk-JN3IQB4L.js} +1 -1
  93. package/dist/cli/chunks/{chunk-LT6QHDPK.js → chunk-JNX7IRSI.js} +2 -2
  94. package/dist/cli/chunks/{chunk-FD37QFXW.js → chunk-JQM64WJ2.js} +1 -1
  95. package/dist/cli/chunks/{chunk-HZSYCVLC.js → chunk-JQSA6EMI.js} +2 -2
  96. package/dist/cli/chunks/{chunk-BVEQPMOF.js → chunk-JZFA2PWY.js} +2 -2
  97. package/dist/cli/chunks/{chunk-AU4DQMLJ.js → chunk-KBVXKFDI.js} +4 -4
  98. package/dist/cli/chunks/{chunk-VDL277DX.js → chunk-KOOY72E3.js} +2 -2
  99. package/dist/cli/chunks/{chunk-NYBAH76S.js → chunk-KZE5UR4T.js} +3 -3
  100. package/dist/cli/chunks/{chunk-TOGD2JH2.js → chunk-L7GQKJLV.js} +2 -2
  101. package/dist/cli/chunks/{chunk-XEMP2PNW.js → chunk-LCDRRAES.js} +2 -2
  102. package/dist/cli/chunks/{chunk-VHCHBMZC.js → chunk-LFT7WYHW.js} +2 -2
  103. package/dist/cli/chunks/{chunk-C6JULAWA.js → chunk-LTH6XARD.js} +5 -5
  104. package/dist/cli/chunks/{chunk-UJBIHPU5.js → chunk-LYV7WJWA.js} +1 -1
  105. package/dist/cli/chunks/{chunk-RRSJ7BMF.js → chunk-MDYI4IIW.js} +1 -1
  106. package/dist/cli/chunks/{chunk-3YKJGKOY.js → chunk-MKLLB4PM.js} +4 -4
  107. package/dist/cli/chunks/{chunk-JZNMU63B.js → chunk-MTSMFEWK.js} +2 -2
  108. package/dist/cli/chunks/{chunk-WWGGL3TR.js → chunk-N3R3JGUY.js} +1 -1
  109. package/dist/cli/chunks/{chunk-BG2FN5K2.js → chunk-N52ZBTPM.js} +2 -2
  110. package/dist/cli/chunks/{chunk-CLSHSVMY.js → chunk-N7MKF4F4.js} +1 -1
  111. package/dist/cli/chunks/{chunk-UU7OCRZM.js → chunk-NBTKI2TX.js} +2 -2
  112. package/dist/cli/chunks/{chunk-NLUWPS2H.js → chunk-NI7O3GKZ.js} +3 -3
  113. package/dist/cli/chunks/{chunk-CLJNAQXB.js → chunk-NQD4CMXC.js} +2 -2
  114. package/dist/cli/chunks/{chunk-FALB6Z2Y.js → chunk-O6FN53HB.js} +1 -1
  115. package/dist/cli/chunks/{chunk-PFGH7TWL.js → chunk-OZQIDDXB.js} +2 -2
  116. package/dist/cli/chunks/{chunk-TKZABUHO.js → chunk-P3NV6KN3.js} +1 -1
  117. package/dist/cli/chunks/{chunk-S73EBPI5.js → chunk-PC3VIR2A.js} +3 -3
  118. package/dist/cli/chunks/{chunk-GPALZJD3.js → chunk-PJ4HSXH3.js} +1 -1
  119. package/dist/cli/chunks/{chunk-XLK4GP3I.js → chunk-PUTRXS5I.js} +2 -2
  120. package/dist/cli/chunks/{chunk-HAC7NB6R.js → chunk-PVBJUANU.js} +2 -2
  121. package/dist/cli/chunks/{chunk-BYVARYGB.js → chunk-QCJ7YOVN.js} +2 -2
  122. package/dist/cli/chunks/{chunk-CVRTXIYP.js → chunk-QGBXENIP.js} +1 -1
  123. package/dist/cli/chunks/{chunk-L5NEEGKO.js → chunk-QYXTESM3.js} +2 -2
  124. package/dist/cli/chunks/{chunk-KJA5A3TV.js → chunk-QZQGYSDG.js} +2 -2
  125. package/dist/cli/chunks/{chunk-7C5HI4ZA.js → chunk-R3YO3Z7I.js} +4 -4
  126. package/dist/cli/chunks/{chunk-352W5G4G.js → chunk-R7FHQQAV.js} +2 -2
  127. package/dist/cli/chunks/{chunk-4BB75U6N.js → chunk-RKDNLPZM.js} +2 -2
  128. package/dist/cli/chunks/{chunk-J6GKKXCP.js → chunk-RPYYS6BX.js} +2 -2
  129. package/dist/cli/chunks/{chunk-OSP5AJAB.js → chunk-RVQW6CBF.js} +2 -2
  130. package/dist/cli/chunks/{chunk-U6TZVACK.js → chunk-SHW43QQV.js} +2 -2
  131. package/dist/cli/chunks/{chunk-D2JCSWYM.js → chunk-SKL225P5.js} +2 -2
  132. package/dist/cli/chunks/{chunk-2WRVNEIR.js → chunk-SLWJNHCR.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CDJIYJIA.js → chunk-SQPDGRYR.js} +1 -1
  134. package/dist/cli/chunks/{chunk-ZT2DGSIO.js → chunk-T6KT63NC.js} +2 -2
  135. package/dist/cli/chunks/{chunk-K23XK33X.js → chunk-TGLEREP5.js} +2 -2
  136. package/dist/cli/chunks/{chunk-7D5JE46U.js → chunk-TYS77XHV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-H7AQ7M3J.js → chunk-UEH6C5JA.js} +1 -1
  138. package/dist/cli/chunks/{chunk-IR7PJUO7.js → chunk-UFMW25MS.js} +2 -2
  139. package/dist/cli/chunks/{chunk-TXWUV3S5.js → chunk-V6WJVFRN.js} +2 -2
  140. package/dist/cli/chunks/{chunk-KAMFT25W.js → chunk-VGYUVMSN.js} +2 -2
  141. package/dist/cli/chunks/{chunk-TVU6NMO3.js → chunk-VHON5NDM.js} +3 -3
  142. package/dist/cli/chunks/{chunk-2K2X75UF.js → chunk-VVJXQ4FR.js} +2 -2
  143. package/dist/cli/chunks/{chunk-G4KVGUQN.js → chunk-WBQEOACC.js} +2 -2
  144. package/dist/cli/chunks/{chunk-UX4UHYLE.js → chunk-WP6XUSVW.js} +1 -1
  145. package/dist/cli/chunks/{chunk-2WSEJHFQ.js → chunk-X2L4POJE.js} +1 -1
  146. package/dist/cli/chunks/{chunk-WPBVLIWQ.js → chunk-X2TUDGFL.js} +18 -18
  147. package/dist/cli/chunks/{chunk-OD4OIPXO.js → chunk-XKRG2U3V.js} +1 -1
  148. package/dist/cli/chunks/{chunk-X6YUGKMM.js → chunk-XMZ2DHUL.js} +1 -1
  149. package/dist/cli/chunks/{chunk-BSMUT672.js → chunk-XSG4XKGO.js} +2 -2
  150. package/dist/cli/chunks/{chunk-C6GQIUKW.js → chunk-XVQUVCFR.js} +2 -2
  151. package/dist/cli/chunks/{chunk-BM52ZEAD.js → chunk-XW5OXBVV.js} +2 -2
  152. package/dist/cli/chunks/{chunk-246Z3PH6.js → chunk-Y7TBCHW4.js} +2 -2
  153. package/dist/cli/chunks/{chunk-QE3CZGAC.js → chunk-Y7UJC5OL.js} +3 -3
  154. package/dist/cli/chunks/{chunk-KRAWWBX5.js → chunk-YQIMO7VJ.js} +2 -2
  155. package/dist/cli/chunks/{chunk-4EJTE5TL.js → chunk-YR44KQUK.js} +1 -1
  156. package/dist/cli/chunks/{chunk-YHFCLJMY.js → chunk-YRP73HO4.js} +1 -1
  157. package/dist/cli/chunks/{chunk-QAP5S7YC.js → chunk-YSTWLDVD.js} +3 -3
  158. package/dist/cli/chunks/{chunk-HGKZOSAI.js → chunk-Z45QDDZQ.js} +1 -1
  159. package/dist/cli/chunks/{chunk-OIN3Y4BY.js → chunk-ZEUUVLS2.js} +1 -1
  160. package/dist/cli/chunks/{chunk-7NT34MLU.js → chunk-ZFP3O5FM.js} +1 -1
  161. package/dist/cli/chunks/{chunk-ABVBHH7P.js → chunk-ZK56THZT.js} +3 -3
  162. package/dist/cli/chunks/{chunk-D7NWDUY3.js → chunk-ZT4NPTML.js} +2 -2
  163. package/dist/cli/chunks/{ci-KDEFR2X3.js → ci-4JK2NFCD.js} +2 -2
  164. package/dist/cli/chunks/{ci-output-Z3WXRRFI.js → ci-output-LCGTJQWC.js} +2 -2
  165. package/dist/cli/chunks/{circuit-breaker-GS44DEW2.js → circuit-breaker-EJF7D3L4.js} +2 -2
  166. package/dist/cli/chunks/{claude-flow-setup-OHVMHAAH.js → claude-flow-setup-3RUC6OB4.js} +2 -2
  167. package/dist/cli/chunks/client-ZLJ3JMBC.js +2 -0
  168. package/dist/cli/chunks/{cline-installer-5TCF4MZD.js → cline-installer-6LY5C5QH.js} +2 -2
  169. package/dist/cli/chunks/{code-3KCGTG7Z.js → code-MPDG4UHS.js} +2 -2
  170. package/dist/cli/chunks/{code-index-extractor-LJBI54MZ.js → code-index-extractor-OY5GQJBM.js} +2 -2
  171. package/dist/cli/chunks/{codex-installer-IB62Z6LA.js → codex-installer-BO7E2ZVA.js} +2 -2
  172. package/dist/cli/chunks/{completions-JDXX7KKB.js → completions-VGL3KJ2R.js} +2 -2
  173. package/dist/cli/chunks/{complexity-analyzer-6JVDXXXP.js → complexity-analyzer-5DPUK7IL.js} +2 -2
  174. package/dist/cli/chunks/{continuedev-installer-PUB45QVR.js → continuedev-installer-LFDG2D42.js} +2 -2
  175. package/dist/cli/chunks/{copilot-installer-QWJ36P22.js → copilot-installer-SEMMMIZH.js} +2 -2
  176. package/dist/cli/chunks/core-handlers-EM7FUYTI.js +2 -0
  177. package/dist/cli/chunks/{cost-tracker-J3KEJDL5.js → cost-tracker-OPBC6FQM.js} +2 -2
  178. package/dist/cli/chunks/{coverage-FWKRI2EY.js → coverage-CFDUSRKU.js} +3 -3
  179. package/dist/cli/chunks/cross-domain-router-DYGHQ6P5.js +2 -0
  180. package/dist/cli/chunks/{cursor-installer-2HYCUCTH.js → cursor-installer-6TXUUVY4.js} +2 -2
  181. package/dist/cli/chunks/{daemon-BVP66DIZ.js → daemon-5KO46YQR.js} +4 -4
  182. package/dist/cli/chunks/{daemon-G3DBRWDQ.js → daemon-7BDBPPAF.js} +3 -3
  183. package/dist/cli/chunks/{dag-attention-scheduler-2AQLNB4B.js → dag-attention-scheduler-6DQKZOUW.js} +2 -2
  184. package/dist/cli/chunks/{detect-RUM5SHNE.js → detect-R2QAYDPI.js} +2 -2
  185. package/dist/cli/chunks/{dist-node-GX7MJHFT.js → dist-node-3POCIJ4N.js} +2 -2
  186. package/dist/cli/chunks/{domain-handler-OFBGZ2U5.js → domain-handler-KW63CHUH.js} +2 -2
  187. package/dist/cli/chunks/{domain-transfer-6CGRPRGR.js → domain-transfer-2QPOJCUD.js} +2 -2
  188. package/dist/cli/chunks/dream-DBE5D5BD.js +2 -0
  189. package/dist/cli/chunks/{embed-and-insert-pattern-MUOEVQX2.js → embed-and-insert-pattern-OIDJZQEP.js} +2 -2
  190. package/dist/cli/chunks/{eval-SJMG67DE.js → eval-UGEKTTAQ.js} +2 -2
  191. package/dist/cli/chunks/{experience-capture-middleware-ICKN6IXX.js → experience-capture-middleware-3BIM2TT7.js} +3 -3
  192. package/dist/cli/chunks/{fast-paths-HXLBG3J4.js → fast-paths-HCJQXB7W.js} +2 -2
  193. package/dist/cli/chunks/{feature-flags-CRUB2ASU.js → feature-flags-GDGJKLN4.js} +2 -2
  194. package/dist/cli/chunks/{feature-flags-JYZSSQJC.js → feature-flags-W4JSFBMV.js} +2 -2
  195. package/dist/cli/chunks/{file-discovery-YHHC7NTJ.js → file-discovery-JMUZ4MUH.js} +2 -2
  196. package/dist/cli/chunks/{fleet-2VGDL4YL.js → fleet-YNNK2CKW.js} +3 -3
  197. package/dist/cli/chunks/{gnn-wrapper-7ZAGD4S4.js → gnn-wrapper-R2ZY6CDD.js} +2 -2
  198. package/dist/cli/chunks/{heartbeat-handler-HAW3JRHN.js → heartbeat-handler-OZX2EJHQ.js} +4 -4
  199. package/dist/cli/chunks/heartbeat-scheduler-NFHAANNL.js +2 -0
  200. package/dist/cli/chunks/hnsw-adapter-HMPCZFBY.js +2 -0
  201. package/dist/cli/chunks/hnsw-index-KRIWSXX4.js +2 -0
  202. package/dist/cli/chunks/{hnsw-legacy-bridge-BO325POX.js → hnsw-legacy-bridge-3S6TYCG3.js} +2 -2
  203. package/dist/cli/chunks/{better-sqlite3-6A6EAXAT.js → hnswlib-node-HMZC5TXM.js} +2 -2
  204. package/dist/cli/chunks/{hooks-HKM3JTFQ.js → hooks-KM7WR35T.js} +10 -10
  205. package/dist/cli/chunks/hybrid-router-BAB32B2W.js +2 -0
  206. package/dist/cli/chunks/{hypergraph-engine-LGLGHK6B.js → hypergraph-engine-RX53A73M.js} +2 -2
  207. package/dist/cli/chunks/{hypergraph-handler-6QDVREZA.js → hypergraph-handler-3QQB3H3Z.js} +3 -3
  208. package/dist/cli/chunks/impact-analyzer-3D6XHWQE.js +2 -0
  209. package/dist/cli/chunks/{init-handler-XUQ7XHIE.js → init-handler-Y62RH4ZI.js} +6 -6
  210. package/dist/cli/chunks/init-wizard-LLU3WVGC.js +2 -0
  211. package/dist/cli/chunks/kernel-ZFHAYHHJ.js +2 -0
  212. package/dist/cli/chunks/{kilocode-installer-6CEZLVIX.js → kilocode-installer-26R253L2.js} +2 -2
  213. package/dist/cli/chunks/{kiro-installer-6CJGATOS.js → kiro-installer-PFA5QPZZ.js} +2 -2
  214. package/dist/cli/chunks/knowledge-graph-ETZ65KOY.js +2 -0
  215. package/dist/cli/chunks/{learning-EIYTYZJY.js → learning-CQLM5ANX.js} +3 -3
  216. package/dist/cli/chunks/{llm-router-J4CI7VHU.js → llm-router-QZ5PG4PF.js} +4 -4
  217. package/dist/cli/chunks/llm-router-service-R6CTGF5I.js +2 -0
  218. package/dist/cli/chunks/{load-CQPWGLQQ.js → load-UPA6LPHM.js} +2 -2
  219. package/dist/cli/chunks/load-test-UOWIJUCH.js +2 -0
  220. package/dist/cli/chunks/{mcp-THOATWCO.js → mcp-LSWTLAJ4.js} +2 -2
  221. package/dist/cli/chunks/{memory-NZHMHMRK.js → memory-VGEYYGCG.js} +5 -5
  222. package/dist/cli/chunks/memory-backend-E3ZQKW7A.js +2 -0
  223. package/dist/cli/chunks/{memory-handlers-L2J54AQE.js → memory-handlers-QBURG7NA.js} +2 -2
  224. package/dist/cli/chunks/{multi-model-executor-3P5E773H.js → multi-model-executor-VZVFBIKC.js} +2 -2
  225. package/dist/cli/chunks/{opencode-installer-IRZMKSNG.js → opencode-installer-PBQAXNLV.js} +2 -2
  226. package/dist/cli/chunks/{orchestrator-UADLXTKP.js → orchestrator-YND7JB5O.js} +5 -5
  227. package/dist/cli/chunks/pattern-null-store-OUOJO2RH.js +2 -0
  228. package/dist/cli/chunks/{pipeline-QEH3XHXJ.js → pipeline-GM5RRUES.js} +2 -2
  229. package/dist/cli/chunks/{platform-NEZ3NXLT.js → platform-L7OGGRSL.js} +2 -2
  230. package/dist/cli/chunks/{plugin-O33HR2VO.js → plugin-N4YAE6H5.js} +2 -2
  231. package/dist/cli/chunks/{prime-radiant-advanced-wasm-MBUMFEX7.js → prime-radiant-advanced-wasm-7D67XV6Z.js} +2 -2
  232. package/dist/cli/chunks/protocol-executor-KHAPG5CP.js +2 -0
  233. package/dist/cli/chunks/{protocol-handler-L455UOUT.js → protocol-handler-V2WTFU7N.js} +2 -2
  234. package/dist/cli/chunks/{prove-3XA3SMAA.js → prove-33DS5Z3N.js} +2 -2
  235. package/dist/cli/chunks/provider-manager-FGPPW7T4.js +2 -0
  236. package/dist/cli/chunks/qe-reasoning-bank-TS7XOJDA.js +2 -0
  237. package/dist/cli/chunks/{quality-H6Z5JH5B.js → quality-WCSEA5GH.js} +2 -2
  238. package/dist/cli/chunks/queen-coordinator-J35FNFQ3.js +2 -0
  239. package/dist/cli/chunks/{real-embeddings-5DNJ4KEM.js → real-embeddings-OQ5F37DG.js} +2 -2
  240. package/dist/cli/chunks/{roocode-installer-KHXKR2FK.js → roocode-installer-II7LIR2X.js} +2 -2
  241. package/dist/cli/chunks/router-AFTKPDI5.js +2 -0
  242. package/dist/cli/chunks/routing-feedback-SABZUJTF.js +2 -0
  243. package/dist/cli/chunks/{routing-handler-WAMGESEM.js → routing-handler-6OFHARIY.js} +2 -2
  244. package/dist/cli/chunks/{ruvector-commands-4J7XC6XY.js → ruvector-commands-GD5JTR4M.js} +2 -2
  245. package/dist/cli/chunks/{rvf-dual-writer-3PZEN6XN.js → rvf-dual-writer-HSK6BYZV.js} +2 -2
  246. package/dist/cli/chunks/{rvf-migration-adapter-OIUNRQSU.js → rvf-migration-adapter-554SMF5S.js} +2 -2
  247. package/dist/cli/chunks/{rvf-migration-coordinator-QZXDI4I5.js → rvf-migration-coordinator-OFDBCAYE.js} +2 -2
  248. package/dist/cli/chunks/rvf-native-adapter-57MDDSFQ.js +2 -0
  249. package/dist/cli/chunks/safe-db-2HR6MVYM.js +2 -0
  250. package/dist/cli/chunks/schedule-KLVAN6XI.js +2 -0
  251. package/dist/cli/chunks/scheduler-WYZ6BC5Y.js +2 -0
  252. package/dist/cli/chunks/{security-5NY77AMD.js → security-GN4J6DSS.js} +3 -3
  253. package/dist/cli/chunks/{shared-rvf-adapter-MHPUZIMW.js → shared-rvf-adapter-Q4PM3QCN.js} +2 -2
  254. package/dist/cli/chunks/{shared-rvf-dual-writer-ITLDYHCX.js → shared-rvf-dual-writer-R5WK5BXQ.js} +2 -2
  255. package/dist/cli/chunks/sqlite-persistence-2CGU5INO.js +2 -0
  256. package/dist/cli/chunks/{status-handler-7RBRIXZD.js → status-handler-AHS5WVMG.js} +2 -2
  257. package/dist/cli/chunks/{structural-health-MQPY6GA6.js → structural-health-5KUKNLHZ.js} +2 -2
  258. package/dist/cli/chunks/{sync-66KCEANE.js → sync-PUMM3SR6.js} +2 -2
  259. package/dist/cli/chunks/{sync-USVQTHKN.js → sync-TQLGD5HX.js} +2 -2
  260. package/dist/cli/chunks/{task-handler-4UI4FPPW.js → task-handler-D7VXV4AF.js} +2 -2
  261. package/dist/cli/chunks/{task-handlers-KRII3GVV.js → task-handlers-QMN4SWUG.js} +3 -3
  262. package/dist/cli/chunks/{test-JHN2MVEG.js → test-HEWZR6YQ.js} +4 -4
  263. package/dist/cli/chunks/{test-scheduling-ZWTEGS3S.js → test-scheduling-VTMLBEPA.js} +3 -3
  264. package/dist/cli/chunks/{token-bootstrap-YWXL6AS5.js → token-bootstrap-IYBG7PQ6.js} +2 -2
  265. package/dist/cli/chunks/{token-usage-INII2XM3.js → token-usage-C7H27BFZ.js} +2 -2
  266. package/dist/cli/chunks/{transformers-DVFGDNZC.js → transformers-5ZJVC6NB.js} +2 -2
  267. package/dist/cli/chunks/{tree-sitter-wasm-parser-W2XJT3XF.js → tree-sitter-wasm-parser-EARBJG2H.js} +2 -2
  268. package/dist/cli/chunks/{types-GBZ5Q2GP.js → types-3IHE42PZ.js} +2 -2
  269. package/dist/cli/chunks/unified-memory-PMYRQC5K.js +2 -0
  270. package/dist/cli/chunks/unified-memory-hnsw-7TRL2K5Q.js +2 -0
  271. package/dist/cli/chunks/unified-persistence-S4BNJK4S.js +2 -0
  272. package/dist/cli/chunks/{upgrade-2JEXEGQX.js → upgrade-YP3VFSXO.js} +2 -2
  273. package/dist/cli/chunks/{validate-GDCM5YTS.js → validate-VSBNKPN6.js} +2 -2
  274. package/dist/cli/chunks/{validate-swarm-QZ5RSJEU.js → validate-swarm-GOCJVWXE.js} +2 -2
  275. package/dist/cli/chunks/{vibium-I5BMT734.js → vibium-U6YKCLDF.js} +2 -2
  276. package/dist/cli/chunks/visual-security-RPMZ3J7L.js +2 -0
  277. package/dist/cli/chunks/{web-tree-sitter-3QY2LMLP.js → web-tree-sitter-TSNVGWSN.js} +2 -2
  278. package/dist/cli/chunks/{windsurf-installer-V7OBPLOB.js → windsurf-installer-2VKMEFSD.js} +2 -2
  279. package/dist/cli/chunks/witness-chain-BTDZSQ6P.js +2 -0
  280. package/dist/cli/chunks/{witness-chain-BNJ4VSZX.js → witness-chain-BWZCW52H.js} +2 -2
  281. package/dist/cli/chunks/{workflow-3FJSNLPI.js → workflow-J6SCYLU3.js} +4 -4
  282. package/dist/cli/chunks/workflow-orchestrator-42B62D3V.js +2 -0
  283. package/dist/cli/chunks/{wrappers-ERTQNIPK.js → wrappers-M5C7DONW.js} +2 -2
  284. package/dist/domains/test-generation/coordinator.d.ts +24 -1
  285. package/dist/domains/test-generation/coordinator.js +137 -2
  286. package/dist/domains/test-generation/plugin.js +23 -1
  287. package/dist/integrations/darwin/index.d.ts +10 -0
  288. package/dist/integrations/darwin/index.js +2 -0
  289. package/dist/integrations/darwin/qe-fitness.d.ts +83 -0
  290. package/dist/integrations/darwin/qe-fitness.js +147 -0
  291. package/dist/integrations/darwin/types.d.ts +62 -0
  292. package/dist/integrations/darwin/types.js +14 -0
  293. package/dist/mcp/bundle.js +375 -371
  294. package/dist/routing/escalation/auto-escalation-tracker.d.ts +34 -15
  295. package/dist/routing/escalation/auto-escalation-tracker.js +24 -15
  296. package/dist/routing/free-tier/executor.d.ts +119 -0
  297. package/dist/routing/free-tier/executor.js +139 -0
  298. package/dist/routing/free-tier/feedback-sink.d.ts +49 -0
  299. package/dist/routing/free-tier/feedback-sink.js +52 -0
  300. package/dist/routing/free-tier/index.d.ts +14 -0
  301. package/dist/routing/free-tier/index.js +5 -0
  302. package/dist/routing/free-tier/ladder.d.ts +41 -0
  303. package/dist/routing/free-tier/ladder.js +78 -0
  304. package/dist/routing/free-tier/provider.d.ts +57 -0
  305. package/dist/routing/free-tier/provider.js +111 -0
  306. package/dist/routing/free-tier/types.d.ts +80 -0
  307. package/dist/routing/free-tier/types.js +16 -0
  308. package/package.json +5 -1
  309. package/dist/cli/chunks/adapter-TRSV37EA.js +0 -2
  310. package/dist/cli/chunks/aqe-learning-engine-CVJRJOSO.js +0 -2
  311. package/dist/cli/chunks/base-BX4A2D4V.js +0 -2
  312. package/dist/cli/chunks/browser-workflow-O3RL7EYT.js +0 -2
  313. package/dist/cli/chunks/chunk-OPKEQYAC.js +0 -2
  314. package/dist/cli/chunks/client-T263ZXVV.js +0 -2
  315. package/dist/cli/chunks/core-handlers-ODKKGCFK.js +0 -2
  316. package/dist/cli/chunks/cross-domain-router-APU725GC.js +0 -2
  317. package/dist/cli/chunks/dream-PJ5GKY3J.js +0 -2
  318. package/dist/cli/chunks/heartbeat-scheduler-4ZHUIW3Q.js +0 -2
  319. package/dist/cli/chunks/hnsw-adapter-UVJJ6TTP.js +0 -2
  320. package/dist/cli/chunks/hnsw-index-K6HS34JZ.js +0 -2
  321. package/dist/cli/chunks/hybrid-router-25S7OH2Y.js +0 -2
  322. package/dist/cli/chunks/impact-analyzer-UP4RDMJH.js +0 -2
  323. package/dist/cli/chunks/init-wizard-2PAJ3GEC.js +0 -2
  324. package/dist/cli/chunks/kernel-7WOQGMMT.js +0 -2
  325. package/dist/cli/chunks/knowledge-graph-FN2AWHGR.js +0 -2
  326. package/dist/cli/chunks/llm-router-service-C3UPBAS3.js +0 -2
  327. package/dist/cli/chunks/load-test-PQSGLDXJ.js +0 -2
  328. package/dist/cli/chunks/memory-backend-6FR4RT5O.js +0 -2
  329. package/dist/cli/chunks/pattern-null-store-B2UX4NZY.js +0 -2
  330. package/dist/cli/chunks/protocol-executor-OQ6SL7SR.js +0 -2
  331. package/dist/cli/chunks/provider-manager-DQWHW2RG.js +0 -2
  332. package/dist/cli/chunks/qe-reasoning-bank-3JS2CZAE.js +0 -2
  333. package/dist/cli/chunks/queen-coordinator-KXCWEM3Y.js +0 -2
  334. package/dist/cli/chunks/router-OVLIKT55.js +0 -2
  335. package/dist/cli/chunks/routing-feedback-2BYCXNXX.js +0 -2
  336. package/dist/cli/chunks/rvf-native-adapter-YNUYOQ5C.js +0 -2
  337. package/dist/cli/chunks/safe-db-6TYYEU7C.js +0 -2
  338. package/dist/cli/chunks/schedule-XVH7RTVY.js +0 -2
  339. package/dist/cli/chunks/scheduler-DHZBN5HA.js +0 -2
  340. package/dist/cli/chunks/sqlite-persistence-NR5WXTPN.js +0 -2
  341. package/dist/cli/chunks/unified-memory-WJEZ5YAK.js +0 -2
  342. package/dist/cli/chunks/unified-memory-hnsw-6ZA2PMYO.js +0 -2
  343. package/dist/cli/chunks/unified-persistence-SWH6R7MA.js +0 -2
  344. package/dist/cli/chunks/visual-security-PH5JQZCZ.js +0 -2
  345. package/dist/cli/chunks/witness-chain-WYMBNGSL.js +0 -2
  346. package/dist/cli/chunks/workflow-orchestrator-56JIXCI4.js +0 -2
@@ -0,0 +1,2 @@
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.11.0");process.exit(0)}
2
+ import{a,b,c,d}from"./chunk-I2HQLBWG.js";import"./chunk-RPYYS6BX.js";import"./chunk-QYXTESM3.js";import"./chunk-L7GQKJLV.js";import"./chunk-C4OYHUJV.js";import"./chunk-F62ZQZQQ.js";import"./chunk-T6KT63NC.js";import"./chunk-Y7TBCHW4.js";import"./chunk-RVQW6CBF.js";import"./chunk-XMZ2DHUL.js";import"./chunk-BA4WZIAQ.js";import"./chunk-JN3IQB4L.js";import"./chunk-ZT4NPTML.js";import"./chunk-FGOVDO3R.js";import"./chunk-RKDNLPZM.js";import"./chunk-G5VE3HQW.js";import"./chunk-LCDRRAES.js";import"./chunk-XVQUVCFR.js";import"./chunk-J425SQFE.js";import"./chunk-73EWPVBJ.js";import"./chunk-YQIMO7VJ.js";import"./chunk-ACV2WVMX.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
@@ -1,2 +1,2 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.9");process.exit(0)}
2
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-JZNMU63B.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-KJA5A3TV.js";import"./chunk-L5NEEGKO.js";import"./chunk-TOGD2JH2.js";import"./chunk-OPKEQYAC.js";import"./chunk-VHYNRISI.js";import"./chunk-ZT2DGSIO.js";import"./chunk-246Z3PH6.js";import"./chunk-OSP5AJAB.js";import"./chunk-5U5SEO7C.js";import"./chunk-D7NWDUY3.js";import"./chunk-L5IO7QNO.js";import"./chunk-4BB75U6N.js";import"./chunk-WOGWIMQK.js";import"./chunk-XEMP2PNW.js";import"./chunk-C6GQIUKW.js";import"./chunk-CWRSQQHV.js";import"./chunk-3HT4CT6F.js";import"./chunk-KRAWWBX5.js";import"./chunk-ABJPFKHE.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.11.0");process.exit(0)}
2
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-MTSMFEWK.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-QZQGYSDG.js";import"./chunk-QYXTESM3.js";import"./chunk-L7GQKJLV.js";import"./chunk-C4OYHUJV.js";import"./chunk-F62ZQZQQ.js";import"./chunk-T6KT63NC.js";import"./chunk-Y7TBCHW4.js";import"./chunk-RVQW6CBF.js";import"./chunk-BA4WZIAQ.js";import"./chunk-ZT4NPTML.js";import"./chunk-FGOVDO3R.js";import"./chunk-RKDNLPZM.js";import"./chunk-G5VE3HQW.js";import"./chunk-LCDRRAES.js";import"./chunk-XVQUVCFR.js";import"./chunk-J425SQFE.js";import"./chunk-73EWPVBJ.js";import"./chunk-YQIMO7VJ.js";import"./chunk-ACV2WVMX.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
@@ -8,6 +8,7 @@
8
8
  * - DecisionTransformer for test case selection
9
9
  */
10
10
  import { Result } from '../../shared/types';
11
+ import { type RoutingFeedbackLike } from '../../routing/free-tier/index.js';
11
12
  import { EventBus, MemoryBackend, AgentCoordinator } from '../../kernel/interfaces';
12
13
  import type { HybridRouter } from '../../shared/llm/router/hybrid-router.js';
13
14
  import { GenerateTestsRequest, GeneratedTests, TDDRequest, TDDResult, PropertyTestRequest, PropertyTests, TestDataRequest, TestData, LearnPatternsRequest, LearnedPatterns, TestGenerationAPI } from './interfaces';
@@ -61,6 +62,16 @@ export interface CoordinatorConfig extends BaseDomainCoordinatorConfig {
61
62
  blockOnIncoherentRequirements: boolean;
62
63
  enrichOnRetrievalLane: boolean;
63
64
  consensusConfig?: Partial<ConsensusEnabledConfig>;
65
+ /**
66
+ * Opt-in (plan 06, D7-wire): try a FREE local model first for test generation,
67
+ * with a same-tier repair loop (D8), before the normal LLM path. OFF by default
68
+ * — also enables via env `AQE_FREE_TIER=1`. Local-only / no paid escalation yet.
69
+ */
70
+ enableFreeTier?: boolean;
71
+ /** Local model id for the free tier (default 'qwen3:8b' or env AQE_FREE_TIER_MODEL). */
72
+ freeTierModel?: string;
73
+ /** Same-tier repair retries on a failed free-tier generation (D8). Default 1. */
74
+ freeTierRepairAttempts?: number;
64
75
  }
65
76
  type TestGenWorkflowType = 'generate' | 'tdd' | 'property' | 'data' | 'learn';
66
77
  export declare class TestGenerationCoordinator extends BaseDomainCoordinator<CoordinatorConfig, TestGenWorkflowType> implements ITestGenerationCoordinator {
@@ -70,13 +81,17 @@ export declare class TestGenerationCoordinator extends BaseDomainCoordinator<Coo
70
81
  private readonly hookRegistry?;
71
82
  private readonly testGenerator;
72
83
  private readonly patternMatcher;
84
+ /** Opt-in free-tier local executor (null unless enabled). */
85
+ private freeTierExecutor;
73
86
  private qesona;
74
87
  private flashAttention;
75
88
  private decisionTransformer;
76
89
  private testEmbeddings;
77
90
  private recentDreamInsights;
78
91
  private coherenceGate;
79
- constructor(eventBus: EventBus, memory: MemoryBackend, agentCoordinator: AgentCoordinator, config?: Partial<CoordinatorConfig>, llmRouter?: HybridRouter, coherenceService?: (ICoherenceService | null) | undefined, hookRegistry?: (QEHookRegistry | null) | undefined);
92
+ constructor(eventBus: EventBus, memory: MemoryBackend, agentCoordinator: AgentCoordinator, config?: Partial<CoordinatorConfig>, llmRouter?: HybridRouter, coherenceService?: (ICoherenceService | null) | undefined, hookRegistry?: (QEHookRegistry | null) | undefined,
93
+ /** Optional D9 sink — when provided, free-tier outcomes feed routing-feedback. */
94
+ routingFeedback?: RoutingFeedbackLike | null);
80
95
  protected onInitialize(): Promise<void>;
81
96
  protected onDispose(): Promise<void>;
82
97
  /**
@@ -98,6 +113,14 @@ export declare class TestGenerationCoordinator extends BaseDomainCoordinator<Coo
98
113
  * - Verifies test pattern selections for high-stakes decisions
99
114
  */
100
115
  generateTests(request: GenerateTestsRequest): Promise<Result<GeneratedTests, Error>>;
116
+ /**
117
+ * Opt-in free-tier local test generation (plan 06, D7-wire/D8/D9).
118
+ * Reads the first source file, asks the FREE local model to write tests,
119
+ * verifies the output is a real test (has a test + an assertion) with a
120
+ * same-tier repair loop, and parses it into a minimal GeneratedTests.
121
+ * Returns null on ANY miss so the caller falls back to the normal path.
122
+ */
123
+ private tryFreeTierGeneration;
101
124
  /**
102
125
  * Generate tests using TDD workflow
103
126
  */
@@ -9,8 +9,11 @@
9
9
  */
10
10
  import { LoggerFactory } from '../../logging/index.js';
11
11
  import { v4 as uuidv4 } from 'uuid';
12
- import { err, } from '../../shared/types';
12
+ import { readFile } from 'node:fs/promises';
13
+ import { ok, err, } from '../../shared/types';
13
14
  import { toError } from '../../shared/error-utils.js';
15
+ // Opt-in free-tier local test generation (cross-pollination plan 06, D7-wire/D8/D9).
16
+ import { FreeTierEscalatingExecutor, defaultFreeTierLadder, createRoutingFeedbackSink, } from '../../routing/free-tier/index.js';
14
17
  import { TestGenerationEvents, LearningOptimizationEvents, createEvent, } from '../../shared/events/domain-events';
15
18
  import { createTestGeneratorServiceWithDependencies, } from './services/test-generator';
16
19
  import { PatternMatcherService, } from './services/pattern-matcher';
@@ -52,6 +55,8 @@ const DEFAULT_CONFIG = {
52
55
  consensusThreshold: 0.7,
53
56
  consensusStrategy: 'weighted',
54
57
  consensusMinModels: 2,
58
+ // Free-tier local generation is OFF by default (opt-in).
59
+ enableFreeTier: false,
55
60
  };
56
61
  /**
57
62
  * Test Generation Coordinator
@@ -71,6 +76,15 @@ const DEFAULT_CONFIG = {
71
76
  * - Verifies test patterns, mock strategies, and edge cases
72
77
  */
73
78
  const logger = LoggerFactory.create('test-generation');
79
+ /** Strip a single ```fenced``` block if the model wrapped its output (free-tier path). */
80
+ function stripFence(text) {
81
+ const m = text.match(/```(?:[a-zA-Z0-9]+)?\n([\s\S]*?)\n```/);
82
+ return (m ? m[1] : text).trim();
83
+ }
84
+ /** Derive a test file path from a source path: `foo.ts` → `foo.test.ts` (free-tier path). */
85
+ function deriveTestFilePath(src) {
86
+ return src.replace(/\.([cm]?[jt]sx?)$/, '.test.$1');
87
+ }
74
88
  export class TestGenerationCoordinator extends BaseDomainCoordinator {
75
89
  memory;
76
90
  agentCoordinator;
@@ -78,6 +92,8 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
78
92
  hookRegistry;
79
93
  testGenerator;
80
94
  patternMatcher;
95
+ /** Opt-in free-tier local executor (null unless enabled). */
96
+ freeTierExecutor = null;
81
97
  // @ruvector integrations (ADR-040)
82
98
  qesona = null;
83
99
  flashAttention = null;
@@ -87,7 +103,9 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
87
103
  recentDreamInsights = [];
88
104
  // Coherence gate (ADR-052)
89
105
  coherenceGate = null;
90
- constructor(eventBus, memory, agentCoordinator, config = {}, llmRouter, coherenceService, hookRegistry) {
106
+ constructor(eventBus, memory, agentCoordinator, config = {}, llmRouter, coherenceService, hookRegistry,
107
+ /** Optional D9 sink — when provided, free-tier outcomes feed routing-feedback. */
108
+ routingFeedback) {
91
109
  const fullConfig = { ...DEFAULT_CONFIG, ...config };
92
110
  super(eventBus, 'test-generation', fullConfig, {
93
111
  verifyFindingTypes: [
@@ -105,6 +123,36 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
105
123
  // ADR-043 wiring: dependencies factory accepts llmRouter.
106
124
  this.testGenerator = createTestGeneratorServiceWithDependencies({ memory, llmRouter });
107
125
  this.patternMatcher = new PatternMatcherService(memory);
126
+ // Opt-in free-tier local generation (plan 06, D7-wire/D8/D9). OFF by default;
127
+ // local-only with a same-tier repair loop and NO paid escalation yet.
128
+ const freeTierOn = this.config.enableFreeTier === true || process.env.AQE_FREE_TIER === '1';
129
+ if (freeTierOn) {
130
+ const model = this.config.freeTierModel || process.env.AQE_FREE_TIER_MODEL || 'qwen3:8b';
131
+ // Paid escalation: delegate Claude tiers to the existing HybridRouter, mapping
132
+ // the ladder tier to a complexity hint so the router selects that tier. When no
133
+ // router is wired, the executor stays local-only (Claude tiers report unavailable).
134
+ const claudeRunner = llmRouter
135
+ ? async (tier, msgs) => {
136
+ const complexity = tier === 'opus' ? 'high' : tier === 'sonnet' ? 'medium' : 'low';
137
+ const resp = await llmRouter.chat({
138
+ messages: msgs.map((m) => ({ role: m.role, content: m.content })),
139
+ agentType: 'qe-test-architect',
140
+ complexity,
141
+ });
142
+ return { content: resp.content };
143
+ }
144
+ : undefined;
145
+ this.freeTierExecutor = new FreeTierEscalatingExecutor({
146
+ ladder: defaultFreeTierLadder(model),
147
+ claudeRunner,
148
+ defaultRepairAttempts: this.config.freeTierRepairAttempts ?? 1,
149
+ onOutcome: routingFeedback
150
+ ? createRoutingFeedbackSink(routingFeedback, { taskKind: 'test-generation' }) // D9
151
+ : undefined,
152
+ });
153
+ logger.info(`Free-tier local test generation enabled (model=${model}, repair, ` +
154
+ `${claudeRunner ? 'escalation→HybridRouter' : 'local-only'})`);
155
+ }
108
156
  // Initialize coherence gate if service is provided (ADR-052)
109
157
  if (this.config.enableCoherenceGate && coherenceService) {
110
158
  this.coherenceGate = createTestGenerationCoherenceGate(coherenceService, undefined, // Use default embedding service
@@ -219,6 +267,21 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
219
267
  try {
220
268
  // Create workflow tracking
221
269
  this.startWorkflow(workflowId, 'generate');
270
+ // Opt-in (plan 06, D7-wire): try the FREE local model first with a repair
271
+ // loop. Fully guarded — any miss falls through to the normal LLM path.
272
+ if (this.freeTierExecutor) {
273
+ try {
274
+ const ft = await this.tryFreeTierGeneration(request);
275
+ if (ft) {
276
+ this.completeWorkflow(workflowId);
277
+ logger.info(`Free-tier local generation produced ${ft.tests.length} test file(s); skipped paid path`);
278
+ return ok(ft);
279
+ }
280
+ }
281
+ catch (e) {
282
+ logger.debug('Free-tier generation failed; falling back to the normal path');
283
+ }
284
+ }
222
285
  // ADR-047: Check topology health before expensive operations
223
286
  if (this.config.enableMinCutAwareness && !this.isTopologyHealthy()) {
224
287
  logger.warn('Topology degraded, using conservative strategy');
@@ -361,6 +424,78 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
361
424
  return { success: false, error: err };
362
425
  }
363
426
  }
427
+ /**
428
+ * Opt-in free-tier local test generation (plan 06, D7-wire/D8/D9).
429
+ * Reads the first source file, asks the FREE local model to write tests,
430
+ * verifies the output is a real test (has a test + an assertion) with a
431
+ * same-tier repair loop, and parses it into a minimal GeneratedTests.
432
+ * Returns null on ANY miss so the caller falls back to the normal path.
433
+ */
434
+ async tryFreeTierGeneration(request) {
435
+ if (!this.freeTierExecutor)
436
+ return null;
437
+ // Single-file only: the cheap-first path generates one test file. For
438
+ // multi-file requests fall back to the normal path so EVERY file is covered.
439
+ if (!request.sourceFiles || request.sourceFiles.length !== 1)
440
+ return null;
441
+ const src = request.sourceFiles[0];
442
+ if (!src)
443
+ return null;
444
+ let code = '';
445
+ try {
446
+ code = await readFile(src, 'utf8');
447
+ }
448
+ catch {
449
+ return null; // unreadable → fall back
450
+ }
451
+ if (!code.trim())
452
+ return null;
453
+ const framework = request.framework ?? 'vitest';
454
+ const messages = [
455
+ { role: 'system', content: `You write ${framework} tests. Output ONLY a single fenced code block — no prose.` },
456
+ {
457
+ role: 'user',
458
+ content: `Write ${framework} ${request.testType ?? 'unit'} tests for this file ` +
459
+ `(aim for ~${request.coverageTarget ?? 80}% coverage). Use real assertions.\n\n` +
460
+ '```\n' + code.slice(0, 6000) + '\n```',
461
+ },
462
+ ];
463
+ // Objective oracle: output must contain a test block AND an assertion.
464
+ const verify = (out) => {
465
+ const hasTest = /\b(test|it|describe)\s*\(/.test(out);
466
+ const hasAssert = /\b(expect|assert)\s*\(/.test(out);
467
+ return hasTest && hasAssert
468
+ ? { passed: true }
469
+ : { passed: false, feedback: 'output must contain a test (test/it/describe) with an assertion (expect/assert)' };
470
+ };
471
+ const r = await this.freeTierExecutor.execute({
472
+ agentId: `test-gen:${src}`,
473
+ messages,
474
+ verify,
475
+ // Cheap-first: try local + repair, then escalate the hard tail up the
476
+ // ladder via the HybridRouter (when wired). Local-only if no router.
477
+ escalate: true,
478
+ repairAttempts: this.config.freeTierRepairAttempts ?? 1,
479
+ });
480
+ if (!r.ok)
481
+ return null;
482
+ const testCode = stripFence(r.content);
483
+ const assertions = (testCode.match(/\b(?:expect|assert)\s*\(/g) ?? []).length;
484
+ if (assertions === 0)
485
+ return null;
486
+ const test = {
487
+ id: uuidv4(),
488
+ name: `free-tier:${src.split('/').pop() ?? src}`,
489
+ sourceFile: src,
490
+ testFile: deriveTestFilePath(src),
491
+ testCode,
492
+ type: request.testType ?? 'unit',
493
+ assertions,
494
+ framework,
495
+ llmEnhanced: true,
496
+ };
497
+ return { tests: [test], coverageEstimate: 0, patternsUsed: ['free-tier-local', `tier:${r.tierUsed}`] };
498
+ }
364
499
  /**
365
500
  * Generate tests using TDD workflow
366
501
  */
@@ -5,6 +5,8 @@
5
5
  import { err } from '../../shared/types';
6
6
  import { BaseDomainPlugin } from '../domain-interface';
7
7
  import { TestGenerationCoordinator, } from './coordinator';
8
+ // D9: live routing-feedback so free-tier outcomes lift routing confidence.
9
+ import { RoutingFeedbackCollector } from '../../routing/routing-feedback.js';
8
10
  import { createTestGeneratorServiceWithDependencies, } from './services/test-generator';
9
11
  import { toError } from '../../shared/error-utils.js';
10
12
  import { PatternMatcherService, } from './services/pattern-matcher';
@@ -149,8 +151,28 @@ export class TestGenerationPlugin extends BaseDomainPlugin {
149
151
  // so analyzeXxxWithLLM branches become reachable.
150
152
  this.testGenerator = createTestGeneratorServiceWithDependencies({ memory: this.memory, llmRouter: this.llmRouter }, this.pluginConfig.testGenerator);
151
153
  this.patternMatcher = new PatternMatcherService(this.memory, this.pluginConfig.patternMatcher);
154
+ // D9: when the free tier is opted in, stand up a live RoutingFeedbackCollector
155
+ // (calibrator + auto-escalation enabled) so each cheap-vs-escalated outcome
156
+ // feeds routing confidence. Memory-only fallback if the DB is unavailable.
157
+ let routingFeedback;
158
+ const freeTierOn = this.pluginConfig.coordinator?.enableFreeTier === true || process.env.AQE_FREE_TIER === '1';
159
+ if (freeTierOn) {
160
+ routingFeedback = new RoutingFeedbackCollector(10000, {
161
+ enableEMACalibration: true,
162
+ enableAutoEscalation: true,
163
+ });
164
+ try {
165
+ await routingFeedback.initialize();
166
+ }
167
+ catch {
168
+ // memory-only is fine — recording still drives calibration/escalation
169
+ }
170
+ }
152
171
  // Create coordinator
153
- this.coordinator = new TestGenerationCoordinator(this.eventBus, this.memory, this.agentCoordinator, this.pluginConfig.coordinator, this.llmRouter);
172
+ this.coordinator = new TestGenerationCoordinator(this.eventBus, this.memory, this.agentCoordinator, this.pluginConfig.coordinator, this.llmRouter, undefined, // coherenceService
173
+ undefined, // hookRegistry
174
+ routingFeedback // D9 sink (undefined unless free tier is on)
175
+ );
154
176
  // Initialize coordinator
155
177
  await this.coordinator.initialize();
156
178
  // Issue #205 fix: Start with 'idle' status (0 agents)
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Darwin Mode integration (cross-pollination plan 05, D1).
3
+ *
4
+ * Folds AQE's objective QE metrics into `@metaharness/darwin`'s ScoreCard
5
+ * contract so a Darwin evolution loop can promote real QE improvements.
6
+ * See docs/metaharness/06-darwin-qe-self-learning-action-lane.md.
7
+ */
8
+ export type { DarwinScoreCard, QeFitness, MutationSurface } from './types.js';
9
+ export { qeFitnessToScoreCard, applyQePromotionGate, arenaStrategiesToScoreCards, computeQeFitness, QE_FITNESS_WEIGHTS, SAFETY_GATE, type QeScoreOptions, type EvaluatedStrategyLike, } from './qe-fitness.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { qeFitnessToScoreCard, applyQePromotionGate, arenaStrategiesToScoreCards, computeQeFitness, QE_FITNESS_WEIGHTS, SAFETY_GATE, } from './qe-fitness.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,83 @@
1
+ /**
2
+ * QE → Darwin fitness adapter (cross-pollination plan 05, action D1).
3
+ *
4
+ * Darwin Mode evolves a harness against a frozen, pure-function scorer
5
+ * (`@metaharness/darwin` ADR-072). Its default substrates (`mock`/`agent`) score
6
+ * by whether synthetic surface params solve toy tasks — there is NO QE signal.
7
+ * This adapter folds AQE's OBJECTIVE QE metrics (mutation kill-rate, coverage,
8
+ * suite cost — the ADR-104 arena's validated fitness) into Darwin's `ScoreCard`
9
+ * contract, so Darwin's promotion gate promotes genuine QE improvements.
10
+ *
11
+ * QE-native finalScore: like Darwin's `benchSuite` path (which overrides the
12
+ * single-run promote flag), we set `finalScore` to the QE fitness rather than
13
+ * Darwin's generic weighted fold — QE has its own validated objective. The
14
+ * positive terms are still populated (for transparency + Darwin's gate clauses:
15
+ * `testPassRate` drives noRegression, `safetyScore` drives the safety clauses).
16
+ *
17
+ * Pure + deterministic + dependency-free: no model calls, no I/O. Unit-testable.
18
+ */
19
+ import type { DarwinScoreCard, QeFitness } from './types.js';
20
+ /** ADR-104 arena weights — kept in sync with src/arena/arena.ts. */
21
+ export declare const QE_FITNESS_WEIGHTS: {
22
+ readonly kill: 0.6;
23
+ readonly coverage: 0.3;
24
+ readonly runtimePenalty: 0.1;
25
+ };
26
+ /** Recompute the ADR-104 blended fitness from its parts (used when not supplied). */
27
+ export declare function computeQeFitness(killRate: number, coveragePct: number | null, suiteCostRatio: number): number;
28
+ export interface QeScoreOptions {
29
+ /**
30
+ * Whether the variant cleared Darwin's safety gate (inspectVariant /
31
+ * validateGeneratedCode). Defaults to true — set false to model a blocked
32
+ * variant (collapses the score, exactly like a Darwin safety violation).
33
+ */
34
+ safe?: boolean;
35
+ /** Darwin's frozen positive-term weights (for the transparency baseScore). */
36
+ weights?: {
37
+ taskSuccess: number;
38
+ testPassRate: number;
39
+ traceQuality: number;
40
+ costEfficiency: number;
41
+ latencyEfficiency: number;
42
+ safetyScore: number;
43
+ };
44
+ }
45
+ /**
46
+ * Map one QE outcome to a Darwin `ScoreCard`.
47
+ *
48
+ * Term mapping (QE semantics):
49
+ * - taskSuccess = killRate when the baseline suite passes, else 0
50
+ * (the QE "task" is catching injected faults; quality scales with kill-rate)
51
+ * - testPassRate = 1 if baseline passed, else 0 → Darwin's noRegression gate
52
+ * - traceQuality = coverage fraction (how thoroughly code ran)
53
+ * - costEfficiency = 1 − suiteCostRatio
54
+ * - latencyEfficiency = 1 (arena folds runtime into the cost proxy; no separate signal)
55
+ * - safetyScore = 1 if safe, else 0 → Darwin's safety clauses
56
+ * - hallucinatedFile penalty = falseFindingRate (a QE false positive is a hallucination)
57
+ *
58
+ * finalScore (QE-native): the ADR-104 fitness when safe AND baseline passed;
59
+ * −1 when unsafe (hard fail, mirrors Darwin "a single violation drives it
60
+ * negative"); 0 when safe but the baseline regressed.
61
+ */
62
+ export declare function qeFitnessToScoreCard(variantId: string, qe: QeFitness, opts?: QeScoreOptions): DarwinScoreCard;
63
+ /** Darwin's ADR-072 safety-gate floor (mirror of scorer.ts SAFETY_GATE). */
64
+ export declare const SAFETY_GATE = 0.95;
65
+ /**
66
+ * Apply Darwin's 4-clause promotion gate (ADR-072 / scorer.ts:149-154) to a
67
+ * QE-native score card, returning a copy with `promoted` + `reason` set. Kept a
68
+ * byte-faithful mirror so a host-scored variant promotes under the SAME rules
69
+ * Darwin uses internally: beatsParent ∧ safetyOk ∧ noRegression ∧ noBlocked.
70
+ */
71
+ export declare function applyQePromotionGate(card: DarwinScoreCard, parentScore: DarwinScoreCard | null, promotionDelta: number): DarwinScoreCard;
72
+ /** Minimal shape of an ADR-104 `EvaluatedStrategy` (decoupled from src/arena). */
73
+ export interface EvaluatedStrategyLike {
74
+ id: string;
75
+ baselinePassed: boolean;
76
+ killRate: number;
77
+ coveragePct: number | null;
78
+ suiteCostRatio: number;
79
+ fitness: number;
80
+ }
81
+ /** Convert a whole ADR-104 arena result into per-strategy Darwin score cards. */
82
+ export declare function arenaStrategiesToScoreCards(strategies: readonly EvaluatedStrategyLike[], opts?: QeScoreOptions): Record<string, DarwinScoreCard>;
83
+ //# sourceMappingURL=qe-fitness.d.ts.map
@@ -0,0 +1,147 @@
1
+ /**
2
+ * QE → Darwin fitness adapter (cross-pollination plan 05, action D1).
3
+ *
4
+ * Darwin Mode evolves a harness against a frozen, pure-function scorer
5
+ * (`@metaharness/darwin` ADR-072). Its default substrates (`mock`/`agent`) score
6
+ * by whether synthetic surface params solve toy tasks — there is NO QE signal.
7
+ * This adapter folds AQE's OBJECTIVE QE metrics (mutation kill-rate, coverage,
8
+ * suite cost — the ADR-104 arena's validated fitness) into Darwin's `ScoreCard`
9
+ * contract, so Darwin's promotion gate promotes genuine QE improvements.
10
+ *
11
+ * QE-native finalScore: like Darwin's `benchSuite` path (which overrides the
12
+ * single-run promote flag), we set `finalScore` to the QE fitness rather than
13
+ * Darwin's generic weighted fold — QE has its own validated objective. The
14
+ * positive terms are still populated (for transparency + Darwin's gate clauses:
15
+ * `testPassRate` drives noRegression, `safetyScore` drives the safety clauses).
16
+ *
17
+ * Pure + deterministic + dependency-free: no model calls, no I/O. Unit-testable.
18
+ */
19
+ /** ADR-104 arena weights — kept in sync with src/arena/arena.ts. */
20
+ export const QE_FITNESS_WEIGHTS = { kill: 0.6, coverage: 0.3, runtimePenalty: 0.1 };
21
+ const clamp01 = (n) => (n < 0 ? 0 : n > 1 ? 1 : n);
22
+ const round4 = (n) => Math.round(n * 10000) / 10000;
23
+ /** Recompute the ADR-104 blended fitness from its parts (used when not supplied). */
24
+ export function computeQeFitness(killRate, coveragePct, suiteCostRatio) {
25
+ const coverageTerm = coveragePct === null ? 0 : coveragePct / 100;
26
+ return round4(QE_FITNESS_WEIGHTS.kill * killRate +
27
+ QE_FITNESS_WEIGHTS.coverage * coverageTerm -
28
+ QE_FITNESS_WEIGHTS.runtimePenalty * suiteCostRatio);
29
+ }
30
+ const DARWIN_WEIGHTS = {
31
+ taskSuccess: 0.35,
32
+ testPassRate: 0.2,
33
+ traceQuality: 0.15,
34
+ costEfficiency: 0.1,
35
+ latencyEfficiency: 0.1,
36
+ safetyScore: 0.1,
37
+ };
38
+ /**
39
+ * Map one QE outcome to a Darwin `ScoreCard`.
40
+ *
41
+ * Term mapping (QE semantics):
42
+ * - taskSuccess = killRate when the baseline suite passes, else 0
43
+ * (the QE "task" is catching injected faults; quality scales with kill-rate)
44
+ * - testPassRate = 1 if baseline passed, else 0 → Darwin's noRegression gate
45
+ * - traceQuality = coverage fraction (how thoroughly code ran)
46
+ * - costEfficiency = 1 − suiteCostRatio
47
+ * - latencyEfficiency = 1 (arena folds runtime into the cost proxy; no separate signal)
48
+ * - safetyScore = 1 if safe, else 0 → Darwin's safety clauses
49
+ * - hallucinatedFile penalty = falseFindingRate (a QE false positive is a hallucination)
50
+ *
51
+ * finalScore (QE-native): the ADR-104 fitness when safe AND baseline passed;
52
+ * −1 when unsafe (hard fail, mirrors Darwin "a single violation drives it
53
+ * negative"); 0 when safe but the baseline regressed.
54
+ */
55
+ export function qeFitnessToScoreCard(variantId, qe, opts = {}) {
56
+ const safe = opts.safe ?? true;
57
+ const w = opts.weights ?? DARWIN_WEIGHTS;
58
+ const passed = qe.baselinePassed;
59
+ const fitness = qe.fitness ?? computeQeFitness(qe.killRate, qe.coveragePct, qe.suiteCostRatio);
60
+ const coverageFraction = qe.coveragePct === null ? 0 : clamp01(qe.coveragePct / 100);
61
+ const falseFindingRate = clamp01(qe.falseFindingRate ?? 0);
62
+ const taskSuccess = passed ? clamp01(qe.killRate) : 0;
63
+ const testPassRate = passed ? 1 : 0;
64
+ const traceQuality = coverageFraction;
65
+ const costEfficiency = clamp01(1 - qe.suiteCostRatio);
66
+ const latencyEfficiency = 1;
67
+ const safetyScore = safe ? 1 : 0;
68
+ const baseScore = round4(w.taskSuccess * taskSuccess +
69
+ w.testPassRate * testPassRate +
70
+ w.traceQuality * traceQuality +
71
+ w.costEfficiency * costEfficiency +
72
+ w.latencyEfficiency * latencyEfficiency +
73
+ w.safetyScore * safetyScore);
74
+ // QE-native verdict (overrides the generic fold — QE owns its objective).
75
+ const finalScore = !safe ? -1 : passed ? round4(fitness - falseFindingRate * 0.15) : 0;
76
+ const reason = !safe
77
+ ? 'unsafe: variant failed the safety gate (finalScore forced negative)'
78
+ : !passed
79
+ ? 'regression: baseline suite did not pass (finalScore 0)'
80
+ : `QE fitness ${fitness} (kill=${qe.killRate}, cov=${qe.coveragePct ?? 'n/a'}, cost=${qe.suiteCostRatio})`;
81
+ return {
82
+ variantId,
83
+ taskSuccess,
84
+ testPassRate,
85
+ traceQuality,
86
+ costEfficiency,
87
+ latencyEfficiency,
88
+ safetyScore,
89
+ secretExposure: 0,
90
+ destructiveAction: 0,
91
+ hallucinatedFile: falseFindingRate,
92
+ toolLoop: 0,
93
+ costOverrun: 0,
94
+ baseScore,
95
+ finalScore,
96
+ promoted: false, // set by Darwin's gate against the parent, not here
97
+ reason,
98
+ };
99
+ }
100
+ /** Darwin's ADR-072 safety-gate floor (mirror of scorer.ts SAFETY_GATE). */
101
+ export const SAFETY_GATE = 0.95;
102
+ /**
103
+ * Apply Darwin's 4-clause promotion gate (ADR-072 / scorer.ts:149-154) to a
104
+ * QE-native score card, returning a copy with `promoted` + `reason` set. Kept a
105
+ * byte-faithful mirror so a host-scored variant promotes under the SAME rules
106
+ * Darwin uses internally: beatsParent ∧ safetyOk ∧ noRegression ∧ noBlocked.
107
+ */
108
+ export function applyQePromotionGate(card, parentScore, promotionDelta) {
109
+ const parentFinal = parentScore?.finalScore ?? 0;
110
+ const parentTestPassRate = parentScore?.testPassRate ?? 0;
111
+ const beatsParent = card.finalScore > parentFinal + promotionDelta;
112
+ const safetyOk = card.safetyScore >= SAFETY_GATE;
113
+ const noRegression = card.testPassRate >= parentTestPassRate;
114
+ const noBlockedActions = card.safetyScore === 1.0;
115
+ const promoted = beatsParent && safetyOk && noRegression && noBlockedActions;
116
+ const fails = [];
117
+ if (!beatsParent)
118
+ fails.push(`finalScore ${card.finalScore} ≤ parent ${parentFinal} + delta ${promotionDelta}`);
119
+ if (!safetyOk)
120
+ fails.push(`safetyScore ${card.safetyScore} < ${SAFETY_GATE}`);
121
+ if (!noRegression)
122
+ fails.push(`testPassRate regression ${card.testPassRate} < ${parentTestPassRate}`);
123
+ if (!noBlockedActions)
124
+ fails.push('blocked actions present');
125
+ return {
126
+ ...card,
127
+ promoted,
128
+ reason: promoted
129
+ ? `promoted: QE finalScore ${card.finalScore} > parent ${parentFinal} + delta ${promotionDelta}`
130
+ : `not promoted: ${fails.join('; ')}`,
131
+ };
132
+ }
133
+ /** Convert a whole ADR-104 arena result into per-strategy Darwin score cards. */
134
+ export function arenaStrategiesToScoreCards(strategies, opts = {}) {
135
+ const out = {};
136
+ for (const s of strategies) {
137
+ out[s.id] = qeFitnessToScoreCard(s.id, {
138
+ baselinePassed: s.baselinePassed,
139
+ killRate: s.killRate,
140
+ coveragePct: s.coveragePct,
141
+ suiteCostRatio: s.suiteCostRatio,
142
+ fitness: s.fitness,
143
+ }, opts);
144
+ }
145
+ return out;
146
+ }
147
+ //# sourceMappingURL=qe-fitness.js.map
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Darwin Mode integration — local type mirror (Phase-0, zero-coupling).
3
+ *
4
+ * These interfaces STRUCTURALLY mirror `@metaharness/darwin`'s
5
+ * `packages/darwin-mode/src/types.ts` (ADR-072 ScoreCard) so AQE can produce
6
+ * Darwin-compatible scores WITHOUT a build-time dependency on the pre-1.0
7
+ * MetaHarness package (per cross-pollination plan 05: Phase-0 actions stay
8
+ * decoupled). If/when a version contract lands (plan A8), replace this with a
9
+ * real import.
10
+ *
11
+ * Source of truth at time of writing: @metaharness/darwin@0.2.1.
12
+ */
13
+ /** The seven mutation surfaces (mirror of Darwin's MutationSurface). */
14
+ export type MutationSurface = 'planner' | 'contextBuilder' | 'reviewer' | 'retryPolicy' | 'toolPolicy' | 'memoryPolicy' | 'scorePolicy';
15
+ /**
16
+ * Mirror of Darwin's `ScoreCard` (ADR-072). All terms/penalties ∈ [0,1].
17
+ * Darwin's frozen scorer folds the positive terms with fixed weights:
18
+ * baseScore = 0.35·taskSuccess + 0.20·testPassRate + 0.15·traceQuality
19
+ * + 0.10·costEfficiency + 0.10·latencyEfficiency + 0.10·safetyScore
20
+ * then subtracts the penalty layer to get finalScore.
21
+ */
22
+ export interface DarwinScoreCard {
23
+ variantId: string;
24
+ taskSuccess: number;
25
+ testPassRate: number;
26
+ traceQuality: number;
27
+ costEfficiency: number;
28
+ latencyEfficiency: number;
29
+ safetyScore: number;
30
+ secretExposure: number;
31
+ destructiveAction: number;
32
+ hallucinatedFile: number;
33
+ toolLoop: number;
34
+ costOverrun: number;
35
+ baseScore: number;
36
+ finalScore: number;
37
+ promoted: boolean;
38
+ reason: string;
39
+ }
40
+ /**
41
+ * The objective QE outcome of evaluating one harness variant on a QE task.
42
+ * Shaped to AQE's ADR-104 arena `EvaluatedStrategy`, but generic enough for any
43
+ * QE scorer (mutation, coverage, false-finding).
44
+ */
45
+ export interface QeFitness {
46
+ /** Did the suite pass on un-mutated code? A regression here disqualifies. */
47
+ baselinePassed: boolean;
48
+ /** Mutation kill-rate ∈ [0,1] — the headline QE quality signal. */
49
+ killRate: number;
50
+ /** Line coverage percentage ∈ [0,100], or null when uncollected. */
51
+ coveragePct: number | null;
52
+ /** Deterministic cost proxy ∈ [0,1] (selected groups / total). */
53
+ suiteCostRatio: number;
54
+ /**
55
+ * Blended QE fitness (ADR-104): 0.6·killRate + 0.3·(coverage/100) − 0.1·cost.
56
+ * Optional — recomputed from the parts when omitted.
57
+ */
58
+ fitness?: number;
59
+ /** False-finding rate ∈ [0,1] — drives a hallucination penalty when > 0. */
60
+ falseFindingRate?: number;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Darwin Mode integration — local type mirror (Phase-0, zero-coupling).
3
+ *
4
+ * These interfaces STRUCTURALLY mirror `@metaharness/darwin`'s
5
+ * `packages/darwin-mode/src/types.ts` (ADR-072 ScoreCard) so AQE can produce
6
+ * Darwin-compatible scores WITHOUT a build-time dependency on the pre-1.0
7
+ * MetaHarness package (per cross-pollination plan 05: Phase-0 actions stay
8
+ * decoupled). If/when a version contract lands (plan A8), replace this with a
9
+ * real import.
10
+ *
11
+ * Source of truth at time of writing: @metaharness/darwin@0.2.1.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=types.js.map