# Changelog All notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.39.0] - 2026-11-10 ### Added - **Camera:** Take photos directly from the composer and attach them to messages. - **Notifications:** Get alerts when replies are ready, tools need approval, or the agent asks a question. - **Share:** Send text, links, photos and files into oxi from other apps. - **Agent questions:** View and respond to agent questions as forms instead of simple approvals. - **Git:** View changed files and diffs, stage, commit with optional generated messages, pull, push, and browse recent commits. - **Chat persistence:** Drafts and open chats survive the app being backgrounded or killed. - **Agent checklist:** See the agent's plan and context usage above the composer. - **Reply actions:** Copy and share replies, jump to the end of a conversation. ## [1.38.0] - 2026-11-09 ### Added - **Editor:** View Git and current versions of images side by side or with a swipe divider in image tabs. - **UI:** Modal dialogs for pull requests, import sessions, and remote operations. - **UI:** Dialog review gallery for testing dialogs and inline components. ### Changed - **UI:** Replaced small buttons across panels with consistent mini_button and dismiss_button components. - **Markdown:** Tables now fit within available width and balance column sizes based on content. - **Editor:** Active tab automatically scrolls into view when selected. - **UI:** Improved spacing and alignment in file picker, activity log toolbar, and suggestion cards. - **UI:** Clearer error messages for stream failures. ## [1.37.0] - 2026-11-08 ### Added - **Chat:** Search across all saved chats in your workspace with the new chat_search tool. - **Agent:** Use `/learn [focus]` to turn chat corrections into numbered candidate rules, then save picked ones as project rules that apply to all future chats. - **Chat:** Open any saved chat by ID with the chat_read tool. ## [1.36.0] - 2026-11-06 ### Added - **Agent:** Computer use mode lets agents control your desktop, keyboard, and mouse when enabled in settings. - **Agent:** Computer use tools skip approval checks while the feature is on; plan mode still blocks them. - **Settings:** Computer use switch in Agent panel with version and accessibility state display for each machine. - **SSH:** Computer use setting syncs to connected SSH servers, which install and manage it automatically. - **CLI:** `oxi computer-use-mcp` command fetches the latest agent-desktop release, verifies it, and runs the MCP server. ## [1.35.0] - 2026-11-06 ### Added - **Agent:** Declare elicitation capability so Claude can ask questions during autonomous turns and handle MCP forms without auto-declining them. - **Remote:** Agent option changes now sync to the server, so the agent mode matches what you see in the picker on SSH workspaces. ### Fixed - **Remote:** Tool approval requests no longer keep appearing after changing agent options on SSH workspaces. ## [1.34.0] - 2026-11-05 ### Added - **Android:** Attach photos and files to messages with a composer menu. - **Android:** Evidence mode to create per-reply reports with claims, checks, and captured screenshots. - **Server:** Accept file attachments and automatically extract text from PDFs, Word, Excel, PowerPoint, and OpenDocument files. - Sent images now appear in your message for reference. ### Fixed - **Android:** Sent messages no longer appear twice in the chat. ## [1.33.1] - 2026-11-03 ### Fixed - **Windows:** Console windows no longer flash when checking Claude quota, capturing evidence, generating video thumbnails, or pushing pull requests. ### Security - Updated markdown parser to patch RUSTSEC-2026-0433. ## [1.33.0] - 2026-10-30 ### Added - **Scratchpad:** Save scratchpad content as files directly from the editor ### Changed - **File handling:** File saves now use atomic writes to prevent data loss on interruption - **Remote files:** Improved remote file system operations for better reliability ### Fixed - **Authentication:** Removed unnecessary password prompts on macOS - **Claude integration:** Fixed token usage reporting ## [1.32.0] - 2026-10-30 ### Added - **Agent providers:** OpenCode CLI is now available as a managed ACP provider with automatic installation and updates. - **Agent management:** Idle agents automatically relaunch when their underlying tools are updated in the background, ensuring prompts use the latest version. ### Changed - **App icon:** Updated application icon across platforms. ## [1.31.2] - 2026-10-30 ### Fixed - Chat titles now display correctly in the agent panel - Empty line formatting issues resolved ## [1.31.1] - 2026-10-30 ### Fixed - Various UI and stability issues throughout the application ## [1.31.0] - 2026-10-30 ### Added - **Delegation:** Agents can hand tasks to other providers through delegate_task, task_status and task_cancel tools; delegated tasks run in their own chat with optional new work trees and setup scripts. - **Recovery:** Chat turns are journaled to disk; if the app crashes, interrupted turns show which tool calls are safe to repeat and which may have changed files, with options to continue or dismiss. - **Diff comments:** Comment on any diff line in the editor; comments attach to your next message so the agent addresses them all at once. - **Work tree setup:** Repositories can define a setup script that runs in new work trees before the agent starts, with progress shown above the composer. - **Steering:** While oxi's own agent is responding, queued messages now offer Steer to hand them to the running turn, which answers them in the same response. - **Checkpoints:** Turn snapshots are kept with git refs; you can rewind to any message and optionally restore the files it changed from saved snapshots. - **Work tree removal:** Removing a work tree now shows what would be lost (uncommitted changes, untracked files, unique commits) before deleting. - **Status bar:** Context usage, subscription windows and token speed moved from the composer to the status bar with reset times and costs on hover. - **Chat history tool:** ACP agents can now read the full chat history with the new chat_read tool, with numbered turns for better handoffs. - **Helper CLIs:** Commit message and chat title drafts now work with Claude Code and Codex CLIs as helper models. ### Changed - **Performance:** Delegation mailboxes are read only when requests arrive, and CLI helper lookups no longer block the runtime. - **Performance:** File change lists are computed off the UI thread when snapshots are taken, not during rendering. - **Performance:** Subagent transcript saves are debounced to once per two seconds instead of on every update. - **UI:** Syntax highlighting is reused while Markdown rehighlights, eliminating flashes of plain text. - **Subagents:** Only live, recently heard-from children keep the chat's spinner and keep-awake; waiting or disconnected ones do not. ### Fixed - **Recovery:** Turn journals now close properly however a turn ends (stopped by user, agent crash, etc.), so the next turn runs with a journal and restarts report the correct state. - **Helpers:** Claude Code and Codex CLI early exits (broken pipe) are now handled correctly instead of treated as errors. ## [1.30.0] - 2026-10-29 ### Added - **Editor:** Close All Tabs command available from the open-tabs menu, tab context menu, File menu, and command palette. - **Workspaces:** Optional work tree removal when deleting a chat, with work trees now displayed under their parent checkout header. ### Changed - **Settings:** Redesigned to match the chat UI with flat sections, label-left/control-right layout, and a sidebar similar to the chat panel. - **Settings:** Consolidated Terminal settings into Editor and notifications into General, with rarely used options folded away. - **Theme:** New installs now default to the Zed theme with IBM Plex Sans and Lilex fonts. ## [1.29.0] - 2026-10-29 ### Added - **Git:** Delete branches directly from the panel with a hover button or context menu, including force-delete for unmerged branches. ### Changed - **Git:** Tab style in the Git panel changed from rounded pills to underline strips for a cleaner look. ## [1.28.0] - 2026-10-28 ### Added - **Desktop app:** Full-featured Tauri client with editor, chat, Git panel, and terminal integrated in one window. - **Theme:** New Zed theme with IBM Plex Sans and Lilex fonts for interface and code. - **Settings:** Headless API for managing app configuration. ### Fixed - **Security:** Updated pulldown-cmark to address RUSTSEC-2026-0414. ## [1.27.0] - 2026-10-27 ### Added - **Server:** Run oxi as a background service on macOS (LaunchAgent), Linux (systemd), and Windows (Run entry) to accept connections from phones. - **Android:** Native oxi app for Android with live chat, tool calls, approvals, QR pairing, and auto-update from GitHub releases. - **Phone pairing:** Connect Android devices to your desktop server over Tailscale using a pairing token, with optional local network mode. - **Settings:** New Server & phone panel to manage server startup, allow phone connections, and view the pairing QR code. - **Documentation:** Added server.md guide for running the server and pairing phones. ## [1.26.0] - 2026-10-26 ### Added - **Remote:** Connect to and work with SSH-hosted oxi workspaces, including remote chats, file access, Git operations, search, and terminals with managed macOS server setup. - **Chat:** Open side-by-side conversations with mirrored prompts and worktree splits for parallel work. - **Evidence:** Enable evidence mode per chat to have the agent capture before/after screenshots, run checks, and submit claims for verification of its actions. - **Settings:** Search across all settings and provider options from a gear icon in the status bar; settings now save only when changed. ### Fixed - **Editor:** Stop selection from flickering when pressing Escape or right-clicking in the chat transcript. - **Remote:** Handle Windows path separators correctly in remote workspaces. - **Platform:** Fix macOS server helpers to work correctly on all platforms. ## [1.25.0] - 2026-10-24 ### Added - **Agent:** Scratchpad is now available to agents for reading and writing shared notes. - **Editor:** Concurrent changes from multiple sources merge automatically using three-way merge logic. ## [1.24.0] - 2026-10-24 ### Added - **Editor:** Multiple selections with Cmd+D, Cmd+K Cmd+D, Ctrl+Cmd+G, Cmd+Shift+L, Ctrl+Shift+Up/Down, Cmd+click, and Alt/middle-drag column selection. - **Editor:** Code folding by indentation with gutter arrows, fold markers, and keyboard shortcuts (Cmd+Alt+[/], Cmd+K Cmd+0-9). - **Editor:** Sublime Text typing model with auto-paired brackets and quotes, auto-indent on Enter, tab stops, and whole-line copy/cut/paste. - **Editor:** Buffer-word auto-complete, bookmarks (Cmd+F2 / F2), case/sort/transpose operations, expand to brackets/indentation, and jump back/forward. - **Editor:** Hanging indent for wrapped lines, scroll past end, current-line highlight, and whitespace drawing. - **Settings:** Editor panel to customize font size (Cmd +/-/0), word wrap, minimap, highlights, trim/newline on save, and auto-complete with live preview. - **Status bar:** Shows line/column or selection regions, spaces menu, and syntax indicator that can be changed per tab. - **Editor:** Scroll position is remembered per tab; diffs now use the editor font. ## [1.23.0] - 2026-10-24 ### Added - **Sidebar:** Silent agents now show a warning dot instead of a spinner, with hover tooltip showing how long they've been quiet. - **Chat:** Find text with Cmd/Ctrl+F. - **Chat:** Switch between chats using Goto Anything (# or Cmd/Ctrl+Shift+O) or Ctrl+Tab. - **Chat:** Unsent message drafts are now saved and restored when you restart the app. - **Chat:** Distraction Free mode hides the sidebar and panels (Ctrl+Cmd+Shift+F on Mac, Shift+F11 elsewhere). - **Chat:** Show 'Working' status under interim agent text, and offer Stop or Continue options after long silence instead of spinning indefinitely. ### Changed - **Composer:** Redesigned with a single-row layout where secondary options collapse as the window narrows, with clearer visual hierarchy. - **Chat:** Transcript stays steady while resizing during live answers, and narrow transcripts no longer obscured by the scroll bar. - **Editor:** Ctrl+Tab now navigates between open files instead of switching chats. - **Focus:** App and headless daemon now stay awake while an agent is working. - **Sidebar:** Clearer selection and keyboard focus indicators. ### Security - Updated crypto-bigint dependency to address RUSTSEC-2026-0387. ## [1.22.0] - 2026-10-23 ### Added - **Agent sessions:** Import and resume external ACP sessions, with workspace dialog to list, replay, and bind them. - **Agent review:** Review a response's changes with another agent—send diffs to a peer model in the same chat and apply fixes back. - **Session tracking:** Agent-generated titles and reported costs are now preserved. ### Changed - **Composer:** Task checklists now show only during a turn and after failures, clearing stale progress between turns. - **Editor:** Unsaved buffers are read and agent writes apply as undoable edits. - **Permissions:** Permission requests are preserved between autonomous turns. - **Forked chats:** Now stay independent of mutable parent sessions. ### Fixed - Unsupported images are rejected with explanations and incomplete stop reasons are now handled. ## [1.21.2] - 2026-10-23 ### Fixed - **Linux:** Tools, agents, and system Git now access environment variables from your login shell (like those set in ~/.bashrc), matching the integrated terminal's behavior. - **Linux:** oxi now creates a menu entry in your applications launcher on startup and install. ### Security - Updated dependencies to address security advisories. ## [1.21.1] - 2026-10-20 ### Fixed - **Agent:** Retry and recover when a model writes tool calls as plain text instead of structured format, with up to two automatic correction attempts. - **Agent:** Show accurate retry status messages ('Retrying') instead of misleading 'Connection lost' errors for tool-call and context-overflow retries. ## [1.21.0] - 2026-10-19 ### Added - **Terminal UI:** Run oxi as a Claude Code-style terminal interface with built-in editor, Git panel, and terminal. ### Changed - **Context management:** Agent now trims older tool outputs and arguments when context windows are small, keeping recent work intact instead of failing. - **Error recovery:** Context overflow errors automatically retry with a tighter budget rather than stopping the turn. - **Regenerate:** Shows how many files will be undone when editing the last prompt. ### Fixed - **Daemon:** No longer claims the controlling terminal, allowing it to run cleanly in the background. ## [1.20.0] - 2026-10-16 ### Added - **Headless:** Shared daemon that relays between all editor instances, keeping chats running in the background and syncing across windows. - **Chat:** Live synchronization between the app and headless daemon so neither overwrites the other's newer files. - **Sublime:** Delete chats from the chat list using Delete/Backspace or context menu. - **Sublime:** Paste screenshots with Cmd/Ctrl+V or attach image files; images in messages open as links in the transcript. - **Installer:** ACP installer now installs platform packages that npm skipped (missing agent SDK native binary). ### Added - **Sublime Text:** Paste a screenshot with Cmd/Ctrl+V or attach image files from the composer; images in sent messages open from the transcript. - **Sublime Text:** Delete chats from the chat list with Delete/Backspace or its context menu. - **Headless mode:** One background daemon is shared by every editor and window, so a chat streams live wherever it is open and keeps running after the editor closes. ### Changed - **Chat:** The app reloads chats changed by editors, and editors reload chats changed by the app, so neither overwrites the other. ### Fixed - **Agents:** The installer adds agent SDK platform packages npm skipped, fixing sessions failing with a missing native binary. ## [1.19.0] - 2026-10-15 ### Added - **Sublime Text:** New package for Sublime Text that connects to oxi's chat engine, with chat list, transcript, file attachments, and Markdown styling. - **Headless mode:** `oxi headless` runs the chat engine over stdio with JSON commands for chats, prompts, approvals, and configuration. - **Chat:** Provider usage windows now display in the composer toolbar. - **Chat:** Image files can be attached to prompts. - **Installers:** Sublime Text package is automatically installed when Sublime is present (configurable with OXI_SUBLIME environment variable). ### Changed - **Chat:** Image tabs now close cleanly without leaving orphaned files. ## [1.18.0] - 2026-10-14 ### Added - **Fonts:** Support for Arabic, Hebrew, Devanagari, Armenian, Georgian, and mathematical symbols; system fonts for CJK characters load on startup instead of bundling. - **Agents:** Google Antigravity provider available through official ACP server with Google or Gemini API key sign-in. - **Chat:** Preserve conversations when switching between agents and resume after quota resets. - **UI:** Selectable and clickable markdown links with accent color and underline; copy button on blockquotes. - **Settings:** Show agent configuration options in the composer before launch completes, with defaults remembered from previous launches. ### Changed - **Fonts:** Default interface font changed to Inter, code font to JetBrains Mono; Noto Sans and Ubuntu Mono remain as fallbacks. - **Settings:** ACP model card removed in favor of composer pickers; test launch moved to Connection panel. - **Agents:** Context window defaults to 1M for ACP agents, which now handle their own compaction. ### Fixed - **UI:** Select menus and options now have accessible labels for screen readers and UI tests. - **Security:** Updated rustls to 0.23.46 for security fixes. ## [1.17.1] - 2026-10-14 ### Fixed - **Agent:** mkdir now creates missing parent directories for nested paths like `src/main/java/com/example`, allowing models to scaffold project structures. - **Composer:** Empty-draft hint now displays correctly without being covered by the caret. ## [1.17.0] - 2026-10-13 ### Added - **Agent:** Configure idle timeout and maximum concurrent agents in Settings → Agent → Limits - **Agent:** Agents warm up in the background while you compose a message, reducing latency when you send - **Approvals:** 'Always allow here' option on tool approvals, saved per workspace and applied to all agents in that workspace ### Changed - **Agent:** Idle agents stop automatically after 15 minutes; the least recently used agent stops if more than 4 are running - **Agent:** Agent sessions resume on relaunch with previously selected permission mode and fast mode restored - **Agent:** One subprocess per chat shared between warm-up and message sending, reducing overhead ## [1.16.0] - 2026-10-13 ### Added - **Tool calls:** Choose between Minimal (pills only), Balanced (current behavior), or Expanded (auto-unfold output and diffs) display modes. - **Updates:** Install new releases in the background and restart when ready; automatic updates can be toggled in About. ### Changed - **Updates:** Check for new releases every 6 hours instead of only at startup. ## [1.15.0] - 2026-10-13 ### Added - **Search:** Find in Files mode (Cmd/Ctrl+Shift+F) with regex, case sensitivity, whole word matching, include globs, and Replace All. - **Search:** Find References (Shift+F12) to locate all uses of an identifier in scope, skipping comments and strings. - **Agent:** Search and grep commands now respect .gitignore, .ignore, and git excludes when scanning your codebase. ### Fixed - **UI:** Tool output now attaches directly to its pill instead of appearing as a separate box. - **UI:** Spinner no longer renders as a blob at small sizes; stroke scales with text size. - **UI:** Reduced gap between consecutive tool pills. - **UI:** Sub-second reasoning displays as 'Thought' instead of 'Thought for 0s'. - **Git panel:** Ahead/behind counts stay visible when branch names are long; counts layout from the right to avoid being pushed out. - **Turn changes:** File paths no longer push the Revert button out of view; card layout is more even and consistent. ## [1.14.0] - 2026-10-13 ### Added - **UI:** Native macOS menu bar with File, Edit, Selection, View, Go, Chat, Window, and Help menus, with toggles shown as check marks. - **UI:** Command palette accessible via Cmd/Ctrl+Shift+P or `>` in the file picker, showing all commands with shortcuts and recent history. - **UI:** Cmd/Ctrl+W closes the active editor tab. - **UI:** Cmd/Ctrl+, opens Settings. - **UI:** Ctrl+` toggles the terminal on macOS. ### Fixed - **UI:** Text now centers optically in rows, fixing misaligned selections, highlights, and carets. - **UI:** Inline code in chat displays as rounded pills with proper spacing. - **UI:** Find matches in the editor render as rounded highlights on row geometry instead of square backgrounds that merged across lines. ## [1.13.0] - 2026-10-13 ### Added - **Providers:** Add GitHub Copilot over ACP with support for Copilot plans and optional token authentication. - **Chat:** Copy selected text directly from the message context menu. ### Changed - **Chat:** Text selection is now preserved when opening the message menu. - **Chat:** Transcript layout is cached during window resizing for smoother performance on large conversations. ## [1.12.0] - 2026-10-12 ### Added - **Providers:** Meta Muse API and Muse Code ACP providers now available for model selection ### Fixed - **Sidebar:** Pressing Enter now confirms chat renames instead of requiring Escape ## [1.11.3] - 2026-10-11 ### Added - **Agent:** Display turns that the agent initiates between user prompts, so the chat stays current during background work and scheduled wake-ups. ### Changed - **Performance:** Session saves are 3x faster (~8 ms instead of ~23 ms) by reducing unnecessary disk syncs and avoiding large memory clones. - **Performance:** Spinners no longer force the window to redraw at display refresh rate, cutting CPU usage and frame rate during agent runs. ### Fixed - **Agent:** Agent turns now end properly when updates arrive between prompts, fixing the chat appearing stuck on 'I'll report back when it finishes'. ## [1.11.2] - 2026-10-09 ### Fixed - **Agent:** Tool calls with malformed JSON are now automatically repaired (removing code fences, fixing double-encoding) or reported back to the model with the original arguments so it can retry. - **Agent:** Replayed tool calls in conversation history now use repaired arguments instead of empty objects, preventing failures when retrying with local models. ## [1.11.1] - 2026-10-08 ### Fixed - **Diff editor:** Selected text now stays visible and selection no longer hides content across multiple rows. - **Chat:** Thinking timer no longer carries over elapsed time from previous conversations. - **Settings:** Opening the Router tab no longer marks settings as unsaved. ## [1.11.0] - 2026-10-07 ### Added - **Editor:** Native diff mode in editor tabs with live editing on the right, read-only base on the left, word highlights, overview ruler, and F7 navigation. - **Editor:** Stage and Discard actions on diff changes via hover menu. - **Editor:** Live Markdown preview in the editor. - **Sidebar:** Remove any workspace, including the launch folder; the last removal shows an empty sidebar with an Open folder prompt. ### Changed - **Diffs:** Gutter quick diff peek now opens the full diff at that change instead of a separate view. - **Diffs:** Diff text selection now works like the editor with drag, Shift+click, double/triple click, Cmd+A, and copy. - **Diffs:** File header Open button now stays visible when hovering. ### Removed - **Diffs:** Separate patch view for unsaved changes and in-chat diffs (now use editor tabs). ### Fixed - **Markdown:** Windows image URIs now work with the preview loader. - **Composer:** Text no longer dims while typing. ### Changed - **Editor:** File diffs (working tree, staged, branch compare, agent turn, unsaved changes) open in the editor tab itself: the file stays editable, side by side or inline, with word highlights, an overview ruler and Stage / Discard (or Unstage) on hovering a change. Clicking a gutter marker opens the diff at that change. ### Removed - **Editor:** The gutter's quick diff peek and the separate unsaved-changes and in-chat diff views; commit diffs keep the patch view. ## [1.10.0] - 2026-10-07 ### Added - **Composer:** Agent-advertised config options (mode, model, effort, fast mode) render as searchable dropdown menus - **Composer:** Searchable SelectMenu dropdown with groups and upward-opening popup - **Notifications:** macOS notifications now open oxi when clicked - **ACP:** Native checklist support via built-in MCP server, works on all models including those with disabled todo tools - **ACP:** Plan mode syncs with agent session modes - **ACP:** MCP servers (stdio and HTTP) passed to agent from oxi's configuration - **ACP:** Agent's context occupancy, turn usage, and subscription windows shown in context tooltip - **Chat:** Queue follow-ups while streaming, support chat forks, and attach editor selections - **Chat:** Open commands directly in terminals - **Workspace:** Serialize work tree creation and unfold parent in sidebar - **Workspace:** Worktree chat creation, merging, and removal - **Workspace:** Persist workspace ACP preferences and notify users in background ### Changed - **ACP:** Snapshot changes for review and support per-file or full-turn revert - **ACP:** Reset sessions when retrying or rewriting chat history ### Fixed - **Editor:** Right-click selection preserved when adding to chat - **Composer:** Finished checklists stay with the turn that wrote them instead of reappearing on next prompt - **ACP:** Permission requests for read, search, fetch, and think tools now respect approval settings - **Chat:** Queued message's new run no longer cancelled by finished run's receiver ## [1.9.2] - 2026-10-06 ### Fixed - **Editor:** Quick diff now correctly compares files regardless of line ending style (CRLF vs LF). - **Editor:** Tab hover highlight now fills the complete strip height for better visual consistency. ## [1.9.1] - 2026-10-06 ### Fixed - **Update:** App updates on Windows now work correctly with installation paths containing special characters ## [1.9.0] - 2026-10-06 ### Added - **CLI:** `oxi update` command to reinstall from the official installers. - **Install:** One-line installers for macOS, Linux, and Windows that verify downloads against SHA256 checksums and work without quarantine flags or security warnings. ### Fixed - **Windows:** Console windows no longer appear during npm update checks and llama-server startup. ## [1.8.0] - 2026-10-02 ### Added - Compare tab in the git panel for diffing branches/refs - Stage/revert individual diff hunks via text splice - Quick-diff peek in the editor gutter for changed regions - Accessibility labels for icon+text buttons ### Fixed - Crash when reverting a change from the quick-diff peek - Git test failures on CI runners without global Git identity ## [1.7.0] - 2026-10-02 ### Added - Ctrl+P: workspace walking on worker thread with previous list shown immediately - Git diffs now run on dedicated worker thread with latest-request-wins behavior - Composer input is now scrollable - Large pastes are converted to text attachments that persist through sessions and providers ### Changed - Precompile .gitignore globs for picker, explorer, and symbol index - Ctrl+P ranking only updates when query changes - Git file/commit diffs use literal pathspecs instead of work tree scanning - Editor maintains top line position during sidebar resize at fractional DPI - Explorer indentation reduced for deep trees to keep names visible - Stale-scroll check now compares offsets for better convergence at 125% DPI ### Fixed - Windows responsiveness on large projects - Pasted-text attachment handling - Composer input flickering at high DPI ## [1.6.0] - 2026-10-02 ### Added - Improved code navigation capabilities - Enhanced editor commands - Improved diff views ## [1.5.0] - 2026-10-01 ### Added - Support system Git credentials for network operations - Automatic provider routing ### Changed - Refresh app icon - Constrain and clip git rows to prevent overflow and keep bulk actions visible ### Fixed - Improve terminal interrupt handling on loaded systems - Resolve Python path for Windows routing fixture ## [1.4.0] - 2026-10-01 ### Added - Sublime-style find and replace in the editor with regex, case-sensitive, and whole-word toggles - Live match counter and incremental search from caret position - Replace and Replace All operations with $1 group expansion in regex mode - Find and replace keyboard shortcuts: Cmd+G / F3 for next, Cmd+Alt+F for replace, Cmd+Alt+Enter for replace all - Terminal tabs: multiple shell tabs per workspace that persist on switch - Auto-generated short chat titles after first reply (opt-out setting) - Sidebar: pin chats to top, foldable date groups, both persisted per workspace - Adaptive chat diffs: split old/new columns when they fit, unified otherwise - Retry last prompt after failed run - File picker as command-palette popup with highlighted matches - OXI_FRAME_STATS=1 environment variable for frame timing diagnostics ### Changed - Providers panel: grouped provider pills with credential status and dropdown when narrow - Composer: fixed-width selectors with attach button on selector row - Tool output now shows workspace-relative paths - Provider-config errors link to settings - Editor performance: reduced input latency with one frame in flight instead of two - Agent events now wake UI on repaint for faster streamed text updates - Editor layout: per-paragraph galleys kept across edits, only changed paragraphs relaid out - Text diffs use block memcmp and scan only edited spans - Tree-sitter reparses of large files now run off UI thread when slower than 4 ms - Minimap relayout throttled to at most every 250 ms while editing ### Fixed - Find field focus with stable widget id - Closing find panel now selects the current match - Removed hover tooltips from tool pill summaries ## [1.3.0] - 2026-09-30 ### Added - Bash command allowlist that skips approval prompts for whitelisted prefixes with persistent settings storage - Shared tokio async runtime for improved resource efficiency - /plan slash command for task planning - ACP slash commands in composer slash menu - Live sub-agent progress streaming in task pills - Per-workspace terminals that persist across workspace switches - Agent scratchpad functionality - Live workspace synchronization - Reasoning replay capability - Dismissible auto-timeout error notices ### Changed - Tool classification via `tools::tool_side_effect` with unknown tools always prompting for approval - ACP split into `rpc` and `permissions` modules - Path safety: lexically collapse `..` before workspace check for create paths - Web search: DuckDuckGo restored as default with Bing fallback on anomaly challenge - Thinking/tool pill rendering and streaming layout improvements - Minimap now follows editor's wrapped rows - Closing last editor tab returns focus to chat composer - All text files normalized to LF line endings ## [1.2.0] - 2026-09-30 ### Added - Plan mode with task tracking and delegated agent tools - Activity log for raw agent traffic recording (opt-in, off by default) - llama.cpp / local server provider profile with base URL validation - MCP client rewrite: spec-compliant stdio with newline-delimited JSON-RPC, Streamable HTTP transport, paginated tools/list, resources as tools, per-call timeouts, and app-wide connection manager - MCP settings: transport picker, URL, bearer token, environment variables, call timeout, live status, and Connect/test button - Windows process tree termination for shell tool timeouts ### Changed - Provider dispatch refactored into shared agent::dispatch module (eliminates ~300 lines of duplication) - MCP servers now persist across runs and reconnect automatically instead of respawning per run - Tool result formatting enriched with images, resource links, and structured content ### Fixed - Diagnostics: normalize colored checker output by stripping terminal control sequences - Windows: preserve quoted shell commands and resolve test interpreters to absolute paths - Windows: fix subprocess tests by provisioning Python for MCP integration fixtures ## [1.1.1] - 2026-09-29 ### Fixed - Agent launch on Windows now correctly handles paths with spaces by using raw arguments with cmd.exe - Initialize errors now include agent stderr output for better debugging ## [1.1.0] - 2026-09-29 ### Added - Preview images, video, audio and binary files in editor tabs with zoomable/pannable image viewer - Show agent-generated images in chat and open them in a full-size modal viewer - Keep conversation context across app restarts by persisting ACP session IDs - Automatically install and update npm ACP adapters in the background ### Changed - Markdown images now render at native size capped to column width instead of line height - User attachment thumbnails are larger and sharper - Wrapped lines in user chat bubble are left-aligned - Agent subprocesses now inherit login-shell PATH for better CLI tool discovery ### Fixed - Adapt microphone capture to cpal 0.18 API changes - Adapt SSH host key pinning to russh 0.63 with PublicKeyOrCertificate handling - Adapt to tree-sitter 0.27 QueryMatch::captures() accessor changes - Fix intermittent highlight job disagreement in palette tests ## [1.0.0] - 2026-09-23 ### Added - UI gallery and frame profiler for performance testing - Tool calls now display concise format (e.g., 'Ran cargo test · 2 lines') - Side-by-side diff view in chat with line numbers and row tints - Empty chat now explains when provider has no API key with 'Set up model' button - Run errors show hints for common causes (bad key, rate limit, server issues, etc.) - Dismissible callout for app errors - Approval card with Allow, Allow for this turn, and Deny options - Settings cards now span full width and fit narrow windows - Slider with visible rail in settings - Numbers display with thousands separators - About panel lists keyboard shortcuts - Live timers count whole seconds - MCP tools labeled as MCP - Manual version pinning for release pipeline via `Release-As` trailer ### Changed - Chat transcript culling improved: units near viewport stay rendered (300-turn chat: ~0.25 ms/frame, was ~27-38 ms) - Transcript units and sidebar rows use explicit widget IDs for better text selection - Editor tree-sitter highlighting only colors visible lines; minimap re-colors after typing pauses (20k-line file: ~32 ms/keystroke, was ~275 ms) - Explorer caches directory listings and .gitignore patterns; skips off-screen row layout - Sidebar skips layout of off-screen chats (400 chats: 1.5 ms → 0.3 ms/frame) and caches search results - Composer no longer reads AGENTS.md, rules folders, or secrets store every frame - Eliminated idle repaints: removed pulsing unseen-completion row; editor polls external changes only when window has focus - New chats named 'New chat' instead of 'Untitled' - Demo video and screenshots refreshed for 1.0 release ### Fixed - Switching theme with open file left editor text invisible - Markdown tables lost header row - Inline links left stray space - Sidebar toggle showed barcode icon; other icons were wrong glyphs - Cmd+P file picker cut off last files in short lists - Git-changed line tint stopped at longest line instead of editor edge ## [0.26.1] - 2026-09-23 ### Changed - File opening no longer blocks UI during syntax highlighting - Tree-sitter highlight queries now compiled once per language and shared - Common tree-sitter highlight queries and syntect grammars are prepared on a background thread at launch - Syntax color layout now only computed for visible lines plus margin - Syntect language highlighting moved to worker thread - Keychain reading moved to background at launch to avoid blocking window appearance - Chat list now loads without parsing entire session files, reducing startup time ### Fixed - Chat files with damaged final lines now remain in chat list and recover on open ## [0.26.0] - 2026-09-22 ### Added - Guided setup for local and remote HuggingFace models with numbered steps and status indicators - Provider selection via grouped chips instead of dropdown - HuggingFace model results expand in place with per-file download buttons and recommended Q4_K_M marking - Advanced section for port, context, GPU layers, and runtime path configuration - Sidebar search field and improved 'New chat' row with keyboard shortcut - Empty chat starter prompts displayed as two-column grid of cards - Confirmation dialogs before losing unsaved edits in editor tabs - Save/discard/cancel options when closing dirty tabs or quitting with unsaved files - File change detection that asks before overwriting external changes or recreating deleted files - Unified transparent title bar on macOS with window drag and zoom support - Accessible names and keyboard focus indicators for icon buttons ### Changed - Settings UI redesigned with fixed-size status pills, roomier buttons, and consistent chevrons on dropdowns - Chat UI now features borderless user bubbles, larger chat title, and quieter new-chat button - Run errors displayed as callouts in chat - Context size is now a single value with oxi budgeting against server-started context - Model id, base URL, and API key are now derived automatically - Editor tab bar adjusts spacing for macOS traffic lights when sidebar is closed ### Security - Bump event-listener to 5.4.2 (RUSTSEC-2026-0221) ## [0.25.0] - 2026-09-22 ### Added - Edit context menu in chat input with Cut, Copy, Paste, and Select All options - Linux middle-click paste support for primary selection in chat input - Output tokens/s metric displayed next to context indicator during generation ### Fixed - Security vulnerabilities in h2 and rustls (RUSTSEC-2026-0258, RUSTSEC-2026-0285) ## [0.24.0] - 2026-07-28 ### Added - Support for custom Claude ACP models via `ANTHROPIC_MODEL` environment variable - Free-text model field alongside fetched provider options ### Changed - Centralized ACP subprocess environment configuration - Improved installation guidance in documentation with explicit xattr steps for macOS quarantine handling - Added animated product demo to README and website ## [0.23.0] - 2026-07-27 ### Added - Global autosaved scratchpad that persists across workspace switches - Per-session model settings persistence (provider, model, effort, context window) - Auto-scroll near viewport edges while dragging text - Copy selected text across visible and historical rows ### Changed - Selection now preserved while scrolling using logical scrollback rows - Wheel scrolling now allowed during active text selection - Editor blank-area caret placement improved - Settings access moved to explorer footer - Session config now used for streaming and compaction - Editor Escape and blank-area click behavior improved - Running chats remain visible in folded workspaces - Workspace switch notices now shown in sidebar when blocked by unsaved changes ### Fixed - Allow terminal scrollback and edge auto-scroll while selecting text ## [0.22.1] - 2026-07-24 ### Fixed - Use Homebrew 6 quarantine syntax ## [0.22.0] - 2026-07-24 ### Added - Unify diffs with editor tabs - open commit diffs in the editor pane without duplicate headers ### Changed - Harden agent context management with improved history trimming between tool rounds across all providers - Count system and tool overhead against a shared context ladder - Preserve compaction summaries and tool output tails - Improve the default agent prompt and migrate legacy defaults - Reveal chats when selecting or creating sessions - Restore the chat sidebar when starting a new conversation ### Fixed - Improve unsigned macOS distribution - Disable transcript culling on hover to ensure egui can latch selection presses to real widgets from the previous frame ## [0.21.1] - 2026-07-23 ### Added - Issue and pull request templates to guide contributions - Website badge and link in README for easier discovery ### Changed - Landing page repositioned around native, local-first, and run-any-model positioning - Landing page now highlights local GGUF support via llama-server, file explorer, code editor, MCP tools, and local voice dictation - Expanded provider support display on landing page ## [0.21.0] - 2026-07-23 ### Added - Flag unseen agent completions with background completion indicators - Add Cursor and Codex ACP providers with configurable reasoning effort - Open Git changes directly in the editor with inline diff highlighting - Stream bash output across Anthropic, OpenAI, and Codex backends - Support hold-Space push-to-dictate in the composer - Surface Codex tool calls early with edit argument previews - Add split-column diffs and stable tool expansion behavior ### Changed - Stabilize transcript layout while scrolling and disable message culling when pointer is over transcript - Stabilize composer provider, model, and effort selectors - Improve Git pull to safely handle fast-forwards and preserve local changes - Restore upstream egui crates instead of performance fork - Refactor agent, app, settings UI, and file explorer into focused modules ### Fixed - Pin Windows crate for Direct3D compatibility with wgpu-hal - Keep inline links on wrapped text rows in shared horizontal layout - Preserve viewport anchor when soft wrapping changes on resize - Gate terminal styling imports on non-Windows platforms ## [0.20.1] - 2026-07-21 ### Fixed - Stabilize transcript text selection and drag-select behavior - Prevent message culling during pointer hover and drag-select to ensure selection latches properly - Retain culling during scrolling to preserve performance ## [0.20.0] - 2026-07-20 ### Added - Cache measured unit heights and use fingerprints to invalidate stale transcript entries - Cache editor layout and minimap data across frames - Support scrolling while hovering over the minimap - Add `focus_active_view_next_frame` helper for routing focus between editor and chat composer ### Changed - Limit gutter, selection, whitespace, and guide painting to the viewport - Avoid full-buffer scans for dirty state and caret tracking - Polish editor selection and navigation with consistent custom carets and rounded selection contours - Increase selection fill visibility - Return keyboard focus to the editor instead of hidden chat after certain actions - Extract file explorer helpers into a support module - Unify terminal events and share a Tokio executor across agent runs - Validate persisted wire caches with stable SHA-256 fingerprints - Centralize tool side-effect metadata for approvals and concurrency - Bound transcript and response rendering for large conversations ### Fixed - Invalidate stale syntax layout cache when wrap width or DPI changes - Only cache syntax layouts when all geometry cache keys match - Polish editor selection and navigation - Keep find focused after navigation attempts without matches - Replace unsafe unwraps with graceful optional handling in file explorer - Guard HTML text conversion against empty input slices - Improve atomic session replacement and cache invalidation ## [0.19.0] - 2026-07-19 ### Added - Case-sensitive find and replace with Cmd/Ctrl+H - Collapsible roots and richer explorer context menus in file explorer - Back and forward history for definition jumps in editor tab navigation - New-file and open-tab controls to the tab strip - Preview selected files while navigating the file picker - Git diff pseudo-tab with edit-file action and Cmd/Ctrl+Shift+B shortcut - Rust go-to-definition with Tree-sitter symbol resolution, F12 navigation, and command-click support - Dedicated Remote HF provider for SSH-hosted GGUF downloads and model management - Ignored entries displayed dimmed instead of hidden in explorer - Active line highlighting and improved gutter spacing - Git markers aligned with unsaved line changes ### Changed - Docked and refined editor search panel - Separated local and remote runtime state, ports, and model catalogs - Improved model response parsing and concurrent operation handling - Stabilized picker sizing, scrolling, and hover selection - Improved minimap scaling, scrolling, and tab alignment - Refined active tab styling and header layout - Unified selectable text styling with editor selections ### Fixed - Preserve find input focus while revealing search results - Stabilized navigation and scrolling with separate match scrolling from editor caret updates - Keep Find focused while navigating and restore editor on close - Overlay Find without resizing editor viewport - Reveal committed files in Explorer while ignoring picker previews - Hold conversation scroll at bottom during layout settling - Avoid previewing files before picker input begins - Restore previous tab when picker selection is canceled - Preserve index during fast-forward pull - Reject all pulls when working tree has uncommitted changes - Force checkout after advancing HEAD to refresh index and worktree - Fix composer drafts, panel resizing, and explorer shortcuts/layout - Support middle-click tab closing and path tooltips ## [0.18.0] - 2026-07-16 ### Added - Incremental syntax highlighting with Tree-sitter grammar integration for supported editor languages - Indentation guides and refined selection visuals - Fallback to Syntect when Tree-sitter is unavailable ### Fixed - Minimap clipping in large files by preserving trailing empty lines and allowing subpixel row heights - File picker interactions by preventing duplicate open commands, stabilizing dimensions, and avoiding hover feedback loops - Focus preservation and auto-scroll limiting to keyboard navigation only ## [0.17.0] - 2026-07-16 ### Added - Workspace file explorer and editor with multi-tab editing and file operations - Fuzzy file picker and search functionality in editor - Syntax highlighting, minimap, line numbers, and diff previews - Git file statuses and working-tree line markers in editor - Editor keyboard shortcuts - GitHub token and commit identity settings - Secure credential storage in OS keychain - HTTPS token and SSH agent authentication support - Keyboard shortcuts displayed in tooltips ### Changed - Replaced Git CLI with native libgit2 for status, diff, commit, branch, and network operations - Improved GitHub HTTPS authentication with configured username support for personal access tokens - Enhanced pull operations to merge diverged upstream histories - Enhanced push operations to fetch, integrate, and retry non-fast-forward pushes - Automatic merge rollback on conflicts or failures - Reject merges with uncommitted local changes ### Fixed - Safely integrate remote changes during git operations - Prefill fine-grained token permissions in GitHub token creation link - Provide actionable guidance for token and HTTP 403 errors ## [0.16.0] - 2026-07-16 ### Added - Agent now allows explicitly requested shell mutations ### Fixed - Release workflow now keeps dev and master histories aligned - Release process preserves LF normalization across merges - Shell scripts enforce LF endings for consistency ## [0.15.1] - 2026-07-16 ### Fixed - Repair macOS packaging - Enforce LF endings for shell scripts to preserve normalization across merge ## [0.15.0] - 2026-07-16 ### Added - Reversible filesystem tools: delete, move, and mkdir with approval gating and undo journaling - Safe edit and retry workflow with file mutation journaling and transactional multi-edit operations - System font discovery with searchable interface and monospace font selectors - Appearance customization: Sublime and Mariana theme palettes, persisted system font selection for UI and code - MCP tools and @mentions support - Agent settings with enable/disable all controls and enabled tool count display - Resilient release publishing with fallback to conventional commits ### Changed - Settings UI refactored: replaced pill groups with combo boxes for provider, theme, and density - Agent and UI helpers modularized for better maintainability - Improved robustness in MCP, web fetch, shell timeout, and output handling - Enhanced session, settings, and credential migration preservation - Updated Codex model catalog for GPT-5.6 - Sidebar improvements ### Fixed - Windows release builds restored - Graceful recovery from poisoned mutexes - Scroll button placement and preview hover handling - Tool pill clipping in streaming UI - Keychain failure diagnostics and error surfacing ## [0.14.1] - 2026-07-08 ### Fixed - Linux build compilation - Default chat now uses the last opened chat instead of a fixed default ## [0.14.0] - 2026-07-08 ### Added - Voice support for audio input and transformation - Custom width setting for chat window - Status bar to UI - Separate approval policies for bash and write/edit tools - Claude ACP (Anthropic Claude Provider) support - SSH tunneling support for Hugging Face remote models ### Changed - Settings window layout and behavior improvements - Microphone icon repositioned to the right - Git sidebar UI/UX cleanup - Chat composer focus restored after navigation and panel closes - Git panel content preserved during busy refresh to reduce flicker - Reduced eframe features to avoid unused adwaita dependencies ### Removed - Autosave from settings - Orange border on hover ### Fixed - Allow deleting the last chat with blank replacement session - SSH tunneling for Hugging Face on Mac Mini ### Added - Claude Code (ACP) provider: drive Claude Code as an external agent over the Agent Client Protocol. oxi launches the `claude-code-acp` adapter (default `npx @zed-industries/claude-code-acp`) as a per-session subprocess, streams its thinking/text/tool-call updates into the normal chat UI, routes permission requests through the existing approval gate, and services the agent's file reads/writes. Auth uses Claude Code's own login (or an optional `ANTHROPIC_API_KEY`). Selecting the provider auto-starts the agent in the background (only while it's the active provider) and populates the model dropdown from the agent's advertised models. Defaults to the maintained `@agentclientprotocol/claude-agent-acp` adapter (latest models: Sonnet 5, Opus 4.8, …); the chosen model is applied via the `ANTHROPIC_MODEL` env var (alias like `sonnet`/`opus` or a full id like `claude-sonnet-5`), and changing it relaunches the agent. ## [0.13.1] - 2026-07-07 ### Fixed - Windows: prevent console windows from flashing during headless git and shell tool operations - Windows: split secrets blob across credential entries to work around CRED_MAX_CREDENTIAL_BLOB_SIZE limit, fixing ChatGPT sign-in persistence ## [0.13.0] - 2026-07-07 ### Added - Azure OpenAI provider support with API key authentication and configurable endpoints - Windows app icon embedding and console window hiding for improved Windows experience - Lazy-loading scrollbars for a cleaner UI ### Changed - Session directory names are now sanitized for Windows path compatibility - OpenAI provider settings labels and model listing updated for Azure support ## [0.12.0] - 2026-07-07 ### Added - Support for custom providers ## [0.11.4] - 2026-07-07 ### Changed - Update screenshot descriptions in documentation ## [0.11.3] - 2026-07-06 ### Changed - Repositioned oxi as a coding agent you fully control ## [0.11.2] - 2026-07-06 ### Added - GitHub Pages landing page ## [0.11.1] - 2026-07-06 ### Changed - Updated README with refreshed screenshots ## [0.11.0] - 2026-07-06 ### Added - Context compaction: /compact command summarizes older conversation turns into a single collapsible summary message to manage long conversations - /new command to start a fresh chat from the composer - Auto-compaction runs pre-send when context reaches 85% of the window, with deferred message auto-sending - Per-session context estimation calibrated from real provider token usage counts - SSH host key pinning (trust-on-first-use) for remote compute targets to prevent MITM attacks - Test connection panel surfaces SSH key mismatches with fingerprints and "Accept new key" button - Edit tool `replaceAll` option to replace all occurrences of a pattern instead of requiring exact single matches - Configurable bash timeout cap via `bash_timeout_cap_secs` setting (default 300s, range 5-3600s) in Settings → Agent ### Changed - Optimized file diff rendering to avoid large LCS allocations - File reads now streamed instead of loading entire files into memory - Last turn usage remains visible while idle - Sessions and settings now saved via synced temp files for atomic writes - Wire-history cache invalidated after transcript mutations during compaction ### Fixed - Preserve state and write files atomically ## [0.10.0] - 2026-07-06 ### Added - Reasoning effort configuration with provider-specific overrides for GPT, Codex, and Claude - Codex model discovery support - Context usage indicator - History reuse for cache-friendly follow-up turns ### Changed - Improved context trimming and tool output limits - Enhanced read output line number handling ## [0.9.2] - 2026-07-05 ### Fixed - Fix credential persistence on macOS and Windows by working around keyring v1 default-store initialization bug that caused saved secrets to vanish on restart - Fix Linux CI compilation by enabling crypto-rust feature on secret-service dependency ## [0.9.1] - 2026-07-05 ### Changed - Migrate to Rust edition 2024 with MSRV 1.92 - Update egui/eframe/egui_extras to 0.35 with UI API changes - Update reqwest to 0.13 with feature renames and cert verification changes - Update vt100 to 0.16 with scrollback buffer improvements - Update rand to 0.10 - Update dirs, rfd, russh, portable-pty, pulldown-cmark, and sha2 to latest versions ### Removed - Drop unused arboard dependency ### Security - Clear RUSTSEC advisories for ttf-parser, quick-xml, paste, zbus, and rand dependencies ## [0.9.0] - 2026-07-04 ### Added - Settings now includes Prompts and About tabs for better organization - App displays its version in the About tab - Automatic update checker runs on startup and can be triggered from About tab; sidebar shows a quiet indicator when updates are available - View release button in About tab to access the latest GitHub release ### Changed - Settings reorganized: agent system prompt and commit-message generator moved to Prompts tab; Agent tab now focuses on tools, approval, and web search - Provider configuration simplified from multiple profiles per provider to one config per provider kind - API keys now keychain-keyed by provider slug instead of profile ID - settings.json automatically migrated on first load with immediate rewrite to ensure migration runs exactly once - Commit-message generation now pins provider and model directly instead of profile ID ## [0.8.0] - 2026-07-03 ### Added - Move provider API keys, OAuth tokens, and SSH passwords into the OS keychain (macOS Keychain Services, Windows Credential Manager, Linux Secret Service) - Add crash logging to `/oxi/crash.log` - Add end-to-end agent-loop integration tests with wiremock - Add regression tests for bash deny-list obfuscation handling - Add session file corruption/malformation test coverage - Add CONTRIBUTING.md with build, test, and code convention guidance - Add cargo-audit and rust-cache to CI ### Changed - Harden bash deny-list normalization to strip quote and backslash characters - Restrict settings.json permissions to 0600 on Unix - Refactor large modules into submodules: ui/messages.rs, app/settings_ui.rs, app/git_panel.rs, markdown.rs, settings.rs, theme.rs (no behavior change) ### Fixed - Fix CI release pipeline JSON parsing when LLM response contains unescaped backslashes - Resolve cargo-audit vulnerabilities by updating rustls-webpki and quinn-proto; document exceptions for quick-xml and rsa ### Security - Credentials now stored in OS keychain instead of plaintext JSON files - Harden bash command validation to catch obfuscations like `s\udo` and `'sudo'` ### Added - Panic hook that logs crashes to `/oxi/crash.log` before the default handler prints to stderr, so failures in background threads leave a trace to report ### Security - Move provider API keys, OAuth tokens, and SSH passwords into the OS keychain (macOS Keychain Services, Windows Credential Manager, Linux Secret Service) instead of plaintext JSON on disk; existing `settings.json`/`oauth.json`/`ssh_credentials.json` values are migrated in automatically and the plaintext is removed - Restrict `settings.json` to owner-only permissions (`0600`) on Unix when saving, as defense in depth for its remaining (non-secret) contents ## [0.7.0] - 2026-07-03 ### Added - Track streaming duration with `started_at` and `worked_duration` fields on chat messages - Collapsible activity summary showing 'Worked for…' duration (Cursor-style) - Web search backend selection (Bing, DuckDuckGo, SearXNG) with Bing as default - Zero-config DuckDuckGo search fallback when no SearXNG URL is configured - Delete button on chat row hover (replaces timestamp on hover) - Hover feedback and pointing-hand cursor on all interactive buttons - Click-to-expand tool pills showing raw output/diff ### Changed - Improved accent color consistency across app - Improved chat entry spacing - Improved git functionality across multiple workspaces - New sidebar design - Redesigned composer model selector with provider and model dropdowns - Unified button rendering with consistent icon button styling - Persist assistant `worked_duration` across reload - Fold thinking blocks by visual row count to reduce streaming flicker ### Fixed - Composer dropdowns, thinking block folding, and reload state - UI thinking blocks display - Icon-font vertical centering and hover accent-color transitions - `tint_on_panels` blend order and dark-theme badge colors - Clippy lints and code formatting ## [0.6.1] - 2026-07-03 ### Changed - Centralize theme tokens with shared corner-radius constants (`RADIUS_ROW`, `RADIUS_BUTTON`, `RADIUS_CHIP`, `RADIUS_PANEL`) replacing hardcoded pixel values throughout UI - Rewrite git panel with improved layout: constrain diff viewer width to stay centered in chat column, make scrollbars always visible, reserve fixed space for action buttons on narrow panels - Align message-status pill to fixed 28px height for visual consistency with header buttons - Fix local-default URLs and hostnames in settings and documentation (`mac-mini` → `localhost`) ### Removed - Delete autonomous Claude Code agent loop system (`.claude/loops/` directory) ## [0.6.0] - 2026-07-02 ### Added - Ollama provider with OpenAI-compatible /v1 API support - SSH remote compute targets for LM Studio and Ollama with password authentication and connection testing - LM Studio provider with local LAN model support and self-signed TLS - LLM-powered commit message generator with streaming completion - Resizable bottom terminal panel with embedded PTY shell, 256/RGB colors, mouse support, and scrollback persistence - Stream-level retry logic with exponential backoff for transient HTTP failures (408/429/5xx) - In-band SSE error recovery without losing progress from completed rounds - Nerd Font icon constants and icon-driven UI widgets throughout the app - Git diff as full-area overlay with caching and keyboard dismissal (Esc/✕) - Automatic upstream detection and `--set-upstream` fallback for new branch pushes - Rust/copper brand accent across all built-in palettes with derived semantic colors - Settings reorganization into Providers/Agent/Appearance tabs with improved layout ### Changed - Tightened client timeouts (connect=30s, read=60-180s, tcp_keepalive=60s) to prevent long turns from being killed - Replaced per-provider inline error handling with shared `send_with_retry` wrapper in new `agent/net.rs` module - Running tool pills now use neutral surface with spinner and badge only carrying state, reducing visual noise - Provider tabs reordered to lead with Ollama and LM Studio (local runtimes) - Git panel UI refactored to use icon-driven widgets and inline error display - Terminal scrollback offset clamped to prevent vt300 underflow panic - Live thinking bubble tail-preview truncated to keep newest reasoning lines visible while streaming ### Fixed - Worker disconnect handling while waiting for response to avoid hanging sessions on panics - `AgentEvent::StreamRetry` prevents duplicate text/thinking when generation is re-sent - Conversation header layout no longer overflows with right button cluster - Cargo fmt and clippy warnings unblocked CI ### Added - Ollama provider profile (OpenAI-compatible `/v1` API, no-auth by default, defaults to `http://localhost:11434/v1`) - Remote SSH compute target for LM Studio / Ollama profiles: point a profile at a host reached over SSH (e.g. a Mac mini) and oxi tunnels the connection so the runtime only needs to listen on `127.0.0.1` there. Password auth, "Test connection" button in Settings → Providers. SSH passwords are stored separately in `ssh_credentials.json`, never in `settings.json`. ## [0.5.0] - 2026-06-27 ### Added - Web search and web fetch tools for agents to query SearXNG instances and fetch URLs - Text size (UI density) setting with Compact, Normal, and Comfortable options - Full Noto Emoji font for improved emoji rendering ### Changed - Unified typography scale across UI with consistent font sizes (H1 20 / H2 17 / H3 15 / body 14 / small 12.5 / tiny 11.5 / code 13) - Inline code now uses surrounding prose font and size for proper baseline alignment - User and assistant body text now use the same font size - Consistent line-height (1.35) for all flowing prose including list items - Tool configuration migrated from fixed array to Vec for extensibility - egui text styles overridden to match unified typography scale ## [0.4.1] - 2026-06-25 ### Fixed - macOS release now ships as a proper .app bundle with icon instead of requiring Terminal ## [0.4.0] - 2026-06-24 ### Added - Theme-aware palette system with light, dark, and midnight themes plus custom theme support ## [0.3.0] - 2026-06-24 ### Added - Persist sidebar width across sessions - Application icon ### Changed - Update app icon transparency - Remove chat placeholder ### Removed - Unused dead code ## [0.2.0] - 2026-06-24 ### Added - **Approval mode** for mutating tools: the agent now pauses and asks for explicit confirmation before running `bash`, `write`, or `edit`. The prompt offers *Approve*, *Approve rest* (auto-approve the remaining tools in the run), and *Deny* (the model is told the user declined). Controlled by a new "Ask before running bash / write / edit" toggle in Settings → Tools (on by default). - CI status badge in the README. - Unit tests for the agent runner (`opencode_go_model_uses_anthropic`, profile key resolution) and the approval gate. ### Changed - Context-budget trimming serializes each message only once instead of up to twice, reducing per-request work on long histories. ### Removed - **GitHub Copilot** provider and its OAuth (device-flow) support, including the `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN` fallbacks. **(breaking)** ### Fixed - Test suite no longer compiled after an earlier refactor (`model.rs` referenced a removed function and a dropped enum field), which left CI red. - `clippy::collapsible_if` warning in the sidebar that broke `cargo clippy -D warnings`. - Approval prompt is rendered at the tail of the transcript (above the floating composer) so it stays visible while a run is paused; previously it could be scrolled out of view at the top. ## [0.1.0] - Initial release: local desktop coding-agent chat app (Rust + egui/eframe) with streaming LLM responses, built-in workspace tools, per-workspace session persistence, configurable provider profiles, and OAuth for Codex. [Unreleased]: https://github.com/maziluiosif/oxi/compare/v1.39.0...HEAD [1.39.0]: https://github.com/maziluiosif/oxi/compare/v1.38.0...v1.39.0 [1.38.0]: https://github.com/maziluiosif/oxi/compare/v1.37.0...v1.38.0 [1.37.0]: https://github.com/maziluiosif/oxi/compare/v1.36.0...v1.37.0 [1.36.0]: https://github.com/maziluiosif/oxi/compare/v1.35.0...v1.36.0 [1.35.0]: https://github.com/maziluiosif/oxi/compare/v1.34.0...v1.35.0 [1.34.0]: https://github.com/maziluiosif/oxi/compare/v1.33.1...v1.34.0 [1.33.1]: https://github.com/maziluiosif/oxi/compare/v1.33.0...v1.33.1 [1.33.0]: https://github.com/maziluiosif/oxi/compare/v1.32.0...v1.33.0 [1.32.0]: https://github.com/maziluiosif/oxi/compare/v1.31.2...v1.32.0 [1.31.2]: https://github.com/maziluiosif/oxi/compare/v1.31.1...v1.31.2 [1.31.1]: https://github.com/maziluiosif/oxi/compare/v1.31.0...v1.31.1 [1.31.0]: https://github.com/maziluiosif/oxi/compare/v1.30.0...v1.31.0 [1.30.0]: https://github.com/maziluiosif/oxi/compare/v1.29.0...v1.30.0 [1.29.0]: https://github.com/maziluiosif/oxi/compare/v1.28.0...v1.29.0 [1.28.0]: https://github.com/maziluiosif/oxi/compare/v1.27.0...v1.28.0 [1.27.0]: https://github.com/maziluiosif/oxi/compare/v1.26.0...v1.27.0 [1.26.0]: https://github.com/maziluiosif/oxi/compare/v1.25.0...v1.26.0 [1.25.0]: https://github.com/maziluiosif/oxi/compare/v1.24.0...v1.25.0 [1.24.0]: https://github.com/maziluiosif/oxi/compare/v1.23.0...v1.24.0 [1.23.0]: https://github.com/maziluiosif/oxi/compare/v1.22.0...v1.23.0 [1.22.0]: https://github.com/maziluiosif/oxi/compare/v1.21.2...v1.22.0 [1.21.2]: https://github.com/maziluiosif/oxi/compare/v1.21.1...v1.21.2 [1.21.1]: https://github.com/maziluiosif/oxi/compare/v1.21.0...v1.21.1 [1.21.0]: https://github.com/maziluiosif/oxi/compare/v1.20.0...v1.21.0 [1.20.0]: https://github.com/maziluiosif/oxi/compare/v1.19.0...v1.20.0 [1.19.0]: https://github.com/maziluiosif/oxi/compare/v1.18.0...v1.19.0 [1.18.0]: https://github.com/maziluiosif/oxi/compare/v1.17.1...v1.18.0 [1.17.1]: https://github.com/maziluiosif/oxi/compare/v1.17.0...v1.17.1 [1.17.0]: https://github.com/maziluiosif/oxi/compare/v1.16.0...v1.17.0 [1.16.0]: https://github.com/maziluiosif/oxi/compare/v1.15.0...v1.16.0 [1.15.0]: https://github.com/maziluiosif/oxi/compare/v1.14.0...v1.15.0 [1.14.0]: https://github.com/maziluiosif/oxi/compare/v1.13.0...v1.14.0 [1.13.0]: https://github.com/maziluiosif/oxi/compare/v1.12.0...v1.13.0 [1.12.0]: https://github.com/maziluiosif/oxi/compare/v1.11.3...v1.12.0 [1.11.3]: https://github.com/maziluiosif/oxi/compare/v1.11.2...v1.11.3 [1.11.2]: https://github.com/maziluiosif/oxi/compare/v1.11.1...v1.11.2 [1.11.1]: https://github.com/maziluiosif/oxi/compare/v1.11.0...v1.11.1 [1.11.0]: https://github.com/maziluiosif/oxi/compare/v1.10.0...v1.11.0 [1.10.0]: https://github.com/maziluiosif/oxi/compare/v1.9.2...v1.10.0 [1.9.2]: https://github.com/maziluiosif/oxi/compare/v1.9.1...v1.9.2 [1.9.1]: https://github.com/maziluiosif/oxi/compare/v1.9.0...v1.9.1 [1.9.0]: https://github.com/maziluiosif/oxi/compare/v1.8.0...v1.9.0 [1.8.0]: https://github.com/maziluiosif/oxi/compare/v1.7.0...v1.8.0 [1.7.0]: https://github.com/maziluiosif/oxi/compare/v1.6.0...v1.7.0 [1.6.0]: https://github.com/maziluiosif/oxi/compare/v1.5.0...v1.6.0 [1.5.0]: https://github.com/maziluiosif/oxi/compare/v1.4.0...v1.5.0 [1.4.0]: https://github.com/maziluiosif/oxi/compare/v1.3.0...v1.4.0 [1.3.0]: https://github.com/maziluiosif/oxi/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/maziluiosif/oxi/compare/v1.1.1...v1.2.0 [1.1.1]: https://github.com/maziluiosif/oxi/compare/v1.1.0...v1.1.1 [1.1.0]: https://github.com/maziluiosif/oxi/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/maziluiosif/oxi/compare/v0.26.1...v1.0.0 [0.26.1]: https://github.com/maziluiosif/oxi/compare/v0.26.0...v0.26.1 [0.26.0]: https://github.com/maziluiosif/oxi/compare/v0.25.0...v0.26.0 [0.25.0]: https://github.com/maziluiosif/oxi/compare/v0.24.0...v0.25.0 [0.24.0]: https://github.com/maziluiosif/oxi/compare/v0.23.0...v0.24.0 [0.23.0]: https://github.com/maziluiosif/oxi/compare/v0.22.1...v0.23.0 [0.22.1]: https://github.com/maziluiosif/oxi/compare/v0.22.0...v0.22.1 [0.22.0]: https://github.com/maziluiosif/oxi/compare/v0.21.1...v0.22.0 [0.21.1]: https://github.com/maziluiosif/oxi/compare/v0.21.0...v0.21.1 [0.21.0]: https://github.com/maziluiosif/oxi/compare/v0.20.1...v0.21.0 [0.20.1]: https://github.com/maziluiosif/oxi/compare/v0.20.0...v0.20.1 [0.20.0]: https://github.com/maziluiosif/oxi/compare/v0.19.0...v0.20.0 [0.19.0]: https://github.com/maziluiosif/oxi/compare/v0.18.0...v0.19.0 [0.18.0]: https://github.com/maziluiosif/oxi/compare/v0.17.0...v0.18.0 [0.17.0]: https://github.com/maziluiosif/oxi/compare/v0.16.0...v0.17.0 [0.16.0]: https://github.com/maziluiosif/oxi/compare/v0.15.1...v0.16.0 [0.15.1]: https://github.com/maziluiosif/oxi/compare/v0.15.0...v0.15.1 [0.15.0]: https://github.com/maziluiosif/oxi/compare/v0.14.1...v0.15.0 [0.14.1]: https://github.com/maziluiosif/oxi/compare/v0.14.0...v0.14.1 [0.14.0]: https://github.com/maziluiosif/oxi/compare/v0.13.1...v0.14.0 [0.13.1]: https://github.com/maziluiosif/oxi/compare/v0.13.0...v0.13.1 [0.13.0]: https://github.com/maziluiosif/oxi/compare/v0.12.0...v0.13.0 [0.12.0]: https://github.com/maziluiosif/oxi/compare/v0.11.4...v0.12.0 [0.11.4]: https://github.com/maziluiosif/oxi/compare/v0.11.3...v0.11.4 [0.11.3]: https://github.com/maziluiosif/oxi/compare/v0.11.2...v0.11.3 [0.11.2]: https://github.com/maziluiosif/oxi/compare/v0.11.1...v0.11.2 [0.11.1]: https://github.com/maziluiosif/oxi/compare/v0.11.0...v0.11.1 [0.11.0]: https://github.com/maziluiosif/oxi/compare/v0.10.0...v0.11.0 [0.10.0]: https://github.com/maziluiosif/oxi/compare/v0.9.2...v0.10.0 [0.9.2]: https://github.com/maziluiosif/oxi/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/maziluiosif/oxi/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/maziluiosif/oxi/compare/v0.8.0...v0.9.0 [0.8.0]: https://github.com/maziluiosif/oxi/compare/v0.7.0...v0.8.0 [0.7.0]: https://github.com/maziluiosif/oxi/compare/v0.6.1...v0.7.0 [0.6.1]: https://github.com/maziluiosif/oxi/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/maziluiosif/oxi/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/maziluiosif/oxi/compare/v0.4.1...v0.5.0 [0.4.1]: https://github.com/maziluiosif/oxi/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/maziluiosif/oxi/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/maziluiosif/oxi/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/maziluiosif/oxi/releases/tag/v0.2.0