@diff-review-system/drs 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/.opencode/agent/describe/pr-describer.md +221 -0
  2. package/.opencode/agent/review/documentation.md +56 -0
  3. package/.opencode/agent/review/performance.md +32 -130
  4. package/.opencode/agent/review/quality.md +36 -104
  5. package/.opencode/agent/review/security.md +32 -94
  6. package/.opencode/agent/review/style.md +26 -10
  7. package/.opencode/agent/review/unified-reviewer.md +74 -0
  8. package/.opencode/opencode.jsonc +4 -41
  9. package/.opencode/tool/write_json_output.ts +24 -0
  10. package/README.md +215 -82
  11. package/dist/ci/runner.d.ts.map +1 -1
  12. package/dist/ci/runner.js +4 -4
  13. package/dist/ci/runner.js.map +1 -1
  14. package/dist/cli/describe-mr.d.ts +11 -0
  15. package/dist/cli/describe-mr.d.ts.map +1 -0
  16. package/dist/cli/describe-mr.js +104 -0
  17. package/dist/cli/describe-mr.js.map +1 -0
  18. package/dist/cli/describe-pr.d.ts +12 -0
  19. package/dist/cli/describe-pr.d.ts.map +1 -0
  20. package/dist/cli/describe-pr.js +105 -0
  21. package/dist/cli/describe-pr.js.map +1 -0
  22. package/dist/cli/index.js +234 -20
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/init.d.ts +1 -1
  25. package/dist/cli/init.d.ts.map +1 -1
  26. package/dist/cli/init.js +337 -120
  27. package/dist/cli/init.js.map +1 -1
  28. package/dist/cli/post-comments.d.ts +15 -0
  29. package/dist/cli/post-comments.d.ts.map +1 -0
  30. package/dist/cli/post-comments.js +216 -0
  31. package/dist/cli/post-comments.js.map +1 -0
  32. package/dist/cli/review-local.d.ts +3 -0
  33. package/dist/cli/review-local.d.ts.map +1 -1
  34. package/dist/cli/review-local.js +46 -63
  35. package/dist/cli/review-local.js.map +1 -1
  36. package/dist/cli/review-mr.d.ts +7 -0
  37. package/dist/cli/review-mr.d.ts.map +1 -1
  38. package/dist/cli/review-mr.js +88 -117
  39. package/dist/cli/review-mr.js.map +1 -1
  40. package/dist/cli/review-pr.d.ts +6 -0
  41. package/dist/cli/review-pr.d.ts.map +1 -1
  42. package/dist/cli/review-pr.js +81 -114
  43. package/dist/cli/review-pr.js.map +1 -1
  44. package/dist/cli/show-changes.d.ts +15 -0
  45. package/dist/cli/show-changes.d.ts.map +1 -0
  46. package/dist/cli/show-changes.js +184 -0
  47. package/dist/cli/show-changes.js.map +1 -0
  48. package/dist/github/client.d.ts +199 -4
  49. package/dist/github/client.d.ts.map +1 -1
  50. package/dist/github/client.js +37 -2
  51. package/dist/github/client.js.map +1 -1
  52. package/dist/github/client.test.d.ts +2 -0
  53. package/dist/github/client.test.d.ts.map +1 -0
  54. package/dist/github/client.test.js +206 -0
  55. package/dist/github/client.test.js.map +1 -0
  56. package/dist/github/platform-adapter.d.ts +31 -0
  57. package/dist/github/platform-adapter.d.ts.map +1 -0
  58. package/dist/github/platform-adapter.js +129 -0
  59. package/dist/github/platform-adapter.js.map +1 -0
  60. package/dist/github/platform-adapter.test.d.ts +2 -0
  61. package/dist/github/platform-adapter.test.d.ts.map +1 -0
  62. package/dist/github/platform-adapter.test.js +40 -0
  63. package/dist/github/platform-adapter.test.js.map +1 -0
  64. package/dist/gitlab/client.d.ts +12 -0
  65. package/dist/gitlab/client.d.ts.map +1 -1
  66. package/dist/gitlab/client.js +19 -1
  67. package/dist/gitlab/client.js.map +1 -1
  68. package/dist/gitlab/diff-parser.test.d.ts +2 -0
  69. package/dist/gitlab/diff-parser.test.d.ts.map +1 -0
  70. package/dist/gitlab/diff-parser.test.js +315 -0
  71. package/dist/gitlab/diff-parser.test.js.map +1 -0
  72. package/dist/gitlab/platform-adapter.d.ts +27 -0
  73. package/dist/gitlab/platform-adapter.d.ts.map +1 -0
  74. package/dist/gitlab/platform-adapter.js +121 -0
  75. package/dist/gitlab/platform-adapter.js.map +1 -0
  76. package/dist/gitlab/platform-adapter.test.d.ts +2 -0
  77. package/dist/gitlab/platform-adapter.test.d.ts.map +1 -0
  78. package/dist/gitlab/platform-adapter.test.js +21 -0
  79. package/dist/gitlab/platform-adapter.test.js.map +1 -0
  80. package/dist/index.test.d.ts +2 -0
  81. package/dist/index.test.d.ts.map +1 -0
  82. package/dist/index.test.js +7 -0
  83. package/dist/index.test.js.map +1 -0
  84. package/dist/lib/change-summary.d.ts +8 -0
  85. package/dist/lib/change-summary.d.ts.map +1 -0
  86. package/dist/lib/change-summary.js +2 -0
  87. package/dist/lib/change-summary.js.map +1 -0
  88. package/dist/lib/code-quality-report.d.ts +44 -0
  89. package/dist/lib/code-quality-report.d.ts.map +1 -0
  90. package/dist/lib/code-quality-report.js +62 -0
  91. package/dist/lib/code-quality-report.js.map +1 -0
  92. package/dist/lib/code-quality-report.test.d.ts +2 -0
  93. package/dist/lib/code-quality-report.test.d.ts.map +1 -0
  94. package/dist/lib/code-quality-report.test.js +327 -0
  95. package/dist/lib/code-quality-report.test.js.map +1 -0
  96. package/dist/{gitlab → lib}/comment-formatter.d.ts +6 -3
  97. package/dist/lib/comment-formatter.d.ts.map +1 -0
  98. package/dist/{gitlab → lib}/comment-formatter.js +63 -16
  99. package/dist/lib/comment-formatter.js.map +1 -0
  100. package/dist/lib/comment-formatter.test.d.ts +2 -0
  101. package/dist/lib/comment-formatter.test.d.ts.map +1 -0
  102. package/dist/lib/comment-formatter.test.js +607 -0
  103. package/dist/lib/comment-formatter.test.js.map +1 -0
  104. package/dist/lib/comment-manager.d.ts +61 -0
  105. package/dist/lib/comment-manager.d.ts.map +1 -0
  106. package/dist/lib/comment-manager.js +91 -0
  107. package/dist/lib/comment-manager.js.map +1 -0
  108. package/dist/lib/comment-manager.test.d.ts +2 -0
  109. package/dist/lib/comment-manager.test.d.ts.map +1 -0
  110. package/dist/lib/comment-manager.test.js +618 -0
  111. package/dist/lib/comment-manager.test.js.map +1 -0
  112. package/dist/lib/comment-poster.d.ts +21 -0
  113. package/dist/lib/comment-poster.d.ts.map +1 -0
  114. package/dist/lib/comment-poster.js +96 -0
  115. package/dist/lib/comment-poster.js.map +1 -0
  116. package/dist/lib/comment-poster.test.d.ts +5 -0
  117. package/dist/lib/comment-poster.test.d.ts.map +1 -0
  118. package/dist/lib/comment-poster.test.js +215 -0
  119. package/dist/lib/comment-poster.test.js.map +1 -0
  120. package/dist/lib/config-model-overrides.test.d.ts +12 -0
  121. package/dist/lib/config-model-overrides.test.d.ts.map +1 -0
  122. package/dist/lib/config-model-overrides.test.js +254 -0
  123. package/dist/lib/config-model-overrides.test.js.map +1 -0
  124. package/dist/lib/config.d.ts +93 -8
  125. package/dist/lib/config.d.ts.map +1 -1
  126. package/dist/lib/config.js +178 -25
  127. package/dist/lib/config.js.map +1 -1
  128. package/dist/lib/config.test.d.ts +2 -0
  129. package/dist/lib/config.test.d.ts.map +1 -0
  130. package/dist/lib/config.test.js +36 -0
  131. package/dist/lib/config.test.js.map +1 -0
  132. package/dist/lib/context-compression.d.ts +19 -0
  133. package/dist/lib/context-compression.d.ts.map +1 -0
  134. package/dist/lib/context-compression.js +170 -0
  135. package/dist/lib/context-compression.js.map +1 -0
  136. package/dist/lib/context-compression.test.d.ts +2 -0
  137. package/dist/lib/context-compression.test.d.ts.map +1 -0
  138. package/dist/lib/context-compression.test.js +33 -0
  139. package/dist/lib/context-compression.test.js.map +1 -0
  140. package/dist/lib/context-loader.d.ts +29 -0
  141. package/dist/lib/context-loader.d.ts.map +1 -0
  142. package/dist/lib/context-loader.js +75 -0
  143. package/dist/lib/context-loader.js.map +1 -0
  144. package/dist/lib/context-loader.test.d.ts +2 -0
  145. package/dist/lib/context-loader.test.d.ts.map +1 -0
  146. package/dist/lib/context-loader.test.js +207 -0
  147. package/dist/lib/context-loader.test.js.map +1 -0
  148. package/dist/lib/describe-core.d.ts +9 -0
  149. package/dist/lib/describe-core.d.ts.map +1 -0
  150. package/dist/lib/describe-core.js +71 -0
  151. package/dist/lib/describe-core.js.map +1 -0
  152. package/dist/lib/describe-core.test.d.ts +2 -0
  153. package/dist/lib/describe-core.test.d.ts.map +1 -0
  154. package/dist/lib/describe-core.test.js +208 -0
  155. package/dist/lib/describe-core.test.js.map +1 -0
  156. package/dist/lib/describe-output-path.test.d.ts +2 -0
  157. package/dist/lib/describe-output-path.test.d.ts.map +1 -0
  158. package/dist/lib/describe-output-path.test.js +51 -0
  159. package/dist/lib/describe-output-path.test.js.map +1 -0
  160. package/dist/lib/describe-parser.d.ts +3 -0
  161. package/dist/lib/describe-parser.d.ts.map +1 -0
  162. package/dist/lib/describe-parser.js +163 -0
  163. package/dist/lib/describe-parser.js.map +1 -0
  164. package/dist/lib/describe-parser.test.d.ts +2 -0
  165. package/dist/lib/describe-parser.test.d.ts.map +1 -0
  166. package/dist/lib/describe-parser.test.js +282 -0
  167. package/dist/lib/describe-parser.test.js.map +1 -0
  168. package/dist/lib/description-executor.d.ts +22 -0
  169. package/dist/lib/description-executor.d.ts.map +1 -0
  170. package/dist/lib/description-executor.js +72 -0
  171. package/dist/lib/description-executor.js.map +1 -0
  172. package/dist/lib/description-formatter.d.ts +37 -0
  173. package/dist/lib/description-formatter.d.ts.map +1 -0
  174. package/dist/lib/description-formatter.js +219 -0
  175. package/dist/lib/description-formatter.js.map +1 -0
  176. package/dist/{gitlab → lib}/diff-parser.d.ts +11 -0
  177. package/dist/lib/diff-parser.d.ts.map +1 -0
  178. package/dist/{gitlab → lib}/diff-parser.js +40 -3
  179. package/dist/lib/diff-parser.js.map +1 -0
  180. package/dist/lib/issue-parser.d.ts +29 -0
  181. package/dist/lib/issue-parser.d.ts.map +1 -0
  182. package/dist/lib/issue-parser.js +153 -0
  183. package/dist/lib/issue-parser.js.map +1 -0
  184. package/dist/lib/issue-parser.test.d.ts +2 -0
  185. package/dist/lib/issue-parser.test.d.ts.map +1 -0
  186. package/dist/lib/issue-parser.test.js +281 -0
  187. package/dist/lib/issue-parser.test.js.map +1 -0
  188. package/dist/lib/json-output-schema.d.ts +207 -0
  189. package/dist/lib/json-output-schema.d.ts.map +1 -0
  190. package/dist/lib/json-output-schema.js +124 -0
  191. package/dist/lib/json-output-schema.js.map +1 -0
  192. package/dist/lib/json-output-schema.test.d.ts +2 -0
  193. package/dist/lib/json-output-schema.test.d.ts.map +1 -0
  194. package/dist/lib/json-output-schema.test.js +92 -0
  195. package/dist/lib/json-output-schema.test.js.map +1 -0
  196. package/dist/lib/json-output.d.ts +43 -0
  197. package/dist/lib/json-output.d.ts.map +1 -0
  198. package/dist/lib/json-output.js +34 -0
  199. package/dist/lib/json-output.js.map +1 -0
  200. package/dist/lib/output-paths.d.ts +6 -0
  201. package/dist/lib/output-paths.d.ts.map +1 -0
  202. package/dist/lib/output-paths.js +5 -0
  203. package/dist/lib/output-paths.js.map +1 -0
  204. package/dist/lib/platform-client.d.ts +130 -0
  205. package/dist/lib/platform-client.d.ts.map +1 -0
  206. package/dist/lib/platform-client.js +8 -0
  207. package/dist/lib/platform-client.js.map +1 -0
  208. package/dist/lib/position-validator.d.ts +36 -0
  209. package/dist/lib/position-validator.d.ts.map +1 -0
  210. package/dist/lib/position-validator.js +43 -0
  211. package/dist/lib/position-validator.js.map +1 -0
  212. package/dist/lib/repository-validator.d.ts +52 -0
  213. package/dist/lib/repository-validator.d.ts.map +1 -0
  214. package/dist/lib/repository-validator.js +219 -0
  215. package/dist/lib/repository-validator.js.map +1 -0
  216. package/dist/lib/repository-validator.test.d.ts +5 -0
  217. package/dist/lib/repository-validator.test.d.ts.map +1 -0
  218. package/dist/lib/repository-validator.test.js +341 -0
  219. package/dist/lib/repository-validator.test.js.map +1 -0
  220. package/dist/lib/review-core.d.ts +66 -0
  221. package/dist/lib/review-core.d.ts.map +1 -0
  222. package/dist/lib/review-core.js +449 -0
  223. package/dist/lib/review-core.js.map +1 -0
  224. package/dist/lib/review-core.test.d.ts +2 -0
  225. package/dist/lib/review-core.test.d.ts.map +1 -0
  226. package/dist/lib/review-core.test.js +552 -0
  227. package/dist/lib/review-core.test.js.map +1 -0
  228. package/dist/lib/review-orchestrator.d.ts +77 -0
  229. package/dist/lib/review-orchestrator.d.ts.map +1 -0
  230. package/dist/lib/review-orchestrator.js +124 -0
  231. package/dist/lib/review-orchestrator.js.map +1 -0
  232. package/dist/lib/review-orchestrator.test.d.ts +2 -0
  233. package/dist/lib/review-orchestrator.test.d.ts.map +1 -0
  234. package/dist/lib/review-orchestrator.test.js +413 -0
  235. package/dist/lib/review-orchestrator.test.js.map +1 -0
  236. package/dist/lib/review-output-path.test.d.ts +2 -0
  237. package/dist/lib/review-output-path.test.d.ts.map +1 -0
  238. package/dist/lib/review-output-path.test.js +83 -0
  239. package/dist/lib/review-output-path.test.js.map +1 -0
  240. package/dist/lib/review-parser.d.ts +2 -0
  241. package/dist/lib/review-parser.d.ts.map +1 -0
  242. package/dist/lib/review-parser.js +100 -0
  243. package/dist/lib/review-parser.js.map +1 -0
  244. package/dist/lib/unified-review-executor.d.ts +49 -0
  245. package/dist/lib/unified-review-executor.d.ts.map +1 -0
  246. package/dist/lib/unified-review-executor.js +158 -0
  247. package/dist/lib/unified-review-executor.js.map +1 -0
  248. package/dist/lib/unified-review-executor.test.d.ts +5 -0
  249. package/dist/lib/unified-review-executor.test.d.ts.map +1 -0
  250. package/dist/lib/unified-review-executor.test.js +344 -0
  251. package/dist/lib/unified-review-executor.test.js.map +1 -0
  252. package/dist/lib/write-json-output.d.ts +13 -0
  253. package/dist/lib/write-json-output.d.ts.map +1 -0
  254. package/dist/lib/write-json-output.js +37 -0
  255. package/dist/lib/write-json-output.js.map +1 -0
  256. package/dist/opencode/agent-loader.d.ts +3 -4
  257. package/dist/opencode/agent-loader.d.ts.map +1 -1
  258. package/dist/opencode/agent-loader.js +51 -42
  259. package/dist/opencode/agent-loader.js.map +1 -1
  260. package/dist/opencode/agent-skill-overlay.d.ts +11 -0
  261. package/dist/opencode/agent-skill-overlay.d.ts.map +1 -0
  262. package/dist/opencode/agent-skill-overlay.js +164 -0
  263. package/dist/opencode/agent-skill-overlay.js.map +1 -0
  264. package/dist/opencode/client.d.ts +14 -5
  265. package/dist/opencode/client.d.ts.map +1 -1
  266. package/dist/opencode/client.js +311 -32
  267. package/dist/opencode/client.js.map +1 -1
  268. package/dist/opencode/client.test.d.ts +2 -0
  269. package/dist/opencode/client.test.d.ts.map +1 -0
  270. package/dist/opencode/client.test.js +317 -0
  271. package/dist/opencode/client.test.js.map +1 -0
  272. package/dist/opencode/opencode-paths.d.ts +2 -0
  273. package/dist/opencode/opencode-paths.d.ts.map +1 -0
  274. package/dist/opencode/opencode-paths.js +7 -0
  275. package/dist/opencode/opencode-paths.js.map +1 -0
  276. package/dist/opencode/skill-loader.d.ts +6 -0
  277. package/dist/opencode/skill-loader.d.ts.map +1 -0
  278. package/dist/opencode/skill-loader.js +36 -0
  279. package/dist/opencode/skill-loader.js.map +1 -0
  280. package/package.json +29 -20
  281. package/.opencode/agent/github-reviewer.md +0 -62
  282. package/.opencode/agent/gitlab-reviewer.md +0 -62
  283. package/.opencode/agent/local-reviewer.md +0 -71
  284. package/dist/gitlab/comment-formatter.d.ts.map +0 -1
  285. package/dist/gitlab/comment-formatter.js.map +0 -1
  286. package/dist/gitlab/diff-parser.d.ts.map +0 -1
  287. package/dist/gitlab/diff-parser.js.map +0 -1
package/README.md CHANGED
@@ -1,32 +1,45 @@
1
- # DRS - AI Code Review Bot
1
+ # DRS - Diff Review System
2
2
 
3
- An automated code review bot for GitLab Merge Requests and GitHub Pull Requests powered by OpenCode SDK and Claude AI.
3
+ **Intelligent Code Review Platform for GitLab and GitHub**
4
+
5
+ Enterprise-grade automated code review for Merge Requests and Pull Requests, powered by OpenCode SDK and Claude.
4
6
 
5
7
  ## Features
6
8
 
7
- - **AI-Powered Reviews**: Comprehensive code analysis using Claude's latest models
8
- - **Specialized Agents**: Security, quality, style, and performance review experts
9
- - **Multi-Platform Support**: Works with both GitLab MRs and GitHub PRs
10
- - **Multiple Deployment Modes**: CI/CD pipelines, webhook server, or local CLI
11
- - **Customizable**: Override agents with project-specific rules
12
- - **Native Integration**: Full API integration for both GitLab and GitHub
9
+ - **Comprehensive Analysis**: Advanced code review using Claude's latest models
10
+ - **Specialized Review Domains**: Security, quality, style, performance, and documentation analysis
11
+ - **Multi-Platform Support**: Native integration with GitLab and GitHub
12
+ - **Flexible Deployment**: CI/CD pipelines or local CLI
13
+ - **Review Modes**: Multi-agent deep review, single-pass unified review, and hybrid escalation
14
+ - **Unified Reviewer**: One-pass JSON output with severity-tagged findings across domains
15
+ - **PR/MR Descriptions**: Optional auto-generated descriptions and labels for pull requests
16
+ - **Highly Customizable**: Configure review agents with project-specific rules
17
+ - **Deep Integration**: Full API support for both GitLab and GitHub platforms
13
18
 
