Skip to content

Add Open Chat composer view (Codex-style) - #6476

Closed
austinywang wants to merge 41 commits into
mainfrom
feat-open-chat-composer-pane
Closed

austinywang wants to merge 41 commits into
mainfrom
feat-open-chat-composer-pane

Conversation

@austinywang

@austinywang austinywang commented Jun 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds a Codex-style Open Chat composer/home surface as a bundled webview pane.
  • Adds cmux open-chat and cmux chat, plus native File menu, command palette, and keyboard-shortcut entrypoints.
  • Adds browser history/session handling so Open Chat is treated as an internal temporary webview like the diff viewer.

Diff-viewer mechanism mirrored

  • The CLI writes a generated chat-*.html file into the existing diff-viewer temp directory.
  • It reuses ensureDiffViewerAssets, the bundled webviews app, the local HTTP server, and the manifest allowlist used by Git Diff viewer pages.
  • It opens the generated URL through browser.open_split with show_omnibar: false, transparent background, remote-proxy bypass, and a #cmux-open-chat history marker parallel to #cmux-diff-viewer.
  • Native menu, command palette, and shortcut entrypoints funnel through one shared AppDelegate.openChatForFocusedWorkspace(for:) path that spawns the bundled CLI, matching the diff viewer opening flow.

Interactions wired

  • Composer accepts typing, grows with content, submits on Send or Enter, and preserves Shift+Enter for newlines.
  • Approval, model, reasoning, repo, environment, and branch selections open menus and persist selections in localStorage.
  • The account/model button opens the model/reasoning menu; the + button opens context selection.
  • Repo/environment/branch context pills open their selectors, initialized from cwd/git repo/branch where available.
  • Mic toggles a visible localized stub status.
  • Rate-limit action buttons and the apps suggestion show localized stub statuses.
  • Prompt suggestion fills the composer and focuses it.

Placeholder / stubbed data

  • Rate-limit title/reset time and reset availability are representative placeholders.
  • Model list (5.5, 5.1, 5) and reasoning levels are representative placeholders.
  • Approval modes are representative placeholders and do not yet alter cmux sandbox/approval behavior.
  • Submit is a local stub that echoes a localized submitted status; no chat backend is called yet.
  • Mic/dictation is a no-op stub because no cmux dictation path is wired here yet.
  • Add Credits, Reset usage, and app connections are localized no-op stubs.
  • Context selectors currently expose single-option data from the current repo/local environment/current branch; multi-repo/env/branch data sources are not wired yet.

Validation

  • ./scripts/build-webviews-app.sh
  • bun run lint in webviews
  • JSON parse check for Resources/Localizable.xcstrings, web/data/cmux.schema.json, web/messages/en.json, web/messages/ja.json
  • Open Chat localization completeness scan for English/Japanese keys
  • git diff --check HEAD~3..HEAD before merge and git diff --check origin/main..HEAD after merge

Per request, I did not run local app builds, reload scripts, xcodebuild, or local tests.

