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.
- .github/ISSUE_TEMPLATE/bug_report.md +65 -0
- .github/ISSUE_TEMPLATE/feature_request.md +41 -0
- .github/PULL_REQUEST_TEMPLATE.md +20 -0
- .github/workflows/publish-manual.yml +61 -0
- .github/workflows/publish.yml +64 -0
- .gitignore +214 -0
- CRCA.py +4156 -0
- LICENSE +201 -0
- MANIFEST.in +43 -0
- PKG-INFO +5035 -0
- README.md +4959 -0
- __init__.py +17 -0
- branches/CRCA-Q.py +2728 -0
- branches/crca_cg/corposwarm.py +9065 -0
- branches/crca_cg/fix_rancher_docker_creds.ps1 +155 -0
- branches/crca_cg/package.json +5 -0
- branches/crca_cg/test_bolt_integration.py +446 -0
- branches/crca_cg/test_corposwarm_comprehensive.py +773 -0
- branches/crca_cg/test_new_features.py +163 -0
- branches/crca_sd/__init__.py +149 -0
- branches/crca_sd/crca_sd_core.py +770 -0
- branches/crca_sd/crca_sd_governance.py +1325 -0
- branches/crca_sd/crca_sd_mpc.py +1130 -0
- branches/crca_sd/crca_sd_realtime.py +1844 -0
- branches/crca_sd/crca_sd_tui.py +1133 -0
- crca-1.4.0.dist-info/METADATA +5035 -0
- crca-1.4.0.dist-info/RECORD +501 -0
- crca-1.4.0.dist-info/WHEEL +4 -0
- crca-1.4.0.dist-info/licenses/LICENSE +201 -0
- docs/CRCA-Q.md +2333 -0
- examples/config.yaml.example +25 -0
- examples/crca_sd_example.py +513 -0
- examples/data_broker_example.py +294 -0
- examples/logistics_corporation.py +861 -0
- examples/palantir_example.py +299 -0
- examples/policy_bench.py +934 -0
- examples/pridnestrovia-sd.py +705 -0
- examples/pridnestrovia_realtime.py +1902 -0
- prompts/__init__.py +10 -0
- prompts/default_crca.py +101 -0
- pyproject.toml +151 -0
- requirements.txt +76 -0
- schemas/__init__.py +43 -0
- schemas/mcpSchemas.py +51 -0
- schemas/policy.py +458 -0
- templates/__init__.py +38 -0
- templates/base_specialized_agent.py +195 -0
- templates/drift_detection.py +325 -0
- templates/examples/causal_agent_template.py +309 -0
- templates/examples/drag_drop_example.py +213 -0
- templates/examples/logistics_agent_template.py +207 -0
- templates/examples/trading_agent_template.py +206 -0
- templates/feature_mixins.py +253 -0
- templates/graph_management.py +442 -0
- templates/llm_integration.py +194 -0
- templates/module_registry.py +276 -0
- templates/mpc_planner.py +280 -0
- templates/policy_loop.py +1168 -0
- templates/prediction_framework.py +448 -0
- templates/statistical_methods.py +778 -0
- tests/sanity.yml +31 -0
- tests/sanity_check +406 -0
- tests/test_core.py +47 -0
- tests/test_crca_excel.py +166 -0
- tests/test_crca_sd.py +780 -0
- tests/test_data_broker.py +424 -0
- tests/test_palantir.py +349 -0
- tools/__init__.py +38 -0
- tools/actuators.py +437 -0
- tools/bolt.diy/Dockerfile +103 -0
- tools/bolt.diy/app/components/@settings/core/AvatarDropdown.tsx +175 -0
- tools/bolt.diy/app/components/@settings/core/ControlPanel.tsx +345 -0
- tools/bolt.diy/app/components/@settings/core/constants.tsx +108 -0
- tools/bolt.diy/app/components/@settings/core/types.ts +114 -0
- tools/bolt.diy/app/components/@settings/index.ts +12 -0
- tools/bolt.diy/app/components/@settings/shared/components/TabTile.tsx +151 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionForm.tsx +193 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionTestIndicator.tsx +60 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ErrorState.tsx +102 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/LoadingState.tsx +94 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ServiceHeader.tsx +72 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/index.ts +6 -0
- tools/bolt.diy/app/components/@settings/tabs/data/DataTab.tsx +721 -0
- tools/bolt.diy/app/components/@settings/tabs/data/DataVisualization.tsx +384 -0
- tools/bolt.diy/app/components/@settings/tabs/event-logs/EventLogsTab.tsx +1013 -0
- tools/bolt.diy/app/components/@settings/tabs/features/FeaturesTab.tsx +295 -0
- tools/bolt.diy/app/components/@settings/tabs/github/GitHubTab.tsx +281 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubAuthDialog.tsx +173 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubCacheManager.tsx +367 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubConnection.tsx +233 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubErrorBoundary.tsx +105 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubProgressiveLoader.tsx +266 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositoryCard.tsx +121 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositorySelector.tsx +312 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubStats.tsx +291 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubUserProfile.tsx +46 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/GitHubStateIndicators.tsx +264 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/RepositoryCard.tsx +361 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/index.ts +11 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/GitLabTab.tsx +305 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabAuthDialog.tsx +186 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabConnection.tsx +253 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabRepositorySelector.tsx +358 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryCard.tsx +79 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryList.tsx +142 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/StatsDisplay.tsx +91 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/index.ts +4 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerList.tsx +99 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerListItem.tsx +70 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpStatusBadge.tsx +37 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpTab.tsx +239 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/NetlifyTab.tsx +1393 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/components/NetlifyConnection.tsx +990 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/components/index.ts +1 -0
- tools/bolt.diy/app/components/@settings/tabs/notifications/NotificationsTab.tsx +300 -0
- tools/bolt.diy/app/components/@settings/tabs/profile/ProfileTab.tsx +181 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/cloud/CloudProvidersTab.tsx +308 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ErrorBoundary.tsx +68 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/HealthStatusBadge.tsx +64 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/LoadingSkeleton.tsx +107 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/LocalProvidersTab.tsx +556 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ModelCard.tsx +106 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ProviderCard.tsx +120 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/SetupGuide.tsx +671 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/StatusDashboard.tsx +91 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/types.ts +44 -0
- tools/bolt.diy/app/components/@settings/tabs/settings/SettingsTab.tsx +215 -0
- tools/bolt.diy/app/components/@settings/tabs/supabase/SupabaseTab.tsx +1089 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/VercelTab.tsx +909 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/components/VercelConnection.tsx +368 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/components/index.ts +1 -0
- tools/bolt.diy/app/components/@settings/utils/tab-helpers.ts +54 -0
- tools/bolt.diy/app/components/chat/APIKeyManager.tsx +169 -0
- tools/bolt.diy/app/components/chat/Artifact.tsx +296 -0
- tools/bolt.diy/app/components/chat/AssistantMessage.tsx +192 -0
- tools/bolt.diy/app/components/chat/BaseChat.module.scss +47 -0
- tools/bolt.diy/app/components/chat/BaseChat.tsx +522 -0
- tools/bolt.diy/app/components/chat/Chat.client.tsx +670 -0
- tools/bolt.diy/app/components/chat/ChatAlert.tsx +108 -0
- tools/bolt.diy/app/components/chat/ChatBox.tsx +334 -0
- tools/bolt.diy/app/components/chat/CodeBlock.module.scss +10 -0
- tools/bolt.diy/app/components/chat/CodeBlock.tsx +85 -0
- tools/bolt.diy/app/components/chat/DicussMode.tsx +17 -0
- tools/bolt.diy/app/components/chat/ExamplePrompts.tsx +37 -0
- tools/bolt.diy/app/components/chat/FilePreview.tsx +38 -0
- tools/bolt.diy/app/components/chat/GitCloneButton.tsx +327 -0
- tools/bolt.diy/app/components/chat/ImportFolderButton.tsx +141 -0
- tools/bolt.diy/app/components/chat/LLMApiAlert.tsx +109 -0
- tools/bolt.diy/app/components/chat/MCPTools.tsx +129 -0
- tools/bolt.diy/app/components/chat/Markdown.module.scss +171 -0
- tools/bolt.diy/app/components/chat/Markdown.spec.ts +48 -0
- tools/bolt.diy/app/components/chat/Markdown.tsx +252 -0
- tools/bolt.diy/app/components/chat/Messages.client.tsx +102 -0
- tools/bolt.diy/app/components/chat/ModelSelector.tsx +797 -0
- tools/bolt.diy/app/components/chat/NetlifyDeploymentLink.client.tsx +51 -0
- tools/bolt.diy/app/components/chat/ProgressCompilation.tsx +110 -0
- tools/bolt.diy/app/components/chat/ScreenshotStateManager.tsx +33 -0
- tools/bolt.diy/app/components/chat/SendButton.client.tsx +39 -0
- tools/bolt.diy/app/components/chat/SpeechRecognition.tsx +28 -0
- tools/bolt.diy/app/components/chat/StarterTemplates.tsx +38 -0
- tools/bolt.diy/app/components/chat/SupabaseAlert.tsx +199 -0
- tools/bolt.diy/app/components/chat/SupabaseConnection.tsx +339 -0
- tools/bolt.diy/app/components/chat/ThoughtBox.tsx +43 -0
- tools/bolt.diy/app/components/chat/ToolInvocations.tsx +409 -0
- tools/bolt.diy/app/components/chat/UserMessage.tsx +101 -0
- tools/bolt.diy/app/components/chat/VercelDeploymentLink.client.tsx +158 -0
- tools/bolt.diy/app/components/chat/chatExportAndImport/ExportChatButton.tsx +49 -0
- tools/bolt.diy/app/components/chat/chatExportAndImport/ImportButtons.tsx +96 -0
- tools/bolt.diy/app/components/deploy/DeployAlert.tsx +197 -0
- tools/bolt.diy/app/components/deploy/DeployButton.tsx +277 -0
- tools/bolt.diy/app/components/deploy/GitHubDeploy.client.tsx +171 -0
- tools/bolt.diy/app/components/deploy/GitHubDeploymentDialog.tsx +1041 -0
- tools/bolt.diy/app/components/deploy/GitLabDeploy.client.tsx +171 -0
- tools/bolt.diy/app/components/deploy/GitLabDeploymentDialog.tsx +764 -0
- tools/bolt.diy/app/components/deploy/NetlifyDeploy.client.tsx +246 -0
- tools/bolt.diy/app/components/deploy/VercelDeploy.client.tsx +235 -0
- tools/bolt.diy/app/components/editor/codemirror/BinaryContent.tsx +7 -0
- tools/bolt.diy/app/components/editor/codemirror/CodeMirrorEditor.tsx +555 -0
- tools/bolt.diy/app/components/editor/codemirror/EnvMasking.ts +80 -0
- tools/bolt.diy/app/components/editor/codemirror/cm-theme.ts +192 -0
- tools/bolt.diy/app/components/editor/codemirror/indent.ts +68 -0
- tools/bolt.diy/app/components/editor/codemirror/languages.ts +112 -0
- tools/bolt.diy/app/components/git/GitUrlImport.client.tsx +147 -0
- tools/bolt.diy/app/components/header/Header.tsx +42 -0
- tools/bolt.diy/app/components/header/HeaderActionButtons.client.tsx +54 -0
- tools/bolt.diy/app/components/mandate/MandateSubmission.tsx +167 -0
- tools/bolt.diy/app/components/observability/DeploymentStatus.tsx +168 -0
- tools/bolt.diy/app/components/observability/EventTimeline.tsx +119 -0
- tools/bolt.diy/app/components/observability/FileDiffViewer.tsx +121 -0
- tools/bolt.diy/app/components/observability/GovernanceStatus.tsx +197 -0
- tools/bolt.diy/app/components/observability/GovernorMetrics.tsx +246 -0
- tools/bolt.diy/app/components/observability/LogStream.tsx +244 -0
- tools/bolt.diy/app/components/observability/MandateDetails.tsx +201 -0
- tools/bolt.diy/app/components/observability/ObservabilityDashboard.tsx +200 -0
- tools/bolt.diy/app/components/sidebar/HistoryItem.tsx +187 -0
- tools/bolt.diy/app/components/sidebar/Menu.client.tsx +536 -0
- tools/bolt.diy/app/components/sidebar/date-binning.ts +59 -0
- tools/bolt.diy/app/components/txt +1 -0
- tools/bolt.diy/app/components/ui/BackgroundRays/index.tsx +18 -0
- tools/bolt.diy/app/components/ui/BackgroundRays/styles.module.scss +246 -0
- tools/bolt.diy/app/components/ui/Badge.tsx +53 -0
- tools/bolt.diy/app/components/ui/BranchSelector.tsx +270 -0
- tools/bolt.diy/app/components/ui/Breadcrumbs.tsx +101 -0
- tools/bolt.diy/app/components/ui/Button.tsx +46 -0
- tools/bolt.diy/app/components/ui/Card.tsx +55 -0
- tools/bolt.diy/app/components/ui/Checkbox.tsx +32 -0
- tools/bolt.diy/app/components/ui/CloseButton.tsx +49 -0
- tools/bolt.diy/app/components/ui/CodeBlock.tsx +103 -0
- tools/bolt.diy/app/components/ui/Collapsible.tsx +9 -0
- tools/bolt.diy/app/components/ui/ColorSchemeDialog.tsx +378 -0
- tools/bolt.diy/app/components/ui/Dialog.tsx +449 -0
- tools/bolt.diy/app/components/ui/Dropdown.tsx +63 -0
- tools/bolt.diy/app/components/ui/EmptyState.tsx +154 -0
- tools/bolt.diy/app/components/ui/FileIcon.tsx +346 -0
- tools/bolt.diy/app/components/ui/FilterChip.tsx +92 -0
- tools/bolt.diy/app/components/ui/GlowingEffect.tsx +192 -0
- tools/bolt.diy/app/components/ui/GradientCard.tsx +100 -0
- tools/bolt.diy/app/components/ui/IconButton.tsx +84 -0
- tools/bolt.diy/app/components/ui/Input.tsx +22 -0
- tools/bolt.diy/app/components/ui/Label.tsx +20 -0
- tools/bolt.diy/app/components/ui/LoadingDots.tsx +27 -0
- tools/bolt.diy/app/components/ui/LoadingOverlay.tsx +32 -0
- tools/bolt.diy/app/components/ui/PanelHeader.tsx +20 -0
- tools/bolt.diy/app/components/ui/PanelHeaderButton.tsx +36 -0
- tools/bolt.diy/app/components/ui/Popover.tsx +29 -0
- tools/bolt.diy/app/components/ui/Progress.tsx +22 -0
- tools/bolt.diy/app/components/ui/RepositoryStats.tsx +87 -0
- tools/bolt.diy/app/components/ui/ScrollArea.tsx +41 -0
- tools/bolt.diy/app/components/ui/SearchInput.tsx +80 -0
- tools/bolt.diy/app/components/ui/SearchResultItem.tsx +134 -0
- tools/bolt.diy/app/components/ui/Separator.tsx +22 -0
- tools/bolt.diy/app/components/ui/SettingsButton.tsx +35 -0
- tools/bolt.diy/app/components/ui/Slider.tsx +73 -0
- tools/bolt.diy/app/components/ui/StatusIndicator.tsx +90 -0
- tools/bolt.diy/app/components/ui/Switch.tsx +37 -0
- tools/bolt.diy/app/components/ui/Tabs.tsx +52 -0
- tools/bolt.diy/app/components/ui/TabsWithSlider.tsx +112 -0
- tools/bolt.diy/app/components/ui/ThemeSwitch.tsx +29 -0
- tools/bolt.diy/app/components/ui/Tooltip.tsx +122 -0
- tools/bolt.diy/app/components/ui/index.ts +38 -0
- tools/bolt.diy/app/components/ui/use-toast.ts +66 -0
- tools/bolt.diy/app/components/workbench/DiffView.tsx +796 -0
- tools/bolt.diy/app/components/workbench/EditorPanel.tsx +174 -0
- tools/bolt.diy/app/components/workbench/ExpoQrModal.tsx +55 -0
- tools/bolt.diy/app/components/workbench/FileBreadcrumb.tsx +150 -0
- tools/bolt.diy/app/components/workbench/FileTree.tsx +565 -0
- tools/bolt.diy/app/components/workbench/Inspector.tsx +126 -0
- tools/bolt.diy/app/components/workbench/InspectorPanel.tsx +146 -0
- tools/bolt.diy/app/components/workbench/LockManager.tsx +262 -0
- tools/bolt.diy/app/components/workbench/PortDropdown.tsx +91 -0
- tools/bolt.diy/app/components/workbench/Preview.tsx +1049 -0
- tools/bolt.diy/app/components/workbench/ScreenshotSelector.tsx +293 -0
- tools/bolt.diy/app/components/workbench/Search.tsx +257 -0
- tools/bolt.diy/app/components/workbench/Workbench.client.tsx +506 -0
- tools/bolt.diy/app/components/workbench/terminal/Terminal.tsx +131 -0
- tools/bolt.diy/app/components/workbench/terminal/TerminalManager.tsx +68 -0
- tools/bolt.diy/app/components/workbench/terminal/TerminalTabs.tsx +277 -0
- tools/bolt.diy/app/components/workbench/terminal/theme.ts +36 -0
- tools/bolt.diy/app/components/workflow/WorkflowPhase.tsx +109 -0
- tools/bolt.diy/app/components/workflow/WorkflowStatus.tsx +60 -0
- tools/bolt.diy/app/components/workflow/WorkflowTimeline.tsx +150 -0
- tools/bolt.diy/app/entry.client.tsx +7 -0
- tools/bolt.diy/app/entry.server.tsx +80 -0
- tools/bolt.diy/app/root.tsx +156 -0
- tools/bolt.diy/app/routes/_index.tsx +175 -0
- tools/bolt.diy/app/routes/api.bug-report.ts +254 -0
- tools/bolt.diy/app/routes/api.chat.ts +463 -0
- tools/bolt.diy/app/routes/api.check-env-key.ts +41 -0
- tools/bolt.diy/app/routes/api.configured-providers.ts +110 -0
- tools/bolt.diy/app/routes/api.corporate-swarm-status.ts +55 -0
- tools/bolt.diy/app/routes/api.enhancer.ts +137 -0
- tools/bolt.diy/app/routes/api.export-api-keys.ts +44 -0
- tools/bolt.diy/app/routes/api.git-info.ts +69 -0
- tools/bolt.diy/app/routes/api.git-proxy.$.ts +178 -0
- tools/bolt.diy/app/routes/api.github-branches.ts +166 -0
- tools/bolt.diy/app/routes/api.github-deploy.ts +67 -0
- tools/bolt.diy/app/routes/api.github-stats.ts +198 -0
- tools/bolt.diy/app/routes/api.github-template.ts +242 -0
- tools/bolt.diy/app/routes/api.github-user.ts +287 -0
- tools/bolt.diy/app/routes/api.gitlab-branches.ts +143 -0
- tools/bolt.diy/app/routes/api.gitlab-deploy.ts +67 -0
- tools/bolt.diy/app/routes/api.gitlab-projects.ts +105 -0
- tools/bolt.diy/app/routes/api.health.ts +8 -0
- tools/bolt.diy/app/routes/api.llmcall.ts +298 -0
- tools/bolt.diy/app/routes/api.mandate.ts +351 -0
- tools/bolt.diy/app/routes/api.mcp-check.ts +16 -0
- tools/bolt.diy/app/routes/api.mcp-update-config.ts +23 -0
- tools/bolt.diy/app/routes/api.models.$provider.ts +2 -0
- tools/bolt.diy/app/routes/api.models.ts +90 -0
- tools/bolt.diy/app/routes/api.netlify-deploy.ts +240 -0
- tools/bolt.diy/app/routes/api.netlify-user.ts +142 -0
- tools/bolt.diy/app/routes/api.supabase-user.ts +199 -0
- tools/bolt.diy/app/routes/api.supabase.query.ts +92 -0
- tools/bolt.diy/app/routes/api.supabase.ts +56 -0
- tools/bolt.diy/app/routes/api.supabase.variables.ts +32 -0
- tools/bolt.diy/app/routes/api.system.diagnostics.ts +142 -0
- tools/bolt.diy/app/routes/api.system.disk-info.ts +311 -0
- tools/bolt.diy/app/routes/api.system.git-info.ts +332 -0
- tools/bolt.diy/app/routes/api.update.ts +21 -0
- tools/bolt.diy/app/routes/api.vercel-deploy.ts +497 -0
- tools/bolt.diy/app/routes/api.vercel-user.ts +161 -0
- tools/bolt.diy/app/routes/api.workflow-status.$proposalId.ts +309 -0
- tools/bolt.diy/app/routes/chat.$id.tsx +8 -0
- tools/bolt.diy/app/routes/execute.$mandateId.tsx +432 -0
- tools/bolt.diy/app/routes/git.tsx +25 -0
- tools/bolt.diy/app/routes/observability.$mandateId.tsx +50 -0
- tools/bolt.diy/app/routes/webcontainer.connect.$id.tsx +32 -0
- tools/bolt.diy/app/routes/webcontainer.preview.$id.tsx +97 -0
- tools/bolt.diy/app/routes/workflow.$proposalId.tsx +170 -0
- tools/bolt.diy/app/styles/animations.scss +49 -0
- tools/bolt.diy/app/styles/components/code.scss +9 -0
- tools/bolt.diy/app/styles/components/editor.scss +135 -0
- tools/bolt.diy/app/styles/components/resize-handle.scss +30 -0
- tools/bolt.diy/app/styles/components/terminal.scss +3 -0
- tools/bolt.diy/app/styles/components/toast.scss +23 -0
- tools/bolt.diy/app/styles/diff-view.css +72 -0
- tools/bolt.diy/app/styles/index.scss +73 -0
- tools/bolt.diy/app/styles/variables.scss +255 -0
- tools/bolt.diy/app/styles/z-index.scss +37 -0
- tools/bolt.diy/app/types/GitHub.ts +182 -0
- tools/bolt.diy/app/types/GitLab.ts +103 -0
- tools/bolt.diy/app/types/actions.ts +85 -0
- tools/bolt.diy/app/types/artifact.ts +5 -0
- tools/bolt.diy/app/types/context.ts +26 -0
- tools/bolt.diy/app/types/design-scheme.ts +93 -0
- tools/bolt.diy/app/types/global.d.ts +13 -0
- tools/bolt.diy/app/types/mandate.ts +333 -0
- tools/bolt.diy/app/types/model.ts +25 -0
- tools/bolt.diy/app/types/netlify.ts +94 -0
- tools/bolt.diy/app/types/supabase.ts +54 -0
- tools/bolt.diy/app/types/template.ts +8 -0
- tools/bolt.diy/app/types/terminal.ts +9 -0
- tools/bolt.diy/app/types/theme.ts +1 -0
- tools/bolt.diy/app/types/vercel.ts +67 -0
- tools/bolt.diy/app/utils/buffer.ts +29 -0
- tools/bolt.diy/app/utils/classNames.ts +65 -0
- tools/bolt.diy/app/utils/constants.ts +147 -0
- tools/bolt.diy/app/utils/debounce.ts +13 -0
- tools/bolt.diy/app/utils/debugLogger.ts +1284 -0
- tools/bolt.diy/app/utils/diff.spec.ts +11 -0
- tools/bolt.diy/app/utils/diff.ts +117 -0
- tools/bolt.diy/app/utils/easings.ts +3 -0
- tools/bolt.diy/app/utils/fileLocks.ts +96 -0
- tools/bolt.diy/app/utils/fileUtils.ts +121 -0
- tools/bolt.diy/app/utils/folderImport.ts +73 -0
- tools/bolt.diy/app/utils/formatSize.ts +12 -0
- tools/bolt.diy/app/utils/getLanguageFromExtension.ts +24 -0
- tools/bolt.diy/app/utils/githubStats.ts +9 -0
- tools/bolt.diy/app/utils/gitlabStats.ts +54 -0
- tools/bolt.diy/app/utils/logger.ts +162 -0
- tools/bolt.diy/app/utils/markdown.ts +155 -0
- tools/bolt.diy/app/utils/mobile.ts +4 -0
- tools/bolt.diy/app/utils/os.ts +4 -0
- tools/bolt.diy/app/utils/path.ts +19 -0
- tools/bolt.diy/app/utils/projectCommands.ts +197 -0
- tools/bolt.diy/app/utils/promises.ts +19 -0
- tools/bolt.diy/app/utils/react.ts +6 -0
- tools/bolt.diy/app/utils/sampler.ts +49 -0
- tools/bolt.diy/app/utils/selectStarterTemplate.ts +255 -0
- tools/bolt.diy/app/utils/shell.ts +384 -0
- tools/bolt.diy/app/utils/stacktrace.ts +27 -0
- tools/bolt.diy/app/utils/stripIndent.ts +23 -0
- tools/bolt.diy/app/utils/terminal.ts +11 -0
- tools/bolt.diy/app/utils/unreachable.ts +3 -0
- tools/bolt.diy/app/vite-env.d.ts +2 -0
- tools/bolt.diy/assets/entitlements.mac.plist +25 -0
- tools/bolt.diy/assets/icons/icon.icns +0 -0
- tools/bolt.diy/assets/icons/icon.ico +0 -0
- tools/bolt.diy/assets/icons/icon.png +0 -0
- tools/bolt.diy/bindings.js +78 -0
- tools/bolt.diy/bindings.sh +33 -0
- tools/bolt.diy/docker-compose.yaml +145 -0
- tools/bolt.diy/electron/main/index.ts +201 -0
- tools/bolt.diy/electron/main/tsconfig.json +30 -0
- tools/bolt.diy/electron/main/ui/menu.ts +29 -0
- tools/bolt.diy/electron/main/ui/window.ts +54 -0
- tools/bolt.diy/electron/main/utils/auto-update.ts +110 -0
- tools/bolt.diy/electron/main/utils/constants.ts +4 -0
- tools/bolt.diy/electron/main/utils/cookie.ts +40 -0
- tools/bolt.diy/electron/main/utils/reload.ts +35 -0
- tools/bolt.diy/electron/main/utils/serve.ts +71 -0
- tools/bolt.diy/electron/main/utils/store.ts +3 -0
- tools/bolt.diy/electron/main/utils/vite-server.ts +44 -0
- tools/bolt.diy/electron/main/vite.config.ts +44 -0
- tools/bolt.diy/electron/preload/index.ts +22 -0
- tools/bolt.diy/electron/preload/tsconfig.json +7 -0
- tools/bolt.diy/electron/preload/vite.config.ts +31 -0
- tools/bolt.diy/electron-builder.yml +64 -0
- tools/bolt.diy/electron-update.yml +4 -0
- tools/bolt.diy/eslint.config.mjs +57 -0
- tools/bolt.diy/functions/[[path]].ts +12 -0
- tools/bolt.diy/icons/angular.svg +1 -0
- tools/bolt.diy/icons/astro.svg +8 -0
- tools/bolt.diy/icons/chat.svg +1 -0
- tools/bolt.diy/icons/expo-brand.svg +1 -0
- tools/bolt.diy/icons/expo.svg +4 -0
- tools/bolt.diy/icons/logo-text.svg +1 -0
- tools/bolt.diy/icons/logo.svg +4 -0
- tools/bolt.diy/icons/mcp.svg +1 -0
- tools/bolt.diy/icons/nativescript.svg +1 -0
- tools/bolt.diy/icons/netlify.svg +10 -0
- tools/bolt.diy/icons/nextjs.svg +1 -0
- tools/bolt.diy/icons/nuxt.svg +1 -0
- tools/bolt.diy/icons/qwik.svg +1 -0
- tools/bolt.diy/icons/react.svg +1 -0
- tools/bolt.diy/icons/remix.svg +24 -0
- tools/bolt.diy/icons/remotion.svg +1 -0
- tools/bolt.diy/icons/shadcn.svg +21 -0
- tools/bolt.diy/icons/slidev.svg +60 -0
- tools/bolt.diy/icons/solidjs.svg +1 -0
- tools/bolt.diy/icons/stars.svg +1 -0
- tools/bolt.diy/icons/svelte.svg +1 -0
- tools/bolt.diy/icons/typescript.svg +1 -0
- tools/bolt.diy/icons/vite.svg +1 -0
- tools/bolt.diy/icons/vue.svg +1 -0
- tools/bolt.diy/load-context.ts +9 -0
- tools/bolt.diy/notarize.cjs +31 -0
- tools/bolt.diy/package.json +218 -0
- tools/bolt.diy/playwright.config.preview.ts +35 -0
- tools/bolt.diy/pre-start.cjs +26 -0
- tools/bolt.diy/public/apple-touch-icon-precomposed.png +0 -0
- tools/bolt.diy/public/apple-touch-icon.png +0 -0
- tools/bolt.diy/public/favicon.ico +0 -0
- tools/bolt.diy/public/favicon.svg +4 -0
- tools/bolt.diy/public/icons/AmazonBedrock.svg +1 -0
- tools/bolt.diy/public/icons/Anthropic.svg +4 -0
- tools/bolt.diy/public/icons/Cohere.svg +4 -0
- tools/bolt.diy/public/icons/Deepseek.svg +5 -0
- tools/bolt.diy/public/icons/Default.svg +4 -0
- tools/bolt.diy/public/icons/Google.svg +4 -0
- tools/bolt.diy/public/icons/Groq.svg +4 -0
- tools/bolt.diy/public/icons/HuggingFace.svg +4 -0
- tools/bolt.diy/public/icons/Hyperbolic.svg +3 -0
- tools/bolt.diy/public/icons/LMStudio.svg +5 -0
- tools/bolt.diy/public/icons/Mistral.svg +4 -0
- tools/bolt.diy/public/icons/Ollama.svg +4 -0
- tools/bolt.diy/public/icons/OpenAI.svg +4 -0
- tools/bolt.diy/public/icons/OpenAILike.svg +4 -0
- tools/bolt.diy/public/icons/OpenRouter.svg +4 -0
- tools/bolt.diy/public/icons/Perplexity.svg +4 -0
- tools/bolt.diy/public/icons/Together.svg +4 -0
- tools/bolt.diy/public/icons/xAI.svg +5 -0
- tools/bolt.diy/public/inspector-script.js +292 -0
- tools/bolt.diy/public/logo-dark-styled.png +0 -0
- tools/bolt.diy/public/logo-dark.png +0 -0
- tools/bolt.diy/public/logo-light-styled.png +0 -0
- tools/bolt.diy/public/logo-light.png +0 -0
- tools/bolt.diy/public/logo.svg +15 -0
- tools/bolt.diy/public/social_preview_index.jpg +0 -0
- tools/bolt.diy/scripts/clean.js +45 -0
- tools/bolt.diy/scripts/electron-dev.mjs +181 -0
- tools/bolt.diy/scripts/setup-env.sh +41 -0
- tools/bolt.diy/scripts/update-imports.sh +7 -0
- tools/bolt.diy/scripts/update.sh +52 -0
- tools/bolt.diy/services/execution-governor/Dockerfile +41 -0
- tools/bolt.diy/services/execution-governor/config.ts +42 -0
- tools/bolt.diy/services/execution-governor/index.ts +683 -0
- tools/bolt.diy/services/execution-governor/metrics.ts +141 -0
- tools/bolt.diy/services/execution-governor/package.json +31 -0
- tools/bolt.diy/services/execution-governor/priority-queue.ts +139 -0
- tools/bolt.diy/services/execution-governor/tsconfig.json +21 -0
- tools/bolt.diy/services/execution-governor/types.ts +145 -0
- tools/bolt.diy/services/headless-executor/Dockerfile +43 -0
- tools/bolt.diy/services/headless-executor/executor.ts +210 -0
- tools/bolt.diy/services/headless-executor/index.ts +323 -0
- tools/bolt.diy/services/headless-executor/package.json +27 -0
- tools/bolt.diy/services/headless-executor/tsconfig.json +21 -0
- tools/bolt.diy/services/headless-executor/types.ts +38 -0
- tools/bolt.diy/test-workflows.sh +240 -0
- tools/bolt.diy/tests/integration/corporate-swarm.test.ts +208 -0
- tools/bolt.diy/tests/mandates/budget-limited.json +34 -0
- tools/bolt.diy/tests/mandates/complex.json +53 -0
- tools/bolt.diy/tests/mandates/constraint-enforced.json +36 -0
- tools/bolt.diy/tests/mandates/simple.json +35 -0
- tools/bolt.diy/tsconfig.json +37 -0
- tools/bolt.diy/types/istextorbinary.d.ts +15 -0
- tools/bolt.diy/uno.config.ts +279 -0
- tools/bolt.diy/vite-electron.config.ts +76 -0
- tools/bolt.diy/vite.config.ts +112 -0
- tools/bolt.diy/worker-configuration.d.ts +22 -0
- tools/bolt.diy/wrangler.toml +6 -0
- tools/code_generator.py +461 -0
- tools/file_operations.py +465 -0
- tools/mandate_generator.py +337 -0
- tools/mcpClientUtils.py +1216 -0
- tools/sensors.py +285 -0
- utils/Agent_types.py +15 -0
- utils/AnyToStr.py +0 -0
- utils/HHCS.py +277 -0
- utils/__init__.py +30 -0
- utils/agent.py +3627 -0
- utils/aop.py +2948 -0
- utils/canonical.py +143 -0
- utils/conversation.py +1195 -0
- utils/doctrine_versioning +230 -0
- utils/formatter.py +474 -0
- utils/ledger.py +311 -0
- utils/out_types.py +16 -0
- utils/rollback.py +339 -0
- utils/router.py +929 -0
- utils/tui.py +1908 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LLM integration module for specialized agents.
|
|
3
|
+
|
|
4
|
+
Provides patterns for schema definition, prompt building, memory management,
|
|
5
|
+
and multi-loop reasoning with LLMs.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Any, List, Optional, Callable
|
|
9
|
+
import logging
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class LLMIntegration:
|
|
15
|
+
"""
|
|
16
|
+
LLM integration patterns for specialized agents.
|
|
17
|
+
|
|
18
|
+
Provides methods for:
|
|
19
|
+
- Schema definition
|
|
20
|
+
- Prompt building
|
|
21
|
+
- Memory management
|
|
22
|
+
- Multi-loop reasoning
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
agent: Any, # BaseSpecializedAgent instance
|
|
28
|
+
max_loops: int = 3,
|
|
29
|
+
):
|
|
30
|
+
"""
|
|
31
|
+
Initialize LLM integration.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
agent: BaseSpecializedAgent instance
|
|
35
|
+
max_loops: Maximum number of reasoning loops
|
|
36
|
+
"""
|
|
37
|
+
self.agent = agent
|
|
38
|
+
self.max_loops = max_loops
|
|
39
|
+
self.domain_memory: List[Dict[str, Any]] = []
|
|
40
|
+
|
|
41
|
+
def build_domain_prompt(self, task: str, **context) -> str:
|
|
42
|
+
"""
|
|
43
|
+
Build a domain-specific prompt for the given task.
|
|
44
|
+
|
|
45
|
+
This is a template method that should be overridden by subclasses
|
|
46
|
+
or customized per domain.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
task: The task description
|
|
50
|
+
**context: Additional context variables
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
Formatted prompt string
|
|
54
|
+
"""
|
|
55
|
+
# Default implementation - should be overridden
|
|
56
|
+
return f"Task: {task}\n\nPlease analyze this task and provide a comprehensive response."
|
|
57
|
+
|
|
58
|
+
def build_memory_context(self, last_n: int = 2) -> str:
|
|
59
|
+
"""
|
|
60
|
+
Build context from recent memory steps.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
last_n: Number of recent steps to include
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
Formatted memory context string
|
|
67
|
+
"""
|
|
68
|
+
context_parts = []
|
|
69
|
+
for step in self.domain_memory[-last_n:]:
|
|
70
|
+
context_parts.append(f"Step {step.get('step', '?')}: {step.get('analysis', '')}")
|
|
71
|
+
return "\n".join(context_parts)
|
|
72
|
+
|
|
73
|
+
def synthesize_analysis(self, task: str) -> str:
|
|
74
|
+
"""
|
|
75
|
+
Synthesize a final analysis from the reasoning steps.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
task: The original task
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Synthesized analysis string
|
|
82
|
+
"""
|
|
83
|
+
synthesis_prompt = f"Based on the analysis steps performed, synthesize a concise report for: {task}"
|
|
84
|
+
return self.agent.step(synthesis_prompt)
|
|
85
|
+
|
|
86
|
+
def run_llm_domain_analysis(
|
|
87
|
+
self,
|
|
88
|
+
task: str,
|
|
89
|
+
build_prompt_fn: Optional[Callable[[str], str]] = None,
|
|
90
|
+
post_process_fn: Optional[Callable[[Dict[str, Any]], Dict[str, Any]]] = None,
|
|
91
|
+
**kwargs
|
|
92
|
+
) -> Dict[str, Any]:
|
|
93
|
+
"""
|
|
94
|
+
Run multi-loop LLM-based domain analysis.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
task: The task to analyze
|
|
98
|
+
build_prompt_fn: Optional function to build prompts (defaults to build_domain_prompt)
|
|
99
|
+
post_process_fn: Optional function to post-process results
|
|
100
|
+
**kwargs: Additional arguments
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Dictionary with analysis results
|
|
104
|
+
"""
|
|
105
|
+
self.domain_memory = []
|
|
106
|
+
|
|
107
|
+
# Use provided prompt builder or default
|
|
108
|
+
if build_prompt_fn:
|
|
109
|
+
domain_prompt = build_prompt_fn(task)
|
|
110
|
+
else:
|
|
111
|
+
domain_prompt = self.build_domain_prompt(task)
|
|
112
|
+
|
|
113
|
+
max_loops = self.max_loops if isinstance(self.max_loops, int) else 3
|
|
114
|
+
for i in range(max_loops):
|
|
115
|
+
step_result = self.agent.step(domain_prompt)
|
|
116
|
+
self.domain_memory.append({
|
|
117
|
+
'step': i + 1,
|
|
118
|
+
'analysis': step_result,
|
|
119
|
+
'timestamp': i
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
if i < max_loops - 1:
|
|
123
|
+
memory_context = self.build_memory_context()
|
|
124
|
+
domain_prompt = f"{domain_prompt}\n\nPrevious Analysis:\n{memory_context}"
|
|
125
|
+
|
|
126
|
+
final_analysis = self.synthesize_analysis(task)
|
|
127
|
+
|
|
128
|
+
result = {
|
|
129
|
+
'task': task,
|
|
130
|
+
'analysis': final_analysis,
|
|
131
|
+
'analysis_steps': self.domain_memory,
|
|
132
|
+
**kwargs
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Apply post-processing if provided
|
|
136
|
+
if post_process_fn:
|
|
137
|
+
result = post_process_fn(result)
|
|
138
|
+
|
|
139
|
+
return result
|
|
140
|
+
|
|
141
|
+
def clear_memory(self) -> None:
|
|
142
|
+
"""Clear the domain memory."""
|
|
143
|
+
self.domain_memory = []
|
|
144
|
+
|
|
145
|
+
def get_memory(self) -> List[Dict[str, Any]]:
|
|
146
|
+
"""
|
|
147
|
+
Get the current domain memory.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
List of memory entries
|
|
151
|
+
"""
|
|
152
|
+
return self.domain_memory.copy()
|
|
153
|
+
|
|
154
|
+
def add_to_memory(self, entry: Dict[str, Any]) -> None:
|
|
155
|
+
"""
|
|
156
|
+
Add an entry to the domain memory.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
entry: Memory entry dictionary
|
|
160
|
+
"""
|
|
161
|
+
self.domain_memory.append(entry)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def create_default_schema(
|
|
165
|
+
function_name: str,
|
|
166
|
+
description: str,
|
|
167
|
+
properties: Dict[str, Dict[str, Any]],
|
|
168
|
+
required: Optional[List[str]] = None
|
|
169
|
+
) -> Dict[str, Any]:
|
|
170
|
+
"""
|
|
171
|
+
Create a default function schema for LLM tools.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
function_name: Name of the function
|
|
175
|
+
description: Description of the function
|
|
176
|
+
properties: Dictionary of parameter properties
|
|
177
|
+
required: List of required parameters
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Function schema dictionary
|
|
181
|
+
"""
|
|
182
|
+
return {
|
|
183
|
+
"type": "function",
|
|
184
|
+
"function": {
|
|
185
|
+
"name": function_name,
|
|
186
|
+
"description": description,
|
|
187
|
+
"parameters": {
|
|
188
|
+
"type": "object",
|
|
189
|
+
"properties": properties,
|
|
190
|
+
"required": required or list(properties.keys())
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Module Registry for Drag-and-Drop Feature Composition
|
|
3
|
+
|
|
4
|
+
Provides a registry system and mixin patterns to make modules truly composable
|
|
5
|
+
and "drag-and-drop" friendly for creating specialized agents.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Any, List, Optional, Type, Callable
|
|
9
|
+
import logging
|
|
10
|
+
from abc import ABC
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FeatureMixin(ABC):
|
|
16
|
+
"""
|
|
17
|
+
Base mixin class for feature modules.
|
|
18
|
+
|
|
19
|
+
Features can be mixed into agents to add capabilities.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, *args, **kwargs):
|
|
23
|
+
"""Initialize the feature mixin."""
|
|
24
|
+
super().__init__(*args, **kwargs)
|
|
25
|
+
self._feature_enabled = True
|
|
26
|
+
|
|
27
|
+
def enable_feature(self) -> None:
|
|
28
|
+
"""Enable this feature."""
|
|
29
|
+
self._feature_enabled = True
|
|
30
|
+
|
|
31
|
+
def disable_feature(self) -> None:
|
|
32
|
+
"""Disable this feature."""
|
|
33
|
+
self._feature_enabled = False
|
|
34
|
+
|
|
35
|
+
def is_feature_enabled(self) -> bool:
|
|
36
|
+
"""Check if feature is enabled."""
|
|
37
|
+
return getattr(self, '_feature_enabled', True)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ModuleRegistry:
|
|
41
|
+
"""
|
|
42
|
+
Registry for managing and composing feature modules.
|
|
43
|
+
|
|
44
|
+
Allows "drag-and-drop" style composition of features.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
_modules: Dict[str, Type] = {}
|
|
48
|
+
_dependencies: Dict[str, List[str]] = {}
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def register(
|
|
52
|
+
cls,
|
|
53
|
+
name: str,
|
|
54
|
+
module_class: Type,
|
|
55
|
+
dependencies: Optional[List[str]] = None
|
|
56
|
+
) -> None:
|
|
57
|
+
"""
|
|
58
|
+
Register a module for use in agents.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
name: Module name (e.g., 'graph', 'prediction', 'statistics')
|
|
62
|
+
module_class: Module class
|
|
63
|
+
dependencies: List of required module names
|
|
64
|
+
"""
|
|
65
|
+
cls._modules[name] = module_class
|
|
66
|
+
cls._dependencies[name] = dependencies or []
|
|
67
|
+
|
|
68
|
+
@classmethod
|
|
69
|
+
def get_module(cls, name: str) -> Optional[Type]:
|
|
70
|
+
"""
|
|
71
|
+
Get a registered module class.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
name: Module name
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Module class or None if not found
|
|
78
|
+
"""
|
|
79
|
+
return cls._modules.get(name)
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def get_dependencies(cls, name: str) -> List[str]:
|
|
83
|
+
"""
|
|
84
|
+
Get dependencies for a module.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
name: Module name
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
List of dependency names
|
|
91
|
+
"""
|
|
92
|
+
return cls._dependencies.get(name, [])
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def list_modules(cls) -> List[str]:
|
|
96
|
+
"""
|
|
97
|
+
List all registered modules.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
List of module names
|
|
101
|
+
"""
|
|
102
|
+
return list(cls._modules.keys())
|
|
103
|
+
|
|
104
|
+
@classmethod
|
|
105
|
+
def check_dependencies(cls, module_names: List[str]) -> Dict[str, List[str]]:
|
|
106
|
+
"""
|
|
107
|
+
Check if all dependencies are satisfied.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
module_names: List of module names to check
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Dictionary mapping module names to missing dependencies
|
|
114
|
+
"""
|
|
115
|
+
missing = {}
|
|
116
|
+
for module_name in module_names:
|
|
117
|
+
deps = cls.get_dependencies(module_name)
|
|
118
|
+
missing_deps = [d for d in deps if d not in module_names]
|
|
119
|
+
if missing_deps:
|
|
120
|
+
missing[module_name] = missing_deps
|
|
121
|
+
return missing
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class FeatureComposer:
|
|
125
|
+
"""
|
|
126
|
+
Composer for building agents with selected features.
|
|
127
|
+
|
|
128
|
+
Provides a fluent interface for "drag-and-drop" feature composition.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
def __init__(self, base_agent_class: Type):
|
|
132
|
+
"""
|
|
133
|
+
Initialize the feature composer.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
base_agent_class: Base agent class to compose features into
|
|
137
|
+
"""
|
|
138
|
+
self.base_agent_class = base_agent_class
|
|
139
|
+
self.selected_features: List[str] = []
|
|
140
|
+
self.feature_configs: Dict[str, Dict[str, Any]] = {}
|
|
141
|
+
|
|
142
|
+
def with_feature(
|
|
143
|
+
self,
|
|
144
|
+
feature_name: str,
|
|
145
|
+
**config
|
|
146
|
+
) -> 'FeatureComposer':
|
|
147
|
+
"""
|
|
148
|
+
Add a feature to the agent.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
feature_name: Name of the feature module
|
|
152
|
+
**config: Configuration for the feature
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
Self for method chaining
|
|
156
|
+
"""
|
|
157
|
+
if feature_name not in self.selected_features:
|
|
158
|
+
self.selected_features.append(feature_name)
|
|
159
|
+
self.feature_configs[feature_name] = config
|
|
160
|
+
return self
|
|
161
|
+
|
|
162
|
+
def without_feature(self, feature_name: str) -> 'FeatureComposer':
|
|
163
|
+
"""
|
|
164
|
+
Remove a feature from the agent.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
feature_name: Name of the feature to remove
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
Self for method chaining
|
|
171
|
+
"""
|
|
172
|
+
if feature_name in self.selected_features:
|
|
173
|
+
self.selected_features.remove(feature_name)
|
|
174
|
+
if feature_name in self.feature_configs:
|
|
175
|
+
del self.feature_configs[feature_name]
|
|
176
|
+
return self
|
|
177
|
+
|
|
178
|
+
def build(self) -> Type:
|
|
179
|
+
"""
|
|
180
|
+
Build the agent class with selected features.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
Agent class with features composed
|
|
184
|
+
"""
|
|
185
|
+
# Check dependencies
|
|
186
|
+
missing = ModuleRegistry.check_dependencies(self.selected_features)
|
|
187
|
+
if missing:
|
|
188
|
+
raise ValueError(f"Missing dependencies: {missing}")
|
|
189
|
+
|
|
190
|
+
# Create dynamic class with features
|
|
191
|
+
class_name = f"{self.base_agent_class.__name__}WithFeatures"
|
|
192
|
+
bases = (self.base_agent_class,)
|
|
193
|
+
|
|
194
|
+
# Add feature initialization
|
|
195
|
+
def __init__(self, *args, **kwargs):
|
|
196
|
+
# Initialize base
|
|
197
|
+
self.base_agent_class.__init__(self, *args, **kwargs)
|
|
198
|
+
|
|
199
|
+
# Initialize features
|
|
200
|
+
for feature_name in self.selected_features:
|
|
201
|
+
feature_class = ModuleRegistry.get_module(feature_name)
|
|
202
|
+
if feature_class:
|
|
203
|
+
config = self.feature_configs.get(feature_name, {})
|
|
204
|
+
# Auto-inject dependencies
|
|
205
|
+
if hasattr(feature_class, '_auto_inject_dependencies'):
|
|
206
|
+
deps = feature_class._auto_inject_dependencies()
|
|
207
|
+
for dep_name in deps:
|
|
208
|
+
if hasattr(self, dep_name):
|
|
209
|
+
config[dep_name] = getattr(self, dep_name)
|
|
210
|
+
|
|
211
|
+
feature_instance = feature_class(**config)
|
|
212
|
+
setattr(self, feature_name, feature_instance)
|
|
213
|
+
|
|
214
|
+
# Create class
|
|
215
|
+
agent_class = type(class_name, bases, {
|
|
216
|
+
'__init__': __init__,
|
|
217
|
+
'_selected_features': self.selected_features,
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
return agent_class
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def compose_agent(
|
|
224
|
+
base_agent_class: Type,
|
|
225
|
+
features: List[str],
|
|
226
|
+
feature_configs: Optional[Dict[str, Dict[str, Any]]] = None
|
|
227
|
+
) -> Type:
|
|
228
|
+
"""
|
|
229
|
+
Convenience function to compose an agent with features.
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
base_agent_class: Base agent class
|
|
233
|
+
features: List of feature names to add
|
|
234
|
+
feature_configs: Optional configuration for each feature
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
Composed agent class
|
|
238
|
+
|
|
239
|
+
Example:
|
|
240
|
+
>>> MyAgent = compose_agent(
|
|
241
|
+
... BaseSpecializedAgent,
|
|
242
|
+
... features=['graph', 'prediction'],
|
|
243
|
+
... feature_configs={
|
|
244
|
+
... 'graph': {'graph_type': 'causal'},
|
|
245
|
+
... 'prediction': {'use_nonlinear': True}
|
|
246
|
+
... }
|
|
247
|
+
... )
|
|
248
|
+
"""
|
|
249
|
+
composer = FeatureComposer(base_agent_class)
|
|
250
|
+
for feature in features:
|
|
251
|
+
config = feature_configs.get(feature, {}) if feature_configs else {}
|
|
252
|
+
composer.with_feature(feature, **config)
|
|
253
|
+
return composer.build()
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
# Register built-in modules
|
|
257
|
+
def register_builtin_modules():
|
|
258
|
+
"""Register built-in modules with the registry."""
|
|
259
|
+
from .graph_management import GraphManager
|
|
260
|
+
from .prediction_framework import PredictionFramework
|
|
261
|
+
from .statistical_methods import StatisticalMethods
|
|
262
|
+
from .llm_integration import LLMIntegration
|
|
263
|
+
|
|
264
|
+
ModuleRegistry.register('graph', GraphManager)
|
|
265
|
+
ModuleRegistry.register('prediction', PredictionFramework, dependencies=['graph'])
|
|
266
|
+
ModuleRegistry.register('statistics', StatisticalMethods, dependencies=['graph', 'prediction'])
|
|
267
|
+
ModuleRegistry.register('llm', LLMIntegration)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# Auto-register on import
|
|
271
|
+
try:
|
|
272
|
+
register_builtin_modules()
|
|
273
|
+
except ImportError:
|
|
274
|
+
# Modules not available yet, will be registered when imported
|
|
275
|
+
pass
|
|
276
|
+
|