Skip to content

Releases: OpenSource03/openacpui

v0.9.1 — Codex Reliability, Type Safety & README Overhaul

25 Feb 04:31

Choose a tag to compare

Changes

🔧 Codex Engine Fixes

  • Image attachment wire format — Codex image turns now correctly convert ImageAttachment[] to the Codex image/localImage input format via a new imageAttachmentsToCodexInputs() helper. Previously images were passed raw and would fail silently.
  • send/sendRaw splitsendRaw is now a real low-level path (no user-message append, returns boolean, resets processing state on failure). Previously it was aliased to send, which caused duplicate messages in queued flows.
  • Queue drain routing — Queued messages for each engine now send directly via IPC with the correct session ID and effort level, instead of routing through hook methods with potential stale closures.
  • Stuck processing statesetIsProcessing(false) is now explicitly called on queue send errors so the input bar never stays locked after a failure.
  • Live send pathdisplayText and typed image inputs are now forwarded correctly on live Codex sends; removed unsafe as unknown[] casts.
  • Client info version — Codex app-server handshake now reports the real runtime app.getVersion() instead of a hardcoded "0.1.0".

🏗️ Type Safety

  • useClaude return shapesetIsProcessing is now exported, completing the engine contract shared by all three engines.
  • title-gen / commit-gen IPC — Engine parameter type widened from "claude" | "acp" to include "codex".
  • Preload typescodex.send images typed as CodexImageInput[]; codex.login type narrowed to "apiKey" | "chatgpt".
  • Plan step status normalizationcodexPlanToTodos now handles inProgress, in_progress, and in-progress variants.

🧹 QoL

  • Removed stale console.log debug calls from useSessionManager.

📄 README

  • Reflects the three-engine architecture (Claude Code, Codex, ACP) with a requirements table.
  • Agent management now points to Settings → ACP Agents with Agent Store and My Agents tabs — manual agents.json editing removed.
  • Added: Spaces, git worktrees, voice input (native + Whisper), OS notifications, auto-updates, session search, MCP panel, Changes panel.
  • Added note about unsigned binaries and how to bypass OS warnings.
  • Added Windows ARM64 to the install table.
  • Removed outdated Glass UI mention and stale "documentation coming soon" note.

Full Changelog: v0.9.0...v0.9.1

v0.9.0 — Codex Engine, Plugin Architecture & Reasoning Effort

25 Feb 04:10

Choose a tag to compare

What's New

🔌 Engine Plugin Architecture

  • EngineId type system — replaces boolean isACP dispatch with proper "claude" | "acp" | "codex" enum
  • PermissionBehavior / RespondPermissionFn — shared permission types across all engine hooks
  • EngineHookState interface — canonical contract between engine hooks and session manager
  • Tri-engine dispatch — session manager cleanly routes to useClaude, useACP, or useCodex

🤖 OpenAI Codex as First-Class Engine

  • Codex app-server integration — full JSON-RPC 2.0 protocol over stdio (JSONL)
  • 355 auto-generated TypeScript types from codex app-server generate-ts for complete protocol coverage
  • JSON-RPC transport layer — request/response tracking, server-initiated request bridging, notification dispatch
  • 11 IPC channels — start, send, stop, interrupt, approval response, compact, list-models, auth-status, login, resume, set-model
  • Binary auto-download — resolves codex binary from system PATH, known locations, or auto-downloads via npm @openai/codex
  • Auth dialog — API key input or ChatGPT OAuth browser flow on first use
  • Session revivalthread/resume with persisted codexThreadId for seamless session restoration

🧠 Per-Model Reasoning Effort

  • Effort dropdown — select reasoning effort per model: none, minimal, low, medium, high, xhigh
  • Model-aware options — each Codex model advertises its supported effort levels with descriptions
  • Default effort — automatically set from the model's defaultReasoningEffort
  • Effort passed to turn/start — applied on every message send

🛡️ Enhanced Approval System

  • "Allow for Session" button — Codex approval prompts offer one-click session-wide permission
  • Server-initiated request bridging — Codex JSON-RPC approval requests properly bridged to the permission prompt UI
  • Background session approval routing — non-active Codex sessions route approvals to the background store

📦 Codex Model Selection

  • Dynamic model list — populated from Codex model/list response, not hardcoded
  • Engine-aware model dropdown — shows Codex models when Codex is active, Claude models when Claude is active
  • Model validation — server-side pickModelId validates requested model against available models

🔧 Background Session Support

  • handleCodexEvent — background session store accumulates Codex events for non-active sessions
  • Streaming in background — agent message deltas, tool calls, and reasoning all tracked while session is inactive
  • Exit handling — Codex process exit properly triggers session cleanup and UI state reset

Full Changelog: v0.8.1...v0.9.0

v0.8.1 — Linux arm64 + CI fixes

25 Feb 01:51

Choose a tag to compare

Fixes

  • Linux arm64 support: Sequential x64/arm64 builds with merged latest-linux.yml manifest (single --x64 --arm64 invocation fails due to AppImage cross-arch vendor binary conflicts)
  • Linux config: Removed hardcoded arch from targets — CLI controls architecture per build
  • Removed mica-electron: Cleaned from all configs (asarUnpack, platform file exclusions, tsup externals, package.json)

Full Changelog: v0.8.0...v0.8.1

v0.8.0 — Git Worktrees, ACP Utility Sessions & Streaming Polish

25 Feb 01:52

Choose a tag to compare

What's New

🌳 Git Worktree Management

  • Create, remove, and prune worktrees directly from the Git panel
  • Automatic worktree discovery — detects linked worktrees alongside primary repos and sub-repos with wt/main/sub badges
  • Agent Worktree selector — per-project dropdown to point sessions at an isolated worktree instead of the main repo
  • New IPC channels: git:create-worktree, git:remove-worktree, git:prune-worktrees

