agentic-qe 3.8.13 → 3.9.0

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.
Files changed (359) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +48 -0
  3. package/dist/adapters/a2ui/integration/agui-sync.js +2 -1
  4. package/dist/audit/witness-chain.js +15 -3
  5. package/dist/boot/fast-paths.d.ts +24 -0
  6. package/dist/boot/fast-paths.js +43 -0
  7. package/dist/boot/parallel-prefetch.d.ts +26 -0
  8. package/dist/boot/parallel-prefetch.js +36 -0
  9. package/dist/cli/bundle.js +12 -9431
  10. package/dist/cli/chunks/adapter-WBR5NXS3.js +2 -0
  11. package/dist/cli/chunks/agent-booster-wasm-PQYB7VRU.js +2 -0
  12. package/dist/cli/chunks/agent-handler-QDAB5NQS.js +33 -0
  13. package/dist/cli/chunks/aqe-learning-engine-TK4JQCGT.js +2 -0
  14. package/dist/cli/chunks/audit-S7JUYYVP.js +3 -0
  15. package/dist/cli/chunks/base-2WXOSMBQ.js +2 -0
  16. package/dist/cli/chunks/better-sqlite3-7KY2RDXO.js +2 -0
  17. package/dist/cli/chunks/brain-handler-PPEGDCN4.js +68 -0
  18. package/dist/cli/chunks/branch-enumerator-XK4V5W7L.js +7 -0
  19. package/dist/cli/chunks/browser-PALA5PL3.js +4 -0
  20. package/dist/cli/chunks/browser-workflow-42F7GK5T.js +2 -0
  21. package/dist/cli/chunks/chunk-24FKIJNC.js +15 -0
  22. package/dist/cli/chunks/chunk-263XS447.js +2 -0
  23. package/dist/cli/chunks/chunk-2BZFNEN2.js +4 -0
  24. package/dist/cli/chunks/chunk-2E5NQNSU.js +180 -0
  25. package/dist/cli/chunks/chunk-2I7J3O6V.js +2 -0
  26. package/dist/cli/chunks/chunk-3ADGXLTM.js +14 -0
  27. package/dist/cli/chunks/chunk-3IHG3WOY.js +12 -0
  28. package/dist/cli/chunks/chunk-3IUNFTIF.js +2 -0
  29. package/dist/cli/chunks/chunk-3JPRUND5.js +2 -0
  30. package/dist/cli/chunks/chunk-3NZLZHJI.js +2 -0
  31. package/dist/cli/chunks/chunk-3THRQEZ2.js +95 -0
  32. package/dist/cli/chunks/chunk-3ZOONQG6.js +2 -0
  33. package/dist/cli/chunks/chunk-4B6NCELM.js +2 -0
  34. package/dist/cli/chunks/chunk-4I2IOUS4.js +2 -0
  35. package/dist/cli/chunks/chunk-4VBTXZRM.js +2 -0
  36. package/dist/cli/chunks/chunk-4VUPRTVX.js +3 -0
  37. package/dist/cli/chunks/chunk-4YOMLWEK.js +70 -0
  38. package/dist/cli/chunks/chunk-4YS3IJ45.js +2 -0
  39. package/dist/cli/chunks/chunk-5SKGFSKD.js +2 -0
  40. package/dist/cli/chunks/chunk-5T2ZQWKF.js +27 -0
  41. package/dist/cli/chunks/chunk-62ADTHV7.js +2 -0
  42. package/dist/cli/chunks/chunk-6EOS7KX2.js +2 -0
  43. package/dist/cli/chunks/chunk-6SVX4DJC.js +6 -0
  44. package/dist/cli/chunks/chunk-72WOAVK6.js +2 -0
  45. package/dist/cli/chunks/chunk-7R6YMLVS.js +3 -0
  46. package/dist/cli/chunks/chunk-7VDBAVTY.js +2 -0
  47. package/dist/cli/chunks/chunk-AFLLQ5PP.js +15 -0
  48. package/dist/cli/chunks/chunk-AKE543X2.js +2 -0
  49. package/dist/cli/chunks/chunk-B36CDR4U.js +2 -0
  50. package/dist/cli/chunks/chunk-B6LLWYQ6.js +2 -0
  51. package/dist/cli/chunks/chunk-BDIEMZ22.js +91 -0
  52. package/dist/cli/chunks/chunk-BGXNSCXX.js +4 -0
  53. package/dist/cli/chunks/chunk-BLBRY5UD.js +2 -0
  54. package/dist/cli/chunks/chunk-BPWXXEH2.js +3029 -0
  55. package/dist/cli/chunks/chunk-BR26T7ZS.js +180 -0
  56. package/dist/cli/chunks/chunk-BTREG4IW.js +2 -0
  57. package/dist/cli/chunks/chunk-BULKFVYX.js +2 -0
  58. package/dist/cli/chunks/chunk-BXAXGEFC.js +24 -0
  59. package/dist/cli/chunks/chunk-CL6POIX4.js +2 -0
  60. package/dist/cli/chunks/chunk-CS2KS7LP.js +2 -0
  61. package/dist/cli/chunks/chunk-CWFB6BSA.js +316 -0
  62. package/dist/cli/chunks/chunk-DRT3WKQW.js +2 -0
  63. package/dist/cli/chunks/chunk-EHDQJQ6Y.js +27 -0
  64. package/dist/cli/chunks/chunk-ESVQ6MEB.js +2 -0
  65. package/dist/cli/chunks/chunk-FEKY7T6Q.js +2 -0
  66. package/dist/cli/chunks/chunk-FGA7VIFR.js +7 -0
  67. package/dist/cli/chunks/chunk-FIA6X7UL.js +2 -0
  68. package/dist/cli/chunks/chunk-GAOJV3OX.js +2 -0
  69. package/dist/cli/chunks/chunk-GKNNSCLC.js +5 -0
  70. package/dist/cli/chunks/chunk-GPQ57KA4.js +2 -0
  71. package/dist/cli/chunks/chunk-GRUUQAR6.js +2 -0
  72. package/dist/cli/chunks/chunk-HRO6OZQD.js +2 -0
  73. package/dist/cli/chunks/chunk-HY6PMO5W.js +66 -0
  74. package/dist/cli/chunks/chunk-IAV2JMIX.js +167 -0
  75. package/dist/cli/chunks/chunk-IFNIIK34.js +21 -0
  76. package/dist/cli/chunks/chunk-IGJPMN4I.js +3 -0
  77. package/dist/cli/chunks/chunk-J3KWWR6Z.js +1 -0
  78. package/dist/cli/chunks/chunk-JBANAPWG.js +2 -0
  79. package/dist/cli/chunks/chunk-JJO7Y4H3.js +604 -0
  80. package/dist/cli/chunks/chunk-JRYGQO2W.js +2 -0
  81. package/dist/cli/chunks/chunk-JXM26HEE.js +2 -0
  82. package/dist/cli/chunks/chunk-JZSDOIXA.js +2 -0
  83. package/dist/cli/chunks/chunk-KP5NUODU.js +3 -0
  84. package/dist/cli/chunks/chunk-LHJQD2VU.js +750 -0
  85. package/dist/cli/chunks/chunk-LNQIY6BP.js +2 -0
  86. package/dist/cli/chunks/chunk-MDUHYUHF.js +2 -0
  87. package/dist/cli/chunks/chunk-MV6CMOJQ.js +65 -0
  88. package/dist/cli/chunks/chunk-MZOFWJTM.js +2 -0
  89. package/dist/cli/chunks/chunk-N2NS2PHA.js +45 -0
  90. package/dist/cli/chunks/chunk-N4TL73TH.js +314 -0
  91. package/dist/cli/chunks/chunk-N5UXCLFI.js +2 -0
  92. package/dist/cli/chunks/chunk-NZ2VCPN4.js +2 -0
  93. package/dist/cli/chunks/chunk-OF4D7MYI.js +2 -0
  94. package/dist/cli/chunks/chunk-OI5NGQO2.js +2 -0
  95. package/dist/cli/chunks/chunk-OLHKGP35.js +2 -0
  96. package/dist/cli/chunks/chunk-QOVHWZEP.js +1 -0
  97. package/dist/cli/chunks/chunk-RFSN6IDA.js +79 -0
  98. package/dist/cli/chunks/chunk-RTGGL7D7.js +4 -0
  99. package/dist/cli/chunks/chunk-RU5WAHB7.js +3 -0
  100. package/dist/cli/chunks/chunk-SUSEVMZT.js +2 -0
  101. package/dist/cli/chunks/chunk-TLHP5EII.js +2 -0
  102. package/dist/cli/chunks/chunk-TWUWL5EJ.js +2 -0
  103. package/dist/cli/chunks/chunk-U5RN7YQW.js +2 -0
  104. package/dist/cli/chunks/chunk-UFUVUO3J.js +2 -0
  105. package/dist/cli/chunks/chunk-UQHYFOBX.js +16 -0
  106. package/dist/cli/chunks/chunk-VOS4NQSF.js +2 -0
  107. package/dist/cli/chunks/chunk-VSVXUTJN.js +256 -0
  108. package/dist/cli/chunks/chunk-WBQSXPBI.js +2 -0
  109. package/dist/cli/chunks/chunk-WGMPEW2T.js +2 -0
  110. package/dist/cli/chunks/chunk-WIEC7VKK.js +2 -0
  111. package/dist/cli/chunks/chunk-WJ3DLOXF.js +14 -0
  112. package/dist/cli/chunks/chunk-X3KI6JOY.js +9 -0
  113. package/dist/cli/chunks/chunk-X5IJGWYG.js +2 -0
  114. package/dist/cli/chunks/chunk-XIBDETCS.js +146 -0
  115. package/dist/cli/chunks/chunk-XLRQYLWW.js +2 -0
  116. package/dist/cli/chunks/chunk-XO6PVK2P.js +3 -0
  117. package/dist/cli/chunks/chunk-XRE2HCWG.js +3 -0
  118. package/dist/cli/chunks/chunk-XT2V2322.js +2 -0
  119. package/dist/cli/chunks/chunk-Y7BHKZFJ.js +18 -0
  120. package/dist/cli/chunks/chunk-YAGODYIG.js +59 -0
  121. package/dist/cli/chunks/chunk-YANUP2RO.js +2 -0
  122. package/dist/cli/chunks/chunk-YPFOCNOE.js +30 -0
  123. package/dist/cli/chunks/chunk-YR6ZZGH7.js +81 -0
  124. package/dist/cli/chunks/chunk-YVA65UZL.js +2 -0
  125. package/dist/cli/chunks/chunk-YW2THB5Q.js +2 -0
  126. package/dist/cli/chunks/chunk-ZAPS3UGQ.js +20 -0
  127. package/dist/cli/chunks/chunk-ZDATDCYN.js +2 -0
  128. package/dist/cli/chunks/ci-J374KDLI.js +81 -0
  129. package/dist/cli/chunks/ci-output-7JN7F6CI.js +2 -0
  130. package/dist/cli/chunks/claude-flow-setup-245JLJCN.js +2 -0
  131. package/dist/cli/chunks/client-MCSNSH2C.js +2 -0
  132. package/dist/cli/chunks/cline-installer-LBA2M5N3.js +4 -0
  133. package/dist/cli/chunks/code-U4N4WONM.js +38 -0
  134. package/dist/cli/chunks/code-index-extractor-A57Z6BO4.js +3 -0
  135. package/dist/cli/chunks/codex-installer-UXMK2N4T.js +8 -0
  136. package/dist/cli/chunks/completions-W66BSCOE.js +1364 -0
  137. package/dist/cli/chunks/complexity-analyzer-AB4OZARV.js +2 -0
  138. package/dist/cli/chunks/continuedev-installer-LRFZ2SJM.js +14 -0
  139. package/dist/cli/chunks/copilot-installer-CQ3JYBIB.js +3 -0
  140. package/dist/cli/chunks/cost-tracker-4F723RB6.js +2 -0
  141. package/dist/cli/chunks/coverage-4PUEQXAY.js +27 -0
  142. package/dist/cli/chunks/cross-domain-router-OWR5IJ5G.js +2 -0
  143. package/dist/cli/chunks/cursor-installer-JZEDEDHA.js +3 -0
  144. package/dist/cli/chunks/daemon-B7TWGHXQ.js +19 -0
  145. package/dist/cli/chunks/dag-attention-scheduler-JWO6XI6A.js +2 -0
  146. package/dist/cli/chunks/detect-L6ZZHUSX.js +2 -0
  147. package/dist/cli/chunks/domain-handler-FT5FLZWL.js +25 -0
  148. package/dist/cli/chunks/domain-transfer-5Y4FGJAJ.js +2 -0
  149. package/dist/cli/chunks/dream-4TDBIYED.js +2 -0
  150. package/dist/cli/chunks/esm-node-2PKHKOTS.js +2 -0
  151. package/dist/cli/chunks/eval-GHMPFGWV.js +15 -0
  152. package/dist/cli/chunks/fast-paths-B3R647KN.js +2 -0
  153. package/dist/cli/chunks/feature-flags-DWS7ARSX.js +2 -0
  154. package/dist/cli/chunks/feature-flags-IVQ3AL4Q.js +2 -0
  155. package/dist/cli/chunks/file-discovery-QFPA6GMV.js +2 -0
  156. package/dist/cli/chunks/fleet-EKOKMOMW.js +43 -0
  157. package/dist/cli/chunks/gnn-wrapper-OYC55N5E.js +2 -0
  158. package/dist/cli/chunks/heartbeat-handler-MBBS4IBU.js +48 -0
  159. package/dist/cli/chunks/heartbeat-scheduler-XDGMOT7X.js +2 -0
  160. package/dist/cli/chunks/hnsw-index-YO7CT23I.js +2 -0
  161. package/dist/cli/chunks/hnswlib-node-56YWVXFE.js +2 -0
  162. package/dist/cli/chunks/hooks-L5VLZGEK.js +101 -0
  163. package/dist/cli/chunks/hypergraph-engine-A4Y2ZRAG.js +2 -0
  164. package/dist/cli/chunks/hypergraph-handler-3HDGB5SZ.js +35 -0
  165. package/dist/cli/chunks/impact-analyzer-UEIGXSZ4.js +2 -0
  166. package/dist/cli/chunks/init-handler-JDET6WUN.js +68 -0
  167. package/dist/cli/chunks/init-wizard-JWZUGIPJ.js +2 -0
  168. package/dist/cli/chunks/kernel-YNDTVKIW.js +2 -0
  169. package/dist/cli/chunks/kilocode-installer-GZZG5AFW.js +4 -0
  170. package/dist/cli/chunks/kiro-installer-IWNY5TKH.js +74 -0
  171. package/dist/cli/chunks/knowledge-graph-NGJKFTSN.js +2 -0
  172. package/dist/cli/chunks/learning-722ZNSZ6.js +107 -0
  173. package/dist/cli/chunks/llm-router-DNAV746L.js +30 -0
  174. package/dist/cli/chunks/load-Y3GCUFM4.js +2 -0
  175. package/dist/cli/chunks/load-test-GZUBXFF3.js +2 -0
  176. package/dist/cli/chunks/mcp-LKPIBZ3W.js +2 -0
  177. package/dist/cli/chunks/memory-L57MLFOP.js +32 -0
  178. package/dist/cli/chunks/memory-backend-3NQIZUXE.js +2 -0
  179. package/dist/cli/chunks/memory-handlers-MDZQ7HVW.js +2 -0
  180. package/dist/cli/chunks/opencode-installer-4HUB36H5.js +3 -0
  181. package/dist/cli/chunks/orchestrator-QHSBB2UC.js +371 -0
  182. package/dist/cli/chunks/pipeline-D3QER35Z.js +19 -0
  183. package/dist/cli/chunks/platform-T4E7Q3RD.js +2 -0
  184. package/dist/cli/chunks/plugin-JHW2YPRC.js +27 -0
  185. package/dist/cli/chunks/prime-radiant-advanced-wasm-G7CFNNQV.js +2 -0
  186. package/dist/cli/chunks/protocol-executor-SPUVRDWT.js +2 -0
  187. package/dist/cli/chunks/protocol-handler-2BQQ4HDM.js +20 -0
  188. package/dist/cli/chunks/prove-UQ6JFT73.js +3 -0
  189. package/dist/cli/chunks/qe-reasoning-bank-3HBK2FVD.js +2 -0
  190. package/dist/cli/chunks/quality-JRZYMC77.js +7 -0
  191. package/dist/cli/chunks/queen-coordinator-RW3NKO5A.js +2 -0
  192. package/dist/cli/chunks/real-embeddings-GK63VF35.js +2 -0
  193. package/dist/cli/chunks/roocode-installer-F4E2LAYR.js +4 -0
  194. package/dist/cli/chunks/router-RJGHWDQ3.js +2 -0
  195. package/dist/cli/chunks/routing-feedback-ZXBXFKX6.js +2 -0
  196. package/dist/cli/chunks/routing-handler-VNKFUUGB.js +20 -0
  197. package/dist/cli/chunks/ruvector-commands-2TLNHC3A.js +8 -0
  198. package/dist/cli/chunks/rvf-dual-writer-MQW2SJLT.js +2 -0
  199. package/dist/cli/chunks/rvf-native-adapter-LKFKTMUN.js +2 -0
  200. package/dist/cli/chunks/safe-db-G22E5ROA.js +2 -0
  201. package/dist/cli/chunks/schedule-Y7VVCPYV.js +2 -0
  202. package/dist/cli/chunks/scheduler-AUQIFQB7.js +2 -0
  203. package/dist/cli/chunks/security-EBEG2OPU.js +14 -0
  204. package/dist/cli/chunks/shared-rvf-dual-writer-BVSCQAFS.js +2 -0
  205. package/dist/cli/chunks/sqlite-persistence-JAVHUGGL.js +2 -0
  206. package/dist/cli/chunks/status-handler-VZ32M4G4.js +45 -0
  207. package/dist/cli/chunks/structural-health-K6LRCKV6.js +2 -0
  208. package/dist/cli/chunks/sync-MHSHNLIM.js +23 -0
  209. package/dist/cli/chunks/task-handler-JNOIBZ2G.js +49 -0
  210. package/dist/cli/chunks/task-handlers-P5DSUKND.js +2 -0
  211. package/dist/cli/chunks/test-DO22BNIL.js +33 -0
  212. package/dist/cli/chunks/test-scheduling-VLRQZEFL.js +15 -0
  213. package/dist/cli/chunks/token-bootstrap-4VJKGVMK.js +2 -0
  214. package/dist/cli/chunks/token-usage-LG3PXRXH.js +25 -0
  215. package/dist/cli/chunks/transformers-GY7SIKEU.js +2 -0
  216. package/dist/cli/chunks/tree-sitter-wasm-parser-FT2KB66N.js +2 -0
  217. package/dist/cli/chunks/types-QJGNBKP2.js +2 -0
  218. package/dist/cli/chunks/unified-memory-XYGENQUT.js +2 -0
  219. package/dist/cli/chunks/unified-memory-hnsw-MVEGQBF3.js +2 -0
  220. package/dist/cli/chunks/unified-persistence-PFRCWEUG.js +2 -0
  221. package/dist/cli/chunks/validate-VQCRSVNQ.js +21 -0
  222. package/dist/cli/chunks/validate-swarm-A5DHAWTP.js +14 -0
  223. package/dist/cli/chunks/vibium-RZBSL4EB.js +2 -0
  224. package/dist/cli/chunks/visual-security-V47BLGJM.js +2 -0
  225. package/dist/cli/chunks/web-tree-sitter-7C4NXEOF.js +2 -0
  226. package/dist/cli/chunks/windsurf-installer-ES3KPQG3.js +7 -0
  227. package/dist/cli/chunks/witness-chain-BR63P4A7.js +2 -0
  228. package/dist/cli/chunks/workflow-JETHX4ML.js +51 -0
  229. package/dist/cli/chunks/workflow-orchestrator-7PZMX3JZ.js +2 -0
  230. package/dist/cli/chunks/wrappers-WP5RH745.js +2 -0
  231. package/dist/cli/commands/daemon.d.ts +13 -0
  232. package/dist/cli/commands/daemon.js +224 -0
  233. package/dist/cli/commands/hooks-handlers/hooks-shared.js +2 -1
  234. package/dist/cli/commands/plugin.d.ts +12 -0
  235. package/dist/cli/commands/plugin.js +135 -0
  236. package/dist/cli/commands/workflow.d.ts +10 -0
  237. package/dist/cli/commands/workflow.js +587 -0
  238. package/dist/cli/handlers/brain-handler.js +13 -8
  239. package/dist/cli/handlers/heartbeat-handler.d.ts +1 -0
  240. package/dist/cli/handlers/heartbeat-handler.js +20 -10
  241. package/dist/cli/handlers/hypergraph-handler.js +3 -3
  242. package/dist/cli/handlers/init-handler.js +10 -9
  243. package/dist/cli/handlers/interfaces.d.ts +4 -4
  244. package/dist/cli/index.js +159 -638
  245. package/dist/cli/lazy-registry.d.ts +27 -0
  246. package/dist/cli/lazy-registry.js +70 -0
  247. package/dist/context/compaction/context-budget.d.ts +71 -0
  248. package/dist/context/compaction/context-budget.js +120 -0
  249. package/dist/context/compaction/index.d.ts +96 -0
  250. package/dist/context/compaction/index.js +259 -0
  251. package/dist/context/compaction/llm-caller-adapter.d.ts +14 -0
  252. package/dist/context/compaction/llm-caller-adapter.js +47 -0
  253. package/dist/context/compaction/tier1-microcompact.d.ts +33 -0
  254. package/dist/context/compaction/tier1-microcompact.js +47 -0
  255. package/dist/context/compaction/tier2-session-summary.d.ts +72 -0
  256. package/dist/context/compaction/tier2-session-summary.js +172 -0
  257. package/dist/context/compaction/tier3-llm-compact.d.ts +65 -0
  258. package/dist/context/compaction/tier3-llm-compact.js +166 -0
  259. package/dist/context/compaction/tier4-reactive.d.ts +54 -0
  260. package/dist/context/compaction/tier4-reactive.js +129 -0
  261. package/dist/coordination/consensus/providers/claude-provider.d.ts +1 -0
  262. package/dist/coordination/consensus/providers/claude-provider.js +23 -3
  263. package/dist/domains/test-generation/generators/base-test-generator.d.ts +1 -1
  264. package/dist/domains/test-generation/generators/base-test-generator.js +11 -11
  265. package/dist/domains/test-generation/generators/go-test-generator.js +12 -12
  266. package/dist/domains/test-generation/generators/junit5-generator.js +9 -9
  267. package/dist/domains/test-generation/generators/kotlin-junit-generator.js +10 -10
  268. package/dist/domains/test-generation/generators/pytest-generator.js +8 -8
  269. package/dist/domains/test-generation/generators/swift-testing-generator.js +8 -8
  270. package/dist/domains/test-generation/generators/test-value-helpers.d.ts +20 -0
  271. package/dist/domains/test-generation/generators/test-value-helpers.js +48 -0
  272. package/dist/domains/test-generation/generators/xunit-generator.js +11 -11
  273. package/dist/hooks/cross-phase-hooks.d.ts +11 -0
  274. package/dist/hooks/cross-phase-hooks.js +73 -9
  275. package/dist/hooks/security/config-snapshot.d.ts +21 -0
  276. package/dist/hooks/security/config-snapshot.js +33 -0
  277. package/dist/hooks/security/exit-codes.d.ts +28 -0
  278. package/dist/hooks/security/exit-codes.js +33 -0
  279. package/dist/hooks/security/index.d.ts +15 -0
  280. package/dist/hooks/security/index.js +15 -0
  281. package/dist/hooks/security/ssrf-guard.d.ts +25 -0
  282. package/dist/hooks/security/ssrf-guard.js +69 -0
  283. package/dist/index.d.ts +1 -1
  284. package/dist/index.js +1 -2
  285. package/dist/init/init-wizard-hooks.js +15 -1
  286. package/dist/init/phases/07-hooks.js +2 -2
  287. package/dist/init/settings-merge.js +3 -7
  288. package/dist/kernel/kernel.js +35 -0
  289. package/dist/kernel/memory-backend.js +3 -1
  290. package/dist/mcp/bundle.js +416 -362
  291. package/dist/mcp/entry.js +132 -77
  292. package/dist/mcp/http-server.js +4 -1
  293. package/dist/mcp/index.d.ts +2 -2
  294. package/dist/mcp/index.js +5 -4
  295. package/dist/mcp/middleware/batch-executor.d.ts +46 -0
  296. package/dist/mcp/middleware/batch-executor.js +150 -0
  297. package/dist/mcp/middleware/microcompact.d.ts +97 -0
  298. package/dist/mcp/middleware/microcompact.js +179 -0
  299. package/dist/mcp/middleware/middleware-chain.d.ts +37 -0
  300. package/dist/mcp/middleware/middleware-chain.js +60 -0
  301. package/dist/mcp/protocol-server.d.ts +16 -0
  302. package/dist/mcp/protocol-server.js +140 -36
  303. package/dist/mcp/services/session-durability-middleware.d.ts +22 -0
  304. package/dist/mcp/services/session-durability-middleware.js +64 -0
  305. package/dist/mcp/services/session-resume.d.ts +29 -0
  306. package/dist/mcp/services/session-resume.js +221 -0
  307. package/dist/mcp/services/session-store.d.ts +84 -0
  308. package/dist/mcp/services/session-store.js +163 -0
  309. package/dist/mcp/tool-registry.d.ts +9 -0
  310. package/dist/mcp/tool-registry.js +30 -1
  311. package/dist/mcp/types.d.ts +1 -0
  312. package/dist/plugins/cache.d.ts +44 -0
  313. package/dist/plugins/cache.js +149 -0
  314. package/dist/plugins/index.d.ts +15 -0
  315. package/dist/plugins/index.js +15 -0
  316. package/dist/plugins/lifecycle.d.ts +67 -0
  317. package/dist/plugins/lifecycle.js +175 -0
  318. package/dist/plugins/manifest.d.ts +45 -0
  319. package/dist/plugins/manifest.js +173 -0
  320. package/dist/plugins/resolver.d.ts +37 -0
  321. package/dist/plugins/resolver.js +80 -0
  322. package/dist/plugins/security.d.ts +23 -0
  323. package/dist/plugins/security.js +125 -0
  324. package/dist/plugins/sources/github.d.ts +17 -0
  325. package/dist/plugins/sources/github.js +77 -0
  326. package/dist/plugins/sources/local.d.ts +20 -0
  327. package/dist/plugins/sources/local.js +32 -0
  328. package/dist/plugins/sources/npm.d.ts +18 -0
  329. package/dist/plugins/sources/npm.js +82 -0
  330. package/dist/shared/llm/retry.d.ts +5 -2
  331. package/dist/shared/llm/retry.js +7 -3
  332. package/dist/shared/prompt-cache-latch.d.ts +41 -0
  333. package/dist/shared/prompt-cache-latch.js +63 -0
  334. package/dist/shared/retry-engine.d.ts +77 -0
  335. package/dist/shared/retry-engine.js +194 -0
  336. package/dist/workers/daemon.d.ts +8 -0
  337. package/dist/workers/daemon.js +13 -0
  338. package/dist/workers/quality-daemon/ci-monitor.d.ts +55 -0
  339. package/dist/workers/quality-daemon/ci-monitor.js +147 -0
  340. package/dist/workers/quality-daemon/coverage-delta.d.ts +72 -0
  341. package/dist/workers/quality-daemon/coverage-delta.js +135 -0
  342. package/dist/workers/quality-daemon/git-watcher.d.ts +51 -0
  343. package/dist/workers/quality-daemon/git-watcher.js +209 -0
  344. package/dist/workers/quality-daemon/index.d.ts +119 -0
  345. package/dist/workers/quality-daemon/index.js +343 -0
  346. package/dist/workers/quality-daemon/nightly-consolidation.d.ts +74 -0
  347. package/dist/workers/quality-daemon/nightly-consolidation.js +136 -0
  348. package/dist/workers/quality-daemon/notification-service.d.ts +67 -0
  349. package/dist/workers/quality-daemon/notification-service.js +178 -0
  350. package/dist/workers/quality-daemon/persistent-memory.d.ts +31 -0
  351. package/dist/workers/quality-daemon/persistent-memory.js +30 -0
  352. package/dist/workers/quality-daemon/priority-queue.d.ts +97 -0
  353. package/dist/workers/quality-daemon/priority-queue.js +126 -0
  354. package/dist/workers/quality-daemon/test-suggester.d.ts +50 -0
  355. package/dist/workers/quality-daemon/test-suggester.js +121 -0
  356. package/dist/workers/worker-manager.js +2 -1
  357. package/package.json +1 -1
  358. package/dist/mcp/server.d.ts +0 -46
  359. package/dist/mcp/server.js +0 -802
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Agentic QE v3 - Tier 4: Reactive Compaction (IMP-08)
3
+ *
4
+ * Last-resort compaction triggered by 413 errors or context overflow
5
+ * detection. Aggressively peels the oldest conversation rounds until
6
+ * the estimated token count drops below the recovery target.
7
+ *
8
+ * This tier is destructive — it drops messages entirely (no summary).
9
+ * It exists to recover from situations where the context window is
10
+ * critically full and the session would otherwise fail.
11
+ */
12
+ import { estimateTokensPadded } from '../../mcp/middleware/microcompact';
13
+ // ============================================================================
14
+ // Defaults
15
+ // ============================================================================
16
+ const DEFAULT_RECOVERY_TARGET = 30_000;
17
+ const DEFAULT_MIN_PRESERVED = 4;
18
+ // ============================================================================
19
+ // Tier4Reactive
20
+ // ============================================================================
21
+ export class Tier4Reactive {
22
+ recoveryTarget;
23
+ minPreserved;
24
+ constructor(options = {}) {
25
+ this.recoveryTarget = options.recoveryTarget ?? DEFAULT_RECOVERY_TARGET;
26
+ this.minPreserved = options.minPreservedMessages ?? DEFAULT_MIN_PRESERVED;
27
+ }
28
+ /**
29
+ * Aggressively peel oldest messages until under the recovery target.
30
+ *
31
+ * Algorithm:
32
+ * 1. Compute total tokens.
33
+ * 2. If already under target, return early.
34
+ * 3. Walk forward from the oldest message, dropping messages until
35
+ * remaining tokens are at or below recoveryTarget.
36
+ * 4. Never drop below minPreservedMessages from the tail.
37
+ * 5. When dropping a tool_result, also drop its paired tool_use (and vice versa).
38
+ */
39
+ compact(messages, trigger = 'context_overflow') {
40
+ if (messages.length === 0) {
41
+ return {
42
+ tier: 4,
43
+ survivingMessages: [],
44
+ survivingTokens: 0,
45
+ droppedCount: 0,
46
+ tokensSaved: 0,
47
+ trigger,
48
+ };
49
+ }
50
+ // Annotate tokens
51
+ const annotated = messages.map(m => ({
52
+ ...m,
53
+ estimatedTokens: m.estimatedTokens ?? estimateTokensPadded(m.content),
54
+ }));
55
+ const totalTokens = annotated.reduce((s, m) => s + m.estimatedTokens, 0);
56
+ // Already under target?
57
+ if (totalTokens <= this.recoveryTarget) {
58
+ return {
59
+ tier: 4,
60
+ survivingMessages: messages,
61
+ survivingTokens: totalTokens,
62
+ droppedCount: 0,
63
+ tokensSaved: 0,
64
+ trigger,
65
+ };
66
+ }
67
+ // Build pair map: toolUseId -> indices of both tool_use and tool_result
68
+ const pairMap = new Map();
69
+ for (let i = 0; i < annotated.length; i++) {
70
+ const m = annotated[i];
71
+ if (m.toolUseId) {
72
+ const existing = pairMap.get(m.toolUseId) ?? [];
73
+ existing.push(i);
74
+ pairMap.set(m.toolUseId, existing);
75
+ }
76
+ }
77
+ // Mark messages for dropping
78
+ const dropped = new Set();
79
+ let remainingTokens = totalTokens;
80
+ // The tail we must preserve
81
+ const preserveFrom = Math.max(0, annotated.length - this.minPreserved);
82
+ for (let i = 0; i < annotated.length; i++) {
83
+ if (remainingTokens <= this.recoveryTarget)
84
+ break;
85
+ if (i >= preserveFrom)
86
+ break; // Don't touch the preserved tail
87
+ if (dropped.has(i))
88
+ continue;
89
+ // Drop this message
90
+ dropped.add(i);
91
+ remainingTokens -= annotated[i].estimatedTokens;
92
+ // If part of a pair, drop the partner too
93
+ if (annotated[i].toolUseId) {
94
+ const partners = pairMap.get(annotated[i].toolUseId) ?? [];
95
+ for (const partnerIdx of partners) {
96
+ if (!dropped.has(partnerIdx) && partnerIdx < preserveFrom) {
97
+ dropped.add(partnerIdx);
98
+ remainingTokens -= annotated[partnerIdx].estimatedTokens;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ const surviving = annotated.filter((_, i) => !dropped.has(i));
104
+ const survivingTokens = surviving.reduce((s, m) => s + m.estimatedTokens, 0);
105
+ return {
106
+ tier: 4,
107
+ survivingMessages: surviving,
108
+ survivingTokens,
109
+ droppedCount: dropped.size,
110
+ tokensSaved: totalTokens - survivingTokens,
111
+ trigger,
112
+ };
113
+ }
114
+ /**
115
+ * Convenience: check if a given HTTP status or error message indicates
116
+ * a context overflow that should trigger reactive compaction.
117
+ */
118
+ static isContextOverflow(statusOrMessage) {
119
+ if (typeof statusOrMessage === 'number') {
120
+ return statusOrMessage === 413;
121
+ }
122
+ const lower = statusOrMessage.toLowerCase();
123
+ return lower.includes('context_length_exceeded')
124
+ || lower.includes('maximum context length')
125
+ || lower.includes('too many tokens')
126
+ || lower.includes('413');
127
+ }
128
+ }
129
+ //# sourceMappingURL=tier4-reactive.js.map
@@ -61,6 +61,7 @@ export declare class ClaudeModelProvider extends BaseModelProvider {
61
61
  private readonly config;
62
62
  private readonly apiKey;
63
63
  private readonly baseUrl;
64
+ private readonly cacheLatch;
64
65
  /**
65
66
  * Create a new Claude provider
66
67
  *
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { toErrorMessage, toError } from '../../../shared/error-utils.js';
11
11
  import { BaseModelProvider, } from '../model-provider';
12
+ import { PromptCacheLatch } from '../../../shared/prompt-cache-latch.js';
12
13
  // ============================================================================
13
14
  // Claude Model Provider Implementation
14
15
  // ============================================================================
@@ -49,6 +50,8 @@ export class ClaudeModelProvider extends BaseModelProvider {
49
50
  config;
50
51
  apiKey;
51
52
  baseUrl;
53
+ // IMP-05: Prompt cache latch — stabilizes API params to maximize cache hits
54
+ cacheLatch = new PromptCacheLatch();
52
55
  /**
53
56
  * Create a new Claude provider
54
57
  *
@@ -87,11 +90,28 @@ export class ClaudeModelProvider extends BaseModelProvider {
87
90
  if (this.disposed) {
88
91
  throw new Error('Provider has been disposed');
89
92
  }
90
- const model = options?.model || this.config.defaultModel;
91
- const maxTokens = options?.maxTokens || 4096;
93
+ const requestedModel = options?.model || this.config.defaultModel;
94
+ const requestedMaxTokens = options?.maxTokens || 4096;
92
95
  const temperature = options?.temperature ?? 0.7;
93
96
  const timeout = options?.timeout || this.config.defaultTimeout;
94
- const systemPrompt = options?.systemPrompt || this.getDefaultSystemPrompt();
97
+ const requestedSystem = options?.systemPrompt || this.getDefaultSystemPrompt();
98
+ // IMP-05: Latch stable params to prevent prompt cache busting.
99
+ // If caller explicitly overrides, reset and re-latch.
100
+ if (this.cacheLatch.has('model') && this.cacheLatch.get('model') !== requestedModel) {
101
+ this.cacheLatch.reset('model');
102
+ }
103
+ if (this.cacheLatch.has('max_tokens') && this.cacheLatch.get('max_tokens') !== requestedMaxTokens) {
104
+ this.cacheLatch.reset('max_tokens');
105
+ }
106
+ if (this.cacheLatch.has('system') && this.cacheLatch.get('system') !== requestedSystem) {
107
+ this.cacheLatch.reset('system');
108
+ }
109
+ this.cacheLatch.latch('model', requestedModel);
110
+ this.cacheLatch.latch('max_tokens', requestedMaxTokens);
111
+ this.cacheLatch.latch('system', requestedSystem);
112
+ const model = this.cacheLatch.get('model');
113
+ const maxTokens = this.cacheLatch.get('max_tokens');
114
+ const systemPrompt = this.cacheLatch.get('system');
95
115
  const request = {
96
116
  model,
97
117
  max_tokens: maxTokens,
@@ -43,7 +43,7 @@ export declare abstract class BaseTestGenerator implements ITestGenerator {
43
43
  private static readonly TYPE_VALUE_TABLE;
44
44
  /**
45
45
  * Generate a test value for a parameter based on its type and name
46
- * Uses @faker-js/faker for realistic test data
46
+ * Uses lightweight test value helpers for realistic test data
47
47
  *
48
48
  * @param param - Parameter information
49
49
  * @returns Generated test value as a string
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module test-generation/generators
9
9
  */
10
- import { faker } from '@faker-js/faker';
10
+ import { testValues } from './test-value-helpers';
11
11
  /**
12
12
  * BaseTestGenerator - Abstract base class for test generators
13
13
  *
@@ -33,21 +33,21 @@ export class BaseTestGenerator {
33
33
  * Checked in order; first match wins.
34
34
  */
35
35
  static NAME_VALUE_TABLE = [
36
- ['id', () => `'${faker.string.uuid()}'`],
37
- ['email', () => `'${faker.internet.email()}'`],
38
- ['name', () => `'${faker.person.fullName()}'`],
39
- ['url', () => `'${faker.internet.url()}'`],
40
- ['date', () => `new Date('${faker.date.recent().toISOString()}')`],
41
- ['phone', () => `'${faker.phone.number()}'`],
42
- ['address', () => `'${faker.location.streetAddress()}'`],
36
+ ['id', () => `'${testValues.uuid()}'`],
37
+ ['email', () => `'${testValues.email()}'`],
38
+ ['name', () => `'${testValues.fullName()}'`],
39
+ ['url', () => `'${testValues.url()}'`],
40
+ ['date', () => `new Date('${testValues.recentDate()}')`],
41
+ ['phone', () => `'${testValues.phone()}'`],
42
+ ['address', () => `'${testValues.streetAddress()}'`],
43
43
  ];
44
44
  /**
45
45
  * Type-based value generators. Each entry is [typeSubstring, generatorFn].
46
46
  * Checked in order; first match wins.
47
47
  */
48
48
  static TYPE_VALUE_TABLE = [
49
- ['string', () => `'${faker.lorem.word()}'`],
50
- ['number', () => String(faker.number.int({ min: 1, max: 100 }))],
49
+ ['string', () => `'${testValues.word()}'`],
50
+ ['number', () => String(testValues.int(1, 100))],
51
51
  ['boolean', () => 'true'],
52
52
  ['[]', () => '[]'],
53
53
  ['array', () => '[]'],
@@ -59,7 +59,7 @@ export class BaseTestGenerator {
59
59
  ];
60
60
  /**
61
61
  * Generate a test value for a parameter based on its type and name
62
- * Uses @faker-js/faker for realistic test data
62
+ * Uses lightweight test value helpers for realistic test data
63
63
  *
64
64
  * @param param - Parameter information
65
65
  * @returns Generated test value as a string
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * @module test-generation/generators
16
16
  */
17
- import { faker } from '@faker-js/faker';
17
+ import { testValues } from './test-value-helpers';
18
18
  import { BaseTestGenerator } from './base-test-generator';
19
19
  /**
20
20
  * GoTestGenerator - Test generator for Go's testing package
@@ -496,28 +496,28 @@ func Test${funcName}_Cover_${lines[0]}_${lines[lines.length - 1]}(t *testing.T)
496
496
  // Infer from param name
497
497
  if (name.includes('id') && !name.includes('valid')) {
498
498
  if (type.includes('int'))
499
- return String(faker.number.int({ min: 1, max: 1000 }));
500
- return `"${faker.string.uuid()}"`;
499
+ return String(testValues.int(1, 1000));
500
+ return `"${testValues.uuid()}"`;
501
501
  }
502
502
  if (name.includes('name'))
503
- return `"${faker.person.fullName()}"`;
503
+ return `"${testValues.fullName()}"`;
504
504
  if (name.includes('email'))
505
- return `"${faker.internet.email()}"`;
505
+ return `"${testValues.email()}"`;
506
506
  if (name.includes('url'))
507
- return `"${faker.internet.url()}"`;
507
+ return `"${testValues.url()}"`;
508
508
  // Infer from type
509
509
  if (type.includes('string') || type === 'str')
510
- return `"${faker.lorem.word()}"`;
510
+ return `"${testValues.word()}"`;
511
511
  if (type.includes('int64'))
512
- return `int64(${faker.number.int({ min: 1, max: 100 })})`;
512
+ return `int64(${testValues.int(1, 100)})`;
513
513
  if (type.includes('int32'))
514
- return `int32(${faker.number.int({ min: 1, max: 100 })})`;
514
+ return `int32(${testValues.int(1, 100)})`;
515
515
  if (type.includes('int'))
516
- return String(faker.number.int({ min: 1, max: 100 }));
516
+ return String(testValues.int(1, 100));
517
517
  if (type.includes('float64'))
518
- return `${faker.number.float({ min: 1, max: 100, fractionDigits: 2 })}`;
518
+ return `${testValues.float(1, 100, 2)}`;
519
519
  if (type.includes('float32'))
520
- return `float32(${faker.number.float({ min: 1, max: 100, fractionDigits: 2 })})`;
520
+ return `float32(${testValues.float(1, 100, 2)})`;
521
521
  if (type.includes('bool'))
522
522
  return 'true';
523
523
  if (type.includes('[]byte'))
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @module test-generation/generators
13
13
  */
14
- import { faker } from '@faker-js/faker';
14
+ import { testValues } from './test-value-helpers';
15
15
  import { BaseTestGenerator } from './base-test-generator';
16
16
  import { detectSpringAnnotations } from '../detectors/spring-detector.js';
17
17
  /**
@@ -488,24 +488,24 @@ class ${moduleName}CoverageTest {
488
488
  const name = param.name.toLowerCase();
489
489
  // Infer from param name
490
490
  if (name.includes('id'))
491
- return `${faker.number.int({ min: 1, max: 1000 })}L`;
491
+ return `${testValues.int(1, 1000)}L`;
492
492
  if (name.includes('email'))
493
- return `"${faker.internet.email()}"`;
493
+ return `"${testValues.email()}"`;
494
494
  if (name.includes('name'))
495
- return `"${faker.person.fullName()}"`;
495
+ return `"${testValues.fullName()}"`;
496
496
  if (name.includes('url'))
497
- return `"${faker.internet.url()}"`;
497
+ return `"${testValues.url()}"`;
498
498
  // Infer from type
499
499
  if (type === 'long' || type === 'Long')
500
- return `${faker.number.int({ min: 1, max: 1000 })}L`;
500
+ return `${testValues.int(1, 1000)}L`;
501
501
  if (type === 'int' || type === 'integer' || type === 'Integer')
502
- return String(faker.number.int({ min: 1, max: 100 }));
502
+ return String(testValues.int(1, 100));
503
503
  if (type === 'double' || type === 'Double' || type === 'float' || type === 'Float')
504
- return `${faker.number.float({ min: 0, max: 100 })}`;
504
+ return `${testValues.float(0, 100)}`;
505
505
  if (type === 'boolean' || type === 'Boolean')
506
506
  return 'true';
507
507
  if (type.includes('string'))
508
- return `"${faker.lorem.word()}"`;
508
+ return `"${testValues.word()}"`;
509
509
  if (type.includes('list'))
510
510
  return 'List.of()';
511
511
  if (type.includes('map'))
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @module test-generation/generators
13
13
  */
14
- import { faker } from '@faker-js/faker';
14
+ import { testValues } from './test-value-helpers';
15
15
  import { BaseTestGenerator } from './base-test-generator';
16
16
  /**
17
17
  * KotlinJUnitGenerator - Test generator for Kotlin's JUnit 5 + MockK framework
@@ -493,26 +493,26 @@ class ${moduleName}CoverageTest {
493
493
  const name = param.name.toLowerCase();
494
494
  // Infer from param name
495
495
  if (name.includes('id'))
496
- return `${faker.number.int({ min: 1, max: 1000 })}L`;
496
+ return `${testValues.int(1, 1000)}L`;
497
497
  if (name.includes('email'))
498
- return `"${faker.internet.email()}"`;
498
+ return `"${testValues.email()}"`;
499
499
  if (name.includes('name'))
500
- return `"${faker.person.fullName()}"`;
500
+ return `"${testValues.fullName()}"`;
501
501
  if (name.includes('url'))
502
- return `"${faker.internet.url()}"`;
502
+ return `"${testValues.url()}"`;
503
503
  // Infer from type
504
504
  if (type === 'long')
505
- return `${faker.number.int({ min: 1, max: 1000 })}L`;
505
+ return `${testValues.int(1, 1000)}L`;
506
506
  if (type === 'int')
507
- return String(faker.number.int({ min: 1, max: 100 }));
507
+ return String(testValues.int(1, 100));
508
508
  if (type === 'double')
509
- return `${faker.number.float({ min: 0, max: 100 })}`;
509
+ return `${testValues.float(0, 100)}`;
510
510
  if (type === 'float')
511
- return `${faker.number.float({ min: 0, max: 100 })}f`;
511
+ return `${testValues.float(0, 100)}f`;
512
512
  if (type === 'boolean')
513
513
  return 'true';
514
514
  if (type === 'string')
515
- return `"${faker.lorem.word()}"`;
515
+ return `"${testValues.word()}"`;
516
516
  if (type.includes('list'))
517
517
  return 'emptyList()';
518
518
  if (type.includes('map'))
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * @module test-generation/generators
12
12
  */
13
- import { faker } from '@faker-js/faker';
13
+ import { testValues } from './test-value-helpers';
14
14
  import { BaseTestGenerator } from './base-test-generator';
15
15
  /**
16
16
  * PytestGenerator - Test generator for Python's pytest framework
@@ -412,18 +412,18 @@ class Test${this.pascalCase(moduleName)}Coverage:
412
412
  const name = param.name.toLowerCase();
413
413
  // Infer from param name
414
414
  if (name.includes('id'))
415
- return `"${faker.string.uuid()}"`;
415
+ return `"${testValues.uuid()}"`;
416
416
  if (name.includes('name'))
417
- return `"${faker.person.fullName()}"`;
417
+ return `"${testValues.fullName()}"`;
418
418
  if (name.includes('email'))
419
- return `"${faker.internet.email()}"`;
419
+ return `"${testValues.email()}"`;
420
420
  if (name.includes('url'))
421
- return `"${faker.internet.url()}"`;
421
+ return `"${testValues.url()}"`;
422
422
  // Infer from type
423
423
  if (type.includes('str'))
424
- return `"${faker.lorem.word()}"`;
424
+ return `"${testValues.word()}"`;
425
425
  if (type.includes('int') || type.includes('number')) {
426
- return String(faker.number.int({ min: 1, max: 100 }));
426
+ return String(testValues.int(1, 100));
427
427
  }
428
428
  if (type.includes('bool'))
429
429
  return 'True';
@@ -432,7 +432,7 @@ class Test${this.pascalCase(moduleName)}Coverage:
432
432
  if (type.includes('dict') || type.includes('{}'))
433
433
  return '{}';
434
434
  if (type.includes('float'))
435
- return String(faker.number.float({ min: 0, max: 100 }));
435
+ return String(testValues.float(0, 100));
436
436
  return 'None';
437
437
  }
438
438
  }
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * @module test-generation/generators
15
15
  */
16
- import { faker } from '@faker-js/faker';
16
+ import { testValues } from './test-value-helpers';
17
17
  import { BaseTestGenerator } from './base-test-generator';
18
18
  /**
19
19
  * SwiftTestingGenerator - Test generator for Apple's Swift Testing framework
@@ -425,20 +425,20 @@ struct ${moduleName}CoverageTests {
425
425
  const lower = type.toLowerCase();
426
426
  // Infer from param name
427
427
  if (name.includes('id'))
428
- return `"${faker.string.uuid()}"`;
428
+ return `"${testValues.uuid()}"`;
429
429
  if (name.includes('email'))
430
- return `"${faker.internet.email()}"`;
430
+ return `"${testValues.email()}"`;
431
431
  if (name.includes('name'))
432
- return `"${faker.person.fullName()}"`;
432
+ return `"${testValues.fullName()}"`;
433
433
  if (name.includes('url'))
434
- return `"${faker.internet.url()}"`;
434
+ return `"${testValues.url()}"`;
435
435
  // Infer from type
436
436
  if (lower === 'string')
437
- return `"${faker.lorem.word()}"`;
437
+ return `"${testValues.word()}"`;
438
438
  if (lower === 'int')
439
- return String(faker.number.int({ min: 1, max: 100 }));
439
+ return String(testValues.int(1, 100));
440
440
  if (lower === 'double' || lower === 'float' || lower === 'cgfloat')
441
- return String(faker.number.float({ min: 0, max: 100, fractionDigits: 2 }));
441
+ return String(testValues.float(0, 100, 2));
442
442
  if (lower === 'bool')
443
443
  return 'true';
444
444
  if (lower.startsWith('[') && lower.endsWith(']'))
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Lightweight test value generators — replaces @faker-js/faker in generators.
3
+ *
4
+ * These produce plausible string literals for generated test code.
5
+ * They do NOT need cryptographic randomness or statistical distributions —
6
+ * they only produce placeholder values embedded in source code output.
7
+ */
8
+ export declare const testValues: {
9
+ uuid: () => string;
10
+ email: () => string;
11
+ fullName: () => string;
12
+ url: () => string;
13
+ recentDate: () => string;
14
+ phone: () => string;
15
+ streetAddress: () => string;
16
+ word: () => string;
17
+ int: (min?: number, max?: number) => number;
18
+ float: (min?: number, max?: number, fractionDigits?: number) => number;
19
+ };
20
+ //# sourceMappingURL=test-value-helpers.d.ts.map
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Lightweight test value generators — replaces @faker-js/faker in generators.
3
+ *
4
+ * These produce plausible string literals for generated test code.
5
+ * They do NOT need cryptographic randomness or statistical distributions —
6
+ * they only produce placeholder values embedded in source code output.
7
+ */
8
+ import { randomBytes, randomInt, randomUUID } from 'node:crypto';
9
+ function randomHex(bytes) {
10
+ return randomBytes(bytes).toString('hex');
11
+ }
12
+ export const testValues = {
13
+ uuid: () => randomUUID(),
14
+ email: () => `user_${randomHex(3)}@example.com`,
15
+ fullName: () => {
16
+ const first = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve', 'Frank'];
17
+ const last = ['Smith', 'Jones', 'Lee', 'Garcia', 'Chen', 'Novak'];
18
+ return `${first[randomInt(first.length)]} ${last[randomInt(last.length)]}`;
19
+ },
20
+ url: () => `https://example.com/${randomHex(4)}`,
21
+ recentDate: () => new Date(Date.now() - randomInt(7 * 86400000)).toISOString(),
22
+ phone: () => `+1${String(randomInt(2000000000, 9999999999))}`,
23
+ streetAddress: () => `${randomInt(1, 9999)} Main St`,
24
+ word: () => {
25
+ const words = ['alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot', 'golf', 'hotel'];
26
+ return words[randomInt(words.length)];
27
+ },
28
+ int: (min = 1, max = 100) => {
29
+ if (min > max) {
30
+ const t = min;
31
+ min = max;
32
+ max = t;
33
+ }
34
+ return randomInt(min, max + 1);
35
+ },
36
+ float: (min = 0, max = 100, fractionDigits = 2) => {
37
+ if (min > max) {
38
+ const t = min;
39
+ min = max;
40
+ max = t;
41
+ }
42
+ if (min === max)
43
+ return min;
44
+ const raw = min + (randomInt(0, 1_000_001) / 1_000_000) * (max - min);
45
+ return Number(raw.toFixed(fractionDigits));
46
+ },
47
+ };
48
+ //# sourceMappingURL=test-value-helpers.js.map
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @module test-generation/generators
13
13
  */
14
- import { faker } from '@faker-js/faker';
14
+ import { testValues } from './test-value-helpers';
15
15
  import { BaseTestGenerator } from './base-test-generator';
16
16
  /**
17
17
  * XUnitGenerator - Test generator for C#'s xUnit framework
@@ -363,25 +363,25 @@ namespace Tests.${className}.Coverage
363
363
  const name = param.name.toLowerCase();
364
364
  // Infer from param name
365
365
  if (name.includes('id') && (type.includes('int') || type === 'unknown')) {
366
- return String(faker.number.int({ min: 1, max: 1000 }));
366
+ return String(testValues.int(1, 1000));
367
367
  }
368
368
  if (name.includes('id'))
369
- return `"${faker.string.uuid()}"`;
369
+ return `"${testValues.uuid()}"`;
370
370
  if (name.includes('name'))
371
- return `"${faker.person.fullName()}"`;
371
+ return `"${testValues.fullName()}"`;
372
372
  if (name.includes('email'))
373
- return `"${faker.internet.email()}"`;
373
+ return `"${testValues.email()}"`;
374
374
  if (name.includes('url'))
375
- return `"${faker.internet.url()}"`;
375
+ return `"${testValues.url()}"`;
376
376
  // Infer from type
377
377
  if (type === 'int' || type === 'int32' || type === 'int64' || type === 'long') {
378
- return String(faker.number.int({ min: 1, max: 100 }));
378
+ return String(testValues.int(1, 100));
379
379
  }
380
380
  if (type === 'double' || type === 'float' || type === 'decimal') {
381
- return `${faker.number.float({ min: 0, max: 100, fractionDigits: 2 })}m`;
381
+ return `${testValues.float(0, 100, 2)}m`;
382
382
  }
383
383
  if (type === 'string' || type.includes('string'))
384
- return `"${faker.lorem.word()}"`;
384
+ return `"${testValues.word()}"`;
385
385
  if (type === 'bool' || type === 'boolean')
386
386
  return 'true';
387
387
  if (type.includes('list<') || type.includes('ienumerable<') || type.includes('[]')) {
@@ -467,10 +467,10 @@ namespace Tests.${className}.Coverage
467
467
  const values = params.map(p => {
468
468
  const type = p.type?.toLowerCase() || '';
469
469
  if (type.includes('int') || type.includes('number')) {
470
- return String(faker.number.int({ min: 1, max: 100 }));
470
+ return String(testValues.int(1, 100));
471
471
  }
472
472
  if (type.includes('string') || type === 'unknown') {
473
- return `"${faker.lorem.word()}"`;
473
+ return `"${testValues.word()}"`;
474
474
  }
475
475
  return 'null';
476
476
  });
@@ -26,6 +26,17 @@ export declare class CrossPhaseHookExecutor {
26
26
  private querySignalsForInjection;
27
27
  formatSignalsForInjection(signals: CrossPhaseSignal[]): string;
28
28
  private getRecommendations;
29
+ /**
30
+ * IMP-07: When AQE_HOOKS_MANAGED_ONLY is set, only hooks whose names start
31
+ * with "managed:" are allowed to execute. All other hooks are filtered out.
32
+ */
33
+ private filterManagedHooks;
34
+ /**
35
+ * IMP-07: SSRF guard — if a target string looks like a URL (has a scheme),
36
+ * validate it against the SSRF blocklist. Returns true when the URL is
37
+ * blocked and the caller should abort the action.
38
+ */
39
+ private isBlockedUrl;
29
40
  private checkConditions;
30
41
  private evaluateCondition;
31
42
  private getValueFromPath;