agentic-qe 3.14.8 → 3.15.1

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 (375) hide show
  1. package/.claude/skills/release/SKILL.md +6 -0
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +189 -0
  4. package/README.md +143 -366
  5. package/assets/readme/credit-ruflo.svg +1 -0
  6. package/assets/readme/credit-ruvector.svg +1 -0
  7. package/assets/readme/project-header.svg +1 -0
  8. package/assets/readme/quality-loop.svg +1 -0
  9. package/assets/skills/skills-manifest.json +1 -1
  10. package/dist/adapters/a2a/notifications/retry-queue.js +5 -1
  11. package/dist/adapters/ag-ui/json-patch.js +14 -7
  12. package/dist/adapters/ag-ui/state-delta-cache.js +20 -12
  13. package/dist/cli/bundle.js +5 -5
  14. package/dist/cli/chunks/adapter-Q6RPGMUE.js +2 -0
  15. package/dist/cli/chunks/{agent-booster-wasm-67OKGDGZ.js → agent-booster-wasm-XUHRLKWP.js} +2 -2
  16. package/dist/cli/chunks/{agent-handler-4HZEQ3WQ.js → agent-handler-CL7MJP5W.js} +2 -2
  17. package/dist/cli/chunks/{agent-memory-branch-IBHZQSRN.js → agent-memory-branch-F7RV72FC.js} +2 -2
  18. package/dist/cli/chunks/aqe-learning-engine-JQPXIU7C.js +2 -0
  19. package/dist/cli/chunks/{arena-LCLRGUIK.js → arena-GRRNK7IN.js} +4 -4
  20. package/dist/cli/chunks/{arena-EJBIGSF4.js → arena-LHLVOQHW.js} +2 -2
  21. package/dist/cli/chunks/{audit-PY4JNDQQ.js → audit-EOP2K34L.js} +3 -3
  22. package/dist/cli/chunks/base-5SK64NXB.js +2 -0
  23. package/dist/cli/chunks/{better-sqlite3-2JG5K6XT.js → better-sqlite3-YERQ5DOL.js} +2 -2
  24. package/dist/cli/chunks/{brain-handler-3UYK55GA.js → brain-handler-FBXBM5XE.js} +3 -3
  25. package/dist/cli/chunks/{branch-enumerator-GOSWOX46.js → branch-enumerator-NWO6LNHB.js} +2 -2
  26. package/dist/cli/chunks/{browser-DC2JV47Z.js → browser-EDCG7TNF.js} +2 -2
  27. package/dist/cli/chunks/browser-workflow-WN7XNTCJ.js +2 -0
  28. package/dist/cli/chunks/{chunk-Z5UZOYQS.js → chunk-25IWHVMW.js} +2 -2
  29. package/dist/cli/chunks/chunk-27S47AYK.js +3 -0
  30. package/dist/cli/chunks/{chunk-SUNXA2UR.js → chunk-2IPBCXTT.js} +2 -2
  31. package/dist/cli/chunks/chunk-2K3QFLX2.js +2 -0
  32. package/dist/cli/chunks/{chunk-775WGWLL.js → chunk-35XRY6ZW.js} +2 -2
  33. package/dist/cli/chunks/{chunk-RTD4U7IW.js → chunk-3NOSMJS4.js} +2 -2
  34. package/dist/cli/chunks/{chunk-GVLRE3BV.js → chunk-3TZRJ5QD.js} +3 -3
  35. package/dist/cli/chunks/{chunk-RJJIPTVH.js → chunk-46DUU44C.js} +2 -2
  36. package/dist/cli/chunks/{chunk-H5UH234L.js → chunk-4AEFJEZH.js} +1 -1
  37. package/dist/cli/chunks/{chunk-EXQGHTPD.js → chunk-4KHSWNFW.js} +4 -4
  38. package/dist/cli/chunks/{chunk-CLUHGBLN.js → chunk-4KSCJ462.js} +1 -1
  39. package/dist/cli/chunks/{chunk-3EKG7HFV.js → chunk-4P7CGSRL.js} +3 -3
  40. package/dist/cli/chunks/{chunk-XFT4FYTC.js → chunk-4THIRDBL.js} +2 -2
  41. package/dist/cli/chunks/{chunk-7TNCEVWX.js → chunk-4XEZ562Q.js} +2 -2
  42. package/dist/cli/chunks/{chunk-CIEXUYY7.js → chunk-53C7TGC4.js} +1 -1
  43. package/dist/cli/chunks/{chunk-LQVS5IWH.js → chunk-53HWWWFZ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-EMOZ5O5S.js → chunk-54JYUOSR.js} +1 -1
  45. package/dist/cli/chunks/{chunk-J24AJEDE.js → chunk-5B5TA3X4.js} +2 -2
  46. package/dist/cli/chunks/{chunk-BITFGVZ4.js → chunk-5C4UYXQL.js} +2 -2
  47. package/dist/cli/chunks/{chunk-F6JJNBE5.js → chunk-5JJWVFUV.js} +1 -1
  48. package/dist/cli/chunks/{chunk-M7QKCHLQ.js → chunk-5QEXDXHQ.js} +2 -2
  49. package/dist/cli/chunks/{chunk-I6NZFBT3.js → chunk-5TEDVUEB.js} +2 -2
  50. package/dist/cli/chunks/{chunk-673XJBGW.js → chunk-66HKJJFH.js} +2 -2
  51. package/dist/cli/chunks/{chunk-AR2S4DOB.js → chunk-6AVVC7Y3.js} +1 -1
  52. package/dist/cli/chunks/{chunk-EBV3WFIR.js → chunk-6DF6X3SZ.js} +2 -2
  53. package/dist/cli/chunks/{chunk-GHMJFICO.js → chunk-6MGJMGAD.js} +2 -2
  54. package/dist/cli/chunks/{chunk-XECZYQT5.js → chunk-6Q7PWKWV.js} +2 -2
  55. package/dist/cli/chunks/{chunk-VV2JVYOI.js → chunk-6U6JQS4Z.js} +2 -2
  56. package/dist/cli/chunks/{chunk-BHPTHC5O.js → chunk-6WW6A6JM.js} +2 -2
  57. package/dist/cli/chunks/{chunk-G3C7Z6FO.js → chunk-7B3XVVYP.js} +2 -2
  58. package/dist/cli/chunks/{chunk-J5HTQHJK.js → chunk-7FGSX4UD.js} +2 -2
  59. package/dist/cli/chunks/{chunk-YIWBJ637.js → chunk-A5LOELVV.js} +2 -2
  60. package/dist/cli/chunks/{chunk-VCSNNLWL.js → chunk-ADEYBXAS.js} +2 -2
  61. package/dist/cli/chunks/{chunk-A53MMSGC.js → chunk-ALLABEUK.js} +2 -2
  62. package/dist/cli/chunks/{chunk-HBAFXWSO.js → chunk-ARGMYSDY.js} +1 -1
  63. package/dist/cli/chunks/{chunk-HPVYJ6JH.js → chunk-ARWSPV2C.js} +2 -2
  64. package/dist/cli/chunks/{chunk-VSPNIDQK.js → chunk-AVOYMVD6.js} +2 -2
  65. package/dist/cli/chunks/{chunk-BUVJIVFG.js → chunk-B3DWOR5R.js} +1 -1
  66. package/dist/cli/chunks/{chunk-K6EOHGKS.js → chunk-BW7S6LIJ.js} +2 -2
  67. package/dist/cli/chunks/{chunk-4HXFPBAA.js → chunk-C3BW3Q27.js} +1 -1
  68. package/dist/cli/chunks/{chunk-JRK5GX56.js → chunk-CFZJEOCD.js} +1 -1
  69. package/dist/cli/chunks/{chunk-3S5IIK32.js → chunk-CHX65QXY.js} +1 -1
  70. package/dist/cli/chunks/{chunk-FRC7AFB4.js → chunk-CTK7NMSJ.js} +2 -2
  71. package/dist/cli/chunks/{chunk-RM6OC35G.js → chunk-CTLHNFPM.js} +1 -1
  72. package/dist/cli/chunks/{chunk-3576QGPP.js → chunk-D3LREV4P.js} +1 -1
  73. package/dist/cli/chunks/{chunk-TCQWVVSR.js → chunk-DKWB4ERY.js} +1 -1
  74. package/dist/cli/chunks/{chunk-JQAJUXRE.js → chunk-DREYYJ7A.js} +2 -2
  75. package/dist/cli/chunks/{chunk-OZJQN7YE.js → chunk-DV7I6CRH.js} +2 -2
  76. package/dist/cli/chunks/{chunk-AEYJ4ZLA.js → chunk-EQ3BJS37.js} +1 -1
  77. package/dist/cli/chunks/{chunk-KNSQWM2E.js → chunk-FIIHSEXP.js} +2 -2
  78. package/dist/cli/chunks/{chunk-LRGTPUJA.js → chunk-FQYXPSWD.js} +2 -2
  79. package/dist/cli/chunks/{chunk-QQVE65ER.js → chunk-FRGNM6SW.js} +2 -2
  80. package/dist/cli/chunks/{chunk-AOD2ES44.js → chunk-FTHXV7N7.js} +2 -2
  81. package/dist/cli/chunks/{chunk-DZHXCOSK.js → chunk-GAKVCN3C.js} +1 -1
  82. package/dist/cli/chunks/{chunk-LMAI74EP.js → chunk-GDSYJHVB.js} +1 -1
  83. package/dist/cli/chunks/{chunk-VAXTPLO3.js → chunk-GUHJWBPN.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OX7MJFLC.js → chunk-GUKBN3BS.js} +2 -2
  85. package/dist/cli/chunks/{chunk-R6I5I724.js → chunk-HU4QGCIJ.js} +2 -2
  86. package/dist/cli/chunks/{chunk-LTHV4PIG.js → chunk-HVAYG54D.js} +2 -2
  87. package/dist/cli/chunks/{chunk-AJMAKUS3.js → chunk-IUGY6Z4Q.js} +2 -2
  88. package/dist/cli/chunks/{chunk-WFKE7NZ5.js → chunk-J2WALRWR.js} +2 -2
  89. package/dist/cli/chunks/{chunk-Z6G3QVZ4.js → chunk-J4ULR4QR.js} +19 -19
  90. package/dist/cli/chunks/{chunk-YHX74M7C.js → chunk-JEXPSOT2.js} +2 -2
  91. package/dist/cli/chunks/{chunk-25EEIAHS.js → chunk-JHKMUY4W.js} +2 -2
  92. package/dist/cli/chunks/{chunk-L5T32SRF.js → chunk-JQVECGYL.js} +1 -1
  93. package/dist/cli/chunks/{chunk-UHLZKH6B.js → chunk-JSHASVQ2.js} +25 -25
  94. package/dist/cli/chunks/{chunk-SPS472C5.js → chunk-JW2HNT3J.js} +2 -2
  95. package/dist/cli/chunks/{chunk-SMBGK7XI.js → chunk-JY6HWYC4.js} +1 -1
  96. package/dist/cli/chunks/{chunk-F57FTFWS.js → chunk-JYF3QF4C.js} +2 -2
  97. package/dist/cli/chunks/{chunk-CBWM5NOO.js → chunk-K4NB3MYN.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LKFBW2QM.js → chunk-KBK4GBJQ.js} +2 -2
  99. package/dist/cli/chunks/{chunk-6F7MFHTY.js → chunk-KHVWIUAF.js} +2 -2
  100. package/dist/cli/chunks/{chunk-JDOVO4E4.js → chunk-KP6LNSDO.js} +126 -130
  101. package/dist/cli/chunks/{chunk-T53ZN4NO.js → chunk-KTBA2HJC.js} +2 -2
  102. package/dist/cli/chunks/{chunk-WVEHKAIH.js → chunk-L5GEWKR3.js} +3 -3
  103. package/dist/cli/chunks/chunk-LDDIYDIP.js +742 -0
  104. package/dist/cli/chunks/{chunk-QPACHVDI.js → chunk-LI7N45GM.js} +1 -1
  105. package/dist/cli/chunks/{chunk-UQGIC5OX.js → chunk-LQI5GVH7.js} +1 -1
  106. package/dist/cli/chunks/{chunk-T4WQPE77.js → chunk-MEOAKMKF.js} +1 -1
  107. package/dist/cli/chunks/{chunk-BT3MI2BW.js → chunk-N4HQ6FE2.js} +1 -1
  108. package/dist/cli/chunks/{chunk-JRLZ7LZ3.js → chunk-N5OSH5JO.js} +2 -2
  109. package/dist/cli/chunks/{chunk-BZIPW2PA.js → chunk-NF6SLLE6.js} +2 -2
  110. package/dist/cli/chunks/{chunk-QYCZYJH7.js → chunk-NGDRSF6Y.js} +2 -2
  111. package/dist/cli/chunks/{chunk-O4QB2GFL.js → chunk-NK2BR4QZ.js} +2 -2
  112. package/dist/cli/chunks/{chunk-B2QKBQYD.js → chunk-NS4RIZ4F.js} +1 -1
  113. package/dist/cli/chunks/{chunk-CQEWL32R.js → chunk-NTLWHLAY.js} +1 -1
  114. package/dist/cli/chunks/{chunk-NWUFTLSF.js → chunk-NWNZMXNO.js} +2 -2
  115. package/dist/cli/chunks/{chunk-6GJWT2OY.js → chunk-OABFAREV.js} +2 -2
  116. package/dist/cli/chunks/{chunk-T7YCNOW5.js → chunk-OH4SKOAM.js} +2 -2
  117. package/dist/cli/chunks/{chunk-BL6273KR.js → chunk-OKS25EGZ.js} +3 -3
  118. package/dist/cli/chunks/{chunk-NJEEKYEP.js → chunk-OPBPFNBO.js} +2 -2
  119. package/dist/cli/chunks/{chunk-SKJQKOFJ.js → chunk-P24ZBDZY.js} +2 -2
  120. package/dist/cli/chunks/{chunk-KKXH25IH.js → chunk-PBWR2SKH.js} +2 -2
  121. package/dist/cli/chunks/{chunk-TGRHO4ES.js → chunk-PDLVO3ZR.js} +2 -2
  122. package/dist/cli/chunks/{chunk-GK5WLUX3.js → chunk-PGARKOE6.js} +1 -1
  123. package/dist/cli/chunks/{chunk-XAESN54Q.js → chunk-PNK5KHSI.js} +1 -1
  124. package/dist/cli/chunks/{chunk-BFIXUKOR.js → chunk-PZBYZV5M.js} +1 -1
  125. package/dist/cli/chunks/{chunk-EKO5QL2B.js → chunk-PZDI7WQ3.js} +1 -1
  126. package/dist/cli/chunks/{chunk-BCCSV3RH.js → chunk-Q7ONRZBD.js} +1 -1
  127. package/dist/cli/chunks/{chunk-N3ASALOL.js → chunk-QMHWJBD3.js} +2 -2
  128. package/dist/cli/chunks/{chunk-OA75C4HY.js → chunk-QOOADAT7.js} +2 -2
  129. package/dist/cli/chunks/{chunk-ES7TAJRJ.js → chunk-QVTV47TM.js} +2 -2
  130. package/dist/cli/chunks/{chunk-7X3LMTRA.js → chunk-R2ICZKQA.js} +2 -2
  131. package/dist/cli/chunks/{chunk-D2Y36V5J.js → chunk-RDI3W4H6.js} +2 -2
  132. package/dist/cli/chunks/{chunk-QP7EKLWU.js → chunk-REGPCPEJ.js} +2 -2
  133. package/dist/cli/chunks/{chunk-U2QTL5T2.js → chunk-RXKOZ6VS.js} +3 -3
  134. package/dist/cli/chunks/{chunk-OVMG6EEF.js → chunk-SRXXPZVT.js} +2 -2
  135. package/dist/cli/chunks/{chunk-CXUC7YKA.js → chunk-SUFXUM6W.js} +2 -2
  136. package/dist/cli/chunks/{chunk-77WL5HQW.js → chunk-T5K6ZCA6.js} +1 -1
  137. package/dist/cli/chunks/{chunk-3X2JSW3R.js → chunk-TBCQWD5A.js} +1 -1
  138. package/dist/cli/chunks/{chunk-BOIUENWW.js → chunk-TCJ65NPY.js} +1 -1
  139. package/dist/cli/chunks/{chunk-HE3BDBAO.js → chunk-TJCMG3QE.js} +2 -2
  140. package/dist/cli/chunks/{chunk-56M4QNXU.js → chunk-TLUMENRZ.js} +2 -2
  141. package/dist/cli/chunks/{chunk-JTOFLDU7.js → chunk-TR37Q7A6.js} +6 -6
  142. package/dist/cli/chunks/{chunk-SVP3BP52.js → chunk-UE33MZOC.js} +2 -2
  143. package/dist/cli/chunks/{chunk-T6W2EYHC.js → chunk-UGUZFUQG.js} +2 -2
  144. package/dist/cli/chunks/{chunk-3FCHH4VP.js → chunk-UOHZRR5C.js} +1 -1
  145. package/dist/cli/chunks/{chunk-QKM4XT2F.js → chunk-UTFNHITI.js} +2 -2
  146. package/dist/cli/chunks/{chunk-6GNWVPMR.js → chunk-V3ISBQ5Q.js} +2 -2
  147. package/dist/cli/chunks/{chunk-6VTC3OHD.js → chunk-V5RP2SU3.js} +2 -2
  148. package/dist/cli/chunks/{chunk-5X4HDW5W.js → chunk-VEKRK3R6.js} +2 -2
  149. package/dist/cli/chunks/{chunk-TUZNWRYC.js → chunk-VGYLV6VD.js} +1 -1
  150. package/dist/cli/chunks/{chunk-C647D42G.js → chunk-VLL7ASGH.js} +2 -2
  151. package/dist/cli/chunks/{chunk-QH7C4PTX.js → chunk-W5HQQTVH.js} +1 -1
  152. package/dist/cli/chunks/{chunk-A5CLVZC3.js → chunk-W5NHBYYS.js} +2 -2
  153. package/dist/cli/chunks/{chunk-ISBOHF6Y.js → chunk-W6K77PQR.js} +1 -1
  154. package/dist/cli/chunks/{chunk-AUFV2G2J.js → chunk-WFDDWRWY.js} +5 -5
  155. package/dist/cli/chunks/{chunk-AJ5PCJQ2.js → chunk-WHBDSJUE.js} +3 -3
  156. package/dist/cli/chunks/{chunk-4RNCVSVN.js → chunk-WONHFDWF.js} +2 -2
  157. package/dist/cli/chunks/{chunk-VW7AXJQS.js → chunk-WPG6SW7C.js} +2 -2
  158. package/dist/cli/chunks/{chunk-GA63ESNT.js → chunk-WQZR6DS6.js} +2 -2
  159. package/dist/cli/chunks/{chunk-G36RZF2Y.js → chunk-WTFVYFRZ.js} +1 -1
  160. package/dist/cli/chunks/{chunk-F2WAB4WK.js → chunk-WYE3ICSL.js} +2 -2
  161. package/dist/cli/chunks/{chunk-TT45RCLN.js → chunk-X4PGLEPQ.js} +2 -2
  162. package/dist/cli/chunks/{chunk-QDRFLM77.js → chunk-X6W35QXO.js} +2 -2
  163. package/dist/cli/chunks/{chunk-HHANMCD2.js → chunk-XCVD57GW.js} +1 -1
  164. package/dist/cli/chunks/{chunk-GQJ4QDEN.js → chunk-XYZUBAR6.js} +4 -4
  165. package/dist/cli/chunks/{chunk-TP7L4EX6.js → chunk-XZGRHJGC.js} +2 -2
  166. package/dist/cli/chunks/{chunk-BTBJ2NLH.js → chunk-YDM2DPUU.js} +2 -2
  167. package/dist/cli/chunks/{chunk-NEXBTLN6.js → chunk-YDMPTCJ3.js} +2 -2
  168. package/dist/cli/chunks/{chunk-4PY44TKH.js → chunk-YM3GAJMN.js} +2 -2
  169. package/dist/cli/chunks/{chunk-UNFE4RPV.js → chunk-YTMWPGVR.js} +1 -1
  170. package/dist/cli/chunks/{chunk-DSJJHPPS.js → chunk-YWX7KLNG.js} +3 -3
  171. package/dist/cli/chunks/{chunk-UIWXKRTK.js → chunk-ZE6WJDXM.js} +2 -2
  172. package/dist/cli/chunks/{chunk-W7JUD4EZ.js → chunk-ZX4I7IND.js} +2 -2
  173. package/dist/cli/chunks/{chunk-PVJLQ2YZ.js → chunk-ZZV6GR46.js} +1 -1
  174. package/dist/cli/chunks/{ci-5LIV2HW5.js → ci-K7DG4GSO.js} +3 -3
  175. package/dist/cli/chunks/{ci-output-UO5BDFU4.js → ci-output-EBSUG6HP.js} +2 -2
  176. package/dist/cli/chunks/{circuit-breaker-UQDPXYRD.js → circuit-breaker-P6N6YIRZ.js} +2 -2
  177. package/dist/cli/chunks/{claude-flow-setup-62QES3QX.js → claude-flow-setup-P6EZPQZT.js} +2 -2
  178. package/dist/cli/chunks/client-ZYH66YRI.js +2 -0
  179. package/dist/cli/chunks/{cline-installer-X7VZTSZG.js → cline-installer-EVZZ3EFY.js} +2 -2
  180. package/dist/cli/chunks/{code-H3BF4L4H.js → code-3WLBG2XK.js} +3 -3
  181. package/dist/cli/chunks/{code-index-extractor-BJGFZGGL.js → code-index-extractor-ZP6D4WL2.js} +2 -2
  182. package/dist/cli/chunks/{codex-installer-KVZWKU6S.js → codex-installer-XAUI4SB7.js} +2 -2
  183. package/dist/cli/chunks/{completions-YMILE6V7.js → completions-RHFNDDG3.js} +2 -2
  184. package/dist/cli/chunks/{complexity-analyzer-J26N2PWG.js → complexity-analyzer-DCW7Q3OR.js} +2 -2
  185. package/dist/cli/chunks/{continuedev-installer-MAR42OV7.js → continuedev-installer-53SQA5T6.js} +2 -2
  186. package/dist/cli/chunks/{copilot-installer-CVOJF6OT.js → copilot-installer-SXXMFB6T.js} +2 -2
  187. package/dist/cli/chunks/core-handlers-XKSPHEHE.js +2 -0
  188. package/dist/cli/chunks/{cost-tracker-SXLWXE55.js → cost-tracker-CKLDQ5AZ.js} +2 -2
  189. package/dist/cli/chunks/{coverage-D7HCHFP3.js → coverage-AWCS2SP7.js} +3 -3
  190. package/dist/cli/chunks/cross-domain-router-6VYNFQZA.js +2 -0
  191. package/dist/cli/chunks/{cursor-installer-X37VHIKW.js → cursor-installer-4TYF5V5J.js} +2 -2
  192. package/dist/cli/chunks/{daemon-LIW47IDM.js → daemon-CTZXGN5V.js} +4 -4
  193. package/dist/cli/chunks/{daemon-JN7SOH6F.js → daemon-OOY4H6RJ.js} +3 -3
  194. package/dist/cli/chunks/{dag-attention-scheduler-QCHHIZBT.js → dag-attention-scheduler-3WG24Q33.js} +2 -2
  195. package/dist/cli/chunks/{detect-WRFCWAX5.js → detect-O7MUZ6NX.js} +2 -2
  196. package/dist/cli/chunks/{dist-node-6FWT4XZO.js → dist-node-H4XI7BAF.js} +2 -2
  197. package/dist/cli/chunks/{domain-handler-SNFPNMRT.js → domain-handler-FU4WZ23B.js} +2 -2
  198. package/dist/cli/chunks/{domain-plugins-MXKHH62P.js → domain-plugins-XK26KYNJ.js} +2 -2
  199. package/dist/cli/chunks/{domain-transfer-47UJNERX.js → domain-transfer-6B5NOVH6.js} +2 -2
  200. package/dist/cli/chunks/dream-DRSSIHPP.js +2 -0
  201. package/dist/cli/chunks/{embed-and-insert-pattern-LZFAUNBQ.js → embed-and-insert-pattern-XNZXPZNL.js} +2 -2
  202. package/dist/cli/chunks/{eval-AMUXTMJB.js → eval-J3Q5TTI7.js} +2 -2
  203. package/dist/cli/chunks/{experience-capture-middleware-3D65TR2C.js → experience-capture-middleware-COKIGMXW.js} +3 -3
  204. package/dist/cli/chunks/{fast-paths-Y7BBMM56.js → fast-paths-IHWPJI6I.js} +2 -2
  205. package/dist/cli/chunks/{feature-flags-VESRRQ6V.js → feature-flags-G7ONDNTT.js} +2 -2
  206. package/dist/cli/chunks/{feature-flags-JMQQ7JW4.js → feature-flags-WUXFWZLR.js} +2 -2
  207. package/dist/cli/chunks/{file-discovery-JJKQQUV6.js → file-discovery-JN3YMBOJ.js} +2 -2
  208. package/dist/cli/chunks/{fleet-WIGHICJF.js → fleet-OUHUZJE4.js} +3 -3
  209. package/dist/cli/chunks/{gnn-wrapper-BFNPETTT.js → gnn-wrapper-PRH55ZT6.js} +2 -2
  210. package/dist/cli/chunks/{heartbeat-handler-HDXKTGUI.js → heartbeat-handler-6YF35AQS.js} +4 -4
  211. package/dist/cli/chunks/heartbeat-scheduler-FMICCNWK.js +2 -0
  212. package/dist/cli/chunks/hnsw-adapter-4TGBNJEZ.js +2 -0
  213. package/dist/cli/chunks/hnsw-index-J4NSCPAZ.js +2 -0
  214. package/dist/cli/chunks/{hnsw-legacy-bridge-6A7OTAPT.js → hnsw-legacy-bridge-7PAFSTJO.js} +2 -2
  215. package/dist/cli/chunks/{hnswlib-node-LKV2H47B.js → hnswlib-node-UETDZNNN.js} +2 -2
  216. package/dist/cli/chunks/{hooks-KDSFYQQG.js → hooks-QQNUKQAS.js} +10 -10
  217. package/dist/cli/chunks/hybrid-backend-NKPA3QE7.js +2 -0
  218. package/dist/cli/chunks/{hypergraph-engine-GDLPEPUC.js → hypergraph-engine-5GDGE3ET.js} +2 -2
  219. package/dist/cli/chunks/{hypergraph-handler-4UMFA2EW.js → hypergraph-handler-C3F2OJYA.js} +3 -3
  220. package/dist/cli/chunks/impact-analyzer-MWX7XY7X.js +2 -0
  221. package/dist/cli/chunks/{init-handler-4GCHPQHD.js → init-handler-C7ZBDAC5.js} +6 -6
  222. package/dist/cli/chunks/init-wizard-EX5N5Q7X.js +2 -0
  223. package/dist/cli/chunks/kernel-EQLZDHDD.js +2 -0
  224. package/dist/cli/chunks/{kilocode-installer-HJZMT2G5.js → kilocode-installer-VLJENC76.js} +2 -2
  225. package/dist/cli/chunks/{kiro-installer-WUPY67HG.js → kiro-installer-UYPYM6LA.js} +2 -2
  226. package/dist/cli/chunks/knowledge-graph-A3WSMQ6U.js +2 -0
  227. package/dist/cli/chunks/{learning-AXKIS7IG.js → learning-SFIWIG6Z.js} +3 -3
  228. package/dist/cli/chunks/{llm-router-HUDPNZLJ.js → llm-router-V633KAS5.js} +4 -4
  229. package/dist/cli/chunks/llm-router-service-A6XYWTL6.js +2 -0
  230. package/dist/cli/chunks/{load-RM44POD7.js → load-UWZV4JRA.js} +2 -2
  231. package/dist/cli/chunks/load-test-WF2PCXLI.js +2 -0
  232. package/dist/cli/chunks/{mcp-5JVQRBOP.js → mcp-XVFHUKCP.js} +2 -2
  233. package/dist/cli/chunks/{memory-VGZ2V6PL.js → memory-BQ5652VK.js} +5 -5
  234. package/dist/cli/chunks/memory-backend-BKGLI2RF.js +2 -0
  235. package/dist/cli/chunks/{memory-handlers-EI537Z32.js → memory-handlers-PWI3G4P4.js} +2 -2
  236. package/dist/cli/chunks/{multi-model-executor-WPRKCSCM.js → multi-model-executor-X6AQ7VVR.js} +2 -2
  237. package/dist/cli/chunks/{opencode-installer-YAJMRCQO.js → opencode-installer-N3V2Z4EF.js} +2 -2
  238. package/dist/cli/chunks/{orchestrator-MUGWBUYP.js → orchestrator-KNEKS4F7.js} +5 -5
  239. package/dist/cli/chunks/pattern-null-store-YTBLEH7D.js +2 -0
  240. package/dist/cli/chunks/{pattern-usage-recorder-ZQJJ2YNG.js → pattern-usage-recorder-MZIM6XWU.js} +2 -2
  241. package/dist/cli/chunks/{pipeline-F4DXDUDC.js → pipeline-LNLBKSXR.js} +2 -2
  242. package/dist/cli/chunks/{platform-HI3A3OWF.js → platform-OMUDXHD3.js} +2 -2
  243. package/dist/cli/chunks/{plugin-XRITPTR7.js → plugin-HGY6KKZW.js} +2 -2
  244. package/dist/cli/chunks/{prime-radiant-advanced-wasm-HHNJP7CQ.js → prime-radiant-advanced-wasm-LZBHLQYN.js} +2 -2
  245. package/dist/cli/chunks/{project-root-2VN4WO2A.js → project-root-VPSCDBMD.js} +2 -2
  246. package/dist/cli/chunks/protocol-executor-HFR2D54O.js +2 -0
  247. package/dist/cli/chunks/{protocol-handler-ZEVHSEBG.js → protocol-handler-LZXT3TXU.js} +2 -2
  248. package/dist/cli/chunks/{prove-C4BLZWBS.js → prove-I4VKQEYQ.js} +2 -2
  249. package/dist/cli/chunks/qe-reasoning-bank-MYFBQUYV.js +2 -0
  250. package/dist/cli/chunks/{quality-M3DTE4KK.js → quality-VVAWK2DD.js} +2 -2
  251. package/dist/cli/chunks/{quality-gate-V6KS7ML3.js → quality-gate-RGXLWYT6.js} +3 -3
  252. package/dist/cli/chunks/queen-coordinator-CQQMOTIW.js +2 -0
  253. package/dist/cli/chunks/{real-embeddings-YWSE3IRT.js → real-embeddings-WM66PMQ6.js} +2 -2
  254. package/dist/cli/chunks/{ref-validation-ZWOTFA3T.js → ref-validation-ZIWJNI6M.js} +2 -2
  255. package/dist/cli/chunks/{roocode-installer-GJBIWETD.js → roocode-installer-QYSI3STC.js} +2 -2
  256. package/dist/cli/chunks/router-GKWLPA3N.js +2 -0
  257. package/dist/cli/chunks/routing-feedback-WA4D5JRF.js +2 -0
  258. package/dist/cli/chunks/{routing-handler-CFYLGNAR.js → routing-handler-BID3EOLE.js} +2 -2
  259. package/dist/cli/chunks/{ruvector-commands-EDKG456B.js → ruvector-commands-DXIFMF4W.js} +2 -2
  260. package/dist/cli/chunks/rvf-dual-writer-H3ZXS5MA.js +2 -0
  261. package/dist/cli/chunks/rvf-migration-adapter-J7MTCOQA.js +2 -0
  262. package/dist/cli/chunks/{rvf-migration-coordinator-ZMEYMAI6.js → rvf-migration-coordinator-EV5E6SAO.js} +2 -2
  263. package/dist/cli/chunks/rvf-native-adapter-HXBY4VYI.js +2 -0
  264. package/dist/cli/chunks/{rvf-store-integrity-AH6PNJP6.js → rvf-store-integrity-IT6DCCJK.js} +2 -2
  265. package/dist/cli/chunks/safe-db-INVJ5LHR.js +2 -0
  266. package/dist/cli/chunks/schedule-XRIPPL52.js +2 -0
  267. package/dist/cli/chunks/scheduler-HBN3KPRW.js +2 -0
  268. package/dist/cli/chunks/{security-ZU2GW3ZM.js → security-AAFAEATQ.js} +3 -3
  269. package/dist/cli/chunks/{shared-rvf-adapter-5FOVSL3T.js → shared-rvf-adapter-QIHSYHAF.js} +2 -2
  270. package/dist/cli/chunks/{shared-rvf-dual-writer-IO4DC4XV.js → shared-rvf-dual-writer-V7OZ6TBR.js} +2 -2
  271. package/dist/cli/chunks/sqlite-persistence-6KNLT5Q2.js +2 -0
  272. package/dist/cli/chunks/{standalone-memory-3UXDZ7HI.js → standalone-memory-ALZI6VPX.js} +2 -2
  273. package/dist/cli/chunks/{status-handler-264CHTWS.js → status-handler-DED5A3OW.js} +2 -2
  274. package/dist/cli/chunks/{structural-health-E2QPUOZE.js → structural-health-CB7L3NWH.js} +2 -2
  275. package/dist/cli/chunks/{sync-2ACMWM7D.js → sync-QNPGETIO.js} +2 -2
  276. package/dist/cli/chunks/{sync-N2L2OST4.js → sync-S6Z2U46T.js} +2 -2
  277. package/dist/cli/chunks/{task-handler-IB5CVOTY.js → task-handler-CGHXYFIF.js} +2 -2
  278. package/dist/cli/chunks/{task-handlers-QBMYNJHE.js → task-handlers-A6BGQJIB.js} +3 -3
  279. package/dist/cli/chunks/{test-7RGLRDSP.js → test-IISTF5W6.js} +4 -4
  280. package/dist/cli/chunks/{test-scheduling-RJABJT2W.js → test-scheduling-FKYX4OLF.js} +7 -7
  281. package/dist/cli/chunks/{token-bootstrap-JVHMHB72.js → token-bootstrap-OKO3JEKT.js} +2 -2
  282. package/dist/cli/chunks/{token-usage-3ECHQVCY.js → token-usage-25BRFKJ5.js} +2 -2
  283. package/dist/cli/chunks/{transformers-KJH3IJWI.js → transformers-TBVVSZMF.js} +2 -2
  284. package/dist/cli/chunks/{tree-sitter-wasm-parser-XN6PFI32.js → tree-sitter-wasm-parser-N7KCOQT4.js} +2 -2
  285. package/dist/cli/chunks/{types-5BAPXOLS.js → types-TFHWJGRK.js} +2 -2
  286. package/dist/cli/chunks/unified-memory-WVELSL6T.js +2 -0
  287. package/dist/cli/chunks/unified-memory-hnsw-7P5MVKXD.js +2 -0
  288. package/dist/cli/chunks/unified-persistence-YLFCEWYY.js +2 -0
  289. package/dist/cli/chunks/{upgrade-S5NFQZID.js → upgrade-4VWQU7RD.js} +2 -2
  290. package/dist/cli/chunks/{validate-BIBWOLJD.js → validate-FF7WVXMP.js} +2 -2
  291. package/dist/cli/chunks/{validate-swarm-WAA3LBHH.js → validate-swarm-NRLH4EDC.js} +2 -2
  292. package/dist/cli/chunks/visual-security-T5OM742H.js +2 -0
  293. package/dist/cli/chunks/{web-tree-sitter-OTBQTHAV.js → web-tree-sitter-VVU3LULW.js} +2 -2
  294. package/dist/cli/chunks/{windsurf-installer-NNQ22EW6.js → windsurf-installer-Q2ZNWG2D.js} +2 -2
  295. package/dist/cli/chunks/witness-chain-D6X4OZP5.js +2 -0
  296. package/dist/cli/chunks/{witness-chain-E7MUBOJW.js → witness-chain-FP3D4PQL.js} +2 -2
  297. package/dist/cli/chunks/{witness-chain-repair-FW4QSN4C.js → witness-chain-repair-3LG4BF7C.js} +2 -2
  298. package/dist/cli/chunks/{witness-chain-verifier-YMROEBVL.js → witness-chain-verifier-LACGL6BK.js} +2 -2
  299. package/dist/cli/chunks/{witness-key-manager-4CGRNDMJ.js → witness-key-manager-GQZIB5ZE.js} +2 -2
  300. package/dist/cli/chunks/{workflow-4VRSTRAN.js → workflow-JPA5Y7L6.js} +4 -4
  301. package/dist/cli/chunks/workflow-orchestrator-OORDDKT3.js +2 -0
  302. package/dist/cli/chunks/{wrappers-4M4UTGEU.js → wrappers-2B5NHICD.js} +2 -2
  303. package/dist/cli/utils/workflow-parser.js +73 -57
  304. package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
  305. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +17 -15
  306. package/dist/domains/test-execution/services/retry-handler.js +6 -3
  307. package/dist/governance/ab-benchmarking.d.ts +5 -1
  308. package/dist/governance/ab-benchmarking.js +64 -29
  309. package/dist/mcp/bundle.js +414 -412
  310. package/dist/mcp/security/rate-limiter.d.ts +1 -0
  311. package/dist/mcp/security/rate-limiter.js +22 -5
  312. package/dist/mcp/services/session-store.js +17 -17
  313. package/dist/mcp/tools/planning/goap-status.d.ts +2 -0
  314. package/dist/mcp/tools/planning/goap-status.js +8 -2
  315. package/dist/planning/goap-planner.d.ts +3 -0
  316. package/dist/planning/goap-planner.js +80 -37
  317. package/dist/shared/embeddings/embedding-cache.js +1 -1
  318. package/dist/shared/embeddings/nomic-embedder.js +17 -7
  319. package/dist/shared/embeddings/ollama-client.js +5 -3
  320. package/dist/shared/git/git-analyzer.js +31 -30
  321. package/dist/shared/http/http-client.js +20 -13
  322. package/dist/shared/io/file-reader.js +11 -8
  323. package/dist/shared/llm/cache.d.ts +8 -29
  324. package/dist/shared/llm/cache.js +6 -2
  325. package/dist/shared/llm/cost-tracker.js +2 -1
  326. package/dist/shared/llm/provider-manager.js +4 -22
  327. package/dist/shared/llm/providers/gemini.d.ts +1 -0
  328. package/dist/shared/llm/providers/gemini.js +14 -5
  329. package/dist/shared/llm/providers/openrouter.js +6 -3
  330. package/dist/shared/metrics/code-metrics.js +1 -1
  331. package/dist/shared/metrics/system-metrics.js +8 -2
  332. package/dist/shared/retry-engine.js +2 -12
  333. package/dist/test-scheduling/executors/vitest-executor.js +26 -17
  334. package/package.json +3 -1
  335. package/dist/cli/chunks/adapter-XYCOXQCC.js +0 -2
  336. package/dist/cli/chunks/aqe-learning-engine-DTJCROTG.js +0 -2
  337. package/dist/cli/chunks/base-5TQ34GMD.js +0 -2
  338. package/dist/cli/chunks/browser-workflow-KWX4ESTJ.js +0 -2
  339. package/dist/cli/chunks/chunk-7STWD4KJ.js +0 -3
  340. package/dist/cli/chunks/chunk-PFXCRRR6.js +0 -736
  341. package/dist/cli/chunks/chunk-U64QORFO.js +0 -2
  342. package/dist/cli/chunks/client-AJZKCP4I.js +0 -2
  343. package/dist/cli/chunks/core-handlers-MQHEMGDV.js +0 -2
  344. package/dist/cli/chunks/cross-domain-router-3QNMZV5R.js +0 -2
  345. package/dist/cli/chunks/dream-OSWAITPT.js +0 -2
  346. package/dist/cli/chunks/heartbeat-scheduler-BVRVVIE2.js +0 -2
  347. package/dist/cli/chunks/hnsw-adapter-MZTHXULS.js +0 -2
  348. package/dist/cli/chunks/hnsw-index-KHEX4VDG.js +0 -2
  349. package/dist/cli/chunks/hybrid-backend-2B3LCLR4.js +0 -2
  350. package/dist/cli/chunks/impact-analyzer-4R4VWOGQ.js +0 -2
  351. package/dist/cli/chunks/init-wizard-TAOPXHHD.js +0 -2
  352. package/dist/cli/chunks/kernel-6I6VZUWY.js +0 -2
  353. package/dist/cli/chunks/knowledge-graph-KFMTTUR5.js +0 -2
  354. package/dist/cli/chunks/llm-router-service-2D74XVM3.js +0 -2
  355. package/dist/cli/chunks/load-test-53FWOWNS.js +0 -2
  356. package/dist/cli/chunks/memory-backend-KFJDDPEZ.js +0 -2
  357. package/dist/cli/chunks/pattern-null-store-7DMU5CJ4.js +0 -2
  358. package/dist/cli/chunks/protocol-executor-2EMTBTMG.js +0 -2
  359. package/dist/cli/chunks/qe-reasoning-bank-VZHZZPHE.js +0 -2
  360. package/dist/cli/chunks/queen-coordinator-7MYTTUHI.js +0 -2
  361. package/dist/cli/chunks/router-ZD4LXAWA.js +0 -2
  362. package/dist/cli/chunks/routing-feedback-FSLMDVGD.js +0 -2
  363. package/dist/cli/chunks/rvf-dual-writer-LTKTDRFS.js +0 -2
  364. package/dist/cli/chunks/rvf-migration-adapter-IF24EVC5.js +0 -2
  365. package/dist/cli/chunks/rvf-native-adapter-E6JNBKMZ.js +0 -2
  366. package/dist/cli/chunks/safe-db-F6TRB5KZ.js +0 -2
  367. package/dist/cli/chunks/schedule-HBD4BYTE.js +0 -2
  368. package/dist/cli/chunks/scheduler-6FYWPMQC.js +0 -2
  369. package/dist/cli/chunks/sqlite-persistence-DOU72F5Z.js +0 -2
  370. package/dist/cli/chunks/unified-memory-GHAYAXWZ.js +0 -2
  371. package/dist/cli/chunks/unified-memory-hnsw-CCC63YXT.js +0 -2
  372. package/dist/cli/chunks/unified-persistence-HKRHI5PG.js +0 -2
  373. package/dist/cli/chunks/visual-security-APOXJ3Q3.js +0 -2
  374. package/dist/cli/chunks/witness-chain-7IP5IJGT.js +0 -2
  375. package/dist/cli/chunks/workflow-orchestrator-2HNW5ZMQ.js +0 -2
