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
api/cli/client.py ADDED
@@ -0,0 +1,508 @@
1
+ # src/api/cli/client.py
2
+
3
+ """Thin async HTTP client for the CORE API (ADR-054).
4
+
5
+ CoreApiClient is a thin facade over twelve per-namespace sub-clients
6
+ (issue #360). Each sub-client owns the HTTP endpoint family for one
7
+ namespace (audit, fix, quality, coverage, refactor, inspect,
8
+ proposals, integration, census, sync, daemon, integrity) and uses
9
+ `self._facade._request` and `self._facade._poll_at_path` to share
10
+ the connection config and polling helpers that live on the facade.
11
+
12
+ The facade keeps the original 75 flat methods as delegating shims so
13
+ existing CLI call-sites continue to work unchanged. Namespaced access
14
+ via attributes (e.g. `client.coverage.coverage_gaps(...)`) is the
15
+ preferred form for new callers.
16
+
17
+ The sub-client attribute for the audit namespace is `audits` (plural)
18
+ to avoid collision with the existing `audit()` method.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import asyncio
24
+ from typing import Any
25
+
26
+ import httpx
27
+
28
+ from api.cli.audit_client import AuditClient
29
+ from api.cli.census_client import CensusClient
30
+ from api.cli.coverage_client import CoverageClient
31
+ from api.cli.daemon_client import DaemonClient
32
+ from api.cli.fix_client import FixClient
33
+ from api.cli.inspect_client import InspectClient
34
+ from api.cli.integration_client import IntegrationClient
35
+ from api.cli.integrity_client import IntegrityClient
36
+ from api.cli.proposals_client import ProposalsClient
37
+ from api.cli.quality_client import QualityClient
38
+ from api.cli.refactor_client import RefactorClient
39
+ from api.cli.sync_client import SyncClient
40
+
41
+
42
+ _DEFAULT_BASE_URL = "http://127.0.0.1:8000"
43
+ _DEFAULT_TIMEOUT_SECONDS = 30.0
44
+ _POLL_INTERVAL_SECONDS = 1.0
45
+ _POLL_TERMINAL_STATES = frozenset({"completed", "failed"})
46
+
47
+
48
+ # ID: 03d88f8c-1a13-4901-a03c-52db4b5ee5b2
49
+ class CoreApiClient:
50
+ """Async HTTP client targeting the loopback-bound CORE API.
51
+
52
+ ADR-054 D3 keeps the API loopback-only with no authentication for
53
+ Phase 1; this client mirrors that posture (no auth headers).
54
+
55
+ Internally a facade over twelve namespace sub-clients (see module
56
+ docstring). Existing flat methods are preserved as delegating
57
+ shims for backwards-compatible call sites.
58
+ """
59
+
60
+ def __init__(self, base_url: str | None = None) -> None:
61
+ self.base_url = base_url or _DEFAULT_BASE_URL
62
+ self.timeout = _DEFAULT_TIMEOUT_SECONDS
63
+ self.audits = AuditClient(self)
64
+ self.fix = FixClient(self)
65
+ self.quality = QualityClient(self)
66
+ self.coverage = CoverageClient(self)
67
+ self.refactor = RefactorClient(self)
68
+ self.inspect = InspectClient(self)
69
+ self.proposals = ProposalsClient(self)
70
+ self.integration = IntegrationClient(self)
71
+ self.census = CensusClient(self)
72
+ self.sync = SyncClient(self)
73
+ self.daemon = DaemonClient(self)
74
+ self.integrity = IntegrityClient(self)
75
+
76
+ # ID: 77466c97-58c5-4ad2-8e5a-814396965f73
77
+ async def _request(self, method: str, path: str, **kwargs: Any) -> dict:
78
+ url = f"{self.base_url}{path}"
79
+ async with httpx.AsyncClient(timeout=self.timeout) as client:
80
+ response = await client.request(method, url, **kwargs)
81
+ response.raise_for_status()
82
+ return response.json()
83
+
84
+ # ID: 1205e380-4b68-4a53-b56d-0eec74896962
85
+ async def _poll_run(self, run_id: str, timeout_seconds: float = 300.0) -> dict:
86
+ """Poll GET /v1/fix/runs/{run_id} until status is completed or failed.
87
+
88
+ Returns the terminal run payload. Raises TimeoutError if the run
89
+ does not reach a terminal state within `timeout_seconds`. Used by
90
+ CLIs over async /fix and /quality endpoints (ADR-055 D2/D3).
91
+ """
92
+ return await self._poll_at_path(
93
+ f"/v1/fix/runs/{run_id}", timeout_seconds=timeout_seconds
94
+ )
95
+
96
+ # ID: c19f4d5e-2b7a-4f8e-bd03-6a8c5d1f9e02
97
+ async def _poll_at_path(self, path: str, timeout_seconds: float = 300.0) -> dict:
98
+ """Poll an arbitrary `GET {path}` until status terminal.
99
+
100
+ Generalisation of `_poll_run` for Phase 3 resources whose poll
101
+ paths differ from /v1/fix/runs/ (e.g. /v1/coverage/runs/,
102
+ /v1/refactor/runs/, /v1/audit/remediations/).
103
+ """
104
+ async with asyncio.timeout(timeout_seconds):
105
+ while True:
106
+ payload = await self._request("GET", path)
107
+ if payload.get("status") in _POLL_TERMINAL_STATES:
108
+ return payload
109
+ await asyncio.sleep(_POLL_INTERVAL_SECONDS)
110
+
111
+ # -- /proposals (ProposalsClient) ----------------------------------
112
+
113
+ # ID: daf8f641-0358-4298-8465-af1d1c09e221
114
+ async def create_proposal(self, *args: Any, **kwargs: Any) -> dict:
115
+ """POST /v1/proposals — see ProposalsClient.create_proposal."""
116
+ return await self.proposals.create_proposal(*args, **kwargs)
117
+
118
+ # ID: 36434e12-c232-4452-9ff5-c0690263804f
119
+ async def list_proposals(self, *args: Any, **kwargs: Any) -> dict:
120
+ """GET /v1/proposals — see ProposalsClient.list_proposals."""
121
+ return await self.proposals.list_proposals(*args, **kwargs)
122
+
123
+ # ID: 2e321d91-d4e6-45ff-834c-a7394fe47fa0
124
+ async def get_proposal(self, *args: Any, **kwargs: Any) -> dict:
125
+ """GET /v1/proposals/{id} — see ProposalsClient.get_proposal."""
126
+ return await self.proposals.get_proposal(*args, **kwargs)
127
+
128
+ # ID: 4223e0c4-41e1-4105-9b9a-b65d52b616d9
129
+ async def approve_proposal(self, *args: Any, **kwargs: Any) -> dict:
130
+ """POST /v1/proposals/{id}/approve — see ProposalsClient.approve_proposal."""
131
+ return await self.proposals.approve_proposal(*args, **kwargs)
132
+
133
+ # ID: 85d96758-f6f0-4162-a44f-32d7dd65bf5c
134
+ async def reject_proposal(self, *args: Any, **kwargs: Any) -> dict:
135
+ """POST /v1/proposals/{id}/reject — see ProposalsClient.reject_proposal."""
136
+ return await self.proposals.reject_proposal(*args, **kwargs)
137
+
138
+ # ID: f7f70b77-7766-4112-86d5-81d0bf6cd830
139
+ async def execute_proposal(self, *args: Any, **kwargs: Any) -> dict:
140
+ """POST /v1/proposals/{id}/execute — see ProposalsClient.execute_proposal."""
141
+ return await self.proposals.execute_proposal(*args, **kwargs)
142
+
143
+ # -- /integrate, /lint (IntegrationClient) ------------------------
144
+
145
+ # ID: 756d1f0f-7315-4fb9-9cd6-4ba14f92dd8a
146
+ async def integrate(self, *args: Any, **kwargs: Any) -> dict:
147
+ """POST /v1/integrate — see IntegrationClient.integrate."""
148
+ return await self.integration.integrate(*args, **kwargs)
149
+
150
+ # ID: 77313481-4787-431c-944f-84a1ab44c594
151
+ async def lint(self, *args: Any, **kwargs: Any) -> dict:
152
+ """POST /v1/lint — see IntegrationClient.lint."""
153
+ return await self.integration.lint(*args, **kwargs)
154
+
155
+ # -- /audit (AuditClient, attr=audits) ----------------------------
156
+
157
+ # ID: b67c3e8d-93d5-4307-a347-4a6d50ab768d
158
+ async def audit(self, *args: Any, **kwargs: Any) -> dict:
159
+ """POST /v1/audit/runs — see AuditClient.audit."""
160
+ return await self.audits.audit(*args, **kwargs)
161
+
162
+ # ID: 7bcf37e9-4561-4132-93a4-b5c6d7e8f90a
163
+ async def audit_remediate(self, *args: Any, **kwargs: Any) -> dict:
164
+ """POST /v1/audit/remediations — see AuditClient.audit_remediate."""
165
+ return await self.audits.audit_remediate(*args, **kwargs)
166
+
167
+ # ID: 8cd048fa-5672-4243-a4b5-c6d7e8f90a1b
168
+ async def get_audit_remediation_run(self, *args: Any, **kwargs: Any) -> dict:
169
+ """GET /v1/audit/remediations/{run_id} — see AuditClient.get_audit_remediation_run."""
170
+ return await self.audits.get_audit_remediation_run(*args, **kwargs)
171
+
172
+ # ID: 9de1590b-6783-4354-b5c6-d7e8f90a1b2c
173
+ async def poll_audit_remediation_run(self, *args: Any, **kwargs: Any) -> dict:
174
+ """Poll an audit remediation run — see AuditClient.poll_audit_remediation_run."""
175
+ return await self.audits.poll_audit_remediation_run(*args, **kwargs)
176
+
177
+ # -- /fix, /actions (FixClient) ------------------------------------
178
+
179
+ # ID: d4b48241-75a5-4e53-bc46-e80b0c8e36e5
180
+ async def list_fix_commands(self, *args: Any, **kwargs: Any) -> dict:
181
+ """GET /v1/fix/commands — see FixClient.list_fix_commands."""
182
+ return await self.fix.list_fix_commands(*args, **kwargs)
183
+
184
+ # ID: ae1230d2-9f37-4e2f-9025-8b409a73ee32
185
+ async def list_actions(self, *args: Any, **kwargs: Any) -> dict:
186
+ """GET /v1/actions — see FixClient.list_actions."""
187
+ return await self.fix.list_actions(*args, **kwargs)
188
+
189
+ # ID: cca11da8-9878-4c7e-9149-1972446a9d81
190
+ async def run_fix(self, *args: Any, **kwargs: Any) -> dict:
191
+ """POST /v1/fix/run/{fix_id} — see FixClient.run_fix."""
192
+ return await self.fix.run_fix(*args, **kwargs)
193
+
194
+ # ID: b54035a3-7c41-452c-bd1d-2cb7c92e9214
195
+ async def fix_all(self, *args: Any, **kwargs: Any) -> dict:
196
+ """POST /v1/fix/all — see FixClient.fix_all."""
197
+ return await self.fix.fix_all(*args, **kwargs)
198
+
199
+ # ID: 22c3d638-ed25-40a0-8aec-52c569e5e776
200
+ async def fix_modularity(self, *args: Any, **kwargs: Any) -> dict:
201
+ """POST /v1/fix/modularity — see FixClient.fix_modularity."""
202
+ return await self.fix.fix_modularity(*args, **kwargs)
203
+
204
+ # ID: 4dcdaddd-1cd1-4561-9d1b-6e76637bada6
205
+ async def fix_ir(self, *args: Any, **kwargs: Any) -> dict:
206
+ """POST /v1/fix/ir — see FixClient.fix_ir."""
207
+ return await self.fix.fix_ir(*args, **kwargs)
208
+
209
+ # ID: 42e18693-ee64-42e7-bf48-dd855f2f3463
210
+ async def get_fix_run(self, *args: Any, **kwargs: Any) -> dict:
211
+ """GET /v1/fix/runs/{run_id} — see FixClient.get_fix_run."""
212
+ return await self.fix.get_fix_run(*args, **kwargs)
213
+
214
+ # -- /quality (QualityClient) --------------------------------------
215
+
216
+ # ID: 7863008f-424f-4e14-b461-eeb8b969291e
217
+ async def quality_imports(self, *args: Any, **kwargs: Any) -> dict:
218
+ """POST /v1/quality/imports — see QualityClient.quality_imports."""
219
+ return await self.quality.quality_imports(*args, **kwargs)
220
+
221
+ # ID: e2563ebe-4fc9-45aa-91bc-a362ce637e95
222
+ async def quality_body_ui(self, *args: Any, **kwargs: Any) -> dict:
223
+ """POST /v1/quality/body-ui — see QualityClient.quality_body_ui."""
224
+ return await self.quality.quality_body_ui(*args, **kwargs)
225
+
226
+ # ID: 4e6f1a2b-8c3d-47e9-a5b1-2d3f4c5a6b7d
227
+ async def quality_policy_coverage(self, *args: Any, **kwargs: Any) -> dict:
228
+ """POST /v1/quality/policy-coverage — see QualityClient.quality_policy_coverage."""
229
+ return await self.quality.quality_policy_coverage(*args, **kwargs)
230
+
231
+ # ID: 0774cb34-3305-4fee-89b3-8f33bec667a9
232
+ async def quality_lint(self, *args: Any, **kwargs: Any) -> dict:
233
+ """POST /v1/quality/lint — see QualityClient.quality_lint."""
234
+ return await self.quality.quality_lint(*args, **kwargs)
235
+
236
+ # ID: 1824000e-1ced-488b-a083-56e2e25529ec
237
+ async def quality_tests(self, *args: Any, **kwargs: Any) -> dict:
238
+ """POST /v1/quality/tests — see QualityClient.quality_tests."""
239
+ return await self.quality.quality_tests(*args, **kwargs)
240
+
241
+ # ID: efdd8365-2deb-4093-b03e-fb5aa303647f
242
+ async def quality_system(self, *args: Any, **kwargs: Any) -> dict:
243
+ """POST /v1/quality/system — see QualityClient.quality_system."""
244
+ return await self.quality.quality_system(*args, **kwargs)
245
+
246
+ # ID: d41045dd-54cb-4b72-897b-55ed29d3f305
247
+ async def quality_gates(self, *args: Any, **kwargs: Any) -> dict:
248
+ """POST /v1/quality/gates — see QualityClient.quality_gates."""
249
+ return await self.quality.quality_gates(*args, **kwargs)
250
+
251
+ # -- /coverage, /tests/interactive (CoverageClient) ----------------
252
+
253
+ # ID: a8b2c4d6-1e3f-4a5b-6c7d-8e9f0a1b2c3d
254
+ async def coverage_check(self, *args: Any, **kwargs: Any) -> dict:
255
+ """GET /v1/coverage/check — see CoverageClient.coverage_check."""
256
+ return await self.coverage.coverage_check(*args, **kwargs)
257
+
258
+ # ID: b9c3d5e7-2f4a-4b6c-7d8e-9f0a1b2c3d4e
259
+ async def coverage_report(self, *args: Any, **kwargs: Any) -> dict:
260
+ """GET /v1/coverage/report — see CoverageClient.coverage_report."""
261
+ return await self.coverage.coverage_report(*args, **kwargs)
262
+
263
+ # ID: c0d4e6f8-3a5b-4c7d-8e9f-0a1b2c3d4e5f
264
+ async def coverage_targets(self, *args: Any, **kwargs: Any) -> dict:
265
+ """GET /v1/coverage/targets — see CoverageClient.coverage_targets."""
266
+ return await self.coverage.coverage_targets(*args, **kwargs)
267
+
268
+ # ID: d1e5f7a9-4b6c-4d8e-9f0a-1b2c3d4e5f60
269
+ async def coverage_gaps(self, *args: Any, **kwargs: Any) -> dict:
270
+ """GET /v1/coverage/gaps — see CoverageClient.coverage_gaps."""
271
+ return await self.coverage.coverage_gaps(*args, **kwargs)
272
+
273
+ # ID: e2f6a8b0-5c7d-4e9f-0a1b-2c3d4e5f6071
274
+ async def coverage_history(self, *args: Any, **kwargs: Any) -> dict:
275
+ """GET /v1/coverage/history — see CoverageClient.coverage_history."""
276
+ return await self.coverage.coverage_history(*args, **kwargs)
277
+
278
+ # ID: f3a7b9c1-6d8e-4f0a-1b2c-3d4e5f607182
279
+ async def coverage_methods(self, *args: Any, **kwargs: Any) -> dict:
280
+ """GET /v1/coverage/methods — see CoverageClient.coverage_methods."""
281
+ return await self.coverage.coverage_methods(*args, **kwargs)
282
+
283
+ # ID: 04b8c0d2-7e9f-4a1b-2c3d-4e5f60718293
284
+ async def coverage_generate(self, *args: Any, **kwargs: Any) -> dict:
285
+ """POST /v1/coverage/generate — see CoverageClient.coverage_generate."""
286
+ return await self.coverage.coverage_generate(*args, **kwargs)
287
+
288
+ # ID: 15c9d1e3-8f0a-4b2c-3d4e-5f60718293a4
289
+ async def coverage_generate_batch(self, *args: Any, **kwargs: Any) -> dict:
290
+ """POST /v1/coverage/generate:batch — see CoverageClient.coverage_generate_batch."""
291
+ return await self.coverage.coverage_generate_batch(*args, **kwargs)
292
+
293
+ # ID: 26dae2f4-9a1b-4c3d-4e5f-60718293a4b5
294
+ async def get_coverage_run(self, *args: Any, **kwargs: Any) -> dict:
295
+ """GET /v1/coverage/runs/{run_id} — see CoverageClient.get_coverage_run."""
296
+ return await self.coverage.get_coverage_run(*args, **kwargs)
297
+
298
+ # ID: 37ebf3a5-0b2c-4d4e-5f60-718293a4b5c6
299
+ async def poll_coverage_run(self, *args: Any, **kwargs: Any) -> dict:
300
+ """Poll a coverage run — see CoverageClient.poll_coverage_run."""
301
+ return await self.coverage.poll_coverage_run(*args, **kwargs)
302
+
303
+ # ID: 48fc04b6-1c3d-4e5f-6071-8293a4b5c6d7
304
+ async def tests_interactive(self, *args: Any, **kwargs: Any) -> dict:
305
+ """POST /v1/tests/interactive — see CoverageClient.tests_interactive."""
306
+ return await self.coverage.tests_interactive(*args, **kwargs)
307
+
308
+ # -- /refactor (RefactorClient) ------------------------------------
309
+
310
+ # ID: 59ad15c7-2d4e-4f60-7182-93a4b5c6d7e8
311
+ async def refactor_threshold(self, *args: Any, **kwargs: Any) -> dict:
312
+ """GET /v1/refactor/threshold — see RefactorClient.refactor_threshold."""
313
+ return await self.refactor.refactor_threshold(*args, **kwargs)
314
+
315
+ # ID: 6abe26d8-3e5f-4071-8293-a4b5c6d7e8f9
316
+ async def refactor_score(self, *args: Any, **kwargs: Any) -> dict:
317
+ """GET /v1/refactor/score — see RefactorClient.refactor_score."""
318
+ return await self.refactor.refactor_score(*args, **kwargs)
319
+
320
+ # ID: 7bcf37e9-4f60-4182-93a4-b5c6d7e8f90a
321
+ async def refactor_candidates(self, *args: Any, **kwargs: Any) -> dict:
322
+ """GET /v1/refactor/candidates — see RefactorClient.refactor_candidates."""
323
+ return await self.refactor.refactor_candidates(*args, **kwargs)
324
+
325
+ # ID: 8cd048fa-5071-4293-a4b5-c6d7e8f90a1b
326
+ async def refactor_stats(self, *args: Any, **kwargs: Any) -> dict:
327
+ """GET /v1/refactor/stats — see RefactorClient.refactor_stats."""
328
+ return await self.refactor.refactor_stats(*args, **kwargs)
329
+
330
+ # ID: 9de1590b-6182-4304-b5c6-d7e8f90a1b2c
331
+ async def refactor_autonomous(self, *args: Any, **kwargs: Any) -> dict:
332
+ """POST /v1/refactor/autonomous — see RefactorClient.refactor_autonomous."""
333
+ return await self.refactor.refactor_autonomous(*args, **kwargs)
334
+
335
+ # ID: aef26a1c-7293-4415-c6d7-e8f90a1b2c3d
336
+ async def get_refactor_run(self, *args: Any, **kwargs: Any) -> dict:
337
+ """GET /v1/refactor/runs/{run_id} — see RefactorClient.get_refactor_run."""
338
+ return await self.refactor.get_refactor_run(*args, **kwargs)
339
+
340
+ # ID: bf037b2d-83a4-4526-d7e8-f90a1b2c3d4e
341
+ async def poll_refactor_run(self, *args: Any, **kwargs: Any) -> dict:
342
+ """Poll a refactor run — see RefactorClient.poll_refactor_run."""
343
+ return await self.refactor.poll_refactor_run(*args, **kwargs)
344
+
345
+ # -- /status, /decisions, /refusals, /analysis, /components, /search (InspectClient) --
346
+
347
+ # ID: c0148c3e-94b5-4637-e8f9-0a1b2c3d4e5f
348
+ async def status_db(self, *args: Any, **kwargs: Any) -> dict:
349
+ """GET /v1/status/db — see InspectClient.status_db."""
350
+ return await self.inspect.status_db(*args, **kwargs)
351
+
352
+ # ID: d1259d4f-a5c6-4748-f90a-1b2c3d4e5f60
353
+ async def status_drift(self, *args: Any, **kwargs: Any) -> dict:
354
+ """GET /v1/status/drift — see InspectClient.status_drift."""
355
+ return await self.inspect.status_drift(*args, **kwargs)
356
+
357
+ # ID: e236ae50-b6d7-4859-0a1b-2c3d4e5f6071
358
+ async def decisions_list(self, *args: Any, **kwargs: Any) -> dict:
359
+ """GET /v1/decisions — see InspectClient.decisions_list."""
360
+ return await self.inspect.decisions_list(*args, **kwargs)
361
+
362
+ # ID: f347bf61-c7e8-495a-1b2c-3d4e5f607182
363
+ async def decisions_patterns(self, *args: Any, **kwargs: Any) -> dict:
364
+ """GET /v1/decisions/patterns — see InspectClient.decisions_patterns."""
365
+ return await self.inspect.decisions_patterns(*args, **kwargs)
366
+
367
+ # ID: 0458c072-d8f9-4a6b-2c3d-4e5f60718293
368
+ async def refusals_list(self, *args: Any, **kwargs: Any) -> dict:
369
+ """GET /v1/refusals — see InspectClient.refusals_list."""
370
+ return await self.inspect.refusals_list(*args, **kwargs)
371
+
372
+ # ID: 1569d183-e90a-4b7c-3d4e-5f60718293a4
373
+ async def refusals_stats(self, *args: Any, **kwargs: Any) -> dict:
374
+ """GET /v1/refusals/stats — see InspectClient.refusals_stats."""
375
+ return await self.inspect.refusals_stats(*args, **kwargs)
376
+
377
+ # ID: 267ae294-f01b-4c8d-4e5f-60718293a4b5
378
+ async def analysis_clusters(self, *args: Any, **kwargs: Any) -> dict:
379
+ """GET /v1/analysis/clusters — see InspectClient.analysis_clusters."""
380
+ return await self.inspect.analysis_clusters(*args, **kwargs)
381
+
382
+ # ID: 378bf3a5-012c-4d9e-5f60-718293a4b5c6
383
+ async def analysis_duplicates(self, *args: Any, **kwargs: Any) -> dict:
384
+ """GET /v1/analysis/duplicates — see InspectClient.analysis_duplicates."""
385
+ return await self.inspect.analysis_duplicates(*args, **kwargs)
386
+
387
+ # ID: 489c04b6-123d-4e0f-6071-8293a4b5c6d7
388
+ async def analysis_common_knowledge(self, *args: Any, **kwargs: Any) -> dict:
389
+ """GET /v1/analysis/common-knowledge — see InspectClient.analysis_common_knowledge."""
390
+ return await self.inspect.analysis_common_knowledge(*args, **kwargs)
391
+
392
+ # ID: 59ad15c7-234e-4f10-7182-93a4b5c6d7e8
393
+ async def analysis_command_tree(self, *args: Any, **kwargs: Any) -> dict:
394
+ """GET /v1/analysis/command-tree — see InspectClient.analysis_command_tree."""
395
+ return await self.inspect.analysis_command_tree(*args, **kwargs)
396
+
397
+ # ID: 6abe26d8-345f-4021-8293-a4b5c6d7e8f9
398
+ async def analysis_test_targets(self, *args: Any, **kwargs: Any) -> dict:
399
+ """GET /v1/analysis/test-targets — see InspectClient.analysis_test_targets."""
400
+ return await self.inspect.analysis_test_targets(*args, **kwargs)
401
+
402
+ # ID: b347cf17-8caa-4c05-9853-4942b3d8c08f
403
+ async def inspect_components(self, *args: Any, **kwargs: Any) -> dict:
404
+ """GET /v1/components — see InspectClient.inspect_components."""
405
+ return await self.inspect.inspect_components(*args, **kwargs)
406
+
407
+ # ID: dbf1dc9a-2a32-4319-94d4-d450c9a54836
408
+ async def inspect_search_capabilities(self, *args: Any, **kwargs: Any) -> dict:
409
+ """GET /v1/search/capabilities — see InspectClient.inspect_search_capabilities."""
410
+ return await self.inspect.inspect_search_capabilities(*args, **kwargs)
411
+
412
+ # ID: 792970ef-a9d3-493d-9049-55d2cbfcf3b3
413
+ async def inspect_search_commands(self, *args: Any, **kwargs: Any) -> dict:
414
+ """GET /v1/search/commands — see InspectClient.inspect_search_commands."""
415
+ return await self.inspect.inspect_search_commands(*args, **kwargs)
416
+
417
+ # -- /census (CensusClient) ----------------------------------------
418
+
419
+ # ID: 1a5b8c2d-3e4f-4567-89ab-cdef01234567
420
+ async def census_run(self, *args: Any, **kwargs: Any) -> dict:
421
+ """POST /v1/census/runs — see CensusClient.census_run."""
422
+ return await self.census.census_run(*args, **kwargs)
423
+
424
+ # ID: 2b6c9d3e-4f5a-4678-9abc-def012345678
425
+ async def get_census_run(self, *args: Any, **kwargs: Any) -> dict:
426
+ """GET /v1/census/runs/{run_id} — see CensusClient.get_census_run."""
427
+ return await self.census.get_census_run(*args, **kwargs)
428
+
429
+ # ID: 3c7d0e4f-5a6b-4789-abcd-ef0123456789
430
+ async def poll_census_run(self, *args: Any, **kwargs: Any) -> dict:
431
+ """Poll a census run — see CensusClient.poll_census_run."""
432
+ return await self.census.poll_census_run(*args, **kwargs)
433
+
434
+ # ID: 4d8e1f5a-6b7c-489a-bcde-f01234567890
435
+ async def census_create_baseline(self, *args: Any, **kwargs: Any) -> dict:
436
+ """POST /v1/census/baselines/{name} — see CensusClient.census_create_baseline."""
437
+ return await self.census.census_create_baseline(*args, **kwargs)
438
+
439
+ # ID: 5e9f2a6b-7c8d-490b-cdef-012345678901
440
+ async def census_list_baselines(self, *args: Any, **kwargs: Any) -> dict:
441
+ """GET /v1/census/baselines — see CensusClient.census_list_baselines."""
442
+ return await self.census.census_list_baselines(*args, **kwargs)
443
+
444
+ # ID: 6a0b3c7d-8e9f-401c-def0-123456789012
445
+ async def census_diff(self, *args: Any, **kwargs: Any) -> dict:
446
+ """GET /v1/census/diff — see CensusClient.census_diff."""
447
+ return await self.census.census_diff(*args, **kwargs)
448
+
449
+ # -- /sync (SyncClient) --------------------------------------------
450
+
451
+ # ID: 7b1c4d8e-9f0a-412d-ef01-234567890123
452
+ async def sync_knowledge_graph(self, *args: Any, **kwargs: Any) -> dict:
453
+ """POST /v1/sync/knowledge-graph — see SyncClient.sync_knowledge_graph."""
454
+ return await self.sync.sync_knowledge_graph(*args, **kwargs)
455
+
456
+ # ID: 8c2d5e9f-0a1b-423e-f012-345678901234
457
+ async def sync_vectors(self, *args: Any, **kwargs: Any) -> dict:
458
+ """POST /v1/sync/vectors — see SyncClient.sync_vectors."""
459
+ return await self.sync.sync_vectors(*args, **kwargs)
460
+
461
+ # ID: 9d3e6f0a-1b2c-434f-0123-456789012345
462
+ async def sync_code_vectors(self, *args: Any, **kwargs: Any) -> dict:
463
+ """POST /v1/sync/code-vectors — see SyncClient.sync_code_vectors."""
464
+ return await self.sync.sync_code_vectors(*args, **kwargs)
465
+
466
+ # ID: 0e4f7a1b-2c3d-4450-1234-567890123456
467
+ async def sync_dev_sync(self, *args: Any, **kwargs: Any) -> dict:
468
+ """POST /v1/sync/dev-sync — see SyncClient.sync_dev_sync."""
469
+ return await self.sync.sync_dev_sync(*args, **kwargs)
470
+
471
+ # ID: 1f5a8b2c-3d4e-4561-2345-678901234567
472
+ async def get_sync_run(self, *args: Any, **kwargs: Any) -> dict:
473
+ """GET /v1/sync/runs/{run_id} — see SyncClient.get_sync_run."""
474
+ return await self.sync.get_sync_run(*args, **kwargs)
475
+
476
+ # ID: 2a6b9c3d-4e5f-4672-3456-789012345678
477
+ async def poll_sync_run(self, *args: Any, **kwargs: Any) -> dict:
478
+ """Poll a sync run — see SyncClient.poll_sync_run."""
479
+ return await self.sync.poll_sync_run(*args, **kwargs)
480
+
481
+ # -- /integrity (IntegrityClient) ----------------------------------
482
+
483
+ # ID: 7ba84c02-f8a8-4895-befd-8e43e397cfbb
484
+ async def baseline(self, *args: Any, **kwargs: Any) -> dict:
485
+ """POST /v1/integrity/baseline — see IntegrityClient.baseline."""
486
+ return await self.integrity.baseline(*args, **kwargs)
487
+
488
+ # ID: dc4b010a-8220-42e4-9d11-78613b6a2eb7
489
+ async def verify(self, *args: Any, **kwargs: Any) -> dict:
490
+ """POST /v1/integrity/verify — see IntegrityClient.verify."""
491
+ return await self.integrity.verify(*args, **kwargs)
492
+
493
+ # -- /daemon (DaemonClient) ----------------------------------------
494
+
495
+ # ID: 3b7c0d4e-5f6a-4783-4567-890123456789
496
+ async def daemon_status(self, *args: Any, **kwargs: Any) -> dict:
497
+ """GET /v1/daemon/status — see DaemonClient.daemon_status."""
498
+ return await self.daemon.daemon_status(*args, **kwargs)
499
+
500
+ # ID: 4c8d1e5f-6a7b-4894-5678-901234567890
501
+ async def daemon_start(self, *args: Any, **kwargs: Any) -> dict:
502
+ """POST /v1/daemon/start — see DaemonClient.daemon_start."""
503
+ return await self.daemon.daemon_start(*args, **kwargs)
504
+
505
+ # ID: 5d9e2f6a-7b8c-49a5-6789-012345678901
506
+ async def daemon_stop(self, *args: Any, **kwargs: Any) -> dict:
507
+ """POST /v1/daemon/stop — see DaemonClient.daemon_stop."""
508
+ return await self.daemon.daemon_stop(*args, **kwargs)
@@ -0,0 +1,121 @@
1
+ # src/api/cli/coverage_client.py
2
+
3
+ """Coverage namespace sub-client for CoreApiClient (issue #360).
4
+
5
+ Covers /v1/coverage/* and /v1/tests/interactive. Accessed via the
6
+ facade as `core_api_client.coverage`.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING
12
+
13
+
14
+ if TYPE_CHECKING:
15
+ from api.cli.client import CoreApiClient
16
+
17
+
18
+ # ID: c7b169d0-f461-4e65-9633-f7b1becce3f6
19
+ class CoverageClient:
20
+ """Sub-client for /coverage/* and /tests/interactive endpoints.
21
+
22
+ Constructed by and bound to a CoreApiClient facade; uses
23
+ `self._facade._request` for HTTP and `self._facade._poll_at_path`
24
+ for polling.
25
+ """
26
+
27
+ def __init__(self, facade: CoreApiClient) -> None:
28
+ self._facade = facade
29
+
30
+ # ID: 6b94383f-e5df-426d-bffc-dda33108f230
31
+ async def coverage_check(self) -> dict:
32
+ """GET /v1/coverage/check — constitutional coverage compliance check."""
33
+ return await self._facade._request("GET", "/v1/coverage/check", timeout=300.0)
34
+
35
+ # ID: 73677021-be1c-4add-b812-6b0191954bcd
36
+ async def coverage_report(
37
+ self, show_missing: bool = False, output_format: str = "text"
38
+ ) -> dict:
39
+ """GET /v1/coverage/report — pytest --cov report.
40
+
41
+ `output_format='text'` (default) returns the term report shape;
42
+ `output_format='html'` triggers `--cov-report=html` and returns
43
+ the `htmlcov/` path in `html_path` (#358).
44
+ """
45
+ return await self._facade._request(
46
+ "GET",
47
+ "/v1/coverage/report",
48
+ params={"show_missing": show_missing, "format": output_format},
49
+ timeout=300.0,
50
+ )
51
+
52
+ # ID: 31762641-5b13-47a0-bf1a-68dc14d0c603
53
+ async def coverage_targets(self) -> dict:
54
+ """GET /v1/coverage/targets — constitutional coverage targets."""
55
+ return await self._facade._request("GET", "/v1/coverage/targets")
56
+
57
+ # ID: 26fa1d84-8625-4f2b-a72f-ecf08157fc1d
58
+ async def coverage_gaps(self, threshold: float = 75.0, limit: int = 20) -> dict:
59
+ """GET /v1/coverage/gaps — modules below threshold, ranked by deficit."""
60
+ return await self._facade._request(
61
+ "GET",
62
+ "/v1/coverage/gaps",
63
+ params={"threshold": threshold, "limit": limit},
64
+ timeout=300.0,
65
+ )
66
+
67
+ # ID: 56ae27a0-5c75-4e23-9537-7c68c34d6795
68
+ async def coverage_history(self, limit: int = 30) -> dict:
69
+ """GET /v1/coverage/history — recent coverage measurements."""
70
+ return await self._facade._request(
71
+ "GET", "/v1/coverage/history", params={"limit": limit}
72
+ )
73
+
74
+ # ID: 63eeb7eb-27c0-4cbd-a546-bb563dc4310c
75
+ async def coverage_methods(self) -> dict:
76
+ """GET /v1/coverage/methods — coverage method comparison descriptor."""
77
+ return await self._facade._request("GET", "/v1/coverage/methods")
78
+
79
+ # ID: 2f221d29-5a39-4466-b5a7-ad68565e6153
80
+ async def coverage_generate(self, target_file: str, write: bool = False) -> dict:
81
+ """POST /v1/coverage/generate — single-file adaptive test generation."""
82
+ return await self._facade._request(
83
+ "POST",
84
+ "/v1/coverage/generate",
85
+ json={"target_file": target_file, "write": write},
86
+ )
87
+
88
+ # ID: 988d0251-117b-4938-86b8-ea0c8ad4956f
89
+ async def coverage_generate_batch(
90
+ self, priority: str = "all", write: bool = False
91
+ ) -> dict:
92
+ """POST /v1/coverage/generate:batch — prioritised batch generation."""
93
+ return await self._facade._request(
94
+ "POST",
95
+ "/v1/coverage/generate:batch",
96
+ json={"priority": priority, "write": write},
97
+ )
98
+
99
+ # ID: d58f2fe7-c58b-442c-9f92-4a7ca0bf3aab
100
+ async def get_coverage_run(self, run_id: str) -> dict:
101
+ """GET /v1/coverage/runs/{run_id} — fetch a coverage_runs row."""
102
+ return await self._facade._request("GET", f"/v1/coverage/runs/{run_id}")
103
+
104
+ # ID: 11e4f088-509b-4421-8eca-3a079dff76fe
105
+ async def poll_coverage_run(
106
+ self, run_id: str, timeout_seconds: float = 600.0
107
+ ) -> dict:
108
+ """Poll a coverage run until terminal. Test generation can be slow."""
109
+ return await self._facade._poll_at_path(
110
+ f"/v1/coverage/runs/{run_id}", timeout_seconds=timeout_seconds
111
+ )
112
+
113
+ # ID: 2100735d-c584-4296-a71a-49c08e26c0f1
114
+ async def tests_interactive(self, target_file: str | None = None) -> dict:
115
+ """POST /v1/tests/interactive — sync interactive test generation."""
116
+ return await self._facade._request(
117
+ "POST",
118
+ "/v1/tests/interactive",
119
+ json={"target_file": target_file},
120
+ timeout=600.0,
121
+ )
@@ -0,0 +1,42 @@
1
+ # src/api/cli/daemon_client.py
2
+
3
+ """Daemon namespace sub-client for CoreApiClient (issue #360).
4
+
5
+ Covers /v1/daemon/* (ADR-058 D3). Accessed via the facade as
6
+ `core_api_client.daemon`.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING
12
+
13
+
14
+ if TYPE_CHECKING:
15
+ from api.cli.client import CoreApiClient
16
+
17
+
18
+ # ID: 692aabbc-6659-4ba4-a137-bbc1c920c77f
19
+ class DaemonClient:
20
+ """Sub-client for /daemon/* endpoints.
21
+
22
+ Constructed by and bound to a CoreApiClient facade; uses
23
+ `self._facade._request` for HTTP.
24
+ """
25
+
26
+ def __init__(self, facade: CoreApiClient) -> None:
27
+ self._facade = facade
28
+
29
+ # ID: 3db9fe94-a072-42b1-bb6f-4697266445c0
30
+ async def daemon_status(self) -> dict:
31
+ """GET /v1/daemon/status — daemon liveness + per-worker health."""
32
+ return await self._facade._request("GET", "/v1/daemon/status")
33
+
34
+ # ID: fe391d8b-e92b-49a9-9392-0d520f8476ea
35
+ async def daemon_start(self) -> dict:
36
+ """POST /v1/daemon/start — start core-daemon via systemctl."""
37
+ return await self._facade._request("POST", "/v1/daemon/start", json={})
38
+
39
+ # ID: 6d4ab8d7-ff36-4cd6-8917-43d7dd4afb57
40
+ async def daemon_stop(self) -> dict:
41
+ """POST /v1/daemon/stop — schedule core-daemon stop (fire-and-forget)."""
42
+ return await self._facade._request("POST", "/v1/daemon/stop", json={})