fix(decopilot): default to "ephemeral" branch + rename laptop → desktop#3432
Merged
Conversation
POST /decopilot/threads/:id/messages was throwing 400 "thread has no branch pinned" whenever the thread row and request body both omitted a branch — broke the multi-pod attach-cross-pod CI test and the default Decopilot chat for agents without a connected repo. Fall back to the "ephemeral" synthetic branch (already recognized by isSyntheticBranch in packages/sandbox/daemon/constants.ts, never git-checked-out) and persist it onto the thread row so subsequent messages hit the same vmMap entry. Also rename the laptop-CLI concept to desktop-CLI across the codebase: LaptopSandboxProvider -> DesktopSandboxProvider, LaptopCli/ ConnectLaptop components + file renames, claude-code-laptop / codex-laptop AgentOption literals -> -desktop, laptop:<harness> credential sentinel -> desktop:<harness>, Laptop01 icon -> Monitor01, and all prose mentions in comments/docs/READMEs/helm YAML. Migrations 084/088 left untouched (shipped history). Finally, constrain the merged chat-model popover height to var(--radix-popover-content-available-height) with overflow-y-auto so the picker scrolls when the viewport can't fit all three sections (Decopilot/Claude Code/Codex × 3 tiers each). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
🧪 BenchmarkShould we run the Virtual MCP strategy benchmark for this PR? React with 👍 to run the benchmark.
Benchmark will run on the next push after you react. |
Contributor
Release OptionsSuggested: Patch ( React with an emoji to override the release type:
Current version:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is this contribution about?
Fixes the multi-pod
attach-cross-podCI failure and the default Decopilot chat 400 (thread has no branch pinned) introduced by #3417 — when neither the thread row nor the request body pins a branch, default to the"ephemeral"synthetic branch (already recognized byisSyntheticBranchinpackages/sandbox/daemon/constants.tsand nevergit checkout'd) and persist it onto the thread row so subsequent messages share the samevmMapentry. Also renames the "laptop-CLI" concept to "desktop-CLI" across the codebase — types (LaptopSandboxProvider,LaptopCli…,ConnectLaptop…), file renames,AgentOptionliterals (claude-code-laptop→claude-code-desktop, same for codex), thelaptop:<harness>credential sentinel, theLaptop01icon (→Monitor01), and prose mentions in comments / READMEs / helm YAML (migrations 084/088 left untouched as shipped history). Finally, constrains the merged chat-model popover tomax-h-[var(--radix-popover-content-available-height)] overflow-y-autoso it scrolls when the viewport can't fit all three sections × three tiers.Screenshots/Demonstration
Before: popover overflowed the top of the viewport on small screens (Fast/Smart unreachable). After: the picker fits the available space and scrolls when needed.
How to Test
400 thread has no branch pinned; the thread row should end up withbranch = "ephemeral".multi-podCI job —tests/multi-pod/scenarios/attach-cross-pod.test.tsshould pass.Migration Notes
None —
"ephemeral"is already a first-class synthetic branch on the daemon side. TheAgentOptionlocalStorage rename will silently migrate any storedclaude-code-laptop/codex-laptopvalue tonullon next load (same pattern PR #3417 used when it removeddecopilot-laptop).Review Checklist
🤖 Generated with Claude Code
Summary by cubic
Default Decopilot threads to the synthetic "ephemeral" branch when no branch is pinned, fixing 400s on first message and the multi‑pod attach‑cross‑pod CI failure. Also rename the laptop‑CLI concept to desktop‑CLI across the codebase and make the merged model picker scroll on small screens.
Bug Fixes
POST /decopilot/threads/:id/messages: fall back to"ephemeral"when neither the thread nor request pins a branch; persist it to the thread so subsequent messages hit the same vmMap entry.max-h-[var(--radix-popover-content-available-height)]andoverflow-y-autoto prevent off‑screen overflow.Refactors
LaptopSandboxProvider→DesktopSandboxProvider,ConnectLaptopDialog→ConnectDesktopDialog, iconLaptop01→Monitor01, CLI/help/docs/tests.claude-code-laptop→claude-code-desktop,codex-laptop→codex-desktop;credentialIdfromlaptop:<harness>→desktop:<harness>.Written for commit ae2ccd7. Summary will update on new commits. Review in cubic