@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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<path d="M50 12L82 30V70L50 88L18 70V30L50 12Z" stroke="black" stroke-width="8"/>
|
|
3
|
-
<path d="M50 28L68 38V58L50 68L32 58V38L50 28Z" fill="black"/>
|
|
4
|
-
<path d="M50 12V32" stroke="black" stroke-width="8" stroke-linecap="round"/>
|
|
5
|
-
<path d="M18 30L32 38" stroke="black" stroke-width="8" stroke-linecap="round"/>
|
|
6
|
-
<path d="M82 30L68 38" stroke="black" stroke-width="8" stroke-linecap="round"/>
|
|
7
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!-- created by svgstack.com | Attribution is required. --><svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M32.4286 81.1404L52.8708 69.6696L53.2129 68.6699L52.8708 68.1174H51.8711L48.4509 67.9069L36.7696 67.5912L26.6406 67.1702L16.8273 66.6441L14.3543 66.1179L12.0391 63.066L12.2758 61.5401L14.3543 60.1457L17.3272 60.4088L23.9045 60.8561L33.7704 61.5401L40.9265 61.961L51.5291 63.066H53.2129L53.4496 62.382L52.8708 61.961L52.4236 61.5401L42.2156 54.6208L31.1658 47.3069L25.3778 43.0974L22.247 40.9664L20.6685 38.9669L19.9844 34.5995L22.8258 31.4688L26.6406 31.7318L27.6141 31.9949L31.4815 34.9679L39.7426 41.361L50.5293 49.3064L52.1079 50.6218L52.7393 50.1746L52.8182 49.8588L52.1079 48.6749L46.2409 38.0723L39.9794 27.2856L37.1906 22.8131L36.4539 20.1295C36.1908 19.0245 36.0067 18.1037 36.0067 16.9724L39.2427 12.5788L41.0317 12L45.3464 12.5788L47.1618 14.1573L49.8453 20.2874L54.1863 29.9428L60.9214 43.0711L62.8946 46.9648L63.947 50.5692L64.3416 51.6742H65.0257V51.0428L65.5781 43.6499L66.6042 34.5732L67.604 22.892L67.946 19.6033L69.5771 15.657L72.8132 13.5259L75.3388 14.7361L77.4173 17.7091L77.1279 19.6296L75.8913 27.6539L73.4709 40.2297L71.8923 48.6486H72.8132L73.8655 47.5963L78.1276 41.9398L85.2837 32.9947L88.4408 29.443L92.1241 25.5229L94.4919 23.6549H98.9644L102.253 28.5484L100.78 33.5998L96.1757 39.4404L92.3608 44.3865L86.8885 51.7531L83.4684 57.6463L83.7841 58.1199L84.5996 58.041L96.9649 55.4101L103.647 54.1999L111.619 52.8318L115.223 54.5156L115.618 56.2257L114.197 59.7248L105.673 61.8295L95.6758 63.829L80.7848 67.3544L80.6007 67.486L80.8111 67.7491L87.52 68.3805L90.3877 68.5383H97.4122L110.488 69.5118L113.908 71.7743L115.96 74.5368L115.618 76.6415L110.356 79.3251L103.253 77.6413L86.6781 73.6949L80.9953 72.2742H80.206V72.7478L84.9417 77.3782L93.6237 85.2183L104.489 95.321L105.042 97.8204L103.647 99.7936L102.174 99.5831L92.6239 92.4007L88.9407 89.1647L80.6007 82.1401H80.0482V82.8768L81.9687 85.6919L92.1241 100.951L92.6502 105.634L91.9136 107.16L89.2827 108.081L86.3887 107.555L80.4428 99.2148L74.3128 89.8224L69.3667 81.4035L68.7616 81.7455L65.8412 113.185L64.4732 114.79L61.3161 116L58.6852 114L57.2908 110.764L58.6852 104.371L60.3689 96.0314L61.737 89.4015L62.9735 81.1667L63.7102 78.4306L63.6576 78.2464L63.0525 78.3253L56.8435 86.8495L47.3985 99.6094L39.9267 107.607L38.1377 108.318L35.0332 106.713L35.3226 103.845L37.059 101.293L47.3985 88.1386L53.6338 79.9828L57.6591 75.2735L57.6328 74.5894H57.396L29.9293 92.427L25.0358 93.0584L22.931 91.0853L23.1941 87.8492L24.1939 86.7969L32.4549 81.1141L32.4286 81.1404Z" fill="#D97757"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!-- created by svgstack.com | Attribution is required. --><svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M109.128 54.5666C110.018 51.9282 110.472 49.1658 110.472 46.3851C110.472 41.784 109.23 37.2659 106.874 33.2954C102.139 25.1636 93.3561 20.1432 83.8507 20.1432C81.9781 20.1432 80.1107 20.3383 78.2795 20.7253C75.8166 17.9874 72.7935 15.7957 69.4094 14.2947C66.0254 12.7938 62.3573 12.0177 58.647 12.0176H58.4804L58.4179 12.0179C46.9051 12.0179 36.6952 19.3479 33.1561 30.1539C29.4926 30.8943 26.0317 32.3983 23.005 34.5652C19.9783 36.7322 17.4557 39.5121 15.606 42.7189C13.2569 46.7133 12.019 51.2492 12.0176 55.8674C12.0185 62.3578 14.4602 68.617 18.87 73.4329C17.9799 76.0712 17.5259 78.8337 17.5255 81.6143C17.5259 86.2155 18.768 90.7335 21.1242 94.7041C23.9262 99.5176 28.2051 103.329 33.344 105.588C38.4828 107.847 44.2161 108.437 49.717 107.274C52.1802 110.012 55.2036 112.203 58.5879 113.704C61.9722 115.205 65.6405 115.982 69.3509 115.982H69.5176L69.5853 115.982C81.1043 115.982 91.3108 108.651 94.85 97.8354C98.5135 97.0947 101.974 95.5906 105.001 93.4236C108.028 91.2566 110.551 88.4768 112.4 85.2701C114.747 81.2791 115.983 76.747 115.982 72.1331C115.981 65.6428 113.539 59.3838 109.129 54.568L109.128 54.5666ZM69.5242 109.185H69.497C64.8877 109.184 60.4248 107.588 56.8843 104.676C57.0945 104.564 57.3023 104.448 57.5074 104.328L78.487 92.3706C79.0106 92.0766 79.4459 91.651 79.7488 91.1372C80.0517 90.6234 80.2113 90.0396 80.2115 89.4452V60.2418L89.0791 65.2939C89.1256 65.3168 89.1657 65.3506 89.1958 65.3925C89.2259 65.4343 89.2451 65.4829 89.2516 65.5338V89.7018C89.2394 100.447 80.4149 109.163 69.5242 109.185ZM27.0997 91.3068C25.3668 88.3503 24.4538 84.9956 24.4526 81.5802C24.4526 80.4663 24.5512 79.3495 24.7432 78.2519C24.8992 78.3441 25.1714 78.5081 25.3667 78.6188L46.3463 90.5758C46.8693 90.8771 47.4641 91.0358 48.0698 91.0357C48.6755 91.0355 49.2702 90.8766 49.7931 90.5751L75.407 75.9823V86.0867L75.4073 86.1041C75.4073 86.1528 75.3959 86.2008 75.3738 86.2443C75.3518 86.2878 75.3198 86.3257 75.2804 86.355L54.072 98.4371C51.0711 100.141 47.6696 101.039 44.2072 101.04C40.7412 101.039 37.3361 100.14 34.3335 98.4311C31.3309 96.7227 28.8363 94.2654 27.0997 91.3057V91.3068ZM21.5804 46.1162C23.8846 42.1672 27.5229 39.1435 31.8586 37.5743C31.8586 37.7525 31.8483 38.0683 31.8483 38.2875V62.2018L31.848 62.2214C31.8481 62.8152 32.0074 63.3984 32.3099 63.9118C32.6123 64.4251 33.047 64.8504 33.5699 65.1443L59.1837 79.7349L50.3166 84.787C50.2728 84.8154 50.2226 84.8328 50.1705 84.8374C50.1183 84.8421 50.0657 84.834 50.0175 84.8138L28.8069 72.7215C25.8085 71.0076 23.3192 68.5462 21.5886 65.5841C19.8581 62.6219 18.9469 59.2629 18.9465 55.8438C18.9479 52.4301 19.8564 49.0764 21.5815 46.1173L21.5804 46.1162ZM94.4362 62.8446L68.8223 48.2522L77.6899 43.202C77.7336 43.1735 77.7838 43.1561 77.836 43.1514C77.8882 43.1468 77.9407 43.1549 77.9889 43.1751L99.1992 55.2573C102.2 56.9685 104.692 59.4285 106.425 62.3904C108.157 65.3523 109.07 68.7118 109.071 72.1317C109.071 80.2943 103.908 87.5981 96.1467 90.4172V65.7879C96.1478 65.7788 96.1478 65.7693 96.1478 65.7603C96.1476 65.1687 95.9893 64.5876 95.6888 64.0757C95.3882 63.5637 94.9562 63.1391 94.4362 62.8446ZM103.262 49.7378C103.056 49.6131 102.848 49.4909 102.639 49.3712L81.6594 37.4139C81.1363 37.1131 80.5418 36.9546 79.9364 36.9543C79.331 36.9546 78.7364 37.1131 78.2133 37.4139L52.5991 52.0066V41.9022L52.5988 41.8848C52.5988 41.7861 52.6462 41.6931 52.726 41.634L73.9344 29.5619C76.9343 27.8555 80.3361 26.9572 83.7989 26.957C94.7036 26.957 103.547 35.6825 103.547 46.4421C103.546 47.5463 103.451 48.6484 103.262 49.7367V49.7378ZM47.778 67.7471L38.9086 62.6951C38.8621 62.6722 38.822 62.6383 38.7919 62.5964C38.7618 62.5546 38.7426 62.5061 38.7361 62.4552V38.2868C38.7409 27.533 47.5841 18.8147 58.4841 18.8147C63.1005 18.8157 67.571 20.4114 71.1196 23.3249C70.9599 23.4109 70.6815 23.5626 70.4964 23.6733L49.5168 35.6303C48.9934 35.9241 48.5581 36.3495 48.2553 36.8631C47.9524 37.3768 47.7928 37.9604 47.7927 38.5546V38.5739L47.778 67.7471ZM52.5951 57.4997L64.003 50.9983L75.411 57.4953V70.4936L64.003 76.991L52.5951 70.4936V57.4997Z" fill="black"/></svg>
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M82 24H48C33.6406 24 22 35.6406 22 50C22 64.3594 33.6406 76 48 76H82V64H48C40.268 64 34 57.732 34 50C34 42.268 40.268 36 48 36H82V24Z" fill="black"/>
|
|
3
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!-- created by svgstack.com | Attribution is required. --><svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M35.4165 60.9828C35.4165 58.7374 37.2368 56.9171 39.4822 56.9171C41.7277 56.9171 43.548 58.7374 43.548 60.9828V68.4763C43.548 70.7217 41.7277 72.5421 39.4822 72.5421C37.2368 72.5421 35.4165 70.7217 35.4165 68.4763V60.9828Z" fill="black"/><path d="M60.3157 56.9171C58.0703 56.9171 56.25 58.7374 56.25 60.9828V68.4763C56.25 70.7217 58.0703 72.5421 60.3157 72.5421C62.5612 72.5421 64.3815 70.7217 64.3815 68.4763V60.9828C64.3815 58.7374 62.5612 56.9171 60.3157 56.9171Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M100 68.3317V57.1255C100 55.6505 99.5312 54.2317 98.6562 53.0442L95.6125 48.9192C93.9831 46.6994 91.5695 46.1255 88.9813 46.1255C88.0063 35.0005 85.6938 27.063 80.1875 21.2505C69.6875 10.1255 55.75 9.00049 50 9.00049C44.25 9.00049 30.3125 10.1255 19.8125 21.2505C14.3 27.063 11.9938 35.0005 11.0188 46.1255C8.43567 46.1255 6.0114 46.7094 4.38126 48.9192L1.33751 53.038C0.468762 54.2255 0 55.6505 0 57.1255V68.3317C0.00282292 69.7787 0.720054 71.1893 1.88751 72.0442C11.6445 79.2062 30.8337 90.2505 50 90.2505C67.3241 90.2505 84.3302 82.1341 98.1125 72.0442C99.28 71.1893 99.9969 69.7787 100 68.3317ZM76.5625 47.7692C78.7188 48.4778 80.7915 49.4793 80.925 52.0317H80.9188C81.2617 59.2193 81.3615 66.4433 81.2375 73.638C81.2278 75.0359 80.3852 76.3345 79.1125 76.913C68.775 81.6255 58.9938 84.0005 50.0063 84.0005C41.0063 84.0005 31.225 81.6255 20.8813 76.913C19.6085 76.3345 18.7656 75.0359 18.7563 73.638C18.7915 71.3115 18.8015 68.9863 18.8115 66.6617L18.8126 66.4161C18.8325 61.6213 18.8524 56.8288 19.0813 52.0317C19.2179 49.4939 21.2819 48.4755 23.4313 47.7692C25.7033 49.2019 28.4867 49.7567 31.1438 49.7567C33.9688 49.7567 39.2438 49.0817 43.6188 44.7067C44.725 43.6067 45.4813 41.8817 45.9938 39.9692C47.45 39.8255 48.8188 39.7567 50.0063 39.7567C51.3422 39.7632 52.6771 39.834 54.0063 39.9692C54.5188 41.8817 55.275 43.6067 56.3813 44.7067C60.7625 49.0817 66.0312 49.7567 68.8563 49.7567C71.5127 49.7567 74.2888 49.1957 76.5625 47.7692ZM29.3125 44.813C25.875 44.813 22.6875 43.688 21 42.0005C18.6875 39.6255 17.8125 28.3755 21.875 23.938C23.75 21.938 27.4375 20.5005 31.8125 20.063C35.9375 19.688 39.625 20.313 41.25 21.7505C42.75 23.0005 43.75 25.938 43.875 29.5005C44 33.938 42.875 38.313 41.0625 40.063C36.9375 44.2505 31.9375 44.813 29.3125 44.813ZM46.75 33.313C46.6875 32.5005 46.625 31.7505 46.5 31.063C47.8125 30.938 49 30.8755 50 30.8755C51 30.8755 52.1875 30.938 53.5 31.063C53.375 31.7505 53.3125 32.5006 53.25 33.3131C53.25 33.8756 53.25 34.438 53.3125 35.063C52.0625 34.938 50.9999 34.938 50 34.938C49 34.938 47.9375 34.938 46.6875 35.063C46.75 34.438 46.75 33.8755 46.75 33.313ZM58.9375 40.063C57.125 38.313 56 33.938 56.125 29.5005C56.25 25.938 57.25 23.0005 58.75 21.7505C60.375 20.313 64.0625 19.688 68.1875 20.063C72.5625 20.5005 76.25 21.938 78.125 23.938C82.1875 28.3755 81.3125 39.6255 79 42.0005C77.3125 43.688 74.125 44.813 70.6875 44.813C68.0625 44.813 63.0625 44.2505 58.9375 40.063Z" fill="black"/></svg>
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M84.0704 28.9353L51.9066 10.4454C50.8738 9.85153 49.5994 9.85153 48.5666 10.4454L16.4043 28.9353C15.536 29.4345 15 30.3576 15 31.3575V68.6425C15 69.6424 15.536 70.5655 16.4043 71.0647L48.5681 89.5546C49.6009 90.1485 50.8753 90.1485 51.9081 89.5546L84.0719 71.0647C84.9402 70.5655 85.4762 69.6424 85.4762 68.6425V31.3575C85.4762 30.3576 84.9402 29.4345 84.0719 28.9353H84.0704ZM82.0501 32.8519L51.0006 86.4003C50.7907 86.7611 50.2366 86.6138 50.2366 86.1958V51.1329C50.2366 50.4322 49.8606 49.7842 49.2506 49.4324L18.7553 31.9017C18.3929 31.6927 18.5409 31.141 18.9606 31.141H81.0595C81.9414 31.141 82.4925 32.0927 82.0516 32.8534H82.0501V32.8519Z" fill="white"/>
|
|
3
|
-
</svg>
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M67.8515 23.9286C67.6213 23.8754 67.4147 23.7483 67.2635 23.5667C67.1123 23.385 67.0247 23.1589 67.0141 22.9227C67.0083 22.7678 67.0368 22.6135 67.0978 22.471C69.2044 17.4703 70.1341 13.4692 68.6328 11.7944C64.6604 7.35158 48.7249 16.1873 43.643 19.1813C43.507 19.2603 43.3558 19.3098 43.1993 19.3266C43.0429 19.3435 42.8846 19.3272 42.7348 19.279C42.585 19.2308 42.4471 19.1516 42.3298 19.0466C42.2126 18.9416 42.1188 18.8132 42.0544 18.6696C39.919 13.6801 37.6739 10.2082 35.3976 10.0585C29.366 9.65537 24.5026 26.8938 23.0799 32.5123C23.0423 32.6645 22.9714 32.8064 22.8723 32.9279C22.7733 33.0494 22.6486 33.1474 22.5071 33.2149C22.3649 33.2852 22.2094 33.3245 22.0508 33.3303C21.8923 33.3361 21.7343 33.3083 21.5873 33.2486C16.4593 31.1932 12.3547 30.2871 10.6387 31.751C6.0823 35.6248 15.1427 51.166 18.2115 56.1218C18.3338 56.3213 18.3866 56.5557 18.3618 56.7885C18.3369 57.0212 18.2359 57.2392 18.0742 57.4084C17.9651 57.522 17.8333 57.6112 17.6874 57.6705C12.5718 59.7534 9.01383 61.9424 8.85658 64.1626C8.446 70.0443 26.1213 74.7867 31.8845 76.1745C32.0392 76.2127 32.1794 76.2805 32.3051 76.3779C32.4275 76.4739 32.5279 76.5952 32.5994 76.7334C32.6709 76.8717 32.7118 77.0236 32.7194 77.1791C32.7253 77.334 32.6967 77.4883 32.6358 77.6309C30.5292 82.6316 29.5994 86.6339 31.1007 88.3074C35.0731 92.7515 51.0112 83.9157 56.0917 80.9231C56.2975 80.8022 56.5364 80.75 56.7738 80.774C57.0112 80.798 57.2347 80.897 57.4121 81.0566C57.5267 81.1622 57.6181 81.2906 57.6804 81.4335C59.8157 86.4217 62.0596 89.8936 64.3372 90.0446C70.3687 90.4465 75.2322 73.2092 76.6524 67.5895C76.6911 67.4385 76.7627 67.2979 76.862 67.1777C76.9619 67.0551 77.0871 66.9554 77.229 66.8856C77.371 66.8159 77.5263 66.7775 77.6845 66.7733C77.8429 66.7678 78.0007 66.7959 78.1475 66.8557C83.2754 68.9112 87.3788 69.816 89.0961 68.3533C93.6525 64.4783 84.5908 48.9358 81.5208 43.9801C81.399 43.7805 81.3465 43.5463 81.3716 43.3138C81.3966 43.0814 81.4978 42.8637 81.6593 42.6946C81.7685 42.5811 81.9003 42.4918 82.0462 42.4326C87.1629 40.3484 90.7222 38.1594 90.8757 35.9393C91.2888 30.0575 73.6123 25.3151 67.8503 23.9299M60.9289 18.2915C62.0896 20.3182 56.1142 33.8239 51.6689 43.27C51.593 43.4283 51.4712 43.56 51.3194 43.6481C51.1655 43.7368 50.9885 43.7772 50.8114 43.7641C50.6343 43.751 50.4652 43.6849 50.326 43.5745C50.1899 43.4646 50.0899 43.3163 50.039 43.1489C48.2431 37.0076 46.1927 29.7904 43.9975 23.6653C43.9112 23.4249 43.9156 23.1613 44.01 22.924C44.1055 22.685 44.2829 22.4877 44.5104 22.3674C49.9916 19.4471 59.3715 15.5708 60.9289 18.2915ZM34.6613 19.9638C36.9488 20.5965 42.5161 34.2657 46.2226 44.01C46.2845 44.1733 46.2937 44.3518 46.2489 44.5206C46.2041 44.6893 46.1077 44.8399 45.973 44.951C45.8369 45.065 45.6696 45.1355 45.4929 45.1533C45.3163 45.1711 45.1383 45.1354 44.9821 45.0508C39.2551 41.9496 32.5771 38.2568 26.583 35.4388C26.3498 35.3293 26.1631 35.1404 26.0564 34.9059C25.9507 34.6743 25.933 34.4121 26.0065 34.1684C27.7711 28.329 31.5862 19.1151 34.6613 19.9638ZM17.2992 39.2577C19.3759 38.127 33.2261 43.9539 42.9105 48.2869C43.0727 48.3593 43.2087 48.4791 43.2986 48.6288C43.3885 48.778 43.4296 48.9514 43.4162 49.125C43.4028 49.2987 43.3355 49.4637 43.2237 49.5973C43.1099 49.733 42.9576 49.8309 42.7869 49.8781C36.4908 51.629 29.089 53.6295 22.8066 55.7698C22.5603 55.8535 22.2925 55.8491 22.0491 55.7573C21.808 55.6665 21.6066 55.4937 21.48 55.2694C18.4911 49.923 14.5087 40.7765 17.2992 39.2577ZM19.014 64.8752C19.6617 62.6438 33.6803 57.2125 43.6717 53.5996C43.8386 53.5406 44.0192 53.5323 44.1909 53.5755C44.3625 53.6188 44.5175 53.7119 44.6364 53.8429C44.7518 53.9734 44.8235 54.1366 44.8416 54.3097C44.8597 54.4829 44.8233 54.6574 44.7375 54.8089C41.5577 60.3936 37.7713 66.9069 34.8809 72.7512C34.7662 72.9824 34.5728 73.1651 34.3355 73.2666C34.0963 73.3703 33.8285 73.3875 33.578 73.3153C27.5914 71.6056 18.1404 67.8741 19.014 64.8752ZM38.8008 81.8079C37.6402 79.7824 43.6168 66.2754 48.0609 56.8306C48.1368 56.6723 48.2585 56.5406 48.4104 56.4525C48.5645 56.3646 48.7413 56.3247 48.9183 56.3378C49.0952 56.3509 49.2643 56.4165 49.4038 56.5261C49.5397 56.6357 49.6397 56.7835 49.6908 56.9504C51.4867 63.0905 53.5384 70.3102 55.7323 76.4353C55.8183 76.6753 55.8138 76.9384 55.7198 77.1753C55.6237 77.4141 55.4459 77.6109 55.2181 77.7307C49.7382 80.6448 40.3571 84.5285 38.8071 81.8079H38.8008ZM65.0698 80.1356C62.7785 79.5041 57.2112 65.8324 53.5059 56.0881C53.4438 55.9246 53.4344 55.7458 53.4792 55.5768C53.524 55.4078 53.6206 55.2571 53.7555 55.1458C53.892 55.0319 54.0596 54.9618 54.2366 54.9444C54.4135 54.927 54.5916 54.9633 54.7477 55.0485C60.4722 58.1485 67.1527 61.8438 73.1455 64.6618C73.3814 64.7716 73.5686 64.9613 73.6734 65.1934C73.779 65.4255 73.7963 65.6882 73.7221 65.9322C71.9587 71.7803 68.1436 80.9867 65.0698 80.1356ZM82.4318 60.8392C80.3539 61.9711 66.505 56.143 56.8193 51.8087C56.6586 51.7369 56.5233 51.6181 56.4312 51.468C56.341 51.3188 56.2997 51.145 56.3131 50.9712C56.3266 50.7973 56.394 50.632 56.5061 50.4983C56.6198 50.3626 56.7722 50.2647 56.9429 50.2175C63.2402 48.4678 70.6396 46.4673 76.9219 44.327C77.169 44.2427 77.4378 44.2471 77.682 44.3395C77.9237 44.4304 78.1256 44.6036 78.2523 44.8287C81.2387 50.1726 85.2211 59.3216 82.4318 60.8392ZM80.7183 35.2229C80.0681 37.4568 66.0507 42.8856 56.0593 46.4998C55.8922 46.559 55.7114 46.5675 55.5395 46.5242C55.3676 46.4809 55.2124 46.3877 55.0933 46.2564C54.9777 46.1256 54.9059 45.9619 54.8879 45.7882C54.87 45.6145 54.907 45.4396 54.9935 45.288C58.1721 39.7045 61.9585 33.19 64.8489 27.3456C64.9639 27.1149 65.1572 26.9327 65.3943 26.8314C65.6336 26.7282 65.9014 26.7114 66.1518 26.784C72.1384 28.5025 81.5894 32.224 80.7183 35.2229Z" fill="white"/>
|
|
3
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!-- created by svgstack.com | Attribution is required. --><svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="mask0_10019_819" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="8" y="8" width="112" height="112"><path d="M63.892 8C62.08 38.04 38.04 62.08 8 63.892V64.108C38.04 65.92 62.08 89.96 63.892 120H64.108C65.92 89.96 89.96 65.92 120 64.108V63.892C89.96 62.08 65.92 38.04 64.108 8H63.892Z" fill="url(#paint0_linear_10019_819)"/></mask><g mask="url(#mask0_10019_819)"><path d="M64 0C99.3216 0 128 28.6784 128 64C128 99.3216 99.3216 128 64 128C28.6784 128 0 99.3216 0 64C0 28.6784 28.6784 0 64 0Z" fill="url(#paint1_linear_10019_819)"/></g><defs><linearGradient id="paint0_linear_10019_819" x1="100.892" y1="30.04" x2="22.152" y2="96.848" gradientUnits="userSpaceOnUse"><stop stop-color="#217BFE"/><stop offset="0.14" stop-color="#1485FC"/><stop offset="0.27" stop-color="#078EFB"/><stop offset="0.52" stop-color="#548FFD"/><stop offset="0.78" stop-color="#A190FF"/><stop offset="0.89" stop-color="#AF94FE"/><stop offset="1" stop-color="#BD99FE"/></linearGradient><linearGradient id="paint1_linear_10019_819" x1="47.988" y1="82.52" x2="96.368" y2="32.456" gradientUnits="userSpaceOnUse"><stop stop-color="#217BFE"/><stop offset="0.14" stop-color="#1485FC"/><stop offset="0.27" stop-color="#078EFB"/><stop offset="0.52" stop-color="#548FFD"/><stop offset="0.78" stop-color="#A190FF"/><stop offset="0.89" stop-color="#AF94FE"/><stop offset="1" stop-color="#BD99FE"/></linearGradient></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 492"><path fill-rule="evenodd" clip-rule="evenodd" d="M197.76 315.52l170.197-125.803c8.342-6.186 20.267-3.776 24.256 5.803 20.907 50.539 11.563 111.253-30.08 152.939-41.621 41.685-99.562 50.816-152.512 29.994l-57.834 26.816c82.965 56.768 183.701 42.731 246.656-20.33 49.941-50.006 65.408-118.166 50.944-179.627l.128.149c-20.971-90.282 5.162-126.378 58.666-200.17 1.28-1.75 2.56-3.499 3.819-5.291l-70.421 70.507v-.214l-243.883 245.27m-35.072 30.528c-59.563-56.96-49.28-145.088 1.515-195.926 37.568-37.61 99.136-52.97 152.874-30.4l57.707-26.666a166.554 166.554 0 00-39.019-21.334 191.467 191.467 0 00-208.042 41.942c-54.038 54.101-71.04 137.301-41.856 208.298 21.802 53.056-13.931 90.582-49.92 128.47C23.104 463.915 10.304 477.333 0 491.541l162.56-145.386" fill="#000"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 490.16 411.7"><defs><style>.cls-1{fill:url(#gradient_6);}</style><linearGradient id="gradient_6" y1="205.85" x2="490.16" y2="205.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e4177f"/><stop offset="0.5" stop-color="#e73562"/><stop offset="1" stop-color="#e94e4a"/></linearGradient></defs><title>MiniMax</title><g id="layer_2"><g id="layer_1"><path class="cls-1" d="M233.45,40.81a17.55,17.55,0,1,0-35.1,0V331.56a40.82,40.82,0,0,1-81.63,0V145a17.55,17.55,0,1,0-35.09,0v79.06a40.82,40.82,0,0,1-81.63,0V195.42a11.63,11.63,0,0,1,23.26,0v28.66a17.55,17.55,0,0,0,35.1,0V145A40.82,40.82,0,0,1,140,145V331.56a17.55,17.55,0,0,0,35.1,0V217.5h0V40.81a40.81,40.81,0,1,1,81.62,0V281.56a11.63,11.63,0,1,1-23.26,0Zm215.9,63.4A40.86,40.86,0,0,0,408.53,145V300.85a17.55,17.55,0,0,1-35.09,0v-260a40.82,40.82,0,0,0-81.63,0V370.89a17.55,17.55,0,0,1-35.1,0V330a11.63,11.63,0,1,0-23.26,0v40.86a40.81,40.81,0,0,0,81.62,0V40.81a17.55,17.55,0,0,1,35.1,0v260a40.82,40.82,0,0,0,81.63,0V145a17.55,17.55,0,1,1,35.1,0V281.56a11.63,11.63,0,0,0,23.26,0V145A40.85,40.85,0,0,0,449.35,104.21Z"/></g></g></svg>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<rect x="18" y="24" width="16" height="52" rx="3" fill="black"/>
|
|
3
|
-
<rect x="42" y="32" width="16" height="44" rx="3" fill="black"/>
|
|
4
|
-
<rect x="66" y="20" width="16" height="56" rx="3" fill="black"/>
|
|
5
|
-
</svg>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M50 10C72.091 10 90 27.909 90 50C90 72.091 72.091 90 50 90C27.909 90 10 72.091 10 50C10 27.909 27.909 10 50 10ZM50 24C35.641 24 24 35.641 24 50C24 64.359 35.641 76 50 76C64.359 76 76 64.359 76 50C76 35.641 64.359 24 50 24Z" fill="black"/>
|
|
3
|
-
<circle cx="50" cy="14" r="5" fill="black"/>
|
|
4
|
-
<circle cx="50" cy="86" r="5" fill="black"/>
|
|
5
|
-
<circle cx="14" cy="50" r="5" fill="black"/>
|
|
6
|
-
<circle cx="86" cy="50" r="5" fill="black"/>
|
|
7
|
-
</svg>
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 18H50C67.6731 18 82 32.3269 82 50C82 67.6731 67.6731 82 50 82H24V18ZM36 30V70H50C61.0457 70 70 61.0457 70 50C70 38.9543 61.0457 30 50 30H36Z" fill="black"/>
|
|
3
|
-
<rect x="58" y="62" width="12" height="20" rx="2" fill="black"/>
|
|
4
|
-
</svg>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
2
|
-
<!-- Qwen / Tongyi Qianwen - stylized Q with neural spark -->
|
|
3
|
-
<!-- Main circle (Q body) -->
|
|
4
|
-
<circle cx="50" cy="46" r="32" stroke="black" stroke-width="8" fill="none"/>
|
|
5
|
-
<!-- Q tail extending down-right -->
|
|
6
|
-
<path d="M68 64L86 86" stroke="black" stroke-width="8" stroke-linecap="round"/>
|
|
7
|
-
<!-- Inner spark/star (AI element) -->
|
|
8
|
-
<path d="M50 32L53 42L62 38L56 46L66 46L56 50L62 58L53 52L50 62L47 52L38 58L44 50L34 46L44 46L38 38L47 42Z" fill="black"/>
|
|
9
|
-
</svg>
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<path d="M18 35C28 23 42 20 56 28C66 34 74 35 82 29" stroke="black" stroke-width="10" stroke-linecap="round"/>
|
|
3
|
-
<path d="M18 71C28 59 42 56 56 64C66 70 74 71 82 65" stroke="black" stroke-width="10" stroke-linecap="round"/>
|
|
4
|
-
</svg>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
|
|
2
|
-
<rect x="18" y="24" width="64" height="12" rx="3" fill="black"/>
|
|
3
|
-
<rect x="18" y="64" width="64" height="12" rx="3" fill="black"/>
|
|
4
|
-
<rect x="44" y="24" width="12" height="52" rx="3" fill="black"/>
|
|
5
|
-
</svg>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
2
|
-
<!-- Google Cloud Vertex AI - hexagonal AI chip inspired -->
|
|
3
|
-
<!-- Outer hexagon -->
|
|
4
|
-
<path d="M50 8L88 29V71L50 92L12 71V29L50 8Z" fill="black" fill-opacity="0.9"/>
|
|
5
|
-
<!-- Inner hexagon cutout -->
|
|
6
|
-
<path d="M50 22L76 37V67L50 82L24 67V37L50 22Z" fill="white"/>
|
|
7
|
-
<!-- Neural node center -->
|
|
8
|
-
<circle cx="50" cy="52" r="10" fill="black"/>
|
|
9
|
-
<!-- Connection lines radiating out -->
|
|
10
|
-
<line x1="50" y1="42" x2="50" y2="28" stroke="black" stroke-width="3" stroke-linecap="round"/>
|
|
11
|
-
<line x1="58.66" y1="57" x2="70" y2="64" stroke="black" stroke-width="3" stroke-linecap="round"/>
|
|
12
|
-
<line x1="41.34" y1="57" x2="30" y2="64" stroke="black" stroke-width="3" stroke-linecap="round"/>
|
|
13
|
-
<!-- Outer nodes -->
|
|
14
|
-
<circle cx="50" cy="28" r="4" fill="black"/>
|
|
15
|
-
<circle cx="70" cy="64" r="4" fill="black"/>
|
|
16
|
-
<circle cx="30" cy="64" r="4" fill="black"/>
|
|
17
|
-
</svg>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M52.3767 10.0721L45.8028 19.4273C44.7914 20.8938 43.072 21.804 41.2516 21.804H5.34765V10.0215C5.29708 10.0721 52.3767 10.0721 52.3767 10.0721Z" fill="white"/>
|
|
3
|
-
<path d="M97.0291 10.0722L40.5942 90.0216H2.97095L59.4058 10.0722H97.0291Z" fill="white"/>
|
|
4
|
-
<path d="M47.6233 90.0215L54.2478 80.6157C55.2592 79.1492 56.9785 78.2389 58.799 78.2389H94.6524V90.0215H47.6233Z" fill="white"/>
|
|
5
|
-
</svg>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38 22" fill="none">
|
|
2
|
-
<!-- Infinity symbol (∞) using overlapping ellipses -->
|
|
3
|
-
<g stroke="currentColor" stroke-width="2.6" fill="none">
|
|
4
|
-
<ellipse cx="11" cy="11" rx="5.5" ry="5.5"/>
|
|
5
|
-
<ellipse cx="27" cy="11" rx="5.5" ry="5.5"/>
|
|
6
|
-
</g>
|
|
7
|
-
</svg>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"claude": { "model": "Claude Opus 4.6", "contextK": 1000 },
|
|
3
|
-
"codex": { "model": "GPT-5 Codex", "contextK": 400 },
|
|
4
|
-
"cursor": { "model": "GPT-4o", "contextK": 128 },
|
|
5
|
-
"gemini": { "model": "Gemini 2.5 Pro", "contextK": 1000 },
|
|
6
|
-
"copilot": { "model": "GPT-4o", "contextK": 128 },
|
|
7
|
-
"zai": { "model": "GLM-4.6", "contextK": 205 },
|
|
8
|
-
"groq": { "model": "Llama 3.3 70B", "contextK": 128 },
|
|
9
|
-
"deepseek": { "model": "DeepSeek Chat", "contextK": 64 },
|
|
10
|
-
"fireworks": { "model": "Llama 3.1 70B", "contextK": 128 },
|
|
11
|
-
"mistral": { "model": "Mistral Large", "contextK": 128 },
|
|
12
|
-
"perplexity": { "model": "Sonar", "contextK": 128 },
|
|
13
|
-
"kimi": { "model": "Moonshot v1", "contextK": 128 },
|
|
14
|
-
"together": { "model": "Llama 3.1", "contextK": 128 },
|
|
15
|
-
"cohere": { "model": "Command R+", "contextK": 128 },
|
|
16
|
-
"xai": { "model": "Grok 2", "contextK": 128 },
|
|
17
|
-
"cerebras": { "model": "Llama 3.3 70B", "contextK": 128 },
|
|
18
|
-
"sambanova": { "model": "Llama 3.1 70B", "contextK": 128 },
|
|
19
|
-
"qwen": { "model": "Qwen 2.5 72B", "contextK": 128 }
|
|
20
|
-
}
|
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import RunicCore
|
|
3
|
-
import KeyboardShortcuts
|
|
4
|
-
import Observation
|
|
5
|
-
import QuartzCore
|
|
6
|
-
import Security
|
|
7
|
-
import SwiftUI
|
|
8
|
-
|
|
9
|
-
@main
|
|
10
|
-
struct RunicApp: App {
|
|
11
|
-
@NSApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
|
|
12
|
-
@State private var settings: SettingsStore
|
|
13
|
-
@State private var store: UsageStore
|
|
14
|
-
@State private var preferencesSelection: PreferencesSelection
|
|
15
|
-
private let account: AccountInfo
|
|
16
|
-
|
|
17
|
-
init() {
|
|
18
|
-
let env = ProcessInfo.processInfo.environment
|
|
19
|
-
let level = RunicLog.parseLevel(env["RUNIC_LOG_LEVEL"]) ?? .info
|
|
20
|
-
RunicLog.bootstrapIfNeeded(.init(
|
|
21
|
-
destination: .oslog(subsystem: "com.sriinnu.athena.runic"),
|
|
22
|
-
level: level,
|
|
23
|
-
json: false))
|
|
24
|
-
|
|
25
|
-
let preferencesSelection = PreferencesSelection()
|
|
26
|
-
let settings = SettingsStore()
|
|
27
|
-
let fetcher = UsageFetcher()
|
|
28
|
-
let account = fetcher.loadAccountInfo()
|
|
29
|
-
let store = UsageStore(fetcher: fetcher, settings: settings)
|
|
30
|
-
_settings = State(wrappedValue: settings)
|
|
31
|
-
_store = State(wrappedValue: store)
|
|
32
|
-
_preferencesSelection = State(wrappedValue: preferencesSelection)
|
|
33
|
-
self.account = account
|
|
34
|
-
|
|
35
|
-
// Defer theme application until NSApp is available.
|
|
36
|
-
let savedTheme = settings.theme
|
|
37
|
-
DispatchQueue.main.async { RunicApp.applyTheme(savedTheme) }
|
|
38
|
-
self.appDelegate.configure(
|
|
39
|
-
store: store,
|
|
40
|
-
settings: settings,
|
|
41
|
-
account: account,
|
|
42
|
-
selection: preferencesSelection)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@SceneBuilder
|
|
46
|
-
var body: some Scene {
|
|
47
|
-
// Hidden 1×1 window to keep SwiftUI's lifecycle alive so `Settings` scene
|
|
48
|
-
// shows the native toolbar tabs even though the UI is AppKit-based.
|
|
49
|
-
WindowGroup("RunicLifecycleKeepalive") {
|
|
50
|
-
HiddenWindowView()
|
|
51
|
-
}
|
|
52
|
-
.defaultSize(width: 20, height: 20)
|
|
53
|
-
.windowStyle(.hiddenTitleBar)
|
|
54
|
-
|
|
55
|
-
Settings {
|
|
56
|
-
PreferencesView(
|
|
57
|
-
settings: self.settings,
|
|
58
|
-
store: self.store,
|
|
59
|
-
updater: self.appDelegate.updaterController,
|
|
60
|
-
selection: self.preferencesSelection)
|
|
61
|
-
}
|
|
62
|
-
.defaultSize(width: PreferencesTab.windowWidth, height: PreferencesTab.windowHeight)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
static func applyTheme(_ theme: Theme) {
|
|
66
|
-
guard let app = NSApp else { return }
|
|
67
|
-
switch theme {
|
|
68
|
-
case .system:
|
|
69
|
-
app.appearance = nil
|
|
70
|
-
case .light:
|
|
71
|
-
app.appearance = NSAppearance(named: .aqua)
|
|
72
|
-
case .dark:
|
|
73
|
-
app.appearance = NSAppearance(named: .darkAqua)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
private func openSettings(tab: PreferencesTab) {
|
|
78
|
-
self.preferencesSelection.tab = tab
|
|
79
|
-
NSApp.activate(ignoringOtherApps: true)
|
|
80
|
-
_ = NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// MARK: - Updater abstraction
|
|
85
|
-
|
|
86
|
-
@MainActor
|
|
87
|
-
protocol UpdaterProviding: AnyObject {
|
|
88
|
-
var automaticallyChecksForUpdates: Bool { get set }
|
|
89
|
-
var automaticallyDownloadsUpdates: Bool { get set }
|
|
90
|
-
var isAvailable: Bool { get }
|
|
91
|
-
var unavailableReason: String? { get }
|
|
92
|
-
var updateStatus: UpdateStatus { get }
|
|
93
|
-
func checkForUpdates(_ sender: Any?)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// No-op updater used for debug builds and non-bundled runs to suppress Sparkle dialogs.
|
|
97
|
-
final class DisabledUpdaterController: UpdaterProviding {
|
|
98
|
-
var automaticallyChecksForUpdates: Bool = false
|
|
99
|
-
var automaticallyDownloadsUpdates: Bool = false
|
|
100
|
-
let isAvailable: Bool = false
|
|
101
|
-
let unavailableReason: String?
|
|
102
|
-
let updateStatus = UpdateStatus()
|
|
103
|
-
|
|
104
|
-
init(unavailableReason: String? = nil) {
|
|
105
|
-
self.unavailableReason = unavailableReason
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
func checkForUpdates(_ sender: Any?) {}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@MainActor
|
|
112
|
-
@Observable
|
|
113
|
-
final class UpdateStatus {
|
|
114
|
-
static let disabled = UpdateStatus()
|
|
115
|
-
var isUpdateReady: Bool
|
|
116
|
-
|
|
117
|
-
init(isUpdateReady: Bool = false) {
|
|
118
|
-
self.isUpdateReady = isUpdateReady
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
#if canImport(Sparkle) && ENABLE_SPARKLE
|
|
123
|
-
import Sparkle
|
|
124
|
-
|
|
125
|
-
@MainActor
|
|
126
|
-
final class SparkleUpdaterController: NSObject, UpdaterProviding, SPUUpdaterDelegate {
|
|
127
|
-
private lazy var controller = SPUStandardUpdaterController(
|
|
128
|
-
startingUpdater: false,
|
|
129
|
-
updaterDelegate: self,
|
|
130
|
-
userDriverDelegate: nil)
|
|
131
|
-
let updateStatus = UpdateStatus()
|
|
132
|
-
let unavailableReason: String? = nil
|
|
133
|
-
|
|
134
|
-
init(savedAutoUpdate: Bool) {
|
|
135
|
-
super.init()
|
|
136
|
-
let updater = self.controller.updater
|
|
137
|
-
updater.automaticallyChecksForUpdates = savedAutoUpdate
|
|
138
|
-
updater.automaticallyDownloadsUpdates = savedAutoUpdate
|
|
139
|
-
self.controller.startUpdater()
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
var automaticallyChecksForUpdates: Bool {
|
|
143
|
-
get { self.controller.updater.automaticallyChecksForUpdates }
|
|
144
|
-
set { self.controller.updater.automaticallyChecksForUpdates = newValue }
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
var automaticallyDownloadsUpdates: Bool {
|
|
148
|
-
get { self.controller.updater.automaticallyDownloadsUpdates }
|
|
149
|
-
set { self.controller.updater.automaticallyDownloadsUpdates = newValue }
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
var isAvailable: Bool { true }
|
|
153
|
-
|
|
154
|
-
func checkForUpdates(_ sender: Any?) {
|
|
155
|
-
self.controller.checkForUpdates(sender)
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
nonisolated func updater(_ updater: SPUUpdater, didDownloadUpdate item: SUAppcastItem) {
|
|
159
|
-
Task { @MainActor in
|
|
160
|
-
self.updateStatus.isUpdateReady = true
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
nonisolated func updater(_ updater: SPUUpdater, failedToDownloadUpdate item: SUAppcastItem, error: Error) {
|
|
165
|
-
Task { @MainActor in
|
|
166
|
-
self.updateStatus.isUpdateReady = false
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
nonisolated func userDidCancelDownload(_ updater: SPUUpdater) {
|
|
171
|
-
Task { @MainActor in
|
|
172
|
-
self.updateStatus.isUpdateReady = false
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
nonisolated func updater(
|
|
177
|
-
_ updater: SPUUpdater,
|
|
178
|
-
userDidMake choice: SPUUserUpdateChoice,
|
|
179
|
-
forUpdate updateItem: SUAppcastItem,
|
|
180
|
-
state: SPUUserUpdateState)
|
|
181
|
-
{
|
|
182
|
-
let downloaded = state.stage == .downloaded
|
|
183
|
-
Task { @MainActor in
|
|
184
|
-
switch choice {
|
|
185
|
-
case .install, .skip:
|
|
186
|
-
self.updateStatus.isUpdateReady = false
|
|
187
|
-
case .dismiss:
|
|
188
|
-
self.updateStatus.isUpdateReady = downloaded
|
|
189
|
-
@unknown default:
|
|
190
|
-
self.updateStatus.isUpdateReady = false
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
private func isDeveloperIDSigned(bundleURL: URL) -> Bool {
|
|
197
|
-
var staticCode: SecStaticCode?
|
|
198
|
-
guard SecStaticCodeCreateWithPath(bundleURL as CFURL, SecCSFlags(), &staticCode) == errSecSuccess,
|
|
199
|
-
let code = staticCode else { return false }
|
|
200
|
-
|
|
201
|
-
var infoCF: CFDictionary?
|
|
202
|
-
guard SecCodeCopySigningInformation(code, SecCSFlags(rawValue: kSecCSSigningInformation), &infoCF) == errSecSuccess,
|
|
203
|
-
let info = infoCF as? [String: Any],
|
|
204
|
-
let certs = info[kSecCodeInfoCertificates as String] as? [SecCertificate],
|
|
205
|
-
let leaf = certs.first else { return false }
|
|
206
|
-
|
|
207
|
-
if let summary = SecCertificateCopySubjectSummary(leaf) as String? {
|
|
208
|
-
return summary.hasPrefix("Developer ID Application:")
|
|
209
|
-
}
|
|
210
|
-
return false
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
@MainActor
|
|
214
|
-
private func makeUpdaterController() -> UpdaterProviding {
|
|
215
|
-
let bundleURL = Bundle.main.bundleURL
|
|
216
|
-
let isBundledApp = bundleURL.pathExtension == "app"
|
|
217
|
-
guard isBundledApp else {
|
|
218
|
-
return DisabledUpdaterController(unavailableReason: "Updates unavailable in this build.")
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
if InstallOrigin.isHomebrewCask(appBundleURL: bundleURL) {
|
|
222
|
-
return DisabledUpdaterController(
|
|
223
|
-
unavailableReason: "Updates managed by Homebrew. Run: brew upgrade --cask sriinnu.athena/tap/runic")
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
guard isDeveloperIDSigned(bundleURL: bundleURL) else {
|
|
227
|
-
return DisabledUpdaterController(unavailableReason: "Updates unavailable in this build.")
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
let defaults = UserDefaults.standard
|
|
231
|
-
let autoUpdateKey = "autoUpdateEnabled"
|
|
232
|
-
// Default to true for first launch; fall back to saved preference thereafter.
|
|
233
|
-
let savedAutoUpdate = (defaults.object(forKey: autoUpdateKey) as? Bool) ?? true
|
|
234
|
-
return SparkleUpdaterController(savedAutoUpdate: savedAutoUpdate)
|
|
235
|
-
}
|
|
236
|
-
#else
|
|
237
|
-
private func makeUpdaterController() -> UpdaterProviding {
|
|
238
|
-
DisabledUpdaterController()
|
|
239
|
-
}
|
|
240
|
-
#endif
|
|
241
|
-
|
|
242
|
-
@MainActor
|
|
243
|
-
final class AppDelegate: NSObject, NSApplicationDelegate {
|
|
244
|
-
let updaterController: UpdaterProviding = makeUpdaterController()
|
|
245
|
-
private var statusController: StatusItemControlling?
|
|
246
|
-
private var store: UsageStore?
|
|
247
|
-
private var settings: SettingsStore?
|
|
248
|
-
private var account: AccountInfo?
|
|
249
|
-
private var preferencesSelection: PreferencesSelection?
|
|
250
|
-
private var refreshLifecycleObservers: [NSObjectProtocol] = []
|
|
251
|
-
|
|
252
|
-
func configure(store: UsageStore, settings: SettingsStore, account: AccountInfo, selection: PreferencesSelection) {
|
|
253
|
-
self.store = store
|
|
254
|
-
self.settings = settings
|
|
255
|
-
self.account = account
|
|
256
|
-
self.preferencesSelection = selection
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
func applicationDidFinishLaunching(_ notification: Notification) {
|
|
260
|
-
AppNotifications.shared.requestAuthorizationOnStartup()
|
|
261
|
-
self.ensureStatusController()
|
|
262
|
-
self.installAutoRefreshLifecycleObservers()
|
|
263
|
-
KeyboardShortcuts.onKeyUp(for: .openMenu) { [weak self] in
|
|
264
|
-
Task { @MainActor [weak self] in
|
|
265
|
-
self?.statusController?.openMenuFromShortcut()
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
private func ensureStatusController() {
|
|
271
|
-
if self.statusController != nil { return }
|
|
272
|
-
|
|
273
|
-
if let store, let settings, let account, let selection = self.preferencesSelection {
|
|
274
|
-
self.statusController = StatusItemController.factory(
|
|
275
|
-
store,
|
|
276
|
-
settings,
|
|
277
|
-
account,
|
|
278
|
-
self.updaterController,
|
|
279
|
-
selection)
|
|
280
|
-
return
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Defensive fallback: this should not be hit in normal app lifecycle.
|
|
284
|
-
let fallbackSettings = SettingsStore()
|
|
285
|
-
let fetcher = UsageFetcher()
|
|
286
|
-
let fallbackAccount = fetcher.loadAccountInfo()
|
|
287
|
-
let fallbackStore = UsageStore(fetcher: fetcher, settings: fallbackSettings)
|
|
288
|
-
self.statusController = StatusItemController.factory(
|
|
289
|
-
fallbackStore,
|
|
290
|
-
fallbackSettings,
|
|
291
|
-
fallbackAccount,
|
|
292
|
-
self.updaterController,
|
|
293
|
-
PreferencesSelection())
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
private func installAutoRefreshLifecycleObservers() {
|
|
297
|
-
guard self.refreshLifecycleObservers.isEmpty else { return }
|
|
298
|
-
let center = NSWorkspace.shared.notificationCenter
|
|
299
|
-
|
|
300
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
301
|
-
forName: NSWorkspace.willSleepNotification,
|
|
302
|
-
object: nil,
|
|
303
|
-
queue: .main) { [weak self] _ in
|
|
304
|
-
Task { @MainActor [weak self] in
|
|
305
|
-
self?.store?.handleAutoRefreshSystemPause(.systemSleep)
|
|
306
|
-
}
|
|
307
|
-
})
|
|
308
|
-
|
|
309
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
310
|
-
forName: NSWorkspace.didWakeNotification,
|
|
311
|
-
object: nil,
|
|
312
|
-
queue: .main) { [weak self] _ in
|
|
313
|
-
Task { @MainActor [weak self] in
|
|
314
|
-
self?.store?.setAutoRefreshSuspended(nil)
|
|
315
|
-
await self?.store?.refresh(trigger: .resume)
|
|
316
|
-
}
|
|
317
|
-
})
|
|
318
|
-
|
|
319
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
320
|
-
forName: NSWorkspace.screensDidSleepNotification,
|
|
321
|
-
object: nil,
|
|
322
|
-
queue: .main) { [weak self] _ in
|
|
323
|
-
Task { @MainActor [weak self] in
|
|
324
|
-
self?.store?.handleAutoRefreshSystemPause(.screenSleep)
|
|
325
|
-
}
|
|
326
|
-
})
|
|
327
|
-
|
|
328
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
329
|
-
forName: NSWorkspace.screensDidWakeNotification,
|
|
330
|
-
object: nil,
|
|
331
|
-
queue: .main) { [weak self] _ in
|
|
332
|
-
Task { @MainActor [weak self] in
|
|
333
|
-
self?.store?.setAutoRefreshSuspended(nil)
|
|
334
|
-
await self?.store?.refresh(trigger: .resume)
|
|
335
|
-
}
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
339
|
-
forName: NSWorkspace.sessionDidResignActiveNotification,
|
|
340
|
-
object: nil,
|
|
341
|
-
queue: .main) { [weak self] _ in
|
|
342
|
-
Task { @MainActor [weak self] in
|
|
343
|
-
self?.store?.handleAutoRefreshSystemPause(.sessionInactive)
|
|
344
|
-
}
|
|
345
|
-
})
|
|
346
|
-
|
|
347
|
-
self.refreshLifecycleObservers.append(center.addObserver(
|
|
348
|
-
forName: NSWorkspace.sessionDidBecomeActiveNotification,
|
|
349
|
-
object: nil,
|
|
350
|
-
queue: .main) { [weak self] _ in
|
|
351
|
-
Task { @MainActor [weak self] in
|
|
352
|
-
self?.store?.setAutoRefreshSuspended(nil)
|
|
353
|
-
await self?.store?.refresh(trigger: .resume)
|
|
354
|
-
}
|
|
355
|
-
})
|
|
356
|
-
}
|
|
357
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import RunicCore
|
|
2
|
-
import Foundation
|
|
3
|
-
@preconcurrency import UserNotifications
|
|
4
|
-
|
|
5
|
-
enum SessionQuotaTransition: Equatable, Sendable {
|
|
6
|
-
case none
|
|
7
|
-
case depleted
|
|
8
|
-
case restored
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
enum SessionQuotaNotificationLogic {
|
|
12
|
-
static let depletedThreshold: Double = 0.0001
|
|
13
|
-
|
|
14
|
-
static func isDepleted(_ remaining: Double?) -> Bool {
|
|
15
|
-
guard let remaining else { return false }
|
|
16
|
-
return remaining <= Self.depletedThreshold
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static func transition(previousRemaining: Double?, currentRemaining: Double?) -> SessionQuotaTransition {
|
|
20
|
-
guard let currentRemaining else { return .none }
|
|
21
|
-
guard let previousRemaining else { return .none }
|
|
22
|
-
|
|
23
|
-
let wasDepleted = previousRemaining <= Self.depletedThreshold
|
|
24
|
-
let isDepleted = currentRemaining <= Self.depletedThreshold
|
|
25
|
-
|
|
26
|
-
if !wasDepleted, isDepleted { return .depleted }
|
|
27
|
-
if wasDepleted, !isDepleted { return .restored }
|
|
28
|
-
return .none
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@MainActor
|
|
33
|
-
final class SessionQuotaNotifier {
|
|
34
|
-
private let logger = RunicLog.logger("sessionQuotaNotifications")
|
|
35
|
-
|
|
36
|
-
init() {}
|
|
37
|
-
|
|
38
|
-
func post(transition: SessionQuotaTransition, provider: UsageProvider, badge: NSNumber? = nil) {
|
|
39
|
-
guard transition != .none else { return }
|
|
40
|
-
|
|
41
|
-
let providerName = ProviderDescriptorRegistry.descriptor(for: provider).metadata.displayName
|
|
42
|
-
|
|
43
|
-
let (title, body) = switch transition {
|
|
44
|
-
case .none:
|
|
45
|
-
("", "")
|
|
46
|
-
case .depleted:
|
|
47
|
-
("\(providerName) session depleted", "0% left. Will notify when it's available again.")
|
|
48
|
-
case .restored:
|
|
49
|
-
("\(providerName) session restored", "Session quota is available again.")
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
let providerText = provider.rawValue
|
|
53
|
-
let transitionText = String(describing: transition)
|
|
54
|
-
let idPrefix = "session-\(providerText)-\(transitionText)"
|
|
55
|
-
self.logger.info("enqueuing", metadata: ["prefix": idPrefix])
|
|
56
|
-
AppNotifications.shared.post(idPrefix: idPrefix, title: title, body: body, badge: badge)
|
|
57
|
-
}
|
|
58
|
-
}
|