Add OAuth device code flow for Codex CLI official subscription auth,
allowing users to log in with their ChatGPT account directly from the
agent settings page without using the terminal.
- Backend: two new endpoints (codex_request_device_code, codex_poll_device_code)
that handle the OpenAI OAuth device code flow and return tokens to frontend
- Frontend: login UI with verification URL, copyable user code, polling status,
15-minute timeout, and auto-save via existing persistEnv/persistConfig path
- Auth.json written in Codex CLI compatible format (nested tokens, account_id,
last_refresh) so codex-acp can use OAuth tokens directly
- Show logged-in status and re-login option when tokens are present
- Remove auth.json textarea from Codex settings UI
- i18n: all 10 languages updated with new login-related keys
Replace translate-based centering with a grid place-items-center wrapper
to eliminate half-pixel subpixel blur on non-retina displays. Strengthen
the content border by switching from ring-foreground/5 to ring-border
and adding shadow-2xl for a clearer visual boundary.
Live tool calls that produce output while running (e.g. streaming bash
stdout from Codex) now render their partial output in real time instead
of appearing blank until the tool completes. The tool card keeps its
running visual state — spinner and 24KB tail truncation — while chunks
arrive, and transitions to the completed state once the final status
lands. A WeakMap keyed on the ACP reducer's chunks-array identity
memoizes the joined output so repeated renders don't re-run O(n) string
concatenation.
Switches the build-server upload steps from the deprecated
actions/upload-release-asset@v1 to softprops/action-gh-release@v2,
which resolves intermittent socket hang up failures when attaching
release assets. Drops the now-unused upload_url output from the
create-draft-release job.
- feat(skills): support folder-scoped skills in agent sessions so workflows defined in a project folder can be invoked directly from chat.
- feat(folder): add "Add to session" actions in the file changes menus to quickly reference modified files from the chat input.
- feat(folder): add a commit reset action in the Git log panel for rolling back to a selected commit.
- fix(folder): prevent the branch submenu from being clipped inside scroll areas.
- feat(settings): add a reasoning effort level option for Claude Code.
- feat(settings): add an Enable Fast toggle for the Codex service tier.
- feat(settings): use overlay scrollbars for sub-page scroll areas to keep the layout stable.
- fix(acp): stop stripping the auto config option for Claude Code so the chosen value is preserved.
-----------------------------
# 发布版本 0.8.7
- 功能(技能):支持在代理会话中使用文件夹级别的技能,使项目目录内定义的工作流可直接在聊天中调用;
- 功能(文件夹):在文件变更菜单中新增"加入会话"操作,便于快速将修改的文件引用到聊天输入;
- 功能(文件夹):在 Git 日志面板中新增提交回滚(reset)操作,可一键回退到所选提交;
- 修复(文件夹):避免分支子菜单在滚动区域内被裁剪;
- 功能(设置):为 Claude Code 增加推理强度(reasoning effort)等级选项;
- 功能(设置):为 Codex 服务档位增加 Enable Fast 开关;
- 功能(设置):子页面滚动区域改用覆盖式滚动条,避免布局抖动;
- 修复(ACP):不再丢弃 Claude Code 的 auto 配置项,保留用户所选的配置值。
Claude Code SDK now supports the "auto" permission mode, so the
filtering that hid it from the selector and silently dropped attempts
to set it is no longer needed.
Add an Effort Level dropdown under the Claude Code model inputs with
options Low / Medium / High / Max (Opus only). The selection writes an
"effortLevel" key at the root of the Claude Code config JSON, and is
removed when the default is chosen. Manual edits to the native JSON
textarea stay in sync with the dropdown.
- Thread workspace path through useAgentSkills so Codex $-autocomplete
surfaces folder-local skills in addition to global ones; cache keyed
by agent + workspace and invalidated per key on focus.
- Add Global/Folder scope tabs and a folder picker (sourced from the
folder table via loadFolderHistory) to the Skills settings page.
CRUD for skills now operates against the selected scope and folder.
- Default the settings right panel to a placeholder hint; the new-skill
form only appears after clicking "New Skill" or selecting an existing
skill. Search input is hidden in folder scope.
- Disable "New Skill" when folder scope has no folder chosen; show a
pick-folder hint in the path preview for that state.
- Add scope/noSelectionHint/pickFolderHint strings across 10 locales.
Add a "Reset to Here" context action for git log commit items in the folder page.
Show a reset dialog with branch, target commit, commit message, and reset mode details for soft, mixed, hard, and keep.
Disable reset when viewing a non-current branch filter and keep the action ordering under commit diff.
Add git_reset support across Rust commands, Tauri invoke registration, web handlers/routes, and frontend API/type bindings.
Add localized reset labels, mode descriptions, and toast messages across all supported languages.
Add the Add to session context action for tracked and untracked nodes in the Changes panel, including root, directory, and file entries.
Reorder Changes context actions so Add to session is placed below View diff, and Rollback is placed below Add to VCS.
Update attachToCurrentSession translations to the Add to session wording across all supported locales.
- feat(folder): improve folder workspace stability by unifying state streaming for the file tree and Git panels.
- fix(folder): prevent stale file-watch subscriptions in aux panels and keep mobile sidebars closed on initial load.
- fix(folder): add conversation actions to the sidebar blank-space context menu and align the file workspace tab bar height.
- feat(acp): send a system notification when an agent requests permission approval while the app window is not visible.
- feat(acp): surface Claude API retry status in the chat input with localized progress and error details.
- perf(chat): reduce unnecessary rerenders in the conversation input area.
- fix(windows,linux): reduce the white flash when opening the window in dark mode.
-----------------------------
# 发布版本 0.8.6
- 功能(文件夹):统一文件树与 Git 面板的状态流,提升文件夹工作区的更新一致性和整体稳定性;
- 修复(文件夹):避免辅助面板出现陈旧的文件监听订阅,并防止移动端首次进入时侧边栏自动展开;
- 修复(文件夹):为空白区域的会话侧边栏补充右键操作,并对齐文件工作区标签栏高度;
- 功能(ACP):当应用窗口不可见且代理发起权限审批请求时,发送系统通知;
- 功能(ACP):在聊天输入区展示 Claude API 重试状态,并提供本地化的重试进度与错误信息;
- 性能(聊天):减少会话输入区域的不必要重复渲染;
- 修复(Windows/Linux):降低深色模式下窗口打开时的白屏闪烁。
Introduce a shared workspace-state backend stream with snapshot/delta APIs for file tree and git changes.
Migrate both aux panels to a common frontend workspace store with lifecycle-safe stream handling.
Apply batched watch throttling, path-aware git refresh gating, no-op delta suppression, and bounded history compaction to improve runtime stability.
Ensure async watch setup is safely discarded after effect cleanup.
Use idempotent watcher release logic to avoid duplicate subscriptions and unbalanced stop calls.
Prevent left and right sidebars from auto-opening on small screens during folder page initialization, regardless of persisted open state.
Gate mobile sidebar sheets behind restored panel state to avoid initial sidebar pop-in.
Memoize ChatInput to minimize unnecessary updates in the chat input area during frequent parent renders.
Compute localized Claude API retry banner text lazily and only when retry state is present.
Enable raw Claude SDK forwarding for ACP sessions and emit only system/api_retry events to the frontend.
Show a localized single-line retry banner with loading under the conversation input, including error details and retry progress.
Detect system dark mode on Windows (registry AppsUseLightTheme) and
Linux (gsettings for GNOME, kreadconfig for KDE Plasma) to set native
window background color before webview renders, matching the existing
macOS behavior. Make should_use_dark_background() cross-platform and
apply background_color in all platform branches of
apply_platform_window_style.
- perf(frontend): optimize ACP tool call output handling to reduce CPU and memory pressure.
- perf(file-watch): increase debounce and batch window to reduce event pressure.
- fix(windows): normalize Windows file paths with leading slash and add i18n to link safety dialog.
- fix(macos): detect untracked file deletion via Finder as remove event.
- fix(macos): update traffic-light Y position.
-----------------------------
# 发布版本 0.8.5
- 性能(前端):优化 ACP 工具调用输出处理,降低 CPU 和内存压力;
- 性能(文件监听):增大防抖和批处理窗口,减少事件压力;
- 修复(Windows):规范化 Windows 文件路径前导斜杠,并为链接安全对话框添加国际化支持;
- 修复(macOS):检测通过 Finder 删除的未追踪文件并正确触发移除事件;
- 修复(macOS):更新红绿灯按钮 Y 轴位置。
- perf(frontend): optimize ACP tool call output handling to reduce CPU and memory pressure.
- perf(file-watch): increase debounce and batch window to reduce event pressure.
- fix(windows): normalize Windows file paths with leading slash and add i18n to link safety dialog.
- fix(macos): detect untracked file deletion via Finder as remove event.
- fix(macos): update traffic-light Y position.
-----------------------------
# 发布版本 0.8.4
- 性能(前端):优化 ACP 工具调用输出处理,降低 CPU 和内存压力;
- 性能(文件监听):增大防抖和批处理窗口,减少事件压力;
- 修复(Windows):规范化 Windows 文件路径前导斜杠,并为链接安全对话框添加国际化支持;
- 修复(macOS):检测通过 Finder 删除的未追踪文件并正确触发移除事件;
- 修复(macOS):更新红绿灯按钮 Y 轴位置。
Strip spurious leading slash from Windows drive-letter paths (/D:/foo → D:/foo) in parseLocalFileTarget so that workspace-relative comparison succeeds and local files can be opened correctly. Display the normalized path in the confirmation dialog. Internationalize all link safety dialog and toast strings across 10 locales.
Finder moves files to Trash (rename) instead of deleting them, which
may be reported as `Modify(Name)` rather than `Remove` by the file
watcher. This caused untracked files to lose their red color without
being removed from the tree. Fix by checking disk existence in the
event batch emitter and promoting the kind to "remove" when a changed
path no longer exists.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace raw_output single-string accumulation with a chunks array to
eliminate O(n^2) string concatenation on every 200ms terminal poll event.
Batch tool_call_update dispatches via requestAnimationFrame so multiple
agents no longer trigger 25+ React re-renders per second.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- fix(frontend): fix find widget tooltip flicker, clipping, and close button alignment.
- fix(frontend,macos): reduce dark mode white flash on window open.
- fix(macos): persist zoom level to DB so traffic lights use correct position on launch.
- fix(macos): adjust traffic-light Y baseline from 18 to 17 for better vertical alignment.
- fix(i18n): add ellipsis to reasoning thinking label across all locales.
-----------------------------
# 发布版本 0.8.3
- 修复(前端):修复查找组件工具提示闪烁、裁剪及关闭按钮对齐问题;
- 修复(前端,macOS):减少暗色模式下窗口打开时的白色闪烁;
- 修复(macOS):将缩放级别持久化到数据库,确保红绿灯按钮在启动时使用正确位置;
- 修复(macOS):将红绿灯按钮 Y 轴基线从 18 调整为 17,优化垂直对齐;
- 修复(i18n):为所有语言的推理思考标签添加省略号。
- Prevent hover tooltip flicker by adding pointer-events:none to the
.context-view overlay that covers trigger buttons
- Escape overflow:hidden clipping on ancestor elements by switching the
tooltip overlay to position:fixed, with CSS custom properties
(--cv-offset-x/y) set via ResizeObserver to translate container-relative
coordinates to viewport-relative
- Give the find widget its own border/radius styles (no top border,
bottom-only border-radius) since it slides from the editor top
- Adjust close button vertical position to align with action buttons
Closes#73
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Detect dark/light mode before React hydrates to eliminate the visible
white-to-dark flash when opening windows in dark mode.
Frontend:
- Inline script now reads next-themes localStorage key and applies
.dark class, colorScheme, and backgroundColor on <html> before first
paint
- Add CSS-only fallback via prefers-color-scheme media query in an
inline <style> tag that fires before any JS executes
macOS backend:
- Detect system dark mode via `defaults read -g AppleInterfaceStyle`
(cached with OnceLock) and set native window background color to
match dark theme in apply_platform_window_style
- Persist user appearance mode preference (dark/light/system) to DB
alongside zoom level so new windows use the correct background
- Add update_appearance_mode Tauri command; frontend syncs on mount,
on settings change, and on cross-window storage events
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previously the welcome window (or any startup window) always used the
default CURRENT_ZOOM of 100, ignoring the user's saved zoom preference
stored in frontend localStorage. Now update_traffic_light_position also
writes the zoom value to the app_metadata DB, and setup() reads it back
before creating any window.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- feat(frontend): replace native scrollbar styling with OverlayScrollbars for a polished, overlay-style scrollbar experience.
- feat: show real-time download progress bar for app updates.
- feat: stream real-time progress for agent SDK install/upgrade/uninstall.
- feat(macos): set traffic-light position via Tauri builder API and sync with zoom level.
- fix(windows): force UTF-8 encoding for all spawned child processes.
- fix(frontend): prevent body OverlayScrollbar from intercepting message list scroll events.
- fix(frontend): restore os-theme-codeg scrollbar theme lost during merge.
- fix(frontend): remove inner padding from file tree container and restore scroll container padding.
-----------------------------
# 发布版本 0.8.2
- 新增(前端):使用 OverlayScrollbars 替代原生滚动条样式,提供更精致的覆盖式滚动条体验;
- 新增:应用更新时显示实时下载进度条;
- 新增:Agent SDK 安装/升级/卸载过程支持实时流式进度展示;
- 新增(macOS):通过 Tauri builder API 设置红绿灯按钮位置并与缩放级别同步;
- 修复(Windows):强制所有子进程使用 UTF-8 编码;
- 修复(前端):防止 body 层 OverlayScrollbar 拦截消息列表的滚动事件;
- 修复(前端):修复合并后 os-theme-codeg 滚动条主题丢失的问题;
- 修复(前端):移除文件树容器内边距并恢复滚动容器的正确 padding。
The merge commit ee60536 dropped the custom OverlayScrollbars theme
definition from globals.css, leaving scrollbar handles with zero size
and no background color. Restore the theme with a compound selector
(.os-scrollbar.os-theme-codeg) to ensure higher specificity than the
library's base defaults regardless of CSS load order.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The body-level OverlayScrollbar (position: fixed, z-index: 99999) with
clickScroll and dragScroll enabled was capturing pointer events on the
scrollbar track, preventing the message list's native scrollbar from
receiving them. Disable both interactions on the body instance since it
does not need to scroll.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Leverage the Tauri updater plugin's DownloadEvent callback to display
a progress bar with downloaded/total bytes during app updates, replacing
the previous spinner-only feedback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the spinner-only UX with live log output during agent SDK
operations, matching the existing OpenCode plugin install experience.
Backend: emit structured events (started/log/completed/failed) via
EventEmitter during npm install and binary download. npm commands now
run with piped stdio for line-by-line streaming; binary downloads
report chunked progress every 1 MB.
Frontend: subscribe to `app://agent-install` events through a new
`useAgentInstallStream` hook and render a theme-aware log terminal
below the preflight checks panel.
Also fixes the install log container in both agent settings and the
OpenCode plugins modal: auto-scroll no longer shifts the outer page,
and colours now follow the active light/dark theme.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>