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.
Files changed (962) hide show
  1. api/__init__.py +4 -0
  2. api/cli/__init__.py +10 -0
  3. api/cli/audit_client.py +92 -0
  4. api/cli/census_client.py +77 -0
  5. api/cli/client.py +508 -0
  6. api/cli/coverage_client.py +121 -0
  7. api/cli/daemon_client.py +42 -0
  8. api/cli/fix_client.py +101 -0
  9. api/cli/inspect_client.py +143 -0
  10. api/cli/integration_client.py +42 -0
  11. api/cli/integrity_client.py +45 -0
  12. api/cli/proposals_client.py +101 -0
  13. api/cli/quality_client.py +83 -0
  14. api/cli/refactor_client.py +82 -0
  15. api/cli/sync_client.py +106 -0
  16. api/dependencies.py +37 -0
  17. api/errors.py +74 -0
  18. api/main.py +88 -0
  19. api/v1/__init__.py +4 -0
  20. api/v1/audit_routes.py +302 -0
  21. api/v1/census_routes.py +207 -0
  22. api/v1/coverage_routes.py +352 -0
  23. api/v1/daemon_routes.py +86 -0
  24. api/v1/development_routes.py +70 -0
  25. api/v1/fix_routes.py +428 -0
  26. api/v1/inspect_routes.py +220 -0
  27. api/v1/integration_routes.py +56 -0
  28. api/v1/integrity_routes.py +72 -0
  29. api/v1/knowledge_routes.py +36 -0
  30. api/v1/lint_routes.py +40 -0
  31. api/v1/proposals_routes.py +267 -0
  32. api/v1/quality_routes.py +272 -0
  33. api/v1/refactor_routes.py +225 -0
  34. api/v1/sync_routes.py +261 -0
  35. body/__init__.py +4 -0
  36. body/analyzers/__init__.py +25 -0
  37. body/analyzers/base_analyzer.py +28 -0
  38. body/analyzers/constitutional_path_analyzer.py +63 -0
  39. body/analyzers/file_analyzer.py +211 -0
  40. body/analyzers/knowledge_graph_analyzer.py +86 -0
  41. body/analyzers/prompt_analyzer.py +155 -0
  42. body/analyzers/symbol_extractor.py +280 -0
  43. body/atomic/__init__.py +74 -0
  44. body/atomic/build_tests_action.py +354 -0
  45. body/atomic/check_actions.py +142 -0
  46. body/atomic/crate_ops.py +59 -0
  47. body/atomic/executor.py +470 -0
  48. body/atomic/file_ops.py +153 -0
  49. body/atomic/fix_actions.py +1142 -0
  50. body/atomic/import_resolver.py +200 -0
  51. body/atomic/metadata_ops.py +161 -0
  52. body/atomic/modularity_fix.py +839 -0
  53. body/atomic/modularity_splitter.py +521 -0
  54. body/atomic/proposal_lifecycle_actions.py +171 -0
  55. body/atomic/registry.py +326 -0
  56. body/atomic/remediate_cognitive_role.py +104 -0
  57. body/atomic/sandbox_lifecycle.py +252 -0
  58. body/atomic/split_plan.py +155 -0
  59. body/atomic/sync_actions/__init__.py +22 -0
  60. body/atomic/sync_actions/chunking_helpers.py +218 -0
  61. body/atomic/sync_actions/sync_actions.py +431 -0
  62. body/atomic/test_actions.py +47 -0
  63. body/autonomy/__init__.py +16 -0
  64. body/autonomy/audit_analyzer.py +343 -0
  65. body/autonomy/micro_proposal_executor.py +316 -0
  66. body/crate_processing/canary_executor.py +144 -0
  67. body/evaluators/__init__.py +27 -0
  68. body/evaluators/atomic_actions_evaluator.py +162 -0
  69. body/evaluators/atomic_actions_format.py +45 -0
  70. body/evaluators/atomic_actions_rules.py +278 -0
  71. body/evaluators/base_evaluator.py +67 -0
  72. body/evaluators/clarity_evaluator.py +83 -0
  73. body/evaluators/constitutional_evaluator.py +227 -0
  74. body/evaluators/failure_evaluator.py +136 -0
  75. body/evaluators/performance_evaluator.py +341 -0
  76. body/evaluators/security_evaluator.py +393 -0
  77. body/flows/__init__.py +33 -0
  78. body/flows/executor.py +275 -0
  79. body/flows/registry.py +272 -0
  80. body/flows/result.py +113 -0
  81. body/governance/__init__.py +29 -0
  82. body/governance/body_contracts_service.py +317 -0
  83. body/governance/code_validator.py +118 -0
  84. body/governance/engine_dispatcher.py +128 -0
  85. body/governance/intent_guard.py +592 -0
  86. body/governance/intent_pattern_validators.py +197 -0
  87. body/governance/key_management_service.py +100 -0
  88. body/governance/path_validator.py +187 -0
  89. body/governance/remediation_service.py +263 -0
  90. body/governance/runtime_validator.py +184 -0
  91. body/infrastructure/bootstrap.py +135 -0
  92. body/infrastructure/lifespan.py +85 -0
  93. body/infrastructure/repositories/__init__.py +1 -0
  94. body/infrastructure/repositories/decision_trace_repository.py +210 -0
  95. body/infrastructure/repositories/refusal_repository.py +294 -0
  96. body/introspection/__init__.py +4 -0
  97. body/introspection/capability_discovery_service.py +107 -0
  98. body/introspection/discovery/from_kgb.py +33 -0
  99. body/introspection/discovery/from_source_scan.py +40 -0
  100. body/introspection/discovery/loader.py +62 -0
  101. body/introspection/discovery/registry.py +22 -0
  102. body/introspection/discovery/semantics.py +21 -0
  103. body/introspection/discovery/sync.py +47 -0
  104. body/introspection/drift_detector.py +81 -0
  105. body/introspection/drift_service.py +48 -0
  106. body/introspection/export_vectors.py +133 -0
  107. body/introspection/generate_capability_docs.py +130 -0
  108. body/introspection/generate_correction_map.py +98 -0
  109. body/introspection/graph_analysis_service.py +66 -0
  110. body/introspection/knowledge_graph_service.py +170 -0
  111. body/introspection/semantic_clusterer.py +128 -0
  112. body/introspection/symbol_index_builder.py +244 -0
  113. body/introspection/sync/engine.py +92 -0
  114. body/introspection/sync/scanner.py +56 -0
  115. body/introspection/sync/visitor.py +83 -0
  116. body/introspection/sync_service.py +62 -0
  117. body/invokers/__init__.py +4 -0
  118. body/invokers/capability_invoker.py +4 -0
  119. body/maintenance/command_sync_service.py +73 -0
  120. body/maintenance/dotenv_sync_service.py +99 -0
  121. body/maintenance/idempotency_harness.py +70 -0
  122. body/maintenance/maintenance_service.py +123 -0
  123. body/maintenance/memory_cleanup_service.py +131 -0
  124. body/maintenance/refactor_settings_access.py +274 -0
  125. body/maintenance/scripts/__init__.py +5 -0
  126. body/maintenance/scripts/context_export.py +278 -0
  127. body/maintenance/scripts/vector_verify.py +73 -0
  128. body/maintenance/sync_vectors.py +338 -0
  129. body/models/__init__.py +4 -0
  130. body/project_lifecycle/__init__.py +4 -0
  131. body/project_lifecycle/bootstrap_service.py +157 -0
  132. body/project_lifecycle/definition_service.py +264 -0
  133. body/project_lifecycle/integration_service.py +113 -0
  134. body/project_lifecycle/scaffolding_service.py +187 -0
  135. body/quality/coverage_analyzer.py +177 -0
  136. body/repositories/__init__.py +4 -0
  137. body/self_healing/atomic_actions_fixer.py +113 -0
  138. body/self_healing/body_ui_fixer.py +193 -0
  139. body/self_healing/capability_parser.py +65 -0
  140. body/self_healing/code_style_service.py +51 -0
  141. body/self_healing/complexity_filter.py +70 -0
  142. body/self_healing/docstring_service.py +345 -0
  143. body/self_healing/duplicate_id_service.py +407 -0
  144. body/self_healing/duplicates_service.py +165 -0
  145. body/self_healing/handlers/__init__.py +1 -0
  146. body/self_healing/handlers/id_assignment_handler.py +201 -0
  147. body/self_healing/handlers/import_sorting_handler.py +181 -0
  148. body/self_healing/header_service.py +308 -0
  149. body/self_healing/id_tagging_service.py +227 -0
  150. body/self_healing/knowledge_consolidation_service.py +80 -0
  151. body/self_healing/logging_service.py +292 -0
  152. body/self_healing/owner_tagging_service.py +5 -0
  153. body/self_healing/placeholder_fixer_service.py +27 -0
  154. body/self_healing/prune_private_capabilities.py +144 -0
  155. body/self_healing/purge_legacy_tags_service.py +146 -0
  156. body/self_healing/remediation_models.py +238 -0
  157. body/self_healing/test_context/__init__.py +10 -0
  158. body/self_healing/test_context/detectors.py +74 -0
  159. body/self_healing/test_context/examples.py +53 -0
  160. body/self_healing/test_context/formatter.py +65 -0
  161. body/self_healing/test_context/metrics.py +62 -0
  162. body/self_healing/test_context/models.py +83 -0
  163. body/self_healing/test_context/parsers.py +70 -0
  164. body/self_healing/test_context_analyzer.py +79 -0
  165. body/self_healing/test_failure_analyzer.py +259 -0
  166. body/self_healing/test_target_analyzer.py +118 -0
  167. body/self_healing/vulture_healer.py +161 -0
  168. body/services/__init__.py +4 -0
  169. body/services/artifact_service.py +155 -0
  170. body/services/blackboard_service/__init__.py +22 -0
  171. body/services/blackboard_service/blackboard_claim_service.py +216 -0
  172. body/services/blackboard_service/blackboard_proposal_service.py +305 -0
  173. body/services/blackboard_service/blackboard_query_service.py +333 -0
  174. body/services/blackboard_service/blackboard_service.py +602 -0
  175. body/services/capabilities.py +51 -0
  176. body/services/cim/__init__.py +22 -0
  177. body/services/cim/baselines.py +102 -0
  178. body/services/cim/census_service.py +190 -0
  179. body/services/cim/cim_constants.py +116 -0
  180. body/services/cim/cim_path_utils.py +123 -0
  181. body/services/cim/diff.py +152 -0
  182. body/services/cim/history.py +94 -0
  183. body/services/cim/models.py +319 -0
  184. body/services/cim/policy.py +149 -0
  185. body/services/cim/scanners.py +332 -0
  186. body/services/coherence_service.py +552 -0
  187. body/services/consequence_log_service.py +189 -0
  188. body/services/constitutional_rule_loader.py +141 -0
  189. body/services/constitutional_validator.py +366 -0
  190. body/services/crate_creation_service.py +217 -0
  191. body/services/crate_processing_service.py +279 -0
  192. body/services/crawl_service/__init__.py +10 -0
  193. body/services/crawl_service/main_module.py +531 -0
  194. body/services/crawl_service/orchestrator.py +452 -0
  195. body/services/crawl_service/symbol_processing.py +279 -0
  196. body/services/database_service.py +242 -0
  197. body/services/doc_service.py +57 -0
  198. body/services/file_service.py +260 -0
  199. body/services/governance_claims_service.py +240 -0
  200. body/services/governance_init.py +41 -0
  201. body/services/health_log_service.py +167 -0
  202. body/services/intent_schema_validator.py +211 -0
  203. body/services/llm_client.py +87 -0
  204. body/services/mind_state_service.py +129 -0
  205. body/services/policy_expression_evaluator.py +154 -0
  206. body/services/proposal_supervision_service.py +187 -0
  207. body/services/representation_coherence_service.py +209 -0
  208. body/services/service_registry.py +431 -0
  209. body/services/session_attached_service.py +51 -0
  210. body/services/symbol_query_service.py +218 -0
  211. body/services/symbol_service.py +94 -0
  212. body/services/validation/__init__.py +14 -0
  213. body/services/validation/python_validator.py +89 -0
  214. body/services/validation/validation_policies.py +121 -0
  215. body/services/worker_registry_service.py +184 -0
  216. body/validators/__init__.py +1 -0
  217. body/validators/logic_conservation_validator.py +201 -0
  218. body/workers/call_site_rewriter.py +527 -0
  219. body/workers/prompt_artifact_writer.py +323 -0
  220. cli/__init__.py +4 -0
  221. cli/admin_cli.py +98 -0
  222. cli/cli_user.py +121 -0
  223. cli/commands/__init__.py +4 -0
  224. cli/commands/audit_reporter.py +272 -0
  225. cli/commands/check/__init__.py +115 -0
  226. cli/commands/check/audit.py +130 -0
  227. cli/commands/check/converters.py +129 -0
  228. cli/commands/check/diagnostics_commands.py +70 -0
  229. cli/commands/check/formatters.py +310 -0
  230. cli/commands/check/imports.py +73 -0
  231. cli/commands/check/quality.py +71 -0
  232. cli/commands/check/quality_gates.py +107 -0
  233. cli/commands/check/rule.py +136 -0
  234. cli/commands/check/utils.py +28 -0
  235. cli/commands/check_atomic_actions.py +167 -0
  236. cli/commands/components.py +66 -0
  237. cli/commands/coverage/__init__.py +22 -0
  238. cli/commands/coverage/analysis_commands.py +87 -0
  239. cli/commands/coverage/check_commands.py +173 -0
  240. cli/commands/coverage/generation_commands.py +155 -0
  241. cli/commands/coverage/services/__init__.py +15 -0
  242. cli/commands/coverage/services/coverage_checker.py +50 -0
  243. cli/commands/coverage/services/coverage_reporter.py +81 -0
  244. cli/commands/coverage/services/gaps_analyzer.py +114 -0
  245. cli/commands/daemon.py +908 -0
  246. cli/commands/develop.py +127 -0
  247. cli/commands/diagnostics.py +32 -0
  248. cli/commands/fix/__init__.py +84 -0
  249. cli/commands/fix/all_commands.py +94 -0
  250. cli/commands/fix/atomic_actions.py +48 -0
  251. cli/commands/fix/audit.py +146 -0
  252. cli/commands/fix/body_ui.py +93 -0
  253. cli/commands/fix/code_style.py +52 -0
  254. cli/commands/fix/db_tools.py +90 -0
  255. cli/commands/fix/fix_ir.py +79 -0
  256. cli/commands/fix/handler_discovery.py +54 -0
  257. cli/commands/fix/imports.py +55 -0
  258. cli/commands/fix/list_commands.py +54 -0
  259. cli/commands/fix/metadata.py +160 -0
  260. cli/commands/fix/modularity.py +88 -0
  261. cli/commands/fix/settings_access.py +65 -0
  262. cli/commands/fix_governed.py +103 -0
  263. cli/commands/fix_logging.py +24 -0
  264. cli/commands/governance.py +294 -0
  265. cli/commands/guard.py +125 -0
  266. cli/commands/inspect/__init__.py +79 -0
  267. cli/commands/inspect/_helpers.py +226 -0
  268. cli/commands/inspect/analysis.py +158 -0
  269. cli/commands/inspect/decisions.py +140 -0
  270. cli/commands/inspect/diagnostics.py +126 -0
  271. cli/commands/inspect/drift.py +100 -0
  272. cli/commands/inspect/patterns.py +102 -0
  273. cli/commands/inspect/refusals.py +211 -0
  274. cli/commands/inspect/repo_census.py +175 -0
  275. cli/commands/inspect/status.py +48 -0
  276. cli/commands/interactive_test.py +85 -0
  277. cli/commands/mind.py +49 -0
  278. cli/commands/refactor.py +234 -0
  279. cli/commands/refactor_support/__init__.py +7 -0
  280. cli/commands/refactor_support/analyzer.py +107 -0
  281. cli/commands/refactor_support/config.py +67 -0
  282. cli/commands/refactor_support/display.py +170 -0
  283. cli/commands/refactor_support/recommendations.py +55 -0
  284. cli/commands/run.py +60 -0
  285. cli/commands/search.py +103 -0
  286. cli/commands/status.py +86 -0
  287. cli/commands/submit.py +23 -0
  288. cli/interactive.py +177 -0
  289. cli/logic/__init__.py +7 -0
  290. cli/logic/agent.py +110 -0
  291. cli/logic/audit_capability_domains.py +106 -0
  292. cli/logic/audit_renderer.py +150 -0
  293. cli/logic/autonomy/actions.py +36 -0
  294. cli/logic/autonomy/views.py +116 -0
  295. cli/logic/body_contracts_checker.py +23 -0
  296. cli/logic/build.py +27 -0
  297. cli/logic/byor.py +148 -0
  298. cli/logic/capability.py +27 -0
  299. cli/logic/cli_utils.py +210 -0
  300. cli/logic/context.py +7 -0
  301. cli/logic/db.py +154 -0
  302. cli/logic/db_manage.py +22 -0
  303. cli/logic/decision_inspect_logic.py +62 -0
  304. cli/logic/diagnostics.py +148 -0
  305. cli/logic/diagnostics_policy.py +100 -0
  306. cli/logic/diagnostics_registry.py +165 -0
  307. cli/logic/duplicates.py +19 -0
  308. cli/logic/embeddings_cli.py +43 -0
  309. cli/logic/governance/__init__.py +16 -0
  310. cli/logic/governance/engine.py +216 -0
  311. cli/logic/governance/forensics_service.py +67 -0
  312. cli/logic/governance/limb_status_service.py +83 -0
  313. cli/logic/governance/renderer.py +115 -0
  314. cli/logic/governance/traceability_service.py +78 -0
  315. cli/logic/governance_logic.py +33 -0
  316. cli/logic/hub/__init__.py +14 -0
  317. cli/logic/hub/app.py +107 -0
  318. cli/logic/hub/formatter.py +29 -0
  319. cli/logic/hub/introspection.py +20 -0
  320. cli/logic/hub/repository.py +17 -0
  321. cli/logic/init.py +22 -0
  322. cli/logic/interactive_test/__init__.py +21 -0
  323. cli/logic/interactive_test/session.py +102 -0
  324. cli/logic/interactive_test/steps/__init__.py +23 -0
  325. cli/logic/interactive_test/steps/execution.py +53 -0
  326. cli/logic/interactive_test/steps/generation.py +88 -0
  327. cli/logic/interactive_test/steps/healing.py +79 -0
  328. cli/logic/interactive_test/steps/utils.py +31 -0
  329. cli/logic/interactive_test/steps/verification.py +71 -0
  330. cli/logic/interactive_test/ui.py +203 -0
  331. cli/logic/interactive_test/workflow.py +168 -0
  332. cli/logic/interactive_test_logic.py +41 -0
  333. cli/logic/knowledge.py +47 -0
  334. cli/logic/legacy_scan_logic.py +306 -0
  335. cli/logic/list_audits.py +49 -0
  336. cli/logic/log_audit.py +53 -0
  337. cli/logic/new.py +8 -0
  338. cli/logic/project_docs.py +28 -0
  339. cli/logic/reconcile.py +127 -0
  340. cli/logic/refusal_inspect_logic.py +208 -0
  341. cli/logic/report.py +47 -0
  342. cli/logic/status.py +47 -0
  343. cli/logic/symbol_drift.py +77 -0
  344. cli/logic/sync.py +48 -0
  345. cli/logic/sync_domains.py +72 -0
  346. cli/logic/sync_manifest.py +31 -0
  347. cli/logic/tools.py +133 -0
  348. cli/logic/utils_migration.py +43 -0
  349. cli/logic/validate.py +107 -0
  350. cli/logic/vector_drift.py +109 -0
  351. cli/logic/yaml_processor.py +5 -0
  352. cli/renderers/audit_detail.py +37 -0
  353. cli/renderers/audit_overview.py +39 -0
  354. cli/resources/__init__.py +27 -0
  355. cli/resources/admin/__init__.py +23 -0
  356. cli/resources/admin/coverage.py +63 -0
  357. cli/resources/admin/debt_scan.py +195 -0
  358. cli/resources/admin/forensics.py +97 -0
  359. cli/resources/admin/health.py +66 -0
  360. cli/resources/admin/hub.py +9 -0
  361. cli/resources/admin/meta.py +47 -0
  362. cli/resources/admin/patterns.py +28 -0
  363. cli/resources/admin/refusals.py +31 -0
  364. cli/resources/admin/self_check.py +175 -0
  365. cli/resources/admin/status.py +66 -0
  366. cli/resources/admin/summary.py +67 -0
  367. cli/resources/admin/traces.py +46 -0
  368. cli/resources/admin/validate_env.py +56 -0
  369. cli/resources/code/__init__.py +31 -0
  370. cli/resources/code/actions.py +48 -0
  371. cli/resources/code/audit.py +416 -0
  372. cli/resources/code/audit_duplicates.py +22 -0
  373. cli/resources/code/check_imports.py +75 -0
  374. cli/resources/code/check_ui.py +62 -0
  375. cli/resources/code/clarity.py +51 -0
  376. cli/resources/code/complexity.py +55 -0
  377. cli/resources/code/docstrings.py +51 -0
  378. cli/resources/code/fix_atomic.py +51 -0
  379. cli/resources/code/format.py +62 -0
  380. cli/resources/code/hub.py +10 -0
  381. cli/resources/code/integrity.py +75 -0
  382. cli/resources/code/lint.py +37 -0
  383. cli/resources/code/logging.py +49 -0
  384. cli/resources/code/refactor.py +32 -0
  385. cli/resources/code/test.py +30 -0
  386. cli/resources/coherence/__init__.py +13 -0
  387. cli/resources/coherence/check.py +111 -0
  388. cli/resources/coherence/hub.py +13 -0
  389. cli/resources/coherence/repair_counts.py +73 -0
  390. cli/resources/coherence/report.py +144 -0
  391. cli/resources/coherence/seed.py +297 -0
  392. cli/resources/coherence/supersede.py +124 -0
  393. cli/resources/coherence/triage.py +81 -0
  394. cli/resources/constitution/__init__.py +19 -0
  395. cli/resources/constitution/audit.py +49 -0
  396. cli/resources/constitution/query.py +45 -0
  397. cli/resources/constitution/status.py +34 -0
  398. cli/resources/constitution/validate.py +36 -0
  399. cli/resources/context/__init__.py +21 -0
  400. cli/resources/context/build.py +374 -0
  401. cli/resources/context/cache.py +156 -0
  402. cli/resources/context/explain.py +140 -0
  403. cli/resources/context/hub.py +11 -0
  404. cli/resources/context/search.py +114 -0
  405. cli/resources/database/__init__.py +13 -0
  406. cli/resources/database/cleanup.py +107 -0
  407. cli/resources/database/export.py +61 -0
  408. cli/resources/database/hub.py +11 -0
  409. cli/resources/database/migrate.py +57 -0
  410. cli/resources/database/status.py +101 -0
  411. cli/resources/database/sync.py +84 -0
  412. cli/resources/database/sync_env.py +76 -0
  413. cli/resources/database/sync_registry.py +48 -0
  414. cli/resources/dev/__init__.py +14 -0
  415. cli/resources/dev/hub.py +11 -0
  416. cli/resources/dev/refactor.py +92 -0
  417. cli/resources/dev/stability.py +60 -0
  418. cli/resources/dev/strategic_audit.py +113 -0
  419. cli/resources/dev/sync.py +51 -0
  420. cli/resources/dev/test.py +34 -0
  421. cli/resources/intent/__init__.py +11 -0
  422. cli/resources/intent/hub.py +9 -0
  423. cli/resources/intent/sync_vocabulary.py +396 -0
  424. cli/resources/project/__init__.py +19 -0
  425. cli/resources/project/docs.py +41 -0
  426. cli/resources/project/new.py +40 -0
  427. cli/resources/project/onboard.py +31 -0
  428. cli/resources/proposals/__init__.py +28 -0
  429. cli/resources/proposals/create.py +82 -0
  430. cli/resources/proposals/integrate.py +49 -0
  431. cli/resources/proposals/list.py +76 -0
  432. cli/resources/proposals/manage.py +117 -0
  433. cli/resources/runtime/__init__.py +9 -0
  434. cli/resources/runtime/health.py +925 -0
  435. cli/resources/secrets/__init__.py +10 -0
  436. cli/resources/secrets/hub.py +9 -0
  437. cli/resources/secrets/manage.py +309 -0
  438. cli/resources/symbols/__init__.py +13 -0
  439. cli/resources/symbols/audit.py +46 -0
  440. cli/resources/symbols/fix_ids.py +43 -0
  441. cli/resources/symbols/hub.py +11 -0
  442. cli/resources/symbols/resolve_duplicates.py +30 -0
  443. cli/resources/symbols/sync.py +39 -0
  444. cli/resources/symbols/tag.py +47 -0
  445. cli/resources/vectors/__init__.py +11 -0
  446. cli/resources/vectors/cleanup.py +95 -0
  447. cli/resources/vectors/hub.py +9 -0
  448. cli/resources/vectors/query.py +105 -0
  449. cli/resources/vectors/status.py +30 -0
  450. cli/resources/vectors/sync.py +57 -0
  451. cli/resources/vectors/sync_code.py +67 -0
  452. cli/resources/workers/__init__.py +13 -0
  453. cli/resources/workers/blackboard.py +253 -0
  454. cli/resources/workers/remediate.py +337 -0
  455. cli/resources/workers/run.py +140 -0
  456. cli/utils/__init__.py +32 -0
  457. cli/utils/annotation_formatter.py +154 -0
  458. cli/utils/decorators.py +184 -0
  459. cli/utils/display.py +79 -0
  460. cli/utils/exit_codes.py +59 -0
  461. cli/utils/helpers.py +34 -0
  462. cli/utils/prompts.py +21 -0
  463. core_runtime-0.1.1.dist-info/LICENSE +21 -0
  464. core_runtime-0.1.1.dist-info/METADATA +346 -0
  465. core_runtime-0.1.1.dist-info/RECORD +962 -0
  466. core_runtime-0.1.1.dist-info/WHEEL +4 -0
  467. core_runtime-0.1.1.dist-info/entry_points.txt +4 -0
  468. mind/__init__.py +4 -0
  469. mind/coherence/__init__.py +1 -0
  470. mind/coherence/checker.py +314 -0
  471. mind/coherence/checks/__init__.py +4 -0
  472. mind/coherence/checks/base.py +34 -0
  473. mind/coherence/checks/r1_scoped.py +228 -0
  474. mind/coherence/checks/row2_grounding.py +69 -0
  475. mind/coherence/checks/row3_citation.py +119 -0
  476. mind/coherence/checks/row4_naming.py +126 -0
  477. mind/coherence/checks/sameconcern.py +136 -0
  478. mind/coherence/checks/specgap.py +233 -0
  479. mind/coherence/checks/vocabulary.py +112 -0
  480. mind/coherence/llm_judge.py +207 -0
  481. mind/enforcement/audit.py +78 -0
  482. mind/governance/__init__.py +22 -0
  483. mind/governance/assumption_extractor.py +326 -0
  484. mind/governance/audit_context.py +520 -0
  485. mind/governance/audit_postprocessor.py +36 -0
  486. mind/governance/audit_report_writer.py +46 -0
  487. mind/governance/audit_types.py +98 -0
  488. mind/governance/auditor.py +179 -0
  489. mind/governance/authority_package_builder.py +502 -0
  490. mind/governance/constitutional_auditor_dynamic.py +362 -0
  491. mind/governance/enforcement/__init__.py +24 -0
  492. mind/governance/enforcement_loader.py +245 -0
  493. mind/governance/enforcement_methods.py +28 -0
  494. mind/governance/entry_point_policy.py +62 -0
  495. mind/governance/executable_rule.py +127 -0
  496. mind/governance/filtered_audit.py +272 -0
  497. mind/governance/finding_processor.py +76 -0
  498. mind/governance/meta_validator.py +259 -0
  499. mind/governance/micro_proposal_validator.py +169 -0
  500. mind/governance/policy_coverage_service.py +183 -0
  501. mind/governance/policy_rule.py +94 -0
  502. mind/governance/rule_conflict_detector.py +127 -0
  503. mind/governance/rule_executor.py +306 -0
  504. mind/governance/rule_extractor.py +376 -0
  505. mind/governance/stateless_audit.py +206 -0
  506. mind/governance/violation_report.py +136 -0
  507. mind/logic/engines/_knowledge_gate_duplication.py +117 -0
  508. mind/logic/engines/action_gate.py +76 -0
  509. mind/logic/engines/artifact_gate.py +1168 -0
  510. mind/logic/engines/ast_gate/__init__.py +9 -0
  511. mind/logic/engines/ast_gate/base.py +263 -0
  512. mind/logic/engines/ast_gate/checks/__init__.py +35 -0
  513. mind/logic/engines/ast_gate/checks/async_checks.py +276 -0
  514. mind/logic/engines/ast_gate/checks/capability_checks.py +197 -0
  515. mind/logic/engines/ast_gate/checks/conservation_checks.py +126 -0
  516. mind/logic/engines/ast_gate/checks/generic_checks.py +244 -0
  517. mind/logic/engines/ast_gate/checks/import_checks.py +164 -0
  518. mind/logic/engines/ast_gate/checks/knowledge_source_check.py +88 -0
  519. mind/logic/engines/ast_gate/checks/logging_checks.py +133 -0
  520. mind/logic/engines/ast_gate/checks/metadata_checks.py +242 -0
  521. mind/logic/engines/ast_gate/checks/modularity_checks.py +436 -0
  522. mind/logic/engines/ast_gate/checks/naming_checks.py +120 -0
  523. mind/logic/engines/ast_gate/checks/prompt_model_checks.py +83 -0
  524. mind/logic/engines/ast_gate/checks/protected_namespace_access_check.py +298 -0
  525. mind/logic/engines/ast_gate/checks/purity_checks.py +421 -0
  526. mind/logic/engines/ast_gate/checks/purity_enforcement_check.py +56 -0
  527. mind/logic/engines/ast_gate/checks/runtime_import_boundary.py +198 -0
  528. mind/logic/engines/ast_gate/checks/schema_conformance_checks.py +130 -0
  529. mind/logic/engines/ast_gate/engine.py +317 -0
  530. mind/logic/engines/ast_gate.py +19 -0
  531. mind/logic/engines/base.py +106 -0
  532. mind/logic/engines/cli_gate/__init__.py +25 -0
  533. mind/logic/engines/cli_gate/base_check.py +45 -0
  534. mind/logic/engines/cli_gate/checks/__init__.py +31 -0
  535. mind/logic/engines/cli_gate/checks/async_execution.py +65 -0
  536. mind/logic/engines/cli_gate/checks/dangerous_explicit.py +60 -0
  537. mind/logic/engines/cli_gate/checks/discovery_strict.py +167 -0
  538. mind/logic/engines/cli_gate/checks/help_required.py +43 -0
  539. mind/logic/engines/cli_gate/checks/no_duplicates.py +57 -0
  540. mind/logic/engines/cli_gate/checks/no_layer_exposure.py +48 -0
  541. mind/logic/engines/cli_gate/checks/resource_first.py +58 -0
  542. mind/logic/engines/cli_gate/checks/standard_verbs.py +50 -0
  543. mind/logic/engines/cli_gate/engine.py +211 -0
  544. mind/logic/engines/glob_gate.py +214 -0
  545. mind/logic/engines/knowledge_gate.py +410 -0
  546. mind/logic/engines/llm_gate.py +407 -0
  547. mind/logic/engines/llm_gate_stub.py +67 -0
  548. mind/logic/engines/passive_gate.py +45 -0
  549. mind/logic/engines/regex_gate.py +97 -0
  550. mind/logic/engines/registry.py +134 -0
  551. mind/logic/engines/runtime_gate.py +265 -0
  552. mind/logic/engines/taxonomy_gate.py +229 -0
  553. mind/logic/engines/workflow_gate/__init__.py +22 -0
  554. mind/logic/engines/workflow_gate/base_check.py +42 -0
  555. mind/logic/engines/workflow_gate/checks/__init__.py +32 -0
  556. mind/logic/engines/workflow_gate/checks/alignment.py +93 -0
  557. mind/logic/engines/workflow_gate/checks/audit.py +80 -0
  558. mind/logic/engines/workflow_gate/checks/canary.py +47 -0
  559. mind/logic/engines/workflow_gate/checks/coverage.py +74 -0
  560. mind/logic/engines/workflow_gate/checks/dead_code.py +53 -0
  561. mind/logic/engines/workflow_gate/checks/import_resolution.py +97 -0
  562. mind/logic/engines/workflow_gate/checks/linter.py +104 -0
  563. mind/logic/engines/workflow_gate/checks/quality.py +49 -0
  564. mind/logic/engines/workflow_gate/checks/ruff_format.py +99 -0
  565. mind/logic/engines/workflow_gate/checks/tests.py +81 -0
  566. mind/logic/engines/workflow_gate/engine.py +207 -0
  567. shared/__init__.py +32 -0
  568. shared/action_logger.py +61 -0
  569. shared/action_types.py +199 -0
  570. shared/activity_logging.py +149 -0
  571. shared/ai/constitutional_envelope.py +341 -0
  572. shared/ai/prompt_model.py +585 -0
  573. shared/ai/response_parser.py +191 -0
  574. shared/ast_utility.py +279 -0
  575. shared/atomic_action.py +117 -0
  576. shared/cli/__init__.py +6 -0
  577. shared/cli/app_introspection.py +134 -0
  578. shared/cli/command_meta.py +224 -0
  579. shared/cli_types.py +92 -0
  580. shared/component_primitive.py +216 -0
  581. shared/config.py +216 -0
  582. shared/config_loader.py +54 -0
  583. shared/context.py +113 -0
  584. shared/exceptions.py +100 -0
  585. shared/governance/__init__.py +9 -0
  586. shared/governance/coherence_harvester.py +258 -0
  587. shared/governance_token.py +77 -0
  588. shared/infrastructure/__init__.py +5 -0
  589. shared/infrastructure/adapters/__init__.py +5 -0
  590. shared/infrastructure/adapters/embedding_provider.py +66 -0
  591. shared/infrastructure/bootstrap_registry.py +57 -0
  592. shared/infrastructure/clients/__init__.py +5 -0
  593. shared/infrastructure/clients/qdrant_client.py +455 -0
  594. shared/infrastructure/config_service.py +382 -0
  595. shared/infrastructure/config_validator.py +70 -0
  596. shared/infrastructure/context/__init__.py +45 -0
  597. shared/infrastructure/context/builder.py +804 -0
  598. shared/infrastructure/context/cache.py +101 -0
  599. shared/infrastructure/context/database.py +205 -0
  600. shared/infrastructure/context/limb_workspace.py +134 -0
  601. shared/infrastructure/context/models.py +65 -0
  602. shared/infrastructure/context/providers/__init__.py +18 -0
  603. shared/infrastructure/context/providers/ast.py +211 -0
  604. shared/infrastructure/context/providers/db.py +165 -0
  605. shared/infrastructure/context/providers/vectors.py +195 -0
  606. shared/infrastructure/context/redactor.py +109 -0
  607. shared/infrastructure/context/serializers.py +144 -0
  608. shared/infrastructure/context/service.py +271 -0
  609. shared/infrastructure/context/validator.py +247 -0
  610. shared/infrastructure/database/models/__init__.py +80 -0
  611. shared/infrastructure/database/models/autonomous_proposals.py +83 -0
  612. shared/infrastructure/database/models/decision_traces.py +129 -0
  613. shared/infrastructure/database/models/governance.py +183 -0
  614. shared/infrastructure/database/models/knowledge.py +205 -0
  615. shared/infrastructure/database/models/learning.py +99 -0
  616. shared/infrastructure/database/models/llm_config.py +274 -0
  617. shared/infrastructure/database/models/operations.py +152 -0
  618. shared/infrastructure/database/models/refusals.py +147 -0
  619. shared/infrastructure/database/models/system.py +124 -0
  620. shared/infrastructure/database/models/vectors.py +113 -0
  621. shared/infrastructure/database/models/workers.py +96 -0
  622. shared/infrastructure/database/session_manager.py +166 -0
  623. shared/infrastructure/diagnostic_service.py +103 -0
  624. shared/infrastructure/events/__init__.py +5 -0
  625. shared/infrastructure/events/base.py +44 -0
  626. shared/infrastructure/events/bus.py +76 -0
  627. shared/infrastructure/git_service.py +385 -0
  628. shared/infrastructure/intent/action_risk.py +135 -0
  629. shared/infrastructure/intent/audit_verdict.py +131 -0
  630. shared/infrastructure/intent/autonomy_dirty_tree.py +104 -0
  631. shared/infrastructure/intent/canonical_enums.py +116 -0
  632. shared/infrastructure/intent/cognitive_roles.py +96 -0
  633. shared/infrastructure/intent/errors.py +13 -0
  634. shared/infrastructure/intent/filesystem_operations.py +359 -0
  635. shared/infrastructure/intent/intent_connector.py +157 -0
  636. shared/infrastructure/intent/intent_repository.py +707 -0
  637. shared/infrastructure/intent/intent_validator.py +248 -0
  638. shared/infrastructure/intent/operational_capabilities.py +470 -0
  639. shared/infrastructure/intent/operational_config.py +1343 -0
  640. shared/infrastructure/intent/operational_mode.py +66 -0
  641. shared/infrastructure/intent/task_type_phases.py +180 -0
  642. shared/infrastructure/intent/test_coverage_paths.py +181 -0
  643. shared/infrastructure/intent/vocabulary_projection.py +241 -0
  644. shared/infrastructure/knowledge/knowledge_service.py +155 -0
  645. shared/infrastructure/knowledge_graph_service.py +214 -0
  646. shared/infrastructure/llm/client.py +448 -0
  647. shared/infrastructure/llm/client_registry.py +153 -0
  648. shared/infrastructure/llm/fallback_client.py +144 -0
  649. shared/infrastructure/llm/providers/anthropic.py +113 -0
  650. shared/infrastructure/llm/providers/base.py +130 -0
  651. shared/infrastructure/llm/providers/ollama.py +265 -0
  652. shared/infrastructure/llm/providers/openai.py +168 -0
  653. shared/infrastructure/repositories/__init__.py +5 -0
  654. shared/infrastructure/repositories/db/__init__.py +5 -0
  655. shared/infrastructure/repositories/db/common.py +138 -0
  656. shared/infrastructure/repositories/db/engine.py +26 -0
  657. shared/infrastructure/repositories/db/migration_service.py +75 -0
  658. shared/infrastructure/repositories/db/status_service.py +61 -0
  659. shared/infrastructure/repositories/memory_repository.py +134 -0
  660. shared/infrastructure/repositories/symbol_definition_repository.py +170 -0
  661. shared/infrastructure/repositories/task_repository.py +59 -0
  662. shared/infrastructure/repositories/vector_link_repository.py +83 -0
  663. shared/infrastructure/rooted_repository.py +50 -0
  664. shared/infrastructure/secrets_service.py +317 -0
  665. shared/infrastructure/specs/__init__.py +9 -0
  666. shared/infrastructure/specs/specs_repository.py +100 -0
  667. shared/infrastructure/storage/file_classifier.py +32 -0
  668. shared/infrastructure/storage/file_handler.py +330 -0
  669. shared/infrastructure/storage/file_provider.py +233 -0
  670. shared/infrastructure/storage/integrity_service.py +108 -0
  671. shared/infrastructure/validation/black_formatter.py +41 -0
  672. shared/infrastructure/validation/quality.py +46 -0
  673. shared/infrastructure/validation/ruff_linter.py +104 -0
  674. shared/infrastructure/validation/syntax_checker.py +45 -0
  675. shared/infrastructure/validation/test_runner.py +167 -0
  676. shared/infrastructure/validation/yaml_validator.py +45 -0
  677. shared/infrastructure/vector/__init__.py +15 -0
  678. shared/infrastructure/vector/adapters/__init__.py +20 -0
  679. shared/infrastructure/vector/adapters/constitutional/__init__.py +26 -0
  680. shared/infrastructure/vector/adapters/constitutional/chunker.py +246 -0
  681. shared/infrastructure/vector/adapters/constitutional/doc_key_resolver.py +109 -0
  682. shared/infrastructure/vector/adapters/constitutional/item_builder.py +158 -0
  683. shared/infrastructure/vector/adapters/constitutional/utils.py +39 -0
  684. shared/infrastructure/vector/adapters/constitutional_adapter.py +309 -0
  685. shared/infrastructure/vector/adapters/specs_adapter.py +171 -0
  686. shared/infrastructure/vector/cognitive_adapter.py +119 -0
  687. shared/infrastructure/vector/vector_index_service.py +230 -0
  688. shared/logger.py +195 -0
  689. shared/models/__init__.py +47 -0
  690. shared/models/action_result.py +77 -0
  691. shared/models/audit_models.py +106 -0
  692. shared/models/audit_rendering.py +30 -0
  693. shared/models/capability_models.py +22 -0
  694. shared/models/constitutional_validation.py +185 -0
  695. shared/models/drift_models.py +24 -0
  696. shared/models/embedding_payload.py +45 -0
  697. shared/models/execution_models.py +71 -0
  698. shared/models/pattern_graph.py +62 -0
  699. shared/models/prompt_model.py +244 -0
  700. shared/models/refusal_result.py +294 -0
  701. shared/models/remediation.py +35 -0
  702. shared/models/validation_result.py +34 -0
  703. shared/models/vector_models.py +62 -0
  704. shared/models/workflow_models.py +242 -0
  705. shared/path_resolver.py +408 -0
  706. shared/path_utils.py +60 -0
  707. shared/processors/base_processor.py +171 -0
  708. shared/processors/yaml_processor.py +72 -0
  709. shared/protocols/__init__.py +21 -0
  710. shared/protocols/brain_services.py +35 -0
  711. shared/protocols/cognitive.py +35 -0
  712. shared/protocols/executor.py +47 -0
  713. shared/protocols/interpreter.py +24 -0
  714. shared/protocols/knowledge.py +21 -0
  715. shared/protocols/llm.py +25 -0
  716. shared/protocols/typer_protocols.py +37 -0
  717. shared/time.py +18 -0
  718. shared/universal.py +43 -0
  719. shared/utils/__init__.py +81 -0
  720. shared/utils/audit_grouping.py +50 -0
  721. shared/utils/common_knowledge.py +82 -0
  722. shared/utils/domain_mapper.py +61 -0
  723. shared/utils/embedding_utils.py +182 -0
  724. shared/utils/glob_match.py +93 -0
  725. shared/utils/header_tools.py +177 -0
  726. shared/utils/parallel_processor.py +60 -0
  727. shared/utils/parsing.py +189 -0
  728. shared/utils/path_utils.py +268 -0
  729. shared/utils/subprocess_utils.py +87 -0
  730. shared/workers/__init__.py +19 -0
  731. shared/workers/base.py +533 -0
  732. shared/workers/declaration_validator.py +124 -0
  733. shared/workers/loop_hold_telemetry.py +210 -0
  734. shared/workers/schedule.py +123 -0
  735. will/__init__.py +4 -0
  736. will/agents/__init__.py +4 -0
  737. will/agents/base_planner.py +133 -0
  738. will/agents/code_generation/__init__.py +15 -0
  739. will/agents/code_generation/code_generator.py +247 -0
  740. will/agents/code_generation/context_formatters.py +99 -0
  741. will/agents/code_generation/correction_engine.py +157 -0
  742. will/agents/code_generation/extraction.py +165 -0
  743. will/agents/code_generation/pattern_validator.py +264 -0
  744. will/agents/code_generation/prompt_builders.py +209 -0
  745. will/agents/coder_agent.py +229 -0
  746. will/agents/coder_agent_refusal_handler.py +168 -0
  747. will/agents/cognitive_orchestrator.py +152 -0
  748. will/agents/conversational/__init__.py +13 -0
  749. will/agents/conversational/agent.py +271 -0
  750. will/agents/conversational/factory.py +72 -0
  751. will/agents/conversational/helpers.py +116 -0
  752. will/agents/execution_agent.py +294 -0
  753. will/agents/governance_mixin.py +132 -0
  754. will/agents/planner_agent.py +261 -0
  755. will/agents/resource_selector.py +228 -0
  756. will/agents/strategic_auditor/__init__.py +15 -0
  757. will/agents/strategic_auditor/agent.py +199 -0
  758. will/agents/strategic_auditor/context_gatherer.py +586 -0
  759. will/agents/strategic_auditor/effects.py +136 -0
  760. will/agents/strategic_auditor/models.py +61 -0
  761. will/agents/strategic_auditor/reasoning.py +169 -0
  762. will/agents/tagger_agent.py +294 -0
  763. will/agents/traced_agent_mixin.py +33 -0
  764. will/autonomy/__init__.py +20 -0
  765. will/autonomy/autonomous_developer.py +127 -0
  766. will/autonomy/proposal.py +585 -0
  767. will/autonomy/proposal_execution_pipeline.py +264 -0
  768. will/autonomy/proposal_executor.py +410 -0
  769. will/autonomy/proposal_mapper.py +187 -0
  770. will/autonomy/proposal_repository.py +118 -0
  771. will/autonomy/proposal_service.py +251 -0
  772. will/autonomy/proposal_state_manager.py +239 -0
  773. will/deciders/__init__.py +9 -0
  774. will/deciders/governance_decider.py +207 -0
  775. will/governance/__init__.py +13 -0
  776. will/governance/audit_remediation_runner.py +197 -0
  777. will/governance/audit_runner.py +368 -0
  778. will/governance/census_runner.py +278 -0
  779. will/governance/coverage_runner.py +489 -0
  780. will/governance/daemon_runner.py +164 -0
  781. will/governance/fix_runner.py +693 -0
  782. will/governance/inspect_runner.py +521 -0
  783. will/governance/integrity_runner.py +66 -0
  784. will/governance/lint_runner.py +93 -0
  785. will/governance/refactor_runner.py +372 -0
  786. will/governance/sync_runner.py +186 -0
  787. will/interpreters/__init__.py +44 -0
  788. will/interpreters/cli_args_interpreter.py +106 -0
  789. will/interpreters/natural_language_interpreter.py +276 -0
  790. will/interpreters/request_interpreter.py +126 -0
  791. will/lifecycle/__init__.py +12 -0
  792. will/lifecycle/integration_runner.py +54 -0
  793. will/maintenance/metadata_scribe_service.py +64 -0
  794. will/orchestration/__init__.py +4 -0
  795. will/orchestration/cognitive_service.py +185 -0
  796. will/orchestration/decision_tracer.py +257 -0
  797. will/orchestration/intent_alignment.py +59 -0
  798. will/orchestration/intent_guard.py +20 -0
  799. will/orchestration/phase_registry.py +92 -0
  800. will/orchestration/process_orchestrator.py +270 -0
  801. will/orchestration/prompt_pipeline.py +174 -0
  802. will/orchestration/remediation_orchestrator.py +292 -0
  803. will/orchestration/self_correction_engine.py +154 -0
  804. will/orchestration/validation_pipeline.py +45 -0
  805. will/orchestration/workflow_orchestrator.py +277 -0
  806. will/phases/__init__.py +24 -0
  807. will/phases/audit_phase.py +152 -0
  808. will/phases/canary/pytest_runner.py +156 -0
  809. will/phases/canary/result_builder.py +130 -0
  810. will/phases/canary/test_discovery.py +104 -0
  811. will/phases/canary_validation_phase.py +188 -0
  812. will/phases/code_generation/artifact_saver.py +175 -0
  813. will/phases/code_generation/code_sensor.py +117 -0
  814. will/phases/code_generation/file_path_extractor.py +53 -0
  815. will/phases/code_generation/work_directory_manager.py +83 -0
  816. will/phases/code_generation_phase.py +480 -0
  817. will/phases/execution_phase.py +179 -0
  818. will/phases/interpret_phase.py +266 -0
  819. will/phases/load_phase.py +102 -0
  820. will/phases/parse_phase.py +117 -0
  821. will/phases/planning_phase.py +182 -0
  822. will/phases/runtime_phase.py +112 -0
  823. will/phases/sandbox_validation_phase.py +130 -0
  824. will/phases/style_check_phase.py +209 -0
  825. will/phases/test_generation_phase.py +159 -0
  826. will/self_healing/alignment/persistence.py +53 -0
  827. will/self_healing/alignment/sandbox.py +51 -0
  828. will/self_healing/alignment/specialists.py +165 -0
  829. will/self_healing/alignment_orchestrator.py +140 -0
  830. will/self_healing/audit_remediation_service.py +199 -0
  831. will/self_healing/batch_remediation_service.py +280 -0
  832. will/self_healing/capability_reconciliation_service.py +96 -0
  833. will/self_healing/capability_tagging_service.py +224 -0
  834. will/self_healing/clarity_service.py +204 -0
  835. will/self_healing/complexity_service.py +260 -0
  836. will/self_healing/context_aware_test_generator.py +298 -0
  837. will/self_healing/coverage_remediation_service.py +97 -0
  838. will/self_healing/coverage_watcher.py +192 -0
  839. will/self_healing/enrichment_service.py +211 -0
  840. will/self_healing/linelength_service.py +168 -0
  841. will/self_healing/modularity_remediation_service.py +203 -0
  842. will/self_healing/remediation_evidence_writer.py +144 -0
  843. will/self_healing/remediation_executor.py +113 -0
  844. will/self_healing/remediation_interpretation/__init__.py +1 -0
  845. will/self_healing/remediation_interpretation/file_context_assembler.py +383 -0
  846. will/self_healing/remediation_interpretation/file_role_detector.py +599 -0
  847. will/self_healing/remediation_interpretation/finding_normalizer.py +221 -0
  848. will/self_healing/remediation_interpretation/models.py +198 -0
  849. will/self_healing/remediation_interpretation/reasoning_brief_builder.py +235 -0
  850. will/self_healing/remediation_interpretation/responsibility_extractor.py +421 -0
  851. will/self_healing/remediation_interpretation/service.py +202 -0
  852. will/self_healing/remediation_interpretation/strategy_catalog.py +252 -0
  853. will/self_healing/remediation_interpretation/strategy_selector.py +395 -0
  854. will/self_healing/remediation_pattern_matcher.py +126 -0
  855. will/self_healing/simple_test_generator.py +252 -0
  856. will/self_healing/single_file_remediation.py +137 -0
  857. will/self_healing/test_generation/automatic_repair.py +377 -0
  858. will/self_healing/test_generation/code_extractor.py +238 -0
  859. will/self_healing/test_generation/context_builder.py +140 -0
  860. will/self_healing/test_generation/executor.py +64 -0
  861. will/self_healing/test_generation/failure_parser.py +37 -0
  862. will/self_healing/test_generation/generation_workflow.py +140 -0
  863. will/self_healing/test_generation/generator.py +283 -0
  864. will/self_healing/test_generation/llm_correction.py +160 -0
  865. will/self_healing/test_generation/repair_workflow.py +128 -0
  866. will/self_healing/test_generation/single_test_fixer.py +77 -0
  867. will/self_healing/test_generation/test_extractor.py +50 -0
  868. will/self_healing/test_generation/test_scorer.py +53 -0
  869. will/self_healing/test_generation/test_validator.py +64 -0
  870. will/self_healing/test_generator.py +12 -0
  871. will/strategists/__init__.py +46 -0
  872. will/strategists/base_strategist.py +29 -0
  873. will/strategists/clarity_strategist.py +55 -0
  874. will/strategists/complexity_strategist.py +55 -0
  875. will/strategists/fix_strategist.py +467 -0
  876. will/strategists/sync_strategist.py +369 -0
  877. will/strategists/test_strategist.py +140 -0
  878. will/strategists/validation_strategist.py +315 -0
  879. will/test_generation/__init__.py +46 -0
  880. will/test_generation/adaptive_test_generator.py +123 -0
  881. will/test_generation/artifacts.py +102 -0
  882. will/test_generation/harness_detection.py +103 -0
  883. will/test_generation/helpers/__init__.py +14 -0
  884. will/test_generation/helpers/context_extractor.py +100 -0
  885. will/test_generation/helpers/test_executor.py +230 -0
  886. will/test_generation/llm_output.py +62 -0
  887. will/test_generation/models.py +25 -0
  888. will/test_generation/persistence.py +248 -0
  889. will/test_generation/phases/__init__.py +16 -0
  890. will/test_generation/phases/generation_phase.py +150 -0
  891. will/test_generation/phases/load_phase.py +53 -0
  892. will/test_generation/phases/parse_phase.py +50 -0
  893. will/test_generation/prompt_engine.py +123 -0
  894. will/test_generation/result_aggregator.py +73 -0
  895. will/test_generation/sandbox.py +203 -0
  896. will/test_generation/strategy_link.py +56 -0
  897. will/test_generation/test_extractor.py +140 -0
  898. will/test_generation/validation.py +89 -0
  899. will/tools/__init__.py +13 -0
  900. will/tools/anchor_builder.py +111 -0
  901. will/tools/anchor_search.py +73 -0
  902. will/tools/anchors/discovery.py +55 -0
  903. will/tools/anchors/storage.py +32 -0
  904. will/tools/architectural_context_builder.py +94 -0
  905. will/tools/cognitive_toolbox.py +47 -0
  906. will/tools/context/code_snippet_extractor.py +83 -0
  907. will/tools/context/embedding_search.py +76 -0
  908. will/tools/context/formatter.py +87 -0
  909. will/tools/context/models.py +38 -0
  910. will/tools/context/query_builder.py +42 -0
  911. will/tools/context/retriever.py +182 -0
  912. will/tools/context/standards.py +53 -0
  913. will/tools/file_navigator.py +180 -0
  914. will/tools/layers.py +31 -0
  915. will/tools/module_anchor_generator.py +137 -0
  916. will/tools/module_descriptor.py +154 -0
  917. will/tools/policy_vectorizer.py +184 -0
  918. will/tools/symbol_finder.py +188 -0
  919. will/tools/tool_generator.py +103 -0
  920. will/workers/audit_ingest_worker.py +207 -0
  921. will/workers/audit_violation_filter.py +108 -0
  922. will/workers/audit_violation_normalizer.py +108 -0
  923. will/workers/audit_violation_sensor.py +370 -0
  924. will/workers/blackboard_shop_manager.py +280 -0
  925. will/workers/capability_tagger.py +153 -0
  926. will/workers/circuit_breaker.py +335 -0
  927. will/workers/coherence_sensor.py +212 -0
  928. will/workers/commit_reachability_auditor.py +135 -0
  929. will/workers/db_sync_worker.py +96 -0
  930. will/workers/governance_embedding/__init__.py +9 -0
  931. will/workers/governance_embedding/governance_embedder_worker.py +189 -0
  932. will/workers/intent_inspector.py +599 -0
  933. will/workers/observer_worker.py +158 -0
  934. will/workers/prompt_extractor_worker.py +241 -0
  935. will/workers/proposal_consumer_effects.py +216 -0
  936. will/workers/proposal_consumer_revival.py +131 -0
  937. will/workers/proposal_consumer_worker.py +271 -0
  938. will/workers/proposal_pipeline_shop_manager.py +273 -0
  939. will/workers/repo_crawler.py +171 -0
  940. will/workers/repo_embedding/__init__.py +18 -0
  941. will/workers/repo_embedding/helpers.py +245 -0
  942. will/workers/repo_embedding/repo_embedder_workers.py +163 -0
  943. will/workers/test_coverage_sensor.py +208 -0
  944. will/workers/test_remediator/__init__.py +12 -0
  945. will/workers/test_remediator/_operations.py +295 -0
  946. will/workers/test_remediator/worker.py +187 -0
  947. will/workers/test_runner_sensor.py +430 -0
  948. will/workers/violation_executor.py +496 -0
  949. will/workers/violation_remediator.py +394 -0
  950. will/workers/violation_remediator_blackboard.py +225 -0
  951. will/workers/violation_remediator_body/__init__.py +12 -0
  952. will/workers/violation_remediator_body/blackboard.py +139 -0
  953. will/workers/violation_remediator_body/ceremony.py +154 -0
  954. will/workers/violation_remediator_body/context.py +70 -0
  955. will/workers/violation_remediator_body/llm.py +112 -0
  956. will/workers/violation_remediator_body/models.py +35 -0
  957. will/workers/violation_remediator_body/worker.py +518 -0
  958. will/workers/violation_remediator_proposal.py +328 -0
  959. will/workers/worker_shop_manager.py +244 -0
  960. will/workflows/__init__.py +23 -0
  961. will/workflows/dev_sync_reporter.py +274 -0
  962. will/workflows/dev_sync_workflow.py +118 -0
