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,155 @@
1
+ # Fix Docker Credential Helper for Rancher Desktop
2
+ # This script removes the problematic credential helper from Docker config
3
+
4
+ $dockerConfigPath = "$env:USERPROFILE\.docker\config.json"
5
+ $separator = "============================================================"
6
+
7
+ Write-Host "`nFixing Docker credential helper for Rancher Desktop..." -ForegroundColor Cyan
8
+ Write-Host $separator -ForegroundColor Cyan
9
+
10
+ # Check if Docker is available
11
+ Write-Host "`nChecking Docker availability..." -ForegroundColor Yellow
12
+ try {
13
+ $dockerVersion = docker --version 2>&1
14
+ if ($LASTEXITCODE -eq 0) {
15
+ Write-Host "SUCCESS: Docker found: $dockerVersion" -ForegroundColor Green
16
+ } else {
17
+ Write-Host "WARNING: Docker command returned error" -ForegroundColor Yellow
18
+ }
19
+ } catch {
20
+ Write-Host "ERROR: Docker not found in PATH. Please ensure Rancher Desktop is installed." -ForegroundColor Red
21
+ exit 1
22
+ }
23
+
24
+ # Check if Docker daemon is running
25
+ Write-Host "`nChecking Docker daemon..." -ForegroundColor Yellow
26
+ try {
27
+ $dockerInfo = docker info 2>&1
28
+ if ($LASTEXITCODE -eq 0) {
29
+ if ($dockerInfo -match "rancher|moby") {
30
+ Write-Host "SUCCESS: Rancher Desktop detected and running" -ForegroundColor Green
31
+ } else {
32
+ Write-Host "SUCCESS: Docker daemon is running" -ForegroundColor Green
33
+ }
34
+ } else {
35
+ Write-Host "ERROR: Docker daemon is not running. Please start Rancher Desktop." -ForegroundColor Red
36
+ exit 1
37
+ }
38
+ } catch {
39
+ Write-Host "ERROR: Cannot connect to Docker daemon. Please start Rancher Desktop." -ForegroundColor Red
40
+ exit 1
41
+ }
42
+
43
+ # Fix credential helper
44
+ Write-Host "`nChecking Docker config..." -ForegroundColor Yellow
45
+
46
+ if (Test-Path $dockerConfigPath) {
47
+ Write-Host "Found Docker config at: $dockerConfigPath" -ForegroundColor Yellow
48
+
49
+ try {
50
+ $configContent = Get-Content $dockerConfigPath -Raw
51
+ $config = $configContent | ConvertFrom-Json
52
+
53
+ if ($config.PSObject.Properties.Name -contains "credsStore") {
54
+ $credsStoreValue = $config.credsStore
55
+ Write-Host "WARNING: Found credential helper: $credsStoreValue" -ForegroundColor Yellow
56
+ Write-Host "Removing credential helper..." -ForegroundColor Yellow
57
+
58
+ # Backup original
59
+ $backupPath = "$dockerConfigPath.backup.$(Get-Date -Format 'yyyyMMdd-HHmmss')"
60
+ Copy-Item $dockerConfigPath $backupPath -Force
61
+ Write-Host "SUCCESS: Backup saved to: $backupPath" -ForegroundColor Green
62
+
63
+ # Remove credsStore
64
+ $config.PSObject.Properties.Remove('credsStore')
65
+
66
+ # Save updated config with proper formatting
67
+ # Use -Compress to avoid formatting issues, then format manually for readability
68
+ $updatedConfig = $config | ConvertTo-Json -Depth 10 -Compress
69
+ $formattedConfig = $updatedConfig | ConvertFrom-Json | ConvertTo-Json -Depth 10
70
+
71
+ # Write with UTF8NoBOM to avoid BOM issues that can break JSON parsing
72
+ $utf8NoBom = New-Object System.Text.UTF8Encoding $false
73
+ [System.IO.File]::WriteAllText($dockerConfigPath, $formattedConfig, $utf8NoBom)
74
+
75
+ # Verify the written file is valid JSON
76
+ try {
77
+ $verifyConfig = Get-Content $dockerConfigPath -Raw | ConvertFrom-Json
78
+ Write-Host "SUCCESS: Credential helper removed successfully!" -ForegroundColor Green
79
+ } catch {
80
+ Write-Host "ERROR: Written config is invalid JSON. Restoring backup..." -ForegroundColor Red
81
+ Copy-Item $backupPath $dockerConfigPath -Force
82
+ Write-Host "ERROR: Failed to fix config. Please edit manually." -ForegroundColor Red
83
+ exit 1
84
+ }
85
+ } else {
86
+ Write-Host "SUCCESS: No credential helper found - config looks good!" -ForegroundColor Green
87
+ }
88
+ } catch {
89
+ Write-Host "ERROR: Error processing config: $_" -ForegroundColor Red
90
+ Write-Host "TIP: You can manually edit: $dockerConfigPath" -ForegroundColor Yellow
91
+ Write-Host " Remove the line: `"credsStore`": `"wincred`"" -ForegroundColor Yellow
92
+ exit 1
93
+ }
94
+ } else {
95
+ Write-Host "Docker config not found at: $dockerConfigPath" -ForegroundColor Yellow
96
+ Write-Host "Creating new config without credential helper..." -ForegroundColor Cyan
97
+
98
+ $dockerDir = Split-Path $dockerConfigPath
99
+ if (-not (Test-Path $dockerDir)) {
100
+ New-Item -ItemType Directory -Path $dockerDir -Force | Out-Null
101
+ }
102
+
103
+ $newConfig = @{
104
+ auths = @{}
105
+ } | ConvertTo-Json -Depth 10
106
+
107
+ # Write with UTF8NoBOM to avoid BOM issues
108
+ $utf8NoBom = New-Object System.Text.UTF8Encoding $false
109
+ [System.IO.File]::WriteAllText($dockerConfigPath, $newConfig, $utf8NoBom)
110
+
111
+ # Verify the written file is valid JSON
112
+ try {
113
+ $verifyConfig = Get-Content $dockerConfigPath -Raw | ConvertFrom-Json
114
+ Write-Host "SUCCESS: Created new Docker config without credential helper!" -ForegroundColor Green
115
+ } catch {
116
+ Write-Host "ERROR: Created config is invalid JSON." -ForegroundColor Red
117
+ exit 1
118
+ }
119
+ }
120
+
121
+ # Verify the fix
122
+ Write-Host "`nVerifying fix..." -ForegroundColor Yellow
123
+ try {
124
+ $testConfig = Get-Content $dockerConfigPath -Raw | ConvertFrom-Json
125
+ if ($testConfig.PSObject.Properties.Name -contains "credsStore") {
126
+ Write-Host "ERROR: Credential helper still present!" -ForegroundColor Red
127
+ exit 1
128
+ } else {
129
+ Write-Host "SUCCESS: Config verified - no credential helper found" -ForegroundColor Green
130
+ Write-Host "SUCCESS: JSON is valid and properly formatted" -ForegroundColor Green
131
+ }
132
+ } catch {
133
+ Write-Host "ERROR: Config file is invalid JSON: $_" -ForegroundColor Red
134
+ Write-Host "Attempting to restore from backup..." -ForegroundColor Yellow
135
+ $backupFiles = Get-ChildItem "$dockerConfigPath.backup.*" | Sort-Object LastWriteTime -Descending
136
+ if ($backupFiles) {
137
+ $latestBackup = $backupFiles[0].FullName
138
+ Copy-Item $latestBackup $dockerConfigPath -Force
139
+ Write-Host "SUCCESS: Restored from backup: $latestBackup" -ForegroundColor Green
140
+ Write-Host "Please restart Rancher Desktop and try again." -ForegroundColor Yellow
141
+ } else {
142
+ Write-Host "ERROR: No backup found. Please manually fix the config file." -ForegroundColor Red
143
+ }
144
+ exit 1
145
+ }
146
+
147
+ Write-Host "`n$separator" -ForegroundColor Cyan
148
+ Write-Host "Next steps:" -ForegroundColor Cyan
149
+ Write-Host " 1. Restart Rancher Desktop (if it was running)" -ForegroundColor White
150
+ Write-Host " 2. Verify: docker info" -ForegroundColor White
151
+ Write-Host " 3. Test: docker compose version" -ForegroundColor White
152
+ Write-Host " 4. Run the daemon: python corposwarm.py --daemon --verbose" -ForegroundColor White
153
+ $message = "`nSUCCESS: Fix complete! You can now use bolt.diy with Rancher Desktop."
154
+ Write-Host $message -ForegroundColor Green
155
+
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "wrangler": "^4.54.0"
4
+ }
5
+ }
@@ -0,0 +1,446 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Bolt.diy Integration Test
4
+
5
+ This test file specifically tests the integration between CorporateSwarm and bolt.diy.
6
+ It checks bolt.diy health, starts it if needed, and forces a mandate execution.
7
+
8
+ Requirements:
9
+ - bolt.diy should be running at http://localhost:5173 (or set BOLT_DIY_API_URL)
10
+ - CorporateSwarm should be able to submit mandates to bolt.diy
11
+ """
12
+
13
+ import sys
14
+ import os
15
+ import time
16
+ import requests
17
+ from typing import Optional
18
+
19
+ # Add current directory to path
20
+ sys.path.insert(0, os.path.dirname(__file__))
21
+
22
+ from corposwarm import (
23
+ create_corporation,
24
+ CorporateSwarm,
25
+ CorporateRole,
26
+ DepartmentType,
27
+ ProposalType
28
+ )
29
+
30
+
31
+ def check_bolt_diy_health(url: str = "http://localhost:5173", timeout: int = 5) -> bool:
32
+ """
33
+ Check if bolt.diy is running and reachable.
34
+
35
+ Args:
36
+ url: bolt.diy API URL
37
+ timeout: Request timeout in seconds
38
+
39
+ Returns:
40
+ bool: True if bolt.diy is reachable, False otherwise
41
+ """
42
+ try:
43
+ health_url = url.rstrip('/') + "/api/health"
44
+ response = requests.get(health_url, timeout=timeout)
45
+ if response.status_code == 200:
46
+ try:
47
+ data = response.json()
48
+ if data.get("status") == "healthy":
49
+ return True
50
+ except (ValueError, KeyError):
51
+ # Response is not JSON or missing status field, but 200 OK - still ready
52
+ pass
53
+ return True # Any 200 response means the server is ready
54
+ return False
55
+ except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
56
+ return False
57
+ except Exception as e:
58
+ print(f"[WARN] Error checking bolt.diy health: {e}")
59
+ return False
60
+
61
+
62
+ def ensure_bolt_diy_ready(url: str = "http://localhost:5173", max_wait: int = 60) -> bool:
63
+ """
64
+ Ensure bolt.diy is ready, waiting up to max_wait seconds.
65
+
66
+ Args:
67
+ url: bolt.diy API URL
68
+ max_wait: Maximum time to wait in seconds
69
+
70
+ Returns:
71
+ bool: True if bolt.diy is ready, False otherwise
72
+ """
73
+ start_time = time.time()
74
+ check_interval = 2 # Check every 2 seconds
75
+
76
+ print(f"Waiting for bolt.diy to be ready at {url}...")
77
+
78
+ while time.time() - start_time < max_wait:
79
+ if check_bolt_diy_health(url):
80
+ print(f"[OK] bolt.diy is ready at {url}")
81
+ return True
82
+ elapsed = int(time.time() - start_time)
83
+ print(f"[WAIT] bolt.diy not ready yet... ({elapsed}s/{max_wait}s)")
84
+ time.sleep(check_interval)
85
+
86
+ print(f"[ERROR] bolt.diy not ready after {max_wait} seconds")
87
+ return False
88
+
89
+
90
+ def test_bolt_diy_health():
91
+ """Test 1: Check bolt.diy health endpoint."""
92
+ print("\n" + "="*80)
93
+ print("TEST 1: Bolt.diy Health Check")
94
+ print("="*80)
95
+
96
+ bolt_diy_url = os.getenv("BOLT_DIY_API_URL", "http://localhost:5173")
97
+
98
+ if check_bolt_diy_health(bolt_diy_url):
99
+ print(f"[PASS] bolt.diy is healthy at {bolt_diy_url}")
100
+ return True
101
+ else:
102
+ print(f"[FAIL] bolt.diy is not reachable at {bolt_diy_url}")
103
+ print(f"[INFO] Make sure bolt.diy is running. You can start it with:")
104
+ print(f" cd CR-CA/tools/bolt.diy && npm run dev")
105
+ return False
106
+
107
+
108
+ def wait_for_mandate_execution(bolt_diy_url: str, mandate_id: str, max_wait: int = 300) -> dict:
109
+ """
110
+ Wait for a mandate to complete execution and return execution results.
111
+
112
+ Args:
113
+ bolt_diy_url: bolt.diy API URL
114
+ mandate_id: Mandate ID to wait for
115
+ max_wait: Maximum time to wait in seconds (default: 5 minutes)
116
+
117
+ Returns:
118
+ dict: Execution results with status, events, and generated files
119
+ """
120
+ start_time = time.time()
121
+ check_interval = 3 # Check every 3 seconds
122
+
123
+ print(f"[INFO] Waiting for mandate {mandate_id} to execute (max {max_wait}s)...")
124
+
125
+ last_status = "accepted"
126
+ events = []
127
+ generated_files = []
128
+
129
+ while time.time() - start_time < max_wait:
130
+ try:
131
+ # Check mandate events
132
+ events_url = f"{bolt_diy_url.rstrip('/')}/api/mandate?mandate_id={mandate_id}"
133
+ response = requests.get(events_url, timeout=5)
134
+
135
+ if response.status_code == 200:
136
+ data = response.json()
137
+ events = data.get("events", [])
138
+
139
+ # Check for completion events
140
+ for event in events:
141
+ event_type = event.get("type", "")
142
+
143
+ if event_type == "iteration_end":
144
+ last_status = "completed"
145
+ # Extract generated files from event data
146
+ event_data = event.get("data", {})
147
+ if "files_created" in event_data:
148
+ generated_files.extend(event_data["files_created"])
149
+ if "files_modified" in event_data:
150
+ generated_files.extend(event_data["files_modified"])
151
+ elif event_type == "error":
152
+ last_status = "failed"
153
+ elif event_type == "iteration_start":
154
+ last_status = "running"
155
+
156
+ # Check if we have a completion event
157
+ if last_status == "completed":
158
+ print(f"[INFO] Mandate execution completed!")
159
+ return {
160
+ "status": "completed",
161
+ "events": events,
162
+ "generated_files": list(set(generated_files)), # Remove duplicates
163
+ "event_count": len(events)
164
+ }
165
+ elif last_status == "failed":
166
+ error_msg = "Unknown error"
167
+ for event in events:
168
+ if event.get("type") == "error":
169
+ error_msg = event.get("data", {}).get("message", error_msg)
170
+ print(f"[INFO] Mandate execution failed: {error_msg}")
171
+ return {
172
+ "status": "failed",
173
+ "events": events,
174
+ "error": error_msg
175
+ }
176
+ except Exception as e:
177
+ print(f"[WARN] Error checking mandate status: {e}")
178
+
179
+ elapsed = int(time.time() - start_time)
180
+ if elapsed % 15 == 0: # Print status every 15 seconds
181
+ print(f"[WAIT] Still executing... ({elapsed}s/{max_wait}s, {len(events)} events)")
182
+
183
+ time.sleep(check_interval)
184
+
185
+ print(f"[WARN] Mandate execution did not complete within {max_wait} seconds")
186
+ return {
187
+ "status": "timeout",
188
+ "events": events,
189
+ "generated_files": list(set(generated_files))
190
+ }
191
+
192
+
193
+ def test_mandate_submission():
194
+ """Test 2: Submit a mandate to bolt.diy and wait for code generation."""
195
+ print("\n" + "="*80)
196
+ print("TEST 2: Mandate Submission & Code Generation")
197
+ print("="*80)
198
+
199
+ bolt_diy_url = os.getenv("BOLT_DIY_API_URL", "http://localhost:5173")
200
+
201
+ # Ensure bolt.diy is ready
202
+ if not ensure_bolt_diy_ready(bolt_diy_url, max_wait=30):
203
+ print("[SKIP] Skipping mandate submission test - bolt.diy not available")
204
+ return False
205
+
206
+ # Create a corporation
207
+ print("[INFO] Creating corporation...")
208
+ corp = create_corporation(
209
+ name="BoltIntegrationTestCorp",
210
+ verbose=True,
211
+ budget_limit=200.0,
212
+ auto_deploy_enabled=False,
213
+ auto_test_enabled=True
214
+ )
215
+
216
+ # Create a proposal that will become a mandate
217
+ print("[INFO] Creating code-related proposal...")
218
+ sponsor_id = corp.executive_team[0] if corp.executive_team else corp.board_members[0]
219
+
220
+ proposal_id = corp.create_proposal(
221
+ title="Build Simple Todo App - Bolt Integration Test",
222
+ description=(
223
+ "Create a simple HTML/CSS/JavaScript todo application. "
224
+ "Features: add todos, mark as complete, delete todos. "
225
+ "This is a test mandate to verify bolt.diy integration. "
226
+ "Revenue-generating project for lead generation."
227
+ ),
228
+ proposal_type=ProposalType.STRATEGIC_INITIATIVE,
229
+ sponsor_id=sponsor_id,
230
+ department=DepartmentType.TECHNOLOGY,
231
+ budget_impact=15.0,
232
+ timeline="1 day"
233
+ )
234
+
235
+ print(f"[INFO] Created proposal: {proposal_id}")
236
+
237
+ # Execute the mandate directly
238
+ print("[INFO] Creating and executing mandate...")
239
+
240
+ mandate = {
241
+ "mandate_id": f"bolt-test-mandate-{int(time.time())}",
242
+ "objectives": [
243
+ "Create a simple HTML todo application",
244
+ "Add functionality to add, delete, and mark todos as complete",
245
+ "Style with basic CSS",
246
+ "Make it revenue-focused with lead generation features"
247
+ ],
248
+ "constraints": {
249
+ "language": "html",
250
+ "maxDependencies": 0,
251
+ "no_frameworks": True
252
+ },
253
+ "budget": {
254
+ "token": 50000,
255
+ "time": 300,
256
+ "cost": 2.0
257
+ },
258
+ "deliverables": [
259
+ "index.html",
260
+ "style.css",
261
+ "script.js"
262
+ ],
263
+ "governance": {
264
+ "proposal_id": proposal_id
265
+ },
266
+ "iteration_config": {
267
+ "max_iterations": 2,
268
+ "test_required": False
269
+ },
270
+ "deployment": {
271
+ "enabled": False,
272
+ "provider": "netlify",
273
+ "auto_deploy": False
274
+ },
275
+ "testing": {
276
+ "enabled": False,
277
+ "generate_tests": False,
278
+ "run_tests": False
279
+ }
280
+ }
281
+
282
+ # Execute mandate (this will make real HTTP calls and open browser windows)
283
+ print(f"[INFO] Submitting mandate {mandate['mandate_id']} to bolt.diy...")
284
+ result = corp.execute_code_mandate(mandate, proposal_id=proposal_id)
285
+
286
+ if result is None:
287
+ print("[FAIL] Mandate execution returned None")
288
+ return False
289
+
290
+ print(f"[INFO] Mandate execution result: {result.get('status')}")
291
+
292
+ if result.get("status") == "accepted":
293
+ mandate_id = result.get("mandate_id") or mandate["mandate_id"]
294
+ print(f"[PASS] Mandate accepted by bolt.diy!")
295
+ print(f"[INFO] Mandate ID: {mandate_id}")
296
+ print(f"[INFO] Observability: {bolt_diy_url}/observability/{mandate_id}")
297
+ print(f"[INFO] Execute: {bolt_diy_url}/execute/{mandate_id}")
298
+ print(f"[INFO] Workflow: {bolt_diy_url}/workflow/{proposal_id}")
299
+ print(f"[INFO] Home page: {bolt_diy_url}/")
300
+ print(f"[INFO] Browser windows should have opened automatically")
301
+ print(f"[INFO] Waiting for code generation to complete...")
302
+
303
+ # Wait for execution to complete
304
+ execution_result = wait_for_mandate_execution(bolt_diy_url, mandate_id, max_wait=300)
305
+
306
+ if execution_result["status"] == "completed":
307
+ generated_files = execution_result.get("generated_files", [])
308
+ event_count = execution_result.get("event_count", 0)
309
+
310
+ print(f"[PASS] Code generation completed successfully!")
311
+ print(f"[INFO] Generated {len(generated_files)} file(s):")
312
+ for file in generated_files:
313
+ print(f" - {file}")
314
+ print(f"[INFO] Total events: {event_count}")
315
+ print(f"[INFO] View generated code at: {bolt_diy_url}/observability/{mandate_id}")
316
+ return True
317
+ elif execution_result["status"] == "failed":
318
+ error = execution_result.get("error", "Unknown error")
319
+ print(f"[FAIL] Code generation failed: {error}")
320
+ return False
321
+ elif execution_result["status"] == "timeout":
322
+ generated_files = execution_result.get("generated_files", [])
323
+ print(f"[WARN] Code generation did not complete within timeout")
324
+ if generated_files:
325
+ print(f"[INFO] Partial files generated: {', '.join(generated_files)}")
326
+ print(f"[INFO] Check execution status manually at: {bolt_diy_url}/observability/{mandate_id}")
327
+ return False
328
+ else:
329
+ print(f"[WARN] Unknown execution status: {execution_result.get('status')}")
330
+ return False
331
+ elif result.get("status") == "completed":
332
+ print(f"[PASS] Mandate completed!")
333
+ return True
334
+ elif result.get("status") == "failed":
335
+ error = result.get("error", "Unknown error")
336
+ print(f"[FAIL] Mandate execution failed: {error}")
337
+ return False
338
+ else:
339
+ print(f"[WARN] Unknown mandate status: {result.get('status')}")
340
+ return True # Still consider it a pass if we got a response
341
+
342
+
343
+ def test_mandate_status_checking():
344
+ """Test 3: Check mandate status after submission."""
345
+ print("\n" + "="*80)
346
+ print("TEST 3: Mandate Status Checking")
347
+ print("="*80)
348
+
349
+ bolt_diy_url = os.getenv("BOLT_DIY_API_URL", "http://localhost:5173")
350
+
351
+ # Ensure bolt.diy is ready
352
+ if not ensure_bolt_diy_ready(bolt_diy_url, max_wait=10):
353
+ print("[SKIP] Skipping status check test - bolt.diy not available")
354
+ return False
355
+
356
+ # Create corporation and submit a mandate
357
+ corp = create_corporation(
358
+ name="StatusCheckCorp",
359
+ verbose=False,
360
+ budget_limit=100.0
361
+ )
362
+
363
+ mandate = {
364
+ "mandate_id": f"status-test-{int(time.time())}",
365
+ "objectives": ["Test status checking"],
366
+ "constraints": {"language": "html", "maxDependencies": 0},
367
+ "budget": {"token": 10000, "time": 60, "cost": 0.5},
368
+ "deliverables": ["test.html"],
369
+ "governance": {"proposal_id": "test-proposal"},
370
+ "iteration_config": {"max_iterations": 1, "test_required": False},
371
+ "deployment": {"enabled": False},
372
+ "testing": {"enabled": False}
373
+ }
374
+
375
+ # Submit mandate
376
+ result = corp.execute_code_mandate(mandate, proposal_id="test-proposal")
377
+
378
+ if result and result.get("status") == "accepted":
379
+ mandate_id = result.get("mandate_id") or mandate["mandate_id"]
380
+
381
+ # Wait a bit for execution to start
382
+ print(f"[INFO] Waiting 3 seconds for execution to start...")
383
+ time.sleep(3)
384
+
385
+ # Check status
386
+ status = corp.check_mandate_status(mandate_id, bolt_diy_url)
387
+
388
+ print(f"[INFO] Mandate status: {status}")
389
+
390
+ if status in ["accepted", "running", "completed"]:
391
+ print(f"[PASS] Status check working (status: {status})")
392
+ return True
393
+ else:
394
+ print(f"[WARN] Unexpected status: {status}")
395
+ return True # Still pass, status checking is working
396
+ else:
397
+ print(f"[SKIP] Could not submit mandate for status check")
398
+ return False
399
+
400
+
401
+ def run_all_tests():
402
+ """Run all bolt.diy integration tests."""
403
+ print("\n" + "="*80)
404
+ print("Bolt.diy Integration Test Suite")
405
+ print("="*80)
406
+
407
+ tests = [
408
+ ("Bolt.diy Health Check", test_bolt_diy_health),
409
+ ("Mandate Submission", test_mandate_submission),
410
+ ("Mandate Status Checking", test_mandate_status_checking),
411
+ ]
412
+
413
+ results = []
414
+
415
+ for test_name, test_func in tests:
416
+ try:
417
+ result = test_func()
418
+ results.append((test_name, result))
419
+ except Exception as e:
420
+ print(f"[ERROR] {test_name} raised exception: {e}")
421
+ import traceback
422
+ traceback.print_exc()
423
+ results.append((test_name, False))
424
+
425
+ # Print summary
426
+ print("\n" + "="*80)
427
+ print("TEST SUMMARY")
428
+ print("="*80)
429
+
430
+ passed = sum(1 for _, result in results if result)
431
+ total = len(results)
432
+
433
+ for test_name, result in results:
434
+ status = "[PASS]" if result else "[FAIL]"
435
+ print(f"{status} {test_name}")
436
+
437
+ print(f"\nTotal: {passed}/{total} tests passed")
438
+ print("="*80 + "\n")
439
+
440
+ return passed == total
441
+
442
+
443
+ if __name__ == "__main__":
444
+ success = run_all_tests()
445
+ sys.exit(0 if success else 1)
446
+