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,90 @@
|
|
|
1
|
+
# src/cli/commands/fix/db_tools.py
|
|
2
|
+
"""
|
|
3
|
+
Database and vector-related commands for the 'fix' CLI group.
|
|
4
|
+
|
|
5
|
+
Thin clients over POST /v1/sync/knowledge-graph and POST /v1/sync/vectors
|
|
6
|
+
(ADR-058 D2). Both endpoints dispatch async; the CLI polls the
|
|
7
|
+
sync_runs resource until terminal.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
|
|
14
|
+
import typer
|
|
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
|
+
|
|
24
|
+
|
|
25
|
+
@fix_app.command(
|
|
26
|
+
"knowledge-graph",
|
|
27
|
+
help="Synchronize code symbols to the PostgreSQL knowledge graph.",
|
|
28
|
+
)
|
|
29
|
+
@core_command(dangerous=True, confirmation=False, requires_context=False)
|
|
30
|
+
# ID: 40bd8310-f78e-43bd-bc79-21b3519bc802
|
|
31
|
+
async def sync_knowledge_graph_command(ctx: typer.Context) -> None:
|
|
32
|
+
"""Thin client over POST /v1/sync/knowledge-graph."""
|
|
33
|
+
_ = ctx
|
|
34
|
+
typer.secho("Syncing knowledge graph to database...", fg=typer.colors.CYAN)
|
|
35
|
+
client = CoreApiClient()
|
|
36
|
+
initial = await client.sync_knowledge_graph(write=True)
|
|
37
|
+
run_id = initial.get("run_id")
|
|
38
|
+
if not run_id:
|
|
39
|
+
typer.secho(
|
|
40
|
+
f"❌ sync_knowledge_graph failed to dispatch: {initial}",
|
|
41
|
+
fg=typer.colors.RED,
|
|
42
|
+
)
|
|
43
|
+
raise typer.Exit(1)
|
|
44
|
+
final = await client.poll_sync_run(run_id)
|
|
45
|
+
if final.get("status") != "completed":
|
|
46
|
+
typer.secho(
|
|
47
|
+
f"❌ Knowledge graph sync failed: {final.get('error') or final}",
|
|
48
|
+
fg=typer.colors.RED,
|
|
49
|
+
)
|
|
50
|
+
raise typer.Exit(1)
|
|
51
|
+
typer.secho("✅ Knowledge graph sync completed", fg=typer.colors.GREEN)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@fix_app.command(
|
|
55
|
+
"vector-sync", help="Atomically synchronize vectors between PostgreSQL and Qdrant."
|
|
56
|
+
)
|
|
57
|
+
@core_command(dangerous=True, confirmation=True, requires_context=False)
|
|
58
|
+
# ID: 945cd068-91ec-4e32-acd0-2e1be5148732
|
|
59
|
+
async def fix_vector_sync_command(
|
|
60
|
+
ctx: typer.Context,
|
|
61
|
+
write: bool = typer.Option(
|
|
62
|
+
False,
|
|
63
|
+
"--write",
|
|
64
|
+
help="Apply fixes to both PostgreSQL and Qdrant (otherwise dry-run).",
|
|
65
|
+
),
|
|
66
|
+
) -> None:
|
|
67
|
+
"""Atomic bidirectional vector synchronization via POST /v1/sync/vectors."""
|
|
68
|
+
_ = ctx
|
|
69
|
+
typer.secho("Synchronizing vector database...", fg=typer.colors.CYAN)
|
|
70
|
+
client = CoreApiClient()
|
|
71
|
+
initial = await client.sync_vectors(write=write)
|
|
72
|
+
run_id = initial.get("run_id")
|
|
73
|
+
if not run_id:
|
|
74
|
+
typer.secho(
|
|
75
|
+
f"❌ sync_vectors failed to dispatch: {initial}", fg=typer.colors.RED
|
|
76
|
+
)
|
|
77
|
+
raise typer.Exit(1)
|
|
78
|
+
final = await client.poll_sync_run(run_id)
|
|
79
|
+
if final.get("status") != "completed":
|
|
80
|
+
typer.secho(
|
|
81
|
+
f"❌ Vector synchronization failed: {final.get('error') or final}",
|
|
82
|
+
fg=typer.colors.RED,
|
|
83
|
+
)
|
|
84
|
+
raise typer.Exit(1)
|
|
85
|
+
if write:
|
|
86
|
+
typer.secho("✅ Vector synchronization completed", fg=typer.colors.GREEN)
|
|
87
|
+
else:
|
|
88
|
+
typer.secho(
|
|
89
|
+
"✅ Vector synchronization dry-run completed", fg=typer.colors.GREEN
|
|
90
|
+
)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# src/cli/commands/fix/fix_ir.py
|
|
2
|
+
"""
|
|
3
|
+
IR (Incident Response) self-healing commands.
|
|
4
|
+
|
|
5
|
+
Thin client over POST /v1/fix/ir (ADR-055 D6 Batch C2). The endpoint
|
|
6
|
+
always writes; the CLI preserves --write/dry-run UX client-side by
|
|
7
|
+
short-circuiting before the call when --write is not set.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
import typer
|
|
16
|
+
from rich.console import Console
|
|
17
|
+
|
|
18
|
+
from api.cli import CoreApiClient
|
|
19
|
+
from cli.utils import core_command
|
|
20
|
+
|
|
21
|
+
from . import fix_app
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
console = Console()
|
|
26
|
+
|
|
27
|
+
_IR_DIR = Path(".intent") / "mind" / "ir"
|
|
28
|
+
_DRY_RUN_PATHS = {
|
|
29
|
+
"triage": _IR_DIR / "triage_log.yaml",
|
|
30
|
+
"log": _IR_DIR / "incident_log.yaml",
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
async def _scaffold(kind: str, label: str, write: bool) -> None:
|
|
35
|
+
rel_path = str(_DRY_RUN_PATHS[kind]).replace("\\", "/")
|
|
36
|
+
if not write:
|
|
37
|
+
console.print(
|
|
38
|
+
f"[yellow]Dry run:[/yellow] would ensure {rel_path} exists with a "
|
|
39
|
+
f"minimal {label.lower()} structure. Use --write to apply."
|
|
40
|
+
)
|
|
41
|
+
return
|
|
42
|
+
client = CoreApiClient()
|
|
43
|
+
result = await client.fix_ir(kind)
|
|
44
|
+
written_path = result.get("path", rel_path)
|
|
45
|
+
console.print(f"[green]✅ Created {label} at {written_path}[/green]")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@fix_app.command("ir-triage", help="Initialize or update the incident triage log.")
|
|
49
|
+
@core_command(dangerous=True, confirmation=False)
|
|
50
|
+
# ID: c50add43-9412-44ad-b261-6f64aed07b21
|
|
51
|
+
async def fix_ir_triage(
|
|
52
|
+
ctx: typer.Context,
|
|
53
|
+
write: bool = typer.Option(
|
|
54
|
+
False,
|
|
55
|
+
"--write",
|
|
56
|
+
help="Apply changes to the IR triage log (creates file if missing).",
|
|
57
|
+
),
|
|
58
|
+
) -> None:
|
|
59
|
+
"""
|
|
60
|
+
Bootstrap the IR triage log under .intent/mind/ir/.
|
|
61
|
+
"""
|
|
62
|
+
await _scaffold("triage", "IR triage log", write)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@fix_app.command("ir-log", help="Initialize or update the incident response log.")
|
|
66
|
+
@core_command(dangerous=True, confirmation=False)
|
|
67
|
+
# ID: e2f34a52-0839-4146-bafd-7ce6b559a510
|
|
68
|
+
async def fix_ir_log(
|
|
69
|
+
ctx: typer.Context,
|
|
70
|
+
write: bool = typer.Option(
|
|
71
|
+
False,
|
|
72
|
+
"--write",
|
|
73
|
+
help="Apply changes to the IR incident log (creates file if missing).",
|
|
74
|
+
),
|
|
75
|
+
) -> None:
|
|
76
|
+
"""
|
|
77
|
+
Bootstrap the main incident response log under .intent/mind/ir/.
|
|
78
|
+
"""
|
|
79
|
+
await _scaffold("log", "IR incident log", write)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# src/cli/commands/fix/handler_discovery.py
|
|
2
|
+
"""
|
|
3
|
+
Action discovery command — thin client over GET /v1/actions.
|
|
4
|
+
|
|
5
|
+
Renders the full atomic-action registry server-side; the CLI just shapes
|
|
6
|
+
the table.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
from rich.table import Table
|
|
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("discover-actions")
|
|
28
|
+
@core_command(dangerous=False, requires_context=False)
|
|
29
|
+
# ID: a5ba0fda-a697-490f-8a81-f16056b380c4
|
|
30
|
+
async def discover_actions_command(ctx: typer.Context) -> None:
|
|
31
|
+
"""
|
|
32
|
+
List all registered Atomic Actions from the canonical registry.
|
|
33
|
+
"""
|
|
34
|
+
_ = ctx
|
|
35
|
+
console.print(
|
|
36
|
+
"[bold cyan]🔍 Discovering Registered Atomic Actions...[/bold cyan]\n"
|
|
37
|
+
)
|
|
38
|
+
client = CoreApiClient()
|
|
39
|
+
payload = await client.list_actions()
|
|
40
|
+
actions = payload.get("actions", [])
|
|
41
|
+
table = Table(show_header=True, header_style="bold green")
|
|
42
|
+
table.add_column("Action ID", style="cyan")
|
|
43
|
+
table.add_column("Category", style="blue")
|
|
44
|
+
table.add_column("Impact", style="magenta")
|
|
45
|
+
table.add_column("Description")
|
|
46
|
+
for action in sorted(actions, key=lambda a: a.get("action_id", "")):
|
|
47
|
+
table.add_row(
|
|
48
|
+
action.get("action_id", ""),
|
|
49
|
+
action.get("category", ""),
|
|
50
|
+
action.get("impact_level", ""),
|
|
51
|
+
action.get("description", ""),
|
|
52
|
+
)
|
|
53
|
+
console.print(table)
|
|
54
|
+
console.print(f"\n[green]✅ Total Actions Registered: {len(actions)}[/green]")
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# src/cli/commands/fix/imports.py
|
|
2
|
+
"""
|
|
3
|
+
Import organization command for the 'fix' CLI group — thin client over
|
|
4
|
+
POST /v1/fix/run/fix.imports.
|
|
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(
|
|
25
|
+
"imports",
|
|
26
|
+
help="Sort and group imports according to PEP 8 (stdlib → third-party → local).",
|
|
27
|
+
)
|
|
28
|
+
@core_command(dangerous=False)
|
|
29
|
+
# ID: da8cd296-1100-48b8-b87a-1edeafa5db15
|
|
30
|
+
async def fix_imports_command(
|
|
31
|
+
ctx: typer.Context,
|
|
32
|
+
write: bool = typer.Option(
|
|
33
|
+
False, "--write/--dry-run", help="Apply import sorting (default: dry-run)"
|
|
34
|
+
),
|
|
35
|
+
) -> None:
|
|
36
|
+
"""
|
|
37
|
+
Sort and group Python imports according to constitutional style policy.
|
|
38
|
+
|
|
39
|
+
Dispatches fix.imports via POST /v1/fix/run/{fix_id}. The server runs
|
|
40
|
+
ruff with the I rules; the CLI polls and reports.
|
|
41
|
+
"""
|
|
42
|
+
_ = ctx
|
|
43
|
+
console.print("[bold cyan]Sorting imports...[/bold cyan]")
|
|
44
|
+
console.print(f"Mode: {'WRITE' if write else 'DRY RUN'}")
|
|
45
|
+
client = CoreApiClient()
|
|
46
|
+
initial = await client.run_fix("fix.imports", write=write)
|
|
47
|
+
run_id = initial.get("run_id")
|
|
48
|
+
if not run_id:
|
|
49
|
+
console.print(f"[red]fix.imports failed to dispatch: {initial}[/red]")
|
|
50
|
+
raise typer.Exit(1)
|
|
51
|
+
final = await client._poll_run(run_id)
|
|
52
|
+
if final.get("status") != "completed":
|
|
53
|
+
console.print(f"[red]fix.imports failed: {final.get('error') or final}[/red]")
|
|
54
|
+
raise typer.Exit(1)
|
|
55
|
+
console.print("[green]✅ Import sorting completed[/green]")
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# src/cli/commands/fix/list_commands.py
|
|
2
|
+
"""
|
|
3
|
+
Listing and discovery commands for the 'fix' CLI group.
|
|
4
|
+
|
|
5
|
+
Provides:
|
|
6
|
+
- core-admin fix list — thin client over GET /v1/fix/commands.
|
|
7
|
+
|
|
8
|
+
Renders the registered fix-* atomic actions returned by the server
|
|
9
|
+
(action_id, category, impact, description) rather than the local CLI
|
|
10
|
+
COMMAND_CONFIG used pre-migration. The two views are not identical;
|
|
11
|
+
this is the intentional behavior per ADR-055 D6 Batch C4 ("CLI is a
|
|
12
|
+
typed HTTP client").
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
from rich.console import Console
|
|
20
|
+
from rich.table import Table
|
|
21
|
+
|
|
22
|
+
from api.cli import CoreApiClient
|
|
23
|
+
|
|
24
|
+
from . import fix_app
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
console = Console()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@fix_app.command("list", help="List all available fix commands with their categories.")
|
|
32
|
+
# ID: cf22c003-eec0-4c68-8bac-f7876a276538
|
|
33
|
+
async def list_commands() -> None:
|
|
34
|
+
"""
|
|
35
|
+
Render a Rich table of all registered fix-category atomic actions.
|
|
36
|
+
|
|
37
|
+
Columns: Action ID, Category, Impact, Description.
|
|
38
|
+
"""
|
|
39
|
+
client = CoreApiClient()
|
|
40
|
+
payload = await client.list_fix_commands()
|
|
41
|
+
commands = payload.get("commands", [])
|
|
42
|
+
table = Table(title="Available fix actions")
|
|
43
|
+
table.add_column("Action ID", style="cyan", no_wrap=True)
|
|
44
|
+
table.add_column("Category", style="magenta")
|
|
45
|
+
table.add_column("Impact", justify="center")
|
|
46
|
+
table.add_column("Description", style="dim")
|
|
47
|
+
for cmd in sorted(commands, key=lambda c: c.get("action_id", "")):
|
|
48
|
+
table.add_row(
|
|
49
|
+
cmd.get("action_id", ""),
|
|
50
|
+
cmd.get("category", ""),
|
|
51
|
+
cmd.get("impact_level", ""),
|
|
52
|
+
cmd.get("description", ""),
|
|
53
|
+
)
|
|
54
|
+
console.print(table)
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# src/cli/commands/fix/metadata.py
|
|
2
|
+
"""
|
|
3
|
+
Metadata-related self-healing commands for the 'fix' CLI group.
|
|
4
|
+
|
|
5
|
+
Provides:
|
|
6
|
+
- fix ids (Assign stable UUIDs)
|
|
7
|
+
- fix purge-legacy-tags
|
|
8
|
+
- fix policy-ids
|
|
9
|
+
- fix tags (Capability tagging)
|
|
10
|
+
- fix duplicate-ids
|
|
11
|
+
- fix placeholders
|
|
12
|
+
- fix dead-code
|
|
13
|
+
|
|
14
|
+
Thin clients over POST /v1/fix/run/{fix_id}. All execution moves
|
|
15
|
+
server-side; this module only dispatches, polls, and renders.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
|
|
22
|
+
import typer
|
|
23
|
+
from rich.console import Console
|
|
24
|
+
|
|
25
|
+
from api.cli import CoreApiClient
|
|
26
|
+
from cli.utils import core_command
|
|
27
|
+
|
|
28
|
+
from . import fix_app
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
console = Console()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"fix_dead_code_cmd",
|
|
37
|
+
"fix_duplicate_ids_command",
|
|
38
|
+
"fix_placeholders_command",
|
|
39
|
+
"fix_tags_command",
|
|
40
|
+
"purge_legacy_tags_command",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
async def _dispatch_and_poll(
|
|
45
|
+
fix_id: str, *, write: bool, params: dict | None = None
|
|
46
|
+
) -> dict:
|
|
47
|
+
"""Dispatch an atomic fix and poll to terminal status.
|
|
48
|
+
|
|
49
|
+
Returns the final fix_runs payload. Raises typer.Exit(1) on
|
|
50
|
+
dispatch failure or non-completed terminal status.
|
|
51
|
+
"""
|
|
52
|
+
client = CoreApiClient()
|
|
53
|
+
initial = await client.run_fix(fix_id, write=write, params=params)
|
|
54
|
+
run_id = initial.get("run_id")
|
|
55
|
+
if not run_id:
|
|
56
|
+
console.print(f"[red]{fix_id} failed to dispatch: {initial}[/red]")
|
|
57
|
+
raise typer.Exit(1)
|
|
58
|
+
final = await client._poll_run(run_id)
|
|
59
|
+
if final.get("status") != "completed":
|
|
60
|
+
console.print(f"[red]{fix_id} failed: {final.get('error') or final}[/red]")
|
|
61
|
+
raise typer.Exit(1)
|
|
62
|
+
return final
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@fix_app.command(
|
|
66
|
+
"purge-legacy-tags",
|
|
67
|
+
help="Removes obsolete tag formats (e.g. old 'Tag:' or 'Metadata:' lines).",
|
|
68
|
+
)
|
|
69
|
+
@core_command(dangerous=True, confirmation=True)
|
|
70
|
+
# ID: ab1c0d74-ec6c-45b4-a909-2a43eb9b8d41
|
|
71
|
+
async def purge_legacy_tags_command(
|
|
72
|
+
ctx: typer.Context,
|
|
73
|
+
write: bool = typer.Option(
|
|
74
|
+
False, "--write", help="Apply changes (remove the lines)."
|
|
75
|
+
),
|
|
76
|
+
) -> None:
|
|
77
|
+
"""Remove obsolete tag formats from Python files."""
|
|
78
|
+
_ = ctx
|
|
79
|
+
final = await _dispatch_and_poll("fix.purge_legacy_tags", write=write)
|
|
80
|
+
data = (final.get("result") or {}).get("data", {})
|
|
81
|
+
removed = data.get("removed", 0)
|
|
82
|
+
mode = "removed" if write else "would be removed (dry-run)"
|
|
83
|
+
console.print(f"[bold green]Obsolete tags {mode}: {removed}[/bold green]")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@fix_app.command(
|
|
87
|
+
"tags", help="Tags untagged capabilities by calling the capability-tagging service."
|
|
88
|
+
)
|
|
89
|
+
@core_command(dangerous=True, confirmation=True)
|
|
90
|
+
# ID: 7d415daf-34de-4971-be89-991cd9490591
|
|
91
|
+
async def fix_tags_command(
|
|
92
|
+
ctx: typer.Context,
|
|
93
|
+
write: bool = typer.Option(False, "--write", help="Write capability tags to DB."),
|
|
94
|
+
) -> None:
|
|
95
|
+
"""
|
|
96
|
+
Automatically tag untagged capabilities using the AI naming agent.
|
|
97
|
+
"""
|
|
98
|
+
_ = ctx
|
|
99
|
+
await _dispatch_and_poll("fix.capability_tagging", write=write)
|
|
100
|
+
console.print("[green]✓ fix.capability_tagging completed.[/green]")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@fix_app.command(
|
|
104
|
+
"duplicate-ids",
|
|
105
|
+
help="Resolves duplicate IDs by regenerating fresh UUIDs for conflicts.",
|
|
106
|
+
)
|
|
107
|
+
@core_command(dangerous=True, confirmation=True)
|
|
108
|
+
# ID: 96717df8-d28f-4124-bc1e-71bf3921b358
|
|
109
|
+
async def fix_duplicate_ids_command(
|
|
110
|
+
ctx: typer.Context,
|
|
111
|
+
write: bool = typer.Option(
|
|
112
|
+
False, "--write", help="Apply the changes to resolve duplicate IDs."
|
|
113
|
+
),
|
|
114
|
+
) -> None:
|
|
115
|
+
"""Detect and resolve duplicate IDs in Python files."""
|
|
116
|
+
_ = ctx
|
|
117
|
+
console.print("[cyan]Resolving duplicate IDs...[/cyan]")
|
|
118
|
+
await _dispatch_and_poll("fix.duplicate_ids", write=write)
|
|
119
|
+
console.print("[green]✓ fix.duplicate_ids completed.[/green]")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@fix_app.command(
|
|
123
|
+
"placeholders",
|
|
124
|
+
help="Automated replacement of forbidden placeholders (FUTURE, pending, none).",
|
|
125
|
+
)
|
|
126
|
+
@core_command(dangerous=True, confirmation=True)
|
|
127
|
+
# ID: e8c8f803-1cad-4150-9e66-e50859d8bd35
|
|
128
|
+
async def fix_placeholders_command(
|
|
129
|
+
ctx: typer.Context,
|
|
130
|
+
write: bool = typer.Option(
|
|
131
|
+
False, "--write", help="Apply fixes to resolve forbidden placeholders."
|
|
132
|
+
),
|
|
133
|
+
) -> None:
|
|
134
|
+
"""
|
|
135
|
+
Detects and resolves forbidden placeholder strings (pending, FUTURE, etc.)
|
|
136
|
+
via the registered fix.placeholders atomic action.
|
|
137
|
+
"""
|
|
138
|
+
_ = ctx
|
|
139
|
+
console.print("[cyan]Purging forbidden placeholders...[/cyan]")
|
|
140
|
+
await _dispatch_and_poll("fix.placeholders", write=write)
|
|
141
|
+
console.print("[green]✓ fix.placeholders completed.[/green]")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@fix_app.command(
|
|
145
|
+
"dead-code", help="Mechanically remove unused variables/functions found by Vulture."
|
|
146
|
+
)
|
|
147
|
+
@core_command(dangerous=True)
|
|
148
|
+
# ID: d2a428ee-63c2-4212-8c73-5bbebf514ff0
|
|
149
|
+
async def fix_dead_code_cmd(
|
|
150
|
+
ctx: typer.Context,
|
|
151
|
+
write: bool = typer.Option(False, "--write", help="Apply the deletions."),
|
|
152
|
+
) -> None:
|
|
153
|
+
"""CLI wrapper for the Vulture Healer (registered as fix.vulture_heal)."""
|
|
154
|
+
_ = ctx
|
|
155
|
+
console.print("[bold cyan]Snipping dead code scars...[/bold cyan]")
|
|
156
|
+
await _dispatch_and_poll("fix.vulture_heal", write=write)
|
|
157
|
+
if not write:
|
|
158
|
+
console.print(
|
|
159
|
+
"\n[yellow]💡 Dry run complete. Use --write to apply the 'Scissors'.[/yellow]"
|
|
160
|
+
)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# src/cli/commands/fix/modularity.py
|
|
2
|
+
"""
|
|
3
|
+
Automated Modularity Healing — thin client over POST /v1/fix/modularity.
|
|
4
|
+
|
|
5
|
+
The endpoint is async (202 + run_id); CLI polls via CoreApiClient._poll_run
|
|
6
|
+
and renders the per-file remediation summary that
|
|
7
|
+
ModularityRemediationService writes into fix_runs.result.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
from rich.console import Console
|
|
16
|
+
from rich.table import Table
|
|
17
|
+
|
|
18
|
+
from api.cli import CoreApiClient
|
|
19
|
+
from cli.utils import core_command
|
|
20
|
+
|
|
21
|
+
from . import fix_app
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
console = Console()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@fix_app.command("modularity", help="Autonomously modularize architectural offenders.")
|
|
29
|
+
@core_command(dangerous=True, confirmation=True)
|
|
30
|
+
# ID: ea078c28-eb5f-46ec-b39c-e55cf33714ed
|
|
31
|
+
async def fix_modularity_cmd(
|
|
32
|
+
ctx: typer.Context,
|
|
33
|
+
min_score: float = typer.Option(
|
|
34
|
+
None,
|
|
35
|
+
"--score",
|
|
36
|
+
help="Minimum score to trigger healing (defaults to Constitution)",
|
|
37
|
+
),
|
|
38
|
+
limit: int = typer.Option(
|
|
39
|
+
1, "--limit", "-n", help="Max files to heal in one batch"
|
|
40
|
+
),
|
|
41
|
+
write: bool = typer.Option(False, "--write", help="Apply changes autonomously"),
|
|
42
|
+
) -> None:
|
|
43
|
+
"""
|
|
44
|
+
Finds high-complexity files and uses the A3 loop to modularize them.
|
|
45
|
+
"""
|
|
46
|
+
params: dict[str, object] = {"limit": limit}
|
|
47
|
+
if min_score is not None:
|
|
48
|
+
params["min_score"] = min_score
|
|
49
|
+
|
|
50
|
+
console.print("[bold cyan]CORE is defragmenting architecture...[/bold cyan]")
|
|
51
|
+
client = CoreApiClient()
|
|
52
|
+
initial = await client.fix_modularity(write=write, params=params)
|
|
53
|
+
run_id = initial.get("run_id")
|
|
54
|
+
if not run_id:
|
|
55
|
+
console.print(f"[red]fix.modularity failed to dispatch: {initial}[/red]")
|
|
56
|
+
raise typer.Exit(1)
|
|
57
|
+
final = await client._poll_run(run_id)
|
|
58
|
+
if final.get("status") != "completed":
|
|
59
|
+
console.print(
|
|
60
|
+
f"[red]fix.modularity failed: {final.get('error') or final}[/red]"
|
|
61
|
+
)
|
|
62
|
+
raise typer.Exit(1)
|
|
63
|
+
|
|
64
|
+
result_payload = final.get("result") or {}
|
|
65
|
+
files = result_payload.get("files", [])
|
|
66
|
+
if not files:
|
|
67
|
+
console.print("[green]✅ No files exceed the modularity threshold.[/green]")
|
|
68
|
+
return
|
|
69
|
+
|
|
70
|
+
table = Table(title="Modularity Healing Results")
|
|
71
|
+
table.add_column("File", style="cyan")
|
|
72
|
+
table.add_column("Status", justify="center")
|
|
73
|
+
table.add_column("Initial", justify="right")
|
|
74
|
+
table.add_column("Final", justify="right")
|
|
75
|
+
table.add_column("Delta", style="green", justify="right")
|
|
76
|
+
for res in files:
|
|
77
|
+
status = "✅" if res.get("success") else "❌"
|
|
78
|
+
start_score = res.get("start_score", 0.0)
|
|
79
|
+
final_score = res.get("final_score", 0.0)
|
|
80
|
+
delta = res.get("improvement", 0.0)
|
|
81
|
+
table.add_row(
|
|
82
|
+
res.get("file", ""),
|
|
83
|
+
status,
|
|
84
|
+
f"{start_score:.1f}",
|
|
85
|
+
f"{final_score:.1f}",
|
|
86
|
+
f"-{delta:.1f}" if delta > 0 else "0.0",
|
|
87
|
+
)
|
|
88
|
+
console.print(table)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# src/cli/commands/fix/settings_access.py
|
|
2
|
+
"""Refactor settings.* imports to DI — thin client over POST /v1/fix/run/fix.settings_access."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
from rich.console import Console
|
|
10
|
+
|
|
11
|
+
from api.cli import CoreApiClient
|
|
12
|
+
from cli.utils import core_command
|
|
13
|
+
|
|
14
|
+
from . import fix_app
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
console = Console()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@fix_app.command("settings-di")
|
|
22
|
+
@core_command(dangerous=True, confirmation=True)
|
|
23
|
+
# ID: 4bb27cb3-4f2f-4462-8c80-7e57828c2ed1
|
|
24
|
+
async def fix_settings_di_cmd(
|
|
25
|
+
ctx: typer.Context,
|
|
26
|
+
write: bool = typer.Option(False, "--write", help="Apply changes"),
|
|
27
|
+
layers: str = typer.Option("mind,will", "--layers", help="Comma-separated layers"),
|
|
28
|
+
) -> None:
|
|
29
|
+
"""Refactor settings imports to dependency injection via CoreContext."""
|
|
30
|
+
_ = ctx
|
|
31
|
+
layer_list = [layer.strip() for layer in layers.split(",")]
|
|
32
|
+
client = CoreApiClient()
|
|
33
|
+
initial = await client.run_fix(
|
|
34
|
+
"fix.settings_access", write=write, params={"layers": layer_list}
|
|
35
|
+
)
|
|
36
|
+
run_id = initial.get("run_id")
|
|
37
|
+
if not run_id:
|
|
38
|
+
console.print(f"[red]fix.settings_access failed to dispatch: {initial}[/red]")
|
|
39
|
+
raise typer.Exit(1)
|
|
40
|
+
final = await client._poll_run(run_id)
|
|
41
|
+
if final.get("status") != "completed":
|
|
42
|
+
console.print(
|
|
43
|
+
f"[red]fix.settings_access failed: {final.get('error') or final}[/red]"
|
|
44
|
+
)
|
|
45
|
+
raise typer.Exit(1)
|
|
46
|
+
|
|
47
|
+
result_data = (final.get("result") or {}).get("data", {})
|
|
48
|
+
results = result_data.get("results", {})
|
|
49
|
+
total_refactored = 0
|
|
50
|
+
total_failed = 0
|
|
51
|
+
for layer_name, stats in results.items():
|
|
52
|
+
console.print(f"\n[cyan]{layer_name.upper()}[/cyan]:")
|
|
53
|
+
console.print(f" Files analyzed: {stats.get('analyzed', 0)}")
|
|
54
|
+
console.print(f" Files refactored: {stats.get('refactored', 0)}")
|
|
55
|
+
total_refactored += stats.get("refactored", 0)
|
|
56
|
+
failed = stats.get("failed", 0)
|
|
57
|
+
total_failed += failed
|
|
58
|
+
if failed:
|
|
59
|
+
console.print(f" [red]Failed: {failed}[/red]")
|
|
60
|
+
console.print("\n[bold]Summary:[/bold]")
|
|
61
|
+
console.print(f" Total refactored: {total_refactored}")
|
|
62
|
+
if total_failed:
|
|
63
|
+
console.print(f" [red]Total failed: {total_failed}[/red]")
|
|
64
|
+
else:
|
|
65
|
+
console.print(" [green]✅ All files processed successfully[/green]")
|