@osovv/vv-opencode 0.17.4 → 0.19.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 +48 -46
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.js +9 -193
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/completion.js +28 -25
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/config-validate.js +58 -5
- package/dist/commands/config-validate.js.map +1 -1
- package/dist/commands/doctor.js +11 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +2 -1
- package/dist/commands/init.js +30 -28
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/patch-provider.d.ts +19 -0
- package/dist/commands/patch-provider.js +23 -2
- package/dist/commands/patch-provider.js.map +1 -1
- package/dist/commands/preset.d.ts +3 -11
- package/dist/commands/preset.js +81 -85
- package/dist/commands/preset.js.map +1 -1
- package/dist/commands/role.d.ts +20 -0
- package/dist/commands/role.js +184 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/commands/status.js +17 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-models.d.ts +10 -1
- package/dist/lib/agent-models.js +34 -15
- package/dist/lib/agent-models.js.map +1 -1
- package/dist/lib/model-roles.d.ts +44 -0
- package/dist/lib/model-roles.js +144 -0
- package/dist/lib/model-roles.js.map +1 -0
- package/dist/lib/opencode.d.ts +21 -0
- package/dist/lib/opencode.js +178 -31
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/vvoc-config.d.ts +24 -10
- package/dist/lib/vvoc-config.js +166 -104
- package/dist/lib/vvoc-config.js.map +1 -1
- package/dist/plugins/guardian/index.js +124 -15
- package/dist/plugins/guardian/index.js.map +1 -1
- package/dist/plugins/memory/index.js +116 -10
- package/dist/plugins/memory/index.js.map +1 -1
- package/dist/plugins/memory-store.d.ts +0 -2
- package/dist/plugins/memory-store.js +2 -3
- package/dist/plugins/memory-store.js.map +1 -1
- package/dist/plugins/model-roles/index.d.ts +2 -0
- package/dist/plugins/model-roles/index.js +230 -0
- package/dist/plugins/model-roles/index.js.map +1 -0
- package/package.json +6 -2
- package/schemas/vvoc/v1.json +1 -1
- package/schemas/vvoc/v2.json +1 -1
- package/schemas/vvoc/v3.json +127 -0
package/dist/commands/preset.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// FILE: src/commands/preset.ts
|
|
2
|
-
// VERSION: 0.2
|
|
2
|
+
// VERSION: 0.4.2
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: List, show, and apply declarative named
|
|
5
|
-
// SCOPE: Canonical preset lookup, preset rendering,
|
|
6
|
-
// DEPENDS: [citty,
|
|
4
|
+
// PURPOSE: List, show, and apply declarative named role presets from canonical vvoc.json.
|
|
5
|
+
// SCOPE: Canonical preset lookup, preset rendering, and role-only preset application against canonical vvoc.json.
|
|
6
|
+
// DEPENDS: [citty, node:fs/promises, src/lib/model-roles.ts, src/lib/opencode.ts, src/lib/vvoc-config.ts]
|
|
7
7
|
// LINKS: [M-CLI-PRESET, M-CLI-CONFIG, M-CLI-COMMANDS]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
@@ -14,16 +14,20 @@
|
|
|
14
14
|
// listConfiguredPresets - Returns configured presets in deterministic name order.
|
|
15
15
|
// resolvePreset - Validates a preset name and returns the matching preset.
|
|
16
16
|
// formatPreset - Renders a preset object as JSON for CLI output.
|
|
17
|
-
// applyPreset - Applies a preset
|
|
17
|
+
// applyPreset - Applies a preset by updating only listed canonical role assignments.
|
|
18
18
|
// END_MODULE_MAP
|
|
19
19
|
//
|
|
20
20
|
// START_CHANGE_SUMMARY
|
|
21
|
-
// LAST_CHANGE: [v0.
|
|
21
|
+
// LAST_CHANGE: [v0.4.0 - Switched preset application to canonical role-only writes and removed legacy scope/OpenCode target mutation behavior.]
|
|
22
|
+
// LAST_CHANGE: [v0.4.1 - Stopped preset flows from running sync rewrites; now bootstrap vvoc.json only when missing and keep existing config sections untouched unless listed roles change.]
|
|
23
|
+
// LAST_CHANGE: [v0.4.2 - Switched existing-file preset flows to strict raw vvoc.json validation and role-only document mutation without preset reseeding side effects.]
|
|
22
24
|
// END_CHANGE_SUMMARY
|
|
23
25
|
import { defineCommand } from "citty";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
26
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
27
|
+
import { dirname } from "node:path";
|
|
28
|
+
import { parseModelSelection } from "../lib/model-roles.js";
|
|
29
|
+
import { resolvePaths } from "../lib/opencode.js";
|
|
30
|
+
import { createDefaultVvocConfig, renderVvocConfig, validateVvocConfigDocument, } from "../lib/vvoc-config.js";
|
|
27
31
|
const commandArg = {
|
|
28
32
|
type: "positional",
|
|
29
33
|
required: false,
|
|
@@ -34,12 +38,6 @@ const presetArg = {
|
|
|
34
38
|
required: false,
|
|
35
39
|
description: "Preset name for `show`.",
|
|
36
40
|
};
|
|
37
|
-
const scopeArg = {
|
|
38
|
-
type: "enum",
|
|
39
|
-
options: ["global", "project"],
|
|
40
|
-
default: "global",
|
|
41
|
-
description: "Write global or project OpenCode config.",
|
|
42
|
-
};
|
|
43
41
|
const configDirArg = {
|
|
44
42
|
type: "string",
|
|
45
43
|
description: "Override the global config home.",
|
|
@@ -52,7 +50,6 @@ export default defineCommand({
|
|
|
52
50
|
args: {
|
|
53
51
|
command: commandArg,
|
|
54
52
|
preset: presetArg,
|
|
55
|
-
scope: scopeArg,
|
|
56
53
|
"config-dir": configDirArg,
|
|
57
54
|
},
|
|
58
55
|
async run({ args }) {
|
|
@@ -82,64 +79,26 @@ export function formatPreset(_name, preset) {
|
|
|
82
79
|
return `${JSON.stringify(preset, null, 2)}\n`;
|
|
83
80
|
}
|
|
84
81
|
export async function applyPreset(presetName, options = {}) {
|
|
85
|
-
const paths = await
|
|
86
|
-
|
|
87
|
-
cwd: options.cwd ?? process.cwd(),
|
|
88
|
-
configDir: options.configDir,
|
|
89
|
-
});
|
|
90
|
-
const presets = await readConfiguredPresets({
|
|
91
|
-
cwd: options.cwd ?? process.cwd(),
|
|
92
|
-
configDir: options.configDir,
|
|
93
|
-
});
|
|
94
|
-
const resolved = resolvePreset(presetName, presets);
|
|
82
|
+
const { config, paths } = await loadGlobalVvocConfig(options);
|
|
83
|
+
const resolved = resolvePreset(presetName, config.presets);
|
|
95
84
|
const entries = Object.entries(resolved.preset.agents);
|
|
96
|
-
|
|
97
|
-
await installManagedAgentPrompts(paths, { force: false });
|
|
98
|
-
}
|
|
85
|
+
const nextRoles = { ...config.roles };
|
|
99
86
|
const changes = [];
|
|
100
|
-
for (const [
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
if (isOpenCodeDefaultModelTargetName(targetName)) {
|
|
115
|
-
const result = await writeOpenCodeDefaultModel(paths, resolveDefaultModelKey(targetName), {
|
|
116
|
-
model: normalizedValue,
|
|
117
|
-
ensureEntry: true,
|
|
118
|
-
});
|
|
119
|
-
changes.push({ targetName, model: normalizedValue, result });
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (isConfigurableOpenCodeSubagentName(targetName)) {
|
|
123
|
-
const result = await writeOpenCodeAgentModel(paths, targetName, {
|
|
124
|
-
model: normalizedValue,
|
|
125
|
-
ensureEntry: true,
|
|
126
|
-
});
|
|
127
|
-
changes.push({ targetName, model: normalizedValue, result });
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
if (isManagedOpenCodeAgentName(targetName)) {
|
|
131
|
-
const result = await writeManagedAgentModel(paths, targetName, {
|
|
132
|
-
model: normalizedValue,
|
|
133
|
-
ensureEntry: true,
|
|
134
|
-
});
|
|
135
|
-
changes.push({ targetName, model: normalizedValue, result });
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
if (isSpecialAgentName(targetName)) {
|
|
139
|
-
throw new Error(`unsupported preset target: ${targetName}`);
|
|
140
|
-
}
|
|
87
|
+
for (const [rawRoleId, rawModelSelection] of entries) {
|
|
88
|
+
const roleId = normalizeRoleId(rawRoleId, `preset ${resolved.name}`);
|
|
89
|
+
const model = parseModelSelection(normalizePresetModelSelection(rawModelSelection, `preset ${resolved.name} role ${roleId}`)).normalized;
|
|
90
|
+
const action = nextRoles[roleId] === model ? "kept" : "updated";
|
|
91
|
+
nextRoles[roleId] = model;
|
|
92
|
+
changes.push({ roleId, model, action });
|
|
93
|
+
}
|
|
94
|
+
if (changes.some((change) => change.action === "updated")) {
|
|
95
|
+
const nextConfig = {
|
|
96
|
+
...config,
|
|
97
|
+
roles: nextRoles,
|
|
98
|
+
};
|
|
99
|
+
await writeFile(paths.vvocConfigPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
|
|
141
100
|
}
|
|
142
|
-
return { name: resolved.name, preset: resolved.preset, changes };
|
|
101
|
+
return { name: resolved.name, preset: resolved.preset, changes, path: paths.vvocConfigPath };
|
|
143
102
|
}
|
|
144
103
|
async function listPresets(options = {}) {
|
|
145
104
|
return listConfiguredPresets(await readConfiguredPresets(options));
|
|
@@ -160,8 +119,8 @@ async function runPresetCommand(args) {
|
|
|
160
119
|
console.log("Available presets:");
|
|
161
120
|
for (const { name, preset } of presets) {
|
|
162
121
|
const description = preset.description ? ` - ${preset.description}` : "";
|
|
163
|
-
const
|
|
164
|
-
console.log(` ${name}${description} (${
|
|
122
|
+
const roleCount = Object.keys(preset.agents).length;
|
|
123
|
+
console.log(` ${name}${description} (${roleCount} role${roleCount === 1 ? "" : "s"})`);
|
|
165
124
|
}
|
|
166
125
|
return;
|
|
167
126
|
}
|
|
@@ -177,33 +136,70 @@ async function runPresetCommand(args) {
|
|
|
177
136
|
if (presetName) {
|
|
178
137
|
throw new Error(`unexpected extra argument for \`vvoc preset <name>\`: ${presetName}`);
|
|
179
138
|
}
|
|
180
|
-
const scope = resolveScope(args.scope);
|
|
181
139
|
const applied = await applyPreset(command, {
|
|
182
140
|
cwd: process.cwd(),
|
|
183
141
|
configDir,
|
|
184
|
-
scope,
|
|
185
142
|
});
|
|
186
|
-
console.log(`Applied preset ${applied.name}
|
|
143
|
+
console.log(`Applied preset ${applied.name}:`);
|
|
187
144
|
for (const change of applied.changes) {
|
|
188
|
-
console.log(` ${change.
|
|
145
|
+
console.log(` ${change.roleId}: ${change.action} (${change.model})`);
|
|
189
146
|
}
|
|
190
147
|
}
|
|
191
148
|
async function readConfiguredPresets(options = {}) {
|
|
149
|
+
const { config } = await loadGlobalVvocConfig(options);
|
|
150
|
+
return config.presets;
|
|
151
|
+
}
|
|
152
|
+
async function loadGlobalVvocConfig(options) {
|
|
192
153
|
const paths = await resolvePaths({
|
|
193
154
|
scope: "global",
|
|
194
155
|
cwd: options.cwd ?? process.cwd(),
|
|
195
156
|
configDir: options.configDir,
|
|
196
157
|
});
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
158
|
+
try {
|
|
159
|
+
const text = await readFile(paths.vvocConfigPath, "utf8");
|
|
160
|
+
return {
|
|
161
|
+
config: parseRawVvocConfigText(text, paths.vvocConfigPath),
|
|
162
|
+
paths,
|
|
163
|
+
};
|
|
200
164
|
}
|
|
201
|
-
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (!isMissingFileError(error)) {
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const defaultConfig = createDefaultVvocConfig();
|
|
171
|
+
await mkdir(dirname(paths.vvocConfigPath), { recursive: true });
|
|
172
|
+
await writeFile(paths.vvocConfigPath, renderVvocConfig(defaultConfig), "utf8");
|
|
173
|
+
return { config: defaultConfig, paths };
|
|
202
174
|
}
|
|
203
|
-
function
|
|
204
|
-
|
|
175
|
+
function parseRawVvocConfigText(text, label) {
|
|
176
|
+
let value;
|
|
177
|
+
try {
|
|
178
|
+
value = JSON.parse(text);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
throw new Error(`${label}: invalid JSON`);
|
|
182
|
+
}
|
|
183
|
+
const errors = validateVvocConfigDocument(value);
|
|
184
|
+
if (errors.length > 0) {
|
|
185
|
+
throw new Error(`${label}: ${errors.join("; ")}`);
|
|
186
|
+
}
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
function isMissingFileError(error) {
|
|
190
|
+
return error instanceof Error && "code" in error && error.code === "ENOENT";
|
|
205
191
|
}
|
|
206
|
-
function
|
|
207
|
-
|
|
192
|
+
function normalizeRoleId(roleId, context) {
|
|
193
|
+
const normalized = roleId.trim();
|
|
194
|
+
if (!/^[a-z][a-z0-9-]*$/.test(normalized)) {
|
|
195
|
+
throw new Error(`${context}: invalid role id \`${roleId}\`; expected lowercase letters, digits, and hyphens`);
|
|
196
|
+
}
|
|
197
|
+
return normalized;
|
|
198
|
+
}
|
|
199
|
+
function normalizePresetModelSelection(value, context) {
|
|
200
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
201
|
+
throw new Error(`${context}: model selection is required`);
|
|
202
|
+
}
|
|
203
|
+
return value;
|
|
208
204
|
}
|
|
209
205
|
//# sourceMappingURL=preset.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/commands/preset.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/commands/preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type ListedRole = {
|
|
2
|
+
roleId: string;
|
|
3
|
+
model: string;
|
|
4
|
+
builtIn: boolean;
|
|
5
|
+
};
|
|
6
|
+
type RoleWriteResult = {
|
|
7
|
+
action: "updated" | "kept";
|
|
8
|
+
path: string;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
|
|
11
|
+
export default _default;
|
|
12
|
+
export declare function listConfiguredRoles(roles: Record<string, string>): ListedRole[];
|
|
13
|
+
export declare function setRoleAssignment(roleId: string, modelSelection: string, options?: {
|
|
14
|
+
cwd?: string;
|
|
15
|
+
configDir?: string;
|
|
16
|
+
}): Promise<RoleWriteResult>;
|
|
17
|
+
export declare function unsetRoleAssignment(roleId: string, options?: {
|
|
18
|
+
cwd?: string;
|
|
19
|
+
configDir?: string;
|
|
20
|
+
}): Promise<RoleWriteResult>;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// FILE: src/commands/role.ts
|
|
2
|
+
// VERSION: 0.1.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Manage canonical vvoc model role assignments in global vvoc.json.
|
|
5
|
+
// SCOPE: List, set, and unset role assignments with built-in role protection and normalized model parsing.
|
|
6
|
+
// DEPENDS: [citty, node:fs/promises, src/lib/model-roles.ts, src/lib/opencode.ts, src/lib/vvoc-config.ts]
|
|
7
|
+
// LINKS: [M-CLI-ROLE, M-CLI-COMMANDS]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// default - Role command group.
|
|
14
|
+
// listConfiguredRoles - Returns role assignments with built-ins first.
|
|
15
|
+
// setRoleAssignment - Writes a normalized role assignment to canonical global vvoc.json.
|
|
16
|
+
// unsetRoleAssignment - Removes a custom role assignment from canonical global vvoc.json.
|
|
17
|
+
// END_MODULE_MAP
|
|
18
|
+
//
|
|
19
|
+
// START_CHANGE_SUMMARY
|
|
20
|
+
// LAST_CHANGE: [v0.1.0 - Added vvoc role list/set/unset over canonical v3 roles with built-in role protections.]
|
|
21
|
+
// END_CHANGE_SUMMARY
|
|
22
|
+
import { defineCommand } from "citty";
|
|
23
|
+
import { writeFile } from "node:fs/promises";
|
|
24
|
+
import { BUILTIN_ROLE_NAMES, parseModelSelection } from "../lib/model-roles.js";
|
|
25
|
+
import { readVvocConfig, resolvePaths, syncVvocConfig } from "../lib/opencode.js";
|
|
26
|
+
import { renderVvocConfig } from "../lib/vvoc-config.js";
|
|
27
|
+
const ROLE_ID_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
28
|
+
const roleArg = {
|
|
29
|
+
type: "positional",
|
|
30
|
+
required: true,
|
|
31
|
+
description: "Role ID (lowercase letters, digits, and hyphens).",
|
|
32
|
+
};
|
|
33
|
+
const modelArg = {
|
|
34
|
+
type: "positional",
|
|
35
|
+
required: true,
|
|
36
|
+
description: "Model in provider/model[:variant] format.",
|
|
37
|
+
};
|
|
38
|
+
const configDirArg = {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Override the global config home.",
|
|
41
|
+
};
|
|
42
|
+
const roleList = defineCommand({
|
|
43
|
+
meta: {
|
|
44
|
+
name: "list",
|
|
45
|
+
description: "List configured model roles.",
|
|
46
|
+
},
|
|
47
|
+
args: {
|
|
48
|
+
"config-dir": configDirArg,
|
|
49
|
+
},
|
|
50
|
+
async run({ args }) {
|
|
51
|
+
const { config } = await loadGlobalVvocConfig({ configDir: resolveConfigDir(args) });
|
|
52
|
+
const listedRoles = listConfiguredRoles(config.roles);
|
|
53
|
+
console.log("Roles (global):");
|
|
54
|
+
for (const role of listedRoles) {
|
|
55
|
+
console.log(` ${role.roleId}: ${role.model}`);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const roleSet = defineCommand({
|
|
60
|
+
meta: {
|
|
61
|
+
name: "set",
|
|
62
|
+
description: "Set a role assignment.",
|
|
63
|
+
},
|
|
64
|
+
args: {
|
|
65
|
+
role: roleArg,
|
|
66
|
+
model: modelArg,
|
|
67
|
+
"config-dir": configDirArg,
|
|
68
|
+
},
|
|
69
|
+
async run({ args }) {
|
|
70
|
+
const roleId = normalizeRoleId(args.role, "set");
|
|
71
|
+
const modelSelection = parseModelSelection(asRequiredString(args.model, "set", "model")).normalized;
|
|
72
|
+
const result = await setRoleAssignment(roleId, modelSelection, {
|
|
73
|
+
configDir: resolveConfigDir(args),
|
|
74
|
+
});
|
|
75
|
+
console.log(`${result.action}: ${roleId} -> ${modelSelection} (${result.path})`);
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
const roleUnset = defineCommand({
|
|
79
|
+
meta: {
|
|
80
|
+
name: "unset",
|
|
81
|
+
description: "Remove a custom role assignment.",
|
|
82
|
+
},
|
|
83
|
+
args: {
|
|
84
|
+
role: roleArg,
|
|
85
|
+
"config-dir": configDirArg,
|
|
86
|
+
},
|
|
87
|
+
async run({ args }) {
|
|
88
|
+
const roleId = normalizeRoleId(args.role, "unset");
|
|
89
|
+
const result = await unsetRoleAssignment(roleId, {
|
|
90
|
+
configDir: resolveConfigDir(args),
|
|
91
|
+
});
|
|
92
|
+
console.log(`${result.action}: ${roleId} (${result.path})`);
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
export default defineCommand({
|
|
96
|
+
meta: {
|
|
97
|
+
name: "role",
|
|
98
|
+
description: "Manage canonical model role assignments.",
|
|
99
|
+
},
|
|
100
|
+
subCommands: {
|
|
101
|
+
list: roleList,
|
|
102
|
+
set: roleSet,
|
|
103
|
+
unset: roleUnset,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
export function listConfiguredRoles(roles) {
|
|
107
|
+
const listedRoles = [];
|
|
108
|
+
for (const roleId of BUILTIN_ROLE_NAMES) {
|
|
109
|
+
if (typeof roles[roleId] === "string") {
|
|
110
|
+
listedRoles.push({ roleId, model: roles[roleId], builtIn: true });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const customRoleIds = Object.keys(roles)
|
|
114
|
+
.filter((roleId) => !BUILTIN_ROLE_NAMES.includes(roleId))
|
|
115
|
+
.sort((left, right) => left.localeCompare(right));
|
|
116
|
+
for (const roleId of customRoleIds) {
|
|
117
|
+
listedRoles.push({ roleId, model: roles[roleId], builtIn: false });
|
|
118
|
+
}
|
|
119
|
+
return listedRoles;
|
|
120
|
+
}
|
|
121
|
+
export async function setRoleAssignment(roleId, modelSelection, options = {}) {
|
|
122
|
+
const normalizedRoleId = normalizeRoleId(roleId, "set");
|
|
123
|
+
const normalizedModel = parseModelSelection(modelSelection).normalized;
|
|
124
|
+
const { config, paths } = await loadGlobalVvocConfig(options);
|
|
125
|
+
if (config.roles[normalizedRoleId] === normalizedModel) {
|
|
126
|
+
return { action: "kept", path: paths.vvocConfigPath };
|
|
127
|
+
}
|
|
128
|
+
const nextConfig = {
|
|
129
|
+
...config,
|
|
130
|
+
roles: {
|
|
131
|
+
...config.roles,
|
|
132
|
+
[normalizedRoleId]: normalizedModel,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
await writeFile(paths.vvocConfigPath, renderVvocConfig(nextConfig), "utf8");
|
|
136
|
+
return { action: "updated", path: paths.vvocConfigPath };
|
|
137
|
+
}
|
|
138
|
+
export async function unsetRoleAssignment(roleId, options = {}) {
|
|
139
|
+
const normalizedRoleId = normalizeRoleId(roleId, "unset");
|
|
140
|
+
if (BUILTIN_ROLE_NAMES.includes(normalizedRoleId)) {
|
|
141
|
+
throw new Error(`cannot unset built-in role: ${normalizedRoleId}`);
|
|
142
|
+
}
|
|
143
|
+
const { config, paths } = await loadGlobalVvocConfig(options);
|
|
144
|
+
if (!Object.hasOwn(config.roles, normalizedRoleId)) {
|
|
145
|
+
return { action: "kept", path: paths.vvocConfigPath };
|
|
146
|
+
}
|
|
147
|
+
const { [normalizedRoleId]: _removed, ...remainingRoles } = config.roles;
|
|
148
|
+
const nextConfig = {
|
|
149
|
+
...config,
|
|
150
|
+
roles: remainingRoles,
|
|
151
|
+
};
|
|
152
|
+
await writeFile(paths.vvocConfigPath, renderVvocConfig(nextConfig), "utf8");
|
|
153
|
+
return { action: "updated", path: paths.vvocConfigPath };
|
|
154
|
+
}
|
|
155
|
+
function normalizeRoleId(value, action) {
|
|
156
|
+
const roleId = asRequiredString(value, action, "role").trim();
|
|
157
|
+
if (!ROLE_ID_PATTERN.test(roleId)) {
|
|
158
|
+
throw new Error(`${action}: invalid role id \`${roleId}\`; expected lowercase letters, digits, and hyphens`);
|
|
159
|
+
}
|
|
160
|
+
return roleId;
|
|
161
|
+
}
|
|
162
|
+
async function loadGlobalVvocConfig(options) {
|
|
163
|
+
const paths = await resolvePaths({
|
|
164
|
+
scope: "global",
|
|
165
|
+
cwd: options.cwd ?? process.cwd(),
|
|
166
|
+
configDir: options.configDir,
|
|
167
|
+
});
|
|
168
|
+
await syncVvocConfig(paths);
|
|
169
|
+
const config = await readVvocConfig(paths);
|
|
170
|
+
if (!config) {
|
|
171
|
+
throw new Error(`failed to load vvoc config at ${paths.vvocConfigPath}`);
|
|
172
|
+
}
|
|
173
|
+
return { config, paths };
|
|
174
|
+
}
|
|
175
|
+
function asRequiredString(value, action, field) {
|
|
176
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
177
|
+
throw new Error(`${action}: ${field} is required`);
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
function resolveConfigDir(args) {
|
|
182
|
+
return typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/commands/role.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// FILE: src/commands/status.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.4.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Show the current vv-opencode installation status.
|
|
5
5
|
// SCOPE: Scope parsing, inspection lookup, and human-readable status output for OpenCode and the canonical vvoc.json config.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [v0.
|
|
17
|
+
// LAST_CHANGE: [v0.4.0 - Added canonical role inventory output and unresolved role-reference reporting sourced from installation inspection.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
19
|
import { defineCommand } from "citty";
|
|
20
20
|
import { inspectInstallation, resolvePaths } from "../lib/opencode.js";
|
|
@@ -55,6 +55,21 @@ export default defineCommand({
|
|
|
55
55
|
console.log(`Guardian model: ${inspection.guardian.config ? (inspection.guardian.config.model ?? "default") : "unknown"}`);
|
|
56
56
|
console.log(`Memory enabled: ${inspection.memory.config ? (inspection.memory.config.enabled ? "yes" : "no") : "unknown"}`);
|
|
57
57
|
console.log(`Secrets Redaction enabled: ${inspection.secretsRedaction.config ? (inspection.secretsRedaction.config.enabled ? "yes" : "no") : "unknown"}`);
|
|
58
|
+
console.log("Roles:");
|
|
59
|
+
if (inspection.roles.assignments.length === 0) {
|
|
60
|
+
console.log(" <none>");
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
for (const role of inspection.roles.assignments) {
|
|
64
|
+
console.log(` ${role.roleId}: ${role.model}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (inspection.roles.unresolvedReferences.length > 0) {
|
|
68
|
+
console.log("Unresolved role references:");
|
|
69
|
+
for (const unresolved of inspection.roles.unresolvedReferences) {
|
|
70
|
+
console.log(`- ${unresolved.fieldPath} -> ${unresolved.roleRef} (missing role: ${unresolved.roleId})`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
58
73
|
if (inspection.warnings.length > 0) {
|
|
59
74
|
console.log("Warnings:");
|
|
60
75
|
for (const warning of inspection.warnings) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,+DAA+D;AAC/D,+HAA+H;AAC/H,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,yEAAyE;AACzE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,+DAA+D;AAC/D,+HAA+H;AAC/H,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,yEAAyE;AACzE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,gJAAgJ;AAChJ,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAc,MAAM,oBAAoB,CAAC;AAEnF,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uCAAuC;KACrD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,mCAAmC;SACjD;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+DAA+D;SAC7E;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;YAC/B,KAAK,EAAE,KAAc;YACrB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,SAAS;SACV,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEpD,OAAO,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,2BAA2B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CACT,mBAAmB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9G,CAAC;QACF,OAAO,CAAC,GAAG,CACT,mBAAmB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9G,CAAC;QACF,OAAO,CAAC,GAAG,CACT,8BAA8B,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAC7I,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/D,OAAO,CAAC,GAAG,CACT,KAAK,UAAU,CAAC,SAAS,OAAO,UAAU,CAAC,OAAO,mBAAmB,UAAU,CAAC,MAAM,GAAG,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,gCAAgC;IAClC,CAAC;CACF,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { GuardianPlugin } from "./plugins/guardian/index.js";
|
|
2
2
|
export { MemoryPlugin } from "./plugins/memory/index.js";
|
|
3
|
+
export { ModelRolesPlugin } from "./plugins/model-roles/index.js";
|
|
3
4
|
export { SystemContextInjectionPlugin } from "./plugins/system-context-injection/index.js";
|
|
4
5
|
export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
// FILE: src/index.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.6.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Re-export the public vv-opencode plugin entrypoints from the package root.
|
|
5
|
-
// SCOPE: Package-root exports for GuardianPlugin, MemoryPlugin, SystemContextInjectionPlugin, and SecretsRedactionPlugin.
|
|
6
|
-
// DEPENDS: [src/plugins/guardian/index.ts, src/plugins/memory/index.ts, src/plugins/system-context-injection/index.ts, src/plugins/secrets-redaction.ts]
|
|
7
|
-
// LINKS: [M-PLUGIN-GUARDIAN, M-PLUGIN-MEMORY, M-PLUGIN-SYSTEM-CONTEXT-INJECTION, M-PLUGIN-SECRETS-REDACTION]
|
|
5
|
+
// SCOPE: Package-root exports for GuardianPlugin, MemoryPlugin, ModelRolesPlugin, SystemContextInjectionPlugin, and SecretsRedactionPlugin.
|
|
6
|
+
// DEPENDS: [src/plugins/guardian/index.ts, src/plugins/memory/index.ts, src/plugins/model-roles/index.ts, src/plugins/system-context-injection/index.ts, src/plugins/secrets-redaction.ts]
|
|
7
|
+
// LINKS: [M-PLUGIN-GUARDIAN, M-PLUGIN-MEMORY, M-PLUGIN-MODEL-ROLES, M-PLUGIN-SYSTEM-CONTEXT-INJECTION, M-PLUGIN-SECRETS-REDACTION]
|
|
8
8
|
// ROLE: BARREL
|
|
9
9
|
// MAP_MODE: SUMMARY
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
// GuardianPlugin, MemoryPlugin, SystemContextInjectionPlugin, SecretsRedactionPlugin - Public plugin exports available from @osovv/vv-opencode.
|
|
13
|
+
// GuardianPlugin, MemoryPlugin, ModelRolesPlugin, SystemContextInjectionPlugin, SecretsRedactionPlugin - Public plugin exports available from @osovv/vv-opencode.
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [v0.
|
|
17
|
+
// LAST_CHANGE: [v0.6.0 - Added ModelRolesPlugin to the package-root plugin exports.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
19
|
export { GuardianPlugin } from "./plugins/guardian/index.js";
|
|
20
20
|
export { MemoryPlugin } from "./plugins/memory/index.js";
|
|
21
|
+
export { ModelRolesPlugin } from "./plugins/model-roles/index.js";
|
|
21
22
|
export { SystemContextInjectionPlugin } from "./plugins/system-context-injection/index.js";
|
|
22
23
|
export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,wFAAwF;AACxF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,wFAAwF;AACxF,8IAA8I;AAC9I,6LAA6L;AAC7L,qIAAqI;AACrI,iBAAiB;AACjB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oKAAoK;AACpK,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uFAAuF;AACvF,qBAAqB;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -3,19 +3,28 @@ export declare const SPECIAL_AGENT_NAMES: readonly ["guardian", "memory-reviewer
|
|
|
3
3
|
export type SpecialAgentName = (typeof SPECIAL_AGENT_NAMES)[number];
|
|
4
4
|
export declare const OPENCODE_DEFAULT_MODEL_TARGETS: readonly ["default", "small-model"];
|
|
5
5
|
export type OpenCodeDefaultModelTargetName = (typeof OPENCODE_DEFAULT_MODEL_TARGETS)[number];
|
|
6
|
+
export declare const CONFIGURABLE_OPENCODE_PRIMARY_AGENTS: readonly ["build", "plan"];
|
|
7
|
+
export type ConfigurableOpenCodePrimaryAgentName = (typeof CONFIGURABLE_OPENCODE_PRIMARY_AGENTS)[number];
|
|
6
8
|
export declare const CONFIGURABLE_OPENCODE_SUBAGENTS: readonly ["general", "explore"];
|
|
7
9
|
export type ConfigurableOpenCodeSubagentName = (typeof CONFIGURABLE_OPENCODE_SUBAGENTS)[number];
|
|
8
|
-
export
|
|
10
|
+
export declare const CONFIGURABLE_OPENCODE_AGENTS: readonly ["build", "plan", "general", "explore"];
|
|
11
|
+
export type ConfigurableOpenCodeAgentName = (typeof CONFIGURABLE_OPENCODE_AGENTS)[number];
|
|
12
|
+
export type SupportedModelTargetName = SpecialAgentName | OpenCodeDefaultModelTargetName | ConfigurableOpenCodeAgentName | ManagedOpenCodeAgentName;
|
|
9
13
|
export declare const SUPPORTED_MODEL_TARGET_NAMES: readonly SupportedModelTargetName[];
|
|
10
14
|
export declare const MODEL_TARGET_NAME_CHOICES: string;
|
|
11
15
|
export declare function isSpecialAgentName(value: string): value is SpecialAgentName;
|
|
12
16
|
export declare function isOpenCodeDefaultModelTargetName(value: string): value is OpenCodeDefaultModelTargetName;
|
|
13
17
|
export declare function isConfigurableOpenCodeSubagentName(value: string): value is ConfigurableOpenCodeSubagentName;
|
|
18
|
+
export declare function isConfigurableOpenCodeAgentName(value: string): value is ConfigurableOpenCodeAgentName;
|
|
14
19
|
export declare function parseModelTargetName(value: unknown, operation: string): SupportedModelTargetName;
|
|
15
20
|
export declare function parseGuardianStyleModelArg(value: unknown, operation: string): {
|
|
16
21
|
model: string;
|
|
17
22
|
variant?: string;
|
|
18
23
|
};
|
|
24
|
+
export declare function parseOpenCodeAgentModelArg(value: unknown, operation: string): {
|
|
25
|
+
model: string;
|
|
26
|
+
variant?: string;
|
|
27
|
+
};
|
|
19
28
|
export declare function parseOpenCodeModelArg(value: unknown, operation: string): string;
|
|
20
29
|
export declare function normalizeModelTargetOverride(targetName: SupportedModelTargetName, value: unknown, operation: string): string;
|
|
21
30
|
export declare function formatAgentModel(model?: string, variant?: string): string;
|