agentic-qe 3.15.10 → 3.15.12
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/hooks/aqe-hook.cjs +38 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +263 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-HL7MOCQN.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-5VZCKTIJ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-K3C6CQCD.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-NVFQ25WS.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +2 -0
- package/dist/cli/chunks/{arena-EKOOFVST.js → arena-QGWIJADQ.js} +2 -2
- package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-TSZVDSXS.js} +4 -4
- package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-KIEE2SHJ.js} +3 -3
- package/dist/cli/chunks/base-WIM7G3HC.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BNB32NW3.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-MPC5SPYI.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-LZ7UXKAY.js} +2 -2
- package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-VDHAW4RK.js} +2 -2
- package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +2 -0
- package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-23PQF7NN.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-26672ISV.js} +2 -2
- package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-2ASQRBK2.js} +2 -2
- package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-2E2QO44T.js} +2 -2
- package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-2IVE5AR3.js} +1 -1
- package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-2JYUA27M.js} +1 -1
- package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-2PPSS4JD.js} +2 -2
- package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-32UTHIY5.js} +5 -5
- package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-33I2ZP6E.js} +2 -2
- package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-35MIUSXQ.js} +2 -2
- package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-35NW676P.js} +2 -2
- package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-3EWQN37E.js} +2 -2
- package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-3IU4LDZR.js} +2 -2
- package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-47RMGDG4.js} +2 -2
- package/dist/cli/chunks/chunk-4A76VPU4.js +3 -0
- package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4CB3QPZM.js} +2 -2
- package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-4HWUECVD.js} +5 -5
- package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-4KUOYDY2.js} +5 -5
- package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-4LWMAAWK.js} +2 -2
- package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-4PU5GTZW.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-4SA7M34P.js} +1 -1
- package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-4Y6OEBJZ.js} +1 -1
- package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-5A66EGEW.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-5ADXFUMO.js} +2 -2
- package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-5S4UIDFK.js} +1 -1
- package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-5TAEW5OV.js} +1 -1
- package/dist/cli/chunks/chunk-5Z23ZMXZ.js +742 -0
- package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-65TH6RPD.js} +1 -1
- package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-66PXR3NI.js} +2 -2
- package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-6E6HB4N4.js} +14 -14
- package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-6QRI3JVE.js} +2 -2
- package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-7DNR4KKR.js} +1 -1
- package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-7JFDLL2F.js} +1 -1
- package/dist/cli/chunks/chunk-7OEFBWAG.js +5 -0
- package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-7QEUHNKO.js} +1 -1
- package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7TA5MUPW.js} +1 -1
- package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-A2JCRXTK.js} +2 -2
- package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-A5Y7DAVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-ADUAJIAU.js} +2 -2
- package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-AJEXPFAB.js} +1 -1
- package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-BC4T6SCV.js} +4 -4
- package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-BMG2JLSQ.js} +2 -2
- package/dist/cli/chunks/chunk-BOSMELJX.js +180 -0
- package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-BYRCB5JT.js} +2 -2
- package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-C3YOVASQ.js} +6 -5
- package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-C74M4WUI.js} +2 -2
- package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-CA5UNWQF.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-CDA5Z74H.js} +2 -2
- package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-CPIBIR3X.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-CU36D7TN.js} +2 -2
- package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-DAUEK66C.js} +1 -1
- package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-DRCBRUGN.js} +2 -2
- package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-DZGPUGUG.js} +2 -2
- package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-EF6OERRR.js} +1 -1
- package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-EN7GRVEQ.js} +2 -2
- package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-ENGL7FIJ.js} +1 -1
- package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-FAGKBOX2.js} +2 -2
- package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FNUFTWEO.js} +3 -3
- package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-FZJCBSN4.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-G24SWTAX.js} +151 -149
- package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-G3AABG4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-GJKZ7UQO.js} +2 -2
- package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-GKFV6CUD.js} +2 -2
- package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-HLGFHHWV.js} +2 -2
- package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-HM3LSFTY.js} +2 -2
- package/dist/cli/chunks/chunk-HSA5IGGW.js +2 -0
- package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-HZBXJFGN.js} +2 -2
- package/dist/cli/chunks/chunk-IA55PFLG.js +7 -0
- package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-ICKUINKD.js} +2 -2
- package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-IETBWYHW.js} +2 -2
- package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-IL7GQNNE.js} +2 -2
- package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-INZARYUD.js} +2 -2
- package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-IPA7K556.js} +2 -2
- package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-IVTQF55W.js} +3 -3
- package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-J7Y7ZBIT.js} +8 -8
- package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-JGIJPDGD.js} +2 -2
- package/dist/cli/chunks/chunk-JNXK47OL.js +2 -0
- package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-JOWUS2X5.js} +1 -1
- package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-JR6CUKAI.js} +2 -2
- package/dist/cli/chunks/chunk-JRYWLOBD.js +21 -0
- package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-JW5PDJ5O.js} +11 -11
- package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-K3A3NWT3.js} +2 -2
- package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-KA5SHLMW.js} +2 -2
- package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-KGA7VAI4.js} +2 -2
- package/dist/cli/chunks/chunk-KJDI5CHX.js +2 -0
- package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-L3PV7VXK.js} +1 -1
- package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-L7NGKANW.js} +32 -32
- package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-LFBA735S.js} +7 -7
- package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-MAJXZYGK.js} +1 -1
- package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-MCPEC6OO.js} +1 -1
- package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-MCPXNUDK.js} +2 -2
- package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-MMEALJ4D.js} +2 -2
- package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-MYF5CNGV.js} +2 -2
- package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-MYUMJ2ZI.js} +1 -1
- package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-N7O3PF6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-NA3F6FEO.js} +2 -2
- package/dist/cli/chunks/chunk-NNBQZR73.js +6 -0
- package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-NV74SICL.js} +2 -2
- package/dist/cli/chunks/chunk-NVRYELCY.js +13 -0
- package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-NX4BCSOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-O3IM4WRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-O4QJMANM.js} +1 -1
- package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-OHVYINGM.js} +18 -18
- package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-P5E26N2X.js} +2 -2
- package/dist/cli/chunks/chunk-P7UFJ6DO.js +14 -0
- package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-PGSJBXTD.js} +2 -2
- package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-PT2NXS43.js} +1 -1
- package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-PTBOLBM4.js} +2 -2
- package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-PX5OPXY6.js} +1 -1
- package/dist/cli/chunks/chunk-QCPVUNN3.js +2 -0
- package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-QSGEBCDB.js} +2 -2
- package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-QUJJYTJH.js} +2 -2
- package/dist/cli/chunks/chunk-QWG3SILX.js +59 -0
- package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-RCOLPF3B.js} +2 -2
- package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-RYHG3I7J.js} +2 -2
- package/dist/cli/chunks/chunk-SBHM5X2S.js +4 -0
- package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-SDRJJUPO.js} +1 -1
- package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-SG2TX72G.js} +2 -2
- package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-SITL5YZV.js} +4 -4
- package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-SPC4RBLF.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-SQVZ3TRU.js} +2 -2
- package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-SUX5XB2Z.js} +2 -2
- package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-T4EN5VVK.js} +2 -2
- package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-TGMXUZZC.js} +2 -2
- package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-TLRHAMX5.js} +1 -1
- package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-TOWOJGEI.js} +1 -1
- package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-TSOQ2QLT.js} +3 -3
- package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-TVA5GRIU.js} +2 -2
- package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-TXEUVUMO.js} +1 -1
- package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-U6IXYQO4.js} +2 -2
- package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-U7ZHDGXG.js} +1 -1
- package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-UCSK2RMI.js} +2 -2
- package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-UIKQPO4Y.js} +2 -2
- package/dist/cli/chunks/chunk-UJNGGFGX.js +2 -0
- package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-ULCW6IVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-UREDS662.js} +2 -2
- package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-URSTP3WI.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-UUZZXHUF.js} +2 -2
- package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-UZED4YZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-VF7FTD64.js} +1 -1
- package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-VUR5THML.js} +2 -2
- package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-VXVTFKRA.js} +2 -2
- package/dist/cli/chunks/chunk-VZBC6DP7.js +2 -0
- package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-W4II6SIH.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-W5HQIYQU.js} +3 -3
- package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-W7H55PY4.js} +1 -1
- package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-WDEXOLK2.js} +1 -1
- package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-WGTEZT7G.js} +2 -2
- package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-WLRU6ESI.js} +2 -2
- package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-WTAUF6O4.js} +2 -2
- package/dist/cli/chunks/chunk-XCNSGSKV.js +3 -0
- package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-XZOYKB22.js} +2 -2
- package/dist/cli/chunks/chunk-YIDAXOUX.js +8 -0
- package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-YLKIXEPP.js} +1 -1
- package/dist/cli/chunks/chunk-YNVEDFPQ.js +2 -0
- package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-YUA6ZKKY.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-YVJEUX3I.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-YWWMNTBF.js} +2 -2
- package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-ZGROHCOW.js} +2 -2
- package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-ZPVGX4DI.js} +2 -2
- package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-ZROAMFX2.js} +2 -2
- package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-ZYOYR3UR.js} +1 -1
- package/dist/cli/chunks/ci-BZNWW3I3.js +81 -0
- package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-LOHNXOKV.js} +2 -2
- package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-LCOQBSJL.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-7LRXTLFE.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-HBU4VWC3.js} +2 -2
- package/dist/cli/chunks/client-4PNYDFYS.js +2 -0
- package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-CO6MLH6X.js} +2 -2
- package/dist/cli/chunks/{code-ZDJRIL3S.js → code-SIXBS6JM.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-GWJKZ2IQ.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-6NINVWXJ.js} +2 -2
- package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-7VIX3GML.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-FBQR6ZP2.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-VA7RIXW5.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4QEBC4MU.js} +2 -2
- package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-GRYKHPWL.js} +2 -2
- package/dist/cli/chunks/coverage-USPMNKOU.js +50 -0
- package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-ZXIPSZVH.js} +2 -2
- package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-D7F3RGI5.js} +3 -3
- package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-N2VRHPSJ.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-NL6BA7BY.js} +2 -2
- package/dist/cli/chunks/{detect-56SKAGWX.js → detect-XC2HCIIT.js} +2 -2
- package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-A3Y26MEI.js} +2 -2
- package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-WV6SFXRB.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-KJIF6Z2B.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-L3F6AES2.js} +2 -2
- package/dist/cli/chunks/dream-QOB3JCOM.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-PA3Y4KGO.js} +2 -2
- package/dist/cli/chunks/{eval-GNB574IM.js → eval-YGEZNUVE.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-D4T7NW6B.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-6JYK7RYQ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-DKXMDVPE.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-RBH2GDSR.js} +2 -2
- package/dist/cli/chunks/file-discovery-BN76S2PR.js +2 -0
- package/dist/cli/chunks/fleet-43YMXACN.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-MV54UC4C.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-7DKMVQQH.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +2 -0
- package/dist/cli/chunks/hnsw-index-HE4AX22U.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-6IWREDQC.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-5BIESSCK.js} +2 -2
- package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-3EETRM62.js} +30 -30
- package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-RSWCB2D3.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-552LXKL3.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +2 -0
- package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-OTDBJ5HD.js} +2 -2
- package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-3FK3TKEA.js} +26 -25
- package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +2 -0
- package/dist/cli/chunks/kernel-2WZOQEZS.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-KZ2O4LF3.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-MLCCXRF7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +2 -0
- package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-QUCMBD77.js} +3 -3
- package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-PDEV3UP2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +2 -0
- package/dist/cli/chunks/{load-HPHKDGGL.js → load-XFVVLO7E.js} +2 -2
- package/dist/cli/chunks/load-test-BEWEE44J.js +2 -0
- package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-74G3CL2S.js} +2 -2
- package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-XIFM6JNX.js} +5 -5
- package/dist/cli/chunks/memory-backend-NYKBBKZR.js +2 -0
- package/dist/cli/chunks/memory-handlers-ZCKURV6S.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-7L4W3O2Q.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-BPG422LF.js} +2 -2
- package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-OEAFLAEV.js} +61 -23
- package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-LOPNCULT.js} +2 -2
- package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-VWTYUZB7.js} +2 -2
- package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-WFJJ3X2E.js} +2 -2
- package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-744TPUSG.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-BD5BLNDR.js} +2 -2
- package/dist/cli/chunks/project-root-C7ELXZRK.js +2 -0
- package/dist/cli/chunks/protocol-executor-SUVE33BM.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-JIBILI74.js} +2 -2
- package/dist/cli/chunks/{prove-H52QGC6B.js → prove-MNOL5FYW.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +2 -0
- package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-JEGBDGGX.js} +2 -2
- package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-SYJ6ROMI.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +2 -0
- package/dist/cli/chunks/real-embeddings-ZWXS5ZFV.js +2 -0
- package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-RRHUFW2N.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-XFO6JSVN.js} +2 -2
- package/dist/cli/chunks/router-4FTAVYLJ.js +2 -0
- package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +2 -0
- package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-L2K3JASE.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-A6CINHGM.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-T4RY7L53.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-IR33TGQS.js} +2 -2
- package/dist/cli/chunks/safe-db-QXDZ6QY3.js +2 -0
- package/dist/cli/chunks/schedule-CZKD6RIY.js +2 -0
- package/dist/cli/chunks/scheduler-BLA3Q4CH.js +2 -0
- package/dist/cli/chunks/{security-VSPNKCDS.js → security-Z5GDE2IH.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-SIZMEHPM.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-HLM65RDS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +2 -0
- package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-SKSZG7P5.js} +2 -2
- package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-766YOOMJ.js} +2 -2
- package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-M45FNOLT.js} +2 -2
- package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-6CJ24B5T.js} +2 -2
- package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-B2U366I3.js} +2 -2
- package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-P6IFLCKP.js} +17 -15
- package/dist/cli/chunks/task-handlers-DPWMUKFC.js +9 -0
- package/dist/cli/chunks/{test-UWA377D4.js → test-TODH7KRF.js} +11 -11
- package/dist/cli/chunks/test-runner-process-46IPK3GH.js +2 -0
- package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-VMVMVRHT.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-XQW7BMCK.js} +2 -2
- package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-JCZEIRKO.js} +2 -2
- package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-U2ML3OHE.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +2 -0
- package/dist/cli/chunks/{types-PJS2FGPF.js → types-GGEPCHP6.js} +2 -2
- package/dist/cli/chunks/unified-memory-FL26RTV3.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +2 -0
- package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +2 -0
- package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-T5GRM7HS.js} +2 -2
- package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XMUJPLP3.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-KJLF7JEH.js} +2 -2
- package/dist/cli/chunks/visual-security-IJVPO5FA.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-LOHVZ7G5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-33FBTXJU.js} +2 -2
- package/dist/cli/chunks/witness-chain-5FAFCQKP.js +2 -0
- package/dist/cli/chunks/witness-chain-V2M32W5D.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-VWBO4NXE.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-BHJ3ZAEK.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-WNVPH2Z3.js} +2 -2
- package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-6QR5MQTO.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +2 -0
- package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-EHOL62TS.js} +2 -2
- package/dist/cli/commands/ci.js +7 -0
- package/dist/cli/commands/coverage.js +7 -1
- package/dist/cli/commands/fleet.js +5 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/test.js +5 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/handlers/task-handler.js +6 -0
- package/dist/cli/utils/ci-output.d.ts +2 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/coverage-verdict.d.ts +11 -2
- package/dist/cli/utils/coverage-verdict.js +26 -6
- package/dist/cli/utils/fleet-operation.d.ts +5 -0
- package/dist/cli/utils/fleet-operation.js +7 -1
- package/dist/cli/utils/fleet-result.d.ts +5 -3
- package/dist/cli/utils/fleet-result.js +9 -3
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
- package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
- package/dist/coordination/handlers/coverage-collection.js +5 -2
- package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
- package/dist/coordination/handlers/coverage-evidence.js +159 -0
- package/dist/coordination/handlers/coverage-handlers.js +16 -3
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
- package/dist/coordination/handlers/coverage-scope.js +321 -0
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.d.ts +9 -0
- package/dist/coordination/handlers/coverage-target.js +21 -8
- package/dist/coordination/handlers/handler-utils.d.ts +5 -0
- package/dist/coordination/handlers/handler-utils.js +11 -5
- package/dist/coordination/handlers/requirements-handlers.js +3 -2
- package/dist/coordination/handlers/security-handlers.js +34 -20
- package/dist/coordination/queen-coordinator.js +8 -3
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +10 -7
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +5 -14
- package/dist/domains/test-execution/interfaces.d.ts +11 -1
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +3 -1
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/10-workers.js +42 -4
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +29 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -6
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +10 -3
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +13 -0
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/embedder-endpoint-client.d.ts +8 -0
- package/dist/learning/embedder-endpoint-client.js +20 -0
- package/dist/learning/embedder-recovery.d.ts +63 -0
- package/dist/learning/embedder-recovery.js +94 -0
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
- package/dist/learning/qe-reasoning-bank.d.ts +21 -0
- package/dist/learning/qe-reasoning-bank.js +54 -8
- package/dist/learning/real-embeddings.d.ts +23 -0
- package/dist/learning/real-embeddings.js +69 -2
- package/dist/learning/real-qe-reasoning-bank.d.ts +39 -0
- package/dist/learning/real-qe-reasoning-bank.js +108 -38
- package/dist/logging/redaction.js +142 -12
- package/dist/mcp/bundle.js +520 -503
- package/dist/mcp/daemon-mode.d.ts +126 -0
- package/dist/mcp/daemon-mode.js +257 -0
- package/dist/mcp/entry.d.ts +4 -0
- package/dist/mcp/entry.js +50 -2
- package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
- package/dist/mcp/handlers/domain-handler-configs.js +13 -2
- package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
- package/dist/mcp/handlers/orchestrate-routes.js +53 -0
- package/dist/mcp/handlers/task-handlers.d.ts +23 -1
- package/dist/mcp/handlers/task-handlers.js +90 -19
- package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
- package/dist/mcp/protocol-server.js +11 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/services/reasoning-bank-service.d.ts +9 -2
- package/dist/mcp/services/reasoning-bank-service.js +13 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +7 -0
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/mcp/types.d.ts +14 -0
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/routing/advisor/redaction.js +22 -2
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/providers/response-deadline.js +16 -2
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/types/index.js +3 -1
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/package.json +3 -3
- package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
- package/dist/cli/chunks/base-GTB6POYE.js +0 -2
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +0 -3
- package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
- package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
- package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
- package/dist/cli/chunks/chunk-DURHK377.js +0 -742
- package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
- package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
- package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
- package/dist/cli/chunks/chunk-N6PIIK6G.js +0 -3
- package/dist/cli/chunks/chunk-NSHU347M.js +0 -2
- package/dist/cli/chunks/chunk-PPSAMXYN.js +0 -13
- package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
- package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
- package/dist/cli/chunks/chunk-WSF24I3D.js +0 -2
- package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
- package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
- package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
- package/dist/cli/chunks/ci-MSKMVH5X.js +0 -81
- package/dist/cli/chunks/client-POSVREVS.js +0 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
- package/dist/cli/chunks/coverage-B7MCGNTE.js +0 -49
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
- package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +0 -46
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
- package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
- package/dist/cli/chunks/real-embeddings-RWGOVOXO.js +0 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
- package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
|
@@ -23,6 +23,7 @@ import { blendFtsScore, DEFAULT_PATTERN_STORE_CONFIG } from './pattern-store.js'
|
|
|
23
23
|
import { EMBEDDING_SPACE_CANARY } from './embedding-space.js';
|
|
24
24
|
const logger = LoggerFactory.create('RealQEReasoningBank');
|
|
25
25
|
import { computeRealEmbedding, isTransformerAvailable, getEmbeddingDimension, clearEmbeddingCache, getActiveEmbeddingSpaceIdentity, } from './real-embeddings.js';
|
|
26
|
+
import { EmbedderRecovery, probeEmbedder } from './embedder-recovery.js';
|
|
26
27
|
import { createSQLitePatternStore, } from './sqlite-persistence.js';
|
|
27
28
|
import { detectQEDomain, detectQEDomains, mapQEDomainToAQE, QE_DOMAIN_LIST, shouldPromotePattern, } from './qe-patterns.js';
|
|
28
29
|
import { getGuidance, getCombinedGuidance, generateGuidanceContext, checkAntiPatterns, } from './qe-guidance.js';
|
|
@@ -59,6 +60,7 @@ export const DEFAULT_REAL_CONFIG = {
|
|
|
59
60
|
capabilities: 0.3,
|
|
60
61
|
},
|
|
61
62
|
coherenceThreshold: 0.4, // ADR-052: Coherence gate threshold
|
|
63
|
+
embedderRetryIntervalMs: 60_000,
|
|
62
64
|
};
|
|
63
65
|
// ============================================================================
|
|
64
66
|
// Real QE ReasoningBank Implementation
|
|
@@ -80,6 +82,11 @@ export class RealQEReasoningBank {
|
|
|
80
82
|
hnswIndex = null;
|
|
81
83
|
patternIdMap = new Map();
|
|
82
84
|
initialized = false;
|
|
85
|
+
/**
|
|
86
|
+
* #1022/#1187/#1204: whether the embedder works. While it does not, patterns
|
|
87
|
+
* are stored text-only and searched by text; it is retried in the background.
|
|
88
|
+
*/
|
|
89
|
+
embedderRecovery;
|
|
83
90
|
// Statistics tracking - using CircularBuffer for O(1) operations (ADR memory leak fix)
|
|
84
91
|
stats = {
|
|
85
92
|
routingRequests: 0,
|
|
@@ -155,6 +162,12 @@ export class RealQEReasoningBank {
|
|
|
155
162
|
this.qeConfig = { ...DEFAULT_REAL_CONFIG, ...config };
|
|
156
163
|
this.sqliteStore = createSQLitePatternStore(this.qeConfig.sqlite);
|
|
157
164
|
this.asymmetricEngine = new AsymmetricLearningEngine();
|
|
165
|
+
this.embedderRecovery = new EmbedderRecovery({
|
|
166
|
+
retryIntervalMs: this.qeConfig.embedderRetryIntervalMs,
|
|
167
|
+
probe: () => this.probeEmbedderForRetry(),
|
|
168
|
+
onRecovered: () => logger.info('Embedder available again: pattern search uses vectors'),
|
|
169
|
+
onRetryFailed: (error) => logger.debug('Embedder still unavailable', { error: toErrorMessage(error) }),
|
|
170
|
+
});
|
|
158
171
|
}
|
|
159
172
|
/**
|
|
160
173
|
* Initialize the QE ReasoningBank
|
|
@@ -167,12 +180,24 @@ export class RealQEReasoningBank {
|
|
|
167
180
|
await this.sqliteStore.initialize();
|
|
168
181
|
logger.info('SQLite persistence initialized');
|
|
169
182
|
// Establish executable provenance before any persisted vectors enter ANN.
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
183
|
+
// #1022: without an embedding runtime (no @huggingface/transformers and no
|
|
184
|
+
// AQE_EMBEDDER_ENDPOINT) run text-only instead of failing: no vector is
|
|
185
|
+
// computed, stored or searched (ADR-097: no hash-embedding fallback).
|
|
186
|
+
try {
|
|
187
|
+
await computeRealEmbedding(EMBEDDING_SPACE_CANARY, this.qeConfig.embeddings);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
this.embedderRecovery.markUnavailable(toErrorMessage(error));
|
|
191
|
+
logger.warn('No embedding runtime: patterns are stored without vectors (pending ' +
|
|
192
|
+
'`aqe learning backfill-embeddings`) and searched by text matching only', { reason: this.embedderRecovery.unavailableReason });
|
|
193
|
+
}
|
|
194
|
+
if (this.embedderRecovery.unavailableReason === null) {
|
|
195
|
+
// Initialize HNSW index
|
|
196
|
+
await this.initializeHNSW();
|
|
197
|
+
logger.info('HNSW index initialized');
|
|
198
|
+
// Load existing patterns into HNSW
|
|
199
|
+
await this.loadPatternsIntoHNSW();
|
|
200
|
+
}
|
|
176
201
|
// Load foundational patterns ONLY if this is a brand-new database (no tables or genuinely empty).
|
|
177
202
|
// CRITICAL: Do NOT overwrite existing data. If patterns were unexpectedly wiped,
|
|
178
203
|
// loading 22 seed patterns would mask the data loss. Log a warning instead.
|
|
@@ -193,6 +218,42 @@ export class RealQEReasoningBank {
|
|
|
193
218
|
const initTime = performance.now() - startTime;
|
|
194
219
|
logger.info('Fully initialized', { durationMs: Math.round(initTime) });
|
|
195
220
|
}
|
|
221
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
222
|
+
getPatternSearchStatus() {
|
|
223
|
+
const reason = this.embedderRecovery.unavailableReason;
|
|
224
|
+
return reason === null ? { mode: 'vector' } : { mode: 'lexical-only', reason };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* #1187: embed `text`, or return undefined when the embedder is unavailable.
|
|
228
|
+
* A runtime failure switches this bank to lexical-only (reported by
|
|
229
|
+
* getPatternSearchStatus): callers then store patterns text-only and search
|
|
230
|
+
* by text. The embedder is tried again once `embedderRetryIntervalMs` has
|
|
231
|
+
* passed, so a short outage, at startup or later, does not last until restart.
|
|
232
|
+
* #1204: that retry runs in the background; this call stays text-only.
|
|
233
|
+
*/
|
|
234
|
+
async embedOrUndefined(text) {
|
|
235
|
+
if (!this.embedderRecovery.isAvailable())
|
|
236
|
+
return undefined;
|
|
237
|
+
try {
|
|
238
|
+
return await computeRealEmbedding(text, this.qeConfig.embeddings);
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
const reason = `Embedder failed at runtime: ${toErrorMessage(error)}`;
|
|
242
|
+
if (this.embedderRecovery.markUnavailable(reason)) {
|
|
243
|
+
logger.warn('Embedder failed: patterns are stored without vectors and searched by ' +
|
|
244
|
+
'text matching only until it recovers', { reason });
|
|
245
|
+
}
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/** #1187: the retry probe; vector search needs the HNSW index as well. */
|
|
250
|
+
async probeEmbedderForRetry() {
|
|
251
|
+
await probeEmbedder(this.qeConfig.embeddings);
|
|
252
|
+
if (!this.hnswIndex) {
|
|
253
|
+
await this.initializeHNSW();
|
|
254
|
+
await this.loadPatternsIntoHNSW();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
196
257
|
/**
|
|
197
258
|
* Initialize HNSW index for fast similarity search
|
|
198
259
|
*/
|
|
@@ -311,9 +372,10 @@ export class RealQEReasoningBank {
|
|
|
311
372
|
async storeQEPattern(options) {
|
|
312
373
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
313
374
|
try {
|
|
314
|
-
// Generate REAL embedding using transformer model
|
|
375
|
+
// Generate REAL embedding using transformer model. #1022/#1187: without
|
|
376
|
+
// a working embedder the pattern is stored text-only (vector pending).
|
|
315
377
|
const textToEmbed = `${options.name} ${options.description || ''} ${options.context?.tags?.join(' ') || ''}`;
|
|
316
|
-
const embedding = await
|
|
378
|
+
const embedding = await this.embedOrUndefined(textToEmbed);
|
|
317
379
|
// Detect QE domain
|
|
318
380
|
const qeDomain = detectQEDomain(textToEmbed) || 'test-generation';
|
|
319
381
|
// ADR-058: Check MemoryWriteGate for contradictions before storing
|
|
@@ -374,7 +436,7 @@ export class RealQEReasoningBank {
|
|
|
374
436
|
// Store in SQLite
|
|
375
437
|
this.sqliteStore.storePattern(pattern, embedding);
|
|
376
438
|
// Add to HNSW index
|
|
377
|
-
if (this.hnswIndex) {
|
|
439
|
+
if (this.hnswIndex && embedding) {
|
|
378
440
|
const index = this.hnswIndex.getCurrentCount();
|
|
379
441
|
this.hnswIndex.addPoint(embedding, index);
|
|
380
442
|
this.patternIdMap.set(index, patternId);
|
|
@@ -410,38 +472,16 @@ export class RealQEReasoningBank {
|
|
|
410
472
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
411
473
|
const startTime = performance.now();
|
|
412
474
|
try {
|
|
413
|
-
if (!this.hnswIndex) {
|
|
414
|
-
return err(new Error('HNSW index not available'));
|
|
415
|
-
}
|
|
416
|
-
// Generate REAL embedding for query
|
|
417
|
-
const queryEmbedding = await computeRealEmbedding(query, this.qeConfig.embeddings);
|
|
418
|
-
// Search HNSW index
|
|
419
475
|
const limit = options.limit || 10;
|
|
420
|
-
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
421
476
|
const patterns = [];
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
if (
|
|
427
|
-
|
|
477
|
+
// #1022/#1187: without a working embedder only the lexical (FTS) branch
|
|
478
|
+
// below runs; its hits are labelled matchType 'lexical'.
|
|
479
|
+
const queryEmbedding = await this.embedOrUndefined(query);
|
|
480
|
+
if (queryEmbedding) {
|
|
481
|
+
if (!this.hnswIndex) {
|
|
482
|
+
return err(new Error('HNSW index not available'));
|
|
428
483
|
}
|
|
429
|
-
|
|
430
|
-
if (!patternId)
|
|
431
|
-
continue;
|
|
432
|
-
const pattern = this.sqliteStore.getPattern(patternId);
|
|
433
|
-
if (!pattern)
|
|
434
|
-
continue;
|
|
435
|
-
// Filter by domain if specified
|
|
436
|
-
if (options.domain && pattern.qeDomain !== options.domain) {
|
|
437
|
-
continue;
|
|
438
|
-
}
|
|
439
|
-
const reuse = DEFAULT_PATTERN_STORE_CONFIG.reuseOptimization;
|
|
440
|
-
const ageDays = (Date.now() - new Date(pattern.lastUsedAt).getTime()) / 86_400_000;
|
|
441
|
-
patterns.push({ pattern, similarity, score: similarity, matchType: 'vector',
|
|
442
|
-
canReuse: Boolean(pattern.reusable && similarity >= reuse.minSimilarityForReuse
|
|
443
|
-
&& pattern.successRate >= reuse.minSuccessRateForReuse && ageDays <= reuse.maxAgeForReuse),
|
|
444
|
-
});
|
|
484
|
+
this.collectVectorMatches(queryEmbedding, limit, options, patterns);
|
|
445
485
|
}
|
|
446
486
|
const existing = new Map(patterns.map(hit => [hit.pattern.id, hit]));
|
|
447
487
|
for (const lexical of this.sqliteStore.searchFTS(query, limit * 2)) {
|
|
@@ -471,6 +511,35 @@ export class RealQEReasoningBank {
|
|
|
471
511
|
return err(toError(error));
|
|
472
512
|
}
|
|
473
513
|
}
|
|
514
|
+
/** Append HNSW vector matches for the query embedding to `patterns`. */
|
|
515
|
+
collectVectorMatches(queryEmbedding, limit, options, patterns) {
|
|
516
|
+
// Search HNSW index
|
|
517
|
+
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
518
|
+
for (let i = 0; i < results.neighbors.length; i++) {
|
|
519
|
+
const hnswIndex = results.neighbors[i];
|
|
520
|
+
const distance = results.distances[i];
|
|
521
|
+
const similarity = 1 - distance; // Convert distance to similarity
|
|
522
|
+
if (options.minSimilarity !== undefined && similarity < options.minSimilarity) {
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
525
|
+
const patternId = this.patternIdMap.get(hnswIndex);
|
|
526
|
+
if (!patternId)
|
|
527
|
+
continue;
|
|
528
|
+
const pattern = this.sqliteStore.getPattern(patternId);
|
|
529
|
+
if (!pattern)
|
|
530
|
+
continue;
|
|
531
|
+
// Filter by domain if specified
|
|
532
|
+
if (options.domain && pattern.qeDomain !== options.domain) {
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
const reuse = DEFAULT_PATTERN_STORE_CONFIG.reuseOptimization;
|
|
536
|
+
const ageDays = (Date.now() - new Date(pattern.lastUsedAt).getTime()) / 86_400_000;
|
|
537
|
+
patterns.push({ pattern, similarity, score: similarity, matchType: 'vector',
|
|
538
|
+
canReuse: Boolean(pattern.reusable && similarity >= reuse.minSimilarityForReuse
|
|
539
|
+
&& pattern.successRate >= reuse.minSuccessRateForReuse && ageDays <= reuse.maxAgeForReuse),
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
}
|
|
474
543
|
/**
|
|
475
544
|
* Route a task to optimal agent
|
|
476
545
|
*/
|
|
@@ -701,6 +770,7 @@ export class RealQEReasoningBank {
|
|
|
701
770
|
: 0,
|
|
702
771
|
embeddingCacheSize: 0, // Would need to track this in real-embeddings
|
|
703
772
|
transformerAvailable: isTransformerAvailable(),
|
|
773
|
+
patternSearch: this.getPatternSearchStatus(),
|
|
704
774
|
embeddingDimension: getEmbeddingDimension(),
|
|
705
775
|
sqliteDbPath: this.qeConfig.sqlite.dbPath || '.agentic-qe/memory.db',
|
|
706
776
|
// ADR-061: Asymmetric learning stats
|
|
@@ -21,26 +21,126 @@ const SENSITIVE_SUFFIXES = [
|
|
|
21
21
|
'accesskey', 'secretkey', 'credential', 'credentials', 'cookie', 'authorization',
|
|
22
22
|
'sessionid', 'connectionstring',
|
|
23
23
|
];
|
|
24
|
+
/** Basic credentials are base64("user:password"); prose such as "Basic authentication" is not. */
|
|
25
|
+
function looksLikeBasicCredential(value) {
|
|
26
|
+
const decoded = Buffer.from(value, 'base64').toString('latin1');
|
|
27
|
+
return decoded.includes(':') && /^[\x20-\x7e]+$/.test(decoded);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Bearer tokens are opaque, so prose ("use Bearer authorization") is told apart
|
|
31
|
+
* by shape: a short lowercase or Capitalized word, optionally ending a sentence.
|
|
32
|
+
* Anything with digits, mixed case, '_', '-', '/', '+', '=' or over 16 letters
|
|
33
|
+
* is treated as a token: when unsure, redact.
|
|
34
|
+
*/
|
|
35
|
+
function looksLikeProseWord(value) {
|
|
36
|
+
return /^[A-Z]?[a-z]+\.?$/.test(value) && value.replace(/\.$/, '').length <= 16;
|
|
37
|
+
}
|
|
24
38
|
/** Log-specific credential shapes, applied before the shared advisor patterns. */
|
|
25
39
|
const LOG_PATTERNS = [
|
|
26
40
|
// Anchored on '://' rather than a scheme prefix: `\b[a-z][a-z0-9+.-]*://`
|
|
27
41
|
// backtracks quadratically on inputs such as 'a.a.a.…' (seconds per call at
|
|
28
42
|
// 100 KB). The scheme is left in place; an empty user (://:pw@) is covered.
|
|
29
43
|
[/(:\/\/)[^\s/@:"']*:[^\s/@"']+@/g, '$1<REDACTED:credentials>@'],
|
|
30
|
-
|
|
44
|
+
// In a header any Basic value is a credential; outside one it must decode as user:password.
|
|
45
|
+
[/\b(authorization:\s*Basic)\s+[^\s"']+/gi, '$1 <REDACTED:credential>'],
|
|
46
|
+
[/\b(Basic)\s+([A-Za-z0-9+/]{8,}={0,2})(?![A-Za-z0-9._~+/=-])/gi,
|
|
47
|
+
(match, scheme, value) => looksLikeBasicCredential(value) ? `${scheme} <REDACTED:credential>` : match],
|
|
48
|
+
// Same split for Bearer (#1196): any value in a header; outside one, only prose words are kept.
|
|
49
|
+
[/\b(authorization:\s*Bearer)\s+[^\s"']+/gi, '$1 <REDACTED:credential>'],
|
|
50
|
+
[/\b(Bearer)\s+([A-Za-z0-9._~+/=-]{8,})/gi,
|
|
51
|
+
(match, scheme, value) => looksLikeProseWord(value) ? match : `${scheme} <REDACTED:credential>`],
|
|
31
52
|
[/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}/g, '<REDACTED:api_key>'],
|
|
32
53
|
[/\b(set-cookie|cookie):\s*[^\n]+/gi, '$1: <REDACTED:cookie>'],
|
|
33
54
|
// Compound query/assignment keys the shared pattern misses: access_token=, client_secret=
|
|
34
55
|
[/\b([A-Za-z0-9_-]{0,64}?[_-](?:token|secret|password|passwd))=([^\s&"'#]+)/gi, '$1=<REDACTED:credential>'],
|
|
35
56
|
];
|
|
36
57
|
/**
|
|
37
|
-
* JSON / repr serialized fields ("apiKey":"…", 'password': 123).
|
|
38
|
-
*
|
|
39
|
-
*
|
|
58
|
+
* JSON / repr serialized fields ("apiKey":"…", 'password': 123, token: {…}).
|
|
59
|
+
* Keys are quoted (JSON, Python repr) or bare (util.inspect); a bare key must
|
|
60
|
+
* start a word. The key is checked with isSensitiveLogKey() so text and
|
|
61
|
+
* structured values agree. Values are strings, numbers, or an opening '{' / '['
|
|
62
|
+
* whose whole object/array is then redacted. JSON embedded in a JSON string
|
|
63
|
+
* ({\"password\":\"…\"}) uses escaped quotes; its string value runs to the next
|
|
64
|
+
* escaped quote. Unterminated strings are redacted to end of line and
|
|
65
|
+
* unbalanced objects/arrays to end of text (fail closed).
|
|
40
66
|
*/
|
|
41
|
-
const SERIALIZED_FIELD = /(["'])([A-Za-z0-9_.-]{1,64})\1(\s*:\s*)("(?:[^"\\\n]|\\.)*"?|'(?:[^'\\\n]|\\.)*'
|
|
67
|
+
const SERIALIZED_FIELD = /(?:(\\?["'])([A-Za-z0-9_.-]{1,64})\1|(?<![A-Za-z0-9_.$-])([A-Za-z_$][A-Za-z0-9_.$-]{0,63}))(\s*:\s*)("(?:[^"\\\n]|\\.)*"?|'(?:[^'\\\n]|\\.)*'?|\\["']|-?\d[\d.eE+-]*|[{[])/g;
|
|
42
68
|
function redactSerializedFields(text) {
|
|
43
|
-
|
|
69
|
+
const pattern = new RegExp(SERIALIZED_FIELD.source, SERIALIZED_FIELD.flags);
|
|
70
|
+
let out = '';
|
|
71
|
+
let copied = 0;
|
|
72
|
+
for (let m = pattern.exec(text); m !== null; m = pattern.exec(text)) {
|
|
73
|
+
const [match, quote = '', quotedKey, bareKey, sep, value] = m;
|
|
74
|
+
const key = quotedKey ?? bareKey;
|
|
75
|
+
const valueStart = m.index + match.length - value.length;
|
|
76
|
+
if (!isSensitiveLogKey(key)) {
|
|
77
|
+
// Not sensitive: resume inside the value, so keys nested in an object or
|
|
78
|
+
// serialized into a string ("body={\"password\":…}") are still checked.
|
|
79
|
+
pattern.lastIndex = valueStart + 1;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const end = value === '{' || value === '['
|
|
83
|
+
? compoundValueEnd(text, valueStart, quote.length === 2)
|
|
84
|
+
: value.length === 2 && value[0] === '\\'
|
|
85
|
+
? escapedStringEnd(text, valueStart + 2, value)
|
|
86
|
+
: m.index + match.length;
|
|
87
|
+
out += `${text.slice(copied, m.index)}${quote}${key}${quote}${sep}${quote}<REDACTED:sensitive-key>${quote}`;
|
|
88
|
+
copied = end;
|
|
89
|
+
// Resume after the redacted value, which is never scanned again.
|
|
90
|
+
pattern.lastIndex = end;
|
|
91
|
+
}
|
|
92
|
+
return copied === 0 ? text : out + text.slice(copied);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Index just past the escaped closing quote (\" or \'), or the end of the line
|
|
96
|
+
* when there is none. Each \X pair decodes to X; a decoded backslash escapes
|
|
97
|
+
* the next decoded character, so an inner \\\" does not end the string.
|
|
98
|
+
*/
|
|
99
|
+
function escapedStringEnd(text, start, quote) {
|
|
100
|
+
let innerEscape = false;
|
|
101
|
+
for (let i = start; i < text.length; i++) {
|
|
102
|
+
const pair = text[i] === '\\';
|
|
103
|
+
if (pair)
|
|
104
|
+
i++;
|
|
105
|
+
const decoded = text[i];
|
|
106
|
+
if (decoded === '\n' || decoded === undefined)
|
|
107
|
+
return i;
|
|
108
|
+
if (innerEscape)
|
|
109
|
+
innerEscape = false;
|
|
110
|
+
else if (pair && decoded === '\\')
|
|
111
|
+
innerEscape = true;
|
|
112
|
+
else if (pair && decoded === quote[1])
|
|
113
|
+
return i + 1;
|
|
114
|
+
}
|
|
115
|
+
return text.length;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Index just past the object/array opened at `start`, skipping quoted strings
|
|
119
|
+
* (delimited by \" when the object is itself escaped inside a JSON string).
|
|
120
|
+
* An unbalanced value runs to the end of the text, so it is redacted rather than printed.
|
|
121
|
+
*/
|
|
122
|
+
function compoundValueEnd(text, start, escaped) {
|
|
123
|
+
let depth = 0;
|
|
124
|
+
for (let i = start; i < text.length; i++) {
|
|
125
|
+
const ch = text[i];
|
|
126
|
+
if (escaped && ch === '\\' && (text[i + 1] === '"' || text[i + 1] === "'")) {
|
|
127
|
+
i = escapedStringEnd(text, i + 2, text.slice(i, i + 2)) - 1;
|
|
128
|
+
}
|
|
129
|
+
else if (!escaped && (ch === '"' || ch === "'")) {
|
|
130
|
+
// A newline also ends a string: neither JSON nor repr strings contain a raw one.
|
|
131
|
+
for (i++; i < text.length && text[i] !== ch && text[i] !== '\n'; i++) {
|
|
132
|
+
if (text[i] === '\\')
|
|
133
|
+
i++;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (ch === '{' || ch === '[') {
|
|
137
|
+
depth++;
|
|
138
|
+
}
|
|
139
|
+
else if ((ch === '}' || ch === ']') && --depth === 0) {
|
|
140
|
+
return i + 1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return text.length;
|
|
44
144
|
}
|
|
45
145
|
export function isSensitiveLogKey(key) {
|
|
46
146
|
const normalized = key.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
@@ -55,8 +155,11 @@ export function redactLogText(text, maxLength = DEFAULTS.maxStringLength) {
|
|
|
55
155
|
if (text.length > MAX_SCAN_LENGTH)
|
|
56
156
|
return `[REDACTED:size-limit ${text.length} chars]`;
|
|
57
157
|
let result = text;
|
|
58
|
-
for (const [regex, replacement] of LOG_PATTERNS)
|
|
59
|
-
result =
|
|
158
|
+
for (const [regex, replacement] of LOG_PATTERNS) {
|
|
159
|
+
result = typeof replacement === 'string'
|
|
160
|
+
? result.replace(regex, replacement)
|
|
161
|
+
: result.replace(regex, replacement);
|
|
162
|
+
}
|
|
60
163
|
result = redactSerializedFields(result);
|
|
61
164
|
result = redact(result, 'balanced').text;
|
|
62
165
|
return result.length > maxLength
|
|
@@ -71,11 +174,11 @@ export function redactLogValue(value, options = {}) {
|
|
|
71
174
|
export function formatErrorForLog(error) {
|
|
72
175
|
try {
|
|
73
176
|
if (error instanceof Error) {
|
|
74
|
-
let text =
|
|
177
|
+
let text = formatErrorText(error);
|
|
75
178
|
let cause = error.cause;
|
|
76
179
|
for (let hops = 0; cause !== undefined && hops < 3; hops++) {
|
|
77
180
|
text += `\nCaused by: ${cause instanceof Error
|
|
78
|
-
?
|
|
181
|
+
? formatErrorText(cause)
|
|
79
182
|
: JSON.stringify(redactLogValue(cause, { maxDepth: 3 }))}`;
|
|
80
183
|
cause = cause instanceof Error ? cause.cause : undefined;
|
|
81
184
|
}
|
|
@@ -89,6 +192,31 @@ export function formatErrorForLog(error) {
|
|
|
89
192
|
return '[REDACTED:sanitization-failed]';
|
|
90
193
|
}
|
|
91
194
|
}
|
|
195
|
+
/** Fields kept from an error besides its message and stack: they identify the failure, not its data. */
|
|
196
|
+
const SAFE_ERROR_FIELDS = ['name', 'code', 'status'];
|
|
197
|
+
const MAX_ERROR_FIELD_LENGTH = 200;
|
|
198
|
+
/** name/code/status as a redacted record; strings are redacted, numbers kept, anything else dropped. */
|
|
199
|
+
function safeErrorFields(error) {
|
|
200
|
+
const fields = {};
|
|
201
|
+
for (const field of SAFE_ERROR_FIELDS) {
|
|
202
|
+
const descriptor = Object.getOwnPropertyDescriptor(error, field)
|
|
203
|
+
?? (field === 'name' ? { value: error.name } : undefined);
|
|
204
|
+
const value = descriptor && 'value' in descriptor ? descriptor.value : undefined;
|
|
205
|
+
if (typeof value === 'string')
|
|
206
|
+
fields[field] = redactLogText(value, MAX_ERROR_FIELD_LENGTH);
|
|
207
|
+
else if (typeof value === 'number' && Number.isFinite(value))
|
|
208
|
+
fields[field] = value;
|
|
209
|
+
}
|
|
210
|
+
return fields;
|
|
211
|
+
}
|
|
212
|
+
/** Redacted stack (or name: message) followed by the safe structured fields, unless they add nothing. */
|
|
213
|
+
function formatErrorText(error) {
|
|
214
|
+
const text = redactLogText(error.stack || `${error.name}: ${error.message}`);
|
|
215
|
+
const fields = safeErrorFields(error);
|
|
216
|
+
const keys = Object.keys(fields);
|
|
217
|
+
const nameOnly = keys.length === 0 || (keys.length === 1 && text.startsWith(`${fields.name}`));
|
|
218
|
+
return nameOnly ? text : `${text} ${JSON.stringify(fields)}`;
|
|
219
|
+
}
|
|
92
220
|
function sanitize(value, opts, depth, ancestors) {
|
|
93
221
|
try {
|
|
94
222
|
if (value === null || value === undefined || typeof value === 'number' || typeof value === 'boolean')
|
|
@@ -136,9 +264,11 @@ function sanitizeError(error, opts, depth, path) {
|
|
|
136
264
|
};
|
|
137
265
|
if (typeof error.stack === 'string')
|
|
138
266
|
out.stack = redactLogText(error.stack, opts.maxStringLength);
|
|
139
|
-
const code = error
|
|
140
|
-
if (
|
|
267
|
+
const { code, status } = safeErrorFields(error);
|
|
268
|
+
if (code !== undefined)
|
|
141
269
|
out.code = code;
|
|
270
|
+
if (status !== undefined)
|
|
271
|
+
out.status = status;
|
|
142
272
|
const cause = error.cause;
|
|
143
273
|
if (cause !== undefined)
|
|
144
274
|
out.cause = sanitize(cause, opts, depth + 1, path);
|