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,131 @@
1
+ # src/body/maintenance/memory_cleanup_service.py
2
+
3
+ """
4
+ Memory cleanup service - business logic for retention policies.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from datetime import datetime, timedelta
10
+
11
+ from sqlalchemy import text
12
+
13
+ from shared.action_types import ActionImpact, ActionResult
14
+ from shared.atomic_action import atomic_action
15
+ from shared.infrastructure.intent.operational_config import load_operational_config
16
+ from shared.infrastructure.repositories.memory_repository import MemoryRepository
17
+ from shared.logger import getLogger
18
+
19
+
20
+ logger = getLogger(__name__)
21
+
22
+ _CFG_MEM = load_operational_config().memory
23
+
24
+
25
+ # ID: f81e034c-23d7-44d5-b7df-58c5a14e06e0
26
+ class MemoryCleanupService:
27
+ """
28
+ Implements retention policies for agent memory and action ledgers.
29
+ """
30
+
31
+ def __init__(self, session):
32
+ self.session = session
33
+ self.repository = MemoryRepository(session)
34
+
35
+ @atomic_action(
36
+ action_id="cleanup.agent_memory",
37
+ intent="Execute memory retention policy",
38
+ impact=ActionImpact.WRITE_DATA,
39
+ policies=["atomic_actions"],
40
+ )
41
+ # ID: e9fa0b0e-2054-41ab-bd37-277efa5992c6
42
+ async def cleanup_old_memories(
43
+ self,
44
+ days_to_keep_episodes: int = _CFG_MEM.episode_retention_days,
45
+ days_to_keep_reflections: int = _CFG_MEM.reflection_retention_days,
46
+ dry_run: bool = True,
47
+ **kwargs,
48
+ ) -> ActionResult:
49
+ """
50
+ Execute agent memory retention policy.
51
+ """
52
+ cutoff_episodes = datetime.utcnow() - timedelta(days=days_to_keep_episodes)
53
+ cutoff_reflections = datetime.utcnow() - timedelta(
54
+ days=days_to_keep_reflections
55
+ )
56
+
57
+ try:
58
+ if dry_run:
59
+ episodes_count = await self.repository.count_episodes_older_than(
60
+ cutoff_episodes
61
+ )
62
+ reflections_count = await self.repository.count_reflections_older_than(
63
+ cutoff_reflections
64
+ )
65
+ else:
66
+ episodes_count = await self.repository.delete_old_episodes(
67
+ cutoff_episodes
68
+ )
69
+ reflections_count = await self.repository.delete_old_reflections(
70
+ cutoff_reflections
71
+ )
72
+
73
+ return ActionResult(
74
+ action_id="cleanup.agent_memory",
75
+ ok=True,
76
+ data={
77
+ "episodes_deleted": episodes_count,
78
+ "reflections_deleted": reflections_count,
79
+ "dry_run": dry_run,
80
+ },
81
+ )
82
+
83
+ except Exception as e:
84
+ logger.error("Memory cleanup failed: %s", e)
85
+ return ActionResult(
86
+ action_id="cleanup.agent_memory", ok=False, data={"error": str(e)}
87
+ )
88
+
89
+ @atomic_action(
90
+ action_id="cleanup.action_results",
91
+ intent="Prune old operational action results",
92
+ impact=ActionImpact.WRITE_DATA,
93
+ policies=["atomic_actions"],
94
+ )
95
+ # ID: 5e76777a-ca1d-424f-9853-acbee0967c6e
96
+ async def cleanup_action_results(
97
+ self, days_to_keep: int = 7, dry_run: bool = True, **kwargs
98
+ ) -> ActionResult:
99
+ """
100
+ Removes old records from core.action_results to keep the ledger relevant.
101
+ """
102
+ cutoff = datetime.utcnow() - timedelta(days=days_to_keep)
103
+
104
+ try:
105
+ if dry_run:
106
+ query = text(
107
+ "SELECT COUNT(*) FROM core.action_results WHERE created_at < :cutoff"
108
+ )
109
+ res = await self.session.execute(query, {"cutoff": cutoff})
110
+ count = res.scalar_one()
111
+ else:
112
+ query = text(
113
+ "DELETE FROM core.action_results WHERE created_at < :cutoff"
114
+ )
115
+ res = await self.session.execute(query, {"cutoff": cutoff})
116
+ count = res.rowcount
117
+
118
+ return ActionResult(
119
+ action_id="cleanup.action_results",
120
+ ok=True,
121
+ data={
122
+ "records_processed": count,
123
+ "dry_run": dry_run,
124
+ "retention_days": days_to_keep,
125
+ },
126
+ )
127
+ except Exception as e:
128
+ logger.error("Action results cleanup failed: %s", e)
129
+ return ActionResult(
130
+ action_id="cleanup.action_results", ok=False, data={"error": str(e)}
131
+ )
@@ -0,0 +1,274 @@
1
+ # src/body/maintenance/refactor_settings_access.py
2
+
3
+ """
4
+ Constitutional Settings Access Refactoring
5
+
6
+ Automates migration from scattered `settings` imports to DI via CoreContext.
7
+
8
+ Strategy:
9
+ 1. Detect direct settings imports in Mind/Will layers
10
+ 2. Add context parameter to constructors/functions
11
+ 3. Replace settings.X with context.X or receive via parameter
12
+ 4. Update callers to pass context
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import re
18
+ from dataclasses import dataclass
19
+ from pathlib import Path
20
+ from typing import Any
21
+
22
+ from shared.infrastructure.storage.file_handler import FileHandler
23
+ from shared.logger import getLogger
24
+
25
+
26
+ logger = getLogger(__name__)
27
+
28
+
29
+ @dataclass
30
+ # ID: 4147dd2f-0ad1-4c14-aba4-51556a918ae5
31
+ class SettingsUsage:
32
+ file_path: Path
33
+ import_line: int
34
+ usages: list[tuple[int, str]]
35
+ has_constructor: bool
36
+ constructor_line: int | None
37
+ is_typer_command: bool
38
+ function_def_line: int | None
39
+
40
+
41
+ @dataclass
42
+ # ID: 1a68f49a-0093-4e64-b46a-a0e98fbaf312
43
+ class RefactorPlan:
44
+ file_path: Path
45
+ remove_import: int
46
+ add_context_param: int | None
47
+ replacements: list[tuple[int, str, str]]
48
+ is_typer_command: bool
49
+
50
+
51
+ # ID: 8639661b-33ee-4e8a-8a99-4857139f0d19
52
+ class SettingsRefactorer:
53
+ SETTINGS_PATTERN = re.compile(r"from shared\.config import (?:settings|Settings)")
54
+ USAGE_PATTERN = re.compile(r"settings\.(\w+)")
55
+
56
+ def __init__(self, repo_path: Path, file_handler: FileHandler):
57
+ self.repo_path = repo_path
58
+ self.file_handler = file_handler
59
+
60
+ # ID: caee3565-c3a7-406c-bce1-2fadbc1f5c54
61
+ def analyze_file(self, file_path: Path) -> SettingsUsage | None:
62
+ try:
63
+ content = file_path.read_text()
64
+ lines = content.splitlines()
65
+ except Exception:
66
+ return None
67
+
68
+ # Find import
69
+ import_line = None
70
+ for i, line in enumerate(lines, 1):
71
+ if self.SETTINGS_PATTERN.search(line):
72
+ import_line = i
73
+ break
74
+ if not import_line:
75
+ return None
76
+
77
+ # Find usages
78
+ usages = []
79
+ for i, line in enumerate(lines, 1):
80
+ for match in self.USAGE_PATTERN.finditer(line):
81
+ attr = match.group(1)
82
+ usages.append((i, attr))
83
+
84
+ # Context detection
85
+ has_constructor, constructor_line = self._find_constructor(lines)
86
+ is_typer_command, func_line = self._find_typer_command(lines)
87
+
88
+ return SettingsUsage(
89
+ file_path=file_path,
90
+ import_line=import_line,
91
+ usages=usages,
92
+ has_constructor=has_constructor,
93
+ constructor_line=constructor_line,
94
+ is_typer_command=is_typer_command,
95
+ function_def_line=func_line,
96
+ )
97
+
98
+ def _find_constructor(self, lines: list[str]) -> tuple[bool, int | None]:
99
+ for i, line in enumerate(lines, 1):
100
+ if re.match(r"\s*def __init__\(", line):
101
+ return True, i
102
+ return False, None
103
+
104
+ def _find_typer_command(self, lines: list[str]) -> tuple[bool, int | None]:
105
+ for i, line in enumerate(lines, 1):
106
+ # Heuristic for Typer command
107
+ if "@app.command" in line or "@core_command" in line or "async def" in line:
108
+ if "ctx: typer.Context" in line or "ctx: Context" in line:
109
+ return True, i
110
+ return False, None
111
+
112
+ # ID: 5d655333-f3cc-4bf9-85ea-af221a58134f
113
+ def create_refactor_plan(self, usage: SettingsUsage) -> RefactorPlan:
114
+ replacements = []
115
+
116
+ # CLI Command Mapping (via ctx.obj)
117
+ CLI_MAP = {
118
+ "REPO_PATH": "core_context.git_service.repo_path",
119
+ "MIND": "core_context.path_resolver.intent_root",
120
+ "DATABASE_URL": "settings.DATABASE_URL", # Fallback, likely won't work perfectly
121
+ }
122
+
123
+ # Class/Func Mapping (via injected context)
124
+ CLASS_MAP = {
125
+ "REPO_PATH": "context.git_service.repo_path",
126
+ "MIND": "context.path_resolver.intent_root",
127
+ }
128
+
129
+ mapping = CLI_MAP if usage.is_typer_command else CLASS_MAP
130
+ prefix = "" if usage.is_typer_command else "context."
131
+
132
+ for line_num, attr in usage.usages:
133
+ old_expr = f"settings.{attr}"
134
+ # Default to accessing via settings property if not mapped
135
+ new_expr = mapping.get(attr, f"{prefix}settings.{attr}")
136
+ replacements.append((line_num, old_expr, new_expr))
137
+
138
+ add_at = None
139
+ if usage.has_constructor:
140
+ add_at = usage.constructor_line
141
+ elif not usage.is_typer_command:
142
+ # Add param to function if not a CLI command (which has ctx)
143
+ # Find first function
144
+ content = usage.file_path.read_text()
145
+ match = re.search(r"^def \w+\(", content, re.MULTILINE)
146
+ if match:
147
+ # Approximate line number calculation would be needed here
148
+ # For now we rely on constructor logic or manual fix for complex functions
149
+ pass
150
+
151
+ return RefactorPlan(
152
+ file_path=usage.file_path,
153
+ remove_import=usage.import_line,
154
+ add_context_param=add_at,
155
+ replacements=replacements,
156
+ is_typer_command=usage.is_typer_command,
157
+ )
158
+
159
+ # ID: d0a64412-9931-45af-b6fc-65356bf7b791
160
+ def apply_refactor(self, plan: RefactorPlan, dry_run: bool = True) -> bool:
161
+ try:
162
+ content = plan.file_path.read_text()
163
+ lines = content.splitlines()
164
+
165
+ # 1. Comment out import
166
+ lines[plan.remove_import - 1] = (
167
+ "# REFACTORED: Removed direct settings import"
168
+ )
169
+
170
+ # 2. Add Context extraction for CLI commands
171
+ if plan.is_typer_command:
172
+ # Heuristic: Find where to inject 'core_context = ctx.obj'
173
+ # Look for the function def line
174
+ for i, line in enumerate(lines):
175
+ if "def " in line and "ctx" in line:
176
+ # Insert initialization at start of function body
177
+ indent = " " # Assume 4 spaces
178
+ lines.insert(
179
+ i + 1, f"{indent}core_context: CoreContext = ctx.obj"
180
+ )
181
+ lines.insert(
182
+ i + 1, f"{indent}from shared.context import CoreContext"
183
+ ) # Lazy import
184
+ break
185
+
186
+ # 3. Apply Replacements
187
+ for line_num, old, new in plan.replacements:
188
+ # Adjust line num for inserted lines
189
+ # This is tricky without tracking offsets.
190
+ # Simplification: We scan for the content match.
191
+ for i, line in enumerate(lines):
192
+ if old in line:
193
+ lines[i] = line.replace(old, new)
194
+
195
+ new_content = "\n".join(lines) + "\n"
196
+
197
+ if dry_run:
198
+ logger.info("DRY RUN: Refactoring %s", plan.file_path)
199
+ return True
200
+
201
+ rel_path = str(plan.file_path.relative_to(self.repo_path))
202
+ self.file_handler.write_runtime_text(rel_path, new_content)
203
+ logger.info("✅ Refactored %s", rel_path)
204
+ return True
205
+
206
+ except Exception as e:
207
+ logger.error("Failed to refactor %s: %s", plan.file_path, e)
208
+ return False
209
+
210
+ # ID: 12bbf24c-c18b-4dec-b205-3c91acb7872f
211
+ def refactor_layer(self, layer: str, dry_run: bool = True) -> dict[str, Any]:
212
+ """Refactor all files in a layer (mind, will, body)."""
213
+ layer_path = self.repo_path / "src" / layer
214
+ if not layer_path.exists():
215
+ return {"error": f"Layer {layer} not found"}
216
+
217
+ results = {
218
+ "analyzed": 0,
219
+ "planned": 0,
220
+ "refactored": 0,
221
+ "failed": 0,
222
+ "files": [],
223
+ }
224
+
225
+ # Find all Python files
226
+ for py_file in layer_path.rglob("*.py"):
227
+ if "__pycache__" in str(py_file):
228
+ continue
229
+
230
+ results["analyzed"] += 1
231
+
232
+ # Analyze
233
+ usage = self.analyze_file(py_file)
234
+ if not usage:
235
+ continue
236
+
237
+ logger.info(
238
+ "Found settings usage in %s", py_file.relative_to(self.repo_path)
239
+ )
240
+ results["planned"] += 1
241
+
242
+ # Create plan
243
+ plan = self.create_refactor_plan(usage)
244
+
245
+ # Apply
246
+ if self.apply_refactor(plan, dry_run=dry_run):
247
+ results["refactored"] += 1
248
+ results["files"].append(str(py_file.relative_to(self.repo_path)))
249
+ else:
250
+ results["failed"] += 1
251
+
252
+ return results
253
+
254
+
255
+ # ID: e23d9e3e-fc3f-4818-880a-90118a32770d
256
+ async def refactor_settings_access(
257
+ repo_path: Path, layers: list[str] | None = None, dry_run: bool = True
258
+ ) -> dict[str, Any]:
259
+ if layers is None:
260
+ layers = ["body", "mind", "will"]
261
+
262
+ file_handler = FileHandler(str(repo_path))
263
+ refactorer = SettingsRefactorer(repo_path, file_handler)
264
+
265
+ # We iterate all layers now since we handle CLI commands
266
+ all_results = {}
267
+ for layer in layers:
268
+ # Custom logic to recursively find files
269
+ pass # (Reuse existing logic or standard glob)
270
+ # For brevity, reusing the class logic:
271
+ res = refactorer.refactor_layer(layer, dry_run)
272
+ all_results[layer] = res
273
+
274
+ return all_results
@@ -0,0 +1,5 @@
1
+ # src/body/maintenance/scripts/__init__.py
2
+
3
+ """Provides functionality for the __init__ module."""
4
+
5
+ from __future__ import annotations
@@ -0,0 +1,278 @@
1
+ # src/body/maintenance/scripts/context_export.py
2
+
3
+ """
4
+ Export a complete, compact operational snapshot of CORE.
5
+ Refactored to use canonical services (FileHandler, GitService, Settings).
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import ast
11
+ import asyncio
12
+ import dataclasses
13
+ import hashlib
14
+ import io
15
+ import json
16
+ import tarfile
17
+ import urllib.error
18
+ import urllib.parse
19
+ import urllib.request
20
+ from pathlib import Path
21
+ from typing import TYPE_CHECKING
22
+
23
+ from shared.infrastructure.git_service import GitService
24
+ from shared.infrastructure.intent.operational_config import load_operational_config
25
+ from shared.infrastructure.storage.file_handler import FileHandler
26
+ from shared.logger import getLogger
27
+ from shared.time import now_iso
28
+
29
+ if TYPE_CHECKING:
30
+ from shared.context import CoreContext
31
+
32
+
33
+ _CFG = load_operational_config().misc
34
+
35
+
36
+ logger = getLogger(__name__)
37
+
38
+
39
+ @dataclasses.dataclass
40
+ # ID: fc33426e-cb3d-461d-b20f-a02b90f2408f
41
+ class Symbol:
42
+ module: str
43
+ kind: str
44
+ name: str
45
+ lineno: int
46
+ signature: str
47
+ doc: str | None
48
+
49
+
50
+ # ---------------------------
51
+ # Helpers
52
+ # ---------------------------
53
+
54
+
55
+ # ID: 772bd5da-7fcf-4aa1-a23c-3d5889d0c149
56
+ def sha256_file(path: Path) -> str:
57
+ """Pure helper for file hashing."""
58
+ h = hashlib.sha256()
59
+ with open(path, "rb") as f:
60
+ for chunk in iter(lambda: f.read(1024 * 1024), b""):
61
+ h.update(chunk)
62
+ return h.hexdigest()
63
+
64
+
65
+ # ID: 377f784e-516c-404b-8b36-ccd4346d299f
66
+ def build_signature_from_ast(node: ast.AST) -> str:
67
+ """Pure helper for AST signature extraction."""
68
+ if not isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
69
+ return ""
70
+ args = [a.arg for a in node.args.args]
71
+ if node.args.vararg:
72
+ args.append("*" + node.args.vararg.arg)
73
+ for a in node.args.kwonlyargs:
74
+ args.append(a.arg + "=")
75
+ if node.args.kwarg:
76
+ args.append("**" + node.args.kwarg.arg)
77
+ return f"({', '.join(args)})"
78
+
79
+
80
+ # ---------------------------
81
+ # Governed Export Logic
82
+ # ---------------------------
83
+
84
+
85
+ # ID: 6c005976-a799-446d-aea4-2d04782c6b76
86
+ class ContextExporter:
87
+ """Orchestrates the system snapshot using governed services."""
88
+
89
+ def __init__(self, context: CoreContext, output_base: Path | None = None):
90
+ self.repo_root = context.git_service.repo_path
91
+ self._context = context
92
+ self.output_base = output_base or (self.repo_root / "var" / "exports")
93
+ self.timestamp = now_iso().replace(":", "-").split(".")[0]
94
+ self.export_rel_dir = f"var/exports/core_export_{self.timestamp}"
95
+
96
+ # Mutation surface
97
+ self.fh = FileHandler(str(self.repo_root))
98
+ self.git = GitService(self.repo_root)
99
+
100
+ # ID: 2f5bda9b-4da0-486d-8748-c2c0a75a42dc
101
+ async def run(self) -> str:
102
+ """Execute the full export pipeline."""
103
+ logger.info("🚀 Starting CORE Context Export...")
104
+
105
+ # Ensure export directory
106
+ self.fh.ensure_dir(self.export_rel_dir)
107
+
108
+ # 1. Body (src) and Mind (.intent) Bundling
109
+ self._bundle_directories()
110
+
111
+ # 2. Symbol Analysis
112
+ await self._generate_symbol_index()
113
+
114
+ # 3. Database Metadata (State)
115
+ await self._export_db_schema()
116
+
117
+ # 4. Vector Metadata (Memory)
118
+ await self._export_qdrant_metadata()
119
+
120
+ # 5. Runtime & Manifest
121
+ await self._finalize_manifest()
122
+
123
+ logger.info("✅ Export complete: %s", self.export_rel_dir)
124
+ return self.export_rel_dir
125
+
126
+ def _bundle_directories(self):
127
+ """Create .tar.gz archives of key directories via FileHandler."""
128
+ logger.info("📦 Bundling src/ and .intent/...")
129
+
130
+ for folder in ["src", ".intent"]:
131
+ out_name = f"{folder.replace('.', '')}.tar.gz"
132
+ rel_out_path = f"{self.export_rel_dir}/{out_name}"
133
+
134
+ buffer = io.BytesIO()
135
+ with tarfile.open(fileobj=buffer, mode="w:gz") as tar:
136
+ src_path = self.repo_root / folder
137
+ if src_path.exists():
138
+ tar.add(src_path, arcname=folder)
139
+
140
+ # Persist the archive via the approved mutation surface
141
+ self.fh.write_runtime_bytes(rel_out_path, buffer.getvalue())
142
+ logger.debug(" -> Governed Archive Created: %s", rel_out_path)
143
+
144
+ async def _generate_symbol_index(self):
145
+ """Scan Python symbols and write index via FileHandler."""
146
+ logger.info("🔍 Scanning Python symbols...")
147
+ symbols = []
148
+ src_root = self.repo_root / "src"
149
+
150
+ for py in src_root.rglob("*.py"):
151
+ rel_mod = str(py.relative_to(src_root)).replace("/", ".")[:-3]
152
+ try:
153
+ txt = py.read_text(encoding="utf-8")
154
+ tree = ast.parse(txt)
155
+ for node in tree.body:
156
+ if isinstance(node, ast.ClassDef):
157
+ symbols.append(
158
+ Symbol(
159
+ rel_mod,
160
+ "class",
161
+ node.name,
162
+ node.lineno,
163
+ "(...)",
164
+ ast.get_docstring(node),
165
+ )
166
+ )
167
+ elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
168
+ if not node.name.startswith("_"):
169
+ sig = build_signature_from_ast(node)
170
+ symbols.append(
171
+ Symbol(
172
+ rel_mod,
173
+ "function",
174
+ node.name,
175
+ node.lineno,
176
+ sig,
177
+ ast.get_docstring(node),
178
+ )
179
+ )
180
+ except Exception:
181
+ continue
182
+
183
+ index_data = {
184
+ "generated_at": now_iso(),
185
+ "symbols": [dataclasses.asdict(s) for s in symbols],
186
+ }
187
+ self.fh.write_runtime_json(
188
+ f"{self.export_rel_dir}/symbol_index.json", index_data
189
+ )
190
+
191
+ async def _export_db_schema(self):
192
+ """Capture DB schema using subprocess, persisted via FileHandler."""
193
+ logger.info("🗄️ Capturing Database Schema...")
194
+ db_url = self._context.settings.DATABASE_URL
195
+
196
+ try:
197
+ # Note: requires pg_dump installed on host
198
+ proc = await asyncio.create_subprocess_exec(
199
+ "pg_dump",
200
+ "--schema-only",
201
+ "--no-owner",
202
+ db_url,
203
+ stdout=asyncio.subprocess.PIPE,
204
+ stderr=asyncio.subprocess.PIPE,
205
+ )
206
+ stdout, _ = await proc.communicate()
207
+ if stdout:
208
+ self.fh.write_runtime_text(
209
+ f"{self.export_rel_dir}/db_schema.sql", stdout.decode()
210
+ )
211
+ except Exception as e:
212
+ logger.warning("Could not export DB schema: %s", e)
213
+
214
+ async def _export_qdrant_metadata(self):
215
+ """Fetch Qdrant collection info via HTTP."""
216
+ logger.info("🧠 Capturing Qdrant Metadata...")
217
+ q_url = self._context.settings.QDRANT_URL.rstrip("/")
218
+ q_col = self._context.settings.QDRANT_COLLECTION_NAME
219
+
220
+ try:
221
+ # Use urllib for standard-lib compliance in scripts
222
+ url = f"{q_url}/collections/{q_col}"
223
+ req = urllib.request.Request(url, headers={"Accept": "application/json"})
224
+ with urllib.request.urlopen(
225
+ req, timeout=_CFG.context_export_http_timeout_sec
226
+ ) as resp:
227
+ data = json.loads(resp.read().decode("utf-8"))
228
+ self.fh.write_runtime_json(
229
+ f"{self.export_rel_dir}/qdrant_info.json", data
230
+ )
231
+ except Exception as e:
232
+ logger.warning("Could not export Qdrant metadata: %s", e)
233
+
234
+ async def _finalize_manifest(self):
235
+ """Create the top-level manifest and checksums."""
236
+ logger.info("📄 Finalizing Export Manifest...")
237
+
238
+ manifest = {
239
+ "export_id": f"core_export_{self.timestamp}",
240
+ "generated_at": now_iso(),
241
+ "core_version": "1.0.0",
242
+ "git_info": {
243
+ "commit": (
244
+ self.git.get_current_commit() if self.git.is_git_repo() else "none"
245
+ ),
246
+ "branch": "unknown",
247
+ },
248
+ "environment": self._context.settings.CORE_ENV,
249
+ "checksums": {},
250
+ }
251
+
252
+ # Calculate checksums for the bundles we created
253
+ export_path = self.repo_root / self.export_rel_dir
254
+ for bundle in export_path.glob("*.tar.gz"):
255
+ manifest["checksums"][bundle.name] = sha256_file(bundle)
256
+
257
+ self.fh.write_runtime_json(
258
+ f"{self.export_rel_dir}/core_context_manifest.json", manifest
259
+ )
260
+
261
+
262
+ # ---------------------------
263
+ # CLI Entrypoint
264
+ # ---------------------------
265
+
266
+
267
+ # ID: a13aecdf-8b7f-4649-bcd7-e42aab66b0bc
268
+ async def main():
269
+ from body.infrastructure.bootstrap import create_core_context
270
+ from body.services.service_registry import service_registry
271
+
272
+ context = create_core_context(service_registry)
273
+ exporter = ContextExporter(context=context)
274
+ await exporter.run()
275
+
276
+
277
+ if __name__ == "__main__":
278
+ asyncio.run(main())