Releases: osovv/vv-opencode
Release list
v1.3.6-rc.6
1.3.6-rc.6 (2026-08-27)
Summary
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.
- feat(hashline-edit): route edit modes by modelID only (2382afd)
v1.3.6-rc.5
1.3.6-rc.5 (2026-08-26)
Summary
This release fixes a backward-compatibility regression in the hashline-edit plugin's routing configuration. The previous release candidate narrowed the accepted routing values, which caused vvoc.json configs created by older releases — containing legacy values like hashline, replace, or passthrough — to fail strict schema validation and break vvoc sync after upgrading. Now those legacy values are accepted as aliases and normalized at parse time to the canonical vocabulary (hashline becomes hashline_edit, while replace and passthrough become edit), with schema v3 and the embedded config schema updated to accept them. As a result, existing configs validate and sync cleanly after an upgrade without rewriting user values.
- fix(hashline-edit): accept legacy routing values from pre-rc.4 configs (13a69f4)
v1.3.6-rc.4
1.3.6-rc.4 (2026-08-26)
Summary
This release improves edit reliability by routing edit cohorts to the host's built-in edit tool. The hashline-edit plugin no longer registers its own edit tool or replace engine, so qwen, kimi, and glm sessions now edit through OpenCode's native matching layers, prior-read enforcement, and unified diff output instead of the shadowing replace profile that caused duplicated lines and false "not read/drifted" rejections. Routing now uses native tool names (apply_patch | edit | str_replace_editor | hashline_edit), with deepseek mapped to str_replace_editor, gpt/codex to apply_patch, and unmatched models to hashline_edit; each session exposes exactly one edit tool, the removed replace/passthrough values are rejected loudly, and the vvoc.json schema and README are updated to match.
- feat(hashline-edit): route edit cohorts to the host built-in edit (d6bdc2f)
v1.3.6-rc.3
1.3.6-rc.3 (2026-08-25)
Summary
The peak-hours cost-gating plugin now defaults to soft mode, so by default a message to a provider inside a peak-pricing window still goes through with a one-line cost notice and the orange TUI banner, with per-provider mode overrides and a top-level "mode": "hard" available for users who want stricter enforcement. When hard mode is enabled, blocking now occurs in chat.params after the user message has been persisted, which means blocked messages remain visible in session history and the rejection renders as a standard message error part naming the provider, window end, wait time, and off-peak provider suggestions instead of being dropped with a transient toast. This makes peak-hour enforcement less disruptive by default and prevents message loss when strict blocking is configured.
- fix(peak-hours): default to soft mode and block in chat.params so messages persist (51ee91a)
v1.3.6-rc.2
1.3.6-rc.2 (2026-08-25)
Summary
This release moves all Kimi presets and provider patches from the previous provider to the kimi-for-coding subscription provider, updating the vv-kimi role assignments for default, fast, smart, and reviewer agents with the correct provider-scoped model IDs (such as k3 instead of the older kimi-k3 ID) and refreshed context and output limits. This matters to users because applying a Kimi preset now resolves to the intended subscription models directly, with accurate limits and routing behavior, so configured agents connect to the right endpoints without stale provider or model identifiers.
- feat(presets): move kimi presets and patches to the kimi-for-coding subscription provider (0029fda)
v1.3.6-rc.1
1.3.6-rc.1 (2026-08-25)
Summary
This release fixes the peak-hours plugin so peak-hour surcharge scheduling is applied only to subscription plan provider ids verified in the OpenCode provider registry (models.dev). GLM Coding Plan ids (zai-coding-plan, zhipuai-coding-plan) map to the Z.AI schedule, while Alibaba Token Plan ids (alibaba-token-plan, alibaba-token-plan-cn) map to the Qwen schedule; bare pay-per-token API providers such as zai, zhipuai, alibaba, alibaba-cn, and openai are never gated because their tariffs publish no peak surcharge. This prevents users on pay-per-token APIs from being incorrectly warned about or blocked by peak-hour windows, while unknown providers remain unblocked and malformed schedules still fail open.
- fix(peak-hours): gate subscription plan provider ids only with registry-verified aliases (61b84bb)
v1.3.6-rc.0
1.3.6-rc.0 (2026-08-21)
Summary
This release adds the PeakHoursPlugin, which makes peak-priced billing windows visible and optionally gates new work: in hard mode a message whose provider is inside a configured peak window is rejected before any LLM request with the window end, wait time, and connected providers currently outside peak, while soft mode appends a bounded cost notice and keeps a persistent orange TUI banner visible; sessions created before a window started, subagent-like agents, and internal OpenCode agents are never hard-blocked, revision-dated default schedules for DeepSeek, Z.AI, and Qwen are materialized into vvoc.json by sync/init without overwriting user edits, and unknown providers are never gated. The release also makes the npm publication channel explicit end to end: pre-release versions now publish to a dedicated rc dist-tag with pre-release-marked GitHub Releases instead of silently moving the latest tag, so default vvoc upgrade stays on stable releases, and users can deliberately opt into candidates with vvoc upgrade --rc (or --allow-prerelease), which resolves the rc dist-tag and reports clearly when no candidate is available.
- chore(grace): add approved C-PLUGIN-PEAK-HOURS spec and plan bundle (02aefdb)
- chore(grace): add approved C-RELEASE-RC-CHANNEL spec and plan bundle (39a2e76)
- chore(grace): apply and archive C-PLUGIN-PEAK-HOURS (5069639)
- chore(grace): apply and archive C-RELEASE-RC-CHANNEL (3de9627)
- chore(grace): synchronize release channel projections for C-RELEASE-RC-CHANNEL (a47c700)
- docs(peak-hours): document modes, grace, defaults, aliases, and the TUI banner (9b01d07)
- docs(release): document the rc dist-tag channel, upgrade flags, and maintainer workflow (2906a51)
- feat(peak-hours): add chat.message server plugin with grace and suggestions (760f418)
- feat(peak-hours): add persistent app_bottom TUI banner (5fb1853)
- feat(peak-hours): add pure provider-level schedule library (419fc8d)
- feat(peak-hours): add toggle, revision-dated default schedules, schema arm, and sync materialization (2acf947)
- feat(peak-hours): synchronize GRACE graph, verification, and requirements projections (cfb8cf1)
- feat(publish): publish through a validated channel input with an explicit npm dist-tag (f33d386)
- feat(release): derive publish channel from version and mark rc releases pre-release (1b78336)
- feat(upgrade): resolve rc upgrades from the npm rc dist-tag (c6b3664)
- test(peak-hours): update canonical plugin count in CLI toggle coverage (fbb60a5)
- test(release): fix channel contradiction test to assert the exit path (2fc2190)
- fix(grace): sync analytics and branding MODULE_MAP blocks with actual symbols (3ec0f02)
- fix(peak-hours): describe the peak-hours schema arm in both schema surfaces (302d2a4)
v1.3.5
1.3.5 (2026-08-21)
Summary
Release 1.3.5 clarifies what vv-opencode offers and makes plan documents easier to work with by hand. The docs are restructured around an outcome-first pitch that reframes the package as an opinionated agentic development layer for OpenCode, adds a "You just talk to OpenCode normally" section showing how vv-controller picks the lightest trajectory for each request while explicit spec, plan, and execute skills take over only when the work needs them, and surfaces provider-neutral web tools in a new Why section. On the functional side, plan tasks and waves now carry their identity in unique element names (<TASK-T-NNN> and <WAVE-N>) instead of generic tags with child id/num elements, so long task blocks stay addressable and grep/sed extraction used by vv-plan and vv-execute remains exact without a separate query language; the plan template, skill format rules, plan-validation checks, and README grep examples are updated to match.
- docs(readme): reframe pitch as agentic layer and add natural-trajectory section (d197955)
- docs(readme): restructure around outcome-first pitch and runtime value (9e6910b)
- docs(readme): surface provider-neutral web tools in the Why section (c90ecf0)
- feat(skills): give plan tasks and waves unique element-name boundaries (8f52f0c)
v1.3.4
1.3.4 (2026-08-19)
Summary
Version 1.3.4 reworks the tool-history-compaction plugin to protect your active working context and make pruning recoverable. The previous call-count-based tail protection is replaced with an absolute recent-message window (protectRecentMessages, default 8) anchored by message recency time, so outputs inside the newest messages are never rewritten regardless of call count, output size, tool class, or parallel batching, even when OpenCode reorders messages before the transform hook. A protection-budget leak was also fixed: retained tools such as task, agent, websearch, and skill no longer consume the per-call protection budget, so older bash/read outputs stay protected in agent-heavy sessions. Additionally, pruning is now recoverable by default (savePrunedOutput): the full pruned output is persisted once per tool call under your XDG data home in the vvoc tool-output directory, and the prune marker embeds the saved path so the model can re-read the complete output instead of reconstructing it from head and tail fragments. Schema v3, sync materialization, and the README were updated to reflect the new configuration options.
- feat(tool-history-compaction): protect the recent message window and persist pruned outputs (b44eeeb)
v1.3.3
1.3.3 (2026-08-19)
Summary
In this release the TUI branding footer is upgraded to show a single combined version line in the sidebar — • OpenCode <version> · vvoc vX.Y.Z — replacing the previous standalone vvoc label in the bottom app bar. The new footer reads the OpenCode version from the running app, renders with the active theme colors, and deliberately wins the sidebar footer slot so it appears in a native-looking, always-visible location. This makes it easier for users to see at a glance which OpenCode and vvoc versions are active in a session.
- feat(tui): render combined OpenCode and vvoc versions in the sidebar footer (ea5aa66)