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
tools/sensors.py ADDED
@@ -0,0 +1,285 @@
1
+ """Sensor interfaces and implementations for policy engine.
2
+
3
+ Provides standardized sensor interfaces for reading system metrics,
4
+ cloud resources, and custom metrics.
5
+ """
6
+
7
+ from abc import ABC, abstractmethod
8
+ from typing import Any, Dict, List, Optional, Callable
9
+ from loguru import logger
10
+
11
+ try:
12
+ import psutil
13
+ PSUTIL_AVAILABLE = True
14
+ except ImportError:
15
+ PSUTIL_AVAILABLE = False
16
+ logger.warning("psutil not available - SystemMetricsSensor will be disabled")
17
+
18
+
19
+ class BaseSensor(ABC):
20
+ """Abstract base class for sensors.
21
+
22
+ All sensors must implement read() to return metric snapshots
23
+ matching the doctrine's metric specifications.
24
+ """
25
+
26
+ @abstractmethod
27
+ def read(self) -> Dict[str, float]:
28
+ """
29
+ Read current metric snapshot.
30
+
31
+ Returns:
32
+ Dict[str, float]: Metric name -> value mapping
33
+ """
34
+ pass
35
+
36
+ def validate(self, snapshot: Dict[str, float], expected_metrics: List[str]) -> bool:
37
+ """
38
+ Validate snapshot matches expected metrics.
39
+
40
+ Args:
41
+ snapshot: Metric snapshot to validate
42
+ expected_metrics: List of expected metric names
43
+
44
+ Returns:
45
+ bool: True if snapshot is valid
46
+ """
47
+ missing = set(expected_metrics) - set(snapshot.keys())
48
+ if missing:
49
+ logger.warning(f"Missing metrics in snapshot: {missing}")
50
+ return False
51
+ return True
52
+
53
+ def health_check(self) -> bool:
54
+ """
55
+ Check sensor availability.
56
+
57
+ Returns:
58
+ bool: True if sensor is healthy
59
+ """
60
+ try:
61
+ self.read()
62
+ return True
63
+ except Exception as e:
64
+ logger.error(f"Sensor health check failed: {e}")
65
+ return False
66
+
67
+
68
+ class SystemMetricsSensor(BaseSensor):
69
+ """OS-level system metrics sensor using psutil.
70
+
71
+ Extracts:
72
+ - CPU metrics: cpu_percent, cpu_count, cpu_freq
73
+ - Memory metrics: memory_percent, memory_available, memory_used
74
+ - Disk metrics: disk_usage_percent, disk_io_read, disk_io_write
75
+ - Network metrics: network_bytes_sent, network_bytes_recv
76
+ - Process metrics: process_count
77
+ """
78
+
79
+ def __init__(self, metric_mapping: Optional[Dict[str, str]] = None):
80
+ """
81
+ Initialize system metrics sensor.
82
+
83
+ Args:
84
+ metric_mapping: Optional mapping from doctrine metric names to psutil attributes
85
+ """
86
+ if not PSUTIL_AVAILABLE:
87
+ raise ImportError("psutil is required for SystemMetricsSensor")
88
+
89
+ self.metric_mapping = metric_mapping or {}
90
+ self._last_net_io = None
91
+ self._last_disk_io = None
92
+
93
+ def read(self) -> Dict[str, float]:
94
+ """Read system metrics."""
95
+ snapshot = {}
96
+
97
+ # CPU metrics
98
+ snapshot['cpu_percent'] = psutil.cpu_percent(interval=0.1)
99
+ snapshot['cpu_count'] = float(psutil.cpu_count())
100
+ try:
101
+ cpu_freq = psutil.cpu_freq()
102
+ snapshot['cpu_freq_mhz'] = cpu_freq.current if cpu_freq else 0.0
103
+ except:
104
+ snapshot['cpu_freq_mhz'] = 0.0
105
+
106
+ # Memory metrics
107
+ mem = psutil.virtual_memory()
108
+ snapshot['memory_percent'] = mem.percent
109
+ snapshot['memory_available_gb'] = mem.available / (1024**3)
110
+ snapshot['memory_used_gb'] = mem.used / (1024**3)
111
+
112
+ # Disk metrics
113
+ try:
114
+ disk = psutil.disk_usage('/')
115
+ snapshot['disk_usage_percent'] = disk.percent
116
+ except:
117
+ snapshot['disk_usage_percent'] = 0.0
118
+
119
+ # Disk I/O (delta from last read)
120
+ try:
121
+ disk_io = psutil.disk_io_counters()
122
+ if disk_io and self._last_disk_io:
123
+ snapshot['disk_io_read_mb'] = (disk_io.read_bytes - self._last_disk_io.read_bytes) / (1024**2)
124
+ snapshot['disk_io_write_mb'] = (disk_io.write_bytes - self._last_disk_io.write_bytes) / (1024**2)
125
+ else:
126
+ snapshot['disk_io_read_mb'] = 0.0
127
+ snapshot['disk_io_write_mb'] = 0.0
128
+ self._last_disk_io = disk_io
129
+ except:
130
+ snapshot['disk_io_read_mb'] = 0.0
131
+ snapshot['disk_io_write_mb'] = 0.0
132
+
133
+ # Network I/O (delta from last read)
134
+ try:
135
+ net_io = psutil.net_io_counters()
136
+ if net_io and self._last_net_io:
137
+ snapshot['network_bytes_sent_mb'] = (net_io.bytes_sent - self._last_net_io.bytes_sent) / (1024**2)
138
+ snapshot['network_bytes_recv_mb'] = (net_io.bytes_recv - self._last_net_io.bytes_recv) / (1024**2)
139
+ else:
140
+ snapshot['network_bytes_sent_mb'] = 0.0
141
+ snapshot['network_bytes_recv_mb'] = 0.0
142
+ self._last_net_io = net_io
143
+ except:
144
+ snapshot['network_bytes_sent_mb'] = 0.0
145
+ snapshot['network_bytes_recv_mb'] = 0.0
146
+
147
+ # Process count
148
+ try:
149
+ snapshot['process_count'] = float(len(psutil.pids()))
150
+ except:
151
+ snapshot['process_count'] = 0.0
152
+
153
+ # Apply metric mapping if provided
154
+ if self.metric_mapping:
155
+ mapped_snapshot = {}
156
+ for doctrine_metric, system_metric in self.metric_mapping.items():
157
+ if system_metric in snapshot:
158
+ mapped_snapshot[doctrine_metric] = snapshot[system_metric]
159
+ else:
160
+ logger.warning(f"Metric mapping failed: {system_metric} not in snapshot")
161
+ return mapped_snapshot
162
+
163
+ return snapshot
164
+
165
+
166
+ class CloudResourceSensor(BaseSensor):
167
+ """Abstract base for cloud provider metrics.
168
+
169
+ Subclasses should implement provider-specific metric extraction.
170
+ """
171
+
172
+ def __init__(self, provider: str, config: Optional[Dict[str, Any]] = None):
173
+ """
174
+ Initialize cloud resource sensor.
175
+
176
+ Args:
177
+ provider: Cloud provider name ("aws", "gcp", "azure")
178
+ config: Provider-specific configuration
179
+ """
180
+ self.provider = provider
181
+ self.config = config or {}
182
+
183
+ @abstractmethod
184
+ def read(self) -> Dict[str, float]:
185
+ """Read cloud metrics (implemented by subclasses)."""
186
+ pass
187
+
188
+
189
+ class CustomMetricSensor(BaseSensor):
190
+ """User-defined metric sensor with custom extraction function.
191
+
192
+ Accepts a custom function that returns metric snapshots.
193
+ """
194
+
195
+ def __init__(self, extractor: Callable[[], Dict[str, float]]):
196
+ """
197
+ Initialize custom metric sensor.
198
+
199
+ Args:
200
+ extractor: Function that returns Dict[str, float] metric snapshot
201
+ """
202
+ self.extractor = extractor
203
+
204
+ def read(self) -> Dict[str, float]:
205
+ """Read metrics using custom extractor."""
206
+ try:
207
+ return self.extractor()
208
+ except Exception as e:
209
+ logger.error(f"Custom sensor extractor failed: {e}")
210
+ return {}
211
+
212
+
213
+ class SensorRegistry:
214
+ """Registry mapping metric extractor keys to sensor instances.
215
+
216
+ Provides auto-discovery and fallback chain for missing metrics.
217
+ """
218
+
219
+ def __init__(self):
220
+ """Initialize sensor registry."""
221
+ self.sensors: Dict[str, BaseSensor] = {}
222
+ self.metric_to_sensor: Dict[str, str] = {} # metric_name -> sensor_key
223
+
224
+ def register(self, sensor_key: str, sensor: BaseSensor, metrics: Optional[List[str]] = None) -> None:
225
+ """
226
+ Register a sensor.
227
+
228
+ Args:
229
+ sensor_key: Unique identifier for sensor
230
+ sensor: Sensor instance
231
+ metrics: Optional list of metric names this sensor provides
232
+ """
233
+ self.sensors[sensor_key] = sensor
234
+ if metrics:
235
+ for metric in metrics:
236
+ self.metric_to_sensor[metric] = sensor_key
237
+ logger.info(f"Registered sensor: {sensor_key}")
238
+
239
+ def get_sensor(self, sensor_key: str) -> Optional[BaseSensor]:
240
+ """Get sensor by key."""
241
+ return self.sensors.get(sensor_key)
242
+
243
+ def read_all(self, required_metrics: Optional[List[str]] = None) -> Dict[str, float]:
244
+ """
245
+ Read metrics from all registered sensors.
246
+
247
+ Args:
248
+ required_metrics: Optional list of required metric names
249
+
250
+ Returns:
251
+ Dict[str, float]: Combined metric snapshot
252
+ """
253
+ snapshot = {}
254
+
255
+ # Read from all sensors
256
+ for sensor_key, sensor in self.sensors.items():
257
+ try:
258
+ sensor_snapshot = sensor.read()
259
+ snapshot.update(sensor_snapshot)
260
+ except Exception as e:
261
+ logger.error(f"Sensor {sensor_key} read failed: {e}")
262
+
263
+ # Validate required metrics
264
+ if required_metrics:
265
+ missing = set(required_metrics) - set(snapshot.keys())
266
+ if missing:
267
+ logger.warning(f"Missing required metrics: {missing}")
268
+
269
+ return snapshot
270
+
271
+ def auto_discover(self) -> None:
272
+ """Auto-discover and register available sensors."""
273
+ # Try to register SystemMetricsSensor if psutil available
274
+ if PSUTIL_AVAILABLE:
275
+ try:
276
+ system_sensor = SystemMetricsSensor()
277
+ if system_sensor.health_check():
278
+ self.register("system", system_sensor)
279
+ except Exception as e:
280
+ logger.warning(f"Failed to auto-discover system sensor: {e}")
281
+
282
+ def health_check_all(self) -> Dict[str, bool]:
283
+ """Check health of all sensors."""
284
+ return {key: sensor.health_check() for key, sensor in self.sensors.items()}
285
+
utils/Agent_types.py ADDED
@@ -0,0 +1,15 @@
1
+ """Agent type definitions for CR-CA.
2
+
3
+ This module provides type aliases for agent-related types used throughout
4
+ the CR-CA codebase.
5
+ """
6
+
7
+ from typing import Any, Callable, Sequence, Union
8
+
9
+ from swarms.structs.agent import Agent
10
+
11
+ # Unified type for agent
12
+ AgentType = Union[Agent, Callable, Any]
13
+
14
+ # List of agents
15
+ AgentListType = Sequence[AgentType]
utils/AnyToStr.py ADDED
File without changes
utils/HHCS.py ADDED
@@ -0,0 +1,277 @@
1
+ """
2
+ Hybrid Hierarchical-Cluster Swarm implementation.
3
+
4
+ Provides intelligent task routing to appropriate swarm configurations
5
+ using an agent-based routing system with hierarchical decision-making.
6
+ """
7
+
8
+ import json
9
+ import os
10
+ from concurrent.futures import ThreadPoolExecutor, as_completed
11
+ from typing import Callable, List, Union
12
+
13
+ from swarms.structs.agent import Agent
14
+ from swarms.structs.conversation import Conversation
15
+ from swarms.structs.multi_agent_exec import get_swarms_info
16
+ from swarms.structs.swarm_router import SwarmRouter
17
+ from swarms.utils.history_output_formatter import HistoryOutputType, history_output_formatter
18
+
19
+
20
+ _ROUTER_TOOLS = [{
21
+ "type": "function",
22
+ "function": {
23
+ "name": "select_swarm",
24
+ "description": "Analyzes the input task and selects the most appropriate swarm configuration.",
25
+ "parameters": {
26
+ "type": "object",
27
+ "properties": {
28
+ "reasoning": {"type": "string", "description": "Reasoning behind swarm selection."},
29
+ "swarm_name": {"type": "string", "description": "Name of the selected swarm."},
30
+ "task_description": {"type": "string", "description": "Structured task description."},
31
+ },
32
+ "required": ["reasoning", "swarm_name", "task_description"],
33
+ },
34
+ },
35
+ }]
36
+
37
+ _ROUTER_SYSTEM_PROMPT = """You are an intelligent Router Agent responsible for analyzing tasks and directing them to the most appropriate swarm.
38
+
39
+ Key Responsibilities:
40
+ 1. Task Analysis: Analyze requirements, complexity, and domain
41
+ 2. Swarm Selection: Match task requirements with swarm capabilities
42
+ 3. Decision Making: Evaluate all available swarms systematically
43
+ 4. Output Requirements: Provide clear justification and structured task description
44
+
45
+ Your output must follow this format:
46
+ {
47
+ "swarm_name": "Name of the selected swarm",
48
+ "task_description": "Detailed and structured task description"
49
+ }"""
50
+
51
+
52
+ class HybridHierarchicalClusterSwarm:
53
+ """Hybrid hierarchical-cluster swarm for intelligent task routing.
54
+
55
+ Routes tasks to appropriate swarm configurations using an agent-based
56
+ routing system. Supports parallel batch processing and maintains
57
+ conversation history for context management.
58
+
59
+ Attributes:
60
+ name: Swarm identifier name.
61
+ description: Description of swarm functionality.
62
+ swarms: List of available swarm routers.
63
+ max_loops: Maximum number of processing loops.
64
+ output_type: Format for output extraction.
65
+ conversation: Conversation history manager.
66
+ router_agent: Agent responsible for task routing decisions.
67
+ """
68
+
69
+ def __init__(self, name: str = "Hybrid Hierarchical-Cluster Swarm",
70
+ description: str = "A swarm that uses a hybrid hierarchical-peer model to solve complex tasks.",
71
+ swarms: List[Union[SwarmRouter, Callable]] = None,
72
+ agents: List[Union[Agent, Callable]] = None, # Accept agents for convenience
73
+ max_loops: int = 1, output_type: HistoryOutputType = "list",
74
+ router_agent_model_name: str = "gpt-4o-mini", *args, **kwargs):
75
+ """Initialize hybrid hierarchical-cluster swarm.
76
+
77
+ Args:
78
+ name: Swarm identifier name.
79
+ description: Description of swarm functionality.
80
+ swarms: List of available swarm routers or callables.
81
+ max_loops: Maximum number of processing loops.
82
+ output_type: Format for output extraction.
83
+ router_agent_model_name: Model name for router agent.
84
+ """
85
+ self.name = name
86
+ self.description = description
87
+
88
+ # Handle both swarms and agents parameters
89
+ if swarms is not None:
90
+ self.swarms = swarms
91
+ elif agents is not None:
92
+ # Convert agents to swarms by wrapping them in SwarmRouter
93
+ from utils.router import SwarmRouter
94
+ self.swarms = [
95
+ SwarmRouter(
96
+ name=f"swarm-{i}",
97
+ description=f"Swarm wrapper for agent {i}",
98
+ agents=[agent] if not isinstance(agent, list) else agent,
99
+ swarm_type="SequentialWorkflow",
100
+ max_loops=max_loops,
101
+ output_type=output_type,
102
+ **kwargs
103
+ ) for i, agent in enumerate(agents)
104
+ ]
105
+ else:
106
+ self.swarms = []
107
+
108
+ self.max_loops = max_loops
109
+ self.output_type = output_type
110
+ self.conversation = Conversation()
111
+
112
+ system_prompt = f"{_ROUTER_SYSTEM_PROMPT}\n\n{get_swarms_info(swarms=self.swarms)}"
113
+
114
+ # Extract model_name from kwargs if provided, otherwise use router_agent_model_name
115
+ model = kwargs.pop("model_name", router_agent_model_name)
116
+
117
+ self.router_agent = Agent(agent_name="Router Agent",
118
+ agent_description="Routes tasks to appropriate swarms.",
119
+ system_prompt=system_prompt,
120
+ tools_list_dictionary=_ROUTER_TOOLS,
121
+ model_name=model,
122
+ max_loops=1, output_type="final",
123
+ **kwargs) # Pass remaining kwargs to Agent
124
+
125
+ def _parse_router_response(self, response: Union[str, dict, None]) -> dict:
126
+ """Parse router agent response into dictionary format.
127
+
128
+ Args:
129
+ response: Response from router agent (string or dict).
130
+
131
+ Returns:
132
+ Parsed response dictionary.
133
+
134
+ Raises:
135
+ ValueError: If response cannot be parsed or is invalid.
136
+ """
137
+ if response is None:
138
+ raise ValueError("Router agent returned None response. Check agent configuration and model availability.")
139
+
140
+ if isinstance(response, str):
141
+ # Handle empty or "No response generated" messages
142
+ if not response.strip() or "No response generated" in response:
143
+ raise ValueError(f"Router agent returned empty or invalid response: {response}")
144
+ try:
145
+ # Try to extract JSON from the response if it's embedded in text
146
+ import re
147
+ json_match = re.search(r'\{[^{}]*\}', response)
148
+ if json_match:
149
+ return json.loads(json_match.group())
150
+ return json.loads(response)
151
+ except json.JSONDecodeError:
152
+ raise ValueError(f"Invalid JSON response from router agent: {response}")
153
+
154
+ if isinstance(response, dict):
155
+ return response
156
+
157
+ raise ValueError(f"Unexpected response type from router agent: {type(response)}")
158
+
159
+ def _validate_router_response(self, response: dict) -> tuple:
160
+ """Validate and extract swarm name and task description.
161
+
162
+ Args:
163
+ response: Parsed response dictionary.
164
+
165
+ Returns:
166
+ Tuple of (swarm_name, task_description).
167
+
168
+ Raises:
169
+ ValueError: If required fields are missing.
170
+ """
171
+ swarm_name = response.get("swarm_name")
172
+ task_description = response.get("task_description")
173
+
174
+ if not swarm_name or not task_description:
175
+ raise ValueError(f"Invalid response from router agent: both 'swarm_name' and 'task_description' must be present. "
176
+ f"Received: swarm_name={swarm_name}, task_description={task_description}. "
177
+ f"Model: {self.router_agent.model_name}")
178
+ return swarm_name, task_description
179
+
180
+ def find_swarm_by_name(self, swarm_name: str) -> Union[SwarmRouter, Callable, None]:
181
+ """Locate swarm by name identifier.
182
+
183
+ Args:
184
+ swarm_name: Name of swarm to locate.
185
+
186
+ Returns:
187
+ Found swarm router or None if not found.
188
+ """
189
+ return next((swarm for swarm in self.swarms if swarm.name == swarm_name), None)
190
+
191
+ def route_task(self, swarm_name: str, task_description: str) -> None:
192
+ """Route task to specified swarm and record output.
193
+
194
+ Args:
195
+ swarm_name: Name of target swarm.
196
+ task_description: Task description to execute.
197
+
198
+ Raises:
199
+ ValueError: If swarm is not found.
200
+ """
201
+ swarm = self.find_swarm_by_name(swarm_name)
202
+ if not swarm:
203
+ raise ValueError(f"Swarm '{swarm_name}' not found.")
204
+
205
+ output = swarm.run(task_description)
206
+ self.conversation.add(role=swarm.name, content=output)
207
+
208
+ def run(self, task: str, *args, **kwargs) -> str:
209
+ """Execute routing process for given task.
210
+
211
+ Args:
212
+ task: Task string to process.
213
+ *args: Additional positional arguments.
214
+ **kwargs: Additional keyword arguments.
215
+
216
+ Returns:
217
+ Formatted history output string.
218
+
219
+ Raises:
220
+ ValueError: If task is empty or routing fails.
221
+ """
222
+ if not task:
223
+ raise ValueError("Task cannot be empty.")
224
+
225
+ self.conversation.add(role="User", content=task)
226
+ response = self.router_agent.run(task=task)
227
+
228
+ # Handle None or empty responses
229
+ if response is None:
230
+ raise ValueError("Router agent returned None. Check agent configuration, API keys, and model availability.")
231
+
232
+ try:
233
+ parsed_response = self._parse_router_response(response)
234
+ except ValueError as e:
235
+ raise ValueError(f"Failed to parse router response: {e}. Response was: {response}")
236
+
237
+ try:
238
+ swarm_name, task_description = self._validate_router_response(parsed_response)
239
+ except ValueError as e:
240
+ raise ValueError(f"Failed to validate router response: {e}. Parsed response was: {parsed_response}")
241
+
242
+ self.route_task(swarm_name, task_description)
243
+
244
+ return history_output_formatter(self.conversation, self.output_type)
245
+
246
+ def batched_run(self, tasks: List[str]) -> List[str]:
247
+ """Execute routing process for multiple tasks in parallel.
248
+
249
+ Args:
250
+ tasks: List of task strings to process.
251
+
252
+ Returns:
253
+ List of formatted history outputs.
254
+
255
+ Raises:
256
+ ValueError: If task list is empty.
257
+ """
258
+ if not tasks:
259
+ raise ValueError("Task list cannot be empty.")
260
+
261
+ max_workers = os.cpu_count() * 2
262
+ results = []
263
+
264
+ with ThreadPoolExecutor(max_workers=max_workers) as executor:
265
+ future_to_task = {executor.submit(self.run, task): task for task in tasks}
266
+
267
+ for future in as_completed(future_to_task):
268
+ try:
269
+ results.append(future.result())
270
+ except Exception as e:
271
+ results.append(f"Error processing task: {str(e)}")
272
+
273
+ return results
274
+
275
+
276
+ # Alias for convenience
277
+ HHCS = HybridHierarchicalClusterSwarm
utils/__init__.py ADDED
@@ -0,0 +1,30 @@
1
+ """
2
+ CRCA Utilities Module
3
+
4
+ Provides utility functions and classes for formatting, visualization,
5
+ and common operations within the CRCA framework.
6
+ """
7
+
8
+ try:
9
+ from .formatter import Formatter, MarkdownOutputHandler, formatter
10
+ FORMATTER_AVAILABLE = True
11
+ except ImportError:
12
+ Formatter = None
13
+ MarkdownOutputHandler = None
14
+ formatter = None
15
+ FORMATTER_AVAILABLE = False
16
+
17
+ try:
18
+ from .tui import CorporateSwarmTUI, create_corporate_tui, ViewMode, TUIState
19
+ TUI_AVAILABLE = True
20
+ except ImportError:
21
+ CorporateSwarmTUI = None
22
+ create_corporate_tui = None
23
+ ViewMode = None
24
+ TUIState = None
25
+ TUI_AVAILABLE = False
26
+
27
+ __all__ = [
28
+ "Formatter", "MarkdownOutputHandler", "formatter", "FORMATTER_AVAILABLE",
29
+ "CorporateSwarmTUI", "create_corporate_tui", "ViewMode", "TUIState", "TUI_AVAILABLE"
30
+ ]