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,144 @@
|
|
|
1
|
+
# src/body/self_healing/prune_private_capabilities.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
A self-healing tool that scans the codebase and removes # CAPABILITY tags
|
|
5
|
+
from private symbols (those starting with an underscore).
|
|
6
|
+
|
|
7
|
+
Enforces the 'caps.ignore_private' constitutional policy via governed actions.
|
|
8
|
+
Refactored to use the canonical ActionExecutor Gateway for all mutations.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import re
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import TYPE_CHECKING
|
|
16
|
+
|
|
17
|
+
from body.atomic.executor import ActionExecutor
|
|
18
|
+
|
|
19
|
+
# REFACTORED: Removed direct settings import
|
|
20
|
+
from shared.logger import getLogger
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from shared.context import CoreContext
|
|
25
|
+
|
|
26
|
+
logger = getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# ID: bb384d72-6190-400b-9479-20f53e2e63da
|
|
30
|
+
async def prune_private_capability_tags(
|
|
31
|
+
context: CoreContext, write: bool = False
|
|
32
|
+
) -> int:
|
|
33
|
+
"""
|
|
34
|
+
Finds and removes capability tags from private symbols (_ or __) via the Action Gateway.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
context: CoreContext (Required for ActionExecutor and KnowledgeService)
|
|
38
|
+
write: If True, apply changes; if False, perform dry-run.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
The total number of tags removed or proposed for removal.
|
|
42
|
+
"""
|
|
43
|
+
logger.info("🐍 Scanning for misplaced capability tags on private symbols...")
|
|
44
|
+
|
|
45
|
+
executor = ActionExecutor(context)
|
|
46
|
+
knowledge_service = context.knowledge_service
|
|
47
|
+
|
|
48
|
+
# Use the DB-backed knowledge graph (SSOT)
|
|
49
|
+
graph = await knowledge_service.get_graph()
|
|
50
|
+
symbols = graph.get("symbols", {})
|
|
51
|
+
|
|
52
|
+
# Identify private symbols that shouldn't have tags
|
|
53
|
+
private_symbols_with_tags = [
|
|
54
|
+
s
|
|
55
|
+
for s in symbols.values()
|
|
56
|
+
if s.get("name", "").startswith("_")
|
|
57
|
+
and s.get("capability") != "unassigned"
|
|
58
|
+
and s.get("capability") is not None
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
if not private_symbols_with_tags:
|
|
62
|
+
logger.info("✅ Compliance perfect: No private symbols have capability tags.")
|
|
63
|
+
return 0
|
|
64
|
+
|
|
65
|
+
logger.info(
|
|
66
|
+
"Found %d private symbol(s) with illegal capability tags.",
|
|
67
|
+
len(private_symbols_with_tags),
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Group violations by file to minimize gateway transactions
|
|
71
|
+
files_to_modify: dict[Path, list[int]] = {}
|
|
72
|
+
tag_pattern = re.compile(r"^\s*#\s*CAPABILITY:\s*\S+\s*$", re.IGNORECASE)
|
|
73
|
+
|
|
74
|
+
for symbol in private_symbols_with_tags:
|
|
75
|
+
file_path_str = symbol.get("file") or symbol.get("file_path")
|
|
76
|
+
if not file_path_str:
|
|
77
|
+
continue
|
|
78
|
+
|
|
79
|
+
file_path = context.git_service.repo_path / file_path_str
|
|
80
|
+
line_num = symbol.get("line_number", 0)
|
|
81
|
+
|
|
82
|
+
if file_path not in files_to_modify:
|
|
83
|
+
if file_path.exists():
|
|
84
|
+
files_to_modify[file_path] = []
|
|
85
|
+
else:
|
|
86
|
+
logger.warning(
|
|
87
|
+
"File not found for symbol %s: %s",
|
|
88
|
+
symbol.get("symbol_path"),
|
|
89
|
+
file_path,
|
|
90
|
+
)
|
|
91
|
+
continue
|
|
92
|
+
|
|
93
|
+
files_to_modify[file_path].append(line_num)
|
|
94
|
+
|
|
95
|
+
total_pruned = 0
|
|
96
|
+
write_mode = write
|
|
97
|
+
|
|
98
|
+
# Execute mutations via Gateway
|
|
99
|
+
for file_path, line_nums in files_to_modify.items():
|
|
100
|
+
try:
|
|
101
|
+
rel_path = str(file_path.relative_to(context.git_service.repo_path))
|
|
102
|
+
lines = file_path.read_text("utf-8").splitlines()
|
|
103
|
+
|
|
104
|
+
modified = False
|
|
105
|
+
# Sort lines descending to prevent index shifts
|
|
106
|
+
for line_num in sorted(line_nums, reverse=True):
|
|
107
|
+
# The tag is usually 1 or 2 lines above the symbol definition
|
|
108
|
+
# We check the immediate vicinity
|
|
109
|
+
lookback_range = range(max(0, line_num - 3), line_num)
|
|
110
|
+
for idx in reversed(list(lookback_range)):
|
|
111
|
+
if idx < len(lines) and tag_pattern.match(lines[idx]):
|
|
112
|
+
logger.debug(
|
|
113
|
+
" -> Found tag for removal in %s at line %d",
|
|
114
|
+
rel_path,
|
|
115
|
+
idx + 1,
|
|
116
|
+
)
|
|
117
|
+
lines.pop(idx)
|
|
118
|
+
modified = True
|
|
119
|
+
total_pruned += 1
|
|
120
|
+
break
|
|
121
|
+
|
|
122
|
+
if modified:
|
|
123
|
+
final_code = "\n".join(lines) + "\n"
|
|
124
|
+
|
|
125
|
+
# CONSTITUTIONAL GATEWAY: Mutation is audited and guarded
|
|
126
|
+
result = await executor.execute(
|
|
127
|
+
action_id="file.edit",
|
|
128
|
+
write=write_mode,
|
|
129
|
+
file_path=rel_path,
|
|
130
|
+
code=final_code,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
if result.ok:
|
|
134
|
+
status = "Pruned" if write_mode else "Proposed"
|
|
135
|
+
logger.info(" -> [%s] %s", status, rel_path)
|
|
136
|
+
else:
|
|
137
|
+
logger.error(
|
|
138
|
+
" -> [BLOCKED] %s: %s", rel_path, result.data.get("error")
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
except Exception as e:
|
|
142
|
+
logger.error("Failed to process %s: %s", file_path.name, e)
|
|
143
|
+
|
|
144
|
+
return total_pruned
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# src/body/self_healing/purge_legacy_tags_service.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Service logic for purging legacy tags and descriptive pollution from source code.
|
|
5
|
+
Refactored to use the canonical ActionExecutor Gateway for all mutations.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from collections import defaultdict
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from body.atomic.executor import ActionExecutor
|
|
14
|
+
from mind.governance.audit_context import AuditorContext
|
|
15
|
+
from mind.governance.rule_executor import execute_rule
|
|
16
|
+
from mind.governance.rule_extractor import extract_executable_rules
|
|
17
|
+
|
|
18
|
+
# REFACTORED: Removed direct settings import
|
|
19
|
+
from shared.logger import getLogger
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from shared.context import CoreContext
|
|
24
|
+
|
|
25
|
+
logger = getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# ID: b67cd592-b257-4228-b55e-424245f64205
|
|
29
|
+
async def purge_legacy_tags(context: CoreContext, dry_run: bool = True) -> int:
|
|
30
|
+
"""
|
|
31
|
+
Finds legacy tags (like # owner: or # Tag:) using constitutional rules
|
|
32
|
+
and removes them from the source files via the Action Gateway.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
context: CoreContext (Required for ActionExecutor)
|
|
36
|
+
dry_run: If True, only prints the actions (write=False in Gateway).
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
The total number of lines that were (or would be) removed.
|
|
40
|
+
"""
|
|
41
|
+
# 1. Initialize Context and Gateway
|
|
42
|
+
executor = ActionExecutor(context)
|
|
43
|
+
auditor_context = context.auditor_context or AuditorContext(
|
|
44
|
+
context.git_service.repo_path
|
|
45
|
+
)
|
|
46
|
+
await auditor_context.load_knowledge_graph()
|
|
47
|
+
|
|
48
|
+
# 2. Extract rules from the Constitution and find the "Purity" rule
|
|
49
|
+
# FIX: Added enforcement_loader parameter
|
|
50
|
+
all_rules = extract_executable_rules(
|
|
51
|
+
auditor_context.policies, auditor_context.enforcement_loader
|
|
52
|
+
)
|
|
53
|
+
target_rule = next(
|
|
54
|
+
(r for r in all_rules if r.rule_id == "purity.no_descriptive_pollution"), None
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if not target_rule:
|
|
58
|
+
logger.warning(
|
|
59
|
+
"Constitutional rule 'purity.no_descriptive_pollution' not found. Skipping purge."
|
|
60
|
+
)
|
|
61
|
+
return 0
|
|
62
|
+
|
|
63
|
+
# 3. Execute the rule dynamically to find violations
|
|
64
|
+
logger.info(
|
|
65
|
+
"🔍 Scanning for legacy tags via constitutional rule: %s", target_rule.rule_id
|
|
66
|
+
)
|
|
67
|
+
all_findings = await execute_rule(target_rule, auditor_context)
|
|
68
|
+
|
|
69
|
+
if not all_findings:
|
|
70
|
+
logger.info("✅ No legacy tags found. Codebase is pure.")
|
|
71
|
+
return 0
|
|
72
|
+
|
|
73
|
+
# 4. Filter findings to only include those in the source directory
|
|
74
|
+
src_findings = [
|
|
75
|
+
finding
|
|
76
|
+
for finding in all_findings
|
|
77
|
+
if finding.file_path and finding.file_path.startswith("src/")
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
if not src_findings:
|
|
81
|
+
logger.info(
|
|
82
|
+
"Found %s findings in non-code files. No automated action taken on 'src/'.",
|
|
83
|
+
len(all_findings),
|
|
84
|
+
)
|
|
85
|
+
return 0
|
|
86
|
+
|
|
87
|
+
logger.info(
|
|
88
|
+
"Found %s instances of legacy tags in 'src/'. Starting cleanup...",
|
|
89
|
+
len(src_findings),
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# 5. Group findings by file to minimize gateway transactions
|
|
93
|
+
files_to_fix = defaultdict(list)
|
|
94
|
+
for finding in src_findings:
|
|
95
|
+
if finding.line_number:
|
|
96
|
+
files_to_fix[finding.file_path].append(finding.line_number)
|
|
97
|
+
|
|
98
|
+
total_lines_removed = 0
|
|
99
|
+
write_mode = not dry_run
|
|
100
|
+
|
|
101
|
+
# 6. Apply fixes via Governed Gateway
|
|
102
|
+
for file_path_str, line_numbers_to_delete in files_to_fix.items():
|
|
103
|
+
file_path = context.git_service.repo_path / file_path_str
|
|
104
|
+
|
|
105
|
+
# Sort lines in reverse order to avoid index shifting while deleting
|
|
106
|
+
sorted_line_numbers = sorted(line_numbers_to_delete, reverse=True)
|
|
107
|
+
|
|
108
|
+
try:
|
|
109
|
+
if not file_path.exists():
|
|
110
|
+
continue
|
|
111
|
+
|
|
112
|
+
lines = file_path.read_text("utf-8").splitlines()
|
|
113
|
+
|
|
114
|
+
for line_num in sorted_line_numbers:
|
|
115
|
+
index_to_delete = line_num - 1
|
|
116
|
+
if 0 <= index_to_delete < len(lines):
|
|
117
|
+
del lines[index_to_delete]
|
|
118
|
+
total_lines_removed += 1
|
|
119
|
+
|
|
120
|
+
final_code = "\n".join(lines) + "\n"
|
|
121
|
+
|
|
122
|
+
# CONSTITUTIONAL GATEWAY: Mutation is audited and guarded
|
|
123
|
+
result = await executor.execute(
|
|
124
|
+
action_id="file.edit",
|
|
125
|
+
write=write_mode,
|
|
126
|
+
file_path=file_path_str,
|
|
127
|
+
code=final_code,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
if result.ok:
|
|
131
|
+
mode_str = "Purged" if write_mode else "Proposed (Dry Run)"
|
|
132
|
+
logger.info(
|
|
133
|
+
" -> [%s] %s lines from %s",
|
|
134
|
+
mode_str,
|
|
135
|
+
len(sorted_line_numbers),
|
|
136
|
+
file_path_str,
|
|
137
|
+
)
|
|
138
|
+
else:
|
|
139
|
+
logger.error(
|
|
140
|
+
" -> [BLOCKED] %s: %s", file_path_str, result.data.get("error")
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
except Exception as e:
|
|
144
|
+
logger.error("❌ Error processing %s: %s", file_path_str, e)
|
|
145
|
+
|
|
146
|
+
return total_lines_removed
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# src/body/self_healing/remediation_models.py
|
|
2
|
+
"""
|
|
3
|
+
Data models for the Audit Remediation Service.
|
|
4
|
+
|
|
5
|
+
These are the "boxes" we use to organize information as it flows through
|
|
6
|
+
the remediation process:
|
|
7
|
+
- What patterns matched
|
|
8
|
+
- What fixes we tried
|
|
9
|
+
- What the results were
|
|
10
|
+
|
|
11
|
+
Think of these as forms you fill out to keep track of what happened.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from datetime import UTC, datetime
|
|
18
|
+
from enum import Enum
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
from shared.models import AuditFinding
|
|
22
|
+
from shared.models.remediation import AutoFixablePattern
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# ==============================================================================
|
|
26
|
+
# ENUMS - These are like multiple choice options
|
|
27
|
+
# ==============================================================================
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# ID: 6d502541-a127-4c4c-9d1b-cb269ef5f527
|
|
31
|
+
class RemediationMode(Enum):
|
|
32
|
+
"""
|
|
33
|
+
How aggressive should we be when fixing things?
|
|
34
|
+
|
|
35
|
+
SAFE_ONLY = Only fix things we're very confident about (>85% sure, low risk)
|
|
36
|
+
MEDIUM_RISK = Include fixes that are pretty safe (>70% sure, low-medium risk)
|
|
37
|
+
ALL_DETERMINISTIC = Try all fixes that don't involve AI reasoning
|
|
38
|
+
|
|
39
|
+
Start with SAFE_ONLY. Only use others when you trust the system.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
SAFE_ONLY = "safe_only"
|
|
43
|
+
MEDIUM_RISK = "medium_risk"
|
|
44
|
+
ALL_DETERMINISTIC = "all_deterministic"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# ==============================================================================
|
|
48
|
+
# MATCH RECORDS - Tracking when a finding matches a fix pattern
|
|
49
|
+
# ==============================================================================
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@dataclass
|
|
53
|
+
# ID: 5ffc4890-959e-4a45-8bd2-cef113dccede
|
|
54
|
+
class MatchedPattern:
|
|
55
|
+
"""
|
|
56
|
+
Records when an audit finding matches a pattern we know how to fix.
|
|
57
|
+
|
|
58
|
+
Example:
|
|
59
|
+
Finding: "Imports are not sorted in file X"
|
|
60
|
+
Pattern: "I know how to sort imports"
|
|
61
|
+
Result: MatchedPattern connecting them
|
|
62
|
+
|
|
63
|
+
This is evidence for later - we can see which patterns matched which problems.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
finding: AuditFinding # The problem we found
|
|
67
|
+
pattern: AutoFixablePattern # The fix pattern that applies
|
|
68
|
+
confidence: float # How confident we are (0.0 to 1.0)
|
|
69
|
+
risk_level: str # "low", "medium", or "high"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# ==============================================================================
|
|
73
|
+
# FIX EXECUTION RECORDS - What happened when we tried to fix something
|
|
74
|
+
# ==============================================================================
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@dataclass
|
|
78
|
+
# ID: 7d298182-0eee-430d-a9ff-c6a26d7e6460
|
|
79
|
+
class FixResult:
|
|
80
|
+
"""
|
|
81
|
+
The outcome of trying to apply ONE fix.
|
|
82
|
+
|
|
83
|
+
This is what a fix handler returns to tell us:
|
|
84
|
+
- Did it work? (ok = True/False)
|
|
85
|
+
- If not, what went wrong? (error_message)
|
|
86
|
+
- Any extra details? (changes_made)
|
|
87
|
+
|
|
88
|
+
Example:
|
|
89
|
+
FixResult(
|
|
90
|
+
ok=True,
|
|
91
|
+
error_message=None,
|
|
92
|
+
changes_made={"imports_sorted": 15}
|
|
93
|
+
)
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
ok: bool # Did the fix work?
|
|
97
|
+
error_message: str | None = None # If not, why not?
|
|
98
|
+
changes_made: dict[str, Any] | None = None # Optional details about what changed
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@dataclass
|
|
102
|
+
# ID: f3ea5a75-ed5d-4f01-8fd7-3a1cc7bce259
|
|
103
|
+
class FixDetail:
|
|
104
|
+
"""
|
|
105
|
+
Complete record of a single fix attempt - for evidence trail.
|
|
106
|
+
|
|
107
|
+
After we try to fix something, we create one of these to remember:
|
|
108
|
+
- Which file we fixed
|
|
109
|
+
- Which fix handler we used
|
|
110
|
+
- Whether it worked
|
|
111
|
+
- How long it took
|
|
112
|
+
|
|
113
|
+
These get saved in the evidence file so we can review what happened.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
finding_id: str # Unique identifier for the finding we fixed
|
|
117
|
+
file_path: str # Which file we modified
|
|
118
|
+
action_handler: str # Which handler function we used (e.g., "sort_imports")
|
|
119
|
+
status: str # "success", "failed", or "skipped"
|
|
120
|
+
error_message: str | None # If it failed, why?
|
|
121
|
+
duration_ms: int # How long it took in milliseconds
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# ==============================================================================
|
|
125
|
+
# OVERALL RESULTS - The complete story of a remediation session
|
|
126
|
+
# ==============================================================================
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
@dataclass
|
|
130
|
+
# ID: cfc0238c-1276-4fa7-8373-41d969175a9d
|
|
131
|
+
class RemediationResult:
|
|
132
|
+
"""
|
|
133
|
+
The complete report of one remediation run.
|
|
134
|
+
|
|
135
|
+
This is the "big picture" summary that tells you:
|
|
136
|
+
- How many problems we started with
|
|
137
|
+
- How many we could fix
|
|
138
|
+
- How many we actually fixed successfully
|
|
139
|
+
- Whether things got better
|
|
140
|
+
|
|
141
|
+
Gets saved as JSON evidence file for full traceability.
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
# Identity - when did this happen?
|
|
145
|
+
session_id: str # Unique ID for this run (UUID)
|
|
146
|
+
timestamp_utc: str # When it happened (ISO format)
|
|
147
|
+
|
|
148
|
+
# Input stats - what we started with
|
|
149
|
+
total_findings: int # Total problems from audit
|
|
150
|
+
findings_by_severity: dict[str, int] # How many ERROR, WARNING, INFO
|
|
151
|
+
|
|
152
|
+
# Matching results - what we could potentially fix
|
|
153
|
+
matched_patterns: list[MatchedPattern] # Problems that matched fix patterns
|
|
154
|
+
unmatched_findings: list[AuditFinding] # Problems we don't know how to fix yet
|
|
155
|
+
|
|
156
|
+
# Execution results - what we actually did
|
|
157
|
+
fixes_attempted: int # How many fixes we tried
|
|
158
|
+
fixes_succeeded: int # How many worked
|
|
159
|
+
fixes_failed: int # How many didn't work
|
|
160
|
+
|
|
161
|
+
# Validation - did we make things better?
|
|
162
|
+
validation_passed: bool # True if audit shows improvement
|
|
163
|
+
findings_before: int # Violation count before fixes
|
|
164
|
+
findings_after: int # Violation count after fixes
|
|
165
|
+
improvement_delta: int # How many fewer violations (positive = good)
|
|
166
|
+
|
|
167
|
+
# Evidence trail - details for review
|
|
168
|
+
fix_details: list[FixDetail] # Complete list of what we tried
|
|
169
|
+
duration_sec: float # Total time elapsed
|
|
170
|
+
|
|
171
|
+
# File references - where to find related files
|
|
172
|
+
audit_input_path: str # Where we read audit findings from
|
|
173
|
+
remediation_output_path: str # Where we wrote this result to
|
|
174
|
+
validation_audit_path: str | None = None # Where validation audit was saved
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# ==============================================================================
|
|
178
|
+
# HELPER FUNCTIONS - Making it easier to create these objects
|
|
179
|
+
# ==============================================================================
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
# ID: bcd21dff-5338-4754-baaf-30106517b102
|
|
183
|
+
def create_remediation_result(
|
|
184
|
+
total_findings: int,
|
|
185
|
+
findings_by_severity: dict[str, int],
|
|
186
|
+
matched_patterns: list[MatchedPattern],
|
|
187
|
+
unmatched_findings: list[AuditFinding],
|
|
188
|
+
fix_details: list[FixDetail],
|
|
189
|
+
findings_before: int,
|
|
190
|
+
findings_after: int,
|
|
191
|
+
audit_input_path: str,
|
|
192
|
+
remediation_output_path: str,
|
|
193
|
+
validation_audit_path: str | None,
|
|
194
|
+
duration_sec: float,
|
|
195
|
+
) -> RemediationResult:
|
|
196
|
+
"""
|
|
197
|
+
Helper function to create a RemediationResult with less typing.
|
|
198
|
+
|
|
199
|
+
This automatically:
|
|
200
|
+
- Generates a unique session ID
|
|
201
|
+
- Sets the current timestamp
|
|
202
|
+
- Calculates success/failure counts
|
|
203
|
+
- Determines if validation passed
|
|
204
|
+
|
|
205
|
+
You just need to provide the actual data.
|
|
206
|
+
"""
|
|
207
|
+
import uuid
|
|
208
|
+
|
|
209
|
+
session_id = str(uuid.uuid4())
|
|
210
|
+
timestamp_utc = datetime.now(UTC).isoformat()
|
|
211
|
+
|
|
212
|
+
fixes_succeeded = sum(1 for detail in fix_details if detail.status == "success")
|
|
213
|
+
fixes_failed = sum(1 for detail in fix_details if detail.status == "failed")
|
|
214
|
+
fixes_attempted = fixes_succeeded + fixes_failed
|
|
215
|
+
|
|
216
|
+
improvement_delta = findings_before - findings_after
|
|
217
|
+
validation_passed = findings_after < findings_before
|
|
218
|
+
|
|
219
|
+
return RemediationResult(
|
|
220
|
+
session_id=session_id,
|
|
221
|
+
timestamp_utc=timestamp_utc,
|
|
222
|
+
total_findings=total_findings,
|
|
223
|
+
findings_by_severity=findings_by_severity,
|
|
224
|
+
matched_patterns=matched_patterns,
|
|
225
|
+
unmatched_findings=unmatched_findings,
|
|
226
|
+
fixes_attempted=fixes_attempted,
|
|
227
|
+
fixes_succeeded=fixes_succeeded,
|
|
228
|
+
fixes_failed=fixes_failed,
|
|
229
|
+
validation_passed=validation_passed,
|
|
230
|
+
findings_before=findings_before,
|
|
231
|
+
findings_after=findings_after,
|
|
232
|
+
improvement_delta=improvement_delta,
|
|
233
|
+
fix_details=fix_details,
|
|
234
|
+
duration_sec=duration_sec,
|
|
235
|
+
audit_input_path=audit_input_path,
|
|
236
|
+
remediation_output_path=remediation_output_path,
|
|
237
|
+
validation_audit_path=validation_audit_path,
|
|
238
|
+
)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# src/body/self_healing/test_context/detectors.py
|
|
2
|
+
|
|
3
|
+
"""Refactored logic for src/features/self_healing/test_context/detectors.py."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# ID: 2ff96be2-ccfb-4ae2-8529-d5a30e5a919d
|
|
9
|
+
def analyze_dependencies(imports: list[str]) -> list[str]:
|
|
10
|
+
# PURGED: 'features' removed.
|
|
11
|
+
return [
|
|
12
|
+
i
|
|
13
|
+
for i in imports
|
|
14
|
+
if any(
|
|
15
|
+
i.startswith(p) for p in ["core", "mind", "body", "will", "shared", "api"]
|
|
16
|
+
)
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# ID: 58747330-67ea-4b4a-bf30-8b89816b8e49
|
|
21
|
+
def identify_external_deps(imports: list[str]) -> list[str]:
|
|
22
|
+
patterns = [
|
|
23
|
+
"httpx",
|
|
24
|
+
"requests",
|
|
25
|
+
"sqlalchemy",
|
|
26
|
+
"psycopg2",
|
|
27
|
+
"redis",
|
|
28
|
+
"boto3",
|
|
29
|
+
"anthropic",
|
|
30
|
+
"openai",
|
|
31
|
+
]
|
|
32
|
+
return list({i for i in imports for p in patterns if p in i.lower()})
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# ID: 034392ba-2992-4514-b294-a479e66c70c9
|
|
36
|
+
def detect_fs_usage(code: str) -> bool:
|
|
37
|
+
return any(
|
|
38
|
+
x in code
|
|
39
|
+
for x in [
|
|
40
|
+
"Path(",
|
|
41
|
+
"open(",
|
|
42
|
+
".read_text",
|
|
43
|
+
".write_text",
|
|
44
|
+
".mkdir(",
|
|
45
|
+
".exists(",
|
|
46
|
+
"os.path",
|
|
47
|
+
"shutil.",
|
|
48
|
+
]
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# ID: f338824d-8f2a-4a7b-b32f-ea6719278245
|
|
53
|
+
def detect_db_usage(code: str) -> bool:
|
|
54
|
+
return any(
|
|
55
|
+
x in code
|
|
56
|
+
for x in [
|
|
57
|
+
"get_session",
|
|
58
|
+
"Session(",
|
|
59
|
+
"query(",
|
|
60
|
+
"select(",
|
|
61
|
+
"insert(",
|
|
62
|
+
"update(",
|
|
63
|
+
"delete(",
|
|
64
|
+
"sessionmaker",
|
|
65
|
+
]
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# ID: 8f68eb3c-155c-4c49-97e0-27681a52e29e
|
|
70
|
+
def detect_network_usage(code: str) -> bool:
|
|
71
|
+
return any(
|
|
72
|
+
x in code
|
|
73
|
+
for x in ["httpx.", "requests.", "AsyncClient", ".get(", ".post(", "urllib."]
|
|
74
|
+
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# src/body/self_healing/test_context/examples.py
|
|
2
|
+
|
|
3
|
+
"""Refactored logic for src/features/self_healing/test_context/examples.py."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from shared.infrastructure.intent.operational_config import load_operational_config
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
_CFG = load_operational_config().testing
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# ID: 930e05fb-c828-4995-9bfe-729fde9ff573
|
|
16
|
+
def find_similar_tests(
|
|
17
|
+
repo_root: Path, module_name: str, classes: list, functions: list
|
|
18
|
+
) -> list:
|
|
19
|
+
examples = []
|
|
20
|
+
tests_dir = repo_root / "tests"
|
|
21
|
+
if not tests_dir.exists():
|
|
22
|
+
return []
|
|
23
|
+
for test_file in tests_dir.rglob("test_*.py"):
|
|
24
|
+
try:
|
|
25
|
+
content = test_file.read_text(encoding="utf-8")
|
|
26
|
+
score = sum(
|
|
27
|
+
2 for c in classes if c["name"].lower() in content.lower()
|
|
28
|
+
) + sum(1 for f in functions if f["name"] in content)
|
|
29
|
+
if score > 0:
|
|
30
|
+
examples.append(
|
|
31
|
+
{
|
|
32
|
+
"file": str(test_file.relative_to(repo_root)),
|
|
33
|
+
"similarity": score,
|
|
34
|
+
"snippet": extract_snippet(content),
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
except Exception:
|
|
38
|
+
continue
|
|
39
|
+
return sorted(examples, key=lambda x: x["similarity"], reverse=True)[:3]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# ID: 0f835005-0080-4f59-a4db-4b4e2da92c17
|
|
43
|
+
def extract_snippet(content: str, max_lines: int = _CFG.snippet_max_lines) -> str:
|
|
44
|
+
lines = content.split("\n")
|
|
45
|
+
for i, line in enumerate(lines):
|
|
46
|
+
if line.strip().startswith("def test_"):
|
|
47
|
+
snippet = []
|
|
48
|
+
for j in range(i, min(i + max_lines, len(lines))):
|
|
49
|
+
if j > i and lines[j].strip().startswith("def "):
|
|
50
|
+
break
|
|
51
|
+
snippet.append(lines[j])
|
|
52
|
+
return "\n".join(snippet)
|
|
53
|
+
return "\n".join(lines[:max_lines])
|