-
Notifications
You must be signed in to change notification settings - Fork 0
feat(ui): match Glance footer button and banner geometry, split Muse Assist and Muse Code quotas #167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(ui): match Glance footer button and banner geometry, split Muse Assist and Muse Code quotas #167
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,16 @@ | ||
| # CodeCaps — Effort Log | ||
|
|
||
| ## 2026-10-05 — Glance footer equidistant polish, Muse Assist & Muse Code quota split [AG, in progress] | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Required pre-work coordination is missing from the Also found in:
Kody rule violation: Keep credentials out of public source and verify UI changes with automated screenshots Prompt for LLMTalk to Kody by mentioning @kody Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction. |
||
|
|
||
| Lane: `ag/glance-footer-equidistant-muse-split`. | ||
|
|
||
| - Glance footer geometry & styling polish: updated footer height to 40pt with 28pt custom prominent button style (`GlanceFooterProminentButtonStyle`), exactly matching the runaway marquee notice banner's 28pt height and `RoundedRectangle(cornerRadius: 6)`. Configured button padding so top (6pt), bottom (6pt), and trailing (6pt) margins to the window and divider edges are mathematically equidistant. Ensured high-contrast rendering across dark mode (pastel accent with dark ink) and light mode (deep accent with crisp white text). | ||
| - Split Muse into two separate providers: replaced generic `muse` with dedicated `muse-assist` ("Muse Assist") and `muse-code` ("Muse Code") in `QuotaProviders.expected` (total 9 expected providers). Preserved backward compatibility with aliases for `muse-assist`, `muse-assistant`, `muse-code`, `muse`, `muse-cli`, and `muse-sdk`. | ||
| - Asset bundling & cross-platform mappings: bundled high-resolution `muse-assist.png` (transparent background blue script "m") and `muse-code.png` (Meta infinity loop artwork from `MuseCode - Dark Mode.png`). Generated 1x/2x/3x asset catalogs (`provider-muse-assist.imageset`, `provider-muse-code.imageset`) for iOS companion and widgets. Updated `PlatformLogo`, `CompanionQuotaModel`, `WidgetPresentation`, and `WidgetViews`. | ||
| - Verification: all 721 unit tests passing across `QuotaCoreTests` (390 tests) and `CodeCapsTests` (331 tests); clean build of `CodeCapsCompanion` iOS simulator target via `xcodebuild`. | ||
|
|
||
| --- | ||
|
|
||
| ## 2026-10-04 — Glance title breathing room, dynamic pacing highlights, PiP widget, and iOS companion polish [AG, in progress] | ||
|
|
||
| Lane: `ag/ui-glance-pacing-pip-ios-polish`. Board `bb2a8b26`, `7175aba0`, `1ac04ba9`, `4be8a67a`, `4bcf84f1`. | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -293,7 +293,9 @@ public struct CompanionQuotaItem: Identifiable, Codable, Equatable { | |
| if key.contains("grok-bot") { return "provider-grok-bot" } | ||
| if key.contains("grok") || key.contains("xai") { return "provider-grok" } | ||
| if key.contains("minimax") { return "provider-minimax" } | ||
| if key.contains("muse") { return "provider-muse" } | ||
| if key.contains("muse-assist") || key.contains("muse_assist") { return "provider-muse-assist" } | ||
| if key.contains("muse-code") || key.contains("muse_code") { return "provider-muse-code" } | ||
| if key.contains("muse") { return "provider-muse-code" } | ||
| if key.contains("antigravity") || key.contains("gemini") { return "provider-gemini" } | ||
| return nil | ||
| } | ||
|
|
@@ -1269,8 +1271,14 @@ public final class CompanionQuotaModel: ObservableObject { | |
| if pKey.contains("minimax") || prov.contains("minimax") { | ||
| return ("minimax", "MiniMax", "minimax") | ||
| } | ||
| if pKey.contains("muse-assist") || prov.contains("muse-assist") || prov.contains("muse assist") || id.contains("assist") { | ||
| return ("muse-assist", "Muse Assist", "muse-assist") | ||
| } | ||
| if pKey.contains("muse-code") || prov.contains("muse-code") || prov.contains("muse code") || id.contains("code") { | ||
| return ("muse-code", "Muse Code", "muse-code") | ||
| } | ||
| if pKey.contains("muse") || prov.contains("muse") { | ||
| return ("muse", "Muse", "muse") | ||
| return ("muse-code", "Muse Code", "muse-code") | ||
| } | ||
|
Comment on lines
1280
to
1282
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Canonicalization drift affects Prompt for LLMTalk to Kody by mentioning @kody Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction.
Comment on lines
+1274
to
1282
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Provider misclassification in the new Muse branches places the unscoped if pKey.contains("muse") || prov.contains("muse") {
let wantsAssist = pKey.contains("assist") || prov.contains("assist") || id.contains("assist")
return wantsAssist
? ("muse-assist", "Muse Assist", "muse-assist")
: ("muse-code", "Muse Code", "muse-code")
}Prompt for LLMTalk to Kody by mentioning @kody Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction. |
||
| if pKey.contains("grok-bot") || prov.contains("grok-bot") || prov.contains("grok bot") || id.contains("grok-bot") { | ||
| return ("grok-bot", "Grok Bot", "grok-bot") | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| { | ||
| "images": [ | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "1x", | ||
| "filename": "provider-muse-assist.png" | ||
| }, | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "2x", | ||
| "filename": "provider-muse-assist@2x.png" | ||
| }, | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "3x", | ||
| "filename": "provider-muse-assist@3x.png" | ||
| } | ||
| ], | ||
| "info": { | ||
| "author": "xcode", | ||
| "version": 1 | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| { | ||
| "images": [ | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "1x", | ||
| "filename": "provider-muse-code.png" | ||
| }, | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "2x", | ||
| "filename": "provider-muse-code@2x.png" | ||
| }, | ||
| { | ||
| "idiom": "universal", | ||
| "scale": "3x", | ||
| "filename": "provider-muse-code@3x.png" | ||
| } | ||
| ], | ||
| "info": { | ||
| "author": "xcode", | ||
| "version": 1 | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -139,7 +139,9 @@ struct ProviderMarkView: View { | |
| if low.contains("openai") || low.contains("codex") { return "provider-openai" } | ||
| if low.contains("cursor") { return "provider-cursor" } | ||
| if low.contains("minimax") { return "provider-minimax" } | ||
| if low.contains("muse") { return "provider-muse" } | ||
| if low.contains("muse-assist") || low.contains("muse_assist") { return "provider-muse-assist" } | ||
| if low.contains("muse-code") || low.contains("muse_code") { return "provider-muse-code" } | ||
| if low.contains("muse") { return "provider-muse-code" } | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Verification gap in the Also found in:
Kody rule violation: Gate iOS/TestFlight releases on a signing-safe workflow and verify UI changes with automated screenshots Prompt for LLMTalk to Kody by mentioning @kody Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction. |
||
| if low.contains("antigravity") { return "provider-antigravity" } | ||
| if low.contains("gemini") { return "provider-gemini" } | ||
| if low.contains("grok-bot") { return "provider-grok-bot" } | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Provider misclassification in
canonicalKeyapplies theviabranch forassist/assistant/codewithout confirming Muse, so manifest groups keyed solely bycanonicalKey(provider:providerKey:nil, via:group.via)(QuotaModels.swift:494) and deduped throughmanifestIndexsilently merge a non-Muse group advertised withvia: "code"into Muse Code and regroup its windows. Gate themuse-assist/muse-codereturns on a trimmed, lowercasedproviderKeyor fallbackprovidercontainingmuse.Prompt for LLM
Talk to Kody by mentioning @kody
Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction.