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
cli/logic/byor.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# src/cli/logic/byor.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Implements the 'byor-init' command to analyze external repositories and scaffold minimal CORE governance structures.
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL FIX:
|
|
7
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
8
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
9
|
+
- Centralizes mutation logic via the Body layer for auditability.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
import yaml
|
|
18
|
+
|
|
19
|
+
from shared.infrastructure.knowledge_graph_service import KnowledgeGraphBuilder
|
|
20
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
21
|
+
from shared.logger import getLogger
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
logger = getLogger(__name__)
|
|
25
|
+
CORE_ROOT = Path(__file__).resolve().parents[2]
|
|
26
|
+
TEMPLATES_DIR = (
|
|
27
|
+
CORE_ROOT / "src" / "features" / "project_lifecycle" / "starter_kits" / "default"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ID: 8b2ee927-9c35-4125-b291-22669733e531
|
|
32
|
+
def initialize_repository(
|
|
33
|
+
path: Path = typer.Argument(
|
|
34
|
+
...,
|
|
35
|
+
help="The path to the external repository to analyze.",
|
|
36
|
+
exists=True,
|
|
37
|
+
file_okay=False,
|
|
38
|
+
dir_okay=True,
|
|
39
|
+
resolve_path=True,
|
|
40
|
+
),
|
|
41
|
+
dry_run: bool = typer.Option(
|
|
42
|
+
True,
|
|
43
|
+
"--dry-run/--write",
|
|
44
|
+
help="Show the proposed .intent/ scaffold without writing files. Use --write to apply.",
|
|
45
|
+
),
|
|
46
|
+
):
|
|
47
|
+
"""
|
|
48
|
+
Analyzes an external repository and scaffolds a minimal `.intent/` constitution.
|
|
49
|
+
"""
|
|
50
|
+
logger.info("🚀 Starting analysis of repository at: %s", path)
|
|
51
|
+
logger.info(" -> Step 1: Building Knowledge Graph of the target repository...")
|
|
52
|
+
try:
|
|
53
|
+
builder = KnowledgeGraphBuilder(root_path=path)
|
|
54
|
+
graph = builder.build()
|
|
55
|
+
total_symbols = len(graph.get("symbols", {}))
|
|
56
|
+
logger.info(
|
|
57
|
+
" -> ✅ Knowledge Graph built successfully. Found %s symbols.",
|
|
58
|
+
total_symbols,
|
|
59
|
+
)
|
|
60
|
+
except Exception as e:
|
|
61
|
+
logger.error(" -> ❌ Failed to build Knowledge Graph: %s", e, exc_info=True)
|
|
62
|
+
raise typer.Exit(code=1)
|
|
63
|
+
|
|
64
|
+
logger.info(" -> Step 2: Generating starter constitution from analysis...")
|
|
65
|
+
domains = builder.domain_map
|
|
66
|
+
source_structure_content = {
|
|
67
|
+
"structure": [
|
|
68
|
+
{
|
|
69
|
+
"domain": name,
|
|
70
|
+
"path": path_str,
|
|
71
|
+
"description": f"Domain for '{name}' inferred by CORE.",
|
|
72
|
+
"allowed_imports": [name, "shared"],
|
|
73
|
+
}
|
|
74
|
+
for path_str, name in domains.items()
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
discovered_capabilities = sorted(
|
|
78
|
+
list(
|
|
79
|
+
set(
|
|
80
|
+
s["capability"]
|
|
81
|
+
for s in graph.get("symbols", {}).values()
|
|
82
|
+
if s.get("capability") != "unassigned"
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
project_manifest_content = {
|
|
87
|
+
"name": path.name,
|
|
88
|
+
"version": "0.1.0-core-scaffold",
|
|
89
|
+
"intent": "A high-level description of what this project is intended to do.",
|
|
90
|
+
"required_capabilities": discovered_capabilities,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# Pre-flight check on template availability
|
|
94
|
+
tag_template_path = TEMPLATES_DIR / "capability_tags.yaml.template"
|
|
95
|
+
if not tag_template_path.exists():
|
|
96
|
+
logger.warning("Template missing: %s", tag_template_path)
|
|
97
|
+
|
|
98
|
+
capability_tags_content = {
|
|
99
|
+
"tags": [
|
|
100
|
+
{
|
|
101
|
+
"name": cap,
|
|
102
|
+
"description": "A clear explanation of what this capability does.",
|
|
103
|
+
}
|
|
104
|
+
for cap in discovered_capabilities
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
files_to_generate = {
|
|
109
|
+
".intent/knowledge/source_structure.yaml": source_structure_content,
|
|
110
|
+
".intent/project_manifest.yaml": project_manifest_content,
|
|
111
|
+
".intent/knowledge/capability_tags.yaml": capability_tags_content,
|
|
112
|
+
".intent/mission/principles.yaml": (
|
|
113
|
+
TEMPLATES_DIR / "principles.yaml"
|
|
114
|
+
).read_text(encoding="utf-8"),
|
|
115
|
+
".intent/policies/safety_policies.yaml": (
|
|
116
|
+
TEMPLATES_DIR / "safety_policies.yaml"
|
|
117
|
+
).read_text(encoding="utf-8"),
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if dry_run:
|
|
121
|
+
logger.info("\n💧 Dry Run Mode: No files will be written.")
|
|
122
|
+
for rel_path, content in files_to_generate.items():
|
|
123
|
+
typer.secho(f"\n📄 Proposed `{rel_path}`:", fg=typer.colors.YELLOW)
|
|
124
|
+
if isinstance(content, dict):
|
|
125
|
+
typer.echo(yaml.dump(content, indent=2, sort_keys=False))
|
|
126
|
+
else:
|
|
127
|
+
typer.echo(content)
|
|
128
|
+
else:
|
|
129
|
+
logger.info("\n💾 **Write Mode:** Applying changes to disk.")
|
|
130
|
+
|
|
131
|
+
fh = FileHandler(str(path))
|
|
132
|
+
|
|
133
|
+
for rel_path, content in files_to_generate.items():
|
|
134
|
+
if isinstance(content, dict):
|
|
135
|
+
output_content = yaml.dump(content, indent=2, sort_keys=False)
|
|
136
|
+
else:
|
|
137
|
+
output_content = content
|
|
138
|
+
|
|
139
|
+
try:
|
|
140
|
+
# Use governed mutation surface instead of Path.write_text
|
|
141
|
+
fh.write_runtime_text(rel_path, output_content)
|
|
142
|
+
typer.secho(
|
|
143
|
+
f" -> ✅ Wrote starter file: {rel_path}", fg=typer.colors.GREEN
|
|
144
|
+
)
|
|
145
|
+
except Exception as e:
|
|
146
|
+
logger.error(" -> ❌ Failed to write %s: %s", rel_path, e)
|
|
147
|
+
|
|
148
|
+
logger.info("\n🎉 BYOR initialization complete.")
|
cli/logic/capability.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# src/cli/logic/capability.py
|
|
2
|
+
"""
|
|
3
|
+
Provides the 'core-admin capability' command group for managing capabilities
|
|
4
|
+
in a constitutionally-aligned way. THIS MODULE IS NOW DEPRECATED and will be
|
|
5
|
+
removed after the DB-centric migration is complete.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
capability_app = typer.Typer(help="[DEPRECATED] Create and manage capabilities.")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@capability_app.command("new")
|
|
21
|
+
# ID: c2111920-a102-52e0-b8f5-1278411d4bae
|
|
22
|
+
def capability_new_deprecated():
|
|
23
|
+
"""[DEPRECATED] This command is now obsolete. Use 'knowledge sync' instead."""
|
|
24
|
+
logger.warning("This command is deprecated and will be removed.")
|
|
25
|
+
logger.info(
|
|
26
|
+
"Please use 'poetry run core-admin knowledge sync' to synchronize symbols."
|
|
27
|
+
)
|
cli/logic/cli_utils.py
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# src/cli/logic/cli_utils.py
|
|
2
|
+
"""
|
|
3
|
+
Provides centralized, reusable utilities for standardizing the console output
|
|
4
|
+
and execution of all `core-admin` commands.
|
|
5
|
+
|
|
6
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
7
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
8
|
+
- Enforces IntentGuard and audit logging for all CLI helper operations.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
from datetime import datetime
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import TYPE_CHECKING, Any
|
|
17
|
+
|
|
18
|
+
import typer
|
|
19
|
+
from cryptography.hazmat.primitives import serialization
|
|
20
|
+
from cryptography.hazmat.primitives.asymmetric import ed25519
|
|
21
|
+
|
|
22
|
+
from shared.logger import getLogger
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
27
|
+
|
|
28
|
+
logger = getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
# Directories we should not traverse when doing broad filesystem scans.
|
|
31
|
+
_DEFAULT_EXCLUDE_DIRS = {
|
|
32
|
+
".git",
|
|
33
|
+
".hg",
|
|
34
|
+
".svn",
|
|
35
|
+
".mypy_cache",
|
|
36
|
+
".pytest_cache",
|
|
37
|
+
".ruff_cache",
|
|
38
|
+
"__pycache__",
|
|
39
|
+
"node_modules",
|
|
40
|
+
"dist",
|
|
41
|
+
"build",
|
|
42
|
+
"site",
|
|
43
|
+
".venv",
|
|
44
|
+
"venv",
|
|
45
|
+
".tox",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _is_excluded_dir(path: str) -> bool:
|
|
50
|
+
parts = {p for p in Path(path).parts if p}
|
|
51
|
+
return bool(parts & _DEFAULT_EXCLUDE_DIRS)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
async def _find_test_file_for_capability_async(
|
|
55
|
+
capability_name: str,
|
|
56
|
+
search_paths: list[str] | None = None,
|
|
57
|
+
) -> Path | None:
|
|
58
|
+
"""
|
|
59
|
+
Asynchronously find a test file associated with a given capability name.
|
|
60
|
+
"""
|
|
61
|
+
if search_paths is None:
|
|
62
|
+
search_paths = ["tests", "test", "src/tests"]
|
|
63
|
+
|
|
64
|
+
capability_lower = capability_name.lower()
|
|
65
|
+
|
|
66
|
+
patterns = {
|
|
67
|
+
f"test_{capability_name}.py",
|
|
68
|
+
f"{capability_name}_test.py",
|
|
69
|
+
f"test{capability_name}.py",
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for base in search_paths:
|
|
73
|
+
base_path = Path(base)
|
|
74
|
+
if not base_path.exists():
|
|
75
|
+
continue
|
|
76
|
+
|
|
77
|
+
for root, _dirs, files in os.walk(base_path):
|
|
78
|
+
if _is_excluded_dir(root):
|
|
79
|
+
continue
|
|
80
|
+
|
|
81
|
+
for pattern in patterns:
|
|
82
|
+
if pattern in files:
|
|
83
|
+
return Path(root) / pattern
|
|
84
|
+
|
|
85
|
+
for filename in files:
|
|
86
|
+
if not filename.endswith(".py"):
|
|
87
|
+
continue
|
|
88
|
+
if capability_lower in filename.lower():
|
|
89
|
+
return Path(root) / filename
|
|
90
|
+
|
|
91
|
+
return None
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# ID: fe11b579-66f5-4aaf-bd91-636ce01604ad
|
|
95
|
+
def find_source_file(
|
|
96
|
+
symbol_name: str,
|
|
97
|
+
search_paths: list[str] | None = None,
|
|
98
|
+
) -> Path | None:
|
|
99
|
+
"""
|
|
100
|
+
Find the source file containing a given symbol.
|
|
101
|
+
"""
|
|
102
|
+
if search_paths is None:
|
|
103
|
+
search_paths = ["src", "lib"]
|
|
104
|
+
|
|
105
|
+
def_markers = (f"def {symbol_name}", f"class {symbol_name}")
|
|
106
|
+
|
|
107
|
+
for base in search_paths:
|
|
108
|
+
base_path = Path(base)
|
|
109
|
+
if not base_path.exists():
|
|
110
|
+
continue
|
|
111
|
+
|
|
112
|
+
for root, _dirs, files in os.walk(base_path):
|
|
113
|
+
if "test" in root.lower():
|
|
114
|
+
continue
|
|
115
|
+
if _is_excluded_dir(root):
|
|
116
|
+
continue
|
|
117
|
+
|
|
118
|
+
for filename in files:
|
|
119
|
+
if not filename.endswith(".py"):
|
|
120
|
+
continue
|
|
121
|
+
|
|
122
|
+
file_path = Path(root) / filename
|
|
123
|
+
try:
|
|
124
|
+
with file_path.open("r", encoding="utf-8") as f:
|
|
125
|
+
for line in f:
|
|
126
|
+
if def_markers[0] in line or def_markers[1] in line:
|
|
127
|
+
return file_path
|
|
128
|
+
except (OSError, UnicodeDecodeError) as e:
|
|
129
|
+
logger.debug("Error reading %s: %s", file_path, e, exc_info=True)
|
|
130
|
+
continue
|
|
131
|
+
|
|
132
|
+
return None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# ID: a3d61adf-6e42-4854-a028-89a73d47c667
|
|
136
|
+
def save_yaml_file(path: Path, data: dict[str, Any], file_handler: FileHandler) -> None:
|
|
137
|
+
"""Saves data to a YAML file via the governed FileHandler."""
|
|
138
|
+
import yaml
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
rel_path = str(path.resolve().relative_to(file_handler.repo_path.resolve()))
|
|
142
|
+
content = yaml.dump(data, sort_keys=True)
|
|
143
|
+
file_handler.write_runtime_text(rel_path, content)
|
|
144
|
+
except ValueError:
|
|
145
|
+
logger.error(
|
|
146
|
+
"Attempted to save YAML file outside repository boundary: %s", path
|
|
147
|
+
)
|
|
148
|
+
raise
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# ID: 4e814eab-bdc4-4d68-b13e-8c4c53269a68
|
|
152
|
+
def load_private_key(repo_root: Path) -> ed25519.Ed25519PrivateKey:
|
|
153
|
+
"""
|
|
154
|
+
Loads the operator's private key.
|
|
155
|
+
Requires repo_root to locate var/keys/private.key without global settings.
|
|
156
|
+
"""
|
|
157
|
+
key_path = repo_root / "var" / "keys" / "private.key"
|
|
158
|
+
if not key_path.exists():
|
|
159
|
+
logger.error(
|
|
160
|
+
"Private key not found at %s. Please run 'core-admin manage keys generate' to create one.",
|
|
161
|
+
key_path,
|
|
162
|
+
)
|
|
163
|
+
raise typer.Exit(code=1)
|
|
164
|
+
return serialization.load_pem_private_key(key_path.read_bytes(), password=None)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
# ID: f803faac-7a8d-40b1-84cb-659379a4b512
|
|
168
|
+
def archive_rollback_plan(
|
|
169
|
+
proposal_name: str,
|
|
170
|
+
proposal: dict[str, Any],
|
|
171
|
+
file_handler: FileHandler,
|
|
172
|
+
) -> None:
|
|
173
|
+
"""Archives a proposal's rollback plan via the governed FileHandler."""
|
|
174
|
+
rollback_plan = proposal.get("rollback_plan")
|
|
175
|
+
if not rollback_plan:
|
|
176
|
+
return
|
|
177
|
+
|
|
178
|
+
rel_rollbacks_dir = "var/mind/rollbacks"
|
|
179
|
+
file_handler.ensure_dir(rel_rollbacks_dir)
|
|
180
|
+
|
|
181
|
+
timestamp = datetime.utcnow().strftime("%Y%m%d%H%M%S")
|
|
182
|
+
archive_filename = f"{timestamp}-{proposal_name}.json"
|
|
183
|
+
rel_archive_path = f"{rel_rollbacks_dir}/{archive_filename}"
|
|
184
|
+
|
|
185
|
+
payload = {
|
|
186
|
+
"proposal_name": proposal_name,
|
|
187
|
+
"target_path": proposal.get("target_path"),
|
|
188
|
+
"justification": proposal.get("justification"),
|
|
189
|
+
"rollback_plan": rollback_plan,
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
file_handler.write_runtime_json(rel_archive_path, payload)
|
|
193
|
+
logger.info("Rollback plan archived to %s", rel_archive_path)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# ID: 0babc74d-bd4e-4cbd-8cd6-bc955b32967e
|
|
197
|
+
def should_fail(report: dict[str, Any], fail_on: str) -> bool:
|
|
198
|
+
"""
|
|
199
|
+
Determines if the CLI should exit with an error code based on drift.
|
|
200
|
+
"""
|
|
201
|
+
missing_in_code = bool(report.get("missing_in_code"))
|
|
202
|
+
undeclared_in_manifest = bool(report.get("undeclared_in_manifest"))
|
|
203
|
+
mismatched_mappings = bool(report.get("mismatched_mappings"))
|
|
204
|
+
|
|
205
|
+
if fail_on == "missing":
|
|
206
|
+
return missing_in_code
|
|
207
|
+
if fail_on == "undeclared":
|
|
208
|
+
return undeclared_in_manifest
|
|
209
|
+
|
|
210
|
+
return missing_in_code or undeclared_in_manifest or mismatched_mappings
|
cli/logic/context.py
ADDED
cli/logic/db.py
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# src/cli/logic/db.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Registers the top-level 'db' command group for managing the CORE operational database.
|
|
5
|
+
|
|
6
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
7
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
8
|
+
- Redirected Mind-layer exports to the 'var/' runtime directory to maintain
|
|
9
|
+
the read-only boundary of '.intent/'.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
import yaml
|
|
18
|
+
from sqlalchemy import text
|
|
19
|
+
|
|
20
|
+
from shared.context import CoreContext
|
|
21
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
22
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
23
|
+
from shared.logger import getLogger
|
|
24
|
+
from shared.path_resolver import PathResolver
|
|
25
|
+
|
|
26
|
+
from .sync_domains import sync_domains
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
logger = getLogger(__name__)
|
|
30
|
+
db_app = typer.Typer(
|
|
31
|
+
help="Commands for managing the CORE operational database (migrations, syncs, status, exports)."
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def _export_domains(file_handler: FileHandler):
|
|
36
|
+
"""Fetches domains from the DB and writes them to the runtime knowledge directory."""
|
|
37
|
+
logger.info("Exporting `core.domains` to YAML...")
|
|
38
|
+
async with get_session() as session:
|
|
39
|
+
result = await session.execute(
|
|
40
|
+
text(
|
|
41
|
+
"SELECT key as name, title, description FROM core.domains ORDER BY key"
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
domains_data = [dict(row._mapping) for row in result]
|
|
45
|
+
|
|
46
|
+
# The Body layer must never write directly to the Constitution.
|
|
47
|
+
yaml_content = {"version": 2, "domains": domains_data}
|
|
48
|
+
content_str = yaml.dump(yaml_content, indent=2, sort_keys=False)
|
|
49
|
+
|
|
50
|
+
# Resolve the relative path under the project root
|
|
51
|
+
# Note: var/mind/knowledge/ is the canonical home for runtime knowledge artifacts.
|
|
52
|
+
rel_path = "var/mind/knowledge/domains.yaml"
|
|
53
|
+
|
|
54
|
+
# Governed write: checks IntentGuard and logs the action
|
|
55
|
+
file_handler.write_runtime_text(rel_path, content_str)
|
|
56
|
+
|
|
57
|
+
logger.info(
|
|
58
|
+
"Wrote %s domains to %s",
|
|
59
|
+
len(domains_data),
|
|
60
|
+
rel_path,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
async def _export_vector_metadata(file_handler: FileHandler, repo_root: Path):
|
|
65
|
+
"""Fetches vector metadata from the DB and writes it to a report."""
|
|
66
|
+
logger.info("Exporting vector metadata from database to YAML...")
|
|
67
|
+
async with get_session() as session:
|
|
68
|
+
result = await session.execute(
|
|
69
|
+
text(
|
|
70
|
+
"\n SELECT s.id as uuid, s.symbol_path, l.vector_id\n FROM core.symbols s\n JOIN core.symbol_vector_links l ON s.id = l.symbol_id\n ORDER BY s.symbol_path;\n "
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
vector_data = []
|
|
74
|
+
for row in result:
|
|
75
|
+
row_dict = dict(row._mapping)
|
|
76
|
+
if "uuid" in row_dict and row_dict["uuid"] is not None:
|
|
77
|
+
row_dict["uuid"] = str(row_dict["uuid"])
|
|
78
|
+
if "vector_id" in row_dict and row_dict["vector_id"] is not None:
|
|
79
|
+
row_dict["vector_id"] = str(row_dict["vector_id"])
|
|
80
|
+
vector_data.append(row_dict)
|
|
81
|
+
|
|
82
|
+
content_str = yaml.dump(vector_data, indent=2, sort_keys=False)
|
|
83
|
+
rel_path = str(
|
|
84
|
+
(
|
|
85
|
+
PathResolver.from_repo(repo_root).reports_dir
|
|
86
|
+
/ "vector_metadata_export.yaml"
|
|
87
|
+
).relative_to(repo_root)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
file_handler.write_runtime_text(rel_path, content_str)
|
|
91
|
+
|
|
92
|
+
logger.info(
|
|
93
|
+
"Wrote metadata for %s vectors to %s",
|
|
94
|
+
len(vector_data),
|
|
95
|
+
rel_path,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@db_app.command(
|
|
100
|
+
"export", help="Export operational data from the database to read-only files."
|
|
101
|
+
)
|
|
102
|
+
# ID: 86554413-b670-4c62-80eb-31bab9a05edf
|
|
103
|
+
async def export_data(ctx: typer.Context) -> None:
|
|
104
|
+
"""Exports DB tables to their canonical, read-only YAML file representations."""
|
|
105
|
+
core_context: CoreContext = ctx.obj
|
|
106
|
+
logger.info("Exporting operational data from Database to files...")
|
|
107
|
+
|
|
108
|
+
# Create the governed mutation surface
|
|
109
|
+
file_handler = FileHandler(str(core_context.git_service.repo_path))
|
|
110
|
+
|
|
111
|
+
await _export_domains(file_handler)
|
|
112
|
+
await _export_vector_metadata(file_handler, core_context.git_service.repo_path)
|
|
113
|
+
logger.info("Export complete.")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
db_app.command("sync-domains")(sync_domains)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@db_app.command("migrate")
|
|
120
|
+
# ID: e8d94b4b-0257-4b03-8c83-03f04d8fb2a8
|
|
121
|
+
async def migrate_db_command(
|
|
122
|
+
apply: bool = typer.Option(
|
|
123
|
+
False, "--apply", help="(Currently inert — framework is dormant.)"
|
|
124
|
+
),
|
|
125
|
+
) -> None:
|
|
126
|
+
"""Show the current migration-framework status (currently dormant).
|
|
127
|
+
|
|
128
|
+
The repo operates under a schema-as-truth model — `infra/sql/db_schema_live.sql`
|
|
129
|
+
is the canonical schema. One-off SQL files under `infra/scripts/migrations/`
|
|
130
|
+
are historical record and are NOT replayed through this CLI. See #438.
|
|
131
|
+
"""
|
|
132
|
+
_ = apply # currently unused; kept for forward-compat
|
|
133
|
+
from rich.console import Console
|
|
134
|
+
|
|
135
|
+
_console = Console()
|
|
136
|
+
_console.print()
|
|
137
|
+
_console.print("[yellow]⏸ Migration framework is currently dormant.[/yellow]")
|
|
138
|
+
_console.print()
|
|
139
|
+
_console.print("Schema-as-truth model is in effect:")
|
|
140
|
+
_console.print(" • Canonical schema: [cyan]infra/sql/db_schema_live.sql[/cyan]")
|
|
141
|
+
_console.print(
|
|
142
|
+
" • Regenerate via: [cyan]pg_dump --schema-only --schema=core[/cyan]"
|
|
143
|
+
)
|
|
144
|
+
_console.print(
|
|
145
|
+
" • One-off SQL files: [cyan]infra/scripts/migrations/[/cyan] (historical record)"
|
|
146
|
+
)
|
|
147
|
+
_console.print()
|
|
148
|
+
_console.print(
|
|
149
|
+
"This command will be revived if ledger-based migrations are reintroduced."
|
|
150
|
+
)
|
|
151
|
+
_console.print("See #438 for the framework-orphan history.")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
db_app.command("migrate")(migrate_db_command)
|
cli/logic/db_manage.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# src/cli/logic/db_manage.py
|
|
2
|
+
"""Provides functionality for the db_manage module."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
|
|
8
|
+
from .db import app as db_app
|
|
9
|
+
from .db import app as knowledge_db_app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Top-level Typer app exposed by this module
|
|
13
|
+
app = typer.Typer(help="Database management meta-commands")
|
|
14
|
+
|
|
15
|
+
# Mount groups
|
|
16
|
+
app.add_typer(db_app, name="db")
|
|
17
|
+
|
|
18
|
+
knowledge_app = typer.Typer(help="Knowledge operations")
|
|
19
|
+
knowledge_app.add_typer(knowledge_db_app, name="db")
|
|
20
|
+
app.add_typer(knowledge_app, name="knowledge")
|
|
21
|
+
|
|
22
|
+
__all__ = ["app"]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# src/cli/logic/decision_inspect_logic.py
|
|
2
|
+
"""
|
|
3
|
+
Logic specialist for inspecting autonomous decision traces.
|
|
4
|
+
Handles database queries and Rich-table formatting.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from shared.logger import getLogger
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
logger = getLogger(__name__)
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
from rich.table import Table
|
|
15
|
+
|
|
16
|
+
from body.infrastructure.repositories.decision_trace_repository import (
|
|
17
|
+
DecisionTraceRepository,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
console = Console()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# ID: 832820bd-1e00-453b-979c-5ad702814e25
|
|
25
|
+
async def show_session_trace_logic(
|
|
26
|
+
repo: DecisionTraceRepository, session_id: str, details: bool
|
|
27
|
+
):
|
|
28
|
+
"""Deep inspection of a single session."""
|
|
29
|
+
trace = await repo.get_by_session_id(session_id)
|
|
30
|
+
if not trace:
|
|
31
|
+
console.print(f"[yellow]No trace found for session: {session_id}[/yellow]")
|
|
32
|
+
return
|
|
33
|
+
console.print(f"\n[bold cyan]Session: {trace.session_id}[/bold cyan]")
|
|
34
|
+
logger.info("Agent: %s | Decisions: %s", trace.agent_name, trace.decision_count)
|
|
35
|
+
if details:
|
|
36
|
+
for i, d in enumerate(trace.decisions or [], 1):
|
|
37
|
+
console.print(
|
|
38
|
+
f"\n[cyan]{i}. {d.get('agent')} - {d.get('decision_type')}[/cyan]"
|
|
39
|
+
)
|
|
40
|
+
logger.info(" Rationale: %s", d.get("rationale"))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# ID: 3818285c-c8c9-4727-8792-d47371ee64f3
|
|
44
|
+
async def list_recent_traces_logic(
|
|
45
|
+
repo: DecisionTraceRepository, limit: int, agent: str | None, failures_only: bool
|
|
46
|
+
):
|
|
47
|
+
"""Builds a summary table of recent decisions."""
|
|
48
|
+
traces = await repo.get_recent(
|
|
49
|
+
limit=limit, agent_name=agent, failures_only=failures_only
|
|
50
|
+
)
|
|
51
|
+
if not traces:
|
|
52
|
+
console.print("[yellow]No traces found.[/yellow]")
|
|
53
|
+
return
|
|
54
|
+
table = Table(title=f"Recent Decision Traces ({len(traces)})")
|
|
55
|
+
table.add_column("Session", style="cyan")
|
|
56
|
+
table.add_column("Agent", style="green")
|
|
57
|
+
table.add_column("Decisions", justify="right")
|
|
58
|
+
table.add_column("Status")
|
|
59
|
+
for t in traces:
|
|
60
|
+
status = "❌ Violations" if t.has_violations == "true" else "✅ Clean"
|
|
61
|
+
table.add_row(t.session_id[:12], t.agent_name, str(t.decision_count), status)
|
|
62
|
+
console.print(table)
|