@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.
Files changed (610) hide show
  1. package/CHANGELOG.md +261 -0
  2. package/LICENSE +373 -21
  3. package/README.md +96 -89
  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/RunicTypographyiOS.swift +0 -24
  55. package/RuniciOS/Core/iOSUsageStore.swift +0 -192
  56. package/RuniciOS/Views/ProviderDetailView.swift +0 -312
  57. package/RuniciOS/Views/ProviderListView.swift +0 -228
  58. package/RuniciOS/Widgets/LargeWidget.swift +0 -367
  59. package/RuniciOS/Widgets/LiveActivity.swift +0 -342
  60. package/RuniciOS/Widgets/LockScreenWidget.swift +0 -273
  61. package/RuniciOS/Widgets/MediumWidget.swift +0 -370
  62. package/RuniciOS/Widgets/RunicWidget.swift +0 -274
  63. package/RuniciOS/Widgets/SmallWidget.swift +0 -281
  64. package/RuniciOS/Widgets/WidgetModels.swift +0 -285
  65. package/RuniciOS/Widgets/WidgetTimeline.swift +0 -270
  66. package/Scripts/CREATION-SUMMARY.md +0 -367
  67. package/Scripts/DIRECTORY-STRUCTURE.md +0 -358
  68. package/Scripts/GETTING-STARTED-CHECKLIST.md +0 -364
  69. package/Scripts/INDEX.md +0 -365
  70. package/Scripts/QUICK-REFERENCE.md +0 -164
  71. package/Scripts/README-SCRIPTS.md +0 -926
  72. package/Scripts/build-android.sh +0 -526
  73. package/Scripts/build-ios.sh +0 -529
  74. package/Scripts/build-macos.sh +0 -603
  75. package/Scripts/build-windows.sh +0 -504
  76. package/Scripts/build_icon.sh +0 -49
  77. package/Scripts/changelog-to-html.sh +0 -89
  78. package/Scripts/check-release-assets.sh +0 -10
  79. package/Scripts/ci-config.yml +0 -474
  80. package/Scripts/compile_and_run.sh +0 -219
  81. package/Scripts/compile_and_run_adhoc.sh +0 -4
  82. package/Scripts/docs-list.mjs +0 -119
  83. package/Scripts/make_appcast.sh +0 -58
  84. package/Scripts/package_app.sh +0 -409
  85. package/Scripts/release-lib.sh +0 -214
  86. package/Scripts/release.sh +0 -76
  87. package/Scripts/setup-all.sh +0 -387
  88. package/Scripts/setup-ios.sh +0 -404
  89. package/Scripts/setup-react-native.sh +0 -523
  90. package/Scripts/sign-and-notarize.sh +0 -122
  91. package/Scripts/test_live_update.sh +0 -38
  92. package/Scripts/validate_changelog.sh +0 -23
  93. package/Scripts/verify_appcast.sh +0 -92
  94. package/Sources/Runic/About.swift +0 -93
  95. package/Sources/Runic/AppNotifications.swift +0 -117
  96. package/Sources/Runic/Controllers/StatusItemController+Actions.swift +0 -670
  97. package/Sources/Runic/Controllers/StatusItemController+Animation.swift +0 -519
  98. package/Sources/Runic/Controllers/StatusItemController+ChartSubmenus.swift +0 -824
  99. package/Sources/Runic/Controllers/StatusItemController+CustomProviders.swift +0 -90
  100. package/Sources/Runic/Controllers/StatusItemController+Menu.swift +0 -1412
  101. package/Sources/Runic/Controllers/StatusItemController+MenuCards.swift +0 -339
  102. package/Sources/Runic/Controllers/StatusItemController+MenuHelpers.swift +0 -423
  103. package/Sources/Runic/Controllers/StatusItemController.swift +0 -360
  104. package/Sources/Runic/Core/BudgetNotificationManager.swift +0 -81
  105. package/Sources/Runic/Core/Login/ClaudeLoginRunner.swift +0 -103
  106. package/Sources/Runic/Core/Login/CodexLoginRunner.swift +0 -154
  107. package/Sources/Runic/Core/Login/CursorLoginRunner.swift +0 -206
  108. package/Sources/Runic/Core/Login/GeminiLoginRunner.swift +0 -92
  109. package/Sources/Runic/Core/Rendering/IconRenderer.swift +0 -1222
  110. package/Sources/Runic/Core/Rendering/IconView.swift +0 -122
  111. package/Sources/Runic/Core/Rendering/ProviderBrandIcon.swift +0 -71
  112. package/Sources/Runic/Core/RunicAnimation.swift +0 -53
  113. package/Sources/Runic/Core/RunicColors.swift +0 -73
  114. package/Sources/Runic/Core/RunicCornerRadius.swift +0 -15
  115. package/Sources/Runic/Core/RunicSpacing.swift +0 -68
  116. package/Sources/Runic/Core/RunicTypography.swift +0 -206
  117. package/Sources/Runic/Core/Stores/AuggieTokenStore.swift +0 -117
  118. package/Sources/Runic/Core/Stores/AzureOpenAITokenStore.swift +0 -117
  119. package/Sources/Runic/Core/Stores/CerebrasTokenStore.swift +0 -117
  120. package/Sources/Runic/Core/Stores/CohereTokenStore.swift +0 -117
  121. package/Sources/Runic/Core/Stores/CopilotTokenStore.swift +0 -117
  122. package/Sources/Runic/Core/Stores/CustomProviderStore.swift +0 -158
  123. package/Sources/Runic/Core/Stores/DeepSeekTokenStore.swift +0 -117
  124. package/Sources/Runic/Core/Stores/FireworksTokenStore.swift +0 -117
  125. package/Sources/Runic/Core/Stores/GroqTokenStore.swift +0 -117
  126. package/Sources/Runic/Core/Stores/KimiTokenStore.swift +0 -117
  127. package/Sources/Runic/Core/Stores/MiniMaxCookieHeaderStore.swift +0 -117
  128. package/Sources/Runic/Core/Stores/MiniMaxGroupIDStore.swift +0 -117
  129. package/Sources/Runic/Core/Stores/MiniMaxTokenStore.swift +0 -117
  130. package/Sources/Runic/Core/Stores/MistralTokenStore.swift +0 -117
  131. package/Sources/Runic/Core/Stores/OpenRouterTokenStore.swift +0 -117
  132. package/Sources/Runic/Core/Stores/PerplexityTokenStore.swift +0 -117
  133. package/Sources/Runic/Core/Stores/ProviderToggleStore.swift +0 -30
  134. package/Sources/Runic/Core/Stores/QwenTokenStore.swift +0 -117
  135. package/Sources/Runic/Core/Stores/SambaNovaTokenStore.swift +0 -117
  136. package/Sources/Runic/Core/Stores/SettingsStore.swift +0 -1749
  137. package/Sources/Runic/Core/Stores/TogetherTokenStore.swift +0 -117
  138. package/Sources/Runic/Core/Stores/UsageStore+Accessors.swift +0 -33
  139. package/Sources/Runic/Core/Stores/UsageStore+Status.swift +0 -189
  140. package/Sources/Runic/Core/Stores/UsageStore+TokenCost.swift +0 -33
  141. package/Sources/Runic/Core/Stores/UsageStore+WidgetSnapshot.swift +0 -67
  142. package/Sources/Runic/Core/Stores/UsageStore.swift +0 -3631
  143. package/Sources/Runic/Core/Stores/XAITokenStore.swift +0 -117
  144. package/Sources/Runic/Core/Stores/ZaiTokenStore.swift +0 -117
  145. package/Sources/Runic/Core/UsageExporter.swift +0 -197
  146. package/Sources/Runic/Date+RelativeDescription.swift +0 -21
  147. package/Sources/Runic/HiddenWindowView.swift +0 -32
  148. package/Sources/Runic/InstallOrigin.swift +0 -9
  149. package/Sources/Runic/KeyboardShortcuts+Names.swift +0 -6
  150. package/Sources/Runic/MouseLocationReader.swift +0 -65
  151. package/Sources/Runic/Notifications+Runic.swift +0 -6
  152. package/Sources/Runic/OpenAICreditsPurchaseWindowController.swift +0 -503
  153. package/Sources/Runic/ProviderRegistry.swift +0 -100
  154. package/Sources/Runic/ProviderSwitcherButtons.swift +0 -267
  155. package/Sources/Runic/Providers/Antigravity/AntigravityLoginFlow.swift +0 -11
  156. package/Sources/Runic/Providers/Antigravity/AntigravityProviderImplementation.swift +0 -14
  157. package/Sources/Runic/Providers/Auggie/AuggieProviderImplementation.swift +0 -24
  158. package/Sources/Runic/Providers/Azure/AzureProviderImplementation.swift +0 -52
  159. package/Sources/Runic/Providers/Bedrock/BedrockProviderImplementation.swift +0 -42
  160. package/Sources/Runic/Providers/Cerebras/CerebrasProviderImplementation.swift +0 -24
  161. package/Sources/Runic/Providers/Claude/ClaudeLoginFlow.swift +0 -26
  162. package/Sources/Runic/Providers/Claude/ClaudeProviderImplementation.swift +0 -14
  163. package/Sources/Runic/Providers/Codex/CodexLoginFlow.swift +0 -18
  164. package/Sources/Runic/Providers/Codex/CodexProviderImplementation.swift +0 -15
  165. package/Sources/Runic/Providers/Cohere/CohereProviderImplementation.swift +0 -24
  166. package/Sources/Runic/Providers/Copilot/CopilotLoginFlow.swift +0 -193
  167. package/Sources/Runic/Providers/Copilot/CopilotProviderImplementation.swift +0 -110
  168. package/Sources/Runic/Providers/Cursor/CursorLoginFlow.swift +0 -28
  169. package/Sources/Runic/Providers/Cursor/CursorProviderImplementation.swift +0 -15
  170. package/Sources/Runic/Providers/DeepSeek/DeepSeekProviderImplementation.swift +0 -24
  171. package/Sources/Runic/Providers/Factory/FactoryLoginFlow.swift +0 -12
  172. package/Sources/Runic/Providers/Factory/FactoryProviderImplementation.swift +0 -15
  173. package/Sources/Runic/Providers/Fireworks/FireworksProviderImplementation.swift +0 -24
  174. package/Sources/Runic/Providers/Gemini/GeminiLoginFlow.swift +0 -20
  175. package/Sources/Runic/Providers/Gemini/GeminiProviderImplementation.swift +0 -15
  176. package/Sources/Runic/Providers/Groq/GroqProviderImplementation.swift +0 -24
  177. package/Sources/Runic/Providers/Kimi/KimiProviderImplementation.swift +0 -24
  178. package/Sources/Runic/Providers/MiniMax/MiniMaxProviderImplementation.swift +0 -32
  179. package/Sources/Runic/Providers/Mistral/MistralProviderImplementation.swift +0 -24
  180. package/Sources/Runic/Providers/OpenRouter/OpenRouterProviderImplementation.swift +0 -24
  181. package/Sources/Runic/Providers/Perplexity/PerplexityProviderImplementation.swift +0 -24
  182. package/Sources/Runic/Providers/SambaNova/SambaNovaProviderImplementation.swift +0 -24
  183. package/Sources/Runic/Providers/Shared/ProviderCatalog.swift +0 -15
  184. package/Sources/Runic/Providers/Shared/ProviderImplementation.swift +0 -51
  185. package/Sources/Runic/Providers/Shared/ProviderImplementationRegistry.swift +0 -66
  186. package/Sources/Runic/Providers/Shared/ProviderLoginFlow.swift +0 -12
  187. package/Sources/Runic/Providers/Shared/ProviderSettingsDescriptors.swift +0 -99
  188. package/Sources/Runic/Providers/Shared/SystemSettingsLinks.swift +0 -18
  189. package/Sources/Runic/Providers/Together/TogetherProviderImplementation.swift +0 -24
  190. package/Sources/Runic/Providers/XAI/XAIProviderImplementation.swift +0 -24
  191. package/Sources/Runic/Providers/Zai/ZaiProviderImplementation.swift +0 -24
  192. package/Sources/Runic/Resources/Fonts/Caveat-Bold.ttf +0 -0
  193. package/Sources/Runic/Resources/Fonts/Caveat-Regular.ttf +0 -0
  194. package/Sources/Runic/Resources/Fonts/FiraCode-Bold.ttf +0 -0
  195. package/Sources/Runic/Resources/Fonts/FiraCode-Light.ttf +0 -0
  196. package/Sources/Runic/Resources/Fonts/FiraCode-Medium.ttf +0 -0
  197. package/Sources/Runic/Resources/Fonts/FiraCode-Regular.ttf +0 -0
  198. package/Sources/Runic/Resources/Fonts/FiraCode-SemiBold.ttf +0 -0
  199. package/Sources/Runic/Resources/Fonts/IBMPlexMono-Bold.ttf +0 -0
  200. package/Sources/Runic/Resources/Fonts/IBMPlexMono-Medium.ttf +0 -0
  201. package/Sources/Runic/Resources/Fonts/IBMPlexMono-Regular.ttf +0 -0
  202. package/Sources/Runic/Resources/Fonts/IBMPlexMono-SemiBold.ttf +0 -0
  203. package/Sources/Runic/Resources/Fonts/Inconsolata-Bold.ttf +0 -0
  204. package/Sources/Runic/Resources/Fonts/Inconsolata-Medium.ttf +0 -0
  205. package/Sources/Runic/Resources/Fonts/Inconsolata-Regular.ttf +0 -0
  206. package/Sources/Runic/Resources/Fonts/Inconsolata-SemiBold.ttf +0 -0
  207. package/Sources/Runic/Resources/Fonts/JetBrainsMono-Bold.ttf +0 -0
  208. package/Sources/Runic/Resources/Fonts/JetBrainsMono-Medium.ttf +0 -0
  209. package/Sources/Runic/Resources/Fonts/JetBrainsMono-Regular.ttf +0 -0
  210. package/Sources/Runic/Resources/Fonts/JetBrainsMono-SemiBold.ttf +0 -0
  211. package/Sources/Runic/Resources/Fonts/SpaceMono-Bold.ttf +0 -0
  212. package/Sources/Runic/Resources/Fonts/SpaceMono-Regular.ttf +0 -0
  213. package/Sources/Runic/Resources/ProviderIcon-antigravity.svg +0 -2
  214. package/Sources/Runic/Resources/ProviderIcon-auggie.svg +0 -3
  215. package/Sources/Runic/Resources/ProviderIcon-azure.svg +0 -5
  216. package/Sources/Runic/Resources/ProviderIcon-bedrock.svg +0 -7
  217. package/Sources/Runic/Resources/ProviderIcon-cerebras.svg +0 -3
  218. package/Sources/Runic/Resources/ProviderIcon-claude.svg +0 -1
  219. package/Sources/Runic/Resources/ProviderIcon-codex.svg +0 -1
  220. package/Sources/Runic/Resources/ProviderIcon-cohere.svg +0 -3
  221. package/Sources/Runic/Resources/ProviderIcon-copilot.svg +0 -1
  222. package/Sources/Runic/Resources/ProviderIcon-cursor.svg +0 -3
  223. package/Sources/Runic/Resources/ProviderIcon-deepseek.svg +0 -4
  224. package/Sources/Runic/Resources/ProviderIcon-factory.svg +0 -3
  225. package/Sources/Runic/Resources/ProviderIcon-fireworks.svg +0 -3
  226. package/Sources/Runic/Resources/ProviderIcon-gemini.svg +0 -1
  227. package/Sources/Runic/Resources/ProviderIcon-groq.svg +0 -1
  228. package/Sources/Runic/Resources/ProviderIcon-kimi.svg +0 -4
  229. package/Sources/Runic/Resources/ProviderIcon-minimax.svg +0 -1
  230. package/Sources/Runic/Resources/ProviderIcon-mistral.svg +0 -5
  231. package/Sources/Runic/Resources/ProviderIcon-openrouter.svg +0 -7
  232. package/Sources/Runic/Resources/ProviderIcon-perplexity.svg +0 -4
  233. package/Sources/Runic/Resources/ProviderIcon-qwen.svg +0 -9
  234. package/Sources/Runic/Resources/ProviderIcon-sambanova.svg +0 -4
  235. package/Sources/Runic/Resources/ProviderIcon-together.svg +0 -5
  236. package/Sources/Runic/Resources/ProviderIcon-vertexai.svg +0 -17
  237. package/Sources/Runic/Resources/ProviderIcon-xai.svg +0 -3
  238. package/Sources/Runic/Resources/ProviderIcon-zai.svg +0 -5
  239. package/Sources/Runic/Resources/RunicMenubarIcon.svg +0 -7
  240. package/Sources/Runic/Resources/provider-context-windows.json +0 -20
  241. package/Sources/Runic/RunicApp.swift +0 -367
  242. package/Sources/Runic/SessionQuotaNotifications.swift +0 -58
  243. package/Sources/Runic/UsagePaceText.swift +0 -52
  244. package/Sources/Runic/UsageProgressBar.swift +0 -228
  245. package/Sources/Runic/Utilities/DisplayLink.swift +0 -96
  246. package/Sources/Runic/Utilities/LoadingPattern.swift +0 -62
  247. package/Sources/Runic/Utilities/PerformanceConstants.swift +0 -85
  248. package/Sources/Runic/Views/Menu/AlertsMenuView.swift +0 -254
  249. package/Sources/Runic/Views/Menu/ChartPanelStyle.swift +0 -22
  250. package/Sources/Runic/Views/Menu/CostComparativeChartMenuView.swift +0 -275
  251. package/Sources/Runic/Views/Menu/CostHistoryChartMenuView.swift +0 -377
  252. package/Sources/Runic/Views/Menu/CreditsHistoryChartMenuView.swift +0 -312
  253. package/Sources/Runic/Views/Menu/EfficiencyMetricsMenuView.swift +0 -311
  254. package/Sources/Runic/Views/Menu/HeroStatCardsMenuView.swift +0 -231
  255. package/Sources/Runic/Views/Menu/HourlyActivityChartMenuView.swift +0 -228
  256. package/Sources/Runic/Views/Menu/InlineUsageChartView.swift +0 -157
  257. package/Sources/Runic/Views/Menu/MenuCardEntranceModifier.swift +0 -63
  258. package/Sources/Runic/Views/Menu/MenuCardSidebarView.swift +0 -248
  259. package/Sources/Runic/Views/Menu/MenuCardSkeletonView.swift +0 -104
  260. package/Sources/Runic/Views/Menu/MenuCardView.swift +0 -1889
  261. package/Sources/Runic/Views/Menu/MenuContent.swift +0 -153
  262. package/Sources/Runic/Views/Menu/MenuDescriptor.swift +0 -371
  263. package/Sources/Runic/Views/Menu/MenuHighlightStyle.swift +0 -35
  264. package/Sources/Runic/Views/Menu/ModelBreakdownMenuView.swift +0 -241
  265. package/Sources/Runic/Views/Menu/OverviewMenuView.swift +0 -281
  266. package/Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift +0 -214
  267. package/Sources/Runic/Views/Menu/ProjectBudgetMenuView.swift +0 -220
  268. package/Sources/Runic/Views/Menu/ProviderTabBarView.swift +0 -86
  269. package/Sources/Runic/Views/Menu/SubscriptionUtilizationChartMenuView.swift +0 -214
  270. package/Sources/Runic/Views/Menu/UsageBreakdownChartMenuView.swift +0 -398
  271. package/Sources/Runic/Views/Menu/UsageHeatmapMenuView.swift +0 -231
  272. package/Sources/Runic/Views/Menu/UsageTimelineChartMenuView.swift +0 -369
  273. package/Sources/Runic/Views/Menu/UsageWindowComparisonChartMenuView.swift +0 -191
  274. package/Sources/Runic/Views/Menu/WeeklyActivityChartMenuView.swift +0 -132
  275. package/Sources/Runic/Views/Performance/PerformanceDashboardView.swift +0 -621
  276. package/Sources/Runic/Views/Preferences/LiquidComponents.swift +0 -306
  277. package/Sources/Runic/Views/Preferences/PreferencesAboutPane.swift +0 -271
  278. package/Sources/Runic/Views/Preferences/PreferencesAdvancedPane.swift +0 -268
  279. package/Sources/Runic/Views/Preferences/PreferencesAlertsPane.swift +0 -418
  280. package/Sources/Runic/Views/Preferences/PreferencesAnalyticsPane.swift +0 -637
  281. package/Sources/Runic/Views/Preferences/PreferencesBudgetsPane.swift +0 -344
  282. package/Sources/Runic/Views/Preferences/PreferencesComponents.swift +0 -230
  283. package/Sources/Runic/Views/Preferences/PreferencesCustomProvidersPane.swift +0 -321
  284. package/Sources/Runic/Views/Preferences/PreferencesDebugPane.swift +0 -469
  285. package/Sources/Runic/Views/Preferences/PreferencesGeneralPane.swift +0 -250
  286. package/Sources/Runic/Views/Preferences/PreferencesHelpPane.swift +0 -50
  287. package/Sources/Runic/Views/Preferences/PreferencesIntegrationsPane.swift +0 -572
  288. package/Sources/Runic/Views/Preferences/PreferencesPerformancePane.swift +0 -291
  289. package/Sources/Runic/Views/Preferences/PreferencesProvidersPane.swift +0 -3480
  290. package/Sources/Runic/Views/Preferences/PreferencesSelection.swift +0 -29
  291. package/Sources/Runic/Views/Preferences/PreferencesSyncPane.swift +0 -61
  292. package/Sources/Runic/Views/Preferences/PreferencesView.swift +0 -213
  293. package/Sources/Runic/Views/Rating/QualityRatingView.swift +0 -238
  294. package/Sources/Runic/Views/Team/TeamDashboardView.swift +0 -376
  295. package/Sources/Runic/Views/Team/TeamInviteSheet.swift +0 -175
  296. package/Sources/Runic/Views/Team/TeamManagementView.swift +0 -762
  297. package/Sources/Runic/Views/Team/TeamMemberRow.swift +0 -181
  298. package/Sources/RunicCLI/CLIEntry.swift +0 -983
  299. package/Sources/RunicCLI/CLIRenderer.swift +0 -87
  300. package/Sources/RunicCLI/Commands/EnhancedUsageCommand.swift +0 -588
  301. package/Sources/RunicCLI/Commands/ModelsCommand.swift +0 -363
  302. package/Sources/RunicCLI/Commands/ProjectsCommand.swift +0 -453
  303. package/Sources/RunicCLI/Commands/ResetCommand.swift +0 -430
  304. package/Sources/RunicCLI/Commands/UsageLedgerSourceFactory.swift +0 -167
  305. package/Sources/RunicClaudeWatchdog/main.swift +0 -122
  306. package/Sources/RunicClaudeWebProbe/main.swift +0 -62
  307. package/Sources/RunicCore/AlertRuleStore.swift +0 -187
  308. package/Sources/RunicCore/BrowserCookieImportOrder.swift +0 -25
  309. package/Sources/RunicCore/CopilotUsageModels.swift +0 -84
  310. package/Sources/RunicCore/CostUsageFetcher.swift +0 -119
  311. package/Sources/RunicCore/CostUsageModels.swift +0 -479
  312. package/Sources/RunicCore/CreditsModels.swift +0 -50
  313. package/Sources/RunicCore/CustomProviders/CustomProviderModels.swift +0 -268
  314. package/Sources/RunicCore/CustomProviders/GenericProviderFetcher.swift +0 -631
  315. package/Sources/RunicCore/CustomProviders/ProviderTemplates.swift +0 -444
  316. package/Sources/RunicCore/Host/PTY/TTYCommandRunner.swift +0 -679
  317. package/Sources/RunicCore/Host/Process/SubprocessRunner.swift +0 -135
  318. package/Sources/RunicCore/Integrations/GitHubIntegration.swift +0 -173
  319. package/Sources/RunicCore/Logging/JSONStderrLogHandler.swift +0 -79
  320. package/Sources/RunicCore/Logging/OSLogLogHandler.swift +0 -86
  321. package/Sources/RunicCore/Logging/RunicLog.swift +0 -123
  322. package/Sources/RunicCore/Models/EnhancedUsageModels.swift +0 -370
  323. package/Sources/RunicCore/OpenAIDashboardModels.swift +0 -210
  324. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardBrowserCookieImporter.swift +0 -676
  325. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardFetcher.swift +0 -492
  326. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardNavigationDelegate.swift +0 -51
  327. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardParser.swift +0 -483
  328. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardScrapeScript.swift +0 -558
  329. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebViewCache.swift +0 -204
  330. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebsiteDataStore.swift +0 -78
  331. package/Sources/RunicCore/PathEnvironment.swift +0 -482
  332. package/Sources/RunicCore/Performance/PerformanceModels.swift +0 -371
  333. package/Sources/RunicCore/Performance/PerformanceStorageImpl.swift +0 -426
  334. package/Sources/RunicCore/Policy/UsagePolicyEngine.swift +0 -178
  335. package/Sources/RunicCore/ProjectBudgetStore.swift +0 -102
  336. package/Sources/RunicCore/ProviderCostSnapshot.swift +0 -29
  337. package/Sources/RunicCore/Providers/Antigravity/AntigravityProviderDescriptor.swift +0 -68
  338. package/Sources/RunicCore/Providers/Antigravity/AntigravityStatusProbe.swift +0 -685
  339. package/Sources/RunicCore/Providers/Auggie/AuggieProviderDescriptor.swift +0 -83
  340. package/Sources/RunicCore/Providers/Auggie/AuggieUsageFetcher.swift +0 -142
  341. package/Sources/RunicCore/Providers/Azure/AzureProviderDescriptor.swift +0 -141
  342. package/Sources/RunicCore/Providers/Azure/AzureUsageFetcher.swift +0 -188
  343. package/Sources/RunicCore/Providers/Bedrock/BedrockProviderDescriptor.swift +0 -126
  344. package/Sources/RunicCore/Providers/Bedrock/BedrockUsageFetcher.swift +0 -164
  345. package/Sources/RunicCore/Providers/Cerebras/CerebrasProviderDescriptor.swift +0 -84
  346. package/Sources/RunicCore/Providers/Cerebras/CerebrasUsageFetcher.swift +0 -75
  347. package/Sources/RunicCore/Providers/Claude/ClaudeCLISession.swift +0 -332
  348. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthCredentials.swift +0 -180
  349. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthUsageFetcher.swift +0 -137
  350. package/Sources/RunicCore/Providers/Claude/ClaudeProviderDescriptor.swift +0 -209
  351. package/Sources/RunicCore/Providers/Claude/ClaudeStatusProbe.swift +0 -654
  352. package/Sources/RunicCore/Providers/Claude/ClaudeUsageDataSource.swift +0 -30
  353. package/Sources/RunicCore/Providers/Claude/ClaudeUsageFetcher.swift +0 -480
  354. package/Sources/RunicCore/Providers/Claude/ClaudeWeb/ClaudeWebAPIFetcher.swift +0 -780
  355. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthCredentials.swift +0 -147
  356. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthUsageFetcher.swift +0 -280
  357. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexTokenRefresher.swift +0 -100
  358. package/Sources/RunicCore/Providers/Codex/CodexProviderDescriptor.swift +0 -245
  359. package/Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift +0 -125
  360. package/Sources/RunicCore/Providers/Codex/CodexUsageDataSource.swift +0 -26
  361. package/Sources/RunicCore/Providers/Codex/CodexWebDashboardStrategy.swift +0 -183
  362. package/Sources/RunicCore/Providers/Cohere/CohereProviderDescriptor.swift +0 -83
  363. package/Sources/RunicCore/Providers/Cohere/CohereUsageFetcher.swift +0 -85
  364. package/Sources/RunicCore/Providers/Copilot/CopilotDeviceFlow.swift +0 -123
  365. package/Sources/RunicCore/Providers/Copilot/CopilotGitHubCLITokenReader.swift +0 -117
  366. package/Sources/RunicCore/Providers/Copilot/CopilotProviderDescriptor.swift +0 -100
  367. package/Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift +0 -293
  368. package/Sources/RunicCore/Providers/Copilot/CopilotVSCodeTokenReader.swift +0 -385
  369. package/Sources/RunicCore/Providers/Cursor/CursorProviderDescriptor.swift +0 -67
  370. package/Sources/RunicCore/Providers/Cursor/CursorStatusProbe.swift +0 -595
  371. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekProviderDescriptor.swift +0 -85
  372. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekUsageFetcher.swift +0 -108
  373. package/Sources/RunicCore/Providers/Factory/FactoryLocalStorageImporter.swift +0 -398
  374. package/Sources/RunicCore/Providers/Factory/FactoryProviderDescriptor.swift +0 -67
  375. package/Sources/RunicCore/Providers/Factory/FactoryStatusProbe.swift +0 -1276
  376. package/Sources/RunicCore/Providers/Fireworks/FireworksProviderDescriptor.swift +0 -84
  377. package/Sources/RunicCore/Providers/Fireworks/FireworksUsageFetcher.swift +0 -75
  378. package/Sources/RunicCore/Providers/Gemini/GeminiProviderDescriptor.swift +0 -67
  379. package/Sources/RunicCore/Providers/Gemini/GeminiStatusProbe.swift +0 -839
  380. package/Sources/RunicCore/Providers/Groq/GroqProviderDescriptor.swift +0 -83
  381. package/Sources/RunicCore/Providers/Groq/GroqUsageFetcher.swift +0 -71
  382. package/Sources/RunicCore/Providers/Kimi/KimiProviderDescriptor.swift +0 -83
  383. package/Sources/RunicCore/Providers/Kimi/KimiUsageFetcher.swift +0 -77
  384. package/Sources/RunicCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift +0 -97
  385. package/Sources/RunicCore/Providers/MiniMax/MiniMaxSettingsReader.swift +0 -54
  386. package/Sources/RunicCore/Providers/MiniMax/MiniMaxUsageFetcher.swift +0 -168
  387. package/Sources/RunicCore/Providers/MiniMax/MiniMaxWebUsageFetcher.swift +0 -911
  388. package/Sources/RunicCore/Providers/Mistral/MistralProviderDescriptor.swift +0 -84
  389. package/Sources/RunicCore/Providers/Mistral/MistralUsageFetcher.swift +0 -75
  390. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterProviderDescriptor.swift +0 -87
  391. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterUsageFetcher.swift +0 -216
  392. package/Sources/RunicCore/Providers/Perplexity/PerplexityProviderDescriptor.swift +0 -84
  393. package/Sources/RunicCore/Providers/Perplexity/PerplexityUsageFetcher.swift +0 -75
  394. package/Sources/RunicCore/Providers/ProviderBranding.swift +0 -25
  395. package/Sources/RunicCore/Providers/ProviderCLIConfig.swift +0 -17
  396. package/Sources/RunicCore/Providers/ProviderDescriptor.swift +0 -129
  397. package/Sources/RunicCore/Providers/ProviderFetchPlan.swift +0 -263
  398. package/Sources/RunicCore/Providers/ProviderSettingsSnapshot.swift +0 -98
  399. package/Sources/RunicCore/Providers/ProviderTokenResolver.swift +0 -501
  400. package/Sources/RunicCore/Providers/ProviderVersionDetector.swift +0 -68
  401. package/Sources/RunicCore/Providers/Providers.swift +0 -184
  402. package/Sources/RunicCore/Providers/Qwen/QwenProviderDescriptor.swift +0 -86
  403. package/Sources/RunicCore/Providers/Qwen/QwenSettingsReader.swift +0 -30
  404. package/Sources/RunicCore/Providers/Qwen/QwenUsageStats.swift +0 -328
  405. package/Sources/RunicCore/Providers/SambaNova/SambaNovaProviderDescriptor.swift +0 -84
  406. package/Sources/RunicCore/Providers/SambaNova/SambaNovaUsageFetcher.swift +0 -75
  407. package/Sources/RunicCore/Providers/Together/TogetherProviderDescriptor.swift +0 -83
  408. package/Sources/RunicCore/Providers/Together/TogetherUsageFetcher.swift +0 -75
  409. package/Sources/RunicCore/Providers/VertexAI/VertexAIProviderDescriptor.swift +0 -123
  410. package/Sources/RunicCore/Providers/VertexAI/VertexAISettingsReader.swift +0 -48
  411. package/Sources/RunicCore/Providers/VertexAI/VertexAIUsageFetcher.swift +0 -144
  412. package/Sources/RunicCore/Providers/XAI/XAIProviderDescriptor.swift +0 -83
  413. package/Sources/RunicCore/Providers/XAI/XAIUsageFetcher.swift +0 -75
  414. package/Sources/RunicCore/Providers/Zai/ZaiProviderDescriptor.swift +0 -74
  415. package/Sources/RunicCore/Providers/Zai/ZaiSettingsReader.swift +0 -41
  416. package/Sources/RunicCore/Providers/Zai/ZaiUsageStats.swift +0 -745
  417. package/Sources/RunicCore/Sync/BackgroundSyncManager.swift +0 -384
  418. package/Sources/RunicCore/Sync/SyncConflictResolver.swift +0 -307
  419. package/Sources/RunicCore/Sync/SyncProtocol.swift +0 -287
  420. package/Sources/RunicCore/Sync/SyncRecord.swift +0 -402
  421. package/Sources/RunicCore/Sync/SyncUsageExample.swift +0 -288
  422. package/Sources/RunicCore/Sync/TeamSyncRecords.swift +0 -768
  423. package/Sources/RunicCore/Sync/iCloudSyncEngine.swift +0 -338
  424. package/Sources/RunicCore/Team/TeamModels.swift +0 -584
  425. package/Sources/RunicCore/Team/TeamShowbackExporter.swift +0 -495
  426. package/Sources/RunicCore/Team/TeamStore.swift +0 -809
  427. package/Sources/RunicCore/TextParsing.swift +0 -55
  428. package/Sources/RunicCore/UsageFetcher.swift +0 -694
  429. package/Sources/RunicCore/UsageFormatter.swift +0 -410
  430. package/Sources/RunicCore/UsageLedger/ClaudeUsageLogSource.swift +0 -441
  431. package/Sources/RunicCore/UsageLedger/CodexUsageLogSource.swift +0 -502
  432. package/Sources/RunicCore/UsageLedger/LedgerCache.swift +0 -161
  433. package/Sources/RunicCore/UsageLedger/OTelGenAILedgerAdapter.swift +0 -550
  434. package/Sources/RunicCore/UsageLedger/UsageLedger.swift +0 -29
  435. package/Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift +0 -675
  436. package/Sources/RunicCore/UsageLedger/UsageLedgerInsightsAdvisor.swift +0 -209
  437. package/Sources/RunicCore/UsageLedger/UsageLedgerModels.swift +0 -417
  438. package/Sources/RunicCore/UsageLedger/UsageLedgerProjectIdentity.swift +0 -284
  439. package/Sources/RunicCore/UsagePace.swift +0 -81
  440. package/Sources/RunicCore/Vendored/CostUsage/CostUsageCache.swift +0 -73
  441. package/Sources/RunicCore/Vendored/CostUsage/CostUsageJsonl.swift +0 -74
  442. package/Sources/RunicCore/Vendored/CostUsage/CostUsagePricing.swift +0 -208
  443. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Claude.swift +0 -455
  444. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Timestamp.swift +0 -132
  445. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner.swift +0 -589
  446. package/Sources/RunicCore/WidgetSnapshot.swift +0 -183
  447. package/Sources/RunicMacroSupport/ProviderRegistrationMacros.swift +0 -14
  448. package/Sources/RunicMacros/ProviderRegistrationMacros.swift +0 -216
  449. package/Sources/RunicWidget/RunicWidgetBundle.swift +0 -79
  450. package/Sources/RunicWidget/RunicWidgetProvider.swift +0 -283
  451. package/Sources/RunicWidget/RunicWidgetViews.swift +0 -680
  452. package/Tests/RunicTests/AntigravityStatusProbeTests.swift +0 -50
  453. package/Tests/RunicTests/AppDelegateTests.swift +0 -48
  454. package/Tests/RunicTests/BrowserCookieOrderLabelTests.swift +0 -21
  455. package/Tests/RunicTests/CLIArgumentParsingTests.swift +0 -69
  456. package/Tests/RunicTests/CLICostTests.swift +0 -64
  457. package/Tests/RunicTests/CLIProviderSelectionTests.swift +0 -21
  458. package/Tests/RunicTests/CLISnapshotTests.swift +0 -71
  459. package/Tests/RunicTests/CLIWebFallbackTests.swift +0 -57
  460. package/Tests/RunicTests/ClaudeOAuthTests.swift +0 -163
  461. package/Tests/RunicTests/ClaudeResilienceTests.swift +0 -29
  462. package/Tests/RunicTests/ClaudeUsageTests.swift +0 -369
  463. package/Tests/RunicTests/CodexOAuthTests.swift +0 -121
  464. package/Tests/RunicTests/CodexUsageLogSourceTests.swift +0 -80
  465. package/Tests/RunicTests/CopilotTokenResolverTests.swift +0 -74
  466. package/Tests/RunicTests/CopilotVSCodeTokenReaderTests.swift +0 -74
  467. package/Tests/RunicTests/CostUsageDecodingTests.swift +0 -392
  468. package/Tests/RunicTests/CostUsagePricingTests.swift +0 -48
  469. package/Tests/RunicTests/CostUsageScannerTests.swift +0 -698
  470. package/Tests/RunicTests/CursorStatusProbeTests.swift +0 -322
  471. package/Tests/RunicTests/FactoryStatusProbeTests.swift +0 -67
  472. package/Tests/RunicTests/GeminiAPITestHelpers.swift +0 -94
  473. package/Tests/RunicTests/GeminiLoginAlertTests.swift +0 -27
  474. package/Tests/RunicTests/GeminiStatusProbeAPITests.swift +0 -283
  475. package/Tests/RunicTests/GeminiStatusProbePlanTests.swift +0 -279
  476. package/Tests/RunicTests/GeminiStatusProbeTests.swift +0 -232
  477. package/Tests/RunicTests/GeminiTestEnvironment.swift +0 -87
  478. package/Tests/RunicTests/GoogleWorkspaceStatusTests.swift +0 -72
  479. package/Tests/RunicTests/InstallOriginTests.swift +0 -17
  480. package/Tests/RunicTests/KeyboardShortcutsBundleTests.swift +0 -9
  481. package/Tests/RunicTests/LiveAccountTests.swift +0 -24
  482. package/Tests/RunicTests/LoadingPatternTests.swift +0 -34
  483. package/Tests/RunicTests/MenuCardModelTests.swift +0 -544
  484. package/Tests/RunicTests/MiniMaxCookieHeaderStoreTestSupport.swift +0 -11
  485. package/Tests/RunicTests/MiniMaxGroupIDStoreTestSupport.swift +0 -11
  486. package/Tests/RunicTests/MiniMaxParsingTests.swift +0 -67
  487. package/Tests/RunicTests/MiniMaxTokenStoreTestSupport.swift +0 -11
  488. package/Tests/RunicTests/OTelGenAILedgerAdapterTests.swift +0 -110
  489. package/Tests/RunicTests/OpenAIDashboardBrowserCookieImporterTests.swift +0 -16
  490. package/Tests/RunicTests/OpenAIDashboardFetcherCreditsWaitTests.swift +0 -74
  491. package/Tests/RunicTests/OpenAIDashboardOffscreenHostTests.swift +0 -26
  492. package/Tests/RunicTests/OpenAIDashboardParserTests.swift +0 -133
  493. package/Tests/RunicTests/OpenAIWebAccountSwitchTests.swift +0 -64
  494. package/Tests/RunicTests/OpenRouterTokenStoreTestSupport.swift +0 -131
  495. package/Tests/RunicTests/PathBuilderTests.swift +0 -236
  496. package/Tests/RunicTests/ProviderFetchPipelineTests.swift +0 -159
  497. package/Tests/RunicTests/ProviderIconResourcesTests.swift +0 -37
  498. package/Tests/RunicTests/ProviderMetadataStatusLinkTests.swift +0 -15
  499. package/Tests/RunicTests/ProviderRegistryTests.swift +0 -29
  500. package/Tests/RunicTests/ProviderSettingsDescriptorTests.swift +0 -236
  501. package/Tests/RunicTests/ProviderToggleStoreTests.swift +0 -50
  502. package/Tests/RunicTests/RunicTests.swift +0 -119
  503. package/Tests/RunicTests/SessionQuotaNotificationLogicTests.swift +0 -35
  504. package/Tests/RunicTests/SettingsStoreTests.swift +0 -265
  505. package/Tests/RunicTests/StatusItemAnimationTests.swift +0 -54
  506. package/Tests/RunicTests/StatusMenuTests.swift +0 -475
  507. package/Tests/RunicTests/StatusProbeTests.swift +0 -376
  508. package/Tests/RunicTests/SubprocessRunnerTests.swift +0 -18
  509. package/Tests/RunicTests/SubscriptionDetectionTests.swift +0 -64
  510. package/Tests/RunicTests/TTYCommandRunnerTests.swift +0 -147
  511. package/Tests/RunicTests/TTYIntegrationTests.swift +0 -41
  512. package/Tests/RunicTests/TeamShowbackExporterTests.swift +0 -157
  513. package/Tests/RunicTests/TextParsingTests.swift +0 -11
  514. package/Tests/RunicTests/UsageFormatterTests.swift +0 -111
  515. package/Tests/RunicTests/UsageLedgerAnomalyDetectionTests.swift +0 -170
  516. package/Tests/RunicTests/UsageLedgerForecastTests.swift +0 -211
  517. package/Tests/RunicTests/UsageLedgerInsightsAdvisorTests.swift +0 -81
  518. package/Tests/RunicTests/UsageLedgerProjectNameTests.swift +0 -168
  519. package/Tests/RunicTests/UsagePaceTests.swift +0 -76
  520. package/Tests/RunicTests/UsagePaceTextTests.swift +0 -108
  521. package/Tests/RunicTests/UsagePolicyEngineTests.swift +0 -89
  522. package/Tests/RunicTests/WidgetSnapshotTests.swift +0 -43
  523. package/Tests/RunicTests/ZaiProviderTests.swift +0 -59
  524. package/Tests/RunicTests/ZaiTokenStoreTestSupport.swift +0 -9
  525. package/TestsLinux/PlatformGatingTests.swift +0 -46
  526. package/appcast.xml +0 -104
  527. package/assets/logo-concept-stack.svg +0 -24
  528. package/assets/logo-minimal-bars.svg +0 -15
  529. package/assets/logo.svg +0 -20
  530. package/assets/logo2.svg +0 -43
  531. package/bin/docs-list +0 -5
  532. package/build-and-run.sh +0 -369
  533. package/docs/.nojekyll +0 -1
  534. package/docs/CNAME +0 -1
  535. package/docs/antigravity.md +0 -75
  536. package/docs/architecture.md +0 -32
  537. package/docs/claude.md +0 -93
  538. package/docs/cli-commands/integration_guide.md +0 -371
  539. package/docs/cli-commands/quick_reference.md +0 -362
  540. package/docs/cli-commands/readme.md +0 -361
  541. package/docs/cli.md +0 -156
  542. package/docs/cloudkit_sync_guide.md +0 -495
  543. package/docs/codebase_review.md +0 -288
  544. package/docs/codex-oauth.md +0 -635
  545. package/docs/codex.md +0 -104
  546. package/docs/codexbar.png +0 -0
  547. package/docs/copilot.md +0 -44
  548. package/docs/cursor.md +0 -46
  549. package/docs/design/designcomparisonchart.md +0 -510
  550. package/docs/design/implementationguide.md +0 -792
  551. package/docs/design/menubaricondesignconcepts.md +0 -796
  552. package/docs/design/mockups/hybridiconconcept.svg +0 -62
  553. package/docs/design/mockups/infinityiconconcept.svg +0 -41
  554. package/docs/design/mockups/infinityiconstates.svg +0 -129
  555. package/docs/design/mockups/wavelogorefined.svg +0 -48
  556. package/docs/design/quick_summary.md +0 -426
  557. package/docs/design/readme.md +0 -478
  558. package/docs/design/sizespecifications.md +0 -575
  559. package/docs/design-system.md +0 -836
  560. package/docs/factory.md +0 -103
  561. package/docs/gemini.md +0 -73
  562. package/docs/icon.md +0 -37
  563. package/docs/icon.png +0 -0
  564. package/docs/index.html +0 -175
  565. package/docs/keychain_fix.md +0 -274
  566. package/docs/minimax.md +0 -71
  567. package/docs/packaging.md +0 -25
  568. package/docs/progress-bar-improvements.md +0 -240
  569. package/docs/progress-bar-quick-reference.md +0 -283
  570. package/docs/progress-bar-technical-details.md +0 -432
  571. package/docs/progress-bar-visual-test.swift +0 -375
  572. package/docs/provider.md +0 -202
  573. package/docs/providers.md +0 -86
  574. package/docs/refactor/macros.md +0 -35
  575. package/docs/refresh-loop.md +0 -22
  576. package/docs/releasing-homebrew.md +0 -35
  577. package/docs/releasing.md +0 -121
  578. package/docs/research/concrete_todo_2026-02-22.md +0 -47
  579. package/docs/research/core-feature-research.md +0 -248
  580. package/docs/research/feature_uiux_roadmap_2026-02-22.md +0 -202
  581. package/docs/research/parity_matrix.md +0 -49
  582. package/docs/research/provider_expansion_candidates_2026-02-22.md +0 -80
  583. package/docs/research/provider_model_token_project_matrix_2026-02-23.md +0 -46
  584. package/docs/research/release_gate_checklist.md +0 -57
  585. package/docs/site.css +0 -505
  586. package/docs/sparkle.md +0 -28
  587. package/docs/status.md +0 -28
  588. package/docs/sync/implementation.md +0 -393
  589. package/docs/sync/readme.md +0 -317
  590. package/docs/sync_files_summary.md +0 -391
  591. package/docs/sync_quick_reference.md +0 -225
  592. package/docs/todo.md +0 -11
  593. package/docs/ui.md +0 -29
  594. package/docs/web-integration.md +0 -9
  595. package/docs/widgets.md +0 -85
  596. package/docs/workflows/error-handling-improvements.md +0 -434
  597. package/docs/workflows/folder_structure.md +0 -299
  598. package/docs/workflows/loading_states.md +0 -446
  599. package/docs/workflows/loading_states_examples.md +0 -565
  600. package/docs/workflows/loading_states_flow.md +0 -430
  601. package/docs/workflows/performance_optimizations.md +0 -457
  602. package/docs/workflows/phase1-cli-testing-report.md +0 -313
  603. package/docs/workflows/quick_reference.md +0 -228
  604. package/docs/workflows/readme.md +0 -59
  605. package/docs/workflows/recent_improvements.md +0 -275
  606. package/docs/workflows/sync_enablement_summary.md +0 -400
  607. package/docs/zai.md +0 -43
  608. package/runic.png +0 -0
  609. package/runic.svg +0 -15
  610. package/version.env +0 -2
@@ -1,544 +0,0 @@
1
- import Foundation
2
- import RunicCore
3
- import SwiftUI
4
- import Testing
5
- @testable import Runic
6
-
7
- extension UsageMenuCardView.Model.Input {
8
- fileprivate init(
9
- provider: UsageProvider,
10
- metadata: ProviderMetadata,
11
- snapshot: UsageSnapshot?,
12
- credits: CreditsSnapshot?,
13
- creditsError: String?,
14
- dashboard: OpenAIDashboardSnapshot?,
15
- dashboardError: String?,
16
- tokenSnapshot: CostUsageTokenSnapshot?,
17
- tokenError: String?,
18
- ledgerDaily: UsageLedgerDailySummary? = nil,
19
- ledgerActiveBlock: UsageLedgerBlockSummary? = nil,
20
- ledgerTopModel: UsageLedgerModelSummary? = nil,
21
- ledgerTopProject: UsageLedgerProjectSummary? = nil,
22
- ledgerSpendForecast: UsageLedgerSpendForecast? = nil,
23
- ledgerTopProjectSpendForecast: UsageLedgerSpendForecast? = nil,
24
- ledgerAnomaly: UsageLedgerAnomalySummary? = nil,
25
- ledgerReliability: UsageLedgerReliabilityScore? = nil,
26
- ledgerRouting: UsageLedgerRoutingRecommendation? = nil,
27
- ledgerError: String? = nil,
28
- ledgerUpdatedAt: Date? = nil,
29
- account: AccountInfo,
30
- isRefreshing: Bool,
31
- lastError: String?,
32
- usageBarsShowUsed: Bool,
33
- menuMode: MenuMode = .operator,
34
- tokenCostUsageEnabled: Bool,
35
- showOptionalCreditsAndExtraUsage: Bool,
36
- now: Date)
37
- {
38
- self.init(
39
- provider: provider,
40
- metadata: metadata,
41
- snapshot: snapshot,
42
- credits: credits,
43
- creditsError: creditsError,
44
- dashboard: dashboard,
45
- dashboardError: dashboardError,
46
- tokenSnapshot: tokenSnapshot,
47
- tokenError: tokenError,
48
- ledgerDaily: ledgerDaily,
49
- ledgerActiveBlock: ledgerActiveBlock,
50
- ledgerTopModel: ledgerTopModel,
51
- ledgerTopProject: ledgerTopProject,
52
- ledgerSpendForecast: ledgerSpendForecast,
53
- ledgerTopProjectSpendForecast: ledgerTopProjectSpendForecast,
54
- ledgerAnomaly: ledgerAnomaly,
55
- ledgerReliability: ledgerReliability,
56
- ledgerRouting: ledgerRouting,
57
- ledgerError: ledgerError,
58
- ledgerUpdatedAt: ledgerUpdatedAt,
59
- account: account,
60
- isRefreshing: isRefreshing,
61
- lastError: lastError,
62
- usageBarsShowUsed: usageBarsShowUsed,
63
- usageMetricDisplayMode: .barsAndPercent,
64
- menuMode: menuMode,
65
- tokenCostUsageEnabled: tokenCostUsageEnabled,
66
- showOptionalCreditsAndExtraUsage: showOptionalCreditsAndExtraUsage,
67
- now: now)
68
- }
69
- }
70
-
71
- struct MenuCardModelTests {
72
- @Test
73
- func `builds metrics using remaining percent`() throws {
74
- let now = Date()
75
- let identity = ProviderIdentitySnapshot(
76
- providerID: .codex,
77
- accountEmail: "codex@example.com",
78
- accountOrganization: nil,
79
- loginMethod: "Plus Plan")
80
- let snapshot = UsageSnapshot(
81
- primary: RateWindow(
82
- usedPercent: 22,
83
- windowMinutes: 300,
84
- resetsAt: now.addingTimeInterval(3000),
85
- resetDescription: nil),
86
- secondary: RateWindow(
87
- usedPercent: 40,
88
- windowMinutes: 10080,
89
- resetsAt: now.addingTimeInterval(6000),
90
- resetDescription: nil),
91
- updatedAt: now,
92
- identity: identity)
93
- let metadata = try #require(ProviderDefaults.metadata[.codex])
94
- let updatedSnap = try UsageSnapshot(
95
- primary: snapshot.primary,
96
- secondary: RateWindow(
97
- usedPercent: #require(snapshot.secondary?.usedPercent),
98
- windowMinutes: #require(snapshot.secondary?.windowMinutes),
99
- resetsAt: now.addingTimeInterval(3600),
100
- resetDescription: nil),
101
- tertiary: snapshot.tertiary,
102
- updatedAt: now,
103
- identity: identity)
104
-
105
- let model = UsageMenuCardView.Model.make(.init(
106
- provider: .codex,
107
- metadata: metadata,
108
- snapshot: updatedSnap,
109
- credits: CreditsSnapshot(remaining: 12, events: [], updatedAt: now),
110
- creditsError: nil,
111
- dashboard: nil,
112
- dashboardError: nil,
113
- tokenSnapshot: nil,
114
- tokenError: nil,
115
- account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),
116
- isRefreshing: false,
117
- lastError: nil,
118
- usageBarsShowUsed: false,
119
- tokenCostUsageEnabled: false,
120
- showOptionalCreditsAndExtraUsage: true,
121
- now: now))
122
-
123
- #expect(model.providerName == "Codex")
124
- #expect(model.metrics.count == 2)
125
- #expect(model.metrics.first?.percent == 78)
126
- #expect(model.planText == "Plus")
127
- #expect(model.subtitleText.hasPrefix("Updated"))
128
- #expect(model.progressColor != Color.clear)
129
- #expect(model.metrics[1].resetText?.isEmpty == false)
130
- }
131
-
132
- @Test
133
- func `builds metrics using used percent when enabled`() throws {
134
- let now = Date()
135
- let identity = ProviderIdentitySnapshot(
136
- providerID: .codex,
137
- accountEmail: "codex@example.com",
138
- accountOrganization: nil,
139
- loginMethod: "Plus Plan")
140
- let snapshot = UsageSnapshot(
141
- primary: RateWindow(
142
- usedPercent: 22,
143
- windowMinutes: 300,
144
- resetsAt: now.addingTimeInterval(3000),
145
- resetDescription: nil),
146
- secondary: RateWindow(
147
- usedPercent: 40,
148
- windowMinutes: 10080,
149
- resetsAt: now.addingTimeInterval(6000),
150
- resetDescription: nil),
151
- updatedAt: now,
152
- identity: identity)
153
- let metadata = try #require(ProviderDefaults.metadata[.codex])
154
-
155
- let dashboard = OpenAIDashboardSnapshot(
156
- signedInEmail: "codex@example.com",
157
- codeReviewRemainingPercent: 73,
158
- creditEvents: [],
159
- dailyBreakdown: [],
160
- usageBreakdown: [],
161
- creditsPurchaseURL: nil,
162
- updatedAt: now)
163
-
164
- let model = UsageMenuCardView.Model.make(.init(
165
- provider: .codex,
166
- metadata: metadata,
167
- snapshot: snapshot,
168
- credits: nil,
169
- creditsError: nil,
170
- dashboard: dashboard,
171
- dashboardError: nil,
172
- tokenSnapshot: nil,
173
- tokenError: nil,
174
- account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),
175
- isRefreshing: false,
176
- lastError: nil,
177
- usageBarsShowUsed: true,
178
- tokenCostUsageEnabled: false,
179
- showOptionalCreditsAndExtraUsage: true,
180
- now: now))
181
-
182
- #expect(model.metrics.first?.title == "Session")
183
- #expect(model.metrics.first?.percent == 22)
184
- #expect(model.metrics.first?.percentLabel.contains("used") == true)
185
- #expect(model.metrics.contains { $0.title == "Code review" && $0.percent == 27 })
186
- }
187
-
188
- @Test
189
- func `shows code review metric when dashboard present`() throws {
190
- let now = Date()
191
- let identity = ProviderIdentitySnapshot(
192
- providerID: .codex,
193
- accountEmail: "codex@example.com",
194
- accountOrganization: nil,
195
- loginMethod: nil)
196
- let snapshot = UsageSnapshot(
197
- primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),
198
- secondary: nil,
199
- tertiary: nil,
200
- updatedAt: now,
201
- identity: identity)
202
- let metadata = try #require(ProviderDefaults.metadata[.codex])
203
-
204
- let dashboard = OpenAIDashboardSnapshot(
205
- signedInEmail: "codex@example.com",
206
- codeReviewRemainingPercent: 73,
207
- creditEvents: [],
208
- dailyBreakdown: [],
209
- usageBreakdown: [],
210
- creditsPurchaseURL: nil,
211
- updatedAt: now)
212
- let model = UsageMenuCardView.Model.make(.init(
213
- provider: .codex,
214
- metadata: metadata,
215
- snapshot: snapshot,
216
- credits: nil,
217
- creditsError: nil,
218
- dashboard: dashboard,
219
- dashboardError: nil,
220
- tokenSnapshot: nil,
221
- tokenError: nil,
222
- account: AccountInfo(email: "codex@example.com", plan: nil),
223
- isRefreshing: false,
224
- lastError: nil,
225
- usageBarsShowUsed: false,
226
- tokenCostUsageEnabled: false,
227
- showOptionalCreditsAndExtraUsage: true,
228
- now: now))
229
-
230
- #expect(model.metrics.contains { $0.title == "Code review" && $0.percent == 73 })
231
- }
232
-
233
- @Test
234
- func `claude model hides weekly when unavailable`() throws {
235
- let now = Date()
236
- let identity = ProviderIdentitySnapshot(
237
- providerID: .claude,
238
- accountEmail: nil,
239
- accountOrganization: nil,
240
- loginMethod: "Max")
241
- let snapshot = UsageSnapshot(
242
- primary: RateWindow(
243
- usedPercent: 2,
244
- windowMinutes: nil,
245
- resetsAt: now.addingTimeInterval(3600),
246
- resetDescription: nil),
247
- secondary: nil,
248
- tertiary: nil,
249
- updatedAt: now,
250
- identity: identity)
251
- let metadata = try #require(ProviderDefaults.metadata[.claude])
252
- let model = UsageMenuCardView.Model.make(.init(
253
- provider: .claude,
254
- metadata: metadata,
255
- snapshot: snapshot,
256
- credits: nil,
257
- creditsError: nil,
258
- dashboard: nil,
259
- dashboardError: nil,
260
- tokenSnapshot: nil,
261
- tokenError: nil,
262
- account: AccountInfo(email: "codex@example.com", plan: "plus"),
263
- isRefreshing: false,
264
- lastError: nil,
265
- usageBarsShowUsed: false,
266
- tokenCostUsageEnabled: false,
267
- showOptionalCreditsAndExtraUsage: true,
268
- now: now))
269
-
270
- #expect(model.metrics.count == 1)
271
- #expect(model.metrics.first?.title == "Session")
272
- #expect(model.planText == "Max")
273
- }
274
-
275
- @Test
276
- func `shows error subtitle when present`() throws {
277
- let metadata = try #require(ProviderDefaults.metadata[.codex])
278
- let model = UsageMenuCardView.Model.make(.init(
279
- provider: .codex,
280
- metadata: metadata,
281
- snapshot: nil,
282
- credits: nil,
283
- creditsError: nil,
284
- dashboard: nil,
285
- dashboardError: nil,
286
- tokenSnapshot: nil,
287
- tokenError: nil,
288
- account: AccountInfo(email: nil, plan: nil),
289
- isRefreshing: false,
290
- lastError: "Probe failed for Codex",
291
- usageBarsShowUsed: false,
292
- tokenCostUsageEnabled: false,
293
- showOptionalCreditsAndExtraUsage: true,
294
- now: Date()))
295
-
296
- #expect(model.subtitleStyle == .error)
297
- #expect(model.subtitleText.contains("Probe failed"))
298
- #expect(model.placeholder == nil)
299
- }
300
-
301
- @Test
302
- func `cost section includes last30 days tokens`() throws {
303
- let now = Date()
304
- let metadata = try #require(ProviderDefaults.metadata[.codex])
305
- let snapshot = UsageSnapshot(
306
- primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),
307
- secondary: nil,
308
- tertiary: nil,
309
- updatedAt: now)
310
- let tokenSnapshot = CostUsageTokenSnapshot(
311
- sessionTokens: 123,
312
- sessionCostUSD: 1.23,
313
- last30DaysTokens: 456,
314
- last30DaysCostUSD: 78.9,
315
- daily: [],
316
- updatedAt: now)
317
- let model = UsageMenuCardView.Model.make(.init(
318
- provider: .codex,
319
- metadata: metadata,
320
- snapshot: snapshot,
321
- credits: nil,
322
- creditsError: nil,
323
- dashboard: nil,
324
- dashboardError: nil,
325
- tokenSnapshot: tokenSnapshot,
326
- tokenError: nil,
327
- account: AccountInfo(email: nil, plan: nil),
328
- isRefreshing: false,
329
- lastError: nil,
330
- usageBarsShowUsed: false,
331
- tokenCostUsageEnabled: true,
332
- showOptionalCreditsAndExtraUsage: true,
333
- now: now))
334
-
335
- #expect(model.tokenUsage?.monthLine.contains("456") == true)
336
- #expect(model.tokenUsage?.monthLine.contains("tokens") == true)
337
- }
338
-
339
- @Test
340
- func `claude model does not leak codex plan`() throws {
341
- let metadata = try #require(ProviderDefaults.metadata[.claude])
342
- let model = UsageMenuCardView.Model.make(.init(
343
- provider: .claude,
344
- metadata: metadata,
345
- snapshot: nil,
346
- credits: nil,
347
- creditsError: nil,
348
- dashboard: nil,
349
- dashboardError: nil,
350
- tokenSnapshot: nil,
351
- tokenError: nil,
352
- account: AccountInfo(email: "codex@example.com", plan: "plus"),
353
- isRefreshing: false,
354
- lastError: nil,
355
- usageBarsShowUsed: false,
356
- tokenCostUsageEnabled: false,
357
- showOptionalCreditsAndExtraUsage: true,
358
- now: Date()))
359
-
360
- #expect(model.planText == nil)
361
- #expect(model.email.isEmpty)
362
- }
363
-
364
- @Test
365
- func `hides codex credits when disabled`() throws {
366
- let now = Date()
367
- let identity = ProviderIdentitySnapshot(
368
- providerID: .codex,
369
- accountEmail: "codex@example.com",
370
- accountOrganization: nil,
371
- loginMethod: nil)
372
- let snapshot = UsageSnapshot(
373
- primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),
374
- secondary: nil,
375
- tertiary: nil,
376
- updatedAt: now,
377
- identity: identity)
378
- let metadata = try #require(ProviderDefaults.metadata[.codex])
379
-
380
- let model = UsageMenuCardView.Model.make(.init(
381
- provider: .codex,
382
- metadata: metadata,
383
- snapshot: snapshot,
384
- credits: CreditsSnapshot(remaining: 12, events: [], updatedAt: now),
385
- creditsError: nil,
386
- dashboard: nil,
387
- dashboardError: nil,
388
- tokenSnapshot: nil,
389
- tokenError: nil,
390
- account: AccountInfo(email: "codex@example.com", plan: nil),
391
- isRefreshing: false,
392
- lastError: nil,
393
- usageBarsShowUsed: false,
394
- tokenCostUsageEnabled: false,
395
- showOptionalCreditsAndExtraUsage: false,
396
- now: now))
397
-
398
- #expect(model.creditsText == nil)
399
- }
400
-
401
- @Test
402
- func `hides claude extra usage when disabled`() throws {
403
- let now = Date()
404
- let identity = ProviderIdentitySnapshot(
405
- providerID: .claude,
406
- accountEmail: "claude@example.com",
407
- accountOrganization: nil,
408
- loginMethod: nil)
409
- let snapshot = UsageSnapshot(
410
- primary: RateWindow(usedPercent: 0, windowMinutes: nil, resetsAt: nil, resetDescription: nil),
411
- secondary: nil,
412
- tertiary: nil,
413
- providerCost: ProviderCostSnapshot(used: 12, limit: 200, currencyCode: "USD", updatedAt: now),
414
- updatedAt: now,
415
- identity: identity)
416
- let metadata = try #require(ProviderDefaults.metadata[.claude])
417
-
418
- let model = UsageMenuCardView.Model.make(.init(
419
- provider: .claude,
420
- metadata: metadata,
421
- snapshot: snapshot,
422
- credits: nil,
423
- creditsError: nil,
424
- dashboard: nil,
425
- dashboardError: nil,
426
- tokenSnapshot: nil,
427
- tokenError: nil,
428
- account: AccountInfo(email: nil, plan: nil),
429
- isRefreshing: false,
430
- lastError: nil,
431
- usageBarsShowUsed: false,
432
- tokenCostUsageEnabled: false,
433
- showOptionalCreditsAndExtraUsage: false,
434
- now: now))
435
-
436
- #expect(model.providerCost == nil)
437
- }
438
-
439
- @Test
440
- func `insights show forecast and budget ETA for top project`() throws {
441
- let now = Date()
442
- let metadata = try #require(ProviderDefaults.metadata[.codex])
443
- let topProject = UsageLedgerProjectSummary(
444
- provider: .codex,
445
- projectKey: "id:proj-runic",
446
- projectID: "proj-runic",
447
- projectName: "Runic",
448
- entryCount: 5,
449
- totals: UsageLedgerTotals(
450
- inputTokens: 2000,
451
- outputTokens: 1000,
452
- cacheCreationTokens: 0,
453
- cacheReadTokens: 0,
454
- costUSD: 12.5),
455
- modelsUsed: ["gpt-5"])
456
- let providerForecast = UsageLedgerSpendForecast(
457
- provider: .codex,
458
- observedDays: 3,
459
- observedCostUSD: 36,
460
- averageDailyCostUSD: 12,
461
- projected30DayCostUSD: 360,
462
- projectedCostP50USD: 330,
463
- projectedCostP80USD: 420,
464
- projectedCostP95USD: 510)
465
- let projectForecast = UsageLedgerSpendForecast(
466
- provider: .codex,
467
- projectKey: "id:proj-runic",
468
- projectID: "proj-runic",
469
- projectName: "Runic",
470
- observedDays: 3,
471
- observedCostUSD: 36,
472
- averageDailyCostUSD: 12,
473
- projected30DayCostUSD: 360)
474
- .applyingBudget(monthlyLimitUSD: 60)
475
-
476
- let model = UsageMenuCardView.Model.make(.init(
477
- provider: .codex,
478
- metadata: metadata,
479
- snapshot: nil,
480
- credits: nil,
481
- creditsError: nil,
482
- dashboard: nil,
483
- dashboardError: nil,
484
- tokenSnapshot: nil,
485
- tokenError: nil,
486
- ledgerTopProject: topProject,
487
- ledgerSpendForecast: providerForecast,
488
- ledgerTopProjectSpendForecast: projectForecast,
489
- account: AccountInfo(email: nil, plan: nil),
490
- isRefreshing: false,
491
- lastError: nil,
492
- usageBarsShowUsed: false,
493
- tokenCostUsageEnabled: false,
494
- showOptionalCreditsAndExtraUsage: true,
495
- now: now))
496
-
497
- #expect(model.insights?.forecastLine?.contains("Month-end forecast") == true)
498
- #expect(model.insights?.forecastLine?.contains("p80") == true)
499
- #expect(model.insights?.forecastLine?.contains("p95") == true)
500
- #expect(model.insights?.projectDetail?.contains("Budget") == true)
501
- #expect(model.insights?.projectDetail?.contains("Breach") == true)
502
- }
503
-
504
- @Test
505
- func `insights surface anomaly severity line`() throws {
506
- let metadata = try #require(ProviderDefaults.metadata[.codex])
507
- let anomaly = UsageLedgerAnomalySummary(
508
- provider: .codex,
509
- baselineDays: 7,
510
- tokenAnomaly: UsageLedgerAnomalySummary.MetricAnomaly(
511
- metric: .tokens,
512
- severity: .high,
513
- todayValue: 4200,
514
- baselineAverage: 1500,
515
- percentIncrease: 1.8),
516
- spendAnomaly: UsageLedgerAnomalySummary.MetricAnomaly(
517
- metric: .spend,
518
- severity: .elevated,
519
- todayValue: 17.5,
520
- baselineAverage: 9.0,
521
- percentIncrease: 0.94))
522
- let model = UsageMenuCardView.Model.make(.init(
523
- provider: .codex,
524
- metadata: metadata,
525
- snapshot: nil,
526
- credits: nil,
527
- creditsError: nil,
528
- dashboard: nil,
529
- dashboardError: nil,
530
- tokenSnapshot: nil,
531
- tokenError: nil,
532
- ledgerAnomaly: anomaly,
533
- account: AccountInfo(email: nil, plan: nil),
534
- isRefreshing: false,
535
- lastError: nil,
536
- usageBarsShowUsed: false,
537
- tokenCostUsageEnabled: false,
538
- showOptionalCreditsAndExtraUsage: true,
539
- now: Date()))
540
-
541
- #expect(model.insights?.anomalyLine == "Anomaly: High tokens spike")
542
- #expect(model.insights?.anomalyDetail?.contains("+180%") == true)
543
- }
544
- }
@@ -1,11 +0,0 @@
1
- @testable import Runic
2
-
3
- struct NoopMiniMaxCookieHeaderStore: MiniMaxCookieHeaderStoring {
4
- func loadHeader() throws -> String? {
5
- nil
6
- }
7
-
8
- func storeHeader(_ header: String?) throws {
9
- _ = header
10
- }
11
- }
@@ -1,11 +0,0 @@
1
- @testable import Runic
2
-
3
- struct NoopMiniMaxGroupIDStore: MiniMaxGroupIDStoring {
4
- func loadGroupID() throws -> String? {
5
- nil
6
- }
7
-
8
- func storeGroupID(_ groupID: String?) throws {
9
- _ = groupID
10
- }
11
- }
@@ -1,67 +0,0 @@
1
- import Foundation
2
- import Testing
3
- @testable import RunicCore
4
-
5
- struct MiniMaxParsingTests {
6
- @Test
7
- func `parse manual input cookie header`() {
8
- let input = "Cookie: foo=bar; baz=qux"
9
- let parsed = MiniMaxWebParsing.parseManualInput(input)
10
- #expect(parsed?.cookieHeader == "foo=bar; baz=qux")
11
- #expect(parsed?.accessToken == nil)
12
- }
13
-
14
- @Test
15
- func `parse manual input curl extracts bearer and group ID`() {
16
- let curl = """
17
- curl 'https://platform.minimax.io/v1/api/openplatform/coding_plan/remains?GroupId=group_123' \
18
- -H 'Cookie: session=abc; foo=bar' \
19
- -H 'Authorization: Bearer header.token.value'
20
- """
21
- let parsed = MiniMaxWebParsing.parseManualInput(curl)
22
- #expect(parsed?.cookieHeader == "session=abc; foo=bar")
23
- #expect(parsed?.accessToken == "header.token.value")
24
- #expect(parsed?.groupID == "group_123")
25
- }
26
-
27
- @Test
28
- func `parse HTML usage with percent and reset`() {
29
- let html = """
30
- <html>
31
- <head><title>MiniMax Pro</title></head>
32
- <body>
33
- <div>Available usage: 40%</div>
34
- <div>Resets in 2d 3h</div>
35
- </body>
36
- </html>
37
- """
38
- let now = Date(timeIntervalSince1970: 0)
39
- let parsed = MiniMaxWebParsing.parseHTMLUsage(html, now: now)
40
- #expect(parsed?.usedPercent == 60)
41
- #expect(parsed?.planName == "MiniMax Pro")
42
- #expect(parsed?.resetDescription == "Resets in 2d 3h")
43
- #expect(parsed?.resetsAt == now.addingTimeInterval(TimeInterval((2 * 24 * 60 + 3 * 60) * 60)))
44
- }
45
-
46
- @Test
47
- func `parse remains response uses model remains`() throws {
48
- let json = """
49
- {
50
- "base_resp": { "retcode": 0, "msg": "ok", "success": true },
51
- "data": {
52
- "model_remains": { "used": 20, "total": 100 },
53
- "start_time": 1700000000,
54
- "end_time": 1700003600,
55
- "remains_time": 600,
56
- "plan_name": "MiniMax Pro"
57
- }
58
- }
59
- """
60
- let now = Date(timeIntervalSince1970: 0)
61
- let parsed = try MiniMaxWebParsing.parseRemainsResponse(Data(json.utf8), now: now)
62
- #expect(parsed.usedPercent == 20)
63
- #expect(parsed.windowMinutes == 60)
64
- #expect(parsed.resetsAt == now.addingTimeInterval(600))
65
- #expect(parsed.planName == "MiniMax Pro")
66
- }
67
- }
@@ -1,11 +0,0 @@
1
- @testable import Runic
2
-
3
- struct NoopMiniMaxTokenStore: MiniMaxTokenStoring {
4
- func loadToken() throws -> String? {
5
- nil
6
- }
7
-
8
- func storeToken(_ token: String?) throws {
9
- _ = token
10
- }
11
- }