@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.
- package/README.md +228 -92
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +19 -22
- package/dist/ci/runner.js.map +1 -1
- package/dist/cli/describe-mr.d.ts.map +1 -1
- package/dist/cli/describe-mr.js +39 -20
- package/dist/cli/describe-mr.js.map +1 -1
- package/dist/cli/describe-pr.d.ts.map +1 -1
- package/dist/cli/describe-pr.js +39 -20
- package/dist/cli/describe-pr.js.map +1 -1
- package/dist/cli/index.js +11 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +30 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/post-comments.d.ts.map +1 -1
- package/dist/cli/post-comments.js +5 -5
- package/dist/cli/post-comments.js.map +1 -1
- package/dist/cli/review-local.d.ts.map +1 -1
- package/dist/cli/review-local.integration.test.d.ts +2 -0
- package/dist/cli/review-local.integration.test.d.ts.map +1 -0
- package/dist/cli/review-local.integration.test.js +343 -0
- package/dist/cli/review-local.integration.test.js.map +1 -0
- package/dist/cli/review-local.js +5 -4
- package/dist/cli/review-local.js.map +1 -1
- package/dist/cli/review-local.live.e2e.test.d.ts +2 -0
- package/dist/cli/review-local.live.e2e.test.d.ts.map +1 -0
- package/dist/cli/review-local.live.e2e.test.js +154 -0
- package/dist/cli/review-local.live.e2e.test.js.map +1 -0
- package/dist/cli/review-local.test.d.ts +2 -0
- package/dist/cli/review-local.test.d.ts.map +1 -0
- package/dist/cli/review-local.test.js +164 -0
- package/dist/cli/review-local.test.js.map +1 -0
- package/dist/cli/review-mr.d.ts +1 -1
- package/dist/cli/review-mr.d.ts.map +1 -1
- package/dist/cli/review-mr.js +92 -17
- package/dist/cli/review-mr.js.map +1 -1
- package/dist/cli/review-mr.test.d.ts +2 -0
- package/dist/cli/review-mr.test.d.ts.map +1 -0
- package/dist/cli/review-mr.test.js +142 -0
- package/dist/cli/review-mr.test.js.map +1 -0
- package/dist/cli/review-pr.d.ts +1 -1
- package/dist/cli/review-pr.d.ts.map +1 -1
- package/dist/cli/review-pr.js +96 -13
- package/dist/cli/review-pr.js.map +1 -1
- package/dist/cli/review-pr.test.d.ts +2 -0
- package/dist/cli/review-pr.test.d.ts.map +1 -0
- package/dist/cli/review-pr.test.js +137 -0
- package/dist/cli/review-pr.test.js.map +1 -0
- package/dist/cli/show-changes.js +4 -4
- package/dist/github/platform-adapter.js +2 -2
- package/dist/gitlab/client.js +1 -1
- package/dist/lib/code-quality-report.js +1 -1
- package/dist/lib/comment-formatter.d.ts +2 -1
- package/dist/lib/comment-formatter.d.ts.map +1 -1
- package/dist/lib/comment-formatter.js +33 -1
- package/dist/lib/comment-formatter.js.map +1 -1
- package/dist/lib/comment-formatter.test.js +43 -0
- package/dist/lib/comment-formatter.test.js.map +1 -1
- package/dist/lib/comment-manager.d.ts.map +1 -1
- package/dist/lib/comment-manager.js +4 -3
- package/dist/lib/comment-manager.js.map +1 -1
- package/dist/lib/comment-poster.d.ts +2 -1
- package/dist/lib/comment-poster.d.ts.map +1 -1
- package/dist/lib/comment-poster.js +2 -2
- package/dist/lib/comment-poster.js.map +1 -1
- package/dist/lib/comment-poster.test.js +27 -11
- package/dist/lib/comment-poster.test.js.map +1 -1
- package/dist/lib/config-model-overrides.test.d.ts +1 -1
- package/dist/lib/config-model-overrides.test.js +2 -2
- package/dist/lib/config-model-overrides.test.js.map +1 -1
- package/dist/lib/config.d.ts +34 -7
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +35 -13
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +16 -0
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/context-compression.d.ts +27 -1
- package/dist/lib/context-compression.d.ts.map +1 -1
- package/dist/lib/context-compression.js +106 -4
- package/dist/lib/context-compression.js.map +1 -1
- package/dist/lib/context-compression.test.js +305 -1
- package/dist/lib/context-compression.test.js.map +1 -1
- package/dist/lib/context-loader.d.ts +3 -2
- package/dist/lib/context-loader.d.ts.map +1 -1
- package/dist/lib/context-loader.js +11 -11
- package/dist/lib/context-loader.js.map +1 -1
- package/dist/lib/description-executor.d.ts +19 -2
- package/dist/lib/description-executor.d.ts.map +1 -1
- package/dist/lib/description-executor.js +52 -21
- package/dist/lib/description-executor.js.map +1 -1
- package/dist/lib/description-executor.test.d.ts +2 -0
- package/dist/lib/description-executor.test.d.ts.map +1 -0
- package/dist/lib/description-executor.test.js +120 -0
- package/dist/lib/description-executor.test.js.map +1 -0
- package/dist/lib/description-formatter.d.ts +8 -3
- package/dist/lib/description-formatter.d.ts.map +1 -1
- package/dist/lib/description-formatter.js +88 -13
- package/dist/lib/description-formatter.js.map +1 -1
- package/dist/lib/description-formatter.test.d.ts +2 -0
- package/dist/lib/description-formatter.test.d.ts.map +1 -0
- package/dist/lib/description-formatter.test.js +57 -0
- package/dist/lib/description-formatter.test.js.map +1 -0
- package/dist/lib/diff-parser.test.d.ts +2 -0
- package/dist/lib/diff-parser.test.d.ts.map +1 -0
- package/dist/lib/diff-parser.test.js +335 -0
- package/dist/lib/diff-parser.test.js.map +1 -0
- package/dist/lib/exit.d.ts +35 -0
- package/dist/lib/exit.d.ts.map +1 -0
- package/dist/lib/exit.js +53 -0
- package/dist/lib/exit.js.map +1 -0
- package/dist/lib/exit.test.d.ts +2 -0
- package/dist/lib/exit.test.d.ts.map +1 -0
- package/dist/lib/exit.test.js +120 -0
- package/dist/lib/exit.test.js.map +1 -0
- package/dist/lib/format-utils.d.ts +3 -0
- package/dist/lib/format-utils.d.ts.map +1 -0
- package/dist/lib/format-utils.js +7 -0
- package/dist/lib/format-utils.js.map +1 -0
- package/dist/lib/json-output.d.ts +4 -1
- package/dist/lib/json-output.d.ts.map +1 -1
- package/dist/lib/json-output.js +2 -1
- package/dist/lib/json-output.js.map +1 -1
- package/dist/lib/json-output.test.d.ts +2 -0
- package/dist/lib/json-output.test.d.ts.map +1 -0
- package/dist/lib/json-output.test.js +135 -0
- package/dist/lib/json-output.test.js.map +1 -0
- package/dist/lib/logger.d.ts +10 -2
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +22 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/logger.test.d.ts +2 -0
- package/dist/lib/logger.test.d.ts.map +1 -0
- package/dist/lib/logger.test.js +324 -0
- package/dist/lib/logger.test.js.map +1 -0
- package/dist/lib/position-validator.test.d.ts +2 -0
- package/dist/lib/position-validator.test.d.ts.map +1 -0
- package/dist/lib/position-validator.test.js +128 -0
- package/dist/lib/position-validator.test.js.map +1 -0
- package/dist/lib/repository-validator.js +1 -1
- package/dist/lib/review-core.d.ts +9 -4
- package/dist/lib/review-core.d.ts.map +1 -1
- package/dist/lib/review-core.js +207 -112
- package/dist/lib/review-core.js.map +1 -1
- package/dist/lib/review-core.test.js +76 -30
- package/dist/lib/review-core.test.js.map +1 -1
- package/dist/lib/review-orchestrator.d.ts +12 -7
- package/dist/lib/review-orchestrator.d.ts.map +1 -1
- package/dist/lib/review-orchestrator.js +78 -22
- package/dist/lib/review-orchestrator.js.map +1 -1
- package/dist/lib/review-orchestrator.test.js +160 -42
- package/dist/lib/review-orchestrator.test.js.map +1 -1
- package/dist/lib/review-parser.test.d.ts +2 -0
- package/dist/lib/review-parser.test.d.ts.map +1 -0
- package/dist/lib/review-parser.test.js +130 -0
- package/dist/lib/review-parser.test.js.map +1 -0
- package/dist/lib/review-usage.d.ts +32 -0
- package/dist/lib/review-usage.d.ts.map +1 -0
- package/dist/lib/review-usage.js +72 -0
- package/dist/lib/review-usage.js.map +1 -0
- package/dist/lib/review-usage.test.d.ts +2 -0
- package/dist/lib/review-usage.test.d.ts.map +1 -0
- package/dist/lib/review-usage.test.js +83 -0
- package/dist/lib/review-usage.test.js.map +1 -0
- package/dist/lib/unified-review-executor.d.ts +6 -2
- package/dist/lib/unified-review-executor.d.ts.map +1 -1
- package/dist/lib/unified-review-executor.js +54 -28
- package/dist/lib/unified-review-executor.js.map +1 -1
- package/dist/lib/unified-review-executor.test.js +138 -16
- package/dist/lib/unified-review-executor.test.js.map +1 -1
- package/dist/lib/write-json-output.test.d.ts +2 -0
- package/dist/lib/write-json-output.test.d.ts.map +1 -0
- package/dist/lib/write-json-output.test.js +259 -0
- package/dist/lib/write-json-output.test.js.map +1 -0
- package/dist/pi/sdk.d.ts +94 -0
- package/dist/pi/sdk.d.ts.map +1 -0
- package/dist/pi/sdk.js +486 -0
- package/dist/pi/sdk.js.map +1 -0
- package/dist/pi/sdk.test.d.ts +2 -0
- package/dist/pi/sdk.test.d.ts.map +1 -0
- package/dist/pi/sdk.test.js +331 -0
- package/dist/pi/sdk.test.js.map +1 -0
- package/dist/{opencode → runtime}/agent-loader.d.ts +7 -5
- package/dist/runtime/agent-loader.d.ts.map +1 -0
- package/dist/{opencode → runtime}/agent-loader.js +24 -19
- package/dist/runtime/agent-loader.js.map +1 -0
- package/dist/runtime/agent-loader.test.d.ts +2 -0
- package/dist/runtime/agent-loader.test.d.ts.map +1 -0
- package/dist/runtime/agent-loader.test.js +280 -0
- package/dist/runtime/agent-loader.test.js.map +1 -0
- package/dist/runtime/built-in-paths.d.ts +2 -0
- package/dist/runtime/built-in-paths.d.ts.map +1 -0
- package/dist/runtime/built-in-paths.js +14 -0
- package/dist/runtime/built-in-paths.js.map +1 -0
- package/dist/{opencode → runtime}/client.d.ts +35 -18
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +486 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/{opencode → runtime}/client.test.d.ts.map +1 -1
- package/dist/runtime/client.test.js +392 -0
- package/dist/runtime/client.test.js.map +1 -0
- package/dist/runtime/path-config.d.ts +8 -0
- package/dist/runtime/path-config.d.ts.map +1 -0
- package/dist/runtime/path-config.js +68 -0
- package/dist/runtime/path-config.js.map +1 -0
- package/dist/runtime/path-config.test.d.ts +2 -0
- package/dist/runtime/path-config.test.d.ts.map +1 -0
- package/dist/runtime/path-config.test.js +103 -0
- package/dist/runtime/path-config.test.js.map +1 -0
- package/package.json +5 -5
- package/.opencode/opencode.jsonc +0 -15
- package/.opencode/tool/write_json_output.ts +0 -24
- package/.opencode/tools/drs_skill.ts +0 -67
- package/dist/lib/skills-prompt.d.ts +0 -3
- package/dist/lib/skills-prompt.d.ts.map +0 -1
- package/dist/lib/skills-prompt.js +0 -70
- package/dist/lib/skills-prompt.js.map +0 -1
- package/dist/opencode/agent-loader.d.ts.map +0 -1
- package/dist/opencode/agent-loader.js.map +0 -1
- package/dist/opencode/client.d.ts.map +0 -1
- package/dist/opencode/client.js +0 -456
- package/dist/opencode/client.js.map +0 -1
- package/dist/opencode/client.test.js +0 -317
- package/dist/opencode/client.test.js.map +0 -1
- package/dist/opencode/opencode-paths.d.ts +0 -2
- package/dist/opencode/opencode-paths.d.ts.map +0 -1
- package/dist/opencode/opencode-paths.js +0 -7
- package/dist/opencode/opencode-paths.js.map +0 -1
- package/dist/opencode/skill-loader.d.ts +0 -15
- package/dist/opencode/skill-loader.d.ts.map +0 -1
- package/dist/opencode/skill-loader.js +0 -88
- package/dist/opencode/skill-loader.js.map +0 -1
- /package/{.opencode/agent → .pi/agents}/describe/pr-describer.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/documentation.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/performance.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/quality.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/security.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/style.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/unified-reviewer.md +0 -0
- /package/dist/{opencode → runtime}/client.test.d.ts +0 -0
package/dist/opencode/client.js
DELETED
|
@@ -1,456 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode SDK client wrapper for DRS with in-process server support
|
|
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)
|
|
7
|
-
*/
|
|
8
|
-
import { createOpencode, createOpencodeClient as createSDKClient } from '@opencode-ai/sdk';
|
|
9
|
-
import net from 'net';
|
|
10
|
-
import { getDefaultSkills, normalizeAgentConfig } from '../lib/config.js';
|
|
11
|
-
const SERVER_START_TIMEOUT_MS = 10000;
|
|
12
|
-
/**
|
|
13
|
-
* OpenCode client that can start a server in-process or connect to remote
|
|
14
|
-
*/
|
|
15
|
-
export class OpencodeClient {
|
|
16
|
-
baseUrl;
|
|
17
|
-
directory;
|
|
18
|
-
inProcessServer;
|
|
19
|
-
client;
|
|
20
|
-
config;
|
|
21
|
-
projectRootEnv;
|
|
22
|
-
constructor(config) {
|
|
23
|
-
this.baseUrl = config.baseUrl;
|
|
24
|
-
this.directory = config.directory;
|
|
25
|
-
this.config = config;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Initialize - either connect to remote server or start in-process
|
|
29
|
-
*/
|
|
30
|
-
async initialize() {
|
|
31
|
-
if (this.baseUrl) {
|
|
32
|
-
// Connect to existing remote server
|
|
33
|
-
this.client = createSDKClient({
|
|
34
|
-
baseUrl: this.baseUrl,
|
|
35
|
-
});
|
|
36
|
-
console.log(`Connected to OpenCode server at ${this.baseUrl}`);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
// Start server in-process
|
|
40
|
-
// Build OpenCode config programmatically from DRS config
|
|
41
|
-
const opencodeConfig = {
|
|
42
|
-
// Tools available to DRS review agents
|
|
43
|
-
tools: {
|
|
44
|
-
Read: true,
|
|
45
|
-
Glob: true,
|
|
46
|
-
Grep: true,
|
|
47
|
-
Bash: true,
|
|
48
|
-
write_json_output: true,
|
|
49
|
-
drs_skill: true,
|
|
50
|
-
skill: false,
|
|
51
|
-
Write: false,
|
|
52
|
-
Edit: false,
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
// Set log level to DEBUG when --debug flag is used
|
|
56
|
-
// This shows full system prompts, tools, API calls, etc. from OpenCode
|
|
57
|
-
if (this.config.debug) {
|
|
58
|
-
opencodeConfig.logLevel = 'DEBUG';
|
|
59
|
-
console.log('🔍 OpenCode debug logging enabled');
|
|
60
|
-
}
|
|
61
|
-
// Add custom provider if configured in DRS config
|
|
62
|
-
if (this.config.provider && Object.keys(this.config.provider).length > 0) {
|
|
63
|
-
// Deep clone and resolve environment variable references
|
|
64
|
-
opencodeConfig.provider = this.resolveEnvReferences(this.config.provider);
|
|
65
|
-
const providerNames = Object.keys(this.config.provider);
|
|
66
|
-
console.log(`📦 Custom provider configured: ${providerNames.join(', ')}`);
|
|
67
|
-
}
|
|
68
|
-
// Apply model overrides from DRS config
|
|
69
|
-
if (this.config.modelOverrides && Object.keys(this.config.modelOverrides).length > 0) {
|
|
70
|
-
const agentConfig = {};
|
|
71
|
-
console.log('📋 Agent model configuration:');
|
|
72
|
-
// Merge model overrides into agent configuration
|
|
73
|
-
for (const [agentName, model] of Object.entries(this.config.modelOverrides)) {
|
|
74
|
-
agentConfig[agentName] = { model };
|
|
75
|
-
console.log(` • ${agentName}: ${model}`);
|
|
76
|
-
}
|
|
77
|
-
opencodeConfig.agent = agentConfig;
|
|
78
|
-
console.log('');
|
|
79
|
-
}
|
|
80
|
-
if (this.config.config) {
|
|
81
|
-
const normalizedAgents = normalizeAgentConfig(this.config.config.review.agents);
|
|
82
|
-
const defaultSkills = getDefaultSkills(this.config.config);
|
|
83
|
-
const agentSkills = normalizedAgents
|
|
84
|
-
.map((agent) => {
|
|
85
|
-
const combined = new Set([
|
|
86
|
-
...defaultSkills,
|
|
87
|
-
...(agent.skills ? agent.skills.map(String) : []),
|
|
88
|
-
]);
|
|
89
|
-
return {
|
|
90
|
-
name: agent.name,
|
|
91
|
-
skills: Array.from(combined).filter((skill) => skill.length > 0),
|
|
92
|
-
};
|
|
93
|
-
})
|
|
94
|
-
.filter((agent) => agent.skills.length > 0);
|
|
95
|
-
if (agentSkills.length > 0) {
|
|
96
|
-
console.log('🧩 Agent skill configuration:');
|
|
97
|
-
for (const agent of agentSkills) {
|
|
98
|
-
console.log(` • review/${agent.name}: ${agent.skills.join(', ')}`);
|
|
99
|
-
}
|
|
100
|
-
console.log('');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Debug: Print final OpenCode config
|
|
104
|
-
if (this.config.debug) {
|
|
105
|
-
console.log('🔧 DEBUG: Final OpenCode configuration (after env resolution):');
|
|
106
|
-
console.log('─'.repeat(50));
|
|
107
|
-
// Show environment variable status for custom providers
|
|
108
|
-
if (this.config.provider) {
|
|
109
|
-
console.log('\n📍 Environment variable status:');
|
|
110
|
-
for (const [providerName, provider] of Object.entries(this.config.provider)) {
|
|
111
|
-
const apiKeyConfig = provider.options?.apiKey;
|
|
112
|
-
if (apiKeyConfig && typeof apiKeyConfig === 'string') {
|
|
113
|
-
const envMatch = apiKeyConfig.match(/^\{env:([^}]+)\}$/);
|
|
114
|
-
if (envMatch) {
|
|
115
|
-
const envVarName = envMatch[1];
|
|
116
|
-
const envValue = process.env[envVarName];
|
|
117
|
-
if (envValue) {
|
|
118
|
-
console.log(` ✓ ${envVarName}: SET (${envValue.substring(0, 8)}...)`);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
console.log(` ✗ ${envVarName}: NOT SET`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
console.log(` • ${providerName}: API key is hardcoded (not env var)`);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
console.log('');
|
|
130
|
-
}
|
|
131
|
-
// Sanitize config to hide API keys
|
|
132
|
-
const sanitizedConfig = JSON.parse(JSON.stringify(opencodeConfig));
|
|
133
|
-
if (sanitizedConfig.provider) {
|
|
134
|
-
for (const providerName of Object.keys(sanitizedConfig.provider)) {
|
|
135
|
-
if (sanitizedConfig.provider[providerName]?.options?.apiKey) {
|
|
136
|
-
const apiKey = sanitizedConfig.provider[providerName].options.apiKey;
|
|
137
|
-
// Always redact since we've resolved env vars
|
|
138
|
-
if (apiKey && apiKey.length > 0) {
|
|
139
|
-
sanitizedConfig.provider[providerName].options.apiKey =
|
|
140
|
-
`***REDACTED (${apiKey.length} chars)***`;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
sanitizedConfig.provider[providerName].options.apiKey = '***EMPTY***';
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
console.log('Config being passed to OpenCode:');
|
|
149
|
-
console.log(JSON.stringify(sanitizedConfig, null, 2));
|
|
150
|
-
if (this.config.config) {
|
|
151
|
-
const normalizedAgents = normalizeAgentConfig(this.config.config.review.agents);
|
|
152
|
-
const defaultSkills = getDefaultSkills(this.config.config);
|
|
153
|
-
const agentSkills = normalizedAgents
|
|
154
|
-
.map((agent) => {
|
|
155
|
-
const combined = new Set([
|
|
156
|
-
...defaultSkills,
|
|
157
|
-
...(agent.skills ? agent.skills.map(String) : []),
|
|
158
|
-
]);
|
|
159
|
-
return {
|
|
160
|
-
name: `review/${agent.name}`,
|
|
161
|
-
skills: Array.from(combined).filter((skill) => skill.length > 0),
|
|
162
|
-
};
|
|
163
|
-
})
|
|
164
|
-
.filter((agent) => agent.skills.length > 0);
|
|
165
|
-
if (agentSkills.length > 0) {
|
|
166
|
-
console.log('Agent skills configuration:');
|
|
167
|
-
console.log(JSON.stringify(agentSkills, null, 2));
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
console.log('─'.repeat(50));
|
|
171
|
-
console.log('');
|
|
172
|
-
}
|
|
173
|
-
// Change to project directory so OpenCode can discover agents
|
|
174
|
-
const originalCwd = process.cwd();
|
|
175
|
-
const projectDir = this.directory || originalCwd;
|
|
176
|
-
this.projectRootEnv = process.env.DRS_PROJECT_ROOT;
|
|
177
|
-
process.env.DRS_PROJECT_ROOT = projectDir;
|
|
178
|
-
const discoveryRoot = projectDir;
|
|
179
|
-
if (discoveryRoot !== originalCwd) {
|
|
180
|
-
process.chdir(discoveryRoot);
|
|
181
|
-
}
|
|
182
|
-
// OpenCode SDK reads provider-specific API keys from environment automatically
|
|
183
|
-
// (ANTHROPIC_API_KEY, ZHIPU_API_KEY, OPENAI_API_KEY, etc.)
|
|
184
|
-
this.inProcessServer = await createOpencode({
|
|
185
|
-
timeout: SERVER_START_TIMEOUT_MS,
|
|
186
|
-
config: opencodeConfig,
|
|
187
|
-
});
|
|
188
|
-
// Restore original working directory
|
|
189
|
-
if (discoveryRoot !== originalCwd) {
|
|
190
|
-
process.chdir(originalCwd);
|
|
191
|
-
}
|
|
192
|
-
this.client = this.inProcessServer.client;
|
|
193
|
-
this.baseUrl = this.inProcessServer.server.url;
|
|
194
|
-
const ready = await waitForServerReady(this.baseUrl);
|
|
195
|
-
if (!ready) {
|
|
196
|
-
console.warn(`⚠️ OpenCode server did not become ready at ${this.baseUrl}. Review requests may fail.`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Create a new session with an agent and send initial message
|
|
202
|
-
*/
|
|
203
|
-
async createSession(options) {
|
|
204
|
-
if (!this.client) {
|
|
205
|
-
throw new Error('OpenCode client not initialized. Call initialize() first.');
|
|
206
|
-
}
|
|
207
|
-
try {
|
|
208
|
-
// Step 1: Create empty session
|
|
209
|
-
const createResponse = (await this.client.session.create({
|
|
210
|
-
query: {
|
|
211
|
-
directory: this.directory,
|
|
212
|
-
},
|
|
213
|
-
}));
|
|
214
|
-
const sessionId = createResponse.data?.id;
|
|
215
|
-
if (!sessionId) {
|
|
216
|
-
throw new Error('Failed to get session ID from create response');
|
|
217
|
-
}
|
|
218
|
-
// Step 2: Send initial message to start the agent
|
|
219
|
-
await this.client.session.prompt({
|
|
220
|
-
path: { id: sessionId },
|
|
221
|
-
query: {
|
|
222
|
-
directory: this.directory,
|
|
223
|
-
},
|
|
224
|
-
body: {
|
|
225
|
-
agent: options.agent,
|
|
226
|
-
parts: [
|
|
227
|
-
{
|
|
228
|
-
type: 'text',
|
|
229
|
-
text: options.message,
|
|
230
|
-
},
|
|
231
|
-
],
|
|
232
|
-
},
|
|
233
|
-
});
|
|
234
|
-
return {
|
|
235
|
-
id: sessionId,
|
|
236
|
-
agent: options.agent,
|
|
237
|
-
createdAt: new Date(),
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
242
|
-
const connectionHint = message.includes('fetch failed') || message.includes('ECONNREFUSED')
|
|
243
|
-
? ` Check the OpenCode server URL (${this.baseUrl ?? 'in-process'}) and ensure it is reachable.`
|
|
244
|
-
: '';
|
|
245
|
-
throw new Error(`Failed to create session: ${message}${connectionHint}`);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Stream messages from a session (polls until agent completes)
|
|
250
|
-
*/
|
|
251
|
-
async *streamMessages(sessionId) {
|
|
252
|
-
if (!this.client) {
|
|
253
|
-
throw new Error('OpenCode client not initialized. Call initialize() first.');
|
|
254
|
-
}
|
|
255
|
-
try {
|
|
256
|
-
// Poll messages until agent completes
|
|
257
|
-
let lastMessageCount = 0;
|
|
258
|
-
let attempts = 0;
|
|
259
|
-
const maxAttempts = 60; // 60 attempts * 2s = 2 minutes max
|
|
260
|
-
while (attempts < maxAttempts) {
|
|
261
|
-
attempts++;
|
|
262
|
-
const messagesResponse = (await this.client.session.messages({
|
|
263
|
-
path: { id: sessionId },
|
|
264
|
-
}));
|
|
265
|
-
const messages = messagesResponse.data ?? [];
|
|
266
|
-
// Yield any new messages
|
|
267
|
-
for (let i = lastMessageCount; i < messages.length; i++) {
|
|
268
|
-
const msg = messages[i];
|
|
269
|
-
yield {
|
|
270
|
-
id: msg.info?.id ?? 'msg-' + Date.now(),
|
|
271
|
-
role: (msg.info?.role ?? 'assistant'),
|
|
272
|
-
content: msg.parts?.map((p) => p.text ?? '').join('') ?? '',
|
|
273
|
-
timestamp: new Date(),
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
lastMessageCount = messages.length;
|
|
277
|
-
// Check if the last assistant message has completed
|
|
278
|
-
const lastAssistantMsg = [...messages].reverse().find((m) => m.info?.role === 'assistant');
|
|
279
|
-
if (lastAssistantMsg) {
|
|
280
|
-
const isComplete = lastAssistantMsg.info?.time?.completed !== undefined;
|
|
281
|
-
const hasError = lastAssistantMsg.info?.error !== undefined;
|
|
282
|
-
if (hasError) {
|
|
283
|
-
throw new Error(`Agent error: ${JSON.stringify(lastAssistantMsg.info?.error)}`);
|
|
284
|
-
}
|
|
285
|
-
if (isComplete) {
|
|
286
|
-
break;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// Wait before polling again
|
|
290
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
291
|
-
}
|
|
292
|
-
if (attempts >= maxAttempts) {
|
|
293
|
-
throw new Error(`Session ${sessionId} timed out after ${maxAttempts * 2} seconds`);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
throw new Error(`Failed to get messages: ${error instanceof Error ? error.message : String(error)}`);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Wait for session to complete and return all messages
|
|
302
|
-
*/
|
|
303
|
-
async waitForCompletion(sessionId) {
|
|
304
|
-
const messages = [];
|
|
305
|
-
for await (const message of this.streamMessages(sessionId)) {
|
|
306
|
-
messages.push(message);
|
|
307
|
-
}
|
|
308
|
-
return messages;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Send a message to an existing session
|
|
312
|
-
*/
|
|
313
|
-
async sendMessage(sessionId, content) {
|
|
314
|
-
if (!this.client) {
|
|
315
|
-
throw new Error('OpenCode client not initialized. Call initialize() first.');
|
|
316
|
-
}
|
|
317
|
-
try {
|
|
318
|
-
// Send message using OpenCode SDK
|
|
319
|
-
await this.client.session.sendMessage({
|
|
320
|
-
path: { id: sessionId },
|
|
321
|
-
body: { content },
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
catch (error) {
|
|
325
|
-
throw new Error(`Failed to send message: ${error instanceof Error ? error.message : String(error)}`);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Close a session
|
|
330
|
-
*/
|
|
331
|
-
async closeSession(sessionId) {
|
|
332
|
-
if (!this.client) {
|
|
333
|
-
throw new Error('OpenCode client not initialized. Call initialize() first.');
|
|
334
|
-
}
|
|
335
|
-
try {
|
|
336
|
-
await this.client.session.delete({
|
|
337
|
-
path: { id: sessionId },
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
catch (error) {
|
|
341
|
-
throw new Error(`Failed to close session: ${error instanceof Error ? error.message : String(error)}`);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Shutdown - close in-process server if applicable
|
|
346
|
-
*/
|
|
347
|
-
async shutdown() {
|
|
348
|
-
if (this.inProcessServer) {
|
|
349
|
-
// Close the OpenCode server
|
|
350
|
-
this.inProcessServer.server.close();
|
|
351
|
-
// Give server time to clean up connections
|
|
352
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
353
|
-
}
|
|
354
|
-
if (this.projectRootEnv === undefined) {
|
|
355
|
-
delete process.env.DRS_PROJECT_ROOT;
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
process.env.DRS_PROJECT_ROOT = this.projectRootEnv;
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Get server URL
|
|
363
|
-
*/
|
|
364
|
-
getServerUrl() {
|
|
365
|
-
if (!this.baseUrl) {
|
|
366
|
-
throw new Error('Server not initialized');
|
|
367
|
-
}
|
|
368
|
-
return this.baseUrl;
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Resolve {env:VAR_NAME} references to actual environment variable values
|
|
372
|
-
*/
|
|
373
|
-
resolveEnvReferences(obj) {
|
|
374
|
-
if (typeof obj === 'string') {
|
|
375
|
-
// Check for {env:VAR_NAME} pattern
|
|
376
|
-
const envMatch = obj.match(/^\{env:([^}]+)\}$/);
|
|
377
|
-
if (envMatch) {
|
|
378
|
-
const envVarName = envMatch[1];
|
|
379
|
-
const envValue = process.env[envVarName];
|
|
380
|
-
if (!envValue) {
|
|
381
|
-
console.warn(`⚠️ Environment variable ${envVarName} is not set`);
|
|
382
|
-
return '';
|
|
383
|
-
}
|
|
384
|
-
return envValue;
|
|
385
|
-
}
|
|
386
|
-
return obj;
|
|
387
|
-
}
|
|
388
|
-
if (Array.isArray(obj)) {
|
|
389
|
-
return obj.map((item) => this.resolveEnvReferences(item));
|
|
390
|
-
}
|
|
391
|
-
if (obj !== null && typeof obj === 'object') {
|
|
392
|
-
const resolved = {};
|
|
393
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
394
|
-
resolved[key] = this.resolveEnvReferences(value);
|
|
395
|
-
}
|
|
396
|
-
return resolved;
|
|
397
|
-
}
|
|
398
|
-
return obj;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
function parseServerEndpoint(baseUrl) {
|
|
402
|
-
try {
|
|
403
|
-
const url = new URL(baseUrl);
|
|
404
|
-
const port = url.port !== '' ? Number(url.port) : url.protocol === 'https:' ? 443 : 80;
|
|
405
|
-
if (!url.hostname || Number.isNaN(port)) {
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
return { host: url.hostname, port };
|
|
409
|
-
}
|
|
410
|
-
catch {
|
|
411
|
-
return null;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
async function isServerReachable(baseUrl) {
|
|
415
|
-
const endpoint = parseServerEndpoint(baseUrl);
|
|
416
|
-
if (!endpoint) {
|
|
417
|
-
return false;
|
|
418
|
-
}
|
|
419
|
-
return new Promise((resolve) => {
|
|
420
|
-
const socket = net.createConnection(endpoint, () => {
|
|
421
|
-
socket.end();
|
|
422
|
-
resolve(true);
|
|
423
|
-
});
|
|
424
|
-
socket.setTimeout(1000);
|
|
425
|
-
socket.on('timeout', () => {
|
|
426
|
-
socket.destroy();
|
|
427
|
-
resolve(false);
|
|
428
|
-
});
|
|
429
|
-
socket.on('error', () => resolve(false));
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
async function waitForServerReady(baseUrl, attempts = 10, delayMs = 200) {
|
|
433
|
-
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
434
|
-
if (await isServerReachable(baseUrl)) {
|
|
435
|
-
return true;
|
|
436
|
-
}
|
|
437
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
438
|
-
}
|
|
439
|
-
return false;
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Create an OpenCode client with the given configuration
|
|
443
|
-
* @deprecated Use createOpencodeClientInstance instead, which properly initializes the client
|
|
444
|
-
*/
|
|
445
|
-
export function createOpencodeClient(config) {
|
|
446
|
-
return new OpencodeClient(config);
|
|
447
|
-
}
|
|
448
|
-
/**
|
|
449
|
-
* Create and initialize an OpenCode client with the given configuration
|
|
450
|
-
*/
|
|
451
|
-
export async function createOpencodeClientInstance(config) {
|
|
452
|
-
const client = new OpencodeClient(config);
|
|
453
|
-
await client.initialize();
|
|
454
|
-
return client;
|
|
455
|
-
}
|
|
456
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/opencode/client.ts"],"names":[],"mappings":"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"}
|