Skip to content

Draw a brand mark for every harness in the desktop app - #1584

Merged
realtonyyoung merged 2 commits into
mainfrom
tonyyoung/ai-3939-vendor-marks
Oct 18, 2026
Merged

realtonyyoung merged 2 commits into
mainfrom
tonyyoung/ai-3939-vendor-marks

Conversation

@realtonyyoung

@realtonyyoung realtonyyoung commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

AI-3939 (no GitHub issue; one would import as a duplicate of the Linear issue)

What & why

Mistral Vibe, Kiro, Pi, Antigravity, Grok and Muse showed monogram tiles in the harness picker, agent chip and session rail. They now draw brand marks, the same path strings as the server's vendor chip (kurrent-io/kcap-server#2490). Mistral publishes no Vibe-specific logo, and Vibe's CLI draws Mistral's pixel M, so Vibe uses the Mistral AI icon from Simple Icons. Kiro, Antigravity, Pi and Grok come from LobeHub Icons (MIT). Muse uses muse.ai's own squiggle SVG, scaled to 24×24.

Where to look

The marks keep each vendor's existing VendorTiles tint as their fill, so no colours change.

Verification

VendorIconsTests parses each harness's mark in headless Avalonia and requires non-empty bounds, for every HarnessRegistry identity plus muse-assistant. I wrote the Kiro and Grok paths with fully separated arc flags, then rasterised each one to confirm it renders pixel-identical to the source SVG.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added brand marks for Kiro, Antigravity, Pi, Grok, Mistral Vibe, Muse, and Muse Assistant. These marks appear alongside the existing vendor branding.
  • Tests
    • Added coverage to verify that supported vendors have visible brand marks, helping catch missing or unreadable marks.

Mistral publishes no Vibe-specific mark, so Vibe takes Mistral's pixel M, the mark its CLI draws itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@linear-code

linear-code Bot commented Oct 18, 2026

Copy link
Copy Markdown

AI-3939

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: c49528d1-8413-49c7-8916-1011f608aa0c
📥 Commits

Reviewing files that changed from the base of the PR and between 9cdc904 and adadc9c.

📒 Files selected for processing: 3
  • src/Capacitor.App/Assets/LobeHub-Icons-LICENSE.txt
  • src/Capacitor.App/Capacitor.App.csproj
  • src/Capacitor.App/Views/VendorIcons.cs

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

📝 Walkthrough

VendorIcons documents its path format and sources, and adds path data for seven vendor keys. The project includes an icon license as an Avalonia resource. A unit test checks that registered harness vendors and muse-assistant have icons with non-zero bounds width.

Changes: Vendor icon coverage

Layer / File(s) Summary
Add vendor marks
src/Capacitor.App/Views/VendorIcons.cs, src/Capacitor.App/Assets/LobeHub-Icons-LICENSE.txt, src/Capacitor.App/Capacitor.App.csproj
VendorIcons documents the 24×24 filled-path format and mark sources. It adds path data for kiro, antigravity, pi, grok, mistral-vibe, muse, and muse-assistant. The project includes the LobeHub Icons license as an Avalonia resource.
Check vendor icon coverage
test/Capacitor.App.Tests.Unit/VendorIconsTests.cs
A non-parallel test checks icon bounds width for registered harness vendors and muse-assistant on the Avalonia dispatcher.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Suggested reviewers: alexeyzimarev

Merge Risk: ⚪ Minimal · up to adadc

The added marks cover the supported vendor IDs, and the coverage test exercises them. No actionable merge risk remains.

### Architecture Summary

Architecture risk: 🔵 Low · up to adadc

The change affects 2 systems.

