@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.
Files changed (586) hide show
  1. package/CHANGELOG.md +267 -0
  2. package/LICENSE +373 -21
  3. package/README.md +98 -84
  4. package/THIRD-PARTY-NOTICES.md +651 -0
  5. package/package.json +14 -4
  6. package/.swiftformat +0 -50
  7. package/.swiftlint.yml +0 -160
  8. package/CONTRIBUTING.md +0 -456
  9. package/Icon.icns +0 -0
  10. package/Icon.icon/Assets/runic.png +0 -0
  11. package/Icon.icon/icon.json +0 -36
  12. package/Package.resolved +0 -51
  13. package/Package.swift +0 -136
  14. package/Packages/Helix/LICENSE +0 -21
  15. package/Packages/Helix/Package.swift +0 -29
  16. package/Packages/Helix/README.md +0 -976
  17. package/Packages/Helix/Sources/Helix/Binding.swift +0 -111
  18. package/Packages/Helix/Sources/Helix/CommandParser.swift +0 -160
  19. package/Packages/Helix/Sources/Helix/CommandSignature.swift +0 -117
  20. package/Packages/Helix/Sources/Helix/ExpressibleFromArgument.swift +0 -72
  21. package/Packages/Helix/Sources/Helix/HelpGenerator.swift +0 -175
  22. package/Packages/Helix/Sources/Helix/NameSpecification.swift +0 -98
  23. package/Packages/Helix/Sources/Helix/ParsableCommand.swift +0 -204
  24. package/Packages/Helix/Sources/Helix/Platform/DarwinPlatformContext.swift +0 -44
  25. package/Packages/Helix/Sources/Helix/Platform/LinuxPlatformContext.swift +0 -34
  26. package/Packages/Helix/Sources/Helix/Platform/PlatformContext+Default.swift +0 -91
  27. package/Packages/Helix/Sources/Helix/Platform/PlatformContext.swift +0 -94
  28. package/Packages/Helix/Sources/Helix/Platform/PlatformPath.swift +0 -167
  29. package/Packages/Helix/Sources/Helix/Platform/Stdio.swift +0 -99
  30. package/Packages/Helix/Sources/Helix/Platform/WebPlatformContext.swift +0 -146
  31. package/Packages/Helix/Sources/Helix/Platform/WindowsPlatformContext.swift +0 -97
  32. package/Packages/Helix/Sources/Helix/Program.swift +0 -204
  33. package/Packages/Helix/Sources/Helix/PropertyWrappers.swift +0 -367
  34. package/Packages/Silo/LICENSE +0 -21
  35. package/Packages/Silo/Package.swift +0 -34
  36. package/Packages/Silo/README.md +0 -466
  37. package/Packages/Silo/Sources/Silo/BinaryCookiesReader.swift +0 -169
  38. package/Packages/Silo/Sources/Silo/BrowserCookieAnalytics.swift +0 -365
  39. package/Packages/Silo/Sources/Silo/BrowserCookieBackends.swift +0 -594
  40. package/Packages/Silo/Sources/Silo/BrowserCookieClient.swift +0 -326
  41. package/Packages/Silo/Sources/Silo/BrowserCookieExport.swift +0 -154
  42. package/Packages/Silo/Sources/Silo/BrowserCookieImport.swift +0 -119
  43. package/Packages/Silo/Sources/Silo/BrowserCookieMockStore.swift +0 -121
  44. package/Packages/Silo/Sources/Silo/BrowserCookieModels.swift +0 -391
  45. package/Packages/Silo/Sources/Silo/ChromiumCookieReader.swift +0 -240
  46. package/Packages/Silo/Sources/Silo/CryptoSupport.swift +0 -86
  47. package/Packages/Silo/Sources/Silo/FirefoxCookieReader.swift +0 -172
  48. package/Packages/Silo/Sources/Silo/LinuxChromiumCookieReader.swift +0 -172
  49. package/Packages/Silo/Sources/Silo/LinuxSecretService.swift +0 -105
  50. package/Packages/Silo/Sources/Silo/MacOSChromiumCookieReader.swift +0 -191
  51. package/Packages/Silo/Sources/Silo/SQLiteSnapshot.swift +0 -41
  52. package/Packages/Silo/Sources/Silo/WindowsChromiumCookieReader.swift +0 -110
  53. package/RuniciOS/App/RuniciOSApp.swift +0 -105
  54. package/RuniciOS/Core/iOSUsageStore.swift +0 -192
  55. package/RuniciOS/Views/ProviderDetailView.swift +0 -312
  56. package/RuniciOS/Views/ProviderListView.swift +0 -228
  57. package/RuniciOS/Widgets/LargeWidget.swift +0 -367
  58. package/RuniciOS/Widgets/LiveActivity.swift +0 -342
  59. package/RuniciOS/Widgets/LockScreenWidget.swift +0 -273
  60. package/RuniciOS/Widgets/MediumWidget.swift +0 -370
  61. package/RuniciOS/Widgets/RunicWidget.swift +0 -274
  62. package/RuniciOS/Widgets/SmallWidget.swift +0 -281
  63. package/RuniciOS/Widgets/WidgetModels.swift +0 -285
  64. package/RuniciOS/Widgets/WidgetTimeline.swift +0 -270
  65. package/Scripts/CREATION-SUMMARY.md +0 -367
  66. package/Scripts/DIRECTORY-STRUCTURE.md +0 -358
  67. package/Scripts/GETTING-STARTED-CHECKLIST.md +0 -364
  68. package/Scripts/INDEX.md +0 -365
  69. package/Scripts/QUICK-REFERENCE.md +0 -164
  70. package/Scripts/README-SCRIPTS.md +0 -926
  71. package/Scripts/build-android.sh +0 -526
  72. package/Scripts/build-ios.sh +0 -529
  73. package/Scripts/build-macos.sh +0 -603
  74. package/Scripts/build-windows.sh +0 -504
  75. package/Scripts/build_icon.sh +0 -49
  76. package/Scripts/changelog-to-html.sh +0 -89
  77. package/Scripts/check-release-assets.sh +0 -10
  78. package/Scripts/ci-config.yml +0 -474
  79. package/Scripts/compile_and_run.sh +0 -219
  80. package/Scripts/compile_and_run_adhoc.sh +0 -4
  81. package/Scripts/docs-list.mjs +0 -119
  82. package/Scripts/make_appcast.sh +0 -58
  83. package/Scripts/package_app.sh +0 -409
  84. package/Scripts/release-lib.sh +0 -214
  85. package/Scripts/release.sh +0 -76
  86. package/Scripts/setup-all.sh +0 -387
  87. package/Scripts/setup-ios.sh +0 -404
  88. package/Scripts/setup-react-native.sh +0 -523
  89. package/Scripts/sign-and-notarize.sh +0 -122
  90. package/Scripts/test_live_update.sh +0 -38
  91. package/Scripts/validate_changelog.sh +0 -23
  92. package/Scripts/verify_appcast.sh +0 -92
  93. package/Sources/Runic/About.swift +0 -93
  94. package/Sources/Runic/AppNotifications.swift +0 -115
  95. package/Sources/Runic/Controllers/StatusItemController+Actions.swift +0 -666
  96. package/Sources/Runic/Controllers/StatusItemController+Animation.swift +0 -518
  97. package/Sources/Runic/Controllers/StatusItemController+ChartSubmenus.swift +0 -810
  98. package/Sources/Runic/Controllers/StatusItemController+CustomProviders.swift +0 -87
  99. package/Sources/Runic/Controllers/StatusItemController+Menu.swift +0 -1407
  100. package/Sources/Runic/Controllers/StatusItemController+MenuCards.swift +0 -337
  101. package/Sources/Runic/Controllers/StatusItemController+MenuHelpers.swift +0 -395
  102. package/Sources/Runic/Controllers/StatusItemController.swift +0 -360
  103. package/Sources/Runic/Core/BudgetNotificationManager.swift +0 -80
  104. package/Sources/Runic/Core/Login/ClaudeLoginRunner.swift +0 -103
  105. package/Sources/Runic/Core/Login/CodexLoginRunner.swift +0 -154
  106. package/Sources/Runic/Core/Login/CursorLoginRunner.swift +0 -206
  107. package/Sources/Runic/Core/Login/GeminiLoginRunner.swift +0 -92
  108. package/Sources/Runic/Core/Rendering/IconRenderer.swift +0 -1216
  109. package/Sources/Runic/Core/Rendering/IconView.swift +0 -120
  110. package/Sources/Runic/Core/Rendering/ProviderBrandIcon.swift +0 -71
  111. package/Sources/Runic/Core/RunicAnimation.swift +0 -53
  112. package/Sources/Runic/Core/RunicColors.swift +0 -73
  113. package/Sources/Runic/Core/RunicCornerRadius.swift +0 -15
  114. package/Sources/Runic/Core/RunicSpacing.swift +0 -68
  115. package/Sources/Runic/Core/Stores/AuggieTokenStore.swift +0 -119
  116. package/Sources/Runic/Core/Stores/AzureOpenAITokenStore.swift +0 -119
  117. package/Sources/Runic/Core/Stores/CerebrasTokenStore.swift +0 -119
  118. package/Sources/Runic/Core/Stores/CohereTokenStore.swift +0 -119
  119. package/Sources/Runic/Core/Stores/CopilotTokenStore.swift +0 -119
  120. package/Sources/Runic/Core/Stores/CustomProviderStore.swift +0 -158
  121. package/Sources/Runic/Core/Stores/DeepSeekTokenStore.swift +0 -119
  122. package/Sources/Runic/Core/Stores/FireworksTokenStore.swift +0 -119
  123. package/Sources/Runic/Core/Stores/GroqTokenStore.swift +0 -119
  124. package/Sources/Runic/Core/Stores/KimiTokenStore.swift +0 -119
  125. package/Sources/Runic/Core/Stores/MiniMaxCookieHeaderStore.swift +0 -119
  126. package/Sources/Runic/Core/Stores/MiniMaxGroupIDStore.swift +0 -119
  127. package/Sources/Runic/Core/Stores/MiniMaxTokenStore.swift +0 -119
  128. package/Sources/Runic/Core/Stores/MistralTokenStore.swift +0 -119
  129. package/Sources/Runic/Core/Stores/OpenRouterTokenStore.swift +0 -119
  130. package/Sources/Runic/Core/Stores/PerplexityTokenStore.swift +0 -119
  131. package/Sources/Runic/Core/Stores/ProviderToggleStore.swift +0 -30
  132. package/Sources/Runic/Core/Stores/QwenTokenStore.swift +0 -119
  133. package/Sources/Runic/Core/Stores/SambaNovaTokenStore.swift +0 -119
  134. package/Sources/Runic/Core/Stores/SettingsStore.swift +0 -1711
  135. package/Sources/Runic/Core/Stores/TogetherTokenStore.swift +0 -119
  136. package/Sources/Runic/Core/Stores/UsageStore+Accessors.swift +0 -20
  137. package/Sources/Runic/Core/Stores/UsageStore+Status.swift +0 -189
  138. package/Sources/Runic/Core/Stores/UsageStore+TokenCost.swift +0 -33
  139. package/Sources/Runic/Core/Stores/UsageStore+WidgetSnapshot.swift +0 -67
  140. package/Sources/Runic/Core/Stores/UsageStore.swift +0 -3605
  141. package/Sources/Runic/Core/Stores/XAITokenStore.swift +0 -119
  142. package/Sources/Runic/Core/Stores/ZaiTokenStore.swift +0 -118
  143. package/Sources/Runic/Core/UsageExporter.swift +0 -193
  144. package/Sources/Runic/Date+RelativeDescription.swift +0 -21
  145. package/Sources/Runic/HiddenWindowView.swift +0 -32
  146. package/Sources/Runic/InstallOrigin.swift +0 -9
  147. package/Sources/Runic/KeyboardShortcuts+Names.swift +0 -6
  148. package/Sources/Runic/MouseLocationReader.swift +0 -65
  149. package/Sources/Runic/Notifications+Runic.swift +0 -6
  150. package/Sources/Runic/OpenAICreditsPurchaseWindowController.swift +0 -503
  151. package/Sources/Runic/ProviderRegistry.swift +0 -100
  152. package/Sources/Runic/ProviderSwitcherButtons.swift +0 -267
  153. package/Sources/Runic/Providers/Antigravity/AntigravityLoginFlow.swift +0 -11
  154. package/Sources/Runic/Providers/Antigravity/AntigravityProviderImplementation.swift +0 -14
  155. package/Sources/Runic/Providers/Auggie/AuggieProviderImplementation.swift +0 -24
  156. package/Sources/Runic/Providers/Azure/AzureProviderImplementation.swift +0 -52
  157. package/Sources/Runic/Providers/Bedrock/BedrockProviderImplementation.swift +0 -42
  158. package/Sources/Runic/Providers/Cerebras/CerebrasProviderImplementation.swift +0 -24
  159. package/Sources/Runic/Providers/Claude/ClaudeLoginFlow.swift +0 -26
  160. package/Sources/Runic/Providers/Claude/ClaudeProviderImplementation.swift +0 -14
  161. package/Sources/Runic/Providers/Codex/CodexLoginFlow.swift +0 -18
  162. package/Sources/Runic/Providers/Codex/CodexProviderImplementation.swift +0 -15
  163. package/Sources/Runic/Providers/Cohere/CohereProviderImplementation.swift +0 -24
  164. package/Sources/Runic/Providers/Copilot/CopilotLoginFlow.swift +0 -193
  165. package/Sources/Runic/Providers/Copilot/CopilotProviderImplementation.swift +0 -110
  166. package/Sources/Runic/Providers/Cursor/CursorLoginFlow.swift +0 -28
  167. package/Sources/Runic/Providers/Cursor/CursorProviderImplementation.swift +0 -15
  168. package/Sources/Runic/Providers/DeepSeek/DeepSeekProviderImplementation.swift +0 -24
  169. package/Sources/Runic/Providers/Factory/FactoryLoginFlow.swift +0 -12
  170. package/Sources/Runic/Providers/Factory/FactoryProviderImplementation.swift +0 -15
  171. package/Sources/Runic/Providers/Fireworks/FireworksProviderImplementation.swift +0 -24
  172. package/Sources/Runic/Providers/Gemini/GeminiLoginFlow.swift +0 -20
  173. package/Sources/Runic/Providers/Gemini/GeminiProviderImplementation.swift +0 -15
  174. package/Sources/Runic/Providers/Groq/GroqProviderImplementation.swift +0 -24
  175. package/Sources/Runic/Providers/Kimi/KimiProviderImplementation.swift +0 -24
  176. package/Sources/Runic/Providers/MiniMax/MiniMaxProviderImplementation.swift +0 -32
  177. package/Sources/Runic/Providers/Mistral/MistralProviderImplementation.swift +0 -24
  178. package/Sources/Runic/Providers/OpenRouter/OpenRouterProviderImplementation.swift +0 -24
  179. package/Sources/Runic/Providers/Perplexity/PerplexityProviderImplementation.swift +0 -24
  180. package/Sources/Runic/Providers/SambaNova/SambaNovaProviderImplementation.swift +0 -24
  181. package/Sources/Runic/Providers/Shared/ProviderCatalog.swift +0 -15
  182. package/Sources/Runic/Providers/Shared/ProviderImplementation.swift +0 -48
  183. package/Sources/Runic/Providers/Shared/ProviderImplementationRegistry.swift +0 -66
  184. package/Sources/Runic/Providers/Shared/ProviderLoginFlow.swift +0 -12
  185. package/Sources/Runic/Providers/Shared/ProviderSettingsDescriptors.swift +0 -99
  186. package/Sources/Runic/Providers/Shared/SystemSettingsLinks.swift +0 -18
  187. package/Sources/Runic/Providers/Together/TogetherProviderImplementation.swift +0 -24
  188. package/Sources/Runic/Providers/XAI/XAIProviderImplementation.swift +0 -24
  189. package/Sources/Runic/Providers/Zai/ZaiProviderImplementation.swift +0 -24
  190. package/Sources/Runic/Resources/ProviderIcon-antigravity.svg +0 -2
  191. package/Sources/Runic/Resources/ProviderIcon-auggie.svg +0 -3
  192. package/Sources/Runic/Resources/ProviderIcon-azure.svg +0 -5
  193. package/Sources/Runic/Resources/ProviderIcon-bedrock.svg +0 -7
  194. package/Sources/Runic/Resources/ProviderIcon-cerebras.svg +0 -3
  195. package/Sources/Runic/Resources/ProviderIcon-claude.svg +0 -1
  196. package/Sources/Runic/Resources/ProviderIcon-codex.svg +0 -1
  197. package/Sources/Runic/Resources/ProviderIcon-cohere.svg +0 -3
  198. package/Sources/Runic/Resources/ProviderIcon-copilot.svg +0 -1
  199. package/Sources/Runic/Resources/ProviderIcon-cursor.svg +0 -3
  200. package/Sources/Runic/Resources/ProviderIcon-deepseek.svg +0 -4
  201. package/Sources/Runic/Resources/ProviderIcon-factory.svg +0 -3
  202. package/Sources/Runic/Resources/ProviderIcon-fireworks.svg +0 -3
  203. package/Sources/Runic/Resources/ProviderIcon-gemini.svg +0 -1
  204. package/Sources/Runic/Resources/ProviderIcon-groq.svg +0 -1
  205. package/Sources/Runic/Resources/ProviderIcon-kimi.svg +0 -4
  206. package/Sources/Runic/Resources/ProviderIcon-minimax.svg +0 -1
  207. package/Sources/Runic/Resources/ProviderIcon-mistral.svg +0 -5
  208. package/Sources/Runic/Resources/ProviderIcon-openrouter.svg +0 -7
  209. package/Sources/Runic/Resources/ProviderIcon-perplexity.svg +0 -4
  210. package/Sources/Runic/Resources/ProviderIcon-qwen.svg +0 -9
  211. package/Sources/Runic/Resources/ProviderIcon-sambanova.svg +0 -4
  212. package/Sources/Runic/Resources/ProviderIcon-together.svg +0 -5
  213. package/Sources/Runic/Resources/ProviderIcon-vertexai.svg +0 -17
  214. package/Sources/Runic/Resources/ProviderIcon-xai.svg +0 -3
  215. package/Sources/Runic/Resources/ProviderIcon-zai.svg +0 -5
  216. package/Sources/Runic/Resources/RunicMenubarIcon.svg +0 -7
  217. package/Sources/Runic/Resources/provider-context-windows.json +0 -20
  218. package/Sources/Runic/RunicApp.swift +0 -357
  219. package/Sources/Runic/SessionQuotaNotifications.swift +0 -58
  220. package/Sources/Runic/UsagePaceText.swift +0 -52
  221. package/Sources/Runic/UsageProgressBar.swift +0 -224
  222. package/Sources/Runic/Utilities/DisplayLink.swift +0 -96
  223. package/Sources/Runic/Utilities/LoadingPattern.swift +0 -60
  224. package/Sources/Runic/Utilities/PerformanceConstants.swift +0 -85
  225. package/Sources/Runic/Views/Menu/AlertsMenuView.swift +0 -256
  226. package/Sources/Runic/Views/Menu/ChartPanelStyle.swift +0 -22
  227. package/Sources/Runic/Views/Menu/CostComparativeChartMenuView.swift +0 -275
  228. package/Sources/Runic/Views/Menu/CostHistoryChartMenuView.swift +0 -377
  229. package/Sources/Runic/Views/Menu/CreditsHistoryChartMenuView.swift +0 -312
  230. package/Sources/Runic/Views/Menu/EfficiencyMetricsMenuView.swift +0 -312
  231. package/Sources/Runic/Views/Menu/HeroStatCardsMenuView.swift +0 -228
  232. package/Sources/Runic/Views/Menu/HourlyActivityChartMenuView.swift +0 -228
  233. package/Sources/Runic/Views/Menu/InlineUsageChartView.swift +0 -155
  234. package/Sources/Runic/Views/Menu/MenuCardEntranceModifier.swift +0 -64
  235. package/Sources/Runic/Views/Menu/MenuCardSidebarView.swift +0 -268
  236. package/Sources/Runic/Views/Menu/MenuCardSkeletonView.swift +0 -104
  237. package/Sources/Runic/Views/Menu/MenuCardView.swift +0 -1900
  238. package/Sources/Runic/Views/Menu/MenuContent.swift +0 -150
  239. package/Sources/Runic/Views/Menu/MenuDescriptor.swift +0 -369
  240. package/Sources/Runic/Views/Menu/MenuHighlightStyle.swift +0 -42
  241. package/Sources/Runic/Views/Menu/ModelBreakdownMenuView.swift +0 -235
  242. package/Sources/Runic/Views/Menu/OverviewMenuView.swift +0 -278
  243. package/Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift +0 -209
  244. package/Sources/Runic/Views/Menu/ProjectBudgetMenuView.swift +0 -220
  245. package/Sources/Runic/Views/Menu/ProviderTabBarView.swift +0 -88
  246. package/Sources/Runic/Views/Menu/SubscriptionUtilizationChartMenuView.swift +0 -201
  247. package/Sources/Runic/Views/Menu/UsageBreakdownChartMenuView.swift +0 -398
  248. package/Sources/Runic/Views/Menu/UsageHeatmapMenuView.swift +0 -232
  249. package/Sources/Runic/Views/Menu/UsageTimelineChartMenuView.swift +0 -364
  250. package/Sources/Runic/Views/Menu/UsageWindowComparisonChartMenuView.swift +0 -190
  251. package/Sources/Runic/Views/Menu/WeeklyActivityChartMenuView.swift +0 -132
  252. package/Sources/Runic/Views/Performance/PerformanceDashboardView.swift +0 -618
  253. package/Sources/Runic/Views/Preferences/LiquidComponents.swift +0 -305
  254. package/Sources/Runic/Views/Preferences/PreferencesAboutPane.swift +0 -271
  255. package/Sources/Runic/Views/Preferences/PreferencesAdvancedPane.swift +0 -268
  256. package/Sources/Runic/Views/Preferences/PreferencesAlertsPane.swift +0 -422
  257. package/Sources/Runic/Views/Preferences/PreferencesAnalyticsPane.swift +0 -641
  258. package/Sources/Runic/Views/Preferences/PreferencesBudgetsPane.swift +0 -344
  259. package/Sources/Runic/Views/Preferences/PreferencesComponents.swift +0 -230
  260. package/Sources/Runic/Views/Preferences/PreferencesCustomProvidersPane.swift +0 -322
  261. package/Sources/Runic/Views/Preferences/PreferencesDebugPane.swift +0 -469
  262. package/Sources/Runic/Views/Preferences/PreferencesGeneralPane.swift +0 -231
  263. package/Sources/Runic/Views/Preferences/PreferencesHelpPane.swift +0 -50
  264. package/Sources/Runic/Views/Preferences/PreferencesIntegrationsPane.swift +0 -567
  265. package/Sources/Runic/Views/Preferences/PreferencesPerformancePane.swift +0 -288
  266. package/Sources/Runic/Views/Preferences/PreferencesProvidersPane.swift +0 -3435
  267. package/Sources/Runic/Views/Preferences/PreferencesSelection.swift +0 -25
  268. package/Sources/Runic/Views/Preferences/PreferencesSyncPane.swift +0 -59
  269. package/Sources/Runic/Views/Preferences/PreferencesView.swift +0 -206
  270. package/Sources/Runic/Views/Rating/QualityRatingView.swift +0 -238
  271. package/Sources/Runic/Views/Team/TeamDashboardView.swift +0 -371
  272. package/Sources/Runic/Views/Team/TeamInviteSheet.swift +0 -175
  273. package/Sources/Runic/Views/Team/TeamManagementView.swift +0 -761
  274. package/Sources/Runic/Views/Team/TeamMemberRow.swift +0 -181
  275. package/Sources/RunicCLI/CLIEntry.swift +0 -942
  276. package/Sources/RunicCLI/CLIRenderer.swift +0 -87
  277. package/Sources/RunicCLI/Commands/EnhancedUsageCommand.swift +0 -588
  278. package/Sources/RunicCLI/Commands/ModelsCommand.swift +0 -362
  279. package/Sources/RunicCLI/Commands/ProjectsCommand.swift +0 -439
  280. package/Sources/RunicCLI/Commands/ResetCommand.swift +0 -429
  281. package/Sources/RunicCLI/Commands/UsageLedgerSourceFactory.swift +0 -168
  282. package/Sources/RunicClaudeWatchdog/main.swift +0 -122
  283. package/Sources/RunicClaudeWebProbe/main.swift +0 -62
  284. package/Sources/RunicCore/AlertRuleStore.swift +0 -187
  285. package/Sources/RunicCore/BrowserCookieImportOrder.swift +0 -25
  286. package/Sources/RunicCore/CopilotUsageModels.swift +0 -84
  287. package/Sources/RunicCore/CostUsageFetcher.swift +0 -119
  288. package/Sources/RunicCore/CostUsageModels.swift +0 -479
  289. package/Sources/RunicCore/CreditsModels.swift +0 -50
  290. package/Sources/RunicCore/CustomProviders/CustomProviderModels.swift +0 -269
  291. package/Sources/RunicCore/CustomProviders/GenericProviderFetcher.swift +0 -633
  292. package/Sources/RunicCore/CustomProviders/ProviderTemplates.swift +0 -500
  293. package/Sources/RunicCore/Host/PTY/TTYCommandRunner.swift +0 -679
  294. package/Sources/RunicCore/Host/Process/SubprocessRunner.swift +0 -135
  295. package/Sources/RunicCore/Integrations/GitHubIntegration.swift +0 -173
  296. package/Sources/RunicCore/Logging/JSONStderrLogHandler.swift +0 -79
  297. package/Sources/RunicCore/Logging/OSLogLogHandler.swift +0 -86
  298. package/Sources/RunicCore/Logging/RunicLog.swift +0 -123
  299. package/Sources/RunicCore/Models/EnhancedUsageModels.swift +0 -371
  300. package/Sources/RunicCore/OpenAIDashboardModels.swift +0 -210
  301. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardBrowserCookieImporter.swift +0 -676
  302. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardFetcher.swift +0 -492
  303. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardNavigationDelegate.swift +0 -51
  304. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardParser.swift +0 -483
  305. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardScrapeScript.swift +0 -558
  306. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebViewCache.swift +0 -204
  307. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebsiteDataStore.swift +0 -78
  308. package/Sources/RunicCore/PathEnvironment.swift +0 -482
  309. package/Sources/RunicCore/Performance/PerformanceModels.swift +0 -371
  310. package/Sources/RunicCore/Performance/PerformanceStorageImpl.swift +0 -409
  311. package/Sources/RunicCore/Policy/UsagePolicyEngine.swift +0 -178
  312. package/Sources/RunicCore/ProjectBudgetStore.swift +0 -99
  313. package/Sources/RunicCore/ProviderCostSnapshot.swift +0 -29
  314. package/Sources/RunicCore/Providers/Antigravity/AntigravityProviderDescriptor.swift +0 -66
  315. package/Sources/RunicCore/Providers/Antigravity/AntigravityStatusProbe.swift +0 -685
  316. package/Sources/RunicCore/Providers/Auggie/AuggieProviderDescriptor.swift +0 -83
  317. package/Sources/RunicCore/Providers/Auggie/AuggieUsageFetcher.swift +0 -142
  318. package/Sources/RunicCore/Providers/Azure/AzureProviderDescriptor.swift +0 -141
  319. package/Sources/RunicCore/Providers/Azure/AzureUsageFetcher.swift +0 -188
  320. package/Sources/RunicCore/Providers/Bedrock/BedrockProviderDescriptor.swift +0 -126
  321. package/Sources/RunicCore/Providers/Bedrock/BedrockUsageFetcher.swift +0 -168
  322. package/Sources/RunicCore/Providers/Cerebras/CerebrasProviderDescriptor.swift +0 -84
  323. package/Sources/RunicCore/Providers/Cerebras/CerebrasUsageFetcher.swift +0 -75
  324. package/Sources/RunicCore/Providers/Claude/ClaudeCLISession.swift +0 -332
  325. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthCredentials.swift +0 -180
  326. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthUsageFetcher.swift +0 -137
  327. package/Sources/RunicCore/Providers/Claude/ClaudeProviderDescriptor.swift +0 -207
  328. package/Sources/RunicCore/Providers/Claude/ClaudeStatusProbe.swift +0 -654
  329. package/Sources/RunicCore/Providers/Claude/ClaudeUsageDataSource.swift +0 -28
  330. package/Sources/RunicCore/Providers/Claude/ClaudeUsageFetcher.swift +0 -480
  331. package/Sources/RunicCore/Providers/Claude/ClaudeWeb/ClaudeWebAPIFetcher.swift +0 -780
  332. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthCredentials.swift +0 -147
  333. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthUsageFetcher.swift +0 -280
  334. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexTokenRefresher.swift +0 -100
  335. package/Sources/RunicCore/Providers/Codex/CodexProviderDescriptor.swift +0 -243
  336. package/Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift +0 -125
  337. package/Sources/RunicCore/Providers/Codex/CodexUsageDataSource.swift +0 -24
  338. package/Sources/RunicCore/Providers/Codex/CodexWebDashboardStrategy.swift +0 -181
  339. package/Sources/RunicCore/Providers/Cohere/CohereProviderDescriptor.swift +0 -83
  340. package/Sources/RunicCore/Providers/Cohere/CohereUsageFetcher.swift +0 -85
  341. package/Sources/RunicCore/Providers/Copilot/CopilotDeviceFlow.swift +0 -123
  342. package/Sources/RunicCore/Providers/Copilot/CopilotGitHubCLITokenReader.swift +0 -114
  343. package/Sources/RunicCore/Providers/Copilot/CopilotProviderDescriptor.swift +0 -100
  344. package/Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift +0 -291
  345. package/Sources/RunicCore/Providers/Copilot/CopilotVSCodeTokenReader.swift +0 -386
  346. package/Sources/RunicCore/Providers/Cursor/CursorProviderDescriptor.swift +0 -65
  347. package/Sources/RunicCore/Providers/Cursor/CursorStatusProbe.swift +0 -595
  348. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekProviderDescriptor.swift +0 -85
  349. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekUsageFetcher.swift +0 -108
  350. package/Sources/RunicCore/Providers/Factory/FactoryLocalStorageImporter.swift +0 -398
  351. package/Sources/RunicCore/Providers/Factory/FactoryProviderDescriptor.swift +0 -65
  352. package/Sources/RunicCore/Providers/Factory/FactoryStatusProbe.swift +0 -1276
  353. package/Sources/RunicCore/Providers/Fireworks/FireworksProviderDescriptor.swift +0 -84
  354. package/Sources/RunicCore/Providers/Fireworks/FireworksUsageFetcher.swift +0 -75
  355. package/Sources/RunicCore/Providers/Gemini/GeminiProviderDescriptor.swift +0 -65
  356. package/Sources/RunicCore/Providers/Gemini/GeminiStatusProbe.swift +0 -836
  357. package/Sources/RunicCore/Providers/Groq/GroqProviderDescriptor.swift +0 -83
  358. package/Sources/RunicCore/Providers/Groq/GroqUsageFetcher.swift +0 -71
  359. package/Sources/RunicCore/Providers/Kimi/KimiProviderDescriptor.swift +0 -83
  360. package/Sources/RunicCore/Providers/Kimi/KimiUsageFetcher.swift +0 -77
  361. package/Sources/RunicCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift +0 -92
  362. package/Sources/RunicCore/Providers/MiniMax/MiniMaxSettingsReader.swift +0 -54
  363. package/Sources/RunicCore/Providers/MiniMax/MiniMaxUsageFetcher.swift +0 -168
  364. package/Sources/RunicCore/Providers/MiniMax/MiniMaxWebUsageFetcher.swift +0 -911
  365. package/Sources/RunicCore/Providers/Mistral/MistralProviderDescriptor.swift +0 -84
  366. package/Sources/RunicCore/Providers/Mistral/MistralUsageFetcher.swift +0 -75
  367. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterProviderDescriptor.swift +0 -87
  368. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterUsageFetcher.swift +0 -203
  369. package/Sources/RunicCore/Providers/Perplexity/PerplexityProviderDescriptor.swift +0 -84
  370. package/Sources/RunicCore/Providers/Perplexity/PerplexityUsageFetcher.swift +0 -75
  371. package/Sources/RunicCore/Providers/ProviderBranding.swift +0 -25
  372. package/Sources/RunicCore/Providers/ProviderCLIConfig.swift +0 -17
  373. package/Sources/RunicCore/Providers/ProviderDescriptor.swift +0 -129
  374. package/Sources/RunicCore/Providers/ProviderFetchPlan.swift +0 -263
  375. package/Sources/RunicCore/Providers/ProviderSettingsSnapshot.swift +0 -98
  376. package/Sources/RunicCore/Providers/ProviderTokenResolver.swift +0 -501
  377. package/Sources/RunicCore/Providers/ProviderVersionDetector.swift +0 -68
  378. package/Sources/RunicCore/Providers/Providers.swift +0 -184
  379. package/Sources/RunicCore/Providers/Qwen/QwenProviderDescriptor.swift +0 -84
  380. package/Sources/RunicCore/Providers/Qwen/QwenSettingsReader.swift +0 -30
  381. package/Sources/RunicCore/Providers/Qwen/QwenUsageStats.swift +0 -315
  382. package/Sources/RunicCore/Providers/SambaNova/SambaNovaProviderDescriptor.swift +0 -84
  383. package/Sources/RunicCore/Providers/SambaNova/SambaNovaUsageFetcher.swift +0 -75
  384. package/Sources/RunicCore/Providers/Together/TogetherProviderDescriptor.swift +0 -83
  385. package/Sources/RunicCore/Providers/Together/TogetherUsageFetcher.swift +0 -75
  386. package/Sources/RunicCore/Providers/VertexAI/VertexAIProviderDescriptor.swift +0 -123
  387. package/Sources/RunicCore/Providers/VertexAI/VertexAISettingsReader.swift +0 -48
  388. package/Sources/RunicCore/Providers/VertexAI/VertexAIUsageFetcher.swift +0 -144
  389. package/Sources/RunicCore/Providers/XAI/XAIProviderDescriptor.swift +0 -83
  390. package/Sources/RunicCore/Providers/XAI/XAIUsageFetcher.swift +0 -75
  391. package/Sources/RunicCore/Providers/Zai/ZaiProviderDescriptor.swift +0 -72
  392. package/Sources/RunicCore/Providers/Zai/ZaiSettingsReader.swift +0 -41
  393. package/Sources/RunicCore/Providers/Zai/ZaiUsageStats.swift +0 -718
  394. package/Sources/RunicCore/Sync/BackgroundSyncManager.swift +0 -385
  395. package/Sources/RunicCore/Sync/SyncConflictResolver.swift +0 -310
  396. package/Sources/RunicCore/Sync/SyncProtocol.swift +0 -288
  397. package/Sources/RunicCore/Sync/SyncRecord.swift +0 -405
  398. package/Sources/RunicCore/Sync/SyncUsageExample.swift +0 -294
  399. package/Sources/RunicCore/Sync/TeamSyncRecords.swift +0 -775
  400. package/Sources/RunicCore/Sync/iCloudSyncEngine.swift +0 -333
  401. package/Sources/RunicCore/Team/TeamModels.swift +0 -583
  402. package/Sources/RunicCore/Team/TeamShowbackExporter.swift +0 -495
  403. package/Sources/RunicCore/Team/TeamStore.swift +0 -792
  404. package/Sources/RunicCore/TextParsing.swift +0 -55
  405. package/Sources/RunicCore/UsageFetcher.swift +0 -694
  406. package/Sources/RunicCore/UsageFormatter.swift +0 -410
  407. package/Sources/RunicCore/UsageLedger/ClaudeUsageLogSource.swift +0 -427
  408. package/Sources/RunicCore/UsageLedger/CodexUsageLogSource.swift +0 -494
  409. package/Sources/RunicCore/UsageLedger/LedgerCache.swift +0 -158
  410. package/Sources/RunicCore/UsageLedger/OTelGenAILedgerAdapter.swift +0 -550
  411. package/Sources/RunicCore/UsageLedger/UsageLedger.swift +0 -29
  412. package/Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift +0 -660
  413. package/Sources/RunicCore/UsageLedger/UsageLedgerInsightsAdvisor.swift +0 -209
  414. package/Sources/RunicCore/UsageLedger/UsageLedgerModels.swift +0 -417
  415. package/Sources/RunicCore/UsageLedger/UsageLedgerProjectIdentity.swift +0 -245
  416. package/Sources/RunicCore/UsagePace.swift +0 -81
  417. package/Sources/RunicCore/Vendored/CostUsage/CostUsageCache.swift +0 -73
  418. package/Sources/RunicCore/Vendored/CostUsage/CostUsageJsonl.swift +0 -74
  419. package/Sources/RunicCore/Vendored/CostUsage/CostUsagePricing.swift +0 -208
  420. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Claude.swift +0 -455
  421. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Timestamp.swift +0 -132
  422. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner.swift +0 -589
  423. package/Sources/RunicCore/WidgetSnapshot.swift +0 -183
  424. package/Sources/RunicMacroSupport/ProviderRegistrationMacros.swift +0 -14
  425. package/Sources/RunicMacros/ProviderRegistrationMacros.swift +0 -216
  426. package/Sources/RunicWidget/RunicWidgetBundle.swift +0 -79
  427. package/Sources/RunicWidget/RunicWidgetProvider.swift +0 -283
  428. package/Sources/RunicWidget/RunicWidgetViews.swift +0 -680
  429. package/Tests/RunicTests/AntigravityStatusProbeTests.swift +0 -50
  430. package/Tests/RunicTests/AppDelegateTests.swift +0 -43
  431. package/Tests/RunicTests/BrowserCookieOrderLabelTests.swift +0 -22
  432. package/Tests/RunicTests/CLIArgumentParsingTests.swift +0 -70
  433. package/Tests/RunicTests/CLICostTests.swift +0 -65
  434. package/Tests/RunicTests/CLIProviderSelectionTests.swift +0 -22
  435. package/Tests/RunicTests/CLISnapshotTests.swift +0 -72
  436. package/Tests/RunicTests/CLIWebFallbackTests.swift +0 -58
  437. package/Tests/RunicTests/ClaudeOAuthTests.swift +0 -164
  438. package/Tests/RunicTests/ClaudeResilienceTests.swift +0 -30
  439. package/Tests/RunicTests/ClaudeUsageTests.swift +0 -370
  440. package/Tests/RunicTests/CodexOAuthTests.swift +0 -122
  441. package/Tests/RunicTests/CodexUsageLogSourceTests.swift +0 -82
  442. package/Tests/RunicTests/CopilotTokenResolverTests.swift +0 -75
  443. package/Tests/RunicTests/CopilotVSCodeTokenReaderTests.swift +0 -75
  444. package/Tests/RunicTests/CostUsageDecodingTests.swift +0 -394
  445. package/Tests/RunicTests/CostUsagePricingTests.swift +0 -50
  446. package/Tests/RunicTests/CostUsageScannerTests.swift +0 -700
  447. package/Tests/RunicTests/CursorStatusProbeTests.swift +0 -323
  448. package/Tests/RunicTests/FactoryStatusProbeTests.swift +0 -69
  449. package/Tests/RunicTests/GeminiAPITestHelpers.swift +0 -94
  450. package/Tests/RunicTests/GeminiLoginAlertTests.swift +0 -28
  451. package/Tests/RunicTests/GeminiStatusProbeAPITests.swift +0 -283
  452. package/Tests/RunicTests/GeminiStatusProbePlanTests.swift +0 -279
  453. package/Tests/RunicTests/GeminiStatusProbeTests.swift +0 -233
  454. package/Tests/RunicTests/GeminiTestEnvironment.swift +0 -87
  455. package/Tests/RunicTests/GoogleWorkspaceStatusTests.swift +0 -73
  456. package/Tests/RunicTests/InstallOriginTests.swift +0 -18
  457. package/Tests/RunicTests/KeyboardShortcutsBundleTests.swift +0 -9
  458. package/Tests/RunicTests/LiveAccountTests.swift +0 -24
  459. package/Tests/RunicTests/LoadingPatternTests.swift +0 -35
  460. package/Tests/RunicTests/MenuCardModelTests.swift +0 -545
  461. package/Tests/RunicTests/MiniMaxCookieHeaderStoreTestSupport.swift +0 -8
  462. package/Tests/RunicTests/MiniMaxGroupIDStoreTestSupport.swift +0 -8
  463. package/Tests/RunicTests/MiniMaxParsingTests.swift +0 -68
  464. package/Tests/RunicTests/MiniMaxTokenStoreTestSupport.swift +0 -8
  465. package/Tests/RunicTests/OTelGenAILedgerAdapterTests.swift +0 -112
  466. package/Tests/RunicTests/OpenAIDashboardBrowserCookieImporterTests.swift +0 -17
  467. package/Tests/RunicTests/OpenAIDashboardFetcherCreditsWaitTests.swift +0 -75
  468. package/Tests/RunicTests/OpenAIDashboardOffscreenHostTests.swift +0 -27
  469. package/Tests/RunicTests/OpenAIDashboardParserTests.swift +0 -134
  470. package/Tests/RunicTests/OpenAIWebAccountSwitchTests.swift +0 -53
  471. package/Tests/RunicTests/OpenRouterTokenStoreTestSupport.swift +0 -92
  472. package/Tests/RunicTests/PathBuilderTests.swift +0 -237
  473. package/Tests/RunicTests/ProviderFetchPipelineTests.swift +0 -160
  474. package/Tests/RunicTests/ProviderIconResourcesTests.swift +0 -38
  475. package/Tests/RunicTests/ProviderMetadataStatusLinkTests.swift +0 -16
  476. package/Tests/RunicTests/ProviderRegistryTests.swift +0 -29
  477. package/Tests/RunicTests/ProviderSettingsDescriptorTests.swift +0 -202
  478. package/Tests/RunicTests/ProviderToggleStoreTests.swift +0 -51
  479. package/Tests/RunicTests/RunicTests.swift +0 -120
  480. package/Tests/RunicTests/SessionQuotaNotificationLogicTests.swift +0 -36
  481. package/Tests/RunicTests/SettingsStoreTests.swift +0 -161
  482. package/Tests/RunicTests/StatusItemAnimationTests.swift +0 -49
  483. package/Tests/RunicTests/StatusMenuTests.swift +0 -434
  484. package/Tests/RunicTests/StatusProbeTests.swift +0 -377
  485. package/Tests/RunicTests/SubprocessRunnerTests.swift +0 -20
  486. package/Tests/RunicTests/SubscriptionDetectionTests.swift +0 -65
  487. package/Tests/RunicTests/TTYCommandRunnerTests.swift +0 -148
  488. package/Tests/RunicTests/TTYIntegrationTests.swift +0 -41
  489. package/Tests/RunicTests/TeamShowbackExporterTests.swift +0 -159
  490. package/Tests/RunicTests/TextParsingTests.swift +0 -12
  491. package/Tests/RunicTests/UsageFormatterTests.swift +0 -112
  492. package/Tests/RunicTests/UsageLedgerAnomalyDetectionTests.swift +0 -172
  493. package/Tests/RunicTests/UsageLedgerForecastTests.swift +0 -213
  494. package/Tests/RunicTests/UsageLedgerInsightsAdvisorTests.swift +0 -83
  495. package/Tests/RunicTests/UsageLedgerProjectNameTests.swift +0 -170
  496. package/Tests/RunicTests/UsagePaceTests.swift +0 -77
  497. package/Tests/RunicTests/UsagePaceTextTests.swift +0 -109
  498. package/Tests/RunicTests/UsagePolicyEngineTests.swift +0 -91
  499. package/Tests/RunicTests/WidgetSnapshotTests.swift +0 -45
  500. package/Tests/RunicTests/ZaiProviderTests.swift +0 -61
  501. package/Tests/RunicTests/ZaiTokenStoreTestSupport.swift +0 -6
  502. package/TestsLinux/PlatformGatingTests.swift +0 -46
  503. package/appcast.xml +0 -144
  504. package/assets/logo-concept-stack.svg +0 -24
  505. package/assets/logo-minimal-bars.svg +0 -15
  506. package/assets/logo.svg +0 -20
  507. package/assets/logo2.svg +0 -43
  508. package/bin/docs-list +0 -5
  509. package/build-and-run.sh +0 -369
  510. package/docs/.nojekyll +0 -1
  511. package/docs/CNAME +0 -1
  512. package/docs/antigravity.md +0 -75
  513. package/docs/architecture.md +0 -32
  514. package/docs/claude.md +0 -93
  515. package/docs/cli-commands/integration_guide.md +0 -371
  516. package/docs/cli-commands/quick_reference.md +0 -362
  517. package/docs/cli-commands/readme.md +0 -361
  518. package/docs/cli.md +0 -156
  519. package/docs/cloudkit_sync_guide.md +0 -495
  520. package/docs/codebase_review.md +0 -288
  521. package/docs/codex-oauth.md +0 -635
  522. package/docs/codex.md +0 -104
  523. package/docs/codexbar.png +0 -0
  524. package/docs/copilot.md +0 -44
  525. package/docs/cursor.md +0 -46
  526. package/docs/design/designcomparisonchart.md +0 -510
  527. package/docs/design/implementationguide.md +0 -792
  528. package/docs/design/menubaricondesignconcepts.md +0 -796
  529. package/docs/design/mockups/hybridiconconcept.svg +0 -62
  530. package/docs/design/mockups/infinityiconconcept.svg +0 -41
  531. package/docs/design/mockups/infinityiconstates.svg +0 -129
  532. package/docs/design/mockups/wavelogorefined.svg +0 -48
  533. package/docs/design/quick_summary.md +0 -426
  534. package/docs/design/readme.md +0 -478
  535. package/docs/design/sizespecifications.md +0 -575
  536. package/docs/design-system.md +0 -836
  537. package/docs/factory.md +0 -103
  538. package/docs/gemini.md +0 -73
  539. package/docs/icon.md +0 -37
  540. package/docs/icon.png +0 -0
  541. package/docs/index.html +0 -175
  542. package/docs/keychain_fix.md +0 -274
  543. package/docs/minimax.md +0 -71
  544. package/docs/packaging.md +0 -25
  545. package/docs/progress-bar-improvements.md +0 -240
  546. package/docs/progress-bar-quick-reference.md +0 -283
  547. package/docs/progress-bar-technical-details.md +0 -432
  548. package/docs/progress-bar-visual-test.swift +0 -375
  549. package/docs/provider.md +0 -202
  550. package/docs/providers.md +0 -86
  551. package/docs/refactor/macros.md +0 -35
  552. package/docs/refresh-loop.md +0 -22
  553. package/docs/releasing-homebrew.md +0 -35
  554. package/docs/releasing.md +0 -121
  555. package/docs/research/concrete_todo_2026-02-22.md +0 -47
  556. package/docs/research/core-feature-research.md +0 -248
  557. package/docs/research/feature_uiux_roadmap_2026-02-22.md +0 -202
  558. package/docs/research/parity_matrix.md +0 -49
  559. package/docs/research/provider_expansion_candidates_2026-02-22.md +0 -80
  560. package/docs/research/provider_model_token_project_matrix_2026-02-23.md +0 -46
  561. package/docs/research/release_gate_checklist.md +0 -57
  562. package/docs/site.css +0 -505
  563. package/docs/sparkle.md +0 -28
  564. package/docs/status.md +0 -28
  565. package/docs/sync/implementation.md +0 -393
  566. package/docs/sync/readme.md +0 -317
  567. package/docs/sync_files_summary.md +0 -391
  568. package/docs/sync_quick_reference.md +0 -225
  569. package/docs/todo.md +0 -11
  570. package/docs/ui.md +0 -29
  571. package/docs/web-integration.md +0 -9
  572. package/docs/widgets.md +0 -85
  573. package/docs/workflows/error-handling-improvements.md +0 -434
  574. package/docs/workflows/folder_structure.md +0 -299
  575. package/docs/workflows/loading_states.md +0 -446
  576. package/docs/workflows/loading_states_examples.md +0 -565
  577. package/docs/workflows/loading_states_flow.md +0 -430
  578. package/docs/workflows/performance_optimizations.md +0 -457
  579. package/docs/workflows/phase1-cli-testing-report.md +0 -313
  580. package/docs/workflows/quick_reference.md +0 -228
  581. package/docs/workflows/readme.md +0 -59
  582. package/docs/workflows/recent_improvements.md +0 -275
  583. package/docs/workflows/sync_enablement_summary.md +0 -400
  584. package/docs/zai.md +0 -43
  585. package/runic.png +0 -0
  586. package/version.env +0 -2
