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,354 @@
|
|
|
1
|
+
# src/body/atomic/build_tests_action.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Atomic Build Action - Test Generation
|
|
5
|
+
|
|
6
|
+
Generates a test file for a source file using CoderAgent and runs
|
|
7
|
+
IntentGuard validation. Auto-heal (fix.imports, fix.headers, fix.format)
|
|
8
|
+
runs as subsequent steps of flow.build_tests, not inside this AtomicAction —
|
|
9
|
+
composing other AtomicActions is a Flow concern, not an Atomic one.
|
|
10
|
+
|
|
11
|
+
Constitutional Alignment:
|
|
12
|
+
- Boundary: Uses CoreContext for repo_path (no direct settings access).
|
|
13
|
+
- Circularity Fix: Feature-level imports are performed inside functions.
|
|
14
|
+
- Atomicity: Does not invoke ActionExecutor.execute() on other actions;
|
|
15
|
+
auto-heal is delegated to flow.build_tests as subsequent Flow steps.
|
|
16
|
+
See CORE-Flow.md §7.
|
|
17
|
+
- Remediation: Declares remediates=["test.failure", "test.missing"] so
|
|
18
|
+
ViolationRemediatorWorker can close the autonomous test loop.
|
|
19
|
+
- Path mapping: source_file -> test_file is resolved via
|
|
20
|
+
shared.infrastructure.intent.test_coverage_paths.source_to_test_path
|
|
21
|
+
(governed by .intent/enforcement/config/test_coverage.yaml).
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import time
|
|
27
|
+
from typing import TYPE_CHECKING
|
|
28
|
+
|
|
29
|
+
from body.atomic.registry import ActionCategory, register_action
|
|
30
|
+
from shared.action_types import ActionImpact, ActionResult
|
|
31
|
+
from shared.atomic_action import atomic_action
|
|
32
|
+
from shared.logger import getLogger
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if TYPE_CHECKING:
|
|
36
|
+
from body.governance.intent_guard import IntentGuard
|
|
37
|
+
from shared.context import CoreContext
|
|
38
|
+
|
|
39
|
+
logger = getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# ID: faf222be-b3ab-43ca-b38d-97e1139d2f92
|
|
43
|
+
def _run_intent_guard_check(
|
|
44
|
+
intent_guard: IntentGuard,
|
|
45
|
+
generated_code: str,
|
|
46
|
+
test_file: str,
|
|
47
|
+
start: float,
|
|
48
|
+
) -> ActionResult | None:
|
|
49
|
+
"""Run IntentGuard validation on generated test code, fail-loud on errors.
|
|
50
|
+
|
|
51
|
+
Issue #210: prior implementation wrapped this in a broad ``except
|
|
52
|
+
Exception`` that swallowed both:
|
|
53
|
+
- the AttributeError raised by ``PatternValidators.validate`` (no
|
|
54
|
+
such method existed before this fix), and
|
|
55
|
+
- any genuine validator failure on real generated code.
|
|
56
|
+
|
|
57
|
+
Either was logged as a WARNING and the action proceeded as if the
|
|
58
|
+
check had passed. This helper inverts that posture: a validator
|
|
59
|
+
exception OR ``is_valid=False`` causes ``build.tests`` to return
|
|
60
|
+
``ok=False`` with the violations attached. The deliberate
|
|
61
|
+
"no-validator-for-this-pattern_id" case (e.g. ``test_file``) returns
|
|
62
|
+
an empty-violations result from PatternValidators — that is success,
|
|
63
|
+
not failure, and yields ``None`` here so the caller proceeds.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
``None`` if validation passed (caller proceeds to write).
|
|
67
|
+
An ``ActionResult`` with ``ok=False`` if validation raised or
|
|
68
|
+
produced violations.
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
validation = intent_guard.validate_generated_code(
|
|
72
|
+
code=generated_code,
|
|
73
|
+
pattern_id="test_file",
|
|
74
|
+
component_type="test",
|
|
75
|
+
target_path=test_file,
|
|
76
|
+
)
|
|
77
|
+
except Exception as e:
|
|
78
|
+
logger.error("build.tests: IntentGuard validation raised: %s", e, exc_info=True)
|
|
79
|
+
return ActionResult(
|
|
80
|
+
action_id="build.tests",
|
|
81
|
+
ok=False,
|
|
82
|
+
data={
|
|
83
|
+
"error": f"IntentGuard validation failed: {e}",
|
|
84
|
+
"test_file": test_file,
|
|
85
|
+
},
|
|
86
|
+
duration_sec=time.time() - start,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
if not validation.is_valid:
|
|
90
|
+
logger.error(
|
|
91
|
+
"build.tests: IntentGuard found %d violation(s) in generated code",
|
|
92
|
+
len(validation.violations),
|
|
93
|
+
)
|
|
94
|
+
return ActionResult(
|
|
95
|
+
action_id="build.tests",
|
|
96
|
+
ok=False,
|
|
97
|
+
data={
|
|
98
|
+
"error": "intent_guard_violations",
|
|
99
|
+
"violations": [
|
|
100
|
+
{
|
|
101
|
+
"rule_name": getattr(v, "rule_name", "unknown"),
|
|
102
|
+
"message": getattr(v, "message", ""),
|
|
103
|
+
"severity": getattr(v, "severity", "error"),
|
|
104
|
+
}
|
|
105
|
+
for v in validation.violations
|
|
106
|
+
],
|
|
107
|
+
"test_file": test_file,
|
|
108
|
+
},
|
|
109
|
+
duration_sec=time.time() - start,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return None
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@register_action(
|
|
116
|
+
action_id="build.tests",
|
|
117
|
+
description="Generate a test file for a source file using CoderAgent",
|
|
118
|
+
category=ActionCategory.BUILD,
|
|
119
|
+
policies=["rules/code/purity"],
|
|
120
|
+
remediates=["test.failure", "test.missing"],
|
|
121
|
+
)
|
|
122
|
+
@atomic_action(
|
|
123
|
+
action_id="build.tests",
|
|
124
|
+
intent="Generate comprehensive tests for a source file via CoderAgent",
|
|
125
|
+
impact=ActionImpact.WRITE_CODE,
|
|
126
|
+
policies=["atomic_actions"],
|
|
127
|
+
)
|
|
128
|
+
# ID: 8f4a2b6c-d3e7-4019-a5b8-1c9f0e7d6a34
|
|
129
|
+
async def action_build_tests(
|
|
130
|
+
source_file: str,
|
|
131
|
+
core_context: CoreContext,
|
|
132
|
+
write: bool = False,
|
|
133
|
+
**kwargs,
|
|
134
|
+
) -> ActionResult:
|
|
135
|
+
"""
|
|
136
|
+
Generate a test file for source_file using CoderAgent.
|
|
137
|
+
|
|
138
|
+
1. Map source_file to test_file path (governed by .intent/)
|
|
139
|
+
2. Initialize CoderAgent (same as interactive_test workflow)
|
|
140
|
+
3. Call coder_agent.generate_or_repair(task, goal)
|
|
141
|
+
4. Run IntentGuard validation on generated code
|
|
142
|
+
5. If write=True: create the test file via action_create_file
|
|
143
|
+
6. Return ActionResult
|
|
144
|
+
|
|
145
|
+
Auto-heal (fix.imports, fix.headers, fix.format) is NOT invoked from
|
|
146
|
+
this AtomicAction. It runs as subsequent steps of flow.build_tests
|
|
147
|
+
after this action returns. Composing AtomicActions inside an
|
|
148
|
+
AtomicAction is a Flow concern (CORE-Flow.md §7).
|
|
149
|
+
"""
|
|
150
|
+
from body.atomic.executor import ActionExecutor
|
|
151
|
+
from body.atomic.file_ops import action_create_file
|
|
152
|
+
from body.governance.intent_guard import get_intent_guard
|
|
153
|
+
from body.services.service_registry import _ServiceLoader
|
|
154
|
+
from shared.infrastructure.intent.test_coverage_paths import (
|
|
155
|
+
source_to_test_path,
|
|
156
|
+
)
|
|
157
|
+
from shared.models.execution_models import ExecutionTask, TaskParams
|
|
158
|
+
|
|
159
|
+
start = time.time()
|
|
160
|
+
repo_root = core_context.git_service.repo_path
|
|
161
|
+
|
|
162
|
+
# 1. Map source_file to test_file path via governed helper.
|
|
163
|
+
# src/foo/bar.py → tests/foo/bar/test_generated.py
|
|
164
|
+
try:
|
|
165
|
+
test_file = source_to_test_path(source_file)
|
|
166
|
+
except ValueError as e:
|
|
167
|
+
return ActionResult(
|
|
168
|
+
action_id="build.tests",
|
|
169
|
+
ok=False,
|
|
170
|
+
data={"error": f"Invalid source path: {e}"},
|
|
171
|
+
duration_sec=time.time() - start,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
logger.info(
|
|
175
|
+
"build.tests: generating tests for %s → %s",
|
|
176
|
+
source_file,
|
|
177
|
+
test_file,
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# 2. Verify source file exists
|
|
181
|
+
source_path = repo_root / source_file
|
|
182
|
+
if not source_path.exists():
|
|
183
|
+
return ActionResult(
|
|
184
|
+
action_id="build.tests",
|
|
185
|
+
ok=False,
|
|
186
|
+
data={"error": f"Source file not found: {source_file}"},
|
|
187
|
+
duration_sec=time.time() - start,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# 3. Initialize CoderAgent (mirrors _initialize_services in workflow.py)
|
|
191
|
+
try:
|
|
192
|
+
cognitive_service = core_context.cognitive_service
|
|
193
|
+
if cognitive_service is None:
|
|
194
|
+
cognitive_service = await core_context.registry.get_cognitive_service()
|
|
195
|
+
|
|
196
|
+
auditor_context = core_context.auditor_context
|
|
197
|
+
if auditor_context is None:
|
|
198
|
+
auditor_context = await core_context.registry.get_auditor_context()
|
|
199
|
+
|
|
200
|
+
if not hasattr(core_context, "action_executor"):
|
|
201
|
+
core_context.action_executor = ActionExecutor(core_context)
|
|
202
|
+
executor = core_context.action_executor
|
|
203
|
+
|
|
204
|
+
PromptPipeline = _ServiceLoader.import_class(
|
|
205
|
+
"will.orchestration.prompt_pipeline.PromptPipeline"
|
|
206
|
+
)
|
|
207
|
+
prompt_pipeline = PromptPipeline(repo_root)
|
|
208
|
+
|
|
209
|
+
context_service = None
|
|
210
|
+
try:
|
|
211
|
+
context_service = core_context.context_service
|
|
212
|
+
except Exception as e:
|
|
213
|
+
logger.debug("ContextService not available via property: %s", e)
|
|
214
|
+
|
|
215
|
+
if context_service is None:
|
|
216
|
+
try:
|
|
217
|
+
from shared.infrastructure.context.service import ContextService
|
|
218
|
+
|
|
219
|
+
context_service = ContextService(
|
|
220
|
+
project_root=str(repo_root),
|
|
221
|
+
session_factory=core_context.registry.session,
|
|
222
|
+
qdrant_client=None,
|
|
223
|
+
cognitive_service=cognitive_service,
|
|
224
|
+
brain_services_provider=core_context.registry,
|
|
225
|
+
)
|
|
226
|
+
logger.info(
|
|
227
|
+
"build.tests: constructed ContextService via registry JIT fallback"
|
|
228
|
+
)
|
|
229
|
+
except Exception as e:
|
|
230
|
+
logger.warning(
|
|
231
|
+
"build.tests: failed to construct ContextService via registry: %s",
|
|
232
|
+
e,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
# ADR-025: read ArchitecturalContextBuilder via the same JIT-fallback
|
|
236
|
+
# shape used for context_service above. RuntimeError = factory not
|
|
237
|
+
# wired in the composition root; any other exception = factory ran
|
|
238
|
+
# but its dependencies (cognitive_service / qdrant_service on
|
|
239
|
+
# CoreContext) were not yet populated. Either way we proceed with
|
|
240
|
+
# context_builder=None — CodeGenerator falls back to Priority 2/3.
|
|
241
|
+
context_builder = None
|
|
242
|
+
try:
|
|
243
|
+
context_builder = core_context.context_builder
|
|
244
|
+
except RuntimeError as e:
|
|
245
|
+
logger.warning("build.tests: ContextBuilder factory not configured: %s", e)
|
|
246
|
+
except Exception as e:
|
|
247
|
+
logger.warning("build.tests: failed to construct ContextBuilder: %s", e)
|
|
248
|
+
|
|
249
|
+
CoderAgent = _ServiceLoader.import_class("will.agents.coder_agent.CoderAgent")
|
|
250
|
+
coder_agent = CoderAgent(
|
|
251
|
+
cognitive_service=cognitive_service,
|
|
252
|
+
executor=executor,
|
|
253
|
+
prompt_pipeline=prompt_pipeline,
|
|
254
|
+
auditor_context=auditor_context,
|
|
255
|
+
repo_root=repo_root,
|
|
256
|
+
context_service=context_service,
|
|
257
|
+
context_builder=context_builder,
|
|
258
|
+
)
|
|
259
|
+
except Exception as e:
|
|
260
|
+
logger.error("build.tests: failed to initialize CoderAgent: %s", e)
|
|
261
|
+
return ActionResult(
|
|
262
|
+
action_id="build.tests",
|
|
263
|
+
ok=False,
|
|
264
|
+
data={"error": f"CoderAgent initialization failed: {e}"},
|
|
265
|
+
duration_sec=time.time() - start,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
# 4. Construct ExecutionTask and generate code.
|
|
269
|
+
# CoderAgent -> CodeGenerator._build_context_package reads
|
|
270
|
+
# task.params.file_path as target_file for ContextService.
|
|
271
|
+
# Pointing file_path at the SOURCE file (not the not-yet-existing
|
|
272
|
+
# test file) is what gives the LLM real symbols to ground tests
|
|
273
|
+
# in. The test file path is communicated via the goal string and
|
|
274
|
+
# is still the write destination in step 6 below.
|
|
275
|
+
task = ExecutionTask(
|
|
276
|
+
step=f"Generate comprehensive pytest tests for module {source_file}",
|
|
277
|
+
action="generate",
|
|
278
|
+
params=TaskParams(
|
|
279
|
+
file_path=source_file,
|
|
280
|
+
symbol_name=None,
|
|
281
|
+
),
|
|
282
|
+
task_type="test_generation",
|
|
283
|
+
)
|
|
284
|
+
goal = (
|
|
285
|
+
f"Generate a comprehensive pytest test module for the source "
|
|
286
|
+
f"file {source_file}. The generated test module will be "
|
|
287
|
+
f"written to {test_file}. Cover the public symbols of the "
|
|
288
|
+
f"source module. Use only imports, classes, and functions "
|
|
289
|
+
f"that exist in the provided context evidence — do not "
|
|
290
|
+
f"invent symbols."
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
try:
|
|
294
|
+
generated_code = await coder_agent.generate_or_repair(task, goal)
|
|
295
|
+
except Exception as e:
|
|
296
|
+
logger.error("build.tests: code generation failed: %s", e)
|
|
297
|
+
return ActionResult(
|
|
298
|
+
action_id="build.tests",
|
|
299
|
+
ok=False,
|
|
300
|
+
data={"error": f"Code generation failed: {e}", "test_file": test_file},
|
|
301
|
+
duration_sec=time.time() - start,
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
if not generated_code or not generated_code.strip():
|
|
305
|
+
return ActionResult(
|
|
306
|
+
action_id="build.tests",
|
|
307
|
+
ok=False,
|
|
308
|
+
data={"error": "CoderAgent returned empty code", "test_file": test_file},
|
|
309
|
+
duration_sec=time.time() - start,
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
# 5. IntentGuard validation — fail loud (issue #210).
|
|
313
|
+
intent_guard = get_intent_guard(repo_path=repo_root)
|
|
314
|
+
validation_failure = _run_intent_guard_check(
|
|
315
|
+
intent_guard, generated_code, test_file, start
|
|
316
|
+
)
|
|
317
|
+
if validation_failure is not None:
|
|
318
|
+
return validation_failure
|
|
319
|
+
|
|
320
|
+
# 6. Write file if requested
|
|
321
|
+
if write:
|
|
322
|
+
try:
|
|
323
|
+
create_result = await action_create_file(
|
|
324
|
+
test_file, generated_code, core_context, write=True
|
|
325
|
+
)
|
|
326
|
+
if not create_result.ok:
|
|
327
|
+
return ActionResult(
|
|
328
|
+
action_id="build.tests",
|
|
329
|
+
ok=False,
|
|
330
|
+
data={
|
|
331
|
+
"error": "Failed to write test file",
|
|
332
|
+
"details": create_result.data,
|
|
333
|
+
"test_file": test_file,
|
|
334
|
+
},
|
|
335
|
+
duration_sec=time.time() - start,
|
|
336
|
+
)
|
|
337
|
+
except Exception as e:
|
|
338
|
+
return ActionResult(
|
|
339
|
+
action_id="build.tests",
|
|
340
|
+
ok=False,
|
|
341
|
+
data={"error": f"File write failed: {e}", "test_file": test_file},
|
|
342
|
+
duration_sec=time.time() - start,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
return ActionResult(
|
|
346
|
+
action_id="build.tests",
|
|
347
|
+
ok=True,
|
|
348
|
+
data={
|
|
349
|
+
"source_file": source_file,
|
|
350
|
+
"test_file": test_file,
|
|
351
|
+
"write": write,
|
|
352
|
+
},
|
|
353
|
+
duration_sec=time.time() - start,
|
|
354
|
+
)
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# src/body/atomic/check_actions.py
|
|
2
|
+
"""
|
|
3
|
+
Atomic Check Actions - Constitutional Validation
|
|
4
|
+
|
|
5
|
+
Read-only verification actions that report violations without mutating state.
|
|
6
|
+
Each action checks ONE constitutional concern and returns structured findings.
|
|
7
|
+
|
|
8
|
+
CONSTITUTIONAL ALIGNMENT:
|
|
9
|
+
- Category: CHECK (read-only, no side effects)
|
|
10
|
+
- Impact: READ_ONLY (no writes permitted)
|
|
11
|
+
- Policy: rules/code/imports
|
|
12
|
+
|
|
13
|
+
Enforces:
|
|
14
|
+
- code.imports.must_resolve
|
|
15
|
+
- code.imports.no_stale_namespace
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import asyncio
|
|
21
|
+
import json
|
|
22
|
+
import subprocess
|
|
23
|
+
import time
|
|
24
|
+
from typing import TYPE_CHECKING
|
|
25
|
+
|
|
26
|
+
from body.atomic.registry import ActionCategory, register_action
|
|
27
|
+
from shared.action_types import ActionImpact, ActionResult
|
|
28
|
+
from shared.atomic_action import atomic_action
|
|
29
|
+
from shared.logger import getLogger
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
logger = getLogger(__name__)
|
|
36
|
+
|
|
37
|
+
_TARGET = "src/"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@register_action(
|
|
41
|
+
action_id="check.imports",
|
|
42
|
+
description="Verify all import statements resolve to existing modules",
|
|
43
|
+
category=ActionCategory.CHECK,
|
|
44
|
+
policies=["rules/code/imports"],
|
|
45
|
+
)
|
|
46
|
+
@atomic_action(
|
|
47
|
+
action_id="check.imports",
|
|
48
|
+
intent="Detect unresolvable and stale import references across src/",
|
|
49
|
+
impact=ActionImpact.READ_ONLY,
|
|
50
|
+
policies=["atomic_actions"],
|
|
51
|
+
)
|
|
52
|
+
# ID: dd985101-edb8-4256-ad7f-c6088b68183b
|
|
53
|
+
async def action_check_imports(*, write: bool = False, **kwargs) -> ActionResult:
|
|
54
|
+
"""
|
|
55
|
+
Verify all import statements in src/ resolve to existing modules.
|
|
56
|
+
|
|
57
|
+
Runs ruff with rules:
|
|
58
|
+
- F821: Undefined name (catches references to moved/deleted symbols)
|
|
59
|
+
- F401: Imported but unused (catches stale imports left after refactoring)
|
|
60
|
+
|
|
61
|
+
Returns structured violations in ActionResult.data["violations"].
|
|
62
|
+
ok=True means zero violations found.
|
|
63
|
+
ok=False means violations exist — callers treat this as a blocking signal.
|
|
64
|
+
"""
|
|
65
|
+
start = time.time()
|
|
66
|
+
|
|
67
|
+
cmd = [
|
|
68
|
+
"ruff",
|
|
69
|
+
"check",
|
|
70
|
+
_TARGET,
|
|
71
|
+
"--select",
|
|
72
|
+
"F821,F401",
|
|
73
|
+
"--output-format",
|
|
74
|
+
"json",
|
|
75
|
+
"--exit-zero",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
result = await asyncio.to_thread(
|
|
80
|
+
subprocess.run,
|
|
81
|
+
cmd,
|
|
82
|
+
capture_output=True,
|
|
83
|
+
text=True,
|
|
84
|
+
check=False,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
violations: list[dict] = []
|
|
88
|
+
|
|
89
|
+
if result.stdout.strip():
|
|
90
|
+
raw = json.loads(result.stdout)
|
|
91
|
+
for item in raw:
|
|
92
|
+
violations.append(
|
|
93
|
+
{
|
|
94
|
+
"file": item.get("filename", ""),
|
|
95
|
+
"line": item.get("location", {}).get("row", 0),
|
|
96
|
+
"rule": item.get("code", ""),
|
|
97
|
+
"message": item.get("message", ""),
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
ok = len(violations) == 0
|
|
102
|
+
|
|
103
|
+
if ok:
|
|
104
|
+
logger.info("✅ check.imports: all imports resolve cleanly")
|
|
105
|
+
else:
|
|
106
|
+
logger.warning(
|
|
107
|
+
"❌ check.imports: %d unresolvable import(s) found", len(violations)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return ActionResult(
|
|
111
|
+
action_id="check.imports",
|
|
112
|
+
ok=ok,
|
|
113
|
+
data={
|
|
114
|
+
"violations": violations,
|
|
115
|
+
"violation_count": len(violations),
|
|
116
|
+
"target": _TARGET,
|
|
117
|
+
"rules_checked": ["F821", "F401"],
|
|
118
|
+
},
|
|
119
|
+
duration_sec=time.time() - start,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
except FileNotFoundError:
|
|
123
|
+
return ActionResult(
|
|
124
|
+
action_id="check.imports",
|
|
125
|
+
ok=False,
|
|
126
|
+
data={"error": "ruff not found in PATH — cannot check imports"},
|
|
127
|
+
duration_sec=time.time() - start,
|
|
128
|
+
)
|
|
129
|
+
except json.JSONDecodeError as e:
|
|
130
|
+
return ActionResult(
|
|
131
|
+
action_id="check.imports",
|
|
132
|
+
ok=False,
|
|
133
|
+
data={"error": f"Failed to parse ruff output: {e}"},
|
|
134
|
+
duration_sec=time.time() - start,
|
|
135
|
+
)
|
|
136
|
+
except Exception as e:
|
|
137
|
+
return ActionResult(
|
|
138
|
+
action_id="check.imports",
|
|
139
|
+
ok=False,
|
|
140
|
+
data={"error": str(e)},
|
|
141
|
+
duration_sec=time.time() - start,
|
|
142
|
+
)
|
body/atomic/crate_ops.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# src/body/atomic/crate_ops.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Atomic Crate Operations - Packaging logic for autonomous transactions.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import time
|
|
10
|
+
from typing import TYPE_CHECKING
|
|
11
|
+
|
|
12
|
+
from body.atomic.registry import ActionCategory, register_action
|
|
13
|
+
from shared.action_types import ActionImpact, ActionResult
|
|
14
|
+
from shared.atomic_action import atomic_action
|
|
15
|
+
from shared.logger import getLogger
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from shared.context import CoreContext
|
|
20
|
+
|
|
21
|
+
logger = getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@register_action(
|
|
25
|
+
action_id="crate.create",
|
|
26
|
+
description="Package generated code into an Intent Crate for canary validation",
|
|
27
|
+
category=ActionCategory.BUILD,
|
|
28
|
+
policies=["rules/architecture/atomic_actions"],
|
|
29
|
+
)
|
|
30
|
+
@atomic_action(
|
|
31
|
+
action_id="crate.create",
|
|
32
|
+
intent="Atomic action for action_create_crate",
|
|
33
|
+
impact=ActionImpact.WRITE_CODE,
|
|
34
|
+
policies=["atomic_actions"],
|
|
35
|
+
)
|
|
36
|
+
# ID: 51a165f4-e0fc-405f-bee9-19c888f6c046
|
|
37
|
+
async def action_create_crate(
|
|
38
|
+
intent: str, payload_files: dict[str, str], core_context: CoreContext, **kwargs
|
|
39
|
+
) -> ActionResult:
|
|
40
|
+
"""Atomic wrapper for the CrateCreationService."""
|
|
41
|
+
start = time.time()
|
|
42
|
+
try:
|
|
43
|
+
from body.services.crate_creation_service import CrateCreationService
|
|
44
|
+
|
|
45
|
+
service = CrateCreationService(core_context)
|
|
46
|
+
# Call the actual packaging logic
|
|
47
|
+
result = await service.create_intent_crate(
|
|
48
|
+
intent=intent, payload_files=payload_files
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
return result # This is already an ActionResult
|
|
52
|
+
|
|
53
|
+
except Exception as e:
|
|
54
|
+
return ActionResult(
|
|
55
|
+
action_id="crate.create",
|
|
56
|
+
ok=False,
|
|
57
|
+
data={"error": str(e)},
|
|
58
|
+
duration_sec=time.time() - start,
|
|
59
|
+
)
|