@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
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import RunicCore
|
|
3
|
-
import SwiftUI
|
|
4
|
-
|
|
5
|
-
@MainActor
|
|
6
|
-
struct CopilotLoginFlow {
|
|
7
|
-
static func run(settings: SettingsStore) async -> Bool {
|
|
8
|
-
let flow = CopilotDeviceFlow()
|
|
9
|
-
|
|
10
|
-
do {
|
|
11
|
-
let code = try await flow.requestDeviceCode()
|
|
12
|
-
|
|
13
|
-
// Copy code to clipboard
|
|
14
|
-
let pb = NSPasteboard.general
|
|
15
|
-
pb.clearContents()
|
|
16
|
-
pb.setString(code.userCode, forType: .string)
|
|
17
|
-
|
|
18
|
-
let alert = NSAlert()
|
|
19
|
-
alert.messageText = "GitHub Copilot Login"
|
|
20
|
-
alert.informativeText = """
|
|
21
|
-
A device code has been copied to your clipboard: \(code.userCode)
|
|
22
|
-
|
|
23
|
-
We will open GitHub with the code prefilled.
|
|
24
|
-
If the browser still asks for a code, paste: \(code.userCode)
|
|
25
|
-
"""
|
|
26
|
-
alert.addButton(withTitle: "Open Browser")
|
|
27
|
-
alert.addButton(withTitle: "Cancel")
|
|
28
|
-
|
|
29
|
-
let response = alert.runModal()
|
|
30
|
-
if response == .alertSecondButtonReturn {
|
|
31
|
-
return false // Cancelled
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if let url = Self.makeVerificationURL(code: code) {
|
|
35
|
-
NSWorkspace.shared.open(url)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Poll in background (modal blocks, but we need to wait for token effectively)
|
|
39
|
-
// Ideally we'd show a "Waiting..." modal or spinner.
|
|
40
|
-
// For simplicity, we can use a non-modal window or just block a Task?
|
|
41
|
-
// `runModal` blocks the thread. We need to poll while the user is doing auth in browser.
|
|
42
|
-
// But we already returned from runModal to open the browser.
|
|
43
|
-
// We need a secondary "Waiting for confirmation..." alert or state.
|
|
44
|
-
|
|
45
|
-
// Let's show a "Waiting" alert that can be cancelled.
|
|
46
|
-
let waitingAlert = NSAlert()
|
|
47
|
-
waitingAlert.messageText = "Waiting for Authentication..."
|
|
48
|
-
waitingAlert.informativeText = """
|
|
49
|
-
Please complete the login in your browser.
|
|
50
|
-
This window will close automatically when finished.
|
|
51
|
-
"""
|
|
52
|
-
waitingAlert.addButton(withTitle: "Cancel")
|
|
53
|
-
let parentWindow = Self.resolveWaitingParentWindow()
|
|
54
|
-
let hostWindow = parentWindow ?? Self.makeWaitingHostWindow()
|
|
55
|
-
let shouldCloseHostWindow = parentWindow == nil
|
|
56
|
-
let tokenTask = Task.detached(priority: .userInitiated) {
|
|
57
|
-
try await flow.pollForToken(deviceCode: code.deviceCode, interval: code.interval)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
let waitTask = Task { @MainActor in
|
|
61
|
-
let response = await Self.presentWaitingAlert(waitingAlert, parentWindow: hostWindow)
|
|
62
|
-
if response == .alertFirstButtonReturn {
|
|
63
|
-
tokenTask.cancel()
|
|
64
|
-
}
|
|
65
|
-
return response
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
let tokenResult: Result<String, Error>
|
|
69
|
-
do {
|
|
70
|
-
let token = try await tokenTask.value
|
|
71
|
-
tokenResult = .success(token)
|
|
72
|
-
} catch {
|
|
73
|
-
tokenResult = .failure(error)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
Self.dismissWaitingAlert(waitingAlert, parentWindow: hostWindow, closeHost: shouldCloseHostWindow)
|
|
77
|
-
let waitResponse = await waitTask.value
|
|
78
|
-
if waitResponse == .alertFirstButtonReturn {
|
|
79
|
-
return false
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
switch tokenResult {
|
|
83
|
-
case let .success(token):
|
|
84
|
-
settings.copilotAPIToken = token
|
|
85
|
-
settings.setProviderEnabled(
|
|
86
|
-
provider: .copilot,
|
|
87
|
-
metadata: ProviderRegistry.shared.metadata[.copilot]!,
|
|
88
|
-
enabled: true)
|
|
89
|
-
|
|
90
|
-
let success = NSAlert()
|
|
91
|
-
success.messageText = "Login Successful"
|
|
92
|
-
success.runModal()
|
|
93
|
-
return true
|
|
94
|
-
case let .failure(error):
|
|
95
|
-
guard !(error is CancellationError) else { return false }
|
|
96
|
-
let err = NSAlert()
|
|
97
|
-
err.messageText = "Login Failed"
|
|
98
|
-
err.informativeText = error.localizedDescription
|
|
99
|
-
err.runModal()
|
|
100
|
-
return false
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
} catch {
|
|
104
|
-
let err = NSAlert()
|
|
105
|
-
err.messageText = "Login Failed"
|
|
106
|
-
err.informativeText = error.localizedDescription
|
|
107
|
-
err.runModal()
|
|
108
|
-
return false
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
@MainActor
|
|
113
|
-
private static func presentWaitingAlert(
|
|
114
|
-
_ alert: NSAlert,
|
|
115
|
-
parentWindow: NSWindow) async -> NSApplication.ModalResponse
|
|
116
|
-
{
|
|
117
|
-
await withCheckedContinuation { continuation in
|
|
118
|
-
alert.beginSheetModal(for: parentWindow) { response in
|
|
119
|
-
continuation.resume(returning: response)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@MainActor
|
|
125
|
-
private static func dismissWaitingAlert(
|
|
126
|
-
_ alert: NSAlert,
|
|
127
|
-
parentWindow: NSWindow,
|
|
128
|
-
closeHost: Bool)
|
|
129
|
-
{
|
|
130
|
-
let alertWindow = alert.window
|
|
131
|
-
if alertWindow.sheetParent != nil {
|
|
132
|
-
parentWindow.endSheet(alertWindow)
|
|
133
|
-
} else {
|
|
134
|
-
alertWindow.orderOut(nil)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
guard closeHost else { return }
|
|
138
|
-
parentWindow.orderOut(nil)
|
|
139
|
-
parentWindow.close()
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
@MainActor
|
|
143
|
-
private static func resolveWaitingParentWindow() -> NSWindow? {
|
|
144
|
-
if let window = NSApp.keyWindow ?? NSApp.mainWindow {
|
|
145
|
-
return window
|
|
146
|
-
}
|
|
147
|
-
if let window = NSApp.windows.first(where: { $0.isVisible && !$0.ignoresMouseEvents }) {
|
|
148
|
-
return window
|
|
149
|
-
}
|
|
150
|
-
return NSApp.windows.first
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
@MainActor
|
|
154
|
-
private static func makeWaitingHostWindow() -> NSWindow {
|
|
155
|
-
let window = NSWindow(
|
|
156
|
-
contentRect: NSRect(x: 0, y: 0, width: 420, height: 1),
|
|
157
|
-
styleMask: [.titled, .fullSizeContentView],
|
|
158
|
-
backing: .buffered,
|
|
159
|
-
defer: false)
|
|
160
|
-
window.isReleasedWhenClosed = false
|
|
161
|
-
window.titleVisibility = .hidden
|
|
162
|
-
window.titlebarAppearsTransparent = true
|
|
163
|
-
window.standardWindowButton(.closeButton)?.isHidden = true
|
|
164
|
-
window.standardWindowButton(.miniaturizeButton)?.isHidden = true
|
|
165
|
-
window.standardWindowButton(.zoomButton)?.isHidden = true
|
|
166
|
-
window.backgroundColor = .clear
|
|
167
|
-
window.isOpaque = false
|
|
168
|
-
window.hasShadow = false
|
|
169
|
-
window.level = .floating
|
|
170
|
-
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
|
|
171
|
-
window.center()
|
|
172
|
-
window.makeKeyAndOrderFront(nil)
|
|
173
|
-
return window
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
private static func makeVerificationURL(code: CopilotDeviceFlow.DeviceCodeResponse) -> URL? {
|
|
177
|
-
if let complete = code.verificationUriComplete,
|
|
178
|
-
let completeURL = URL(string: complete)
|
|
179
|
-
{
|
|
180
|
-
return completeURL
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
guard var components = URLComponents(string: code.verificationUri) else {
|
|
184
|
-
return URL(string: code.verificationUri)
|
|
185
|
-
}
|
|
186
|
-
var items = components.queryItems ?? []
|
|
187
|
-
if !items.contains(where: { $0.name.caseInsensitiveCompare("user_code") == .orderedSame }) {
|
|
188
|
-
items.append(URLQueryItem(name: "user_code", value: code.userCode))
|
|
189
|
-
}
|
|
190
|
-
components.queryItems = items
|
|
191
|
-
return components.url ?? URL(string: code.verificationUri)
|
|
192
|
-
}
|
|
193
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import RunicCore
|
|
3
|
-
import RunicMacroSupport
|
|
4
|
-
import SwiftUI
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct CopilotProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .copilot
|
|
9
|
-
let supportsLoginFlow: Bool = true
|
|
10
|
-
|
|
11
|
-
@MainActor
|
|
12
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
13
|
-
[
|
|
14
|
-
ProviderSettingsFieldDescriptor(
|
|
15
|
-
id: "copilot-api-token",
|
|
16
|
-
title: "GitHub Login",
|
|
17
|
-
subtitle: "Stored in Keychain (encrypted). Sign in via GitHub Device Flow below.",
|
|
18
|
-
kind: .secure,
|
|
19
|
-
placeholder: "Sign in via button below",
|
|
20
|
-
binding: context.stringBinding(\.copilotAPIToken),
|
|
21
|
-
actions: [
|
|
22
|
-
ProviderSettingsActionDescriptor(
|
|
23
|
-
id: "copilot-import-vscode",
|
|
24
|
-
title: "Import VS Code login",
|
|
25
|
-
style: .link,
|
|
26
|
-
isVisible: { context.settings.copilotAPIToken.isEmpty },
|
|
27
|
-
perform: {
|
|
28
|
-
if let token = CopilotVSCodeTokenReader.token(allowUserInteraction: true) {
|
|
29
|
-
context.settings.copilotAPIToken = token
|
|
30
|
-
context.settings.setProviderEnabled(
|
|
31
|
-
provider: .copilot,
|
|
32
|
-
metadata: ProviderRegistry.shared.metadata[.copilot]!,
|
|
33
|
-
enabled: true)
|
|
34
|
-
let success = NSAlert()
|
|
35
|
-
success.messageText = "VS Code Login Imported"
|
|
36
|
-
success.informativeText = "Runic imported your GitHub Copilot token from VS Code."
|
|
37
|
-
success.runModal()
|
|
38
|
-
await context.store.refresh(trigger: .login)
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let failure = NSAlert()
|
|
43
|
-
failure.messageText = "Import Failed"
|
|
44
|
-
failure.informativeText = """
|
|
45
|
-
Runic could not access VS Code Copilot credentials.
|
|
46
|
-
You can sign in directly using "Sign in with GitHub" below.
|
|
47
|
-
"""
|
|
48
|
-
failure.runModal()
|
|
49
|
-
}),
|
|
50
|
-
ProviderSettingsActionDescriptor(
|
|
51
|
-
id: "copilot-import-gh-cli",
|
|
52
|
-
title: "Import GitHub CLI login",
|
|
53
|
-
style: .link,
|
|
54
|
-
isVisible: { context.settings.copilotAPIToken.isEmpty },
|
|
55
|
-
perform: {
|
|
56
|
-
if let token = CopilotGitHubCLITokenReader.token() {
|
|
57
|
-
context.settings.copilotAPIToken = token
|
|
58
|
-
context.settings.setProviderEnabled(
|
|
59
|
-
provider: .copilot,
|
|
60
|
-
metadata: ProviderRegistry.shared.metadata[.copilot]!,
|
|
61
|
-
enabled: true)
|
|
62
|
-
let success = NSAlert()
|
|
63
|
-
success.messageText = "GitHub CLI Login Imported"
|
|
64
|
-
success.informativeText = "Runic imported your GitHub Copilot token from GitHub CLI."
|
|
65
|
-
success.runModal()
|
|
66
|
-
await context.store.refresh(trigger: .login)
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
let failure = NSAlert()
|
|
71
|
-
failure.messageText = "Import Failed"
|
|
72
|
-
failure.informativeText = """
|
|
73
|
-
Runic could not find a valid GitHub CLI token.
|
|
74
|
-
Sign in with GitHub CLI (`gh auth login`) and retry, or use the GitHub sign in button.
|
|
75
|
-
"""
|
|
76
|
-
failure.runModal()
|
|
77
|
-
}),
|
|
78
|
-
ProviderSettingsActionDescriptor(
|
|
79
|
-
id: "copilot-login",
|
|
80
|
-
title: "Sign in with GitHub",
|
|
81
|
-
style: .bordered,
|
|
82
|
-
isVisible: { context.settings.copilotAPIToken.isEmpty },
|
|
83
|
-
perform: {
|
|
84
|
-
let didLogin = await CopilotLoginFlow.run(settings: context.settings)
|
|
85
|
-
guard didLogin else { return }
|
|
86
|
-
await context.store.refresh(trigger: .login)
|
|
87
|
-
}),
|
|
88
|
-
ProviderSettingsActionDescriptor(
|
|
89
|
-
id: "copilot-relogin",
|
|
90
|
-
title: "Sign in again",
|
|
91
|
-
style: .link,
|
|
92
|
-
isVisible: { !context.settings.copilotAPIToken.isEmpty },
|
|
93
|
-
perform: {
|
|
94
|
-
let didLogin = await CopilotLoginFlow.run(settings: context.settings)
|
|
95
|
-
guard didLogin else { return }
|
|
96
|
-
await context.store.refresh(trigger: .login)
|
|
97
|
-
}),
|
|
98
|
-
],
|
|
99
|
-
isVisible: nil),
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@MainActor
|
|
104
|
-
func runLoginFlow(context: ProviderLoginContext) async -> Bool {
|
|
105
|
-
let didLogin = await CopilotLoginFlow.run(settings: context.controller.settings)
|
|
106
|
-
guard didLogin else { return false }
|
|
107
|
-
await context.controller.store.refresh(trigger: .login)
|
|
108
|
-
return true
|
|
109
|
-
}
|
|
110
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import RunicCore
|
|
2
|
-
|
|
3
|
-
@MainActor
|
|
4
|
-
extension StatusItemController {
|
|
5
|
-
func runCursorLoginFlow() async {
|
|
6
|
-
let cursorRunner = CursorLoginRunner()
|
|
7
|
-
let phaseHandler: @Sendable (CursorLoginRunner.Phase) -> Void = { [weak self] phase in
|
|
8
|
-
Task { @MainActor in
|
|
9
|
-
switch phase {
|
|
10
|
-
case .loading, .waitingLogin:
|
|
11
|
-
self?.loginPhase = .waitingBrowser
|
|
12
|
-
case .success, .failed:
|
|
13
|
-
self?.loginPhase = .idle
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
let result = await cursorRunner.run(onPhaseChange: phaseHandler)
|
|
18
|
-
guard !Task.isCancelled else { return }
|
|
19
|
-
self.loginPhase = .idle
|
|
20
|
-
self.presentCursorLoginResult(result)
|
|
21
|
-
let outcome = self.describe(result.outcome)
|
|
22
|
-
self.loginLogger.info("Cursor login", metadata: ["outcome": outcome])
|
|
23
|
-
print("[Runic] Cursor login outcome=\(outcome)")
|
|
24
|
-
if case .success = result.outcome {
|
|
25
|
-
self.postLoginNotification(for: .cursor)
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import Foundation
|
|
2
|
-
import RunicCore
|
|
3
|
-
import RunicMacroSupport
|
|
4
|
-
|
|
5
|
-
@ProviderImplementationRegistration
|
|
6
|
-
struct CursorProviderImplementation: ProviderImplementation {
|
|
7
|
-
let id: UsageProvider = .cursor
|
|
8
|
-
let supportsLoginFlow: Bool = true
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func runLoginFlow(context: ProviderLoginContext) async -> Bool {
|
|
12
|
-
await context.controller.runCursorLoginFlow()
|
|
13
|
-
return true
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct DeepSeekProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .deepseek
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "deepseek-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.deepSeekAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import RunicCore
|
|
3
|
-
|
|
4
|
-
@MainActor
|
|
5
|
-
extension StatusItemController {
|
|
6
|
-
func runFactoryLoginFlow() async {
|
|
7
|
-
// Open Factory login page in default browser
|
|
8
|
-
if let url = URL(string: "https://app.factory.ai") {
|
|
9
|
-
NSWorkspace.shared.open(url)
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import Foundation
|
|
2
|
-
import RunicCore
|
|
3
|
-
import RunicMacroSupport
|
|
4
|
-
|
|
5
|
-
@ProviderImplementationRegistration
|
|
6
|
-
struct FactoryProviderImplementation: ProviderImplementation {
|
|
7
|
-
let id: UsageProvider = .factory
|
|
8
|
-
let supportsLoginFlow: Bool = true
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func runLoginFlow(context: ProviderLoginContext) async -> Bool {
|
|
12
|
-
await context.controller.runFactoryLoginFlow()
|
|
13
|
-
return true
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct FireworksProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .fireworks
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "fireworks-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.fireworksAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import RunicCore
|
|
2
|
-
|
|
3
|
-
@MainActor
|
|
4
|
-
extension StatusItemController {
|
|
5
|
-
func runGeminiLoginFlow() async {
|
|
6
|
-
let store = self.store
|
|
7
|
-
let result = await GeminiLoginRunner.run {
|
|
8
|
-
Task { @MainActor in
|
|
9
|
-
await store.refresh(trigger: .login, forceTokenUsage: true)
|
|
10
|
-
print("[Runic] Auto-refreshed after Gemini auth")
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
guard !Task.isCancelled else { return }
|
|
14
|
-
self.loginPhase = .idle
|
|
15
|
-
self.presentGeminiLoginResult(result)
|
|
16
|
-
let outcome = self.describe(result.outcome)
|
|
17
|
-
self.loginLogger.info("Gemini login", metadata: ["outcome": outcome])
|
|
18
|
-
print("[Runic] Gemini login outcome=\(outcome)")
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import Foundation
|
|
2
|
-
import RunicCore
|
|
3
|
-
import RunicMacroSupport
|
|
4
|
-
|
|
5
|
-
@ProviderImplementationRegistration
|
|
6
|
-
struct GeminiProviderImplementation: ProviderImplementation {
|
|
7
|
-
let id: UsageProvider = .gemini
|
|
8
|
-
let supportsLoginFlow: Bool = true
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func runLoginFlow(context: ProviderLoginContext) async -> Bool {
|
|
12
|
-
await context.controller.runGeminiLoginFlow()
|
|
13
|
-
return false
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct GroqProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .groq
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "groq-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.groqAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct KimiProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .kimi
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "kimi-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.kimiAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import Foundation
|
|
2
|
-
import RunicCore
|
|
3
|
-
import RunicMacroSupport
|
|
4
|
-
|
|
5
|
-
@ProviderImplementationRegistration
|
|
6
|
-
struct MiniMaxProviderImplementation: ProviderImplementation {
|
|
7
|
-
let id: UsageProvider = .minimax
|
|
8
|
-
|
|
9
|
-
@MainActor
|
|
10
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
11
|
-
[
|
|
12
|
-
ProviderSettingsFieldDescriptor(
|
|
13
|
-
id: "minimax-api-token",
|
|
14
|
-
title: "API Token",
|
|
15
|
-
subtitle: "Enter your MiniMax API Key.",
|
|
16
|
-
kind: .secure,
|
|
17
|
-
placeholder: "ey...",
|
|
18
|
-
binding: context.stringBinding(\.minimaxAPIToken),
|
|
19
|
-
actions: [],
|
|
20
|
-
isVisible: nil),
|
|
21
|
-
ProviderSettingsFieldDescriptor(
|
|
22
|
-
id: "minimax-cookie-header",
|
|
23
|
-
title: "Cookie header (manual)",
|
|
24
|
-
subtitle: "Paste a Cookie: header or Copy as cURL. Stored in Keychain. Press Return to save.",
|
|
25
|
-
kind: .secure,
|
|
26
|
-
placeholder: "Paste Cookie header or cURL…",
|
|
27
|
-
binding: context.stringBinding(\.minimaxCookieHeader),
|
|
28
|
-
actions: [],
|
|
29
|
-
isVisible: nil),
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct MistralProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .mistral
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "mistral-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.mistralAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct OpenRouterProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .openrouter
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "openrouter-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.openRouterAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct PerplexityProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .perplexity
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "perplexity-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.perplexityAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AppKit
|
|
2
|
-
import Foundation
|
|
3
|
-
import RunicCore
|
|
4
|
-
import RunicMacroSupport
|
|
5
|
-
|
|
6
|
-
@ProviderImplementationRegistration
|
|
7
|
-
struct SambaNovaProviderImplementation: ProviderImplementation {
|
|
8
|
-
let id: UsageProvider = .sambanova
|
|
9
|
-
|
|
10
|
-
@MainActor
|
|
11
|
-
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
12
|
-
[
|
|
13
|
-
ProviderSettingsFieldDescriptor(
|
|
14
|
-
id: "sambanova-api-token",
|
|
15
|
-
title: "API key",
|
|
16
|
-
subtitle: "Stored in Keychain (encrypted). Press Return to save.",
|
|
17
|
-
kind: .secure,
|
|
18
|
-
placeholder: "Paste key…",
|
|
19
|
-
binding: context.stringBinding(\.sambaNovaAPIToken),
|
|
20
|
-
actions: [],
|
|
21
|
-
isVisible: nil),
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import RunicCore
|
|
2
|
-
|
|
3
|
-
/// Source of truth for app-side provider implementations.
|
|
4
|
-
///
|
|
5
|
-
/// Keep provider registration centralized here. The rest of the app should *not* have to be updated when a new
|
|
6
|
-
/// provider is added, aside from enum/metadata work in `RunicCore`.
|
|
7
|
-
enum ProviderCatalog {
|
|
8
|
-
/// All provider implementations shipped in the app.
|
|
9
|
-
static let all: [any ProviderImplementation] = ProviderImplementationRegistry.all
|
|
10
|
-
|
|
11
|
-
/// Lookup for a single provider implementation.
|
|
12
|
-
static func implementation(for id: UsageProvider) -> (any ProviderImplementation)? {
|
|
13
|
-
ProviderImplementationRegistry.implementation(for: id)
|
|
14
|
-
}
|
|
15
|
-
}
|