You've already forked zblade.dev
f3e14646b2
- Set v0.3.3 date to February 28, 2026 and status to Latest - Move v0.3.2 badge from Latest to Previous - Add terminal note about removing horizontal resize bar - Bump package version to 0.3.3
1043 lines
43 KiB
Plaintext
1043 lines
43 KiB
Plaintext
---
|
||
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.3.3 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.3</h2>
|
||
<span class="version-date">February 28, 2026</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>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>
|
||
</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>
|
||
</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>
|
||
</ul>
|
||
</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>
|