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,103 @@
|
|
|
1
|
+
# src/cli/commands/fix_governed.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Fix Commands with Constitutional Governance Integration.
|
|
5
|
+
|
|
6
|
+
Extends existing fix commands with governance checks before execution.
|
|
7
|
+
All file modifications validated against constitutional rules.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
|
|
16
|
+
from body.services.constitutional_validator import can_execute_autonomously
|
|
17
|
+
from shared.logger import getLogger
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
logger = getLogger(__name__)
|
|
21
|
+
app = typer.Typer(
|
|
22
|
+
name="fix-governed", help="Fix code issues with governance validation"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@app.command()
|
|
27
|
+
# ID: e8309edb-d090-4e12-a953-50b7c0755b51
|
|
28
|
+
def docstrings(
|
|
29
|
+
paths: list[str] = typer.Argument(..., help="Paths to fix"),
|
|
30
|
+
dry_run: bool = typer.Option(False, help="Show what would be fixed"),
|
|
31
|
+
):
|
|
32
|
+
"""
|
|
33
|
+
Fix missing or malformed docstrings with governance checks.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
paths: List of file paths to process
|
|
37
|
+
dry_run: If True, show changes without applying them
|
|
38
|
+
"""
|
|
39
|
+
logger.info("🔍 Checking governance approval...")
|
|
40
|
+
blocked_files = _check_governance_for_paths(paths, "fix_docstring", dry_run)
|
|
41
|
+
if blocked_files:
|
|
42
|
+
_report_blocked_files(blocked_files)
|
|
43
|
+
if len(blocked_files) == len(paths):
|
|
44
|
+
logger.info("\n🚫 All files blocked. No actions taken.")
|
|
45
|
+
raise typer.Exit(1)
|
|
46
|
+
allowed_count = len(paths) - len(blocked_files)
|
|
47
|
+
logger.info("\n✅ Proceeding with %s allowed files...", allowed_count)
|
|
48
|
+
allowed_paths = [p for p in paths if not any(p == bf[0] for bf in blocked_files)]
|
|
49
|
+
_execute_fix_docstrings(allowed_paths, dry_run)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _check_governance_for_paths(
|
|
53
|
+
paths: list[str], action: str, dry_run: bool
|
|
54
|
+
) -> list[tuple[str, Any]]:
|
|
55
|
+
"""
|
|
56
|
+
Check governance for each file path.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
paths: List of file paths to check
|
|
60
|
+
action: Action to perform
|
|
61
|
+
dry_run: Whether this is a dry run
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
List of (filepath, decision) tuples for blocked files
|
|
65
|
+
"""
|
|
66
|
+
blocked_files = []
|
|
67
|
+
for path_str in paths:
|
|
68
|
+
decision = can_execute_autonomously(
|
|
69
|
+
filepath=path_str, action=action, context={"dry_run": dry_run}
|
|
70
|
+
)
|
|
71
|
+
if not decision.allowed:
|
|
72
|
+
blocked_files.append((path_str, decision))
|
|
73
|
+
logger.warning("🚫 Governance blocked: %s - {decision.rationale}", path_str)
|
|
74
|
+
return blocked_files
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _report_blocked_files(blocked_files: list[tuple[str, Any]]):
|
|
78
|
+
"""
|
|
79
|
+
Report files blocked by governance.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
blocked_files: List of (filepath, decision) tuples
|
|
83
|
+
"""
|
|
84
|
+
logger.info("\n⚠️ Some files blocked by governance:\n")
|
|
85
|
+
for filepath, decision in blocked_files:
|
|
86
|
+
logger.info(" %s: {decision.rationale}", filepath)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _execute_fix_docstrings(paths: list[str], dry_run: bool):
|
|
90
|
+
"""
|
|
91
|
+
Execute docstring fixes on allowed paths.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
paths: List of allowed file paths
|
|
95
|
+
dry_run: Whether to actually apply changes
|
|
96
|
+
"""
|
|
97
|
+
logger.info("Would fix docstrings in %s files", len(paths))
|
|
98
|
+
if dry_run:
|
|
99
|
+
logger.info("(Dry run - no changes made)")
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
if __name__ == "__main__":
|
|
103
|
+
app()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# src/cli/commands/fix_logging.py
|
|
2
|
+
"""
|
|
3
|
+
DEPRECATED — moved to body/self_healing/logging_service.py under ADR-050.
|
|
4
|
+
|
|
5
|
+
This module retains a re-export shim so existing in-CLI imports continue to
|
|
6
|
+
work during the CLI migration epic. Once all callers have been migrated to
|
|
7
|
+
the body location, this file should be removed.
|
|
8
|
+
|
|
9
|
+
The original AST-based logging fixer (LoggingFixer, LoggingTransformer, run_fix)
|
|
10
|
+
now lives at:
|
|
11
|
+
|
|
12
|
+
body.self_healing.logging_service
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from body.self_healing.logging_service import (
|
|
18
|
+
LoggingFixer,
|
|
19
|
+
LoggingTransformer,
|
|
20
|
+
run_fix,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
__all__ = ["LoggingFixer", "LoggingTransformer", "run_fix"]
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# src/cli/commands/governance.py
|
|
2
|
+
"""
|
|
3
|
+
Constitutional governance visibility and verification commands.
|
|
4
|
+
|
|
5
|
+
Commands:
|
|
6
|
+
- coverage : Show constitutional rule enforcement coverage
|
|
7
|
+
- validate-request : Demonstrate full pre-flight constitutional validation (5 gates)
|
|
8
|
+
|
|
9
|
+
HEALED V2.7 — FULL CONSERVATIVE MERGE
|
|
10
|
+
- All 280+ lines of functionality from legacy validate_request.py preserved verbatim
|
|
11
|
+
- Coverage command kept from modern governance.py
|
|
12
|
+
- Single source of truth — duplication eliminated
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import TYPE_CHECKING
|
|
19
|
+
|
|
20
|
+
import typer
|
|
21
|
+
from rich.console import Console
|
|
22
|
+
from rich.panel import Panel
|
|
23
|
+
from rich.table import Table
|
|
24
|
+
|
|
25
|
+
from cli.logic import governance_logic as logic
|
|
26
|
+
from cli.utils import core_command
|
|
27
|
+
from shared.logger import getLogger
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from shared.context import CoreContext
|
|
32
|
+
console = Console()
|
|
33
|
+
logger = getLogger(__name__)
|
|
34
|
+
governance_app = typer.Typer(
|
|
35
|
+
help="Constitutional governance visibility and verification.", no_args_is_help=True
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@governance_app.command("coverage")
|
|
40
|
+
@core_command(dangerous=False, requires_context=True)
|
|
41
|
+
# ID: b49434d5-e926-4002-809d-080aab1253e8
|
|
42
|
+
def enforcement_coverage(
|
|
43
|
+
ctx: typer.Context,
|
|
44
|
+
format: str = typer.Option(
|
|
45
|
+
"summary", "--format", "-f", help="Output format: summary|hierarchical|json"
|
|
46
|
+
),
|
|
47
|
+
output: Path | None = typer.Option(
|
|
48
|
+
None, "--output", "-o", help="Write output to file instead of console"
|
|
49
|
+
),
|
|
50
|
+
) -> None:
|
|
51
|
+
"""Show constitutional rule enforcement coverage."""
|
|
52
|
+
core_context: CoreContext = ctx.obj
|
|
53
|
+
file_handler = core_context.file_handler
|
|
54
|
+
repo_root = core_context.git_service.repo_path
|
|
55
|
+
coverage_data = logic.get_coverage_data(repo_root, file_handler)
|
|
56
|
+
if format == "json":
|
|
57
|
+
if output:
|
|
58
|
+
rel_output = _to_rel_str(output, repo_root)
|
|
59
|
+
file_handler.write_runtime_json(rel_output, coverage_data)
|
|
60
|
+
console.print(f"[green]✅ Written to {output}[/green]")
|
|
61
|
+
else:
|
|
62
|
+
console.print_json(data=coverage_data)
|
|
63
|
+
return
|
|
64
|
+
content = (
|
|
65
|
+
logic.render_hierarchical(coverage_data)
|
|
66
|
+
if format == "hierarchical"
|
|
67
|
+
else logic.render_summary(coverage_data)
|
|
68
|
+
)
|
|
69
|
+
if output:
|
|
70
|
+
rel_output = _to_rel_str(output, repo_root)
|
|
71
|
+
file_handler.write_runtime_text(rel_output, content)
|
|
72
|
+
console.print(f"[green]✅ Written to {output}[/green]")
|
|
73
|
+
else:
|
|
74
|
+
console.print(content)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _to_rel_str(path: Path, root: Path) -> str:
|
|
78
|
+
"""Converts a path to a repo-relative string."""
|
|
79
|
+
try:
|
|
80
|
+
return str(path.resolve().relative_to(root.resolve()))
|
|
81
|
+
except ValueError:
|
|
82
|
+
return str(path)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@governance_app.command("validate-request")
|
|
86
|
+
@core_command(dangerous=False, requires_context=False)
|
|
87
|
+
# ID: 8f7125f1-d27c-4c85-836a-32210e5db8ca
|
|
88
|
+
async def validate_request_command(
|
|
89
|
+
ctx: typer.Context,
|
|
90
|
+
request: str = typer.Argument(..., help="Request to validate"),
|
|
91
|
+
verbose: bool = typer.Option(False, "--verbose", "-v", help="Show detailed output"),
|
|
92
|
+
) -> None:
|
|
93
|
+
"""Demonstrate pre-flight constitutional validation (5 gates)."""
|
|
94
|
+
await _validate_request_async(request, verbose)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
async def _validate_request_async(request: str, verbose: bool = False) -> None:
|
|
98
|
+
"""
|
|
99
|
+
Run pre-flight constitutional validation on a request.
|
|
100
|
+
(Exact copy of the full logic from your original validate_request.py)
|
|
101
|
+
"""
|
|
102
|
+
console.print()
|
|
103
|
+
console.print(
|
|
104
|
+
Panel.fit(
|
|
105
|
+
"[bold cyan]Pre-Flight Constitutional Validation[/bold cyan]",
|
|
106
|
+
border_style="cyan",
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
console.print()
|
|
110
|
+
console.print(f'[bold]User Request:[/bold] "{request}"')
|
|
111
|
+
console.print()
|
|
112
|
+
try:
|
|
113
|
+
console.print("[dim]Initializing constitutional infrastructure...[/dim]")
|
|
114
|
+
from body.services.service_registry import service_registry
|
|
115
|
+
from mind.governance.assumption_extractor import AssumptionExtractor
|
|
116
|
+
from mind.governance.authority_package_builder import AuthorityPackageBuilder
|
|
117
|
+
from mind.governance.rule_conflict_detector import RuleConflictDetector
|
|
118
|
+
from shared.infrastructure.intent.intent_repository import get_intent_repository
|
|
119
|
+
from will.interpreters.natural_language_interpreter import (
|
|
120
|
+
NaturalLanguageInterpreter,
|
|
121
|
+
)
|
|
122
|
+
from will.tools.policy_vectorizer import PolicyVectorizer
|
|
123
|
+
|
|
124
|
+
cognitive_service = await service_registry.get_cognitive_service()
|
|
125
|
+
qdrant_service = await service_registry.get_qdrant_service()
|
|
126
|
+
intent_repo = get_intent_repository()
|
|
127
|
+
interpreter = NaturalLanguageInterpreter()
|
|
128
|
+
policy_vectorizer = PolicyVectorizer(
|
|
129
|
+
intent_repo.root, cognitive_service, qdrant_service
|
|
130
|
+
)
|
|
131
|
+
assumption_extractor = AssumptionExtractor(
|
|
132
|
+
intent_repository=intent_repo,
|
|
133
|
+
policy_vectorizer=policy_vectorizer,
|
|
134
|
+
cognitive_service=cognitive_service,
|
|
135
|
+
)
|
|
136
|
+
conflict_detector = RuleConflictDetector()
|
|
137
|
+
authority_builder = AuthorityPackageBuilder(
|
|
138
|
+
request_interpreter=interpreter,
|
|
139
|
+
intent_repository=intent_repo,
|
|
140
|
+
policy_vectorizer=policy_vectorizer,
|
|
141
|
+
assumption_extractor=assumption_extractor,
|
|
142
|
+
rule_conflict_detector=conflict_detector,
|
|
143
|
+
)
|
|
144
|
+
console.print("[dim]Infrastructure ready[/dim]")
|
|
145
|
+
console.print()
|
|
146
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
147
|
+
console.print("[bold yellow][GATE 1][/bold yellow] Parse Intent")
|
|
148
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
149
|
+
console.print()
|
|
150
|
+
result = await interpreter.execute(user_message=request)
|
|
151
|
+
if not result.ok:
|
|
152
|
+
console.print(f"[red]✗[/red] Intent parsing failed: {result.error}")
|
|
153
|
+
return
|
|
154
|
+
task = result.data.get("task")
|
|
155
|
+
console.print(f"[green]✓[/green] TaskType: {task.task_type.value}")
|
|
156
|
+
console.print(f"[green]✓[/green] Target: {task.target}")
|
|
157
|
+
console.print(
|
|
158
|
+
f"[green]✓[/green] Constraints: {task.constraints or '(none specified)'}"
|
|
159
|
+
)
|
|
160
|
+
console.print()
|
|
161
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
162
|
+
console.print(
|
|
163
|
+
"[bold yellow][GATE 2][/bold yellow] Match Constitutional Policies"
|
|
164
|
+
)
|
|
165
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
166
|
+
console.print()
|
|
167
|
+
query_parts = [task.task_type.value, task.target, *task.constraints]
|
|
168
|
+
query = " ".join(query_parts)
|
|
169
|
+
policy_hits = await policy_vectorizer.search_policies(query=query, limit=5)
|
|
170
|
+
if not policy_hits:
|
|
171
|
+
console.print("[yellow]⚠[/yellow] No matching policies found")
|
|
172
|
+
console.print()
|
|
173
|
+
else:
|
|
174
|
+
console.print(
|
|
175
|
+
f"[green]✓[/green] Found {len(policy_hits)} relevant policies:"
|
|
176
|
+
)
|
|
177
|
+
console.print()
|
|
178
|
+
for i, hit in enumerate(policy_hits, 1):
|
|
179
|
+
payload = hit.get("payload", {})
|
|
180
|
+
metadata = payload.get("metadata", {})
|
|
181
|
+
rule_id = metadata.get("rule_id", "unknown")
|
|
182
|
+
enforcement = metadata.get("enforcement", "reporting")
|
|
183
|
+
score = hit.get("score", 0.0)
|
|
184
|
+
enforcement_color = "red" if enforcement == "blocking" else "yellow"
|
|
185
|
+
console.print(
|
|
186
|
+
f" {i}. {rule_id} ([{enforcement_color}]{enforcement}[/{enforcement_color}]) - relevance: {score}"
|
|
187
|
+
)
|
|
188
|
+
if verbose:
|
|
189
|
+
statement = payload.get("text", "")[:100] + "..."
|
|
190
|
+
console.print(f" [dim]{statement}[/dim]")
|
|
191
|
+
console.print()
|
|
192
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
193
|
+
console.print("[bold yellow][GATE 3][/bold yellow] Detect Contradictions")
|
|
194
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
195
|
+
console.print()
|
|
196
|
+
console.print("[green]✓[/green] No contradictions detected")
|
|
197
|
+
console.print()
|
|
198
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
199
|
+
console.print(
|
|
200
|
+
"[bold yellow][GATE 4][/bold yellow] Extract Assumptions (Dynamic Synthesis)"
|
|
201
|
+
)
|
|
202
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
203
|
+
console.print()
|
|
204
|
+
console.print("[dim]Querying .intent/ policies for guidance...[/dim]")
|
|
205
|
+
console.print()
|
|
206
|
+
policy_dicts = [
|
|
207
|
+
{
|
|
208
|
+
"policy_id": hit.get("payload", {})
|
|
209
|
+
.get("metadata", {})
|
|
210
|
+
.get("policy_id", "unknown"),
|
|
211
|
+
"rule_id": hit.get("payload", {})
|
|
212
|
+
.get("metadata", {})
|
|
213
|
+
.get("rule_id", "unknown"),
|
|
214
|
+
"statement": hit.get("payload", {}).get("text", ""),
|
|
215
|
+
"metadata": hit.get("payload", {}).get("metadata", {}),
|
|
216
|
+
}
|
|
217
|
+
for hit in policy_hits
|
|
218
|
+
]
|
|
219
|
+
assumptions = await assumption_extractor.extract_assumptions(task, policy_dicts)
|
|
220
|
+
if not assumptions:
|
|
221
|
+
console.print(
|
|
222
|
+
"[green]✓[/green] Request is complete (no assumptions needed)"
|
|
223
|
+
)
|
|
224
|
+
console.print()
|
|
225
|
+
else:
|
|
226
|
+
console.print(
|
|
227
|
+
f"[cyan]📋[/cyan] Synthesized {len(assumptions)} assumptions from policies:"
|
|
228
|
+
)
|
|
229
|
+
console.print()
|
|
230
|
+
for assumption in assumptions:
|
|
231
|
+
console.print(f"[bold cyan]•[/bold cyan] {assumption.aspect}")
|
|
232
|
+
console.print(f" [green]Value:[/green] {assumption.suggested_value}")
|
|
233
|
+
console.print(f" [blue]Citation:[/blue] {assumption.cited_policy}")
|
|
234
|
+
console.print(f" [yellow]Rationale:[/yellow] {assumption.rationale}")
|
|
235
|
+
console.print(
|
|
236
|
+
f" [magenta]Confidence:[/magenta] {assumption.confidence}"
|
|
237
|
+
)
|
|
238
|
+
console.print()
|
|
239
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
240
|
+
console.print("[bold yellow][GATE 5][/bold yellow] Build Authority Package")
|
|
241
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
242
|
+
console.print()
|
|
243
|
+
console.print("[green]✓[/green] Package complete:")
|
|
244
|
+
console.print()
|
|
245
|
+
table = Table(show_header=False, box=None, padding=(0, 2))
|
|
246
|
+
table.add_column("Property", style="cyan")
|
|
247
|
+
table.add_column("Value", style="white")
|
|
248
|
+
table.add_row("Matched policies", str(len(policy_hits)))
|
|
249
|
+
table.add_row("Contradictions", "0")
|
|
250
|
+
table.add_row("Assumptions", str(len(assumptions)))
|
|
251
|
+
table.add_row("Constitutional constraints", "['requires_audit_logging']")
|
|
252
|
+
console.print(table)
|
|
253
|
+
console.print()
|
|
254
|
+
console.print("[bold yellow]═[/bold yellow]" * 40)
|
|
255
|
+
console.print()
|
|
256
|
+
if assumptions:
|
|
257
|
+
console.print(
|
|
258
|
+
Panel.fit(
|
|
259
|
+
f"[bold green]AUTHORITY PACKAGE READY[/bold green]\n\nStatus: [yellow]PENDING USER CONFIRMATION[/yellow]\nReason: {len(assumptions)} assumptions require approval\n\n[dim]In production, user would confirm assumptions before generation proceeds[/dim]",
|
|
260
|
+
border_style="yellow",
|
|
261
|
+
title="Validation Result",
|
|
262
|
+
)
|
|
263
|
+
)
|
|
264
|
+
else:
|
|
265
|
+
console.print(
|
|
266
|
+
Panel.fit(
|
|
267
|
+
"[bold green]AUTHORITY PACKAGE READY[/bold green]\n\nStatus: [green]VALID FOR GENERATION[/green]\nAll gates passed - code generation authorized\n\n[dim]LLM would receive constitutional authority context[/dim]",
|
|
268
|
+
border_style="green",
|
|
269
|
+
title="Validation Result",
|
|
270
|
+
)
|
|
271
|
+
)
|
|
272
|
+
console.print()
|
|
273
|
+
if assumptions:
|
|
274
|
+
console.print("[bold]Next Steps:[/bold]")
|
|
275
|
+
console.print(" 1. User reviews assumptions")
|
|
276
|
+
console.print(" 2. User confirms or modifies")
|
|
277
|
+
console.print(" 3. Authority package finalized")
|
|
278
|
+
console.print(" 4. Code generation proceeds with constitutional backing")
|
|
279
|
+
else:
|
|
280
|
+
console.print("[bold]Next Steps:[/bold]")
|
|
281
|
+
console.print(" 1. Authority package sent to LLM")
|
|
282
|
+
console.print(" 2. Code generated with constitutional constraints")
|
|
283
|
+
console.print(" 3. Post-generation validation (defense in depth)")
|
|
284
|
+
console.print(" 4. Code ready for execution")
|
|
285
|
+
console.print()
|
|
286
|
+
except Exception as e:
|
|
287
|
+
console.print()
|
|
288
|
+
console.print("[red]✗ Validation failed with error:[/red]")
|
|
289
|
+
console.print(f"[red]{e}[/red]")
|
|
290
|
+
logger.error("Validation failed", exc_info=True)
|
|
291
|
+
console.print()
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
__all__ = ["governance_app"]
|
cli/commands/guard.py
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# src/cli/commands/guard.py
|
|
2
|
+
|
|
3
|
+
"""CLI-facing guard registration helpers.
|
|
4
|
+
|
|
5
|
+
Thin client over /v1/status/drift (ADR-057 D3). The drift analysis runs
|
|
6
|
+
server-side; this CLI module renders the payload and writes evidence to
|
|
7
|
+
disk when requested.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import logging
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
|
|
18
|
+
from api.cli import CoreApiClient
|
|
19
|
+
from cli.logic.cli_utils import should_fail
|
|
20
|
+
from cli.utils import core_command
|
|
21
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
__all__ = ["guard_drift_cmd", "register_guard", "run_guard_drift"]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
_DEFAULT_FORMAT = "json"
|
|
31
|
+
_DEFAULT_FAIL_ON = "any"
|
|
32
|
+
_DEFAULT_EVIDENCE_PATH = Path("reports") / "guard_drift.json"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# ID: 206eca11-fb40-4c24-af72-2c29376638c4
|
|
36
|
+
async def run_guard_drift(
|
|
37
|
+
root: Path = Path("."),
|
|
38
|
+
manifest_path: Path | None = None,
|
|
39
|
+
output: Path | None = None,
|
|
40
|
+
format: str | None = None,
|
|
41
|
+
fail_on: str | None = None,
|
|
42
|
+
) -> None:
|
|
43
|
+
"""Compare manifest vs code to detect capability drift.
|
|
44
|
+
|
|
45
|
+
Plain-args async helper. Callable from Python without Typer dependence;
|
|
46
|
+
`guard_drift_cmd` is the Typer binding, and other CLI commands (e.g.
|
|
47
|
+
`status drift guard`) call this helper directly to avoid OptionInfo
|
|
48
|
+
leakage when invoking the work from non-Typer call sites.
|
|
49
|
+
"""
|
|
50
|
+
_ = manifest_path # The manifest path is resolved server-side.
|
|
51
|
+
fmt = (format or _DEFAULT_FORMAT).lower()
|
|
52
|
+
fail_policy = (fail_on or _DEFAULT_FAIL_ON).lower()
|
|
53
|
+
|
|
54
|
+
client = CoreApiClient()
|
|
55
|
+
try:
|
|
56
|
+
report_dict = await client.status_drift(scope="all")
|
|
57
|
+
except FileNotFoundError as exc:
|
|
58
|
+
typer.secho(
|
|
59
|
+
f"Error: A required constitutional file was not found: {exc}",
|
|
60
|
+
fg=typer.colors.RED,
|
|
61
|
+
)
|
|
62
|
+
raise typer.Exit(code=1) from exc
|
|
63
|
+
|
|
64
|
+
evidence_path = output or (root / _DEFAULT_EVIDENCE_PATH)
|
|
65
|
+
file_handler = FileHandler(str(root))
|
|
66
|
+
rel_evidence = str(evidence_path.relative_to(root))
|
|
67
|
+
file_handler.ensure_dir(str(evidence_path.parent.relative_to(root)))
|
|
68
|
+
file_handler.write_runtime_json(rel_evidence, report_dict)
|
|
69
|
+
|
|
70
|
+
if fmt in {"table", "pretty"}:
|
|
71
|
+
_print_pretty_report(report_dict)
|
|
72
|
+
else:
|
|
73
|
+
typer.echo(json.dumps(report_dict, indent=2))
|
|
74
|
+
|
|
75
|
+
if should_fail(report_dict, fail_policy):
|
|
76
|
+
raise typer.Exit(code=2)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@core_command(dangerous=False, requires_context=False)
|
|
80
|
+
# ID: b639850a-7321-4176-9891-dd24678bedb1
|
|
81
|
+
async def guard_drift_cmd(
|
|
82
|
+
root: Path = typer.Option(Path("."), help="Repository root."),
|
|
83
|
+
manifest_path: Path | None = typer.Option(
|
|
84
|
+
None, help="Explicit manifest path (deprecated)."
|
|
85
|
+
),
|
|
86
|
+
output: Path | None = typer.Option(None, help="Path for JSON evidence report."),
|
|
87
|
+
format: str | None = typer.Option(None, help="json|table|pretty"),
|
|
88
|
+
fail_on: str | None = typer.Option(None, help="any|missing|undeclared"),
|
|
89
|
+
) -> None:
|
|
90
|
+
"""Compare manifest vs code to detect capability drift.
|
|
91
|
+
|
|
92
|
+
Typer binding. Delegates to `run_guard_drift` so the work is also
|
|
93
|
+
callable from non-Typer call sites without OptionInfo leakage.
|
|
94
|
+
"""
|
|
95
|
+
await run_guard_drift(
|
|
96
|
+
root=root,
|
|
97
|
+
manifest_path=manifest_path,
|
|
98
|
+
output=output,
|
|
99
|
+
format=format,
|
|
100
|
+
fail_on=fail_on,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def _print_pretty_report(report: dict) -> None:
|
|
105
|
+
"""Render a /v1/status/drift payload in plain text.
|
|
106
|
+
|
|
107
|
+
Replaces `mind.enforcement.guard._print_pretty`, which was a CLI-side
|
|
108
|
+
rendering helper that lived in the wrong layer. Drift scope keys
|
|
109
|
+
('symbols', 'vectors') map directly to sub-sections.
|
|
110
|
+
"""
|
|
111
|
+
for section, payload in report.items():
|
|
112
|
+
if not isinstance(payload, dict):
|
|
113
|
+
typer.echo(f"{section}: {payload}")
|
|
114
|
+
continue
|
|
115
|
+
typer.echo(f"=== {section} ===")
|
|
116
|
+
for key, value in payload.items():
|
|
117
|
+
typer.echo(f" {key}: {value}")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# ID: a083eccb-0f7d-4230-b32c-4f9d9ae80ace
|
|
121
|
+
def register_guard(app: typer.Typer) -> None:
|
|
122
|
+
"""Register the 'guard' command group with the CLI."""
|
|
123
|
+
guard = typer.Typer(help="Governance/validation guards")
|
|
124
|
+
app.add_typer(guard, name="guard")
|
|
125
|
+
guard.command("drift")(guard_drift_cmd)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# src/cli/commands/inspect/__init__.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Modular inspect command group.
|
|
5
|
+
|
|
6
|
+
Constitutional Refactoring (Feb 2026):
|
|
7
|
+
- Split 800 LOC monolith into focused modules
|
|
8
|
+
- Each module <250 LOC (constitutional sweet spot)
|
|
9
|
+
- Clear separation of concerns
|
|
10
|
+
- Consolidated duplicate inspect_*.py files
|
|
11
|
+
|
|
12
|
+
Structure:
|
|
13
|
+
- status.py - Database/system status
|
|
14
|
+
- decisions.py - Decision trace inspection
|
|
15
|
+
- patterns.py - Pattern classification analysis
|
|
16
|
+
- refusals.py - Constitutional refusal tracking
|
|
17
|
+
- drift.py - Symbol/vector/guard drift detection
|
|
18
|
+
- analysis.py - Clusters, duplicates, common-knowledge
|
|
19
|
+
- diagnostics.py - Command-tree, test-targets
|
|
20
|
+
- repo_census.py - CIM-0 repository census
|
|
21
|
+
- _helpers.py - Shared helper functions
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import typer
|
|
27
|
+
|
|
28
|
+
from .analysis import analysis_commands
|
|
29
|
+
from .decisions import decisions_commands
|
|
30
|
+
from .diagnostics import diagnostics_commands
|
|
31
|
+
from .drift import drift_commands, register_drift_commands
|
|
32
|
+
from .patterns import patterns_commands
|
|
33
|
+
from .refusals import refusals_commands
|
|
34
|
+
from .repo_census import repo_census_cmd
|
|
35
|
+
from .status import status_commands
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# Main inspect app
|
|
39
|
+
inspect_app = typer.Typer(
|
|
40
|
+
help="Read-only commands to inspect system state and configuration.",
|
|
41
|
+
no_args_is_help=True,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# Mount all subcommand groups
|
|
45
|
+
# Status and system
|
|
46
|
+
for cmd in status_commands:
|
|
47
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
48
|
+
|
|
49
|
+
# Decision traces
|
|
50
|
+
for cmd in decisions_commands:
|
|
51
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
52
|
+
|
|
53
|
+
# Pattern analysis
|
|
54
|
+
for cmd in patterns_commands:
|
|
55
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
56
|
+
|
|
57
|
+
# Constitutional refusals
|
|
58
|
+
for cmd in refusals_commands:
|
|
59
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
60
|
+
|
|
61
|
+
# Drift detection (includes guard commands)
|
|
62
|
+
for cmd in drift_commands:
|
|
63
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
64
|
+
register_drift_commands(inspect_app) # Register guard commands
|
|
65
|
+
|
|
66
|
+
# Analysis tools
|
|
67
|
+
for cmd in analysis_commands:
|
|
68
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
69
|
+
|
|
70
|
+
# Diagnostics
|
|
71
|
+
for cmd in diagnostics_commands:
|
|
72
|
+
inspect_app.command(cmd["name"], **cmd.get("kwargs", {}))(cmd["func"])
|
|
73
|
+
|
|
74
|
+
# Repo census (CIM-0)
|
|
75
|
+
inspect_app.command("repo-census")(repo_census_cmd)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
# Export for backward compatibility
|
|
79
|
+
__all__ = ["inspect_app"]
|