corvinos 0.1.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.
- Dockerfile +72 -0
- chart/Chart.yaml +17 -0
- chart/templates/_helpers.tpl +25 -0
- chart/templates/deployment.yaml +55 -0
- chart/templates/pvc.yaml +17 -0
- chart/templates/service.yaml +15 -0
- chart/values.yaml +75 -0
- core/awpkg/awpkg/__init__.py +2 -0
- core/awpkg/awpkg/audit.py +118 -0
- core/awpkg/awpkg/builder.py +207 -0
- core/awpkg/awpkg/inspector.py +107 -0
- core/awpkg/awpkg/installer.py +411 -0
- core/awpkg/awpkg/manifest.py +213 -0
- core/awpkg/awpkg.py +141 -0
- core/awpkg/plugin.json +18 -0
- core/awpkg/schema/manifest.v1.json +201 -0
- core/awpkg/tests/__init__.py +0 -0
- core/awpkg/tests/conftest.py +36 -0
- core/awpkg/tests/fixtures/dag_complex/manifest.yaml +26 -0
- core/awpkg/tests/fixtures/dag_complex/src/personas/quant_researcher.yaml +10 -0
- core/awpkg/tests/fixtures/dag_complex/src/tools/code_fetch_news.json +31 -0
- core/awpkg/tests/fixtures/dag_complex/src/tools/code_fetch_social.json +36 -0
- core/awpkg/tests/fixtures/dag_complex/src/workflow.awp.yaml +71 -0
- core/awpkg/tests/fixtures/dag_complex/src/workflows/market_research.awp.yaml +71 -0
- core/awpkg/tests/fixtures/dag_simple/manifest.yaml +21 -0
- core/awpkg/tests/fixtures/dag_simple/src/workflow.awp.yaml +56 -0
- core/awpkg/tests/fixtures/dag_simple/src/workflows/briefing.awp.yaml +56 -0
- core/awpkg/tests/fixtures/delegation/manifest.yaml +23 -0
- core/awpkg/tests/fixtures/delegation/src/tools/code_diff_parser.json +26 -0
- core/awpkg/tests/fixtures/delegation/src/workflow.awp.yaml +67 -0
- core/awpkg/tests/fixtures/delegation/src/workflows/code_review.awp.yaml +67 -0
- core/awpkg/tests/fixtures/full_pipeline/manifest.yaml +134 -0
- core/awpkg/tests/fixtures/full_pipeline/src/personas/data_analyst.yaml +10 -0
- core/awpkg/tests/fixtures/full_pipeline/src/personas/quality_checker.yaml +10 -0
- core/awpkg/tests/fixtures/full_pipeline/src/personas/report_writer.yaml +10 -0
- core/awpkg/tests/fixtures/full_pipeline/src/tools/code_csv_stats.json +21 -0
- core/awpkg/tests/fixtures/full_pipeline/src/tools/code_md_report.json +25 -0
- core/awpkg/tests/fixtures/full_pipeline/src/tools/code_score_report.json +21 -0
- core/awpkg/tests/fixtures/full_pipeline/src/workflows/sales_report.awp.yaml +35 -0
- core/awpkg/tests/fixtures/mixed/manifest.yaml +31 -0
- core/awpkg/tests/fixtures/mixed/src/personas/quant_trader.yaml +11 -0
- core/awpkg/tests/fixtures/mixed/src/tools/code_compute_indicators.json +35 -0
- core/awpkg/tests/fixtures/mixed/src/tools/code_ohlcv_fetch.json +35 -0
- core/awpkg/tests/fixtures/mixed/src/tools/code_orderbook_snap.json +26 -0
- core/awpkg/tests/fixtures/mixed/src/workflow_backtest.awp.yaml +61 -0
- core/awpkg/tests/fixtures/mixed/src/workflow_signal.awp.yaml +104 -0
- core/awpkg/tests/fixtures/mixed/src/workflows/backtest.awp.yaml +61 -0
- core/awpkg/tests/fixtures/mixed/src/workflows/signal_pipeline.awp.yaml +104 -0
- core/awpkg/tests/helpers.py +115 -0
- core/awpkg/tests/test_e2e.py +701 -0
- core/awpkg/tests/test_e2e_full_pipeline.py +597 -0
- core/compliance/ARCHITECTURE.svg +231 -0
- core/compliance/corvin_compliance_reports/__init__.py +19 -0
- core/compliance/corvin_compliance_reports/ai_act_evidence.py +275 -0
- core/compliance/corvin_compliance_reports/audit.py +155 -0
- core/compliance/corvin_compliance_reports/audit_attestation.py +179 -0
- core/compliance/corvin_compliance_reports/audit_query.py +178 -0
- core/compliance/corvin_compliance_reports/cli.py +185 -0
- core/compliance/corvin_compliance_reports/gdpr_ropa.py +504 -0
- core/compliance/corvin_compliance_reports/templates.py +334 -0
- core/compliance/tests/__init__.py +0 -0
- core/compliance/tests/conftest.py +56 -0
- core/compliance/tests/test_audit_emitter.py +95 -0
- core/compliance/tests/test_audit_query.py +107 -0
- core/compliance/tests/test_cli.py +116 -0
- core/compliance/tests/test_generators.py +227 -0
- core/compute/LICENSE +51 -0
- core/compute/corvin_compute/__init__.py +15 -0
- core/compute/corvin_compute/__main__.py +5 -0
- core/compute/corvin_compute/audit.py +160 -0
- core/compute/corvin_compute/budget.py +130 -0
- core/compute/corvin_compute/cli.py +389 -0
- core/compute/corvin_compute/client.py +108 -0
- core/compute/corvin_compute/driver.py +390 -0
- core/compute/corvin_compute/engine_protocol.py +68 -0
- core/compute/corvin_compute/engine_registry.py +91 -0
- core/compute/corvin_compute/engines/__init__.py +4 -0
- core/compute/corvin_compute/engines/anthropic_batch.py +680 -0
- core/compute/corvin_compute/engines/contrib_template.py +552 -0
- core/compute/corvin_compute/engines/flat.py +103 -0
- core/compute/corvin_compute/fabric/__init__.py +16 -0
- core/compute/corvin_compute/fabric/audit_events.py +49 -0
- core/compute/corvin_compute/fabric/backends/__init__.py +34 -0
- core/compute/corvin_compute/fabric/backends/builtin/__init__.py +21 -0
- core/compute/corvin_compute/fabric/backends/builtin/lightgbm_backend.py +170 -0
- core/compute/corvin_compute/fabric/backends/builtin/polars_transform_backend.py +202 -0
- core/compute/corvin_compute/fabric/backends/builtin/sklearn_backend.py +244 -0
- core/compute/corvin_compute/fabric/backends/builtin/statsmodels_backend.py +182 -0
- core/compute/corvin_compute/fabric/backends/builtin/xgboost_backend.py +174 -0
- core/compute/corvin_compute/fabric/backends/manifest.py +162 -0
- core/compute/corvin_compute/fabric/backends/protocol.py +186 -0
- core/compute/corvin_compute/fabric/backends/registry.py +259 -0
- core/compute/corvin_compute/fabric/config.py +82 -0
- core/compute/corvin_compute/fabric/datasources/__init__.py +67 -0
- core/compute/corvin_compute/fabric/datasources/audit_events.py +72 -0
- core/compute/corvin_compute/fabric/datasources/builtin/__init__.py +2 -0
- core/compute/corvin_compute/fabric/datasources/builtin/azure_blob.py +156 -0
- core/compute/corvin_compute/fabric/datasources/builtin/bigquery.py +178 -0
- core/compute/corvin_compute/fabric/datasources/builtin/delta_lake.py +162 -0
- core/compute/corvin_compute/fabric/datasources/builtin/gcs_parquet.py +167 -0
- core/compute/corvin_compute/fabric/datasources/builtin/http_rest.py +244 -0
- core/compute/corvin_compute/fabric/datasources/builtin/kafka_batch.py +176 -0
- core/compute/corvin_compute/fabric/datasources/builtin/local_file.py +291 -0
- core/compute/corvin_compute/fabric/datasources/builtin/mysql.py +161 -0
- core/compute/corvin_compute/fabric/datasources/builtin/postgresql.py +162 -0
- core/compute/corvin_compute/fabric/datasources/builtin/redshift.py +166 -0
- core/compute/corvin_compute/fabric/datasources/builtin/s3_csv.py +180 -0
- core/compute/corvin_compute/fabric/datasources/builtin/s3_parquet.py +193 -0
- core/compute/corvin_compute/fabric/datasources/builtin/snowflake.py +147 -0
- core/compute/corvin_compute/fabric/datasources/manifest.py +335 -0
- core/compute/corvin_compute/fabric/datasources/mcp_tools.py +434 -0
- core/compute/corvin_compute/fabric/datasources/protocol.py +341 -0
- core/compute/corvin_compute/fabric/datasources/query.py +143 -0
- core/compute/corvin_compute/fabric/datasources/registry.py +524 -0
- core/compute/corvin_compute/fabric/datasources/residency.py +153 -0
- core/compute/corvin_compute/fabric/datasources/vault_env.py +91 -0
- core/compute/corvin_compute/fabric/datasources/watermark.py +142 -0
- core/compute/corvin_compute/fabric/oracle/__init__.py +16 -0
- core/compute/corvin_compute/fabric/oracle/aggregated_oracle.py +240 -0
- core/compute/corvin_compute/fabric/oracle/oracle.py +303 -0
- core/compute/corvin_compute/fabric/oracle/steering.py +98 -0
- core/compute/corvin_compute/fabric/parallel/__init__.py +32 -0
- core/compute/corvin_compute/fabric/parallel/aggregation.py +245 -0
- core/compute/corvin_compute/fabric/parallel/resources.py +280 -0
- core/compute/corvin_compute/fabric/parallel/shard.py +325 -0
- core/compute/corvin_compute/fabric/registry.py +237 -0
- core/compute/corvin_compute/fabric_config.py +163 -0
- core/compute/corvin_compute/hac/__init__.py +3 -0
- core/compute/corvin_compute/hac/attribution.py +91 -0
- core/compute/corvin_compute/hac/coordinator.py +330 -0
- core/compute/corvin_compute/hac/engine.py +144 -0
- core/compute/corvin_compute/hac/manifest.py +117 -0
- core/compute/corvin_compute/iteration.py +72 -0
- core/compute/corvin_compute/license_gate.py +401 -0
- core/compute/corvin_compute/mcp_bridge.py +662 -0
- core/compute/corvin_compute/parallel.py +186 -0
- core/compute/corvin_compute/pipeline/__init__.py +14 -0
- core/compute/corvin_compute/pipeline/coordinator.py +437 -0
- core/compute/corvin_compute/pipeline/engine.py +214 -0
- core/compute/corvin_compute/pipeline/manifest.py +172 -0
- core/compute/corvin_compute/recovery.py +246 -0
- core/compute/corvin_compute/state.py +189 -0
- core/compute/corvin_compute/strategies/__init__.py +52 -0
- core/compute/corvin_compute/strategies/base.py +44 -0
- core/compute/corvin_compute/strategies/bayesian.py +277 -0
- core/compute/corvin_compute/strategies/grid.py +77 -0
- core/compute/corvin_compute/strategies/random.py +84 -0
- core/compute/corvin_compute/transport.py +77 -0
- core/compute/corvin_compute/version.py +2 -0
- core/compute/corvin_compute/worker.py +561 -0
- core/compute/requirements-minimal.txt +2 -0
- core/compute/systemd/corvin-compute@.service +27 -0
- core/compute/tests/__init__.py +0 -0
- core/compute/tests/test_aggregated_oracle.py +300 -0
- core/compute/tests/test_aggregator.py +308 -0
- core/compute/tests/test_anthropic_batch.py +491 -0
- core/compute/tests/test_audit.py +254 -0
- core/compute/tests/test_backend_registry.py +328 -0
- core/compute/tests/test_bayesian.py +211 -0
- core/compute/tests/test_builtin_backends.py +351 -0
- core/compute/tests/test_builtin_cloud_adapters.py +341 -0
- core/compute/tests/test_builtin_sql_adapters.py +309 -0
- core/compute/tests/test_builtin_streaming_adapters.py +277 -0
- core/compute/tests/test_builtin_warehouse_adapters.py +316 -0
- core/compute/tests/test_datasource_audit.py +304 -0
- core/compute/tests/test_datasource_incremental.py +258 -0
- core/compute/tests/test_datasource_mcp_tools.py +316 -0
- core/compute/tests/test_datasource_protocol.py +327 -0
- core/compute/tests/test_datasource_residency.py +142 -0
- core/compute/tests/test_datasource_vault.py +148 -0
- core/compute/tests/test_driver.py +275 -0
- core/compute/tests/test_e2e.py +242 -0
- core/compute/tests/test_engine_protocol.py +513 -0
- core/compute/tests/test_fabric_audit.py +523 -0
- core/compute/tests/test_fabric_tenant_config.py +205 -0
- core/compute/tests/test_mcp_bridge.py +270 -0
- core/compute/tests/test_model_registry.py +288 -0
- core/compute/tests/test_negotiation.py +311 -0
- core/compute/tests/test_no_sdk_import_datasources.py +128 -0
- core/compute/tests/test_no_sdk_import_fabric.py +90 -0
- core/compute/tests/test_oracle.py +353 -0
- core/compute/tests/test_parallel.py +219 -0
- core/compute/tests/test_plugin_install.py +287 -0
- core/compute/tests/test_plugin_skeleton.py +170 -0
- core/compute/tests/test_recovery.py +196 -0
- core/compute/tests/test_resource_manager.py +161 -0
- core/compute/tests/test_shard_cursor.py +222 -0
- core/compute/tests/test_shard_manager.py +218 -0
- core/compute/tests/test_strategies.py +175 -0
- core/compute/tests/test_worker.py +446 -0
- core/delegate/corvin_delegate/__init__.py +33 -0
- core/delegate/corvin_delegate/audit.py +455 -0
- core/delegate/corvin_delegate/delegation.py +1431 -0
- core/delegate/corvin_delegate/mcp_config_builder.py +492 -0
- core/delegate/corvin_delegate/mcp_server.py +537 -0
- core/delegate/corvin_delegate/output_judge.py +355 -0
- core/delegate/corvin_delegate/prompt_safety.py +289 -0
- core/delegate/corvin_delegate/sandbox.py +280 -0
- core/delegate/corvin_delegate/skill_context.py +400 -0
- core/delegate/corvin_delegate/tenant_policy.py +287 -0
- core/delegate/tests/__init__.py +0 -0
- core/delegate/tests/test_delegation.py +1169 -0
- core/delegate/tests/test_live_e2e.py +284 -0
- core/delegate/tests/test_mcp_config_builder.py +386 -0
- core/delegate/tests/test_mcp_server.py +488 -0
- core/delegate/tests/test_output_judge.py +445 -0
- core/delegate/tests/test_prompt_safety.py +389 -0
- core/delegate/tests/test_sandbox.py +368 -0
- core/delegate/tests/test_skill_context.py +319 -0
- core/delegate/tests/test_tenant_policy.py +467 -0
- core/init/init.py +893 -0
- core/init/test_daemon.py +369 -0
- core/init/test_init.py +491 -0
- core/pipe/mcp_server.py +413 -0
- core/pipe/plugin.json +10 -0
- core/pipe/test_mcp_server.py +450 -0
- core/plugins/corvin_plugins/__init__.py +36 -0
- core/plugins/corvin_plugins/loader.py +152 -0
- core/plugins/corvin_plugins/protocol.py +201 -0
- core/plugins/corvin_plugins/providers/__init__.py +8 -0
- core/plugins/corvin_plugins/providers/notification_backend.py +75 -0
- core/plugins/corvin_plugins/providers/recall_backend.py +171 -0
- core/plugins/corvin_plugins/providers/router_backend.py +106 -0
- core/plugins/corvin_plugins/providers/summary_provider.py +100 -0
- core/plugins/corvin_plugins/registry.py +178 -0
- core/plugins/templates/bridge_channel_plugin.py +403 -0
- core/plugins/templates/compute_engine_plugin.py +544 -0
- core/plugins/templates/notification_backend_plugin.py +55 -0
- core/plugins/templates/recall_backend_plugin.py +75 -0
- core/plugins/templates/router_backend_plugin.py +59 -0
- core/plugins/templates/summary_provider_plugin.py +61 -0
- core/plugins/templates/worker_engine_plugin.py +296 -0
- core/plugins/tests/test_plugin_system.py +602 -0
- core/workflows/corvin_workflows/__init__.py +31 -0
- core/workflows/corvin_workflows/__main__.py +5 -0
- core/workflows/corvin_workflows/cli.py +783 -0
- core/workflows/corvin_workflows/engines.py +71 -0
- core/workflows/corvin_workflows/examples/news_sentiment.awp.yaml +69 -0
- core/workflows/corvin_workflows/node_types.py +369 -0
- core/workflows/corvin_workflows/runner.py +191 -0
- core/workflows/corvin_workflows/storage.py +71 -0
- core/workflows/corvin_workflows/validator.py +155 -0
- core/workflows/demo_run.py +46 -0
- core/workflows/tests/__init__.py +0 -0
- core/workflows/tests/test_workflow_e2e.py +359 -0
- corvinOS/__init__.py +0 -0
- corvinOS/installer/__init__.py +30 -0
- corvinOS/installer/__main__.py +76 -0
- corvinOS/installer/bridge_manager.py +203 -0
- corvinOS/installer/core.py +812 -0
- corvinOS/installer/ollama.py +52 -0
- corvinOS/installer/service_manager.py +406 -0
- corvinOS/installer/steps/__init__.py +0 -0
- corvinOS/installer/steps/bridges.py +320 -0
- corvinOS/installer/steps/console.py +216 -0
- corvinOS/installer/steps/dependencies.py +474 -0
- corvinOS/installer/steps/keys.py +161 -0
- corvinOS/installer/steps/piper.py +250 -0
- corvinOS/installer/steps/platform.py +172 -0
- corvinOS/installer/steps/plugins.py +94 -0
- corvinOS/installer/steps/stt.py +67 -0
- corvinOS/installer/steps/validate.py +168 -0
- corvinOS/shared/paths.py +284 -0
- corvin_console/__init__.py +23 -0
- corvin_console/_operator_bootstrap.py +114 -0
- corvin_console/_vendor/operator/agent/__init__.py +27 -0
- corvin_console/_vendor/operator/agent/audit.py +67 -0
- corvin_console/_vendor/operator/agent/byok.py +172 -0
- corvin_console/_vendor/operator/agent/config_push.py +112 -0
- corvin_console/_vendor/operator/agent/health.py +75 -0
- corvin_console/_vendor/operator/agent/keypair.py +152 -0
- corvin_console/_vendor/operator/agent/main.py +231 -0
- corvin_console/_vendor/operator/agent/registration.py +152 -0
- corvin_console/_vendor/operator/bridges/.gitignore +3 -0
- corvin_console/_vendor/operator/bridges/.ldd/.install_version +1 -0
- corvin_console/_vendor/operator/bridges/.ldd/config.yaml +41 -0
- corvin_console/_vendor/operator/bridges/.ldd/heartbeat +1 -0
- corvin_console/_vendor/operator/bridges/.ldd/heartbeats/339f5d40-56a2-4292-81dd-f9f739796af6 +1 -0
- corvin_console/_vendor/operator/bridges/.ldd/heartbeats/aa177f3a-3528-4a46-a712-fc722872698c +1 -0
- corvin_console/_vendor/operator/bridges/.ldd/heartbeats/fa6220c4-daf8-4d47-a142-2d25dbaac7d7 +1 -0
- corvin_console/_vendor/operator/bridges/.ldd/ldd_trace +98 -0
- corvin_console/_vendor/operator/bridges/.ldd/statusline.sh +376 -0
- corvin_console/_vendor/operator/bridges/assets/corvin-bridge.desktop +45 -0
- corvin_console/_vendor/operator/bridges/assets/corvin-bridge.png +0 -0
- corvin_console/_vendor/operator/bridges/assets/corvin-mark.png +0 -0
- corvin_console/_vendor/operator/bridges/assets/corvin-mark.svg +13 -0
- corvin_console/_vendor/operator/bridges/bridge.sh +687 -0
- corvin_console/_vendor/operator/bridges/bridge_manager.py +534 -0
- corvin_console/_vendor/operator/bridges/discord/daemon.js +976 -0
- corvin_console/_vendor/operator/bridges/discord/discord-daemon.service.yaml +14 -0
- corvin_console/_vendor/operator/bridges/discord/package-lock.json +324 -0
- corvin_console/_vendor/operator/bridges/discord/package.json +9 -0
- corvin_console/_vendor/operator/bridges/discord/settings.json.example +11 -0
- corvin_console/_vendor/operator/bridges/discord/slash_commands.js +187 -0
- corvin_console/_vendor/operator/bridges/email/daemon.js +342 -0
- corvin_console/_vendor/operator/bridges/email/package-lock.json +504 -0
- corvin_console/_vendor/operator/bridges/email/package.json +11 -0
- corvin_console/_vendor/operator/bridges/email/settings.json.example +22 -0
- corvin_console/_vendor/operator/bridges/install-desktop-launcher.sh +85 -0
- corvin_console/_vendor/operator/bridges/run-all-tests.sh +580 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/.install_version +1 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/config.yaml +41 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/heartbeat +1 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/heartbeats/aa177f3a-3528-4a46-a712-fc722872698c +1 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/ldd_trace +98 -0
- corvin_console/_vendor/operator/bridges/shared/.ldd/statusline.sh +376 -0
- corvin_console/_vendor/operator/bridges/shared/RAG_QUERY_ENGINE_README.md +468 -0
- corvin_console/_vendor/operator/bridges/shared/__init__.py +30 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_attachments.py +321 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_audit_head.py +226 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_compute_engine.py +248 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_friendship.py +357 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_google_adapter.py +539 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_google_sender.py +361 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_http_server.py +416 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_invite.py +346 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_invite_registry.py +186 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_manifest.py +354 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_nonce_store.py +281 -0
- corvin_console/_vendor/operator/bridges/shared/a2a_worker.py +866 -0
- corvin_console/_vendor/operator/bridges/shared/acs_engine_adapter.py +334 -0
- corvin_console/_vendor/operator/bridges/shared/acs_gate_chain.py +805 -0
- corvin_console/_vendor/operator/bridges/shared/acs_graph_builder.py +370 -0
- corvin_console/_vendor/operator/bridges/shared/acs_runtime.py +2091 -0
- corvin_console/_vendor/operator/bridges/shared/acs_validator.py +692 -0
- corvin_console/_vendor/operator/bridges/shared/adapter.py +8313 -0
- corvin_console/_vendor/operator/bridges/shared/agent_charter.py +497 -0
- corvin_console/_vendor/operator/bridges/shared/audit.py +310 -0
- corvin_console/_vendor/operator/bridges/shared/audit_sealer.py +1167 -0
- corvin_console/_vendor/operator/bridges/shared/audit_view.py +244 -0
- corvin_console/_vendor/operator/bridges/shared/auth_elevation.py +264 -0
- corvin_console/_vendor/operator/bridges/shared/awp_dag_parser.py +271 -0
- corvin_console/_vendor/operator/bridges/shared/awp_validator.py +113 -0
- corvin_console/_vendor/operator/bridges/shared/awp_walker.py +300 -0
- corvin_console/_vendor/operator/bridges/shared/bridges_migrate.py +450 -0
- corvin_console/_vendor/operator/bridges/shared/cal_predicates.py +228 -0
- corvin_console/_vendor/operator/bridges/shared/check_prometheus_labels.py +158 -0
- corvin_console/_vendor/operator/bridges/shared/compliance/eu_ai_act_audit.py +644 -0
- corvin_console/_vendor/operator/bridges/shared/compliance_assertion.py +215 -0
- corvin_console/_vendor/operator/bridges/shared/compliance_manifest.py +592 -0
- corvin_console/_vendor/operator/bridges/shared/compliance_zone_classifier.py +154 -0
- corvin_console/_vendor/operator/bridges/shared/compute_awp_exporter.py +1221 -0
- corvin_console/_vendor/operator/bridges/shared/compute_awp_importer.py +852 -0
- corvin_console/_vendor/operator/bridges/shared/compute_narrator.py +311 -0
- corvin_console/_vendor/operator/bridges/shared/consent.py +807 -0
- corvin_console/_vendor/operator/bridges/shared/context_budget.py +389 -0
- corvin_console/_vendor/operator/bridges/shared/context_checkpoint.py +108 -0
- corvin_console/_vendor/operator/bridges/shared/context_cold_storage.py +387 -0
- corvin_console/_vendor/operator/bridges/shared/conversation_recall.py +645 -0
- corvin_console/_vendor/operator/bridges/shared/corvin_migrate.py +237 -0
- corvin_console/_vendor/operator/bridges/shared/cve_surveillance.py +241 -0
- corvin_console/_vendor/operator/bridges/shared/data_classification.py +810 -0
- corvin_console/_vendor/operator/bridges/shared/debug_logging.py +310 -0
- corvin_console/_vendor/operator/bridges/shared/decision_registry.py +328 -0
- corvin_console/_vendor/operator/bridges/shared/demo_hetzner_flow.py +329 -0
- corvin_console/_vendor/operator/bridges/shared/dialectic.py +1044 -0
- corvin_console/_vendor/operator/bridges/shared/disclosure.py +765 -0
- corvin_console/_vendor/operator/bridges/shared/egress_gate.py +634 -0
- corvin_console/_vendor/operator/bridges/shared/engine_detection.py +383 -0
- corvin_console/_vendor/operator/bridges/shared/engine_detector.py +161 -0
- corvin_console/_vendor/operator/bridges/shared/engine_metrics.py +90 -0
- corvin_console/_vendor/operator/bridges/shared/engine_models.py +172 -0
- corvin_console/_vendor/operator/bridges/shared/engine_policy.py +219 -0
- corvin_console/_vendor/operator/bridges/shared/engine_registry.py +265 -0
- corvin_console/_vendor/operator/bridges/shared/engine_switch.py +531 -0
- corvin_console/_vendor/operator/bridges/shared/engine_trust.py +830 -0
- corvin_console/_vendor/operator/bridges/shared/engines/capability_matrix.py +260 -0
- corvin_console/_vendor/operator/bridges/shared/engines/system_prompt_injector.py +397 -0
- corvin_console/_vendor/operator/bridges/shared/erasure_a2a.py +132 -0
- corvin_console/_vendor/operator/bridges/shared/erasure_handlers.py +798 -0
- corvin_console/_vendor/operator/bridges/shared/erasure_orchestrator.py +561 -0
- corvin_console/_vendor/operator/bridges/shared/execution_mode_router.py +262 -0
- corvin_console/_vendor/operator/bridges/shared/extension_api.py +295 -0
- corvin_console/_vendor/operator/bridges/shared/extension_registry.py +631 -0
- corvin_console/_vendor/operator/bridges/shared/flow_bundle.py +215 -0
- corvin_console/_vendor/operator/bridges/shared/flow_checkpoint.py +110 -0
- corvin_console/_vendor/operator/bridges/shared/flow_cli.py +217 -0
- corvin_console/_vendor/operator/bridges/shared/flow_definition.py +175 -0
- corvin_console/_vendor/operator/bridges/shared/flow_dispatcher.py +90 -0
- corvin_console/_vendor/operator/bridges/shared/flow_runner.py +396 -0
- corvin_console/_vendor/operator/bridges/shared/goal.py +149 -0
- corvin_console/_vendor/operator/bridges/shared/grant_checker.py +373 -0
- corvin_console/_vendor/operator/bridges/shared/grant_issuer.py +193 -0
- corvin_console/_vendor/operator/bridges/shared/grant_store.py +278 -0
- corvin_console/_vendor/operator/bridges/shared/helper_model.py +134 -0
- corvin_console/_vendor/operator/bridges/shared/hermes_bootstrap.py +170 -0
- corvin_console/_vendor/operator/bridges/shared/house_rules.py +533 -0
- corvin_console/_vendor/operator/bridges/shared/i18n.py +355 -0
- corvin_console/_vendor/operator/bridges/shared/incident_tracker.py +430 -0
- corvin_console/_vendor/operator/bridges/shared/instance_attestation.py +383 -0
- corvin_console/_vendor/operator/bridges/shared/instance_identity.py +278 -0
- corvin_console/_vendor/operator/bridges/shared/js/audit.js +150 -0
- corvin_console/_vendor/operator/bridges/shared/js/auth.js +177 -0
- corvin_console/_vendor/operator/bridges/shared/js/auth_elevation.js +134 -0
- corvin_console/_vendor/operator/bridges/shared/js/bridge_paths.js +126 -0
- corvin_console/_vendor/operator/bridges/shared/js/bridge_state.js +79 -0
- corvin_console/_vendor/operator/bridges/shared/js/chat_toggle.js +178 -0
- corvin_console/_vendor/operator/bridges/shared/js/health-server.js +44 -0
- corvin_console/_vendor/operator/bridges/shared/js/in_chat_commands.js +3201 -0
- corvin_console/_vendor/operator/bridges/shared/js/local-announce.js +42 -0
- corvin_console/_vendor/operator/bridges/shared/js/logger.js +191 -0
- corvin_console/_vendor/operator/bridges/shared/js/msg-id.js +12 -0
- corvin_console/_vendor/operator/bridges/shared/js/outbox.js +99 -0
- corvin_console/_vendor/operator/bridges/shared/js/settings.js +48 -0
- corvin_console/_vendor/operator/bridges/shared/layer_cli.py +480 -0
- corvin_console/_vendor/operator/bridges/shared/layer_integrity.py +298 -0
- corvin_console/_vendor/operator/bridges/shared/ldd.py +514 -0
- corvin_console/_vendor/operator/bridges/shared/memory.py +210 -0
- corvin_console/_vendor/operator/bridges/shared/memory_bridge.py +780 -0
- corvin_console/_vendor/operator/bridges/shared/model_selector.py +518 -0
- corvin_console/_vendor/operator/bridges/shared/nbac.py +387 -0
- corvin_console/_vendor/operator/bridges/shared/operator_declaration.py +202 -0
- corvin_console/_vendor/operator/bridges/shared/org_actor.py +386 -0
- corvin_console/_vendor/operator/bridges/shared/org_resolver.py +88 -0
- corvin_console/_vendor/operator/bridges/shared/org_store.py +313 -0
- corvin_console/_vendor/operator/bridges/shared/output_sentinel.py +604 -0
- corvin_console/_vendor/operator/bridges/shared/paths.py +272 -0
- corvin_console/_vendor/operator/bridges/shared/personal_tools.py +579 -0
- corvin_console/_vendor/operator/bridges/shared/phase3_cli.py +668 -0
- corvin_console/_vendor/operator/bridges/shared/pipe_registry.py +353 -0
- corvin_console/_vendor/operator/bridges/shared/process_table.py +408 -0
- corvin_console/_vendor/operator/bridges/shared/profile.py +577 -0
- corvin_console/_vendor/operator/bridges/shared/proposal.py +512 -0
- corvin_console/_vendor/operator/bridges/shared/quality_layers.py +110 -0
- corvin_console/_vendor/operator/bridges/shared/quota.py +622 -0
- corvin_console/_vendor/operator/bridges/shared/rag_audit_events.py +142 -0
- corvin_console/_vendor/operator/bridges/shared/rag_data_classification.py +152 -0
- corvin_console/_vendor/operator/bridges/shared/rag_erasure_handler.py +85 -0
- corvin_console/_vendor/operator/bridges/shared/rag_hub.py +321 -0
- corvin_console/_vendor/operator/bridges/shared/rag_import_export.py +131 -0
- corvin_console/_vendor/operator/bridges/shared/rag_manifest_generator.py +192 -0
- corvin_console/_vendor/operator/bridges/shared/rag_orchestrator.py +281 -0
- corvin_console/_vendor/operator/bridges/shared/rag_query_engine.py +318 -0
- corvin_console/_vendor/operator/bridges/shared/rag_rest_api.py +196 -0
- corvin_console/_vendor/operator/bridges/shared/rag_statistics.py +128 -0
- corvin_console/_vendor/operator/bridges/shared/remote_trigger_client.py +167 -0
- corvin_console/_vendor/operator/bridges/shared/remote_trigger_receiver.py +1770 -0
- corvin_console/_vendor/operator/bridges/shared/remote_trigger_sender.py +873 -0
- corvin_console/_vendor/operator/bridges/shared/roles.py +768 -0
- corvin_console/_vendor/operator/bridges/shared/router.py +283 -0
- corvin_console/_vendor/operator/bridges/shared/router_embedding.py +221 -0
- corvin_console/_vendor/operator/bridges/shared/sbom_generator.py +276 -0
- corvin_console/_vendor/operator/bridges/shared/scheduler.py +516 -0
- corvin_console/_vendor/operator/bridges/shared/security_capabilities.py +263 -0
- corvin_console/_vendor/operator/bridges/shared/session_reset.py +589 -0
- corvin_console/_vendor/operator/bridges/shared/settings_view.py +764 -0
- corvin_console/_vendor/operator/bridges/shared/skill_inject.py +625 -0
- corvin_console/_vendor/operator/bridges/shared/social_actor.py +243 -0
- corvin_console/_vendor/operator/bridges/shared/social_capability.py +793 -0
- corvin_console/_vendor/operator/bridges/shared/social_consent.py +228 -0
- corvin_console/_vendor/operator/bridges/shared/social_envelope.py +146 -0
- corvin_console/_vendor/operator/bridges/shared/social_feed.py +642 -0
- corvin_console/_vendor/operator/bridges/shared/social_http_server.py +545 -0
- corvin_console/_vendor/operator/bridges/shared/social_registry.py +537 -0
- corvin_console/_vendor/operator/bridges/shared/social_sanitizer.py +125 -0
- corvin_console/_vendor/operator/bridges/shared/space_domains.py +273 -0
- corvin_console/_vendor/operator/bridges/shared/space_profile.py +161 -0
- corvin_console/_vendor/operator/bridges/shared/task_complexity.py +169 -0
- corvin_console/_vendor/operator/bridges/shared/testing/__init__.py +25 -0
- corvin_console/_vendor/operator/bridges/shared/testing/e2e_real_engines.py +462 -0
- corvin_console/_vendor/operator/bridges/shared/testing/universal_test_framework.py +439 -0
- corvin_console/_vendor/operator/bridges/shared/user_model.py +707 -0
- corvin_console/_vendor/operator/bridges/shared/user_style.py +953 -0
- corvin_console/_vendor/operator/bridges/shared/vault.py +447 -0
- corvin_console/_vendor/operator/bridges/shared/wdat_report.py +404 -0
- corvin_console/_vendor/operator/bridges/shared/worker_engine_continuation.py +74 -0
- corvin_console/_vendor/operator/bridges/shared/worker_session_store.py +191 -0
- corvin_console/_vendor/operator/bridges/signal/README.md +171 -0
- corvin_console/_vendor/operator/bridges/signal/daemon.js +188 -0
- corvin_console/_vendor/operator/bridges/signal/handler.js +248 -0
- corvin_console/_vendor/operator/bridges/signal/package.json +10 -0
- corvin_console/_vendor/operator/bridges/signal/settings.json.example +11 -0
- corvin_console/_vendor/operator/bridges/slack/daemon.js +435 -0
- corvin_console/_vendor/operator/bridges/slack/package-lock.json +2584 -0
- corvin_console/_vendor/operator/bridges/slack/package.json +9 -0
- corvin_console/_vendor/operator/bridges/slack/settings.json.example +12 -0
- corvin_console/_vendor/operator/bridges/slack/slack-daemon.service.yaml +10 -0
- corvin_console/_vendor/operator/bridges/teams/cards.js +156 -0
- corvin_console/_vendor/operator/bridges/teams/daemon.js +204 -0
- corvin_console/_vendor/operator/bridges/teams/handler.js +265 -0
- corvin_console/_vendor/operator/bridges/teams/package-lock.json +1895 -0
- corvin_console/_vendor/operator/bridges/teams/package.json +10 -0
- corvin_console/_vendor/operator/bridges/teams/settings.json.example +12 -0
- corvin_console/_vendor/operator/bridges/telegram/daemon.js +402 -0
- corvin_console/_vendor/operator/bridges/telegram/package-lock.json +2387 -0
- corvin_console/_vendor/operator/bridges/telegram/package.json +9 -0
- corvin_console/_vendor/operator/bridges/telegram/settings.json.example +11 -0
- corvin_console/_vendor/operator/bridges/telegram/telegram-daemon.service.yaml +10 -0
- corvin_console/_vendor/operator/bridges/watchdog.sh +106 -0
- corvin_console/_vendor/operator/bridges/whatsapp/README.md +89 -0
- corvin_console/_vendor/operator/bridges/whatsapp/chat_state.js +213 -0
- corvin_console/_vendor/operator/bridges/whatsapp/daemon.js +1311 -0
- corvin_console/_vendor/operator/bridges/whatsapp/package-lock.json +4004 -0
- corvin_console/_vendor/operator/bridges/whatsapp/package.json +19 -0
- corvin_console/_vendor/operator/bridges/whatsapp/settings.json.example +13 -0
- corvin_console/_vendor/operator/bridges/whatsapp/whatsapp-daemon.service.yaml +10 -0
- corvin_console/_vendor/operator/cowork/README.md +172 -0
- corvin_console/_vendor/operator/cowork/bin/cowork +275 -0
- corvin_console/_vendor/operator/cowork/bin/gmail-helper +600 -0
- corvin_console/_vendor/operator/cowork/bin/gmail-helper.md +157 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-add.md +14 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-bind.md +19 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-list.md +13 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-rm.md +13 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-run.md +15 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-show.md +13 -0
- corvin_console/_vendor/operator/cowork/commands/cowork-unbind.md +14 -0
- corvin_console/_vendor/operator/cowork/lib/__init__.py +6 -0
- corvin_console/_vendor/operator/cowork/lib/paths.py +232 -0
- corvin_console/_vendor/operator/cowork/lib/resolver.py +777 -0
- corvin_console/_vendor/operator/cowork/pending_invites/a63204ad-862e-424c-b9ce-3878a6024e11.json +16 -0
- corvin_console/_vendor/operator/cowork/personas/assistant.json +37 -0
- corvin_console/_vendor/operator/cowork/personas/coder.json +32 -0
- corvin_console/_vendor/operator/cowork/personas/copilot-worker.json +28 -0
- corvin_console/_vendor/operator/cowork/personas/forge.json +64 -0
- corvin_console/_vendor/operator/cowork/personas/hermes-worker.json +26 -0
- corvin_console/_vendor/operator/cowork/personas/homeassistant.json +43 -0
- corvin_console/_vendor/operator/cowork/personas/inbox.json +32 -0
- corvin_console/_vendor/operator/cowork/personas/orchestrator.json +40 -0
- corvin_console/_vendor/operator/cowork/personas/os.json +21 -0
- corvin_console/_vendor/operator/cowork/personas/research.json +50 -0
- corvin_console/_vendor/operator/cowork/skills/cowork/SKILL.md +61 -0
- corvin_console/_vendor/operator/forge/forge/__init__.py +5 -0
- corvin_console/_vendor/operator/forge/forge/_compute_discovery.py +120 -0
- corvin_console/_vendor/operator/forge/forge/artifacts.py +664 -0
- corvin_console/_vendor/operator/forge/forge/breakers.py +173 -0
- corvin_console/_vendor/operator/forge/forge/cache.py +141 -0
- corvin_console/_vendor/operator/forge/forge/chain_dna.py +300 -0
- corvin_console/_vendor/operator/forge/forge/clag.py +879 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/__init__.py +177 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/data_policy.py +291 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/data_registry.py +268 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/format_sniffer.py +165 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/mcp_handlers.py +838 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/pii_detector.py +393 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/pii_presidio.py +138 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/pseudonymize.py +90 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/redactor.py +356 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/schema_extension.py +269 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/snapshot.py +858 -0
- corvin_console/_vendor/operator/forge/forge/corvin_data/strict_anonymizer.py +343 -0
- corvin_console/_vendor/operator/forge/forge/mcp_server.py +2342 -0
- corvin_console/_vendor/operator/forge/forge/multi_registry.py +166 -0
- corvin_console/_vendor/operator/forge/forge/paths.py +296 -0
- corvin_console/_vendor/operator/forge/forge/permissions.py +139 -0
- corvin_console/_vendor/operator/forge/forge/policy.json +18 -0
- corvin_console/_vendor/operator/forge/forge/policy.py +362 -0
- corvin_console/_vendor/operator/forge/forge/registry.py +372 -0
- corvin_console/_vendor/operator/forge/forge/runner.py +1094 -0
- corvin_console/_vendor/operator/forge/forge/runs.py +258 -0
- corvin_console/_vendor/operator/forge/forge/sandbox.py +229 -0
- corvin_console/_vendor/operator/forge/forge/sandbox_helpers/sitecustomize.py +151 -0
- corvin_console/_vendor/operator/forge/forge/scope.py +125 -0
- corvin_console/_vendor/operator/forge/forge/secret_vault.py +237 -0
- corvin_console/_vendor/operator/forge/forge/security_events.py +1498 -0
- corvin_console/_vendor/operator/forge/forge/static_check.py +101 -0
- corvin_console/_vendor/operator/forge/forge/sync.py +75 -0
- corvin_console/_vendor/operator/forge/forge/tenant_migrate.py +218 -0
- corvin_console/_vendor/operator/forge/forge/tenants.py +103 -0
- corvin_console/_vendor/operator/license/__init__.py +53 -0
- corvin_console/_vendor/operator/license/_corvin_seal_stub.py +134 -0
- corvin_console/_vendor/operator/license/a2a_network_pubkey.pem +9 -0
- corvin_console/_vendor/operator/license/capability.py +191 -0
- corvin_console/_vendor/operator/license/compute_quota.py +215 -0
- corvin_console/_vendor/operator/license/device_fp.py +46 -0
- corvin_console/_vendor/operator/license/instance_epoch.py +90 -0
- corvin_console/_vendor/operator/license/limits.py +190 -0
- corvin_console/_vendor/operator/license/manifest.py +270 -0
- corvin_console/_vendor/operator/license/nbac_network_pubkey.pem +9 -0
- corvin_console/_vendor/operator/license/seal_loader.py +90 -0
- corvin_console/_vendor/operator/license/session_refresh.py +502 -0
- corvin_console/_vendor/operator/license/sob.py +275 -0
- corvin_console/_vendor/operator/license/sob_crypto.py +221 -0
- corvin_console/_vendor/operator/license/validator.py +912 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/__init__.py +7 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/activate.py +351 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/brave-search.json +12 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/corvin-batch.json +22 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/fetch.json +10 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/filesystem.json +10 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/github.json +12 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/builtin_manifests/sqlite.json +10 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/catalog.py +98 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/compliance.py +310 -0
- corvin_console/_vendor/operator/mcp_manager/mcp_manager/installer.py +544 -0
- corvin_console/_vendor/operator/security/README.md +50 -0
- corvin_console/_vendor/operator/security/sign_layer_manifest.py +100 -0
- corvin_console/_vendor/operator/skill-forge/README.md +130 -0
- corvin_console/_vendor/operator/skill-forge/personas/skill-forge.json +47 -0
- corvin_console/_vendor/operator/skill-forge/scripts/skill_cleanup.py +212 -0
- corvin_console/_vendor/operator/skill-forge/skill-forge-mcp.service.yaml +18 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/__init__.py +11 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/linter.py +122 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/mcp_server.py +487 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/multi_registry.py +338 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/registry.py +648 -0
- corvin_console/_vendor/operator/skill-forge/skill_forge/session_cleanup.py +28 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/adr_gate/SKILL.md +134 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/adr_gate/meta.json +22 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_corvinOS_e2e_fresh_install/SKILL.md +186 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_corvinOS_e2e_integration/SKILL.md +166 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_corvinOS_e2e_ui_tour/SKILL.md +107 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_hermes_delegation/SKILL.md +41 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_lab_hetzner_e2e/SKILL.md +120 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_lab_hetzner_e2e_run/SKILL.md +110 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_lab_integration_sim/SKILL.md +166 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_lab_integration_social/SKILL.md +171 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_lab_verify_compliance/SKILL.md +170 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/code_trading_backtest_pattern/SKILL.md +39 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_code_review/SKILL.md +175 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_backend/SKILL.md +94 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_compliance/SKILL.md +101 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_e2e/SKILL.md +94 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_frontend/SKILL.md +86 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_gates/SKILL.md +80 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/corvinOS_review_quality/SKILL.md +171 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/usability_first/SKILL.md +99 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/web_ui_e2e_quality/SKILL.md +125 -0
- corvin_console/_vendor/operator/skill-forge/skills/dyn/web_ui_e2e_testing/SKILL.md +120 -0
- corvin_console/_vendor/operator/voice/scripts/agent_sunset.py +112 -0
- corvin_console/_vendor/operator/voice/scripts/audit_rotate.py +221 -0
- corvin_console/_vendor/operator/voice/scripts/autoupdate.sh +143 -0
- corvin_console/_vendor/operator/voice/scripts/bridge_cli.sh +123 -0
- corvin_console/_vendor/operator/voice/scripts/corvin-a2a +28 -0
- corvin_console/_vendor/operator/voice/scripts/corvin-annex-iv +9 -0
- corvin_console/_vendor/operator/voice/scripts/corvin-erasure +9 -0
- corvin_console/_vendor/operator/voice/scripts/corvin-incident +9 -0
- corvin_console/_vendor/operator/voice/scripts/corvin-instance-id +11 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_a2a.py +1460 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_annex_iv.py +876 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_erasure.py +359 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_incident.py +227 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_instance_id.py +335 -0
- corvin_console/_vendor/operator/voice/scripts/corvin_mcp.py +361 -0
- corvin_console/_vendor/operator/voice/scripts/detect_lang.py +84 -0
- corvin_console/_vendor/operator/voice/scripts/detect_voice_intent.py +78 -0
- corvin_console/_vendor/operator/voice/scripts/earcon.py +190 -0
- corvin_console/_vendor/operator/voice/scripts/engine_canary/probes.default.yaml +143 -0
- corvin_console/_vendor/operator/voice/scripts/engine_canary.py +803 -0
- corvin_console/_vendor/operator/voice/scripts/extract_last_assistant.py +93 -0
- corvin_console/_vendor/operator/voice/scripts/extract_last_user.py +148 -0
- corvin_console/_vendor/operator/voice/scripts/generate_image.py +77 -0
- corvin_console/_vendor/operator/voice/scripts/lang_cli.py +90 -0
- corvin_console/_vendor/operator/voice/scripts/listen.sh +79 -0
- corvin_console/_vendor/operator/voice/scripts/memory_cli.py +113 -0
- corvin_console/_vendor/operator/voice/scripts/profile_cli.py +102 -0
- corvin_console/_vendor/operator/voice/scripts/replay.sh +87 -0
- corvin_console/_vendor/operator/voice/scripts/say.py +364 -0
- corvin_console/_vendor/operator/voice/scripts/schedule_cli.py +101 -0
- corvin_console/_vendor/operator/voice/scripts/session_timeout_sweep.py +331 -0
- corvin_console/_vendor/operator/voice/scripts/speak.sh +346 -0
- corvin_console/_vendor/operator/voice/scripts/strip_for_tts.py +72 -0
- corvin_console/_vendor/operator/voice/scripts/stt/__init__.py +47 -0
- corvin_console/_vendor/operator/voice/scripts/stt/base.py +115 -0
- corvin_console/_vendor/operator/voice/scripts/stt/local_whisper.py +123 -0
- corvin_console/_vendor/operator/voice/scripts/stt/openai_whisper.py +122 -0
- corvin_console/_vendor/operator/voice/scripts/stt/resolver.py +170 -0
- corvin_console/_vendor/operator/voice/scripts/summarize.py +1412 -0
- corvin_console/_vendor/operator/voice/scripts/supply_chain_verify.py +625 -0
- corvin_console/_vendor/operator/voice/scripts/transcribe.py +80 -0
- corvin_console/_vendor/operator/voice/scripts/transcript_is_stale.py +101 -0
- corvin_console/_vendor/operator/voice/scripts/vault_cli.py +193 -0
- corvin_console/_vendor/operator/voice/scripts/voice-audit +10 -0
- corvin_console/_vendor/operator/voice/scripts/voice_audit.py +1100 -0
- corvin_console/_vendor/operator/voice/scripts/voice_cli.sh +169 -0
- corvin_console/_vendor/operator/voice/scripts/voice_lib.sh +479 -0
- corvin_console/_vendor/operator/voice/scripts/whatsapp_cli.sh +223 -0
- corvin_console/app.py +285 -0
- corvin_console/audit.py +304 -0
- corvin_console/auth.py +316 -0
- corvin_console/chat_runtime.py +1190 -0
- corvin_console/deps.py +83 -0
- corvin_console/engine_detection.py +383 -0
- corvin_console/hermes_bootstrap.py +170 -0
- corvin_console/routes/__init__.py +0 -0
- corvin_console/routes/a2a_pair.py +1183 -0
- corvin_console/routes/agents.py +405 -0
- corvin_console/routes/assistant.py +237 -0
- corvin_console/routes/audit_layers.py +321 -0
- corvin_console/routes/audit_tail.py +209 -0
- corvin_console/routes/auth_routes.py +227 -0
- corvin_console/routes/bridges.py +618 -0
- corvin_console/routes/byok.py +260 -0
- corvin_console/routes/chain_dual_track.py +313 -0
- corvin_console/routes/chat.py +1212 -0
- corvin_console/routes/chat_settings.py +460 -0
- corvin_console/routes/compute.py +3560 -0
- corvin_console/routes/compute_jobs.py +184 -0
- corvin_console/routes/connectors.py +725 -0
- corvin_console/routes/connectors_custom.py +226 -0
- corvin_console/routes/custom_engines.py +283 -0
- corvin_console/routes/custom_provider.py +403 -0
- corvin_console/routes/dashboard.py +170 -0
- corvin_console/routes/data_sources.py +410 -0
- corvin_console/routes/datasources_http.py +272 -0
- corvin_console/routes/engine.py +904 -0
- corvin_console/routes/engine_pref.py +216 -0
- corvin_console/routes/extensions.py +399 -0
- corvin_console/routes/files.py +377 -0
- corvin_console/routes/flows.py +608 -0
- corvin_console/routes/grants.py +238 -0
- corvin_console/routes/landing.py +66 -0
- corvin_console/routes/ldd.py +141 -0
- corvin_console/routes/license.py +810 -0
- corvin_console/routes/mcp_plugins.py +260 -0
- corvin_console/routes/members.py +174 -0
- corvin_console/routes/memory.py +339 -0
- corvin_console/routes/orgs.py +518 -0
- corvin_console/routes/personas.py +531 -0
- corvin_console/routes/profile.py +439 -0
- corvin_console/routes/promote.py +157 -0
- corvin_console/routes/quality_layers.py +177 -0
- corvin_console/routes/rag.py +491 -0
- corvin_console/routes/rag_hub.py +458 -0
- corvin_console/routes/rag_hub_analytics.py +229 -0
- corvin_console/routes/remote_trigger_log.py +297 -0
- corvin_console/routes/runs.py +74 -0
- corvin_console/routes/sessions.py +128 -0
- corvin_console/routes/settings.py +306 -0
- corvin_console/routes/settings_stream.py +135 -0
- corvin_console/routes/setup.py +872 -0
- corvin_console/routes/skills.py +167 -0
- corvin_console/routes/skills_manual.py +250 -0
- corvin_console/routes/space.py +560 -0
- corvin_console/routes/streams.py +215 -0
- corvin_console/routes/tasks.py +100 -0
- corvin_console/routes/tasks_impl.py +184 -0
- corvin_console/routes/tokens.py +13 -0
- corvin_console/routes/tools.py +155 -0
- corvin_console/routes/tools_manual.py +326 -0
- corvin_console/routes/voice.py +461 -0
- corvin_console/routes/webhooks.py +283 -0
- corvin_console/routes/workflows.py +3725 -0
- corvin_console/routes/workspaces.py +167 -0
- corvin_console/standalone.py +71 -0
- corvin_console/task_manager.py +599 -0
- corvin_console/task_pubsub.py +105 -0
- corvin_console/task_queue.py +420 -0
- corvin_console/task_worker_pool.py +509 -0
- corvin_console/test_chat_runtime_titles.py +187 -0
- corvin_console/test_chat_ws_robustness.py +130 -0
- corvin_console/test_execution_log_route.py +315 -0
- corvin_console/test_os_turns_route.py +287 -0
- corvin_console/test_task_api_http.py +96 -0
- corvin_console/test_task_manager.py +275 -0
- corvin_console/test_task_manager_e2e.py +180 -0
- corvin_console/test_task_queue.py +201 -0
- corvin_console/test_web_delegation.py +108 -0
- corvin_console/web/dev-login.html +56 -0
- corvin_console/web-next/.github/workflows/test.yml +384 -0
- corvin_console/web-next/.npmrc +4 -0
- corvin_console/web-next/components.json +21 -0
- corvin_console/web-next/dist/assets/FlowGraphView-CHkvXFqv.js +1 -0
- corvin_console/web-next/dist/assets/agent-hub-Xz7X65yu.js +1 -0
- corvin_console/web-next/dist/assets/agents-DjxEWJhH.js +1 -0
- corvin_console/web-next/dist/assets/api-keys-CMXvA9c_.js +1 -0
- corvin_console/web-next/dist/assets/bridges-Tyi9q24k.js +1 -0
- corvin_console/web-next/dist/assets/charts-Bd5FmgWm.js +1 -0
- corvin_console/web-next/dist/assets/chat-B5kQrDtT.js +2 -0
- corvin_console/web-next/dist/assets/compliance-0tbkhm4Q.js +1 -0
- corvin_console/web-next/dist/assets/compute-CrejNskz.js +1 -0
- corvin_console/web-next/dist/assets/connectors-ClRKPNR9.js +1 -0
- corvin_console/web-next/dist/assets/cowork--mcV1oIl.js +1 -0
- corvin_console/web-next/dist/assets/custom-provider-DWk3SPe5.js +1 -0
- corvin_console/web-next/dist/assets/dashboard-CS6avkU8.js +1 -0
- corvin_console/web-next/dist/assets/data-sources-DbtqNsU6.js +1 -0
- corvin_console/web-next/dist/assets/dialog-DTxC77cq.js +1 -0
- corvin_console/web-next/dist/assets/engine-control-CrXqzFac.js +1 -0
- corvin_console/web-next/dist/assets/engines-Bb34_KrT.js +1 -0
- corvin_console/web-next/dist/assets/extensions-D9NQoRij.js +1 -0
- corvin_console/web-next/dist/assets/files-Z49DZJmV.js +1 -0
- corvin_console/web-next/dist/assets/forge-QsCxCXxZ.js +1 -0
- corvin_console/web-next/dist/assets/highlight-BEHUn5zE.css +10 -0
- corvin_console/web-next/dist/assets/highlight-H0QttG7q.js +1 -0
- corvin_console/web-next/dist/assets/icons-feOBvBTC.js +26 -0
- corvin_console/web-next/dist/assets/index-CHZ8DNWJ.js +33 -0
- corvin_console/web-next/dist/assets/index-CWnyupzh.js +38 -0
- corvin_console/web-next/dist/assets/index-DfUwvumR.js +1 -0
- corvin_console/web-next/dist/assets/index-DjEgRQh1.css +1 -0
- corvin_console/web-next/dist/assets/input-CX8txbMD.js +1 -0
- corvin_console/web-next/dist/assets/katex-lljLFT0G.js +1 -0
- corvin_console/web-next/dist/assets/landing-DzneZ0xU.js +1 -0
- corvin_console/web-next/dist/assets/ldd-Cv8QDcfI.js +1 -0
- corvin_console/web-next/dist/assets/license-CPicrTOo.js +1 -0
- corvin_console/web-next/dist/assets/login-BdYs86BA.js +1 -0
- corvin_console/web-next/dist/assets/markdown-DB8lCzoA.js +1 -0
- corvin_console/web-next/dist/assets/memory-BwBmSTgk.js +1 -0
- corvin_console/web-next/dist/assets/mermaid-zFc89MlW.js +31 -0
- corvin_console/web-next/dist/assets/not-found-CkLpKXJK.js +1 -0
- corvin_console/web-next/dist/assets/orgs-DeIBDGgq.js +1 -0
- corvin_console/web-next/dist/assets/page-D0R5IrOA.js +2 -0
- corvin_console/web-next/dist/assets/people-DRKGBvrx.js +1 -0
- corvin_console/web-next/dist/assets/personas-D-yM_-xk.js +1 -0
- corvin_console/web-next/dist/assets/radix-CfDk86er.js +1 -0
- corvin_console/web-next/dist/assets/rag-BnYlOZ45.js +1 -0
- corvin_console/web-next/dist/assets/rag-hub-BbAvxY_z.js +1 -0
- corvin_console/web-next/dist/assets/reauth-dialog-B_HXRPEt.js +1 -0
- corvin_console/web-next/dist/assets/settings-B5btchOy.js +1 -0
- corvin_console/web-next/dist/assets/skills-COiQhkwN.js +1 -0
- corvin_console/web-next/dist/assets/space-CK0kgKBu.js +1 -0
- corvin_console/web-next/dist/assets/style-DqjQUz5i.js +1 -0
- corvin_console/web-next/dist/assets/style-Fd0xVSp_.css +1 -0
- corvin_console/web-next/dist/assets/tabs-BZO7dtI5.js +1 -0
- corvin_console/web-next/dist/assets/tanstack-B-jDpbmx.js +10 -0
- corvin_console/web-next/dist/assets/voice-BruO0NO1.js +1 -0
- corvin_console/web-next/dist/assets/wardley-L42UT6IY-DF21vKEX.js +1 -0
- corvin_console/web-next/dist/assets/workflows-DRkDGEPv.js +2 -0
- corvin_console/web-next/dist/favicon.svg +7 -0
- corvin_console/web-next/dist/index.html +74 -0
- corvin_console/web-next/dist/sw.js +179 -0
- corvin_console/web-next/eslint.config.js +56 -0
- corvin_console/web-next/full-test-results.txt +287 -0
- corvin_console/web-next/index.html +68 -0
- corvin_console/web-next/package.json +79 -0
- corvin_console/web-next/playwright-report/index.html +90 -0
- corvin_console/web-next/playwright.adr0124.config.ts +37 -0
- corvin_console/web-next/playwright.config.ts +90 -0
- corvin_console/web-next/playwright.isolated.config.ts +26 -0
- corvin_console/web-next/postcss.config.js +6 -0
- corvin_console/web-next/public/favicon.svg +7 -0
- corvin_console/web-next/public/sw.js +179 -0
- corvin_console/web-next/screenshot_onboarding.mjs +84 -0
- corvin_console/web-next/scripts/start-isolated-e2e-backend.sh +13 -0
- corvin_console/web-next/shoot.mjs +66 -0
- corvin_console/web-next/src/App.tsx +188 -0
- corvin_console/web-next/src/app/console/flows/FlowGraphView.tsx +410 -0
- corvin_console/web-next/src/app/console/flows/page.tsx +833 -0
- corvin_console/web-next/src/app/console/tasks/page.tsx +157 -0
- corvin_console/web-next/src/components/AcsTab.tsx +1065 -0
- corvin_console/web-next/src/components/ComputeGraphView.tsx +883 -0
- corvin_console/web-next/src/components/ComputeNarrativeDialog.tsx +173 -0
- corvin_console/web-next/src/components/DualTrackAuditPanel.tsx +391 -0
- corvin_console/web-next/src/components/EmptyState.tsx +46 -0
- corvin_console/web-next/src/components/FlowCreatorPanel.tsx +512 -0
- corvin_console/web-next/src/components/WdatAuditPanel.tsx +1152 -0
- corvin_console/web-next/src/components/assistant/ConsoleAssistant.tsx +710 -0
- corvin_console/web-next/src/components/commands-help-modal.tsx +176 -0
- corvin_console/web-next/src/components/error-boundary.tsx +148 -0
- corvin_console/web-next/src/components/layout.tsx +492 -0
- corvin_console/web-next/src/components/license-gate.tsx +164 -0
- corvin_console/web-next/src/components/markdown.tsx +258 -0
- corvin_console/web-next/src/components/media/index.tsx +335 -0
- corvin_console/web-next/src/components/quota-warning-banner.tsx +69 -0
- corvin_console/web-next/src/components/reauth-dialog.tsx +98 -0
- corvin_console/web-next/src/components/setup/SetupGate.tsx +948 -0
- corvin_console/web-next/src/components/table/index.tsx +416 -0
- corvin_console/web-next/src/components/task-panel.tsx +151 -0
- corvin_console/web-next/src/components/task-status-bar-m2.tsx +61 -0
- corvin_console/web-next/src/components/task-status-bar.tsx +170 -0
- corvin_console/web-next/src/components/theme-toggle.tsx +73 -0
- corvin_console/web-next/src/components/ui/badge.tsx +31 -0
- corvin_console/web-next/src/components/ui/button.tsx +51 -0
- corvin_console/web-next/src/components/ui/card.tsx +58 -0
- corvin_console/web-next/src/components/ui/dialog.tsx +105 -0
- corvin_console/web-next/src/components/ui/help-tooltip.tsx +137 -0
- corvin_console/web-next/src/components/ui/input.tsx +25 -0
- corvin_console/web-next/src/components/ui/label.tsx +19 -0
- corvin_console/web-next/src/components/ui/select.tsx +41 -0
- corvin_console/web-next/src/components/ui/skeleton.tsx +15 -0
- corvin_console/web-next/src/components/ui/switch.tsx +34 -0
- corvin_console/web-next/src/components/ui/tabs.tsx +55 -0
- corvin_console/web-next/src/components/ui/textarea.tsx +24 -0
- corvin_console/web-next/src/hooks/use-chat-task-status.ts +64 -0
- corvin_console/web-next/src/hooks/use-idb-quota.ts +72 -0
- corvin_console/web-next/src/hooks/use-settings-stream.ts +76 -0
- corvin_console/web-next/src/hooks/use-task-idb.ts +179 -0
- corvin_console/web-next/src/hooks/use-task-persistence.ts +105 -0
- corvin_console/web-next/src/hooks/use-task-polling.ts +66 -0
- corvin_console/web-next/src/hooks/use-task-progress.ts +94 -0
- corvin_console/web-next/src/hooks/use-task-sse.ts +183 -0
- corvin_console/web-next/src/hooks/use-tasks-with-live-updates.ts +266 -0
- corvin_console/web-next/src/hooks/usePrefetch.tsx +67 -0
- corvin_console/web-next/src/index.css +98 -0
- corvin_console/web-next/src/lazy-pages.ts +156 -0
- corvin_console/web-next/src/lib/api.ts +4697 -0
- corvin_console/web-next/src/lib/auth.tsx +60 -0
- corvin_console/web-next/src/lib/chat-registry.ts +542 -0
- corvin_console/web-next/src/lib/preferences.ts +106 -0
- corvin_console/web-next/src/lib/streaming-state.ts +109 -0
- corvin_console/web-next/src/lib/task-db.ts +286 -0
- corvin_console/web-next/src/lib/task-lifecycle.ts +176 -0
- corvin_console/web-next/src/lib/task-polling.ts +160 -0
- corvin_console/web-next/src/lib/task-recovery.ts +121 -0
- corvin_console/web-next/src/lib/utils.ts +31 -0
- corvin_console/web-next/src/main.tsx +54 -0
- corvin_console/web-next/src/pages/agent-hub.tsx +1987 -0
- corvin_console/web-next/src/pages/agents.tsx +710 -0
- corvin_console/web-next/src/pages/api-keys.tsx +558 -0
- corvin_console/web-next/src/pages/bridges.tsx +1774 -0
- corvin_console/web-next/src/pages/chat.tsx +1830 -0
- corvin_console/web-next/src/pages/coming-soon.tsx +29 -0
- corvin_console/web-next/src/pages/compliance.tsx +1410 -0
- corvin_console/web-next/src/pages/compute.tsx +3599 -0
- corvin_console/web-next/src/pages/connectors.tsx +745 -0
- corvin_console/web-next/src/pages/cowork.tsx +215 -0
- corvin_console/web-next/src/pages/custom-provider.tsx +684 -0
- corvin_console/web-next/src/pages/dashboard.tsx +746 -0
- corvin_console/web-next/src/pages/data-sources.tsx +1391 -0
- corvin_console/web-next/src/pages/engine-control.tsx +936 -0
- corvin_console/web-next/src/pages/engines.tsx +1888 -0
- corvin_console/web-next/src/pages/extensions.tsx +514 -0
- corvin_console/web-next/src/pages/files.tsx +610 -0
- corvin_console/web-next/src/pages/forge.tsx +675 -0
- corvin_console/web-next/src/pages/landing.tsx +197 -0
- corvin_console/web-next/src/pages/ldd.tsx +323 -0
- corvin_console/web-next/src/pages/license.tsx +417 -0
- corvin_console/web-next/src/pages/login.tsx +21 -0
- corvin_console/web-next/src/pages/mcp-plugins.tsx +371 -0
- corvin_console/web-next/src/pages/memory.tsx +381 -0
- corvin_console/web-next/src/pages/not-found.tsx +40 -0
- corvin_console/web-next/src/pages/orgs.tsx +1383 -0
- corvin_console/web-next/src/pages/people.tsx +321 -0
- corvin_console/web-next/src/pages/personas.tsx +605 -0
- corvin_console/web-next/src/pages/rag-hub.tsx +302 -0
- corvin_console/web-next/src/pages/rag.tsx +480 -0
- corvin_console/web-next/src/pages/settings.tsx +274 -0
- corvin_console/web-next/src/pages/skills.tsx +519 -0
- corvin_console/web-next/src/pages/space.tsx +1378 -0
- corvin_console/web-next/src/pages/voice.tsx +793 -0
- corvin_console/web-next/src/pages/workflows.tsx +3289 -0
- corvin_console/web-next/tailwind.config.ts +90 -0
- corvin_console/web-next/test-final-results.txt +312 -0
- corvin_console/web-next/test-results/.last-run.json +11 -0
- corvin_console/web-next/test-results/data-sources-e2e-Data-Sour-9ddaf-elete-SQLite-via-trash-icon-chromium/test-failed-1.png +0 -0
- corvin_console/web-next/test-results/flow-creator-Flow-Creator--2b720-d-creates-flow-yaml-on-disk-chromium/test-failed-1.png +0 -0
- corvin_console/web-next/test-results/flow-creator-Flow-Creator--4c9e2--returns-correct-step-graph-chromium/test-failed-1.png +0 -0
- corvin_console/web-next/tests/e2e/adr-0124-extensibility.spec.ts +679 -0
- corvin_console/web-next/tests/e2e/adr-0125-engine-detection.spec.ts +434 -0
- corvin_console/web-next/tests/e2e/adr-0126-claude-local.spec.ts +389 -0
- corvin_console/web-next/tests/e2e/auth-state.json +29 -0
- corvin_console/web-next/tests/e2e/bridges-qr.spec.ts +162 -0
- corvin_console/web-next/tests/e2e/chat-audit-graphs.spec.ts +611 -0
- corvin_console/web-next/tests/e2e/complete-feature-coverage.spec.ts +428 -0
- corvin_console/web-next/tests/e2e/complex-chained-flows.spec.ts +705 -0
- corvin_console/web-next/tests/e2e/compliance-audit.spec.ts +527 -0
- corvin_console/web-next/tests/e2e/compliance-critical-pages.spec.ts +618 -0
- corvin_console/web-next/tests/e2e/comprehensive-ui-integration.spec.ts +428 -0
- corvin_console/web-next/tests/e2e/comprehensive-workflow.spec.ts +212 -0
- corvin_console/web-next/tests/e2e/compute-awpkg-export.spec.ts +346 -0
- corvin_console/web-next/tests/e2e/critical-flows/real-backend.spec.ts +166 -0
- corvin_console/web-next/tests/e2e/custom-provider.spec.ts +298 -0
- corvin_console/web-next/tests/e2e/data-sources-e2e.spec.ts +301 -0
- corvin_console/web-next/tests/e2e/datasource-license-gate.spec.ts +242 -0
- corvin_console/web-next/tests/e2e/demo-spotify-analysis.spec.ts +317 -0
- corvin_console/web-next/tests/e2e/edge-cases-and-failures.spec.ts +649 -0
- corvin_console/web-next/tests/e2e/flow-creator.spec.ts +393 -0
- corvin_console/web-next/tests/e2e/global-setup-adr0124.ts +79 -0
- corvin_console/web-next/tests/e2e/ldd-active.spec.ts +319 -0
- corvin_console/web-next/tests/e2e/license-gates-comprehensive.spec.ts +224 -0
- corvin_console/web-next/tests/e2e/parallel-tasks.spec.ts +199 -0
- corvin_console/web-next/tests/e2e/persona-engine-editor.spec.ts +238 -0
- corvin_console/web-next/tests/e2e/rag-license-gate.spec.ts +176 -0
- corvin_console/web-next/tests/e2e/security-session-auth.spec.ts +977 -0
- corvin_console/web-next/tests/fixtures/mock-pages.tsx +216 -0
- corvin_console/web-next/tests/fixtures/server-extensions.ts +296 -0
- corvin_console/web-next/tests/fixtures/server.ts +398 -0
- corvin_console/web-next/tests/integration/auth/login-form.test.tsx +109 -0
- corvin_console/web-next/tests/integration/auth/login.test.tsx.skip +168 -0
- corvin_console/web-next/tests/integration/bridges/bridges-page.test.tsx +221 -0
- corvin_console/web-next/tests/integration/chat/chat-page.test.tsx +296 -0
- corvin_console/web-next/tests/integration/chat/task-persistence-hook.test.tsx +158 -0
- corvin_console/web-next/tests/integration/compliance/compliance-page.test.tsx +232 -0
- corvin_console/web-next/tests/integration/compute/job-list.test.tsx +87 -0
- corvin_console/web-next/tests/integration/compute/job-submission.test.tsx.skip +183 -0
- corvin_console/web-next/tests/integration/dashboard/dashboard-display.test.tsx +97 -0
- corvin_console/web-next/tests/integration/dashboard/overview.test.tsx.skip +147 -0
- corvin_console/web-next/tests/integration/engines/engines-page.test.tsx +204 -0
- corvin_console/web-next/tests/integration/forge/tool-list.test.tsx +113 -0
- corvin_console/web-next/tests/integration/forge/tool-management.test.tsx.skip +239 -0
- corvin_console/web-next/tests/integration/phase2-critical-flows.test.tsx +84 -0
- corvin_console/web-next/tests/integration/settings/persistence.test.tsx.skip +180 -0
- corvin_console/web-next/tests/integration/settings/settings-form.test.tsx +159 -0
- corvin_console/web-next/tests/integration/voice/voice-page.test.tsx +193 -0
- corvin_console/web-next/tests/integration/workflows/workflows-page.test.tsx +255 -0
- corvin_console/web-next/tests/setup.ts +81 -0
- corvin_console/web-next/tests/unit/components/Badge.test.tsx +60 -0
- corvin_console/web-next/tests/unit/components/Button.test.tsx +89 -0
- corvin_console/web-next/tests/unit/components/Card.test.tsx +129 -0
- corvin_console/web-next/tests/unit/components/Dialog.test.tsx +113 -0
- corvin_console/web-next/tests/unit/components/HelpTooltip.test.tsx +90 -0
- corvin_console/web-next/tests/unit/components/Input.test.tsx +59 -0
- corvin_console/web-next/tests/unit/components/Label.test.tsx +86 -0
- corvin_console/web-next/tests/unit/components/Select.test.tsx +99 -0
- corvin_console/web-next/tests/unit/components/Skeleton.test.tsx +66 -0
- corvin_console/web-next/tests/unit/components/Tabs.test.tsx +112 -0
- corvin_console/web-next/tests/unit/components/Textarea.test.tsx +68 -0
- corvin_console/web-next/tests/unit/hooks/useSettingsStream.test.ts +203 -0
- corvin_console/web-next/tests/unit/hooks/useTaskIDB.test.ts +164 -0
- corvin_console/web-next/tests/unit/hooks/useTaskPolling.test.ts +123 -0
- corvin_console/web-next/tests/unit/hooks/useTaskProgress.test.ts +128 -0
- corvin_console/web-next/tests/unit/hooks/useTaskSSE.test.ts +155 -0
- corvin_console/web-next/tests/unit/hooks/useTasksWithLiveUpdates.test.ts +437 -0
- corvin_console/web-next/tests/unit/lib/api.test.ts +307 -0
- corvin_console/web-next/tests/unit/lib/auth.test.ts +157 -0
- corvin_console/web-next/tests/unit/lib/chat-registry.test.ts +523 -0
- corvin_console/web-next/tests/unit/lib/detectTtsLang.test.ts +195 -0
- corvin_console/web-next/tests/unit/lib/preferences.test.ts +162 -0
- corvin_console/web-next/tests/unit/lib/streaming-state.test.ts +247 -0
- corvin_console/web-next/tests/unit/lib/task-db.test.ts +112 -0
- corvin_console/web-next/tests/unit/lib/task-lifecycle.test.ts +147 -0
- corvin_console/web-next/tests/unit/lib/taskRecovery.test.ts +226 -0
- corvin_console/web-next/tests/unit/lib/utils.test.ts +230 -0
- corvin_console/web-next/tests/utils/test-utils.tsx +64 -0
- corvin_console/web-next/tsconfig.json +26 -0
- corvin_console/web-next/tsconfig.node.json +11 -0
- corvin_console/web-next/tsconfig.node.tsbuildinfo +1 -0
- corvin_console/web-next/tsconfig.tsbuildinfo +1 -0
- corvin_console/web-next/vite.config.d.ts +2 -0
- corvin_console/web-next/vite.config.js +75 -0
- corvin_console/web-next/vite.config.ts +69 -0
- corvin_console/web-next/vitest.config.js +34 -0
- corvin_gateway/__init__.py +32 -0
- corvin_gateway/app.py +724 -0
- corvin_gateway/audit_metrics.py +971 -0
- corvin_gateway/auth.py +55 -0
- corvin_gateway/cli.py +317 -0
- corvin_gateway/console_api.py +297 -0
- corvin_gateway/dispatcher.py +593 -0
- corvin_gateway/durable_queue.py +211 -0
- corvin_gateway/grpc/__init__.py +18 -0
- corvin_gateway/grpc/corvin.proto +92 -0
- corvin_gateway/grpc/grpc_server.py +356 -0
- corvin_gateway/oidc.py +555 -0
- corvin_gateway/packaging.py +600 -0
- corvin_gateway/rate_limit.py +186 -0
- corvin_gateway/runs.py +394 -0
- corvin_gateway/sbom.py +474 -0
- corvin_gateway/scim.py +477 -0
- corvin_gateway/sse.py +272 -0
- corvin_gateway/tenant_config.py +377 -0
- corvin_gateway/webhooks.py +457 -0
- corvin_license/__init__.py +12 -0
- corvin_license/app.py +452 -0
- corvin_license/audit.py +253 -0
- corvin_license/cli.py +307 -0
- corvin_license/grace.py +260 -0
- corvin_license/portal.py +88 -0
- corvin_license/pubkey.pem +11 -0
- corvin_license/sync.py +355 -0
- corvin_license/tier_flags.py +157 -0
- corvin_license/trial.py +213 -0
- corvin_license/verifier.py +528 -0
- corvinos-0.1.0.dist-info/METADATA +587 -0
- corvinos-0.1.0.dist-info/RECORD +1116 -0
- corvinos-0.1.0.dist-info/WHEEL +4 -0
- corvinos-0.1.0.dist-info/entry_points.txt +11 -0
- corvinos-0.1.0.dist-info/licenses/LICENSE +201 -0
- corvinos-0.1.0.dist-info/licenses/NOTICE +56 -0
- dev.sh +56 -0
- ops/.dockerignore +51 -0
- ops/.env.example +182 -0
- ops/.env.local-test.template +38 -0
- ops/.env.template +49 -0
- ops/Caddyfile.template +40 -0
- ops/Dockerfile +128 -0
- ops/bootstrap/10-system-prep.sh +86 -0
- ops/bootstrap/20-fetch-repo.sh +39 -0
- ops/bootstrap/30-tenant-init.sh +63 -0
- ops/bootstrap/40-launch.sh +49 -0
- ops/docker-compose.local-test.yml +102 -0
- ops/docker-compose.yml +106 -0
- ops/docker-quick-start.sh +208 -0
- ops/entrypoint.sh +54 -0
- ops/healthcheck.sh +51 -0
- ops/laptop/corvin-claude-creds-sync.service +16 -0
- ops/laptop/corvin-claude-creds-sync.timer +14 -0
- ops/laptop/corvin-sync-claude-creds.sh +41 -0
- ops/laptop/corvin-tunnel.service +44 -0
- ops/launcher/a2a_entry.py +37 -0
- ops/launcher/corvin/__init__.py +2 -0
- ops/launcher/corvin/__main__.py +4 -0
- ops/launcher/corvin/backend.py +9 -0
- ops/launcher/corvin/cli.py +546 -0
- ops/launcher/corvin/config.py +41 -0
- ops/launcher/corvin/docker_backend.py +170 -0
- ops/launcher/corvin/native_backend.py +99 -0
- ops/launcher/corvin/ollama.py +59 -0
- ops/launcher/corvin/serve_backend.py +110 -0
- ops/launcher/corvin/serve_entry.py +44 -0
- ops/launcher/flow_entry.py +33 -0
- ops/launcher/instance_id_entry.py +32 -0
- ops/launcher/layer_entry.py +39 -0
- ops/launcher/wdat_report_entry.py +28 -0
- ops/supervisord.conf +106 -0
- ops/systemd/corvin-audit-verify.service +15 -0
- ops/systemd/corvin-audit-verify.timer +11 -0
- ops/systemd/corvin-compose.service +18 -0
- ops/systemd/corvin-task-worker.service +21 -0
- ops/tailscale/.env.template +60 -0
- ops/tailscale/docker-compose.yml +99 -0
- pyproject.toml +12 -0
- scripts/docker-compose.keycloak.yml +46 -0
- scripts/keycloak_smoke.py +164 -0
- systemd/corvin-webui.service +31 -0
- tests/__init__.py +0 -0
- tests/test_app.py +271 -0
- tests/test_audit_metrics.py +495 -0
- tests/test_auth.py +8 -0
- tests/test_container.py +133 -0
- tests/test_dispatcher.py +351 -0
- tests/test_engine_policy.py +252 -0
- tests/test_keycloak_smoke.py +402 -0
- tests/test_metrics_endpoint.py +203 -0
- tests/test_observability_dashboards.py +113 -0
- tests/test_oidc.py +344 -0
- tests/test_packaging.py +341 -0
- tests/test_phase7.py +305 -0
- tests/test_phase7_followup.py +178 -0
- tests/test_sbom.py +411 -0
- tests/test_scim.py +245 -0
- tests/test_smoke.py +333 -0
- tests/test_sse.py +376 -0
- tests/test_tenant_config.py +328 -0
- tests/test_tenant_cross_plugin.py +310 -0
- tests/test_webhooks.py +566 -0
- tests/test_zone_policy.py +236 -0
Dockerfile
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# ADR-0007 Phase 4 — Corvin Gateway OCI image
|
|
2
|
+
#
|
|
3
|
+
# Build: docker build -t corvin-gateway:latest \
|
|
4
|
+
# -f core/gateway/Dockerfile .
|
|
5
|
+
# (the repo root is the build context; both corvin-gateway and forge
|
|
6
|
+
# sources are referenced relative to it.)
|
|
7
|
+
# Run: docker run --rm -p 8000:8000 \
|
|
8
|
+
# -v $HOME/.corvin:/var/lib/corvin \
|
|
9
|
+
# -e CORVIN_HOME=/var/lib/corvin \
|
|
10
|
+
# corvin-gateway:latest
|
|
11
|
+
#
|
|
12
|
+
# Notes
|
|
13
|
+
# -----
|
|
14
|
+
# * Slim base — the gateway has no need for system C toolchains at
|
|
15
|
+
# runtime. cryptography wheels ship with pre-built binaries.
|
|
16
|
+
# * Non-root user with a stable uid/gid so the operator can chown
|
|
17
|
+
# the bind-mounted CORVIN_HOME to match.
|
|
18
|
+
# * /healthz is the documented liveness probe; the chart wires it.
|
|
19
|
+
#
|
|
20
|
+
# What this image does NOT include
|
|
21
|
+
# --------------------------------
|
|
22
|
+
# * Any engine binary (claude / codex). The gateway dispatches via
|
|
23
|
+
# the engine layer at request time; for production deployments
|
|
24
|
+
# the engine sidecar runs separately (Phase 4 only ships the
|
|
25
|
+
# gateway).
|
|
26
|
+
# * bwrap. The sandbox is a forge / skill-forge concern; gateway-
|
|
27
|
+
# side runs go through the engine layer's own sandbox model.
|
|
28
|
+
|
|
29
|
+
FROM python:3.12-slim AS runtime
|
|
30
|
+
|
|
31
|
+
LABEL org.opencontainers.image.title="Corvin Gateway"
|
|
32
|
+
LABEL org.opencontainers.image.description="Multi-tenant REST API for Corvin (ADR-0007)"
|
|
33
|
+
LABEL org.opencontainers.image.source="https://github.com/veegee82/Corvin"
|
|
34
|
+
LABEL org.opencontainers.image.licenses="see repo LICENSE"
|
|
35
|
+
|
|
36
|
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
37
|
+
PYTHONUNBUFFERED=1 \
|
|
38
|
+
PIP_NO_CACHE_DIR=1 \
|
|
39
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1
|
|
40
|
+
|
|
41
|
+
# Non-root runtime user. The chart's securityContext mirrors this.
|
|
42
|
+
RUN groupadd --system --gid 4711 corvin \
|
|
43
|
+
&& useradd --system --uid 4711 --gid 4711 --home /var/lib/corvin corvin \
|
|
44
|
+
&& mkdir -p /var/lib/corvin/tenants/_default/global \
|
|
45
|
+
&& chown -R corvin:corvin /var/lib/corvin
|
|
46
|
+
|
|
47
|
+
WORKDIR /opt/corvin-gateway
|
|
48
|
+
|
|
49
|
+
# Install runtime deps first (cached layer)
|
|
50
|
+
COPY --chown=corvin:corvin core/gateway/requirements.txt \
|
|
51
|
+
/opt/corvin-gateway/requirements.txt
|
|
52
|
+
RUN pip install --no-cache-dir -r /opt/corvin-gateway/requirements.txt
|
|
53
|
+
|
|
54
|
+
# Plugin code -- two packages: the gateway proper and the forge
|
|
55
|
+
# subset it depends on at import time (tenants module + paths +
|
|
56
|
+
# security_events). Build context is the repo root.
|
|
57
|
+
COPY --chown=corvin:corvin core/gateway/corvin_gateway \
|
|
58
|
+
/opt/corvin-gateway/corvin_gateway
|
|
59
|
+
COPY --chown=corvin:corvin operator/forge/forge \
|
|
60
|
+
/opt/corvin-gateway/forge
|
|
61
|
+
|
|
62
|
+
# Cross-PYTHONPATH so `from forge.tenants import ...` resolves.
|
|
63
|
+
ENV PYTHONPATH=/opt/corvin-gateway
|
|
64
|
+
|
|
65
|
+
EXPOSE 8000
|
|
66
|
+
USER corvin
|
|
67
|
+
ENV CORVIN_HOME=/var/lib/corvin
|
|
68
|
+
|
|
69
|
+
# uvicorn is the documented production entry point. Operators
|
|
70
|
+
# overlay --workers, --proxy-headers, --forwarded-allow-ips via
|
|
71
|
+
# the chart values.
|
|
72
|
+
ENTRYPOINT ["uvicorn", "corvin_gateway.app:app", "--host", "0.0.0.0", "--port", "8000"]
|
chart/Chart.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
apiVersion: v2
|
|
2
|
+
name: corvin-gateway
|
|
3
|
+
description: |
|
|
4
|
+
Corvin Gateway — multi-tenant REST API (ADR-0007).
|
|
5
|
+
Opt-in deployment artefact; single-operator setups never enable it.
|
|
6
|
+
type: application
|
|
7
|
+
version: 0.1.0
|
|
8
|
+
appVersion: "0.1.0-phase-4"
|
|
9
|
+
keywords:
|
|
10
|
+
- corvin
|
|
11
|
+
- gateway
|
|
12
|
+
- multi-tenant
|
|
13
|
+
- rest-api
|
|
14
|
+
home: https://github.com/veegee82/Corvin
|
|
15
|
+
maintainers:
|
|
16
|
+
- name: Corvin
|
|
17
|
+
url: https://github.com/veegee82/Corvin
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{{/*
|
|
2
|
+
Standard Helm helpers for corvin-gateway.
|
|
3
|
+
*/}}
|
|
4
|
+
|
|
5
|
+
{{- define "corvin-gateway.name" -}}
|
|
6
|
+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
|
7
|
+
{{- end -}}
|
|
8
|
+
|
|
9
|
+
{{- define "corvin-gateway.fullname" -}}
|
|
10
|
+
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
|
11
|
+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
|
12
|
+
{{- end -}}
|
|
13
|
+
|
|
14
|
+
{{- define "corvin-gateway.labels" -}}
|
|
15
|
+
app.kubernetes.io/name: {{ include "corvin-gateway.name" . }}
|
|
16
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
17
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
18
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
19
|
+
helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
20
|
+
{{- end -}}
|
|
21
|
+
|
|
22
|
+
{{- define "corvin-gateway.selectorLabels" -}}
|
|
23
|
+
app.kubernetes.io/name: {{ include "corvin-gateway.name" . }}
|
|
24
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
25
|
+
{{- end -}}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: Deployment
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ include "corvin-gateway.fullname" . }}
|
|
5
|
+
labels:
|
|
6
|
+
{{- include "corvin-gateway.labels" . | nindent 4 }}
|
|
7
|
+
spec:
|
|
8
|
+
replicas: {{ .Values.replicaCount }}
|
|
9
|
+
selector:
|
|
10
|
+
matchLabels:
|
|
11
|
+
{{- include "corvin-gateway.selectorLabels" . | nindent 6 }}
|
|
12
|
+
template:
|
|
13
|
+
metadata:
|
|
14
|
+
labels:
|
|
15
|
+
{{- include "corvin-gateway.selectorLabels" . | nindent 8 }}
|
|
16
|
+
spec:
|
|
17
|
+
securityContext:
|
|
18
|
+
{{- toYaml .Values.securityContext | nindent 8 }}
|
|
19
|
+
containers:
|
|
20
|
+
- name: gateway
|
|
21
|
+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
|
22
|
+
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
23
|
+
ports:
|
|
24
|
+
- name: http
|
|
25
|
+
containerPort: 8000
|
|
26
|
+
protocol: TCP
|
|
27
|
+
env:
|
|
28
|
+
- name: CORVIN_HOME
|
|
29
|
+
value: {{ .Values.persistence.mountPath | quote }}
|
|
30
|
+
{{- with .Values.env }}
|
|
31
|
+
{{- toYaml . | nindent 12 }}
|
|
32
|
+
{{- end }}
|
|
33
|
+
livenessProbe:
|
|
34
|
+
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
|
35
|
+
readinessProbe:
|
|
36
|
+
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
|
37
|
+
resources:
|
|
38
|
+
{{- toYaml .Values.resources | nindent 12 }}
|
|
39
|
+
volumeMounts:
|
|
40
|
+
{{- if .Values.persistence.enabled }}
|
|
41
|
+
- name: corvin-home
|
|
42
|
+
mountPath: {{ .Values.persistence.mountPath }}
|
|
43
|
+
{{- end }}
|
|
44
|
+
{{- with .Values.extraVolumeMounts }}
|
|
45
|
+
{{- toYaml . | nindent 12 }}
|
|
46
|
+
{{- end }}
|
|
47
|
+
volumes:
|
|
48
|
+
{{- if .Values.persistence.enabled }}
|
|
49
|
+
- name: corvin-home
|
|
50
|
+
persistentVolumeClaim:
|
|
51
|
+
claimName: {{ include "corvin-gateway.fullname" . }}-home
|
|
52
|
+
{{- end }}
|
|
53
|
+
{{- with .Values.extraVolumes }}
|
|
54
|
+
{{- toYaml . | nindent 8 }}
|
|
55
|
+
{{- end }}
|
chart/templates/pvc.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{{- if .Values.persistence.enabled }}
|
|
2
|
+
apiVersion: v1
|
|
3
|
+
kind: PersistentVolumeClaim
|
|
4
|
+
metadata:
|
|
5
|
+
name: {{ include "corvin-gateway.fullname" . }}-home
|
|
6
|
+
labels:
|
|
7
|
+
{{- include "corvin-gateway.labels" . | nindent 4 }}
|
|
8
|
+
spec:
|
|
9
|
+
accessModes:
|
|
10
|
+
{{- toYaml .Values.persistence.accessModes | nindent 4 }}
|
|
11
|
+
resources:
|
|
12
|
+
requests:
|
|
13
|
+
storage: {{ .Values.persistence.size }}
|
|
14
|
+
{{- if .Values.persistence.storageClass }}
|
|
15
|
+
storageClassName: {{ .Values.persistence.storageClass | quote }}
|
|
16
|
+
{{- end }}
|
|
17
|
+
{{- end }}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
kind: Service
|
|
3
|
+
metadata:
|
|
4
|
+
name: {{ include "corvin-gateway.fullname" . }}
|
|
5
|
+
labels:
|
|
6
|
+
{{- include "corvin-gateway.labels" . | nindent 4 }}
|
|
7
|
+
spec:
|
|
8
|
+
type: {{ .Values.service.type }}
|
|
9
|
+
ports:
|
|
10
|
+
- name: http
|
|
11
|
+
port: {{ .Values.service.port }}
|
|
12
|
+
targetPort: 8000
|
|
13
|
+
protocol: TCP
|
|
14
|
+
selector:
|
|
15
|
+
{{- include "corvin-gateway.selectorLabels" . | nindent 4 }}
|
chart/values.yaml
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Default values for corvin-gateway.
|
|
2
|
+
# These keep the chart shippable; operators override per environment.
|
|
3
|
+
|
|
4
|
+
image:
|
|
5
|
+
repository: corvin-gateway
|
|
6
|
+
tag: "0.1.0-phase-4"
|
|
7
|
+
pullPolicy: IfNotPresent
|
|
8
|
+
|
|
9
|
+
replicaCount: 1
|
|
10
|
+
|
|
11
|
+
service:
|
|
12
|
+
type: ClusterIP
|
|
13
|
+
port: 8000
|
|
14
|
+
|
|
15
|
+
# CORVIN_HOME is mounted from a PersistentVolumeClaim so tenant
|
|
16
|
+
# state (tokens, runs, webhooks, oidc, scim, audit chains) survives
|
|
17
|
+
# pod restarts. Default uses a 10 GiB RWO claim; operators that
|
|
18
|
+
# need RWX across replicas adjust storageClass + accessModes.
|
|
19
|
+
persistence:
|
|
20
|
+
enabled: true
|
|
21
|
+
storageClass: ""
|
|
22
|
+
accessModes:
|
|
23
|
+
- ReadWriteOnce
|
|
24
|
+
size: 10Gi
|
|
25
|
+
mountPath: /var/lib/corvin
|
|
26
|
+
|
|
27
|
+
# Resources scaled for the Phase 2 traffic envelope (≤ 1k req/s).
|
|
28
|
+
resources:
|
|
29
|
+
requests:
|
|
30
|
+
cpu: 100m
|
|
31
|
+
memory: 256Mi
|
|
32
|
+
limits:
|
|
33
|
+
cpu: 1000m
|
|
34
|
+
memory: 1Gi
|
|
35
|
+
|
|
36
|
+
# Non-root runtime user matches the image's `corvin` user (uid 4711).
|
|
37
|
+
# Operators on restrictive PSPs may need to relax fsGroup if their
|
|
38
|
+
# storage class returns volumes the gateway user can't write to.
|
|
39
|
+
securityContext:
|
|
40
|
+
runAsNonRoot: true
|
|
41
|
+
runAsUser: 4711
|
|
42
|
+
runAsGroup: 4711
|
|
43
|
+
fsGroup: 4711
|
|
44
|
+
allowPrivilegeEscalation: false
|
|
45
|
+
readOnlyRootFilesystem: false # uvicorn needs /tmp for connect-streams
|
|
46
|
+
capabilities:
|
|
47
|
+
drop: [ALL]
|
|
48
|
+
|
|
49
|
+
# Probes target /healthz which the gateway serves unauthenticated.
|
|
50
|
+
livenessProbe:
|
|
51
|
+
httpGet:
|
|
52
|
+
path: /healthz
|
|
53
|
+
port: 8000
|
|
54
|
+
initialDelaySeconds: 5
|
|
55
|
+
periodSeconds: 15
|
|
56
|
+
timeoutSeconds: 3
|
|
57
|
+
|
|
58
|
+
readinessProbe:
|
|
59
|
+
httpGet:
|
|
60
|
+
path: /healthz
|
|
61
|
+
port: 8000
|
|
62
|
+
initialDelaySeconds: 2
|
|
63
|
+
periodSeconds: 5
|
|
64
|
+
timeoutSeconds: 2
|
|
65
|
+
|
|
66
|
+
# Extra env vars injected into the deployment.
|
|
67
|
+
env: []
|
|
68
|
+
# - name: CORVIN_DEBUG
|
|
69
|
+
# value: "1"
|
|
70
|
+
|
|
71
|
+
# Operator-supplied secret(s) for gateway tokens / webhook secrets.
|
|
72
|
+
# The chart does NOT generate tokens; the operator runs the CLI
|
|
73
|
+
# (`python -m corvin_gateway.cli token issue …`) once a pod is up.
|
|
74
|
+
extraVolumes: []
|
|
75
|
+
extraVolumeMounts: []
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Audit-chain integration for AWPKG.
|
|
2
|
+
|
|
3
|
+
Wraps forge.security_events.write_event() when available; falls back to a
|
|
4
|
+
standalone append when the forge plugin is not on sys.path. Either way the
|
|
5
|
+
output format is identical so verify_chain can read a mixed log.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import fcntl
|
|
10
|
+
import hashlib
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import sys
|
|
14
|
+
import time
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _audit_path() -> Path:
|
|
20
|
+
env = os.environ.get("VOICE_AUDIT_PATH") or os.environ.get("FORGE_AUDIT_PATH")
|
|
21
|
+
if env:
|
|
22
|
+
return Path(env)
|
|
23
|
+
corvin_home = os.environ.get("CORVIN_HOME")
|
|
24
|
+
if corvin_home:
|
|
25
|
+
return Path(corvin_home) / "global" / "forge" / "audit.jsonl"
|
|
26
|
+
here = Path(__file__).resolve()
|
|
27
|
+
for parent in [here, *here.parents]:
|
|
28
|
+
if (parent / ".corvin_repo").exists() or (parent / "plugins").is_dir(): # legacy fallback during migration
|
|
29
|
+
for sub in (".corvin",):
|
|
30
|
+
candidate = parent / sub
|
|
31
|
+
if candidate.is_dir():
|
|
32
|
+
return candidate / "global" / "forge" / "audit.jsonl"
|
|
33
|
+
return parent / ".corvin" / "global" / "forge" / "audit.jsonl"
|
|
34
|
+
return Path.home() / ".corvin" / "global" / "forge" / "audit.jsonl"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _try_forge_write(event_type: str, details: dict[str, Any]) -> bool:
|
|
38
|
+
try:
|
|
39
|
+
forge_root = Path(__file__).resolve().parents[3] / "forge" / "forge"
|
|
40
|
+
if forge_root not in [Path(p) for p in sys.path]:
|
|
41
|
+
sys.path.insert(0, str(forge_root.parent))
|
|
42
|
+
from forge.security_events import write_event # type: ignore[import]
|
|
43
|
+
write_event(_audit_path(), event_type, details=details)
|
|
44
|
+
return True
|
|
45
|
+
except Exception:
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _standalone_write(event_type: str, details: dict[str, Any]) -> None:
|
|
50
|
+
path = _audit_path()
|
|
51
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
52
|
+
_SEVERITIES = {
|
|
53
|
+
"package.installed": "INFO",
|
|
54
|
+
"package.removed": "INFO",
|
|
55
|
+
"package.install_denied": "WARNING",
|
|
56
|
+
"package.inspect": "INFO",
|
|
57
|
+
}
|
|
58
|
+
severity = _SEVERITIES.get(event_type, "INFO")
|
|
59
|
+
with open(path, "a+b") as fh:
|
|
60
|
+
fcntl.flock(fh, fcntl.LOCK_EX)
|
|
61
|
+
try:
|
|
62
|
+
prev_hash = ""
|
|
63
|
+
try:
|
|
64
|
+
# FND-18: read the TRUE last chain record. The old 4 KB-tail read
|
|
65
|
+
# missed the last line whenever the final record exceeded 4 KB →
|
|
66
|
+
# a wrong/empty prev_hash → a broken chain link. Walk all lines
|
|
67
|
+
# (the awpkg fallback chain is small) and keep the last valid hash.
|
|
68
|
+
fh.seek(0)
|
|
69
|
+
for line in fh.read().decode("utf-8", errors="replace").splitlines():
|
|
70
|
+
line = line.strip()
|
|
71
|
+
if not line:
|
|
72
|
+
continue
|
|
73
|
+
try:
|
|
74
|
+
prev_hash = json.loads(line).get("hash", prev_hash)
|
|
75
|
+
except Exception:
|
|
76
|
+
pass
|
|
77
|
+
except Exception:
|
|
78
|
+
pass
|
|
79
|
+
# ADR-0129 — apply the metadata-only floor even on the forge-
|
|
80
|
+
# absent fallback path, so this writer can't bypass it. If forge
|
|
81
|
+
# is genuinely unimportable, inline a minimal denylist (fail-safe).
|
|
82
|
+
_det = details
|
|
83
|
+
try:
|
|
84
|
+
from forge.security_events import filter_audit_details as _fad # type: ignore
|
|
85
|
+
_det, _ = _fad(details, event_type=event_type)
|
|
86
|
+
except Exception: # noqa: BLE001 — forge truly absent: minimal floor
|
|
87
|
+
_bad = ("prompt", "output", "text", "secret", "password",
|
|
88
|
+
"token", "credential", "email", "body", "content")
|
|
89
|
+
_det = {k: v for k, v in (details or {}).items()
|
|
90
|
+
if str(k).lower() not in _bad}
|
|
91
|
+
record: dict[str, Any] = {
|
|
92
|
+
"ts": time.time(),
|
|
93
|
+
"event_type": str(event_type)[:128],
|
|
94
|
+
"severity": severity,
|
|
95
|
+
"run_id": "",
|
|
96
|
+
"tool": "",
|
|
97
|
+
"details": _det,
|
|
98
|
+
"prev_hash": prev_hash,
|
|
99
|
+
}
|
|
100
|
+
canonical = json.dumps(record, sort_keys=True, separators=(",", ":"))
|
|
101
|
+
record["hash"] = hashlib.sha256(
|
|
102
|
+
(prev_hash + "\n" + canonical).encode()
|
|
103
|
+
).hexdigest()[:16]
|
|
104
|
+
fh.seek(0, 2)
|
|
105
|
+
fh.write((json.dumps(record, separators=(",", ":")) + "\n").encode("utf-8"))
|
|
106
|
+
# FND-18: durability parity with the forge writer — fsync so a crash
|
|
107
|
+
# after write() but before flush doesn't lose the event the unified
|
|
108
|
+
# chain assumes is present.
|
|
109
|
+
fh.flush()
|
|
110
|
+
os.fsync(fh.fileno())
|
|
111
|
+
finally:
|
|
112
|
+
fcntl.flock(fh, fcntl.LOCK_UN)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def emit(event_type: str, **details: Any) -> None:
|
|
116
|
+
"""Emit an audit event into the unified hash chain."""
|
|
117
|
+
if not _try_forge_write(event_type, details):
|
|
118
|
+
_standalone_write(event_type, details)
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"""AWPKG builder — build, init and export packages."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import io
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import zipfile
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from .manifest import ManifestError, parse_raw
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
import yaml as _yaml # type: ignore[import]
|
|
15
|
+
_HAS_YAML = True
|
|
16
|
+
except ImportError:
|
|
17
|
+
_HAS_YAML = False
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class BuildError(ValueError):
|
|
21
|
+
"""Raised when a build source is misconfigured."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
_AWPKG_YAML_TEMPLATE = """\
|
|
25
|
+
# awpkg build config — edit and run 'corvin pkg build'
|
|
26
|
+
awpkg: "1.0"
|
|
27
|
+
id: "com.example.my-workflow"
|
|
28
|
+
name: "My Workflow"
|
|
29
|
+
version: "0.1.0"
|
|
30
|
+
description: "Describe your workflow here."
|
|
31
|
+
author: "Your Name <you@example.com>"
|
|
32
|
+
license: "Apache-2.0"
|
|
33
|
+
|
|
34
|
+
components:
|
|
35
|
+
workflows:
|
|
36
|
+
- src/workflow.awp.yaml
|
|
37
|
+
# forge_tools:
|
|
38
|
+
# - src/tools/code_my_tool.json
|
|
39
|
+
# skills:
|
|
40
|
+
# - src/skills/my_skill/SKILL.md
|
|
41
|
+
# personas:
|
|
42
|
+
# - src/personas/my_persona.yaml
|
|
43
|
+
|
|
44
|
+
permissions:
|
|
45
|
+
network: false
|
|
46
|
+
compute: false
|
|
47
|
+
secrets: []
|
|
48
|
+
|
|
49
|
+
dependencies: []
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
_WORKFLOW_TEMPLATE = """\
|
|
53
|
+
awp: "1.0.0"
|
|
54
|
+
|
|
55
|
+
workflow:
|
|
56
|
+
name: my_workflow
|
|
57
|
+
description: "A minimal example AWP workflow."
|
|
58
|
+
|
|
59
|
+
orchestration:
|
|
60
|
+
engine: dag
|
|
61
|
+
graph:
|
|
62
|
+
- id: step_one
|
|
63
|
+
type: agent
|
|
64
|
+
agent: assistant
|
|
65
|
+
instructions: "Do something useful."
|
|
66
|
+
depends_on: []
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def init(dest_dir: str | Path) -> Path:
|
|
71
|
+
"""Write awpkg.yaml skeleton and a sample workflow into dest_dir."""
|
|
72
|
+
dest = Path(dest_dir)
|
|
73
|
+
dest.mkdir(parents=True, exist_ok=True)
|
|
74
|
+
cfg = dest / "awpkg.yaml"
|
|
75
|
+
if cfg.exists():
|
|
76
|
+
raise BuildError(f"awpkg.yaml already exists at {cfg}")
|
|
77
|
+
cfg.write_text(_AWPKG_YAML_TEMPLATE, encoding="utf-8")
|
|
78
|
+
src = dest / "src"
|
|
79
|
+
src.mkdir(exist_ok=True)
|
|
80
|
+
wf = src / "workflow.awp.yaml"
|
|
81
|
+
if not wf.exists():
|
|
82
|
+
wf.write_text(_WORKFLOW_TEMPLATE, encoding="utf-8")
|
|
83
|
+
return cfg
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def build(
|
|
87
|
+
source_dir: str | Path,
|
|
88
|
+
output_dir: str | Path | None = None,
|
|
89
|
+
) -> Path:
|
|
90
|
+
"""Build an .awpkg from awpkg.yaml in source_dir.
|
|
91
|
+
|
|
92
|
+
Returns the path to the generated .awpkg file.
|
|
93
|
+
"""
|
|
94
|
+
source = Path(source_dir).resolve()
|
|
95
|
+
cfg_path = source / "awpkg.yaml"
|
|
96
|
+
if not cfg_path.exists():
|
|
97
|
+
raise BuildError(f"awpkg.yaml not found in {source}")
|
|
98
|
+
|
|
99
|
+
if _HAS_YAML:
|
|
100
|
+
raw: dict[str, Any] = _yaml.safe_load(cfg_path.read_text(encoding="utf-8"))
|
|
101
|
+
else:
|
|
102
|
+
raise BuildError(
|
|
103
|
+
"PyYAML is required to build packages (pip install pyyaml)"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
manifest = parse_raw(raw)
|
|
108
|
+
except ManifestError as exc:
|
|
109
|
+
raise BuildError(f"awpkg.yaml validation failed: {exc}") from exc
|
|
110
|
+
|
|
111
|
+
out_dir = Path(output_dir).resolve() if output_dir else source
|
|
112
|
+
out_dir.mkdir(parents=True, exist_ok=True)
|
|
113
|
+
filename = f"{manifest.id.replace('.', '-')}-{manifest.version}.awpkg"
|
|
114
|
+
out_path = out_dir / filename
|
|
115
|
+
|
|
116
|
+
manifest_bytes = _yaml.dump(raw, allow_unicode=True, default_flow_style=False).encode("utf-8")
|
|
117
|
+
|
|
118
|
+
with zipfile.ZipFile(out_path, "w", compression=zipfile.ZIP_DEFLATED) as zf:
|
|
119
|
+
zf.writestr("manifest.yaml", manifest_bytes)
|
|
120
|
+
|
|
121
|
+
readme = source / "README.md"
|
|
122
|
+
if readme.exists():
|
|
123
|
+
zf.write(readme, "README.md")
|
|
124
|
+
|
|
125
|
+
for path in manifest.all_component_paths:
|
|
126
|
+
src_file = source / path
|
|
127
|
+
if not src_file.exists():
|
|
128
|
+
raise BuildError(
|
|
129
|
+
f"declared component {path!r} not found at {src_file}"
|
|
130
|
+
)
|
|
131
|
+
zf.write(src_file, path)
|
|
132
|
+
|
|
133
|
+
return out_path
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def build_from_dict(
|
|
137
|
+
manifest_dict: dict[str, Any],
|
|
138
|
+
files: dict[str, bytes],
|
|
139
|
+
output_path: str | Path,
|
|
140
|
+
) -> Path:
|
|
141
|
+
"""Build an .awpkg from in-memory data. Used by tests and programmatic callers.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
manifest_dict: The manifest as a Python dict (validated internally).
|
|
145
|
+
files: Dict mapping archive path → file bytes (e.g. "tools/code_foo.json" → b"...").
|
|
146
|
+
output_path: Where to write the .awpkg file.
|
|
147
|
+
"""
|
|
148
|
+
from .manifest import parse_raw, ManifestError
|
|
149
|
+
try:
|
|
150
|
+
parse_raw(manifest_dict)
|
|
151
|
+
except ManifestError as exc:
|
|
152
|
+
raise BuildError(str(exc)) from exc
|
|
153
|
+
|
|
154
|
+
if _HAS_YAML:
|
|
155
|
+
manifest_bytes = _yaml.dump(
|
|
156
|
+
manifest_dict, allow_unicode=True, default_flow_style=False
|
|
157
|
+
).encode("utf-8")
|
|
158
|
+
else:
|
|
159
|
+
manifest_bytes = json.dumps(manifest_dict).encode("utf-8")
|
|
160
|
+
|
|
161
|
+
out = Path(output_path)
|
|
162
|
+
out.parent.mkdir(parents=True, exist_ok=True)
|
|
163
|
+
with zipfile.ZipFile(out, "w", compression=zipfile.ZIP_DEFLATED) as zf:
|
|
164
|
+
zf.writestr("manifest.yaml", manifest_bytes)
|
|
165
|
+
for arc_path, data in files.items():
|
|
166
|
+
zf.writestr(arc_path, data)
|
|
167
|
+
return out
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def export(
|
|
171
|
+
package_id: str,
|
|
172
|
+
output_dir: str | Path,
|
|
173
|
+
scope: str = "user",
|
|
174
|
+
corvin_home: Path | None = None,
|
|
175
|
+
) -> Path:
|
|
176
|
+
"""Re-pack an installed package back into an .awpkg file."""
|
|
177
|
+
from .installer import _packages_root, _resolve_corvin_home
|
|
178
|
+
import json
|
|
179
|
+
|
|
180
|
+
home = corvin_home or _resolve_corvin_home()
|
|
181
|
+
install_dir = _packages_root(scope, home) / package_id
|
|
182
|
+
meta_file = install_dir / "_awpkg_meta.json"
|
|
183
|
+
if not meta_file.exists():
|
|
184
|
+
raise BuildError(f"package {package_id!r} not installed in scope {scope!r}")
|
|
185
|
+
|
|
186
|
+
meta = json.loads(meta_file.read_text(encoding="utf-8"))
|
|
187
|
+
out_dir = Path(output_dir)
|
|
188
|
+
out_dir.mkdir(parents=True, exist_ok=True)
|
|
189
|
+
filename = f"{package_id.replace('.', '-')}-{meta['version']}.awpkg"
|
|
190
|
+
out_path = out_dir / filename
|
|
191
|
+
|
|
192
|
+
with zipfile.ZipFile(out_path, "w", compression=zipfile.ZIP_DEFLATED) as zf:
|
|
193
|
+
manifest_file = install_dir / "manifest.yaml"
|
|
194
|
+
if manifest_file.exists():
|
|
195
|
+
zf.write(manifest_file, "manifest.yaml")
|
|
196
|
+
|
|
197
|
+
for paths in meta.get("components", {}).values():
|
|
198
|
+
for p in paths:
|
|
199
|
+
src = install_dir / p
|
|
200
|
+
if src.exists():
|
|
201
|
+
zf.write(src, p)
|
|
202
|
+
|
|
203
|
+
readme = install_dir / "README.md"
|
|
204
|
+
if readme.exists():
|
|
205
|
+
zf.write(readme, "README.md")
|
|
206
|
+
|
|
207
|
+
return out_path
|