fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(mobile): identify OpenCode model providers - #4945

Closed
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker
Closed

fix(mobile): identify OpenCode model providers#4945
danvernon wants to merge 3 commits into
pingdotgg:mainfrom
danvernon:t3code/fix-mobile-opencode-model-picker

Conversation

@danvernon

@danvernondanvernon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Add the OpenCode icon to mobile provider surfaces.
  • Keep OpenCode sub-provider metadata when building mobile model options.
  • Show the sub-provider in both the new-task and existing-thread model pickers.
  • Add a regression test for duplicate model names from different subscriptions.

Why

OpenCode can expose the same model through Anthropic, Zen, GitHub Copilot, and other subscriptions. Mobile discarded that provider detail and fell back to the OpenAI icon, so duplicate model names were impossible to tell apart.

Closes#4890.

UI Changes

BeforeAfter
Two identical Claude Sonnet 4.5 rows in the OpenCode pickerClaude Sonnet 4.5 rows identified as Anthropic and GitHub Copilot

No motion or timing behavior changed.

Verification

  • vp test run src/lib/modelOptions.test.ts
  • Mobile TypeScript check
  • Lint and format checks on the changed files
  • Reproduced the bug and verified the fix in the iOS simulator against a disposable T3 environment

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or interaction behavior changed

Built with GPT-5.6 Sol through the Codex harness in T3 Code.

Note

Add OpenCode model provider icon and show subProvider subtitles in model selection

  • Adds a dedicated OpenCode icon to ProviderIcon with dark-mode-aware colors, rendered when provider === 'opencode'.
  • Updates buildModelOptions to use model.subProvider as the subtitle when available, falling back to the provider display label.
  • Hides redundant subtitles in the model selection menus in NewTaskDraftScreen and ThreadComposer when the subtitle matches the group's provider label.

Macroscope summarized 7683231.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4bcf919-3907-4dcc-8c26-727de1d2dae8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Jul 30, 2026
@danvernon
danvernon marked this pull request as ready for review July 30, 2026 09:01
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved de21a17

This is a simple UI fix that adds an OpenCode provider icon and uses sub-provider names (e.g., "Anthropic", "GitHub Copilot") as subtitles when available. Changes are display-only with no runtime behavior impact, and include test coverage.

You can customize Macroscope's approvability policy. Learn more.

@danvernon
danvernonforce-pushed the t3code/fix-mobile-opencode-model-picker branch from de21a17 to b54e81cCompareJuly 30, 2026 14:17
@dzubo

Copy link
Copy Markdown

Isi it possible to add to the test case for internal Opencode "providers" (zen, go)?

@tifuck

Copy link
Copy Markdown

Chiming in as this bug affects me too, but on Android. When I open the model picker with a couple of OpenCode providers configured (OpenRouter and OpenAI auth in my case), I get multiple entries for the same model with no way to tell which provider each one belongs to. It works fine on desktop, so the mobile picker is the only place this falls apart.

The subProvider subtitle approach here looks like exactly the right fix. Since the PR currently has merge conflicts with main, hopefully it can get a rebase and a maintainer review soon. Happy to test the change on Android once it's updated, since the original testing was iOS only.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this as replaced by #8573. The merged mobile picker shows the model source in new and existing threads and includes it in search and accessibility labels. The OpenCode icon was already present. This closure is part of an automated pass based on our investigation.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile app model picker does not identify OpenCode model providers and shows incorrect logo

4 participants

@danvernon@dzubo@tifuck@t3dotgg