@diff-review-system/drs 2.2.1 → 3.0.0-rc.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 (240) hide show
  1. package/README.md +228 -92
  2. package/dist/ci/runner.d.ts.map +1 -1
  3. package/dist/ci/runner.js +19 -22
  4. package/dist/ci/runner.js.map +1 -1
  5. package/dist/cli/describe-mr.d.ts.map +1 -1
  6. package/dist/cli/describe-mr.js +39 -20
  7. package/dist/cli/describe-mr.js.map +1 -1
  8. package/dist/cli/describe-pr.d.ts.map +1 -1
  9. package/dist/cli/describe-pr.js +39 -20
  10. package/dist/cli/describe-pr.js.map +1 -1
  11. package/dist/cli/index.js +11 -7
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/init.d.ts.map +1 -1
  14. package/dist/cli/init.js +30 -2
  15. package/dist/cli/init.js.map +1 -1
  16. package/dist/cli/post-comments.d.ts.map +1 -1
  17. package/dist/cli/post-comments.js +5 -5
  18. package/dist/cli/post-comments.js.map +1 -1
  19. package/dist/cli/review-local.d.ts.map +1 -1
  20. package/dist/cli/review-local.integration.test.d.ts +2 -0
  21. package/dist/cli/review-local.integration.test.d.ts.map +1 -0
  22. package/dist/cli/review-local.integration.test.js +343 -0
  23. package/dist/cli/review-local.integration.test.js.map +1 -0
  24. package/dist/cli/review-local.js +5 -4
  25. package/dist/cli/review-local.js.map +1 -1
  26. package/dist/cli/review-local.live.e2e.test.d.ts +2 -0
  27. package/dist/cli/review-local.live.e2e.test.d.ts.map +1 -0
  28. package/dist/cli/review-local.live.e2e.test.js +154 -0
  29. package/dist/cli/review-local.live.e2e.test.js.map +1 -0
  30. package/dist/cli/review-local.test.d.ts +2 -0
  31. package/dist/cli/review-local.test.d.ts.map +1 -0
  32. package/dist/cli/review-local.test.js +164 -0
  33. package/dist/cli/review-local.test.js.map +1 -0
  34. package/dist/cli/review-mr.d.ts +1 -1
  35. package/dist/cli/review-mr.d.ts.map +1 -1
  36. package/dist/cli/review-mr.js +92 -17
  37. package/dist/cli/review-mr.js.map +1 -1
  38. package/dist/cli/review-mr.test.d.ts +2 -0
  39. package/dist/cli/review-mr.test.d.ts.map +1 -0
  40. package/dist/cli/review-mr.test.js +142 -0
  41. package/dist/cli/review-mr.test.js.map +1 -0
  42. package/dist/cli/review-pr.d.ts +1 -1
  43. package/dist/cli/review-pr.d.ts.map +1 -1
  44. package/dist/cli/review-pr.js +96 -13
  45. package/dist/cli/review-pr.js.map +1 -1
  46. package/dist/cli/review-pr.test.d.ts +2 -0
  47. package/dist/cli/review-pr.test.d.ts.map +1 -0
  48. package/dist/cli/review-pr.test.js +137 -0
  49. package/dist/cli/review-pr.test.js.map +1 -0
  50. package/dist/cli/show-changes.js +4 -4
  51. package/dist/github/platform-adapter.js +2 -2
  52. package/dist/gitlab/client.js +1 -1
  53. package/dist/lib/code-quality-report.js +1 -1
  54. package/dist/lib/comment-formatter.d.ts +2 -1
  55. package/dist/lib/comment-formatter.d.ts.map +1 -1
  56. package/dist/lib/comment-formatter.js +33 -1
  57. package/dist/lib/comment-formatter.js.map +1 -1
  58. package/dist/lib/comment-formatter.test.js +43 -0
  59. package/dist/lib/comment-formatter.test.js.map +1 -1
  60. package/dist/lib/comment-manager.d.ts.map +1 -1
  61. package/dist/lib/comment-manager.js +4 -3
  62. package/dist/lib/comment-manager.js.map +1 -1
  63. package/dist/lib/comment-poster.d.ts +2 -1
  64. package/dist/lib/comment-poster.d.ts.map +1 -1
  65. package/dist/lib/comment-poster.js +2 -2
  66. package/dist/lib/comment-poster.js.map +1 -1
  67. package/dist/lib/comment-poster.test.js +27 -11
  68. package/dist/lib/comment-poster.test.js.map +1 -1
  69. package/dist/lib/config-model-overrides.test.d.ts +1 -1
  70. package/dist/lib/config-model-overrides.test.js +2 -2
  71. package/dist/lib/config-model-overrides.test.js.map +1 -1
  72. package/dist/lib/config.d.ts +34 -7
  73. package/dist/lib/config.d.ts.map +1 -1
  74. package/dist/lib/config.js +35 -13
  75. package/dist/lib/config.js.map +1 -1
  76. package/dist/lib/config.test.js +16 -0
  77. package/dist/lib/config.test.js.map +1 -1
  78. package/dist/lib/context-compression.d.ts +27 -1
  79. package/dist/lib/context-compression.d.ts.map +1 -1
  80. package/dist/lib/context-compression.js +106 -4
  81. package/dist/lib/context-compression.js.map +1 -1
  82. package/dist/lib/context-compression.test.js +305 -1
  83. package/dist/lib/context-compression.test.js.map +1 -1
  84. package/dist/lib/context-loader.d.ts +3 -2
  85. package/dist/lib/context-loader.d.ts.map +1 -1
  86. package/dist/lib/context-loader.js +11 -11
  87. package/dist/lib/context-loader.js.map +1 -1
  88. package/dist/lib/description-executor.d.ts +19 -2
  89. package/dist/lib/description-executor.d.ts.map +1 -1
  90. package/dist/lib/description-executor.js +52 -21
  91. package/dist/lib/description-executor.js.map +1 -1
  92. package/dist/lib/description-executor.test.d.ts +2 -0
  93. package/dist/lib/description-executor.test.d.ts.map +1 -0
  94. package/dist/lib/description-executor.test.js +120 -0
  95. package/dist/lib/description-executor.test.js.map +1 -0
  96. package/dist/lib/description-formatter.d.ts +8 -3
  97. package/dist/lib/description-formatter.d.ts.map +1 -1
  98. package/dist/lib/description-formatter.js +88 -13
  99. package/dist/lib/description-formatter.js.map +1 -1
  100. package/dist/lib/description-formatter.test.d.ts +2 -0
  101. package/dist/lib/description-formatter.test.d.ts.map +1 -0
  102. package/dist/lib/description-formatter.test.js +57 -0
  103. package/dist/lib/description-formatter.test.js.map +1 -0
  104. package/dist/lib/diff-parser.test.d.ts +2 -0
  105. package/dist/lib/diff-parser.test.d.ts.map +1 -0
  106. package/dist/lib/diff-parser.test.js +335 -0
  107. package/dist/lib/diff-parser.test.js.map +1 -0
  108. package/dist/lib/exit.d.ts +35 -0
  109. package/dist/lib/exit.d.ts.map +1 -0
  110. package/dist/lib/exit.js +53 -0
  111. package/dist/lib/exit.js.map +1 -0
  112. package/dist/lib/exit.test.d.ts +2 -0
  113. package/dist/lib/exit.test.d.ts.map +1 -0
  114. package/dist/lib/exit.test.js +120 -0
  115. package/dist/lib/exit.test.js.map +1 -0
  116. package/dist/lib/format-utils.d.ts +3 -0
  117. package/dist/lib/format-utils.d.ts.map +1 -0
  118. package/dist/lib/format-utils.js +7 -0
  119. package/dist/lib/format-utils.js.map +1 -0
  120. package/dist/lib/json-output.d.ts +4 -1
  121. package/dist/lib/json-output.d.ts.map +1 -1
  122. package/dist/lib/json-output.js +2 -1
  123. package/dist/lib/json-output.js.map +1 -1
  124. package/dist/lib/json-output.test.d.ts +2 -0
  125. package/dist/lib/json-output.test.d.ts.map +1 -0
  126. package/dist/lib/json-output.test.js +135 -0
  127. package/dist/lib/json-output.test.js.map +1 -0
  128. package/dist/lib/logger.d.ts +10 -2
  129. package/dist/lib/logger.d.ts.map +1 -1
  130. package/dist/lib/logger.js +22 -4
  131. package/dist/lib/logger.js.map +1 -1
  132. package/dist/lib/logger.test.d.ts +2 -0
  133. package/dist/lib/logger.test.d.ts.map +1 -0
  134. package/dist/lib/logger.test.js +324 -0
  135. package/dist/lib/logger.test.js.map +1 -0
  136. package/dist/lib/position-validator.test.d.ts +2 -0
  137. package/dist/lib/position-validator.test.d.ts.map +1 -0
  138. package/dist/lib/position-validator.test.js +128 -0
  139. package/dist/lib/position-validator.test.js.map +1 -0
  140. package/dist/lib/repository-validator.js +1 -1
  141. package/dist/lib/review-core.d.ts +9 -4
  142. package/dist/lib/review-core.d.ts.map +1 -1
  143. package/dist/lib/review-core.js +207 -112
  144. package/dist/lib/review-core.js.map +1 -1
  145. package/dist/lib/review-core.test.js +76 -30
  146. package/dist/lib/review-core.test.js.map +1 -1
  147. package/dist/lib/review-orchestrator.d.ts +12 -7
  148. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  149. package/dist/lib/review-orchestrator.js +78 -22
  150. package/dist/lib/review-orchestrator.js.map +1 -1
  151. package/dist/lib/review-orchestrator.test.js +160 -42
  152. package/dist/lib/review-orchestrator.test.js.map +1 -1
  153. package/dist/lib/review-parser.test.d.ts +2 -0
  154. package/dist/lib/review-parser.test.d.ts.map +1 -0
  155. package/dist/lib/review-parser.test.js +130 -0
  156. package/dist/lib/review-parser.test.js.map +1 -0
  157. package/dist/lib/review-usage.d.ts +32 -0
  158. package/dist/lib/review-usage.d.ts.map +1 -0
  159. package/dist/lib/review-usage.js +72 -0
  160. package/dist/lib/review-usage.js.map +1 -0
  161. package/dist/lib/review-usage.test.d.ts +2 -0
  162. package/dist/lib/review-usage.test.d.ts.map +1 -0
  163. package/dist/lib/review-usage.test.js +83 -0
  164. package/dist/lib/review-usage.test.js.map +1 -0
  165. package/dist/lib/unified-review-executor.d.ts +6 -2
  166. package/dist/lib/unified-review-executor.d.ts.map +1 -1
  167. package/dist/lib/unified-review-executor.js +54 -28
  168. package/dist/lib/unified-review-executor.js.map +1 -1
  169. package/dist/lib/unified-review-executor.test.js +138 -16
  170. package/dist/lib/unified-review-executor.test.js.map +1 -1
  171. package/dist/lib/write-json-output.test.d.ts +2 -0
  172. package/dist/lib/write-json-output.test.d.ts.map +1 -0
  173. package/dist/lib/write-json-output.test.js +259 -0
  174. package/dist/lib/write-json-output.test.js.map +1 -0
  175. package/dist/pi/sdk.d.ts +94 -0
  176. package/dist/pi/sdk.d.ts.map +1 -0
  177. package/dist/pi/sdk.js +486 -0
  178. package/dist/pi/sdk.js.map +1 -0
  179. package/dist/pi/sdk.test.d.ts +2 -0
  180. package/dist/pi/sdk.test.d.ts.map +1 -0
  181. package/dist/pi/sdk.test.js +331 -0
  182. package/dist/pi/sdk.test.js.map +1 -0
  183. package/dist/{opencode → runtime}/agent-loader.d.ts +7 -5
  184. package/dist/runtime/agent-loader.d.ts.map +1 -0
  185. package/dist/{opencode → runtime}/agent-loader.js +24 -19
  186. package/dist/runtime/agent-loader.js.map +1 -0
  187. package/dist/runtime/agent-loader.test.d.ts +2 -0
  188. package/dist/runtime/agent-loader.test.d.ts.map +1 -0
  189. package/dist/runtime/agent-loader.test.js +280 -0
  190. package/dist/runtime/agent-loader.test.js.map +1 -0
  191. package/dist/runtime/built-in-paths.d.ts +2 -0
  192. package/dist/runtime/built-in-paths.d.ts.map +1 -0
  193. package/dist/runtime/built-in-paths.js +14 -0
  194. package/dist/runtime/built-in-paths.js.map +1 -0
  195. package/dist/{opencode → runtime}/client.d.ts +35 -18
  196. package/dist/runtime/client.d.ts.map +1 -0
  197. package/dist/runtime/client.js +486 -0
  198. package/dist/runtime/client.js.map +1 -0
  199. package/dist/{opencode → runtime}/client.test.d.ts.map +1 -1
  200. package/dist/runtime/client.test.js +392 -0
  201. package/dist/runtime/client.test.js.map +1 -0
  202. package/dist/runtime/path-config.d.ts +8 -0
  203. package/dist/runtime/path-config.d.ts.map +1 -0
  204. package/dist/runtime/path-config.js +68 -0
  205. package/dist/runtime/path-config.js.map +1 -0
  206. package/dist/runtime/path-config.test.d.ts +2 -0
  207. package/dist/runtime/path-config.test.d.ts.map +1 -0
  208. package/dist/runtime/path-config.test.js +103 -0
  209. package/dist/runtime/path-config.test.js.map +1 -0
  210. package/package.json +5 -5
  211. package/.opencode/opencode.jsonc +0 -15
  212. package/.opencode/tool/write_json_output.ts +0 -24
  213. package/.opencode/tools/drs_skill.ts +0 -67
  214. package/dist/lib/skills-prompt.d.ts +0 -3
  215. package/dist/lib/skills-prompt.d.ts.map +0 -1
  216. package/dist/lib/skills-prompt.js +0 -70
  217. package/dist/lib/skills-prompt.js.map +0 -1
  218. package/dist/opencode/agent-loader.d.ts.map +0 -1
  219. package/dist/opencode/agent-loader.js.map +0 -1
  220. package/dist/opencode/client.d.ts.map +0 -1
  221. package/dist/opencode/client.js +0 -456
  222. package/dist/opencode/client.js.map +0 -1
  223. package/dist/opencode/client.test.js +0 -317
  224. package/dist/opencode/client.test.js.map +0 -1
  225. package/dist/opencode/opencode-paths.d.ts +0 -2
  226. package/dist/opencode/opencode-paths.d.ts.map +0 -1
  227. package/dist/opencode/opencode-paths.js +0 -7
  228. package/dist/opencode/opencode-paths.js.map +0 -1
  229. package/dist/opencode/skill-loader.d.ts +0 -15
  230. package/dist/opencode/skill-loader.d.ts.map +0 -1
  231. package/dist/opencode/skill-loader.js +0 -88
  232. package/dist/opencode/skill-loader.js.map +0 -1
  233. /package/{.opencode/agent → .pi/agents}/describe/pr-describer.md +0 -0
  234. /package/{.opencode/agent → .pi/agents}/review/documentation.md +0 -0
  235. /package/{.opencode/agent → .pi/agents}/review/performance.md +0 -0
  236. /package/{.opencode/agent → .pi/agents}/review/quality.md +0 -0
  237. /package/{.opencode/agent → .pi/agents}/review/security.md +0 -0
  238. /package/{.opencode/agent → .pi/agents}/review/style.md +0 -0
  239. /package/{.opencode/agent → .pi/agents}/review/unified-reviewer.md +0 -0
  240. /package/dist/{opencode → runtime}/client.test.d.ts +0 -0
package/README.md CHANGED
@@ -1,30 +1,35 @@
1
- # DRS - Diff Review System
1
+ # DRS Ā· Diff Review System
2
2
 
3
- **Intelligent Code Review Platform for GitLab and GitHub**
3
+ [![npm version](https://img.shields.io/npm/v/@diff-review-system/drs)](https://www.npmjs.com/package/@diff-review-system/drs)
4
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
4
5
 
5
- Enterprise-grade automated code review for Merge Requests and Pull Requests, powered by OpenCode SDK and Claude.
6
+ **AI-powered code review for GitLab MRs and GitHub PRs.**
6
7
 
7
- ## Features
8
+ DRS helps teams catch critical issues earlier with specialized review agents, unified reporting, and CI-friendly automation — all powered by Pi SDK.
8
9
 
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
10
+ ## Why teams like DRS
11
+
12
+ - šŸ”’ **Specialized analysis domains**: security, quality, style, performance, documentation
13
+ - 🧠 **Flexible review modes**: multi-agent deep review, unified one-pass review, hybrid escalation
14
+ - šŸ“¦ **Pi-native runtime**: in-process execution by default, no separate runtime service required
15
+ - āœļø **Description generation**: optional PR/MR summary generation and posting
16
+ - 🧾 **Portable outputs**: inline comments, JSON artifacts, and GitLab code quality reports
17
+ - šŸŽÆ **Smart context compression**: dynamic budget sizing with `contextCompression.thresholdPercent`
18
+
19
+ ## Quick Links
20
+
21
+ - [Quick Start](#quick-start)
22
+ - [Deployment Modes](#deployment-modes)
23
+ - [Customization](#customization)
24
+ - [Configuration](#configuration)
25
+ - [Documentation](#documentation)
18
26
 
19
27
  ## Quick Start
20
28
 
21
29
  ### 1. Prerequisites
22
30
 
23
- Install OpenCode CLI (required for in-process server mode):
24
-
25
- ```bash
26
- npm install -g opencode-ai
27
- ```
31
+ - Node.js 20+
32
+ - API key for your chosen model provider (Anthropic/OpenAI/ZhipuAI/etc.)
28
33
 
29
34
  ### 2. Install DRS
30
35
 
@@ -32,6 +37,8 @@ npm install -g opencode-ai
32
37
  npm install -g @diff-review-system/drs
33
38
  ```
34
39
 
40
+ This installs DRS with Pi runtime bundled — no separate runtime installation needed.
41
+
35
42
  ### 3. Initialize Project
36
43
 
37
44
  ```bash
@@ -48,7 +55,7 @@ cp .env.example .env
48
55
  # Edit .env and set:
49
56
  # - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
50
57
  # - GITHUB_TOKEN: Your GitHub access token (for GitHub PRs)
51
- # - OPENCODE_SERVER: URL of your OpenCode instance (optional - will start in-process if not set)
58
+ # - Pi runtime runs in-process automatically (no remote server needed)
52
59
  # - Provider API Key: Set the API key for your chosen model provider
53
60
  # - ANTHROPIC_API_KEY for Claude models (e.g., anthropic/claude-opus-4-5-20251101)
54
61
  # - ZHIPU_API_KEY for GLM models (e.g., zhipuai/glm-4.7)
@@ -56,7 +63,9 @@ cp .env.example .env
56
63
  # - See .env.example for all supported providers
57
64
  ```
58
65
 
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.
66
+ DRS CLI now loads `.env` automatically from your current working directory.
67
+
68
+ **Note**: DRS runs Pi in-process by default and does not require a remote runtime endpoint.
60
69
 
61
70
  ### 5. Review Local Changes
62
71
 
@@ -71,6 +80,17 @@ drs review-local --staged
71
80
  drs review-local --agents security,quality
72
81
  ```
73
82
 
83
+ ### Most-Used Commands
84
+
85
+ | Goal | Command |
86
+ |---|---|
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
+ | Generate PR description | `drs describe-pr --owner <owner> --repo <repo> --pr <number>` |
92
+ | Generate MR description | `drs describe-mr --project <group/repo> --mr <number>` |
93
+
74
94
  ## Deployment Modes
75
95
 
76
96
  ### Mode 1: Local CLI
@@ -135,7 +155,7 @@ ai_review:
135
155
  ```
136
156
 
137
157
  **See [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md)** for:
138
- - Using the official OpenCode container (`ghcr.io/anomalyco/opencode`)
158
+ - Pi-based CI setup examples
139
159
  - Parallel pipeline strategies (child pipelines, DAG with needs)
140
160
  - Complete examples that don't block your main pipeline
141
161
 
@@ -153,7 +173,6 @@ DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-revi
153
173
 
154
174
  1. **Configure API Keys** in repository Settings → Secrets:
155
175
  - `ANTHROPIC_API_KEY` (for Claude models), or
156
- - `OPENCODE_ZEN_API_KEY` (for OpenCode Zen), or
157
176
  - `ZHIPU_API_KEY` (for ZhipuAI GLM models), or
158
177
  - `OPENAI_API_KEY` (for OpenAI models)
159
178
 
@@ -214,7 +233,7 @@ code_review:
214
233
  stage: review
215
234
  image: node:20-alpine
216
235
  before_script:
217
- - npm install -g @diff-review-system/drs opencode-ai
236
+ - npm install -g @diff-review-system/drs
218
237
  script:
219
238
  - drs review-mr --project $CI_PROJECT_PATH --mr $CI_MERGE_REQUEST_IID
220
239
  --code-quality-report gl-code-quality-report.json
@@ -258,71 +277,43 @@ DRS generates reports in GitLab's CodeClimate-compatible format:
258
277
 
259
278
  For more details, see [GitLab Code Quality Documentation](https://docs.gitlab.com/ci/testing/code_quality/).
260
279
 
261
- ## OpenCode Server Configuration
262
-
263
- DRS supports two modes of OpenCode server operation:
264
-
265
- ### In-Process Server (Default)
266
-
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.
268
-
269
- ```bash
270
- # Install OpenCode CLI first (required)
271
- npm install -g opencode-ai
272
-
273
- # Then run DRS (server starts automatically)
274
- drs review-local
275
- ```
276
-
277
- **Pros:**
278
- - Minimal configuration required (just install CLI)
279
- - Automatic startup/shutdown
280
- - Simpler deployment
281
- - Lower latency
280
+ ## Pi Runtime Configuration
282
281
 
283
- **Cons:**
284
- - Requires OpenCode CLI installation
285
- - Server lifetime tied to CLI process
286
- - Cannot share across multiple tools
287
- - Uses process resources
282
+ DRS runs on Pi SDK as the sole review runtime.
288
283
 
289
- ### Remote Server (Optional)
284
+ ### In-Process Runtime (Default)
290
285
 
291
- For production deployments or when sharing across multiple tools, run a dedicated OpenCode server:
286
+ By default, DRS starts Pi runtime in-process:
292
287
 
293
288
  ```bash
294
- # Set the server URL
295
- export OPENCODE_SERVER=http://opencode.internal:3000
296
289
  drs review-local
297
290
  ```
298
291
 
299
- **Pros:**
300
- - Persistent server
301
- - Shared across multiple tools
302
- - Better for CI/CD pipelines
303
- - Can be scaled separately
292
+ ### Runtime Mode
304
293
 
305
- **Cons:**
306
- - Requires separate service setup
307
- - Additional infrastructure
294
+ DRS uses Pi in-process runtime only.
308
295
 
309
296
  ## Architecture
310
297
 
311
- DRS uses OpenCode SDK with markdown-based agent definitions:
298
+ DRS uses Pi runtime wiring with markdown-based agent definitions:
312
299
 
313
300
  ```
314
- .opencode/
315
- ā”œā”€ā”€ agent/
316
- │ └── review/
317
- │ ā”œā”€ā”€ security.md # Security specialist
318
- │ ā”œā”€ā”€ quality.md # Code quality expert
319
- │ ā”œā”€ā”€ style.md # Style checker
320
- │ └── performance.md # Performance analyzer
321
- └── opencode.jsonc # Configuration
301
+ .pi/
302
+ └── agents/
303
+ └── review/
304
+ ā”œā”€ā”€ security.md # Security specialist
305
+ ā”œā”€ā”€ quality.md # Code quality expert
306
+ ā”œā”€ā”€ style.md # Style checker
307
+ ā”œā”€ā”€ performance.md # Performance analyzer
308
+ └── documentation.md # Documentation reviewer
322
309
  ```
323
310
 
311
+ Built-in agent definitions live under `.pi/agents`.
312
+
324
313
  ## Customization
325
314
 
315
+ > **Full guide**: See [docs/CUSTOM_AGENTS.md](docs/CUSTOM_AGENTS.md) for complete documentation on custom agents, skills, context, per-agent tools, and configuration examples.
316
+
326
317
  ### Override Default Agents
327
318
 
328
319
  Create custom agents in your project:
@@ -333,7 +324,7 @@ mkdir -p .drs/agents/security
333
324
  cat > .drs/agents/security/agent.md << 'EOF'
334
325
  ---
335
326
  description: Custom security reviewer
336
- model: opencode/claude-sonnet-4-5
327
+ model: anthropic/claude-sonnet-4-5-20250929
337
328
  ---
338
329
 
339
330
  You are a security expert for this specific application.
@@ -343,12 +334,55 @@ You are a security expert for this specific application.
343
334
  EOF
344
335
  ```
345
336
 
337
+ ### Add Context Without Overriding
338
+
339
+ Add project-specific guidance to a built-in agent without replacing its prompt:
340
+
341
+ ```bash
342
+ mkdir -p .drs/agents/quality
343
+ cat > .drs/agents/quality/context.md << 'EOF'
344
+ # Quality Context
345
+ - Flag functions over 200 lines as HIGH
346
+ - We use TypeORM — flag raw SQL queries
347
+ EOF
348
+ ```
349
+
350
+ ### Global Project Context
351
+
352
+ `.drs/context.md` is injected into **every** agent's prompt:
353
+
354
+ ```markdown
355
+ # Project Context
356
+ Node.js microservice using Express + TypeORM.
357
+ Prioritize correctness, safety, and clarity.
358
+ ```
359
+
360
+ ### Create New Custom Agents
361
+
362
+ Add agents that don't exist in the built-in set:
363
+
364
+ ```bash
365
+ mkdir -p .drs/agents/api-reviewer
366
+ cat > .drs/agents/api-reviewer/agent.md << 'EOF'
367
+ ---
368
+ description: REST API contract reviewer
369
+ tools:
370
+ Read: true
371
+ Grep: true
372
+ ---
373
+ Review REST API changes for backward compatibility.
374
+ EOF
375
+ ```
376
+
377
+ Then add to config: `agents: [security, quality, api-reviewer]`
378
+
346
379
  ### Configure Review Behavior
347
380
 
348
381
  Edit `.drs/drs.config.yaml`:
349
382
 
350
383
  ```yaml
351
384
  review:
385
+ mode: unified
352
386
  agents:
353
387
  - security
354
388
  - quality
@@ -359,14 +393,123 @@ review:
359
393
  enabled: true
360
394
  postDescription: false
361
395
 
396
+ contextCompression:
397
+ enabled: true
398
+ # Dynamic budget = thresholdPercent Ɨ model context window
399
+ thresholdPercent: 0.15
400
+ # Fallback if model context window metadata is unavailable
401
+ maxTokens: 32000
402
+ softBufferTokens: 1500
403
+ hardBufferTokens: 1000
404
+
362
405
  describe:
363
- model: opencode/glm-4.7-free
406
+ model: zhipuai/glm-4.7
364
407
  ```
365
408
 
366
409
  Notes:
367
410
  - `review.describe` controls auto-description when running `review-mr` or `review-pr`.
368
411
  - CLI flags override config: `--describe` / `--skip-describe` and `--post-description` / `--skip-post-description`.
369
412
  - `describe.model` is used by `describe-mr`/`describe-pr` and by review-driven descriptions.
413
+ - `contextCompression.thresholdPercent` sets a context-window-aware budget (e.g. `0.15` means 15%).
414
+ - `contextCompression.maxTokens` is the fallback cap when context window metadata is unavailable.
415
+ - `review.agents` explicitly enables deep-review agents; remove an entry to disable that agent.
416
+ - Built-in review agent names are: `security`, `quality`, `style`, `performance`, `documentation`.
417
+ - Unknown agent names fail fast with a validation error before review execution starts.
418
+
419
+ ### Model Pricing Overrides (Cost Reporting)
420
+
421
+ If your provider/model reports token usage but returns `$0.0000` cost, you can set pricing manually.
422
+ Values are in **USD per 1M tokens**.
423
+
424
+ ```yaml
425
+ pricing:
426
+ models:
427
+ opencode/glm-5-free:
428
+ input: 0.0
429
+ output: 0.0
430
+ cacheRead: 0.0
431
+ cacheWrite: 0.0
432
+ ```
433
+
434
+ You can also set pricing directly under `pi.provider.<name>.models.<model>.cost` for custom providers.
435
+
436
+ ### Custom Provider Model Metadata (Context Window & Output Limits)
437
+
438
+ If you define custom models under `pi.provider.<name>.models`, you can also set model metadata used by DRS:
439
+
440
+ - `contextWindow`: used for dynamic compression sizing when `thresholdPercent` is enabled
441
+ - `maxTokens`: model output limit hint
442
+ - `cost`: token pricing override (USD per 1M tokens)
443
+
444
+ ```yaml
445
+ pi:
446
+ provider:
447
+ my-provider:
448
+ npm: "@ai-sdk/openai-compatible"
449
+ name: "My Provider"
450
+ options:
451
+ baseURL: "https://api.example.com/v1"
452
+ apiKey: "{env:MY_PROVIDER_API_KEY}"
453
+ models:
454
+ my-model:
455
+ name: "My Model"
456
+ contextWindow: 200000
457
+ maxTokens: 8192
458
+ cost:
459
+ input: 0.50
460
+ output: 1.50
461
+ cacheRead: 0.00
462
+ cacheWrite: 0.00
463
+ ```
464
+
465
+ > Note: For built-in providers/models, context window metadata comes from the runtime model registry.
466
+
467
+ ### Context Compression (Large Diff Handling)
468
+
469
+ DRS trims large diffs before sending them to models, so reviews stay within context limits.
470
+
471
+ - `thresholdPercent` enables **dynamic budgeting** based on model context window.
472
+ - `maxTokens` is used as fallback when context metadata is missing.
473
+ - Generated files and deletion-only hunks can be auto-excluded from prompt context.
474
+
475
+ Example:
476
+
477
+ ```yaml
478
+ contextCompression:
479
+ enabled: true
480
+ thresholdPercent: 0.15 # 15% of model context window
481
+ maxTokens: 32000 # fallback cap
482
+ softBufferTokens: 1500
483
+ hardBufferTokens: 1000
484
+ tokenEstimateDivisor: 4
485
+ ```
486
+
487
+ ### Pi-Native Skill Discovery
488
+
489
+ DRS now auto-discovers review skills from both directories when `review.paths.skills` is not set:
490
+
491
+ 1. `.drs/skills` (project-level overrides)
492
+ 2. `.pi/skills` (Pi-native skills)
493
+
494
+ If the same skill name exists in both locations, `.drs/skills` wins.
495
+
496
+ Example layout:
497
+
498
+ ```text
499
+ .drs/skills/
500
+ secure-fetch/SKILL.md # Project override (preferred)
501
+ .pi/skills/
502
+ secure-fetch/SKILL.md # Pi-native fallback
503
+ db-indexing/SKILL.md # Additional Pi-native skill
504
+ ```
505
+
506
+ To force a single custom skills directory, set `review.paths.skills`:
507
+
508
+ ```yaml
509
+ review:
510
+ paths:
511
+ skills: config/review-skills
512
+ ```
370
513
 
371
514
  ## Review Domains
372
515
 
@@ -421,7 +564,6 @@ ZHIPU_API_KEY=xxx # For ZhipuAI GLM models
421
564
  OPENAI_API_KEY=sk-xxx # For OpenAI models
422
565
 
423
566
  # Optional
424
- OPENCODE_SERVER=http://localhost:3000 # Leave empty to start in-process server
425
567
  GITLAB_URL=https://gitlab.com
426
568
  REVIEW_AGENTS=security,quality,style,performance
427
569
  ```
@@ -430,15 +572,7 @@ REVIEW_AGENTS=security,quality,style,performance
430
572
 
431
573
  1. `.drs/drs.config.yaml` - DRS-specific configuration
432
574
  2. `.gitlab-review.yml` - Alternative location
433
- 3. `.opencode/opencode.jsonc` - OpenCode configuration
434
-
435
- ## Examples
436
-
437
- See the `examples/` directory for:
438
- - GitLab CI configuration
439
- - Docker Compose setup
440
- - Custom agent definitions
441
- - Configuration templates
575
+ 3. Environment variables (for provider credentials and platform tokens)
442
576
 
443
577
  ## Development
444
578
 
@@ -463,12 +597,12 @@ npm run dev
463
597
  ## Requirements
464
598
 
465
599
  - Node.js 20+
466
- - OpenCode CLI (`npm install -g opencode-ai`) - Required even for in-process mode
467
- - Anthropic API key (for Claude AI)
600
+ - API key for your selected provider (Anthropic/OpenAI/ZhipuAI/etc.)
468
601
  - GitLab access token (for GitLab MR reviews)
469
602
  - GitHub access token (for GitHub PR reviews)
470
603
  - Git 2.30+ (for local mode)
471
- - OpenCode server instance (optional - will start in-process if not provided)
604
+
605
+ Pi runtime is included as a dependency — no separate installation or server needed.
472
606
 
473
607
  ## License
474
608
 
@@ -477,12 +611,13 @@ Apache-2.0
477
611
  ## Documentation
478
612
 
479
613
  - [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md) - Complete guide for GitLab CI/CD setup
614
+ - [GitHub Actions Integration Guide](docs/GITHUB_ACTIONS_INTEGRATION.md) - GitHub Actions workflow setup
615
+ - [External PR Security Guide](docs/EXTERNAL_PR_SECURITY.md) - Security controls for external contributors
616
+ - [Custom Agents & Skills Guide](docs/CUSTOM_AGENTS.md) - Custom agents, context, skills, and per-agent tools
617
+ - [Model Overrides Guide](docs/MODEL_OVERRIDES.md) - Per-agent model configuration
480
618
  - [Development Guide](DEVELOPMENT.md) - Local development and testing guide
481
- - [Design Document](DESIGN.md) - Original design using Claude Agent SDK
482
- - [Architecture Document](ARCHITECTURE.md) - OpenCode SDK architecture
483
- - [Publishing Guide](PUBLISHING_SETUP.md) - How to publish to npm
484
- - [OpenCode Documentation](https://opencode.ai/docs)
485
- - [GitLab API](https://docs.gitlab.com/ee/api/)
619
+ - [Architecture Document](ARCHITECTURE.md) - Pi runtime architecture
620
+ - [Pi Documentation](https://github.com/badlogic/pi-mono)
486
621
 
487
622
  ## Contributing
488
623
 
@@ -490,5 +625,6 @@ Contributions welcome! Please read the contributing guidelines first.
490
625
 
491
626
  ## Support
492
627
 
493
- - Issues: [GitHub Issues](https://github.com/your-org/drs/issues)
494
- - Discussions: [GitHub Discussions](https://github.com/your-org/drs/discussions)
628
+ - Issues: [GitHub Issues](https://github.com/manojlds/drs/issues)
629
+ - Discussions: [GitHub Discussions](https://github.com/manojlds/drs/discussions)
630
+ - Repository: [github.com/manojlds/drs](https://github.com/manojlds/drs)
@@ -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,CA6DjD;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,CAwDjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
package/dist/ci/runner.js CHANGED
@@ -1,5 +1,6 @@
1
- import chalk from 'chalk';
2
1
  import { loadConfig, validateConfig } from '../lib/config.js';
2
+ import { exitProcess } from '../lib/exit.js';
3
+ import { getLogger } from '../lib/logger.js';
3
4
  import { reviewMR } from '../cli/review-mr.js';
4
5
  /**
5
6
  * Detect CI environment from environment variables
@@ -24,38 +25,35 @@ export function detectCIEnvironment() {
24
25
  * Run review in CI/CD environment
25
26
  */
26
27
  export async function runCIReview() {
27
- console.log(chalk.bold.cyan('\nšŸ“‹ DRS | CI/CD Analysis Runner\n'));
28
+ const log = getLogger();
29
+ log.info('DRS CI/CD Analysis Runner starting');
28
30
  // Detect environment
29
31
  const env = detectCIEnvironment();
30
32
  if (env.platform === 'unknown') {
31
- console.error(chalk.red('Error: Unknown CI environment'));
32
- console.error(chalk.gray('Currently supported: GitLab CI'));
33
- process.exit(1);
33
+ log.error('Unknown CI environment. Currently supported: GitLab CI');
34
+ exitProcess(1);
34
35
  }
35
- console.log(chalk.gray(`Detected CI platform: ${env.platform}\n`));
36
+ log.info(`Detected CI platform: ${env.platform}`);
36
37
  // Validate required environment variables
37
38
  if (!env.projectId) {
38
- console.error(chalk.red('Error: CI_PROJECT_ID not found'));
39
- process.exit(1);
39
+ log.error('CI_PROJECT_ID not found');
40
+ exitProcess(1);
40
41
  }
41
42
  if (!env.mrIid) {
42
- console.error(chalk.red('Error: CI_MERGE_REQUEST_IID not found'));
43
- console.error(chalk.gray('This job should only run on merge requests'));
44
- process.exit(1);
43
+ log.error('CI_MERGE_REQUEST_IID not found. This job should only run on merge requests');
44
+ exitProcess(1);
45
45
  }
46
46
  // Load configuration
47
- const projectDir = process.env.CI_PROJECT_DIR || process.cwd();
47
+ const projectDir = process.env.CI_PROJECT_DIR ?? process.cwd();
48
48
  const config = loadConfig(projectDir);
49
49
  try {
50
50
  validateConfig(config);
51
51
  }
52
52
  catch (error) {
53
- console.error(chalk.red('Configuration error:'), error instanceof Error ? error.message : String(error));
54
- process.exit(1);
53
+ log.error(`Configuration error: ${error instanceof Error ? error.message : String(error)}`);
54
+ exitProcess(1);
55
55
  }
56
- console.log(chalk.gray(`Project: ${env.projectId}`));
57
- console.log(chalk.gray(`MR: !${env.mrIid}`));
58
- console.log(chalk.gray(`Branch: ${env.sourceBranch} → ${env.targetBranch}\n`));
56
+ log.info(`Project: ${env.projectId} | MR: !${env.mrIid} | Branch: ${env.sourceBranch} → ${env.targetBranch}`);
59
57
  // Run review
60
58
  try {
61
59
  await reviewMR(config, {
@@ -66,18 +64,17 @@ export async function runCIReview() {
66
64
  describe: config.review.describe?.enabled ?? false,
67
65
  postDescription: config.review.describe?.postDescription ?? false,
68
66
  });
69
- console.log(chalk.green.bold('\nāœ“ Review complete\n'));
67
+ log.info('Review complete');
70
68
  }
71
69
  catch (error) {
72
- console.error(chalk.red('\nāœ— Review failed\n'));
73
- console.error(error);
74
- process.exit(1);
70
+ log.error('Review failed', undefined, error);
71
+ exitProcess(1);
75
72
  }
76
73
  }
77
74
  /**
78
75
  * Check if running in CI environment
79
76
  */
80
77
  export function isCI() {
81
- return !!(process.env.CI || process.env.GITLAB_CI || process.env.GITHUB_ACTIONS);
78
+ return !!(process.env.CI ?? process.env.GITLAB_CI ?? process.env.GITHUB_ACTIONS);
82
79
  }
83
80
  //# 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":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAW/C;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBACrC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAElC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACpE,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElD,0CAA0C;IAC1C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrC,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACxF,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5F,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAI,CACN,YAAY,GAAG,CAAC,SAAS,WAAW,GAAG,CAAC,KAAK,cAAc,GAAG,CAAC,YAAY,MAAM,GAAG,CAAC,YAAY,EAAE,CACpG,CAAC;IAEF,aAAa;IACb,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,EAAE;YACrB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,YAAY,EAAE,IAAI,EAAE,6BAA6B;YACjD,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK;YACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK;YAClD,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,IAAI,KAAK;SAClE,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7C,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACnF,CAAC"}
@@ -1 +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"}
1
+ {"version":3,"file":"describe-mr.d.ts","sourceRoot":"","sources":["../../src/cli/describe-mr.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAwB/F,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,iBAuJ7E"}