@osovv/vv-opencode 0.21.0 → 0.24.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 +45 -9
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/managed-agents.d.ts +3 -3
- package/dist/lib/managed-agents.js +14 -13
- package/dist/lib/managed-agents.js.map +1 -1
- package/dist/lib/model-roles.d.ts +3 -3
- package/dist/lib/model-roles.js +5 -4
- package/dist/lib/model-roles.js.map +1 -1
- package/dist/lib/opencode.js +100 -5
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/vvoc-config.js +5 -4
- package/dist/lib/vvoc-config.js.map +1 -1
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.d.ts +1 -0
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js +184 -0
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js.map +1 -0
- package/dist/plugins/hashline-edit/constants.d.ts +4 -0
- package/dist/plugins/hashline-edit/constants.js +26 -0
- package/dist/plugins/hashline-edit/constants.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.d.ts +10 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.js +114 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-operations.d.ts +7 -0
- package/dist/plugins/hashline-edit/edit-operations.js +168 -0
- package/dist/plugins/hashline-edit/edit-operations.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.d.ts +6 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.js +123 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.js.map +1 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.d.ts +7 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.js +52 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.js.map +1 -0
- package/dist/plugins/hashline-edit/hash-computation.d.ts +3 -0
- package/dist/plugins/hashline-edit/hash-computation.js +34 -0
- package/dist/plugins/hashline-edit/hash-computation.js.map +1 -0
- package/dist/plugins/hashline-edit/index.d.ts +2 -0
- package/dist/plugins/hashline-edit/index.js +246 -0
- package/dist/plugins/hashline-edit/index.js.map +1 -0
- package/dist/plugins/hashline-edit/normalize-edits.d.ts +10 -0
- package/dist/plugins/hashline-edit/normalize-edits.js +82 -0
- package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -0
- package/dist/plugins/hashline-edit/tool-description.d.ts +1 -0
- package/dist/plugins/hashline-edit/tool-description.js +35 -0
- package/dist/plugins/hashline-edit/tool-description.js.map +1 -0
- package/dist/plugins/hashline-edit/types.d.ts +17 -0
- package/dist/plugins/hashline-edit/types.js +19 -0
- package/dist/plugins/hashline-edit/types.js.map +1 -0
- package/dist/plugins/hashline-edit/validation.d.ts +20 -0
- package/dist/plugins/hashline-edit/validation.js +160 -0
- package/dist/plugins/hashline-edit/validation.js.map +1 -0
- package/dist/plugins/system-context-injection/index.js +65 -2
- package/dist/plugins/system-context-injection/index.js.map +1 -1
- package/dist/plugins/workflow/index.d.ts +2 -0
- package/dist/plugins/workflow/index.js +411 -0
- package/dist/plugins/workflow/index.js.map +1 -0
- package/dist/plugins/workflow/protocol.d.ts +33 -0
- package/dist/plugins/workflow/protocol.js +188 -0
- package/dist/plugins/workflow/protocol.js.map +1 -0
- package/dist/plugins/workflow/state.d.ts +79 -0
- package/dist/plugins/workflow/state.js +307 -0
- package/dist/plugins/workflow/state.js.map +1 -0
- package/dist/plugins/workflow/system-instruction.md +14 -0
- package/dist/plugins/workflow/tooling.d.ts +26 -0
- package/dist/plugins/workflow/tooling.js +161 -0
- package/dist/plugins/workflow/tooling.js.map +1 -0
- package/dist/plugins/workflow/transitions.d.ts +7 -0
- package/dist/plugins/workflow/transitions.js +102 -0
- package/dist/plugins/workflow/transitions.js.map +1 -0
- package/package.json +11 -3
- package/schemas/vvoc/v1.json +1 -1
- package/schemas/vvoc/v2.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
- package/templates/agents/{code-reviewer.md → vv-code-reviewer.md} +12 -4
- package/templates/agents/{implementer.md → vv-implementer.md} +14 -8
- 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
|
|
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
|
|
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.
|
|
@@ -245,6 +256,30 @@ The runtime prompt is loaded from `memory-reviewer.md`, preferring `./.vvoc/agen
|
|
|
245
256
|
|
|
246
257
|
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.
|
|
247
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.
|
|
282
|
+
|
|
248
283
|
### SecretsRedactionPlugin
|
|
249
284
|
|
|
250
285
|
`SecretsRedactionPlugin` redacts secrets from chat content before LLM requests and restores placeholders afterward where needed.
|
|
@@ -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.
|
|
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,
|
|
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.
|
|
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":"AAAA,kCAAkC;AAClC,iBAAiB;AACjB,wBAAwB;AACxB,4HAA4H;AAC5H,8JAA8J;AAC9J,kEAAkE;AAClE,8DAA8D;AAC9D,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,iEAAiE;AACjE,0EAA0E;AAC1E,yFAAyF;AACzF,+GAA+G;AAC/G,iGAAiG;AACjG,0GAA0G;AAC1G,6DAA6D;AAC7D,uEAAuE;AACvE,sFAAsF;AACtF,qEAAqE;AACrE,+DAA+D;AAC/D,yEAAyE;AACzE,2EAA2E;AAC3E,0FAA0F;AAC1F,qGAAqG;AACrG,4EAA4E;AAC5E,uFAAuF;AACvF,8FAA8F;AAC9F,mGAAmG;AACnG,yHAAyH;AACzH,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uHAAuH;AACvH,qBAAqB;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,
|
|
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
|
};
|
package/dist/lib/model-roles.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// FILE: src/lib/model-roles.ts
|
|
2
|
-
// VERSION: 0.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":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,2IAA2I;AAC3I,sJAAsJ;AACtJ,gFAAgF;AAChF,mFAAmF;AACnF,oBAAoB;AACpB,2BAA2B;AAC3B,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,mEAAmE;AACnE,0DAA0D;AAC1D,qEAAqE;AACrE,iFAAiF;AACjF,qFAAqF;AACrF,wGAAwG;AACxG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,wKAAwK;AACxK,4JAA4J;AAC5J,qBAAqB;AAErB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAGlF,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAgDhD,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,uBAAuB,GAAG,yCAAyC,CAAC;AAE1E,MAAM,qBAAqB,GAAwB;IACjD,gBAAgB,EAAE;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,MAAM;KACnB;IACD,cAAc,EAAE;QACd,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,MAAM;KAChB;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,MAAM;QAChB,iBAAiB,EAAE,MAAM;QACzB,QAAQ,EAAE,OAAO;QACjB,
|
|
1
|
+
{"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/lib/model-roles.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/opencode.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// FILE: src/lib/opencode.ts
|
|
2
|
-
// VERSION: 0.9.
|
|
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
|
|
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();
|