14
19
  ## Quick Start
15
20
 
16
- ### 1. Install
21
+ ### 1. Prerequisites
22
+
23
+ Install OpenCode CLI (required for in-process server mode):
24
+
25
+ ```bash
26
+ npm install -g opencode-ai
27
+ ```
28
+
29
+ ### 2. Install DRS
17
30
 
18
31
  ```bash
19
32
  npm install -g @diff-review-system/drs
20
33
  ```
21
34
 
22
- ### 2. Initialize Project
35
+ ### 3. Initialize Project
23
36
 
24
37
  ```bash
25
38
  cd your-project
26
39
  drs init
27
40
  ```
28
41
 
29
- ### 3. Configure Environment
42
+ ### 4. Configure Environment
30
43
 
31
44
  ```bash
32
45
  # Copy example env file
@@ -36,12 +49,16 @@ cp .env.example .env
36
49
  # - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
37
50
  # - GITHUB_TOKEN: Your GitHub access token (for GitHub PRs)
38
51
  # - OPENCODE_SERVER: URL of your OpenCode instance (optional - will start in-process if not set)
39
- # - ANTHROPIC_API_KEY: Your Anthropic API key for Claude
52
+ # - Provider API Key: Set the API key for your chosen model provider
53
+ # - ANTHROPIC_API_KEY for Claude models (e.g., anthropic/claude-opus-4-5-20251101)
54
+ # - ZHIPU_API_KEY for GLM models (e.g., zhipuai/glm-4.7)
55
+ # - OPENAI_API_KEY for OpenAI models (e.g., openai/gpt-4)
56
+ # - See .env.example for all supported providers
40
57
  ```
