@oddessentials/odd-ai-reviewers 1.0.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 (370) hide show
  1. package/README.md +190 -0
  2. package/dist/__tests__/hermetic-setup.d.ts +55 -0
  3. package/dist/__tests__/hermetic-setup.d.ts.map +1 -0
  4. package/dist/__tests__/hermetic-setup.js +62 -0
  5. package/dist/__tests__/hermetic-setup.js.map +1 -0
  6. package/dist/__tests__/test-utils/hermetic.d.ts +84 -0
  7. package/dist/__tests__/test-utils/hermetic.d.ts.map +1 -0
  8. package/dist/__tests__/test-utils/hermetic.js +147 -0
  9. package/dist/__tests__/test-utils/hermetic.js.map +1 -0
  10. package/dist/agents/ai_semantic_review.d.ts +12 -0
  11. package/dist/agents/ai_semantic_review.d.ts.map +1 -0
  12. package/dist/agents/ai_semantic_review.js +317 -0
  13. package/dist/agents/ai_semantic_review.js.map +1 -0
  14. package/dist/agents/control_flow/budget.d.ts +162 -0
  15. package/dist/agents/control_flow/budget.d.ts.map +1 -0
  16. package/dist/agents/control_flow/budget.js +331 -0
  17. package/dist/agents/control_flow/budget.js.map +1 -0
  18. package/dist/agents/control_flow/cfg-builder.d.ts +26 -0
  19. package/dist/agents/control_flow/cfg-builder.d.ts.map +1 -0
  20. package/dist/agents/control_flow/cfg-builder.js +776 -0
  21. package/dist/agents/control_flow/cfg-builder.js.map +1 -0
  22. package/dist/agents/control_flow/cfg-types.d.ts +186 -0
  23. package/dist/agents/control_flow/cfg-types.d.ts.map +1 -0
  24. package/dist/agents/control_flow/cfg-types.js +114 -0
  25. package/dist/agents/control_flow/cfg-types.js.map +1 -0
  26. package/dist/agents/control_flow/finding-generator.d.ts +118 -0
  27. package/dist/agents/control_flow/finding-generator.d.ts.map +1 -0
  28. package/dist/agents/control_flow/finding-generator.js +354 -0
  29. package/dist/agents/control_flow/finding-generator.js.map +1 -0
  30. package/dist/agents/control_flow/index.d.ts +39 -0
  31. package/dist/agents/control_flow/index.d.ts.map +1 -0
  32. package/dist/agents/control_flow/index.js +270 -0
  33. package/dist/agents/control_flow/index.js.map +1 -0
  34. package/dist/agents/control_flow/logger.d.ts +333 -0
  35. package/dist/agents/control_flow/logger.d.ts.map +1 -0
  36. package/dist/agents/control_flow/logger.js +607 -0
  37. package/dist/agents/control_flow/logger.js.map +1 -0
  38. package/dist/agents/control_flow/mitigation-detector.d.ts +207 -0
  39. package/dist/agents/control_flow/mitigation-detector.d.ts.map +1 -0
  40. package/dist/agents/control_flow/mitigation-detector.js +625 -0
  41. package/dist/agents/control_flow/mitigation-detector.js.map +1 -0
  42. package/dist/agents/control_flow/mitigation-patterns.d.ts +53 -0
  43. package/dist/agents/control_flow/mitigation-patterns.d.ts.map +1 -0
  44. package/dist/agents/control_flow/mitigation-patterns.js +620 -0
  45. package/dist/agents/control_flow/mitigation-patterns.js.map +1 -0
  46. package/dist/agents/control_flow/path-analyzer.d.ts +287 -0
  47. package/dist/agents/control_flow/path-analyzer.d.ts.map +1 -0
  48. package/dist/agents/control_flow/path-analyzer.js +695 -0
  49. package/dist/agents/control_flow/path-analyzer.js.map +1 -0
  50. package/dist/agents/control_flow/pattern-validator.d.ts +132 -0
  51. package/dist/agents/control_flow/pattern-validator.d.ts.map +1 -0
  52. package/dist/agents/control_flow/pattern-validator.js +420 -0
  53. package/dist/agents/control_flow/pattern-validator.js.map +1 -0
  54. package/dist/agents/control_flow/timeout-regex.d.ts +144 -0
  55. package/dist/agents/control_flow/timeout-regex.d.ts.map +1 -0
  56. package/dist/agents/control_flow/timeout-regex.js +339 -0
  57. package/dist/agents/control_flow/timeout-regex.js.map +1 -0
  58. package/dist/agents/control_flow/types.d.ts +782 -0
  59. package/dist/agents/control_flow/types.d.ts.map +1 -0
  60. package/dist/agents/control_flow/types.js +428 -0
  61. package/dist/agents/control_flow/types.js.map +1 -0
  62. package/dist/agents/control_flow/vulnerability-detector.d.ts +85 -0
  63. package/dist/agents/control_flow/vulnerability-detector.d.ts.map +1 -0
  64. package/dist/agents/control_flow/vulnerability-detector.js +493 -0
  65. package/dist/agents/control_flow/vulnerability-detector.js.map +1 -0
  66. package/dist/agents/date-utils.d.ts +19 -0
  67. package/dist/agents/date-utils.d.ts.map +1 -0
  68. package/dist/agents/date-utils.js +29 -0
  69. package/dist/agents/date-utils.js.map +1 -0
  70. package/dist/agents/index.d.ts +25 -0
  71. package/dist/agents/index.d.ts.map +1 -0
  72. package/dist/agents/index.js +50 -0
  73. package/dist/agents/index.js.map +1 -0
  74. package/dist/agents/json-utils.d.ts +34 -0
  75. package/dist/agents/json-utils.d.ts.map +1 -0
  76. package/dist/agents/json-utils.js +62 -0
  77. package/dist/agents/json-utils.js.map +1 -0
  78. package/dist/agents/local_llm.d.ts +24 -0
  79. package/dist/agents/local_llm.d.ts.map +1 -0
  80. package/dist/agents/local_llm.js +566 -0
  81. package/dist/agents/local_llm.js.map +1 -0
  82. package/dist/agents/metadata.d.ts +57 -0
  83. package/dist/agents/metadata.d.ts.map +1 -0
  84. package/dist/agents/metadata.js +45 -0
  85. package/dist/agents/metadata.js.map +1 -0
  86. package/dist/agents/opencode.d.ts +18 -0
  87. package/dist/agents/opencode.d.ts.map +1 -0
  88. package/dist/agents/opencode.js +364 -0
  89. package/dist/agents/opencode.js.map +1 -0
  90. package/dist/agents/path-filter.d.ts +25 -0
  91. package/dist/agents/path-filter.d.ts.map +1 -0
  92. package/dist/agents/path-filter.js +43 -0
  93. package/dist/agents/path-filter.js.map +1 -0
  94. package/dist/agents/pr_agent.d.ts +3 -0
  95. package/dist/agents/pr_agent.d.ts.map +1 -0
  96. package/dist/agents/pr_agent.js +312 -0
  97. package/dist/agents/pr_agent.js.map +1 -0
  98. package/dist/agents/retry.d.ts +12 -0
  99. package/dist/agents/retry.d.ts.map +1 -0
  100. package/dist/agents/retry.js +65 -0
  101. package/dist/agents/retry.js.map +1 -0
  102. package/dist/agents/reviewdog.d.ts +24 -0
  103. package/dist/agents/reviewdog.d.ts.map +1 -0
  104. package/dist/agents/reviewdog.js +259 -0
  105. package/dist/agents/reviewdog.js.map +1 -0
  106. package/dist/agents/security.d.ts +49 -0
  107. package/dist/agents/security.d.ts.map +1 -0
  108. package/dist/agents/security.js +302 -0
  109. package/dist/agents/security.js.map +1 -0
  110. package/dist/agents/semgrep.d.ts +8 -0
  111. package/dist/agents/semgrep.d.ts.map +1 -0
  112. package/dist/agents/semgrep.js +157 -0
  113. package/dist/agents/semgrep.js.map +1 -0
  114. package/dist/agents/types.d.ts +450 -0
  115. package/dist/agents/types.d.ts.map +1 -0
  116. package/dist/agents/types.js +127 -0
  117. package/dist/agents/types.js.map +1 -0
  118. package/dist/budget.d.ts +59 -0
  119. package/dist/budget.d.ts.map +1 -0
  120. package/dist/budget.js +82 -0
  121. package/dist/budget.js.map +1 -0
  122. package/dist/cache/key.d.ts +49 -0
  123. package/dist/cache/key.d.ts.map +1 -0
  124. package/dist/cache/key.js +71 -0
  125. package/dist/cache/key.js.map +1 -0
  126. package/dist/cache/store.d.ts +47 -0
  127. package/dist/cache/store.d.ts.map +1 -0
  128. package/dist/cache/store.js +328 -0
  129. package/dist/cache/store.js.map +1 -0
  130. package/dist/cli/commands/check.d.ts +60 -0
  131. package/dist/cli/commands/check.d.ts.map +1 -0
  132. package/dist/cli/commands/check.js +163 -0
  133. package/dist/cli/commands/check.js.map +1 -0
  134. package/dist/cli/commands/index.d.ts +12 -0
  135. package/dist/cli/commands/index.d.ts.map +1 -0
  136. package/dist/cli/commands/index.js +12 -0
  137. package/dist/cli/commands/index.js.map +1 -0
  138. package/dist/cli/commands/local-review.d.ts +149 -0
  139. package/dist/cli/commands/local-review.d.ts.map +1 -0
  140. package/dist/cli/commands/local-review.js +755 -0
  141. package/dist/cli/commands/local-review.js.map +1 -0
  142. package/dist/cli/config-wizard.d.ts +87 -0
  143. package/dist/cli/config-wizard.d.ts.map +1 -0
  144. package/dist/cli/config-wizard.js +240 -0
  145. package/dist/cli/config-wizard.js.map +1 -0
  146. package/dist/cli/dependencies/catalog.d.ts +44 -0
  147. package/dist/cli/dependencies/catalog.d.ts.map +1 -0
  148. package/dist/cli/dependencies/catalog.js +89 -0
  149. package/dist/cli/dependencies/catalog.js.map +1 -0
  150. package/dist/cli/dependencies/checker.d.ts +42 -0
  151. package/dist/cli/dependencies/checker.d.ts.map +1 -0
  152. package/dist/cli/dependencies/checker.js +240 -0
  153. package/dist/cli/dependencies/checker.js.map +1 -0
  154. package/dist/cli/dependencies/index.d.ts +16 -0
  155. package/dist/cli/dependencies/index.d.ts.map +1 -0
  156. package/dist/cli/dependencies/index.js +16 -0
  157. package/dist/cli/dependencies/index.js.map +1 -0
  158. package/dist/cli/dependencies/messages.d.ts +58 -0
  159. package/dist/cli/dependencies/messages.d.ts.map +1 -0
  160. package/dist/cli/dependencies/messages.js +183 -0
  161. package/dist/cli/dependencies/messages.js.map +1 -0
  162. package/dist/cli/dependencies/platform.d.ts +25 -0
  163. package/dist/cli/dependencies/platform.d.ts.map +1 -0
  164. package/dist/cli/dependencies/platform.js +42 -0
  165. package/dist/cli/dependencies/platform.js.map +1 -0
  166. package/dist/cli/dependencies/schemas.d.ts +65 -0
  167. package/dist/cli/dependencies/schemas.d.ts.map +1 -0
  168. package/dist/cli/dependencies/schemas.js +42 -0
  169. package/dist/cli/dependencies/schemas.js.map +1 -0
  170. package/dist/cli/dependencies/types.d.ts +112 -0
  171. package/dist/cli/dependencies/types.d.ts.map +1 -0
  172. package/dist/cli/dependencies/types.js +6 -0
  173. package/dist/cli/dependencies/types.js.map +1 -0
  174. package/dist/cli/dependencies/version.d.ts +67 -0
  175. package/dist/cli/dependencies/version.d.ts.map +1 -0
  176. package/dist/cli/dependencies/version.js +125 -0
  177. package/dist/cli/dependencies/version.js.map +1 -0
  178. package/dist/cli/git-context.d.ts +105 -0
  179. package/dist/cli/git-context.d.ts.map +1 -0
  180. package/dist/cli/git-context.js +313 -0
  181. package/dist/cli/git-context.js.map +1 -0
  182. package/dist/cli/interactive-prompts.d.ts +126 -0
  183. package/dist/cli/interactive-prompts.d.ts.map +1 -0
  184. package/dist/cli/interactive-prompts.js +128 -0
  185. package/dist/cli/interactive-prompts.js.map +1 -0
  186. package/dist/cli/options/index.d.ts +7 -0
  187. package/dist/cli/options/index.d.ts.map +1 -0
  188. package/dist/cli/options/index.js +11 -0
  189. package/dist/cli/options/index.js.map +1 -0
  190. package/dist/cli/options/local-review-options.d.ts +221 -0
  191. package/dist/cli/options/local-review-options.d.ts.map +1 -0
  192. package/dist/cli/options/local-review-options.js +332 -0
  193. package/dist/cli/options/local-review-options.js.map +1 -0
  194. package/dist/cli/output/colors.d.ts +154 -0
  195. package/dist/cli/output/colors.d.ts.map +1 -0
  196. package/dist/cli/output/colors.js +255 -0
  197. package/dist/cli/output/colors.js.map +1 -0
  198. package/dist/cli/output/errors.d.ts +157 -0
  199. package/dist/cli/output/errors.d.ts.map +1 -0
  200. package/dist/cli/output/errors.js +266 -0
  201. package/dist/cli/output/errors.js.map +1 -0
  202. package/dist/cli/output/index.d.ts +12 -0
  203. package/dist/cli/output/index.d.ts.map +1 -0
  204. package/dist/cli/output/index.js +15 -0
  205. package/dist/cli/output/index.js.map +1 -0
  206. package/dist/cli/output/progress.d.ts +237 -0
  207. package/dist/cli/output/progress.d.ts.map +1 -0
  208. package/dist/cli/output/progress.js +405 -0
  209. package/dist/cli/output/progress.js.map +1 -0
  210. package/dist/cli/signals.d.ts +145 -0
  211. package/dist/cli/signals.d.ts.map +1 -0
  212. package/dist/cli/signals.js +223 -0
  213. package/dist/cli/signals.js.map +1 -0
  214. package/dist/cli/validation-report.d.ts +106 -0
  215. package/dist/cli/validation-report.d.ts.map +1 -0
  216. package/dist/cli/validation-report.js +108 -0
  217. package/dist/cli/validation-report.js.map +1 -0
  218. package/dist/config/index.d.ts +9 -0
  219. package/dist/config/index.d.ts.map +1 -0
  220. package/dist/config/index.js +12 -0
  221. package/dist/config/index.js.map +1 -0
  222. package/dist/config/mitigation-config.d.ts +94 -0
  223. package/dist/config/mitigation-config.d.ts.map +1 -0
  224. package/dist/config/mitigation-config.js +430 -0
  225. package/dist/config/mitigation-config.js.map +1 -0
  226. package/dist/config/providers.d.ts +118 -0
  227. package/dist/config/providers.d.ts.map +1 -0
  228. package/dist/config/providers.js +229 -0
  229. package/dist/config/providers.js.map +1 -0
  230. package/dist/config/schemas.d.ts +278 -0
  231. package/dist/config/schemas.d.ts.map +1 -0
  232. package/dist/config/schemas.js +111 -0
  233. package/dist/config/schemas.js.map +1 -0
  234. package/dist/config/zero-config.d.ts +126 -0
  235. package/dist/config/zero-config.d.ts.map +1 -0
  236. package/dist/config/zero-config.js +243 -0
  237. package/dist/config/zero-config.js.map +1 -0
  238. package/dist/config.d.ts +110 -0
  239. package/dist/config.d.ts.map +1 -0
  240. package/dist/config.js +302 -0
  241. package/dist/config.js.map +1 -0
  242. package/dist/diff.d.ts +224 -0
  243. package/dist/diff.d.ts.map +1 -0
  244. package/dist/diff.js +832 -0
  245. package/dist/diff.js.map +1 -0
  246. package/dist/git-validators.d.ts +106 -0
  247. package/dist/git-validators.d.ts.map +1 -0
  248. package/dist/git-validators.js +224 -0
  249. package/dist/git-validators.js.map +1 -0
  250. package/dist/main.d.ts +61 -0
  251. package/dist/main.d.ts.map +1 -0
  252. package/dist/main.js +704 -0
  253. package/dist/main.js.map +1 -0
  254. package/dist/phases/execute.d.ts +60 -0
  255. package/dist/phases/execute.d.ts.map +1 -0
  256. package/dist/phases/execute.js +168 -0
  257. package/dist/phases/execute.js.map +1 -0
  258. package/dist/phases/index.d.ts +9 -0
  259. package/dist/phases/index.d.ts.map +1 -0
  260. package/dist/phases/index.js +9 -0
  261. package/dist/phases/index.js.map +1 -0
  262. package/dist/phases/preflight.d.ts +40 -0
  263. package/dist/phases/preflight.d.ts.map +1 -0
  264. package/dist/phases/preflight.js +122 -0
  265. package/dist/phases/preflight.js.map +1 -0
  266. package/dist/phases/report.d.ts +51 -0
  267. package/dist/phases/report.d.ts.map +1 -0
  268. package/dist/phases/report.js +152 -0
  269. package/dist/phases/report.js.map +1 -0
  270. package/dist/policy.d.ts +33 -0
  271. package/dist/policy.d.ts.map +1 -0
  272. package/dist/policy.js +34 -0
  273. package/dist/policy.js.map +1 -0
  274. package/dist/preflight.d.ts +181 -0
  275. package/dist/preflight.d.ts.map +1 -0
  276. package/dist/preflight.js +627 -0
  277. package/dist/preflight.js.map +1 -0
  278. package/dist/report/ado.d.ts +53 -0
  279. package/dist/report/ado.d.ts.map +1 -0
  280. package/dist/report/ado.js +411 -0
  281. package/dist/report/ado.js.map +1 -0
  282. package/dist/report/agent-icons.d.ts +36 -0
  283. package/dist/report/agent-icons.d.ts.map +1 -0
  284. package/dist/report/agent-icons.js +46 -0
  285. package/dist/report/agent-icons.js.map +1 -0
  286. package/dist/report/base.d.ts +30 -0
  287. package/dist/report/base.d.ts.map +1 -0
  288. package/dist/report/base.js +64 -0
  289. package/dist/report/base.js.map +1 -0
  290. package/dist/report/formats.d.ts +206 -0
  291. package/dist/report/formats.d.ts.map +1 -0
  292. package/dist/report/formats.js +481 -0
  293. package/dist/report/formats.js.map +1 -0
  294. package/dist/report/github.d.ts +44 -0
  295. package/dist/report/github.d.ts.map +1 -0
  296. package/dist/report/github.js +409 -0
  297. package/dist/report/github.js.map +1 -0
  298. package/dist/report/line-resolver.d.ts +208 -0
  299. package/dist/report/line-resolver.d.ts.map +1 -0
  300. package/dist/report/line-resolver.js +578 -0
  301. package/dist/report/line-resolver.js.map +1 -0
  302. package/dist/report/resolution.d.ts +158 -0
  303. package/dist/report/resolution.d.ts.map +1 -0
  304. package/dist/report/resolution.js +272 -0
  305. package/dist/report/resolution.js.map +1 -0
  306. package/dist/report/sanitize.d.ts +32 -0
  307. package/dist/report/sanitize.d.ts.map +1 -0
  308. package/dist/report/sanitize.js +84 -0
  309. package/dist/report/sanitize.js.map +1 -0
  310. package/dist/report/terminal.d.ts +440 -0
  311. package/dist/report/terminal.d.ts.map +1 -0
  312. package/dist/report/terminal.js +840 -0
  313. package/dist/report/terminal.js.map +1 -0
  314. package/dist/reviewignore.d.ts +125 -0
  315. package/dist/reviewignore.d.ts.map +1 -0
  316. package/dist/reviewignore.js +335 -0
  317. package/dist/reviewignore.js.map +1 -0
  318. package/dist/security-logger.d.ts +178 -0
  319. package/dist/security-logger.d.ts.map +1 -0
  320. package/dist/security-logger.js +256 -0
  321. package/dist/security-logger.js.map +1 -0
  322. package/dist/telemetry/backends/console.d.ts +24 -0
  323. package/dist/telemetry/backends/console.d.ts.map +1 -0
  324. package/dist/telemetry/backends/console.js +54 -0
  325. package/dist/telemetry/backends/console.js.map +1 -0
  326. package/dist/telemetry/backends/jsonl.d.ts +31 -0
  327. package/dist/telemetry/backends/jsonl.d.ts.map +1 -0
  328. package/dist/telemetry/backends/jsonl.js +121 -0
  329. package/dist/telemetry/backends/jsonl.js.map +1 -0
  330. package/dist/telemetry/emitter.d.ts +43 -0
  331. package/dist/telemetry/emitter.d.ts.map +1 -0
  332. package/dist/telemetry/emitter.js +83 -0
  333. package/dist/telemetry/emitter.js.map +1 -0
  334. package/dist/telemetry/hook.d.ts +53 -0
  335. package/dist/telemetry/hook.d.ts.map +1 -0
  336. package/dist/telemetry/hook.js +118 -0
  337. package/dist/telemetry/hook.js.map +1 -0
  338. package/dist/telemetry/index.d.ts +58 -0
  339. package/dist/telemetry/index.d.ts.map +1 -0
  340. package/dist/telemetry/index.js +143 -0
  341. package/dist/telemetry/index.js.map +1 -0
  342. package/dist/telemetry/types.d.ts +139 -0
  343. package/dist/telemetry/types.d.ts.map +1 -0
  344. package/dist/telemetry/types.js +133 -0
  345. package/dist/telemetry/types.js.map +1 -0
  346. package/dist/trust.d.ts +65 -0
  347. package/dist/trust.d.ts.map +1 -0
  348. package/dist/trust.js +78 -0
  349. package/dist/trust.js.map +1 -0
  350. package/dist/types/assert-never.d.ts +30 -0
  351. package/dist/types/assert-never.d.ts.map +1 -0
  352. package/dist/types/assert-never.js +32 -0
  353. package/dist/types/assert-never.js.map +1 -0
  354. package/dist/types/branded.d.ts +172 -0
  355. package/dist/types/branded.d.ts.map +1 -0
  356. package/dist/types/branded.js +262 -0
  357. package/dist/types/branded.js.map +1 -0
  358. package/dist/types/errors.d.ts +320 -0
  359. package/dist/types/errors.d.ts.map +1 -0
  360. package/dist/types/errors.js +551 -0
  361. package/dist/types/errors.js.map +1 -0
  362. package/dist/types/index.d.ts +37 -0
  363. package/dist/types/index.d.ts.map +1 -0
  364. package/dist/types/index.js +77 -0
  365. package/dist/types/index.js.map +1 -0
  366. package/dist/types/result.d.ts +323 -0
  367. package/dist/types/result.d.ts.map +1 -0
  368. package/dist/types/result.js +423 -0
  369. package/dist/types/result.js.map +1 -0
  370. package/package.json +63 -0
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Analysis Budget Management
3
+ *
4
+ * Tracks time and size limits during control flow analysis.
5
+ * Implements FR-018 (time budget), FR-019 (size budget), FR-020 (degraded mode),
6
+ * and FR-021 (graceful termination).
7
+ *
8
+ * Tasks: T061-T066
9
+ */
10
+ import { getLogger } from './logger.js';
11
+ /**
12
+ * Default budget configuration per FR-018, FR-019, FR-003
13
+ */
14
+ export const DEFAULT_BUDGET_CONFIG = {
15
+ maxDurationMs: 300_000, // 5 minutes
16
+ maxLinesChanged: 10_000,
17
+ maxCallDepth: 5,
18
+ maxNodesVisited: 10_000,
19
+ };
20
+ /**
21
+ * Patterns for determining file priority.
22
+ * High priority: security-sensitive files (always analyze)
23
+ * Medium priority: business logic (analyze if budget allows)
24
+ * Low priority: tests, config (skip in degraded mode)
25
+ */
26
+ export const FILE_PRIORITY_PATTERNS = {
27
+ high: [
28
+ /[/\\](auth|security|middleware)[/\\]/,
29
+ /[/\\](handlers|controllers)[/\\]/,
30
+ /[/\\]api[/\\]/,
31
+ /[/\\](database|db)[/\\]/,
32
+ /sanitize|validate|escape/i,
33
+ ],
34
+ medium: [/[/\\](services|utils)[/\\]/, /[/\\](models|entities)[/\\]/, /[/\\](helpers|lib)[/\\]/],
35
+ low: [
36
+ /[/\\]__tests__[/\\]/,
37
+ /\.test\./,
38
+ /\.spec\./,
39
+ /^(scripts|tools)[/\\]/,
40
+ /[/\\](scripts|tools)[/\\]/,
41
+ /[/\\](types|interfaces)[/\\]/,
42
+ /[/\\](constants|config)[/\\]/,
43
+ ],
44
+ };
45
+ /**
46
+ * Determine the priority of a file based on its path.
47
+ */
48
+ export function getFilePriority(filePath) {
49
+ // Check low priority first (tests should always be low)
50
+ for (const pattern of FILE_PRIORITY_PATTERNS.low) {
51
+ if (pattern.test(filePath)) {
52
+ return 'low';
53
+ }
54
+ }
55
+ // Check high priority
56
+ for (const pattern of FILE_PRIORITY_PATTERNS.high) {
57
+ if (pattern.test(filePath)) {
58
+ return 'high';
59
+ }
60
+ }
61
+ // Check medium priority
62
+ for (const pattern of FILE_PRIORITY_PATTERNS.medium) {
63
+ if (pattern.test(filePath)) {
64
+ return 'medium';
65
+ }
66
+ }
67
+ // Default to medium
68
+ return 'medium';
69
+ }
70
+ /**
71
+ * Analysis Budget Manager
72
+ *
73
+ * Tracks resource consumption and triggers degraded mode when limits approach.
74
+ * Ensures deterministic behavior: same input always produces same degradation.
75
+ */
76
+ export class AnalysisBudget {
77
+ startTime;
78
+ config;
79
+ linesAnalyzed = 0;
80
+ filesAnalyzed = 0;
81
+ filesSkipped = 0;
82
+ currentDepth = 0;
83
+ _status = 'ok';
84
+ degradedAt = null;
85
+ log = [];
86
+ logger;
87
+ constructor(config = {}, logger) {
88
+ this.startTime = Date.now();
89
+ this.config = { ...DEFAULT_BUDGET_CONFIG, ...config };
90
+ this.logger = logger ?? getLogger();
91
+ }
92
+ /**
93
+ * Get current budget status
94
+ */
95
+ get status() {
96
+ return this._status;
97
+ }
98
+ /**
99
+ * Check if analysis is in degraded mode
100
+ */
101
+ get isDegraded() {
102
+ return (this._status === 'warning' || this._status === 'exceeded' || this._status === 'terminated');
103
+ }
104
+ /**
105
+ * Get effective max call depth (reduced in degraded mode)
106
+ */
107
+ get effectiveMaxCallDepth() {
108
+ // Per FR-020: reduce call depth to 3 in degraded mode
109
+ return this.isDegraded ? Math.min(3, this.config.maxCallDepth) : this.config.maxCallDepth;
110
+ }
111
+ /**
112
+ * Get elapsed time in milliseconds
113
+ */
114
+ get elapsedMs() {
115
+ return Date.now() - this.startTime;
116
+ }
117
+ /**
118
+ * Get time remaining before budget exceeded
119
+ */
120
+ get remainingMs() {
121
+ return Math.max(0, this.config.maxDurationMs - this.elapsedMs);
122
+ }
123
+ /**
124
+ * Get percentage of time budget consumed
125
+ */
126
+ get timePercentUsed() {
127
+ return (this.elapsedMs / this.config.maxDurationMs) * 100;
128
+ }
129
+ /**
130
+ * Get percentage of size budget consumed
131
+ */
132
+ get sizePercentUsed() {
133
+ return (this.linesAnalyzed / this.config.maxLinesChanged) * 100;
134
+ }
135
+ /**
136
+ * Get analysis statistics
137
+ */
138
+ get stats() {
139
+ return {
140
+ linesAnalyzed: this.linesAnalyzed,
141
+ filesAnalyzed: this.filesAnalyzed,
142
+ filesSkipped: this.filesSkipped,
143
+ elapsedMs: this.elapsedMs,
144
+ status: this._status,
145
+ degraded: this.isDegraded,
146
+ timePercentUsed: this.timePercentUsed,
147
+ sizePercentUsed: this.sizePercentUsed,
148
+ };
149
+ }
150
+ /**
151
+ * Check if a file should be analyzed based on priority and budget status.
152
+ * Per FR-020: Skip low-priority files in degraded mode.
153
+ */
154
+ shouldAnalyzeFile(filePath) {
155
+ // Always check budget first
156
+ this.checkBudget();
157
+ // If terminated, don't analyze anything
158
+ if (this._status === 'terminated') {
159
+ this.filesSkipped++;
160
+ this.logger.logBudgetExceeded('size');
161
+ return false;
162
+ }
163
+ // If not degraded, analyze everything
164
+ if (!this.isDegraded) {
165
+ return true;
166
+ }
167
+ // In degraded mode, skip low priority files
168
+ const priority = getFilePriority(filePath);
169
+ if (priority === 'low') {
170
+ this.filesSkipped++;
171
+ this.addLog('info', `Skipping low-priority file in degraded mode: ${filePath}`, {
172
+ priority,
173
+ status: this._status,
174
+ });
175
+ return false;
176
+ }
177
+ return true;
178
+ }
179
+ /**
180
+ * Sort files by priority for analysis order.
181
+ * High priority files are analyzed first.
182
+ */
183
+ sortFilesByPriority(files) {
184
+ const priorityOrder = {
185
+ high: 0,
186
+ medium: 1,
187
+ low: 2,
188
+ };
189
+ return [...files].sort((a, b) => {
190
+ const priorityA = priorityOrder[getFilePriority(a.path)];
191
+ const priorityB = priorityOrder[getFilePriority(b.path)];
192
+ return priorityA - priorityB;
193
+ });
194
+ }
195
+ /**
196
+ * Get the analysis log
197
+ */
198
+ get analysisLog() {
199
+ return [...this.log];
200
+ }
201
+ /**
202
+ * Record analysis of a file
203
+ */
204
+ recordFile(lineCount, _filePath) {
205
+ this.linesAnalyzed += lineCount;
206
+ this.filesAnalyzed++;
207
+ // Log budget usage periodically (every 10 files)
208
+ if (this.filesAnalyzed % 10 === 0) {
209
+ this.logger.logBudgetUsage('size', this.linesAnalyzed, this.config.maxLinesChanged);
210
+ this.logger.logBudgetUsage('time', this.elapsedMs, this.config.maxDurationMs);
211
+ }
212
+ this.checkBudget();
213
+ }
214
+ /**
215
+ * Set current call depth for inter-procedural analysis
216
+ */
217
+ setCallDepth(depth) {
218
+ this.currentDepth = depth;
219
+ }
220
+ /**
221
+ * Check if we can go deeper in call analysis
222
+ */
223
+ canGoDeeper() {
224
+ return this.currentDepth < this.effectiveMaxCallDepth && this._status !== 'terminated';
225
+ }
226
+ /**
227
+ * Check budget status and update if needed
228
+ * Returns the current status after check
229
+ */
230
+ checkBudget() {
231
+ if (this._status === 'terminated') {
232
+ return this._status;
233
+ }
234
+ const timePercent = this.timePercentUsed;
235
+ const sizePercent = this.sizePercentUsed;
236
+ // Check for termination (100% of either budget)
237
+ if (timePercent >= 100 || sizePercent >= 100) {
238
+ this.transitionTo('terminated');
239
+ return this._status;
240
+ }
241
+ // Check for exceeded (approaching limit)
242
+ if (timePercent >= 90 || sizePercent >= 90) {
243
+ if (this._status !== 'exceeded') {
244
+ this.transitionTo('exceeded');
245
+ }
246
+ return this._status;
247
+ }
248
+ // Check for warning (80% threshold per FR-020)
249
+ if (timePercent >= 80 || sizePercent >= 80) {
250
+ if (this._status === 'ok') {
251
+ this.transitionTo('warning');
252
+ }
253
+ return this._status;
254
+ }
255
+ return this._status;
256
+ }
257
+ /**
258
+ * Transition to a new budget status
259
+ */
260
+ transitionTo(newStatus) {
261
+ const oldStatus = this._status;
262
+ this._status = newStatus;
263
+ if (newStatus === 'warning' || newStatus === 'exceeded') {
264
+ if (this.degradedAt === null) {
265
+ this.degradedAt = Date.now();
266
+ }
267
+ // Log budget warning
268
+ const budgetType = this.timePercentUsed >= this.sizePercentUsed ? 'time' : 'size';
269
+ const percent = Math.max(this.timePercentUsed, this.sizePercentUsed);
270
+ this.logger.logBudgetWarning(budgetType, percent);
271
+ }
272
+ if (newStatus === 'terminated') {
273
+ const budgetType = this.timePercentUsed >= 100 ? 'time' : 'size';
274
+ this.logger.logBudgetExceeded(budgetType);
275
+ }
276
+ this.addLog('info', `Budget status changed: ${oldStatus} -> ${newStatus}`, {
277
+ timePercent: this.timePercentUsed.toFixed(1),
278
+ sizePercent: this.sizePercentUsed.toFixed(1),
279
+ effectiveCallDepth: this.effectiveMaxCallDepth,
280
+ });
281
+ }
282
+ /**
283
+ * Add an entry to the analysis log
284
+ */
285
+ addLog(level, message, context) {
286
+ this.log.push({
287
+ timestamp: Date.now(),
288
+ level,
289
+ message,
290
+ context,
291
+ });
292
+ }
293
+ /**
294
+ * Check if analysis should continue
295
+ * Returns false if budget is terminated
296
+ */
297
+ shouldContinue() {
298
+ this.checkBudget();
299
+ return this._status !== 'terminated';
300
+ }
301
+ /**
302
+ * Get reason for degradation (if degraded)
303
+ */
304
+ getDegradedReason() {
305
+ if (!this.isDegraded && this._status !== 'terminated') {
306
+ return undefined;
307
+ }
308
+ const reasons = [];
309
+ if (this.timePercentUsed >= 80) {
310
+ reasons.push(`time budget ${this.timePercentUsed.toFixed(0)}% consumed`);
311
+ }
312
+ if (this.sizePercentUsed >= 80) {
313
+ reasons.push(`size budget ${this.sizePercentUsed.toFixed(0)}% consumed`);
314
+ }
315
+ if (reasons.length === 0) {
316
+ return 'budget limits approached';
317
+ }
318
+ return reasons.join(', ');
319
+ }
320
+ /**
321
+ * Create a snapshot of current budget state for finding metadata
322
+ */
323
+ toFindingMetadata() {
324
+ return {
325
+ analysisDepth: this.currentDepth,
326
+ degraded: this.isDegraded,
327
+ degradedReason: this.getDegradedReason(),
328
+ };
329
+ }
330
+ }
331
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/agents/control_flow/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Control Flow Graph Builder
3
+ *
4
+ * Constructs control flow graphs from TypeScript/JavaScript AST.
5
+ * Implements FR-001 (track data flow through control structures) and
6
+ * FR-002 (language-specific CFG construction).
7
+ */
8
+ import ts from 'typescript';
9
+ import { type ControlFlowGraphRuntime } from './cfg-types.js';
10
+ /**
11
+ * Build a control flow graph for a function
12
+ */
13
+ export declare function buildCFG(functionNode: ts.FunctionLikeDeclaration, sourceFile: ts.SourceFile, filePath: string): ControlFlowGraphRuntime;
14
+ /**
15
+ * Find all functions in a source file
16
+ */
17
+ export declare function findFunctions(sourceFile: ts.SourceFile): ts.FunctionLikeDeclaration[];
18
+ /**
19
+ * Parse a source file
20
+ */
21
+ export declare function parseSourceFile(content: string, filePath: string, scriptKind?: ts.ScriptKind): ts.SourceFile;
22
+ /**
23
+ * Build CFGs for all functions in a source file
24
+ */
25
+ export declare function buildAllCFGs(content: string, filePath: string): ControlFlowGraphRuntime[];
26
+ //# sourceMappingURL=cfg-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfg-builder.d.ts","sourceRoot":"","sources":["../../../src/agents/control_flow/cfg-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAEL,KAAK,uBAAuB,EAQ7B,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,wBAAgB,QAAQ,CACtB,YAAY,EAAE,EAAE,CAAC,uBAAuB,EACxC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,MAAM,GACf,uBAAuB,CAsHzB;AAw1BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAqBrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,GACzB,EAAE,CAAC,UAAU,CAqBf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAKzF"}