Uh oh!
There was an error while loading. Please reload this page.
Swap amico.svg - #99
Merged
Merged
Conversation
kateebonner added a commit
that referenced
this pull request
Jul 9, 2026
…ntext
The tab icon rendered solid black regardless of theme: amico_reduced.svg
carries fill="currentColor" for live-DOM consumers (icon.ts's inline
mark, which correctly inherits --vscode-foreground), but a WebviewPanel
tab icon is a static image with no DOM to inherit from — currentColor
there resolves to nothing and falls back to black.
Fix: tabIconPaths() derives the two literal-fill files VS Code's
{light,dark} iconPath API requires from the SAME single authored
amico_reduced.svg (string-substituting the fill), generated once into
globalStorageUri rather than checked into the repo — keeps the "two
authored SVG files" design while the tab icon actually adapts.
Also: package.json's activitybar/panel viewsContainers icons now point
at amico_reduced.svg instead of amico.svg — same small-size legibility
argument PR #99 already established for the tab icon and inline mark
applies here too (VS Code masks/recolors these regardless of fill, but
the fine circuit-pattern geometry still doesn't resolve at that size).
amico.svg is now unreferenced by code — kept as the large/detailed asset
for whatever future context actually renders it big enough to matter.
Tests: 433 pass (431 + 2 new for tabIconPaths), 0 fail. Typecheck clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>Swaps in the redesigned Amico mark and reshapes how it is consumed so
the geometry lives in the .svg files, not in duplicated code.
Assets (media/):
- amico.svg — the detailed mark (redesigned).
- amico_reduced.svg — the same mark's outer bracket only, for small
sizes. Both carry fill="currentColor" on the <svg> root so their
color is driven by the host, not baked in.
logo() atom (media/ui/atoms/logo.ts, replaces icon.ts's mark()):
logo({ variant?, fill? })
variant "full" (default) → amico.svg; "reduced" → amico_reduced.svg
fill defaults to var(--vscode-foreground) (theme-responsive) via
currentColor; overridable.
Both files are imported as raw text (esbuild {".svg":"text"} loader +
a matching vitest transform + svg.d.ts), so the .svg is the single
source of truth — no path data duplicated in TS (the exact thing that
silently drifted before). inspector.ts's brand mark now calls
logo({ variant: "reduced" }).
Small-context consumers use the reduced mark: package.json's
activitybar/panel icons → amico_reduced.svg (VS Code auto-recolors
these monochrome masks per theme).
Chat panel native tab icon (chat_panel.ts): a WebviewPanel tab icon is
a static image with no DOM, so currentColor can't resolve there (it
rendered dark). VS Code's only theme-adaptive path is a committed
{light, dark} pair inside the extension folder — verified via probe
that an icon in globalStorageUri renders as nothing, and the .vsix
extension folder is read-only so runtime generation is impossible.
media/amico-tab-{light,dark}.svg are therefore committed, derived from
amico_reduced.svg with a theme-foreground gray fill; a unit test keeps
them in lockstep with the source geometry.
Tests: logo.test.ts (both variants, theme default, fill override) +
chat_panel_icon.test.ts (tab pair fills + geometry sync). 435 pass,
typecheck clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>kateebonnerforce-pushed
the
kate/amico-mark-refresh
branch
from
July 9, 2026 01:23
576d444 to
84ab68cCompareUh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
packages/extension/media/amico.svgwith Kate's redesigned markamico.svg(detailed, large contexts) andamico_reduced.svg(the same mark's outer bracket path only, no internal accents — small contexts). Both carry a singlefill="currentColor"on their<svg>root (inherited by every child shape, none of which declare their own fill) — no per-file hardcoded colors, no per-consumer file variants.atoms/icon.ts's inline mark is a canonical.svgfile import (esbuildloader: {".svg": "text"}) instead of a hand-duplicated TS literal — the single-source-of-truth fix that prevents the exact drift this redesign otherwise re-triggered (see opencode PR β.1: amico-run thin process orchestrator (closes #1) #7, which caught the previous version of this mark going stale in the fork).Not in this PR (scoped out on request)
Chat panel tab icon theming was cut: VS Code's webview tab icon (
panel.iconPath) renders outside any live DOM, sofill="currentColor"can't resolve there — the platform's only mechanism for a theme-adaptive tab icon is two static{light, dark}files, which contradicts the two-file goal above.chat_panel.tsstays on its pre-existing single-file behavior (now pointed at the newamico.svg). The light/dark tab legibility question is deferred, not solved wrong.Test plan
pnpm --filter amicode-v2 test— 431 passed, 0 failedpnpm --filter amicode-v2 typecheck— clean