@diff-review-system/drs 3.3.1 → 4.0.1

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 (387) hide show
  1. package/.pi/agents/describe/pr-describer.md +14 -0
  2. package/.pi/agents/review/unified-reviewer.md +31 -1
  3. package/.pi/agents/task/agents-md-updater.md +26 -0
  4. package/.pi/agents/task/changelog-updater.md +29 -0
  5. package/.pi/agents/task/review-issue-fixer.md +42 -0
  6. package/.pi/agents/visual/pr-explainer.md +205 -0
  7. package/.pi/workflows/github-pr-describe.yaml +26 -0
  8. package/.pi/workflows/github-pr-fix-review-issues-stacked.yaml +148 -0
  9. package/.pi/workflows/github-pr-post-comment.yaml +19 -0
  10. package/.pi/workflows/github-pr-review-post.yaml +43 -0
  11. package/.pi/workflows/github-pr-review.yaml +364 -0
  12. package/.pi/workflows/github-pr-show-changes.yaml +25 -0
  13. package/.pi/workflows/github-pr-update-agents-md-stacked.yaml +103 -0
  14. package/.pi/workflows/github-pr-visual-explain.yaml +35 -0
  15. package/.pi/workflows/gitlab-mr-describe.yaml +24 -0
  16. package/.pi/workflows/gitlab-mr-fix-review-issues-stacked.yaml +144 -0
  17. package/.pi/workflows/gitlab-mr-post-comment.yaml +17 -0
  18. package/.pi/workflows/gitlab-mr-review.yaml +364 -0
  19. package/.pi/workflows/gitlab-mr-show-changes.yaml +23 -0
  20. package/.pi/workflows/gitlab-mr-update-agents-md-stacked.yaml +100 -0
  21. package/.pi/workflows/gitlab-mr-visual-explain.yaml +33 -0
  22. package/.pi/workflows/local-changelog-update.yaml +23 -0
  23. package/.pi/workflows/local-fix-review-issues.yaml +111 -0
  24. package/.pi/workflows/local-review.yaml +24 -0
  25. package/.pi/workflows/local-update-agents-md.yaml +24 -0
  26. package/.pi/workflows/local-visual-explain.yaml +31 -0
  27. package/.pi/workflows/release-changelog-finalize.yaml +47 -0
  28. package/.pi/workflows/tag-changelog-update.yaml +26 -0
  29. package/README.md +281 -104
  30. package/dist/ci/runner.d.ts.map +1 -1
  31. package/dist/ci/runner.js +9 -8
  32. package/dist/ci/runner.js.map +1 -1
  33. package/dist/cli/index.js +95 -325
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/init.d.ts.map +1 -1
  36. package/dist/cli/init.js +25 -23
  37. package/dist/cli/init.js.map +1 -1
  38. package/dist/cli/run-agent.d.ts +26 -0
  39. package/dist/cli/run-agent.d.ts.map +1 -0
  40. package/dist/cli/run-agent.js +143 -0
  41. package/dist/cli/run-agent.js.map +1 -0
  42. package/dist/cli/workflow.d.ts +105 -0
  43. package/dist/cli/workflow.d.ts.map +1 -0
  44. package/dist/cli/workflow.js +3309 -0
  45. package/dist/cli/workflow.js.map +1 -0
  46. package/dist/github/client.d.ts +12 -0
  47. package/dist/github/client.d.ts.map +1 -1
  48. package/dist/github/client.js +27 -0
  49. package/dist/github/client.js.map +1 -1
  50. package/dist/github/platform-adapter.d.ts +6 -1
  51. package/dist/github/platform-adapter.d.ts.map +1 -1
  52. package/dist/github/platform-adapter.js +84 -8
  53. package/dist/github/platform-adapter.js.map +1 -1
  54. package/dist/gitlab/client.d.ts +11 -0
  55. package/dist/gitlab/client.d.ts.map +1 -1
  56. package/dist/gitlab/client.js +11 -0
  57. package/dist/gitlab/client.js.map +1 -1
  58. package/dist/gitlab/platform-adapter.d.ts +3 -1
  59. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  60. package/dist/gitlab/platform-adapter.js +32 -1
  61. package/dist/gitlab/platform-adapter.js.map +1 -1
  62. package/dist/lib/agent-id.d.ts +9 -0
  63. package/dist/lib/agent-id.d.ts.map +1 -0
  64. package/dist/lib/agent-id.js +32 -0
  65. package/dist/lib/agent-id.js.map +1 -0
  66. package/dist/lib/comment-formatter.d.ts +15 -1
  67. package/dist/lib/comment-formatter.d.ts.map +1 -1
  68. package/dist/lib/comment-formatter.js +53 -4
  69. package/dist/lib/comment-formatter.js.map +1 -1
  70. package/dist/lib/comment-manager.d.ts +4 -0
  71. package/dist/lib/comment-manager.d.ts.map +1 -1
  72. package/dist/lib/comment-manager.js +7 -1
  73. package/dist/lib/comment-manager.js.map +1 -1
  74. package/dist/lib/comment-poster.d.ts +2 -2
  75. package/dist/lib/comment-poster.d.ts.map +1 -1
  76. package/dist/lib/comment-poster.js +31 -4
  77. package/dist/lib/comment-poster.js.map +1 -1
  78. package/dist/lib/config.d.ts +160 -44
  79. package/dist/lib/config.d.ts.map +1 -1
  80. package/dist/lib/config.js +475 -101
  81. package/dist/lib/config.js.map +1 -1
  82. package/dist/lib/context-compression.d.ts +10 -0
  83. package/dist/lib/context-compression.d.ts.map +1 -1
  84. package/dist/lib/context-compression.js +101 -13
  85. package/dist/lib/context-compression.js.map +1 -1
  86. package/dist/lib/context-loader.d.ts +5 -4
  87. package/dist/lib/context-loader.d.ts.map +1 -1
  88. package/dist/lib/context-loader.js +79 -7
  89. package/dist/lib/context-loader.js.map +1 -1
  90. package/dist/lib/describe-core.d.ts.map +1 -1
  91. package/dist/lib/describe-core.js +3 -2
  92. package/dist/lib/describe-core.js.map +1 -1
  93. package/dist/lib/description-executor.js +1 -1
  94. package/dist/lib/description-executor.js.map +1 -1
  95. package/dist/lib/diff-lines.d.ts +18 -0
  96. package/dist/lib/diff-lines.d.ts.map +1 -0
  97. package/dist/lib/diff-lines.js +40 -0
  98. package/dist/lib/diff-lines.js.map +1 -0
  99. package/dist/lib/exit.js +4 -4
  100. package/dist/lib/exit.js.map +1 -1
  101. package/dist/lib/html-artifact.d.ts +14 -0
  102. package/dist/lib/html-artifact.d.ts.map +1 -0
  103. package/dist/lib/html-artifact.js +59 -0
  104. package/dist/lib/html-artifact.js.map +1 -0
  105. package/dist/lib/issue-parser.js +3 -3
  106. package/dist/lib/issue-parser.js.map +1 -1
  107. package/dist/lib/json-output-schema.d.ts +70 -0
  108. package/dist/lib/json-output-schema.d.ts.map +1 -1
  109. package/dist/lib/json-output-schema.js +40 -0
  110. package/dist/lib/json-output-schema.js.map +1 -1
  111. package/dist/lib/logger.d.ts +1 -1
  112. package/dist/lib/logger.d.ts.map +1 -1
  113. package/dist/lib/platform-client.d.ts +26 -0
  114. package/dist/lib/platform-client.d.ts.map +1 -1
  115. package/dist/lib/review-artifact.d.ts +69 -0
  116. package/dist/lib/review-artifact.d.ts.map +1 -0
  117. package/dist/lib/review-artifact.js +171 -0
  118. package/dist/lib/review-artifact.js.map +1 -0
  119. package/dist/lib/review-core.d.ts +6 -4
  120. package/dist/lib/review-core.d.ts.map +1 -1
  121. package/dist/lib/review-core.js +88 -173
  122. package/dist/lib/review-core.js.map +1 -1
  123. package/dist/lib/review-orchestrator.d.ts +23 -0
  124. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  125. package/dist/lib/review-orchestrator.js +31 -21
  126. package/dist/lib/review-orchestrator.js.map +1 -1
  127. package/dist/lib/review-usage.d.ts +4 -0
  128. package/dist/lib/review-usage.d.ts.map +1 -1
  129. package/dist/lib/review-usage.js +25 -0
  130. package/dist/lib/review-usage.js.map +1 -1
  131. package/dist/lib/trace-collector.d.ts +105 -0
  132. package/dist/lib/trace-collector.d.ts.map +1 -0
  133. package/dist/lib/trace-collector.js +255 -0
  134. package/dist/lib/trace-collector.js.map +1 -0
  135. package/dist/lib/trace-html.d.ts +3 -0
  136. package/dist/lib/trace-html.d.ts.map +1 -0
  137. package/dist/lib/trace-html.js +349 -0
  138. package/dist/lib/trace-html.js.map +1 -0
  139. package/dist/lib/workflow-artifacts.d.ts +54 -0
  140. package/dist/lib/workflow-artifacts.d.ts.map +1 -0
  141. package/dist/lib/workflow-artifacts.js +150 -0
  142. package/dist/lib/workflow-artifacts.js.map +1 -0
  143. package/dist/pi/sdk.d.ts.map +1 -1
  144. package/dist/pi/sdk.js +605 -16
  145. package/dist/pi/sdk.js.map +1 -1
  146. package/dist/runtime/agent-loader.d.ts +10 -6
  147. package/dist/runtime/agent-loader.d.ts.map +1 -1
  148. package/dist/runtime/agent-loader.js +55 -29
  149. package/dist/runtime/agent-loader.js.map +1 -1
  150. package/dist/runtime/built-in-paths.d.ts +1 -0
  151. package/dist/runtime/built-in-paths.d.ts.map +1 -1
  152. package/dist/runtime/built-in-paths.js +7 -0
  153. package/dist/runtime/built-in-paths.js.map +1 -1
  154. package/dist/runtime/client.d.ts +14 -0
  155. package/dist/runtime/client.d.ts.map +1 -1
  156. package/dist/runtime/client.js +87 -56
  157. package/dist/runtime/client.js.map +1 -1
  158. package/dist/runtime/path-config.d.ts +2 -2
  159. package/dist/runtime/path-config.d.ts.map +1 -1
  160. package/dist/runtime/path-config.js +8 -8
  161. package/dist/runtime/path-config.js.map +1 -1
  162. package/package.json +22 -16
  163. package/.pi/agents/review/documentation.md +0 -56
  164. package/.pi/agents/review/performance.md +0 -53
  165. package/.pi/agents/review/quality.md +0 -59
  166. package/.pi/agents/review/security.md +0 -53
  167. package/.pi/agents/review/style.md +0 -132
  168. package/dist/cli/describe-mr.d.ts +0 -11
  169. package/dist/cli/describe-mr.d.ts.map +0 -1
  170. package/dist/cli/describe-mr.js +0 -134
  171. package/dist/cli/describe-mr.js.map +0 -1
  172. package/dist/cli/describe-pr.d.ts +0 -12
  173. package/dist/cli/describe-pr.d.ts.map +0 -1
  174. package/dist/cli/describe-pr.js +0 -135
  175. package/dist/cli/describe-pr.js.map +0 -1
  176. package/dist/cli/post-comments.d.ts +0 -20
  177. package/dist/cli/post-comments.d.ts.map +0 -1
  178. package/dist/cli/post-comments.js +0 -225
  179. package/dist/cli/post-comments.js.map +0 -1
  180. package/dist/cli/review-local.d.ts +0 -13
  181. package/dist/cli/review-local.d.ts.map +0 -1
  182. package/dist/cli/review-local.integration.test.d.ts +0 -2
  183. package/dist/cli/review-local.integration.test.d.ts.map +0 -1
  184. package/dist/cli/review-local.integration.test.js +0 -343
  185. package/dist/cli/review-local.integration.test.js.map +0 -1
  186. package/dist/cli/review-local.js +0 -90
  187. package/dist/cli/review-local.js.map +0 -1
  188. package/dist/cli/review-local.live.e2e.test.d.ts +0 -2
  189. package/dist/cli/review-local.live.e2e.test.d.ts.map +0 -1
  190. package/dist/cli/review-local.live.e2e.test.js +0 -153
  191. package/dist/cli/review-local.live.e2e.test.js.map +0 -1
  192. package/dist/cli/review-local.test.d.ts +0 -2
  193. package/dist/cli/review-local.test.d.ts.map +0 -1
  194. package/dist/cli/review-local.test.js +0 -164
  195. package/dist/cli/review-local.test.js.map +0 -1
  196. package/dist/cli/review-mr.d.ts +0 -22
  197. package/dist/cli/review-mr.d.ts.map +0 -1
  198. package/dist/cli/review-mr.js +0 -181
  199. package/dist/cli/review-mr.js.map +0 -1
  200. package/dist/cli/review-mr.test.d.ts +0 -2
  201. package/dist/cli/review-mr.test.d.ts.map +0 -1
  202. package/dist/cli/review-mr.test.js +0 -142
  203. package/dist/cli/review-mr.test.js.map +0 -1
  204. package/dist/cli/review-pr.d.ts +0 -22
  205. package/dist/cli/review-pr.d.ts.map +0 -1
  206. package/dist/cli/review-pr.js +0 -181
  207. package/dist/cli/review-pr.js.map +0 -1
  208. package/dist/cli/review-pr.test.d.ts +0 -2
  209. package/dist/cli/review-pr.test.d.ts.map +0 -1
  210. package/dist/cli/review-pr.test.js +0 -137
  211. package/dist/cli/review-pr.test.js.map +0 -1
  212. package/dist/cli/review-url.d.ts +0 -35
  213. package/dist/cli/review-url.d.ts.map +0 -1
  214. package/dist/cli/review-url.js +0 -110
  215. package/dist/cli/review-url.js.map +0 -1
  216. package/dist/cli/review-url.test.d.ts +0 -2
  217. package/dist/cli/review-url.test.d.ts.map +0 -1
  218. package/dist/cli/review-url.test.js +0 -132
  219. package/dist/cli/review-url.test.js.map +0 -1
  220. package/dist/cli/show-changes.d.ts +0 -15
  221. package/dist/cli/show-changes.d.ts.map +0 -1
  222. package/dist/cli/show-changes.js +0 -184
  223. package/dist/cli/show-changes.js.map +0 -1
  224. package/dist/github/client.test.d.ts +0 -2
  225. package/dist/github/client.test.d.ts.map +0 -1
  226. package/dist/github/client.test.js +0 -206
  227. package/dist/github/client.test.js.map +0 -1
  228. package/dist/github/platform-adapter.test.d.ts +0 -2
  229. package/dist/github/platform-adapter.test.d.ts.map +0 -1
  230. package/dist/github/platform-adapter.test.js +0 -40
  231. package/dist/github/platform-adapter.test.js.map +0 -1
  232. package/dist/gitlab/diff-parser.test.d.ts +0 -2
  233. package/dist/gitlab/diff-parser.test.d.ts.map +0 -1
  234. package/dist/gitlab/diff-parser.test.js +0 -315
  235. package/dist/gitlab/diff-parser.test.js.map +0 -1
  236. package/dist/gitlab/platform-adapter.test.d.ts +0 -2
  237. package/dist/gitlab/platform-adapter.test.d.ts.map +0 -1
  238. package/dist/gitlab/platform-adapter.test.js +0 -21
  239. package/dist/gitlab/platform-adapter.test.js.map +0 -1
  240. package/dist/index.test.d.ts +0 -2
  241. package/dist/index.test.d.ts.map +0 -1
  242. package/dist/index.test.js +0 -7
  243. package/dist/index.test.js.map +0 -1
  244. package/dist/lib/code-quality-report.test.d.ts +0 -2
  245. package/dist/lib/code-quality-report.test.d.ts.map +0 -1
  246. package/dist/lib/code-quality-report.test.js +0 -327
  247. package/dist/lib/code-quality-report.test.js.map +0 -1
  248. package/dist/lib/comment-formatter.test.d.ts +0 -2
  249. package/dist/lib/comment-formatter.test.d.ts.map +0 -1
  250. package/dist/lib/comment-formatter.test.js +0 -694
  251. package/dist/lib/comment-formatter.test.js.map +0 -1
  252. package/dist/lib/comment-manager.test.d.ts +0 -2
  253. package/dist/lib/comment-manager.test.d.ts.map +0 -1
  254. package/dist/lib/comment-manager.test.js +0 -680
  255. package/dist/lib/comment-manager.test.js.map +0 -1
  256. package/dist/lib/comment-poster.test.d.ts +0 -5
  257. package/dist/lib/comment-poster.test.d.ts.map +0 -1
  258. package/dist/lib/comment-poster.test.js +0 -245
  259. package/dist/lib/comment-poster.test.js.map +0 -1
  260. package/dist/lib/config-model-overrides.test.d.ts +0 -12
  261. package/dist/lib/config-model-overrides.test.d.ts.map +0 -1
  262. package/dist/lib/config-model-overrides.test.js +0 -254
  263. package/dist/lib/config-model-overrides.test.js.map +0 -1
  264. package/dist/lib/config.test.d.ts +0 -2
  265. package/dist/lib/config.test.d.ts.map +0 -1
  266. package/dist/lib/config.test.js +0 -73
  267. package/dist/lib/config.test.js.map +0 -1
  268. package/dist/lib/context-compression.test.d.ts +0 -2
  269. package/dist/lib/context-compression.test.d.ts.map +0 -1
  270. package/dist/lib/context-compression.test.js +0 -337
  271. package/dist/lib/context-compression.test.js.map +0 -1
  272. package/dist/lib/context-loader.test.d.ts +0 -2
  273. package/dist/lib/context-loader.test.d.ts.map +0 -1
  274. package/dist/lib/context-loader.test.js +0 -207
  275. package/dist/lib/context-loader.test.js.map +0 -1
  276. package/dist/lib/cursor-fix-link.test.d.ts +0 -2
  277. package/dist/lib/cursor-fix-link.test.d.ts.map +0 -1
  278. package/dist/lib/cursor-fix-link.test.js +0 -70
  279. package/dist/lib/cursor-fix-link.test.js.map +0 -1
  280. package/dist/lib/describe-core.test.d.ts +0 -2
  281. package/dist/lib/describe-core.test.d.ts.map +0 -1
  282. package/dist/lib/describe-core.test.js +0 -208
  283. package/dist/lib/describe-core.test.js.map +0 -1
  284. package/dist/lib/describe-output-path.test.d.ts +0 -2
  285. package/dist/lib/describe-output-path.test.d.ts.map +0 -1
  286. package/dist/lib/describe-output-path.test.js +0 -51
  287. package/dist/lib/describe-output-path.test.js.map +0 -1
  288. package/dist/lib/describe-parser.test.d.ts +0 -2
  289. package/dist/lib/describe-parser.test.d.ts.map +0 -1
  290. package/dist/lib/describe-parser.test.js +0 -282
  291. package/dist/lib/describe-parser.test.js.map +0 -1
  292. package/dist/lib/description-executor.test.d.ts +0 -2
  293. package/dist/lib/description-executor.test.d.ts.map +0 -1
  294. package/dist/lib/description-executor.test.js +0 -128
  295. package/dist/lib/description-executor.test.js.map +0 -1
  296. package/dist/lib/description-formatter.test.d.ts +0 -2
  297. package/dist/lib/description-formatter.test.d.ts.map +0 -1
  298. package/dist/lib/description-formatter.test.js +0 -57
  299. package/dist/lib/description-formatter.test.js.map +0 -1
  300. package/dist/lib/diff-parser.test.d.ts +0 -2
  301. package/dist/lib/diff-parser.test.d.ts.map +0 -1
  302. package/dist/lib/diff-parser.test.js +0 -335
  303. package/dist/lib/diff-parser.test.js.map +0 -1
  304. package/dist/lib/error-comment-poster.test.d.ts +0 -2
  305. package/dist/lib/error-comment-poster.test.d.ts.map +0 -1
  306. package/dist/lib/error-comment-poster.test.js +0 -128
  307. package/dist/lib/error-comment-poster.test.js.map +0 -1
  308. package/dist/lib/exit.test.d.ts +0 -2
  309. package/dist/lib/exit.test.d.ts.map +0 -1
  310. package/dist/lib/exit.test.js +0 -120
  311. package/dist/lib/exit.test.js.map +0 -1
  312. package/dist/lib/issue-parser.test.d.ts +0 -2
  313. package/dist/lib/issue-parser.test.d.ts.map +0 -1
  314. package/dist/lib/issue-parser.test.js +0 -281
  315. package/dist/lib/issue-parser.test.js.map +0 -1
  316. package/dist/lib/json-output-schema.test.d.ts +0 -2
  317. package/dist/lib/json-output-schema.test.d.ts.map +0 -1
  318. package/dist/lib/json-output-schema.test.js +0 -92
  319. package/dist/lib/json-output-schema.test.js.map +0 -1
  320. package/dist/lib/json-output.test.d.ts +0 -2
  321. package/dist/lib/json-output.test.d.ts.map +0 -1
  322. package/dist/lib/json-output.test.js +0 -141
  323. package/dist/lib/json-output.test.js.map +0 -1
  324. package/dist/lib/logger.test.d.ts +0 -2
  325. package/dist/lib/logger.test.d.ts.map +0 -1
  326. package/dist/lib/logger.test.js +0 -324
  327. package/dist/lib/logger.test.js.map +0 -1
  328. package/dist/lib/position-validator.test.d.ts +0 -2
  329. package/dist/lib/position-validator.test.d.ts.map +0 -1
  330. package/dist/lib/position-validator.test.js +0 -128
  331. package/dist/lib/position-validator.test.js.map +0 -1
  332. package/dist/lib/prompt-budget.test.d.ts +0 -2
  333. package/dist/lib/prompt-budget.test.d.ts.map +0 -1
  334. package/dist/lib/prompt-budget.test.js +0 -55
  335. package/dist/lib/prompt-budget.test.js.map +0 -1
  336. package/dist/lib/repository-validator.test.d.ts +0 -5
  337. package/dist/lib/repository-validator.test.d.ts.map +0 -1
  338. package/dist/lib/repository-validator.test.js +0 -341
  339. package/dist/lib/repository-validator.test.js.map +0 -1
  340. package/dist/lib/review-core.test.d.ts +0 -2
  341. package/dist/lib/review-core.test.d.ts.map +0 -1
  342. package/dist/lib/review-core.test.js +0 -600
  343. package/dist/lib/review-core.test.js.map +0 -1
  344. package/dist/lib/review-orchestrator.test.d.ts +0 -2
  345. package/dist/lib/review-orchestrator.test.d.ts.map +0 -1
  346. package/dist/lib/review-orchestrator.test.js +0 -531
  347. package/dist/lib/review-orchestrator.test.js.map +0 -1
  348. package/dist/lib/review-output-path.test.d.ts +0 -2
  349. package/dist/lib/review-output-path.test.d.ts.map +0 -1
  350. package/dist/lib/review-output-path.test.js +0 -83
  351. package/dist/lib/review-output-path.test.js.map +0 -1
  352. package/dist/lib/review-parser.test.d.ts +0 -2
  353. package/dist/lib/review-parser.test.d.ts.map +0 -1
  354. package/dist/lib/review-parser.test.js +0 -130
  355. package/dist/lib/review-parser.test.js.map +0 -1
  356. package/dist/lib/review-usage.test.d.ts +0 -2
  357. package/dist/lib/review-usage.test.d.ts.map +0 -1
  358. package/dist/lib/review-usage.test.js +0 -83
  359. package/dist/lib/review-usage.test.js.map +0 -1
  360. package/dist/lib/unified-review-executor.d.ts +0 -60
  361. package/dist/lib/unified-review-executor.d.ts.map +0 -1
  362. package/dist/lib/unified-review-executor.js +0 -207
  363. package/dist/lib/unified-review-executor.js.map +0 -1
  364. package/dist/lib/unified-review-executor.test.d.ts +0 -5
  365. package/dist/lib/unified-review-executor.test.d.ts.map +0 -1
  366. package/dist/lib/unified-review-executor.test.js +0 -472
  367. package/dist/lib/unified-review-executor.test.js.map +0 -1
  368. package/dist/lib/write-json-output.test.d.ts +0 -2
  369. package/dist/lib/write-json-output.test.d.ts.map +0 -1
  370. package/dist/lib/write-json-output.test.js +0 -259
  371. package/dist/lib/write-json-output.test.js.map +0 -1
  372. package/dist/pi/sdk.test.d.ts +0 -2
  373. package/dist/pi/sdk.test.d.ts.map +0 -1
  374. package/dist/pi/sdk.test.js +0 -449
  375. package/dist/pi/sdk.test.js.map +0 -1
  376. package/dist/runtime/agent-loader.test.d.ts +0 -2
  377. package/dist/runtime/agent-loader.test.d.ts.map +0 -1
  378. package/dist/runtime/agent-loader.test.js +0 -280
  379. package/dist/runtime/agent-loader.test.js.map +0 -1
  380. package/dist/runtime/client.test.d.ts +0 -2
  381. package/dist/runtime/client.test.d.ts.map +0 -1
  382. package/dist/runtime/client.test.js +0 -523
  383. package/dist/runtime/client.test.js.map +0 -1
  384. package/dist/runtime/path-config.test.d.ts +0 -2
  385. package/dist/runtime/path-config.test.d.ts.map +0 -1
  386. package/dist/runtime/path-config.test.js +0 -112
  387. package/dist/runtime/path-config.test.js.map +0 -1
