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
schemas/policy.py ADDED
@@ -0,0 +1,458 @@
1
+ """Policy schema definitions for the temporal policy engine.
2
+
3
+ This module defines Pydantic v2 models for:
4
+ - DoctrineV1: Policy specification (epochs, metrics, objectives, invariants, levers, risk budget)
5
+ - CompiledPolicy: Normalized, compiled version with resolved IDs and deterministic selectors
6
+ - LedgerEvent: Event types for the event-sourced ledger
7
+ - InterventionSpec + Intervention: Typed intervention parameters
8
+ - ModelState: Learned parameters θ with covariance and versioning
9
+
10
+ This is the "system of record" for doctrine + ledger + interventions (R1 requirement).
11
+ """
12
+
13
+ from typing import Any, Dict, List, Literal, Optional, Union
14
+ from pydantic import BaseModel, Field
15
+ from datetime import datetime
16
+
17
+
18
+ class EpochConfig(BaseModel):
19
+ """Epoch configuration for temporal policy execution.
20
+
21
+ Attributes:
22
+ unit: Time unit ("seconds", "minutes", "hours", "days")
23
+ length: Length of one epoch in the specified unit
24
+ timezone: Timezone policy (e.g., "UTC", "America/New_York")
25
+ """
26
+ unit: Literal["seconds", "minutes", "hours", "days"] = "hours"
27
+ length: float = Field(default=1.0, gt=0.0)
28
+ timezone: str = "UTC"
29
+
30
+
31
+ class MetricSpec(BaseModel):
32
+ """Specification for a metric to track.
33
+
34
+ Attributes:
35
+ extractor_key: Key to extract metric from state snapshot
36
+ unit: Unit of measurement (optional)
37
+ description: Human-readable description
38
+ """
39
+ extractor_key: str
40
+ unit: Optional[str] = None
41
+ description: Optional[str] = None
42
+
43
+
44
+ class Objective(BaseModel):
45
+ """Multi-objective target with deadline.
46
+
47
+ Attributes:
48
+ metric_name: Name of the metric to optimize
49
+ target_value: Target value (None means minimize/maximize)
50
+ direction: "minimize" or "maximize"
51
+ deadline_epoch: Epoch by which objective should be met (None = no deadline)
52
+ weight: Weight in multi-objective optimization (default: 1.0)
53
+ """
54
+ metric_name: str
55
+ target_value: Optional[float] = None
56
+ direction: Literal["minimize", "maximize"] = "minimize"
57
+ deadline_epoch: Optional[int] = None
58
+ weight: float = Field(default=1.0, gt=0.0)
59
+
60
+
61
+ class Invariant(BaseModel):
62
+ """Hard constraint that must never be violated.
63
+
64
+ Attributes:
65
+ name: Name of the invariant
66
+ condition: Condition expression (e.g., "metric_name > threshold")
67
+ description: Human-readable description
68
+ """
69
+ name: str
70
+ condition: str # Expression to evaluate
71
+ description: Optional[str] = None
72
+
73
+
74
+ class LeverSpec(BaseModel):
75
+ """Specification for an allowed intervention lever.
76
+
77
+ Attributes:
78
+ lever_type: Type identifier (e.g., "ThrottleCPU", "StopService")
79
+ bounds: Parameter bounds as dict (e.g., {"min": 0.0, "max": 1.0})
80
+ cost_function: Cost function expression (optional)
81
+ risk_function: Risk function expression (optional)
82
+ rollback_required: Whether rollback is required for this lever
83
+ description: Human-readable description
84
+ """
85
+ lever_type: str
86
+ bounds: Dict[str, Any] = Field(default_factory=dict)
87
+ cost_function: Optional[str] = None
88
+ risk_function: Optional[str] = None
89
+ rollback_required: bool = False
90
+ description: Optional[str] = None
91
+
92
+
93
+ class RiskBudget(BaseModel):
94
+ """Risk budget constraints.
95
+
96
+ Attributes:
97
+ max_actions_per_epoch: Maximum number of actions allowed per epoch
98
+ max_risk_per_epoch: Maximum risk score allowed per epoch
99
+ rollback_required: Whether rollback is required when budget exceeded
100
+ """
101
+ max_actions_per_epoch: int = Field(default=10, ge=0)
102
+ max_risk_per_epoch: float = Field(default=1.0, ge=0.0)
103
+ rollback_required: bool = False
104
+
105
+
106
+ class DoctrineV1(BaseModel):
107
+ """Policy doctrine specification (version 1).
108
+
109
+ This is the formal policy plan ("five-year plan") that defines:
110
+ - Epoch configuration
111
+ - Metrics to track
112
+ - Objectives to optimize
113
+ - Invariants (hard constraints)
114
+ - Levers (allowed interventions)
115
+ - Risk budget
116
+
117
+ Attributes:
118
+ epoch: Epoch configuration
119
+ metrics: Dictionary mapping metric names to MetricSpec
120
+ objectives: List of objectives to optimize
121
+ invariants: List of hard constraints
122
+ levers: Dictionary mapping lever IDs to LeverSpec
123
+ risk_budget: Risk budget constraints
124
+ version: Doctrine version (default: "1.0")
125
+ created_at: Creation timestamp
126
+ """
127
+ epoch: EpochConfig
128
+ metrics: Dict[str, MetricSpec]
129
+ objectives: List[Objective]
130
+ invariants: List[Invariant]
131
+ levers: Dict[str, LeverSpec]
132
+ risk_budget: RiskBudget
133
+ version: str = "1.0"
134
+ created_at: Optional[str] = None
135
+
136
+ @classmethod
137
+ def from_json(cls, json_path: str) -> "DoctrineV1":
138
+ """Load doctrine from JSON file.
139
+
140
+ Args:
141
+ json_path: Path to JSON file
142
+
143
+ Returns:
144
+ DoctrineV1: Loaded doctrine
145
+ """
146
+ import json
147
+ with open(json_path, "r") as f:
148
+ data = json.load(f)
149
+ return cls(**data)
150
+
151
+ def to_json(self, json_path: str) -> None:
152
+ """Save doctrine to JSON file.
153
+
154
+ Args:
155
+ json_path: Path to save JSON file
156
+ """
157
+ import json
158
+ with open(json_path, "w") as f:
159
+ json.dump(self.model_dump(), f, indent=2)
160
+
161
+
162
+ class CompiledPolicy(BaseModel):
163
+ """Compiled policy with normalized weights and resolved IDs.
164
+
165
+ This is the compiled version of a DoctrineV1 that has been:
166
+ - Normalized (weights sum to 1.0)
167
+ - Resolved (metric IDs resolved, deadline epochs computed)
168
+ - Compiled (deterministic selector rules)
169
+
170
+ Attributes:
171
+ normalized_weights: Dictionary mapping objective names to normalized weights
172
+ resolved_metric_ids: List of resolved metric IDs
173
+ deadline_epochs: Dictionary mapping objective names to deadline epochs
174
+ compiled_selectors: Dictionary of compiled deterministic selector rules
175
+ policy_hash: Stable hash of the original doctrine
176
+ compiled_at: Compilation timestamp
177
+ """
178
+ normalized_weights: Dict[str, float]
179
+ resolved_metric_ids: List[str]
180
+ deadline_epochs: Dict[str, int]
181
+ compiled_selectors: Dict[str, Any]
182
+ policy_hash: str
183
+ compiled_at: str
184
+
185
+ @classmethod
186
+ def compile(cls, doctrine: DoctrineV1) -> "CompiledPolicy":
187
+ """Compile a DoctrineV1 into a CompiledPolicy.
188
+
189
+ Args:
190
+ doctrine: The doctrine to compile
191
+
192
+ Returns:
193
+ CompiledPolicy: Compiled policy
194
+ """
195
+ from utils.canonical import stable_hash
196
+ from datetime import timezone
197
+
198
+ # Compute policy hash
199
+ policy_hash = stable_hash(doctrine.model_dump())
200
+
201
+ # Normalize objective weights
202
+ total_weight = sum(obj.weight for obj in doctrine.objectives)
203
+ normalized_weights = {
204
+ obj.metric_name: obj.weight / total_weight if total_weight > 0 else 1.0 / len(doctrine.objectives)
205
+ for obj in doctrine.objectives
206
+ }
207
+
208
+ # Resolve metric IDs
209
+ resolved_metric_ids = list(doctrine.metrics.keys())
210
+
211
+ # Compute deadline epochs
212
+ deadline_epochs = {
213
+ obj.metric_name: obj.deadline_epoch
214
+ for obj in doctrine.objectives
215
+ if obj.deadline_epoch is not None
216
+ }
217
+
218
+ # Compiled selectors (deterministic rules)
219
+ # For now, this is a placeholder - can be extended with rule compilation
220
+ compiled_selectors = {
221
+ "invariant_checker": {
222
+ "invariants": [inv.model_dump() for inv in doctrine.invariants]
223
+ },
224
+ "lever_validator": {
225
+ "levers": {k: v.model_dump() for k, v in doctrine.levers.items()}
226
+ }
227
+ }
228
+
229
+ return cls(
230
+ normalized_weights=normalized_weights,
231
+ resolved_metric_ids=resolved_metric_ids,
232
+ deadline_epochs=deadline_epochs,
233
+ compiled_selectors=compiled_selectors,
234
+ policy_hash=policy_hash,
235
+ compiled_at=datetime.now(timezone.utc).isoformat()
236
+ )
237
+
238
+
239
+ class ObservationEvent(BaseModel):
240
+ """Observation event - state snapshot at epoch t.
241
+
242
+ Attributes:
243
+ epoch: Epoch number
244
+ metrics: Dictionary of metric values
245
+ timestamp: Observation timestamp
246
+ """
247
+ epoch: int
248
+ metrics: Dict[str, float]
249
+ timestamp: str
250
+
251
+
252
+ class DecisionEvent(BaseModel):
253
+ """Decision event - chosen interventions at epoch t.
254
+
255
+ Attributes:
256
+ epoch: Epoch number
257
+ interventions: List of intervention specifications
258
+ rationale: Human-readable rationale
259
+ decision_hash: Stable hash of the decision
260
+ score: Optimization score
261
+ """
262
+ epoch: int
263
+ interventions: List[Dict[str, Any]]
264
+ rationale: str
265
+ decision_hash: str
266
+ score: float
267
+
268
+
269
+ class OutcomeEvent(BaseModel):
270
+ """Outcome event - observed results after interventions.
271
+
272
+ Attributes:
273
+ epoch: Epoch number
274
+ metrics: Dictionary of metric values after interventions
275
+ timestamp: Outcome timestamp
276
+ """
277
+ epoch: int
278
+ metrics: Dict[str, float]
279
+ timestamp: str
280
+
281
+
282
+ class PolicyEvent(BaseModel):
283
+ """Policy event - policy changes or updates.
284
+
285
+ Attributes:
286
+ epoch: Epoch number
287
+ event_type: Type of policy event ("update", "rollback", etc.)
288
+ payload: Event payload
289
+ """
290
+ epoch: int
291
+ event_type: str
292
+ payload: Dict[str, Any]
293
+
294
+
295
+ class LedgerEvent(BaseModel):
296
+ """Union type for all ledger events.
297
+
298
+ Attributes:
299
+ type: Event type ("observation", "decision", "outcome", "policy")
300
+ epoch: Epoch number
301
+ hash: Stable hash of event payload
302
+ payload: Event payload (ObservationEvent, DecisionEvent, OutcomeEvent, or PolicyEvent)
303
+ """
304
+ type: Literal["observation", "decision", "outcome", "policy"]
305
+ epoch: int
306
+ hash: str
307
+ payload: Dict[str, Any]
308
+
309
+ @classmethod
310
+ def from_observation(cls, event: ObservationEvent) -> "LedgerEvent":
311
+ """Create LedgerEvent from ObservationEvent.
312
+
313
+ Args:
314
+ event: ObservationEvent instance
315
+
316
+ Returns:
317
+ LedgerEvent: Ledger event
318
+ """
319
+ from utils.canonical import stable_hash
320
+ payload_dict = event.model_dump()
321
+ return cls(
322
+ type="observation",
323
+ epoch=event.epoch,
324
+ hash=stable_hash(payload_dict),
325
+ payload=payload_dict
326
+ )
327
+
328
+ @classmethod
329
+ def from_decision(cls, event: DecisionEvent) -> "LedgerEvent":
330
+ """Create LedgerEvent from DecisionEvent.
331
+
332
+ Args:
333
+ event: DecisionEvent instance
334
+
335
+ Returns:
336
+ LedgerEvent: Ledger event
337
+ """
338
+ from utils.canonical import stable_hash
339
+ payload_dict = event.model_dump()
340
+ return cls(
341
+ type="decision",
342
+ epoch=event.epoch,
343
+ hash=stable_hash(payload_dict),
344
+ payload=payload_dict
345
+ )
346
+
347
+ @classmethod
348
+ def from_outcome(cls, event: OutcomeEvent) -> "LedgerEvent":
349
+ """Create LedgerEvent from OutcomeEvent.
350
+
351
+ Args:
352
+ event: OutcomeEvent instance
353
+
354
+ Returns:
355
+ LedgerEvent: Ledger event
356
+ """
357
+ from utils.canonical import stable_hash
358
+ payload_dict = event.model_dump()
359
+ return cls(
360
+ type="outcome",
361
+ epoch=event.epoch,
362
+ hash=stable_hash(payload_dict),
363
+ payload=payload_dict
364
+ )
365
+
366
+ @classmethod
367
+ def from_policy(cls, event: PolicyEvent) -> "LedgerEvent":
368
+ """Create LedgerEvent from PolicyEvent.
369
+
370
+ Args:
371
+ event: PolicyEvent instance
372
+
373
+ Returns:
374
+ LedgerEvent: Ledger event
375
+ """
376
+ from utils.canonical import stable_hash
377
+ payload_dict = event.model_dump()
378
+ return cls(
379
+ type="policy",
380
+ epoch=event.epoch,
381
+ hash=stable_hash(payload_dict),
382
+ payload=payload_dict
383
+ )
384
+
385
+
386
+ class InterventionSpec(BaseModel):
387
+ """Specification for an intervention.
388
+
389
+ Attributes:
390
+ lever_id: ID of the lever to use
391
+ parameters: Dictionary of intervention parameters
392
+ cost: Estimated cost (optional)
393
+ risk: Estimated risk (optional)
394
+ rollback_descriptor: Descriptor for rollback (optional)
395
+ """
396
+ lever_id: str
397
+ parameters: Dict[str, Any]
398
+ cost: Optional[float] = None
399
+ risk: Optional[float] = None
400
+ rollback_descriptor: Optional[Dict[str, Any]] = None
401
+
402
+
403
+ class Intervention(BaseModel):
404
+ """Executable intervention with typed parameters.
405
+
406
+ Attributes:
407
+ spec: Intervention specification
408
+ created_at: Creation timestamp
409
+ executed_at: Execution timestamp (None if not executed)
410
+ """
411
+ spec: InterventionSpec
412
+ created_at: str
413
+ executed_at: Optional[str] = None
414
+
415
+
416
+ class ModelState(BaseModel):
417
+ """Learned parameters θ with covariance and versioning.
418
+
419
+ Attributes:
420
+ parameters: Dictionary of learned parameters (e.g., A, B matrices for RLS)
421
+ covariance: Parameter covariance matrix (for uncertainty quantification)
422
+ version: Model version identifier
423
+ model_hash: Stable hash of the model state
424
+ updated_at: Last update timestamp
425
+ """
426
+ parameters: Dict[str, Any]
427
+ covariance: Optional[Dict[str, Any]] = None
428
+ version: str = "1.0"
429
+ model_hash: str
430
+ updated_at: str
431
+
432
+ @classmethod
433
+ def create(cls, parameters: Dict[str, Any], covariance: Optional[Dict[str, Any]] = None) -> "ModelState":
434
+ """Create a new ModelState.
435
+
436
+ Args:
437
+ parameters: Learned parameters
438
+ covariance: Parameter covariance (optional)
439
+
440
+ Returns:
441
+ ModelState: New model state
442
+ """
443
+ from utils.canonical import stable_hash
444
+ from datetime import timezone
445
+
446
+ state_dict = {
447
+ "parameters": parameters,
448
+ "covariance": covariance or {}
449
+ }
450
+ model_hash = stable_hash(state_dict)
451
+
452
+ return cls(
453
+ parameters=parameters,
454
+ covariance=covariance,
455
+ model_hash=model_hash,
456
+ updated_at=datetime.now(timezone.utc).isoformat()
457
+ )
458
+
templates/__init__.py ADDED
@@ -0,0 +1,38 @@
1
+ """
2
+ Template framework for creating specialized agents.
3
+
4
+ This package provides a base template class and modular components for building
5
+ domain-specific agents with LLM integration, graph management, prediction frameworks,
6
+ and statistical methods.
7
+
8
+ Features can be used as "drag-and-drop" components via mixins or the module registry.
9
+ """
10
+
11
+ from typing import Optional
12
+
13
+ try:
14
+ from .base_specialized_agent import BaseSpecializedAgent
15
+ from .feature_mixins import (
16
+ GraphFeatureMixin,
17
+ PredictionFeatureMixin,
18
+ StatisticsFeatureMixin,
19
+ LLMFeatureMixin,
20
+ FullFeatureMixin
21
+ )
22
+ from .module_registry import ModuleRegistry, compose_agent, FeatureComposer
23
+ __all__ = [
24
+ "BaseSpecializedAgent",
25
+ "GraphFeatureMixin",
26
+ "PredictionFeatureMixin",
27
+ "StatisticsFeatureMixin",
28
+ "LLMFeatureMixin",
29
+ "FullFeatureMixin",
30
+ "ModuleRegistry",
31
+ "compose_agent",
32
+ "FeatureComposer",
33
+ ]
34
+ except ImportError:
35
+ __all__ = []
36
+
37
+ __version__ = "0.2.0"
38
+
@@ -0,0 +1,195 @@
1
+ """
2
+ Base template class for specialized agents.
3
+
4
+ Provides common patterns for initialization, schema handling, memory management,
5
+ and LLM integration that can be extended by domain-specific agents.
6
+ """
7
+
8
+ from abc import ABC, abstractmethod
9
+ from typing import Dict, Any, List, Optional, Union
10
+ import threading
11
+ import logging
12
+ from swarms.structs.agent import Agent
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class BaseSpecializedAgent(Agent, ABC):
18
+ """
19
+ Base template class for creating specialized agents.
20
+
21
+ This class provides common patterns for:
22
+ - Schema-based tool definition
23
+ - Agent initialization with domain-specific setup
24
+ - Memory management for multi-loop reasoning
25
+ - Caching infrastructure
26
+ - Async wrapper utilities
27
+
28
+ Subclasses should implement:
29
+ - _get_domain_schema(): Return the tool schema for this domain
30
+ - _build_domain_prompt(task: str): Build domain-specific prompt
31
+ - _domain_specific_setup(): Initialize domain-specific attributes
32
+ """
33
+
34
+ def __init__(
35
+ self,
36
+ max_loops: Optional[Union[int, str]] = 3,
37
+ agent_name: str = "specialized-agent",
38
+ agent_description: str = "Specialized Agent",
39
+ description: Optional[str] = None,
40
+ model_name: str = "gpt-4o",
41
+ system_prompt: Optional[str] = None,
42
+ global_system_prompt: Optional[str] = None,
43
+ secondary_system_prompt: Optional[str] = None,
44
+ seed: Optional[int] = None,
45
+ **kwargs,
46
+ ):
47
+ """
48
+ Initialize the specialized agent.
49
+
50
+ Args:
51
+ max_loops: Maximum number of reasoning loops
52
+ agent_name: Unique identifier for the agent
53
+ agent_description: Human-readable description
54
+ description: Backwards-compatible alias for agent_description
55
+ model_name: LLM model to use
56
+ system_prompt: System-level instructions
57
+ global_system_prompt: Global system prompt
58
+ secondary_system_prompt: Secondary system prompt
59
+ seed: Random seed for reproducibility
60
+ **kwargs: Additional arguments passed to base Agent
61
+ """
62
+ # Get domain-specific schema
63
+ domain_schema = self._get_domain_schema()
64
+
65
+ # Backwards-compatible alias for description
66
+ agent_description = description or agent_description
67
+
68
+ # Prepare agent kwargs
69
+ agent_kwargs = {
70
+ "agent_name": agent_name,
71
+ "agent_description": agent_description,
72
+ "model_name": model_name,
73
+ "max_loops": 1, # Individual LLM calls use 1 loop, we handle multi-loop reasoning
74
+ "tools_list_dictionary": [domain_schema] if domain_schema else [],
75
+ "output_type": "final",
76
+ **kwargs,
77
+ }
78
+
79
+ # Add optional prompts
80
+ if system_prompt is not None:
81
+ agent_kwargs["system_prompt"] = system_prompt
82
+ if global_system_prompt is not None:
83
+ agent_kwargs["global_system_prompt"] = global_system_prompt
84
+ if secondary_system_prompt is not None:
85
+ agent_kwargs["secondary_system_prompt"] = secondary_system_prompt
86
+
87
+ # Initialize base Agent
88
+ super().__init__(**agent_kwargs)
89
+
90
+ # Store max loops for multi-loop reasoning
91
+ self.domain_max_loops = max_loops
92
+ self.seed = seed if seed is not None else 42
93
+
94
+ # Initialize memory for multi-loop reasoning
95
+ self.domain_memory: List[Dict[str, Any]] = []
96
+
97
+ # Initialize caching infrastructure
98
+ self._prediction_cache: Dict[Any, Any] = {}
99
+ self._prediction_cache_order: List[Any] = []
100
+ self._prediction_cache_max: int = 1000
101
+ self._cache_enabled: bool = True
102
+ self._prediction_cache_lock = threading.Lock()
103
+
104
+ # Call domain-specific setup
105
+ self._domain_specific_setup()
106
+
107
+ @abstractmethod
108
+ def _get_domain_schema(self) -> Optional[Dict[str, Any]]:
109
+ """
110
+ Return the tool schema for this domain.
111
+
112
+ Returns:
113
+ Dict containing the function schema, or None if no schema needed
114
+ """
115
+ pass
116
+
117
+ @abstractmethod
118
+ def _build_domain_prompt(self, task: str) -> str:
119
+ """
120
+ Build a domain-specific prompt for the given task.
121
+
122
+ Args:
123
+ task: The task description
124
+
125
+ Returns:
126
+ Formatted prompt string
127
+ """
128
+ pass
129
+
130
+ def _domain_specific_setup(self) -> None:
131
+ """
132
+ Initialize domain-specific attributes.
133
+
134
+ Override this method in subclasses to set up domain-specific
135
+ data structures, graphs, models, etc.
136
+ """
137
+ pass
138
+
139
+ def step(self, task: str) -> str:
140
+ """
141
+ Execute a single step of reasoning.
142
+
143
+ Args:
144
+ task: The task to execute
145
+
146
+ Returns:
147
+ Response string from the agent
148
+ """
149
+ response = super().run(task)
150
+ return response
151
+
152
+ def _build_memory_context(self, last_n: int = 2) -> str:
153
+ """
154
+ Build context from recent memory steps.
155
+
156
+ Args:
157
+ last_n: Number of recent steps to include
158
+
159
+ Returns:
160
+ Formatted memory context string
161
+ """
162
+ context_parts = []
163
+ for step in self.domain_memory[-last_n:]:
164
+ context_parts.append(f"Step {step.get('step', '?')}: {step.get('analysis', '')}")
165
+ return "\n".join(context_parts)
166
+
167
+ def _synthesize_analysis(self, task: str) -> str:
168
+ """
169
+ Synthesize a final analysis from the reasoning steps.
170
+
171
+ Args:
172
+ task: The original task
173
+
174
+ Returns:
175
+ Synthesized analysis string
176
+ """
177
+ synthesis_prompt = f"Based on the analysis steps performed, synthesize a concise report for: {task}"
178
+ return self.step(synthesis_prompt)
179
+
180
+ def clear_cache(self) -> None:
181
+ """Clear the prediction cache."""
182
+ with self._prediction_cache_lock:
183
+ self._prediction_cache.clear()
184
+ self._prediction_cache_order.clear()
185
+
186
+ def enable_cache(self, flag: bool) -> None:
187
+ """
188
+ Enable or disable caching.
189
+
190
+ Args:
191
+ flag: True to enable, False to disable
192
+ """
193
+ with self._prediction_cache_lock:
194
+ self._cache_enabled = bool(flag)
195
+