@osovv/vv-opencode 0.21.0 → 0.24.1

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 (75) hide show
  1. package/README.md +46 -10
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +9 -5
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/managed-agents.d.ts +3 -3
  6. package/dist/lib/managed-agents.js +14 -13
  7. package/dist/lib/managed-agents.js.map +1 -1
  8. package/dist/lib/model-roles.d.ts +3 -3
  9. package/dist/lib/model-roles.js +5 -4
  10. package/dist/lib/model-roles.js.map +1 -1
  11. package/dist/lib/opencode.js +100 -5
  12. package/dist/lib/opencode.js.map +1 -1
  13. package/dist/lib/vvoc-config.js +5 -4
  14. package/dist/lib/vvoc-config.js.map +1 -1
  15. package/dist/plugins/hashline-edit/autocorrect-replacement-lines.d.ts +1 -0
  16. package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js +184 -0
  17. package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js.map +1 -0
  18. package/dist/plugins/hashline-edit/constants.d.ts +4 -0
  19. package/dist/plugins/hashline-edit/constants.js +26 -0
  20. package/dist/plugins/hashline-edit/constants.js.map +1 -0
  21. package/dist/plugins/hashline-edit/edit-operation-primitives.d.ts +10 -0
  22. package/dist/plugins/hashline-edit/edit-operation-primitives.js +114 -0
  23. package/dist/plugins/hashline-edit/edit-operation-primitives.js.map +1 -0
  24. package/dist/plugins/hashline-edit/edit-operations.d.ts +7 -0
  25. package/dist/plugins/hashline-edit/edit-operations.js +168 -0
  26. package/dist/plugins/hashline-edit/edit-operations.js.map +1 -0
  27. package/dist/plugins/hashline-edit/edit-text-normalization.d.ts +6 -0
  28. package/dist/plugins/hashline-edit/edit-text-normalization.js +123 -0
  29. package/dist/plugins/hashline-edit/edit-text-normalization.js.map +1 -0
  30. package/dist/plugins/hashline-edit/file-text-canonicalization.d.ts +7 -0
  31. package/dist/plugins/hashline-edit/file-text-canonicalization.js +52 -0
  32. package/dist/plugins/hashline-edit/file-text-canonicalization.js.map +1 -0
  33. package/dist/plugins/hashline-edit/hash-computation.d.ts +3 -0
  34. package/dist/plugins/hashline-edit/hash-computation.js +34 -0
  35. package/dist/plugins/hashline-edit/hash-computation.js.map +1 -0
  36. package/dist/plugins/hashline-edit/index.d.ts +2 -0
  37. package/dist/plugins/hashline-edit/index.js +246 -0
  38. package/dist/plugins/hashline-edit/index.js.map +1 -0
  39. package/dist/plugins/hashline-edit/normalize-edits.d.ts +10 -0
  40. package/dist/plugins/hashline-edit/normalize-edits.js +82 -0
  41. package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -0
  42. package/dist/plugins/hashline-edit/tool-description.d.ts +1 -0
  43. package/dist/plugins/hashline-edit/tool-description.js +35 -0
  44. package/dist/plugins/hashline-edit/tool-description.js.map +1 -0
  45. package/dist/plugins/hashline-edit/types.d.ts +17 -0
  46. package/dist/plugins/hashline-edit/types.js +19 -0
  47. package/dist/plugins/hashline-edit/types.js.map +1 -0
  48. package/dist/plugins/hashline-edit/validation.d.ts +20 -0
  49. package/dist/plugins/hashline-edit/validation.js +160 -0
  50. package/dist/plugins/hashline-edit/validation.js.map +1 -0
  51. package/dist/plugins/system-context-injection/index.js +65 -2
  52. package/dist/plugins/system-context-injection/index.js.map +1 -1
  53. package/dist/plugins/workflow/index.d.ts +2 -0
  54. package/dist/plugins/workflow/index.js +411 -0
  55. package/dist/plugins/workflow/index.js.map +1 -0
  56. package/dist/plugins/workflow/protocol.d.ts +33 -0
  57. package/dist/plugins/workflow/protocol.js +188 -0
  58. package/dist/plugins/workflow/protocol.js.map +1 -0
  59. package/dist/plugins/workflow/state.d.ts +79 -0
  60. package/dist/plugins/workflow/state.js +307 -0
  61. package/dist/plugins/workflow/state.js.map +1 -0
  62. package/dist/plugins/workflow/system-instruction.md +14 -0
  63. package/dist/plugins/workflow/tooling.d.ts +26 -0
  64. package/dist/plugins/workflow/tooling.js +161 -0
  65. package/dist/plugins/workflow/tooling.js.map +1 -0
  66. package/dist/plugins/workflow/transitions.d.ts +7 -0
  67. package/dist/plugins/workflow/transitions.js +102 -0
  68. package/dist/plugins/workflow/transitions.js.map +1 -0
  69. package/package.json +11 -3
  70. package/schemas/vvoc/v1.json +1 -1
  71. package/schemas/vvoc/v2.json +1 -1
  72. package/schemas/vvoc/v3.json +1 -1
  73. package/templates/agents/{code-reviewer.md → vv-code-reviewer.md} +12 -4
  74. package/templates/agents/{implementer.md → vv-implementer.md} +14 -8
  75. package/templates/agents/{spec-reviewer.md → vv-spec-reviewer.md} +13 -5
