CHANGELOG.md
Rama dev · réplica de lectura del repositorio original.
# 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 <task> 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 `<config_dir>/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 `<config_dir>/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<bool> 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