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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Queen Task Queue
|
|
3
|
+
* Extracted from queen-task-management.ts - priority queue operations, the
|
|
4
|
+
* queue drain, and handing a released slot back to the queue.
|
|
5
|
+
*/
|
|
6
|
+
import type { DomainName, Priority } from '../shared/types';
|
|
7
|
+
import type { QueenTask } from './queen-types.js';
|
|
8
|
+
import { type QueenTaskContext } from './queen-task-management.js';
|
|
9
|
+
/**
|
|
10
|
+
* PERF-001 FIX: Comparator for tasks - sorted by createdAt ascending (oldest first / FIFO within priority)
|
|
11
|
+
*/
|
|
12
|
+
export declare const taskComparator: import("../shared/utils/binary-insert").Comparator<QueenTask>;
|
|
13
|
+
/**
|
|
14
|
+
* PERF-001 FIX: Use binary insertion O(log n) instead of sort O(n log n)
|
|
15
|
+
*/
|
|
16
|
+
export declare function enqueueTask(taskQueue: Map<Priority, QueenTask[]>, domainQueues: Map<DomainName, QueenTask[]>, task: QueenTask): void;
|
|
17
|
+
/**
|
|
18
|
+
* Remove a task from all queues.
|
|
19
|
+
* PERF-008: Only iterate the task's targetDomains instead of ALL_DOMAINS.
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeFromQueues(taskQueue: Map<Priority, QueenTask[]>, domainQueues: Map<DomainName, QueenTask[]>, task: QueenTask): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get the position of a task within the priority queues.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getQueuePosition(taskQueue: Map<Priority, QueenTask[]>, task: QueenTask): number;
|
|
26
|
+
/**
|
|
27
|
+
* Process the queue: dequeue highest-priority tasks and assign them.
|
|
28
|
+
* CC-002 FIX: Uses atomic counter for capacity check.
|
|
29
|
+
*/
|
|
30
|
+
export declare function processQueue(ctx: QueenTaskContext): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Give back the slot a task held and hand it to the queue: a running drain
|
|
33
|
+
* picks it up on its next scan, otherwise a new drain starts.
|
|
34
|
+
*/
|
|
35
|
+
export declare function releaseSlot(ctx: QueenTaskContext): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Mark a task that never started as failed, publish QueenTaskFailed (#1124)
|
|
38
|
+
* and hand the slot it held to the queue.
|
|
39
|
+
*/
|
|
40
|
+
export declare function settleFailedBeforeRun(ctx: QueenTaskContext, task: QueenTask, domain: DomainName | undefined, reason: string): Promise<void>;
|
|
41
|
+
//# sourceMappingURL=queen-task-queue.d.ts.map
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Queen Task Queue
|
|
3
|
+
* Extracted from queen-task-management.ts - priority queue operations, the
|
|
4
|
+
* queue drain, and handing a released slot back to the queue.
|
|
5
|
+
*/
|
|
6
|
+
import { binaryInsert, createdAtComparator } from '../shared/utils/index.js';
|
|
7
|
+
import { toErrorMessage } from '../shared/error-utils.js';
|
|
8
|
+
import { assignTask } from './queen-task-management.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Task comparator for priority queue binary insertion
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* PERF-001 FIX: Comparator for tasks - sorted by createdAt ascending (oldest first / FIFO within priority)
|
|
14
|
+
*/
|
|
15
|
+
export const taskComparator = createdAtComparator();
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Queue operations
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* PERF-001 FIX: Use binary insertion O(log n) instead of sort O(n log n)
|
|
21
|
+
*/
|
|
22
|
+
export function enqueueTask(taskQueue, domainQueues, task) {
|
|
23
|
+
const priorityQueue = taskQueue.get(task.priority);
|
|
24
|
+
if (priorityQueue) {
|
|
25
|
+
binaryInsert(priorityQueue, task, taskComparator);
|
|
26
|
+
}
|
|
27
|
+
// Also add to domain-specific queues (unsorted - just for load tracking)
|
|
28
|
+
for (const domain of task.targetDomains) {
|
|
29
|
+
const domainQueue = domainQueues.get(domain);
|
|
30
|
+
if (domainQueue) {
|
|
31
|
+
domainQueue.push(task);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Remove a task from all queues.
|
|
37
|
+
* PERF-008: Only iterate the task's targetDomains instead of ALL_DOMAINS.
|
|
38
|
+
*/
|
|
39
|
+
export function removeFromQueues(taskQueue, domainQueues, task) {
|
|
40
|
+
const priorityQueue = taskQueue.get(task.priority);
|
|
41
|
+
if (priorityQueue) {
|
|
42
|
+
const idx = priorityQueue.findIndex(t => t.id === task.id);
|
|
43
|
+
if (idx !== -1) {
|
|
44
|
+
priorityQueue.splice(idx, 1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const domain of task.targetDomains) {
|
|
48
|
+
const domainQueue = domainQueues.get(domain);
|
|
49
|
+
if (domainQueue) {
|
|
50
|
+
const idx = domainQueue.findIndex(t => t.id === task.id);
|
|
51
|
+
if (idx !== -1) {
|
|
52
|
+
domainQueue.splice(idx, 1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the position of a task within the priority queues.
|
|
59
|
+
*/
|
|
60
|
+
export function getQueuePosition(taskQueue, task) {
|
|
61
|
+
let position = 0;
|
|
62
|
+
for (const p of ['p0', 'p1', 'p2', 'p3']) {
|
|
63
|
+
const queue = taskQueue.get(p);
|
|
64
|
+
if (queue) {
|
|
65
|
+
if (p === task.priority) {
|
|
66
|
+
position += queue.findIndex(t => t.id === task.id);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
position += queue.length;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return position;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Process the queue: dequeue highest-priority tasks and assign them.
|
|
76
|
+
* CC-002 FIX: Uses atomic counter for capacity check.
|
|
77
|
+
*/
|
|
78
|
+
export async function processQueue(ctx) {
|
|
79
|
+
if (ctx.runningTaskCounter >= ctx.config.maxConcurrentTasks) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// #1081: while this drain runs, a task failed at dispatch frees its slot
|
|
83
|
+
// here instead of starting a nested drain (one stack frame per failed task).
|
|
84
|
+
drainDepth.set(ctx.tasks, (drainDepth.get(ctx.tasks) ?? 0) + 1);
|
|
85
|
+
try {
|
|
86
|
+
// #1127: a slot released elsewhere while this drain awaits marks it dirty,
|
|
87
|
+
// so it scans again from p0 rather than leaving the slot unused.
|
|
88
|
+
do {
|
|
89
|
+
drainDirty.delete(ctx.tasks);
|
|
90
|
+
for (const priority of ['p0', 'p1', 'p2', 'p3']) {
|
|
91
|
+
const queue = ctx.taskQueue.get(priority);
|
|
92
|
+
if (!queue || queue.length === 0)
|
|
93
|
+
continue;
|
|
94
|
+
let task = shiftDispatchableTask(ctx, queue);
|
|
95
|
+
while (task) {
|
|
96
|
+
removeFromQueues(ctx.taskQueue, ctx.domainQueues, task);
|
|
97
|
+
// CC-002 FIX: Increment counter before assigning queued task
|
|
98
|
+
ctx.runningTaskCounter++;
|
|
99
|
+
let assigned;
|
|
100
|
+
try {
|
|
101
|
+
assigned = await assignTask(ctx, task);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
// #1081: a queued task that cannot be assigned (no healthy domain, open
|
|
108
|
+
// breaker) has no caller waiting on the result. Fail it with the reason
|
|
109
|
+
// rather than leave it queued forever on a held slot.
|
|
110
|
+
if (!assigned.success && (ctx.tasks.get(task.id)?.status ?? 'queued') === 'queued') {
|
|
111
|
+
await settleFailedBeforeRun(ctx, task, undefined, assigned.error.message);
|
|
112
|
+
}
|
|
113
|
+
if (ctx.runningTaskCounter >= ctx.config.maxConcurrentTasks) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// #1127: fill every free slot, whether this task started, failed
|
|
117
|
+
// before running or was cancelled while it was being assigned.
|
|
118
|
+
task = shiftDispatchableTask(ctx, queue);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
} while (drainDirty.has(ctx.tasks) && ctx.runningTaskCounter < ctx.config.maxConcurrentTasks);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
const depth = (drainDepth.get(ctx.tasks) ?? 1) - 1;
|
|
125
|
+
if (depth > 0)
|
|
126
|
+
drainDepth.set(ctx.tasks, depth);
|
|
127
|
+
else {
|
|
128
|
+
drainDepth.delete(ctx.tasks);
|
|
129
|
+
drainDirty.delete(ctx.tasks);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Drains in progress per Queen, keyed by its task map (the task context
|
|
135
|
+
* object is rebuilt for every call).
|
|
136
|
+
*/
|
|
137
|
+
const drainDepth = new WeakMap();
|
|
138
|
+
/** #1127: Queens with a slot released while a drain was running. */
|
|
139
|
+
const drainDirty = new WeakSet();
|
|
140
|
+
/**
|
|
141
|
+
* Give back the slot a task held and hand it to the queue: a running drain
|
|
142
|
+
* picks it up on its next scan, otherwise a new drain starts.
|
|
143
|
+
*/
|
|
144
|
+
export async function releaseSlot(ctx) {
|
|
145
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
146
|
+
if (drainDepth.has(ctx.tasks)) {
|
|
147
|
+
drainDirty.add(ctx.tasks);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// The drain dispatches other tasks. The caller whose task released this
|
|
151
|
+
// slot does not wait for it (#1140), and its failure belongs to none of
|
|
152
|
+
// them, so it must not reach that caller.
|
|
153
|
+
void processQueue(ctx).catch(error => {
|
|
154
|
+
console.warn('[Queen] Queue drain after a released slot failed:', toErrorMessage(error));
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Take the next task that is still waiting to run. A queued task can reach a
|
|
159
|
+
* terminal state without being dequeued, e.g. when its caller executes it
|
|
160
|
+
* directly (#1070). Dispatching it again would flip it back to running and
|
|
161
|
+
* leak a capacity slot, so such entries are dropped from the queues instead.
|
|
162
|
+
*/
|
|
163
|
+
function shiftDispatchableTask(ctx, queue) {
|
|
164
|
+
let task = queue.shift();
|
|
165
|
+
while (task) {
|
|
166
|
+
const status = ctx.tasks.get(task.id)?.status;
|
|
167
|
+
if (status === undefined || status === 'queued')
|
|
168
|
+
return task;
|
|
169
|
+
removeFromQueues(ctx.taskQueue, ctx.domainQueues, task);
|
|
170
|
+
task = queue.shift();
|
|
171
|
+
}
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Mark a task that never started as failed, publish QueenTaskFailed (#1124)
|
|
176
|
+
* and hand the slot it held to the queue.
|
|
177
|
+
*/
|
|
178
|
+
export async function settleFailedBeforeRun(ctx, task, domain, reason) {
|
|
179
|
+
ctx.tasks.set(task.id, {
|
|
180
|
+
taskId: task.id,
|
|
181
|
+
task,
|
|
182
|
+
status: 'failed',
|
|
183
|
+
assignedDomain: domain,
|
|
184
|
+
assignedAgents: [],
|
|
185
|
+
retryCount: ctx.tasks.get(task.id)?.retryCount ?? 0,
|
|
186
|
+
error: reason,
|
|
187
|
+
completedAt: new Date(),
|
|
188
|
+
});
|
|
189
|
+
ctx.tasksFailed++;
|
|
190
|
+
ctx.auditLogger.logFail(task.id, undefined, reason);
|
|
191
|
+
await ctx.publishEvent('TaskFailed', { taskId: task.id, domain, error: reason });
|
|
192
|
+
await releaseSlot(ctx);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=queen-task-queue.js.map
|
|
@@ -151,7 +151,7 @@ export interface IQueenCoordinator {
|
|
|
151
151
|
triggerWorkStealing(): Promise<number>;
|
|
152
152
|
listAllAgents(): AgentInfo[];
|
|
153
153
|
getAgentsByDomain(domain: DomainName): AgentInfo[];
|
|
154
|
-
requestAgentSpawn(domain: DomainName, type: string, capabilities: string[]): Promise<Result<string, Error>>;
|
|
154
|
+
requestAgentSpawn(domain: DomainName, type: string, capabilities: string[], taskId?: string): Promise<Result<string, Error>>;
|
|
155
155
|
getHealth(): QueenHealth;
|
|
156
156
|
getMetrics(): QueenMetrics;
|
|
157
157
|
executeProtocol(protocolId: string, params?: Record<string, unknown>): Promise<Result<string, Error>>;
|
|
@@ -14,8 +14,13 @@ export interface QueenWorkStealingContext {
|
|
|
14
14
|
getIdleDomains(): DomainName[];
|
|
15
15
|
getBusyDomains(): DomainName[];
|
|
16
16
|
getDomainLoad(domain: DomainName): number;
|
|
17
|
+
/** #1140: free Queen slots; a steal starts a task, so it needs one */
|
|
18
|
+
availableSlots(): number;
|
|
19
|
+
/** #1124: the domain is configured for the task and its plugin can execute it */
|
|
20
|
+
canExecuteInDomain(domain: DomainName, task: QueenTask): boolean;
|
|
17
21
|
removeFromQueues(task: QueenTask): void;
|
|
18
|
-
|
|
22
|
+
/** Dispatch a stolen task; resolves whether it now runs in `domain`. */
|
|
23
|
+
assignTaskToDomain(task: QueenTask, domain: DomainName): Promise<boolean>;
|
|
19
24
|
publishEvent(type: string, payload: Record<string, unknown>): Promise<void>;
|
|
20
25
|
}
|
|
21
26
|
/**
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* exponential backoff and automatic disable on repeated failures.
|
|
5
5
|
*/
|
|
6
6
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
7
|
-
import { canDomainHandleTask } from './queen-task-management.js';
|
|
8
7
|
// ============================================================================
|
|
9
8
|
// Work stealing algorithm
|
|
10
9
|
// ============================================================================
|
|
@@ -26,14 +25,18 @@ export async function triggerWorkStealing(ctx) {
|
|
|
26
25
|
break;
|
|
27
26
|
const queue = ctx.domainQueues.get(busyDomain) || [];
|
|
28
27
|
const stealCount = Math.min(queue.length, ctx.config.workStealing.stealBatchSize);
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
// #1140: each steal takes a slot, so stop when none is free.
|
|
29
|
+
for (let i = 0; i < stealCount && idleDomains.length > 0 && ctx.availableSlots() > 0; i++) {
|
|
30
|
+
const task = queue.find(t => ctx.canExecuteInDomain(idleDomains[0], t));
|
|
31
31
|
if (task) {
|
|
32
32
|
const stealerDomain = idleDomains.shift();
|
|
33
33
|
ctx.removeFromQueues(task);
|
|
34
|
+
// #1124: a task that is not running afterwards (already terminal, or
|
|
35
|
+
// failed at assignment) was not stolen.
|
|
36
|
+
if (!await ctx.assignTaskToDomain(task, stealerDomain))
|
|
37
|
+
continue;
|
|
34
38
|
// SEC-003 Simplified: Log work stealing for observability
|
|
35
39
|
ctx.auditLogger.logSteal(task.id, busyDomain, stealerDomain);
|
|
36
|
-
await ctx.assignTaskToDomain(task, stealerDomain);
|
|
37
40
|
stolenCount++;
|
|
38
41
|
ctx.tasksStolen++;
|
|
39
42
|
await ctx.publishEvent('TaskStolen', {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1125 review: task_orchestrate and `aqe fleet run` now submit the domains'
|
|
3
|
+
* concrete handler types (sast-scan, analyze-quality) for the abstract types
|
|
4
|
+
* scan-security and assess-quality. These adapters map those handler results
|
|
5
|
+
* onto the report shapes ResultSaver already writes, so they are saved by the
|
|
6
|
+
* security and quality savers rather than as generic JSON. Nothing missing
|
|
7
|
+
* from a result is filled in: absent values stay absent.
|
|
8
|
+
*/
|
|
9
|
+
import type { TaskType } from './queen-types.js';
|
|
10
|
+
/** The saver type and report for a task result; other types pass through. */
|
|
11
|
+
export declare function resultForSaver(taskType: string, result: unknown): {
|
|
12
|
+
saveType: TaskType;
|
|
13
|
+
report: unknown;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=result-saver-adapters.d.ts.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const asRecord = (value) => value !== null && typeof value === 'object' ? value : {};
|
|
2
|
+
/** sast-scan's SASTResult -> the scan-security report shape. */
|
|
3
|
+
function securityReport(result) {
|
|
4
|
+
const data = asRecord(result);
|
|
5
|
+
const summary = asRecord(data.summary);
|
|
6
|
+
const findings = Array.isArray(data.vulnerabilities) ? data.vulnerabilities : [];
|
|
7
|
+
const count = (severity) => typeof summary[severity] === 'number' ? summary[severity] : 0;
|
|
8
|
+
return {
|
|
9
|
+
vulnerabilities: findings.length,
|
|
10
|
+
critical: count('critical'),
|
|
11
|
+
high: count('high'),
|
|
12
|
+
medium: count('medium'),
|
|
13
|
+
low: count('low'),
|
|
14
|
+
topVulnerabilities: findings.slice(0, 10).map(f => ({
|
|
15
|
+
type: f.title ?? f.category ?? 'finding',
|
|
16
|
+
severity: f.severity ?? 'unknown',
|
|
17
|
+
file: f.location?.file ?? '',
|
|
18
|
+
line: f.location?.line ?? 0,
|
|
19
|
+
})),
|
|
20
|
+
findings: findings.map(f => ({
|
|
21
|
+
title: f.title, type: f.category, severity: f.severity ?? 'unknown', location: f.location?.file
|
|
22
|
+
? { file: f.location.file, line: f.location.line } : undefined, description: f.description,
|
|
23
|
+
})),
|
|
24
|
+
recommendations: [],
|
|
25
|
+
evidence: data.evidence,
|
|
26
|
+
coverage: data.coverage,
|
|
27
|
+
analysisDepth: 'sast-patterns',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** analyze-quality's analysis -> the assess-quality report shape. No gate runs. */
|
|
31
|
+
function qualityReport(result) {
|
|
32
|
+
const data = asRecord(result);
|
|
33
|
+
const score = asRecord(data.score);
|
|
34
|
+
const metrics = Array.isArray(data.metrics) ? data.metrics : [];
|
|
35
|
+
const unmeasured = Array.isArray(data.unmeasured)
|
|
36
|
+
? data.unmeasured.map(u => u.metric).filter((m) => !!m)
|
|
37
|
+
: [];
|
|
38
|
+
return {
|
|
39
|
+
...(typeof score.overall === 'number' ? { qualityScore: score.overall } : {}),
|
|
40
|
+
passed: false,
|
|
41
|
+
gateEvaluated: false,
|
|
42
|
+
metrics: Object.fromEntries(metrics.filter(m => m.name && typeof m.value === 'number').map(m => [m.name, m.value])),
|
|
43
|
+
recommendations: Array.isArray(data.recommendations) ? data.recommendations : [],
|
|
44
|
+
unmeasured,
|
|
45
|
+
evidenceStatus: unmeasured.length > 0 ? 'insufficient-evidence' : 'measured',
|
|
46
|
+
scoreBasis: metrics.map(m => m.name).filter((m) => !!m),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** The saver type and report for a task result; other types pass through. */
|
|
50
|
+
export function resultForSaver(taskType, result) {
|
|
51
|
+
switch (taskType) {
|
|
52
|
+
case 'sast-scan': return { saveType: 'scan-security', report: securityReport(result) };
|
|
53
|
+
case 'analyze-quality': return { saveType: 'assess-quality', report: qualityReport(result) };
|
|
54
|
+
default: return { saveType: taskType, report: result };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=result-saver-adapters.js.map
|
|
@@ -58,7 +58,7 @@ export declare class ResultSaver {
|
|
|
58
58
|
/**
|
|
59
59
|
* Save task result in appropriate format(s)
|
|
60
60
|
*/
|
|
61
|
-
save(taskId: string, taskType: TaskType,
|
|
61
|
+
save(taskId: string, taskType: TaskType, taskResult: unknown, options?: SaveOptions): Promise<SavedResult>;
|
|
62
62
|
private saveTestGeneration;
|
|
63
63
|
private saveCoverage;
|
|
64
64
|
private saveSecurityScan;
|
|
@@ -7,6 +7,7 @@ import * as path from 'path';
|
|
|
7
7
|
import { createHash, randomBytes } from 'crypto';
|
|
8
8
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
9
9
|
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
10
|
+
import { resultForSaver } from './result-saver-adapters.js';
|
|
10
11
|
/** Cap on the sanitized stem of a generated test file name (see generatedTestFilename). */
|
|
11
12
|
const MAX_GENERATED_STEM_LENGTH = 100;
|
|
12
13
|
function securityReportExecution(data) {
|
|
@@ -92,12 +93,14 @@ export class ResultSaver {
|
|
|
92
93
|
/**
|
|
93
94
|
* Save task result in appropriate format(s)
|
|
94
95
|
*/
|
|
95
|
-
async save(taskId, taskType,
|
|
96
|
+
async save(taskId, taskType, taskResult, options = {}) {
|
|
97
|
+
// #1125: concrete handler types are saved by their abstract type's saver.
|
|
98
|
+
const { saveType, report: result } = resultForSaver(taskType, taskResult);
|
|
96
99
|
const timestamp = new Date();
|
|
97
100
|
const files = [];
|
|
98
101
|
// Database-free mode (#534): do not write .agentic-qe/results/* to disk.
|
|
99
102
|
if (process.env.AQE_MEMORY_BACKEND === 'memory') {
|
|
100
|
-
return { taskId, taskType, timestamp, files, summary: this.extractSummary(
|
|
103
|
+
return { taskId, taskType, timestamp, files, summary: this.extractSummary(saveType, result) };
|
|
101
104
|
}
|
|
102
105
|
// Ensure directories exist
|
|
103
106
|
await this.ensureDirectories(taskType);
|
|
@@ -110,7 +113,7 @@ export class ResultSaver {
|
|
|
110
113
|
const tsStr = this.formatTimestamp(timestamp);
|
|
111
114
|
const prefix = options.filenamePrefix || `${tsStr}_${this.uniqueSuffix(taskId)}`;
|
|
112
115
|
// Save based on task type
|
|
113
|
-
switch (
|
|
116
|
+
switch (saveType) {
|
|
114
117
|
case 'generate-tests':
|
|
115
118
|
files.push(...await this.saveTestGeneration(result, prefix, options));
|
|
116
119
|
break;
|
|
@@ -140,10 +143,10 @@ export class ResultSaver {
|
|
|
140
143
|
break;
|
|
141
144
|
default:
|
|
142
145
|
// Generic JSON save for unknown types
|
|
143
|
-
files.push(...await this.saveGeneric(
|
|
146
|
+
files.push(...await this.saveGeneric(saveType, result, prefix));
|
|
144
147
|
}
|
|
145
148
|
// Update index
|
|
146
|
-
const summary = this.extractSummary(
|
|
149
|
+
const summary = this.extractSummary(saveType, result);
|
|
147
150
|
await this.updateIndex(taskId, taskType, timestamp, files, summary);
|
|
148
151
|
return {
|
|
149
152
|
taskId,
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import * as fs from 'node:fs/promises';
|
|
9
9
|
import { parse as parseYaml } from 'yaml';
|
|
10
10
|
import { ok, err, ALL_DOMAINS } from '../shared/types/index.js';
|
|
11
|
+
import { getOwn } from '../shared/utils/safe-record.js';
|
|
11
12
|
const VALID_OPERATORS = [
|
|
12
13
|
'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'exists',
|
|
13
14
|
];
|
|
@@ -380,8 +381,10 @@ export class YamlPipelineLoader {
|
|
|
380
381
|
}
|
|
381
382
|
/** Resolve a dot-path variable (e.g. "foo.bar") from a variables map. */
|
|
382
383
|
resolveVarPath(vars, path) {
|
|
384
|
+
// #1136: own properties only, so ${constructor} or ${x.toString} does
|
|
385
|
+
// not expand to an inherited Object.prototype member.
|
|
383
386
|
// Try direct key first (covers flat keys like "coverageGoal")
|
|
384
|
-
if (path
|
|
387
|
+
if (Object.hasOwn(vars, path))
|
|
385
388
|
return vars[path];
|
|
386
389
|
// Try dot-path traversal
|
|
387
390
|
const parts = path.split('.');
|
|
@@ -390,7 +393,7 @@ export class YamlPipelineLoader {
|
|
|
390
393
|
if (current === null || current === undefined || typeof current !== 'object') {
|
|
391
394
|
return undefined;
|
|
392
395
|
}
|
|
393
|
-
current = current
|
|
396
|
+
current = getOwn(current, part);
|
|
394
397
|
}
|
|
395
398
|
return current;
|
|
396
399
|
}
|
|
@@ -28,13 +28,16 @@ export declare const MAX_INDEX_PATHS = 10000;
|
|
|
28
28
|
export declare function validateIndexPaths(value: unknown, field?: string, context?: string, maxPaths?: number): Result<string[], Error>;
|
|
29
29
|
/**
|
|
30
30
|
* Boundary check shared by `task_submit` and `aqe task submit`: an `index` or
|
|
31
|
-
* `index-code` task
|
|
32
|
-
*
|
|
31
|
+
* `index-code` task must carry a non-empty, well-formed `paths` list. The task
|
|
32
|
+
* handler indexes exactly those files; it does not expand a directory
|
|
33
|
+
* `target` (#1134), so a request without `paths` is refused here instead of
|
|
34
|
+
* failing after it was accepted. Returns undefined when the task is acceptable.
|
|
33
35
|
*/
|
|
34
36
|
export declare function validateIndexTaskPayload(type: string, payload: unknown): Error | undefined;
|
|
35
37
|
/**
|
|
36
38
|
* Split `paths` into those that may be indexed and those that must be skipped.
|
|
37
39
|
* Relative paths resolve against `basePath` (default: cwd), as FileReader does.
|
|
40
|
+
* The rule is the shared payload-path guard (#1126) without a size limit.
|
|
38
41
|
*/
|
|
39
42
|
export declare function confineIndexPaths(paths: readonly string[], projectRoot: string, basePath?: string): Promise<ConfinedIndexPaths>;
|
|
40
43
|
/**
|
|
@@ -8,14 +8,8 @@
|
|
|
8
8
|
* of the project is skipped and reported instead of followed. Callers get the
|
|
9
9
|
* skipped paths back with a reason; nothing skipped counts as indexed.
|
|
10
10
|
*/
|
|
11
|
-
import * as fs from 'node:fs/promises';
|
|
12
|
-
import * as path from 'node:path';
|
|
13
11
|
import { ok, err } from '../../shared/types/index.js';
|
|
14
|
-
|
|
15
|
-
function isWithin(root, candidate) {
|
|
16
|
-
const relative = path.relative(root, candidate);
|
|
17
|
-
return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
18
|
-
}
|
|
12
|
+
import { confinePayloadPaths } from '../../shared/io/payload-path-guard.js';
|
|
19
13
|
function describe(value) {
|
|
20
14
|
if (value === null)
|
|
21
15
|
return 'null';
|
|
@@ -53,60 +47,36 @@ export function validateIndexPaths(value, field = 'paths', context = 'Invalid in
|
|
|
53
47
|
}
|
|
54
48
|
/**
|
|
55
49
|
* Boundary check shared by `task_submit` and `aqe task submit`: an `index` or
|
|
56
|
-
* `index-code` task
|
|
57
|
-
*
|
|
50
|
+
* `index-code` task must carry a non-empty, well-formed `paths` list. The task
|
|
51
|
+
* handler indexes exactly those files; it does not expand a directory
|
|
52
|
+
* `target` (#1134), so a request without `paths` is refused here instead of
|
|
53
|
+
* failing after it was accepted. Returns undefined when the task is acceptable.
|
|
58
54
|
*/
|
|
59
55
|
export function validateIndexTaskPayload(type, payload) {
|
|
60
56
|
if (type !== 'index' && type !== 'index-code')
|
|
61
57
|
return undefined;
|
|
62
|
-
if (payload === null || typeof payload !== 'object' || !('paths'
|
|
63
|
-
return
|
|
58
|
+
if (payload === null || typeof payload !== 'object' || !Object.hasOwn(payload, 'paths')) {
|
|
59
|
+
return new Error(`Invalid index payload: '${type}' needs 'paths', the list of files to index. ` +
|
|
60
|
+
"It does not expand a directory 'target'; use code_index (or `aqe code index`) with a target, " +
|
|
61
|
+
'or list the files in paths.');
|
|
62
|
+
}
|
|
64
63
|
const result = validateIndexPaths(payload.paths);
|
|
65
|
-
|
|
64
|
+
if (!result.success)
|
|
65
|
+
return result.error;
|
|
66
|
+
if (result.value.length === 0) {
|
|
67
|
+
return new Error("Invalid index payload: 'paths' is empty; list at least one file to index");
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
66
70
|
}
|
|
67
71
|
/**
|
|
68
72
|
* Split `paths` into those that may be indexed and those that must be skipped.
|
|
69
73
|
* Relative paths resolve against `basePath` (default: cwd), as FileReader does.
|
|
74
|
+
* The rule is the shared payload-path guard (#1126) without a size limit.
|
|
70
75
|
*/
|
|
71
76
|
export async function confineIndexPaths(paths, projectRoot, basePath = process.cwd()) {
|
|
72
|
-
const accepted =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const rootReal = await fs.realpath(projectRoot).catch(() => rootLexical);
|
|
76
|
-
for (const requested of paths) {
|
|
77
|
-
const lexical = path.resolve(basePath, requested);
|
|
78
|
-
// A path that is not even spelled inside the root is refused before any
|
|
79
|
-
// filesystem call, so the reason cannot reveal whether an outside path
|
|
80
|
-
// exists or is readable.
|
|
81
|
-
if (!isWithin(rootLexical, lexical) && !isWithin(rootReal, lexical)) {
|
|
82
|
-
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
let real;
|
|
86
|
-
try {
|
|
87
|
-
real = await fs.realpath(lexical);
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
const code = error.code;
|
|
91
|
-
skipped.push({ path: requested, reason: code === 'ENOENT' || code === 'ENOTDIR' ? 'not-found' : 'unreadable' });
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (!isWithin(rootReal, real)) {
|
|
95
|
-
skipped.push({ path: requested, reason: 'outside-project-root' });
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
const stat = await fs.stat(real).catch(() => null);
|
|
99
|
-
if (!stat) {
|
|
100
|
-
skipped.push({ path: requested, reason: 'unreadable' });
|
|
101
|
-
}
|
|
102
|
-
else if (!stat.isFile()) {
|
|
103
|
-
skipped.push({ path: requested, reason: 'not-a-file' });
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
accepted.push(requested);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return { accepted, skipped };
|
|
77
|
+
const { accepted, skipped } = await confinePayloadPaths(paths, { projectRoot, basePath });
|
|
78
|
+
// Without maxBytes the guard never reports 'too-large'.
|
|
79
|
+
return { accepted, skipped: skipped };
|
|
110
80
|
}
|
|
111
81
|
/**
|
|
112
82
|
* The error an index entry point returns when paths were requested but none
|
|
@@ -66,7 +66,7 @@ export class CodeIntelligencePlugin extends BaseDomainPlugin {
|
|
|
66
66
|
// Task Handlers (Queen-Domain Integration)
|
|
67
67
|
// ============================================================================
|
|
68
68
|
getTaskHandlers() {
|
|
69
|
-
|
|
69
|
+
const handlers = new Map([
|
|
70
70
|
['index', async (payload) => {
|
|
71
71
|
if (!this.coordinator) {
|
|
72
72
|
return err(new Error('Coordinator not initialized'));
|
|
@@ -127,6 +127,10 @@ export class CodeIntelligencePlugin extends BaseDomainPlugin {
|
|
|
127
127
|
});
|
|
128
128
|
}],
|
|
129
129
|
]);
|
|
130
|
+
// `index-code` is the public Queen TaskType inferred by task_orchestrate.
|
|
131
|
+
// Both names share one execution handler and the same result lifecycle.
|
|
132
|
+
handlers.set('index-code', handlers.get('index'));
|
|
133
|
+
return handlers;
|
|
130
134
|
}
|
|
131
135
|
// ============================================================================
|
|
132
136
|
// Lifecycle Methods
|
|
@@ -20,7 +20,7 @@ export { DEFAULT_METRIC_CONFIG } from './interfaces.js';
|
|
|
20
20
|
*/
|
|
21
21
|
export interface IMetricCollectorService extends MetricCollector {
|
|
22
22
|
/** Check available tools on the system */
|
|
23
|
-
checkTools(): ToolAvailability[]
|
|
23
|
+
checkTools(): Promise<ToolAvailability[]>;
|
|
24
24
|
/** Clear the metrics cache */
|
|
25
25
|
clearCache(): void;
|
|
26
26
|
/** Get cache statistics */
|
|
@@ -66,7 +66,7 @@ export declare class MetricCollectorService implements IMetricCollectorService {
|
|
|
66
66
|
/**
|
|
67
67
|
* Check available tools on the system
|
|
68
68
|
*/
|
|
69
|
-
checkTools(): ToolAvailability[]
|
|
69
|
+
checkTools(): Promise<ToolAvailability[]>;
|
|
70
70
|
/**
|
|
71
71
|
* Clear the metrics cache
|
|
72
72
|
*/
|
|
@@ -138,9 +138,8 @@ export class MetricCollectorService {
|
|
|
138
138
|
/**
|
|
139
139
|
* Check available tools on the system
|
|
140
140
|
*/
|
|
141
|
-
checkTools() {
|
|
142
|
-
const locTools = checkLOCTools();
|
|
143
|
-
const testTools = checkTestRunners(process.cwd());
|
|
141
|
+
async checkTools() {
|
|
142
|
+
const [locTools, testTools] = await Promise.all([checkLOCTools(), checkTestRunners(process.cwd())]);
|
|
144
143
|
return [...locTools, ...testTools];
|
|
145
144
|
}
|
|
146
145
|
/**
|
|
@@ -24,7 +24,7 @@ export declare function countLOC(projectPath: string, config?: Partial<MetricCol
|
|
|
24
24
|
/**
|
|
25
25
|
* Check which LOC counting tools are available
|
|
26
26
|
*/
|
|
27
|
-
export declare function checkLOCTools(): ToolAvailability[]
|
|
27
|
+
export declare function checkLOCTools(): Promise<ToolAvailability[]>;
|
|
28
28
|
/**
|
|
29
29
|
* cloc `--not-match-f` regex matching any of `names` exactly (basename), or
|
|
30
30
|
* null when there is nothing to exclude.
|