Skip to content

feat(gui): add draggable split panes to Remote Workspace - #6767

Closed
flam-ing wants to merge 5 commits into
lidge-jun:devfrom
flam-ing:codex/desktop-chat-split-view
Closed

flam-ing wants to merge 5 commits into
lidge-jun:devfrom
flam-ing:codex/desktop-chat-split-view

Conversation

@flam-ing

@flam-ing flam-ing commented Oct 8, 2026 •

Copy link
Copy Markdown

Summary

  • Add a session list and up to four draggable conversation panes to Remote Workspace in the browser dashboard and Tauri shell. Sessions retain independent drafts, requests, errors and Stop state; closing a pane changes only the view.
  • Restore the per-Hub split tree and divider sizes. Dividers support the appropriate arrow keys plus Home/End, and pointer resizing focuses the divider. At viewport widths up to 760px, panes stack without resize dividers or nested horizontal scrolling; widening restores the saved layout and sizes.
  • Keep @flam-ing's original implementation (0c0101295b608be3275a72e5e9e97c639f640408), merge origin/dev at 7640a942b35044c974e534b84d5a8049f4a8ae9a, and add the narrow-screen/focus fixes and persistence regression coverage. Review commit cf49793c4 fixes nested side-by-side splits: every row split had a fixed 528px minimum, so splitting right three times hid two panes behind a horizontal scrollbar inside a pane column at the 1100px desktop default (and at any width up to ~2000px). A track holding a nested split now reserves that subtree's minimum width; leaf panes still follow the saved ratio, and an oversized tree scrolls the pane surface once. Update the English/Korean guides and ownership documentation. No new repository dependencies.

Verification

Current head cf49793c41b9cb3457ab88a0271b0d61ab89e58d (0 behind dev 7640a942b).

  • Review round (head cf49793c4): cd gui && bun run test 3,339 passed, 0 failed, 344 files; focused split/workspace files 23 passed, 0 failed; gui tsc --noEmit -p tsconfig.app.json, bun run lint, bun run lint:i18n, root bun run build:gui, bun run typecheck, bun run structure:check, bun run privacy:scan, git diff --check passed. Browser (Chrome Headless Shell 154 against the built GUI on a sandboxed proxy, port 18791, synthetic /api/remote-workspace responses): real mouse drag moves the divider 50→70 with the separator focused, clamps at 80 past the container edge, stops on release; ArrowLeft → 75, persisted and restored after reload; 700px stacks with no divider and 0px document overflow, widening restores 75. Four panes split in one row at 900/1100/1280px: before the fix 2 split children overflowed sideways; after, 0 overflow, all panes 260px, one surface scroll (1,064px). A two-pane 0.75 split renders at 74%. Root test:changed was not rerun for this GUI/CSS-only commit.

The items below are the earlier validation of head 2b49b5eabb0df0497828a96230f4700b9650642c. Every local test and proxy used fresh OPENCODEX_HOME=$(mktemp -d) and CODEX_HOME=$(mktemp -d); screenshot proxies listened on ports 18677 and 18678. Bun test runner: 1.4.3.

  • Focused GUI: cd gui && bun ../scripts/test-with-pinned-bun.ts --isolate tests/remote-workspace-split.test.tsx tests/remote-workspace-split-layout.test.ts tests/remote-workspace.test.tsx: 22 passed, 0 failed, 3 files. Covers both resize axes, Home/End bounds, restored sizes, draft exclusion, cold-load restoration, session-scoped requests and late Stop responses.
  • Full GUI: cd gui && bun run test: final unchanged-head rerun 3,338 passed, 0 failed, 344 files. The first full run had 3,337 passed, 1 failed in the unchanged remote-link.test.tsx test “discovery loading, empty setup and rescan retain keyboard-accessible manual entry” (focus at line 927). bun ../scripts/test-with-pinned-bun.ts --isolate tests/remote-link.test.tsx then passed 48/48 on both this head and clean origin/dev. The clean-dev full GUI suite passed 3,328/3,328, and the final PR full rerun passed as above. No unrelated focus code was changed; this records the transient full-run failure rather than treating the initial run as green.
  • Import-connected root tests: OCX_TEST_NO_QUEUE=1 bun run test:changed: 212 passed, 0 failed, 14 files, against the origin/dev merge base above. The first queued attempt was cancelled while another worktree held the user lock; the explicit short overlap completed successfully.
  • Root gates: bun run typecheck, bun run structure:check, bun run privacy:scan, and git diff --check passed. bun test tests/ci-workflows/file-size-ratchet.test.ts: 9 passed, 0 failed. The initial structure check caught a 602/600-line desktop document after the dev merge; clean dev passed, and condensing this PR's note restored the budget.
  • GUI: cd gui && bun run lint, bun run lint:i18n, and root bun run build:gui passed. Vite retains its large-chunk warning. The clean origin/dev GUI build also passed for the before capture.
  • Docs: cd docs-site && bun install --frozen-lockfile && bun run build passed: 577 pages, 81,206 internal links checked.
  • Browser: Production GUI builds served by the sandboxed proxies, using synthetic session API snapshots. Native mouse drag splits a listed session and moves a visible pane without duplication. Keyboard resizing on both axes, Home/End, pointer resize/focus, four-pane restoration after reload, exclusion of unsent drafts, 390px/760px stacking and desktop restoration passed with no browser page errors. No live model turn or remote Executor was exercised.
  • Browser limitation: Playwright could not launch /Applications/Google Chrome.app (browserType.launch: Timeout 10000ms exceeded.). Captures and browser checks therefore used GOAT's installed Chrome Headless Shell 154.0.8037.92, driven by playwright-core installed only in scratch space outside the repository.
  • Native limitation: rustfmt is unavailable locally; its check and native desktop compilation/OS-webview drag/drop were not validated here. The native change disables Tauri's native drag/drop interception so HTML pane dragging reaches the dashboard. Native platform evidence remains for CI/maintainer acceptance.
  • Full root-suite exception: Other worktrees are testing concurrently. The full runtime suite was not run; the focused GUI coverage, full GUI attempts, import-connected root tests and explicit source/document gates cover this local scope. Broader runtime/native coverage remains for CI.
  • Exact-head cross-platform CI: Cross-platform CI — workflow_dispatch on ci/pr-6767 on cf49793c4 (the earlier 2b49b5eab run was cancelled as superseded). Dispatched with gh workflow run ci.yml --repo lidge-jun/opencodex --ref ci/pr-6767; queued at handoff, not passing evidence. The PR remains draft; no merge is authorized by this validation.