package/README.md CHANGED
@@ -5,10 +5,10 @@ Portable OpenCode workflow package with a Bun CLI that installs and maintains Op
5
5
  ## What This Package Does
6
6
 
7
7
  - installs one pinned `@osovv/vv-opencode@<version>` entry into OpenCode
8
- - that package entry exports five plugins: `GuardianPlugin`, `MemoryPlugin`, `ModelRolesPlugin`, `SystemContextInjectionPlugin`, `SecretsRedactionPlugin`
8
+ - that package entry exports seven plugins: `GuardianPlugin`, `HashlineEditPlugin`, `MemoryPlugin`, `ModelRolesPlugin`, `SystemContextInjectionPlugin`, `WorkflowPlugin`, `SecretsRedactionPlugin`
9
9
  - creates and maintains canonical `vvoc` config at `$XDG_CONFIG_HOME/vvoc/vvoc.json`
10
10
  - scaffolds managed prompt files under `vvoc/agents/`
11
- - registers managed OpenCode agents: `enhancer`, `implementer`, `spec-reviewer`, `code-reviewer`, `investitagor`
11
+ - registers managed OpenCode agents: `enhancer`, `vv-implementer`, `vv-spec-reviewer`, `vv-code-reviewer`, `investitagor`
12
12
  - installs plugin-managed agents: `guardian`, `memory-reviewer`
13
13
  - ships role presets, diagnostics, and shell completion through the `vvoc` CLI
14
14
 
@@ -41,15 +41,18 @@ vvoc install --scope project
41
41
 
42
42
  - ensure OpenCode has a pinned `@osovv/vv-opencode@<version>` package entry
43
43
  - register managed agents and scaffold their prompt files
44
+ - seed OpenCode `model`, `small_model`, `agent.explore`, and managed agent model refs with `vv-role:*` values
44
45
  - create or refresh canonical `vvoc.json`
45
46
  - refresh managed built-in presets: `vv-openai`, `vv-zai`, `vv-minimax`
46
47
 
47
- That package entry exports five plugins:
48
+ That package entry exports seven plugins:
48
49
 
49
50
  - `GuardianPlugin`
51
+ - `HashlineEditPlugin`
50
52
  - `MemoryPlugin`
51
53
  - `ModelRolesPlugin`
52
54
  - `SystemContextInjectionPlugin`
55
+ - `WorkflowPlugin`
53
56
  - `SecretsRedactionPlugin`
54
57
 
55
58
  ## Config And Data Layout
@@ -203,6 +206,14 @@ vvoc guardian config --model "anthropic/claude-sonnet-4-5" --variant high
203
206
 
204
207
  The runtime prompt is loaded from `guardian.md`, preferring `./.vvoc/agents/guardian.md` over the global `vvoc` agents directory.
205
208
 
209
+ ### HashlineEditPlugin
210
+
211
+ `HashlineEditPlugin` is enabled by default and replaces OpenCode's `edit` tool with a hash-anchored variant.
212
+
213
+ It also rewrites `read` output from plain numbered rows such as `42: const value = 1;` into hashline rows such as `42#VK|const value = 1;`.
214
+
215
+ The overridden `edit` tool requires those exact `line#hash` anchors and rejects stale references when the file changed since the last read, which prevents line-number drift and accidental writes against the wrong snapshot.
216
+
206
217
  ### MemoryPlugin
207
218
 
208
219
  `MemoryPlugin` adds explicit persistent memory tools and installs a report-only `memory-reviewer` subagent.
@@ -243,7 +254,31 @@ The runtime prompt is loaded from `memory-reviewer.md`, preferring `./.vvoc/agen
243
254
 
244
255
  `SystemContextInjectionPlugin` injects reusable system guidance into primary sessions without polluting known subagent prompts.
245
256
 
246
- The default injected guidance tells the main session to proactively use the `explore` subagent when the task depends on unfamiliar code, unclear scope, or multiple candidate implementation areas.
257
+ The default injected guidance tells the main session to proactively use the `explore` subagent for read-only context gathering when the task depends on unfamiliar code, unclear scope, or multiple candidate implementation areas. The `explore` subagent must not be asked to propose solutions, suggest plans, recommend changes, make design decisions, or evaluate trade-offs.
258
+
259
+ ### WorkflowPlugin
260
+
261
+ `WorkflowPlugin` adds tracked workflow orchestration around the `task` tool for these managed subagents:
262
+
263
+ - `vv-implementer`
264
+ - `vv-spec-reviewer`
265
+ - `vv-code-reviewer`
266
+
267
+ It also registers three workflow tools:
268
+
269
+ - `work_item_open`
270
+ - `work_item_list`
271
+ - `work_item_close`
272
+
273
+ Tracked task prompts must start with a first-line header like:
274
+
275
+ ```text
276
+ VVOC_WORK_ITEM_ID: wi-1
277
+ ```
278
+
279
+ Tracked result blocks must return strict top-block protocol fields (`VVOC_WORK_ITEM_ID`, `VVOC_STATUS`, and `VVOC_ROUTE` for `vv-implementer`).
280
+
281
+ Main-session guidance reminds agents to open work items first, reuse returned headers, treat `NEEDS_CONTEXT` as a hard stop, inspect `work_item_list` before retries, and avoid free-form review loops without explicit work-item identity.
247
282
 
248
283
  ### SecretsRedactionPlugin
249
284
 
@@ -270,17 +305,18 @@ Managed prompt files are created for:
270
305
  - `guardian`
271
306
  - `memory-reviewer`
272
307
  - `enhancer`
273
- - `implementer`
274
- - `spec-reviewer`
275
- - `code-reviewer`
308
+ - `vv-implementer`
309
+ - `vv-spec-reviewer`
310
+ - `vv-code-reviewer`
276
311
  - `investitagor`
277
312
 
278
313
  OpenCode agent registrations written by `vvoc install` and `vvoc sync` are:
279
314
 
315
+ - `explore`
280
316
  - `enhancer`
281
- - `implementer`
282
- - `spec-reviewer`
283
- - `code-reviewer`
317
+ - `vv-implementer`
318
+ - `vv-spec-reviewer`
319
+ - `vv-code-reviewer`
284
320
  - `investitagor`
285
321
 
286
322
  Plugin runtime agents are:
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { GuardianPlugin } from "./plugins/guardian/index.js";
2
+ export { HashlineEditPlugin } from "./plugins/hashline-edit/index.js";
2
3
  export { MemoryPlugin } from "./plugins/memory/index.js";
3
4
  export { ModelRolesPlugin } from "./plugins/model-roles/index.js";
4
5
  export { SystemContextInjectionPlugin } from "./plugins/system-context-injection/index.js";
6
+ export { WorkflowPlugin } from "./plugins/workflow/index.js";
5
7
  export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
package/dist/index.js CHANGED
@@ -1,24 +1,28 @@
1
1
  // FILE: src/index.ts
2
- // VERSION: 0.6.0
2
+ // VERSION: 0.8.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, 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]
5
+ // SCOPE: Package-root exports for GuardianPlugin, HashlineEditPlugin, MemoryPlugin, ModelRolesPlugin, SystemContextInjectionPlugin, WorkflowPlugin, and SecretsRedactionPlugin.
6
+ // DEPENDS: [src/plugins/guardian/index.ts, src/plugins/hashline-edit/index.ts, src/plugins/memory/index.ts, src/plugins/model-roles/index.ts, src/plugins/system-context-injection/index.ts, src/plugins/workflow/index.ts, src/plugins/secrets-redaction.ts]
7
+ // LINKS: [M-PLUGIN-GUARDIAN, M-PLUGIN-HASHLINE-EDIT, M-PLUGIN-MEMORY, M-PLUGIN-MODEL-ROLES, M-PLUGIN-SYSTEM-CONTEXT-INJECTION, M-PLUGIN-WORKFLOW, 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, ModelRolesPlugin, SystemContextInjectionPlugin, SecretsRedactionPlugin - Public plugin exports available from @osovv/vv-opencode.
13
+ // GuardianPlugin, HashlineEditPlugin, MemoryPlugin, ModelRolesPlugin, SystemContextInjectionPlugin, WorkflowPlugin, 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.8.0 - Added WorkflowPlugin to the package-root plugin exports.]
18
+ // LAST_CHANGE: [v0.7.0 - Added HashlineEditPlugin to the package-root plugin exports.]
17
19
  // LAST_CHANGE: [v0.6.0 - Added ModelRolesPlugin to the package-root plugin exports.]
18
20
  // END_CHANGE_SUMMARY
19
21
  export { GuardianPlugin } from "./plugins/guardian/index.js";
22
+ export { HashlineEditPlugin } from "./plugins/hashline-edit/index.js";
20
23
  export { MemoryPlugin } from "./plugins/memory/index.js";
21
24
  export { ModelRolesPlugin } from "./plugins/model-roles/index.js";
22
25
  export { SystemContextInjectionPlugin } from "./plugins/system-context-injection/index.js";
26
+ export { WorkflowPlugin } from "./plugins/workflow/index.js";
23
27
  export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
24
28
  //# 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,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,wFAAwF;AACxF,kLAAkL;AAClL,gQAAgQ;AAChQ,gLAAgL;AAChL,iBAAiB;AACjB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,wMAAwM;AACxM,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,qFAAqF;AACrF,yFAAyF;AACzF,uFAAuF;AACvF,qBAAqB;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,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,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -1,10 +1,10 @@
1
- export declare const MANAGED_SUBAGENT_NAMES: readonly ["implementer", "spec-reviewer", "code-reviewer", "investitagor"];
1
+ export declare const MANAGED_SUBAGENT_NAMES: readonly ["vv-implementer", "vv-spec-reviewer", "vv-code-reviewer", "investitagor"];
2
2
  export type ManagedSubagentName = (typeof MANAGED_SUBAGENT_NAMES)[number];
3
3
  export declare const MANAGED_PRIMARY_AGENT_NAMES: readonly ["enhancer"];
4
4
  export type ManagedPrimaryAgentName = (typeof MANAGED_PRIMARY_AGENT_NAMES)[number];
5
- export declare const MANAGED_OPENCODE_AGENT_NAMES: readonly ["enhancer", "implementer", "spec-reviewer", "code-reviewer", "investitagor"];
5
+ export declare const MANAGED_OPENCODE_AGENT_NAMES: readonly ["enhancer", "vv-implementer", "vv-spec-reviewer", "vv-code-reviewer", "investitagor"];
6
6
  export type ManagedOpenCodeAgentName = (typeof MANAGED_OPENCODE_AGENT_NAMES)[number];
7
- export declare const MANAGED_AGENT_PROMPT_NAMES: readonly ["guardian", "memory-reviewer", "enhancer", "implementer", "spec-reviewer", "code-reviewer", "investitagor"];
7
+ export declare const MANAGED_AGENT_PROMPT_NAMES: readonly ["guardian", "memory-reviewer", "enhancer", "vv-implementer", "vv-spec-reviewer", "vv-code-reviewer", "investitagor"];
8
8
  export type ManagedAgentPromptName = (typeof MANAGED_AGENT_PROMPT_NAMES)[number];
9
9
  export type ManagedSubagentDefinition = {
10
10
  name: ManagedSubagentName;
@@ -1,5 +1,5 @@
1
1
  // FILE: src/lib/managed-agents.ts
2
- // VERSION: 0.3.0
2
+ // VERSION: 0.3.1
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Describe vvoc-managed OpenCode agent prompts and load them from bundled templates or scoped vvoc config roots.
5
5
  // SCOPE: Built-in primary/subagent metadata, managed prompt names, prompt file path resolution, bundled template loading, and project/global prompt lookup.
@@ -33,15 +33,16 @@
33
33
  // END_MODULE_MAP
34
34
  //
35
35
  // START_CHANGE_SUMMARY
36
+ // LAST_CHANGE: [v0.3.1 - Renamed tracked subagents to vv-* names and aligned managed prompt file names with the tracked-agent naming convention.]
36
37
  // LAST_CHANGE: [v0.3.0 - Added the managed enhancer primary agent alongside the existing vvoc subagent definitions.]
37
38
  // END_CHANGE_SUMMARY
38
39
  import { readFile } from "node:fs/promises";
39
40
  import { join } from "node:path";
40
41
  import { getGlobalVvocDir, getProjectVvocDir, getVvocAgentsDir } from "./vvoc-paths.js";
41
42
  export const MANAGED_SUBAGENT_NAMES = [
42
- "implementer",
43
- "spec-reviewer",
44
- "code-reviewer",
43
+ "vv-implementer",
44
+ "vv-spec-reviewer",
45
+ "vv-code-reviewer",
45
46
  "investitagor",
46
47
  ];
47
48
  export const MANAGED_PRIMARY_AGENT_NAMES = ["enhancer"];
@@ -56,24 +57,24 @@ export const MANAGED_AGENT_PROMPT_NAMES = [
56
57
  ];
57
58
  export const MANAGED_SUBAGENTS = [
58
59
  {
59
- name: "implementer",
60
+ name: "vv-implementer",
60
61
  description: "Implements approved changes with focused verification and a minimal diff.",
61
- promptFileName: "implementer.md",
62
+ promptFileName: "vv-implementer.md",
62
63
  mode: "subagent",
63
64
  },
64
65
  {
65
- name: "spec-reviewer",
66
+ name: "vv-spec-reviewer",
66
67
  description: "Checks an implementation against the requested spec and flags missing or extra behavior.",
67
- promptFileName: "spec-reviewer.md",
68
+ promptFileName: "vv-spec-reviewer.md",
68
69
  mode: "subagent",
69
70
  permission: {
70
71
  edit: "deny",
71
72
  },
72
73
  },
73
74
  {
74
- name: "code-reviewer",
75
+ name: "vv-code-reviewer",
75
76
  description: "Reviews changes for bugs, regressions, maintainability risks, and missing tests.",
76
- promptFileName: "code-reviewer.md",
77
+ promptFileName: "vv-code-reviewer.md",
77
78
  mode: "subagent",
78
79
  permission: {
79
80
  edit: "deny",
@@ -110,9 +111,9 @@ const MANAGED_AGENT_PROMPT_FILE_NAMES = new Map([
110
111
  ["guardian", "guardian.md"],
111
112
  ["memory-reviewer", "memory-reviewer.md"],
112
113
  ["enhancer", "enhancer.md"],
113
- ["implementer", "implementer.md"],
114
- ["spec-reviewer", "spec-reviewer.md"],
115
- ["code-reviewer", "code-reviewer.md"],
114
+ ["vv-implementer", "vv-implementer.md"],
115
+ ["vv-spec-reviewer", "vv-spec-reviewer.md"],
116
+ ["vv-code-reviewer", "vv-code-reviewer.md"],
116
117
  ["investitagor", "investitagor.md"],
117
118
  ]);
118
119
  export function isManagedSubagentName(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"managed-agents.js","sourceRoot":"","sources":["../../src/lib/managed-agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-agents.js","sourceRoot":"","sources":["../../src/lib/managed-agents.ts"],"names":[],"mappings":"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"}
@@ -32,9 +32,9 @@ export type BuiltInRoleBindings = {
32
32
  guardian: BuiltInRoleName;
33
33
  "memory-reviewer": BuiltInRoleName;
34
34
  enhancer: BuiltInRoleName;
35
- implementer: BuiltInRoleName;
36
- "spec-reviewer": BuiltInRoleName;
37
- "code-reviewer": BuiltInRoleName;
35
+ "vv-implementer": BuiltInRoleName;
36
+ "vv-spec-reviewer": BuiltInRoleName;
37
+ "vv-code-reviewer": BuiltInRoleName;
38
38
  investitagor: BuiltInRoleName;
39
39
  };
40
40
  };
@@ -1,5 +1,5 @@
1
1
  // FILE: src/lib/model-roles.ts
2
- // VERSION: 0.1.1
2
+ // VERSION: 0.1.2
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Define built-in role IDs, role-reference parsing, concrete model-selection parsing, and deterministic built-in role bindings.
5
5
  // SCOPE: Role ID validation, vv-role reference detection/resolution, provider/model[:variant] parsing, and hard-coded built-in role binding lookup.
@@ -21,6 +21,7 @@
21
21
  // END_MODULE_MAP
22
22
  //
23
23
  // START_CHANGE_SUMMARY
24
+ // LAST_CHANGE: [v0.1.2 - Renamed tracked managed-agent role binding keys to vv-* names for implementer/spec/code reviewer roles.]
24
25
  // LAST_CHANGE: [v0.1.1 - Distinguished unknown-role from blank configured role bindings and aligned role-reference whitespace handling between checker and resolver.]
25
26
  // LAST_CHANGE: [v0.1.0 - Added role ID validation, role reference resolution helpers, model selection parsing, and deterministic built-in role bindings.]
26
27
  // END_CHANGE_SUMMARY
@@ -43,9 +44,9 @@ const BUILTIN_ROLE_BINDINGS = {
43
44
  guardian: "fast",
44
45
  "memory-reviewer": "fast",
45
46
  enhancer: "smart",
46
- implementer: "default",
47
- "spec-reviewer": "smart",
48
- "code-reviewer": "smart",
47
+ "vv-implementer": "default",
48
+ "vv-spec-reviewer": "smart",
49
+ "vv-code-reviewer": "smart",
49
50
  investitagor: "smart",
50
51
  },
51
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/lib/model-roles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/lib/model-roles.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // FILE: src/lib/opencode.ts
2
- // VERSION: 0.9.0
2
+ // VERSION: 0.9.5
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Manage OpenCode config mutation, provider patching, and the canonical vvoc.json config file.
5
5
  // SCOPE: Scope-aware path resolution, pinned plugin writes, top-level OpenCode model/default writes, provider baseURL patching, provider object patching, managed OpenCode agent registration/model plus variant overrides, managed agent prompt sync, version-aware canonical vvoc config rendering and sync, and installation inspection.
@@ -48,6 +48,11 @@
48
48
  // END_MODULE_MAP
49
49
  //
50
50
  // START_CHANGE_SUMMARY
51
+ // LAST_CHANGE: [v0.9.5 - Moved legacy tracked-agent deletion gating into sync with prompt-file ownership checks so user-owned legacy prompt files prevent cleanup.]
52
+ // LAST_CHANGE: [v0.9.4 - Tightened legacy tracked-agent cleanup to remove only entries that fully match legacy vvoc-managed registration shape, preserving customized user-owned old-name agents.]
53
+ // LAST_CHANGE: [v0.9.3 - Restricted legacy tracked-agent cleanup to entries that match legacy vvoc-managed prompt references so user-owned custom agents with old names are preserved.]
54
+ // LAST_CHANGE: [v0.9.2 - Added conservative cleanup of legacy tracked managed agent registrations so sync removes pre-rename implementer/spec-reviewer/code-reviewer entries.]
55
+ // LAST_CHANGE: [v0.9.1 - Narrowed built-in OpenCode auto-seeding to `agent.explore` so install/init/sync stop rewriting other built-in agent model refs.]
51
56
  // LAST_CHANGE: [v0.9.0 - Added OpenCode agent variant read/write helpers so vvoc can translate provider/model:variant into native agent config fields.]
52
57
  // END_CHANGE_SUMMARY
53
58
  import { applyEdits, format, modify, parse } from "jsonc-parser";
@@ -62,6 +67,26 @@ export const CLI_NAME = "vvoc";
62
67
  export { PACKAGE_NAME };
63
68
  export const OPENCODE_SCHEMA_URL = "https://opencode.ai/config.json";
64
69
  const MANAGED_MARKER = "Managed by vvoc";
70
+ const LEGACY_TRACKED_MANAGED_AGENT_NAMES = [
71
+ "implementer",
72
+ "spec-reviewer",
73
+ "code-reviewer",
74
+ ];
75
+ const LEGACY_TRACKED_ROLE_BINDINGS = {
76
+ implementer: "default",
77
+ "spec-reviewer": "smart",
78
+ "code-reviewer": "smart",
79
+ };
80
+ const LEGACY_TRACKED_PROMPT_FILE_NAMES = {
81
+ implementer: "implementer.md",
82
+ "spec-reviewer": "spec-reviewer.md",
83
+ "code-reviewer": "code-reviewer.md",
84
+ };
85
+ const LEGACY_TRACKED_DESCRIPTIONS = {
86
+ implementer: "Implements approved changes with focused verification and a minimal diff.",
87
+ "spec-reviewer": "Checks an implementation against the requested spec and flags missing or extra behavior.",
88
+ "code-reviewer": "Reviews changes for bugs, regressions, maintainability risks, and missing tests.",
89
+ };
65
90
  const OPENCODE_CONFIG_FILE_NAMES = ["opencode.json", "opencode.jsonc"];
66
91
  const JSON_FORMAT = {
67
92
  insertSpaces: true,
@@ -123,9 +148,6 @@ export function ensureManagedAgentRegistrationsConfigText(text, paths) {
123
148
  small_model: createRoleReference(builtInRoleBindings.opencodeDefaults.smallModel),
124
149
  };
125
150
  const builtInAgentModelRefs = {
126
- build: createRoleReference(builtInRoleBindings.opencodeAgents.build),
127
- plan: createRoleReference(builtInRoleBindings.opencodeAgents.plan),
128
- general: createRoleReference(builtInRoleBindings.opencodeAgents.general),
129
151
  explore: createRoleReference(builtInRoleBindings.opencodeAgents.explore),
130
152
  };
131
153
  if (!text?.trim()) {
@@ -208,7 +230,8 @@ export function ensureManagedAgentRegistrationsConfigText(text, paths) {
208
230
  }
209
231
  export async function syncManagedAgentRegistrations(paths) {
210
232
  const currentText = await readOptionalText(paths.opencodeConfigPath);
211
- const nextText = ensureManagedAgentRegistrationsConfigText(currentText, paths);
233
+ const syncedText = ensureManagedAgentRegistrationsConfigText(currentText, paths);
234
+ const nextText = await cleanupLegacyTrackedManagedEntries(syncedText, paths);
212
235
  if (currentText === nextText) {
213
236
  return { path: paths.opencodeConfigPath, changed: false };
214
237
  }
@@ -765,6 +788,78 @@ function getManagedOpenCodeAgentPromptReference(paths, agentName) {
765
788
  const promptRef = relative(dirname(paths.opencodeConfigPath), promptPath).replaceAll("\\", "/");
766
789
  return `{file:${promptRef.startsWith(".") ? promptRef : `./${promptRef}`}}`;
767
790
  }
791
+ function getLegacyTrackedManagedPromptReferences(paths, agentName) {
792
+ const promptPath = join(paths.managedAgentsDirPath, LEGACY_TRACKED_PROMPT_FILE_NAMES[agentName]);
793
+ const promptRef = relative(dirname(paths.opencodeConfigPath), promptPath).replaceAll("\\", "/");
794
+ const normalized = promptRef.startsWith(".") ? promptRef : `./${promptRef}`;
795
+ const references = new Set([`{file:${normalized}}`]);
796
+ if (normalized.startsWith(".") && !normalized.startsWith("../") && !normalized.startsWith("./")) {
797
+ references.add(`{file:./${normalized}}`);
798
+ }
799
+ return references;
800
+ }
801
+ function isLegacyTrackedManagedRegistration(paths, agentName, entry) {
802
+ const expectedKeys = new Set(agentName === "implementer"
803
+ ? ["description", "mode", "prompt", "model"]
804
+ : ["description", "mode", "prompt", "model", "permission"]);
805
+ if (Object.keys(entry).length !== expectedKeys.size) {
806
+ return false;
807
+ }
808
+ for (const key of Object.keys(entry)) {
809
+ if (!expectedKeys.has(key)) {
810
+ return false;
811
+ }
812
+ }
813
+ if (entry.mode !== "subagent") {
814
+ return false;
815
+ }
816
+ if (typeof entry.prompt !== "string") {
817
+ return false;
818
+ }
819
+ const expectedLegacyRefs = getLegacyTrackedManagedPromptReferences(paths, agentName);
820
+ if (!expectedLegacyRefs.has(entry.prompt.trim())) {
821
+ return false;
822
+ }
823
+ if (entry.model !== createRoleReference(LEGACY_TRACKED_ROLE_BINDINGS[agentName])) {
824
+ return false;
825
+ }
826
+ if (entry.description !== LEGACY_TRACKED_DESCRIPTIONS[agentName]) {
827
+ return false;
828
+ }
829
+ if (agentName === "implementer") {
830
+ return entry.permission === undefined;
831
+ }
832
+ return JSON.stringify(entry.permission) === JSON.stringify({ edit: "deny" });
833
+ }
834
+ async function cleanupLegacyTrackedManagedEntries(text, paths) {
835
+ const document = parseObjectDocument(text, "OpenCode config");
836
+ const currentAgents = readAgentMap(document, "OpenCode config");
837
+ let nextText = text;
838
+ for (const legacyTrackedName of LEGACY_TRACKED_MANAGED_AGENT_NAMES) {
839
+ const currentEntry = currentAgents[legacyTrackedName];
840
+ if (!currentEntry) {
841
+ continue;
842
+ }
843
+ if (!isLegacyTrackedManagedRegistration(paths, legacyTrackedName, currentEntry)) {
844
+ continue;
845
+ }
846
+ if (!(await canDeleteLegacyTrackedManagedEntry(paths, legacyTrackedName))) {
847
+ continue;
848
+ }
849
+ nextText = applyEdits(nextText, modify(nextText, ["agent", legacyTrackedName], undefined, {
850
+ formattingOptions: JSON_FORMAT,
851
+ }));
852
+ }
853
+ return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
854
+ }
855
+ async function canDeleteLegacyTrackedManagedEntry(paths, agentName) {
856
+ const legacyPromptPath = join(paths.managedAgentsDirPath, LEGACY_TRACKED_PROMPT_FILE_NAMES[agentName]);
857
+ const promptText = await readOptionalText(legacyPromptPath);
858
+ if (promptText === undefined) {
859
+ return true;
860
+ }
861
+ return isManagedFile(promptText);
862
+ }
768
863
  function getManagedOpenCodeAgentRegistration(paths, agentName) {
769
864
  const definition = getManagedOpenCodeAgentDefinition(agentName);
770
865
  const builtInBindings = getBuiltInRoleBindings();