41
58
 
42
59
  **Note**: `OPENCODE_SERVER` is optional. If not provided, DRS will automatically start an OpenCode server in-process. For production deployments or when sharing across multiple tools, you can run a dedicated OpenCode server and set the URL.
43
60
 
44
- ### 4. Review Local Changes
61
+ ### 5. Review Local Changes
45
62
 
46
63
  ```bash
47
64
  # Review unstaged changes
@@ -67,8 +84,41 @@ drs review-local
67
84
  # Review specific GitLab MR
68
85
  drs review-mr --project my-org/my-repo --mr 123 --post-comments
69
86
 
87
+ # Review GitLab MR and auto-generate a description (optionally post it)
88
+ drs review-mr --project my-org/my-repo --mr 123 --describe
89
+ drs review-mr --project my-org/my-repo --mr 123 --describe --post-description
90
+
91
+ # Review GitLab MR and generate code quality report
92
+ drs review-mr --project my-org/my-repo --mr 123 --code-quality-report gl-code-quality-report.json
93
+
70
94
  # Review specific GitHub PR
71
95
  drs review-pr --owner octocat --repo hello-world --pr 456 --post-comments
96
+
97
+ # Review GitHub PR and auto-generate a description (optionally post it)
98
+ drs review-pr --owner octocat --repo hello-world --pr 456 --describe
99
+ drs review-pr --owner octocat --repo hello-world --pr 456 --describe --post-description
100
+
101
+ # Override base branch used for diff hints
102
+ drs review-pr --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
103
+
104
+ # Generate review JSON first, then post comments after manual review
105
+ drs review-pr --owner octocat --repo hello-world --pr 456 -o review.json
106
+ drs post-comments --input review.json --owner octocat --repo hello-world --pr 456
107
+
108
+ # Show the diff context passed to agents
109
+ drs show-changes --owner octocat --repo hello-world --pr 456
110
+
111
+ # Show diff context for a single file
112
+ drs show-changes --owner octocat --repo hello-world --pr 456 --file src/app.ts
113
+
114
+ # Show diff context using a specific base branch
115
+ drs show-changes --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
116
+
117
+ # Generate PR/MR descriptions on demand
118
+ drs describe-pr --owner octocat --repo hello-world --pr 456
119
+ drs describe-pr --owner octocat --repo hello-world --pr 456 --post-description
120
+ drs describe-mr --project my-org/my-repo --mr 123
121
+ drs describe-mr --project my-org/my-repo --mr 123 --post-description
72
122
  ```
