@osovv/vv-opencode 1.3.6-rc.5 → 1.3.6-rc.6
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/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## <small>1.3.6-rc.6 (2026-08-27)</small>
|
|
2
|
+
|
|
3
|
+
### Summary
|
|
4
|
+
|
|
5
|
+
Version 1.3.6-rc.6 makes Hashline Edit tool routing more predictable by selecting the edit mode from the session model ID only, removing the previous providerID matching pass. Edit format is now treated purely as a property of the model, which eliminates a subtle precedence bug where a provider-level rule could shadow a more specific model-level rule regardless of declaration order, causing sessions to receive an unexpected editing tool. The default routing table is unchanged—deepseek, kimi, qwen, glm, and gpt/codex models still resolve to their usual editing tools—so existing setups behave the same while users with overlapping provider/model patterns now get deterministic, sensible routing, and every session still sees exactly one editing tool.
|
|
6
|
+
|
|
7
|
+
* feat(hashline-edit): route edit modes by modelID only ([2382afd](https://github.com/osovv/vv-opencode/commit/2382afd))
|
|
8
|
+
|
|
1
9
|
## <small>1.3.6-rc.5 (2026-08-26)</small>
|
|
2
10
|
|
|
3
11
|
### Summary
|
package/README.md
CHANGED
|
@@ -432,7 +432,7 @@ For review-only reports, use `"mode": "review_only"`. In review-only mode, revie
|
|
|
432
432
|
- `str_replace_editor` — the plugin's DeepSeek dsh contract (`view`/`create`/`str_replace`/`insert`) with exact-verbatim matching.
|
|
433
433
|
- `hashline_edit` — the plugin's hash-anchored tool with `LINE#HASH#ANCHOR` references and anchored read output (default for unmatched models).
|
|
434
434
|
|
|
435
|
-
The default routing table sends `deepseek` to `str_replace_editor`, `kimi`, `qwen`, and `glm` to `edit`, and `gpt`/`codex` to `apply_patch`; everything else stays on `hashline_edit`. Patterns match case-insensitively
|
|
435
|
+
The default routing table sends `deepseek` to `str_replace_editor`, `kimi`, `qwen`, and `glm` to `edit`, and `gpt`/`codex` to `apply_patch`; everything else stays on `hashline_edit`. Patterns match case-insensitively as substrings of the session `modelID` only; the first matching rule wins. For every mode the plugin hides the other edit tools from the model — including the host `edit` for the `str_replace_editor`/`hashline_edit` cohorts — so each session sees exactly one editing tool.
|
|
436
436
|
|
|
437
437
|
`vvoc sync` and `vvoc init` write this default table into `vvoc.json` so it is visible and editable. Materialization is conservative: a routing value you have changed is never overwritten; the table is only filled in where it is missing. Override routing in `vvoc.json` (schema v3) — the `plugins["hashline-edit"]` entry accepts a boolean or an object:
|
|
438
438
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// VERSION: 0.2.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Define edit-mode routing configuration and resolve the active edit mode for a session model.
|
|
5
|
-
// SCOPE: EditMode vocabulary, strict routing config parsing with the default routing table, plugin entry union resolution, and case-insensitive
|
|
5
|
+
// SCOPE: EditMode vocabulary, strict routing config parsing with the default routing table, plugin entry union resolution, and case-insensitive modelID substring matching.
|
|
6
6
|
// DEPENDS: [src/lib/plugin-toggle-config.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
// parseRoutingConfig - Strictly parse an unknown routing value into a RoutingConfig or throw.
|
|
19
19
|
// HashlineEditPluginSettings - Resolved enabled flag and routing config for the hashline-edit plugin entry.
|
|
20
20
|
// parseHashlineEditPluginEntry - Resolve the plugins["hashline-edit"] boolean-or-object union into enabled flag and routing config.
|
|
21
|
-
// resolveEditMode - Resolve the active edit mode for a
|
|
21
|
+
// resolveEditMode - Resolve the active edit mode for a session modelID against a routing config.
|
|
22
22
|
// END_MODULE_MAP
|
|
23
23
|
//
|
|
24
24
|
// START_CHANGE_SUMMARY
|
|
@@ -96,21 +96,18 @@ export function parseHashlineEditPluginEntry(raw) {
|
|
|
96
96
|
}
|
|
97
97
|
// END_BLOCK_PARSE
|
|
98
98
|
// START_BLOCK_RESOLVE
|
|
99
|
+
// Rules match the session modelID only (case-insensitive substring, first
|
|
100
|
+
// match wins). Provider IDs are deliberately not matched: edit format is a
|
|
101
|
+
// property of the model, and provider prefixes would only add surprising
|
|
102
|
+
// precedence between overlapping rules.
|
|
99
103
|
export function resolveEditMode(config, model) {
|
|
100
|
-
if (!model) {
|
|
104
|
+
if (!model?.modelID) {
|
|
101
105
|
return config.default;
|
|
102
106
|
}
|
|
103
|
-
const
|
|
104
|
-
const modelID = model.modelID?.toLowerCase();
|
|
107
|
+
const modelID = model.modelID.toLowerCase();
|
|
105
108
|
for (const rule of config.rules) {
|
|
106
109
|
const pattern = rule.pattern.toLowerCase();
|
|
107
|
-
if (
|
|
108
|
-
return rule.mode;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
for (const rule of config.rules) {
|
|
112
|
-
const pattern = rule.pattern.toLowerCase();
|
|
113
|
-
if (modelID !== undefined && modelID.includes(pattern)) {
|
|
110
|
+
if (modelID.includes(pattern)) {
|
|
114
111
|
return rule.mode;
|
|
115
112
|
}
|
|
116
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/routing.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,iBAAiB;AACjB,wBAAwB;AACxB,0GAA0G;AAC1G,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/routing.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": "1.3.6-rc.
|
|
3
|
+
"version": "1.3.6-rc.6",
|
|
4
4
|
"description": "An opinionated agentic development layer for OpenCode — spec-first when it matters, review-driven execution, portable model roles, safer tools, and long-run safety.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
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@1.3.6-rc.
|
|
3
|
+
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@1.3.6-rc.6/schemas/vvoc/v3.json",
|
|
4
4
|
"title": "vvoc config",
|
|
5
5
|
"description": "Canonical vvoc configuration document.",
|
|
6
6
|
"type": "object",
|