edsger 0.76.0 → 0.78.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 (853) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -210
  3. package/assets/LICENSE +21 -0
  4. package/assets/README.md +104 -0
  5. package/assets/benchmark/base.yaml +286 -0
  6. package/assets/benchmark/csharp.yaml +68 -0
  7. package/assets/benchmark/dart.yaml +70 -0
  8. package/assets/benchmark/go.yaml +71 -0
  9. package/assets/benchmark/java.yaml +68 -0
  10. package/assets/benchmark/python.yaml +72 -0
  11. package/assets/benchmark/typescript.yaml +71 -0
  12. package/assets/languages.yaml +35 -0
  13. package/assets/manifest.yaml +39 -0
  14. package/assets/review/base.yaml +111 -0
  15. package/assets/review/csharp.yaml +38 -0
  16. package/assets/review/dart.yaml +40 -0
  17. package/assets/review/go.yaml +40 -0
  18. package/assets/review/java.yaml +40 -0
  19. package/assets/review/python.yaml +41 -0
  20. package/assets/review/typescript.yaml +40 -0
  21. package/assets/schema/benchmark.schema.json +87 -0
  22. package/assets/schema/review.schema.json +73 -0
  23. package/assets/skills/benchmark/SKILL.md +66 -0
  24. package/assets/skills/pr-resolve/SKILL.md +58 -0
  25. package/assets/skills/pr-review/SKILL.md +66 -0
  26. package/dist/index.js +1339 -1218
  27. package/dist/index.js.map +1 -0
  28. package/package.json +58 -53
  29. package/dist/api/adr.d.ts +0 -48
  30. package/dist/api/adr.js +0 -139
  31. package/dist/api/app-store-iap.d.ts +0 -60
  32. package/dist/api/app-store-iap.js +0 -145
  33. package/dist/api/app-store.d.ts +0 -93
  34. package/dist/api/app-store.js +0 -206
  35. package/dist/api/chat.d.ts +0 -72
  36. package/dist/api/chat.js +0 -272
  37. package/dist/api/cross-product.d.ts +0 -33
  38. package/dist/api/cross-product.js +0 -127
  39. package/dist/api/financing.d.ts +0 -47
  40. package/dist/api/financing.js +0 -37
  41. package/dist/api/github.d.ts +0 -86
  42. package/dist/api/github.js +0 -203
  43. package/dist/api/growth.d.ts +0 -81
  44. package/dist/api/growth.js +0 -75
  45. package/dist/api/intelligence-normalize.d.ts +0 -25
  46. package/dist/api/intelligence-normalize.js +0 -103
  47. package/dist/api/intelligence.d.ts +0 -187
  48. package/dist/api/intelligence.js +0 -402
  49. package/dist/api/issues/approval-checker.d.ts +0 -22
  50. package/dist/api/issues/approval-checker.js +0 -141
  51. package/dist/api/issues/batch-operations.d.ts +0 -17
  52. package/dist/api/issues/batch-operations.js +0 -100
  53. package/dist/api/issues/get-issue.d.ts +0 -5
  54. package/dist/api/issues/get-issue.js +0 -47
  55. package/dist/api/issues/index.d.ts +0 -8
  56. package/dist/api/issues/index.js +0 -10
  57. package/dist/api/issues/issue-utils.d.ts +0 -25
  58. package/dist/api/issues/issue-utils.js +0 -133
  59. package/dist/api/issues/status-updater.d.ts +0 -68
  60. package/dist/api/issues/status-updater.js +0 -190
  61. package/dist/api/issues/test-cases.d.ts +0 -29
  62. package/dist/api/issues/test-cases.js +0 -185
  63. package/dist/api/issues/update-issue.d.ts +0 -25
  64. package/dist/api/issues/update-issue.js +0 -127
  65. package/dist/api/issues/user-stories.d.ts +0 -21
  66. package/dist/api/issues/user-stories.js +0 -163
  67. package/dist/api/mcp-client.d.ts +0 -22
  68. package/dist/api/mcp-client.js +0 -75
  69. package/dist/api/products/test-cases.d.ts +0 -18
  70. package/dist/api/products/test-cases.js +0 -51
  71. package/dist/api/products.d.ts +0 -15
  72. package/dist/api/products.js +0 -45
  73. package/dist/api/release-test-cases.d.ts +0 -7
  74. package/dist/api/release-test-cases.js +0 -59
  75. package/dist/api/releases.d.ts +0 -41
  76. package/dist/api/releases.js +0 -117
  77. package/dist/api/run-sheets.d.ts +0 -22
  78. package/dist/api/run-sheets.js +0 -13
  79. package/dist/api/storage.d.ts +0 -13
  80. package/dist/api/storage.js +0 -29
  81. package/dist/api/tasks.d.ts +0 -26
  82. package/dist/api/tasks.js +0 -81
  83. package/dist/api/test-reports.d.ts +0 -9
  84. package/dist/api/test-reports.js +0 -43
  85. package/dist/api/user-psychology.d.ts +0 -101
  86. package/dist/api/user-psychology.js +0 -143
  87. package/dist/api/web-deploy.d.ts +0 -67
  88. package/dist/api/web-deploy.js +0 -199
  89. package/dist/auth/auth-store.d.ts +0 -98
  90. package/dist/auth/auth-store.js +0 -194
  91. package/dist/auth/env-store.d.ts +0 -41
  92. package/dist/auth/env-store.js +0 -127
  93. package/dist/auth/login.d.ts +0 -18
  94. package/dist/auth/login.js +0 -179
  95. package/dist/commands/adr/index.d.ts +0 -13
  96. package/dist/commands/adr/index.js +0 -31
  97. package/dist/commands/agent-workflow/chat-worker.d.ts +0 -16
  98. package/dist/commands/agent-workflow/chat-worker.js +0 -465
  99. package/dist/commands/agent-workflow/index.d.ts +0 -13
  100. package/dist/commands/agent-workflow/index.js +0 -107
  101. package/dist/commands/agent-workflow/issue-worker.d.ts +0 -14
  102. package/dist/commands/agent-workflow/issue-worker.js +0 -65
  103. package/dist/commands/agent-workflow/processor.d.ts +0 -95
  104. package/dist/commands/agent-workflow/processor.js +0 -519
  105. package/dist/commands/analyze-logs/index.d.ts +0 -7
  106. package/dist/commands/analyze-logs/index.js +0 -34
  107. package/dist/commands/app-store/index.d.ts +0 -12
  108. package/dist/commands/app-store/index.js +0 -69
  109. package/dist/commands/architecture-diagram/index.d.ts +0 -8
  110. package/dist/commands/architecture-diagram/index.js +0 -10
  111. package/dist/commands/build/detect-project.d.ts +0 -52
  112. package/dist/commands/build/detect-project.js +0 -277
  113. package/dist/commands/build/index.d.ts +0 -66
  114. package/dist/commands/build/index.js +0 -544
  115. package/dist/commands/chat-serve/chat-server.d.ts +0 -114
  116. package/dist/commands/chat-serve/chat-server.js +0 -339
  117. package/dist/commands/chat-serve/index.d.ts +0 -20
  118. package/dist/commands/chat-serve/index.js +0 -58
  119. package/dist/commands/checklists/index.d.ts +0 -16
  120. package/dist/commands/checklists/index.js +0 -187
  121. package/dist/commands/checklists/tools.d.ts +0 -17
  122. package/dist/commands/checklists/tools.js +0 -19
  123. package/dist/commands/class-diagram/index.d.ts +0 -7
  124. package/dist/commands/class-diagram/index.js +0 -9
  125. package/dist/commands/code-review/index.d.ts +0 -2
  126. package/dist/commands/code-review/index.js +0 -37
  127. package/dist/commands/code-review/reviewer.d.ts +0 -3
  128. package/dist/commands/code-review/reviewer.js +0 -205
  129. package/dist/commands/config/index.d.ts +0 -16
  130. package/dist/commands/config/index.js +0 -60
  131. package/dist/commands/data-flow/index.d.ts +0 -19
  132. package/dist/commands/data-flow/index.js +0 -55
  133. package/dist/commands/diagram-shared/index.d.ts +0 -21
  134. package/dist/commands/diagram-shared/index.js +0 -37
  135. package/dist/commands/discover/index.d.ts +0 -14
  136. package/dist/commands/discover/index.js +0 -29
  137. package/dist/commands/er-diagram/index.d.ts +0 -19
  138. package/dist/commands/er-diagram/index.js +0 -55
  139. package/dist/commands/features/index.d.ts +0 -15
  140. package/dist/commands/features/index.js +0 -34
  141. package/dist/commands/financing-deck/index.d.ts +0 -8
  142. package/dist/commands/financing-deck/index.js +0 -66
  143. package/dist/commands/find-architecture/index.d.ts +0 -15
  144. package/dist/commands/find-architecture/index.js +0 -50
  145. package/dist/commands/find-bugs/index.d.ts +0 -13
  146. package/dist/commands/find-bugs/index.js +0 -48
  147. package/dist/commands/find-features/index.d.ts +0 -14
  148. package/dist/commands/find-features/index.js +0 -42
  149. package/dist/commands/find-smells/index.d.ts +0 -23
  150. package/dist/commands/find-smells/index.js +0 -74
  151. package/dist/commands/flowchart/index.d.ts +0 -8
  152. package/dist/commands/flowchart/index.js +0 -10
  153. package/dist/commands/growth-analysis/index.d.ts +0 -7
  154. package/dist/commands/growth-analysis/index.js +0 -89
  155. package/dist/commands/init/index.d.ts +0 -5
  156. package/dist/commands/init/index.js +0 -152
  157. package/dist/commands/init/prompts.d.ts +0 -9
  158. package/dist/commands/init/prompts.js +0 -128
  159. package/dist/commands/init/templates.d.ts +0 -9
  160. package/dist/commands/init/templates.js +0 -264
  161. package/dist/commands/intelligence/index.d.ts +0 -15
  162. package/dist/commands/intelligence/index.js +0 -138
  163. package/dist/commands/issue-analysis/index.d.ts +0 -5
  164. package/dist/commands/issue-analysis/index.js +0 -9
  165. package/dist/commands/pr-resolve/index.d.ts +0 -13
  166. package/dist/commands/pr-resolve/index.js +0 -50
  167. package/dist/commands/pr-review/index.d.ts +0 -12
  168. package/dist/commands/pr-review/index.js +0 -47
  169. package/dist/commands/product-techniques/index.d.ts +0 -15
  170. package/dist/commands/product-techniques/index.js +0 -37
  171. package/dist/commands/product-test-cases/index.d.ts +0 -12
  172. package/dist/commands/product-test-cases/index.js +0 -40
  173. package/dist/commands/quality-benchmark/index.d.ts +0 -40
  174. package/dist/commands/quality-benchmark/index.js +0 -219
  175. package/dist/commands/recipes/index.d.ts +0 -17
  176. package/dist/commands/recipes/index.js +0 -40
  177. package/dist/commands/refactor/refactor.d.ts +0 -2
  178. package/dist/commands/refactor/refactor.js +0 -134
  179. package/dist/commands/release-sync/index.d.ts +0 -5
  180. package/dist/commands/release-sync/index.js +0 -38
  181. package/dist/commands/run-sheet/index.d.ts +0 -6
  182. package/dist/commands/run-sheet/index.js +0 -48
  183. package/dist/commands/screen-flow/index.d.ts +0 -18
  184. package/dist/commands/screen-flow/index.js +0 -54
  185. package/dist/commands/sequence-diagram/index.d.ts +0 -19
  186. package/dist/commands/sequence-diagram/index.js +0 -55
  187. package/dist/commands/session-serve/index.d.ts +0 -32
  188. package/dist/commands/session-serve/index.js +0 -100
  189. package/dist/commands/session-turn/index.d.ts +0 -73
  190. package/dist/commands/session-turn/index.js +0 -254
  191. package/dist/commands/smoke-test/index.d.ts +0 -5
  192. package/dist/commands/smoke-test/index.js +0 -40
  193. package/dist/commands/state-diagram/index.d.ts +0 -7
  194. package/dist/commands/state-diagram/index.js +0 -9
  195. package/dist/commands/sync-aws/index.d.ts +0 -16
  196. package/dist/commands/sync-aws/index.js +0 -214
  197. package/dist/commands/sync-datadog/index.d.ts +0 -16
  198. package/dist/commands/sync-datadog/index.js +0 -236
  199. package/dist/commands/sync-github-issues/index.d.ts +0 -11
  200. package/dist/commands/sync-github-issues/index.js +0 -42
  201. package/dist/commands/sync-github-pull-requests/index.d.ts +0 -11
  202. package/dist/commands/sync-github-pull-requests/index.js +0 -42
  203. package/dist/commands/sync-org-repos/index.d.ts +0 -12
  204. package/dist/commands/sync-org-repos/index.js +0 -60
  205. package/dist/commands/sync-sentry-issues/index.d.ts +0 -14
  206. package/dist/commands/sync-sentry-issues/index.js +0 -73
  207. package/dist/commands/sync-terraform/index.d.ts +0 -16
  208. package/dist/commands/sync-terraform/index.js +0 -248
  209. package/dist/commands/task-worker/index.d.ts +0 -8
  210. package/dist/commands/task-worker/index.js +0 -34
  211. package/dist/commands/task-worker/processor.d.ts +0 -23
  212. package/dist/commands/task-worker/processor.js +0 -84
  213. package/dist/commands/technical-design/index.d.ts +0 -5
  214. package/dist/commands/technical-design/index.js +0 -9
  215. package/dist/commands/test-cases-analysis/index.d.ts +0 -5
  216. package/dist/commands/test-cases-analysis/index.js +0 -9
  217. package/dist/commands/user-psychology/index.d.ts +0 -7
  218. package/dist/commands/user-psychology/index.js +0 -51
  219. package/dist/commands/user-stories-analysis/index.d.ts +0 -5
  220. package/dist/commands/user-stories-analysis/index.js +0 -9
  221. package/dist/commands/workflow/config/phase-configs.d.ts +0 -5
  222. package/dist/commands/workflow/config/phase-configs.js +0 -132
  223. package/dist/commands/workflow/core/index.d.ts +0 -8
  224. package/dist/commands/workflow/core/index.js +0 -12
  225. package/dist/commands/workflow/core/issue-filter.d.ts +0 -16
  226. package/dist/commands/workflow/core/issue-filter.js +0 -47
  227. package/dist/commands/workflow/core/pipeline-evaluator.d.ts +0 -24
  228. package/dist/commands/workflow/core/pipeline-evaluator.js +0 -32
  229. package/dist/commands/workflow/core/state-manager.d.ts +0 -24
  230. package/dist/commands/workflow/core/state-manager.js +0 -42
  231. package/dist/commands/workflow/core/workflow-logger.d.ts +0 -23
  232. package/dist/commands/workflow/core/workflow-logger.js +0 -77
  233. package/dist/commands/workflow/executors/phase-executor.d.ts +0 -8
  234. package/dist/commands/workflow/executors/phase-executor.js +0 -338
  235. package/dist/commands/workflow/index.d.ts +0 -2
  236. package/dist/commands/workflow/index.js +0 -34
  237. package/dist/commands/workflow/issue-coordinator.d.ts +0 -18
  238. package/dist/commands/workflow/issue-coordinator.js +0 -161
  239. package/dist/commands/workflow/phase-orchestrator.d.ts +0 -26
  240. package/dist/commands/workflow/phase-orchestrator.js +0 -699
  241. package/dist/commands/workflow/processor.d.ts +0 -47
  242. package/dist/commands/workflow/processor.js +0 -149
  243. package/dist/config/issue-status.d.ts +0 -29
  244. package/dist/config/issue-status.js +0 -44
  245. package/dist/config.d.ts +0 -3
  246. package/dist/config.js +0 -79
  247. package/dist/constants.d.ts +0 -10
  248. package/dist/constants.js +0 -36
  249. package/dist/errors/index.d.ts +0 -68
  250. package/dist/errors/index.js +0 -129
  251. package/dist/index.d.ts +0 -4
  252. package/dist/phases/adr-generation/agent.d.ts +0 -6
  253. package/dist/phases/adr-generation/agent.js +0 -69
  254. package/dist/phases/adr-generation/index.d.ts +0 -15
  255. package/dist/phases/adr-generation/index.js +0 -66
  256. package/dist/phases/adr-generation/parse.d.ts +0 -12
  257. package/dist/phases/adr-generation/parse.js +0 -123
  258. package/dist/phases/adr-generation/prompts.d.ts +0 -8
  259. package/dist/phases/adr-generation/prompts.js +0 -35
  260. package/dist/phases/analyze-logs/agent.d.ts +0 -11
  261. package/dist/phases/analyze-logs/agent.js +0 -66
  262. package/dist/phases/analyze-logs/index.d.ts +0 -23
  263. package/dist/phases/analyze-logs/index.js +0 -152
  264. package/dist/phases/analyze-logs/prompts.d.ts +0 -3
  265. package/dist/phases/analyze-logs/prompts.js +0 -27
  266. package/dist/phases/app-store-generation/agent.d.ts +0 -2
  267. package/dist/phases/app-store-generation/agent.js +0 -177
  268. package/dist/phases/app-store-generation/assets/inter-latin-ext.woff2 +0 -0
  269. package/dist/phases/app-store-generation/assets/inter-latin.woff2 +0 -0
  270. package/dist/phases/app-store-generation/context.d.ts +0 -21
  271. package/dist/phases/app-store-generation/context.js +0 -78
  272. package/dist/phases/app-store-generation/index.d.ts +0 -20
  273. package/dist/phases/app-store-generation/index.js +0 -157
  274. package/dist/phases/app-store-generation/inter-font.d.ts +0 -20
  275. package/dist/phases/app-store-generation/inter-font.js +0 -49
  276. package/dist/phases/app-store-generation/prompts.d.ts +0 -43
  277. package/dist/phases/app-store-generation/prompts.js +0 -73
  278. package/dist/phases/app-store-generation/screenshot-composer.d.ts +0 -41
  279. package/dist/phases/app-store-generation/screenshot-composer.js +0 -516
  280. package/dist/phases/app-store-generation/uploader.d.ts +0 -19
  281. package/dist/phases/app-store-generation/uploader.js +0 -150
  282. package/dist/phases/architecture-diagram/index.d.ts +0 -15
  283. package/dist/phases/architecture-diagram/index.js +0 -51
  284. package/dist/phases/autonomous/index.d.ts +0 -32
  285. package/dist/phases/autonomous/index.js +0 -412
  286. package/dist/phases/autonomous/prompts.d.ts +0 -5
  287. package/dist/phases/autonomous/prompts.js +0 -31
  288. package/dist/phases/branch-planning/context.d.ts +0 -14
  289. package/dist/phases/branch-planning/context.js +0 -43
  290. package/dist/phases/branch-planning/index.d.ts +0 -25
  291. package/dist/phases/branch-planning/index.js +0 -404
  292. package/dist/phases/branch-planning/outcome.d.ts +0 -28
  293. package/dist/phases/branch-planning/outcome.js +0 -115
  294. package/dist/phases/branch-planning/prompts.d.ts +0 -41
  295. package/dist/phases/branch-planning/prompts.js +0 -157
  296. package/dist/phases/bug-fixing/analyzer.d.ts +0 -17
  297. package/dist/phases/bug-fixing/analyzer.js +0 -247
  298. package/dist/phases/bug-fixing/context-fetcher.d.ts +0 -22
  299. package/dist/phases/bug-fixing/context-fetcher.js +0 -137
  300. package/dist/phases/bug-fixing/index.d.ts +0 -7
  301. package/dist/phases/bug-fixing/index.js +0 -7
  302. package/dist/phases/bug-fixing/mcp-server.d.ts +0 -18
  303. package/dist/phases/bug-fixing/mcp-server.js +0 -19
  304. package/dist/phases/bug-fixing/prompts.d.ts +0 -2
  305. package/dist/phases/bug-fixing/prompts.js +0 -9
  306. package/dist/phases/chat-processor/context.d.ts +0 -38
  307. package/dist/phases/chat-processor/context.js +0 -91
  308. package/dist/phases/chat-processor/index.d.ts +0 -49
  309. package/dist/phases/chat-processor/index.js +0 -482
  310. package/dist/phases/chat-processor/product-context.d.ts +0 -36
  311. package/dist/phases/chat-processor/product-context.js +0 -113
  312. package/dist/phases/chat-processor/product-prompts.d.ts +0 -4
  313. package/dist/phases/chat-processor/product-prompts.js +0 -65
  314. package/dist/phases/chat-processor/product-tools.d.ts +0 -8
  315. package/dist/phases/chat-processor/product-tools.js +0 -11
  316. package/dist/phases/chat-processor/prompts.d.ts +0 -35
  317. package/dist/phases/chat-processor/prompts.js +0 -213
  318. package/dist/phases/chat-processor/tools.d.ts +0 -8
  319. package/dist/phases/chat-processor/tools.js +0 -11
  320. package/dist/phases/class-diagram/index.d.ts +0 -14
  321. package/dist/phases/class-diagram/index.js +0 -76
  322. package/dist/phases/code-implementation/branch-pr-creator.d.ts +0 -31
  323. package/dist/phases/code-implementation/branch-pr-creator.js +0 -172
  324. package/dist/phases/code-implementation/context.d.ts +0 -17
  325. package/dist/phases/code-implementation/context.js +0 -88
  326. package/dist/phases/code-implementation/index.d.ts +0 -33
  327. package/dist/phases/code-implementation/index.js +0 -926
  328. package/dist/phases/code-implementation/outcome.d.ts +0 -47
  329. package/dist/phases/code-implementation/outcome.js +0 -53
  330. package/dist/phases/code-implementation/prompts.d.ts +0 -8
  331. package/dist/phases/code-implementation/prompts.js +0 -166
  332. package/dist/phases/code-implementation-verification/agent.d.ts +0 -32
  333. package/dist/phases/code-implementation-verification/agent.js +0 -225
  334. package/dist/phases/code-implementation-verification/index.d.ts +0 -27
  335. package/dist/phases/code-implementation-verification/index.js +0 -121
  336. package/dist/phases/code-implementation-verification/prompts.d.ts +0 -10
  337. package/dist/phases/code-implementation-verification/prompts.js +0 -90
  338. package/dist/phases/code-refine/context.d.ts +0 -99
  339. package/dist/phases/code-refine/context.js +0 -457
  340. package/dist/phases/code-refine/index.d.ts +0 -59
  341. package/dist/phases/code-refine/index.js +0 -348
  342. package/dist/phases/code-refine/prompts.d.ts +0 -5
  343. package/dist/phases/code-refine/prompts.js +0 -162
  344. package/dist/phases/code-refine/refine-iteration.d.ts +0 -33
  345. package/dist/phases/code-refine/refine-iteration.js +0 -166
  346. package/dist/phases/code-refine/retry-handler.d.ts +0 -17
  347. package/dist/phases/code-refine/retry-handler.js +0 -87
  348. package/dist/phases/code-refine-verification/github.d.ts +0 -54
  349. package/dist/phases/code-refine-verification/github.js +0 -328
  350. package/dist/phases/code-refine-verification/index.d.ts +0 -11
  351. package/dist/phases/code-refine-verification/index.js +0 -260
  352. package/dist/phases/code-refine-verification/llm-analyzer.d.ts +0 -22
  353. package/dist/phases/code-refine-verification/llm-analyzer.js +0 -152
  354. package/dist/phases/code-refine-verification/prompts.d.ts +0 -5
  355. package/dist/phases/code-refine-verification/prompts.js +0 -119
  356. package/dist/phases/code-refine-verification/types.d.ts +0 -74
  357. package/dist/phases/code-refine-verification/types.js +0 -4
  358. package/dist/phases/code-review/context.d.ts +0 -96
  359. package/dist/phases/code-review/context.js +0 -278
  360. package/dist/phases/code-review/diff-utils.d.ts +0 -36
  361. package/dist/phases/code-review/diff-utils.js +0 -100
  362. package/dist/phases/code-review/index.d.ts +0 -40
  363. package/dist/phases/code-review/index.js +0 -627
  364. package/dist/phases/code-testing/analyzer.d.ts +0 -19
  365. package/dist/phases/code-testing/analyzer.js +0 -215
  366. package/dist/phases/code-testing/context-fetcher.d.ts +0 -16
  367. package/dist/phases/code-testing/context-fetcher.js +0 -83
  368. package/dist/phases/code-testing/index.d.ts +0 -2
  369. package/dist/phases/code-testing/index.js +0 -2
  370. package/dist/phases/code-testing/prompts.d.ts +0 -3
  371. package/dist/phases/code-testing/prompts.js +0 -63
  372. package/dist/phases/data-flow/index.d.ts +0 -28
  373. package/dist/phases/data-flow/index.js +0 -286
  374. package/dist/phases/data-flow/mcp-server.d.ts +0 -85
  375. package/dist/phases/data-flow/mcp-server.js +0 -140
  376. package/dist/phases/data-flow/prompts.d.ts +0 -14
  377. package/dist/phases/data-flow/prompts.js +0 -36
  378. package/dist/phases/data-flow/types.d.ts +0 -71
  379. package/dist/phases/data-flow/types.js +0 -86
  380. package/dist/phases/diagram-shared/clone-repos.d.ts +0 -63
  381. package/dist/phases/diagram-shared/clone-repos.js +0 -153
  382. package/dist/phases/diagram-shared/generate.d.ts +0 -42
  383. package/dist/phases/diagram-shared/generate.js +0 -162
  384. package/dist/phases/diagram-shared/graph.d.ts +0 -62
  385. package/dist/phases/diagram-shared/graph.js +0 -169
  386. package/dist/phases/diagram-shared/mcp.d.ts +0 -35
  387. package/dist/phases/diagram-shared/mcp.js +0 -68
  388. package/dist/phases/diagram-shared/prompts.d.ts +0 -23
  389. package/dist/phases/diagram-shared/prompts.js +0 -35
  390. package/dist/phases/discover-services/index.d.ts +0 -29
  391. package/dist/phases/discover-services/index.js +0 -528
  392. package/dist/phases/er-diagram/index.d.ts +0 -28
  393. package/dist/phases/er-diagram/index.js +0 -290
  394. package/dist/phases/er-diagram/mcp-server.d.ts +0 -77
  395. package/dist/phases/er-diagram/mcp-server.js +0 -144
  396. package/dist/phases/er-diagram/prompts.d.ts +0 -14
  397. package/dist/phases/er-diagram/prompts.js +0 -36
  398. package/dist/phases/er-diagram/types.d.ts +0 -76
  399. package/dist/phases/er-diagram/types.js +0 -84
  400. package/dist/phases/features/index.d.ts +0 -65
  401. package/dist/phases/features/index.js +0 -292
  402. package/dist/phases/features/mcp-server.d.ts +0 -61
  403. package/dist/phases/features/mcp-server.js +0 -165
  404. package/dist/phases/features/prompts.d.ts +0 -32
  405. package/dist/phases/features/prompts.js +0 -92
  406. package/dist/phases/features/types.d.ts +0 -34
  407. package/dist/phases/features/types.js +0 -15
  408. package/dist/phases/financing-deck/agent.d.ts +0 -1
  409. package/dist/phases/financing-deck/agent.js +0 -96
  410. package/dist/phases/financing-deck/context.d.ts +0 -13
  411. package/dist/phases/financing-deck/context.js +0 -69
  412. package/dist/phases/financing-deck/index.d.ts +0 -15
  413. package/dist/phases/financing-deck/index.js +0 -89
  414. package/dist/phases/financing-deck/prompts.d.ts +0 -2
  415. package/dist/phases/financing-deck/prompts.js +0 -94
  416. package/dist/phases/find-architecture/index.d.ts +0 -47
  417. package/dist/phases/find-architecture/index.js +0 -261
  418. package/dist/phases/find-architecture/prompts.d.ts +0 -31
  419. package/dist/phases/find-architecture/prompts.js +0 -128
  420. package/dist/phases/find-architecture/state.d.ts +0 -21
  421. package/dist/phases/find-architecture/state.js +0 -17
  422. package/dist/phases/find-architecture/types.d.ts +0 -55
  423. package/dist/phases/find-architecture/types.js +0 -69
  424. package/dist/phases/find-bugs/index.d.ts +0 -33
  425. package/dist/phases/find-bugs/index.js +0 -236
  426. package/dist/phases/find-bugs/prompts.d.ts +0 -22
  427. package/dist/phases/find-bugs/prompts.js +0 -101
  428. package/dist/phases/find-bugs/state.d.ts +0 -19
  429. package/dist/phases/find-bugs/state.js +0 -13
  430. package/dist/phases/find-bugs/types.d.ts +0 -21
  431. package/dist/phases/find-bugs/types.js +0 -16
  432. package/dist/phases/find-features/index.d.ts +0 -40
  433. package/dist/phases/find-features/index.js +0 -328
  434. package/dist/phases/find-features/prompts.d.ts +0 -43
  435. package/dist/phases/find-features/prompts.js +0 -138
  436. package/dist/phases/find-features/state.d.ts +0 -25
  437. package/dist/phases/find-features/state.js +0 -22
  438. package/dist/phases/find-features/types.d.ts +0 -27
  439. package/dist/phases/find-features/types.js +0 -16
  440. package/dist/phases/find-shared/git.d.ts +0 -24
  441. package/dist/phases/find-shared/git.js +0 -60
  442. package/dist/phases/find-shared/mcp.d.ts +0 -48
  443. package/dist/phases/find-shared/mcp.js +0 -125
  444. package/dist/phases/find-shared/scan-state.d.ts +0 -33
  445. package/dist/phases/find-shared/scan-state.js +0 -112
  446. package/dist/phases/find-smells/index.d.ts +0 -50
  447. package/dist/phases/find-smells/index.js +0 -298
  448. package/dist/phases/find-smells/prompts.d.ts +0 -30
  449. package/dist/phases/find-smells/prompts.js +0 -129
  450. package/dist/phases/find-smells/state.d.ts +0 -21
  451. package/dist/phases/find-smells/state.js +0 -17
  452. package/dist/phases/find-smells/types.d.ts +0 -51
  453. package/dist/phases/find-smells/types.js +0 -64
  454. package/dist/phases/flow-shared/clone-repos.d.ts +0 -63
  455. package/dist/phases/flow-shared/clone-repos.js +0 -153
  456. package/dist/phases/flowchart/index.d.ts +0 -15
  457. package/dist/phases/flowchart/index.js +0 -50
  458. package/dist/phases/functional-testing/analyzer.d.ts +0 -46
  459. package/dist/phases/functional-testing/analyzer.js +0 -622
  460. package/dist/phases/functional-testing/context-fetcher.d.ts +0 -16
  461. package/dist/phases/functional-testing/context-fetcher.js +0 -83
  462. package/dist/phases/functional-testing/http-fallback.d.ts +0 -10
  463. package/dist/phases/functional-testing/http-fallback.js +0 -156
  464. package/dist/phases/functional-testing/index.d.ts +0 -4
  465. package/dist/phases/functional-testing/index.js +0 -4
  466. package/dist/phases/functional-testing/mcp-server.d.ts +0 -9
  467. package/dist/phases/functional-testing/mcp-server.js +0 -13
  468. package/dist/phases/functional-testing/prompts.d.ts +0 -2
  469. package/dist/phases/functional-testing/prompts.js +0 -58
  470. package/dist/phases/functional-testing/test-report-creator.d.ts +0 -68
  471. package/dist/phases/functional-testing/test-report-creator.js +0 -306
  472. package/dist/phases/functional-testing/test-retry-handler.d.ts +0 -16
  473. package/dist/phases/functional-testing/test-retry-handler.js +0 -70
  474. package/dist/phases/growth-analysis/agent.d.ts +0 -2
  475. package/dist/phases/growth-analysis/agent.js +0 -107
  476. package/dist/phases/growth-analysis/context.d.ts +0 -23
  477. package/dist/phases/growth-analysis/context.js +0 -137
  478. package/dist/phases/growth-analysis/index.d.ts +0 -32
  479. package/dist/phases/growth-analysis/index.js +0 -226
  480. package/dist/phases/growth-analysis/prompts.d.ts +0 -2
  481. package/dist/phases/growth-analysis/prompts.js +0 -45
  482. package/dist/phases/intelligence-analysis/agent.d.ts +0 -2
  483. package/dist/phases/intelligence-analysis/agent.js +0 -338
  484. package/dist/phases/intelligence-analysis/context.d.ts +0 -23
  485. package/dist/phases/intelligence-analysis/context.js +0 -142
  486. package/dist/phases/intelligence-analysis/index.d.ts +0 -58
  487. package/dist/phases/intelligence-analysis/index.js +0 -244
  488. package/dist/phases/intelligence-analysis/prompts.d.ts +0 -2
  489. package/dist/phases/intelligence-analysis/prompts.js +0 -62
  490. package/dist/phases/issue-analysis/agent.d.ts +0 -21
  491. package/dist/phases/issue-analysis/agent.js +0 -153
  492. package/dist/phases/issue-analysis/context.d.ts +0 -20
  493. package/dist/phases/issue-analysis/context.js +0 -93
  494. package/dist/phases/issue-analysis/index.d.ts +0 -8
  495. package/dist/phases/issue-analysis/index.js +0 -147
  496. package/dist/phases/issue-analysis/outcome.d.ts +0 -10
  497. package/dist/phases/issue-analysis/outcome.js +0 -42
  498. package/dist/phases/issue-analysis/prompts.d.ts +0 -8
  499. package/dist/phases/issue-analysis/prompts.js +0 -99
  500. package/dist/phases/issue-analysis-verification/agent.d.ts +0 -33
  501. package/dist/phases/issue-analysis-verification/agent.js +0 -124
  502. package/dist/phases/issue-analysis-verification/index.d.ts +0 -27
  503. package/dist/phases/issue-analysis-verification/index.js +0 -79
  504. package/dist/phases/issue-analysis-verification/prompts.d.ts +0 -9
  505. package/dist/phases/issue-analysis-verification/prompts.js +0 -75
  506. package/dist/phases/output-contracts.d.ts +0 -7
  507. package/dist/phases/output-contracts.js +0 -1201
  508. package/dist/phases/pr-execution/context.d.ts +0 -32
  509. package/dist/phases/pr-execution/context.js +0 -246
  510. package/dist/phases/pr-execution/file-assigner.d.ts +0 -57
  511. package/dist/phases/pr-execution/file-assigner.js +0 -287
  512. package/dist/phases/pr-execution/index.d.ts +0 -22
  513. package/dist/phases/pr-execution/index.js +0 -401
  514. package/dist/phases/pr-execution/outcome.d.ts +0 -24
  515. package/dist/phases/pr-execution/outcome.js +0 -34
  516. package/dist/phases/pr-execution/pr-executor.d.ts +0 -42
  517. package/dist/phases/pr-execution/pr-executor.js +0 -78
  518. package/dist/phases/pr-execution/prompts.d.ts +0 -27
  519. package/dist/phases/pr-execution/prompts.js +0 -131
  520. package/dist/phases/pr-resolve/checklist-learner.d.ts +0 -28
  521. package/dist/phases/pr-resolve/checklist-learner.js +0 -153
  522. package/dist/phases/pr-resolve/github-reply.d.ts +0 -16
  523. package/dist/phases/pr-resolve/github-reply.js +0 -75
  524. package/dist/phases/pr-resolve/index.d.ts +0 -33
  525. package/dist/phases/pr-resolve/index.js +0 -272
  526. package/dist/phases/pr-resolve/prompts.d.ts +0 -17
  527. package/dist/phases/pr-resolve/prompts.js +0 -107
  528. package/dist/phases/pr-resolve/types.d.ts +0 -18
  529. package/dist/phases/pr-resolve/types.js +0 -14
  530. package/dist/phases/pr-resolve/workspace.d.ts +0 -45
  531. package/dist/phases/pr-resolve/workspace.js +0 -174
  532. package/dist/phases/pr-review/index.d.ts +0 -27
  533. package/dist/phases/pr-review/index.js +0 -209
  534. package/dist/phases/pr-review/prompts.d.ts +0 -5
  535. package/dist/phases/pr-review/prompts.js +0 -87
  536. package/dist/phases/pr-shared/agent-utils.d.ts +0 -47
  537. package/dist/phases/pr-shared/agent-utils.js +0 -112
  538. package/dist/phases/pr-shared/context.d.ts +0 -24
  539. package/dist/phases/pr-shared/context.js +0 -78
  540. package/dist/phases/pr-shared/status.d.ts +0 -18
  541. package/dist/phases/pr-shared/status.js +0 -37
  542. package/dist/phases/pr-splitting/context.d.ts +0 -28
  543. package/dist/phases/pr-splitting/context.js +0 -182
  544. package/dist/phases/pr-splitting/import-dep-validator.d.ts +0 -67
  545. package/dist/phases/pr-splitting/import-dep-validator.js +0 -255
  546. package/dist/phases/pr-splitting/index.d.ts +0 -36
  547. package/dist/phases/pr-splitting/index.js +0 -413
  548. package/dist/phases/pr-splitting/outcome.d.ts +0 -24
  549. package/dist/phases/pr-splitting/outcome.js +0 -114
  550. package/dist/phases/pr-splitting/prompts.d.ts +0 -43
  551. package/dist/phases/pr-splitting/prompts.js +0 -154
  552. package/dist/phases/product-techniques/index.d.ts +0 -52
  553. package/dist/phases/product-techniques/index.js +0 -268
  554. package/dist/phases/product-techniques/mcp-server.d.ts +0 -41
  555. package/dist/phases/product-techniques/mcp-server.js +0 -96
  556. package/dist/phases/product-techniques/prompts.d.ts +0 -19
  557. package/dist/phases/product-techniques/prompts.js +0 -66
  558. package/dist/phases/product-techniques/types.d.ts +0 -13
  559. package/dist/phases/product-techniques/types.js +0 -13
  560. package/dist/phases/product-test-cases/index.d.ts +0 -25
  561. package/dist/phases/product-test-cases/index.js +0 -174
  562. package/dist/phases/product-test-cases/prompts.d.ts +0 -24
  563. package/dist/phases/product-test-cases/prompts.js +0 -80
  564. package/dist/phases/product-test-cases/types.d.ts +0 -17
  565. package/dist/phases/product-test-cases/types.js +0 -27
  566. package/dist/phases/pull-request/creator.d.ts +0 -30
  567. package/dist/phases/pull-request/creator.js +0 -319
  568. package/dist/phases/pull-request/handler.d.ts +0 -15
  569. package/dist/phases/pull-request/handler.js +0 -92
  570. package/dist/phases/quality-benchmark/index.d.ts +0 -65
  571. package/dist/phases/quality-benchmark/index.js +0 -194
  572. package/dist/phases/quality-benchmark/mcp-server.d.ts +0 -46
  573. package/dist/phases/quality-benchmark/mcp-server.js +0 -252
  574. package/dist/phases/quality-benchmark/parsers.d.ts +0 -22
  575. package/dist/phases/quality-benchmark/parsers.js +0 -1101
  576. package/dist/phases/quality-benchmark/prompts.d.ts +0 -31
  577. package/dist/phases/quality-benchmark/prompts.js +0 -154
  578. package/dist/phases/quality-benchmark/rubric.md +0 -1174
  579. package/dist/phases/quality-benchmark/tool-catalog.d.ts +0 -33
  580. package/dist/phases/quality-benchmark/tool-catalog.js +0 -636
  581. package/dist/phases/quality-benchmark/tool-runner.d.ts +0 -69
  582. package/dist/phases/quality-benchmark/tool-runner.js +0 -399
  583. package/dist/phases/quality-benchmark/types.d.ts +0 -312
  584. package/dist/phases/quality-benchmark/types.js +0 -23
  585. package/dist/phases/quality-benchmark/workspace.d.ts +0 -31
  586. package/dist/phases/quality-benchmark/workspace.js +0 -110
  587. package/dist/phases/recipes/index.d.ts +0 -63
  588. package/dist/phases/recipes/index.js +0 -358
  589. package/dist/phases/recipes/mcp-server.d.ts +0 -66
  590. package/dist/phases/recipes/mcp-server.js +0 -229
  591. package/dist/phases/recipes/prompts.d.ts +0 -35
  592. package/dist/phases/recipes/prompts.js +0 -105
  593. package/dist/phases/recipes/types.d.ts +0 -42
  594. package/dist/phases/recipes/types.js +0 -16
  595. package/dist/phases/release-sync/github.d.ts +0 -66
  596. package/dist/phases/release-sync/github.js +0 -140
  597. package/dist/phases/release-sync/index.d.ts +0 -24
  598. package/dist/phases/release-sync/index.js +0 -156
  599. package/dist/phases/release-sync/snapshot.d.ts +0 -27
  600. package/dist/phases/release-sync/snapshot.js +0 -158
  601. package/dist/phases/run-sheet/agent.d.ts +0 -49
  602. package/dist/phases/run-sheet/agent.js +0 -156
  603. package/dist/phases/run-sheet/index.d.ts +0 -57
  604. package/dist/phases/run-sheet/index.js +0 -392
  605. package/dist/phases/screen-flow/index.d.ts +0 -26
  606. package/dist/phases/screen-flow/index.js +0 -349
  607. package/dist/phases/screen-flow/mcp-server.d.ts +0 -201
  608. package/dist/phases/screen-flow/mcp-server.js +0 -272
  609. package/dist/phases/screen-flow/prompts.d.ts +0 -19
  610. package/dist/phases/screen-flow/prompts.js +0 -43
  611. package/dist/phases/screen-flow/theme.d.ts +0 -19
  612. package/dist/phases/screen-flow/theme.js +0 -193
  613. package/dist/phases/screen-flow/types.d.ts +0 -137
  614. package/dist/phases/screen-flow/types.js +0 -81
  615. package/dist/phases/sequence-diagram/index.d.ts +0 -30
  616. package/dist/phases/sequence-diagram/index.js +0 -290
  617. package/dist/phases/sequence-diagram/mcp-server.d.ts +0 -64
  618. package/dist/phases/sequence-diagram/mcp-server.js +0 -134
  619. package/dist/phases/sequence-diagram/prompts.d.ts +0 -14
  620. package/dist/phases/sequence-diagram/prompts.js +0 -36
  621. package/dist/phases/sequence-diagram/types.d.ts +0 -52
  622. package/dist/phases/sequence-diagram/types.js +0 -93
  623. package/dist/phases/smoke-test/agent.d.ts +0 -12
  624. package/dist/phases/smoke-test/agent.js +0 -93
  625. package/dist/phases/smoke-test/index.d.ts +0 -22
  626. package/dist/phases/smoke-test/index.js +0 -241
  627. package/dist/phases/smoke-test/prompts.d.ts +0 -15
  628. package/dist/phases/smoke-test/prompts.js +0 -35
  629. package/dist/phases/state-diagram/index.d.ts +0 -15
  630. package/dist/phases/state-diagram/index.js +0 -53
  631. package/dist/phases/sync-github-issues/index.d.ts +0 -41
  632. package/dist/phases/sync-github-issues/index.js +0 -187
  633. package/dist/phases/sync-github-issues/state.d.ts +0 -26
  634. package/dist/phases/sync-github-issues/state.js +0 -18
  635. package/dist/phases/sync-github-issues/types.d.ts +0 -35
  636. package/dist/phases/sync-github-issues/types.js +0 -6
  637. package/dist/phases/sync-github-pull-requests/index.d.ts +0 -23
  638. package/dist/phases/sync-github-pull-requests/index.js +0 -210
  639. package/dist/phases/sync-github-pull-requests/state.d.ts +0 -24
  640. package/dist/phases/sync-github-pull-requests/state.js +0 -16
  641. package/dist/phases/sync-github-pull-requests/types.d.ts +0 -22
  642. package/dist/phases/sync-github-pull-requests/types.js +0 -1
  643. package/dist/phases/sync-org-repos/index.d.ts +0 -28
  644. package/dist/phases/sync-org-repos/index.js +0 -133
  645. package/dist/phases/sync-sentry-issues/index.d.ts +0 -29
  646. package/dist/phases/sync-sentry-issues/index.js +0 -153
  647. package/dist/phases/sync-sentry-issues/sentry-client.d.ts +0 -66
  648. package/dist/phases/sync-sentry-issues/sentry-client.js +0 -221
  649. package/dist/phases/sync-sentry-issues/state.d.ts +0 -23
  650. package/dist/phases/sync-sentry-issues/state.js +0 -18
  651. package/dist/phases/sync-sentry-issues/types.d.ts +0 -46
  652. package/dist/phases/sync-sentry-issues/types.js +0 -6
  653. package/dist/phases/sync-shared/mcp.d.ts +0 -81
  654. package/dist/phases/sync-shared/mcp.js +0 -111
  655. package/dist/phases/task/agent.d.ts +0 -10
  656. package/dist/phases/task/agent.js +0 -83
  657. package/dist/phases/task/context.d.ts +0 -16
  658. package/dist/phases/task/context.js +0 -50
  659. package/dist/phases/task/index.d.ts +0 -17
  660. package/dist/phases/task/index.js +0 -54
  661. package/dist/phases/task/prompts.d.ts +0 -9
  662. package/dist/phases/task/prompts.js +0 -21
  663. package/dist/phases/technical-design/context.d.ts +0 -12
  664. package/dist/phases/technical-design/context.js +0 -39
  665. package/dist/phases/technical-design/index.d.ts +0 -21
  666. package/dist/phases/technical-design/index.js +0 -456
  667. package/dist/phases/technical-design/outcome.d.ts +0 -25
  668. package/dist/phases/technical-design/outcome.js +0 -41
  669. package/dist/phases/technical-design/prompts.d.ts +0 -8
  670. package/dist/phases/technical-design/prompts.js +0 -210
  671. package/dist/phases/technical-design-verification/agent.d.ts +0 -53
  672. package/dist/phases/technical-design-verification/agent.js +0 -186
  673. package/dist/phases/technical-design-verification/index.d.ts +0 -38
  674. package/dist/phases/technical-design-verification/index.js +0 -152
  675. package/dist/phases/technical-design-verification/prompts.d.ts +0 -12
  676. package/dist/phases/technical-design-verification/prompts.js +0 -143
  677. package/dist/phases/test-cases-analysis/agent.d.ts +0 -9
  678. package/dist/phases/test-cases-analysis/agent.js +0 -105
  679. package/dist/phases/test-cases-analysis/context.d.ts +0 -15
  680. package/dist/phases/test-cases-analysis/context.js +0 -86
  681. package/dist/phases/test-cases-analysis/formatters.d.ts +0 -6
  682. package/dist/phases/test-cases-analysis/formatters.js +0 -35
  683. package/dist/phases/test-cases-analysis/index.d.ts +0 -9
  684. package/dist/phases/test-cases-analysis/index.js +0 -175
  685. package/dist/phases/test-cases-analysis/outcome.d.ts +0 -27
  686. package/dist/phases/test-cases-analysis/outcome.js +0 -146
  687. package/dist/phases/test-cases-analysis/prompts.d.ts +0 -7
  688. package/dist/phases/test-cases-analysis/prompts.js +0 -171
  689. package/dist/phases/user-psychology/agent.d.ts +0 -16
  690. package/dist/phases/user-psychology/agent.js +0 -105
  691. package/dist/phases/user-psychology/context.d.ts +0 -10
  692. package/dist/phases/user-psychology/context.js +0 -65
  693. package/dist/phases/user-psychology/index.d.ts +0 -18
  694. package/dist/phases/user-psychology/index.js +0 -96
  695. package/dist/phases/user-psychology/prompts.d.ts +0 -2
  696. package/dist/phases/user-psychology/prompts.js +0 -41
  697. package/dist/phases/user-stories-analysis/agent.d.ts +0 -9
  698. package/dist/phases/user-stories-analysis/agent.js +0 -105
  699. package/dist/phases/user-stories-analysis/context.d.ts +0 -15
  700. package/dist/phases/user-stories-analysis/context.js +0 -86
  701. package/dist/phases/user-stories-analysis/formatters.d.ts +0 -6
  702. package/dist/phases/user-stories-analysis/formatters.js +0 -32
  703. package/dist/phases/user-stories-analysis/index.d.ts +0 -9
  704. package/dist/phases/user-stories-analysis/index.js +0 -175
  705. package/dist/phases/user-stories-analysis/outcome.d.ts +0 -27
  706. package/dist/phases/user-stories-analysis/outcome.js +0 -146
  707. package/dist/phases/user-stories-analysis/prompts.d.ts +0 -7
  708. package/dist/phases/user-stories-analysis/prompts.js +0 -194
  709. package/dist/services/audit-logs.d.ts +0 -73
  710. package/dist/services/audit-logs.js +0 -174
  711. package/dist/services/branches.d.ts +0 -103
  712. package/dist/services/branches.js +0 -391
  713. package/dist/services/checklist.d.ts +0 -100
  714. package/dist/services/checklist.js +0 -259
  715. package/dist/services/coaching/coaching-agent.d.ts +0 -39
  716. package/dist/services/coaching/coaching-agent.js +0 -308
  717. package/dist/services/coaching/coaching-loop.d.ts +0 -62
  718. package/dist/services/coaching/coaching-loop.js +0 -265
  719. package/dist/services/coaching/index.d.ts +0 -8
  720. package/dist/services/coaching/index.js +0 -8
  721. package/dist/services/coaching/phase-coaching.d.ts +0 -47
  722. package/dist/services/coaching/phase-coaching.js +0 -60
  723. package/dist/services/coaching/self-rating.d.ts +0 -26
  724. package/dist/services/coaching/self-rating.js +0 -153
  725. package/dist/services/feedbacks.d.ts +0 -57
  726. package/dist/services/feedbacks.js +0 -264
  727. package/dist/services/phase-hooks/bindings-fetcher.d.ts +0 -21
  728. package/dist/services/phase-hooks/bindings-fetcher.js +0 -53
  729. package/dist/services/phase-hooks/hook-executor.d.ts +0 -36
  730. package/dist/services/phase-hooks/hook-executor.js +0 -167
  731. package/dist/services/phase-hooks/hook-logging.d.ts +0 -14
  732. package/dist/services/phase-hooks/hook-logging.js +0 -41
  733. package/dist/services/phase-hooks/hook-runner.d.ts +0 -19
  734. package/dist/services/phase-hooks/hook-runner.js +0 -83
  735. package/dist/services/phase-hooks/index.d.ts +0 -10
  736. package/dist/services/phase-hooks/index.js +0 -9
  737. package/dist/services/phase-hooks/plugin-loader.d.ts +0 -31
  738. package/dist/services/phase-hooks/plugin-loader.js +0 -207
  739. package/dist/services/phase-hooks/types.d.ts +0 -69
  740. package/dist/services/phase-hooks/types.js +0 -8
  741. package/dist/services/phase-ratings.d.ts +0 -70
  742. package/dist/services/phase-ratings.js +0 -143
  743. package/dist/services/product-logs.d.ts +0 -31
  744. package/dist/services/product-logs.js +0 -94
  745. package/dist/services/pull-requests.d.ts +0 -57
  746. package/dist/services/pull-requests.js +0 -186
  747. package/dist/services/quality-reports.d.ts +0 -45
  748. package/dist/services/quality-reports.js +0 -93
  749. package/dist/services/repo-config.d.ts +0 -17
  750. package/dist/services/repo-config.js +0 -50
  751. package/dist/services/skill-resolver.d.ts +0 -46
  752. package/dist/services/skill-resolver.js +0 -123
  753. package/dist/services/video/device-frames.d.ts +0 -34
  754. package/dist/services/video/device-frames.js +0 -513
  755. package/dist/services/video/index.d.ts +0 -66
  756. package/dist/services/video/index.js +0 -238
  757. package/dist/services/video/retry.d.ts +0 -20
  758. package/dist/services/video/retry.js +0 -76
  759. package/dist/services/video/screenshot-generator.d.ts +0 -69
  760. package/dist/services/video/screenshot-generator.js +0 -259
  761. package/dist/services/video/tts-generator.d.ts +0 -40
  762. package/dist/services/video/tts-generator.js +0 -121
  763. package/dist/services/video/video-assembler.d.ts +0 -45
  764. package/dist/services/video/video-assembler.js +0 -351
  765. package/dist/services/video/video-uploader.d.ts +0 -28
  766. package/dist/services/video/video-uploader.js +0 -108
  767. package/dist/skills/phase/adr-generation/SKILL.md +0 -51
  768. package/dist/skills/phase/analyze-logs/SKILL.md +0 -24
  769. package/dist/skills/phase/app-store-generation/SKILL.md +0 -60
  770. package/dist/skills/phase/architecture-diagram/SKILL.md +0 -41
  771. package/dist/skills/phase/autonomous/SKILL.md +0 -52
  772. package/dist/skills/phase/branch-planning/SKILL.md +0 -55
  773. package/dist/skills/phase/bug-fixing/SKILL.md +0 -47
  774. package/dist/skills/phase/class-diagram/SKILL.md +0 -44
  775. package/dist/skills/phase/code-implementation/SKILL.md +0 -68
  776. package/dist/skills/phase/code-implementation-verification/SKILL.md +0 -76
  777. package/dist/skills/phase/code-refine/SKILL.md +0 -62
  778. package/dist/skills/phase/code-testing/SKILL.md +0 -78
  779. package/dist/skills/phase/data-flow/SKILL.md +0 -82
  780. package/dist/skills/phase/er-diagram/SKILL.md +0 -71
  781. package/dist/skills/phase/flowchart/SKILL.md +0 -38
  782. package/dist/skills/phase/functional-testing/SKILL.md +0 -62
  783. package/dist/skills/phase/growth-analysis/SKILL.md +0 -97
  784. package/dist/skills/phase/incremental-sync/SKILL.md +0 -59
  785. package/dist/skills/phase/intelligence-analysis/SKILL.md +0 -52
  786. package/dist/skills/phase/issue-analysis/SKILL.md +0 -73
  787. package/dist/skills/phase/issue-analysis-verification/SKILL.md +0 -61
  788. package/dist/skills/phase/pr-execution/SKILL.md +0 -69
  789. package/dist/skills/phase/pr-splitting/SKILL.md +0 -78
  790. package/dist/skills/phase/screen-flow/SKILL.md +0 -78
  791. package/dist/skills/phase/sequence-diagram/SKILL.md +0 -67
  792. package/dist/skills/phase/smoke-test/SKILL.md +0 -80
  793. package/dist/skills/phase/state-diagram/SKILL.md +0 -38
  794. package/dist/skills/phase/task/SKILL.md +0 -19
  795. package/dist/skills/phase/technical-design/SKILL.md +0 -75
  796. package/dist/skills/phase/technical-design-verification/SKILL.md +0 -43
  797. package/dist/skills/phase/test-cases-analysis/SKILL.md +0 -88
  798. package/dist/skills/phase/user-psychology/SKILL.md +0 -135
  799. package/dist/skills/phase/user-stories-analysis/SKILL.md +0 -118
  800. package/dist/supabase/client.d.ts +0 -34
  801. package/dist/supabase/client.js +0 -123
  802. package/dist/system/session-manager.d.ts +0 -67
  803. package/dist/system/session-manager.js +0 -300
  804. package/dist/system/sleep-notification.d.ts +0 -15
  805. package/dist/system/sleep-notification.js +0 -108
  806. package/dist/system/sleep-prevention.d.ts +0 -20
  807. package/dist/system/sleep-prevention.js +0 -112
  808. package/dist/tools/bootstrap.d.ts +0 -45
  809. package/dist/tools/bootstrap.js +0 -50
  810. package/dist/types/external-sources.d.ts +0 -22
  811. package/dist/types/external-sources.js +0 -23
  812. package/dist/types/index.d.ts +0 -206
  813. package/dist/types/index.js +0 -1
  814. package/dist/types/issues.d.ts +0 -37
  815. package/dist/types/issues.js +0 -1
  816. package/dist/types/llm-responses.d.ts +0 -114
  817. package/dist/types/llm-responses.js +0 -9
  818. package/dist/types/pipeline.d.ts +0 -28
  819. package/dist/types/pipeline.js +0 -4
  820. package/dist/updater/auto-updater.d.ts +0 -39
  821. package/dist/updater/auto-updater.js +0 -134
  822. package/dist/utils/conflict-resolver.d.ts +0 -49
  823. package/dist/utils/conflict-resolver.js +0 -201
  824. package/dist/utils/formatters.d.ts +0 -42
  825. package/dist/utils/formatters.js +0 -166
  826. package/dist/utils/git-branch-manager-async.d.ts +0 -127
  827. package/dist/utils/git-branch-manager-async.js +0 -425
  828. package/dist/utils/git-branch-manager.d.ts +0 -160
  829. package/dist/utils/git-branch-manager.js +0 -613
  830. package/dist/utils/git-push.d.ts +0 -43
  831. package/dist/utils/git-push.js +0 -136
  832. package/dist/utils/github-repo-info.d.ts +0 -26
  833. package/dist/utils/github-repo-info.js +0 -45
  834. package/dist/utils/image-downloader.d.ts +0 -32
  835. package/dist/utils/image-downloader.js +0 -152
  836. package/dist/utils/issue-phase-cli.d.ts +0 -26
  837. package/dist/utils/issue-phase-cli.js +0 -44
  838. package/dist/utils/json-extract.d.ts +0 -6
  839. package/dist/utils/json-extract.js +0 -44
  840. package/dist/utils/json-extractor.d.ts +0 -27
  841. package/dist/utils/json-extractor.js +0 -102
  842. package/dist/utils/logger.d.ts +0 -35
  843. package/dist/utils/logger.js +0 -167
  844. package/dist/utils/pipeline-logger.d.ts +0 -8
  845. package/dist/utils/pipeline-logger.js +0 -38
  846. package/dist/utils/validation.d.ts +0 -68
  847. package/dist/utils/validation.js +0 -229
  848. package/dist/utils/workflow-utils.d.ts +0 -22
  849. package/dist/utils/workflow-utils.js +0 -48
  850. package/dist/workspace/session-workspace.d.ts +0 -43
  851. package/dist/workspace/session-workspace.js +0 -90
  852. package/dist/workspace/workspace-manager.d.ts +0 -105
  853. package/dist/workspace/workspace-manager.js +0 -280
