@diff-review-system/drs 2.2.0 → 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 (267) hide show
  1. package/README.md +228 -92
  2. package/dist/ci/runner.d.ts.map +1 -1
  3. package/dist/ci/runner.js +20 -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 +37 -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 +2 -1
  35. package/dist/cli/review-mr.d.ts.map +1 -1
  36. package/dist/cli/review-mr.js +93 -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 +2 -1
  43. package/dist/cli/review-pr.d.ts.map +1 -1
  44. package/dist/cli/review-pr.js +97 -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/client.d.ts +4 -0
  52. package/dist/github/client.d.ts.map +1 -1
  53. package/dist/github/client.js +10 -0
  54. package/dist/github/client.js.map +1 -1
  55. package/dist/github/platform-adapter.d.ts +1 -0
  56. package/dist/github/platform-adapter.d.ts.map +1 -1
  57. package/dist/github/platform-adapter.js +6 -2
  58. package/dist/github/platform-adapter.js.map +1 -1
  59. package/dist/gitlab/client.d.ts +4 -0
  60. package/dist/gitlab/client.d.ts.map +1 -1
  61. package/dist/gitlab/client.js +7 -1
  62. package/dist/gitlab/client.js.map +1 -1
  63. package/dist/gitlab/platform-adapter.d.ts +1 -0
  64. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  65. package/dist/gitlab/platform-adapter.js +3 -0
  66. package/dist/gitlab/platform-adapter.js.map +1 -1
  67. package/dist/lib/code-quality-report.js +1 -1
  68. package/dist/lib/comment-formatter.d.ts +9 -1
  69. package/dist/lib/comment-formatter.d.ts.map +1 -1
  70. package/dist/lib/comment-formatter.js +52 -1
  71. package/dist/lib/comment-formatter.js.map +1 -1
  72. package/dist/lib/comment-formatter.test.js +70 -1
  73. package/dist/lib/comment-formatter.test.js.map +1 -1
  74. package/dist/lib/comment-manager.d.ts +5 -0
  75. package/dist/lib/comment-manager.d.ts.map +1 -1
  76. package/dist/lib/comment-manager.js +11 -2
  77. package/dist/lib/comment-manager.js.map +1 -1
  78. package/dist/lib/comment-manager.test.js +63 -1
  79. package/dist/lib/comment-manager.test.js.map +1 -1
  80. package/dist/lib/comment-poster.d.ts +2 -1
  81. package/dist/lib/comment-poster.d.ts.map +1 -1
  82. package/dist/lib/comment-poster.js +2 -2
  83. package/dist/lib/comment-poster.js.map +1 -1
  84. package/dist/lib/comment-poster.test.js +27 -11
  85. package/dist/lib/comment-poster.test.js.map +1 -1
  86. package/dist/lib/config-model-overrides.test.d.ts +1 -1
  87. package/dist/lib/config-model-overrides.test.js +2 -2
  88. package/dist/lib/config-model-overrides.test.js.map +1 -1
  89. package/dist/lib/config.d.ts +36 -7
  90. package/dist/lib/config.d.ts.map +1 -1
  91. package/dist/lib/config.js +39 -13
  92. package/dist/lib/config.js.map +1 -1
  93. package/dist/lib/config.test.js +16 -0
  94. package/dist/lib/config.test.js.map +1 -1
  95. package/dist/lib/context-compression.d.ts +27 -1
  96. package/dist/lib/context-compression.d.ts.map +1 -1
  97. package/dist/lib/context-compression.js +106 -4
  98. package/dist/lib/context-compression.js.map +1 -1
  99. package/dist/lib/context-compression.test.js +305 -1
  100. package/dist/lib/context-compression.test.js.map +1 -1
  101. package/dist/lib/context-loader.d.ts +3 -2
  102. package/dist/lib/context-loader.d.ts.map +1 -1
  103. package/dist/lib/context-loader.js +11 -5
  104. package/dist/lib/context-loader.js.map +1 -1
  105. package/dist/lib/description-executor.d.ts +19 -2
  106. package/dist/lib/description-executor.d.ts.map +1 -1
  107. package/dist/lib/description-executor.js +52 -21
  108. package/dist/lib/description-executor.js.map +1 -1
  109. package/dist/lib/description-executor.test.d.ts +2 -0
  110. package/dist/lib/description-executor.test.d.ts.map +1 -0
  111. package/dist/lib/description-executor.test.js +120 -0
  112. package/dist/lib/description-executor.test.js.map +1 -0
  113. package/dist/lib/description-formatter.d.ts +8 -3
  114. package/dist/lib/description-formatter.d.ts.map +1 -1
  115. package/dist/lib/description-formatter.js +88 -13
  116. package/dist/lib/description-formatter.js.map +1 -1
  117. package/dist/lib/description-formatter.test.d.ts +2 -0
  118. package/dist/lib/description-formatter.test.d.ts.map +1 -0
  119. package/dist/lib/description-formatter.test.js +57 -0
  120. package/dist/lib/description-formatter.test.js.map +1 -0
  121. package/dist/lib/diff-parser.test.d.ts +2 -0
  122. package/dist/lib/diff-parser.test.d.ts.map +1 -0
  123. package/dist/lib/diff-parser.test.js +335 -0
  124. package/dist/lib/diff-parser.test.js.map +1 -0
  125. package/dist/lib/error-comment-poster.d.ts +19 -0
  126. package/dist/lib/error-comment-poster.d.ts.map +1 -0
  127. package/dist/lib/error-comment-poster.js +57 -0
  128. package/dist/lib/error-comment-poster.js.map +1 -0
  129. package/dist/lib/error-comment-poster.test.d.ts +2 -0
  130. package/dist/lib/error-comment-poster.test.d.ts.map +1 -0
  131. package/dist/lib/error-comment-poster.test.js +128 -0
  132. package/dist/lib/error-comment-poster.test.js.map +1 -0
  133. package/dist/lib/exit.d.ts +35 -0
  134. package/dist/lib/exit.d.ts.map +1 -0
  135. package/dist/lib/exit.js +53 -0
  136. package/dist/lib/exit.js.map +1 -0
  137. package/dist/lib/exit.test.d.ts +2 -0
  138. package/dist/lib/exit.test.d.ts.map +1 -0
  139. package/dist/lib/exit.test.js +120 -0
  140. package/dist/lib/exit.test.js.map +1 -0
  141. package/dist/lib/format-utils.d.ts +3 -0
  142. package/dist/lib/format-utils.d.ts.map +1 -0
  143. package/dist/lib/format-utils.js +7 -0
  144. package/dist/lib/format-utils.js.map +1 -0
  145. package/dist/lib/json-output.d.ts +4 -1
  146. package/dist/lib/json-output.d.ts.map +1 -1
  147. package/dist/lib/json-output.js +2 -1
  148. package/dist/lib/json-output.js.map +1 -1
  149. package/dist/lib/json-output.test.d.ts +2 -0
  150. package/dist/lib/json-output.test.d.ts.map +1 -0
  151. package/dist/lib/json-output.test.js +135 -0
  152. package/dist/lib/json-output.test.js.map +1 -0
  153. package/dist/lib/logger.d.ts +130 -0
  154. package/dist/lib/logger.d.ts.map +1 -0
  155. package/dist/lib/logger.js +233 -0
  156. package/dist/lib/logger.js.map +1 -0
  157. package/dist/lib/logger.test.d.ts +2 -0
  158. package/dist/lib/logger.test.d.ts.map +1 -0
  159. package/dist/lib/logger.test.js +324 -0
  160. package/dist/lib/logger.test.js.map +1 -0
  161. package/dist/lib/platform-client.d.ts +4 -0
  162. package/dist/lib/platform-client.d.ts.map +1 -1
  163. package/dist/lib/position-validator.test.d.ts +2 -0
  164. package/dist/lib/position-validator.test.d.ts.map +1 -0
  165. package/dist/lib/position-validator.test.js +128 -0
  166. package/dist/lib/position-validator.test.js.map +1 -0
  167. package/dist/lib/repository-validator.js +1 -1
  168. package/dist/lib/review-core.d.ts +9 -4
  169. package/dist/lib/review-core.d.ts.map +1 -1
  170. package/dist/lib/review-core.js +230 -48
  171. package/dist/lib/review-core.js.map +1 -1
  172. package/dist/lib/review-core.test.js +78 -30
  173. package/dist/lib/review-core.test.js.map +1 -1
  174. package/dist/lib/review-orchestrator.d.ts +12 -7
  175. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  176. package/dist/lib/review-orchestrator.js +78 -22
  177. package/dist/lib/review-orchestrator.js.map +1 -1
  178. package/dist/lib/review-orchestrator.test.js +160 -42
  179. package/dist/lib/review-orchestrator.test.js.map +1 -1
  180. package/dist/lib/review-parser.test.d.ts +2 -0
  181. package/dist/lib/review-parser.test.d.ts.map +1 -0
  182. package/dist/lib/review-parser.test.js +130 -0
  183. package/dist/lib/review-parser.test.js.map +1 -0
  184. package/dist/lib/review-usage.d.ts +32 -0
  185. package/dist/lib/review-usage.d.ts.map +1 -0
  186. package/dist/lib/review-usage.js +72 -0
  187. package/dist/lib/review-usage.js.map +1 -0
  188. package/dist/lib/review-usage.test.d.ts +2 -0
  189. package/dist/lib/review-usage.test.d.ts.map +1 -0
  190. package/dist/lib/review-usage.test.js +83 -0
  191. package/dist/lib/review-usage.test.js.map +1 -0
  192. package/dist/lib/unified-review-executor.d.ts +8 -2
  193. package/dist/lib/unified-review-executor.d.ts.map +1 -1
  194. package/dist/lib/unified-review-executor.js +111 -66
  195. package/dist/lib/unified-review-executor.js.map +1 -1
  196. package/dist/lib/unified-review-executor.test.js +138 -16
  197. package/dist/lib/unified-review-executor.test.js.map +1 -1
  198. package/dist/lib/write-json-output.test.d.ts +2 -0
  199. package/dist/lib/write-json-output.test.d.ts.map +1 -0
  200. package/dist/lib/write-json-output.test.js +259 -0
  201. package/dist/lib/write-json-output.test.js.map +1 -0
  202. package/dist/pi/sdk.d.ts +94 -0
  203. package/dist/pi/sdk.d.ts.map +1 -0
  204. package/dist/pi/sdk.js +486 -0
  205. package/dist/pi/sdk.js.map +1 -0
  206. package/dist/pi/sdk.test.d.ts +2 -0
  207. package/dist/pi/sdk.test.d.ts.map +1 -0
  208. package/dist/pi/sdk.test.js +331 -0
  209. package/dist/pi/sdk.test.js.map +1 -0
  210. package/dist/{opencode → runtime}/agent-loader.d.ts +7 -5
  211. package/dist/runtime/agent-loader.d.ts.map +1 -0
  212. package/dist/{opencode → runtime}/agent-loader.js +24 -19
  213. package/dist/runtime/agent-loader.js.map +1 -0
  214. package/dist/runtime/agent-loader.test.d.ts +2 -0
  215. package/dist/runtime/agent-loader.test.d.ts.map +1 -0
  216. package/dist/runtime/agent-loader.test.js +280 -0
  217. package/dist/runtime/agent-loader.test.js.map +1 -0
  218. package/dist/runtime/built-in-paths.d.ts +2 -0
  219. package/dist/runtime/built-in-paths.d.ts.map +1 -0
  220. package/dist/runtime/built-in-paths.js +14 -0
  221. package/dist/runtime/built-in-paths.js.map +1 -0
  222. package/dist/runtime/client.d.ts +107 -0
  223. package/dist/runtime/client.d.ts.map +1 -0
  224. package/dist/runtime/client.js +486 -0
  225. package/dist/runtime/client.js.map +1 -0
  226. package/dist/{opencode → runtime}/client.test.d.ts.map +1 -1
  227. package/dist/runtime/client.test.js +392 -0
  228. package/dist/runtime/client.test.js.map +1 -0
  229. package/dist/runtime/path-config.d.ts +8 -0
  230. package/dist/runtime/path-config.d.ts.map +1 -0
  231. package/dist/runtime/path-config.js +68 -0
  232. package/dist/runtime/path-config.js.map +1 -0
  233. package/dist/runtime/path-config.test.d.ts +2 -0
  234. package/dist/runtime/path-config.test.d.ts.map +1 -0
  235. package/dist/runtime/path-config.test.js +103 -0
  236. package/dist/runtime/path-config.test.js.map +1 -0
  237. package/package.json +5 -5
  238. package/.opencode/opencode.jsonc +0 -15
  239. package/.opencode/tool/write_json_output.ts +0 -24
  240. package/dist/opencode/agent-loader.d.ts.map +0 -1
  241. package/dist/opencode/agent-loader.js.map +0 -1
  242. package/dist/opencode/agent-skill-overlay.d.ts +0 -11
  243. package/dist/opencode/agent-skill-overlay.d.ts.map +0 -1
  244. package/dist/opencode/agent-skill-overlay.js +0 -164
  245. package/dist/opencode/agent-skill-overlay.js.map +0 -1
  246. package/dist/opencode/client.d.ts +0 -91
  247. package/dist/opencode/client.d.ts.map +0 -1
  248. package/dist/opencode/client.js +0 -463
  249. package/dist/opencode/client.js.map +0 -1
  250. package/dist/opencode/client.test.js +0 -317
  251. package/dist/opencode/client.test.js.map +0 -1
  252. package/dist/opencode/opencode-paths.d.ts +0 -2
  253. package/dist/opencode/opencode-paths.d.ts.map +0 -1
  254. package/dist/opencode/opencode-paths.js +0 -7
  255. package/dist/opencode/opencode-paths.js.map +0 -1
  256. package/dist/opencode/skill-loader.d.ts +0 -6
  257. package/dist/opencode/skill-loader.d.ts.map +0 -1
  258. package/dist/opencode/skill-loader.js +0 -36
  259. package/dist/opencode/skill-loader.js.map +0 -1
  260. /package/{.opencode/agent → .pi/agents}/describe/pr-describer.md +0 -0
  261. /package/{.opencode/agent → .pi/agents}/review/documentation.md +0 -0
  262. /package/{.opencode/agent → .pi/agents}/review/performance.md +0 -0
  263. /package/{.opencode/agent → .pi/agents}/review/quality.md +0 -0
  264. /package/{.opencode/agent → .pi/agents}/review/security.md +0 -0
  265. /package/{.opencode/agent → .pi/agents}/review/style.md +0 -0
  266. /package/{.opencode/agent → .pi/agents}/review/unified-reviewer.md +0 -0
  267. /package/dist/{opencode → runtime}/client.test.d.ts +0 -0
