@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
@@ -0,0 +1,280 @@
1
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'fs';
2
+ import { tmpdir } from 'os';
3
+ import { join, resolve } from 'path';
4
+ import { afterEach, describe, expect, it, vi } from 'vitest';
5
+ import { getAgent, getReviewAgents, listAgents, loadReviewAgents } from './agent-loader.js';
6
+ function createConfig(agentsPath) {
7
+ return {
8
+ review: {
9
+ paths: {
10
+ agents: agentsPath,
11
+ },
12
+ },
13
+ };
14
+ }
15
+ describe('agent-loader path resolution', () => {
16
+ const tempDirs = [];
17
+ function createTempDir(prefix) {
18
+ const dir = mkdtempSync(join(tmpdir(), prefix));
19
+ tempDirs.push(dir);
20
+ return dir;
21
+ }
22
+ afterEach(() => {
23
+ for (const dir of tempDirs.splice(0, tempDirs.length)) {
24
+ rmSync(dir, { recursive: true, force: true });
25
+ }
26
+ });
27
+ it('loads override agents from configured repo-relative path', () => {
28
+ const projectRoot = createTempDir('drs-agent-loader-');
29
+ const customAgentsRoot = join(projectRoot, 'config', 'agents');
30
+ const customAgentPath = join(customAgentsRoot, 'security', 'agent.md');
31
+ mkdirSync(join(customAgentsRoot, 'security'), { recursive: true });
32
+ writeFileSync(customAgentPath, `---\ndescription: Custom security override\nmodel: anthropic/custom-security\n---\n\nCustom security instructions\n`);
33
+ const agents = loadReviewAgents(projectRoot, createConfig('config/agents'));
34
+ const securityAgent = agents.find((agent) => agent.name === 'review/security');
35
+ expect(securityAgent).toBeDefined();
36
+ expect(securityAgent?.description).toBe('Custom security override');
37
+ expect(securityAgent?.path).toBe(resolve(customAgentPath));
38
+ expect(agents.some((agent) => agent.name === 'review/quality')).toBe(true);
39
+ });
40
+ it('custom agent override replaces built-in prompt and model', () => {
41
+ const projectRoot = createTempDir('drs-agent-override-');
42
+ const agentsDir = join(projectRoot, '.drs', 'agents');
43
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
44
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), [
45
+ '---',
46
+ 'description: Project-specific security reviewer',
47
+ 'model: openai/gpt-4o',
48
+ '---',
49
+ '',
50
+ 'You are a security reviewer for our Rails application.',
51
+ 'Focus on mass assignment and CSRF vulnerabilities.',
52
+ '',
53
+ ].join('\n'));
54
+ const agents = loadReviewAgents(projectRoot);
55
+ const securityAgent = agents.find((a) => a.name === 'review/security');
56
+ expect(securityAgent).toBeDefined();
57
+ expect(securityAgent?.description).toBe('Project-specific security reviewer');
58
+ expect(securityAgent?.model).toBe('openai/gpt-4o');
59
+ expect(securityAgent?.prompt).toContain('Rails application');
60
+ expect(securityAgent?.prompt).toContain('CSRF vulnerabilities');
61
+ // Must NOT contain the built-in prompt
62
+ expect(securityAgent?.prompt).not.toContain('Security Vulnerability Assessment');
63
+ // Other built-in agents still loaded
64
+ const qualityAgent = agents.find((a) => a.name === 'review/quality');
65
+ expect(qualityAgent).toBeDefined();
66
+ expect(qualityAgent?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]quality\.md$/);
67
+ });
68
+ it('multiple custom agents override their respective built-ins', () => {
69
+ const projectRoot = createTempDir('drs-agent-multi-override-');
70
+ const agentsDir = join(projectRoot, '.drs', 'agents');
71
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
72
+ mkdirSync(join(agentsDir, 'style'), { recursive: true });
73
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Custom security\n---\n\nCustom security prompt\n');
74
+ writeFileSync(join(agentsDir, 'style', 'agent.md'), '---\ndescription: Custom style\n---\n\nCustom style prompt\n');
75
+ const agents = loadReviewAgents(projectRoot);
76
+ const security = agents.find((a) => a.name === 'review/security');
77
+ const style = agents.find((a) => a.name === 'review/style');
78
+ const quality = agents.find((a) => a.name === 'review/quality');
79
+ expect(security?.prompt).toBe('Custom security prompt');
80
+ expect(style?.prompt).toBe('Custom style prompt');
81
+ // quality remains built-in
82
+ expect(quality?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]quality\.md$/);
83
+ });
84
+ it('loads built-in Pi-native review agents and keeps all core categories', () => {
85
+ const agents = loadReviewAgents(process.cwd());
86
+ const reviewAgentNames = new Set(agents.filter((agent) => agent.name.startsWith('review/')).map((agent) => agent.name));
87
+ expect(reviewAgentNames.has('review/security')).toBe(true);
88
+ expect(reviewAgentNames.has('review/quality')).toBe(true);
89
+ expect(reviewAgentNames.has('review/style')).toBe(true);
90
+ expect(reviewAgentNames.has('review/performance')).toBe(true);
91
+ expect(reviewAgentNames.has('review/documentation')).toBe(true);
92
+ const securityAgent = agents.find((agent) => agent.name === 'review/security');
93
+ expect(securityAgent?.prompt).toContain('Security Vulnerability Assessment');
94
+ expect(securityAgent?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]security\.md$/);
95
+ });
96
+ it('throws actionable error when configured agent path is invalid', () => {
97
+ const projectRoot = createTempDir('drs-agent-loader-invalid-');
98
+ expect(() => loadReviewAgents(projectRoot, createConfig('missing/agents'))).toThrow('review.paths.agents');
99
+ });
100
+ it('override preserves frontmatter fields: color, tools, hidden', () => {
101
+ const projectRoot = createTempDir('drs-agent-frontmatter-');
102
+ const agentsDir = join(projectRoot, '.drs', 'agents');
103
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
104
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), [
105
+ '---',
106
+ 'description: Themed agent',
107
+ 'color: "#FF5733"',
108
+ 'hidden: true',
109
+ 'tools:',
110
+ ' Read: true',
111
+ ' Grep: false',
112
+ '---',
113
+ '',
114
+ 'Custom prompt with all frontmatter fields.',
115
+ '',
116
+ ].join('\n'));
117
+ const agents = loadReviewAgents(projectRoot);
118
+ const security = agents.find((a) => a.name === 'review/security');
119
+ expect(security?.color).toBe('#FF5733');
120
+ expect(security?.hidden).toBe(true);
121
+ expect(security?.tools).toEqual({ Read: true, Grep: false });
122
+ expect(security?.prompt).toBe('Custom prompt with all frontmatter fields.');
123
+ });
124
+ it('agent.md without frontmatter is skipped with warning', () => {
125
+ const projectRoot = createTempDir('drs-agent-no-frontmatter-');
126
+ const agentsDir = join(projectRoot, '.drs', 'agents');
127
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
128
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), 'Just plain text, no frontmatter at all.\n');
129
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
130
+ const agents = loadReviewAgents(projectRoot);
131
+ // Override skipped — built-in security still loaded
132
+ const security = agents.find((a) => a.name === 'review/security');
133
+ expect(security?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]security\.md$/);
134
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('No frontmatter'));
135
+ warnSpy.mockRestore();
136
+ });
137
+ });
138
+ describe('getAgent / getReviewAgents / listAgents', () => {
139
+ const tempDirs = [];
140
+ function createTempDir(prefix) {
141
+ const dir = mkdtempSync(join(tmpdir(), prefix));
142
+ tempDirs.push(dir);
143
+ return dir;
144
+ }
145
+ afterEach(() => {
146
+ for (const dir of tempDirs.splice(0, tempDirs.length)) {
147
+ rmSync(dir, { recursive: true, force: true });
148
+ }
149
+ });
150
+ it('getAgent returns a specific agent by full name', () => {
151
+ const agent = getAgent(process.cwd(), 'review/security');
152
+ expect(agent).not.toBeNull();
153
+ expect(agent?.name).toBe('review/security');
154
+ expect(agent?.prompt).toContain('Security Vulnerability Assessment');
155
+ });
156
+ it('getAgent returns null for non-existent agent', () => {
157
+ const agent = getAgent(process.cwd(), 'review/nonexistent');
158
+ expect(agent).toBeNull();
159
+ });
160
+ it('getAgent returns override when present', () => {
161
+ const projectRoot = createTempDir('drs-get-agent-');
162
+ const agentsDir = join(projectRoot, '.drs', 'agents');
163
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
164
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Override via getAgent\n---\n\nOverride prompt\n');
165
+ const agent = getAgent(projectRoot, 'review/security');
166
+ expect(agent?.description).toBe('Override via getAgent');
167
+ expect(agent?.prompt).toBe('Override prompt');
168
+ });
169
+ it('getReviewAgents returns only review/ prefixed agents', () => {
170
+ const agents = getReviewAgents(process.cwd());
171
+ expect(agents.length).toBeGreaterThanOrEqual(5);
172
+ expect(agents.every((a) => a.name.startsWith('review/'))).toBe(true);
173
+ });
174
+ it('getReviewAgents includes overrides', () => {
175
+ const projectRoot = createTempDir('drs-get-review-agents-');
176
+ const agentsDir = join(projectRoot, '.drs', 'agents');
177
+ mkdirSync(join(agentsDir, 'quality'), { recursive: true });
178
+ writeFileSync(join(agentsDir, 'quality', 'agent.md'), '---\ndescription: Custom quality\n---\n\nCustom quality prompt\n');
179
+ const agents = getReviewAgents(projectRoot);
180
+ const quality = agents.find((a) => a.name === 'review/quality');
181
+ expect(quality?.description).toBe('Custom quality');
182
+ });
183
+ it('listAgents returns all agent names as strings', () => {
184
+ const names = listAgents(process.cwd());
185
+ expect(names).toContain('review/security');
186
+ expect(names).toContain('review/quality');
187
+ expect(names).toContain('review/style');
188
+ expect(names).toContain('review/performance');
189
+ expect(names).toContain('review/documentation');
190
+ });
191
+ it('listAgents reflects overrides without duplication', () => {
192
+ const projectRoot = createTempDir('drs-list-agents-');
193
+ const agentsDir = join(projectRoot, '.drs', 'agents');
194
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
195
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Override\n---\n\nOverride prompt\n');
196
+ const names = listAgents(projectRoot);
197
+ const securityCount = names.filter((n) => n === 'review/security').length;
198
+ expect(securityCount).toBe(1);
199
+ });
200
+ });
201
+ describe('new custom agent (not overriding built-in)', () => {
202
+ const tempDirs = [];
203
+ function createTempDir(prefix) {
204
+ const dir = mkdtempSync(join(tmpdir(), prefix));
205
+ tempDirs.push(dir);
206
+ return dir;
207
+ }
208
+ afterEach(() => {
209
+ for (const dir of tempDirs.splice(0, tempDirs.length)) {
210
+ rmSync(dir, { recursive: true, force: true });
211
+ }
212
+ });
213
+ it('discovers a brand new agent alongside built-ins', () => {
214
+ const projectRoot = createTempDir('drs-new-agent-');
215
+ const agentsDir = join(projectRoot, '.drs', 'agents');
216
+ mkdirSync(join(agentsDir, 'rails-reviewer'), { recursive: true });
217
+ writeFileSync(join(agentsDir, 'rails-reviewer', 'agent.md'), [
218
+ '---',
219
+ 'description: Rails-specific code reviewer',
220
+ 'model: anthropic/claude-sonnet-4-5-20250929',
221
+ 'color: "#CC0000"',
222
+ '---',
223
+ '',
224
+ 'You are a Rails security and conventions reviewer.',
225
+ 'Focus on mass assignment, strong params, and N+1 queries.',
226
+ '',
227
+ ].join('\n'));
228
+ const agents = loadReviewAgents(projectRoot);
229
+ // New agent discovered
230
+ const rails = agents.find((a) => a.name === 'review/rails-reviewer');
231
+ expect(rails).toBeDefined();
232
+ expect(rails?.description).toBe('Rails-specific code reviewer');
233
+ expect(rails?.model).toBe('anthropic/claude-sonnet-4-5-20250929');
234
+ expect(rails?.color).toBe('#CC0000');
235
+ expect(rails?.prompt).toContain('mass assignment');
236
+ expect(rails?.prompt).toContain('N+1 queries');
237
+ // Built-ins still present
238
+ expect(agents.some((a) => a.name === 'review/security')).toBe(true);
239
+ expect(agents.some((a) => a.name === 'review/quality')).toBe(true);
240
+ });
241
+ it('new agent is accessible via getAgent', () => {
242
+ const projectRoot = createTempDir('drs-new-get-agent-');
243
+ const agentsDir = join(projectRoot, '.drs', 'agents');
244
+ mkdirSync(join(agentsDir, 'api-reviewer'), { recursive: true });
245
+ writeFileSync(join(agentsDir, 'api-reviewer', 'agent.md'), '---\ndescription: API contract reviewer\n---\n\nReview REST API contracts.\n');
246
+ const agent = getAgent(projectRoot, 'review/api-reviewer');
247
+ expect(agent).not.toBeNull();
248
+ expect(agent?.description).toBe('API contract reviewer');
249
+ expect(agent?.prompt).toBe('Review REST API contracts.');
250
+ });
251
+ it('new agent appears in getReviewAgents and listAgents', () => {
252
+ const projectRoot = createTempDir('drs-new-list-');
253
+ const agentsDir = join(projectRoot, '.drs', 'agents');
254
+ mkdirSync(join(agentsDir, 'accessibility'), { recursive: true });
255
+ writeFileSync(join(agentsDir, 'accessibility', 'agent.md'), '---\ndescription: Accessibility reviewer\n---\n\nCheck WCAG compliance.\n');
256
+ const reviewAgents = getReviewAgents(projectRoot);
257
+ expect(reviewAgents.some((a) => a.name === 'review/accessibility')).toBe(true);
258
+ const names = listAgents(projectRoot);
259
+ expect(names).toContain('review/accessibility');
260
+ });
261
+ it('new agent coexists with overrides of built-ins', () => {
262
+ const projectRoot = createTempDir('drs-new-plus-override-');
263
+ const agentsDir = join(projectRoot, '.drs', 'agents');
264
+ mkdirSync(join(agentsDir, 'security'), { recursive: true });
265
+ mkdirSync(join(agentsDir, 'rails-reviewer'), { recursive: true });
266
+ writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Custom security\n---\n\nCustom security prompt\n');
267
+ writeFileSync(join(agentsDir, 'rails-reviewer', 'agent.md'), '---\ndescription: Rails reviewer\n---\n\nRails review prompt\n');
268
+ const agents = loadReviewAgents(projectRoot);
269
+ // Override replaces built-in
270
+ const security = agents.find((a) => a.name === 'review/security');
271
+ expect(security?.prompt).toBe('Custom security prompt');
272
+ // New agent added
273
+ const rails = agents.find((a) => a.name === 'review/rails-reviewer');
274
+ expect(rails?.prompt).toBe('Rails review prompt');
275
+ // Other built-ins still present
276
+ expect(agents.some((a) => a.name === 'review/quality')).toBe(true);
277
+ expect(agents.some((a) => a.name === 'review/style')).toBe(true);
278
+ });
279
+ });
280
+ //# sourceMappingURL=agent-loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.test.js","sourceRoot":"","sources":["../../src/runtime/agent-loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getBuiltInAgentPaths(): string[];
2
+ //# sourceMappingURL=built-in-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-paths.d.ts","sourceRoot":"","sources":["../../src/runtime/built-in-paths.ts"],"names":[],"mappings":"AAUA,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAM/C"}
@@ -0,0 +1,14 @@
1
+ import { existsSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ const packageRoot = join(__dirname, '..', '..');
7
+ const piBuiltInAgentPath = join(packageRoot, '.pi', 'agents');
8
+ export function getBuiltInAgentPaths() {
9
+ if (existsSync(piBuiltInAgentPath)) {
10
+ return [piBuiltInAgentPath];
11
+ }
12
+ return [];
13
+ }
14
+ //# sourceMappingURL=built-in-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-paths.js","sourceRoot":"","sources":["../../src/runtime/built-in-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEhD,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,UAAU,oBAAoB;IAClC,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -1,13 +1,11 @@
1
1
  /**
2
- * OpenCode SDK client wrapper for DRS with in-process server support
2
+ * Agent runtime client wrapper for DRS with in-process server support.
3
3
  *
4
- * This client can either:
5
- * 1. Connect to an existing remote OpenCode server (when baseUrl is provided)
6
- * 2. Start an OpenCode server in-process (when baseUrl is not provided)
4
+ * This client maintains the existing internal interface used by review orchestration
5
+ * while delegating SDK calls through the Pi integration adapter in src/pi/sdk.ts.
7
6
  */
8
7
  import type { CustomProvider, DRSConfig } from '../lib/config.js';
9
- export interface OpencodeConfig {
10
- baseUrl?: string;
8
+ export interface RuntimeClientConfig {
11
9
  directory?: string;
12
10
  modelOverrides?: Record<string, string>;
13
11
  provider?: Record<string, CustomProvider>;
@@ -19,11 +17,24 @@ export interface SessionCreateOptions {
19
17
  message: string;
20
18
  context?: Record<string, unknown>;
21
19
  }
20
+ export interface SessionUsage {
21
+ input: number;
22
+ output: number;
23
+ cacheRead: number;
24
+ cacheWrite: number;
25
+ totalTokens: number;
26
+ cost: number;
27
+ }
22
28
  export interface SessionMessage {
23
29
  id: string;
24
30
  role: 'user' | 'assistant' | 'system' | 'tool';
25
31
  content: string;
26
32
  timestamp: Date;
33
+ toolName?: string;
34
+ toolCallId?: string;
35
+ provider?: string;
36
+ model?: string;
37
+ usage?: SessionUsage;
27
38
  }
28
39
  export interface Session {
29
40
  id: string;
@@ -31,18 +42,21 @@ export interface Session {
31
42
  createdAt: Date;
32
43
  }
33
44
  /**
34
- * OpenCode client that can start a server in-process or connect to remote
45
+ * Runtime client wrapper for DRS backed by in-process Pi sessions.
35
46
  */
36
- export declare class OpencodeClient {
37
- private baseUrl?;
47
+ export declare class RuntimeClient {
48
+ private serverUrl?;
38
49
  private directory?;
39
50
  private inProcessServer?;
40
51
  private client?;
41
52
  private config;
42
- private projectRootEnv?;
43
- constructor(config: OpencodeConfig);
53
+ constructor(config: RuntimeClientConfig);
54
+ getModelContextWindow(modelId: string): number | undefined;
55
+ getMinContextWindow(modelIds: string[]): number | undefined;
56
+ private getConfiguredModelPricing;
57
+ private estimateConfiguredCost;
44
58
  /**
45
- * Initialize - either connect to remote server or start in-process
59
+ * Initialize in-process Pi runtime.
46
60
  */
47
61
  initialize(): Promise<void>;
48
62
  /**
@@ -50,7 +64,11 @@ export declare class OpencodeClient {
50
64
  */
51
65
  createSession(options: SessionCreateOptions): Promise<Session>;
52
66
  /**
53
- * Stream messages from a session (polls until agent completes)
67
+ * Stream messages from a session.
68
+ *
69
+ * With the in-process Pi runtime, prompt() is synchronous so all messages
70
+ * are available immediately and the loop completes on the first iteration.
71
+ * The polling structure is retained for future remote-runtime compatibility.
54
72
  */
55
73
  streamMessages(sessionId: string): AsyncGenerator<SessionMessage>;
56
74
  /**
@@ -79,12 +97,11 @@ export declare class OpencodeClient {
79
97
  private resolveEnvReferences;
80
98
  }
81
99
  /**
82
- * Create an OpenCode client with the given configuration
83
- * @deprecated Use createOpencodeClientInstance instead, which properly initializes the client
100
+ * Create a runtime client with the given configuration.
84
101
  */
85
- export declare function createOpencodeClient(config: OpencodeConfig): OpencodeClient;
102
+ export declare function createRuntimeClient(config: RuntimeClientConfig): RuntimeClient;
86
103
  /**
87
- * Create and initialize an OpenCode client with the given configuration
104
+ * Create and initialize a runtime client with the given configuration.
88
105
  */
89
- export declare function createOpencodeClientInstance(config: OpencodeConfig): Promise<OpencodeClient>;
106
+ export declare function createRuntimeClientInstance(config: RuntimeClientConfig): Promise<RuntimeClient>;
90
107
  //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}