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,208 @@
|
|
|
1
|
+
# src/cli/logic/refusal_inspect_logic.py
|
|
2
|
+
"""
|
|
3
|
+
Logic for inspecting constitutional refusals.
|
|
4
|
+
|
|
5
|
+
Provides rich terminal output for:
|
|
6
|
+
- Recent refusals with filtering
|
|
7
|
+
- Refusal statistics and trends
|
|
8
|
+
- Constitutional compliance analysis
|
|
9
|
+
|
|
10
|
+
Used by: `core-admin inspect refusals` command
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from rich.console import Console
|
|
16
|
+
from rich.panel import Panel
|
|
17
|
+
from rich.table import Table
|
|
18
|
+
|
|
19
|
+
from body.infrastructure.repositories.refusal_repository import RefusalRepository
|
|
20
|
+
from shared.infrastructure.intent.operational_config import load_operational_config
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
_CFG = load_operational_config().misc
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# ID: 4b4da583-c2ba-43ad-a249-720128871385
|
|
29
|
+
async def show_recent_refusals(
|
|
30
|
+
limit: int = _CFG.refusal_inspect_default_limit,
|
|
31
|
+
refusal_type: str | None = None,
|
|
32
|
+
component: str | None = None,
|
|
33
|
+
details: bool = False,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Show recent refusals with optional filtering.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
limit: Maximum records to show
|
|
40
|
+
refusal_type: Filter by type (boundary, confidence, etc.)
|
|
41
|
+
component: Filter by component
|
|
42
|
+
details: Show full details
|
|
43
|
+
"""
|
|
44
|
+
repo = RefusalRepository()
|
|
45
|
+
refusals = await repo.get_recent(
|
|
46
|
+
limit=limit, refusal_type=refusal_type, component_id=component
|
|
47
|
+
)
|
|
48
|
+
if not refusals:
|
|
49
|
+
console.print("[yellow]No refusals found matching criteria[/yellow]")
|
|
50
|
+
return
|
|
51
|
+
table = Table(title=f"Recent Refusals ({len(refusals)})")
|
|
52
|
+
table.add_column("Type", style="cyan")
|
|
53
|
+
table.add_column("Component", style="green")
|
|
54
|
+
table.add_column("Phase", style="blue")
|
|
55
|
+
table.add_column("Confidence", justify="right")
|
|
56
|
+
table.add_column("Time", style="dim")
|
|
57
|
+
for refusal in refusals:
|
|
58
|
+
confidence_str = f"{refusal.confidence:.0%}" if refusal.confidence else "N/A"
|
|
59
|
+
table.add_row(
|
|
60
|
+
refusal.refusal_type,
|
|
61
|
+
refusal.component_id,
|
|
62
|
+
refusal.phase,
|
|
63
|
+
confidence_str,
|
|
64
|
+
refusal.created_at.strftime("%Y-%m-%d %H:%M:%S"),
|
|
65
|
+
)
|
|
66
|
+
console.print(table)
|
|
67
|
+
if details and refusals:
|
|
68
|
+
console.print("\n[bold]Most Recent Refusal Details:[/bold]")
|
|
69
|
+
_show_refusal_details(refusals[0])
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _show_refusal_details(refusal) -> None:
|
|
73
|
+
"""Show detailed information about a single refusal."""
|
|
74
|
+
details = []
|
|
75
|
+
details.append(f"[bold cyan]Type:[/bold cyan] {refusal.refusal_type}")
|
|
76
|
+
details.append(f"[bold cyan]Component:[/bold cyan] {refusal.component_id}")
|
|
77
|
+
details.append(f"[bold cyan]Phase:[/bold cyan] {refusal.phase}")
|
|
78
|
+
details.append("")
|
|
79
|
+
details.append("[bold yellow]Reason:[/bold yellow]")
|
|
80
|
+
details.append(f" {refusal.reason}")
|
|
81
|
+
details.append("")
|
|
82
|
+
details.append("[bold green]Suggested Action:[/bold green]")
|
|
83
|
+
details.append(f" {refusal.suggested_action}")
|
|
84
|
+
details.append("")
|
|
85
|
+
if refusal.original_request:
|
|
86
|
+
details.append("[bold]Original Request:[/bold]")
|
|
87
|
+
request = refusal.original_request
|
|
88
|
+
if len(request) > 200:
|
|
89
|
+
request = request[:200] + "..."
|
|
90
|
+
details.append(f" {request}")
|
|
91
|
+
details.append("")
|
|
92
|
+
if refusal.context_data:
|
|
93
|
+
details.append("[bold]Context:[/bold]")
|
|
94
|
+
for key, value in refusal.context_data.items():
|
|
95
|
+
details.append(f" {key}: {value}")
|
|
96
|
+
details.append("")
|
|
97
|
+
details.append(f"[dim]Confidence: {refusal.confidence:.2f}[/dim]")
|
|
98
|
+
details.append(f"[dim]Time: {refusal.created_at}[/dim]")
|
|
99
|
+
if refusal.session_id:
|
|
100
|
+
details.append(f"[dim]Session: {refusal.session_id}[/dim]")
|
|
101
|
+
panel = Panel(
|
|
102
|
+
"\n".join(details), title=f"Refusal {str(refusal.id)[:8]}", border_style="cyan"
|
|
103
|
+
)
|
|
104
|
+
console.print(panel)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# ID: 6ed8fe95-3088-46bb-87ce-343001399035
|
|
108
|
+
async def show_refusal_statistics(days: int = 7) -> None:
|
|
109
|
+
"""
|
|
110
|
+
Show refusal statistics and trends.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
days: Number of days to analyze
|
|
114
|
+
"""
|
|
115
|
+
repo = RefusalRepository()
|
|
116
|
+
stats = await repo.get_statistics(days=days)
|
|
117
|
+
if stats["total_refusals"] == 0:
|
|
118
|
+
console.print(f"[yellow]No refusals recorded in the last {days} days[/yellow]")
|
|
119
|
+
return
|
|
120
|
+
console.print(f"\n[bold]Refusal Statistics (Last {days} Days)[/bold]")
|
|
121
|
+
console.print(f"Total Refusals: {stats['total_refusals']}")
|
|
122
|
+
console.print(f"Average Confidence: {stats['avg_confidence']}\n")
|
|
123
|
+
if stats["by_type"]:
|
|
124
|
+
type_table = Table(title="Refusals by Type")
|
|
125
|
+
type_table.add_column("Type", style="cyan")
|
|
126
|
+
type_table.add_column("Count", justify="right")
|
|
127
|
+
type_table.add_column("Percentage", justify="right")
|
|
128
|
+
total = stats["total_refusals"]
|
|
129
|
+
for refusal_type, count in sorted(
|
|
130
|
+
stats["by_type"].items(), key=lambda x: x[1], reverse=True
|
|
131
|
+
):
|
|
132
|
+
percentage = count / total * 100
|
|
133
|
+
type_table.add_row(refusal_type, str(count), f"{percentage:.1f}%")
|
|
134
|
+
console.print(type_table)
|
|
135
|
+
if stats["by_component"]:
|
|
136
|
+
console.print()
|
|
137
|
+
comp_table = Table(title="Refusals by Component")
|
|
138
|
+
comp_table.add_column("Component", style="green")
|
|
139
|
+
comp_table.add_column("Count", justify="right")
|
|
140
|
+
comp_table.add_column("Percentage", justify="right")
|
|
141
|
+
total = stats["total_refusals"]
|
|
142
|
+
for component, count in sorted(
|
|
143
|
+
stats["by_component"].items(), key=lambda x: x[1], reverse=True
|
|
144
|
+
):
|
|
145
|
+
percentage = count / total * 100
|
|
146
|
+
comp_table.add_row(component, str(count), f"{percentage:.1f}%")
|
|
147
|
+
console.print(comp_table)
|
|
148
|
+
if stats["by_phase"]:
|
|
149
|
+
console.print()
|
|
150
|
+
phase_table = Table(title="Refusals by Phase")
|
|
151
|
+
phase_table.add_column("Phase", style="blue")
|
|
152
|
+
phase_table.add_column("Count", justify="right")
|
|
153
|
+
phase_table.add_column("Percentage", justify="right")
|
|
154
|
+
total = stats["total_refusals"]
|
|
155
|
+
for phase, count in sorted(
|
|
156
|
+
stats["by_phase"].items(), key=lambda x: x[1], reverse=True
|
|
157
|
+
):
|
|
158
|
+
percentage = count / total * 100
|
|
159
|
+
phase_table.add_row(phase, str(count), f"{percentage:.1f}%")
|
|
160
|
+
console.print(phase_table)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# ID: 89e49163-1450-4c3f-85b4-8cdf47b53c37
|
|
164
|
+
async def show_refusals_by_type(
|
|
165
|
+
refusal_type: str, limit: int = _CFG.refusal_inspect_by_type_limit
|
|
166
|
+
) -> None:
|
|
167
|
+
"""
|
|
168
|
+
Show refusals of a specific type.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
refusal_type: Type to filter (boundary, confidence, etc.)
|
|
172
|
+
limit: Maximum records to show
|
|
173
|
+
"""
|
|
174
|
+
repo = RefusalRepository()
|
|
175
|
+
refusals = await repo.get_by_type(refusal_type, limit=limit)
|
|
176
|
+
if not refusals:
|
|
177
|
+
console.print(f"[yellow]No refusals found of type: {refusal_type}[/yellow]")
|
|
178
|
+
return
|
|
179
|
+
console.print(
|
|
180
|
+
f"\n[bold]{refusal_type.capitalize()} Refusals ({len(refusals)})[/bold]\n"
|
|
181
|
+
)
|
|
182
|
+
for i, refusal in enumerate(refusals, 1):
|
|
183
|
+
console.print(f"[cyan]{i}. {refusal.component_id}[/cyan]")
|
|
184
|
+
console.print(f" Phase: {refusal.phase}")
|
|
185
|
+
console.print(f" Reason: {refusal.reason[:100]}...")
|
|
186
|
+
console.print(f" Time: {refusal.created_at.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
187
|
+
console.print()
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# ID: c7576fa4-ec2e-46ba-89e4-feeab36ee0dc
|
|
191
|
+
async def show_refusals_by_session(session_id: str) -> None:
|
|
192
|
+
"""
|
|
193
|
+
Show all refusals for a specific decision trace session.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
session_id: Decision trace session ID
|
|
197
|
+
"""
|
|
198
|
+
repo = RefusalRepository()
|
|
199
|
+
refusals = await repo.get_by_session(session_id)
|
|
200
|
+
if not refusals:
|
|
201
|
+
console.print(f"[yellow]No refusals found for session: {session_id}[/yellow]")
|
|
202
|
+
return
|
|
203
|
+
console.print(
|
|
204
|
+
f"\n[bold]Refusals in Session {session_id} ({len(refusals)})[/bold]\n"
|
|
205
|
+
)
|
|
206
|
+
for refusal in refusals:
|
|
207
|
+
_show_refusal_details(refusal)
|
|
208
|
+
console.print()
|
cli/logic/report.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# src/cli/logic/report.py
|
|
2
|
+
"""
|
|
3
|
+
Provides functionality for the report module.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
from sqlalchemy import text
|
|
10
|
+
|
|
11
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# ID: 27a79c8d-285f-4e79-8de9-a4a5cba424d4
|
|
15
|
+
async def report() -> None:
|
|
16
|
+
"""Summary by source (count, pass rate, avg score)."""
|
|
17
|
+
|
|
18
|
+
stmt = text(
|
|
19
|
+
"""
|
|
20
|
+
select
|
|
21
|
+
source,
|
|
22
|
+
count(*) as total,
|
|
23
|
+
sum(case when verdict = 'PASS' then 1 else 0 end) as passed_count,
|
|
24
|
+
round(avg(score)::numeric, 3) as avg_score
|
|
25
|
+
from core.audit_runs
|
|
26
|
+
where verdict <> 'pending'
|
|
27
|
+
group by source
|
|
28
|
+
order by source
|
|
29
|
+
"""
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
async with get_session() as session:
|
|
33
|
+
result = await session.execute(stmt)
|
|
34
|
+
rows = result.all()
|
|
35
|
+
|
|
36
|
+
if not rows:
|
|
37
|
+
typer.echo("— no data —")
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
typer.echo("source total passed pass_rate avg_score")
|
|
41
|
+
for r in rows:
|
|
42
|
+
pass_rate = (r.passed_count / r.total) * 100.0 if r.total else 0.0
|
|
43
|
+
avg = f"{float(r.avg_score):>8.3f}" if r.avg_score is not None else " — "
|
|
44
|
+
typer.echo(
|
|
45
|
+
f"{r.source:<7} {r.total:>5} {r.passed_count:>6} "
|
|
46
|
+
f"{pass_rate:>6.1f}% {avg}"
|
|
47
|
+
)
|
cli/logic/status.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# src/cli/logic/status.py
|
|
2
|
+
"""
|
|
3
|
+
Diagnostic logic for 'core-admin inspect status'.
|
|
4
|
+
|
|
5
|
+
Shows DB connectivity and migration status.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from shared.infrastructure.repositories.db.status_service import StatusReport
|
|
11
|
+
from shared.infrastructure.repositories.db.status_service import status as db_status
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def _status_impl() -> None:
|
|
15
|
+
"""
|
|
16
|
+
Render a human-readable DB status report to the console.
|
|
17
|
+
|
|
18
|
+
This is an internal helper used by CLI wrappers (e.g. `inspect status`,
|
|
19
|
+
`init status`). It delegates the actual health/ledger logic to the
|
|
20
|
+
DB status service in `services.repositories.db.status_service`.
|
|
21
|
+
"""
|
|
22
|
+
# Use the status-report helper so tests can patch it and governance
|
|
23
|
+
# can reason about a single place where DB status is obtained.
|
|
24
|
+
report: StatusReport = await _get_status_report()
|
|
25
|
+
|
|
26
|
+
# FUTURE: This function should not render UI in a Body module.
|
|
27
|
+
# CLI wrappers should handle rendering. For now, we keep it as a no-op.
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def _get_status_report() -> StatusReport:
|
|
32
|
+
"""
|
|
33
|
+
Internal helper used by the admin CLI and tests.
|
|
34
|
+
|
|
35
|
+
Returns the current database status report without rendering it. The
|
|
36
|
+
CLI command is responsible for turning this into human-readable output.
|
|
37
|
+
"""
|
|
38
|
+
return await db_status()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# NOTE:
|
|
42
|
+
# We intentionally expose `get_status_report` only as an alias to the
|
|
43
|
+
# private `_get_status_report` function. This keeps tests and callers
|
|
44
|
+
# able to import and await `get_status_report`, but the symbol graph
|
|
45
|
+
# only sees the underlying `_get_status_report` function as a single
|
|
46
|
+
# (private) implementation detail, avoiding orphaned public logic.
|
|
47
|
+
get_status_report = _get_status_report
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# src/cli/logic/symbol_drift.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Implements the `inspect symbol-drift` command, a diagnostic tool to detect
|
|
5
|
+
discrepancies between symbols on the filesystem and those in the database.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
from sqlalchemy import text
|
|
13
|
+
|
|
14
|
+
from body.introspection.sync_service import SymbolScanner
|
|
15
|
+
from shared.infrastructure.bootstrap_registry import bootstrap_registry
|
|
16
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
17
|
+
from shared.logger import getLogger
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
logger = getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def _run_drift_analysis():
|
|
24
|
+
"""
|
|
25
|
+
The core logic that scans source, queries the DB, and compares the results.
|
|
26
|
+
"""
|
|
27
|
+
logger.info("Running Symbol Drift Analysis...")
|
|
28
|
+
logger.info("Scanning 'src/' directory for all public symbols...")
|
|
29
|
+
scanner = SymbolScanner(repo_root=bootstrap_registry.get_repo_path())
|
|
30
|
+
code_symbols = await asyncio.to_thread(scanner.scan)
|
|
31
|
+
code_symbol_paths = {s["symbol_path"] for s in code_symbols}
|
|
32
|
+
logger.info("Found %s symbols in source code.", len(code_symbol_paths))
|
|
33
|
+
logger.info("Querying database for all registered symbols...")
|
|
34
|
+
db_symbol_paths = set()
|
|
35
|
+
try:
|
|
36
|
+
async with get_session() as session:
|
|
37
|
+
result = await session.execute(text("SELECT symbol_path FROM core.symbols"))
|
|
38
|
+
db_symbol_paths = {row[0] for row in result}
|
|
39
|
+
logger.info("Found %s symbols in the database.", len(db_symbol_paths))
|
|
40
|
+
except Exception as e:
|
|
41
|
+
logger.error("Database query failed: %s", e)
|
|
42
|
+
logger.info("Please ensure your database is running and accessible.")
|
|
43
|
+
return
|
|
44
|
+
ghost_symbols_in_db = sorted(list(db_symbol_paths - code_symbol_paths))
|
|
45
|
+
new_symbols_in_code = sorted(list(code_symbol_paths - db_symbol_paths))
|
|
46
|
+
logger.info("--- Analysis Complete ---")
|
|
47
|
+
if not ghost_symbols_in_db and (not new_symbols_in_code):
|
|
48
|
+
logger.info(
|
|
49
|
+
"No drift detected. The database is perfectly synchronized with the source code."
|
|
50
|
+
)
|
|
51
|
+
return
|
|
52
|
+
if ghost_symbols_in_db:
|
|
53
|
+
logger.warning("Found %s Ghost Symbols in Database", len(ghost_symbols_in_db))
|
|
54
|
+
logger.warning(
|
|
55
|
+
"These symbols exist in the DB but NOT in the source code. They should be pruned."
|
|
56
|
+
)
|
|
57
|
+
for symbol in ghost_symbols_in_db:
|
|
58
|
+
logger.warning(" - %s", symbol)
|
|
59
|
+
logger.info(
|
|
60
|
+
"Diagnosis: The `sync-knowledge` command is failing to delete obsolete symbols from the database."
|
|
61
|
+
)
|
|
62
|
+
if new_symbols_in_code:
|
|
63
|
+
logger.info("Found %s New Symbols in Source Code", len(new_symbols_in_code))
|
|
64
|
+
logger.info(
|
|
65
|
+
"These symbols exist in the code but NOT in the DB. They need to be synchronized."
|
|
66
|
+
)
|
|
67
|
+
for symbol in new_symbols_in_code:
|
|
68
|
+
logger.info(" - %s", symbol)
|
|
69
|
+
logger.info(
|
|
70
|
+
"Next Step: This report confirms a bug in the sync logic. Please proceed with fixing the `run_sync_with_db` function."
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# ID: 2ff57ea1-2b62-4c75-9586-10219c51ea13
|
|
75
|
+
async def inspect_symbol_drift():
|
|
76
|
+
"""Typer wrapper for the async drift analysis logic."""
|
|
77
|
+
await _run_drift_analysis()
|
cli/logic/sync.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# src/cli/logic/sync.py
|
|
2
|
+
"""
|
|
3
|
+
Headless logic for synchronizing the codebase state with the database.
|
|
4
|
+
Complies with body_contracts.json (no UI imports).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from body.introspection.sync_service import run_sync_with_db
|
|
10
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
11
|
+
from shared.logger import getLogger
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
logger = getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# ID: 26a3ed07-80bb-4a78-a05d-862cae7968e3
|
|
18
|
+
async def sync_knowledge_base(write: bool = False) -> dict:
|
|
19
|
+
"""
|
|
20
|
+
Scans the codebase and syncs all symbols and their IDs to the database.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
dict: Sync statistics.
|
|
24
|
+
"""
|
|
25
|
+
logger.info("🚀 Synchronizing codebase state with database...")
|
|
26
|
+
|
|
27
|
+
if not write:
|
|
28
|
+
logger.info("DRY-RUN: Knowledge sync requires write=True to persist changes.")
|
|
29
|
+
return {
|
|
30
|
+
"status": "dry_run",
|
|
31
|
+
"scanned": 0,
|
|
32
|
+
"inserted": 0,
|
|
33
|
+
"updated": 0,
|
|
34
|
+
"deleted": 0,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async with get_session() as session:
|
|
38
|
+
# run_sync_with_db returns an ActionResult; we extract the data for the caller
|
|
39
|
+
result = await run_sync_with_db(session)
|
|
40
|
+
stats = result.data
|
|
41
|
+
|
|
42
|
+
logger.info("--- Knowledge Sync Summary ---")
|
|
43
|
+
logger.info(" Scanned from code: %s symbols", stats.get("scanned", 0))
|
|
44
|
+
logger.info(" New symbols added: %s", stats.get("inserted", 0))
|
|
45
|
+
logger.info(" Existing symbols updated: %s", stats.get("updated", 0))
|
|
46
|
+
logger.info(" Obsolete symbols removed: %s", stats.get("deleted", 0))
|
|
47
|
+
|
|
48
|
+
return stats
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# src/cli/logic/sync_domains.py
|
|
2
|
+
"""
|
|
3
|
+
CLI command to synchronize the canonical list of domains to the database.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
import yaml
|
|
10
|
+
from sqlalchemy import text
|
|
11
|
+
|
|
12
|
+
from shared.context import CoreContext
|
|
13
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
14
|
+
from shared.logger import getLogger
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def _sync_domains(repo_root):
|
|
21
|
+
"""
|
|
22
|
+
Reads the canonical domains.yaml file and upserts them into the core.domains table.
|
|
23
|
+
"""
|
|
24
|
+
domains_path = repo_root / "var" / "mind" / "knowledge" / "domains.yaml"
|
|
25
|
+
if not domains_path.exists():
|
|
26
|
+
logger.error("Constitutional domains file not found at %s", domains_path)
|
|
27
|
+
raise typer.Exit(code=1)
|
|
28
|
+
|
|
29
|
+
content = yaml.safe_load(domains_path.read_text("utf-8"))
|
|
30
|
+
domains_to_sync = content.get("domains", [])
|
|
31
|
+
|
|
32
|
+
if not domains_to_sync:
|
|
33
|
+
logger.warning("No domains found in domains.yaml. Nothing to sync.")
|
|
34
|
+
return
|
|
35
|
+
|
|
36
|
+
upserted_count = 0
|
|
37
|
+
async with get_session() as session:
|
|
38
|
+
async with session.begin(): # Start a transaction
|
|
39
|
+
for domain_data in domains_to_sync:
|
|
40
|
+
name = domain_data.get("name")
|
|
41
|
+
description = domain_data.get("description", "")
|
|
42
|
+
if not name:
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
stmt = text(
|
|
46
|
+
"""
|
|
47
|
+
INSERT INTO core.domains (key, title, description, status)
|
|
48
|
+
VALUES (:key, :title, :desc, 'active')
|
|
49
|
+
ON CONFLICT (key) DO UPDATE SET
|
|
50
|
+
title = EXCLUDED.title,
|
|
51
|
+
description = EXCLUDED.description;
|
|
52
|
+
"""
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
await session.execute(
|
|
56
|
+
stmt,
|
|
57
|
+
{
|
|
58
|
+
"key": name,
|
|
59
|
+
"title": name.replace("_", " ").title(),
|
|
60
|
+
"desc": description,
|
|
61
|
+
},
|
|
62
|
+
)
|
|
63
|
+
upserted_count += 1
|
|
64
|
+
|
|
65
|
+
logger.info("Successfully synced %s domains to the database.", upserted_count)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# ID: 5bee5341-7f72-430e-b310-f174af37de20
|
|
69
|
+
async def sync_domains(ctx: typer.Context):
|
|
70
|
+
"""Synchronizes the canonical list of domains from .intent/knowledge/domains.yaml to the database."""
|
|
71
|
+
core_context: CoreContext = ctx.obj
|
|
72
|
+
await _sync_domains(core_context.git_service.repo_path)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# src/cli/logic/sync_manifest.py
|
|
2
|
+
"""
|
|
3
|
+
LEGACY / DEPRECATED — DO NOT USE.
|
|
4
|
+
|
|
5
|
+
This module previously synchronized a legacy project manifest under `.intent/`.
|
|
6
|
+
That behavior is constitutionally invalid:
|
|
7
|
+
|
|
8
|
+
- `.intent/` is READ-ONLY for BODY.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
|
|
15
|
+
from shared.logger import getLogger
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
logger = getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# ID: fd8e5164-0a37-45e7-8701-7a1935d99d88
|
|
22
|
+
async def sync_manifest() -> None:
|
|
23
|
+
"""
|
|
24
|
+
Disabled operation: BODY may not write to `.intent/`.
|
|
25
|
+
"""
|
|
26
|
+
logger.error(
|
|
27
|
+
"sync-manifest is deprecated and disabled: "
|
|
28
|
+
"BODY may not write to `.intent/`. "
|
|
29
|
+
"Migrate any consumers to SSOT (Postgres)."
|
|
30
|
+
)
|
|
31
|
+
raise typer.Exit(code=1)
|
cli/logic/tools.py
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# src/cli/logic/tools.py
|
|
2
|
+
"""
|
|
3
|
+
Registers a 'tools' command group for powerful, operator-focused maintenance tasks.
|
|
4
|
+
This is the new, governed home for logic from standalone scripts.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
|
|
14
|
+
from body.maintenance.maintenance_service import rewire_imports
|
|
15
|
+
|
|
16
|
+
# Import the moved script module
|
|
17
|
+
from body.maintenance.scripts import context_export
|
|
18
|
+
from shared.cli.command_meta import (
|
|
19
|
+
CommandBehavior,
|
|
20
|
+
CommandLayer,
|
|
21
|
+
command_meta,
|
|
22
|
+
) # Add this import
|
|
23
|
+
from shared.logger import getLogger
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
logger = getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
tools_app = typer.Typer(
|
|
29
|
+
help="Governed, operator-focused maintenance and refactoring tools."
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@tools_app.command(
|
|
34
|
+
"rewire-imports",
|
|
35
|
+
help="Run after major refactoring to fix all Python import statements across 'src/'.",
|
|
36
|
+
)
|
|
37
|
+
@command_meta(
|
|
38
|
+
canonical_name="imports.rewire",
|
|
39
|
+
behavior=CommandBehavior.MUTATE,
|
|
40
|
+
layer=CommandLayer.BODY,
|
|
41
|
+
summary="Automatically fixes Python import statements across the codebase after major refactoring.",
|
|
42
|
+
dangerous=True,
|
|
43
|
+
)
|
|
44
|
+
# ID: 85a8bd02-dba4-4aab-9329-c36cc60a121a
|
|
45
|
+
def rewire_imports_cli(
|
|
46
|
+
write: bool = typer.Option(
|
|
47
|
+
False, "--write", help="Apply the changes to the files."
|
|
48
|
+
),
|
|
49
|
+
):
|
|
50
|
+
"""
|
|
51
|
+
CLI wrapper for the import rewiring service.
|
|
52
|
+
"""
|
|
53
|
+
dry_run = not write
|
|
54
|
+
logger.info("Starting architectural import re-wiring script...")
|
|
55
|
+
if dry_run:
|
|
56
|
+
logger.info("DRY RUN MODE: No files will be changed.")
|
|
57
|
+
else:
|
|
58
|
+
logger.info("WRITE MODE: Files will be modified.")
|
|
59
|
+
|
|
60
|
+
# REFACTORED: Removed direct settings import
|
|
61
|
+
from body.infrastructure.bootstrap import create_core_context
|
|
62
|
+
from body.services.service_registry import service_registry
|
|
63
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
64
|
+
|
|
65
|
+
context = create_core_context(service_registry)
|
|
66
|
+
file_handler = FileHandler(str(context.git_service.repo_path))
|
|
67
|
+
total_changes = rewire_imports(context, file_handler, dry_run=dry_run)
|
|
68
|
+
|
|
69
|
+
logger.info("--- Re-wiring Complete ---")
|
|
70
|
+
if dry_run:
|
|
71
|
+
logger.info(
|
|
72
|
+
"DRY RUN: Found %s potential import changes to make.", total_changes
|
|
73
|
+
)
|
|
74
|
+
logger.info("Run with '--write' to apply them.")
|
|
75
|
+
else:
|
|
76
|
+
logger.info("APPLIED: Made %s import changes.", total_changes)
|
|
77
|
+
|
|
78
|
+
logger.info("--- NEXT STEPS ---")
|
|
79
|
+
logger.info(
|
|
80
|
+
"1. VERIFY: Run 'make format' and then 'make check' to ensure compliance."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@tools_app.command("export-context")
|
|
85
|
+
@command_meta(
|
|
86
|
+
canonical_name="context.export",
|
|
87
|
+
behavior=CommandBehavior.TRANSFORM,
|
|
88
|
+
layer=CommandLayer.BODY,
|
|
89
|
+
summary="Exports a complete operational snapshot including Mind, Body, State, and Vector data.",
|
|
90
|
+
dangerous=True,
|
|
91
|
+
)
|
|
92
|
+
# ID: a09e7c1d-791a-4132-bd51-146e468b8d89
|
|
93
|
+
def export_context_cmd(
|
|
94
|
+
output_dir: Path = typer.Option(
|
|
95
|
+
Path("./scripts/exports"),
|
|
96
|
+
"--output-dir",
|
|
97
|
+
help="Directory to write export bundle into",
|
|
98
|
+
),
|
|
99
|
+
db_url: str = typer.Option(None, "--db-url", help="Database URL override"),
|
|
100
|
+
qdrant_url: str = typer.Option(None, "--qdrant-url", help="Qdrant URL override"),
|
|
101
|
+
qdrant_collection: str = typer.Option(
|
|
102
|
+
None, "--qdrant-collection", help="Qdrant collection override"
|
|
103
|
+
),
|
|
104
|
+
):
|
|
105
|
+
"""
|
|
106
|
+
Export a complete operational snapshot (Mind/Body/State/Vectors).
|
|
107
|
+
Wraps body.maintenance.scripts.context_export.
|
|
108
|
+
"""
|
|
109
|
+
# Prepare arguments to look like sys.argv for the existing script logic
|
|
110
|
+
# This avoids rewriting the complex argparse logic inside the script for now.
|
|
111
|
+
args = ["context_export", "--output-dir", str(output_dir)]
|
|
112
|
+
|
|
113
|
+
if db_url:
|
|
114
|
+
args.extend(["--db-url", db_url])
|
|
115
|
+
if qdrant_url:
|
|
116
|
+
args.extend(["--qdrant-url", qdrant_url])
|
|
117
|
+
if qdrant_collection:
|
|
118
|
+
args.extend(["--qdrant-collection", qdrant_collection])
|
|
119
|
+
|
|
120
|
+
# Patch sys.argv temporarily to invoke the script's main
|
|
121
|
+
original_argv = sys.argv
|
|
122
|
+
try:
|
|
123
|
+
sys.argv = args
|
|
124
|
+
context_export.main()
|
|
125
|
+
except SystemExit as e:
|
|
126
|
+
# The script calls sys.exit(), we catch it to prevent CLI crash
|
|
127
|
+
if e.code != 0:
|
|
128
|
+
raise typer.Exit(e.code)
|
|
129
|
+
except Exception as e:
|
|
130
|
+
logger.error("Export failed: %s", e)
|
|
131
|
+
raise typer.Exit(1)
|
|
132
|
+
finally:
|
|
133
|
+
sys.argv = original_argv
|