@@ -8,6 +8,7 @@ vi.mock('./config.js', () => ({
8
8
  getModelOverrides: vi.fn(() => ({})),
9
9
  getUnifiedModelOverride: vi.fn(() => ({})),
10
10
  getDescriberModelOverride: vi.fn(() => ({})),
11
+ getDefaultModel: vi.fn(() => undefined),
11
12
  }));
12
13
  vi.mock('./repository-validator.js', () => ({
13
14
  enforceRepoBranchMatch: vi.fn().mockResolvedValue(undefined),
@@ -18,14 +19,27 @@ vi.mock('./repository-validator.js', () => ({
18
19
  })),
19
20
  getCanonicalDiffCommand: vi.fn(() => 'git diff origin/main origin/feature -- <file>'),
20
21
  }));
21
- vi.mock('./review-orchestrator.js', () => ({
22
- filterIgnoredFiles: vi.fn((files) => files),
23
- connectToOpenCode: vi.fn(() => ({
22
+ vi.mock('./review-orchestrator.js', () => {
23
+ const connectToRuntime = vi.fn(() => ({
24
24
  createSession: vi.fn(),
25
25
  streamMessages: vi.fn(),
26
26
  shutdown: vi.fn().mockResolvedValue(undefined),
27
- })),
28
- }));
27
+ getMinContextWindow: vi.fn(() => undefined),
28
+ }));
29
+ return {
30
+ filterIgnoredFiles: vi.fn((files) => files),
31
+ connectToRuntime,
32
+ getReviewBudgetModelIds: vi.fn((mode, agentModelOverrides, unifiedModelOverrides) => {
33
+ const reviewMode = mode ?? 'multi-agent';
34
+ const modelIds = reviewMode === 'unified'
35
+ ? Object.values(unifiedModelOverrides)
36
+ : reviewMode === 'hybrid'
37
+ ? [...Object.values(agentModelOverrides), ...Object.values(unifiedModelOverrides)]
38
+ : Object.values(agentModelOverrides);
39
+ return [...new Set(modelIds)].filter((id) => !!id);
40
+ }),
41
+ };
42
+ });
29
43
  vi.mock('./review-core.js', () => ({
30
44
  buildBaseInstructions: vi.fn(() => 'Review these files...'),
31
45
  runReviewPipeline: vi.fn(() => ({
@@ -71,6 +85,11 @@ vi.mock('./json-output.js', () => ({
71
85
  writeReviewJson: vi.fn().mockResolvedValue(undefined),
72
86
  printReviewJson: vi.fn(),
73
87
  }));
88
+ vi.mock('./context-compression.js', () => ({
89
+ prepareDiffsForAgent: vi.fn((files) => ({ files, generated: [] })),
90
+ formatCompressionSummary: vi.fn(() => ''),
91
+ resolveCompressionBudget: vi.fn((_contextWindow, options) => options ?? {}),
92
+ }));
74
93
  vi.mock('fs/promises', () => ({
75
94
  writeFile: vi.fn().mockResolvedValue(undefined),
76
95
  }));
@@ -113,7 +132,7 @@ describe('unified-review-executor', () => {
113
132
  contextCompression: {
114
133
  maxTokens: 10000,
115
134
  },
116
- opencode: {},
135
+ pi: {},
117
136
  gitlab: {
118
137
  url: 'https://gitlab.com',
119
138
  token: 'mock-token',
@@ -141,6 +160,107 @@ describe('unified-review-executor', () => {
141
160
  expect(mockPlatformClient.getPullRequest).toHaveBeenCalledWith('owner/repo', 123);
142
161
  expect(mockPlatformClient.getChangedFiles).toHaveBeenCalledWith('owner/repo', 123);
143
162
  });
163
+ it('should use pre-fetched PR and file data when provided', async () => {
164
+ const options = {
165
+ platformClient: mockPlatformClient,
166
+ projectId: 'owner/repo',
167
+ prNumber: 123,
168
+ postComments: false,
169
+ pullRequest: {
170
+ number: 123,
171
+ title: 'Preloaded PR',
172
+ author: 'test-user',
173
+ sourceBranch: 'feature',
174
+ targetBranch: 'main',
175
+ headSha: 'head-sha',
176
+ platformData: {},
177
+ },
178
+ changedFiles: [
179
+ {
180
+ filename: 'src/preloaded.ts',
181
+ status: 'modified',
182
+ additions: 1,
183
+ deletions: 0,
184
+ patch: '+preloaded change',
185
+ },
186
+ ],
187
+ };
188
+ await executeUnifiedReview(mockConfig, options);
189
+ expect(mockPlatformClient.getPullRequest).not.toHaveBeenCalled();
190
+ expect(mockPlatformClient.getChangedFiles).not.toHaveBeenCalled();
191
+ });
192
+ it('should include platform patches in review instructions when available', async () => {
193
+ const { buildBaseInstructions } = await import('./review-core.js');
194
+ const options = {
195
+ platformClient: mockPlatformClient,
196
+ projectId: 'owner/repo',
197
+ prNumber: 123,
198
+ postComments: false,
199
+ };
200
+ await executeUnifiedReview(mockConfig, options);
201
+ expect(buildBaseInstructions).toHaveBeenCalledWith('PR/MR #123', expect.arrayContaining([
202
+ expect.objectContaining({ filename: 'src/test.ts', patch: '+added line' }),
203
+ expect.objectContaining({ filename: 'src/utils.ts', patch: '+new file' }),
204
+ ]), 'git diff origin/main origin/feature -- <file>', '');
205
+ });
206
+ it('uses only unified model IDs for budget sizing in unified mode', async () => {
207
+ const { getModelOverrides, getUnifiedModelOverride } = await import('./config.js');
208
+ const { connectToRuntime } = await import('./review-orchestrator.js');
209
+ vi.mocked(getModelOverrides).mockReturnValueOnce({
210
+ 'review/security': 'provider/small-8k',
211
+ });
212
+ vi.mocked(getUnifiedModelOverride).mockReturnValueOnce({
213
+ 'review/unified-reviewer': 'provider/large-200k',
214
+ });
215
+ const mockRuntimeClient = {
216
+ shutdown: vi.fn().mockResolvedValue(undefined),
217
+ getMinContextWindow: vi.fn(() => undefined),
218
+ };
219
+ vi.mocked(connectToRuntime).mockResolvedValueOnce(mockRuntimeClient);
220
+ const options = {
221
+ platformClient: mockPlatformClient,
222
+ projectId: 'owner/repo',
223
+ prNumber: 123,
224
+ postComments: false,
225
+ };
226
+ await executeUnifiedReview({
227
+ ...mockConfig,
228
+ review: {
229
+ ...mockConfig.review,
230
+ mode: 'unified',
231
+ },
232
+ }, options);
233
+ expect(mockRuntimeClient.getMinContextWindow).toHaveBeenCalledWith(['provider/large-200k']);
234
+ });
235
+ it('uses only multi-agent model IDs for budget sizing in multi-agent mode', async () => {
236
+ const { getModelOverrides, getUnifiedModelOverride } = await import('./config.js');
237
+ const { connectToRuntime } = await import('./review-orchestrator.js');
238
+ vi.mocked(getModelOverrides).mockReturnValueOnce({
239
+ 'review/security': 'provider/large-200k',
240
+ });
241
+ vi.mocked(getUnifiedModelOverride).mockReturnValueOnce({
242
+ 'review/unified-reviewer': 'provider/small-8k',
243
+ });
244
+ const mockRuntimeClient = {
245
+ shutdown: vi.fn().mockResolvedValue(undefined),
246
+ getMinContextWindow: vi.fn(() => undefined),
247
+ };
248
+ vi.mocked(connectToRuntime).mockResolvedValueOnce(mockRuntimeClient);
249
+ const options = {
250
+ platformClient: mockPlatformClient,
251
+ projectId: 'owner/repo',
252
+ prNumber: 123,
253
+ postComments: false,
254
+ };
255
+ await executeUnifiedReview({
256
+ ...mockConfig,
257
+ review: {
258
+ ...mockConfig.review,
259
+ mode: 'multi-agent',
260
+ },
261
+ }, options);
262
+ expect(mockRuntimeClient.getMinContextWindow).toHaveBeenCalledWith(['provider/large-200k']);
263
+ });
144
264
  it('should enforce repository branch match', async () => {
145
265
  const { enforceRepoBranchMatch } = await import('./repository-validator.js');
146
266
  const options = {
@@ -313,12 +433,13 @@ describe('unified-review-executor', () => {
313
433
  skipBranchCheck: undefined,
314
434
  }));
315
435
  });
316
- it('should shutdown OpenCode on completion', async () => {
317
- const { connectToOpenCode } = await import('./review-orchestrator.js');
318
- const mockOpencode = {
436
+ it('should shutdown runtime client on completion', async () => {
437
+ const { connectToRuntime } = await import('./review-orchestrator.js');
438
+ const mockRuntimeClient = {
319
439
  shutdown: vi.fn().mockResolvedValue(undefined),
440
+ getMinContextWindow: vi.fn(() => undefined),
320
441
  };
321
- vi.mocked(connectToOpenCode).mockResolvedValueOnce(mockOpencode);
442
+ vi.mocked(connectToRuntime).mockResolvedValueOnce(mockRuntimeClient);
322
443
  const options = {
323
444
  platformClient: mockPlatformClient,
324
445
  projectId: 'owner/repo',
@@ -326,15 +447,16 @@ describe('unified-review-executor', () => {
326
447
  postComments: false,
327
448
  };
328
449
  await executeUnifiedReview(mockConfig, options);
329
- expect(mockOpencode.shutdown).toHaveBeenCalled();
450
+ expect(mockRuntimeClient.shutdown).toHaveBeenCalled();
330
451
  });
331
- it('should shutdown OpenCode on error', async () => {
452
+ it('should shutdown runtime client on error', async () => {
332
453
  const { runReviewPipeline } = await import('./review-core.js');
333
- const { connectToOpenCode } = await import('./review-orchestrator.js');
334
- const mockOpencode = {
454
+ const { connectToRuntime } = await import('./review-orchestrator.js');
455
+ const mockRuntimeClient = {
335
456
  shutdown: vi.fn().mockResolvedValue(undefined),
457
+ getMinContextWindow: vi.fn(() => undefined),
336
458
  };
337
- vi.mocked(connectToOpenCode).mockResolvedValueOnce(mockOpencode);
459
+ vi.mocked(connectToRuntime).mockResolvedValueOnce(mockRuntimeClient);
338
460
  vi.mocked(runReviewPipeline).mockRejectedValueOnce(new Error('Test error'));
339
461
  const options = {
340
462
  platformClient: mockPlatformClient,
@@ -343,7 +465,7 @@ describe('unified-review-executor', () => {
343
465
  postComments: false,
344
466
  };
345
467
  await expect(executeUnifiedReview(mockConfig, options)).rejects.toThrow('Test error');
346
- expect(mockOpencode.shutdown).toHaveBeenCalled();
468
+ expect(mockRuntimeClient.shutdown).toHaveBeenCalled();
347
469
  });
348
470
  });
349
471
  });
@@ -1 +1 @@
1
- {"version":3,"file":"unified-review-executor.test.js","sourceRoot":"","sources":["../../src/lib/unified-review-executor.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unified-review-executor.test.js","sourceRoot":"","sources":["../../src/lib/unified-review-executor.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAA6B,MAAM,8BAA8B,CAAC;AAI/F,wBAAwB;AACxB,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1C,yBAAyB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5C,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;CACxC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;IAC5D,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,aAAa;QACjC,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IACH,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,+CAA+C,CAAC;CACtF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACvC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;QACvB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KAC5C,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QAC3C,gBAAgB;QAChB,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,EAAE;YAClF,MAAM,UAAU,GAAG,IAAI,IAAI,aAAa,CAAC;YACzC,MAAM,QAAQ,GACZ,UAAU,KAAK,SAAS;gBACtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;gBACtC,CAAC,CAAC,UAAU,KAAK,QAAQ;oBACvB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAClF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE3C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC;IAC3D,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE;YACP,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACvD,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;SACpF;QACD,MAAM,EAAE;YACN;gBACE,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,qBAAqB;gBAC9B,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,SAAS;aACjB;SACF;QACD,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IACH,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC9B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CACzD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC9C,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,kBAAkB;KAChC,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,yBAAyB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;CAC3C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;IACrD,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;CACzB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACzC,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,cAAuB,EAAE,OAAgB,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;CAC9F,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CAChD,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,kBAAkC,CAAC;IACvC,IAAI,UAAqB,CAAC;IAC1B,IAAI,aAAkB,CAAC;IACvB,IAAI,cAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,mDAAmD;QACnD,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,cAAc,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,SAAkB,CAAC,CAAC;QAExF,kBAAkB,GAAG;YACnB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACxC,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,SAAS;gBACvB,YAAY,EAAE,MAAM;gBACpB,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACzC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE;gBACrE,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;aAClE,CAAC;YACF,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;YACtB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;YACtB,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;YACjC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;SACU,CAAC;QAE/B,UAAU,GAAG;YACX,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;gBAC/B,IAAI,EAAE,aAAa;gBACnB,cAAc,EAAE,EAAE;gBAClB,eAAe,EAAE,EAAE;aACpB;YACD,kBAAkB,EAAE;gBAClB,SAAS,EAAE,KAAK;aACjB;YACD,EAAE,EAAE,EAAE;YACN,MAAM,EAAE;gBACN,GAAG,EAAE,oBAAoB;gBACzB,KAAK,EAAE,YAAY;aACpB;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY;aACpB;SACsB,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,WAAW,EAAE,CAAC;QAC5B,cAAc,CAAC,WAAW,EAAE,CAAC;QAC7B,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,WAAW;aACxB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAClF,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE;oBACX,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,cAAc;oBACrB,MAAM,EAAE,WAAW;oBACnB,YAAY,EAAE,SAAS;oBACvB,YAAY,EAAE,MAAM;oBACpB,OAAO,EAAE,UAAU;oBACnB,YAAY,EAAE,EAAE;iBACjB;gBACD,YAAY,EAAE;oBACZ;wBACE,QAAQ,EAAE,kBAAkB;wBAC5B,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE,mBAAmB;qBAC3B;iBACF;aACF,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjE,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChD,YAAY,EACZ,MAAM,CAAC,eAAe,CAAC;gBACrB,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBAC1E,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;aAC1E,CAAC,EACF,+CAA+C,EAC/C,EAAE,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACnF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAEtE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,mBAAmB,CAAC;gBAC/C,iBAAiB,EAAE,mBAAmB;aACvC,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,mBAAmB,CAAC;gBACrD,yBAAyB,EAAE,qBAAqB;aACjD,CAAC,CAAC;YAEH,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aAC5C,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,iBAAwB,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CACxB;gBACE,GAAG,UAAU;gBACb,MAAM,EAAE;oBACN,GAAG,UAAU,CAAC,MAAM;oBACpB,IAAI,EAAE,SAAS;iBAChB;aACW,EACd,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACnF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAEtE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,mBAAmB,CAAC;gBAC/C,iBAAiB,EAAE,qBAAqB;aACzC,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,mBAAmB,CAAC;gBACrD,yBAAyB,EAAE,mBAAmB;aAC/C,CAAC,CAAC;YAEH,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aAC5C,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,iBAAwB,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CACxB;gBACE,GAAG,UAAU;gBACb,MAAM,EAAE;oBACN,GAAG,UAAU,CAAC,MAAM;oBACpB,IAAI,EAAE,aAAa;iBACpB;aACW,EACd,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAE7E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,WAAW;aACxB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CACjD,WAAW,EACX,YAAY,EACZ,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EACxC,MAAM,CAAC,gBAAgB,CAAC;gBACtB,aAAa,EAAE,SAAS;gBACxB,eAAe,EAAE,SAAS;aAC3B,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAExE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,EACvD,UAAU,CACX,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,kBAAkB,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,kBAAkB,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC7D,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC5D,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;aAC7D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACxE,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAC9C,UAAU,CACX,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,IAAI;aACnB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAElD,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,iBAAiB,EAAE,aAAa;gBAChC,UAAU,EAAE,WAAW;aACxB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACtC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAE/E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,IAAI;aACjB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAE7D,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,aAAa;gBACzB,UAAU,EAAE,WAAW;aACxB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC/D,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC;gBACjD,OAAO,EAAE;oBACP,WAAW,EAAE,CAAC;oBACd,aAAa,EAAE,CAAC;oBAChB,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;oBACvD,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;iBACpF;gBACD,MAAM,EAAE,EAAE;gBACV,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,CAAC;gBAChB,YAAY,EAAE,EAAE;aACjB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAE3E,MAAM,kBAAkB,GAAG;gBACzB,GAAG,UAAU;gBACb,MAAM,EAAE;oBACN,GAAG,UAAU,CAAC,MAAM;oBACpB,QAAQ,EAAE;wBACR,OAAO,EAAE,IAAI;wBACb,eAAe,EAAE,IAAI;qBACtB;iBACF;aACF,CAAC;YAEF,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAExD,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAE7E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CACjD,OAAO,CAAC,GAAG,EAAE,EACb,YAAY,EACZ,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,MAAM,CAAC,gBAAgB,CAAC;gBACtB,aAAa,EAAE,SAAS;gBACxB,eAAe,EAAE,SAAS;aAC3B,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACtE,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aAC5C,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,iBAAwB,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEhD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC/D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAEtE,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aAC5C,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,iBAAwB,CAAC,CAAC;YAC5E,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAyB;gBACpC,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtF,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=write-json-output.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-json-output.test.d.ts","sourceRoot":"","sources":["../../src/lib/write-json-output.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,259 @@
1
+ import { describe, it, expect, afterEach } from 'vitest';
2
+ import { writeJsonOutput } from './write-json-output.js';
3
+ import { readFile, rm, mkdir } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { tmpdir } from 'os';
6
+ // ── Helpers ──────────────────────────────────────────────────────
7
+ let testDir;
8
+ async function createTestDir() {
9
+ testDir = join(tmpdir(), `drs-write-json-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
10
+ await mkdir(testDir, { recursive: true });
11
+ return testDir;
12
+ }
13
+ afterEach(async () => {
14
+ if (testDir) {
15
+ await rm(testDir, { recursive: true, force: true });
16
+ }
17
+ });
18
+ // ── Valid payloads ───────────────────────────────────────────────
19
+ const VALID_REVIEW_PAYLOAD = {
20
+ timestamp: '2026-02-24T00:00:00Z',
21
+ summary: {
22
+ filesReviewed: 3,
23
+ issuesFound: 1,
24
+ bySeverity: { CRITICAL: 0, HIGH: 1, MEDIUM: 0, LOW: 0 },
25
+ byCategory: { SECURITY: 1, QUALITY: 0, STYLE: 0, PERFORMANCE: 0, DOCUMENTATION: 0 },
26
+ },
27
+ issues: [
28
+ {
29
+ category: 'SECURITY',
30
+ severity: 'HIGH',
31
+ title: 'SQL Injection',
32
+ file: 'src/db.ts',
33
+ problem: 'Unsanitized input',
34
+ solution: 'Use parameterized queries',
35
+ agent: 'security',
36
+ },
37
+ ],
38
+ };
39
+ const VALID_DESCRIBE_PAYLOAD = {
40
+ type: 'feature',
41
+ title: 'Add user authentication',
42
+ summary: ['Added login and registration endpoints'],
43
+ };
44
+ // ── writeJsonOutput ──────────────────────────────────────────────
45
+ describe('writeJsonOutput', () => {
46
+ describe('review_output', () => {
47
+ it('writes valid review output to default path', async () => {
48
+ const dir = await createTestDir();
49
+ const result = await writeJsonOutput({
50
+ outputType: 'review_output',
51
+ payload: VALID_REVIEW_PAYLOAD,
52
+ workingDir: dir,
53
+ });
54
+ expect(result.outputType).toBe('review_output');
55
+ expect(result.outputPath).toBe('.drs/review-output.json');
56
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
57
+ const parsed = JSON.parse(content);
58
+ expect(parsed.timestamp).toBe('2026-02-24T00:00:00Z');
59
+ expect(parsed.issues).toHaveLength(1);
60
+ });
61
+ it('formats with default 2-space indent', async () => {
62
+ const dir = await createTestDir();
63
+ await writeJsonOutput({
64
+ outputType: 'review_output',
65
+ payload: VALID_REVIEW_PAYLOAD,
66
+ workingDir: dir,
67
+ });
68
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
69
+ // Default indent is 2 spaces
70
+ expect(content).toContain(' "timestamp"');
71
+ });
72
+ it('respects custom indent', async () => {
73
+ const dir = await createTestDir();
74
+ await writeJsonOutput({
75
+ outputType: 'review_output',
76
+ payload: VALID_REVIEW_PAYLOAD,
77
+ indent: 4,
78
+ workingDir: dir,
79
+ });
80
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
81
+ expect(content).toContain(' "timestamp"');
82
+ });
83
+ it('writes compact JSON when pretty is false', async () => {
84
+ const dir = await createTestDir();
85
+ await writeJsonOutput({
86
+ outputType: 'review_output',
87
+ payload: VALID_REVIEW_PAYLOAD,
88
+ pretty: false,
89
+ workingDir: dir,
90
+ });
91
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
92
+ // No newlines in compact JSON
93
+ expect(content).not.toContain('\n');
94
+ });
95
+ it('accepts payload as JSON string', async () => {
96
+ const dir = await createTestDir();
97
+ await writeJsonOutput({
98
+ outputType: 'review_output',
99
+ payload: JSON.stringify(VALID_REVIEW_PAYLOAD),
100
+ workingDir: dir,
101
+ });
102
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
103
+ const parsed = JSON.parse(content);
104
+ expect(parsed.issues).toHaveLength(1);
105
+ });
106
+ it('includes optional metadata', async () => {
107
+ const dir = await createTestDir();
108
+ const withMetadata = {
109
+ ...VALID_REVIEW_PAYLOAD,
110
+ metadata: {
111
+ source: 'MR !42',
112
+ project: 'myorg/myrepo',
113
+ branch: { source: 'feature', target: 'main' },
114
+ },
115
+ };
116
+ await writeJsonOutput({
117
+ outputType: 'review_output',
118
+ payload: withMetadata,
119
+ workingDir: dir,
120
+ });
121
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
122
+ const parsed = JSON.parse(content);
123
+ expect(parsed.metadata.project).toBe('myorg/myrepo');
124
+ });
125
+ });
126
+ describe('describe_output', () => {
127
+ it('writes valid describe output', async () => {
128
+ const dir = await createTestDir();
129
+ const result = await writeJsonOutput({
130
+ outputType: 'describe_output',
131
+ payload: VALID_DESCRIBE_PAYLOAD,
132
+ workingDir: dir,
133
+ });
134
+ expect(result.outputType).toBe('describe_output');
135
+ expect(result.outputPath).toBe('.drs/describe-output.json');
136
+ const content = await readFile(join(dir, '.drs/describe-output.json'), 'utf-8');
137
+ const parsed = JSON.parse(content);
138
+ expect(parsed.type).toBe('feature');
139
+ expect(parsed.title).toBe('Add user authentication');
140
+ });
141
+ it('accepts describe output with walkthrough', async () => {
142
+ const dir = await createTestDir();
143
+ const withWalkthrough = {
144
+ ...VALID_DESCRIBE_PAYLOAD,
145
+ walkthrough: [
146
+ {
147
+ file: 'src/auth.ts',
148
+ changeType: 'added',
149
+ semanticLabel: 'feature',
150
+ title: 'Auth module',
151
+ changes: ['Added login handler'],
152
+ significance: 'major',
153
+ },
154
+ ],
155
+ };
156
+ await writeJsonOutput({
157
+ outputType: 'describe_output',
158
+ payload: withWalkthrough,
159
+ workingDir: dir,
160
+ });
161
+ const content = await readFile(join(dir, '.drs/describe-output.json'), 'utf-8');
162
+ const parsed = JSON.parse(content);
163
+ expect(parsed.walkthrough).toHaveLength(1);
164
+ });
165
+ });
166
+ describe('validation errors', () => {
167
+ it('rejects review output missing required fields', async () => {
168
+ const dir = await createTestDir();
169
+ await expect(writeJsonOutput({
170
+ outputType: 'review_output',
171
+ payload: { issues: [] }, // missing timestamp, summary
172
+ workingDir: dir,
173
+ })).rejects.toThrow('Output validation failed');
174
+ });
175
+ it('rejects review output with invalid severity', async () => {
176
+ const dir = await createTestDir();
177
+ const invalid = {
178
+ ...VALID_REVIEW_PAYLOAD,
179
+ issues: [
180
+ {
181
+ ...VALID_REVIEW_PAYLOAD.issues[0],
182
+ severity: 'UNKNOWN', // not in enum
183
+ },
184
+ ],
185
+ };
186
+ await expect(writeJsonOutput({
187
+ outputType: 'review_output',
188
+ payload: invalid,
189
+ workingDir: dir,
190
+ })).rejects.toThrow('Output validation failed');
191
+ });
192
+ it('rejects review output with additional properties', async () => {
193
+ const dir = await createTestDir();
194
+ const invalid = {
195
+ ...VALID_REVIEW_PAYLOAD,
196
+ extraField: 'not allowed',
197
+ };
198
+ await expect(writeJsonOutput({
199
+ outputType: 'review_output',
200
+ payload: invalid,
201
+ workingDir: dir,
202
+ })).rejects.toThrow('Output validation failed');
203
+ });
204
+ it('rejects describe output missing required fields', async () => {
205
+ const dir = await createTestDir();
206
+ await expect(writeJsonOutput({
207
+ outputType: 'describe_output',
208
+ payload: { title: 'Missing type and summary' },
209
+ workingDir: dir,
210
+ })).rejects.toThrow('Output validation failed');
211
+ });
212
+ it('rejects describe output with invalid type', async () => {
213
+ const dir = await createTestDir();
214
+ await expect(writeJsonOutput({
215
+ outputType: 'describe_output',
216
+ payload: { type: 'invalid', title: 'Test', summary: ['test'] },
217
+ workingDir: dir,
218
+ })).rejects.toThrow('Output validation failed');
219
+ });
220
+ it('rejects invalid JSON string payload', async () => {
221
+ const dir = await createTestDir();
222
+ await expect(writeJsonOutput({
223
+ outputType: 'review_output',
224
+ payload: 'not valid json',
225
+ workingDir: dir,
226
+ })).rejects.toThrow(); // JSON.parse error
227
+ });
228
+ });
229
+ describe('security', () => {
230
+ it('rejects path traversal in resolved output path', async () => {
231
+ // The function uses OUTPUT_PATHS constants so path traversal would need
232
+ // to come from the workingDir itself being crafted — but resolveWithinWorkingDir
233
+ // prevents escaping. This test verifies the guard exists.
234
+ const dir = await createTestDir();
235
+ // Valid — writes within workingDir
236
+ await writeJsonOutput({
237
+ outputType: 'review_output',
238
+ payload: VALID_REVIEW_PAYLOAD,
239
+ workingDir: dir,
240
+ });
241
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
242
+ expect(JSON.parse(content)).toBeTruthy();
243
+ });
244
+ });
245
+ describe('directory creation', () => {
246
+ it('creates .drs directory if it does not exist', async () => {
247
+ const dir = await createTestDir();
248
+ // .drs doesn't exist yet in a fresh temp dir
249
+ await writeJsonOutput({
250
+ outputType: 'review_output',
251
+ payload: VALID_REVIEW_PAYLOAD,
252
+ workingDir: dir,
253
+ });
254
+ const content = await readFile(join(dir, '.drs/review-output.json'), 'utf-8');
255
+ expect(JSON.parse(content)).toBeTruthy();
256
+ });
257
+ });
258
+ });
259
+ //# sourceMappingURL=write-json-output.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-json-output.test.js","sourceRoot":"","sources":["../../src/lib/write-json-output.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ export interface PiSessionPart {
2
+ text?: string;
3
+ }
4
+ interface PiUsage {
5
+ input?: number;
6
+ output?: number;
7
+ cacheRead?: number;
8
+ cacheWrite?: number;
9
+ totalTokens?: number;
10
+ cost?: {
11
+ total?: number;
12
+ };
13
+ }
14
+ export interface PiSessionMessage {
15
+ info?: {
16
+ id?: string;
17
+ role?: string;
18
+ time?: {
19
+ completed?: number;
20
+ };
21
+ error?: unknown;
22
+ toolName?: string;
23
+ toolCallId?: string;
24
+ provider?: string;
25
+ model?: string;
26
+ usage?: PiUsage;
27
+ };
28
+ parts?: PiSessionPart[];
29
+ }
30
+ export interface PiSessionApi {
31
+ create(input: {
32
+ query: {
33
+ directory?: string;
34
+ };
35
+ }): Promise<{
36
+ data?: {
37
+ id?: string;
38
+ };
39
+ }>;
40
+ prompt(input: {
41
+ path: {
42
+ id: string;
43
+ };
44
+ query: {
45
+ directory?: string;
46
+ };
47
+ body: {
48
+ agent: string;
49
+ parts: Array<{
50
+ type: 'text';
51
+ text: string;
52
+ }>;
53
+ };
54
+ }): Promise<unknown>;
55
+ messages(input: {
56
+ path: {
57
+ id: string;
58
+ };
59
+ }): Promise<{
60
+ data?: PiSessionMessage[];
61
+ }>;
62
+ delete(input: {
63
+ path: {
64
+ id: string;
65
+ };
66
+ }): Promise<unknown>;
67
+ sendMessage(input: {
68
+ path: {
69
+ id: string;
70
+ };
71
+ body: {
72
+ content: string;
73
+ };
74
+ }): Promise<unknown>;
75
+ }
76
+ export interface PiClient {
77
+ session: PiSessionApi;
78
+ getModelContextWindow?: (modelId: string) => number | undefined;
79
+ }
80
+ export interface PiInProcessServer {
81
+ server: {
82
+ url: string;
83
+ close: () => void;
84
+ };
85
+ client: PiClient;
86
+ }
87
+ /**
88
+ * Pi SDK adapter used by DRS runtime orchestration.
89
+ */
90
+ export declare function createPiInProcessServer(options: {
91
+ config: Record<string, unknown>;
92
+ }): Promise<PiInProcessServer>;
93
+ export {};
94
+ //# sourceMappingURL=sdk.d.ts.map