From db8c2457a566ed3ac15dda1caba3280cc4081330 Mon Sep 17 00:00:00 2001 From: Robin Ebers Date: Mon, 24 Aug 2026 12:03:56 +0400 Subject: [PATCH 1/2] fix(claude): show Fable directly below weekly usage --- .../Providers/Claude/ClaudeProvider.swift | 4 +- Sources/OpenUsage/Stores/DefaultLayout.swift | 8 ++-- .../OpenUsage/Stores/LayoutBootstrap.swift | 9 ++++ Tests/OpenUsageTests/LayoutStoreTests.swift | 40 +++++++++++++++--- docs/assets/claude-fable-weekly.png | Bin 0 -> 60435 bytes docs/providers/claude.md | 5 ++- 6 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 docs/assets/claude-fable-weekly.png diff --git a/Sources/OpenUsage/Providers/Claude/ClaudeProvider.swift b/Sources/OpenUsage/Providers/Claude/ClaudeProvider.swift index 5bd2b90ba..c295db33d 100644 --- a/Sources/OpenUsage/Providers/Claude/ClaudeProvider.swift +++ b/Sources/OpenUsage/Providers/Claude/ClaudeProvider.swift @@ -49,10 +49,10 @@ final class ClaudeProvider: ProviderRuntime { .exportingLimit("session", unit: "percent"), .percent(id: "claude.weekly", provider: provider, title: "Weekly") .exportingLimit("weekly", unit: "percent"), - .percent(id: "claude.sonnet", provider: provider, title: "Sonnet") - .exportingLimit("sonnet", unit: "percent"), .percent(id: "claude.fable", provider: provider, title: "Fable") .exportingLimit("fable", unit: "percent"), + .percent(id: "claude.sonnet", provider: provider, title: "Sonnet") + .exportingLimit("sonnet", unit: "percent"), .boundedDollars(id: "claude.extra", provider: provider, title: "Extra Usage", metricLabel: "Extra usage spent", limit: 100, valueWord: "spent") .exportingLimit("extraUsage", unit: "usd", source: .progressOrValue(kind: .dollars)), .usageTrend(provider: provider) diff --git a/Sources/OpenUsage/Stores/DefaultLayout.swift b/Sources/OpenUsage/Stores/DefaultLayout.swift index d1f309f67..c161b41b3 100644 --- a/Sources/OpenUsage/Stores/DefaultLayout.swift +++ b/Sources/OpenUsage/Stores/DefaultLayout.swift @@ -9,7 +9,7 @@ enum DefaultLayout { static let metricIDs: [String] = [ "antigravity.geminiPro", "antigravity.geminiWeekly", "antigravity.claude", "antigravity.claudeWeekly", - "claude.session", "claude.weekly", "claude.trend", + "claude.session", "claude.weekly", "claude.fable", "claude.trend", "claude.extra", "claude.today", "claude.yesterday", "claude.last30", "codex.weekly", "codex.spark", "codex.sparkWeekly", "codex.trend", @@ -77,9 +77,9 @@ enum DefaultLayout { // Antigravity: the Gemini pool pair (5h + weekly) stays above the fold; the non-Gemini // (Claude) pool pair sits below the caret. "antigravity.claude", "antigravity.claudeWeekly", - // Claude's core meters (Session, Weekly, Extra, Usage Trend) stay above the fold; spend-history - // rows sit below the caret. Matches every other provider's "core above, history below" shape. - "claude.sonnet", "claude.fable", "claude.today", "claude.yesterday", "claude.last30", + // Claude's core meters (Session, Weekly, Fable, Extra, Usage Trend) stay above the fold; + // optional Sonnet and spend-history rows sit below the caret. + "claude.sonnet", "claude.today", "claude.yesterday", "claude.last30", // Codex's core Session/Weekly meters and Usage Trend stay above the fold; Spark (the optional // model-specific limits), credits, reset details, and spend rows sit below the caret. "codex.spark", "codex.sparkWeekly", diff --git a/Sources/OpenUsage/Stores/LayoutBootstrap.swift b/Sources/OpenUsage/Stores/LayoutBootstrap.swift index 5e6015a3e..09f79a120 100644 --- a/Sources/OpenUsage/Stores/LayoutBootstrap.swift +++ b/Sources/OpenUsage/Stores/LayoutBootstrap.swift @@ -86,6 +86,15 @@ enum LayoutBootstrap { shouldPersistExpanded = true } + // A formerly optional On Demand metric can later become an always-visible default. Its old + // saved section was seeded before the user enabled it, so honor the new placement when the + // metric is first auto-added without disturbing metrics the user already arranged. + let newlyAlwaysShown = Set(seededResult.newlyPlaced).subtracting(defaults.expandedMetricIDs) + if !expandedMetricIDs.isDisjoint(with: newlyAlwaysShown) { + expandedMetricIDs.subtract(newlyAlwaysShown) + shouldPersistExpanded = true + } + // Optional default-expanded metrics enter below the caret the first time they are enabled. The // saved queue wins so an explicit user move is not recreated on the next launch. let placedIDs = Set(seededResult.placed.map(\.descriptorID)) diff --git a/Tests/OpenUsageTests/LayoutStoreTests.swift b/Tests/OpenUsageTests/LayoutStoreTests.swift index 5f5dd07ae..ad3e11038 100644 --- a/Tests/OpenUsageTests/LayoutStoreTests.swift +++ b/Tests/OpenUsageTests/LayoutStoreTests.swift @@ -432,6 +432,28 @@ final class LayoutStoreTests: XCTestCase { XCTAssertTrue(reloaded.expandedMetricIDs.contains("claude.today")) } + func testNewlySeededAlwaysVisibleMetricLeavesPreviouslySavedOnDemandSection() { + let defaults = makeDefaults("SeedNewAlwaysVisible") + saveStored([PlacedWidget(descriptorID: "claude.session")], forKey: "layout", in: defaults) + defaults.set(["claude.today"], forKey: "layout.expandedMetrics") + + let makeStore = { + LayoutStore( + registry: .mock, + defaults: defaults, + storageKey: "layout", + defaultMetricIDs: ["claude.session", "claude.today"], + migrationBaselineMetricIDs: ["claude.session"], + defaultExpandedMetricIDs: [] + ) + } + + let store = makeStore() + XCTAssertTrue(store.isMetricEnabled("claude.today")) + XCTAssertFalse(store.expandedMetricIDs.contains("claude.today")) + XCTAssertFalse(makeStore().expandedMetricIDs.contains("claude.today")) + } + func testMigrationPersistKeepsLegacyOptionalMetricExpandOnEnableAfterReload() { let defaults = makeDefaults("SeedExpandedKeepsFallback") // Legacy layout: predates the expanded feature (no saved expanded set). @@ -638,7 +660,7 @@ final class LayoutStoreTests: XCTestCase { let store = LayoutStore(registry: registry, defaults: makeDefaults("FreshCustomizeOrder"), storageKey: "layout") XCTAssertEqual(store.orderedSupportedMetrics(for: "claude").map(\.id), [ - "claude.session", "claude.weekly", "claude.sonnet", "claude.fable", "claude.extra", + "claude.session", "claude.weekly", "claude.fable", "claude.sonnet", "claude.extra", "claude.trend", "claude.today", "claude.yesterday", "claude.last30" ]) XCTAssertEqual(store.orderedSupportedMetrics(for: "codex").map(\.id), [ @@ -671,7 +693,7 @@ final class LayoutStoreTests: XCTestCase { let store = LayoutStore(registry: registry, defaults: makeDefaults("RecommendedDefaults"), storageKey: "layout") XCTAssertEqual(Set(store.placed.map(\.descriptorID)), Set([ - "claude.session", "claude.weekly", "claude.trend", + "claude.session", "claude.weekly", "claude.fable", "claude.trend", "claude.extra", "claude.today", "claude.yesterday", "claude.last30", "codex.weekly", "codex.spark", "codex.sparkWeekly", "codex.trend", "codex.credits", "codex.rateLimitResets", "codex.today", "codex.yesterday", "codex.last30", @@ -682,6 +704,8 @@ final class LayoutStoreTests: XCTestCase { "cursor.usage", "cursor.auto", "cursor.api", "cursor.grokBot", "cursor.trend", "cursor.onDemand", "cursor.today", "cursor.yesterday", "cursor.last30" ])) + XCTAssertTrue(store.isMetricEnabled("claude.fable")) + XCTAssertFalse(store.isPinned("claude.fable")) XCTAssertFalse(store.isMetricEnabled("claude.sonnet")) XCTAssertFalse(store.isMetricEnabled("codex.session")) XCTAssertFalse(store.isPinned("codex.session")) @@ -698,10 +722,14 @@ final class LayoutStoreTests: XCTestCase { ($0.provider.id, $0.expandedMetrics.map(\.id)) }) - // Claude's core meters (Session, Weekly, Extra, Usage Trend) stay primary; spend-history rows - // go below the caret — the same "core above, history below" shape as the other providers. - XCTAssertEqual(primaryByProvider["claude"], ["claude.session", "claude.weekly", "claude.extra", "claude.trend"]) - XCTAssertEqual(expandedByProvider["claude"], ["claude.sonnet", "claude.fable", "claude.today", "claude.yesterday", "claude.last30"]) + // Claude's core meters keep Fable directly below Weekly; optional Sonnet and spend-history + // rows go below the caret. + XCTAssertEqual(primaryByProvider["claude"], [ + "claude.session", "claude.weekly", "claude.fable", "claude.extra", "claude.trend" + ]) + XCTAssertEqual(expandedByProvider["claude"], [ + "claude.sonnet", "claude.today", "claude.yesterday", "claude.last30" + ]) XCTAssertEqual(primaryByProvider["codex"], ["codex.session", "codex.weekly", "codex.trend"]) // Spark (the optional model-specific limits) leads the On Demand section, before credits. XCTAssertEqual(expandedByProvider["codex"], [ diff --git a/docs/assets/claude-fable-weekly.png b/docs/assets/claude-fable-weekly.png new file mode 100644 index 0000000000000000000000000000000000000000..53a713970a968965b2f0d0a748aa2a0bdfadb27d GIT binary patch literal 60435 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� z5G9038r&>`_lp3PD>bi&Z6dhweJ=Wfq@<($+JgA42Y-$YbCpx@(?{FFiBGu=d@7f9 zS5|QEi_iJ;XC9OMs8$`%vEwY9k_Zh3gD}lIHv73TDw`+tST2IVq_c)3c}$q3C+(IJb=8D@u+pyBcmA3GXqQ>a@A3C`^xz zeLO(FZa%-AhL`{9A_jYip3&&-G=QN`o9&Ckcgu8_9+0S+Vl(Z1#x}v5$OPLJHyMpV zP=sV9><+@e6MbMe;$5IAj?MF6Qt`REr0welA^ou118X#gj{q7v6NxV_K=mdS6rV44 z4W!FSm1q9vNHFkEdlt;w1LoA*CSiYkQX%ygimUY*`v3nqnG6_a-Y}OkASsjdpX0PF zZ*O@~8Iq$f{?DPr5OIv7co`wBKbjySd-72M1uNvgcN^Sn2=pq5R9)ha zL-D{@nPOQH#sA;Cm73=Qdew%T|8EDR<`sYj`uQfisQ(@{bgTApK(BzE>i-|MzlZbx ddf1wMFzUZ$&4)rkB)5PcIcX)SqE`l={udDAyFCB^ literal 0 HcmV?d00001 diff --git a/docs/providers/claude.md b/docs/providers/claude.md index 391ba85bf..443f2c898 100644 --- a/docs/providers/claude.md +++ b/docs/providers/claude.md @@ -8,12 +8,13 @@ Tracks your Claude subscription limits using the login you already have from Cla |---|---| | Session | 5-hour rolling window usage | | Weekly | 7-day window usage | -| Sonnet | Separate weekly Sonnet limit (plan-dependent) | | Fable | Separate weekly Fable limit (model-scoped window from the `limits` array) | +| Sonnet | Separate weekly Sonnet limit (plan-dependent) | | Extra Usage | Extra-usage credits spent against your monthly cap | | Today / Yesterday / Last 30 Days | Local spend, as cost, tokens, or both (see below) | -When Claude reports your plan name, OpenUsage shows it beside the provider name. +Fable is enabled and always visible directly below Weekly by default. Sonnet stays off until you +enable it in Customize. When Claude reports your plan name, OpenUsage shows it beside the provider name. ## Where credentials come from From 1440c70b19d0e70503bb647563c0d03b758030c2 Mon Sep 17 00:00:00 2001 From: Robin Ebers Date: Mon, 24 Aug 2026 12:20:23 +0400 Subject: [PATCH 2/2] fix(layout): clear promoted metrics from saved expand queue --- Sources/OpenUsage/Stores/LayoutBootstrap.swift | 3 ++- Tests/OpenUsageTests/LayoutStoreTests.swift | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Sources/OpenUsage/Stores/LayoutBootstrap.swift b/Sources/OpenUsage/Stores/LayoutBootstrap.swift index 09f79a120..88ae1da91 100644 --- a/Sources/OpenUsage/Stores/LayoutBootstrap.swift +++ b/Sources/OpenUsage/Stores/LayoutBootstrap.swift @@ -106,6 +106,7 @@ enum LayoutBootstrap { let defaultExpandedOnEnableIDs = Set( (savedOnEnable ?? defaults.expandedMetricIDs).filter(isExpandOnEnableCandidate) ) + let promotedQueuedIDs = Set(savedOnEnable ?? []).intersection(newlyAlwaysShown) return LayoutInitialState( placed: seededResult.placed, @@ -118,7 +119,7 @@ enum LayoutBootstrap { menuBarStyle: persistence.loadMenuBarStyle(), shouldPersistPlaced: seededResult.shouldPersistPlaced, shouldPersistExpanded: shouldPersistExpanded, - shouldPersistExpandOnEnable: savedOnEnable == nil, + shouldPersistExpandOnEnable: savedOnEnable == nil || !promotedQueuedIDs.isEmpty, seededDefaultsToPersist: seededResult.shouldPersistSeededDefaults ? seededResult.seededDefaults : nil diff --git a/Tests/OpenUsageTests/LayoutStoreTests.swift b/Tests/OpenUsageTests/LayoutStoreTests.swift index ad3e11038..5e670ec23 100644 --- a/Tests/OpenUsageTests/LayoutStoreTests.swift +++ b/Tests/OpenUsageTests/LayoutStoreTests.swift @@ -436,6 +436,7 @@ final class LayoutStoreTests: XCTestCase { let defaults = makeDefaults("SeedNewAlwaysVisible") saveStored([PlacedWidget(descriptorID: "claude.session")], forKey: "layout", in: defaults) defaults.set(["claude.today"], forKey: "layout.expandedMetrics") + defaults.set(["claude.today", "cursor.requests"], forKey: "layout.expandOnEnable") let makeStore = { LayoutStore( @@ -444,14 +445,23 @@ final class LayoutStoreTests: XCTestCase { storageKey: "layout", defaultMetricIDs: ["claude.session", "claude.today"], migrationBaselineMetricIDs: ["claude.session"], - defaultExpandedMetricIDs: [] + defaultExpandedMetricIDs: ["cursor.requests"] ) } let store = makeStore() XCTAssertTrue(store.isMetricEnabled("claude.today")) XCTAssertFalse(store.expandedMetricIDs.contains("claude.today")) - XCTAssertFalse(makeStore().expandedMetricIDs.contains("claude.today")) + XCTAssertEqual(store.defaultExpandedOnEnableIDs, ["cursor.requests"]) + XCTAssertEqual(defaults.stringArray(forKey: "layout.expandOnEnable"), ["cursor.requests"]) + + store.setMetricEnabled("claude.today", false) + + let reloaded = makeStore() + XCTAssertFalse(reloaded.expandedMetricIDs.contains("claude.today")) + reloaded.setMetricEnabled("claude.today", true) + XCTAssertFalse(reloaded.expandedMetricIDs.contains("claude.today")) + XCTAssertEqual(reloaded.defaultExpandedOnEnableIDs, ["cursor.requests"]) } func testMigrationPersistKeepsLegacyOptionalMetricExpandOnEnableAfterReload() {