73
123
 
74
124
  ### Mode 2: GitLab CI/CD
@@ -77,98 +127,161 @@ Add to your `.gitlab-ci.yml`:
77
127
 
78
128
  ```yaml
79
129
  include:
80
- - remote: 'https://raw.githubusercontent.com/your-org/drs/main/templates/gitlab-ci.yml'
130
+ - remote: 'https://raw.githubusercontent.com/manojlds/drs/main/src/ci/gitlab-ci.template.yml'
81
131
 
82
132
  ai_review:
83
133
  extends: .drs_review
84
- variables:
85
- OPENCODE_SERVER: "http://opencode.internal:3000"
134
+ stage: review
86
135
  ```
87
136
 
137
+ **See [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md)** for:
138
+ - Using the official OpenCode container (`ghcr.io/anomalyco/opencode`)
139
+ - Parallel pipeline strategies (child pipelines, DAG with needs)
140
+ - Complete examples that don't block your main pipeline
141
+
88
142
  ### Mode 3: GitHub Actions
89
143
 
90
- **Note**: GitHub Actions requires an OpenCode server to be accessible. You must either:
91
- - Set up a remote OpenCode server and configure `OPENCODE_SERVER` secret
92
- - Or install OpenCode CLI in the workflow (see below)
144
+ DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-review.yml` with built-in protection against external PR abuse.
93
145
 
94
- Add to `.github/workflows/pr-review.yml`:
146
+ **Security Features**:
147
+ - āœ… **Auto-review for trusted contributors** (repository members/collaborators)
148
+ - āøļø **Manual approval required** for external contributors
149
+ - šŸ”’ **Cost protection** prevents spam PRs from draining API credits
150
+ - šŸ·ļø **Label-based approval** with `safe-to-review` label
95
151
 
96
- ```yaml
97
- name: DRS PR Review
98
-
99
- on:
100
- pull_request:
101
- types: [opened, synchronize, reopened]
102
-
103
- jobs:
104
- review:
105
- runs-on: ubuntu-latest
106
- permissions:
107
- contents: read
108
- pull-requests: write
109
-
110
- steps:
111
- - uses: actions/checkout@v4
112
- - uses: actions/setup-node@v4
113
- with:
114
- node-version: '20'
115
-
116
- - name: Build from source
117
- run: |
118
- npm ci
119
- npm run build
120
-
121
- - name: Review Pull Request
122
- env:
123
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
124
- ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
125
- OPENCODE_SERVER: ${{ secrets.OPENCODE_SERVER }} # Required: Set this in repository secrets
126
- run: |
127
- node dist/cli/index.js review-pr \
128
- --owner ${{ github.event.repository.owner.login }} \
129
- --repo ${{ github.event.repository.name }} \
130
- --pr ${{ github.event.pull_request.number }} \
131
- --post-comments
132
- ```
152
+ **Quick Setup**:
153
+
154
+ 1. **Configure API Keys** in repository Settings → Secrets:
155
+ - `ANTHROPIC_API_KEY` (for Claude models), or
156
+ - `OPENCODE_ZEN_API_KEY` (for OpenCode Zen), or
157
+ - `ZHIPU_API_KEY` (for ZhipuAI GLM models), or
158
+ - `OPENAI_API_KEY` (for OpenAI models)
159
+
160
+ 2. **Set up External PR Protection** (Important!):
161
+ - Create GitHub Environment: `external-pr-review`
162
+ - Add required reviewers (maintainers)
163
+ - Create `safe-to-review` label
133
164
 
134
- **Required Secrets**:
135
- - `ANTHROPIC_API_KEY`: Your Anthropic API key
136
- - `OPENCODE_SERVER`: URL of your OpenCode server (e.g., `http://opencode.yourcompany.com:3000`)
165
+ **See [GitHub Actions Integration Guide](docs/GITHUB_ACTIONS_INTEGRATION.md)** for:
166
+ - Complete setup instructions
167
+ - External PR security configuration
168
+ - Model configuration options
169
+ - Troubleshooting tips
137
170
 
138
- ### Mode 4: Webhook Server
171
+ **See [External PR Security Guide](docs/EXTERNAL_PR_SECURITY.md)** for:
172
+ - Detailed security setup
173
+ - Cost protection mechanisms
174
+ - Maintainer workflow
175
+ - Attack prevention strategies
139
176
 
