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,213 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Drag-and-Drop Feature Composition Examples
|
|
3
|
+
|
|
4
|
+
Demonstrates how to use the template framework modules as "drag-and-drop" features
|
|
5
|
+
to quickly compose specialized agents.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Any, List, Optional
|
|
9
|
+
from templates.base_specialized_agent import BaseSpecializedAgent
|
|
10
|
+
from templates.feature_mixins import (
|
|
11
|
+
GraphFeatureMixin,
|
|
12
|
+
PredictionFeatureMixin,
|
|
13
|
+
StatisticsFeatureMixin,
|
|
14
|
+
LLMFeatureMixin,
|
|
15
|
+
FullFeatureMixin
|
|
16
|
+
)
|
|
17
|
+
from templates.module_registry import compose_agent, ModuleRegistry
|
|
18
|
+
from templates.llm_integration import create_default_schema
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# ============================================================================
|
|
22
|
+
# Example 1: Minimal Agent (LLM only)
|
|
23
|
+
# ============================================================================
|
|
24
|
+
|
|
25
|
+
class MinimalAgent(BaseSpecializedAgent, LLMFeatureMixin):
|
|
26
|
+
"""Minimal agent with just LLM capabilities."""
|
|
27
|
+
|
|
28
|
+
def __init__(self, **kwargs):
|
|
29
|
+
super().__init__(**kwargs)
|
|
30
|
+
self.init_llm_feature()
|
|
31
|
+
|
|
32
|
+
def _get_domain_schema(self):
|
|
33
|
+
return create_default_schema(
|
|
34
|
+
function_name="minimal_analysis",
|
|
35
|
+
description="Minimal analysis",
|
|
36
|
+
properties={"result": {"type": "string"}}
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
40
|
+
return f"Analyze: {task}"
|
|
41
|
+
|
|
42
|
+
def _domain_specific_setup(self):
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# ============================================================================
|
|
47
|
+
# Example 2: Graph + LLM Agent
|
|
48
|
+
# ============================================================================
|
|
49
|
+
|
|
50
|
+
class GraphLLMAgent(BaseSpecializedAgent, GraphFeatureMixin, LLMFeatureMixin):
|
|
51
|
+
"""Agent with graph management and LLM capabilities."""
|
|
52
|
+
|
|
53
|
+
def __init__(self, variables=None, edges=None, **kwargs):
|
|
54
|
+
super().__init__(**kwargs)
|
|
55
|
+
self.init_graph_feature(variables=variables, edges=edges)
|
|
56
|
+
self.init_llm_feature()
|
|
57
|
+
|
|
58
|
+
def _get_domain_schema(self):
|
|
59
|
+
return create_default_schema(
|
|
60
|
+
function_name="graph_analysis",
|
|
61
|
+
description="Graph-based analysis",
|
|
62
|
+
properties={
|
|
63
|
+
"analysis": {"type": "string"},
|
|
64
|
+
"graph_info": {"type": "object"}
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
69
|
+
return f"Task: {task}\nGraph has {len(self.get_nodes())} nodes."
|
|
70
|
+
|
|
71
|
+
def _domain_specific_setup(self):
|
|
72
|
+
pass
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# ============================================================================
|
|
76
|
+
# Example 3: Full-Featured Agent (All Features)
|
|
77
|
+
# ============================================================================
|
|
78
|
+
|
|
79
|
+
class FullFeaturedAgent(BaseSpecializedAgent, FullFeatureMixin):
|
|
80
|
+
"""Agent with all features - graph, prediction, statistics, LLM."""
|
|
81
|
+
|
|
82
|
+
def __init__(self, variables=None, edges=None, **kwargs):
|
|
83
|
+
super().__init__(**kwargs)
|
|
84
|
+
self.init_all_features(
|
|
85
|
+
variables=variables,
|
|
86
|
+
edges=edges,
|
|
87
|
+
use_nonlinear=True
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def _get_domain_schema(self):
|
|
91
|
+
return create_default_schema(
|
|
92
|
+
function_name="full_analysis",
|
|
93
|
+
description="Full-featured analysis",
|
|
94
|
+
properties={
|
|
95
|
+
"analysis": {"type": "string"},
|
|
96
|
+
"predictions": {"type": "object"},
|
|
97
|
+
"statistics": {"type": "object"}
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
102
|
+
return f"Full analysis: {task}"
|
|
103
|
+
|
|
104
|
+
def _domain_specific_setup(self):
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# ============================================================================
|
|
109
|
+
# Example 4: Custom Composition (Pick and Choose)
|
|
110
|
+
# ============================================================================
|
|
111
|
+
|
|
112
|
+
class CustomAgent(BaseSpecializedAgent, GraphFeatureMixin, PredictionFeatureMixin):
|
|
113
|
+
"""Custom agent with only graph and prediction (no statistics, no LLM)."""
|
|
114
|
+
|
|
115
|
+
def __init__(self, variables=None, edges=None, **kwargs):
|
|
116
|
+
super().__init__(**kwargs)
|
|
117
|
+
self.init_graph_feature(variables=variables, edges=edges)
|
|
118
|
+
self.init_prediction_feature(use_nonlinear=False) # Linear only
|
|
119
|
+
|
|
120
|
+
def _get_domain_schema(self):
|
|
121
|
+
return None # No LLM schema needed
|
|
122
|
+
|
|
123
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
124
|
+
return "" # Not used without LLM
|
|
125
|
+
|
|
126
|
+
def _domain_specific_setup(self):
|
|
127
|
+
pass
|
|
128
|
+
|
|
129
|
+
def run(self, initial_state: Dict[str, float], interventions: Optional[Dict[str, float]] = None):
|
|
130
|
+
"""Run predictions without LLM."""
|
|
131
|
+
return self.predict(initial_state, interventions or {})
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# ============================================================================
|
|
135
|
+
# Example 5: Using Module Registry (Programmatic Composition)
|
|
136
|
+
# ============================================================================
|
|
137
|
+
|
|
138
|
+
def create_agent_with_features(features: List[str], **configs):
|
|
139
|
+
"""
|
|
140
|
+
Create an agent with specified features using the registry.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
features: List of feature names ('graph', 'prediction', 'statistics', 'llm')
|
|
144
|
+
**configs: Configuration for each feature
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
Agent class
|
|
148
|
+
"""
|
|
149
|
+
# Define a base agent
|
|
150
|
+
class DynamicAgent(BaseSpecializedAgent):
|
|
151
|
+
def _get_domain_schema(self):
|
|
152
|
+
return create_default_schema(
|
|
153
|
+
function_name="dynamic_analysis",
|
|
154
|
+
description="Dynamic analysis",
|
|
155
|
+
properties={"result": {"type": "string"}}
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
159
|
+
return f"Task: {task}"
|
|
160
|
+
|
|
161
|
+
def _domain_specific_setup(self):
|
|
162
|
+
pass
|
|
163
|
+
|
|
164
|
+
# Compose with features
|
|
165
|
+
return compose_agent(
|
|
166
|
+
DynamicAgent,
|
|
167
|
+
features=features,
|
|
168
|
+
feature_configs=configs
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# ============================================================================
|
|
173
|
+
# Usage Examples
|
|
174
|
+
# ============================================================================
|
|
175
|
+
|
|
176
|
+
if __name__ == "__main__":
|
|
177
|
+
# Example 1: Minimal agent
|
|
178
|
+
minimal = MinimalAgent(agent_name="minimal")
|
|
179
|
+
# result = minimal.analyze_with_llm("Analyze this problem")
|
|
180
|
+
|
|
181
|
+
# Example 2: Graph + LLM
|
|
182
|
+
graph_llm = GraphLLMAgent(
|
|
183
|
+
agent_name="graph-llm",
|
|
184
|
+
variables=["A", "B", "C"],
|
|
185
|
+
edges=[("A", "B"), ("B", "C")]
|
|
186
|
+
)
|
|
187
|
+
# result = graph_llm.analyze_with_llm("Analyze the graph")
|
|
188
|
+
|
|
189
|
+
# Example 3: Full featured
|
|
190
|
+
full = FullFeaturedAgent(
|
|
191
|
+
agent_name="full",
|
|
192
|
+
variables=["X", "Y", "Z"],
|
|
193
|
+
edges=[("X", "Y"), ("Y", "Z")]
|
|
194
|
+
)
|
|
195
|
+
# predictions = full.predict({"X": 1.0}, {"X": 1.5})
|
|
196
|
+
|
|
197
|
+
# Example 4: Custom composition
|
|
198
|
+
custom = CustomAgent(
|
|
199
|
+
variables=["A", "B"],
|
|
200
|
+
edges=[("A", "B")]
|
|
201
|
+
)
|
|
202
|
+
# predictions = custom.run({"A": 1.0}, {"A": 2.0})
|
|
203
|
+
|
|
204
|
+
# Example 5: Programmatic composition
|
|
205
|
+
AgentClass = create_agent_with_features(
|
|
206
|
+
features=['graph', 'prediction'],
|
|
207
|
+
graph={'graph_type': 'causal'},
|
|
208
|
+
prediction={'use_nonlinear': True}
|
|
209
|
+
)
|
|
210
|
+
# agent = AgentClass(agent_name="dynamic")
|
|
211
|
+
|
|
212
|
+
print("All examples created successfully!")
|
|
213
|
+
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Logistics Agent Template
|
|
3
|
+
|
|
4
|
+
This demonstrates how to create a logistics/supply chain agent using the template framework.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, List, Tuple, Optional, Union
|
|
8
|
+
from templates.base_specialized_agent import BaseSpecializedAgent
|
|
9
|
+
from templates.graph_management import GraphManager
|
|
10
|
+
from templates.prediction_framework import PredictionFramework
|
|
11
|
+
from templates.statistical_methods import StatisticalMethods
|
|
12
|
+
from templates.llm_integration import LLMIntegration, create_default_schema
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class LogisticsAgentTemplate(BaseSpecializedAgent):
|
|
16
|
+
"""
|
|
17
|
+
Example logistics agent using the template framework.
|
|
18
|
+
|
|
19
|
+
This agent can reason about supply chain relationships, predict delivery times,
|
|
20
|
+
optimize routes, and generate logistics strategies.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
supply_chain_nodes: Optional[List[str]] = None,
|
|
26
|
+
supply_chain_edges: Optional[List[Tuple[str, str]]] = None,
|
|
27
|
+
max_loops: Optional[Union[int, str]] = 3,
|
|
28
|
+
agent_name: str = "logistics-agent",
|
|
29
|
+
model_name: str = "gpt-4o",
|
|
30
|
+
**kwargs,
|
|
31
|
+
):
|
|
32
|
+
"""
|
|
33
|
+
Initialize the logistics agent.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
supply_chain_nodes: List of supply chain node names (e.g., ['warehouse', 'transport', 'delivery'])
|
|
37
|
+
supply_chain_edges: List of (source, target) relationship tuples
|
|
38
|
+
max_loops: Maximum reasoning loops
|
|
39
|
+
agent_name: Agent identifier
|
|
40
|
+
model_name: LLM model name
|
|
41
|
+
**kwargs: Additional arguments
|
|
42
|
+
"""
|
|
43
|
+
super().__init__(
|
|
44
|
+
max_loops=max_loops,
|
|
45
|
+
agent_name=agent_name,
|
|
46
|
+
agent_description="Logistics and Supply Chain Analysis Agent",
|
|
47
|
+
model_name=model_name,
|
|
48
|
+
**kwargs,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Initialize graph manager for supply chain
|
|
52
|
+
self.graph_manager = GraphManager(graph_type="supply_chain")
|
|
53
|
+
|
|
54
|
+
# Initialize prediction framework
|
|
55
|
+
self.prediction_framework = PredictionFramework(
|
|
56
|
+
graph_manager=self.graph_manager,
|
|
57
|
+
use_nonlinear=False, # Logistics often linear
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Initialize statistical methods
|
|
61
|
+
self.statistical_methods = StatisticalMethods(
|
|
62
|
+
graph_manager=self.graph_manager,
|
|
63
|
+
prediction_framework=self.prediction_framework,
|
|
64
|
+
standardization_stats=self.prediction_framework.standardization_stats,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Initialize LLM integration
|
|
68
|
+
self.llm_integration = LLMIntegration(
|
|
69
|
+
agent=self,
|
|
70
|
+
max_loops=self.domain_max_loops if isinstance(self.domain_max_loops, int) else 3,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# Add supply chain nodes and edges
|
|
74
|
+
if supply_chain_nodes:
|
|
75
|
+
self.graph_manager.add_nodes_from(supply_chain_nodes)
|
|
76
|
+
|
|
77
|
+
if supply_chain_edges:
|
|
78
|
+
for source, target in supply_chain_edges:
|
|
79
|
+
self.add_supply_chain_relationship(source, target)
|
|
80
|
+
|
|
81
|
+
def _get_domain_schema(self) -> Optional[Dict[str, Any]]:
|
|
82
|
+
"""Return the logistics analysis schema."""
|
|
83
|
+
return create_default_schema(
|
|
84
|
+
function_name="generate_logistics_analysis",
|
|
85
|
+
description="Generates logistics analysis and optimization recommendations",
|
|
86
|
+
properties={
|
|
87
|
+
"supply_chain_analysis": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Analysis of supply chain efficiency and bottlenecks"
|
|
90
|
+
},
|
|
91
|
+
"route_optimization": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Route optimization recommendations"
|
|
94
|
+
},
|
|
95
|
+
"delivery_scenarios": {
|
|
96
|
+
"type": "array",
|
|
97
|
+
"items": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"properties": {
|
|
100
|
+
"scenario_name": {"type": "string"},
|
|
101
|
+
"interventions": {"type": "object"},
|
|
102
|
+
"expected_delivery_times": {"type": "object"},
|
|
103
|
+
"cost_impact": {"type": "object"}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"description": "Different delivery scenarios and their impacts"
|
|
107
|
+
},
|
|
108
|
+
"optimization_recommendations": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "Recommendations for supply chain optimization"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
required=[
|
|
114
|
+
"supply_chain_analysis",
|
|
115
|
+
"route_optimization",
|
|
116
|
+
"delivery_scenarios",
|
|
117
|
+
"optimization_recommendations"
|
|
118
|
+
]
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
122
|
+
"""Build a logistics analysis prompt."""
|
|
123
|
+
return (
|
|
124
|
+
f"You are a Logistics and Supply Chain Analysis Agent.\n"
|
|
125
|
+
f"Task: {task}\n"
|
|
126
|
+
f"Current supply chain model has {len(self.graph_manager.get_nodes())} nodes and "
|
|
127
|
+
f"{len(self.graph_manager.get_edges())} relationships.\n"
|
|
128
|
+
f"Analyze the supply chain and provide optimization recommendations.\n"
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def _domain_specific_setup(self) -> None:
|
|
132
|
+
"""Set up logistics-specific attributes."""
|
|
133
|
+
# Logistics-specific setup (e.g., capacity constraints, service levels)
|
|
134
|
+
self.capacity_constraints: Dict[str, float] = {}
|
|
135
|
+
self.service_level_targets: Dict[str, float] = {}
|
|
136
|
+
|
|
137
|
+
def add_supply_chain_relationship(
|
|
138
|
+
self,
|
|
139
|
+
source: str,
|
|
140
|
+
target: str,
|
|
141
|
+
lead_time: float = 0.0,
|
|
142
|
+
capacity: float = 1.0,
|
|
143
|
+
confidence: float = 1.0
|
|
144
|
+
) -> None:
|
|
145
|
+
"""Add a supply chain relationship."""
|
|
146
|
+
self.graph_manager.add_relationship(
|
|
147
|
+
source=source,
|
|
148
|
+
target=target,
|
|
149
|
+
strength=lead_time,
|
|
150
|
+
confidence=confidence,
|
|
151
|
+
capacity=capacity,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
def predict_delivery_outcomes(
|
|
155
|
+
self,
|
|
156
|
+
current_state: Dict[str, float],
|
|
157
|
+
interventions: Dict[str, float]
|
|
158
|
+
) -> Dict[str, float]:
|
|
159
|
+
"""Predict delivery outcomes given current state and interventions."""
|
|
160
|
+
return self.prediction_framework.predict_outcomes(
|
|
161
|
+
current_state, interventions
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def generate_delivery_scenarios(
|
|
165
|
+
self,
|
|
166
|
+
current_state: Dict[str, float],
|
|
167
|
+
target_nodes: List[str],
|
|
168
|
+
max_scenarios: int = 5
|
|
169
|
+
) -> List:
|
|
170
|
+
"""Generate delivery scenarios."""
|
|
171
|
+
return self.prediction_framework.generate_counterfactual_scenarios(
|
|
172
|
+
current_state, target_nodes, max_scenarios
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
def run(
|
|
176
|
+
self,
|
|
177
|
+
task: Optional[Union[str, Any]] = None,
|
|
178
|
+
supply_chain_state: Optional[Dict[str, float]] = None,
|
|
179
|
+
**kwargs,
|
|
180
|
+
) -> Dict[str, Any]:
|
|
181
|
+
"""
|
|
182
|
+
Run logistics analysis.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
task: Logistics task or question
|
|
186
|
+
supply_chain_state: Current supply chain state dictionary
|
|
187
|
+
**kwargs: Additional arguments
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
Dictionary with logistics analysis results
|
|
191
|
+
"""
|
|
192
|
+
if task and isinstance(task, str) and supply_chain_state is None:
|
|
193
|
+
return self.llm_integration.run_llm_domain_analysis(
|
|
194
|
+
task,
|
|
195
|
+
build_prompt_fn=self._build_domain_prompt,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Supply chain state analysis
|
|
199
|
+
if supply_chain_state:
|
|
200
|
+
return {
|
|
201
|
+
"supply_chain_state": supply_chain_state,
|
|
202
|
+
"predictions": self.prediction_framework.predict_outcomes(supply_chain_state, {}),
|
|
203
|
+
"scenarios": self.generate_delivery_scenarios(supply_chain_state, list(supply_chain_state.keys())),
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return {"error": "Either task or supply_chain_state must be provided"}
|
|
207
|
+
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Example: Trading Agent Template
|
|
3
|
+
|
|
4
|
+
This demonstrates how to create a trading/financial agent using the template framework.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, List, Tuple, Optional, Union
|
|
8
|
+
from templates.base_specialized_agent import BaseSpecializedAgent
|
|
9
|
+
from templates.graph_management import GraphManager
|
|
10
|
+
from templates.prediction_framework import PredictionFramework
|
|
11
|
+
from templates.statistical_methods import StatisticalMethods
|
|
12
|
+
from templates.llm_integration import LLMIntegration, create_default_schema
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TradingAgentTemplate(BaseSpecializedAgent):
|
|
16
|
+
"""
|
|
17
|
+
Example trading agent using the template framework.
|
|
18
|
+
|
|
19
|
+
This agent can reason about market relationships, predict price movements,
|
|
20
|
+
and generate trading strategies.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
market_variables: Optional[List[str]] = None,
|
|
26
|
+
market_relationships: Optional[List[Tuple[str, str]]] = None,
|
|
27
|
+
max_loops: Optional[Union[int, str]] = 3,
|
|
28
|
+
agent_name: str = "trading-agent",
|
|
29
|
+
model_name: str = "gpt-4o",
|
|
30
|
+
**kwargs,
|
|
31
|
+
):
|
|
32
|
+
"""
|
|
33
|
+
Initialize the trading agent.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
market_variables: List of market variable names (e.g., ['SPY', 'VIX', 'USD'])
|
|
37
|
+
market_relationships: List of (source, target) relationship tuples
|
|
38
|
+
max_loops: Maximum reasoning loops
|
|
39
|
+
agent_name: Agent identifier
|
|
40
|
+
model_name: LLM model name
|
|
41
|
+
**kwargs: Additional arguments
|
|
42
|
+
"""
|
|
43
|
+
super().__init__(
|
|
44
|
+
max_loops=max_loops,
|
|
45
|
+
agent_name=agent_name,
|
|
46
|
+
agent_description="Trading and Financial Analysis Agent",
|
|
47
|
+
model_name=model_name,
|
|
48
|
+
**kwargs,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Initialize graph manager for market relationships
|
|
52
|
+
self.graph_manager = GraphManager(graph_type="market")
|
|
53
|
+
|
|
54
|
+
# Initialize prediction framework
|
|
55
|
+
self.prediction_framework = PredictionFramework(
|
|
56
|
+
graph_manager=self.graph_manager,
|
|
57
|
+
use_nonlinear=True, # Markets are nonlinear
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Initialize statistical methods
|
|
61
|
+
self.statistical_methods = StatisticalMethods(
|
|
62
|
+
graph_manager=self.graph_manager,
|
|
63
|
+
prediction_framework=self.prediction_framework,
|
|
64
|
+
standardization_stats=self.prediction_framework.standardization_stats,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Initialize LLM integration
|
|
68
|
+
self.llm_integration = LLMIntegration(
|
|
69
|
+
agent=self,
|
|
70
|
+
max_loops=self.domain_max_loops if isinstance(self.domain_max_loops, int) else 3,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# Add market variables and relationships
|
|
74
|
+
if market_variables:
|
|
75
|
+
self.graph_manager.add_nodes_from(market_variables)
|
|
76
|
+
|
|
77
|
+
if market_relationships:
|
|
78
|
+
for source, target in market_relationships:
|
|
79
|
+
self.add_market_relationship(source, target)
|
|
80
|
+
|
|
81
|
+
def _get_domain_schema(self) -> Optional[Dict[str, Any]]:
|
|
82
|
+
"""Return the trading analysis schema."""
|
|
83
|
+
return create_default_schema(
|
|
84
|
+
function_name="generate_trading_analysis",
|
|
85
|
+
description="Generates trading analysis and strategy recommendations",
|
|
86
|
+
properties={
|
|
87
|
+
"market_analysis": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Analysis of current market conditions and trends"
|
|
90
|
+
},
|
|
91
|
+
"risk_assessment": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Assessment of market risks and volatility"
|
|
94
|
+
},
|
|
95
|
+
"trading_strategies": {
|
|
96
|
+
"type": "array",
|
|
97
|
+
"items": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"properties": {
|
|
100
|
+
"strategy_name": {"type": "string"},
|
|
101
|
+
"entry_signals": {"type": "object"},
|
|
102
|
+
"exit_signals": {"type": "object"},
|
|
103
|
+
"risk_parameters": {"type": "object"},
|
|
104
|
+
"expected_returns": {"type": "object"}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"description": "Recommended trading strategies"
|
|
108
|
+
},
|
|
109
|
+
"portfolio_recommendations": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"description": "Portfolio allocation recommendations"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
required=[
|
|
115
|
+
"market_analysis",
|
|
116
|
+
"risk_assessment",
|
|
117
|
+
"trading_strategies",
|
|
118
|
+
"portfolio_recommendations"
|
|
119
|
+
]
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def _build_domain_prompt(self, task: str) -> str:
|
|
123
|
+
"""Build a trading analysis prompt."""
|
|
124
|
+
return (
|
|
125
|
+
f"You are a Trading and Financial Analysis Agent.\n"
|
|
126
|
+
f"Task: {task}\n"
|
|
127
|
+
f"Current market model has {len(self.graph_manager.get_nodes())} variables and "
|
|
128
|
+
f"{len(self.graph_manager.get_edges())} relationships.\n"
|
|
129
|
+
f"Analyze the market conditions and provide trading recommendations.\n"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def _domain_specific_setup(self) -> None:
|
|
133
|
+
"""Set up trading-specific attributes."""
|
|
134
|
+
# Trading-specific setup (e.g., risk limits, position sizing)
|
|
135
|
+
self.risk_limits: Dict[str, float] = {}
|
|
136
|
+
self.position_sizing_rules: Dict[str, Any] = {}
|
|
137
|
+
|
|
138
|
+
def add_market_relationship(
|
|
139
|
+
self,
|
|
140
|
+
source: str,
|
|
141
|
+
target: str,
|
|
142
|
+
correlation: float = 0.0,
|
|
143
|
+
confidence: float = 1.0
|
|
144
|
+
) -> None:
|
|
145
|
+
"""Add a market relationship (e.g., correlation, lead-lag)."""
|
|
146
|
+
self.graph_manager.add_relationship(
|
|
147
|
+
source=source,
|
|
148
|
+
target=target,
|
|
149
|
+
strength=correlation,
|
|
150
|
+
confidence=confidence,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
def predict_market_outcomes(
|
|
154
|
+
self,
|
|
155
|
+
current_market_state: Dict[str, float],
|
|
156
|
+
interventions: Dict[str, float]
|
|
157
|
+
) -> Dict[str, float]:
|
|
158
|
+
"""Predict market outcomes given current state and interventions."""
|
|
159
|
+
return self.prediction_framework.predict_outcomes(
|
|
160
|
+
current_market_state, interventions
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
def generate_trading_scenarios(
|
|
164
|
+
self,
|
|
165
|
+
current_state: Dict[str, float],
|
|
166
|
+
target_assets: List[str],
|
|
167
|
+
max_scenarios: int = 5
|
|
168
|
+
) -> List:
|
|
169
|
+
"""Generate trading scenarios."""
|
|
170
|
+
return self.prediction_framework.generate_counterfactual_scenarios(
|
|
171
|
+
current_state, target_assets, max_scenarios
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
def run(
|
|
175
|
+
self,
|
|
176
|
+
task: Optional[Union[str, Any]] = None,
|
|
177
|
+
market_state: Optional[Dict[str, float]] = None,
|
|
178
|
+
**kwargs,
|
|
179
|
+
) -> Dict[str, Any]:
|
|
180
|
+
"""
|
|
181
|
+
Run trading analysis.
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
task: Trading task or question
|
|
185
|
+
market_state: Current market state dictionary
|
|
186
|
+
**kwargs: Additional arguments
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
Dictionary with trading analysis results
|
|
190
|
+
"""
|
|
191
|
+
if task and isinstance(task, str) and market_state is None:
|
|
192
|
+
return self.llm_integration.run_llm_domain_analysis(
|
|
193
|
+
task,
|
|
194
|
+
build_prompt_fn=self._build_domain_prompt,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# Market state analysis
|
|
198
|
+
if market_state:
|
|
199
|
+
return {
|
|
200
|
+
"market_state": market_state,
|
|
201
|
+
"predictions": self.prediction_framework.predict_outcomes(market_state, {}),
|
|
202
|
+
"scenarios": self.generate_trading_scenarios(market_state, list(market_state.keys())),
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return {"error": "Either task or market_state must be provided"}
|
|
206
|
+
|