@@ -1,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <path d="M12 82L40 18H60L88 82H72L50 34L28 82H12Z" fill="black"/>
3
- </svg>
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <path d="M20 78L46 18H62L36 78H20Z" fill="black"/>
3
- <path d="M48 78L72 30H86L62 78H48Z" fill="black"/>
4
- <path d="M30 58H80L74 70H24L30 58Z" fill="black"/>
5
- </svg>
@@ -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,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <path d="M78 22H50C35.6 22 24 33.6 24 48V52C24 66.4 35.6 78 50 78H78" stroke="black" stroke-width="12" stroke-linecap="round"/>
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"><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,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <circle cx="50" cy="50" r="36" stroke="black" stroke-width="12"/>
3
- <circle cx="50" cy="50" r="8" fill="black"/>
4
- </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,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <path d="M50 12L58 38L84 46L58 54L50 88L42 54L16 46L42 38L50 12Z" fill="black"/>
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,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <circle cx="50" cy="50" r="36" stroke="black" stroke-width="12"/>
3
- <circle cx="50" cy="50" r="10" fill="black"/>
4
- </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,3 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <path d="M24 20L46 50L24 80H38L54 58L70 80H84L62 50L84 20H70L54 42L38 20H24Z" fill="black"/>
3
- </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
- }