@diff-review-system/drs 2.2.1 → 3.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 (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
@@ -58,7 +58,7 @@ vi.mock('./comment-formatter.js', () => ({
58
58
  },
59
59
  })),
60
60
  }));
61
- vi.mock('../opencode/agent-loader.js', () => ({
61
+ vi.mock('../runtime/agent-loader.js', () => ({
62
62
  loadReviewAgents: vi.fn(() => [
63
63
  { name: 'review/security', description: 'Security review' },
64
64
  { name: 'review/quality', description: 'Code quality review' },
@@ -98,7 +98,10 @@ describe('review-core', () => {
98
98
  expect(instructions).toContain('MR !456');
99
99
  expect(instructions).toContain('src/app.ts');
100
100
  expect(instructions).toContain('src/utils.ts');
101
- expect(instructions).toContain('git diff HEAD~1');
101
+ expect(instructions).toContain('omitted due to size constraints');
102
+ expect(instructions).toContain('Use the Read tool');
103
+ expect(instructions).not.toContain('Bash tool');
104
+ expect(instructions).not.toContain('git diff');
102
105
  expect(instructions).not.toContain('Diff Content');
103
106
  });
104
107
  it('should include compression summary when provided', () => {
@@ -126,17 +129,18 @@ describe('review-core', () => {
126
129
  it('should use default fallback command when not provided', () => {
127
130
  const files = [{ filename: 'src/app.ts' }];
128
131
  const instructions = buildBaseInstructions('PR #123', files);
129
- expect(instructions).toContain('git diff HEAD~1 -- <file>');
132
+ expect(instructions).toContain('omitted due to size constraints');
133
+ expect(instructions).toContain('Use the Read tool');
130
134
  });
131
135
  });
132
136
  describe('runUnifiedReviewAgent', () => {
133
- let mockOpencode;
137
+ let mockRuntime;
134
138
  let mockConfig;
135
139
  beforeEach(() => {
136
140
  // Reset console.log spy
137
141
  vi.spyOn(console, 'log').mockImplementation(() => { });
138
142
  vi.spyOn(console, 'error').mockImplementation(() => { });
139
- mockOpencode = {
143
+ mockRuntime = {
140
144
  createSession: vi.fn(async () => ({ id: 'session-1' })),
141
145
  streamMessages: vi.fn(async function* () {
142
146
  yield {
@@ -168,7 +172,7 @@ describe('review-core', () => {
168
172
  };
169
173
  });
170
174
  it('should run unified review agent successfully', async () => {
171
- const result = await runUnifiedReviewAgent(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
175
+ const result = await runUnifiedReviewAgent(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
172
176
  expect(result.issues).toHaveLength(1);
173
177
  expect(result.issues[0].category).toBe('SECURITY');
174
178
  expect(result.issues[0].severity).toBe('HIGH');
@@ -176,7 +180,7 @@ describe('review-core', () => {
176
180
  expect(result.agentResults).toHaveLength(1);
177
181
  expect(result.agentResults[0].success).toBe(true);
178
182
  // eslint-disable-next-line @typescript-eslint/unbound-method
179
- expect(mockOpencode.createSession).toHaveBeenCalledWith({
183
+ expect(mockRuntime.createSession).toHaveBeenCalledWith({
180
184
  agent: 'review/unified-reviewer',
181
185
  message: expect.stringContaining('Review these files'),
182
186
  context: {
@@ -184,19 +188,57 @@ describe('review-core', () => {
184
188
  },
185
189
  });
186
190
  // eslint-disable-next-line @typescript-eslint/unbound-method
187
- expect(mockOpencode.closeSession).toHaveBeenCalledWith('session-1');
191
+ expect(mockRuntime.closeSession).toHaveBeenCalledWith('session-1');
192
+ });
193
+ it('captures token usage and model metadata from assistant messages', async () => {
194
+ mockRuntime.streamMessages = vi.fn(async function* () {
195
+ yield {
196
+ id: 'msg-usage-1',
197
+ role: 'assistant',
198
+ content: JSON.stringify({ issues: [] }),
199
+ provider: 'opencode',
200
+ model: 'glm-5-free',
201
+ usage: {
202
+ input: 1200,
203
+ output: 100,
204
+ cacheRead: 30,
205
+ cacheWrite: 0,
206
+ totalTokens: 1330,
207
+ cost: 0.02,
208
+ },
209
+ timestamp: new Date(),
210
+ };
211
+ });
212
+ const result = await runUnifiedReviewAgent(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
213
+ expect(result.usage).toEqual(expect.objectContaining({
214
+ total: expect.objectContaining({
215
+ input: 1200,
216
+ output: 100,
217
+ cacheRead: 30,
218
+ cacheWrite: 0,
219
+ totalTokens: 1330,
220
+ cost: 0.02,
221
+ }),
222
+ agents: [
223
+ expect.objectContaining({
224
+ agentType: 'unified-reviewer',
225
+ model: 'opencode/glm-5-free',
226
+ turns: 1,
227
+ }),
228
+ ],
229
+ }));
188
230
  });
189
231
  it('should handle agent failure gracefully', async () => {
190
- mockOpencode.createSession = vi.fn(async () => {
232
+ mockRuntime.createSession = vi.fn(async () => {
191
233
  throw new Error('Session creation failed');
192
234
  });
193
- const result = await runUnifiedReviewAgent(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
235
+ const result = await runUnifiedReviewAgent(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
194
236
  expect(result.issues).toHaveLength(0);
195
237
  expect(result.agentResults[0].success).toBe(false);
196
238
  expect(result.filesReviewed).toBe(1);
197
239
  });
198
240
  it('should handle invalid JSON output gracefully', async () => {
199
- mockOpencode.streamMessages = vi.fn(async function* () {
241
+ mockRuntime.streamMessages = vi.fn(async function* () {
200
242
  yield {
201
243
  id: 'msg-1',
202
244
  role: 'assistant',
@@ -206,23 +248,23 @@ describe('review-core', () => {
206
248
  });
207
249
  // parseReviewOutput mock returns { issues: [] } for invalid JSON
208
250
  // so this should succeed with no issues
209
- const result = await runUnifiedReviewAgent(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
251
+ const result = await runUnifiedReviewAgent(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
210
252
  expect(result.issues).toHaveLength(0);
211
253
  expect(result.agentResults[0].success).toBe(true);
212
254
  });
213
255
  it('should log debug information when debug=true', async () => {
214
256
  const logSpy = vi.spyOn(console, 'log');
215
- await runUnifiedReviewAgent(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', true);
257
+ await runUnifiedReviewAgent(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', true);
216
258
  expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('DEBUG'));
217
259
  });
218
260
  });
219
261
  describe('runReviewAgents', () => {
220
- let mockOpencode;
262
+ let mockRuntime;
221
263
  let mockConfig;
222
264
  beforeEach(() => {
223
265
  vi.spyOn(console, 'log').mockImplementation(() => { });
224
266
  vi.spyOn(console, 'error').mockImplementation(() => { });
225
- mockOpencode = {
267
+ mockRuntime = {
226
268
  createSession: vi.fn(async ({ agent }) => ({ id: `session-${agent}` })),
227
269
  streamMessages: vi.fn(async function* ({ agent }) {
228
270
  const agentType = agent?.split('/')[1] || 'test';
@@ -255,43 +297,47 @@ describe('review-core', () => {
255
297
  };
256
298
  });
257
299
  it('should run multiple agents successfully', async () => {
258
- const result = await runReviewAgents(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
300
+ const result = await runReviewAgents(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
259
301
  expect(result.issues.length).toBeGreaterThanOrEqual(2);
260
302
  expect(result.agentResults).toHaveLength(2);
261
303
  expect(result.agentResults.every((r) => r.success)).toBe(true);
262
304
  });
263
305
  it('should continue if one agent fails', async () => {
264
306
  let callCount = 0;
265
- mockOpencode.createSession = vi.fn(async ({ agent }) => {
307
+ mockRuntime.createSession = vi.fn(async ({ agent }) => {
266
308
  callCount++;
267
309
  if (callCount === 1) {
268
310
  throw new Error('First agent failed');
269
311
  }
270
312
  return { id: `session-${agent}`, agent, createdAt: new Date() };
271
313
  });
272
- const result = await runReviewAgents(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
314
+ const result = await runReviewAgents(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
273
315
  expect(result.agentResults).toHaveLength(2);
274
316
  expect(result.agentResults.filter((r) => r.success)).toHaveLength(1);
275
317
  expect(result.agentResults.filter((r) => !r.success)).toHaveLength(1);
276
318
  });
277
319
  it('should throw error if all agents fail', async () => {
278
- mockOpencode.createSession = vi.fn(async () => {
320
+ mockRuntime.createSession = vi.fn(async () => {
279
321
  throw new Error('All agents failed');
280
322
  });
281
- await expect(runReviewAgents(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false)).rejects.toThrow('All review agents failed');
323
+ await expect(runReviewAgents(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false)).rejects.toThrow('All review agents failed');
282
324
  });
283
325
  it('should handle empty agent list', async () => {
284
326
  mockConfig.review.agents = [];
285
- await expect(runReviewAgents(mockOpencode, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false)).rejects.toThrow('All review agents failed');
327
+ await expect(runReviewAgents(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false)).rejects.toThrow('All review agents failed');
328
+ });
329
+ it('should fail fast when config includes unknown agents', async () => {
330
+ mockConfig.review.agents = ['security', 'unknown-agent'];
331
+ await expect(runReviewAgents(mockRuntime, mockConfig, 'Review these files', 'PR #123', ['src/app.ts'], {}, '/test/dir', false)).rejects.toThrow('Unknown review agent(s) configured: unknown-agent');
286
332
  });
287
333
  });
288
334
  describe('runReviewPipeline', () => {
289
- let mockOpencode;
335
+ let mockRuntime;
290
336
  let mockConfig;
291
337
  beforeEach(() => {
292
338
  vi.spyOn(console, 'log').mockImplementation(() => { });
293
339
  vi.spyOn(console, 'error').mockImplementation(() => { });
294
- mockOpencode = {
340
+ mockRuntime = {
295
341
  createSession: vi.fn(async () => ({ id: 'session-1' })),
296
342
  streamMessages: vi.fn(async function* () {
297
343
  yield {
@@ -323,7 +369,7 @@ describe('review-core', () => {
323
369
  mode: 'unified',
324
370
  },
325
371
  };
326
- const result = await runReviewPipeline(mockOpencode, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
372
+ const result = await runReviewPipeline(mockRuntime, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
327
373
  expect(result.issues).toHaveLength(1);
328
374
  expect(result.agentResults[0].agentType).toBe('unified-reviewer');
329
375
  });
@@ -334,7 +380,7 @@ describe('review-core', () => {
334
380
  mode: 'multi-agent',
335
381
  },
336
382
  };
337
- const result = await runReviewPipeline(mockOpencode, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
383
+ const result = await runReviewPipeline(mockRuntime, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
338
384
  expect(result.issues.length).toBeGreaterThan(0);
339
385
  expect(result.agentResults.length).toBeGreaterThan(0);
340
386
  });
@@ -349,7 +395,7 @@ describe('review-core', () => {
349
395
  },
350
396
  };
351
397
  // Mock unified review returning only LOW severity
352
- mockOpencode.streamMessages = vi.fn(async function* () {
398
+ mockRuntime.streamMessages = vi.fn(async function* () {
353
399
  yield {
354
400
  id: 'msg-1',
355
401
  role: 'assistant',
@@ -369,7 +415,7 @@ describe('review-core', () => {
369
415
  timestamp: new Date(),
370
416
  };
371
417
  });
372
- const result = await runReviewPipeline(mockOpencode, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
418
+ const result = await runReviewPipeline(mockRuntime, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
373
419
  // Should only have unified result, no escalation
374
420
  expect(result.issues).toHaveLength(1);
375
421
  expect(result.issues[0].severity).toBe('LOW');
@@ -386,7 +432,7 @@ describe('review-core', () => {
386
432
  },
387
433
  };
388
434
  let callCount = 0;
389
- mockOpencode.streamMessages = vi.fn(async function* () {
435
+ mockRuntime.streamMessages = vi.fn(async function* () {
390
436
  callCount++;
391
437
  yield {
392
438
  id: 'msg-1',
@@ -407,7 +453,7 @@ describe('review-core', () => {
407
453
  timestamp: new Date(),
408
454
  };
409
455
  });
410
- const result = await runReviewPipeline(mockOpencode, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
456
+ const result = await runReviewPipeline(mockRuntime, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
411
457
  // Should have both unified and escalated results
412
458
  expect(result.agentResults.length).toBeGreaterThan(1);
413
459
  });
@@ -417,7 +463,7 @@ describe('review-core', () => {
417
463
  agents: ['security', 'quality'],
418
464
  },
419
465
  };
420
- const result = await runReviewPipeline(mockOpencode, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
466
+ const result = await runReviewPipeline(mockRuntime, mockConfig, 'Base instructions', 'PR #123', ['src/app.ts'], {}, '/test/dir', false);
421
467
  expect(result.agentResults.length).toBeGreaterThan(0);
422
468
  });
423
469
  });
@@ -1 +1 @@
1
- {"version":3,"file":"review-core.test.js","sourceRoot":"","sources":["../../src/lib/review-core.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-core.test.js","sourceRoot":"","sources":["../../src/lib/review-core.test.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,12 @@
5
5
  * It uses the shared core logic from review-core.ts.
6
6
  */
7
7
  import type { DRSConfig } from './config.js';
8
+ import type { ChangeSummary } from './change-summary.js';
8
9
  import { type ModelOverrides } from './config.js';
9
- import { type OpencodeClient } from '../opencode/client.js';
10
+ import { type RuntimeClient } from '../runtime/client.js';
10
11
  import { calculateSummary, type ReviewIssue } from './comment-formatter.js';
11
12
  import { displayReviewSummary as displaySummary, hasBlockingIssues as checkBlockingIssues } from './review-core.js';
13
+ import { type ReviewUsageSummary } from './review-usage.js';
12
14
  /**
13
15
  * Source information for a review (platform-agnostic)
14
16
  */
@@ -26,7 +28,7 @@ export interface ReviewSource {
26
28
  context: Record<string, unknown>;
27
29
  /** Working directory for the review (defaults to process.cwd()) */
28
30
  workingDir?: string;
29
- /** Debug mode - print OpenCode configuration */
31
+ /** Debug mode - print Pi runtime configuration */
30
32
  debug?: boolean;
31
33
  /** Whether this is a staged diff (affects git diff command) */
32
34
  staged?: boolean;
@@ -40,28 +42,31 @@ export interface ReviewResult {
40
42
  /** Calculated summary statistics */
41
43
  summary: ReturnType<typeof calculateSummary>;
42
44
  /** Diff-based change summary when available */
43
- changeSummary?: import('./change-summary.js').ChangeSummary;
45
+ changeSummary?: ChangeSummary;
44
46
  /** Number of files actually reviewed (after filtering) */
45
47
  filesReviewed: number;
48
+ /** Token usage and cost details for the review run */
49
+ usage?: ReviewUsageSummary;
46
50
  }
47
51
  /**
48
52
  * Filter files based on ignore patterns in config
49
53
  */
50
54
  export declare function filterIgnoredFiles(files: string[], config: DRSConfig): string[];
55
+ export declare function getReviewBudgetModelIds(mode: DRSConfig['review']['mode'], agentModelOverrides: ModelOverrides, unifiedModelOverrides: ModelOverrides): string[];
51
56
  export interface ConnectOptions {
52
57
  debug?: boolean;
53
58
  modelOverrides?: ModelOverrides;
54
59
  }
55
60
  /**
56
- * Connect to OpenCode server (or start in-process)
61
+ * Connect to Pi runtime (in-process by default)
57
62
  */
58
- export declare function connectToOpenCode(config: DRSConfig, workingDir?: string, options?: ConnectOptions): Promise<OpencodeClient>;
63
+ export declare function connectToRuntime(config: DRSConfig, workingDir?: string, options?: ConnectOptions): Promise<RuntimeClient>;
59
64
  /**
60
- * Execute a code review using OpenCode agents
65
+ * Execute a code review using Pi runtime agents.
61
66
  *
62
67
  * This is the core review orchestrator that handles:
63
68
  * - File filtering (ignore patterns)
64
- * - OpenCode connection
69
+ * - Pi runtime connection
65
70
  * - Agent execution and streaming
66
71
  * - Issue parsing and collection
67
72
  * - Summary calculation
@@ -1 +1 @@
1
- {"version":3,"file":"review-orchestrator.d.ts","sourceRoot":"","sources":["../../src/lib/review-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAGL,oBAAoB,IAAI,cAAc,EACtC,iBAAiB,IAAI,mBAAmB,EAEzC,MAAM,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,qBAAqB,EAAE,aAAa,CAAC;IAC5D,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAE/E;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC,CAoFvB;AAGD,eAAO,MAAM,oBAAoB,uBAAiB,CAAC;AACnD,eAAO,MAAM,iBAAiB,4BAAsB,CAAC"}
1
+ {"version":3,"file":"review-orchestrator.d.ts","sourceRoot":"","sources":["../../src/lib/review-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAGL,oBAAoB,IAAI,cAAc,EACtC,iBAAiB,IAAI,mBAAmB,EAEzC,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAiC,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAI3F;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAE/E;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EACjC,mBAAmB,EAAE,cAAc,EACnC,qBAAqB,EAAE,cAAc,GACpC,MAAM,EAAE,CAWV;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,CA2BxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC,CAmJvB;AAGD,eAAO,MAAM,oBAAoB,uBAAiB,CAAC;AACnD,eAAO,MAAM,iBAAiB,4BAAsB,CAAC"}
@@ -5,50 +5,63 @@
5
5
  * It uses the shared core logic from review-core.ts.
6
6
  */
7
7
  import chalk from 'chalk';
8
- import { shouldIgnoreFile, getModelOverrides, getUnifiedModelOverride, } from './config.js';
9
- import { createOpencodeClientInstance } from '../opencode/client.js';
8
+ import { exitProcess } from './exit.js';
9
+ import { shouldIgnoreFile, getModelOverrides, getDescriberModelOverride, getRuntimeConfig, getUnifiedModelOverride, } from './config.js';
10
+ import { createRuntimeClientInstance } from '../runtime/client.js';
10
11
  import { calculateSummary } from './comment-formatter.js';
11
12
  import { buildBaseInstructions, runReviewPipeline, displayReviewSummary as displaySummary, hasBlockingIssues as checkBlockingIssues, } from './review-core.js';
12
- import { compressFilesWithDiffs, formatCompressionSummary } from './context-compression.js';
13
+ import { prepareDiffsForAgent, formatCompressionSummary, resolveCompressionBudget, } from './context-compression.js';
14
+ import { createEmptyReviewUsageSummary } from './review-usage.js';
15
+ import { runDescribeAgent } from './description-executor.js';
16
+ import { formatDescribeSummary } from './description-formatter.js';
13
17
  /**
14
18
  * Filter files based on ignore patterns in config
15
19
  */
16
20
  export function filterIgnoredFiles(files, config) {
17
21
  return files.filter((file) => !shouldIgnoreFile(file, config));
18
22
  }
23
+ export function getReviewBudgetModelIds(mode, agentModelOverrides, unifiedModelOverrides) {
24
+ const reviewMode = mode ?? 'multi-agent';
25
+ const modelIds = reviewMode === 'unified'
26
+ ? Object.values(unifiedModelOverrides)
27
+ : reviewMode === 'hybrid'
28
+ ? [...Object.values(agentModelOverrides), ...Object.values(unifiedModelOverrides)]
29
+ : Object.values(agentModelOverrides);
30
+ return [...new Set(modelIds)].filter((id) => !!id);
31
+ }
19
32
  /**
20
- * Connect to OpenCode server (or start in-process)
33
+ * Connect to Pi runtime (in-process by default)
21
34
  */
22
- export async function connectToOpenCode(config, workingDir, options) {
23
- console.log(chalk.gray('Connecting to OpenCode server...\n'));
35
+ export async function connectToRuntime(config, workingDir, options) {
36
+ console.log(chalk.gray('Connecting to Pi runtime...\n'));
24
37
  try {
25
38
  // Get model overrides from DRS config
26
39
  const modelOverrides = options?.modelOverrides ?? {
27
40
  ...getModelOverrides(config),
28
41
  ...getUnifiedModelOverride(config),
29
42
  };
30
- return await createOpencodeClientInstance({
31
- baseUrl: config.opencode.serverUrl || undefined,
32
- directory: workingDir || process.cwd(),
43
+ const runtimeConfig = getRuntimeConfig(config);
44
+ return await createRuntimeClientInstance({
45
+ directory: workingDir ?? process.cwd(),
33
46
  modelOverrides,
34
- provider: config.opencode.provider,
47
+ provider: runtimeConfig.provider,
35
48
  config,
36
49
  debug: options?.debug,
37
50
  });
38
51
  }
39
52
  catch (error) {
40
- console.error(chalk.red('✗ Failed to connect to OpenCode server'));
53
+ console.error(chalk.red('✗ Failed to connect to Pi runtime'));
41
54
  console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}\n`));
42
- console.log(chalk.yellow('Please ensure OpenCode server is running or check your configuration.\n'));
55
+ console.log(chalk.yellow('Please check your Pi runtime configuration and model credentials.\n'));
43
56
  throw error;
44
57
  }
45
58
  }
46
59
  /**
47
- * Execute a code review using OpenCode agents
60
+ * Execute a code review using Pi runtime agents.
48
61
  *
49
62
  * This is the core review orchestrator that handles:
50
63
  * - File filtering (ignore patterns)
51
- * - OpenCode connection
64
+ * - Pi runtime connection
52
65
  * - Agent execution and streaming
53
66
  * - Issue parsing and collection
54
67
  * - Summary calculation
@@ -72,11 +85,25 @@ export async function executeReview(config, source) {
72
85
  issues: [],
73
86
  summary: calculateSummary(0, []),
74
87
  filesReviewed: 0,
88
+ usage: createEmptyReviewUsageSummary(),
75
89
  };
76
90
  }
77
91
  console.log(chalk.gray(`Reviewing ${filteredFiles.length} file(s)\n`));
78
- // Connect to OpenCode
79
- const opencode = await connectToOpenCode(config, source.workingDir, { debug: source.debug });
92
+ // Include describer model overrides if describe is enabled
93
+ const describeEnabled = config.review.describe?.enabled ?? false;
94
+ const describeOverrides = describeEnabled ? getDescriberModelOverride(config) : {};
95
+ const agentModelOverrides = getModelOverrides(config);
96
+ const unifiedModelOverrides = getUnifiedModelOverride(config);
97
+ const reviewOverrides = {
98
+ ...agentModelOverrides,
99
+ ...unifiedModelOverrides,
100
+ ...describeOverrides,
101
+ };
102
+ // Connect to Pi runtime
103
+ const runtimeClient = await connectToRuntime(config, source.workingDir, {
104
+ debug: source.debug,
105
+ modelOverrides: reviewOverrides,
106
+ });
80
107
  try {
81
108
  // Build instructions - use provided diffs if available, otherwise fall back to git command
82
109
  const diffCommand = source.staged ? 'git diff --cached -- <file>' : 'git diff -- <file>';
@@ -90,32 +117,61 @@ export async function executeReview(config, source) {
90
117
  // No diffs provided - agents will need to run git diff
91
118
  filesForInstructions = filteredFiles.map((f) => ({ filename: f }));
92
119
  }
93
- const compression = compressFilesWithDiffs(filesForInstructions, config.contextCompression);
120
+ // ── Compress diffs once ──────────────────────────────────────────────
121
+ // Both the describe and review passes consume the same diff content.
122
+ // We compress once using the tightest budget across all models involved
123
+ // (describe + review) so neither pass exceeds any model's context window.
124
+ const reviewModelIds = getReviewBudgetModelIds(config.review.mode, agentModelOverrides, unifiedModelOverrides);
125
+ const describeModelIds = describeEnabled
126
+ ? [...new Set(Object.values(getDescriberModelOverride(config)))].filter((id) => !!id)
127
+ : [];
128
+ const allModelIds = [...reviewModelIds, ...describeModelIds];
129
+ const contextWindow = runtimeClient.getMinContextWindow(allModelIds);
130
+ const compressionOptions = resolveCompressionBudget(contextWindow, config.contextCompression);
131
+ const compression = prepareDiffsForAgent(filesForInstructions, compressionOptions);
94
132
  const compressionSummary = formatCompressionSummary(compression);
95
133
  if (compressionSummary) {
96
134
  console.log(chalk.yellow('⚠ Diff content trimmed to fit token budget.\n'));
97
135
  }
136
+ // ── Describe pass (optional) ─────────────────────────────────────────
137
+ let describeSummary;
138
+ if (describeEnabled && filesForInstructions.some((f) => f.patch)) {
139
+ try {
140
+ console.log(chalk.bold.blue('🔍 Running describe pass for change context\n'));
141
+ const preCompressed = {
142
+ files: compression.files,
143
+ compressionSummary: compressionSummary,
144
+ };
145
+ const { description } = await runDescribeAgent(runtimeClient, config, source.name, filesForInstructions, source.workingDir ?? process.cwd(), source.debug, preCompressed);
146
+ describeSummary = formatDescribeSummary(description);
147
+ }
148
+ catch (describeError) {
149
+ console.warn(chalk.yellow(`⚠ Describe pass failed, continuing review without change context: ${describeError instanceof Error ? describeError.message : String(describeError)}\n`));
150
+ }
151
+ }
152
+ // ── Review pass ──────────────────────────────────────────────────────
98
153
  const baseInstructions = buildBaseInstructions(source.name, compression.files, diffCommand, compressionSummary);
99
154
  // Run agents using shared core logic
100
- const result = await runReviewPipeline(opencode, config, baseInstructions, source.name, filteredFiles, source.context, source.workingDir || process.cwd(), source.debug || false);
155
+ const result = await runReviewPipeline(runtimeClient, config, baseInstructions, source.name, filteredFiles, { ...source.context, describeSummary }, source.workingDir ?? process.cwd(), source.debug ?? false);
101
156
  return {
102
157
  issues: result.issues,
103
158
  summary: result.summary,
104
159
  changeSummary: result.changeSummary,
105
160
  filesReviewed: result.filesReviewed,
161
+ usage: result.usage ?? createEmptyReviewUsageSummary(),
106
162
  };
107
163
  }
108
164
  catch (error) {
109
165
  // Handle "all agents failed" error
110
166
  if (error instanceof Error && error.message === 'All review agents failed') {
111
- await opencode.shutdown();
112
- process.exit(1);
167
+ await runtimeClient.shutdown();
168
+ exitProcess(1);
113
169
  }
114
170
  throw error;
115
171
  }
116
172
  finally {
117
- // Always shut down OpenCode client
118
- await opencode.shutdown();
173
+ // Always shut down Pi runtime client
174
+ await runtimeClient.shutdown();
119
175
  }
120
176
  }
121
177
  // Re-export display functions from core for backward compatibility