agentic-qe 3.15.9 → 3.15.10
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 +251 -0
- package/assets/skills/skills-manifest.json +1 -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/audit/witness-chain.d.ts +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
- package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-SVXSHEET.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-WKQH36XL.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
- package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-EKOOFVST.js} +2 -2
- package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-OPS36NFZ.js} +4 -4
- package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-AO5NDZRI.js} +3 -3
- package/dist/cli/chunks/base-GTB6POYE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-TFLVEMMY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-ADBBJPYW.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-HGHUYYL5.js} +2 -2
- package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
- package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-2SXBBUM6.js} +2 -2
- package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-2T7RRL6G.js} +1 -1
- package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-2XGVTYVX.js} +2 -2
- package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-2ZI5FKSF.js} +2 -2
- package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
- package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-37OWRCUN.js} +1 -1
- package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-3P34JFQH.js} +4 -4
- package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-3Y7SPD72.js} +2 -2
- package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-4G63WT4F.js} +2 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
- package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
- package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-5LPYV3TK.js} +1 -1
- package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-62OAY5KJ.js} +1 -1
- package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-6C3II5OM.js} +2 -2
- package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-6GP6W46M.js} +2 -2
- package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-6KIL6CMD.js} +2 -2
- package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-6MVVSSID.js} +1 -1
- package/dist/cli/chunks/{chunk-JEP4ULR6.js → chunk-6P7424AO.js} +2 -2
- package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-6PX4OXQO.js} +2 -2
- package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-6S3WJGUV.js} +2 -2
- package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-6TB6YOCZ.js} +1 -1
- package/dist/cli/chunks/{chunk-VU2EL424.js → chunk-6X5DHU6Q.js} +1 -1
- package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-6XCMKIZN.js} +1 -1
- package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-7LFZ4CHM.js} +2 -2
- package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-7OZVZIBE.js} +2 -2
- package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-7PJIR4ST.js} +2 -2
- package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-7TB6FK4B.js} +1 -1
- package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-7ZCDZHDB.js} +2 -2
- package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-A55QKKT2.js} +2 -2
- package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ABFFWZPC.js} +428 -433
- package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-ACWFKES2.js} +2 -2
- package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-AH3ZD3NJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-AI4VYSFS.js} +2 -2
- package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
- package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
- package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-B6LTH6YV.js} +2 -2
- package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
- package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-C522H7XR.js} +54 -33
- package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-CESIR27V.js} +2 -2
- package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-CFBEBXLO.js} +3 -3
- package/dist/cli/chunks/{chunk-FJ4VTLLK.js → chunk-CMBLM26R.js} +2 -2
- package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-CZ2IF6MC.js} +1 -1
- package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-CZGOSJQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-D6DA2KFD.js} +2 -2
- package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-DBMNJSBV.js} +1 -1
- package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-DE4YJQJF.js} +2 -2
- package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-DEF34AFL.js} +2 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +3 -0
- package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-DMFTELBS.js} +2 -2
- package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-DNRWGATA.js} +10 -10
- package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-DT7SIJOA.js} +2 -2
- package/dist/cli/chunks/{chunk-6PXA2BQJ.js → chunk-DURHK377.js} +67 -67
- package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EAU5KDFO.js} +1 -1
- package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-EDLFX4ZB.js} +2 -2
- package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-EN2QSKFF.js} +2 -2
- package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-ERQKYIP7.js} +2 -2
- package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-ESUO3GTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EWFECZ2U.js} +2 -2
- package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-FAUCT5KR.js} +3 -3
- package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-FB6TI3BH.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-FBXTQNRH.js} +2 -2
- package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-FESZBPUB.js} +2 -2
- package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
- package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-FKL3R5JQ.js} +2 -2
- package/dist/cli/chunks/{chunk-N5PDFGCQ.js → chunk-FPUDRSFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-FZOWULMH.js} +1 -1
- package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-G3CZCUPM.js} +2 -2
- package/dist/cli/chunks/{chunk-FV3NHVC7.js → chunk-G5I6KGMW.js} +3 -3
- package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-GHBNRMSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GJHWY3ZX.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-GJMLK5UT.js} +2 -2
- package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-GRCIBCJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-GWZZ7DAO.js} +2 -2
- package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-GZLZCZ42.js} +2 -2
- package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-H2PYU7MN.js} +1 -1
- package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-H32EPIR2.js} +1 -1
- package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-H74Q7TJN.js} +1 -1
- package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
- package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-I33O4BRQ.js} +2 -2
- package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-IKISCIGH.js} +2 -2
- package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-IPJ7Q3AJ.js} +1 -1
- package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-IU2IV4NE.js} +1 -1
- package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-JHIY4VCC.js} +2 -2
- package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-KG336OV3.js} +2 -2
- package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-KI73QCR5.js} +2 -2
- package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-KNQ2ERFX.js} +2 -2
- package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-KOBVYY6H.js} +2 -2
- package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-KSIWGGJI.js} +8 -8
- package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LMS3Y7JD.js} +2 -2
- package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-LQEURY7C.js} +1 -1
- package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-LRZY4KS2.js} +2 -2
- package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-M2QV7PT7.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-MA7JIQ6U.js} +2 -2
- package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-MG27QY4D.js} +2 -2
- package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
- package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
- package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
- package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-NGKNYIQZ.js} +1 -1
- package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
- package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-NPPHWFA2.js} +3 -3
- package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-NSHU347M.js} +1 -1
- package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-NVYIZCSR.js} +2 -2
- package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-NW5JUCCG.js} +1 -1
- package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-NZYLNXT6.js} +3 -3
- package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-OBAREPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-ODJNUMV3.js} +2 -2
- package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-OEKP73MC.js} +2 -2
- package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-OPFGRS5S.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-OY2AHLSF.js} +1 -1
- package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-OY3NJNP2.js} +1 -1
- package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-PCEW6Q2C.js} +1 -1
- package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-PFG6VQ5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-PGYMKGOE.js} +2 -2
- package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-PPSAMXYN.js} +3 -3
- package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
- package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-RPHY2DU6.js} +2 -2
- package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-RWWOHCMG.js} +25 -20
- package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-S75EYIJG.js} +1 -1
- package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-SKQUUE4F.js} +5 -5
- package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
- package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-SU5H66SD.js} +2 -2
- package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-SY2IB442.js} +2 -2
- package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-TBLI254A.js} +2 -2
- package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-TNMBRDCA.js} +3 -3
- package/dist/cli/chunks/{chunk-P2CXVNKK.js → chunk-TYFZXDGZ.js} +2 -2
- package/dist/cli/chunks/{chunk-2XITOPYV.js → chunk-U4OICXV2.js} +2 -2
- package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-U53ZB4IX.js} +2 -2
- package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
- package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-UCJMVXO4.js} +2 -2
- package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-UHTTW3IT.js} +2 -2
- package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-V2M2XCR5.js} +1 -1
- package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-V2RSNVMW.js} +1 -1
- package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-V6JBOIMX.js} +1 -1
- package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-VFKF2XO7.js} +1 -1
- package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-VFSYMOAL.js} +2 -2
- package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-VJQYDYAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-VKRTTFB6.js} +2 -2
- package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-VWNFAW2M.js} +2 -2
- package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-WBM6N6IM.js} +1 -1
- package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-WDQ7IEZY.js} +2 -2
- package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-WDVRE6GN.js} +2 -2
- package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-WQ4PYWSW.js} +1 -1
- package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-WSF24I3D.js} +2 -2
- package/dist/cli/chunks/{chunk-6YL6JOQB.js → chunk-XBVUVFJK.js} +2 -2
- package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-XEB3NLJR.js} +2 -2
- package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-XFVTGAAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-XLZYRTNO.js} +2 -2
- package/dist/cli/chunks/{chunk-AR2E4B7K.js → chunk-XUZDBQ5X.js} +5 -5
- package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-Y76IAYQD.js} +1 -1
- package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-YAKGBHO4.js} +2 -2
- package/dist/cli/chunks/{chunk-JK2ME6IT.js → chunk-YBSBABOS.js} +2 -2
- package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-YCGP5VFP.js} +2 -2
- package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-YDAQK5UF.js} +1 -1
- package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-YK3BVZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-YK7JN5N7.js} +4 -4
- package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-YKMU4LBV.js} +1 -1
- package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-YYTGXD3R.js} +2 -2
- package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-Z2O2YJAF.js} +2 -2
- package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-Z7IYW5U7.js} +1 -1
- package/dist/cli/chunks/{chunk-XZJ2O3VC.js → chunk-ZG5666GJ.js} +1 -1
- package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-ZXPY654C.js} +1 -1
- package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-MSKMVH5X.js} +2 -2
- package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-7ODMNAUM.js} +2 -2
- package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-FXZ7ZZW3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-4VOUEPOX.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-7D4SGLM4.js} +2 -2
- package/dist/cli/chunks/client-POSVREVS.js +2 -0
- package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-WRRT7BGQ.js} +2 -2
- package/dist/cli/chunks/{code-ONKLMVQ2.js → code-ZDJRIL3S.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4S4SHM56.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-YTRHNDWR.js} +2 -2
- package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-6N64JUXJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-IIDR66LB.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-SVVFY3S2.js} +2 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-VGFS6IBX.js} +2 -2
- package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B7MCGNTE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-UPETT57E.js} +2 -2
- package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
- package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-CQFNZLXU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-PJVABHON.js} +2 -2
- package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-56SKAGWX.js} +2 -2
- package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-UYTYUMLN.js} +2 -2
- package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-YOYLBYJE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-7TARX2XF.js} +2 -2
- package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
- package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
- package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-GNB574IM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-KTZ5SF54.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-ITX5LQ57.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-KFHSR5YF.js} +2 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-RLFW3GSX.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-EM2URCYZ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-CBP73QHY.js} +2 -2
- package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-IP7XE34Z.js} +34 -34
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-ONAYHU25.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-VINJRAID.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
- package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-RYVV5R3Z.js} +2 -2
- package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-MPRGWMOE.js} +6 -6
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
- package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-OPD7JBRL.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-M4OPUNK2.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
- package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-4UWTQLMF.js} +24 -24
- package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-SQ56FF6Z.js} +4 -4
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
- package/dist/cli/chunks/{load-ZM43WGDO.js → load-HPHKDGGL.js} +2 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
- package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
- package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-PFQ3KPVJ.js} +5 -5
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-3VDRX6TZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-PJ576R63.js} +2 -2
- package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-72QP4UU7.js} +63 -19
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-754YQW7C.js} +2 -2
- package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
- package/dist/cli/chunks/{platform-KJDABL5C.js → platform-3E3DXLYB.js} +2 -2
- package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-7FUQAKRE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-BQRYMUTG.js} +2 -2
- package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-H52QGC6B.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
- package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-QO4XPAUM.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-FBKE5E6F.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RWGOVOXO.js} +2 -2
- package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-LF76ZOBD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-3BYEBTQ7.js} +2 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
- package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-DST7BVCU.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-XE32PGKC.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
- package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
- package/dist/cli/chunks/{security-AUDTRX3I.js → security-VSPNKCDS.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
- package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-O4QUTK6L.js} +2 -2
- package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-Z2BP6EOG.js} +2 -2
- package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-R36WNLQG.js} +2 -2
- package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
- package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-QF5Y3EMZ.js} +2 -2
- package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-43PYE75J.js} +2 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
- package/dist/cli/chunks/{test-XFSGQELD.js → test-UWA377D4.js} +16 -16
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-YQZPJRRN.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
- package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-DO6WLMXP.js} +2 -2
- package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-H5RGFKVO.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
- package/dist/cli/chunks/{types-JTWLBAZJ.js → types-PJS2FGPF.js} +2 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
- package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-4IC4F6AB.js} +2 -2
- package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-DHUWW7PF.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-OERQNOX5.js} +2 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-TV7DMKES.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-QZPWSH37.js} +2 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-YXENHB42.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-HL26AGFO.js} +2 -2
- package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-EOVVCN2E.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
- package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
- package/dist/cli/commands/fleet.js +19 -12
- 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/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +6 -0
- package/dist/cli/utils/ci-output.d.ts +9 -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/context/sources/git-source.js +6 -2
- package/dist/coordination/handlers/code-intelligence-handlers.js +60 -5
- package/dist/coordination/handlers/coverage-handlers.js +10 -1
- package/dist/coordination/handlers/requirements-handlers.js +16 -2
- package/dist/coordination/handlers/security-handlers.js +11 -1
- 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 +19 -7
- 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/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/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/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 +6 -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 +45 -58
- 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/scanner-orchestrator.js +4 -1
- package/dist/domains/test-execution/coordinator.d.ts +5 -0
- package/dist/domains/test-execution/coordinator.js +35 -20
- package/dist/domains/test-execution/interfaces.d.ts +25 -0
- 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/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/plugin.js +7 -2
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/hooks/cross-phase-hooks.js +2 -1
- package/dist/init/phases/10-workers.js +50 -6
- 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/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/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/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- 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 +607 -580
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +5 -0
- package/dist/mcp/handlers/domain-handler-configs.js +11 -3
- 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 +3 -0
- package/dist/mcp/handlers/task-handlers.js +35 -8
- package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
- package/dist/mcp/protocol-server.js +2 -0
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- 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 +58 -10
- package/dist/mcp/tools/quality-assessment/gate.js +12 -1
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -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/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/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -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/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/validation/gate-reexecute.js +7 -4
- 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-4URT6JO2.js +0 -2
- package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
- package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
- package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
- 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-KHSRIPBP.js +0 -180
- package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
- package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
- package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
- package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
- package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
- 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
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* Covers: index-code, predict-defects
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs/promises';
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
9
|
+
import { prunePredictionHistory } from '../../domains/defect-intelligence/prediction-history.js';
|
|
8
10
|
import * as path from 'path';
|
|
9
11
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
12
|
import { toError } from '../../shared/error-utils.js';
|
|
@@ -12,6 +14,7 @@ import { discoverSourceFiles } from './handler-utils.js';
|
|
|
12
14
|
import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
|
|
13
15
|
import { nothingIndexedError } from '../../domains/code-intelligence/index-path-guard.js';
|
|
14
16
|
import { createLogger } from '../../logging/logger-factory.js';
|
|
17
|
+
import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
15
18
|
const logger = createLogger('CodeIntelligenceHandlers');
|
|
16
19
|
async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
|
|
17
20
|
if (!ctx.getCodeIntelligenceCoordinator)
|
|
@@ -43,13 +46,24 @@ async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
|
|
|
43
46
|
return undefined;
|
|
44
47
|
}
|
|
45
48
|
}
|
|
49
|
+
/** #1126: a caller-named target must be a file or directory inside the project. */
|
|
50
|
+
async function confineTarget(taskType, target) {
|
|
51
|
+
if (!target || target === '.')
|
|
52
|
+
return ok(undefined);
|
|
53
|
+
return requirePayloadPath(taskType, 'target', target, { allowDirectory: true, allowMissing: true });
|
|
54
|
+
}
|
|
46
55
|
export function registerCodeIntelligenceHandlers(ctx) {
|
|
47
56
|
// Register code indexing handler - REAL IMPLEMENTATION
|
|
48
57
|
ctx.registerHandler('index-code', async (task) => {
|
|
49
58
|
const payload = task.payload;
|
|
50
59
|
try {
|
|
60
|
+
// #1126: refuse an outside target before listing it, so the error
|
|
61
|
+
// cannot name the files in an outside directory.
|
|
62
|
+
const confined = await confineTarget('index-code', payload.target);
|
|
63
|
+
if (!confined.success)
|
|
64
|
+
return confined;
|
|
51
65
|
const kg = ctx.getKnowledgeGraph();
|
|
52
|
-
const targetPath = payload.target || process.cwd();
|
|
66
|
+
const targetPath = confined.value ?? (payload.target || process.cwd());
|
|
53
67
|
const startTime = Date.now();
|
|
54
68
|
// Discover files to index
|
|
55
69
|
const filesToIndex = await discoverSourceFiles(targetPath, {
|
|
@@ -139,7 +153,10 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
139
153
|
ctx.registerHandler('predict-defects', async (task) => {
|
|
140
154
|
const payload = task.payload;
|
|
141
155
|
try {
|
|
142
|
-
const
|
|
156
|
+
const confined = await confineTarget('predict-defects', payload.target);
|
|
157
|
+
if (!confined.success)
|
|
158
|
+
return confined;
|
|
159
|
+
const targetPath = confined.value ?? path.resolve(payload.target || process.cwd());
|
|
143
160
|
const minConfidence = payload.minConfidence || 0.5;
|
|
144
161
|
// Discover actual source files in the target directory
|
|
145
162
|
const sourceFiles = await discoverSourceFiles(targetPath, { includeTests: false });
|
|
@@ -156,6 +173,8 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
156
173
|
}
|
|
157
174
|
// Analyze each file for defect indicators based on real metrics
|
|
158
175
|
const predictedDefects = [];
|
|
176
|
+
const predictions = [];
|
|
177
|
+
let filesSkipped = 0;
|
|
159
178
|
for (const filePath of sourceFiles) {
|
|
160
179
|
try {
|
|
161
180
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
@@ -206,6 +225,18 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
206
225
|
reasons.push('Potentially long functions');
|
|
207
226
|
}
|
|
208
227
|
probability = Math.min(probability, 0.95);
|
|
228
|
+
// Keep every analyzed file, including a clean reanalysis below the
|
|
229
|
+
// display threshold. Absolute paths retain the project-relative
|
|
230
|
+
// identity when the caller targeted a nested directory (#1050).
|
|
231
|
+
const roundedProbability = Math.round(probability * 100) / 100;
|
|
232
|
+
predictions.push({
|
|
233
|
+
file: path.resolve(filePath),
|
|
234
|
+
probability: roundedProbability,
|
|
235
|
+
riskLevel: probability >= 0.8 ? 'critical' : probability >= 0.6 ? 'high'
|
|
236
|
+
: probability >= 0.4 ? 'medium' : probability >= 0.2 ? 'low' : 'info',
|
|
237
|
+
factors: [{ name: 'staticCodeIndicators', contribution: roundedProbability }],
|
|
238
|
+
recommendations: reasons,
|
|
239
|
+
});
|
|
209
240
|
if (probability >= minConfidence) {
|
|
210
241
|
// Use relative path for readability
|
|
211
242
|
const relativePath = filePath.startsWith(targetPath)
|
|
@@ -219,9 +250,27 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
219
250
|
}
|
|
220
251
|
}
|
|
221
252
|
catch {
|
|
253
|
+
filesSkipped++;
|
|
222
254
|
// Skip files that can't be read
|
|
223
255
|
}
|
|
224
256
|
}
|
|
257
|
+
if (predictions.length === 0) {
|
|
258
|
+
return err(new Error(`Defect prediction could not read any of ${sourceFiles.length} source files`));
|
|
259
|
+
}
|
|
260
|
+
// Record the run in the schema consumed by the background worker.
|
|
261
|
+
// These are static risk estimates from files actually read, not an
|
|
262
|
+
// empirically calibrated likelihood of future production defects.
|
|
263
|
+
const id = randomUUID();
|
|
264
|
+
await ctx.memory.set(`defect-intelligence:predictor:prediction:${id}`, {
|
|
265
|
+
id,
|
|
266
|
+
timestamp: new Date().toISOString(),
|
|
267
|
+
predictions,
|
|
268
|
+
predictionMethod: 'static-code-indicators',
|
|
269
|
+
estimated: true,
|
|
270
|
+
filesSkipped,
|
|
271
|
+
scanStatus: filesSkipped > 0 ? 'partial' : 'complete',
|
|
272
|
+
}, { namespace: 'defect-intelligence', ttl: 86400 * 7 });
|
|
273
|
+
await prunePredictionHistory(ctx.memory);
|
|
225
274
|
// Sort by probability descending
|
|
226
275
|
predictedDefects.sort((a, b) => b.probability - a.probability);
|
|
227
276
|
// Calculate overall risk score
|
|
@@ -232,7 +281,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
232
281
|
// Generate recommendations from actual findings
|
|
233
282
|
const recommendations = [];
|
|
234
283
|
if (predictedDefects.length > 0) {
|
|
235
|
-
recommendations.push(`${predictedDefects.length} files flagged for potential defects out of ${
|
|
284
|
+
recommendations.push(`${predictedDefects.length} files flagged for potential defects out of ${predictions.length} analyzed`);
|
|
236
285
|
const topFile = predictedDefects[0];
|
|
237
286
|
recommendations.push(`Highest risk: ${topFile.file} (${Math.round(topFile.probability * 100)}%) — ${topFile.reason}`);
|
|
238
287
|
}
|
|
@@ -243,13 +292,19 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
243
292
|
recommendations.push('Address TODO/FIXME comments to reduce technical debt');
|
|
244
293
|
}
|
|
245
294
|
if (predictedDefects.length === 0) {
|
|
246
|
-
recommendations.push(
|
|
295
|
+
recommendations.push(filesSkipped > 0
|
|
296
|
+
? `No analyzed files exceeded the threshold; ${filesSkipped} unreadable source files remain unassessed`
|
|
297
|
+
: 'No files exceeded the defect probability threshold — code looks healthy');
|
|
247
298
|
}
|
|
248
299
|
return ok({
|
|
249
300
|
predictedDefects: predictedDefects.slice(0, 20), // Top 20
|
|
250
301
|
riskScore,
|
|
251
302
|
recommendations,
|
|
252
|
-
filesAnalyzed:
|
|
303
|
+
filesAnalyzed: predictions.length,
|
|
304
|
+
filesSkipped,
|
|
305
|
+
scanStatus: filesSkipped > 0 ? 'partial' : 'complete',
|
|
306
|
+
predictionMethod: 'static-code-indicators',
|
|
307
|
+
estimated: true,
|
|
253
308
|
});
|
|
254
309
|
}
|
|
255
310
|
catch (error) {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { ok, err } from '../../shared/types/index.js';
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
|
+
import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
9
10
|
import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
|
|
10
11
|
import { describeNoData, evaluateCoverageForTarget, isUnmeasured, packageFilterForTarget, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
|
|
11
12
|
import { randomUUID } from 'crypto';
|
|
@@ -200,8 +201,16 @@ export function registerCoverageHandlers(ctx) {
|
|
|
200
201
|
ctx.registerHandler('analyze-coverage', async (task) => {
|
|
201
202
|
const payload = task.payload;
|
|
202
203
|
try {
|
|
204
|
+
// #1126: collect coverage (which may run the tests) only inside the
|
|
205
|
+
// project. A missing target keeps its own message below.
|
|
206
|
+
let targetPath = payload.target || process.cwd();
|
|
207
|
+
if (payload.target && payload.target !== '.') {
|
|
208
|
+
const confined = await requirePayloadPath('analyze-coverage', 'target', payload.target, { allowDirectory: true, allowMissing: true });
|
|
209
|
+
if (!confined.success)
|
|
210
|
+
return confined;
|
|
211
|
+
targetPath = confined.value;
|
|
212
|
+
}
|
|
203
213
|
const analyzer = ctx.getCoverageAnalyzer();
|
|
204
|
-
const targetPath = payload.target || process.cwd();
|
|
205
214
|
const threshold = payload.threshold || 80;
|
|
206
215
|
const { collected, ranTests, noData, projectRoot, notes, runStatus, testRun } = await collectCoverage(targetPath);
|
|
207
216
|
// #995 review N5: say so plainly instead of "no coverage data found".
|
|
@@ -8,12 +8,20 @@ import * as fs from 'fs/promises';
|
|
|
8
8
|
import { ok, err } from '../../shared/types/index.js';
|
|
9
9
|
import { toError, toErrorMessage } from '../../shared/error-utils.js';
|
|
10
10
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
11
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
11
12
|
export function registerRequirementsHandlers(ctx) {
|
|
12
13
|
// Register requirements validation handler
|
|
13
14
|
ctx.registerHandler('validate-requirements', async (task) => {
|
|
14
15
|
const payload = task.payload;
|
|
15
16
|
try {
|
|
16
|
-
|
|
17
|
+
// #1126: list requirement files only inside the project.
|
|
18
|
+
let targetPath = process.cwd();
|
|
19
|
+
if (payload.requirementsPath) {
|
|
20
|
+
const confined = await requirePayloadPath('validate-requirements', 'requirementsPath', payload.requirementsPath, { allowDirectory: true, allowMissing: true });
|
|
21
|
+
if (!confined.success)
|
|
22
|
+
return confined;
|
|
23
|
+
targetPath = confined.value;
|
|
24
|
+
}
|
|
17
25
|
// Look for requirements files (markdown, feature files, etc.)
|
|
18
26
|
const reqFiles = await discoverSourceFiles(targetPath, {
|
|
19
27
|
includeTests: false,
|
|
@@ -58,9 +66,15 @@ export function registerRequirementsHandlers(ctx) {
|
|
|
58
66
|
error: 'contractPath is required. Provide a path to an OpenAPI spec, JSON Schema, or Protocol Buffer file.',
|
|
59
67
|
});
|
|
60
68
|
}
|
|
69
|
+
// #1126: read only a regular file inside the project, within the size
|
|
70
|
+
// limit; the result reports its line count and whether it parses. A
|
|
71
|
+
// missing file keeps its valid:false result below.
|
|
72
|
+
const confined = await requirePayloadPath('validate-contracts', 'contractPath', payload.contractPath, { allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
73
|
+
if (!confined.success)
|
|
74
|
+
return confined;
|
|
61
75
|
// Check if the contract file exists
|
|
62
76
|
try {
|
|
63
|
-
const content = await fs.readFile(
|
|
77
|
+
const content = await fs.readFile(confined.value, 'utf-8');
|
|
64
78
|
const isJson = payload.contractPath.endsWith('.json');
|
|
65
79
|
const isYaml = payload.contractPath.endsWith('.yaml') || payload.contractPath.endsWith('.yml');
|
|
66
80
|
// Basic structural validation
|
|
@@ -13,12 +13,22 @@ import { FilePath } from '../../shared/value-objects/index.js';
|
|
|
13
13
|
import { generateSecurityRecommendations } from './handler-utils.js';
|
|
14
14
|
import { discoverSecurityFiles, isSecuritySourceFile } from '../../domains/security-compliance/scan-discovery.js';
|
|
15
15
|
import { runDependencyAdvisoryScan } from '../../domains/security-compliance/dependency-advisory-engine.js';
|
|
16
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
16
17
|
export function registerSecurityHandlers(ctx) {
|
|
17
18
|
// Register security scan handler - REAL IMPLEMENTATION
|
|
18
19
|
ctx.registerHandler('scan-security', async (task) => {
|
|
19
20
|
const payload = task.payload;
|
|
20
21
|
try {
|
|
21
|
-
|
|
22
|
+
// #1126: read (SAST, manifests, dependencies) only a file or directory
|
|
23
|
+
// inside the project. A DAST-only scan reads no target path.
|
|
24
|
+
let targetPath = path.resolve(payload.target || process.cwd());
|
|
25
|
+
const readsTarget = payload.sast !== false || payload.dependencies === true;
|
|
26
|
+
if (payload.target && payload.target !== '.' && readsTarget) {
|
|
27
|
+
const confined = await requirePayloadPath('scan-security', 'target', payload.target, { allowDirectory: true, allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
28
|
+
if (!confined.success)
|
|
29
|
+
return confined;
|
|
30
|
+
targetPath = confined.value;
|
|
31
|
+
}
|
|
22
32
|
const sastRequested = payload.sast !== false;
|
|
23
33
|
const discoveryResult = sastRequested ? await discoverSecurityFiles(targetPath) : undefined;
|
|
24
34
|
const filesToScan = discoveryResult?.files ?? [];
|
|
@@ -8,11 +8,12 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
|
-
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
11
|
+
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
12
12
|
import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
|
|
13
13
|
import { jestExactPathPattern, runnerFilePath } from '../../shared/test-runner-args.js';
|
|
14
14
|
import { testCasesFromRunnerReport } from '../../domains/test-execution/services/runner-test-cases.js';
|
|
15
15
|
import { runTestRunnerProcess } from '../../shared/test-runner-process.js';
|
|
16
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
16
17
|
function escapeRegExp(s) {
|
|
17
18
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
18
19
|
}
|
|
@@ -69,9 +70,19 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
69
70
|
if (payload.sourceFiles && payload.sourceFiles.length > 0) {
|
|
70
71
|
sourceFiles = payload.sourceFiles;
|
|
71
72
|
}
|
|
72
|
-
else if (payload.filePath) {
|
|
73
|
+
else if (payload.filePath && !payload.sourceCode) {
|
|
74
|
+
// With sourceCode, filePath is only the import target written into the
|
|
75
|
+
// generated tests (tool contract); it is neither read nor required.
|
|
73
76
|
sourceFiles = [payload.filePath];
|
|
74
77
|
}
|
|
78
|
+
if (sourceFiles.length > 0) {
|
|
79
|
+
// #1126: the generator reads each file whole, so only project files.
|
|
80
|
+
const field = payload.sourceFiles?.length ? 'sourceFiles' : 'filePath';
|
|
81
|
+
const confined = await requirePayloadFiles('generate-tests', field, sourceFiles, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
82
|
+
if (!confined.success)
|
|
83
|
+
return confined;
|
|
84
|
+
sourceFiles = confined.value;
|
|
85
|
+
}
|
|
75
86
|
else if (payload.sourceCode) {
|
|
76
87
|
// Write temporary file for analysis if only source code provided
|
|
77
88
|
// Use correct file extension based on language parameter
|
|
@@ -175,15 +186,22 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
175
186
|
ctx.registerHandler('execute-tests', async (task) => {
|
|
176
187
|
const payload = task.payload;
|
|
177
188
|
try {
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
189
|
+
const requestedFiles = payload.testFiles || [];
|
|
190
|
+
if (requestedFiles.length === 0) {
|
|
180
191
|
return err(new TestRunnerExecutionError('No test files specified. Provide testFiles array with paths to test files.'));
|
|
181
192
|
}
|
|
182
193
|
// Validate test file paths before invoking a runner.
|
|
183
194
|
const safePathPattern = /^[a-zA-Z0-9_./@-]+$/;
|
|
184
|
-
if (
|
|
195
|
+
if (requestedFiles.some(file => !safePathPattern.test(file))) {
|
|
185
196
|
return err(new TestRunnerExecutionError('Some test file paths contain invalid characters and were rejected. Provide concrete paths; expand glob patterns before calling.'));
|
|
186
197
|
}
|
|
198
|
+
// #1126: a runner executes what it is given, so only files and
|
|
199
|
+
// directories (#909 Jest targets) inside the project, run as the real
|
|
200
|
+
// paths that were checked. A missing file is still reported by the runner.
|
|
201
|
+
const confined = await requirePayloadFiles('execute-tests', 'testFiles', requestedFiles, { allowMissing: true, allowDirectory: true });
|
|
202
|
+
if (!confined.success)
|
|
203
|
+
return confined;
|
|
204
|
+
const testFiles = confined.value;
|
|
187
205
|
// A caller-owned MCP task skips the Queen's plugin dispatch. Run through
|
|
188
206
|
// that same domain API here: it owns persistence, measured quality evidence
|
|
189
207
|
// and TestRunStarted/Completed events as well as the runner itself.
|
|
@@ -230,7 +248,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
230
248
|
}
|
|
231
249
|
const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
|
|
232
250
|
if (execution.error) {
|
|
233
|
-
return err(new TestRunnerExecutionError(`${runner} could not complete: ${diagnostics
|
|
251
|
+
return err(new TestRunnerExecutionError(`${runner} could not complete: ${capDiagnostics(diagnostics)}`));
|
|
234
252
|
}
|
|
235
253
|
try {
|
|
236
254
|
const jsonStart = output.indexOf('{');
|
|
@@ -259,7 +277,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
259
277
|
catch {
|
|
260
278
|
// A malformed report cannot establish that the requested tests completed.
|
|
261
279
|
}
|
|
262
|
-
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${diagnostics
|
|
280
|
+
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${capDiagnostics(diagnostics)}`));
|
|
263
281
|
}
|
|
264
282
|
catch (error) {
|
|
265
283
|
return err(toError(error));
|
|
@@ -20,6 +20,19 @@ import { SwarmGraph } from './swarm-graph';
|
|
|
20
20
|
import { MinCutHealthMonitor } from './mincut-health-monitor';
|
|
21
21
|
import { MinCutPersistence } from './mincut-persistence';
|
|
22
22
|
import { SwarmVertex, SwarmEdge, MinCutHealth, MinCutHealthConfig, WeakVertex } from './interfaces';
|
|
23
|
+
/**
|
|
24
|
+
* #1130: Queen health reads the MinCut of the fleet's own topology (domains
|
|
25
|
+
* and long-lived agents). An agent spawned for one task is a leaf with a
|
|
26
|
+
* single edge, so counting it would put every running task below threshold.
|
|
27
|
+
*/
|
|
28
|
+
export interface FleetMinCutHealth extends MinCutHealth {
|
|
29
|
+
/** Status of the topology without task-scoped agents; this one degrades Queen health. */
|
|
30
|
+
readonly fleetStatus: MinCutHealth['status'];
|
|
31
|
+
/** MinCut of the topology without task-scoped agents. `minCutValue` stays the raw value. */
|
|
32
|
+
readonly fleetMinCutValue: number;
|
|
33
|
+
/** Running task-scoped agents left out of `fleetStatus`. */
|
|
34
|
+
readonly taskAgents: number;
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* Configuration for Queen-MinCut integration
|
|
25
38
|
*/
|
|
@@ -56,6 +69,13 @@ export declare class QueenMinCutBridge {
|
|
|
56
69
|
private readonly monitor;
|
|
57
70
|
private readonly persistence;
|
|
58
71
|
private eventSubscriptions;
|
|
72
|
+
/**
|
|
73
|
+
* Agents with a vertex in the graph, from QueenAgentSpawned or from the
|
|
74
|
+
* coordinator when the graph was built. Pruned once they complete (#1130).
|
|
75
|
+
*/
|
|
76
|
+
private readonly spawnedAgentIds;
|
|
77
|
+
/** The subset spawned for a single task (#1130). */
|
|
78
|
+
private readonly taskAgentIds;
|
|
59
79
|
private snapshotTimer;
|
|
60
80
|
private initialized;
|
|
61
81
|
constructor(eventBus: EventBus, agentCoordinator: AgentCoordinator, config?: Partial<QueenMinCutConfig>);
|
|
@@ -100,11 +120,29 @@ export declare class QueenMinCutBridge {
|
|
|
100
120
|
* Convert MinCut alerts to Queen health issues
|
|
101
121
|
*/
|
|
102
122
|
getHealthIssuesFromMinCut(): HealthIssue[];
|
|
123
|
+
/**
|
|
124
|
+
* #1130: nothing publishes QueenAgentTerminated, so a finished task agent
|
|
125
|
+
* stayed in the topology and kept the fleet degraded after its run. Drop the
|
|
126
|
+
* vertex of every tracked agent that completed normally or that the
|
|
127
|
+
* coordinator no longer lists. A failed agent keeps its vertex (see
|
|
128
|
+
* failedAgentIssues), so a crash never makes the fleet look healthier.
|
|
129
|
+
* Returns the tracked agents that failed.
|
|
130
|
+
*/
|
|
131
|
+
private pruneCompletedAgents;
|
|
132
|
+
/** #1130: one issue per failed agent, task-scoped or long-lived. */
|
|
133
|
+
private failedAgentIssues;
|
|
134
|
+
private isTaskAgentVertex;
|
|
135
|
+
/**
|
|
136
|
+
* #1130: MinCut health with the fleet reading next to the raw one. The fleet
|
|
137
|
+
* reading drops task-scoped agents from a copy of the graph; the raw graph,
|
|
138
|
+
* its value and its alerts are unchanged.
|
|
139
|
+
*/
|
|
140
|
+
getFleetMinCutHealth(): FleetMinCutHealth;
|
|
103
141
|
/**
|
|
104
142
|
* Extend Queen health with MinCut metrics
|
|
105
143
|
*/
|
|
106
144
|
extendQueenHealth(baseHealth: QueenHealth): QueenHealth & {
|
|
107
|
-
minCut?:
|
|
145
|
+
minCut?: FleetMinCutHealth;
|
|
108
146
|
};
|
|
109
147
|
/**
|
|
110
148
|
* Extend Queen metrics with MinCut data
|
|
@@ -44,6 +44,13 @@ export class QueenMinCutBridge {
|
|
|
44
44
|
monitor;
|
|
45
45
|
persistence;
|
|
46
46
|
eventSubscriptions = [];
|
|
47
|
+
/**
|
|
48
|
+
* Agents with a vertex in the graph, from QueenAgentSpawned or from the
|
|
49
|
+
* coordinator when the graph was built. Pruned once they complete (#1130).
|
|
50
|
+
*/
|
|
51
|
+
spawnedAgentIds = new Set();
|
|
52
|
+
/** The subset spawned for a single task (#1130). */
|
|
53
|
+
taskAgentIds = new Set();
|
|
47
54
|
snapshotTimer = null;
|
|
48
55
|
initialized = false;
|
|
49
56
|
constructor(eventBus, agentCoordinator, config = {}) {
|
|
@@ -137,6 +144,8 @@ export class QueenMinCutBridge {
|
|
|
137
144
|
// Add agent vertices
|
|
138
145
|
for (const agent of agents) {
|
|
139
146
|
this.addAgentVertex(agent);
|
|
147
|
+
// #1130: tracked so a completed agent is pruned like a spawned one
|
|
148
|
+
this.spawnedAgentIds.add(agent.id);
|
|
140
149
|
}
|
|
141
150
|
// Add edges based on coordination patterns
|
|
142
151
|
this.buildCoordinationEdges(agents);
|
|
@@ -239,7 +248,10 @@ export class QueenMinCutBridge {
|
|
|
239
248
|
subscribeToEvents() {
|
|
240
249
|
// Agent spawned
|
|
241
250
|
const onAgentSpawned = async (event) => {
|
|
242
|
-
const { agentId, domain, type, capabilities } = event.payload;
|
|
251
|
+
const { agentId, domain, type, capabilities, taskId } = event.payload;
|
|
252
|
+
this.spawnedAgentIds.add(agentId);
|
|
253
|
+
if (taskId)
|
|
254
|
+
this.taskAgentIds.add(agentId);
|
|
243
255
|
// Cast to extended AgentInfo with optional properties
|
|
244
256
|
this.addAgentVertex({
|
|
245
257
|
id: agentId,
|
|
@@ -381,7 +393,9 @@ export class QueenMinCutBridge {
|
|
|
381
393
|
}
|
|
382
394
|
// Add issues for weak vertices
|
|
383
395
|
const weakVertices = this.monitor.getWeakVertices();
|
|
384
|
-
|
|
396
|
+
// #1130: a task-scoped agent is a leaf by design, not a weak point of the fleet
|
|
397
|
+
const fleetWeakVertices = weakVertices.filter(weak => !this.isTaskAgentVertex(weak.vertex.id));
|
|
398
|
+
for (const weak of fleetWeakVertices.slice(0, 3)) { // Top 3 weak vertices
|
|
385
399
|
if (weak.riskScore > 0.7) {
|
|
386
400
|
issues.push({
|
|
387
401
|
severity: 'high',
|
|
@@ -393,6 +407,66 @@ export class QueenMinCutBridge {
|
|
|
393
407
|
}
|
|
394
408
|
return issues;
|
|
395
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* #1130: nothing publishes QueenAgentTerminated, so a finished task agent
|
|
412
|
+
* stayed in the topology and kept the fleet degraded after its run. Drop the
|
|
413
|
+
* vertex of every tracked agent that completed normally or that the
|
|
414
|
+
* coordinator no longer lists. A failed agent keeps its vertex (see
|
|
415
|
+
* failedAgentIssues), so a crash never makes the fleet look healthier.
|
|
416
|
+
* Returns the tracked agents that failed.
|
|
417
|
+
*/
|
|
418
|
+
pruneCompletedAgents() {
|
|
419
|
+
if (this.spawnedAgentIds.size === 0)
|
|
420
|
+
return [];
|
|
421
|
+
const byId = new Map(this.agentCoordinator.listAgents().map(agent => [agent.id, agent]));
|
|
422
|
+
const failed = [];
|
|
423
|
+
for (const agentId of this.spawnedAgentIds) {
|
|
424
|
+
const agent = byId.get(agentId);
|
|
425
|
+
if (agent?.status === 'failed') {
|
|
426
|
+
failed.push(agent);
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
if (agent && agent.status !== 'completed')
|
|
430
|
+
continue;
|
|
431
|
+
this.graph.removeVertex(`agent:${agentId}`);
|
|
432
|
+
this.spawnedAgentIds.delete(agentId);
|
|
433
|
+
this.taskAgentIds.delete(agentId);
|
|
434
|
+
}
|
|
435
|
+
return failed;
|
|
436
|
+
}
|
|
437
|
+
/** #1130: one issue per failed agent, task-scoped or long-lived. */
|
|
438
|
+
failedAgentIssues(failed) {
|
|
439
|
+
return failed.map(agent => ({
|
|
440
|
+
severity: 'high',
|
|
441
|
+
message: `Agent ${agent.id} (${agent.type}) failed`,
|
|
442
|
+
timestamp: new Date(),
|
|
443
|
+
domain: agent.domain,
|
|
444
|
+
}));
|
|
445
|
+
}
|
|
446
|
+
isTaskAgentVertex(vertexId) {
|
|
447
|
+
return vertexId.startsWith('agent:') && this.taskAgentIds.has(vertexId.slice('agent:'.length));
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* #1130: MinCut health with the fleet reading next to the raw one. The fleet
|
|
451
|
+
* reading drops task-scoped agents from a copy of the graph; the raw graph,
|
|
452
|
+
* its value and its alerts are unchanged.
|
|
453
|
+
*/
|
|
454
|
+
getFleetMinCutHealth() {
|
|
455
|
+
const raw = this.getMinCutHealth();
|
|
456
|
+
if (this.taskAgentIds.size === 0) {
|
|
457
|
+
return { ...raw, fleetStatus: raw.status, fleetMinCutValue: raw.minCutValue, taskAgents: 0 };
|
|
458
|
+
}
|
|
459
|
+
const fleetGraph = this.graph.clone();
|
|
460
|
+
for (const agentId of this.taskAgentIds)
|
|
461
|
+
fleetGraph.removeVertex(`agent:${agentId}`);
|
|
462
|
+
const fleet = createMinCutHealthMonitor(fleetGraph, this.config).getHealth();
|
|
463
|
+
return {
|
|
464
|
+
...raw,
|
|
465
|
+
fleetStatus: fleet.status,
|
|
466
|
+
fleetMinCutValue: fleet.minCutValue,
|
|
467
|
+
taskAgents: this.taskAgentIds.size,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
396
470
|
/**
|
|
397
471
|
* Extend Queen health with MinCut metrics
|
|
398
472
|
*/
|
|
@@ -400,19 +474,22 @@ export class QueenMinCutBridge {
|
|
|
400
474
|
if (!this.config.includeInQueenHealth) {
|
|
401
475
|
return baseHealth;
|
|
402
476
|
}
|
|
403
|
-
const
|
|
404
|
-
const
|
|
477
|
+
const failedAgents = this.pruneCompletedAgents();
|
|
478
|
+
const minCutHealth = this.getFleetMinCutHealth();
|
|
479
|
+
// #1130: with only task-scoped agents the fleet topology is idle, and the
|
|
480
|
+
// raw alerts describe those agents, not the fleet.
|
|
481
|
+
const minCutIssues = minCutHealth.fleetStatus === 'idle' ? [] : this.getHealthIssuesFromMinCut();
|
|
405
482
|
// Issue #205 fix: Only degrade status for actual critical issues
|
|
406
483
|
// 'idle' status is normal for fresh installs - don't degrade health
|
|
407
484
|
let status = baseHealth.status;
|
|
408
|
-
if (minCutHealth.
|
|
485
|
+
if ((minCutHealth.fleetStatus === 'critical' || failedAgents.length > 0) && status === 'healthy') {
|
|
409
486
|
status = 'degraded';
|
|
410
487
|
}
|
|
411
488
|
// Note: 'idle' status does NOT trigger degradation - it's expected for fresh systems
|
|
412
489
|
return {
|
|
413
490
|
...baseHealth,
|
|
414
491
|
status,
|
|
415
|
-
issues: [...baseHealth.issues, ...minCutIssues],
|
|
492
|
+
issues: [...baseHealth.issues, ...this.failedAgentIssues(failedAgents), ...minCutIssues],
|
|
416
493
|
minCut: minCutHealth,
|
|
417
494
|
};
|
|
418
495
|
}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* deleted. A pattern used or re-scored since it was selected is left active.
|
|
15
15
|
* - The archive copy is read back before the active key is deleted, so a
|
|
16
16
|
* failed write never loses the pattern.
|
|
17
|
+
* The move is implemented in domains/learning-optimization/pattern-archive.ts.
|
|
17
18
|
*/
|
|
18
|
-
import type { MemoryBackend } from '../../kernel/interfaces.js';
|
|
19
19
|
import type { LearnedPattern } from '../../domains/learning-optimization/interfaces.js';
|
|
20
|
-
export type ArchiveOutcome
|
|
20
|
+
export { archiveSelectedPattern, type ArchiveOutcome } from '../../domains/learning-optimization/pattern-archive.js';
|
|
21
21
|
/** Counts of one consolidation run's archive step, for logs and results. */
|
|
22
22
|
export interface ArchiveCounts {
|
|
23
23
|
/** Patterns the retention and trim rules selected for removal. */
|
|
@@ -30,10 +30,6 @@ export interface ArchiveCounts {
|
|
|
30
30
|
failed: number;
|
|
31
31
|
}
|
|
32
32
|
export declare function emptyArchiveCounts(): ArchiveCounts;
|
|
33
|
-
/**
|
|
34
|
-
* Move one selected pattern to its archive key in the learning namespace.
|
|
35
|
-
*/
|
|
36
|
-
export declare function archiveSelectedPattern(memory: MemoryBackend, pattern: LearnedPattern, archivedAt?: Date): Promise<ArchiveOutcome>;
|
|
37
33
|
/** True when the pattern was created less than `graceDays` days ago. */
|
|
38
34
|
export declare function isWithinRetentionGrace(pattern: LearnedPattern, graceDays: number, now?: number): boolean;
|
|
39
35
|
//# sourceMappingURL=learning-consolidation-archive.d.ts.map
|
|
@@ -14,37 +14,14 @@
|
|
|
14
14
|
* deleted. A pattern used or re-scored since it was selected is left active.
|
|
15
15
|
* - The archive copy is read back before the active key is deleted, so a
|
|
16
16
|
* failed write never loses the pattern.
|
|
17
|
+
* The move is implemented in domains/learning-optimization/pattern-archive.ts.
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
|
+
// The move itself lives with the patterns, so the merge path in
|
|
20
|
+
// LearningCoordinatorService uses the same read-back rule (#1106).
|
|
21
|
+
export { archiveSelectedPattern } from '../../domains/learning-optimization/pattern-archive.js';
|
|
19
22
|
export function emptyArchiveCounts() {
|
|
20
23
|
return { selected: 0, archived: 0, missing: 0, failed: 0 };
|
|
21
24
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Move one selected pattern to its archive key in the learning namespace.
|
|
24
|
-
*/
|
|
25
|
-
export async function archiveSelectedPattern(memory, pattern, archivedAt = new Date()) {
|
|
26
|
-
const activeKey = `${LEARNING_PATTERN_KEY_PREFIX}${pattern.id}`;
|
|
27
|
-
if (!isActivePatternKey(activeKey))
|
|
28
|
-
return 'missing';
|
|
29
|
-
const current = await memory.get(activeKey, LEARNING_NS);
|
|
30
|
-
if (!current || current.id !== pattern.id || changedSinceSelection(current, pattern))
|
|
31
|
-
return 'missing';
|
|
32
|
-
const archiveKey = `${LEARNING_PATTERN_KEY_PREFIX}archived:${pattern.id}`;
|
|
33
|
-
await memory.set(archiveKey, { ...pattern, archivedAt }, { ...LEARNING_NS, persist: true });
|
|
34
|
-
const copy = await memory.get(archiveKey, LEARNING_NS);
|
|
35
|
-
if (!copy || copy.id !== pattern.id)
|
|
36
|
-
return 'failed';
|
|
37
|
-
await memory.delete(activeKey, LEARNING_NS);
|
|
38
|
-
return 'archived';
|
|
39
|
-
}
|
|
40
|
-
/** True when the stored record's scores or last use differ from the selected snapshot. */
|
|
41
|
-
function changedSinceSelection(current, selected) {
|
|
42
|
-
const time = (value) => new Date(value).getTime();
|
|
43
|
-
return (!Object.is(current.usageCount, selected.usageCount) ||
|
|
44
|
-
!Object.is(current.confidence, selected.confidence) ||
|
|
45
|
-
!Object.is(current.successRate, selected.successRate) ||
|
|
46
|
-
!Object.is(time(current.lastUsedAt), time(selected.lastUsedAt)));
|
|
47
|
-
}
|
|
48
25
|
/** True when the pattern was created less than `graceDays` days ago. */
|
|
49
26
|
export function isWithinRetentionGrace(pattern, graceDays, now = Date.now()) {
|
|
50
27
|
if (graceDays <= 0)
|
|
@@ -9,6 +9,11 @@ import { Result, DomainName, DomainEvent } from '../../shared/types/index.js';
|
|
|
9
9
|
import { EventBus, MemoryBackend } from '../../kernel/interfaces.js';
|
|
10
10
|
import { type ArchiveCounts } from './learning-consolidation-archive.js';
|
|
11
11
|
import type { LearnedPattern, PatternType, IPatternLearningService, IKnowledgeSynthesisService } from '../../domains/learning-optimization/interfaces.js';
|
|
12
|
+
/**
|
|
13
|
+
* Id of a merged pattern a dry run predicts but never stores (#1106). It only
|
|
14
|
+
* appears in `removedPatterns` when the predicted merge would itself be trimmed.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DRY_RUN_MERGE_ID_PREFIX = "dry-run-merge:";
|
|
12
17
|
export interface LearningConsolidationConfig {
|
|
13
18
|
/** Minimum patterns per domain to trigger consolidation */
|
|
14
19
|
minPatternsForConsolidation: number;
|
|
@@ -115,10 +120,24 @@ export interface TransferablePattern {
|
|
|
115
120
|
transferConfidence: number;
|
|
116
121
|
reason: string;
|
|
117
122
|
}
|
|
123
|
+
/** One step of a run that did not complete (#1106). */
|
|
124
|
+
export interface ConsolidationError {
|
|
125
|
+
/** Domain the step ran for; absent for run-wide steps. */
|
|
126
|
+
domain?: DomainName;
|
|
127
|
+
step: 'consolidate' | 'merge' | 'archive' | 'knowledge-update' | 'transfer';
|
|
128
|
+
error: string;
|
|
129
|
+
}
|
|
118
130
|
export interface ConsolidationResult {
|
|
119
131
|
consolidationId: string;
|
|
120
132
|
/** True when nothing was merged, archived or written (#1071). */
|
|
121
133
|
dryRun: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* #1106: `completed` only when every step of every domain succeeded;
|
|
136
|
+
* `partial` when some failed (see `errors`). When every domain fails,
|
|
137
|
+
* `execute()` returns an error instead of a result.
|
|
138
|
+
*/
|
|
139
|
+
status: 'completed' | 'partial';
|
|
140
|
+
errors: ConsolidationError[];
|
|
122
141
|
startedAt: Date;
|
|
123
142
|
completedAt: Date;
|
|
124
143
|
stats: ConsolidationStats;
|
|
@@ -134,6 +153,11 @@ export interface DomainConsolidationReport {
|
|
|
134
153
|
removedPatterns: RemovedPatternInfo[];
|
|
135
154
|
/** Outcome of archiving `removedPatterns` (all zero but `selected` in a dry run). */
|
|
136
155
|
archiveCounts: ArchiveCounts;
|
|
156
|
+
/** #1106: merges that failed; their source patterns were left active and kept. */
|
|
157
|
+
mergeFailures: Array<{
|
|
158
|
+
sourcePatternIds: string[];
|
|
159
|
+
error: string;
|
|
160
|
+
}>;
|
|
137
161
|
topPerformingPatterns: LearnedPattern[];
|
|
138
162
|
improvementAreas: string[];
|
|
139
163
|
}
|