140
- Deploy as a standalone service:
177
+ ## GitLab Code Quality Reports
178
+
179
+ 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.
180
+
181
+ ### Why Use Code Quality Reports?
182
+
183
+ **Benefits:**
184
+ - **Native GitLab Integration**: Issues appear in the MR widget and Changes tab
185
+ - **Better UX**: Issues marked with symbols in the code gutter
186
+ - **All Severities**: Include MEDIUM/LOW issues without cluttering MR discussions
187
+ - **Historical Tracking**: GitLab tracks quality trends over time
188
+ - **Non-intrusive**: Doesn't create discussion threads
189
+
190
+ **When to Use:**
191
+ - Use **inline comments** (`--post-comments`) for critical issues requiring discussion
192
+ - Use **code quality reports** (`--code-quality-report`) for comprehensive static analysis
193
+ - Use **both together** for maximum visibility
194
+
195
+ ### CLI Usage
141
196
 
142
197
  ```bash
143
- # Using Docker Compose
144
- cd examples
145
- docker-compose up -d
198
+ # Generate code quality report only
199
+ drs review-mr --project my-org/my-repo --mr 123 \
200
+ --code-quality-report gl-code-quality-report.json
201
+
202
+ # Use both comments and code quality report
203
+ drs review-mr --project my-org/my-repo --mr 123 \
204
+ --post-comments \
205
+ --code-quality-report gl-code-quality-report.json
206
+ ```
207
+
208
+ ### GitLab CI Integration
209
+
210
+ Add to your `.gitlab-ci.yml`:
211
+
212
+ ```yaml
213
+ code_review:
214
+ stage: review
215
+ image: node:20-alpine
216
+ before_script:
217
+ - npm install -g @diff-review-system/drs opencode-ai
218
+ script:
219
+ - drs review-mr --project $CI_PROJECT_PATH --mr $CI_MERGE_REQUEST_IID
220
+ --code-quality-report gl-code-quality-report.json
221
+ artifacts:
222
+ reports:
223
+ codequality: gl-code-quality-report.json
224
+ expire_in: 1 week
225
+ only:
226
+ - merge_requests
227
+ ```
146
228
 
147
- # Configure webhooks:
148
- # GitLab: http://your-server:8080/webhook/gitlab (Merge request events, Comments)
149
- # GitHub: http://your-server:8080/webhook/github (Pull request events)
229
+ The code quality report will appear in:
230
+ 1. **MR Overview**: Widget showing new/resolved issues
231
+ 2. **Changes Tab**: Gutter symbols on problematic lines
232
+ 3. **Pipeline Tab**: Quality trend graphs
233
+
234
+ ### Report Format
235
+
236
+ DRS generates reports in GitLab's CodeClimate-compatible format:
237
+
238
+ ```json
239
+ [
240
+ {
241
+ "description": "Query uses string concatenation. Use parameterized queries instead.",
242
+ "check_name": "drs-security",
243
+ "fingerprint": "7815696ecbf1c96e6894b779456d330e",
244
+ "severity": "blocker",
245
+ "location": {
246
+ "path": "src/api/users.ts",
247
+ "lines": { "begin": 42 }
248
+ }
249
+ }
250
+ ]
150
251
  ```
151
252
 
