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
|
@@ -17,6 +17,7 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
|
|
|
17
17
|
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
18
18
|
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
19
19
|
import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
|
|
20
|
+
import { mergeTestCases, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
20
21
|
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
21
22
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
22
23
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
@@ -76,6 +77,7 @@ export class TestExecutorService {
|
|
|
76
77
|
skipped: results.skipped,
|
|
77
78
|
duration,
|
|
78
79
|
failedTests: results.failedTests,
|
|
80
|
+
...(results.testCases ? { testCases: results.testCases } : {}),
|
|
79
81
|
coverage: results.coverage,
|
|
80
82
|
fileCoverages: results.fileCoverages,
|
|
81
83
|
};
|
|
@@ -131,6 +133,7 @@ export class TestExecutorService {
|
|
|
131
133
|
skipped: aggregated.skipped,
|
|
132
134
|
duration,
|
|
133
135
|
failedTests: aggregated.failedTests,
|
|
136
|
+
...(aggregated.testCases ? { testCases: aggregated.testCases } : {}),
|
|
134
137
|
coverage: aggregated.coverage,
|
|
135
138
|
fileCoverages: aggregated.fileCoverages,
|
|
136
139
|
};
|
|
@@ -331,12 +334,14 @@ Provide:
|
|
|
331
334
|
? this.mergeSequentialCoverage(executionResults)
|
|
332
335
|
: undefined;
|
|
333
336
|
const separateRuns = testFiles.length > 1 && !this.config.simulateForTesting;
|
|
337
|
+
const testCases = mergeTestCases(executionResults);
|
|
334
338
|
return {
|
|
335
339
|
total: passed + failed + skipped,
|
|
336
340
|
passed,
|
|
337
341
|
failed,
|
|
338
342
|
skipped,
|
|
339
343
|
failedTests,
|
|
344
|
+
...(testCases ? { testCases } : {}),
|
|
340
345
|
coverage: separateRuns ? merged?.summary : this.aggregateCoverage(coverages),
|
|
341
346
|
fileCoverages: separateRuns ? merged?.perFile
|
|
342
347
|
: allFileCoverages.length > 0 ? allFileCoverages : undefined,
|
|
@@ -502,7 +507,7 @@ Provide:
|
|
|
502
507
|
return;
|
|
503
508
|
}
|
|
504
509
|
if (reportText === undefined) {
|
|
505
|
-
finish(err(new
|
|
510
|
+
finish(err(new TestRunnerExecutionError(`The current Vitest JSON report is missing for ${fileLabel}.`)));
|
|
506
511
|
return;
|
|
507
512
|
}
|
|
508
513
|
const parseResult = this.parseTestOutput(reportText, stderr, fileLabel, framework, code);
|
|
@@ -702,12 +707,14 @@ Provide:
|
|
|
702
707
|
if (executionError)
|
|
703
708
|
return err(executionError);
|
|
704
709
|
const covData = this.extractCoverageFromJson(json);
|
|
710
|
+
const testCases = this.reportedTestCases(json, file, passed + failed + skipped);
|
|
705
711
|
return ok({
|
|
706
712
|
total: passed + failed + skipped,
|
|
707
713
|
passed,
|
|
708
714
|
failed,
|
|
709
715
|
skipped,
|
|
710
716
|
failedTests,
|
|
717
|
+
...(testCases ? { testCases } : {}),
|
|
711
718
|
coverage: covData.summary,
|
|
712
719
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
713
720
|
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
@@ -721,6 +728,14 @@ Provide:
|
|
|
721
728
|
// Example: "Tests 5 passed | 1 failed | 1 skipped (7)"
|
|
722
729
|
return this.parseTestSummaryLine(stdout, stderr, file, exitCode);
|
|
723
730
|
}
|
|
731
|
+
/**
|
|
732
|
+
* #1110: the report's per-test entries, kept only when they account for
|
|
733
|
+
* every counted test; a partial list would misstate the run.
|
|
734
|
+
*/
|
|
735
|
+
reportedTestCases(json, file, total) {
|
|
736
|
+
const cases = testCasesFromRunnerReport(json, file);
|
|
737
|
+
return cases && cases.length === total ? cases : undefined;
|
|
738
|
+
}
|
|
724
739
|
/**
|
|
725
740
|
* Parse jest JSON output
|
|
726
741
|
*/
|
|
@@ -757,12 +772,14 @@ Provide:
|
|
|
757
772
|
if (executionError)
|
|
758
773
|
return err(executionError);
|
|
759
774
|
const covData = this.extractCoverageFromJson(json);
|
|
775
|
+
const testCases = this.reportedTestCases(json, file, passed + failed + skipped);
|
|
760
776
|
return ok({
|
|
761
777
|
total: passed + failed + skipped,
|
|
762
778
|
passed,
|
|
763
779
|
failed,
|
|
764
780
|
skipped,
|
|
765
781
|
failedTests,
|
|
782
|
+
...(testCases ? { testCases } : {}),
|
|
766
783
|
coverage: covData.summary,
|
|
767
784
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
768
785
|
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
@@ -991,6 +1008,9 @@ Provide:
|
|
|
991
1008
|
aggregated.skipped += result.skipped;
|
|
992
1009
|
aggregated.failedTests.push(...result.failedTests);
|
|
993
1010
|
}
|
|
1011
|
+
const testCases = mergeTestCases(results);
|
|
1012
|
+
if (testCases)
|
|
1013
|
+
aggregated.testCases = testCases;
|
|
994
1014
|
aggregated.coverage = this.aggregateCoverage(results.map(r => r.coverage).filter((c) => c !== undefined));
|
|
995
1015
|
// Collect per-file coverages from all worker results
|
|
996
1016
|
const allFileCoverages = results.flatMap(r => r.fileCoverages ?? []);
|
|
@@ -1182,7 +1202,9 @@ Provide:
|
|
|
1182
1202
|
// #1028 N1: the record names the test files it ran, so per-test duration
|
|
1183
1203
|
// is compared only between runs of the same test set.
|
|
1184
1204
|
const files = testFiles && testFiles.length > 0 ? [...new Set(testFiles)].sort() : undefined;
|
|
1185
|
-
|
|
1205
|
+
// Per-test entries are returned to the caller, not persisted with the run record.
|
|
1206
|
+
const { testCases: _testCases, ...record } = result;
|
|
1207
|
+
await this.memory.set(`test-run:${runId}`, files ? { ...record, testFiles: files } : record, {
|
|
1186
1208
|
namespace: 'test-execution',
|
|
1187
1209
|
persist: true,
|
|
1188
1210
|
});
|
|
@@ -120,6 +120,8 @@ export class FleetInitEnhancer {
|
|
|
120
120
|
const kgService = new KnowledgeGraphService(memory, {
|
|
121
121
|
namespace: 'code-intelligence:kg',
|
|
122
122
|
enableVectorEmbeddings: true,
|
|
123
|
+
// #1096: indexing is confined to the project being initialized.
|
|
124
|
+
projectRoot: this.projectRoot,
|
|
123
125
|
});
|
|
124
126
|
// Find all source files
|
|
125
127
|
const { glob } = await import('tinyglobby');
|
|
@@ -199,6 +199,8 @@ export async function runCodeIntelligenceScan(projectPath) {
|
|
|
199
199
|
const kgService = new KnowledgeGraphService(memory, {
|
|
200
200
|
namespace: 'code-intelligence:kg',
|
|
201
201
|
enableVectorEmbeddings: true,
|
|
202
|
+
// #1096: indexing is confined to the project being initialized.
|
|
203
|
+
projectRoot: projectPath,
|
|
202
204
|
});
|
|
203
205
|
const { glob } = await import('tinyglobby');
|
|
204
206
|
const files = await glob([
|
|
@@ -223,6 +223,8 @@ export class CodeIntelligencePhase extends BasePhase {
|
|
|
223
223
|
const kgService = new KnowledgeGraphService(memory, {
|
|
224
224
|
namespace: 'code-intelligence:kg',
|
|
225
225
|
enableVectorEmbeddings: true,
|
|
226
|
+
// #1096: indexing is confined to the project being initialized.
|
|
227
|
+
projectRoot,
|
|
226
228
|
});
|
|
227
229
|
try {
|
|
228
230
|
let filesToIndex;
|
|
@@ -204,7 +204,8 @@ if (binCandidate && binCandidate.endsWith('bundle.js')) {
|
|
|
204
204
|
|
|
205
205
|
appendFileSync(logFile, '[' + ts + '] Using: ' + mcpCmd + ' ' + mcpArgs.join(' ') + '\\n');
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
// #1066: keep a user's AQE_WORKERS_ENABLED (for example false) instead of forcing it on.
|
|
208
|
+
const env = { ...process.env, AQE_STORAGE_PATH: '.agentic-qe', AQE_LEARNING_ENABLED: 'true', AQE_WORKERS_ENABLED: process.env.AQE_WORKERS_ENABLED ?? 'true', AQE_HTTP_PORT: '0' };
|
|
208
209
|
const child = spawn(mcpCmd, mcpArgs, { cwd: projectRoot, env, detached: true, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
209
210
|
child.stdout.on('data', d => appendFileSync(logFile, d));
|
|
210
211
|
child.stderr.on('data', d => appendFileSync(logFile, d));
|
|
@@ -110,7 +110,11 @@ export interface AntiDriftStats {
|
|
|
110
110
|
readonly totalChecked: number;
|
|
111
111
|
readonly driftCount: number;
|
|
112
112
|
readonly averageSimilarity: number;
|
|
113
|
+
/** Events delivered without verification because the embedder failed. */
|
|
114
|
+
readonly unverifiedCount: number;
|
|
113
115
|
}
|
|
116
|
+
/** True when the event type is a lifecycle / control-plane event that must never be dropped. */
|
|
117
|
+
export declare function isControlPlaneEvent(eventType: string): boolean;
|
|
114
118
|
/**
|
|
115
119
|
* Middleware enforcing semantic stability of domain events across agent-hop
|
|
116
120
|
* boundaries. `onEmit` computes an embedding and attaches a SemanticFingerprint;
|
|
@@ -124,6 +128,15 @@ export declare class SemanticAntiDriftMiddleware implements EventMiddleware {
|
|
|
124
128
|
private totalChecked;
|
|
125
129
|
private driftCount;
|
|
126
130
|
private similaritySum;
|
|
131
|
+
private unverifiedCount;
|
|
132
|
+
/** Suppressed drift warnings of keys evicted from the rate limiter, reported on the next warning. */
|
|
133
|
+
private evictedSuppressedWarnings;
|
|
134
|
+
/** Rate limit for drift warnings, keyed by event type and source. */
|
|
135
|
+
private readonly driftWarnings;
|
|
136
|
+
/** Payload text each fingerprint was computed from (same-process events only). */
|
|
137
|
+
private readonly emittedPayloadText;
|
|
138
|
+
private embeddingWarningAt;
|
|
139
|
+
private suppressedEmbeddingWarnings;
|
|
127
140
|
constructor(config?: Partial<AntiDriftConfig>);
|
|
128
141
|
/**
|
|
129
142
|
* Compute the semantic embedding of the event payload and attach a
|
|
@@ -134,11 +147,13 @@ export declare class SemanticAntiDriftMiddleware implements EventMiddleware {
|
|
|
134
147
|
onEmit(event: DomainEvent): Promise<DomainEvent>;
|
|
135
148
|
/**
|
|
136
149
|
* Re-embed the payload and compare with the original fingerprint.
|
|
137
|
-
* If drift exceeds threshold
|
|
138
|
-
*
|
|
139
|
-
*
|
|
150
|
+
* If drift exceeds threshold a warning is logged, a SemanticDriftDetectedEvent
|
|
151
|
+
* is emitted, and a data event is dropped (returns null). Control-plane
|
|
152
|
+
* events (see {@link isControlPlaneEvent}) are delivered anyway: dropping a
|
|
153
|
+
* lifecycle event leaks Queen slots (#1070, #1077). Events without a
|
|
154
|
+
* fingerprint pass through unchanged.
|
|
140
155
|
* @param event - The incoming domain event.
|
|
141
|
-
* @returns The event with incremented hopCount, or null if drifted.
|
|
156
|
+
* @returns The event with incremented hopCount, or null if a drifted data event.
|
|
142
157
|
*/
|
|
143
158
|
onReceive(event: DomainEvent): Promise<DomainEvent | null>;
|
|
144
159
|
/** Returns recent drift check results (bounded by maxHistorySize). */
|
|
@@ -150,10 +165,34 @@ export declare class SemanticAntiDriftMiddleware implements EventMiddleware {
|
|
|
150
165
|
* @returns ok(void) if valid, err(Error) otherwise.
|
|
151
166
|
*/
|
|
152
167
|
validateConfig(): Result<void, Error>;
|
|
153
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Compute embedding, preferring transformer pipeline with hash fallback.
|
|
170
|
+
* The transformer returns a zero vector for text it treats as non-semantic
|
|
171
|
+
* (JSON with a "metrics" key, raw arrays, mostly numeric strings). A zero
|
|
172
|
+
* vector has no direction, so the cosine check read it as total drift and
|
|
173
|
+
* silently dropped the event, e.g. every quality_assess TaskCompleted (#1070).
|
|
174
|
+
* Such text gets a hash embedding of the same length instead, which still
|
|
175
|
+
* detects a mutated payload.
|
|
176
|
+
*/
|
|
154
177
|
private embed;
|
|
178
|
+
/**
|
|
179
|
+
* Fingerprinting is advisory infrastructure, not an event-delivery dependency.
|
|
180
|
+
* A transformer can fail after its cached availability probe succeeded. Do not
|
|
181
|
+
* switch vector spaces mid-event: an old semantic vector and a new hash vector
|
|
182
|
+
* cannot be compared. Deliver this event without claiming a completed check;
|
|
183
|
+
* later events still try the transformer normally.
|
|
184
|
+
*/
|
|
185
|
+
private embedForEvent;
|
|
155
186
|
/** Map event type to threshold category via substring matching. */
|
|
156
187
|
private resolveCategory;
|
|
188
|
+
/**
|
|
189
|
+
* Log a drift detection to stderr (via the structured logger). Never logs
|
|
190
|
+
* payload contents. Rate limited per event type and source so a flood of
|
|
191
|
+
* drifted events produces one line per window plus a suppressed count.
|
|
192
|
+
*/
|
|
193
|
+
private warnDrift;
|
|
194
|
+
/** Drop the least recently warned key, carrying its suppressed count forward. */
|
|
195
|
+
private evictOldestDriftWarning;
|
|
157
196
|
/** Fire a SemanticDriftDetectedEvent via the configured callback. */
|
|
158
197
|
private emitDriftEvent;
|
|
159
198
|
}
|
|
@@ -166,6 +166,26 @@ const DEFAULT_CONFIG = {
|
|
|
166
166
|
maxHistorySize: 200,
|
|
167
167
|
fallbackDimension: 64,
|
|
168
168
|
};
|
|
169
|
+
/**
|
|
170
|
+
* Control-plane (task/agent/workflow lifecycle) events, matched on the last
|
|
171
|
+
* dot-separated segment of the event type:
|
|
172
|
+
* - every `Queen*` event (QueenCoordinator prefixes all of its events),
|
|
173
|
+
* - `Task*`, `Agent*`, `Workflow*`, `Step*`, `Protocol*` and `Action*` events
|
|
174
|
+
* (TaskCompleted, TaskFailed, workflow.StepCompleted, coordination.ProtocolFailed, ...).
|
|
175
|
+
* The Queen, the workflow orchestrator and the protocol executor count slots
|
|
176
|
+
* and advance state machines on these events, so losing one leaks a slot or
|
|
177
|
+
* hangs a run (#1070, #1077).
|
|
178
|
+
*/
|
|
179
|
+
const CONTROL_PLANE_EVENT_RE = /^(?:Queen[A-Z]|(?:Task|Agent|Workflow|Step|Protocol|Action)[A-Z])/;
|
|
180
|
+
/** True when the event type is a lifecycle / control-plane event that must never be dropped. */
|
|
181
|
+
export function isControlPlaneEvent(eventType) {
|
|
182
|
+
const name = eventType.slice(eventType.lastIndexOf('.') + 1);
|
|
183
|
+
return CONTROL_PLANE_EVENT_RE.test(name);
|
|
184
|
+
}
|
|
185
|
+
/** One warning per event type and source per window; later drops in the window are counted. */
|
|
186
|
+
const DRIFT_WARN_WINDOW_MS = 60_000;
|
|
187
|
+
/** Bound on distinct (type, source) keys tracked for warning rate limiting. */
|
|
188
|
+
const DRIFT_WARN_MAX_KEYS = 256;
|
|
169
189
|
/**
|
|
170
190
|
* Deterministic pseudo-embedding via FNV-1a-inspired hash spread.
|
|
171
191
|
* Not semantically meaningful but sufficient for detecting payload mutations.
|
|
@@ -241,6 +261,15 @@ export class SemanticAntiDriftMiddleware {
|
|
|
241
261
|
totalChecked = 0;
|
|
242
262
|
driftCount = 0;
|
|
243
263
|
similaritySum = 0;
|
|
264
|
+
unverifiedCount = 0;
|
|
265
|
+
/** Suppressed drift warnings of keys evicted from the rate limiter, reported on the next warning. */
|
|
266
|
+
evictedSuppressedWarnings = 0;
|
|
267
|
+
/** Rate limit for drift warnings, keyed by event type and source. */
|
|
268
|
+
driftWarnings = new Map();
|
|
269
|
+
/** Payload text each fingerprint was computed from (same-process events only). */
|
|
270
|
+
emittedPayloadText = new WeakMap();
|
|
271
|
+
embeddingWarningAt = -Infinity;
|
|
272
|
+
suppressedEmbeddingWarnings = 0;
|
|
244
273
|
constructor(config) {
|
|
245
274
|
this.config = {
|
|
246
275
|
...DEFAULT_CONFIG,
|
|
@@ -256,7 +285,9 @@ export class SemanticAntiDriftMiddleware {
|
|
|
256
285
|
*/
|
|
257
286
|
async onEmit(event) {
|
|
258
287
|
const payloadText = JSON.stringify(event.payload);
|
|
259
|
-
const embedding = await this.
|
|
288
|
+
const embedding = await this.embedForEvent(payloadText, event, 'emit');
|
|
289
|
+
if (embedding === null)
|
|
290
|
+
return event;
|
|
260
291
|
const category = this.resolveCategory(event.type);
|
|
261
292
|
const threshold = this.config.thresholds[category] ?? this.config.thresholds['default'];
|
|
262
293
|
const fingerprint = {
|
|
@@ -266,23 +297,38 @@ export class SemanticAntiDriftMiddleware {
|
|
|
266
297
|
hopCount: 0,
|
|
267
298
|
emittedAt: Date.now(),
|
|
268
299
|
};
|
|
300
|
+
this.emittedPayloadText.set(fingerprint, payloadText);
|
|
269
301
|
return { ...event, semanticFingerprint: fingerprint };
|
|
270
302
|
}
|
|
271
303
|
/**
|
|
272
304
|
* Re-embed the payload and compare with the original fingerprint.
|
|
273
|
-
* If drift exceeds threshold
|
|
274
|
-
*
|
|
275
|
-
*
|
|
305
|
+
* If drift exceeds threshold a warning is logged, a SemanticDriftDetectedEvent
|
|
306
|
+
* is emitted, and a data event is dropped (returns null). Control-plane
|
|
307
|
+
* events (see {@link isControlPlaneEvent}) are delivered anyway: dropping a
|
|
308
|
+
* lifecycle event leaks Queen slots (#1070, #1077). Events without a
|
|
309
|
+
* fingerprint pass through unchanged.
|
|
276
310
|
* @param event - The incoming domain event.
|
|
277
|
-
* @returns The event with incremented hopCount, or null if drifted.
|
|
311
|
+
* @returns The event with incremented hopCount, or null if a drifted data event.
|
|
278
312
|
*/
|
|
279
313
|
async onReceive(event) {
|
|
280
314
|
const fp = event.semanticFingerprint;
|
|
281
315
|
if (!fp)
|
|
282
316
|
return event;
|
|
283
317
|
const payloadText = JSON.stringify(event.payload);
|
|
284
|
-
|
|
285
|
-
|
|
318
|
+
// A payload whose text is byte-identical to the text this instance
|
|
319
|
+
// fingerprinted at emit time has similarity 1 by construction; skip the
|
|
320
|
+
// second model inference (#1077).
|
|
321
|
+
let similarity = 1;
|
|
322
|
+
const emittedText = this.emittedPayloadText.get(fp);
|
|
323
|
+
// Release the cached text now: bus history keeps the emitted fingerprint
|
|
324
|
+
// alive for up to 10k events.
|
|
325
|
+
this.emittedPayloadText.delete(fp);
|
|
326
|
+
if (emittedText !== payloadText) {
|
|
327
|
+
const currentEmbedding = await this.embedForEvent(payloadText, event, 'receive');
|
|
328
|
+
if (currentEmbedding === null)
|
|
329
|
+
return event;
|
|
330
|
+
similarity = cosineSimilarity(currentEmbedding, fp.embedding);
|
|
331
|
+
}
|
|
286
332
|
const distance = 1 - similarity;
|
|
287
333
|
const drifted = distance > fp.driftThreshold;
|
|
288
334
|
this.totalChecked++;
|
|
@@ -300,8 +346,11 @@ export class SemanticAntiDriftMiddleware {
|
|
|
300
346
|
this.history.shift();
|
|
301
347
|
if (drifted) {
|
|
302
348
|
this.driftCount++;
|
|
349
|
+
const deliver = isControlPlaneEvent(event.type);
|
|
350
|
+
this.warnDrift(event, checkResult, deliver);
|
|
303
351
|
await this.emitDriftEvent(event, checkResult);
|
|
304
|
-
|
|
352
|
+
if (!deliver)
|
|
353
|
+
return null;
|
|
305
354
|
}
|
|
306
355
|
const updatedFingerprint = { ...fp, hopCount: fp.hopCount + 1 };
|
|
307
356
|
return { ...event, semanticFingerprint: updatedFingerprint };
|
|
@@ -316,6 +365,7 @@ export class SemanticAntiDriftMiddleware {
|
|
|
316
365
|
totalChecked: this.totalChecked,
|
|
317
366
|
driftCount: this.driftCount,
|
|
318
367
|
averageSimilarity: this.totalChecked > 0 ? this.similaritySum / this.totalChecked : 0,
|
|
368
|
+
unverifiedCount: this.unverifiedCount,
|
|
319
369
|
};
|
|
320
370
|
}
|
|
321
371
|
/**
|
|
@@ -334,13 +384,57 @@ export class SemanticAntiDriftMiddleware {
|
|
|
334
384
|
return err(new Error('fallbackDimension must be positive'));
|
|
335
385
|
return ok(undefined);
|
|
336
386
|
}
|
|
337
|
-
/**
|
|
387
|
+
/**
|
|
388
|
+
* Compute embedding, preferring transformer pipeline with hash fallback.
|
|
389
|
+
* The transformer returns a zero vector for text it treats as non-semantic
|
|
390
|
+
* (JSON with a "metrics" key, raw arrays, mostly numeric strings). A zero
|
|
391
|
+
* vector has no direction, so the cosine check read it as total drift and
|
|
392
|
+
* silently dropped the event, e.g. every quality_assess TaskCompleted (#1070).
|
|
393
|
+
* Such text gets a hash embedding of the same length instead, which still
|
|
394
|
+
* detects a mutated payload.
|
|
395
|
+
*/
|
|
338
396
|
async embed(text) {
|
|
339
397
|
const hasTransformer = await probeTransformer();
|
|
340
|
-
if (hasTransformer && _computeRealEmbedding)
|
|
341
|
-
|
|
398
|
+
if (hasTransformer && _computeRealEmbedding) {
|
|
399
|
+
const embedding = await _computeRealEmbedding(text);
|
|
400
|
+
if (embedding.some(v => v !== 0))
|
|
401
|
+
return embedding;
|
|
402
|
+
return hashBasedEmbedding(text, embedding.length || this.config.fallbackDimension);
|
|
403
|
+
}
|
|
342
404
|
return hashBasedEmbedding(text, this.config.fallbackDimension);
|
|
343
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Fingerprinting is advisory infrastructure, not an event-delivery dependency.
|
|
408
|
+
* A transformer can fail after its cached availability probe succeeded. Do not
|
|
409
|
+
* switch vector spaces mid-event: an old semantic vector and a new hash vector
|
|
410
|
+
* cannot be compared. Deliver this event without claiming a completed check;
|
|
411
|
+
* later events still try the transformer normally.
|
|
412
|
+
*/
|
|
413
|
+
async embedForEvent(text, event, stage) {
|
|
414
|
+
try {
|
|
415
|
+
return await this.embed(text);
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// Counted even when the warning below is rate limited, so an outage
|
|
419
|
+
// stays visible in getStats().
|
|
420
|
+
this.unverifiedCount++;
|
|
421
|
+
const now = Date.now();
|
|
422
|
+
if (now - this.embeddingWarningAt < DRIFT_WARN_WINDOW_MS) {
|
|
423
|
+
this.suppressedEmbeddingWarnings++;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
logger.warn('Anti-drift embedding unavailable; event delivered without verification', {
|
|
427
|
+
eventType: event.type, source: event.source, stage,
|
|
428
|
+
suppressedSinceLastWarning: this.suppressedEmbeddingWarnings,
|
|
429
|
+
});
|
|
430
|
+
this.embeddingWarningAt = now;
|
|
431
|
+
this.suppressedEmbeddingWarnings = 0;
|
|
432
|
+
}
|
|
433
|
+
// Never log the payload or provider's error text (it may contain input or
|
|
434
|
+
// credentials), and never count an unavailable check as successful/drifted.
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
344
438
|
/** Map event type to threshold category via substring matching. */
|
|
345
439
|
resolveCategory(eventType) {
|
|
346
440
|
const lower = eventType.toLowerCase();
|
|
@@ -350,6 +444,48 @@ export class SemanticAntiDriftMiddleware {
|
|
|
350
444
|
}
|
|
351
445
|
return 'default';
|
|
352
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Log a drift detection to stderr (via the structured logger). Never logs
|
|
449
|
+
* payload contents. Rate limited per event type and source so a flood of
|
|
450
|
+
* drifted events produces one line per window plus a suppressed count.
|
|
451
|
+
*/
|
|
452
|
+
warnDrift(event, check, delivered) {
|
|
453
|
+
const key = `${event.type}|${String(event.source)}`;
|
|
454
|
+
const now = Date.now();
|
|
455
|
+
const entry = this.driftWarnings.get(key);
|
|
456
|
+
if (entry && now - entry.lastAt < DRIFT_WARN_WINDOW_MS) {
|
|
457
|
+
entry.suppressed++;
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (!entry && this.driftWarnings.size >= DRIFT_WARN_MAX_KEYS)
|
|
461
|
+
this.evictOldestDriftWarning();
|
|
462
|
+
const suppressed = entry?.suppressed ?? 0;
|
|
463
|
+
const evictedSuppressed = this.evictedSuppressedWarnings;
|
|
464
|
+
this.evictedSuppressedWarnings = 0;
|
|
465
|
+
// Re-insert so Map order tracks lastAt and the first key is the oldest.
|
|
466
|
+
this.driftWarnings.delete(key);
|
|
467
|
+
this.driftWarnings.set(key, { lastAt: now, suppressed: 0 });
|
|
468
|
+
logger.warn(delivered
|
|
469
|
+
? 'Semantic drift detected on a control-plane event; delivered anyway'
|
|
470
|
+
: 'Semantic drift detected; event dropped', {
|
|
471
|
+
eventType: event.type,
|
|
472
|
+
source: event.source,
|
|
473
|
+
cosineSimilarity: Number(check.cosineSimilarity.toFixed(4)),
|
|
474
|
+
cosineDistance: Number((1 - check.cosineSimilarity).toFixed(4)),
|
|
475
|
+
threshold: check.threshold,
|
|
476
|
+
hopCount: check.hopCount,
|
|
477
|
+
...(suppressed > 0 ? { suppressedSinceLastWarning: suppressed } : {}),
|
|
478
|
+
...(evictedSuppressed > 0 ? { suppressedForEvictedKeys: evictedSuppressed } : {}),
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
/** Drop the least recently warned key, carrying its suppressed count forward. */
|
|
482
|
+
evictOldestDriftWarning() {
|
|
483
|
+
const oldest = this.driftWarnings.keys().next();
|
|
484
|
+
if (oldest.done)
|
|
485
|
+
return;
|
|
486
|
+
this.evictedSuppressedWarnings += this.driftWarnings.get(oldest.value)?.suppressed ?? 0;
|
|
487
|
+
this.driftWarnings.delete(oldest.value);
|
|
488
|
+
}
|
|
353
489
|
/** Fire a SemanticDriftDetectedEvent via the configured callback. */
|
|
354
490
|
async emitDriftEvent(originalEvent, check) {
|
|
355
491
|
if (!this.config.onDriftDetected)
|
|
@@ -33,6 +33,11 @@ export interface DomainPlugin extends Initializable, Disposable {
|
|
|
33
33
|
* @returns true if domain can handle the task type
|
|
34
34
|
*/
|
|
35
35
|
canHandleTask?(taskType: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Task types this domain executes through `executeTask` (#1075).
|
|
38
|
+
* Optional - used to tell callers which types a domain accepts.
|
|
39
|
+
*/
|
|
40
|
+
getSupportedTaskTypes?(): string[];
|
|
36
41
|
}
|
|
37
42
|
export interface DomainHealth {
|
|
38
43
|
/**
|
|
@@ -31,7 +31,21 @@ export interface DreamConfig {
|
|
|
31
31
|
activationConfig: ActivationConfig;
|
|
32
32
|
/** Insight generation configuration */
|
|
33
33
|
insightConfig: InsightConfig;
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Enable RVCOW branching for reversible dream cycles (ADR-069).
|
|
36
|
+
* Default: false (#1060).
|
|
37
|
+
*
|
|
38
|
+
* RISK — opt in only for an isolated database connection. The branch is a
|
|
39
|
+
* SQLite SAVEPOINT on the process-wide shared connection, and it stays open
|
|
40
|
+
* for the whole asynchronous dream (up to `maxDurationMs`). Every other
|
|
41
|
+
* write made on that connection in the meantime (memory_store, pattern
|
|
42
|
+
* updates, experience capture) joins the savepoint. A discard (failed
|
|
43
|
+
* validation, error, cancel) rolls those foreground writes back even though
|
|
44
|
+
* they were already acknowledged. Branch validation only inspects
|
|
45
|
+
* `qe_patterns`, which `dream()` does not write, so branching adds little
|
|
46
|
+
* protection to a dream cycle. A compute-then-commit rework is tracked in
|
|
47
|
+
* #1060.
|
|
48
|
+
*/
|
|
35
49
|
enableBranching: boolean;
|
|
36
50
|
/** Validation thresholds for dream branch quality checks */
|
|
37
51
|
branchValidationThresholds: ValidationThresholds;
|
|
@@ -104,6 +118,8 @@ export declare class DreamEngine {
|
|
|
104
118
|
private graph;
|
|
105
119
|
private db;
|
|
106
120
|
private branchManager;
|
|
121
|
+
/** #1060: marks the in-flight dream cycle interrupted (set while dreaming). */
|
|
122
|
+
private interruptActiveDream;
|
|
107
123
|
private currentCycle;
|
|
108
124
|
private initialized;
|
|
109
125
|
private cancelled;
|
|
@@ -138,6 +154,15 @@ export declare class DreamEngine {
|
|
|
138
154
|
* @returns Dream cycle result with insights and statistics
|
|
139
155
|
*/
|
|
140
156
|
dream(durationMs?: number): Promise<DreamCycleResult>;
|
|
157
|
+
/**
|
|
158
|
+
* #1060: build a synchronous handler that records a still-running cycle as
|
|
159
|
+
* 'interrupted'. It runs from close() and from a process store closer,
|
|
160
|
+
* which runs before the shared database closes (closers run newest first).
|
|
161
|
+
* When opt-in branching left a savepoint open, the savepoint is released
|
|
162
|
+
* first so foreground writes made on the shared connection during the
|
|
163
|
+
* dream are committed rather than lost with the connection.
|
|
164
|
+
*/
|
|
165
|
+
private createCycleInterrupter;
|
|
141
166
|
/**
|
|
142
167
|
* Load patterns as concepts for dreaming.
|
|
143
168
|
*
|
|
@@ -203,6 +228,7 @@ export declare class DreamEngine {
|
|
|
203
228
|
getCurrentCycle(): DreamCycle | null;
|
|
204
229
|
private saveCycle;
|
|
205
230
|
private updateCycle;
|
|
231
|
+
private updateCycleSync;
|
|
206
232
|
private saveInsight;
|
|
207
233
|
private getInsightRowById;
|
|
208
234
|
/**
|
|
@@ -21,6 +21,7 @@ import { LoggerFactory } from '../../logging/index.js';
|
|
|
21
21
|
const dreamLogger = LoggerFactory.create('dream-engine');
|
|
22
22
|
import { v4 as uuidv4 } from 'uuid';
|
|
23
23
|
import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
|
|
24
|
+
import { registerStoreCloser } from '../../kernel/process-lifecycle.js';
|
|
24
25
|
import { ConceptGraph } from './concept-graph.js';
|
|
25
26
|
import { SpreadingActivation, } from './spreading-activation.js';
|
|
26
27
|
import { InsightGenerator, } from './insight-generator.js';
|
|
@@ -43,7 +44,8 @@ export const DEFAULT_DREAM_CONFIG = {
|
|
|
43
44
|
minConfidence: 0.5,
|
|
44
45
|
maxInsightsPerCycle: 10,
|
|
45
46
|
},
|
|
46
|
-
|
|
47
|
+
// #1060: off by default; see the RISK note on DreamConfig.enableBranching.
|
|
48
|
+
enableBranching: false,
|
|
47
49
|
branchValidationThresholds: { ...DEFAULT_VALIDATION_THRESHOLDS },
|
|
48
50
|
};
|
|
49
51
|
// ============================================================================
|
|
@@ -206,6 +208,8 @@ export class DreamEngine {
|
|
|
206
208
|
graph = null;
|
|
207
209
|
db = null;
|
|
208
210
|
branchManager = null;
|
|
211
|
+
/** #1060: marks the in-flight dream cycle interrupted (set while dreaming). */
|
|
212
|
+
interruptActiveDream = null;
|
|
209
213
|
currentCycle = null;
|
|
210
214
|
initialized = false;
|
|
211
215
|
cancelled = false;
|
|
@@ -344,13 +348,18 @@ export class DreamEngine {
|
|
|
344
348
|
status: 'running',
|
|
345
349
|
};
|
|
346
350
|
await this.saveCycle(this.currentCycle);
|
|
347
|
-
// ADR-069: Create RVCOW branch before dream consolidation
|
|
351
|
+
// ADR-069: Create RVCOW branch before dream consolidation (opt-in, #1060)
|
|
348
352
|
let branch = null;
|
|
349
353
|
if (this.branchManager) {
|
|
350
354
|
const branchName = `dream-${this.currentCycle.id}-${Date.now()}`;
|
|
351
355
|
branch = this.branchManager.createBranch(branchName);
|
|
352
356
|
this.emitBranchEvent('dream:branch_created', branch);
|
|
353
357
|
}
|
|
358
|
+
// #1060: if the engine closes or the process shuts down mid-dream, record
|
|
359
|
+
// the cycle as interrupted instead of leaving it 'running' forever.
|
|
360
|
+
const interrupt = this.createCycleInterrupter(this.currentCycle, startTime, () => branch);
|
|
361
|
+
this.interruptActiveDream = interrupt;
|
|
362
|
+
const unregisterShutdownGuard = registerStoreCloser(interrupt);
|
|
354
363
|
try {
|
|
355
364
|
// 1. Check we have enough concepts
|
|
356
365
|
const allNodes = await this.graph.getActiveNodes(0);
|
|
@@ -458,6 +467,44 @@ export class DreamEngine {
|
|
|
458
467
|
this.currentCycle = null;
|
|
459
468
|
throw error;
|
|
460
469
|
}
|
|
470
|
+
finally {
|
|
471
|
+
unregisterShutdownGuard();
|
|
472
|
+
if (this.interruptActiveDream === interrupt)
|
|
473
|
+
this.interruptActiveDream = null;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* #1060: build a synchronous handler that records a still-running cycle as
|
|
478
|
+
* 'interrupted'. It runs from close() and from a process store closer,
|
|
479
|
+
* which runs before the shared database closes (closers run newest first).
|
|
480
|
+
* When opt-in branching left a savepoint open, the savepoint is released
|
|
481
|
+
* first so foreground writes made on the shared connection during the
|
|
482
|
+
* dream are committed rather than lost with the connection.
|
|
483
|
+
*/
|
|
484
|
+
createCycleInterrupter(cycle, startTime, getBranch) {
|
|
485
|
+
return () => {
|
|
486
|
+
if (cycle.status !== 'running' || !this.db)
|
|
487
|
+
return;
|
|
488
|
+
const branch = getBranch();
|
|
489
|
+
if (branch && this.branchManager) {
|
|
490
|
+
try {
|
|
491
|
+
this.branchManager.mergeBranch(branch);
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
// Branch already resolved; nothing to release
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
cycle.status = 'interrupted';
|
|
498
|
+
cycle.error = 'Interrupted: engine closed or process shut down during the dream cycle';
|
|
499
|
+
cycle.endTime = new Date();
|
|
500
|
+
cycle.durationMs = Date.now() - startTime;
|
|
501
|
+
try {
|
|
502
|
+
this.updateCycleSync(cycle);
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
// Best effort during shutdown
|
|
506
|
+
}
|
|
507
|
+
};
|
|
461
508
|
}
|
|
462
509
|
// ==========================================================================
|
|
463
510
|
// Pattern Loading
|
|
@@ -753,6 +800,9 @@ export class DreamEngine {
|
|
|
753
800
|
stmt.run(cycle.id, cycle.startTime.toISOString(), cycle.endTime?.toISOString() ?? null, cycle.durationMs ?? null, cycle.conceptsProcessed, cycle.associationsFound, cycle.insightsGenerated, cycle.status, cycle.error ?? null, cycle.startTime.toISOString());
|
|
754
801
|
}
|
|
755
802
|
async updateCycle(cycle) {
|
|
803
|
+
this.updateCycleSync(cycle);
|
|
804
|
+
}
|
|
805
|
+
updateCycleSync(cycle) {
|
|
756
806
|
if (!this.db)
|
|
757
807
|
return;
|
|
758
808
|
const stmt = this.db.prepare(`
|
|
@@ -815,6 +865,10 @@ export class DreamEngine {
|
|
|
815
865
|
* Release resources (does NOT close the shared database)
|
|
816
866
|
*/
|
|
817
867
|
async close() {
|
|
868
|
+
// #1060: a dream still in flight is recorded as interrupted before the
|
|
869
|
+
// engine lets go of the database.
|
|
870
|
+
this.interruptActiveDream?.();
|
|
871
|
+
this.interruptActiveDream = null;
|
|
818
872
|
if (this.graph) {
|
|
819
873
|
await this.graph.close();
|
|
820
874
|
this.graph = null;
|