chore: version packages - #710
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
requested review from
Avtrkrb,
akramcodez and
will-lamerton
as code owners
July 27, 2026 20:25
github-actions
Bot
force-pushed
the
changeset-release/main
branch
16 times, most recently
from
August 5, 2026 10:07
40fe7ff to
10af0bb
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
11 times, most recently
from
August 9, 2026 13:39
4a4f1c1 to
5c160c9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
24 times, most recently
from
August 14, 2026 10:56
eee9e7c to
3174d0b
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
August 17, 2026 13:29
0abc7cc to
e4e987d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@nanocollective/nanocoder@1.30.0
Added first-class provider template for Groq to the setup wizard.
Added first-class provider template for OrcaRouter to the setup wizard.
Added a /commit slash command that generates Conventional Commit messages from staged Git diffs using the active LLM client. Thanks to @DeepamJha. Closes [Feature]
nanocoder commit(Auto-Commit Message Generator) #757.Consolidated upload actions under a single '+' menu in the VS Code webview to reduce UI clutter and improve scalability for future attachment types.
Added context attachment functionality with UI for file/folder chips and drag-and-drop support.
Added Settings Tab to the VS Code extension webview for configuring providers and behavior directly from the UI.
list_directoryno longer includes file sizes by default — they cost anlstatsyscall per file plus output tokens for information that's rarely needed just to orient in a directory. PassshowSizes=trueto opt back in, or useread_filewithmetadata_only=truefor a single file's size.Added a per-response token usage and estimated cost indicator. Every assistant message in the CLI now ends with a subtle gray footer showing the provider-reported token count and estimated cost (e.g.
Tokens: 4.2k | ~$0.01), computed from models.dev pricing; the cost segment is omitted for local/free models and the footer falls back to the previous client-side estimate when the provider reports no usage. The VS Code extension shows the same indicator under each finished response, fed by the per-turn usage now returned on the ACP prompt response. Note: the estimate prices all input tokens at the standard rate — cache read/write discounts are not factored in, so costs can be overstated for providers with prompt caching. Closes [Feature] Token Usage & Cost Indicator per Response #756.Moved the rest of nanocoder's configuration into the
/settingsmenu, so you can set things up without editing.jsonfiles by hand. Settings are grouped into Appearance, Input, Behavior, Providers, and Advanced tabs. New menu items let you set the default mode, auto-compact, sessions, reasoning traces, tool auto-approval, and a Web Search API key; view your configured providers and MCP servers before opening the setup wizards; open the Tune Model and Connect IDE wizards; and see the activeNANOCODER_*environment variables. Advanced also includes an in-app JSON editor foragents.config.json: edit strings with the cursor inside the quotes, flip booleans with the arrow keys, and save atomically (a crash can't leave a half-written file).Sunset
/setup-providersand/setup-mcpin favour of/settings. Both retired names still work for now — they open the matching/settingstab with a notice instead of erroring./settingsnow takes a tab argument (/settings providers,/settings mcp), MCP has its own settings tab, and provider edits made from settings apply to the running session instead of waiting for the next launch. Selecting a provider or MCP server in settings now opens that entry's edit/delete choice directly, with a separate row for adding a new one.Added editor code lenses to the VS Code extension: every function, method, constructor and class now carries
Explain CodeandGenerate Testslinks, and clicking one reveals the chat view and sends that symbol - instruction,file:startLine-endLineand the source, fenced with the document language - as a prompt. Symbols come from the language server, so no per-language parsing is involved, and the lenses can be turned off withnanocoder.codeLens. Long symbols are capped before being inlined, so a lens click on a large class cannot spend a whole context window on one turn. Also fixes a pre-existing hang where sending a message while a tool approval was still pending left the composer spinning forever. Closes [Feature] Inline Editor Code Lenses for AI Actions in VS Code Extension #750.Added
@mention autocomplete to the VS Code extension's chat composer: typing@opens a floating dropdown of workspace files, folders and open editors, and selecting one attaches it as a context chip. Search runs on the extension host, which merges yourfiles.excludeandsearch.excludesettings into the exclude list so hidden files stay out of the dropdown, and a bare@lists open editor tabs with no disk I/O. Attached files are now read with a 100 KB cap and binaries are skipped, so a mis-picked lockfile can no longer swallow the context window. Closes [Feature] Context-Aware Mentions (@referencing) in VS Code Extension #747.Added support for image uploads and pasting in the VS Code extension chat panel, allowing users to send multimodal messages (text + images) to the AI assistant.
VS Code extension: Added
/copy codeand a Ctrl+Alt+Shift+C (Cmd+Alt+Shift+C on macOS) keybinding to copy the last code block from the previous assistant response.Added a copy-to-clipboard button to the VS Code extension's chat panel: hovering over a user prompt or agent response bubble reveals a clipboard icon that copies the raw markdown text and briefly shows a checkmark to confirm. Streamed agent responses always copy the latest in-progress text. Closes [Feature] Universal Copy Buttons on Chat Bubbles in VS Code Extension #746.
execute_bashand custom tools now truncate long output by keeping both the head and the tail (tail-weighted) instead of only the head, so the actionable part of compiler/test-runner output (error list, failure summary, exit status) — which usually lands at the end — isn't discarded.Bound
string_replaceresults to a context window around the edited range.Fixed the Atlas Cloud wizard to store provider-qualified GPT-5.6 model IDs, while preserving compatibility with existing shorthand configurations. Thanks to @RealBhupesh. Closes [Bug] "invalid request params" (400) when using Atlas Cloud API with GPT models #803.
Bound oversized tool results before they re-enter model context while preserving both the beginning and the actionable tail.
Fixed
diff_editreturning the entire modified file by limiting results to changed-region previews. Thanks to @RealBhupesh. Closes [Bug] diff_edit echoes back the entire file the model just edited #795.Added a nanocoder svg pulse effect as a visual loading indicator in vscode extension. It uses the provided svg and css to create a pulsing animation that indicates when the agent is processing a request.
Defer ink and @/app loading in the CLI entry point until the interactive TUI branch, so --acp, --plain and auth paths no longer pay the Ink/App module-graph cost at startup.
Fixed bash commands entered with
!keeping the whitespace that followed the prefix, so! git statusnow runsgit statusinstead ofgit status.Fixed the VS Code extension's stop button leaving a request running. Two holes:
AcpSession.cancel()aborted the current controller and immediately replaced it with a fresh one, so a cancel that landed before the turn read the signal — the window while the agent is still resolving the prompt's file references — handed the turn an unaborted controller and the stop was lost. The controller is now rotated when a turn begins instead. Separately, the extension never answered the agent's pending permission request when you hit stop: the tool card kept its spinner and Allow/Deny buttons, and because the request stayed on the pending list every later message was refused with "Please approve or deny the pending tool before sending a new message" until the window was reloaded. Stopping (or reconnecting after the agent process restarts) now resolves those requests as cancelled. Thanks to @akramcodez. Closes [Bug] Cancel button does not always stop ongoing execution #864.Fixed
Cannot read properties of undefined (reading 'summaryParts')when streaming from GitHub Copilot with reasoning models such asgpt-5.3-codex. Copilot's Responses API proxy rotates the opaque reasoning item id mid-stream whileoutput_indexstays stable, so the OpenAI Responses parser looked up state that was never registered and the stream died. Copilot's response stream is now normalized before it reaches the parser: a rotated id is mapped back to the reasoning item already tracked at thatoutput_index, and a reasoning item that was never announced is announced first. Closes [Bug] Cannot read properties of undefined (reading 'summaryParts') when using Github Copilot with GPT-5.3 Codex #719.Fixed the VS Code extension's thought dropdown expanding to nothing. Streamed tokens are batched behind a 150ms timer, and the reasoning/text routing flag was driven by the
reasoning-start/text-startmarkers around a batch rather than by the deltas that filled it — so any provider whose ordering differs (the OpenAI Responses API defersreasoning-enduntil the reasoning item completes; openai-compatible providers reopen reasoning without closing text; some emit deltas with no start marker at all) delivered reasoning as assistant text and left the thought view empty. Routing now follows the delta type and flushes the pending batch before switching streams, so a batch always leaves on the callback it was filled for. Whitespace-only reasoning no longer emits an ACP thought chunk, is no longer stored on the message, and no longer opens a thought section, so the empty "Thought for 0s" bubbles are gone. Thanks to @akramcodez. Closes [Bug] thoughts are not visible in the thought dropdown #853.Block IPv6 loopback in the
fetch_urlSSRF guard. The validator rejected127.0.0.1but lethttp://[::1]:8080through, so the loopback protection could be bypassed over IPv6. It now also rejects[::1](and its expanded/IPv4-mapped spellings) and the[::]unspecified address. Closes [Bug] fetch_url Tool Doesn't Block IPv6 Loopback Address (::1) #734.Fixed the
usageblock in the--plain --jsonrun report being emitted as all zeros for providers that report no token telemetry, and reading as zero total spend for providers that report input/output counts without a total. The block is now omitted entirely unless at least one token count is actually reported, andtotalTokensfalls back to input+output when the provider omits it, so downstream harnesses can distinguish "no telemetry available" from a genuine zero.Fixed multibyte terminal input being corrupted when an alternate-screen stdin chunk split a UTF-8 character, which could affect Korean and other IME input.
Fixed an MCP server staying visible as connected when its initial
tools/listcall failed.connectToServer()now registers the client, transport, and config only after tool discovery succeeds, and closes the partially-established client on failure so its transport/child process doesn't leak.Fixed prompt history navigation returning an invalid value after reaching the end of the history.
getNextString()now returnsnull, matching the behavior of the other history navigation methods.Fixed update checks incorrectly recording a successful check after a registry fetch failure, corrected
BoundedMap.has()for entries whose value isundefined, and restored network-error classification for Node.js errno codes. Closes [Bug] Update Check Timestamp Written Even When Version Fetch Failed #739, [Bug] BoundedMap.has() Returns false for Keys Storing undefined #738, and [Bug] isNetworkError Checks Node Errno Codes on Wrong Property (error.name vs error.code) #737.Fixed the VS Code extension's Reject All running rejection cleanups concurrently:
rejectAll()fired the asyncrejectChange()without awaiting, so overlapping cleanups raced over shared editor state (stale tab snapshots incloseEditors()). Rejections now run sequentially, mirroringapplyAll(). Thanks to @jmdlrg. Closes [Bug]rejectAll()does not await asynchronous cleanup #725.Fixed short user messages wrapping mid-word in the VS Code extension chat. The message bubble carried
max-w-[85%]on top of the turn wrapper's ownmax-w-[85%], so the inner percentage resolved against the wrapper's shrink-to-fit width and squeezed each bubble to 85% of its own content - combined withbreak-words, "hey" rendered as "he" / "y". The bubble now usesmax-w-fulland the cap lives only on the wrapper.Fixed new tool calls landing back in an earlier card instead of a fresh one when a thought, reply, edit card, or plan update came in between. Closes [Feature] Preserve tool-call boundaries between thought blocks #856.
Fixed a manually collapsed tool card re-expanding on its next update.
Reused one footer per agent turn instead of creating one per text segment.
Fixed a turn's copy button sometimes copying a newer turn's text instead of its own.
where.exelists npm's unexecutable extensionless shim beforenanocoder.cmd, and the first line was taken blindly; spawning a.cmdalso fails with EINVAL because Node refuses to run one without a shell (CVE-2024-27980). Discovery now rankswhere.exematches by extension, the CLI is launched via the JS entrypoint resolved from the shim, and a.cmdthat cannot be resolved falls back to a quoted shell spawn. Spawn failures are also caught and reported in the Nanocoder output channel instead of being swallowed as an unhandled rejection that left the UI stuck on "Connecting".dreturned to the raw provider template list, where the only way to proceed was scrolling past every template to a trailing "Done & Save" — a ~34-row screen that overflows a normal terminal, so the entry was off screen and the wizard looked stuck. Adding a provider now lands on the wizard's root menu, which offers "Done & Save" up front, and the template, edit, and MCP server lists scroll within the terminal height instead of overflowing it.which/wherecannot resolve the binary under the extension host's minimal PATH. The child-process PATH is also enriched with the CLI's directory only when a co-locatednodebinary is present, preventing shadowing of a user's version-manager Node. Thanks to @akramcodez.titleManuallySetthrough, so the flag was dropped from disk after the next message. The title survived inside the VS Code extension via its own guard, but the CLI's autosave then saw an unflagged session and overwrote the user's name with an auto-derived one.git_diffresults to a 20-entry diffstat while preserving the total file count, and kept file-scoped results as bounded head-and-tail patches./copyand/copy codenow address the whole last assistant response rather than its final text fragment, so a tool call between the code block and the closing prose no longer hides the block. Also collapses inner whitespace in the/copy codeintercept, reports "No response to copy yet" on an empty transcript, and replies with a pointer instead of "Unrecognized slash command" if/copyreaches the ACP agent.search_file_contentsno longer puts a blank line between context-free matches, and decides its layout from thecontextLinesargument rather than sniffing each match for a newline. A context block that collapsed to a single line (single-line files, or when truncation dropped every newline) previously rendered with the exact-match header and a doubled line number.search_file_contentsnow formats results grep-style (file:line:content, one line per match) instead of spreading each match across three lines with a blank separator. Matches withcontextLinesstill show the full multi-line context block, now with a-header separator matching grep's convention.!bash commands showing no output in the transcript. Previously the completed card only displayed the command, a status dot, and a token count — the actual result was sent to the model but never shown to the person who typed the command. Completed!commands now render their stdout and stderr (tail-capped at 20 lines, with a note when earlier lines are hidden). Model-invokedexecute_bashcalls keep their compact display.ink-select-input's built-in indicator and selected-label renderer hardcode a darkbluethat ignores the active theme and all but vanishes against a dark terminal; every selector now routes throughStyledSelectInputand highlights with the theme'sprimarycolour instead. Also raised five themes whose highlight or body text fell below WCAG AA contrast against their own background (cherry-blossom, ayu-light, everforest-light, volcanic-ash, solarized-light). Closes [Feature] change the highlight color #827.toLocaleString()thousands-separators from strings returned to the model (read_file's metadata output and validator error,list_directory's per-entry size, and@file-mention metadata). Comma separators cost extra tokens without adding meaning for the model. Left them in place in the terminal display components, where they're actually useful.The listener is registered on the webview's
document(not just the chat input) so it fires even when focus has moved to a tool card, button, or the streaming response area.Also added a
nanocoder.cancelcommand for the Command Palette.The backend already tears down the in-flight request via
AbortControllerwhen a cancel is received, so this stops token generation immediately rather than just hiding output, and cancelling now shows a clean "Cancelled by user" note inline in the chat instead of an error toast.Cancelling while a tool is waiting for approval no longer wedges the chat.
Previously the pending permission resolver was left in place, so the extension kept reporting an outstanding prompt and rejected every later message with "Please approve or deny the pending tool" until the window was reloaded.
Cancelling (or starting a new chat) now answers any outstanding permission requests with a cancelled outcome and dismisses their approval cards.
Fixed cancelled tool cards rendering with the error icon.
ACP has no
cancelledtool status, so a cancel arrives asfailedwithCancelled by userin the raw output, but the webview matched that string case-sensitively againstcancelledand never hit it.Improved session management in the VS Code extension:
Session renaming: Sessions can now be renamed directly from the History view. A
renameSessionACP extension method (extMethod) is implemented on the CLI's ACP agent and backed by the existing session manager, so a session's title can be updated in place without a full resume.History view navigation: Creating a new chat or resuming a session from the History list now returns to the active chat view instead of leaving the panel stuck on the session list.
Clarify read-before-edit refusal messages to specify that files over 300 lines need a ranged read
Increased the bounded terminal content width from 120 to 200 columns so wide terminals use more available space while retaining a sane layout cap.
write_fileno longer echoes the full file contents back after writing. The model already authored that content as the tool call arguments, so returning it again was pure duplication that scaled with file size and got re-sent on every later step of the agent loop. The confirmation message (line/char/token counts) is unchanged.If there are any problems, feedback or thoughts please drop an issue or message us through Discord! Thank you for using Nanocoder.