@osovv/vv-opencode 1.4.4 → 1.5.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/CHANGELOG.md +25 -0
- package/README.md +8 -8
- package/dist/commands/patch-provider.d.ts +5 -5
- package/dist/commands/patch-provider.js +10 -6
- package/dist/commands/patch-provider.js.map +1 -1
- package/dist/lib/opencode/agent-registrations.d.ts +33 -0
- package/dist/lib/opencode/agent-registrations.js +469 -0
- package/dist/lib/opencode/agent-registrations.js.map +1 -0
- package/dist/lib/opencode/inspection.d.ts +84 -0
- package/dist/lib/opencode/inspection.js +367 -0
- package/dist/lib/opencode/inspection.js.map +1 -0
- package/dist/lib/opencode/model-overrides.d.ts +19 -0
- package/dist/lib/opencode/model-overrides.js +221 -0
- package/dist/lib/opencode/model-overrides.js.map +1 -0
- package/dist/lib/opencode/paths.d.ts +21 -0
- package/dist/lib/opencode/paths.js +62 -0
- package/dist/lib/opencode/paths.js.map +1 -0
- package/dist/lib/opencode/plugin-registration.d.ts +17 -0
- package/dist/lib/opencode/plugin-registration.js +210 -0
- package/dist/lib/opencode/plugin-registration.js.map +1 -0
- package/dist/lib/opencode/shared-utils.d.ts +30 -0
- package/dist/lib/opencode/shared-utils.js +183 -0
- package/dist/lib/opencode/shared-utils.js.map +1 -0
- package/dist/lib/opencode/vvoc-config-io.d.ts +9 -0
- package/dist/lib/opencode/vvoc-config-io.js +58 -0
- package/dist/lib/opencode/vvoc-config-io.js.map +1 -0
- package/dist/lib/opencode.d.ts +15 -174
- package/dist/lib/opencode.js +19 -1387
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/spec-lint/cross-file-rules.d.ts +2 -0
- package/dist/lib/spec-lint/cross-file-rules.js +33 -0
- package/dist/lib/spec-lint/cross-file-rules.js.map +1 -0
- package/dist/lib/spec-lint/delegated-extraction.d.ts +8 -0
- package/dist/lib/spec-lint/delegated-extraction.js +112 -0
- package/dist/lib/spec-lint/delegated-extraction.js.map +1 -0
- package/dist/lib/spec-lint/lint.d.ts +7 -0
- package/dist/lib/spec-lint/lint.js +92 -0
- package/dist/lib/spec-lint/lint.js.map +1 -0
- package/dist/lib/spec-lint/parser.d.ts +101 -0
- package/dist/lib/spec-lint/parser.js +482 -0
- package/dist/lib/spec-lint/parser.js.map +1 -0
- package/dist/lib/spec-lint/plan-rules.d.ts +38 -0
- package/dist/lib/spec-lint/plan-rules.js +745 -0
- package/dist/lib/spec-lint/plan-rules.js.map +1 -0
- package/dist/lib/spec-lint/spec-rules.d.ts +8 -0
- package/dist/lib/spec-lint/spec-rules.js +188 -0
- package/dist/lib/spec-lint/spec-rules.js.map +1 -0
- package/dist/lib/spec-lint.d.ts +4 -63
- package/dist/lib/spec-lint.js +13 -1505
- package/dist/lib/spec-lint.js.map +1 -1
- package/dist/lib/vvoc-preset-registry.d.ts +7 -7
- package/dist/lib/vvoc-preset-registry.js +8 -8
- package/dist/lib/vvoc-preset-registry.js.map +1 -1
- package/dist/plugins/workflow/authorization.d.ts +30 -0
- package/dist/plugins/workflow/authorization.js +139 -0
- package/dist/plugins/workflow/authorization.js.map +1 -0
- package/dist/plugins/workflow/index.js +26 -329
- package/dist/plugins/workflow/index.js.map +1 -1
- package/dist/plugins/workflow/recovery.d.ts +17 -0
- package/dist/plugins/workflow/recovery.js +150 -0
- package/dist/plugins/workflow/recovery.js.map +1 -0
- package/dist/plugins/workflow/schemas.d.ts +208 -0
- package/dist/plugins/workflow/schemas.js +138 -0
- package/dist/plugins/workflow/schemas.js.map +1 -0
- package/dist/plugins/workflow/tooling.d.ts +10 -65
- package/dist/plugins/workflow/tooling.js +5 -5
- package/dist/plugins/workflow/tooling.js.map +1 -1
- package/package.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
// FILE: src/lib/opencode/inspection.ts
|
|
2
|
+
// VERSION: 1.0.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: OpenCode host compatibility diagnostics and source-aware installation inspection.
|
|
5
|
+
// SCOPE: opencode --version execution and semantic-version TUI compatibility comparison, installation-state inspection across runtime/TUI/vvoc config files with role-reference resolution and orchestration profile, strict/effective layered-scope inspection with config-source attribution, and write-result formatting for CLI output.
|
|
6
|
+
// DEPENDS: [node:path, src/lib/config-layers.ts, src/lib/model-roles.ts, src/lib/orchestration.ts, src/lib/vvoc-config.ts, src/lib/vvoc-paths.ts, src/lib/package.ts, src/lib/opencode/shared-utils.ts, src/lib/opencode/paths.ts, src/lib/opencode/plugin-registration.ts]
|
|
7
|
+
// LINKS: [M-CLI-CONFIG, M-ORCHESTRATION-PROFILES]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// OpenCodeRuntimeInspection - Installed OpenCode version and TUI compatibility snapshot.
|
|
14
|
+
// InstallationInspection - Current OpenCode runtime/TUI and vvoc installation status snapshot.
|
|
15
|
+
// inspectOpenCodeRuntime - Reads the installed OpenCode version and evaluates TUI compatibility.
|
|
16
|
+
// isTuiOpenCodeVersionCompatible - Compares an OpenCode version with the managed TUI minimum.
|
|
17
|
+
// extractOpenCodeVersion - Extracts the first semantic version found in `opencode --version` output.
|
|
18
|
+
// inspectInstallation - Reads current OpenCode/vvoc installation state for status and doctor commands.
|
|
19
|
+
// inspectInstallationForScope - Reads installation state using strict/effective layered source resolution.
|
|
20
|
+
// describeWriteResult - Formats config write outcomes for CLI output.
|
|
21
|
+
// END_MODULE_MAP
|
|
22
|
+
//
|
|
23
|
+
// START_CHANGE_SUMMARY
|
|
24
|
+
// LAST_CHANGE: [C-OPENCODE-MODULE-SPLIT - Extracted runtime inspection, installation inspection, role-reference diagnostics, and write-result formatting from the former src/lib/opencode.ts monolith into this zone module.]
|
|
25
|
+
// END_CHANGE_SUMMARY
|
|
26
|
+
import { dirname } from "node:path";
|
|
27
|
+
import { resolveOpenCodeConfigSource, resolveOpenCodeTuiConfigSource, resolveVvocConfigSource, } from "../config-layers.js";
|
|
28
|
+
import { BUILTIN_ROLE_NAMES, ROLE_REFERENCE_PREFIX } from "../model-roles.js";
|
|
29
|
+
import { resolveOrchestrationPolicy } from "../orchestration.js";
|
|
30
|
+
import { createDefaultVvocConfig, parseVersionedVvocConfigText, } from "../vvoc-config.js";
|
|
31
|
+
import { PACKAGE_NAME } from "../package.js";
|
|
32
|
+
import { getVvocAgentsDir, getVvocSkillsDir } from "../vvoc-paths.js";
|
|
33
|
+
import { parseObjectDocument, readOptionalText } from "./shared-utils.js";
|
|
34
|
+
import { resolvePaths } from "./paths.js";
|
|
35
|
+
import { isPackagePluginSpecifier, isTuiPackageSpecifier, MINIMUM_TUI_OPENCODE_VERSION, readPluginList, readTuiPluginList, readTuiPluginName, TUI_PACKAGE_SPECIFIER, } from "./plugin-registration.js";
|
|
36
|
+
// START_BLOCK_INSPECT_OPENCODE_RUNTIME
|
|
37
|
+
export async function inspectOpenCodeRuntime(run = runOpenCodeVersionCommand) {
|
|
38
|
+
try {
|
|
39
|
+
const result = await run();
|
|
40
|
+
if (result.exitCode !== 0) {
|
|
41
|
+
const detail = result.stderr.trim() || result.stdout.trim() || `exit code ${result.exitCode}`;
|
|
42
|
+
return {
|
|
43
|
+
minimumTuiVersion: MINIMUM_TUI_OPENCODE_VERSION,
|
|
44
|
+
error: `opencode --version failed: ${detail}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const version = extractOpenCodeVersion(`${result.stdout}\n${result.stderr}`);
|
|
48
|
+
if (!version) {
|
|
49
|
+
return {
|
|
50
|
+
minimumTuiVersion: MINIMUM_TUI_OPENCODE_VERSION,
|
|
51
|
+
error: "opencode --version did not return a semantic version",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
version,
|
|
56
|
+
minimumTuiVersion: MINIMUM_TUI_OPENCODE_VERSION,
|
|
57
|
+
tuiCompatible: isTuiOpenCodeVersionCompatible(version),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return {
|
|
62
|
+
minimumTuiVersion: MINIMUM_TUI_OPENCODE_VERSION,
|
|
63
|
+
error: error instanceof Error ? error.message : String(error),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function isTuiOpenCodeVersionCompatible(version) {
|
|
68
|
+
const current = parseSemanticVersion(version);
|
|
69
|
+
const minimum = parseSemanticVersion(MINIMUM_TUI_OPENCODE_VERSION);
|
|
70
|
+
if (!current || !minimum)
|
|
71
|
+
return false;
|
|
72
|
+
for (let index = 0; index < 3; index += 1) {
|
|
73
|
+
const currentPart = current.parts[index] ?? 0;
|
|
74
|
+
const minimumPart = minimum.parts[index] ?? 0;
|
|
75
|
+
if (currentPart > minimumPart)
|
|
76
|
+
return true;
|
|
77
|
+
if (currentPart < minimumPart)
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return !current.prerelease || Boolean(minimum.prerelease);
|
|
81
|
+
}
|
|
82
|
+
async function runOpenCodeVersionCommand() {
|
|
83
|
+
const subprocess = Bun.spawn({
|
|
84
|
+
cmd: ["opencode", "--version"],
|
|
85
|
+
stdout: "pipe",
|
|
86
|
+
stderr: "pipe",
|
|
87
|
+
});
|
|
88
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
89
|
+
new Response(subprocess.stdout).text(),
|
|
90
|
+
new Response(subprocess.stderr).text(),
|
|
91
|
+
subprocess.exited,
|
|
92
|
+
]);
|
|
93
|
+
return { exitCode, stdout, stderr };
|
|
94
|
+
}
|
|
95
|
+
/** Extracts the first semantic version found in `opencode --version` output. */
|
|
96
|
+
export function extractOpenCodeVersion(output) {
|
|
97
|
+
const match = output.match(/(?:^|\s)v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)(?=\s|$)/);
|
|
98
|
+
return match?.[1];
|
|
99
|
+
}
|
|
100
|
+
function parseSemanticVersion(value) {
|
|
101
|
+
const match = value
|
|
102
|
+
.trim()
|
|
103
|
+
.match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/);
|
|
104
|
+
if (!match)
|
|
105
|
+
return undefined;
|
|
106
|
+
return {
|
|
107
|
+
parts: [Number(match[1]), Number(match[2]), Number(match[3])],
|
|
108
|
+
prerelease: match[4],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// END_BLOCK_INSPECT_OPENCODE_RUNTIME
|
|
112
|
+
// START_BLOCK_INSPECT_INSTALLATION_STATE
|
|
113
|
+
export async function inspectInstallation(paths, options = {}) {
|
|
114
|
+
const warnings = [];
|
|
115
|
+
const problems = [];
|
|
116
|
+
const runtime = options.runtime ?? {
|
|
117
|
+
minimumTuiVersion: MINIMUM_TUI_OPENCODE_VERSION,
|
|
118
|
+
};
|
|
119
|
+
if (runtime.error) {
|
|
120
|
+
problems.push(`OpenCode version unavailable: ${runtime.error}`);
|
|
121
|
+
}
|
|
122
|
+
else if (runtime.tuiCompatible === false) {
|
|
123
|
+
problems.push(`OpenCode ${runtime.version ?? "unknown"} is incompatible with /context; ${runtime.minimumTuiVersion} or newer is required`);
|
|
124
|
+
}
|
|
125
|
+
if (paths.opencodeAlternatePaths.length > 0) {
|
|
126
|
+
warnings.push(`multiple OpenCode config files exist: ${[paths.opencodeConfigPath, ...paths.opencodeAlternatePaths].join(", ")}`);
|
|
127
|
+
}
|
|
128
|
+
if (paths.opencodeTuiAlternatePaths.length > 0) {
|
|
129
|
+
warnings.push(`multiple OpenCode TUI config files exist: ${[paths.opencodeTuiConfigPath, ...paths.opencodeTuiAlternatePaths].join(", ")}`);
|
|
130
|
+
}
|
|
131
|
+
const opencodeText = await readOptionalText(paths.opencodeConfigPath);
|
|
132
|
+
let opencodeParseError;
|
|
133
|
+
let plugins = [];
|
|
134
|
+
let pluginConfigured = false;
|
|
135
|
+
if (opencodeText) {
|
|
136
|
+
try {
|
|
137
|
+
const document = parseObjectDocument(opencodeText, paths.opencodeConfigPath);
|
|
138
|
+
plugins = readPluginList(document, paths.opencodeConfigPath);
|
|
139
|
+
pluginConfigured = plugins.some(isPackagePluginSpecifier);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
opencodeParseError = error instanceof Error ? error.message : String(error);
|
|
143
|
+
problems.push(opencodeParseError);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const tuiText = await readOptionalText(paths.opencodeTuiConfigPath);
|
|
147
|
+
let tuiParseError;
|
|
148
|
+
let tuiPlugins = [];
|
|
149
|
+
let tuiPluginConfigured = false;
|
|
150
|
+
if (tuiText) {
|
|
151
|
+
try {
|
|
152
|
+
const document = parseObjectDocument(tuiText, paths.opencodeTuiConfigPath);
|
|
153
|
+
tuiPlugins = readTuiPluginList(document, paths.opencodeTuiConfigPath);
|
|
154
|
+
tuiPluginConfigured = tuiPlugins.some((entry) => isTuiPackageSpecifier(readTuiPluginName(entry)));
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
tuiParseError = error instanceof Error ? error.message : String(error);
|
|
158
|
+
problems.push(tuiParseError);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const vvocText = await readOptionalText(paths.vvocConfigPath);
|
|
162
|
+
let vvocParseError;
|
|
163
|
+
let vvocConfig;
|
|
164
|
+
let vvocSourceSchema;
|
|
165
|
+
let vvocSourceVersion;
|
|
166
|
+
let roleAssignments = [];
|
|
167
|
+
if (vvocText) {
|
|
168
|
+
try {
|
|
169
|
+
const parsedConfig = parseVersionedVvocConfigText(vvocText, paths.vvocConfigPath);
|
|
170
|
+
vvocConfig = parsedConfig.config;
|
|
171
|
+
vvocSourceSchema = parsedConfig.sourceSchema;
|
|
172
|
+
vvocSourceVersion = parsedConfig.sourceVersion;
|
|
173
|
+
roleAssignments = listRoleAssignments(vvocConfig.roles);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
vvocParseError = error instanceof Error ? error.message : String(error);
|
|
177
|
+
problems.push(vvocParseError);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const unresolvedRoleReferences = opencodeText && !opencodeParseError
|
|
181
|
+
? collectUnresolvedRoleReferences(opencodeText, paths.opencodeConfigPath, vvocConfig?.roles ?? {})
|
|
182
|
+
: [];
|
|
183
|
+
for (const unresolved of unresolvedRoleReferences) {
|
|
184
|
+
problems.push(`unresolved role reference at ${unresolved.fieldPath}: ${unresolved.roleRef} (missing role: ${unresolved.roleId})`);
|
|
185
|
+
}
|
|
186
|
+
if (!pluginConfigured) {
|
|
187
|
+
problems.push(`${PACKAGE_NAME} is not configured in ${paths.opencodeConfigPath}`);
|
|
188
|
+
}
|
|
189
|
+
if (!tuiPluginConfigured) {
|
|
190
|
+
problems.push(`${TUI_PACKAGE_SPECIFIER} is not configured in ${paths.opencodeTuiConfigPath}`);
|
|
191
|
+
}
|
|
192
|
+
if (!vvocText) {
|
|
193
|
+
problems.push(`vvoc config is missing at ${paths.vvocConfigPath}`);
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
scope: paths.scope,
|
|
197
|
+
runtime,
|
|
198
|
+
opencode: {
|
|
199
|
+
path: paths.opencodeConfigPath,
|
|
200
|
+
exists: Boolean(opencodeText),
|
|
201
|
+
alternates: paths.opencodeAlternatePaths,
|
|
202
|
+
parseError: opencodeParseError,
|
|
203
|
+
pluginConfigured,
|
|
204
|
+
plugins,
|
|
205
|
+
},
|
|
206
|
+
tui: {
|
|
207
|
+
path: paths.opencodeTuiConfigPath,
|
|
208
|
+
exists: Boolean(tuiText),
|
|
209
|
+
alternates: paths.opencodeTuiAlternatePaths,
|
|
210
|
+
parseError: tuiParseError,
|
|
211
|
+
pluginConfigured: tuiPluginConfigured,
|
|
212
|
+
plugins: tuiPlugins,
|
|
213
|
+
},
|
|
214
|
+
vvoc: {
|
|
215
|
+
path: paths.vvocConfigPath,
|
|
216
|
+
exists: Boolean(vvocText),
|
|
217
|
+
parseError: vvocParseError,
|
|
218
|
+
schema: vvocSourceSchema,
|
|
219
|
+
version: vvocSourceVersion,
|
|
220
|
+
},
|
|
221
|
+
guardian: {
|
|
222
|
+
config: vvocConfig?.guardian,
|
|
223
|
+
},
|
|
224
|
+
secretsRedaction: {
|
|
225
|
+
config: vvocConfig?.secretsRedaction,
|
|
226
|
+
},
|
|
227
|
+
orchestration: {
|
|
228
|
+
profile: vvocConfig ? resolveOrchestrationPolicy(vvocConfig).profile : undefined,
|
|
229
|
+
},
|
|
230
|
+
roles: {
|
|
231
|
+
assignments: roleAssignments,
|
|
232
|
+
unresolvedReferences: unresolvedRoleReferences,
|
|
233
|
+
},
|
|
234
|
+
warnings,
|
|
235
|
+
problems,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
export async function inspectInstallationForScope(options) {
|
|
239
|
+
const [opencodeSource, opencodeTuiSource, vvocSource, runtime] = await Promise.all([
|
|
240
|
+
resolveOpenCodeConfigSource({
|
|
241
|
+
scope: options.scope,
|
|
242
|
+
cwd: options.cwd,
|
|
243
|
+
configDir: options.configDir,
|
|
244
|
+
}),
|
|
245
|
+
resolveOpenCodeTuiConfigSource({
|
|
246
|
+
scope: options.scope,
|
|
247
|
+
cwd: options.cwd,
|
|
248
|
+
configDir: options.configDir,
|
|
249
|
+
}),
|
|
250
|
+
resolveVvocConfigSource({
|
|
251
|
+
scope: options.scope,
|
|
252
|
+
cwd: options.cwd,
|
|
253
|
+
configDir: options.configDir,
|
|
254
|
+
allowDefault: options.scope === "effective",
|
|
255
|
+
}),
|
|
256
|
+
(options.inspectRuntime ?? inspectOpenCodeRuntime)(),
|
|
257
|
+
]);
|
|
258
|
+
if (options.scope === "project") {
|
|
259
|
+
const missingSource = [opencodeSource, vvocSource].find((source) => source.kind === "missing");
|
|
260
|
+
if (missingSource) {
|
|
261
|
+
throw new Error(missingSource.reason ?? "project config missing; run vvoc install --scope project");
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const fallbackPaths = await resolvePaths({
|
|
265
|
+
scope: options.scope === "global" ? "global" : "project",
|
|
266
|
+
cwd: options.cwd,
|
|
267
|
+
configDir: options.configDir,
|
|
268
|
+
});
|
|
269
|
+
const opencodeConfigPath = opencodeSource.path ?? fallbackPaths.opencodeConfigPath;
|
|
270
|
+
const opencodeTuiConfigPath = opencodeTuiSource.path ?? fallbackPaths.opencodeTuiConfigPath;
|
|
271
|
+
const vvocConfigPath = vvocSource.path ?? fallbackPaths.vvocConfigPath;
|
|
272
|
+
const scopedPaths = {
|
|
273
|
+
...fallbackPaths,
|
|
274
|
+
opencodeBaseDir: dirname(opencodeConfigPath),
|
|
275
|
+
vvocBaseDir: dirname(vvocConfigPath),
|
|
276
|
+
opencodeConfigPath,
|
|
277
|
+
opencodeTuiConfigPath,
|
|
278
|
+
vvocConfigPath,
|
|
279
|
+
opencodeAlternatePaths: [],
|
|
280
|
+
opencodeTuiAlternatePaths: [],
|
|
281
|
+
managedAgentsDirPath: getVvocAgentsDir(dirname(vvocConfigPath)),
|
|
282
|
+
managedSkillsDirPath: getVvocSkillsDir(dirname(vvocConfigPath)),
|
|
283
|
+
};
|
|
284
|
+
const inspection = await inspectInstallation(scopedPaths, { runtime });
|
|
285
|
+
return {
|
|
286
|
+
...inspection,
|
|
287
|
+
orchestration: {
|
|
288
|
+
profile: inspection.orchestration.profile ??
|
|
289
|
+
(vvocSource.kind === "default"
|
|
290
|
+
? resolveOrchestrationPolicy(createDefaultVvocConfig()).profile
|
|
291
|
+
: undefined),
|
|
292
|
+
},
|
|
293
|
+
scope: options.scope,
|
|
294
|
+
opencodeSource,
|
|
295
|
+
opencodeTuiSource,
|
|
296
|
+
vvocSource,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// END_BLOCK_INSPECT_INSTALLATION_STATE
|
|
300
|
+
export function describeWriteResult(result) {
|
|
301
|
+
let message = "";
|
|
302
|
+
switch (result.action) {
|
|
303
|
+
case "created":
|
|
304
|
+
message = `Created ${result.path}`;
|
|
305
|
+
break;
|
|
306
|
+
case "updated":
|
|
307
|
+
message = `Updated ${result.path}`;
|
|
308
|
+
break;
|
|
309
|
+
case "kept":
|
|
310
|
+
message = `Kept ${result.path}`;
|
|
311
|
+
break;
|
|
312
|
+
case "skipped":
|
|
313
|
+
message = `Skipped ${result.path}`;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
return result.reason ? `${message} (${result.reason})` : message;
|
|
317
|
+
}
|
|
318
|
+
// START_BLOCK_ROLE_REFERENCE_DIAGNOSTICS
|
|
319
|
+
function listRoleAssignments(roles) {
|
|
320
|
+
const listed = [];
|
|
321
|
+
for (const roleId of BUILTIN_ROLE_NAMES) {
|
|
322
|
+
if (typeof roles[roleId] === "string") {
|
|
323
|
+
listed.push({ roleId, model: roles[roleId], builtIn: true });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const customRoleIds = Object.keys(roles)
|
|
327
|
+
.filter((roleId) => !BUILTIN_ROLE_NAMES.includes(roleId))
|
|
328
|
+
.sort((left, right) => left.localeCompare(right));
|
|
329
|
+
for (const roleId of customRoleIds) {
|
|
330
|
+
listed.push({ roleId, model: roles[roleId], builtIn: false });
|
|
331
|
+
}
|
|
332
|
+
return listed;
|
|
333
|
+
}
|
|
334
|
+
function collectUnresolvedRoleReferences(opencodeText, label, roleMap) {
|
|
335
|
+
const document = parseObjectDocument(opencodeText, label);
|
|
336
|
+
const unresolved = [];
|
|
337
|
+
const collectFromField = (fieldPath, value) => {
|
|
338
|
+
if (typeof value !== "string") {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const trimmed = value.trim();
|
|
342
|
+
if (!trimmed.startsWith(ROLE_REFERENCE_PREFIX)) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const roleId = trimmed.slice(ROLE_REFERENCE_PREFIX.length).trim();
|
|
346
|
+
if (!roleId || !Object.hasOwn(roleMap, roleId)) {
|
|
347
|
+
unresolved.push({ fieldPath, roleRef: trimmed, roleId: roleId || "<missing>" });
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
collectFromField("model", document.model);
|
|
351
|
+
collectFromField("small_model", document.small_model);
|
|
352
|
+
for (const parentName of ["agent", "command"]) {
|
|
353
|
+
const parent = document[parentName];
|
|
354
|
+
if (!parent || typeof parent !== "object" || Array.isArray(parent)) {
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
for (const [entryName, entry] of Object.entries(parent)) {
|
|
358
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
collectFromField(`${parentName}.${entryName}.model`, entry.model);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return unresolved;
|
|
365
|
+
}
|
|
366
|
+
// END_BLOCK_ROLE_REFERENCE_DIAGNOSTICS
|
|
367
|
+
//# sourceMappingURL=inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../../src/lib/opencode/inspection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ResolvedPaths } from "./paths.js";
|
|
2
|
+
import { type JsonObject, type WriteResult } from "./shared-utils.js";
|
|
3
|
+
export type OpenCodeDefaultModelKey = "model" | "small_model";
|
|
4
|
+
export declare function readOpenCodeAgentModel(paths: Pick<ResolvedPaths, "opencodeConfigPath">, agentName: string): Promise<string | undefined>;
|
|
5
|
+
export declare function readOpenCodeAgentOverride(paths: Pick<ResolvedPaths, "opencodeConfigPath">, agentName: string): Promise<{
|
|
6
|
+
model?: string;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function readOpenCodeDefaultModel(paths: Pick<ResolvedPaths, "opencodeConfigPath">, key: OpenCodeDefaultModelKey): Promise<string | undefined>;
|
|
9
|
+
export declare function writeOpenCodeAgentModel(paths: Pick<ResolvedPaths, "opencodeConfigPath">, agentName: string, options: {
|
|
10
|
+
model?: string;
|
|
11
|
+
ensureEntry: boolean;
|
|
12
|
+
}): Promise<WriteResult>;
|
|
13
|
+
export declare function writeOpenCodeDefaultModel(paths: Pick<ResolvedPaths, "opencodeConfigPath">, key: OpenCodeDefaultModelKey, options: {
|
|
14
|
+
model?: string;
|
|
15
|
+
ensureEntry: boolean;
|
|
16
|
+
}): Promise<WriteResult>;
|
|
17
|
+
export declare function writeOpenCodeProviderObject(paths: Pick<ResolvedPaths, "opencodeConfigPath">, providerID: string, value: JsonObject): Promise<WriteResult>;
|
|
18
|
+
export declare function ensureProviderBaseUrlConfigText(text: string | undefined, providerID: string, baseURL: string): string;
|
|
19
|
+
export declare function writeProviderBaseUrl(paths: Pick<ResolvedPaths, "opencodeConfigPath">, providerID: string, baseURL: string): Promise<WriteResult>;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// FILE: src/lib/opencode/model-overrides.ts
|
|
2
|
+
// VERSION: 1.0.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Generic OpenCode agent, default-model, and provider option overrides for any agent or provider id.
|
|
5
|
+
// SCOPE: Read/write model overrides for arbitrary OpenCode agents, top-level model/small_model overrides with entry ensuring, provider.<id> object merges and options.baseURL writes. Managed vvoc agent model IO stays in agent-registrations.ts.
|
|
6
|
+
// DEPENDS: [jsonc-parser, src/lib/opencode/shared-utils.ts, src/lib/opencode/paths.ts, src/lib/opencode/agent-registrations.ts]
|
|
7
|
+
// LINKS: [M-CLI-CONFIG, M-CLI-AGENT-MODELS]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// OpenCodeDefaultModelKey - Supported top-level OpenCode default model fields.
|
|
14
|
+
// readOpenCodeAgentModel - Reads a model override for any OpenCode agent from config.
|
|
15
|
+
// readOpenCodeAgentOverride - Reads a model override for any OpenCode agent from config.
|
|
16
|
+
// writeOpenCodeAgentModel - Writes or removes a model override for any OpenCode agent in config.
|
|
17
|
+
// readOpenCodeDefaultModel - Reads a top-level OpenCode model or small_model override.
|
|
18
|
+
// writeOpenCodeDefaultModel - Writes or removes a top-level OpenCode model or small_model override.
|
|
19
|
+
// writeOpenCodeProviderObject - Writes or merges a provider.<id> object override.
|
|
20
|
+
// ensureProviderBaseUrlConfigText - Ensures OpenCode config contains the requested provider options.baseURL override.
|
|
21
|
+
// writeProviderBaseUrl - Writes a provider options.baseURL override into OpenCode config.
|
|
22
|
+
// END_MODULE_MAP
|
|
23
|
+
//
|
|
24
|
+
// START_CHANGE_SUMMARY
|
|
25
|
+
// LAST_CHANGE: [C-OPENCODE-MODULE-SPLIT - Extracted generic agent/default-model/provider override IO from the former src/lib/opencode.ts monolith into this zone module.]
|
|
26
|
+
// END_CHANGE_SUMMARY
|
|
27
|
+
import { applyEdits, format, modify } from "jsonc-parser";
|
|
28
|
+
import { ensureAgentConfigText, readAgentMap } from "./agent-registrations.js";
|
|
29
|
+
import { ensureOpenCodeConfigText, ensureTrailingNewline, mergeJsonObjects, OPENCODE_SCHEMA_URL, parseObjectDocument, readAgentOverride, readNonEmptyString, readOptionalObject, readOptionalText, renderJson, updateAgentEntryText, writeText, } from "./shared-utils.js";
|
|
30
|
+
const JSON_FORMAT = {
|
|
31
|
+
insertSpaces: true,
|
|
32
|
+
tabSize: 2,
|
|
33
|
+
eol: "\n",
|
|
34
|
+
};
|
|
35
|
+
export async function readOpenCodeAgentModel(paths, agentName) {
|
|
36
|
+
return (await readOpenCodeAgentOverride(paths, agentName)).model;
|
|
37
|
+
}
|
|
38
|
+
export async function readOpenCodeAgentOverride(paths, agentName) {
|
|
39
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
40
|
+
if (!currentText) {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
const document = parseObjectDocument(currentText, paths.opencodeConfigPath);
|
|
44
|
+
const agentMap = readAgentMap(document, paths.opencodeConfigPath);
|
|
45
|
+
return readAgentOverride(agentMap[agentName], `${paths.opencodeConfigPath}: agent.${agentName}`);
|
|
46
|
+
}
|
|
47
|
+
export async function readOpenCodeDefaultModel(paths, key) {
|
|
48
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
49
|
+
if (!currentText) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const document = parseObjectDocument(currentText, paths.opencodeConfigPath);
|
|
53
|
+
const value = document[key];
|
|
54
|
+
if (value === undefined) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
return readNonEmptyString(value, `${paths.opencodeConfigPath}: ${key}`);
|
|
58
|
+
}
|
|
59
|
+
export async function writeOpenCodeAgentModel(paths, agentName, options) {
|
|
60
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
61
|
+
if (!currentText && !options.ensureEntry) {
|
|
62
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
63
|
+
}
|
|
64
|
+
const baseText = options.ensureEntry ? ensureAgentConfigText(currentText) : currentText;
|
|
65
|
+
if (!baseText) {
|
|
66
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
67
|
+
}
|
|
68
|
+
const document = parseObjectDocument(baseText, paths.opencodeConfigPath);
|
|
69
|
+
const agentMap = readAgentMap(document, paths.opencodeConfigPath);
|
|
70
|
+
const currentEntry = agentMap[agentName];
|
|
71
|
+
if (!currentEntry && !options.ensureEntry) {
|
|
72
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
73
|
+
}
|
|
74
|
+
const nextEntry = currentEntry ? { ...currentEntry } : {};
|
|
75
|
+
if (options.model) {
|
|
76
|
+
nextEntry.model = options.model;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
delete nextEntry.model;
|
|
80
|
+
}
|
|
81
|
+
const nextText = updateAgentEntryText(baseText, agentName, nextEntry);
|
|
82
|
+
if ((currentText ?? "") === nextText) {
|
|
83
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
84
|
+
}
|
|
85
|
+
await writeText(paths.opencodeConfigPath, nextText);
|
|
86
|
+
return {
|
|
87
|
+
action: currentText ? "updated" : "created",
|
|
88
|
+
path: paths.opencodeConfigPath,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export async function writeOpenCodeDefaultModel(paths, key, options) {
|
|
92
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
93
|
+
if (!currentText && !options.ensureEntry) {
|
|
94
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
95
|
+
}
|
|
96
|
+
const baseText = options.ensureEntry ? ensureOpenCodeConfigText(currentText) : currentText;
|
|
97
|
+
if (!baseText) {
|
|
98
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
99
|
+
}
|
|
100
|
+
const nextText = updateTopLevelStringFieldText(baseText, key, options.model);
|
|
101
|
+
if ((currentText ?? "") === nextText) {
|
|
102
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
103
|
+
}
|
|
104
|
+
await writeText(paths.opencodeConfigPath, nextText);
|
|
105
|
+
return {
|
|
106
|
+
action: currentText ? "updated" : "created",
|
|
107
|
+
path: paths.opencodeConfigPath,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export async function writeOpenCodeProviderObject(paths, providerID, value) {
|
|
111
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
112
|
+
const nextText = ensureProviderObjectConfigText(currentText, providerID, value);
|
|
113
|
+
if ((currentText ?? "") === nextText) {
|
|
114
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
115
|
+
}
|
|
116
|
+
await writeText(paths.opencodeConfigPath, nextText);
|
|
117
|
+
return {
|
|
118
|
+
action: currentText ? "updated" : "created",
|
|
119
|
+
path: paths.opencodeConfigPath,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// START_BLOCK_ENSURE_PROVIDER_BASE_URL_CONFIG
|
|
123
|
+
export function ensureProviderBaseUrlConfigText(text, providerID, baseURL) {
|
|
124
|
+
if (!text?.trim()) {
|
|
125
|
+
return renderJson({
|
|
126
|
+
$schema: OPENCODE_SCHEMA_URL,
|
|
127
|
+
provider: {
|
|
128
|
+
[providerID]: {
|
|
129
|
+
options: {
|
|
130
|
+
baseURL,
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const document = parseObjectDocument(text, "OpenCode config");
|
|
137
|
+
const currentProviders = readProviderMap(document, "OpenCode config");
|
|
138
|
+
const currentProvider = currentProviders[providerID];
|
|
139
|
+
const currentOptions = currentProvider
|
|
140
|
+
? readOptionalObject(currentProvider, "options", `OpenCode config: provider.${providerID}`)
|
|
141
|
+
: undefined;
|
|
142
|
+
let nextText = text;
|
|
143
|
+
if (!Object.hasOwn(document, "$schema")) {
|
|
144
|
+
nextText = applyEdits(nextText, modify(nextText, ["$schema"], OPENCODE_SCHEMA_URL, {
|
|
145
|
+
formattingOptions: JSON_FORMAT,
|
|
146
|
+
getInsertionIndex: () => 0,
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
if (currentOptions?.baseURL !== baseURL) {
|
|
150
|
+
nextText = applyEdits(nextText, modify(nextText, ["provider", providerID, "options", "baseURL"], baseURL, {
|
|
151
|
+
formattingOptions: JSON_FORMAT,
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
|
|
155
|
+
}
|
|
156
|
+
export async function writeProviderBaseUrl(paths, providerID, baseURL) {
|
|
157
|
+
const currentText = await readOptionalText(paths.opencodeConfigPath);
|
|
158
|
+
const nextText = ensureProviderBaseUrlConfigText(currentText, providerID, baseURL);
|
|
159
|
+
if ((currentText ?? "") === nextText) {
|
|
160
|
+
return { action: "kept", path: paths.opencodeConfigPath };
|
|
161
|
+
}
|
|
162
|
+
await writeText(paths.opencodeConfigPath, nextText);
|
|
163
|
+
return {
|
|
164
|
+
action: currentText ? "updated" : "created",
|
|
165
|
+
path: paths.opencodeConfigPath,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// END_BLOCK_ENSURE_PROVIDER_BASE_URL_CONFIG
|
|
169
|
+
// START_BLOCK_PROVIDER_AND_FIELD_EDITS
|
|
170
|
+
function readProviderMap(document, label) {
|
|
171
|
+
const raw = document.provider;
|
|
172
|
+
if (raw === undefined) {
|
|
173
|
+
return {};
|
|
174
|
+
}
|
|
175
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
176
|
+
throw new Error(`${label}: expected "provider" to be an object`);
|
|
177
|
+
}
|
|
178
|
+
const entries = {};
|
|
179
|
+
for (const [name, value] of Object.entries(raw)) {
|
|
180
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
181
|
+
throw new Error(`${label}: expected "provider.${name}" to be an object`);
|
|
182
|
+
}
|
|
183
|
+
entries[name] = value;
|
|
184
|
+
}
|
|
185
|
+
return entries;
|
|
186
|
+
}
|
|
187
|
+
function ensureProviderObjectConfigText(text, providerID, value) {
|
|
188
|
+
if (!text?.trim()) {
|
|
189
|
+
return renderJson({
|
|
190
|
+
$schema: OPENCODE_SCHEMA_URL,
|
|
191
|
+
provider: {
|
|
192
|
+
[providerID]: value,
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const document = parseObjectDocument(text, "OpenCode config");
|
|
197
|
+
const currentProviders = readProviderMap(document, "OpenCode config");
|
|
198
|
+
const currentValue = currentProviders[providerID];
|
|
199
|
+
const nextValue = currentValue ? mergeJsonObjects(currentValue, value) : value;
|
|
200
|
+
let nextText = text;
|
|
201
|
+
if (!Object.hasOwn(document, "$schema")) {
|
|
202
|
+
nextText = applyEdits(nextText, modify(nextText, ["$schema"], OPENCODE_SCHEMA_URL, {
|
|
203
|
+
formattingOptions: JSON_FORMAT,
|
|
204
|
+
getInsertionIndex: () => 0,
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
if (JSON.stringify(currentValue) !== JSON.stringify(nextValue)) {
|
|
208
|
+
nextText = applyEdits(nextText, modify(nextText, ["provider", providerID], nextValue, {
|
|
209
|
+
formattingOptions: JSON_FORMAT,
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
|
|
213
|
+
}
|
|
214
|
+
function updateTopLevelStringFieldText(text, key, value) {
|
|
215
|
+
const nextText = applyEdits(text, modify(text, [key], value, {
|
|
216
|
+
formattingOptions: JSON_FORMAT,
|
|
217
|
+
}));
|
|
218
|
+
return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
|
|
219
|
+
}
|
|
220
|
+
// END_BLOCK_PROVIDER_AND_FIELD_EDITS
|
|
221
|
+
//# sourceMappingURL=model-overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-overrides.js","sourceRoot":"","sources":["../../../src/lib/opencode/model-overrides.ts"],"names":[],"mappings":"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"}
|