core-runtime 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- api/__init__.py +4 -0
- api/cli/__init__.py +10 -0
- api/cli/audit_client.py +92 -0
- api/cli/census_client.py +77 -0
- api/cli/client.py +508 -0
- api/cli/coverage_client.py +121 -0
- api/cli/daemon_client.py +42 -0
- api/cli/fix_client.py +101 -0
- api/cli/inspect_client.py +143 -0
- api/cli/integration_client.py +42 -0
- api/cli/integrity_client.py +45 -0
- api/cli/proposals_client.py +101 -0
- api/cli/quality_client.py +83 -0
- api/cli/refactor_client.py +82 -0
- api/cli/sync_client.py +106 -0
- api/dependencies.py +37 -0
- api/errors.py +74 -0
- api/main.py +88 -0
- api/v1/__init__.py +4 -0
- api/v1/audit_routes.py +302 -0
- api/v1/census_routes.py +207 -0
- api/v1/coverage_routes.py +352 -0
- api/v1/daemon_routes.py +86 -0
- api/v1/development_routes.py +70 -0
- api/v1/fix_routes.py +428 -0
- api/v1/inspect_routes.py +220 -0
- api/v1/integration_routes.py +56 -0
- api/v1/integrity_routes.py +72 -0
- api/v1/knowledge_routes.py +36 -0
- api/v1/lint_routes.py +40 -0
- api/v1/proposals_routes.py +267 -0
- api/v1/quality_routes.py +272 -0
- api/v1/refactor_routes.py +225 -0
- api/v1/sync_routes.py +261 -0
- body/__init__.py +4 -0
- body/analyzers/__init__.py +25 -0
- body/analyzers/base_analyzer.py +28 -0
- body/analyzers/constitutional_path_analyzer.py +63 -0
- body/analyzers/file_analyzer.py +211 -0
- body/analyzers/knowledge_graph_analyzer.py +86 -0
- body/analyzers/prompt_analyzer.py +155 -0
- body/analyzers/symbol_extractor.py +280 -0
- body/atomic/__init__.py +74 -0
- body/atomic/build_tests_action.py +354 -0
- body/atomic/check_actions.py +142 -0
- body/atomic/crate_ops.py +59 -0
- body/atomic/executor.py +470 -0
- body/atomic/file_ops.py +153 -0
- body/atomic/fix_actions.py +1142 -0
- body/atomic/import_resolver.py +200 -0
- body/atomic/metadata_ops.py +161 -0
- body/atomic/modularity_fix.py +839 -0
- body/atomic/modularity_splitter.py +521 -0
- body/atomic/proposal_lifecycle_actions.py +171 -0
- body/atomic/registry.py +326 -0
- body/atomic/remediate_cognitive_role.py +104 -0
- body/atomic/sandbox_lifecycle.py +252 -0
- body/atomic/split_plan.py +155 -0
- body/atomic/sync_actions/__init__.py +22 -0
- body/atomic/sync_actions/chunking_helpers.py +218 -0
- body/atomic/sync_actions/sync_actions.py +431 -0
- body/atomic/test_actions.py +47 -0
- body/autonomy/__init__.py +16 -0
- body/autonomy/audit_analyzer.py +343 -0
- body/autonomy/micro_proposal_executor.py +316 -0
- body/crate_processing/canary_executor.py +144 -0
- body/evaluators/__init__.py +27 -0
- body/evaluators/atomic_actions_evaluator.py +162 -0
- body/evaluators/atomic_actions_format.py +45 -0
- body/evaluators/atomic_actions_rules.py +278 -0
- body/evaluators/base_evaluator.py +67 -0
- body/evaluators/clarity_evaluator.py +83 -0
- body/evaluators/constitutional_evaluator.py +227 -0
- body/evaluators/failure_evaluator.py +136 -0
- body/evaluators/performance_evaluator.py +341 -0
- body/evaluators/security_evaluator.py +393 -0
- body/flows/__init__.py +33 -0
- body/flows/executor.py +275 -0
- body/flows/registry.py +272 -0
- body/flows/result.py +113 -0
- body/governance/__init__.py +29 -0
- body/governance/body_contracts_service.py +317 -0
- body/governance/code_validator.py +118 -0
- body/governance/engine_dispatcher.py +128 -0
- body/governance/intent_guard.py +592 -0
- body/governance/intent_pattern_validators.py +197 -0
- body/governance/key_management_service.py +100 -0
- body/governance/path_validator.py +187 -0
- body/governance/remediation_service.py +263 -0
- body/governance/runtime_validator.py +184 -0
- body/infrastructure/bootstrap.py +135 -0
- body/infrastructure/lifespan.py +85 -0
- body/infrastructure/repositories/__init__.py +1 -0
- body/infrastructure/repositories/decision_trace_repository.py +210 -0
- body/infrastructure/repositories/refusal_repository.py +294 -0
- body/introspection/__init__.py +4 -0
- body/introspection/capability_discovery_service.py +107 -0
- body/introspection/discovery/from_kgb.py +33 -0
- body/introspection/discovery/from_source_scan.py +40 -0
- body/introspection/discovery/loader.py +62 -0
- body/introspection/discovery/registry.py +22 -0
- body/introspection/discovery/semantics.py +21 -0
- body/introspection/discovery/sync.py +47 -0
- body/introspection/drift_detector.py +81 -0
- body/introspection/drift_service.py +48 -0
- body/introspection/export_vectors.py +133 -0
- body/introspection/generate_capability_docs.py +130 -0
- body/introspection/generate_correction_map.py +98 -0
- body/introspection/graph_analysis_service.py +66 -0
- body/introspection/knowledge_graph_service.py +170 -0
- body/introspection/semantic_clusterer.py +128 -0
- body/introspection/symbol_index_builder.py +244 -0
- body/introspection/sync/engine.py +92 -0
- body/introspection/sync/scanner.py +56 -0
- body/introspection/sync/visitor.py +83 -0
- body/introspection/sync_service.py +62 -0
- body/invokers/__init__.py +4 -0
- body/invokers/capability_invoker.py +4 -0
- body/maintenance/command_sync_service.py +73 -0
- body/maintenance/dotenv_sync_service.py +99 -0
- body/maintenance/idempotency_harness.py +70 -0
- body/maintenance/maintenance_service.py +123 -0
- body/maintenance/memory_cleanup_service.py +131 -0
- body/maintenance/refactor_settings_access.py +274 -0
- body/maintenance/scripts/__init__.py +5 -0
- body/maintenance/scripts/context_export.py +278 -0
- body/maintenance/scripts/vector_verify.py +73 -0
- body/maintenance/sync_vectors.py +338 -0
- body/models/__init__.py +4 -0
- body/project_lifecycle/__init__.py +4 -0
- body/project_lifecycle/bootstrap_service.py +157 -0
- body/project_lifecycle/definition_service.py +264 -0
- body/project_lifecycle/integration_service.py +113 -0
- body/project_lifecycle/scaffolding_service.py +187 -0
- body/quality/coverage_analyzer.py +177 -0
- body/repositories/__init__.py +4 -0
- body/self_healing/atomic_actions_fixer.py +113 -0
- body/self_healing/body_ui_fixer.py +193 -0
- body/self_healing/capability_parser.py +65 -0
- body/self_healing/code_style_service.py +51 -0
- body/self_healing/complexity_filter.py +70 -0
- body/self_healing/docstring_service.py +345 -0
- body/self_healing/duplicate_id_service.py +407 -0
- body/self_healing/duplicates_service.py +165 -0
- body/self_healing/handlers/__init__.py +1 -0
- body/self_healing/handlers/id_assignment_handler.py +201 -0
- body/self_healing/handlers/import_sorting_handler.py +181 -0
- body/self_healing/header_service.py +308 -0
- body/self_healing/id_tagging_service.py +227 -0
- body/self_healing/knowledge_consolidation_service.py +80 -0
- body/self_healing/logging_service.py +292 -0
- body/self_healing/owner_tagging_service.py +5 -0
- body/self_healing/placeholder_fixer_service.py +27 -0
- body/self_healing/prune_private_capabilities.py +144 -0
- body/self_healing/purge_legacy_tags_service.py +146 -0
- body/self_healing/remediation_models.py +238 -0
- body/self_healing/test_context/__init__.py +10 -0
- body/self_healing/test_context/detectors.py +74 -0
- body/self_healing/test_context/examples.py +53 -0
- body/self_healing/test_context/formatter.py +65 -0
- body/self_healing/test_context/metrics.py +62 -0
- body/self_healing/test_context/models.py +83 -0
- body/self_healing/test_context/parsers.py +70 -0
- body/self_healing/test_context_analyzer.py +79 -0
- body/self_healing/test_failure_analyzer.py +259 -0
- body/self_healing/test_target_analyzer.py +118 -0
- body/self_healing/vulture_healer.py +161 -0
- body/services/__init__.py +4 -0
- body/services/artifact_service.py +155 -0
- body/services/blackboard_service/__init__.py +22 -0
- body/services/blackboard_service/blackboard_claim_service.py +216 -0
- body/services/blackboard_service/blackboard_proposal_service.py +305 -0
- body/services/blackboard_service/blackboard_query_service.py +333 -0
- body/services/blackboard_service/blackboard_service.py +602 -0
- body/services/capabilities.py +51 -0
- body/services/cim/__init__.py +22 -0
- body/services/cim/baselines.py +102 -0
- body/services/cim/census_service.py +190 -0
- body/services/cim/cim_constants.py +116 -0
- body/services/cim/cim_path_utils.py +123 -0
- body/services/cim/diff.py +152 -0
- body/services/cim/history.py +94 -0
- body/services/cim/models.py +319 -0
- body/services/cim/policy.py +149 -0
- body/services/cim/scanners.py +332 -0
- body/services/coherence_service.py +552 -0
- body/services/consequence_log_service.py +189 -0
- body/services/constitutional_rule_loader.py +141 -0
- body/services/constitutional_validator.py +366 -0
- body/services/crate_creation_service.py +217 -0
- body/services/crate_processing_service.py +279 -0
- body/services/crawl_service/__init__.py +10 -0
- body/services/crawl_service/main_module.py +531 -0
- body/services/crawl_service/orchestrator.py +452 -0
- body/services/crawl_service/symbol_processing.py +279 -0
- body/services/database_service.py +242 -0
- body/services/doc_service.py +57 -0
- body/services/file_service.py +260 -0
- body/services/governance_claims_service.py +240 -0
- body/services/governance_init.py +41 -0
- body/services/health_log_service.py +167 -0
- body/services/intent_schema_validator.py +211 -0
- body/services/llm_client.py +87 -0
- body/services/mind_state_service.py +129 -0
- body/services/policy_expression_evaluator.py +154 -0
- body/services/proposal_supervision_service.py +187 -0
- body/services/representation_coherence_service.py +209 -0
- body/services/service_registry.py +431 -0
- body/services/session_attached_service.py +51 -0
- body/services/symbol_query_service.py +218 -0
- body/services/symbol_service.py +94 -0
- body/services/validation/__init__.py +14 -0
- body/services/validation/python_validator.py +89 -0
- body/services/validation/validation_policies.py +121 -0
- body/services/worker_registry_service.py +184 -0
- body/validators/__init__.py +1 -0
- body/validators/logic_conservation_validator.py +201 -0
- body/workers/call_site_rewriter.py +527 -0
- body/workers/prompt_artifact_writer.py +323 -0
- cli/__init__.py +4 -0
- cli/admin_cli.py +98 -0
- cli/cli_user.py +121 -0
- cli/commands/__init__.py +4 -0
- cli/commands/audit_reporter.py +272 -0
- cli/commands/check/__init__.py +115 -0
- cli/commands/check/audit.py +130 -0
- cli/commands/check/converters.py +129 -0
- cli/commands/check/diagnostics_commands.py +70 -0
- cli/commands/check/formatters.py +310 -0
- cli/commands/check/imports.py +73 -0
- cli/commands/check/quality.py +71 -0
- cli/commands/check/quality_gates.py +107 -0
- cli/commands/check/rule.py +136 -0
- cli/commands/check/utils.py +28 -0
- cli/commands/check_atomic_actions.py +167 -0
- cli/commands/components.py +66 -0
- cli/commands/coverage/__init__.py +22 -0
- cli/commands/coverage/analysis_commands.py +87 -0
- cli/commands/coverage/check_commands.py +173 -0
- cli/commands/coverage/generation_commands.py +155 -0
- cli/commands/coverage/services/__init__.py +15 -0
- cli/commands/coverage/services/coverage_checker.py +50 -0
- cli/commands/coverage/services/coverage_reporter.py +81 -0
- cli/commands/coverage/services/gaps_analyzer.py +114 -0
- cli/commands/daemon.py +908 -0
- cli/commands/develop.py +127 -0
- cli/commands/diagnostics.py +32 -0
- cli/commands/fix/__init__.py +84 -0
- cli/commands/fix/all_commands.py +94 -0
- cli/commands/fix/atomic_actions.py +48 -0
- cli/commands/fix/audit.py +146 -0
- cli/commands/fix/body_ui.py +93 -0
- cli/commands/fix/code_style.py +52 -0
- cli/commands/fix/db_tools.py +90 -0
- cli/commands/fix/fix_ir.py +79 -0
- cli/commands/fix/handler_discovery.py +54 -0
- cli/commands/fix/imports.py +55 -0
- cli/commands/fix/list_commands.py +54 -0
- cli/commands/fix/metadata.py +160 -0
- cli/commands/fix/modularity.py +88 -0
- cli/commands/fix/settings_access.py +65 -0
- cli/commands/fix_governed.py +103 -0
- cli/commands/fix_logging.py +24 -0
- cli/commands/governance.py +294 -0
- cli/commands/guard.py +125 -0
- cli/commands/inspect/__init__.py +79 -0
- cli/commands/inspect/_helpers.py +226 -0
- cli/commands/inspect/analysis.py +158 -0
- cli/commands/inspect/decisions.py +140 -0
- cli/commands/inspect/diagnostics.py +126 -0
- cli/commands/inspect/drift.py +100 -0
- cli/commands/inspect/patterns.py +102 -0
- cli/commands/inspect/refusals.py +211 -0
- cli/commands/inspect/repo_census.py +175 -0
- cli/commands/inspect/status.py +48 -0
- cli/commands/interactive_test.py +85 -0
- cli/commands/mind.py +49 -0
- cli/commands/refactor.py +234 -0
- cli/commands/refactor_support/__init__.py +7 -0
- cli/commands/refactor_support/analyzer.py +107 -0
- cli/commands/refactor_support/config.py +67 -0
- cli/commands/refactor_support/display.py +170 -0
- cli/commands/refactor_support/recommendations.py +55 -0
- cli/commands/run.py +60 -0
- cli/commands/search.py +103 -0
- cli/commands/status.py +86 -0
- cli/commands/submit.py +23 -0
- cli/interactive.py +177 -0
- cli/logic/__init__.py +7 -0
- cli/logic/agent.py +110 -0
- cli/logic/audit_capability_domains.py +106 -0
- cli/logic/audit_renderer.py +150 -0
- cli/logic/autonomy/actions.py +36 -0
- cli/logic/autonomy/views.py +116 -0
- cli/logic/body_contracts_checker.py +23 -0
- cli/logic/build.py +27 -0
- cli/logic/byor.py +148 -0
- cli/logic/capability.py +27 -0
- cli/logic/cli_utils.py +210 -0
- cli/logic/context.py +7 -0
- cli/logic/db.py +154 -0
- cli/logic/db_manage.py +22 -0
- cli/logic/decision_inspect_logic.py +62 -0
- cli/logic/diagnostics.py +148 -0
- cli/logic/diagnostics_policy.py +100 -0
- cli/logic/diagnostics_registry.py +165 -0
- cli/logic/duplicates.py +19 -0
- cli/logic/embeddings_cli.py +43 -0
- cli/logic/governance/__init__.py +16 -0
- cli/logic/governance/engine.py +216 -0
- cli/logic/governance/forensics_service.py +67 -0
- cli/logic/governance/limb_status_service.py +83 -0
- cli/logic/governance/renderer.py +115 -0
- cli/logic/governance/traceability_service.py +78 -0
- cli/logic/governance_logic.py +33 -0
- cli/logic/hub/__init__.py +14 -0
- cli/logic/hub/app.py +107 -0
- cli/logic/hub/formatter.py +29 -0
- cli/logic/hub/introspection.py +20 -0
- cli/logic/hub/repository.py +17 -0
- cli/logic/init.py +22 -0
- cli/logic/interactive_test/__init__.py +21 -0
- cli/logic/interactive_test/session.py +102 -0
- cli/logic/interactive_test/steps/__init__.py +23 -0
- cli/logic/interactive_test/steps/execution.py +53 -0
- cli/logic/interactive_test/steps/generation.py +88 -0
- cli/logic/interactive_test/steps/healing.py +79 -0
- cli/logic/interactive_test/steps/utils.py +31 -0
- cli/logic/interactive_test/steps/verification.py +71 -0
- cli/logic/interactive_test/ui.py +203 -0
- cli/logic/interactive_test/workflow.py +168 -0
- cli/logic/interactive_test_logic.py +41 -0
- cli/logic/knowledge.py +47 -0
- cli/logic/legacy_scan_logic.py +306 -0
- cli/logic/list_audits.py +49 -0
- cli/logic/log_audit.py +53 -0
- cli/logic/new.py +8 -0
- cli/logic/project_docs.py +28 -0
- cli/logic/reconcile.py +127 -0
- cli/logic/refusal_inspect_logic.py +208 -0
- cli/logic/report.py +47 -0
- cli/logic/status.py +47 -0
- cli/logic/symbol_drift.py +77 -0
- cli/logic/sync.py +48 -0
- cli/logic/sync_domains.py +72 -0
- cli/logic/sync_manifest.py +31 -0
- cli/logic/tools.py +133 -0
- cli/logic/utils_migration.py +43 -0
- cli/logic/validate.py +107 -0
- cli/logic/vector_drift.py +109 -0
- cli/logic/yaml_processor.py +5 -0
- cli/renderers/audit_detail.py +37 -0
- cli/renderers/audit_overview.py +39 -0
- cli/resources/__init__.py +27 -0
- cli/resources/admin/__init__.py +23 -0
- cli/resources/admin/coverage.py +63 -0
- cli/resources/admin/debt_scan.py +195 -0
- cli/resources/admin/forensics.py +97 -0
- cli/resources/admin/health.py +66 -0
- cli/resources/admin/hub.py +9 -0
- cli/resources/admin/meta.py +47 -0
- cli/resources/admin/patterns.py +28 -0
- cli/resources/admin/refusals.py +31 -0
- cli/resources/admin/self_check.py +175 -0
- cli/resources/admin/status.py +66 -0
- cli/resources/admin/summary.py +67 -0
- cli/resources/admin/traces.py +46 -0
- cli/resources/admin/validate_env.py +56 -0
- cli/resources/code/__init__.py +31 -0
- cli/resources/code/actions.py +48 -0
- cli/resources/code/audit.py +416 -0
- cli/resources/code/audit_duplicates.py +22 -0
- cli/resources/code/check_imports.py +75 -0
- cli/resources/code/check_ui.py +62 -0
- cli/resources/code/clarity.py +51 -0
- cli/resources/code/complexity.py +55 -0
- cli/resources/code/docstrings.py +51 -0
- cli/resources/code/fix_atomic.py +51 -0
- cli/resources/code/format.py +62 -0
- cli/resources/code/hub.py +10 -0
- cli/resources/code/integrity.py +75 -0
- cli/resources/code/lint.py +37 -0
- cli/resources/code/logging.py +49 -0
- cli/resources/code/refactor.py +32 -0
- cli/resources/code/test.py +30 -0
- cli/resources/coherence/__init__.py +13 -0
- cli/resources/coherence/check.py +111 -0
- cli/resources/coherence/hub.py +13 -0
- cli/resources/coherence/repair_counts.py +73 -0
- cli/resources/coherence/report.py +144 -0
- cli/resources/coherence/seed.py +297 -0
- cli/resources/coherence/supersede.py +124 -0
- cli/resources/coherence/triage.py +81 -0
- cli/resources/constitution/__init__.py +19 -0
- cli/resources/constitution/audit.py +49 -0
- cli/resources/constitution/query.py +45 -0
- cli/resources/constitution/status.py +34 -0
- cli/resources/constitution/validate.py +36 -0
- cli/resources/context/__init__.py +21 -0
- cli/resources/context/build.py +374 -0
- cli/resources/context/cache.py +156 -0
- cli/resources/context/explain.py +140 -0
- cli/resources/context/hub.py +11 -0
- cli/resources/context/search.py +114 -0
- cli/resources/database/__init__.py +13 -0
- cli/resources/database/cleanup.py +107 -0
- cli/resources/database/export.py +61 -0
- cli/resources/database/hub.py +11 -0
- cli/resources/database/migrate.py +57 -0
- cli/resources/database/status.py +101 -0
- cli/resources/database/sync.py +84 -0
- cli/resources/database/sync_env.py +76 -0
- cli/resources/database/sync_registry.py +48 -0
- cli/resources/dev/__init__.py +14 -0
- cli/resources/dev/hub.py +11 -0
- cli/resources/dev/refactor.py +92 -0
- cli/resources/dev/stability.py +60 -0
- cli/resources/dev/strategic_audit.py +113 -0
- cli/resources/dev/sync.py +51 -0
- cli/resources/dev/test.py +34 -0
- cli/resources/intent/__init__.py +11 -0
- cli/resources/intent/hub.py +9 -0
- cli/resources/intent/sync_vocabulary.py +396 -0
- cli/resources/project/__init__.py +19 -0
- cli/resources/project/docs.py +41 -0
- cli/resources/project/new.py +40 -0
- cli/resources/project/onboard.py +31 -0
- cli/resources/proposals/__init__.py +28 -0
- cli/resources/proposals/create.py +82 -0
- cli/resources/proposals/integrate.py +49 -0
- cli/resources/proposals/list.py +76 -0
- cli/resources/proposals/manage.py +117 -0
- cli/resources/runtime/__init__.py +9 -0
- cli/resources/runtime/health.py +925 -0
- cli/resources/secrets/__init__.py +10 -0
- cli/resources/secrets/hub.py +9 -0
- cli/resources/secrets/manage.py +309 -0
- cli/resources/symbols/__init__.py +13 -0
- cli/resources/symbols/audit.py +46 -0
- cli/resources/symbols/fix_ids.py +43 -0
- cli/resources/symbols/hub.py +11 -0
- cli/resources/symbols/resolve_duplicates.py +30 -0
- cli/resources/symbols/sync.py +39 -0
- cli/resources/symbols/tag.py +47 -0
- cli/resources/vectors/__init__.py +11 -0
- cli/resources/vectors/cleanup.py +95 -0
- cli/resources/vectors/hub.py +9 -0
- cli/resources/vectors/query.py +105 -0
- cli/resources/vectors/status.py +30 -0
- cli/resources/vectors/sync.py +57 -0
- cli/resources/vectors/sync_code.py +67 -0
- cli/resources/workers/__init__.py +13 -0
- cli/resources/workers/blackboard.py +253 -0
- cli/resources/workers/remediate.py +337 -0
- cli/resources/workers/run.py +140 -0
- cli/utils/__init__.py +32 -0
- cli/utils/annotation_formatter.py +154 -0
- cli/utils/decorators.py +184 -0
- cli/utils/display.py +79 -0
- cli/utils/exit_codes.py +59 -0
- cli/utils/helpers.py +34 -0
- cli/utils/prompts.py +21 -0
- core_runtime-0.1.1.dist-info/LICENSE +21 -0
- core_runtime-0.1.1.dist-info/METADATA +346 -0
- core_runtime-0.1.1.dist-info/RECORD +962 -0
- core_runtime-0.1.1.dist-info/WHEEL +4 -0
- core_runtime-0.1.1.dist-info/entry_points.txt +4 -0
- mind/__init__.py +4 -0
- mind/coherence/__init__.py +1 -0
- mind/coherence/checker.py +314 -0
- mind/coherence/checks/__init__.py +4 -0
- mind/coherence/checks/base.py +34 -0
- mind/coherence/checks/r1_scoped.py +228 -0
- mind/coherence/checks/row2_grounding.py +69 -0
- mind/coherence/checks/row3_citation.py +119 -0
- mind/coherence/checks/row4_naming.py +126 -0
- mind/coherence/checks/sameconcern.py +136 -0
- mind/coherence/checks/specgap.py +233 -0
- mind/coherence/checks/vocabulary.py +112 -0
- mind/coherence/llm_judge.py +207 -0
- mind/enforcement/audit.py +78 -0
- mind/governance/__init__.py +22 -0
- mind/governance/assumption_extractor.py +326 -0
- mind/governance/audit_context.py +520 -0
- mind/governance/audit_postprocessor.py +36 -0
- mind/governance/audit_report_writer.py +46 -0
- mind/governance/audit_types.py +98 -0
- mind/governance/auditor.py +179 -0
- mind/governance/authority_package_builder.py +502 -0
- mind/governance/constitutional_auditor_dynamic.py +362 -0
- mind/governance/enforcement/__init__.py +24 -0
- mind/governance/enforcement_loader.py +245 -0
- mind/governance/enforcement_methods.py +28 -0
- mind/governance/entry_point_policy.py +62 -0
- mind/governance/executable_rule.py +127 -0
- mind/governance/filtered_audit.py +272 -0
- mind/governance/finding_processor.py +76 -0
- mind/governance/meta_validator.py +259 -0
- mind/governance/micro_proposal_validator.py +169 -0
- mind/governance/policy_coverage_service.py +183 -0
- mind/governance/policy_rule.py +94 -0
- mind/governance/rule_conflict_detector.py +127 -0
- mind/governance/rule_executor.py +306 -0
- mind/governance/rule_extractor.py +376 -0
- mind/governance/stateless_audit.py +206 -0
- mind/governance/violation_report.py +136 -0
- mind/logic/engines/_knowledge_gate_duplication.py +117 -0
- mind/logic/engines/action_gate.py +76 -0
- mind/logic/engines/artifact_gate.py +1168 -0
- mind/logic/engines/ast_gate/__init__.py +9 -0
- mind/logic/engines/ast_gate/base.py +263 -0
- mind/logic/engines/ast_gate/checks/__init__.py +35 -0
- mind/logic/engines/ast_gate/checks/async_checks.py +276 -0
- mind/logic/engines/ast_gate/checks/capability_checks.py +197 -0
- mind/logic/engines/ast_gate/checks/conservation_checks.py +126 -0
- mind/logic/engines/ast_gate/checks/generic_checks.py +244 -0
- mind/logic/engines/ast_gate/checks/import_checks.py +164 -0
- mind/logic/engines/ast_gate/checks/knowledge_source_check.py +88 -0
- mind/logic/engines/ast_gate/checks/logging_checks.py +133 -0
- mind/logic/engines/ast_gate/checks/metadata_checks.py +242 -0
- mind/logic/engines/ast_gate/checks/modularity_checks.py +436 -0
- mind/logic/engines/ast_gate/checks/naming_checks.py +120 -0
- mind/logic/engines/ast_gate/checks/prompt_model_checks.py +83 -0
- mind/logic/engines/ast_gate/checks/protected_namespace_access_check.py +298 -0
- mind/logic/engines/ast_gate/checks/purity_checks.py +421 -0
- mind/logic/engines/ast_gate/checks/purity_enforcement_check.py +56 -0
- mind/logic/engines/ast_gate/checks/runtime_import_boundary.py +198 -0
- mind/logic/engines/ast_gate/checks/schema_conformance_checks.py +130 -0
- mind/logic/engines/ast_gate/engine.py +317 -0
- mind/logic/engines/ast_gate.py +19 -0
- mind/logic/engines/base.py +106 -0
- mind/logic/engines/cli_gate/__init__.py +25 -0
- mind/logic/engines/cli_gate/base_check.py +45 -0
- mind/logic/engines/cli_gate/checks/__init__.py +31 -0
- mind/logic/engines/cli_gate/checks/async_execution.py +65 -0
- mind/logic/engines/cli_gate/checks/dangerous_explicit.py +60 -0
- mind/logic/engines/cli_gate/checks/discovery_strict.py +167 -0
- mind/logic/engines/cli_gate/checks/help_required.py +43 -0
- mind/logic/engines/cli_gate/checks/no_duplicates.py +57 -0
- mind/logic/engines/cli_gate/checks/no_layer_exposure.py +48 -0
- mind/logic/engines/cli_gate/checks/resource_first.py +58 -0
- mind/logic/engines/cli_gate/checks/standard_verbs.py +50 -0
- mind/logic/engines/cli_gate/engine.py +211 -0
- mind/logic/engines/glob_gate.py +214 -0
- mind/logic/engines/knowledge_gate.py +410 -0
- mind/logic/engines/llm_gate.py +407 -0
- mind/logic/engines/llm_gate_stub.py +67 -0
- mind/logic/engines/passive_gate.py +45 -0
- mind/logic/engines/regex_gate.py +97 -0
- mind/logic/engines/registry.py +134 -0
- mind/logic/engines/runtime_gate.py +265 -0
- mind/logic/engines/taxonomy_gate.py +229 -0
- mind/logic/engines/workflow_gate/__init__.py +22 -0
- mind/logic/engines/workflow_gate/base_check.py +42 -0
- mind/logic/engines/workflow_gate/checks/__init__.py +32 -0
- mind/logic/engines/workflow_gate/checks/alignment.py +93 -0
- mind/logic/engines/workflow_gate/checks/audit.py +80 -0
- mind/logic/engines/workflow_gate/checks/canary.py +47 -0
- mind/logic/engines/workflow_gate/checks/coverage.py +74 -0
- mind/logic/engines/workflow_gate/checks/dead_code.py +53 -0
- mind/logic/engines/workflow_gate/checks/import_resolution.py +97 -0
- mind/logic/engines/workflow_gate/checks/linter.py +104 -0
- mind/logic/engines/workflow_gate/checks/quality.py +49 -0
- mind/logic/engines/workflow_gate/checks/ruff_format.py +99 -0
- mind/logic/engines/workflow_gate/checks/tests.py +81 -0
- mind/logic/engines/workflow_gate/engine.py +207 -0
- shared/__init__.py +32 -0
- shared/action_logger.py +61 -0
- shared/action_types.py +199 -0
- shared/activity_logging.py +149 -0
- shared/ai/constitutional_envelope.py +341 -0
- shared/ai/prompt_model.py +585 -0
- shared/ai/response_parser.py +191 -0
- shared/ast_utility.py +279 -0
- shared/atomic_action.py +117 -0
- shared/cli/__init__.py +6 -0
- shared/cli/app_introspection.py +134 -0
- shared/cli/command_meta.py +224 -0
- shared/cli_types.py +92 -0
- shared/component_primitive.py +216 -0
- shared/config.py +216 -0
- shared/config_loader.py +54 -0
- shared/context.py +113 -0
- shared/exceptions.py +100 -0
- shared/governance/__init__.py +9 -0
- shared/governance/coherence_harvester.py +258 -0
- shared/governance_token.py +77 -0
- shared/infrastructure/__init__.py +5 -0
- shared/infrastructure/adapters/__init__.py +5 -0
- shared/infrastructure/adapters/embedding_provider.py +66 -0
- shared/infrastructure/bootstrap_registry.py +57 -0
- shared/infrastructure/clients/__init__.py +5 -0
- shared/infrastructure/clients/qdrant_client.py +455 -0
- shared/infrastructure/config_service.py +382 -0
- shared/infrastructure/config_validator.py +70 -0
- shared/infrastructure/context/__init__.py +45 -0
- shared/infrastructure/context/builder.py +804 -0
- shared/infrastructure/context/cache.py +101 -0
- shared/infrastructure/context/database.py +205 -0
- shared/infrastructure/context/limb_workspace.py +134 -0
- shared/infrastructure/context/models.py +65 -0
- shared/infrastructure/context/providers/__init__.py +18 -0
- shared/infrastructure/context/providers/ast.py +211 -0
- shared/infrastructure/context/providers/db.py +165 -0
- shared/infrastructure/context/providers/vectors.py +195 -0
- shared/infrastructure/context/redactor.py +109 -0
- shared/infrastructure/context/serializers.py +144 -0
- shared/infrastructure/context/service.py +271 -0
- shared/infrastructure/context/validator.py +247 -0
- shared/infrastructure/database/models/__init__.py +80 -0
- shared/infrastructure/database/models/autonomous_proposals.py +83 -0
- shared/infrastructure/database/models/decision_traces.py +129 -0
- shared/infrastructure/database/models/governance.py +183 -0
- shared/infrastructure/database/models/knowledge.py +205 -0
- shared/infrastructure/database/models/learning.py +99 -0
- shared/infrastructure/database/models/llm_config.py +274 -0
- shared/infrastructure/database/models/operations.py +152 -0
- shared/infrastructure/database/models/refusals.py +147 -0
- shared/infrastructure/database/models/system.py +124 -0
- shared/infrastructure/database/models/vectors.py +113 -0
- shared/infrastructure/database/models/workers.py +96 -0
- shared/infrastructure/database/session_manager.py +166 -0
- shared/infrastructure/diagnostic_service.py +103 -0
- shared/infrastructure/events/__init__.py +5 -0
- shared/infrastructure/events/base.py +44 -0
- shared/infrastructure/events/bus.py +76 -0
- shared/infrastructure/git_service.py +385 -0
- shared/infrastructure/intent/action_risk.py +135 -0
- shared/infrastructure/intent/audit_verdict.py +131 -0
- shared/infrastructure/intent/autonomy_dirty_tree.py +104 -0
- shared/infrastructure/intent/canonical_enums.py +116 -0
- shared/infrastructure/intent/cognitive_roles.py +96 -0
- shared/infrastructure/intent/errors.py +13 -0
- shared/infrastructure/intent/filesystem_operations.py +359 -0
- shared/infrastructure/intent/intent_connector.py +157 -0
- shared/infrastructure/intent/intent_repository.py +707 -0
- shared/infrastructure/intent/intent_validator.py +248 -0
- shared/infrastructure/intent/operational_capabilities.py +470 -0
- shared/infrastructure/intent/operational_config.py +1343 -0
- shared/infrastructure/intent/operational_mode.py +66 -0
- shared/infrastructure/intent/task_type_phases.py +180 -0
- shared/infrastructure/intent/test_coverage_paths.py +181 -0
- shared/infrastructure/intent/vocabulary_projection.py +241 -0
- shared/infrastructure/knowledge/knowledge_service.py +155 -0
- shared/infrastructure/knowledge_graph_service.py +214 -0
- shared/infrastructure/llm/client.py +448 -0
- shared/infrastructure/llm/client_registry.py +153 -0
- shared/infrastructure/llm/fallback_client.py +144 -0
- shared/infrastructure/llm/providers/anthropic.py +113 -0
- shared/infrastructure/llm/providers/base.py +130 -0
- shared/infrastructure/llm/providers/ollama.py +265 -0
- shared/infrastructure/llm/providers/openai.py +168 -0
- shared/infrastructure/repositories/__init__.py +5 -0
- shared/infrastructure/repositories/db/__init__.py +5 -0
- shared/infrastructure/repositories/db/common.py +138 -0
- shared/infrastructure/repositories/db/engine.py +26 -0
- shared/infrastructure/repositories/db/migration_service.py +75 -0
- shared/infrastructure/repositories/db/status_service.py +61 -0
- shared/infrastructure/repositories/memory_repository.py +134 -0
- shared/infrastructure/repositories/symbol_definition_repository.py +170 -0
- shared/infrastructure/repositories/task_repository.py +59 -0
- shared/infrastructure/repositories/vector_link_repository.py +83 -0
- shared/infrastructure/rooted_repository.py +50 -0
- shared/infrastructure/secrets_service.py +317 -0
- shared/infrastructure/specs/__init__.py +9 -0
- shared/infrastructure/specs/specs_repository.py +100 -0
- shared/infrastructure/storage/file_classifier.py +32 -0
- shared/infrastructure/storage/file_handler.py +330 -0
- shared/infrastructure/storage/file_provider.py +233 -0
- shared/infrastructure/storage/integrity_service.py +108 -0
- shared/infrastructure/validation/black_formatter.py +41 -0
- shared/infrastructure/validation/quality.py +46 -0
- shared/infrastructure/validation/ruff_linter.py +104 -0
- shared/infrastructure/validation/syntax_checker.py +45 -0
- shared/infrastructure/validation/test_runner.py +167 -0
- shared/infrastructure/validation/yaml_validator.py +45 -0
- shared/infrastructure/vector/__init__.py +15 -0
- shared/infrastructure/vector/adapters/__init__.py +20 -0
- shared/infrastructure/vector/adapters/constitutional/__init__.py +26 -0
- shared/infrastructure/vector/adapters/constitutional/chunker.py +246 -0
- shared/infrastructure/vector/adapters/constitutional/doc_key_resolver.py +109 -0
- shared/infrastructure/vector/adapters/constitutional/item_builder.py +158 -0
- shared/infrastructure/vector/adapters/constitutional/utils.py +39 -0
- shared/infrastructure/vector/adapters/constitutional_adapter.py +309 -0
- shared/infrastructure/vector/adapters/specs_adapter.py +171 -0
- shared/infrastructure/vector/cognitive_adapter.py +119 -0
- shared/infrastructure/vector/vector_index_service.py +230 -0
- shared/logger.py +195 -0
- shared/models/__init__.py +47 -0
- shared/models/action_result.py +77 -0
- shared/models/audit_models.py +106 -0
- shared/models/audit_rendering.py +30 -0
- shared/models/capability_models.py +22 -0
- shared/models/constitutional_validation.py +185 -0
- shared/models/drift_models.py +24 -0
- shared/models/embedding_payload.py +45 -0
- shared/models/execution_models.py +71 -0
- shared/models/pattern_graph.py +62 -0
- shared/models/prompt_model.py +244 -0
- shared/models/refusal_result.py +294 -0
- shared/models/remediation.py +35 -0
- shared/models/validation_result.py +34 -0
- shared/models/vector_models.py +62 -0
- shared/models/workflow_models.py +242 -0
- shared/path_resolver.py +408 -0
- shared/path_utils.py +60 -0
- shared/processors/base_processor.py +171 -0
- shared/processors/yaml_processor.py +72 -0
- shared/protocols/__init__.py +21 -0
- shared/protocols/brain_services.py +35 -0
- shared/protocols/cognitive.py +35 -0
- shared/protocols/executor.py +47 -0
- shared/protocols/interpreter.py +24 -0
- shared/protocols/knowledge.py +21 -0
- shared/protocols/llm.py +25 -0
- shared/protocols/typer_protocols.py +37 -0
- shared/time.py +18 -0
- shared/universal.py +43 -0
- shared/utils/__init__.py +81 -0
- shared/utils/audit_grouping.py +50 -0
- shared/utils/common_knowledge.py +82 -0
- shared/utils/domain_mapper.py +61 -0
- shared/utils/embedding_utils.py +182 -0
- shared/utils/glob_match.py +93 -0
- shared/utils/header_tools.py +177 -0
- shared/utils/parallel_processor.py +60 -0
- shared/utils/parsing.py +189 -0
- shared/utils/path_utils.py +268 -0
- shared/utils/subprocess_utils.py +87 -0
- shared/workers/__init__.py +19 -0
- shared/workers/base.py +533 -0
- shared/workers/declaration_validator.py +124 -0
- shared/workers/loop_hold_telemetry.py +210 -0
- shared/workers/schedule.py +123 -0
- will/__init__.py +4 -0
- will/agents/__init__.py +4 -0
- will/agents/base_planner.py +133 -0
- will/agents/code_generation/__init__.py +15 -0
- will/agents/code_generation/code_generator.py +247 -0
- will/agents/code_generation/context_formatters.py +99 -0
- will/agents/code_generation/correction_engine.py +157 -0
- will/agents/code_generation/extraction.py +165 -0
- will/agents/code_generation/pattern_validator.py +264 -0
- will/agents/code_generation/prompt_builders.py +209 -0
- will/agents/coder_agent.py +229 -0
- will/agents/coder_agent_refusal_handler.py +168 -0
- will/agents/cognitive_orchestrator.py +152 -0
- will/agents/conversational/__init__.py +13 -0
- will/agents/conversational/agent.py +271 -0
- will/agents/conversational/factory.py +72 -0
- will/agents/conversational/helpers.py +116 -0
- will/agents/execution_agent.py +294 -0
- will/agents/governance_mixin.py +132 -0
- will/agents/planner_agent.py +261 -0
- will/agents/resource_selector.py +228 -0
- will/agents/strategic_auditor/__init__.py +15 -0
- will/agents/strategic_auditor/agent.py +199 -0
- will/agents/strategic_auditor/context_gatherer.py +586 -0
- will/agents/strategic_auditor/effects.py +136 -0
- will/agents/strategic_auditor/models.py +61 -0
- will/agents/strategic_auditor/reasoning.py +169 -0
- will/agents/tagger_agent.py +294 -0
- will/agents/traced_agent_mixin.py +33 -0
- will/autonomy/__init__.py +20 -0
- will/autonomy/autonomous_developer.py +127 -0
- will/autonomy/proposal.py +585 -0
- will/autonomy/proposal_execution_pipeline.py +264 -0
- will/autonomy/proposal_executor.py +410 -0
- will/autonomy/proposal_mapper.py +187 -0
- will/autonomy/proposal_repository.py +118 -0
- will/autonomy/proposal_service.py +251 -0
- will/autonomy/proposal_state_manager.py +239 -0
- will/deciders/__init__.py +9 -0
- will/deciders/governance_decider.py +207 -0
- will/governance/__init__.py +13 -0
- will/governance/audit_remediation_runner.py +197 -0
- will/governance/audit_runner.py +368 -0
- will/governance/census_runner.py +278 -0
- will/governance/coverage_runner.py +489 -0
- will/governance/daemon_runner.py +164 -0
- will/governance/fix_runner.py +693 -0
- will/governance/inspect_runner.py +521 -0
- will/governance/integrity_runner.py +66 -0
- will/governance/lint_runner.py +93 -0
- will/governance/refactor_runner.py +372 -0
- will/governance/sync_runner.py +186 -0
- will/interpreters/__init__.py +44 -0
- will/interpreters/cli_args_interpreter.py +106 -0
- will/interpreters/natural_language_interpreter.py +276 -0
- will/interpreters/request_interpreter.py +126 -0
- will/lifecycle/__init__.py +12 -0
- will/lifecycle/integration_runner.py +54 -0
- will/maintenance/metadata_scribe_service.py +64 -0
- will/orchestration/__init__.py +4 -0
- will/orchestration/cognitive_service.py +185 -0
- will/orchestration/decision_tracer.py +257 -0
- will/orchestration/intent_alignment.py +59 -0
- will/orchestration/intent_guard.py +20 -0
- will/orchestration/phase_registry.py +92 -0
- will/orchestration/process_orchestrator.py +270 -0
- will/orchestration/prompt_pipeline.py +174 -0
- will/orchestration/remediation_orchestrator.py +292 -0
- will/orchestration/self_correction_engine.py +154 -0
- will/orchestration/validation_pipeline.py +45 -0
- will/orchestration/workflow_orchestrator.py +277 -0
- will/phases/__init__.py +24 -0
- will/phases/audit_phase.py +152 -0
- will/phases/canary/pytest_runner.py +156 -0
- will/phases/canary/result_builder.py +130 -0
- will/phases/canary/test_discovery.py +104 -0
- will/phases/canary_validation_phase.py +188 -0
- will/phases/code_generation/artifact_saver.py +175 -0
- will/phases/code_generation/code_sensor.py +117 -0
- will/phases/code_generation/file_path_extractor.py +53 -0
- will/phases/code_generation/work_directory_manager.py +83 -0
- will/phases/code_generation_phase.py +480 -0
- will/phases/execution_phase.py +179 -0
- will/phases/interpret_phase.py +266 -0
- will/phases/load_phase.py +102 -0
- will/phases/parse_phase.py +117 -0
- will/phases/planning_phase.py +182 -0
- will/phases/runtime_phase.py +112 -0
- will/phases/sandbox_validation_phase.py +130 -0
- will/phases/style_check_phase.py +209 -0
- will/phases/test_generation_phase.py +159 -0
- will/self_healing/alignment/persistence.py +53 -0
- will/self_healing/alignment/sandbox.py +51 -0
- will/self_healing/alignment/specialists.py +165 -0
- will/self_healing/alignment_orchestrator.py +140 -0
- will/self_healing/audit_remediation_service.py +199 -0
- will/self_healing/batch_remediation_service.py +280 -0
- will/self_healing/capability_reconciliation_service.py +96 -0
- will/self_healing/capability_tagging_service.py +224 -0
- will/self_healing/clarity_service.py +204 -0
- will/self_healing/complexity_service.py +260 -0
- will/self_healing/context_aware_test_generator.py +298 -0
- will/self_healing/coverage_remediation_service.py +97 -0
- will/self_healing/coverage_watcher.py +192 -0
- will/self_healing/enrichment_service.py +211 -0
- will/self_healing/linelength_service.py +168 -0
- will/self_healing/modularity_remediation_service.py +203 -0
- will/self_healing/remediation_evidence_writer.py +144 -0
- will/self_healing/remediation_executor.py +113 -0
- will/self_healing/remediation_interpretation/__init__.py +1 -0
- will/self_healing/remediation_interpretation/file_context_assembler.py +383 -0
- will/self_healing/remediation_interpretation/file_role_detector.py +599 -0
- will/self_healing/remediation_interpretation/finding_normalizer.py +221 -0
- will/self_healing/remediation_interpretation/models.py +198 -0
- will/self_healing/remediation_interpretation/reasoning_brief_builder.py +235 -0
- will/self_healing/remediation_interpretation/responsibility_extractor.py +421 -0
- will/self_healing/remediation_interpretation/service.py +202 -0
- will/self_healing/remediation_interpretation/strategy_catalog.py +252 -0
- will/self_healing/remediation_interpretation/strategy_selector.py +395 -0
- will/self_healing/remediation_pattern_matcher.py +126 -0
- will/self_healing/simple_test_generator.py +252 -0
- will/self_healing/single_file_remediation.py +137 -0
- will/self_healing/test_generation/automatic_repair.py +377 -0
- will/self_healing/test_generation/code_extractor.py +238 -0
- will/self_healing/test_generation/context_builder.py +140 -0
- will/self_healing/test_generation/executor.py +64 -0
- will/self_healing/test_generation/failure_parser.py +37 -0
- will/self_healing/test_generation/generation_workflow.py +140 -0
- will/self_healing/test_generation/generator.py +283 -0
- will/self_healing/test_generation/llm_correction.py +160 -0
- will/self_healing/test_generation/repair_workflow.py +128 -0
- will/self_healing/test_generation/single_test_fixer.py +77 -0
- will/self_healing/test_generation/test_extractor.py +50 -0
- will/self_healing/test_generation/test_scorer.py +53 -0
- will/self_healing/test_generation/test_validator.py +64 -0
- will/self_healing/test_generator.py +12 -0
- will/strategists/__init__.py +46 -0
- will/strategists/base_strategist.py +29 -0
- will/strategists/clarity_strategist.py +55 -0
- will/strategists/complexity_strategist.py +55 -0
- will/strategists/fix_strategist.py +467 -0
- will/strategists/sync_strategist.py +369 -0
- will/strategists/test_strategist.py +140 -0
- will/strategists/validation_strategist.py +315 -0
- will/test_generation/__init__.py +46 -0
- will/test_generation/adaptive_test_generator.py +123 -0
- will/test_generation/artifacts.py +102 -0
- will/test_generation/harness_detection.py +103 -0
- will/test_generation/helpers/__init__.py +14 -0
- will/test_generation/helpers/context_extractor.py +100 -0
- will/test_generation/helpers/test_executor.py +230 -0
- will/test_generation/llm_output.py +62 -0
- will/test_generation/models.py +25 -0
- will/test_generation/persistence.py +248 -0
- will/test_generation/phases/__init__.py +16 -0
- will/test_generation/phases/generation_phase.py +150 -0
- will/test_generation/phases/load_phase.py +53 -0
- will/test_generation/phases/parse_phase.py +50 -0
- will/test_generation/prompt_engine.py +123 -0
- will/test_generation/result_aggregator.py +73 -0
- will/test_generation/sandbox.py +203 -0
- will/test_generation/strategy_link.py +56 -0
- will/test_generation/test_extractor.py +140 -0
- will/test_generation/validation.py +89 -0
- will/tools/__init__.py +13 -0
- will/tools/anchor_builder.py +111 -0
- will/tools/anchor_search.py +73 -0
- will/tools/anchors/discovery.py +55 -0
- will/tools/anchors/storage.py +32 -0
- will/tools/architectural_context_builder.py +94 -0
- will/tools/cognitive_toolbox.py +47 -0
- will/tools/context/code_snippet_extractor.py +83 -0
- will/tools/context/embedding_search.py +76 -0
- will/tools/context/formatter.py +87 -0
- will/tools/context/models.py +38 -0
- will/tools/context/query_builder.py +42 -0
- will/tools/context/retriever.py +182 -0
- will/tools/context/standards.py +53 -0
- will/tools/file_navigator.py +180 -0
- will/tools/layers.py +31 -0
- will/tools/module_anchor_generator.py +137 -0
- will/tools/module_descriptor.py +154 -0
- will/tools/policy_vectorizer.py +184 -0
- will/tools/symbol_finder.py +188 -0
- will/tools/tool_generator.py +103 -0
- will/workers/audit_ingest_worker.py +207 -0
- will/workers/audit_violation_filter.py +108 -0
- will/workers/audit_violation_normalizer.py +108 -0
- will/workers/audit_violation_sensor.py +370 -0
- will/workers/blackboard_shop_manager.py +280 -0
- will/workers/capability_tagger.py +153 -0
- will/workers/circuit_breaker.py +335 -0
- will/workers/coherence_sensor.py +212 -0
- will/workers/commit_reachability_auditor.py +135 -0
- will/workers/db_sync_worker.py +96 -0
- will/workers/governance_embedding/__init__.py +9 -0
- will/workers/governance_embedding/governance_embedder_worker.py +189 -0
- will/workers/intent_inspector.py +599 -0
- will/workers/observer_worker.py +158 -0
- will/workers/prompt_extractor_worker.py +241 -0
- will/workers/proposal_consumer_effects.py +216 -0
- will/workers/proposal_consumer_revival.py +131 -0
- will/workers/proposal_consumer_worker.py +271 -0
- will/workers/proposal_pipeline_shop_manager.py +273 -0
- will/workers/repo_crawler.py +171 -0
- will/workers/repo_embedding/__init__.py +18 -0
- will/workers/repo_embedding/helpers.py +245 -0
- will/workers/repo_embedding/repo_embedder_workers.py +163 -0
- will/workers/test_coverage_sensor.py +208 -0
- will/workers/test_remediator/__init__.py +12 -0
- will/workers/test_remediator/_operations.py +295 -0
- will/workers/test_remediator/worker.py +187 -0
- will/workers/test_runner_sensor.py +430 -0
- will/workers/violation_executor.py +496 -0
- will/workers/violation_remediator.py +394 -0
- will/workers/violation_remediator_blackboard.py +225 -0
- will/workers/violation_remediator_body/__init__.py +12 -0
- will/workers/violation_remediator_body/blackboard.py +139 -0
- will/workers/violation_remediator_body/ceremony.py +154 -0
- will/workers/violation_remediator_body/context.py +70 -0
- will/workers/violation_remediator_body/llm.py +112 -0
- will/workers/violation_remediator_body/models.py +35 -0
- will/workers/violation_remediator_body/worker.py +518 -0
- will/workers/violation_remediator_proposal.py +328 -0
- will/workers/worker_shop_manager.py +244 -0
- will/workflows/__init__.py +23 -0
- will/workflows/dev_sync_reporter.py +274 -0
- will/workflows/dev_sync_workflow.py +118 -0
cli/commands/develop.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# src/cli/commands/develop.py
|
|
2
|
+
"""Unified interface for AI-native development.
|
|
3
|
+
|
|
4
|
+
Thin client over POST /v1/refactor/autonomous (ADR-057 D2). The A3 loop
|
|
5
|
+
runs server-side; this CLI dispatches the goal, polls the run resource,
|
|
6
|
+
and renders the outcome.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
from rich.console import Console
|
|
16
|
+
from rich.panel import Panel
|
|
17
|
+
|
|
18
|
+
from api.cli import CoreApiClient
|
|
19
|
+
from cli.utils import core_command
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
console = Console()
|
|
24
|
+
develop_app = typer.Typer(
|
|
25
|
+
help="AI-native development with constitutional governance", no_args_is_help=True
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@develop_app.command("refactor")
|
|
30
|
+
@core_command(dangerous=True, requires_context=False)
|
|
31
|
+
# ID: 44c3e345-cc9a-4a81-a207-0ea84b69ff37
|
|
32
|
+
async def refactor_command(
|
|
33
|
+
ctx: typer.Context,
|
|
34
|
+
goal: str | None = typer.Argument(
|
|
35
|
+
None,
|
|
36
|
+
help="File path or high-level refactoring goal (e.g. 'src/utils.py' or 'Improve modularity of UserService').",
|
|
37
|
+
),
|
|
38
|
+
from_file: Path | None = typer.Option(
|
|
39
|
+
None, "--from-file", "-f", help="Read the goal from a file."
|
|
40
|
+
),
|
|
41
|
+
write: bool = typer.Option(
|
|
42
|
+
False, "--write", help="Actually apply changes to the codebase."
|
|
43
|
+
),
|
|
44
|
+
):
|
|
45
|
+
"""Initiates an autonomous refactoring cycle via /v1/refactor/autonomous.
|
|
46
|
+
|
|
47
|
+
The command intelligently formats goals for INTERPRET phase:
|
|
48
|
+
- If goal looks like a file path: "refactor {path} for better modularity"
|
|
49
|
+
- If goal is natural language: passes as-is
|
|
50
|
+
"""
|
|
51
|
+
_ = ctx
|
|
52
|
+
if not goal and (not from_file):
|
|
53
|
+
console.print(
|
|
54
|
+
"[red]❌ You must provide a goal either as an argument or with --from-file.[/red]"
|
|
55
|
+
)
|
|
56
|
+
raise typer.Exit(code=1)
|
|
57
|
+
|
|
58
|
+
raw_goal = (
|
|
59
|
+
from_file.read_text(encoding="utf-8").strip() if from_file else goal.strip()
|
|
60
|
+
)
|
|
61
|
+
goal_content = _format_refactor_goal(raw_goal)
|
|
62
|
+
if goal_content != raw_goal:
|
|
63
|
+
console.print(f"🔍 Formatted goal for INTERPRET phase: {goal_content}")
|
|
64
|
+
|
|
65
|
+
console.print(f"🚀 Starting autonomous refactor for: {goal_content}")
|
|
66
|
+
client = CoreApiClient()
|
|
67
|
+
initial = await client.refactor_autonomous(goal=goal_content, write=write)
|
|
68
|
+
run_id = initial.get("run_id")
|
|
69
|
+
if not run_id:
|
|
70
|
+
console.print(
|
|
71
|
+
f"[red]❌ refactor_autonomous failed to dispatch: {initial}[/red]"
|
|
72
|
+
)
|
|
73
|
+
raise typer.Exit(code=1)
|
|
74
|
+
|
|
75
|
+
console.print(f"[dim]Dispatched run {run_id} — polling…[/dim]")
|
|
76
|
+
final = await client.poll_refactor_run(run_id)
|
|
77
|
+
|
|
78
|
+
result = final.get("result") or {}
|
|
79
|
+
message = result.get("message") or final.get("error") or "(no message)"
|
|
80
|
+
if final.get("status") == "completed" and result.get("success"):
|
|
81
|
+
console.print(f"\n[bold green]✅ Success:[/bold green] {message}")
|
|
82
|
+
proposals = result.get("proposal_ids") or []
|
|
83
|
+
if proposals:
|
|
84
|
+
console.print(
|
|
85
|
+
f"[cyan]Generated {len(proposals)} proposal(s):[/cyan] "
|
|
86
|
+
+ ", ".join(proposals[:5])
|
|
87
|
+
+ (f" (+{len(proposals) - 5} more)" if len(proposals) > 5 else "")
|
|
88
|
+
)
|
|
89
|
+
else:
|
|
90
|
+
console.print(f"[red]Goal execution failed: {message}[/red]")
|
|
91
|
+
raise typer.Exit(code=1)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _format_refactor_goal(raw_goal: str) -> str:
|
|
95
|
+
"""Format raw goal into INTERPRET-friendly refactoring goal."""
|
|
96
|
+
refactor_keywords = [
|
|
97
|
+
"refactor",
|
|
98
|
+
"modularity",
|
|
99
|
+
"split",
|
|
100
|
+
"extract",
|
|
101
|
+
"improve",
|
|
102
|
+
"clarity",
|
|
103
|
+
]
|
|
104
|
+
if any(keyword in raw_goal.lower() for keyword in refactor_keywords):
|
|
105
|
+
return raw_goal
|
|
106
|
+
if "/" in raw_goal or raw_goal.endswith(".py"):
|
|
107
|
+
return f"refactor {raw_goal} for better modularity"
|
|
108
|
+
return raw_goal
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@develop_app.command("info")
|
|
112
|
+
# ID: 7964aa47-e138-4519-bdf3-e788b388e426
|
|
113
|
+
def info():
|
|
114
|
+
"""Show information about the autonomous development system."""
|
|
115
|
+
body = (
|
|
116
|
+
"[bold cyan]CORE Autonomous Development[/bold cyan]\n\n"
|
|
117
|
+
"This command group uses the A3 (Planning-Specification-Execution) loop\n"
|
|
118
|
+
"to perform complex code modifications autonomously via the API.\n\n"
|
|
119
|
+
'Usage: [yellow]core-admin develop refactor "your goal"[/yellow]\n\n'
|
|
120
|
+
"[bold]Smart Goal Formatting:[/bold]\n"
|
|
121
|
+
"• File paths are auto-formatted with refactoring context\n"
|
|
122
|
+
"• Natural language goals pass through unchanged\n\n"
|
|
123
|
+
"Examples:\n"
|
|
124
|
+
" core-admin develop refactor src/utils.py --write\n"
|
|
125
|
+
' core-admin develop refactor "Improve clarity of AuthService" --write'
|
|
126
|
+
)
|
|
127
|
+
console.print(Panel.fit(body, border_style="cyan"))
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# src/cli/commands/diagnostics.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Diagnostic Command Group (Cleaned).
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL PROMOTION (v2.6):
|
|
7
|
+
- Evacuated find-clusters and command-tree (Redundant aliases).
|
|
8
|
+
- Promoted debug-meta to admin.meta (ConstitutionalPathAnalyzer).
|
|
9
|
+
- Promoted unassigned-symbols to symbols.audit.
|
|
10
|
+
|
|
11
|
+
This file now only houses legacy Verb-First check shims.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
|
|
18
|
+
from cli.logic.diagnostics_policy import policy_coverage
|
|
19
|
+
from cli.logic.diagnostics_registry import (
|
|
20
|
+
check_legacy_tags,
|
|
21
|
+
cli_registry,
|
|
22
|
+
manifest_hygiene,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
app = typer.Typer(help="System integrity checks and constitutional auditing.")
|
|
27
|
+
|
|
28
|
+
# Register existing commands (These are still being promoted to Resource Neurons)
|
|
29
|
+
app.command("policy-coverage", help="Audits constitution coverage.")(policy_coverage)
|
|
30
|
+
app.command("manifest-hygiene", help="Checks capability manifests.")(manifest_hygiene)
|
|
31
|
+
app.command("cli-registry", help="Validates CLI registry schema.")(cli_registry)
|
|
32
|
+
app.command("legacy-tags", help="Scans for obsolete tags.")(check_legacy_tags)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# src/cli/commands/fix/__init__.py
|
|
2
|
+
"""
|
|
3
|
+
Registers the 'fix' command group and its associated self-healing capabilities.
|
|
4
|
+
|
|
5
|
+
This module acts as a pure registration hub for the CLI.
|
|
6
|
+
Logic and UI helpers have been moved to prevent circular imports
|
|
7
|
+
between the CLI and the Atomic Body layers.
|
|
8
|
+
|
|
9
|
+
LEGACY ELIMINATION:
|
|
10
|
+
- Removed 'line-lengths' per Roadmap.
|
|
11
|
+
- Removed internal UI helpers to break circular dependencies.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
from rich.console import Console
|
|
18
|
+
|
|
19
|
+
from shared.context import CoreContext
|
|
20
|
+
from shared.logger import getLogger
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
logger = getLogger(__name__)
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
# Configuration mapping for CLI metadata
|
|
27
|
+
COMMAND_CONFIG = {
|
|
28
|
+
"code-style": {"category": "formatting", "dangerous": False},
|
|
29
|
+
"headers": {"category": "compliance", "dangerous": True},
|
|
30
|
+
"clarity": {"category": "refactoring", "dangerous": True},
|
|
31
|
+
"complexity": {"category": "refactoring", "dangerous": True},
|
|
32
|
+
"ids": {"category": "metadata", "dangerous": True},
|
|
33
|
+
"purge-legacy-tags": {"category": "cleanup", "dangerous": True},
|
|
34
|
+
"policy-ids": {"category": "metadata", "dangerous": True},
|
|
35
|
+
"tags": {"category": "metadata", "dangerous": True},
|
|
36
|
+
"knowledge-graph": {"category": "database", "dangerous": False},
|
|
37
|
+
"duplicate-ids": {"category": "metadata", "dangerous": True},
|
|
38
|
+
"vector-sync": {"category": "database", "dangerous": True},
|
|
39
|
+
"atomic-actions": {"category": "compliance", "dangerous": True},
|
|
40
|
+
"body-ui": {"category": "governance", "dangerous": True},
|
|
41
|
+
"imports": {"category": "formatting", "dangerous": False},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fix_app = typer.Typer(
|
|
45
|
+
help="Self-healing tools that write changes to the codebase.",
|
|
46
|
+
no_args_is_help=True,
|
|
47
|
+
rich_markup_mode="rich",
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@fix_app.callback()
|
|
52
|
+
# ID: 4165545f-18b7-4890-b89f-605ae2772b16
|
|
53
|
+
def fix_callback(
|
|
54
|
+
ctx: typer.Context,
|
|
55
|
+
verbose: bool = typer.Option(
|
|
56
|
+
False, "--verbose", "-v", help="Enable verbose output"
|
|
57
|
+
),
|
|
58
|
+
debug: bool = typer.Option(False, "--debug", help="Enable debug output"),
|
|
59
|
+
):
|
|
60
|
+
"""Self-healing tools organized by category."""
|
|
61
|
+
core_context: CoreContext = ctx.obj
|
|
62
|
+
if debug:
|
|
63
|
+
core_context.debug = True
|
|
64
|
+
if verbose:
|
|
65
|
+
core_context.verbose = True
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# LATE IMPORTS: These register themselves on fix_app when imported.
|
|
69
|
+
# This must remain at the bottom to ensure fix_app is defined first.
|
|
70
|
+
import cli.commands.fix.all_commands
|
|
71
|
+
import cli.commands.fix.atomic_actions
|
|
72
|
+
import cli.commands.fix.audit
|
|
73
|
+
import cli.commands.fix.body_ui
|
|
74
|
+
|
|
75
|
+
# import cli.commands.fix.clarity
|
|
76
|
+
import cli.commands.fix.code_style
|
|
77
|
+
import cli.commands.fix.db_tools
|
|
78
|
+
import cli.commands.fix.fix_ir
|
|
79
|
+
import cli.commands.fix.handler_discovery
|
|
80
|
+
import cli.commands.fix.imports
|
|
81
|
+
import cli.commands.fix.list_commands
|
|
82
|
+
import cli.commands.fix.metadata
|
|
83
|
+
import cli.commands.fix.modularity
|
|
84
|
+
import cli.commands.fix.settings_access
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# src/cli/commands/fix/all_commands.py
|
|
2
|
+
"""
|
|
3
|
+
Batch execution command for the 'fix' CLI group.
|
|
4
|
+
|
|
5
|
+
`core-admin fix all` runs a curated sequence of registered atomic
|
|
6
|
+
actions via POST /v1/fix/run/{fix_id} and POST /v1/fix/ir. The
|
|
7
|
+
sequence preserves the original prerequisite ordering.
|
|
8
|
+
|
|
9
|
+
Three pre-migration steps (purge-legacy-tags, policy-ids, knowledge-graph)
|
|
10
|
+
have no registered atomic action and were dropped from the sequence —
|
|
11
|
+
they remain available as standalone CLI subcommands. Filed as
|
|
12
|
+
governance debt; future Stage B reopens may restore the bundle.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
import typer
|
|
20
|
+
from rich.console import Console
|
|
21
|
+
|
|
22
|
+
from api.cli import CoreApiClient
|
|
23
|
+
from cli.utils import core_command
|
|
24
|
+
|
|
25
|
+
from . import COMMAND_CONFIG, fix_app
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
console = Console()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
_PLAN: list[tuple[str, str, str | None]] = [
|
|
33
|
+
# (step name, fix_id for /fix/run, or ir_kind for /fix/ir)
|
|
34
|
+
("code-style", "fix.format", None),
|
|
35
|
+
("ids", "fix.ids", None),
|
|
36
|
+
("knowledge-sync", "sync.db", None),
|
|
37
|
+
("vector-sync", "sync.vectors_code", None),
|
|
38
|
+
("docstrings", "fix.docstrings", None),
|
|
39
|
+
("tags", "fix.capability_tagging", None),
|
|
40
|
+
("ir-triage", "", "triage"),
|
|
41
|
+
("ir-log", "", "log"),
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@fix_app.command("all", help="Run a curated sequence of self-healing fixes.")
|
|
46
|
+
@core_command(dangerous=True, confirmation=True)
|
|
47
|
+
# ID: af5b3d93-3b58-45f9-bce6-33a5886d2a3c
|
|
48
|
+
async def run_all_fixes(
|
|
49
|
+
ctx: typer.Context,
|
|
50
|
+
skip_dangerous: bool = typer.Option(
|
|
51
|
+
True, help="Skip potentially dangerous operations that modify code logic."
|
|
52
|
+
),
|
|
53
|
+
write: bool = typer.Option(
|
|
54
|
+
False, "--write", help="Apply changes. Default is dry-run."
|
|
55
|
+
),
|
|
56
|
+
) -> None:
|
|
57
|
+
"""
|
|
58
|
+
Run a curated set of fix subcommands in a sequence that respects dependencies.
|
|
59
|
+
"""
|
|
60
|
+
_ = ctx
|
|
61
|
+
client = CoreApiClient()
|
|
62
|
+
mode_str = "write" if write else "dry-run"
|
|
63
|
+
|
|
64
|
+
for name, fix_id, ir_kind in _PLAN:
|
|
65
|
+
cfg = COMMAND_CONFIG.get(name, {})
|
|
66
|
+
is_dangerous = cfg.get("dangerous", False)
|
|
67
|
+
if skip_dangerous and is_dangerous and write:
|
|
68
|
+
console.print(f"[yellow]Skipping dangerous command 'fix {name}'.[/yellow]")
|
|
69
|
+
continue
|
|
70
|
+
console.print(f"[bold cyan]▶ Running 'fix {name}' ({mode_str})[/bold cyan]")
|
|
71
|
+
|
|
72
|
+
if ir_kind is not None:
|
|
73
|
+
try:
|
|
74
|
+
result = await client.fix_ir(ir_kind)
|
|
75
|
+
console.print(f" -> IR scaffold: {result.get('path', '(unknown)')}")
|
|
76
|
+
except Exception as exc:
|
|
77
|
+
console.print(f" [red]✗ fix {name} failed: {exc}[/red]")
|
|
78
|
+
continue
|
|
79
|
+
|
|
80
|
+
initial = await client.run_fix(fix_id, write=write)
|
|
81
|
+
run_id = initial.get("run_id")
|
|
82
|
+
if not run_id:
|
|
83
|
+
console.print(f" [red]✗ {fix_id} failed to dispatch: {initial}[/red]")
|
|
84
|
+
continue
|
|
85
|
+
final = await client._poll_run(run_id)
|
|
86
|
+
status = final.get("status")
|
|
87
|
+
if status != "completed":
|
|
88
|
+
console.print(
|
|
89
|
+
f" [red]✗ {fix_id} failed: {final.get('error') or final}[/red]"
|
|
90
|
+
)
|
|
91
|
+
continue
|
|
92
|
+
console.print(f" [green]✓ {fix_id} completed.[/green]")
|
|
93
|
+
|
|
94
|
+
console.print("[green]✅ 'fix all' sequence completed[/green]")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# src/cli/commands/fix/atomic_actions.py
|
|
2
|
+
"""
|
|
3
|
+
Fix atomic actions pattern violations — thin client over
|
|
4
|
+
POST /v1/fix/run/fix.atomic_actions.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
|
|
11
|
+
import typer
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
|
|
14
|
+
from api.cli import CoreApiClient
|
|
15
|
+
from cli.utils import core_command
|
|
16
|
+
|
|
17
|
+
from . import fix_app
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
console = Console()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@fix_app.command("atomic-actions", help="Fix atomic actions pattern violations.")
|
|
25
|
+
@core_command(dangerous=True, confirmation=False)
|
|
26
|
+
# ID: d729c8ff-0b0c-4873-85b6-0b8151a4265c
|
|
27
|
+
async def fix_atomic_actions_cmd(
|
|
28
|
+
ctx: typer.Context,
|
|
29
|
+
write: bool = typer.Option(False, "--write", help="Apply fixes."),
|
|
30
|
+
) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Dispatches fix.atomic_actions via POST /v1/fix/run/{fix_id}.
|
|
33
|
+
"""
|
|
34
|
+
_ = ctx
|
|
35
|
+
console.print("[cyan]Healing atomic actions...[/cyan]")
|
|
36
|
+
client = CoreApiClient()
|
|
37
|
+
initial = await client.run_fix("fix.atomic_actions", write=write)
|
|
38
|
+
run_id = initial.get("run_id")
|
|
39
|
+
if not run_id:
|
|
40
|
+
console.print(f"[red]fix.atomic_actions failed to dispatch: {initial}[/red]")
|
|
41
|
+
raise typer.Exit(1)
|
|
42
|
+
final = await client._poll_run(run_id)
|
|
43
|
+
if final.get("status") != "completed":
|
|
44
|
+
console.print(
|
|
45
|
+
f"[red]fix.atomic_actions failed: {final.get('error') or final}[/red]"
|
|
46
|
+
)
|
|
47
|
+
raise typer.Exit(1)
|
|
48
|
+
console.print("[green]✓ fix.atomic_actions completed.[/green]")
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# src/cli/commands/fix/audit.py
|
|
2
|
+
"""Audit remediation command for the 'fix' CLI group.
|
|
3
|
+
|
|
4
|
+
Thin client over POST /v1/audit/remediations (ADR-057 D4). The CLI
|
|
5
|
+
dispatches an audit_run_id + mode + write flag and polls the
|
|
6
|
+
audit_remediation_runs lifecycle. All remediation logic runs server-side.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
from rich.table import Table
|
|
15
|
+
|
|
16
|
+
from api.cli import CoreApiClient
|
|
17
|
+
from cli.utils import core_command
|
|
18
|
+
|
|
19
|
+
from . import console, fix_app
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# The CLI accepts both the long-form RemediationMode value names
|
|
26
|
+
# (safe_only / medium_risk / all_deterministic) and the wire-format names
|
|
27
|
+
# the API expects (safe / medium / all). Long-form names are translated.
|
|
28
|
+
_MODE_TO_WIRE = {
|
|
29
|
+
"safe": "safe",
|
|
30
|
+
"medium": "medium",
|
|
31
|
+
"all": "all",
|
|
32
|
+
"safe_only": "safe",
|
|
33
|
+
"medium_risk": "medium",
|
|
34
|
+
"all_deterministic": "all",
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@fix_app.command("audit")
|
|
39
|
+
@core_command(dangerous=True, confirmation=True, requires_context=False)
|
|
40
|
+
# ID: 02131c6f-4f7e-4141-a7c6-7f72b7392e9f
|
|
41
|
+
async def fix_audit_command(
|
|
42
|
+
ctx: typer.Context,
|
|
43
|
+
audit_run_id: str = typer.Option(
|
|
44
|
+
...,
|
|
45
|
+
"--audit-run-id",
|
|
46
|
+
help="UUID of the audit_runs row whose findings should be remediated.",
|
|
47
|
+
),
|
|
48
|
+
write: bool = typer.Option(
|
|
49
|
+
False, "--write", help="Actually apply fixes (default: dry-run)"
|
|
50
|
+
),
|
|
51
|
+
mode: str = typer.Option(
|
|
52
|
+
"safe",
|
|
53
|
+
"--mode",
|
|
54
|
+
help="Risk tolerance: safe | medium | all (long-form: safe_only / medium_risk / all_deterministic).",
|
|
55
|
+
),
|
|
56
|
+
) -> None:
|
|
57
|
+
"""Autonomous remediation of audit findings via /v1/audit/remediations.
|
|
58
|
+
|
|
59
|
+
Examples:
|
|
60
|
+
# Dry-run — see what would be fixed
|
|
61
|
+
core-admin fix audit --audit-run-id <uuid>
|
|
62
|
+
|
|
63
|
+
# Apply safe fixes
|
|
64
|
+
core-admin fix audit --audit-run-id <uuid> --write
|
|
65
|
+
|
|
66
|
+
# Apply medium-risk fixes
|
|
67
|
+
core-admin fix audit --audit-run-id <uuid> --write --mode medium
|
|
68
|
+
"""
|
|
69
|
+
_ = ctx
|
|
70
|
+
wire_mode = _MODE_TO_WIRE.get(mode)
|
|
71
|
+
if wire_mode is None:
|
|
72
|
+
console.print(
|
|
73
|
+
f"[red]Invalid mode: {mode}[/red]\n"
|
|
74
|
+
"Valid modes: safe, medium, all "
|
|
75
|
+
"(long-form aliases: safe_only, medium_risk, all_deterministic)"
|
|
76
|
+
)
|
|
77
|
+
raise typer.Exit(1)
|
|
78
|
+
|
|
79
|
+
console.print("\n[bold cyan]🔧 CORE Audit Remediation[/bold cyan]")
|
|
80
|
+
console.print(f"Audit run: {audit_run_id}")
|
|
81
|
+
console.print(f"Mode: {wire_mode}")
|
|
82
|
+
console.print(
|
|
83
|
+
f"Write: {'YES - Will modify files' if write else 'NO - Dry run only'}"
|
|
84
|
+
)
|
|
85
|
+
console.print()
|
|
86
|
+
|
|
87
|
+
client = CoreApiClient()
|
|
88
|
+
initial = await client.audit_remediate(
|
|
89
|
+
audit_run_id=audit_run_id, mode=wire_mode, write=write
|
|
90
|
+
)
|
|
91
|
+
run_id = initial.get("run_id")
|
|
92
|
+
if not run_id:
|
|
93
|
+
console.print(f"[red]❌ audit_remediate failed to dispatch: {initial}[/red]")
|
|
94
|
+
raise typer.Exit(code=1)
|
|
95
|
+
|
|
96
|
+
console.print(f"[dim]Dispatched run {run_id} — polling…[/dim]")
|
|
97
|
+
final = await client.poll_audit_remediation_run(run_id)
|
|
98
|
+
if final.get("status") != "completed":
|
|
99
|
+
console.print(
|
|
100
|
+
f"[red]❌ Remediation failed: {final.get('error') or final}[/red]"
|
|
101
|
+
)
|
|
102
|
+
raise typer.Exit(code=1)
|
|
103
|
+
|
|
104
|
+
_display_results(final.get("result") or {}, write=write)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _display_results(result: dict, *, write: bool) -> None:
|
|
108
|
+
"""Display remediation results in a Rich table."""
|
|
109
|
+
console.print("\n[bold]📊 Remediation Summary[/bold]\n")
|
|
110
|
+
summary_table = Table(show_header=False, box=None)
|
|
111
|
+
summary_table.add_column("Metric", style="cyan")
|
|
112
|
+
summary_table.add_column("Value", style="white")
|
|
113
|
+
summary_table.add_row("Total findings", str(result.get("total_findings", 0)))
|
|
114
|
+
summary_table.add_row("Fixes attempted", str(result.get("fixes_attempted", 0)))
|
|
115
|
+
summary_table.add_row(
|
|
116
|
+
"Fixes succeeded",
|
|
117
|
+
f"[green]{result.get('fixes_succeeded', 0)}[/green]",
|
|
118
|
+
)
|
|
119
|
+
if write:
|
|
120
|
+
summary_table.add_row("", "")
|
|
121
|
+
summary_table.add_row("Findings before", str(result.get("findings_before", 0)))
|
|
122
|
+
summary_table.add_row("Findings after", str(result.get("findings_after", 0)))
|
|
123
|
+
delta = int(result.get("improvement_delta", 0))
|
|
124
|
+
delta_color = "green" if delta > 0 else "red"
|
|
125
|
+
summary_table.add_row(
|
|
126
|
+
"Improvement",
|
|
127
|
+
f"[{delta_color}]{delta} fewer violations[/{delta_color}]",
|
|
128
|
+
)
|
|
129
|
+
console.print(summary_table)
|
|
130
|
+
|
|
131
|
+
if write:
|
|
132
|
+
if result.get("validation_passed"):
|
|
133
|
+
console.print("[green]✅ Validation PASSED - Quality improved[/green]")
|
|
134
|
+
else:
|
|
135
|
+
console.print("[red]❌ Validation FAILED - No improvement[/red]")
|
|
136
|
+
|
|
137
|
+
output_path = result.get("remediation_output_path")
|
|
138
|
+
if output_path:
|
|
139
|
+
console.print(f"\n[bold]📝 Evidence:[/bold] {output_path}")
|
|
140
|
+
|
|
141
|
+
if not write and result.get("fixes_attempted", 0) > 0:
|
|
142
|
+
console.print(
|
|
143
|
+
"\n[bold yellow]💡 Tip:[/bold yellow] Run with [cyan]--write[/cyan] "
|
|
144
|
+
"to apply these fixes"
|
|
145
|
+
)
|
|
146
|
+
console.print()
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# src/cli/commands/fix/body_ui.py
|
|
2
|
+
"""
|
|
3
|
+
CLI command: `core-admin fix body-ui`
|
|
4
|
+
|
|
5
|
+
Thin client over POST /v1/quality/body-ui (read) + POST /v1/fix/run/fix.body_ui
|
|
6
|
+
(write). Dry-run returns the violation list inline; --write dispatches the
|
|
7
|
+
LLM fixer asynchronously and polls.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
from rich.console import Console
|
|
16
|
+
|
|
17
|
+
from api.cli import CoreApiClient
|
|
18
|
+
from cli.utils import core_command
|
|
19
|
+
|
|
20
|
+
from . import fix_app
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@fix_app.command("body-ui", help="Fix Body-layer UI contract violations.")
|
|
28
|
+
@core_command(dangerous=True, confirmation=True)
|
|
29
|
+
# ID: e080af6d-2e0e-4b5d-967b-61c5b7223aaa
|
|
30
|
+
async def fix_body_ui_command(
|
|
31
|
+
ctx: typer.Context,
|
|
32
|
+
write: bool = typer.Option(
|
|
33
|
+
False,
|
|
34
|
+
"--write/--dry-run",
|
|
35
|
+
help="Dry-run by default; use --write to apply changes.",
|
|
36
|
+
),
|
|
37
|
+
count: int = typer.Option(
|
|
38
|
+
None,
|
|
39
|
+
"--count",
|
|
40
|
+
"-n",
|
|
41
|
+
help="Limit the number of files to process (for safety/testing).",
|
|
42
|
+
),
|
|
43
|
+
) -> None:
|
|
44
|
+
"""
|
|
45
|
+
Fix Body-layer UI/env violations (Rich, print/input, os.environ) using the LLM.
|
|
46
|
+
|
|
47
|
+
Dry-run path uses POST /v1/quality/body-ui (sync check) and reports the
|
|
48
|
+
violation count. --write path dispatches POST /v1/fix/run/fix.body_ui
|
|
49
|
+
(async LLM fixer), polls, and reports the summary.
|
|
50
|
+
"""
|
|
51
|
+
_ = ctx
|
|
52
|
+
console.print("\n[bold cyan]🔧 Body UI Contracts Fixer[/bold cyan]\n")
|
|
53
|
+
client = CoreApiClient()
|
|
54
|
+
|
|
55
|
+
if not write:
|
|
56
|
+
console.print(
|
|
57
|
+
"[yellow]Running in DRY-RUN mode. Use --write to apply changes.[/yellow]\n"
|
|
58
|
+
)
|
|
59
|
+
check = await client.quality_body_ui()
|
|
60
|
+
if check.get("status") == "ok":
|
|
61
|
+
console.print("[green]✓ Body contracts compliant.[/green]")
|
|
62
|
+
return
|
|
63
|
+
violations = check.get("violations", [])
|
|
64
|
+
unique_files = len({v.get("file") for v in violations if v.get("file")})
|
|
65
|
+
console.print("[bold]Summary:[/bold]")
|
|
66
|
+
console.print(f" Files with violations : {unique_files}")
|
|
67
|
+
console.print(f" Total violations : {len(violations)}")
|
|
68
|
+
console.print(" Mode : DRY-RUN")
|
|
69
|
+
console.print("\n[yellow]Use --write to apply these changes.[/yellow]")
|
|
70
|
+
return
|
|
71
|
+
|
|
72
|
+
if count:
|
|
73
|
+
console.print(f"[dim]Limiting processing to first {count} file(s).[/dim]\n")
|
|
74
|
+
params: dict[str, object] = {}
|
|
75
|
+
if count is not None:
|
|
76
|
+
params["limit"] = count
|
|
77
|
+
initial = await client.run_fix("fix.body_ui", write=True, params=params)
|
|
78
|
+
run_id = initial.get("run_id")
|
|
79
|
+
if not run_id:
|
|
80
|
+
console.print(f"[red]fix.body_ui failed to dispatch: {initial}[/red]")
|
|
81
|
+
raise typer.Exit(1)
|
|
82
|
+
final = await client._poll_run(run_id)
|
|
83
|
+
if final.get("status") != "completed":
|
|
84
|
+
console.print(f"[red]fix.body_ui failed: {final.get('error') or final}[/red]")
|
|
85
|
+
raise typer.Exit(1)
|
|
86
|
+
|
|
87
|
+
result_data = (final.get("result") or {}).get("data", {})
|
|
88
|
+
console.print("[bold]Summary:[/bold]")
|
|
89
|
+
console.print(f" Files found : {result_data.get('files_found', 0)}")
|
|
90
|
+
console.print(f" Files processed : {result_data.get('files_processed', 0)}")
|
|
91
|
+
console.print(f" Files modified : {result_data.get('files_modified', 0)}")
|
|
92
|
+
console.print(" Mode : WRITE")
|
|
93
|
+
console.print("\n[green]✓ Body UI contracts successfully applied.[/green]")
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# src/cli/commands/fix/code_style.py
|
|
2
|
+
"""
|
|
3
|
+
Code style and formatting commands for the 'fix' CLI group.
|
|
4
|
+
|
|
5
|
+
Provides:
|
|
6
|
+
- fix headers — thin client over POST /v1/fix/run/fix.headers
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
|
|
16
|
+
from api.cli import CoreApiClient
|
|
17
|
+
from cli.utils import core_command
|
|
18
|
+
|
|
19
|
+
from . import fix_app
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@fix_app.command(
|
|
27
|
+
"headers", help="Ensures all files have constitutionally compliant headers."
|
|
28
|
+
)
|
|
29
|
+
@core_command(dangerous=True, confirmation=True)
|
|
30
|
+
# ID: 0077efbb-9090-42bb-a602-2ff3b7853875
|
|
31
|
+
async def fix_headers_cmd(
|
|
32
|
+
ctx: typer.Context,
|
|
33
|
+
write: bool = typer.Option(
|
|
34
|
+
False, "--write", help="Apply fixes to files with violations."
|
|
35
|
+
),
|
|
36
|
+
) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Dispatches fix.headers via POST /v1/fix/run/{fix_id}.
|
|
39
|
+
"""
|
|
40
|
+
_ = ctx
|
|
41
|
+
console.print("[cyan]Checking file headers...[/cyan]")
|
|
42
|
+
client = CoreApiClient()
|
|
43
|
+
initial = await client.run_fix("fix.headers", write=write)
|
|
44
|
+
run_id = initial.get("run_id")
|
|
45
|
+
if not run_id:
|
|
46
|
+
console.print(f"[red]fix.headers failed to dispatch: {initial}[/red]")
|
|
47
|
+
raise typer.Exit(1)
|
|
48
|
+
final = await client._poll_run(run_id)
|
|
49
|
+
if final.get("status") != "completed":
|
|
50
|
+
console.print(f"[red]fix.headers failed: {final.get('error') or final}[/red]")
|
|
51
|
+
raise typer.Exit(1)
|
|
52
|
+
console.print("[green]✓ fix.headers completed.[/green]")
|