Add Open Chat composer view (Codex-style) - #6476
austinywang wants to merge 41 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds an end-to-end ChangesOpen Chat End-to-End Slice
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
Suggested reviewersazooz2003-bit Poem
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (2 errors, 1 warning)
✅ Passed checks (20 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
Greptile SummaryAdds 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,
Confidence Score: 4/5Safe to merge with one targeted fix in CodexAppServerSession before shipping to users with active Codex sessions. The turn-tracking refactor leaves Sources/Panels/CodexAppServerSession.swift — the Important Files Changed
Reviews (23): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile |
There was a problem hiding this comment.
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
📒 Files selected for processing (29)
CLI/cmux.swiftCLI/cmux_open.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swiftResources/Localizable.xcstringsResources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjsResources/markdown-viewer/webviews-app/chunks/appearance.mjsResources/markdown-viewer/webviews-app/chunks/diffSurface.mjsResources/markdown-viewer/webviews-app/chunks/ids.mjsResources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjsResources/markdown-viewer/webviews-app/chunks/openChatSurface.mjsResources/markdown-viewer/webviews-app/chunks/styles.mjsResources/markdown-viewer/webviews-app/main.mjsSources/AppDelegate.swiftSources/ContentView.swiftSources/KeyboardShortcutSettings.swiftSources/Panels/BrowserPanel.swiftSources/TerminalController.swiftSources/cmuxApp.swiftcmuxTests/AppDelegateShortcutRoutingTests.swiftcmuxTests/BrowserPanelTests.swiftskills/cmux-settings/references/shortcut-actions.mdweb/data/cmux-shortcuts.tsweb/data/cmux.schema.jsonwebviews/src/main.tsxwebviews/src/open-chat/OpenChatApp.tsxwebviews/src/open-chat/styles.csswebviews/src/router.tsxwebviews/src/surfaces/openChatSurface.tsx
There was a problem hiding this comment.
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 winUse 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 keeprepoNameas 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
📒 Files selected for processing (7)
CLI/cmux_open.swiftResources/Localizable.xcstringsResources/markdown-viewer/webviews-app/chunks/openChatSurface.mjsSources/AppDelegate.swiftcmuxTests/AppDelegateShortcutRoutingTests.swiftwebviews/src/open-chat/OpenChatApp.tsxwebviews/src/open-chat/styles.css
💤 Files with no reviewable changes (1)
- Sources/AppDelegate.swift
There was a problem hiding this comment.
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 winPreserve literal replacement values in
formatLabel.
String.prototype.replaceinterprets$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
📒 Files selected for processing (5)
CLI/cmux_open.swiftCLI/cmux_open_chat.swiftResources/markdown-viewer/webviews-app/chunks/openChatSurface.mjscmux.xcodeproj/project.pbxprojwebviews/src/open-chat/OpenChatApp.tsx
…er-pane # Conflicts: # .github/swift-file-length-budget.tsv
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
.github/swift-file-length-budget.tsvis excluded by!**/*.tsv
📒 Files selected for processing (8)
CLI/cmux.swiftCLI/cmux_open_chat.swiftCLI/cmux_open_chat_context.swiftCLI/cmux_open_chat_html.swiftResources/Localizable.xcstringsSources/Panels/BrowserPanel.swiftSources/TerminalController.swiftcmux.xcodeproj/project.pbxproj
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
.github/swift-file-length-budget.tsvis excluded by!**/*.tsv
📒 Files selected for processing (34)
CLI/cmux.swiftCLI/cmux_open.swiftCLI/cmux_open_chat.swiftCLI/cmux_open_chat_html.swiftCLI/cmux_open_chat_labels.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlCommandCoordinator+Pane.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlPaneCreateInputs.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Pane/ControlPaneCreateResolution.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlCommandCoordinator+Surface.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceCreateInputs.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceCreateResolution.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceSplitInputs.swiftPackages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceSplitResolution.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOption.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/OpenChatModelOptionCatalog.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction+Defaults.swiftPackages/macOS/CmuxSettings/Sources/CmuxSettings/Values/ShortcutAction.swiftPackages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Values/NewWorkspaceInitialSurface.swiftResources/Localizable.xcstringsResources/agent-session-react/assets/app.jsResources/agent-session-react/index.htmlResources/agent-session-solid/assets/app.jsResources/agent-session-solid/index.htmlResources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjsResources/markdown-viewer/webviews-app/chunks/diffSurface.mjsResources/markdown-viewer/webviews-app/chunks/openChatSurface.mjsResources/markdown-viewer/webviews-app/chunks/styles2.mjsSources/AgentExecutableResolver.swiftSources/AgentSessionProvider.swiftSources/AgentSessionRendererKind.swiftSources/AppDelegate.swiftSources/CmuxConfig.swiftSources/CmuxSurfaceTabBarBuiltInAction.swiftSources/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
…er-pane # Conflicts: # .github/swift-file-length-budget.tsv # CLI/cmux_open.swift # Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs
Summary
cmux open-chatandcmux chat, plus native File menu, command palette, and keyboard-shortcut entrypoints.Diff-viewer mechanism mirrored
chat-*.htmlfile into the existing diff-viewer temp directory.ensureDiffViewerAssets, the bundled webviews app, the local HTTP server, and the manifest allowlist used by Git Diff viewer pages.browser.open_splitwithshow_omnibar: false, transparent background, remote-proxy bypass, and a#cmux-open-chathistory marker parallel to#cmux-diff-viewer.AppDelegate.openChatForFocusedWorkspace(for:)path that spawns the bundled CLI, matching the diff viewer opening flow.Interactions wired
localStorage.+button opens context selection.Placeholder / stubbed data
5.5,5.1,5) and reasoning levels are representative placeholders.Validation
./scripts/build-webviews-app.shbun run lintinwebviewsResources/Localizable.xcstrings,web/data/cmux.schema.json,web/messages/en.json,web/messages/ja.jsongit diff --check HEAD~3..HEADbefore merge andgit diff --check origin/main..HEADafter mergePer request, I did not run local app builds, reload scripts, xcodebuild, or local tests.
Localization audit
Resources/Localizable.xcstringsfor Open Chat menu, command palette, shortcut label, CLI help/errors, and generated webview labels/statuses in English and Japanese.openChat.*/cli.openChat.*/ Open Chat entrypoint keys have English and Japanese values.Need help on this PR? Tag
/codesmithwith 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
/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.cmux open-chat(aliascmux chat) with workspace/window/surface flags and--provider|--renderer|--model|--open-code-provider; serves a generatedchat-*.htmlvia the diff viewer server.cmux.openChat; shortcuts Cmd+J (pane) and Cmd+Shift+J (new workspace). Uses a configuredcmux.openChataction when present.Bug Fixes
esbuild/tailwindcssfromnode_moduleswith clear errors; remote tmux session list parsing handles CRLF.Written for commit 216d97f. Summary will update on new commits.
Summary by CodeRabbit
New Features
open-chat/chatCLI commands, plus in-app entry points (File menu and Command Palette). Open Chat also gains a dedicated keyboard shortcut (Cmd+Ctrl+Shift+C).