@@ -1,1101 +0,0 @@
1
- /**
2
- * Tool output parsers. Each parser extracts the minimum information the
3
- * LLM needs to score the dimension — either counts (Tier 1), counts plus
4
- * top findings (Tier 2), or domain-specific metrics (Tier 3).
5
- *
6
- * Full raw outputs are saved to disk by the tool-runner and never enter
7
- * the LLM context — these parsers operate on the stdout/stderr strings
8
- * captured during execution.
9
- *
10
- * Severity mapping:
11
- * tool-specific → our 4-tier enum (critical | high | medium | low)
12
- *
13
- * All parsers must be:
14
- * - Defensive: never throw. Return `parsed: false` (via a counts-zero
15
- * summary) if the output is malformed.
16
- * - Cheap: simple JSON parse + small map. No regex over megabytes.
17
- * - Stable: same input → same output (no randomness, no clocks).
18
- */
19
- import { TOOL_CATALOG_BY_ID } from './tool-catalog.js';
20
- // ---------------------------------------------------------------------------
21
- // Helpers
22
- // ---------------------------------------------------------------------------
23
- function safeJson(s) {
24
- if (!s) {
25
- return null;
26
- }
27
- try {
28
- return JSON.parse(s);
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- /**
35
- * Parse a newline-delimited JSON stream (one JSON value per line).
36
- * Used by cargo clippy --message-format json and govulncheck -json.
37
- */
38
- function safeJsonLines(s) {
39
- if (!s) {
40
- return [];
41
- }
42
- const out = [];
43
- for (const line of s.split(/\r?\n/)) {
44
- const trimmed = line.trim();
45
- if (!trimmed || (trimmed[0] !== '{' && trimmed[0] !== '[')) {
46
- continue;
47
- }
48
- try {
49
- out.push(JSON.parse(trimmed));
50
- }
51
- catch {
52
- // skip non-JSON lines (some tools mix banners with JSON)
53
- }
54
- }
55
- return out;
56
- }
57
- /** First subscore from the catalog for a tool id (used as the finding tag). */
58
- function primarySubscore(toolId) {
59
- const entry = TOOL_CATALOG_BY_ID.get(toolId);
60
- if (!entry || entry.subscores.length === 0) {
61
- return 'code_quality.lint';
62
- }
63
- return entry.subscores[0];
64
- }
65
- function clampSnippet(s) {
66
- if (!s) {
67
- return undefined;
68
- }
69
- return s.length > 200 ? `${s.slice(0, 197)}...` : s;
70
- }
71
- function severityRank(s) {
72
- return s === 'critical' ? 4 : s === 'high' ? 3 : s === 'medium' ? 2 : 1;
73
- }
74
- function topBySeverity(findings, n = 10) {
75
- return [...findings]
76
- .sort((a, b) => severityRank(b.severity) - severityRank(a.severity))
77
- .slice(0, n);
78
- }
79
- function countBySeverity(findings) {
80
- const c = { critical: 0, high: 0, medium: 0, low: 0, total: findings.length };
81
- for (const f of findings) {
82
- c[f.severity]++;
83
- }
84
- return c;
85
- }
86
- function emptyCounts() {
87
- return {
88
- tool_id: 'unknown',
89
- summary: { tier: 'counts', counts: { errors: 0, warnings: 0, info: 0 } },
90
- oneliner: 'no output parsed',
91
- };
92
- }
93
- function relPath(file, ctx) {
94
- if (file.startsWith(ctx.repo_root)) {
95
- return file.slice(ctx.repo_root.length).replace(/^[/\\]/, '');
96
- }
97
- return file;
98
- }
99
- // ---------------------------------------------------------------------------
100
- // Tier 1 — counts only
101
- // ---------------------------------------------------------------------------
102
- const eslintParser = (stdout) => {
103
- const data = safeJson(stdout);
104
- if (!Array.isArray(data)) {
105
- return { ...emptyCounts(), tool_id: 'eslint' };
106
- }
107
- let errors = 0;
108
- let warnings = 0;
109
- for (const file of data) {
110
- for (const m of file.messages ?? []) {
111
- if (m.severity === 2) {
112
- errors++;
113
- }
114
- else if (m.severity === 1) {
115
- warnings++;
116
- }
117
- }
118
- }
119
- return {
120
- tool_id: 'eslint',
121
- summary: { tier: 'counts', counts: { errors, warnings, info: 0 } },
122
- oneliner: `${errors} errors, ${warnings} warnings`,
123
- };
124
- };
125
- const tscParser = (stdout, stderr) => {
126
- const body = `${stdout}\n${stderr}`;
127
- const errorLines = body.match(/^[^\n]*error TS\d+/gm) ?? [];
128
- const errors = errorLines.length;
129
- return {
130
- tool_id: 'tsc-typecheck',
131
- summary: { tier: 'counts', counts: { errors, warnings: 0, info: 0 } },
132
- oneliner: `${errors} type errors`,
133
- };
134
- };
135
- const ruffParser = (stdout) => {
136
- const data = safeJson(stdout);
137
- if (!Array.isArray(data)) {
138
- return { ...emptyCounts(), tool_id: 'ruff' };
139
- }
140
- let errors = 0;
141
- let warnings = 0;
142
- for (const v of data) {
143
- const code = v.code ?? '';
144
- // E/F prefix in ruff (and most flake8-like tools) = error severity.
145
- if (/^[EF]/.test(code)) {
146
- errors++;
147
- }
148
- else {
149
- warnings++;
150
- }
151
- }
152
- return {
153
- tool_id: 'ruff',
154
- summary: { tier: 'counts', counts: { errors, warnings, info: 0 } },
155
- oneliner: `${errors} errors, ${warnings} warnings`,
156
- };
157
- };
158
- const mypyParser = (stdout) => {
159
- const lines = stdout.split(/\r?\n/);
160
- let errors = 0;
161
- let warnings = 0;
162
- let info = 0;
163
- for (const line of lines) {
164
- if (/:\s*error:/.test(line)) {
165
- errors++;
166
- }
167
- else if (/:\s*warning:/.test(line)) {
168
- warnings++;
169
- }
170
- else if (/:\s*note:/.test(line)) {
171
- info++;
172
- }
173
- }
174
- return {
175
- tool_id: 'mypy',
176
- summary: { tier: 'counts', counts: { errors, warnings, info } },
177
- oneliner: `${errors} errors, ${warnings} warnings`,
178
- };
179
- };
180
- const golangciLintParser = (stdout) => {
181
- const data = safeJson(stdout);
182
- const issues = data?.Issues ?? [];
183
- let errors = 0;
184
- let warnings = 0;
185
- for (const i of issues) {
186
- if ((i.Severity ?? '').toLowerCase() === 'error') {
187
- errors++;
188
- }
189
- else {
190
- warnings++;
191
- }
192
- }
193
- return {
194
- tool_id: 'golangci-lint',
195
- summary: { tier: 'counts', counts: { errors, warnings, info: 0 } },
196
- oneliner: `${errors} errors, ${warnings} warnings`,
197
- };
198
- };
199
- const clippyParser = (stdout) => {
200
- const events = safeJsonLines(stdout);
201
- let errors = 0;
202
- let warnings = 0;
203
- for (const e of events) {
204
- if (e.reason !== 'compiler-message') {
205
- continue;
206
- }
207
- const lvl = e.message?.level;
208
- if (lvl === 'error' || lvl === 'error: internal compiler error') {
209
- errors++;
210
- }
211
- else if (lvl === 'warning') {
212
- warnings++;
213
- }
214
- }
215
- return {
216
- tool_id: 'clippy',
217
- summary: { tier: 'counts', counts: { errors, warnings, info: 0 } },
218
- oneliner: `${errors} errors, ${warnings} warnings`,
219
- };
220
- };
221
- const rubocopParser = (stdout) => {
222
- const data = safeJson(stdout);
223
- if (!data) {
224
- return { ...emptyCounts(), tool_id: 'rubocop' };
225
- }
226
- let errors = 0;
227
- let warnings = 0;
228
- for (const f of data.files ?? []) {
229
- for (const o of f.offenses ?? []) {
230
- const sev = (o.severity ?? '').toLowerCase();
231
- if (sev === 'error' || sev === 'fatal') {
232
- errors++;
233
- }
234
- else {
235
- warnings++;
236
- }
237
- }
238
- }
239
- return {
240
- tool_id: 'rubocop',
241
- summary: { tier: 'counts', counts: { errors, warnings, info: 0 } },
242
- oneliner: `${errors} errors, ${warnings} warnings`,
243
- };
244
- };
245
- const depcheckParser = (stdout) => {
246
- const data = safeJson(stdout);
247
- if (!data) {
248
- return { ...emptyCounts(), tool_id: 'depcheck' };
249
- }
250
- const unused = (data.dependencies?.length ?? 0) + (data.devDependencies?.length ?? 0);
251
- return {
252
- tool_id: 'depcheck',
253
- summary: {
254
- tier: 'counts',
255
- counts: { errors: unused, warnings: 0, info: 0 },
256
- },
257
- oneliner: `${unused} unused dependencies`,
258
- };
259
- };
260
- const npmOutdatedParser = (stdout) => {
261
- const data = safeJson(stdout);
262
- if (!data) {
263
- return {
264
- tool_id: 'npm-outdated',
265
- summary: { tier: 'counts', counts: { errors: 0, warnings: 0, info: 0 } },
266
- oneliner: 'no outdated dependencies',
267
- };
268
- }
269
- const count = Object.keys(data).length;
270
- return {
271
- tool_id: 'npm-outdated',
272
- summary: {
273
- tier: 'counts',
274
- counts: { errors: 0, warnings: count, info: 0 },
275
- },
276
- oneliner: `${count} outdated dependencies`,
277
- };
278
- };
279
- const goModOutdatedParser = (stdout) => {
280
- const items = safeJsonLines(stdout);
281
- const count = items.filter((i) => i.Update).length;
282
- return {
283
- tool_id: 'go-mod-outdated',
284
- summary: {
285
- tier: 'counts',
286
- counts: { errors: 0, warnings: count, info: 0 },
287
- },
288
- oneliner: `${count} outdated modules`,
289
- };
290
- };
291
- const cargoOutdatedParser = (stdout) => {
292
- const data = safeJson(stdout);
293
- const items = data?.dependencies ?? [];
294
- const count = items.filter((d) => d.project && d.latest && d.project !== d.latest).length;
295
- return {
296
- tool_id: 'cargo-outdated',
297
- summary: {
298
- tier: 'counts',
299
- counts: { errors: 0, warnings: count, info: 0 },
300
- },
301
- oneliner: `${count} outdated crates`,
302
- };
303
- };
304
- const dotnetListOutdatedParser = (stdout) => {
305
- // `dotnet list package --outdated --format json` →
306
- // { projects: [{ frameworks: [{ topLevelPackages: [{ resolvedVersion, latestVersion }] }] }] }
307
- const data = safeJson(stdout);
308
- let count = 0;
309
- for (const proj of data?.projects ?? []) {
310
- for (const fw of proj.frameworks ?? []) {
311
- for (const pkg of fw.topLevelPackages ?? []) {
312
- if (pkg.latestVersion &&
313
- pkg.resolvedVersion &&
314
- pkg.latestVersion !== pkg.resolvedVersion) {
315
- count++;
316
- }
317
- }
318
- }
319
- }
320
- return {
321
- tool_id: 'dotnet-list-outdated',
322
- summary: {
323
- tier: 'counts',
324
- counts: { errors: 0, warnings: count, info: 0 },
325
- },
326
- oneliner: `${count} outdated NuGet packages`,
327
- };
328
- };
329
- // ---------------------------------------------------------------------------
330
- // Tier 2 — counts + top-N findings (severity + file:line preserved)
331
- // ---------------------------------------------------------------------------
332
- function mapSemgrepSeverity(s) {
333
- switch ((s ?? '').toUpperCase()) {
334
- case 'ERROR':
335
- return 'high';
336
- case 'WARNING':
337
- return 'medium';
338
- case 'INFO':
339
- return 'low';
340
- default:
341
- return 'medium';
342
- }
343
- }
344
- const semgrepParser = (stdout, _stderr, ctx) => {
345
- const data = safeJson(stdout);
346
- const results = data?.results ?? [];
347
- const findings = results.map((r) => {
348
- const cwe = r.extra?.metadata?.cwe;
349
- const cweArr = Array.isArray(cwe) ? cwe : cwe ? [cwe] : undefined;
350
- const sev = mapSemgrepSeverity(r.extra?.severity);
351
- // Bump SAST findings of suspected high-severity rules to critical
352
- const id = r.check_id ?? '';
353
- const severity = sev === 'high' && /sqli|rce|deserialization|secret/.test(id)
354
- ? 'critical'
355
- : sev;
356
- return {
357
- file: relPath(r.path ?? '', ctx),
358
- line: r.start?.line ?? 1,
359
- issue: r.extra?.message ?? id,
360
- severity,
361
- snippet: clampSnippet(r.extra?.lines),
362
- source: 'tool:semgrep',
363
- rule_id: id || undefined,
364
- cwe: cweArr,
365
- subscore_key: primarySubscore('semgrep'),
366
- };
367
- });
368
- return {
369
- tool_id: 'semgrep',
370
- summary: {
371
- tier: 'findings',
372
- counts: countBySeverity(findings),
373
- top_findings: topBySeverity(findings),
374
- },
375
- oneliner: `${findings.length} SAST findings`,
376
- };
377
- };
378
- function mapBanditSeverity(s) {
379
- switch ((s ?? '').toUpperCase()) {
380
- case 'HIGH':
381
- return 'high';
382
- case 'MEDIUM':
383
- return 'medium';
384
- case 'LOW':
385
- return 'low';
386
- default:
387
- return 'medium';
388
- }
389
- }
390
- const banditParser = (stdout, _stderr, ctx) => {
391
- const data = safeJson(stdout);
392
- const results = data?.results ?? [];
393
- const findings = results.map((r) => ({
394
- file: relPath(r.filename ?? '', ctx),
395
- line: r.line_number ?? 1,
396
- issue: r.issue_text ?? r.test_id ?? 'bandit issue',
397
- severity: mapBanditSeverity(r.issue_severity),
398
- snippet: clampSnippet(r.code),
399
- source: 'tool:bandit',
400
- rule_id: r.test_id,
401
- cwe: r.cwe?.id ? [`CWE-${r.cwe.id}`] : undefined,
402
- subscore_key: primarySubscore('bandit'),
403
- }));
404
- return {
405
- tool_id: 'bandit',
406
- summary: {
407
- tier: 'findings',
408
- counts: countBySeverity(findings),
409
- top_findings: topBySeverity(findings),
410
- },
411
- oneliner: `${findings.length} security findings`,
412
- };
413
- };
414
- const gosecParser = (stdout, _stderr, ctx) => {
415
- const data = safeJson(stdout);
416
- const issues = data?.Issues ?? [];
417
- const findings = issues.map((i) => ({
418
- file: relPath(i.file ?? '', ctx),
419
- line: parseInt((i.line ?? '1').split('-')[0] ?? '1', 10) || 1,
420
- issue: i.details ?? i.rule_id ?? 'gosec issue',
421
- severity: mapBanditSeverity(i.severity), // same HIGH/MEDIUM/LOW scheme
422
- snippet: clampSnippet(i.code),
423
- source: 'tool:gosec',
424
- rule_id: i.rule_id,
425
- cwe: i.cwe?.ID ? [`CWE-${i.cwe.ID}`] : undefined,
426
- subscore_key: primarySubscore('gosec'),
427
- }));
428
- return {
429
- tool_id: 'gosec',
430
- summary: {
431
- tier: 'findings',
432
- counts: countBySeverity(findings),
433
- top_findings: topBySeverity(findings),
434
- },
435
- oneliner: `${findings.length} security findings`,
436
- };
437
- };
438
- const brakemanParser = (stdout, _stderr, ctx) => {
439
- const data = safeJson(stdout);
440
- const warnings = data?.warnings ?? [];
441
- const findings = warnings.map((w) => {
442
- const conf = (w.confidence ?? '').toLowerCase();
443
- const severity = conf === 'high' ? 'high' : conf === 'medium' ? 'medium' : 'low';
444
- return {
445
- file: relPath(w.file ?? '', ctx),
446
- line: w.line ?? 1,
447
- issue: w.message ?? w.warning_type ?? 'brakeman warning',
448
- severity,
449
- snippet: clampSnippet(w.code),
450
- source: 'tool:brakeman',
451
- rule_id: w.warning_type,
452
- subscore_key: primarySubscore('brakeman'),
453
- };
454
- });
455
- return {
456
- tool_id: 'brakeman',
457
- summary: {
458
- tier: 'findings',
459
- counts: countBySeverity(findings),
460
- top_findings: topBySeverity(findings),
461
- },
462
- oneliner: `${findings.length} Rails security findings`,
463
- };
464
- };
465
- const gitleaksParser = (stdout, _stderr, ctx) => {
466
- // gitleaks emits a JSON array of leaks. With --redact the secret value is
467
- // replaced; we still get file/line/rule.
468
- const data = safeJson(stdout);
469
- const leaks = Array.isArray(data) ? data : [];
470
- const findings = leaks.map((l) => ({
471
- file: relPath(l.File ?? '', ctx),
472
- line: l.StartLine ?? 1,
473
- issue: l.Description ?? l.RuleID ?? 'secret leak',
474
- // Every gitleaks hit is treated as critical — secrets in source are a P0.
475
- severity: 'critical',
476
- snippet: clampSnippet(l.Match),
477
- source: 'tool:gitleaks',
478
- rule_id: l.RuleID,
479
- subscore_key: primarySubscore('gitleaks'),
480
- }));
481
- return {
482
- tool_id: 'gitleaks',
483
- summary: {
484
- tier: 'findings',
485
- counts: countBySeverity(findings),
486
- top_findings: topBySeverity(findings),
487
- },
488
- oneliner: `${findings.length} secret leaks`,
489
- };
490
- };
491
- function mapNpmSeverity(s) {
492
- switch ((s ?? '').toLowerCase()) {
493
- case 'critical':
494
- return 'critical';
495
- case 'high':
496
- return 'high';
497
- case 'moderate':
498
- return 'medium';
499
- case 'low':
500
- case 'info':
501
- return 'low';
502
- default:
503
- return 'medium';
504
- }
505
- }
506
- function npmAuditCommon(toolId) {
507
- return (stdout) => {
508
- // npm/pnpm/yarn audit JSON has nested vulnerability map; we read just the
509
- // metadata.vulnerabilities object which is { critical, high, moderate, low }
510
- const data = safeJson(stdout);
511
- const meta = data?.metadata?.vulnerabilities;
512
- const critical = meta?.critical ?? 0;
513
- const high = meta?.high ?? 0;
514
- const medium = meta?.moderate ?? 0;
515
- const low = meta?.low ?? 0;
516
- const total = critical + high + medium + low;
517
- // Build top findings from the vulnerabilities map. These are package-level
518
- // (no file:line), so we synthesise file = "package.json" and line = 1.
519
- const vulns = Object.entries(data?.vulnerabilities ?? {});
520
- const findings = vulns.map(([pkg, v]) => {
521
- const via = (v.via ?? []).find((x) => typeof x !== 'string');
522
- return {
523
- file: 'package.json',
524
- line: 1,
525
- issue: `${pkg}: ${via?.title ?? 'known vulnerability'}`,
526
- severity: mapNpmSeverity(v.severity),
527
- source: `tool:${toolId}`,
528
- rule_id: pkg,
529
- subscore_key: primarySubscore(toolId),
530
- };
531
- });
532
- return {
533
- tool_id: toolId,
534
- summary: {
535
- tier: 'findings',
536
- counts: { critical, high, medium, low, total },
537
- top_findings: topBySeverity(findings),
538
- },
539
- oneliner: `${total} vulnerable packages (${critical} critical, ${high} high)`,
540
- };
541
- };
542
- }
543
- const npmAuditParser = npmAuditCommon('npm-audit');
544
- const pnpmAuditParser = npmAuditCommon('pnpm-audit');
545
- const yarnAuditParser = npmAuditCommon('yarn-audit');
546
- function mapOsvSeverity(score) {
547
- if (score === undefined) {
548
- return 'medium';
549
- }
550
- if (score >= 9) {
551
- return 'critical';
552
- }
553
- if (score >= 7) {
554
- return 'high';
555
- }
556
- if (score >= 4) {
557
- return 'medium';
558
- }
559
- return 'low';
560
- }
561
- const pipAuditParser = (stdout) => {
562
- const data = safeJson(stdout);
563
- const deps = data?.dependencies ?? [];
564
- const findings = [];
565
- for (const d of deps) {
566
- for (const v of d.vulns ?? []) {
567
- findings.push({
568
- file: 'requirements.txt',
569
- line: 1,
570
- issue: `${d.name}: ${v.description ?? v.id ?? 'vulnerable'}`,
571
- severity: 'high', // pip-audit doesn't surface CVSS in JSON; assume high
572
- source: 'tool:pip-audit',
573
- rule_id: v.id,
574
- subscore_key: primarySubscore('pip-audit'),
575
- });
576
- }
577
- }
578
- return {
579
- tool_id: 'pip-audit',
580
- summary: {
581
- tier: 'findings',
582
- counts: countBySeverity(findings),
583
- top_findings: topBySeverity(findings),
584
- },
585
- oneliner: `${findings.length} vulnerable packages`,
586
- };
587
- };
588
- const govulncheckParser = (stdout) => {
589
- // govulncheck -json emits a stream; vulnerabilities are events with
590
- // {finding: {osv, fixed_version, trace: [{module, package, function, position}]}}
591
- const events = safeJsonLines(stdout);
592
- const findings = [];
593
- for (const e of events) {
594
- const f = e.finding;
595
- if (!f) {
596
- continue;
597
- }
598
- const tr = f.trace?.[0];
599
- findings.push({
600
- file: tr?.position?.filename ?? tr?.module ?? 'go.mod',
601
- line: tr?.position?.line ?? 1,
602
- issue: `${tr?.package ?? tr?.module ?? 'module'}: ${f.osv ?? 'vulnerable'}`,
603
- severity: 'high',
604
- source: 'tool:govulncheck',
605
- rule_id: f.osv,
606
- subscore_key: primarySubscore('govulncheck'),
607
- });
608
- }
609
- return {
610
- tool_id: 'govulncheck',
611
- summary: {
612
- tier: 'findings',
613
- counts: countBySeverity(findings),
614
- top_findings: topBySeverity(findings),
615
- },
616
- oneliner: `${findings.length} Go vulnerabilities`,
617
- };
618
- };
619
- const cargoAuditParser = (stdout) => {
620
- const data = safeJson(stdout);
621
- const list = data?.vulnerabilities?.list ?? [];
622
- const findings = list.map((v) => ({
623
- file: 'Cargo.toml',
624
- line: 1,
625
- issue: `${v.package?.name ?? 'crate'}: ${v.advisory?.title ?? v.advisory?.id ?? 'vulnerable'}`,
626
- severity: 'high',
627
- source: 'tool:cargo-audit',
628
- rule_id: v.advisory?.id,
629
- subscore_key: primarySubscore('cargo-audit'),
630
- }));
631
- return {
632
- tool_id: 'cargo-audit',
633
- summary: {
634
- tier: 'findings',
635
- counts: countBySeverity(findings),
636
- top_findings: topBySeverity(findings),
637
- },
638
- oneliner: `${findings.length} Rust crate vulnerabilities`,
639
- };
640
- };
641
- const cargoDenyParser = (stdout) => {
642
- const events = safeJsonLines(stdout);
643
- const findings = [];
644
- for (const e of events) {
645
- if (e.type !== 'diagnostic') {
646
- continue;
647
- }
648
- const sev = (e.fields?.severity ?? '').toLowerCase();
649
- if (sev !== 'error' && sev !== 'warning') {
650
- continue;
651
- }
652
- findings.push({
653
- file: 'Cargo.toml',
654
- line: 1,
655
- issue: e.fields?.message ?? 'cargo-deny violation',
656
- severity: sev === 'error' ? 'high' : 'medium',
657
- source: 'tool:cargo-deny',
658
- rule_id: e.fields?.advisory,
659
- subscore_key: primarySubscore('cargo-deny'),
660
- });
661
- }
662
- return {
663
- tool_id: 'cargo-deny',
664
- summary: {
665
- tier: 'findings',
666
- counts: countBySeverity(findings),
667
- top_findings: topBySeverity(findings),
668
- },
669
- oneliner: `${findings.length} cargo-deny violations`,
670
- };
671
- };
672
- const osvScannerParser = (stdout, _stderr, ctx) => {
673
- const data = safeJson(stdout);
674
- const results = data?.results ?? [];
675
- const findings = [];
676
- for (const r of results) {
677
- const path = r.source?.path ?? 'manifest';
678
- for (const p of r.packages ?? []) {
679
- for (const v of p.vulnerabilities ?? []) {
680
- // The CVSS score is encoded as a string; pull the first numeric.
681
- const scoreStr = v.severity?.[0]?.score ?? '';
682
- const m = scoreStr.match(/(\d+(\.\d+)?)/);
683
- const score = m ? parseFloat(m[1]) : undefined;
684
- findings.push({
685
- file: relPath(path, ctx),
686
- line: 1,
687
- issue: `${p.package?.name ?? 'package'}: ${v.summary ?? v.id ?? 'vulnerable'}`,
688
- severity: mapOsvSeverity(score),
689
- source: 'tool:osv-scanner',
690
- rule_id: v.id,
691
- subscore_key: primarySubscore('osv-scanner'),
692
- });
693
- }
694
- }
695
- }
696
- return {
697
- tool_id: 'osv-scanner',
698
- summary: {
699
- tier: 'findings',
700
- counts: countBySeverity(findings),
701
- top_findings: topBySeverity(findings),
702
- },
703
- oneliner: `${findings.length} cross-language vulnerabilities`,
704
- };
705
- };
706
- const bundlerAuditParser = (stdout) => {
707
- // bundler-audit JSON format: { results: [{ gem, advisory: { id, title, ... } }] }
708
- const data = safeJson(stdout);
709
- const results = data?.results ?? [];
710
- const findings = results.map((r) => ({
711
- file: 'Gemfile.lock',
712
- line: 1,
713
- issue: `${r.gem?.name ?? 'gem'}: ${r.advisory?.title ?? r.advisory?.id ?? 'vulnerable'}`,
714
- severity: 'high',
715
- source: 'tool:bundler-audit',
716
- rule_id: r.advisory?.id,
717
- subscore_key: primarySubscore('bundler-audit'),
718
- }));
719
- return {
720
- tool_id: 'bundler-audit',
721
- summary: {
722
- tier: 'findings',
723
- counts: countBySeverity(findings),
724
- top_findings: topBySeverity(findings),
725
- },
726
- oneliner: `${findings.length} Ruby gem vulnerabilities`,
727
- };
728
- };
729
- function mapDotnetSeverity(s) {
730
- switch ((s ?? '').toLowerCase()) {
731
- case 'critical':
732
- return 'critical';
733
- case 'high':
734
- return 'high';
735
- case 'moderate':
736
- return 'medium';
737
- case 'low':
738
- return 'low';
739
- default:
740
- return 'medium';
741
- }
742
- }
743
- const dotnetListVulnerableParser = (stdout, _stderr, ctx) => {
744
- // `dotnet list package --vulnerable --include-transitive --format json` →
745
- // { projects: [{ path, frameworks: [{ topLevelPackages, transitivePackages }] }] }
746
- // where each package has { id, resolvedVersion, vulnerabilities: [{ severity, advisoryurl }] }
747
- const data = safeJson(stdout);
748
- const findings = [];
749
- for (const proj of data?.projects ?? []) {
750
- const file = relPath(proj.path ?? 'csproj', ctx);
751
- for (const fw of proj.frameworks ?? []) {
752
- const pkgs = [
753
- ...(fw.topLevelPackages ?? []),
754
- ...(fw.transitivePackages ?? []),
755
- ];
756
- for (const pkg of pkgs) {
757
- for (const v of pkg.vulnerabilities ?? []) {
758
- findings.push({
759
- file,
760
- line: 1,
761
- issue: `${pkg.id ?? 'package'}@${pkg.resolvedVersion ?? '?'}: ${v.advisoryurl ?? 'known vulnerability'}`,
762
- severity: mapDotnetSeverity(v.severity),
763
- source: 'tool:dotnet-list-vulnerable',
764
- rule_id: v.advisoryurl,
765
- subscore_key: primarySubscore('dotnet-list-vulnerable'),
766
- });
767
- }
768
- }
769
- }
770
- }
771
- return {
772
- tool_id: 'dotnet-list-vulnerable',
773
- summary: {
774
- tier: 'findings',
775
- counts: countBySeverity(findings),
776
- top_findings: topBySeverity(findings),
777
- },
778
- oneliner: `${findings.length} vulnerable NuGet packages`,
779
- };
780
- };
781
- const vultureParser = (stdout, _stderr, ctx) => {
782
- // vulture text output: `path:line: unused X 'name' (confidence%)`
783
- const findings = [];
784
- for (const line of stdout.split(/\r?\n/)) {
785
- const m = line.match(/^(.+?):(\d+):\s*(.+?)\s*\((\d+)%\s*confidence\)/);
786
- if (!m) {
787
- continue;
788
- }
789
- findings.push({
790
- file: relPath(m[1], ctx),
791
- line: parseInt(m[2], 10),
792
- issue: m[3],
793
- severity: 'low',
794
- source: 'tool:vulture',
795
- subscore_key: primarySubscore('vulture'),
796
- });
797
- }
798
- return {
799
- tool_id: 'vulture',
800
- summary: {
801
- tier: 'findings',
802
- counts: countBySeverity(findings),
803
- top_findings: topBySeverity(findings, 20),
804
- },
805
- oneliner: `${findings.length} dead-code candidates`,
806
- };
807
- };
808
- const madgeParser = (stdout, _stderr, ctx) => {
809
- const data = safeJson(stdout);
810
- if (!data) {
811
- return {
812
- tool_id: 'madge',
813
- summary: {
814
- tier: 'findings',
815
- counts: countBySeverity([]),
816
- top_findings: [],
817
- },
818
- oneliner: 'no circular dependencies',
819
- };
820
- }
821
- // Newer madge --circular --json returns array of cycles (each = array of files).
822
- const cycles = Array.isArray(data) ? data : Object.values(data);
823
- const findings = cycles.map((cycle) => ({
824
- file: relPath(cycle[0] ?? '', ctx),
825
- line: 1,
826
- issue: `Circular import chain: ${cycle.map((f) => relPath(f, ctx)).join(' -> ')}`,
827
- severity: 'medium',
828
- source: 'tool:madge',
829
- subscore_key: primarySubscore('madge'),
830
- }));
831
- return {
832
- tool_id: 'madge',
833
- summary: {
834
- tier: 'findings',
835
- counts: countBySeverity(findings),
836
- top_findings: topBySeverity(findings),
837
- },
838
- oneliner: `${findings.length} circular dependencies`,
839
- };
840
- };
841
- const jscpdParser = (stdout, _stderr, ctx) => {
842
- // jscpd writes JSON to a file, but its stdout (when --output specified) can
843
- // also include the report. We accept either.
844
- const data = safeJson(stdout);
845
- const stats = data?.statistics?.total;
846
- const dupPct = stats?.percentage ?? 0;
847
- const cloneCount = stats?.clones ?? 0;
848
- const dupes = data?.duplicates ?? [];
849
- const findings = dupes.map((d) => ({
850
- file: relPath(d.firstFile?.name ?? '', ctx),
851
- line: d.firstFile?.start ?? 1,
852
- issue: `Duplicated with ${relPath(d.secondFile?.name ?? '', ctx)}:${d.secondFile?.start ?? 1} (${d.lines ?? 0} lines)`,
853
- severity: 'low',
854
- source: 'tool:jscpd',
855
- subscore_key: primarySubscore('jscpd'),
856
- }));
857
- return {
858
- tool_id: 'jscpd',
859
- summary: {
860
- tier: 'metrics',
861
- metrics: {
862
- duplication_pct: dupPct,
863
- clones: cloneCount,
864
- top_clones: topBySeverity(findings, 10),
865
- },
866
- },
867
- oneliner: `${dupPct.toFixed(1)}% duplicated (${cloneCount} clones)`,
868
- };
869
- };
870
- const gocycloParser = (stdout, _stderr, ctx) => {
871
- // -json returns [{ complexity, package, function, file, line }]
872
- // -over 15 means only functions above 15 are reported.
873
- const data = safeJson(stdout);
874
- const items = data ?? [];
875
- const findings = items.map((i) => ({
876
- file: relPath(i.file ?? '', ctx),
877
- line: i.line ?? 1,
878
- issue: `${i.function ?? 'function'} has cyclomatic complexity ${i.complexity ?? '?'}`,
879
- severity: (i.complexity ?? 0) >= 25 ? 'high' : 'medium',
880
- source: 'tool:gocyclo',
881
- subscore_key: primarySubscore('gocyclo'),
882
- }));
883
- return {
884
- tool_id: 'gocyclo',
885
- summary: {
886
- tier: 'findings',
887
- counts: countBySeverity(findings),
888
- top_findings: topBySeverity(findings),
889
- },
890
- oneliner: `${findings.length} high-complexity functions`,
891
- };
892
- };
893
- // ---------------------------------------------------------------------------
894
- // Tier 3 — structured metrics
895
- // ---------------------------------------------------------------------------
896
- const sccParser = (stdout) => {
897
- const data = safeJson(stdout);
898
- if (!Array.isArray(data)) {
899
- return {
900
- tool_id: 'scc',
901
- summary: { tier: 'metrics', metrics: {} },
902
- oneliner: 'no LOC stats',
903
- };
904
- }
905
- const totalLines = data.reduce((s, e) => s + (e.Lines ?? 0), 0);
906
- const totalCode = data.reduce((s, e) => s + (e.Code ?? 0), 0);
907
- const totalFiles = data.reduce((s, e) => s + (e.Files ?? 0), 0);
908
- const byLang = data
909
- .map((e) => ({
910
- language: e.Name ?? 'unknown',
911
- lines: e.Lines ?? 0,
912
- code: e.Code ?? 0,
913
- files: e.Files ?? 0,
914
- }))
915
- .sort((a, b) => b.code - a.code)
916
- .slice(0, 10);
917
- return {
918
- tool_id: 'scc',
919
- summary: {
920
- tier: 'metrics',
921
- metrics: {
922
- total_lines: totalLines,
923
- total_code_lines: totalCode,
924
- total_files: totalFiles,
925
- languages: byLang,
926
- },
927
- },
928
- oneliner: `${totalCode.toLocaleString()} code lines across ${totalFiles} files`,
929
- };
930
- };
931
- const lizardParser = (stdout) => {
932
- // Lizard --xml output is structured XML; we use a minimal text extraction
933
- // since we asked for thresholds (-C 15 -L 80). The summary line at the end
934
- // has the format: "Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt ..."
935
- // We do a defensive pass.
936
- const lastLines = stdout.split(/\r?\n/).slice(-20).join('\n');
937
- const m = lastLines.match(/Total\s+nloc[\s\S]+?(\d+)\s+(\d+\.?\d*)\s+(\d+\.?\d*)\s+(\d+\.?\d*)\s+(\d+)/);
938
- let totalNloc = 0;
939
- let avgNloc = 0;
940
- let avgCcn = 0;
941
- let funcCount = 0;
942
- if (m) {
943
- totalNloc = parseInt(m[1], 10);
944
- avgNloc = parseFloat(m[2]);
945
- avgCcn = parseFloat(m[3]);
946
- funcCount = parseInt(m[5], 10);
947
- }
948
- // Count warnings (functions exceeding thresholds)
949
- const warningCount = (stdout.match(/warnings? \(/g) || []).length;
950
- return {
951
- tool_id: 'lizard',
952
- summary: {
953
- tier: 'metrics',
954
- metrics: {
955
- total_nloc: totalNloc,
956
- avg_nloc_per_function: avgNloc,
957
- avg_cyclomatic_complexity: avgCcn,
958
- function_count: funcCount,
959
- flagged_functions: warningCount,
960
- },
961
- },
962
- oneliner: `avg CCN ${avgCcn.toFixed(1)}, ${warningCount} flagged functions`,
963
- };
964
- };
965
- const radonParser = (stdout) => {
966
- // radon cc -j produces { "<file>": [ { complexity, rank, ... }, ... ] }
967
- const data = safeJson(stdout);
968
- const buckets = {
969
- A: 0,
970
- B: 0,
971
- C: 0,
972
- D: 0,
973
- E: 0,
974
- F: 0,
975
- };
976
- let total = 0;
977
- let maxCcn = 0;
978
- for (const entries of Object.values(data ?? {})) {
979
- for (const e of entries) {
980
- total++;
981
- const r = (e.rank ?? '').toUpperCase();
982
- if (r in buckets) {
983
- buckets[r]++;
984
- }
985
- if ((e.complexity ?? 0) > maxCcn) {
986
- maxCcn = e.complexity ?? 0;
987
- }
988
- }
989
- }
990
- return {
991
- tool_id: 'radon',
992
- summary: {
993
- tier: 'metrics',
994
- metrics: {
995
- total_functions: total,
996
- max_complexity: maxCcn,
997
- rank_buckets: buckets,
998
- },
999
- },
1000
- oneliner: `${total} functions, ${buckets.D + buckets.E + buckets.F} above C-rank`,
1001
- };
1002
- };
1003
- const licenseCheckerParser = (stdout) => {
1004
- const data = safeJson(stdout);
1005
- if (!data) {
1006
- return {
1007
- tool_id: 'license-checker',
1008
- summary: { tier: 'metrics', metrics: {} },
1009
- oneliner: 'no license data',
1010
- };
1011
- }
1012
- const dist = {};
1013
- let total = 0;
1014
- for (const v of Object.values(data)) {
1015
- const l = v.licenses;
1016
- const lic = typeof l === 'string' ? l : Array.isArray(l) ? l.join('+') : 'UNKNOWN';
1017
- dist[lic] = (dist[lic] ?? 0) + 1;
1018
- total++;
1019
- }
1020
- // Pull suspicious license classes
1021
- const restricted = Object.entries(dist)
1022
- .filter(([k]) => /GPL|AGPL|SSPL/i.test(k))
1023
- .reduce((s, [, n]) => s + n, 0);
1024
- return {
1025
- tool_id: 'license-checker',
1026
- summary: {
1027
- tier: 'metrics',
1028
- metrics: {
1029
- total_packages: total,
1030
- license_distribution: dist,
1031
- restricted_licenses: restricted,
1032
- },
1033
- },
1034
- oneliner: `${total} packages, ${restricted} under restrictive licenses`,
1035
- };
1036
- };
1037
- // ---------------------------------------------------------------------------
1038
- // Registry
1039
- // ---------------------------------------------------------------------------
1040
- export const PARSERS = {
1041
- // Tier 1
1042
- eslint: eslintParser,
1043
- 'tsc-typecheck': tscParser,
1044
- ruff: ruffParser,
1045
- mypy: mypyParser,
1046
- 'golangci-lint': golangciLintParser,
1047
- clippy: clippyParser,
1048
- rubocop: rubocopParser,
1049
- depcheck: depcheckParser,
1050
- 'npm-outdated': npmOutdatedParser,
1051
- 'go-mod-outdated': goModOutdatedParser,
1052
- 'cargo-outdated': cargoOutdatedParser,
1053
- 'dotnet-list-outdated': dotnetListOutdatedParser,
1054
- // Tier 2
1055
- semgrep: semgrepParser,
1056
- bandit: banditParser,
1057
- gosec: gosecParser,
1058
- brakeman: brakemanParser,
1059
- gitleaks: gitleaksParser,
1060
- 'npm-audit': npmAuditParser,
1061
- 'pnpm-audit': pnpmAuditParser,
1062
- 'yarn-audit': yarnAuditParser,
1063
- 'pip-audit': pipAuditParser,
1064
- govulncheck: govulncheckParser,
1065
- 'cargo-audit': cargoAuditParser,
1066
- 'cargo-deny': cargoDenyParser,
1067
- 'osv-scanner': osvScannerParser,
1068
- 'bundler-audit': bundlerAuditParser,
1069
- 'dotnet-list-vulnerable': dotnetListVulnerableParser,
1070
- vulture: vultureParser,
1071
- madge: madgeParser,
1072
- gocyclo: gocycloParser,
1073
- // Mixed (T3 metrics + T2 sub-findings)
1074
- jscpd: jscpdParser,
1075
- // Tier 3
1076
- scc: sccParser,
1077
- lizard: lizardParser,
1078
- radon: radonParser,
1079
- 'license-checker': licenseCheckerParser,
1080
- };
1081
- /** Run the parser for a tool, defensively swallowing errors. */
1082
- export function parseToolOutput(toolId, stdout, stderr, ctx) {
1083
- const fn = PARSERS[toolId];
1084
- if (!fn) {
1085
- return {
1086
- tool_id: toolId,
1087
- summary: { tier: 'counts', counts: { errors: 0, warnings: 0, info: 0 } },
1088
- oneliner: `no parser for ${toolId}`,
1089
- };
1090
- }
1091
- try {
1092
- return fn(stdout, stderr, ctx);
1093
- }
1094
- catch (err) {
1095
- return {
1096
- tool_id: toolId,
1097
- summary: { tier: 'counts', counts: { errors: 0, warnings: 0, info: 0 } },
1098
- oneliner: `parser error: ${err instanceof Error ? err.message : String(err)}`,
1099
- };
1100
- }
1101
- }