cursor-opencode-provider 0.8.1 → 0.8.3
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 +95 -0
- package/README.md +204 -37
- package/SECURITY.md +20 -8
- package/dist/activity.d.ts +73 -1
- package/dist/activity.js +231 -5
- package/dist/agent-url.js +37 -9
- package/dist/auth-renewal.d.ts +1 -1
- package/dist/auth-renewal.js +58 -26
- package/dist/billing.d.ts +105 -0
- package/dist/billing.js +212 -0
- package/dist/classic-tool-results.d.ts +1 -0
- package/dist/classic-tool-results.js +42 -0
- package/dist/context/build.d.ts +1 -0
- package/dist/context/build.js +32 -5
- package/dist/context/env.js +27 -3
- package/dist/context/epoch.js +9 -5
- package/dist/context/git.d.ts +5 -2
- package/dist/context/git.js +17 -7
- package/dist/context/paths.d.ts +1 -1
- package/dist/context/paths.js +7 -4
- package/dist/debug.js +13 -2
- package/dist/early-tool-rows.d.ts +60 -0
- package/dist/early-tool-rows.js +96 -0
- package/dist/errors.d.ts +49 -7
- package/dist/errors.js +163 -8
- package/dist/host-interrupt.d.ts +12 -0
- package/dist/host-interrupt.js +18 -0
- package/dist/host-steer.d.ts +71 -0
- package/dist/host-steer.js +232 -0
- package/dist/image-input.js +4 -3
- package/dist/index.d.ts +2 -2
- package/dist/language-model.d.ts +114 -23
- package/dist/language-model.js +2290 -469
- package/dist/lost-request.d.ts +39 -0
- package/dist/lost-request.js +111 -0
- package/dist/model-config.d.ts +3 -1
- package/dist/model-config.js +50 -29
- package/dist/models.d.ts +26 -3
- package/dist/models.js +101 -45
- package/dist/opencode2/tool-results.d.ts +18 -0
- package/dist/opencode2/tool-results.js +66 -0
- package/dist/plugin-opencode2.js +185 -25
- package/dist/plugin.js +28 -5
- package/dist/pricing-data.d.ts +26 -2
- package/dist/pricing-data.js +26 -2
- package/dist/pricing.d.ts +1 -1
- package/dist/pricing.js +7 -4
- package/dist/process-shared.d.ts +14 -0
- package/dist/process-shared.js +18 -0
- package/dist/protocol/apply-patch.d.ts +25 -13
- package/dist/protocol/apply-patch.js +79 -30
- package/dist/protocol/blob-store.d.ts +5 -1
- package/dist/protocol/blob-store.js +10 -6
- package/dist/protocol/client-version.js +6 -4
- package/dist/protocol/conversation-cache-header.d.ts +23 -0
- package/dist/protocol/conversation-cache-header.js +149 -0
- package/dist/protocol/conversation-persistence.d.ts +27 -1
- package/dist/protocol/conversation-persistence.js +628 -126
- package/dist/protocol/conversation-state.d.ts +8 -1
- package/dist/protocol/conversation-state.js +28 -7
- package/dist/protocol/host-notes.d.ts +31 -0
- package/dist/protocol/host-notes.js +85 -0
- package/dist/protocol/messages.js +91 -8
- package/dist/protocol/request.d.ts +35 -19
- package/dist/protocol/request.js +53 -28
- package/dist/protocol/sent-history-images.d.ts +49 -0
- package/dist/protocol/sent-history-images.js +102 -0
- package/dist/protocol/tool-call-bridge.d.ts +2 -0
- package/dist/protocol/tool-call-bridge.js +10 -0
- package/dist/protocol/tools.d.ts +74 -8
- package/dist/protocol/tools.js +431 -141
- package/dist/protocol/turn-provenance.d.ts +19 -4
- package/dist/protocol/turn-provenance.js +77 -20
- package/dist/replay-safety.d.ts +16 -4
- package/dist/replay-safety.js +34 -25
- package/dist/retry-budget.d.ts +21 -0
- package/dist/retry-budget.js +94 -0
- package/dist/runtime-files.d.ts +23 -0
- package/dist/runtime-files.js +581 -0
- package/dist/session.d.ts +94 -9
- package/dist/session.js +153 -34
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +1 -1
- package/dist/shell-timeout.d.ts +54 -10
- package/dist/shell-timeout.js +362 -92
- package/dist/stream-write.d.ts +20 -0
- package/dist/stream-write.js +87 -0
- package/dist/terminal-runner.d.ts +15 -0
- package/dist/terminal-runner.js +528 -0
- package/dist/transport/connect.d.ts +8 -1
- package/dist/transport/connect.js +103 -23
- package/dist/usage.d.ts +37 -17
- package/dist/usage.js +63 -29
- package/package.json +3 -2
- package/dist/protocol/thinking.d.ts +0 -15
- package/dist/protocol/thinking.js +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,101 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.8.3] - 2026-10-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Muse Wonder pricing, context, and capability metadata from Cursor's model docs
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- A Cursor Task with attached files hands the subagent exact file paths to open itself, keeps Cursor's description, and avoids extra parent reads, including runtime metadata attachments; unstatable attachments report failure ([#82](https://github.com/oakimov/cursor-opencode-provider/issues/82), based on a fix by [@nkoynov](https://github.com/nkoynov))
|
|
14
|
+
- Shell results preserve whitespace when removing internal wrapper markers, retain partial output on stream failures, and keep successful timeout-shaped output unchanged in both native host projections ([#98](https://github.com/oakimov/cursor-opencode-provider/pull/98))
|
|
15
|
+
- Like Cursor CLI, a shell call that fails in OpenCode, such as one in a missing working directory, reaches Cursor once as stderr instead of as both stdout and stderr, in streamed and unary shell results ([#101](https://github.com/oakimov/cursor-opencode-provider/issues/101), reported by [@nkoynov](https://github.com/nkoynov))
|
|
16
|
+
- Shell output reaches the model exactly as the command printed it, as with Cursor CLI. Lines such as branch names, `#!/bin/sh` or `PREFIX=/usr/local` were prefixed with the workspace path, and relative paths printed after a `cd` pointed at the wrong directory ([#96](https://github.com/oakimov/cursor-opencode-provider/issues/96), based on [#54](https://github.com/oakimov/cursor-opencode-provider/pull/54) by [@nkoynov](https://github.com/nkoynov))
|
|
17
|
+
- After a restart, a turn that resumes a saved conversation no longer attaches every image in the session's history again, and an image you attach is not sent again as history on the next turn ([#78](https://github.com/oakimov/cursor-opencode-provider/pull/78) by [@nkoynov](https://github.com/nkoynov), [#75](https://github.com/oakimov/cursor-opencode-provider/issues/75))
|
|
18
|
+
- On OpenCode 1.x, GPT edits keep existing CRLF line endings even when Cursor sends the replacement as LF ([#81](https://github.com/oakimov/cursor-opencode-provider/pull/81) by [@nkoynov](https://github.com/nkoynov))
|
|
19
|
+
- Patch conversions preserve blank lines and reject paths or file content they cannot preserve exactly
|
|
20
|
+
- On OpenCode 1.x and 2, file writes and edits use the current turn's permitted tools after a model switch; OpenCode 2 GPT models use `patch` instead of first failing on `write` ([#81](https://github.com/oakimov/cursor-opencode-provider/pull/81) by [@nkoynov](https://github.com/nkoynov), [#80](https://github.com/oakimov/cursor-opencode-provider/issues/80))
|
|
21
|
+
- On OpenCode 2, Stop stops the Cursor Run instead of leaving it generating, or waiting for a tool result, until your next message ([#58](https://github.com/oakimov/cursor-opencode-provider/pull/58) by [@nkoynov](https://github.com/nkoynov))
|
|
22
|
+
- A Run whose stream is cancelled mid-generation, as OpenCode 1.x does on Stop, is cancelled at Cursor so the next message resumes from where it stopped, and a tool result Cursor has withdrawn is no longer sent back ([#58](https://github.com/oakimov/cursor-opencode-provider/pull/58) by [@nkoynov](https://github.com/nkoynov))
|
|
23
|
+
- A turn stopped mid-step keeps its Cursor conversation and prompt cache at the next message, also after a restart ([#58](https://github.com/oakimov/cursor-opencode-provider/pull/58) by [@nkoynov](https://github.com/nkoynov), [#74](https://github.com/oakimov/cursor-opencode-provider/issues/74))
|
|
24
|
+
- On OpenCode 2, plain-text steers without files or skills can reach Cursor during a background-shell wait; queued messages are preserved after Stop and mixed tool continuations, and answered copies are deduplicated across restarts and retries while preserving later identical requests and neighboring attachments ([#57](https://github.com/oakimov/cursor-opencode-provider/pull/57) by [@nkoynov](https://github.com/nkoynov))
|
|
25
|
+
- On OpenCode 2, a steer that Cursor took after tool results is no longer sent twice when its Run drops and cannot be recovered; the retried step rebuilds from host history ([#92](https://github.com/oakimov/cursor-opencode-provider/pull/92) by [@nkoynov](https://github.com/nkoynov))
|
|
26
|
+
- Large file writes stay alive while Cursor is composing them and sending frames; like Cursor CLI, an active Run with no pending host work now retries after 30 seconds of complete silence ([#66](https://github.com/oakimov/cursor-opencode-provider/issues/66))
|
|
27
|
+
- Long-running tools keep their Cursor Run alive with the same exec heartbeats Cursor CLI sends
|
|
28
|
+
- Errors show Cursor's own explanation (for example "Request blocked by Anthropic …"), and a request Cursor marks as not retryable is no longer retried by OpenCode (OpenCode 2 sent it 11 times in testing; OpenCode 1.x resent a used-up usage limit five more times because of its message wording)
|
|
29
|
+
- Like Cursor CLI, errors that need your action (usage or rate limits, sign-in, pricing, API key, outdated client), a bare `permission_denied`, and authentication failures, including those before a Run opens, end the turn instead of being retried; on OpenCode 1.x this also covers final `internal`/`unknown` errors. Final Cursor details take precedence over token renewal ([#97](https://github.com/oakimov/cursor-opencode-provider/pull/97))
|
|
30
|
+
- Once the provider spends its retry budget, or cannot replay a Run without repeating a tool call or other side effect, OpenCode no longer starts another retry loop ([#97](https://github.com/oakimov/cursor-opencode-provider/pull/97))
|
|
31
|
+
- Like Cursor CLI, a Run that drops or stalls after showing only text or reasoning, before Cursor saved a checkpoint, is retried by OpenCode instead of ending the turn, and the request reaches Cursor in that retry instead of with your next message. A retry after a checkpoint resumes the turn's latest checkpoint, and two resumes that save nothing end the turn ([#100](https://github.com/oakimov/cursor-opencode-provider/issues/100), reported by [@nkoynov](https://github.com/nkoynov))
|
|
32
|
+
- Retry counts now follow Cursor CLI: up to 10 transport retries (including streams that end without `turn_ended`) and 3 server retries per user turn, shared across checkpoints and OpenCode retries, including OpenCode 2's interruption notices with appended host reminders. `CURSOR_ENDLESS_RETRIES=1` or `true` bypasses count limits while preserving replay guards and the no-progress and stall cutoffs ([#103](https://github.com/oakimov/cursor-opencode-provider/pull/103))
|
|
33
|
+
- A dropped or stalled Run with an unfinished tool display row can be retried when no exec or started tool lifecycle arrived; the row closes without executing a tool ([#103](https://github.com/oakimov/cursor-opencode-provider/pull/103))
|
|
34
|
+
- Tool recovery accepts checkpoints received while a completed result drains, and retains completed results across resumed Runs even when exec IDs restart ([#103](https://github.com/oakimov/cursor-opencode-provider/pull/103))
|
|
35
|
+
- Interrupted Runs retain their checkpoint across credential renewal, including a rejected login on an untouched resumed attempt. A drop immediately after completed tools can recover from complete host history before new output, without resuming a checkpoint predating their results. Other stateful activity remains a replay barrier. Follow-ups accept checkpoints received while opening the new Run. An ambiguous replacement upload ends the turn instead of retrying through an older checkpoint, including in endless mode ([#103](https://github.com/oakimov/cursor-opencode-provider/pull/103))
|
|
36
|
+
- On macOS, a shell command that printed nothing before being moved to the background no longer reports `head: illegal byte count -- 0`
|
|
37
|
+
- A tool that is still running no longer lets its Cursor Run expire at the inactivity limit. The Run stays open until the tool finishes, for up to four hours from when that tool started
|
|
38
|
+
- An edit Cursor starts announcing shows its tool row while the arguments are still streaming. If that call never runs, the row closes instead of being left for the host to execute. Edits of files outside the workspace, or of files the provider cannot read, open no row before OpenCode's `read` of that file, and an edit of an empty file shows its `write` row, so neither leaves a failed edit row behind. When the call still runs as a different tool, such as a rewrite with unchanged content that stays a `write`, the row completes and names that tool instead of reporting a failure ([#73](https://github.com/oakimov/cursor-opencode-provider/issues/73), [#106](https://github.com/oakimov/cursor-opencode-provider/issues/106), based on a fix by [@nkoynov](https://github.com/nkoynov))
|
|
39
|
+
- A message Cursor never checkpointed is sent again ahead of the next message on the same conversation. Stopping the turn, or a rebuild from the host's history, drops it. It also survives an OpenCode restart after the failed turn, and repeated failed retries no longer add the same interruption note again each time ([#66](https://github.com/oakimov/cursor-opencode-provider/issues/66))
|
|
40
|
+
- On OpenCode 2, a title or summary request sent while a tool is still running no longer cancels the Cursor Run waiting on that tool
|
|
41
|
+
- While a tool runs, the provider answers Cursor's blob requests and stop requests at once, as Cursor CLI does, instead of after the tool finishes
|
|
42
|
+
- A large request, such as the first one after a restart in a session with screenshots, no longer fails with "backpressure drain failed" when it takes more than 5 s to upload; stopping a turn also cancels initial, tool-result, and replacement uploads at once ([#75](https://github.com/oakimov/cursor-opencode-provider/issues/75), based on [#77](https://github.com/oakimov/cursor-opencode-provider/pull/77) by [@nkoynov](https://github.com/nkoynov))
|
|
43
|
+
- A headless process now exits after its last Cursor Run instead of hanging on the idle cached HTTP/2 connection ([#88](https://github.com/oakimov/cursor-opencode-provider/pull/88) by [@willowite](https://github.com/willowite), [#87](https://github.com/oakimov/cursor-opencode-provider/issues/87))
|
|
44
|
+
- A new Run no longer fails at its start with `NGHTTP2_ENHANCE_YOUR_CALM` while other Runs on the same connection are still uploading large requests, and on Node a single large request no longer fails the same way on a slow uplink ([#76](https://github.com/oakimov/cursor-opencode-provider/issues/76), based on [#79](https://github.com/oakimov/cursor-opencode-provider/pull/79) by [@nkoynov](https://github.com/nkoynov))
|
|
45
|
+
- Unsupported effort hints keep an advertised default tuple, and model discovery and explicit selections reject duplicate parameter ids ([#84](https://github.com/oakimov/cursor-opencode-provider/pull/84) by [@willowite](https://github.com/willowite))
|
|
46
|
+
- Synthetic context model entries retain Cursor's declared default effort when the default is a Fast variant or belongs to another max tier ([#86](https://github.com/oakimov/cursor-opencode-provider/pull/86) by [@willowite](https://github.com/willowite))
|
|
47
|
+
- Grok 4.7, 4.6 and 4.5 now run Cursor's declared default level (High) when no reasoning effort is configured; before, they ran at the lowest level because Cursor's default is a Fast variant that the resolver skips ([#86](https://github.com/oakimov/cursor-opencode-provider/pull/86) by [@willowite](https://github.com/willowite))
|
|
48
|
+
- A configured reasoning effort now reaches models whose Cursor parameter is `reasoning_effort` (Grok 4.7, Gemini 3.8 Flash, Gemini 4 Argon, Claude Sonnet 5.5 and Haiku 5.5); before, only models with an `effort` or `reasoning` parameter honored it and the others always ran Cursor's default variant ([#84](https://github.com/oakimov/cursor-opencode-provider/pull/84) by [@willowite](https://github.com/willowite))
|
|
49
|
+
- Grok 4.7's 500k variants run in max mode instead of failing with `Cursor API error (code=not_found)`; max mode now follows the max-mode flag Cursor sets on each variant, as Cursor CLI does, instead of only a 1m context. A `maxMode` option without a picked variant lands on the model's declared max default even when Cursor declares a Fast variant (Grok 4.7 500k High, GPT-5.2 High). The model list is fetched again once after upgrading ([#67](https://github.com/oakimov/cursor-opencode-provider/issues/67))
|
|
50
|
+
- Grok 4.7's 500k variants have separate `-500k` and `-500k-fast` model entries with matching context limits and pricing ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95))
|
|
51
|
+
- Effort hints stay in the requested context tier and Fast-only max tiers remain selectable ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95))
|
|
52
|
+
- Models Cursor reports as not supporting non-max mode run every variant in max mode, as Cursor CLI does ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95))
|
|
53
|
+
- A configured reasoning effort changes only the effort of Cursor's default variant; Claude models with a thinking parameter no longer switch to their non-thinking variant ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95))
|
|
54
|
+
- Unmarked 1M variants retain their max-mode fallback after model discovery and cache reload; explicit non-max markers remain authoritative ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95))
|
|
55
|
+
- Saved 500k variant selections on base and Fast model entries remain available after upgrading; dedicated 500k entries still provide the full host context budget ([#95](https://github.com/oakimov/cursor-opencode-provider/pull/95), reported by [@nkoynov](https://github.com/nkoynov))
|
|
56
|
+
- With a long OpenCode cache path, Cursor's project folder (agent tools, terminals, generated assets) stays inside the cache's `projects` directory instead of being created next to the cache directory; project folders that already worked keep their names ([#102](https://github.com/oakimov/cursor-opencode-provider/issues/102), reported by [@nkoynov](https://github.com/nkoynov))
|
|
57
|
+
|
|
58
|
+
## [0.8.2] - 2026-10-15
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- Gemini 4 Argon pricing, context, and capability metadata from Cursor's model docs
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- A new session runs workspace discovery (`git status`) once instead of separately for its title and its first turn ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49))
|
|
67
|
+
- OpenCode 2 with several projects open renews a Cursor login and looks up its agent host once per process instead of once per project ([#70](https://github.com/oakimov/cursor-opencode-provider/pull/70))
|
|
68
|
+
- Debug log: `finish:` and usage-validation counters are labelled by source (`raw*`, `occupancy*`, `est*`), `rawReadVsPriorContext` is shown as a multiple (`3.00x`), and cache diagnoses say why a Run started cold (`coldReason`) ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49))
|
|
69
|
+
- Pull request reviews follow the repository review rubric (`docs/review-rules.md`), including blocker checks for secrets, entrypoints, provider boundary, and protocol evidence
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- Background shells write their output as it arrives, and their real exit status, to the terminal file Cursor polls, including after cancellation, a hard timeout or a killed supervisor ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov), [#48](https://github.com/oakimov/cursor-opencode-provider/issues/48))
|
|
74
|
+
- Shell commands that finish inside their foreground window report their real exit code ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
75
|
+
- A shell command that reaches its hard timeout is reported as timed out, not as a background job, even while it is still being stopped ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
76
|
+
- Shell output that happens to look like the provider's result lines no longer changes the reported outcome ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
77
|
+
- Cursor's shell commands use OpenCode's configured shell instead of sometimes falling back to `$SHELL` ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
78
|
+
- On OpenCode 2, shell commands started with OpenCode's own `background` option stay OpenCode background jobs, and their completion notice continues the Cursor turn without running the command again ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
79
|
+
- On OpenCode 2, identical shell commands started at the same time no longer take each other's background handling ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
80
|
+
- Cursor's tool-catalog files and terminal polling no longer trigger file or directory approval prompts ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
81
|
+
- On OpenCode 2, denied or failed reads, writes, deletes and shell commands reach Cursor as failures instead of successes ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov), [#63](https://github.com/oakimov/cursor-opencode-provider/issues/63))
|
|
82
|
+
- Reads Cursor sends through MCP reach OpenCode's `read` tool for directories and missing paths, with its permission prompt, instead of failing ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
83
|
+
- A new message after you reject or interrupt a tool keeps the Cursor conversation when Cursor confirms the cancellation, and otherwise rebuilds it from OpenCode history instead of reusing a stale checkpoint ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov))
|
|
84
|
+
- Cursor is told where past chats live only when `CURSOR_AGENT_TRANSCRIPTS_FOLDER` points to an existing directory ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51) by [@nkoynov](https://github.com/nkoynov), [#69](https://github.com/oakimov/cursor-opencode-provider/issues/69))
|
|
85
|
+
- On OpenCode 1.x, a shell command that timed out still reaches Cursor as timed out when its result is replayed from history, such as after a restart ([#51](https://github.com/oakimov/cursor-opencode-provider/pull/51))
|
|
86
|
+
- Instruction and skill updates OpenCode adds after a tool result, such as a nested `AGENTS.md` picked up by a read, reach the model in the same turn instead of leaking into the read's content or being dropped; an update Cursor does not take is sent with the next message ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49) by [@nkoynov](https://github.com/nkoynov))
|
|
87
|
+
- On OpenCode 2, a nested `AGENTS.md` loaded mid-step no longer restarts the Cursor turn, and updates added between messages, such as MCP server instructions, are no longer dropped ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49) by [@nkoynov](https://github.com/nkoynov))
|
|
88
|
+
- On a slow or broken connection, tool results and the reads the provider answers itself are no longer dropped, sent twice or replayed half-written ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49) by [@nkoynov](https://github.com/nkoynov))
|
|
89
|
+
- A rebuilt Cursor conversation (after compaction, an interrupted turn, a restart without saved state, or a return from another model) keeps your `AGENTS.md`, skills and subagents instead of losing them for the rest of the session ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49))
|
|
90
|
+
- A tool waiting on a permission or question prompt keeps its Cursor turn however long you take to answer, instead of losing it after 10 minutes ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49))
|
|
91
|
+
- A `git status` that fails or times out is reported to Cursor as incomplete instead of as a clean working tree ([#49](https://github.com/oakimov/cursor-opencode-provider/pull/49))
|
|
92
|
+
- The first Cursor request after a restart no longer waits for every saved conversation to be decompressed ([#68](https://github.com/oakimov/cursor-opencode-provider/issues/68))
|
|
93
|
+
- Saved conversations expire on a long-running server without a restart, including snapshots in an older cache format and files left by an interrupted save ([#72](https://github.com/oakimov/cursor-opencode-provider/pull/72))
|
|
94
|
+
- Saved and restored conversations no longer keep a second copy of their state in memory for the life of the process ([#72](https://github.com/oakimov/cursor-opencode-provider/pull/72))
|
|
95
|
+
- On OpenCode 2, new Runs use the current Cursor login even when OpenCode's generic loader set up the SDK first ([#70](https://github.com/oakimov/cursor-opencode-provider/pull/70))
|
|
96
|
+
- A rejected Cursor login stays rejected between renewal attempts, unusable renewal responses back off, and a forced renewal uses its new token even when the expiry is unchanged ([#70](https://github.com/oakimov/cursor-opencode-provider/pull/70))
|
|
97
|
+
- Session cost on OpenCode 1.x and 2 follows Cursor's billing: an estimate during the turn, reconciled at Cursor's published rates when it ends (OpenCode 1.x showed $0, and OpenCode 2 billed every tool step as a new prompt) ([#71](https://github.com/oakimov/cursor-opencode-provider/pull/71))
|
|
98
|
+
- The debug log's usage validation no longer counts the footer's output token twice, and reports a mismatch when its total differs from what was sent ([#71](https://github.com/oakimov/cursor-opencode-provider/pull/71))
|
|
99
|
+
|
|
5
100
|
## [0.8.1] - 2026-10-08
|
|
6
101
|
|
|
7
102
|
### Added
|