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