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,309 @@
|
|
|
1
|
+
# src/cli/resources/secrets/manage.py
|
|
2
|
+
"""
|
|
3
|
+
CLI commands for encrypted secrets management.
|
|
4
|
+
Constitutional compliance: agent_governance, data_governance, operations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import time
|
|
10
|
+
|
|
11
|
+
import typer
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
from rich.table import Table
|
|
14
|
+
|
|
15
|
+
from cli.utils import (
|
|
16
|
+
confirm_action,
|
|
17
|
+
core_command,
|
|
18
|
+
display_error,
|
|
19
|
+
display_info,
|
|
20
|
+
display_success,
|
|
21
|
+
display_warning,
|
|
22
|
+
)
|
|
23
|
+
from shared.action_types import ActionImpact, ActionResult
|
|
24
|
+
from shared.exceptions import SecretNotFoundError, SecretsError
|
|
25
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
26
|
+
from shared.infrastructure.secrets_service import get_secrets_service
|
|
27
|
+
|
|
28
|
+
from .hub import app
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
console = Console()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
AUDIT_CONTEXT_SET = "cli:set"
|
|
35
|
+
AUDIT_CONTEXT_SET_CHECK = "cli:set:check"
|
|
36
|
+
AUDIT_CONTEXT_GET = "cli:get"
|
|
37
|
+
AUDIT_CONTEXT_LIST = "cli:list"
|
|
38
|
+
AUDIT_CONTEXT_DELETE = "cli:delete"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async def _set_secret_internal(
|
|
42
|
+
key: str, value: str, description: str | None, force: bool
|
|
43
|
+
) -> ActionResult:
|
|
44
|
+
"""Store an encrypted secret in the database."""
|
|
45
|
+
start_time = time.time()
|
|
46
|
+
async with get_session() as db:
|
|
47
|
+
secrets_service = await get_secrets_service(db)
|
|
48
|
+
try:
|
|
49
|
+
overwrite_confirmed = False
|
|
50
|
+
if not force:
|
|
51
|
+
try:
|
|
52
|
+
await secrets_service.get_secret(
|
|
53
|
+
db, key, audit_context=AUDIT_CONTEXT_SET_CHECK
|
|
54
|
+
)
|
|
55
|
+
if not confirm_action(
|
|
56
|
+
f"Secret '{key}' already exists. Overwrite?",
|
|
57
|
+
abort_message="Overwrite cancelled",
|
|
58
|
+
):
|
|
59
|
+
return ActionResult(
|
|
60
|
+
action_id="secrets.set",
|
|
61
|
+
ok=False,
|
|
62
|
+
data={"key": key, "action": "cancelled"},
|
|
63
|
+
duration_sec=time.time() - start_time,
|
|
64
|
+
impact=ActionImpact.READ_ONLY,
|
|
65
|
+
warnings=["User cancelled overwrite"],
|
|
66
|
+
)
|
|
67
|
+
overwrite_confirmed = True
|
|
68
|
+
except SecretNotFoundError:
|
|
69
|
+
pass
|
|
70
|
+
await secrets_service.set_secret(
|
|
71
|
+
db,
|
|
72
|
+
key=key,
|
|
73
|
+
value=value,
|
|
74
|
+
description=description,
|
|
75
|
+
audit_context=AUDIT_CONTEXT_SET,
|
|
76
|
+
)
|
|
77
|
+
display_success(f"Secret '{key}' stored successfully")
|
|
78
|
+
return ActionResult(
|
|
79
|
+
action_id="secrets.set",
|
|
80
|
+
ok=True,
|
|
81
|
+
data={
|
|
82
|
+
"key": key,
|
|
83
|
+
"action": "overwritten" if overwrite_confirmed else "created",
|
|
84
|
+
"has_description": description is not None,
|
|
85
|
+
},
|
|
86
|
+
duration_sec=time.time() - start_time,
|
|
87
|
+
impact=ActionImpact.WRITE_DATA,
|
|
88
|
+
)
|
|
89
|
+
except SecretsError as exc:
|
|
90
|
+
display_error(f"Failed to store secret: {exc.message}")
|
|
91
|
+
return ActionResult(
|
|
92
|
+
action_id="secrets.set",
|
|
93
|
+
ok=False,
|
|
94
|
+
data={"key": key, "error": exc.message},
|
|
95
|
+
duration_sec=time.time() - start_time,
|
|
96
|
+
impact=ActionImpact.READ_ONLY,
|
|
97
|
+
warnings=[str(exc)],
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
async def _get_internal(key: str, show: bool) -> ActionResult:
|
|
102
|
+
"""Retrieve and decrypt a secret from the database."""
|
|
103
|
+
start_time = time.time()
|
|
104
|
+
async with get_session() as db:
|
|
105
|
+
secrets_service = await get_secrets_service(db)
|
|
106
|
+
try:
|
|
107
|
+
value = await secrets_service.get_secret(
|
|
108
|
+
db, key, audit_context=AUDIT_CONTEXT_GET
|
|
109
|
+
)
|
|
110
|
+
if show:
|
|
111
|
+
display_info(f"Secret '{key}':")
|
|
112
|
+
console.print(value)
|
|
113
|
+
else:
|
|
114
|
+
display_success(f"Secret '{key}' exists (use --show to display)")
|
|
115
|
+
return ActionResult(
|
|
116
|
+
action_id="secrets.get",
|
|
117
|
+
ok=True,
|
|
118
|
+
data={"key": key, "exists": True, "displayed": show},
|
|
119
|
+
duration_sec=time.time() - start_time,
|
|
120
|
+
impact=ActionImpact.READ_ONLY,
|
|
121
|
+
)
|
|
122
|
+
except SecretNotFoundError:
|
|
123
|
+
display_error(f"Secret '{key}' not found")
|
|
124
|
+
return ActionResult(
|
|
125
|
+
action_id="secrets.get",
|
|
126
|
+
ok=False,
|
|
127
|
+
data={"key": key, "exists": False},
|
|
128
|
+
duration_sec=time.time() - start_time,
|
|
129
|
+
impact=ActionImpact.READ_ONLY,
|
|
130
|
+
warnings=[f"Secret '{key}' not found"],
|
|
131
|
+
)
|
|
132
|
+
except SecretsError as exc:
|
|
133
|
+
display_error(f"Failed to retrieve secret: {exc.message}")
|
|
134
|
+
return ActionResult(
|
|
135
|
+
action_id="secrets.get",
|
|
136
|
+
ok=False,
|
|
137
|
+
data={"key": key, "error": exc.message},
|
|
138
|
+
duration_sec=time.time() - start_time,
|
|
139
|
+
impact=ActionImpact.READ_ONLY,
|
|
140
|
+
warnings=[str(exc)],
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
async def _list_secrets_internal() -> ActionResult:
|
|
145
|
+
"""List all secret keys (not values) in the database."""
|
|
146
|
+
start_time = time.time()
|
|
147
|
+
async with get_session() as db:
|
|
148
|
+
secrets_service = await get_secrets_service(db)
|
|
149
|
+
try:
|
|
150
|
+
secrets_list = await secrets_service.list_secrets(db)
|
|
151
|
+
if not secrets_list:
|
|
152
|
+
display_warning("No secrets found in database")
|
|
153
|
+
return ActionResult(
|
|
154
|
+
action_id="secrets.list",
|
|
155
|
+
ok=True,
|
|
156
|
+
data={"count": 0, "secrets": []},
|
|
157
|
+
duration_sec=time.time() - start_time,
|
|
158
|
+
impact=ActionImpact.READ_ONLY,
|
|
159
|
+
)
|
|
160
|
+
table = Table(title="Encrypted Secrets")
|
|
161
|
+
table.add_column("Key", style="cyan", no_wrap=True)
|
|
162
|
+
table.add_column("Description", style="white")
|
|
163
|
+
table.add_column("Last Updated", style="dim")
|
|
164
|
+
for secret in secrets_list:
|
|
165
|
+
table.add_row(
|
|
166
|
+
secret["key"],
|
|
167
|
+
secret.get("description") or "",
|
|
168
|
+
(
|
|
169
|
+
str(secret.get("last_updated"))
|
|
170
|
+
if secret.get("last_updated")
|
|
171
|
+
else "none"
|
|
172
|
+
),
|
|
173
|
+
)
|
|
174
|
+
console.print(table)
|
|
175
|
+
display_info(f"Total: {len(secrets_list)} secrets")
|
|
176
|
+
return ActionResult(
|
|
177
|
+
action_id="secrets.list",
|
|
178
|
+
ok=True,
|
|
179
|
+
data={
|
|
180
|
+
"count": len(secrets_list),
|
|
181
|
+
"secrets": [s["key"] for s in secrets_list],
|
|
182
|
+
},
|
|
183
|
+
duration_sec=time.time() - start_time,
|
|
184
|
+
impact=ActionImpact.READ_ONLY,
|
|
185
|
+
)
|
|
186
|
+
except SecretsError as exc:
|
|
187
|
+
display_error(f"Failed to list secrets: {exc.message}")
|
|
188
|
+
return ActionResult(
|
|
189
|
+
action_id="secrets.list",
|
|
190
|
+
ok=False,
|
|
191
|
+
data={"error": exc.message},
|
|
192
|
+
duration_sec=time.time() - start_time,
|
|
193
|
+
impact=ActionImpact.READ_ONLY,
|
|
194
|
+
warnings=[str(exc)],
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
async def _delete_internal(key: str) -> ActionResult:
|
|
199
|
+
"""Delete a secret from the database."""
|
|
200
|
+
start_time = time.time()
|
|
201
|
+
async with get_session() as db:
|
|
202
|
+
secrets_service = await get_secrets_service(db)
|
|
203
|
+
try:
|
|
204
|
+
await secrets_service.delete_secret(db, key)
|
|
205
|
+
display_success(f"Secret '{key}' deleted")
|
|
206
|
+
return ActionResult(
|
|
207
|
+
action_id="secrets.delete",
|
|
208
|
+
ok=True,
|
|
209
|
+
data={"key": key, "action": "deleted"},
|
|
210
|
+
duration_sec=time.time() - start_time,
|
|
211
|
+
impact=ActionImpact.WRITE_DATA,
|
|
212
|
+
)
|
|
213
|
+
except SecretNotFoundError:
|
|
214
|
+
display_error(f"Secret '{key}' not found")
|
|
215
|
+
return ActionResult(
|
|
216
|
+
action_id="secrets.delete",
|
|
217
|
+
ok=False,
|
|
218
|
+
data={"key": key, "exists": False},
|
|
219
|
+
duration_sec=time.time() - start_time,
|
|
220
|
+
impact=ActionImpact.READ_ONLY,
|
|
221
|
+
warnings=[f"Secret '{key}' not found"],
|
|
222
|
+
)
|
|
223
|
+
except SecretsError as exc:
|
|
224
|
+
display_error(f"Failed to delete secret: {exc.message}")
|
|
225
|
+
return ActionResult(
|
|
226
|
+
action_id="secrets.delete",
|
|
227
|
+
ok=False,
|
|
228
|
+
data={"key": key, "error": exc.message},
|
|
229
|
+
duration_sec=time.time() - start_time,
|
|
230
|
+
impact=ActionImpact.READ_ONLY,
|
|
231
|
+
warnings=[str(exc)],
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@app.command("set")
|
|
236
|
+
@core_command(dangerous=True, requires_context=False)
|
|
237
|
+
# ID: 92bcc7e9-189f-45d0-bc18-21512bcba69f
|
|
238
|
+
async def set_secret(
|
|
239
|
+
ctx: typer.Context,
|
|
240
|
+
key: str = typer.Argument(..., help="Secret key (e.g., 'anthropic.api_key')"),
|
|
241
|
+
value: str = typer.Option(
|
|
242
|
+
...,
|
|
243
|
+
"--value",
|
|
244
|
+
"-v",
|
|
245
|
+
prompt=True,
|
|
246
|
+
hide_input=True,
|
|
247
|
+
help="Secret value (will be encrypted)",
|
|
248
|
+
),
|
|
249
|
+
description: str | None = typer.Option(
|
|
250
|
+
None, "--description", "-d", help="Optional description"
|
|
251
|
+
),
|
|
252
|
+
force: bool = typer.Option(
|
|
253
|
+
False, "--force", "-f", help="Overwrite without confirmation"
|
|
254
|
+
),
|
|
255
|
+
) -> None:
|
|
256
|
+
"""Store an encrypted secret in the database."""
|
|
257
|
+
if not key.strip():
|
|
258
|
+
display_error("Secret key cannot be empty")
|
|
259
|
+
raise typer.Exit(code=1)
|
|
260
|
+
result = await _set_secret_internal(
|
|
261
|
+
key=key, value=value, description=description, force=force
|
|
262
|
+
)
|
|
263
|
+
if not result.ok:
|
|
264
|
+
raise typer.Exit(code=1)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
@app.command("get")
|
|
268
|
+
@core_command(dangerous=False, requires_context=False)
|
|
269
|
+
# ID: 01608ce2-3fb8-4f0d-ae1a-abaec72369d7
|
|
270
|
+
async def get(
|
|
271
|
+
ctx: typer.Context,
|
|
272
|
+
key: str = typer.Argument(..., help="Secret key to retrieve"),
|
|
273
|
+
show: bool = typer.Option(False, "--show", "-s", help="Display the secret value"),
|
|
274
|
+
) -> None:
|
|
275
|
+
"""Retrieve an encrypted secret from the database."""
|
|
276
|
+
result = await _get_internal(key=key, show=show)
|
|
277
|
+
if not result.ok:
|
|
278
|
+
raise typer.Exit(code=1)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
@app.command("list")
|
|
282
|
+
@core_command(dangerous=False, requires_context=False)
|
|
283
|
+
# ID: cf23ee88-7f5e-47e9-91de-7414ef0c36ed
|
|
284
|
+
async def list_secrets(ctx: typer.Context) -> None:
|
|
285
|
+
"""List all secret keys in the database (does not show values)."""
|
|
286
|
+
result = await _list_secrets_internal()
|
|
287
|
+
if not result.ok:
|
|
288
|
+
raise typer.Exit(code=1)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
@app.command("delete")
|
|
292
|
+
@core_command(dangerous=True, requires_context=False)
|
|
293
|
+
# ID: cc76acdd-0ef9-4602-86b0-09580546dd05
|
|
294
|
+
async def delete(
|
|
295
|
+
ctx: typer.Context,
|
|
296
|
+
key: str = typer.Argument(..., help="Secret key to delete"),
|
|
297
|
+
yes: bool = typer.Option(False, "--yes", "-y", help="Skip confirmation prompt"),
|
|
298
|
+
) -> None:
|
|
299
|
+
"""Delete a secret from the database."""
|
|
300
|
+
if not yes and (
|
|
301
|
+
not confirm_action(
|
|
302
|
+
f"Are you sure you want to delete secret '{key}'?",
|
|
303
|
+
abort_message="Deletion cancelled",
|
|
304
|
+
)
|
|
305
|
+
):
|
|
306
|
+
return
|
|
307
|
+
result = await _delete_internal(key=key)
|
|
308
|
+
if not result.ok:
|
|
309
|
+
raise typer.Exit(code=1)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# src/cli/resources/symbols/__init__.py
|
|
2
|
+
"""Symbol registry and Knowledge Graph operations."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
# 2. Register all symbol neurons
|
|
7
|
+
from . import audit, fix_ids, resolve_duplicates, sync, tag
|
|
8
|
+
|
|
9
|
+
# 1. Import the stable app from the hub
|
|
10
|
+
from .hub import app
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["app"]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# src/cli/resources/symbols/audit.py
|
|
2
|
+
import typer
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
|
|
5
|
+
from cli.logic.diagnostics import get_unassigned_symbols_logic
|
|
6
|
+
from cli.logic.symbol_drift import inspect_symbol_drift
|
|
7
|
+
from cli.utils import core_command
|
|
8
|
+
|
|
9
|
+
from .hub import app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
console = Console()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@app.command("audit")
|
|
16
|
+
@core_command(dangerous=False, requires_context=True)
|
|
17
|
+
# ID: 2c32679a-ad9d-48e3-8cb0-b4cec7adea29
|
|
18
|
+
async def audit_symbols(ctx: typer.Context) -> None:
|
|
19
|
+
"""
|
|
20
|
+
Audit symbol integrity and detect registry drift.
|
|
21
|
+
|
|
22
|
+
Checks for:
|
|
23
|
+
1. Symbols missing IDs (Anchors).
|
|
24
|
+
2. Symbols in DB that no longer exist on disk (Ghosts).
|
|
25
|
+
3. Symbols on disk not yet in DB (Drift).
|
|
26
|
+
"""
|
|
27
|
+
core_context = ctx.obj
|
|
28
|
+
console.print(
|
|
29
|
+
"[bold cyan]🔍 1. Checking for Symbol Drift (Disk vs DB)...[/bold cyan]"
|
|
30
|
+
)
|
|
31
|
+
await inspect_symbol_drift()
|
|
32
|
+
console.print("\n[bold cyan]🔍 2. Checking for Unassigned IDs...[/bold cyan]")
|
|
33
|
+
unassigned = await get_unassigned_symbols_logic(core_context)
|
|
34
|
+
if not unassigned:
|
|
35
|
+
console.print("[green]✅ All public symbols have assigned IDs.[/green]")
|
|
36
|
+
else:
|
|
37
|
+
console.print(
|
|
38
|
+
f"[yellow]⚠️ Found {len(unassigned)} symbols with no ID tag.[/yellow]"
|
|
39
|
+
)
|
|
40
|
+
for item in unassigned[:10]:
|
|
41
|
+
console.print(f" - {item.get('name')} ({item.get('file_path')})")
|
|
42
|
+
if len(unassigned) > 10:
|
|
43
|
+
console.print(f" ... and {len(unassigned) - 10} more.")
|
|
44
|
+
console.print(
|
|
45
|
+
"\n[dim]Tip: Run 'core-admin symbols fix-ids --write' to fix this.[/dim]"
|
|
46
|
+
)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# src/cli/resources/symbols/fix_ids.py
|
|
2
|
+
import typer
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
|
|
5
|
+
from cli.utils import core_command
|
|
6
|
+
from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
|
|
7
|
+
from shared.context import CoreContext
|
|
8
|
+
|
|
9
|
+
from .hub import app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
console = Console()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@app.command("fix-ids")
|
|
16
|
+
@command_meta(
|
|
17
|
+
canonical_name="symbols.fix-ids",
|
|
18
|
+
behavior=CommandBehavior.MUTATE,
|
|
19
|
+
layer=CommandLayer.BODY,
|
|
20
|
+
summary="Assign stable # ID: anchors to untagged symbols.",
|
|
21
|
+
dangerous=True,
|
|
22
|
+
)
|
|
23
|
+
@core_command(dangerous=True, requires_context=True, confirmation=True)
|
|
24
|
+
# ID: 37ac33b4-76d3-40c4-8955-3b81a2a4ccf2
|
|
25
|
+
async def fix_ids_command(
|
|
26
|
+
ctx: typer.Context,
|
|
27
|
+
write: bool = typer.Option(
|
|
28
|
+
False, "--write", help="Inject missing UUIDs into source files."
|
|
29
|
+
),
|
|
30
|
+
) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Assign stable '# ID:' anchors to all untagged public symbols.
|
|
33
|
+
|
|
34
|
+
Scans 'src/' and modifies files to ensure knowledge graph stability.
|
|
35
|
+
"""
|
|
36
|
+
core_context: CoreContext = ctx.obj
|
|
37
|
+
if not write:
|
|
38
|
+
console.print("[yellow]📋 Analysis mode: Scanning for missing IDs...[/yellow]")
|
|
39
|
+
else:
|
|
40
|
+
console.print(
|
|
41
|
+
"[bold red]🧪 Applying missing ID anchors to source code...[/bold red]"
|
|
42
|
+
)
|
|
43
|
+
await core_context.action_executor.execute("fix.ids", write=write)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# src/cli/resources/symbols/resolve_duplicates.py
|
|
2
|
+
import typer
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
|
|
5
|
+
from cli.utils import core_command
|
|
6
|
+
from shared.context import CoreContext
|
|
7
|
+
|
|
8
|
+
from .hub import app
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
console = Console()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@app.command("resolve-duplicates")
|
|
15
|
+
@core_command(dangerous=True, requires_context=True, confirmation=True)
|
|
16
|
+
# ID: c9ca3aa7-a542-4f3c-bbf3-d8dc97d4400a
|
|
17
|
+
async def resolve_symbol_duplicates(
|
|
18
|
+
ctx: typer.Context,
|
|
19
|
+
write: bool = typer.Option(False, "--write", help="Regenerate conflicting UUIDs."),
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
Find and resolve duplicate '# ID:' anchors in the codebase.
|
|
23
|
+
|
|
24
|
+
If multiple symbols share the same UUID, the older entry is preserved
|
|
25
|
+
and colliding symbols are assigned fresh, unique identifiers.
|
|
26
|
+
"""
|
|
27
|
+
core_context: CoreContext = ctx.obj
|
|
28
|
+
mode = "RESOLVING" if write else "ANALYZING"
|
|
29
|
+
console.print(f"[bold cyan]👯 {mode} duplicate ID collisions...[/bold cyan]")
|
|
30
|
+
await core_context.action_executor.execute("fix.duplicate_ids", write=write)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# src/cli/resources/symbols/sync.py
|
|
2
|
+
import typer
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
|
|
5
|
+
from cli.utils import core_command
|
|
6
|
+
from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
|
|
7
|
+
from shared.context import CoreContext
|
|
8
|
+
|
|
9
|
+
from .hub import app
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
console = Console()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@app.command("sync")
|
|
16
|
+
@command_meta(
|
|
17
|
+
canonical_name="symbols.sync",
|
|
18
|
+
behavior=CommandBehavior.MUTATE,
|
|
19
|
+
layer=CommandLayer.BODY,
|
|
20
|
+
summary="Synchronize database with codebase symbols.",
|
|
21
|
+
dangerous=True,
|
|
22
|
+
)
|
|
23
|
+
@core_command(dangerous=True, requires_context=True)
|
|
24
|
+
# ID: 7de43597-32ac-4e0f-9e55-af90f4c716f6
|
|
25
|
+
async def sync_symbols(
|
|
26
|
+
ctx: typer.Context,
|
|
27
|
+
write: bool = typer.Option(
|
|
28
|
+
False, "--write", help="Apply synchronization to the database."
|
|
29
|
+
),
|
|
30
|
+
) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Synchronize filesystem symbols with the PostgreSQL Knowledge Graph.
|
|
33
|
+
|
|
34
|
+
Scans 'src/' and updates the 'core.symbols' table.
|
|
35
|
+
"""
|
|
36
|
+
core_context: CoreContext = ctx.obj
|
|
37
|
+
mode = "WRITE" if write else "DRY-RUN"
|
|
38
|
+
console.print(f"[bold cyan]🔄 Synchronizing Symbols to DB ({mode})...[/bold cyan]")
|
|
39
|
+
await core_context.action_executor.execute("sync.db", write=write)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# src/cli/resources/symbols/tag.py
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import typer
|
|
5
|
+
from rich.console import Console
|
|
6
|
+
|
|
7
|
+
from cli.utils import core_command
|
|
8
|
+
from shared.context import CoreContext
|
|
9
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
10
|
+
|
|
11
|
+
from .hub import app
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
console = Console()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@app.command("tag")
|
|
18
|
+
@core_command(dangerous=True, requires_context=True, confirmation=True)
|
|
19
|
+
# ID: 7c191977-2cdb-4639-bf03-797ae163b7c5
|
|
20
|
+
async def tag_symbols_command(
|
|
21
|
+
ctx: typer.Context,
|
|
22
|
+
write: bool = typer.Option(
|
|
23
|
+
False, "--write", help="Write suggested tags to the database."
|
|
24
|
+
),
|
|
25
|
+
limit: int = typer.Option(
|
|
26
|
+
0, "--limit", help="Limit number of symbols to process (0 = all)."
|
|
27
|
+
),
|
|
28
|
+
) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Automatically tag untagged capabilities using AI reasoning.
|
|
31
|
+
|
|
32
|
+
Consults the TaggerAgent to suggest 'domain.capability' names for
|
|
33
|
+
symbols that currently have 'unassigned' status in the registry.
|
|
34
|
+
"""
|
|
35
|
+
from will.self_healing.capability_tagging_service import main_async
|
|
36
|
+
|
|
37
|
+
core_context: CoreContext = ctx.obj
|
|
38
|
+
mode = "APPLYING" if write else "PREVIEWING"
|
|
39
|
+
console.print(f"[bold cyan]🧠 {mode} AI capability tagging...[/bold cyan]")
|
|
40
|
+
await main_async(
|
|
41
|
+
session_factory=get_session,
|
|
42
|
+
cognitive_service=core_context.cognitive_service,
|
|
43
|
+
knowledge_service=core_context.knowledge_service,
|
|
44
|
+
write=write,
|
|
45
|
+
dry_run=not write,
|
|
46
|
+
limit=limit,
|
|
47
|
+
)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# src/cli/resources/vectors/cleanup.py
|
|
2
|
+
"""
|
|
3
|
+
Vector cleanup command.
|
|
4
|
+
|
|
5
|
+
Removes orphaned vectors and synchronizes with PostgreSQL.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
|
|
15
|
+
from cli.utils import core_command
|
|
16
|
+
from shared.infrastructure.database.session_manager import get_session
|
|
17
|
+
|
|
18
|
+
from .hub import app
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
console = Console()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@app.command("cleanup")
|
|
26
|
+
@core_command(dangerous=True, requires_context=False)
|
|
27
|
+
# ID: a644bc31-42c8-4d69-bb4b-f8f481ec2cb6
|
|
28
|
+
async def cleanup_vectors(
|
|
29
|
+
ctx: typer.Context,
|
|
30
|
+
target: str = typer.Option(
|
|
31
|
+
"all", "--target", "-t", help="Cleanup target: 'orphans', 'dangling', 'all'"
|
|
32
|
+
),
|
|
33
|
+
write: bool = typer.Option(
|
|
34
|
+
False, "--write", help="Apply cleanup (default: dry-run)"
|
|
35
|
+
),
|
|
36
|
+
) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Clean up orphaned and inconsistent vector data.
|
|
39
|
+
|
|
40
|
+
Cleanup targets:
|
|
41
|
+
- orphans: Vectors in Qdrant without PostgreSQL links
|
|
42
|
+
- dangling: PostgreSQL links to non-existent vectors
|
|
43
|
+
- all: Both orphans and dangling links
|
|
44
|
+
|
|
45
|
+
This performs bidirectional synchronization between Qdrant and PostgreSQL.
|
|
46
|
+
|
|
47
|
+
Constitutional Compliance:
|
|
48
|
+
- Enforces 'vectors.bidirectional_sync'
|
|
49
|
+
- All changes logged to audit trail
|
|
50
|
+
- Atomic operation with proper ordering
|
|
51
|
+
|
|
52
|
+
Examples:
|
|
53
|
+
# Dry-run (show what would be cleaned)
|
|
54
|
+
core-admin vectors cleanup
|
|
55
|
+
|
|
56
|
+
# Clean orphaned vectors only
|
|
57
|
+
core-admin vectors cleanup --target orphans --write
|
|
58
|
+
|
|
59
|
+
# Full cleanup
|
|
60
|
+
core-admin vectors cleanup --target all --write
|
|
61
|
+
"""
|
|
62
|
+
console.print("[bold cyan]🧹 Vector Cleanup[/bold cyan]")
|
|
63
|
+
console.print(f"Target: {target}")
|
|
64
|
+
console.print(f"Mode: {'WRITE' if write else 'DRY-RUN'}")
|
|
65
|
+
console.print()
|
|
66
|
+
if not write:
|
|
67
|
+
console.print("[yellow]DRY-RUN: Use --write to apply changes[/yellow]")
|
|
68
|
+
try:
|
|
69
|
+
from body.maintenance.sync_vectors import (
|
|
70
|
+
_async_sync_vectors as sync_vectors_internal,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
async with get_session() as session:
|
|
74
|
+
orphans_pruned, dangling_pruned = await sync_vectors_internal(
|
|
75
|
+
session=session, dry_run=not write, qdrant_service=None
|
|
76
|
+
)
|
|
77
|
+
if write:
|
|
78
|
+
await session.commit()
|
|
79
|
+
console.print()
|
|
80
|
+
console.print("[bold]Results:[/bold]")
|
|
81
|
+
if target in ["orphans", "all"]:
|
|
82
|
+
status = "Would prune" if not write else "Pruned"
|
|
83
|
+
console.print(f" Orphaned vectors: {status} {orphans_pruned}")
|
|
84
|
+
if target in ["dangling", "all"]:
|
|
85
|
+
status = "Would prune" if not write else "Pruned"
|
|
86
|
+
console.print(f" Dangling links: {status} {dangling_pruned}")
|
|
87
|
+
console.print()
|
|
88
|
+
if write:
|
|
89
|
+
console.print("[green]✅ Cleanup completed successfully[/green]")
|
|
90
|
+
else:
|
|
91
|
+
console.print("[yellow]DRY-RUN completed - no changes made[/yellow]")
|
|
92
|
+
except Exception as e:
|
|
93
|
+
logger.error("Vector cleanup failed", exc_info=True)
|
|
94
|
+
console.print(f"[red]❌ Error: {e}[/red]")
|
|
95
|
+
raise typer.Exit(1)
|