@sriinnu/runic 1.2.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +267 -0
- package/LICENSE +373 -21
- package/README.md +98 -84
- package/THIRD-PARTY-NOTICES.md +651 -0
- package/package.json +14 -4
- package/.swiftformat +0 -50
- package/.swiftlint.yml +0 -160
- package/CONTRIBUTING.md +0 -456
- package/Icon.icns +0 -0
- package/Icon.icon/Assets/runic.png +0 -0
- package/Icon.icon/icon.json +0 -36
- package/Package.resolved +0 -51
- package/Package.swift +0 -136
- package/Packages/Helix/LICENSE +0 -21
- package/Packages/Helix/Package.swift +0 -29
- package/Packages/Helix/README.md +0 -976
- package/Packages/Helix/Sources/Helix/Binding.swift +0 -111
- package/Packages/Helix/Sources/Helix/CommandParser.swift +0 -160
- package/Packages/Helix/Sources/Helix/CommandSignature.swift +0 -117
- package/Packages/Helix/Sources/Helix/ExpressibleFromArgument.swift +0 -72
- package/Packages/Helix/Sources/Helix/HelpGenerator.swift +0 -175
- package/Packages/Helix/Sources/Helix/NameSpecification.swift +0 -98
- package/Packages/Helix/Sources/Helix/ParsableCommand.swift +0 -204
- package/Packages/Helix/Sources/Helix/Platform/DarwinPlatformContext.swift +0 -44
- package/Packages/Helix/Sources/Helix/Platform/LinuxPlatformContext.swift +0 -34
- package/Packages/Helix/Sources/Helix/Platform/PlatformContext+Default.swift +0 -91
- package/Packages/Helix/Sources/Helix/Platform/PlatformContext.swift +0 -94
- package/Packages/Helix/Sources/Helix/Platform/PlatformPath.swift +0 -167
- package/Packages/Helix/Sources/Helix/Platform/Stdio.swift +0 -99
- package/Packages/Helix/Sources/Helix/Platform/WebPlatformContext.swift +0 -146
- package/Packages/Helix/Sources/Helix/Platform/WindowsPlatformContext.swift +0 -97
- package/Packages/Helix/Sources/Helix/Program.swift +0 -204
- package/Packages/Helix/Sources/Helix/PropertyWrappers.swift +0 -367
- package/Packages/Silo/LICENSE +0 -21
- package/Packages/Silo/Package.swift +0 -34
- package/Packages/Silo/README.md +0 -466
- package/Packages/Silo/Sources/Silo/BinaryCookiesReader.swift +0 -169
- package/Packages/Silo/Sources/Silo/BrowserCookieAnalytics.swift +0 -365
- package/Packages/Silo/Sources/Silo/BrowserCookieBackends.swift +0 -594
- package/Packages/Silo/Sources/Silo/BrowserCookieClient.swift +0 -326
- package/Packages/Silo/Sources/Silo/BrowserCookieExport.swift +0 -154
- package/Packages/Silo/Sources/Silo/BrowserCookieImport.swift +0 -119
- package/Packages/Silo/Sources/Silo/BrowserCookieMockStore.swift +0 -121
- package/Packages/Silo/Sources/Silo/BrowserCookieModels.swift +0 -391
- package/Packages/Silo/Sources/Silo/ChromiumCookieReader.swift +0 -240
- package/Packages/Silo/Sources/Silo/CryptoSupport.swift +0 -86
- package/Packages/Silo/Sources/Silo/FirefoxCookieReader.swift +0 -172
- package/Packages/Silo/Sources/Silo/LinuxChromiumCookieReader.swift +0 -172
- package/Packages/Silo/Sources/Silo/LinuxSecretService.swift +0 -105
- package/Packages/Silo/Sources/Silo/MacOSChromiumCookieReader.swift +0 -191
- package/Packages/Silo/Sources/Silo/SQLiteSnapshot.swift +0 -41
- package/Packages/Silo/Sources/Silo/WindowsChromiumCookieReader.swift +0 -110
- package/RuniciOS/App/RuniciOSApp.swift +0 -105
- package/RuniciOS/Core/iOSUsageStore.swift +0 -192
- package/RuniciOS/Views/ProviderDetailView.swift +0 -312
- package/RuniciOS/Views/ProviderListView.swift +0 -228
- package/RuniciOS/Widgets/LargeWidget.swift +0 -367
- package/RuniciOS/Widgets/LiveActivity.swift +0 -342
- package/RuniciOS/Widgets/LockScreenWidget.swift +0 -273
- package/RuniciOS/Widgets/MediumWidget.swift +0 -370
- package/RuniciOS/Widgets/RunicWidget.swift +0 -274
- package/RuniciOS/Widgets/SmallWidget.swift +0 -281
- package/RuniciOS/Widgets/WidgetModels.swift +0 -285
- package/RuniciOS/Widgets/WidgetTimeline.swift +0 -270
- package/Scripts/CREATION-SUMMARY.md +0 -367
- package/Scripts/DIRECTORY-STRUCTURE.md +0 -358
- package/Scripts/GETTING-STARTED-CHECKLIST.md +0 -364
- package/Scripts/INDEX.md +0 -365
- package/Scripts/QUICK-REFERENCE.md +0 -164
- package/Scripts/README-SCRIPTS.md +0 -926
- package/Scripts/build-android.sh +0 -526
- package/Scripts/build-ios.sh +0 -529
- package/Scripts/build-macos.sh +0 -603
- package/Scripts/build-windows.sh +0 -504
- package/Scripts/build_icon.sh +0 -49
- package/Scripts/changelog-to-html.sh +0 -89
- package/Scripts/check-release-assets.sh +0 -10
- package/Scripts/ci-config.yml +0 -474
- package/Scripts/compile_and_run.sh +0 -219
- package/Scripts/compile_and_run_adhoc.sh +0 -4
- package/Scripts/docs-list.mjs +0 -119
- package/Scripts/make_appcast.sh +0 -58
- package/Scripts/package_app.sh +0 -409
- package/Scripts/release-lib.sh +0 -214
- package/Scripts/release.sh +0 -76
- package/Scripts/setup-all.sh +0 -387
- package/Scripts/setup-ios.sh +0 -404
- package/Scripts/setup-react-native.sh +0 -523
- package/Scripts/sign-and-notarize.sh +0 -122
- package/Scripts/test_live_update.sh +0 -38
- package/Scripts/validate_changelog.sh +0 -23
- package/Scripts/verify_appcast.sh +0 -92
- package/Sources/Runic/About.swift +0 -93
- package/Sources/Runic/AppNotifications.swift +0 -115
- package/Sources/Runic/Controllers/StatusItemController+Actions.swift +0 -666
- package/Sources/Runic/Controllers/StatusItemController+Animation.swift +0 -518
- package/Sources/Runic/Controllers/StatusItemController+ChartSubmenus.swift +0 -810
- package/Sources/Runic/Controllers/StatusItemController+CustomProviders.swift +0 -87
- package/Sources/Runic/Controllers/StatusItemController+Menu.swift +0 -1407
- package/Sources/Runic/Controllers/StatusItemController+MenuCards.swift +0 -337
- package/Sources/Runic/Controllers/StatusItemController+MenuHelpers.swift +0 -395
- package/Sources/Runic/Controllers/StatusItemController.swift +0 -360
- package/Sources/Runic/Core/BudgetNotificationManager.swift +0 -80
- package/Sources/Runic/Core/Login/ClaudeLoginRunner.swift +0 -103
- package/Sources/Runic/Core/Login/CodexLoginRunner.swift +0 -154
- package/Sources/Runic/Core/Login/CursorLoginRunner.swift +0 -206
- package/Sources/Runic/Core/Login/GeminiLoginRunner.swift +0 -92
- package/Sources/Runic/Core/Rendering/IconRenderer.swift +0 -1216
- package/Sources/Runic/Core/Rendering/IconView.swift +0 -120
- package/Sources/Runic/Core/Rendering/ProviderBrandIcon.swift +0 -71
- package/Sources/Runic/Core/RunicAnimation.swift +0 -53
- package/Sources/Runic/Core/RunicColors.swift +0 -73
- package/Sources/Runic/Core/RunicCornerRadius.swift +0 -15
- package/Sources/Runic/Core/RunicSpacing.swift +0 -68
- package/Sources/Runic/Core/Stores/AuggieTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/AzureOpenAITokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/CerebrasTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/CohereTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/CopilotTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/CustomProviderStore.swift +0 -158
- package/Sources/Runic/Core/Stores/DeepSeekTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/FireworksTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/GroqTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/KimiTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/MiniMaxCookieHeaderStore.swift +0 -119
- package/Sources/Runic/Core/Stores/MiniMaxGroupIDStore.swift +0 -119
- package/Sources/Runic/Core/Stores/MiniMaxTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/MistralTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/OpenRouterTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/PerplexityTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/ProviderToggleStore.swift +0 -30
- package/Sources/Runic/Core/Stores/QwenTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/SambaNovaTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/SettingsStore.swift +0 -1711
- package/Sources/Runic/Core/Stores/TogetherTokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/UsageStore+Accessors.swift +0 -20
- package/Sources/Runic/Core/Stores/UsageStore+Status.swift +0 -189
- package/Sources/Runic/Core/Stores/UsageStore+TokenCost.swift +0 -33
- package/Sources/Runic/Core/Stores/UsageStore+WidgetSnapshot.swift +0 -67
- package/Sources/Runic/Core/Stores/UsageStore.swift +0 -3605
- package/Sources/Runic/Core/Stores/XAITokenStore.swift +0 -119
- package/Sources/Runic/Core/Stores/ZaiTokenStore.swift +0 -118
- package/Sources/Runic/Core/UsageExporter.swift +0 -193
- package/Sources/Runic/Date+RelativeDescription.swift +0 -21
- package/Sources/Runic/HiddenWindowView.swift +0 -32
- package/Sources/Runic/InstallOrigin.swift +0 -9
- package/Sources/Runic/KeyboardShortcuts+Names.swift +0 -6
- package/Sources/Runic/MouseLocationReader.swift +0 -65
- package/Sources/Runic/Notifications+Runic.swift +0 -6
- package/Sources/Runic/OpenAICreditsPurchaseWindowController.swift +0 -503
- package/Sources/Runic/ProviderRegistry.swift +0 -100
- package/Sources/Runic/ProviderSwitcherButtons.swift +0 -267
- package/Sources/Runic/Providers/Antigravity/AntigravityLoginFlow.swift +0 -11
- package/Sources/Runic/Providers/Antigravity/AntigravityProviderImplementation.swift +0 -14
- package/Sources/Runic/Providers/Auggie/AuggieProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Azure/AzureProviderImplementation.swift +0 -52
- package/Sources/Runic/Providers/Bedrock/BedrockProviderImplementation.swift +0 -42
- package/Sources/Runic/Providers/Cerebras/CerebrasProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Claude/ClaudeLoginFlow.swift +0 -26
- package/Sources/Runic/Providers/Claude/ClaudeProviderImplementation.swift +0 -14
- package/Sources/Runic/Providers/Codex/CodexLoginFlow.swift +0 -18
- package/Sources/Runic/Providers/Codex/CodexProviderImplementation.swift +0 -15
- package/Sources/Runic/Providers/Cohere/CohereProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Copilot/CopilotLoginFlow.swift +0 -193
- package/Sources/Runic/Providers/Copilot/CopilotProviderImplementation.swift +0 -110
- package/Sources/Runic/Providers/Cursor/CursorLoginFlow.swift +0 -28
- package/Sources/Runic/Providers/Cursor/CursorProviderImplementation.swift +0 -15
- package/Sources/Runic/Providers/DeepSeek/DeepSeekProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Factory/FactoryLoginFlow.swift +0 -12
- package/Sources/Runic/Providers/Factory/FactoryProviderImplementation.swift +0 -15
- package/Sources/Runic/Providers/Fireworks/FireworksProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Gemini/GeminiLoginFlow.swift +0 -20
- package/Sources/Runic/Providers/Gemini/GeminiProviderImplementation.swift +0 -15
- package/Sources/Runic/Providers/Groq/GroqProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Kimi/KimiProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/MiniMax/MiniMaxProviderImplementation.swift +0 -32
- package/Sources/Runic/Providers/Mistral/MistralProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/OpenRouter/OpenRouterProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Perplexity/PerplexityProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/SambaNova/SambaNovaProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Shared/ProviderCatalog.swift +0 -15
- package/Sources/Runic/Providers/Shared/ProviderImplementation.swift +0 -48
- package/Sources/Runic/Providers/Shared/ProviderImplementationRegistry.swift +0 -66
- package/Sources/Runic/Providers/Shared/ProviderLoginFlow.swift +0 -12
- package/Sources/Runic/Providers/Shared/ProviderSettingsDescriptors.swift +0 -99
- package/Sources/Runic/Providers/Shared/SystemSettingsLinks.swift +0 -18
- package/Sources/Runic/Providers/Together/TogetherProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/XAI/XAIProviderImplementation.swift +0 -24
- package/Sources/Runic/Providers/Zai/ZaiProviderImplementation.swift +0 -24
- package/Sources/Runic/Resources/ProviderIcon-antigravity.svg +0 -2
- package/Sources/Runic/Resources/ProviderIcon-auggie.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-azure.svg +0 -5
- package/Sources/Runic/Resources/ProviderIcon-bedrock.svg +0 -7
- package/Sources/Runic/Resources/ProviderIcon-cerebras.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-claude.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-codex.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-cohere.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-copilot.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-cursor.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-deepseek.svg +0 -4
- package/Sources/Runic/Resources/ProviderIcon-factory.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-fireworks.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-gemini.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-groq.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-kimi.svg +0 -4
- package/Sources/Runic/Resources/ProviderIcon-minimax.svg +0 -1
- package/Sources/Runic/Resources/ProviderIcon-mistral.svg +0 -5
- package/Sources/Runic/Resources/ProviderIcon-openrouter.svg +0 -7
- package/Sources/Runic/Resources/ProviderIcon-perplexity.svg +0 -4
- package/Sources/Runic/Resources/ProviderIcon-qwen.svg +0 -9
- package/Sources/Runic/Resources/ProviderIcon-sambanova.svg +0 -4
- package/Sources/Runic/Resources/ProviderIcon-together.svg +0 -5
- package/Sources/Runic/Resources/ProviderIcon-vertexai.svg +0 -17
- package/Sources/Runic/Resources/ProviderIcon-xai.svg +0 -3
- package/Sources/Runic/Resources/ProviderIcon-zai.svg +0 -5
- package/Sources/Runic/Resources/RunicMenubarIcon.svg +0 -7
- package/Sources/Runic/Resources/provider-context-windows.json +0 -20
- package/Sources/Runic/RunicApp.swift +0 -357
- package/Sources/Runic/SessionQuotaNotifications.swift +0 -58
- package/Sources/Runic/UsagePaceText.swift +0 -52
- package/Sources/Runic/UsageProgressBar.swift +0 -224
- package/Sources/Runic/Utilities/DisplayLink.swift +0 -96
- package/Sources/Runic/Utilities/LoadingPattern.swift +0 -60
- package/Sources/Runic/Utilities/PerformanceConstants.swift +0 -85
- package/Sources/Runic/Views/Menu/AlertsMenuView.swift +0 -256
- package/Sources/Runic/Views/Menu/ChartPanelStyle.swift +0 -22
- package/Sources/Runic/Views/Menu/CostComparativeChartMenuView.swift +0 -275
- package/Sources/Runic/Views/Menu/CostHistoryChartMenuView.swift +0 -377
- package/Sources/Runic/Views/Menu/CreditsHistoryChartMenuView.swift +0 -312
- package/Sources/Runic/Views/Menu/EfficiencyMetricsMenuView.swift +0 -312
- package/Sources/Runic/Views/Menu/HeroStatCardsMenuView.swift +0 -228
- package/Sources/Runic/Views/Menu/HourlyActivityChartMenuView.swift +0 -228
- package/Sources/Runic/Views/Menu/InlineUsageChartView.swift +0 -155
- package/Sources/Runic/Views/Menu/MenuCardEntranceModifier.swift +0 -64
- package/Sources/Runic/Views/Menu/MenuCardSidebarView.swift +0 -268
- package/Sources/Runic/Views/Menu/MenuCardSkeletonView.swift +0 -104
- package/Sources/Runic/Views/Menu/MenuCardView.swift +0 -1900
- package/Sources/Runic/Views/Menu/MenuContent.swift +0 -150
- package/Sources/Runic/Views/Menu/MenuDescriptor.swift +0 -369
- package/Sources/Runic/Views/Menu/MenuHighlightStyle.swift +0 -42
- package/Sources/Runic/Views/Menu/ModelBreakdownMenuView.swift +0 -235
- package/Sources/Runic/Views/Menu/OverviewMenuView.swift +0 -278
- package/Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift +0 -209
- package/Sources/Runic/Views/Menu/ProjectBudgetMenuView.swift +0 -220
- package/Sources/Runic/Views/Menu/ProviderTabBarView.swift +0 -88
- package/Sources/Runic/Views/Menu/SubscriptionUtilizationChartMenuView.swift +0 -201
- package/Sources/Runic/Views/Menu/UsageBreakdownChartMenuView.swift +0 -398
- package/Sources/Runic/Views/Menu/UsageHeatmapMenuView.swift +0 -232
- package/Sources/Runic/Views/Menu/UsageTimelineChartMenuView.swift +0 -364
- package/Sources/Runic/Views/Menu/UsageWindowComparisonChartMenuView.swift +0 -190
- package/Sources/Runic/Views/Menu/WeeklyActivityChartMenuView.swift +0 -132
- package/Sources/Runic/Views/Performance/PerformanceDashboardView.swift +0 -618
- package/Sources/Runic/Views/Preferences/LiquidComponents.swift +0 -305
- package/Sources/Runic/Views/Preferences/PreferencesAboutPane.swift +0 -271
- package/Sources/Runic/Views/Preferences/PreferencesAdvancedPane.swift +0 -268
- package/Sources/Runic/Views/Preferences/PreferencesAlertsPane.swift +0 -422
- package/Sources/Runic/Views/Preferences/PreferencesAnalyticsPane.swift +0 -641
- package/Sources/Runic/Views/Preferences/PreferencesBudgetsPane.swift +0 -344
- package/Sources/Runic/Views/Preferences/PreferencesComponents.swift +0 -230
- package/Sources/Runic/Views/Preferences/PreferencesCustomProvidersPane.swift +0 -322
- package/Sources/Runic/Views/Preferences/PreferencesDebugPane.swift +0 -469
- package/Sources/Runic/Views/Preferences/PreferencesGeneralPane.swift +0 -231
- package/Sources/Runic/Views/Preferences/PreferencesHelpPane.swift +0 -50
- package/Sources/Runic/Views/Preferences/PreferencesIntegrationsPane.swift +0 -567
- package/Sources/Runic/Views/Preferences/PreferencesPerformancePane.swift +0 -288
- package/Sources/Runic/Views/Preferences/PreferencesProvidersPane.swift +0 -3435
- package/Sources/Runic/Views/Preferences/PreferencesSelection.swift +0 -25
- package/Sources/Runic/Views/Preferences/PreferencesSyncPane.swift +0 -59
- package/Sources/Runic/Views/Preferences/PreferencesView.swift +0 -206
- package/Sources/Runic/Views/Rating/QualityRatingView.swift +0 -238
- package/Sources/Runic/Views/Team/TeamDashboardView.swift +0 -371
- package/Sources/Runic/Views/Team/TeamInviteSheet.swift +0 -175
- package/Sources/Runic/Views/Team/TeamManagementView.swift +0 -761
- package/Sources/Runic/Views/Team/TeamMemberRow.swift +0 -181
- package/Sources/RunicCLI/CLIEntry.swift +0 -942
- package/Sources/RunicCLI/CLIRenderer.swift +0 -87
- package/Sources/RunicCLI/Commands/EnhancedUsageCommand.swift +0 -588
- package/Sources/RunicCLI/Commands/ModelsCommand.swift +0 -362
- package/Sources/RunicCLI/Commands/ProjectsCommand.swift +0 -439
- package/Sources/RunicCLI/Commands/ResetCommand.swift +0 -429
- package/Sources/RunicCLI/Commands/UsageLedgerSourceFactory.swift +0 -168
- package/Sources/RunicClaudeWatchdog/main.swift +0 -122
- package/Sources/RunicClaudeWebProbe/main.swift +0 -62
- package/Sources/RunicCore/AlertRuleStore.swift +0 -187
- package/Sources/RunicCore/BrowserCookieImportOrder.swift +0 -25
- package/Sources/RunicCore/CopilotUsageModels.swift +0 -84
- package/Sources/RunicCore/CostUsageFetcher.swift +0 -119
- package/Sources/RunicCore/CostUsageModels.swift +0 -479
- package/Sources/RunicCore/CreditsModels.swift +0 -50
- package/Sources/RunicCore/CustomProviders/CustomProviderModels.swift +0 -269
- package/Sources/RunicCore/CustomProviders/GenericProviderFetcher.swift +0 -633
- package/Sources/RunicCore/CustomProviders/ProviderTemplates.swift +0 -500
- package/Sources/RunicCore/Host/PTY/TTYCommandRunner.swift +0 -679
- package/Sources/RunicCore/Host/Process/SubprocessRunner.swift +0 -135
- package/Sources/RunicCore/Integrations/GitHubIntegration.swift +0 -173
- package/Sources/RunicCore/Logging/JSONStderrLogHandler.swift +0 -79
- package/Sources/RunicCore/Logging/OSLogLogHandler.swift +0 -86
- package/Sources/RunicCore/Logging/RunicLog.swift +0 -123
- package/Sources/RunicCore/Models/EnhancedUsageModels.swift +0 -371
- package/Sources/RunicCore/OpenAIDashboardModels.swift +0 -210
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardBrowserCookieImporter.swift +0 -676
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardFetcher.swift +0 -492
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardNavigationDelegate.swift +0 -51
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardParser.swift +0 -483
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardScrapeScript.swift +0 -558
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebViewCache.swift +0 -204
- package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebsiteDataStore.swift +0 -78
- package/Sources/RunicCore/PathEnvironment.swift +0 -482
- package/Sources/RunicCore/Performance/PerformanceModels.swift +0 -371
- package/Sources/RunicCore/Performance/PerformanceStorageImpl.swift +0 -409
- package/Sources/RunicCore/Policy/UsagePolicyEngine.swift +0 -178
- package/Sources/RunicCore/ProjectBudgetStore.swift +0 -99
- package/Sources/RunicCore/ProviderCostSnapshot.swift +0 -29
- package/Sources/RunicCore/Providers/Antigravity/AntigravityProviderDescriptor.swift +0 -66
- package/Sources/RunicCore/Providers/Antigravity/AntigravityStatusProbe.swift +0 -685
- package/Sources/RunicCore/Providers/Auggie/AuggieProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/Auggie/AuggieUsageFetcher.swift +0 -142
- package/Sources/RunicCore/Providers/Azure/AzureProviderDescriptor.swift +0 -141
- package/Sources/RunicCore/Providers/Azure/AzureUsageFetcher.swift +0 -188
- package/Sources/RunicCore/Providers/Bedrock/BedrockProviderDescriptor.swift +0 -126
- package/Sources/RunicCore/Providers/Bedrock/BedrockUsageFetcher.swift +0 -168
- package/Sources/RunicCore/Providers/Cerebras/CerebrasProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/Cerebras/CerebrasUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/Claude/ClaudeCLISession.swift +0 -332
- package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthCredentials.swift +0 -180
- package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthUsageFetcher.swift +0 -137
- package/Sources/RunicCore/Providers/Claude/ClaudeProviderDescriptor.swift +0 -207
- package/Sources/RunicCore/Providers/Claude/ClaudeStatusProbe.swift +0 -654
- package/Sources/RunicCore/Providers/Claude/ClaudeUsageDataSource.swift +0 -28
- package/Sources/RunicCore/Providers/Claude/ClaudeUsageFetcher.swift +0 -480
- package/Sources/RunicCore/Providers/Claude/ClaudeWeb/ClaudeWebAPIFetcher.swift +0 -780
- package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthCredentials.swift +0 -147
- package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthUsageFetcher.swift +0 -280
- package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexTokenRefresher.swift +0 -100
- package/Sources/RunicCore/Providers/Codex/CodexProviderDescriptor.swift +0 -243
- package/Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift +0 -125
- package/Sources/RunicCore/Providers/Codex/CodexUsageDataSource.swift +0 -24
- package/Sources/RunicCore/Providers/Codex/CodexWebDashboardStrategy.swift +0 -181
- package/Sources/RunicCore/Providers/Cohere/CohereProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/Cohere/CohereUsageFetcher.swift +0 -85
- package/Sources/RunicCore/Providers/Copilot/CopilotDeviceFlow.swift +0 -123
- package/Sources/RunicCore/Providers/Copilot/CopilotGitHubCLITokenReader.swift +0 -114
- package/Sources/RunicCore/Providers/Copilot/CopilotProviderDescriptor.swift +0 -100
- package/Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift +0 -291
- package/Sources/RunicCore/Providers/Copilot/CopilotVSCodeTokenReader.swift +0 -386
- package/Sources/RunicCore/Providers/Cursor/CursorProviderDescriptor.swift +0 -65
- package/Sources/RunicCore/Providers/Cursor/CursorStatusProbe.swift +0 -595
- package/Sources/RunicCore/Providers/DeepSeek/DeepSeekProviderDescriptor.swift +0 -85
- package/Sources/RunicCore/Providers/DeepSeek/DeepSeekUsageFetcher.swift +0 -108
- package/Sources/RunicCore/Providers/Factory/FactoryLocalStorageImporter.swift +0 -398
- package/Sources/RunicCore/Providers/Factory/FactoryProviderDescriptor.swift +0 -65
- package/Sources/RunicCore/Providers/Factory/FactoryStatusProbe.swift +0 -1276
- package/Sources/RunicCore/Providers/Fireworks/FireworksProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/Fireworks/FireworksUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/Gemini/GeminiProviderDescriptor.swift +0 -65
- package/Sources/RunicCore/Providers/Gemini/GeminiStatusProbe.swift +0 -836
- package/Sources/RunicCore/Providers/Groq/GroqProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/Groq/GroqUsageFetcher.swift +0 -71
- package/Sources/RunicCore/Providers/Kimi/KimiProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/Kimi/KimiUsageFetcher.swift +0 -77
- package/Sources/RunicCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift +0 -92
- package/Sources/RunicCore/Providers/MiniMax/MiniMaxSettingsReader.swift +0 -54
- package/Sources/RunicCore/Providers/MiniMax/MiniMaxUsageFetcher.swift +0 -168
- package/Sources/RunicCore/Providers/MiniMax/MiniMaxWebUsageFetcher.swift +0 -911
- package/Sources/RunicCore/Providers/Mistral/MistralProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/Mistral/MistralUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/OpenRouter/OpenRouterProviderDescriptor.swift +0 -87
- package/Sources/RunicCore/Providers/OpenRouter/OpenRouterUsageFetcher.swift +0 -203
- package/Sources/RunicCore/Providers/Perplexity/PerplexityProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/Perplexity/PerplexityUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/ProviderBranding.swift +0 -25
- package/Sources/RunicCore/Providers/ProviderCLIConfig.swift +0 -17
- package/Sources/RunicCore/Providers/ProviderDescriptor.swift +0 -129
- package/Sources/RunicCore/Providers/ProviderFetchPlan.swift +0 -263
- package/Sources/RunicCore/Providers/ProviderSettingsSnapshot.swift +0 -98
- package/Sources/RunicCore/Providers/ProviderTokenResolver.swift +0 -501
- package/Sources/RunicCore/Providers/ProviderVersionDetector.swift +0 -68
- package/Sources/RunicCore/Providers/Providers.swift +0 -184
- package/Sources/RunicCore/Providers/Qwen/QwenProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/Qwen/QwenSettingsReader.swift +0 -30
- package/Sources/RunicCore/Providers/Qwen/QwenUsageStats.swift +0 -315
- package/Sources/RunicCore/Providers/SambaNova/SambaNovaProviderDescriptor.swift +0 -84
- package/Sources/RunicCore/Providers/SambaNova/SambaNovaUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/Together/TogetherProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/Together/TogetherUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/VertexAI/VertexAIProviderDescriptor.swift +0 -123
- package/Sources/RunicCore/Providers/VertexAI/VertexAISettingsReader.swift +0 -48
- package/Sources/RunicCore/Providers/VertexAI/VertexAIUsageFetcher.swift +0 -144
- package/Sources/RunicCore/Providers/XAI/XAIProviderDescriptor.swift +0 -83
- package/Sources/RunicCore/Providers/XAI/XAIUsageFetcher.swift +0 -75
- package/Sources/RunicCore/Providers/Zai/ZaiProviderDescriptor.swift +0 -72
- package/Sources/RunicCore/Providers/Zai/ZaiSettingsReader.swift +0 -41
- package/Sources/RunicCore/Providers/Zai/ZaiUsageStats.swift +0 -718
- package/Sources/RunicCore/Sync/BackgroundSyncManager.swift +0 -385
- package/Sources/RunicCore/Sync/SyncConflictResolver.swift +0 -310
- package/Sources/RunicCore/Sync/SyncProtocol.swift +0 -288
- package/Sources/RunicCore/Sync/SyncRecord.swift +0 -405
- package/Sources/RunicCore/Sync/SyncUsageExample.swift +0 -294
- package/Sources/RunicCore/Sync/TeamSyncRecords.swift +0 -775
- package/Sources/RunicCore/Sync/iCloudSyncEngine.swift +0 -333
- package/Sources/RunicCore/Team/TeamModels.swift +0 -583
- package/Sources/RunicCore/Team/TeamShowbackExporter.swift +0 -495
- package/Sources/RunicCore/Team/TeamStore.swift +0 -792
- package/Sources/RunicCore/TextParsing.swift +0 -55
- package/Sources/RunicCore/UsageFetcher.swift +0 -694
- package/Sources/RunicCore/UsageFormatter.swift +0 -410
- package/Sources/RunicCore/UsageLedger/ClaudeUsageLogSource.swift +0 -427
- package/Sources/RunicCore/UsageLedger/CodexUsageLogSource.swift +0 -494
- package/Sources/RunicCore/UsageLedger/LedgerCache.swift +0 -158
- package/Sources/RunicCore/UsageLedger/OTelGenAILedgerAdapter.swift +0 -550
- package/Sources/RunicCore/UsageLedger/UsageLedger.swift +0 -29
- package/Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift +0 -660
- package/Sources/RunicCore/UsageLedger/UsageLedgerInsightsAdvisor.swift +0 -209
- package/Sources/RunicCore/UsageLedger/UsageLedgerModels.swift +0 -417
- package/Sources/RunicCore/UsageLedger/UsageLedgerProjectIdentity.swift +0 -245
- package/Sources/RunicCore/UsagePace.swift +0 -81
- package/Sources/RunicCore/Vendored/CostUsage/CostUsageCache.swift +0 -73
- package/Sources/RunicCore/Vendored/CostUsage/CostUsageJsonl.swift +0 -74
- package/Sources/RunicCore/Vendored/CostUsage/CostUsagePricing.swift +0 -208
- package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Claude.swift +0 -455
- package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Timestamp.swift +0 -132
- package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner.swift +0 -589
- package/Sources/RunicCore/WidgetSnapshot.swift +0 -183
- package/Sources/RunicMacroSupport/ProviderRegistrationMacros.swift +0 -14
- package/Sources/RunicMacros/ProviderRegistrationMacros.swift +0 -216
- package/Sources/RunicWidget/RunicWidgetBundle.swift +0 -79
- package/Sources/RunicWidget/RunicWidgetProvider.swift +0 -283
- package/Sources/RunicWidget/RunicWidgetViews.swift +0 -680
- package/Tests/RunicTests/AntigravityStatusProbeTests.swift +0 -50
- package/Tests/RunicTests/AppDelegateTests.swift +0 -43
- package/Tests/RunicTests/BrowserCookieOrderLabelTests.swift +0 -22
- package/Tests/RunicTests/CLIArgumentParsingTests.swift +0 -70
- package/Tests/RunicTests/CLICostTests.swift +0 -65
- package/Tests/RunicTests/CLIProviderSelectionTests.swift +0 -22
- package/Tests/RunicTests/CLISnapshotTests.swift +0 -72
- package/Tests/RunicTests/CLIWebFallbackTests.swift +0 -58
- package/Tests/RunicTests/ClaudeOAuthTests.swift +0 -164
- package/Tests/RunicTests/ClaudeResilienceTests.swift +0 -30
- package/Tests/RunicTests/ClaudeUsageTests.swift +0 -370
- package/Tests/RunicTests/CodexOAuthTests.swift +0 -122
- package/Tests/RunicTests/CodexUsageLogSourceTests.swift +0 -82
- package/Tests/RunicTests/CopilotTokenResolverTests.swift +0 -75
- package/Tests/RunicTests/CopilotVSCodeTokenReaderTests.swift +0 -75
- package/Tests/RunicTests/CostUsageDecodingTests.swift +0 -394
- package/Tests/RunicTests/CostUsagePricingTests.swift +0 -50
- package/Tests/RunicTests/CostUsageScannerTests.swift +0 -700
- package/Tests/RunicTests/CursorStatusProbeTests.swift +0 -323
- package/Tests/RunicTests/FactoryStatusProbeTests.swift +0 -69
- package/Tests/RunicTests/GeminiAPITestHelpers.swift +0 -94
- package/Tests/RunicTests/GeminiLoginAlertTests.swift +0 -28
- package/Tests/RunicTests/GeminiStatusProbeAPITests.swift +0 -283
- package/Tests/RunicTests/GeminiStatusProbePlanTests.swift +0 -279
- package/Tests/RunicTests/GeminiStatusProbeTests.swift +0 -233
- package/Tests/RunicTests/GeminiTestEnvironment.swift +0 -87
- package/Tests/RunicTests/GoogleWorkspaceStatusTests.swift +0 -73
- package/Tests/RunicTests/InstallOriginTests.swift +0 -18
- package/Tests/RunicTests/KeyboardShortcutsBundleTests.swift +0 -9
- package/Tests/RunicTests/LiveAccountTests.swift +0 -24
- package/Tests/RunicTests/LoadingPatternTests.swift +0 -35
- package/Tests/RunicTests/MenuCardModelTests.swift +0 -545
- package/Tests/RunicTests/MiniMaxCookieHeaderStoreTestSupport.swift +0 -8
- package/Tests/RunicTests/MiniMaxGroupIDStoreTestSupport.swift +0 -8
- package/Tests/RunicTests/MiniMaxParsingTests.swift +0 -68
- package/Tests/RunicTests/MiniMaxTokenStoreTestSupport.swift +0 -8
- package/Tests/RunicTests/OTelGenAILedgerAdapterTests.swift +0 -112
- package/Tests/RunicTests/OpenAIDashboardBrowserCookieImporterTests.swift +0 -17
- package/Tests/RunicTests/OpenAIDashboardFetcherCreditsWaitTests.swift +0 -75
- package/Tests/RunicTests/OpenAIDashboardOffscreenHostTests.swift +0 -27
- package/Tests/RunicTests/OpenAIDashboardParserTests.swift +0 -134
- package/Tests/RunicTests/OpenAIWebAccountSwitchTests.swift +0 -53
- package/Tests/RunicTests/OpenRouterTokenStoreTestSupport.swift +0 -92
- package/Tests/RunicTests/PathBuilderTests.swift +0 -237
- package/Tests/RunicTests/ProviderFetchPipelineTests.swift +0 -160
- package/Tests/RunicTests/ProviderIconResourcesTests.swift +0 -38
- package/Tests/RunicTests/ProviderMetadataStatusLinkTests.swift +0 -16
- package/Tests/RunicTests/ProviderRegistryTests.swift +0 -29
- package/Tests/RunicTests/ProviderSettingsDescriptorTests.swift +0 -202
- package/Tests/RunicTests/ProviderToggleStoreTests.swift +0 -51
- package/Tests/RunicTests/RunicTests.swift +0 -120
- package/Tests/RunicTests/SessionQuotaNotificationLogicTests.swift +0 -36
- package/Tests/RunicTests/SettingsStoreTests.swift +0 -161
- package/Tests/RunicTests/StatusItemAnimationTests.swift +0 -49
- package/Tests/RunicTests/StatusMenuTests.swift +0 -434
- package/Tests/RunicTests/StatusProbeTests.swift +0 -377
- package/Tests/RunicTests/SubprocessRunnerTests.swift +0 -20
- package/Tests/RunicTests/SubscriptionDetectionTests.swift +0 -65
- package/Tests/RunicTests/TTYCommandRunnerTests.swift +0 -148
- package/Tests/RunicTests/TTYIntegrationTests.swift +0 -41
- package/Tests/RunicTests/TeamShowbackExporterTests.swift +0 -159
- package/Tests/RunicTests/TextParsingTests.swift +0 -12
- package/Tests/RunicTests/UsageFormatterTests.swift +0 -112
- package/Tests/RunicTests/UsageLedgerAnomalyDetectionTests.swift +0 -172
- package/Tests/RunicTests/UsageLedgerForecastTests.swift +0 -213
- package/Tests/RunicTests/UsageLedgerInsightsAdvisorTests.swift +0 -83
- package/Tests/RunicTests/UsageLedgerProjectNameTests.swift +0 -170
- package/Tests/RunicTests/UsagePaceTests.swift +0 -77
- package/Tests/RunicTests/UsagePaceTextTests.swift +0 -109
- package/Tests/RunicTests/UsagePolicyEngineTests.swift +0 -91
- package/Tests/RunicTests/WidgetSnapshotTests.swift +0 -45
- package/Tests/RunicTests/ZaiProviderTests.swift +0 -61
- package/Tests/RunicTests/ZaiTokenStoreTestSupport.swift +0 -6
- package/TestsLinux/PlatformGatingTests.swift +0 -46
- package/appcast.xml +0 -144
- package/assets/logo-concept-stack.svg +0 -24
- package/assets/logo-minimal-bars.svg +0 -15
- package/assets/logo.svg +0 -20
- package/assets/logo2.svg +0 -43
- package/bin/docs-list +0 -5
- package/build-and-run.sh +0 -369
- package/docs/.nojekyll +0 -1
- package/docs/CNAME +0 -1
- package/docs/antigravity.md +0 -75
- package/docs/architecture.md +0 -32
- package/docs/claude.md +0 -93
- package/docs/cli-commands/integration_guide.md +0 -371
- package/docs/cli-commands/quick_reference.md +0 -362
- package/docs/cli-commands/readme.md +0 -361
- package/docs/cli.md +0 -156
- package/docs/cloudkit_sync_guide.md +0 -495
- package/docs/codebase_review.md +0 -288
- package/docs/codex-oauth.md +0 -635
- package/docs/codex.md +0 -104
- package/docs/codexbar.png +0 -0
- package/docs/copilot.md +0 -44
- package/docs/cursor.md +0 -46
- package/docs/design/designcomparisonchart.md +0 -510
- package/docs/design/implementationguide.md +0 -792
- package/docs/design/menubaricondesignconcepts.md +0 -796
- package/docs/design/mockups/hybridiconconcept.svg +0 -62
- package/docs/design/mockups/infinityiconconcept.svg +0 -41
- package/docs/design/mockups/infinityiconstates.svg +0 -129
- package/docs/design/mockups/wavelogorefined.svg +0 -48
- package/docs/design/quick_summary.md +0 -426
- package/docs/design/readme.md +0 -478
- package/docs/design/sizespecifications.md +0 -575
- package/docs/design-system.md +0 -836
- package/docs/factory.md +0 -103
- package/docs/gemini.md +0 -73
- package/docs/icon.md +0 -37
- package/docs/icon.png +0 -0
- package/docs/index.html +0 -175
- package/docs/keychain_fix.md +0 -274
- package/docs/minimax.md +0 -71
- package/docs/packaging.md +0 -25
- package/docs/progress-bar-improvements.md +0 -240
- package/docs/progress-bar-quick-reference.md +0 -283
- package/docs/progress-bar-technical-details.md +0 -432
- package/docs/progress-bar-visual-test.swift +0 -375
- package/docs/provider.md +0 -202
- package/docs/providers.md +0 -86
- package/docs/refactor/macros.md +0 -35
- package/docs/refresh-loop.md +0 -22
- package/docs/releasing-homebrew.md +0 -35
- package/docs/releasing.md +0 -121
- package/docs/research/concrete_todo_2026-02-22.md +0 -47
- package/docs/research/core-feature-research.md +0 -248
- package/docs/research/feature_uiux_roadmap_2026-02-22.md +0 -202
- package/docs/research/parity_matrix.md +0 -49
- package/docs/research/provider_expansion_candidates_2026-02-22.md +0 -80
- package/docs/research/provider_model_token_project_matrix_2026-02-23.md +0 -46
- package/docs/research/release_gate_checklist.md +0 -57
- package/docs/site.css +0 -505
- package/docs/sparkle.md +0 -28
- package/docs/status.md +0 -28
- package/docs/sync/implementation.md +0 -393
- package/docs/sync/readme.md +0 -317
- package/docs/sync_files_summary.md +0 -391
- package/docs/sync_quick_reference.md +0 -225
- package/docs/todo.md +0 -11
- package/docs/ui.md +0 -29
- package/docs/web-integration.md +0 -9
- package/docs/widgets.md +0 -85
- package/docs/workflows/error-handling-improvements.md +0 -434
- package/docs/workflows/folder_structure.md +0 -299
- package/docs/workflows/loading_states.md +0 -446
- package/docs/workflows/loading_states_examples.md +0 -565
- package/docs/workflows/loading_states_flow.md +0 -430
- package/docs/workflows/performance_optimizations.md +0 -457
- package/docs/workflows/phase1-cli-testing-report.md +0 -313
- package/docs/workflows/quick_reference.md +0 -228
- package/docs/workflows/readme.md +0 -59
- package/docs/workflows/recent_improvements.md +0 -275
- package/docs/workflows/sync_enablement_summary.md +0 -400
- package/docs/zai.md +0 -43
- package/runic.png +0 -0
- package/version.env +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,272 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.11.1 — 2026-10-12
|
|
4
|
+
- The app icon is the current teal one. `Icon.icns` had not been rebuilt since January, so the app, the Dock and the website still showed the pre-July blue gradient; it is regenerated from `Icon.icon`.
|
|
5
|
+
- About: a Docs button opens runic.srinivas.dev; the link row no longer wraps "GitHub" on the terminal-style themes.
|
|
6
|
+
- The screenshot-mode placeholder email is `demo@runic.srinivas.dev`.
|
|
7
|
+
|
|
8
|
+
## 2.11.0 — 2026-10-11
|
|
9
|
+
- Skins: themes are now built on a **skin kit** instead of per-theme branches scattered through the views. A skin composes the panel's pages (provider card, overview, resets) and supplies the chrome slots the shared surfaces ask for (panel, tabs, chips, action rows, section headers, notes, footer, the popover frame); any slot a skin leaves alone renders the standard way, and a theme picks its kit with `"skin"` in its JSON. Gazette moved onto the kit unchanged. **Sumi** is the first theme built on it end to end: ink on washi — the provider's name in Shippori Mincho under a vermilion hanko cut with the brand mark, each window as a vertical-labelled stanza with a thin Mincho numeral and a brush-stroke gauge over a dry line, the account as a key-value list, the forecast as a note under a small indigo seal; the overview sets the day's average inside an ensō with a one-line read beside it and every provider under its seal; resets are Mincho countdowns with banked resets on a seal; sections open under dry-brush rules, nothing is boxed, the chosen tab is a vermilion stamp, and the page closes with the edition and the author's seal. Shippori Mincho and Zen Kaku Gothic New are bundled as Latin subsets (SIL Open Font License).
|
|
10
|
+
- Blueprint is drawn as an engineering sheet on the kit (**Drafting**): sheet-index tabs, a title-block masthead with DWG NO and REV, a legend with a CHECKED stamp, each window as a dimensioned bar — extension lines, an arrowed dimension broken by the percent, 45° hatching for the used share, a dashed amber plan line carrying the pace delta, a lettered detail callout — the account as a ruled cell grid, numbered notes beside a revisions table, crop marks, a "General arrangement" front page, a "Schedule of resets" table and a title-block footer. Geist and Geist Mono throughout.
|
|
11
|
+
- Claude: the monthly **API credits** a Max plan includes (since 7 Oct 2026: $100 on Max 5x, $200 on Max 20x, spent on the API, the Console and the Agent SDK, not on Claude Code) now show under Usage credits — "API credits $200.00 a month · next grant Nov 3". The amount comes from the plan tier Runic already reads; the date from the claude.ai subscription when the claude.ai switch is on. Pro and Free carry no grant and show nothing. The remaining balance is not shown: it lives in the Console, behind a login Runic does not hold.
|
|
12
|
+
- Retro is drawn as a 1970s bench instrument on the kit (**Instrument**): cream enamel with a bevel and corner screws, keycap tabs that press in, PWR and LINK lamps, an engraved masthead with an olive LCD status strip, each window as a **VU meter** with a red zone and a needle plus an LCD readout, a pace plate of LED segments, LINK / CAP / BALANCE lamps, engraved label · LCD readout rows, a master meter and segmented channel bars on the front page, a 7-day LED bargraph, reset timers on one LCD, a counter for banked resets, an orange PING keycap and a serial plate footer. Archivo Narrow and Space Mono (OFL).
|
|
13
|
+
- Three new themes, each a skin that changes the metaphor rather than the colours. **Departures** is a Solari split-flap board: every reset is a departure with a time, a gate (the provider), a remaining-time flap and an OPEN / OUT / HELD / DUE status, under a masthead that flips to the next reset, with gate cards, a board ticker and a yellow REFRESH BOARD key (Barlow Condensed, OFL). **Flight deck** is an avionics primary flight display in B612, the Airbus cockpit face: vertical tapes with caution bands and a cyan pointer, a green trend vector from the burn rate, an attitude indicator whose horizon pitches with the pace deficit, a MASTER CAUT annunciator, flight-mode cells and resets as waypoints. **Receipt** prints every ping on thermal paper: line items with dotted leaders, a subtotal, "YOU SAVED n RESETS", a rotated ALL CLEAR / EXHAUSTED stamp, a barcode of the timestamp and torn edges, out of a dark printer slot (Courier Prime, OFL).
|
|
14
|
+
- About: the author link pointed at the wrong X account since the first release. It now opens x.com/_sriinnu_ (About window and Settings → About).
|
|
15
|
+
- Fonts: picking a monospaced family (Berkeley Mono, JetBrains Mono, Commit Mono…) no longer breaks a theme's own display faces. The picker's design override was applied to every font in the panel, and SwiftUI re-resolved the theme's bundled faces through it — Gazette's Fraunces and Manrope silently fell back to the picked mono font at small sizes. The override now applies only to the SF families, and the Gazette page pins its faces.
|
|
16
|
+
- Theme fonts now actually render. In 2.10.0 the per-theme typeface was wired up but never took effect on existing installs — the font picker kept the old literal "Mona Sans" default instead of the new **Theme default**, so the follow never kicked in and both new themes drew in Mona Sans. The theme-follow default now applies: Terminal renders in JetBrains Mono (mono console), Gazette in its editorial serif, and other themes keep Mona Sans; any family you pick still overrides. Existing installs are nudged onto Theme default once, and an explicit Mona Sans pick afterwards still sticks.
|
|
17
|
+
- Gazette is now a proper editorial broadsheet: **Fraunces** serif for headings and body, with Manrope for the numbers. Fraunces is bundled as static weights (Fraunces 9pt Regular/SemiBold/Bold/Black) instead of a variable font, because variable fonts silently fall back to the system face under the menu's renderer — which is why its serif didn't show in 2.10.0.
|
|
18
|
+
- Gazette is set like a printed edition now, not a tinted theme. The panel is one flat cream page inside a 1pt ink border — no floating cards, no vibrancy wash — and every section is composed the way a newspaper column is. The provider card opens with a **masthead**: a folio line (edition number from the build, the date, how fresh the numbers are), the provider's name as a Fraunces Black nameplate, a deck of the headline percentages, and a double rule. The primary window is the **lead story** — a category tag and reset byline, the percentage as a big serif numeral, a flat printed gauge, the pace as the deck. The remaining windows and the balance run as **two columns** divided by a hairline: Weekly as a brief, the balance as a **Money** column with a dotted leader from "Balance" to the amount. Insights become **In brief** — coloured bullet squares with a bold lead word — with the forecast pulled out as an italic quote beside them. Resets, Explore and Export open under ink tags; action rows are tracked caps that invert to an ink block on hover; the page closes with a byline ("By Sriinnu", linking to GitHub), the imprint ("Runic 2.10.1 · Vol. 2 · No. 156") and an outlined About button. The overview is the front page: "The Runic Gazette" over leader rows (provider … percent) and a tagged 7-day chart. The provider tabs are hard-cornered category chips — the selected one a solid brand block with the paper knocked out of its label. Manrope is the body face (tracked caps for every label), Fraunces 9pt the display face, now bundled with its italic. The look is gated to Gazette; Terminal, System and every other theme are untouched.
|
|
19
|
+
|
|
20
|
+
## 2.10.0 — 2026-10-08
|
|
21
|
+
- Usage history chart: added **2y** and **All** ranges (alongside 3d/7d/30d/90d/1y), and fixed the flat line. Daily tokens are heavy-tailed — a few cache-heavy days run into the billions and squashed every ordinary day onto the baseline on a linear axis; the chart now uses a square-root scale so quiet and heavy days are both legible without hiding the peaks, and the x-axis starts at the earliest point in range so a sparsely-filled window (or "All") shows no dead leading space.
|
|
22
|
+
- Appearance: two new themes and a reworked Terminal, plus **Tāmra** and **Kirigami** retired. **Gazette** is a warm editorial broadsheet — cream newsprint, black ink, ruled separators, a deep-teal accent with gold / crimson / editorial-blue in the data series, Fraunces serif headings over a Manrope body. **Terminal** is now a clean, modern dark terminal — a cool-slate stage, a mint-green prompt and accent, amber highlights and a cobalt / red series, JetBrains Mono throughout, with no CRT scanlines or code-rain and the usage bars muted to the mint accent so the console reads monochrome (provider logos keep their brand colour). **Yantra** is a brutalist instrument panel — white paper, black ink, square-cornered cards behind a hard offset shadow, Geist Mono throughout, one deep-amber accent with magenta / orange / cobalt for the series. **Retro** gets an illuminated-ledger pass: warm sepia ink and strokes, a cinnabar rubrication accent, gold-leaf emphasis, and the old System-7 blue demoted to a thin indigo thread, over ruled separators and a manuscript paper texture. All themes clear the menu contrast audit.
|
|
23
|
+
- Fonts: each theme now carries its own typeface and the font picker defaults to **Theme default**, which follows it — so Terminal brings JetBrains Mono, Gazette brings Manrope and Fraunces, and so on — while any family you pick in the picker still overrides it (the old curated themes used to lock the picker). JetBrains Mono, Manrope, and Fraunces are bundled (SIL Open Font License).
|
|
24
|
+
- Claude: when Runic's copy of the CLI login ages out (about every eight hours), usage is read through the Claude CLI instead of showing an error until the next manual reload. The CLI process is shut down right after each read. The Claude card offers **Reconnect Claude…** to re-read the login (one Keychain prompt) and get the richer OAuth data back. While the CLI is serving the numbers the card shows a **Via CLI** badge and Settings → Providers lists the source as `cli fallback`. The fallback also works on the first refresh after launch, when a cold Claude Code start takes longer to show its prompt. Fallback failures are recorded in `~/Library/Application Support/Runic/diagnostics/`.
|
|
25
|
+
- Claude CLI source: works again with Claude Code 2.1, which lays out `/usage` with cursor moves instead of spaces and needs a moment before accepting the first command. The Fable weekly window is recognised.
|
|
26
|
+
- CLI and MCP: `runic --version` and the MCP server handshake report the app version instead of a fixed 1.0.0. A test and the release script refuse drift from `version.env`.
|
|
27
|
+
|
|
28
|
+
## 2.9.1 — 2026-10-03
|
|
29
|
+
- Codex: credits reported with usage now appear immediately. Runic only tries a separate credit lookup when the usage response has no balance, and an optional web dashboard failure no longer triggers duplicate refreshes.
|
|
30
|
+
- Credits: providers with credit support show the reported balance, or 0 with an unavailable note while a balance cannot be retrieved. Providers without credit support hide the field. Fetch errors no longer replace the balance in the menu.
|
|
31
|
+
|
|
32
|
+
## 2.9.0 — 2026-10-02
|
|
33
|
+
- MCP: Runic now includes a local stdio server with read-only limits and health tools. Settings puts the server first, shows the actual provider values available to MCP clients, and distinguishes the built-in tools from optional packages. Local packages are discovered automatically from `~/Library/Application Support/Runic/mcpservers/`; `runic mcp call` lets users inspect built-in or package tool output without an MCP client.
|
|
34
|
+
- Usage: optional provider credits and balances appear consistently in the menu and settings when the source supplies them. Muse Code subscription usage is supported.
|
|
35
|
+
- Appearance: Glass and Terminal themes are available; Terminal uses a green phosphor palette. The Settings tab strip stays fixed, and the Burn chart's labels no longer overlap.
|
|
36
|
+
- Documentation: the README and MCP guide explain where to find the server, connect a client, test its data, and add a local tool package.
|
|
37
|
+
|
|
38
|
+
## 2.8.1 — 2026-09-23
|
|
39
|
+
- Settings → Providers: every provider has a reload button (↻). It re-fetches that provider right away, and for Claude it first checks whether the CLI's Keychain item changed since Runic last copied the token, for example after a `claude /login` in the terminal. If it did, Runic re-reads it (one Keychain dialog, because you pressed the button) instead of failing with "No non-interactive Claude credentials found". The check reads only the item's modification date, so pressing reload with a current token never prompts.
|
|
40
|
+
- Claude: banked limit resets (the one-off "reset your limits" grants, like the Opus 5.5 launch reset usable until Oct 22) show up next to Codex's. Claude Code's login returns the resets block with an empty list for these grants; only claude.ai lists them. Turn on **Banked resets from claude.ai** in Settings → Providers → Claude: Runic reads your claude.ai login from your browser once (macOS may ask for your password, only then), keeps a copy in its own Keychain item, and fetches resets with every Claude refresh without prompting. Each reset shows with its expiry on the card, the Resets panel and the menu. Runic only displays them; redeem on claude.ai. The claude.ai path also now picks your chat subscription org instead of whichever org the account lists first.
|
|
41
|
+
- Balances: prepaid providers (DeepSeek, Kimi, StepFun, OpenRouter, Vercel AI) show what you spent, not just what's left. Their APIs only report a balance, so spend comes from the difference between readings, and those used to be taken only on refresh. With refresh on Manual, a week could hold two readings and the Spend row never appeared. Runic now takes a balance reading every 20 minutes whatever the refresh mode (one small request per provider, no prompts), the Spend row always shows ("Measuring…" until a second reading exists), and Settings → Providers lists Balance and Spent for each of them.
|
|
42
|
+
- OpenRouter: if `/credits` refuses a regular key (OpenRouter's reference now lists it as management-key only), the card keeps the key's own spend today and this month instead of failing.
|
|
43
|
+
- Cline: new provider. Add a Cline API key (app.cline.bot → Settings → API Keys, or `CLINE_API_KEY`) to see your credit balance plus exact spend today and this month, summed from Cline's per-request usage records (`costUsd`).
|
|
44
|
+
- Muse (Meta): new provider for Meta's Model API (Muse Spark, api.meta.ai). Meta publishes no usage or billing endpoint, so the card shows key health, per-minute request and token limits from the rate-limit headers when Meta sends them, and "out of credits" when the API answers 402. The key comes from `MUSE_API_KEY`, `META_MODEL_API_KEY` or Meta's documented `MODEL_API_KEY`.
|
|
45
|
+
- Spend: a balance drop is spread over the gap between the two readings it came from, so a gap across midnight splits between yesterday and today instead of landing on today (and the burn rate only counts what fell inside its week). Every spend line now says where it comes from: "Official" when the provider reports the totals (OpenRouter, Cline), "Estimated" when Runic derives them from balance readings. A day or month with no reading yet shows "—" instead of a made-up $0.
|
|
46
|
+
- Codex: **Add Account** no longer spins forever when the browser login isn't finished. The runner waited for `codex login` to exit inside a task group that couldn't return until it did, so the 2-minute timeout never fired. It now polls the process against the deadline (and stops on cancel), and reads output as it arrives so a leftover helper holding the pipe open can't hang it either.
|
|
47
|
+
- DeepSeek, Kimi, StepFun: a "From logs" line shows spend right away, estimated from the tokens in your local logs (DeepSeek or Kimi routed through Claude Code, opencode, and so on) at models.dev prices, in USD. Prices come from a bundled copy, refreshed from models.dev at most once a day, and you can override any model in `~/Library/Application Support/Runic/pricing/custom-prices.json`. Models without a price are counted as "N tokens unpriced", never as $0. When the balance is in USD and was read within the last half hour, the line also checks today's estimate against today's balance drop: "Matches today's balance drop", or "Balance fell 3.0× more than the logs show — key used elsewhere?".
|
|
48
|
+
- Ollama Cloud: new provider for an ollama.com Pro/Max subscription (separate from Local LLM, which only sees the Ollama server on your Mac). Add an API key from ollama.com/settings/keys (or `OLLAMA_API_KEY`) to see the monthly credit pool, or session and weekly limits on older plans, your spend over the last four weeks, and which models you sent the most requests to. It reads `ollama.com/api/usage`, which Ollama doesn't document yet, so Runic decodes it loosely and keeps the reply's shape (field names only) in `diagnostics/ollama-cloud-usage-shape.json` in case it changes.
|
|
49
|
+
- Claude and Codex: when the login Runic copied stops working (for example after `claude /logout` and `/login`), the card says so instead of silently dropping its Session and Weekly bars. The "no credentials" error was hidden whenever usage history existed, a rule meant for log-only providers like Qwen and GLM; it no longer applies to providers with their own login.
|
|
50
|
+
- Claude: a **Usage credits** section on the card. It reads the newer `spend` block of Claude's usage reply (on or off, spent this month against the monthly limit) and, with the claude.ai switch on, your prepaid credit balance from claude.ai in your account's own currency: "Off · Balance €0.00", or "This month: €4.50 / €10.00 · Balance €12.50" with a gauge. A balance in one currency is never shown with another currency's symbol.
|
|
51
|
+
- Claude: turning on **Banked resets from claude.ai** now works with Chrome, Edge, Brave and Arc. The cookie reader always blocked the Keychain dialog that unlocks Chrome's cookie key, so connecting failed with "No claude.ai login found" even when you were signed in. Only that switch may show the dialog; background refreshes still never do. Safari needs Full Disk Access for Runic, which the message now says.
|
|
52
|
+
- Settings → Providers (list): tidier layout. Checkboxes line up with the provider icon instead of riding above it; badges, insight chips and errors share the name's text column; a provider's own settings rows (usage log paths, the claude.ai resets switch) sit nested under it rather than as separate full-width cards; the hairline that sat on each next card's edge is gone in favour of consistent gaps; the header lines up with the cards; insight chips stay two across.
|
|
53
|
+
|
|
54
|
+
## 2.8.0 — 2026-09-19
|
|
55
|
+
- TypeSafe: a provider for the vendor of the Jev System One model. Its API has no usage or billing endpoint — a live key answers `GET /v1/models` and nothing else, and a completed call reports only that call's own tokens back to the caller — so the card shows key health and available models, and the dashboard link goes to the console's Usage page. The key resolves from the Keychain first, then `TYPESAFE_API_KEY`, then `JEV_API_KEY`, since the key is often filed under the model's name.
|
|
56
|
+
- Claude: the Keychain dialog no longer comes back after every rebuild. `Claude Code-credentials` belongs to the Claude CLI, so its access rules trust that binary and not Runic, and the permission you grant is tied to the exact build — and the CLI drops it again each time it refreshes its token. Runic now keeps its own copy of the access token (never the refresh token), which it owns and is never asked about, and the CLI's item is only read with the dialog suppressed, so a background refresh fails quietly to the file fallback instead of asking or hanging. The one prompt left comes right after you sign in with `claude login` yourself.
|
|
57
|
+
|
|
58
|
+
## 2.7.3 — 2026-09-16
|
|
59
|
+
- Release: 2.7.2 shipped the 2.7.1 app binary. Swift 6.4 writes builds to `.build/out/Products/Release`, and the packaging scripts kept copying the per-architecture folders it no longer updates. 2.7.3 is the first build that actually contains the 2.7.2 fixes (every-region Refresh, region-aware dashboard, status and export). Packaging now takes paths from SwiftPM, builds all architectures in one pass, refuses an app binary older than its sources, and the release checks that the dSYM and the signed binary have the same UUIDs.
|
|
60
|
+
- Balances: prepaid providers (Kimi, Kimi China, DeepSeek, OpenRouter, Vercel AI, StepFun) show a proper Balance row, "¥110.04 · ¥85.04 paid · ¥25.00 bonus", with a currency symbol only where the platform fixes one (api.moonshot.cn = CNY, api.moonshot.ai = USD, DeepSeek reports its own, OpenRouter = USD). Balance APIs return a snapshot only, so Runic records every reading (62 days) and derives a Spend row: spent today and this month (top-ups excluded), the 7-day burn rate, and runway ("~1.2 days left at ¥89/day"). Totals cover the time Runic was recording and say "tracked since" when that started mid-period.
|
|
61
|
+
- Balances: a Top up badge and "API calls blocked · top up to resume" when calls will fail (DeepSeek's `is_available`, or a balance at or below zero), and a Low balance badge when the recent burn rate empties it within a day.
|
|
62
|
+
- OpenRouter: exact spend for the UTC day and month from `GET /api/v1/key` replaces the estimate ("this key"); a key spending limit becomes a gauge with its reset; the free-model daily request quota becomes its own bar.
|
|
63
|
+
- Kimi: a Kimi Code subscription key (rejected by the Open Platform balance endpoint) falls back to Kimi Code plan usage (`api.kimi.com/coding/v1/usages`): 5h, weekly and monthly windows with reset times.
|
|
64
|
+
- Kimi China: kimi-k3 usage routed through Claude Code (attributed to Kimi by model name, which carries no region) shows on the China account when that's the one enabled, instead of being dropped with the disabled international slot.
|
|
65
|
+
- Tests no longer leave a preferences file behind for every settings store they build.
|
|
66
|
+
|
|
67
|
+
## 2.7.2 — 2026-09-16
|
|
68
|
+
- Menu: **Refresh** on a brand with International and China accounts (Kimi, z.ai, MiniMax, Qwen, StepFun) fetches every region you have enabled. The brand tab points at the international slot, so Refresh only re-fetched that one: a China-only account never updated, and with both only the international card did. Opening the menu now also re-pings when any region under the tab is stale or failing, not just the international one.
|
|
69
|
+
- Menu: **Dashboard**, **Status page** and **Export CSV/JSON** act on the region the brand tab actually shows. A China-only Kimi opens platform.moonshot.cn instead of the international console and exports its own usage instead of the empty international slot.
|
|
70
|
+
|
|
71
|
+
## 2.7.1 — 2026-09-12
|
|
72
|
+
- Preferences: the Providers sidebar's selected row and the provider list's enable checkboxes are theme-owned on every opinionated theme (the row used the macOS accent instead of the theme's; the checkboxes were native). No change on System and Dark.
|
|
73
|
+
- Themes: **Kirigami** — paper craft. Cream card stock with pencil hatching; every card, button, tab and switch is a sticker: a wobbly marker outline, a white halo outside it, and a hard offset shadow, as if cut out and glued on. Section and card titles are handwritten (Patrick Hand, bundled under the OFL, display-only — it never touches the font picker), body text is Nunito (rounded sans, bundled under the OFL, also offered in the font picker for any theme), numbers stay in Geist Mono. Progress bars are warp pipes (outlined tube, lit top band, a taller lip at the mouth), bar charts get the same lip, Runi becomes a peel-off sticker that hops. The popover and the Preferences window are staged like a craft page: a band of sky at the top with a cloud and a star, the provider and Preferences tabs as folder tabs stuck onto the cream sheet below it (selected tab in peach, butter, mint, sky or lilac by position, the rest leaning a degree either way), the sheet's cut top edge running under their feet, and a strip of paper hills with flowers along the bottom. Cards lift on hover. Theme JSON gains `chrome.borderStyle` value `cutout`, `effects.texture` value `hatch`, `controls.progressStyle` value `pipe`, `shape.separator` value `stitch`, and `typography.displayFamily`. No Nintendo assets — the whole cast is Runi.
|
|
74
|
+
- Menu: a **Burn** panel in Explore. Every refresh now keeps the quota reading (per provider and window, 21 days, JSONL under Application Support), and the panel draws the cycle: the actual curve as a step line, the even-burn budget from window start to reset as a dashed line, a "now" rule, and dashed projections from the last 1h and 6h rates to their run-out points. The headline says "Ahead of budget by 12%" or "Under budget by 8%" and "Runs out Thu 4 PM (2d 4h) at the 6h rate · resets Sat 9 PM" or "Lasts to the reset". Session, weekly and model windows each get their own tab. Appears once a window has two readings this cycle.
|
|
75
|
+
|
|
76
|
+
## 2.7.0 — 2026-09-09
|
|
77
|
+
- Menu: a brand with International and China accounts (Kimi, z.ai, MiniMax, Qwen, StepFun) is one brand in the menu. The provider switcher shows one tab per brand; selecting it stacks a card per configured region, with an "Add China account" / "Add International account" row when one side has no key yet that opens Settings → Providers on that slot. The Overview groups the two regions under one brand header with INTL / CN rows and the same offer.
|
|
78
|
+
- Menu: a new **Resets** panel lists every quota window that knows when it flips — across all providers on the Overview, or just the selected provider's windows on its card. Each row shows what's left, a live countdown, the wall-clock expiry ("tomorrow 9:00 AM", "Thu 4:30 PM"), and an elapsed ring for windows with a known length (5h session, 7d weekly). Ticks every 30s while the menu is open. Appears in both the popover and the classic NSMenu layout.
|
|
79
|
+
- Resets: **banked reset credits** — the manual "reset my limit" allowance some providers grant — now show up wherever windows do. Codex reports the count in its usage payload and lists each credit with its expiry via the reset-credits endpoint; Runic reads both, so the Resets panel gets a "Banked" row per provider ("2 resets available · Full reset · expire Oct 4, Oct 5 · until Oct 5"), the provider card's session line says "2 banked resets · usable until Oct 5", the Overview row gets a "2 resets" pill, and the classic NSMenu gets the same line. The model is provider-neutral; Claude joins the moment its payload exposes the equivalent.
|
|
80
|
+
- Codex: the `additional_rate_limits` block (a promotional model's own 5h/weekly allowance, e.g. GPT-5.3-Codex-Spark) is decoded and surfaced as the card's third window, labelled with the provider's limit name, so every window that resets is visible.
|
|
81
|
+
- Claude: the OAuth usage payload's `limits` list is decoded; an active model-scoped weekly limit (a promotional model's own allowance) becomes the card's third window, labelled "<Model> weekly".
|
|
82
|
+
- Menu: per-window reset lines on provider cards now carry both halves — "Resets in 2h 14m · 4:30 PM" — instead of only the countdown; the Overview row pill counts down live instead of echoing the provider's raw phrase. Providers that only hand over a phrase ("resets in 3h 12m", Gemini CLI) get it parsed into a real date so they join the countdowns.
|
|
83
|
+
- Themes: **Sumi** (ink on washi — warm paper with visible fibre, sumi-black text in your chosen font, one vermilion seal accent, tapered brush-stroke rules, flat ink progress bars) and **Blueprint** (drafting table — cobalt paper ruled with a fine grid, crisp white linework, cyan drafting ink for the accent, Geist Mono numerals like dimension labels, title-block section headers; brand colors sit on cobalt like markers on a blueprint). Both are data-driven: theme JSON gains `effects.texture` / `effects.textureOpacity` (`paper` | `grain` | `grid`), `chrome.borderStyle` values `ink` and `block`, `controls.progressStyle` value `flatBar`, `controls.chartSeries` (`themed` | `monochrome`), and `shape.separator` values `brush` and `rule`.
|
|
84
|
+
- Review renders: `RUNIC_SCREENSHOT_DEMO=1` seeds representative quota windows into the screenshot process so `Scripts/ship.sh` renders show gauges, countdowns and the Resets panel instead of empty cards. Nothing is persisted.
|
|
85
|
+
- Themes: **Terminal** repainted from green-phosphor CRT to operator console. True black, amber phosphor for everything the system says (brackets, selection, labels, progress), bone-white Geist Mono for every number, color reserved for status (green headroom, orange warning, red exhausted), scanlines at a whisper. Structure unchanged.
|
|
86
|
+
- Themes: **Relief** — real light instead of paint. A warm desk-gray canvas; cards raised on a two-light shadow (a wide ambient plus a tight key from the top-left) with a rim highlight along the top edge; segmented pickers and progress tracks pressed in as recessed wells with the selected segment and the fill popping back up; buttons raised and pushed flat on press; cards lift on hover with springy motion; letterpress section headers; generous spacing so the shadows breathe. Driven by a new `effects.elevation` token in theme JSON, so any theme can turn it on.
|
|
87
|
+
- Preferences: themed for real. Section headers use the same treatment as the menu (seal, brackets, rule, tracked caps), checkboxes are theme-owned on every opinionated theme, segmented pickers and buttons are Runic controls that take the theme's fill, stroke, radius, font and accent instead of the gray native ones, and the blurred mesh no longer paints a stray band under paper, film, or parchment. Terminal uses one family everywhere (Geist Mono, full size, calmer line rhythm) instead of mixing mono titles with system-font descriptions.
|
|
88
|
+
- Themes: **Light** and **Daybreak** are retired — Light was System without the adaptivity, Daybreak was a palette with nothing structural behind it. Existing Light and Daybreak users land on Sumi; the older retired names map to their nearest living theme (nocturne → Blueprint, prism → Glass, pine → Retro). A short-lived Noir (film-noir monochrome) was tried during this cycle and replaced by Blueprint before release; the `noir` id migrates to Blueprint too.
|
|
89
|
+
|
|
90
|
+
## 2.6.2 — 2026-09-06
|
|
91
|
+
- Licensing: the app bundle now carries THIRD-PARTY-NOTICES.md (Sparkle, KeyboardShortcuts, swift-log, swift-syntax, CryptoSwift, Silo, Helix, and the OFL fonts), as those licenses require for binary distribution. Regenerate with `Scripts/generate-third-party-notices.sh` after changing dependencies.
|
|
92
|
+
- Docs: README brought current (history coverage, China/international account pairs, hot-reload config, correct CLI install path, acknowledgements); docs/providers.md gains the seven providers it was missing plus regional-pair and auto-enable sections.
|
|
93
|
+
- Release tooling: the appcast generator no longer re-points older entries at the newest release path; the Homebrew cask bump lands through a PR and survives a leftover branch; the local ship script clears stale staging bundles before packaging.
|
|
94
|
+
|
|
95
|
+
## 2.6.1 — 2026-09-06
|
|
96
|
+
- Codex: usage from Codex CLI 0.153+ is counted again. Newer rollouts log each response as a `token_usage_record` line and no longer emit the `token_count` event Runic read, so sessions on gpt-6-astra (and recent gpt-5.6 sessions) showed no tokens, no model, and no cost. Existing installs run a one-time full rescan on the next refresh to recover the missed history.
|
|
97
|
+
- Codex: pricing and context windows for gpt-5.6 Sol / Terra / Luna and gpt-6-astra (272K context per Codex's own model cache); the Codex card's fallback context label now says GPT-6 Astra.
|
|
98
|
+
|
|
99
|
+
## 2.6.0 — 2026-09-04
|
|
100
|
+
- Providers: added China-platform siblings as separate accounts you can track alongside the international ones — Kimi (China, api.moonshot.cn), GLM (China, open.bigmodel.cn), MiniMax (China, minimaxi.com), Qwen (China, DashScope) — plus StepFun as a new provider with both global (platform.stepfun.ai) and China (platform.stepfun.com) slots. Each has its own Keychain-stored key and env var (KIMI_CN_API_KEY, BIGMODEL_API_KEY, MINIMAXI_API_KEY, DASHSCOPE_CN_API_KEY, STEPFUN_API_KEY, STEPFUN_CN_API_KEY).
|
|
101
|
+
- Preferences: a brand with both platforms (Kimi, GLM, MiniMax, Qwen, StepFun) is one entry everywhere. The list layout nests the China account under its parent behind an "Add <region>" link; the sidebar shows one row per brand with an International | China switch in the detail. A China account always sits right after its international sibling in the provider order, the menu switcher, the Overview, and the widget, so pairs are never split across the list, and it stays hidden from the menu until it has a key of its own.
|
|
102
|
+
- Keychain: no more password prompts on every rebuild. Only binaries carrying Runic's own signing identity (the installed app, its helpers, the widget) touch the login keychain; `swift build` / `swift test` products and other ad-hoc binaries are environment-only, so they never trip the per-binary ACL dialog. Set `RUNIC_ALLOW_KEYCHAIN=1` to opt a local build back in.
|
|
103
|
+
- Menu: Overview rows use compact names ("z.ai CN", "Kimi CN") instead of truncating to "z.ai (…"; a provider card that has a key but hasn't been fetched yet says so and nudges "Ping now" instead of asking you to add credentials you already added.
|
|
104
|
+
- Codex: usage fetch works again with Codex CLI 0.153+, which dropped the `untrusted` approval policy Runic passed to `codex app-server` (every fetch failed with "invalid value 'untrusted'"). Runic now passes `never`, which every Codex version accepts and which is what a read-only probe wants anyway.
|
|
105
|
+
- CLI: `runic usage --provider` accepts every provider's CLI name and aliases from the descriptor registry (`kimi-cn`, `glm-cn`, `bigmodel`, `stepfun-cn`, …) instead of a hand-kept list that had drifted.
|
|
106
|
+
- z.ai: the China account is labelled "z.ai (China)" so the pair reads as one brand (CLI name stays `glm-cn`, aliases `bigmodel`, `zai-cn`).
|
|
107
|
+
- Providers: a provider you never toggled switches itself on the moment there's evidence for it — an exported API key (KIMI_API_KEY, DASHSCOPE_API_KEY, DEEPSEEK_API_KEY, …), a key already in the Keychain, or usage for it found in your coding-tool logs. A provider you explicitly turned off stays off.
|
|
108
|
+
- Kimi: the old "point the base URL at api.moonshot.cn" workaround is folded into the Kimi (China) account. On first launch a key configured that way moves to the China slot automatically (logged), and the base URL field is now for custom gateways or proxies only.
|
|
109
|
+
- Usage: models routed through Claude Code (qwen, glm, kimi, minimax, deepseek…) are now attributed to their own provider in the timeline and breakdowns instead of being counted as Claude.
|
|
110
|
+
- Qwen: optional API base URL for regional or custom DashScope gateways (also honors DASHSCOPE_BASE_URL). A missing usage endpoint (token/coding plans 404) no longer paints the card red; a rejected key still does.
|
|
111
|
+
- Config: new hot-reload `~/Library/Application Support/Runic/config.json` for provider endpoint overrides, extra log paths, and rolling-window quota gauges (e.g. a DashScope Token Plan request budget) reconstructed from log-derived usage — edits apply live, no restart. Open/reveal/reload buttons live in Preferences → General.
|
|
112
|
+
- Menu: a provider whose usage comes only from logs (no key configured) no longer shows an "Issue" badge for the missing credential; a configured credential that fails still does.
|
|
113
|
+
- Settings: editing a provider key re-fetches automatically once the Keychain write lands, so a new key takes effect without a relaunch. The Settings window now reliably comes to the front when opened from the menu.
|
|
114
|
+
|
|
115
|
+
## 2.5.2 — 2026-07-10
|
|
116
|
+
- Antigravity: show all reported models sorted by most-constrained first, pick Claude variant with most remaining quota instead of arbitrary first match.
|
|
117
|
+
- z.ai: fixed provider not appearing in the main panel after entering API key — availability check now reads Keychain directly and reacts to settings changes immediately.
|
|
118
|
+
- UI: menu item hover highlight now fills edge-to-edge (removed 6px horizontal inset), card header and content sections align uniformly at 12px padding.
|
|
119
|
+
|
|
120
|
+
## 2.5.1 — 2026-07-10
|
|
121
|
+
- MiniMax: switched to `token_plan/remains` endpoint (Bearer auth), added weekly quota display, fixed web parsing field names to match real API response. Multi-model quotas now surface correctly.
|
|
122
|
+
- Antigravity: fixed process detection for v2.2.1+ (renamed binary), added URLSessionDelegate for macOS 27 SSL challenges, multi-process probing with cumulative deadline, TLS host validation, port-probe timeout caps.
|
|
123
|
+
- Gemini: extended OAuth credential search to Homebrew paths and Gemini CLI 0.43+ bundled format.
|
|
124
|
+
- UI: menu card padding uniformity — header/content/empty-state sections all align at 12px, section spacing unified.
|
|
125
|
+
- Docs: 29 provider documentation files covering every supported provider.
|
|
126
|
+
- Internal: 13 code-review findings fixed across 3 independent adversarial reviews. Model name tolerance, network error retry, symlink chain resolution.
|
|
127
|
+
|
|
128
|
+
## 2.5.0 — 2026-07-03
|
|
129
|
+
- Illustrations: added Runi, a vector mascot drawn entirely in SwiftUI (no bitmap art) that now appears across every empty state instead of bare "no data" text, with four moods and full Reduce Motion support.
|
|
130
|
+
- Usage: fixed a critical bug where reopening the app after it had been closed overnight could seal today's still-in-progress data into the permanent history archive during gap catch-up — history now stays correct across app restarts. Also fixed a Codex token-accounting bug that double-counted cached input tokens.
|
|
131
|
+
- Usage: session/weekly gauges no longer fake a 0% or 100% progress bar for providers or windows that don't actually have a known quota — they now show nothing (or a dash) instead of a misleading number, and Overview/CLI averages no longer get dragged down by those placeholder windows.
|
|
132
|
+
- Usage: fixed the credits bar rendering on providers where it mixed currency and 1K-token scales — it's now Codex-only, where the scale is correct.
|
|
133
|
+
- Menu: "Ping now" from the Overview tab now does a real full refresh instead of silently re-pinging whichever provider you last viewed. The Overview chart's legend can no longer drift out of sync with the chart's own color mapping.
|
|
134
|
+
- Menu: the Full/Abbreviated number format and Relative/Absolute date format preferences now apply consistently to insights panels, which previously ignored them and showed the other style.
|
|
135
|
+
- Preferences: fixed theme-card taglines truncating mid-word in the Terminal theme, the 7-card theme grid stranding the selected card alone on its own row, and provider status chips having inconsistent pill styling. Fixed currency amounts rendering without thousands separators and with a stray space after the $ sign, and a near-zero cost-per-1K rate rendering as a misleading "$0.0000".
|
|
136
|
+
- Preferences: normalized theme typography sizing — every theme was quietly running larger than its own declared base sizes for no stated reason, and Terminal now compensates for its locked Commit Mono face reading visually bigger than San Francisco at the same point size.
|
|
137
|
+
- Icons: menubar icon rebuilt as a single-path lemniscate SVG; app icon gradient now runs to the brand teal.
|
|
138
|
+
- Performance: menu submenus now build only when opened instead of eagerly on every refresh, ledger scans resume from a byte offset instead of rescanning provider logs from the start, and history archiving only touches days that actually changed.
|
|
139
|
+
- Build: local ad-hoc dev builds now sign with a stable local identity when available, instead of true ad-hoc signing — which was forcing a repeat Keychain password prompt on every rebuild since ad-hoc's designated requirement is pinned to the literal binary hash.
|
|
140
|
+
|
|
141
|
+
## 2.4.1 — 2026-06-26
|
|
142
|
+
- Kimi: you can now point the provider at the right region. Subscriptions bought on the China platform (api.moonshot.cn), or routed through a reseller/proxy, no longer fail to load — set an optional "API base URL" in Preferences → Providers → Kimi (defaults to api.moonshot.ai, also honors MOONSHOT_BASE_URL / KIMI_BASE_URL). Kimi also now shows your real account balance from the Moonshot balance API instead of only listing available models.
|
|
143
|
+
- Custom providers: adding or editing a provider now reports failures inline in the editor instead of silently doing nothing, keeps your input when a save fails, and no longer loses the second of two stacked dialogs — fixing a case where the add/edit sheet could appear to do nothing.
|
|
144
|
+
- Provider icons: corrected four logos. Kimi's mark was invisible on light backgrounds and now renders in its brand color; Gemini uses its current "spark" mark; Auggie shows the real Augment logo; and Factory shows Factory.ai's emblem instead of an unrelated placeholder.
|
|
145
|
+
|
|
146
|
+
## 2.4.0 — 2026-06-21
|
|
147
|
+
- Codex: fix the timeline silently dropping to zero during long, continuous sessions. Codex now resumes a single rollout file and appends to it for days while keeping it filed under its start date; the scanner only looked in the last few date-named folders, so once a live session aged past that window all current usage went unread. Usage is now found by when a file was last written, wherever it lives — so an active goal-loop session is always captured.
|
|
148
|
+
- Codex: add cost rates for the gpt-5.3, gpt-5.4 (incl. mini), and gpt-5.5 model families so cost and per-model breakdowns stop reading as $0 for recent usage.
|
|
149
|
+
|
|
150
|
+
## 2.3.0 — 2026-06-17
|
|
151
|
+
- Usage: the timeline no longer goes blank after the app has been closed for a few days — missed days are now backfilled from the last scan instead of only scanning today, and a one-time repair recovers gaps that older builds left behind.
|
|
152
|
+
- Usage: a day's history is preserved even if its provider logs have since rotated away, and the local history relay is hardened against version upgrades, a second copy of the app running during an upgrade, busy log files, and system-clock changes — so days can't silently zero out.
|
|
153
|
+
- Providers: added opencode — its local message history shows up as a usage timeline with per-model, per-project, and cost breakdowns (cost is read straight from opencode's own records). Opt-in: enable "Show opencode usage" in Preferences → Providers.
|
|
154
|
+
|
|
155
|
+
## 2.2.6 — 2026-06-04
|
|
156
|
+
- Usage: keep the local history cache compact — a month of history dropped from ~17 MB to under 100 KB, and it self-compacts so it can't balloon again.
|
|
157
|
+
- Usage: history rebuild now survives a provider rewriting its logs mid-scan, and never drops a day's cached totals when a file is briefly unavailable.
|
|
158
|
+
- Usage: a fresh install (or after clearing local data) backfills recent history automatically instead of showing only today.
|
|
159
|
+
|
|
160
|
+
## 2.2.5 — 2026-06-03
|
|
161
|
+
- Usage: stop hiding high-usage days — days with very large token totals (cache reads can run to hundreds of millions per day) were wrongly quarantined and shown as zero in usage, cost, and timeline panels; real history now renders in full.
|
|
162
|
+
- Usage: fix a relay-cache growth bug where heavy provider history could bloat the local cache and stall refresh, leaving usage, cost, and timeline panels blank; history is stored as compact daily summaries and the cache self-compacts.
|
|
163
|
+
|
|
164
|
+
## 2.2.3 — 2026-05-30
|
|
165
|
+
- Preferences: make status-menu Settings and About actions open the Settings window and select the requested panel reliably.
|
|
166
|
+
|
|
167
|
+
## 2.2.2 — 2026-05-30
|
|
168
|
+
- Usage: make cost refresh scan only the mutable current day by default, with `--rebuild` reserved for 30-day provider JSONL repair.
|
|
169
|
+
- Usage: harden the provider relay cache so empty rebuild days clear stale snapshots and cached history stays frozen during normal refreshes.
|
|
170
|
+
- Docs: rewrite the README as a direct local-first project statement and document refresh versus rebuild behavior.
|
|
171
|
+
- Governance: switch current development licensing from AGPL-3.0-or-later to MPL-2.0.
|
|
172
|
+
|
|
173
|
+
## 2.2.1 — 2026-05-25
|
|
174
|
+
- Themes: add JSON-backed typography/chrome/effects/control style tokens, with Terminal rebuilt as a calmer Tactical HUD and Retro borders softened.
|
|
175
|
+
- Typography: switch the default product face to Mona Sans, add Commit Mono for Terminal/data-heavy surfaces, and migrate removed or missing saved fonts to Mona Sans.
|
|
176
|
+
- Fonts: remove bundled Fira Code, IBM Plex Mono, JetBrains Mono, and Space Mono while keeping Geist, Geist Mono, SF/New York system fonts, VT323 for Retro decoration, and licensed Berkeley/Operator faces as curated picker choices when bundled or installed.
|
|
177
|
+
- Charts: make timeline panels respect the Settings chart style, including line, filled area, and bar rendering.
|
|
178
|
+
- Preferences: restore Integrations as an active local control center for CLI commands, MCP profiles, alert webhook defaults/tests, GitHub commit correlation, Kosha detection, and provider docs.
|
|
179
|
+
- Privacy: remove anonymous-usage sharing UI and clarify local-only integration storage.
|
|
180
|
+
- Performance: keep provider JSONL logs read-only and preserve cached daily ledger history after incremental scans.
|
|
181
|
+
|
|
182
|
+
## 2.2.0 — 2026-05-19
|
|
183
|
+
- Themes: add Retro as the new default theme — a System-7 inspired parchment + navy palette with asymmetric bevels on every surface, plain-text email + tag-style plan badge in the provider hero, beveled checkboxes, and a VT323 pixel tagline footer.
|
|
184
|
+
- Themes: move every palette to JSON under `Resources/Themes/` with `$systemColorName[@opacity]` tokens so adaptive colors stay reactive; Swift fallback remains as a safety net but `ThemeLoader` is the runtime source of truth.
|
|
185
|
+
- Themes: remove the weakest themes (nocturne, pine, prism) and migrate existing users to daybreak; first-launch defaults to retro.
|
|
186
|
+
- Typography: make font selection dynamic via an `@Observable` font store so swaps propagate through the live SwiftUI tree without restart; bundle Geist + GeistMono + VT323, remove unused Caveat/Inconsolata/SpaceMono-Bold.
|
|
187
|
+
- Polish: migrate hardcoded padding / corner radius / opacity values to `RunicSpacing`, `RunicCornerRadius`, and `RunicColors.Opacity` tokens across menu and preferences views.
|
|
188
|
+
- Menu: export actions now follow the selected Explore panel and timeline range, including scoped 3d/7d/30d/90d/1y timeline exports.
|
|
189
|
+
- Charts: add hover details/tooltips for timeline, hourly, weekly, utilization, windows, model, and project breakdown panels.
|
|
190
|
+
- Projects: replace opaque "Unknown project" UX with "Unattributed usage" detail text that explains when provider logs lack readable project identity.
|
|
191
|
+
- Context: surface connection and context-health lines in provider insights, separating max context metadata from observed usage and compaction transparency.
|
|
192
|
+
- Providers: add Local LLM as a first-class provider with localhost discovery for Ollama, LM Studio, vLLM, llama.cpp, and Open WebUI.
|
|
193
|
+
- Usage: add metric provenance to ledger totals and scoped CSV/JSON exports so token/cost values identify exact, provider-reported, estimated, inferred, or unknown sources.
|
|
194
|
+
- Usage: detect explicitly marked compaction work from OpenTelemetry/provider logs and surface it as compaction tax in menus, exports, and CLI insights.
|
|
195
|
+
- Usage: add a local OTLP/HTTP JSON collector that sanitizes GenAI telemetry into metric-only JSONL and is read automatically by app and CLI insights.
|
|
196
|
+
- Usage: expand telemetry parsing for Vercel AI SDK-style fields, Ollama token counters, total-token-only payloads, cache hit/miss counters, and explicit cost fields.
|
|
197
|
+
- Custom providers: record performance metrics under a `custom:<provider>` label instead of misattributing them to Codex.
|
|
198
|
+
- CLI: let `runic insights` analyze any provider with a local ledger or OpenTelemetry GenAI logs, including `local-llm`.
|
|
199
|
+
- CLI: add `runic otel-collect` for local OTLP JSON collection and one-shot sanitized ingestion.
|
|
200
|
+
- Typography: add more curated macOS font choices with explicit spacing/contrast rules in the live font preview.
|
|
201
|
+
- Governance: switch current development licensing to AGPL-3.0-or-later and add sponsorship metadata for GitHub Sponsors and Buy Me a Coffee.
|
|
202
|
+
|
|
203
|
+
## 2.1.7 — 2026-05-13
|
|
204
|
+
- Menu: render lower action, text, custom-provider, export, chart-link, and divider rows through the same themed hosted surface as the top provider cards.
|
|
205
|
+
- Menu: keep row clicks routed through the original menu actions so Settings, Ping, Quit, and provider account actions remain functional after the themed row conversion.
|
|
206
|
+
- Themes: remove the Pine/System split where the upper menu honored the selected palette but the lower main-panel rows fell back to native AppKit styling.
|
|
207
|
+
|
|
208
|
+
## 2.1.6 — 2026-05-13
|
|
209
|
+
- Themes: deepen Terminal into a Tokmeter-style HUD across menu panels, Settings panes, provider cards, chart panels, alerts, budgets, integrations, team views, and rating cards.
|
|
210
|
+
- Themes: add shared scanline and corner-bracket overlays for Terminal surfaces while keeping glass/material effects limited to non-Terminal skins.
|
|
211
|
+
- Themes: replace remaining macOS gray panel fills in shared app surfaces with Runic theme tokens so selected skins propagate consistently.
|
|
212
|
+
|
|
213
|
+
## 2.1.5 — 2026-05-13
|
|
214
|
+
- Themes: make Settings theme previews use the same menu surface, card, separator, track, and provider chip tokens as the main menubar panels.
|
|
215
|
+
- Themes: remove uncontrolled AppKit vibrancy/material bleed from hosted menu panels so selected skins do not inherit the color of whatever window is behind them.
|
|
216
|
+
- Themes: tune Terminal into a Tokmeter-style retro HUD with black surfaces, neon green accents, amber highlights, cyan support color, and readable off-white text.
|
|
217
|
+
|
|
218
|
+
## 2.1.4 — 2026-05-13
|
|
219
|
+
- Packaging: fix launch crash in packaged builds by avoiding SwiftPM `Bundle.module` resource lookup at app startup.
|
|
220
|
+
- Resources: route fonts, provider SVGs, and provider context fallbacks through a packaged-app-safe resource locator.
|
|
221
|
+
|
|
222
|
+
## 2.1.3 — 2026-05-13
|
|
223
|
+
- Context: add provider-level context transparency that separates advertised/configured max context from observed usage and context-health messaging.
|
|
224
|
+
- Context: read provider context windows from the Kosha TTL-backed registry when available, with static fallbacks for every built-in provider.
|
|
225
|
+
- Providers: include Vercel AI Gateway in the provider surface and usage plumbing.
|
|
226
|
+
- Icons: polish the Codex mark into a larger colorful transparent SVG without the old badge border.
|
|
227
|
+
- Themes: apply the selected palette to the main menubar panels, overview panel, provider tabs, sidebar switcher, chart submenus, progress bars, and Preferences panes.
|
|
228
|
+
- Themes: make themed surfaces use palette backgrounds, strokes, text, track colors, and accent tints instead of falling back to macOS system grays.
|
|
229
|
+
- Preferences: make the full settings window reflect the active theme behind every tab, not only the appearance preview.
|
|
230
|
+
- Privacy: sanitize public contact/package metadata to use the GitHub noreply identity.
|
|
231
|
+
- Release: add `Scripts/clean-local-builds.sh` for wiping generated local build artifacts safely.
|
|
232
|
+
|
|
233
|
+
## 2.1.2 — 2026-05-12
|
|
234
|
+
- Icons: replace the handcrafted provider SVG set with brand marks from the LobeHub AI icon set where available.
|
|
235
|
+
- Icons: add polished custom Auggie and Droid marks for providers without reliable public SVG coverage.
|
|
236
|
+
- Icons: make provider marks larger in menu tabs, hero rows, settings previews, and provider health rows.
|
|
237
|
+
- Menu: remove the glossy rounded backing behind the provider hero mark so official logos render as logos, not tiny app badges.
|
|
238
|
+
- Tests: update provider icon checks to require the new 24px brand-mark grid and reject old 64px plate-style assets.
|
|
239
|
+
|
|
240
|
+
## 2.1.1 — 2026-05-12
|
|
241
|
+
- Icons: render provider marks as larger, colorful brand SVGs without the badge plate/border.
|
|
242
|
+
- Themes: add a Glass theme with stronger frosted depth, aurora color, and livelier glass motion.
|
|
243
|
+
- Preferences: add an appearance preview and make theme/font changes repaint immediately.
|
|
244
|
+
- Typography: resolve bundled font face names so custom font changes actually apply in SwiftUI and menu text.
|
|
245
|
+
- Claude: stop automatic app refreshes from falling back to CLI probing, preventing repeated macOS password prompts unless CLI is explicitly selected.
|
|
246
|
+
- Menu: collapse duplicate display-equivalent model rows in the Models submenu.
|
|
247
|
+
- Operations: add provider credential/data health, default guardrail installation, and redacted diagnostics export.
|
|
248
|
+
- Tests: guard provider SVGs and brand icon rendering so bordered assets do not sneak back in.
|
|
249
|
+
|
|
250
|
+
## 2.1.0 — 2026-05-12
|
|
251
|
+
- Providers: add Vercel AI Gateway support, plus Qwen and Vertex AI provider wiring.
|
|
252
|
+
- Usage: show token/cost/model/project summaries for any provider with local ledger or OpenTelemetry GenAI logs.
|
|
253
|
+
- Preferences: add shared Usage log paths and refresh controls across provider settings.
|
|
254
|
+
- Icons: regenerate all provider SVGs as compact 64px template marks and render them as high-contrast badges.
|
|
255
|
+
- Themes: add Pine, Nocturne, Prism, and Terminal skins alongside System, Light, and Dark.
|
|
256
|
+
- Packaging: use a stable Developer ID signing identity for release builds to avoid Keychain trust churn.
|
|
257
|
+
- Keychain: skip rewriting unchanged provider secrets so saved API keys stay quiet across upgrades.
|
|
258
|
+
|
|
259
|
+
## 2.0.0 — 2026-03-27
|
|
260
|
+
- Typography: custom font system with 7 bundled families (Fira Code, JetBrains Mono, IBM Plex Mono, Space Mono, Inconsolata, Caveat, SF Pro/Mono)
|
|
261
|
+
- Typography: live font switching from Settings > General — no restart needed
|
|
262
|
+
- Typography: RunicTypography design tokens with dynamic RunicFont scale across 600+ font call sites
|
|
263
|
+
- Typography: drop-in font extensibility — add TTF/OTF to Resources/Fonts, rebuild, auto-discovered
|
|
264
|
+
- Typography: font preview in picker — each choice rendered in its own typeface
|
|
265
|
+
- Typography: NSMenuItem post-processor applies selected font to all plain menu items
|
|
266
|
+
- Typography: xLarge dynamic type for slightly larger text across the app
|
|
267
|
+
- Menu: wider card base width (310→340pt) for monospaced font comfort
|
|
268
|
+
- iOS: RunicFont enum for consistent monospaced typography across widgets and views
|
|
269
|
+
|
|
3
270
|
## 0.16.1 — 2025-12-29
|
|
4
271
|
- Menu: reduce layout thrash when opening menus and sizing charts. Thanks @ibehnam!
|
|
5
272
|
- Packaging: default release notarization builds universal (arm64 + x86_64) zip.
|