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.
- package/.agents/skills/aqe-plan-work/SKILL.md +31 -0
- package/.agents/skills/aqe-plan-work/agents/openai.yaml +4 -0
- package/.agents/skills/aqe-plan-work/references/planning-framework.md +39 -0
- package/.agents/skills/aqe-research/SKILL.md +31 -0
- package/.agents/skills/aqe-research/agents/openai.yaml +4 -0
- package/.agents/skills/aqe-research/references/evidence-rules.md +21 -0
- package/.agents/skills/aqe-ruflo/SKILL.md +29 -0
- package/.claude/commands/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +108 -0
- package/.claude/commands/training/neural-train.md +75 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/helpers/.helpers-version +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/helpers.manifest.json +6 -6
- package/.claude/helpers/hook-handler.cjs +565 -565
- package/.claude/helpers/intelligence.cjs +1058 -1058
- package/.claude/helpers/statusline.cjs +1022 -968
- package/.claude/helpers/v3/advisor-call.cjs +283 -0
- package/.claude/skills/README.md +54 -64
- package/.claude/skills/dual-mode/README.md +71 -0
- package/.claude/skills/dual-mode/dual-collect.md +103 -0
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
- package/.claude/skills/dual-mode/dual-spawn.md +81 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/.codex/hooks/aqe-codex-hook.cjs +34 -9
- package/.codex/hooks.json +9 -9
- package/CHANGELOG.md +90 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-QGJAFSG5.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-YIGGREZN.js → agent-booster-wasm-XDKGG2GP.js} +2 -2
- package/dist/cli/chunks/{agent-handler-64O7R55A.js → agent-handler-CTPXGR5P.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-2ZZBYUP3.js → agent-memory-branch-MG5OV7AY.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-ZU735SG7.js +2 -0
- package/dist/cli/chunks/{arena-PF5WL2WM.js → arena-FAHVOHNG.js} +2 -2
- package/dist/cli/chunks/{arena-6YRNQNCX.js → arena-NYO4EUNQ.js} +4 -4
- package/dist/cli/chunks/{audit-R53FOYCK.js → audit-6544RL5D.js} +3 -3
- package/dist/cli/chunks/base-EKTX2PRE.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-QOULNHXS.js → better-sqlite3-MTEONNCQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-J4ICUOUX.js → brain-handler-DPKCUQUC.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-YVPD43TG.js → branch-enumerator-SU2KHC2C.js} +2 -2
- package/dist/cli/chunks/{browser-TKVHX53S.js → browser-ITDN72YJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-BUPIMI3E.js +2 -0
- package/dist/cli/chunks/{chunk-ORXDKBZC.js → chunk-23AO43XW.js} +1 -1
- package/dist/cli/chunks/{chunk-3NML6POU.js → chunk-2CF3XZAS.js} +2 -2
- package/dist/cli/chunks/{chunk-5IVOY76M.js → chunk-2KPGJ4LO.js} +2 -2
- package/dist/cli/chunks/{chunk-SJWTNKPY.js → chunk-2QI3OJAC.js} +3 -3
- package/dist/cli/chunks/{chunk-MYR6CBXC.js → chunk-2RZ2S6YR.js} +2 -2
- package/dist/cli/chunks/{chunk-VKUH57JE.js → chunk-2XZWYKXQ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZU3XUBDQ.js → chunk-3EWWP3AO.js} +1 -1
- package/dist/cli/chunks/{chunk-4Z2AKQP4.js → chunk-3XKCC7LE.js} +1 -1
- package/dist/cli/chunks/chunk-42KQE5H6.js +12 -0
- package/dist/cli/chunks/{chunk-2MLPO3RZ.js → chunk-43BXSNKU.js} +2 -2
- package/dist/cli/chunks/{chunk-UOJ26GXD.js → chunk-4E2NA2GY.js} +2 -2
- package/dist/cli/chunks/{chunk-66KIIH6V.js → chunk-4Z7JP7CD.js} +2 -2
- package/dist/cli/chunks/{chunk-3J2QITXC.js → chunk-54C3OHES.js} +1 -1
- package/dist/cli/chunks/{chunk-5A5EC5RD.js → chunk-557BFPDB.js} +2 -2
- package/dist/cli/chunks/{chunk-JG267MVB.js → chunk-5I5KMIFY.js} +2 -2
- package/dist/cli/chunks/{chunk-IRX2THND.js → chunk-5YIGAWBO.js} +2 -2
- package/dist/cli/chunks/{chunk-PHGOMAIS.js → chunk-64GTU5LR.js} +2 -2
- package/dist/cli/chunks/{chunk-HJNFXYX4.js → chunk-6BEMH5K5.js} +1 -1
- package/dist/cli/chunks/{chunk-AJ45QR3K.js → chunk-6H3I36DL.js} +2 -2
- package/dist/cli/chunks/{chunk-X737I4SO.js → chunk-6L5V3JGJ.js} +1 -1
- package/dist/cli/chunks/{chunk-QGJYKXUO.js → chunk-6RV3W2UZ.js} +1 -1
- package/dist/cli/chunks/{chunk-XRF5MX4Q.js → chunk-6ZCAZ3TR.js} +2 -2
- package/dist/cli/chunks/{chunk-JQTDNUHA.js → chunk-74QRMQFR.js} +2 -2
- package/dist/cli/chunks/{chunk-DSUEJK33.js → chunk-76OWM3ZO.js} +2 -2
- package/dist/cli/chunks/{chunk-GTURQ454.js → chunk-7A4EXSMN.js} +2 -2
- package/dist/cli/chunks/{chunk-DPJLA7JW.js → chunk-7BLXINIL.js} +2 -2
- package/dist/cli/chunks/{chunk-4RYU4WMW.js → chunk-7LR4VP2I.js} +1 -1
- package/dist/cli/chunks/{chunk-NIA6VTIH.js → chunk-7M4X6WTF.js} +2 -2
- package/dist/cli/chunks/{chunk-N3KQRDTM.js → chunk-7PHF2JM3.js} +1 -1
- package/dist/cli/chunks/{chunk-7MBPKAQ3.js → chunk-7SQXEYII.js} +2 -2
- package/dist/cli/chunks/{chunk-PHBGMXTR.js → chunk-AAGOBPIJ.js} +2 -2
- package/dist/cli/chunks/{chunk-33SPAMQZ.js → chunk-AJYJFIKO.js} +2 -2
- package/dist/cli/chunks/{chunk-QP4UKSUJ.js → chunk-AKYOY5KR.js} +2 -2
- package/dist/cli/chunks/{chunk-HEF6XKA5.js → chunk-AKZ6PWHM.js} +2 -2
- package/dist/cli/chunks/{chunk-764G7VK6.js → chunk-APMLMLSL.js} +1 -1
- package/dist/cli/chunks/{chunk-KQFMCVBH.js → chunk-AX4XIG4G.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLTAAROU.js → chunk-BAJK26EI.js} +2 -2
- package/dist/cli/chunks/{chunk-LLQG3F4H.js → chunk-BI6OTPC6.js} +2 -2
- package/dist/cli/chunks/chunk-BKI5NFQ5.js +2 -0
- package/dist/cli/chunks/{chunk-V6W4IHS5.js → chunk-BUN4WBPW.js} +2 -2
- package/dist/cli/chunks/{chunk-UF7JKDWB.js → chunk-BX5MY65W.js} +1 -1
- package/dist/cli/chunks/{chunk-KBQRYAHZ.js → chunk-CD4YWKJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-VGWHFFK6.js → chunk-CHFZHORO.js} +5 -5
- package/dist/cli/chunks/{chunk-UX434RY5.js → chunk-CPIAZGHF.js} +2 -2
- package/dist/cli/chunks/{chunk-PS32DXYF.js → chunk-D4P6BKGF.js} +3 -3
- package/dist/cli/chunks/{chunk-CBLKYGKT.js → chunk-DFBJPOJR.js} +2 -2
- package/dist/cli/chunks/{chunk-XRQGWUDX.js → chunk-DIRFXY3J.js} +7 -7
- package/dist/cli/chunks/chunk-DK7MV2W3.js +2 -0
- package/dist/cli/chunks/chunk-DVYNBMMP.js +62 -0
- package/dist/cli/chunks/{chunk-LWPCGOQM.js → chunk-EGI6SKQD.js} +2 -2
- package/dist/cli/chunks/{chunk-RMQRSZB4.js → chunk-ELC3UEML.js} +1 -1
- package/dist/cli/chunks/chunk-ELKWYWTD.js +2 -0
- package/dist/cli/chunks/{chunk-2BYRQ5MV.js → chunk-EPMUAKU2.js} +2 -2
- package/dist/cli/chunks/{chunk-U7DGRHSB.js → chunk-EROQSNGD.js} +2 -2
- package/dist/cli/chunks/{chunk-GSG5FASF.js → chunk-EXXWOOUL.js} +3 -3
- package/dist/cli/chunks/{chunk-UWBHR4EZ.js → chunk-FQPYD6YE.js} +1 -1
- package/dist/cli/chunks/{chunk-OD5R7HRI.js → chunk-FW6OPDA6.js} +1 -1
- package/dist/cli/chunks/{chunk-M7XDTQHX.js → chunk-FYWTMDID.js} +2 -2
- package/dist/cli/chunks/{chunk-TK6CHESH.js → chunk-G47WJMHM.js} +1 -1
- package/dist/cli/chunks/{chunk-LOZRBK2Z.js → chunk-G73XY2NK.js} +2 -2
- package/dist/cli/chunks/{chunk-WRC66JTK.js → chunk-GHSP4AC5.js} +1 -1
- package/dist/cli/chunks/{chunk-37GCWGXT.js → chunk-GITS44TM.js} +2 -2
- package/dist/cli/chunks/{chunk-IH47VGC7.js → chunk-GUO6JZMS.js} +2 -2
- package/dist/cli/chunks/{chunk-JLFU5SCI.js → chunk-GWBV26SE.js} +2 -2
- package/dist/cli/chunks/{chunk-AXXFY7PX.js → chunk-HBYVYLBN.js} +2 -2
- package/dist/cli/chunks/{chunk-46U73TST.js → chunk-HMNBNGNO.js} +1 -1
- package/dist/cli/chunks/{chunk-J65XQ6WE.js → chunk-HZV3J4VQ.js} +2 -2
- package/dist/cli/chunks/{chunk-PHNNAIFA.js → chunk-IC5JGTM4.js} +1 -1
- package/dist/cli/chunks/{chunk-JOHWWTJF.js → chunk-IS3P5VBL.js} +2 -2
- package/dist/cli/chunks/{chunk-64C4SS66.js → chunk-JID7JO7K.js} +2 -2
- package/dist/cli/chunks/{chunk-DTOKJKSE.js → chunk-JOJ2UFHM.js} +2 -2
- package/dist/cli/chunks/{chunk-MGKJFO57.js → chunk-JTUTZUED.js} +2 -2
- package/dist/cli/chunks/{chunk-2QKSIHXO.js → chunk-JX5IY2YK.js} +1 -1
- package/dist/cli/chunks/{chunk-EEG4G5JG.js → chunk-K55D3PAR.js} +3 -3
- package/dist/cli/chunks/{chunk-TNM7X2GD.js → chunk-KAVYTFAS.js} +2 -2
- package/dist/cli/chunks/{chunk-NUPAGPN6.js → chunk-KRCIC4JK.js} +2 -2
- package/dist/cli/chunks/{chunk-VFZNVJP2.js → chunk-L6H4MWVN.js} +2 -2
- package/dist/cli/chunks/{chunk-QZ3EIONO.js → chunk-L6I2Q6UQ.js} +1 -1
- package/dist/cli/chunks/{chunk-A547LEUW.js → chunk-LARAXKTZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6I2L22WS.js → chunk-LELWVGN6.js} +1 -1
- package/dist/cli/chunks/chunk-M7456ZW5.js +2 -0
- package/dist/cli/chunks/{chunk-J5AIMM2J.js → chunk-MF6OT43N.js} +1 -1
- package/dist/cli/chunks/{chunk-WHUQDBV7.js → chunk-MX35PIGJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RRHIEG4Y.js → chunk-ND7IWTVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TRPRFW27.js → chunk-NFE4RV2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-37I4AMCT.js → chunk-NVZ3QROA.js} +2 -2
- package/dist/cli/chunks/{chunk-6C3PDY72.js → chunk-OF5UL3FA.js} +1 -1
- package/dist/cli/chunks/{chunk-JBWXBDJX.js → chunk-OGUPLNRY.js} +1 -1
- package/dist/cli/chunks/chunk-OJZ5LI3O.js +2 -0
- package/dist/cli/chunks/{chunk-ZIYCZZYD.js → chunk-OQ4HOHBI.js} +2 -2
- package/dist/cli/chunks/{chunk-2G2XD6EM.js → chunk-OUWZTYRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-IZIYFVAZ.js → chunk-PDOL3FGO.js} +3 -3
- package/dist/cli/chunks/{chunk-NF2N2FIY.js → chunk-PEHSTLU7.js} +1 -1
- package/dist/cli/chunks/{chunk-WVWWTRKT.js → chunk-PKCVQ2I4.js} +1 -1
- package/dist/cli/chunks/{chunk-CW7BWFFF.js → chunk-PNDWHSZO.js} +2 -2
- package/dist/cli/chunks/{chunk-IKPBQZQP.js → chunk-PSD2L2JB.js} +2 -2
- package/dist/cli/chunks/{chunk-DSGKRXHF.js → chunk-Q3J5OTZ2.js} +1 -1
- package/dist/cli/chunks/{chunk-PY55ZD2G.js → chunk-QHX7VLVT.js} +2 -2
- package/dist/cli/chunks/{chunk-7TG7LJAB.js → chunk-QIHKSRUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-B7XZJBMT.js → chunk-QLD2WVWN.js} +2 -2
- package/dist/cli/chunks/{chunk-HOIH542Y.js → chunk-R4VDRE75.js} +1 -1
- package/dist/cli/chunks/{chunk-A6J5MAVO.js → chunk-RDHBUCKQ.js} +182 -201
- package/dist/cli/chunks/{chunk-OU5CZFBG.js → chunk-RGBYJAKQ.js} +3 -3
- package/dist/cli/chunks/{chunk-GNCGRDQ2.js → chunk-RKXN5TVS.js} +1 -1
- package/dist/cli/chunks/{chunk-RWPWD5GG.js → chunk-S2EUFKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-CVFUANMU.js → chunk-SN57SNLU.js} +2 -2
- package/dist/cli/chunks/{chunk-OX6WPOGR.js → chunk-SQDHFTGQ.js} +3 -3
- package/dist/cli/chunks/{chunk-P5CQMDFQ.js → chunk-THQ5ZBWP.js} +2 -2
- package/dist/cli/chunks/{chunk-BDOD534O.js → chunk-TU5S33SD.js} +2 -2
- package/dist/cli/chunks/{chunk-22WFXSXB.js → chunk-U5GGDJ44.js} +2 -2
- package/dist/cli/chunks/{chunk-KQ5GLUOB.js → chunk-UGER2PGN.js} +4 -4
- package/dist/cli/chunks/{chunk-TW5QWNT4.js → chunk-UUFLYBUO.js} +2 -2
- package/dist/cli/chunks/{chunk-QFANYWC5.js → chunk-UWM4CCK7.js} +1 -1
- package/dist/cli/chunks/{chunk-FF53QW6C.js → chunk-V2T7QEPV.js} +1 -1
- package/dist/cli/chunks/{chunk-EMH54CO7.js → chunk-VE5STFDP.js} +2 -2
- package/dist/cli/chunks/{chunk-APXJJRU4.js → chunk-VNRWJ5JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-N7IRBQ4D.js → chunk-VRV7CXEM.js} +1 -1
- package/dist/cli/chunks/{chunk-CXPMA7LY.js → chunk-W7H46LAX.js} +1 -1
- package/dist/cli/chunks/{chunk-3CFWNT3F.js → chunk-WAELEQP5.js} +2 -2
- package/dist/cli/chunks/{chunk-JHOJG5VO.js → chunk-WDDU4I5Z.js} +1 -1
- package/dist/cli/chunks/{chunk-SAMAYDVS.js → chunk-WLY2J6JP.js} +2 -2
- package/dist/cli/chunks/{chunk-62F5M5OO.js → chunk-WSSFH23M.js} +1 -1
- package/dist/cli/chunks/{chunk-N4OBRS6S.js → chunk-WZI2REDL.js} +2 -2
- package/dist/cli/chunks/{chunk-7AHQ7ROU.js → chunk-X53GJW2E.js} +2 -2
- package/dist/cli/chunks/{chunk-H2BR5MCX.js → chunk-XACF7ZLM.js} +2 -2
- package/dist/cli/chunks/{chunk-QZS3XCU5.js → chunk-XNGYWOAK.js} +2 -2
- package/dist/cli/chunks/{chunk-F6V5POSK.js → chunk-YFD6K7AS.js} +75 -75
- package/dist/cli/chunks/{chunk-W6OIDL4J.js → chunk-YG45ZONW.js} +2 -2
- package/dist/cli/chunks/{chunk-FGIZVGIE.js → chunk-YGMCRJSC.js} +2 -2
- package/dist/cli/chunks/{chunk-SSXCHSVM.js → chunk-YIEMVVUH.js} +2 -2
- package/dist/cli/chunks/{chunk-ZI7BWJJW.js → chunk-YSWI3APU.js} +2 -2
- package/dist/cli/chunks/{chunk-ADBTOUOX.js → chunk-YU4U3BUY.js} +1 -1
- package/dist/cli/chunks/{chunk-K2D3YW2N.js → chunk-Z5YNYVFO.js} +1 -1
- package/dist/cli/chunks/{chunk-UAXFRKR3.js → chunk-ZE3WS57T.js} +2 -2
- package/dist/cli/chunks/{chunk-C7AXBCMS.js → chunk-ZMA5OWIQ.js} +4 -4
- package/dist/cli/chunks/{chunk-RU23JXCG.js → chunk-ZOD37GNG.js} +3 -3
- package/dist/cli/chunks/{chunk-MNEQESQJ.js → chunk-ZQ7XQLLV.js} +3 -3
- package/dist/cli/chunks/{chunk-TGVDKSSS.js → chunk-ZUIPUO7Q.js} +1 -1
- package/dist/cli/chunks/{chunk-L4O2645U.js → chunk-ZWLFEZQC.js} +1 -1
- package/dist/cli/chunks/{ci-G2NEYLVO.js → ci-IRCNFD32.js} +2 -2
- package/dist/cli/chunks/{ci-output-SZFEXGBU.js → ci-output-NFOUNDJ2.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ZD7PJY6N.js → circuit-breaker-GB7SQRD2.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-DAVANGUJ.js → claude-flow-setup-STFKPPVL.js} +2 -2
- package/dist/cli/chunks/client-M4WF22UT.js +2 -0
- package/dist/cli/chunks/{cline-installer-WCPKWLY7.js → cline-installer-MLKKIHIV.js} +2 -2
- package/dist/cli/chunks/{code-324ZJR3V.js → code-ZRCJC42H.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-EWVSXJHR.js → code-index-extractor-VWDYYQY2.js} +2 -2
- package/dist/cli/chunks/codex-installer-I5BTWYQV.js +15 -0
- package/dist/cli/chunks/{completions-ZAWBZWYK.js → completions-5JCAFTQV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-S3H2IRON.js → complexity-analyzer-6JLLAPGO.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-4DDFAJ26.js → continuedev-installer-YBOLMUZR.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-KBBAL3G5.js → copilot-installer-GDBJZBXS.js} +2 -2
- package/dist/cli/chunks/core-handlers-3MNFXL44.js +2 -0
- package/dist/cli/chunks/{cost-tracker-2YM7SGBW.js → cost-tracker-NEAVGEZI.js} +2 -2
- package/dist/cli/chunks/{coverage-6CCBAORJ.js → coverage-DXS5XNAA.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-Q5X6ZLJY.js +2 -0
- package/dist/cli/chunks/{cursor-installer-24DKXNU5.js → cursor-installer-3KEMFIFA.js} +2 -2
- package/dist/cli/chunks/{daemon-M2PSDIZF.js → daemon-FT2J6VY4.js} +3 -3
- package/dist/cli/chunks/{daemon-JLF6CRBS.js → daemon-JN377KTA.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-Y5HSZDRV.js → dag-attention-scheduler-EJFEWFXI.js} +2 -2
- package/dist/cli/chunks/{detect-6Y227IJ6.js → detect-E5MN6N3L.js} +2 -2
- package/dist/cli/chunks/{dist-node-EGOJXGTA.js → dist-node-ZFSAQMFD.js} +2 -2
- package/dist/cli/chunks/{domain-handler-G3JEWRE5.js → domain-handler-S7VFZ2MY.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-XOHI3EMJ.js → domain-transfer-LGHT3FN4.js} +2 -2
- package/dist/cli/chunks/dream-5QB6JABW.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-CSSA55L4.js → embed-and-insert-pattern-OVQS6IKK.js} +2 -2
- package/dist/cli/chunks/{eval-NHBXOXDV.js → eval-45UWDD2R.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-B7ZDV5UY.js → experience-capture-middleware-XDRJSNPY.js} +3 -3
- package/dist/cli/chunks/{fast-paths-XGKSBALA.js → fast-paths-VEDCJL75.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZVD73ZYK.js → feature-flags-NOTQVBLP.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NBUDJSWJ.js → feature-flags-TGA3NWVL.js} +2 -2
- package/dist/cli/chunks/file-discovery-AHMR6IGX.js +2 -0
- package/dist/cli/chunks/{fleet-LF77P3BW.js → fleet-CQBUCH2S.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-UXNT7BEN.js → gnn-wrapper-SOZCIONJ.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-C4LMU5LA.js → heartbeat-handler-6XNV4DGM.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-ZRLIMPKO.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-R4VAEQ2B.js +2 -0
- package/dist/cli/chunks/hnsw-index-GTUOS6DF.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-EHHBIWS3.js → hnsw-legacy-bridge-UILVP37N.js} +2 -2
- package/dist/cli/chunks/hnswlib-node-OHJQOSAH.js +2 -0
- package/dist/cli/chunks/{hooks-AGE3HCFI.js → hooks-QVDOGEHG.js} +10 -10
- package/dist/cli/chunks/hybrid-router-CYEXFWDT.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-E5QX5MEB.js → hypergraph-engine-YMVPBXZS.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZZHBANYB.js → hypergraph-handler-SHUNZXUK.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HMJ7LAXR.js +2 -0
- package/dist/cli/chunks/{init-handler-PNVRBZZT.js → init-handler-JE5FYJAV.js} +16 -12
- package/dist/cli/chunks/init-wizard-OIK6S3PQ.js +2 -0
- package/dist/cli/chunks/kernel-NZCGR72Y.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TR53QKPU.js → kilocode-installer-TVP4YOOK.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MJW6LCAX.js → kiro-installer-XBSGANX7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-HA7XW46B.js +2 -0
- package/dist/cli/chunks/{learning-6LLGHP2Q.js → learning-O4ZXQVRE.js} +3 -3
- package/dist/cli/chunks/{llm-router-DBLV3VGG.js → llm-router-FXXJHARR.js} +4 -4
- package/dist/cli/chunks/llm-router-service-FVGQSXYC.js +2 -0
- package/dist/cli/chunks/{load-LAZ3E5PE.js → load-IVF6G2SK.js} +2 -2
- package/dist/cli/chunks/load-test-IQTO35GE.js +2 -0
- package/dist/cli/chunks/{mcp-L5QXHSEY.js → mcp-VXSDVG3H.js} +2 -2
- package/dist/cli/chunks/{memory-YR5PCMWA.js → memory-BINJV3M6.js} +5 -5
- package/dist/cli/chunks/memory-backend-YGSOJ7SI.js +2 -0
- package/dist/cli/chunks/{memory-handlers-BSRTZQYR.js → memory-handlers-BJNFJZFP.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-RECZ3ACW.js → multi-model-executor-RJHYK6JI.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-4TDUB7HH.js → opencode-installer-VCTF5ETL.js} +2 -2
- package/dist/cli/chunks/{orchestrator-PHDKJ5C4.js → orchestrator-5SKZ2BOK.js} +11 -11
- package/dist/cli/chunks/pattern-null-store-4WN5O2PF.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-QK2FADRS.js → pattern-usage-recorder-AY2DAOQO.js} +2 -2
- package/dist/cli/chunks/{pipeline-JQJYSN43.js → pipeline-EMBMC75N.js} +2 -2
- package/dist/cli/chunks/platform-GADIFXCI.js +2 -0
- package/dist/cli/chunks/{plugin-766MBGK6.js → plugin-Q234ZAAY.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-XQERZNSK.js → prime-radiant-advanced-wasm-CXXKYB2P.js} +2 -2
- package/dist/cli/chunks/protocol-executor-EYTJXPXY.js +2 -0
- package/dist/cli/chunks/{protocol-handler-FAK4MMNA.js → protocol-handler-ZZRFBVNA.js} +2 -2
- package/dist/cli/chunks/{prove-HYBVXOGW.js → prove-7674ATXK.js} +2 -2
- package/dist/cli/chunks/provider-manager-TM3JHYLL.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-6JLFP3HE.js +2 -0
- package/dist/cli/chunks/quality-QCIGVN2S.js +7 -0
- package/dist/cli/chunks/{quality-gate-RK32VMO7.js → quality-gate-AKV564GE.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-OKGOKGHI.js +2 -0
- package/dist/cli/chunks/{real-embeddings-GI7CRHE2.js → real-embeddings-74POUVMX.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-BS3XWJJI.js → roocode-installer-INBL5AG7.js} +2 -2
- package/dist/cli/chunks/router-J45OF4SP.js +2 -0
- package/dist/cli/chunks/routing-feedback-VTZFH57X.js +2 -0
- package/dist/cli/chunks/{routing-handler-XMGRJDHH.js → routing-handler-C7HMM7RL.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-NDL3ONNC.js → ruvector-commands-PT6LRVCW.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-XAJOYGJ2.js → rvf-dual-writer-PRKROTP3.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-WXFRZZ26.js → rvf-migration-adapter-ZI2XW4UX.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-WFXA2VUQ.js → rvf-migration-coordinator-5JTGP35V.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-BDPUBFNP.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-I7PFJZCK.js → rvf-store-integrity-3B5TZTFR.js} +2 -2
- package/dist/cli/chunks/safe-db-FHJBWJIB.js +2 -0
- package/dist/cli/chunks/schedule-LP7YYT4P.js +2 -0
- package/dist/cli/chunks/scheduler-BOZWGKJG.js +2 -0
- package/dist/cli/chunks/{security-H3WY76GF.js → security-IMIWSAHW.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-GRTJCLW6.js → shared-rvf-adapter-UDKJNX6I.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-46XE5R2B.js → shared-rvf-dual-writer-FQOBQ6S5.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-TDM36AHF.js +2 -0
- package/dist/cli/chunks/{status-handler-VUIFMY4F.js → status-handler-7WON7M7F.js} +2 -2
- package/dist/cli/chunks/{structural-health-I7HC477E.js → structural-health-JTKTO3A4.js} +2 -2
- package/dist/cli/chunks/{sync-M6LUV5R4.js → sync-6ABYTAOL.js} +2 -2
- package/dist/cli/chunks/{sync-RO2YGMBF.js → sync-UJSHBY3B.js} +2 -2
- package/dist/cli/chunks/{task-handler-BJJTZ7AU.js → task-handler-5TZNOCCB.js} +2 -2
- package/dist/cli/chunks/{task-handlers-B6S4NEN3.js → task-handlers-G7ZUGBHM.js} +3 -3
- package/dist/cli/chunks/test-BSJ6MVTG.js +33 -0
- package/dist/cli/chunks/{test-scheduling-4ISKEFR6.js → test-scheduling-OSJJXIYQ.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-BOIYBZHW.js → token-bootstrap-MRNFR4YI.js} +2 -2
- package/dist/cli/chunks/{token-usage-6ZZC7RLT.js → token-usage-YQN7ND7G.js} +2 -2
- package/dist/cli/chunks/{transformers-55VI4OGW.js → transformers-QL3AG25C.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-6GRRGB3K.js → tree-sitter-wasm-parser-BECZRRZP.js} +2 -2
- package/dist/cli/chunks/{types-SXDF7QQT.js → types-FQSNLPWS.js} +2 -2
- package/dist/cli/chunks/unified-memory-6PHUOZRH.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-WYSFH3PS.js +2 -0
- package/dist/cli/chunks/unified-persistence-QBGHDCCO.js +2 -0
- package/dist/cli/chunks/{upgrade-PMPB7NGB.js → upgrade-2ICXXV6D.js} +2 -2
- package/dist/cli/chunks/{validate-G37QKKXK.js → validate-LPAUH2F4.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-6X22J3VD.js → validate-swarm-VWVE2GM7.js} +2 -2
- package/dist/cli/chunks/{vibium-SGBJKHQL.js → vibium-U3LBEI4K.js} +2 -2
- package/dist/cli/chunks/visual-security-LH7DRCDS.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-S46Y5BUJ.js → web-tree-sitter-QGZXQPXU.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-PTYCETNM.js → windsurf-installer-GGLQJWUI.js} +2 -2
- package/dist/cli/chunks/witness-chain-2BDZOPJ2.js +2 -0
- package/dist/cli/chunks/{witness-chain-5SCRFT2K.js → witness-chain-47A2AXUS.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-XIAMRVUZ.js → witness-key-manager-FVS7UOWM.js} +2 -2
- package/dist/cli/chunks/{workflow-BPQA2NAI.js → workflow-KIZPLTYW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UYOPFK2T.js +2 -0
- package/dist/cli/chunks/{wrappers-IWZZZOAU.js → wrappers-ER6XCMT6.js} +2 -2
- package/dist/cli/commands/platform.d.ts +17 -0
- package/dist/cli/commands/platform.js +91 -41
- package/dist/cli/commands/quality.d.ts +12 -0
- package/dist/cli/commands/quality.js +50 -74
- package/dist/cli/commands/test.js +33 -4
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +13 -4
- package/dist/cli/utils/file-discovery.d.ts +1 -0
- package/dist/cli/utils/file-discovery.js +13 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +5 -0
- package/dist/domains/quality-assessment/index.d.ts +1 -0
- package/dist/domains/quality-assessment/index.js +1 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +41 -0
- package/dist/domains/quality-assessment/quality-evidence.js +115 -0
- package/dist/domains/test-execution/coordinator.d.ts +1 -0
- package/dist/domains/test-execution/coordinator.js +11 -4
- package/dist/domains/test-execution/interfaces.d.ts +2 -0
- package/dist/domains/test-execution/services/retry-handler.js +3 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +93 -30
- package/dist/domains/test-generation/gates/test-quality-gate.d.ts +8 -2
- package/dist/domains/test-generation/gates/test-quality-gate.js +93 -4
- package/dist/domains/test-generation/generators/base-test-generator.js +0 -15
- package/dist/domains/test-generation/generators/jest-vitest-generator.js +17 -26
- package/dist/domains/test-generation/services/test-generator.js +7 -2
- package/dist/init/codex-installer.d.ts +22 -3
- package/dist/init/codex-installer.js +132 -54
- package/dist/init/codex-skill-manifest.d.ts +43 -0
- package/dist/init/codex-skill-manifest.js +21 -0
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/07-hooks.js +3 -1
- package/dist/init/phases/09-assets.js +10 -1
- package/dist/init/phases/phase-interface.d.ts +4 -0
- package/dist/init/settings-merge.d.ts +3 -1
- package/dist/init/settings-merge.js +9 -3
- package/dist/integrations/embeddings/index/HNSWIndex.js +2 -0
- package/dist/learning/real-embeddings.js +19 -3
- package/dist/mcp/bundle.js +453 -472
- package/dist/mcp/tools/quality-assessment/evaluate.d.ts +7 -0
- package/dist/mcp/tools/quality-assessment/evaluate.js +72 -20
- package/dist/mcp/tools/security-compliance/scan.js +8 -1
- package/package.json +6 -2
- package/dist/cli/chunks/adapter-NIUFP6QX.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DC4DNCPB.js +0 -2
- package/dist/cli/chunks/base-EXD3ULZT.js +0 -2
- package/dist/cli/chunks/better-sqlite3-OW5HIPEN.js +0 -2
- package/dist/cli/chunks/browser-workflow-KOMASCB7.js +0 -2
- package/dist/cli/chunks/chunk-5IH22DLD.js +0 -12
- package/dist/cli/chunks/chunk-6R6QGQ7D.js +0 -2
- package/dist/cli/chunks/chunk-A22RTEJ3.js +0 -62
- package/dist/cli/chunks/chunk-H4XZOIV6.js +0 -2
- package/dist/cli/chunks/chunk-T5L65R23.js +0 -2
- package/dist/cli/chunks/chunk-VRTNRI4H.js +0 -2
- package/dist/cli/chunks/client-ZJQMJO5N.js +0 -2
- package/dist/cli/chunks/codex-installer-HVSZBHH2.js +0 -10
- package/dist/cli/chunks/core-handlers-U2YJLH6O.js +0 -2
- package/dist/cli/chunks/cross-domain-router-E7EMKZEK.js +0 -2
- package/dist/cli/chunks/dream-ZMNQYBJO.js +0 -2
- package/dist/cli/chunks/file-discovery-C42TEUKT.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-2JL4MAJR.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-AZD6O35G.js +0 -2
- package/dist/cli/chunks/hnsw-index-WJLE4S5L.js +0 -2
- package/dist/cli/chunks/hybrid-router-YTKJBAS2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CX56GZXA.js +0 -2
- package/dist/cli/chunks/init-wizard-WE6HIC66.js +0 -2
- package/dist/cli/chunks/kernel-MT55LNNI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-WN3LQ2W7.js +0 -2
- package/dist/cli/chunks/llm-router-service-NKHEQQMN.js +0 -2
- package/dist/cli/chunks/load-test-3WIQASDF.js +0 -2
- package/dist/cli/chunks/memory-backend-W6YSNT6O.js +0 -2
- package/dist/cli/chunks/pattern-null-store-IV3ZESTR.js +0 -2
- package/dist/cli/chunks/platform-FA5TOPTH.js +0 -2
- package/dist/cli/chunks/protocol-executor-GFAG5G6K.js +0 -2
- package/dist/cli/chunks/provider-manager-TIVIJIYH.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-BYE7YF6Y.js +0 -2
- package/dist/cli/chunks/quality-EGSO2RAX.js +0 -7
- package/dist/cli/chunks/queen-coordinator-WOHYVV7A.js +0 -2
- package/dist/cli/chunks/router-VUW2UVCN.js +0 -2
- package/dist/cli/chunks/routing-feedback-WSUQMZAK.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-RHZCXVN6.js +0 -2
- package/dist/cli/chunks/safe-db-NTWEW7ZM.js +0 -2
- package/dist/cli/chunks/schedule-WEVC2GW2.js +0 -2
- package/dist/cli/chunks/scheduler-XHI5AJIS.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-QZUPKMHP.js +0 -2
- package/dist/cli/chunks/test-BE7EM6Y6.js +0 -33
- package/dist/cli/chunks/unified-memory-QKWUSEBV.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-Z2UQZRTK.js +0 -2
- package/dist/cli/chunks/unified-persistence-AVK2NSMI.js +0 -2
- package/dist/cli/chunks/visual-security-64UFH23G.js +0 -2
- package/dist/cli/chunks/witness-chain-ZIVSDX6C.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-TYP4MI2V.js +0 -2
- package/dist/cli/commands/init.d.ts +0 -19
- 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
|
|
239
|
-
const
|
|
240
|
-
const
|
|
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 ${
|
|
268
|
-
depTest += ` ? new ${
|
|
269
|
-
depTest += ` : ${
|
|
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 ${
|
|
279
|
-
callerTest += ` ? ${
|
|
280
|
-
callerTest += ` : ${
|
|
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
|
|
288
|
-
${mockDeclarations}
|
|
289
|
-
describe('${moduleName}', () => {
|
|
290
|
-
${similarityComment} describe('${testType} tests', () => {
|
|
291
|
-
it('should be defined', () => {
|
|
292
|
-
expect(${
|
|
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
|
-
*
|
|
48
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
|
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
|
-
|
|
113
|
-
|
|
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
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
166
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
199
|
-
*
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
|
|
209
|
-
|
|
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
|
-
*
|
|
291
|
+
* Replaces a previously marked AQE section or appends a new marked section.
|
|
218
292
|
*/
|
|
219
293
|
mergeExistingAgentsMd(agentsMdPath, newContent) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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({
|
|
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
|
|
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.
|