package/README.md CHANGED
@@ -3,16 +3,17 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@diff-review-system/drs)](https://www.npmjs.com/package/@diff-review-system/drs)
4
4
  [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
5
5
 
6
- **Automated AI code reviews for GitHub PRs and GitLab MRs.**
6
+ **Workflow-first AI code maintenance for reviews, changelogs, docs, and repository upkeep.**
7
7
 
8
- DRS helps teams catch critical issues earlier with specialized review agents, unified reporting, and CI-friendly automation — all powered by Pi SDK.
8
+ DRS runs agentic workflows for local diffs, GitHub PRs, and GitLab MRs. Review is a first-class packaged workflow, and the same workflow engine can update changelogs, fix review findings, refresh agent guidance, post comments, and compose project-specific maintenance pipelines — all powered by Pi SDK.
9
9
 
10
10
  ## Why teams like DRS
11
11
 
12
- - 🔒 **Specialized analysis domains**: security, quality, style, performance, documentation
13
- - 🧠 **Flexible agent pipelines**: compose any review agents (including `unified-reviewer`) in execution order
12
+ - 🧭 **Workflow-first automation**: run packaged or project-defined DAG workflows with `drs workflow run`
13
+ - 🎯 **First-class review workflows**: `local-review`, `github-pr-review`, and `gitlab-mr-review` are included out of the box
14
+ - 🧠 **Flexible agent pipelines**: add your own project-specific `review/*` and `task/*` agents
14
15
  - 📦 **Pi-native runtime**: in-process execution by default, no separate runtime service required
15
- - ✍️ **Description generation**: optional PR/MR summary generation and posting
16
+ - ✍️ **Maintenance workflows**: update changelogs, fix review issues, refresh AGENTS.md-style guidance, and generate PR/MR descriptions
16
17
  - 🧾 **Portable outputs**: inline comments, JSON artifacts, and GitLab code quality reports
17
18
  - 🎯 **Smart context compression**: dynamic budget sizing with `contextCompression.thresholdPercent`
18
19
 
@@ -28,7 +29,7 @@ DRS helps teams catch critical issues earlier with specialized review agents, un
28
29
 
29
30
  ### 1. Prerequisites
30
31
 
31
- - Node.js 20+
32
+ - Node.js 22.19+
32
33
  - API key for your chosen model provider (Anthropic/OpenAI/ZhipuAI/etc.)
33
34
 
34
35
  ### 2. Install DRS
@@ -49,8 +50,8 @@ drs init
49
50
  ### 4. Configure Environment
50
51
 
51
52
  ```bash
52
- # Copy example env file
53
- cp .env.example .env
53
+ # Create a local env file
54
+ touch .env
54
55
 
55
56
  # Edit .env and set:
56
57
  # - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
@@ -67,30 +68,63 @@ DRS CLI now loads `.env` automatically from your current working directory.
67
68
 
68
69
  **Note**: DRS runs Pi in-process by default and does not require a remote runtime endpoint.
69
70
 
70
- ### 5. Review Local Changes
71
+ ### 5. Run Local Workflows
71
72
 
72
73
  ```bash
73
74
  # Review unstaged changes
74
- drs review-local
75
+ drs workflow run local-review
75
76
 
76
77
  # Review staged changes
77
- drs review-local --staged
78
+ drs workflow run local-review --input staged=true
78
79
 
79
- # Use specific agents
80
- drs review-local --agents security,quality
80
+ # Update CHANGELOG.md from local changes
81
+ drs workflow run local-changelog-update
82
+
83
+ # Update CHANGELOG.md from the previous tag to the current tag, or explicit refs
84
+ drs workflow run tag-changelog-update --input from=v3.3.1 --input to=v4.0.0-rc.1
85
+
86
+ # Fix issues from the latest saved local review artifact
87
+ drs workflow run local-fix-review-issues
88
+
89
+ # Refresh AGENTS.md or equivalent repository guidance
90
+ drs workflow run local-update-agents-md
91
+
92
+ # To use project-specific agents, configure review.agents in .drs/drs.config.yaml
93
+ # then run the same workflow.
81
94
  ```
82
95
 
83
96
  ### Most-Used Commands
84
97
 
85
98
  | Goal | Command |
86
99
  |---|---|
87
- | Review local unstaged changes | `drs review-local` |
88
- | Review local staged changes | `drs review-local --staged` |
89
- | Review GitHub PR | `drs review-pr --owner <owner> --repo <repo> --pr <number>` |
90
- | Review GitLab MR | `drs review-mr --project <group/repo> --mr <number>` |
91
- | Review by PR/MR URL (auto-detect platform) | `drs review-url <https://.../pull/... or .../-/merge_requests/...>` |
92
- | Generate PR description | `drs describe-pr --owner <owner> --repo <repo> --pr <number>` |
93
- | Generate MR description | `drs describe-mr --project <group/repo> --mr <number>` |
100
+ | Review local unstaged changes | `drs workflow run local-review` |
101
+ | Review local staged changes | `drs workflow run local-review --input staged=true` |
102
+ | Update changelog from local changes | `drs workflow run local-changelog-update` |
103
+ | Update changelog from tag range | `drs workflow run tag-changelog-update` |
104
+ | Fix issues from latest saved local review artifact | `drs workflow run local-fix-review-issues` |
105
+ | Update AGENTS.md-style guidance | `drs workflow run local-update-agents-md` |
106
+ | Update changelog and review local changes | `drs workflow run local-changelog-review` |
107
+ | Review GitHub PR via workflow | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number>` |
108
+ | Review GitLab MR via workflow | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number>` |
109
+ | Show GitHub PR review context | `drs workflow run github-pr-show-changes --input owner=<owner> --input repo=<repo> --input pr=<number>` |
110
+ | Show GitLab MR review context | `drs workflow run gitlab-mr-show-changes --input project=<group/repo> --input mr=<number>` |
111
+ | Generate visual PR explainer artifact | `drs workflow run github-pr-visual-explain --input owner=<owner> --input repo=<repo> --input pr=<number>` |
112
+ | Generate visual MR explainer artifact | `drs workflow run gitlab-mr-visual-explain --input project=<group/repo> --input mr=<number>` |
113
+ | Generate visual local diff explainer | `drs workflow run local-visual-explain` |
114
+ | Describe, review, and comment on GitHub PR via workflow | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number> --input describe=true --input post=true` |
115
+ | Describe, review, and comment on GitLab MR via workflow | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input describe=true --input post=true` |
116
+ | Describe, review, comment, and generate visual PR explainer | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number> --input describe=true --input post=true --input visual=true` |
117
+ | Review GitLab MR and write Code Quality report | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input codeQuality=true` |
118
+ | Describe/review/comment GitLab MR and write Code Quality report | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input describe=true --input post=true --input codeQuality=true` |
119
+ | Generate PR description | `drs workflow run github-pr-describe --input owner=<owner> --input repo=<repo> --input pr=<number>` |
120
+ | Generate MR description | `drs workflow run gitlab-mr-describe --input project=<group/repo> --input mr=<number>` |
121
+ | Post or update a PR comment | `drs workflow run github-pr-post-comment --input owner=<owner> --input repo=<repo> --input pr=<number> --input body="..." --input marker=<id>` |
122
+ | Post or update an MR comment | `drs workflow run gitlab-mr-post-comment --input project=<group/repo> --input mr=<number> --input body="..." --input marker=<id>` |
123
+ | Run any configured agent | `drs run-agent task/docs-updater --prompt "Update release notes"` |
124
+ | Run a configured workflow | `drs workflow run release-notes --input-file diff=.drs/diff.md` |
125
+ | Run the default project workflow | `drs workflow run` |
126
+ | List available workflows | `drs workflow list` |
127
+ | Show workflow inputs and steps | `drs workflow show github-pr-review` |
94
128
 
95
129
  ## Deployment Modes
96
130
 
@@ -100,54 +134,46 @@ Review code locally before pushing:
100
134
 
101
135
  ```bash
102
136
  # Review local changes
103
- drs review-local
137
+ drs workflow run local-review
104
138
 
105
139
  # Review specific GitLab MR
106
- drs review-mr --project my-org/my-repo --mr 123 --post-comments
107
-
108
- # Review GitLab MR and auto-generate a description (optionally post it)
109
- drs review-mr --project my-org/my-repo --mr 123 --describe
110
- drs review-mr --project my-org/my-repo --mr 123 --describe --post-description
111
-
112
- # Review GitLab MR and generate code quality report
113
- drs review-mr --project my-org/my-repo --mr 123 --code-quality-report gl-code-quality-report.json
114
-
115
- # Review by PR/MR URL (auto-detect GitHub vs GitLab)
116
- drs review-url https://github.com/octocat/hello-world/pull/456 --post-comments
117
- drs review-url https://gitlab.com/my-org/my-repo/-/merge_requests/123 --post-comments
140
+ drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
118
141
 
119
142
  # Review specific GitHub PR
120
- drs review-pr --owner octocat --repo hello-world --pr 456 --post-comments
143
+ drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --input describe=true --input post=true
121
144
 
122
- # Review GitHub PR and auto-generate a description (optionally post it)
123
- drs review-pr --owner octocat --repo hello-world --pr 456 --describe
124
- drs review-pr --owner octocat --repo hello-world --pr 456 --describe --post-description
145
+ # Review and generate a visual explainer artifact
146
+ drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --input describe=true --input post=true --input visual=true
125
147
 
126
- # Enable extended thinking for deeper analysis
127
- drs review-pr --owner octocat --repo hello-world --pr 456 --reasoning-effort high
128
- drs review-mr --project my-org/my-repo --mr 123 --ultrathink
148
+ # Review local staged changes
149
+ drs workflow run local-review --input staged=true
129
150
 
130
- # Override base branch used for diff hints
131
- drs review-pr --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
151
+ # Override model/agent behavior through config, then run workflows
152
+ drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456
132
153
 
133
- # Generate review JSON first, then post comments after manual review
134
- drs review-pr --owner octocat --repo hello-world --pr 456 -o review.json
135
- drs post-comments --input review.json --owner octocat --repo hello-world --pr 456
154
+ # Use ultrathink with workflows
155
+ drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --ultrathink
136
156
 
137
157
  # Show the diff context passed to agents
138
- drs show-changes --owner octocat --repo hello-world --pr 456
158
+ drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello-world --input pr=456
139
159
 
140
160
  # Show diff context for a single file
141
- drs show-changes --owner octocat --repo hello-world --pr 456 --file src/app.ts
161
+ drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello-world --input pr=456 --input file=src/app.ts
142
162
 
143
- # Show diff context using a specific base branch
144
- drs show-changes --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
163
+ # Generate self-contained HTML visual explainers
164
+ drs workflow run local-visual-explain
165
+ drs workflow run github-pr-visual-explain --input owner=octocat --input repo=hello-world --input pr=456
166
+ drs workflow run gitlab-mr-visual-explain --input project=my-org/my-repo --input mr=123
145
167
 
146
168
  # Generate PR/MR descriptions on demand
147
- drs describe-pr --owner octocat --repo hello-world --pr 456
148
- drs describe-pr --owner octocat --repo hello-world --pr 456 --post-description
149
- drs describe-mr --project my-org/my-repo --mr 123
150
- drs describe-mr --project my-org/my-repo --mr 123 --post-description
169
+ drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456
170
+ drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456 --input post=true
171
+ drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123
172
+ drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123 --input post=true
173
+
174
+ # Post or update a single marked PR/MR comment
175
+ drs workflow run github-pr-post-comment --input owner=octocat --input repo=hello-world --input pr=456 --input body="Release notes are ready." --input marker=release-notes
176
+ drs workflow run gitlab-mr-post-comment --input project=my-org/my-repo --input mr=123 --input body="Release notes are ready." --input marker=release-notes
151
177
  ```
152
178
 
153
179
  ### Mode 2: GitLab CI/CD
@@ -202,6 +228,51 @@ DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-revi
202
228
  - Maintainer workflow
203
229
  - Attack prevention strategies
204
230
 
231
+ ### Visual PR Explainer Artifacts
232
+
233
+ DRS includes visual explainer workflows that generate a self-contained HTML page for reviewers:
234
+
235
+ - `github-pr-visual-explain` writes `.drs/visual-pr-explainer.html` by default.
236
+ - `gitlab-mr-visual-explain` writes `.drs/visual-mr-explainer.html` by default.
237
+ - `local-visual-explain` writes `.drs/visual-local-explainer.html` by default.
238
+
239
+ The main review workflows also support visual artifacts:
240
+
241
+ ```bash
242
+ drs workflow run github-pr-review \
243
+ --input owner=octocat \
244
+ --input repo=hello-world \
245
+ --input pr=456 \
246
+ --input describe=true \
247
+ --input post=true \
248
+ --input visual=true
249
+ ```
250
+
251
+ The built-in `visual/pr-explainer` agent includes DRS-specific HTML generation guidance out of the box. Override `.drs/agents/visual/pr-explainer/agent.md` or configure `agents.overrides.visual/pr-explainer` to tune the output for your project. If you install an external `visual-explainer` skill, add it through `agents.overrides.visual/pr-explainer.skills` so the agent loads those richer templates and design rules.
252
+
253
+ To publish the generated page from GitHub Actions, upload it as an artifact:
254
+
255
+ ```yaml
256
+ - name: Generate visual explainer
257
+ env:
258
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
259
+ OPENCODE_API_KEY: ${{ secrets.DRS_PROVIDER_API_KEY }}
260
+ run: |
261
+ node dist/cli/index.js workflow run github-pr-review \
262
+ --input owner="${{ github.event.repository.owner.login }}" \
263
+ --input repo="${{ github.event.repository.name }}" \
264
+ --input pr="${{ github.event.pull_request.number }}" \
265
+ --input describe=true \
266
+ --input post=true \
267
+ --input visual=true \
268
+ --input visualOutputPath=".drs/visual-pr-explainer.html"
269
+
270
+ - uses: actions/upload-artifact@v4
271
+ with:
272
+ name: visual-pr-explainer
273
+ path: .drs/visual-pr-explainer.html
274
+ ```
275
+
205
276
  ## GitLab Code Quality Reports
206
277
 
207
278
  DRS can generate GitLab-compatible code quality reports that integrate seamlessly with GitLab CI/CD. This provides an alternative (or complement) to inline MR comments.
@@ -216,21 +287,19 @@ DRS can generate GitLab-compatible code quality reports that integrate seamlessl
216
287
  - **Non-intrusive**: Doesn't create discussion threads
217
288
 
218
289
  **When to Use:**
219
- - Use **inline comments** (`--post-comments`) for critical issues requiring discussion
290
+ - Use `describe=true` to update the PR/MR description before review
291
+ - Use `post=true` for review issues requiring discussion
220
292
  - Use **code quality reports** (`--code-quality-report`) for comprehensive static analysis
221
293
  - Use **both together** for maximum visibility
222
294
 
223
295
  ### CLI Usage
224
296
 
225
297
  ```bash
226
- # Generate code quality report only
227
- drs review-mr --project my-org/my-repo --mr 123 \
228
- --code-quality-report gl-code-quality-report.json
298
+ # Use workflow-based MR review with comments
299
+ drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
229
300
 
230
- # Use both comments and code quality report
231
- drs review-mr --project my-org/my-repo --mr 123 \
232
- --post-comments \
233
- --code-quality-report gl-code-quality-report.json
301
+ # For code quality artifacts, enable codeQuality
302
+ drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input codeQuality=true
234
303
  ```
235
304
 
236
305
  ### GitLab CI Integration
@@ -244,12 +313,7 @@ code_review:
244
313
  before_script:
245
314
  - npm install -g @diff-review-system/drs
246
315
  script:
247
- - drs review-mr --project $CI_PROJECT_PATH --mr $CI_MERGE_REQUEST_IID
248
- --code-quality-report gl-code-quality-report.json
249
- artifacts:
250
- reports:
251
- codequality: gl-code-quality-report.json
252
- expire_in: 1 week
316
+ - drs workflow run gitlab-mr-review --input project=$CI_PROJECT_PATH --input mr=$CI_MERGE_REQUEST_IID --input describe=true --input post=true
253
317
  only:
254
318
  - merge_requests
255
319
  ```
@@ -295,7 +359,7 @@ DRS runs on Pi SDK as the sole review runtime.
295
359
  By default, DRS starts Pi runtime in-process:
296
360
 
297
361
  ```bash
298
- drs review-local
362
+ drs workflow run local-review
299
363
  ```
300
364
 
301
365
  ### Runtime Mode
@@ -304,17 +368,13 @@ DRS uses Pi in-process runtime only.
304
368
 
305
369
  ## Architecture
306
370
 
307
- DRS uses Pi runtime wiring with markdown-based agent definitions:
371
+ DRS uses Pi runtime wiring with markdown-based agent definitions. Agents are addressed by fully qualified ids: `<namespace>/<name>`.
308
372
 
309
373
  ```
310
374
  .pi/
311
375
  └── agents/
312
376
  └── review/
313
- ├── security.md # Security specialist
314
- ├── quality.md # Code quality expert
315
- ├── style.md # Style checker
316
- ├── performance.md # Performance analyzer
317
- └── documentation.md # Documentation reviewer
377
+ └── unified-reviewer.md # Packaged unified reviewer
318
378
  ```
319
379
 
320
380
  Built-in agent definitions live under `.pi/agents`.
@@ -328,15 +388,15 @@ Built-in agent definitions live under `.pi/agents`.
328
388
  Create custom agents in your project:
329
389
 
330
390
  ```bash
331
- # Create custom security agent
332
- mkdir -p .drs/agents/security
333
- cat > .drs/agents/security/agent.md << 'EOF'
391
+ # Override the packaged unified reviewer
392
+ mkdir -p .drs/agents/review/unified-reviewer
393
+ cat > .drs/agents/review/unified-reviewer/agent.md << 'EOF'
334
394
  ---
335
- description: Custom security reviewer
395
+ description: Custom unified reviewer
336
396
  model: anthropic/claude-sonnet-4-5-20250929
337
397
  ---
338
398
 
339
- You are a security expert for this specific application.
399
+ You are a reviewer for this specific application.
340
400
 
341
401
  ## Project-Specific Rules
342
402
  [Add your custom rules here]
@@ -348,9 +408,9 @@ EOF
348
408
  Add project-specific guidance to a built-in agent without replacing its prompt:
349
409
 
350
410
  ```bash
351
- mkdir -p .drs/agents/quality
352
- cat > .drs/agents/quality/context.md << 'EOF'
353
- # Quality Context
411
+ mkdir -p .drs/agents/review/unified-reviewer
412
+ cat > .drs/agents/review/unified-reviewer/context.md << 'EOF'
413
+ # Unified Reviewer Context
354
414
  - Flag functions over 200 lines as HIGH
355
415
  - We use TypeORM — flag raw SQL queries
356
416
  EOF
@@ -368,11 +428,11 @@ Prioritize correctness, safety, and clarity.
368
428
 
369
429
  ### Create New Custom Agents
370
430
 
371
- Add agents that don't exist in the built-in set:
431
+ Add review agents that don't exist in the built-in set:
372
432
 
373
433
  ```bash
374
- mkdir -p .drs/agents/api-reviewer
375
- cat > .drs/agents/api-reviewer/agent.md << 'EOF'
434
+ mkdir -p .drs/agents/review/api-reviewer
435
+ cat > .drs/agents/review/api-reviewer/agent.md << 'EOF'
376
436
  ---
377
437
  description: REST API contract reviewer
378
438
  tools:
@@ -383,24 +443,111 @@ Review REST API changes for backward compatibility.
383
443
  EOF
384
444
  ```
385
445
 
386
- Then add to config: `agents: [security, quality, api-reviewer]`
446
+ Then add to config: `review.agents: [review/unified-reviewer, review/api-reviewer]`
447
+
448
+ For non-review work, create agents in any namespace and run them directly:
449
+
450
+ ```bash
451
+ mkdir -p .drs/agents/task/docs-updater
452
+ cat > .drs/agents/task/docs-updater/agent.md << 'EOF'
453
+ ---
454
+ description: Documentation update assistant
455
+ tools:
456
+ Read: true
457
+ Grep: true
458
+ ---
459
+ Update documentation based on the user's request.
460
+ EOF
461
+
462
+ drs run-agent task/docs-updater --prompt "Summarize the latest API changes"
463
+ ```
464
+
465
+ You can also put the run prompt and output behavior in config, then invoke only the agent id:
466
+
467
+ ```yaml
468
+ agents:
469
+ overrides:
470
+ task/docs-updater:
471
+ run:
472
+ prompt: "Summarize the latest API changes"
473
+ output: .drs/docs-summary.json
474
+ json: true
475
+ ```
476
+
477
+ ```bash
478
+ drs run task/docs-updater
479
+ ```
480
+
481
+ ### Configure Workflows
482
+
483
+ Workflows compose agents and built-in actions into a dependency graph. They are useful when one agent produces an artifact that another agent or action consumes.
484
+
485
+ Define reusable project workflows in `.drs/workflows/*.yaml`.
486
+
487
+ ```yaml
488
+ name: release-notes
489
+ inputs:
490
+ diff:
491
+ file: .drs/diff.md
492
+ nodes:
493
+ summarize:
494
+ agent: task/change-summarizer
495
+ input: |
496
+ Summarize these changes:
497
+
498
+ {{inputs.diff}}
499
+ output: summary
500
+ write-summary:
501
+ action: write
502
+ needs: [summarize]
503
+ input: "{{artifacts.summary}}"
504
+ writes: RELEASE_NOTES.md
505
+ ```
506
+
507
+ ```bash
508
+ drs workflow run release-notes
509
+ drs workflow run # uses workflow.default from .drs/drs.config.yaml when configured
510
+ drs workflow run release-notes --input-file diff=changes.md --json
511
+ ```
512
+
513
+ Select the default workflow in `.drs/drs.config.yaml`:
514
+
515
+ ```yaml
516
+ workflow:
517
+ default: local-changelog-review
518
+ ```
519
+
520
+ See [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the full workflow configuration reference.
387
521
 
388
522
  ### Configure Review Behavior
389
523
 
390
524
  Edit `.drs/drs.config.yaml`:
391
525
 
392
526
  ```yaml
527
+ agents:
528
+ default:
529
+ model: zhipuai/glm-4.7
530
+ skills: []
531
+ namespaces:
532
+ review:
533
+ model: anthropic/claude-sonnet-4-5-20250929
534
+ task:
535
+ model: openai/gpt-4o
536
+ overrides:
537
+ task/docs-updater:
538
+ run:
539
+ promptFile: prompts/docs-update.md
540
+ output: .drs/docs-update.json
541
+ json: true
542
+
393
543
  review:
394
544
  agents:
395
- - unified-reviewer
396
- - security
397
- - quality
545
+ - review/unified-reviewer
398
546
  ignorePatterns:
399
547
  - "*.test.ts"
400
548
  - "*.md"
401
549
  describe:
402
550
  enabled: true
403
- postDescription: false
404
551
  cursorFixLinks:
405
552
  enabled: false
406
553
  # workspace: my-repo
@@ -419,14 +566,13 @@ describe:
419
566
  ```
420
567
 
421
568
  Notes:
422
- - `review.describe` controls auto-description when running `review-mr` or `review-pr`.
423
- - CLI flags override config: `--describe` / `--skip-describe` and `--post-description` / `--skip-post-description`.
424
- - `review.cursorFixLinks.enabled` adds opt-in `Fix in Cursor` links to posted review comments via Cursor's web deeplink bridge. CLI flags override config: `--fix-in-cursor` / `--skip-fix-in-cursor`.
425
- - `describe.model` is used by `describe-mr`/`describe-pr` and by review-driven descriptions.
569
+ - Review orchestration is workflow-first in v4: use `drs workflow run ...` for local/PR/MR review.
570
+ - `describe.model` is used by describe workflows and by review-driven descriptions.
426
571
  - `contextCompression.thresholdPercent` sets a context-window-aware budget (e.g. `0.15` means 15%).
427
572
  - `contextCompression.maxTokens` is the fallback cap when context window metadata is unavailable.
428
- - `review.agents` explicitly enables deep-review agents; remove an entry to disable that agent.
429
- - Built-in review agent names are: `unified-reviewer`, `security`, `quality`, `style`, `performance`, `documentation`.
573
+ - `review.agents` controls exactly which review agents run.
574
+ - Packaged built-in review agent ID: `review/unified-reviewer`.
575
+ - Add project-specific review agents under `.drs/agents/review/<name>/agent.md` and include them in `review.agents`.
430
576
  - Unknown agent names fail fast with a validation error before review execution starts.
431
577
 
432
578
  ### Model Pricing Overrides (Cost Reporting)
@@ -504,11 +650,35 @@ contextCompression:
504
650
  softBufferTokens: 1500
505
651
  hardBufferTokens: 1000
506
652
  tokenEstimateDivisor: 4
653
+ summaryThresholdMultiplier: 3 # use summary-only context above hard limit * multiplier
507
654
  ```
508
655
 
656
+ ### Runtime Timeouts and Provider Retry
657
+
658
+ To prevent hung reviews, configure runtime-level call/stream timeouts and provider request retry limits:
659
+
660
+ ```yaml
661
+ pi:
662
+ runtime:
663
+ operationTimeoutMs: 300000 # timeout for create/prompt/messages calls
664
+ streamTimeoutMs: 900000 # total timeout while waiting for agent completion
665
+ streamPollIntervalMs: 2000 # polling cadence for session messages
666
+ retry:
667
+ provider:
668
+ timeoutMs: 45000 # provider request timeout passed to Pi SDK
669
+ maxRetries: 2 # provider request retries (Pi SDK)
670
+ maxRetryDelayMs: 15000 # max backoff delay between retries
671
+ ```
672
+
673
+ Environment variables override runtime timeout fields:
674
+
675
+ - `DRS_RUNTIME_OPERATION_TIMEOUT_MS`
676
+ - `DRS_RUNTIME_STREAM_TIMEOUT_MS`
677
+ - `DRS_RUNTIME_STREAM_POLL_INTERVAL_MS`
678
+
509
679
  ### Pi-Native Skill Discovery
510
680
 
511
- DRS auto-discovers review skills from these directories when `review.paths.skills` is not set:
681
+ DRS auto-discovers skills from these directories when `agents.paths.skills` is not set:
512
682
 
513
683
  1. `.drs/skills` (project-level overrides)
514
684
  2. `.agents/skills` (legacy/shared project skills)
@@ -528,12 +698,12 @@ Example layout:
528
698
  db-indexing/SKILL.md # Additional Pi-native skill
529
699
  ```
530
700
 
531
- To force a single custom skills directory, set `review.paths.skills`:
701
+ To force a single custom skills directory, set `agents.paths.skills`:
532
702
 
533
703
  ```yaml
534
- review:
704
+ agents:
535
705
  paths:
536
- skills: config/review-skills
706
+ skills: config/agent-skills
537
707
  ```
538
708
 
539
709
  ## Review Domains
@@ -590,7 +760,10 @@ OPENAI_API_KEY=sk-xxx # For OpenAI models
590
760
 
591
761
  # Optional
592
762
  GITLAB_URL=https://gitlab.com
593
- REVIEW_AGENTS=security,quality,style,performance
763
+ DRS_DEFAULT_MODEL=anthropic/claude-sonnet-4-5-20250929
764
+ DRS_AGENT_REVIEW_UNIFIED_REVIEWER_MODEL=anthropic/claude-opus-4-5-20251101
765
+ # Configure review agents in .drs/drs.config.yaml via review.agents.
766
+ # Legacy REVIEW_AGENTS is still accepted as a compatibility alias.
594
767
  REVIEW_THINKING_LEVEL=medium # Reasoning effort: off, minimal, low, medium, high, xhigh
595
768
  ```
596
769
 
@@ -614,13 +787,16 @@ npm run build
614
787
  # Run tests
615
788
  npm test
616
789
 
617
- # Development mode
618
- npm run dev
790
+ # Run the CLI from TypeScript once
791
+ npm run dev:cli -- workflow list
792
+
793
+ # Watch-mode CLI entrypoint
794
+ npm run dev -- workflow list
619
795
  ```
620
796
 
621
797
  ## Requirements
622
798
 
623
- - Node.js 20+
799
+ - Node.js 22.19+
624
800
  - API key for your selected provider (Anthropic/OpenAI/ZhipuAI/etc.)
625
801
  - GitLab access token (for GitLab MR reviews)
626
802
  - GitHub access token (for GitHub PR reviews)
@@ -638,6 +814,7 @@ Apache-2.0
638
814
  - [GitHub Actions Integration Guide](docs/GITHUB_ACTIONS_INTEGRATION.md) - GitHub Actions workflow setup
639
815
  - [External PR Security Guide](docs/EXTERNAL_PR_SECURITY.md) - Security controls for external contributors
640
816
  - [Custom Agents & Skills Guide](docs/CUSTOM_AGENTS.md) - Custom agents, context, skills, and per-agent tools
817
+ - [Workflows Guide](docs/WORKFLOWS.md) - Compose agents and actions into dependency graphs
641
818
  - [Model Overrides Guide](docs/MODEL_OVERRIDES.md) - Per-agent model configuration
642
819
  - [Pi Documentation](https://github.com/badlogic/pi-mono)
643
820
 
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyDjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
package/dist/ci/runner.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { loadConfig, validateConfig } from '../lib/config.js';
2
2
  import { exitProcess } from '../lib/exit.js';
3
3
  import { getLogger } from '../lib/logger.js';
4
- import { reviewMR } from '../cli/review-mr.js';
4
+ import { runWorkflow } from '../cli/workflow.js';
5
5
  /**
6
6
  * Detect CI environment from environment variables
7
7
  */
@@ -56,13 +56,14 @@ export async function runCIReview() {
56
56
  log.info(`Project: ${env.projectId} | MR: !${env.mrIid} | Branch: ${env.sourceBranch} → ${env.targetBranch}`);
57
57
  // Run review
58
58
  try {
59
- await reviewMR(config, {
60
- projectId: env.projectId,
61
- mrIid: env.mrIid,
62
- postComments: true, // Always post comments in CI
63
- postErrorComment: config.review.postErrorComment ?? false,
64
- describe: config.review.describe?.enabled ?? false,
65
- postDescription: config.review.describe?.postDescription ?? false,
59
+ await runWorkflow(config, 'gitlab-mr-review', {
60
+ inputs: {
61
+ project: env.projectId,
62
+ mr: String(env.mrIid),
63
+ describe: 'true',
64
+ post: 'true',
65
+ },
66
+ workingDir: projectDir,
66
67
  });
67
68
  log.info('Review complete');
68
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"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"}