@osovv/vv-opencode 0.35.0 → 0.35.4
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 +36 -4
- package/dist/commands/patch-provider.d.ts +21 -3
- package/dist/commands/patch-provider.js +22 -3
- package/dist/commands/patch-provider.js.map +1 -1
- package/dist/lib/vvoc-preset-registry.d.ts +1 -1
- package/dist/lib/vvoc-preset-registry.js +1 -1
- package/dist/plugins/workflow/repair.d.ts +1 -0
- package/dist/plugins/workflow/repair.js +53 -0
- package/dist/plugins/workflow/repair.js.map +1 -1
- package/package.json +3 -1
- package/schemas/vvoc/v3.json +3 -4
- package/templates/skills/vv-execute/SKILL.md +26 -2
package/README.md
CHANGED
|
@@ -235,6 +235,7 @@ Skills are loaded by OpenCode at session start through `config.skills.paths` (re
|
|
|
235
235
|
bun install # Install dependencies
|
|
236
236
|
bun run check # Typecheck + lint + format check + test
|
|
237
237
|
bun run fmt # Auto-format source files
|
|
238
|
+
bun run release:check # Verify package/schema release consistency
|
|
238
239
|
```
|
|
239
240
|
|
|
240
241
|
Git hooks managed via `lefthook`.
|
|
@@ -251,20 +252,51 @@ bun dist/cli.js status --config-dir "$tmpdir"
|
|
|
251
252
|
### Full release verification
|
|
252
253
|
|
|
253
254
|
```bash
|
|
255
|
+
bun run release:check
|
|
254
256
|
bun run check
|
|
255
|
-
bun run build
|
|
256
257
|
bun run pack:check
|
|
257
258
|
```
|
|
258
259
|
|
|
259
260
|
---
|
|
260
|
-
|
|
261
261
|
## Publishing
|
|
262
262
|
|
|
263
|
+
The release flow is automated via a local wrapper and a tag-gated GitHub Actions workflow.
|
|
264
|
+
|
|
265
|
+
### Local bump
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
bun run release:bump patch # or minor, major, prerelease, or explicit semver
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
This will:
|
|
272
|
+
1. Reject if the worktree is dirty
|
|
273
|
+
2. Bump `package.json` via `npm version --no-git-tag-version`
|
|
274
|
+
3. Update `schemas/vvoc/v3.json` `$id` to the new version
|
|
275
|
+
4. Run `release:check` for consistency
|
|
276
|
+
5. Create a release commit and annotated tag `vX.Y.Z`
|
|
277
|
+
|
|
278
|
+
### Push to trigger publish
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
git push && git push --tags
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
The GitHub Actions workflow triggers on `v*` tag pushes, verifies the tag matches
|
|
285
|
+
`package.json`, runs full validation (typecheck, lint, fmt check, tests, build, pack
|
|
286
|
+
check, `release:check`), and publishes to npm with `--provenance`.
|
|
287
|
+
|
|
288
|
+
### Checking consistency manually
|
|
289
|
+
|
|
263
290
|
```bash
|
|
264
|
-
bun run check
|
|
291
|
+
bun run release:check
|
|
265
292
|
```
|
|
266
293
|
|
|
267
|
-
|
|
294
|
+
This verifies that `package.json` name, version, and `schemas/vvoc/v3.json` `$id` and
|
|
295
|
+
config format version are all consistent. Run it independently anytime.
|
|
296
|
+
|
|
297
|
+
### CI publish workflow
|
|
298
|
+
|
|
299
|
+
The workflow uses npm provenance/trusted publishing (`id-token: write`) and does not publish on normal branch pushes. Configure npm trusted publishing for this GitHub repository/package, or adapt the publish step to use an `NPM_TOKEN` secret if token-based publishing is required.
|
|
268
300
|
|
|
269
301
|
---
|
|
270
302
|
|
|
@@ -13,10 +13,28 @@ type ProviderObjectPatchPreset = {
|
|
|
13
13
|
type PatchPreset = ProviderBaseUrlPatchPreset | ProviderObjectPatchPreset;
|
|
14
14
|
declare const PATCH_PROVIDER_PRESETS: {
|
|
15
15
|
readonly "stepfun-ai": {
|
|
16
|
-
readonly kind: "provider-
|
|
16
|
+
readonly kind: "provider-object";
|
|
17
17
|
readonly providerID: "stepfun";
|
|
18
|
-
readonly
|
|
19
|
-
|
|
18
|
+
readonly value: {
|
|
19
|
+
readonly options: {
|
|
20
|
+
readonly baseURL: "https://api.stepfun.ai/v1";
|
|
21
|
+
};
|
|
22
|
+
readonly models: {
|
|
23
|
+
readonly "step-3.7-flash": {
|
|
24
|
+
readonly name: "Step 3.7 Flash";
|
|
25
|
+
readonly limit: {
|
|
26
|
+
readonly context: 256000;
|
|
27
|
+
readonly input: 256000;
|
|
28
|
+
readonly output: 256000;
|
|
29
|
+
};
|
|
30
|
+
readonly modalities: {
|
|
31
|
+
readonly input: readonly ["text", "image"];
|
|
32
|
+
readonly output: readonly ["text"];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
readonly summary: "provider.stepfun.models.step-3.7-flash patched + baseURL";
|
|
20
38
|
};
|
|
21
39
|
readonly zai: {
|
|
22
40
|
readonly kind: "provider-object";
|
|
@@ -33,6 +33,25 @@ const ZAI_CODING_PLAN_PATCH = {
|
|
|
33
33
|
},
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
|
+
const STEPFUN_PATCH = {
|
|
37
|
+
options: {
|
|
38
|
+
baseURL: "https://api.stepfun.ai/v1",
|
|
39
|
+
},
|
|
40
|
+
models: {
|
|
41
|
+
"step-3.7-flash": {
|
|
42
|
+
name: "Step 3.7 Flash",
|
|
43
|
+
limit: {
|
|
44
|
+
context: 256000,
|
|
45
|
+
input: 256000,
|
|
46
|
+
output: 256000,
|
|
47
|
+
},
|
|
48
|
+
modalities: {
|
|
49
|
+
input: ["text", "image"],
|
|
50
|
+
output: ["text"],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
};
|
|
36
55
|
const OPENAI_PATCH = {
|
|
37
56
|
models: {
|
|
38
57
|
"vv-gpt-5.4-xhigh": {
|
|
@@ -59,10 +78,10 @@ const OPENAI_PATCH = {
|
|
|
59
78
|
};
|
|
60
79
|
const PATCH_PROVIDER_PRESETS = {
|
|
61
80
|
"stepfun-ai": {
|
|
62
|
-
kind: "provider-
|
|
81
|
+
kind: "provider-object",
|
|
63
82
|
providerID: "stepfun",
|
|
64
|
-
|
|
65
|
-
summary: "provider.stepfun.
|
|
83
|
+
value: STEPFUN_PATCH,
|
|
84
|
+
summary: "provider.stepfun.models.step-3.7-flash patched + baseURL",
|
|
66
85
|
},
|
|
67
86
|
zai: {
|
|
68
87
|
kind: "provider-object",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-provider.js","sourceRoot":"","sources":["../../src/commands/patch-provider.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,iBAAiB;AACjB,wBAAwB;AACxB,kDAAkD;AAClD,mLAAmL;AACnL,0CAA0C;AAC1C,gDAAgD;AAChD,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,yDAAyD;AACzD,+FAA+F;AAC/F,8EAA8E;AAC9E,mGAAmG;AACnG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,oGAAoG;AACpG,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAkB5B,MAAM,qBAAqB,GAAG;IAC5B,MAAM,EAAE;QACN,cAAc,EAAE;YACd,oBAAoB,EAAE;gBACpB,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,KAAK;iBACd;aACF;SACF;KACF;CACyC,CAAC;AAE7C,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE;QACN,kBAAkB,EAAE;YAClB,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,SAAS;YACb,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,eAAe,EAAE,OAAO;gBACxB,gBAAgB,EAAE,MAAM;gBACxB,OAAO,EAAE,CAAC,6BAA6B,CAAC;aACzC;SACF;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,SAAS;YACb,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,eAAe,EAAE,OAAO;gBACxB,gBAAgB,EAAE,MAAM;gBACxB,OAAO,EAAE,CAAC,6BAA6B,CAAC;aACzC;SACF;KACF;CACyC,CAAC;AAE7C,MAAM,sBAAsB,GAAG;IAC7B,YAAY,EAAE;QACZ,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"patch-provider.js","sourceRoot":"","sources":["../../src/commands/patch-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export declare const BUILTIN_VVOC_PRESET_REGISTRY: {
|
|
|
39
39
|
readonly description: "Personal osovv role assignments (deepseek + stepfun + minimax).";
|
|
40
40
|
readonly agents: {
|
|
41
41
|
readonly default: "deepseek/deepseek-v4-flash";
|
|
42
|
-
readonly fast: "stepfun/step-3.
|
|
42
|
+
readonly fast: "stepfun/step-3.7-flash";
|
|
43
43
|
readonly smart: "deepseek/deepseek-v4-pro";
|
|
44
44
|
readonly vision: "minimax-coding-plan/MiniMax-M2.7";
|
|
45
45
|
};
|
|
@@ -60,7 +60,7 @@ export const BUILTIN_VVOC_PRESET_REGISTRY = {
|
|
|
60
60
|
description: "Personal osovv role assignments (deepseek + stepfun + minimax).",
|
|
61
61
|
agents: {
|
|
62
62
|
default: "deepseek/deepseek-v4-flash",
|
|
63
|
-
fast: "stepfun/step-3.
|
|
63
|
+
fast: "stepfun/step-3.7-flash",
|
|
64
64
|
smart: "deepseek/deepseek-v4-pro",
|
|
65
65
|
vision: "minimax-coding-plan/MiniMax-M2.7",
|
|
66
66
|
},
|
|
@@ -3,6 +3,7 @@ import type { ProtocolErrorCode, TrackedAgentName } from "./protocol.js";
|
|
|
3
3
|
export type ResumableTaskEnvelope = {
|
|
4
4
|
taskId: string;
|
|
5
5
|
innerResult: string;
|
|
6
|
+
format: "resumable_header" | "task_element";
|
|
6
7
|
};
|
|
7
8
|
export declare function unwrapResumableTaskResult(output: string): {
|
|
8
9
|
normalizedOutput: string;
|
|
@@ -28,6 +28,7 @@ const SAFE_TRACKED_RESULT_REPAIR_CODES = new Set([
|
|
|
28
28
|
"MISSING_ROUTE",
|
|
29
29
|
"UNEXPECTED_TOP_BLOCK_LINE",
|
|
30
30
|
]);
|
|
31
|
+
const TASK_ELEMENT_OPEN_RE = /^<task\s+id="([^"]+)"\s+state="([^"]+)"\s*>$/;
|
|
31
32
|
const FORMAT_ONLY_REPAIR_SYSTEM_PROMPT = "Format-only workflow repair. Do not call tools, do not perform implementation or review work, and do not cause side effects. Return only the corrected final response text.";
|
|
32
33
|
const FORMAT_ONLY_REPAIR_DISABLED_TOOLS = {
|
|
33
34
|
apply_patch: false,
|
|
@@ -76,9 +77,61 @@ function parseResumableTaskEnvelope(output) {
|
|
|
76
77
|
.slice(startTagIndex + 1, endTagIndex)
|
|
77
78
|
.join("\n")
|
|
78
79
|
.trim(),
|
|
80
|
+
format: "resumable_header",
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse the new OpenCode `<task id="ses_..." state="completed">...</task>` envelope format.
|
|
85
|
+
* Also strips any nested `<task_result>`/`</task_result>` wrapper inside the element body.
|
|
86
|
+
*/
|
|
87
|
+
function parseTaskElementEnvelope(output) {
|
|
88
|
+
const normalizedOutput = output.replace(/\r\n/g, "\n");
|
|
89
|
+
const lines = normalizedOutput.split("\n");
|
|
90
|
+
const firstMeaningfulIndex = lines.findIndex((line) => line.trim().length > 0);
|
|
91
|
+
if (firstMeaningfulIndex < 0) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
const firstMeaningfulLine = lines[firstMeaningfulIndex]?.trim() ?? "";
|
|
95
|
+
const openTagMatch = TASK_ELEMENT_OPEN_RE.exec(firstMeaningfulLine);
|
|
96
|
+
if (!openTagMatch) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
const taskId = openTagMatch[1];
|
|
100
|
+
// Find closing </task> tag
|
|
101
|
+
const closeTagIndex = lines.findIndex((line, index) => index > firstMeaningfulIndex && line.trim() === "</task>");
|
|
102
|
+
if (closeTagIndex < 0) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
// Extract inner content (between open and close tags)
|
|
106
|
+
let innerLines = lines.slice(firstMeaningfulIndex + 1, closeTagIndex);
|
|
107
|
+
// Strip outer <task_result>/</task_result> wrapper if present
|
|
108
|
+
const innerFirstIdx = innerLines.findIndex((line) => line.trim().length > 0);
|
|
109
|
+
if (innerFirstIdx >= 0) {
|
|
110
|
+
const innerFirstTrimmed = innerLines[innerFirstIdx]?.trim() ?? "";
|
|
111
|
+
if (innerFirstTrimmed === "<task_result>") {
|
|
112
|
+
// Find the closing </task_result>
|
|
113
|
+
const innerCloseIdx = innerLines.findIndex((line, index) => index > innerFirstIdx && line.trim() === "</task_result>");
|
|
114
|
+
if (innerCloseIdx >= 0) {
|
|
115
|
+
innerLines = innerLines.slice(innerFirstIdx + 1, innerCloseIdx);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
taskId,
|
|
121
|
+
innerResult: innerLines.join("\n").trim(),
|
|
122
|
+
format: "task_element",
|
|
79
123
|
};
|
|
80
124
|
}
|
|
81
125
|
export function unwrapResumableTaskResult(output) {
|
|
126
|
+
// Try the new <task> element format first
|
|
127
|
+
const taskElementEnvelope = parseTaskElementEnvelope(output);
|
|
128
|
+
if (taskElementEnvelope) {
|
|
129
|
+
return {
|
|
130
|
+
normalizedOutput: taskElementEnvelope.innerResult,
|
|
131
|
+
...(taskElementEnvelope ? { envelope: taskElementEnvelope } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Fall back to the old resumable task header format
|
|
82
135
|
const envelope = parseResumableTaskEnvelope(output);
|
|
83
136
|
return {
|
|
84
137
|
normalizedOutput: envelope?.innerResult ?? output,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../../../src/plugins/workflow/repair.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,iBAAiB;AACjB,wBAAwB;AACxB,0IAA0I;AAC1I,6JAA6J;AAC7J,uFAAuF;AACvF,uEAAuE;AACvE,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,gHAAgH;AAChH,gHAAgH;AAChH,8GAA8G;AAC9G,0GAA0G;AAC1G,6HAA6H;AAC7H,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,gJAAgJ;AAChJ,4JAA4J;AAC5J,0JAA0J;AAC1J,qBAAqB;
|
|
1
|
+
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../../../src/plugins/workflow/repair.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osovv/vv-opencode",
|
|
3
|
-
"version": "0.35.
|
|
3
|
+
"version": "0.35.4",
|
|
4
4
|
"description": "Portable OpenCode workflow plugins, explicit memory, and CLI tooling.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -68,6 +68,8 @@
|
|
|
68
68
|
"test": "bun test",
|
|
69
69
|
"check": "bun run typecheck && bun run lint && bun run fmt:check && bun test",
|
|
70
70
|
"pack:check": "bun run build && bun -e \"const root = await import('./dist/index.js'); if (!('GuardianPlugin' in root)) throw new Error('dist root export missing GuardianPlugin'); if (!('HashlineEditPlugin' in root)) throw new Error('dist root export missing HashlineEditPlugin'); if (!('ModelRolesPlugin' in root)) throw new Error('dist root export missing ModelRolesPlugin'); if (!('SystemContextInjectionPlugin' in root)) throw new Error('dist root export missing SystemContextInjectionPlugin'); if (!('WorkflowPlugin' in root)) throw new Error('dist root export missing WorkflowPlugin'); if (!('SecretsRedactionPlugin' in root)) throw new Error('dist root export missing SecretsRedactionPlugin'); await import('./dist/plugins/guardian/index.js'); await import('./dist/plugins/hashline-edit/index.js'); await import('./dist/plugins/model-roles/index.js'); await import('./dist/plugins/system-context-injection/index.js'); await import('./dist/plugins/workflow/index.js'); await import('./dist/plugins/secrets-redaction/index.js')\" && npm pack --dry-run",
|
|
71
|
+
"release:check": "bun scripts/release-check.ts",
|
|
72
|
+
"release:bump": "bun scripts/release-bump.ts",
|
|
71
73
|
"prepare": "lefthook install --force"
|
|
72
74
|
},
|
|
73
75
|
"dependencies": {
|
package/schemas/vvoc/v3.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@0.35.
|
|
3
|
+
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@0.35.4/schemas/vvoc/v3.json",
|
|
4
4
|
"title": "vvoc config",
|
|
5
5
|
"description": "Canonical vvoc configuration document.",
|
|
6
6
|
"type": "object",
|
|
@@ -110,9 +110,7 @@
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
,
|
|
113
|
+
},
|
|
116
114
|
"plugins": {
|
|
117
115
|
"type": "object",
|
|
118
116
|
"propertyNames": { "minLength": 1 },
|
|
@@ -120,4 +118,5 @@
|
|
|
120
118
|
"type": "boolean"
|
|
121
119
|
}
|
|
122
120
|
}
|
|
121
|
+
}
|
|
123
122
|
}
|
|
@@ -145,12 +145,36 @@ Run the acceptance criteria. For each criterion:
|
|
|
145
145
|
- Does the test pass?
|
|
146
146
|
- Did the implementer miss any edge cases?
|
|
147
147
|
|
|
148
|
-
If all criteria pass →
|
|
148
|
+
If all criteria pass → proceed to commit.
|
|
149
149
|
If criteria fail → re-dispatch implementer with specific failure details.
|
|
150
150
|
</step>
|
|
151
151
|
|
|
152
|
+
<step name="commit">
|
|
153
|
+
After all acceptance criteria pass, commit the task's changes to git.
|
|
154
|
+
All changed files (new, modified, deleted) from the task must be committed together.
|
|
155
|
+
|
|
156
|
+
Derive a business task identifier from (in priority order):
|
|
157
|
+
1. Branch name — extract ticket/issue reference (e.g. `feat/JIRA-123-description` → `JIRA-123`)
|
|
158
|
+
2. Spec title from `.vvoc/specs/` — if a spec exists for this feature, use its title
|
|
159
|
+
3. Plan title from plan.xml — use the plan's summary or overarching feature name
|
|
160
|
+
4. Ask the user explicitly — if no identifier is derivable, ask the user what business context to include
|
|
161
|
+
|
|
162
|
+
Match the commit message style to the repository's existing convention.
|
|
163
|
+
Inspect the last 10 commits with `git log --oneline -10` and replicate the pattern.
|
|
164
|
+
Typical modern repos use conventional commits: `type(scope): description` or `type: description`.
|
|
165
|
+
|
|
166
|
+
Format: `<business-ref> <type>(<scope>): <task title>`
|
|
167
|
+
e.g. `JIRA-123 feat(catalog): implement product search endpoint`
|
|
168
|
+
If no business identifier is available, omit it: `fix(scope): task title`
|
|
169
|
+
|
|
170
|
+
Do NOT include internal T-NNN task IDs in commit messages — these are workflow-local identifiers.
|
|
171
|
+
|
|
172
|
+
If git is not available or the working directory is not a git repository, skip with a warning.
|
|
173
|
+
If the commit fails (e.g. nothing to commit, hook rejection), report the failure and stop. Do not silently proceed.
|
|
174
|
+
</step>
|
|
175
|
+
|
|
152
176
|
<step name="close">
|
|
153
|
-
Mark the task complete in TodoWrite. Close the work item with work_item_close.
|
|
177
|
+
The task's changes are already committed. Mark the task complete in TodoWrite. Close the work item with work_item_close.
|
|
154
178
|
If all tasks are done → proceed to completion.
|
|
155
179
|
Otherwise → move to the next task in dependency order.
|
|
156
180
|
</step>
|