@@ -4,47 +4,10 @@ All notable changes to this project will be documented in this file.
44
55## [ Unreleased]
66
7- - ** Native diff viewer for Cursor edits (blocks mode).** A Cursor ` edit ` tool
8- call is now surfaced under opencode's registered ` edit ` tool with its real
9- unified diff in ` metadata.diff ` , so opencode renders its built-in diff viewer
10- instead of a generic block. The required ` oldString ` /` newString ` (which Cursor
11- does not expose) are reconstructed from the diff; the call is provider-executed
12- so they are never applied to disk. Any edit without a usable diff (errors,
13- unexpected shapes, or a host without a registered ` edit ` tool) falls back to a
14- safe ` cursor_edit ` block. Other Cursor tools (shell/read/mcp/…) remain
15- prefixed ` cursor_* ` blocks.
16- - ** ` toolDisplay ` now defaults to ` "blocks" ` .** Cursor's internal tool activity
17- renders as structured, provider-executed tool blocks out of the box (was
18- ` "reasoning" ` ). ` "reasoning" ` remains available as the fallback for
19- older/non-V3 opencode hosts via `provider.cursor.options.toolDisplay:
20- "reasoning"` ; ` "blocks"` requires a V3-native host (opencode 1.16+).
21- - ` 0.1.0-rc.2 ` — pre-release on the npm ` next ` dist-tag. Fixes found while
22- validating rc.1 against opencode 1.16.2:
23- - ** Plugin now loads when installed by package name.** Added the
24- ` exports["./server"] ` entry opencode uses to resolve a plugin's entrypoint;
25- rc.1 exposed the plugin only at ` ./plugin ` , which opencode does not read, so
26- the package installed but registered no hooks (no provider, no models).
27- - ** Self-heal the ` sqlite3 ` native binding.** opencode installs plugins with
28- Bun, which skips sqlite3's install script, so ` @cursor/sdk ` 's
29- ` require("sqlite3") ` failed with "Could not locate the bindings file". The
30- plugin now runs sqlite3's ` prebuild-install -r napi ` under the system Node
31- before loading the SDK (once per process, never throws).
32- - ** Stream ordering.** The final answer no longer renders above the reasoning
33- blocks that preceded it — the open text part is closed when reasoning
34- resumes and each resume opens a fresh text part.
35- - ** Model variants reach the picker.** Variants are seeded on the
36- config-injected models (opencode discards the ` provider.models() ` hook for
37- providers outside its models.dev catalog). Variant naming reworked against
38- the real catalog: boolean params (e.g. ` thinking ` ) collapse to one
39- param-named variant instead of literal ` true ` /` false ` ; enum params key by
40- value. The synthetic ` plan ` variant was removed.
41- - ** Plan agent → Cursor plan mode.** opencode's plan agent (` Tab ` ) is mapped
42- to Cursor's plan mode via the ` chat.params ` hook; an explicit variant/option
43- mode still wins.
44- - ` 0.1.0-rc.1 ` — first pre-release of the 0.1.0 surface below, published to the
45- npm ` next ` dist-tag for validation ahead of the stable ` 0.1.0 ` .
7+ ## [ 0.1.0] — 2026-06-10
468
47- ## [ 0.1.0] — unreleased
9+ > Pre-releases: ` 0.1.0-rc.1 ` and ` 0.1.0-rc.2 ` were published to the npm ` next `
10+ > dist-tag for validation ahead of this stable release.
4811
4912Initial public release. A complete opencode integration for Cursor built on the
5013official ` @cursor/sdk ` : a streaming chat provider, an auth/config/model plugin,
@@ -65,11 +28,16 @@ and a permission-gated delegation tool surface.
6528 session via ` Agent.resume() ` across turns, with automatic fallback to a fresh
6629 agent. A run wedged by a crashed/duplicate process is recovered by retrying
6730 the send once with the SDK's ` local.force ` escape hatch.
31+ - ** Native diff viewer for Cursor edits (blocks mode).** A Cursor ` edit ` tool
32+ call is now surfaced under opencode's registered ` edit ` tool with its real
33+ unified diff in ` metadata.diff ` , so opencode renders its built-in diff viewer
34+ instead of a generic block. The required ` oldString ` /` newString ` (which Cursor
35+ does not expose) are reconstructed from the diff; the call is provider-executed
36+ so they are never applied to disk. Any edit without a usable diff (errors,
37+ unexpected shapes, or a host without a registered ` edit ` tool) falls back to a
38+ safe ` cursor_edit ` block. Other Cursor tools (shell/read/mcp/…) remain
39+ prefixed ` cursor_* ` blocks.
6840- ** ` toolDisplay ` provider option** (` "blocks" ` default | ` "reasoning" ` ):
69- - ` "reasoning" ` renders Cursor's internal tool activity (including the real
70- MCP tool name) as concise ` [tool] … ` reasoning lines. Always safe — tool
71- calls never cross opencode's tool-execution boundary; the fallback for
72- older/non-V3 hosts.
7341 - ` "blocks" ` (default) emits structured, provider-executed ** dynamic** ` tool-call ` /
7442 ` tool-result ` parts so opencode renders native tool blocks. Names are
7543 ` cursor_ ` -prefixed and sanitized (` shell ` → ` cursor_shell ` ,
@@ -81,6 +49,10 @@ and a permission-gated delegation tool surface.
8149 errored/cancelled mid-tool) is closed with a synthetic error result so the
8250 block never dangles as "Tool execution aborted", and a run that ends with
8351 status ` error ` surfaces the failure instead of finishing silently.
52+ - ` "reasoning" ` renders Cursor's internal tool activity (including the real
53+ MCP tool name) as concise ` [tool] … ` reasoning lines. Always safe — tool
54+ calls never cross opencode's tool-execution boundary; the fallback for
55+ older/non-V3 hosts (` provider.cursor.options.toolDisplay: "reasoning" ` ).
8456
8557### Node sidecar (Bun compatibility)
8658
0 commit comments