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,99 @@
|
|
|
1
|
+
# src/mind/logic/engines/workflow_gate/checks/ruff_format.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Ruff format workflow check.
|
|
5
|
+
|
|
6
|
+
Verifies that source files conform to ruff's formatting standard.
|
|
7
|
+
Enforces: code.style.ruff_format
|
|
8
|
+
|
|
9
|
+
Runs `ruff format --check` asynchronously and reports files that
|
|
10
|
+
would be reformatted as violations.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import asyncio
|
|
16
|
+
import re
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from mind.logic.engines.workflow_gate.base_check import WorkflowCheck
|
|
21
|
+
from shared.infrastructure.intent.operational_config import load_operational_config
|
|
22
|
+
from shared.logger import getLogger
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
logger = getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
_CFG = load_operational_config().workflow_gate
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# ID: 58a4df52-9edf-475e-b196-781cabfcfbe5
|
|
31
|
+
class RuffFormatCheck(WorkflowCheck):
|
|
32
|
+
"""
|
|
33
|
+
Verifies source files conform to ruff formatting.
|
|
34
|
+
|
|
35
|
+
Runs `ruff format --check` asynchronously and reports files that
|
|
36
|
+
would be reformatted. Files matching the exclude pattern (e.g.
|
|
37
|
+
scripts/ or dev-scripts/) are skipped.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
check_type = "ruff_format_check"
|
|
41
|
+
|
|
42
|
+
# ID: a3ceba34-e217-48ec-9a03-6d488ebaba77
|
|
43
|
+
async def verify(self, file_path: Path | None, params: dict[str, Any]) -> list[str]:
|
|
44
|
+
"""
|
|
45
|
+
Run ruff format --check asynchronously.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
file_path: Optional specific file to check (None = checks src/)
|
|
49
|
+
params: Check parameters; supports 'exclude_pattern' regex
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
List of violation messages (empty = all files formatted correctly)
|
|
53
|
+
"""
|
|
54
|
+
target = str(file_path) if file_path else "src"
|
|
55
|
+
exclude_pattern = params.get("exclude_pattern", r"^(scripts|dev-scripts)/")
|
|
56
|
+
violations: list[str] = []
|
|
57
|
+
|
|
58
|
+
if file_path and re.search(exclude_pattern, str(file_path)):
|
|
59
|
+
return violations
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
process = await asyncio.create_subprocess_exec(
|
|
63
|
+
"ruff",
|
|
64
|
+
"format",
|
|
65
|
+
"--check",
|
|
66
|
+
target,
|
|
67
|
+
stdout=asyncio.subprocess.PIPE,
|
|
68
|
+
stderr=asyncio.subprocess.PIPE,
|
|
69
|
+
)
|
|
70
|
+
stdout, stderr = await asyncio.wait_for(
|
|
71
|
+
process.communicate(), timeout=_CFG.ruff_format_timeout_sec
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
if process.returncode != 0:
|
|
75
|
+
output = stdout.decode().strip()
|
|
76
|
+
if output:
|
|
77
|
+
for line in output.splitlines():
|
|
78
|
+
line = line.strip()
|
|
79
|
+
if not line:
|
|
80
|
+
continue
|
|
81
|
+
# ruff format --check prefixes with "Would reformat: "
|
|
82
|
+
if line.startswith("Would reformat: "):
|
|
83
|
+
cleaned = line.removeprefix("Would reformat: ").strip()
|
|
84
|
+
if not re.search(exclude_pattern, cleaned):
|
|
85
|
+
violations.append(cleaned)
|
|
86
|
+
else:
|
|
87
|
+
err = stderr.decode().strip()
|
|
88
|
+
violations.append(f"Ruff format check failed: {err}")
|
|
89
|
+
|
|
90
|
+
except TimeoutError:
|
|
91
|
+
violations.append(
|
|
92
|
+
f"Ruff format check timed out (>{_CFG.ruff_format_timeout_sec:g}s)"
|
|
93
|
+
)
|
|
94
|
+
except FileNotFoundError:
|
|
95
|
+
violations.append("ruff not found in PATH — cannot check formatting")
|
|
96
|
+
except Exception as e:
|
|
97
|
+
violations.append(f"Ruff format check error: {e}")
|
|
98
|
+
|
|
99
|
+
return violations
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# src/mind/logic/engines/workflow_gate/checks/tests.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Test verification workflow check.
|
|
5
|
+
|
|
6
|
+
Verifies that the most recent test suite execution passed.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
from sqlalchemy import text
|
|
15
|
+
|
|
16
|
+
from mind.logic.engines.workflow_gate.base_check import WorkflowCheck
|
|
17
|
+
from shared.logger import getLogger
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
logger = getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ID: 33057f65-4f93-452d-a3cd-2a073147dae8
|
|
24
|
+
class TestVerificationCheck(WorkflowCheck):
|
|
25
|
+
"""
|
|
26
|
+
Checks if the most recent test workflow passed by querying the Action Ledger.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
check_type = "test_verification"
|
|
30
|
+
|
|
31
|
+
# ID: b17085a1-d0f0-4a10-9e2a-801372462e81
|
|
32
|
+
async def verify(self, file_path: Path | None, params: dict[str, Any]) -> list[str]:
|
|
33
|
+
"""
|
|
34
|
+
Verify tests passed using the database session provided in params.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
file_path: Unused (context-level check)
|
|
38
|
+
params: Must contain '_context' with an active 'db_session'
|
|
39
|
+
"""
|
|
40
|
+
context = params.get("_context")
|
|
41
|
+
session = getattr(context, "db_session", None)
|
|
42
|
+
|
|
43
|
+
if not session:
|
|
44
|
+
logger.warning(
|
|
45
|
+
"TestVerificationCheck: Database session unavailable in context."
|
|
46
|
+
)
|
|
47
|
+
# We report a sensory gap if the execution environment didn't provide a session.
|
|
48
|
+
return ["System Sensation Error: Action Ledger (DB) is unreachable."]
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
# 1. Query the Mind's memory (Postgres SSOT) for the last test result
|
|
52
|
+
result = await session.execute(
|
|
53
|
+
text(
|
|
54
|
+
"""
|
|
55
|
+
SELECT ok, error_message
|
|
56
|
+
FROM core.action_results
|
|
57
|
+
WHERE action_type = 'test_execution'
|
|
58
|
+
ORDER BY created_at DESC
|
|
59
|
+
LIMIT 1
|
|
60
|
+
"""
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
row = result.fetchone()
|
|
64
|
+
|
|
65
|
+
# 2. Logic Evaluation
|
|
66
|
+
if not row:
|
|
67
|
+
return [
|
|
68
|
+
"No test execution history found. The test suite MUST be "
|
|
69
|
+
"executed before this workflow can proceed."
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
if not row[0]: # row['ok'] == False
|
|
73
|
+
error = row[1] or "Unknown test failure"
|
|
74
|
+
return [f"Required test suite failed: {error}"]
|
|
75
|
+
|
|
76
|
+
# SUCCESS: No violations found
|
|
77
|
+
return []
|
|
78
|
+
|
|
79
|
+
except Exception as e:
|
|
80
|
+
logger.error("Failed to query test results: %s", e)
|
|
81
|
+
return [f"Database Query Error: {e}"]
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# src/mind/logic/engines/workflow_gate/engine.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Workflow Gate Engine - Context-Aware Process Auditor.
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL ALIGNMENT:
|
|
7
|
+
- Aligned with 'async.no_manual_loop_run'.
|
|
8
|
+
- Promoted to natively async to eliminate thread-based loop hijacking.
|
|
9
|
+
- Provides non-blocking verification for system-wide processes (Tests, Coverage).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import TYPE_CHECKING, Any
|
|
16
|
+
|
|
17
|
+
from mind.logic.engines.base import BaseEngine, EngineResult
|
|
18
|
+
from mind.logic.engines.workflow_gate.base_check import WorkflowCheck
|
|
19
|
+
from mind.logic.engines.workflow_gate.checks import (
|
|
20
|
+
AlignmentVerificationCheck,
|
|
21
|
+
AuditHistoryCheck,
|
|
22
|
+
CanaryDeploymentCheck,
|
|
23
|
+
CoverageMinimumCheck,
|
|
24
|
+
DeadCodeCheck,
|
|
25
|
+
ImportResolutionCheck,
|
|
26
|
+
LinterComplianceCheck,
|
|
27
|
+
RuffFormatCheck,
|
|
28
|
+
TestVerificationCheck,
|
|
29
|
+
)
|
|
30
|
+
from mind.logic.engines.workflow_gate.checks.quality import QualityGateCheck
|
|
31
|
+
from shared.logger import getLogger
|
|
32
|
+
from shared.models import AuditFinding, AuditSeverity
|
|
33
|
+
from shared.path_resolver import PathResolver
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if TYPE_CHECKING:
|
|
37
|
+
from mind.governance.audit_context import AuditorContext
|
|
38
|
+
|
|
39
|
+
logger = getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# ID: 170810a6-c446-41de-acf4-29defa345522
|
|
43
|
+
class WorkflowGateEngine(BaseEngine):
|
|
44
|
+
"""
|
|
45
|
+
Process-Aware Governance Auditor.
|
|
46
|
+
|
|
47
|
+
Orchestrates specialized workflow checks (bits) to verify that
|
|
48
|
+
operational requirements (like test passing or coverage) are met.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
engine_id = "workflow_gate"
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
# ID: 2b8e4f3d-1a9c-4b65-9d7e-3f8a1c5e2b04
|
|
55
|
+
def is_context_level_for(cls, check_type: str | None) -> bool:
|
|
56
|
+
"""
|
|
57
|
+
ADR-076 D1/D2: every workflow_gate check_type is context-level.
|
|
58
|
+
|
|
59
|
+
All twelve checks (tests, coverage, canary, alignment, dead code,
|
|
60
|
+
audit history, linter, imports, ruff format, mypy, security,
|
|
61
|
+
pytest collection) walk system state rather than a single file_path.
|
|
62
|
+
"""
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
def __init__(self, path_resolver: PathResolver) -> None:
|
|
66
|
+
"""Initialize the engine and register its specialized check logic."""
|
|
67
|
+
check_instances: list[WorkflowCheck] = [
|
|
68
|
+
TestVerificationCheck(),
|
|
69
|
+
CoverageMinimumCheck(path_resolver),
|
|
70
|
+
CanaryDeploymentCheck(),
|
|
71
|
+
AlignmentVerificationCheck(path_resolver),
|
|
72
|
+
DeadCodeCheck(path_resolver),
|
|
73
|
+
AuditHistoryCheck(),
|
|
74
|
+
LinterComplianceCheck(),
|
|
75
|
+
ImportResolutionCheck(),
|
|
76
|
+
RuffFormatCheck(),
|
|
77
|
+
QualityGateCheck(
|
|
78
|
+
path_resolver,
|
|
79
|
+
"mypy_check",
|
|
80
|
+
["mypy", "src/", "--ignore-missing-imports"],
|
|
81
|
+
),
|
|
82
|
+
QualityGateCheck(path_resolver, "security_check", ["pip-audit"]),
|
|
83
|
+
QualityGateCheck(
|
|
84
|
+
path_resolver,
|
|
85
|
+
"pytest_check",
|
|
86
|
+
["pytest", "tests/", "-q", "--co"],
|
|
87
|
+
), # Collection only for speed
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
self._checks: dict[str, WorkflowCheck] = {
|
|
91
|
+
check.check_type: check for check in check_instances
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
logger.debug(
|
|
95
|
+
"WorkflowGateEngine initialized with %d check types: %s",
|
|
96
|
+
len(self._checks),
|
|
97
|
+
", ".join(sorted(self._checks.keys())),
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# ID: 9b12e3f4-c5d6-7e8f-9a0b-1c2d3e4f5a6b
|
|
101
|
+
async def verify_context(
|
|
102
|
+
self, context: AuditorContext, params: dict[str, Any]
|
|
103
|
+
) -> list[AuditFinding]:
|
|
104
|
+
"""
|
|
105
|
+
Executes a context-level check against system state.
|
|
106
|
+
"""
|
|
107
|
+
check_type = params.get("check_type")
|
|
108
|
+
if not check_type:
|
|
109
|
+
return [
|
|
110
|
+
AuditFinding(
|
|
111
|
+
check_id="workflow_gate.error",
|
|
112
|
+
severity=AuditSeverity.BLOCK,
|
|
113
|
+
message="Missing 'check_type' parameter in constitutional rule.",
|
|
114
|
+
file_path="none",
|
|
115
|
+
)
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
check_logic = self._checks.get(check_type)
|
|
119
|
+
if not check_logic:
|
|
120
|
+
return [
|
|
121
|
+
AuditFinding(
|
|
122
|
+
check_id="workflow_gate.error",
|
|
123
|
+
severity=AuditSeverity.BLOCK,
|
|
124
|
+
message=f"Logic Error: Engine does not support check_type '{check_type}'",
|
|
125
|
+
file_path="none",
|
|
126
|
+
)
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
try:
|
|
130
|
+
# Native await - no loop hijacking required
|
|
131
|
+
violations = await check_logic.verify(None, params)
|
|
132
|
+
|
|
133
|
+
findings = []
|
|
134
|
+
for v in violations:
|
|
135
|
+
if v.endswith(".py"):
|
|
136
|
+
findings.append(
|
|
137
|
+
AuditFinding(
|
|
138
|
+
check_id=f"workflow.{check_type}",
|
|
139
|
+
severity=AuditSeverity.BLOCK,
|
|
140
|
+
message=f"File would be reformatted: {v}",
|
|
141
|
+
file_path=v,
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
findings.append(
|
|
146
|
+
AuditFinding(
|
|
147
|
+
check_id=f"workflow.{check_type}",
|
|
148
|
+
severity=AuditSeverity.BLOCK,
|
|
149
|
+
message=v,
|
|
150
|
+
file_path="System",
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
return findings
|
|
154
|
+
except Exception as e:
|
|
155
|
+
logger.error("Workflow logic '%s' failed: %s", check_type, e, exc_info=True)
|
|
156
|
+
return [
|
|
157
|
+
AuditFinding(
|
|
158
|
+
check_id=f"workflow.{check_type}.error",
|
|
159
|
+
severity=AuditSeverity.BLOCK,
|
|
160
|
+
message=f"Internal Engine Error during {check_type} verification: {e}",
|
|
161
|
+
file_path="none",
|
|
162
|
+
)
|
|
163
|
+
]
|
|
164
|
+
|
|
165
|
+
# ID: 449a88ef-71ff-4f63-b692-4cffdc6483ce
|
|
166
|
+
async def verify(self, file_path: Path, params: dict[str, Any]) -> EngineResult:
|
|
167
|
+
"""
|
|
168
|
+
Natively async verification.
|
|
169
|
+
|
|
170
|
+
REFACTORED: Removed legacy thread-spawning and run_until_complete logic.
|
|
171
|
+
This now properly participates in the system's async runtime.
|
|
172
|
+
"""
|
|
173
|
+
return await self._verify_async(file_path, params)
|
|
174
|
+
|
|
175
|
+
async def _verify_async(
|
|
176
|
+
self, file_path: Path | None, params: dict[str, Any]
|
|
177
|
+
) -> EngineResult:
|
|
178
|
+
"""Internal async logic shared by verify and verify_context."""
|
|
179
|
+
check_type = params.get("check_type")
|
|
180
|
+
if not check_type:
|
|
181
|
+
return EngineResult(
|
|
182
|
+
False, "Missing check_type", ["No check_type provided"], self.engine_id
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
check = self._checks.get(check_type)
|
|
186
|
+
if not check:
|
|
187
|
+
return EngineResult(
|
|
188
|
+
False,
|
|
189
|
+
"Invalid check_type",
|
|
190
|
+
[f"Unsupported: {check_type}"],
|
|
191
|
+
self.engine_id,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
try:
|
|
195
|
+
violations = await check.verify(file_path, params)
|
|
196
|
+
return EngineResult(
|
|
197
|
+
ok=(not violations),
|
|
198
|
+
message=(
|
|
199
|
+
"Workflow compliant"
|
|
200
|
+
if not violations
|
|
201
|
+
else "Workflow violations found"
|
|
202
|
+
),
|
|
203
|
+
violations=violations,
|
|
204
|
+
engine_id=self.engine_id,
|
|
205
|
+
)
|
|
206
|
+
except Exception as e:
|
|
207
|
+
return EngineResult(False, f"Engine Error: {e}", [str(e)], self.engine_id)
|
shared/__init__.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# src/shared/__init__.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
`shared` — Cross-cutting, foundational building blocks for CORE.
|
|
5
|
+
|
|
6
|
+
This namespace provides *stable, low-level primitives* used across the
|
|
7
|
+
entire system. Nothing in here depends on features/, agents/, or domain-
|
|
8
|
+
specific logic.
|
|
9
|
+
|
|
10
|
+
Sub-packages include:
|
|
11
|
+
|
|
12
|
+
- shared.universal
|
|
13
|
+
Canonical micro-helpers for reuse-first development.
|
|
14
|
+
|
|
15
|
+
- shared.utils
|
|
16
|
+
Implementation modules providing reusable tools, utilities, and
|
|
17
|
+
low-level helpers. `shared.universal` re-exports a curated,
|
|
18
|
+
stable surface from here.
|
|
19
|
+
|
|
20
|
+
- shared.models
|
|
21
|
+
Simple, shared model definitions used by multiple subsystems.
|
|
22
|
+
|
|
23
|
+
Dependency rule:
|
|
24
|
+
shared/ MAY depend only on the Python standard library and other
|
|
25
|
+
modules inside shared/. Nothing outside shared/ may depend on
|
|
26
|
+
feature-specific logic.
|
|
27
|
+
|
|
28
|
+
This guarantees a stable, well-defined reuse surface for CoderAgent and
|
|
29
|
+
ContextPackage reuse analysis.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
shared/action_logger.py
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# src/shared/action_logger.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Provides a dedicated service for writing structured, auditable events to the system's action log.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from datetime import UTC, datetime
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from shared.config import settings
|
|
14
|
+
from shared.logger import getLogger
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# ID: 72f18eea-652f-4098-8ddd-211a346c95fd
|
|
21
|
+
class ActionLogger:
|
|
22
|
+
"""Handles writing structured JSON events to the CORE_ACTION_LOG_PATH."""
|
|
23
|
+
|
|
24
|
+
def __init__(self):
|
|
25
|
+
"""Initializes the logger, ensuring the log file's parent directory exists."""
|
|
26
|
+
try:
|
|
27
|
+
log_path_str = settings.CORE_ACTION_LOG_PATH
|
|
28
|
+
if not log_path_str:
|
|
29
|
+
raise ValueError("CORE_ACTION_LOG_PATH is not set in the environment.")
|
|
30
|
+
self.log_path = settings.REPO_PATH / log_path_str
|
|
31
|
+
self.log_path.parent.mkdir(parents=True, exist_ok=True)
|
|
32
|
+
except (ValueError, AttributeError) as e:
|
|
33
|
+
logger.error(
|
|
34
|
+
"ActionLogger failed to initialize: %s. Logging will be disabled.", e
|
|
35
|
+
)
|
|
36
|
+
self.log_path = None
|
|
37
|
+
|
|
38
|
+
# ID: 45f05bd1-dc47-4dfc-9117-709dff10741e
|
|
39
|
+
def log_event(self, event_type: str, details: dict[str, Any]):
|
|
40
|
+
"""
|
|
41
|
+
Writes a single, timestamped event to the action log file.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
event_type: A dot-notation string identifying the event (e.g., 'crate.processing.started').
|
|
45
|
+
details: A dictionary of context-specific information about the event.
|
|
46
|
+
"""
|
|
47
|
+
if not self.log_path:
|
|
48
|
+
return
|
|
49
|
+
log_entry = {
|
|
50
|
+
"timestamp_utc": datetime.now(UTC).isoformat(),
|
|
51
|
+
"event_type": event_type,
|
|
52
|
+
"details": details,
|
|
53
|
+
}
|
|
54
|
+
try:
|
|
55
|
+
with self.log_path.open("a", encoding="utf-8") as f:
|
|
56
|
+
f.write(json.dumps(log_entry) + "\n")
|
|
57
|
+
except Exception as e:
|
|
58
|
+
logger.error("Failed to write to action log at {self.log_path}: %s", e)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
action_logger = ActionLogger()
|
shared/action_types.py
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# src/shared/action_types.py
|
|
2
|
+
"""
|
|
3
|
+
Universal action result types for CORE's atomic action framework.
|
|
4
|
+
|
|
5
|
+
This module defines the foundational types that unify all operations in CORE,
|
|
6
|
+
replacing the separate CommandResult and AuditCheckResult with a single,
|
|
7
|
+
universal contract that enables constitutional governance across all domains.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Note: load_operational_config() is imported lazily inside __post_init__ to
|
|
19
|
+
# break a circular dependency: operational_config → shared.logger →
|
|
20
|
+
# shared.action_types → operational_config. Cost is negligible because the
|
|
21
|
+
# loader path memoises through IntentRepository.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# ID: 29ed0df5-f34f-4af8-81f1-49207bd75e6e
|
|
25
|
+
class ActionImpact(Enum):
|
|
26
|
+
"""
|
|
27
|
+
Classification of an action's impact on system state.
|
|
28
|
+
|
|
29
|
+
This helps the constitutional framework understand what kind of changes
|
|
30
|
+
an action will make, enabling appropriate validation and governance.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
READ_ONLY = "read-only"
|
|
34
|
+
"""Action only reads data, makes no changes"""
|
|
35
|
+
|
|
36
|
+
WRITE_METADATA = "write-metadata"
|
|
37
|
+
"""Action writes metadata (IDs, tags, comments) but not functional code"""
|
|
38
|
+
|
|
39
|
+
WRITE_CODE = "write-code"
|
|
40
|
+
"""Action writes or modifies functional code"""
|
|
41
|
+
|
|
42
|
+
WRITE_DATA = "write-data"
|
|
43
|
+
"""Action writes to databases, files, or external systems"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass
|
|
47
|
+
# ID: 9c64e67a-8078-4c5b-b8c3-d9d0735fd883
|
|
48
|
+
class ActionResult:
|
|
49
|
+
"""
|
|
50
|
+
Universal result contract for all atomic actions in CORE.
|
|
51
|
+
|
|
52
|
+
This replaces both CommandResult (for commands) and AuditCheckResult (for checks)
|
|
53
|
+
with a single abstraction that enables:
|
|
54
|
+
- Universal governance (same validation for all actions)
|
|
55
|
+
- Composable workflows (actions return compatible results)
|
|
56
|
+
- Constitutional compliance (structured data for policy enforcement)
|
|
57
|
+
- Machine-readable outcomes (enables autonomous decision-making)
|
|
58
|
+
|
|
59
|
+
Every operation in CORE—whether checking code, generating documentation,
|
|
60
|
+
or building systems—returns an ActionResult.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
action_id: str
|
|
64
|
+
"""
|
|
65
|
+
Unique identifier for this action (e.g., 'fix.ids', 'check.imports').
|
|
66
|
+
|
|
67
|
+
Convention: Use dot notation with category prefix:
|
|
68
|
+
- fix.*: Code fixing actions
|
|
69
|
+
- check.*: Validation actions
|
|
70
|
+
- generate.*: Code generation actions
|
|
71
|
+
- sync.*: Data synchronization actions
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
ok: bool
|
|
75
|
+
"""
|
|
76
|
+
Binary success indicator.
|
|
77
|
+
|
|
78
|
+
True: Action completed successfully
|
|
79
|
+
False: Action failed or found violations
|
|
80
|
+
|
|
81
|
+
For checks: False means violations found
|
|
82
|
+
For fixes: False means couldn't complete the fix
|
|
83
|
+
For generation: False means couldn't generate valid output
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
data: dict[str, Any]
|
|
87
|
+
"""
|
|
88
|
+
Action-specific structured results.
|
|
89
|
+
|
|
90
|
+
This is the flexible payload where each action type can store its
|
|
91
|
+
specific outcomes. Common patterns:
|
|
92
|
+
|
|
93
|
+
For checks:
|
|
94
|
+
{"violations_count": int, "violations": list[dict], "files_scanned": int}
|
|
95
|
+
|
|
96
|
+
For fixes:
|
|
97
|
+
{"items_fixed": int, "items_failed": int, "dry_run": bool}
|
|
98
|
+
|
|
99
|
+
For generation:
|
|
100
|
+
{"files_created": list[str], "lines_of_code": int}
|
|
101
|
+
|
|
102
|
+
Constitutional validation can inspect this data to ensure actions
|
|
103
|
+
are operating within policy bounds.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
duration_sec: float = 0.0
|
|
107
|
+
"""
|
|
108
|
+
Execution time in seconds.
|
|
109
|
+
|
|
110
|
+
Used for:
|
|
111
|
+
- Performance monitoring
|
|
112
|
+
- Timeout enforcement
|
|
113
|
+
- Workflow optimization
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
impact: ActionImpact | None = None
|
|
117
|
+
"""
|
|
118
|
+
What kind of changes this action made.
|
|
119
|
+
|
|
120
|
+
Optional but recommended for constitutional governance.
|
|
121
|
+
Helps the system understand the scope of changes.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
logs: list[str] = field(default_factory=list)
|
|
125
|
+
"""
|
|
126
|
+
Debug trace messages (internal use only, not shown to users).
|
|
127
|
+
|
|
128
|
+
For troubleshooting and detailed audit trails.
|
|
129
|
+
Logged at DEBUG level by default.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
warnings: list[str] = field(default_factory=list)
|
|
133
|
+
"""
|
|
134
|
+
Non-fatal issues encountered during execution.
|
|
135
|
+
|
|
136
|
+
Action succeeded (ok=True) but these issues should be noted.
|
|
137
|
+
Example: "Using fallback method due to missing dependency"
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
suggestions: list[str] = field(default_factory=list)
|
|
141
|
+
"""
|
|
142
|
+
Recommended follow-up actions.
|
|
143
|
+
|
|
144
|
+
Example: If a check finds violations, suggest the fix command.
|
|
145
|
+
Enables autonomous agents to chain actions intelligently.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
def __post_init__(self):
|
|
149
|
+
"""Validate ActionResult structure and size constraints."""
|
|
150
|
+
if not isinstance(self.action_id, str) or not self.action_id:
|
|
151
|
+
raise ValueError("action_id must be non-empty string")
|
|
152
|
+
if not isinstance(self.data, dict):
|
|
153
|
+
raise ValueError("data must be a dict")
|
|
154
|
+
if not isinstance(self.ok, bool):
|
|
155
|
+
raise ValueError("ok must be a boolean")
|
|
156
|
+
|
|
157
|
+
# Enforce data size limit to prevent memory bloating in workflows
|
|
158
|
+
try:
|
|
159
|
+
# We use JSON serialization as a proxy for data size
|
|
160
|
+
serialized = json.dumps(self.data, default=str)
|
|
161
|
+
# Lazy import — see module-level note on the circular dependency.
|
|
162
|
+
from shared.infrastructure.intent.operational_config import (
|
|
163
|
+
load_operational_config,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
max_size = load_operational_config().action.max_data_size_bytes
|
|
167
|
+
if len(serialized) > max_size:
|
|
168
|
+
raise ValueError(
|
|
169
|
+
f"ActionResult.data exceeds size limit of {max_size} bytes "
|
|
170
|
+
f"(got {len(serialized)} bytes). Action: {self.action_id}"
|
|
171
|
+
)
|
|
172
|
+
except (TypeError, OverflowError):
|
|
173
|
+
# If data isn't serializable, we warn but don't crash (logging handled by caller)
|
|
174
|
+
pass
|
|
175
|
+
|
|
176
|
+
# ------------------------------------------------------------------
|
|
177
|
+
# Alias for CommandResult.name usage
|
|
178
|
+
# ------------------------------------------------------------------
|
|
179
|
+
@property
|
|
180
|
+
# ID: c70bf747-67ee-4913-a8df-91e325b8021a
|
|
181
|
+
def name(self) -> str:
|
|
182
|
+
"""
|
|
183
|
+
Backwards-compatible alias for `action_id`.
|
|
184
|
+
|
|
185
|
+
Older code (like CLI workflows and reporters) still expects
|
|
186
|
+
`result.name`. New code should prefer `action_id`, but this
|
|
187
|
+
keeps existing workflows running while we migrate.
|
|
188
|
+
"""
|
|
189
|
+
return self.action_id
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
# Backward compatibility aliases (temporary - will be removed in future version)
|
|
193
|
+
CommandResult = ActionResult
|
|
194
|
+
"""
|
|
195
|
+
DEPRECATED: Use ActionResult instead.
|
|
196
|
+
|
|
197
|
+
This alias exists for backward compatibility during migration.
|
|
198
|
+
Will be removed once all commands are migrated to ActionResult.
|
|
199
|
+
"""
|