feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@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

feat(web): distinguish provider instances in the sidebar - #6005

Closed
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges
Closed

feat(web): distinguish provider instances in the sidebar#6005
zcuric wants to merge 2 commits into
pingdotgg:mainfrom
zcuric:feat/sidebar-provider-instance-badges

Conversation

@zcuric

@zcuriczcuric commented Aug 10, 2026

Copy link
Copy Markdown

Problem

If you configure more than one instance of the same provider — two Claude accounts, say a personal one and a work one — the sidebar cannot tell them apart. Every Claude thread shows the same Claude logo, so the only way to know which account a thread runs on is to open it. Provider instances already carry a user-set display name and accent color (Settings → Providers); the sidebar just never used them.

Change

Thread rows now show the instance's accent color as a small dot on the provider logo, and the hover tooltip names the instance next to the model. The badge appears when an instance has an accent color, or when a driver has more than one configured instance, so the ambiguity is never silent.

This reuses the badge treatment ProviderInstanceIcon already provides for the model picker. No contract or server changes — the instance id is already on each thread and the instance metadata is already on the client.

Thread rows

BeforeAfter
before-sidebarafter-sidebar

Three of these threads run on Claude and two on Codex. Before, the three Claude rows are identical; after, green marks the personal instance and red the work instance.

Hover tooltip

BeforeAfter
before-tooltip-cropafter-tooltip-crop

Project names and thread titles in these screenshots are anonymized test data.

Scope

  • Web sidebar only. The legacy sidebar shows no provider information at all today, and mobile has its own thread list; neither is touched here.
  • docs/user/thread-sidebar.md gains a short section describing the badge.

Verification

  • vp run --filter @t3tools/web typecheck, vp lint, vp fmt --check clean.
  • Web unit suite: 2002 tests passing.
  • Checked in a local dev client against a copy of real state with three configured instances (two Claude, one Codex).

Made with Claude Opus 5 via Claude Code.


Note

Low Risk
Sidebar-only presentation using existing thread and per-environment config data; no API or server changes.

Overview
Provider instance badges and names now appear on web sidebar thread rows and hover tooltips, reusing ProviderInstanceIcon’s model-picker badge treatment (accent dot when configured, or when multiple instances share the same driver).

Per-environment lookup replaces resolving every thread against the primary server’s provider list: each row gets providerEntriesByEnvironment.get(thread.environmentId), with a stable empty map fallback so rows don’t thrash before config loads.

User docs add a short Telling provider instances apart section in thread-sidebar.md.

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

Note

Distinguish provider instances in the sidebar with badges and instance names

  • Provider icons in thread rows and search result rows now show a colored dot badge when multiple instances of the same driver exist or when an instance has a custom accent color.
  • A new shouldShowInstanceBadge utility determines badge visibility based on accent color or duplicate driver kinds per environment.
  • Tooltips show the instance display name (prefixed before the model label) when available.
  • Provider instance metadata is now resolved per environment using deriveProviderInstanceEntries, replacing reliance on primaryServerProvidersAtom, so threads from remote environments show correct instance names and styling.
  • A stable EMPTY_PROVIDER_ENTRIES constant prevents unnecessary re-renders when an environment has no config.

Macroscope summarized 7b869be.

Threads running on different instances of the same provider looked
identical in the sidebar: every Claude thread showed the same Claude
logo, so two configured accounts (say personal and work) were
impossible to tell apart without opening the thread.
Thread rows now carry the instance's accent color as a dot on the
provider logo, and the hover tooltip names the instance next to the
model ("Claude Work - Claude Opus 5"). The badge appears when an
instance has an accent color, or when a driver has more than one
configured instance, so ambiguity is never silent. This reuses the
badge treatment the model picker already uses; no contract changes.
@coderabbitai

coderabbitaiBot commented Aug 10, 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: 1a54adfa-61fd-4dfb-ab08-720c0ea66600

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:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
Comment threadapps/web/src/components/Sidebar.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 26e6423. Configure here.

Comment threadapps/web/src/components/Sidebar.tsx
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding visual badges and display names to sidebar threads to distinguish provider instances. First-time contribution from this author; changes are well-contained and follow existing patterns but introduce new user-facing behavior that warrants human verification.

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

The sidebar rendered every thread's provider metadata from the primary
server's instance list, but it lists threads from every connected
environment. Instance ids are user-defined and a driver's default id is
the driver kind itself, so `claudeAgent` exists on every server running
Claude with a different name and accent on each. A remote thread
therefore borrowed the primary machine's account name and color -- the
confusion the badge exists to remove -- or lost its badge entirely when
the id existed only on the remote.
Each environment now gets its own instance lookup, built from the
per-environment server configs the sidebar already reads for
capabilities.
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing this PR after an automated pass over open pull requests. Provider account identity in the sidebar already shipped in #5980 and #7292.

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

Labels

size:L100-499 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.

2 participants

@zcuric@t3dotgg