agentic-qe 3.15.7 → 3.15.9
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 +305 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
- package/dist/bridge/captured-experience-bridge.js +12 -13
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-OS5G7KMQ.js → agent-booster-wasm-427FRKWG.js} +2 -2
- package/dist/cli/chunks/{agent-handler-PI4I7PME.js → agent-handler-RIYHTHVZ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-J7TXHX4U.js → agent-memory-branch-WSUCUHOO.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +2 -0
- package/dist/cli/chunks/{arena-OWUGXKNT.js → arena-KRIBMIXX.js} +2 -2
- package/dist/cli/chunks/{arena-FXESDCFR.js → arena-YAJZX6MC.js} +4 -4
- package/dist/cli/chunks/{audit-EPAWLYIZ.js → audit-7ZNOXWP3.js} +3 -3
- package/dist/cli/chunks/base-67DXSAYM.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IYVR5EQY.js → better-sqlite3-ZQAT4I6H.js} +2 -2
- package/dist/cli/chunks/{brain-handler-3W2E6TC6.js → brain-handler-452WCPZC.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HU7VACJ4.js → branch-enumerator-IJFXJRPN.js} +2 -2
- package/dist/cli/chunks/{browser-72XOR6E2.js → browser-CT3MTV6G.js} +2 -2
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +2 -0
- package/dist/cli/chunks/{chunk-WXI2STKQ.js → chunk-2BA45H64.js} +2 -2
- package/dist/cli/chunks/{chunk-DGK6GQMO.js → chunk-2HL3UM5P.js} +2 -2
- package/dist/cli/chunks/{chunk-LGBN7TKC.js → chunk-2I2UPJS7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZRLNACPY.js → chunk-2TDIS6YK.js} +2 -2
- package/dist/cli/chunks/{chunk-34JLY3U6.js → chunk-2URBI52G.js} +2 -2
- package/dist/cli/chunks/{chunk-K7W55B7Q.js → chunk-2XITOPYV.js} +2 -2
- package/dist/cli/chunks/{chunk-I7H4IP7T.js → chunk-2YH62JCN.js} +2 -2
- package/dist/cli/chunks/{chunk-HPG7354V.js → chunk-32UTLDNY.js} +2 -2
- package/dist/cli/chunks/{chunk-C2CUPJGR.js → chunk-37BIGMJI.js} +1 -1
- package/dist/cli/chunks/{chunk-2RJYA6WK.js → chunk-3CJCROMW.js} +2 -2
- package/dist/cli/chunks/{chunk-CWPRU7ZI.js → chunk-3LYU7BLY.js} +2 -2
- package/dist/cli/chunks/{chunk-24CENUT4.js → chunk-47TYABPD.js} +3 -3
- package/dist/cli/chunks/{chunk-WUV5RZUI.js → chunk-47V7FQGX.js} +2 -2
- package/dist/cli/chunks/{chunk-IWQQIXHO.js → chunk-4JCY45KV.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTMZFF25.js → chunk-4SUOVLJ6.js} +2 -2
- package/dist/cli/chunks/{chunk-CIFWOMNX.js → chunk-4URT6JO2.js} +1 -1
- package/dist/cli/chunks/{chunk-5Q22XPTH.js → chunk-4V27J6YN.js} +2 -2
- package/dist/cli/chunks/{chunk-SX2YSHE7.js → chunk-4W4DYVSH.js} +1 -1
- package/dist/cli/chunks/chunk-55HRSNGN.js +2 -0
- package/dist/cli/chunks/{chunk-F62EKVVC.js → chunk-5D2I7JUP.js} +2 -2
- package/dist/cli/chunks/{chunk-XXAVQACL.js → chunk-5JWGCIQW.js} +1 -1
- package/dist/cli/chunks/chunk-5LAAZLUC.js +4 -0
- package/dist/cli/chunks/{chunk-EDU72RTW.js → chunk-5NS3USRW.js} +1 -1
- package/dist/cli/chunks/{chunk-BTYKGVJ5.js → chunk-6EPHNJTL.js} +1 -1
- package/dist/cli/chunks/{chunk-JVYPXW6Y.js → chunk-6OOYIO3W.js} +2 -2
- package/dist/cli/chunks/{chunk-PG64YV6C.js → chunk-6PXA2BQJ.js} +58 -58
- package/dist/cli/chunks/{chunk-IARSGAG7.js → chunk-6YL6JOQB.js} +2 -2
- package/dist/cli/chunks/{chunk-LDXQRNTT.js → chunk-72AMFDC7.js} +1 -1
- package/dist/cli/chunks/{chunk-Z3VJLWRR.js → chunk-763SUL4B.js} +2 -2
- package/dist/cli/chunks/{chunk-EL75G2A3.js → chunk-7DMA5NYL.js} +1 -1
- package/dist/cli/chunks/{chunk-J43DV3ME.js → chunk-7JKB3Q7O.js} +1 -1
- package/dist/cli/chunks/{chunk-ONVALAZN.js → chunk-7KII4CQG.js} +2 -2
- package/dist/cli/chunks/{chunk-AAA4SHEG.js → chunk-7QGYJ5OY.js} +1 -1
- package/dist/cli/chunks/{chunk-MMXG3LL6.js → chunk-7QTB5VJZ.js} +2 -2
- package/dist/cli/chunks/{chunk-BB7OLQKO.js → chunk-7X2Y727E.js} +1 -1
- package/dist/cli/chunks/{chunk-VNW5Q2CX.js → chunk-A4RU67VX.js} +2 -2
- package/dist/cli/chunks/{chunk-YFOBQSOW.js → chunk-A6YIH4C4.js} +2 -2
- package/dist/cli/chunks/{chunk-MJJC6HUK.js → chunk-ABFDB4X3.js} +1 -1
- package/dist/cli/chunks/{chunk-MHZPC4HJ.js → chunk-AJ4YDSOI.js} +2 -2
- package/dist/cli/chunks/{chunk-OA4GR3EZ.js → chunk-AOFO4N32.js} +2 -2
- package/dist/cli/chunks/{chunk-EB2PP6X2.js → chunk-AQTVVLNP.js} +1 -1
- package/dist/cli/chunks/chunk-AR2E4B7K.js +6 -0
- package/dist/cli/chunks/{chunk-N4PMPSJJ.js → chunk-AVB5QY2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-HLZATDD2.js → chunk-BHKXMIWX.js} +2 -2
- package/dist/cli/chunks/{chunk-C2MDBBFF.js → chunk-BXO536GT.js} +3 -3
- package/dist/cli/chunks/{chunk-WTLIEBDH.js → chunk-C6RTMTEH.js} +1 -1
- package/dist/cli/chunks/{chunk-MNZFEIE5.js → chunk-CTZJUV5I.js} +1 -1
- package/dist/cli/chunks/{chunk-XEWXYGJI.js → chunk-D6XVGFTI.js} +2 -2
- package/dist/cli/chunks/{chunk-Y4SAWE45.js → chunk-DDPPSSHW.js} +1 -1
- package/dist/cli/chunks/{chunk-KPOPBUUJ.js → chunk-DGTLJNJH.js} +2 -2
- package/dist/cli/chunks/{chunk-6JT73S5B.js → chunk-DINZR5CF.js} +1 -1
- package/dist/cli/chunks/{chunk-HTWIGQL4.js → chunk-EFBLP43U.js} +2 -2
- package/dist/cli/chunks/chunk-ETG7O5E5.js +5 -0
- package/dist/cli/chunks/{chunk-2AYBYXOA.js → chunk-F2SQPP6U.js} +2 -2
- package/dist/cli/chunks/{chunk-V2SAEMZY.js → chunk-F3PQZX44.js} +1 -1
- package/dist/cli/chunks/{chunk-JPHDMHFG.js → chunk-F4JYIRW2.js} +2 -2
- package/dist/cli/chunks/{chunk-REEIFA6A.js → chunk-FJ4VTLLK.js} +2 -2
- package/dist/cli/chunks/{chunk-PTK66HEY.js → chunk-FL3OYGCS.js} +2 -2
- package/dist/cli/chunks/{chunk-PEKDSJBC.js → chunk-FLASM2XB.js} +2 -2
- package/dist/cli/chunks/{chunk-G762PEFO.js → chunk-FV3NHVC7.js} +22 -22
- package/dist/cli/chunks/{chunk-FTTFJ7SJ.js → chunk-FV7VAG74.js} +1 -1
- package/dist/cli/chunks/{chunk-2YVJ5OUL.js → chunk-G3BKZNFL.js} +8 -8
- package/dist/cli/chunks/{chunk-MDC4G323.js → chunk-GBUIG3FS.js} +1 -1
- package/dist/cli/chunks/{chunk-DCJW2DPL.js → chunk-GCWSX2NY.js} +4 -4
- package/dist/cli/chunks/{chunk-VCA6YYII.js → chunk-GII5WVAK.js} +1 -1
- package/dist/cli/chunks/{chunk-HXBAQKMH.js → chunk-GKPQ2GRR.js} +2 -2
- package/dist/cli/chunks/chunk-GR3JYE5A.js +2 -0
- package/dist/cli/chunks/{chunk-ZUMDDMDE.js → chunk-H3KBIWTO.js} +2 -2
- package/dist/cli/chunks/{chunk-ECSLJJOQ.js → chunk-HAROIAJE.js} +1 -1
- package/dist/cli/chunks/{chunk-ICPALF4Q.js → chunk-HCYQHWI2.js} +2 -2
- package/dist/cli/chunks/{chunk-V5NGBQAQ.js → chunk-HGTWAZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3NOC2R.js → chunk-HTZJSQ3C.js} +2 -2
- package/dist/cli/chunks/{chunk-IYQ7XNE5.js → chunk-HWK5L7IJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HSDOOFV7.js → chunk-HZ5NC6U5.js} +1 -1
- package/dist/cli/chunks/{chunk-M63QB466.js → chunk-I6S35FRO.js} +2 -2
- package/dist/cli/chunks/{chunk-LMEU64TR.js → chunk-ICP2ORGI.js} +2 -2
- package/dist/cli/chunks/{chunk-PXZKPUW6.js → chunk-IFEIY3NQ.js} +2 -2
- package/dist/cli/chunks/{chunk-OJEZNLB6.js → chunk-J3DTDJDT.js} +2 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +2 -0
- package/dist/cli/chunks/{chunk-SQHLC6I5.js → chunk-J5KNRVXR.js} +1 -1
- package/dist/cli/chunks/{chunk-RORZ5O5Z.js → chunk-JAV5WPSY.js} +2 -2
- package/dist/cli/chunks/{chunk-SSP2B2WR.js → chunk-JEP4ULR6.js} +2 -2
- package/dist/cli/chunks/{chunk-6FEQ73BF.js → chunk-JK2ME6IT.js} +2 -2
- package/dist/cli/chunks/chunk-JNNZK7KH.js +2 -0
- package/dist/cli/chunks/{chunk-RXAFLK34.js → chunk-JP4P3P3D.js} +2 -2
- package/dist/cli/chunks/{chunk-JY4AIEZ7.js → chunk-JUVHZG7I.js} +1 -1
- package/dist/cli/chunks/{chunk-UBYCR3O4.js → chunk-JWGRWMZP.js} +2 -2
- package/dist/cli/chunks/{chunk-6BO3WCK7.js → chunk-K5DJXMAA.js} +2 -2
- package/dist/cli/chunks/{chunk-MKFQNCXI.js → chunk-KFUUIAR4.js} +2 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +180 -0
- package/dist/cli/chunks/{chunk-UY3REQOK.js → chunk-KIKWJM6J.js} +2 -2
- package/dist/cli/chunks/{chunk-YUC7RJGR.js → chunk-KIXYKUCI.js} +1 -1
- package/dist/cli/chunks/{chunk-IC2WSSD5.js → chunk-KLGYIEJK.js} +3 -3
- package/dist/cli/chunks/{chunk-DVPGBDBP.js → chunk-KR3M44CF.js} +3 -3
- package/dist/cli/chunks/chunk-KTSLTZSG.js +2 -0
- package/dist/cli/chunks/{chunk-Y6A46M3B.js → chunk-KVBEGOJE.js} +2 -2
- package/dist/cli/chunks/{chunk-PZG3542B.js → chunk-L42JPFCC.js} +2 -2
- package/dist/cli/chunks/{chunk-J26GADQE.js → chunk-LCJTEUDC.js} +181 -181
- package/dist/cli/chunks/{chunk-3JD2USUH.js → chunk-LEAKYZ37.js} +2 -2
- package/dist/cli/chunks/{chunk-UCLN6AME.js → chunk-LMU5DUDK.js} +1 -1
- package/dist/cli/chunks/{chunk-EV2BYY6T.js → chunk-MZS32SYS.js} +1 -1
- package/dist/cli/chunks/{chunk-LVEX4GID.js → chunk-N3KEY4XJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XNSQZ3O7.js → chunk-N3NP6PTT.js} +2 -2
- package/dist/cli/chunks/{chunk-QVG4ZDXX.js → chunk-N5PDFGCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6PKCQXEW.js → chunk-NDKLQW6N.js} +2 -2
- package/dist/cli/chunks/{chunk-6AYRAOCA.js → chunk-NHZIWIQZ.js} +2 -2
- package/dist/cli/chunks/{chunk-H4WHDFB5.js → chunk-NTAD5UX4.js} +2 -2
- package/dist/cli/chunks/{chunk-JYXOFN3E.js → chunk-O3JLOVZX.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLVQSEZK.js → chunk-OCESWNAZ.js} +3 -3
- package/dist/cli/chunks/{chunk-7EX4DEQR.js → chunk-OG2UI6A3.js} +2 -2
- package/dist/cli/chunks/{chunk-3RM46XFP.js → chunk-OXTFSIGN.js} +1 -1
- package/dist/cli/chunks/{chunk-44DPYNPE.js → chunk-OXZLKP6C.js} +1 -1
- package/dist/cli/chunks/{chunk-TU4LIIOP.js → chunk-P2CXVNKK.js} +2 -2
- package/dist/cli/chunks/{chunk-LDZWIV2O.js → chunk-P73W2K7T.js} +1 -1
- package/dist/cli/chunks/{chunk-56ZKQYZY.js → chunk-PBZI2ZPV.js} +3 -3
- package/dist/cli/chunks/{chunk-MNCF643K.js → chunk-PMCRCEW5.js} +2 -2
- package/dist/cli/chunks/{chunk-4G2VNW4C.js → chunk-PVIA2FPD.js} +2 -2
- package/dist/cli/chunks/{chunk-MRHM4COP.js → chunk-PX2B5TS2.js} +2 -2
- package/dist/cli/chunks/{chunk-HZFT3P5B.js → chunk-Q3JVJRVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-GY2SAIXP.js → chunk-QQ5SZH4D.js} +2 -2
- package/dist/cli/chunks/{chunk-LP4AS2E4.js → chunk-QTVWUQTB.js} +1 -1
- package/dist/cli/chunks/{chunk-W4X2VTIY.js → chunk-REUFWGMA.js} +2 -2
- package/dist/cli/chunks/{chunk-FVBFASOD.js → chunk-SNBYYO6F.js} +2 -2
- package/dist/cli/chunks/{chunk-RNYX4CPI.js → chunk-SVHUYVUR.js} +2 -2
- package/dist/cli/chunks/{chunk-AXO7OOOA.js → chunk-THAY7WHO.js} +2 -2
- package/dist/cli/chunks/{chunk-QWLTHFZW.js → chunk-TNMQVG4A.js} +2 -2
- package/dist/cli/chunks/{chunk-JFPXCQNP.js → chunk-TSYQDRNK.js} +1 -1
- package/dist/cli/chunks/{chunk-JK6B3ULP.js → chunk-TUYJ53V4.js} +2 -2
- package/dist/cli/chunks/{chunk-PUECC4WI.js → chunk-UNUTC6TX.js} +2 -2
- package/dist/cli/chunks/{chunk-ED32XJ5R.js → chunk-UOJBR4J3.js} +2 -2
- package/dist/cli/chunks/{chunk-CXTJ47QS.js → chunk-UOWHE77F.js} +2 -2
- package/dist/cli/chunks/{chunk-5KCBX225.js → chunk-UYLYMWV5.js} +2 -2
- package/dist/cli/chunks/{chunk-QNQSM2OG.js → chunk-V5PXQSFS.js} +2 -2
- package/dist/cli/chunks/{chunk-VKPKYMCT.js → chunk-VCMINU7K.js} +2 -2
- package/dist/cli/chunks/{chunk-QQT6QENQ.js → chunk-VQHVHVSF.js} +2 -2
- package/dist/cli/chunks/{chunk-634D2ENF.js → chunk-VRGCKBF7.js} +2 -2
- package/dist/cli/chunks/{chunk-T6W5APYP.js → chunk-VU2EL424.js} +1 -1
- package/dist/cli/chunks/{chunk-JY4WLN3K.js → chunk-VXZJOKOX.js} +2 -2
- package/dist/cli/chunks/{chunk-NZQPP533.js → chunk-VYLM2YV5.js} +3 -3
- package/dist/cli/chunks/{chunk-PQV7E7XH.js → chunk-W32YU3VI.js} +2 -2
- package/dist/cli/chunks/{chunk-RRPYWBFX.js → chunk-W5VJRDDG.js} +2 -2
- package/dist/cli/chunks/{chunk-7UCVYYWL.js → chunk-WGDR2KIR.js} +2 -2
- package/dist/cli/chunks/{chunk-2423JAA5.js → chunk-WRRCQ2UE.js} +1 -1
- package/dist/cli/chunks/{chunk-RCYLCA7E.js → chunk-XDBD4GXO.js} +2 -2
- package/dist/cli/chunks/{chunk-PYHYOKYT.js → chunk-XOLDMK23.js} +2 -2
- package/dist/cli/chunks/{chunk-5KS7HA37.js → chunk-XOVNZT7F.js} +1 -1
- package/dist/cli/chunks/{chunk-5PBRBS7D.js → chunk-XQ3DDY7X.js} +2 -2
- package/dist/cli/chunks/{chunk-4DIZ5BT6.js → chunk-XUIA5KMS.js} +2 -2
- package/dist/cli/chunks/{chunk-G7YTZTGU.js → chunk-XWIUFYM3.js} +1 -1
- package/dist/cli/chunks/{chunk-B7M323VL.js → chunk-XYCKHYBM.js} +2 -2
- package/dist/cli/chunks/{chunk-6OS7HREG.js → chunk-XZJ2O3VC.js} +1 -1
- package/dist/cli/chunks/{chunk-BTIBXGVQ.js → chunk-YRBBBUJX.js} +5 -5
- package/dist/cli/chunks/{chunk-MQ6OF6DU.js → chunk-YZGSJG34.js} +1 -1
- package/dist/cli/chunks/{chunk-XTJMY3KS.js → chunk-YZYDTABJ.js} +1 -1
- package/dist/cli/chunks/{chunk-LQOVA4YX.js → chunk-ZANDSVCK.js} +2 -2
- package/dist/cli/chunks/{chunk-2E3XWKEU.js → chunk-ZBDRLF43.js} +2 -2
- package/dist/cli/chunks/{chunk-UUHIEM2M.js → chunk-ZVSLCEVC.js} +3 -3
- package/dist/cli/chunks/{chunk-Q2T5FXEA.js → chunk-ZXBCCO2H.js} +2 -2
- package/dist/cli/chunks/{ci-5HEXJZ2C.js → ci-7SGRCFPS.js} +2 -2
- package/dist/cli/chunks/{ci-config-WU4NPDAM.js → ci-config-MX3URPZA.js} +2 -2
- package/dist/cli/chunks/{ci-output-BJQVXX5E.js → ci-output-M47NJY6D.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-3BMGTQCB.js → circuit-breaker-5GAK45SW.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-GVDGJWMU.js → claude-flow-setup-YXYSRH4Y.js} +2 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +2 -0
- package/dist/cli/chunks/{cline-installer-V4MRGWVA.js → cline-installer-DLJ5QD5N.js} +2 -2
- package/dist/cli/chunks/{code-A3TGQPEO.js → code-ONKLMVQ2.js} +25 -24
- package/dist/cli/chunks/{code-index-extractor-YJQSYWD3.js → code-index-extractor-2232LGZN.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7N7UQPAH.js → codex-installer-UOWLYCMH.js} +2 -2
- package/dist/cli/chunks/{completions-PPGVYLZS.js → completions-MHX7GCC7.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-XZTFLYV5.js → complexity-analyzer-43ZUJKZU.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-Z5I57RAH.js → continuedev-installer-6Q5JR4FF.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-F5YZ6BHB.js → copilot-installer-CZUMVHSI.js} +2 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +2 -0
- package/dist/cli/chunks/{cost-tracker-GO33ZQAP.js → cost-tracker-VS5ZW3XN.js} +2 -2
- package/dist/cli/chunks/{coverage-GSHKLY74.js → coverage-VWKTWZ6D.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +2 -0
- package/dist/cli/chunks/{cursor-installer-JJ7IVJZB.js → cursor-installer-YIFEMORH.js} +2 -2
- package/dist/cli/chunks/{daemon-IRL7QRNE.js → daemon-SHWJSJW5.js} +7 -7
- package/dist/cli/chunks/daemon-YIFT46FH.js +34 -0
- package/dist/cli/chunks/{dag-attention-scheduler-ORXSUHPA.js → dag-attention-scheduler-TCC2WM46.js} +2 -2
- package/dist/cli/chunks/{detect-RHU62KRI.js → detect-IGTWSQMA.js} +2 -2
- package/dist/cli/chunks/{dist-node-3VKV4Z6C.js → dist-node-TCOTJVQX.js} +2 -2
- package/dist/cli/chunks/{domain-handler-SFIML4FK.js → domain-handler-55ZVYODR.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-CJ4FA3OC.js → domain-plugins-GJRWOHQP.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-BCRKPCAA.js → domain-transfer-6EF75EKU.js} +2 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-VL3HFLPV.js → embed-and-insert-pattern-XAMNIKQL.js} +2 -2
- package/dist/cli/chunks/{eval-GGKRI4P5.js → eval-GO22R4OZ.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F72TIRQY.js → experience-capture-middleware-F2BRMJ3Y.js} +3 -3
- package/dist/cli/chunks/{fast-paths-7KOOF3MA.js → fast-paths-6RGPYALD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-FNHBTHBH.js → feature-flags-MIWQIOHU.js} +2 -2
- package/dist/cli/chunks/{feature-flags-IOZEWWFU.js → feature-flags-ZGS3KLPH.js} +2 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +2 -0
- package/dist/cli/chunks/fleet-ADL57COA.js +44 -0
- package/dist/cli/chunks/{gnn-wrapper-OH2DOQP7.js → gnn-wrapper-ALBJVW6T.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-W67NXTNE.js → heartbeat-handler-ZMM53NDY.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +2 -0
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-6MLLOGOE.js → hnsw-legacy-bridge-RYUJPA7B.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-4UDISJ3G.js → hnswlib-node-XM6XF3YV.js} +2 -2
- package/dist/cli/chunks/{hooks-NOQJWQ4P.js → hooks-X62O7TJO.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-2OD3APVP.js → hypergraph-engine-ZBWUPTVD.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-5AZGMBUM.js → hypergraph-handler-DUMF6SJV.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +2 -0
- package/dist/cli/chunks/{init-guard-SMGJ45PW.js → init-guard-S4I2R46S.js} +2 -2
- package/dist/cli/chunks/{init-handler-5T4MP2NM.js → init-handler-L4KJHVWS.js} +6 -6
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +2 -0
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-RLZYLVQJ.js → kilocode-installer-GNNB5FCZ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-LFZOC7VD.js → kiro-installer-HR6ZAH7T.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +2 -0
- package/dist/cli/chunks/{learning-XRPGLUWR.js → learning-4IEEOHJS.js} +3 -3
- package/dist/cli/chunks/{llm-router-OMK5HYPH.js → llm-router-ZFMORP36.js} +4 -4
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +2 -0
- package/dist/cli/chunks/{load-XADC7KCU.js → load-ZM43WGDO.js} +2 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +2 -0
- package/dist/cli/chunks/{mcp-PIBKSSVU.js → mcp-CRZKZE37.js} +2 -2
- package/dist/cli/chunks/{memory-AP7EZERS.js → memory-W5FZGVAD.js} +5 -5
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +2 -0
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-7JJ2FZ33.js → multi-model-executor-SXXGAQ2G.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-ZZZ6EBYJ.js → opencode-installer-PIRBUAB5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-2H2YKSGJ.js → orchestrator-H5SQCQTB.js} +11 -10
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-7MJJWC2Z.js → pattern-usage-recorder-XZTWDI2T.js} +2 -2
- package/dist/cli/chunks/{pipeline-LIE5BWQY.js → pipeline-5LMLBIJ7.js} +2 -2
- package/dist/cli/chunks/{platform-SMYUNLGX.js → platform-KJDABL5C.js} +2 -2
- package/dist/cli/chunks/{plugin-LJDIXQNT.js → plugin-V4KSBVVM.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-RIDNE5D2.js → prime-radiant-advanced-wasm-JDHTKQAT.js} +2 -2
- package/dist/cli/chunks/project-root-X72FSM2F.js +2 -0
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +2 -0
- package/dist/cli/chunks/{protocol-handler-YVM66DLI.js → protocol-handler-BNRONTQV.js} +2 -2
- package/dist/cli/chunks/{prove-ZBDT52GD.js → prove-ELLL6XMX.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +2 -0
- package/dist/cli/chunks/{quality-DUKXGDDO.js → quality-NH2QA4D4.js} +2 -2
- package/dist/cli/chunks/{quality-gate-SM3RXF4V.js → quality-gate-JTKLF7GW.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +2 -0
- package/dist/cli/chunks/{real-embeddings-4QLQZDB5.js → real-embeddings-J3KCKLPB.js} +2 -2
- package/dist/cli/chunks/{ref-validation-M3EO32YQ.js → ref-validation-HNXQRP4F.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-S6Q5OLV5.js → roocode-installer-COJ6CX6S.js} +2 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +2 -0
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +2 -0
- package/dist/cli/chunks/{routing-handler-55FMUACP.js → routing-handler-WM33ZILE.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QATKAAPK.js → ruvector-commands-BBLXEA7A.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-RFXFU6JD.js → rvf-migration-coordinator-P7H6HCAG.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-PKDVXQAW.js → rvf-store-integrity-R5SPVRFP.js} +2 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +2 -0
- package/dist/cli/chunks/schedule-RO55OQXG.js +2 -0
- package/dist/cli/chunks/scheduler-XXMJCH24.js +2 -0
- package/dist/cli/chunks/{security-CMRB6WA3.js → security-AUDTRX3I.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-YHLLNFHF.js → shared-rvf-adapter-PVDGBGI2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-4BGDVPQ7.js → shared-rvf-dual-writer-LZ2GMSS2.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +2 -0
- package/dist/cli/chunks/{standalone-memory-LUHKQAGM.js → standalone-memory-XNOAI4G4.js} +2 -2
- package/dist/cli/chunks/{status-handler-S6S5PNR7.js → status-handler-K72XZE4T.js} +2 -2
- package/dist/cli/chunks/{structural-health-PQ7NZAJ4.js → structural-health-NF3YY7U5.js} +2 -2
- package/dist/cli/chunks/{sync-S744AEJC.js → sync-UVXA6CT2.js} +2 -2
- package/dist/cli/chunks/{sync-Q6KRQXU6.js → sync-VBD5Y3E2.js} +2 -2
- package/dist/cli/chunks/{task-handler-GAMGEHUW.js → task-handler-24S3WFVJ.js} +13 -7
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +9 -0
- package/dist/cli/chunks/{test-FNH67DBK.js → test-XFSGQELD.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-NZA5SHK6.js → test-scheduling-VYUQ4CDE.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-CXKG55JD.js → token-bootstrap-EDK6FNQ3.js} +2 -2
- package/dist/cli/chunks/{token-usage-M7WWEDJX.js → token-usage-VLQ6WO2L.js} +2 -2
- package/dist/cli/chunks/{transformers-2IFMCK6A.js → transformers-TOFMWWNM.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-NMNA6RJC.js → tree-sitter-wasm-parser-MI3NZKUD.js} +2 -2
- package/dist/cli/chunks/{types-N7FWTOLD.js → types-JTWLBAZJ.js} +2 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +2 -0
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +2 -0
- package/dist/cli/chunks/{upgrade-KDB5RGL7.js → upgrade-4ABM72T4.js} +2 -2
- package/dist/cli/chunks/{validate-KMUV5FUA.js → validate-UDJCWKXI.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-ANZWRCJU.js → validate-swarm-TODOUWNN.js} +2 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-SXXC4NMS.js → web-tree-sitter-WBMAJPM5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-2LWSKMBU.js → windsurf-installer-BTT53TUL.js} +2 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +2 -0
- package/dist/cli/chunks/{witness-chain-JJMSJFZP.js → witness-chain-TATPXQRK.js} +2 -2
- package/dist/cli/chunks/{witness-chain-repair-OX7VFW6T.js → witness-chain-repair-2HGJGE7O.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-QLSMXHAZ.js → witness-chain-verifier-FRY3LMGH.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-3DS4L7LE.js → witness-key-manager-X7QHQQWL.js} +2 -2
- package/dist/cli/chunks/{workflow-ARWAMHD3.js → workflow-QMZPAWQW.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +2 -0
- package/dist/cli/chunks/{wrappers-J6KGTUSJ.js → wrappers-ZD5NBHYI.js} +2 -2
- package/dist/cli/commands/code.js +8 -0
- package/dist/cli/commands/daemon.js +8 -0
- package/dist/cli/commands/fleet.js +14 -9
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +14 -2
- package/dist/coordination/handlers/coverage-collection.js +9 -10
- package/dist/coordination/handlers/coverage-handlers.js +21 -3
- package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
- package/dist/coordination/handlers/coverage-runner.js +9 -2
- package/dist/coordination/handlers/coverage-target.d.ts +13 -3
- package/dist/coordination/handlers/coverage-target.js +224 -7
- package/dist/coordination/handlers/handler-types.d.ts +2 -0
- package/dist/coordination/handlers/test-execution-handlers.js +32 -5
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.js +1 -1
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +39 -0
- package/dist/coordination/protocols/learning-consolidation-archive.js +57 -0
- package/dist/coordination/protocols/learning-consolidation.d.ts +38 -3
- package/dist/coordination/protocols/learning-consolidation.js +130 -58
- package/dist/coordination/queen-coordinator.d.ts +12 -1
- package/dist/coordination/queen-coordinator.js +24 -1
- package/dist/coordination/queen-event-handlers.js +2 -1
- package/dist/coordination/queen-lifecycle.js +9 -0
- package/dist/coordination/queen-task-management.js +113 -40
- package/dist/coordination/queen-types.d.ts +10 -0
- package/dist/coordination/queen-types.js +8 -0
- package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
- package/dist/coordination/task-dag/dag-algorithms.js +162 -0
- package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
- package/dist/coordination/task-dag/dag-obligations.js +83 -0
- package/dist/coordination/task-dag/dag.d.ts +69 -19
- package/dist/coordination/task-dag/dag.js +215 -269
- package/dist/coordination/task-dag/index.d.ts +12 -4
- package/dist/coordination/task-dag/index.js +11 -3
- package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
- package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
- package/dist/coordination/task-dag/scheduler.d.ts +19 -9
- package/dist/coordination/task-dag/scheduler.js +36 -12
- package/dist/coordination/task-dag/types.d.ts +160 -1
- package/dist/coordination/task-dag/types.js +2 -1
- package/dist/coordination/task-executability.d.ts +18 -0
- package/dist/coordination/task-executability.js +31 -0
- package/dist/coordination/task-executor.d.ts +1 -0
- package/dist/coordination/task-executor.js +5 -0
- package/dist/domains/code-intelligence/coordinator.js +35 -9
- package/dist/domains/code-intelligence/index-path-guard.d.ts +49 -0
- package/dist/domains/code-intelligence/index-path-guard.js +125 -0
- package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
- package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
- package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
- package/dist/domains/contract-testing/coordinator.js +3 -1
- package/dist/domains/coverage-analysis/collected-metrics.js +2 -1
- package/dist/domains/defect-intelligence/services/defect-predictor.js +4 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +55 -0
- package/dist/domains/learning-optimization/active-patterns.js +80 -0
- package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
- package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator.js +50 -106
- package/dist/domains/learning-optimization/index.d.ts +1 -1
- package/dist/domains/learning-optimization/interfaces.d.ts +56 -4
- package/dist/domains/learning-optimization/plugin.js +11 -1
- package/dist/domains/learning-optimization/reward-source.d.ts +37 -0
- package/dist/domains/learning-optimization/reward-source.js +58 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +4 -4
- package/dist/domains/learning-optimization/services/learning-coordinator.js +68 -34
- package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
- package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
- package/dist/domains/test-execution/interfaces.d.ts +16 -0
- package/dist/domains/test-execution/services/retry-handler.js +18 -2
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +21 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +69 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +24 -2
- package/dist/init/fleet-integration.js +2 -0
- package/dist/init/init-wizard-steps.js +2 -0
- package/dist/init/phases/06-code-intelligence.js +2 -0
- package/dist/init/phases/10-workers.js +2 -1
- package/dist/kernel/anti-drift-middleware.d.ts +44 -5
- package/dist/kernel/anti-drift-middleware.js +147 -11
- package/dist/kernel/interfaces.d.ts +5 -0
- package/dist/learning/dream/dream-engine.d.ts +27 -1
- package/dist/learning/dream/dream-engine.js +56 -2
- package/dist/learning/dream/dream-insights-pruner.d.ts +18 -4
- package/dist/learning/dream/dream-insights-pruner.js +99 -11
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -0
- package/dist/learning/dream/rvcow-branch-manager.js +8 -0
- package/dist/learning/dream/speculative-dreamer.d.ts +8 -0
- package/dist/learning/dream/speculative-dreamer.js +8 -0
- package/dist/learning/skill-validation-learner.d.ts +2 -0
- package/dist/learning/skill-validation-learner.js +29 -21
- package/dist/mcp/background-workers.d.ts +15 -0
- package/dist/mcp/background-workers.js +77 -0
- package/dist/mcp/bundle.js +511 -484
- package/dist/mcp/entry.js +4 -49
- package/dist/mcp/handlers/domain-handler-configs.d.ts +14 -0
- package/dist/mcp/handlers/domain-handler-configs.js +68 -30
- package/dist/mcp/handlers/handler-factory.js +1 -0
- package/dist/mcp/handlers/task-handlers.js +37 -1
- package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
- package/dist/mcp/metrics/metrics-collector.js +13 -26
- package/dist/mcp/protocol-server.js +8 -3
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +34 -3
- package/dist/mcp/tools/learning-optimization/optimize.js +106 -70
- package/dist/memory/crdt/lww-register.js +11 -1
- package/dist/routing/calibration/ema-calibrator.js +3 -1
- package/dist/shared/base-domain-plugin.d.ts +4 -0
- package/dist/shared/base-domain-plugin.js +6 -0
- package/dist/shared/llm/cache.js +4 -1
- package/dist/shared/security/compliance-patterns.js +3 -1
- package/dist/shared/test-runner-process.d.ts +26 -0
- package/dist/shared/test-runner-process.js +91 -0
- package/dist/shared/types/index.d.ts +9 -0
- package/dist/shared/types/index.js +13 -0
- package/dist/shared/utils/namespaced-search.d.ts +42 -0
- package/dist/shared/utils/namespaced-search.js +53 -0
- package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
- package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
- package/dist/workers/daemon.d.ts +7 -0
- package/dist/workers/daemon.js +21 -2
- package/dist/workers/namespaced-keys.d.ts +4 -7
- package/dist/workers/namespaced-keys.js +4 -15
- package/dist/workers/quality-daemon/ci-monitor.js +9 -5
- package/dist/workers/worker-env.d.ts +53 -0
- package/dist/workers/worker-env.js +89 -0
- package/dist/workers/worker-manager.js +4 -0
- package/dist/workers/workers/learning-consolidation.d.ts +20 -0
- package/dist/workers/workers/learning-consolidation.js +57 -23
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-PEOUNYXJ.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +0 -2
- package/dist/cli/chunks/base-QZWK3D5P.js +0 -2
- package/dist/cli/chunks/browser-workflow-ITPX72RX.js +0 -2
- package/dist/cli/chunks/chunk-CG5DZCOZ.js +0 -2
- package/dist/cli/chunks/chunk-QJE6ZW2X.js +0 -6
- package/dist/cli/chunks/chunk-T3ZDVU6F.js +0 -5
- package/dist/cli/chunks/chunk-UIYKR2SA.js +0 -2
- package/dist/cli/chunks/chunk-VJRZFWR5.js +0 -2
- package/dist/cli/chunks/chunk-VUFRTGML.js +0 -3
- package/dist/cli/chunks/chunk-YDZJWDR6.js +0 -180
- package/dist/cli/chunks/client-S7GNYTZ5.js +0 -2
- package/dist/cli/chunks/core-handlers-CUEPOQIO.js +0 -2
- package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +0 -2
- package/dist/cli/chunks/daemon-3DQCKRYO.js +0 -10
- package/dist/cli/chunks/dream-5AUNJW24.js +0 -2
- package/dist/cli/chunks/file-discovery-AYWF357I.js +0 -2
- package/dist/cli/chunks/fleet-QX5KXTRC.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +0 -2
- package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +0 -2
- package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +0 -2
- package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +0 -2
- package/dist/cli/chunks/init-wizard-MK2325JJ.js +0 -2
- package/dist/cli/chunks/kernel-2NJQQ2KT.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SDISHO62.js +0 -2
- package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +0 -2
- package/dist/cli/chunks/load-test-RPKHLBCC.js +0 -2
- package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +0 -2
- package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +0 -2
- package/dist/cli/chunks/project-root-NBIQF63D.js +0 -2
- package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +0 -2
- package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +0 -2
- package/dist/cli/chunks/router-H5YSIRH2.js +0 -2
- package/dist/cli/chunks/routing-feedback-5R36TJDH.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +0 -2
- package/dist/cli/chunks/safe-db-MSTD2GDH.js +0 -2
- package/dist/cli/chunks/schedule-KST6KIFD.js +0 -2
- package/dist/cli/chunks/scheduler-FTQS6YK3.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +0 -2
- package/dist/cli/chunks/task-handlers-6CRDEELN.js +0 -9
- package/dist/cli/chunks/unified-memory-2Z2F446J.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +0 -2
- package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +0 -2
- package/dist/cli/chunks/visual-security-GXYZV7KR.js +0 -2
- package/dist/cli/chunks/witness-chain-52PEIEGK.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +0 -2
|
@@ -23,6 +23,11 @@ export interface LearnedPattern {
|
|
|
23
23
|
readonly template: PatternTemplate;
|
|
24
24
|
readonly createdAt: Date;
|
|
25
25
|
readonly lastUsedAt: Date;
|
|
26
|
+
/**
|
|
27
|
+
* #1109: 'assigned' when the pattern's rates were learned from assigned
|
|
28
|
+
* rewards. Untagged patterns are read by `patternRewardSourceOf`.
|
|
29
|
+
*/
|
|
30
|
+
readonly rewardSource?: 'measured' | 'assigned';
|
|
26
31
|
}
|
|
27
32
|
export type PatternType = 'test-pattern' | 'fix-pattern' | 'optimization-pattern' | 'detection-pattern' | 'workflow-pattern' | 'failure-pattern';
|
|
28
33
|
export interface PatternContext {
|
|
@@ -63,6 +68,13 @@ export interface Experience {
|
|
|
63
68
|
* when real matched-pattern data exists, never a placeholder.
|
|
64
69
|
*/
|
|
65
70
|
readonly appliedPatternIds?: readonly string[];
|
|
71
|
+
/**
|
|
72
|
+
* #1109: whether `result.success` and `reward` come from an observed
|
|
73
|
+
* outcome ('measured') or were assigned by the recorder before any outcome
|
|
74
|
+
* existed ('assigned'). Assigned experiences are kept but excluded from
|
|
75
|
+
* every reported rate. Untagged rows are read by `rewardSourceOf`.
|
|
76
|
+
*/
|
|
77
|
+
readonly rewardSource?: 'measured' | 'assigned';
|
|
66
78
|
}
|
|
67
79
|
export interface StateSnapshot {
|
|
68
80
|
readonly context: Record<string, unknown>;
|
|
@@ -110,9 +122,25 @@ export interface OptimizedStrategy {
|
|
|
110
122
|
readonly objective: OptimizationObjective;
|
|
111
123
|
readonly currentStrategy: Strategy;
|
|
112
124
|
readonly optimizedStrategy: Strategy;
|
|
125
|
+
/** Relative improvement; an estimate, see `evaluation.estimated` (#1099). */
|
|
113
126
|
readonly improvement: number;
|
|
127
|
+
/** Share of held-out experiences matching the fitted expectation. */
|
|
114
128
|
readonly confidence: number;
|
|
115
129
|
readonly validationResults: ValidationResult[];
|
|
130
|
+
readonly evaluation?: OptimizationEvaluation;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* How an optimization's figures were derived (#1099). The optimizer fits on
|
|
134
|
+
* the older experiences and validates on the most recent ones it never saw.
|
|
135
|
+
*/
|
|
136
|
+
export interface OptimizationEvaluation {
|
|
137
|
+
readonly method: 'held-out';
|
|
138
|
+
readonly trainingSamples: number;
|
|
139
|
+
readonly heldOutSamples: number;
|
|
140
|
+
/** Figures that were modelled, not observed: the optimized strategy never ran. */
|
|
141
|
+
readonly estimated: string[];
|
|
142
|
+
/** Figures that could not be computed from the experiences given. */
|
|
143
|
+
readonly unmeasured?: string[];
|
|
116
144
|
}
|
|
117
145
|
export interface OptimizationObjective {
|
|
118
146
|
readonly metric: string;
|
|
@@ -205,6 +233,8 @@ export interface PatternStats {
|
|
|
205
233
|
readonly avgConfidence: number;
|
|
206
234
|
readonly avgSuccessRate: number;
|
|
207
235
|
readonly topPatterns: LearnedPattern[];
|
|
236
|
+
/** #1109: patterns left out of every figure because they were learned from assigned rewards. */
|
|
237
|
+
readonly assignedPatternsExcluded?: number;
|
|
208
238
|
}
|
|
209
239
|
/**
|
|
210
240
|
* Experience Mining Service
|
|
@@ -233,9 +263,16 @@ export interface IExperienceMiningService {
|
|
|
233
263
|
clusterExperiences(experiences: Experience[]): Promise<Result<ExperienceCluster[]>>;
|
|
234
264
|
}
|
|
235
265
|
export interface MinedInsights {
|
|
266
|
+
/** Every experience recorded in the range, measured or assigned. */
|
|
236
267
|
readonly experienceCount: number;
|
|
237
|
-
|
|
238
|
-
readonly
|
|
268
|
+
/** #1109: experiences with a measured outcome; the rates below use only these. */
|
|
269
|
+
readonly measuredExperienceCount?: number;
|
|
270
|
+
/** #1109: experiences left out of the rates because their reward was assigned. */
|
|
271
|
+
readonly assignedRewardsExcluded?: number;
|
|
272
|
+
/** Set when no measured experience exists; the rates are then null. */
|
|
273
|
+
readonly evidenceStatus?: 'insufficient-evidence';
|
|
274
|
+
readonly successRate: number | null;
|
|
275
|
+
readonly avgReward: number | null;
|
|
239
276
|
readonly patterns: LearnedPattern[];
|
|
240
277
|
readonly anomalies: ExperienceAnomaly[];
|
|
241
278
|
readonly recommendations: string[];
|
|
@@ -245,7 +282,8 @@ export interface ExperienceCluster {
|
|
|
245
282
|
readonly centroid: StateSnapshot;
|
|
246
283
|
readonly experiences: Experience[];
|
|
247
284
|
readonly commonActions: string[];
|
|
248
|
-
|
|
285
|
+
/** Over members with a measured outcome; null when every member's reward was assigned. */
|
|
286
|
+
readonly avgReward: number | null;
|
|
249
287
|
}
|
|
250
288
|
export interface ExperienceAnomaly {
|
|
251
289
|
readonly experienceId: string;
|
|
@@ -283,9 +321,15 @@ export interface ABTestConfig {
|
|
|
283
321
|
}
|
|
284
322
|
export interface ABTestResult {
|
|
285
323
|
readonly winner: 'A' | 'B' | 'inconclusive';
|
|
324
|
+
/** Set when either strategy has fewer recorded samples than `minSamples`. */
|
|
325
|
+
readonly evidenceStatus?: 'insufficient-evidence';
|
|
326
|
+
readonly unmeasured?: string[];
|
|
286
327
|
readonly strategyAMetrics: Record<string, number>;
|
|
287
328
|
readonly strategyBMetrics: Record<string, number>;
|
|
288
|
-
|
|
329
|
+
/** Absent when there was not enough recorded evidence to test. */
|
|
330
|
+
readonly pValue?: number;
|
|
331
|
+
/** Why pValue is absent although both arms had enough samples. */
|
|
332
|
+
readonly pValueUnavailableReason?: 'zero-variance';
|
|
289
333
|
readonly sampleSizeA: number;
|
|
290
334
|
readonly sampleSizeB: number;
|
|
291
335
|
}
|
|
@@ -295,6 +339,9 @@ export interface StrategyEvaluation {
|
|
|
295
339
|
readonly strengths: string[];
|
|
296
340
|
readonly weaknesses: string[];
|
|
297
341
|
readonly improvementAreas: string[];
|
|
342
|
+
/** #1109: no measured experience was available, so no metric is reported. */
|
|
343
|
+
readonly evidenceStatus?: 'insufficient-evidence';
|
|
344
|
+
readonly assignedRewardsExcluded?: number;
|
|
298
345
|
}
|
|
299
346
|
/**
|
|
300
347
|
* Knowledge Synthesis Service
|
|
@@ -419,15 +466,20 @@ export interface Improvement {
|
|
|
419
466
|
readonly before: number;
|
|
420
467
|
readonly after: number;
|
|
421
468
|
readonly percentChange: number;
|
|
469
|
+
/** True when `after` and `percentChange` were modelled, not observed (#1099). */
|
|
470
|
+
readonly estimated?: boolean;
|
|
422
471
|
}
|
|
423
472
|
export interface OptimizationReport {
|
|
424
473
|
readonly domainsOptimized: number;
|
|
425
474
|
readonly totalStrategies: number;
|
|
475
|
+
/** Mean of the optimizers' estimated improvements (#1099). */
|
|
426
476
|
readonly avgImprovement: number;
|
|
477
|
+
readonly improvementEstimated?: boolean;
|
|
427
478
|
readonly byDomain: Record<DomainName, DomainOptimizationResult>;
|
|
428
479
|
}
|
|
429
480
|
export interface DomainOptimizationResult {
|
|
430
481
|
readonly strategiesOptimized: number;
|
|
482
|
+
/** Estimated, see OptimizedStrategy.evaluation (#1099). */
|
|
431
483
|
readonly avgImprovement: number;
|
|
432
484
|
readonly bestStrategy: Strategy;
|
|
433
485
|
}
|
|
@@ -397,6 +397,8 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
397
397
|
duration: 0,
|
|
398
398
|
},
|
|
399
399
|
reward: 0.8,
|
|
400
|
+
// #1109: generation is recorded before any run, so no outcome exists yet.
|
|
401
|
+
rewardSource: 'assigned',
|
|
400
402
|
// ADR-110: real matched-pattern IDs from test-generation/coordinator.ts's
|
|
401
403
|
// GeneratedTests.patternsUsed. This event always represents a successful
|
|
402
404
|
// generation, so nulls won't fire from here in practice — threaded for
|
|
@@ -435,6 +437,7 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
435
437
|
duration: payload.duration,
|
|
436
438
|
},
|
|
437
439
|
reward: successRate,
|
|
440
|
+
rewardSource: 'measured',
|
|
438
441
|
});
|
|
439
442
|
// Record production metric
|
|
440
443
|
await this.productionIntel.recordMetric('test_success_rate', successRate, 'ratio', 'test-execution', ['automated']);
|
|
@@ -462,6 +465,8 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
462
465
|
duration: 0,
|
|
463
466
|
},
|
|
464
467
|
reward: 1 - payload.riskScore,
|
|
468
|
+
// #1109: finding a gap is not an observed success of the detection.
|
|
469
|
+
rewardSource: 'assigned',
|
|
465
470
|
});
|
|
466
471
|
}
|
|
467
472
|
async handleQualityGate(event) {
|
|
@@ -484,6 +489,7 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
484
489
|
duration: 0,
|
|
485
490
|
},
|
|
486
491
|
reward: payload.passed ? 1 : 0,
|
|
492
|
+
rewardSource: 'measured',
|
|
487
493
|
});
|
|
488
494
|
}
|
|
489
495
|
async handleDefectPredicted(event) {
|
|
@@ -505,7 +511,9 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
505
511
|
outcome: { probability: payload.probability },
|
|
506
512
|
duration: 0,
|
|
507
513
|
},
|
|
508
|
-
reward: 0.7,
|
|
514
|
+
reward: 0.7,
|
|
515
|
+
// #1109: the prediction has not been confirmed or refuted yet.
|
|
516
|
+
rewardSource: 'assigned',
|
|
509
517
|
});
|
|
510
518
|
}
|
|
511
519
|
async handleImpactAnalysis(event) {
|
|
@@ -534,6 +542,8 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
534
542
|
duration: 0,
|
|
535
543
|
},
|
|
536
544
|
reward: 0.8,
|
|
545
|
+
// #1109: the analysis has no observed outcome to score.
|
|
546
|
+
rewardSource: 'assigned',
|
|
537
547
|
});
|
|
538
548
|
}
|
|
539
549
|
// ============================================================================
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Experience reward provenance (#1109)
|
|
3
|
+
*
|
|
4
|
+
* Some event handlers record an experience before any outcome has been
|
|
5
|
+
* observed: a generated test, a defect prediction, an impact analysis or a
|
|
6
|
+
* detected coverage gap is stored with a fixed `success: true` and a reward
|
|
7
|
+
* the handler chose. Those experiences are kept, but they are tagged
|
|
8
|
+
* `rewardSource: 'assigned'` and excluded from every reported success rate,
|
|
9
|
+
* confidence, ranking, milestone, average reward and anomaly baseline.
|
|
10
|
+
*
|
|
11
|
+
* Reading rule for rows written before the tag existed:
|
|
12
|
+
* - `rewardSource` present: it is authoritative.
|
|
13
|
+
* - absent, and the row was written by one of the event handlers that always
|
|
14
|
+
* assigned its reward (matched on agent + action below): `assigned`.
|
|
15
|
+
* - absent otherwise: `measured`. Every other writer derived success and
|
|
16
|
+
* reward from an observed outcome (test-run pass rate, quality-gate verdict,
|
|
17
|
+
* captured task quality).
|
|
18
|
+
*
|
|
19
|
+
* Patterns learned before the tag existed are read the same way: a pattern
|
|
20
|
+
* whose template lists only actions from those handlers, in the handler's own
|
|
21
|
+
* domain, was mined from assigned rewards (its 100% rate came from them).
|
|
22
|
+
*/
|
|
23
|
+
import type { Experience, LearnedPattern } from './interfaces.js';
|
|
24
|
+
export type RewardSource = 'measured' | 'assigned';
|
|
25
|
+
type ProvenanceFields = Pick<Experience, 'agentId' | 'action' | 'rewardSource'>;
|
|
26
|
+
export declare function rewardSourceOf(experience: ProvenanceFields): RewardSource;
|
|
27
|
+
export declare function isMeasuredExperience(experience: ProvenanceFields): boolean;
|
|
28
|
+
/** Split experiences into those with a measured outcome and a count of the rest. */
|
|
29
|
+
export declare function partitionByRewardSource<T extends ProvenanceFields>(experiences: readonly T[]): {
|
|
30
|
+
measured: T[];
|
|
31
|
+
assignedExcluded: number;
|
|
32
|
+
};
|
|
33
|
+
type PatternProvenanceFields = Pick<LearnedPattern, 'domain' | 'template' | 'rewardSource'>;
|
|
34
|
+
export declare function patternRewardSourceOf(pattern: PatternProvenanceFields): RewardSource;
|
|
35
|
+
export declare function isMeasuredPattern(pattern: PatternProvenanceFields): boolean;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=reward-source.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Experience reward provenance (#1109)
|
|
3
|
+
*
|
|
4
|
+
* Some event handlers record an experience before any outcome has been
|
|
5
|
+
* observed: a generated test, a defect prediction, an impact analysis or a
|
|
6
|
+
* detected coverage gap is stored with a fixed `success: true` and a reward
|
|
7
|
+
* the handler chose. Those experiences are kept, but they are tagged
|
|
8
|
+
* `rewardSource: 'assigned'` and excluded from every reported success rate,
|
|
9
|
+
* confidence, ranking, milestone, average reward and anomaly baseline.
|
|
10
|
+
*
|
|
11
|
+
* Reading rule for rows written before the tag existed:
|
|
12
|
+
* - `rewardSource` present: it is authoritative.
|
|
13
|
+
* - absent, and the row was written by one of the event handlers that always
|
|
14
|
+
* assigned its reward (matched on agent + action below): `assigned`.
|
|
15
|
+
* - absent otherwise: `measured`. Every other writer derived success and
|
|
16
|
+
* reward from an observed outcome (test-run pass rate, quality-gate verdict,
|
|
17
|
+
* captured task quality).
|
|
18
|
+
*
|
|
19
|
+
* Patterns learned before the tag existed are read the same way: a pattern
|
|
20
|
+
* whose template lists only actions from those handlers, in the handler's own
|
|
21
|
+
* domain, was mined from assigned rewards (its 100% rate came from them).
|
|
22
|
+
*/
|
|
23
|
+
/** `agentId.value:action` pairs whose untagged rows carry an assigned reward. */
|
|
24
|
+
const LEGACY_ASSIGNED = new Set([
|
|
25
|
+
'test-generation:test-generated',
|
|
26
|
+
'coverage-analysis:gap-detection',
|
|
27
|
+
'defect-intelligence:defect-prediction',
|
|
28
|
+
'code-intelligence:impact-analysis',
|
|
29
|
+
]);
|
|
30
|
+
export function rewardSourceOf(experience) {
|
|
31
|
+
if (experience.rewardSource)
|
|
32
|
+
return experience.rewardSource;
|
|
33
|
+
return LEGACY_ASSIGNED.has(`${experience.agentId?.value}:${experience.action}`)
|
|
34
|
+
? 'assigned'
|
|
35
|
+
: 'measured';
|
|
36
|
+
}
|
|
37
|
+
export function isMeasuredExperience(experience) {
|
|
38
|
+
return rewardSourceOf(experience) === 'measured';
|
|
39
|
+
}
|
|
40
|
+
/** Split experiences into those with a measured outcome and a count of the rest. */
|
|
41
|
+
export function partitionByRewardSource(experiences) {
|
|
42
|
+
const measured = experiences.filter(isMeasuredExperience);
|
|
43
|
+
return { measured, assignedExcluded: experiences.length - measured.length };
|
|
44
|
+
}
|
|
45
|
+
const COMMON_ACTIONS_LINE = /^\/\/ Common actions: (.*)$/m;
|
|
46
|
+
export function patternRewardSourceOf(pattern) {
|
|
47
|
+
if (pattern.rewardSource)
|
|
48
|
+
return pattern.rewardSource;
|
|
49
|
+
const line = COMMON_ACTIONS_LINE.exec(pattern.template?.content ?? '');
|
|
50
|
+
const actions = line ? line[1].split(',').map((a) => a.trim()).filter(Boolean) : [];
|
|
51
|
+
const allAssigned = actions.length > 0
|
|
52
|
+
&& actions.every((action) => LEGACY_ASSIGNED.has(`${pattern.domain}:${action}`));
|
|
53
|
+
return allAssigned ? 'assigned' : 'measured';
|
|
54
|
+
}
|
|
55
|
+
export function isMeasuredPattern(pattern) {
|
|
56
|
+
return patternRewardSourceOf(pattern) === 'measured';
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=reward-source.js.map
|
|
@@ -120,7 +120,7 @@ export declare class LearningCoordinatorService implements IPatternLearningServi
|
|
|
120
120
|
/**
|
|
121
121
|
* Learn a pattern from a set of experiences
|
|
122
122
|
*/
|
|
123
|
-
learnPattern(
|
|
123
|
+
learnPattern(input: Experience[]): Promise<Result<LearnedPattern>>;
|
|
124
124
|
/**
|
|
125
125
|
* Find patterns matching the given context
|
|
126
126
|
*/
|
|
@@ -153,9 +153,9 @@ export declare class LearningCoordinatorService implements IPatternLearningServi
|
|
|
153
153
|
*/
|
|
154
154
|
private getNullStore;
|
|
155
155
|
private recordPatternNulls;
|
|
156
|
-
/**
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
/** Read recorded input without the pattern-mining side effects. */
|
|
157
|
+
getExperiences(domain: DomainName, timeRange: TimeRange): Promise<Result<Experience[]>>;
|
|
158
|
+
/** Mine experiences for insights. */
|
|
159
159
|
mineExperiences(domain: DomainName, timeRange: TimeRange): Promise<Result<MinedInsights>>;
|
|
160
160
|
/**
|
|
161
161
|
* Calculate reward for an experience result
|
|
@@ -7,6 +7,8 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
7
7
|
import { ok, err } from '../../../shared/types/index.js';
|
|
8
8
|
import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
|
+
import { readActivePatterns } from '../active-patterns.js';
|
|
11
|
+
import { isMeasuredPattern, partitionByRewardSource } from '../reward-source.js';
|
|
10
12
|
import { createQEFlashAttention, } from '../../../integrations/ruvector/wrappers.js';
|
|
11
13
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
14
|
import { createSafeRecord } from '../../../shared/utils/safe-record.js';
|
|
@@ -33,6 +35,13 @@ const logger = LoggerFactory.create('learning-optimization/learning-coordinator'
|
|
|
33
35
|
* domain even on installs with hundreds of indexed experiences.
|
|
34
36
|
*/
|
|
35
37
|
const LEARNING_NS = { namespace: 'learning-optimization' };
|
|
38
|
+
/**
|
|
39
|
+
* #1055: active patterns only. `learning:pattern:*` also holds creation
|
|
40
|
+
* provenance and archived patterns written by this service.
|
|
41
|
+
*/
|
|
42
|
+
function readActiveLearnedPatterns(memory) {
|
|
43
|
+
return readActivePatterns(memory, { retrieve: LEARNING_NS });
|
|
44
|
+
}
|
|
36
45
|
export class LearningCoordinatorService {
|
|
37
46
|
config;
|
|
38
47
|
memory;
|
|
@@ -205,10 +214,15 @@ Provide:
|
|
|
205
214
|
/**
|
|
206
215
|
* Learn a pattern from a set of experiences
|
|
207
216
|
*/
|
|
208
|
-
async learnPattern(
|
|
217
|
+
async learnPattern(input) {
|
|
209
218
|
try {
|
|
219
|
+
// #1109: an assigned reward is not evidence that the action succeeded.
|
|
220
|
+
const { measured: experiences, assignedExcluded } = partitionByRewardSource(input);
|
|
210
221
|
if (experiences.length < this.config.minExperiencesForPattern) {
|
|
211
|
-
|
|
222
|
+
const excluded = assignedExcluded > 0
|
|
223
|
+
? ` (${assignedExcluded} with an assigned reward excluded)`
|
|
224
|
+
: '';
|
|
225
|
+
return err(new Error(`Need at least ${this.config.minExperiencesForPattern} measured experiences to learn a pattern${excluded}`));
|
|
212
226
|
}
|
|
213
227
|
// Analyze experiences to extract common patterns
|
|
214
228
|
const commonActions = this.extractCommonActions(experiences);
|
|
@@ -235,6 +249,7 @@ Provide:
|
|
|
235
249
|
template,
|
|
236
250
|
createdAt: new Date(),
|
|
237
251
|
lastUsedAt: new Date(),
|
|
252
|
+
rewardSource: 'measured',
|
|
238
253
|
};
|
|
239
254
|
// Store pattern in memory
|
|
240
255
|
await this.storePattern(pattern);
|
|
@@ -251,14 +266,8 @@ Provide:
|
|
|
251
266
|
*/
|
|
252
267
|
async findMatchingPatterns(context, limit = 10) {
|
|
253
268
|
try {
|
|
254
|
-
|
|
255
|
-
const
|
|
256
|
-
for (const key of keys) {
|
|
257
|
-
const pattern = await this.memory.get(key, LEARNING_NS);
|
|
258
|
-
if (pattern && this.matchesContext(pattern, context)) {
|
|
259
|
-
patterns.push(pattern);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
269
|
+
// #1109: a pattern learned from assigned rewards has no observed rate to rank by.
|
|
270
|
+
const patterns = (await readActiveLearnedPatterns(this.memory)).filter((pattern) => isMeasuredPattern(pattern) && this.matchesContext(pattern, context));
|
|
262
271
|
// Sort by confidence and usage
|
|
263
272
|
patterns.sort((a, b) => {
|
|
264
273
|
const scoreA = a.confidence * 0.6 + (a.successRate * 0.4);
|
|
@@ -366,6 +375,7 @@ Provide:
|
|
|
366
375
|
template: bestPattern.template,
|
|
367
376
|
createdAt: new Date(),
|
|
368
377
|
lastUsedAt: new Date(),
|
|
378
|
+
rewardSource: patterns.every(isMeasuredPattern) ? 'measured' : 'assigned',
|
|
369
379
|
};
|
|
370
380
|
// Store consolidated pattern
|
|
371
381
|
await this.storePattern(consolidatedPattern);
|
|
@@ -384,14 +394,10 @@ Provide:
|
|
|
384
394
|
*/
|
|
385
395
|
async getPatternStats(domain) {
|
|
386
396
|
try {
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
if (pattern && (!domain || pattern.domain === domain)) {
|
|
392
|
-
patterns.push(pattern);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
397
|
+
const inDomain = (await readActiveLearnedPatterns(this.memory)).filter((pattern) => !domain || pattern.domain === domain);
|
|
398
|
+
// #1109: every figure below describes patterns with measured rates only.
|
|
399
|
+
const patterns = inDomain.filter(isMeasuredPattern);
|
|
400
|
+
const assignedPatternsExcluded = inDomain.length - patterns.length;
|
|
395
401
|
const byType = {
|
|
396
402
|
'test-pattern': 0,
|
|
397
403
|
'fix-pattern': 0,
|
|
@@ -434,6 +440,7 @@ Provide:
|
|
|
434
440
|
avgConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
|
|
435
441
|
avgSuccessRate: patterns.length > 0 ? totalSuccessRate / patterns.length : 0,
|
|
436
442
|
topPatterns,
|
|
443
|
+
...(assignedPatternsExcluded > 0 ? { assignedPatternsExcluded } : {}),
|
|
437
444
|
});
|
|
438
445
|
}
|
|
439
446
|
catch (error) {
|
|
@@ -521,20 +528,39 @@ Provide:
|
|
|
521
528
|
}
|
|
522
529
|
}
|
|
523
530
|
}
|
|
524
|
-
/**
|
|
525
|
-
|
|
526
|
-
|
|
531
|
+
/** Read recorded input without the pattern-mining side effects. */
|
|
532
|
+
async getExperiences(domain, timeRange) {
|
|
533
|
+
try {
|
|
534
|
+
return ok(await this.getExperiencesByDomainAndTime(domain, timeRange));
|
|
535
|
+
}
|
|
536
|
+
catch (error) {
|
|
537
|
+
return err(toError(error));
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
/** Mine experiences for insights. */
|
|
527
541
|
async mineExperiences(domain, timeRange) {
|
|
528
542
|
try {
|
|
529
|
-
const
|
|
543
|
+
const recorded = await this.getExperiencesByDomainAndTime(domain, timeRange);
|
|
544
|
+
// #1109: rates, rewards, patterns and anomalies use measured outcomes only.
|
|
545
|
+
const { measured: experiences, assignedExcluded } = partitionByRewardSource(recorded);
|
|
546
|
+
const counts = {
|
|
547
|
+
experienceCount: recorded.length,
|
|
548
|
+
measuredExperienceCount: experiences.length,
|
|
549
|
+
assignedRewardsExcluded: assignedExcluded,
|
|
550
|
+
};
|
|
530
551
|
if (experiences.length === 0) {
|
|
531
552
|
return ok({
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
553
|
+
...counts,
|
|
554
|
+
evidenceStatus: 'insufficient-evidence',
|
|
555
|
+
successRate: null,
|
|
556
|
+
avgReward: null,
|
|
535
557
|
patterns: [],
|
|
536
558
|
anomalies: [],
|
|
537
|
-
recommendations: [
|
|
559
|
+
recommendations: [
|
|
560
|
+
recorded.length === 0
|
|
561
|
+
? 'No experiences found in the given time range'
|
|
562
|
+
: `No measured outcomes in the given time range; ${assignedExcluded} experience(s) with an assigned reward were not scored`,
|
|
563
|
+
],
|
|
538
564
|
});
|
|
539
565
|
}
|
|
540
566
|
const successRate = this.calculateSuccessRate(experiences);
|
|
@@ -543,7 +569,7 @@ Provide:
|
|
|
543
569
|
const anomalies = this.detectAnomalies(experiences);
|
|
544
570
|
const recommendations = this.generateRecommendations(experiences, successRate, anomalies);
|
|
545
571
|
return ok({
|
|
546
|
-
|
|
572
|
+
...counts,
|
|
547
573
|
successRate,
|
|
548
574
|
avgReward,
|
|
549
575
|
patterns,
|
|
@@ -589,7 +615,10 @@ Provide:
|
|
|
589
615
|
try {
|
|
590
616
|
const keys = await this.memory.search(`learning:experience:index:agent:${agentId.value}:*`, limit, LEARNING_NS);
|
|
591
617
|
const experiences = [];
|
|
592
|
-
for (const
|
|
618
|
+
for (const found of keys) {
|
|
619
|
+
// In-memory search includes its namespace; SQLite returns a bare key.
|
|
620
|
+
const prefix = 'learning-optimization:';
|
|
621
|
+
const key = found.startsWith(prefix) ? found.slice(prefix.length) : found;
|
|
593
622
|
const experienceId = await this.memory.get(key, LEARNING_NS);
|
|
594
623
|
if (experienceId) {
|
|
595
624
|
// #493: rehydrate `timestamp` at the kv-read seam — the sort
|
|
@@ -640,7 +669,8 @@ Provide:
|
|
|
640
669
|
if (clusterExperiences.length >= 2) {
|
|
641
670
|
const centroid = this.calculateCentroid(clusterExperiences);
|
|
642
671
|
const commonActions = this.extractCommonActions(clusterExperiences);
|
|
643
|
-
const
|
|
672
|
+
const { measured } = partitionByRewardSource(clusterExperiences);
|
|
673
|
+
const avgReward = measured.length > 0 ? this.calculateAverageReward(measured) : null;
|
|
644
674
|
result.push({
|
|
645
675
|
id: `cluster-${clusterId++}`,
|
|
646
676
|
centroid,
|
|
@@ -707,7 +737,10 @@ Provide:
|
|
|
707
737
|
async getExperiencesByDomainAndTime(domain, timeRange) {
|
|
708
738
|
const keys = await this.memory.search(`learning:experience:index:domain:${domain}:*`, 1000, LEARNING_NS);
|
|
709
739
|
const experiences = [];
|
|
710
|
-
for (const
|
|
740
|
+
for (const found of keys) {
|
|
741
|
+
// In-memory search includes its namespace; SQLite returns a bare key.
|
|
742
|
+
const prefix = 'learning-optimization:';
|
|
743
|
+
const key = found.startsWith(prefix) ? found.slice(prefix.length) : found;
|
|
711
744
|
const experienceId = await this.memory.get(key, LEARNING_NS);
|
|
712
745
|
if (experienceId) {
|
|
713
746
|
const experience = await this.memory.get(`learning:experience:${experienceId}`, LEARNING_NS);
|
|
@@ -731,10 +764,10 @@ Provide:
|
|
|
731
764
|
return experiences;
|
|
732
765
|
}
|
|
733
766
|
async extractPatternsFromExperiences(experiences) {
|
|
734
|
-
// Group
|
|
735
|
-
|
|
767
|
+
// Group by action type. Failures stay in their group so a pattern's
|
|
768
|
+
// success rate is the observed rate, not 100% by selection (#1109).
|
|
736
769
|
const actionGroups = new Map();
|
|
737
|
-
for (const exp of
|
|
770
|
+
for (const exp of experiences) {
|
|
738
771
|
const existing = actionGroups.get(exp.action) || [];
|
|
739
772
|
existing.push(exp);
|
|
740
773
|
actionGroups.set(exp.action, existing);
|
|
@@ -761,7 +794,8 @@ Provide:
|
|
|
761
794
|
return false;
|
|
762
795
|
}
|
|
763
796
|
if (context.tags.length > 0) {
|
|
764
|
-
const
|
|
797
|
+
const patternTags = Array.isArray(pattern.context.tags) ? pattern.context.tags : [];
|
|
798
|
+
const hasMatchingTag = context.tags.some((tag) => patternTags.includes(tag));
|
|
765
799
|
if (!hasMatchingTag) {
|
|
766
800
|
return false;
|
|
767
801
|
}
|
|
@@ -35,7 +35,7 @@ export declare class MetricsOptimizerService implements IStrategyOptimizerServic
|
|
|
35
35
|
/**
|
|
36
36
|
* Optimize a strategy for a given objective
|
|
37
37
|
*/
|
|
38
|
-
optimizeStrategy(currentStrategy: Strategy, objective: OptimizationObjective,
|
|
38
|
+
optimizeStrategy(currentStrategy: Strategy, objective: OptimizationObjective, input: Experience[]): Promise<Result<OptimizedStrategy>>;
|
|
39
39
|
/**
|
|
40
40
|
* Run A/B test between two strategies
|
|
41
41
|
*/
|
|
@@ -47,7 +47,7 @@ export declare class MetricsOptimizerService implements IStrategyOptimizerServic
|
|
|
47
47
|
/**
|
|
48
48
|
* Evaluate strategy performance
|
|
49
49
|
*/
|
|
50
|
-
evaluateStrategy(strategy: Strategy,
|
|
50
|
+
evaluateStrategy(strategy: Strategy, input: Experience[]): Promise<Result<StrategyEvaluation>>;
|
|
51
51
|
/**
|
|
52
52
|
* Track metrics for a strategy
|
|
53
53
|
*/
|
|
@@ -60,18 +60,28 @@ export declare class MetricsOptimizerService implements IStrategyOptimizerServic
|
|
|
60
60
|
* Calculate optimal parameters using grid search
|
|
61
61
|
*/
|
|
62
62
|
gridSearchOptimize(parameterRanges: Record<string, number[]>, objective: OptimizationObjective, experiences: Experience[]): Promise<Result<Record<string, unknown>>>;
|
|
63
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Keys matching `pattern` under LEARNING_NS, ready for a namespaced get().
|
|
65
|
+
* In-memory search includes its namespace; SQLite returns a bare key.
|
|
66
|
+
*/
|
|
67
|
+
private searchLearningKeys;
|
|
64
68
|
private optimizeParameters;
|
|
65
69
|
private scoreParameters;
|
|
66
70
|
private calculateParamSimilarity;
|
|
67
71
|
private predictOutcome;
|
|
68
72
|
private validateOptimization;
|
|
73
|
+
/** Relative change; undefined when there is no baseline to compare with. */
|
|
69
74
|
private calculateImprovement;
|
|
70
|
-
private calculateOptimizationConfidence;
|
|
71
75
|
private inferDomainFromExperiences;
|
|
76
|
+
/**
|
|
77
|
+
* Values of `metric` recorded for this strategy through trackMetrics(),
|
|
78
|
+
* whose strategy id is the strategy name. Only recorded observations are
|
|
79
|
+
* returned; the caller decides whether there are enough (#1099).
|
|
80
|
+
*/
|
|
72
81
|
private collectStrategyMetrics;
|
|
73
82
|
private calculateMean;
|
|
74
83
|
private calculateStdDev;
|
|
84
|
+
/** Undefined when neither group varies: the test statistic is undefined. */
|
|
75
85
|
private calculatePValue;
|
|
76
86
|
private normalCDF;
|
|
77
87
|
private scoreContextMatch;
|