Files
zblade.dev/src/pages/changelog.astro
T
kekePower addc1ef241 docs(changelog): update version labels and dates for v0.4.0 and v0.3.4
- Change v0.4.0 card to “latest” and set proper release date.
- Convert v0.3.4 card to “previous” and adjust badge class.
2026-03-11 18:43:10 +01:00

1201 lines
55 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="Changelog - Zaguán Blade" description="Release history and changes for Zaguán Blade.">
<main>
<!-- Hero Section -->
<section class="changelog-hero">
<div class="container">
<div class="hero-content">
<div class="hero-label">// CHANGELOG.md</div>
<h1 class="hero-title">
<span class="title-line-1">CHANGELOG</span>
<span class="title-accent">RELEASE_HISTORY_</span>
</h1>
<p class="hero-description">
Track the evolution of Zaguán Blade. See what's new, what's fixed, and what's coming.
</p>
</div>
</div>
</section>
<!-- v0.4.0 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card version-latest">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.4.0</h2>
<span class="version-date">March 11, 2026</span>
</div>
<span class="version-badge badge-latest">Latest</span>
</div>
<div class="version-content">
<div class="version-resume">
<p>This release introduces significant improvements to Zaguán Blade, including a complete rewrite of the AI Chat Panel for better performance, new Code and Planning modes with a dedicated Planning skill, and theme support with four built-in themes. The update also includes numerous bug fixes, design refinements, and reduced debug output for a cleaner console experience.</p>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Zaguán Coder Daemon.</strong> Implemented a new GPT skill inspired by <a href="https://github.com/cyxzdev/Uncodixfy" target="_blank" rel="noopener">Uncodixfy</a> and refined the other design skill.</li>
<li><strong>Zaguán Coder Daemon.</strong> Fixed streaming issues related to gpt-5.4.</li>
<li><strong>Zaguán Coder Daemon.</strong> Added a <code>tool_search</code> tool based on the <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool" target="_blank" rel="noopener">Anthropic documentation</a> to help reduce initial token usage.</li>
<li><strong>AI Chat Panel v2.</strong> A complete rewrite of the AI Chat panel. v2 is now a lot more performant and responsive.</li>
<li><strong>Chat Panel Update.</strong> Updated the Chat panel and took a lot of inspiration from <a href="https://github.com/pingdotgg/t3code" target="_blank" rel="noopener">T3 Code</a>.</li>
<li><strong>Git Commit Text Area.</strong> Made the Git commit text area bigger and dynamic.</li>
<li><strong>AI Chat Panel.</strong> Toned down the font color to make it easier to read.</li>
<li><strong>AI Chat Panel.</strong> Made completed tool calls fade a little to make it easier to separate.</li>
<li><strong>Editor Breadcrumb.</strong> Minor design tweak to the breadcrumb at the top of the editor for improved visual hierarchy.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Code and Planning Mode.</strong> You can now switch between Code and Planning mode. Added a special Planning skill in Zaguán Coder Daemon to go along with this new feature.</li>
<li><strong>Implement Button.</strong> Implemented an "Implement" button when in Planning mode. Clicking this switches to Code mode and begins the work.</li>
<li><strong>Themes.</strong> Added theme support with four built-in themes: the original dark theme Zaguán Dark plus Blade Coder, Blade Cream and Blade Robot.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🎨</span>
Design Updates
</h3>
<ul class="changes-list">
<li><strong>Theme Selector Dropdown.</strong> Tightened up and redesigned the design of the Theme selector dropdown menu.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>AI Chat Conversation Order.</strong> Fixed a bug where responses and tool calls would not arrive and display in a natural conversation order.</li>
<li><strong>Git Push Lock Issue.</strong> Fixed a bug in the Git panel where a git push would complain about a git lock.</li>
<li><strong>Gitoxide Integration.</strong> Moved more Git functionality from git to gitoxide.</li>
<li><strong>Streaming Logic.</strong> Fixed a bug in the streaming logic that would sometimes garble the responses from specific models.</li>
<li><strong>GPT-5.4 Streaming.</strong> Fixed the streaming issue when using gpt-5.4 that resulted in garbled responses.</li>
<li><strong>Cancelled Tool Calls.</strong> Fixed an issue where a cancelled run_command tool call would end up below the response from the model.</li>
<li><strong>Chat UI.</strong> Removed noisy elements from the chat and tightened up some of them as well. Much nicer view.</li>
<li><strong>Git Commit Generate.</strong> Fixed a bug in the Git Commit Generate path that would sometimes fail for certain models.</li>
<li><strong>Git Commit Generator.</strong> Fixed the Git Commit generator to also check for/include new/staged files. This was missed before.</li>
<li><strong>Blade Terminal Rendering.</strong> Rewired the logic to use the Blade Terminal again and hopefully fixed the rendering bugs.</li>
<li><strong>AI Chat v2 Design.</strong> Made minor tweaks to the AI chat v2 design.</li>
<li><strong>Terminal Resize.</strong> Fixed the resize logic for the Terminal—previously wonky, now much smoother.</li>
<li><strong>Keyboard Shortcut.</strong> Added a new keyboard shortcut - Ctrl-L - to put the chat input in focus.</li>
<li><strong>Diff View Styling.</strong> Fixed Diff View styling across all 4 themes. The new themes were using the style from the original theme.</li>
<li><strong>Zaguán Coder Daemon.</strong> Fixed the Gemini continuation thinking bug.</li>
<li><strong>Zaguán Coder Daemon.</strong> Fixed bugs in relation to <code>tool_search</code> that would sometimes result in the model failing to apply patches and then overwrite files.</li>
<li><strong>Debug Output.</strong> Disabled a lot of debug output in the console.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.4 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card version-previous">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.3.4</h2>
<span class="version-date">2026-03-05</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Frontend Audit.</strong> Completed a full frontend audit: removed dead files, tightened up many functions, removed unused fonts, and made the codebase cleaner and leaner.</li>
<li><strong>i18n Preparation.</strong> Began preparing the application for internationalization (i18n); English is now ready.</li>
<li><strong>Zaguán Coder Daemon.</strong> Enabled parallel tool calling for supported models.</li>
<li><strong>Zaguán Coder Daemon.</strong> Added preliminary support for <a href="https://docs.mistral.ai/models/devstral-2-25-12" target="_blank" rel="noopener">Mistral Devstral 2</a>.</li>
<li><strong>Rust Backend.</strong> Did an audit of the Rust backend using the <a href="https://github.com/leonardomso/rust-skills" target="_blank" rel="noopener">Rust Skill</a>. Found and fixed a few bugs, memory optimizations and panic-prone locks.</li>
<li><strong>Zaguán Coder Daemon.</strong> Working on making the Mercury 2 system prompt stronger and better.</li>
<li><strong>Zaguán Coder Daemon.</strong> Replaced Gemini 3 Flash Preview with Gemini 3.1 Flash Lite Preview.</li>
<li><strong>Zaguán Coder Daemon.</strong> Initial testing support for <a href="https://www.inceptionlabs.ai/blog/introducing-mercury-2" target="_blank" rel="noopener">Inception Mercury 2</a>.</li>
<li><strong>Zaguán Coder Daemon.</strong> Enabled OpenAI GPT-5.4 with low and medium reasoning.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Zaguán Coder Daemon.</strong> Cherry-picked the best pieces from <a href="https://github.com/obra/superpowers" target="_blank" rel="noopener">Superpowers</a> and ported them to the GUI environment of Zaguán Blade.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Run Command.</strong> Fixed a bug in the <code>run_command</code> card where the command would get detached when it shouldn't.</li>
<li><strong>Editor Colors.</strong> Fixed an issue where the editor did not show colors at all due to incompatible CodeMirror versions.</li>
<li><strong>Editor Scrollbar.</strong> Fixed an issue where the editor horizontal scrollbar was laid over the terminal.</li>
<li><strong>Layout Alignment.</strong> Fixed an alignment issue in the space between the editor and the chat.</li>
<li><strong>Chat Image Paste.</strong> Fixed a bug introduced after the audit where pasting images into chat no longer worked.</li>
<li><strong>Chat Streaming.</strong> Fixed a bug in the chat so that regular responses now stream correctly.</li>
<li><strong>Chat UI.</strong> Fixed the chat and removed a lot of noisy cards.</li>
<li><strong>New Chat Creation.</strong> Fixed a bug when creating a new chat where the model received no data at all.</li>
<li><strong>Zaguán Coder Daemon.</strong> Removed artificial limitation on the number of turns models could do.</li>
<li><strong>Zaguán Coder Daemon.</strong> Fixed a bug where the conversation wouldn't end properly, especially after repeated tool calls.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.3 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card version-previous">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.3.3</h2>
<span class="version-date">February 28, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Markdown Editor.</strong> Show a proper Diff view and the Accept/Reject pill in the Markdown editor when it's in Edit mode after a model has made changes.</li>
<li><strong>Message Queue.</strong> Added a message queue so that you can send messages while the model works. These will be executed sequentially.</li>
<li><strong>Zaguán Coder Daemon.</strong> Working on ironing out bugs in several models, Gemini 3.1 Pro, MiniMax M2.5, GPT-5.3-Codex.</li>
<li><strong>Zaguán Coder Daemon.</strong> Disabled several variations of models in the `low` and `medium` ranges to clean up the list.</li>
<li><strong>Zaguán Coder Daemon.</strong> Used the <a href="https://developers.openai.com/cookbook/examples/gpt-5/codex_prompting_guide" target="_blank" rel="noopener">Codex guide</a> to make the implementation better.</li>
<li><strong>UI.</strong> Added the Project Name to the header and to the window title.</li>
<li><strong>Zaguán Blade.</strong> Now sending the local time and date to the model. This helps with year hallucinations and other time related issues.</li>
<li><strong>Zaguán Coder Daemon.</strong> Used gemini-cli source code to get the best information on how to handle it in the best possible manner.</li>
<li><strong>Zaguán Coder Daemon.</strong> Tightened up <code>grep_search</code> command with a timeout and excluding certain directories to speed things up.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Git Push.</strong> Pushing to Git now accepts all changes automatically.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Zaguán Coder Daemon.</strong> Fixed a bug that resulted in a warning for the Gemini model. Did not affect functionality.</li>
<li><strong>Git Push.</strong> Fixed a bug in the Git Push button where it now correctly changes state from Push to Pushing to Pushed.</li>
<li><strong>Header Alignment.</strong> Fixed an alignment issue in the header where the app name was off-center when no tabs were open.</li>
<li><strong>Local AI.</strong> Fixed an issue where the responses would appear in reverse order.</li>
<li><strong>Terminal.</strong> Fixed the Terminal Copy command <code>Ctrl-Shift-C</code>/<code>Cmd-Shift-C</code>.</li>
<li><strong>UI Focus.</strong> Fixed a possible bug where the UI wouldn't get focus at launch due to the custom window decorations in Tauri.</li>
<li><strong>CodeMirror.</strong> Fixed a bug in the CodeMirror implementation that would show stale diff views.</li>
<li><strong>Terminal.</strong> Fixed a bug where pasting content into the Terminal would paste twice.</li>
<li><strong>Chat Panel.</strong> It's now possible to resize the chat panel again.</li>
<li><strong>Terminal.</strong> Removed the horizontal resize bar.</li>
<li><strong>Editor Test.</strong> Fixed a test case in the editor.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.2 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.3.2</h2>
<span class="version-date">February 25, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Project Index Tools.</strong> Added 2 new tools to retrieve the <code>project_index.md</code> file. This file can be used by the model to get an overview of the project.</li>
<li><strong>Editor Context.</strong> Send filenames of all open tabs in the editor to the AI model.</li>
<li><strong>Zaguán Coder Daemon.</strong> Dug through a few open-source projects to figure out the best way to make gpt-5.3-codex work seamlessly. A huge thanks to these very smart and talented people building awesome tools.</li>
<li><strong>OpenAI integration.</strong> OpenAI GPT-5.3-Codex is now available in Zaguán Blade.</li>
<li><strong>Zaguán Coder Daemon.</strong> Tightened up the logic for Google Gemini 3.1 Pro. TTFT now 4-5x faster.</li>
<li><strong>Git Panel.</strong> Enhanced Git Panel to show a strikethrough for elements that are moved, renamed or deleted.</li>
<li><strong>Chat.</strong> Added visual feedback while waiting for the model to respond in the chat.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>GPT Codex.</strong> Fixed a bug where, sometimes, GPT Codex model would emit characters from other languages seemingly at random.</li>
<li><strong>GPT Codex.</strong> Fixed a bug where gpt-5.3-codex would stop after a few tool calls.</li>
<li><strong>Patching.</strong> Fixed a bug in <code>apply_patch_to_string</code> that would replace instead of add new content.</li>
<li><strong>Local AI.</strong> Fixed a bug in the Git commit generation for Local AI where it would fail. This was due to the message being routed wrong.</li>
<li><strong>Welcome screen.</strong> Fixed alignment issue on the Welcome screen.</li>
<li><strong>Paste image.</strong> Fixed a bug where pasting images from clipboard into chat didn't work.</li>
<li><strong>Tab focus.</strong> Active tab now always stays in focus while new tabs are opening.</li>
<li><strong>Git.</strong> Fixed a bug where the <code>.zblade</code> directory would be submitted to git.</li>
<li><strong>Chat.</strong> Fixed a bug where images attached to a message were being re-sent on every subsequent turn, causing context bloat.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.1 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.3.1</h2>
<span class="version-date">February 23, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Zaguán Coder Daemon.</strong> Added stronger detection for Google Gemini if it was unable to apply a patch to help it recover and try again instead of hanging.</li>
<li><strong>Zaguán Coder Daemon.</strong> Added a runtime guard to prevent AI models from inappropriately using shell commands (e.g., <code>grep</code>, <code>cat</code>) instead of dedicated tools, automatically guiding them to correct usage.</li>
<li><strong>Dependencies.</strong> Updated modules for frontend and backend.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Research Progress.</strong> Fixed an issue where research progress indicators (like "RUNNING_TOOLS") would remain stuck in a running state when a chat session ended or was stopped.</li>
<li><strong>Run Command.</strong> Fixed a bug in Zaguán Blade where a Run Command, when skipped, would still stay running.</li>
<li><strong>Run Command.</strong> Fixed a bug when the Stop button was pressed and a Run Command was running and would stay running.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.0 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.3.0</h2>
<span class="version-date">February 23, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Alpha Tag Removed.</strong> Removed the "alpha" tag as Zaguán Blade has reached a usable state.</li>
<li><strong>UI Redesign.</strong> Redesigned the whole application. It's now a lot more professional, calm and better structured.</li>
<li><strong>Settings.</strong> Added an About section in Settings.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Performance.</strong> Fixed memory leaks, optimized for better performance and cleaned up the code a little.</li>
<li><strong>Editor Performance.</strong> Significantly improved editor responsiveness by splitting context state and actions to eliminate unnecessary re-renders in hot-path components.</li>
<li><strong>Markdown Performance.</strong> Improved typing responsiveness in Markdown files by disabling expensive syntax features and skipping per-keystroke cursor synchronization.</li>
<li><strong>Google Gemini 3.1 Pro.</strong> Trying to make Google Gemini 3.1. Pro work better based on feedback and other OSS projects.</li>
<li><strong>Google Gemini.</strong> Updated our Google Gemini implementation in Zaguán Coder Daemon.</li>
<li><strong>MiniMax.</strong> Updated our MiniMax implementation for Fireworks in Zaguán Coder Daemon.</li>
<li><strong>Dependencies.</strong> Updated <code>gix</code> to v0.51.0.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Diff parsing.</strong> Fixed line-number drift in the editor caused by newline metadata.</li>
<li><strong>Uncommitted changes.</strong> Fixed cumulative diff tracking to properly display changes for files edited multiple times.</li>
<li><strong>Fixed a bug</strong> in the global Accept All/Reject All that was wrongly removed.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.2.1 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.2.1</h2>
<span class="version-date">February 21, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Google Gemini 3.1 Pro.</strong> Added Google Gemini 3.1 Pro in Zaguán Coder Daemon.</li>
<li><strong>Chunk counting.</strong> Added chunk counting and display for write operations tool calls.</li>
<li><strong>Qwen3.5 support.</strong> Added support for Qwen3.5 models in Zaguán Coder Daemon.</li>
<li><strong>Claude Sonnet 4.6.</strong> Enabled Claude Sonnet 4.6 in Zaguán Coder Daemon. Restart application to access it.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Performance.</strong> Optimized streaming performance and conversation context synchronization.</li>
<li><strong>Frontend.</strong> Updated Vite to version 7.3.1.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Zaguán Coder Daemon provider fix.</strong> Fixed an issue where Anthropic-specific instructions were being sent to non-Anthropic providers.</li>
<li><strong>Fixed a bug</strong> when using Gemini 3.1 Pro where extra text would appear when using the <code>run_command</code> tool.</li>
<li><strong>Fixed a bug</strong> when <code>run_command</code> started a command without exit that blocked progress.</li>
<li><strong>Diff parsing.</strong> Fixed an issue where Diff parsing was only reading the first parsed patch block.</li>
<li><strong>Fixed a warning message</strong> that was too prominent.</li>
<li><strong>Fixed escaped characters</strong> showing up in the Blade Terminal.</li>
<li><strong>Fixed terminal crash</strong> with dead-key characters.</strong> Resolved UTF-8 unsafe slicing in sentinel parsing that caused crashes with multibyte characters (e.g., <code>~/dead-key</code> sequences). ANSI stripping now preserves UTF-8 bytes correctly.</li>
<li><strong>Fixed a bug</strong> where the global Accept All/Accept All didn't hide if Accept changes on file was triggered.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.2.0 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.2.0</h2>
<span class="version-date">February 16, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li>When selecting a screenshot, added a half-second delay before capturing to allow time for UI elements (like window selection boxes) to disappear.</li>
<li><strong>Git performance.</strong> Replaced most external <code>git</code> calls with <code>gix</code> for faster, more efficient Git operations.</li>
<li><strong>Git Commit message.</strong> Now uses the full git commit message instead of just the first line.</li>
<li><strong>Local AI refactoring.</strong> Refactored Local AI so that it's separate from the main AI flow for easier maintenance.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>Brand new App Icon.</strong> Redesigned app icon with a fresh, modern look.</li>
<li><strong>Git graph visualization.</strong> Implemented a Git graph of the 50 latest commits with a details popup for viewing commit information.</li>
<li><strong>Ollama Cloud support.</strong> Added support for Ollama Cloud. Requires an account at ollama.com.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li>Fixed text disappearing or flickering when sending new messages after loading a conversation from history.</li>
<li>Fixed scroll not going to bottom when loading an existing conversation from history.</li>
<li>**CodeMirror "Ranges must be added sorted" crash.** Three extensions could add decorations in unsorted order causing CodeMirror to crash:
<ul style="margin-top: 0.5rem; margin-left: 1rem; list-style: disc;">
<li><code>diffDecorations.ts</code> — Sort was <code>(from, to)</code> but CodeMirror requires <code>(from, startSide, to)</code>. Fixed by tracking <code>startSide</code> on each decoration and sorting by <code>(from, startSide, to)</code>.</li>
<li><code>rainbowBrackets.ts</code> — Visible ranges expanded to line boundaries could overlap, causing duplicate/unsorted bracket decorations. Fixed by tracking <code>maxProcessed</code> to skip already-processed positions and sorting all brackets before adding.</li>
<li><code>indentGuides.ts</code> — Same overlapping visible ranges risk. Fixed with <code>maxProcessed</code> guard.</li>
<li><strong>Chat UI.</strong> Fixed the chat and removed a lot of noisy cards.</li>
<li><strong>New Chat Creation.</strong> Fixed a bug when creating a new chat where the model received no data at all.</li>
<li><strong>Zaguán Coder Daemon.</strong> Removed artificial limitation on the number of turns models could do.</li>
<li><strong>Chat UI.</strong> Fixed the chat and removed a lot of noisy cards.</li>
<li><strong>New Chat Creation.</strong> Fixed a bug when creating a new chat where the model received no data at all.</li>
<li><strong>Zaguán Coder Daemon.</strong> Removed artificial limitation on the number of turns models could do.</li>
</ul>
<li><strong>Chat UI.</strong> Fixed the chat and removed a lot of noisy cards.</li>
<li><strong>New Chat Creation.</strong> Fixed a bug when creating a new chat where the model received no data at all.</li>
<li><strong>Zaguán Coder Daemon.</strong> Removed artificial limitation on the number of turns models could do.</li>
</li>
<li><strong>Chat becomes inert after UI reload.</strong> After a UI reload (e.g. crash recovery), the frontend's <code>loading</code> state was <code>false</code> even though the backend was still streaming. Added <code>get_chat_status</code> Tauri command that returns <code>true</code> if the backend is streaming. Frontend <code>init()</code> now calls <code>get_chat_status</code> and restores <code>loading = true</code> if the backend is still active. <em>Files: <code>chat.rs</code>, <code>lib.rs</code>, <code>useChat.ts</code></em></li>
<li><strong>Can't scroll to bottom after crash/reload.</strong> After reload, the scroll container starts at the top. The <code>isUserAtBottomRef</code> quickly becomes <code>false</code> from the scroll handler, so streaming auto-scroll stops working. Added an initial scroll-to-bottom effect that fires once when messages first load, ensuring the user sees the latest content and <code>isUserAtBottomRef</code> stays <code>true</code> for streaming auto-scroll. <em>Files: <code>ChatPanel.tsx</code></em></li>
<li>Fixed the Blade Terminal echo bug when the model is using the <code>run_command</code> tool call.</li>
<li>Fixed <code>run_command</code> tool calls in AI Chat appearing above already run (or failed) commands instead of below them.</li>
<li>Fixed bug in the Ollama and Ollama Cloud implementation that resulted in errors.</li>
<li><strong>Diff view showing up on wrong lines.</strong> Fixed issue where diff view would appear on incorrect lines due to stale data in the editor. Added proper cleanup and state invalidation when editor content changes. <em>Files: <code>DiffView.tsx</code>, <code>EditorPane.tsx</code></em></li>
<li><strong>Model selector sluggishness.</strong> Reduced avoidable work in the compact selector by memoizing derived lists and selected model. Removed delayed/smooth scroll on open (which can feel laggy) and switched to <code>requestAnimationFrame</code> + instant nearest scroll. <em>Files: <code>CompactModelSelector.tsx</code></em></li>
<li><strong>History titles missing.</strong> Added a resilient fallback title strategy: use <code>conversation.title</code> if present, else use <code>preview</code>, else synthesize from last active timestamp (<code>Conversation X ago</code>). <em>Files: <code>HistoryTab.tsx</code></em></li>
<li><strong>Natural chat autoscroll + user can interrupt with wheel.</strong> Reworked autoscroll to use the real scroll container ref. Split behavior: scroll on new message if user is at bottom / just sent; during streaming, only keep following while user remains at bottom. This preserves manual scroll interruption. <em>Files: <code>ChatPanel.tsx</code></em></li>
<li><strong>Settings save feels slow.</strong> Changed save flow to close modal immediately, then persist in background. Keeps UI responsive while save + model refresh continue asynchronously. <em>Files: <code>SettingsModal.tsx</code></em></li>
<li><strong>General snappiness + launch flicker.</strong> Removed duplicate no-tab editor rendering path that could cause visual churn. Tightened startup flow to show window after first frame and fade out loading overlay immediately (no extra nested delays). <em>Files: <code>Layout.tsx</code>, <code>main.tsx</code></em></li>
<li><strong>Modernized title bar buttons.</strong> Updated window controls to compact rounded buttons with tighter spacing and better active feedback. <em>Files: <code>TitleBar.tsx</code></em></li>
<li><strong>Terminal too close to sidebar shadow.</strong> Increased left padding in terminal content area. <em>Files: <code>TerminalPane.tsx</code></em></li>
<li><strong>Fixed crash in read_file_range on out-of-bounds slice.</strong> Added bounds clamping to prevent panic when requesting lines beyond EOF (e.g., start_line: 350 on a 259-line file). Now returns safe empty output for extreme or inverted ranges instead of crashing.</li>
<li><strong>Fixed reasoning blocks being dropped during final answer transition.</strong> Changed filter logic to preserve reasoning blocks when clearing stale text content. <em>Files: <code>useChat.ts</code></em></li>
<li><strong>Fixed caret sync issues in Command Center textarea.</strong> Added shared autosize helper for consistent height updates and implemented explicit <code>Shift+Enter</code> newline insertion with proper caret position restoration. <em>Files: <code>CommandCenter.tsx</code></em></li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">📦</span>
Dependencies Updated
</h3>
<p class="updates-intro">Comprehensive dependency upgrade across frontend and Rust ecosystem.</p>
<table class="updates-table">
<thead>
<tr>
<th>Package</th>
<th>From</th>
<th>To</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@codemirror/commands</code></td>
<td>6.10.1</td>
<td>6.10.2</td>
</tr>
<tr>
<td><code>@codemirror/lint</code></td>
<td>6.9.2</td>
<td>6.9.3</td>
</tr>
<tr>
<td><code>@codemirror/view</code></td>
<td>6.39.11</td>
<td>6.39.13</td>
</tr>
<tr>
<td><code>@tauri-apps/api</code></td>
<td>2.9.1</td>
<td>2.10.1</td>
</tr>
<tr>
<td><code>@tauri-apps/cli</code></td>
<td>2.9.6</td>
<td>2.10.0</td>
</tr>
<tr>
<td><code>@tauri-apps/plugin-shell</code></td>
<td>2.3.4</td>
<td>2.3.5</td>
</tr>
<tr>
<td><code>i18next</code></td>
<td>25.8.0</td>
<td>25.8.4</td>
</tr>
<tr>
<td><code>pdfjs-dist</code></td>
<td>5.4.530</td>
<td>5.4.624</td>
</tr>
<tr>
<td><code>@types/react</code></td>
<td>19.2.10</td>
<td>19.2.13</td>
</tr>
<tr>
<td><code>@vitejs/plugin-react</code></td>
<td>5.1.2</td>
<td>5.1.4</td>
</tr>
</tbody>
</table>
<h4 class="subsection-title">Rust Crates - Safe Updates</h4>
<table class="updates-table">
<thead>
<tr>
<th>Crate</th>
<th>From</th>
<th>To</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>clap</code></td>
<td>4.5.54</td>
<td>4.5.57</td>
</tr>
<tr>
<td><code>regex</code></td>
<td>1.12.2</td>
<td>1.12.3</td>
</tr>
<tr>
<td><code>tempfile</code></td>
<td>3.24.0</td>
<td>3.25.0</td>
</tr>
<tr>
<td><code>uuid</code></td>
<td>1.19.0</td>
<td>1.20.0</td>
</tr>
</tbody>
</table>
<h4 class="subsection-title">Rust Crates - Breaking Updates</h4>
<ul class="breaking-updates-list">
<li>
<strong><code>tauri</code> (2.9.5 → 2.10.2)</strong>
<br><span class="update-detail">No code changes required. Unblocked plugin support and JavaScript improvements.</span>
</li>
<li>
<strong><code>tree-sitter</code> (0.24 → 0.26)</strong>
<br><span class="update-detail">Updated <code>node.child(i)</code> to <code>node.child(i as u32)</code> to match new API.</span>
</li>
<li>
<strong><code>notify</code> (6.1.1 → 8.2.0)</strong>
<br><span class="update-detail">No code changes required. API remains compatible.</span>
</li>
<li>
<strong><code>reqwest</code> (0.12.28 → 0.13.2)</strong>
<br><span class="update-detail">Removed <code>rustls-tls</code> feature (now default in new version).</span>
</li>
<li>
<strong><code>rusqlite</code> (0.32 → 0.38)</strong>
<br><span class="update-detail">No code changes required. API remains compatible.</span>
</li>
<li>
<strong><code>tokio-tungstenite</code> (0.21 → 0.28)</strong>
<br><span class="update-detail"><code>WebSocketConfig</code> now mutable default. <code>Message::Text</code> and <code>Message::Ping</code> take <code>Utf8Bytes</code> and <code>Bytes</code> respectively (converted using <code>.into()</code>).</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.1.1 Section -->
<section class="changelog-section">
<div class="container">
<div class="version-card version-latest">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.1.1</h2>
<span class="version-date">February 9, 2026</span>
</div>
<span class="version-badge badge-previous">Previous</span>
</div>
<div class="version-content">
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
New Features
</h3>
<ul class="changes-list">
<li><strong>PDF support.</strong> The editor can now load PDFs natively.</li>
<li><strong>Screenshot support.</strong> Capture window or select region and attach to chat.</li>
<li><strong>Upload image.</strong> Upload images directly to chat.</li>
<li><strong>Paste image.</strong> Paste images from clipboard into chat.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">✨</span>
Enhancements
</h3>
<ul class="changes-list">
<li><strong>Git implementation is now complete.</strong> Full Git integration ready for use.</li>
<li><strong>Added tooltips</strong> on the buttons in the sidebar.</li>
<li><strong>Adjustments in the status bar.</strong> Improved status bar layout and information.</li>
</ul>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li>Fixed the Blade Terminal input and output where it used to show escape characters.</li>
<li>Fixed issue where the chat would sometimes show garbled response.</li>
<li>Hide Search icon because functionality not yet implemented.</li>
<li>Open tab now shows the Close button.</li>
<li>After closing a tab, go to the previously open tab.</li>
<li>Plus many bug fixes.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.1.0 Section -->
<section class="changelog-section section-alt">
<div class="container">
<div class="version-card">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.1.0</h2>
<span class="version-date">February 4, 2026</span>
</div>
<span class="version-badge badge-initial">Initial</span>
</div>
<div class="version-content">
<div class="initial-release">
<div class="initial-icon">🚀</div>
<p class="initial-text">
The very first release of Zaguán Blade. This marks the beginning of our journey to create the ultimate AI-native code editor.
</p>
</div>
</div>
</div>
</div>
</section>
</main>
</BaseLayout>
<style>
/* Changelog Page Specific Styles */
/* Hero */
.changelog-hero {
min-height: 35vh;
display: flex;
align-items: center;
padding-top: calc(var(--space-2xl) + 60px);
padding-bottom: var(--space-lg);
background: linear-gradient(180deg, var(--color-bg) 0%, var(--color-bg-secondary) 100%);
border-bottom: 1px solid var(--color-border);
}
.changelog-hero .hero-content {
max-width: 800px;
}
.hero-label {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-accent);
letter-spacing: 0.1em;
margin-bottom: var(--space-sm);
}
.hero-title {
margin-bottom: var(--space-md);
}
.title-line-1 {
display: block;
font-size: clamp(2rem, 6vw, 3.5rem);
font-weight: 900;
line-height: 0.95;
letter-spacing: -0.03em;
text-transform: uppercase;
}
.title-accent {
display: block;
font-size: clamp(1rem, 2.5vw, 1.25rem);
font-weight: 700;
color: var(--color-accent);
font-family: var(--font-mono);
margin-top: 0.25rem;
letter-spacing: 0.05em;
}
.hero-description {
font-size: 1rem;
color: var(--color-text-secondary);
line-height: 1.6;
max-width: 600px;
}
/* Changelog Sections */
.changelog-section {
padding: var(--space-xl) 0;
}
.section-alt {
background: var(--color-bg-secondary);
}
/* Version Cards */
.version-card {
background: var(--color-bg);
border: 1px solid var(--color-border);
padding: var(--space-lg);
position: relative;
}
.version-latest {
border-color: var(--color-accent);
background: linear-gradient(135deg, var(--color-bg-elevated) 0%, var(--color-bg) 100%);
}
.version-latest::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: var(--color-accent);
}
/* Version Header */
.version-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--space-lg);
padding-bottom: var(--space-md);
border-bottom: 1px solid var(--color-border);
flex-wrap: wrap;
gap: var(--space-sm);
}
.version-info {
display: flex;
align-items: baseline;
gap: var(--space-md);
flex-wrap: wrap;
}
.version-number {
font-size: 1.75rem;
font-weight: 900;
text-transform: uppercase;
letter-spacing: -0.02em;
color: var(--color-text);
}
.version-date {
font-family: var(--font-mono);
font-size: 1rem;
color: var(--color-text-secondary);
letter-spacing: 0.05em;
}
.version-badge {
font-family: var(--font-mono);
font-size: 0.7rem;
padding: 0.4rem 0.8rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.badge-latest {
background: var(--color-accent);
color: var(--color-bg);
}
.badge-initial {
background: var(--color-bg-elevated);
color: var(--color-text-secondary);
border: 1px solid var(--color-border);
}
.badge-previous {
background: var(--color-bg-elevated);
color: var(--color-text-secondary);
border: 1px solid var(--color-border);
}
.version-development {
border-color: #f59e0b;
background: linear-gradient(135deg, var(--color-bg-elevated) 0%, var(--color-bg) 100%);
}
.version-development::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
}
.badge-development {
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
color: var(--color-bg);
}
/* Version Content */
.version-content {
display: grid;
gap: var(--space-lg);
}
/* Changes Section */
.changes-section {
background: var(--color-bg);
border: 1px solid var(--color-border);
padding: var(--space-md);
}
.version-latest .changes-section {
background: var(--color-bg-secondary);
}
/* Updates Tables */
.updates-intro {
color: var(--color-text-secondary);
margin-bottom: var(--space-md);
font-size: 0.95rem;
}
.subsection-title {
font-size: 0.9rem;
font-weight: 700;
color: var(--color-text);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: var(--space-md);
margin-bottom: var(--space-sm);
font-family: var(--font-mono);
}
.updates-table {
width: 100%;
border-collapse: collapse;
margin-bottom: var(--space-md);
font-size: 0.9rem;
}
.updates-table thead {
background: var(--color-bg-elevated);
border-bottom: 2px solid var(--color-border);
}
.updates-table th {
padding: var(--space-xs) var(--space-sm);
text-align: left;
font-weight: 700;
color: var(--color-text);
font-family: var(--font-mono);
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.updates-table td {
padding: var(--space-xs) var(--space-sm);
border-bottom: 1px solid var(--color-border);
color: var(--color-text-secondary);
}
.updates-table code {
background: var(--color-bg-elevated);
padding: 0.2rem 0.4rem;
border-radius: 0.25rem;
font-family: var(--font-mono);
color: var(--color-accent);
font-size: 0.9em;
}
.breaking-updates-list {
list-style: none;
margin-top: var(--space-md);
}
.breaking-updates-list li {
padding: var(--space-sm);
margin-bottom: var(--space-sm);
background: var(--color-bg-elevated);
border-left: 3px solid var(--color-accent);
border-radius: 0.25rem;
}
.breaking-updates-list strong {
color: var(--color-text);
font-family: var(--font-mono);
display: block;
margin-bottom: 0.25rem;
}
.breaking-updates-list code {
background: var(--color-bg);
padding: 0.2rem 0.4rem;
border-radius: 0.25rem;
font-family: var(--font-mono);
color: var(--color-accent);
font-size: 0.9em;
}
.update-detail {
font-size: 0.9rem;
color: var(--color-text-secondary);
}
.changes-title {
display: flex;
align-items: center;
gap: var(--space-xs);
font-size: 0.9rem;
font-weight: 700;
text-transform: uppercase;
margin-bottom: var(--space-sm);
color: var(--color-accent);
font-family: var(--font-mono);
letter-spacing: 0.05em;
}
.changes-icon {
font-size: 1rem;
}
.changes-list {
list-style: none;
}
.changes-list li {
padding: 0.35rem 0;
border-bottom: 1px solid var(--color-border);
color: var(--color-text-secondary);
line-height: 1.5;
padding-left: var(--space-md);
position: relative;
}
.changes-list li:last-child {
border-bottom: none;
}
.changes-list li::before {
content: '';
position: absolute;
left: 0;
color: var(--color-accent);
font-weight: 700;
}
.changes-list li strong {
color: var(--color-text);
}
.changes-list li a {
color: var(--color-accent);
text-decoration: underline;
text-underline-offset: 3px;
transition: color 0.2s ease;
}
.changes-list li a:hover {
color: var(--color-text);
}
/* Initial Release */
.initial-release {
text-align: center;
padding: var(--space-lg);
}
.initial-icon {
font-size: 3rem;
margin-bottom: var(--space-md);
}
.initial-text {
font-size: 1rem;
color: var(--color-text-secondary);
line-height: 1.6;
max-width: 600px;
margin: 0 auto;
}
/* Responsive */
@media (max-width: 768px) {
.changelog-hero {
min-height: auto;
padding-top: calc(var(--space-2xl) + 60px);
}
.version-header {
flex-direction: column;
align-items: flex-start;
}
.version-info {
flex-direction: column;
gap: var(--space-xs);
}
.version-number {
font-size: 1.75rem;
}
}
/* Screenshot Showcase */
.screenshot-showcase {
padding: var(--space-2xl) 0;
background: var(--color-bg-secondary);
border-top: 1px solid var(--color-border);
border-bottom: 1px solid var(--color-border);
}
.showcase-header {
text-align: center;
margin-bottom: var(--space-xl);
}
.showcase-label {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-accent);
letter-spacing: 0.1em;
margin-bottom: var(--space-sm);
text-transform: uppercase;
}
.showcase-title {
font-size: clamp(1.75rem, 4vw, 2.5rem);
font-weight: 900;
text-transform: uppercase;
letter-spacing: -0.02em;
color: var(--color-text);
margin-bottom: var(--space-sm);
}
.showcase-subtitle {
font-size: 1rem;
color: var(--color-text-secondary);
line-height: 1.6;
max-width: 600px;
margin: 0 auto;
}
.showcase-grid {
display: flex;
justify-content: center;
}
.showcase-item {
width: 100%;
max-width: 1200px;
}
.showcase-image-wrapper {
position: relative;
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
border: 1px solid var(--color-border);
}
.showcase-image {
display: block;
width: 100%;
height: auto;
max-width: 1400px;
margin: 0 auto;
}
.showcase-caption {
padding: var(--space-md) var(--space-lg);
font-family: var(--font-mono);
font-size: 0.85rem;
color: var(--color-text-secondary);
background: var(--color-bg);
border-top: 1px solid var(--color-border);
}
@media (max-width: 768px) {
.screenshot-showcase {
padding: var(--space-lg) 0;
}
.showcase-title {
font-size: 1.5rem;
}
.showcase-subtitle {
font-size: 0.95rem;
}
}
</style>