feat(desktop): add side conversation dock with multi-tab, quick prompts and i18n#3196
feat(desktop): add side conversation dock with multi-tab, quick prompts and i18n#3196taekchef wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 89ba75ece8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (side.tabs.length > 0) { | ||
| void side.openNewTab(); | ||
| return; |
There was a problem hiding this comment.
Avoid creating a new tab when reopening the side dock
When a parent already has side tabs, the main composer side button/shortcut and bare /side command call this onOpenSide path with no question, but this branch always calls openNewTab(). In the collapsed/hidden-panel case this creates an extra empty side conversation and issues another POST /side instead of simply showing the existing active tab; side.open() already focuses existing tabs and only creates when none exist.
Useful? React with 👍 / 👎.
6ac55b1 to
ca1ee64
Compare
ca1ee64 to
740f3f1
Compare
Description
Adds the side conversation dock: a lightweight parallel conversation panel that lets users ask follow-up questions without interrupting the main thread.
Core features
GET /api/conversations/{id}/side.claude/opencode/vibeuseagent_fork;codex,aionrs, and ACP backends withoutsession/forkusetext_snapshot; unsupported parent types do not show the side entry./sidecommand: opens the side dock from the main composer without recursively opening side conversations inside the side composer.Dependency
Depends on backend PR: iOfficeAI/AionCore#383
This frontend PR should be reviewed after #383, because the side dock needs:
POST /api/conversations/{id}/sideGET /api/conversations/{id}/sidefork_modein the create responsei18n
Updated all 9 supported locales from
i18n-config.json:zh-CN,en-US,ja-JP,zh-TW,ko-KR,tr-TR,ru-RU,uk-UA,pt-BRNew key range:
conversation.sideConversation.*, including all quick prompt labels.Testing
bun run lint -- --quietbun run format:checkbunx tsc --noEmitbun run i18n:typesnode scripts/check-i18n.jsbun run test- 1127 passed, 3 skippedbun run test:coverage- 1127 passed, 3 skippedAIONUI_BACKEND_BIN=/private/tmp/AionCore-pr383/target/debug/aioncore AIONUI_DATA_DIR=/private/tmp/aionui-policy-db.kdsq8G VERIFY_PORT=25999 node scripts/verify-side-fork-policy.mjsCoverage highlights for the new side-conversation logic:
buildCreateSideConversationParams.tsresolveParentForkMsgId.tssideConversation.tssideConversationState.tsuseSideConversation.tsChatConversation.tsxSelectionReplyButton.tsxSideConversationDock.tsxSideConversationHeader.tsxSideConversationTabBar.tsxSideQuickPrompts.tsxrenderPlatformChat.tsxSide-fork policy verification:
codex->text_snapshotaionrs->text_snapshotclaude->agent_forkopenclawskipped locally because the copied dev DB had no OpenClaw parent conversationScreenshots
Main thread + side dock
Side dock detail