fix(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown
, '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(web): read SidebarV2 provider icons from all environments, not just primary - #5300

Closed
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env
Closed

fix(web): read SidebarV2 provider icons from all environments, not just primary#5300
ashraftown wants to merge 2 commits into
pingdotgg:mainfrom
ashraftown:fix/provider-icon-per-env

Conversation

@ashraftown

@ashraftownashraftown commented Aug 3, 2026

Copy link
Copy Markdown

In the sidebar, provider icons were derived only from primaryServerProvidersAtom. That atom is empty unless a primary connection target is set, so in hosted-static and multi-environment setups a thread belonging to a remote (non-primary) environment rendered without its provider icon.

The fix builds providerEntryByInstanceId from environmentServerConfigsAtom across all environments, so each thread looks up its provider instance by id from the environment it actually belongs to.

BeforeAfter
BeforeAfter

Fixes#5289

Model: DeepSeek V4 Flash via OpenCode.


Note

Low Risk
UI-only lookup change in the sidebar; no auth, data, or API behavior changes.

Overview
Sidebar V2 no longer builds the provider-instance lookup from primaryServerProvidersAtom alone. That source only reflects the primary connection target and is often empty in hosted-static or multi-environment setups, so threads on other environments showed no provider icon.

The lookup map is now assembled from environmentServerConfigsAtom, merging deriveProviderInstanceEntries across every environment’s config.providers. Each thread still resolves its icon by instance id, but the metadata comes from the environment the thread belongs to.

Reviewed by Cursor Bugbot for commit a097adc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix provider icons in SidebarV2 to read from all environments, not just primary

SidebarV2.tsx previously used primaryServerProvidersAtom to build the provider icon map, so icons only appeared for providers in the primary environment. It now uses allEnvironmentServerConfigsAtom, aggregating entries across all environment configs into a single map keyed by instanceId. Risk: if multiple environments share a duplicate instanceId, the last environment's entry wins.

Macroscope summarized a097adc.

…st primary
SidebarV2 reads providers from primaryServerProvidersAtom, which is
empty when the user has no PrimaryConnectionTarget (e.g. app.t3.codes
with a T3 Connect relay host). Switch to environmentServerConfigsAtom
so provider icons render for threads on any connected environment.
Fixes provider icon not showing in sidebar thread rows for T3 Connect
/ relay-connected remote hosts.
@coderabbitai

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: 37616092-1194-4691-ac3e-ae27d450d40e

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 size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 3, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved a097adc

Straightforward bug fix that expands icon lookup from primary environment only to all environments. The change is self-contained to sidebar icon display with clear intent and limited risk.

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

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]: Sidebar V2 provider icon missing for non-primary (T3 Connect/SSH/Tailscale) environments

1 participant

@ashraftown