@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
@@ -1,317 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { OpencodeClient, createOpencodeClient, createOpencodeClientInstance } from './client.js';
3
- // Mock the OpenCode SDK
4
- vi.mock('@opencode-ai/sdk', () => ({
5
- createOpencode: vi.fn(async () => ({
6
- server: {
7
- url: 'http://localhost:3000',
8
- close: vi.fn(),
9
- },
10
- client: {
11
- session: {
12
- create: vi.fn(async () => ({ data: { id: 'session-123' } })),
13
- prompt: vi.fn(async () => { }),
14
- messages: vi.fn(async () => ({ data: [] })),
15
- delete: vi.fn(async () => { }),
16
- },
17
- },
18
- })),
19
- createOpencodeClient: vi.fn((_config) => ({
20
- session: {
21
- create: vi.fn(async () => ({ data: { id: 'session-456' } })),
22
- prompt: vi.fn(async () => { }),
23
- messages: vi.fn(async () => ({ data: [] })),
24
- delete: vi.fn(async () => { }),
25
- },
26
- })),
27
- }));
28
- describe('OpencodeClient', () => {
29
- beforeEach(() => {
30
- vi.spyOn(console, 'log').mockImplementation(() => { });
31
- vi.spyOn(console, 'warn').mockImplementation(() => { });
32
- vi.clearAllMocks();
33
- });
34
- describe('constructor', () => {
35
- it('should create an instance with baseUrl', () => {
36
- const client = new OpencodeClient({
37
- baseUrl: 'http://localhost:3000',
38
- directory: '/test/dir',
39
- });
40
- expect(client).toBeInstanceOf(OpencodeClient);
41
- });
42
- it('should create an instance without baseUrl for in-process server', () => {
43
- const client = new OpencodeClient({
44
- directory: '/test/dir',
45
- });
46
- expect(client).toBeInstanceOf(OpencodeClient);
47
- });
48
- it('should handle model overrides in config', () => {
49
- const client = new OpencodeClient({
50
- modelOverrides: {
51
- 'review/security': 'claude-opus-4',
52
- },
53
- });
54
- expect(client).toBeInstanceOf(OpencodeClient);
55
- });
56
- it('should handle custom provider in config', () => {
57
- const client = new OpencodeClient({
58
- provider: {
59
- 'custom-provider': {
60
- npm: '@custom/provider',
61
- name: 'custom-provider',
62
- models: { 'custom-model': { name: 'custom-model' } },
63
- options: {
64
- baseURL: 'https://api.custom.com',
65
- apiKey: '{env:CUSTOM_API_KEY}',
66
- },
67
- },
68
- },
69
- });
70
- expect(client).toBeInstanceOf(OpencodeClient);
71
- });
72
- });
73
- describe('createSession', () => {
74
- it('should throw error if not initialized', async () => {
75
- const client = new OpencodeClient({});
76
- await expect(client.createSession({
77
- agent: 'review/security',
78
- message: 'Review this code',
79
- })).rejects.toThrow('OpenCode client not initialized');
80
- });
81
- });
82
- describe('streamMessages', () => {
83
- it('should throw error if not initialized', async () => {
84
- const client = new OpencodeClient({});
85
- const generator = client.streamMessages('session-123');
86
- await expect(generator.next()).rejects.toThrow('OpenCode client not initialized');
87
- });
88
- });
89
- describe('closeSession', () => {
90
- it('should throw error if not initialized', async () => {
91
- const client = new OpencodeClient({});
92
- await expect(client.closeSession('session-123')).rejects.toThrow('OpenCode client not initialized');
93
- });
94
- });
95
- describe('getServerUrl', () => {
96
- it('should throw error if server not initialized', () => {
97
- const client = new OpencodeClient({});
98
- expect(() => client.getServerUrl()).toThrow('Server not initialized');
99
- });
100
- });
101
- describe('shutdown', () => {
102
- it('should not throw error when no server is running', async () => {
103
- const client = new OpencodeClient({});
104
- await expect(client.shutdown()).resolves.toBeUndefined();
105
- });
106
- });
107
- describe('environment variable resolution', () => {
108
- it('should resolve environment variables in provider config', () => {
109
- // Set up test environment variable
110
- const originalEnv = process.env.TEST_API_KEY;
111
- process.env.TEST_API_KEY = 'test-key-123';
112
- const client = new OpencodeClient({
113
- provider: {
114
- 'test-provider': {
115
- npm: '@test/provider',
116
- name: 'test-provider',
117
- models: { 'test-model': { name: 'test-model' } },
118
- options: {
119
- baseURL: 'https://api.test.com',
120
- apiKey: '{env:TEST_API_KEY}',
121
- },
122
- },
123
- },
124
- });
125
- // The client should be created successfully
126
- expect(client).toBeInstanceOf(OpencodeClient);
127
- // Restore original env
128
- if (originalEnv === undefined) {
129
- delete process.env.TEST_API_KEY;
130
- }
131
- else {
132
- process.env.TEST_API_KEY = originalEnv;
133
- }
134
- });
135
- it('should warn when environment variable is not set', () => {
136
- const consoleSpy = vi.spyOn(console, 'warn');
137
- // Make sure the env var doesn't exist
138
- const originalEnv = process.env.NONEXISTENT_VAR;
139
- delete process.env.NONEXISTENT_VAR;
140
- const client = new OpencodeClient({
141
- provider: {
142
- 'test-provider': {
143
- npm: '@test/provider',
144
- name: 'test-provider',
145
- models: { 'test-model': { name: 'test-model' } },
146
- options: {
147
- baseURL: 'https://api.test.com',
148
- apiKey: '{env:NONEXISTENT_VAR}',
149
- },
150
- },
151
- },
152
- });
153
- expect(client).toBeInstanceOf(OpencodeClient);
154
- // Restore original env
155
- if (originalEnv !== undefined) {
156
- process.env.NONEXISTENT_VAR = originalEnv;
157
- }
158
- consoleSpy.mockRestore();
159
- });
160
- it('should handle non-env string values', () => {
161
- const client = new OpencodeClient({
162
- provider: {
163
- 'test-provider': {
164
- npm: '@test/provider',
165
- name: 'test-provider',
166
- models: { 'test-model': { name: 'test-model' } },
167
- options: {
168
- baseURL: 'https://api.test.com',
169
- apiKey: 'hardcoded-key',
170
- },
171
- },
172
- },
173
- });
174
- expect(client).toBeInstanceOf(OpencodeClient);
175
- });
176
- it('should handle nested objects with env vars', () => {
177
- const originalEnv = process.env.TEST_NESTED_KEY;
178
- process.env.TEST_NESTED_KEY = 'nested-value';
179
- const client = new OpencodeClient({
180
- provider: {
181
- 'test-provider': {
182
- npm: '@test/provider',
183
- name: 'test-provider',
184
- models: { 'test-model': { name: 'test-model' } },
185
- options: {
186
- baseURL: 'https://api.test.com',
187
- apiKey: 'test-key',
188
- nested: {
189
- deepKey: '{env:TEST_NESTED_KEY}',
190
- },
191
- },
192
- },
193
- },
194
- });
195
- expect(client).toBeInstanceOf(OpencodeClient);
196
- // Restore original env
197
- if (originalEnv === undefined) {
198
- delete process.env.TEST_NESTED_KEY;
199
- }
200
- else {
201
- process.env.TEST_NESTED_KEY = originalEnv;
202
- }
203
- });
204
- it('should handle arrays with env vars', () => {
205
- const originalEnv = process.env.TEST_ARRAY_KEY;
206
- process.env.TEST_ARRAY_KEY = 'array-value';
207
- const client = new OpencodeClient({
208
- provider: {
209
- 'test-provider': {
210
- models: { 'test-model': { name: 'test-model' } },
211
- options: {
212
- baseURL: 'https://api.test.com',
213
- apiKey: 'test-key',
214
- keys: ['{env:TEST_ARRAY_KEY}', 'static-value'],
215
- },
216
- },
217
- },
218
- });
219
- expect(client).toBeInstanceOf(OpencodeClient);
220
- // Restore original env
221
- if (originalEnv === undefined) {
222
- delete process.env.TEST_ARRAY_KEY;
223
- }
224
- else {
225
- process.env.TEST_ARRAY_KEY = originalEnv;
226
- }
227
- });
228
- it('should handle primitive values', () => {
229
- const client = new OpencodeClient({
230
- provider: {
231
- 'test-provider': {
232
- models: { 'test-model': { name: 'test-model' } },
233
- options: {
234
- baseURL: 'https://api.test.com',
235
- apiKey: 'test-key',
236
- timeout: 5000,
237
- enabled: true,
238
- ratio: 0.5,
239
- nullValue: null,
240
- },
241
- },
242
- },
243
- });
244
- expect(client).toBeInstanceOf(OpencodeClient);
245
- });
246
- });
247
- describe('factory functions', () => {
248
- it('should create client with createOpencodeClient (deprecated)', () => {
249
- const client = createOpencodeClient({
250
- baseUrl: 'http://localhost:3000',
251
- });
252
- expect(client).toBeInstanceOf(OpencodeClient);
253
- });
254
- it('should create and initialize client with createOpencodeClientInstance', async () => {
255
- const { createOpencodeClient: createSDKClient } = await import('@opencode-ai/sdk');
256
- // Mock for remote server
257
- vi.mocked(createSDKClient).mockReturnValueOnce({
258
- session: {
259
- create: vi.fn(async () => ({ data: { id: 'session-789' } })),
260
- prompt: vi.fn(async () => { }),
261
- messages: vi.fn(async () => ({ data: [] })),
262
- delete: vi.fn(async () => { }),
263
- },
264
- });
265
- const client = await createOpencodeClientInstance({
266
- baseUrl: 'http://localhost:3000',
267
- });
268
- expect(client).toBeInstanceOf(OpencodeClient);
269
- expect(createSDKClient).toHaveBeenCalledWith({
270
- baseUrl: 'http://localhost:3000',
271
- });
272
- });
273
- });
274
- describe('debug mode', () => {
275
- it('should log debug information when debug is enabled', () => {
276
- const consoleSpy = vi.spyOn(console, 'log');
277
- const client = new OpencodeClient({
278
- debug: true,
279
- modelOverrides: {
280
- 'review/security': 'claude-opus-4',
281
- },
282
- });
283
- expect(client).toBeInstanceOf(OpencodeClient);
284
- consoleSpy.mockRestore();
285
- });
286
- });
287
- describe('configuration', () => {
288
- it('should handle complex configuration with all options', () => {
289
- const client = new OpencodeClient({
290
- baseUrl: 'http://localhost:3000',
291
- directory: '/test/project',
292
- modelOverrides: {
293
- 'review/security': 'claude-opus-4',
294
- 'review/quality': 'claude-sonnet-4',
295
- },
296
- provider: {
297
- 'custom-provider': {
298
- npm: '@custom/provider',
299
- name: 'custom-provider',
300
- models: { 'custom-model': { name: 'custom-model' } },
301
- options: {
302
- baseURL: 'https://api.custom.com',
303
- apiKey: '{env:CUSTOM_KEY}',
304
- },
305
- },
306
- },
307
- debug: false,
308
- });
309
- expect(client).toBeInstanceOf(OpencodeClient);
310
- });
311
- it('should handle minimal configuration', () => {
312
- const client = new OpencodeClient({});
313
- expect(client).toBeInstanceOf(OpencodeClient);
314
- });
315
- });
316
- });
317
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/opencode/client.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const builtInAgentPath: string;
2
- //# sourceMappingURL=opencode-paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode-paths.d.ts","sourceRoot":"","sources":["../../src/opencode/opencode-paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,QAA0C,CAAC"}
@@ -1,7 +0,0 @@
1
- import { dirname, join } from 'path';
2
- import { fileURLToPath } from 'url';
3
- const __filename = fileURLToPath(import.meta.url);
4
- const __dirname = dirname(__filename);
5
- const packageRoot = join(__dirname, '..', '..');
6
- export const builtInAgentPath = join(packageRoot, '.opencode', 'agent');
7
- //# sourceMappingURL=opencode-paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode-paths.js","sourceRoot":"","sources":["../../src/opencode/opencode-paths.ts"],"names":[],"mappings":"AAAA,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,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- export interface SkillMetadata {
2
- name: string;
3
- description: string;
4
- path: string;
5
- dir: string;
6
- }
7
- export interface SkillDefinition extends SkillMetadata {
8
- instructions: string;
9
- hasScripts: boolean;
10
- hasReferences: boolean;
11
- hasAssets: boolean;
12
- }
13
- export declare function loadProjectSkills(projectPath: string): SkillMetadata[];
14
- export declare function loadSkillByName(projectPath: string, skillName: string): SkillDefinition | null;
15
- //# sourceMappingURL=skill-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../src/opencode/skill-loader.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAuED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAKtE;AAaD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAoB9F"}
@@ -1,88 +0,0 @@
1
- import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
2
- import { dirname, join, relative } from 'path';
3
- import * as yaml from 'yaml';
4
- const skillFileNames = new Set(['SKILL.md', 'skill.md']);
5
- function traverseDirectory(basePath, currentPath, fileFilter) {
6
- const files = [];
7
- if (!existsSync(currentPath)) {
8
- return files;
9
- }
10
- const entries = readdirSync(currentPath);
11
- for (const entry of entries) {
12
- const fullPath = join(currentPath, entry);
13
- const stat = statSync(fullPath);
14
- if (stat.isDirectory()) {
15
- files.push(...traverseDirectory(basePath, fullPath, fileFilter));
16
- }
17
- else if (stat.isFile() && fileFilter(entry, fullPath)) {
18
- files.push(fullPath);
19
- }
20
- }
21
- return files;
22
- }
23
- function resolveSkillName(skillsRoot, filePath) {
24
- const relativePath = relative(skillsRoot, filePath).replace(/\\/g, '/');
25
- const parentDir = relativePath.replace(/\/(SKILL|skill)\.md$/, '');
26
- const segments = parentDir.split('/').filter(Boolean);
27
- return segments[segments.length - 1] ?? parentDir;
28
- }
29
- function parseSkillFrontmatter(content) {
30
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n?/);
31
- if (!frontmatterMatch) {
32
- return { description: '', instructions: content.trim() };
33
- }
34
- const parsed = yaml.parse(frontmatterMatch[1]);
35
- const frontmatter = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
36
- ? parsed
37
- : {};
38
- const description = typeof frontmatter.description === 'string' ? frontmatter.description.trim() : '';
39
- const instructions = content.slice(frontmatterMatch[0].length).trim();
40
- return { description, instructions };
41
- }
42
- function buildSkillMetadata(skillsRoot, filePath) {
43
- const content = readFileSync(filePath, 'utf-8');
44
- const { description } = parseSkillFrontmatter(content);
45
- const name = resolveSkillName(skillsRoot, filePath);
46
- const dir = dirname(filePath);
47
- return {
48
- name,
49
- description,
50
- path: filePath,
51
- dir,
52
- };
53
- }
54
- export function loadProjectSkills(projectPath) {
55
- const skillsRoot = join(projectPath, '.drs', 'skills');
56
- const files = traverseDirectory(skillsRoot, skillsRoot, (entry) => skillFileNames.has(entry));
57
- return files.map((filePath) => buildSkillMetadata(skillsRoot, filePath));
58
- }
59
- function resolveSkillFilePath(projectPath, skillName) {
60
- const skillRoot = join(projectPath, '.drs', 'skills', skillName);
61
- for (const fileName of skillFileNames) {
62
- const candidate = join(skillRoot, fileName);
63
- if (existsSync(candidate)) {
64
- return candidate;
65
- }
66
- }
67
- return null;
68
- }
69
- export function loadSkillByName(projectPath, skillName) {
70
- const skillPath = resolveSkillFilePath(projectPath, skillName);
71
- if (!skillPath) {
72
- return null;
73
- }
74
- const content = readFileSync(skillPath, 'utf-8');
75
- const { description, instructions } = parseSkillFrontmatter(content);
76
- const dir = dirname(skillPath);
77
- return {
78
- name: skillName,
79
- description,
80
- instructions,
81
- path: skillPath,
82
- dir,
83
- hasScripts: existsSync(join(dir, 'scripts')),
84
- hasReferences: existsSync(join(dir, 'references')),
85
- hasAssets: existsSync(join(dir, 'assets')),
86
- };
87
- }
88
- //# sourceMappingURL=skill-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/opencode/skill-loader.ts"],"names":[],"mappings":"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"}
File without changes
File without changes