Skip to content

Commit dfd9f7d

Browse files
chore(release): 0.4.0
1 parent bcb3fe2 commit dfd9f7d

3 files changed

Lines changed: 46 additions & 18 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.3.0"
2+
".": "0.4.0"
33
}

CHANGELOG.md

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,50 @@
22

33
## [Unreleased]
44

5-
### Features
6-
7-
- `User ClaudeCodeSendComplete` autocmd, fired once per file when a send is accepted while Claude is connected, with `data = { file_path, start_line, end_line, context }` (lines 0-indexed). Lets you run arbitrary post-send logic — in particular, focus a Claude session running outside Neovim (`provider = "none"`/`"external"`), e.g. via `tmux select-pane`, which `focus_after_send` cannot do. ([#228](https://github.com/coder/claudecode.nvim/issues/228))
8-
- `:ClaudeCodeCloseAllDiffs` command to close pending Claude diffs at once (e.g. proposals orphaned by resolving them via Claude remote control). Diffs you have already accepted but whose file has not been written yet are left intact so saved edits are never discarded. ([#248](https://github.com/coder/claudecode.nvim/issues/248))
9-
- `:ClaudeCodeSendText {text}` command (and `require("claudecode.terminal").send_to_terminal(text, opts)` function) to send arbitrary text to the open Claude terminal as if typed at the prompt, submitting it by default. `:ClaudeCodeSendText!` inserts the text without submitting. Handy for scripting and keymaps; multi-line text is sent via bracketed paste. Works with the in-editor `native`/`snacks` providers only — `external`/`none` run Claude outside Neovim, where there is no pane to write to. ([#197](https://github.com/coder/claudecode.nvim/issues/197))
10-
11-
### Bug Fixes
12-
13-
- The Claude terminal now adds the loopback hosts (`localhost`, `127.0.0.1`, `::1`) to `no_proxy`/`NO_PROXY`, so a configured `http_proxy`/`all_proxy` no longer tunnels Claude's `ws://127.0.0.1` IDE connection and causes queued @ mentions to time out. Existing `no_proxy` exclusions are preserved. ([#70](https://github.com/coder/claudecode.nvim/issues/70))
14-
- `focus_after_send = true` no longer fails silently with `terminal.provider = "none"`/`"external"`: those providers run Claude outside Neovim, so focus cannot move there. A one-time warning is now emitted at setup pointing to the new `User ClaudeCodeSendComplete` autocmd, which you can hook to focus your own terminal. (`focus_after_send` still only auto-focuses the in-editor providers.) ([#228](https://github.com/coder/claudecode.nvim/issues/228))
15-
- Rejecting a Claude diff with `:q` (or `:close` / `<C-w>c` / closing the tab) now resolves it as rejected, matching the documented behavior. The proposed buffer is a scratch buffer that `:q` only hides, so the existing `BufDelete`/`BufUnload`/`BufWipeout` autocmds never fired; a `WinClosed` autocmd now handles window-close rejection. ([#238](https://github.com/coder/claudecode.nvim/issues/238))
16-
- Push quickly-made visual selections to Claude reliably. Selections made and released faster than the selection-tracking debounce were never broadcast, and any selection was wiped shortly after leaving visual mode when Claude runs in an external terminal (the `/ide` flow) — so single-line selections in particular often never reached Claude. Selections are now flushed synchronously on visual-mode exit (from the `'<`/`'>` marks) and persist until the cursor actually moves; a single-line linewise `V` made right after a charwise selection is also no longer mis-extracted to a single character. ([#246](https://github.com/coder/claudecode.nvim/issues/246))
17-
- Diffs opened via `openDiff` no longer linger forever when they are resolved outside this Neovim or their Claude session goes away. Pending diffs are now automatically closed when the client that opened them disconnects or the integration is stopped, and `closeAllDiffTabs` now also resolves/cleans the diff module's tracked state instead of only closing windows. ([#248](https://github.com/coder/claudecode.nvim/issues/248))
18-
- Show diffs when the Claude Code terminal is the only window (no other splits). Previously `openDiff` failed with "No suitable editor window found"; now a split is created to host the diff, matching the behavior of the `openFile` tool. ([#231](https://github.com/coder/claudecode.nvim/issues/231))
19-
- Fix the "climbing cursor" in the Snacks terminal: hiding and re-showing the Claude panel no longer leaves the cursor one row above the prompt (so typed text lands on the wrong line). The Snacks provider now hides/shows without destroying the window — floats are parked via `nvim_win_set_config({hide=...})` and splits are recreated like the native provider — which preserves the cursor anchor Claude re-renders against on focus-in. Splits are fixed on all supported Neovim versions; the float fix requires Neovim >= 0.10. ([#240](https://github.com/coder/claudecode.nvim/issues/240), [#183](https://github.com/coder/claudecode.nvim/issues/183))
20-
- Work around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes into the terminal across `vim.paste` phases, making Cmd+V appear to truncate content. Added a scoped, version-gated `vim.paste` shim controlled by `terminal.fix_streamed_paste` (`"auto"` by default; no-op on Neovim >= 0.12.2). ([#161](https://github.com/coder/claudecode.nvim/issues/161))
5+
## [0.4.0] - 2026-06-18
6+
7+
### Added
8+
9+
- `:checkhealth claudecode` health check that verifies Neovim version, `setup()`, Claude CLI resolution, terminal provider sanity, the WebSocket server/port, the IDE lock file, and live connection state ([#275](https://github.com/coder/claudecode.nvim/pull/275)).
10+
- `:ClaudeCodeSendText {text}` command and `require("claudecode.terminal").send_to_terminal(text, opts)` to send arbitrary text to the open Claude terminal as if typed at the prompt (submitting by default; `:ClaudeCodeSendText!` inserts without submitting). Multi-line text is sent via bracketed paste. Works with the in-editor `native`/`snacks` providers only ([#272](https://github.com/coder/claudecode.nvim/pull/272), [#197](https://github.com/coder/claudecode.nvim/issues/197)).
11+
- `:ClaudeCodeCloseAllDiffs` command to close all pending Claude diffs at once. Diffs you have already accepted but whose file has not been written yet are left intact ([#261](https://github.com/coder/claudecode.nvim/pull/261), [#248](https://github.com/coder/claudecode.nvim/issues/248)).
12+
- `User ClaudeCodeSendComplete` autocmd, fired once per file when a send is accepted while Claude is connected, with `data = { file_path, start_line, end_line, context }` (0-indexed). Lets you run post-send logic such as focusing a Claude session running outside Neovim (`provider = "none"`/`"external"`) ([#265](https://github.com/coder/claudecode.nvim/pull/265), [#228](https://github.com/coder/claudecode.nvim/issues/228)).
13+
- `User ClaudeCodeDiffOpened` / `ClaudeCodeDiffClosed` autocmds carrying diff metadata, so configs can react to diffs opening/closing (resize, relayout, statusline) without monkey-patching ([#270](https://github.com/coder/claudecode.nvim/pull/270)).
14+
- `terminal.diff_split_width_percentage` to set a separate terminal width while a diff is open (falls back to `split_width_percentage`), and `diff_opts.auto_resize_terminal` (default `true`) to opt out of plugin-managed terminal resizing entirely ([#270](https://github.com/coder/claudecode.nvim/pull/270)).
15+
- netrw file selection: `<leader>as` in netrw buffers adds the marked or cursor file(s) to Claude's context ([#62](https://github.com/coder/claudecode.nvim/pull/62), @makotodejima).
16+
- snacks.nvim picker support for `:ClaudeCodeTreeAdd` / `:ClaudeCodeSend`: with a snacks picker list focused, the selected/highlighted file(s) are added to Claude's context ([#269](https://github.com/coder/claudecode.nvim/pull/269), [#192](https://github.com/coder/claudecode.nvim/issues/192)).
17+
- Selection updates are now also sent on `BufEnter`, so switching buffers without moving the cursor still updates Claude's context ([#159](https://github.com/coder/claudecode.nvim/pull/159), @dannysu).
18+
19+
### Changed
20+
21+
- Modernized the `:ClaudeCodeSelectModel` picker: evergreen, version-free labels (`Claude Opus (Latest)`, `Claude Sonnet (Latest)`, `Claude Haiku (Latest)`), new `opus[1m]`/`sonnet[1m]` 1M-context variants, and a `Default (account recommended)` entry ([#256](https://github.com/coder/claudecode.nvim/pull/256)).
22+
- Hardened IDE auth-token handling: the WebSocket auth token is now generated from a cryptographically secure RNG, the lock file is written atomically with `0600` permissions, and the IDE directory is created with `0700` (previously world-readable) ([#259](https://github.com/coder/claudecode.nvim/pull/259)).
23+
- IDE tool responses now return grouped, URI-based diagnostics with editor-native ranges and severity names, and no longer advertise an unsupported resources capability ([#274](https://github.com/coder/claudecode.nvim/pull/274)).
24+
25+
### Fixed
26+
27+
- Legacy `diff_opts` aliases `vertical_split` and `open_in_current_tab` now apply correctly (e.g. `vertical_split = false` produces a horizontal layout instead of being ignored) ([#142](https://github.com/coder/claudecode.nvim/pull/142), @ddzero2c).
28+
- Waking a laptop from sleep no longer triggers false keepalive timeouts and spurious disconnects ([#141](https://github.com/coder/claudecode.nvim/pull/141), @bjulian5).
29+
- `getDiagnostics` now accepts a bare file path (not just a `file://` URI), fixing tool-call failures from recent Claude models ([#163](https://github.com/coder/claudecode.nvim/pull/163), @alvarosevilla95).
30+
- Quickly-made visual selections are now pushed to Claude reliably; selections are flushed synchronously on visual-mode exit and persist until the cursor moves, and a linewise `V` after a charwise selection is no longer mis-extracted to a single character ([#267](https://github.com/coder/claudecode.nvim/pull/267), [#246](https://github.com/coder/claudecode.nvim/issues/246)).
31+
- Selection-context fallback now matches the Claude buffer name as a substring, so a third-party terminal (`provider = "none"`) correctly skips sending selections ([#160](https://github.com/coder/claudecode.nvim/pull/160), @dannysu).
32+
- Rejecting a Claude diff with `:q` (or `:close`/`<C-w>c`/closing the tab) now resolves it as rejected via a `WinClosed` autocmd ([#266](https://github.com/coder/claudecode.nvim/pull/266)).
33+
- Diffs now open when the Claude terminal is the only window, creating a split instead of failing with "No suitable editor window found" ([#260](https://github.com/coder/claudecode.nvim/pull/260)).
34+
- Pending diffs are now auto-closed when the client that opened them disconnects or the integration stops, preventing diffs from lingering when resolved outside this Neovim ([#261](https://github.com/coder/claudecode.nvim/pull/261), [#248](https://github.com/coder/claudecode.nvim/issues/248)).
35+
- Plugin-created diff splits are now closed deterministically on cleanup, so accepting a diff no longer leaves stray splits behind ([#175](https://github.com/coder/claudecode.nvim/pull/175)).
36+
- A stranded tab is now closed when an `open_in_new_tab` diff setup errors ([#264](https://github.com/coder/claudecode.nvim/pull/264)).
37+
- `keep_terminal_focus = true` now works with floating Claude terminals (e.g. Snacks `position = "float"`) ([#178](https://github.com/coder/claudecode.nvim/pull/178)).
38+
- Diff preview no longer opens into a snacks.nvim picker/explorer window: both `snacks_picker_list` and `snacks_layout_box` are excluded from main editor window detection ([#165](https://github.com/coder/claudecode.nvim/pull/165), @tuannvm; [#255](https://github.com/coder/claudecode.nvim/pull/255)).
39+
- The Snacks terminal no longer "climbs" the cursor on hide/show toggle; the panel is parked/recreated without destroying its window (split fix on all versions; float fix requires Neovim >= 0.10) ([#271](https://github.com/coder/claudecode.nvim/pull/271), [#240](https://github.com/coder/claudecode.nvim/issues/240), [#183](https://github.com/coder/claudecode.nvim/issues/183)).
40+
- The Snacks provider now launches Claude via an argv list instead of a shell string, fixing `zsh: no matches found: opus[1m]` failures with 1M-context model aliases ([#256](https://github.com/coder/claudecode.nvim/pull/256)).
41+
- The Claude terminal now adds loopback hosts (`localhost`, `127.0.0.1`, `::1`) to `no_proxy`/`NO_PROXY`, so a configured proxy no longer tunnels Claude's `ws://127.0.0.1` IDE connection and times out @ mentions ([#268](https://github.com/coder/claudecode.nvim/pull/268), [#70](https://github.com/coder/claudecode.nvim/issues/70)).
42+
- Worked around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes into the terminal, making Cmd+V appear to truncate; controlled by `terminal.fix_streamed_paste` (`"auto"` by default, no-op on >= 0.12.2) ([#252](https://github.com/coder/claudecode.nvim/pull/252), [#161](https://github.com/coder/claudecode.nvim/issues/161)).
43+
- `focus_after_send = true` now emits a one-time warning under `provider = "none"`/`"external"` (which run Claude outside Neovim) instead of silently doing nothing ([#265](https://github.com/coder/claudecode.nvim/pull/265), [#228](https://github.com/coder/claudecode.nvim/issues/228)).
44+
- The WebSocket server now closes connections on malformed frames with the correct RFC 6455 close code instead of stalling on un-drainable buffered bytes ([#258](https://github.com/coder/claudecode.nvim/pull/258)).
45+
- The WebSocket server now retries port binding on `EADDRINUSE`, so parallel Neovim instances start on different ports instead of colliding ([#284](https://github.com/coder/claudecode.nvim/pull/284), [#283](https://github.com/coder/claudecode.nvim/issues/283)).
46+
- Client disconnect callbacks now fire on all teardown paths (EOF, read/protocol errors, CLOSE frames, keepalive timeouts), preventing phantom clients from accumulating ([#176](https://github.com/coder/claudecode.nvim/pull/176)).
47+
- Selection debounce timers are now stopped and closed correctly, fixing a libuv handle leak and stale callbacks ([#245](https://github.com/coder/claudecode.nvim/pull/245)).
48+
- Bumped the Haiku model alias to the current latest version ([#146](https://github.com/coder/claudecode.nvim/pull/146), @v3ceban).
2149

2250
## [0.3.0] - 2025-09-15
2351

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.0
1+
0.4.0

0 commit comments

Comments
 (0)