agentic-qe 3.15.9 → 3.15.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +365 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-TIDSQ3ZK.js +2 -0
- package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/browser-6YJF4FQW.js +4 -0
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/chunk-2CW7VRPH.js +141 -0
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/chunk-2VLYUF7U.js +2 -0
- package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-4RAQ7PJA.js} +8 -8
- package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-672XOJDG.js} +2 -2
- package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-6NA3KZZT.js} +10 -10
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-AUUJBXWX.js} +25 -20
- package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/chunk-EBPJY4DI.js +3 -0
- package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ERN43HOX.js} +430 -433
- package/dist/cli/chunks/chunk-ETVAYGCB.js +180 -0
- package/dist/cli/chunks/chunk-EWPUQCN4.js +2 -0
- package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/chunk-FWSGPE3V.js +12 -0
- package/dist/cli/chunks/chunk-FZHSG75I.js +3 -0
- package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-G4FAPO57.js} +5 -5
- package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/chunk-IENZSO3K.js +4 -0
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/chunk-ITL3IN2E.js +3 -0
- package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-LD5CFK53.js} +54 -33
- package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/chunk-OD5D4LSZ.js +2 -0
- package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/chunk-RBZCA7SD.js +12 -0
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/chunk-UKKYMW3S.js +3 -0
- package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/chunk-VO3DRK4P.js +3 -0
- package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/chunk-X3PZCXWG.js +2 -0
- package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ONKLMVQ2.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/daemon-P574WWBW.js +18 -0
- package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/domain-transfer-DOBI67K6.js +2 -0
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/fleet-FVAUMKUT.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-GYJ6D4QM.js} +36 -36
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-GNSIDRNG.js} +24 -24
- package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-ZM43WGDO.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/mcp-4Y6GDLYK.js +2 -0
- package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-Y44WDOER.js} +69 -25
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/pipeline-EDTS6OSC.js +19 -0
- package/dist/cli/chunks/{platform-KJDABL5C.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-AUDTRX3I.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/sync-XW5TLZ7M.js +2 -0
- package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-XFSGQELD.js → test-D2XDJNDX.js} +17 -17
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-HBBLPCZ3.js +2 -0
- package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-JTWLBAZJ.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-K7YX2AO6.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/wrappers-AVZ3GPAL.js +2 -0
- package/dist/cli/commands/fleet.js +23 -13
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +11 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +11 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +63 -7
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-handlers.js +10 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +18 -3
- package/dist/coordination/handlers/security-handlers.js +45 -21
- package/dist/coordination/handlers/test-execution-handlers.js +25 -7
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
- package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
- package/dist/coordination/protocols/learning-consolidation.js +71 -22
- package/dist/coordination/queen-coordinator.d.ts +1 -1
- package/dist/coordination/queen-coordinator.js +27 -10
- package/dist/coordination/queen-event-handlers.js +13 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +62 -168
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +1 -1
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
- package/dist/domains/code-intelligence/index-path-guard.js +20 -50
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
- package/dist/domains/learning-optimization/active-patterns.js +2 -2
- package/dist/domains/learning-optimization/coordinator.js +9 -5
- package/dist/domains/learning-optimization/interfaces.d.ts +8 -2
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
- package/dist/domains/learning-optimization/reward-source.js +8 -1
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
- package/dist/domains/learning-optimization/services/learning-coordinator.js +47 -59
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +6 -0
- package/dist/domains/test-execution/coordinator.js +28 -22
- package/dist/domains/test-execution/interfaces.d.ts +36 -1
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +11 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
- package/dist/domains/test-execution/services/test-executor.js +8 -8
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +5 -2
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/10-workers.js +50 -6
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
- package/dist/learning/dream/dream-insights-pruner.js +16 -30
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +17 -3
- package/dist/mcp/bundle.js +612 -580
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +7 -0
- package/dist/mcp/handlers/domain-handler-configs.js +19 -5
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +36 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +16 -0
- package/dist/mcp/handlers/task-handlers.js +77 -24
- package/dist/mcp/handlers/validation-pipeline-handler.js +14 -10
- package/dist/mcp/protocol-server.js +10 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +59 -12
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +19 -1
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +17 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/shared/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -1
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +6 -0
- package/dist/shared/test-runner-process.js +14 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/shared/utils/namespaced-search.d.ts +14 -0
- package/dist/shared/utils/namespaced-search.js +19 -1
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/gate-reexecute.js +7 -4
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/dist/workers/daemon.js +13 -1
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +2 -0
- package/dist/workers/workers/learning-consolidation.js +12 -1
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
- package/dist/cli/chunks/base-67DXSAYM.js +0 -2
- package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
- package/dist/cli/chunks/chunk-2XITOPYV.js +0 -6
- package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
- package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
- package/dist/cli/chunks/chunk-6PXA2BQJ.js +0 -742
- package/dist/cli/chunks/chunk-6YL6JOQB.js +0 -4
- package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
- package/dist/cli/chunks/chunk-AR2E4B7K.js +0 -6
- package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
- package/dist/cli/chunks/chunk-FJ4VTLLK.js +0 -2
- package/dist/cli/chunks/chunk-FV3NHVC7.js +0 -59
- package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
- package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
- package/dist/cli/chunks/chunk-JEP4ULR6.js +0 -21
- package/dist/cli/chunks/chunk-JK2ME6IT.js +0 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
- package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
- package/dist/cli/chunks/chunk-N5PDFGCQ.js +0 -180
- package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
- package/dist/cli/chunks/chunk-P2CXVNKK.js +0 -4
- package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
- package/dist/cli/chunks/chunk-VU2EL424.js +0 -14
- package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
- package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
- package/dist/cli/chunks/chunk-XZJ2O3VC.js +0 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
- package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
- package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
- package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
- package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
- package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
- package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
- package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
- package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
- package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
- package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
- package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
- package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @see docs/plans/AQE_V3_IMPROVEMENTS_PLAN.md - Phase 5, RM-003
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { spawn, spawnSync } from 'child_process';
|
|
16
16
|
import { createRequire } from 'module';
|
|
17
17
|
import { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync } from 'fs';
|
|
18
18
|
import { tmpdir } from 'os';
|
|
@@ -21,6 +21,8 @@ import { AQE_STATE_DIR } from '../../../../shared/aqe-managed-dirs.js';
|
|
|
21
21
|
import { DEFAULT_METRIC_CONFIG, } from './interfaces.js';
|
|
22
22
|
import { safeJsonParse } from '../../../../shared/safe-json.js';
|
|
23
23
|
import { ownListingProcess } from './listing-process-owner.js';
|
|
24
|
+
import { runTestRunnerProcess } from '../../../../shared/test-runner-process.js';
|
|
25
|
+
import { npmCliInvocation } from '../../../../shared/npm-cli-invocation.js';
|
|
24
26
|
// ============================================================================
|
|
25
27
|
// Main Test Counting Function
|
|
26
28
|
// ============================================================================
|
|
@@ -99,82 +101,31 @@ export function detectTestRunner(projectPath) {
|
|
|
99
101
|
/**
|
|
100
102
|
* Check which test runners are available on the system
|
|
101
103
|
*/
|
|
102
|
-
export function checkTestRunners(projectPath) {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
});
|
|
128
|
-
if (result.status === 0) {
|
|
129
|
-
tools.push({ name: 'jest', available: true, version: result.stdout.trim() });
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
tools.push({ name: 'jest', available: false });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
tools.push({ name: 'jest', available: false });
|
|
137
|
-
}
|
|
138
|
-
// Check cargo
|
|
139
|
-
try {
|
|
140
|
-
const result = spawnSync('cargo', ['--version'], { encoding: 'utf-8', timeout: 5000 });
|
|
141
|
-
if (result.status === 0) {
|
|
142
|
-
tools.push({ name: 'cargo', available: true, version: result.stdout.trim() });
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
tools.push({ name: 'cargo', available: false });
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
tools.push({ name: 'cargo', available: false });
|
|
150
|
-
}
|
|
151
|
-
// Check pytest
|
|
152
|
-
try {
|
|
153
|
-
const result = spawnSync('pytest', ['--version'], { encoding: 'utf-8', timeout: 5000 });
|
|
154
|
-
if (result.status === 0) {
|
|
155
|
-
tools.push({ name: 'pytest', available: true, version: result.stdout.trim() });
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
tools.push({ name: 'pytest', available: false });
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
catch {
|
|
162
|
-
tools.push({ name: 'pytest', available: false });
|
|
163
|
-
}
|
|
164
|
-
// Check go
|
|
165
|
-
try {
|
|
166
|
-
const result = spawnSync('go', ['version'], { encoding: 'utf-8', timeout: 5000 });
|
|
167
|
-
if (result.status === 0) {
|
|
168
|
-
tools.push({ name: 'go', available: true, version: result.stdout.trim() });
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
tools.push({ name: 'go', available: false });
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
tools.push({ name: 'go', available: false });
|
|
176
|
-
}
|
|
177
|
-
return tools;
|
|
104
|
+
export async function checkTestRunners(projectPath) {
|
|
105
|
+
const npx = npmCliInvocation('npx');
|
|
106
|
+
const probes = [
|
|
107
|
+
['vitest', npx, ['vitest', '--version'], projectPath, 10000],
|
|
108
|
+
['jest', npx, ['jest', '--version'], projectPath, 10000],
|
|
109
|
+
['cargo', ['cargo', []], ['--version'], process.cwd(), 5000],
|
|
110
|
+
['pytest', ['pytest', []], ['--version'], process.cwd(), 5000],
|
|
111
|
+
['go', ['go', []], ['version'], process.cwd(), 5000],
|
|
112
|
+
];
|
|
113
|
+
return Promise.all(probes.map(async ([name, invocation, args, cwd, timeout]) => {
|
|
114
|
+
const output = await runListing(invocation, args, cwd, timeout);
|
|
115
|
+
return output === null ? { name, available: false } : { name, available: true, version: output.trim() };
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Run a probe or listing command without blocking the event loop (#1115).
|
|
120
|
+
* Resolves with stdout on exit 0, or null when it cannot start, fails or
|
|
121
|
+
* times out; a timeout stops the whole process group (cargo, npx trees).
|
|
122
|
+
*/
|
|
123
|
+
async function runListing(invocation, args, cwd, timeout, maxBuffer) {
|
|
124
|
+
if (!invocation)
|
|
125
|
+
return null;
|
|
126
|
+
const [command, leadingArgs] = invocation;
|
|
127
|
+
const result = await runTestRunnerProcess(command, [...leadingArgs, ...args], { cwd, timeout, maxBuffer });
|
|
128
|
+
return result.error || result.status !== 0 ? null : result.stdout;
|
|
178
129
|
}
|
|
179
130
|
// ============================================================================
|
|
180
131
|
// Runner-Specific Implementations
|
|
@@ -319,15 +270,12 @@ async function countVitestTests(projectPath, config) {
|
|
|
319
270
|
* Uses `jest --listTests` for accurate test file discovery WITHOUT execution.
|
|
320
271
|
* Then parses the test files to count individual tests.
|
|
321
272
|
*/
|
|
322
|
-
function countJestTests(projectPath, config) {
|
|
273
|
+
async function countJestTests(projectPath, config) {
|
|
323
274
|
try {
|
|
324
|
-
// Use jest --listTests for safe enumeration (NO execution)
|
|
325
|
-
const output =
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
timeout: Math.min(config.timeout, 30000), // Cap at 30s for listing
|
|
329
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB buffer (reduced from 50MB)
|
|
330
|
-
});
|
|
275
|
+
// Use jest --listTests for safe enumeration (NO execution), capped at 30s
|
|
276
|
+
const output = await runListing(npmCliInvocation('npx'), ['jest', '--listTests'], projectPath, Math.min(config.timeout, 30000), 10 * 1024 * 1024);
|
|
277
|
+
if (output === null)
|
|
278
|
+
return countTestsByFilePattern(projectPath, config);
|
|
331
279
|
// Output is one test file path per line
|
|
332
280
|
const testFiles = output
|
|
333
281
|
.split('\n')
|
|
@@ -353,13 +301,11 @@ function countJestTests(projectPath, config) {
|
|
|
353
301
|
* Count tests using Cargo (Rust)
|
|
354
302
|
* Uses `cargo test -- --list` for accurate test enumeration
|
|
355
303
|
*/
|
|
356
|
-
function countCargoTests(projectPath, config) {
|
|
304
|
+
async function countCargoTests(projectPath, config) {
|
|
357
305
|
try {
|
|
358
|
-
const output =
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
timeout: config.timeout,
|
|
362
|
-
});
|
|
306
|
+
const output = await runListing(['cargo', []], ['test', '--', '--list'], projectPath, config.timeout);
|
|
307
|
+
if (output === null)
|
|
308
|
+
throw new Error('listing failed');
|
|
363
309
|
// Count lines ending with ": test"
|
|
364
310
|
const testLines = output.split('\n').filter(line => line.endsWith(': test'));
|
|
365
311
|
const total = testLines.length;
|
|
@@ -389,13 +335,11 @@ function countCargoTests(projectPath, config) {
|
|
|
389
335
|
* Count tests using pytest (Python)
|
|
390
336
|
* Uses `pytest --collect-only` for test discovery
|
|
391
337
|
*/
|
|
392
|
-
function countPytestTests(projectPath, config) {
|
|
338
|
+
async function countPytestTests(projectPath, config) {
|
|
393
339
|
try {
|
|
394
|
-
const output =
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
timeout: config.timeout,
|
|
398
|
-
});
|
|
340
|
+
const output = await runListing(['pytest', []], ['--collect-only', '-q'], projectPath, config.timeout);
|
|
341
|
+
if (output === null)
|
|
342
|
+
throw new Error('listing failed');
|
|
399
343
|
// Count test function lines (format: "tests/test_foo.py::test_bar")
|
|
400
344
|
const testLines = output.split('\n').filter(line => line.includes('::test_') || line.includes('::Test'));
|
|
401
345
|
const total = testLines.length;
|
|
@@ -426,13 +370,11 @@ function countPytestTests(projectPath, config) {
|
|
|
426
370
|
* Count tests using Go test
|
|
427
371
|
* Uses `go test -list` for test discovery
|
|
428
372
|
*/
|
|
429
|
-
function countGoTests(projectPath, config) {
|
|
373
|
+
async function countGoTests(projectPath, config) {
|
|
430
374
|
try {
|
|
431
|
-
const output =
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
timeout: config.timeout,
|
|
435
|
-
});
|
|
375
|
+
const output = await runListing(['go', []], ['test', '-list', '.*', './...'], projectPath, config.timeout);
|
|
376
|
+
if (output === null)
|
|
377
|
+
throw new Error('listing failed');
|
|
436
378
|
// Benchmarks and examples are listed too, but are not included in the
|
|
437
379
|
// test total. Apply that same selection to every category.
|
|
438
380
|
const testLines = output.split('\n').filter(line => line.startsWith('Test'));
|
|
@@ -15,6 +15,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import * as path from 'path';
|
|
17
17
|
import * as fs from 'fs/promises';
|
|
18
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
18
19
|
import { ok, err } from '../../../shared/types/index.js';
|
|
19
20
|
import { CodeIntelligenceEvents, createEvent, } from '../../../shared/events/domain-events.js';
|
|
20
21
|
import { toError } from '../../../shared/error-utils.js';
|
|
@@ -319,7 +320,7 @@ export class ProductFactorsBridgeService {
|
|
|
319
320
|
async getProjectMetadata(projectPath) {
|
|
320
321
|
try {
|
|
321
322
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
322
|
-
const content = await
|
|
323
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
323
324
|
const pkg = safeJsonParse(content);
|
|
324
325
|
return {
|
|
325
326
|
name: pkg.name || 'Project',
|
|
@@ -344,14 +345,16 @@ export class ProductFactorsBridgeService {
|
|
|
344
345
|
catch {
|
|
345
346
|
return systems;
|
|
346
347
|
}
|
|
347
|
-
const content = await
|
|
348
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
348
349
|
const pkg = safeJsonParse(content);
|
|
349
350
|
const allDeps = {
|
|
350
351
|
...pkg.dependencies,
|
|
351
352
|
...pkg.devDependencies,
|
|
352
353
|
};
|
|
353
354
|
for (const [depName] of Object.entries(allDeps)) {
|
|
354
|
-
|
|
355
|
+
// #1157: dependency names come from package.json; a package named
|
|
356
|
+
// `constructor` is not a known external system.
|
|
357
|
+
const pattern = Object.hasOwn(EXTERNAL_SYSTEM_PATTERNS, depName) ? EXTERNAL_SYSTEM_PATTERNS[depName] : undefined;
|
|
355
358
|
if (pattern) {
|
|
356
359
|
systems.push({
|
|
357
360
|
id: sanitizeId(depName),
|
|
@@ -636,7 +639,7 @@ export class ProductFactorsBridgeService {
|
|
|
636
639
|
// Simple hash based on package.json and file count
|
|
637
640
|
try {
|
|
638
641
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
639
|
-
const content = await
|
|
642
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
640
643
|
return this.hashString(content);
|
|
641
644
|
}
|
|
642
645
|
catch {
|
|
@@ -259,9 +259,10 @@ export class ApiCompatibilityService {
|
|
|
259
259
|
const newProps = newContent.properties || {};
|
|
260
260
|
const oldRequired = oldContent.required || [];
|
|
261
261
|
const newRequired = newContent.required || [];
|
|
262
|
-
// Check for removed properties
|
|
262
|
+
// Check for removed properties. #1136: own properties only, so a
|
|
263
|
+
// property named `constructor` or `toString` is compared like any other.
|
|
263
264
|
for (const prop of Object.keys(oldProps)) {
|
|
264
|
-
if (!(prop
|
|
265
|
+
if (!Object.hasOwn(newProps, prop)) {
|
|
265
266
|
breakingChanges.push({
|
|
266
267
|
type: 'removed-field',
|
|
267
268
|
location: `schema:${oldSchema.id}.${prop}`,
|
|
@@ -273,7 +274,7 @@ export class ApiCompatibilityService {
|
|
|
273
274
|
}
|
|
274
275
|
// Check for added properties
|
|
275
276
|
for (const prop of Object.keys(newProps)) {
|
|
276
|
-
if (!(prop
|
|
277
|
+
if (!Object.hasOwn(oldProps, prop)) {
|
|
277
278
|
nonBreakingChanges.push({
|
|
278
279
|
type: 'added-field',
|
|
279
280
|
location: `schema:${newSchema.id}.${prop}`,
|
|
@@ -284,7 +285,7 @@ export class ApiCompatibilityService {
|
|
|
284
285
|
// Check for new required fields (breaking if field existed as optional)
|
|
285
286
|
for (const req of newRequired) {
|
|
286
287
|
if (!oldRequired.includes(req)) {
|
|
287
|
-
if (req
|
|
288
|
+
if (Object.hasOwn(oldProps, req)) {
|
|
288
289
|
// Was optional, now required
|
|
289
290
|
if (!this.config.allowOptionalToRequired) {
|
|
290
291
|
breakingChanges.push({
|
|
@@ -296,7 +297,7 @@ export class ApiCompatibilityService {
|
|
|
296
297
|
});
|
|
297
298
|
}
|
|
298
299
|
}
|
|
299
|
-
else if (req
|
|
300
|
+
else if (Object.hasOwn(newProps, req)) {
|
|
300
301
|
// New required field
|
|
301
302
|
breakingChanges.push({
|
|
302
303
|
type: 'required-field-added',
|
|
@@ -310,7 +311,7 @@ export class ApiCompatibilityService {
|
|
|
310
311
|
}
|
|
311
312
|
// Check for type changes
|
|
312
313
|
for (const prop of Object.keys(oldProps)) {
|
|
313
|
-
if (prop
|
|
314
|
+
if (Object.hasOwn(newProps, prop)) {
|
|
314
315
|
const oldPropDef = oldProps[prop];
|
|
315
316
|
const newPropDef = newProps[prop];
|
|
316
317
|
if (oldPropDef.type !== newPropDef.type) {
|
|
@@ -760,7 +760,8 @@ Provide:
|
|
|
760
760
|
// Validate variables against operation variable definitions
|
|
761
761
|
if (variables && operationInfo.variableDefinitions) {
|
|
762
762
|
for (const [varName, varDef] of Object.entries(operationInfo.variableDefinitions)) {
|
|
763
|
-
|
|
763
|
+
// #1136: own properties only; an inherited `constructor` is not a variable.
|
|
764
|
+
if (varDef.required && !Object.hasOwn(variables, varName)) {
|
|
764
765
|
errors.push({
|
|
765
766
|
path: `variables.${varName}`,
|
|
766
767
|
keyword: 'required',
|
|
@@ -768,7 +769,7 @@ Provide:
|
|
|
768
769
|
params: { variable: varName },
|
|
769
770
|
});
|
|
770
771
|
}
|
|
771
|
-
if (varName
|
|
772
|
+
if (Object.hasOwn(variables, varName)) {
|
|
772
773
|
this.validateGraphQLVariableType(variables[varName], varDef.type, `variables.${varName}`, errors);
|
|
773
774
|
}
|
|
774
775
|
}
|
|
@@ -1209,7 +1210,8 @@ Provide:
|
|
|
1209
1210
|
const dataObj = data;
|
|
1210
1211
|
// Check required properties
|
|
1211
1212
|
for (const prop of required) {
|
|
1212
|
-
|
|
1213
|
+
// #1136: own properties only; an inherited `constructor` is not present.
|
|
1214
|
+
if (!Object.hasOwn(dataObj, prop)) {
|
|
1213
1215
|
errors.push({
|
|
1214
1216
|
path: path ? `${path}.${prop}` : prop,
|
|
1215
1217
|
keyword: 'required',
|
|
@@ -1220,7 +1222,7 @@ Provide:
|
|
|
1220
1222
|
}
|
|
1221
1223
|
// Validate each property
|
|
1222
1224
|
for (const [prop, propSchema] of Object.entries(properties)) {
|
|
1223
|
-
if (prop
|
|
1225
|
+
if (Object.hasOwn(dataObj, prop)) {
|
|
1224
1226
|
this.basicTypeValidation(dataObj[prop], propSchema, path ? `${path}.${prop}` : prop, errors, depth + 1);
|
|
1225
1227
|
}
|
|
1226
1228
|
}
|
|
@@ -308,7 +308,8 @@ export class SchemaValidatorService {
|
|
|
308
308
|
const additionalProperties = schema.additionalProperties;
|
|
309
309
|
// Check required properties
|
|
310
310
|
for (const prop of required) {
|
|
311
|
-
|
|
311
|
+
// #1136: own properties only; an inherited `constructor` is not present.
|
|
312
|
+
if (!Object.hasOwn(value, prop)) {
|
|
312
313
|
errors.push({
|
|
313
314
|
path: path ? `${path}.${prop}` : prop,
|
|
314
315
|
keyword: 'required',
|
|
@@ -320,7 +321,7 @@ export class SchemaValidatorService {
|
|
|
320
321
|
// Validate each property
|
|
321
322
|
for (const [prop, propValue] of Object.entries(value)) {
|
|
322
323
|
const propPath = path ? `${path}.${prop}` : prop;
|
|
323
|
-
if (prop
|
|
324
|
+
if (Object.hasOwn(properties, prop)) {
|
|
324
325
|
this.validateValue(propValue, properties[prop], propPath, errors, depth + 1);
|
|
325
326
|
}
|
|
326
327
|
else if (this.config.strictMode && additionalProperties === false) {
|
|
@@ -605,15 +606,17 @@ export class SchemaValidatorService {
|
|
|
605
606
|
const oldRequired = new Set(oldSchema.required || []);
|
|
606
607
|
const newRequired = new Set(newSchema.required || []);
|
|
607
608
|
// Check for removed properties
|
|
609
|
+
// #1136: own properties only, so a property named `constructor` or
|
|
610
|
+
// `toString` is compared like any other.
|
|
608
611
|
for (const prop of Object.keys(oldProps)) {
|
|
609
|
-
if (!(prop
|
|
612
|
+
if (!Object.hasOwn(newProps, prop)) {
|
|
610
613
|
const propPath = path ? `${path}.${prop}` : prop;
|
|
611
614
|
removals.push(propPath);
|
|
612
615
|
}
|
|
613
616
|
}
|
|
614
617
|
// Check for added properties
|
|
615
618
|
for (const prop of Object.keys(newProps)) {
|
|
616
|
-
if (!(prop
|
|
619
|
+
if (!Object.hasOwn(oldProps, prop)) {
|
|
617
620
|
const propPath = path ? `${path}.${prop}` : prop;
|
|
618
621
|
additions.push(propPath);
|
|
619
622
|
// New required property is breaking
|
|
@@ -639,7 +642,7 @@ export class SchemaValidatorService {
|
|
|
639
642
|
// Check for required changes
|
|
640
643
|
const newRequiredArray = Array.from(newRequired);
|
|
641
644
|
for (const prop of newRequiredArray) {
|
|
642
|
-
if (!oldRequired.has(prop) && prop
|
|
645
|
+
if (!oldRequired.has(prop) && Object.hasOwn(oldProps, prop)) {
|
|
643
646
|
const propPath = path ? `${path}.${prop}` : prop;
|
|
644
647
|
modifications.push({
|
|
645
648
|
path: propPath,
|
|
@@ -19,6 +19,15 @@
|
|
|
19
19
|
import * as fs from 'fs/promises';
|
|
20
20
|
import * as path from 'path';
|
|
21
21
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
22
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
23
|
+
/**
|
|
24
|
+
* #1161: coverage reports are found under caller-named directories, so read
|
|
25
|
+
* them from a validated descriptor: a report linked out of the project, or to
|
|
26
|
+
* a device such as /dev/zero, is refused instead of read.
|
|
27
|
+
*/
|
|
28
|
+
function readCoverageFile(file) {
|
|
29
|
+
return readConfinedText(file, { outsideRoot: 'allow' });
|
|
30
|
+
}
|
|
22
31
|
// ============================================================================
|
|
23
32
|
// LCOV Parser
|
|
24
33
|
// ============================================================================
|
|
@@ -28,7 +37,7 @@ import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
|
28
37
|
* LCOV format is the most common output from Istanbul, nyc, c8, etc.
|
|
29
38
|
*/
|
|
30
39
|
export async function parseLCOV(lcovPath, projectRoot) {
|
|
31
|
-
const content = await
|
|
40
|
+
const content = await readCoverageFile(lcovPath);
|
|
32
41
|
return parseLCOVContent(content, projectRoot || path.dirname(lcovPath));
|
|
33
42
|
}
|
|
34
43
|
/**
|
|
@@ -221,7 +230,7 @@ export function parseLCOVContent(content, projectRoot) {
|
|
|
221
230
|
* Parse JSON coverage data (Istanbul/Vitest format)
|
|
222
231
|
*/
|
|
223
232
|
export async function parseJSONCoverage(jsonPath, projectRoot) {
|
|
224
|
-
const content = await
|
|
233
|
+
const content = await readCoverageFile(jsonPath);
|
|
225
234
|
const data = safeJsonParse(content);
|
|
226
235
|
const root = projectRoot || path.dirname(jsonPath);
|
|
227
236
|
const files = new Map();
|
|
@@ -334,7 +343,7 @@ export async function parseJSONCoverage(jsonPath, projectRoot) {
|
|
|
334
343
|
* <report><package><class><method><counter type="LINE" missed="X" covered="Y"/></method></class></package></report>
|
|
335
344
|
*/
|
|
336
345
|
export async function parseJaCoCo(xmlPath, projectRoot) {
|
|
337
|
-
const content = await
|
|
346
|
+
const content = await readCoverageFile(xmlPath);
|
|
338
347
|
return parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
|
|
339
348
|
}
|
|
340
349
|
export function parseJaCoCoContent(content, projectRoot) {
|
|
@@ -437,7 +446,7 @@ function parseJaCoCoCounters(xml) {
|
|
|
437
446
|
* <Root CoveredStatements="X" TotalStatements="Y"><Assembly><Namespace><Type><Member Statement="..."/></Type></Namespace></Assembly></Root>
|
|
438
447
|
*/
|
|
439
448
|
export async function parseDotcover(xmlPath, projectRoot) {
|
|
440
|
-
const content = await
|
|
449
|
+
const content = await readCoverageFile(xmlPath);
|
|
441
450
|
return parseDotcoverContent(content, projectRoot || path.dirname(xmlPath));
|
|
442
451
|
}
|
|
443
452
|
export function parseDotcoverContent(content, projectRoot) {
|
|
@@ -531,7 +540,7 @@ export function parseDotcoverContent(content, projectRoot) {
|
|
|
531
540
|
* Also handles tarpaulin LCOV output by delegating to parseLCOVContent.
|
|
532
541
|
*/
|
|
533
542
|
export async function parseTarpaulin(filePath, projectRoot) {
|
|
534
|
-
const content = await
|
|
543
|
+
const content = await readCoverageFile(filePath);
|
|
535
544
|
const root = projectRoot || path.dirname(filePath);
|
|
536
545
|
// If it looks like LCOV, delegate
|
|
537
546
|
if (content.includes('SF:') && content.includes('end_of_record')) {
|
|
@@ -603,7 +612,7 @@ export function parseTarpaulinContent(content, projectRoot) {
|
|
|
603
612
|
* pkg/file.go:startLine.startCol,endLine.endCol numStatements count
|
|
604
613
|
*/
|
|
605
614
|
export async function parseGoCover(coverPath, projectRoot) {
|
|
606
|
-
const content = await
|
|
615
|
+
const content = await readCoverageFile(coverPath);
|
|
607
616
|
return parseGoCoverContent(content, projectRoot || path.dirname(coverPath));
|
|
608
617
|
}
|
|
609
618
|
export function parseGoCoverContent(content, projectRoot) {
|
|
@@ -681,7 +690,7 @@ export function parseGoCoverContent(content, projectRoot) {
|
|
|
681
690
|
* but sets the format and language appropriately.
|
|
682
691
|
*/
|
|
683
692
|
export async function parseKover(xmlPath, projectRoot) {
|
|
684
|
-
const content = await
|
|
693
|
+
const content = await readCoverageFile(xmlPath);
|
|
685
694
|
const report = parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
|
|
686
695
|
report.format = 'kover';
|
|
687
696
|
report.language = 'kotlin';
|
|
@@ -698,7 +707,7 @@ export async function parseKover(xmlPath, projectRoot) {
|
|
|
698
707
|
* { "targets": [ { "files": [ { "path": "...", "lineCoverage": 0.85, "coveredLines": N, "executableLines": N, "functions": [...] } ] } ] }
|
|
699
708
|
*/
|
|
700
709
|
export async function parseXcresult(jsonPath, projectRoot) {
|
|
701
|
-
const content = await
|
|
710
|
+
const content = await readCoverageFile(jsonPath);
|
|
702
711
|
return parseXcresultContent(content, projectRoot || path.dirname(jsonPath));
|
|
703
712
|
}
|
|
704
713
|
export function parseXcresultContent(content, projectRoot) {
|
|
@@ -830,7 +839,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
|
|
|
830
839
|
return parseXcresult(coveragePath, projectRoot);
|
|
831
840
|
}
|
|
832
841
|
// Content-based detection
|
|
833
|
-
const content = await
|
|
842
|
+
const content = await readCoverageFile(coveragePath);
|
|
834
843
|
const trimmed = content.trim();
|
|
835
844
|
if (trimmed.startsWith('{')) {
|
|
836
845
|
// Check for tarpaulin JSON structure
|
|
@@ -869,7 +878,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
|
|
|
869
878
|
// Language-based fallback: try the first format associated with the language
|
|
870
879
|
if (language) {
|
|
871
880
|
const langLower = language.toLowerCase();
|
|
872
|
-
const hints = LANGUAGE_FORMAT_HINTS[langLower];
|
|
881
|
+
const hints = Object.hasOwn(LANGUAGE_FORMAT_HINTS, langLower) ? LANGUAGE_FORMAT_HINTS[langLower] : undefined; // #1157
|
|
873
882
|
if (hints && hints.length > 0) {
|
|
874
883
|
try {
|
|
875
884
|
return await parseCoverage(coveragePath, projectRoot, hints[0]);
|
|
@@ -55,6 +55,8 @@ export interface FilePrediction {
|
|
|
55
55
|
contribution: number;
|
|
56
56
|
}[];
|
|
57
57
|
recommendations: string[];
|
|
58
|
+
/** Why this prediction is incomplete, e.g. git history timed out (#1115). */
|
|
59
|
+
warnings?: string[];
|
|
58
60
|
}
|
|
59
61
|
export interface RootCauseRequest {
|
|
60
62
|
defectId: string;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
7
8
|
import { DefectIntelligenceCoordinator, } from './coordinator.js';
|
|
8
9
|
import { DefectPredictorService, } from './services/defect-predictor.js';
|
|
9
10
|
import { PatternLearnerService, } from './services/pattern-learner.js';
|
|
@@ -79,8 +80,12 @@ export class DefectIntelligencePlugin extends BaseDomainPlugin {
|
|
|
79
80
|
if (!files || files.length === 0) {
|
|
80
81
|
return err(new Error('Invalid predict-defects payload: missing files'));
|
|
81
82
|
}
|
|
83
|
+
// #1126: refuse by name what FileReader would otherwise skip quietly.
|
|
84
|
+
const confined = await requirePayloadFiles('predict-defects', 'files', files, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
85
|
+
if (!confined.success)
|
|
86
|
+
return confined;
|
|
82
87
|
return this.coordinator.predictDefects({
|
|
83
|
-
files,
|
|
88
|
+
files: confined.value,
|
|
84
89
|
threshold: threshold ?? 0.7,
|
|
85
90
|
});
|
|
86
91
|
}],
|
|
@@ -112,8 +117,12 @@ export class DefectIntelligencePlugin extends BaseDomainPlugin {
|
|
|
112
117
|
if (!changedFiles || changedFiles.length === 0) {
|
|
113
118
|
return err(new Error('Invalid analyze-regression-risk payload: missing changedFiles'));
|
|
114
119
|
}
|
|
120
|
+
// #1126: a changeset may name deleted files, but never outside ones.
|
|
121
|
+
const confined = await requirePayloadFiles('analyze-regression-risk', 'changedFiles', changedFiles, { allowMissing: true });
|
|
122
|
+
if (!confined.success)
|
|
123
|
+
return confined;
|
|
115
124
|
return this.coordinator.analyzeRegressionRisk({
|
|
116
|
-
changeset:
|
|
125
|
+
changeset: confined.value,
|
|
117
126
|
baseline: payload.commitHash,
|
|
118
127
|
});
|
|
119
128
|
}],
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MemoryBackend } from '../../kernel/interfaces.js';
|
|
2
|
+
export declare const MAX_PREDICTION_HISTORY = 32;
|
|
3
|
+
type RiskLevel = 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
4
|
+
/** One file prediction as the defect-intelligence predictor recorded it. */
|
|
5
|
+
export interface DomainFilePrediction {
|
|
6
|
+
file: string;
|
|
7
|
+
probability: number;
|
|
8
|
+
riskLevel: RiskLevel;
|
|
9
|
+
factors: {
|
|
10
|
+
name: string;
|
|
11
|
+
contribution: number;
|
|
12
|
+
}[];
|
|
13
|
+
recommendations: string[];
|
|
14
|
+
}
|
|
15
|
+
/** A recorded prediction run, or `null` when the record is not a usable one. */
|
|
16
|
+
export declare function parsePredictionRecord(raw: unknown, now: number): {
|
|
17
|
+
id: string;
|
|
18
|
+
timestamp: string;
|
|
19
|
+
predictions: DomainFilePrediction[];
|
|
20
|
+
predictionMethod?: 'static-code-indicators';
|
|
21
|
+
estimated?: true;
|
|
22
|
+
filesSkipped?: number;
|
|
23
|
+
} | null;
|
|
24
|
+
/** Keep 32 usable immutable UUID runs, preserving tied-latest ambiguity. */
|
|
25
|
+
export declare function prunePredictionHistory(memory: Pick<MemoryBackend, 'search' | 'get' | 'delete'>, modelNamespace?: string): Promise<void>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=prediction-history.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export const MAX_PREDICTION_HISTORY = 32;
|
|
2
|
+
const MAX_PREDICTION_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
3
|
+
const NAMESPACE = 'defect-intelligence';
|
|
4
|
+
const RISK_LEVELS = ['critical', 'high', 'medium', 'low', 'info'];
|
|
5
|
+
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
6
|
+
function parseFilePrediction(raw) {
|
|
7
|
+
if (!isRecord(raw))
|
|
8
|
+
return null;
|
|
9
|
+
const { file, probability, riskLevel } = raw;
|
|
10
|
+
if (typeof file !== 'string' || file.length === 0)
|
|
11
|
+
return null;
|
|
12
|
+
if (typeof probability !== 'number' || !Number.isFinite(probability) || probability < 0 || probability > 1)
|
|
13
|
+
return null;
|
|
14
|
+
if (!RISK_LEVELS.includes(riskLevel))
|
|
15
|
+
return null;
|
|
16
|
+
const factors = Array.isArray(raw.factors)
|
|
17
|
+
? raw.factors.filter((f) => isRecord(f) && typeof f.name === 'string' && typeof f.contribution === 'number' && Number.isFinite(f.contribution))
|
|
18
|
+
: [];
|
|
19
|
+
const recommendations = Array.isArray(raw.recommendations)
|
|
20
|
+
? raw.recommendations.filter((r) => typeof r === 'string')
|
|
21
|
+
: [];
|
|
22
|
+
return { file, probability, riskLevel: riskLevel, factors, recommendations };
|
|
23
|
+
}
|
|
24
|
+
/** A recorded prediction run, or `null` when the record is not a usable one. */
|
|
25
|
+
export function parsePredictionRecord(raw, now) {
|
|
26
|
+
if (!isRecord(raw) || typeof raw.id !== 'string' || typeof raw.timestamp !== 'string')
|
|
27
|
+
return null;
|
|
28
|
+
const t = Date.parse(raw.timestamp);
|
|
29
|
+
if (!Number.isFinite(t) || t > now + 60_000 || now - t > MAX_PREDICTION_AGE_MS)
|
|
30
|
+
return null;
|
|
31
|
+
if (!Array.isArray(raw.predictions) || raw.predictions.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const predictions = raw.predictions.map(parseFilePrediction);
|
|
34
|
+
if (predictions.some((p) => p === null))
|
|
35
|
+
return null;
|
|
36
|
+
return {
|
|
37
|
+
id: raw.id, timestamp: raw.timestamp, predictions: predictions,
|
|
38
|
+
...(raw.predictionMethod === 'static-code-indicators' ? {
|
|
39
|
+
predictionMethod: 'static-code-indicators', estimated: true,
|
|
40
|
+
filesSkipped: typeof raw.filesSkipped === 'number' && Number.isSafeInteger(raw.filesSkipped) && raw.filesSkipped >= 0
|
|
41
|
+
? raw.filesSkipped : 0,
|
|
42
|
+
} : {}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Keep 32 usable immutable UUID runs, preserving tied-latest ambiguity. */
|
|
46
|
+
export async function prunePredictionHistory(memory, modelNamespace = 'defect-intelligence:predictor') {
|
|
47
|
+
const prefix = `${modelNamespace}:prediction:`;
|
|
48
|
+
const keys = await memory.search(`${prefix}*`, Number.MAX_SAFE_INTEGER, { namespace: NAMESPACE });
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const records = [];
|
|
51
|
+
const invalid = [];
|
|
52
|
+
for (const found of keys) {
|
|
53
|
+
const key = found.startsWith(`${NAMESPACE}:${prefix}`) ? found.slice(NAMESPACE.length + 1) : found;
|
|
54
|
+
if (!key.startsWith(prefix))
|
|
55
|
+
continue;
|
|
56
|
+
const parsed = parsePredictionRecord(await memory.get(key, { namespace: NAMESPACE }), now);
|
|
57
|
+
if (parsed)
|
|
58
|
+
records.push({ key, timestamp: Date.parse(parsed.timestamp), id: parsed.id });
|
|
59
|
+
else
|
|
60
|
+
invalid.push(key);
|
|
61
|
+
}
|
|
62
|
+
records.sort((a, b) => b.timestamp - a.timestamp || (a.id === b.id ? (a.key === b.key ? 0 : a.key > b.key ? -1 : 1) : a.id > b.id ? -1 : 1));
|
|
63
|
+
// Only observed immutable keys are candidates; concurrent new runs are untouched.
|
|
64
|
+
for (const key of [...invalid, ...records.slice(MAX_PREDICTION_HISTORY).map(record => record.key)]) {
|
|
65
|
+
await memory.delete(key, { namespace: NAMESPACE });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=prediction-history.js.map
|