agentic-qe 3.14.6 → 3.14.8
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 +18 -9
- package/.claude/helpers/helpers.manifest.json +6 -5
- package/.claude/helpers/hook-handler.cjs +40 -12
- package/.claude/helpers/memory.cjs +86 -0
- package/.claude/helpers/router.cjs +105 -0
- package/.claude/helpers/session.cjs +166 -0
- package/.claude/helpers/statusline.cjs +73 -621
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +204 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/notifications/retry-queue.js +5 -0
- package/dist/adapters/claude-flow/pretrain-bridge.js +3 -2
- package/dist/agents/claim-verifier/verifiers/file-verifier.js +3 -2
- package/dist/cli/bundle.js +8 -8
- package/dist/cli/chunks/adapter-XYCOXQCC.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-2YGML6OU.js → agent-booster-wasm-67OKGDGZ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-D5SSQYNU.js → agent-handler-4HZEQ3WQ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-YHPLTITV.js → agent-memory-branch-IBHZQSRN.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DTJCROTG.js +2 -0
- package/dist/cli/chunks/{arena-7BGOXGXO.js → arena-EJBIGSF4.js} +2 -2
- package/dist/cli/chunks/{arena-MCE6EU7K.js → arena-LCLRGUIK.js} +4 -4
- package/dist/cli/chunks/{audit-BMWTQECB.js → audit-PY4JNDQQ.js} +3 -3
- package/dist/cli/chunks/base-5TQ34GMD.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-PMUNGASU.js → better-sqlite3-2JG5K6XT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-QPUFYX7F.js → brain-handler-3UYK55GA.js} +4 -4
- package/dist/cli/chunks/{branch-enumerator-WKFDGRN4.js → branch-enumerator-GOSWOX46.js} +2 -2
- package/dist/cli/chunks/{browser-VY5HKH5X.js → browser-DC2JV47Z.js} +2 -2
- package/dist/cli/chunks/browser-workflow-KWX4ESTJ.js +2 -0
- package/dist/cli/chunks/{chunk-FWASDOT2.js → chunk-25EEIAHS.js} +2 -2
- package/dist/cli/chunks/{chunk-P6OYS755.js → chunk-3576QGPP.js} +1 -1
- package/dist/cli/chunks/{chunk-2TMWAQQ3.js → chunk-3EKG7HFV.js} +4 -4
- package/dist/cli/chunks/{chunk-QZANMBIT.js → chunk-3FCHH4VP.js} +1 -1
- package/dist/cli/chunks/{chunk-CD542DNJ.js → chunk-3S5IIK32.js} +1 -1
- package/dist/cli/chunks/{chunk-5VFPCSK7.js → chunk-3X2JSW3R.js} +1 -1
- package/dist/cli/chunks/{chunk-D45SG6CP.js → chunk-4HXFPBAA.js} +1 -1
- package/dist/cli/chunks/{chunk-JVNTSNWU.js → chunk-4PY44TKH.js} +2 -2
- package/dist/cli/chunks/{chunk-DZ3AUAAB.js → chunk-4RNCVSVN.js} +2 -2
- package/dist/cli/chunks/{chunk-JBTPOIAC.js → chunk-56M4QNXU.js} +2 -2
- package/dist/cli/chunks/{chunk-H52HZ67P.js → chunk-5X4HDW5W.js} +2 -2
- package/dist/cli/chunks/{chunk-UNFFDHER.js → chunk-673XJBGW.js} +10 -32
- package/dist/cli/chunks/{chunk-RTFO5UQH.js → chunk-6F7MFHTY.js} +2 -2
- package/dist/cli/chunks/{chunk-Y3LZ35OG.js → chunk-6GJWT2OY.js} +2 -2
- package/dist/cli/chunks/{chunk-JXGFRBUO.js → chunk-6GNWVPMR.js} +2 -2
- package/dist/cli/chunks/{chunk-3EA536JF.js → chunk-6VTC3OHD.js} +2 -2
- package/dist/cli/chunks/{chunk-W6HXLH5G.js → chunk-775WGWLL.js} +3 -3
- package/dist/cli/chunks/{chunk-TVYY3OCX.js → chunk-77WL5HQW.js} +1 -1
- package/dist/cli/chunks/chunk-7STWD4KJ.js +3 -0
- package/dist/cli/chunks/{chunk-YSLL6VSL.js → chunk-7TNCEVWX.js} +2 -2
- package/dist/cli/chunks/{chunk-Z7WODOTH.js → chunk-7X3LMTRA.js} +2 -2
- package/dist/cli/chunks/{chunk-RZZCUIAI.js → chunk-A53MMSGC.js} +2 -2
- package/dist/cli/chunks/{chunk-QW6VMTBR.js → chunk-A5CLVZC3.js} +2 -2
- package/dist/cli/chunks/{chunk-IG5GNEC6.js → chunk-AEYJ4ZLA.js} +1 -1
- package/dist/cli/chunks/{chunk-NMAIY4PX.js → chunk-AJ5PCJQ2.js} +11 -11
- package/dist/cli/chunks/{chunk-WO4QMXIG.js → chunk-AJMAKUS3.js} +2 -2
- package/dist/cli/chunks/{chunk-2NPKIBAZ.js → chunk-AOD2ES44.js} +2 -2
- package/dist/cli/chunks/chunk-AR2S4DOB.js +2 -0
- package/dist/cli/chunks/{chunk-257E2A5M.js → chunk-AUFV2G2J.js} +5 -5
- package/dist/cli/chunks/{chunk-BVR7RMC5.js → chunk-B2QKBQYD.js} +1 -1
- package/dist/cli/chunks/{chunk-B6D2CHEH.js → chunk-BCCSV3RH.js} +1 -1
- package/dist/cli/chunks/{chunk-2YXGBZWV.js → chunk-BFIXUKOR.js} +1 -1
- package/dist/cli/chunks/chunk-BHPTHC5O.js +4 -0
- package/dist/cli/chunks/{chunk-AIRGNL55.js → chunk-BITFGVZ4.js} +2 -2
- package/dist/cli/chunks/{chunk-MBRHSU6W.js → chunk-BL6273KR.js} +10 -10
- package/dist/cli/chunks/{chunk-SMDN3BQZ.js → chunk-BOIUENWW.js} +1 -1
- package/dist/cli/chunks/{chunk-YS4FCTWF.js → chunk-BT3MI2BW.js} +1 -1
- package/dist/cli/chunks/{chunk-JZOS5FCX.js → chunk-BTBJ2NLH.js} +2 -2
- package/dist/cli/chunks/{chunk-CCK4BF76.js → chunk-BUVJIVFG.js} +1 -1
- package/dist/cli/chunks/{chunk-2JVWITNK.js → chunk-BZIPW2PA.js} +56 -80
- package/dist/cli/chunks/{chunk-BPEDWS6O.js → chunk-C647D42G.js} +2 -2
- package/dist/cli/chunks/{chunk-6U7LNMWZ.js → chunk-CBWM5NOO.js} +3 -3
- package/dist/cli/chunks/{chunk-72KXSMWI.js → chunk-CIEXUYY7.js} +1 -1
- package/dist/cli/chunks/{chunk-SE4WIB26.js → chunk-CLUHGBLN.js} +4 -4
- package/dist/cli/chunks/{chunk-JIXUMYKZ.js → chunk-CQEWL32R.js} +1 -1
- package/dist/cli/chunks/{chunk-CM7U6TAX.js → chunk-CXUC7YKA.js} +2 -2
- package/dist/cli/chunks/{chunk-7LPR6HJG.js → chunk-D2Y36V5J.js} +2 -2
- package/dist/cli/chunks/{chunk-BJTJLJRZ.js → chunk-DSJJHPPS.js} +4 -4
- package/dist/cli/chunks/{chunk-ZVWVV4EX.js → chunk-DZHXCOSK.js} +1 -1
- package/dist/cli/chunks/{chunk-7Z5LHRC3.js → chunk-EBV3WFIR.js} +2 -2
- package/dist/cli/chunks/{chunk-KNNISEDY.js → chunk-EKO5QL2B.js} +1 -1
- package/dist/cli/chunks/{chunk-XAS3XRYM.js → chunk-EMOZ5O5S.js} +1 -1
- package/dist/cli/chunks/{chunk-62N4NUJH.js → chunk-ES7TAJRJ.js} +2 -2
- package/dist/cli/chunks/chunk-EXQGHTPD.js +65 -0
- package/dist/cli/chunks/{chunk-Q7EAGKAE.js → chunk-F2WAB4WK.js} +2 -2
- package/dist/cli/chunks/{chunk-L4RUBPLR.js → chunk-F57FTFWS.js} +2 -2
- package/dist/cli/chunks/{chunk-GGRHV6D7.js → chunk-F6JJNBE5.js} +1 -1
- package/dist/cli/chunks/{chunk-3EZOZN25.js → chunk-FRC7AFB4.js} +2 -2
- package/dist/cli/chunks/{chunk-RSXXCL4A.js → chunk-G36RZF2Y.js} +1 -1
- package/dist/cli/chunks/{chunk-ZSPU4MOS.js → chunk-G3C7Z6FO.js} +2 -2
- package/dist/cli/chunks/{chunk-SNOBH4AZ.js → chunk-GA63ESNT.js} +2 -2
- package/dist/cli/chunks/{chunk-HNFVJP4I.js → chunk-GHMJFICO.js} +2 -2
- package/dist/cli/chunks/{chunk-7D3V65N5.js → chunk-GK5WLUX3.js} +1 -1
- package/dist/cli/chunks/{chunk-RETBYIAC.js → chunk-GQJ4QDEN.js} +6 -6
- package/dist/cli/chunks/chunk-GVLRE3BV.js +12 -0
- package/dist/cli/chunks/{chunk-MW2GGZZ5.js → chunk-H5UH234L.js} +1 -1
- package/dist/cli/chunks/{chunk-HM6ZSCPI.js → chunk-HBAFXWSO.js} +1 -1
- package/dist/cli/chunks/{chunk-DHVX5UB2.js → chunk-HE3BDBAO.js} +2 -2
- package/dist/cli/chunks/{chunk-YFBSPLJG.js → chunk-HHANMCD2.js} +1 -1
- package/dist/cli/chunks/chunk-HPVYJ6JH.js +2 -0
- package/dist/cli/chunks/{chunk-PX5YDCRH.js → chunk-I6NZFBT3.js} +3 -3
- package/dist/cli/chunks/{chunk-5J6W7SIA.js → chunk-ISBOHF6Y.js} +1 -1
- package/dist/cli/chunks/{chunk-UCFQALXO.js → chunk-J24AJEDE.js} +2 -2
- package/dist/cli/chunks/{chunk-FBMN7B46.js → chunk-J5HTQHJK.js} +2 -2
- package/dist/cli/chunks/{chunk-GPYVDFB3.js → chunk-JDOVO4E4.js} +205 -195
- package/dist/cli/chunks/chunk-JQAJUXRE.js +2 -0
- package/dist/cli/chunks/{chunk-RG52OKAM.js → chunk-JRK5GX56.js} +1 -1
- package/dist/cli/chunks/{chunk-I33ERSGB.js → chunk-JRLZ7LZ3.js} +2 -2
- package/dist/cli/chunks/{chunk-NQZ5AR3D.js → chunk-JTOFLDU7.js} +2 -2
- package/dist/cli/chunks/{chunk-NHWGMJAP.js → chunk-K6EOHGKS.js} +2 -2
- package/dist/cli/chunks/{chunk-5QQSIGUA.js → chunk-KKXH25IH.js} +2 -2
- package/dist/cli/chunks/{chunk-VGFFFKGK.js → chunk-KNSQWM2E.js} +2 -2
- package/dist/cli/chunks/{chunk-B6MOJC3X.js → chunk-L5T32SRF.js} +1 -1
- package/dist/cli/chunks/{chunk-WGM35YWL.js → chunk-LKFBW2QM.js} +2 -2
- package/dist/cli/chunks/{chunk-AJRUJAAK.js → chunk-LMAI74EP.js} +1 -1
- package/dist/cli/chunks/{chunk-C6KWXUFJ.js → chunk-LQVS5IWH.js} +2 -2
- package/dist/cli/chunks/{chunk-H5BS5VH7.js → chunk-LRGTPUJA.js} +2 -2
- package/dist/cli/chunks/{chunk-3HZS4M3O.js → chunk-LTHV4PIG.js} +2 -2
- package/dist/cli/chunks/{chunk-7CUQCCMD.js → chunk-M7QKCHLQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CF2ISEOJ.js → chunk-N3ASALOL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCRTRYXK.js → chunk-NEXBTLN6.js} +2 -2
- package/dist/cli/chunks/{chunk-VMNWDJIZ.js → chunk-NJEEKYEP.js} +3 -3
- package/dist/cli/chunks/{chunk-ZEV3YTO7.js → chunk-NWUFTLSF.js} +2 -2
- package/dist/cli/chunks/{chunk-MQROI74N.js → chunk-O4QB2GFL.js} +2 -2
- package/dist/cli/chunks/{chunk-GDSXITFH.js → chunk-OA75C4HY.js} +2 -2
- package/dist/cli/chunks/{chunk-SESK3ARK.js → chunk-OVMG6EEF.js} +2 -2
- package/dist/cli/chunks/{chunk-MUOG6QXR.js → chunk-OX7MJFLC.js} +2 -2
- package/dist/cli/chunks/{chunk-ELLBS5RP.js → chunk-OZJQN7YE.js} +2 -2
- package/dist/cli/chunks/{chunk-D6CJIGRU.js → chunk-PFXCRRR6.js} +55 -55
- package/dist/cli/chunks/{chunk-ZL6SYKUK.js → chunk-PVJLQ2YZ.js} +1 -1
- package/dist/cli/chunks/{chunk-6LIHFV7O.js → chunk-QDRFLM77.js} +2 -2
- package/dist/cli/chunks/{chunk-H6ZM3PUT.js → chunk-QH7C4PTX.js} +1 -1
- package/dist/cli/chunks/chunk-QKM4XT2F.js +2 -0
- package/dist/cli/chunks/{chunk-V4DM6ELU.js → chunk-QP7EKLWU.js} +2 -2
- package/dist/cli/chunks/{chunk-BAMN2CHI.js → chunk-QPACHVDI.js} +1 -1
- package/dist/cli/chunks/{chunk-QDFTT3RF.js → chunk-QQVE65ER.js} +2 -2
- package/dist/cli/chunks/{chunk-LL3IGZBI.js → chunk-QYCZYJH7.js} +2 -2
- package/dist/cli/chunks/{chunk-DUYOVM5I.js → chunk-R6I5I724.js} +2 -2
- package/dist/cli/chunks/{chunk-ENGZ4D5V.js → chunk-RJJIPTVH.js} +2 -2
- package/dist/cli/chunks/{chunk-7NITCZWD.js → chunk-RM6OC35G.js} +1 -1
- package/dist/cli/chunks/{chunk-Q5XTSMWR.js → chunk-RTD4U7IW.js} +2 -2
- package/dist/cli/chunks/{chunk-DBDPRORT.js → chunk-SKJQKOFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ICTXTNQZ.js → chunk-SMBGK7XI.js} +1 -1
- package/dist/cli/chunks/{chunk-PI7TJS62.js → chunk-SPS472C5.js} +2 -2
- package/dist/cli/chunks/{chunk-IV5UZOHH.js → chunk-SUNXA2UR.js} +2 -2
- package/dist/cli/chunks/{chunk-IB27QACC.js → chunk-SVP3BP52.js} +2 -2
- package/dist/cli/chunks/{chunk-5OOMJGFN.js → chunk-T4WQPE77.js} +1 -1
- package/dist/cli/chunks/{chunk-66VWCR67.js → chunk-T53ZN4NO.js} +2 -2
- package/dist/cli/chunks/chunk-T6W2EYHC.js +2 -0
- package/dist/cli/chunks/{chunk-EAY2JMZG.js → chunk-T7YCNOW5.js} +2 -2
- package/dist/cli/chunks/{chunk-FZOBD67M.js → chunk-TCQWVVSR.js} +1 -1
- package/dist/cli/chunks/{chunk-SJUXE4IC.js → chunk-TGRHO4ES.js} +2 -2
- package/dist/cli/chunks/{chunk-6RE3X4V5.js → chunk-TP7L4EX6.js} +2 -2
- package/dist/cli/chunks/{chunk-6SQM2MUX.js → chunk-TT45RCLN.js} +2 -2
- package/dist/cli/chunks/{chunk-AVBJYI5I.js → chunk-TUZNWRYC.js} +1 -1
- package/dist/cli/chunks/{chunk-YHKEDEAA.js → chunk-U2QTL5T2.js} +3 -3
- package/dist/cli/chunks/chunk-U64QORFO.js +2 -0
- package/dist/cli/chunks/{chunk-BBT64TII.js → chunk-UHLZKH6B.js} +4 -4
- package/dist/cli/chunks/{chunk-GSF6MB64.js → chunk-UIWXKRTK.js} +2 -2
- package/dist/cli/chunks/{chunk-JMONHE4B.js → chunk-UNFE4RPV.js} +1 -1
- package/dist/cli/chunks/{chunk-DPYSUDAO.js → chunk-UQGIC5OX.js} +1 -1
- package/dist/cli/chunks/{chunk-IAF6T27S.js → chunk-VAXTPLO3.js} +2 -2
- package/dist/cli/chunks/{chunk-6SH5VZUD.js → chunk-VCSNNLWL.js} +2 -2
- package/dist/cli/chunks/chunk-VSPNIDQK.js +21 -0
- package/dist/cli/chunks/{chunk-6OS76PHI.js → chunk-VV2JVYOI.js} +2 -2
- package/dist/cli/chunks/{chunk-IQO7UCFR.js → chunk-VW7AXJQS.js} +2 -2
- package/dist/cli/chunks/{chunk-UQ32JHES.js → chunk-W7JUD4EZ.js} +2 -2
- package/dist/cli/chunks/chunk-WFKE7NZ5.js +12 -0
- package/dist/cli/chunks/{chunk-RFNPJK6N.js → chunk-WVEHKAIH.js} +3 -3
- package/dist/cli/chunks/{chunk-64VGZQLB.js → chunk-XAESN54Q.js} +1 -1
- package/dist/cli/chunks/{chunk-BMAPORJ7.js → chunk-XECZYQT5.js} +2 -2
- package/dist/cli/chunks/chunk-XFT4FYTC.js +2 -0
- package/dist/cli/chunks/{chunk-Y3UOUNHM.js → chunk-YHX74M7C.js} +2 -2
- package/dist/cli/chunks/chunk-YIWBJ637.js +2 -0
- package/dist/cli/chunks/{chunk-SDRHUMJB.js → chunk-Z5UZOYQS.js} +2 -2
- package/dist/cli/chunks/{chunk-7J6QC567.js → chunk-Z6G3QVZ4.js} +12 -12
- package/dist/cli/chunks/ci-5LIV2HW5.js +82 -0
- package/dist/cli/chunks/{ci-output-LDT24TS3.js → ci-output-UO5BDFU4.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-F5V4KITU.js → circuit-breaker-UQDPXYRD.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-DT6WQQVD.js → claude-flow-setup-62QES3QX.js} +2 -2
- package/dist/cli/chunks/client-AJZKCP4I.js +2 -0
- package/dist/cli/chunks/{cline-installer-G7TJOAEX.js → cline-installer-X7VZTSZG.js} +2 -2
- package/dist/cli/chunks/{code-PGE6A42V.js → code-H3BF4L4H.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-RNITH372.js → code-index-extractor-BJGFZGGL.js} +2 -2
- package/dist/cli/chunks/{codex-installer-LBX77AI3.js → codex-installer-KVZWKU6S.js} +2 -2
- package/dist/cli/chunks/{completions-4AWLAARX.js → completions-YMILE6V7.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-ZPNSS476.js → complexity-analyzer-J26N2PWG.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UAPWX6OA.js → continuedev-installer-MAR42OV7.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-BJN2YJGI.js → copilot-installer-CVOJF6OT.js} +2 -2
- package/dist/cli/chunks/core-handlers-MQHEMGDV.js +2 -0
- package/dist/cli/chunks/{cost-tracker-MHP2VJ63.js → cost-tracker-SXLWXE55.js} +2 -2
- package/dist/cli/chunks/{coverage-PQB4IEFG.js → coverage-D7HCHFP3.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-3QNMZV5R.js +2 -0
- package/dist/cli/chunks/{cursor-installer-ZXBWYAS3.js → cursor-installer-X37VHIKW.js} +2 -2
- package/dist/cli/chunks/{daemon-64C7R6OJ.js → daemon-JN7SOH6F.js} +4 -4
- package/dist/cli/chunks/{daemon-N2BEGEFY.js → daemon-LIW47IDM.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-SPZDAPNL.js → dag-attention-scheduler-QCHHIZBT.js} +2 -2
- package/dist/cli/chunks/{detect-LXJBSSZW.js → detect-WRFCWAX5.js} +2 -2
- package/dist/cli/chunks/{dist-node-U3TKZ2IZ.js → dist-node-6FWT4XZO.js} +2 -2
- package/dist/cli/chunks/{domain-handler-3DDWUVSR.js → domain-handler-SNFPNMRT.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-JJVWI4OQ.js → domain-plugins-MXKHH62P.js} +2 -2
- package/dist/cli/chunks/domain-transfer-47UJNERX.js +2 -0
- package/dist/cli/chunks/dream-OSWAITPT.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-JPAR7TXX.js → embed-and-insert-pattern-LZFAUNBQ.js} +2 -2
- package/dist/cli/chunks/{eval-SOLG23EA.js → eval-AMUXTMJB.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-T7G2VOOD.js → experience-capture-middleware-3D65TR2C.js} +4 -4
- package/dist/cli/chunks/{fast-paths-32N3ELI4.js → fast-paths-Y7BBMM56.js} +2 -2
- package/dist/cli/chunks/{feature-flags-APJDQ4N7.js → feature-flags-JMQQ7JW4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NAHKLDRN.js → feature-flags-VESRRQ6V.js} +2 -2
- package/dist/cli/chunks/{file-discovery-YKVM3MDB.js → file-discovery-JJKQQUV6.js} +2 -2
- package/dist/cli/chunks/{fleet-55M5CJS4.js → fleet-WIGHICJF.js} +4 -4
- package/dist/cli/chunks/{gnn-wrapper-UD6E6S6Z.js → gnn-wrapper-BFNPETTT.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-OYVW3VSC.js → heartbeat-handler-HDXKTGUI.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-BVRVVIE2.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-MZTHXULS.js +2 -0
- package/dist/cli/chunks/hnsw-index-KHEX4VDG.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-HBYIS3ZW.js → hnsw-legacy-bridge-6A7OTAPT.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-EQPM42OU.js → hnswlib-node-LKV2H47B.js} +2 -2
- package/dist/cli/chunks/{hooks-5ZSSJWO6.js → hooks-KDSFYQQG.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-2B3LCLR4.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-XBGVQ4PD.js → hypergraph-engine-GDLPEPUC.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-CAWAQ673.js → hypergraph-handler-4UMFA2EW.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-4R4VWOGQ.js +2 -0
- package/dist/cli/chunks/{init-handler-PRHXSARK.js → init-handler-4GCHPQHD.js} +16 -14
- package/dist/cli/chunks/init-wizard-TAOPXHHD.js +2 -0
- package/dist/cli/chunks/kernel-6I6VZUWY.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-F7LXBM7I.js → kilocode-installer-HJZMT2G5.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-NM723ZRG.js → kiro-installer-WUPY67HG.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-KFMTTUR5.js +2 -0
- package/dist/cli/chunks/{learning-5QYIDHH3.js → learning-AXKIS7IG.js} +4 -4
- package/dist/cli/chunks/{llm-router-43HKWPSX.js → llm-router-HUDPNZLJ.js} +4 -4
- package/dist/cli/chunks/llm-router-service-2D74XVM3.js +2 -0
- package/dist/cli/chunks/{load-5YDBWSCS.js → load-RM44POD7.js} +2 -2
- package/dist/cli/chunks/load-test-53FWOWNS.js +2 -0
- package/dist/cli/chunks/{mcp-UMAPMNMY.js → mcp-5JVQRBOP.js} +2 -2
- package/dist/cli/chunks/{memory-FWCPCQFP.js → memory-VGZ2V6PL.js} +5 -5
- package/dist/cli/chunks/memory-backend-KFJDDPEZ.js +2 -0
- package/dist/cli/chunks/memory-handlers-EI537Z32.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-2XTBGLE4.js → multi-model-executor-WPRKCSCM.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-GIXOJ6NS.js → opencode-installer-YAJMRCQO.js} +2 -2
- package/dist/cli/chunks/{orchestrator-VW6BKHLI.js → orchestrator-MUGWBUYP.js} +17 -17
- package/dist/cli/chunks/pattern-null-store-7DMU5CJ4.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-7CEUC3J7.js → pattern-usage-recorder-ZQJJ2YNG.js} +2 -2
- package/dist/cli/chunks/{pipeline-IGUQPPPO.js → pipeline-F4DXDUDC.js} +2 -2
- package/dist/cli/chunks/{platform-2P636I7B.js → platform-HI3A3OWF.js} +2 -2
- package/dist/cli/chunks/{plugin-NY6SWDPE.js → plugin-XRITPTR7.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-2UUDTIO2.js → prime-radiant-advanced-wasm-HHNJP7CQ.js} +2 -2
- package/dist/cli/chunks/{project-root-IOISG5KX.js → project-root-2VN4WO2A.js} +2 -2
- package/dist/cli/chunks/protocol-executor-2EMTBTMG.js +2 -0
- package/dist/cli/chunks/{protocol-handler-ZTPCRQ5W.js → protocol-handler-ZEVHSEBG.js} +2 -2
- package/dist/cli/chunks/{prove-SQX5A3IG.js → prove-C4BLZWBS.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-VZHZZPHE.js +2 -0
- package/dist/cli/chunks/{quality-DROILKRY.js → quality-M3DTE4KK.js} +2 -2
- package/dist/cli/chunks/quality-gate-V6KS7ML3.js +7 -0
- package/dist/cli/chunks/queen-coordinator-7MYTTUHI.js +2 -0
- package/dist/cli/chunks/{real-embeddings-P5U3MGYC.js → real-embeddings-YWSE3IRT.js} +2 -2
- package/dist/cli/chunks/{ref-validation-KY73NQXD.js → ref-validation-ZWOTFA3T.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-6JPPRB3W.js → roocode-installer-GJBIWETD.js} +2 -2
- package/dist/cli/chunks/router-ZD4LXAWA.js +2 -0
- package/dist/cli/chunks/routing-feedback-FSLMDVGD.js +2 -0
- package/dist/cli/chunks/{routing-handler-VTJIVFUO.js → routing-handler-CFYLGNAR.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-C6RPSJJO.js → ruvector-commands-EDKG456B.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-LTKTDRFS.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-IF24EVC5.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-R53URRIO.js → rvf-migration-coordinator-ZMEYMAI6.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-E6JNBKMZ.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-MMXN5TEJ.js → rvf-store-integrity-AH6PNJP6.js} +2 -2
- package/dist/cli/chunks/safe-db-F6TRB5KZ.js +2 -0
- package/dist/cli/chunks/schedule-HBD4BYTE.js +2 -0
- package/dist/cli/chunks/scheduler-6FYWPMQC.js +2 -0
- package/dist/cli/chunks/{security-3B3R2NL4.js → security-ZU2GW3ZM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-VIJB7JUS.js → shared-rvf-adapter-5FOVSL3T.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-UVWGDUWC.js → shared-rvf-dual-writer-IO4DC4XV.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-DOU72F5Z.js +2 -0
- package/dist/cli/chunks/{standalone-memory-M4LWAAYZ.js → standalone-memory-3UXDZ7HI.js} +2 -2
- package/dist/cli/chunks/{status-handler-YYFV6OZL.js → status-handler-264CHTWS.js} +2 -2
- package/dist/cli/chunks/{structural-health-27E6LLKB.js → structural-health-E2QPUOZE.js} +2 -2
- package/dist/cli/chunks/{sync-J3LJ56WN.js → sync-2ACMWM7D.js} +2 -2
- package/dist/cli/chunks/sync-N2L2OST4.js +2 -0
- package/dist/cli/chunks/{task-handler-4MCEBQZL.js → task-handler-IB5CVOTY.js} +2 -2
- package/dist/cli/chunks/task-handlers-QBMYNJHE.js +9 -0
- package/dist/cli/chunks/test-7RGLRDSP.js +33 -0
- package/dist/cli/chunks/{test-scheduling-ZJBFRZ3J.js → test-scheduling-RJABJT2W.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-JVHMHB72.js +2 -0
- package/dist/cli/chunks/{token-usage-3X5WMTG2.js → token-usage-3ECHQVCY.js} +2 -2
- package/dist/cli/chunks/{transformers-MVL4C5IX.js → transformers-KJH3IJWI.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-SLW65ZFO.js → tree-sitter-wasm-parser-XN6PFI32.js} +2 -2
- package/dist/cli/chunks/{types-TG5P3CRS.js → types-5BAPXOLS.js} +2 -2
- package/dist/cli/chunks/unified-memory-GHAYAXWZ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-CCC63YXT.js +2 -0
- package/dist/cli/chunks/unified-persistence-HKRHI5PG.js +2 -0
- package/dist/cli/chunks/{upgrade-ETBHDEPY.js → upgrade-S5NFQZID.js} +2 -2
- package/dist/cli/chunks/{validate-C2A73LZK.js → validate-BIBWOLJD.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-67XN42ML.js → validate-swarm-WAA3LBHH.js} +2 -2
- package/dist/cli/chunks/visual-security-APOXJ3Q3.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-USJN77P4.js → web-tree-sitter-OTBQTHAV.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-5GGZXGJW.js → windsurf-installer-NNQ22EW6.js} +2 -2
- package/dist/cli/chunks/witness-chain-7IP5IJGT.js +2 -0
- package/dist/cli/chunks/{witness-chain-IWS5ZHHL.js → witness-chain-E7MUBOJW.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-FW4QSN4C.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-3GEADWPE.js → witness-chain-verifier-YMROEBVL.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-ZWEIK3VJ.js → witness-key-manager-4CGRNDMJ.js} +2 -2
- package/dist/cli/chunks/{workflow-KHMVVBBA.js → workflow-4VRSTRAN.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-2HNW5ZMQ.js +2 -0
- package/dist/cli/chunks/wrappers-4M4UTGEU.js +2 -0
- package/dist/cli/commands/ci.js +18 -7
- package/dist/cli/commands/quality-gate.js +6 -1
- package/dist/cli/commands/test.js +18 -3
- package/dist/cli/handlers/init-handler.d.ts +2 -0
- package/dist/cli/handlers/init-handler.js +8 -2
- package/dist/cli/index.js +15 -2
- package/dist/cli/process-store-cleanup.d.ts +7 -0
- package/dist/cli/process-store-cleanup.js +27 -0
- package/dist/cli/utils/ci-config.d.ts +3 -3
- package/dist/cli/utils/ci-config.js +202 -68
- package/dist/coordination/handlers/test-execution-handlers.js +13 -8
- package/dist/coordination/index.d.ts +1 -1
- package/dist/coordination/queen-event-handlers.js +9 -6
- package/dist/coordination/result-saver.js +1 -1
- package/dist/coordination/services/index.d.ts +1 -1
- package/dist/coordination/services/task-audit-logger.d.ts +38 -13
- package/dist/coordination/services/task-audit-logger.js +33 -5
- package/dist/coordination/task-executor.d.ts +5 -0
- package/dist/coordination/task-executor.js +10 -5
- package/dist/domains/quality-assessment/quality-evidence.d.ts +3 -1
- package/dist/domains/quality-assessment/quality-evidence.js +7 -2
- package/dist/domains/test-execution/services/retry-handler.js +32 -13
- package/dist/domains/test-execution/services/test-executor.d.ts +3 -3
- package/dist/domains/test-execution/services/test-executor.js +66 -22
- package/dist/domains/test-generation/coordinator.js +6 -5
- package/dist/domains/test-generation/interfaces.d.ts +11 -1
- package/dist/domains/test-generation/services/behavior-example-validation.d.ts +36 -0
- package/dist/domains/test-generation/services/behavior-example-validation.js +89 -0
- package/dist/domains/test-generation/services/behavior-examples.d.ts +8 -0
- package/dist/domains/test-generation/services/behavior-examples.js +65 -0
- package/dist/domains/test-generation/services/test-generator.d.ts +1 -1
- package/dist/domains/test-generation/services/test-generator.js +59 -30
- package/dist/domains/visual-accessibility/services/axe-core-audit.d.ts +0 -15
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +12 -10
- package/dist/init/browser-engine-installer.d.ts +5 -5
- package/dist/init/browser-engine-installer.js +28 -6
- package/dist/init/fleet-integration.js +3 -2
- package/dist/init/init-wizard-steps.js +3 -2
- package/dist/init/init-wizard.d.ts +2 -0
- package/dist/init/orchestrator.js +1 -0
- package/dist/init/phases/06-code-intelligence.js +6 -4
- package/dist/init/phases/09-assets.js +8 -18
- package/dist/init/phases/phase-interface.d.ts +2 -0
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +2 -5
- package/dist/integrations/ruvector/sona-persistence.d.ts +1 -0
- package/dist/integrations/ruvector/sona-persistence.js +74 -20
- package/dist/integrations/ruvector/sona-wrapper.d.ts +2 -0
- package/dist/integrations/ruvector/sona-wrapper.js +13 -0
- package/dist/integrations/vibium/client.d.ts +1 -0
- package/dist/integrations/vibium/client.js +24 -11
- package/dist/integrations/vibium/runtime.d.ts +14 -0
- package/dist/integrations/vibium/runtime.js +94 -0
- package/dist/kernel/memory-backend.js +5 -4
- package/dist/kernel/pattern-fts-self-heal.d.ts +63 -0
- package/dist/kernel/pattern-fts-self-heal.js +193 -0
- package/dist/kernel/process-lifecycle.d.ts +60 -0
- package/dist/kernel/process-lifecycle.js +91 -0
- package/dist/kernel/unified-memory-schemas.d.ts +15 -1
- package/dist/kernel/unified-memory-schemas.js +53 -25
- package/dist/kernel/unified-memory.js +34 -36
- package/dist/kernel/unified-persistence.js +12 -6
- package/dist/learning/aqe-learning-engine.js +3 -2
- package/dist/learning/experience-capture.d.ts +2 -1
- package/dist/learning/experience-capture.js +23 -8
- package/dist/learning/pattern-store.d.ts +1 -1
- package/dist/learning/pattern-store.js +27 -30
- package/dist/learning/qe-patterns.d.ts +6 -0
- package/dist/learning/qe-reasoning-bank.d.ts +1 -0
- package/dist/learning/qe-reasoning-bank.js +14 -4
- package/dist/learning/real-qe-reasoning-bank.d.ts +9 -4
- package/dist/learning/real-qe-reasoning-bank.js +28 -4
- package/dist/learning/rvf-pattern-store.js +19 -19
- package/dist/learning/sqlite-persistence.js +9 -24
- package/dist/mcp/bundle.js +545 -581
- package/dist/mcp/connection-pool.d.ts +2 -0
- package/dist/mcp/connection-pool.js +13 -2
- package/dist/mcp/entry.js +52 -6
- package/dist/mcp/handlers/domain-handler-configs.js +12 -4
- package/dist/mcp/handlers/memory-handlers.d.ts +1 -0
- package/dist/mcp/handlers/memory-handlers.js +16 -6
- package/dist/mcp/handlers/task-handlers.js +11 -7
- package/dist/mcp/protocol-server.js +47 -11
- package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
- package/dist/mcp/services/reasoning-bank-service.js +5 -1
- package/dist/mcp/tools/test-execution/e2e-execute.js +9 -1
- package/dist/mcp/tools/test-generation/generate.d.ts +6 -1
- package/dist/mcp/tools/test-generation/generate.js +8 -0
- package/dist/mcp/types.d.ts +8 -2
- package/dist/optimization/session-cache.js +13 -11
- package/dist/plugins/cache.js +10 -3
- package/dist/shared/embeddings/embedding-cache.js +4 -4
- package/dist/shared/error-utils.d.ts +15 -0
- package/dist/shared/error-utils.js +21 -0
- package/dist/shared/events/domain-events.d.ts +2 -1
- package/dist/shared/llm/cache.js +7 -10
- package/dist/shared/retry-engine.js +4 -0
- package/dist/shared/test-runner-process.d.ts +10 -0
- package/dist/shared/test-runner-process.js +210 -0
- package/dist/validation/quality-verdict.js +3 -2
- package/dist/workers/quality-daemon/priority-queue.js +4 -1
- package/package.json +10 -6
- package/dist/cli/chunks/adapter-UYOJPTOX.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-JR5AVQXR.js +0 -2
- package/dist/cli/chunks/base-DRZ2LS6X.js +0 -2
- package/dist/cli/chunks/browser-workflow-CJ7T3MXF.js +0 -2
- package/dist/cli/chunks/chunk-3NIG7S5W.js +0 -2
- package/dist/cli/chunks/chunk-4N23RFDU.js +0 -2
- package/dist/cli/chunks/chunk-AHKELLIO.js +0 -12
- package/dist/cli/chunks/chunk-DK4XN4CU.js +0 -2
- package/dist/cli/chunks/chunk-E6G2RD5H.js +0 -4
- package/dist/cli/chunks/chunk-MJS53PRX.js +0 -2
- package/dist/cli/chunks/chunk-PZPWRQ2M.js +0 -21
- package/dist/cli/chunks/chunk-QGA55PFM.js +0 -12
- package/dist/cli/chunks/chunk-SPV2VKC5.js +0 -3
- package/dist/cli/chunks/chunk-TCHGOB2N.js +0 -2
- package/dist/cli/chunks/chunk-UKA2KOXE.js +0 -2
- package/dist/cli/chunks/chunk-WCJBU2KI.js +0 -2
- package/dist/cli/chunks/chunk-Z6GGIRQQ.js +0 -65
- package/dist/cli/chunks/ci-W6K6G2KZ.js +0 -81
- package/dist/cli/chunks/client-KHWJT6FB.js +0 -2
- package/dist/cli/chunks/core-handlers-HING5RRG.js +0 -2
- package/dist/cli/chunks/cross-domain-router-PQTD6AZN.js +0 -2
- package/dist/cli/chunks/domain-transfer-M36KUJ2U.js +0 -2
- package/dist/cli/chunks/dream-WUGRSNCV.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-33XX5XNQ.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-XQPERX3H.js +0 -2
- package/dist/cli/chunks/hnsw-index-2GNXTWHH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-CCF7URKI.js +0 -2
- package/dist/cli/chunks/impact-analyzer-HGKAZWIG.js +0 -2
- package/dist/cli/chunks/init-wizard-72MFBI3G.js +0 -2
- package/dist/cli/chunks/kernel-BRCBVMSK.js +0 -2
- package/dist/cli/chunks/knowledge-graph-DG44IPEI.js +0 -2
- package/dist/cli/chunks/llm-router-service-24KXFX32.js +0 -2
- package/dist/cli/chunks/load-test-N4TAYJY3.js +0 -2
- package/dist/cli/chunks/memory-backend-NVYFYVAU.js +0 -2
- package/dist/cli/chunks/memory-handlers-UTWCNCHL.js +0 -2
- package/dist/cli/chunks/pattern-null-store-SBPNYDBR.js +0 -2
- package/dist/cli/chunks/protocol-executor-IBYEII5Q.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-7IETWW6W.js +0 -2
- package/dist/cli/chunks/quality-gate-PWKWDJY2.js +0 -7
- package/dist/cli/chunks/queen-coordinator-NHUK2MWJ.js +0 -2
- package/dist/cli/chunks/router-SRSO3IHF.js +0 -2
- package/dist/cli/chunks/routing-feedback-PASRE5HY.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-4M4J67OU.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-TSXGT5LF.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-MOF3E7BR.js +0 -2
- package/dist/cli/chunks/safe-db-QJLFO33B.js +0 -2
- package/dist/cli/chunks/schedule-YIVXW5O2.js +0 -2
- package/dist/cli/chunks/scheduler-AON7DWSJ.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-75VHKKQB.js +0 -2
- package/dist/cli/chunks/sync-26CEGSTC.js +0 -2
- package/dist/cli/chunks/task-handlers-GYBAWKE2.js +0 -9
- package/dist/cli/chunks/test-MPC5HRH5.js +0 -33
- package/dist/cli/chunks/token-bootstrap-2Y2XITBX.js +0 -2
- package/dist/cli/chunks/unified-memory-UCQ6AB32.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-IXYUMKRR.js +0 -2
- package/dist/cli/chunks/unified-persistence-7E6JQ4FZ.js +0 -2
- package/dist/cli/chunks/vibium-NILGKHLN.js +0 -2
- package/dist/cli/chunks/visual-security-4VZXPEVG.js +0 -2
- package/dist/cli/chunks/witness-chain-JQA2VPZI.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-4UA7IPS3.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-GI5NQH7C.js +0 -2
- package/dist/cli/chunks/wrappers-N6XIK5PT.js +0 -2
|
@@ -94,6 +94,8 @@ interface InitOptions {
|
|
|
94
94
|
wizard?: boolean;
|
|
95
95
|
auto?: boolean;
|
|
96
96
|
upgrade?: boolean;
|
|
97
|
+
/** Explicitly install the optional browser engine and browser payload. */
|
|
98
|
+
browserEngine?: boolean;
|
|
97
99
|
minimal?: boolean;
|
|
98
100
|
skipPatterns?: boolean;
|
|
99
101
|
skipCodeIndex?: boolean;
|
|
@@ -37,6 +37,8 @@ export class InitHandler {
|
|
|
37
37
|
.option('--wizard', 'Run interactive setup wizard')
|
|
38
38
|
.option('--auto', 'Auto-configure based on project analysis')
|
|
39
39
|
.option('-u, --upgrade', 'Upgrade existing installation (overwrite skills, agents, validation)')
|
|
40
|
+
.option('--browser-engine', 'Install optional Vibium and browser payload (explicit download)', false)
|
|
41
|
+
.option('--no-browser-engine', 'Skip optional browser setup (default)')
|
|
40
42
|
.option('--minimal', 'Minimal configuration (skip optional features)')
|
|
41
43
|
.option('--skip-patterns', 'Skip loading pre-trained patterns')
|
|
42
44
|
.option('--skip-code-index', 'Skip code intelligence pre-scan (supported escape hatch — KG can be built later via `aqe code index`, also via env AQE_SKIP_CODE_INDEX=1)')
|
|
@@ -103,7 +105,7 @@ export class InitHandler {
|
|
|
103
105
|
if (options.wizard || options.auto) {
|
|
104
106
|
console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
|
|
105
107
|
// Use modular orchestrator for --auto or --modular
|
|
106
|
-
if (options.auto || options.modular) {
|
|
108
|
+
if (options.auto || options.modular || options.browserEngine) {
|
|
107
109
|
await this.runModularInit(options, context);
|
|
108
110
|
return;
|
|
109
111
|
}
|
|
@@ -128,7 +130,7 @@ export class InitHandler {
|
|
|
128
130
|
// surface it was meant to suppress.
|
|
129
131
|
const noClaudeRequested = options.claude === false;
|
|
130
132
|
const noStatusLineRequested = options.statusline === false;
|
|
131
|
-
if (options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
|
|
133
|
+
if (options.browserEngine || options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
|
|
132
134
|
console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
|
|
133
135
|
await this.runModularInit(options, context);
|
|
134
136
|
return;
|
|
@@ -173,6 +175,7 @@ export class InitHandler {
|
|
|
173
175
|
autoMode: options.auto,
|
|
174
176
|
upgrade: options.upgrade,
|
|
175
177
|
minimal: options.minimal,
|
|
178
|
+
browserEngine: options.browserEngine,
|
|
176
179
|
skipPatterns: options.skipPatterns,
|
|
177
180
|
skipCodeIndex: options.skipCodeIndex,
|
|
178
181
|
withN8n: options.withN8n,
|
|
@@ -301,6 +304,7 @@ export class InitHandler {
|
|
|
301
304
|
projectRoot: process.cwd(),
|
|
302
305
|
autoMode: options.auto,
|
|
303
306
|
minimal: options.minimal,
|
|
307
|
+
browserEngine: options.browserEngine,
|
|
304
308
|
skipPatterns: options.skipPatterns,
|
|
305
309
|
withN8n: options.withN8n,
|
|
306
310
|
};
|
|
@@ -449,6 +453,8 @@ Options:
|
|
|
449
453
|
-u, --upgrade Upgrade existing installation (overwrite skills, agents, validation)
|
|
450
454
|
--minimal Minimal configuration (skip optional features)
|
|
451
455
|
--skip-patterns Skip loading pre-trained patterns
|
|
456
|
+
--browser-engine Install optional Vibium and browser payload
|
|
457
|
+
--no-browser-engine Skip browser setup (default)
|
|
452
458
|
--with-n8n Install n8n workflow testing agents and skills
|
|
453
459
|
--with-opencode Include OpenCode agent/skill provisioning
|
|
454
460
|
--with-codex Include OpenAI Codex hooks, instructions, skills, and MCP
|
package/dist/cli/index.js
CHANGED
|
@@ -22,7 +22,11 @@ import { ALL_DOMAINS } from '../shared/types/index.js';
|
|
|
22
22
|
import { applyCommandVerbosity, installCliLogGate, isCliLogLevelEnabled } from './log-gate.js';
|
|
23
23
|
import { LogLevel } from '../logging/index.js';
|
|
24
24
|
import { formatErrorForLog } from '../logging/redaction.js';
|
|
25
|
+
import { releaseCliProcessStores } from './process-store-cleanup.js';
|
|
25
26
|
installCliLogGate();
|
|
27
|
+
// Backstop for direct process.exit() paths as well as cleanupAndExit(). An
|
|
28
|
+
// in-process MCP owner still drains before exit; this callback is synchronous.
|
|
29
|
+
process.on('exit', releaseCliProcessStores);
|
|
26
30
|
// ============================================================================
|
|
27
31
|
// CLI State
|
|
28
32
|
// ============================================================================
|
|
@@ -180,11 +184,12 @@ async function cleanupAndExit(code = 0) {
|
|
|
180
184
|
}
|
|
181
185
|
}
|
|
182
186
|
catch { /* best effort */ }
|
|
183
|
-
|
|
187
|
+
releaseCliProcessStores();
|
|
188
|
+
// Force exit after synchronous store cleanup. Native NAPI handles (@ruvector/rvf-node and
|
|
184
189
|
// historically @ruvector/router, replaced by hnswlib-node in #399 /
|
|
185
190
|
// ADR-090) create ref'd event loop handles that prevent natural exit,
|
|
186
191
|
// and dynamic import() of cleanup modules can load more native
|
|
187
|
-
// bindings that make it worse.
|
|
192
|
+
// bindings that make it worse. Do not wait for asynchronous disposers here.
|
|
188
193
|
process.exit(code);
|
|
189
194
|
}
|
|
190
195
|
// ============================================================================
|
|
@@ -214,6 +219,7 @@ program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
|
214
219
|
// ============================================================================
|
|
215
220
|
import { registerLazyCommand, registerLazyHandler } from './lazy-registry.js';
|
|
216
221
|
import { isForegroundCommandActive } from './foreground-command.js';
|
|
222
|
+
import { requestOwnedShutdown } from '../kernel/process-lifecycle.js';
|
|
217
223
|
registerLazyHandler(program, 'init', 'Initialize the AQE v3 system', () => import('./handlers/init-handler.js').then(m => m.createInitHandler(cleanupAndExit)), context);
|
|
218
224
|
registerLazyHandler(program, 'status', 'Show system status', () => import('./handlers/status-handler.js').then(m => m.createStatusHandler(cleanupAndExit, ensureInitializedStrict)), context);
|
|
219
225
|
registerLazyHandler(program, 'health', 'Check system health', () => import('./handlers/status-handler.js').then(m => m.createHealthHandler(cleanupAndExit, ensureInitializedStrict)), context);
|
|
@@ -379,12 +385,19 @@ registerLazyCommand(program, {
|
|
|
379
385
|
// ============================================================================
|
|
380
386
|
// Shutdown Handlers
|
|
381
387
|
// ============================================================================
|
|
388
|
+
// #801: `aqe mcp` runs the MCP server in this process and it claims the
|
|
389
|
+
// lifecycle; exiting here would pre-empt its graceful shutdown (which releases
|
|
390
|
+
// the shared patterns RVF lock). Every other command keeps the immediate exit.
|
|
382
391
|
process.on('SIGINT', async () => {
|
|
392
|
+
if (requestOwnedShutdown('SIGINT'))
|
|
393
|
+
return;
|
|
383
394
|
console.log(chalk.yellow('\n\nShutting down...'));
|
|
384
395
|
console.log(chalk.green('Shutdown complete\n'));
|
|
385
396
|
await cleanupAndExit(0);
|
|
386
397
|
});
|
|
387
398
|
process.on('SIGTERM', async () => {
|
|
399
|
+
if (requestOwnedShutdown('SIGTERM'))
|
|
400
|
+
return;
|
|
388
401
|
console.log(chalk.yellow('\nReceived SIGTERM, shutting down gracefully...'));
|
|
389
402
|
await cleanupAndExit(0);
|
|
390
403
|
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release the CLI's process-wide stores without awaiting native work (#814).
|
|
3
|
+
* Each closer owns its handle; never remove a lock file by path. Synchronous
|
|
4
|
+
* cleanup also runs when Commander or another module calls process.exit().
|
|
5
|
+
*/
|
|
6
|
+
export declare function releaseCliProcessStores(): void;
|
|
7
|
+
//# sourceMappingURL=process-store-cleanup.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { resetSharedRvfAdapter } from '../integrations/ruvector/shared-rvf-adapter.js';
|
|
2
|
+
import { resetSharedRvfDualWriter } from '../integrations/ruvector/shared-rvf-dual-writer.js';
|
|
3
|
+
import { closeRegisteredStores } from '../kernel/process-lifecycle.js';
|
|
4
|
+
let released = false;
|
|
5
|
+
/**
|
|
6
|
+
* Release the CLI's process-wide stores without awaiting native work (#814).
|
|
7
|
+
* Each closer owns its handle; never remove a lock file by path. Synchronous
|
|
8
|
+
* cleanup also runs when Commander or another module calls process.exit().
|
|
9
|
+
*/
|
|
10
|
+
export function releaseCliProcessStores() {
|
|
11
|
+
if (released)
|
|
12
|
+
return;
|
|
13
|
+
released = true;
|
|
14
|
+
try {
|
|
15
|
+
resetSharedRvfDualWriter();
|
|
16
|
+
}
|
|
17
|
+
catch { /* keep closing other stores */ }
|
|
18
|
+
try {
|
|
19
|
+
resetSharedRvfAdapter();
|
|
20
|
+
}
|
|
21
|
+
catch { /* keep closing other stores */ }
|
|
22
|
+
try {
|
|
23
|
+
closeRegisteredStores();
|
|
24
|
+
}
|
|
25
|
+
catch { /* best effort on process exit */ }
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=process-store-cleanup.js.map
|
|
@@ -67,6 +67,8 @@ export interface CIPhaseResult {
|
|
|
67
67
|
}
|
|
68
68
|
/** Result of the full CI run */
|
|
69
69
|
export interface CIRunResult {
|
|
70
|
+
/** Invalid phase selections fail before execution and retain a fresh report. */
|
|
71
|
+
configurationError?: string;
|
|
70
72
|
config: string;
|
|
71
73
|
startedAt: Date;
|
|
72
74
|
completedAt: Date;
|
|
@@ -93,9 +95,7 @@ export interface CIConfigParseResult {
|
|
|
93
95
|
* Parse a .aqe-ci.yml file into a CIConfig.
|
|
94
96
|
*/
|
|
95
97
|
export declare function parseCIConfigFile(filePath: string): CIConfigParseResult;
|
|
96
|
-
/**
|
|
97
|
-
* Parse CI config YAML content.
|
|
98
|
-
*/
|
|
98
|
+
/** Parse CI YAML faithfully, validating typed fields before any phase executes. */
|
|
99
99
|
export declare function parseCIConfigContent(content: string, sourcePath?: string): CIConfigParseResult;
|
|
100
100
|
/**
|
|
101
101
|
* Get the default CI config (used when no .aqe-ci.yml exists).
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import * as path from 'path';
|
|
9
|
-
import {
|
|
9
|
+
import { isCollection, isScalar, parseDocument, visit } from 'yaml';
|
|
10
10
|
// ============================================================================
|
|
11
11
|
// Default Config
|
|
12
12
|
// ============================================================================
|
|
@@ -100,89 +100,223 @@ export function parseCIConfigFile(filePath) {
|
|
|
100
100
|
}
|
|
101
101
|
return parseCIConfigContent(content, filePath);
|
|
102
102
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
const YAML_MAX_LINES = 10000;
|
|
104
|
+
const YAML_MAX_LINE_LENGTH = 10000;
|
|
105
|
+
const YAML_MAX_DEPTH = 20;
|
|
106
|
+
const UNSAFE_YAML_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
107
|
+
function isRecord(value) {
|
|
108
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) &&
|
|
109
|
+
(Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
|
|
110
|
+
}
|
|
111
|
+
/** Keep the previous parser's input bounds; reject unsafe expanded aliases too. */
|
|
112
|
+
function parseCIYAML(content) {
|
|
113
|
+
const lines = content.split('\n');
|
|
114
|
+
if (lines.length > YAML_MAX_LINES)
|
|
115
|
+
throw new Error(`YAML exceeds maximum allowed lines (${YAML_MAX_LINES})`);
|
|
116
|
+
if (lines.some(line => line.length > YAML_MAX_LINE_LENGTH)) {
|
|
117
|
+
throw new Error(`YAML exceeds maximum line length (${YAML_MAX_LINE_LENGTH})`);
|
|
118
|
+
}
|
|
119
|
+
const document = parseDocument(content, { prettyErrors: false, merge: true });
|
|
120
|
+
if (document.errors.length)
|
|
121
|
+
throw new Error(document.errors.map(error => error.message).join('; '));
|
|
122
|
+
visit(document, {
|
|
123
|
+
Collection: (_key, _node, ancestry) => {
|
|
124
|
+
if (ancestry.filter(isCollection).length >= YAML_MAX_DEPTH) {
|
|
125
|
+
throw new Error(`YAML exceeds maximum depth (${YAML_MAX_DEPTH})`);
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
Pair: (_key, pair) => {
|
|
129
|
+
if (isScalar(pair.key) && UNSAFE_YAML_KEYS.has(String(pair.key.value))) {
|
|
130
|
+
throw new Error(`Unsafe YAML key: ${pair.key.value}`);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
const parsed = document.contents === null ? {} : document.toJS({ maxAliasCount: 100 });
|
|
135
|
+
// Alias references may add nesting or cycles that the syntax tree does not show.
|
|
136
|
+
function checkExpanded(value, depth, ancestors) {
|
|
137
|
+
if (value === null || typeof value !== 'object')
|
|
138
|
+
return;
|
|
139
|
+
if (depth > YAML_MAX_DEPTH)
|
|
140
|
+
throw new Error(`YAML exceeds maximum depth (${YAML_MAX_DEPTH})`);
|
|
141
|
+
if (ancestors.has(value))
|
|
142
|
+
throw new Error('Cyclic YAML aliases are not supported');
|
|
143
|
+
ancestors.add(value);
|
|
144
|
+
for (const child of Object.values(value))
|
|
145
|
+
checkExpanded(child, depth + 1, ancestors);
|
|
146
|
+
ancestors.delete(value);
|
|
147
|
+
}
|
|
148
|
+
checkExpanded(parsed, 0, new Set());
|
|
149
|
+
if (!isRecord(parsed))
|
|
150
|
+
throw new Error('CI config must be a YAML mapping');
|
|
151
|
+
return parsed;
|
|
152
|
+
}
|
|
153
|
+
/** Parse CI YAML faithfully, validating typed fields before any phase executes. */
|
|
106
154
|
export function parseCIConfigContent(content, sourcePath) {
|
|
107
|
-
const errors = [];
|
|
108
155
|
let parsed;
|
|
109
156
|
try {
|
|
110
|
-
parsed =
|
|
157
|
+
parsed = parseCIYAML(content);
|
|
111
158
|
}
|
|
112
159
|
catch (err) {
|
|
113
160
|
return { success: false, errors: [`Invalid YAML: ${err}`] };
|
|
114
161
|
}
|
|
115
|
-
|
|
116
|
-
const config =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (parsed.output && typeof parsed.output === 'object') {
|
|
125
|
-
const out = parsed.output;
|
|
126
|
-
if (out.format)
|
|
127
|
-
config.output.format = out.format;
|
|
128
|
-
if (out.directory)
|
|
129
|
-
config.output.directory = out.directory;
|
|
130
|
-
if (out.combined_report !== undefined)
|
|
131
|
-
config.output.combinedReport = out.combined_report;
|
|
132
|
-
}
|
|
133
|
-
// Parse quality_gate section
|
|
134
|
-
if (parsed.quality_gate && typeof parsed.quality_gate === 'object') {
|
|
135
|
-
const qg = parsed.quality_gate;
|
|
136
|
-
if (qg.enforced !== undefined)
|
|
137
|
-
config.qualityGate.enforced = qg.enforced;
|
|
138
|
-
if (qg.thresholds && typeof qg.thresholds === 'object') {
|
|
139
|
-
const th = qg.thresholds;
|
|
140
|
-
if (th.coverage !== undefined)
|
|
141
|
-
config.qualityGate.thresholds.coverage = th.coverage;
|
|
142
|
-
if (th.security !== undefined)
|
|
143
|
-
config.qualityGate.thresholds.security = th.security;
|
|
144
|
-
if (th.quality !== undefined)
|
|
145
|
-
config.qualityGate.thresholds.quality = th.quality;
|
|
162
|
+
const errors = [];
|
|
163
|
+
const config = getDefaultCIConfig();
|
|
164
|
+
function readString(record, key, fallback, label) {
|
|
165
|
+
const value = record[key];
|
|
166
|
+
if (value === undefined)
|
|
167
|
+
return fallback;
|
|
168
|
+
if (typeof value !== 'string' || !value.trim()) {
|
|
169
|
+
errors.push(`${label} must be a non-empty string`);
|
|
170
|
+
return fallback;
|
|
146
171
|
}
|
|
172
|
+
return value;
|
|
147
173
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
function readBoolean(record, key, fallback, label) {
|
|
175
|
+
const value = record[key];
|
|
176
|
+
if (value === undefined)
|
|
177
|
+
return fallback;
|
|
178
|
+
if (typeof value !== 'boolean') {
|
|
179
|
+
errors.push(`${label} must be a boolean`);
|
|
180
|
+
return fallback;
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
if (parsed.version !== undefined) {
|
|
185
|
+
if (typeof parsed.version === 'number' && Number.isFinite(parsed.version))
|
|
186
|
+
config.version = String(parsed.version);
|
|
187
|
+
else
|
|
188
|
+
config.version = readString(parsed, 'version', config.version, 'version');
|
|
189
|
+
}
|
|
190
|
+
config.name = readString(parsed, 'name', config.name, 'name');
|
|
191
|
+
if (parsed.output !== undefined) {
|
|
192
|
+
if (!isRecord(parsed.output))
|
|
193
|
+
errors.push('output must be a mapping');
|
|
194
|
+
else {
|
|
195
|
+
config.output.format = readString(parsed.output, 'format', config.output.format, 'output.format');
|
|
196
|
+
config.output.directory = readString(parsed.output, 'directory', config.output.directory, 'output.directory');
|
|
197
|
+
config.output.combinedReport = readBoolean(parsed.output, 'combined_report', config.output.combinedReport, 'output.combined_report');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (parsed.quality_gate !== undefined) {
|
|
201
|
+
if (!isRecord(parsed.quality_gate))
|
|
202
|
+
errors.push('quality_gate must be a mapping');
|
|
203
|
+
else {
|
|
204
|
+
const gate = parsed.quality_gate;
|
|
205
|
+
config.qualityGate.enforced = readBoolean(gate, 'enforced', config.qualityGate.enforced, 'quality_gate.enforced');
|
|
206
|
+
if (gate.thresholds !== undefined) {
|
|
207
|
+
if (!isRecord(gate.thresholds))
|
|
208
|
+
errors.push('quality_gate.thresholds must be a mapping');
|
|
209
|
+
else {
|
|
210
|
+
for (const key of ['coverage', 'quality']) {
|
|
211
|
+
const value = gate.thresholds[key];
|
|
212
|
+
if (value === undefined)
|
|
213
|
+
continue;
|
|
214
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 100) {
|
|
215
|
+
errors.push(`quality_gate.thresholds.${key} must be a finite number between 0 and 100`);
|
|
216
|
+
}
|
|
217
|
+
else
|
|
218
|
+
config.qualityGate.thresholds[key] = value;
|
|
219
|
+
}
|
|
220
|
+
if (gate.thresholds.security !== undefined) {
|
|
221
|
+
const value = gate.thresholds.security;
|
|
222
|
+
if (typeof value !== 'string' || !['none', 'low', 'medium', 'high'].includes(value)) {
|
|
223
|
+
errors.push('quality_gate.thresholds.security must be none, low, medium or high');
|
|
224
|
+
}
|
|
225
|
+
else
|
|
226
|
+
config.qualityGate.thresholds.security = value;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
164
229
|
}
|
|
165
|
-
const phase = {
|
|
166
|
-
name: p.name,
|
|
167
|
-
type: p.type,
|
|
168
|
-
enabled: p.enabled !== false,
|
|
169
|
-
config: p.config || {},
|
|
170
|
-
continueOnFailure: p.continue_on_failure || false,
|
|
171
|
-
timeout: p.timeout || 300,
|
|
172
|
-
};
|
|
173
|
-
config.phases.push(phase);
|
|
174
230
|
}
|
|
175
231
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
232
|
+
if (parsed.phases !== undefined) {
|
|
233
|
+
config.phases = [];
|
|
234
|
+
if (!Array.isArray(parsed.phases))
|
|
235
|
+
errors.push('phases must be a sequence');
|
|
236
|
+
else
|
|
237
|
+
for (const [index, value] of parsed.phases.entries()) {
|
|
238
|
+
if (!isRecord(value)) {
|
|
239
|
+
errors.push(`Phase ${index + 1} must be a mapping`);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (value.name === undefined)
|
|
243
|
+
errors.push(`Phase ${index + 1} must have a name`);
|
|
244
|
+
const name = readString(value, 'name', '', `Phase ${index + 1} name`);
|
|
245
|
+
const validTypes = ['test', 'coverage', 'security', 'quality-gate', 'code-intelligence', 'custom'];
|
|
246
|
+
if (!validTypes.includes(value.type)) {
|
|
247
|
+
errors.push(`Phase "${name}" has invalid type "${value.type}". Valid: ${validTypes.join(', ')}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
let timeout = 300;
|
|
251
|
+
if (value.timeout !== undefined) {
|
|
252
|
+
if (typeof value.timeout !== 'number' || !Number.isFinite(value.timeout) || value.timeout <= 0) {
|
|
253
|
+
errors.push(`Phase "${name}" timeout must be a positive finite number`);
|
|
254
|
+
}
|
|
255
|
+
else
|
|
256
|
+
timeout = value.timeout;
|
|
257
|
+
}
|
|
258
|
+
if (value.config !== undefined && !isRecord(value.config))
|
|
259
|
+
errors.push(`Phase "${name}" config must be a mapping`);
|
|
260
|
+
config.phases.push({
|
|
261
|
+
name, type: value.type, timeout,
|
|
262
|
+
enabled: readBoolean(value, 'enabled', true, `Phase "${name}" enabled`),
|
|
263
|
+
continueOnFailure: readBoolean(value, 'continue_on_failure', false, `Phase "${name}" continue_on_failure`),
|
|
264
|
+
config: isRecord(value.config) ? { ...value.config } : {},
|
|
265
|
+
});
|
|
266
|
+
}
|
|
179
267
|
}
|
|
180
|
-
if (config.phases.length === 0)
|
|
268
|
+
if (config.phases.length === 0)
|
|
181
269
|
errors.push('Config must have at least one phase');
|
|
270
|
+
// Paths in a file are relative to that file's project, not the caller's cwd.
|
|
271
|
+
// Resolve existing ancestors too so a symlink cannot bypass containment.
|
|
272
|
+
const root = path.resolve(sourcePath ? path.dirname(sourcePath) : process.cwd());
|
|
273
|
+
function canonicalAncestor(candidate) {
|
|
274
|
+
let ancestor = candidate;
|
|
275
|
+
const suffix = [];
|
|
276
|
+
while (!fs.existsSync(ancestor)) {
|
|
277
|
+
const parent = path.dirname(ancestor);
|
|
278
|
+
if (parent === ancestor)
|
|
279
|
+
break;
|
|
280
|
+
suffix.unshift(path.basename(ancestor));
|
|
281
|
+
ancestor = parent;
|
|
282
|
+
}
|
|
283
|
+
return path.resolve(fs.realpathSync(ancestor), ...suffix);
|
|
182
284
|
}
|
|
183
|
-
|
|
184
|
-
|
|
285
|
+
function containedPath(value, label) {
|
|
286
|
+
if (typeof value !== 'string' || !value.trim() || value.includes('\0')) {
|
|
287
|
+
errors.push(`${label} must be a non-empty relative path`);
|
|
288
|
+
return undefined;
|
|
289
|
+
}
|
|
290
|
+
const resolved = path.resolve(root, value);
|
|
291
|
+
const relative = path.relative(root, resolved);
|
|
292
|
+
if (path.isAbsolute(value) || path.win32.isAbsolute(value) ||
|
|
293
|
+
relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
294
|
+
errors.push(`${label} must stay inside the project and use a relative path`);
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
try {
|
|
298
|
+
const realRelative = path.relative(canonicalAncestor(root), canonicalAncestor(resolved));
|
|
299
|
+
if (realRelative === '..' || realRelative.startsWith(`..${path.sep}`) || path.isAbsolute(realRelative)) {
|
|
300
|
+
errors.push(`${label} must stay inside the project (symlink escapes are not allowed)`);
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
errors.push(`${label} cannot be resolved safely: ${error}`);
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
return sourcePath ? resolved : value;
|
|
309
|
+
}
|
|
310
|
+
config.output.directory = containedPath(config.output.directory, 'output.directory') ?? config.output.directory;
|
|
311
|
+
for (const phase of config.phases) {
|
|
312
|
+
if (phase.config.target !== undefined) {
|
|
313
|
+
const target = containedPath(phase.config.target, `Phase "${phase.name}" config.target`);
|
|
314
|
+
if (target !== undefined)
|
|
315
|
+
phase.config.target = target;
|
|
316
|
+
}
|
|
185
317
|
}
|
|
318
|
+
if (errors.length > 0)
|
|
319
|
+
return { success: false, config, errors };
|
|
186
320
|
return { success: true, config, errors: [], configPath: sourcePath };
|
|
187
321
|
}
|
|
188
322
|
/**
|
|
@@ -87,7 +87,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
87
87
|
// Return a graceful fallback with warning when no source files provided
|
|
88
88
|
return ok({
|
|
89
89
|
testsGenerated: 0,
|
|
90
|
-
coverageEstimate:
|
|
90
|
+
coverageEstimate: null,
|
|
91
91
|
tests: [],
|
|
92
92
|
patternsUsed: [],
|
|
93
93
|
warning: 'No source files or code provided for test generation. Provide sourceCode, filePath, or sourceFiles in the payload.',
|
|
@@ -111,6 +111,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
111
111
|
coverageTarget: payload.coverageGoal || 80,
|
|
112
112
|
patterns: [],
|
|
113
113
|
importPathOverrides,
|
|
114
|
+
behaviorExamples: payload.behaviorExamples,
|
|
114
115
|
});
|
|
115
116
|
// Always clean up the temp file we created — even on failure
|
|
116
117
|
if (tempPath) {
|
|
@@ -134,6 +135,8 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
134
135
|
type: t.type,
|
|
135
136
|
sourceFile: rewritten.sourceFile,
|
|
136
137
|
assertions: t.assertions,
|
|
138
|
+
generationMode: t.generationMode,
|
|
139
|
+
generationLimits: t.generationLimits,
|
|
137
140
|
testCode: rewritten.testCode,
|
|
138
141
|
};
|
|
139
142
|
});
|
|
@@ -148,13 +151,15 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
148
151
|
patternsUsed: generatedTests.patternsUsed,
|
|
149
152
|
llmEnhanced,
|
|
150
153
|
...(llmEnhanced ? {} : {
|
|
151
|
-
generationMode: 'deterministic-template',
|
|
152
|
-
note:
|
|
153
|
-
? '
|
|
154
|
-
:
|
|
155
|
-
'
|
|
156
|
-
'
|
|
157
|
-
|
|
154
|
+
generationMode: generatedTests.tests.some(t => t.generationMode === 'behavior-examples') ? 'behavior-examples' : 'deterministic-template',
|
|
155
|
+
note: generatedTests.tests.some(t => t.generationMode === 'behavior-examples')
|
|
156
|
+
? 'Assertions use caller-supplied specification examples. Coverage is unmeasured; inspect generationLimits on each test.'
|
|
157
|
+
: payload.aiEnhancement === false
|
|
158
|
+
? 'LLM enhancement was disabled by the caller (aiEnhancement: false). Coverage is unmeasured; inspect generationLimits on each test.'
|
|
159
|
+
: 'No LLM provider was available, so tests are deterministic template ' +
|
|
160
|
+
'scaffolding rather than source-aware. Configure a provider in ' +
|
|
161
|
+
'.agentic-qe/llm-config.json (or set a provider API key) and ensure ' +
|
|
162
|
+
'AQE_LLM_ROUTER_DISABLED is not set.',
|
|
158
163
|
}),
|
|
159
164
|
});
|
|
160
165
|
}
|
|
@@ -7,7 +7,7 @@ export * from './consensus';
|
|
|
7
7
|
export * from './claims';
|
|
8
8
|
export type { Protocol, ProtocolSchedule, ProtocolAction, ProtocolExecution, ProtocolExecutionStatus, ActionExecutionResult, ActionExecutionStatus, ProtocolExecutor, WorkflowDefinition as CrossDomainWorkflowDefinition, WorkflowStep as CrossDomainWorkflowStep, WorkflowCondition, WorkflowTrigger as CrossDomainWorkflowTrigger, WorkflowHandler, WorkflowContext as CrossDomainWorkflowContext, WorkflowExecution as CrossDomainWorkflowExecution, WorkflowExecutionStatus as CrossDomainWorkflowExecutionStatus, StepExecutionResult as CrossDomainStepExecutionResult, WorkflowExecutor, CrossDomainHandler, CrossDomainHandlerConfig, DomainRoute, EventSubscription, EventCorrelation, EventAggregation, CrossDomainRouter, } from './interfaces';
|
|
9
9
|
export { TaskAuditLogger, createTaskAuditLogger, } from './services';
|
|
10
|
-
export type { TaskAuditEntry, TaskAuditConfig, TaskOperation, } from './services';
|
|
10
|
+
export type { TaskAuditEntry, TaskAuditSequencedEntry, TaskAuditConfig, TaskAuditFilter, TaskAuditWindow, TaskAuditSnapshot, TaskOperation, } from './services';
|
|
11
11
|
export { CrossDomainEventRouter, createCrossDomainRouter, } from './cross-domain-router';
|
|
12
12
|
export { DefaultProtocolExecutor, createProtocolExecutor, } from './protocol-executor';
|
|
13
13
|
export { WorkflowOrchestrator, createWorkflowOrchestrator, WorkflowEvents, } from './workflow-orchestrator';
|
|
@@ -162,7 +162,7 @@ export async function handleTaskCompleted(ctx, event) {
|
|
|
162
162
|
// Task failed handler
|
|
163
163
|
// ============================================================================
|
|
164
164
|
export async function handleTaskFailed(ctx, event) {
|
|
165
|
-
const { taskId, error } = event.payload;
|
|
165
|
+
const { taskId, error, callerError } = event.payload;
|
|
166
166
|
const cancelled = settleCancelledTask(ctx.tasks, taskId);
|
|
167
167
|
if (cancelled.ignored) {
|
|
168
168
|
if (cancelled.settledNow) {
|
|
@@ -177,8 +177,10 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
177
177
|
if (execution.status === 'running' || execution.status === 'assigned') {
|
|
178
178
|
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
179
179
|
}
|
|
180
|
-
// ADR-064: Record failure in domain circuit breaker
|
|
181
|
-
|
|
180
|
+
// ADR-064: Record failure in domain circuit breaker. A task rejected for
|
|
181
|
+
// invalid caller input says nothing about the domain's health, so it must
|
|
182
|
+
// not open the breaker for every other caller (#795).
|
|
183
|
+
if (ctx.domainBreakerRegistry && execution.assignedDomain && !callerError) {
|
|
182
184
|
ctx.domainBreakerRegistry.getBreaker(execution.assignedDomain).recordFailure(new Error(error || 'Task failed'));
|
|
183
185
|
}
|
|
184
186
|
// ADR-064 Phase 3: Fail the trace span for this task
|
|
@@ -189,8 +191,9 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
189
191
|
ctx.taskTraceContexts.delete(taskId);
|
|
190
192
|
}
|
|
191
193
|
}
|
|
192
|
-
// Check if we should retry
|
|
193
|
-
|
|
194
|
+
// Check if we should retry. Caller-input errors are deterministic, so a
|
|
195
|
+
// retry would fail the same way.
|
|
196
|
+
if (!callerError && execution.retryCount < ctx.config.taskRetryLimit) {
|
|
194
197
|
ctx.auditLogger.logFail(taskId, execution.assignedAgents[0], error);
|
|
195
198
|
const retried = {
|
|
196
199
|
...execution,
|
|
@@ -227,7 +230,7 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
227
230
|
}
|
|
228
231
|
// ADR-064 Phase 4A: Create competing hypotheses investigation for
|
|
229
232
|
// permanent failures in critical domains (p0/p1 priority)
|
|
230
|
-
if (ctx.hypothesisManager && (execution.task.priority === 'p0' || execution.task.priority === 'p1')) {
|
|
233
|
+
if (!callerError && ctx.hypothesisManager && (execution.task.priority === 'p0' || execution.task.priority === 'p1')) {
|
|
231
234
|
try {
|
|
232
235
|
const domain = execution.assignedDomain || 'test-generation';
|
|
233
236
|
const investigation = ctx.hypothesisManager.createInvestigation(taskId, domain, `Root cause analysis for ${execution.task.type} failure: ${error}`);
|
|
@@ -372,7 +372,7 @@ end_of_record
|
|
|
372
372
|
| Metric | Value |
|
|
373
373
|
|--------|-------|
|
|
374
374
|
| Tests Generated | ${data.testsGenerated} |
|
|
375
|
-
| Coverage Estimate | ${data.coverageEstimate}
|
|
375
|
+
| Coverage Estimate | ${data.coverageEstimate == null ? 'Unmeasured' : data.coverageEstimate + '%'} |
|
|
376
376
|
| Patterns Used | ${data.patternsUsed.length} |
|
|
377
377
|
|
|
378
378
|
## Patterns Applied
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Agentic QE v3 - Coordination Services
|
|
3
3
|
* Exports services used by coordination components
|
|
4
4
|
*/
|
|
5
|
-
export { TaskAuditLogger, createTaskAuditLogger, type TaskAuditEntry, type TaskAuditConfig, type TaskOperation, } from './task-audit-logger';
|
|
5
|
+
export { TaskAuditLogger, createTaskAuditLogger, type TaskAuditEntry, type TaskAuditSequencedEntry, type TaskAuditConfig, type TaskAuditFilter, type TaskAuditWindow, type TaskAuditSnapshot, type TaskOperation, } from './task-audit-logger';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|