@@ -0,0 +1,208 @@
1
+ # src/cli/logic/refusal_inspect_logic.py
2
+ """
3
+ Logic for inspecting constitutional refusals.
4
+
5
+ Provides rich terminal output for:
6
+ - Recent refusals with filtering
7
+ - Refusal statistics and trends
8
+ - Constitutional compliance analysis
9
+
10
+ Used by: `core-admin inspect refusals` command
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from rich.console import Console
16
+ from rich.panel import Panel
17
+ from rich.table import Table
18
+
19
+ from body.infrastructure.repositories.refusal_repository import RefusalRepository
20
+ from shared.infrastructure.intent.operational_config import load_operational_config
21
+
22
+
23
+ console = Console()
24
+
25
+ _CFG = load_operational_config().misc
26
+
27
+
28
+ # ID: 4b4da583-c2ba-43ad-a249-720128871385
29
+ async def show_recent_refusals(
30
+ limit: int = _CFG.refusal_inspect_default_limit,
31
+ refusal_type: str | None = None,
32
+ component: str | None = None,
33
+ details: bool = False,
34
+ ) -> None:
35
+ """
36
+ Show recent refusals with optional filtering.
37
+
38
+ Args:
39
+ limit: Maximum records to show
40
+ refusal_type: Filter by type (boundary, confidence, etc.)
41
+ component: Filter by component
42
+ details: Show full details
43
+ """
44
+ repo = RefusalRepository()
45
+ refusals = await repo.get_recent(
46
+ limit=limit, refusal_type=refusal_type, component_id=component
47
+ )
48
+ if not refusals:
49
+ console.print("[yellow]No refusals found matching criteria[/yellow]")
50
+ return
51
+ table = Table(title=f"Recent Refusals ({len(refusals)})")
52
+ table.add_column("Type", style="cyan")
53
+ table.add_column("Component", style="green")
54
+ table.add_column("Phase", style="blue")
55
+ table.add_column("Confidence", justify="right")
56
+ table.add_column("Time", style="dim")
57
+ for refusal in refusals:
58
+ confidence_str = f"{refusal.confidence:.0%}" if refusal.confidence else "N/A"
59
+ table.add_row(
60
+ refusal.refusal_type,
61
+ refusal.component_id,
62
+ refusal.phase,
63
+ confidence_str,
64
+ refusal.created_at.strftime("%Y-%m-%d %H:%M:%S"),
65
+ )
66
+ console.print(table)
67
+ if details and refusals:
68
+ console.print("\n[bold]Most Recent Refusal Details:[/bold]")
69
+ _show_refusal_details(refusals[0])
70
+
71
+
72
+ def _show_refusal_details(refusal) -> None:
73
+ """Show detailed information about a single refusal."""
74
+ details = []
75
+ details.append(f"[bold cyan]Type:[/bold cyan] {refusal.refusal_type}")
76
+ details.append(f"[bold cyan]Component:[/bold cyan] {refusal.component_id}")
77
+ details.append(f"[bold cyan]Phase:[/bold cyan] {refusal.phase}")
78
+ details.append("")
79
+ details.append("[bold yellow]Reason:[/bold yellow]")
80
+ details.append(f" {refusal.reason}")
81
+ details.append("")
82
+ details.append("[bold green]Suggested Action:[/bold green]")
83
+ details.append(f" {refusal.suggested_action}")
84
+ details.append("")
85
+ if refusal.original_request:
86
+ details.append("[bold]Original Request:[/bold]")
87
+ request = refusal.original_request
88
+ if len(request) > 200:
89
+ request = request[:200] + "..."
90
+ details.append(f" {request}")
91
+ details.append("")
92
+ if refusal.context_data:
93
+ details.append("[bold]Context:[/bold]")
94
+ for key, value in refusal.context_data.items():
95
+ details.append(f" {key}: {value}")
96
+ details.append("")
97
+ details.append(f"[dim]Confidence: {refusal.confidence:.2f}[/dim]")
98
+ details.append(f"[dim]Time: {refusal.created_at}[/dim]")
99
+ if refusal.session_id:
100
+ details.append(f"[dim]Session: {refusal.session_id}[/dim]")
101
+ panel = Panel(
102
+ "\n".join(details), title=f"Refusal {str(refusal.id)[:8]}", border_style="cyan"
103
+ )
104
+ console.print(panel)
105
+
106
+
107
+ # ID: 6ed8fe95-3088-46bb-87ce-343001399035
108
+ async def show_refusal_statistics(days: int = 7) -> None:
109
+ """
110
+ Show refusal statistics and trends.
111
+
112
+ Args:
113
+ days: Number of days to analyze
114
+ """
115
+ repo = RefusalRepository()
116
+ stats = await repo.get_statistics(days=days)
117
+ if stats["total_refusals"] == 0:
118
+ console.print(f"[yellow]No refusals recorded in the last {days} days[/yellow]")
119
+ return
120
+ console.print(f"\n[bold]Refusal Statistics (Last {days} Days)[/bold]")
121
+ console.print(f"Total Refusals: {stats['total_refusals']}")
122
+ console.print(f"Average Confidence: {stats['avg_confidence']}\n")
123
+ if stats["by_type"]:
124
+ type_table = Table(title="Refusals by Type")
125
+ type_table.add_column("Type", style="cyan")
126
+ type_table.add_column("Count", justify="right")
127
+ type_table.add_column("Percentage", justify="right")
128
+ total = stats["total_refusals"]
129
+ for refusal_type, count in sorted(
130
+ stats["by_type"].items(), key=lambda x: x[1], reverse=True
131
+ ):
132
+ percentage = count / total * 100
133
+ type_table.add_row(refusal_type, str(count), f"{percentage:.1f}%")
134
+ console.print(type_table)
135
+ if stats["by_component"]:
136
+ console.print()
137
+ comp_table = Table(title="Refusals by Component")
138
+ comp_table.add_column("Component", style="green")
139
+ comp_table.add_column("Count", justify="right")
140
+ comp_table.add_column("Percentage", justify="right")
141
+ total = stats["total_refusals"]
142
+ for component, count in sorted(
143
+ stats["by_component"].items(), key=lambda x: x[1], reverse=True
144
+ ):
145
+ percentage = count / total * 100
146
+ comp_table.add_row(component, str(count), f"{percentage:.1f}%")
147
+ console.print(comp_table)
148
+ if stats["by_phase"]:
149
+ console.print()
150
+ phase_table = Table(title="Refusals by Phase")
151
+ phase_table.add_column("Phase", style="blue")
152
+ phase_table.add_column("Count", justify="right")
153
+ phase_table.add_column("Percentage", justify="right")
154
+ total = stats["total_refusals"]
155
+ for phase, count in sorted(
156
+ stats["by_phase"].items(), key=lambda x: x[1], reverse=True
157
+ ):
158
+ percentage = count / total * 100
159
+ phase_table.add_row(phase, str(count), f"{percentage:.1f}%")
160
+ console.print(phase_table)
161
+
162
+
163
+ # ID: 89e49163-1450-4c3f-85b4-8cdf47b53c37
164
+ async def show_refusals_by_type(
165
+ refusal_type: str, limit: int = _CFG.refusal_inspect_by_type_limit
166
+ ) -> None:
167
+ """
168
+ Show refusals of a specific type.
169
+
170
+ Args:
171
+ refusal_type: Type to filter (boundary, confidence, etc.)
172
+ limit: Maximum records to show
173
+ """
174
+ repo = RefusalRepository()
175
+ refusals = await repo.get_by_type(refusal_type, limit=limit)
176
+ if not refusals:
177
+ console.print(f"[yellow]No refusals found of type: {refusal_type}[/yellow]")
178
+ return
179
+ console.print(
180
+ f"\n[bold]{refusal_type.capitalize()} Refusals ({len(refusals)})[/bold]\n"
181
+ )
182
+ for i, refusal in enumerate(refusals, 1):
183
+ console.print(f"[cyan]{i}. {refusal.component_id}[/cyan]")
184
+ console.print(f" Phase: {refusal.phase}")
185
+ console.print(f" Reason: {refusal.reason[:100]}...")
186
+ console.print(f" Time: {refusal.created_at.strftime('%Y-%m-%d %H:%M:%S')}")
187
+ console.print()
188
+
189
+
190
+ # ID: c7576fa4-ec2e-46ba-89e4-feeab36ee0dc
191
+ async def show_refusals_by_session(session_id: str) -> None:
192
+ """
193
+ Show all refusals for a specific decision trace session.
194
+
195
+ Args:
196
+ session_id: Decision trace session ID
197
+ """
198
+ repo = RefusalRepository()
199
+ refusals = await repo.get_by_session(session_id)
200
+ if not refusals:
201
+ console.print(f"[yellow]No refusals found for session: {session_id}[/yellow]")
202
+ return
203
+ console.print(
204
+ f"\n[bold]Refusals in Session {session_id} ({len(refusals)})[/bold]\n"
205
+ )
206
+ for refusal in refusals:
207
+ _show_refusal_details(refusal)
208
+ console.print()
cli/logic/report.py ADDED
@@ -0,0 +1,47 @@
1
+ # src/cli/logic/report.py
2
+ """
3
+ Provides functionality for the report module.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import typer
9
+ from sqlalchemy import text
10
+
11
+ from shared.infrastructure.database.session_manager import get_session
12
+
13
+
14
+ # ID: 27a79c8d-285f-4e79-8de9-a4a5cba424d4
15
+ async def report() -> None:
16
+ """Summary by source (count, pass rate, avg score)."""
17
+
18
+ stmt = text(
19
+ """
20
+ select
21
+ source,
22
+ count(*) as total,
23
+ sum(case when verdict = 'PASS' then 1 else 0 end) as passed_count,
24
+ round(avg(score)::numeric, 3) as avg_score
25
+ from core.audit_runs
26
+ where verdict <> 'pending'
27
+ group by source
28
+ order by source
29
+ """
30
+ )
31
+
32
+ async with get_session() as session:
33
+ result = await session.execute(stmt)
34
+ rows = result.all()
35
+
36
+ if not rows:
37
+ typer.echo("— no data —")
38
+ return
39
+
40
+ typer.echo("source total passed pass_rate avg_score")
41
+ for r in rows:
42
+ pass_rate = (r.passed_count / r.total) * 100.0 if r.total else 0.0
43
+ avg = f"{float(r.avg_score):>8.3f}" if r.avg_score is not None else " — "
44
+ typer.echo(
45
+ f"{r.source:<7} {r.total:>5} {r.passed_count:>6} "
46
+ f"{pass_rate:>6.1f}% {avg}"
47
+ )
cli/logic/status.py ADDED
@@ -0,0 +1,47 @@
1
+ # src/cli/logic/status.py
2
+ """
3
+ Diagnostic logic for 'core-admin inspect status'.
4
+
5
+ Shows DB connectivity and migration status.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from shared.infrastructure.repositories.db.status_service import StatusReport
11
+ from shared.infrastructure.repositories.db.status_service import status as db_status
12
+
13
+
14
+ async def _status_impl() -> None:
15
+ """
16
+ Render a human-readable DB status report to the console.
17
+
18
+ This is an internal helper used by CLI wrappers (e.g. `inspect status`,
19
+ `init status`). It delegates the actual health/ledger logic to the
20
+ DB status service in `services.repositories.db.status_service`.
21
+ """
22
+ # Use the status-report helper so tests can patch it and governance
23
+ # can reason about a single place where DB status is obtained.
24
+ report: StatusReport = await _get_status_report()
25
+
26
+ # FUTURE: This function should not render UI in a Body module.
27
+ # CLI wrappers should handle rendering. For now, we keep it as a no-op.
28
+ pass
29
+
30
+
31
+ async def _get_status_report() -> StatusReport:
32
+ """
33
+ Internal helper used by the admin CLI and tests.
34
+
35
+ Returns the current database status report without rendering it. The
36
+ CLI command is responsible for turning this into human-readable output.
37
+ """
38
+ return await db_status()
39
+
40
+
41
+ # NOTE:
42
+ # We intentionally expose `get_status_report` only as an alias to the
43
+ # private `_get_status_report` function. This keeps tests and callers
44
+ # able to import and await `get_status_report`, but the symbol graph
45
+ # only sees the underlying `_get_status_report` function as a single
46
+ # (private) implementation detail, avoiding orphaned public logic.
47
+ get_status_report = _get_status_report
@@ -0,0 +1,77 @@
1
+ # src/cli/logic/symbol_drift.py
2
+
3
+ """
4
+ Implements the `inspect symbol-drift` command, a diagnostic tool to detect
5
+ discrepancies between symbols on the filesystem and those in the database.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import asyncio
11
+
12
+ from sqlalchemy import text
13
+
14
+ from body.introspection.sync_service import SymbolScanner
15
+ from shared.infrastructure.bootstrap_registry import bootstrap_registry
16
+ from shared.infrastructure.database.session_manager import get_session
17
+ from shared.logger import getLogger
18
+
19
+
20
+ logger = getLogger(__name__)
21
+
22
+
23
+ async def _run_drift_analysis():
24
+ """
25
+ The core logic that scans source, queries the DB, and compares the results.
26
+ """
27
+ logger.info("Running Symbol Drift Analysis...")
28
+ logger.info("Scanning 'src/' directory for all public symbols...")
29
+ scanner = SymbolScanner(repo_root=bootstrap_registry.get_repo_path())
30
+ code_symbols = await asyncio.to_thread(scanner.scan)
31
+ code_symbol_paths = {s["symbol_path"] for s in code_symbols}
32
+ logger.info("Found %s symbols in source code.", len(code_symbol_paths))
33
+ logger.info("Querying database for all registered symbols...")
34
+ db_symbol_paths = set()
35
+ try:
36
+ async with get_session() as session:
37
+ result = await session.execute(text("SELECT symbol_path FROM core.symbols"))
38
+ db_symbol_paths = {row[0] for row in result}
39
+ logger.info("Found %s symbols in the database.", len(db_symbol_paths))
40
+ except Exception as e:
41
+ logger.error("Database query failed: %s", e)
42
+ logger.info("Please ensure your database is running and accessible.")
43
+ return
44
+ ghost_symbols_in_db = sorted(list(db_symbol_paths - code_symbol_paths))
45
+ new_symbols_in_code = sorted(list(code_symbol_paths - db_symbol_paths))
46
+ logger.info("--- Analysis Complete ---")
47
+ if not ghost_symbols_in_db and (not new_symbols_in_code):
48
+ logger.info(
49
+ "No drift detected. The database is perfectly synchronized with the source code."
50
+ )
51
+ return
52
+ if ghost_symbols_in_db:
53
+ logger.warning("Found %s Ghost Symbols in Database", len(ghost_symbols_in_db))
54
+ logger.warning(
55
+ "These symbols exist in the DB but NOT in the source code. They should be pruned."
56
+ )
57
+ for symbol in ghost_symbols_in_db:
58
+ logger.warning(" - %s", symbol)
59
+ logger.info(
60
+ "Diagnosis: The `sync-knowledge` command is failing to delete obsolete symbols from the database."
61
+ )
62
+ if new_symbols_in_code:
63
+ logger.info("Found %s New Symbols in Source Code", len(new_symbols_in_code))
64
+ logger.info(
65
+ "These symbols exist in the code but NOT in the DB. They need to be synchronized."
66
+ )
67
+ for symbol in new_symbols_in_code:
68
+ logger.info(" - %s", symbol)
69
+ logger.info(
70
+ "Next Step: This report confirms a bug in the sync logic. Please proceed with fixing the `run_sync_with_db` function."
71
+ )
72
+
73
+
74
+ # ID: 2ff57ea1-2b62-4c75-9586-10219c51ea13
75
+ async def inspect_symbol_drift():
76
+ """Typer wrapper for the async drift analysis logic."""
77
+ await _run_drift_analysis()
cli/logic/sync.py ADDED
@@ -0,0 +1,48 @@
1
+ # src/cli/logic/sync.py
2
+ """
3
+ Headless logic for synchronizing the codebase state with the database.
4
+ Complies with body_contracts.json (no UI imports).
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from body.introspection.sync_service import run_sync_with_db
10
+ from shared.infrastructure.database.session_manager import get_session
11
+ from shared.logger import getLogger
12
+
13
+
14
+ logger = getLogger(__name__)
15
+
16
+
17
+ # ID: 26a3ed07-80bb-4a78-a05d-862cae7968e3
18
+ async def sync_knowledge_base(write: bool = False) -> dict:
19
+ """
20
+ Scans the codebase and syncs all symbols and their IDs to the database.
21
+
22
+ Returns:
23
+ dict: Sync statistics.
24
+ """
25
+ logger.info("🚀 Synchronizing codebase state with database...")
26
+
27
+ if not write:
28
+ logger.info("DRY-RUN: Knowledge sync requires write=True to persist changes.")
29
+ return {
30
+ "status": "dry_run",
31
+ "scanned": 0,
32
+ "inserted": 0,
33
+ "updated": 0,
34
+ "deleted": 0,
35
+ }
36
+
37
+ async with get_session() as session:
38
+ # run_sync_with_db returns an ActionResult; we extract the data for the caller
39
+ result = await run_sync_with_db(session)
40
+ stats = result.data
41
+
42
+ logger.info("--- Knowledge Sync Summary ---")
43
+ logger.info(" Scanned from code: %s symbols", stats.get("scanned", 0))
44
+ logger.info(" New symbols added: %s", stats.get("inserted", 0))
45
+ logger.info(" Existing symbols updated: %s", stats.get("updated", 0))
46
+ logger.info(" Obsolete symbols removed: %s", stats.get("deleted", 0))
47
+
48
+ return stats
@@ -0,0 +1,72 @@
1
+ # src/cli/logic/sync_domains.py
2
+ """
3
+ CLI command to synchronize the canonical list of domains to the database.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import typer
9
+ import yaml
10
+ from sqlalchemy import text
11
+
12
+ from shared.context import CoreContext
13
+ from shared.infrastructure.database.session_manager import get_session
14
+ from shared.logger import getLogger
15
+
16
+
17
+ logger = getLogger(__name__)
18
+
19
+
20
+ async def _sync_domains(repo_root):
21
+ """
22
+ Reads the canonical domains.yaml file and upserts them into the core.domains table.
23
+ """
24
+ domains_path = repo_root / "var" / "mind" / "knowledge" / "domains.yaml"
25
+ if not domains_path.exists():
26
+ logger.error("Constitutional domains file not found at %s", domains_path)
27
+ raise typer.Exit(code=1)
28
+
29
+ content = yaml.safe_load(domains_path.read_text("utf-8"))
30
+ domains_to_sync = content.get("domains", [])
31
+
32
+ if not domains_to_sync:
33
+ logger.warning("No domains found in domains.yaml. Nothing to sync.")
34
+ return
35
+
36
+ upserted_count = 0
37
+ async with get_session() as session:
38
+ async with session.begin(): # Start a transaction
39
+ for domain_data in domains_to_sync:
40
+ name = domain_data.get("name")
41
+ description = domain_data.get("description", "")
42
+ if not name:
43
+ continue
44
+
45
+ stmt = text(
46
+ """
47
+ INSERT INTO core.domains (key, title, description, status)
48
+ VALUES (:key, :title, :desc, 'active')
49
+ ON CONFLICT (key) DO UPDATE SET
50
+ title = EXCLUDED.title,
51
+ description = EXCLUDED.description;
52
+ """
53
+ )
54
+
55
+ await session.execute(
56
+ stmt,
57
+ {
58
+ "key": name,
59
+ "title": name.replace("_", " ").title(),
60
+ "desc": description,
61
+ },
62
+ )
63
+ upserted_count += 1
64
+
65
+ logger.info("Successfully synced %s domains to the database.", upserted_count)
66
+
67
+
68
+ # ID: 5bee5341-7f72-430e-b310-f174af37de20
69
+ async def sync_domains(ctx: typer.Context):
70
+ """Synchronizes the canonical list of domains from .intent/knowledge/domains.yaml to the database."""
71
+ core_context: CoreContext = ctx.obj
72
+ await _sync_domains(core_context.git_service.repo_path)
@@ -0,0 +1,31 @@
1
+ # src/cli/logic/sync_manifest.py
2
+ """
3
+ LEGACY / DEPRECATED — DO NOT USE.
4
+
5
+ This module previously synchronized a legacy project manifest under `.intent/`.
6
+ That behavior is constitutionally invalid:
7
+
8
+ - `.intent/` is READ-ONLY for BODY.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import typer
14
+
15
+ from shared.logger import getLogger
16
+
17
+
18
+ logger = getLogger(__name__)
19
+
20
+
21
+ # ID: fd8e5164-0a37-45e7-8701-7a1935d99d88
22
+ async def sync_manifest() -> None:
23
+ """
24
+ Disabled operation: BODY may not write to `.intent/`.
25
+ """
26
+ logger.error(
27
+ "sync-manifest is deprecated and disabled: "
28
+ "BODY may not write to `.intent/`. "
29
+ "Migrate any consumers to SSOT (Postgres)."
30
+ )
31
+ raise typer.Exit(code=1)
cli/logic/tools.py ADDED
@@ -0,0 +1,133 @@
1
+ # src/cli/logic/tools.py
2
+ """
3
+ Registers a 'tools' command group for powerful, operator-focused maintenance tasks.
4
+ This is the new, governed home for logic from standalone scripts.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import sys
10
+ from pathlib import Path
11
+
12
+ import typer
13
+
14
+ from body.maintenance.maintenance_service import rewire_imports
15
+
16
+ # Import the moved script module
17
+ from body.maintenance.scripts import context_export
18
+ from shared.cli.command_meta import (
19
+ CommandBehavior,
20
+ CommandLayer,
21
+ command_meta,
22
+ ) # Add this import
23
+ from shared.logger import getLogger
24
+
25
+
26
+ logger = getLogger(__name__)
27
+
28
+ tools_app = typer.Typer(
29
+ help="Governed, operator-focused maintenance and refactoring tools."
30
+ )
31
+
32
+
33
+ @tools_app.command(
34
+ "rewire-imports",
35
+ help="Run after major refactoring to fix all Python import statements across 'src/'.",
36
+ )
37
+ @command_meta(
38
+ canonical_name="imports.rewire",
39
+ behavior=CommandBehavior.MUTATE,
40
+ layer=CommandLayer.BODY,
41
+ summary="Automatically fixes Python import statements across the codebase after major refactoring.",
42
+ dangerous=True,
43
+ )
44
+ # ID: 85a8bd02-dba4-4aab-9329-c36cc60a121a
45
+ def rewire_imports_cli(
46
+ write: bool = typer.Option(
47
+ False, "--write", help="Apply the changes to the files."
48
+ ),
49
+ ):
50
+ """
51
+ CLI wrapper for the import rewiring service.
52
+ """
53
+ dry_run = not write
54
+ logger.info("Starting architectural import re-wiring script...")
55
+ if dry_run:
56
+ logger.info("DRY RUN MODE: No files will be changed.")
57
+ else:
58
+ logger.info("WRITE MODE: Files will be modified.")
59
+
60
+ # REFACTORED: Removed direct settings import
61
+ from body.infrastructure.bootstrap import create_core_context
62
+ from body.services.service_registry import service_registry
63
+ from shared.infrastructure.storage.file_handler import FileHandler
64
+
65
+ context = create_core_context(service_registry)
66
+ file_handler = FileHandler(str(context.git_service.repo_path))
67
+ total_changes = rewire_imports(context, file_handler, dry_run=dry_run)
68
+
69
+ logger.info("--- Re-wiring Complete ---")
70
+ if dry_run:
71
+ logger.info(
72
+ "DRY RUN: Found %s potential import changes to make.", total_changes
73
+ )
74
+ logger.info("Run with '--write' to apply them.")
75
+ else:
76
+ logger.info("APPLIED: Made %s import changes.", total_changes)
77
+
78
+ logger.info("--- NEXT STEPS ---")
79
+ logger.info(
80
+ "1. VERIFY: Run 'make format' and then 'make check' to ensure compliance."
81
+ )
82
+
83
+
84
+ @tools_app.command("export-context")
85
+ @command_meta(
86
+ canonical_name="context.export",
87
+ behavior=CommandBehavior.TRANSFORM,
88
+ layer=CommandLayer.BODY,
89
+ summary="Exports a complete operational snapshot including Mind, Body, State, and Vector data.",
90
+ dangerous=True,
91
+ )
92
+ # ID: a09e7c1d-791a-4132-bd51-146e468b8d89
93
+ def export_context_cmd(
94
+ output_dir: Path = typer.Option(
95
+ Path("./scripts/exports"),
96
+ "--output-dir",
97
+ help="Directory to write export bundle into",
98
+ ),
99
+ db_url: str = typer.Option(None, "--db-url", help="Database URL override"),
100
+ qdrant_url: str = typer.Option(None, "--qdrant-url", help="Qdrant URL override"),
101
+ qdrant_collection: str = typer.Option(
102
+ None, "--qdrant-collection", help="Qdrant collection override"
103
+ ),
104
+ ):
105
+ """
106
+ Export a complete operational snapshot (Mind/Body/State/Vectors).
107
+ Wraps body.maintenance.scripts.context_export.
108
+ """
109
+ # Prepare arguments to look like sys.argv for the existing script logic
110
+ # This avoids rewriting the complex argparse logic inside the script for now.
111
+ args = ["context_export", "--output-dir", str(output_dir)]
112
+
113
+ if db_url:
114
+ args.extend(["--db-url", db_url])
115
+ if qdrant_url:
116
+ args.extend(["--qdrant-url", qdrant_url])
117
+ if qdrant_collection:
118
+ args.extend(["--qdrant-collection", qdrant_collection])
119
+
120
+ # Patch sys.argv temporarily to invoke the script's main
121
+ original_argv = sys.argv
122
+ try:
123
+ sys.argv = args
124
+ context_export.main()
125
+ except SystemExit as e:
126
+ # The script calls sys.exit(), we catch it to prevent CLI crash
127
+ if e.code != 0:
128
+ raise typer.Exit(e.code)
129
+ except Exception as e:
130
+ logger.error("Export failed: %s", e)
131
+ raise typer.Exit(1)
132
+ finally:
133
+ sys.argv = original_argv