253
+ **Severity Mapping:**
254
+ - CRITICAL → blocker
255
+ - HIGH → critical
256
+ - MEDIUM → major
257
+ - LOW → minor
258
+
259
+ For more details, see [GitLab Code Quality Documentation](https://docs.gitlab.com/ci/testing/code_quality/).
260
+
152
261
  ## OpenCode Server Configuration
153
262
 
154
263
  DRS supports two modes of OpenCode server operation:
155
264
 
156
265
  ### In-Process Server (Default)
157
266
 
158
- If `OPENCODE_SERVER` is not set, DRS will automatically start an OpenCode server within the same process:
267
+ If `OPENCODE_SERVER` is not set, DRS will automatically start an OpenCode server within the same process. **Note**: This still requires the OpenCode CLI to be installed globally.
159
268
 
160
269
  ```bash
161
- # No server configuration needed
270
+ # Install OpenCode CLI first (required)
271
+ npm install -g opencode-ai
272
+
273
+ # Then run DRS (server starts automatically)
162
274
  drs review-local
163
275
  ```
164
276
 
165
277
  **Pros:**
166
- - Zero configuration required
278
+ - Minimal configuration required (just install CLI)
167
279
  - Automatic startup/shutdown
168
280
  - Simpler deployment
169
281
  - Lower latency
170
282
 
171
283
  **Cons:**
284
+ - Requires OpenCode CLI installation
172
285
  - Server lifetime tied to CLI process
173
286
  - Cannot share across multiple tools
174
287
  - Uses process resources
@@ -200,9 +313,6 @@ DRS uses OpenCode SDK with markdown-based agent definitions:
200
313
  ```
201
314
  .opencode/
202
315
  ā”œā”€ā”€ agent/
203
- │ ā”œā”€ā”€ gitlab-reviewer.md # GitLab MR orchestrator
204
- │ ā”œā”€ā”€ github-reviewer.md # GitHub PR orchestrator
205
- │ ā”œā”€ā”€ local-reviewer.md # Local diff reviewer
206
316
  │ └── review/
207
317
  │ ā”œā”€ā”€ security.md # Security specialist
208
318
  │ ā”œā”€ā”€ quality.md # Code quality expert
@@ -219,8 +329,8 @@ Create custom agents in your project:
219
329
 
220
330
  ```bash
221
331
  # Create custom security agent
222
- mkdir -p .drs/agents
223
- cat > .drs/agents/security.md << 'EOF'
332
+ mkdir -p .drs/agents/security
333
+ cat > .drs/agents/security/agent.md << 'EOF'
224
334
  ---
225
335
  description: Custom security reviewer
226
336
  model: opencode/claude-sonnet-4-5
@@ -245,11 +355,22 @@ review:
245
355
  ignorePatterns:
246
356
  - "*.test.ts"
247
357
  - "*.md"
358
+ describe:
359
+ enabled: true
360
+ postDescription: false
361
+
362
+ describe:
363
+ model: opencode/glm-4.7-free
248
364
  ```
249
365
 
250
- ## Review Agents
366
+ Notes:
367
+ - `review.describe` controls auto-description when running `review-mr` or `review-pr`.
368
+ - CLI flags override config: `--describe` / `--skip-describe` and `--post-description` / `--skip-post-description`.
369
+ - `describe.model` is used by `describe-mr`/`describe-pr` and by review-driven descriptions.
370
+
371
+ ## Review Domains
251
372
 
252
- ### Security Agent
373
+ ### Security Analysis
253
374
 
254
375
  Focuses on:
255
376
  - OWASP Top 10 vulnerabilities
@@ -258,7 +379,7 @@ Focuses on:
258
379
  - Sensitive data exposure
259
380
  - Security misconfigurations
260
381
 
261
- ### Quality Agent
382
+ ### Quality Analysis
262
383
 
263
384
  Reviews:
264
385
  - Design patterns and anti-patterns
@@ -267,7 +388,7 @@ Reviews:
267
388
  - Error handling
268
389
  - Code smells
269
390
 
270
- ### Style Agent
391
+ ### Style Analysis
271
392
 
272
393
  Checks:
273
394
  - Naming conventions
@@ -276,7 +397,7 @@ Checks:
276
397
  - Type safety (TypeScript)
277
398
  - Unused code
278
399
 
279
- ### Performance Agent
400
+ ### Performance Analysis
280
401
 
281
402
  Analyzes:
282
403
  - Algorithmic complexity
@@ -293,7 +414,11 @@ Analyzes:
293
414
  # Required (depending on platform)
294
415
  GITLAB_TOKEN=glpat-xxx # For GitLab MR reviews
295
416
  GITHUB_TOKEN=ghp-xxx # For GitHub PR reviews
296
- ANTHROPIC_API_KEY=sk-ant-xxx # For Claude AI
417
+
418
+ # Provider API Keys (set the one for your chosen model provider)
419
+ ANTHROPIC_API_KEY=sk-ant-xxx # For Anthropic Claude models
420
+ ZHIPU_API_KEY=xxx # For ZhipuAI GLM models
421
+ OPENAI_API_KEY=sk-xxx # For OpenAI models
297
422
 
298
423
  # Optional
299
424
  OPENCODE_SERVER=http://localhost:3000 # Leave empty to start in-process server
@@ -317,6 +442,10 @@ See the `examples/` directory for:
317
442
 
318
443
  ## Development
319
444
 
445
+ For comprehensive local development and testing instructions, see [DEVELOPMENT.md](DEVELOPMENT.md).
446
+
447
+ Quick start:
448
+
320
449
  ```bash
321
450
  # Install dependencies
322
451
  npm install
@@ -334,6 +463,7 @@ npm run dev
334
463
  ## Requirements
335
464
 
336
465
  - Node.js 20+
466
+ - OpenCode CLI (`npm install -g opencode-ai`) - Required even for in-process mode
337
467
  - Anthropic API key (for Claude AI)
338
468
  - GitLab access token (for GitLab MR reviews)
339
469
  - GitHub access token (for GitHub PR reviews)
@@ -346,8 +476,11 @@ Apache-2.0
346
476
 
347
477
  ## Documentation
348
478
 
479
+ - [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md) - Complete guide for GitLab CI/CD setup
480
+ - [Development Guide](DEVELOPMENT.md) - Local development and testing guide
349
481
  - [Design Document](DESIGN.md) - Original design using Claude Agent SDK
350
482
  - [Architecture Document](ARCHITECTURE.md) - OpenCode SDK architecture
483
+ - [Publishing Guide](PUBLISHING_SETUP.md) - How to publish to npm
351
484
  - [OpenCode Documentation](https://opencode.ai/docs)
352
485
  - [GitLab API](https://docs.gitlab.com/ee/api/)
353
486
 
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAIA,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,CAuDjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAM9B"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAIA,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,CA4DjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
package/dist/ci/runner.js CHANGED
@@ -24,7 +24,7 @@ export function detectCIEnvironment() {
24
24
  * Run review in CI/CD environment
25
25
  */
26
26
  export async function runCIReview() {
27
- console.log(chalk.bold.cyan('\nšŸ¤– DRS CI/CD Review Runner\n'));
27
+ console.log(chalk.bold.cyan('\nšŸ“‹ DRS | CI/CD Analysis Runner\n'));
28
28
  // Detect environment
29
29
  const env = detectCIEnvironment();
30
30
  if (env.platform === 'unknown') {
@@ -62,6 +62,8 @@ export async function runCIReview() {
62
62
  projectId: env.projectId,
63
63
  mrIid: env.mrIid,
64
64
  postComments: true, // Always post comments in CI
65
+ describe: config.review.describe?.enabled ?? false,
66
+ postDescription: config.review.describe?.postDescription ?? false,
65
67
  });
66
68
  console.log(chalk.green.bold('\nāœ“ Review complete\n'));
67
69
  }
@@ -75,8 +77,6 @@ export async function runCIReview() {
75
77
  * Check if running in CI environment
76
78
  */
77
79
  export function isCI() {
78
- return !!(process.env.CI ||
79
- process.env.GITLAB_CI ||
80
- process.env.GITHUB_ACTIONS);
80
+ return !!(process.env.CI || process.env.GITLAB_CI || process.env.GITHUB_ACTIONS);
81
81
  }
82
82
  //# sourceMappingURL=runner.js.map
@@ -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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"}
@@ -0,0 +1,11 @@
1
+ import { type DRSConfig } from '../lib/config.js';
2
+ export interface DescribeMROptions {
3
+ projectId: string;
4
+ mrIid: number;
5
+ postDescription?: boolean;
6
+ outputPath?: string;
7
+ jsonOutput?: boolean;
8
+ debug?: boolean;
9
+ }
10
+ export declare function describeMR(config: DRSConfig, options: DescribeMROptions): Promise<void>;
11
+ //# sourceMappingURL=describe-mr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-mr.d.ts","sourceRoot":"","sources":["../../src/cli/describe-mr.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe7E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,iBA4H7E"}
@@ -0,0 +1,104 @@
1
+ import chalk from 'chalk';
2
+ import { getDescriberModelOverride } from '../lib/config.js';
3
+ import { createGitLabClient } from '../gitlab/client.js';
4
+ import { GitLabPlatformAdapter } from '../gitlab/platform-adapter.js';
5
+ import { createOpencodeClientInstance } from '../opencode/client.js';
6
+ import { buildDescribeInstructions } from '../lib/describe-core.js';
7
+ import { loadGlobalContext } from '../lib/context-loader.js';
8
+ import { displayDescription, normalizeDescription, postDescription, } from '../lib/description-formatter.js';
9
+ import { compressFilesWithDiffs, formatCompressionSummary } from '../lib/context-compression.js';
10
+ import { parseDescribeOutput } from '../lib/describe-parser.js';
11
+ export async function describeMR(config, options) {
12
+ console.log(chalk.bold.blue('\nšŸ” Generating MR Description\n'));
13
+ // Initialize GitLab client
14
+ const gitlabClient = createGitLabClient();
15
+ const platformAdapter = new GitLabPlatformAdapter(gitlabClient);
16
+ // Fetch MR files
17
+ console.log(chalk.dim(`Fetching MR !${options.mrIid} from project ${options.projectId}...`));
18
+ const files = await platformAdapter.getChangedFiles(options.projectId, options.mrIid);
19
+ console.log(chalk.dim(`Found ${files.length} changed files\n`));
20
+ // Build context for the describer agent
21
+ const label = `MR !${options.mrIid}`;
22
+ const filesWithDiffs = files.map((file) => ({
23
+ filename: file.filename,
24
+ patch: file.patch,
25
+ }));
26
+ const compression = compressFilesWithDiffs(filesWithDiffs, config.contextCompression);
27
+ const compressionSummary = formatCompressionSummary(compression);
28
+ if (compressionSummary) {
29
+ console.log(chalk.yellow('⚠ Diff content trimmed to fit token budget.\n'));
30
+ }
31
+ const includeProjectContext = config.describe?.includeProjectContext ?? true;
32
+ const projectContext = includeProjectContext ? loadGlobalContext() : null;
33
+ const instructions = buildDescribeInstructions(label, compression.files, compressionSummary, projectContext ?? undefined);
34
+ if (options.debug) {
35
+ console.log(chalk.yellow('\n=== Agent Instructions ==='));
36
+ console.log(instructions);
37
+ console.log(chalk.yellow('=== End Instructions ===\n'));
38
+ }
39
+ // Initialize OpenCode client with model overrides
40
+ const modelOverrides = getDescriberModelOverride(config);
41
+ const opencode = await createOpencodeClientInstance({
42
+ baseUrl: config.opencode.serverUrl ?? undefined,
43
+ directory: process.cwd(),
44
+ modelOverrides,
45
+ provider: config.opencode.provider,
46
+ debug: options.debug,
47
+ });
48
+ try {
49
+ console.log(chalk.dim('Running MR describer agent...\n'));
50
+ // Run the describer agent
51
+ const session = await opencode.createSession({
52
+ agent: 'describe/pr-describer',
53
+ message: instructions,
54
+ });
55
+ // Collect all assistant messages from the session
56
+ let fullResponse = '';
57
+ for await (const message of opencode.streamMessages(session.id)) {
58
+ if (message.role === 'assistant') {
59
+ fullResponse += message.content;
60
+ }
61
+ }
62
+ // Parse the JSON output from the agent
63
+ let description;
64
+ try {
65
+ description = await parseDescribeOutput(process.cwd(), options.debug, fullResponse);
66
+ }
67
+ catch (parseError) {
68
+ console.error(chalk.red('Failed to parse agent output as JSON'));
69
+ console.log(chalk.dim('Agent output:'), fullResponse);
70
+ const reason = parseError instanceof Error ? `: ${parseError.message}` : '';
71
+ throw new Error(`Agent did not return valid JSON output${reason}`);
72
+ }
73
+ let normalizedDescription;
74
+ try {
75
+ normalizedDescription = normalizeDescription(description);
76
+ }
77
+ catch (validationError) {
78
+ console.error(chalk.red('Agent output did not match expected description schema'));
79
+ console.log(chalk.dim('Agent output:'), fullResponse);
80
+ throw validationError;
81
+ }
82
+ // Display the description
83
+ displayDescription(normalizedDescription, 'MR');
84
+ // Save to JSON file if requested
85
+ if (options.outputPath) {
86
+ const fs = await import('fs/promises');
87
+ await fs.writeFile(options.outputPath, JSON.stringify(normalizedDescription, null, 2), 'utf-8');
88
+ console.log(chalk.green(`\nāœ“ Description saved to ${options.outputPath}`));
89
+ }
90
+ // Output JSON if requested
91
+ if (options.jsonOutput) {
92
+ console.log('\n' + JSON.stringify(normalizedDescription, null, 2));
93
+ }
94
+ // Post description to MR if requested
95
+ if (options.postDescription) {
96
+ await postDescription(platformAdapter, options.projectId, options.mrIid, normalizedDescription, 'MR');
97
+ }
98
+ console.log(chalk.green('\nāœ“ MR description generated successfully\n'));
99
+ }
100
+ finally {
101
+ await opencode.shutdown();
102
+ }
103
+ }
104
+ //# sourceMappingURL=describe-mr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-mr.js","sourceRoot":"","sources":["../../src/cli/describe-mr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type DRSConfig } from '../lib/config.js';
2
+ export interface DescribePROptions {
3
+ owner: string;
4
+ repo: string;
5
+ prNumber: number;
6
+ postDescription?: boolean;
7
+ outputPath?: string;
8
+ jsonOutput?: boolean;
9
+ debug?: boolean;
10
+ }
11
+ export declare function describePR(config: DRSConfig, options: DescribePROptions): Promise<void>;
12
+ //# sourceMappingURL=describe-pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-pr.d.ts","sourceRoot":"","sources":["../../src/cli/describe-pr.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe7E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,iBA+H7E"}