@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.
Files changed (54) hide show
  1. package/README.md +48 -46
  2. package/dist/cli.js +5 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/agent.js +9 -193
  5. package/dist/commands/agent.js.map +1 -1
  6. package/dist/commands/completion.js +28 -25
  7. package/dist/commands/completion.js.map +1 -1
  8. package/dist/commands/config-validate.js +58 -5
  9. package/dist/commands/config-validate.js.map +1 -1
  10. package/dist/commands/doctor.js +11 -2
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/init.d.ts +2 -1
  13. package/dist/commands/init.js +30 -28
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/patch-provider.d.ts +19 -0
  16. package/dist/commands/patch-provider.js +23 -2
  17. package/dist/commands/patch-provider.js.map +1 -1
  18. package/dist/commands/preset.d.ts +3 -11
  19. package/dist/commands/preset.js +81 -85
  20. package/dist/commands/preset.js.map +1 -1
  21. package/dist/commands/role.d.ts +20 -0
  22. package/dist/commands/role.js +184 -0
  23. package/dist/commands/role.js.map +1 -0
  24. package/dist/commands/status.js +17 -2
  25. package/dist/commands/status.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +7 -6
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/agent-models.d.ts +10 -1
  30. package/dist/lib/agent-models.js +34 -15
  31. package/dist/lib/agent-models.js.map +1 -1
  32. package/dist/lib/model-roles.d.ts +44 -0
  33. package/dist/lib/model-roles.js +144 -0
  34. package/dist/lib/model-roles.js.map +1 -0
  35. package/dist/lib/opencode.d.ts +21 -0
  36. package/dist/lib/opencode.js +178 -31
  37. package/dist/lib/opencode.js.map +1 -1
  38. package/dist/lib/vvoc-config.d.ts +24 -10
  39. package/dist/lib/vvoc-config.js +166 -104
  40. package/dist/lib/vvoc-config.js.map +1 -1
  41. package/dist/plugins/guardian/index.js +124 -15
  42. package/dist/plugins/guardian/index.js.map +1 -1
  43. package/dist/plugins/memory/index.js +116 -10
  44. package/dist/plugins/memory/index.js.map +1 -1
  45. package/dist/plugins/memory-store.d.ts +0 -2
  46. package/dist/plugins/memory-store.js +2 -3
  47. package/dist/plugins/memory-store.js.map +1 -1
  48. package/dist/plugins/model-roles/index.d.ts +2 -0
  49. package/dist/plugins/model-roles/index.js +230 -0
  50. package/dist/plugins/model-roles/index.js.map +1 -0
  51. package/package.json +6 -2
  52. package/schemas/vvoc/v1.json +1 -1
  53. package/schemas/vvoc/v2.json +1 -1
  54. package/schemas/vvoc/v3.json +127 -0
@@ -1,9 +1,9 @@
1
1
  // FILE: src/commands/preset.ts
2
- // VERSION: 0.2.1
2
+ // VERSION: 0.4.2
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: List, show, and apply declarative named model-target presets from canonical vvoc.json.
5
- // SCOPE: Canonical preset lookup, preset rendering, scope-aware preset application, and per-target summary output through existing vvoc and OpenCode write paths.
6
- // DEPENDS: [citty, src/lib/agent-models.ts, src/lib/managed-agents.ts, src/lib/opencode.ts, src/lib/vvoc-config.ts]
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 through the existing vvoc/OpenCode write helpers.
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.2.1 - Fixed `vvoc preset <name>` dispatch so bare preset names are applied instead of being parsed as unknown subcommands.]
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 { formatAgentModel, isConfigurableOpenCodeSubagentName, isOpenCodeDefaultModelTargetName, isSpecialAgentName, normalizeModelTargetOverride, parseGuardianStyleModelArg, } from "../lib/agent-models.js";
25
- import { isManagedOpenCodeAgentName } from "../lib/managed-agents.js";
26
- import { describeWriteResult, installManagedAgentPrompts, readVvocConfig, resolvePaths, writeGuardianConfig, writeOpenCodeDefaultModel, writeManagedAgentModel, writeMemoryConfig, writeOpenCodeAgentModel, } from "../lib/opencode.js";
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 resolvePaths({
86
- scope: options.scope ?? "global",
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
- if (entries.some(([targetName]) => isManagedOpenCodeAgentName(targetName))) {
97
- await installManagedAgentPrompts(paths, { force: false });
98
- }
85
+ const nextRoles = { ...config.roles };
99
86
  const changes = [];
100
- for (const [targetName, configuredValue] of entries) {
101
- const normalizedValue = normalizeModelTargetOverride(targetName, configuredValue, `preset ${resolved.name} ${targetName}`);
102
- if (targetName === "guardian") {
103
- const { model, variant } = parseGuardianStyleModelArg(normalizedValue, `preset ${resolved.name}`);
104
- const result = await writeGuardianConfig(paths, { model, variant }, { merge: true });
105
- changes.push({ targetName, model: formatAgentModel(model, variant), result });
106
- continue;
107
- }
108
- if (targetName === "memory-reviewer") {
109
- const { model, variant } = parseGuardianStyleModelArg(normalizedValue, `preset ${resolved.name}`);
110
- const result = await writeMemoryConfig(paths, { reviewerModel: model, reviewerVariant: variant }, { merge: true });
111
- changes.push({ targetName, model: formatAgentModel(model, variant), result });
112
- continue;
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 targetCount = Object.keys(preset.agents).length;
164
- console.log(` ${name}${description} (${targetCount} target${targetCount === 1 ? "" : "s"})`);
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} (${scope}):`);
143
+ console.log(`Applied preset ${applied.name}:`);
187
144
  for (const change of applied.changes) {
188
- console.log(` ${change.targetName}: ${describeWriteResult(change.result)} (${change.model})`);
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
- const config = await readVvocConfig(paths);
198
- if (!config) {
199
- throw new Error(`vvoc config is missing at ${paths.vvocConfigPath}. Run \`vvoc install\` or \`vvoc sync\`.`);
158
+ try {
159
+ const text = await readFile(paths.vvocConfigPath, "utf8");
160
+ return {
161
+ config: parseRawVvocConfigText(text, paths.vvocConfigPath),
162
+ paths,
163
+ };
200
164
  }
201
- return config.presets;
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 resolveScope(value) {
204
- return value === "project" ? "project" : "global";
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 resolveDefaultModelKey(targetName) {
207
- return targetName === "default" ? "model" : "small_model";
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":"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"}
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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"}
@@ -1,5 +1,5 @@
1
1
  // FILE: src/commands/status.ts
2
- // VERSION: 0.3.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.3.0 - Updated status reporting for the canonical vvoc.json config file.]
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,8FAA8F;AAC9F,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;QAEF,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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
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.5.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.5.0 - Added SystemContextInjectionPlugin to the package-root plugin exports.]
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,4HAA4H;AAC5H,2JAA2J;AAC3J,+GAA+G;AAC/G,iBAAiB;AACjB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,kJAAkJ;AAClJ,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,mGAAmG;AACnG,qBAAqB;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
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 type SupportedModelTargetName = SpecialAgentName | OpenCodeDefaultModelTargetName | ConfigurableOpenCodeSubagentName | ManagedOpenCodeAgentName;
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;