agentic-qe 3.13.3 → 3.13.5

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 (414) hide show
  1. package/.agents/skills/aqe-plan-work/SKILL.md +31 -0
  2. package/.agents/skills/aqe-plan-work/agents/openai.yaml +4 -0
  3. package/.agents/skills/aqe-plan-work/references/planning-framework.md +39 -0
  4. package/.agents/skills/aqe-research/SKILL.md +31 -0
  5. package/.agents/skills/aqe-research/agents/openai.yaml +4 -0
  6. package/.agents/skills/aqe-research/references/evidence-rules.md +21 -0
  7. package/.agents/skills/aqe-ruflo/SKILL.md +29 -0
  8. package/.claude/commands/pair/README.md +261 -0
  9. package/.claude/commands/pair/commands.md +546 -0
  10. package/.claude/commands/pair/config.md +510 -0
  11. package/.claude/commands/pair/examples.md +512 -0
  12. package/.claude/commands/pair/modes.md +348 -0
  13. package/.claude/commands/pair/session.md +407 -0
  14. package/.claude/commands/pair/start.md +209 -0
  15. package/.claude/commands/stream-chain/pipeline.md +121 -0
  16. package/.claude/commands/stream-chain/run.md +70 -0
  17. package/.claude/commands/training/README.md +9 -0
  18. package/.claude/commands/training/model-update.md +25 -0
  19. package/.claude/commands/training/neural-patterns.md +108 -0
  20. package/.claude/commands/training/neural-train.md +75 -0
  21. package/.claude/commands/training/pattern-learn.md +25 -0
  22. package/.claude/commands/training/specialization.md +63 -0
  23. package/.claude/commands/truth/start.md +143 -0
  24. package/.claude/commands/verify/check.md +50 -0
  25. package/.claude/commands/verify/start.md +128 -0
  26. package/.claude/helpers/.helpers-version +1 -1
  27. package/.claude/helpers/auto-memory-hook.mjs +430 -430
  28. package/.claude/helpers/helpers.manifest.json +6 -6
  29. package/.claude/helpers/hook-handler.cjs +565 -565
  30. package/.claude/helpers/intelligence.cjs +1058 -1058
  31. package/.claude/helpers/statusline.cjs +1022 -968
  32. package/.claude/helpers/v3/advisor-call.cjs +283 -0
  33. package/.claude/skills/README.md +54 -64
  34. package/.claude/skills/dual-mode/README.md +71 -0
  35. package/.claude/skills/dual-mode/dual-collect.md +103 -0
  36. package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
  37. package/.claude/skills/dual-mode/dual-spawn.md +81 -0
  38. package/.claude/skills/skills-manifest.json +1 -1
  39. package/.codex/hooks/aqe-codex-hook.cjs +34 -9
  40. package/.codex/hooks.json +9 -9
  41. package/CHANGELOG.md +90 -0
  42. package/assets/skills/skills-manifest.json +1 -1
  43. package/dist/cli/bundle.js +5 -5
  44. package/dist/cli/chunks/adapter-QGJAFSG5.js +2 -0
  45. package/dist/cli/chunks/{agent-booster-wasm-YIGGREZN.js → agent-booster-wasm-XDKGG2GP.js} +2 -2
  46. package/dist/cli/chunks/{agent-handler-64O7R55A.js → agent-handler-CTPXGR5P.js} +2 -2
  47. package/dist/cli/chunks/{agent-memory-branch-2ZZBYUP3.js → agent-memory-branch-MG5OV7AY.js} +2 -2
  48. package/dist/cli/chunks/aqe-learning-engine-ZU735SG7.js +2 -0
  49. package/dist/cli/chunks/{arena-PF5WL2WM.js → arena-FAHVOHNG.js} +2 -2
  50. package/dist/cli/chunks/{arena-6YRNQNCX.js → arena-NYO4EUNQ.js} +4 -4
  51. package/dist/cli/chunks/{audit-R53FOYCK.js → audit-6544RL5D.js} +3 -3
  52. package/dist/cli/chunks/base-EKTX2PRE.js +2 -0
  53. package/dist/cli/chunks/{hnswlib-node-QOULNHXS.js → better-sqlite3-MTEONNCQ.js} +2 -2
  54. package/dist/cli/chunks/{brain-handler-J4ICUOUX.js → brain-handler-DPKCUQUC.js} +3 -3
  55. package/dist/cli/chunks/{branch-enumerator-YVPD43TG.js → branch-enumerator-SU2KHC2C.js} +2 -2
  56. package/dist/cli/chunks/{browser-TKVHX53S.js → browser-ITDN72YJ.js} +2 -2
  57. package/dist/cli/chunks/browser-workflow-BUPIMI3E.js +2 -0
  58. package/dist/cli/chunks/{chunk-ORXDKBZC.js → chunk-23AO43XW.js} +1 -1
  59. package/dist/cli/chunks/{chunk-3NML6POU.js → chunk-2CF3XZAS.js} +2 -2
  60. package/dist/cli/chunks/{chunk-5IVOY76M.js → chunk-2KPGJ4LO.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SJWTNKPY.js → chunk-2QI3OJAC.js} +3 -3
  62. package/dist/cli/chunks/{chunk-MYR6CBXC.js → chunk-2RZ2S6YR.js} +2 -2
  63. package/dist/cli/chunks/{chunk-VKUH57JE.js → chunk-2XZWYKXQ.js} +1 -1
  64. package/dist/cli/chunks/{chunk-ZU3XUBDQ.js → chunk-3EWWP3AO.js} +1 -1
  65. package/dist/cli/chunks/{chunk-4Z2AKQP4.js → chunk-3XKCC7LE.js} +1 -1
  66. package/dist/cli/chunks/chunk-42KQE5H6.js +12 -0
  67. package/dist/cli/chunks/{chunk-2MLPO3RZ.js → chunk-43BXSNKU.js} +2 -2
  68. package/dist/cli/chunks/{chunk-UOJ26GXD.js → chunk-4E2NA2GY.js} +2 -2
  69. package/dist/cli/chunks/{chunk-66KIIH6V.js → chunk-4Z7JP7CD.js} +2 -2
  70. package/dist/cli/chunks/{chunk-3J2QITXC.js → chunk-54C3OHES.js} +1 -1
  71. package/dist/cli/chunks/{chunk-5A5EC5RD.js → chunk-557BFPDB.js} +2 -2
  72. package/dist/cli/chunks/{chunk-JG267MVB.js → chunk-5I5KMIFY.js} +2 -2
  73. package/dist/cli/chunks/{chunk-IRX2THND.js → chunk-5YIGAWBO.js} +2 -2
  74. package/dist/cli/chunks/{chunk-PHGOMAIS.js → chunk-64GTU5LR.js} +2 -2
  75. package/dist/cli/chunks/{chunk-HJNFXYX4.js → chunk-6BEMH5K5.js} +1 -1
  76. package/dist/cli/chunks/{chunk-AJ45QR3K.js → chunk-6H3I36DL.js} +2 -2
  77. package/dist/cli/chunks/{chunk-X737I4SO.js → chunk-6L5V3JGJ.js} +1 -1
  78. package/dist/cli/chunks/{chunk-QGJYKXUO.js → chunk-6RV3W2UZ.js} +1 -1
  79. package/dist/cli/chunks/{chunk-XRF5MX4Q.js → chunk-6ZCAZ3TR.js} +2 -2
  80. package/dist/cli/chunks/{chunk-JQTDNUHA.js → chunk-74QRMQFR.js} +2 -2
  81. package/dist/cli/chunks/{chunk-DSUEJK33.js → chunk-76OWM3ZO.js} +2 -2
  82. package/dist/cli/chunks/{chunk-GTURQ454.js → chunk-7A4EXSMN.js} +2 -2
  83. package/dist/cli/chunks/{chunk-DPJLA7JW.js → chunk-7BLXINIL.js} +2 -2
  84. package/dist/cli/chunks/{chunk-4RYU4WMW.js → chunk-7LR4VP2I.js} +1 -1
  85. package/dist/cli/chunks/{chunk-NIA6VTIH.js → chunk-7M4X6WTF.js} +2 -2
  86. package/dist/cli/chunks/{chunk-N3KQRDTM.js → chunk-7PHF2JM3.js} +1 -1
  87. package/dist/cli/chunks/{chunk-7MBPKAQ3.js → chunk-7SQXEYII.js} +2 -2
  88. package/dist/cli/chunks/{chunk-PHBGMXTR.js → chunk-AAGOBPIJ.js} +2 -2
  89. package/dist/cli/chunks/{chunk-33SPAMQZ.js → chunk-AJYJFIKO.js} +2 -2
  90. package/dist/cli/chunks/{chunk-QP4UKSUJ.js → chunk-AKYOY5KR.js} +2 -2
  91. package/dist/cli/chunks/{chunk-HEF6XKA5.js → chunk-AKZ6PWHM.js} +2 -2
  92. package/dist/cli/chunks/{chunk-764G7VK6.js → chunk-APMLMLSL.js} +1 -1
  93. package/dist/cli/chunks/{chunk-KQFMCVBH.js → chunk-AX4XIG4G.js} +2 -2
  94. package/dist/cli/chunks/{chunk-ZLTAAROU.js → chunk-BAJK26EI.js} +2 -2
  95. package/dist/cli/chunks/{chunk-LLQG3F4H.js → chunk-BI6OTPC6.js} +2 -2
  96. package/dist/cli/chunks/chunk-BKI5NFQ5.js +2 -0
  97. package/dist/cli/chunks/{chunk-V6W4IHS5.js → chunk-BUN4WBPW.js} +2 -2
  98. package/dist/cli/chunks/{chunk-UF7JKDWB.js → chunk-BX5MY65W.js} +1 -1
  99. package/dist/cli/chunks/{chunk-KBQRYAHZ.js → chunk-CD4YWKJ2.js} +2 -2
  100. package/dist/cli/chunks/{chunk-VGWHFFK6.js → chunk-CHFZHORO.js} +5 -5
  101. package/dist/cli/chunks/{chunk-UX434RY5.js → chunk-CPIAZGHF.js} +2 -2
  102. package/dist/cli/chunks/{chunk-PS32DXYF.js → chunk-D4P6BKGF.js} +3 -3
  103. package/dist/cli/chunks/{chunk-CBLKYGKT.js → chunk-DFBJPOJR.js} +2 -2
  104. package/dist/cli/chunks/{chunk-XRQGWUDX.js → chunk-DIRFXY3J.js} +7 -7
  105. package/dist/cli/chunks/chunk-DK7MV2W3.js +2 -0
  106. package/dist/cli/chunks/chunk-DVYNBMMP.js +62 -0
  107. package/dist/cli/chunks/{chunk-LWPCGOQM.js → chunk-EGI6SKQD.js} +2 -2
  108. package/dist/cli/chunks/{chunk-RMQRSZB4.js → chunk-ELC3UEML.js} +1 -1
  109. package/dist/cli/chunks/chunk-ELKWYWTD.js +2 -0
  110. package/dist/cli/chunks/{chunk-2BYRQ5MV.js → chunk-EPMUAKU2.js} +2 -2
  111. package/dist/cli/chunks/{chunk-U7DGRHSB.js → chunk-EROQSNGD.js} +2 -2
  112. package/dist/cli/chunks/{chunk-GSG5FASF.js → chunk-EXXWOOUL.js} +3 -3
  113. package/dist/cli/chunks/{chunk-UWBHR4EZ.js → chunk-FQPYD6YE.js} +1 -1
  114. package/dist/cli/chunks/{chunk-OD5R7HRI.js → chunk-FW6OPDA6.js} +1 -1
  115. package/dist/cli/chunks/{chunk-M7XDTQHX.js → chunk-FYWTMDID.js} +2 -2
  116. package/dist/cli/chunks/{chunk-TK6CHESH.js → chunk-G47WJMHM.js} +1 -1
  117. package/dist/cli/chunks/{chunk-LOZRBK2Z.js → chunk-G73XY2NK.js} +2 -2
  118. package/dist/cli/chunks/{chunk-WRC66JTK.js → chunk-GHSP4AC5.js} +1 -1
  119. package/dist/cli/chunks/{chunk-37GCWGXT.js → chunk-GITS44TM.js} +2 -2
  120. package/dist/cli/chunks/{chunk-IH47VGC7.js → chunk-GUO6JZMS.js} +2 -2
  121. package/dist/cli/chunks/{chunk-JLFU5SCI.js → chunk-GWBV26SE.js} +2 -2
  122. package/dist/cli/chunks/{chunk-AXXFY7PX.js → chunk-HBYVYLBN.js} +2 -2
  123. package/dist/cli/chunks/{chunk-46U73TST.js → chunk-HMNBNGNO.js} +1 -1
  124. package/dist/cli/chunks/{chunk-J65XQ6WE.js → chunk-HZV3J4VQ.js} +2 -2
  125. package/dist/cli/chunks/{chunk-PHNNAIFA.js → chunk-IC5JGTM4.js} +1 -1
  126. package/dist/cli/chunks/{chunk-JOHWWTJF.js → chunk-IS3P5VBL.js} +2 -2
  127. package/dist/cli/chunks/{chunk-64C4SS66.js → chunk-JID7JO7K.js} +2 -2
  128. package/dist/cli/chunks/{chunk-DTOKJKSE.js → chunk-JOJ2UFHM.js} +2 -2
  129. package/dist/cli/chunks/{chunk-MGKJFO57.js → chunk-JTUTZUED.js} +2 -2
  130. package/dist/cli/chunks/{chunk-2QKSIHXO.js → chunk-JX5IY2YK.js} +1 -1
  131. package/dist/cli/chunks/{chunk-EEG4G5JG.js → chunk-K55D3PAR.js} +3 -3
  132. package/dist/cli/chunks/{chunk-TNM7X2GD.js → chunk-KAVYTFAS.js} +2 -2
  133. package/dist/cli/chunks/{chunk-NUPAGPN6.js → chunk-KRCIC4JK.js} +2 -2
  134. package/dist/cli/chunks/{chunk-VFZNVJP2.js → chunk-L6H4MWVN.js} +2 -2
  135. package/dist/cli/chunks/{chunk-QZ3EIONO.js → chunk-L6I2Q6UQ.js} +1 -1
  136. package/dist/cli/chunks/{chunk-A547LEUW.js → chunk-LARAXKTZ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-6I2L22WS.js → chunk-LELWVGN6.js} +1 -1
  138. package/dist/cli/chunks/chunk-M7456ZW5.js +2 -0
  139. package/dist/cli/chunks/{chunk-J5AIMM2J.js → chunk-MF6OT43N.js} +1 -1
  140. package/dist/cli/chunks/{chunk-WHUQDBV7.js → chunk-MX35PIGJ.js} +2 -2
  141. package/dist/cli/chunks/{chunk-RRHIEG4Y.js → chunk-ND7IWTVQ.js} +2 -2
  142. package/dist/cli/chunks/{chunk-TRPRFW27.js → chunk-NFE4RV2Q.js} +2 -2
  143. package/dist/cli/chunks/{chunk-37I4AMCT.js → chunk-NVZ3QROA.js} +2 -2
  144. package/dist/cli/chunks/{chunk-6C3PDY72.js → chunk-OF5UL3FA.js} +1 -1
  145. package/dist/cli/chunks/{chunk-JBWXBDJX.js → chunk-OGUPLNRY.js} +1 -1
  146. package/dist/cli/chunks/chunk-OJZ5LI3O.js +2 -0
  147. package/dist/cli/chunks/{chunk-ZIYCZZYD.js → chunk-OQ4HOHBI.js} +2 -2
  148. package/dist/cli/chunks/{chunk-2G2XD6EM.js → chunk-OUWZTYRZ.js} +2 -2
  149. package/dist/cli/chunks/{chunk-IZIYFVAZ.js → chunk-PDOL3FGO.js} +3 -3
  150. package/dist/cli/chunks/{chunk-NF2N2FIY.js → chunk-PEHSTLU7.js} +1 -1
  151. package/dist/cli/chunks/{chunk-WVWWTRKT.js → chunk-PKCVQ2I4.js} +1 -1
  152. package/dist/cli/chunks/{chunk-CW7BWFFF.js → chunk-PNDWHSZO.js} +2 -2
  153. package/dist/cli/chunks/{chunk-IKPBQZQP.js → chunk-PSD2L2JB.js} +2 -2
  154. package/dist/cli/chunks/{chunk-DSGKRXHF.js → chunk-Q3J5OTZ2.js} +1 -1
  155. package/dist/cli/chunks/{chunk-PY55ZD2G.js → chunk-QHX7VLVT.js} +2 -2
  156. package/dist/cli/chunks/{chunk-7TG7LJAB.js → chunk-QIHKSRUZ.js} +2 -2
  157. package/dist/cli/chunks/{chunk-B7XZJBMT.js → chunk-QLD2WVWN.js} +2 -2
  158. package/dist/cli/chunks/{chunk-HOIH542Y.js → chunk-R4VDRE75.js} +1 -1
  159. package/dist/cli/chunks/{chunk-A6J5MAVO.js → chunk-RDHBUCKQ.js} +182 -201
  160. package/dist/cli/chunks/{chunk-OU5CZFBG.js → chunk-RGBYJAKQ.js} +3 -3
  161. package/dist/cli/chunks/{chunk-GNCGRDQ2.js → chunk-RKXN5TVS.js} +1 -1
  162. package/dist/cli/chunks/{chunk-RWPWD5GG.js → chunk-S2EUFKHL.js} +2 -2
  163. package/dist/cli/chunks/{chunk-CVFUANMU.js → chunk-SN57SNLU.js} +2 -2
  164. package/dist/cli/chunks/{chunk-OX6WPOGR.js → chunk-SQDHFTGQ.js} +3 -3
  165. package/dist/cli/chunks/{chunk-P5CQMDFQ.js → chunk-THQ5ZBWP.js} +2 -2
  166. package/dist/cli/chunks/{chunk-BDOD534O.js → chunk-TU5S33SD.js} +2 -2
  167. package/dist/cli/chunks/{chunk-22WFXSXB.js → chunk-U5GGDJ44.js} +2 -2
  168. package/dist/cli/chunks/{chunk-KQ5GLUOB.js → chunk-UGER2PGN.js} +4 -4
  169. package/dist/cli/chunks/{chunk-TW5QWNT4.js → chunk-UUFLYBUO.js} +2 -2
  170. package/dist/cli/chunks/{chunk-QFANYWC5.js → chunk-UWM4CCK7.js} +1 -1
  171. package/dist/cli/chunks/{chunk-FF53QW6C.js → chunk-V2T7QEPV.js} +1 -1
  172. package/dist/cli/chunks/{chunk-EMH54CO7.js → chunk-VE5STFDP.js} +2 -2
  173. package/dist/cli/chunks/{chunk-APXJJRU4.js → chunk-VNRWJ5JZ.js} +2 -2
  174. package/dist/cli/chunks/{chunk-N7IRBQ4D.js → chunk-VRV7CXEM.js} +1 -1
  175. package/dist/cli/chunks/{chunk-CXPMA7LY.js → chunk-W7H46LAX.js} +1 -1
  176. package/dist/cli/chunks/{chunk-3CFWNT3F.js → chunk-WAELEQP5.js} +2 -2
  177. package/dist/cli/chunks/{chunk-JHOJG5VO.js → chunk-WDDU4I5Z.js} +1 -1
  178. package/dist/cli/chunks/{chunk-SAMAYDVS.js → chunk-WLY2J6JP.js} +2 -2
  179. package/dist/cli/chunks/{chunk-62F5M5OO.js → chunk-WSSFH23M.js} +1 -1
  180. package/dist/cli/chunks/{chunk-N4OBRS6S.js → chunk-WZI2REDL.js} +2 -2
  181. package/dist/cli/chunks/{chunk-7AHQ7ROU.js → chunk-X53GJW2E.js} +2 -2
  182. package/dist/cli/chunks/{chunk-H2BR5MCX.js → chunk-XACF7ZLM.js} +2 -2
  183. package/dist/cli/chunks/{chunk-QZS3XCU5.js → chunk-XNGYWOAK.js} +2 -2
  184. package/dist/cli/chunks/{chunk-F6V5POSK.js → chunk-YFD6K7AS.js} +75 -75
  185. package/dist/cli/chunks/{chunk-W6OIDL4J.js → chunk-YG45ZONW.js} +2 -2
  186. package/dist/cli/chunks/{chunk-FGIZVGIE.js → chunk-YGMCRJSC.js} +2 -2
  187. package/dist/cli/chunks/{chunk-SSXCHSVM.js → chunk-YIEMVVUH.js} +2 -2
  188. package/dist/cli/chunks/{chunk-ZI7BWJJW.js → chunk-YSWI3APU.js} +2 -2
  189. package/dist/cli/chunks/{chunk-ADBTOUOX.js → chunk-YU4U3BUY.js} +1 -1
  190. package/dist/cli/chunks/{chunk-K2D3YW2N.js → chunk-Z5YNYVFO.js} +1 -1
  191. package/dist/cli/chunks/{chunk-UAXFRKR3.js → chunk-ZE3WS57T.js} +2 -2
  192. package/dist/cli/chunks/{chunk-C7AXBCMS.js → chunk-ZMA5OWIQ.js} +4 -4
  193. package/dist/cli/chunks/{chunk-RU23JXCG.js → chunk-ZOD37GNG.js} +3 -3
  194. package/dist/cli/chunks/{chunk-MNEQESQJ.js → chunk-ZQ7XQLLV.js} +3 -3
  195. package/dist/cli/chunks/{chunk-TGVDKSSS.js → chunk-ZUIPUO7Q.js} +1 -1
  196. package/dist/cli/chunks/{chunk-L4O2645U.js → chunk-ZWLFEZQC.js} +1 -1
  197. package/dist/cli/chunks/{ci-G2NEYLVO.js → ci-IRCNFD32.js} +2 -2
  198. package/dist/cli/chunks/{ci-output-SZFEXGBU.js → ci-output-NFOUNDJ2.js} +2 -2
  199. package/dist/cli/chunks/{circuit-breaker-ZD7PJY6N.js → circuit-breaker-GB7SQRD2.js} +2 -2
  200. package/dist/cli/chunks/{claude-flow-setup-DAVANGUJ.js → claude-flow-setup-STFKPPVL.js} +2 -2
  201. package/dist/cli/chunks/client-M4WF22UT.js +2 -0
  202. package/dist/cli/chunks/{cline-installer-WCPKWLY7.js → cline-installer-MLKKIHIV.js} +2 -2
  203. package/dist/cli/chunks/{code-324ZJR3V.js → code-ZRCJC42H.js} +2 -2
  204. package/dist/cli/chunks/{code-index-extractor-EWVSXJHR.js → code-index-extractor-VWDYYQY2.js} +2 -2
  205. package/dist/cli/chunks/codex-installer-I5BTWYQV.js +15 -0
  206. package/dist/cli/chunks/{completions-ZAWBZWYK.js → completions-5JCAFTQV.js} +2 -2
  207. package/dist/cli/chunks/{complexity-analyzer-S3H2IRON.js → complexity-analyzer-6JLLAPGO.js} +2 -2
  208. package/dist/cli/chunks/{continuedev-installer-4DDFAJ26.js → continuedev-installer-YBOLMUZR.js} +2 -2
  209. package/dist/cli/chunks/{copilot-installer-KBBAL3G5.js → copilot-installer-GDBJZBXS.js} +2 -2
  210. package/dist/cli/chunks/core-handlers-3MNFXL44.js +2 -0
  211. package/dist/cli/chunks/{cost-tracker-2YM7SGBW.js → cost-tracker-NEAVGEZI.js} +2 -2
  212. package/dist/cli/chunks/{coverage-6CCBAORJ.js → coverage-DXS5XNAA.js} +3 -3
  213. package/dist/cli/chunks/cross-domain-router-Q5X6ZLJY.js +2 -0
  214. package/dist/cli/chunks/{cursor-installer-24DKXNU5.js → cursor-installer-3KEMFIFA.js} +2 -2
  215. package/dist/cli/chunks/{daemon-M2PSDIZF.js → daemon-FT2J6VY4.js} +3 -3
  216. package/dist/cli/chunks/{daemon-JLF6CRBS.js → daemon-JN377KTA.js} +4 -4
  217. package/dist/cli/chunks/{dag-attention-scheduler-Y5HSZDRV.js → dag-attention-scheduler-EJFEWFXI.js} +2 -2
  218. package/dist/cli/chunks/{detect-6Y227IJ6.js → detect-E5MN6N3L.js} +2 -2
  219. package/dist/cli/chunks/{dist-node-EGOJXGTA.js → dist-node-ZFSAQMFD.js} +2 -2
  220. package/dist/cli/chunks/{domain-handler-G3JEWRE5.js → domain-handler-S7VFZ2MY.js} +2 -2
  221. package/dist/cli/chunks/{domain-transfer-XOHI3EMJ.js → domain-transfer-LGHT3FN4.js} +2 -2
  222. package/dist/cli/chunks/dream-5QB6JABW.js +2 -0
  223. package/dist/cli/chunks/{embed-and-insert-pattern-CSSA55L4.js → embed-and-insert-pattern-OVQS6IKK.js} +2 -2
  224. package/dist/cli/chunks/{eval-NHBXOXDV.js → eval-45UWDD2R.js} +2 -2
  225. package/dist/cli/chunks/{experience-capture-middleware-B7ZDV5UY.js → experience-capture-middleware-XDRJSNPY.js} +3 -3
  226. package/dist/cli/chunks/{fast-paths-XGKSBALA.js → fast-paths-VEDCJL75.js} +2 -2
  227. package/dist/cli/chunks/{feature-flags-ZVD73ZYK.js → feature-flags-NOTQVBLP.js} +2 -2
  228. package/dist/cli/chunks/{feature-flags-NBUDJSWJ.js → feature-flags-TGA3NWVL.js} +2 -2
  229. package/dist/cli/chunks/file-discovery-AHMR6IGX.js +2 -0
  230. package/dist/cli/chunks/{fleet-LF77P3BW.js → fleet-CQBUCH2S.js} +3 -3
  231. package/dist/cli/chunks/{gnn-wrapper-UXNT7BEN.js → gnn-wrapper-SOZCIONJ.js} +2 -2
  232. package/dist/cli/chunks/{heartbeat-handler-C4LMU5LA.js → heartbeat-handler-6XNV4DGM.js} +4 -4
  233. package/dist/cli/chunks/heartbeat-scheduler-ZRLIMPKO.js +2 -0
  234. package/dist/cli/chunks/hnsw-adapter-R4VAEQ2B.js +2 -0
  235. package/dist/cli/chunks/hnsw-index-GTUOS6DF.js +2 -0
  236. package/dist/cli/chunks/{hnsw-legacy-bridge-EHHBIWS3.js → hnsw-legacy-bridge-UILVP37N.js} +2 -2
  237. package/dist/cli/chunks/hnswlib-node-OHJQOSAH.js +2 -0
  238. package/dist/cli/chunks/{hooks-AGE3HCFI.js → hooks-QVDOGEHG.js} +10 -10
  239. package/dist/cli/chunks/hybrid-router-CYEXFWDT.js +2 -0
  240. package/dist/cli/chunks/{hypergraph-engine-E5QX5MEB.js → hypergraph-engine-YMVPBXZS.js} +2 -2
  241. package/dist/cli/chunks/{hypergraph-handler-ZZHBANYB.js → hypergraph-handler-SHUNZXUK.js} +3 -3
  242. package/dist/cli/chunks/impact-analyzer-HMJ7LAXR.js +2 -0
  243. package/dist/cli/chunks/{init-handler-PNVRBZZT.js → init-handler-JE5FYJAV.js} +16 -12
  244. package/dist/cli/chunks/init-wizard-OIK6S3PQ.js +2 -0
  245. package/dist/cli/chunks/kernel-NZCGR72Y.js +2 -0
  246. package/dist/cli/chunks/{kilocode-installer-TR53QKPU.js → kilocode-installer-TVP4YOOK.js} +2 -2
  247. package/dist/cli/chunks/{kiro-installer-MJW6LCAX.js → kiro-installer-XBSGANX7.js} +2 -2
  248. package/dist/cli/chunks/knowledge-graph-HA7XW46B.js +2 -0
  249. package/dist/cli/chunks/{learning-6LLGHP2Q.js → learning-O4ZXQVRE.js} +3 -3
  250. package/dist/cli/chunks/{llm-router-DBLV3VGG.js → llm-router-FXXJHARR.js} +4 -4
  251. package/dist/cli/chunks/llm-router-service-FVGQSXYC.js +2 -0
  252. package/dist/cli/chunks/{load-LAZ3E5PE.js → load-IVF6G2SK.js} +2 -2
  253. package/dist/cli/chunks/load-test-IQTO35GE.js +2 -0
  254. package/dist/cli/chunks/{mcp-L5QXHSEY.js → mcp-VXSDVG3H.js} +2 -2
  255. package/dist/cli/chunks/{memory-YR5PCMWA.js → memory-BINJV3M6.js} +5 -5
  256. package/dist/cli/chunks/memory-backend-YGSOJ7SI.js +2 -0
  257. package/dist/cli/chunks/{memory-handlers-BSRTZQYR.js → memory-handlers-BJNFJZFP.js} +2 -2
  258. package/dist/cli/chunks/{multi-model-executor-RECZ3ACW.js → multi-model-executor-RJHYK6JI.js} +2 -2
  259. package/dist/cli/chunks/{opencode-installer-4TDUB7HH.js → opencode-installer-VCTF5ETL.js} +2 -2
  260. package/dist/cli/chunks/{orchestrator-PHDKJ5C4.js → orchestrator-5SKZ2BOK.js} +11 -11
  261. package/dist/cli/chunks/pattern-null-store-4WN5O2PF.js +2 -0
  262. package/dist/cli/chunks/{pattern-usage-recorder-QK2FADRS.js → pattern-usage-recorder-AY2DAOQO.js} +2 -2
  263. package/dist/cli/chunks/{pipeline-JQJYSN43.js → pipeline-EMBMC75N.js} +2 -2
  264. package/dist/cli/chunks/platform-GADIFXCI.js +2 -0
  265. package/dist/cli/chunks/{plugin-766MBGK6.js → plugin-Q234ZAAY.js} +2 -2
  266. package/dist/cli/chunks/{prime-radiant-advanced-wasm-XQERZNSK.js → prime-radiant-advanced-wasm-CXXKYB2P.js} +2 -2
  267. package/dist/cli/chunks/protocol-executor-EYTJXPXY.js +2 -0
  268. package/dist/cli/chunks/{protocol-handler-FAK4MMNA.js → protocol-handler-ZZRFBVNA.js} +2 -2
  269. package/dist/cli/chunks/{prove-HYBVXOGW.js → prove-7674ATXK.js} +2 -2
  270. package/dist/cli/chunks/provider-manager-TM3JHYLL.js +2 -0
  271. package/dist/cli/chunks/qe-reasoning-bank-6JLFP3HE.js +2 -0
  272. package/dist/cli/chunks/quality-QCIGVN2S.js +7 -0
  273. package/dist/cli/chunks/{quality-gate-RK32VMO7.js → quality-gate-AKV564GE.js} +3 -3
  274. package/dist/cli/chunks/queen-coordinator-OKGOKGHI.js +2 -0
  275. package/dist/cli/chunks/{real-embeddings-GI7CRHE2.js → real-embeddings-74POUVMX.js} +2 -2
  276. package/dist/cli/chunks/{roocode-installer-BS3XWJJI.js → roocode-installer-INBL5AG7.js} +2 -2
  277. package/dist/cli/chunks/router-J45OF4SP.js +2 -0
  278. package/dist/cli/chunks/routing-feedback-VTZFH57X.js +2 -0
  279. package/dist/cli/chunks/{routing-handler-XMGRJDHH.js → routing-handler-C7HMM7RL.js} +2 -2
  280. package/dist/cli/chunks/{ruvector-commands-NDL3ONNC.js → ruvector-commands-PT6LRVCW.js} +2 -2
  281. package/dist/cli/chunks/{rvf-dual-writer-XAJOYGJ2.js → rvf-dual-writer-PRKROTP3.js} +2 -2
  282. package/dist/cli/chunks/{rvf-migration-adapter-WXFRZZ26.js → rvf-migration-adapter-ZI2XW4UX.js} +2 -2
  283. package/dist/cli/chunks/{rvf-migration-coordinator-WFXA2VUQ.js → rvf-migration-coordinator-5JTGP35V.js} +2 -2
  284. package/dist/cli/chunks/rvf-native-adapter-BDPUBFNP.js +2 -0
  285. package/dist/cli/chunks/{rvf-store-integrity-I7PFJZCK.js → rvf-store-integrity-3B5TZTFR.js} +2 -2
  286. package/dist/cli/chunks/safe-db-FHJBWJIB.js +2 -0
  287. package/dist/cli/chunks/schedule-LP7YYT4P.js +2 -0
  288. package/dist/cli/chunks/scheduler-BOZWGKJG.js +2 -0
  289. package/dist/cli/chunks/{security-H3WY76GF.js → security-IMIWSAHW.js} +3 -3
  290. package/dist/cli/chunks/{shared-rvf-adapter-GRTJCLW6.js → shared-rvf-adapter-UDKJNX6I.js} +2 -2
  291. package/dist/cli/chunks/{shared-rvf-dual-writer-46XE5R2B.js → shared-rvf-dual-writer-FQOBQ6S5.js} +2 -2
  292. package/dist/cli/chunks/sqlite-persistence-TDM36AHF.js +2 -0
  293. package/dist/cli/chunks/{status-handler-VUIFMY4F.js → status-handler-7WON7M7F.js} +2 -2
  294. package/dist/cli/chunks/{structural-health-I7HC477E.js → structural-health-JTKTO3A4.js} +2 -2
  295. package/dist/cli/chunks/{sync-M6LUV5R4.js → sync-6ABYTAOL.js} +2 -2
  296. package/dist/cli/chunks/{sync-RO2YGMBF.js → sync-UJSHBY3B.js} +2 -2
  297. package/dist/cli/chunks/{task-handler-BJJTZ7AU.js → task-handler-5TZNOCCB.js} +2 -2
  298. package/dist/cli/chunks/{task-handlers-B6S4NEN3.js → task-handlers-G7ZUGBHM.js} +3 -3
  299. package/dist/cli/chunks/test-BSJ6MVTG.js +33 -0
  300. package/dist/cli/chunks/{test-scheduling-4ISKEFR6.js → test-scheduling-OSJJXIYQ.js} +3 -3
  301. package/dist/cli/chunks/{token-bootstrap-BOIYBZHW.js → token-bootstrap-MRNFR4YI.js} +2 -2
  302. package/dist/cli/chunks/{token-usage-6ZZC7RLT.js → token-usage-YQN7ND7G.js} +2 -2
  303. package/dist/cli/chunks/{transformers-55VI4OGW.js → transformers-QL3AG25C.js} +2 -2
  304. package/dist/cli/chunks/{tree-sitter-wasm-parser-6GRRGB3K.js → tree-sitter-wasm-parser-BECZRRZP.js} +2 -2
  305. package/dist/cli/chunks/{types-SXDF7QQT.js → types-FQSNLPWS.js} +2 -2
  306. package/dist/cli/chunks/unified-memory-6PHUOZRH.js +2 -0
  307. package/dist/cli/chunks/unified-memory-hnsw-WYSFH3PS.js +2 -0
  308. package/dist/cli/chunks/unified-persistence-QBGHDCCO.js +2 -0
  309. package/dist/cli/chunks/{upgrade-PMPB7NGB.js → upgrade-2ICXXV6D.js} +2 -2
  310. package/dist/cli/chunks/{validate-G37QKKXK.js → validate-LPAUH2F4.js} +2 -2
  311. package/dist/cli/chunks/{validate-swarm-6X22J3VD.js → validate-swarm-VWVE2GM7.js} +2 -2
  312. package/dist/cli/chunks/{vibium-SGBJKHQL.js → vibium-U3LBEI4K.js} +2 -2
  313. package/dist/cli/chunks/visual-security-LH7DRCDS.js +2 -0
  314. package/dist/cli/chunks/{web-tree-sitter-S46Y5BUJ.js → web-tree-sitter-QGZXQPXU.js} +2 -2
  315. package/dist/cli/chunks/{windsurf-installer-PTYCETNM.js → windsurf-installer-GGLQJWUI.js} +2 -2
  316. package/dist/cli/chunks/witness-chain-2BDZOPJ2.js +2 -0
  317. package/dist/cli/chunks/{witness-chain-5SCRFT2K.js → witness-chain-47A2AXUS.js} +2 -2
  318. package/dist/cli/chunks/{witness-key-manager-XIAMRVUZ.js → witness-key-manager-FVS7UOWM.js} +2 -2
  319. package/dist/cli/chunks/{workflow-BPQA2NAI.js → workflow-KIZPLTYW.js} +4 -4
  320. package/dist/cli/chunks/workflow-orchestrator-UYOPFK2T.js +2 -0
  321. package/dist/cli/chunks/{wrappers-IWZZZOAU.js → wrappers-ER6XCMT6.js} +2 -2
  322. package/dist/cli/commands/platform.d.ts +17 -0
  323. package/dist/cli/commands/platform.js +91 -41
  324. package/dist/cli/commands/quality.d.ts +12 -0
  325. package/dist/cli/commands/quality.js +50 -74
  326. package/dist/cli/commands/test.js +33 -4
  327. package/dist/cli/handlers/init-handler.d.ts +3 -0
  328. package/dist/cli/handlers/init-handler.js +13 -4
  329. package/dist/cli/utils/file-discovery.d.ts +1 -0
  330. package/dist/cli/utils/file-discovery.js +13 -1
  331. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +5 -0
  332. package/dist/domains/quality-assessment/index.d.ts +1 -0
  333. package/dist/domains/quality-assessment/index.js +1 -0
  334. package/dist/domains/quality-assessment/quality-evidence.d.ts +41 -0
  335. package/dist/domains/quality-assessment/quality-evidence.js +115 -0
  336. package/dist/domains/test-execution/coordinator.d.ts +1 -0
  337. package/dist/domains/test-execution/coordinator.js +11 -4
  338. package/dist/domains/test-execution/interfaces.d.ts +2 -0
  339. package/dist/domains/test-execution/services/retry-handler.js +3 -3
  340. package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
  341. package/dist/domains/test-execution/services/test-executor.js +93 -30
  342. package/dist/domains/test-generation/gates/test-quality-gate.d.ts +8 -2
  343. package/dist/domains/test-generation/gates/test-quality-gate.js +93 -4
  344. package/dist/domains/test-generation/generators/base-test-generator.js +0 -15
  345. package/dist/domains/test-generation/generators/jest-vitest-generator.js +17 -26
  346. package/dist/domains/test-generation/services/test-generator.js +7 -2
  347. package/dist/init/codex-installer.d.ts +22 -3
  348. package/dist/init/codex-installer.js +132 -54
  349. package/dist/init/codex-skill-manifest.d.ts +43 -0
  350. package/dist/init/codex-skill-manifest.js +21 -0
  351. package/dist/init/orchestrator.js +2 -0
  352. package/dist/init/phases/07-hooks.js +3 -1
  353. package/dist/init/phases/09-assets.js +10 -1
  354. package/dist/init/phases/phase-interface.d.ts +4 -0
  355. package/dist/init/settings-merge.d.ts +3 -1
  356. package/dist/init/settings-merge.js +9 -3
  357. package/dist/integrations/embeddings/index/HNSWIndex.js +2 -0
  358. package/dist/learning/real-embeddings.js +19 -3
  359. package/dist/mcp/bundle.js +453 -472
  360. package/dist/mcp/tools/quality-assessment/evaluate.d.ts +7 -0
  361. package/dist/mcp/tools/quality-assessment/evaluate.js +72 -20
  362. package/dist/mcp/tools/security-compliance/scan.js +8 -1
  363. package/package.json +6 -2
  364. package/dist/cli/chunks/adapter-NIUFP6QX.js +0 -2
  365. package/dist/cli/chunks/aqe-learning-engine-DC4DNCPB.js +0 -2
  366. package/dist/cli/chunks/base-EXD3ULZT.js +0 -2
  367. package/dist/cli/chunks/better-sqlite3-OW5HIPEN.js +0 -2
  368. package/dist/cli/chunks/browser-workflow-KOMASCB7.js +0 -2
  369. package/dist/cli/chunks/chunk-5IH22DLD.js +0 -12
  370. package/dist/cli/chunks/chunk-6R6QGQ7D.js +0 -2
  371. package/dist/cli/chunks/chunk-A22RTEJ3.js +0 -62
  372. package/dist/cli/chunks/chunk-H4XZOIV6.js +0 -2
  373. package/dist/cli/chunks/chunk-T5L65R23.js +0 -2
  374. package/dist/cli/chunks/chunk-VRTNRI4H.js +0 -2
  375. package/dist/cli/chunks/client-ZJQMJO5N.js +0 -2
  376. package/dist/cli/chunks/codex-installer-HVSZBHH2.js +0 -10
  377. package/dist/cli/chunks/core-handlers-U2YJLH6O.js +0 -2
  378. package/dist/cli/chunks/cross-domain-router-E7EMKZEK.js +0 -2
  379. package/dist/cli/chunks/dream-ZMNQYBJO.js +0 -2
  380. package/dist/cli/chunks/file-discovery-C42TEUKT.js +0 -2
  381. package/dist/cli/chunks/heartbeat-scheduler-2JL4MAJR.js +0 -2
  382. package/dist/cli/chunks/hnsw-adapter-AZD6O35G.js +0 -2
  383. package/dist/cli/chunks/hnsw-index-WJLE4S5L.js +0 -2
  384. package/dist/cli/chunks/hybrid-router-YTKJBAS2.js +0 -2
  385. package/dist/cli/chunks/impact-analyzer-CX56GZXA.js +0 -2
  386. package/dist/cli/chunks/init-wizard-WE6HIC66.js +0 -2
  387. package/dist/cli/chunks/kernel-MT55LNNI.js +0 -2
  388. package/dist/cli/chunks/knowledge-graph-WN3LQ2W7.js +0 -2
  389. package/dist/cli/chunks/llm-router-service-NKHEQQMN.js +0 -2
  390. package/dist/cli/chunks/load-test-3WIQASDF.js +0 -2
  391. package/dist/cli/chunks/memory-backend-W6YSNT6O.js +0 -2
  392. package/dist/cli/chunks/pattern-null-store-IV3ZESTR.js +0 -2
  393. package/dist/cli/chunks/platform-FA5TOPTH.js +0 -2
  394. package/dist/cli/chunks/protocol-executor-GFAG5G6K.js +0 -2
  395. package/dist/cli/chunks/provider-manager-TIVIJIYH.js +0 -2
  396. package/dist/cli/chunks/qe-reasoning-bank-BYE7YF6Y.js +0 -2
  397. package/dist/cli/chunks/quality-EGSO2RAX.js +0 -7
  398. package/dist/cli/chunks/queen-coordinator-WOHYVV7A.js +0 -2
  399. package/dist/cli/chunks/router-VUW2UVCN.js +0 -2
  400. package/dist/cli/chunks/routing-feedback-WSUQMZAK.js +0 -2
  401. package/dist/cli/chunks/rvf-native-adapter-RHZCXVN6.js +0 -2
  402. package/dist/cli/chunks/safe-db-NTWEW7ZM.js +0 -2
  403. package/dist/cli/chunks/schedule-WEVC2GW2.js +0 -2
  404. package/dist/cli/chunks/scheduler-XHI5AJIS.js +0 -2
  405. package/dist/cli/chunks/sqlite-persistence-QZUPKMHP.js +0 -2
  406. package/dist/cli/chunks/test-BE7EM6Y6.js +0 -33
  407. package/dist/cli/chunks/unified-memory-QKWUSEBV.js +0 -2
  408. package/dist/cli/chunks/unified-memory-hnsw-Z2UQZRTK.js +0 -2
  409. package/dist/cli/chunks/unified-persistence-AVK2NSMI.js +0 -2
  410. package/dist/cli/chunks/visual-security-64UFH23G.js +0 -2
  411. package/dist/cli/chunks/witness-chain-ZIVSDX6C.js +0 -2
  412. package/dist/cli/chunks/workflow-orchestrator-TYP4MI2V.js +0 -2
  413. package/dist/cli/commands/init.d.ts +0 -19
  414. package/dist/cli/commands/init.js +0 -318