🔌 ACP Utility Sessions

  • Title and commit message generation now route through the active ACP agent connection — no separate SDK process needed
  • Ephemeral utility sessions run on the existing connection with auto-denied permissions (text-only prompts)
  • New acp-utility-prompt.ts module for one-shot prompts over an existing ACP connection

✨ Streaming UI Overhaul

  • TextShimmer component (powered by motion) replaces the CSS-only wave animation for tool calls, thinking indicators, and subagent steps
  • "Thinking..." shimmer at the session level when the model is working but hasn't started outputting text or tools
  • Sticky auto-follow scroll — chat stays pinned to bottom during streaming, unlocks only on manual upward scroll
  • Hardened streaming text reveal against unbalanced markdown backticks and code block transitions
  • Removed blinking cursor placeholder for empty assistant messages

🎨 ChatHeader Redesign

  • Model badge, permission mode, cost, and session ID consolidated into a single info tooltip (ℹ️ icon)
  • Processing spinner shows model and permission mode on hover
  • Cleaner, less cluttered header

🏗️ Build & Platform

  • Linux arm64 builds (AppImage + deb)
  • Windows arm64 installer with arch-specific filenames to prevent collisions
  • Unified per-platform CI jobs — each platform builds both architectures in a single job to prevent latest*.yml race conditions
  • Removed mica-electron dependency (replaced by motion for animations)
  • Simplified icon handling — packaged builds use the platform bundle icon

📁 ACP File Operations

  • readTextFile now supports line and limit parameters for partial reads
  • writeTextFile auto-creates parent directories
  • Both accept path or uri parameter (backward compatible)

Full Changelog: v0.7.4...v0.8.0

v0.7.4 — Windows arm64 support

24 Feb 18:12

Choose a tag to compare

Changes

  • Proper Windows arm64 support: Both x64 and arm64 NSIS installers are now built in a single CI job, producing arch-specific filenames (OpenACP-UI-Setup-0.7.4-x64.exe, OpenACP-UI-Setup-0.7.4-arm64.exe) and a unified latest.yml so auto-updater serves the correct architecture.
  • Unified CI structure: Each platform (macOS, Windows, Linux) now has its own dedicated build job — no more matrix races on update manifests.

v0.7.3 — Fix updater arch mismatch on macOS

24 Feb 17:25

Choose a tag to compare

Fixes

  • Auto-updater serves wrong architecture on macOS: The arm64 and x64 CI jobs raced to publish latest-mac.yml — whichever finished last overwrote the other, causing half of macOS users to download the wrong binary. Now both architectures build in a single job so latest-mac.yml lists both ZIPs and electron-updater picks the correct one.
  • Auto-updater manual install cache path (from v0.7.1): findUpdateZip() looked in ~/Library/Application Support/Caches/... instead of ~/Library/Caches/....

v0.7.2 — Test release

24 Feb 11:54

Choose a tag to compare

Test release to verify auto-updater works correctly after the cache path fix in v0.7.1.

v0.7.1 — Fix auto-updater cache path

24 Feb 11:52

Choose a tag to compare

Fix

  • Auto-updater manual install fallback: Fixed incorrect cache directory path in findUpdateZip() — was resolving to ~/Library/Application Support/Caches/... instead of ~/Library/Caches/..., causing the manual macOS install fallback to fail with "ZIP not found in cache" after Squirrel.Mac rejects unsigned builds.

Details

The root cause was path.join(app.getPath("userData"), "..", "Caches", ...) only navigating up one level from ~/Library/Application Support/OpenACP UI/ to ~/Library/Application Support/, not to ~/Library/. Fixed by using path.dirname(app.getPath("appData")) which correctly resolves to ~/Library/.

v0.7.0 — Notifications, Cached ACP Config & Cross-Space Navigation

24 Feb 11:18

Choose a tag to compare

What's New

🔔 Notification System

  • OS notifications + sounds for permission requests, plan approval, user questions, and session completion
  • Per-event configuration with three trigger modes: Always, When Unfocused, Never
  • New Notifications settings panel in Settings for fine-grained control over each event type
  • Clicking an OS notification focuses the app window

⚡ Cached ACP Config Options

  • ACP agent config dropdowns now persist between sessions — when you select an agent, it shows the last-known configuration values before the session starts
  • New agents:update-cached-config IPC channel for fire-and-forget cache updates from the renderer

🔀 Cross-Space Navigation

  • Switching to a session in a different space (e.g. clicking a permission toast) now automatically switches to the correct space

Full Changelog: v0.6.2...v0.7.0

v0.6.2

23 Feb 15:30

Choose a tag to compare

What's New

  • Live model switching — Change models mid-session without restarting via SDK setModel(), with proper persistence and error handling
  • Model resolution — New utility maps between runtime model names (e.g. claude-opus-4-20250514) and picker aliases (e.g. default) using family/variant matching
  • Streaming animation overhaul — Replaced React state-based chunk animation with DOM-level useLayoutEffect for per-token fade-in while always rendering full markdown (no more plain text → markdown flash)
  • Unsigned macOS updater — Manual install path for unsigned apps: extracts ZIP, swaps .app bundle, strips quarantine xattr, and relaunches (falls back to GitHub release page on failure)
  • Streaming race condition fixes — Captures messageId before setState updater runs, clears isStreaming on text snapshot, safety net on result event
  • InputBar UX — Permission mode dropdown always accessible during processing, thinking toggle gets proper disabled state, context gauge uses click guard