@@ -694,33 +694,50 @@ function detectCircularDependencies(stages) {
694
694
  * Validate cron expression (basic validation)
695
695
  */
696
696
  export function isValidCronExpression(expression) {
697
- // Check for aliases
698
- if (Object.keys(CRON_PATTERNS).includes(expression)) {
699
- return true;
700
- }
701
- // Basic cron validation: 5 fields separated by spaces
702
- const parts = expression.trim().split(/\s+/);
703
- if (parts.length !== 5) {
704
- return false;
705
- }
706
- // Validate each field
707
- const fieldPatterns = [
708
- /^(\*|[0-5]?\d)(-[0-5]?\d)?(\/\d+)?$/, // minute (0-59)
709
- /^(\*|1?\d|2[0-3])(-\d+)?(\/\d+)?$/, // hour (0-23)
710
- /^(\*|[1-9]|[12]\d|3[01])(-\d+)?(\/\d+)?$/, // day of month (1-31)
711
- /^(\*|[1-9]|1[0-2])(-\d+)?(\/\d+)?$/, // month (1-12)
712
- /^(\*|[0-7])(-[0-7])?(\/\d+)?$/, // day of week (0-7)
697
+ return parseCronFields(expression) !== undefined;
698
+ }
699
+ /** Parse the existing numeric five-field grammar and its four named aliases. */
700
+ function parseCronFields(expression) {
701
+ const normalized = Object.hasOwn(CRON_PATTERNS, expression)
702
+ ? CRON_PATTERNS[expression]
703
+ : expression;
704
+ const parts = normalized.trim().split(/\s+/);
705
+ if (parts.length !== 5)
706
+ return undefined;
707
+ const bounds = [[0, 59], [0, 23], [1, 31], [1, 12], [0, 7]];
708
+ const syntax = [
709
+ /^(\*|[0-5]?\d)(-[0-5]?\d)?(\/\d+)?$/,
710
+ /^(\*|1?\d|2[0-3])(-\d+)?(\/\d+)?$/,
711
+ /^(\*|[1-9]|[12]\d|3[01])(-\d+)?(\/\d+)?$/,
712
+ /^(\*|[1-9]|1[0-2])(-\d+)?(\/\d+)?$/,
713
+ /^(\*|[0-7])(-[0-7])?(\/\d+)?$/,
713
714
  ];
714
- for (let i = 0; i < 5; i++) {
715
- // Allow comma-separated values
716
- const values = parts[i].split(',');
717
- for (const value of values) {
718
- if (!fieldPatterns[i].test(value) && value !== '*') {
719
- return false;
715
+ const fields = [];
716
+ for (let index = 0; index < parts.length; index++) {
717
+ const [minimum, maximum] = bounds[index];
718
+ const values = new Set();
719
+ for (const item of parts[index].split(',')) {
720
+ if (!syntax[index].test(item))
721
+ return undefined;
722
+ const match = /^(\*|\d+)(?:-(\d+))?(?:\/(\d+))?$/.exec(item);
723
+ if (!match || (match[1] === '*' && match[2] !== undefined))
724
+ return undefined;
725
+ const start = match[1] === '*' ? minimum : Number(match[1]);
726
+ const end = match[2] !== undefined ? Number(match[2])
727
+ : match[1] === '*' || match[3] !== undefined ? maximum : start;
728
+ const step = match[3] === undefined ? 1 : Number(match[3]);
729
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) ||
730
+ !Number.isSafeInteger(step) || step <= 0 ||
731
+ start < minimum || end > maximum || start > end)
732
+ return undefined;
733
+ for (let value = start; value <= end; value += step) {
734
+ values.add(index === 4 && value === 7 ? 0 : value);
720
735
  }
721
736
  }
737
+ fields.push(values);
722
738
  }
723
- return true;
739
+ // Cronie records DOM_STAR/DOW_STAR from the first character, before parsing lists.
740
+ return { fields: fields, wildcardDay: parts[2].startsWith('*') || parts[4].startsWith('*') };
724
741
  }
725
742
  /**
726
743
  * Parse cron expression to human-readable string
@@ -773,40 +790,39 @@ export function describeCronSchedule(expression) {
773
790
  * Calculate next run time from cron expression
774
791
  */
775
792
  export function calculateNextRun(cronExpression, fromDate = new Date()) {
776
- // Simplified next run calculation
777
- const parts = cronExpression.trim().split(/\s+/);
778
- if (parts.length !== 5) {
779
- // Default to 1 day from now
780
- return new Date(fromDate.getTime() + 24 * 60 * 60 * 1000);
781
- }
782
- const [minute, hour] = parts;
783
- const nextRun = new Date(fromDate);
784
- // Handle specific hour and minute
785
- if (hour !== '*' && minute !== '*') {
786
- nextRun.setHours(parseInt(hour, 10), parseInt(minute, 10), 0, 0);
787
- if (nextRun <= fromDate) {
788
- nextRun.setDate(nextRun.getDate() + 1);
789
- }
790
- }
791
- else if (hour !== '*') {
792
- // Every day at specific hour
793
- nextRun.setHours(parseInt(hour, 10), 0, 0, 0);
794
- if (nextRun <= fromDate) {
795
- nextRun.setDate(nextRun.getDate() + 1);
796
- }
797
- }
798
- else if (minute !== '*') {
799
- // Every hour at specific minute
800
- nextRun.setMinutes(parseInt(minute, 10), 0, 0);
801
- if (nextRun <= fromDate) {
802
- nextRun.setHours(nextRun.getHours() + 1);
793
+ const parsed = parseCronFields(cronExpression);
794
+ if (!parsed)
795
+ throw new Error(`Invalid cron expression: ${cronExpression}`);
796
+ if (!Number.isFinite(fromDate.getTime()))
797
+ throw new Error('Invalid schedule start date');
798
+ const [minutes, hours, days, months, weekdays] = parsed.fields;
799
+ // Preserve the existing host-local timezone. Advance elapsed minutes to
800
+ // skip absent DST times and inspect both occurrences of repeated times.
801
+ let candidate = new Date(Math.floor(fromDate.getTime() / 60000) * 60000 + 60000);
802
+ const deadline = new Date(fromDate);
803
+ deadline.setFullYear(fromDate.getFullYear() + 400);
804
+ // A complete Gregorian cycle contains 146097 days and repeats weekdays.
805
+ // Near the Date maximum a full cycle is not representable: clamp the
806
+ // search to that finite boundary and report the limitation on exhaustion.
807
+ const deadlineMs = Number.isFinite(deadline.getTime())
808
+ ? deadline.getTime() : 8_640_000_000_000_000;
809
+ while (Number.isFinite(candidate.getTime()) && candidate.getTime() <= deadlineMs) {
810
+ const dayMatches = days.has(candidate.getDate());
811
+ const weekdayMatches = weekdays.has(candidate.getDay());
812
+ const calendarMatches = months.has(candidate.getMonth() + 1) &&
813
+ (parsed.wildcardDay ? dayMatches && weekdayMatches : dayMatches || weekdayMatches);
814
+ if (!calendarMatches) {
815
+ // Skip a nonmatching local calendar day instead of scanning its minutes.
816
+ candidate.setHours(24, 0, 0, 0);
817
+ continue;
803
818
  }
804
- }
805
- else {
806
- // Every minute
807
- nextRun.setSeconds(0, 0);
808
- nextRun.setMinutes(nextRun.getMinutes() + 1);
809
- }
810
- return nextRun;
819
+ if (hours.has(candidate.getHours()) && minutes.has(candidate.getMinutes()))
820
+ return candidate;
821
+ candidate = new Date(candidate.getTime() + 60000);
822
+ }
823
+ // An impossible date such as February 31 must not spin indefinitely or
824
+ // silently become a daily schedule. Leap-day/weekday intersections may
825
+ // exceed a leap-day-only horizon, so search one complete Gregorian cycle.
826
+ throw new Error(`No matching cron date within a 400-year Gregorian cycle and the supported Date range: ${cronExpression}`);
811
827
  }
812
828
  //# sourceMappingURL=workflow-parser.js.map
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Detection priority by project type:
8
8
  * 1. Node.js: vitest > jest > fallback pattern matching
9
- * 2. Rust: cargo test --list
9
+ * 2. Rust: cargo test -- --list
10
10
  * 3. Python: pytest --collect-only
11
11
  * 4. Go: go test -list
12
12
  *
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Detection priority by project type:
8
8
  * 1. Node.js: vitest > jest > fallback pattern matching
9
- * 2. Rust: cargo test --list
9
+ * 2. Rust: cargo test -- --list
10
10
  * 3. Python: pytest --collect-only
11
11
  * 4. Go: go test -list
12
12
  *
@@ -262,11 +262,11 @@ function countJestTests(projectPath, config) {
262
262
  }
263
263
  /**
264
264
  * Count tests using Cargo (Rust)
265
- * Uses `cargo test --list` for accurate test enumeration
265
+ * Uses `cargo test -- --list` for accurate test enumeration
266
266
  */
267
267
  function countCargoTests(projectPath, config) {
268
268
  try {
269
- const output = execSync('cargo test --list', {
269
+ const output = execSync('cargo test -- --list', {
270
270
  cwd: projectPath,
271
271
  encoding: 'utf-8',
272
272
  timeout: config.timeout,
@@ -310,13 +310,14 @@ function countPytestTests(projectPath, config) {
310
310
  // Count test function lines (format: "tests/test_foo.py::test_bar")
311
311
  const testLines = output.split('\n').filter(line => line.includes('::test_') || line.includes('::Test'));
312
312
  const total = testLines.length;
313
- // Classify by path patterns
314
- const unit = testLines.filter(t => t.includes('unit') || (!t.includes('integration') && !t.includes('e2e'))).length;
315
- const integration = testLines.filter(t => t.includes('integration') || t.includes('_integration')).length;
313
+ // Match fallback classification precedence so every collected test belongs
314
+ // to exactly one category, even when its path names multiple categories.
316
315
  const e2e = testLines.filter(t => t.includes('e2e') || t.includes('end_to_end')).length;
316
+ const integration = testLines.filter(t => !t.includes('e2e') && !t.includes('end_to_end') && t.includes('integration')).length;
317
+ const unit = total - integration - e2e;
317
318
  return {
318
319
  total,
319
- unit: unit - integration - e2e, // Exclude overlap
320
+ unit,
320
321
  integration,
321
322
  e2e,
322
323
  source: 'pytest',
@@ -343,13 +344,14 @@ function countGoTests(projectPath, config) {
343
344
  encoding: 'utf-8',
344
345
  timeout: config.timeout,
345
346
  });
346
- // Count lines starting with "Test" (Go test naming convention)
347
- const testLines = output.split('\n').filter(line => line.startsWith('Test') || line.startsWith('Example') || line.startsWith('Benchmark'));
348
- const total = testLines.filter(l => l.startsWith('Test')).length;
349
- // Classify by test name patterns
350
- const unit = testLines.filter(t => t.startsWith('Test') && !t.includes('Integration') && !t.includes('E2E')).length;
351
- const integration = testLines.filter(t => t.includes('Integration')).length;
347
+ // Benchmarks and examples are listed too, but are not included in the
348
+ // test total. Apply that same selection to every category.
349
+ const testLines = output.split('\n').filter(line => line.startsWith('Test'));
350
+ const total = testLines.length;
351
+ // Use disjoint categories, with e2e taking precedence over integration.
352
352
  const e2e = testLines.filter(t => t.includes('E2E')).length;
353
+ const integration = testLines.filter(t => !t.includes('E2E') && t.includes('Integration')).length;
354
+ const unit = total - integration - e2e;
353
355
  return {
354
356
  total,
355
357
  unit,
@@ -474,8 +476,8 @@ function countTestsInPythonFile(filePath) {
474
476
  const content = readFileSync(filePath, 'utf-8');
475
477
  // Count def test_ functions and async def test_ functions
476
478
  const funcMatches = content.match(/\bdef\s+test_\w+\s*\(/g) || [];
477
- const asyncMatches = content.match(/\basync\s+def\s+test_\w+\s*\(/g) || [];
478
- return funcMatches.length + asyncMatches.length;
479
+ // The def pattern also matches async def; every declaration counts once.
480
+ return funcMatches.length;
479
481
  }
480
482
  catch {
481
483
  return 0;
@@ -336,6 +336,9 @@ export class RetryHandlerService {
336
336
  */
337
337
  buildTestCommand(runner, testFile, testName) {
338
338
  const npx = this.config.npxPath;
339
+ // These runners interpret name filters as regular expressions, but a
340
+ // FailedTest contains the literal assertion name from the previous run.
341
+ const namePattern = testName?.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') ?? '';
339
342
  switch (runner) {
340
343
  case 'vitest':
341
344
  // vitest run --reporter=json testFile -t "testName"
@@ -344,7 +347,7 @@ export class RetryHandlerService {
344
347
  const report = createVitestJsonReport();
345
348
  const vitestArgs = ['vitest', 'run', '--reporter=json', testFile];
346
349
  if (testName && testName !== testFile) {
347
- vitestArgs.push('-t', testName);
350
+ vitestArgs.push('-t', namePattern);
348
351
  }
349
352
  vitestArgs.push(...report.args);
350
353
  return { command: npx, args: vitestArgs, report };
@@ -354,7 +357,7 @@ export class RetryHandlerService {
354
357
  {
355
358
  const jestArgs = ['jest', '--json', '--testPathPattern', testFile];
356
359
  if (testName && testName !== testFile) {
357
- jestArgs.push('-t', testName);
360
+ jestArgs.push('-t', namePattern);
358
361
  }
359
362
  return { command: npx, args: jestArgs };
360
363
  }
@@ -363,7 +366,7 @@ export class RetryHandlerService {
363
366
  {
364
367
  const mochaArgs = ['mocha', '--reporter', 'json', testFile];
365
368
  if (testName && testName !== testFile) {
366
- mochaArgs.push('--grep', testName);
369
+ mochaArgs.push('--grep', namePattern);
367
370
  }
368
371
  return { command: npx, args: mochaArgs };
369
372
  }
@@ -168,7 +168,8 @@ export interface WinnerResult {
168
168
  benchmarkId: string;
169
169
  winnerId: string;
170
170
  winnerName: string;
171
- confidence: number;
171
+ /** Ranking heuristic, not a probability or statistical confidence level. */
172
+ heuristicScore: number;
172
173
  combinedScore: number;
173
174
  significantMetrics: string[];
174
175
  recommendation: string;
@@ -290,10 +291,13 @@ export declare class ABBenchmarkingFramework {
290
291
  * Calculate statistical significance for a benchmark
291
292
  */
292
293
  calculateStatisticalSignificance(benchmarkId: string): SignificanceResult;
294
+ private calculateSignificance;
293
295
  /**
294
296
  * Get the winner of a benchmark
295
297
  */
296
298
  getWinner(benchmarkId: string): WinnerResult | null;
299
+ /** Require evidence for this candidate over its ranked runner-up. */
300
+ private isSignificantlyBetterThanRunnerUp;
297
301
  /**
298
302
  * Compare two specific variants
299
303
  */
@@ -523,11 +523,17 @@ export class ABBenchmarkingFramework {
523
523
  * Calculate statistical significance for a benchmark
524
524
  */
525
525
  calculateStatisticalSignificance(benchmarkId) {
526
+ return this.calculateSignificance(benchmarkId);
527
+ }
528
+ calculateSignificance(benchmarkId, variantIds) {
526
529
  const benchmark = this.benchmarks.get(benchmarkId);
527
530
  if (!benchmark) {
528
531
  throw new Error(`Benchmark ${benchmarkId} not found`);
529
532
  }
530
- const { config, variantMetrics } = benchmark;
533
+ const { config } = benchmark;
534
+ const variantMetrics = variantIds
535
+ ? new Map(variantIds.map(id => [id, benchmark.variantMetrics.get(id)]))
536
+ : benchmark.variantMetrics;
531
537
  const alpha = 1 - config.confidenceLevel;
532
538
  // Bonferroni correction for multiple comparisons
533
539
  const numComparisons = config.metrics.length;
@@ -540,10 +546,10 @@ export class ABBenchmarkingFramework {
540
546
  const chiSquareResult = chiSquareTest(variants);
541
547
  // Per-metric statistics (pairwise comparisons between first two variants)
542
548
  const metricStatistics = [];
543
- const variantIds = Array.from(variantMetrics.keys());
544
- if (variantIds.length >= 2) {
545
- const v1 = variantMetrics.get(variantIds[0]);
546
- const v2 = variantMetrics.get(variantIds[1]);
549
+ const comparedIds = Array.from(variantMetrics.keys());
550
+ if (comparedIds.length >= 2) {
551
+ const v1 = variantMetrics.get(comparedIds[0]);
552
+ const v2 = variantMetrics.get(comparedIds[1]);
547
553
  for (const metricConfig of config.metrics) {
548
554
  const values1 = (v1.metrics.get(metricConfig.name) || []).map(d => d.value);
549
555
  const values2 = (v2.metrics.get(metricConfig.name) || []).map(d => d.value);
@@ -618,10 +624,10 @@ export class ABBenchmarkingFramework {
618
624
  // Sort by combined score (descending)
619
625
  scores.sort((a, b) => b.score - a.score);
620
626
  const winner = scores[0];
621
- // Calculate confidence based on significance and score gap
627
+ // Calculate a ranking heuristic based on significance and score gap
622
628
  const significance = this.calculateStatisticalSignificance(benchmarkId);
623
629
  const scoreGap = scores.length > 1 ? winner.score - scores[1].score : winner.score;
624
- const confidence = significance.isSignificant
630
+ const heuristicScore = significance.isSignificant
625
631
  ? Math.min(0.99, 0.5 + scoreGap * 0.5 + (significance.powerAnalysis.currentPower * 0.25))
626
632
  : Math.min(0.5, scoreGap * 0.5);
627
633
  const significantMetrics = significance.metricStatistics
@@ -632,12 +638,38 @@ export class ABBenchmarkingFramework {
632
638
  benchmarkId,
633
639
  winnerId: winner.variantId,
634
640
  winnerName: variantConfig?.name || winner.variantId,
635
- confidence,
641
+ heuristicScore,
636
642
  combinedScore: winner.score,
637
643
  significantMetrics,
638
- recommendation: this.generateWinnerRecommendation(winner, confidence, significantMetrics),
644
+ recommendation: this.generateWinnerRecommendation(winner, heuristicScore, significantMetrics),
639
645
  };
640
646
  }
647
+ /** Require evidence for this candidate over its ranked runner-up. */
648
+ isSignificantlyBetterThanRunnerUp(benchmarkId, winnerId) {
649
+ const benchmark = this.benchmarks.get(benchmarkId);
650
+ const scores = this.calculateCombinedScores(benchmark).sort((a, b) => b.score - a.score);
651
+ const [winner, runnerUp] = scores;
652
+ if (!runnerUp || winner.variantId !== winnerId || winner.score <= runnerUp.score) {
653
+ return false;
654
+ }
655
+ const significance = this.calculateSignificance(benchmarkId, [winnerId, runnerUp.variantId]);
656
+ const winnerMetrics = benchmark.variantMetrics.get(winnerId);
657
+ const runnerUpMetrics = benchmark.variantMetrics.get(runnerUp.variantId);
658
+ const successMetrics = benchmark.config.metrics.filter(metric => metric.type === 'success_rate');
659
+ const successContributesToScore = successMetrics.length === 0 ||
660
+ successMetrics.some(metric => metric.weight > 0);
661
+ if (successContributesToScore && significance.chiSquareTest?.isSignificant &&
662
+ this.getSuccessRate(winnerMetrics) > this.getSuccessRate(runnerUpMetrics)) {
663
+ return true;
664
+ }
665
+ return significance.metricStatistics.some(statistic => {
666
+ const metric = benchmark.config.metrics.find(config => config.name === statistic.metric);
667
+ return statistic.isSignificant && metric.weight > 0 &&
668
+ (metric.higherIsBetter
669
+ ? statistic.variantA.mean > statistic.variantB.mean
670
+ : statistic.variantA.mean < statistic.variantB.mean);
671
+ });
672
+ }
641
673
  /**
642
674
  * Compare two specific variants
643
675
  */
@@ -693,9 +725,6 @@ export class ABBenchmarkingFramework {
693
725
  scoreA += normalizedA * metricConfig.weight;
694
726
  scoreB += normalizedB * metricConfig.weight;
695
727
  }
696
- // Add success rate comparison
697
- const successRateA = this.getSuccessRate(metricsA);
698
- const successRateB = this.getSuccessRate(metricsB);
699
728
  const overallWinner = scoreA > scoreB ? variantA : scoreB > scoreA ? variantB : null;
700
729
  const confidence = Math.abs(scoreA - scoreB) / Math.max(scoreA, scoreB, 0.001);
701
730
  return {
@@ -760,16 +789,19 @@ export class ABBenchmarkingFramework {
760
789
  if (winner.significantMetrics.length > 0) {
761
790
  reasoning.push(`Significant improvements in: ${winner.significantMetrics.join(', ')}`);
762
791
  }
763
- if (winner.confidence >= 0.95) {
792
+ if (!this.isSignificantlyBetterThanRunnerUp(benchmarkId, winner.winnerId)) {
793
+ caveats.push('Leading variant is not significantly better than the runner-up');
794
+ }
795
+ else if (winner.heuristicScore >= 0.95) {
764
796
  readyToApply = true;
765
- reasoning.push('High confidence - ready to apply');
797
+ reasoning.push('High heuristic score with runner-up significance - ready to apply');
766
798
  }
767
- else if (winner.confidence >= 0.8 && significance?.isSignificant) {
799
+ else if (winner.heuristicScore >= 0.8) {
768
800
  readyToApply = true;
769
- reasoning.push('Good confidence with statistical significance - ready to apply');
801
+ reasoning.push('Good heuristic score with runner-up significance - ready to apply');
770
802
  }
771
803
  else {
772
- caveats.push(`Confidence (${(winner.confidence * 100).toFixed(1)}%) below recommended threshold`);
804
+ caveats.push(`Heuristic score (${winner.heuristicScore.toFixed(3)}) below recommended threshold`);
773
805
  }
774
806
  }
775
807
  else {
@@ -778,7 +810,7 @@ export class ABBenchmarkingFramework {
778
810
  return {
779
811
  benchmarkId,
780
812
  suggestedWinnerId,
781
- confidence: winner?.confidence ?? 0,
813
+ confidence: winner?.heuristicScore ?? 0,
782
814
  reasoning,
783
815
  caveats,
784
816
  readyToApply,
@@ -798,12 +830,15 @@ export class ABBenchmarkingFramework {
798
830
  if (!winner) {
799
831
  throw new Error(`No winner determined for benchmark ${benchmarkId}`);
800
832
  }
833
+ if (!this.isSignificantlyBetterThanRunnerUp(benchmarkId, winner.winnerId)) {
834
+ throw new Error(`Winner is not significantly better than the runner-up for benchmark ${benchmarkId}`);
835
+ }
801
836
  // Mark benchmark as completed
802
837
  benchmark.status = 'completed';
803
838
  benchmark.endTime = Date.now();
804
839
  benchmark.winnerId = winner.winnerId;
805
840
  // Promote winner in Evolution Pipeline
806
- evolutionPipelineIntegration.promoteRule(winner.winnerId, `Won A/B benchmark ${benchmarkId} with ${(winner.confidence * 100).toFixed(1)}% confidence`);
841
+ evolutionPipelineIntegration.promoteRule(winner.winnerId, `Won A/B benchmark ${benchmarkId} with heuristic score ${winner.heuristicScore.toFixed(3)} and runner-up significance`);
807
842
  // Complete the variant test
808
843
  evolutionPipelineIntegration.completeVariantTest(benchmarkId);
809
844
  this.logEvent('winner_applied', `Applied winner ${winner.winnerId} for benchmark ${benchmarkId}`);
@@ -979,25 +1014,25 @@ export class ABBenchmarkingFramework {
979
1014
  /**
980
1015
  * Generate winner recommendation text
981
1016
  */
982
- generateWinnerRecommendation(winner, confidence, significantMetrics) {
983
- if (confidence >= 0.95) {
1017
+ generateWinnerRecommendation(winner, heuristicScore, significantMetrics) {
1018
+ if (heuristicScore >= 0.95) {
984
1019
  return `Strongly recommend applying ${winner.variantId}. ` +
985
- `High confidence (${(confidence * 100).toFixed(1)}%) with significant improvements ` +
1020
+ `High heuristic score (${heuristicScore.toFixed(3)}) with significant improvements ` +
986
1021
  `in: ${significantMetrics.length > 0 ? significantMetrics.join(', ') : 'overall performance'}.`;
987
1022
  }
988
- else if (confidence >= 0.8) {
1023
+ else if (heuristicScore >= 0.8) {
989
1024
  return `Recommend applying ${winner.variantId}. ` +
990
- `Good confidence (${(confidence * 100).toFixed(1)}%). ` +
991
- `Consider collecting more samples for higher confidence.`;
1025
+ `Good heuristic score (${heuristicScore.toFixed(3)}). ` +
1026
+ `Consider collecting more samples for a higher heuristic score.`;
992
1027
  }
993
- else if (confidence >= 0.6) {
994
- return `${winner.variantId} shows promise with moderate confidence ` +
995
- `(${(confidence * 100).toFixed(1)}%). ` +
1028
+ else if (heuristicScore >= 0.6) {
1029
+ return `${winner.variantId} shows promise with moderate heuristic score ` +
1030
+ `(${heuristicScore.toFixed(3)}). ` +
996
1031
  `Recommend collecting more samples before applying.`;
997
1032
  }
998
1033
  else {
999
1034
  return `Results are inconclusive. ${winner.variantId} is currently leading but ` +
1000
- `confidence (${(confidence * 100).toFixed(1)}%) is low. Continue collecting data.`;
1035
+ `heuristic score (${heuristicScore.toFixed(3)}) is low. Continue collecting data.`;
1001
1036
  }
1002
1037
  }
1003
1038
  /**