agentic-qe 3.13.4 → 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/.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/CHANGELOG.md +48 -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-PR3RQWXF.js → agent-booster-wasm-XDKGG2GP.js} +2 -2
- package/dist/cli/chunks/{agent-handler-J5EPFBSZ.js → agent-handler-CTPXGR5P.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-CCHI6QAA.js → agent-memory-branch-MG5OV7AY.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-ZU735SG7.js +2 -0
- package/dist/cli/chunks/{arena-KMKBGSMY.js → arena-FAHVOHNG.js} +2 -2
- package/dist/cli/chunks/{arena-SI7IPVZ3.js → arena-NYO4EUNQ.js} +4 -4
- package/dist/cli/chunks/{audit-ZDKR3HT6.js → audit-6544RL5D.js} +3 -3
- package/dist/cli/chunks/base-EKTX2PRE.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-BP5CZGMD.js → better-sqlite3-MTEONNCQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-MSYMTM5B.js → brain-handler-DPKCUQUC.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-FRAHCBTO.js → branch-enumerator-SU2KHC2C.js} +2 -2
- package/dist/cli/chunks/{browser-4KHKVNYC.js → browser-ITDN72YJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-BUPIMI3E.js +2 -0
- package/dist/cli/chunks/{chunk-NAAPL2HK.js → chunk-23AO43XW.js} +1 -1
- package/dist/cli/chunks/{chunk-7YAHECC5.js → chunk-2CF3XZAS.js} +2 -2
- package/dist/cli/chunks/{chunk-RLZZTFEN.js → chunk-2KPGJ4LO.js} +2 -2
- package/dist/cli/chunks/{chunk-NW4YPUPN.js → chunk-2QI3OJAC.js} +3 -3
- package/dist/cli/chunks/{chunk-WUXCL65V.js → chunk-2RZ2S6YR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y7VWCP35.js → chunk-2XZWYKXQ.js} +1 -1
- package/dist/cli/chunks/{chunk-RCRKCMN5.js → chunk-3EWWP3AO.js} +1 -1
- package/dist/cli/chunks/{chunk-6CZUQA4G.js → chunk-3XKCC7LE.js} +1 -1
- package/dist/cli/chunks/chunk-42KQE5H6.js +12 -0
- package/dist/cli/chunks/{chunk-EPSF2ERW.js → chunk-43BXSNKU.js} +2 -2
- package/dist/cli/chunks/{chunk-Z7FVGJYC.js → chunk-4E2NA2GY.js} +2 -2
- package/dist/cli/chunks/{chunk-E7FCVH32.js → chunk-4Z7JP7CD.js} +2 -2
- package/dist/cli/chunks/{chunk-LUAYTM77.js → chunk-54C3OHES.js} +1 -1
- package/dist/cli/chunks/{chunk-RKNKFLCQ.js → chunk-557BFPDB.js} +2 -2
- package/dist/cli/chunks/{chunk-27FWRWOB.js → chunk-5I5KMIFY.js} +2 -2
- package/dist/cli/chunks/{chunk-N57M7UPQ.js → chunk-5YIGAWBO.js} +2 -2
- package/dist/cli/chunks/{chunk-LEIG3KIG.js → chunk-64GTU5LR.js} +2 -2
- package/dist/cli/chunks/{chunk-CQP6BDSF.js → chunk-6BEMH5K5.js} +1 -1
- package/dist/cli/chunks/{chunk-GOHWEQEP.js → chunk-6H3I36DL.js} +2 -2
- package/dist/cli/chunks/{chunk-AROPZPNG.js → chunk-6L5V3JGJ.js} +1 -1
- package/dist/cli/chunks/{chunk-55E62F4T.js → chunk-6RV3W2UZ.js} +1 -1
- package/dist/cli/chunks/{chunk-KDICUKYX.js → chunk-6ZCAZ3TR.js} +2 -2
- package/dist/cli/chunks/{chunk-HGY62IYZ.js → chunk-74QRMQFR.js} +2 -2
- package/dist/cli/chunks/{chunk-PFQLB4XP.js → chunk-76OWM3ZO.js} +2 -2
- package/dist/cli/chunks/{chunk-YZGA4ELM.js → chunk-7A4EXSMN.js} +2 -2
- package/dist/cli/chunks/{chunk-ZAT65V6I.js → chunk-7BLXINIL.js} +2 -2
- package/dist/cli/chunks/{chunk-2Q73TQUQ.js → chunk-7LR4VP2I.js} +1 -1
- package/dist/cli/chunks/{chunk-27REOPQK.js → chunk-7M4X6WTF.js} +2 -2
- package/dist/cli/chunks/{chunk-A2G26WU4.js → chunk-7PHF2JM3.js} +1 -1
- package/dist/cli/chunks/{chunk-L3UTZEVW.js → chunk-7SQXEYII.js} +2 -2
- package/dist/cli/chunks/{chunk-DQ247474.js → chunk-AAGOBPIJ.js} +2 -2
- package/dist/cli/chunks/{chunk-UAEP2ZUQ.js → chunk-AJYJFIKO.js} +2 -2
- package/dist/cli/chunks/{chunk-VLELNETG.js → chunk-AKYOY5KR.js} +2 -2
- package/dist/cli/chunks/{chunk-XBSBVPSM.js → chunk-AKZ6PWHM.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXWU37F.js → chunk-APMLMLSL.js} +1 -1
- package/dist/cli/chunks/{chunk-SQCACQUM.js → chunk-AX4XIG4G.js} +2 -2
- package/dist/cli/chunks/{chunk-OU2YHXJY.js → chunk-BAJK26EI.js} +2 -2
- package/dist/cli/chunks/{chunk-SPTCNM45.js → chunk-BI6OTPC6.js} +2 -2
- package/dist/cli/chunks/chunk-BKI5NFQ5.js +2 -0
- package/dist/cli/chunks/{chunk-PI55PHUL.js → chunk-BUN4WBPW.js} +2 -2
- package/dist/cli/chunks/{chunk-JDADACZZ.js → chunk-BX5MY65W.js} +1 -1
- package/dist/cli/chunks/{chunk-XEI5LLHX.js → chunk-CD4YWKJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-LJSHQU2P.js → chunk-CHFZHORO.js} +5 -5
- package/dist/cli/chunks/{chunk-SJ26ZR75.js → chunk-CPIAZGHF.js} +2 -2
- package/dist/cli/chunks/{chunk-EUIUWZF4.js → chunk-D4P6BKGF.js} +3 -3
- package/dist/cli/chunks/{chunk-RO4BYINM.js → chunk-DFBJPOJR.js} +2 -2
- package/dist/cli/chunks/{chunk-X67O2KUE.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-XF4F5ZXO.js → chunk-EGI6SKQD.js} +2 -2
- package/dist/cli/chunks/{chunk-WSQE3VZB.js → chunk-ELC3UEML.js} +1 -1
- package/dist/cli/chunks/chunk-ELKWYWTD.js +2 -0
- package/dist/cli/chunks/{chunk-QXF6EQFP.js → chunk-EPMUAKU2.js} +2 -2
- package/dist/cli/chunks/{chunk-UOO7P2AK.js → chunk-EROQSNGD.js} +2 -2
- package/dist/cli/chunks/{chunk-26SNR2EK.js → chunk-EXXWOOUL.js} +3 -3
- package/dist/cli/chunks/{chunk-WCUXA3NV.js → chunk-FQPYD6YE.js} +1 -1
- package/dist/cli/chunks/{chunk-UNMWI4QU.js → chunk-FW6OPDA6.js} +1 -1
- package/dist/cli/chunks/{chunk-NQJLUY2K.js → chunk-FYWTMDID.js} +2 -2
- package/dist/cli/chunks/{chunk-N7LIYK7Z.js → chunk-G47WJMHM.js} +1 -1
- package/dist/cli/chunks/{chunk-6XVP6BGM.js → chunk-G73XY2NK.js} +2 -2
- package/dist/cli/chunks/{chunk-KQLJILCZ.js → chunk-GHSP4AC5.js} +1 -1
- package/dist/cli/chunks/{chunk-7EL5QEMJ.js → chunk-GITS44TM.js} +2 -2
- package/dist/cli/chunks/{chunk-NAZFAGJ5.js → chunk-GUO6JZMS.js} +2 -2
- package/dist/cli/chunks/{chunk-C3AF5Z55.js → chunk-GWBV26SE.js} +2 -2
- package/dist/cli/chunks/{chunk-ERKYIV25.js → chunk-HBYVYLBN.js} +2 -2
- package/dist/cli/chunks/{chunk-O45CEMVF.js → chunk-HMNBNGNO.js} +1 -1
- package/dist/cli/chunks/{chunk-ZYCPTARG.js → chunk-HZV3J4VQ.js} +2 -2
- package/dist/cli/chunks/{chunk-5IVXM3TE.js → chunk-IC5JGTM4.js} +1 -1
- package/dist/cli/chunks/{chunk-IUFNB6I6.js → chunk-IS3P5VBL.js} +2 -2
- package/dist/cli/chunks/{chunk-EEHEMDNV.js → chunk-JID7JO7K.js} +2 -2
- package/dist/cli/chunks/{chunk-4HVVVVUF.js → chunk-JOJ2UFHM.js} +2 -2
- package/dist/cli/chunks/{chunk-3RSF7POD.js → chunk-JTUTZUED.js} +2 -2
- package/dist/cli/chunks/{chunk-VDPQ7NVG.js → chunk-JX5IY2YK.js} +1 -1
- package/dist/cli/chunks/{chunk-KE656E6T.js → chunk-K55D3PAR.js} +3 -3
- package/dist/cli/chunks/{chunk-ISGKDLZ7.js → chunk-KAVYTFAS.js} +2 -2
- package/dist/cli/chunks/{chunk-5DESO7E4.js → chunk-KRCIC4JK.js} +2 -2
- package/dist/cli/chunks/{chunk-ESMSH7HG.js → chunk-L6H4MWVN.js} +2 -2
- package/dist/cli/chunks/{chunk-U52IQFMP.js → chunk-L6I2Q6UQ.js} +1 -1
- package/dist/cli/chunks/{chunk-MWWTYPFL.js → chunk-LARAXKTZ.js} +2 -2
- package/dist/cli/chunks/{chunk-FZ4MUDHZ.js → chunk-LELWVGN6.js} +1 -1
- package/dist/cli/chunks/chunk-M7456ZW5.js +2 -0
- package/dist/cli/chunks/{chunk-GOFP47XU.js → chunk-MF6OT43N.js} +1 -1
- package/dist/cli/chunks/{chunk-TO7FTPRV.js → chunk-MX35PIGJ.js} +2 -2
- package/dist/cli/chunks/{chunk-LASZCR5G.js → chunk-ND7IWTVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-KB4S7MGB.js → chunk-NFE4RV2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-O74V7MB4.js → chunk-NVZ3QROA.js} +2 -2
- package/dist/cli/chunks/{chunk-NQVF4M7L.js → chunk-OF5UL3FA.js} +1 -1
- package/dist/cli/chunks/{chunk-MP3RCZ75.js → chunk-OGUPLNRY.js} +1 -1
- package/dist/cli/chunks/{chunk-Q4VZXT6X.js → chunk-OJZ5LI3O.js} +1 -1
- package/dist/cli/chunks/{chunk-LIMFWEUI.js → chunk-OQ4HOHBI.js} +2 -2
- package/dist/cli/chunks/{chunk-HN2DD2DQ.js → chunk-OUWZTYRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-5RVWL2U3.js → chunk-PDOL3FGO.js} +3 -3
- package/dist/cli/chunks/{chunk-FJSL7TWU.js → chunk-PEHSTLU7.js} +1 -1
- package/dist/cli/chunks/{chunk-MPVOZKUP.js → chunk-PKCVQ2I4.js} +1 -1
- package/dist/cli/chunks/{chunk-XTHRSBMJ.js → chunk-PNDWHSZO.js} +2 -2
- package/dist/cli/chunks/{chunk-BQRCNRTJ.js → chunk-PSD2L2JB.js} +2 -2
- package/dist/cli/chunks/{chunk-PJFQGNRW.js → chunk-Q3J5OTZ2.js} +1 -1
- package/dist/cli/chunks/{chunk-IU5SILCS.js → chunk-QHX7VLVT.js} +2 -2
- package/dist/cli/chunks/{chunk-GNFKG2LX.js → chunk-QIHKSRUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6XCULO27.js → chunk-QLD2WVWN.js} +2 -2
- package/dist/cli/chunks/{chunk-GIU26D5G.js → chunk-R4VDRE75.js} +1 -1
- package/dist/cli/chunks/{chunk-JBHGMLN7.js → chunk-RDHBUCKQ.js} +182 -201
- package/dist/cli/chunks/{chunk-X5JMTHXC.js → chunk-RGBYJAKQ.js} +3 -3
- package/dist/cli/chunks/{chunk-MANWLRAW.js → chunk-RKXN5TVS.js} +1 -1
- package/dist/cli/chunks/{chunk-56QR72EB.js → chunk-S2EUFKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-44SYMJ4T.js → chunk-SN57SNLU.js} +2 -2
- package/dist/cli/chunks/{chunk-6BHRSGR7.js → chunk-SQDHFTGQ.js} +3 -3
- package/dist/cli/chunks/{chunk-OR2RC7ZH.js → chunk-THQ5ZBWP.js} +2 -2
- package/dist/cli/chunks/{chunk-W37WY3OL.js → chunk-TU5S33SD.js} +2 -2
- package/dist/cli/chunks/{chunk-4FP4PJ45.js → chunk-U5GGDJ44.js} +2 -2
- package/dist/cli/chunks/{chunk-VOAXVNO5.js → chunk-UGER2PGN.js} +4 -4
- package/dist/cli/chunks/{chunk-5R26MAMK.js → chunk-UUFLYBUO.js} +2 -2
- package/dist/cli/chunks/{chunk-UQFMQOZB.js → chunk-UWM4CCK7.js} +1 -1
- package/dist/cli/chunks/{chunk-C75V5PTW.js → chunk-V2T7QEPV.js} +1 -1
- package/dist/cli/chunks/{chunk-PIYDPOW6.js → chunk-VE5STFDP.js} +2 -2
- package/dist/cli/chunks/{chunk-75CFWCQV.js → chunk-VNRWJ5JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-PD2ZSCEH.js → chunk-VRV7CXEM.js} +1 -1
- package/dist/cli/chunks/{chunk-IN5KRJSE.js → chunk-W7H46LAX.js} +1 -1
- package/dist/cli/chunks/{chunk-TCYSMSBO.js → chunk-WAELEQP5.js} +2 -2
- package/dist/cli/chunks/{chunk-OU3SYEYJ.js → chunk-WDDU4I5Z.js} +1 -1
- package/dist/cli/chunks/{chunk-XLP44YGX.js → chunk-WLY2J6JP.js} +2 -2
- package/dist/cli/chunks/{chunk-GGZB2ZBB.js → chunk-WSSFH23M.js} +1 -1
- package/dist/cli/chunks/{chunk-II2RP3MY.js → chunk-WZI2REDL.js} +2 -2
- package/dist/cli/chunks/{chunk-6VNUASTQ.js → chunk-X53GJW2E.js} +2 -2
- package/dist/cli/chunks/{chunk-QENUKXPP.js → chunk-XACF7ZLM.js} +2 -2
- package/dist/cli/chunks/{chunk-VZO4V4R4.js → chunk-XNGYWOAK.js} +2 -2
- package/dist/cli/chunks/{chunk-KO3UQYGY.js → chunk-YFD6K7AS.js} +75 -75
- package/dist/cli/chunks/{chunk-TFFEB7XD.js → chunk-YG45ZONW.js} +2 -2
- package/dist/cli/chunks/{chunk-6GNVVQW3.js → chunk-YGMCRJSC.js} +2 -2
- package/dist/cli/chunks/{chunk-Z6FK7T7J.js → chunk-YIEMVVUH.js} +2 -2
- package/dist/cli/chunks/{chunk-OF7674H5.js → chunk-YSWI3APU.js} +2 -2
- package/dist/cli/chunks/{chunk-CTNDSP2M.js → chunk-YU4U3BUY.js} +1 -1
- package/dist/cli/chunks/{chunk-SFRYDGLF.js → chunk-Z5YNYVFO.js} +1 -1
- package/dist/cli/chunks/{chunk-IVZA5XTW.js → chunk-ZE3WS57T.js} +2 -2
- package/dist/cli/chunks/{chunk-KZAVYHH7.js → chunk-ZMA5OWIQ.js} +4 -4
- package/dist/cli/chunks/{chunk-TM6LLT4G.js → chunk-ZOD37GNG.js} +3 -3
- package/dist/cli/chunks/{chunk-GRMKN44A.js → chunk-ZQ7XQLLV.js} +3 -3
- package/dist/cli/chunks/{chunk-ITQCSIYG.js → chunk-ZUIPUO7Q.js} +1 -1
- package/dist/cli/chunks/{chunk-PRHLV6FS.js → chunk-ZWLFEZQC.js} +1 -1
- package/dist/cli/chunks/{ci-DK4FGREO.js → ci-IRCNFD32.js} +2 -2
- package/dist/cli/chunks/{ci-output-HQBBQQES.js → ci-output-NFOUNDJ2.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-MJCS46DN.js → circuit-breaker-GB7SQRD2.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-IIQT52H4.js → claude-flow-setup-STFKPPVL.js} +2 -2
- package/dist/cli/chunks/client-M4WF22UT.js +2 -0
- package/dist/cli/chunks/{cline-installer-7SPKUNNZ.js → cline-installer-MLKKIHIV.js} +2 -2
- package/dist/cli/chunks/{code-V2B4FP3X.js → code-ZRCJC42H.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-IRGAI76Y.js → code-index-extractor-VWDYYQY2.js} +2 -2
- package/dist/cli/chunks/{codex-installer-PDFCYRU6.js → codex-installer-I5BTWYQV.js} +2 -2
- package/dist/cli/chunks/{completions-TAJ6N7YZ.js → completions-5JCAFTQV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-JHQKQKBG.js → complexity-analyzer-6JLLAPGO.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-DESZXCLC.js → continuedev-installer-YBOLMUZR.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-OQPXBLWS.js → copilot-installer-GDBJZBXS.js} +2 -2
- package/dist/cli/chunks/core-handlers-3MNFXL44.js +2 -0
- package/dist/cli/chunks/{cost-tracker-KHDFSCAJ.js → cost-tracker-NEAVGEZI.js} +2 -2
- package/dist/cli/chunks/{coverage-T7EENIDE.js → coverage-DXS5XNAA.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-Q5X6ZLJY.js +2 -0
- package/dist/cli/chunks/{cursor-installer-X6BFU5QU.js → cursor-installer-3KEMFIFA.js} +2 -2
- package/dist/cli/chunks/{daemon-22NOG5XI.js → daemon-FT2J6VY4.js} +3 -3
- package/dist/cli/chunks/{daemon-UTPP4JCG.js → daemon-JN377KTA.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-XI6DG3FW.js → dag-attention-scheduler-EJFEWFXI.js} +2 -2
- package/dist/cli/chunks/{detect-7IMQGJ5I.js → detect-E5MN6N3L.js} +2 -2
- package/dist/cli/chunks/{dist-node-YMLM4K7J.js → dist-node-ZFSAQMFD.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LRTJGTEH.js → domain-handler-S7VFZ2MY.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-HZJ3WUCT.js → domain-transfer-LGHT3FN4.js} +2 -2
- package/dist/cli/chunks/dream-5QB6JABW.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-QSRN7Z5Q.js → embed-and-insert-pattern-OVQS6IKK.js} +2 -2
- package/dist/cli/chunks/{eval-JVVVQVV6.js → eval-45UWDD2R.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-ORZN3ROJ.js → experience-capture-middleware-XDRJSNPY.js} +3 -3
- package/dist/cli/chunks/{fast-paths-LUFARZR5.js → fast-paths-VEDCJL75.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZHQESXIP.js → feature-flags-NOTQVBLP.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2XC4ECLW.js → feature-flags-TGA3NWVL.js} +2 -2
- package/dist/cli/chunks/file-discovery-AHMR6IGX.js +2 -0
- package/dist/cli/chunks/{fleet-FUQ6G4SB.js → fleet-CQBUCH2S.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-A4E6OKGD.js → gnn-wrapper-SOZCIONJ.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-3JKQORXA.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-AHKFKM2J.js → hnsw-legacy-bridge-UILVP37N.js} +2 -2
- package/dist/cli/chunks/hnswlib-node-OHJQOSAH.js +2 -0
- package/dist/cli/chunks/{hooks-JNW5ZB2E.js → hooks-QVDOGEHG.js} +10 -10
- package/dist/cli/chunks/hybrid-router-CYEXFWDT.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-3DTAMNSJ.js → hypergraph-engine-YMVPBXZS.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZV4AZRGF.js → hypergraph-handler-SHUNZXUK.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HMJ7LAXR.js +2 -0
- package/dist/cli/chunks/{init-handler-NPOUX47N.js → init-handler-JE5FYJAV.js} +12 -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-D35TR6LG.js → kilocode-installer-TVP4YOOK.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-OHHTQENO.js → kiro-installer-XBSGANX7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-HA7XW46B.js +2 -0
- package/dist/cli/chunks/{learning-24PCHLWU.js → learning-O4ZXQVRE.js} +3 -3
- package/dist/cli/chunks/{llm-router-XLTE52H5.js → llm-router-FXXJHARR.js} +4 -4
- package/dist/cli/chunks/llm-router-service-FVGQSXYC.js +2 -0
- package/dist/cli/chunks/{load-BHMK4FIL.js → load-IVF6G2SK.js} +2 -2
- package/dist/cli/chunks/load-test-IQTO35GE.js +2 -0
- package/dist/cli/chunks/{mcp-V4MAYT7C.js → mcp-VXSDVG3H.js} +2 -2
- package/dist/cli/chunks/{memory-PDA7MQ7E.js → memory-BINJV3M6.js} +5 -5
- package/dist/cli/chunks/memory-backend-YGSOJ7SI.js +2 -0
- package/dist/cli/chunks/{memory-handlers-X5BLXOSH.js → memory-handlers-BJNFJZFP.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-KECHOXKD.js → multi-model-executor-RJHYK6JI.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-LWSCQOOZ.js → opencode-installer-VCTF5ETL.js} +2 -2
- package/dist/cli/chunks/{orchestrator-ENEBTEUW.js → orchestrator-5SKZ2BOK.js} +11 -11
- package/dist/cli/chunks/pattern-null-store-4WN5O2PF.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XIHGXYZZ.js → pattern-usage-recorder-AY2DAOQO.js} +2 -2
- package/dist/cli/chunks/{pipeline-GQOJM3LU.js → pipeline-EMBMC75N.js} +2 -2
- package/dist/cli/chunks/{platform-L56TGXGZ.js → platform-GADIFXCI.js} +2 -2
- package/dist/cli/chunks/{plugin-SZ6PZKYX.js → plugin-Q234ZAAY.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-SID5FQFW.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-5MMNVVPX.js → protocol-handler-ZZRFBVNA.js} +2 -2
- package/dist/cli/chunks/{prove-DJ6BQ2AK.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-CVHVSORK.js → quality-gate-AKV564GE.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-OKGOKGHI.js +2 -0
- package/dist/cli/chunks/{real-embeddings-DN2MEJVM.js → real-embeddings-74POUVMX.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-LTAQJWIH.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-PSWR2UCT.js → routing-handler-C7HMM7RL.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-VTP6Y7PN.js → ruvector-commands-PT6LRVCW.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-EBUMXPRO.js → rvf-dual-writer-PRKROTP3.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-5N7GHMD3.js → rvf-migration-adapter-ZI2XW4UX.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-GQKDBNRR.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-LR3SYGQK.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-YDWLYXYD.js → security-IMIWSAHW.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-I3HQY7DE.js → shared-rvf-adapter-UDKJNX6I.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-2UADEA5N.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-QRHI3F4V.js → status-handler-7WON7M7F.js} +2 -2
- package/dist/cli/chunks/{structural-health-FWKE63CM.js → structural-health-JTKTO3A4.js} +2 -2
- package/dist/cli/chunks/{sync-2QRCT5MT.js → sync-6ABYTAOL.js} +2 -2
- package/dist/cli/chunks/{sync-E32MBAOF.js → sync-UJSHBY3B.js} +2 -2
- package/dist/cli/chunks/{task-handler-C7BKMOCL.js → task-handler-5TZNOCCB.js} +2 -2
- package/dist/cli/chunks/{task-handlers-PADWLLDO.js → task-handlers-G7ZUGBHM.js} +3 -3
- package/dist/cli/chunks/test-BSJ6MVTG.js +33 -0
- package/dist/cli/chunks/{test-scheduling-5WKIWH4H.js → test-scheduling-OSJJXIYQ.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-6SKOJM3U.js → token-bootstrap-MRNFR4YI.js} +2 -2
- package/dist/cli/chunks/{token-usage-V6JW55RV.js → token-usage-YQN7ND7G.js} +2 -2
- package/dist/cli/chunks/{transformers-3UPFBYSB.js → transformers-QL3AG25C.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-UCY4S2DU.js → tree-sitter-wasm-parser-BECZRRZP.js} +2 -2
- package/dist/cli/chunks/{types-XNMNQGET.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-MVTMTOPL.js → upgrade-2ICXXV6D.js} +2 -2
- package/dist/cli/chunks/{validate-OJWR2AGZ.js → validate-LPAUH2F4.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-2RGSF2K2.js → validate-swarm-VWVE2GM7.js} +2 -2
- package/dist/cli/chunks/{vibium-O3ZLAEEZ.js → vibium-U3LBEI4K.js} +2 -2
- package/dist/cli/chunks/visual-security-LH7DRCDS.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-6VPASTI4.js → web-tree-sitter-QGZXQPXU.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-CINHOW3N.js → windsurf-installer-GGLQJWUI.js} +2 -2
- package/dist/cli/chunks/witness-chain-2BDZOPJ2.js +2 -0
- package/dist/cli/chunks/{witness-chain-2NXW7FT7.js → witness-chain-47A2AXUS.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-ODW4DJWT.js → witness-key-manager-FVS7UOWM.js} +2 -2
- package/dist/cli/chunks/{workflow-BFGS2GAU.js → workflow-KIZPLTYW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UYOPFK2T.js +2 -0
- package/dist/cli/chunks/{wrappers-VEVVSVMS.js → wrappers-ER6XCMT6.js} +2 -2
- 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 +2 -0
- package/dist/cli/handlers/init-handler.js +4 -1
- 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/orchestrator.js +1 -0
- package/dist/init/phases/07-hooks.js +3 -1
- package/dist/init/phases/phase-interface.d.ts +2 -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 +2 -2
- package/dist/cli/chunks/adapter-JISQ35YY.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-TVTNP76S.js +0 -2
- package/dist/cli/chunks/base-WBCYKM45.js +0 -2
- package/dist/cli/chunks/better-sqlite3-FXJFG2WH.js +0 -2
- package/dist/cli/chunks/browser-workflow-4JM3IWCS.js +0 -2
- package/dist/cli/chunks/chunk-344CLTV7.js +0 -62
- package/dist/cli/chunks/chunk-CW7LDLJ2.js +0 -2
- package/dist/cli/chunks/chunk-HGBVGEUE.js +0 -2
- package/dist/cli/chunks/chunk-JJ5YIKTJ.js +0 -12
- package/dist/cli/chunks/chunk-QGH54HTH.js +0 -2
- package/dist/cli/chunks/chunk-YQI6SOUO.js +0 -2
- package/dist/cli/chunks/client-FNDZB4TY.js +0 -2
- package/dist/cli/chunks/core-handlers-S37RHLKP.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7ZHDB2V3.js +0 -2
- package/dist/cli/chunks/dream-BEVYNIOO.js +0 -2
- package/dist/cli/chunks/file-discovery-UHXZQ7GS.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-K4YLB3X4.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-PPR3LTMA.js +0 -2
- package/dist/cli/chunks/hnsw-index-ZSKFT4LZ.js +0 -2
- package/dist/cli/chunks/hybrid-router-4SXBHTOY.js +0 -2
- package/dist/cli/chunks/impact-analyzer-55GE7EQD.js +0 -2
- package/dist/cli/chunks/init-wizard-EUQLSGI6.js +0 -2
- package/dist/cli/chunks/kernel-BSGSVYPM.js +0 -2
- package/dist/cli/chunks/knowledge-graph-OITIVT5J.js +0 -2
- package/dist/cli/chunks/llm-router-service-RUPU52AR.js +0 -2
- package/dist/cli/chunks/load-test-ZV3C55ZE.js +0 -2
- package/dist/cli/chunks/memory-backend-S3KCPHCF.js +0 -2
- package/dist/cli/chunks/pattern-null-store-ILVDKSCX.js +0 -2
- package/dist/cli/chunks/protocol-executor-GDRHCW3Q.js +0 -2
- package/dist/cli/chunks/provider-manager-BS4MVCSH.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-P3ARGHDN.js +0 -2
- package/dist/cli/chunks/quality-WKC4JCB3.js +0 -7
- package/dist/cli/chunks/queen-coordinator-GI7GNVDM.js +0 -2
- package/dist/cli/chunks/router-YU6MLJBV.js +0 -2
- package/dist/cli/chunks/routing-feedback-D6B2SK5V.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-M7ZVRN5Z.js +0 -2
- package/dist/cli/chunks/safe-db-3OHTLXG7.js +0 -2
- package/dist/cli/chunks/schedule-H43ADREQ.js +0 -2
- package/dist/cli/chunks/scheduler-CGSXNEPJ.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-V6U5FKVK.js +0 -2
- package/dist/cli/chunks/test-KX4UKHSX.js +0 -33
- package/dist/cli/chunks/unified-memory-H2J5BHPY.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-LFGIWMTS.js +0 -2
- package/dist/cli/chunks/unified-persistence-F6W7EXU5.js +0 -2
- package/dist/cli/chunks/visual-security-EHVU32UE.js +0 -2
- package/dist/cli/chunks/witness-chain-BIICGRHC.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-PVTYPYY4.js +0 -2
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
|
-
import { walkSourceFiles } from '../utils/file-discovery.js';
|
|
8
|
+
import { filterTestFilesForFramework, walkSourceFiles } from '../utils/file-discovery.js';
|
|
9
9
|
import { writeOutput, toJSON, toJUnit, testRunToMarkdown } from '../utils/ci-output.js';
|
|
10
|
+
import { writeQualityEvidence } from '../../domains/quality-assessment/quality-evidence.js';
|
|
10
11
|
export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
11
12
|
const testCmd = new Command('test')
|
|
12
13
|
.description('Test generation, execution, scheduling, and load testing')
|
|
@@ -52,6 +53,20 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
52
53
|
if (result.success && result.value) {
|
|
53
54
|
const generated = result.value;
|
|
54
55
|
const format = options.format;
|
|
56
|
+
const rejected = generated.tests.filter(test => test.qualityGateResult?.passed !== true);
|
|
57
|
+
if (rejected.length > 0) {
|
|
58
|
+
const details = rejected.map(test => {
|
|
59
|
+
const issues = test.qualityGateResult?.issues
|
|
60
|
+
?.map(issue => issue.description)
|
|
61
|
+
.filter(Boolean)
|
|
62
|
+
.join('; ') || 'missing passing quality evidence';
|
|
63
|
+
return `${test.sourceFile}: ${issues}`;
|
|
64
|
+
});
|
|
65
|
+
console.error(chalk.red(`Generation rejected ${rejected.length} invalid or unvalidated test artifact(s):`));
|
|
66
|
+
for (const detail of details)
|
|
67
|
+
console.error(chalk.red(` - ${detail}`));
|
|
68
|
+
await cleanupAndExit(1);
|
|
69
|
+
}
|
|
55
70
|
if (format === 'json') {
|
|
56
71
|
writeOutput(toJSON(generated), options.output);
|
|
57
72
|
}
|
|
@@ -105,7 +120,8 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
105
120
|
const path = await import('path');
|
|
106
121
|
const targetPath = path.resolve(target || '.');
|
|
107
122
|
// Fix #280: Use shared file discovery supporting all languages
|
|
108
|
-
const
|
|
123
|
+
const discoveredTestFiles = walkSourceFiles(targetPath, { testsOnly: true });
|
|
124
|
+
const testFiles = filterTestFilesForFramework(discoveredTestFiles, options.framework);
|
|
109
125
|
if (testFiles.length === 0) {
|
|
110
126
|
console.log(chalk.yellow('No test files found'));
|
|
111
127
|
return;
|
|
@@ -113,12 +129,27 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
113
129
|
console.log(chalk.gray(` Found ${testFiles.length} test files\n`));
|
|
114
130
|
const result = await testExecAPI.runTests({
|
|
115
131
|
testFiles,
|
|
132
|
+
framework: options.framework,
|
|
116
133
|
parallel: true,
|
|
117
134
|
retryCount: 2,
|
|
118
135
|
});
|
|
119
136
|
if (result.success && result.value) {
|
|
120
137
|
const run = result.value;
|
|
121
138
|
const format = options.format;
|
|
139
|
+
const total = run.passed + run.failed + run.skipped;
|
|
140
|
+
await context.kernel.memory.set('test-run:latest', {
|
|
141
|
+
passed: run.passed,
|
|
142
|
+
failed: run.failed,
|
|
143
|
+
skipped: run.skipped,
|
|
144
|
+
duration: run.duration,
|
|
145
|
+
measuredAt: new Date().toISOString(),
|
|
146
|
+
}, { namespace: 'test-execution', persist: true });
|
|
147
|
+
await writeQualityEvidence(context.kernel.memory, {
|
|
148
|
+
testsPassing: total > 0 ? (run.passed / total) * 100 : 0,
|
|
149
|
+
}, {
|
|
150
|
+
measuredAt: new Date().toISOString(),
|
|
151
|
+
source: 'aqe test execute',
|
|
152
|
+
});
|
|
122
153
|
if (format === 'json') {
|
|
123
154
|
writeOutput(toJSON(run), options.output);
|
|
124
155
|
}
|
|
@@ -130,7 +161,6 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
130
161
|
}
|
|
131
162
|
else {
|
|
132
163
|
// Default text output
|
|
133
|
-
const total = run.passed + run.failed + run.skipped;
|
|
134
164
|
console.log(chalk.green(`Test run complete`));
|
|
135
165
|
console.log(`\n Results:`);
|
|
136
166
|
console.log(` Total: ${chalk.white(total)}`);
|
|
@@ -143,7 +173,6 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
143
173
|
if (run.failed > 0) {
|
|
144
174
|
await cleanupAndExit(1);
|
|
145
175
|
}
|
|
146
|
-
const total = run.passed + run.failed + run.skipped;
|
|
147
176
|
if (total > 0 && run.skipped / total > 0.2) {
|
|
148
177
|
await cleanupAndExit(2);
|
|
149
178
|
}
|
|
@@ -104,6 +104,8 @@ interface InitOptions {
|
|
|
104
104
|
noGovernance?: boolean;
|
|
105
105
|
/** commander negatable flag: `--no-claude` sets this to false (#532). */
|
|
106
106
|
claude?: boolean;
|
|
107
|
+
/** commander negatable flag: `--no-statusline` sets this to false (#591). */
|
|
108
|
+
statusline?: boolean;
|
|
107
109
|
modular?: boolean;
|
|
108
110
|
}
|
|
109
111
|
export declare function createInitHandler(cleanupAndExit: (code: number) => Promise<never>): InitHandler;
|
|
@@ -31,6 +31,7 @@ export class InitHandler {
|
|
|
31
31
|
.option('-m, --max-agents <number>', 'Maximum concurrent agents', '15')
|
|
32
32
|
.option('--memory <backend>', 'Memory backend (sqlite|agentdb|hybrid|memory). "memory" = database-free, in-memory only.', 'hybrid')
|
|
33
33
|
.option('--no-database', 'Database-free install: alias for `--memory memory`. Skips the SQLite database phase and runs any MCP server in-memory — nothing is written to .agentic-qe/.')
|
|
34
|
+
.option('--no-statusline', 'Do not install AQE\'s Claude Code status line; remove an existing AQE-owned status line while preserving custom ones')
|
|
34
35
|
.option('--lazy', 'Enable lazy loading of domains')
|
|
35
36
|
.option('--wizard', 'Run interactive setup wizard')
|
|
36
37
|
.option('--auto', 'Auto-configure based on project analysis')
|
|
@@ -122,7 +123,8 @@ export class InitHandler {
|
|
|
122
123
|
// silently falls through to runStandardInit and installs the full Claude
|
|
123
124
|
// surface it was meant to suppress.
|
|
124
125
|
const noClaudeRequested = options.claude === false;
|
|
125
|
-
|
|
126
|
+
const noStatusLineRequested = options.statusline === false;
|
|
127
|
+
if (options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
|
|
126
128
|
console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
|
|
127
129
|
await this.runModularInit(options, context);
|
|
128
130
|
return;
|
|
@@ -184,6 +186,7 @@ export class InitHandler {
|
|
|
184
186
|
noMcp: options.noMcp && !options.withMcp,
|
|
185
187
|
noGovernance: options.noGovernance,
|
|
186
188
|
noClaude,
|
|
189
|
+
noStatusLine: options.statusline === false,
|
|
187
190
|
memoryBackend: memoryOnly ? 'memory' : undefined,
|
|
188
191
|
});
|
|
189
192
|
console.log(chalk.white(' Analyzing project...\n'));
|
|
@@ -25,4 +25,5 @@ export interface WalkOptions {
|
|
|
25
25
|
* @returns Array of absolute file paths
|
|
26
26
|
*/
|
|
27
27
|
export declare function walkSourceFiles(targetPath: string, options?: WalkOptions): string[];
|
|
28
|
+
export declare function filterTestFilesForFramework(testFiles: string[], framework: string): string[];
|
|
28
29
|
//# sourceMappingURL=file-discovery.d.ts.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Fixes #280: CLI commands previously only found .ts files.
|
|
8
8
|
*/
|
|
9
|
-
import { existsSync, readdirSync, statSync } from 'fs';
|
|
9
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
10
10
|
import { join, extname } from 'path';
|
|
11
11
|
// ============================================================================
|
|
12
12
|
// Source File Extensions by Language
|
|
@@ -102,4 +102,16 @@ export function walkSourceFiles(targetPath, options = {}) {
|
|
|
102
102
|
walk(targetPath, 0);
|
|
103
103
|
return result;
|
|
104
104
|
}
|
|
105
|
+
export function filterTestFilesForFramework(testFiles, framework) {
|
|
106
|
+
if (framework !== 'node' && framework !== 'node-test')
|
|
107
|
+
return testFiles;
|
|
108
|
+
return testFiles.filter(file => {
|
|
109
|
+
try {
|
|
110
|
+
return !/@playwright\/test|require\(\s*['"]playwright['"]\s*\)/.test(readFileSync(file, 'utf8'));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
105
117
|
//# sourceMappingURL=file-discovery.js.map
|
|
@@ -8,6 +8,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
8
8
|
import { ok, err } from '../../../shared/types';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
+
import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
defaultThreshold: 80,
|
|
13
14
|
enableLLMAnalysis: true, // On by default - opt-out
|
|
@@ -451,6 +452,10 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
451
452
|
}
|
|
452
453
|
// Store latest snapshot
|
|
453
454
|
await this.memory.set('coverage:latest', summary, { persist: true });
|
|
455
|
+
await writeQualityEvidence(this.memory, { coverage: summary.line }, {
|
|
456
|
+
measuredAt: new Date().toISOString(),
|
|
457
|
+
source: 'coverage-analysis',
|
|
458
|
+
});
|
|
454
459
|
// Store historical snapshot
|
|
455
460
|
const timestamp = Date.now();
|
|
456
461
|
await this.memory.set(`coverage:history:${timestamp}`, summary, {
|
|
@@ -9,6 +9,7 @@ export { QualityAssessmentCoordinator, type IQualityAssessmentCoordinator, type
|
|
|
9
9
|
export { QualityGateService, type IQualityGateService, type QualityGateConfig, } from './services/quality-gate';
|
|
10
10
|
export { QualityAnalyzerService, type IQualityAnalyzerService, type QualityAnalyzerConfig, } from './services/quality-analyzer';
|
|
11
11
|
export { DeploymentAdvisorService, type IDeploymentAdvisorService, type DeploymentAdvisorConfig, type DeploymentAccuracy, } from './services/deployment-advisor';
|
|
12
|
+
export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, evaluateQualityEvidence, loadQualityEvidence, writeQualityEvidence, type EvaluatedQualityCheck, type QualityEvidenceRecord, type QualityEvidenceValues, type QualityMetricName, type QualityThreshold, } from './quality-evidence.js';
|
|
12
13
|
export { CoherenceGateService, createCoherenceGateService, type CoherenceGateResult, type CoherenceGateServiceConfig, } from './services/coherence-gate';
|
|
13
14
|
export * from './coherence';
|
|
14
15
|
export type { QualityAssessmentAPI, GateEvaluationRequest, QualityAnalysisRequest, DeploymentRequest, ComplexityRequest, GateResult, GateCheck, QualityReport, QualityMetricDetail, QualityTrend, Recommendation, DeploymentAdvice, ComplexityReport, FileComplexity, ComplexitySummary, ComplexityHotspot, QualityMetrics, GateThresholds, } from './interfaces';
|
|
@@ -18,6 +18,7 @@ export { QualityAssessmentCoordinator, } from './coordinator';
|
|
|
18
18
|
export { QualityGateService, } from './services/quality-gate';
|
|
19
19
|
export { QualityAnalyzerService, } from './services/quality-analyzer';
|
|
20
20
|
export { DeploymentAdvisorService, } from './services/deployment-advisor';
|
|
21
|
+
export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, evaluateQualityEvidence, loadQualityEvidence, writeQualityEvidence, } from './quality-evidence.js';
|
|
21
22
|
// ============================================================================
|
|
22
23
|
// Coherence-Gated Quality Gates (ADR-030)
|
|
23
24
|
// ============================================================================
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { MemoryBackend } from '../../kernel/interfaces.js';
|
|
2
|
+
export declare const QUALITY_EVIDENCE_NAMESPACE = "quality-assessment";
|
|
3
|
+
export declare const DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS: number;
|
|
4
|
+
export declare const QUALITY_METRICS: readonly ["coverage", "testsPassing", "criticalBugs", "codeSmells", "securityVulnerabilities", "technicalDebt", "duplications"];
|
|
5
|
+
export type QualityMetricName = typeof QUALITY_METRICS[number];
|
|
6
|
+
export type QualityEvidenceValues = Record<QualityMetricName, number>;
|
|
7
|
+
export interface QualityEvidenceRecord {
|
|
8
|
+
schemaVersion: 1;
|
|
9
|
+
metric: QualityMetricName;
|
|
10
|
+
value: number;
|
|
11
|
+
measuredAt: string;
|
|
12
|
+
source: string;
|
|
13
|
+
}
|
|
14
|
+
export interface QualityThreshold {
|
|
15
|
+
direction: 'min' | 'max';
|
|
16
|
+
value: number;
|
|
17
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
18
|
+
}
|
|
19
|
+
export declare const DEFAULT_QUALITY_THRESHOLDS: Record<QualityMetricName, QualityThreshold>;
|
|
20
|
+
export interface EvaluatedQualityCheck {
|
|
21
|
+
name: QualityMetricName;
|
|
22
|
+
passed: boolean;
|
|
23
|
+
value: number;
|
|
24
|
+
threshold: number;
|
|
25
|
+
direction: 'min' | 'max';
|
|
26
|
+
severity: QualityThreshold['severity'];
|
|
27
|
+
}
|
|
28
|
+
export declare function writeQualityEvidence(memory: MemoryBackend, values: Partial<QualityEvidenceValues>, metadata: {
|
|
29
|
+
measuredAt: string;
|
|
30
|
+
source: string;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
export declare function loadQualityEvidence(memory: MemoryBackend, options?: {
|
|
33
|
+
now?: number;
|
|
34
|
+
maxAgeMs?: number;
|
|
35
|
+
}): Promise<QualityEvidenceValues>;
|
|
36
|
+
export declare function evaluateQualityEvidence(values: QualityEvidenceValues): {
|
|
37
|
+
passed: boolean;
|
|
38
|
+
checks: EvaluatedQualityCheck[];
|
|
39
|
+
recommendations: string[];
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=quality-evidence.d.ts.map
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export const QUALITY_EVIDENCE_NAMESPACE = 'quality-assessment';
|
|
2
|
+
export const DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
3
|
+
export const QUALITY_METRICS = [
|
|
4
|
+
'coverage',
|
|
5
|
+
'testsPassing',
|
|
6
|
+
'criticalBugs',
|
|
7
|
+
'codeSmells',
|
|
8
|
+
'securityVulnerabilities',
|
|
9
|
+
'technicalDebt',
|
|
10
|
+
'duplications',
|
|
11
|
+
];
|
|
12
|
+
export const DEFAULT_QUALITY_THRESHOLDS = {
|
|
13
|
+
coverage: { direction: 'min', value: 80, severity: 'high' },
|
|
14
|
+
testsPassing: { direction: 'min', value: 95, severity: 'critical' },
|
|
15
|
+
criticalBugs: { direction: 'max', value: 0, severity: 'critical' },
|
|
16
|
+
codeSmells: { direction: 'max', value: 20, severity: 'medium' },
|
|
17
|
+
securityVulnerabilities: { direction: 'max', value: 0, severity: 'critical' },
|
|
18
|
+
technicalDebt: { direction: 'max', value: 5, severity: 'medium' },
|
|
19
|
+
duplications: { direction: 'max', value: 5, severity: 'low' },
|
|
20
|
+
};
|
|
21
|
+
function evidenceKey(metric) {
|
|
22
|
+
return `quality-evidence:${metric}:latest`;
|
|
23
|
+
}
|
|
24
|
+
function parseMeasuredAt(measuredAt, now, maxAgeMs) {
|
|
25
|
+
if (typeof measuredAt !== 'string') {
|
|
26
|
+
throw new Error('Measured quality evidence is malformed: measuredAt is required.');
|
|
27
|
+
}
|
|
28
|
+
const timestamp = Date.parse(measuredAt);
|
|
29
|
+
if (!Number.isFinite(timestamp)) {
|
|
30
|
+
throw new Error('Measured quality evidence is malformed: measuredAt is invalid.');
|
|
31
|
+
}
|
|
32
|
+
if (timestamp > now + 60_000) {
|
|
33
|
+
throw new Error('Measured quality evidence is malformed: measuredAt is in the future.');
|
|
34
|
+
}
|
|
35
|
+
if (now - timestamp > maxAgeMs) {
|
|
36
|
+
throw new Error('Measured quality evidence is stale. Run the relevant quality analyzers again.');
|
|
37
|
+
}
|
|
38
|
+
return timestamp;
|
|
39
|
+
}
|
|
40
|
+
function validateRecord(record, metric, now, maxAgeMs) {
|
|
41
|
+
if (!record || typeof record !== 'object') {
|
|
42
|
+
throw new Error(`No measured quality evidence found for ${metric}.`);
|
|
43
|
+
}
|
|
44
|
+
const candidate = record;
|
|
45
|
+
if (candidate.schemaVersion !== 1
|
|
46
|
+
|| candidate.metric !== metric
|
|
47
|
+
|| !Number.isFinite(candidate.value)
|
|
48
|
+
|| candidate.value < 0
|
|
49
|
+
|| typeof candidate.source !== 'string'
|
|
50
|
+
|| candidate.source.trim().length === 0) {
|
|
51
|
+
throw new Error(`Measured quality evidence for ${metric} is malformed or incomplete.`);
|
|
52
|
+
}
|
|
53
|
+
parseMeasuredAt(candidate.measuredAt, now, maxAgeMs);
|
|
54
|
+
}
|
|
55
|
+
export async function writeQualityEvidence(memory, values, metadata) {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
parseMeasuredAt(metadata.measuredAt, now, Number.POSITIVE_INFINITY);
|
|
58
|
+
if (metadata.source.trim().length === 0) {
|
|
59
|
+
throw new Error('Quality evidence source is required.');
|
|
60
|
+
}
|
|
61
|
+
for (const metric of QUALITY_METRICS) {
|
|
62
|
+
const value = values[metric];
|
|
63
|
+
if (value === undefined)
|
|
64
|
+
continue;
|
|
65
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
66
|
+
throw new Error(`Quality evidence value for ${metric} must be a non-negative finite number.`);
|
|
67
|
+
}
|
|
68
|
+
const record = {
|
|
69
|
+
schemaVersion: 1,
|
|
70
|
+
metric,
|
|
71
|
+
value,
|
|
72
|
+
measuredAt: metadata.measuredAt,
|
|
73
|
+
source: metadata.source,
|
|
74
|
+
};
|
|
75
|
+
await memory.set(evidenceKey(metric), record, {
|
|
76
|
+
namespace: QUALITY_EVIDENCE_NAMESPACE,
|
|
77
|
+
persist: true,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function loadQualityEvidence(memory, options = {}) {
|
|
82
|
+
const now = options.now ?? Date.now();
|
|
83
|
+
const maxAgeMs = options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS;
|
|
84
|
+
const values = {};
|
|
85
|
+
for (const metric of QUALITY_METRICS) {
|
|
86
|
+
const record = await memory.get(evidenceKey(metric), {
|
|
87
|
+
namespace: QUALITY_EVIDENCE_NAMESPACE,
|
|
88
|
+
});
|
|
89
|
+
validateRecord(record, metric, now, maxAgeMs);
|
|
90
|
+
values[metric] = record.value;
|
|
91
|
+
}
|
|
92
|
+
return values;
|
|
93
|
+
}
|
|
94
|
+
export function evaluateQualityEvidence(values) {
|
|
95
|
+
const checks = QUALITY_METRICS.map((name) => {
|
|
96
|
+
const threshold = DEFAULT_QUALITY_THRESHOLDS[name];
|
|
97
|
+
const value = values[name];
|
|
98
|
+
return {
|
|
99
|
+
name,
|
|
100
|
+
value,
|
|
101
|
+
threshold: threshold.value,
|
|
102
|
+
direction: threshold.direction,
|
|
103
|
+
severity: threshold.severity,
|
|
104
|
+
passed: threshold.direction === 'min' ? value >= threshold.value : value <= threshold.value,
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
passed: checks.every((check) => check.passed),
|
|
109
|
+
checks,
|
|
110
|
+
recommendations: checks
|
|
111
|
+
.filter((check) => !check.passed)
|
|
112
|
+
.map((check) => `${check.name} failed its measured ${check.direction} threshold.`),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=quality-evidence.js.map
|
|
@@ -20,6 +20,7 @@ import type { WeakVertex } from '../../coordination/mincut/interfaces';
|
|
|
20
20
|
import { BaseDomainCoordinator, type BaseDomainCoordinatorConfig } from '../base-domain-coordinator.js';
|
|
21
21
|
import type { InfraHealingOrchestrator } from '../../strange-loop/infra-healing/infra-healing-orchestrator.js';
|
|
22
22
|
import { type TestNode, type TestOptimizationResult } from './services/mincut-test-optimizer.js';
|
|
23
|
+
export declare function calculateRetryStrategyConfidence(testCount: number): number;
|
|
23
24
|
/**
|
|
24
25
|
* Configuration for the test execution coordinator
|
|
25
26
|
*/
|
|
@@ -16,6 +16,12 @@ import { createDomainFinding, } from '../../coordination/consensus/domain-findin
|
|
|
16
16
|
import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
|
|
17
17
|
import { toError } from '../../shared/error-utils.js';
|
|
18
18
|
import { createMinCutTestOptimizer, } from './services/mincut-test-optimizer.js';
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Coordinator Configuration
|
|
21
|
+
// ============================================================================
|
|
22
|
+
export function calculateRetryStrategyConfidence(testCount) {
|
|
23
|
+
return Math.min(1, 0.7 + (testCount / 100));
|
|
24
|
+
}
|
|
19
25
|
const DEFAULT_COORDINATOR_CONFIG = {
|
|
20
26
|
simulateForTesting: false,
|
|
21
27
|
enablePrioritization: true,
|
|
@@ -127,9 +133,11 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
|
|
|
127
133
|
failed: 0, skipped: 0, duration: 0, failedTests: [],
|
|
128
134
|
});
|
|
129
135
|
}
|
|
130
|
-
const framework = this.detectFramework(testsToRun);
|
|
136
|
+
const framework = request.framework ?? this.detectFramework(testsToRun);
|
|
131
137
|
const workers = request.workers ?? Math.min(4, Math.max(1, testsToRun.length));
|
|
132
|
-
|
|
138
|
+
// Batched runners own internal parallelism, so the timeout applies to the
|
|
139
|
+
// whole discovered suite rather than one file.
|
|
140
|
+
const timeout = request.timeout ?? Math.max(60000, testsToRun.length * 2000);
|
|
133
141
|
// Use parallel execution by default (unless explicitly disabled)
|
|
134
142
|
if (request.parallel !== false && testsToRun.length > 1) {
|
|
135
143
|
const result = await this.executeParallel({
|
|
@@ -473,8 +481,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
|
|
|
473
481
|
testCount: testsToRetry.length,
|
|
474
482
|
maxRetries: request.maxRetries,
|
|
475
483
|
backoffType: request.backoff ?? 'exponential',
|
|
476
|
-
},
|
|
477
|
-
);
|
|
484
|
+
}, calculateRetryStrategyConfidence(testsToRetry.length));
|
|
478
485
|
if (!isStrategyVerified) {
|
|
479
486
|
logger.warn(`Retry strategy not verified, proceeding with reduced retries`);
|
|
480
487
|
request = { ...request, maxRetries: Math.max(1, Math.floor(request.maxRetries / 2)) };
|
|
@@ -37,6 +37,8 @@ export type TestExecutionAPI = ITestExecutionAPI;
|
|
|
37
37
|
export interface ISimpleTestRequest {
|
|
38
38
|
/** Test files to execute */
|
|
39
39
|
testFiles: string[];
|
|
40
|
+
/** Explicit test framework; auto-detected when omitted */
|
|
41
|
+
framework?: string;
|
|
40
42
|
/** Run tests in parallel (default: true) */
|
|
41
43
|
parallel?: boolean;
|
|
42
44
|
/** Number of retry attempts for failed tests (default: 0) */
|
|
@@ -339,7 +339,7 @@ export class RetryHandlerService {
|
|
|
339
339
|
// vitest run --reporter=json testFile -t "testName"
|
|
340
340
|
{
|
|
341
341
|
const vitestArgs = ['vitest', 'run', '--reporter=json', testFile];
|
|
342
|
-
if (testName) {
|
|
342
|
+
if (testName && testName !== testFile) {
|
|
343
343
|
vitestArgs.push('-t', testName);
|
|
344
344
|
}
|
|
345
345
|
return { command: npx, args: vitestArgs };
|
|
@@ -348,7 +348,7 @@ export class RetryHandlerService {
|
|
|
348
348
|
// jest --json testFile -t "testName"
|
|
349
349
|
{
|
|
350
350
|
const jestArgs = ['jest', '--json', '--testPathPattern', testFile];
|
|
351
|
-
if (testName) {
|
|
351
|
+
if (testName && testName !== testFile) {
|
|
352
352
|
jestArgs.push('-t', testName);
|
|
353
353
|
}
|
|
354
354
|
return { command: npx, args: jestArgs };
|
|
@@ -357,7 +357,7 @@ export class RetryHandlerService {
|
|
|
357
357
|
// mocha --reporter json testFile --grep "testName"
|
|
358
358
|
{
|
|
359
359
|
const mochaArgs = ['mocha', '--reporter', 'json', testFile];
|
|
360
|
-
if (testName) {
|
|
360
|
+
if (testName && testName !== testFile) {
|
|
361
361
|
mochaArgs.push('--grep', testName);
|
|
362
362
|
}
|
|
363
363
|
return { command: npx, args: mochaArgs };
|
|
@@ -105,6 +105,7 @@ export declare class TestExecutorService implements ITestExecutionService {
|
|
|
105
105
|
private validateParallelRequest;
|
|
106
106
|
private runTests;
|
|
107
107
|
private executeTestFile;
|
|
108
|
+
private executeTestFiles;
|
|
108
109
|
/**
|
|
109
110
|
* Spawn actual test runner process (vitest, jest, mocha)
|
|
110
111
|
*/
|
|
@@ -117,6 +118,10 @@ export declare class TestExecutorService implements ITestExecutionService {
|
|
|
117
118
|
* Parse test runner output to extract results
|
|
118
119
|
*/
|
|
119
120
|
private parseTestOutput;
|
|
121
|
+
/**
|
|
122
|
+
* Parse the TAP or spec summary emitted by Node's built-in test runner.
|
|
123
|
+
*/
|
|
124
|
+
private parseNodeTestOutput;
|
|
120
125
|
/**
|
|
121
126
|
* Parse vitest JSON output
|
|
122
127
|
*/
|