Changed systems: src, test

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — src (service) was modified; 3 changed files map to changed impact.
  • observed — test (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in test/Capacitor.App.Tests.Unit/VendorIconsTests.cs: Adds VendorIconsTests, marked non-parallel for the AvaloniaSession collection. Vendors() supplies registered harness vendor IDs and "muse-assistant"; the test checks that each vendor’s icon bounds width, read on the Avalonia dispatcher and defaulted to zero when no icon is returned, is greater than zero.
  • observed — Modified behavior in src/Capacitor.App/Assets/LobeHub-Icons-LICENSE.txt: Adds the LobeHub Icons attribution and MIT license terms for the vendor-mark path data.
  • observed — Modified behavior in src/Capacitor.App/Capacitor.App.csproj: Adds the LobeHub Icons license file to the assembly’s Avalonia resources.
  • observed — Modified behavior in src/Capacitor.App/Views/VendorIcons.cs: The documentation now describes the 24×24 filled-path format, lists Simple Icons, LobeHub Icons, and vendor-provided SVGs as sources, and retains the monogram fallback and per-call parsing notes. This replaces the narrower claim that all paths come from Simple Icons.
Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 2 files. (2 skipped: 2 … Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: adding brand marks for all harnesses in the desktop app.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 2 files. (2 skipped: 2 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

  • Fix all pre-merge checks with AI
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Add brand marks for all desktop harnesses

✨ Enhancement 🧪 Tests 🕐 20-40 Minutes

Grey Divider

AI Description

• Replace monogram fallbacks with brand marks for Kiro, Antigravity, Pi, Grok, Mistral Vibe, and
 Muse.
• Preserve each vendor’s existing tile tint across desktop glyphs.
• Test that every registered harness and Muse Assistant has a parseable mark with non-empty bounds.
Diagram

graph TD
    Registry["Harness registry"] --> Tests["Icon coverage test"] --> Icons["Vendor icon paths"] --> Glyph["Glyph builder"] --> UI["Desktop surfaces"]
    Tiles["Vendor tile tints"] --> Glyph
Loading
High-Level Assessment

Extending the existing path table is appropriate for this scoped change: it reuses the desktop glyph rendering and tint behavior without introducing an asset-loading path. Separate SVG resources would add handling without a clear benefit for these marks.

Files changed (2) +38 / -3

Enhancement (1) +20 / -3
VendorIcons.csAdd missing vendor brand paths +20/-3

Add missing vendor brand paths

• Adds 24×24 path data for Kiro, Antigravity, Pi, Grok, Mistral Vibe, Muse, and Muse Assistant. Documents the mark sources and the choice of Mistral’s pixel M for Vibe; the existing rendering and fallback behavior remain unchanged.

src/Capacitor.App/Views/VendorIcons.cs

Tests (1) +18 / -0
VendorIconsTests.csVerify brand-mark coverage for every harness +18/-0

Verify brand-mark coverage for every harness

• Adds a headless Avalonia test that checks for a parsed mark with positive width for every HarnessRegistry identity and Muse Assistant.

test/Capacitor.App.Tests.Unit/VendorIconsTests.cs

@qodo-code-review

qodo-code-review Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 🔗 Cross-repo conflicts (1) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Muse Assistant chips look inconsistent 🔗 Cross-repo conflict ≡ Correctness
Description
The desktop app adds a muse-assistant brand path, but the server's shared vendor-mark table has no
corresponding entry, so the server vendor chip continues using its monogram fallback. The server
nevertheless exposes muse-assistant as a recorded vendor with session routes, so the same vendor
appears across both repositories with different visual treatment.
Code

src/Capacitor.App/Views/VendorIcons.cs[R38-39]

+        ["muse-assistant"] =
+            "M5.91 3.869C6.777 3.869 7.396 4.546 7.396 5.607C7.396 6.669 7.225 7.626 6.941 9.659C6.738 11.084 6.389 13.258 6.243 14.162C6.523 13.628 7.178 12.378 7.294 12.144C8.666 9.375 10.096 6.901 10.508 6.246C11.054 5.372 11.535 5.021 12.278 5.021C12.664 5.022 13.124 5.217 13.352 5.477C13.66 5.829 13.725 6.398 13.714 7.019C13.698 7.97 13.574 9.486 13.405 11.177C13.33 11.929 13.185 13.466 13.087 14.496C13.965 12.925 15.591 10.035 16.246 9.025C16.817 8.146 17.392 7.579 18.164 7.579C18.83 7.579 19.651 8.05 19.603 9.302C19.531 11.149 19.264 15.174 19.143 16.979C19.96 15.79 21.033 14.029 21.436 13.367C21.842 12.698 22.26 12.157 22.894 12.139C23.544 12.12 23.979 12.562 23.999 13.244C24.019 13.927 23.612 14.694 23.072 15.565C22.486 16.511 21.831 17.523 21.033 18.468C20.236 19.413 19.502 20.131 18.384 20.131C17.382 20.131 16.677 19.465 16.628 18.246C16.602 17.607 16.723 16.234 16.814 15.16C16.92 13.917 17.048 12.717 17.137 11.923C16.256 13.535 14.402 16.912 13.568 18.23C12.752 19.52 12.355 19.974 11.493 19.975C10.631 19.975 10.253 19.354 10.241 18.42C10.227 17.407 10.988 11.324 11.246 9.297C10.828 10.191 9.801 12.385 9.157 13.69C8.534 14.953 7.489 17.135 6.73 18.393C6.184 19.298 5.57 19.975 4.66 19.975C3.75 19.975 3.236 19.363 3.236 18.379C3.236 17.395 3.521 15.756 3.827 13.723C3.98 12.739 4.155 11.667 4.352 10.53C4.496 9.708 4.746 8.26 4.9 7.371C4.2 8.461 2.941 10.423 2.558 11.014C2.131 11.671 1.749 12.15 1.115 12.15C0.416 12.15 0 11.605 0 10.971C0 10.337 0.322 9.848 0.846 8.988C1.518 7.883 2.726 6.377 3.388 5.586C4.168 4.654 4.947 3.869 5.91 3.869Z",
Relevance

●●● Strong

Cross-surface vendor consistency is an explicit PR goal, and similar vendor-chip consistency
findings were accepted.

PR-#904
PR-#909
PR-#1471

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR adds a desktop-only muse-assistant path. The server's vendor-mark table contains the other
shared marks but ends without a muse-assistant entry, while the server API documentation confirms
that muse-assistant is an active recorded vendor with dedicated session routes.

kcap-cli -> kcap-server
src/Capacitor.App/Views/VendorIcons.cs[35-39]
External repo: kurrent-io/kcap-server, src/Capacitor.Ui/Components/Kit/VendorMarks.cs [8-43]
External repo: kurrent-io/kcap-server, docs/API_REFERENCE.md [106-110]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

Issue description
The desktop app now renders a brand mark for `muse-assistant`, but the server-side vendor chip definition has no `muse-assistant` path and will retain the monogram fallback for the same recorded vendor.

Fix Focus Areas
- src/Capacitor.App/Views/VendorIcons.cs[38-39]
- /cross_repos/kcap-server/src/Capacitor.Ui/Components/Kit/VendorMarks.cs[8-43]

Recommended Fix
Add the identical `muse-assistant` path to the server's `VendorMarks` table, then update or add the server UI test covering the vendor chip so both repositories render the same mark.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


Grey Divider

Context sources
❌ Tickets: failed to load — Ticket collection could not establish complete evidence
✅ Compliance rules (platform): 59 rules
✅ Cross-repo context — repo relationships
  Explored: repo: kurrent-io/kcap-server (branch: claude-tyoung/mistral-vibe-logo-chip-6966ac, sha: a5e23548) — View relationship
Review mode: Auto: 🚀 Fast: Localized icon path additions with focused rendering coverage and low blast radius.

Grey Divider

Tip of the day
💡 Did you know, you can move or hide resolved findings to focus on what still needs action

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment on lines +38 to +39
["muse-assistant"] =
"M5.91 3.869C6.777 3.869 7.396 4.546 7.396 5.607C7.396 6.669 7.225 7.626 6.941 9.659C6.738 11.084 6.389 13.258 6.243 14.162C6.523 13.628 7.178 12.378 7.294 12.144C8.666 9.375 10.096 6.901 10.508 6.246C11.054 5.372 11.535 5.021 12.278 5.021C12.664 5.022 13.124 5.217 13.352 5.477C13.66 5.829 13.725 6.398 13.714 7.019C13.698 7.97 13.574 9.486 13.405 11.177C13.33 11.929 13.185 13.466 13.087 14.496C13.965 12.925 15.591 10.035 16.246 9.025C16.817 8.146 17.392 7.579 18.164 7.579C18.83 7.579 19.651 8.05 19.603 9.302C19.531 11.149 19.264 15.174 19.143 16.979C19.96 15.79 21.033 14.029 21.436 13.367C21.842 12.698 22.26 12.157 22.894 12.139C23.544 12.12 23.979 12.562 23.999 13.244C24.019 13.927 23.612 14.694 23.072 15.565C22.486 16.511 21.831 17.523 21.033 18.468C20.236 19.413 19.502 20.131 18.384 20.131C17.382 20.131 16.677 19.465 16.628 18.246C16.602 17.607 16.723 16.234 16.814 15.16C16.92 13.917 17.048 12.717 17.137 11.923C16.256 13.535 14.402 16.912 13.568 18.23C12.752 19.52 12.355 19.974 11.493 19.975C10.631 19.975 10.253 19.354 10.241 18.42C10.227 17.407 10.988 11.324 11.246 9.297C10.828 10.191 9.801 12.385 9.157 13.69C8.534 14.953 7.489 17.135 6.73 18.393C6.184 19.298 5.57 19.975 4.66 19.975C3.75 19.975 3.236 19.363 3.236 18.379C3.236 17.395 3.521 15.756 3.827 13.723C3.98 12.739 4.155 11.667 4.352 10.53C4.496 9.708 4.746 8.26 4.9 7.371C4.2 8.461 2.941 10.423 2.558 11.014C2.131 11.671 1.749 12.15 1.115 12.15C0.416 12.15 0 11.605 0 10.971C0 10.337 0.322 9.848 0.846 8.988C1.518 7.883 2.726 6.377 3.388 5.586C4.168 4.654 4.947 3.869 5.91 3.869Z",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. Muse assistant chips look inconsistent 🔗 Cross-repo conflict ≡ Correctness

The desktop app adds a muse-assistant brand path, but the server's shared vendor-mark table has no
corresponding entry, so the server vendor chip continues using its monogram fallback. The server
nevertheless exposes muse-assistant as a recorded vendor with session routes, so the same vendor
appears across both repositories with different visual treatment.
Agent Prompt
Issue description
The desktop app now renders a brand mark for `muse-assistant`, but the server-side vendor chip definition has no `muse-assistant` path and will retain the monogram fallback for the same recorded vendor.

Fix Focus Areas
- src/Capacitor.App/Views/VendorIcons.cs[38-39]
- /cross_repos/kcap-server/src/Capacitor.Ui/Components/Kit/VendorMarks.cs[8-43]

Recommended Fix
Add the identical `muse-assistant` path to the server's `VendorMarks` table, then update or add the server UI test covering the vendor chip so both repositories render the same mark.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Not a conflict: this compares against kcap-server main. The companion PR kurrent-io/kcap-server#2490 adds the identical muse-assistant path to VendorMarks. There, KitVendorChipTests requires every Vendor.Recorded member (which includes muse-assistant) to render an SVG mark. Both surfaces draw the same mark once both land.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 18, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@realtonyyoung
realtonyyoung merged commit 964dc13 into main Oct 18, 2026
10 checks passed
@realtonyyoung
realtonyyoung deleted the tonyyoung/ai-3939-vendor-marks branch October 18, 2026 19:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant