Skip to content

chore(release): 0.4.0#279

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main
Open

chore(release): 0.4.0#279
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

Copy link
Copy Markdown

The next claudecode.nvim release. Merging this PR creates the release tag and GitHub Release, then starts Communique GitHub Release note generation.

[0.4.0] - 2026-06-15

Added

  • :checkhealth claudecode health check that verifies your setup end to end: Neovim version, setup() invocation, Claude CLI resolution and version, terminal provider sanity, WebSocket server/port, lock file presence, and live client connection state (#275).
  • :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 (#197, #272).
  • :ClaudeCodeCloseAllDiffs command to close all pending Claude diffs at once. Diffs already accepted but not yet written are preserved (#248, #261).
  • 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 }. Lets you run post-send logic such as focusing a Claude session running outside Neovim (#228, #265).
  • User ClaudeCodeDiffOpened / ClaudeCodeDiffClosed autocmds carrying a data payload, so configs can react to diffs opening and closing without monkey-patching internals (#270).
  • terminal.diff_split_width_percentage to set a distinct terminal width while a diff is open, and diff_opts.auto_resize_terminal (default true) to opt out of width changes entirely so you can own the layout (#270).
  • netrw file selection: <leader>as in a netrw buffer adds marked files (or the file under the cursor) to Claude's context (#62).
  • snacks.nvim picker support for :ClaudeCodeTreeAdd/:ClaudeCodeSend: with a snacks picker list focused, add the selected/highlighted file(s) to Claude's context (#192, #269).

Changed

  • Modernized the :ClaudeCodeSelectModel picker with evergreen, version-free labels (Claude Opus (Latest), Claude Sonnet (Latest), Claude Haiku (Latest)), added 1M-context variants (opus[1m], sonnet[1m]) and a Default (account recommended) entry (#256).

Fixed

  • Snacks launch failure: model aliases containing [ ] (the 1M variants) were passed to the shell and aborted with zsh: no matches found. The Snacks provider now launches Claude via an argv list with no shell interpretation (#256).
  • Legacy diff options vertical_split and open_in_current_tab were silently ignored due to merge order; they now map correctly to layout/open_in_new_tab (#142).
  • False keepalive disconnects after system sleep: client pong timestamps are reset on detecting a wake event so clients aren't dropped on resume (#141).
  • IDE response handling: getDiagnostics now returns grouped URI-based payloads with editor-native ranges and severity names; the server no longer advertises an unsupported resources capability; background file opens preserve focus and return target-buffer metadata (#274).
  • getDiagnostics no longer errors when Claude passes a bare file path instead of a file:// URI (#163).
  • Auth token is now generated from a CSPRNG (libuv//dev/urandom), the lock file is written atomically with mode 0600, and the IDE directory is created with mode 0700 (previously world-readable). Handshake auth comparison is now constant-time (#259).
  • Malformed WebSocket frames now close the connection with the proper RFC 6455 status code (1002/1007/1009) instead of wedging the connection and re-parsing bad bytes forever (#258, #257).
  • TCP disconnects now reliably fire on_disconnect for EOF, read errors, protocol errors, CLOSE frames, and keepalive timeouts, fixing phantom/stale client entries (#176, #170).
  • The Claude terminal now adds loopback hosts 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; existing exclusions are preserved (#70, #268).
  • Worked around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes, making Cmd+V appear to truncate content; controlled by terminal.fix_streamed_paste ("auto" by default) (#252).
  • Rejecting a diff with :q (or :close/<C-w>c/closing the tab) now resolves it as rejected via a new WinClosed handler (#266).
  • Quickly-made and single-line visual selections are now flushed synchronously on visual-mode exit and persist until the cursor moves, so they reliably reach Claude (#246, #267).
  • Selection context is now also sent on BufEnter so switching buffers updates Claude even without cursor movement (#159), and the provider = "none" fallback now matches the Claude terminal name as a substring (#160).
  • Selection debounce timers are now stopped and closed via the libuv timer API, fixing leaked handles and stale callbacks firing after being superseded (#245).
  • Pending diffs are now auto-closed when the client that opened them disconnects or the integration stops; closeAllDiffTabs also resolves the diff module's tracked state (#248, #261).
  • Diffs now open when the Claude terminal is the only window (a split is created) instead of failing with "No suitable editor window found" (#231, #260).
  • The Snacks Explorer sidebar (snacks_layout_box) and snacks pickers (snacks_picker_list) are now excluded from main-editor-window detection, so diffs no longer open into or corrupt the explorer (#236, #255, #165).
  • diff_opts.keep_terminal_focus = true now works for floating Claude terminals (#150, #178).
  • Plugin-created diff splits are now closed deterministically on cleanup, and stranded tabs from failed open_in_new_tab diff setup are closed (#155, #175, #264).
  • The Snacks terminal "climbing cursor" on hide/show toggle is fixed; the provider now hides/shows without destroying the window. Splits are fixed on all supported Neovim versions; the float fix requires Neovim >= 0.10 (#240, #183, #271).
  • focus_after_send = true now emits a one-time warning at setup with the none/external providers (which run Claude outside Neovim and cannot be focused), pointing to the User ClaudeCodeSendComplete autocmd (#228, #265).

Documentation

  • The recommended lazy.nvim spec now declares cmd = { ... } so :ClaudeCode loads on demand from a cold start (#239, #263).
  • Added IDE launch instructions for provider = "none" (#157).

Maintained by the release-please workflow. CHANGELOG.md and the release PR body are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants