Releases: charleypeng/opencoder
Release list
opencoder v1.2.4
[1.2.4]
Changed
- feat(sessions): Preserve unsent composer drafts per server and session, restoring failed prompt text for a safe retry after a session switch. (sessions)
- feat(sessions): Add roving keyboard navigation, F2 rename, Shift+F10 menus, and copy actions for workspace directories and session identifiers in the desktop workspace tree. (sessions)
- feat(sessions): Redesign desktop session context menus with grouped actions, consistent outline icons, visible keyboard focus, and an opaque elevated surface. (sessions)
- docs(desktop): Add a prioritized desktop UI plan for mouse and keyboard workflows, stable disclosures, panel recovery, and practical acceptance criteria. (desktop)
- feat(messages): Add restrained live-status highlights and smooth chat disclosures, and collapse tall user messages into expandable previews measured at the current width and scale. (messages)
Fixed
- fix(desktop): Use compact 208px context menus with 13px labels, 26px rows, and smaller icons and corners for native desktop proportions. (desktop)
- fix(messages): Extend the chat scroller alongside a sticky composer, include its measured height in the scroll range, and clip virtual overflow so the newest message and scrollbar reach their bottom together. (messages)
- fix(messages): Fall back to progressively larger history windows when OpenCode rejects documented
beforecursors, preserving infinite scroll and compacted session history. (messages) - fix(messages): Render the first visible page of compacted history immediately, protect paged-history cursor cycles, and derive chat scrolling from one reconciled virtual height. (messages)
- fix(desktop): Keep right-panel resizing direct by removing width easing while dragging, saving only the final width, clamping it to the available window, and restoring the default width on double-click. (desktop)
- fix(messages): Restore stable height-and-opacity disclosure motion and remove unrelated activity-card restyling that caused manual folding to jitter. (messages)
- fix(messages): Continue restoring paged history when the initial session page contains only hidden compaction control records, avoiding an empty chat until the next prompt. (messages)
- fix(messages): Clamp stale virtual-list scroll offsets and scope row measurements per session so switching chats cannot leave a blank transcript viewport. (messages)
opencoder v1.2.3
[1.2.3]
Fixed
- fix(messages): Keep process entries and tool summaries compact by default, revealing full reasoning, updates, commands, and output only when their individual row is opened. (messages)
opencoder v1.2.2
[1.2.2]
Fixed
- fix(sessions): Keep the native folder picker behind explicit onboarding, add-workspace, settings, and change-directory actions, so workspace and session navigation never request folder access. (sessions)
opencoder v1.2.1
[1.2.1]
Fixed
- fix(messages): Fetch the authoritative message parts when opening a tool card so bash and edit details remain available even if the streamed part is incomplete. (messages)
- fix(messages): Remove the redundant important-command summary from completed run outcomes. (messages)
- fix(messages): Make nested tool output disclosures a single unambiguous clickable row inside activity traces. (messages)
- fix(messages): Allow tool cards within expanded activity traces to reveal their output, and remove redundant AI badges from chat messages. (messages)
- fix(messages): Remove redundant patch event cards from the chat transcript while retaining their diff data for run summaries. (messages)
- fix(messages): Reveal one selected file diff at a time from completed-run summaries, keeping multi-file output scannable. (messages)
- fix(sessions): Increase the overflow session-title marquee speed by a further 20%. (sessions)
- fix(messages): Retrieve line-level patch content for expanded run summaries and merge absolute patch paths with relative diff paths. (messages)
- fix(desktop): Show a completed run's diff inline on expansion, open its full review in the right workspace panel, and remove the right-panel splitter's fixed width bounds. (desktop)
- fix(messages): Render patch diffs when patch events use absolute paths, add visible attachment-button hover feedback, and remove the redundant streaming progress line. (messages)
- fix(ui): Rebase the desktop UI scale so 100% matches the former 120% visual size, and simplify session rows to title-only labels. (ui)
- fix(sessions): Refine the open-workspace folder outline, reduce session-title scale, and speed overflow-title scanning. (sessions)
- fix(sessions): Show open workspace folders, reveal truncated session titles on hover or focus, prevent IME Enter commits from sending early, and restore reverted user text to the composer. (sessions)
opencoder v1.2.0
[1.2.0]
Changed
- feat(messages): Group streamed assistant work into a collapsible task timeline with immediate waiting feedback and final file and command summaries. (messages)
opencoder v1.1.1
[1.1.1]
Changed
- feat(messages): Replace the streaming process fold with a collapsed Activity Trace for observable operation states, attention events, and restrained active progress motion. (messages)
- fix(desktop): Match the default right workspace-tools width to the 256px session sidebar while preserving pointer and keyboard resizing. (desktop)
Fixed
- fix(servers): Start local OpenCode from Finder-safe executable paths on the configured loopback port, initialize health monitoring immediately, and persist selected folder scopes to prevent repeated macOS authorization prompts. (servers)
opencoder v1.1.0
[1.1.0]
Added
- feat(messages): Replace the composer image placeholder with a plus attachment picker that sends image and video FilePartInput payloads and renders inline previews. (messages)
- feat(desktop): Add a Codex-style right workspace-tools panel for review, files, and browser views with collapsible, maximizable, keyboard-accessible splitter resizing. (desktop)
- feat(pet): Bundle original orange-tabby, Shiba Inu, and retro helper-robot sprite packs as built-in animated defaults. (pet)
- feat(terminal): Restore existing PTYs when opened and dock the terminal below the chat transcript for a working in-context terminal. (terminal)
- feat(sessions): Add a checkable workspace-tree batch mode with API-confirmed delete and archive operations, including partial-failure recovery. (sessions)
- feat(desktop): Add a keyboard-accessible, persisted splitbar for resizing the workspace sidebar. (desktop)
- feat(servers): Add an app-managed local
opencode servemode with automatic startup and lifecycle cleanup. (servers) - feat(pet): Present available pet packs as searchable preview cards for faster visual selection. (pet)
- feat(settings): Add a system file-picker button for importing
.opetpet packs and selecting the newly installed pack. (settings) - feat(pet): Add data-driven sprite-sheet playback and tap/hover/drag reactions so pets can blink, move, and show expressions from pack manifests. (pet)
- feat(desktop): Move the sidebar toggle beside the native window controls in the title bar with a restrained hover and pressed-state treatment. (desktop)
Changed
- fix(desktop): Match the right-tool maximize and collapse controls at the same size and place maximize before collapse in the title bar. (desktop)
- feat(desktop): Add an embedded right-side Browser preview with a safe system-browser fallback while preserving the Codex-style tool panel layout. (desktop)
- feat(desktop): Remove redundant center-pane chrome, move right-tool controls into the title bar, and align the right-panel surface with the chat canvas. (desktop)
Fixed
-
fix(ci): Download the Windows
.exe/.msiinstallers alongside their signatures when assemblinglatest.json; Tauri v2 signs those self-contained installers directly and never produces*.nsis.zip/*.msi.zip, so the missing download silently dropped thewindows-x86_64updater entry and failed the release. (ci) -
fix(sessions): Remove the redundant standalone batch actions button and keep batch controls in the session context menu. (sessions)
-
fix(settings): Register custom providers with the OpenAI-compatible package and model metadata, refresh them into the shared catalog, and search providers hidden by the collapsed view. (settings)
-
fix(desktop): Use one overlay divider per workspace boundary so sidebar resizing and maximized tools never stack or leave a splitbar gap. (desktop)
-
fix(desktop): Hide the right workspace tools completely when collapsed so no empty rail remains beside the chat. (desktop)
-
fix(desktop): Keep file content in the right workspace tool, portal context menus above clipped navigation layers, and long-press menu taps working across the overlay. (desktop)
-
feat(desktop): Keep right-side tool controls in sync with the title bar, show file contents in the Files tool, and raise the navigation columns above the workspace so their menus remain visible. (desktop)
-
fix(desktop): Keep the titlebar sidebar control icon static so toggling the sidebar does not rotate it. (desktop)
-
fix(desktop): Animate sidebar collapse and expansion with a measured width, opacity, and content-slide transition instead of an abrupt display toggle. (desktop)
-
fix(desktop): Suppress the WebView reload and inspector context menu in release builds. (desktop)
-
fix(styles): Make the light workspace canvas white while retaining a contrasting gray sidebar and controls. (styles)
-
fix(settings): Give desktop settings navigation items a uniform full-width selection background. (settings)
-
fix(desktop): Sync tray menu labels with the language selected in app settings. (desktop)
-
fix(sessions): Use the native folder picker only for local-mode servers and keep the in-app browser as the remote fallback. (sessions)
-
fix(models): Show only connected providers and defer catalog filtering so model search stays responsive. (models)
-
fix(settings): Explain that bundled pet packs are already installed instead of exposing a raw reserved ID. (settings)
-
fix(pet): Prevent concurrent renderer mounts from appending duplicate pet canvases to the companion window. (pet)
-
fix(pet): Resize the native companion window in logical pixels so Retina displays no longer clip the sprite to a partial image. (pet)
-
fix(pet): Fill the companion window with the rendered pet and clear every webview background layer so its transparent edge blends into the desktop. (pet)
-
fix(pet): Discover bundled pet packs from Tauri's deployed
resources/petsdirectory so the default companion appears without an import. (pet) -
feat(pet): Let Settings show selectable pet packs and make enabled companion movement a slow local wander instead of screen-wide jumps. (pet)
-
feat(pet): Add typed pet-pack state, binary asset URL caching, and a safe migration from legacy character preferences to selected pack IDs. (pet)
-
feat(pet): Add a secure desktop registry for data-only
.opetpacks, including manifest/media validation, atomic import, version selection, quarantine diagnostics, and binary-only asset reads for the interactive pet system. (pet)
opencoder v1.0.4
[1.0.4]
Added
-
Desktop UI audit report (docs):
docs/ui-audit-2026-08.md— a Playwright-driven pass over every desktop screen (21 evidence screenshots indocs/screenshots/audit-2026-08/) covering layout/design, desktop-operation convenience, performance (prod bundle re-measured) and the settings center, with a prioritized findings table. (docs) -
Rail sidebar toggle button (feat(desktop)): the server rail gains a sidebar-toggle button above the settings gear — the collapsed sidebar is restorable with a click instead of only ⌘/Ctrl+B, and the button doubles as a discoverable collapse control. (desktop)
Changed
-
Providers edit on double-click (feat(settings)): double-clicking a provider row opens an edit dialog with the API key field, Save, Remove (when connected) and Authorize (for OAuth providers) — the key and connection become editable without hunting for the inline form. (settings)
-
Config section re-laid out around one model editor (feat(settings)): the opencode.json
modeldual-select row is gone — the "Default model" row is the single model editor (its hint now explains it wins over the config-file key, which stays editable through the JSON editor); all config rows now drop their control BELOW the label on narrow windows instead of squeezing it into a fixed-width box where it clipped against the dialog edge. Config rows are now fully STACKED — label, hint, then the control in a bounded column below — replacing the side-by-side grid whose right-aligned controls kept clipping against the dialog edge at real-world widths (select intrinsic widths grow with the longest option text; the zh "未设置——采用服务端默认" made every select ~250px). One vertical lane cannot clip horizontally at any width, language or UI scale, and the section body forbids horizontal overflow. (settings) -
Providers collapse to the connected set (feat(settings)): the Providers section now lists only connected providers; known-but-unconnected ones hide behind a "Show {{count}} more" toggle (with no connection at all the full list stays visible). (settings)
-
The opencode.json model editor is "Config file model" (fix(settings)): the Config section had two adjacent rows both titled "Default model" (the client-side default and the
modelkey of opencode.json); the config-file one is renamed with a hint explaining the override order, and the effective-default chip is width-capped so it no longer crowds the dialog edge on narrow windows. (settings)
Fixed
-
UI scale slider commits on release (fix(settings)): dragging the Appearance scale slider applied the scale on every input event, which re-scaled the root font size, re-laid-out the centered dialog and moved the slider under the pointer — a jitter loop that made the slider undraggable. The drag now only previews the readout; the value applies and persists on release. (settings)
-
Pet controls sit on one row with their labels (fix(settings)): the pet type/movement selects and size/opacity sliders were stacked full-width blocks under their labels; they now render as label-left / control-right rows matching the toggle rows below. (settings)
-
Search / diff / changes refinements (feat(vcs)): the Changes panel's "Apply patch" moved from a permanent bottom box into a dialog opened from the header (the change list gets the full panel height; the confirm step stays), stats-only diff files render a styled empty block with an explanation instead of a bald text row, and the search "No matches" state names the directory that was searched. (vcs)
-
Instant default-shell terminal (feat(terminal)): the "+" button now spawns the server's default shell immediately — the shell picker moves to a chevron next to it and the empty state gains a "New terminal" button (docs/ui-audit-2026-08 §3: creating a terminal no longer requires routing through the picker). (terminal)
-
Status-bar chip labels on wide windows (feat(desktop)): the branch / LSP / formatter / usage chips gain a brief text label at window widths ≥1280px (hidden below, where the dense icon+value form and the hover tooltips remain). (desktop)
-
CI startup-bundle size guard (chore(ci)):
pnpm build && pnpm check:bundlenow runs in CI — the vite startup chunk fails the build once its gzip size leaves the 330 KB budget (2026-08 audit measured 320.46 KB with +57 KB raw drift since 2026-08-05), turning further bundle drift into a hard signal. (ci) -
Deduplicated settings sections (refactor(settings)): the About section merged into General (server version/status, license and copyright now live there — both sections showed the same identity, version and links), and the Models section folded into Config as a "Default model" row (the nav entry was a single row duplicating Config's editor); the settings search keywords now index the sections' control labels ("accent", "default model"…) so queries land on the right section. Nav shrinks from 15 to 13 entries. (settings)
-
Sidebar tree tab renamed and ignored entries hidden (feat(files)): the sidebar's second tab is now "Tree" instead of a second "Files" (the main pane's Files viewer kept the name — one label for two scopes was confusing), and the file tree hides ignored entries (
node_modules, build output) behind a persisted "Show ignored" toggle by default. (files) -
Command palette hints and honest grouping (feat(desktop)): the palette gains a keyboard-hint footer (↑↓ Navigate · ↵ Open · Esc Close) and the section holding "New session / Open settings / Toggle sidebar / Open terminal / Open session diff" is now labeled "Actions" instead of "Settings" — it never contained settings entries. (desktop)
-
Composed server-home empty state (fix(servers)): with no servers saved, the home page now centers one block — guide copy plus a primary "Add server" button — instead of a dashed card in the corner with a detached hint line below it. The e2e/L2 entry points (testids) are unchanged. (servers)
-
Grouped settings navigation (feat(settings)): the desktop settings sidebar renders four group headers — App, Connections, System, Advanced — instead of a flat 15-entry list, and the settings search now collapses to the matching group (headers of empty groups hide). The Servers section's per-server switch gains a visible "Notifications" label (it carried only an aria-label before). (settings)
Fixed
-
Defer provider-id validation hints (fix(settings)): the Add-provider dialog no longer shows "Provider ID is required" on a pristine form — the hint appears once the field was typed into (or cleared), matching when validation is actually actionable. (settings)
-
Dispatch ⌘/Ctrl shortcuts while typing (fix(desktop)): the input guard no longer blocks ⌘/Ctrl combos — ⌘K (command palette), ⌘P (quick open), ⌘⇧F (search), ⌘D (diff), ⌘J (terminal) and ⌘, (settings) now work from inside any text field (composer, search boxes), since a modifier combo types nothing into the control. Plain-key shortcuts (Tab, ↑, Esc) keep the guard. (desktop)
-
Localize the desktop workspace chrome (fix(desktop)): the "Select a session" empty state (chat and diff views) no longer ships the dev placeholder "Select a session — M2", and the "Back to servers" button, the sidebar Workspaces/Files tabs and the main Chat/Files tabs now render through i18n — all follow the app language instead of hardcoded English. (desktop)
opencoder v1.0.3
[1.0.3]
Added
- Process fold for thinking steps (feat(messages)): reasoning and tool-call parts of a message now render in ONE collapsed fold below the answer instead of interspersed between text parts — the header shows a status summary before expanding (tool-call count, succeeded/failed/running, reasoning volume), the fold auto-expands while the session is generating and auto-collapses when it ends, and expand/collapse animates with the standard motion tokens (0ms under reduced motion). (messages)
Changed
-
Publish releases immediately on tag push (chore(ci)):
release.ymlnow creates a PUBLISHED release instead of a draft — no manual publish step, matching the previous debug-channel behavior users relied on for three-platform installers. (ci) -
Tag pushes trigger only the release pipeline (chore(ci)):
ci.yml,e2e.ymlandmobile.ymlhad their automatic triggers commented out (kept as manualworkflow_dispatch) so they no longer run on every push. (ci)
Removed
- Debug CI release channel (chore(ci)): removed
.github/workflows/debug.ymland folded its immediate-publish, unsigned-macOS behavior intorelease.yml— a single tag-triggered pipeline now produces the three-platform installer set without polluting the release with throwaway-signature artifacts. (ci)
Fixed
-
Do not reference
secretsin stepifconditions (fix(ci)): GitHub Actions cannot read thesecretscontext insideif, which made it fail to parse release.yml (workflow name came back as the file path and tag pushes never started a Release run). The Apple certificate presence flag is now materialized as workflow-levelenv.HAS_APPLE_CERTIFICATEand checked in the step instead. (ci) -
Scope Apple signing secrets to the import step (fix(ci)): release.yml previously set
APPLE_CERTIFICATEetc. at the workflow level, so a missing secret reached tauri-cli as a present-but-empty variable and broke macOS builds (security importkeychain failure). The variables now live only inside theImport Apple certificatestep (which runs only when the secret has a value), so without a certificate tauri falls back to ad-hoc signing. (ci) -
Update tauri-action updater-json input (fix(ci)): renamed
uploadUpdaterJsontoincludeUpdaterJsonin release.yml to match the currenttauri-action@v0input schema (the old name now warns as an unexpected input). (ci) -
Gate dock-reopen handling to macOS (fix(desktop)):
RunEvent::Reopenexists only on macOS, so the previous#[cfg(desktop)]broke Linux/Windows builds (E0599: no variant named Reopen); restrict the branch totarget_os = "macos". (desktop) -
Pin
ident_caseto 1.0.1 (fix(build)): Cargo.lock referencedident_case 1.0.2, a version that does not exist on crates.io, breaking every tagged build (darling_coreresolution failure); downgrading to 1.0.1 restores a resolvable dependency graph. (build)
opencoder v1.0.2
docs: note secrets-in-if fix in changelogs