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