Localization audit

  • Updated Resources/Localizable.xcstrings for Open Chat menu, command palette, shortcut label, CLI help/errors, and generated webview labels/statuses in English and Japanese.
  • Updated shortcut docs/data with English/Japanese inline descriptions.
  • Parsed touched localization/data files and verified all 41 openChat.* / cli.openChat.* / Open Chat entrypoint keys have English and Japanese values.

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Adds a Codex‑style Open Chat composer as a lazy‑loaded webview with native entry points, CLI support, and default shortcuts. Model selections now pass to Codex/Claude/OpenCode and persist across panes, workspaces, and session restores.

  • New Features

    • New webview at /cmux-open-chat (#cmux-open-chat); lazy chunk styled with the diff viewer theme; router/main detect the Open Chat surface and load only its chunk.
    • CLI: cmux open-chat (alias cmux chat) with workspace/window/surface flags and --provider|--renderer|--model|--open-code-provider; serves a generated chat-*.html via the diff viewer server.
    • Entry points: File → Open Chat / Open Chat in New Workspace; Command Palette; tab bar adds cmux.openChat; shortcuts Cmd+J (pane) and Cmd+Shift+J (new workspace). Uses a configured cmux.openChat action when present.
    • Model picker from a catalog (Codex/Claude/OpenCode); passes selected model to provider launch args and OpenCode prompt body; persists provider/model/OpenCode provider/selectionId and restores across sessions. Control socket accepts and validates provider/renderer/model/OpenCode provider.
    • Agent webview bridges composer focus, pointer‑down, and submit to native; renderer resources and theme base updated for Open Chat.
  • Bug Fixes

    • Treat Open Chat loopback URLs as internal temporary pages; tightened alias/localhost checks and history marker handling.
    • Claude stream handling: support content‑block and message deltas; add turn/state guards; close queued Codex prompts on teardown; handle queued write failures and duplicate turn completions.
    • Build/tools: require esbuild/tailwindcss from node_modules with clear errors; remote tmux session list parsing handles CRLF.
    • Tests cover URL persistence, shortcuts, model pass‑through (launch args and OpenCode prompt), process launch/restore, and queued prompt write failure.

Written for commit 216d97f. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

New Features

  • Open Chat Composer – Added Open Chat accessible via new open-chat/chat CLI commands, plus in-app entry points (File menu and Command Palette). Open Chat also gains a dedicated keyboard shortcut (Cmd+Ctrl+Shift+C).
  • Workspace & UI Integration – Added “Open Chat in New Workspace” shortcut and support for opening chat in a new workspace. Open Chat UI includes model/reasoning selection, approval modes, repository/branch context, rate-limit usage with reset, suggestions, and voice input.
  • Localization – English and Japanese translations added for all Open Chat CLI and UI strings.

@vercel

vercel Bot commented Jun 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 24, 2026 9:43pm
cmux-staging Building Building Preview, Comment Jun 24, 2026 9:43pm

@coderabbitai

coderabbitai Bot commented Jun 20, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds an end-to-end open-chat/chat CLI subcommand and macOS app integration. New Swift CLI files implement argument parsing, git context resolution, HTML generation with embedded React config, and socket-based browser split launching. The macOS app gains process launch and lifetime management, keyboard shortcut (⌘⌃⇧C), menu/palette commands, and WebView history-URL marker generalization. A new React webview surface (OpenChatApp) with styles and compiled bundle chunks implements the full chat composer UI. Control socket layers extend pane/surface creation to accept agent-session provider/model/opencode configuration options.

Changes

Open Chat End-to-End Slice

Layer / File(s) Summary
Diff viewer shared helpers and session-marker generalization
CLI/cmux_open.swift
Broadens DiffViewerURLMapper to support separate session-history markers for diff-viewer and open-chat via an instance sessionHistoryMarker property. Promotes all diff-viewer implementation types and helper functions from private to internal scope for reuse by the new open-chat command.
Control socket pane/surface input and validation
Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/..., Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/...
Extends ControlPaneCreateInputs, ControlSurfaceCreateInputs, and ControlSurfaceSplitInputs to carry raw agent-session tokens (providerRaw, rendererRaw, modelRaw, openCodeProviderRaw). Updates coordinators to parse these inputs from multiple parameter key variants. Replaces agentSessionRejected failure cases with granular invalidProvider, invalidRenderer, and invalidOpenCodeModel resolution enums.
Agent executable resolver and model support
Sources/AgentExecutableResolver.swift, Sources/AgentSessionProvider.swift
Enhances AgentExecutableResolver to filter executables by provider-preferred directories and to reject non-OpenAI Codex builds via file-content signature scanning. Updates AgentSessionProvider to support optional modelID parameter in launch arguments with automatic normalization and conditional model-selection flag injection for Codex and Claude.
CLI argument types, context derivation, and command parsing
CLI/cmux_open_chat.swift, CLI/cmux_open_chat_context.swift, CLI/cmux_open_chat_labels.swift
Defines OpenChatArguments, OpenChatContext, and OpenChatLabels structs. Implements parseOpenChatArguments for flag extraction with error handling, openChatContext for git repo/branch derivation, and OpenChatLabels.localized() for populating all UI label keys from the localization bundle.
Open Chat HTML page generation
CLI/cmux_open_chat_html.swift
Implements writeOpenChat to orchestrate HTML generation, asset copying, and manifest writing. writeOpenChatHTML embeds full OpenChatConfig JSON (workspace, repo/branch, labels, model/reasoning/approval/context options, suggestions, timestamp) into an HTML document with prepaint CSS and a module script. Adds openChatPlaceholderResetTime for rate-limit UI time formatting.
CLI command execution and dispatch
CLI/cmux_open_chat.swift, CLI/cmux.swift
Implements runOpenChatCommand to resolve window/workspace/surface handles, generate viewer configuration, construct pane.create v2 request parameters, send request, and emit JSON or formatted output. Extends CLI/cmux.swift to route open-chat/chat to this handler, whitelist subcommand names, register dedicated usage text, and update help listings.
Internal webview URL marker detection
Sources/Panels/BrowserPanel.swift, Sources/TerminalController.swift
Adds cmuxIsInternalWebviewHistoryMarker predicate recognizing both cmux-diff-viewer and cmux-open-chat URL fragments (with normalization). Updates browserIsTemporaryHistoryURL and v2BrowserOpenSplit/v2IsInternalCmuxWebviewURL to use the generalized predicate, replacing the previous diff-viewer-only check.
App process launch and keyboard shortcuts
Sources/AppDelegate.swift, Sources/KeyboardShortcutSettings.swift, Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift
Adds openChatForFocusedWorkspace and openChatWorkspace methods spawning the bundled CLI with workspace/socket/cwd args. Extends AppDelegate responder detection for AgentSessionWebView web-content classification. Adds .openChat and .openChatWorkspace shortcut action enum cases with default chords and localized labels.
Menu command, palette entries, and config action wiring
Sources/cmuxApp.swift, Sources/ContentView.swift, Sources/CmuxConfig.swift, Sources/CmuxSurfaceTabBarBuiltInAction.swift
Adds "Open Chat" menu command and palette.openChat/palette.openChatWorkspace command palette contributions. Extends CmuxSurfaceTabBarBuiltInAction with .openChat case and config-action mapping. Adds built-in action support with localized title and keywords.
Shortcut schema and reference updates
web/data/cmux.schema.json, web/data/cmux-shortcuts.ts, skills/cmux-settings/references/shortcut-actions.md
Adds openChat to the JSON schema's shortcuts.bindings enum, to the browser shortcut category data with combo and localized descriptions, and to the shortcut-actions reference doc.
Agent settings types
Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOption.swift, Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOptionCatalog.swift
Introduces OpenChatModelOption struct for picker display metadata (id, label, provider IDs, selection state). Introduces OpenChatModelOptionCatalog struct that constructs model-picker options for Direct Codex/Claude and OpenCode providers with support for marking default selections.
Workspace initial surface enum
Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Values/NewWorkspaceInitialSurface.swift
Adds .agentSession case to NewWorkspaceInitialSurface enum. Updates AppDelegate workspace creation to support agent-session initialization, creating and focusing the agent-session panel when selected.
Webview kind resolution and routing
webviews/src/main.tsx, webviews/src/router.tsx
Expands WebviewKind and resolveWebviewKind() to detect "open-chat" via DOM markers before "agent-session" and "diff". Adds /cmux-open-chat route to createWebviewsRouter. Refactors bootstrap to resolve kind once and conditionally mount the active surface.
Open Chat surface mount entrypoint
webviews/src/surfaces/openChatSurface.tsx
Implements readConfig() to parse #cmux-open-chat-config DOM element into OpenChatConfig. Implements mountOpenChatSurface to install styles, apply appearance tokens, set cmuxWebviewKind metadata, create router with OpenChatApp, and render into root.
OpenChatApp React component
webviews/src/open-chat/OpenChatApp.tsx
Defines OpenChatConfig payload contract type. Implements OpenChatApp with textarea auto-resize, Enter-to-submit, suggestion handling, voice toggle, model/approval/reasoning/context selection via useStoredSelection localStorage persistence, and full composer UI with menus, rate-limit card, and suggestion rows. Adds helper components and utility functions.
Open Chat styles
webviews/src/open-chat/styles.css
Adds comprehensive dark-mode stylesheet scoped to data-cmux-webview-kind="open-chat" with --agent-* color tokens, shell grid layout, account pill, rate-limit card, composer/textarea, toolbar controls, context menus with aria-checked visuals, suggestion rows, and responsive rules for ≤720px.
Localization strings (EN/JA)
Resources/Localizable.xcstrings
Adds ~697 lines of localized strings for CLI usage/error messages, command/menu/shortcut labels, and full Open Chat composer UI text including model/reasoning/approval labels, rate-limit messaging, context controls, voice input, and unavailability notices.
Agent session provider/renderer updates
Sources/AgentSessionRendererKind.swift, Resources/agent-session-solid/assets/app.js, Resources/agent-session-solid/index.html
Updates agent-session React resource path and enhances the native bridge with pointerDownAt and submitComposer methods. Expands provider selection/start request payloads with selectionId, modelId, and openCodeProviderId fields.
Compiled webview bundle chunks
Resources/markdown-viewer/webviews-app/chunks/..., Resources/markdown-viewer/webviews-app/main.mjs
Adds compiled openChatSurface.mjs, ids.mjs (ID generator), styles.mjs (agent theme CSS + DOM helpers), and styles2.mjs (diff-viewer CSS + color helpers). Updates installWebviewStyles.mjs and main.mjs bootstrap for webview kind resolution and conditional surface mounting.
Tests and Xcode registration
cmuxTests/OpenChatBrowserPanelTests.swift, cmuxTests/OpenChatShortcutSettingsTests.swift, cmux.xcodeproj/project.pbxproj
Adds OpenChatBrowserPanelTests covering session/history behaviors for open-chat URLs and OpenChatShortcutSettingsTests validating default shortcut. Registers all new CLI source files and test files in the Xcode build graph.

Sequence Diagram(s)

sequenceDiagram
  participant User as User / Shortcut
  participant AppDelegate as AppDelegate
  participant cmuxCLI as cmux open-chat (CLI)
  participant openChatContext as openChatContext()
  participant writeOpenChat as writeOpenChat()
  participant Socket as Socket / pane.create
  participant Webview as Open Chat Webview

  User->>AppDelegate: openChatForFocusedWorkspace(for: tabManager)
  AppDelegate->>AppDelegate: resolve workspace, validate bin/cmux
  AppDelegate->>cmuxCLI: spawn with --workspace-name, --focus, CMUX_SOCKET_PATH
  cmuxCLI->>openChatContext: cwd, optional workspace-name override
  openChatContext-->>cmuxCLI: OpenChatContext (repo, branch, workspace)
  cmuxCLI->>writeOpenChat: context, appearance, socket path
  writeOpenChat-->>cmuxCLI: OpenChatWriteResult (fileURL, viewerURL)
  cmuxCLI->>Socket: pane.create v2 (type: agent-session, viewerURL, token, allowedFiles)
  Socket-->>cmuxCLI: surface + pane IDs
  cmuxCLI-->>AppDelegate: stdout JSON/formatted output
  Socket->>Webview: load viewerURL in browser split
  Webview->>Webview: resolveWebviewKind() → "open-chat"
  Webview->>Webview: mountOpenChatSurface → render OpenChatApp
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • manaflow-ai/cmux#4429: Both PRs touch the shared agent-session plumbing—most directly Sources/AgentSessionProvider.swift (main PR extends launchArguments to accept/trim modelID, while the retrieved PR introduces the provider/renderer + executable/launch-plan foundations those arguments feed into).
  • manaflow-ai/cmux#4451: Both PRs modify the CLI subcommand routing and the shared "open viewer" plumbing in CLI/cmux.swift/CLI/cmux_open.swift—specifically extending the same diff-viewer URL/HTML generation infrastructure—so the new open-chat/chat behavior is directly tied to the diff codeview command's implementation path.
  • manaflow-ai/cmux#5016: Both PRs modify the git-diff viewer pipeline in CLI/cmux_open.swift (one refactors DiffViewerURLMapper session-history markers/URL fragments for open-chat vs diff viewer, the other changes how diff viewer HTML is written/refreshed non-blockingly with pendingReplacement/status handling).

Suggested reviewers

azooz2003-bit

Poem

🐇 A new chat has opened, the rabbit declares,
A composer for prompts, for models, for flair!
With ⌘⌃⇧C the webview springs to life,
From CLI to React, no more CLI strife.
Dark tokens and menus, suggestions aflow—
The open-chat surface now happily glows! ✨


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (2 errors, 1 warning)

Check name Status Explanation Resolution
Cmux User-Facing Error Privacy ❌ Error Error messages in control socket API leak internal provider names (codex|claude|opencode) and provider-specific flags (opencode_provider_id, react|solid) in user-facing ControlCallResult errors. Replace vendor-agnostic messages and generic field/invalid_value data structures in ControlCommandCoordinator+Pane.swift (lines 214-230) and ControlCommandCoordinator+Surface.swift (lines 265-281, 435-451) per the suggested hardening in...
Cmux Full Internationalization ❌ Error PR adds hardcoded English brand/model/provider names (Codex, Claude Code, OpenCode, Anthropic, OpenAI, Google, xAI, GPT-5.5, Sonnet, etc.) displayed to users without localization support in OpenCha... Localize all brand/model/provider label strings in OpenChatModelOptionCatalog.swift using String(localized:) with matching Localizable.xcstrings entries for all supported locales. Also fix cmux_open_chat_html.swift line 149 to use "agent...
Docstring Coverage ⚠️ Warning Docstring coverage is 3.58% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (20 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add Open Chat composer view (Codex-style)' is concise, clear, and accurately summarizes the primary feature addition across the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed Swift 6 actor isolation check: All new types (OpenChatModelOption, OpenChatModelOptionCatalog, control input structs, enum cases) follow established project patterns. Pure immutable value types cor...
Cmux Swift Blocking Runtime ✅ Passed PR introduces zero new blocking synchronization patterns. All new open-chat Swift files (cmux_open_chat.swift, context, html, labels) and new AppDelegate methods (openConfiguredChatForFocusedWorksp...
Cmux Expensive Synchronous Load ✅ Passed No expensive synchronous agent-history loads (RestorableAgentSessionIndex.load, git ops, JSONL parsing) added to main actor/interactive paths. Unused openChatContext/writeOpenChat functions defined...
Cmux Cache Substitution Correctness ✅ Passed Open Chat properly handles cold/stale caches: fresh context is embedded in HTML payload each time, localStorage selections are validated against fresh options, cold cache uses fresh defaults, stale...
Cmux No Hacky Sleeps ✅ Passed No new production non-Swift sleeps, timers, polling, or wall-clock delays introduced. Open Chat TypeScript/JavaScript/CSS files and new Swift CLI files contain no timing/delay mechanisms for race c...
Cmux Algorithmic Complexity ✅ Passed All algorithmic patterns operate on tiny fixed-size collections (model picker options: ~19 items) or explicitly bounded resources (PATH directories, 64MB file scan limit). No nested full-collection...
Cmux Swift Concurrency ✅ Passed PR introduces no new background DispatchQueues, Combine app state, completion-handler APIs, or fire-and-forget Tasks; all new Swift code uses synchronous patterns or AppKit/XCTest boundaries.
Cmux Swift @Concurrent ✅ Passed All new Swift methods properly respect concurrency rules: synchronous @MainActor-inherited methods require no @concurrent annotation, no async/await patterns without proper isolation, all call site...
Cmux Swift File And Package Boundaries ✅ Passed All new Swift files are under 400 lines with clear single responsibility (cmux_open_chat.swift 229 lines is CLI command handler); all additions to files over 800 lines are under 250-line limit; no...
Cmux Swiftpm Lockfiles ✅ Passed PR makes no SwiftPM dependency changes, Package.swift modifications, or .gitignore updates affecting Package.resolved. The rule is not applicable.
Cmux Swift Logging ✅ Passed Only logging added is two print() statements in new CLI/cmux_open_chat.swift (JSON and status output), which are allowed CLI command user-facing output per swift-logging.md rules. No secrets/person...
Cmux Swiftui State Layout ✅ Passed No new SwiftUI ObservableObject/@published state, GeometryReader layout, or render-time mutations introduced. New model option types are pure Sendable value structs. AppDelegate methods are domain...
Cmux Architecture Rethink ✅ Passed PR adds Open Chat feature with clean Swift architecture: no timing repairs, no duplicate state ownership, no split UI lifecycle - follows established patterns for configured action → built-in fallb...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR adds Open Chat surfaces as panels within existing workspaces, not as standalone windows. No new NSWindow/NSPanel/NSWindowController/WindowGroup creations. Linting script passes with no violations.
Cmux Source Artifacts ✅ Passed All changed paths comply with source-control-artifacts policy: hand-written Swift/TypeScript/CSS source, localization catalogs, tests, documentation, configs are intentional; .mjs chunks are explic...
Cmux No Test Or Debug Seam In Production Source ✅ Passed PR adds no new test/debug seams to production code. All new openChat methods are production features without test-only gates, #if DEBUG blocks, or ForTesting naming patterns. Pre-existing seams in...
Description check ✅ Passed The PR description is detailed and covers summary, validation, and localization audit, with only non-critical template sections missing.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-open-chat-composer-pane

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.

@greptile-apps

greptile-apps Bot commented Jun 20, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a Codex-style Open Chat composer as a bundled webview pane, mirroring the existing diff-viewer infrastructure for HTML generation, local HTTP serving, and session-history marker handling. Native entry points (File menu, command palette, Cmd+J/Cmd+Shift+J) funnel through a shared AppDelegate path; model/provider/reasoning selections are persisted and restored across sessions.

  • New cmux open-chat / cmux chat CLI writes a chat-*.html into the diff-viewer temp directory and opens it via browser.open_split, reusing the manifest allowlist and DiffViewerURLMapper machinery verbatim.
  • CodexAppServerSession turn-tracking overhaul adds turn-ID deduplication, queued-input drain on the in-flight path, and a close() method; shouldIgnoreNextLegacyTurnCompletion is not cleared in sendTurnStart's success-path reset block, leaving a window where a legacy bare-failure notification for Turn B is silently swallowed.
  • Model-aware provider launch adds launchArguments(modelID:) overloads for Codex (TOML config injection) and Claude (--model flag), and wires model/OpenCode-provider through process start, session snapshots, and restore.

Confidence Score: 4/5

Safe to merge with one targeted fix in CodexAppServerSession before shipping to users with active Codex sessions.

The turn-tracking refactor leaves shouldIgnoreNextLegacyTurnCompletion set to true when a queued Turn B begins. A legacy server that immediately sends a bare turn/failed before any item/* event will have that notification silently discarded, leaving isTurnInFlight = true permanently and freezing the session. The fix is a single missing reset line; CLI plumbing, HTML generation, native entry points, model launch args, and the composer UI are well-structured and low risk.

Sources/Panels/CodexAppServerSession.swift — the sendTurnStart success-path reset block.

Important Files Changed

Filename Overview
Sources/Panels/CodexAppServerSession.swift Large refactor adds turn-id tracking, queued-input drain on the in-flight path, and a close() method. shouldIgnoreNextLegacyTurnCompletion is not cleared in the normal reset block of sendTurnStart, leaving a window where a legacy server's bare turn-failure for Turn B is silently swallowed.
webviews/src/open-chat/OpenChatApp.tsx New Codex-style composer UI with localStorage persistence, stub submit/voice, and inline OptionMenu/ModelMenu components using ARIA roles and semantic buttons.
Sources/AppDelegate.swift Adds openChatForFocusedWorkspace, openChatWorkspace, and focusInitialAgentSessionComposer; wires to shortcuts, command palette, and openChat action.
Sources/Workspace.swift Adds newAgentSessionSplit, extends newAgentSessionSurface with model/provider params, adds .agentSession as an initialSurface case.
Sources/Panels/AgentSessionWebView.swift Adds local mouse-down monitor and focusComposer() JS bridge; lifecycle managed via viewDidMoveToWindow.
Sources/Panels/AgentSessionWebRendererCoordinator.swift Extends coordinator with model/provider-selection state; rewires provider.list to model-catalog shape and adds session-restore via resolvedInitialProviderSelectionID().
Sources/AgentSessionProvider.swift Adds model-aware launchArguments(modelID:) and tomlBasicStringLiteral for safe Codex TOML injection; cold-path only.
CLI/cmux_open_chat.swift New cmux open-chat/cmux chat CLI; mirrors diff-viewer argument conventions, delegates to pane.create socket API.
CLI/cmux_open_chat_html.swift Generates chat-*.html reusing manifest/allowlist machinery; per-call formatter allocations are on a cold path.

Reviews (23): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Comment thread CLI/cmux_open.swift Outdated
Comment thread Sources/AppDelegate.swift Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux_open.swift`:
- Around line 169-177: Extract the Open Chat feature implementation out of
cmux_open.swift into a separate focused file or helper module. Move the
OpenChatArguments struct along with all related Open Chat parser, context
derivation, writer, HTML payload, labels, and usage code (spanning the specified
ranges) into the new file. Keep cmux_open.swift as a dispatcher that delegates
to this new helper and maintains only common diff-viewer primitives, reducing
the file size and adhering to the 250-line addition limit for files already over
800 lines.
- Around line 216-221: The OpenChatContext struct currently stores a localized
branch name fallback directly in branchName, which causes machine-readable
output like JSON and persisted option IDs to become locale-dependent. Change
branchName from String to String? (optional) in the OpenChatContext struct to
keep the raw branch identity separate. Then update all code locations that
reference openChatContext.branchName (mentioned in the comment as lines
1079-1086, 1899-1908, 6002-6007, 6036-6038) to handle the optional value, emit
null or omit the branch field in JSON output when unavailable, and apply the
localized "No branch" display label only in UI rendering contexts, not in the
stored context or machine-readable output.

In `@Sources/AppDelegate.swift`:
- Around line 999-1002: The debugOpenChatHandler property in AppDelegate is a
test-only debug seam that should not exist in production source code. Remove the
debugOpenChatHandler variable and its doc comment from AppDelegate.swift, then
refactor the openChatForFocusedWorkspace(for:) method to use a proper production
abstraction (such as a dependency-injected protocol or service) instead of
checking for a test hook. This allows tests to configure behavior through normal
dependency injection mechanisms using `@testable` import rather than maintaining
debug-specific code paths in production sources.

In `@webviews/src/open-chat/OpenChatApp.tsx`:
- Around line 464-480: The div elements with className "open-chat-menu-section"
that have aria-label attributes (one with modelLabel and one with
reasoningLabel) are triggering Biome a11y errors because they lack explicit
semantic roles. Add an explicit role attribute set to "group" to both of these
div elements before or alongside the existing aria-label attribute to provide
proper ARIA semantics and resolve the accessibility validation errors.

In `@webviews/src/open-chat/styles.css`:
- Line 20: Address the two stylelint violations in styles.css: First, add an
empty line before the background property declaration at line 20 to satisfy the
declaration-empty-line-before rule. Second, locate line 505 and ensure all CSS
keyword values are in lowercase to comply with the value-keyword-case rule,
paying particular attention to function names like var() and any other CSS
keywords that may be incorrectly capitalized.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f0aebd0e-c7ea-4083-b890-915aa76ea0ce

📥 Commits

Reviewing files that changed from the base of the PR and between 22ab7f1 and 396b05b.

📒 Files selected for processing (29)
  • CLI/cmux.swift
  • CLI/cmux_open.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift
  • Resources/Localizable.xcstrings
  • Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/appearance.mjs
  • Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/ids.mjs
  • Resources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjs
  • Resources/markdown-viewer/webviews-app/chunks/openChatSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/styles.mjs
  • Resources/markdown-viewer/webviews-app/main.mjs
  • Sources/AppDelegate.swift
  • Sources/ContentView.swift
  • Sources/KeyboardShortcutSettings.swift
  • Sources/Panels/BrowserPanel.swift
  • Sources/TerminalController.swift
  • Sources/cmuxApp.swift
  • cmuxTests/AppDelegateShortcutRoutingTests.swift
  • cmuxTests/BrowserPanelTests.swift
  • skills/cmux-settings/references/shortcut-actions.md
  • web/data/cmux-shortcuts.ts
  • web/data/cmux.schema.json
  • webviews/src/main.tsx
  • webviews/src/open-chat/OpenChatApp.tsx
  • webviews/src/open-chat/styles.css
  • webviews/src/router.tsx
  • webviews/src/surfaces/openChatSurface.tsx

Comment thread CLI/cmux_open.swift Outdated
Comment thread CLI/cmux_open.swift Outdated
Comment thread Sources/AppDelegate.swift Outdated
Comment thread webviews/src/open-chat/OpenChatApp.tsx Outdated
Comment thread webviews/src/open-chat/styles.css

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
CLI/cmux_open.swift (1)

6030-6032: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use the repository root as the repository option id.

Line 6031 persists the repository option with context.repoName, which is only a display label and can collide across workspaces that share the same folder name. Use the stable path identity when available and keep repoName as the label.

Proposed fix
                 "repositories": [
-                    ["id": context.repoName, "label": context.repoName, "selected": true],
+                    ["id": context.repoRoot ?? context.repoName, "label": context.repoName, "selected": true],
                 ],
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLI/cmux_open.swift` around lines 6030 - 6032, In the repositories array
dictionary initialization, the "id" field is currently set to context.repoName
which is just a display label prone to collisions across workspaces. Replace the
"id" value with the stable repository root path identity from the context object
(likely context.rootPath or similar), while keeping context.repoName exclusively
for the "label" field to maintain the display name.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@CLI/cmux_open.swift`:
- Around line 6030-6032: In the repositories array dictionary initialization,
the "id" field is currently set to context.repoName which is just a display
label prone to collisions across workspaces. Replace the "id" value with the
stable repository root path identity from the context object (likely
context.rootPath or similar), while keeping context.repoName exclusively for the
"label" field to maintain the display name.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b65f0099-c47e-492b-a701-55c66fa0365b

📥 Commits

Reviewing files that changed from the base of the PR and between f4f5632 and c89cf97.

📒 Files selected for processing (7)
  • CLI/cmux_open.swift
  • Resources/Localizable.xcstrings
  • Resources/markdown-viewer/webviews-app/chunks/openChatSurface.mjs
  • Sources/AppDelegate.swift
  • cmuxTests/AppDelegateShortcutRoutingTests.swift
  • webviews/src/open-chat/OpenChatApp.tsx
  • webviews/src/open-chat/styles.css
💤 Files with no reviewable changes (1)
  • Sources/AppDelegate.swift

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
webviews/src/open-chat/OpenChatApp.tsx (1)

554-561: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Preserve literal replacement values in formatLabel.

String.prototype.replace interprets $ sequences in the replacement string, so a prompt/workspace value like $& is rendered as the matched placeholder instead of the literal value. Use a replacer callback and rebuild the generated bundle after the source fix.

🐛 Proposed fix
 function formatLabel(template: string, value: string): string {
-  return template.replace("%@", value).replace("%s", value);
+  return template.replace("%@", () => value).replace("%s", () => value);
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@webviews/src/open-chat/OpenChatApp.tsx` around lines 554 - 561, The
formatLabel function uses String.prototype.replace with direct string
replacement, which causes special `$` sequences in the value parameter to be
interpreted as replacement tokens instead of literal characters. Replace both
replace() calls in the formatLabel function with a replacer callback function
that returns the replacement string directly, ensuring that values containing
`$&` or other special sequences are treated as literal values. After fixing the
source code, rebuild the generated bundle.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux_open_chat.swift`:
- Around line 209-210: The code accepts three aliases for the cwd option (--cwd,
--repo, and --path) at line 209 in the case statement with openOptionValue, but
the CLI usage text and help documentation only mention --cwd, creating an
inconsistency in the public CLI contract. Locate all places where the cwd option
is documented in help text or error messages (including the general help output
and the unknown-flag usage text) and update them to include all three accepted
aliases: --cwd, --repo, and --path. The comment indicates the issue also appears
at lines 422 and 437, so ensure those locations are also updated to reflect all
accepted flag aliases.
- Around line 36-73: The localized() method in the OpenChatLabels struct defines
32 new localization keys with English default values, but these keys lack
translations in Resources/Localizable.xcstrings for 18 supported locales. Add
translations for all 32 keys (accountSwitcher, addCredits,
addCreditsUnavailable, approvalMode, approvalAutoReview, approvalDefault,
approvalFullAccess, approvalReadOnly, attachContext, branchSelector,
connectApps, connectAppsUnavailable, environmentSelector, exampleSuggestion,
headingFormat, model, modelEffort, reasoning, reasoningExtraHigh, reasoningHigh,
reasoningLow, reasoningMedium, noBranch, placeholder, rateLimitSubtitleFormat,
rateLimitTitle, repoSelector, resetUsage, resetUsageUnavailable, send,
submitUnavailableFormat, title, voiceInput, voiceUnavailable, workLocally) to
the localization file for each of the missing locales: ar, bs, da, de, es, fr,
it, km, ko, nb, pl, pt-BR, ru, th, tr, uk, zh-Hans, zh-Hant to meet the full
internationalization requirement.

---

Outside diff comments:
In `@webviews/src/open-chat/OpenChatApp.tsx`:
- Around line 554-561: The formatLabel function uses String.prototype.replace
with direct string replacement, which causes special `$` sequences in the value
parameter to be interpreted as replacement tokens instead of literal characters.
Replace both replace() calls in the formatLabel function with a replacer
callback function that returns the replacement string directly, ensuring that
values containing `$&` or other special sequences are treated as literal values.
After fixing the source code, rebuild the generated bundle.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9443f8a0-979c-4922-96ff-38115008c4a9

📥 Commits

Reviewing files that changed from the base of the PR and between c89cf97 and 210da1b.

📒 Files selected for processing (5)
  • CLI/cmux_open.swift
  • CLI/cmux_open_chat.swift
  • Resources/markdown-viewer/webviews-app/chunks/openChatSurface.mjs
  • cmux.xcodeproj/project.pbxproj
  • webviews/src/open-chat/OpenChatApp.tsx

Comment thread CLI/cmux_open_chat.swift Outdated
Comment thread CLI/cmux_open_chat.swift
…er-pane

# Conflicts:
#	.github/swift-file-length-budget.tsv
@austinywang

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 20, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Line 34247: The `open-chat|chat` command documentation is inconsistent between
two help sections. The usage line at line 34247 is missing the `--no-focus`
option that is included in the same command's documentation at line 34128.
Update the usage documentation for `open-chat|chat` at the later location to
include `--no-focus` option alongside the existing `--focus <true|false>` option
so both help sections match and provide users with complete and consistent
information about available options.

In `@Sources/TerminalController.swift`:
- Around line 6237-6239: The v2IsInternalCmuxWebviewURL function currently only
accepts the hardcoded loopback address 127.0.0.1 in its url.host check, while
browserIsTemporaryHistoryURL uses the full RemoteLoopbackProxyAlias
loopback/alias set. Replace the hardcoded 127.0.0.1 comparison with a check that
validates the url.host against RemoteLoopbackProxyAlias to ensure consistent
loopback/alias policy handling across both predicates and prevent internal
webview URLs using configured aliases from being misclassified.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: dc1c650d-68a4-49a9-9a26-838d8435aeb3

📥 Commits

Reviewing files that changed from the base of the PR and between 210da1b and 0f25a8c.

⛔ Files ignored due to path filters (1)
  • .github/swift-file-length-budget.tsv is excluded by !**/*.tsv
📒 Files selected for processing (8)
  • CLI/cmux.swift
  • CLI/cmux_open_chat.swift
  • CLI/cmux_open_chat_context.swift
  • CLI/cmux_open_chat_html.swift
  • Resources/Localizable.xcstrings
  • Sources/Panels/BrowserPanel.swift
  • Sources/TerminalController.swift
  • cmux.xcodeproj/project.pbxproj

Comment thread CLI/cmux.swift Outdated
Comment thread Sources/TerminalController.swift Outdated
@austinywang

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread Sources/Panels/CodexAppServerSession.swift

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux_open_chat_html.swift`:
- Line 148: The function openChatModelOptions is missing the private access
modifier even though it is only called internally within the file (as referenced
at line 73). Other similar helper functions in the file such as
writeOpenChatHTML and openChatPlaceholderResetTime are marked as private. Add
the private access modifier to the openChatModelOptions function signature to
maintain consistency with the other helper functions in the file.
- Line 149: In the `cmux_open_chat_html.swift` file, update the
`defaultModelLabel` variable assignment to use the dedicated localization key
instead of the generic one. Replace the dictionary lookup from using the
`"approvalDefault"` key to using the `"agentSession.web.modelDefault"` key when
accessing `labels.values`, ensuring consistency with the same implementation
pattern found in `AgentSessionWebRendererCoordinator.swift` and semantic clarity
since `"approvalDefault"` is already used for its intended purpose elsewhere in
the file.

In
`@Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlCommandCoordinator`+Pane.swift:
- Around line 214-230: The error messages in the invalidProvider and
invalidOpenCodeModel cases expose internal provider names and implementation
details that should not be visible to API consumers. In the invalidProvider case
message, remove the specific provider list "codex|claude|opencode" and use a
generic message. In the invalidOpenCodeModel case message, remove the reference
to "opencode_provider_id" which is an internal flag. Keep both error messages
provider-agnostic while still communicating what went wrong to the user.

In
`@Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlCommandCoordinator`+Surface.swift:
- Around line 265-281: The error responses in the switch cases (invalidProvider,
invalidRenderer, and invalidOpenCodeModel) are exposing internal
provider-specific details and vendor names that should not be visible to users.
Remove the specific provider/model identifiers from error messages (such as the
list of provider names in the invalidProvider message and the
opencode_provider_id reference in the invalidOpenCodeModel message), and
sanitize or remove the raw value tokens being echoed in the data payload. Keep
all error messages generic and user-friendly without revealing upstream vendor
names, internal provider identifiers, or provider-specific flags.

In
`@Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOptionCatalog.swift`:
- Around line 24-90: The user-visible model picker labels throughout the
directCodexOptions, directClaudeOptions, and openCodeOptions properties, as well
as in the helper methods directDefaultOption, directOption, and openCodeOption,
are hardcoded as raw English string literals instead of using localization APIs.
Replace all user-facing label strings (such as "GPT-5.5", "Claude Code",
"Sonnet", "OpenCode", and provider names) with appropriate localized string
calls using the project's localization mechanism, and ensure corresponding
entries are added to the string catalog for all supported locales to maintain
consistency with the rest of the Open Chat UI.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: be1dea90-358d-4d99-945a-a1289f835e95

📥 Commits

Reviewing files that changed from the base of the PR and between 7ce935b and 26b2604.

⛔ Files ignored due to path filters (1)
  • .github/swift-file-length-budget.tsv is excluded by !**/*.tsv
📒 Files selected for processing (34)
  • CLI/cmux.swift
  • CLI/cmux_open.swift
  • CLI/cmux_open_chat.swift
  • CLI/cmux_open_chat_html.swift
  • CLI/cmux_open_chat_labels.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlCommandCoordinator+Pane.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlPaneCreateInputs.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlPaneCreateResolution.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlCommandCoordinator+Surface.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceCreateInputs.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceCreateResolution.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceSplitInputs.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceSplitResolution.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOption.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOptionCatalog.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swift
  • Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Values/NewWorkspaceInitialSurface.swift
  • Resources/Localizable.xcstrings
  • Resources/agent-session-react/assets/app.js
  • Resources/agent-session-react/index.html
  • Resources/agent-session-solid/assets/app.js
  • Resources/agent-session-solid/index.html
  • Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/openChatSurface.mjs
  • Resources/markdown-viewer/webviews-app/chunks/styles2.mjs
  • Sources/AgentExecutableResolver.swift
  • Sources/AgentSessionProvider.swift
  • Sources/AgentSessionRendererKind.swift
  • Sources/AppDelegate.swift
  • Sources/CmuxConfig.swift
  • Sources/CmuxSurfaceTabBarBuiltInAction.swift
  • Sources/ContentView.swift
💤 Files with no reviewable changes (12)
  • Sources/AgentSessionRendererKind.swift
  • Sources/CmuxSurfaceTabBarBuiltInAction.swift
  • Resources/markdown-viewer/webviews-app/chunks/styles2.mjs
  • Sources/CmuxConfig.swift
  • Sources/ContentView.swift
  • Sources/AgentSessionProvider.swift
  • Sources/AgentExecutableResolver.swift
  • CLI/cmux_open.swift
  • Resources/agent-session-solid/index.html
  • Resources/agent-session-solid/assets/app.js
  • Sources/AppDelegate.swift
  • Resources/markdown-viewer/webviews-app/chunks/openChatSurface.mjs

Comment thread CLI/cmux_open_chat_html.swift Outdated
Comment thread CLI/cmux_open_chat_html.swift Outdated
…er-pane

# Conflicts:
#	.github/swift-file-length-budget.tsv
#	CLI/cmux_open.swift
#	Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs
@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — 216d97ff Deployed Jun 24, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants