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,56 @@
|
|
|
1
|
+
# src/cli/resources/admin/validate_env.py
|
|
2
|
+
"""
|
|
3
|
+
Admin Validate-Env Command - Configuration Hardening.
|
|
4
|
+
Enforces the environment schema to prevent runtime connectivity failures.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import typer
|
|
10
|
+
from rich.console import Console
|
|
11
|
+
from rich.table import Table
|
|
12
|
+
|
|
13
|
+
from cli.utils import core_command
|
|
14
|
+
from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
|
|
15
|
+
from shared.infrastructure.config_validator import ConfigValidator
|
|
16
|
+
|
|
17
|
+
from .hub import app
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
console = Console()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@app.command("validate-env")
|
|
24
|
+
@command_meta(
|
|
25
|
+
canonical_name="admin.validate-env",
|
|
26
|
+
behavior=CommandBehavior.VALIDATE,
|
|
27
|
+
layer=CommandLayer.BODY,
|
|
28
|
+
summary="Validate that the environment configuration matches the required schema.",
|
|
29
|
+
)
|
|
30
|
+
@core_command(dangerous=False, requires_context=False)
|
|
31
|
+
# ID: 412de56b-4db4-4e02-af43-53915b94e20e
|
|
32
|
+
def admin_validate_env_cmd(ctx: typer.Context) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Check .env for missing keys or invalid formats.
|
|
35
|
+
Ensures the 'Body' has correct coordinates for its 'Nerves' (DB/Vectors).
|
|
36
|
+
"""
|
|
37
|
+
validator = ConfigValidator()
|
|
38
|
+
console.print(
|
|
39
|
+
"\n[bold cyan]🛡️ Audit: Environment Schema Validation...[/bold cyan]\n"
|
|
40
|
+
)
|
|
41
|
+
result = validator.validate_env()
|
|
42
|
+
if result.ok:
|
|
43
|
+
console.print(
|
|
44
|
+
"[bold green]✅ Environment Valid: All required configuration keys are present and correctly formatted.[/bold green]\n"
|
|
45
|
+
)
|
|
46
|
+
else:
|
|
47
|
+
console.print("[bold red]❌ Configuration Errors Detected:[/bold red]")
|
|
48
|
+
table = Table(show_header=True, header_style="bold red")
|
|
49
|
+
table.add_column("Issue Description", style="yellow")
|
|
50
|
+
for error in result.errors:
|
|
51
|
+
table.add_row(error)
|
|
52
|
+
console.print(table)
|
|
53
|
+
console.print(
|
|
54
|
+
"\n[dim]Please update your .env file and re-run this check.[/dim]\n"
|
|
55
|
+
)
|
|
56
|
+
raise typer.Exit(code=1)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# src/cli/resources/code/__init__.py
|
|
2
|
+
"""Codebase resource hub."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
# 2. Import modules RELATIVELY to trigger the @app.command registrations
|
|
7
|
+
# We don't need to assign these to variables; the import itself runs the decorators
|
|
8
|
+
from . import (
|
|
9
|
+
actions,
|
|
10
|
+
audit,
|
|
11
|
+
audit_duplicates,
|
|
12
|
+
check_imports,
|
|
13
|
+
check_ui,
|
|
14
|
+
clarity,
|
|
15
|
+
complexity,
|
|
16
|
+
docstrings,
|
|
17
|
+
fix_atomic,
|
|
18
|
+
format,
|
|
19
|
+
integrity,
|
|
20
|
+
lint,
|
|
21
|
+
logging,
|
|
22
|
+
refactor,
|
|
23
|
+
test,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
# 1. Import the 'app' from hub so it's available for admin_cli.py
|
|
27
|
+
from .hub import app
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# 3. Export the app object
|
|
31
|
+
__all__ = ["app"]
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# src/cli/resources/code/actions.py
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.table import Table
|
|
6
|
+
|
|
7
|
+
from api.cli import CoreApiClient
|
|
8
|
+
from cli.utils import core_command
|
|
9
|
+
from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
|
|
10
|
+
|
|
11
|
+
from .hub import app
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
console = Console()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@app.command("actions")
|
|
19
|
+
@command_meta(
|
|
20
|
+
canonical_name="code.actions",
|
|
21
|
+
behavior=CommandBehavior.READ,
|
|
22
|
+
layer=CommandLayer.BODY,
|
|
23
|
+
summary="List all registered Atomic Actions showing their IDs, categories, impact levels, and descriptions.",
|
|
24
|
+
dangerous=False,
|
|
25
|
+
)
|
|
26
|
+
@core_command(dangerous=False, requires_context=False)
|
|
27
|
+
# ID: 4f8e13a3-f017-4d0f-a6ef-340f81d05341
|
|
28
|
+
async def list_actions_cmd() -> None:
|
|
29
|
+
"""
|
|
30
|
+
List all registered Atomic Actions (Body Capabilities).
|
|
31
|
+
Shows IDs, categories, and impact levels for autonomous building blocks.
|
|
32
|
+
"""
|
|
33
|
+
client = CoreApiClient()
|
|
34
|
+
payload = await client.list_actions()
|
|
35
|
+
actions = payload.get("actions", [])
|
|
36
|
+
table = Table(title="Registered Atomic Actions", header_style="bold green")
|
|
37
|
+
table.add_column("Action ID", style="cyan")
|
|
38
|
+
table.add_column("Category", style="blue")
|
|
39
|
+
table.add_column("Impact", style="magenta")
|
|
40
|
+
table.add_column("Description")
|
|
41
|
+
for action in sorted(actions, key=lambda a: a.get("action_id", "")):
|
|
42
|
+
table.add_row(
|
|
43
|
+
action.get("action_id", ""),
|
|
44
|
+
action.get("category", ""),
|
|
45
|
+
action.get("impact_level", ""),
|
|
46
|
+
action.get("description", ""),
|
|
47
|
+
)
|
|
48
|
+
console.print(table)
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
# src/cli/resources/code/audit.py
|
|
2
|
+
"""Constitutional Audit CLI Command.
|
|
3
|
+
|
|
4
|
+
ADR-054 Phase 1: this CLI is a thin client over `POST /v1/audit/runs`
|
|
5
|
+
with `wait=true`. The server runs the audit, persists the
|
|
6
|
+
`core.audit_runs` row, and writes the report files; the CLI only
|
|
7
|
+
renders the result and sets the exit code.
|
|
8
|
+
|
|
9
|
+
Display-only options (`--severity`, `--verbose`, `--classify`) stay
|
|
10
|
+
client-side. Audit-shaping options (`--rule`, `--policy`, `--files`,
|
|
11
|
+
`--force-llm`) are forwarded to the server.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import logging
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
import typer
|
|
21
|
+
from rich.console import Console
|
|
22
|
+
|
|
23
|
+
from api.cli.client import CoreApiClient
|
|
24
|
+
from body.services.coherence_service import CoherenceService
|
|
25
|
+
from body.services.representation_coherence_service import (
|
|
26
|
+
RepresentationCoherenceService,
|
|
27
|
+
)
|
|
28
|
+
from cli.commands.check.converters import parse_min_severity
|
|
29
|
+
from cli.commands.check.formatters import (
|
|
30
|
+
print_context_build_hints,
|
|
31
|
+
print_summary_findings,
|
|
32
|
+
print_verbose_findings,
|
|
33
|
+
)
|
|
34
|
+
from cli.logic.audit_renderer import AuditStats, render_overview, to_audit_finding
|
|
35
|
+
from cli.utils import core_command
|
|
36
|
+
from cli.utils.annotation_formatter import format_payload
|
|
37
|
+
from cli.utils.exit_codes import (
|
|
38
|
+
EXIT_CONFIG_ERROR,
|
|
39
|
+
EXIT_FINDINGS,
|
|
40
|
+
EXIT_INTERNAL_ERROR,
|
|
41
|
+
EXIT_OK,
|
|
42
|
+
)
|
|
43
|
+
from mind.governance.stateless_audit import run_stateless_audit
|
|
44
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
45
|
+
from shared.infrastructure.intent.intent_repository import get_intent_repository
|
|
46
|
+
from shared.path_utils import get_repo_root
|
|
47
|
+
|
|
48
|
+
from .hub import app
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
console = Console()
|
|
52
|
+
logger = logging.getLogger(__name__)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@app.command("audit")
|
|
56
|
+
@core_command(dangerous=False, requires_context=False)
|
|
57
|
+
# ID: 67107783-c506-4634-a23c-c118e86befa8
|
|
58
|
+
async def audit_command(
|
|
59
|
+
ctx: typer.Context,
|
|
60
|
+
severity: str = typer.Option("high", "--severity", "-s"),
|
|
61
|
+
rule: list[str] = typer.Option([], "--rule", "-r"),
|
|
62
|
+
policy: list[str] = typer.Option([], "--policy", "-p"),
|
|
63
|
+
files: list[str] = typer.Option(
|
|
64
|
+
[],
|
|
65
|
+
"--files",
|
|
66
|
+
"-f",
|
|
67
|
+
help=(
|
|
68
|
+
"Scope per-file rules to these paths (repo-relative or "
|
|
69
|
+
"absolute, repeatable). Context-level rules skip with a "
|
|
70
|
+
"warning. Closes #279 — enables pre-commit-style focused audits."
|
|
71
|
+
),
|
|
72
|
+
),
|
|
73
|
+
verbose: bool = typer.Option(False, "--verbose", "-v"),
|
|
74
|
+
classify: bool = typer.Option(
|
|
75
|
+
False,
|
|
76
|
+
"--classify",
|
|
77
|
+
help="Print context build commands for all findings.",
|
|
78
|
+
),
|
|
79
|
+
force_llm: bool = typer.Option(
|
|
80
|
+
False,
|
|
81
|
+
"--force-llm",
|
|
82
|
+
help=(
|
|
83
|
+
"Bypass the ADR-044 llm_gate verdict cache for this run. "
|
|
84
|
+
"Every llm_gate rule re-evaluates every pre-selected file via "
|
|
85
|
+
"Ollama; cache rows are still updated with fresh verdicts. "
|
|
86
|
+
"Use after suspect cache state or to validate a model upgrade."
|
|
87
|
+
),
|
|
88
|
+
),
|
|
89
|
+
offline: bool = typer.Option(
|
|
90
|
+
False,
|
|
91
|
+
"--offline",
|
|
92
|
+
help=(
|
|
93
|
+
"F-10.1b: run the constitutional audit without core-api / "
|
|
94
|
+
"core-daemon / Postgres / Qdrant. Used by the F-10 CI/CD gate "
|
|
95
|
+
"and the F-10.5 pre-commit hook. Rules requiring the knowledge "
|
|
96
|
+
"graph or LLM (knowledge_gate, llm_gate) are skipped with a "
|
|
97
|
+
"structured reason and surfaced in skipped_rules. See "
|
|
98
|
+
"ADR-085 §D5 for the F-10 exit criterion this serves."
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
output_format: str = typer.Option(
|
|
102
|
+
"text",
|
|
103
|
+
"--format",
|
|
104
|
+
help=(
|
|
105
|
+
"F-10.1b / F-10.2: output format. `text` (default) renders "
|
|
106
|
+
"the human-readable Rich output. `json` emits the F-10.1a "
|
|
107
|
+
"payload verbatim on stdout (schema documented in #535). "
|
|
108
|
+
"`github-annotations` emits GitHub Actions workflow-command "
|
|
109
|
+
"lines so findings surface inline in PR diff view "
|
|
110
|
+
"(#529 / F-10.2). Non-text formats require --offline; the "
|
|
111
|
+
"daemon-driven path has a different result shape."
|
|
112
|
+
),
|
|
113
|
+
),
|
|
114
|
+
) -> None:
|
|
115
|
+
"""Run the constitutional self-audit.
|
|
116
|
+
|
|
117
|
+
Default mode: HTTP client over /v1/audit/runs (requires core-api).
|
|
118
|
+
With --offline: stateless invocation without daemon/DB (F-10 CI gate).
|
|
119
|
+
"""
|
|
120
|
+
min_severity = parse_min_severity(severity)
|
|
121
|
+
|
|
122
|
+
if output_format not in {"text", "json", "github-annotations"}:
|
|
123
|
+
console.print(
|
|
124
|
+
f"[bold red]--format must be one of "
|
|
125
|
+
f"text|json|github-annotations[/bold red] (got {output_format!r})"
|
|
126
|
+
)
|
|
127
|
+
raise typer.Exit(EXIT_CONFIG_ERROR)
|
|
128
|
+
|
|
129
|
+
if output_format != "text" and not offline:
|
|
130
|
+
console.print(
|
|
131
|
+
f"[bold red]--format={output_format} currently requires "
|
|
132
|
+
f"--offline[/bold red] (daemon-driven path has a different "
|
|
133
|
+
"result shape; see #535)"
|
|
134
|
+
)
|
|
135
|
+
raise typer.Exit(EXIT_CONFIG_ERROR)
|
|
136
|
+
|
|
137
|
+
if offline:
|
|
138
|
+
await _run_offline_audit(
|
|
139
|
+
files=list(files),
|
|
140
|
+
min_severity_str=severity,
|
|
141
|
+
output_format=output_format,
|
|
142
|
+
)
|
|
143
|
+
return
|
|
144
|
+
|
|
145
|
+
client = CoreApiClient()
|
|
146
|
+
result = await client.audit(
|
|
147
|
+
rule_ids=list(rule),
|
|
148
|
+
policy_ids=list(policy),
|
|
149
|
+
files=list(files),
|
|
150
|
+
force_llm=force_llm,
|
|
151
|
+
source="manual",
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
raw_stats = result.get("stats", {}) or {}
|
|
155
|
+
audit_stats = AuditStats(
|
|
156
|
+
total_rules=raw_stats.get("total_executable_rules", 0),
|
|
157
|
+
executed_rules=raw_stats.get("executed_dynamic_rules", 0),
|
|
158
|
+
coverage_percent=raw_stats.get("coverage_percent", 0),
|
|
159
|
+
total_declared_rules=raw_stats.get("total_declared_rules", 0),
|
|
160
|
+
crashed_rules=raw_stats.get("crashed_rules", 0),
|
|
161
|
+
unmapped_rules=raw_stats.get("unmapped_rules", 0),
|
|
162
|
+
effective_coverage_percent=raw_stats.get("effective_coverage_percent", 0),
|
|
163
|
+
# ADR-076 D4
|
|
164
|
+
context_level_rules=raw_stats.get("context_level_rules", 0),
|
|
165
|
+
per_file_rules=raw_stats.get("per_file_rules", 0),
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
all_findings = [to_audit_finding(f) for f in result.get("findings", [])]
|
|
169
|
+
filtered_findings = [f for f in all_findings if f.severity >= min_severity]
|
|
170
|
+
|
|
171
|
+
render_overview(
|
|
172
|
+
console,
|
|
173
|
+
all_findings,
|
|
174
|
+
audit_stats,
|
|
175
|
+
result.get("duration_sec", 0.0),
|
|
176
|
+
result["passed"],
|
|
177
|
+
verdict_str=result["verdict"],
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# ADR-067 D5: append Constitutional Coherence advisory. Advisory only —
|
|
181
|
+
# any CCC DB failure is logged and the line silently skipped so audit
|
|
182
|
+
# semantics are not affected.
|
|
183
|
+
try:
|
|
184
|
+
async with get_session() as session:
|
|
185
|
+
await _print_coherence_advisory(console, CoherenceService(session))
|
|
186
|
+
except Exception as exc:
|
|
187
|
+
logger.warning("CCC advisory line skipped: %s", exc)
|
|
188
|
+
|
|
189
|
+
# ADR-070 D6: append Representation Coherence advisory. Advisory only —
|
|
190
|
+
# any inventory load or DB failure is logged and the line silently
|
|
191
|
+
# skipped so audit semantics are not affected.
|
|
192
|
+
try:
|
|
193
|
+
async with get_session() as session:
|
|
194
|
+
await _print_representation_coherence_advisory(
|
|
195
|
+
console, RepresentationCoherenceService(session)
|
|
196
|
+
)
|
|
197
|
+
except Exception as exc:
|
|
198
|
+
logger.warning("Representation Coherence advisory line skipped: %s", exc)
|
|
199
|
+
|
|
200
|
+
if filtered_findings:
|
|
201
|
+
if verbose:
|
|
202
|
+
print_verbose_findings(filtered_findings)
|
|
203
|
+
else:
|
|
204
|
+
print_summary_findings(filtered_findings)
|
|
205
|
+
|
|
206
|
+
if classify:
|
|
207
|
+
print_context_build_hints(all_findings)
|
|
208
|
+
|
|
209
|
+
if not result["passed"]:
|
|
210
|
+
print_context_build_hints(all_findings)
|
|
211
|
+
raise typer.Exit(EXIT_FINDINGS)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
# ID: aca519c8-5fe1-4f11-ac45-fbaa937c981b
|
|
215
|
+
async def _run_offline_audit(
|
|
216
|
+
*,
|
|
217
|
+
files: list[str],
|
|
218
|
+
min_severity_str: str,
|
|
219
|
+
output_format: str,
|
|
220
|
+
) -> None:
|
|
221
|
+
"""F-10.1b / F-10.2 — execute the stateless audit + render per format.
|
|
222
|
+
|
|
223
|
+
Routes to mind.governance.stateless_audit (F-10.1a). Exit code matrix:
|
|
224
|
+
|
|
225
|
+
- EXIT_OK (0) : no findings >= severity floor
|
|
226
|
+
- EXIT_FINDINGS (1) : N findings >= severity floor; merge-block
|
|
227
|
+
- EXIT_CONFIG_ERROR (2) : .intent/ unreachable or IntentRepository fails
|
|
228
|
+
- EXIT_INTERNAL_ERROR (64): caught here as the top-level guard
|
|
229
|
+
|
|
230
|
+
Per ADR-085 §D5, exit code 1 vs 64 is constitutionally meaningful for
|
|
231
|
+
the merge-block path: 1 = "your code has violations" (developer action);
|
|
232
|
+
64 = "the gate itself crashed" (operator action). External CI branch
|
|
233
|
+
protection rules should treat them differently.
|
|
234
|
+
|
|
235
|
+
output_format dispatches the rendering: ``text`` -> Rich console
|
|
236
|
+
(default for humans); ``json`` -> F-10.1a payload verbatim (CLI
|
|
237
|
+
integrations); ``github-annotations`` -> GH workflow-command lines
|
|
238
|
+
(F-10.3 Action, F-10.5 pre-commit hook).
|
|
239
|
+
"""
|
|
240
|
+
structured = output_format in {"json", "github-annotations"}
|
|
241
|
+
|
|
242
|
+
try:
|
|
243
|
+
intent_repo = get_intent_repository()
|
|
244
|
+
repo_path = get_repo_root()
|
|
245
|
+
except Exception as exc:
|
|
246
|
+
_emit_error(output_format, "configuration error", exc)
|
|
247
|
+
raise typer.Exit(EXIT_CONFIG_ERROR) from exc
|
|
248
|
+
|
|
249
|
+
min_severity = parse_min_severity(min_severity_str)
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
result = await run_stateless_audit(
|
|
253
|
+
intent_repo=intent_repo,
|
|
254
|
+
repo_path=repo_path,
|
|
255
|
+
files=files or None,
|
|
256
|
+
)
|
|
257
|
+
except Exception as exc:
|
|
258
|
+
logger.exception("Stateless audit crashed")
|
|
259
|
+
_emit_error(output_format, "internal error", exc)
|
|
260
|
+
raise typer.Exit(EXIT_INTERNAL_ERROR) from exc
|
|
261
|
+
|
|
262
|
+
blocking_findings = [
|
|
263
|
+
f for f in result["findings"] if to_audit_finding(f).severity >= min_severity
|
|
264
|
+
]
|
|
265
|
+
|
|
266
|
+
if output_format == "json":
|
|
267
|
+
sys.stdout.write(json.dumps(result, indent=2, default=str) + "\n")
|
|
268
|
+
elif output_format == "github-annotations":
|
|
269
|
+
sys.stdout.write(format_payload(result))
|
|
270
|
+
else:
|
|
271
|
+
_render_text_summary(result, min_severity)
|
|
272
|
+
|
|
273
|
+
raise typer.Exit(EXIT_FINDINGS if blocking_findings else EXIT_OK)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
# ID: 4d8287ab-678e-4fb9-bcf5-05eab155ace1
|
|
277
|
+
def _emit_error(output_format: str, kind: str, exc: Exception) -> None:
|
|
278
|
+
"""Emit an error payload in the active format (CI parsers vs humans)."""
|
|
279
|
+
if output_format == "json":
|
|
280
|
+
sys.stdout.write(
|
|
281
|
+
json.dumps(
|
|
282
|
+
{
|
|
283
|
+
"verdict": "ERROR",
|
|
284
|
+
"passed": False,
|
|
285
|
+
"error": f"{kind}: {exc!s}",
|
|
286
|
+
"mode": "stateless",
|
|
287
|
+
}
|
|
288
|
+
)
|
|
289
|
+
+ "\n"
|
|
290
|
+
)
|
|
291
|
+
elif output_format == "github-annotations":
|
|
292
|
+
msg = f"{kind}: {exc!s}".replace("%", "%25").replace("\n", "%0A")
|
|
293
|
+
sys.stdout.write(f"::error title=CORE audit {kind}::{msg}\n")
|
|
294
|
+
else:
|
|
295
|
+
console.print(f"[bold red]{kind.capitalize()}:[/bold red] {exc}")
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
# ID: c70adf31-b238-466d-9e78-f1461e437f67
|
|
299
|
+
def _render_text_summary(result: dict, min_severity: object) -> None:
|
|
300
|
+
"""Human-readable Rich rendering for the offline path."""
|
|
301
|
+
all_findings = [to_audit_finding(f) for f in result["findings"]]
|
|
302
|
+
stats = result.get("stats", {})
|
|
303
|
+
audit_stats = AuditStats(
|
|
304
|
+
total_rules=stats.get("total_rules", 0),
|
|
305
|
+
executed_rules=stats.get("runnable_rules", 0),
|
|
306
|
+
coverage_percent=0,
|
|
307
|
+
total_declared_rules=stats.get("total_rules", 0),
|
|
308
|
+
crashed_rules=0,
|
|
309
|
+
unmapped_rules=0,
|
|
310
|
+
effective_coverage_percent=0,
|
|
311
|
+
context_level_rules=0,
|
|
312
|
+
per_file_rules=0,
|
|
313
|
+
)
|
|
314
|
+
render_overview(
|
|
315
|
+
console,
|
|
316
|
+
all_findings,
|
|
317
|
+
audit_stats,
|
|
318
|
+
result.get("duration_sec", 0.0),
|
|
319
|
+
result["passed"],
|
|
320
|
+
verdict_str=result["verdict"],
|
|
321
|
+
)
|
|
322
|
+
skipped = result.get("skipped_rules", [])
|
|
323
|
+
if skipped:
|
|
324
|
+
console.print(
|
|
325
|
+
f"[dim]Skipped {len(skipped)} rule(s) in stateless mode "
|
|
326
|
+
f"(knowledge_gate + llm_gate require DB); pass "
|
|
327
|
+
f"--format=json to see structured reasons.[/dim]"
|
|
328
|
+
)
|
|
329
|
+
filtered = [f for f in all_findings if f.severity >= min_severity]
|
|
330
|
+
if filtered:
|
|
331
|
+
print_summary_findings(filtered)
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
async def _print_coherence_advisory(
|
|
335
|
+
console: Console, coherence_service: CoherenceService
|
|
336
|
+
) -> None:
|
|
337
|
+
"""ADR-067 D5: print one Constitutional Coherence advisory line.
|
|
338
|
+
|
|
339
|
+
Three cases:
|
|
340
|
+
- no runs: Constitutional Coherence: no runs recorded — run
|
|
341
|
+
`core-admin coherence check --full`
|
|
342
|
+
- open runs: Constitutional Coherence: {N} open run(s) ·
|
|
343
|
+
{M} candidate(s) unreviewed
|
|
344
|
+
- all closed: Constitutional Coherence: clean (last run {YYYY-MM-DD})
|
|
345
|
+
"""
|
|
346
|
+
summary = await coherence_service.get_unreviewed_summary()
|
|
347
|
+
latest = await coherence_service.get_latest_run()
|
|
348
|
+
|
|
349
|
+
if latest is None:
|
|
350
|
+
console.print(
|
|
351
|
+
"Constitutional Coherence: no runs recorded — run "
|
|
352
|
+
"`core-admin coherence check --full`"
|
|
353
|
+
)
|
|
354
|
+
return
|
|
355
|
+
|
|
356
|
+
if summary["open_runs"] > 0:
|
|
357
|
+
console.print(
|
|
358
|
+
f"Constitutional Coherence: {summary['open_runs']} open run(s) "
|
|
359
|
+
f"· {summary['unreviewed']} candidate(s) unreviewed"
|
|
360
|
+
)
|
|
361
|
+
return
|
|
362
|
+
|
|
363
|
+
run_date = latest["run_at"].date().isoformat()
|
|
364
|
+
console.print(f"Constitutional Coherence: clean (last run {run_date})")
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
async def _print_representation_coherence_advisory(
|
|
368
|
+
console: Console, service: RepresentationCoherenceService
|
|
369
|
+
) -> None:
|
|
370
|
+
"""ADR-070 D6: print one Representation Coherence advisory line.
|
|
371
|
+
|
|
372
|
+
Four cases:
|
|
373
|
+
- inventory missing: Representation Coherence: no inventory file
|
|
374
|
+
— see .intent/governance/projections.yaml
|
|
375
|
+
- empty inventory: Representation Coherence: no pairs declared
|
|
376
|
+
— see .intent/governance/projections.yaml
|
|
377
|
+
- all in-lease: Representation Coherence: clean
|
|
378
|
+
({N} pair(s) · last check {YYYY-MM-DD HH:MM:SSZ})
|
|
379
|
+
- mixed state: Representation Coherence:
|
|
380
|
+
{A} in-lease · {B} drifted · {C} sensor-stale
|
|
381
|
+
"""
|
|
382
|
+
summary = await service.get_summary()
|
|
383
|
+
|
|
384
|
+
if not summary["inventory_loaded"]:
|
|
385
|
+
console.print(
|
|
386
|
+
"Representation Coherence: no inventory file "
|
|
387
|
+
"— see .intent/governance/projections.yaml"
|
|
388
|
+
)
|
|
389
|
+
return
|
|
390
|
+
|
|
391
|
+
if summary["pairs_declared"] == 0:
|
|
392
|
+
console.print(
|
|
393
|
+
"Representation Coherence: no pairs declared "
|
|
394
|
+
"— see .intent/governance/projections.yaml"
|
|
395
|
+
)
|
|
396
|
+
return
|
|
397
|
+
|
|
398
|
+
if summary["drifted"] == 0 and summary["sensor_stale"] == 0:
|
|
399
|
+
last_check = summary["last_check_at"]
|
|
400
|
+
if last_check is not None:
|
|
401
|
+
ts = last_check.strftime("%Y-%m-%d %H:%M:%SZ")
|
|
402
|
+
console.print(
|
|
403
|
+
f"Representation Coherence: clean "
|
|
404
|
+
f"({summary['pairs_declared']} pair(s) · last check {ts})"
|
|
405
|
+
)
|
|
406
|
+
else:
|
|
407
|
+
console.print(
|
|
408
|
+
f"Representation Coherence: clean ({summary['pairs_declared']} pair(s))"
|
|
409
|
+
)
|
|
410
|
+
return
|
|
411
|
+
|
|
412
|
+
console.print(
|
|
413
|
+
f"Representation Coherence: {summary['in_lease']} in-lease "
|
|
414
|
+
f"· {summary['drifted']} drifted "
|
|
415
|
+
f"· {summary['sensor_stale']} sensor-stale"
|
|
416
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# src/cli/resources/code/audit_duplicates.py
|
|
2
|
+
import typer
|
|
3
|
+
|
|
4
|
+
from cli.utils import core_command
|
|
5
|
+
|
|
6
|
+
from .hub import app
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@app.command("audit-duplicates")
|
|
10
|
+
@core_command(dangerous=False, requires_context=True)
|
|
11
|
+
# ID: 2ad098e5-aa8a-4e12-89e4-be20d2e12e03
|
|
12
|
+
async def audit_duplicates_cmd(
|
|
13
|
+
ctx: typer.Context,
|
|
14
|
+
threshold: float = typer.Option(0.96, help="Similarity threshold (0.0-1.0)."),
|
|
15
|
+
):
|
|
16
|
+
"""
|
|
17
|
+
Perform a semantic scan to find duplicate logic across the codebase.
|
|
18
|
+
Helps enforce the 'dry_by_design' constitutional principle.
|
|
19
|
+
"""
|
|
20
|
+
from cli.logic.duplicates import inspect_duplicates_async
|
|
21
|
+
|
|
22
|
+
await inspect_duplicates_async(context=ctx.obj, threshold=threshold)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# src/cli/resources/code/check_imports.py
|
|
2
|
+
"""
|
|
3
|
+
Import integrity check command.
|
|
4
|
+
|
|
5
|
+
Routes through POST /v1/quality/imports for constitutional compliance.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
from rich.table import Table
|
|
15
|
+
|
|
16
|
+
from api.cli import CoreApiClient
|
|
17
|
+
from cli.utils import core_command
|
|
18
|
+
|
|
19
|
+
from .hub import app
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@app.command("check-imports")
|
|
27
|
+
@core_command(dangerous=False, requires_context=False)
|
|
28
|
+
# ID: 53db749b-a5cf-44e4-8e7f-47e6499aec0b
|
|
29
|
+
async def check_imports_cmd(ctx: typer.Context) -> None:
|
|
30
|
+
"""
|
|
31
|
+
Verify all import statements resolve to existing modules.
|
|
32
|
+
|
|
33
|
+
Checks for:
|
|
34
|
+
- F821: References to undefined names (moved/deleted modules)
|
|
35
|
+
- F401: Stale imports left after refactoring
|
|
36
|
+
|
|
37
|
+
Enforces:
|
|
38
|
+
- code.imports.must_resolve
|
|
39
|
+
- code.imports.no_stale_namespace
|
|
40
|
+
"""
|
|
41
|
+
console.rule("[bold cyan]Import Integrity Check[/bold cyan]")
|
|
42
|
+
console.print("[dim]Scanning src/ for unresolvable imports (F821, F401)...[/dim]\n")
|
|
43
|
+
client = CoreApiClient()
|
|
44
|
+
result = await client.quality_imports()
|
|
45
|
+
if result.get("status") == "ok":
|
|
46
|
+
console.print("[bold green]✅ All imports resolve cleanly.[/bold green]")
|
|
47
|
+
return
|
|
48
|
+
violations = result.get("violations", [])
|
|
49
|
+
violation_count = len(violations)
|
|
50
|
+
console.print(
|
|
51
|
+
f"[bold red]❌ {violation_count} unresolvable import(s) found.[/bold red]\n"
|
|
52
|
+
)
|
|
53
|
+
if violations:
|
|
54
|
+
table = Table(
|
|
55
|
+
title="Import Violations", show_header=True, header_style="bold red"
|
|
56
|
+
)
|
|
57
|
+
table.add_column("File", style="cyan", overflow="fold")
|
|
58
|
+
table.add_column("Line", style="yellow", justify="right", width=6)
|
|
59
|
+
table.add_column("Rule", style="magenta", width=6)
|
|
60
|
+
table.add_column("Message", style="white", overflow="fold")
|
|
61
|
+
for v in violations:
|
|
62
|
+
table.add_row(
|
|
63
|
+
v.get("file", ""),
|
|
64
|
+
str(v.get("line", "")),
|
|
65
|
+
v.get("rule", ""),
|
|
66
|
+
v.get("message", ""),
|
|
67
|
+
)
|
|
68
|
+
console.print(table)
|
|
69
|
+
console.print(
|
|
70
|
+
"\n[dim]Fix: Update stale import paths or remove unused imports.[/dim]"
|
|
71
|
+
)
|
|
72
|
+
console.print(
|
|
73
|
+
"[dim]Rule: code.imports.must_resolve (.intent/rules/code/imports.json)[/dim]"
|
|
74
|
+
)
|
|
75
|
+
raise typer.Exit(code=1)
|