@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,35 +0,0 @@
1
- ---
2
- summary: "Provider macro refactor ideas and follow-ups."
3
- read_when:
4
- - Reviewing provider macro ergonomics
5
- - Planning provider/descriptor refactors
6
- ---
7
-
8
- # Macro refactor ideas
9
-
10
- 1. Macro ergonomics + errors
11
- - Emit compile-time errors when a macro is attached to the wrong target or missing `descriptor`/`init`.
12
- - Add a member macro to generate `static let descriptor` from `makeDescriptor()` to remove boilerplate.
13
-
14
- 2. Descriptor/data shape
15
- - Split ProviderDescriptor into Descriptor + FetchPlan + Branding + CLI files for cleaner deps.
16
- - Move source label into fetch results (strategy-specific).
17
-
18
- 3. Fetching pipeline
19
- - Return all attempted strategies + errors for debug UI and CLI `--verbose`.
20
-
21
- 4. Registry order & stability
22
- - Use ProviderDescriptorRegistry registration order for `all`; no sorting by rawValue.
23
- - Use metadata flags (e.g. `isPrimaryProvider`) instead of hard-coded Codex/Claude.
24
-
25
- 5. Account/identity
26
- - Replace Codex UI special casing with a descriptor flag (e.g. `usesAccountFallback`).
27
- - Enforce provider-keyed identity in snapshots to avoid cross-provider display.
28
-
29
- 6. Settings + tokens
30
- - Move Zai/Copilot token lookup into strategy-local resolvers (Keychain/env).
31
- - Add optional per-provider settings fields in ProviderSettingsSnapshot.
32
-
33
- 7. Docs + tests
34
- - Add a minimal provider example in docs/provider.md.
35
- - Add registry completeness + deterministic-order test.
@@ -1,22 +0,0 @@
1
- ---
2
- summary: "Refresh cadence, background updates, and error handling."
3
- read_when:
4
- - Changing refresh cadence, background tasks, or refresh triggers
5
- - Investigating refresh timing or stale data behavior
6
- ---
7
-
8
- # Refresh loop
9
-
10
- ## Cadence
11
- - `RefreshFrequency`: Manual, 1m, 2m, 5m (default), 15m.
12
- - Stored in `UserDefaults` via `SettingsStore`.
13
-
14
- ## Behavior
15
- - Background refresh runs off-main and updates `UsageStore` (usage + credits + optional web scrape).
16
- - Manual “Refresh now” always available in the menu.
17
- - Stale/error states dim the icon and surface status in-menu.
18
-
19
- ## Optional future
20
- - Auto-seed a log if none exists via `codex exec --skip-git-repo-check --json "ping"` (currently not executed).
21
-
22
- See also: `docs/status.md`, `docs/ui.md`.
@@ -1,35 +0,0 @@
1
- ---
2
- summary: "Homebrew Cask release steps for Runic (Sparkle-disabled builds)."
3
- read_when:
4
- - Publishing a Runic release via Homebrew
5
- - Updating the Homebrew tap cask definition
6
- ---
7
-
8
- # Runic Homebrew Release Playbook
9
-
10
- Homebrew is for the UI app via Cask. When installed via Homebrew, Runic disables Sparkle and shows a "update via brew" hint in About.
11
-
12
- ## Prereqs
13
- - Homebrew installed.
14
- - Access to the tap repo: `../homebrew-tap`.
15
-
16
- ## 1) Release Runic normally
17
- Follow `docs/RELEASING.md` to publish `Runic-<version>.zip` to GitHub Releases.
18
-
19
- ## 2) Update the Homebrew tap cask
20
- In `../homebrew-tap`, add/update the cask at `Casks/runic.rb`:
21
- - `url` points at the GitHub release asset: `.../releases/download/v<version>/Runic-<version>.zip`
22
- - Update `sha256` to match that zip.
23
- - Keep `depends_on arch: :arm64` and `depends_on macos: ">= :sonoma"` (Runic is macOS 14+).
24
-
25
- ## 3) Verify install
26
- ```sh
27
- brew uninstall --cask runic || true
28
- brew untap steipete/tap || true
29
- brew tap steipete/tap
30
- brew install --cask steipete/tap/runic
31
- open -a Runic
32
- ```
33
-
34
- ## 4) Push tap changes
35
- Commit + push in the tap repo.
package/docs/releasing.md DELETED
@@ -1,121 +0,0 @@
1
- ---
2
- summary: "Runic release checklist: package, sign, notarize, appcast, and asset validation."
3
- read_when:
4
- - Starting a Runic release
5
- - Updating signing/notarization or appcast steps
6
- - Validating release assets or Sparkle feed
7
- ---
8
-
9
- # Release process (Runic)
10
-
11
- SwiftPM-only; package/sign/notarize manually (no Xcode project). Sparkle feed is served from GitHub Releases. Checklist below merges Trimmy’s release flow with Runic specifics.
12
-
13
- **Reference first:** follow this Runic-specific guide as the source of truth for release steps.
14
-
15
- ## Expectations
16
- - When someone says “release Runic”, do the entire end-to-end flow: bump versions/CHANGELOG, build, sign and notarize, upload the zip to the GitHub release, generate/update the appcast with the new signature, publish the tag/release, and verify the enclosure URL responds with 200/OK and installs via Sparkle (no 404s or stale feeds).
17
-
18
- ### Release automation notes (Scripts/release.sh)
19
- - Always forces a fresh build/notarization (no cached artifacts) before publishing.
20
- - Fails fast if: git tree is dirty, the top changelog section is still “Unreleased” or mismatched, the target version already exists in the appcast, or the build number is not greater than the latest appcast entry.
21
- - Sparkle key probe runs up front; appcast entry + signature verified automatically after generation.
22
- - Release notes are extracted directly from the current changelog section and passed to the GitHub release (no manual notes flag needed).
23
- - Sparkle appcast notes are generated as HTML from the same changelog section and embedded into the appcast entry.
24
- - Uses in-repo helpers (`Scripts/release-lib.sh`) so release checks no longer depend on external/private script paths.
25
- - Requires tools/env on PATH: `swiftformat`, `swiftlint`, `swift`, `sign_update`, `generate_appcast`, `gh`, `python3`, `zip`, `curl`, plus `APP_STORE_CONNECT_*` and `SPARKLE_PRIVATE_KEY_FILE`.
26
-
27
- ## Prereqs
28
- - Xcode 26+ installed at `/Applications/Xcode.app` (for ictool/iconutil and SDKs).
29
- - Developer ID Application cert installed (e.g. `Developer ID Application: YOUR_NAME (TEAMID)`).
30
- - ASC API creds in env: `APP_STORE_CONNECT_API_KEY_P8`, `APP_STORE_CONNECT_KEY_ID`, `APP_STORE_CONNECT_ISSUER_ID`.
31
- - Sparkle keys: public key already in Info.plist; private key path set via `SPARKLE_PRIVATE_KEY_FILE` when generating appcast.
32
- - Ensure shell has release env vars loaded (usually `source ~/.profile`) before running `Scripts/release.sh`.
33
-
34
- ## Icon (glass .icon → .icns)
35
- ```
36
- ./Scripts/build_icon.sh Icon.icon Runic
37
- ```
38
- Uses Xcode’s `ictool` + transparent padding + iconset → Icon.icns.
39
-
40
- ## Build, sign, notarize (universal: arm64 + x86_64)
41
- ```
42
- ./Scripts/sign-and-notarize.sh
43
- ```
44
- What it does:
45
- - `swift build -c release --arch arm64` and `swift build -c release --arch x86_64`
46
- - Packages `Runic.app` with Info.plist and Icon.icns
47
- - Embeds Sparkle.framework, Updater, Autoupdate, XPCs
48
- - Codesigns **everything** with runtime + timestamp (deep) and adds rpath
49
- - Zips to `Runic-<version>.zip`
50
- - Submits to notarytool, waits, staples, validates
51
-
52
- Gotchas fixed:
53
- - Sparkle needs signing for framework, Autoupdate, Updater, XPCs (Downloader/Installer) or notarization fails.
54
- - Use `--timestamp` and `--deep` when signing the app to avoid invalid signature errors.
55
- - Avoid `unzip` — it can add AppleDouble `._*` files that break the sealed signature and trigger “app is damaged”. Use Finder or `ditto -x -k Runic-<ver>.zip /Applications`. If Gatekeeper complains, delete the app bundle, re-extract with `ditto`, then `spctl -a -t exec` to verify.
56
- - Manual sanity check before uploading: `find Runic.app -name '._*'` should return nothing; then `spctl --assess --type execute --verbose Runic.app` and `codesign --verify --deep --strict --verbose Runic.app` should both pass on the packaged bundle.
57
-
58
- ## Appcast (Sparkle)
59
- After notarization:
60
- ```
61
- SPARKLE_PRIVATE_KEY_FILE=/path/to/ed25519-priv.key \
62
- ./Scripts/make_appcast.sh Runic-0.1.0.zip \
63
- https://raw.githubusercontent.com/sriinnu/Runic/main/appcast.xml
64
- Generates HTML release notes from `CHANGELOG.md` (via `Scripts/changelog-to-html.sh`) and embeds them into the appcast entry.
65
- ```
66
- Uploads not handled automatically—commit/publish appcast + zip to the feed location (GitHub Releases/raw URL).
67
-
68
- ## Tag & release
69
- ```
70
- git tag v<version>
71
- ./Scripts/make_appcast.sh ...
72
- # upload zip + appcast to Releases
73
- # then create GitHub release (gh release create v<version> ...)
74
- ```
75
-
76
- ## Homebrew (Cask)
77
- Runic ships a Homebrew **Cask** in `../homebrew-tap`. When installed via Homebrew, Runic disables Sparkle and the app
78
- must be updated via `brew`.
79
-
80
- After publishing the GitHub release, update the tap cask (see `docs/releasing-homebrew.md`).
81
-
82
- ## Checklist (quick)
83
- - [ ] Read this file end-to-end before starting.
84
- - [ ] Update versions (scripts/Info.plist, CHANGELOG, About text) — changelog top section must be finalized; release script pulls notes from it automatically.
85
- - [ ] `swiftformat`, `swiftlint`, `swift test` (zero warnings/errors)
86
- - [ ] `./Scripts/build_icon.sh` if icon changed
87
- - [ ] `./Scripts/sign-and-notarize.sh`
88
- - [ ] Generate Sparkle appcast with private key
89
- - Sparkle ed25519 private key path: `/Users/sriinnu/Library/CloudStorage/Dropbox/Backup/Sparkle/sparkle-private-key-KEEP-SECURE.txt` (primary) and `/Users/sriinnu/Library/CloudStorage/Dropbox/Backup/Sparkle-VibeTunnel/sparkle-private-key-KEEP-SECURE.txt` (older backup)
90
- - Upload the dSYM archive alongside the app zip on the GitHub release; the release script now automates this and will fail if it’s missing.
91
- - After publishing the release, run `Scripts/check-release-assets.sh <tag>` to confirm both the app zip and dSYM zip are present on GitHub.
92
- - Generate the appcast + HTML release notes: `./Scripts/make_appcast.sh Runic-<ver>.zip https://raw.githubusercontent.com/sriinnu/Runic/main/appcast.xml`
93
- - Verify the enclosure signature + size: `SPARKLE_PRIVATE_KEY_FILE=... ./Scripts/verify_appcast.sh <ver>`
94
- - [ ] Upload zip + appcast to feed; publish tag + GitHub release so Sparkle URL is live (avoid 404)
95
- - [ ] Homebrew tap: update `../homebrew-tap/Casks/runic.rb` (url + sha256), then verify:
96
- - `brew uninstall --cask runic || true`
97
- - `brew untap sriinnu/tap || true; brew tap sriinnu/tap`
98
- - `brew install --cask sriinnu/tap/runic && open -a Runic`
99
- - [ ] Version continuity: confirm the new version is the immediate next patch/minor (no gaps) and CHANGELOG has no skipped numbers (e.g., after 0.2.0 use 0.2.1, not 0.2.2)
100
- - [ ] Changelog sanity: single top-level title, no duplicate version sections, versions strictly descending with no repeats
101
- - [ ] Release pages: title format `Runic <version>`, notes as Markdown list (no stray blank lines)
102
- - [ ] Changelog/release notes are user-facing: avoid internal-only bullets (build numbers, script bumps) and keep entries concise
103
- - [ ] Download uploaded `Runic-<ver>.zip`, unzip via `ditto`, run, and verify signature (`spctl -a -t exec -vv Runic.app` + `stapler validate`)
104
- - [ ] Confirm `appcast.xml` points to the new zip/version and renders the HTML release notes (not escaped tags)
105
- - [ ] Verify on GitHub Releases: assets present (zip, appcast), release notes match changelog, version/tag correct
106
- - [ ] Open the appcast URL in browser to confirm the new entry is visible and enclosure URL is reachable
107
- - [ ] Manually visit the enclosure URL (curl -I) to ensure 200/OK (no 404) after publishing assets/release
108
- - [ ] Ensure `sparkle:edSignature` is present for the enclosure in appcast (generated by `generate_appcast` with the ed25519 key)
109
- - [ ] When creating the GitHub release, paste the CHANGELOG entry as Markdown list (one `-` per line, blank line between sections); visually confirm bullets render correctly after publishing
110
- - [ ] Keep a previous signed build in `/Applications/Runic.app` to test Sparkle delta/full update to the new release
111
- - [ ] Manual Gatekeeper sanity: after packaging, `find Runic.app -name '._*'` is empty, `spctl --assess --type execute --verbose Runic.app` and `codesign --verify --deep --strict --verbose Runic.app` succeed
112
- - [ ] For Sparkle verification: if replacing `/Applications/Runic.app`, quit first, replace, relaunch, and test update
113
- - **Definition of “done” for a release:** all of the above are complete, the appcast/enclosure link resolves, Homebrew cask
114
- installs, and a previous public build can update to the new one via Sparkle. Anything short of that is not a finished release.
115
-
116
- ## Troubleshooting
117
- - **White plate icon**: regenerate icns via `build_icon.sh` (ictool) to ensure transparent padding.
118
- - **Notarization invalid**: verify deep+timestamp signing, especially Sparkle’s Autoupdate/Updater and XPCs; rerun package + sign-and-notarize.
119
- - **App won’t launch**: ensure Sparkle.framework is embedded under `Contents/Frameworks` and rpath added; codesign deep.
120
- - **App “damaged” dialog after unzip**: re-extract with `ditto -x -k`, removing any `._*` files, then re-verify with `spctl`.
121
- - **Update download fails (404)**: ensure the release asset referenced in appcast exists and is published in the corresponding GitHub release; verify with `curl -I <enclosure-url>`.
@@ -1,47 +0,0 @@
1
- # Concrete TODO (Execution List)
2
-
3
- Branch: `feat/research-uiux-core-next`
4
- Last updated: 2026-02-22
5
-
6
- ## Sprint Goal
7
-
8
- Ship operator-grade insights in small, verifiable slices without destabilizing current menu behavior.
9
-
10
- ## P0 (Now)
11
-
12
- - [x] Create research-backed roadmap document
13
- File: `docs/research/feature_uiux_roadmap_2026-02-22.md`
14
- - [x] Add probabilistic month-end forecast confidence bands (`p50/p80/p95`) to core forecast model
15
- - [x] Render confidence bands in menu Insights line when available
16
- - [x] Add/extend tests for confidence-band generation and menu formatting
17
-
18
- ## P1 (Next)
19
-
20
- - [x] Anomaly explainability v2
21
- - [x] Add explanation object for why severity was chosen
22
- - [x] Surface primary and secondary contributing factors in menu copy
23
- - [x] Policy engine foundation (warn / soft-limit / hard-stop)
24
- - [x] Core model in `RunicCore`
25
- - [x] Deterministic decision tests
26
-
27
- ## P2 (After P1)
28
-
29
- - [x] OTel GenAI ingestion adapter (feature-flagged)
30
- - [x] Team showback/chargeback summary exports
31
- - [x] Cross-platform parity matrix and release gate checklist
32
-
33
- ## Immediate Work Plan (This Branch)
34
-
35
- 1. Extend `UsageLedgerSpendForecast` with optional confidence outputs.
36
- 2. Compute quantiles from observed daily cost distribution in `UsageLedgerAggregator`.
37
- 3. Preserve these fields in `UsageStore` projection-resolution path.
38
- 4. Update menu forecast rendering to show `p50/p80/p95` when available.
39
- 5. Validate with targeted tests and full rebuild script.
40
-
41
- ## Definition Of Done (Current Slice)
42
-
43
- - Forecast model compiles with backward-compatible optional fields.
44
- - Existing forecast tests pass.
45
- - New quantile test passes.
46
- - Menu model test confirms confidence string appears.
47
- - `./Scripts/compile_and_run.sh` completes successfully.
@@ -1,248 +0,0 @@
1
- # Core Feature Research Log
2
-
3
- Date: 2026-02-21
4
- Branch: feat/core
5
-
6
- ## Goal
7
-
8
- Collect concrete, source-backed feature ideas for Runic core roadmap from:
9
- - GitHub projects (production patterns)
10
- - arXiv papers (state-of-the-art approaches)
11
-
12
- This file is updated incrementally during research to avoid context loss.
13
-
14
- ## Status
15
-
16
- - [x] Research file created
17
- - [x] Gather current GitHub evidence
18
- - [x] Gather current arXiv evidence
19
- - [x] Synthesize feature candidates with implementation notes
20
- - [x] Prioritize roadmap (Now / Next / Later)
21
-
22
- ## External Evidence Snapshot
23
-
24
- ### arXiv evidence (routing, caching, cost/quality)
25
-
26
- 1. FrugalGPT (2023)
27
- - Link: https://arxiv.org/abs/2305.05176
28
- - Signal: Cascaded LLM usage can cut cost heavily while maintaining quality (paper reports very large cost savings in their setup).
29
- - Relevance to Runic: Runic can add cost-quality simulation and routing recommendations over existing provider usage logs.
30
-
31
- 2. RouteLLM (2024)
32
- - Link: https://arxiv.org/abs/2406.18665
33
- - Signal: Learned routers can route between strong/weak models with significant cost reduction while preserving much of strong-model quality.
34
- - Relevance to Runic: Add "Routing Advisor" that proposes per-project provider/model policies from real usage history.
35
-
36
- 3. LLMRouterBench (2026)
37
- - Link: https://arxiv.org/abs/2601.07206
38
- - Signal: Large benchmark shows routing is useful, but many methods are brittle and simple baselines are often hard to beat.
39
- - Relevance to Runic: Favor robust baseline policies first (fallback + threshold + guardrails) before heavier ML routing.
40
-
41
- 4. vCache (2025)
42
- - Link: https://arxiv.org/abs/2502.03771
43
- - Signal: Semantic caching with error-bound control can reduce redundant LLM calls.
44
- - Relevance to Runic: Add cacheability analytics and "likely cache hit" opportunity scoring per project/workflow.
45
-
46
- 5. Generative Caching (2025)
47
- - Link: https://arxiv.org/abs/2503.17603
48
- - Signal: Cache systems that generate compact responses for similar prompts improve cost/latency.
49
- - Relevance to Runic: Track prompt similarity buckets and estimate avoidable spend from repeated prompt patterns.
50
-
51
- ### GitHub and docs evidence (production implementation patterns)
52
-
53
- 1. LiteLLM
54
- - Repo: https://github.com/BerriAI/litellm
55
- - Reliability docs: https://docs.litellm.ai/docs/proxy/reliability
56
- - Signal: Production-grade patterns include retries, fallbacks, cooldowns, and routing controls.
57
- - Relevance: Runic should expose policy diagnostics and recommend fallback policy quality from observed failures.
58
-
59
- 2. Helicone AI Gateway
60
- - Repo: https://github.com/Helicone/ai-gateway
61
- - Signal: Unified gateway pattern with routing, load balancing, caching, tracing, and limits.
62
- - Relevance: Runic can add "Gateway Readiness Score" for teams deciding when to adopt a gateway.
63
-
64
- 3. Langfuse
65
- - Repo: https://github.com/langfuse/langfuse
66
- - Signal: Prompt management, tracing, evals, datasets, and collaborative AI ops workflows.
67
- - Relevance: Runic should support prompt/version correlation and eval score overlays in usage charts.
68
-
69
- 4. Promptfoo
70
- - Repo: https://github.com/promptfoo/promptfoo
71
- - Signal: Eval + red-team workflows integrated into CI.
72
- - Relevance: Runic can ingest eval outputs and show quality regressions next to spend spikes.
73
-
74
- 5. OpenAI Evals
75
- - Repo: https://github.com/openai/evals
76
- - Docs link from repo: https://platform.openai.com/docs/guides/evals
77
- - Signal: Evals are a core mechanism to measure model/version quality impact.
78
- - Relevance: Runic can include first-class "Eval Health" alongside budget health.
79
-
80
- 6. OpenTelemetry GenAI semantic conventions
81
- - Metrics: https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-metrics/
82
- - Spans: https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/
83
- - Signal: Standard fields for provider/model/operation/timing are now defined for GenAI telemetry.
84
- - Relevance: Runic should export normalized telemetry so dashboards/tools interoperate cleanly.
85
-
86
- 7. MCP specification (tools/prompts)
87
- - Tools: https://modelcontextprotocol.io/specification/2025-06-18/server/tools
88
- - Prompts: https://modelcontextprotocol.io/specification/2025-06-18/server/prompts
89
- - Signal: Standardized tool invocation and prompt serving surface for agentic systems.
90
- - Relevance: Runic can add MCP-specific analytics (tool error rate, latency, prompt-template performance).
91
-
92
- ## Feature Candidates (for Runic core)
93
-
94
- ### A) Routing Advisor + Cost-Quality Simulator
95
-
96
- What:
97
- - Simulate alternative model/provider routing policies against historical usage ledger data.
98
- - Show projected delta for cost, latency proxy, and quality proxy.
99
-
100
- Why now:
101
- - Directly aligned to FrugalGPT + RouteLLM evidence.
102
- - Low dependency because Runic already has usage ledger + provider cost paths.
103
-
104
- Implementation sketch:
105
- - Extend `Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift` with simulation inputs/outputs.
106
- - Add policy models in `Sources/RunicCore/Performance/PerformanceModels.swift`.
107
- - Add menu card in `Sources/Runic/Views/Menu/` (new `RoutingAdvisorMenuView.swift`).
108
-
109
- ### B) Reliability Policy Score (Fallback/Retry/Cooldown quality)
110
-
111
- What:
112
- - Per provider/project score for policy robustness:
113
- - failure-rate trends
114
- - fallback coverage
115
- - timeout/retry efficiency
116
- - observed "hard fail with no fallback" incidents
117
-
118
- Why now:
119
- - Practical baseline recommended by LLMRouterBench-style findings.
120
- - Matches LiteLLM/Helicone operational patterns.
121
-
122
- Implementation sketch:
123
- - Persist policy signals in `Sources/RunicCore/Performance/PerformanceStorageImpl.swift`.
124
- - Add scoring service in `Sources/RunicCore/Performance/`.
125
- - Render in `Sources/Runic/Views/Menu/AlertsMenuView.swift` and a dedicated card.
126
-
127
- ### C) Eval-Linked Spend Analytics
128
-
129
- What:
130
- - Ingest eval outputs (Promptfoo/OpenAI Evals style) and align with cost/usage windows.
131
- - Show "quality down + spend up" and "quality stable + cost down" events.
132
-
133
- Why now:
134
- - Moves Runic from pure accounting to decision support.
135
-
136
- Implementation sketch:
137
- - New ingest model (JSON/YAML adapter) in `Sources/RunicCore/`.
138
- - Cross-join with provider/day/project aggregates in usage ledger pipeline.
139
- - Add view in `Sources/Runic/Views/Performance/PerformanceDashboardView.swift`.
140
-
141
- ### D) Semantic Cache Opportunity Analyzer
142
-
143
- What:
144
- - Detect repeated or near-duplicate prompt patterns and estimate avoidable token cost.
145
- - Flag cache-friendly workflows per project.
146
-
147
- Why now:
148
- - Backed by vCache/generative-caching direction and gateway practices.
149
-
150
- Implementation sketch:
151
- - Add prompt fingerprint stats in usage ledger models.
152
- - Keep first version lightweight: hash + normalized prompt-template fingerprint, not full semantic embeddings.
153
- - UI card in menu + performance dashboard.
154
-
155
- ### E) OpenTelemetry GenAI Export
156
-
157
- What:
158
- - Export Runic telemetry in OTel GenAI-compatible fields.
159
- - Include provider, request model, response model, operation, and latency buckets.
160
-
161
- Why now:
162
- - Standardization unlocks external dashboards and enterprise integrations.
163
-
164
- Implementation sketch:
165
- - Add mapper in `Sources/RunicCore/Logging/` or `Sources/RunicCore/Performance/`.
166
- - Optional sink to JSON/OTLP compatible format.
167
-
168
- ### F) MCP Tool and Prompt Analytics
169
-
170
- What:
171
- - Track MCP tool-call rates, latency, error classes, and prompt-template success trends.
172
- - Show per-project MCP "tool reliability heatmap."
173
-
174
- Why now:
175
- - Agentic workflows are increasingly MCP-centric.
176
-
177
- Implementation sketch:
178
- - Add MCP event model in `RunicCore`.
179
- - New menu views under `Sources/Runic/Views/Menu/`.
180
-
181
- ## Data Product Improvements (directly for your current concern)
182
-
183
- Your concern:
184
- - "Insights do not show actual project names reliably."
185
-
186
- Likely core issue:
187
- - Project identity is fragmented across providers/log formats (`projectID` present but often not normalized).
188
-
189
- Concrete fixes:
190
- 1. Add project identity normalization pipeline:
191
- - Canonical key = provider + normalized project slug + optional workspace path hash.
192
- - Keep alias table for renamed projects.
193
-
194
- 2. Improve extraction heuristics:
195
- - Parse project name from known fields and fallback to path/repo hints.
196
- - Add confidence score per inferred project name.
197
-
198
- 3. Preserve provenance:
199
- - Store source field map that produced each project name, to debug mismatches quickly.
200
-
201
- 4. UI safety:
202
- - Show "Unknown project" only when confidence is low, with hover details and quick relabel action.
203
-
204
- Suggested file touchpoints:
205
- - `Sources/RunicCore/UsageLedger/UsageLedgerModels.swift`
206
- - `Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift`
207
- - `Sources/Runic/Core/Stores/UsageStore.swift`
208
- - `Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift`
209
-
210
- ## Prioritized Roadmap
211
-
212
- ### Now (1-2 weeks)
213
-
214
- 1. Project identity normalization and project-name confidence
215
- 2. Reliability Policy Score (fallback/retry/cooldown diagnostics)
216
- 3. Routing Advisor v1 (baseline simulation only, no ML training)
217
-
218
- Acceptance criteria:
219
- - Insights show stable project names across refresh cycles.
220
- - At least one actionable routing recommendation per active project.
221
- - Policy score visible for each enabled provider.
222
-
223
- ### Next (2-4 weeks)
224
-
225
- 1. Eval-Linked Spend Analytics (Promptfoo/OpenAI Evals import)
226
- 2. Semantic Cache Opportunity Analyzer (fingerprint-based)
227
- 3. OTel GenAI export (file or endpoint sink)
228
-
229
- Acceptance criteria:
230
- - Can correlate eval deltas with cost deltas per project and time window.
231
- - Can quantify estimated avoidable spend from repeated prompt patterns.
232
- - External tools can ingest standardized Runic telemetry fields.
233
-
234
- ### Later (4+ weeks)
235
-
236
- 1. MCP tool/prompt analytics and heatmaps
237
- 2. Advanced routing policies (bandit/learned router plugins)
238
- 3. Team-level governance pack (policy presets, compliance reports)
239
-
240
- Acceptance criteria:
241
- - MCP-heavy teams can see tool reliability and prompt effectiveness trends.
242
- - Multi-provider routing decisions can be tuned with measurable outcomes.
243
-
244
- ## Notes on methodology
245
-
246
- - Preference was given to primary sources (paper pages, official repos/docs).
247
- - Claims are interpreted conservatively; recommendations emphasize robust baselines first.
248
- - Research intent here is product-directional, not a claim of guaranteed gain in every workload.