@sriinnu/runic 1.0.0

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 (584) hide show
  1. package/.swiftformat +50 -0
  2. package/.swiftlint.yml +160 -0
  3. package/CHANGELOG.md +307 -0
  4. package/CONTRIBUTING.md +456 -0
  5. package/Icon.icns +0 -0
  6. package/Icon.icon/Assets/runic.png +0 -0
  7. package/Icon.icon/icon.json +36 -0
  8. package/LICENSE +21 -0
  9. package/Package.resolved +51 -0
  10. package/Package.swift +136 -0
  11. package/Packages/Helix/LICENSE +21 -0
  12. package/Packages/Helix/Package.swift +29 -0
  13. package/Packages/Helix/README.md +976 -0
  14. package/Packages/Helix/Sources/Helix/Binding.swift +111 -0
  15. package/Packages/Helix/Sources/Helix/CommandParser.swift +160 -0
  16. package/Packages/Helix/Sources/Helix/CommandSignature.swift +117 -0
  17. package/Packages/Helix/Sources/Helix/ExpressibleFromArgument.swift +72 -0
  18. package/Packages/Helix/Sources/Helix/HelpGenerator.swift +175 -0
  19. package/Packages/Helix/Sources/Helix/NameSpecification.swift +98 -0
  20. package/Packages/Helix/Sources/Helix/ParsableCommand.swift +204 -0
  21. package/Packages/Helix/Sources/Helix/Platform/DarwinPlatformContext.swift +44 -0
  22. package/Packages/Helix/Sources/Helix/Platform/LinuxPlatformContext.swift +34 -0
  23. package/Packages/Helix/Sources/Helix/Platform/PlatformContext+Default.swift +91 -0
  24. package/Packages/Helix/Sources/Helix/Platform/PlatformContext.swift +94 -0
  25. package/Packages/Helix/Sources/Helix/Platform/PlatformPath.swift +167 -0
  26. package/Packages/Helix/Sources/Helix/Platform/Stdio.swift +99 -0
  27. package/Packages/Helix/Sources/Helix/Platform/WebPlatformContext.swift +146 -0
  28. package/Packages/Helix/Sources/Helix/Platform/WindowsPlatformContext.swift +97 -0
  29. package/Packages/Helix/Sources/Helix/Program.swift +204 -0
  30. package/Packages/Helix/Sources/Helix/PropertyWrappers.swift +367 -0
  31. package/Packages/Silo/LICENSE +21 -0
  32. package/Packages/Silo/Package.swift +34 -0
  33. package/Packages/Silo/README.md +466 -0
  34. package/Packages/Silo/Sources/Silo/BinaryCookiesReader.swift +169 -0
  35. package/Packages/Silo/Sources/Silo/BrowserCookieAnalytics.swift +365 -0
  36. package/Packages/Silo/Sources/Silo/BrowserCookieBackends.swift +594 -0
  37. package/Packages/Silo/Sources/Silo/BrowserCookieClient.swift +326 -0
  38. package/Packages/Silo/Sources/Silo/BrowserCookieExport.swift +154 -0
  39. package/Packages/Silo/Sources/Silo/BrowserCookieImport.swift +119 -0
  40. package/Packages/Silo/Sources/Silo/BrowserCookieMockStore.swift +121 -0
  41. package/Packages/Silo/Sources/Silo/BrowserCookieModels.swift +391 -0
  42. package/Packages/Silo/Sources/Silo/ChromiumCookieReader.swift +240 -0
  43. package/Packages/Silo/Sources/Silo/CryptoSupport.swift +86 -0
  44. package/Packages/Silo/Sources/Silo/FirefoxCookieReader.swift +172 -0
  45. package/Packages/Silo/Sources/Silo/LinuxChromiumCookieReader.swift +172 -0
  46. package/Packages/Silo/Sources/Silo/LinuxSecretService.swift +105 -0
  47. package/Packages/Silo/Sources/Silo/MacOSChromiumCookieReader.swift +191 -0
  48. package/Packages/Silo/Sources/Silo/SQLiteSnapshot.swift +41 -0
  49. package/Packages/Silo/Sources/Silo/WindowsChromiumCookieReader.swift +110 -0
  50. package/README.md +109 -0
  51. package/RuniciOS/App/RuniciOSApp.swift +105 -0
  52. package/RuniciOS/Core/iOSUsageStore.swift +192 -0
  53. package/RuniciOS/Views/ProviderDetailView.swift +312 -0
  54. package/RuniciOS/Views/ProviderListView.swift +228 -0
  55. package/RuniciOS/Widgets/LargeWidget.swift +367 -0
  56. package/RuniciOS/Widgets/LiveActivity.swift +342 -0
  57. package/RuniciOS/Widgets/LockScreenWidget.swift +273 -0
  58. package/RuniciOS/Widgets/MediumWidget.swift +370 -0
  59. package/RuniciOS/Widgets/RunicWidget.swift +274 -0
  60. package/RuniciOS/Widgets/SmallWidget.swift +281 -0
  61. package/RuniciOS/Widgets/WidgetModels.swift +285 -0
  62. package/RuniciOS/Widgets/WidgetTimeline.swift +270 -0
  63. package/Scripts/CREATION-SUMMARY.md +367 -0
  64. package/Scripts/DIRECTORY-STRUCTURE.md +358 -0
  65. package/Scripts/GETTING-STARTED-CHECKLIST.md +364 -0
  66. package/Scripts/INDEX.md +365 -0
  67. package/Scripts/QUICK-REFERENCE.md +164 -0
  68. package/Scripts/README-SCRIPTS.md +926 -0
  69. package/Scripts/build-android.sh +526 -0
  70. package/Scripts/build-ios.sh +529 -0
  71. package/Scripts/build-macos.sh +603 -0
  72. package/Scripts/build-windows.sh +504 -0
  73. package/Scripts/build_icon.sh +49 -0
  74. package/Scripts/changelog-to-html.sh +89 -0
  75. package/Scripts/check-release-assets.sh +10 -0
  76. package/Scripts/ci-config.yml +474 -0
  77. package/Scripts/compile_and_run.sh +219 -0
  78. package/Scripts/compile_and_run_adhoc.sh +4 -0
  79. package/Scripts/docs-list.mjs +119 -0
  80. package/Scripts/make_appcast.sh +58 -0
  81. package/Scripts/package_app.sh +409 -0
  82. package/Scripts/release-lib.sh +214 -0
  83. package/Scripts/release.sh +76 -0
  84. package/Scripts/setup-all.sh +387 -0
  85. package/Scripts/setup-ios.sh +404 -0
  86. package/Scripts/setup-react-native.sh +523 -0
  87. package/Scripts/sign-and-notarize.sh +122 -0
  88. package/Scripts/test_live_update.sh +38 -0
  89. package/Scripts/validate_changelog.sh +23 -0
  90. package/Scripts/verify_appcast.sh +92 -0
  91. package/Sources/Runic/About.swift +93 -0
  92. package/Sources/Runic/AppNotifications.swift +115 -0
  93. package/Sources/Runic/Controllers/StatusItemController+Actions.swift +657 -0
  94. package/Sources/Runic/Controllers/StatusItemController+Animation.swift +518 -0
  95. package/Sources/Runic/Controllers/StatusItemController+ChartSubmenus.swift +810 -0
  96. package/Sources/Runic/Controllers/StatusItemController+CustomProviders.swift +87 -0
  97. package/Sources/Runic/Controllers/StatusItemController+Menu.swift +1379 -0
  98. package/Sources/Runic/Controllers/StatusItemController+MenuCards.swift +337 -0
  99. package/Sources/Runic/Controllers/StatusItemController+MenuHelpers.swift +395 -0
  100. package/Sources/Runic/Controllers/StatusItemController.swift +360 -0
  101. package/Sources/Runic/Core/BudgetNotificationManager.swift +80 -0
  102. package/Sources/Runic/Core/Login/ClaudeLoginRunner.swift +103 -0
  103. package/Sources/Runic/Core/Login/CodexLoginRunner.swift +154 -0
  104. package/Sources/Runic/Core/Login/CursorLoginRunner.swift +206 -0
  105. package/Sources/Runic/Core/Login/GeminiLoginRunner.swift +95 -0
  106. package/Sources/Runic/Core/Rendering/IconRenderer.swift +1216 -0
  107. package/Sources/Runic/Core/Rendering/IconView.swift +120 -0
  108. package/Sources/Runic/Core/Rendering/ProviderBrandIcon.swift +71 -0
  109. package/Sources/Runic/Core/RunicAnimation.swift +53 -0
  110. package/Sources/Runic/Core/RunicColors.swift +73 -0
  111. package/Sources/Runic/Core/RunicCornerRadius.swift +15 -0
  112. package/Sources/Runic/Core/RunicSpacing.swift +68 -0
  113. package/Sources/Runic/Core/Stores/AuggieTokenStore.swift +143 -0
  114. package/Sources/Runic/Core/Stores/AzureOpenAITokenStore.swift +143 -0
  115. package/Sources/Runic/Core/Stores/CerebrasTokenStore.swift +143 -0
  116. package/Sources/Runic/Core/Stores/CohereTokenStore.swift +143 -0
  117. package/Sources/Runic/Core/Stores/CopilotTokenStore.swift +143 -0
  118. package/Sources/Runic/Core/Stores/CustomProviderStore.swift +158 -0
  119. package/Sources/Runic/Core/Stores/DeepSeekTokenStore.swift +143 -0
  120. package/Sources/Runic/Core/Stores/FireworksTokenStore.swift +143 -0
  121. package/Sources/Runic/Core/Stores/GroqTokenStore.swift +143 -0
  122. package/Sources/Runic/Core/Stores/KimiTokenStore.swift +143 -0
  123. package/Sources/Runic/Core/Stores/MiniMaxCookieHeaderStore.swift +143 -0
  124. package/Sources/Runic/Core/Stores/MiniMaxGroupIDStore.swift +143 -0
  125. package/Sources/Runic/Core/Stores/MiniMaxTokenStore.swift +143 -0
  126. package/Sources/Runic/Core/Stores/MistralTokenStore.swift +143 -0
  127. package/Sources/Runic/Core/Stores/OpenRouterTokenStore.swift +143 -0
  128. package/Sources/Runic/Core/Stores/PerplexityTokenStore.swift +143 -0
  129. package/Sources/Runic/Core/Stores/ProviderToggleStore.swift +30 -0
  130. package/Sources/Runic/Core/Stores/QwenTokenStore.swift +143 -0
  131. package/Sources/Runic/Core/Stores/SambaNovaTokenStore.swift +143 -0
  132. package/Sources/Runic/Core/Stores/SettingsStore.swift +1702 -0
  133. package/Sources/Runic/Core/Stores/TogetherTokenStore.swift +143 -0
  134. package/Sources/Runic/Core/Stores/UsageStore+Accessors.swift +20 -0
  135. package/Sources/Runic/Core/Stores/UsageStore+Status.swift +189 -0
  136. package/Sources/Runic/Core/Stores/UsageStore+TokenCost.swift +33 -0
  137. package/Sources/Runic/Core/Stores/UsageStore+WidgetSnapshot.swift +67 -0
  138. package/Sources/Runic/Core/Stores/UsageStore.swift +3564 -0
  139. package/Sources/Runic/Core/Stores/XAITokenStore.swift +143 -0
  140. package/Sources/Runic/Core/Stores/ZaiTokenStore.swift +143 -0
  141. package/Sources/Runic/Core/UsageExporter.swift +193 -0
  142. package/Sources/Runic/Date+RelativeDescription.swift +21 -0
  143. package/Sources/Runic/HiddenWindowView.swift +32 -0
  144. package/Sources/Runic/InstallOrigin.swift +9 -0
  145. package/Sources/Runic/KeyboardShortcuts+Names.swift +6 -0
  146. package/Sources/Runic/MouseLocationReader.swift +65 -0
  147. package/Sources/Runic/Notifications+Runic.swift +6 -0
  148. package/Sources/Runic/OpenAICreditsPurchaseWindowController.swift +503 -0
  149. package/Sources/Runic/ProviderRegistry.swift +100 -0
  150. package/Sources/Runic/ProviderSwitcherButtons.swift +267 -0
  151. package/Sources/Runic/Providers/Antigravity/AntigravityLoginFlow.swift +11 -0
  152. package/Sources/Runic/Providers/Antigravity/AntigravityProviderImplementation.swift +14 -0
  153. package/Sources/Runic/Providers/Auggie/AuggieProviderImplementation.swift +24 -0
  154. package/Sources/Runic/Providers/Azure/AzureProviderImplementation.swift +52 -0
  155. package/Sources/Runic/Providers/Bedrock/BedrockProviderImplementation.swift +42 -0
  156. package/Sources/Runic/Providers/Cerebras/CerebrasProviderImplementation.swift +24 -0
  157. package/Sources/Runic/Providers/Claude/ClaudeLoginFlow.swift +26 -0
  158. package/Sources/Runic/Providers/Claude/ClaudeProviderImplementation.swift +14 -0
  159. package/Sources/Runic/Providers/Codex/CodexLoginFlow.swift +18 -0
  160. package/Sources/Runic/Providers/Codex/CodexProviderImplementation.swift +15 -0
  161. package/Sources/Runic/Providers/Cohere/CohereProviderImplementation.swift +24 -0
  162. package/Sources/Runic/Providers/Copilot/CopilotLoginFlow.swift +193 -0
  163. package/Sources/Runic/Providers/Copilot/CopilotProviderImplementation.swift +110 -0
  164. package/Sources/Runic/Providers/Cursor/CursorLoginFlow.swift +28 -0
  165. package/Sources/Runic/Providers/Cursor/CursorProviderImplementation.swift +15 -0
  166. package/Sources/Runic/Providers/DeepSeek/DeepSeekProviderImplementation.swift +24 -0
  167. package/Sources/Runic/Providers/Factory/FactoryLoginFlow.swift +12 -0
  168. package/Sources/Runic/Providers/Factory/FactoryProviderImplementation.swift +15 -0
  169. package/Sources/Runic/Providers/Fireworks/FireworksProviderImplementation.swift +24 -0
  170. package/Sources/Runic/Providers/Gemini/GeminiLoginFlow.swift +20 -0
  171. package/Sources/Runic/Providers/Gemini/GeminiProviderImplementation.swift +15 -0
  172. package/Sources/Runic/Providers/Groq/GroqProviderImplementation.swift +24 -0
  173. package/Sources/Runic/Providers/Kimi/KimiProviderImplementation.swift +24 -0
  174. package/Sources/Runic/Providers/MiniMax/MiniMaxProviderImplementation.swift +32 -0
  175. package/Sources/Runic/Providers/Mistral/MistralProviderImplementation.swift +24 -0
  176. package/Sources/Runic/Providers/OpenRouter/OpenRouterProviderImplementation.swift +24 -0
  177. package/Sources/Runic/Providers/Perplexity/PerplexityProviderImplementation.swift +24 -0
  178. package/Sources/Runic/Providers/SambaNova/SambaNovaProviderImplementation.swift +24 -0
  179. package/Sources/Runic/Providers/Shared/ProviderCatalog.swift +15 -0
  180. package/Sources/Runic/Providers/Shared/ProviderImplementation.swift +48 -0
  181. package/Sources/Runic/Providers/Shared/ProviderImplementationRegistry.swift +66 -0
  182. package/Sources/Runic/Providers/Shared/ProviderLoginFlow.swift +12 -0
  183. package/Sources/Runic/Providers/Shared/ProviderSettingsDescriptors.swift +99 -0
  184. package/Sources/Runic/Providers/Shared/SystemSettingsLinks.swift +18 -0
  185. package/Sources/Runic/Providers/Together/TogetherProviderImplementation.swift +24 -0
  186. package/Sources/Runic/Providers/XAI/XAIProviderImplementation.swift +24 -0
  187. package/Sources/Runic/Providers/Zai/ZaiProviderImplementation.swift +24 -0
  188. package/Sources/Runic/Resources/ProviderIcon-antigravity.svg +2 -0
  189. package/Sources/Runic/Resources/ProviderIcon-auggie.svg +3 -0
  190. package/Sources/Runic/Resources/ProviderIcon-azure.svg +5 -0
  191. package/Sources/Runic/Resources/ProviderIcon-bedrock.svg +7 -0
  192. package/Sources/Runic/Resources/ProviderIcon-cerebras.svg +3 -0
  193. package/Sources/Runic/Resources/ProviderIcon-claude.svg +1 -0
  194. package/Sources/Runic/Resources/ProviderIcon-codex.svg +1 -0
  195. package/Sources/Runic/Resources/ProviderIcon-cohere.svg +3 -0
  196. package/Sources/Runic/Resources/ProviderIcon-copilot.svg +1 -0
  197. package/Sources/Runic/Resources/ProviderIcon-cursor.svg +3 -0
  198. package/Sources/Runic/Resources/ProviderIcon-deepseek.svg +4 -0
  199. package/Sources/Runic/Resources/ProviderIcon-factory.svg +3 -0
  200. package/Sources/Runic/Resources/ProviderIcon-fireworks.svg +3 -0
  201. package/Sources/Runic/Resources/ProviderIcon-gemini.svg +1 -0
  202. package/Sources/Runic/Resources/ProviderIcon-groq.svg +1 -0
  203. package/Sources/Runic/Resources/ProviderIcon-kimi.svg +4 -0
  204. package/Sources/Runic/Resources/ProviderIcon-minimax.svg +1 -0
  205. package/Sources/Runic/Resources/ProviderIcon-mistral.svg +5 -0
  206. package/Sources/Runic/Resources/ProviderIcon-openrouter.svg +7 -0
  207. package/Sources/Runic/Resources/ProviderIcon-perplexity.svg +4 -0
  208. package/Sources/Runic/Resources/ProviderIcon-qwen.svg +9 -0
  209. package/Sources/Runic/Resources/ProviderIcon-sambanova.svg +4 -0
  210. package/Sources/Runic/Resources/ProviderIcon-together.svg +5 -0
  211. package/Sources/Runic/Resources/ProviderIcon-vertexai.svg +17 -0
  212. package/Sources/Runic/Resources/ProviderIcon-xai.svg +3 -0
  213. package/Sources/Runic/Resources/ProviderIcon-zai.svg +5 -0
  214. package/Sources/Runic/Resources/RunicMenubarIcon.svg +7 -0
  215. package/Sources/Runic/RunicApp.swift +357 -0
  216. package/Sources/Runic/SessionQuotaNotifications.swift +58 -0
  217. package/Sources/Runic/UsagePaceText.swift +52 -0
  218. package/Sources/Runic/UsageProgressBar.swift +224 -0
  219. package/Sources/Runic/Utilities/DisplayLink.swift +96 -0
  220. package/Sources/Runic/Utilities/LoadingPattern.swift +60 -0
  221. package/Sources/Runic/Utilities/PerformanceConstants.swift +85 -0
  222. package/Sources/Runic/Views/Menu/AlertsMenuView.swift +256 -0
  223. package/Sources/Runic/Views/Menu/ChartPanelStyle.swift +22 -0
  224. package/Sources/Runic/Views/Menu/CostComparativeChartMenuView.swift +275 -0
  225. package/Sources/Runic/Views/Menu/CostHistoryChartMenuView.swift +377 -0
  226. package/Sources/Runic/Views/Menu/CreditsHistoryChartMenuView.swift +312 -0
  227. package/Sources/Runic/Views/Menu/EfficiencyMetricsMenuView.swift +312 -0
  228. package/Sources/Runic/Views/Menu/HeroStatCardsMenuView.swift +228 -0
  229. package/Sources/Runic/Views/Menu/HourlyActivityChartMenuView.swift +228 -0
  230. package/Sources/Runic/Views/Menu/InlineUsageChartView.swift +162 -0
  231. package/Sources/Runic/Views/Menu/MenuCardEntranceModifier.swift +64 -0
  232. package/Sources/Runic/Views/Menu/MenuCardSidebarView.swift +268 -0
  233. package/Sources/Runic/Views/Menu/MenuCardSkeletonView.swift +104 -0
  234. package/Sources/Runic/Views/Menu/MenuCardView.swift +1900 -0
  235. package/Sources/Runic/Views/Menu/MenuContent.swift +150 -0
  236. package/Sources/Runic/Views/Menu/MenuDescriptor.swift +369 -0
  237. package/Sources/Runic/Views/Menu/MenuHighlightStyle.swift +42 -0
  238. package/Sources/Runic/Views/Menu/ModelBreakdownMenuView.swift +235 -0
  239. package/Sources/Runic/Views/Menu/OverviewMenuView.swift +141 -0
  240. package/Sources/Runic/Views/Menu/ProjectBreakdownMenuView.swift +209 -0
  241. package/Sources/Runic/Views/Menu/ProjectBudgetMenuView.swift +220 -0
  242. package/Sources/Runic/Views/Menu/ProviderTabBarView.swift +88 -0
  243. package/Sources/Runic/Views/Menu/SubscriptionUtilizationChartMenuView.swift +201 -0
  244. package/Sources/Runic/Views/Menu/UsageBreakdownChartMenuView.swift +398 -0
  245. package/Sources/Runic/Views/Menu/UsageHeatmapMenuView.swift +232 -0
  246. package/Sources/Runic/Views/Menu/UsageTimelineChartMenuView.swift +417 -0
  247. package/Sources/Runic/Views/Menu/UsageWindowComparisonChartMenuView.swift +190 -0
  248. package/Sources/Runic/Views/Menu/WeeklyActivityChartMenuView.swift +132 -0
  249. package/Sources/Runic/Views/Performance/PerformanceDashboardView.swift +618 -0
  250. package/Sources/Runic/Views/Preferences/LiquidComponents.swift +305 -0
  251. package/Sources/Runic/Views/Preferences/PreferencesAboutPane.swift +271 -0
  252. package/Sources/Runic/Views/Preferences/PreferencesAdvancedPane.swift +268 -0
  253. package/Sources/Runic/Views/Preferences/PreferencesAlertsPane.swift +422 -0
  254. package/Sources/Runic/Views/Preferences/PreferencesAnalyticsPane.swift +641 -0
  255. package/Sources/Runic/Views/Preferences/PreferencesBudgetsPane.swift +344 -0
  256. package/Sources/Runic/Views/Preferences/PreferencesComponents.swift +230 -0
  257. package/Sources/Runic/Views/Preferences/PreferencesCustomProvidersPane.swift +322 -0
  258. package/Sources/Runic/Views/Preferences/PreferencesDebugPane.swift +469 -0
  259. package/Sources/Runic/Views/Preferences/PreferencesGeneralPane.swift +231 -0
  260. package/Sources/Runic/Views/Preferences/PreferencesHelpPane.swift +50 -0
  261. package/Sources/Runic/Views/Preferences/PreferencesIntegrationsPane.swift +497 -0
  262. package/Sources/Runic/Views/Preferences/PreferencesPerformancePane.swift +288 -0
  263. package/Sources/Runic/Views/Preferences/PreferencesProvidersPane.swift +3435 -0
  264. package/Sources/Runic/Views/Preferences/PreferencesSelection.swift +25 -0
  265. package/Sources/Runic/Views/Preferences/PreferencesSyncPane.swift +59 -0
  266. package/Sources/Runic/Views/Preferences/PreferencesView.swift +206 -0
  267. package/Sources/Runic/Views/Rating/QualityRatingView.swift +238 -0
  268. package/Sources/Runic/Views/Team/TeamDashboardView.swift +371 -0
  269. package/Sources/Runic/Views/Team/TeamInviteSheet.swift +175 -0
  270. package/Sources/Runic/Views/Team/TeamManagementView.swift +761 -0
  271. package/Sources/Runic/Views/Team/TeamMemberRow.swift +181 -0
  272. package/Sources/RunicCLI/CLIEntry.swift +942 -0
  273. package/Sources/RunicCLI/CLIRenderer.swift +87 -0
  274. package/Sources/RunicCLI/Commands/EnhancedUsageCommand.swift +588 -0
  275. package/Sources/RunicCLI/Commands/ModelsCommand.swift +362 -0
  276. package/Sources/RunicCLI/Commands/ProjectsCommand.swift +439 -0
  277. package/Sources/RunicCLI/Commands/ResetCommand.swift +429 -0
  278. package/Sources/RunicCLI/Commands/UsageLedgerSourceFactory.swift +168 -0
  279. package/Sources/RunicClaudeWatchdog/main.swift +122 -0
  280. package/Sources/RunicClaudeWebProbe/main.swift +62 -0
  281. package/Sources/RunicCore/AlertRuleStore.swift +187 -0
  282. package/Sources/RunicCore/BrowserCookieImportOrder.swift +25 -0
  283. package/Sources/RunicCore/CopilotUsageModels.swift +84 -0
  284. package/Sources/RunicCore/CostUsageFetcher.swift +119 -0
  285. package/Sources/RunicCore/CostUsageModels.swift +479 -0
  286. package/Sources/RunicCore/CreditsModels.swift +50 -0
  287. package/Sources/RunicCore/CustomProviders/CustomProviderModels.swift +269 -0
  288. package/Sources/RunicCore/CustomProviders/GenericProviderFetcher.swift +622 -0
  289. package/Sources/RunicCore/CustomProviders/ProviderTemplates.swift +500 -0
  290. package/Sources/RunicCore/Host/PTY/TTYCommandRunner.swift +679 -0
  291. package/Sources/RunicCore/Host/Process/SubprocessRunner.swift +135 -0
  292. package/Sources/RunicCore/Integrations/GitHubIntegration.swift +173 -0
  293. package/Sources/RunicCore/Logging/JSONStderrLogHandler.swift +79 -0
  294. package/Sources/RunicCore/Logging/OSLogLogHandler.swift +86 -0
  295. package/Sources/RunicCore/Logging/RunicLog.swift +123 -0
  296. package/Sources/RunicCore/Models/EnhancedUsageModels.swift +371 -0
  297. package/Sources/RunicCore/OpenAIDashboardModels.swift +210 -0
  298. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardBrowserCookieImporter.swift +676 -0
  299. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardFetcher.swift +492 -0
  300. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardNavigationDelegate.swift +51 -0
  301. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardParser.swift +483 -0
  302. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardScrapeScript.swift +558 -0
  303. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebViewCache.swift +204 -0
  304. package/Sources/RunicCore/OpenAIWeb/OpenAIDashboardWebsiteDataStore.swift +78 -0
  305. package/Sources/RunicCore/PathEnvironment.swift +482 -0
  306. package/Sources/RunicCore/Performance/PerformanceModels.swift +371 -0
  307. package/Sources/RunicCore/Performance/PerformanceStorageImpl.swift +409 -0
  308. package/Sources/RunicCore/Policy/UsagePolicyEngine.swift +178 -0
  309. package/Sources/RunicCore/ProjectBudgetStore.swift +99 -0
  310. package/Sources/RunicCore/ProviderCostSnapshot.swift +29 -0
  311. package/Sources/RunicCore/Providers/Antigravity/AntigravityProviderDescriptor.swift +66 -0
  312. package/Sources/RunicCore/Providers/Antigravity/AntigravityStatusProbe.swift +685 -0
  313. package/Sources/RunicCore/Providers/Auggie/AuggieProviderDescriptor.swift +83 -0
  314. package/Sources/RunicCore/Providers/Auggie/AuggieUsageFetcher.swift +142 -0
  315. package/Sources/RunicCore/Providers/Azure/AzureProviderDescriptor.swift +141 -0
  316. package/Sources/RunicCore/Providers/Azure/AzureUsageFetcher.swift +186 -0
  317. package/Sources/RunicCore/Providers/Bedrock/BedrockProviderDescriptor.swift +126 -0
  318. package/Sources/RunicCore/Providers/Bedrock/BedrockUsageFetcher.swift +168 -0
  319. package/Sources/RunicCore/Providers/Cerebras/CerebrasProviderDescriptor.swift +84 -0
  320. package/Sources/RunicCore/Providers/Cerebras/CerebrasUsageFetcher.swift +75 -0
  321. package/Sources/RunicCore/Providers/Claude/ClaudeCLISession.swift +332 -0
  322. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthCredentials.swift +180 -0
  323. package/Sources/RunicCore/Providers/Claude/ClaudeOAuth/ClaudeOAuthUsageFetcher.swift +137 -0
  324. package/Sources/RunicCore/Providers/Claude/ClaudeProviderDescriptor.swift +207 -0
  325. package/Sources/RunicCore/Providers/Claude/ClaudeStatusProbe.swift +654 -0
  326. package/Sources/RunicCore/Providers/Claude/ClaudeUsageDataSource.swift +28 -0
  327. package/Sources/RunicCore/Providers/Claude/ClaudeUsageFetcher.swift +480 -0
  328. package/Sources/RunicCore/Providers/Claude/ClaudeWeb/ClaudeWebAPIFetcher.swift +780 -0
  329. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthCredentials.swift +146 -0
  330. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexOAuthUsageFetcher.swift +269 -0
  331. package/Sources/RunicCore/Providers/Codex/CodexOAuth/CodexTokenRefresher.swift +100 -0
  332. package/Sources/RunicCore/Providers/Codex/CodexProviderDescriptor.swift +243 -0
  333. package/Sources/RunicCore/Providers/Codex/CodexStatusProbe.swift +125 -0
  334. package/Sources/RunicCore/Providers/Codex/CodexUsageDataSource.swift +24 -0
  335. package/Sources/RunicCore/Providers/Codex/CodexWebDashboardStrategy.swift +181 -0
  336. package/Sources/RunicCore/Providers/Cohere/CohereProviderDescriptor.swift +83 -0
  337. package/Sources/RunicCore/Providers/Cohere/CohereUsageFetcher.swift +85 -0
  338. package/Sources/RunicCore/Providers/Copilot/CopilotDeviceFlow.swift +123 -0
  339. package/Sources/RunicCore/Providers/Copilot/CopilotGitHubCLITokenReader.swift +114 -0
  340. package/Sources/RunicCore/Providers/Copilot/CopilotProviderDescriptor.swift +100 -0
  341. package/Sources/RunicCore/Providers/Copilot/CopilotUsageFetcher.swift +291 -0
  342. package/Sources/RunicCore/Providers/Copilot/CopilotVSCodeTokenReader.swift +386 -0
  343. package/Sources/RunicCore/Providers/Cursor/CursorProviderDescriptor.swift +65 -0
  344. package/Sources/RunicCore/Providers/Cursor/CursorStatusProbe.swift +594 -0
  345. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekProviderDescriptor.swift +85 -0
  346. package/Sources/RunicCore/Providers/DeepSeek/DeepSeekUsageFetcher.swift +108 -0
  347. package/Sources/RunicCore/Providers/Factory/FactoryLocalStorageImporter.swift +398 -0
  348. package/Sources/RunicCore/Providers/Factory/FactoryProviderDescriptor.swift +65 -0
  349. package/Sources/RunicCore/Providers/Factory/FactoryStatusProbe.swift +1275 -0
  350. package/Sources/RunicCore/Providers/Fireworks/FireworksProviderDescriptor.swift +84 -0
  351. package/Sources/RunicCore/Providers/Fireworks/FireworksUsageFetcher.swift +75 -0
  352. package/Sources/RunicCore/Providers/Gemini/GeminiProviderDescriptor.swift +65 -0
  353. package/Sources/RunicCore/Providers/Gemini/GeminiStatusProbe.swift +835 -0
  354. package/Sources/RunicCore/Providers/Groq/GroqProviderDescriptor.swift +83 -0
  355. package/Sources/RunicCore/Providers/Groq/GroqUsageFetcher.swift +71 -0
  356. package/Sources/RunicCore/Providers/Kimi/KimiProviderDescriptor.swift +83 -0
  357. package/Sources/RunicCore/Providers/Kimi/KimiUsageFetcher.swift +77 -0
  358. package/Sources/RunicCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift +92 -0
  359. package/Sources/RunicCore/Providers/MiniMax/MiniMaxSettingsReader.swift +54 -0
  360. package/Sources/RunicCore/Providers/MiniMax/MiniMaxUsageFetcher.swift +171 -0
  361. package/Sources/RunicCore/Providers/MiniMax/MiniMaxWebUsageFetcher.swift +911 -0
  362. package/Sources/RunicCore/Providers/Mistral/MistralProviderDescriptor.swift +84 -0
  363. package/Sources/RunicCore/Providers/Mistral/MistralUsageFetcher.swift +75 -0
  364. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterProviderDescriptor.swift +87 -0
  365. package/Sources/RunicCore/Providers/OpenRouter/OpenRouterUsageFetcher.swift +207 -0
  366. package/Sources/RunicCore/Providers/Perplexity/PerplexityProviderDescriptor.swift +84 -0
  367. package/Sources/RunicCore/Providers/Perplexity/PerplexityUsageFetcher.swift +75 -0
  368. package/Sources/RunicCore/Providers/ProviderBranding.swift +25 -0
  369. package/Sources/RunicCore/Providers/ProviderCLIConfig.swift +17 -0
  370. package/Sources/RunicCore/Providers/ProviderDescriptor.swift +129 -0
  371. package/Sources/RunicCore/Providers/ProviderFetchPlan.swift +263 -0
  372. package/Sources/RunicCore/Providers/ProviderSettingsSnapshot.swift +98 -0
  373. package/Sources/RunicCore/Providers/ProviderTokenResolver.swift +501 -0
  374. package/Sources/RunicCore/Providers/ProviderVersionDetector.swift +68 -0
  375. package/Sources/RunicCore/Providers/Providers.swift +184 -0
  376. package/Sources/RunicCore/Providers/Qwen/QwenProviderDescriptor.swift +84 -0
  377. package/Sources/RunicCore/Providers/Qwen/QwenSettingsReader.swift +30 -0
  378. package/Sources/RunicCore/Providers/Qwen/QwenUsageStats.swift +317 -0
  379. package/Sources/RunicCore/Providers/SambaNova/SambaNovaProviderDescriptor.swift +84 -0
  380. package/Sources/RunicCore/Providers/SambaNova/SambaNovaUsageFetcher.swift +75 -0
  381. package/Sources/RunicCore/Providers/Together/TogetherProviderDescriptor.swift +83 -0
  382. package/Sources/RunicCore/Providers/Together/TogetherUsageFetcher.swift +75 -0
  383. package/Sources/RunicCore/Providers/VertexAI/VertexAIProviderDescriptor.swift +123 -0
  384. package/Sources/RunicCore/Providers/VertexAI/VertexAISettingsReader.swift +48 -0
  385. package/Sources/RunicCore/Providers/VertexAI/VertexAIUsageFetcher.swift +144 -0
  386. package/Sources/RunicCore/Providers/XAI/XAIProviderDescriptor.swift +83 -0
  387. package/Sources/RunicCore/Providers/XAI/XAIUsageFetcher.swift +75 -0
  388. package/Sources/RunicCore/Providers/Zai/ZaiProviderDescriptor.swift +72 -0
  389. package/Sources/RunicCore/Providers/Zai/ZaiSettingsReader.swift +41 -0
  390. package/Sources/RunicCore/Providers/Zai/ZaiUsageStats.swift +724 -0
  391. package/Sources/RunicCore/Sync/BackgroundSyncManager.swift +385 -0
  392. package/Sources/RunicCore/Sync/SyncConflictResolver.swift +310 -0
  393. package/Sources/RunicCore/Sync/SyncProtocol.swift +288 -0
  394. package/Sources/RunicCore/Sync/SyncRecord.swift +405 -0
  395. package/Sources/RunicCore/Sync/SyncUsageExample.swift +294 -0
  396. package/Sources/RunicCore/Sync/TeamSyncRecords.swift +775 -0
  397. package/Sources/RunicCore/Sync/iCloudSyncEngine.swift +333 -0
  398. package/Sources/RunicCore/Team/TeamModels.swift +583 -0
  399. package/Sources/RunicCore/Team/TeamShowbackExporter.swift +495 -0
  400. package/Sources/RunicCore/Team/TeamStore.swift +792 -0
  401. package/Sources/RunicCore/TextParsing.swift +55 -0
  402. package/Sources/RunicCore/UsageFetcher.swift +694 -0
  403. package/Sources/RunicCore/UsageFormatter.swift +410 -0
  404. package/Sources/RunicCore/UsageLedger/ClaudeUsageLogSource.swift +329 -0
  405. package/Sources/RunicCore/UsageLedger/CodexUsageLogSource.swift +448 -0
  406. package/Sources/RunicCore/UsageLedger/OTelGenAILedgerAdapter.swift +550 -0
  407. package/Sources/RunicCore/UsageLedger/UsageLedger.swift +29 -0
  408. package/Sources/RunicCore/UsageLedger/UsageLedgerAggregator.swift +660 -0
  409. package/Sources/RunicCore/UsageLedger/UsageLedgerInsightsAdvisor.swift +209 -0
  410. package/Sources/RunicCore/UsageLedger/UsageLedgerModels.swift +417 -0
  411. package/Sources/RunicCore/UsageLedger/UsageLedgerProjectIdentity.swift +245 -0
  412. package/Sources/RunicCore/UsagePace.swift +81 -0
  413. package/Sources/RunicCore/Vendored/CostUsage/CostUsageCache.swift +73 -0
  414. package/Sources/RunicCore/Vendored/CostUsage/CostUsageJsonl.swift +74 -0
  415. package/Sources/RunicCore/Vendored/CostUsage/CostUsagePricing.swift +208 -0
  416. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Claude.swift +455 -0
  417. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner+Timestamp.swift +132 -0
  418. package/Sources/RunicCore/Vendored/CostUsage/CostUsageScanner.swift +589 -0
  419. package/Sources/RunicCore/WidgetSnapshot.swift +183 -0
  420. package/Sources/RunicMacroSupport/ProviderRegistrationMacros.swift +14 -0
  421. package/Sources/RunicMacros/ProviderRegistrationMacros.swift +216 -0
  422. package/Sources/RunicWidget/RunicWidgetBundle.swift +79 -0
  423. package/Sources/RunicWidget/RunicWidgetProvider.swift +283 -0
  424. package/Sources/RunicWidget/RunicWidgetViews.swift +680 -0
  425. package/Tests/RunicTests/AntigravityStatusProbeTests.swift +50 -0
  426. package/Tests/RunicTests/AppDelegateTests.swift +43 -0
  427. package/Tests/RunicTests/BrowserCookieOrderLabelTests.swift +22 -0
  428. package/Tests/RunicTests/CLIArgumentParsingTests.swift +70 -0
  429. package/Tests/RunicTests/CLICostTests.swift +65 -0
  430. package/Tests/RunicTests/CLIProviderSelectionTests.swift +22 -0
  431. package/Tests/RunicTests/CLISnapshotTests.swift +72 -0
  432. package/Tests/RunicTests/CLIWebFallbackTests.swift +58 -0
  433. package/Tests/RunicTests/ClaudeOAuthTests.swift +164 -0
  434. package/Tests/RunicTests/ClaudeResilienceTests.swift +30 -0
  435. package/Tests/RunicTests/ClaudeUsageTests.swift +370 -0
  436. package/Tests/RunicTests/CodexOAuthTests.swift +122 -0
  437. package/Tests/RunicTests/CodexUsageLogSourceTests.swift +82 -0
  438. package/Tests/RunicTests/CopilotTokenResolverTests.swift +75 -0
  439. package/Tests/RunicTests/CopilotVSCodeTokenReaderTests.swift +75 -0
  440. package/Tests/RunicTests/CostUsageDecodingTests.swift +394 -0
  441. package/Tests/RunicTests/CostUsagePricingTests.swift +50 -0
  442. package/Tests/RunicTests/CostUsageScannerTests.swift +700 -0
  443. package/Tests/RunicTests/CursorStatusProbeTests.swift +323 -0
  444. package/Tests/RunicTests/FactoryStatusProbeTests.swift +69 -0
  445. package/Tests/RunicTests/GeminiAPITestHelpers.swift +94 -0
  446. package/Tests/RunicTests/GeminiLoginAlertTests.swift +28 -0
  447. package/Tests/RunicTests/GeminiStatusProbeAPITests.swift +283 -0
  448. package/Tests/RunicTests/GeminiStatusProbePlanTests.swift +279 -0
  449. package/Tests/RunicTests/GeminiStatusProbeTests.swift +233 -0
  450. package/Tests/RunicTests/GeminiTestEnvironment.swift +87 -0
  451. package/Tests/RunicTests/GoogleWorkspaceStatusTests.swift +73 -0
  452. package/Tests/RunicTests/InstallOriginTests.swift +18 -0
  453. package/Tests/RunicTests/KeyboardShortcutsBundleTests.swift +9 -0
  454. package/Tests/RunicTests/LiveAccountTests.swift +24 -0
  455. package/Tests/RunicTests/LoadingPatternTests.swift +35 -0
  456. package/Tests/RunicTests/MenuCardModelTests.swift +545 -0
  457. package/Tests/RunicTests/MiniMaxCookieHeaderStoreTestSupport.swift +8 -0
  458. package/Tests/RunicTests/MiniMaxGroupIDStoreTestSupport.swift +8 -0
  459. package/Tests/RunicTests/MiniMaxParsingTests.swift +68 -0
  460. package/Tests/RunicTests/MiniMaxTokenStoreTestSupport.swift +8 -0
  461. package/Tests/RunicTests/OTelGenAILedgerAdapterTests.swift +112 -0
  462. package/Tests/RunicTests/OpenAIDashboardBrowserCookieImporterTests.swift +17 -0
  463. package/Tests/RunicTests/OpenAIDashboardFetcherCreditsWaitTests.swift +75 -0
  464. package/Tests/RunicTests/OpenAIDashboardOffscreenHostTests.swift +27 -0
  465. package/Tests/RunicTests/OpenAIDashboardParserTests.swift +134 -0
  466. package/Tests/RunicTests/OpenAIWebAccountSwitchTests.swift +53 -0
  467. package/Tests/RunicTests/OpenRouterTokenStoreTestSupport.swift +92 -0
  468. package/Tests/RunicTests/PathBuilderTests.swift +237 -0
  469. package/Tests/RunicTests/ProviderFetchPipelineTests.swift +160 -0
  470. package/Tests/RunicTests/ProviderIconResourcesTests.swift +38 -0
  471. package/Tests/RunicTests/ProviderMetadataStatusLinkTests.swift +16 -0
  472. package/Tests/RunicTests/ProviderRegistryTests.swift +29 -0
  473. package/Tests/RunicTests/ProviderSettingsDescriptorTests.swift +202 -0
  474. package/Tests/RunicTests/ProviderToggleStoreTests.swift +51 -0
  475. package/Tests/RunicTests/RunicTests.swift +120 -0
  476. package/Tests/RunicTests/SessionQuotaNotificationLogicTests.swift +36 -0
  477. package/Tests/RunicTests/SettingsStoreTests.swift +161 -0
  478. package/Tests/RunicTests/StatusItemAnimationTests.swift +49 -0
  479. package/Tests/RunicTests/StatusMenuTests.swift +434 -0
  480. package/Tests/RunicTests/StatusProbeTests.swift +377 -0
  481. package/Tests/RunicTests/SubprocessRunnerTests.swift +20 -0
  482. package/Tests/RunicTests/SubscriptionDetectionTests.swift +65 -0
  483. package/Tests/RunicTests/TTYCommandRunnerTests.swift +148 -0
  484. package/Tests/RunicTests/TTYIntegrationTests.swift +41 -0
  485. package/Tests/RunicTests/TeamShowbackExporterTests.swift +159 -0
  486. package/Tests/RunicTests/TextParsingTests.swift +12 -0
  487. package/Tests/RunicTests/UsageFormatterTests.swift +112 -0
  488. package/Tests/RunicTests/UsageLedgerAnomalyDetectionTests.swift +172 -0
  489. package/Tests/RunicTests/UsageLedgerForecastTests.swift +213 -0
  490. package/Tests/RunicTests/UsageLedgerInsightsAdvisorTests.swift +83 -0
  491. package/Tests/RunicTests/UsageLedgerProjectNameTests.swift +170 -0
  492. package/Tests/RunicTests/UsagePaceTests.swift +77 -0
  493. package/Tests/RunicTests/UsagePaceTextTests.swift +109 -0
  494. package/Tests/RunicTests/UsagePolicyEngineTests.swift +91 -0
  495. package/Tests/RunicTests/WidgetSnapshotTests.swift +45 -0
  496. package/Tests/RunicTests/ZaiProviderTests.swift +61 -0
  497. package/Tests/RunicTests/ZaiTokenStoreTestSupport.swift +6 -0
  498. package/TestsLinux/PlatformGatingTests.swift +46 -0
  499. package/appcast.xml +105 -0
  500. package/assets/logo-concept-stack.svg +24 -0
  501. package/assets/logo-minimal-bars.svg +15 -0
  502. package/assets/logo.svg +20 -0
  503. package/assets/logo2.svg +43 -0
  504. package/bin/docs-list +5 -0
  505. package/bin/install-runic-cli.sh +32 -0
  506. package/build-and-run.sh +369 -0
  507. package/docs/.nojekyll +1 -0
  508. package/docs/CNAME +1 -0
  509. package/docs/antigravity.md +75 -0
  510. package/docs/architecture.md +32 -0
  511. package/docs/claude.md +93 -0
  512. package/docs/cli-commands/integration_guide.md +371 -0
  513. package/docs/cli-commands/quick_reference.md +362 -0
  514. package/docs/cli-commands/readme.md +361 -0
  515. package/docs/cli.md +156 -0
  516. package/docs/cloudkit_sync_guide.md +495 -0
  517. package/docs/codebase_review.md +288 -0
  518. package/docs/codex-oauth.md +635 -0
  519. package/docs/codex.md +104 -0
  520. package/docs/codexbar.png +0 -0
  521. package/docs/copilot.md +44 -0
  522. package/docs/cursor.md +46 -0
  523. package/docs/design/designcomparisonchart.md +510 -0
  524. package/docs/design/implementationguide.md +792 -0
  525. package/docs/design/menubaricondesignconcepts.md +796 -0
  526. package/docs/design/mockups/hybridiconconcept.svg +62 -0
  527. package/docs/design/mockups/infinityiconconcept.svg +41 -0
  528. package/docs/design/mockups/infinityiconstates.svg +129 -0
  529. package/docs/design/mockups/wavelogorefined.svg +48 -0
  530. package/docs/design/quick_summary.md +426 -0
  531. package/docs/design/readme.md +478 -0
  532. package/docs/design/sizespecifications.md +575 -0
  533. package/docs/design-system.md +836 -0
  534. package/docs/factory.md +103 -0
  535. package/docs/gemini.md +73 -0
  536. package/docs/icon.md +37 -0
  537. package/docs/icon.png +0 -0
  538. package/docs/index.html +175 -0
  539. package/docs/keychain_fix.md +274 -0
  540. package/docs/minimax.md +71 -0
  541. package/docs/packaging.md +25 -0
  542. package/docs/progress-bar-improvements.md +240 -0
  543. package/docs/progress-bar-quick-reference.md +283 -0
  544. package/docs/progress-bar-technical-details.md +432 -0
  545. package/docs/progress-bar-visual-test.swift +375 -0
  546. package/docs/provider.md +202 -0
  547. package/docs/providers.md +86 -0
  548. package/docs/refactor/macros.md +35 -0
  549. package/docs/refresh-loop.md +22 -0
  550. package/docs/releasing-homebrew.md +35 -0
  551. package/docs/releasing.md +121 -0
  552. package/docs/research/concrete_todo_2026-02-22.md +47 -0
  553. package/docs/research/core-feature-research.md +248 -0
  554. package/docs/research/feature_uiux_roadmap_2026-02-22.md +202 -0
  555. package/docs/research/parity_matrix.md +49 -0
  556. package/docs/research/provider_expansion_candidates_2026-02-22.md +80 -0
  557. package/docs/research/provider_model_token_project_matrix_2026-02-23.md +46 -0
  558. package/docs/research/release_gate_checklist.md +57 -0
  559. package/docs/site.css +505 -0
  560. package/docs/sparkle.md +28 -0
  561. package/docs/status.md +28 -0
  562. package/docs/sync/implementation.md +393 -0
  563. package/docs/sync/readme.md +317 -0
  564. package/docs/sync_files_summary.md +391 -0
  565. package/docs/sync_quick_reference.md +225 -0
  566. package/docs/todo.md +11 -0
  567. package/docs/ui.md +29 -0
  568. package/docs/web-integration.md +9 -0
  569. package/docs/widgets.md +85 -0
  570. package/docs/workflows/error-handling-improvements.md +434 -0
  571. package/docs/workflows/folder_structure.md +299 -0
  572. package/docs/workflows/loading_states.md +446 -0
  573. package/docs/workflows/loading_states_examples.md +565 -0
  574. package/docs/workflows/loading_states_flow.md +430 -0
  575. package/docs/workflows/performance_optimizations.md +457 -0
  576. package/docs/workflows/phase1-cli-testing-report.md +313 -0
  577. package/docs/workflows/quick_reference.md +228 -0
  578. package/docs/workflows/readme.md +59 -0
  579. package/docs/workflows/recent_improvements.md +275 -0
  580. package/docs/workflows/sync_enablement_summary.md +400 -0
  581. package/docs/zai.md +43 -0
  582. package/package.json +36 -0
  583. package/runic.png +0 -0
  584. package/version.env +2 -0
