Repository navigation
fix/sandbox picker no host fallback - #49
Merged
OmarAlex24 merged 1 commit intoNov 13, 2026
Merged
OmarAlex24 merged 1 commit into
OmarAlex24 merged 1 commit into
Conversation
On a sandbox chat's host mirror, the picker read the sandbox's provider only from its paired thread. While that thread was unlisted (sandbox starting, resuming or stopped, or an unpaired client such as app.t3.codes), it fell back to the host's provider list, and picking the host's Claude was refused with SANDBOX_BRIDGE_SWITCH_REFUSAL. The picker now falls back to the host's read of the sandbox (sandboxes.subscribeThreadMirror), as the phone does, and sets picks through sandboxes.setThreadModel. With neither source it shows the mirror's pick read-only, with the reason, and the effort keybinding and /model do nothing. Mobile shares the derivation, so its sheet and "Manage hidden models" no longer list the host's providers either. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Problem
On a sandbox chat whose own thread this client does not list (sandbox starting, stopped, or not paired), the model picker offered the host's providers. Picking the host's Claude was refused: "This chat runs on a sandbox, so it keeps the sandbox's agent."
Change
sandboxMirrorPickerSource(client-runtime) decides every picker on a mirror: the paired sandbox thread, else the host's read of the sandbox (sandboxes.subscribeThreadMirror, as mobile uses), else the mirror's current pick read-only and disabled with a reason. A pick without a paired thread goes throughsandboxes.setThreadModel. Covered: the picker and its effort column, the controls bar, the model-picker and effort keybindings,/model, and on mobile the composer control, the thread settings sheet and "Manage hidden models". The host's guard is unchanged.Scope and approval
Requested by the fork owner in a T3 Code session, after installing stack pingdotgg#43. Part of stack pingdotgg#52 on
feat/sandbox-environments.Verification
sandboxMirror.test.tscases (source precedence; never the host's providers) failed before the fixvp run check:changed omar/feat/sandbox-environmentspasses format, lint, knip, typecheck, 17 test files (144 tests) and react compilerChatView.sandboxLaunchandChatView.sandboxLaunchReleasedbrowser tests pass 6/6 runs at this layer and at the topNot yet run in a real client.
Model and harness: Claude Opus 5.5 (implementation subagents at high effort, coordinated by Claude Opus 5.5) in Claude Code, running in T3 Code.
🤖 Generated with Claude Code