core-runtime 0.1.1__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.
- api/__init__.py +4 -0
- api/cli/__init__.py +10 -0
- api/cli/audit_client.py +92 -0
- api/cli/census_client.py +77 -0
- api/cli/client.py +508 -0
- api/cli/coverage_client.py +121 -0
- api/cli/daemon_client.py +42 -0
- api/cli/fix_client.py +101 -0
- api/cli/inspect_client.py +143 -0
- api/cli/integration_client.py +42 -0
- api/cli/integrity_client.py +45 -0
- api/cli/proposals_client.py +101 -0
- api/cli/quality_client.py +83 -0
- api/cli/refactor_client.py +82 -0
- api/cli/sync_client.py +106 -0
- api/dependencies.py +37 -0
- api/errors.py +74 -0
- api/main.py +88 -0
- api/v1/__init__.py +4 -0
- api/v1/audit_routes.py +302 -0
- api/v1/census_routes.py +207 -0
- api/v1/coverage_routes.py +352 -0
- api/v1/daemon_routes.py +86 -0
- api/v1/development_routes.py +70 -0
- api/v1/fix_routes.py +428 -0
- api/v1/inspect_routes.py +220 -0
- api/v1/integration_routes.py +56 -0
- api/v1/integrity_routes.py +72 -0
- api/v1/knowledge_routes.py +36 -0
- api/v1/lint_routes.py +40 -0
- api/v1/proposals_routes.py +267 -0
- api/v1/quality_routes.py +272 -0
- api/v1/refactor_routes.py +225 -0
- api/v1/sync_routes.py +261 -0
- body/__init__.py +4 -0
- body/analyzers/__init__.py +25 -0
- body/analyzers/base_analyzer.py +28 -0
- body/analyzers/constitutional_path_analyzer.py +63 -0
- body/analyzers/file_analyzer.py +211 -0
- body/analyzers/knowledge_graph_analyzer.py +86 -0
- body/analyzers/prompt_analyzer.py +155 -0
- body/analyzers/symbol_extractor.py +280 -0
- body/atomic/__init__.py +74 -0
- body/atomic/build_tests_action.py +354 -0
- body/atomic/check_actions.py +142 -0
- body/atomic/crate_ops.py +59 -0
- body/atomic/executor.py +470 -0
- body/atomic/file_ops.py +153 -0
- body/atomic/fix_actions.py +1142 -0
- body/atomic/import_resolver.py +200 -0
- body/atomic/metadata_ops.py +161 -0
- body/atomic/modularity_fix.py +839 -0
- body/atomic/modularity_splitter.py +521 -0
- body/atomic/proposal_lifecycle_actions.py +171 -0
- body/atomic/registry.py +326 -0
- body/atomic/remediate_cognitive_role.py +104 -0
- body/atomic/sandbox_lifecycle.py +252 -0
- body/atomic/split_plan.py +155 -0
- body/atomic/sync_actions/__init__.py +22 -0
- body/atomic/sync_actions/chunking_helpers.py +218 -0
- body/atomic/sync_actions/sync_actions.py +431 -0
- body/atomic/test_actions.py +47 -0
- body/autonomy/__init__.py +16 -0
- body/autonomy/audit_analyzer.py +343 -0
- body/autonomy/micro_proposal_executor.py +316 -0
- body/crate_processing/canary_executor.py +144 -0
- body/evaluators/__init__.py +27 -0
- body/evaluators/atomic_actions_evaluator.py +162 -0
- body/evaluators/atomic_actions_format.py +45 -0
- body/evaluators/atomic_actions_rules.py +278 -0
- body/evaluators/base_evaluator.py +67 -0
- body/evaluators/clarity_evaluator.py +83 -0
- body/evaluators/constitutional_evaluator.py +227 -0
- body/evaluators/failure_evaluator.py +136 -0
- body/evaluators/performance_evaluator.py +341 -0
- body/evaluators/security_evaluator.py +393 -0
- body/flows/__init__.py +33 -0
- body/flows/executor.py +275 -0
- body/flows/registry.py +272 -0
- body/flows/result.py +113 -0
- body/governance/__init__.py +29 -0
- body/governance/body_contracts_service.py +317 -0
- body/governance/code_validator.py +118 -0
- body/governance/engine_dispatcher.py +128 -0
- body/governance/intent_guard.py +592 -0
- body/governance/intent_pattern_validators.py +197 -0
- body/governance/key_management_service.py +100 -0
- body/governance/path_validator.py +187 -0
- body/governance/remediation_service.py +263 -0
- body/governance/runtime_validator.py +184 -0
- body/infrastructure/bootstrap.py +135 -0
- body/infrastructure/lifespan.py +85 -0
- body/infrastructure/repositories/__init__.py +1 -0
- body/infrastructure/repositories/decision_trace_repository.py +210 -0
- body/infrastructure/repositories/refusal_repository.py +294 -0
- body/introspection/__init__.py +4 -0
- body/introspection/capability_discovery_service.py +107 -0
- body/introspection/discovery/from_kgb.py +33 -0
- body/introspection/discovery/from_source_scan.py +40 -0
- body/introspection/discovery/loader.py +62 -0
- body/introspection/discovery/registry.py +22 -0
- body/introspection/discovery/semantics.py +21 -0
- body/introspection/discovery/sync.py +47 -0
- body/introspection/drift_detector.py +81 -0
- body/introspection/drift_service.py +48 -0
- body/introspection/export_vectors.py +133 -0
- body/introspection/generate_capability_docs.py +130 -0
- body/introspection/generate_correction_map.py +98 -0
- body/introspection/graph_analysis_service.py +66 -0
- body/introspection/knowledge_graph_service.py +170 -0
- body/introspection/semantic_clusterer.py +128 -0
- body/introspection/symbol_index_builder.py +244 -0
- body/introspection/sync/engine.py +92 -0
- body/introspection/sync/scanner.py +56 -0
- body/introspection/sync/visitor.py +83 -0
- body/introspection/sync_service.py +62 -0
- body/invokers/__init__.py +4 -0
- body/invokers/capability_invoker.py +4 -0
- body/maintenance/command_sync_service.py +73 -0
- body/maintenance/dotenv_sync_service.py +99 -0
- body/maintenance/idempotency_harness.py +70 -0
- body/maintenance/maintenance_service.py +123 -0
- body/maintenance/memory_cleanup_service.py +131 -0
- body/maintenance/refactor_settings_access.py +274 -0
- body/maintenance/scripts/__init__.py +5 -0
- body/maintenance/scripts/context_export.py +278 -0
- body/maintenance/scripts/vector_verify.py +73 -0
- body/maintenance/sync_vectors.py +338 -0
- body/models/__init__.py +4 -0
- body/project_lifecycle/__init__.py +4 -0
- body/project_lifecycle/bootstrap_service.py +157 -0
- body/project_lifecycle/definition_service.py +264 -0
- body/project_lifecycle/integration_service.py +113 -0
- body/project_lifecycle/scaffolding_service.py +187 -0
- body/quality/coverage_analyzer.py +177 -0
- body/repositories/__init__.py +4 -0
- body/self_healing/atomic_actions_fixer.py +113 -0
- body/self_healing/body_ui_fixer.py +193 -0
- body/self_healing/capability_parser.py +65 -0
- body/self_healing/code_style_service.py +51 -0
- body/self_healing/complexity_filter.py +70 -0
- body/self_healing/docstring_service.py +345 -0
- body/self_healing/duplicate_id_service.py +407 -0
- body/self_healing/duplicates_service.py +165 -0
- body/self_healing/handlers/__init__.py +1 -0
- body/self_healing/handlers/id_assignment_handler.py +201 -0
- body/self_healing/handlers/import_sorting_handler.py +181 -0
- body/self_healing/header_service.py +308 -0
- body/self_healing/id_tagging_service.py +227 -0
- body/self_healing/knowledge_consolidation_service.py +80 -0
- body/self_healing/logging_service.py +292 -0
- body/self_healing/owner_tagging_service.py +5 -0
- body/self_healing/placeholder_fixer_service.py +27 -0
- body/self_healing/prune_private_capabilities.py +144 -0
- body/self_healing/purge_legacy_tags_service.py +146 -0
- body/self_healing/remediation_models.py +238 -0
- body/self_healing/test_context/__init__.py +10 -0
- body/self_healing/test_context/detectors.py +74 -0
- body/self_healing/test_context/examples.py +53 -0
- body/self_healing/test_context/formatter.py +65 -0
- body/self_healing/test_context/metrics.py +62 -0
- body/self_healing/test_context/models.py +83 -0
- body/self_healing/test_context/parsers.py +70 -0
- body/self_healing/test_context_analyzer.py +79 -0
- body/self_healing/test_failure_analyzer.py +259 -0
- body/self_healing/test_target_analyzer.py +118 -0
- body/self_healing/vulture_healer.py +161 -0
- body/services/__init__.py +4 -0
- body/services/artifact_service.py +155 -0
- body/services/blackboard_service/__init__.py +22 -0
- body/services/blackboard_service/blackboard_claim_service.py +216 -0
- body/services/blackboard_service/blackboard_proposal_service.py +305 -0
- body/services/blackboard_service/blackboard_query_service.py +333 -0
- body/services/blackboard_service/blackboard_service.py +602 -0
- body/services/capabilities.py +51 -0
- body/services/cim/__init__.py +22 -0
- body/services/cim/baselines.py +102 -0
- body/services/cim/census_service.py +190 -0
- body/services/cim/cim_constants.py +116 -0
- body/services/cim/cim_path_utils.py +123 -0
- body/services/cim/diff.py +152 -0
- body/services/cim/history.py +94 -0
- body/services/cim/models.py +319 -0
- body/services/cim/policy.py +149 -0
- body/services/cim/scanners.py +332 -0
- body/services/coherence_service.py +552 -0
- body/services/consequence_log_service.py +189 -0
- body/services/constitutional_rule_loader.py +141 -0
- body/services/constitutional_validator.py +366 -0
- body/services/crate_creation_service.py +217 -0
- body/services/crate_processing_service.py +279 -0
- body/services/crawl_service/__init__.py +10 -0
- body/services/crawl_service/main_module.py +531 -0
- body/services/crawl_service/orchestrator.py +452 -0
- body/services/crawl_service/symbol_processing.py +279 -0
- body/services/database_service.py +242 -0
- body/services/doc_service.py +57 -0
- body/services/file_service.py +260 -0
- body/services/governance_claims_service.py +240 -0
- body/services/governance_init.py +41 -0
- body/services/health_log_service.py +167 -0
- body/services/intent_schema_validator.py +211 -0
- body/services/llm_client.py +87 -0
- body/services/mind_state_service.py +129 -0
- body/services/policy_expression_evaluator.py +154 -0
- body/services/proposal_supervision_service.py +187 -0
- body/services/representation_coherence_service.py +209 -0
- body/services/service_registry.py +431 -0
- body/services/session_attached_service.py +51 -0
- body/services/symbol_query_service.py +218 -0
- body/services/symbol_service.py +94 -0
- body/services/validation/__init__.py +14 -0
- body/services/validation/python_validator.py +89 -0
- body/services/validation/validation_policies.py +121 -0
- body/services/worker_registry_service.py +184 -0
- body/validators/__init__.py +1 -0
- body/validators/logic_conservation_validator.py +201 -0
- body/workers/call_site_rewriter.py +527 -0
- body/workers/prompt_artifact_writer.py +323 -0
- cli/__init__.py +4 -0
- cli/admin_cli.py +98 -0
- cli/cli_user.py +121 -0
- cli/commands/__init__.py +4 -0
- cli/commands/audit_reporter.py +272 -0
- cli/commands/check/__init__.py +115 -0
- cli/commands/check/audit.py +130 -0
- cli/commands/check/converters.py +129 -0
- cli/commands/check/diagnostics_commands.py +70 -0
- cli/commands/check/formatters.py +310 -0
- cli/commands/check/imports.py +73 -0
- cli/commands/check/quality.py +71 -0
- cli/commands/check/quality_gates.py +107 -0
- cli/commands/check/rule.py +136 -0
- cli/commands/check/utils.py +28 -0
- cli/commands/check_atomic_actions.py +167 -0
- cli/commands/components.py +66 -0
- cli/commands/coverage/__init__.py +22 -0
- cli/commands/coverage/analysis_commands.py +87 -0
- cli/commands/coverage/check_commands.py +173 -0
- cli/commands/coverage/generation_commands.py +155 -0
- cli/commands/coverage/services/__init__.py +15 -0
- cli/commands/coverage/services/coverage_checker.py +50 -0
- cli/commands/coverage/services/coverage_reporter.py +81 -0
- cli/commands/coverage/services/gaps_analyzer.py +114 -0
- cli/commands/daemon.py +908 -0
- cli/commands/develop.py +127 -0
- cli/commands/diagnostics.py +32 -0
- cli/commands/fix/__init__.py +84 -0
- cli/commands/fix/all_commands.py +94 -0
- cli/commands/fix/atomic_actions.py +48 -0
- cli/commands/fix/audit.py +146 -0
- cli/commands/fix/body_ui.py +93 -0
- cli/commands/fix/code_style.py +52 -0
- cli/commands/fix/db_tools.py +90 -0
- cli/commands/fix/fix_ir.py +79 -0
- cli/commands/fix/handler_discovery.py +54 -0
- cli/commands/fix/imports.py +55 -0
- cli/commands/fix/list_commands.py +54 -0
- cli/commands/fix/metadata.py +160 -0
- cli/commands/fix/modularity.py +88 -0
- cli/commands/fix/settings_access.py +65 -0
- cli/commands/fix_governed.py +103 -0
- cli/commands/fix_logging.py +24 -0
- cli/commands/governance.py +294 -0
- cli/commands/guard.py +125 -0
- cli/commands/inspect/__init__.py +79 -0
- cli/commands/inspect/_helpers.py +226 -0
- cli/commands/inspect/analysis.py +158 -0
- cli/commands/inspect/decisions.py +140 -0
- cli/commands/inspect/diagnostics.py +126 -0
- cli/commands/inspect/drift.py +100 -0
- cli/commands/inspect/patterns.py +102 -0
- cli/commands/inspect/refusals.py +211 -0
- cli/commands/inspect/repo_census.py +175 -0
- cli/commands/inspect/status.py +48 -0
- cli/commands/interactive_test.py +85 -0
- cli/commands/mind.py +49 -0
- cli/commands/refactor.py +234 -0
- cli/commands/refactor_support/__init__.py +7 -0
- cli/commands/refactor_support/analyzer.py +107 -0
- cli/commands/refactor_support/config.py +67 -0
- cli/commands/refactor_support/display.py +170 -0
- cli/commands/refactor_support/recommendations.py +55 -0
- cli/commands/run.py +60 -0
- cli/commands/search.py +103 -0
- cli/commands/status.py +86 -0
- cli/commands/submit.py +23 -0
- cli/interactive.py +177 -0
- cli/logic/__init__.py +7 -0
- cli/logic/agent.py +110 -0
- cli/logic/audit_capability_domains.py +106 -0
- cli/logic/audit_renderer.py +150 -0
- cli/logic/autonomy/actions.py +36 -0
- cli/logic/autonomy/views.py +116 -0
- cli/logic/body_contracts_checker.py +23 -0
- cli/logic/build.py +27 -0
- cli/logic/byor.py +148 -0
- cli/logic/capability.py +27 -0
- cli/logic/cli_utils.py +210 -0
- cli/logic/context.py +7 -0
- cli/logic/db.py +154 -0
- cli/logic/db_manage.py +22 -0
- cli/logic/decision_inspect_logic.py +62 -0
- cli/logic/diagnostics.py +148 -0
- cli/logic/diagnostics_policy.py +100 -0
- cli/logic/diagnostics_registry.py +165 -0
- cli/logic/duplicates.py +19 -0
- cli/logic/embeddings_cli.py +43 -0
- cli/logic/governance/__init__.py +16 -0
- cli/logic/governance/engine.py +216 -0
- cli/logic/governance/forensics_service.py +67 -0
- cli/logic/governance/limb_status_service.py +83 -0
- cli/logic/governance/renderer.py +115 -0
- cli/logic/governance/traceability_service.py +78 -0
- cli/logic/governance_logic.py +33 -0
- cli/logic/hub/__init__.py +14 -0
- cli/logic/hub/app.py +107 -0
- cli/logic/hub/formatter.py +29 -0
- cli/logic/hub/introspection.py +20 -0
- cli/logic/hub/repository.py +17 -0
- cli/logic/init.py +22 -0
- cli/logic/interactive_test/__init__.py +21 -0
- cli/logic/interactive_test/session.py +102 -0
- cli/logic/interactive_test/steps/__init__.py +23 -0
- cli/logic/interactive_test/steps/execution.py +53 -0
- cli/logic/interactive_test/steps/generation.py +88 -0
- cli/logic/interactive_test/steps/healing.py +79 -0
- cli/logic/interactive_test/steps/utils.py +31 -0
- cli/logic/interactive_test/steps/verification.py +71 -0
- cli/logic/interactive_test/ui.py +203 -0
- cli/logic/interactive_test/workflow.py +168 -0
- cli/logic/interactive_test_logic.py +41 -0
- cli/logic/knowledge.py +47 -0
- cli/logic/legacy_scan_logic.py +306 -0
- cli/logic/list_audits.py +49 -0
- cli/logic/log_audit.py +53 -0
- cli/logic/new.py +8 -0
- cli/logic/project_docs.py +28 -0
- cli/logic/reconcile.py +127 -0
- cli/logic/refusal_inspect_logic.py +208 -0
- cli/logic/report.py +47 -0
- cli/logic/status.py +47 -0
- cli/logic/symbol_drift.py +77 -0
- cli/logic/sync.py +48 -0
- cli/logic/sync_domains.py +72 -0
- cli/logic/sync_manifest.py +31 -0
- cli/logic/tools.py +133 -0
- cli/logic/utils_migration.py +43 -0
- cli/logic/validate.py +107 -0
- cli/logic/vector_drift.py +109 -0
- cli/logic/yaml_processor.py +5 -0
- cli/renderers/audit_detail.py +37 -0
- cli/renderers/audit_overview.py +39 -0
- cli/resources/__init__.py +27 -0
- cli/resources/admin/__init__.py +23 -0
- cli/resources/admin/coverage.py +63 -0
- cli/resources/admin/debt_scan.py +195 -0
- cli/resources/admin/forensics.py +97 -0
- cli/resources/admin/health.py +66 -0
- cli/resources/admin/hub.py +9 -0
- cli/resources/admin/meta.py +47 -0
- cli/resources/admin/patterns.py +28 -0
- cli/resources/admin/refusals.py +31 -0
- cli/resources/admin/self_check.py +175 -0
- cli/resources/admin/status.py +66 -0
- cli/resources/admin/summary.py +67 -0
- cli/resources/admin/traces.py +46 -0
- cli/resources/admin/validate_env.py +56 -0
- cli/resources/code/__init__.py +31 -0
- cli/resources/code/actions.py +48 -0
- cli/resources/code/audit.py +416 -0
- cli/resources/code/audit_duplicates.py +22 -0
- cli/resources/code/check_imports.py +75 -0
- cli/resources/code/check_ui.py +62 -0
- cli/resources/code/clarity.py +51 -0
- cli/resources/code/complexity.py +55 -0
- cli/resources/code/docstrings.py +51 -0
- cli/resources/code/fix_atomic.py +51 -0
- cli/resources/code/format.py +62 -0
- cli/resources/code/hub.py +10 -0
- cli/resources/code/integrity.py +75 -0
- cli/resources/code/lint.py +37 -0
- cli/resources/code/logging.py +49 -0
- cli/resources/code/refactor.py +32 -0
- cli/resources/code/test.py +30 -0
- cli/resources/coherence/__init__.py +13 -0
- cli/resources/coherence/check.py +111 -0
- cli/resources/coherence/hub.py +13 -0
- cli/resources/coherence/repair_counts.py +73 -0
- cli/resources/coherence/report.py +144 -0
- cli/resources/coherence/seed.py +297 -0
- cli/resources/coherence/supersede.py +124 -0
- cli/resources/coherence/triage.py +81 -0
- cli/resources/constitution/__init__.py +19 -0
- cli/resources/constitution/audit.py +49 -0
- cli/resources/constitution/query.py +45 -0
- cli/resources/constitution/status.py +34 -0
- cli/resources/constitution/validate.py +36 -0
- cli/resources/context/__init__.py +21 -0
- cli/resources/context/build.py +374 -0
- cli/resources/context/cache.py +156 -0
- cli/resources/context/explain.py +140 -0
- cli/resources/context/hub.py +11 -0
- cli/resources/context/search.py +114 -0
- cli/resources/database/__init__.py +13 -0
- cli/resources/database/cleanup.py +107 -0
- cli/resources/database/export.py +61 -0
- cli/resources/database/hub.py +11 -0
- cli/resources/database/migrate.py +57 -0
- cli/resources/database/status.py +101 -0
- cli/resources/database/sync.py +84 -0
- cli/resources/database/sync_env.py +76 -0
- cli/resources/database/sync_registry.py +48 -0
- cli/resources/dev/__init__.py +14 -0
- cli/resources/dev/hub.py +11 -0
- cli/resources/dev/refactor.py +92 -0
- cli/resources/dev/stability.py +60 -0
- cli/resources/dev/strategic_audit.py +113 -0
- cli/resources/dev/sync.py +51 -0
- cli/resources/dev/test.py +34 -0
- cli/resources/intent/__init__.py +11 -0
- cli/resources/intent/hub.py +9 -0
- cli/resources/intent/sync_vocabulary.py +396 -0
- cli/resources/project/__init__.py +19 -0
- cli/resources/project/docs.py +41 -0
- cli/resources/project/new.py +40 -0
- cli/resources/project/onboard.py +31 -0
- cli/resources/proposals/__init__.py +28 -0
- cli/resources/proposals/create.py +82 -0
- cli/resources/proposals/integrate.py +49 -0
- cli/resources/proposals/list.py +76 -0
- cli/resources/proposals/manage.py +117 -0
- cli/resources/runtime/__init__.py +9 -0
- cli/resources/runtime/health.py +925 -0
- cli/resources/secrets/__init__.py +10 -0
- cli/resources/secrets/hub.py +9 -0
- cli/resources/secrets/manage.py +309 -0
- cli/resources/symbols/__init__.py +13 -0
- cli/resources/symbols/audit.py +46 -0
- cli/resources/symbols/fix_ids.py +43 -0
- cli/resources/symbols/hub.py +11 -0
- cli/resources/symbols/resolve_duplicates.py +30 -0
- cli/resources/symbols/sync.py +39 -0
- cli/resources/symbols/tag.py +47 -0
- cli/resources/vectors/__init__.py +11 -0
- cli/resources/vectors/cleanup.py +95 -0
- cli/resources/vectors/hub.py +9 -0
- cli/resources/vectors/query.py +105 -0
- cli/resources/vectors/status.py +30 -0
- cli/resources/vectors/sync.py +57 -0
- cli/resources/vectors/sync_code.py +67 -0
- cli/resources/workers/__init__.py +13 -0
- cli/resources/workers/blackboard.py +253 -0
- cli/resources/workers/remediate.py +337 -0
- cli/resources/workers/run.py +140 -0
- cli/utils/__init__.py +32 -0
- cli/utils/annotation_formatter.py +154 -0
- cli/utils/decorators.py +184 -0
- cli/utils/display.py +79 -0
- cli/utils/exit_codes.py +59 -0
- cli/utils/helpers.py +34 -0
- cli/utils/prompts.py +21 -0
- core_runtime-0.1.1.dist-info/LICENSE +21 -0
- core_runtime-0.1.1.dist-info/METADATA +346 -0
- core_runtime-0.1.1.dist-info/RECORD +962 -0
- core_runtime-0.1.1.dist-info/WHEEL +4 -0
- core_runtime-0.1.1.dist-info/entry_points.txt +4 -0
- mind/__init__.py +4 -0
- mind/coherence/__init__.py +1 -0
- mind/coherence/checker.py +314 -0
- mind/coherence/checks/__init__.py +4 -0
- mind/coherence/checks/base.py +34 -0
- mind/coherence/checks/r1_scoped.py +228 -0
- mind/coherence/checks/row2_grounding.py +69 -0
- mind/coherence/checks/row3_citation.py +119 -0
- mind/coherence/checks/row4_naming.py +126 -0
- mind/coherence/checks/sameconcern.py +136 -0
- mind/coherence/checks/specgap.py +233 -0
- mind/coherence/checks/vocabulary.py +112 -0
- mind/coherence/llm_judge.py +207 -0
- mind/enforcement/audit.py +78 -0
- mind/governance/__init__.py +22 -0
- mind/governance/assumption_extractor.py +326 -0
- mind/governance/audit_context.py +520 -0
- mind/governance/audit_postprocessor.py +36 -0
- mind/governance/audit_report_writer.py +46 -0
- mind/governance/audit_types.py +98 -0
- mind/governance/auditor.py +179 -0
- mind/governance/authority_package_builder.py +502 -0
- mind/governance/constitutional_auditor_dynamic.py +362 -0
- mind/governance/enforcement/__init__.py +24 -0
- mind/governance/enforcement_loader.py +245 -0
- mind/governance/enforcement_methods.py +28 -0
- mind/governance/entry_point_policy.py +62 -0
- mind/governance/executable_rule.py +127 -0
- mind/governance/filtered_audit.py +272 -0
- mind/governance/finding_processor.py +76 -0
- mind/governance/meta_validator.py +259 -0
- mind/governance/micro_proposal_validator.py +169 -0
- mind/governance/policy_coverage_service.py +183 -0
- mind/governance/policy_rule.py +94 -0
- mind/governance/rule_conflict_detector.py +127 -0
- mind/governance/rule_executor.py +306 -0
- mind/governance/rule_extractor.py +376 -0
- mind/governance/stateless_audit.py +206 -0
- mind/governance/violation_report.py +136 -0
- mind/logic/engines/_knowledge_gate_duplication.py +117 -0
- mind/logic/engines/action_gate.py +76 -0
- mind/logic/engines/artifact_gate.py +1168 -0
- mind/logic/engines/ast_gate/__init__.py +9 -0
- mind/logic/engines/ast_gate/base.py +263 -0
- mind/logic/engines/ast_gate/checks/__init__.py +35 -0
- mind/logic/engines/ast_gate/checks/async_checks.py +276 -0
- mind/logic/engines/ast_gate/checks/capability_checks.py +197 -0
- mind/logic/engines/ast_gate/checks/conservation_checks.py +126 -0
- mind/logic/engines/ast_gate/checks/generic_checks.py +244 -0
- mind/logic/engines/ast_gate/checks/import_checks.py +164 -0
- mind/logic/engines/ast_gate/checks/knowledge_source_check.py +88 -0
- mind/logic/engines/ast_gate/checks/logging_checks.py +133 -0
- mind/logic/engines/ast_gate/checks/metadata_checks.py +242 -0
- mind/logic/engines/ast_gate/checks/modularity_checks.py +436 -0
- mind/logic/engines/ast_gate/checks/naming_checks.py +120 -0
- mind/logic/engines/ast_gate/checks/prompt_model_checks.py +83 -0
- mind/logic/engines/ast_gate/checks/protected_namespace_access_check.py +298 -0
- mind/logic/engines/ast_gate/checks/purity_checks.py +421 -0
- mind/logic/engines/ast_gate/checks/purity_enforcement_check.py +56 -0
- mind/logic/engines/ast_gate/checks/runtime_import_boundary.py +198 -0
- mind/logic/engines/ast_gate/checks/schema_conformance_checks.py +130 -0
- mind/logic/engines/ast_gate/engine.py +317 -0
- mind/logic/engines/ast_gate.py +19 -0
- mind/logic/engines/base.py +106 -0
- mind/logic/engines/cli_gate/__init__.py +25 -0
- mind/logic/engines/cli_gate/base_check.py +45 -0
- mind/logic/engines/cli_gate/checks/__init__.py +31 -0
- mind/logic/engines/cli_gate/checks/async_execution.py +65 -0
- mind/logic/engines/cli_gate/checks/dangerous_explicit.py +60 -0
- mind/logic/engines/cli_gate/checks/discovery_strict.py +167 -0
- mind/logic/engines/cli_gate/checks/help_required.py +43 -0
- mind/logic/engines/cli_gate/checks/no_duplicates.py +57 -0
- mind/logic/engines/cli_gate/checks/no_layer_exposure.py +48 -0
- mind/logic/engines/cli_gate/checks/resource_first.py +58 -0
- mind/logic/engines/cli_gate/checks/standard_verbs.py +50 -0
- mind/logic/engines/cli_gate/engine.py +211 -0
- mind/logic/engines/glob_gate.py +214 -0
- mind/logic/engines/knowledge_gate.py +410 -0
- mind/logic/engines/llm_gate.py +407 -0
- mind/logic/engines/llm_gate_stub.py +67 -0
- mind/logic/engines/passive_gate.py +45 -0
- mind/logic/engines/regex_gate.py +97 -0
- mind/logic/engines/registry.py +134 -0
- mind/logic/engines/runtime_gate.py +265 -0
- mind/logic/engines/taxonomy_gate.py +229 -0
- mind/logic/engines/workflow_gate/__init__.py +22 -0
- mind/logic/engines/workflow_gate/base_check.py +42 -0
- mind/logic/engines/workflow_gate/checks/__init__.py +32 -0
- mind/logic/engines/workflow_gate/checks/alignment.py +93 -0
- mind/logic/engines/workflow_gate/checks/audit.py +80 -0
- mind/logic/engines/workflow_gate/checks/canary.py +47 -0
- mind/logic/engines/workflow_gate/checks/coverage.py +74 -0
- mind/logic/engines/workflow_gate/checks/dead_code.py +53 -0
- mind/logic/engines/workflow_gate/checks/import_resolution.py +97 -0
- mind/logic/engines/workflow_gate/checks/linter.py +104 -0
- mind/logic/engines/workflow_gate/checks/quality.py +49 -0
- mind/logic/engines/workflow_gate/checks/ruff_format.py +99 -0
- mind/logic/engines/workflow_gate/checks/tests.py +81 -0
- mind/logic/engines/workflow_gate/engine.py +207 -0
- shared/__init__.py +32 -0
- shared/action_logger.py +61 -0
- shared/action_types.py +199 -0
- shared/activity_logging.py +149 -0
- shared/ai/constitutional_envelope.py +341 -0
- shared/ai/prompt_model.py +585 -0
- shared/ai/response_parser.py +191 -0
- shared/ast_utility.py +279 -0
- shared/atomic_action.py +117 -0
- shared/cli/__init__.py +6 -0
- shared/cli/app_introspection.py +134 -0
- shared/cli/command_meta.py +224 -0
- shared/cli_types.py +92 -0
- shared/component_primitive.py +216 -0
- shared/config.py +216 -0
- shared/config_loader.py +54 -0
- shared/context.py +113 -0
- shared/exceptions.py +100 -0
- shared/governance/__init__.py +9 -0
- shared/governance/coherence_harvester.py +258 -0
- shared/governance_token.py +77 -0
- shared/infrastructure/__init__.py +5 -0
- shared/infrastructure/adapters/__init__.py +5 -0
- shared/infrastructure/adapters/embedding_provider.py +66 -0
- shared/infrastructure/bootstrap_registry.py +57 -0
- shared/infrastructure/clients/__init__.py +5 -0
- shared/infrastructure/clients/qdrant_client.py +455 -0
- shared/infrastructure/config_service.py +382 -0
- shared/infrastructure/config_validator.py +70 -0
- shared/infrastructure/context/__init__.py +45 -0
- shared/infrastructure/context/builder.py +804 -0
- shared/infrastructure/context/cache.py +101 -0
- shared/infrastructure/context/database.py +205 -0
- shared/infrastructure/context/limb_workspace.py +134 -0
- shared/infrastructure/context/models.py +65 -0
- shared/infrastructure/context/providers/__init__.py +18 -0
- shared/infrastructure/context/providers/ast.py +211 -0
- shared/infrastructure/context/providers/db.py +165 -0
- shared/infrastructure/context/providers/vectors.py +195 -0
- shared/infrastructure/context/redactor.py +109 -0
- shared/infrastructure/context/serializers.py +144 -0
- shared/infrastructure/context/service.py +271 -0
- shared/infrastructure/context/validator.py +247 -0
- shared/infrastructure/database/models/__init__.py +80 -0
- shared/infrastructure/database/models/autonomous_proposals.py +83 -0
- shared/infrastructure/database/models/decision_traces.py +129 -0
- shared/infrastructure/database/models/governance.py +183 -0
- shared/infrastructure/database/models/knowledge.py +205 -0
- shared/infrastructure/database/models/learning.py +99 -0
- shared/infrastructure/database/models/llm_config.py +274 -0
- shared/infrastructure/database/models/operations.py +152 -0
- shared/infrastructure/database/models/refusals.py +147 -0
- shared/infrastructure/database/models/system.py +124 -0
- shared/infrastructure/database/models/vectors.py +113 -0
- shared/infrastructure/database/models/workers.py +96 -0
- shared/infrastructure/database/session_manager.py +166 -0
- shared/infrastructure/diagnostic_service.py +103 -0
- shared/infrastructure/events/__init__.py +5 -0
- shared/infrastructure/events/base.py +44 -0
- shared/infrastructure/events/bus.py +76 -0
- shared/infrastructure/git_service.py +385 -0
- shared/infrastructure/intent/action_risk.py +135 -0
- shared/infrastructure/intent/audit_verdict.py +131 -0
- shared/infrastructure/intent/autonomy_dirty_tree.py +104 -0
- shared/infrastructure/intent/canonical_enums.py +116 -0
- shared/infrastructure/intent/cognitive_roles.py +96 -0
- shared/infrastructure/intent/errors.py +13 -0
- shared/infrastructure/intent/filesystem_operations.py +359 -0
- shared/infrastructure/intent/intent_connector.py +157 -0
- shared/infrastructure/intent/intent_repository.py +707 -0
- shared/infrastructure/intent/intent_validator.py +248 -0
- shared/infrastructure/intent/operational_capabilities.py +470 -0
- shared/infrastructure/intent/operational_config.py +1343 -0
- shared/infrastructure/intent/operational_mode.py +66 -0
- shared/infrastructure/intent/task_type_phases.py +180 -0
- shared/infrastructure/intent/test_coverage_paths.py +181 -0
- shared/infrastructure/intent/vocabulary_projection.py +241 -0
- shared/infrastructure/knowledge/knowledge_service.py +155 -0
- shared/infrastructure/knowledge_graph_service.py +214 -0
- shared/infrastructure/llm/client.py +448 -0
- shared/infrastructure/llm/client_registry.py +153 -0
- shared/infrastructure/llm/fallback_client.py +144 -0
- shared/infrastructure/llm/providers/anthropic.py +113 -0
- shared/infrastructure/llm/providers/base.py +130 -0
- shared/infrastructure/llm/providers/ollama.py +265 -0
- shared/infrastructure/llm/providers/openai.py +168 -0
- shared/infrastructure/repositories/__init__.py +5 -0
- shared/infrastructure/repositories/db/__init__.py +5 -0
- shared/infrastructure/repositories/db/common.py +138 -0
- shared/infrastructure/repositories/db/engine.py +26 -0
- shared/infrastructure/repositories/db/migration_service.py +75 -0
- shared/infrastructure/repositories/db/status_service.py +61 -0
- shared/infrastructure/repositories/memory_repository.py +134 -0
- shared/infrastructure/repositories/symbol_definition_repository.py +170 -0
- shared/infrastructure/repositories/task_repository.py +59 -0
- shared/infrastructure/repositories/vector_link_repository.py +83 -0
- shared/infrastructure/rooted_repository.py +50 -0
- shared/infrastructure/secrets_service.py +317 -0
- shared/infrastructure/specs/__init__.py +9 -0
- shared/infrastructure/specs/specs_repository.py +100 -0
- shared/infrastructure/storage/file_classifier.py +32 -0
- shared/infrastructure/storage/file_handler.py +330 -0
- shared/infrastructure/storage/file_provider.py +233 -0
- shared/infrastructure/storage/integrity_service.py +108 -0
- shared/infrastructure/validation/black_formatter.py +41 -0
- shared/infrastructure/validation/quality.py +46 -0
- shared/infrastructure/validation/ruff_linter.py +104 -0
- shared/infrastructure/validation/syntax_checker.py +45 -0
- shared/infrastructure/validation/test_runner.py +167 -0
- shared/infrastructure/validation/yaml_validator.py +45 -0
- shared/infrastructure/vector/__init__.py +15 -0
- shared/infrastructure/vector/adapters/__init__.py +20 -0
- shared/infrastructure/vector/adapters/constitutional/__init__.py +26 -0
- shared/infrastructure/vector/adapters/constitutional/chunker.py +246 -0
- shared/infrastructure/vector/adapters/constitutional/doc_key_resolver.py +109 -0
- shared/infrastructure/vector/adapters/constitutional/item_builder.py +158 -0
- shared/infrastructure/vector/adapters/constitutional/utils.py +39 -0
- shared/infrastructure/vector/adapters/constitutional_adapter.py +309 -0
- shared/infrastructure/vector/adapters/specs_adapter.py +171 -0
- shared/infrastructure/vector/cognitive_adapter.py +119 -0
- shared/infrastructure/vector/vector_index_service.py +230 -0
- shared/logger.py +195 -0
- shared/models/__init__.py +47 -0
- shared/models/action_result.py +77 -0
- shared/models/audit_models.py +106 -0
- shared/models/audit_rendering.py +30 -0
- shared/models/capability_models.py +22 -0
- shared/models/constitutional_validation.py +185 -0
- shared/models/drift_models.py +24 -0
- shared/models/embedding_payload.py +45 -0
- shared/models/execution_models.py +71 -0
- shared/models/pattern_graph.py +62 -0
- shared/models/prompt_model.py +244 -0
- shared/models/refusal_result.py +294 -0
- shared/models/remediation.py +35 -0
- shared/models/validation_result.py +34 -0
- shared/models/vector_models.py +62 -0
- shared/models/workflow_models.py +242 -0
- shared/path_resolver.py +408 -0
- shared/path_utils.py +60 -0
- shared/processors/base_processor.py +171 -0
- shared/processors/yaml_processor.py +72 -0
- shared/protocols/__init__.py +21 -0
- shared/protocols/brain_services.py +35 -0
- shared/protocols/cognitive.py +35 -0
- shared/protocols/executor.py +47 -0
- shared/protocols/interpreter.py +24 -0
- shared/protocols/knowledge.py +21 -0
- shared/protocols/llm.py +25 -0
- shared/protocols/typer_protocols.py +37 -0
- shared/time.py +18 -0
- shared/universal.py +43 -0
- shared/utils/__init__.py +81 -0
- shared/utils/audit_grouping.py +50 -0
- shared/utils/common_knowledge.py +82 -0
- shared/utils/domain_mapper.py +61 -0
- shared/utils/embedding_utils.py +182 -0
- shared/utils/glob_match.py +93 -0
- shared/utils/header_tools.py +177 -0
- shared/utils/parallel_processor.py +60 -0
- shared/utils/parsing.py +189 -0
- shared/utils/path_utils.py +268 -0
- shared/utils/subprocess_utils.py +87 -0
- shared/workers/__init__.py +19 -0
- shared/workers/base.py +533 -0
- shared/workers/declaration_validator.py +124 -0
- shared/workers/loop_hold_telemetry.py +210 -0
- shared/workers/schedule.py +123 -0
- will/__init__.py +4 -0
- will/agents/__init__.py +4 -0
- will/agents/base_planner.py +133 -0
- will/agents/code_generation/__init__.py +15 -0
- will/agents/code_generation/code_generator.py +247 -0
- will/agents/code_generation/context_formatters.py +99 -0
- will/agents/code_generation/correction_engine.py +157 -0
- will/agents/code_generation/extraction.py +165 -0
- will/agents/code_generation/pattern_validator.py +264 -0
- will/agents/code_generation/prompt_builders.py +209 -0
- will/agents/coder_agent.py +229 -0
- will/agents/coder_agent_refusal_handler.py +168 -0
- will/agents/cognitive_orchestrator.py +152 -0
- will/agents/conversational/__init__.py +13 -0
- will/agents/conversational/agent.py +271 -0
- will/agents/conversational/factory.py +72 -0
- will/agents/conversational/helpers.py +116 -0
- will/agents/execution_agent.py +294 -0
- will/agents/governance_mixin.py +132 -0
- will/agents/planner_agent.py +261 -0
- will/agents/resource_selector.py +228 -0
- will/agents/strategic_auditor/__init__.py +15 -0
- will/agents/strategic_auditor/agent.py +199 -0
- will/agents/strategic_auditor/context_gatherer.py +586 -0
- will/agents/strategic_auditor/effects.py +136 -0
- will/agents/strategic_auditor/models.py +61 -0
- will/agents/strategic_auditor/reasoning.py +169 -0
- will/agents/tagger_agent.py +294 -0
- will/agents/traced_agent_mixin.py +33 -0
- will/autonomy/__init__.py +20 -0
- will/autonomy/autonomous_developer.py +127 -0
- will/autonomy/proposal.py +585 -0
- will/autonomy/proposal_execution_pipeline.py +264 -0
- will/autonomy/proposal_executor.py +410 -0
- will/autonomy/proposal_mapper.py +187 -0
- will/autonomy/proposal_repository.py +118 -0
- will/autonomy/proposal_service.py +251 -0
- will/autonomy/proposal_state_manager.py +239 -0
- will/deciders/__init__.py +9 -0
- will/deciders/governance_decider.py +207 -0
- will/governance/__init__.py +13 -0
- will/governance/audit_remediation_runner.py +197 -0
- will/governance/audit_runner.py +368 -0
- will/governance/census_runner.py +278 -0
- will/governance/coverage_runner.py +489 -0
- will/governance/daemon_runner.py +164 -0
- will/governance/fix_runner.py +693 -0
- will/governance/inspect_runner.py +521 -0
- will/governance/integrity_runner.py +66 -0
- will/governance/lint_runner.py +93 -0
- will/governance/refactor_runner.py +372 -0
- will/governance/sync_runner.py +186 -0
- will/interpreters/__init__.py +44 -0
- will/interpreters/cli_args_interpreter.py +106 -0
- will/interpreters/natural_language_interpreter.py +276 -0
- will/interpreters/request_interpreter.py +126 -0
- will/lifecycle/__init__.py +12 -0
- will/lifecycle/integration_runner.py +54 -0
- will/maintenance/metadata_scribe_service.py +64 -0
- will/orchestration/__init__.py +4 -0
- will/orchestration/cognitive_service.py +185 -0
- will/orchestration/decision_tracer.py +257 -0
- will/orchestration/intent_alignment.py +59 -0
- will/orchestration/intent_guard.py +20 -0
- will/orchestration/phase_registry.py +92 -0
- will/orchestration/process_orchestrator.py +270 -0
- will/orchestration/prompt_pipeline.py +174 -0
- will/orchestration/remediation_orchestrator.py +292 -0
- will/orchestration/self_correction_engine.py +154 -0
- will/orchestration/validation_pipeline.py +45 -0
- will/orchestration/workflow_orchestrator.py +277 -0
- will/phases/__init__.py +24 -0
- will/phases/audit_phase.py +152 -0
- will/phases/canary/pytest_runner.py +156 -0
- will/phases/canary/result_builder.py +130 -0
- will/phases/canary/test_discovery.py +104 -0
- will/phases/canary_validation_phase.py +188 -0
- will/phases/code_generation/artifact_saver.py +175 -0
- will/phases/code_generation/code_sensor.py +117 -0
- will/phases/code_generation/file_path_extractor.py +53 -0
- will/phases/code_generation/work_directory_manager.py +83 -0
- will/phases/code_generation_phase.py +480 -0
- will/phases/execution_phase.py +179 -0
- will/phases/interpret_phase.py +266 -0
- will/phases/load_phase.py +102 -0
- will/phases/parse_phase.py +117 -0
- will/phases/planning_phase.py +182 -0
- will/phases/runtime_phase.py +112 -0
- will/phases/sandbox_validation_phase.py +130 -0
- will/phases/style_check_phase.py +209 -0
- will/phases/test_generation_phase.py +159 -0
- will/self_healing/alignment/persistence.py +53 -0
- will/self_healing/alignment/sandbox.py +51 -0
- will/self_healing/alignment/specialists.py +165 -0
- will/self_healing/alignment_orchestrator.py +140 -0
- will/self_healing/audit_remediation_service.py +199 -0
- will/self_healing/batch_remediation_service.py +280 -0
- will/self_healing/capability_reconciliation_service.py +96 -0
- will/self_healing/capability_tagging_service.py +224 -0
- will/self_healing/clarity_service.py +204 -0
- will/self_healing/complexity_service.py +260 -0
- will/self_healing/context_aware_test_generator.py +298 -0
- will/self_healing/coverage_remediation_service.py +97 -0
- will/self_healing/coverage_watcher.py +192 -0
- will/self_healing/enrichment_service.py +211 -0
- will/self_healing/linelength_service.py +168 -0
- will/self_healing/modularity_remediation_service.py +203 -0
- will/self_healing/remediation_evidence_writer.py +144 -0
- will/self_healing/remediation_executor.py +113 -0
- will/self_healing/remediation_interpretation/__init__.py +1 -0
- will/self_healing/remediation_interpretation/file_context_assembler.py +383 -0
- will/self_healing/remediation_interpretation/file_role_detector.py +599 -0
- will/self_healing/remediation_interpretation/finding_normalizer.py +221 -0
- will/self_healing/remediation_interpretation/models.py +198 -0
- will/self_healing/remediation_interpretation/reasoning_brief_builder.py +235 -0
- will/self_healing/remediation_interpretation/responsibility_extractor.py +421 -0
- will/self_healing/remediation_interpretation/service.py +202 -0
- will/self_healing/remediation_interpretation/strategy_catalog.py +252 -0
- will/self_healing/remediation_interpretation/strategy_selector.py +395 -0
- will/self_healing/remediation_pattern_matcher.py +126 -0
- will/self_healing/simple_test_generator.py +252 -0
- will/self_healing/single_file_remediation.py +137 -0
- will/self_healing/test_generation/automatic_repair.py +377 -0
- will/self_healing/test_generation/code_extractor.py +238 -0
- will/self_healing/test_generation/context_builder.py +140 -0
- will/self_healing/test_generation/executor.py +64 -0
- will/self_healing/test_generation/failure_parser.py +37 -0
- will/self_healing/test_generation/generation_workflow.py +140 -0
- will/self_healing/test_generation/generator.py +283 -0
- will/self_healing/test_generation/llm_correction.py +160 -0
- will/self_healing/test_generation/repair_workflow.py +128 -0
- will/self_healing/test_generation/single_test_fixer.py +77 -0
- will/self_healing/test_generation/test_extractor.py +50 -0
- will/self_healing/test_generation/test_scorer.py +53 -0
- will/self_healing/test_generation/test_validator.py +64 -0
- will/self_healing/test_generator.py +12 -0
- will/strategists/__init__.py +46 -0
- will/strategists/base_strategist.py +29 -0
- will/strategists/clarity_strategist.py +55 -0
- will/strategists/complexity_strategist.py +55 -0
- will/strategists/fix_strategist.py +467 -0
- will/strategists/sync_strategist.py +369 -0
- will/strategists/test_strategist.py +140 -0
- will/strategists/validation_strategist.py +315 -0
- will/test_generation/__init__.py +46 -0
- will/test_generation/adaptive_test_generator.py +123 -0
- will/test_generation/artifacts.py +102 -0
- will/test_generation/harness_detection.py +103 -0
- will/test_generation/helpers/__init__.py +14 -0
- will/test_generation/helpers/context_extractor.py +100 -0
- will/test_generation/helpers/test_executor.py +230 -0
- will/test_generation/llm_output.py +62 -0
- will/test_generation/models.py +25 -0
- will/test_generation/persistence.py +248 -0
- will/test_generation/phases/__init__.py +16 -0
- will/test_generation/phases/generation_phase.py +150 -0
- will/test_generation/phases/load_phase.py +53 -0
- will/test_generation/phases/parse_phase.py +50 -0
- will/test_generation/prompt_engine.py +123 -0
- will/test_generation/result_aggregator.py +73 -0
- will/test_generation/sandbox.py +203 -0
- will/test_generation/strategy_link.py +56 -0
- will/test_generation/test_extractor.py +140 -0
- will/test_generation/validation.py +89 -0
- will/tools/__init__.py +13 -0
- will/tools/anchor_builder.py +111 -0
- will/tools/anchor_search.py +73 -0
- will/tools/anchors/discovery.py +55 -0
- will/tools/anchors/storage.py +32 -0
- will/tools/architectural_context_builder.py +94 -0
- will/tools/cognitive_toolbox.py +47 -0
- will/tools/context/code_snippet_extractor.py +83 -0
- will/tools/context/embedding_search.py +76 -0
- will/tools/context/formatter.py +87 -0
- will/tools/context/models.py +38 -0
- will/tools/context/query_builder.py +42 -0
- will/tools/context/retriever.py +182 -0
- will/tools/context/standards.py +53 -0
- will/tools/file_navigator.py +180 -0
- will/tools/layers.py +31 -0
- will/tools/module_anchor_generator.py +137 -0
- will/tools/module_descriptor.py +154 -0
- will/tools/policy_vectorizer.py +184 -0
- will/tools/symbol_finder.py +188 -0
- will/tools/tool_generator.py +103 -0
- will/workers/audit_ingest_worker.py +207 -0
- will/workers/audit_violation_filter.py +108 -0
- will/workers/audit_violation_normalizer.py +108 -0
- will/workers/audit_violation_sensor.py +370 -0
- will/workers/blackboard_shop_manager.py +280 -0
- will/workers/capability_tagger.py +153 -0
- will/workers/circuit_breaker.py +335 -0
- will/workers/coherence_sensor.py +212 -0
- will/workers/commit_reachability_auditor.py +135 -0
- will/workers/db_sync_worker.py +96 -0
- will/workers/governance_embedding/__init__.py +9 -0
- will/workers/governance_embedding/governance_embedder_worker.py +189 -0
- will/workers/intent_inspector.py +599 -0
- will/workers/observer_worker.py +158 -0
- will/workers/prompt_extractor_worker.py +241 -0
- will/workers/proposal_consumer_effects.py +216 -0
- will/workers/proposal_consumer_revival.py +131 -0
- will/workers/proposal_consumer_worker.py +271 -0
- will/workers/proposal_pipeline_shop_manager.py +273 -0
- will/workers/repo_crawler.py +171 -0
- will/workers/repo_embedding/__init__.py +18 -0
- will/workers/repo_embedding/helpers.py +245 -0
- will/workers/repo_embedding/repo_embedder_workers.py +163 -0
- will/workers/test_coverage_sensor.py +208 -0
- will/workers/test_remediator/__init__.py +12 -0
- will/workers/test_remediator/_operations.py +295 -0
- will/workers/test_remediator/worker.py +187 -0
- will/workers/test_runner_sensor.py +430 -0
- will/workers/violation_executor.py +496 -0
- will/workers/violation_remediator.py +394 -0
- will/workers/violation_remediator_blackboard.py +225 -0
- will/workers/violation_remediator_body/__init__.py +12 -0
- will/workers/violation_remediator_body/blackboard.py +139 -0
- will/workers/violation_remediator_body/ceremony.py +154 -0
- will/workers/violation_remediator_body/context.py +70 -0
- will/workers/violation_remediator_body/llm.py +112 -0
- will/workers/violation_remediator_body/models.py +35 -0
- will/workers/violation_remediator_body/worker.py +518 -0
- will/workers/violation_remediator_proposal.py +328 -0
- will/workers/worker_shop_manager.py +244 -0
- will/workflows/__init__.py +23 -0
- will/workflows/dev_sync_reporter.py +274 -0
- will/workflows/dev_sync_workflow.py +118 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# src/will/orchestration/remediation_orchestrator.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Remediation Orchestrator - Will Layer
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL FIX: Orchestration logic for constitutional remediation
|
|
7
|
+
|
|
8
|
+
This orchestrator makes decisions about remediation (what/when to fix).
|
|
9
|
+
It was split from ConstitutionalMonitor which violated separation by doing
|
|
10
|
+
both orchestration (Will) and execution (Body).
|
|
11
|
+
|
|
12
|
+
Constitutional Role:
|
|
13
|
+
- Will layer: Decision-making and orchestration
|
|
14
|
+
- Decides what needs remediation
|
|
15
|
+
- Decides when to remediate
|
|
16
|
+
- Delegates execution to Body layer
|
|
17
|
+
- No direct file operations
|
|
18
|
+
|
|
19
|
+
Migration:
|
|
20
|
+
- OLD: ConstitutionalMonitor (Mind layer) - orchestration + execution (VIOLATION)
|
|
21
|
+
- NEW: RemediationOrchestrator (Will layer) - orchestration only (COMPLIANT)
|
|
22
|
+
- NEW: RemediationService (Body layer) - execution only (COMPLIANT)
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from dataclasses import dataclass
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
from typing import Protocol
|
|
30
|
+
|
|
31
|
+
from body.governance.remediation_service import (
|
|
32
|
+
RemediationResult,
|
|
33
|
+
RemediationService,
|
|
34
|
+
Violation,
|
|
35
|
+
)
|
|
36
|
+
from mind.governance.audit_context import AuditorContext
|
|
37
|
+
from shared.logger import getLogger
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
logger = getLogger(__name__)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# ID: e6f558e7-0ce7-41c8-9612-82a0c2c3f0ab
|
|
44
|
+
class KnowledgeGraphBuilderProtocol(Protocol):
|
|
45
|
+
"""Protocol for knowledge graph builder dependency."""
|
|
46
|
+
|
|
47
|
+
# ID: 2deaf085-c14c-4f34-aa18-a660ef8aa43e
|
|
48
|
+
async def build_and_sync(self) -> None: ...
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
# ID: 835e78b0-af57-4a86-a29a-5bfc4dc7fbbe
|
|
53
|
+
class AuditReport:
|
|
54
|
+
"""Results of a constitutional audit."""
|
|
55
|
+
|
|
56
|
+
policy_category: str
|
|
57
|
+
violations: list[Violation]
|
|
58
|
+
total_files_scanned: int
|
|
59
|
+
compliant_files: int
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
# ID: 418475ad-bdd8-46c2-a353-0be5976319b1
|
|
63
|
+
def has_violations(self) -> bool:
|
|
64
|
+
return len(self.violations) > 0
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# ID: f1a2b3c4-d5e6-7f8a-9b0c-1d2e3f4a5b6c
|
|
68
|
+
class RemediationOrchestrator:
|
|
69
|
+
"""
|
|
70
|
+
Will layer orchestrator for constitutional remediation.
|
|
71
|
+
|
|
72
|
+
CONSTITUTIONAL COMPLIANCE:
|
|
73
|
+
- Will layer: Makes decisions and orchestrates
|
|
74
|
+
- Decides what to audit
|
|
75
|
+
- Decides what to remediate
|
|
76
|
+
- Delegates execution to Body layer
|
|
77
|
+
- NO direct file operations (that's Body's job)
|
|
78
|
+
|
|
79
|
+
This orchestrator decides strategy and delegates execution.
|
|
80
|
+
It does NOT execute remediation itself.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
def __init__(
|
|
84
|
+
self,
|
|
85
|
+
repo_path: Path | str,
|
|
86
|
+
knowledge_builder: KnowledgeGraphBuilderProtocol | None = None,
|
|
87
|
+
):
|
|
88
|
+
"""
|
|
89
|
+
Initialize remediation orchestrator.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
repo_path: Root path of the repository to orchestrate
|
|
93
|
+
knowledge_builder: Optional knowledge graph builder for post-remediation
|
|
94
|
+
"""
|
|
95
|
+
self.repo_path = Path(repo_path)
|
|
96
|
+
self.knowledge_builder = knowledge_builder
|
|
97
|
+
|
|
98
|
+
# Will layer: Use Mind layer for auditing (reads governance)
|
|
99
|
+
self.auditor = AuditorContext(self.repo_path)
|
|
100
|
+
|
|
101
|
+
# Will layer: Use Body layer for execution (does work)
|
|
102
|
+
self.remediation_service = RemediationService(self.repo_path)
|
|
103
|
+
|
|
104
|
+
logger.info("RemediationOrchestrator initialized for %s", self.repo_path)
|
|
105
|
+
|
|
106
|
+
# ID: de325a31-c034-401f-94f9-fb3a11899511
|
|
107
|
+
def audit_headers(self) -> AuditReport:
|
|
108
|
+
"""
|
|
109
|
+
ORCHESTRATION: Decide to audit headers and collect results.
|
|
110
|
+
|
|
111
|
+
Will layer responsibility:
|
|
112
|
+
- Decides to run audit
|
|
113
|
+
- Collects results from Mind layer (AuditorContext)
|
|
114
|
+
- Formats results for decision-making
|
|
115
|
+
- Does NOT execute audit itself
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
AuditReport with violations found
|
|
119
|
+
"""
|
|
120
|
+
logger.info("Orchestrating header audit...")
|
|
121
|
+
|
|
122
|
+
# Decision: Audit all Python files
|
|
123
|
+
violations_found: list[Violation] = []
|
|
124
|
+
total_scanned = 0
|
|
125
|
+
compliant = 0
|
|
126
|
+
|
|
127
|
+
# Delegate to Mind layer: Get audit results
|
|
128
|
+
src_path = self.repo_path / "src"
|
|
129
|
+
if src_path.exists():
|
|
130
|
+
for py_file in src_path.rglob("*.py"):
|
|
131
|
+
total_scanned += 1
|
|
132
|
+
|
|
133
|
+
# Mind layer tells us: Does this file have violations?
|
|
134
|
+
has_violation = self.auditor.check_file_header(str(py_file))
|
|
135
|
+
|
|
136
|
+
if has_violation:
|
|
137
|
+
# Decision: Record this as needing remediation
|
|
138
|
+
violations_found.append(
|
|
139
|
+
Violation(
|
|
140
|
+
file_path=str(py_file),
|
|
141
|
+
policy_id="code.headers.required",
|
|
142
|
+
description="Missing required header",
|
|
143
|
+
severity="warning",
|
|
144
|
+
remediation_handler="add_header",
|
|
145
|
+
)
|
|
146
|
+
)
|
|
147
|
+
else:
|
|
148
|
+
compliant += 1
|
|
149
|
+
|
|
150
|
+
logger.info(
|
|
151
|
+
"Audit complete: %d scanned, %d violations, %d compliant",
|
|
152
|
+
total_scanned,
|
|
153
|
+
len(violations_found),
|
|
154
|
+
compliant,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
return AuditReport(
|
|
158
|
+
policy_category="headers",
|
|
159
|
+
violations=violations_found,
|
|
160
|
+
total_files_scanned=total_scanned,
|
|
161
|
+
compliant_files=compliant,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
# ID: 79e49dd2-5885-4bde-ade2-51bf7614f67b
|
|
165
|
+
async def remediate_missing_headers_async(self) -> RemediationResult:
|
|
166
|
+
"""
|
|
167
|
+
ORCHESTRATION: Decide to remediate headers and coordinate execution.
|
|
168
|
+
|
|
169
|
+
Will layer responsibility:
|
|
170
|
+
- Decides to find violations (calls audit)
|
|
171
|
+
- Decides to remediate them
|
|
172
|
+
- Delegates execution to Body layer
|
|
173
|
+
- Decides post-remediation actions (knowledge graph update)
|
|
174
|
+
- Does NOT execute remediation itself
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
RemediationResult with execution results from Body layer
|
|
178
|
+
"""
|
|
179
|
+
logger.info("Orchestrating header remediation...")
|
|
180
|
+
|
|
181
|
+
# Decision 1: Audit to find violations
|
|
182
|
+
audit_report = self.audit_headers()
|
|
183
|
+
|
|
184
|
+
if not audit_report.has_violations:
|
|
185
|
+
logger.info("No violations found, no remediation needed")
|
|
186
|
+
return RemediationResult(
|
|
187
|
+
success=True, fixed_count=0, failed_count=0, error=None
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
logger.info("Found %d violations to remediate", len(audit_report.violations))
|
|
191
|
+
|
|
192
|
+
# Decision 2: Delegate execution to Body layer
|
|
193
|
+
result = await self.remediation_service.remediate_missing_headers(
|
|
194
|
+
audit_report.violations
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# Decision 3: Update knowledge graph if remediation succeeded
|
|
198
|
+
if result.success and self.knowledge_builder:
|
|
199
|
+
logger.info("Orchestrating knowledge graph update after remediation...")
|
|
200
|
+
try:
|
|
201
|
+
await self.knowledge_builder.build_and_sync()
|
|
202
|
+
logger.info("Knowledge graph updated successfully")
|
|
203
|
+
except Exception as e:
|
|
204
|
+
logger.error("Failed to update knowledge graph: %s", e)
|
|
205
|
+
# Don't fail the whole operation if KG update fails
|
|
206
|
+
|
|
207
|
+
logger.info(
|
|
208
|
+
"Remediation orchestration complete: %d fixed, %d failed",
|
|
209
|
+
result.fixed_count,
|
|
210
|
+
result.failed_count,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
return result
|
|
214
|
+
|
|
215
|
+
# ID: c4d5e6f7-a8b9-0c1d-2e3f-4a5b6c7d8e9f
|
|
216
|
+
async def remediate_single_file_async(self, file_path: str) -> bool:
|
|
217
|
+
"""
|
|
218
|
+
ORCHESTRATION: Decide to remediate single file and delegate execution.
|
|
219
|
+
|
|
220
|
+
Will layer responsibility:
|
|
221
|
+
- Decides to remediate specific file
|
|
222
|
+
- Delegates execution to Body layer
|
|
223
|
+
- Decides whether to update knowledge graph
|
|
224
|
+
- Does NOT execute remediation itself
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
file_path: Path to file to remediate
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
True if remediation succeeded, False otherwise
|
|
231
|
+
"""
|
|
232
|
+
logger.info("Orchestrating remediation for: %s", file_path)
|
|
233
|
+
|
|
234
|
+
# Decision 1: Delegate execution to Body layer
|
|
235
|
+
success = await self.remediation_service.remediate_single_file(file_path)
|
|
236
|
+
|
|
237
|
+
# Decision 2: Update knowledge graph if needed
|
|
238
|
+
if success and self.knowledge_builder:
|
|
239
|
+
logger.info("Orchestrating knowledge graph update for: %s", file_path)
|
|
240
|
+
try:
|
|
241
|
+
await self.knowledge_builder.build_and_sync()
|
|
242
|
+
except Exception as e:
|
|
243
|
+
logger.error("Failed to update knowledge graph: %s", e)
|
|
244
|
+
|
|
245
|
+
return success
|
|
246
|
+
|
|
247
|
+
# ID: d5e6f7a8-b9c0-1d2e-3f4a-5b6c7d8e9f0a
|
|
248
|
+
def validate_remediation(self, file_path: str) -> bool:
|
|
249
|
+
"""
|
|
250
|
+
ORCHESTRATION: Decide to validate remediation and delegate check.
|
|
251
|
+
|
|
252
|
+
Will layer responsibility:
|
|
253
|
+
- Decides to validate specific file
|
|
254
|
+
- Delegates validation to Body layer
|
|
255
|
+
- Does NOT execute validation itself
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
file_path: Path to file to validate
|
|
259
|
+
|
|
260
|
+
Returns:
|
|
261
|
+
True if file is compliant, False otherwise
|
|
262
|
+
"""
|
|
263
|
+
logger.info("Orchestrating validation for: %s", file_path)
|
|
264
|
+
|
|
265
|
+
# Delegate to Body layer
|
|
266
|
+
return self.remediation_service.validate_remediation(file_path)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
# ID: e6f7a8b9-c0d1-2e3f-4a5b-6c7d8e9f0a1b
|
|
270
|
+
def get_remediation_orchestrator(
|
|
271
|
+
repo_path: Path | str | None = None,
|
|
272
|
+
knowledge_builder: KnowledgeGraphBuilderProtocol | None = None,
|
|
273
|
+
) -> RemediationOrchestrator:
|
|
274
|
+
"""
|
|
275
|
+
Factory function for remediation orchestrator.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
repo_path: Optional repository path (defaults to current directory)
|
|
279
|
+
knowledge_builder: Optional knowledge graph builder
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
RemediationOrchestrator instance
|
|
283
|
+
|
|
284
|
+
Usage:
|
|
285
|
+
# Will layer: Orchestrate remediation
|
|
286
|
+
orchestrator = get_remediation_orchestrator()
|
|
287
|
+
result = await orchestrator.remediate_missing_headers_async()
|
|
288
|
+
"""
|
|
289
|
+
if repo_path is None:
|
|
290
|
+
repo_path = Path.cwd()
|
|
291
|
+
|
|
292
|
+
return RemediationOrchestrator(repo_path, knowledge_builder)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# src/will/orchestration/self_correction_engine.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Handles automated correction of code failures by generating and validating LLM-suggested repairs.
|
|
5
|
+
Updated for A3: Scans source code for imports to resolve ImportErrors intelligently.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import re
|
|
12
|
+
from typing import TYPE_CHECKING, Any
|
|
13
|
+
|
|
14
|
+
from shared.ai.prompt_model import PromptModel
|
|
15
|
+
from shared.logger import getLogger
|
|
16
|
+
from shared.path_resolver import PathResolver
|
|
17
|
+
from shared.utils.parsing import parse_write_blocks
|
|
18
|
+
from will.orchestration.cognitive_service import CognitiveService
|
|
19
|
+
from will.orchestration.prompt_pipeline import PromptPipeline
|
|
20
|
+
from will.orchestration.validation_pipeline import validate_code_async
|
|
21
|
+
from will.tools.symbol_finder import SymbolFinder
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from mind.governance.audit_context import AuditorContext
|
|
26
|
+
logger = getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _build_pipeline(path_resolver: PathResolver) -> PromptPipeline:
|
|
30
|
+
return PromptPipeline(repo_path=path_resolver.repo_root)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _extract_imports_from_code(code: str) -> set[str]:
|
|
34
|
+
"""
|
|
35
|
+
Extracts symbol names being imported in the code.
|
|
36
|
+
Handles:
|
|
37
|
+
from module import Symbol
|
|
38
|
+
import Module
|
|
39
|
+
"""
|
|
40
|
+
symbols = set()
|
|
41
|
+
from_pattern = re.compile("^\\s*from\\s+[\\w.]+\\s+import\\s+(.+)$", re.MULTILINE)
|
|
42
|
+
for match in from_pattern.finditer(code):
|
|
43
|
+
imports_str = match.group(1)
|
|
44
|
+
if "#" in imports_str:
|
|
45
|
+
imports_str = imports_str.split("#")[0]
|
|
46
|
+
for part in imports_str.split(","):
|
|
47
|
+
part = part.strip()
|
|
48
|
+
if not part:
|
|
49
|
+
continue
|
|
50
|
+
symbol = part.split(" as ")[0].strip()
|
|
51
|
+
if symbol:
|
|
52
|
+
symbols.add(symbol)
|
|
53
|
+
return symbols
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# ID: 86fe9933-85e9-4a36-bfe5-3b529e4b266a
|
|
57
|
+
async def attempt_correction(
|
|
58
|
+
failure_context: dict[str, Any],
|
|
59
|
+
cognitive_service: CognitiveService,
|
|
60
|
+
auditor_context: AuditorContext,
|
|
61
|
+
path_resolver: PathResolver,
|
|
62
|
+
) -> dict[str, Any]:
|
|
63
|
+
"""
|
|
64
|
+
Attempts to fix a failed validation or test result using an enriched LLM prompt.
|
|
65
|
+
Now includes deep symbol lookup for ImportErrors by analyzing the code.
|
|
66
|
+
"""
|
|
67
|
+
pipeline = _build_pipeline(path_resolver)
|
|
68
|
+
model = PromptModel.load("self_correction_engine_correction_prompt")
|
|
69
|
+
generator = await cognitive_service.aget_client_for_role(model.manifest.role)
|
|
70
|
+
file_path = failure_context.get("file_path")
|
|
71
|
+
code = failure_context.get("code")
|
|
72
|
+
violations = failure_context.get("violations", [])
|
|
73
|
+
runtime_error = failure_context.get("runtime_error", "")
|
|
74
|
+
if not all([file_path, code]):
|
|
75
|
+
return {
|
|
76
|
+
"status": "error",
|
|
77
|
+
"message": "Missing required failure context fields (file_path, code).",
|
|
78
|
+
}
|
|
79
|
+
symbol_hints = ""
|
|
80
|
+
if runtime_error and (
|
|
81
|
+
"ImportError" in runtime_error or "ModuleNotFoundError" in runtime_error
|
|
82
|
+
):
|
|
83
|
+
logger.info("Import error detected. analyzing code for missing symbols...")
|
|
84
|
+
try:
|
|
85
|
+
finder = SymbolFinder()
|
|
86
|
+
error_line = next(
|
|
87
|
+
(line for line in runtime_error.split("\n") if "Error" in line),
|
|
88
|
+
runtime_error,
|
|
89
|
+
)
|
|
90
|
+
base_hints = await finder.get_context_for_import_error(error_line)
|
|
91
|
+
imported_symbols = _extract_imports_from_code(code)
|
|
92
|
+
deep_hints = []
|
|
93
|
+
if imported_symbols:
|
|
94
|
+
logger.info(
|
|
95
|
+
"Scanning Knowledge Graph for imported symbols: %s",
|
|
96
|
+
imported_symbols,
|
|
97
|
+
)
|
|
98
|
+
for symbol in imported_symbols:
|
|
99
|
+
matches = await finder.find_symbol(symbol, limit=3)
|
|
100
|
+
for m in matches:
|
|
101
|
+
deep_hints.append(
|
|
102
|
+
f" - Found '{m.name}' in '{m.module}' (Use: {m.import_statement})"
|
|
103
|
+
)
|
|
104
|
+
all_hints_text = base_hints
|
|
105
|
+
if deep_hints:
|
|
106
|
+
all_hints_text += "\n\nFound in Knowledge Graph:\n" + "\n".join(
|
|
107
|
+
deep_hints
|
|
108
|
+
)
|
|
109
|
+
symbol_hints = all_hints_text
|
|
110
|
+
if symbol_hints:
|
|
111
|
+
logger.info("Generated symbol hints: %s chars", len(symbol_hints))
|
|
112
|
+
except Exception as e:
|
|
113
|
+
logger.warning("SymbolFinder failed: %s", e)
|
|
114
|
+
violations_json = json.dumps(violations, indent=2)
|
|
115
|
+
hint_section = ""
|
|
116
|
+
if symbol_hints:
|
|
117
|
+
hint_section = f"\n# INTELLIGENT HINTS (FROM KNOWLEDGE GRAPH)\n{symbol_hints}\n"
|
|
118
|
+
final_prompt = pipeline.process("")
|
|
119
|
+
try:
|
|
120
|
+
llm_output = await model.invoke(
|
|
121
|
+
context={
|
|
122
|
+
"file_path": file_path,
|
|
123
|
+
"violations_json": violations_json,
|
|
124
|
+
"runtime_error": runtime_error,
|
|
125
|
+
"hint_section": hint_section,
|
|
126
|
+
"code": code.strip(),
|
|
127
|
+
},
|
|
128
|
+
client=generator,
|
|
129
|
+
user_id="auto_repair",
|
|
130
|
+
)
|
|
131
|
+
except Exception as e:
|
|
132
|
+
return {"status": "error", "message": f"LLM request failed: {e!s}"}
|
|
133
|
+
write_blocks = parse_write_blocks(llm_output)
|
|
134
|
+
if not write_blocks:
|
|
135
|
+
return {
|
|
136
|
+
"status": "error",
|
|
137
|
+
"message": "LLM did not produce a valid correction in a write block.",
|
|
138
|
+
}
|
|
139
|
+
path, fixed_code = next(iter(write_blocks.items()))
|
|
140
|
+
validation_result = await validate_code_async(
|
|
141
|
+
path, fixed_code, auditor_context=auditor_context
|
|
142
|
+
)
|
|
143
|
+
if validation_result["status"] == "dirty":
|
|
144
|
+
return {
|
|
145
|
+
"status": "correction_failed_validation",
|
|
146
|
+
"message": "The corrected code still fails validation.",
|
|
147
|
+
"violations": validation_result["violations"],
|
|
148
|
+
"code": fixed_code,
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
"status": "success",
|
|
152
|
+
"code": validation_result["code"],
|
|
153
|
+
"message": "Corrected code generated and validated successfully.",
|
|
154
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# src/will/orchestration/validation_pipeline.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
A context-aware validation pipeline that applies different validation steps based on file type.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
from body.services.validation.python_validator import validate_python_code_async
|
|
12
|
+
from shared.infrastructure.storage.file_classifier import get_file_classification
|
|
13
|
+
from shared.infrastructure.validation.yaml_validator import validate_yaml_code
|
|
14
|
+
from shared.logger import getLogger
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from mind.governance.audit_context import AuditorContext
|
|
19
|
+
logger = getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# ID: 49007f0d-d279-449b-9a47-da13fb6a0a5e
|
|
23
|
+
async def validate_code_async(
|
|
24
|
+
file_path: str,
|
|
25
|
+
code: str,
|
|
26
|
+
quiet: bool = False,
|
|
27
|
+
auditor_context: AuditorContext | None = None,
|
|
28
|
+
) -> dict[str, Any]:
|
|
29
|
+
"""Validate a file's code by routing it to the appropriate validation pipeline."""
|
|
30
|
+
classification = get_file_classification(file_path)
|
|
31
|
+
if not quiet:
|
|
32
|
+
logger.debug("Validation: Classifying '{file_path}' as '%s'.", classification)
|
|
33
|
+
final_code = code
|
|
34
|
+
violations = []
|
|
35
|
+
if classification == "python":
|
|
36
|
+
if not auditor_context:
|
|
37
|
+
raise ValueError("AuditorContext is required for validating Python code.")
|
|
38
|
+
final_code, violations = await validate_python_code_async(
|
|
39
|
+
file_path, code, auditor_context
|
|
40
|
+
)
|
|
41
|
+
elif classification == "yaml":
|
|
42
|
+
final_code, violations = validate_yaml_code(code)
|
|
43
|
+
is_dirty = any(v.get("severity") == "error" for v in violations)
|
|
44
|
+
status = "dirty" if is_dirty else "clean"
|
|
45
|
+
return {"status": status, "violations": violations, "code": final_code}
|