agentic-qe 3.15.9 → 3.15.11
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/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +365 -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/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- 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/audit/witness-chain.d.ts +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-TIDSQ3ZK.js +2 -0
- package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/browser-6YJF4FQW.js +4 -0
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/chunk-2CW7VRPH.js +141 -0
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/chunk-2VLYUF7U.js +2 -0
- package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-4RAQ7PJA.js} +8 -8
- package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-672XOJDG.js} +2 -2
- package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-6NA3KZZT.js} +10 -10
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-AUUJBXWX.js} +25 -20
- package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/chunk-EBPJY4DI.js +3 -0
- package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ERN43HOX.js} +430 -433
- package/dist/cli/chunks/chunk-ETVAYGCB.js +180 -0
- package/dist/cli/chunks/chunk-EWPUQCN4.js +2 -0
- package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/chunk-FWSGPE3V.js +12 -0
- package/dist/cli/chunks/chunk-FZHSG75I.js +3 -0
- package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-G4FAPO57.js} +5 -5
- package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/chunk-IENZSO3K.js +4 -0
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/chunk-ITL3IN2E.js +3 -0
- package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-LD5CFK53.js} +54 -33
- package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/chunk-OD5D4LSZ.js +2 -0
- package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/chunk-RBZCA7SD.js +12 -0
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/chunk-UKKYMW3S.js +3 -0
- package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/chunk-VO3DRK4P.js +3 -0
- package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/chunk-X3PZCXWG.js +2 -0
- package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ONKLMVQ2.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/daemon-P574WWBW.js +18 -0
- package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/domain-transfer-DOBI67K6.js +2 -0
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/fleet-FVAUMKUT.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-GYJ6D4QM.js} +36 -36
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-GNSIDRNG.js} +24 -24
- package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-ZM43WGDO.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/mcp-4Y6GDLYK.js +2 -0
- package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-Y44WDOER.js} +69 -25
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/pipeline-EDTS6OSC.js +19 -0
- package/dist/cli/chunks/{platform-KJDABL5C.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-AUDTRX3I.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/sync-XW5TLZ7M.js +2 -0
- package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-XFSGQELD.js → test-D2XDJNDX.js} +17 -17
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-HBBLPCZ3.js +2 -0
- package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-JTWLBAZJ.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-K7YX2AO6.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/wrappers-AVZ3GPAL.js +2 -0
- package/dist/cli/commands/fleet.js +23 -13
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +11 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +11 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +63 -7
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-handlers.js +10 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- 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.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +18 -3
- package/dist/coordination/handlers/security-handlers.js +45 -21
- package/dist/coordination/handlers/test-execution-handlers.js +25 -7
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
- package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
- package/dist/coordination/protocols/learning-consolidation.js +71 -22
- package/dist/coordination/queen-coordinator.d.ts +1 -1
- package/dist/coordination/queen-coordinator.js +27 -10
- package/dist/coordination/queen-event-handlers.js +13 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +62 -168
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +1 -1
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- 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/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
- package/dist/domains/code-intelligence/index-path-guard.js +20 -50
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
- package/dist/domains/learning-optimization/active-patterns.js +2 -2
- package/dist/domains/learning-optimization/coordinator.js +9 -5
- package/dist/domains/learning-optimization/interfaces.d.ts +8 -2
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
- package/dist/domains/learning-optimization/reward-source.js +8 -1
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
- package/dist/domains/learning-optimization/services/learning-coordinator.js +47 -59
- 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/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- 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/scanners/scanner-orchestrator.js +4 -1
- 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 +6 -0
- package/dist/domains/test-execution/coordinator.js +28 -22
- package/dist/domains/test-execution/interfaces.d.ts +36 -1
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- 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-execution/services/runner-test-cases.d.ts +11 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
- package/dist/domains/test-execution/services/test-executor.js +8 -8
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +5 -2
- 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 +50 -6
- 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 +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
- package/dist/learning/dream/dream-insights-pruner.js +16 -30
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- 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 +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +17 -3
- package/dist/mcp/bundle.js +612 -580
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +7 -0
- package/dist/mcp/handlers/domain-handler-configs.js +19 -5
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +36 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +16 -0
- package/dist/mcp/handlers/task-handlers.js +77 -24
- package/dist/mcp/handlers/validation-pipeline-handler.js +14 -10
- package/dist/mcp/protocol-server.js +10 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +59 -12
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +19 -1
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +17 -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/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- 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/shared/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- 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/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -1
- 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/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +6 -0
- package/dist/shared/test-runner-process.js +14 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/shared/utils/namespaced-search.d.ts +14 -0
- package/dist/shared/utils/namespaced-search.js +19 -1
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- 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/gate-reexecute.js +7 -4
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/dist/workers/daemon.js +13 -1
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +2 -0
- package/dist/workers/workers/learning-consolidation.js +12 -1
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
- package/dist/cli/chunks/base-67DXSAYM.js +0 -2
- package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
- package/dist/cli/chunks/chunk-2XITOPYV.js +0 -6
- package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
- package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
- package/dist/cli/chunks/chunk-6PXA2BQJ.js +0 -742
- package/dist/cli/chunks/chunk-6YL6JOQB.js +0 -4
- package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
- package/dist/cli/chunks/chunk-AR2E4B7K.js +0 -6
- package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
- package/dist/cli/chunks/chunk-FJ4VTLLK.js +0 -2
- package/dist/cli/chunks/chunk-FV3NHVC7.js +0 -59
- package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
- package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
- package/dist/cli/chunks/chunk-JEP4ULR6.js +0 -21
- package/dist/cli/chunks/chunk-JK2ME6IT.js +0 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
- package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
- package/dist/cli/chunks/chunk-N5PDFGCQ.js +0 -180
- package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
- package/dist/cli/chunks/chunk-P2CXVNKK.js +0 -4
- package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
- package/dist/cli/chunks/chunk-VU2EL424.js +0 -14
- package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
- package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
- package/dist/cli/chunks/chunk-XZJ2O3VC.js +0 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
- package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
- package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
- package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
- package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
- package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
- package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
- package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
- package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
- package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
- package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
- package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
- package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
|
@@ -230,9 +230,10 @@ export class SpreadingActivation {
|
|
|
230
230
|
* - Novel associations are discovered from unexpected co-activations
|
|
231
231
|
*
|
|
232
232
|
* @param durationMs - How long to dream in milliseconds
|
|
233
|
+
* @param signal - #1060: stops the dream early (engine closed, shutdown)
|
|
233
234
|
* @returns Activation result from the dream cycle
|
|
234
235
|
*/
|
|
235
|
-
async dream(durationMs) {
|
|
236
|
+
async dream(durationMs, signal) {
|
|
236
237
|
const startTime = Date.now();
|
|
237
238
|
const allNovelAssociations = [];
|
|
238
239
|
let totalIterations = 0;
|
|
@@ -251,7 +252,7 @@ export class SpreadingActivation {
|
|
|
251
252
|
}
|
|
252
253
|
// Dream loop with strict time enforcement
|
|
253
254
|
const deadlineMs = startTime + durationMs;
|
|
254
|
-
while (Date.now() < deadlineMs) {
|
|
255
|
+
while (Date.now() < deadlineMs && !signal?.aborted) {
|
|
255
256
|
// Randomly select a concept to activate
|
|
256
257
|
const randomIndex = secureRandomInt(0, allConcepts.length);
|
|
257
258
|
const randomNode = allConcepts[randomIndex];
|
|
@@ -277,10 +278,10 @@ export class SpreadingActivation {
|
|
|
277
278
|
}
|
|
278
279
|
}
|
|
279
280
|
// Check deadline again before sleeping
|
|
280
|
-
if (Date.now() >= deadlineMs)
|
|
281
|
+
if (Date.now() >= deadlineMs || signal?.aborted)
|
|
281
282
|
break;
|
|
282
283
|
// Small delay to prevent CPU spike
|
|
283
|
-
await this.sleep(50 + secureRandom() * 50);
|
|
284
|
+
await this.sleep(50 + secureRandom() * 50, signal);
|
|
284
285
|
}
|
|
285
286
|
// Deduplicate and sort novel associations
|
|
286
287
|
const uniqueAssociations = this.deduplicateAssociations(allNovelAssociations);
|
|
@@ -561,8 +562,16 @@ export class SpreadingActivation {
|
|
|
561
562
|
/**
|
|
562
563
|
* Helper to sleep for a duration
|
|
563
564
|
*/
|
|
564
|
-
sleep(ms) {
|
|
565
|
-
return new Promise((resolve) =>
|
|
565
|
+
sleep(ms, signal) {
|
|
566
|
+
return new Promise((resolve) => {
|
|
567
|
+
const timer = setTimeout(done, ms);
|
|
568
|
+
function done() {
|
|
569
|
+
clearTimeout(timer);
|
|
570
|
+
signal?.removeEventListener('abort', done);
|
|
571
|
+
resolve();
|
|
572
|
+
}
|
|
573
|
+
signal?.addEventListener('abort', done, { once: true });
|
|
574
|
+
});
|
|
566
575
|
}
|
|
567
576
|
}
|
|
568
577
|
export default SpreadingActivation;
|
|
@@ -71,6 +71,11 @@ export interface TaskExperience {
|
|
|
71
71
|
reward?: number;
|
|
72
72
|
/** Test outcome category (if applicable) */
|
|
73
73
|
testOutcome?: TestOutcome;
|
|
74
|
+
/**
|
|
75
|
+
* #1129: what `success` was read from (e.g. test-results). Absent when the
|
|
76
|
+
* caller only knows the task completed; such usage is not a measured outcome.
|
|
77
|
+
*/
|
|
78
|
+
outcomeBasis?: string;
|
|
74
79
|
/** Feedback provided */
|
|
75
80
|
feedback?: string;
|
|
76
81
|
/** Extracted patterns (if any) */
|
|
@@ -209,6 +214,8 @@ export declare class ExperienceCaptureService {
|
|
|
209
214
|
quality?: number;
|
|
210
215
|
feedback?: string;
|
|
211
216
|
testOutcome?: TestOutcome;
|
|
217
|
+
/** #1129: set when `success` was read from the result, not from completion. */
|
|
218
|
+
outcomeBasis?: string;
|
|
212
219
|
}): Promise<Result<TaskExperience>>;
|
|
213
220
|
/**
|
|
214
221
|
* Get an active experience
|
|
@@ -295,6 +302,8 @@ export declare class ExperienceCaptureService {
|
|
|
295
302
|
/**
|
|
296
303
|
* Convert experience to pattern options
|
|
297
304
|
*/
|
|
305
|
+
/** #1129: tag the usage row so readers can tell a measured outcome from completion. */
|
|
306
|
+
private usageOutcomeTag;
|
|
298
307
|
private experienceToPatternOptions;
|
|
299
308
|
/**
|
|
300
309
|
* Detect pattern type from task description
|
|
@@ -19,6 +19,7 @@ import { LoggerFactory } from '../logging/index.js';
|
|
|
19
19
|
import { getRuVectorFeatureFlags } from '../integrations/ruvector/feature-flags.js';
|
|
20
20
|
const logger = LoggerFactory.create('experience-capture');
|
|
21
21
|
import { PROMOTION_THRESHOLD } from './qe-patterns.js';
|
|
22
|
+
import { usageOutcomeMetrics } from './usage-outcome.js';
|
|
22
23
|
/**
|
|
23
24
|
* Reward values for each test outcome.
|
|
24
25
|
* Based on GRPO (Group Relative Policy Optimization) binary reward model.
|
|
@@ -181,6 +182,8 @@ export class ExperienceCaptureService {
|
|
|
181
182
|
experience.durationMs = now - experience.startedAt;
|
|
182
183
|
experience.success = outcome.success;
|
|
183
184
|
experience.feedback = outcome.feedback;
|
|
185
|
+
if (outcome.outcomeBasis)
|
|
186
|
+
experience.outcomeBasis = outcome.outcomeBasis;
|
|
184
187
|
// Calculate quality from steps if not provided
|
|
185
188
|
if (outcome.quality !== undefined) {
|
|
186
189
|
experience.quality = outcome.quality;
|
|
@@ -250,9 +253,11 @@ export class ExperienceCaptureService {
|
|
|
250
253
|
// Extract patterns: require positive reward (or no reward signal) AND quality threshold
|
|
251
254
|
// Zero or negative reward blocks extraction — only learn from genuinely positive outcomes
|
|
252
255
|
const rewardAllowsExtraction = experience.reward === undefined || experience.reward > 0;
|
|
253
|
-
|
|
256
|
+
// #1129: a measured outcome is recorded whether it succeeded or failed.
|
|
257
|
+
// Recording only successes made the usage success rate 100% by selection.
|
|
258
|
+
if (experience.outcomeBasis !== undefined || (experience.success &&
|
|
254
259
|
experience.quality >= this.config.minQualityForPatternExtraction &&
|
|
255
|
-
rewardAllowsExtraction) {
|
|
260
|
+
rewardAllowsExtraction)) {
|
|
256
261
|
const extractionResult = await this.extractPattern(experience);
|
|
257
262
|
if (extractionResult.newPattern || extractionResult.reinforced) {
|
|
258
263
|
experience.patterns = [extractionResult.patternId];
|
|
@@ -391,11 +396,13 @@ export class ExperienceCaptureService {
|
|
|
391
396
|
&& origin.patternType === this.detectPatternType(experience.task)
|
|
392
397
|
&& existing.pattern.patternType === origin.patternType
|
|
393
398
|
&& (!experience.domain || existing.pattern.qeDomain === experience.domain)) {
|
|
394
|
-
const usageResult = await this.patternStore.recordUsage(existing.pattern.id, experience.success);
|
|
399
|
+
const usageResult = await this.patternStore.recordUsage(existing.pattern.id, experience.success, this.usageOutcomeTag(experience));
|
|
395
400
|
// Check if pattern should be promoted (short-term → long-term)
|
|
396
401
|
const pattern = await this.patternStore.get(existing.pattern.id);
|
|
397
402
|
let promoted = false;
|
|
403
|
+
// A failed use is now recorded too (#1129); it never promotes.
|
|
398
404
|
if (pattern &&
|
|
405
|
+
experience.success &&
|
|
399
406
|
pattern.tier === 'short-term' &&
|
|
400
407
|
pattern.usageCount >= this.config.promotionThreshold) {
|
|
401
408
|
// Actually promote the pattern
|
|
@@ -420,7 +427,7 @@ export class ExperienceCaptureService {
|
|
|
420
427
|
if (createResult.success) {
|
|
421
428
|
this.stats.patternsExtracted++;
|
|
422
429
|
// Record the initial usage (the experience that created this pattern)
|
|
423
|
-
await this.patternStore.recordUsage(createResult.value.id, experience.success);
|
|
430
|
+
await this.patternStore.recordUsage(createResult.value.id, experience.success, this.usageOutcomeTag(experience));
|
|
424
431
|
return {
|
|
425
432
|
newPattern: true,
|
|
426
433
|
patternId: createResult.value.id,
|
|
@@ -583,6 +590,13 @@ export class ExperienceCaptureService {
|
|
|
583
590
|
/**
|
|
584
591
|
* Convert experience to pattern options
|
|
585
592
|
*/
|
|
593
|
+
/** #1129: tag the usage row so readers can tell a measured outcome from completion. */
|
|
594
|
+
usageOutcomeTag(experience) {
|
|
595
|
+
const runId = typeof experience.metadata?.runId === 'string' ? experience.metadata.runId : undefined;
|
|
596
|
+
return experience.outcomeBasis !== undefined
|
|
597
|
+
? usageOutcomeMetrics({ measured: true, success: experience.success, basis: experience.outcomeBasis }, runId)
|
|
598
|
+
: usageOutcomeMetrics({ measured: false, success: null, basis: 'task-completed' }, runId);
|
|
599
|
+
}
|
|
586
600
|
experienceToPatternOptions(experience) {
|
|
587
601
|
// Detect pattern type from task
|
|
588
602
|
const patternType = this.detectPatternType(experience.task);
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
import { randomUUID } from 'crypto';
|
|
60
60
|
import { LoggerFactory } from '../logging/index.js';
|
|
61
61
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
62
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
62
63
|
const logger = LoggerFactory.create('MemoryAuditor');
|
|
63
64
|
/**
|
|
64
65
|
* Default auditor configuration
|
|
@@ -319,7 +320,8 @@ export class MemoryCoherenceAuditor {
|
|
|
319
320
|
* Group patterns by domain
|
|
320
321
|
*/
|
|
321
322
|
groupByDomain(patterns) {
|
|
322
|
-
|
|
323
|
+
// #1157: domains come from stored pattern rows.
|
|
324
|
+
const groups = createSafeRecord();
|
|
323
325
|
for (const pattern of patterns) {
|
|
324
326
|
const domain = pattern.qeDomain;
|
|
325
327
|
if (!groups[domain]) {
|
|
@@ -163,7 +163,8 @@ export function validateQEPattern(pattern) {
|
|
|
163
163
|
export function applyPatternTemplate(template, variables) {
|
|
164
164
|
let content = template.content;
|
|
165
165
|
for (const variable of template.variables) {
|
|
166
|
-
|
|
166
|
+
// #1157: the variable name comes from a stored pattern; read own values only.
|
|
167
|
+
const value = (Object.hasOwn(variables, variable.name) ? variables[variable.name] : undefined) ?? variable.defaultValue;
|
|
167
168
|
if (variable.required && value === undefined) {
|
|
168
169
|
throw new Error(`Required variable ${variable.name} not provided`);
|
|
169
170
|
}
|
|
@@ -107,6 +107,12 @@ export interface LearningOutcome {
|
|
|
107
107
|
testsFailed?: number;
|
|
108
108
|
coverageImprovement?: number;
|
|
109
109
|
executionTimeMs?: number;
|
|
110
|
+
/** #1129: whether `success` was read from the result or only from completion. */
|
|
111
|
+
outcome?: 'measured' | 'unmeasured';
|
|
112
|
+
/** #1129: what a measured verdict was read from (e.g. test-results). */
|
|
113
|
+
outcomeBasis?: string;
|
|
114
|
+
/** #1129: the run this use belongs to; one run may use several patterns. */
|
|
115
|
+
runId?: string;
|
|
110
116
|
};
|
|
111
117
|
/** Feedback from the agent or user */
|
|
112
118
|
feedback?: string;
|
|
@@ -183,8 +189,17 @@ export interface QEReasoningBankStats {
|
|
|
183
189
|
avgRoutingConfidence: number;
|
|
184
190
|
/** Learning outcomes recorded */
|
|
185
191
|
learningOutcomes: number;
|
|
186
|
-
/**
|
|
187
|
-
|
|
192
|
+
/** #1129: measured runs (success read from the result, e.g. test counts). */
|
|
193
|
+
measuredOutcomes?: number;
|
|
194
|
+
/** #1129: usage rows without a measured outcome; left out of the rate. */
|
|
195
|
+
unmeasuredOutcomes?: number;
|
|
196
|
+
/**
|
|
197
|
+
* Share of measured runs that succeeded; null when none is measured
|
|
198
|
+
* (#1129) instead of a rate built from completed calls.
|
|
199
|
+
*/
|
|
200
|
+
patternSuccessRate: number | null;
|
|
201
|
+
/** #1129: set when no measured outcome exists to compute patternSuccessRate. */
|
|
202
|
+
evidenceStatus?: 'insufficient-evidence';
|
|
188
203
|
/** Pattern store stats */
|
|
189
204
|
patternStoreStats: import('./pattern-store.js').PatternStoreStats;
|
|
190
205
|
/** ADR-061: Asymmetric learning metrics (optional, available in RealQEReasoningBank) */
|
|
@@ -33,6 +33,7 @@ import { resolveTopologyCriticalFromSharedMincut } from './routing-topology-gate
|
|
|
33
33
|
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
34
34
|
import { resizeEmbedding, hashEmbedding } from './embedding-utils.js';
|
|
35
35
|
import { maybeEnhanceRoutingWithPatterns } from './pattern-routing-guidance.js';
|
|
36
|
+
import { usageOutcomeOf } from './usage-outcome.js';
|
|
36
37
|
import { checkPatternPromotionWithCoherence, promotePattern as promotePatternFn, seedCrossDomainPatterns as seedCrossDomainPatternsFn, } from './pattern-promotion.js';
|
|
37
38
|
// ============================================================================
|
|
38
39
|
// QEReasoningBank Implementation
|
|
@@ -97,6 +98,7 @@ export class QEReasoningBank {
|
|
|
97
98
|
routingRequests: 0,
|
|
98
99
|
totalRoutingConfidence: 0,
|
|
99
100
|
learningOutcomes: 0,
|
|
101
|
+
measuredOutcomes: 0,
|
|
100
102
|
successfulOutcomes: 0,
|
|
101
103
|
};
|
|
102
104
|
constructor(memory, eventBus, config = {}, coherenceService) {
|
|
@@ -431,8 +433,12 @@ export class QEReasoningBank {
|
|
|
431
433
|
const result = await this.patternStore.recordUsage(outcome.patternId, outcome.success, outcome.metrics, outcome.feedback);
|
|
432
434
|
if (result.success) {
|
|
433
435
|
this.stats.learningOutcomes++;
|
|
434
|
-
|
|
435
|
-
|
|
436
|
+
// #1129: only a measured outcome counts toward the success rate.
|
|
437
|
+
const measured = usageOutcomeOf(outcome.metrics) === 'measured';
|
|
438
|
+
if (measured) {
|
|
439
|
+
this.stats.measuredOutcomes++;
|
|
440
|
+
if (outcome.success)
|
|
441
|
+
this.stats.successfulOutcomes++;
|
|
436
442
|
}
|
|
437
443
|
// ADR-070: Record pattern update in witness chain
|
|
438
444
|
getWitnessChain().then(wc => wc.append('PATTERN_UPDATE', { patternId: outcome.patternId, success: outcome.success }, 'reasoning-bank')).catch((e) => { logger.warn('Witness chain PATTERN_UPDATE failed', { error: toErrorMessage(e) }); });
|
|
@@ -721,9 +727,10 @@ export class QEReasoningBank {
|
|
|
721
727
|
? this.stats.totalRoutingConfidence / this.stats.routingRequests
|
|
722
728
|
: 0;
|
|
723
729
|
let learningOutcomes = this.stats.learningOutcomes;
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
730
|
+
// In process each recorded outcome is its own run; the DB groups by runId.
|
|
731
|
+
let measuredOutcomes = this.stats.measuredOutcomes;
|
|
732
|
+
let unmeasuredOutcomes = this.stats.learningOutcomes - this.stats.measuredOutcomes;
|
|
733
|
+
let successfulOutcomes = this.stats.successfulOutcomes;
|
|
727
734
|
try {
|
|
728
735
|
const agg = this.getSqliteStore().getAggregateOutcomeStats();
|
|
729
736
|
if (agg.routingRequests > routingRequests) {
|
|
@@ -732,24 +739,28 @@ export class QEReasoningBank {
|
|
|
732
739
|
}
|
|
733
740
|
if (agg.learningOutcomes > learningOutcomes) {
|
|
734
741
|
learningOutcomes = agg.learningOutcomes;
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
agg.learningOutcomes > 0
|
|
739
|
-
? agg.successfulOutcomes / agg.learningOutcomes
|
|
740
|
-
: agg.avgPatternSuccessRate;
|
|
742
|
+
measuredOutcomes = agg.measuredOutcomes;
|
|
743
|
+
unmeasuredOutcomes = agg.unmeasuredOutcomes;
|
|
744
|
+
successfulOutcomes = agg.successfulOutcomes;
|
|
741
745
|
}
|
|
742
746
|
}
|
|
743
747
|
catch {
|
|
744
748
|
// best-effort — never let stats reporting crash the host
|
|
745
749
|
}
|
|
750
|
+
// #1129: the rate is over measured outcomes only. A usage row that only
|
|
751
|
+
// records a completed call says nothing about whether the result was
|
|
752
|
+
// good, so with none measured there is no rate to report.
|
|
753
|
+
const patternSuccessRate = measuredOutcomes > 0 ? successfulOutcomes / measuredOutcomes : null;
|
|
746
754
|
return {
|
|
747
755
|
totalPatterns: patternStoreStats.totalPatterns,
|
|
748
756
|
byDomain,
|
|
749
757
|
routingRequests,
|
|
750
758
|
avgRoutingConfidence,
|
|
751
759
|
learningOutcomes,
|
|
760
|
+
measuredOutcomes,
|
|
761
|
+
unmeasuredOutcomes,
|
|
752
762
|
patternSuccessRate,
|
|
763
|
+
...(patternSuccessRate === null ? { evidenceStatus: 'insufficient-evidence' } : {}),
|
|
753
764
|
patternStoreStats,
|
|
754
765
|
};
|
|
755
766
|
}
|
|
@@ -38,6 +38,17 @@ export interface RealQEPatternSearchResult {
|
|
|
38
38
|
matchType: 'vector' | 'lexical';
|
|
39
39
|
canReuse: boolean;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* #1022: how pattern search works in this process. Without an embedding
|
|
43
|
+
* runtime the bank stores patterns text-only (vectors pending, filled later by
|
|
44
|
+
* `aqe learning backfill-embeddings`) and searches by SQLite FTS text matching
|
|
45
|
+
* only. No similarity score is computed in that mode.
|
|
46
|
+
*/
|
|
47
|
+
export interface PatternSearchStatus {
|
|
48
|
+
mode: 'vector' | 'lexical-only';
|
|
49
|
+
/** Why vector search is unavailable (only for 'lexical-only'). */
|
|
50
|
+
reason?: string;
|
|
51
|
+
}
|
|
41
52
|
export interface RealQERoutingRequest {
|
|
42
53
|
task: string;
|
|
43
54
|
taskType?: 'test-generation' | 'analysis' | 'debugging' | 'optimization';
|
|
@@ -94,6 +105,8 @@ export interface RealQEReasoningBankStats {
|
|
|
94
105
|
transformerAvailable: boolean;
|
|
95
106
|
embeddingDimension: number;
|
|
96
107
|
sqliteDbPath: string;
|
|
108
|
+
/** #1022: whether pattern search uses vectors, or text matching only */
|
|
109
|
+
patternSearch: PatternSearchStatus;
|
|
97
110
|
/** ADR-061: Asymmetric learning metrics */
|
|
98
111
|
asymmetricLearning?: {
|
|
99
112
|
failurePenaltyRatio: string;
|
|
@@ -119,6 +132,8 @@ export declare class RealQEReasoningBank {
|
|
|
119
132
|
private hnswIndex;
|
|
120
133
|
private patternIdMap;
|
|
121
134
|
private initialized;
|
|
135
|
+
/** #1022: set when no embedding runtime is available; null when vectors work. */
|
|
136
|
+
private embedderUnavailableReason;
|
|
122
137
|
private stats;
|
|
123
138
|
private routingLatencies;
|
|
124
139
|
private readonly asymmetricEngine;
|
|
@@ -128,6 +143,8 @@ export declare class RealQEReasoningBank {
|
|
|
128
143
|
* Initialize the QE ReasoningBank
|
|
129
144
|
*/
|
|
130
145
|
initialize(): Promise<void>;
|
|
146
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
147
|
+
getPatternSearchStatus(): PatternSearchStatus;
|
|
131
148
|
/**
|
|
132
149
|
* Initialize HNSW index for fast similarity search
|
|
133
150
|
*/
|
|
@@ -153,6 +170,8 @@ export declare class RealQEReasoningBank {
|
|
|
153
170
|
domain?: QEDomain;
|
|
154
171
|
minSimilarity?: number;
|
|
155
172
|
}): Promise<Result<RealQEPatternSearchResult[]>>;
|
|
173
|
+
/** Append HNSW vector matches for `query` to `patterns`. */
|
|
174
|
+
private collectVectorMatches;
|
|
156
175
|
/**
|
|
157
176
|
* Route a task to optimal agent
|
|
158
177
|
*/
|
|
@@ -80,6 +80,8 @@ export class RealQEReasoningBank {
|
|
|
80
80
|
hnswIndex = null;
|
|
81
81
|
patternIdMap = new Map();
|
|
82
82
|
initialized = false;
|
|
83
|
+
/** #1022: set when no embedding runtime is available; null when vectors work. */
|
|
84
|
+
embedderUnavailableReason = null;
|
|
83
85
|
// Statistics tracking - using CircularBuffer for O(1) operations (ADR memory leak fix)
|
|
84
86
|
stats = {
|
|
85
87
|
routingRequests: 0,
|
|
@@ -167,12 +169,24 @@ export class RealQEReasoningBank {
|
|
|
167
169
|
await this.sqliteStore.initialize();
|
|
168
170
|
logger.info('SQLite persistence initialized');
|
|
169
171
|
// Establish executable provenance before any persisted vectors enter ANN.
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
// #1022: without an embedding runtime (no @huggingface/transformers and no
|
|
173
|
+
// AQE_EMBEDDER_ENDPOINT) run text-only instead of failing: no vector is
|
|
174
|
+
// computed, stored or searched (ADR-097: no hash-embedding fallback).
|
|
175
|
+
try {
|
|
176
|
+
await computeRealEmbedding(EMBEDDING_SPACE_CANARY, this.qeConfig.embeddings);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.embedderUnavailableReason = toErrorMessage(error);
|
|
180
|
+
logger.warn('No embedding runtime: patterns are stored without vectors (pending ' +
|
|
181
|
+
'`aqe learning backfill-embeddings`) and searched by text matching only', { reason: this.embedderUnavailableReason });
|
|
182
|
+
}
|
|
183
|
+
if (this.embedderUnavailableReason === null) {
|
|
184
|
+
// Initialize HNSW index
|
|
185
|
+
await this.initializeHNSW();
|
|
186
|
+
logger.info('HNSW index initialized');
|
|
187
|
+
// Load existing patterns into HNSW
|
|
188
|
+
await this.loadPatternsIntoHNSW();
|
|
189
|
+
}
|
|
176
190
|
// Load foundational patterns ONLY if this is a brand-new database (no tables or genuinely empty).
|
|
177
191
|
// CRITICAL: Do NOT overwrite existing data. If patterns were unexpectedly wiped,
|
|
178
192
|
// loading 22 seed patterns would mask the data loss. Log a warning instead.
|
|
@@ -193,6 +207,12 @@ export class RealQEReasoningBank {
|
|
|
193
207
|
const initTime = performance.now() - startTime;
|
|
194
208
|
logger.info('Fully initialized', { durationMs: Math.round(initTime) });
|
|
195
209
|
}
|
|
210
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
211
|
+
getPatternSearchStatus() {
|
|
212
|
+
return this.embedderUnavailableReason === null
|
|
213
|
+
? { mode: 'vector' }
|
|
214
|
+
: { mode: 'lexical-only', reason: this.embedderUnavailableReason };
|
|
215
|
+
}
|
|
196
216
|
/**
|
|
197
217
|
* Initialize HNSW index for fast similarity search
|
|
198
218
|
*/
|
|
@@ -311,9 +331,12 @@ export class RealQEReasoningBank {
|
|
|
311
331
|
async storeQEPattern(options) {
|
|
312
332
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
313
333
|
try {
|
|
314
|
-
// Generate REAL embedding using transformer model
|
|
334
|
+
// Generate REAL embedding using transformer model. #1022: without an
|
|
335
|
+
// embedding runtime the pattern is stored text-only (vector pending).
|
|
315
336
|
const textToEmbed = `${options.name} ${options.description || ''} ${options.context?.tags?.join(' ') || ''}`;
|
|
316
|
-
const embedding =
|
|
337
|
+
const embedding = this.embedderUnavailableReason === null
|
|
338
|
+
? await computeRealEmbedding(textToEmbed, this.qeConfig.embeddings)
|
|
339
|
+
: undefined;
|
|
317
340
|
// Detect QE domain
|
|
318
341
|
const qeDomain = detectQEDomain(textToEmbed) || 'test-generation';
|
|
319
342
|
// ADR-058: Check MemoryWriteGate for contradictions before storing
|
|
@@ -374,7 +397,7 @@ export class RealQEReasoningBank {
|
|
|
374
397
|
// Store in SQLite
|
|
375
398
|
this.sqliteStore.storePattern(pattern, embedding);
|
|
376
399
|
// Add to HNSW index
|
|
377
|
-
if (this.hnswIndex) {
|
|
400
|
+
if (this.hnswIndex && embedding) {
|
|
378
401
|
const index = this.hnswIndex.getCurrentCount();
|
|
379
402
|
this.hnswIndex.addPoint(embedding, index);
|
|
380
403
|
this.patternIdMap.set(index, patternId);
|
|
@@ -410,38 +433,15 @@ export class RealQEReasoningBank {
|
|
|
410
433
|
// Require explicit initialization - don't auto-initialize to avoid memory issues
|
|
411
434
|
const startTime = performance.now();
|
|
412
435
|
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
436
|
const limit = options.limit || 10;
|
|
420
|
-
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
421
437
|
const patterns = [];
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
continue;
|
|
428
|
-
}
|
|
429
|
-
const patternId = this.patternIdMap.get(hnswIndex);
|
|
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
|
+
// #1022: without an embedding runtime only the lexical (FTS) branch
|
|
439
|
+
// below runs; its hits are labelled matchType 'lexical'.
|
|
440
|
+
if (this.embedderUnavailableReason === null) {
|
|
441
|
+
if (!this.hnswIndex) {
|
|
442
|
+
return err(new Error('HNSW index not available'));
|
|
438
443
|
}
|
|
439
|
-
|
|
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
|
-
});
|
|
444
|
+
await this.collectVectorMatches(query, limit, options, patterns);
|
|
445
445
|
}
|
|
446
446
|
const existing = new Map(patterns.map(hit => [hit.pattern.id, hit]));
|
|
447
447
|
for (const lexical of this.sqliteStore.searchFTS(query, limit * 2)) {
|
|
@@ -471,6 +471,37 @@ export class RealQEReasoningBank {
|
|
|
471
471
|
return err(toError(error));
|
|
472
472
|
}
|
|
473
473
|
}
|
|
474
|
+
/** Append HNSW vector matches for `query` to `patterns`. */
|
|
475
|
+
async collectVectorMatches(query, limit, options, patterns) {
|
|
476
|
+
// Generate REAL embedding for query
|
|
477
|
+
const queryEmbedding = await computeRealEmbedding(query, this.qeConfig.embeddings);
|
|
478
|
+
// Search HNSW index
|
|
479
|
+
const results = this.hnswIndex.searchKnn(queryEmbedding, limit * 2); // Get extra for filtering
|
|
480
|
+
for (let i = 0; i < results.neighbors.length; i++) {
|
|
481
|
+
const hnswIndex = results.neighbors[i];
|
|
482
|
+
const distance = results.distances[i];
|
|
483
|
+
const similarity = 1 - distance; // Convert distance to similarity
|
|
484
|
+
if (options.minSimilarity !== undefined && similarity < options.minSimilarity) {
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
const patternId = this.patternIdMap.get(hnswIndex);
|
|
488
|
+
if (!patternId)
|
|
489
|
+
continue;
|
|
490
|
+
const pattern = this.sqliteStore.getPattern(patternId);
|
|
491
|
+
if (!pattern)
|
|
492
|
+
continue;
|
|
493
|
+
// Filter by domain if specified
|
|
494
|
+
if (options.domain && pattern.qeDomain !== options.domain) {
|
|
495
|
+
continue;
|
|
496
|
+
}
|
|
497
|
+
const reuse = DEFAULT_PATTERN_STORE_CONFIG.reuseOptimization;
|
|
498
|
+
const ageDays = (Date.now() - new Date(pattern.lastUsedAt).getTime()) / 86_400_000;
|
|
499
|
+
patterns.push({ pattern, similarity, score: similarity, matchType: 'vector',
|
|
500
|
+
canReuse: Boolean(pattern.reusable && similarity >= reuse.minSimilarityForReuse
|
|
501
|
+
&& pattern.successRate >= reuse.minSuccessRateForReuse && ageDays <= reuse.maxAgeForReuse),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
474
505
|
/**
|
|
475
506
|
* Route a task to optimal agent
|
|
476
507
|
*/
|
|
@@ -701,6 +732,7 @@ export class RealQEReasoningBank {
|
|
|
701
732
|
: 0,
|
|
702
733
|
embeddingCacheSize: 0, // Would need to track this in real-embeddings
|
|
703
734
|
transformerAvailable: isTransformerAvailable(),
|
|
735
|
+
patternSearch: this.getPatternSearchStatus(),
|
|
704
736
|
embeddingDimension: getEmbeddingDimension(),
|
|
705
737
|
sqliteDbPath: this.qeConfig.sqlite.dbPath || '.agentic-qe/memory.db',
|
|
706
738
|
// ADR-061: Asymmetric learning stats
|
|
@@ -185,12 +185,18 @@ export declare class SQLitePatternStore {
|
|
|
185
185
|
* routing_outcomes and qe_pattern_usage live in the same unified memory.db
|
|
186
186
|
* as qe_patterns. avgConfidence/avgSuccessRate return 0 when the source
|
|
187
187
|
* tables are empty rather than NaN.
|
|
188
|
+
*
|
|
189
|
+
* #1129: measuredOutcomes and successfulOutcomes count measured runs (rows
|
|
190
|
+
* tagged outcome 'measured', grouped by runId); unmeasuredOutcomes counts
|
|
191
|
+
* every other usage row. learningOutcomes stays the total row count.
|
|
188
192
|
*/
|
|
189
193
|
getAggregateOutcomeStats(): {
|
|
190
194
|
routingRequests: number;
|
|
191
195
|
avgRoutingConfidence: number;
|
|
192
196
|
successfulRoutings: number;
|
|
193
197
|
learningOutcomes: number;
|
|
198
|
+
measuredOutcomes: number;
|
|
199
|
+
unmeasuredOutcomes: number;
|
|
194
200
|
successfulOutcomes: number;
|
|
195
201
|
avgPatternSuccessRate: number;
|
|
196
202
|
};
|
|
@@ -21,6 +21,7 @@ import { ensurePatternFtsInSync } from '../kernel/pattern-fts-self-heal.js';
|
|
|
21
21
|
import { computeBatchEmbeddings, getEmbeddingDimension, isUsingEndpoint, getActiveEmbeddingSpaceIdentity, } from './real-embeddings.js';
|
|
22
22
|
import { EMBEDDING_SPACE_CANARY, inspectEmbeddingSpaceRows, } from './embedding-space.js';
|
|
23
23
|
import { recordPatternUsage } from './pattern-usage-recorder.js';
|
|
24
|
+
import { MEASURED_USAGE_SQL, USAGE_RUN_SQL } from './usage-outcome.js';
|
|
24
25
|
export const DEFAULT_SQLITE_CONFIG = {
|
|
25
26
|
// LEGACY: Ignored when useUnified=true (the default). All data goes to memory.db
|
|
26
27
|
dbPath: '.agentic-qe/memory.db',
|
|
@@ -718,6 +719,10 @@ export class SQLitePatternStore {
|
|
|
718
719
|
* routing_outcomes and qe_pattern_usage live in the same unified memory.db
|
|
719
720
|
* as qe_patterns. avgConfidence/avgSuccessRate return 0 when the source
|
|
720
721
|
* tables are empty rather than NaN.
|
|
722
|
+
*
|
|
723
|
+
* #1129: measuredOutcomes and successfulOutcomes count measured runs (rows
|
|
724
|
+
* tagged outcome 'measured', grouped by runId); unmeasuredOutcomes counts
|
|
725
|
+
* every other usage row. learningOutcomes stays the total row count.
|
|
721
726
|
*/
|
|
722
727
|
getAggregateOutcomeStats() {
|
|
723
728
|
const empty = {
|
|
@@ -725,6 +730,8 @@ export class SQLitePatternStore {
|
|
|
725
730
|
avgRoutingConfidence: 0,
|
|
726
731
|
successfulRoutings: 0,
|
|
727
732
|
learningOutcomes: 0,
|
|
733
|
+
measuredOutcomes: 0,
|
|
734
|
+
unmeasuredOutcomes: 0,
|
|
728
735
|
successfulOutcomes: 0,
|
|
729
736
|
avgPatternSuccessRate: 0,
|
|
730
737
|
};
|
|
@@ -751,8 +758,13 @@ export class SQLitePatternStore {
|
|
|
751
758
|
const usage = safeGet(`
|
|
752
759
|
SELECT
|
|
753
760
|
COUNT(*) AS total,
|
|
754
|
-
COALESCE(SUM(
|
|
755
|
-
|
|
761
|
+
COALESCE(SUM(measured), 0) AS measuredRows,
|
|
762
|
+
COUNT(DISTINCT CASE WHEN measured = 1 THEN run END) AS measured,
|
|
763
|
+
COUNT(DISTINCT CASE WHEN measured = 1 AND success = 1 THEN run END) AS succ
|
|
764
|
+
FROM (
|
|
765
|
+
SELECT success, ${MEASURED_USAGE_SQL} AS measured, ${USAGE_RUN_SQL} AS run
|
|
766
|
+
FROM qe_pattern_usage
|
|
767
|
+
)
|
|
756
768
|
`);
|
|
757
769
|
const patternAvg = safeGet(`
|
|
758
770
|
SELECT AVG(success_rate) AS avg_sr
|
|
@@ -764,6 +776,8 @@ export class SQLitePatternStore {
|
|
|
764
776
|
avgRoutingConfidence: routing?.avg_q ?? 0,
|
|
765
777
|
successfulRoutings: routing?.succ ?? 0,
|
|
766
778
|
learningOutcomes: usage?.total ?? 0,
|
|
779
|
+
measuredOutcomes: usage?.measured ?? 0,
|
|
780
|
+
unmeasuredOutcomes: (usage?.total ?? 0) - (usage?.measuredRows ?? 0),
|
|
767
781
|
successfulOutcomes: usage?.succ ?? 0,
|
|
768
782
|
avgPatternSuccessRate: patternAvg?.avg_sr ?? 0,
|
|
769
783
|
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Measured outcomes for pattern usage (#1129)
|
|
3
|
+
*
|
|
4
|
+
* `qe_pattern_usage.success` used to mean "the call completed": MCP tool runs
|
|
5
|
+
* were captured with a fixed `success: true`, hooks pass a hardcoded
|
|
6
|
+
* `--success`, and session consolidation writes only aggregates whose success
|
|
7
|
+
* rate already passed a threshold. The aggregate "Pattern Success Rate" was
|
|
8
|
+
* 100% by construction.
|
|
9
|
+
*
|
|
10
|
+
* A usage row counts as a measured outcome only when it says so:
|
|
11
|
+
* `metrics_json.outcome = 'measured'`, written when success was read from the
|
|
12
|
+
* result. Today that is a test run: every test passed, or some failed.
|
|
13
|
+
* Every other row, whatever its age or writer, is unmeasured (tag and exclude,
|
|
14
|
+
* the #1109 decision): it is kept and counted as a use, never rewritten, and
|
|
15
|
+
* never part of the rate.
|
|
16
|
+
*
|
|
17
|
+
* The rate is per run, not per row: one tool run writes a row for each
|
|
18
|
+
* pattern involved (the captured experience's pattern plus every routing
|
|
19
|
+
* hint), all with the same verdict, and they share `metrics_json.runId`.
|
|
20
|
+
*/
|
|
21
|
+
export type UsageOutcome = 'measured' | 'unmeasured';
|
|
22
|
+
/** The outcome of one tool run, as far as its result shows it. */
|
|
23
|
+
export interface ToolOutcome {
|
|
24
|
+
/** True when `success` was read from the result, not from completion. */
|
|
25
|
+
readonly measured: boolean;
|
|
26
|
+
/** For a measured outcome, whether it was good; otherwise null. */
|
|
27
|
+
readonly success: boolean | null;
|
|
28
|
+
/** What the verdict was read from, e.g. `test-results`. */
|
|
29
|
+
readonly basis: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read the outcome of a completed tool run from its result.
|
|
33
|
+
* Tools without an outcome measure here are `unmeasured`: completing is not
|
|
34
|
+
* evidence that the result was good.
|
|
35
|
+
*/
|
|
36
|
+
export declare function measureToolOutcome(taskType: string, data: unknown): ToolOutcome;
|
|
37
|
+
/** Metrics fields that tag a usage row with its outcome provenance and run. */
|
|
38
|
+
export declare function usageOutcomeMetrics(outcome: ToolOutcome, runId?: string): {
|
|
39
|
+
outcome: UsageOutcome;
|
|
40
|
+
outcomeBasis: string;
|
|
41
|
+
runId?: string;
|
|
42
|
+
};
|
|
43
|
+
/** Classify one qe_pattern_usage row (TypeScript twin of MEASURED_USAGE_SQL). */
|
|
44
|
+
export declare function usageOutcomeOf(metrics: Record<string, unknown> | null | undefined): UsageOutcome;
|
|
45
|
+
/**
|
|
46
|
+
* SQL expression over qe_pattern_usage: 1 for a measured row, 0 otherwise.
|
|
47
|
+
* Mirrors usageOutcomeOf; json_valid keeps a malformed row from failing the query.
|
|
48
|
+
*/
|
|
49
|
+
export declare const MEASURED_USAGE_SQL = "(CASE WHEN json_valid(metrics_json) AND json_extract(metrics_json, '$.outcome') = 'measured' THEN 1 ELSE 0 END)";
|
|
50
|
+
/** SQL expression: the run a usage row belongs to (a row without runId is its own run). */
|
|
51
|
+
export declare const USAGE_RUN_SQL = "COALESCE(CASE WHEN json_valid(metrics_json) THEN json_extract(metrics_json, '$.runId') END, 'row:' || id)";
|
|
52
|
+
/** Fields of the reasoning-bank stats that describe usage outcomes. */
|
|
53
|
+
interface OutcomeStats {
|
|
54
|
+
learningOutcomes: number;
|
|
55
|
+
measuredOutcomes?: number;
|
|
56
|
+
patternSuccessRate: number | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* e.g. "9 (4 measured runs, 0 unmeasured)". A run can write several usage
|
|
60
|
+
* rows (one per pattern involved), so measured runs can be fewer than rows.
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatLearningOutcomes(stats: OutcomeStats & {
|
|
63
|
+
unmeasuredOutcomes?: number;
|
|
64
|
+
}): string;
|
|
65
|
+
/** The rate as a percentage, or why there is none (#1129). */
|
|
66
|
+
export declare function formatPatternSuccessRate(stats: OutcomeStats): string;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=usage-outcome.d.ts.map
|