Skip to content

chore(release): 0.4.0 - #279

Merged
ThomasK33 merged 3 commits into
mainfrom
release-please--branches--main
Nov 9, 2026
Merged

ThomasK33 merged 3 commits into
mainfrom
release-please--branches--main

Conversation

@github-actions

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

Copy link
Copy Markdown
Contributor

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-09

Added

  • :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)
  • :checkhealth claudecode health check that verifies Neovim version, setup(), the Claude CLI, terminal provider, WebSocket server, lock file, and live connection state. (#275)
  • :ClaudeCodeCloseAllDiffs command to close pending Claude diffs at once. A diff accepted with :w closes once the file holds the accepted text; otherwise the accepted text is put into the buffer as unsaved changes for :w/:e! so edits are never discarded. (#248, #261)
  • diff_opts.layout = "unified": a VS Code-style unified diff rendered in a single buffer with interleaved deleted/added lines, as a compact alternative to "vertical"/"horizontal". Documented to require Neovim >= 0.9.0. Customizable via the ClaudeCodeInlineDiffAdd/Delete/AddSign/DeleteSign highlight groups. (#195, #295, #297)
  • 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). Enables post-send logic such as focusing a Claude session running outside Neovim. (#228, #265)
  • User ClaudeCodeDiffOpened / ClaudeCodeDiffClosed autocmds carrying diff metadata, plus diff_opts.auto_resize_terminal (default true) to opt out of plugin-managed terminal width during diffs and terminal.diff_split_width_percentage to set a distinct terminal width while a diff is open. (#270)
  • terminal.auto_insert option (default true): set to false to stay in Normal mode when refocusing the Claude terminal and preserve your scroll position instead of jumping to the prompt. (#233)
  • ClaudeCodeTreeAdd / <leader>as support in snacks.nvim pickers (snacks_picker_list), covering Snacks.explorer() and modal Snacks.picker.files()/grep(). (#192, #269)
  • netrw file selection for <leader>as / :ClaudeCodeTreeAdd, supporting marked files and the file under the cursor. (#62)

Changed

  • Model picker labels are now version-free evergreen aliases (Claude Opus (Latest), Claude Sonnet (Latest), Claude Haiku (Latest)), with new 1M-context variants (opus[1m], sonnet[1m]) and a Default (account recommended) entry. (#146, #256)
  • :checkhealth claudecode and the MCP serverInfo.version now report the real plugin version from the VERSION file instead of a hard-coded value. (#437)

Fixed

  • The Snacks provider no longer fails to launch Claude when a model alias contains shell-glob characters (e.g. opus[1m]); the command is now passed as an argv list with no shell interpretation. (#256)
  • The native terminal now adopts only terminal buffers it started (marked with b:claudecode_native_terminal), instead of any visible terminal whose name contains claude. Upgrade note: a terminal that an older plugin version started (for example after :Lazy reload following an upgrade), or that a session file restored, carries no mark and is no longer adopted. The next open starts a second Claude session, and the old terminal keeps running until you close its buffer or quit Claude in it. (#349, #352, #364)
  • closeAllDiffTabs is now scoped to claudecode's own tracked diffs and no longer wipes out an open diffview.nvim, fugitive, or native :diffsplit review; openFile/openDiff also never reuse a window that is in diff mode. (#277, #290)
  • close_tab now closes only the diff with that tab name and never deletes a user buffer. (#373)
  • Closing the native terminal, for example with :ClaudeCodeClose, now stops the Claude job instead of leaving it running. (#336)
  • 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 queued @ mentions. (#70, #268)
  • focus_after_send = true with provider = "none"/"external" now emits a one-time warning pointing to the User ClaudeCodeSendComplete autocmd instead of failing silently. (#228, #265)
  • Rejecting a Claude diff with :q / :close / <C-w>c (or closing the tab) now resolves it as rejected via a WinClosed autocmd. (#266)
  • Quickly-made and single-line visual selections are now pushed to Claude reliably; selections are flushed synchronously on visual-mode exit and persist until the cursor moves, including in the external /ide flow and Select mode. (#246, #267, #367, #381, #388)
  • Pending diffs are now automatically closed when the client that opened them disconnects or the integration stops, so orphaned proposals no longer linger. (#248, #261)
  • openDiff now works when the Claude terminal is the only window, creating a split to host the diff instead of failing with "No suitable editor window found". (#260)
  • Fixed the "climbing cursor" in the Snacks terminal, where the cursor sat one row above Claude's prompt after hide and show. On Neovim >= 0.10 a floating terminal is now hidden instead of closed. A split is still closed on hide and created again on show, which keeps the cursor in place. Floating terminals on Neovim < 0.10 keep the old behavior. (#240, #183, #271)
  • Worked around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes into the terminal; controlled by terminal.fix_streamed_paste ("auto" by default). (#252)
  • openFile now selects exactly the requested line range or matched text, keeps the user's Visual mode, unsaved changes, focus and preview window intact, never prompts W11/W12, and never picks the preview window as the main editor window. (#353, #365, #370, #375, #382, #384, #387, #396, #408)
  • getDiagnostics now handles plain file paths without a file:// URI scheme, and IDE diagnostics return grouped URI-based payloads with editor-native ranges and severity names. (#163, #274)
  • :ClaudeCodeAdd and openFile now handle $ in file paths. (#286)
  • Prevented a segfault when accepting a new-file diff with render-markdown.nvim installed, by turning off diff mode before the post-write redraw. (#224)
  • The auth token is now generated from a CSPRNG and the lock file is written atomically with mode 0600 in a 0700 directory. (#259)
  • Detect system sleep/wake and reset client keepalive timestamps to prevent false disconnections. (#141)
  • The WebSocket server now retries port binding on EADDRINUSE (parallel instances), closes connections on malformed/oversized or binary frames with the correct status, joins fragmented messages, validates UTF-8 per message, and never repeats a client id within a process. (#258, #283, #378, #383, #390, #395, #405, #422, #431)
  • Legacy diff_opts (e.g. vertical_split, open_in_current_tab) now take effect again after the config merge-order regression. (#142)
  • :q on a diff window no longer hangs; floating diff terminals keep focus; empty buffers are wiped when the terminal provider is none; and accepted diffs are handed over in the buffer's own line-ending format. (#178, #223, #266, #392)

Compatibility

  • Integration tests now run on Neovim v0.8.0, and a new-tab diff no longer fails there because Neovim 0.8 has no statuscolumn. The unified layout is documented to require Neovim >= 0.9.0, and the v0.8.0 integration tests skip it. (#369, #394)

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 7 times, most recently from 8cc0a9a to b285cc6 Compare November 1, 2026 18:37
@ThomasK33

Copy link
Copy Markdown
Member

@codex review

@ThomasK33

Copy link
Copy Markdown
Member

@codex security review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-09T14:57:06.240888Z 2f6724d Manual request
🔒 Security Review ✅ Completed 2026-11-09T14:59:03.018008Z 2f6724d Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: 853a337ade

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 853a337ade

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@ThomasK33

Copy link
Copy Markdown
Member

@codex review

@ThomasK33

Copy link
Copy Markdown
Member

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: f48dee6e27

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f48dee6e27

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CHANGELOG.md Resolved
Comment thread CHANGELOG.md Resolved
Point issue references at /issues/ URLs, drop the claim that unified diffs fall back on Neovim 0.8 (unified needs 0.9),
restore the Neovim 0.9 note and the #349 upgrade note, and list the #336 and #373 fixes.

_Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high_
@ThomasK33

Copy link
Copy Markdown
Member

@codex review

@ThomasK33

Copy link
Copy Markdown
Member

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: d5f3428f75

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: d5f3428f75

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

… as the code has them

_Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high_
@ThomasK33

Copy link
Copy Markdown
Member

@codex review

@ThomasK33

Copy link
Copy Markdown
Member

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 2f6724d2af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 2f6724d2af

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Created releases:

🌻

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.

1 participant