crca 1.4.0__py3-none-any.whl

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 (501) hide show
  1. .github/ISSUE_TEMPLATE/bug_report.md +65 -0
  2. .github/ISSUE_TEMPLATE/feature_request.md +41 -0
  3. .github/PULL_REQUEST_TEMPLATE.md +20 -0
  4. .github/workflows/publish-manual.yml +61 -0
  5. .github/workflows/publish.yml +64 -0
  6. .gitignore +214 -0
  7. CRCA.py +4156 -0
  8. LICENSE +201 -0
  9. MANIFEST.in +43 -0
  10. PKG-INFO +5035 -0
  11. README.md +4959 -0
  12. __init__.py +17 -0
  13. branches/CRCA-Q.py +2728 -0
  14. branches/crca_cg/corposwarm.py +9065 -0
  15. branches/crca_cg/fix_rancher_docker_creds.ps1 +155 -0
  16. branches/crca_cg/package.json +5 -0
  17. branches/crca_cg/test_bolt_integration.py +446 -0
  18. branches/crca_cg/test_corposwarm_comprehensive.py +773 -0
  19. branches/crca_cg/test_new_features.py +163 -0
  20. branches/crca_sd/__init__.py +149 -0
  21. branches/crca_sd/crca_sd_core.py +770 -0
  22. branches/crca_sd/crca_sd_governance.py +1325 -0
  23. branches/crca_sd/crca_sd_mpc.py +1130 -0
  24. branches/crca_sd/crca_sd_realtime.py +1844 -0
  25. branches/crca_sd/crca_sd_tui.py +1133 -0
  26. crca-1.4.0.dist-info/METADATA +5035 -0
  27. crca-1.4.0.dist-info/RECORD +501 -0
  28. crca-1.4.0.dist-info/WHEEL +4 -0
  29. crca-1.4.0.dist-info/licenses/LICENSE +201 -0
  30. docs/CRCA-Q.md +2333 -0
  31. examples/config.yaml.example +25 -0
  32. examples/crca_sd_example.py +513 -0
  33. examples/data_broker_example.py +294 -0
  34. examples/logistics_corporation.py +861 -0
  35. examples/palantir_example.py +299 -0
  36. examples/policy_bench.py +934 -0
  37. examples/pridnestrovia-sd.py +705 -0
  38. examples/pridnestrovia_realtime.py +1902 -0
  39. prompts/__init__.py +10 -0
  40. prompts/default_crca.py +101 -0
  41. pyproject.toml +151 -0
  42. requirements.txt +76 -0
  43. schemas/__init__.py +43 -0
  44. schemas/mcpSchemas.py +51 -0
  45. schemas/policy.py +458 -0
  46. templates/__init__.py +38 -0
  47. templates/base_specialized_agent.py +195 -0
  48. templates/drift_detection.py +325 -0
  49. templates/examples/causal_agent_template.py +309 -0
  50. templates/examples/drag_drop_example.py +213 -0
  51. templates/examples/logistics_agent_template.py +207 -0
  52. templates/examples/trading_agent_template.py +206 -0
  53. templates/feature_mixins.py +253 -0
  54. templates/graph_management.py +442 -0
  55. templates/llm_integration.py +194 -0
  56. templates/module_registry.py +276 -0
  57. templates/mpc_planner.py +280 -0
  58. templates/policy_loop.py +1168 -0
  59. templates/prediction_framework.py +448 -0
  60. templates/statistical_methods.py +778 -0
  61. tests/sanity.yml +31 -0
  62. tests/sanity_check +406 -0
  63. tests/test_core.py +47 -0
  64. tests/test_crca_excel.py +166 -0
  65. tests/test_crca_sd.py +780 -0
  66. tests/test_data_broker.py +424 -0
  67. tests/test_palantir.py +349 -0
  68. tools/__init__.py +38 -0
  69. tools/actuators.py +437 -0
  70. tools/bolt.diy/Dockerfile +103 -0
  71. tools/bolt.diy/app/components/@settings/core/AvatarDropdown.tsx +175 -0
  72. tools/bolt.diy/app/components/@settings/core/ControlPanel.tsx +345 -0
  73. tools/bolt.diy/app/components/@settings/core/constants.tsx +108 -0
  74. tools/bolt.diy/app/components/@settings/core/types.ts +114 -0
  75. tools/bolt.diy/app/components/@settings/index.ts +12 -0
  76. tools/bolt.diy/app/components/@settings/shared/components/TabTile.tsx +151 -0
  77. tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionForm.tsx +193 -0
  78. tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionTestIndicator.tsx +60 -0
  79. tools/bolt.diy/app/components/@settings/shared/service-integration/ErrorState.tsx +102 -0
  80. tools/bolt.diy/app/components/@settings/shared/service-integration/LoadingState.tsx +94 -0
  81. tools/bolt.diy/app/components/@settings/shared/service-integration/ServiceHeader.tsx +72 -0
  82. tools/bolt.diy/app/components/@settings/shared/service-integration/index.ts +6 -0
  83. tools/bolt.diy/app/components/@settings/tabs/data/DataTab.tsx +721 -0
  84. tools/bolt.diy/app/components/@settings/tabs/data/DataVisualization.tsx +384 -0
  85. tools/bolt.diy/app/components/@settings/tabs/event-logs/EventLogsTab.tsx +1013 -0
  86. tools/bolt.diy/app/components/@settings/tabs/features/FeaturesTab.tsx +295 -0
  87. tools/bolt.diy/app/components/@settings/tabs/github/GitHubTab.tsx +281 -0
  88. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubAuthDialog.tsx +173 -0
  89. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubCacheManager.tsx +367 -0
  90. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubConnection.tsx +233 -0
  91. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubErrorBoundary.tsx +105 -0
  92. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubProgressiveLoader.tsx +266 -0
  93. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositoryCard.tsx +121 -0
  94. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositorySelector.tsx +312 -0
  95. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubStats.tsx +291 -0
  96. tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubUserProfile.tsx +46 -0
  97. tools/bolt.diy/app/components/@settings/tabs/github/components/shared/GitHubStateIndicators.tsx +264 -0
  98. tools/bolt.diy/app/components/@settings/tabs/github/components/shared/RepositoryCard.tsx +361 -0
  99. tools/bolt.diy/app/components/@settings/tabs/github/components/shared/index.ts +11 -0
  100. tools/bolt.diy/app/components/@settings/tabs/gitlab/GitLabTab.tsx +305 -0
  101. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabAuthDialog.tsx +186 -0
  102. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabConnection.tsx +253 -0
  103. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabRepositorySelector.tsx +358 -0
  104. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryCard.tsx +79 -0
  105. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryList.tsx +142 -0
  106. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/StatsDisplay.tsx +91 -0
  107. tools/bolt.diy/app/components/@settings/tabs/gitlab/components/index.ts +4 -0
  108. tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerList.tsx +99 -0
  109. tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerListItem.tsx +70 -0
  110. tools/bolt.diy/app/components/@settings/tabs/mcp/McpStatusBadge.tsx +37 -0
  111. tools/bolt.diy/app/components/@settings/tabs/mcp/McpTab.tsx +239 -0
  112. tools/bolt.diy/app/components/@settings/tabs/netlify/NetlifyTab.tsx +1393 -0
  113. tools/bolt.diy/app/components/@settings/tabs/netlify/components/NetlifyConnection.tsx +990 -0
  114. tools/bolt.diy/app/components/@settings/tabs/netlify/components/index.ts +1 -0
  115. tools/bolt.diy/app/components/@settings/tabs/notifications/NotificationsTab.tsx +300 -0
  116. tools/bolt.diy/app/components/@settings/tabs/profile/ProfileTab.tsx +181 -0
  117. tools/bolt.diy/app/components/@settings/tabs/providers/cloud/CloudProvidersTab.tsx +308 -0
  118. tools/bolt.diy/app/components/@settings/tabs/providers/local/ErrorBoundary.tsx +68 -0
  119. tools/bolt.diy/app/components/@settings/tabs/providers/local/HealthStatusBadge.tsx +64 -0
  120. tools/bolt.diy/app/components/@settings/tabs/providers/local/LoadingSkeleton.tsx +107 -0
  121. tools/bolt.diy/app/components/@settings/tabs/providers/local/LocalProvidersTab.tsx +556 -0
  122. tools/bolt.diy/app/components/@settings/tabs/providers/local/ModelCard.tsx +106 -0
  123. tools/bolt.diy/app/components/@settings/tabs/providers/local/ProviderCard.tsx +120 -0
  124. tools/bolt.diy/app/components/@settings/tabs/providers/local/SetupGuide.tsx +671 -0
  125. tools/bolt.diy/app/components/@settings/tabs/providers/local/StatusDashboard.tsx +91 -0
  126. tools/bolt.diy/app/components/@settings/tabs/providers/local/types.ts +44 -0
  127. tools/bolt.diy/app/components/@settings/tabs/settings/SettingsTab.tsx +215 -0
  128. tools/bolt.diy/app/components/@settings/tabs/supabase/SupabaseTab.tsx +1089 -0
  129. tools/bolt.diy/app/components/@settings/tabs/vercel/VercelTab.tsx +909 -0
  130. tools/bolt.diy/app/components/@settings/tabs/vercel/components/VercelConnection.tsx +368 -0
  131. tools/bolt.diy/app/components/@settings/tabs/vercel/components/index.ts +1 -0
  132. tools/bolt.diy/app/components/@settings/utils/tab-helpers.ts +54 -0
  133. tools/bolt.diy/app/components/chat/APIKeyManager.tsx +169 -0
  134. tools/bolt.diy/app/components/chat/Artifact.tsx +296 -0
  135. tools/bolt.diy/app/components/chat/AssistantMessage.tsx +192 -0
  136. tools/bolt.diy/app/components/chat/BaseChat.module.scss +47 -0
  137. tools/bolt.diy/app/components/chat/BaseChat.tsx +522 -0
  138. tools/bolt.diy/app/components/chat/Chat.client.tsx +670 -0
  139. tools/bolt.diy/app/components/chat/ChatAlert.tsx +108 -0
  140. tools/bolt.diy/app/components/chat/ChatBox.tsx +334 -0
  141. tools/bolt.diy/app/components/chat/CodeBlock.module.scss +10 -0
  142. tools/bolt.diy/app/components/chat/CodeBlock.tsx +85 -0
  143. tools/bolt.diy/app/components/chat/DicussMode.tsx +17 -0
  144. tools/bolt.diy/app/components/chat/ExamplePrompts.tsx +37 -0
  145. tools/bolt.diy/app/components/chat/FilePreview.tsx +38 -0
  146. tools/bolt.diy/app/components/chat/GitCloneButton.tsx +327 -0
  147. tools/bolt.diy/app/components/chat/ImportFolderButton.tsx +141 -0
  148. tools/bolt.diy/app/components/chat/LLMApiAlert.tsx +109 -0
  149. tools/bolt.diy/app/components/chat/MCPTools.tsx +129 -0
  150. tools/bolt.diy/app/components/chat/Markdown.module.scss +171 -0
  151. tools/bolt.diy/app/components/chat/Markdown.spec.ts +48 -0
  152. tools/bolt.diy/app/components/chat/Markdown.tsx +252 -0
  153. tools/bolt.diy/app/components/chat/Messages.client.tsx +102 -0
  154. tools/bolt.diy/app/components/chat/ModelSelector.tsx +797 -0
  155. tools/bolt.diy/app/components/chat/NetlifyDeploymentLink.client.tsx +51 -0
  156. tools/bolt.diy/app/components/chat/ProgressCompilation.tsx +110 -0
  157. tools/bolt.diy/app/components/chat/ScreenshotStateManager.tsx +33 -0
  158. tools/bolt.diy/app/components/chat/SendButton.client.tsx +39 -0
  159. tools/bolt.diy/app/components/chat/SpeechRecognition.tsx +28 -0
  160. tools/bolt.diy/app/components/chat/StarterTemplates.tsx +38 -0
  161. tools/bolt.diy/app/components/chat/SupabaseAlert.tsx +199 -0
  162. tools/bolt.diy/app/components/chat/SupabaseConnection.tsx +339 -0
  163. tools/bolt.diy/app/components/chat/ThoughtBox.tsx +43 -0
  164. tools/bolt.diy/app/components/chat/ToolInvocations.tsx +409 -0
  165. tools/bolt.diy/app/components/chat/UserMessage.tsx +101 -0
  166. tools/bolt.diy/app/components/chat/VercelDeploymentLink.client.tsx +158 -0
  167. tools/bolt.diy/app/components/chat/chatExportAndImport/ExportChatButton.tsx +49 -0
  168. tools/bolt.diy/app/components/chat/chatExportAndImport/ImportButtons.tsx +96 -0
  169. tools/bolt.diy/app/components/deploy/DeployAlert.tsx +197 -0
  170. tools/bolt.diy/app/components/deploy/DeployButton.tsx +277 -0
  171. tools/bolt.diy/app/components/deploy/GitHubDeploy.client.tsx +171 -0
  172. tools/bolt.diy/app/components/deploy/GitHubDeploymentDialog.tsx +1041 -0
  173. tools/bolt.diy/app/components/deploy/GitLabDeploy.client.tsx +171 -0
  174. tools/bolt.diy/app/components/deploy/GitLabDeploymentDialog.tsx +764 -0
  175. tools/bolt.diy/app/components/deploy/NetlifyDeploy.client.tsx +246 -0
  176. tools/bolt.diy/app/components/deploy/VercelDeploy.client.tsx +235 -0
  177. tools/bolt.diy/app/components/editor/codemirror/BinaryContent.tsx +7 -0
  178. tools/bolt.diy/app/components/editor/codemirror/CodeMirrorEditor.tsx +555 -0
  179. tools/bolt.diy/app/components/editor/codemirror/EnvMasking.ts +80 -0
  180. tools/bolt.diy/app/components/editor/codemirror/cm-theme.ts +192 -0
  181. tools/bolt.diy/app/components/editor/codemirror/indent.ts +68 -0
  182. tools/bolt.diy/app/components/editor/codemirror/languages.ts +112 -0
  183. tools/bolt.diy/app/components/git/GitUrlImport.client.tsx +147 -0
  184. tools/bolt.diy/app/components/header/Header.tsx +42 -0
  185. tools/bolt.diy/app/components/header/HeaderActionButtons.client.tsx +54 -0
  186. tools/bolt.diy/app/components/mandate/MandateSubmission.tsx +167 -0
  187. tools/bolt.diy/app/components/observability/DeploymentStatus.tsx +168 -0
  188. tools/bolt.diy/app/components/observability/EventTimeline.tsx +119 -0
  189. tools/bolt.diy/app/components/observability/FileDiffViewer.tsx +121 -0
  190. tools/bolt.diy/app/components/observability/GovernanceStatus.tsx +197 -0
  191. tools/bolt.diy/app/components/observability/GovernorMetrics.tsx +246 -0
  192. tools/bolt.diy/app/components/observability/LogStream.tsx +244 -0
  193. tools/bolt.diy/app/components/observability/MandateDetails.tsx +201 -0
  194. tools/bolt.diy/app/components/observability/ObservabilityDashboard.tsx +200 -0
  195. tools/bolt.diy/app/components/sidebar/HistoryItem.tsx +187 -0
  196. tools/bolt.diy/app/components/sidebar/Menu.client.tsx +536 -0
  197. tools/bolt.diy/app/components/sidebar/date-binning.ts +59 -0
  198. tools/bolt.diy/app/components/txt +1 -0
  199. tools/bolt.diy/app/components/ui/BackgroundRays/index.tsx +18 -0
  200. tools/bolt.diy/app/components/ui/BackgroundRays/styles.module.scss +246 -0
  201. tools/bolt.diy/app/components/ui/Badge.tsx +53 -0
  202. tools/bolt.diy/app/components/ui/BranchSelector.tsx +270 -0
  203. tools/bolt.diy/app/components/ui/Breadcrumbs.tsx +101 -0
  204. tools/bolt.diy/app/components/ui/Button.tsx +46 -0
  205. tools/bolt.diy/app/components/ui/Card.tsx +55 -0
  206. tools/bolt.diy/app/components/ui/Checkbox.tsx +32 -0
  207. tools/bolt.diy/app/components/ui/CloseButton.tsx +49 -0
  208. tools/bolt.diy/app/components/ui/CodeBlock.tsx +103 -0
  209. tools/bolt.diy/app/components/ui/Collapsible.tsx +9 -0
  210. tools/bolt.diy/app/components/ui/ColorSchemeDialog.tsx +378 -0
  211. tools/bolt.diy/app/components/ui/Dialog.tsx +449 -0
  212. tools/bolt.diy/app/components/ui/Dropdown.tsx +63 -0
  213. tools/bolt.diy/app/components/ui/EmptyState.tsx +154 -0
  214. tools/bolt.diy/app/components/ui/FileIcon.tsx +346 -0
  215. tools/bolt.diy/app/components/ui/FilterChip.tsx +92 -0
  216. tools/bolt.diy/app/components/ui/GlowingEffect.tsx +192 -0
  217. tools/bolt.diy/app/components/ui/GradientCard.tsx +100 -0
  218. tools/bolt.diy/app/components/ui/IconButton.tsx +84 -0
  219. tools/bolt.diy/app/components/ui/Input.tsx +22 -0
  220. tools/bolt.diy/app/components/ui/Label.tsx +20 -0
  221. tools/bolt.diy/app/components/ui/LoadingDots.tsx +27 -0
  222. tools/bolt.diy/app/components/ui/LoadingOverlay.tsx +32 -0
  223. tools/bolt.diy/app/components/ui/PanelHeader.tsx +20 -0
  224. tools/bolt.diy/app/components/ui/PanelHeaderButton.tsx +36 -0
  225. tools/bolt.diy/app/components/ui/Popover.tsx +29 -0
  226. tools/bolt.diy/app/components/ui/Progress.tsx +22 -0
  227. tools/bolt.diy/app/components/ui/RepositoryStats.tsx +87 -0
  228. tools/bolt.diy/app/components/ui/ScrollArea.tsx +41 -0
  229. tools/bolt.diy/app/components/ui/SearchInput.tsx +80 -0
  230. tools/bolt.diy/app/components/ui/SearchResultItem.tsx +134 -0
  231. tools/bolt.diy/app/components/ui/Separator.tsx +22 -0
  232. tools/bolt.diy/app/components/ui/SettingsButton.tsx +35 -0
  233. tools/bolt.diy/app/components/ui/Slider.tsx +73 -0
  234. tools/bolt.diy/app/components/ui/StatusIndicator.tsx +90 -0
  235. tools/bolt.diy/app/components/ui/Switch.tsx +37 -0
  236. tools/bolt.diy/app/components/ui/Tabs.tsx +52 -0
  237. tools/bolt.diy/app/components/ui/TabsWithSlider.tsx +112 -0
  238. tools/bolt.diy/app/components/ui/ThemeSwitch.tsx +29 -0
  239. tools/bolt.diy/app/components/ui/Tooltip.tsx +122 -0
  240. tools/bolt.diy/app/components/ui/index.ts +38 -0
  241. tools/bolt.diy/app/components/ui/use-toast.ts +66 -0
  242. tools/bolt.diy/app/components/workbench/DiffView.tsx +796 -0
  243. tools/bolt.diy/app/components/workbench/EditorPanel.tsx +174 -0
  244. tools/bolt.diy/app/components/workbench/ExpoQrModal.tsx +55 -0
  245. tools/bolt.diy/app/components/workbench/FileBreadcrumb.tsx +150 -0
  246. tools/bolt.diy/app/components/workbench/FileTree.tsx +565 -0
  247. tools/bolt.diy/app/components/workbench/Inspector.tsx +126 -0
  248. tools/bolt.diy/app/components/workbench/InspectorPanel.tsx +146 -0
  249. tools/bolt.diy/app/components/workbench/LockManager.tsx +262 -0
  250. tools/bolt.diy/app/components/workbench/PortDropdown.tsx +91 -0
  251. tools/bolt.diy/app/components/workbench/Preview.tsx +1049 -0
  252. tools/bolt.diy/app/components/workbench/ScreenshotSelector.tsx +293 -0
  253. tools/bolt.diy/app/components/workbench/Search.tsx +257 -0
  254. tools/bolt.diy/app/components/workbench/Workbench.client.tsx +506 -0
  255. tools/bolt.diy/app/components/workbench/terminal/Terminal.tsx +131 -0
  256. tools/bolt.diy/app/components/workbench/terminal/TerminalManager.tsx +68 -0
  257. tools/bolt.diy/app/components/workbench/terminal/TerminalTabs.tsx +277 -0
  258. tools/bolt.diy/app/components/workbench/terminal/theme.ts +36 -0
  259. tools/bolt.diy/app/components/workflow/WorkflowPhase.tsx +109 -0
  260. tools/bolt.diy/app/components/workflow/WorkflowStatus.tsx +60 -0
  261. tools/bolt.diy/app/components/workflow/WorkflowTimeline.tsx +150 -0
  262. tools/bolt.diy/app/entry.client.tsx +7 -0
  263. tools/bolt.diy/app/entry.server.tsx +80 -0
  264. tools/bolt.diy/app/root.tsx +156 -0
  265. tools/bolt.diy/app/routes/_index.tsx +175 -0
  266. tools/bolt.diy/app/routes/api.bug-report.ts +254 -0
  267. tools/bolt.diy/app/routes/api.chat.ts +463 -0
  268. tools/bolt.diy/app/routes/api.check-env-key.ts +41 -0
  269. tools/bolt.diy/app/routes/api.configured-providers.ts +110 -0
  270. tools/bolt.diy/app/routes/api.corporate-swarm-status.ts +55 -0
  271. tools/bolt.diy/app/routes/api.enhancer.ts +137 -0
  272. tools/bolt.diy/app/routes/api.export-api-keys.ts +44 -0
  273. tools/bolt.diy/app/routes/api.git-info.ts +69 -0
  274. tools/bolt.diy/app/routes/api.git-proxy.$.ts +178 -0
  275. tools/bolt.diy/app/routes/api.github-branches.ts +166 -0
  276. tools/bolt.diy/app/routes/api.github-deploy.ts +67 -0
  277. tools/bolt.diy/app/routes/api.github-stats.ts +198 -0
  278. tools/bolt.diy/app/routes/api.github-template.ts +242 -0
  279. tools/bolt.diy/app/routes/api.github-user.ts +287 -0
  280. tools/bolt.diy/app/routes/api.gitlab-branches.ts +143 -0
  281. tools/bolt.diy/app/routes/api.gitlab-deploy.ts +67 -0
  282. tools/bolt.diy/app/routes/api.gitlab-projects.ts +105 -0
  283. tools/bolt.diy/app/routes/api.health.ts +8 -0
  284. tools/bolt.diy/app/routes/api.llmcall.ts +298 -0
  285. tools/bolt.diy/app/routes/api.mandate.ts +351 -0
  286. tools/bolt.diy/app/routes/api.mcp-check.ts +16 -0
  287. tools/bolt.diy/app/routes/api.mcp-update-config.ts +23 -0
  288. tools/bolt.diy/app/routes/api.models.$provider.ts +2 -0
  289. tools/bolt.diy/app/routes/api.models.ts +90 -0
  290. tools/bolt.diy/app/routes/api.netlify-deploy.ts +240 -0
  291. tools/bolt.diy/app/routes/api.netlify-user.ts +142 -0
  292. tools/bolt.diy/app/routes/api.supabase-user.ts +199 -0
  293. tools/bolt.diy/app/routes/api.supabase.query.ts +92 -0
  294. tools/bolt.diy/app/routes/api.supabase.ts +56 -0
  295. tools/bolt.diy/app/routes/api.supabase.variables.ts +32 -0
  296. tools/bolt.diy/app/routes/api.system.diagnostics.ts +142 -0
  297. tools/bolt.diy/app/routes/api.system.disk-info.ts +311 -0
  298. tools/bolt.diy/app/routes/api.system.git-info.ts +332 -0
  299. tools/bolt.diy/app/routes/api.update.ts +21 -0
  300. tools/bolt.diy/app/routes/api.vercel-deploy.ts +497 -0
  301. tools/bolt.diy/app/routes/api.vercel-user.ts +161 -0
  302. tools/bolt.diy/app/routes/api.workflow-status.$proposalId.ts +309 -0
  303. tools/bolt.diy/app/routes/chat.$id.tsx +8 -0
  304. tools/bolt.diy/app/routes/execute.$mandateId.tsx +432 -0
  305. tools/bolt.diy/app/routes/git.tsx +25 -0
  306. tools/bolt.diy/app/routes/observability.$mandateId.tsx +50 -0
  307. tools/bolt.diy/app/routes/webcontainer.connect.$id.tsx +32 -0
  308. tools/bolt.diy/app/routes/webcontainer.preview.$id.tsx +97 -0
  309. tools/bolt.diy/app/routes/workflow.$proposalId.tsx +170 -0
  310. tools/bolt.diy/app/styles/animations.scss +49 -0
  311. tools/bolt.diy/app/styles/components/code.scss +9 -0
  312. tools/bolt.diy/app/styles/components/editor.scss +135 -0
  313. tools/bolt.diy/app/styles/components/resize-handle.scss +30 -0
  314. tools/bolt.diy/app/styles/components/terminal.scss +3 -0
  315. tools/bolt.diy/app/styles/components/toast.scss +23 -0
  316. tools/bolt.diy/app/styles/diff-view.css +72 -0
  317. tools/bolt.diy/app/styles/index.scss +73 -0
  318. tools/bolt.diy/app/styles/variables.scss +255 -0
  319. tools/bolt.diy/app/styles/z-index.scss +37 -0
  320. tools/bolt.diy/app/types/GitHub.ts +182 -0
  321. tools/bolt.diy/app/types/GitLab.ts +103 -0
  322. tools/bolt.diy/app/types/actions.ts +85 -0
  323. tools/bolt.diy/app/types/artifact.ts +5 -0
  324. tools/bolt.diy/app/types/context.ts +26 -0
  325. tools/bolt.diy/app/types/design-scheme.ts +93 -0
  326. tools/bolt.diy/app/types/global.d.ts +13 -0
  327. tools/bolt.diy/app/types/mandate.ts +333 -0
  328. tools/bolt.diy/app/types/model.ts +25 -0
  329. tools/bolt.diy/app/types/netlify.ts +94 -0
  330. tools/bolt.diy/app/types/supabase.ts +54 -0
  331. tools/bolt.diy/app/types/template.ts +8 -0
  332. tools/bolt.diy/app/types/terminal.ts +9 -0
  333. tools/bolt.diy/app/types/theme.ts +1 -0
  334. tools/bolt.diy/app/types/vercel.ts +67 -0
  335. tools/bolt.diy/app/utils/buffer.ts +29 -0
  336. tools/bolt.diy/app/utils/classNames.ts +65 -0
  337. tools/bolt.diy/app/utils/constants.ts +147 -0
  338. tools/bolt.diy/app/utils/debounce.ts +13 -0
  339. tools/bolt.diy/app/utils/debugLogger.ts +1284 -0
  340. tools/bolt.diy/app/utils/diff.spec.ts +11 -0
  341. tools/bolt.diy/app/utils/diff.ts +117 -0
  342. tools/bolt.diy/app/utils/easings.ts +3 -0
  343. tools/bolt.diy/app/utils/fileLocks.ts +96 -0
  344. tools/bolt.diy/app/utils/fileUtils.ts +121 -0
  345. tools/bolt.diy/app/utils/folderImport.ts +73 -0
  346. tools/bolt.diy/app/utils/formatSize.ts +12 -0
  347. tools/bolt.diy/app/utils/getLanguageFromExtension.ts +24 -0
  348. tools/bolt.diy/app/utils/githubStats.ts +9 -0
  349. tools/bolt.diy/app/utils/gitlabStats.ts +54 -0
  350. tools/bolt.diy/app/utils/logger.ts +162 -0
  351. tools/bolt.diy/app/utils/markdown.ts +155 -0
  352. tools/bolt.diy/app/utils/mobile.ts +4 -0
  353. tools/bolt.diy/app/utils/os.ts +4 -0
  354. tools/bolt.diy/app/utils/path.ts +19 -0
  355. tools/bolt.diy/app/utils/projectCommands.ts +197 -0
  356. tools/bolt.diy/app/utils/promises.ts +19 -0
  357. tools/bolt.diy/app/utils/react.ts +6 -0
  358. tools/bolt.diy/app/utils/sampler.ts +49 -0
  359. tools/bolt.diy/app/utils/selectStarterTemplate.ts +255 -0
  360. tools/bolt.diy/app/utils/shell.ts +384 -0
  361. tools/bolt.diy/app/utils/stacktrace.ts +27 -0
  362. tools/bolt.diy/app/utils/stripIndent.ts +23 -0
  363. tools/bolt.diy/app/utils/terminal.ts +11 -0
  364. tools/bolt.diy/app/utils/unreachable.ts +3 -0
  365. tools/bolt.diy/app/vite-env.d.ts +2 -0
  366. tools/bolt.diy/assets/entitlements.mac.plist +25 -0
  367. tools/bolt.diy/assets/icons/icon.icns +0 -0
  368. tools/bolt.diy/assets/icons/icon.ico +0 -0
  369. tools/bolt.diy/assets/icons/icon.png +0 -0
  370. tools/bolt.diy/bindings.js +78 -0
  371. tools/bolt.diy/bindings.sh +33 -0
  372. tools/bolt.diy/docker-compose.yaml +145 -0
  373. tools/bolt.diy/electron/main/index.ts +201 -0
  374. tools/bolt.diy/electron/main/tsconfig.json +30 -0
  375. tools/bolt.diy/electron/main/ui/menu.ts +29 -0
  376. tools/bolt.diy/electron/main/ui/window.ts +54 -0
  377. tools/bolt.diy/electron/main/utils/auto-update.ts +110 -0
  378. tools/bolt.diy/electron/main/utils/constants.ts +4 -0
  379. tools/bolt.diy/electron/main/utils/cookie.ts +40 -0
  380. tools/bolt.diy/electron/main/utils/reload.ts +35 -0
  381. tools/bolt.diy/electron/main/utils/serve.ts +71 -0
  382. tools/bolt.diy/electron/main/utils/store.ts +3 -0
  383. tools/bolt.diy/electron/main/utils/vite-server.ts +44 -0
  384. tools/bolt.diy/electron/main/vite.config.ts +44 -0
  385. tools/bolt.diy/electron/preload/index.ts +22 -0
  386. tools/bolt.diy/electron/preload/tsconfig.json +7 -0
  387. tools/bolt.diy/electron/preload/vite.config.ts +31 -0
  388. tools/bolt.diy/electron-builder.yml +64 -0
  389. tools/bolt.diy/electron-update.yml +4 -0
  390. tools/bolt.diy/eslint.config.mjs +57 -0
  391. tools/bolt.diy/functions/[[path]].ts +12 -0
  392. tools/bolt.diy/icons/angular.svg +1 -0
  393. tools/bolt.diy/icons/astro.svg +8 -0
  394. tools/bolt.diy/icons/chat.svg +1 -0
  395. tools/bolt.diy/icons/expo-brand.svg +1 -0
  396. tools/bolt.diy/icons/expo.svg +4 -0
  397. tools/bolt.diy/icons/logo-text.svg +1 -0
  398. tools/bolt.diy/icons/logo.svg +4 -0
  399. tools/bolt.diy/icons/mcp.svg +1 -0
  400. tools/bolt.diy/icons/nativescript.svg +1 -0
  401. tools/bolt.diy/icons/netlify.svg +10 -0
  402. tools/bolt.diy/icons/nextjs.svg +1 -0
  403. tools/bolt.diy/icons/nuxt.svg +1 -0
  404. tools/bolt.diy/icons/qwik.svg +1 -0
  405. tools/bolt.diy/icons/react.svg +1 -0
  406. tools/bolt.diy/icons/remix.svg +24 -0
  407. tools/bolt.diy/icons/remotion.svg +1 -0
  408. tools/bolt.diy/icons/shadcn.svg +21 -0
  409. tools/bolt.diy/icons/slidev.svg +60 -0
  410. tools/bolt.diy/icons/solidjs.svg +1 -0
  411. tools/bolt.diy/icons/stars.svg +1 -0
  412. tools/bolt.diy/icons/svelte.svg +1 -0
  413. tools/bolt.diy/icons/typescript.svg +1 -0
  414. tools/bolt.diy/icons/vite.svg +1 -0
  415. tools/bolt.diy/icons/vue.svg +1 -0
  416. tools/bolt.diy/load-context.ts +9 -0
  417. tools/bolt.diy/notarize.cjs +31 -0
  418. tools/bolt.diy/package.json +218 -0
  419. tools/bolt.diy/playwright.config.preview.ts +35 -0
  420. tools/bolt.diy/pre-start.cjs +26 -0
  421. tools/bolt.diy/public/apple-touch-icon-precomposed.png +0 -0
  422. tools/bolt.diy/public/apple-touch-icon.png +0 -0
  423. tools/bolt.diy/public/favicon.ico +0 -0
  424. tools/bolt.diy/public/favicon.svg +4 -0
  425. tools/bolt.diy/public/icons/AmazonBedrock.svg +1 -0
  426. tools/bolt.diy/public/icons/Anthropic.svg +4 -0
  427. tools/bolt.diy/public/icons/Cohere.svg +4 -0
  428. tools/bolt.diy/public/icons/Deepseek.svg +5 -0
  429. tools/bolt.diy/public/icons/Default.svg +4 -0
  430. tools/bolt.diy/public/icons/Google.svg +4 -0
  431. tools/bolt.diy/public/icons/Groq.svg +4 -0
  432. tools/bolt.diy/public/icons/HuggingFace.svg +4 -0
  433. tools/bolt.diy/public/icons/Hyperbolic.svg +3 -0
  434. tools/bolt.diy/public/icons/LMStudio.svg +5 -0
  435. tools/bolt.diy/public/icons/Mistral.svg +4 -0
  436. tools/bolt.diy/public/icons/Ollama.svg +4 -0
  437. tools/bolt.diy/public/icons/OpenAI.svg +4 -0
  438. tools/bolt.diy/public/icons/OpenAILike.svg +4 -0
  439. tools/bolt.diy/public/icons/OpenRouter.svg +4 -0
  440. tools/bolt.diy/public/icons/Perplexity.svg +4 -0
  441. tools/bolt.diy/public/icons/Together.svg +4 -0
  442. tools/bolt.diy/public/icons/xAI.svg +5 -0
  443. tools/bolt.diy/public/inspector-script.js +292 -0
  444. tools/bolt.diy/public/logo-dark-styled.png +0 -0
  445. tools/bolt.diy/public/logo-dark.png +0 -0
  446. tools/bolt.diy/public/logo-light-styled.png +0 -0
  447. tools/bolt.diy/public/logo-light.png +0 -0
  448. tools/bolt.diy/public/logo.svg +15 -0
  449. tools/bolt.diy/public/social_preview_index.jpg +0 -0
  450. tools/bolt.diy/scripts/clean.js +45 -0
  451. tools/bolt.diy/scripts/electron-dev.mjs +181 -0
  452. tools/bolt.diy/scripts/setup-env.sh +41 -0
  453. tools/bolt.diy/scripts/update-imports.sh +7 -0
  454. tools/bolt.diy/scripts/update.sh +52 -0
  455. tools/bolt.diy/services/execution-governor/Dockerfile +41 -0
  456. tools/bolt.diy/services/execution-governor/config.ts +42 -0
  457. tools/bolt.diy/services/execution-governor/index.ts +683 -0
  458. tools/bolt.diy/services/execution-governor/metrics.ts +141 -0
  459. tools/bolt.diy/services/execution-governor/package.json +31 -0
  460. tools/bolt.diy/services/execution-governor/priority-queue.ts +139 -0
  461. tools/bolt.diy/services/execution-governor/tsconfig.json +21 -0
  462. tools/bolt.diy/services/execution-governor/types.ts +145 -0
  463. tools/bolt.diy/services/headless-executor/Dockerfile +43 -0
  464. tools/bolt.diy/services/headless-executor/executor.ts +210 -0
  465. tools/bolt.diy/services/headless-executor/index.ts +323 -0
  466. tools/bolt.diy/services/headless-executor/package.json +27 -0
  467. tools/bolt.diy/services/headless-executor/tsconfig.json +21 -0
  468. tools/bolt.diy/services/headless-executor/types.ts +38 -0
  469. tools/bolt.diy/test-workflows.sh +240 -0
  470. tools/bolt.diy/tests/integration/corporate-swarm.test.ts +208 -0
  471. tools/bolt.diy/tests/mandates/budget-limited.json +34 -0
  472. tools/bolt.diy/tests/mandates/complex.json +53 -0
  473. tools/bolt.diy/tests/mandates/constraint-enforced.json +36 -0
  474. tools/bolt.diy/tests/mandates/simple.json +35 -0
  475. tools/bolt.diy/tsconfig.json +37 -0
  476. tools/bolt.diy/types/istextorbinary.d.ts +15 -0
  477. tools/bolt.diy/uno.config.ts +279 -0
  478. tools/bolt.diy/vite-electron.config.ts +76 -0
  479. tools/bolt.diy/vite.config.ts +112 -0
  480. tools/bolt.diy/worker-configuration.d.ts +22 -0
  481. tools/bolt.diy/wrangler.toml +6 -0
  482. tools/code_generator.py +461 -0
  483. tools/file_operations.py +465 -0
  484. tools/mandate_generator.py +337 -0
  485. tools/mcpClientUtils.py +1216 -0
  486. tools/sensors.py +285 -0
  487. utils/Agent_types.py +15 -0
  488. utils/AnyToStr.py +0 -0
  489. utils/HHCS.py +277 -0
  490. utils/__init__.py +30 -0
  491. utils/agent.py +3627 -0
  492. utils/aop.py +2948 -0
  493. utils/canonical.py +143 -0
  494. utils/conversation.py +1195 -0
  495. utils/doctrine_versioning +230 -0
  496. utils/formatter.py +474 -0
  497. utils/ledger.py +311 -0
  498. utils/out_types.py +16 -0
  499. utils/rollback.py +339 -0
  500. utils/router.py +929 -0
  501. utils/tui.py +1908 -0