@@ -214,16 +214,6 @@ ${importStatement}
214
214
  code += ` expect(() => instance.${method.name}(${paramsWithUndefined})).toThrow();\n`;
215
215
  code += ` });\n`;
216
216
  }
217
- else {
218
- // Use try-catch to handle both throwing (TypeError from property access) and non-throwing
219
- code += `\n it('should handle undefined ${param.name}', ${asyncPrefix}() => {\n`;
220
- code += ` try {\n`;
221
- code += ` ${method.isAsync ? 'await ' : ''}instance.${method.name}(${paramsWithUndefined});\n`;
222
- code += ` } catch (e) {\n`;
223
- code += ` expect(e).toBeInstanceOf(Error);\n`;
224
- code += ` }\n`;
225
- code += ` });\n`;
226
- }
227
217
  }
228
218
  }
229
219
  code += ` });\n\n`;
@@ -235,9 +225,10 @@ ${importStatement}
235
225
  generateStubTests(context) {
236
226
  const { moduleName, importPath, testType, patterns, dependencies, similarCode } = context;
237
227
  const patternComment = this.generatePatternComment(patterns);
238
- const basicOpsTest = this.generateBasicOpsTest(moduleName, patterns);
239
- const edgeCaseTest = this.generateEdgeCaseTest(moduleName, patterns);
240
- const errorHandlingTest = this.generateErrorHandlingTest(moduleName, patterns);
228
+ const moduleIdentifier = 'moduleUnderTest';
229
+ const basicOpsTest = this.generateBasicOpsTest(moduleIdentifier, patterns);
230
+ const edgeCaseTest = this.generateEdgeCaseTest(moduleIdentifier, patterns);
231
+ const errorHandlingTest = this.generateErrorHandlingTest(moduleIdentifier, patterns);
241
232
  // KG: Generate mock declarations for external (non-relative) dependencies only
242
233
  let mockDeclarations = '';
243
234
  if (dependencies && dependencies.imports.length > 0) {
@@ -264,9 +255,9 @@ ${importStatement}
264
255
  if (dependencies && dependencies.imports.length > 0) {
265
256
  depTest += `\n it('should interact with dependencies correctly', () => {\n`;
266
257
  depTest += ` // KG-informed: module depends on ${dependencies.imports.length} imports\n`;
267
- depTest += ` const instance = typeof ${moduleName} === 'function'\n`;
268
- depTest += ` ? new ${moduleName}()\n`;
269
- depTest += ` : ${moduleName};\n`;
258
+ depTest += ` const instance = typeof ${moduleIdentifier} === 'function'\n`;
259
+ depTest += ` ? new ${moduleIdentifier}()\n`;
260
+ depTest += ` : ${moduleIdentifier};\n`;
270
261
  depTest += ` expect(instance).toBeDefined();\n`;
271
262
  depTest += ` });\n`;
272
263
  }
@@ -275,21 +266,21 @@ ${importStatement}
275
266
  if (dependencies && dependencies.importedBy.length > 0) {
276
267
  callerTest += `\n it('should expose stable API for ${dependencies.importedBy.length} consumers', () => {\n`;
277
268
  callerTest += ` // KG-informed: used by ${dependencies.importedBy.slice(0, 3).join(', ')}\n`;
278
- callerTest += ` const publicKeys = Object.keys(typeof ${moduleName} === 'function'\n`;
279
- callerTest += ` ? ${moduleName}.prototype || {}\n`;
280
- callerTest += ` : ${moduleName});\n`;
269
+ callerTest += ` const publicKeys = Object.keys(typeof ${moduleIdentifier} === 'function'\n`;
270
+ callerTest += ` ? ${moduleIdentifier}.prototype || {}\n`;
271
+ callerTest += ` : ${moduleIdentifier});\n`;
281
272
  callerTest += ` expect(publicKeys.length).toBeGreaterThan(0);\n`;
282
273
  callerTest += ` });\n`;
283
274
  }
284
275
  const stubImportSource = this.framework === 'vitest' ? 'vitest' : '@jest/globals';
285
276
  const stubMockImport = this.framework === 'vitest' ? ', vi' : ', jest';
286
- return `${patternComment}import { describe, it, expect, beforeEach${stubMockImport} } from '${stubImportSource}';
287
- import { ${moduleName} } from '${importPath}';
288
- ${mockDeclarations}
289
- describe('${moduleName}', () => {
290
- ${similarityComment} describe('${testType} tests', () => {
291
- it('should be defined', () => {
292
- expect(${moduleName}).toBeDefined();
277
+ return `${patternComment}import { describe, it, expect, beforeEach${stubMockImport} } from '${stubImportSource}';
278
+ import * as ${moduleIdentifier} from '${importPath}';
279
+ ${mockDeclarations}
280
+ describe('${moduleName}', () => {
281
+ ${similarityComment} describe('${testType} tests', () => {
282
+ it('should be defined', () => {
283
+ expect(${moduleIdentifier}).toBeDefined();
293
284
  });
294
285
 
295
286
  ${basicOpsTest}
@@ -20,6 +20,7 @@ import { TestDataGeneratorService } from './test-data-generator';
20
20
  import { toError } from '../../../shared/error-utils.js';
21
21
  import { safeJsonParse } from '../../../shared/safe-json.js';
22
22
  import { TestQualityGate } from '../gates/index.js';
23
+ import { getGeneratedTestSyntaxIssues } from '../gates/test-quality-gate.js';
23
24
  import { EdgeCaseInjector } from '../pattern-injection/index.js';
24
25
  import { treeSitterRegistry } from '../../../shared/parsers/multi-language-parser.js';
25
26
  import { getLanguageFromExtension } from '../../../shared/types/test-frameworks.js';
@@ -127,7 +128,7 @@ export class TestGeneratorService {
127
128
  * Enhance generated test code using LLM
128
129
  * Adds edge cases, improves assertions, and adds documentation
129
130
  */
130
- async enhanceTestWithLLM(testCode, sourceCode, analysis, context) {
131
+ async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context) {
131
132
  if (!this.llmRouter)
132
133
  return { code: testCode, enhanced: false };
133
134
  try {
@@ -202,6 +203,10 @@ Return ONLY the enhanced test code, no explanations.`,
202
203
  if (codeMatch) {
203
204
  enhancedCode = codeMatch[1].trim();
204
205
  }
206
+ if (getGeneratedTestSyntaxIssues(enhancedCode, sourceFilePath).length > 0) {
207
+ logger.warn('LLM enhancement produced invalid syntax, using deterministic template');
208
+ return { code: testCode, enhanced: false };
209
+ }
205
210
  // #567: only claim enhancement when the model actually returned code.
206
211
  // An empty/unusable response falls back to the template, and the caller
207
212
  // must be told that is what happened.
@@ -465,7 +470,7 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
465
470
  // report AI-enhanced output it did not produce.
466
471
  let llmEnhanced = false;
467
472
  if (this.isLLMEnhancementAvailable() && sourceContent) {
468
- const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, context);
473
+ const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, sourceFile, context);
469
474
  testCode = result.code;
470
475
  llmEnhanced = result.enhanced;
471
476
  }
@@ -8,6 +8,10 @@
8
8
  export interface CodexInstallerOptions {
9
9
  projectRoot: string;
10
10
  overwrite?: boolean;
11
+ /** Whether to install the AQE MCP server entry. Defaults to true. */
12
+ installMcp?: boolean;
13
+ /** Install optional Ruflo guidance, adapter, runtime, and lifecycle groups. */
14
+ includeRuflo?: boolean;
11
15
  /**
12
16
  * Memory backend for this install. 'memory' => database-free: the MCP config
13
17
  * is written to run in-memory (AQE_MEMORY_BACKEND=memory, no AQE_MEMORY_PATH). (#533)
@@ -25,14 +29,28 @@ export interface CodexInstallResult {
25
29
  agentsMdPath: string;
26
30
  hooksPath: string;
27
31
  skillsPath: string;
32
+ /** Per-component outcomes. Legacy booleans above remain supported. */
33
+ components: {
34
+ mcp: CodexComponentOutcome;
35
+ rules: CodexComponentOutcome;
36
+ hooks: CodexComponentOutcome;
37
+ skills: CodexComponentOutcome;
38
+ };
39
+ }
40
+ export interface CodexComponentOutcome {
41
+ status: 'installed' | 'updated' | 'preserved' | 'skipped' | 'unavailable' | 'failed';
42
+ error?: string;
28
43
  }
29
44
  export declare class CodexInstaller {
30
45
  private projectRoot;
31
46
  private overwrite;
32
47
  private options;
33
48
  private generator;
49
+ private static readonly AGENTS_START;
50
+ private static readonly AGENTS_END;
34
51
  constructor(options: CodexInstallerOptions);
35
52
  install(): Promise<CodexInstallResult>;
53
+ private recordComponentFailure;
36
54
  /**
37
55
  * Install Codex-native lifecycle adapters and merge AQE/ruflo hook groups
38
56
  * without removing user-defined hooks.
@@ -44,15 +62,16 @@ export declare class CodexInstaller {
44
62
  private resolvePackageRoot;
45
63
  /**
46
64
  * Merge AQE MCP server config into existing TOML.
47
- * Simple approach: if [mcp_servers.agentic-qe] already exists, skip.
48
- * Otherwise, append the AQE block at the end.
65
+ * Replace only AQE-owned TOML tables, preserving every user-owned table and
66
+ * setting. AQE owns the exact `mcp_servers.agentic-qe` table prefix.
49
67
  */
50
68
  private mergeExistingTomlConfig;
51
69
  /**
52
70
  * Merge AQE section into existing AGENTS.md.
53
- * Appends the AQE section if not already present.
71
+ * Replaces a previously marked AQE section or appends a new marked section.
54
72
  */
55
73
  private mergeExistingAgentsMd;
74
+ private markAgentsSection;
56
75
  }
57
76
  export declare function createCodexInstaller(options: CodexInstallerOptions): CodexInstaller;
58
77
  //# sourceMappingURL=codex-installer.d.ts.map
@@ -9,6 +9,7 @@ import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSyn
9
9
  import { join, dirname } from 'path';
10
10
  import { fileURLToPath } from 'url';
11
11
  import { toErrorMessage } from '../shared/error-utils.js';
12
+ import { selectCodexSkills } from './codex-skill-manifest.js';
12
13
  import { createPlatformConfigGenerator, } from './platform-config-generator.js';
13
14
  // ============================================================================
14
15
  // Codex Installer Class
@@ -18,6 +19,8 @@ export class CodexInstaller {
18
19
  overwrite;
19
20
  options;
20
21
  generator;
22
+ static AGENTS_START = '<!-- BEGIN AGENTIC-QE CODEX -->';
23
+ static AGENTS_END = '<!-- END AGENTIC-QE CODEX -->';
21
24
  constructor(options) {
22
25
  this.projectRoot = options.projectRoot;
23
26
  this.overwrite = options.overwrite ?? false;
@@ -36,13 +39,21 @@ export class CodexInstaller {
36
39
  agentsMdPath: '',
37
40
  hooksPath: join(this.projectRoot, '.codex', 'hooks.json'),
38
41
  skillsPath: join(this.projectRoot, '.agents', 'skills'),
42
+ components: {
43
+ mcp: { status: 'skipped' },
44
+ rules: { status: 'skipped' },
45
+ hooks: { status: 'unavailable' },
46
+ skills: { status: 'unavailable' },
47
+ },
39
48
  };
40
49
  try {
41
- // Generate TOML MCP config
42
50
  const mcpConfig = this.generator.generateMcpConfig('codex', { memoryBackend: this.options.memoryBackend });
43
51
  const configPath = join(this.projectRoot, mcpConfig.path);
44
52
  result.configPath = configPath;
45
- if (!existsSync(configPath) || this.overwrite) {
53
+ // Generate TOML MCP config unless the caller explicitly requested a
54
+ // platform-only install (rules, hooks, and skills remain useful).
55
+ const configExists = existsSync(configPath);
56
+ if (this.options.installMcp !== false && (!configExists || this.overwrite)) {
46
57
  const configDir = dirname(configPath);
47
58
  if (!existsSync(configDir)) {
48
59
  mkdirSync(configDir, { recursive: true });
@@ -55,30 +66,61 @@ export class CodexInstaller {
55
66
  writeFileSync(configPath, mcpConfig.content);
56
67
  }
57
68
  result.mcpConfigured = true;
69
+ result.components.mcp.status = configExists ? 'updated' : 'installed';
70
+ }
71
+ else if (this.options.installMcp !== false && configExists) {
72
+ result.components.mcp.status = 'preserved';
58
73
  }
74
+ }
75
+ catch (error) {
76
+ this.recordComponentFailure(result, 'mcp', error);
77
+ }
78
+ try {
59
79
  // Generate AGENTS.md behavioral rules
60
80
  const rules = this.generator.generateBehavioralRules('codex');
61
81
  const agentsMdPath = join(this.projectRoot, rules.path);
62
82
  result.agentsMdPath = agentsMdPath;
63
- if (!existsSync(agentsMdPath) || this.overwrite) {
64
- if (existsSync(agentsMdPath) && this.overwrite) {
83
+ const rulesExist = existsSync(agentsMdPath);
84
+ if (!rulesExist || this.overwrite) {
85
+ if (rulesExist && this.overwrite) {
65
86
  const merged = this.mergeExistingAgentsMd(agentsMdPath, rules.content);
66
87
  writeFileSync(agentsMdPath, merged);
67
88
  }
68
89
  else {
69
- writeFileSync(agentsMdPath, rules.content);
90
+ writeFileSync(agentsMdPath, this.markAgentsSection(rules.content));
70
91
  }
71
92
  result.agentsMdInstalled = true;
93
+ result.components.rules.status = rulesExist ? 'updated' : 'installed';
94
+ }
95
+ else {
96
+ result.components.rules.status = 'preserved';
72
97
  }
73
- this.installCodexHooks(result);
74
- result.skillsInstalled = this.installCodexSkills();
75
98
  }
76
99
  catch (error) {
77
- result.success = false;
78
- result.errors.push(`Codex installation failed: ${toErrorMessage(error)}`);
100
+ this.recordComponentFailure(result, 'rules', error);
79
101
  }
102
+ try {
103
+ result.components.hooks.status = this.installCodexHooks(result);
104
+ }
105
+ catch (error) {
106
+ this.recordComponentFailure(result, 'hooks', error);
107
+ }
108
+ try {
109
+ const skills = this.installCodexSkills();
110
+ result.skillsInstalled = skills.count;
111
+ result.components.skills.status = skills.status;
112
+ }
113
+ catch (error) {
114
+ this.recordComponentFailure(result, 'skills', error);
115
+ }
116
+ result.success = result.errors.length === 0;
80
117
  return result;
81
118
  }
119
+ recordComponentFailure(result, component, error) {
120
+ const message = toErrorMessage(error);
121
+ result.components[component] = { status: 'failed', error: message };
122
+ result.errors.push(`Codex ${component} installation failed: ${message}`);
123
+ }
82
124
  /**
83
125
  * Install Codex-native lifecycle adapters and merge AQE/ruflo hook groups
84
126
  * without removing user-defined hooks.
@@ -86,15 +128,17 @@ export class CodexInstaller {
86
128
  installCodexHooks(result) {
87
129
  const sourceRoot = this.resolvePackageRoot();
88
130
  if (!sourceRoot)
89
- return;
131
+ return 'unavailable';
90
132
  const sourceConfig = join(sourceRoot, '.codex', 'hooks.json');
91
133
  const sourceScripts = join(sourceRoot, '.codex', 'hooks');
92
134
  if (!existsSync(sourceConfig) || !existsSync(sourceScripts))
93
- return;
135
+ return 'unavailable';
94
136
  const targetCodexDir = join(this.projectRoot, '.codex');
95
137
  const targetScripts = join(targetCodexDir, 'hooks');
96
138
  mkdirSync(targetScripts, { recursive: true });
97
139
  for (const file of readdirSync(sourceScripts)) {
140
+ if (!this.options.includeRuflo && file === 'ruflo-codex-hook.cjs')
141
+ continue;
98
142
  const source = join(sourceScripts, file);
99
143
  if (!statSync(source).isFile())
100
144
  continue;
@@ -108,25 +152,31 @@ export class CodexInstaller {
108
152
  source: join(sourceRoot, '.claude', 'hooks', 'aqe-hook.cjs'),
109
153
  target: join(targetScripts, 'aqe-runtime.cjs'),
110
154
  },
111
- {
112
- source: join(sourceRoot, '.claude', 'helpers', 'ruflo-hook.cjs'),
113
- target: join(targetScripts, 'ruflo-runtime.cjs'),
114
- },
155
+ ...(this.options.includeRuflo ? [{
156
+ source: join(sourceRoot, '.claude', 'helpers', 'ruflo-hook.cjs'),
157
+ target: join(targetScripts, 'ruflo-runtime.cjs'),
158
+ }] : []),
115
159
  ];
116
160
  for (const runtime of runtimes) {
117
161
  if (existsSync(runtime.source) && (!existsSync(runtime.target) || this.overwrite)) {
118
162
  copyFileSync(runtime.source, runtime.target);
119
163
  }
120
164
  }
121
- const generated = JSON.parse(readFileSync(sourceConfig, 'utf-8'));
165
+ const generatedSource = JSON.parse(readFileSync(sourceConfig, 'utf-8'));
166
+ const isRufloGroup = (value) => JSON.stringify(value).includes('ruflo-codex-hook.cjs');
167
+ const generated = {
168
+ ...generatedSource,
169
+ hooks: Object.fromEntries(Object.entries(generatedSource.hooks || {}).map(([event, groups]) => [
170
+ event,
171
+ this.options.includeRuflo ? groups : groups.filter((group) => !isRufloGroup(group)),
172
+ ])),
173
+ };
122
174
  const targetConfig = join(targetCodexDir, 'hooks.json');
123
175
  if (!existsSync(targetConfig)) {
124
176
  writeFileSync(targetConfig, JSON.stringify(generated, null, 2) + '\n');
125
177
  result.hooksConfigured = true;
126
- return;
178
+ return 'installed';
127
179
  }
128
- if (!this.overwrite)
129
- return;
130
180
  const existing = JSON.parse(readFileSync(targetConfig, 'utf-8'));
131
181
  const owned = (value) => JSON.stringify(value).includes('/.codex/hooks/aqe-codex-hook.cjs')
132
182
  || JSON.stringify(value).includes('/.codex/hooks/ruflo-codex-hook.cjs');
@@ -141,31 +191,54 @@ export class CodexInstaller {
141
191
  }
142
192
  writeFileSync(targetConfig, JSON.stringify({ ...existing, description: generated.description, hooks: mergedHooks }, null, 2) + '\n');
143
193
  result.hooksConfigured = true;
194
+ return 'updated';
144
195
  }
145
196
  /** Install the curated repo-scoped AQE skills Codex discovers automatically. */
146
197
  installCodexSkills() {
147
198
  const sourceRoot = this.resolvePackageRoot();
148
199
  if (!sourceRoot)
149
- return 0;
200
+ return { count: 0, status: 'unavailable' };
150
201
  const sourceSkills = join(sourceRoot, '.agents', 'skills');
151
202
  if (!existsSync(sourceSkills))
152
- return 0;
203
+ return { count: 0, status: 'unavailable' };
153
204
  const targetSkills = join(this.projectRoot, '.agents', 'skills');
154
205
  mkdirSync(targetSkills, { recursive: true });
155
206
  let installed = 0;
156
- for (const skill of readdirSync(sourceSkills)) {
157
- if (!skill.startsWith('aqe-'))
158
- continue;
159
- const source = join(sourceSkills, skill);
160
- if (!statSync(source).isDirectory())
161
- continue;
162
- const target = join(targetSkills, skill);
207
+ let updated = 0;
208
+ for (const skill of selectCodexSkills({ includeRuflo: this.options.includeRuflo })) {
209
+ const source = join(sourceSkills, skill.name);
210
+ if (!existsSync(source) || !statSync(source).isDirectory()) {
211
+ throw new Error(`Missing packaged Codex skill directory: ${skill.name}`);
212
+ }
213
+ const target = join(targetSkills, skill.name);
163
214
  if (existsSync(target) && !this.overwrite)
164
215
  continue;
165
- this.copyDirectory(source, target);
166
- installed++;
216
+ const targetExisted = existsSync(target);
217
+ if (skill.files) {
218
+ mkdirSync(target, { recursive: true });
219
+ for (const relativeFile of skill.files) {
220
+ const from = join(source, relativeFile);
221
+ if (!existsSync(from) || !statSync(from).isFile()) {
222
+ throw new Error(`Missing packaged Codex skill file: ${skill.name}/${relativeFile}`);
223
+ }
224
+ const to = join(target, relativeFile);
225
+ mkdirSync(dirname(to), { recursive: true });
226
+ copyFileSync(from, to);
227
+ }
228
+ }
229
+ else {
230
+ this.copyDirectory(source, target);
231
+ }
232
+ if (targetExisted)
233
+ updated++;
234
+ else
235
+ installed++;
167
236
  }
168
- return installed;
237
+ const count = installed + updated;
238
+ return {
239
+ count,
240
+ status: updated > 0 ? 'updated' : installed > 0 ? 'installed' : 'preserved',
241
+ };
169
242
  }
170
243
  copyDirectory(source, target) {
171
244
  mkdirSync(target, { recursive: true });
@@ -195,40 +268,45 @@ export class CodexInstaller {
195
268
  }
196
269
  /**
197
270
  * Merge AQE MCP server config into existing TOML.
198
- * Simple approach: if [mcp_servers.agentic-qe] already exists, skip.
199
- * Otherwise, append the AQE block at the end.
271
+ * Replace only AQE-owned TOML tables, preserving every user-owned table and
272
+ * setting. AQE owns the exact `mcp_servers.agentic-qe` table prefix.
200
273
  */
201
274
  mergeExistingTomlConfig(configPath, newContent) {
202
- try {
203
- const existing = readFileSync(configPath, 'utf-8');
204
- // If AQE server already configured, return as-is
205
- if (existing.includes('[mcp_servers.agentic-qe]')) {
206
- return existing;
275
+ const existing = readFileSync(configPath, 'utf-8');
276
+ const aqeTable = /^\s*\[mcp_servers\.(?:agentic-qe|"agentic-qe")(?:\.(?:[^\]]+))?\]\s*(?:#.*)?$/;
277
+ const lines = existing.split(/\r?\n/);
278
+ const kept = [];
279
+ let inOwnedTable = false;
280
+ for (const line of lines) {
281
+ if (/^\s*\[[^\]]+\]\s*(?:#.*)?$/.test(line)) {
282
+ inOwnedTable = aqeTable.test(line);
207
283
  }
208
- // Append AQE config block
209
- return existing.trimEnd() + '\n\n' + newContent;
210
- }
211
- catch {
212
- return newContent;
284
+ if (!inOwnedTable)
285
+ kept.push(line);
213
286
  }
287
+ return kept.join('\n').trimEnd() + '\n\n' + newContent.trim() + '\n';
214
288
  }
215
289
  /**
216
290
  * Merge AQE section into existing AGENTS.md.
217
- * Appends the AQE section if not already present.
291
+ * Replaces a previously marked AQE section or appends a new marked section.
218
292
  */
219
293
  mergeExistingAgentsMd(agentsMdPath, newContent) {
220
- try {
221
- const existing = readFileSync(agentsMdPath, 'utf-8');
222
- // If AQE section already present, return as-is
223
- if (existing.includes('Agentic QE') || existing.includes('fleet_init')) {
224
- return existing;
294
+ const existing = readFileSync(agentsMdPath, 'utf-8');
295
+ const marked = this.markAgentsSection(newContent);
296
+ const start = CodexInstaller.AGENTS_START;
297
+ const end = CodexInstaller.AGENTS_END;
298
+ const startIndex = existing.indexOf(start);
299
+ if (startIndex >= 0) {
300
+ const endIndex = existing.indexOf(end, startIndex);
301
+ if (endIndex >= 0) {
302
+ return existing.slice(0, startIndex) + marked
303
+ + existing.slice(endIndex + end.length);
225
304
  }
226
- // Append AQE section
227
- return existing.trimEnd() + '\n\n---\n\n' + newContent;
228
- }
229
- catch {
230
- return newContent;
231
305
  }
306
+ return existing.trimEnd() + '\n\n---\n\n' + marked;
307
+ }
308
+ markAgentsSection(content) {
309
+ return `${CodexInstaller.AGENTS_START}\n${content.trim()}\n${CodexInstaller.AGENTS_END}\n`;
232
310
  }
233
311
  }
234
312
  // ============================================================================
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Skills shipped for repository-scoped Codex installs.
3
+ *
4
+ * Keep this list explicit: discovering skills by directory prefix makes the
5
+ * public package surface depend on unrelated files in a development checkout.
6
+ * Ruflo remains an opt-in, development-time integration and only its skill
7
+ * instructions are packaged; no Ruflo runtime code or dependency is shipped.
8
+ */
9
+ export interface CodexSkillManifestEntry {
10
+ /** Directory name below `.agents/skills`. */
11
+ readonly name: string;
12
+ /** Install in every Codex configuration. */
13
+ readonly default: boolean;
14
+ /** Optional file allowlist relative to the skill directory. */
15
+ readonly files?: readonly string[];
16
+ }
17
+ export declare const CODEX_SKILL_MANIFEST: readonly [{
18
+ readonly name: "aqe-plan-quality";
19
+ readonly default: true;
20
+ }, {
21
+ readonly name: "aqe-plan-work";
22
+ readonly default: true;
23
+ }, {
24
+ readonly name: "aqe-research";
25
+ readonly default: true;
26
+ }, {
27
+ readonly name: "aqe-review-quality";
28
+ readonly default: true;
29
+ }, {
30
+ readonly name: "aqe-test-change";
31
+ readonly default: true;
32
+ }, {
33
+ readonly name: "aqe-ruflo";
34
+ readonly default: false;
35
+ readonly files: readonly ["SKILL.md"];
36
+ }];
37
+ export interface SelectCodexSkillsOptions {
38
+ /** Include the Ruflo orchestration guidance without installing Ruflo itself. */
39
+ includeRuflo?: boolean;
40
+ }
41
+ /** Return the deterministic install set for a Codex project. */
42
+ export declare function selectCodexSkills(options?: SelectCodexSkillsOptions): readonly CodexSkillManifestEntry[];
43
+ //# sourceMappingURL=codex-skill-manifest.d.ts.map
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Skills shipped for repository-scoped Codex installs.
3
+ *
4
+ * Keep this list explicit: discovering skills by directory prefix makes the
5
+ * public package surface depend on unrelated files in a development checkout.
6
+ * Ruflo remains an opt-in, development-time integration and only its skill
7
+ * instructions are packaged; no Ruflo runtime code or dependency is shipped.
8
+ */
9
+ export const CODEX_SKILL_MANIFEST = [
10
+ { name: 'aqe-plan-quality', default: true },
11
+ { name: 'aqe-plan-work', default: true },
12
+ { name: 'aqe-research', default: true },
13
+ { name: 'aqe-review-quality', default: true },
14
+ { name: 'aqe-test-change', default: true },
15
+ { name: 'aqe-ruflo', default: false, files: ['SKILL.md'] },
16
+ ];
17
+ /** Return the deterministic install set for a Codex project. */
18
+ export function selectCodexSkills(options = {}) {
19
+ return CODEX_SKILL_MANIFEST.filter((skill) => skill.default || (skill.name === 'aqe-ruflo' && options.includeRuflo === true));
20
+ }
21
+ //# sourceMappingURL=codex-skill-manifest.js.map
@@ -42,6 +42,7 @@ export class ModularInitOrchestrator {
42
42
  withKiloCode: options.withKiloCode || allPlatforms,
43
43
  withRooCode: options.withRooCode || allPlatforms,
44
44
  withCodex: options.withCodex || allPlatforms,
45
+ withRuflo: options.withRuflo,
45
46
  withWindsurf: options.withWindsurf || allPlatforms,
46
47
  withContinueDev: options.withContinueDev || allPlatforms,
47
48
  withAllPlatforms: options.withAllPlatforms,
@@ -50,6 +51,7 @@ export class ModularInitOrchestrator {
50
51
  noGovernance: options.noGovernance,
51
52
  noMcp: options.noMcp,
52
53
  noClaude: options.noClaude,
54
+ noStatusLine: options.noStatusLine,
53
55
  memoryBackend: options.memoryBackend,
54
56
  },
55
57
  config: {},
@@ -85,7 +85,9 @@ export class HooksPhase extends BasePhase {
85
85
  // - statusLine / includeCoAuthoredBy preserved when user-set (#362 follow-up)
86
86
  // - AQE-owned sections deep-merged so user additions survive
87
87
  const v3Sections = generateV3SettingsSections(config, projectRoot);
88
- applyV3Sections(settings, v3Sections);
88
+ applyV3Sections(settings, v3Sections, {
89
+ statusLine: !context.options.noStatusLine,
90
+ });
89
91
  // Enable MCP servers (deduplicate, replace old 'aqe' with 'agentic-qe')
90
92
  let existingMcp = settings.enabledMcpjsonServers || [];
91
93
  // Remove legacy 'aqe' entry if present (renamed to 'agentic-qe')
@@ -293,7 +293,13 @@ export class AssetsPhase extends BasePhase {
293
293
  // P2 platforms: Codex (TOML), Windsurf (JSON), Continue.dev (YAML)
294
294
  if (options.withCodex || (options.autoMode && existsSync(join(projectRoot, '.codex')))) {
295
295
  const { createCodexInstaller } = await import('../codex-installer.js');
296
- const installer = createCodexInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
296
+ const installer = createCodexInstaller({
297
+ projectRoot,
298
+ overwrite: shouldOverwrite,
299
+ installMcp: !options.noMcp,
300
+ includeRuflo: options.withRuflo,
301
+ memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined,
302
+ });
297
303
  const res = await installer.install();
298
304
  if (res.mcpConfigured)
299
305
  platformsConfigured.push('codex');
@@ -307,6 +313,9 @@ export class AssetsPhase extends BasePhase {
307
313
  context.services.log(` Codex hooks: ${res.hooksPath}`);
308
314
  if (res.skillsInstalled > 0)
309
315
  context.services.log(` Codex skills: ${res.skillsInstalled} installed`);
316
+ context.services.log(options.withRuflo
317
+ ? ' Codex Ruflo integration: enabled'
318
+ : ' Codex Ruflo integration: not installed (opt in with --with-ruflo)');
310
319
  }
311
320
  if (options.withWindsurf || (options.autoMode && existsSync(join(projectRoot, '.windsurf')))) {
312
321
  const { createWindsurfInstaller } = await import('../windsurf-installer.js');
@@ -121,6 +121,8 @@ export interface InitOptions {
121
121
  withRooCode?: boolean;
122
122
  /** Install OpenAI Codex CLI MCP, AGENTS.md, hooks, and QE skills */
123
123
  withCodex?: boolean;
124
+ /** Include optional Ruflo guidance and Codex lifecycle integration */
125
+ withRuflo?: boolean;
124
126
  /** Install Windsurf MCP config and rules */
125
127
  withWindsurf?: boolean;
126
128
  /** Install Continue.dev MCP config and rules */
@@ -137,6 +139,8 @@ export interface InitOptions {
137
139
  * unchanged. Pairs naturally with `--no-database`.
138
140
  */
139
141
  noClaude?: boolean;
142
+ /** Skip AQE's Claude Code status line and remove a previously AQE-owned one. */
143
+ noStatusLine?: boolean;
140
144
  /** @deprecated Use default behavior instead — MCP is now enabled by default */
141
145
  withMcp?: boolean;
142
146
  /**
@@ -70,7 +70,9 @@ export declare function isAqeStatusLine(statusLine: unknown): boolean;
70
70
  *
71
71
  * Mutates and returns `settings`.
72
72
  */
73
- export declare function applyV3Sections(settings: Record<string, unknown>, sections: Record<string, unknown>): Record<string, unknown>;
73
+ export declare function applyV3Sections(settings: Record<string, unknown>, sections: Record<string, unknown>, options?: {
74
+ statusLine?: boolean;
75
+ }): Record<string, unknown>;
74
76
  /**
75
77
  * Generate v3-specific settings sections for settings.json.
76
78
  * These sections enable the self-learning system, status line, and permissions.