@sriinnu/runic 2.0.0 → 2.11.2
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 +261 -0
- package/LICENSE +373 -21
- package/README.md +96 -89
- 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/RunicTypographyiOS.swift +0 -24
- 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 -117
- package/Sources/Runic/Controllers/StatusItemController+Actions.swift +0 -670
- package/Sources/Runic/Controllers/StatusItemController+Animation.swift +0 -519
- package/Sources/Runic/Controllers/StatusItemController+ChartSubmenus.swift +0 -824
- package/Sources/Runic/Controllers/StatusItemController+CustomProviders.swift +0 -90
- package/Sources/Runic/Controllers/StatusItemController+Menu.swift +0 -1412
- package/Sources/Runic/Controllers/StatusItemController+MenuCards.swift +0 -339
- package/Sources/Runic/Controllers/StatusItemController+MenuHelpers.swift +0 -423
- package/Sources/Runic/Controllers/StatusItemController.swift +0 -360
- package/Sources/Runic/Core/BudgetNotificationManager.swift +0 -81
- 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 -1222
- package/Sources/Runic/Core/Rendering/IconView.swift +0 -122
- 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/RunicTypography.swift +0 -206
- package/Sources/Runic/Core/Stores/AuggieTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/AzureOpenAITokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/CerebrasTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/CohereTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/CopilotTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/CustomProviderStore.swift +0 -158
- package/Sources/Runic/Core/Stores/DeepSeekTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/FireworksTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/GroqTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/KimiTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/MiniMaxCookieHeaderStore.swift +0 -117
- package/Sources/Runic/Core/Stores/MiniMaxGroupIDStore.swift +0 -117
- package/Sources/Runic/Core/Stores/MiniMaxTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/MistralTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/OpenRouterTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/PerplexityTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/ProviderToggleStore.swift +0 -30
- package/Sources/Runic/Core/Stores/QwenTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/SambaNovaTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/SettingsStore.swift +0 -1749
- package/Sources/Runic/Core/Stores/TogetherTokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/UsageStore+Accessors.swift +0 -33
- 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 -3631
- package/Sources/Runic/Core/Stores/XAITokenStore.swift +0 -117
- package/Sources/Runic/Core/Stores/ZaiTokenStore.swift +0 -117
- package/Sources/Runic/Core/UsageExporter.swift +0 -197
- 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 -51
- 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/Fonts/Caveat-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/Caveat-Regular.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/FiraCode-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/FiraCode-Light.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/FiraCode-Medium.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/FiraCode-Regular.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/FiraCode-SemiBold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/IBMPlexMono-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/IBMPlexMono-Medium.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/IBMPlexMono-Regular.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/IBMPlexMono-SemiBold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/Inconsolata-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/Inconsolata-Medium.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/Inconsolata-Regular.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/Inconsolata-SemiBold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/JetBrainsMono-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/JetBrainsMono-Medium.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/JetBrainsMono-Regular.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/JetBrainsMono-SemiBold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/SpaceMono-Bold.ttf +0 -0
- package/Sources/Runic/Resources/Fonts/SpaceMono-Regular.ttf +0 -0
- 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 -367
- package/Sources/Runic/SessionQuotaNotifications.swift +0 -58
- package/Sources/Runic/UsagePaceText.swift +0 -52
- package/Sources/Runic/UsageProgressBar.swift +0 -228
- package/Sources/Runic/Utilities/DisplayLink.swift +0 -96
- package/Sources/Runic/Utilities/LoadingPattern.swift +0 -62
- package/Sources/Runic/Utilities/PerformanceConstants.swift +0 -85
- package/Sources/Runic/Views/Menu/AlertsMenuView.swift +0 -254
- 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 -311
- package/Sources/Runic/Views/Menu/HeroStatCardsMenuView.swift +0 -231
- package/Sources/Runic/Views/Menu/HourlyActivityChartMenuView.swift +0 -228
- package/Sources/Runic/Views/Menu/InlineUsageChartView.swift +0 -157
- package/Sources/Runic/Views/Menu/MenuCardEntranceModifier.swift +0 -63
- package/Sources/Runic/Views/Menu/MenuCardSidebarView.swift +0 -248
- package/Sources/Runic/Views/Menu/MenuCardSkeletonView.swift +0 -104
- package/Sources/Runic/Views/Menu/MenuCardView.swift +0 -1889
- package/Sources/Runic/Views/Menu/MenuContent.swift +0 -153
- package/Sources/Runic/Views/Menu/MenuDescriptor.swift +0 -371
- package/Sources/Runic/Views/Menu/MenuHighlightStyle.swift +0 -35
- package/Sources/Runic/Views/Menu/ModelBreakdownMenuView.swift +0 -241
- package/Sources/Runic/Views/Menu/OverviewMenuView.swift +0 -281
- package/Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift +0 -214
- package/Sources/Runic/Views/Menu/ProjectBudgetMenuView.swift +0 -220
- package/Sources/Runic/Views/Menu/ProviderTabBarView.swift +0 -86
- package/Sources/Runic/Views/Menu/SubscriptionUtilizationChartMenuView.swift +0 -214
- package/Sources/Runic/Views/Menu/UsageBreakdownChartMenuView.swift +0 -398
- package/Sources/Runic/Views/Menu/UsageHeatmapMenuView.swift +0 -231
- package/Sources/Runic/Views/Menu/UsageTimelineChartMenuView.swift +0 -369
- package/Sources/Runic/Views/Menu/UsageWindowComparisonChartMenuView.swift +0 -191
- package/Sources/Runic/Views/Menu/WeeklyActivityChartMenuView.swift +0 -132
- package/Sources/Runic/Views/Performance/PerformanceDashboardView.swift +0 -621
- package/Sources/Runic/Views/Preferences/LiquidComponents.swift +0 -306
- 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 -418
- package/Sources/Runic/Views/Preferences/PreferencesAnalyticsPane.swift +0 -637
- 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 -321
- package/Sources/Runic/Views/Preferences/PreferencesDebugPane.swift +0 -469
- package/Sources/Runic/Views/Preferences/PreferencesGeneralPane.swift +0 -250
- package/Sources/Runic/Views/Preferences/PreferencesHelpPane.swift +0 -50
- package/Sources/Runic/Views/Preferences/PreferencesIntegrationsPane.swift +0 -572
- package/Sources/Runic/Views/Preferences/PreferencesPerformancePane.swift +0 -291
- package/Sources/Runic/Views/Preferences/PreferencesProvidersPane.swift +0 -3480
- package/Sources/Runic/Views/Preferences/PreferencesSelection.swift +0 -29
- package/Sources/Runic/Views/Preferences/PreferencesSyncPane.swift +0 -61
- package/Sources/Runic/Views/Preferences/PreferencesView.swift +0 -213
- package/Sources/Runic/Views/Rating/QualityRatingView.swift +0 -238
- package/Sources/Runic/Views/Team/TeamDashboardView.swift +0 -376
- package/Sources/Runic/Views/Team/TeamInviteSheet.swift +0 -175
- package/Sources/Runic/Views/Team/TeamManagementView.swift +0 -762
- package/Sources/Runic/Views/Team/TeamMemberRow.swift +0 -181
- package/Sources/RunicCLI/CLIEntry.swift +0 -983
- package/Sources/RunicCLI/CLIRenderer.swift +0 -87
- package/Sources/RunicCLI/Commands/EnhancedUsageCommand.swift +0 -588
- package/Sources/RunicCLI/Commands/ModelsCommand.swift +0 -363
- package/Sources/RunicCLI/Commands/ProjectsCommand.swift +0 -453
- package/Sources/RunicCLI/Commands/ResetCommand.swift +0 -430
- package/Sources/RunicCLI/Commands/UsageLedgerSourceFactory.swift +0 -167
- 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 -268
- package/Sources/RunicCore/CustomProviders/GenericProviderFetcher.swift +0 -631
- package/Sources/RunicCore/CustomProviders/ProviderTemplates.swift +0 -444
- 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 -370
- 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 -426
- package/Sources/RunicCore/Policy/UsagePolicyEngine.swift +0 -178
- package/Sources/RunicCore/ProjectBudgetStore.swift +0 -102
- package/Sources/RunicCore/ProviderCostSnapshot.swift +0 -29
- package/Sources/RunicCore/Providers/Antigravity/AntigravityProviderDescriptor.swift +0 -68
- 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 -164
- 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 -209
- package/Sources/RunicCore/Providers/Claude/ClaudeStatusProbe.swift +0 -654
- package/Sources/RunicCore/Providers/Claude/ClaudeUsageDataSource.swift +0 -30
- 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 -245
- package/Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift +0 -125
- package/Sources/RunicCore/Providers/Codex/CodexUsageDataSource.swift +0 -26
- package/Sources/RunicCore/Providers/Codex/CodexWebDashboardStrategy.swift +0 -183
- 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 -117
- package/Sources/RunicCore/Providers/Copilot/CopilotProviderDescriptor.swift +0 -100
- package/Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift +0 -293
- package/Sources/RunicCore/Providers/Copilot/CopilotVSCodeTokenReader.swift +0 -385
- package/Sources/RunicCore/Providers/Cursor/CursorProviderDescriptor.swift +0 -67
- 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 -67
- 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 -67
- package/Sources/RunicCore/Providers/Gemini/GeminiStatusProbe.swift +0 -839
- 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 -97
- 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 -216
- 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 -86
- package/Sources/RunicCore/Providers/Qwen/QwenSettingsReader.swift +0 -30
- package/Sources/RunicCore/Providers/Qwen/QwenUsageStats.swift +0 -328
- 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 -74
- package/Sources/RunicCore/Providers/Zai/ZaiSettingsReader.swift +0 -41
- package/Sources/RunicCore/Providers/Zai/ZaiUsageStats.swift +0 -745
- package/Sources/RunicCore/Sync/BackgroundSyncManager.swift +0 -384
- package/Sources/RunicCore/Sync/SyncConflictResolver.swift +0 -307
- package/Sources/RunicCore/Sync/SyncProtocol.swift +0 -287
- package/Sources/RunicCore/Sync/SyncRecord.swift +0 -402
- package/Sources/RunicCore/Sync/SyncUsageExample.swift +0 -288
- package/Sources/RunicCore/Sync/TeamSyncRecords.swift +0 -768
- package/Sources/RunicCore/Sync/iCloudSyncEngine.swift +0 -338
- package/Sources/RunicCore/Team/TeamModels.swift +0 -584
- package/Sources/RunicCore/Team/TeamShowbackExporter.swift +0 -495
- package/Sources/RunicCore/Team/TeamStore.swift +0 -809
- 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 -441
- package/Sources/RunicCore/UsageLedger/CodexUsageLogSource.swift +0 -502
- package/Sources/RunicCore/UsageLedger/LedgerCache.swift +0 -161
- package/Sources/RunicCore/UsageLedger/OTelGenAILedgerAdapter.swift +0 -550
- package/Sources/RunicCore/UsageLedger/UsageLedger.swift +0 -29
- package/Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift +0 -675
- package/Sources/RunicCore/UsageLedger/UsageLedgerInsightsAdvisor.swift +0 -209
- package/Sources/RunicCore/UsageLedger/UsageLedgerModels.swift +0 -417
- package/Sources/RunicCore/UsageLedger/UsageLedgerProjectIdentity.swift +0 -284
- 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 -48
- package/Tests/RunicTests/BrowserCookieOrderLabelTests.swift +0 -21
- package/Tests/RunicTests/CLIArgumentParsingTests.swift +0 -69
- package/Tests/RunicTests/CLICostTests.swift +0 -64
- package/Tests/RunicTests/CLIProviderSelectionTests.swift +0 -21
- package/Tests/RunicTests/CLISnapshotTests.swift +0 -71
- package/Tests/RunicTests/CLIWebFallbackTests.swift +0 -57
- package/Tests/RunicTests/ClaudeOAuthTests.swift +0 -163
- package/Tests/RunicTests/ClaudeResilienceTests.swift +0 -29
- package/Tests/RunicTests/ClaudeUsageTests.swift +0 -369
- package/Tests/RunicTests/CodexOAuthTests.swift +0 -121
- package/Tests/RunicTests/CodexUsageLogSourceTests.swift +0 -80
- package/Tests/RunicTests/CopilotTokenResolverTests.swift +0 -74
- package/Tests/RunicTests/CopilotVSCodeTokenReaderTests.swift +0 -74
- package/Tests/RunicTests/CostUsageDecodingTests.swift +0 -392
- package/Tests/RunicTests/CostUsagePricingTests.swift +0 -48
- package/Tests/RunicTests/CostUsageScannerTests.swift +0 -698
- package/Tests/RunicTests/CursorStatusProbeTests.swift +0 -322
- package/Tests/RunicTests/FactoryStatusProbeTests.swift +0 -67
- package/Tests/RunicTests/GeminiAPITestHelpers.swift +0 -94
- package/Tests/RunicTests/GeminiLoginAlertTests.swift +0 -27
- package/Tests/RunicTests/GeminiStatusProbeAPITests.swift +0 -283
- package/Tests/RunicTests/GeminiStatusProbePlanTests.swift +0 -279
- package/Tests/RunicTests/GeminiStatusProbeTests.swift +0 -232
- package/Tests/RunicTests/GeminiTestEnvironment.swift +0 -87
- package/Tests/RunicTests/GoogleWorkspaceStatusTests.swift +0 -72
- package/Tests/RunicTests/InstallOriginTests.swift +0 -17
- package/Tests/RunicTests/KeyboardShortcutsBundleTests.swift +0 -9
- package/Tests/RunicTests/LiveAccountTests.swift +0 -24
- package/Tests/RunicTests/LoadingPatternTests.swift +0 -34
- package/Tests/RunicTests/MenuCardModelTests.swift +0 -544
- package/Tests/RunicTests/MiniMaxCookieHeaderStoreTestSupport.swift +0 -11
- package/Tests/RunicTests/MiniMaxGroupIDStoreTestSupport.swift +0 -11
- package/Tests/RunicTests/MiniMaxParsingTests.swift +0 -67
- package/Tests/RunicTests/MiniMaxTokenStoreTestSupport.swift +0 -11
- package/Tests/RunicTests/OTelGenAILedgerAdapterTests.swift +0 -110
- package/Tests/RunicTests/OpenAIDashboardBrowserCookieImporterTests.swift +0 -16
- package/Tests/RunicTests/OpenAIDashboardFetcherCreditsWaitTests.swift +0 -74
- package/Tests/RunicTests/OpenAIDashboardOffscreenHostTests.swift +0 -26
- package/Tests/RunicTests/OpenAIDashboardParserTests.swift +0 -133
- package/Tests/RunicTests/OpenAIWebAccountSwitchTests.swift +0 -64
- package/Tests/RunicTests/OpenRouterTokenStoreTestSupport.swift +0 -131
- package/Tests/RunicTests/PathBuilderTests.swift +0 -236
- package/Tests/RunicTests/ProviderFetchPipelineTests.swift +0 -159
- package/Tests/RunicTests/ProviderIconResourcesTests.swift +0 -37
- package/Tests/RunicTests/ProviderMetadataStatusLinkTests.swift +0 -15
- package/Tests/RunicTests/ProviderRegistryTests.swift +0 -29
- package/Tests/RunicTests/ProviderSettingsDescriptorTests.swift +0 -236
- package/Tests/RunicTests/ProviderToggleStoreTests.swift +0 -50
- package/Tests/RunicTests/RunicTests.swift +0 -119
- package/Tests/RunicTests/SessionQuotaNotificationLogicTests.swift +0 -35
- package/Tests/RunicTests/SettingsStoreTests.swift +0 -265
- package/Tests/RunicTests/StatusItemAnimationTests.swift +0 -54
- package/Tests/RunicTests/StatusMenuTests.swift +0 -475
- package/Tests/RunicTests/StatusProbeTests.swift +0 -376
- package/Tests/RunicTests/SubprocessRunnerTests.swift +0 -18
- package/Tests/RunicTests/SubscriptionDetectionTests.swift +0 -64
- package/Tests/RunicTests/TTYCommandRunnerTests.swift +0 -147
- package/Tests/RunicTests/TTYIntegrationTests.swift +0 -41
- package/Tests/RunicTests/TeamShowbackExporterTests.swift +0 -157
- package/Tests/RunicTests/TextParsingTests.swift +0 -11
- package/Tests/RunicTests/UsageFormatterTests.swift +0 -111
- package/Tests/RunicTests/UsageLedgerAnomalyDetectionTests.swift +0 -170
- package/Tests/RunicTests/UsageLedgerForecastTests.swift +0 -211
- package/Tests/RunicTests/UsageLedgerInsightsAdvisorTests.swift +0 -81
- package/Tests/RunicTests/UsageLedgerProjectNameTests.swift +0 -168
- package/Tests/RunicTests/UsagePaceTests.swift +0 -76
- package/Tests/RunicTests/UsagePaceTextTests.swift +0 -108
- package/Tests/RunicTests/UsagePolicyEngineTests.swift +0 -89
- package/Tests/RunicTests/WidgetSnapshotTests.swift +0 -43
- package/Tests/RunicTests/ZaiProviderTests.swift +0 -59
- package/Tests/RunicTests/ZaiTokenStoreTestSupport.swift +0 -9
- package/TestsLinux/PlatformGatingTests.swift +0 -46
- package/appcast.xml +0 -104
- 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/runic.svg +0 -15
- package/version.env +0 -2
package/docs/codex.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Codex provider data sources: OpenAI web dashboard, Codex CLI RPC/PTY, credits, and local cost usage."
|
|
3
|
-
read_when:
|
|
4
|
-
- Debugging Codex usage/credits parsing
|
|
5
|
-
- Updating OpenAI dashboard scraping or cookie import
|
|
6
|
-
- Changing Codex CLI RPC/PTY behavior
|
|
7
|
-
- Reviewing local cost usage scanning
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Codex provider
|
|
11
|
-
|
|
12
|
-
Codex has four usage data paths (OAuth API, web dashboard, CLI RPC, CLI PTY) plus a local cost-usage scanner.
|
|
13
|
-
The OAuth API is the default app source when credentials are available; web access is optional for dashboard extras.
|
|
14
|
-
|
|
15
|
-
## Data sources + fallback order
|
|
16
|
-
|
|
17
|
-
### App default selection (debug menu disabled)
|
|
18
|
-
1) OAuth API (auth.json credentials).
|
|
19
|
-
2) CLI RPC, with CLI PTY fallback when needed.
|
|
20
|
-
3) If "Access OpenAI via web" is enabled, dashboard extras load in parallel and the source label becomes
|
|
21
|
-
`primary + openai-web`.
|
|
22
|
-
|
|
23
|
-
### CLI default selection (`--source auto`)
|
|
24
|
-
1) OpenAI web dashboard (when available).
|
|
25
|
-
2) Codex CLI RPC, with CLI PTY fallback when needed.
|
|
26
|
-
|
|
27
|
-
### OAuth API (preferred for the app)
|
|
28
|
-
- Reads OAuth tokens from `~/.codex/auth.json` (or `$CODEX_HOME/auth.json`).
|
|
29
|
-
- Refreshes access tokens when `last_refresh` is older than 8 days.
|
|
30
|
-
- Calls `GET https://chatgpt.com/backend-api/wham/usage` (default) with `Authorization: Bearer <token>`.
|
|
31
|
-
|
|
32
|
-
### OpenAI web dashboard (optional)
|
|
33
|
-
- Preferences → Usage → "Access OpenAI via web".
|
|
34
|
-
- URL: `https://chatgpt.com/codex/settings/usage`.
|
|
35
|
-
- Uses an off-screen `WKWebView` with a per-account `WKWebsiteDataStore`.
|
|
36
|
-
- Store key: deterministic UUID from the normalized email.
|
|
37
|
-
- WebKit store can hold multiple accounts concurrently.
|
|
38
|
-
- Cookie import (when WebKit store has no matching session or login required):
|
|
39
|
-
1) Safari: `~/Library/Cookies/Cookies.binarycookies`
|
|
40
|
-
2) Chrome/Chromium forks: `~/Library/Application Support/Google/Chrome/*/Cookies`
|
|
41
|
-
3) Firefox: `~/Library/Application Support/Firefox/Profiles/*/cookies.sqlite`
|
|
42
|
-
- Domains loaded: `chatgpt.com`, `openai.com`.
|
|
43
|
-
- No cookie-name filter; we import all matching domain cookies.
|
|
44
|
-
- Account match:
|
|
45
|
-
- Signed-in email extracted from `client-bootstrap` JSON in HTML (or `__NEXT_DATA__`).
|
|
46
|
-
- If Codex email is known and does not match, the web path is rejected.
|
|
47
|
-
- Web scrape payload (via `OpenAIDashboardScrapeScript` + `OpenAIDashboardParser`):
|
|
48
|
-
- Rate limits (5h + weekly) parsed from body text.
|
|
49
|
-
- Credits remaining parsed from body text.
|
|
50
|
-
- Code review remaining (%).
|
|
51
|
-
- Usage breakdown chart (Recharts bar data + legend colors).
|
|
52
|
-
- Credits usage history table rows.
|
|
53
|
-
- Credits purchase URL (best-effort).
|
|
54
|
-
- Errors surfaced:
|
|
55
|
-
- Login required or Cloudflare interstitial.
|
|
56
|
-
|
|
57
|
-
### Codex CLI RPC (default CLI fallback)
|
|
58
|
-
- Launches local RPC server: `codex -s read-only -a untrusted app-server`.
|
|
59
|
-
- JSON-RPC over stdin/stdout:
|
|
60
|
-
- `initialize` (client name/version)
|
|
61
|
-
- `account/read`
|
|
62
|
-
- `account/rateLimits/read`
|
|
63
|
-
- Provides:
|
|
64
|
-
- Usage windows (primary + secondary) with reset timestamps.
|
|
65
|
-
- Credits snapshot (balance, hasCredits, unlimited).
|
|
66
|
-
- Account identity (email + plan type) when available.
|
|
67
|
-
|
|
68
|
-
### Codex CLI PTY fallback (`/status`)
|
|
69
|
-
- Runs `codex` in a PTY via `TTYCommandRunner`.
|
|
70
|
-
- Sends `/status`, parses the rendered screen:
|
|
71
|
-
- `Credits:` line
|
|
72
|
-
- `5h limit` line → percent + reset text
|
|
73
|
-
- `Weekly limit` line → percent + reset text
|
|
74
|
-
- Retry once with a larger terminal size on parse failure.
|
|
75
|
-
- Detects update prompts and surfaces a "CLI update needed" error.
|
|
76
|
-
|
|
77
|
-
## Account identity resolution (for web matching)
|
|
78
|
-
1) Latest Codex usage snapshot (from RPC, if available).
|
|
79
|
-
2) `~/.codex/auth.json` (JWT claims: email + plan).
|
|
80
|
-
3) OpenAI dashboard signed-in email (cached).
|
|
81
|
-
4) Last imported browser cookie email (cached).
|
|
82
|
-
|
|
83
|
-
## Credits
|
|
84
|
-
- Web dashboard fills credits only when OAuth/CLI do not provide them.
|
|
85
|
-
- CLI RPC: `account/rateLimits/read` → credits balance.
|
|
86
|
-
- CLI PTY fallback: parse `Credits:` from `/status`.
|
|
87
|
-
|
|
88
|
-
## Cost usage (local log scan)
|
|
89
|
-
- Source files:
|
|
90
|
-
- `~/.codex/sessions/YYYY/MM/DD/*.jsonl`
|
|
91
|
-
- Or `$CODEX_HOME/sessions/...` if `CODEX_HOME` is set.
|
|
92
|
-
- Scanner:
|
|
93
|
-
- Parses `event_msg` token_count entries and `turn_context` model markers.
|
|
94
|
-
- Computes input/cached/output token deltas and per-model cost.
|
|
95
|
-
- Cache:
|
|
96
|
-
- `~/Library/Caches/Runic/cost-usage/codex-v1.json`
|
|
97
|
-
- Window: last 30 days (rolling), with a 60s minimum refresh interval.
|
|
98
|
-
|
|
99
|
-
## Key files
|
|
100
|
-
- Web: `Sources/RunicCore/OpenAIWeb/*`
|
|
101
|
-
- CLI RPC + PTY: `Sources/RunicCore/UsageFetcher.swift`,
|
|
102
|
-
`Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift`
|
|
103
|
-
- Cost usage: `Sources/RunicCore/CostUsageFetcher.swift`,
|
|
104
|
-
`Sources/RunicCore/Vendored/CostUsage/*`
|
package/docs/codexbar.png
DELETED
|
Binary file
|
package/docs/copilot.md
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Copilot provider data sources: GitHub device flow + Copilot internal usage API."
|
|
3
|
-
read_when:
|
|
4
|
-
- Debugging Copilot login or usage parsing
|
|
5
|
-
- Updating GitHub OAuth device flow behavior
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Copilot provider
|
|
9
|
-
|
|
10
|
-
Copilot uses GitHub OAuth device flow and the Copilot internal usage API. No browser cookies.
|
|
11
|
-
|
|
12
|
-
## Data sources + fallback order
|
|
13
|
-
|
|
14
|
-
1) **GitHub OAuth device flow** (user initiated)
|
|
15
|
-
- Device code request:
|
|
16
|
-
- `POST https://github.com/login/device/code`
|
|
17
|
-
- Token polling:
|
|
18
|
-
- `POST https://github.com/login/oauth/access_token`
|
|
19
|
-
- Scope: `read:user`.
|
|
20
|
-
- Token stored in Keychain:
|
|
21
|
-
- Service: `com.sriinnu.athena.Runic`
|
|
22
|
-
- Account: `copilot-api-token`
|
|
23
|
-
|
|
24
|
-
2) **Usage fetch**
|
|
25
|
-
- `GET https://api.github.com/copilot_internal/user`
|
|
26
|
-
- Headers:
|
|
27
|
-
- `Authorization: token <github_oauth_token>`
|
|
28
|
-
- `Accept: application/json`
|
|
29
|
-
- `Editor-Version: vscode/1.96.2`
|
|
30
|
-
- `Editor-Plugin-Version: copilot-chat/0.26.7`
|
|
31
|
-
- `User-Agent: GitHubCopilotChat/0.26.7`
|
|
32
|
-
- `X-Github-Api-Version: 2025-04-01`
|
|
33
|
-
|
|
34
|
-
## Snapshot mapping
|
|
35
|
-
- Primary: `quotaSnapshots.premiumInteractions` percent remaining → used percent.
|
|
36
|
-
- Secondary: `quotaSnapshots.chat` percent remaining → used percent.
|
|
37
|
-
- Reset dates are not provided by the API.
|
|
38
|
-
- Plan label from `copilotPlan`.
|
|
39
|
-
|
|
40
|
-
## Key files
|
|
41
|
-
- `Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift`
|
|
42
|
-
- `Sources/RunicCore/Providers/Copilot/CopilotDeviceFlow.swift`
|
|
43
|
-
- `Sources/Runic/Providers/Copilot/CopilotLoginFlow.swift`
|
|
44
|
-
- `Sources/Runic/CopilotTokenStore.swift`
|
package/docs/cursor.md
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Cursor provider data sources: browser cookies or stored session; usage + billing via cursor.com APIs."
|
|
3
|
-
read_when:
|
|
4
|
-
- Debugging Cursor usage parsing
|
|
5
|
-
- Updating Cursor cookie import or session storage
|
|
6
|
-
- Adjusting Cursor provider UI/menu behavior
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Cursor provider
|
|
10
|
-
|
|
11
|
-
Cursor is web-only. Usage is fetched via browser cookies or a stored WebKit session.
|
|
12
|
-
|
|
13
|
-
## Data sources + fallback order
|
|
14
|
-
|
|
15
|
-
1) **Browser cookie import** (preferred)
|
|
16
|
-
- Cookie order from provider metadata (default: Safari → Chrome → Firefox).
|
|
17
|
-
- Domain filters: `cursor.com`, `cursor.sh`.
|
|
18
|
-
- Cookie names required (any one counts):
|
|
19
|
-
- `WorkosCursorSessionToken`
|
|
20
|
-
- `__Secure-next-auth.session-token`
|
|
21
|
-
- `next-auth.session-token`
|
|
22
|
-
|
|
23
|
-
2) **Stored session cookies** (fallback)
|
|
24
|
-
- Captured by the "Add Account" WebKit login flow.
|
|
25
|
-
- Stored at: `~/Library/Application Support/Runic/cursor-session.json`.
|
|
26
|
-
|
|
27
|
-
## API endpoints
|
|
28
|
-
- `GET https://cursor.com/api/usage-summary`
|
|
29
|
-
- Plan usage (included), on-demand usage, billing cycle window.
|
|
30
|
-
- `GET https://cursor.com/api/auth/me`
|
|
31
|
-
- User email + name.
|
|
32
|
-
|
|
33
|
-
## Cookie file paths
|
|
34
|
-
- Safari: `~/Library/Cookies/Cookies.binarycookies`
|
|
35
|
-
- Chrome/Chromium forks: `~/Library/Application Support/Google/Chrome/*/Cookies`
|
|
36
|
-
- Firefox: `~/Library/Application Support/Firefox/Profiles/*/cookies.sqlite`
|
|
37
|
-
|
|
38
|
-
## Snapshot mapping
|
|
39
|
-
- Primary: plan usage percent (included plan).
|
|
40
|
-
- Secondary: on-demand usage percent (team on-demand preferred when present).
|
|
41
|
-
- Provider cost: on-demand usage USD (limit when known).
|
|
42
|
-
- Reset: billing cycle end date.
|
|
43
|
-
|
|
44
|
-
## Key files
|
|
45
|
-
- `Sources/RunicCore/Providers/Cursor/CursorStatusProbe.swift`
|
|
46
|
-
- `Sources/Runic/CursorLoginRunner.swift` (login flow)
|
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
# Runic Menubar Icon - Design Comparison Chart
|
|
2
|
-
|
|
3
|
-
**Quick Reference Guide for Decision Making**
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## At-a-Glance Comparison
|
|
8
|
-
|
|
9
|
-
| Feature | Option A: Infinity | Option B: Wave | Option C: Hybrid |
|
|
10
|
-
|---------|-------------------|----------------|------------------|
|
|
11
|
-
| **Primary Metaphor** | Eyes watching | Abstract flow | Balanced |
|
|
12
|
-
| **Provider Visibility** | ★★★★★ Center icon | ☆☆☆☆☆ None | ★★★☆☆ Badge |
|
|
13
|
-
| **Usage Data Display** | ★★☆☆☆ Color only | ★★★★★ 3 bars | ★★★☆☆ 1 bar |
|
|
14
|
-
| **Visual Simplicity** | ★★★★★ Clean | ★★☆☆☆ Complex | ★★★☆☆ Moderate |
|
|
15
|
-
| **Brand Identity** | ★★★★★ Unique | ★★★☆☆ Generic | ★★★★☆ Distinctive |
|
|
16
|
-
| **Scalability** | 18-32pt | 22-28pt | 20-26pt |
|
|
17
|
-
| **Implementation** | 8-12 hours | 0 hours (done) | 12-16 hours |
|
|
18
|
-
| **User Learning** | Low-Medium | Low | Medium |
|
|
19
|
-
| **Memorability** | Very High | Medium | High |
|
|
20
|
-
|
|
21
|
-
**Legend:** ★★★★★ Excellent | ★★★★☆ Good | ★★★☆☆ Acceptable | ★★☆☆☆ Poor | ★☆☆☆☆ Inadequate
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Detailed Comparison
|
|
26
|
-
|
|
27
|
-
### 1. Symbolism & Metaphor
|
|
28
|
-
|
|
29
|
-
#### Option A: Infinity Symbol
|
|
30
|
-
- **Concept:** "Eyes watching" your AI usage continuously
|
|
31
|
-
- **Meaning:** Infinity loops = constant monitoring, center icon = provider being watched
|
|
32
|
-
- **User Perception:** "Oh, Runic is watching my AI usage" (immediate understanding)
|
|
33
|
-
- **Score:** ★★★★★
|
|
34
|
-
|
|
35
|
-
#### Option B: Wave Logo
|
|
36
|
-
- **Concept:** Abstract wave/knot shape with usage bars
|
|
37
|
-
- **Meaning:** Data flow, interconnected systems (unclear)
|
|
38
|
-
- **User Perception:** "What does this icon represent?" (requires explanation)
|
|
39
|
-
- **Score:** ★★☆☆☆
|
|
40
|
-
|
|
41
|
-
#### Option C: Hybrid
|
|
42
|
-
- **Concept:** Infinity frame with functional usage display
|
|
43
|
-
- **Meaning:** Continuous monitoring + real-time data
|
|
44
|
-
- **User Perception:** "Runic watches and shows my usage" (balanced message)
|
|
45
|
-
- **Score:** ★★★★☆
|
|
46
|
-
|
|
47
|
-
**Winner:** Option A - Strongest conceptual foundation
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
### 2. Provider Identification
|
|
52
|
-
|
|
53
|
-
#### Option A: Infinity Symbol
|
|
54
|
-
- **Display:** 8×8pt icon in center gap between infinity loops
|
|
55
|
-
- **Visibility:** Excellent - clearly visible, centered, prominent
|
|
56
|
-
- **Scalability:** Works well at all recommended sizes
|
|
57
|
-
- **Examples:**
|
|
58
|
-
- Claude: Two vertical slits
|
|
59
|
-
- Codex: Square eyes
|
|
60
|
-
- Gemini: Diamond shape
|
|
61
|
-
- Cursor: Arrow pointer
|
|
62
|
-
- **Score:** ★★★★★
|
|
63
|
-
|
|
64
|
-
#### Option B: Wave Logo
|
|
65
|
-
- **Display:** None - no provider identification
|
|
66
|
-
- **Visibility:** N/A
|
|
67
|
-
- **Limitation:** User cannot tell which provider is active from icon alone
|
|
68
|
-
- **Score:** ☆☆☆☆☆
|
|
69
|
-
|
|
70
|
-
#### Option C: Hybrid
|
|
71
|
-
- **Display:** 6×6pt badge in corner
|
|
72
|
-
- **Visibility:** Small, may be hard to distinguish at 18-20pt
|
|
73
|
-
- **Trade-off:** Saves center space for usage bar
|
|
74
|
-
- **Score:** ★★★☆☆
|
|
75
|
-
|
|
76
|
-
**Winner:** Option A - Only design with prominent provider display
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
### 3. Usage Data Visibility
|
|
81
|
-
|
|
82
|
-
#### Option A: Infinity Symbol
|
|
83
|
-
- **Direct Display:** None - icon is purely symbolic
|
|
84
|
-
- **Data Method:** Color pressure mapping
|
|
85
|
-
- Teal (0-50% used)
|
|
86
|
-
- Orange (50-80% used)
|
|
87
|
-
- Red (80-100% used)
|
|
88
|
-
- **Pros:** Clean, uncluttered
|
|
89
|
-
- **Cons:** Requires user to learn color meaning, less precise
|
|
90
|
-
- **Alternative:** Tooltip on hover shows exact percentages
|
|
91
|
-
- **Score:** ★★☆☆☆
|
|
92
|
-
|
|
93
|
-
#### Option B: Wave Logo
|
|
94
|
-
- **Direct Display:** Three vertical bars showing session/weekly/credits
|
|
95
|
-
- **Data Precision:** Bar height = percentage (visual estimation)
|
|
96
|
-
- **Pros:** At-a-glance multiple metrics, no learning required
|
|
97
|
-
- **Cons:** Bars too small to read precisely at 22pt
|
|
98
|
-
- **Score:** ★★★★★
|
|
99
|
-
|
|
100
|
-
#### Option C: Hybrid
|
|
101
|
-
- **Direct Display:** Single consolidated bar in center
|
|
102
|
-
- **Data Precision:** Fill level = most critical metric (lowest remaining %)
|
|
103
|
-
- **Pros:** Simpler than three bars, more visible than color alone
|
|
104
|
-
- **Cons:** Loses session/weekly/credits breakdown
|
|
105
|
-
- **Score:** ★★★☆☆
|
|
106
|
-
|
|
107
|
-
**Winner:** Option B - Most data-rich design
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### 4. Visual Clarity at Small Sizes
|
|
112
|
-
|
|
113
|
-
#### Readability at 18pt (Minimum macOS menubar size)
|
|
114
|
-
|
|
115
|
-
| Design | Infinity Loops | Provider Icon | Usage Bars | Overall Clarity |
|
|
116
|
-
|--------|---------------|---------------|------------|-----------------|
|
|
117
|
-
| **Option A** | ★★★★★ Clear | ★★★★☆ Visible | N/A | ★★★★★ Excellent |
|
|
118
|
-
| **Option B** | ★★★☆☆ Fuzzy | N/A | ★★☆☆☆ Tiny | ★★☆☆☆ Marginal |
|
|
119
|
-
| **Option C** | ★★★★☆ Good | ★★☆☆☆ Small | ★★★☆☆ OK | ★★★☆☆ Acceptable |
|
|
120
|
-
|
|
121
|
-
**Test Results (Simulated):**
|
|
122
|
-
- **18pt:** Only Option A remains fully legible
|
|
123
|
-
- **22pt:** All options acceptable, Option A still clearest
|
|
124
|
-
- **26pt:** All options excellent, minimal difference
|
|
125
|
-
|
|
126
|
-
**Winner:** Option A - Best scalability down to 18pt
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
### 5. Brand Identity & Memorability
|
|
131
|
-
|
|
132
|
-
#### Option A: Infinity Symbol
|
|
133
|
-
- **Uniqueness:** Very high - no other menubar app uses infinity + provider icon
|
|
134
|
-
- **Memorability:** Instant recognition after seeing once
|
|
135
|
-
- **Brand Potential:** Strong - "Eyes on your AI" tagline
|
|
136
|
-
- **Differentiation:** Stands out from generic tech icons
|
|
137
|
-
- **Score:** ★★★★★
|
|
138
|
-
|
|
139
|
-
#### Option B: Wave Logo
|
|
140
|
-
- **Uniqueness:** Low - similar to activity monitors, network apps
|
|
141
|
-
- **Memorability:** Medium - abstract shapes blend together
|
|
142
|
-
- **Brand Potential:** Weak - no clear narrative
|
|
143
|
-
- **Differentiation:** Minimal - looks like "another monitoring app"
|
|
144
|
-
- **Score:** ★★☆☆☆
|
|
145
|
-
|
|
146
|
-
#### Option C: Hybrid
|
|
147
|
-
- **Uniqueness:** Medium-high - combination is unusual
|
|
148
|
-
- **Memorability:** Good - two distinct elements easier to remember
|
|
149
|
-
- **Brand Potential:** Moderate - can communicate dual purpose
|
|
150
|
-
- **Differentiation:** Good - more distinctive than Option B
|
|
151
|
-
- **Score:** ★★★★☆
|
|
152
|
-
|
|
153
|
-
**Winner:** Option A - Most memorable and unique
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
### 6. User Learning Curve
|
|
158
|
-
|
|
159
|
-
#### Option A: Infinity Symbol
|
|
160
|
-
- **Immediate Understanding:**
|
|
161
|
-
- ✓ Icon shape (infinity loops = eyes/monitoring)
|
|
162
|
-
- ✓ Provider icon (center = which service)
|
|
163
|
-
- ✗ Color meaning (requires brief explanation)
|
|
164
|
-
- **Learning Required:** Low-medium
|
|
165
|
-
- Tooltip: "Teal = safe, Orange = warning, Red = critical"
|
|
166
|
-
- One-time onboarding or tooltip
|
|
167
|
-
- **Time to Mastery:** <1 minute
|
|
168
|
-
|
|
169
|
-
#### Option B: Wave Logo
|
|
170
|
-
- **Immediate Understanding:**
|
|
171
|
-
- ✗ Icon meaning (wave shape unclear)
|
|
172
|
-
- ✓ Bar heights (taller = more usage)
|
|
173
|
-
- **Learning Required:** Low
|
|
174
|
-
- Bars are intuitive (more = more usage)
|
|
175
|
-
- No onboarding needed
|
|
176
|
-
- **Time to Mastery:** Immediate
|
|
177
|
-
|
|
178
|
-
#### Option C: Hybrid
|
|
179
|
-
- **Immediate Understanding:**
|
|
180
|
-
- ✓ Infinity outline (monitoring concept)
|
|
181
|
-
- ✓ Center bar (usage level)
|
|
182
|
-
- ✗ Badge meaning (small, may miss)
|
|
183
|
-
- **Learning Required:** Medium
|
|
184
|
-
- Need to explain badge = provider
|
|
185
|
-
- Bar fill direction (bottom-up)
|
|
186
|
-
- **Time to Mastery:** 2-3 minutes
|
|
187
|
-
|
|
188
|
-
**Winner:** Option B - Lowest learning curve (but sacrifices symbolism)
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
### 7. Implementation Complexity
|
|
193
|
-
|
|
194
|
-
#### Option A: Infinity Symbol
|
|
195
|
-
|
|
196
|
-
**New Code Required:**
|
|
197
|
-
- `RunicMenubarIconInfinity.svg` (new resource)
|
|
198
|
-
- `drawInfinityLogo()` function (~80 lines)
|
|
199
|
-
- Provider icon compositing logic
|
|
200
|
-
- Cache key updates
|
|
201
|
-
- Settings integration
|
|
202
|
-
|
|
203
|
-
**Estimated Time:** 8-12 hours
|
|
204
|
-
|
|
205
|
-
**Risk Level:** Low
|
|
206
|
-
- Familiar rendering patterns
|
|
207
|
-
- No new dependencies
|
|
208
|
-
- Straightforward testing
|
|
209
|
-
|
|
210
|
-
**Maintenance:** Low
|
|
211
|
-
- Self-contained rendering function
|
|
212
|
-
- No complex state management
|
|
213
|
-
|
|
214
|
-
#### Option B: Wave Logo
|
|
215
|
-
|
|
216
|
-
**New Code Required:** None (already implemented)
|
|
217
|
-
|
|
218
|
-
**Estimated Time:** 0 hours (refinements: 2-4 hours)
|
|
219
|
-
|
|
220
|
-
**Risk Level:** None
|
|
221
|
-
|
|
222
|
-
**Maintenance:** Current level (already in production)
|
|
223
|
-
|
|
224
|
-
#### Option C: Hybrid
|
|
225
|
-
|
|
226
|
-
**New Code Required:**
|
|
227
|
-
- `RunicMenubarIconInfinity.svg` (same as Option A)
|
|
228
|
-
- `drawHybridLogo()` function (~120 lines)
|
|
229
|
-
- Bar fill calculation
|
|
230
|
-
- Badge rendering
|
|
231
|
-
- Provider icon scaling for badge
|
|
232
|
-
- Cache key updates
|
|
233
|
-
- Settings integration
|
|
234
|
-
|
|
235
|
-
**Estimated Time:** 12-16 hours
|
|
236
|
-
|
|
237
|
-
**Risk Level:** Medium
|
|
238
|
-
- More complex layout logic
|
|
239
|
-
- Multiple elements to coordinate
|
|
240
|
-
- More edge cases to test
|
|
241
|
-
|
|
242
|
-
**Maintenance:** Medium
|
|
243
|
-
- Two rendering components to maintain
|
|
244
|
-
- More visual states to track
|
|
245
|
-
|
|
246
|
-
**Winner:** Option B - Zero implementation cost (but no forward progress)
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
### 8. Performance Characteristics
|
|
251
|
-
|
|
252
|
-
#### Cache Efficiency
|
|
253
|
-
|
|
254
|
-
| Design | Cache Keys | Cache Size | Hit Rate |
|
|
255
|
-
|--------|-----------|------------|----------|
|
|
256
|
-
| **Option A** | ~50 (providers × pressure × appearance) | Small | >85% |
|
|
257
|
-
| **Option B** | ~100 (usage combos) | Medium | ~80% |
|
|
258
|
-
| **Option C** | ~200 (providers × pressure × usage) | Large | ~70% |
|
|
259
|
-
|
|
260
|
-
#### Rendering Speed
|
|
261
|
-
|
|
262
|
-
| Design | First Render | Cached Render | Animation Frames |
|
|
263
|
-
|--------|-------------|---------------|------------------|
|
|
264
|
-
| **Option A** | 8-10ms | <0.5ms | 60 FPS |
|
|
265
|
-
| **Option B** | 6-8ms | <0.3ms | 60 FPS |
|
|
266
|
-
| **Option C** | 12-15ms | <0.7ms | 50-60 FPS |
|
|
267
|
-
|
|
268
|
-
**Winner:** Option B - Fastest (already optimized), but Option A is close second
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
### 9. Accessibility Considerations
|
|
273
|
-
|
|
274
|
-
#### VoiceOver Support
|
|
275
|
-
|
|
276
|
-
**Option A:**
|
|
277
|
-
- Describe as: "Infinity symbol representing monitoring, [Provider] in center, usage level [percentage]%"
|
|
278
|
-
- Clear semantic meaning
|
|
279
|
-
- Easy to verbalize
|
|
280
|
-
|
|
281
|
-
**Option B:**
|
|
282
|
-
- Describe as: "Usage bars showing session at [x]%, weekly at [y]%, credits at [z]%"
|
|
283
|
-
- More data to communicate
|
|
284
|
-
- Longer description
|
|
285
|
-
|
|
286
|
-
**Option C:**
|
|
287
|
-
- Describe as: "Infinity outline with [percentage]% usage bar, [Provider] badge"
|
|
288
|
-
- Moderate complexity
|
|
289
|
-
- Balanced description
|
|
290
|
-
|
|
291
|
-
#### High Contrast Mode
|
|
292
|
-
|
|
293
|
-
**All Options:** Support high contrast via template rendering
|
|
294
|
-
|
|
295
|
-
#### Reduced Motion
|
|
296
|
-
|
|
297
|
-
**All Options:** Can disable animations, static icons work well
|
|
298
|
-
|
|
299
|
-
**Winner:** Option A - Simplest to describe for accessibility
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
### 10. User Preference & Flexibility
|
|
304
|
-
|
|
305
|
-
#### Customization Options
|
|
306
|
-
|
|
307
|
-
**Option A:**
|
|
308
|
-
- Template vs. Vibrant rendering
|
|
309
|
-
- Color pressure mapping on/off
|
|
310
|
-
- Provider icon style (if multiple exist)
|
|
311
|
-
|
|
312
|
-
**Option B:**
|
|
313
|
-
- Template vs. Vibrant rendering
|
|
314
|
-
- Data mode (remaining vs. used)
|
|
315
|
-
- Bar animation on/off
|
|
316
|
-
|
|
317
|
-
**Option C:**
|
|
318
|
-
- Template vs. Vibrant rendering
|
|
319
|
-
- Which metric to show in center bar
|
|
320
|
-
- Badge position (corner options)
|
|
321
|
-
|
|
322
|
-
**Winner:** Tie - All offer similar customization potential
|
|
323
|
-
|
|
324
|
-
---
|
|
325
|
-
|
|
326
|
-
## Use Case Scenarios
|
|
327
|
-
|
|
328
|
-
### Scenario 1: Power User (Developer)
|
|
329
|
-
|
|
330
|
-
**Needs:**
|
|
331
|
-
- Quick identification of active provider
|
|
332
|
-
- At-a-glance usage monitoring
|
|
333
|
-
- Minimal menu clicks
|
|
334
|
-
|
|
335
|
-
**Best Option:** Option C (Hybrid)
|
|
336
|
-
- Provider badge for quick ID
|
|
337
|
-
- Center bar for instant usage check
|
|
338
|
-
- Balance of info and clarity
|
|
339
|
-
|
|
340
|
-
### Scenario 2: Casual User (Occasional AI user)
|
|
341
|
-
|
|
342
|
-
**Needs:**
|
|
343
|
-
- Understand what the app does
|
|
344
|
-
- Know when to worry about usage
|
|
345
|
-
- Simple, clean interface
|
|
346
|
-
|
|
347
|
-
**Best Option:** Option A (Infinity)
|
|
348
|
-
- Clear "monitoring" metaphor
|
|
349
|
-
- Color signals when to check (red = alert)
|
|
350
|
-
- Uncluttered, professional look
|
|
351
|
-
|
|
352
|
-
### Scenario 3: Multi-Provider User
|
|
353
|
-
|
|
354
|
-
**Needs:**
|
|
355
|
-
- See which provider is currently selected
|
|
356
|
-
- Track usage across different services
|
|
357
|
-
- Switch providers frequently
|
|
358
|
-
|
|
359
|
-
**Best Option:** Option A (Infinity)
|
|
360
|
-
- Large, clear provider icon in center
|
|
361
|
-
- Easy to tell at a glance which is active
|
|
362
|
-
- Provider icon changes when switching
|
|
363
|
-
|
|
364
|
-
### Scenario 4: Budget-Conscious User
|
|
365
|
-
|
|
366
|
-
**Needs:**
|
|
367
|
-
- Constantly monitor usage levels
|
|
368
|
-
- Precise percentage tracking
|
|
369
|
-
- Alert when nearing limits
|
|
370
|
-
|
|
371
|
-
**Best Option:** Option B (Wave) or Option C (Hybrid)
|
|
372
|
-
- Wave: Shows multiple metrics simultaneously
|
|
373
|
-
- Hybrid: Shows most critical metric prominently
|
|
374
|
-
- Both provide more data than Option A
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
## Decision Matrix
|
|
379
|
-
|
|
380
|
-
### Weighted Scoring (1-5 scale)
|
|
381
|
-
|
|
382
|
-
| Criterion | Weight | Option A | Option B | Option C |
|
|
383
|
-
|-----------|--------|----------|----------|----------|
|
|
384
|
-
| **Symbolism** | 20% | 5 | 2 | 4 |
|
|
385
|
-
| **Provider ID** | 15% | 5 | 0 | 3 |
|
|
386
|
-
| **Data Visibility** | 15% | 2 | 5 | 3 |
|
|
387
|
-
| **Visual Clarity** | 15% | 5 | 3 | 4 |
|
|
388
|
-
| **Brand Identity** | 10% | 5 | 2 | 4 |
|
|
389
|
-
| **Learning Curve** | 10% | 3 | 5 | 3 |
|
|
390
|
-
| **Implementation** | 5% | 3 | 5 | 2 |
|
|
391
|
-
| **Performance** | 5% | 4 | 5 | 3 |
|
|
392
|
-
| **Accessibility** | 5% | 5 | 3 | 4 |
|
|
393
|
-
|
|
394
|
-
### Weighted Totals
|
|
395
|
-
|
|
396
|
-
- **Option A (Infinity):** 4.10 / 5.00
|
|
397
|
-
- **Option B (Wave):** 3.25 / 5.00
|
|
398
|
-
- **Option C (Hybrid):** 3.55 / 5.00
|
|
399
|
-
|
|
400
|
-
**Winner:** Option A - Infinity Symbol + Provider Icon
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
## Final Recommendation
|
|
405
|
-
|
|
406
|
-
### Primary: Option A - Infinity Symbol + Provider Icon
|
|
407
|
-
|
|
408
|
-
**Choose if you value:**
|
|
409
|
-
- Strong brand identity and memorability
|
|
410
|
-
- Clear conceptual metaphor ("eyes watching")
|
|
411
|
-
- Provider identification
|
|
412
|
-
- Visual simplicity and scalability
|
|
413
|
-
- Long-term differentiation
|
|
414
|
-
|
|
415
|
-
**Accept trade-offs:**
|
|
416
|
-
- Less immediate usage data visibility
|
|
417
|
-
- Requires brief color meaning explanation
|
|
418
|
-
- 8-12 hours implementation time
|
|
419
|
-
|
|
420
|
-
### Secondary: Option C - Hybrid (if data visibility critical)
|
|
421
|
-
|
|
422
|
-
**Choose if you value:**
|
|
423
|
-
- Balance of symbolism and function
|
|
424
|
-
- At-a-glance usage data
|
|
425
|
-
- Provider identification (though smaller)
|
|
426
|
-
- Moderate complexity
|
|
427
|
-
|
|
428
|
-
**Accept trade-offs:**
|
|
429
|
-
- More complex design
|
|
430
|
-
- Longer implementation (12-16 hours)
|
|
431
|
-
- Potentially lower performance
|
|
432
|
-
|
|
433
|
-
### Not Recommended: Option B - Wave Logo
|
|
434
|
-
|
|
435
|
-
**Only choose if:**
|
|
436
|
-
- Absolutely no development time available
|
|
437
|
-
- Current users strongly resist change
|
|
438
|
-
- Data visibility is paramount over branding
|
|
439
|
-
|
|
440
|
-
**Reasoning:**
|
|
441
|
-
- Weak symbolism and brand identity
|
|
442
|
-
- No provider identification
|
|
443
|
-
- No forward progress on design evolution
|
|
444
|
-
|
|
445
|
-
---
|
|
446
|
-
|
|
447
|
-
## Next Steps
|
|
448
|
-
|
|
449
|
-
1. **Review this comparison with stakeholders**
|
|
450
|
-
2. **Create user survey (optional):**
|
|
451
|
-
- Show all three mockups
|
|
452
|
-
- Ask: "Which icon best represents AI usage monitoring?"
|
|
453
|
-
- Collect preference data
|
|
454
|
-
3. **Make final decision**
|
|
455
|
-
4. **Proceed to implementation using ImplementationGuide.md**
|
|
456
|
-
5. **Beta test with selected users**
|
|
457
|
-
6. **Iterate based on feedback**
|
|
458
|
-
7. **Full rollout with preference option**
|
|
459
|
-
|
|
460
|
-
---
|
|
461
|
-
|
|
462
|
-
## Appendix: User Feedback Questions
|
|
463
|
-
|
|
464
|
-
### Survey Template
|
|
465
|
-
|
|
466
|
-
**Question 1:** Which icon design do you prefer?
|
|
467
|
-
- [ ] Option A: Infinity Symbol with Provider Icon
|
|
468
|
-
- [ ] Option B: Wave Logo with Usage Bars
|
|
469
|
-
- [ ] Option C: Hybrid (Infinity Outline + Bar)
|
|
470
|
-
|
|
471
|
-
**Question 2:** What does the infinity symbol design represent to you?
|
|
472
|
-
- [ ] Monitoring/watching
|
|
473
|
-
- [ ] Continuous operation
|
|
474
|
-
- [ ] Unlimited usage
|
|
475
|
-
- [ ] Other: ___________
|
|
476
|
-
|
|
477
|
-
**Question 3:** How important is seeing usage data directly in the menubar icon?
|
|
478
|
-
- [ ] Critical - I need to see it at all times
|
|
479
|
-
- [ ] Important - I glance at it occasionally
|
|
480
|
-
- [ ] Minor - I usually click for details
|
|
481
|
-
- [ ] Not important - I only check when needed
|
|
482
|
-
|
|
483
|
-
**Question 4:** How important is identifying the active provider from the icon?
|
|
484
|
-
- [ ] Critical - I switch providers often
|
|
485
|
-
- [ ] Important - I use multiple providers
|
|
486
|
-
- [ ] Minor - I mostly use one provider
|
|
487
|
-
- [ ] Not important - I know which I'm using
|
|
488
|
-
|
|
489
|
-
**Question 5:** Rate the visual clarity of each design (1-5):
|
|
490
|
-
- Option A: ☐☐☐☐☐
|
|
491
|
-
- Option B: ☐☐☐☐☐
|
|
492
|
-
- Option C: ☐☐☐☐☐
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## Summary
|
|
497
|
-
|
|
498
|
-
After comprehensive analysis across 10 criteria, **Option A (Infinity Symbol + Provider Icon)** emerges as the strongest design choice for Runic's menubar icon:
|
|
499
|
-
|
|
500
|
-
- **Strongest brand identity** (5/5)
|
|
501
|
-
- **Best provider identification** (5/5)
|
|
502
|
-
- **Excellent scalability** (5/5)
|
|
503
|
-
- **Clear conceptual metaphor** (5/5)
|
|
504
|
-
- **Acceptable trade-offs** on data visibility
|
|
505
|
-
|
|
506
|
-
While Option B (current wave) requires no implementation effort, it offers the weakest symbolism and no provider identification, making it unsuitable for long-term brand growth.
|
|
507
|
-
|
|
508
|
-
Option C (hybrid) provides a balanced alternative if user testing reveals that immediate data visibility is more critical than anticipated, though it requires the most implementation effort.
|
|
509
|
-
|
|
510
|
-
**Recommended Action:** Proceed with Option A implementation using the provided ImplementationGuide.md, while maintaining Option B as a user preference for those who prefer data-rich visualization.
|