@@ -0,0 +1,926 @@
1
+ # Runic Build Scripts Documentation
2
+
3
+ Complete collection of setup and build scripts for all Runic platforms.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Overview](#overview)
8
+ - [Quick Start](#quick-start)
9
+ - [Setup Scripts](#setup-scripts)
10
+ - [Build Scripts](#build-scripts)
11
+ - [CI/CD Configuration](#cicd-configuration)
12
+ - [Platform-Specific Guides](#platform-specific-guides)
13
+ - [Troubleshooting](#troubleshooting)
14
+ - [Advanced Usage](#advanced-usage)
15
+
16
+ ---
17
+
18
+ ## Overview
19
+
20
+ This directory contains comprehensive scripts for setting up and building Runic across all supported platforms:
21
+
22
+ - **macOS** - Native Swift/SwiftUI application
23
+ - **iOS** - Native iOS application
24
+ - **Android** - React Native application
25
+ - **Windows** - React Native Windows application
26
+
27
+ All scripts include:
28
+ - ✅ Prerequisite checking
29
+ - ✅ Error handling with clear messages
30
+ - ✅ Color-coded output for better UX
31
+ - ✅ Dry-run mode for safety
32
+ - ✅ Verbose mode for debugging
33
+ - ✅ Comprehensive logging
34
+
35
+ ---
36
+
37
+ ## Quick Start
38
+
39
+ ### One-Command Setup (All Platforms)
40
+
41
+ ```bash
42
+ # Setup everything
43
+ ./scripts/setup-all.sh
44
+
45
+ # Setup with dry-run to see what would happen
46
+ ./scripts/setup-all.sh --dry-run
47
+
48
+ # Setup with verbose output
49
+ ./scripts/setup-all.sh --verbose
50
+ ```
51
+
52
+ ### One-Command Build (All Platforms)
53
+
54
+ ```bash
55
+ # Build all platforms
56
+ ./scripts/build-all.sh
57
+
58
+ # Build specific platform
59
+ ./scripts/build-macos.sh
60
+ ./scripts/build-ios.sh
61
+ ./scripts/build-android.sh
62
+ ./scripts/build-windows.sh
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Setup Scripts
68
+
69
+ ### setup-all.sh
70
+
71
+ **Purpose**: One-command setup for all platforms
72
+
73
+ **Usage**:
74
+ ```bash
75
+ ./scripts/setup-all.sh [OPTIONS]
76
+ ```
77
+
78
+ **Options**:
79
+ - `--dry-run` - Show what would be done without executing
80
+ - `--verbose` - Enable verbose output
81
+ - `--only-macos` - Only setup macOS
82
+ - `--only-ios` - Only setup iOS
83
+ - `--only-rn` - Only setup React Native (Android/Windows)
84
+ - `--skip-macos` - Skip macOS setup
85
+ - `--skip-ios` - Skip iOS setup
86
+ - `--skip-rn` - Skip React Native setup
87
+ - `--help` - Show help message
88
+
89
+ **Examples**:
90
+ ```bash
91
+ # Setup everything
92
+ ./scripts/setup-all.sh
93
+
94
+ # Setup only iOS
95
+ ./scripts/setup-all.sh --only-ios
96
+
97
+ # Setup everything except React Native
98
+ ./scripts/setup-all.sh --skip-rn
99
+
100
+ # Dry-run to see what would happen
101
+ ./scripts/setup-all.sh --dry-run --verbose
102
+ ```
103
+
104
+ ---
105
+
106
+ ### setup-ios.sh
107
+
108
+ **Purpose**: Setup iOS Xcode project
109
+
110
+ **Prerequisites**:
111
+ - macOS 14.0+
112
+ - Xcode 15.0+
113
+ - Command Line Tools
114
+ - Ruby (for CocoaPods)
115
+
116
+ **Usage**:
117
+ ```bash
118
+ ./scripts/setup-ios.sh [OPTIONS]
119
+ ```
120
+
121
+ **Options**:
122
+ - `--dry-run` - Show what would be done
123
+ - `--verbose` - Enable verbose output
124
+ - `--skip-pods` - Skip CocoaPods installation
125
+ - `--help` - Show help message
126
+
127
+ **What it does**:
128
+ 1. Checks for Xcode and required tools
129
+ 2. Verifies iOS project structure
130
+ 3. Installs CocoaPods dependencies (if Podfile exists)
131
+ 4. Resolves Swift Package dependencies
132
+ 5. Creates configuration template
133
+ 6. Provides code signing instructions
134
+
135
+ **Examples**:
136
+ ```bash
137
+ # Standard setup
138
+ ./scripts/setup-ios.sh
139
+
140
+ # Skip CocoaPods
141
+ ./scripts/setup-ios.sh --skip-pods
142
+
143
+ # Verbose output for debugging
144
+ ./scripts/setup-ios.sh --verbose
145
+ ```
146
+
147
+ ---
148
+
149
+ ### setup-react-native.sh
150
+
151
+ **Purpose**: Setup React Native project for Windows and Android
152
+
153
+ **Prerequisites**:
154
+ - Node.js 18+
155
+ - npm or yarn
156
+ - Java Development Kit 17+ (for Android)
157
+ - Android SDK (for Android)
158
+ - Windows 10+ with Visual Studio (for Windows)
159
+
160
+ **Usage**:
161
+ ```bash
162
+ ./scripts/setup-react-native.sh [OPTIONS]
163
+ ```
164
+
165
+ **Options**:
166
+ - `--dry-run` - Show what would be done
167
+ - `--verbose` - Enable verbose output
168
+ - `--skip-android` - Skip Android setup
169
+ - `--skip-windows` - Skip Windows setup
170
+ - `--help` - Show help message
171
+
172
+ **What it does**:
173
+ 1. Checks for Node.js, npm, Java, Android SDK
174
+ 2. Installs npm dependencies
175
+ 3. Sets up Android SDK configuration
176
+ 4. Initializes React Native Windows (if needed)
177
+ 5. Creates environment configuration files
178
+ 6. Checks for code quality tools (ESLint, Prettier)
179
+
180
+ **Examples**:
181
+ ```bash
182
+ # Setup both Android and Windows
183
+ ./scripts/setup-react-native.sh
184
+
185
+ # Setup only Android
186
+ ./scripts/setup-react-native.sh --skip-windows
187
+
188
+ # Setup only Windows
189
+ ./scripts/setup-react-native.sh --skip-android
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Build Scripts
195
+
196
+ ### build-macos.sh
197
+
198
+ **Purpose**: Build macOS application using Swift Package Manager
199
+
200
+ **Usage**:
201
+ ```bash
202
+ ./scripts/build-macos.sh [OPTIONS]
203
+ ```
204
+
205
+ **Options**:
206
+ - `--dry-run` - Show what would be done
207
+ - `--verbose` - Enable verbose output
208
+ - `--skip-tests` - Skip running tests
209
+ - `--skip-signing` - Skip code signing
210
+ - `--configuration` - Build configuration (debug|release) [default: release]
211
+ - `--output-dir` - Output directory for build artifacts
212
+ - `--clean` - Clean build directory before building
213
+ - `--help` - Show help message
214
+
215
+ **What it does**:
216
+ 1. Runs SwiftLint and SwiftFormat checks
217
+ 2. Executes Swift tests
218
+ 3. Builds the application
219
+ 4. Creates .app bundle with Info.plist
220
+ 5. Signs the application (if certificates available)
221
+ 6. Creates ZIP archive for distribution
222
+
223
+ **Output**:
224
+ - `builds/macos/Runic.app` - Application bundle
225
+ - `builds/macos/Runic-*.zip` - Distributable archive
226
+
227
+ **Examples**:
228
+ ```bash
229
+ # Standard release build
230
+ ./scripts/build-macos.sh
231
+
232
+ # Debug build without tests
233
+ ./scripts/build-macos.sh --configuration debug --skip-tests
234
+
235
+ # Clean build with verbose output
236
+ ./scripts/build-macos.sh --clean --verbose
237
+
238
+ # Dry-run to see what would happen
239
+ ./scripts/build-macos.sh --dry-run
240
+ ```
241
+
242
+ ---
243
+
244
+ ### build-ios.sh
245
+
246
+ **Purpose**: Build iOS application using Xcode
247
+
248
+ **Usage**:
249
+ ```bash
250
+ ./scripts/build-ios.sh [OPTIONS]
251
+ ```
252
+
253
+ **Options**:
254
+ - `--dry-run` - Show what would be done
255
+ - `--verbose` - Enable verbose output
256
+ - `--skip-tests` - Skip running tests
257
+ - `--configuration` - Build configuration (Debug|Release) [default: Release]
258
+ - `--scheme` - Build scheme [default: RuniciOS]
259
+ - `--output-dir` - Output directory for build artifacts
260
+ - `--simulator` - Build for iOS Simulator
261
+ - `--device` - Build for iOS Device [default]
262
+ - `--archive` - Create archive and IPA
263
+ - `--clean` - Clean build directory before building
264
+ - `--help` - Show help message
265
+
266
+ **What it does**:
267
+ 1. Runs iOS tests (optional)
268
+ 2. Builds for simulator or device
269
+ 3. Creates archive (optional)
270
+ 4. Exports IPA (requires code signing)
271
+
272
+ **Output**:
273
+ - `builds/ios/DerivedData/` - Build products
274
+ - `builds/ios/RuniciOS.xcarchive` - Archive (if --archive)
275
+ - `builds/ios/Export/*.ipa` - IPA file (if --archive and signed)
276
+
277
+ **Examples**:
278
+ ```bash
279
+ # Build for device
280
+ ./scripts/build-ios.sh --device
281
+
282
+ # Build for simulator
283
+ ./scripts/build-ios.sh --simulator
284
+
285
+ # Create archive and IPA
286
+ ./scripts/build-ios.sh --archive
287
+
288
+ # Debug build for simulator without tests
289
+ ./scripts/build-ios.sh --simulator --configuration Debug --skip-tests
290
+ ```
291
+
292
+ **Code Signing Note**:
293
+ - Device builds and archives require valid code signing certificates
294
+ - See [iOS Code Signing](#ios-code-signing) section
295
+
296
+ ---
297
+
298
+ ### build-android.sh
299
+
300
+ **Purpose**: Build Android application using Gradle
301
+
302
+ **Usage**:
303
+ ```bash
304
+ ./scripts/build-android.sh [OPTIONS]
305
+ ```
306
+
307
+ **Options**:
308
+ - `--dry-run` - Show what would be done
309
+ - `--verbose` - Enable verbose output
310
+ - `--skip-tests` - Skip running tests
311
+ - `--skip-lint` - Skip lint checks
312
+ - `--variant` - Build variant (debug|release) [default: release]
313
+ - `--output-dir` - Output directory for build artifacts
314
+ - `--aab` - Build Android App Bundle (AAB) instead of APK
315
+ - `--clean` - Clean build directory before building
316
+ - `--help` - Show help message
317
+
318
+ **What it does**:
319
+ 1. Checks for Java and Android SDK
320
+ 2. Installs npm dependencies
321
+ 3. Runs Android lint checks
322
+ 4. Executes tests
323
+ 5. Builds APK or AAB
324
+ 6. Copies artifacts to output directory
325
+
326
+ **Output**:
327
+ - `builds/android/app-debug.apk` - Debug APK
328
+ - `builds/android/app-release.apk` - Release APK (unsigned without keystore)
329
+ - `builds/android/app-release.aab` - Release AAB (if --aab)
330
+
331
+ **Examples**:
332
+ ```bash
333
+ # Build debug APK
334
+ ./scripts/build-android.sh --variant debug
335
+
336
+ # Build release APK
337
+ ./scripts/build-android.sh --variant release
338
+
339
+ # Build AAB for Play Store
340
+ ./scripts/build-android.sh --aab
341
+
342
+ # Build without tests and lint
343
+ ./scripts/build-android.sh --skip-tests --skip-lint
344
+ ```
345
+
346
+ **Code Signing Note**:
347
+ - Release builds require a keystore for signing
348
+ - See [Android Code Signing](#android-code-signing) section
349
+
350
+ ---
351
+
352
+ ### build-windows.sh
353
+
354
+ **Purpose**: Build Windows application using React Native Windows
355
+
356
+ **Usage**:
357
+ ```bash
358
+ ./scripts/build-windows.sh [OPTIONS]
359
+ ```
360
+
361
+ **Options**:
362
+ - `--dry-run` - Show what would be done
363
+ - `--verbose` - Enable verbose output
364
+ - `--skip-tests` - Skip running tests
365
+ - `--configuration` - Build configuration (Debug|Release) [default: Release]
366
+ - `--arch` - Target architecture (x64|x86|ARM64) [default: x64]
367
+ - `--output-dir` - Output directory for build artifacts
368
+ - `--clean` - Clean build directory before building
369
+ - `--help` - Show help message
370
+
371
+ **What it does**:
372
+ 1. Checks for Node.js and MSBuild
373
+ 2. Installs npm dependencies
374
+ 3. Runs tests
375
+ 4. Builds Windows application
376
+ 5. Copies build artifacts
377
+ 6. Creates distribution package
378
+
379
+ **Output**:
380
+ - `builds/windows/` - Build artifacts and executable
381
+ - `builds/windows/Runic-*.zip` - Distribution package
382
+
383
+ **Examples**:
384
+ ```bash
385
+ # Build release for x64
386
+ ./scripts/build-windows.sh
387
+
388
+ # Build debug for x64
389
+ ./scripts/build-windows.sh --configuration Debug
390
+
391
+ # Build for ARM64
392
+ ./scripts/build-windows.sh --arch ARM64
393
+
394
+ # Clean build
395
+ ./scripts/build-windows.sh --clean
396
+ ```
397
+
398
+ **Platform Note**:
399
+ - This script works best on native Windows
400
+ - Can run on macOS/Linux via Git Bash but may have limitations
401
+
402
+ ---
403
+
404
+ ## CI/CD Configuration
405
+
406
+ ### ci-config.yml
407
+
408
+ **Purpose**: GitHub Actions workflow for automated builds and deployments
409
+
410
+ **Location**: Copy to `.github/workflows/ci.yml`
411
+
412
+ **Features**:
413
+ - ✅ Build matrix for all platforms
414
+ - ✅ Automated testing on each platform
415
+ - ✅ Code quality checks (SwiftLint, ESLint)
416
+ - ✅ Artifact uploading
417
+ - ✅ Optional deployment to TestFlight/Play Store
418
+ - ✅ Build status summary
419
+
420
+ **Triggers**:
421
+ - Push to `main` or `develop` branches
422
+ - Pull requests to `main`
423
+ - Manual workflow dispatch
424
+
425
+ **Jobs**:
426
+ 1. **code-quality** - ESLint, Prettier, TypeScript checks
427
+ 2. **build-macos** - Build and test macOS application
428
+ 3. **build-ios** - Build and test iOS application
429
+ 4. **build-android** - Build and test Android application
430
+ 5. **build-windows** - Build and test Windows application
431
+ 6. **deploy** - Optional deployment to distribution platforms
432
+ 7. **build-summary** - Generate build status summary
433
+
434
+ **Required Secrets**:
435
+
436
+ See the [GitHub Secrets Configuration](#github-secrets-configuration) section.
437
+
438
+ **Setup**:
439
+ ```bash
440
+ # Copy to workflows directory
441
+ mkdir -p .github/workflows
442
+ cp scripts/ci-config.yml .github/workflows/ci.yml
443
+
444
+ # Commit and push
445
+ git add .github/workflows/ci.yml
446
+ git commit -m "Add CI/CD workflow"
447
+ git push
448
+ ```
449
+
450
+ ---
451
+
452
+ ## Platform-Specific Guides
453
+
454
+ ### macOS Development
455
+
456
+ **Setup**:
457
+ ```bash
458
+ ./scripts/setup-all.sh --only-macos
459
+ ```
460
+
461
+ **Build**:
462
+ ```bash
463
+ # Development build
464
+ swift build
465
+
466
+ # Release build with script
467
+ ./scripts/build-macos.sh
468
+
469
+ # Run application
470
+ open builds/macos/Runic.app
471
+ ```
472
+
473
+ **Testing**:
474
+ ```bash
475
+ # Run all tests
476
+ swift test
477
+
478
+ # Run specific test
479
+ swift test --filter RunicTests
480
+ ```
481
+
482
+ **Code Quality**:
483
+ ```bash
484
+ # SwiftLint
485
+ swiftlint lint
486
+
487
+ # SwiftFormat
488
+ swiftformat .
489
+ ```
490
+
491
+ ---
492
+
493
+ ### iOS Development
494
+
495
+ **Setup**:
496
+ ```bash
497
+ ./scripts/setup-ios.sh
498
+ ```
499
+
500
+ **Build**:
501
+ ```bash
502
+ # Simulator build
503
+ ./scripts/build-ios.sh --simulator
504
+
505
+ # Device build (requires code signing)
506
+ ./scripts/build-ios.sh --device
507
+
508
+ # Create IPA for distribution
509
+ ./scripts/build-ios.sh --archive
510
+ ```
511
+
512
+ **Testing**:
513
+ ```bash
514
+ # Run tests
515
+ ./scripts/build-ios.sh --simulator --skip-signing
516
+ ```
517
+
518
+ **Code Signing**:
519
+
520
+ 1. **Development**:
521
+ - Open `RuniciOS/*.xcodeproj` or `*.xcworkspace` in Xcode
522
+ - Select target → Signing & Capabilities
523
+ - Choose your team and enable automatic signing
524
+
525
+ 2. **Distribution**:
526
+ - Create App ID in Apple Developer Portal
527
+ - Create provisioning profile
528
+ - Update `RuniciOS/Config.xcconfig` with your team ID
529
+
530
+ ---
531
+
532
+ ### Android Development
533
+
534
+ **Setup**:
535
+ ```bash
536
+ ./scripts/setup-react-native.sh --skip-windows
537
+
538
+ # Set ANDROID_HOME
539
+ export ANDROID_HOME=$HOME/Library/Android/sdk
540
+ export PATH=$PATH:$ANDROID_HOME/platform-tools
541
+ ```
542
+
543
+ **Build**:
544
+ ```bash
545
+ # Debug build
546
+ ./scripts/build-android.sh --variant debug
547
+
548
+ # Release build
549
+ ./scripts/build-android.sh --variant release
550
+
551
+ # AAB for Play Store
552
+ ./scripts/build-android.sh --aab
553
+ ```
554
+
555
+ **Testing**:
556
+ ```bash
557
+ # Run tests
558
+ cd runic-cross-platform/android
559
+ ./gradlew test
560
+
561
+ # Run on emulator
562
+ npm run android
563
+ ```
564
+
565
+ **Code Signing**:
566
+
567
+ 1. **Generate Keystore**:
568
+ ```bash
569
+ keytool -genkey -v -keystore runic-release.keystore \
570
+ -alias runic-key -keyalg RSA -keysize 2048 -validity 10000
571
+ ```
572
+
573
+ 2. **Create `android/keystore.properties`**:
574
+ ```properties
575
+ storePassword=YOUR_STORE_PASSWORD
576
+ keyPassword=YOUR_KEY_PASSWORD
577
+ keyAlias=runic-key
578
+ storeFile=runic-release.keystore
579
+ ```
580
+
581
+ 3. **Update `android/app/build.gradle`**:
582
+ ```gradle
583
+ // Load keystore
584
+ def keystorePropertiesFile = rootProject.file("keystore.properties")
585
+ def keystoreProperties = new Properties()
586
+ if (keystorePropertiesFile.exists()) {
587
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
588
+ }
589
+
590
+ android {
591
+ signingConfigs {
592
+ release {
593
+ if (keystorePropertiesFile.exists()) {
594
+ storeFile file(keystoreProperties['storeFile'])
595
+ storePassword keystoreProperties['storePassword']
596
+ keyAlias keystoreProperties['keyAlias']
597
+ keyPassword keystoreProperties['keyPassword']
598
+ }
599
+ }
600
+ }
601
+ buildTypes {
602
+ release {
603
+ signingConfig signingConfigs.release
604
+ }
605
+ }
606
+ }
607
+ ```
608
+
609
+ ---
610
+
611
+ ### Windows Development
612
+
613
+ **Setup**:
614
+ ```bash
615
+ ./scripts/setup-react-native.sh --skip-android
616
+ ```
617
+
618
+ **Prerequisites**:
619
+ - Windows 10+
620
+ - Visual Studio 2022 with:
621
+ - Desktop development with C++
622
+ - Windows 10 SDK (10.0.19041.0 or higher)
623
+
624
+ **Build**:
625
+ ```bash
626
+ # Release build
627
+ ./scripts/build-windows.sh
628
+
629
+ # Debug build
630
+ ./scripts/build-windows.sh --configuration Debug
631
+
632
+ # Different architecture
633
+ ./scripts/build-windows.sh --arch ARM64
634
+ ```
635
+
636
+ **Testing**:
637
+ ```bash
638
+ # Run tests
639
+ cd runic-cross-platform
640
+ npm test
641
+
642
+ # Run in development
643
+ npm run windows
644
+ ```
645
+
646
+ **Deployment**:
647
+ - Create installer with WiX Toolset or Inno Setup
648
+ - Sign executable with code signing certificate
649
+
650
+ ---
651
+
652
+ ## GitHub Secrets Configuration
653
+
654
+ Configure these secrets in your GitHub repository settings (Settings → Secrets and variables → Actions):
655
+
656
+ ### iOS Secrets
657
+
658
+ | Secret Name | Description | How to Generate |
659
+ |------------|-------------|-----------------|
660
+ | `IOS_CERTIFICATE_P12` | Base64-encoded P12 certificate | `base64 -i certificate.p12 -o cert.txt` |
661
+ | `IOS_CERTIFICATE_PASSWORD` | Certificate password | Password used when exporting certificate |
662
+ | `IOS_PROVISIONING_PROFILE` | Base64-encoded provisioning profile | `base64 -i profile.mobileprovision -o profile.txt` |
663
+ | `APP_STORE_CONNECT_API_KEY` | API key for TestFlight | Create in App Store Connect → Users and Access → Keys |
664
+
665
+ ### Android Secrets
666
+
667
+ | Secret Name | Description | How to Generate |
668
+ |------------|-------------|-----------------|
669
+ | `ANDROID_KEYSTORE_BASE64` | Base64-encoded keystore file | `base64 -i runic-release.keystore -o keystore.txt` |
670
+ | `ANDROID_KEYSTORE_PASSWORD` | Keystore password | Password from keystore creation |
671
+ | `ANDROID_KEY_ALIAS` | Key alias | Alias from keystore creation |
672
+ | `ANDROID_KEY_PASSWORD` | Key password | Password from keystore creation |
673
+ | `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON` | Service account JSON | Create in Google Play Console → API access |
674
+
675
+ ---
676
+
677
+ ## Troubleshooting
678
+
679
+ ### Common Issues
680
+
681
+ #### macOS Build Issues
682
+
683
+ **Problem**: `swift build` fails with "missing package"
684
+
685
+ **Solution**:
686
+ ```bash
687
+ # Clean and resolve
688
+ rm -rf .build
689
+ swift package resolve
690
+ swift package clean
691
+ swift build
692
+ ```
693
+
694
+ **Problem**: Code signing fails
695
+
696
+ **Solution**:
697
+ ```bash
698
+ # Check signing identities
699
+ security find-identity -v -p codesigning
700
+
701
+ # Build without signing
702
+ ./scripts/build-macos.sh --skip-signing
703
+ ```
704
+
705
+ ---
706
+
707
+ #### iOS Build Issues
708
+
709
+ **Problem**: "No provisioning profile found"
710
+
711
+ **Solution**:
712
+ 1. Open project in Xcode
713
+ 2. Select target → Signing & Capabilities
714
+ 3. Enable "Automatically manage signing"
715
+ 4. Select your team
716
+
717
+ **Problem**: Tests fail on simulator
718
+
719
+ **Solution**:
720
+ ```bash
721
+ # List available simulators
722
+ xcrun simctl list devices
723
+
724
+ # Specify simulator in build script
725
+ # Edit build-ios.sh and change simulator name
726
+ ```
727
+
728
+ ---
729
+
730
+ #### Android Build Issues
731
+
732
+ **Problem**: "ANDROID_HOME is not set"
733
+
734
+ **Solution**:
735
+ ```bash
736
+ # macOS/Linux
737
+ export ANDROID_HOME=$HOME/Library/Android/sdk
738
+ export PATH=$PATH:$ANDROID_HOME/platform-tools
739
+ export PATH=$PATH:$ANDROID_HOME/tools
740
+
741
+ # Add to ~/.bashrc or ~/.zshrc to persist
742
+
743
+ # Windows
744
+ setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk"
745
+ ```
746
+
747
+ **Problem**: Gradle build fails
748
+
749
+ **Solution**:
750
+ ```bash
751
+ # Clean Gradle cache
752
+ cd runic-cross-platform/android
753
+ ./gradlew clean
754
+ ./gradlew --stop
755
+
756
+ # Clear global Gradle cache
757
+ rm -rf ~/.gradle/caches/
758
+ ```
759
+
760
+ ---
761
+
762
+ #### Windows Build Issues
763
+
764
+ **Problem**: "MSBuild not found"
765
+
766
+ **Solution**:
767
+ - Install Visual Studio 2022 with C++ development tools
768
+ - Add MSBuild to PATH:
769
+ ```
770
+ C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin
771
+ ```
772
+
773
+ **Problem**: React Native Windows initialization fails
774
+
775
+ **Solution**:
776
+ ```bash
777
+ # Reinstall React Native Windows
778
+ cd runic-cross-platform
779
+ npm install react-native-windows --save
780
+ npx react-native-windows-init --overwrite
781
+ ```
782
+
783
+ ---
784
+
785
+ ### Getting Help
786
+
787
+ **Check build logs**:
788
+ ```bash
789
+ # Verbose output
790
+ ./scripts/build-macos.sh --verbose
791
+ ./scripts/build-ios.sh --verbose
792
+ ./scripts/build-android.sh --verbose
793
+ ./scripts/build-windows.sh --verbose
794
+ ```
795
+
796
+ **Dry-run mode**:
797
+ ```bash
798
+ # See what would happen without executing
799
+ ./scripts/build-macos.sh --dry-run
800
+ ```
801
+
802
+ **Platform-specific diagnostics**:
803
+ ```bash
804
+ # macOS/iOS
805
+ xcodebuild -version
806
+ swift --version
807
+
808
+ # Android
809
+ ./gradlew --version
810
+ adb devices
811
+
812
+ # React Native
813
+ npx react-native doctor
814
+ ```
815
+
816
+ ---
817
+
818
+ ## Advanced Usage
819
+
820
+ ### Custom Build Configurations
821
+
822
+ **macOS with custom output**:
823
+ ```bash
824
+ ./scripts/build-macos.sh \
825
+ --configuration release \
826
+ --output-dir /path/to/output \
827
+ --clean
828
+ ```
829
+
830
+ **iOS archive with custom scheme**:
831
+ ```bash
832
+ ./scripts/build-ios.sh \
833
+ --scheme MyCustomScheme \
834
+ --configuration Release \
835
+ --archive
836
+ ```
837
+
838
+ **Android with multiple variants**:
839
+ ```bash
840
+ # Debug build
841
+ ./scripts/build-android.sh --variant debug
842
+
843
+ # Release APK
844
+ ./scripts/build-android.sh --variant release
845
+
846
+ # Release AAB
847
+ ./scripts/build-android.sh --variant release --aab
848
+ ```
849
+
850
+ ### Continuous Integration
851
+
852
+ **Local CI testing**:
853
+ ```bash
854
+ # Simulate CI environment
855
+ export CI=true
856
+
857
+ # Run builds as CI would
858
+ ./scripts/build-macos.sh --skip-signing
859
+ ./scripts/build-ios.sh --simulator --skip-signing
860
+ ./scripts/build-android.sh --variant release
861
+ ```
862
+
863
+ **Custom CI workflows**:
864
+ - Copy `scripts/ci-config.yml` to `.github/workflows/`
865
+ - Modify as needed for your workflow
866
+ - Configure required secrets
867
+
868
+ ### Automated Versioning
869
+
870
+ **Update version across all platforms**:
871
+ ```bash
872
+ # Update version.env
873
+ echo "VERSION=1.2.3" > version.env
874
+
875
+ # Builds will automatically use this version
876
+ ./scripts/build-macos.sh
877
+ ./scripts/build-ios.sh
878
+ ./scripts/build-android.sh
879
+ ```
880
+
881
+ ---
882
+
883
+ ## Script Maintenance
884
+
885
+ All scripts follow these conventions:
886
+
887
+ - ✅ Bash shebang: `#!/usr/bin/env bash`
888
+ - ✅ Strict mode: `set -e -u`
889
+ - ✅ Color output with terminal detection
890
+ - ✅ Comprehensive help via `--help`
891
+ - ✅ Dry-run mode via `--dry-run`
892
+ - ✅ Verbose mode via `--verbose`
893
+ - ✅ Error handling with clear messages
894
+ - ✅ Prerequisite checking
895
+ - ✅ Build summaries
896
+
897
+ **Make scripts executable**:
898
+ ```bash
899
+ chmod +x scripts/*.sh
900
+ ```
901
+
902
+ **Update all scripts**:
903
+ ```bash
904
+ # Pull latest changes
905
+ git pull
906
+
907
+ # Make executable
908
+ chmod +x scripts/*.sh
909
+ ```
910
+
911
+ ---
912
+
913
+ ## License
914
+
915
+ These scripts are part of the Runic project and follow the same license.
916
+
917
+ ---
918
+
919
+ ## Support
920
+
921
+ For issues, questions, or contributions:
922
+ - Open an issue on GitHub
923
+ - Check existing documentation
924
+ - Run scripts with `--verbose` for debugging
925
+
926
+ **Happy Building! 🚀**