@@ -0,0 +1,291 @@
1
+ import React from 'react';
2
+ import { Button } from '~/components/ui/Button';
3
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '~/components/ui/Collapsible';
4
+ import { classNames } from '~/utils/classNames';
5
+ import { useGitHubStats } from '~/lib/hooks';
6
+ import type { GitHubConnection, GitHubStats as GitHubStatsType } from '~/types/GitHub';
7
+ import { GitHubErrorBoundary } from './GitHubErrorBoundary';
8
+
9
+ interface GitHubStatsProps {
10
+ connection: GitHubConnection;
11
+ isExpanded: boolean;
12
+ onToggleExpanded: (expanded: boolean) => void;
13
+ }
14
+
15
+ export function GitHubStats({ connection, isExpanded, onToggleExpanded }: GitHubStatsProps) {
16
+ const { stats, isLoading, isRefreshing, refreshStats, isStale } = useGitHubStats(
17
+ connection,
18
+ {
19
+ autoFetch: true,
20
+ cacheTimeout: 30 * 60 * 1000, // 30 minutes
21
+ },
22
+ !connection?.token,
23
+ ); // Use server-side if no token
24
+
25
+ return (
26
+ <GitHubErrorBoundary>
27
+ <GitHubStatsContent
28
+ stats={stats}
29
+ isLoading={isLoading}
30
+ isRefreshing={isRefreshing}
31
+ refreshStats={refreshStats}
32
+ isStale={isStale}
33
+ isExpanded={isExpanded}
34
+ onToggleExpanded={onToggleExpanded}
35
+ />
36
+ </GitHubErrorBoundary>
37
+ );
38
+ }
39
+
40
+ function GitHubStatsContent({
41
+ stats,
42
+ isLoading,
43
+ isRefreshing,
44
+ refreshStats,
45
+ isStale,
46
+ isExpanded,
47
+ onToggleExpanded,
48
+ }: {
49
+ stats: GitHubStatsType | null;
50
+ isLoading: boolean;
51
+ isRefreshing: boolean;
52
+ refreshStats: () => Promise<void>;
53
+ isStale: boolean;
54
+ isExpanded: boolean;
55
+ onToggleExpanded: (expanded: boolean) => void;
56
+ }) {
57
+ if (!stats) {
58
+ return (
59
+ <div className="mt-6 border-t border-bolt-elements-borderColor dark:border-bolt-elements-borderColor pt-6">
60
+ <div className="flex items-center justify-center p-8">
61
+ <div className="flex items-center gap-2">
62
+ {isLoading ? (
63
+ <>
64
+ <div className="i-ph:spinner-gap-bold animate-spin w-4 h-4" />
65
+ <span className="text-bolt-elements-textSecondary">Loading GitHub stats...</span>
66
+ </>
67
+ ) : (
68
+ <span className="text-bolt-elements-textSecondary">No stats available</span>
69
+ )}
70
+ </div>
71
+ </div>
72
+ </div>
73
+ );
74
+ }
75
+
76
+ return (
77
+ <div className="mt-6 border-t border-bolt-elements-borderColor dark:border-bolt-elements-borderColor pt-6">
78
+ <Collapsible open={isExpanded} onOpenChange={onToggleExpanded}>
79
+ <CollapsibleTrigger asChild>
80
+ <div className="flex items-center justify-between p-4 rounded-lg bg-bolt-elements-background dark:bg-bolt-elements-background-depth-2 border border-bolt-elements-borderColor dark:border-bolt-elements-borderColor hover:border-bolt-elements-borderColorActive/70 dark:hover:border-bolt-elements-borderColorActive/70 transition-all duration-200">
81
+ <div className="flex items-center gap-2">
82
+ <div className="i-ph:chart-bar w-4 h-4 text-bolt-elements-item-contentAccent" />
83
+ <span className="text-sm font-medium text-bolt-elements-textPrimary">
84
+ GitHub Stats
85
+ {isStale && <span className="text-bolt-elements-textTertiary ml-1">(Stale)</span>}
86
+ </span>
87
+ </div>
88
+ <div className="flex items-center gap-2">
89
+ <Button
90
+ onClick={(e) => {
91
+ e.stopPropagation();
92
+ refreshStats();
93
+ }}
94
+ disabled={isRefreshing}
95
+ variant="outline"
96
+ size="sm"
97
+ className="text-xs"
98
+ >
99
+ {isRefreshing ? (
100
+ <>
101
+ <div className="i-ph:spinner-gap w-3 h-3 animate-spin" />
102
+ Refreshing...
103
+ </>
104
+ ) : (
105
+ <>
106
+ <div className="i-ph:arrows-clockwise w-3 h-3" />
107
+ Refresh
108
+ </>
109
+ )}
110
+ </Button>
111
+ <div
112
+ className={classNames(
113
+ 'i-ph:caret-down w-4 h-4 transform transition-transform duration-200 text-bolt-elements-textSecondary',
114
+ isExpanded ? 'rotate-180' : '',
115
+ )}
116
+ />
117
+ </div>
118
+ </div>
119
+ </CollapsibleTrigger>
120
+
121
+ <CollapsibleContent className="overflow-hidden">
122
+ <div className="space-y-4 mt-4">
123
+ {/* Languages Section */}
124
+ <div className="mb-6">
125
+ <h4 className="text-sm font-medium text-bolt-elements-textPrimary mb-3">Top Languages</h4>
126
+ {stats.mostUsedLanguages && stats.mostUsedLanguages.length > 0 ? (
127
+ <div className="space-y-3">
128
+ <div className="flex flex-wrap gap-2">
129
+ {stats.mostUsedLanguages.slice(0, 15).map(({ language, bytes, repos }) => (
130
+ <span
131
+ key={language}
132
+ className="px-3 py-1 text-xs rounded-full bg-bolt-elements-sidebar-buttonBackgroundDefault text-bolt-elements-sidebar-buttonText"
133
+ title={`${language}: ${(bytes / 1024 / 1024).toFixed(2)}MB across ${repos} repos`}
134
+ >
135
+ {language} ({repos})
136
+ </span>
137
+ ))}
138
+ </div>
139
+ <div className="text-xs text-bolt-elements-textSecondary">
140
+ Based on actual codebase size across repositories
141
+ </div>
142
+ </div>
143
+ ) : (
144
+ <div className="flex flex-wrap gap-2">
145
+ {Object.entries(stats.languages)
146
+ .sort(([, a], [, b]) => b - a)
147
+ .slice(0, 5)
148
+ .map(([language]) => (
149
+ <span
150
+ key={language}
151
+ className="px-3 py-1 text-xs rounded-full bg-bolt-elements-sidebar-buttonBackgroundDefault text-bolt-elements-sidebar-buttonText"
152
+ >
153
+ {language}
154
+ </span>
155
+ ))}
156
+ </div>
157
+ )}
158
+ </div>
159
+
160
+ {/* GitHub Overview Summary */}
161
+ <div className="mb-6 p-4 bg-bolt-elements-background-depth-1 rounded-lg border border-bolt-elements-borderColor">
162
+ <h4 className="text-sm font-medium text-bolt-elements-textPrimary mb-3">GitHub Overview</h4>
163
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
164
+ <div className="text-center">
165
+ <div className="text-2xl font-bold text-bolt-elements-textPrimary">
166
+ {(stats.publicRepos || 0) + (stats.privateRepos || 0)}
167
+ </div>
168
+ <div className="text-xs text-bolt-elements-textSecondary">Total Repositories</div>
169
+ </div>
170
+ <div className="text-center">
171
+ <div className="text-2xl font-bold text-bolt-elements-textPrimary">{stats.totalBranches || 0}</div>
172
+ <div className="text-xs text-bolt-elements-textSecondary">Total Branches</div>
173
+ </div>
174
+ <div className="text-center">
175
+ <div className="text-2xl font-bold text-bolt-elements-textPrimary">
176
+ {stats.organizations?.length || 0}
177
+ </div>
178
+ <div className="text-xs text-bolt-elements-textSecondary">Organizations</div>
179
+ </div>
180
+ <div className="text-center">
181
+ <div className="text-2xl font-bold text-bolt-elements-textPrimary">
182
+ {Object.keys(stats.languages).length}
183
+ </div>
184
+ <div className="text-xs text-bolt-elements-textSecondary">Languages Used</div>
185
+ </div>
186
+ </div>
187
+ </div>
188
+
189
+ {/* Activity Summary */}
190
+ <div className="mb-6">
191
+ <h5 className="text-sm font-medium text-bolt-elements-textPrimary mb-2">Activity Summary</h5>
192
+ <div className="grid grid-cols-4 gap-4">
193
+ {[
194
+ {
195
+ label: 'Total Branches',
196
+ value: stats.totalBranches || 0,
197
+ icon: 'i-ph:git-branch',
198
+ iconColor: 'text-bolt-elements-icon-info',
199
+ },
200
+ {
201
+ label: 'Contributors',
202
+ value: stats.totalContributors || 0,
203
+ icon: 'i-ph:users',
204
+ iconColor: 'text-bolt-elements-icon-success',
205
+ },
206
+ {
207
+ label: 'Issues',
208
+ value: stats.totalIssues || 0,
209
+ icon: 'i-ph:circle',
210
+ iconColor: 'text-bolt-elements-icon-warning',
211
+ },
212
+ {
213
+ label: 'Pull Requests',
214
+ value: stats.totalPullRequests || 0,
215
+ icon: 'i-ph:git-pull-request',
216
+ iconColor: 'text-bolt-elements-icon-accent',
217
+ },
218
+ ].map((stat, index) => (
219
+ <div
220
+ key={index}
221
+ className="flex flex-col p-3 rounded-lg bg-bolt-elements-background-depth-2 dark:bg-bolt-elements-background-depth-2 border border-bolt-elements-borderColor dark:border-bolt-elements-borderColor"
222
+ >
223
+ <span className="text-xs text-bolt-elements-textSecondary">{stat.label}</span>
224
+ <span className="text-lg font-medium text-bolt-elements-textPrimary flex items-center gap-1">
225
+ <div className={`${stat.icon} w-4 h-4 ${stat.iconColor}`} />
226
+ {stat.value.toLocaleString()}
227
+ </span>
228
+ </div>
229
+ ))}
230
+ </div>
231
+ </div>
232
+
233
+ {/* Organizations Section */}
234
+ {stats.organizations && stats.organizations.length > 0 && (
235
+ <div>
236
+ <h5 className="text-sm font-medium text-bolt-elements-textPrimary mb-2">Organizations</h5>
237
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-3">
238
+ {stats.organizations.map((org) => (
239
+ <a
240
+ key={org.login}
241
+ href={org.html_url}
242
+ target="_blank"
243
+ rel="noopener noreferrer"
244
+ className="flex items-center gap-3 p-3 rounded-lg bg-bolt-elements-background-depth-2 dark:bg-bolt-elements-background-depth-2 border border-bolt-elements-borderColor dark:border-bolt-elements-borderColor hover:border-bolt-elements-borderColorActive dark:hover:border-bolt-elements-borderColorActive transition-all duration-200"
245
+ >
246
+ <img
247
+ src={org.avatar_url}
248
+ alt={org.login}
249
+ className="w-8 h-8 rounded-full border border-bolt-elements-borderColor"
250
+ />
251
+ <div className="flex-1 min-w-0">
252
+ <h6 className="text-sm font-medium text-bolt-elements-textPrimary truncate">
253
+ {org.name || org.login}
254
+ </h6>
255
+ <p className="text-xs text-bolt-elements-textSecondary truncate">{org.login}</p>
256
+ {org.description && (
257
+ <p className="text-xs text-bolt-elements-textTertiary truncate">{org.description}</p>
258
+ )}
259
+ </div>
260
+ <div className="flex items-center gap-2 text-xs text-bolt-elements-textSecondary">
261
+ {org.public_repos && (
262
+ <span className="flex items-center gap-1">
263
+ <div className="i-ph:folder w-3 h-3" />
264
+ {org.public_repos}
265
+ </span>
266
+ )}
267
+ {org.followers && (
268
+ <span className="flex items-center gap-1">
269
+ <div className="i-ph:users w-3 h-3" />
270
+ {org.followers}
271
+ </span>
272
+ )}
273
+ </div>
274
+ </a>
275
+ ))}
276
+ </div>
277
+ </div>
278
+ )}
279
+
280
+ {/* Last Updated */}
281
+ <div className="pt-2 border-t border-bolt-elements-borderColor">
282
+ <span className="text-xs text-bolt-elements-textSecondary">
283
+ Last updated: {stats.lastUpdated ? new Date(stats.lastUpdated).toLocaleString() : 'Never'}
284
+ </span>
285
+ </div>
286
+ </div>
287
+ </CollapsibleContent>
288
+ </Collapsible>
289
+ </div>
290
+ );
291
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import type { GitHubUserResponse } from '~/types/GitHub';
3
+
4
+ interface GitHubUserProfileProps {
5
+ user: GitHubUserResponse;
6
+ className?: string;
7
+ }
8
+
9
+ export function GitHubUserProfile({ user, className = '' }: GitHubUserProfileProps) {
10
+ return (
11
+ <div
12
+ className={`flex items-center gap-4 p-4 bg-bolt-elements-background-depth-1 dark:bg-bolt-elements-background-depth-1 rounded-lg ${className}`}
13
+ >
14
+ <img
15
+ src={user.avatar_url}
16
+ alt={user.login}
17
+ className="w-12 h-12 rounded-full border-2 border-bolt-elements-item-contentAccent dark:border-bolt-elements-item-contentAccent"
18
+ />
19
+ <div>
20
+ <h4 className="text-sm font-medium text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary">
21
+ {user.name || user.login}
22
+ </h4>
23
+ <p className="text-sm text-bolt-elements-textSecondary dark:text-bolt-elements-textSecondary">@{user.login}</p>
24
+ {user.bio && (
25
+ <p className="text-xs text-bolt-elements-textTertiary dark:text-bolt-elements-textTertiary mt-1">
26
+ {user.bio}
27
+ </p>
28
+ )}
29
+ <div className="flex items-center gap-4 mt-2 text-xs text-bolt-elements-textSecondary">
30
+ <span className="flex items-center gap-1">
31
+ <div className="i-ph:users w-3 h-3" />
32
+ {user.followers} followers
33
+ </span>
34
+ <span className="flex items-center gap-1">
35
+ <div className="i-ph:folder w-3 h-3" />
36
+ {user.public_repos} public repos
37
+ </span>
38
+ <span className="flex items-center gap-1">
39
+ <div className="i-ph:file-text w-3 h-3" />
40
+ {user.public_gists} gists
41
+ </span>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ );
46
+ }
@@ -0,0 +1,264 @@
1
+ import React from 'react';
2
+ import { Loader2, AlertCircle, CheckCircle, Info, Github } from 'lucide-react';
3
+ import { classNames } from '~/utils/classNames';
4
+
5
+ interface LoadingStateProps {
6
+ message?: string;
7
+ size?: 'sm' | 'md' | 'lg';
8
+ className?: string;
9
+ }
10
+
11
+ export function LoadingState({ message = 'Loading...', size = 'md', className = '' }: LoadingStateProps) {
12
+ const sizeClasses = {
13
+ sm: 'w-4 h-4',
14
+ md: 'w-6 h-6',
15
+ lg: 'w-8 h-8',
16
+ };
17
+
18
+ const textSizeClasses = {
19
+ sm: 'text-sm',
20
+ md: 'text-base',
21
+ lg: 'text-lg',
22
+ };
23
+
24
+ return (
25
+ <div
26
+ className={classNames(
27
+ 'flex flex-col items-center justify-center py-8 text-bolt-elements-textSecondary',
28
+ className,
29
+ )}
30
+ >
31
+ <Loader2 className={classNames('animate-spin mb-2', sizeClasses[size])} />
32
+ <p className={classNames('text-bolt-elements-textSecondary', textSizeClasses[size])}>{message}</p>
33
+ </div>
34
+ );
35
+ }
36
+
37
+ interface ErrorStateProps {
38
+ title?: string;
39
+ message: string;
40
+ onRetry?: () => void;
41
+ retryLabel?: string;
42
+ size?: 'sm' | 'md' | 'lg';
43
+ className?: string;
44
+ }
45
+
46
+ export function ErrorState({
47
+ title = 'Error',
48
+ message,
49
+ onRetry,
50
+ retryLabel = 'Try Again',
51
+ size = 'md',
52
+ className = '',
53
+ }: ErrorStateProps) {
54
+ const sizeClasses = {
55
+ sm: 'w-4 h-4',
56
+ md: 'w-6 h-6',
57
+ lg: 'w-8 h-8',
58
+ };
59
+
60
+ const textSizeClasses = {
61
+ sm: 'text-sm',
62
+ md: 'text-base',
63
+ lg: 'text-lg',
64
+ };
65
+
66
+ return (
67
+ <div className={classNames('flex flex-col items-center justify-center py-8 text-center', className)}>
68
+ <AlertCircle className={classNames('text-red-500 mb-2', sizeClasses[size])} />
69
+ <h3 className={classNames('font-medium text-bolt-elements-textPrimary mb-1', textSizeClasses[size])}>{title}</h3>
70
+ <p className={classNames('text-bolt-elements-textSecondary mb-4', textSizeClasses[size])}>{message}</p>
71
+ {onRetry && (
72
+ <button
73
+ onClick={onRetry}
74
+ className="px-4 py-2 bg-bolt-elements-item-contentAccent text-white rounded-lg hover:bg-bolt-elements-item-contentAccent/90 transition-colors"
75
+ >
76
+ {retryLabel}
77
+ </button>
78
+ )}
79
+ </div>
80
+ );
81
+ }
82
+
83
+ interface SuccessStateProps {
84
+ title?: string;
85
+ message: string;
86
+ onAction?: () => void;
87
+ actionLabel?: string;
88
+ size?: 'sm' | 'md' | 'lg';
89
+ className?: string;
90
+ }
91
+
92
+ export function SuccessState({
93
+ title = 'Success',
94
+ message,
95
+ onAction,
96
+ actionLabel = 'Continue',
97
+ size = 'md',
98
+ className = '',
99
+ }: SuccessStateProps) {
100
+ const sizeClasses = {
101
+ sm: 'w-4 h-4',
102
+ md: 'w-6 h-6',
103
+ lg: 'w-8 h-8',
104
+ };
105
+
106
+ const textSizeClasses = {
107
+ sm: 'text-sm',
108
+ md: 'text-base',
109
+ lg: 'text-lg',
110
+ };
111
+
112
+ return (
113
+ <div className={classNames('flex flex-col items-center justify-center py-8 text-center', className)}>
114
+ <CheckCircle className={classNames('text-green-500 mb-2', sizeClasses[size])} />
115
+ <h3 className={classNames('font-medium text-bolt-elements-textPrimary mb-1', textSizeClasses[size])}>{title}</h3>
116
+ <p className={classNames('text-bolt-elements-textSecondary mb-4', textSizeClasses[size])}>{message}</p>
117
+ {onAction && (
118
+ <button
119
+ onClick={onAction}
120
+ className="px-4 py-2 bg-bolt-elements-item-contentAccent text-white rounded-lg hover:bg-bolt-elements-item-contentAccent/90 transition-colors"
121
+ >
122
+ {actionLabel}
123
+ </button>
124
+ )}
125
+ </div>
126
+ );
127
+ }
128
+
129
+ interface GitHubConnectionRequiredProps {
130
+ onConnect?: () => void;
131
+ className?: string;
132
+ }
133
+
134
+ export function GitHubConnectionRequired({ onConnect, className = '' }: GitHubConnectionRequiredProps) {
135
+ return (
136
+ <div className={classNames('flex flex-col items-center justify-center py-12 text-center', className)}>
137
+ <Github className="w-12 h-12 text-bolt-elements-textTertiary mb-4" />
138
+ <h3 className="text-lg font-medium text-bolt-elements-textPrimary mb-2">GitHub Connection Required</h3>
139
+ <p className="text-sm text-bolt-elements-textSecondary mb-6 max-w-md">
140
+ Please connect your GitHub account to access this feature. You'll be able to browse repositories, push code, and
141
+ manage your GitHub integration.
142
+ </p>
143
+ {onConnect && (
144
+ <button
145
+ onClick={onConnect}
146
+ className="px-6 py-3 bg-bolt-elements-item-contentAccent text-white rounded-lg hover:bg-bolt-elements-item-contentAccent/90 transition-colors flex items-center gap-2"
147
+ >
148
+ <Github className="w-4 h-4" />
149
+ Connect GitHub
150
+ </button>
151
+ )}
152
+ </div>
153
+ );
154
+ }
155
+
156
+ interface InformationStateProps {
157
+ title: string;
158
+ message: string;
159
+ icon?: React.ComponentType<{ className?: string }>;
160
+ onAction?: () => void;
161
+ actionLabel?: string;
162
+ size?: 'sm' | 'md' | 'lg';
163
+ className?: string;
164
+ }
165
+
166
+ export function InformationState({
167
+ title,
168
+ message,
169
+ icon = Info,
170
+ onAction,
171
+ actionLabel = 'Got it',
172
+ size = 'md',
173
+ className = '',
174
+ }: InformationStateProps) {
175
+ const sizeClasses = {
176
+ sm: 'w-4 h-4',
177
+ md: 'w-6 h-6',
178
+ lg: 'w-8 h-8',
179
+ };
180
+
181
+ const textSizeClasses = {
182
+ sm: 'text-sm',
183
+ md: 'text-base',
184
+ lg: 'text-lg',
185
+ };
186
+
187
+ return (
188
+ <div className={classNames('flex flex-col items-center justify-center py-8 text-center', className)}>
189
+ {React.createElement(icon, { className: classNames('text-blue-500 mb-2', sizeClasses[size]) })}
190
+ <h3 className={classNames('font-medium text-bolt-elements-textPrimary mb-1', textSizeClasses[size])}>{title}</h3>
191
+ <p className={classNames('text-bolt-elements-textSecondary mb-4', textSizeClasses[size])}>{message}</p>
192
+ {onAction && (
193
+ <button
194
+ onClick={onAction}
195
+ className="px-4 py-2 bg-bolt-elements-item-contentAccent text-white rounded-lg hover:bg-bolt-elements-item-contentAccent/90 transition-colors"
196
+ >
197
+ {actionLabel}
198
+ </button>
199
+ )}
200
+ </div>
201
+ );
202
+ }
203
+
204
+ interface ConnectionTestIndicatorProps {
205
+ status: 'success' | 'error' | 'testing' | null;
206
+ message?: string;
207
+ timestamp?: number;
208
+ className?: string;
209
+ }
210
+
211
+ export function ConnectionTestIndicator({ status, message, timestamp, className = '' }: ConnectionTestIndicatorProps) {
212
+ if (!status) {
213
+ return null;
214
+ }
215
+
216
+ const getStatusColor = () => {
217
+ switch (status) {
218
+ case 'success':
219
+ return 'bg-green-50 border-green-200 dark:bg-green-900/20 dark:border-green-700';
220
+ case 'error':
221
+ return 'bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-700';
222
+ case 'testing':
223
+ return 'bg-blue-50 border-blue-200 dark:bg-blue-900/20 dark:border-blue-700';
224
+ default:
225
+ return 'bg-gray-50 border-gray-200 dark:bg-gray-900/20 dark:border-gray-700';
226
+ }
227
+ };
228
+
229
+ const getStatusIcon = () => {
230
+ switch (status) {
231
+ case 'success':
232
+ return <CheckCircle className="w-5 h-5 text-green-600 dark:text-green-400" />;
233
+ case 'error':
234
+ return <AlertCircle className="w-5 h-5 text-red-600 dark:text-red-400" />;
235
+ case 'testing':
236
+ return <Loader2 className="w-5 h-5 animate-spin text-blue-600 dark:text-blue-400" />;
237
+ default:
238
+ return <Info className="w-5 h-5 text-gray-600 dark:text-gray-400" />;
239
+ }
240
+ };
241
+
242
+ const getStatusTextColor = () => {
243
+ switch (status) {
244
+ case 'success':
245
+ return 'text-green-800 dark:text-green-200';
246
+ case 'error':
247
+ return 'text-red-800 dark:text-red-200';
248
+ case 'testing':
249
+ return 'text-blue-800 dark:text-blue-200';
250
+ default:
251
+ return 'text-gray-800 dark:text-gray-200';
252
+ }
253
+ };
254
+
255
+ return (
256
+ <div className={classNames(`p-4 rounded-lg border ${getStatusColor()}`, className)}>
257
+ <div className="flex items-center gap-2">
258
+ {getStatusIcon()}
259
+ <span className={classNames('text-sm font-medium', getStatusTextColor())}>{message || status}</span>
260
+ </div>
261
+ {timestamp && <p className="text-xs text-gray-500 mt-1">{new Date(timestamp).toLocaleString()}</p>}
262
+ </div>
263
+ );
264
+ }