✨ What's New
🗓️ Command Queue Workflow
Conversations now support a command queue — queue up multiple instructions and AionUi will execute them in order, one at a time, without manual intervention.
🔐 ACP Session Permission Modes
When starting an ACP session, you can now choose non-YOLO permission modes (e.g. ask / auto-edit) — giving you granular control over what the agent is allowed to do without interrupting.
📜 Preview Scroll Sync
Scroll sync between the editor and preview pane is now smarter and more responsive, with optimized unlock scheduling that reduces jitter when working with long documents.
📱 Mobile Improvements
- Safe Area support on mobile for better display on notch/island devices
- Updated app icon
🐛 Bug Fixes
ACP / Agent
- Extended permission request timeout to 30 minutes to prevent premature rejections
- Fixed slash commands not appearing during bootstrap
- Improved error message when CLI exits with code 0 on startup
- Prevented unhandled promise rejections during bootstrap initialization
Conversation & Chat
- Fixed conversation creation failing when the
typefield was invalid - Synced renamed conversation titles with the detail view
- Deduplicated filenames when pasting multiple images
Gemini / Codex
- Fixed Gemini losing context after stopping a reply mid-stream
- Guarded against
EACCESerrors during workspacerealpathinit - Fixed Codex start promise not rejecting immediately when the process exits during startup
Channels / WeChat
- Fixed model restore retrying infinitely on a stale provider (now capped)
- Fixed WeChat WebUI login sending wrong QR ticket in SSE
- Fixed Weixin channel not awaiting Gemini tool continuations
Snapshot / Workspace
- Guarded against non-existent workspace during snapshot init
- Handled permission-denied files in snapshot init
- Added
maxBuffertogit add/commitcalls to prevent buffer overflow on large repos
File & Preview
- Guarded
readFileagainst oversized files that exceed the V8 string limit - Fixed CodeMirror
mapPosRangeError in editor preview (ELECTRON-3Y)
Other
- Normalized WebSocket test URL for remote agents
- Normalized language code to ISO 639-1 for OpenAI Whisper STT
- Fixed
sendMessageanddatabaseBridgeproviders crashing on undefined params - Preserved preset agents when saving custom agent settings
What's Changed
- chore(pr-automation): add database service dir to CRITICAL_PATH_PATTERN by @piorpua in #1895
- fix(i18n): add WeChat channel i18n support with weixin namespace by @gobylor in #1891
- feat(agent): support non-YOLO session modes at ACP start by @gobylor in #1894
- fix(ci): allow edited events to trigger full CI run by @piorpua in #1897
- refactor(agents): hide custom agent UI entry points by @piorpua in #1903
- fix(guid): add dismiss button to skills market banner by @amanharshx in #1848
- fix(channels): await persisted session hydration before enabling plugins by @amanharshx in #1888
- chore(pr-automation): expand CRITICAL_PATH_PATTERN to cover config and docs files by @piorpua in #1915
- fix(guid): show upload progress on new chat by @JerryLiu369 in #1905
- fix(settings): preserve preset agents when saving custom agents by @kaizhou-lab in #1908
- chore(agents): add i18n validation to agent context and pre-PR workflow by @piorpua in #1923
- fix(snapshot): guard against non-existent workspace in init by @kaizhou-lab in #1906
- fix(snapshot): handle permission-denied files in workspace snapshot init by @kaizhou-lab in #1907
- fix(bridge): guard against undefined params in sendMessage provider by @kaizhou-lab in #1909
- chore(pr-automation): verify auto-merge success with 10s retry by @piorpua in #1930
- fix(channels): send raw QR ticket in WeChat WebUI login SSE by @kaizhou-lab in #1910
- fix(gemini): guard against EACCES in workspace realpath during init by @kaizhou-lab in #1912
- refactor(acp): consolidate AGENT_SKILLS_DIRS into ACP_BACKENDS_ALL by @kaizhou-lab in #1913
- fix(snapshot): add maxBuffer to git add/commit exec calls by @kaizhou-lab in #1914
- fix(conversation): validate type field before creating conversation by @kaizhou-lab in #1921
- docs(officecli): update assistant demo GIFs (PPT/Word/Excel) by @ringringlin in #1919
- fix(database): add error handling to getRemoteAgents and getRemoteAgent by @kaizhou-lab in #1922
- fix(database): guard against undefined params in databaseBridge providers by @kaizhou-lab in #1924
- fix(mobile): add SafeArea support and update app icon by @kaizhou-lab in #1926
- fix(paste): deduplicate filenames when pasting multiple images by @kaizhou-lab in #1931
- fix(conversation): sync renamed titles with detail view by @cdxiaodong in #1927
- fix(codex): reject start promise immediately on process exit during startup by @kaizhou-lab in #1929
- fix(gemini): restore context after stopping a reply by @cdxiaodong in #1932
- fix(agents): prevent unhandled promise rejection in bootstrap initialization by @kaizhou-lab in #1933
- fix(fsBridge): guard readFile against oversized files exceeding V8 string limit by @kaizhou-lab in #1934
- fix(channels): cap model restore retries to prevent freeze on stale provider by @kaizhou-lab in #1935
- fix(remote-agent): normalize websocket test url by @cdxiaodong in #1937
- fix(stt): normalize language code to ISO 639-1 for OpenAI Whisper by @kaizhou-lab in #1939
- fix(acp): extend permission request timeout to 30 minutes by @kaizhou-lab in #1942
- fix(acp): improve error message when CLI exits with code 0 during ACP startup by @kaizhou-lab in #1943
- fix(preview): catch CodeMirror mapPos RangeError in editors (ELECTRON-3Y) by @kaizhou-lab in #1940
- fix(weixin): wait for gemini tool continuations by @JerryLiu369 in #1946
- fix(acp): slash commands not showing during bootstrap by @kaizhou-lab in #1949
- feat(conversation): implement command queue workflow by @Ericwong5021 in #1856
- feat(renderer): optimize preview scroll sync unlock scheduling by @yejiming in #1951
- chore: bump version to 1.9.4 by @piorpua in #1954
- refactor(settings): remove custom agents UI from LocalAgents by @piorpua in #1956
New Contributors
Full Changelog: v1.9.3...v1.9.4