Files
zblade.dev/src/pages/changelog.astro
T

1162 lines
50 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-development">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.4.0</h2>
<span class="version-date">TBD</span>
</div>
<span class="version-badge badge-development">Development</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 a <code>tool_search</code> tool based on the Anthropic documentation to help reduce initial token usage.</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>Themes.</strong> Added theme support with two themes: the original dark theme and a new Blade Coder theme.</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 the Gemini continuation thinking bug.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.3.4 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.3.4</h2>
<span class="version-date">2026-03-05</span>
</div>
<span class="version-badge badge-latest">Latest</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>