Before — real origin/dev build at 7640a942b35044c974e534b84d5a8049f4a8ae9a, synthetic session snapshot:

Before: Remote Workspace with one session console

After — real PR-head build at 2b49b5eabb0df0497828a96230f4700b9650642c, the same synthetic sessions:

After: session list and four independently resized conversation panes

After — 390px viewport with stacked panes:

After on a phone: stacked Remote Workspace panes

After the nested-split fix — head cf49793c4, 1100px desktop default, four sessions split right in one row, pane surface scrolled to its end (every pane reachable through one surface scroll):

After fix: nested side-by-side panes at 1100px

Screenshots are committed only on pr-assets, never on this PR branch.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Review readiness checklist

This contributor PR remains draft pending CI and maintainer/native acceptance.

  • Required local validation passed; commands, results, and any full-suite exception are documented.
  • I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).
  • I resolved all correct Codex and CodeRabbit findings.
  • My PR is ready for review.

@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the enhancement New feature or request label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (0/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 0/4).

Review readiness checklist

  • ⬜ Required local validation passed; commands, results, and any full-suite exception are documented.
  • ⬜ I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).
  • ⬜ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

0/4 boxes ticked.

This PR stays in draft until every box above is ticked.

lidge-jun added 2 commits October 15, 2026 18:47
Every row split carried a fixed 528px minimum, which only fits two panes.
Splitting right three times put two nested row splits inside 50% tracks,
so at the 1100px desktop default window (and up to ~2000px) two panes were
hidden behind a horizontal scrollbar inside a pane column. A track holding a
nested split now reserves that subtree's minimum width; leaf panes still
follow the saved ratio, and an oversized tree scrolls the pane surface once.
…g panes

React Doctor (PR gate) flagged a pure helper rebuilt on every SplitBranch render and an array lookup inside the reconcile loop.
@lidge-jun

Copy link
Copy Markdown
Owner

Being carried into #7223 with your authorship preserved; this PR will be closed when the bundle lands.

lidge-jun added a commit that referenced this pull request Oct 16, 2026
…d Gentle Shell (#7195, #6767, #6691, #7213) (#7223)

Carried from #7195, #6767, #6691, #7213 (one commit per source PR, original authors preserved). #4649 held for security review. Security review follow-up: the Windows picker relay binds only when picker activation or selected-profile recovery needs it.

Remote validation (hosted GitHub Actions unreliable; local tests not run by maintainer rule): union candidate codex/prr-integ-8 = dev c03eafd + #7224 + #7223 + #7225 + #7217 + #6454 + #6594 plus a Gentle Shell import-cycle fix (integ-9 e1f289c: typecheck + full suite on mini (Windows) and lidge (Linux), compared with the same host's dev runs) and a test-only Windows path-escaping fix for the reasoning-retention routing test (integ-10 0d4cba7, tree a2b309a: that file re-run on both hosts).

Co-authored-by: xianhongtao <xianhongtao2022@outlook.com>
Co-authored-by: 김민우 <minwokim@gmarket.com>
Co-authored-by: hyuntae park <bluestar218ht@gmail.com>
Co-authored-by: randalo-trc <randalo@trociuk.com>
@lidge-jun

Copy link
Copy Markdown
Owner

Landed on dev in a8d1bb8 via #7223 (your change is its own commit in that bundle, and the squash keeps your authorship as Co-authored-by). Thank you!

@lidge-jun lidge-jun closed this Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants