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,240 @@
1
+ #!/bin/bash
2
+
3
+ # GitHub Workflow Testing Script
4
+ # This script helps you test the new workflows safely
5
+
6
+ set -e
7
+
8
+ # Colors for output
9
+ RED='\033[0;31m'
10
+ GREEN='\033[0;32m'
11
+ YELLOW='\033[1;33m'
12
+ BLUE='\033[0;34m'
13
+ NC='\033[0m' # No Color
14
+
15
+ # Function to print colored output
16
+ print_status() {
17
+ echo -e "${BLUE}[INFO]${NC} $1"
18
+ }
19
+
20
+ print_success() {
21
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
22
+ }
23
+
24
+ print_warning() {
25
+ echo -e "${YELLOW}[WARNING]${NC} $1"
26
+ }
27
+
28
+ print_error() {
29
+ echo -e "${RED}[ERROR]${NC} $1"
30
+ }
31
+
32
+ # Check if GitHub CLI is installed
33
+ check_gh_cli() {
34
+ if ! command -v gh &> /dev/null; then
35
+ print_error "GitHub CLI (gh) is not installed. Please install it first."
36
+ echo "Visit: https://cli.github.com/"
37
+ exit 1
38
+ fi
39
+ print_success "GitHub CLI is installed"
40
+ }
41
+
42
+ # Check if user is authenticated
43
+ check_auth() {
44
+ if ! gh auth status &> /dev/null; then
45
+ print_error "Not authenticated with GitHub. Please run: gh auth login"
46
+ exit 1
47
+ fi
48
+ print_success "Authenticated with GitHub"
49
+ }
50
+
51
+ # Create test branch
52
+ create_test_branch() {
53
+ print_status "Creating test branch 'workflow-testing'..."
54
+
55
+ if git show-branch workflow-testing &> /dev/null; then
56
+ print_warning "Branch 'workflow-testing' already exists. Switching to it..."
57
+ git checkout workflow-testing
58
+ else
59
+ git checkout -b workflow-testing
60
+ git push -u origin workflow-testing
61
+ print_success "Created and pushed test branch"
62
+ fi
63
+ }
64
+
65
+ # Run specific test type
66
+ run_test() {
67
+ local test_type=$1
68
+ print_status "Running workflow test: $test_type"
69
+
70
+ gh workflow run "Test Workflows" \
71
+ --ref workflow-testing \
72
+ -f test_type="$test_type"
73
+
74
+ print_success "Triggered workflow test: $test_type"
75
+ print_status "Monitor progress at: https://github.com/$(gh repo view --json owner,name -q '.owner.login + "/" + .name')/actions"
76
+ }
77
+
78
+ # Monitor latest workflow run
79
+ monitor_run() {
80
+ print_status "Finding latest workflow run..."
81
+
82
+ local run_id=$(gh run list --workflow="Test Workflows" --limit=1 --json databaseId -q '.[0].databaseId')
83
+
84
+ if [ -n "$run_id" ]; then
85
+ print_status "Monitoring run ID: $run_id"
86
+ gh run watch "$run_id"
87
+ else
88
+ print_warning "No workflow runs found. Did you trigger a test?"
89
+ fi
90
+ }
91
+
92
+ # Create test PR
93
+ create_test_pr() {
94
+ print_status "Creating test PR..."
95
+
96
+ # Make a small change to trigger workflows
97
+ echo "# Workflow Testing - $(date)" >> WORKFLOW_TESTING.md
98
+ git add WORKFLOW_TESTING.md
99
+ git commit -m "test: trigger workflow validation"
100
+ git push origin workflow-testing
101
+
102
+ # Create PR
103
+ gh pr create \
104
+ --title "Test: Workflow Validation - $(date +%Y-%m-%d)" \
105
+ --body "🧪 **This is a test PR for workflow validation - DO NOT MERGE**
106
+
107
+ This PR tests:
108
+ - [x] PR validation workflows
109
+ - [x] Quality gates
110
+ - [x] Security scanning
111
+ - [x] Preview deployment
112
+ - [x] Semantic PR validation
113
+
114
+ **Testing checklist:**
115
+ - [ ] All workflows complete successfully
116
+ - [ ] Quality gates pass
117
+ - [ ] Security scans complete
118
+ - [ ] Preview deployment works
119
+ - [ ] No errors in workflow logs
120
+
121
+ **Next steps:**
122
+ 1. Monitor workflow execution
123
+ 2. Verify all checks pass
124
+ 3. Test any failing workflows
125
+ 4. Close this PR when testing is complete" \
126
+ --draft
127
+
128
+ print_success "Created test PR (draft)"
129
+ }
130
+
131
+ # Clean up test resources
132
+ cleanup() {
133
+ print_status "Cleaning up test resources..."
134
+
135
+ # Close any open test PRs
136
+ local test_prs=$(gh pr list --state=open --search="Test: Workflow Validation" --json number -q '.[].number')
137
+
138
+ for pr in $test_prs; do
139
+ print_status "Closing test PR #$pr"
140
+ gh pr close "$pr" --comment "Workflow testing completed - closing test PR"
141
+ done
142
+
143
+ # Switch back to main branch
144
+ git checkout main
145
+
146
+ print_warning "Test branch 'workflow-testing' preserved for future testing"
147
+ print_success "Cleanup completed"
148
+ }
149
+
150
+ # Main menu
151
+ show_menu() {
152
+ echo
153
+ echo "🧪 GitHub Workflow Testing Script"
154
+ echo "=================================="
155
+ echo
156
+ echo "Select an option:"
157
+ echo "1) Test all workflows"
158
+ echo "2) Test CI/CD only"
159
+ echo "3) Test security scanning only"
160
+ echo "4) Test quality checks only"
161
+ echo "5) Create test PR"
162
+ echo "6) Monitor latest workflow run"
163
+ echo "7) Cleanup test resources"
164
+ echo "8) View workflow testing guide"
165
+ echo "9) Exit"
166
+ echo
167
+ }
168
+
169
+ # View testing guide
170
+ view_guide() {
171
+ if [ -f "WORKFLOW_TESTING.md" ]; then
172
+ print_status "Opening workflow testing guide..."
173
+ if command -v bat &> /dev/null; then
174
+ bat WORKFLOW_TESTING.md
175
+ elif command -v less &> /dev/null; then
176
+ less WORKFLOW_TESTING.md
177
+ else
178
+ cat WORKFLOW_TESTING.md
179
+ fi
180
+ else
181
+ print_error "WORKFLOW_TESTING.md not found in current directory"
182
+ fi
183
+ }
184
+
185
+ # Main script
186
+ main() {
187
+ print_status "Starting GitHub Workflow Testing Script"
188
+
189
+ # Check prerequisites
190
+ check_gh_cli
191
+ check_auth
192
+
193
+ # Create test branch if it doesn't exist
194
+ create_test_branch
195
+
196
+ while true; do
197
+ show_menu
198
+ read -p "Enter your choice (1-9): " choice
199
+
200
+ case $choice in
201
+ 1)
202
+ run_test "all"
203
+ ;;
204
+ 2)
205
+ run_test "ci-only"
206
+ ;;
207
+ 3)
208
+ run_test "security-only"
209
+ ;;
210
+ 4)
211
+ run_test "quality-only"
212
+ ;;
213
+ 5)
214
+ create_test_pr
215
+ ;;
216
+ 6)
217
+ monitor_run
218
+ ;;
219
+ 7)
220
+ cleanup
221
+ ;;
222
+ 8)
223
+ view_guide
224
+ ;;
225
+ 9)
226
+ print_success "Exiting workflow testing script"
227
+ exit 0
228
+ ;;
229
+ *)
230
+ print_error "Invalid option. Please choose 1-9."
231
+ ;;
232
+ esac
233
+
234
+ echo
235
+ read -p "Press Enter to continue..."
236
+ done
237
+ }
238
+
239
+ # Run main function
240
+ main "$@"
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Integration tests for CorporateSwarm → bolt.diy flow.
3
+ *
4
+ * These tests validate the complete integration between CorporateSwarm
5
+ * governance system and bolt.diy execution engine.
6
+ */
7
+
8
+ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
9
+ import type { Mandate } from '~/types/mandate';
10
+
11
+ describe('CorporateSwarm → bolt.diy Integration', () => {
12
+ const baseUrl = process.env.BOLT_DIY_API_URL || 'http://localhost:5173';
13
+
14
+ describe('Mandate Submission', () => {
15
+ it('should accept a valid mandate from CorporateSwarm', async () => {
16
+ const mandate: Mandate = {
17
+ mandate_id: 'test-integration-001',
18
+ objectives: ['Test objective'],
19
+ constraints: {
20
+ language: 'ts',
21
+ maxDependencies: 10,
22
+ noNetwork: false,
23
+ allowedPackages: [],
24
+ maxFileSize: 10000,
25
+ maxFiles: 10,
26
+ },
27
+ budget: {
28
+ token: 10000,
29
+ time: 60,
30
+ cost: 1.0,
31
+ },
32
+ deliverables: ['src/index.ts'],
33
+ governance: {
34
+ proposal_id: 'test-proposal-001',
35
+ },
36
+ iteration_config: {
37
+ max_iterations: 1,
38
+ test_required: false,
39
+ quality_threshold: 0.7,
40
+ },
41
+ };
42
+
43
+ const response = await fetch(`${baseUrl}/api/mandate`, {
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ },
48
+ body: JSON.stringify(mandate),
49
+ });
50
+
51
+ expect(response.status).toBe(202);
52
+ const result = await response.json() as { success: boolean; mandate_id: string; event_stream_url?: string };
53
+ expect(result.success).toBe(true);
54
+ expect(result.mandate_id).toBe(mandate.mandate_id);
55
+ expect(result.event_stream_url).toBeDefined();
56
+ });
57
+
58
+ it('should reject an invalid mandate', async () => {
59
+ const invalidMandate = {
60
+ mandate_id: 'test-invalid',
61
+ // Missing required fields
62
+ };
63
+
64
+ const response = await fetch(`${baseUrl}/api/mandate`, {
65
+ method: 'POST',
66
+ headers: {
67
+ 'Content-Type': 'application/json',
68
+ },
69
+ body: JSON.stringify(invalidMandate),
70
+ });
71
+
72
+ expect(response.status).toBe(400);
73
+ const result = await response.json() as { success: boolean; errors?: any };
74
+ expect(result.success).toBe(false);
75
+ expect(result.errors).toBeDefined();
76
+ });
77
+ });
78
+
79
+ describe('Execution Event Streaming', () => {
80
+ it('should stream execution events for a mandate', async () => {
81
+ const mandateId = 'test-stream-001';
82
+
83
+ // First submit a mandate
84
+ const mandate: Mandate = {
85
+ mandate_id: mandateId,
86
+ objectives: ['Test streaming'],
87
+ constraints: {
88
+ language: 'ts',
89
+ maxDependencies: 5,
90
+ noNetwork: false,
91
+ allowedPackages: [],
92
+ maxFileSize: 10000,
93
+ maxFiles: 5,
94
+ },
95
+ budget: {
96
+ token: 5000,
97
+ time: 30,
98
+ cost: 0.5,
99
+ },
100
+ deliverables: ['src/test.ts'],
101
+ governance: {},
102
+ iteration_config: {
103
+ max_iterations: 1,
104
+ test_required: false,
105
+ quality_threshold: 0.7,
106
+ },
107
+ };
108
+
109
+ const submitResponse = await fetch(`${baseUrl}/api/mandate`, {
110
+ method: 'POST',
111
+ headers: {
112
+ 'Content-Type': 'application/json',
113
+ },
114
+ body: JSON.stringify(mandate),
115
+ });
116
+
117
+ expect(submitResponse.status).toBe(202);
118
+ const submitResult = await submitResponse.json() as { event_stream_url?: string };
119
+ const eventStreamUrl = submitResult.event_stream_url;
120
+
121
+ if (!eventStreamUrl) {
122
+ throw new Error('Event stream URL not provided');
123
+ }
124
+
125
+ // Connect to event stream
126
+ const eventSource = new EventSource(eventStreamUrl);
127
+ const events: any[] = [];
128
+
129
+ return new Promise<void>((resolve, reject) => {
130
+ const timeout = setTimeout(() => {
131
+ eventSource.close();
132
+ reject(new Error('Event stream timeout'));
133
+ }, 10000);
134
+
135
+ eventSource.onmessage = (event) => {
136
+ try {
137
+ const data = JSON.parse(event.data);
138
+ events.push(data);
139
+
140
+ // Check for connection confirmation
141
+ if (data.type === 'connected') {
142
+ expect(data.mandate_id).toBe(mandateId);
143
+ }
144
+
145
+ // If we receive an iteration_start event, we're good
146
+ if (data.type === 'iteration_start') {
147
+ clearTimeout(timeout);
148
+ eventSource.close();
149
+ expect(events.length).toBeGreaterThan(0);
150
+ resolve();
151
+ }
152
+ } catch (error) {
153
+ clearTimeout(timeout);
154
+ eventSource.close();
155
+ reject(error);
156
+ }
157
+ };
158
+
159
+ eventSource.onerror = (error) => {
160
+ clearTimeout(timeout);
161
+ eventSource.close();
162
+ reject(error);
163
+ };
164
+ });
165
+ });
166
+ });
167
+
168
+ describe('Governance Reporting', () => {
169
+ it('should report execution status to CorporateSwarm', async () => {
170
+ // This test would require a mock CorporateSwarm API endpoint
171
+ // For now, we'll test that the CorporateSwarmClient can be instantiated
172
+ const { CorporateSwarmClient } = await import('~/lib/governance/corporate-swarm-client');
173
+ const client = new CorporateSwarmClient({ baseUrl: 'http://localhost:8000' });
174
+
175
+ // Test that client methods exist
176
+ expect(client.submitExecutionReport).toBeDefined();
177
+ expect(client.requestApproval).toBeDefined();
178
+ expect(client.updateProposalStatus).toBeDefined();
179
+ });
180
+ });
181
+
182
+ describe('Deployment Integration', () => {
183
+ it('should deploy project when deployment is enabled in mandate', async () => {
184
+ // This test would require actual deployment credentials
185
+ // For now, we'll test that deployment APIs accept mandate_id
186
+ const deployRequest = {
187
+ files: {
188
+ 'index.html': '<html><body>Test</body></html>',
189
+ },
190
+ mandate_id: 'test-deploy-001',
191
+ proposal_id: 'test-proposal-deploy-001',
192
+ };
193
+
194
+ // Note: This will fail without actual Netlify token, but we can test the API structure
195
+ const response = await fetch(`${baseUrl}/api/netlify-deploy`, {
196
+ method: 'POST',
197
+ headers: {
198
+ 'Content-Type': 'application/json',
199
+ },
200
+ body: JSON.stringify(deployRequest),
201
+ });
202
+
203
+ // Should either succeed (if token provided) or fail with 401 (if no token)
204
+ expect([200, 201, 401]).toContain(response.status);
205
+ });
206
+ });
207
+ });
208
+
@@ -0,0 +1,34 @@
1
+ {
2
+ "mandate_id": "test-budget-limited-001",
3
+ "objectives": [
4
+ "Create a simple calculator application",
5
+ "Implement basic arithmetic operations"
6
+ ],
7
+ "constraints": {
8
+ "language": "js",
9
+ "maxDependencies": 3,
10
+ "noNetwork": true,
11
+ "allowedPackages": [],
12
+ "maxFileSize": 5000,
13
+ "maxFiles": 2
14
+ },
15
+ "budget": {
16
+ "token": 1000,
17
+ "time": 10,
18
+ "cost": 0.1
19
+ },
20
+ "deliverables": [
21
+ "index.html",
22
+ "calculator.js"
23
+ ],
24
+ "governance": {
25
+ "proposal_id": "test-proposal-budget-001",
26
+ "risk_threshold": 30.0
27
+ },
28
+ "iteration_config": {
29
+ "max_iterations": 1,
30
+ "test_required": false,
31
+ "quality_threshold": 0.5
32
+ }
33
+ }
34
+
@@ -0,0 +1,53 @@
1
+ {
2
+ "mandate_id": "test-complex-001",
3
+ "objectives": [
4
+ "Create a full-stack web application with React frontend",
5
+ "Implement user authentication",
6
+ "Add database integration",
7
+ "Create REST API endpoints",
8
+ "Deploy to production"
9
+ ],
10
+ "constraints": {
11
+ "language": "ts",
12
+ "maxDependencies": 50,
13
+ "noNetwork": false,
14
+ "allowedPackages": ["react", "react-dom", "express", "typescript", "node"],
15
+ "maxFileSize": 100000,
16
+ "maxFiles": 50
17
+ },
18
+ "budget": {
19
+ "token": 100000,
20
+ "time": 600,
21
+ "cost": 10.0
22
+ },
23
+ "deliverables": [
24
+ "src/App.tsx",
25
+ "src/components/Login.tsx",
26
+ "src/api/auth.ts",
27
+ "server/index.ts",
28
+ "package.json",
29
+ "README.md"
30
+ ],
31
+ "governance": {
32
+ "proposal_id": "test-proposal-complex-001",
33
+ "esg_requirements": {
34
+ "environmental_score": 75.0,
35
+ "social_score": 80.0,
36
+ "governance_score": 85.0,
37
+ "overall_score": 80.0
38
+ },
39
+ "risk_threshold": 60.0,
40
+ "causal_analysis_required": true
41
+ },
42
+ "iteration_config": {
43
+ "max_iterations": 5,
44
+ "test_required": true,
45
+ "quality_threshold": 0.85
46
+ },
47
+ "deployment": {
48
+ "enabled": true,
49
+ "provider": "netlify",
50
+ "auto_deploy": true
51
+ }
52
+ }
53
+
@@ -0,0 +1,36 @@
1
+ {
2
+ "mandate_id": "test-constraint-enforced-001",
3
+ "objectives": [
4
+ "Create a secure password generator",
5
+ "Ensure no external dependencies",
6
+ "Follow strict security guidelines"
7
+ ],
8
+ "constraints": {
9
+ "language": "ts",
10
+ "maxDependencies": 0,
11
+ "noNetwork": true,
12
+ "allowedPackages": [],
13
+ "maxFileSize": 5000,
14
+ "maxFiles": 2
15
+ },
16
+ "budget": {
17
+ "token": 5000,
18
+ "time": 30,
19
+ "cost": 0.5
20
+ },
21
+ "deliverables": [
22
+ "src/password-generator.ts",
23
+ "index.html"
24
+ ],
25
+ "governance": {
26
+ "proposal_id": "test-proposal-constraint-001",
27
+ "risk_threshold": 20.0,
28
+ "approval_chain": ["security-team", "compliance-officer"]
29
+ },
30
+ "iteration_config": {
31
+ "max_iterations": 2,
32
+ "test_required": true,
33
+ "quality_threshold": 0.9
34
+ }
35
+ }
36
+
@@ -0,0 +1,35 @@
1
+ {
2
+ "mandate_id": "test-simple-001",
3
+ "objectives": [
4
+ "Create a hello world React component",
5
+ "Display the component in a simple HTML page"
6
+ ],
7
+ "constraints": {
8
+ "language": "ts",
9
+ "maxDependencies": 5,
10
+ "noNetwork": false,
11
+ "allowedPackages": ["react", "react-dom"],
12
+ "maxFileSize": 10000,
13
+ "maxFiles": 3
14
+ },
15
+ "budget": {
16
+ "token": 10000,
17
+ "time": 60,
18
+ "cost": 1.0
19
+ },
20
+ "deliverables": [
21
+ "src/App.tsx",
22
+ "index.html",
23
+ "package.json"
24
+ ],
25
+ "governance": {
26
+ "proposal_id": "test-proposal-001",
27
+ "risk_threshold": 50.0
28
+ },
29
+ "iteration_config": {
30
+ "max_iterations": 1,
31
+ "test_required": false,
32
+ "quality_threshold": 0.7
33
+ }
34
+ }
35
+
@@ -0,0 +1,37 @@
1
+ {
2
+ "compilerOptions": {
3
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
4
+ "types": [
5
+ "@remix-run/cloudflare",
6
+ "vite/client",
7
+ "@cloudflare/workers-types/2023-07-01",
8
+ "@types/dom-speech-recognition"
9
+ ],
10
+ "isolatedModules": true,
11
+ "esModuleInterop": true,
12
+ "jsx": "react-jsx",
13
+ "module": "ESNext",
14
+ "moduleResolution": "Bundler",
15
+ "resolveJsonModule": true,
16
+ "target": "ESNext",
17
+ "strict": true,
18
+ "allowJs": true,
19
+ "skipLibCheck": true,
20
+ "verbatimModuleSyntax": true,
21
+ "forceConsistentCasingInFileNames": true,
22
+ "baseUrl": ".",
23
+ "paths": {
24
+ "~/*": ["./app/*", "./*"]
25
+ },
26
+ // vite takes care of building everything, not tsc
27
+ "noEmit": true
28
+ },
29
+ "include": [
30
+ "**/*.ts",
31
+ "**/*.tsx",
32
+ "**/.server/**/*.ts",
33
+ "**/.server/**/*.tsx",
34
+ "**/.client/**/*.ts",
35
+ "**/.client/**/*.tsx"
36
+ ]
37
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @note For some reason the types aren't picked up from node_modules so I declared the module here
3
+ * with only the function that we use.
4
+ */
5
+ declare module 'istextorbinary' {
6
+ export interface EncodingOpts {
7
+ /** Defaults to 24 */
8
+ chunkLength?: number;
9
+
10
+ /** If not provided, will check the start, beginning, and end */
11
+ chunkBegin?: number;
12
+ }
13
+
14
+ export function getEncoding(buffer: Buffer | null, opts?: EncodingOpts): 'utf8' | 'binary' | null;
15
+ }