agentic-qe 3.15.9 → 3.15.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +365 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-TIDSQ3ZK.js +2 -0
- package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/browser-6YJF4FQW.js +4 -0
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/chunk-2CW7VRPH.js +141 -0
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/chunk-2VLYUF7U.js +2 -0
- package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-4RAQ7PJA.js} +8 -8
- package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-672XOJDG.js} +2 -2
- package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-6NA3KZZT.js} +10 -10
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-AUUJBXWX.js} +25 -20
- package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/chunk-EBPJY4DI.js +3 -0
- package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ERN43HOX.js} +430 -433
- package/dist/cli/chunks/chunk-ETVAYGCB.js +180 -0
- package/dist/cli/chunks/chunk-EWPUQCN4.js +2 -0
- package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/chunk-FWSGPE3V.js +12 -0
- package/dist/cli/chunks/chunk-FZHSG75I.js +3 -0
- package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-G4FAPO57.js} +5 -5
- package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/chunk-IENZSO3K.js +4 -0
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/chunk-ITL3IN2E.js +3 -0
- package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-LD5CFK53.js} +54 -33
- package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/chunk-OD5D4LSZ.js +2 -0
- package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/chunk-RBZCA7SD.js +12 -0
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/chunk-UKKYMW3S.js +3 -0
- package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/chunk-VO3DRK4P.js +3 -0
- package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/chunk-X3PZCXWG.js +2 -0
- package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ONKLMVQ2.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/daemon-P574WWBW.js +18 -0
- package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/domain-transfer-DOBI67K6.js +2 -0
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/fleet-FVAUMKUT.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-GYJ6D4QM.js} +36 -36
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-GNSIDRNG.js} +24 -24
- package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-ZM43WGDO.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/mcp-4Y6GDLYK.js +2 -0
- package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-Y44WDOER.js} +69 -25
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/pipeline-EDTS6OSC.js +19 -0
- package/dist/cli/chunks/{platform-KJDABL5C.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-AUDTRX3I.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/sync-XW5TLZ7M.js +2 -0
- package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-XFSGQELD.js → test-D2XDJNDX.js} +17 -17
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-HBBLPCZ3.js +2 -0
- package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-JTWLBAZJ.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-K7YX2AO6.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/wrappers-AVZ3GPAL.js +2 -0
- package/dist/cli/commands/fleet.js +23 -13
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +11 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +11 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +63 -7
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-handlers.js +10 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +18 -3
- package/dist/coordination/handlers/security-handlers.js +45 -21
- package/dist/coordination/handlers/test-execution-handlers.js +25 -7
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
- package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
- package/dist/coordination/protocols/learning-consolidation.js +71 -22
- package/dist/coordination/queen-coordinator.d.ts +1 -1
- package/dist/coordination/queen-coordinator.js +27 -10
- package/dist/coordination/queen-event-handlers.js +13 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +62 -168
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +1 -1
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
- package/dist/domains/code-intelligence/index-path-guard.js +20 -50
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
- package/dist/domains/learning-optimization/active-patterns.js +2 -2
- package/dist/domains/learning-optimization/coordinator.js +9 -5
- package/dist/domains/learning-optimization/interfaces.d.ts +8 -2
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
- package/dist/domains/learning-optimization/reward-source.js +8 -1
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
- package/dist/domains/learning-optimization/services/learning-coordinator.js +47 -59
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +6 -0
- package/dist/domains/test-execution/coordinator.js +28 -22
- package/dist/domains/test-execution/interfaces.d.ts +36 -1
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +11 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
- package/dist/domains/test-execution/services/test-executor.js +8 -8
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +5 -2
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/10-workers.js +50 -6
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
- package/dist/learning/dream/dream-insights-pruner.js +16 -30
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +17 -3
- package/dist/mcp/bundle.js +612 -580
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +7 -0
- package/dist/mcp/handlers/domain-handler-configs.js +19 -5
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +36 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +16 -0
- package/dist/mcp/handlers/task-handlers.js +77 -24
- package/dist/mcp/handlers/validation-pipeline-handler.js +14 -10
- package/dist/mcp/protocol-server.js +10 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +59 -12
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +19 -1
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +17 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/shared/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -1
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +6 -0
- package/dist/shared/test-runner-process.js +14 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/shared/utils/namespaced-search.d.ts +14 -0
- package/dist/shared/utils/namespaced-search.js +19 -1
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/gate-reexecute.js +7 -4
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/dist/workers/daemon.js +13 -1
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +2 -0
- package/dist/workers/workers/learning-consolidation.js +12 -1
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
- package/dist/cli/chunks/base-67DXSAYM.js +0 -2
- package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
- package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
- package/dist/cli/chunks/chunk-2XITOPYV.js +0 -6
- package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
- package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
- package/dist/cli/chunks/chunk-6PXA2BQJ.js +0 -742
- package/dist/cli/chunks/chunk-6YL6JOQB.js +0 -4
- package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
- package/dist/cli/chunks/chunk-AR2E4B7K.js +0 -6
- package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
- package/dist/cli/chunks/chunk-FJ4VTLLK.js +0 -2
- package/dist/cli/chunks/chunk-FV3NHVC7.js +0 -59
- package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
- package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
- package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
- package/dist/cli/chunks/chunk-JEP4ULR6.js +0 -21
- package/dist/cli/chunks/chunk-JK2ME6IT.js +0 -2
- package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
- package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
- package/dist/cli/chunks/chunk-N5PDFGCQ.js +0 -180
- package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
- package/dist/cli/chunks/chunk-P2CXVNKK.js +0 -4
- package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
- package/dist/cli/chunks/chunk-VU2EL424.js +0 -14
- package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
- package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
- package/dist/cli/chunks/chunk-XZJ2O3VC.js +0 -2
- package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
- package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
- package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
- package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
- package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
- package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
- package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
- package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
- package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
- package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
- package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
- package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
- package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
- package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
- package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
- package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
- package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
- package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
- package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
- package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
- package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
- package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
- package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
- package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
- package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
- package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
- package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
- package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
- package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
- package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
- package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
- package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
- package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
- package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
- package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
- package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
- package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
- package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
|
@@ -31,6 +31,13 @@ export function bareSearchKey(found, namespace, pattern) {
|
|
|
31
31
|
}
|
|
32
32
|
/** First request size for `searchAllKeys`. Each further request doubles it. */
|
|
33
33
|
export const DEFAULT_KEY_SCAN_PAGE_SIZE = 10_000;
|
|
34
|
+
/**
|
|
35
|
+
* Most `search()` requests one scan may make (#1106). The limit doubles each
|
|
36
|
+
* time, so this covers more keys than any store holds (2^31 x the first page)
|
|
37
|
+
* while still guaranteeing the loop ends for a backend that never returns a
|
|
38
|
+
* short page.
|
|
39
|
+
*/
|
|
40
|
+
export const MAX_KEY_SCAN_REQUESTS = 32;
|
|
34
41
|
/**
|
|
35
42
|
* Every key matching `pattern`, bare (usable with `get(key, retrieve)`),
|
|
36
43
|
* de-duplicated and sorted.
|
|
@@ -38,11 +45,22 @@ export const DEFAULT_KEY_SCAN_PAGE_SIZE = 10_000;
|
|
|
38
45
|
* `search()` has no offset, so this widens the request until the backend
|
|
39
46
|
* returns fewer keys than were asked for. That is the only point at which the
|
|
40
47
|
* result is known to be complete; no cap ever truncates it.
|
|
48
|
+
*
|
|
49
|
+
* #1106: a backend that always returns at least `limit` keys (for example
|
|
50
|
+
* one that pads or repeats results) never gives a short page. After
|
|
51
|
+
* MAX_KEY_SCAN_REQUESTS this throws instead of looping forever or returning a
|
|
52
|
+
* list that may be incomplete, because callers select patterns to archive
|
|
53
|
+
* from it. A backend that ignores `limit` and returns every key still ends:
|
|
54
|
+
* the limit doubles past the key count.
|
|
41
55
|
*/
|
|
42
56
|
export async function searchAllKeys(memory, pattern, options = {}) {
|
|
43
57
|
let limit = Math.max(1, Math.floor(options.pageSize ?? DEFAULT_KEY_SCAN_PAGE_SIZE));
|
|
44
58
|
let found = await memory.search(pattern, limit, options.retrieve);
|
|
45
|
-
|
|
59
|
+
for (let requests = 1; found.length >= limit; requests++) {
|
|
60
|
+
if (requests >= MAX_KEY_SCAN_REQUESTS) {
|
|
61
|
+
throw new Error(`searchAllKeys('${pattern}'): the backend never returned a short page after ${requests} requests ` +
|
|
62
|
+
`(last limit ${limit}); refusing to return a possibly incomplete key list`);
|
|
63
|
+
}
|
|
46
64
|
limit *= 2;
|
|
47
65
|
found = await memory.search(pattern, limit, options.retrieve);
|
|
48
66
|
}
|
|
@@ -243,8 +243,9 @@ class Parser {
|
|
|
243
243
|
parseIdentifier() {
|
|
244
244
|
let value = this.context;
|
|
245
245
|
const name = this.advance().value;
|
|
246
|
-
// Get initial value from context
|
|
247
|
-
|
|
246
|
+
// Get initial value from context. #1136: own properties only, so an
|
|
247
|
+
// identifier such as `constructor` does not read an inherited member.
|
|
248
|
+
if (typeof value === 'object' && value !== null && Object.hasOwn(value, name)) {
|
|
248
249
|
value = value[name];
|
|
249
250
|
}
|
|
250
251
|
else {
|
|
@@ -254,7 +255,7 @@ class Parser {
|
|
|
254
255
|
while (this.current().type === 'DOT') {
|
|
255
256
|
this.advance(); // consume dot
|
|
256
257
|
const prop = this.expect('IDENTIFIER').value;
|
|
257
|
-
if (value !== null && value !== undefined && typeof value === 'object') {
|
|
258
|
+
if (value !== null && value !== undefined && typeof value === 'object' && Object.hasOwn(value, prop)) {
|
|
258
259
|
value = value[prop];
|
|
259
260
|
}
|
|
260
261
|
else {
|
|
@@ -59,7 +59,11 @@ export class RecoveryPlaybook {
|
|
|
59
59
|
getRecoveryPlan(serviceName) {
|
|
60
60
|
if (!this.config)
|
|
61
61
|
return undefined;
|
|
62
|
-
|
|
62
|
+
// Own-property lookup only: a name like `constructor` or `toString` must
|
|
63
|
+
// not resolve to an Object.prototype member (#1118).
|
|
64
|
+
return Object.hasOwn(this.config.services, serviceName)
|
|
65
|
+
? this.config.services[serviceName]
|
|
66
|
+
: undefined;
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
69
|
* List all service names defined in the playbook.
|
|
@@ -89,7 +93,9 @@ export class RecoveryPlaybook {
|
|
|
89
93
|
const defaultTimeoutMs = defaults.timeoutMs ?? 10_000;
|
|
90
94
|
const defaultMaxRetries = defaults.maxRetries ?? 3;
|
|
91
95
|
const defaultBackoffMs = defaults.backoffMs ?? [2000, 5000, 10_000];
|
|
92
|
-
|
|
96
|
+
// Null-prototype map so a service named `__proto__` is stored as an own
|
|
97
|
+
// key instead of silently replacing the prototype (#1118).
|
|
98
|
+
const services = Object.create(null);
|
|
93
99
|
if (raw.services) {
|
|
94
100
|
for (const [name, rawService] of Object.entries(raw.services)) {
|
|
95
101
|
services[name] = this.parseService(name, rawService, defaultTimeoutMs, defaultMaxRetries, defaultBackoffMs);
|
|
@@ -137,7 +143,11 @@ export class RecoveryPlaybook {
|
|
|
137
143
|
*/
|
|
138
144
|
interpolate(template) {
|
|
139
145
|
return template.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
|
|
140
|
-
|
|
146
|
+
// Own properties only: `${constructor}` must stay unresolved rather
|
|
147
|
+
// than expand to Object's function source (#1118).
|
|
148
|
+
return Object.hasOwn(this.variables, varName)
|
|
149
|
+
? (this.variables[varName] ?? _match)
|
|
150
|
+
: _match;
|
|
141
151
|
});
|
|
142
152
|
}
|
|
143
153
|
}
|
|
@@ -130,7 +130,8 @@ export class JSONReader {
|
|
|
130
130
|
const pathParts = jsonPath.replace(/^\$\./, '').split('.');
|
|
131
131
|
let current = data;
|
|
132
132
|
for (const part of pathParts) {
|
|
133
|
-
|
|
133
|
+
// #1157: own keys only; `$.constructor` is not a path into the data.
|
|
134
|
+
if (current && typeof current === 'object' && Object.hasOwn(current, part)) {
|
|
134
135
|
current = current[part];
|
|
135
136
|
}
|
|
136
137
|
else {
|
|
@@ -57,6 +57,12 @@ export declare function computeContentHash(items: AnchorItem[]): string;
|
|
|
57
57
|
* except through this loader.
|
|
58
58
|
*/
|
|
59
59
|
export declare function loadAnchorSet(path: string): AnchorSet;
|
|
60
|
+
/**
|
|
61
|
+
* Parse and verify an anchor set already read by the caller (#1161: the MCP
|
|
62
|
+
* gate reads a caller-named anchor through a confined read). `path` only
|
|
63
|
+
* labels error messages. Applies the same hash and non-empty checks.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseAnchorSet(text: string, path: string): AnchorSet;
|
|
60
66
|
/** The score of one anchor item = its oracle mutation kill rate. */
|
|
61
67
|
export declare function anchorItemScore(oracleResult: {
|
|
62
68
|
mutationScore: number;
|
|
@@ -43,7 +43,15 @@ export function computeContentHash(items) {
|
|
|
43
43
|
* except through this loader.
|
|
44
44
|
*/
|
|
45
45
|
export function loadAnchorSet(path) {
|
|
46
|
-
|
|
46
|
+
return parseAnchorSet(fs.readFileSync(path, 'utf8'), path);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse and verify an anchor set already read by the caller (#1161: the MCP
|
|
50
|
+
* gate reads a caller-named anchor through a confined read). `path` only
|
|
51
|
+
* labels error messages. Applies the same hash and non-empty checks.
|
|
52
|
+
*/
|
|
53
|
+
export function parseAnchorSet(text, path) {
|
|
54
|
+
const raw = JSON.parse(text);
|
|
47
55
|
const recomputed = computeContentHash(raw.items);
|
|
48
56
|
if (recomputed !== raw.contentHash) {
|
|
49
57
|
throw new Error(`Anchor set hash drift at ${path}: recorded ${raw.contentHash}, `
|
|
@@ -26,6 +26,7 @@ import { createHash } from 'node:crypto';
|
|
|
26
26
|
import { meetsNoRegression } from './anchor-set.js';
|
|
27
27
|
import { tierAllowsPromotion } from '../learning/provenance-tier.js';
|
|
28
28
|
import { bootstrapDeltaCILow, pairedDeltas } from './paired-bootstrap.js';
|
|
29
|
+
import { getOwn } from '../shared/utils/safe-record.js';
|
|
29
30
|
/** Tag domain-separating the rule fingerprint hash. */
|
|
30
31
|
const RULE_TAG = 'aqe:accept-rule:v1+sig';
|
|
31
32
|
/**
|
|
@@ -137,14 +138,16 @@ export function sealedHash(sealed) {
|
|
|
137
138
|
* unknown version so a missing rule can never silently pass verification.
|
|
138
139
|
*/
|
|
139
140
|
export function gateFingerprint(ruleVersion) {
|
|
140
|
-
|
|
141
|
+
// #1136: own entries only; `constructor` is not a registered rule.
|
|
142
|
+
if (!Object.hasOwn(ACCEPTANCE_RULES, ruleVersion)) {
|
|
141
143
|
throw new Error(`Unknown acceptance rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
|
|
142
144
|
}
|
|
143
145
|
return createHash('sha256').update(RULE_TAG).update('\0').update(ruleVersion).digest('hex');
|
|
144
146
|
}
|
|
145
147
|
/** Re-execute a frozen rule on sealed inputs. Throws for an unknown version. */
|
|
146
148
|
export function reExecuteGate(ruleVersion, sealed) {
|
|
147
|
-
|
|
149
|
+
// #1136: an inherited member (`constructor` is Object) is not a rule.
|
|
150
|
+
const rule = getOwn(ACCEPTANCE_RULES, ruleVersion);
|
|
148
151
|
if (!rule) {
|
|
149
152
|
throw new Error(`Unknown acceptance rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
|
|
150
153
|
}
|
|
@@ -260,14 +263,14 @@ export function pathSealedHash(sealed) {
|
|
|
260
263
|
}
|
|
261
264
|
/** Fingerprint of a path-rule VERSION. Throws for an unregistered rule. */
|
|
262
265
|
export function pathGateFingerprint(ruleVersion) {
|
|
263
|
-
if (!(ruleVersion
|
|
266
|
+
if (!Object.hasOwn(PROMOTION_PATH_RULES, ruleVersion)) {
|
|
264
267
|
throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
|
|
265
268
|
}
|
|
266
269
|
return createHash('sha256').update(PATH_RULE_TAG).update('\0').update(ruleVersion).digest('hex');
|
|
267
270
|
}
|
|
268
271
|
/** Re-execute a frozen path rule on sealed inputs. Throws for an unknown version. */
|
|
269
272
|
export function reExecutePathGate(ruleVersion, sealed) {
|
|
270
|
-
const rule = PROMOTION_PATH_RULES
|
|
273
|
+
const rule = getOwn(PROMOTION_PATH_RULES, ruleVersion);
|
|
271
274
|
if (!rule) {
|
|
272
275
|
throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
|
|
273
276
|
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* The oracle result and the judge are injected — this module owns no LLM and no
|
|
17
17
|
* mutation runner, so it is deterministic and unit-testable with a fake judge.
|
|
18
18
|
*/
|
|
19
|
+
import { type AnchorSet } from './anchor-set.js';
|
|
19
20
|
import { type Judge, type QualityVerdictResult, type RequirementChecklist } from './quality-verdict.js';
|
|
20
21
|
import type { OracleResult } from './oracle-eval.js';
|
|
21
22
|
import { type VerificationCoverageVerdict, type VerificationReachManifest, type VerificationReachResult } from './verification-reach.js';
|
|
@@ -35,6 +36,11 @@ export interface QualityGateRequest {
|
|
|
35
36
|
judge: Judge;
|
|
36
37
|
/** Override the frozen anchor path (absolute, or relative to project root). */
|
|
37
38
|
anchorPath?: string;
|
|
39
|
+
/**
|
|
40
|
+
* The anchor set, already read and verified by the caller (#1161). When
|
|
41
|
+
* given, it is used instead of reading `anchorPath`, which only labels errors.
|
|
42
|
+
*/
|
|
43
|
+
anchor?: AnchorSet;
|
|
38
44
|
/** Revision-bound failure-mode reach evidence. Omit only for legacy migration. */
|
|
39
45
|
verificationManifest?: VerificationReachManifest;
|
|
40
46
|
}
|
|
@@ -66,7 +72,7 @@ export declare function runQualityGate(req: QualityGateRequest): Promise<ReachAw
|
|
|
66
72
|
* Load the pinned checklist for `checklistId` from the frozen anchor. Exposed so
|
|
67
73
|
* callers (CLI/MCP) can list valid ids or pre-validate before building a judge.
|
|
68
74
|
*/
|
|
69
|
-
export declare function loadChecklist(checklistId: string, anchorPath?: string): RequirementChecklist;
|
|
75
|
+
export declare function loadChecklist(checklistId: string, anchorPath?: string, preloaded?: AnchorSet): RequirementChecklist;
|
|
70
76
|
/** List every checklist id in the frozen anchor (for CLI/MCP discoverability). */
|
|
71
77
|
export declare function listChecklistIds(anchorPath?: string): string[];
|
|
72
78
|
//# sourceMappingURL=quality-gate-runner.d.ts.map
|
|
@@ -29,7 +29,7 @@ export const DEFAULT_ANCHOR_RELATIVE_PATH = 'verification/anchors/qe-anchor-v1.j
|
|
|
29
29
|
* every judgement outcome is returned as a three-valued reach-aware result.
|
|
30
30
|
*/
|
|
31
31
|
export async function runQualityGate(req) {
|
|
32
|
-
const checklist = loadChecklist(req.checklistId, req.anchorPath);
|
|
32
|
+
const checklist = loadChecklist(req.checklistId, req.anchorPath, req.anchor);
|
|
33
33
|
if (req.verificationManifest
|
|
34
34
|
&& req.verificationManifest.artifact.digest !== computeVerificationArtifactDigest(req.artifact)) {
|
|
35
35
|
throw new Error('Verification reach manifest artifact digest does not match the judged artifact');
|
|
@@ -67,9 +67,9 @@ function combineVerdicts(quality, coverage) {
|
|
|
67
67
|
* Load the pinned checklist for `checklistId` from the frozen anchor. Exposed so
|
|
68
68
|
* callers (CLI/MCP) can list valid ids or pre-validate before building a judge.
|
|
69
69
|
*/
|
|
70
|
-
export function loadChecklist(checklistId, anchorPath) {
|
|
70
|
+
export function loadChecklist(checklistId, anchorPath, preloaded) {
|
|
71
71
|
const resolved = resolveAnchorPath(anchorPath);
|
|
72
|
-
const anchor = loadAnchorSet(resolved); // throws on hash drift (ADR-117 §2)
|
|
72
|
+
const anchor = preloaded ?? loadAnchorSet(resolved); // throws on hash drift (ADR-117 §2)
|
|
73
73
|
const item = anchor.items.find((it) => it.id === checklistId);
|
|
74
74
|
if (!item) {
|
|
75
75
|
const available = anchor.items.map((it) => it.id).join(', ');
|
package/dist/workers/daemon.js
CHANGED
|
@@ -74,7 +74,19 @@ export class QEDaemon {
|
|
|
74
74
|
this._healthCheckTimer.unref?.();
|
|
75
75
|
// Auto-start workers if configured
|
|
76
76
|
if (this.config.autoStart) {
|
|
77
|
-
|
|
77
|
+
try {
|
|
78
|
+
await this.workerManager.startAll();
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// #1116: a failed start must not leave the daemon reporting running.
|
|
82
|
+
this._running = false;
|
|
83
|
+
this._startedAt = undefined;
|
|
84
|
+
if (this._healthCheckTimer)
|
|
85
|
+
clearInterval(this._healthCheckTimer);
|
|
86
|
+
this._healthCheckTimer = undefined;
|
|
87
|
+
await this.workerManager.stopAll().catch(() => undefined);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
78
90
|
console.info('[Daemon] All workers started');
|
|
79
91
|
}
|
|
80
92
|
// Log registered workers
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* 'next' priority analysis tasks into the daemon queue.
|
|
7
7
|
*/
|
|
8
8
|
import { watch } from 'fs';
|
|
9
|
-
import { execFile } from 'child_process';
|
|
10
|
-
import { promisify } from 'util';
|
|
11
9
|
import { resolve, join } from 'path';
|
|
12
10
|
import { existsSync, readFileSync } from 'fs';
|
|
13
11
|
import { getGitRefError } from '../../shared/git/ref-validation.js';
|
|
14
|
-
|
|
12
|
+
import { runGit } from '../../shared/git/git-process.js';
|
|
13
|
+
/** A hung git must not stall the watcher; its process group is stopped (#1115). */
|
|
14
|
+
const GIT_TIMEOUT_MS = 10_000;
|
|
15
15
|
const DEFAULTS = {
|
|
16
16
|
repoRoot: process.cwd(),
|
|
17
17
|
debounceMs: 500,
|
|
@@ -100,11 +100,11 @@ export class GitWatcher {
|
|
|
100
100
|
this._polling = true;
|
|
101
101
|
const changedBranches = [];
|
|
102
102
|
try {
|
|
103
|
-
const
|
|
103
|
+
const stdout = await runGit([
|
|
104
104
|
'for-each-ref',
|
|
105
105
|
'--format=%(refname:short) %(objectname:short)',
|
|
106
106
|
'refs/heads/',
|
|
107
|
-
], { cwd: this.options.repoRoot });
|
|
107
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
108
108
|
for (const line of stdout.trim().split('\n')) {
|
|
109
109
|
if (!line)
|
|
110
110
|
continue;
|
|
@@ -162,13 +162,13 @@ export class GitWatcher {
|
|
|
162
162
|
return;
|
|
163
163
|
let changedFiles = [];
|
|
164
164
|
try {
|
|
165
|
-
const
|
|
165
|
+
const stdout = await runGit([
|
|
166
166
|
'diff-tree',
|
|
167
167
|
'--no-commit-id',
|
|
168
168
|
'--name-only',
|
|
169
169
|
'-r',
|
|
170
170
|
commitHash,
|
|
171
|
-
], { cwd: this.options.repoRoot });
|
|
171
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
172
172
|
changedFiles = stdout
|
|
173
173
|
.trim()
|
|
174
174
|
.split('\n')
|
|
@@ -196,11 +196,11 @@ export class GitWatcher {
|
|
|
196
196
|
}
|
|
197
197
|
async snapshotHeads() {
|
|
198
198
|
try {
|
|
199
|
-
const
|
|
199
|
+
const stdout = await runGit([
|
|
200
200
|
'for-each-ref',
|
|
201
201
|
'--format=%(refname:short) %(objectname:short)',
|
|
202
202
|
'refs/heads/',
|
|
203
|
-
], { cwd: this.options.repoRoot });
|
|
203
|
+
], { cwd: this.options.repoRoot, timeout: GIT_TIMEOUT_MS });
|
|
204
204
|
for (const line of stdout.trim().split('\n')) {
|
|
205
205
|
if (!line)
|
|
206
206
|
continue;
|
|
@@ -8,10 +8,14 @@
|
|
|
8
8
|
*
|
|
9
9
|
* #1043: every prediction comes from a run of the defect-intelligence
|
|
10
10
|
* predictor (`defect-intelligence:predictor:prediction:<id>` in the
|
|
11
|
-
* `defect-intelligence` namespace, written by DefectPredictorService
|
|
11
|
+
* `defect-intelligence` namespace, written by DefectPredictorService or the
|
|
12
|
+
* public MCP handler), and
|
|
12
13
|
* only files that exist in the project are kept. Code hotspots have no
|
|
13
14
|
* measured source and are reported unmeasured. Nothing predicted → nothing
|
|
14
|
-
* stored, an "unmeasured" info finding. A
|
|
15
|
+
* stored, an "unmeasured" info finding. A recorded static scan is labelled
|
|
16
|
+
* `estimated: true` with its prediction method: `measured` means an actual
|
|
17
|
+
* analysis ran, not that its risk estimate is a calibrated probability.
|
|
18
|
+
* A `defect:predictions` record without
|
|
15
19
|
* the measured stamp (the invented one written by <= 3.15.6) is ignored and
|
|
16
20
|
* replaced by the next measured run.
|
|
17
21
|
*/
|
|
@@ -30,7 +34,8 @@ export declare class DefectPredictorWorker extends BaseWorker {
|
|
|
30
34
|
* #1043: the most recent prediction run the defect-intelligence predictor
|
|
31
35
|
* recorded, restricted to regular files whose real path is inside the
|
|
32
36
|
* project root. `measured` is `null` when there is no such prediction;
|
|
33
|
-
* `unusable` describes
|
|
37
|
+
* `unusable` describes an ambiguous newest timestamp or a newest prediction
|
|
38
|
+
* none of whose files qualify.
|
|
34
39
|
*/
|
|
35
40
|
private readLatestPrediction;
|
|
36
41
|
private analyzeHighRiskPredictions;
|
|
@@ -8,16 +8,21 @@
|
|
|
8
8
|
*
|
|
9
9
|
* #1043: every prediction comes from a run of the defect-intelligence
|
|
10
10
|
* predictor (`defect-intelligence:predictor:prediction:<id>` in the
|
|
11
|
-
* `defect-intelligence` namespace, written by DefectPredictorService
|
|
11
|
+
* `defect-intelligence` namespace, written by DefectPredictorService or the
|
|
12
|
+
* public MCP handler), and
|
|
12
13
|
* only files that exist in the project are kept. Code hotspots have no
|
|
13
14
|
* measured source and are reported unmeasured. Nothing predicted → nothing
|
|
14
|
-
* stored, an "unmeasured" info finding. A
|
|
15
|
+
* stored, an "unmeasured" info finding. A recorded static scan is labelled
|
|
16
|
+
* `estimated: true` with its prediction method: `measured` means an actual
|
|
17
|
+
* analysis ran, not that its risk estimate is a calibrated probability.
|
|
18
|
+
* A `defect:predictions` record without
|
|
15
19
|
* the measured stamp (the invented one written by <= 3.15.6) is ignored and
|
|
16
20
|
* replaced by the next measured run.
|
|
17
21
|
*/
|
|
18
22
|
import * as fs from 'fs';
|
|
19
23
|
import * as path from 'path';
|
|
20
24
|
import { bareSearchKey } from '../namespaced-keys.js';
|
|
25
|
+
import { parsePredictionRecord } from '../../domains/defect-intelligence/prediction-history.js';
|
|
21
26
|
import { BaseWorker } from '../base-worker.js';
|
|
22
27
|
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
23
28
|
const CONFIG = {
|
|
@@ -36,10 +41,6 @@ const DEFECT_NAMESPACE = 'defect-intelligence';
|
|
|
36
41
|
const PREDICTION_KEY_PATTERN = 'defect-intelligence:predictor:prediction:*';
|
|
37
42
|
const PREDICTIONS_KEY = 'defect:predictions';
|
|
38
43
|
const SCHEMA_VERSION = 1;
|
|
39
|
-
/** The predictor keeps its records for 7 days; nothing older is current. */
|
|
40
|
-
const MAX_PREDICTION_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
41
|
-
const MAX_PREDICTION_RECORDS = 1000;
|
|
42
|
-
const RISK_LEVELS = ['critical', 'high', 'medium', 'low', 'info'];
|
|
43
44
|
/**
|
|
44
45
|
* Where a predicted path lies, resolved against the project root with
|
|
45
46
|
* symlinks followed: only a regular file whose real path is inside the
|
|
@@ -75,39 +76,6 @@ function realProjectRoot() {
|
|
|
75
76
|
return path.resolve(root);
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
|
-
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
79
|
-
function parseFilePrediction(raw) {
|
|
80
|
-
if (!isRecord(raw))
|
|
81
|
-
return null;
|
|
82
|
-
const { file, probability, riskLevel } = raw;
|
|
83
|
-
if (typeof file !== 'string' || file.length === 0)
|
|
84
|
-
return null;
|
|
85
|
-
if (typeof probability !== 'number' || !Number.isFinite(probability) || probability < 0 || probability > 1)
|
|
86
|
-
return null;
|
|
87
|
-
if (!RISK_LEVELS.includes(riskLevel))
|
|
88
|
-
return null;
|
|
89
|
-
const factors = Array.isArray(raw.factors)
|
|
90
|
-
? raw.factors.filter((f) => isRecord(f) && typeof f.name === 'string' && typeof f.contribution === 'number' && Number.isFinite(f.contribution))
|
|
91
|
-
: [];
|
|
92
|
-
const recommendations = Array.isArray(raw.recommendations)
|
|
93
|
-
? raw.recommendations.filter((r) => typeof r === 'string')
|
|
94
|
-
: [];
|
|
95
|
-
return { file, probability, riskLevel: riskLevel, factors, recommendations };
|
|
96
|
-
}
|
|
97
|
-
/** A recorded prediction run, or `null` when the record is not a usable one. */
|
|
98
|
-
function parsePredictionRecord(raw, now) {
|
|
99
|
-
if (!isRecord(raw) || typeof raw.id !== 'string' || typeof raw.timestamp !== 'string')
|
|
100
|
-
return null;
|
|
101
|
-
const t = Date.parse(raw.timestamp);
|
|
102
|
-
if (!Number.isFinite(t) || t > now + 60_000 || now - t > MAX_PREDICTION_AGE_MS)
|
|
103
|
-
return null;
|
|
104
|
-
if (!Array.isArray(raw.predictions) || raw.predictions.length === 0)
|
|
105
|
-
return null;
|
|
106
|
-
const predictions = raw.predictions.map(parseFilePrediction);
|
|
107
|
-
if (predictions.some((p) => p === null))
|
|
108
|
-
return null;
|
|
109
|
-
return { id: raw.id, timestamp: raw.timestamp, predictions: predictions };
|
|
110
|
-
}
|
|
111
79
|
export class DefectPredictorWorker extends BaseWorker {
|
|
112
80
|
constructor() {
|
|
113
81
|
super(CONFIG);
|
|
@@ -124,10 +92,12 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
124
92
|
severity: 'info',
|
|
125
93
|
domain: 'defect-intelligence',
|
|
126
94
|
title: 'Defect Prediction Unmeasured',
|
|
127
|
-
description: (unusable
|
|
128
|
-
?
|
|
129
|
-
|
|
130
|
-
|
|
95
|
+
description: (unusable?.ambiguous
|
|
96
|
+
? 'Multiple defect predictions have the same timestamp, so no unique latest analysis can be identified. No risk is reported. '
|
|
97
|
+
: unusable
|
|
98
|
+
? `The latest defect prediction (${unusable.id}) names no file inside this project ` +
|
|
99
|
+
`(${unusable.outside} outside the project root, ${unusable.missing} missing), so no risk is reported. `
|
|
100
|
+
: 'No defect prediction for files in this project has been recorded in the last 7 days, so no risk is reported. ') +
|
|
131
101
|
'Run defect_predict on the files to assess.',
|
|
132
102
|
});
|
|
133
103
|
if (unusable)
|
|
@@ -147,7 +117,14 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
147
117
|
}, findings, recommendations);
|
|
148
118
|
}
|
|
149
119
|
const { predictions } = latest;
|
|
150
|
-
|
|
120
|
+
if (latest.filesSkipped) {
|
|
121
|
+
findings.push({
|
|
122
|
+
type: 'defect-prediction-partial', severity: 'info', domain: 'defect-intelligence',
|
|
123
|
+
title: 'Partial Defect Prediction',
|
|
124
|
+
description: `${latest.filesSkipped} source files could not be read; risk estimates cover only ${predictions.length} successfully analyzed files.`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
this.analyzeHighRiskPredictions(predictions, findings, recommendations, latest.estimated === true);
|
|
151
128
|
await context.memory.set(PREDICTIONS_KEY, latest);
|
|
152
129
|
await context.memory.set('defect:lastAnalysis', latest.evaluatedAt);
|
|
153
130
|
const healthScore = this.calculateHealthScore(predictions);
|
|
@@ -165,6 +142,8 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
165
142
|
trend: 'stable',
|
|
166
143
|
domainMetrics: {
|
|
167
144
|
filesAnalyzed: predictions.length,
|
|
145
|
+
filesSkipped: latest.filesSkipped ?? 0,
|
|
146
|
+
scanStatus: latest.filesSkipped ? 'partial' : 'complete',
|
|
168
147
|
highRiskFiles: highRisk,
|
|
169
148
|
missingFilesSkipped: latest.missingFilesSkipped,
|
|
170
149
|
outsideProjectSkipped: latest.outsideProjectSkipped,
|
|
@@ -192,21 +171,37 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
192
171
|
* #1043: the most recent prediction run the defect-intelligence predictor
|
|
193
172
|
* recorded, restricted to regular files whose real path is inside the
|
|
194
173
|
* project root. `measured` is `null` when there is no such prediction;
|
|
195
|
-
* `unusable` describes
|
|
174
|
+
* `unusable` describes an ambiguous newest timestamp or a newest prediction
|
|
175
|
+
* none of whose files qualify.
|
|
196
176
|
*/
|
|
197
177
|
async readLatestPrediction(context) {
|
|
198
|
-
const keys = await context.memory.search(PREDICTION_KEY_PATTERN,
|
|
178
|
+
const keys = await context.memory.search(PREDICTION_KEY_PATTERN, Number.MAX_SAFE_INTEGER, { namespace: DEFECT_NAMESPACE });
|
|
199
179
|
const now = Date.now();
|
|
200
180
|
let latest = null;
|
|
181
|
+
let ambiguous = false;
|
|
201
182
|
for (const found of keys) {
|
|
202
183
|
// #1049: the in-memory backend returns `<namespace>:<key>` from a namespaced search.
|
|
203
184
|
const key = bareSearchKey(found, DEFECT_NAMESPACE, PREDICTION_KEY_PATTERN);
|
|
204
185
|
const parsed = parsePredictionRecord(await context.memory.get(key, { namespace: DEFECT_NAMESPACE }), now);
|
|
205
|
-
if (
|
|
186
|
+
if (!parsed)
|
|
187
|
+
continue;
|
|
188
|
+
if (!latest || Date.parse(parsed.timestamp) > Date.parse(latest.timestamp)) {
|
|
206
189
|
latest = parsed;
|
|
190
|
+
ambiguous = false;
|
|
191
|
+
}
|
|
192
|
+
else if (Date.parse(parsed.timestamp) === Date.parse(latest.timestamp) && parsed.id !== latest.id) {
|
|
193
|
+
ambiguous = true;
|
|
194
|
+
}
|
|
207
195
|
}
|
|
208
196
|
if (!latest)
|
|
209
197
|
return { measured: null, unusable: null };
|
|
198
|
+
// Timestamp precision cannot establish ordering between concurrent runs.
|
|
199
|
+
// Never let backend key ordering decide whether the current scan is clean.
|
|
200
|
+
if (ambiguous)
|
|
201
|
+
return {
|
|
202
|
+
measured: null,
|
|
203
|
+
unusable: { id: `ambiguous:${latest.timestamp}`, outside: 0, missing: 0, ambiguous: true },
|
|
204
|
+
};
|
|
210
205
|
const realRoot = realProjectRoot();
|
|
211
206
|
const disposition = latest.predictions.map((p) => classifyPredictedFile(p.file, realRoot));
|
|
212
207
|
const existing = latest.predictions.filter((_, i) => disposition[i] === 'inside');
|
|
@@ -224,6 +219,7 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
224
219
|
schemaVersion: SCHEMA_VERSION,
|
|
225
220
|
source: 'defect-intelligence',
|
|
226
221
|
predictionId: latest.id,
|
|
222
|
+
...(latest.estimated ? { estimated: true, predictionMethod: latest.predictionMethod, filesSkipped: latest.filesSkipped } : {}),
|
|
227
223
|
predictedAt: latest.timestamp,
|
|
228
224
|
evaluatedAt: new Date().toISOString(),
|
|
229
225
|
predictions: existing,
|
|
@@ -231,7 +227,7 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
231
227
|
outsideProjectSkipped: outside,
|
|
232
228
|
} };
|
|
233
229
|
}
|
|
234
|
-
analyzeHighRiskPredictions(predictions, findings, recommendations) {
|
|
230
|
+
analyzeHighRiskPredictions(predictions, findings, recommendations, estimated = false) {
|
|
235
231
|
const critical = predictions.filter(p => p.riskLevel === 'critical');
|
|
236
232
|
const high = predictions.filter(p => p.riskLevel === 'high');
|
|
237
233
|
for (const prediction of [...critical, ...high]) {
|
|
@@ -241,10 +237,13 @@ export class DefectPredictorWorker extends BaseWorker {
|
|
|
241
237
|
severity: prediction.riskLevel,
|
|
242
238
|
domain: 'defect-intelligence',
|
|
243
239
|
title: `${prediction.riskLevel === 'critical' ? 'Critical' : 'High'} Defect Risk: ${name}`,
|
|
244
|
-
description:
|
|
240
|
+
description: estimated
|
|
241
|
+
? `${(prediction.probability * 100).toFixed(0)}% estimated code-risk score (static-code-indicators); not a calibrated defect probability`
|
|
242
|
+
: `${(prediction.probability * 100).toFixed(0)}% predicted defect probability (defect-intelligence predictor)`,
|
|
245
243
|
resource: prediction.file,
|
|
246
244
|
context: {
|
|
247
245
|
probability: prediction.probability,
|
|
246
|
+
...(estimated ? { estimated: true, predictionMethod: 'static-code-indicators' } : {}),
|
|
248
247
|
factors: prediction.factors,
|
|
249
248
|
recommendations: prediction.recommendations,
|
|
250
249
|
},
|
|
@@ -31,6 +31,8 @@ export declare class LearningConsolidationWorker extends BaseWorker {
|
|
|
31
31
|
private readonly dreamInsightsPruneNotBefore;
|
|
32
32
|
/** #1061: an invalid retention value is reported once per process. */
|
|
33
33
|
private retentionWarningLogged;
|
|
34
|
+
/** #1116: NULL-id stale rows last reported, so the warning is not repeated every tick. */
|
|
35
|
+
private nullIdRowsReported;
|
|
34
36
|
constructor();
|
|
35
37
|
/**
|
|
36
38
|
* Initialize or get the pattern lifecycle manager
|
|
@@ -61,6 +61,8 @@ export class LearningConsolidationWorker extends BaseWorker {
|
|
|
61
61
|
dreamInsightsPruneNotBefore = Date.now() + CONFIG.intervalMs;
|
|
62
62
|
/** #1061: an invalid retention value is reported once per process. */
|
|
63
63
|
retentionWarningLogged = false;
|
|
64
|
+
/** #1116: NULL-id stale rows last reported, so the warning is not repeated every tick. */
|
|
65
|
+
nullIdRowsReported = 0;
|
|
64
66
|
constructor() {
|
|
65
67
|
super(CONFIG);
|
|
66
68
|
}
|
|
@@ -252,7 +254,16 @@ export class LearningConsolidationWorker extends BaseWorker {
|
|
|
252
254
|
return 0;
|
|
253
255
|
const db = getUnifiedMemory().getDatabase();
|
|
254
256
|
// #1066: rows are copied to dream_insights_archive and verified first.
|
|
255
|
-
const { pruned, archived } = pruneStaleDreamInsights(db, { retentionDays });
|
|
257
|
+
const { pruned, archived, skippedNullId } = pruneStaleDreamInsights(db, { retentionDays });
|
|
258
|
+
// #1116: rows with a NULL id cannot be archived and are left in place.
|
|
259
|
+
// Warn when their number changes, not on every tick.
|
|
260
|
+
if (skippedNullId !== this.nullIdRowsReported) {
|
|
261
|
+
this.nullIdRowsReported = skippedNullId;
|
|
262
|
+
if (skippedNullId > 0) {
|
|
263
|
+
process.stderr.write(`[AQE] WARN dream_insights retention: ${skippedNullId} stale insight(s) have no id and were ` +
|
|
264
|
+
'left in place (they cannot be archived); the other stale insights were archived as usual\n');
|
|
265
|
+
}
|
|
266
|
+
}
|
|
256
267
|
if (pruned > 0) {
|
|
257
268
|
// Default log level, stderr only: MCP stdout carries JSON-RPC.
|
|
258
269
|
process.stderr.write(`[AQE] dream_insights retention: moved ${pruned} unapplied insight(s) ` +
|
|
@@ -3,6 +3,7 @@ import { join, basename, dirname } from 'path';
|
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { parse as parseYaml } from 'yaml';
|
|
5
5
|
import { safeEvaluateBoolean } from '../../shared/utils/safe-expression-evaluator.js';
|
|
6
|
+
import { setOwn } from '../../shared/utils/safe-record.js';
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
8
|
const __dirname = dirname(__filename);
|
|
8
9
|
/**
|
|
@@ -142,8 +143,9 @@ export class WorkflowLoader {
|
|
|
142
143
|
async createContext(templateName, variables) {
|
|
143
144
|
const workflow = await this.load(templateName);
|
|
144
145
|
// Validate required variables
|
|
146
|
+
// #1136: a variable counts as given only when it is an own property.
|
|
145
147
|
const missingVars = workflow.variables
|
|
146
|
-
.filter(v => v.required && !(v.name
|
|
148
|
+
.filter(v => v.required && !Object.hasOwn(variables, v.name))
|
|
147
149
|
.map(v => v.name);
|
|
148
150
|
if (missingVars.length > 0) {
|
|
149
151
|
throw new Error(`Missing required variables: ${missingVars.join(', ')}`);
|
|
@@ -151,11 +153,11 @@ export class WorkflowLoader {
|
|
|
151
153
|
// Resolve variables with defaults
|
|
152
154
|
const resolvedVariables = {};
|
|
153
155
|
workflow.variables.forEach(varDef => {
|
|
154
|
-
if (varDef.name
|
|
155
|
-
resolvedVariables
|
|
156
|
+
if (Object.hasOwn(variables, varDef.name)) {
|
|
157
|
+
setOwn(resolvedVariables, varDef.name, variables[varDef.name]);
|
|
156
158
|
}
|
|
157
159
|
else if ('default' in varDef) {
|
|
158
|
-
resolvedVariables
|
|
160
|
+
setOwn(resolvedVariables, varDef.name, varDef.default);
|
|
159
161
|
}
|
|
160
162
|
});
|
|
161
163
|
return {
|
|
@@ -217,7 +219,8 @@ export function interpolateVariables(template, variables) {
|
|
|
217
219
|
const keys = trimmedKey.split('.');
|
|
218
220
|
let value = variables;
|
|
219
221
|
for (const k of keys) {
|
|
220
|
-
|
|
222
|
+
// #1136: own properties only; {{constructor}} is not a variable.
|
|
223
|
+
if (value && typeof value === 'object' && Object.hasOwn(value, k)) {
|
|
221
224
|
value = value[k];
|
|
222
225
|
}
|
|
223
226
|
else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-qe",
|
|
3
|
-
"version": "3.15.
|
|
3
|
+
"version": "3.15.11",
|
|
4
4
|
"description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.9");process.exit(0)}
|
|
2
|
-
import{a,b,c}from"./chunk-PBZI2ZPV.js";import"./chunk-A6YIH4C4.js";import"./chunk-KIXYKUCI.js";import"./chunk-PVIA2FPD.js";import"./chunk-N3KEY4XJ.js";import"./chunk-HZ5NC6U5.js";export{a as AgentBoosterAdapter,b as createAgentBoosterAdapter,c as createAgentBoosterAdapterSync};
|