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

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

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 15, 2026 •

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-11-02

Added

  • :checkhealth claudecode health check that verifies Neovim version, setup(), the Claude CLI, terminal provider, the WebSocket server, the lock file, and live connection state (#275).
  • :ClaudeCodeSendText {text} command and require("claudecode.terminal").send_to_terminal(text, opts) to type arbitrary text into the open Claude pane (submits by default; :ClaudeCodeSendText! inserts without submitting). In-editor native/snacks providers only (#272, #197).
  • :ClaudeCodeCloseAllDiffs command to close all pending Claude diffs at once (#248, #261).
  • User ClaudeCodeSendComplete autocmd fired once per accepted send while Claude is connected, with data = { file_path, start_line, end_line, context } — enabling post-send logic such as focusing an external Claude session (#228, #265).
  • diff_opts.layout = "unified": a VS Code-style unified diff in a single buffer with interleaved added/deleted lines, as a compact alternative to "vertical"/"horizontal". Requires Neovim >= 0.9.0; highlight groups ClaudeCodeInlineDiffAdd/Delete/AddSign/DeleteSign are customizable (#195, #295).
  • diff_opts.auto_resize_terminal (default true) opt-out, terminal.diff_split_width_percentage for a separate terminal width while a diff is open, and User ClaudeCodeDiffOpened/ClaudeCodeDiffClosed lifecycle events (#270).
  • terminal.auto_insert option (default true): set to false to stay in Normal mode when focusing the Claude terminal, preserving scroll position (#233).
  • terminal.fix_streamed_paste option ("auto" by default) that works around a Neovim core bug (< 0.12.2) fragmenting large bracketed pastes into the terminal (#252).
  • netrw file selection for <leader>as, supporting marked files and the file under the cursor (#62).
  • :ClaudeCodeTreeAdd support in snacks.nvim pickers and Snacks.explorer() (#269, #192).
  • Opusplan model option; evergreen version-free model picker labels plus 1M-context (opus[1m]/sonnet[1m]) and default entries (ac60fda, #256).

Fixed

  • Hardened the IDE auth token to use a CSPRNG and wrote the lock file atomically with 0600 permissions in a 0700 directory (#259).
  • WebSocket server robustness: close malformed frames with the correct RFC 6455 status instead of stalling, join fragmented messages and validate UTF-8 per message, reject binary frames, send only valid UTF-8, and never repeat a client id within one process (#258, #395, #378, #390, #383, #329).
  • Retry port binding on EADDRINUSE so parallel Neovim instances each start on a free port (#284).
  • Detect system sleep/wake and reset keepalive timers to prevent false client disconnections (#141).
  • closeAllDiffTabs is now scoped to claudecode's own diffs and never touches diffview.nvim/fugitive/:diffsplit reviews or user buffers (#277, #290, #373).
  • Rejecting a diff with :q/:close/<C-w>c now resolves it as rejected (#266).
  • Auto-close pending diffs when the client that opened them disconnects or the integration stops (#248, #261).
  • Open diffs when the Claude terminal is the only window (#260), and keep openDiff/openFile out of diff and preview windows (#391, #384).
  • Legacy diff_opts.vertical_split/open_in_current_tab options now apply correctly (#142).
  • Numerous diff lifecycle, tab, and terminal-width restoration fixes for unified and new-tab diffs (#297, #394, #399, #403, #421, #429, #432).
  • openFile now selects the exact requested line/text range, honors preview, keeps your Visual mode, unsaved changes, focus, and window when it arrives mid-command, and validates line ranges (#353, #375, #382, #387, #370).
  • IDE diagnostics accept a bare file path without a file:// URI, and tool responses return grouped URI-based diagnostics with editor-native ranges and severity names (#163, #274).
  • Selection fixes: send updates on BufEnter, push quickly-made visual selections, track Select mode, count characters as Neovim does, and end charwise/blockwise selections on a whole character (#159, #267, #381, #388, #367).
  • Native terminal now owns only the buffer it started, cleans up failed starts, stops the Claude job on close, and emits a single error notice (#339, #349, #336, #345, #330).
  • Exclude loopback hosts from proxying so Claude's ws://127.0.0.1 IDE connection isn't tunneled (#268, #70).
  • Fix the Snacks "climbing cursor" on hide/show toggle (#271), fix a Snacks shell-glob launch bug with [1m] model aliases (#256), and handle $ in file paths for ClaudeCodeAdd/openFile (#286).
  • Prevent a crash with render-markdown.nvim when accepting a new-file diff (#224); keep structured error codes from coroutine tools (#338); bump Haiku to 4.5 (#146).

Changed

  • focus_after_send = true now emits a one-time warning under terminal.provider = "none"/"external" (which run Claude outside Neovim), pointing to the User ClaudeCodeSendComplete autocmd (#265).
  • Integration tests now also run on Neovim 0.8.0 (#369).

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.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 8 times, most recently from 9e9ac77 to 576d224 Compare June 22, 2026 14:46
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 3 times, most recently from 52c0c6e to 1346f88 Compare June 23, 2026 09:57
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 1346f88 to 1319d40 Compare June 23, 2026 10:01
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 1319d40 to 7c1f13e Compare June 23, 2026 10:53
gogongxt pushed a commit to gogongxt/claudecode.nvim that referenced this pull request Jun 24, 2026
)

## Summary

Renames the `diff_opts.layout = "inline"` option (added in coder#195, queued
for v0.4.0 via release-please coder#279) to **`"unified"`**, before it ships
in a tagged release. Tracked in coder#293.

[@wookayin pointed
out](coder#195 (comment))
that the shipped `"inline"` mode isn't a true "inline" diff in the VS
Code sense — it renders a unified diff in a separate `rightbelow vsplit`
pane, not an in-place virtual-text overlay in the same window. Naming it
`"inline"` now would force a breaking rename later, once we add the real
in-place overlay (the mode that most deserves the name `"inline"`).
Renaming is free now (not yet released) and a breaking change after coder#279
merges.

## What changed

- **Config value** `"inline"` → `"unified"`: validation + error message
(`config.lua`), the `ClaudeCodeDiffLayout` type alias (`types.lua`), all
four dispatch sites (`diff.lua`), and the stored `layout` value
(`diff_inline.lua`).
- **User-facing buffer name**: `<file> (inline diff)` → `<file> (unified
diff)`.
- **Docs**: README layout enum + label; a `CHANGELOG.md` `[Unreleased]`
entry for `layout = "unified"`.
- **Tests**: the accept test now expects `"unified"`; a new test asserts
the former `"inline"` is rejected.

## Decisions

- **No deprecated alias.** `"inline"` was never in a tagged release, so
there's no backward-compat obligation, and rejecting it cleanly reserves
the name for the future in-place overlay (coder#294). The validation error
names `'unified'`, so anyone tracking `main` is pointed at the new
value.
- **Internal names kept.** The `diff_inline.lua` module, its functions,
the `claudecode_inline_diff` buffer variable, and the
`ClaudeCodeInlineDiff*` highlight groups are unchanged — they describe
the inline-*style* rendering, not the layout value (coder#293 noted the
buffer var can stay). This keeps the diff small and low-risk.
- **coder#279 changelog** regenerates from commits via Communique on the next
push to `main`, so the v0.4.0 entry reflects "unified" automatically; I
did not hand-edit the bot branch.

## Validation

- `mise run all`: treefmt clean, luacheck **0/0**, **703/703** tests
pass (baseline 702 + the new rejection test).
- Headless Neovim smoke test: `layout = "unified"` accepted, `"inline"`
rejected (error names `'unified'`), `"vertical"` still works.

The true in-place overlay (the future `"inline"`) is tracked in coder#294.

Refs coder#293, coder#195, coder#82

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Thomas Kosiewski <tk@coder.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 7c1f13e to f7efec6 Compare June 25, 2026 17:39
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from f7efec6 to e323636 Compare October 24, 2026 09:21
MichaelPachec0 added a commit to MichaelPachec0/claudecode.nvim that referenced this pull request Oct 28, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 8 times, most recently from 10110db to 5f0b352 Compare October 31, 2026 19:16
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 28 times, most recently from 8cc0a9a to b285cc6 Compare November 1, 2026 18:37
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