koru 0.1.331__tar.gz → 0.1.332__tar.gz

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 (839) hide show
  1. {koru-0.1.331/src/koru.egg-info → koru-0.1.332}/PKG-INFO +5 -5
  2. {koru-0.1.331 → koru-0.1.332}/README.md +4 -4
  3. {koru-0.1.331 → koru-0.1.332}/pyproject.toml +1 -1
  4. {koru-0.1.331 → koru-0.1.332}/src/koru/agent_backend_runtime.py +83 -38
  5. {koru-0.1.331 → koru-0.1.332}/src/koru/integrations/imgl_client.py +2 -1
  6. {koru-0.1.331 → koru-0.1.332}/src/koru/integrations/vdisplay_client.py +24 -15
  7. {koru-0.1.331 → koru-0.1.332/src/koru.egg-info}/PKG-INFO +5 -5
  8. {koru-0.1.331 → koru-0.1.332}/LICENSE +0 -0
  9. {koru-0.1.331 → koru-0.1.332}/MANIFEST.in +0 -0
  10. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/__init__.py +0 -0
  11. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/cli.py +0 -0
  12. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/cli_calibration.py +0 -0
  13. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/control.py +0 -0
  14. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/ecosystem.py +0 -0
  15. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/ide_detection.py +0 -0
  16. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/__init__.py +0 -0
  17. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/commands.py +0 -0
  18. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/diagnostics.py +0 -0
  19. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/domain.py +0 -0
  20. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/events.py +0 -0
  21. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/pipeline.py +0 -0
  22. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/projector.py +0 -0
  23. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/query.py +0 -0
  24. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/registry.py +0 -0
  25. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/runtime.py +0 -0
  26. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/service.py +0 -0
  27. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair/store.py +0 -0
  28. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/repair_registry.py +0 -0
  29. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/__init__.py +0 -0
  30. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/cli.py +0 -0
  31. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/daemon_ctl.py +0 -0
  32. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/editor_cli.py +0 -0
  33. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/http_handlers.py +0 -0
  34. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/http_server.py +0 -0
  35. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/http_util.py +0 -0
  36. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/models.py +0 -0
  37. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/paths.py +0 -0
  38. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/probe.py +0 -0
  39. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/registry.py +0 -0
  40. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/service.py +0 -0
  41. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/socket_path.py +0 -0
  42. {koru-0.1.331 → koru-0.1.332}/packages/coru/src/coru/supervisor/systemd_unit.py +0 -0
  43. {koru-0.1.331 → koru-0.1.332}/schemas/koru-stdio-event.schema.json +0 -0
  44. {koru-0.1.331 → koru-0.1.332}/setup.cfg +0 -0
  45. {koru-0.1.331 → koru-0.1.332}/src/env2llm/__init__.py +0 -0
  46. {koru-0.1.331 → koru-0.1.332}/src/env2llm/integrators/__init__.py +0 -0
  47. {koru-0.1.331 → koru-0.1.332}/src/env2llm/integrators/_service_factory.py +0 -0
  48. {koru-0.1.331 → koru-0.1.332}/src/env2llm/probes/testql.py +0 -0
  49. {koru-0.1.331 → koru-0.1.332}/src/env2llm/service/__init__.py +0 -0
  50. {koru-0.1.331 → koru-0.1.332}/src/env2llm/service/registry_service.py +0 -0
  51. {koru-0.1.331 → koru-0.1.332}/src/imgl/__init__.py +0 -0
  52. {koru-0.1.331 → koru-0.1.332}/src/imgl/autodiag.py +0 -0
  53. {koru-0.1.331 → koru-0.1.332}/src/imgl/freshness.py +0 -0
  54. {koru-0.1.331 → koru-0.1.332}/src/koru/__init__.py +0 -0
  55. {koru-0.1.331 → koru-0.1.332}/src/koru/__main__.py +0 -0
  56. {koru-0.1.331 → koru-0.1.332}/src/koru/activity_log.py +0 -0
  57. {koru-0.1.331 → koru-0.1.332}/src/koru/agent_backends.py +0 -0
  58. {koru-0.1.331 → koru-0.1.332}/src/koru/agent_cli_helpers.py +0 -0
  59. {koru-0.1.331 → koru-0.1.332}/src/koru/agents.py +0 -0
  60. {koru-0.1.331 → koru-0.1.332}/src/koru/api/__init__.py +0 -0
  61. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.29.vsix +0 -0
  62. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.30.vsix +0 -0
  63. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.32.vsix +0 -0
  64. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.35.vsix +0 -0
  65. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.36.vsix +0 -0
  66. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.38.vsix +0 -0
  67. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.39.vsix +0 -0
  68. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.40.vsix +0 -0
  69. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.41.vsix +0 -0
  70. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.42.vsix +0 -0
  71. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.43.vsix +0 -0
  72. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.44.vsix +0 -0
  73. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.45.vsix +0 -0
  74. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.46.vsix +0 -0
  75. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.55.vsix +0 -0
  76. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.56.vsix +0 -0
  77. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.1.57.vsix +0 -0
  78. {koru-0.1.331 → koru-0.1.332}/src/koru/assets/koru-autopilot-vscode/koru-autopilot-0.2.0.vsix +0 -0
  79. {koru-0.1.331 → koru-0.1.332}/src/koru/autoloop_cli.py +0 -0
  80. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous.py +0 -0
  81. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_auto_pipeline.py +0 -0
  82. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_checkpoint.py +0 -0
  83. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cli_config.py +0 -0
  84. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle.py +0 -0
  85. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_bridge.py +0 -0
  86. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_chat_activity.py +0 -0
  87. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_chat_activity_analyzer.py +0 -0
  88. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_chat_activity_config.py +0 -0
  89. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_chat_activity_text.py +0 -0
  90. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_chat_activity_tickets.py +0 -0
  91. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_common.py +0 -0
  92. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_config.py +0 -0
  93. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_drive_outcome.py +0 -0
  94. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_drive_retry.py +0 -0
  95. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_gate.py +0 -0
  96. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_orchestrator.py +0 -0
  97. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_post_drive.py +0 -0
  98. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_cycle_skip_conditions.py +0 -0
  99. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_daemon.py +0 -0
  100. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_diag_markers.py +0 -0
  101. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_diagnostics.py +0 -0
  102. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_drive_retry_policy.py +0 -0
  103. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_env.py +0 -0
  104. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_loop_runner.py +0 -0
  105. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_onboarding.py +0 -0
  106. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_operator.py +0 -0
  107. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_parser.py +0 -0
  108. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_plugin.py +0 -0
  109. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_plugin_lifecycle.py +0 -0
  110. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_plugin_runtime.py +0 -0
  111. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_plugin_wait.py +0 -0
  112. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_process_guard.py +0 -0
  113. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_processes.py +0 -0
  114. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_readiness.py +0 -0
  115. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_resources.py +0 -0
  116. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_runtime.py +0 -0
  117. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_startup.py +0 -0
  118. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_submit_strategy.py +0 -0
  119. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_up.py +0 -0
  120. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomous_wup.py +0 -0
  121. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/__init__.py +0 -0
  122. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/code2llm_discovery.py +0 -0
  123. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/config.py +0 -0
  124. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/cycle_finalize.py +0 -0
  125. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/cycle_trace.py +0 -0
  126. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/decision_arbiter.py +0 -0
  127. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/decision_trace.py +0 -0
  128. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/env.py +0 -0
  129. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/environment.py +0 -0
  130. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/events.py +0 -0
  131. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/heal.py +0 -0
  132. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/ide_operator_guidance.py +0 -0
  133. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/ide_work.py +0 -0
  134. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/operator_pipeline.py +0 -0
  135. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/__init__.py +0 -0
  136. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/contexts.py +0 -0
  137. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/drive_phase.py +0 -0
  138. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/queue_phase.py +0 -0
  139. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/scan_phase.py +0 -0
  140. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/sleep_phase.py +0 -0
  141. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/startup_phase.py +0 -0
  142. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/utils.py +0 -0
  143. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/phases/verify_phase.py +0 -0
  144. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planfile_handoff.py +0 -0
  145. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm.py +0 -0
  146. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm_budget.py +0 -0
  147. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm_parsing.py +0 -0
  148. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm_prompts.py +0 -0
  149. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm_runtime.py +0 -0
  150. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/planning_llm_types.py +0 -0
  151. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/policy_decision.py +0 -0
  152. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/post_run_verify.py +0 -0
  153. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/prompts.py +0 -0
  154. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/reflection_policy.py +0 -0
  155. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_actions.py +0 -0
  156. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_builders.py +0 -0
  157. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_execution.py +0 -0
  158. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_handlers.py +0 -0
  159. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_parser.py +0 -0
  160. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_quick_actions.py +0 -0
  161. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/replay_types.py +0 -0
  162. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/state.py +0 -0
  163. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/structured_report.py +0 -0
  164. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/telemetry_snapshot.py +0 -0
  165. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy/verification_engine.py +0 -0
  166. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/__init__.py +0 -0
  167. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/config.py +0 -0
  168. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/defaults.py +0 -0
  169. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/heuristics.py +0 -0
  170. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/openrouter.py +0 -0
  171. {koru-0.1.331 → koru-0.1.332}/src/koru/autonomy_strategy/prompts.py +0 -0
  172. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/__init__.py +0 -0
  173. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/audit.py +0 -0
  174. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/calibrate_cli.py +0 -0
  175. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/cli_command.py +0 -0
  176. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/cli_direct_drive.py +0 -0
  177. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/cli_parser.py +0 -0
  178. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/cli_snapshot.py +0 -0
  179. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/cli_trace.py +0 -0
  180. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/client.py +0 -0
  181. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/__init__.py +0 -0
  182. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/drive.py +0 -0
  183. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/handoff.py +0 -0
  184. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/manage.py +0 -0
  185. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/shutdown.py +0 -0
  186. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/commands/status.py +0 -0
  187. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/config.py +0 -0
  188. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/daemon.py +0 -0
  189. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/daemon_cli.py +0 -0
  190. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/doctor_cli.py +0 -0
  191. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/drive_repair_policy.py +0 -0
  192. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/host_setup.py +0 -0
  193. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/ide.py +0 -0
  194. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/injector.py +0 -0
  195. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/install_checks.py +0 -0
  196. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/install_manager.py +0 -0
  197. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/install_plugin_cli.py +0 -0
  198. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/lane_context.py +0 -0
  199. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/local_manager.py +0 -0
  200. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/log_contract.py +0 -0
  201. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/os_injector.py +0 -0
  202. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/plugin_installer.py +0 -0
  203. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/protocol.py +0 -0
  204. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/systemd_cli.py +0 -0
  205. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/tail_cli.py +0 -0
  206. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/utils/__init__.py +0 -0
  207. {koru-0.1.331 → koru-0.1.332}/src/koru/autopilot/utils/client_helpers.py +0 -0
  208. {koru-0.1.331 → koru-0.1.332}/src/koru/bootstrap.py +0 -0
  209. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/__init__.py +0 -0
  210. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/__init__.py +0 -0
  211. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/application.py +0 -0
  212. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/commands/__init__.py +0 -0
  213. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/events/__init__.py +0 -0
  214. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/queries/__init__.py +0 -0
  215. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/autonomous_checkpoint/read_model.py +0 -0
  216. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/__init__.py +0 -0
  217. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/application.py +0 -0
  218. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/commands/__init__.py +0 -0
  219. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/events/__init__.py +0 -0
  220. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/queries/__init__.py +0 -0
  221. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/env_config/read_model.py +0 -0
  222. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/__init__.py +0 -0
  223. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/application.py +0 -0
  224. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/commands/__init__.py +0 -0
  225. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/events/__init__.py +0 -0
  226. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/queries/__init__.py +0 -0
  227. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/local_manager/read_model.py +0 -0
  228. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/__init__.py +0 -0
  229. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/application.py +0 -0
  230. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/commands/__init__.py +0 -0
  231. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/events/__init__.py +0 -0
  232. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/queries/__init__.py +0 -0
  233. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/planfile_queue/read_model.py +0 -0
  234. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/__init__.py +0 -0
  235. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/application.py +0 -0
  236. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/commands/__init__.py +0 -0
  237. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/events/__init__.py +0 -0
  238. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/queries/__init__.py +0 -0
  239. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/repairs/read_model.py +0 -0
  240. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/__init__.py +0 -0
  241. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/application.py +0 -0
  242. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/commands/__init__.py +0 -0
  243. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/events/__init__.py +0 -0
  244. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/queries/__init__.py +0 -0
  245. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/tasks/read_model.py +0 -0
  246. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/__init__.py +0 -0
  247. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/application.py +0 -0
  248. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/commands/__init__.py +0 -0
  249. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/events/__init__.py +0 -0
  250. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/queries/__init__.py +0 -0
  251. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/topology/read_model.py +0 -0
  252. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/__init__.py +0 -0
  253. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/application.py +0 -0
  254. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/commands/__init__.py +0 -0
  255. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/events/__init__.py +0 -0
  256. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/queries/__init__.py +0 -0
  257. {koru-0.1.331 → koru-0.1.332}/src/koru/bounded_contexts/wup/read_model.py +0 -0
  258. {koru-0.1.331 → koru-0.1.332}/src/koru/cli/__init__.py +0 -0
  259. {koru-0.1.331 → koru-0.1.332}/src/koru/cli/__main__.py +0 -0
  260. {koru-0.1.331 → koru-0.1.332}/src/koru/cli/commands.py +0 -0
  261. {koru-0.1.331 → koru-0.1.332}/src/koru/cli/parsers.py +0 -0
  262. {koru-0.1.331 → koru-0.1.332}/src/koru/cli.py +0 -0
  263. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_agent.py +0 -0
  264. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_agent_backends.py +0 -0
  265. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_auto.py +0 -0
  266. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_bootstrap.py +0 -0
  267. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_cleaned.py +0 -0
  268. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_context.py +0 -0
  269. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_doctor.py +0 -0
  270. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_events.py +0 -0
  271. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_gate.py +0 -0
  272. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_gc.py +0 -0
  273. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_ide.py +0 -0
  274. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_ide_router.py +0 -0
  275. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_imgl.py +0 -0
  276. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_init.py +0 -0
  277. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_local_serve.py +0 -0
  278. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_loop.py +0 -0
  279. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_parser.py +0 -0
  280. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_queue.py +0 -0
  281. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_refactor_planfile_handoff.py +0 -0
  282. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_replay.py +0 -0
  283. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_runtime_context.py +0 -0
  284. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_scan.py +0 -0
  285. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_self.py +0 -0
  286. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_serve.py +0 -0
  287. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_shim_builders.py +0 -0
  288. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_strategy.py +0 -0
  289. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_tagi.py +0 -0
  290. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_task.py +0 -0
  291. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_tools.py +0 -0
  292. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_topology.py +0 -0
  293. {koru-0.1.331 → koru-0.1.332}/src/koru/cli_watch.py +0 -0
  294. {koru-0.1.331 → koru-0.1.332}/src/koru/configurator.py +0 -0
  295. {koru-0.1.331 → koru-0.1.332}/src/koru/context.py +0 -0
  296. {koru-0.1.331 → koru-0.1.332}/src/koru/context_render.py +0 -0
  297. {koru-0.1.331 → koru-0.1.332}/src/koru/control_commands.py +0 -0
  298. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/__init__.py +0 -0
  299. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/domain_event.py +0 -0
  300. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/event_bus.py +0 -0
  301. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/event_log_projection.py +0 -0
  302. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/event_log_query.py +0 -0
  303. {koru-0.1.331 → koru-0.1.332}/src/koru/cqrs/event_store.py +0 -0
  304. {koru-0.1.331 → koru-0.1.332}/src/koru/data/koru-interface-registry.yaml +0 -0
  305. {koru-0.1.331 → koru-0.1.332}/src/koru/decision_engine.py +0 -0
  306. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/__init__.py +0 -0
  307. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/analyzer.py +0 -0
  308. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/batch.py +0 -0
  309. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/emitter.py +0 -0
  310. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/enums.py +0 -0
  311. {koru-0.1.331 → koru-0.1.332}/src/koru/deployment_events/models.py +0 -0
  312. {koru-0.1.331 → koru-0.1.332}/src/koru/deps_autorepair.py +0 -0
  313. {koru-0.1.331 → koru-0.1.332}/src/koru/dev_sync.py +0 -0
  314. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor.py +0 -0
  315. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_autonomous_streams.py +0 -0
  316. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_autopilot_checks.py +0 -0
  317. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_autopilot_debug.py +0 -0
  318. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_chat_control.py +0 -0
  319. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_constants.py +0 -0
  320. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_models.py +0 -0
  321. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_plugin_bundle.py +0 -0
  322. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_plugin_console.py +0 -0
  323. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_project_checks.py +0 -0
  324. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_project_health.py +0 -0
  325. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_registry_checks.py +0 -0
  326. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_render.py +0 -0
  327. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_reporting_checks.py +0 -0
  328. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_runner.py +0 -0
  329. {koru-0.1.331 → koru-0.1.332}/src/koru/doctor_runtime_checks.py +0 -0
  330. {koru-0.1.331 → koru-0.1.332}/src/koru/domain/env/__init__.py +0 -0
  331. {koru-0.1.331 → koru-0.1.332}/src/koru/dotenv_loader.py +0 -0
  332. {koru-0.1.331 → koru-0.1.332}/src/koru/dsl/__init__.py +0 -0
  333. {koru-0.1.331 → koru-0.1.332}/src/koru/env_config.py +0 -0
  334. {koru-0.1.331 → koru-0.1.332}/src/koru/env_flags.py +0 -0
  335. {koru-0.1.331 → koru-0.1.332}/src/koru/environment_profile.py +0 -0
  336. {koru-0.1.331 → koru-0.1.332}/src/koru/events.py +0 -0
  337. {koru-0.1.331 → koru-0.1.332}/src/koru/gate.py +0 -0
  338. {koru-0.1.331 → koru-0.1.332}/src/koru/gc.py +0 -0
  339. {koru-0.1.331 → koru-0.1.332}/src/koru/gc_cli_helpers.py +0 -0
  340. {koru-0.1.331 → koru-0.1.332}/src/koru/git_attribution.py +0 -0
  341. {koru-0.1.331 → koru-0.1.332}/src/koru/git_cli.py +0 -0
  342. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/__init__.py +0 -0
  343. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/base.py +0 -0
  344. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/bridge.py +0 -0
  345. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/gillm_client.py +0 -0
  346. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/gillm_recovery.py +0 -0
  347. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/ide_reload.py +0 -0
  348. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/registry.py +0 -0
  349. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/shared.py +0 -0
  350. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_adapters/vscode_family.py +0 -0
  351. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_client.py +0 -0
  352. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_control_cli.py +0 -0
  353. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_doctor_cli.py +0 -0
  354. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_router.py +0 -0
  355. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_runtime.py +0 -0
  356. {koru-0.1.331 → koru-0.1.332}/src/koru/ide_status_systemmap.py +0 -0
  357. {koru-0.1.331 → koru-0.1.332}/src/koru/init.py +0 -0
  358. {koru-0.1.331 → koru-0.1.332}/src/koru/init_host_environment.py +0 -0
  359. {koru-0.1.331 → koru-0.1.332}/src/koru/integration_ledger.py +0 -0
  360. {koru-0.1.331 → koru-0.1.332}/src/koru/integrations/__init__.py +0 -0
  361. {koru-0.1.331 → koru-0.1.332}/src/koru/integrations/imgl_autodiag.py +0 -0
  362. {koru-0.1.331 → koru-0.1.332}/src/koru/interface_registry.py +0 -0
  363. {koru-0.1.331 → koru-0.1.332}/src/koru/llm_reflect.py +0 -0
  364. {koru-0.1.331 → koru-0.1.332}/src/koru/local_manager_client.py +0 -0
  365. {koru-0.1.331 → koru-0.1.332}/src/koru/local_manager_state.py +0 -0
  366. {koru-0.1.331 → koru-0.1.332}/src/koru/local_service.py +0 -0
  367. {koru-0.1.331 → koru-0.1.332}/src/koru/loop.py +0 -0
  368. {koru-0.1.331 → koru-0.1.332}/src/koru/mcp_provision.py +0 -0
  369. {koru-0.1.331 → koru-0.1.332}/src/koru/mcp_server.py +0 -0
  370. {koru-0.1.331 → koru-0.1.332}/src/koru/observability_dsl.py +0 -0
  371. {koru-0.1.331 → koru-0.1.332}/src/koru/observability_events.py +0 -0
  372. {koru-0.1.331 → koru-0.1.332}/src/koru/observability_writer.py +0 -0
  373. {koru-0.1.331 → koru-0.1.332}/src/koru/planfile_queue.py +0 -0
  374. {koru-0.1.331 → koru-0.1.332}/src/koru/policy.py +0 -0
  375. {koru-0.1.331 → koru-0.1.332}/src/koru/project_pipeline.py +0 -0
  376. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/__init__.py +0 -0
  377. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/human.py +0 -0
  378. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/koru_queue_argv.py +0 -0
  379. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/local_manager.py +0 -0
  380. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/locking.py +0 -0
  381. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/loop.py +0 -0
  382. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/planfile_ticket_note.py +0 -0
  383. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/runner.py +0 -0
  384. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/runners.py +0 -0
  385. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/shell_evidence.py +0 -0
  386. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/ticket.py +0 -0
  387. {koru-0.1.331 → koru-0.1.332}/src/koru/queue/types.py +0 -0
  388. {koru-0.1.331 → koru-0.1.332}/src/koru/queue_clean.py +0 -0
  389. {koru-0.1.331 → koru-0.1.332}/src/koru/queue_cli_helpers.py +0 -0
  390. {koru-0.1.331 → koru-0.1.332}/src/koru/redup_integration.py +0 -0
  391. {koru-0.1.331 → koru-0.1.332}/src/koru/refactor_planfile_handoff.py +0 -0
  392. {koru-0.1.331 → koru-0.1.332}/src/koru/remote/__init__.py +0 -0
  393. {koru-0.1.331 → koru-0.1.332}/src/koru/remote/client.py +0 -0
  394. {koru-0.1.331 → koru-0.1.332}/src/koru/run_log.py +0 -0
  395. {koru-0.1.331 → koru-0.1.332}/src/koru/runtime.py +0 -0
  396. {koru-0.1.331 → koru-0.1.332}/src/koru/scan.py +0 -0
  397. {koru-0.1.331 → koru-0.1.332}/src/koru/scan_collection.py +0 -0
  398. {koru-0.1.331 → koru-0.1.332}/src/koru/scan_dedupe_policy.py +0 -0
  399. {koru-0.1.331 → koru-0.1.332}/src/koru/scan_render.py +0 -0
  400. {koru-0.1.331 → koru-0.1.332}/src/koru/scan_ticket_emission.py +0 -0
  401. {koru-0.1.331 → koru-0.1.332}/src/koru/scan_types.py +0 -0
  402. {koru-0.1.331 → koru-0.1.332}/src/koru/scripts/koru-autoloop.sh +0 -0
  403. {koru-0.1.331 → koru-0.1.332}/src/koru/self_control.py +0 -0
  404. {koru-0.1.331 → koru-0.1.332}/src/koru/semcod_tools.py +0 -0
  405. {koru-0.1.331 → koru-0.1.332}/src/koru/serve.py +0 -0
  406. {koru-0.1.331 → koru-0.1.332}/src/koru/stdio_events.py +0 -0
  407. {koru-0.1.331 → koru-0.1.332}/src/koru/tagi_integration.py +0 -0
  408. {koru-0.1.331 → koru-0.1.332}/src/koru/task_dedupe.py +0 -0
  409. {koru-0.1.331 → koru-0.1.332}/src/koru/task_intake.py +0 -0
  410. {koru-0.1.331 → koru-0.1.332}/src/koru/task_io.py +0 -0
  411. {koru-0.1.331 → koru-0.1.332}/src/koru/task_models.py +0 -0
  412. {koru-0.1.331 → koru-0.1.332}/src/koru/task_ticket.py +0 -0
  413. {koru-0.1.331 → koru-0.1.332}/src/koru/tasks.py +0 -0
  414. {koru-0.1.331 → koru-0.1.332}/src/koru/ticket_evidence.py +0 -0
  415. {koru-0.1.331 → koru-0.1.332}/src/koru/tillm_bridge.py +0 -0
  416. {koru-0.1.331 → koru-0.1.332}/src/koru/tools.py +0 -0
  417. {koru-0.1.331 → koru-0.1.332}/src/koru/topology.py +0 -0
  418. {koru-0.1.331 → koru-0.1.332}/src/koru/topology_cli.py +0 -0
  419. {koru-0.1.331 → koru-0.1.332}/src/koru/utils/__init__.py +0 -0
  420. {koru-0.1.331 → koru-0.1.332}/src/koru/utils/subprocess_runner.py +0 -0
  421. {koru-0.1.331 → koru-0.1.332}/src/koru/watch.py +0 -0
  422. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/__init__.py +0 -0
  423. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/cli.py +0 -0
  424. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/cli_main.py +0 -0
  425. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/__init__.py +0 -0
  426. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/app.py +0 -0
  427. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/server.py +0 -0
  428. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/session.py +0 -0
  429. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/static/wizard.css +0 -0
  430. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/static/wizard.js +0 -0
  431. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/gui/templates/wizard.html +0 -0
  432. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/ide.py +0 -0
  433. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/ide_install.py +0 -0
  434. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/llx.py +0 -0
  435. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/orchestrator.py +0 -0
  436. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/project.py +0 -0
  437. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/prompters.py +0 -0
  438. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/strategies.json +0 -0
  439. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates/cli-tool.json +0 -0
  440. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates/library.json +0 -0
  441. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates/ml-research.json +0 -0
  442. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates/registry.json +0 -0
  443. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates/web-app.json +0 -0
  444. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/templates.py +0 -0
  445. {koru-0.1.331 → koru-0.1.332}/src/koru/wizard/tree.py +0 -0
  446. {koru-0.1.331 → koru-0.1.332}/src/koru/wup_testql_compat.py +0 -0
  447. {koru-0.1.331 → koru-0.1.332}/src/koru.egg-info/SOURCES.txt +0 -0
  448. {koru-0.1.331 → koru-0.1.332}/src/koru.egg-info/dependency_links.txt +0 -0
  449. {koru-0.1.331 → koru-0.1.332}/src/koru.egg-info/entry_points.txt +0 -0
  450. {koru-0.1.331 → koru-0.1.332}/src/koru.egg-info/requires.txt +0 -0
  451. {koru-0.1.331 → koru-0.1.332}/src/koru.egg-info/top_level.txt +0 -0
  452. {koru-0.1.331 → koru-0.1.332}/src/koruapi/__init__.py +0 -0
  453. {koru-0.1.331 → koru-0.1.332}/src/koruapi/calibration_validator.py +0 -0
  454. {koru-0.1.331 → koru-0.1.332}/src/koruapi/cli.py +0 -0
  455. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard.py +0 -0
  456. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_config.py +0 -0
  457. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_context.py +0 -0
  458. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_html.py +0 -0
  459. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_http.py +0 -0
  460. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_observability.py +0 -0
  461. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_plugin_logs.py +0 -0
  462. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_projects.py +0 -0
  463. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_routes.py +0 -0
  464. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_runtime.py +0 -0
  465. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_serve.py +0 -0
  466. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_serve_utils.py +0 -0
  467. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_state.py +0 -0
  468. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_template.html +0 -0
  469. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_tickets.py +0 -0
  470. {koru-0.1.331 → koru-0.1.332}/src/koruapi/dashboard_topology.py +0 -0
  471. {koru-0.1.331 → koru-0.1.332}/src/koruapi/desktop_uri.py +0 -0
  472. {koru-0.1.331 → koru-0.1.332}/src/koruapi/env2llm_registry.py +0 -0
  473. {koru-0.1.331 → koru-0.1.332}/src/koruapi/integrations.py +0 -0
  474. {koru-0.1.331 → koru-0.1.332}/src/koruapi/invoke.py +0 -0
  475. {koru-0.1.331 → koru-0.1.332}/src/koruapi/invoke_handlers.py +0 -0
  476. {koru-0.1.331 → koru-0.1.332}/src/koruapi/local.py +0 -0
  477. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp.py +0 -0
  478. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server.py +0 -0
  479. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_cli.py +0 -0
  480. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_desktop_uri.py +0 -0
  481. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_dispatch.py +0 -0
  482. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_env2llm.py +0 -0
  483. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_ide.py +0 -0
  484. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_nlp2oql.py +0 -0
  485. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_planfile.py +0 -0
  486. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_runtime.py +0 -0
  487. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_schema.py +0 -0
  488. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_testql.py +0 -0
  489. {koru-0.1.331 → koru-0.1.332}/src/koruapi/mcp_server_transport.py +0 -0
  490. {koru-0.1.331 → koru-0.1.332}/src/koruapi/nlp2oql_bridge.py +0 -0
  491. {koru-0.1.331 → koru-0.1.332}/src/koruapi/openapi.py +0 -0
  492. {koru-0.1.331 → koru-0.1.332}/src/koruapi/runtime_insights.py +0 -0
  493. {koru-0.1.331 → koru-0.1.332}/src/koruapi/server.py +0 -0
  494. {koru-0.1.331 → koru-0.1.332}/src/koruapi/testql_bridge.py +0 -0
  495. {koru-0.1.331 → koru-0.1.332}/src/koruapi/topology_post.py +0 -0
  496. {koru-0.1.331 → koru-0.1.332}/src/korudsl/__init__.py +0 -0
  497. {koru-0.1.331 → koru-0.1.332}/src/korudsl/cli.py +0 -0
  498. {koru-0.1.331 → koru-0.1.332}/src/korudsl/library.py +0 -0
  499. {koru-0.1.331 → koru-0.1.332}/src/korudsl/transform.py +0 -0
  500. {koru-0.1.331 → koru-0.1.332}/src/koruide/__init__.py +0 -0
  501. {koru-0.1.331 → koru-0.1.332}/src/koruide/audit.py +0 -0
  502. {koru-0.1.331 → koru-0.1.332}/src/koruide/chat_history.py +0 -0
  503. {koru-0.1.331 → koru-0.1.332}/src/koruide/client.py +0 -0
  504. {koru-0.1.331 → koru-0.1.332}/src/koruide/command_catalog.py +0 -0
  505. {koru-0.1.331 → koru-0.1.332}/src/koruide/command_catalog_store.py +0 -0
  506. {koru-0.1.331 → koru-0.1.332}/src/koruide/command_picker.py +0 -0
  507. {koru-0.1.331 → koru-0.1.332}/src/koruide/command_scenario.py +0 -0
  508. {koru-0.1.331 → koru-0.1.332}/src/koruide/command_telemetry.py +0 -0
  509. {koru-0.1.331 → koru-0.1.332}/src/koruide/config.py +0 -0
  510. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/__init__.py +0 -0
  511. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/handlers.py +0 -0
  512. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/handlers_ack.py +0 -0
  513. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/handlers_drive.py +0 -0
  514. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/handlers_hello.py +0 -0
  515. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/handlers_plugin_event.py +0 -0
  516. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/metadata.py +0 -0
  517. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/protocol.py +0 -0
  518. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/server.py +0 -0
  519. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon/storage.py +0 -0
  520. {koru-0.1.331 → koru-0.1.332}/src/koruide/daemon_storage.py +0 -0
  521. {koru-0.1.331 → koru-0.1.332}/src/koruide/drive_orchestrator.py +0 -0
  522. {koru-0.1.331 → koru-0.1.332}/src/koruide/drive_policy.py +0 -0
  523. {koru-0.1.331 → koru-0.1.332}/src/koruide/host_setup.py +0 -0
  524. {koru-0.1.331 → koru-0.1.332}/src/koruide/ide.py +0 -0
  525. {koru-0.1.331 → koru-0.1.332}/src/koruide/ide_control.py +0 -0
  526. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/__init__.py +0 -0
  527. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/antigravity.py +0 -0
  528. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/base.py +0 -0
  529. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/cursor.py +0 -0
  530. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/fallback.py +0 -0
  531. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/jetbrains.py +0 -0
  532. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/registry.py +0 -0
  533. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/vscode.py +0 -0
  534. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/vscodium.py +0 -0
  535. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/windsurf.py +0 -0
  536. {koru-0.1.331 → koru-0.1.332}/src/koruide/ides/zed.py +0 -0
  537. {koru-0.1.331 → koru-0.1.332}/src/koruide/injector.py +0 -0
  538. {koru-0.1.331 → koru-0.1.332}/src/koruide/injector_backends.py +0 -0
  539. {koru-0.1.331 → koru-0.1.332}/src/koruide/injector_errors.py +0 -0
  540. {koru-0.1.331 → koru-0.1.332}/src/koruide/os_injector.py +0 -0
  541. {koru-0.1.331 → koru-0.1.332}/src/koruide/plugin_installer.py +0 -0
  542. {koru-0.1.331 → koru-0.1.332}/src/koruide/plugin_router.py +0 -0
  543. {koru-0.1.331 → koru-0.1.332}/src/koruide/plugin_version.py +0 -0
  544. {koru-0.1.331 → koru-0.1.332}/src/koruide/ports.py +0 -0
  545. {koru-0.1.331 → koru-0.1.332}/src/koruide/protocol.py +0 -0
  546. {koru-0.1.331 → koru-0.1.332}/src/koruide/socket.py +0 -0
  547. {koru-0.1.331 → koru-0.1.332}/src/koruide/strategy_prompt.py +0 -0
  548. {koru-0.1.331 → koru-0.1.332}/src/koruide/utils.py +0 -0
  549. {koru-0.1.331 → koru-0.1.332}/src/korullm/__init__.py +0 -0
  550. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/__init__.py +0 -0
  551. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/base.py +0 -0
  552. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/claude.py +0 -0
  553. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/codex.py +0 -0
  554. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/gpt.py +0 -0
  555. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/ide_chat.py +0 -0
  556. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/ollama.py +0 -0
  557. {koru-0.1.331 → koru-0.1.332}/src/korullm/strategies/registry.py +0 -0
  558. {koru-0.1.331 → koru-0.1.332}/src/korumesh/__init__.py +0 -0
  559. {koru-0.1.331 → koru-0.1.332}/src/korumesh/browser_capture.py +0 -0
  560. {koru-0.1.331 → koru-0.1.332}/src/korumesh/cli.py +0 -0
  561. {koru-0.1.331 → koru-0.1.332}/src/korumesh/cli_commands.py +0 -0
  562. {koru-0.1.331 → koru-0.1.332}/src/korumesh/cli_parser.py +0 -0
  563. {koru-0.1.331 → koru-0.1.332}/src/korumesh/codec.py +0 -0
  564. {koru-0.1.331 → koru-0.1.332}/src/korumesh/dashboard.py +0 -0
  565. {koru-0.1.331 → koru-0.1.332}/src/korumesh/dashboard_parse.py +0 -0
  566. {koru-0.1.331 → koru-0.1.332}/src/korumesh/envelope.py +0 -0
  567. {koru-0.1.331 → koru-0.1.332}/src/korumesh/grid_template.html +0 -0
  568. {koru-0.1.331 → koru-0.1.332}/src/korumesh/keys.py +0 -0
  569. {koru-0.1.331 → koru-0.1.332}/src/korumesh/store.py +0 -0
  570. {koru-0.1.331 → koru-0.1.332}/src/korumesh/store_persistence.py +0 -0
  571. {koru-0.1.331 → koru-0.1.332}/src/korumesh/transport.py +0 -0
  572. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/__init__.py +0 -0
  573. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/bootstrap.py +0 -0
  574. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/cli.py +0 -0
  575. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/cli_parser.py +0 -0
  576. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/diagnostics.py +0 -0
  577. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/lifecycle.py +0 -0
  578. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/paths.py +0 -0
  579. {koru-0.1.331 → koru-0.1.332}/src/koruobserve/providers_cli.py +0 -0
  580. {koru-0.1.331 → koru-0.1.332}/src/koruos/__init__.py +0 -0
  581. {koru-0.1.331 → koru-0.1.332}/src/koruvision/__init__.py +0 -0
  582. {koru-0.1.331 → koru-0.1.332}/src/koruvision/agent.py +0 -0
  583. {koru-0.1.331 → koru-0.1.332}/src/koruvision/capture.py +0 -0
  584. {koru-0.1.331 → koru-0.1.332}/src/koruvision/capture_mss.py +0 -0
  585. {koru-0.1.331 → koru-0.1.332}/src/koruvision/capture_probe.py +0 -0
  586. {koru-0.1.331 → koru-0.1.332}/src/koruvision/cli.py +0 -0
  587. {koru-0.1.331 → koru-0.1.332}/src/koruvision/cli_parser.py +0 -0
  588. {koru-0.1.331 → koru-0.1.332}/src/koruvision/mesh.py +0 -0
  589. {koru-0.1.331 → koru-0.1.332}/src/koruvision/portal_capture.py +0 -0
  590. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/__init__.py +0 -0
  591. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/base.py +0 -0
  592. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/browser_getdisplay.py +0 -0
  593. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/cli_tools.py +0 -0
  594. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/detector.py +0 -0
  595. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/env.py +0 -0
  596. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/grim.py +0 -0
  597. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/mss.py +0 -0
  598. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/obs_websocket.py +0 -0
  599. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/portal_screencast.py +0 -0
  600. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/portal_screenshot.py +0 -0
  601. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/registry.py +0 -0
  602. {koru-0.1.331 → koru-0.1.332}/src/koruvision/providers/screencast_session.py +0 -0
  603. {koru-0.1.331 → koru-0.1.332}/src/koruvision/scaling.py +0 -0
  604. {koru-0.1.331 → koru-0.1.332}/src/nlp2imgl/__init__.py +0 -0
  605. {koru-0.1.331 → koru-0.1.332}/src/nlp2imgl/control.py +0 -0
  606. {koru-0.1.331 → koru-0.1.332}/tests/test_activity_log.py +0 -0
  607. {koru-0.1.331 → koru-0.1.332}/tests/test_agent_backend_runtime.py +0 -0
  608. {koru-0.1.331 → koru-0.1.332}/tests/test_agent_backends.py +0 -0
  609. {koru-0.1.331 → koru-0.1.332}/tests/test_agent_backends_cli.py +0 -0
  610. {koru-0.1.331 → koru-0.1.332}/tests/test_agent_cli.py +0 -0
  611. {koru-0.1.331 → koru-0.1.332}/tests/test_agents.py +0 -0
  612. {koru-0.1.331 → koru-0.1.332}/tests/test_autoloop_cli.py +0 -0
  613. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous.py +0 -0
  614. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_bridge.py +0 -0
  615. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_chat_activity_analyzer.py +0 -0
  616. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_chat_activity_config.py +0 -0
  617. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_chat_activity_text.py +0 -0
  618. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_chat_activity_tickets.py +0 -0
  619. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_config.py +0 -0
  620. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_drive_retry.py +0 -0
  621. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_events.py +0 -0
  622. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_cycle_skip_conditions.py +0 -0
  623. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_daemon_metadata.py +0 -0
  624. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_diag_markers.py +0 -0
  625. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_diagnostics.py +0 -0
  626. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_gillm_fallback.py +0 -0
  627. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_loop_runner.py +0 -0
  628. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_nlp2uri_drive.py +0 -0
  629. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_onboarding.py +0 -0
  630. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_operator.py +0 -0
  631. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_operator_reload.py +0 -0
  632. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_operator_unsupported_ide.py +0 -0
  633. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_parser_detection.py +0 -0
  634. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_plugin_lifecycle.py +0 -0
  635. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_plugin_runtime.py +0 -0
  636. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_process_detection.py +0 -0
  637. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_process_guard.py +0 -0
  638. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_readiness.py +0 -0
  639. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_redrive_cooldown.py +0 -0
  640. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_runtime.py +0 -0
  641. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_scenarios.py +0 -0
  642. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_startup.py +0 -0
  643. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_submit_strategy.py +0 -0
  644. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomous_up.py +0 -0
  645. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_config.py +0 -0
  646. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_env.py +0 -0
  647. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_environment.py +0 -0
  648. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_events.py +0 -0
  649. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_policy_decision.py +0 -0
  650. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_prompts.py +0 -0
  651. {koru-0.1.331 → koru-0.1.332}/tests/test_autonomy_strategy.py +0 -0
  652. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_audit.py +0 -0
  653. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_cli.py +0 -0
  654. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_cli_direct_drive.py +0 -0
  655. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_client_drive_errors.py +0 -0
  656. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_commands_drive.py +0 -0
  657. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_commands_handoff.py +0 -0
  658. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_commands_manage.py +0 -0
  659. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_commands_shutdown.py +0 -0
  660. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_commands_status.py +0 -0
  661. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_config.py +0 -0
  662. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_daemon.py +0 -0
  663. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_host_setup.py +0 -0
  664. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_ide.py +0 -0
  665. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_jetbrains_scaffold.py +0 -0
  666. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_lane_context.py +0 -0
  667. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_plugin_installer.py +0 -0
  668. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_protocol.py +0 -0
  669. {koru-0.1.331 → koru-0.1.332}/tests/test_autopilot_socket_path.py +0 -0
  670. {koru-0.1.331 → koru-0.1.332}/tests/test_bootstrap.py +0 -0
  671. {koru-0.1.331 → koru-0.1.332}/tests/test_calibration_validator.py +0 -0
  672. {koru-0.1.331 → koru-0.1.332}/tests/test_capture_host_template.py +0 -0
  673. {koru-0.1.331 → koru-0.1.332}/tests/test_chat_history.py +0 -0
  674. {koru-0.1.331 → koru-0.1.332}/tests/test_cli.py +0 -0
  675. {koru-0.1.331 → koru-0.1.332}/tests/test_cli_shim_builders.py +0 -0
  676. {koru-0.1.331 → koru-0.1.332}/tests/test_code2llm_discovery.py +0 -0
  677. {koru-0.1.331 → koru-0.1.332}/tests/test_command_catalog_store.py +0 -0
  678. {koru-0.1.331 → koru-0.1.332}/tests/test_command_picker.py +0 -0
  679. {koru-0.1.331 → koru-0.1.332}/tests/test_command_telemetry.py +0 -0
  680. {koru-0.1.331 → koru-0.1.332}/tests/test_configurator.py +0 -0
  681. {koru-0.1.331 → koru-0.1.332}/tests/test_configurator_toggle.py +0 -0
  682. {koru-0.1.331 → koru-0.1.332}/tests/test_context.py +0 -0
  683. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_autonomous_checkpoint_context.py +0 -0
  684. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_env_config_context.py +0 -0
  685. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_local_manager_context.py +0 -0
  686. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_planfile_queue_context.py +0 -0
  687. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_primitives.py +0 -0
  688. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_repairs_context.py +0 -0
  689. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_tasks_context.py +0 -0
  690. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_topology_context.py +0 -0
  691. {koru-0.1.331 → koru-0.1.332}/tests/test_cqrs_wup_context.py +0 -0
  692. {koru-0.1.331 → koru-0.1.332}/tests/test_cycle_trace.py +0 -0
  693. {koru-0.1.331 → koru-0.1.332}/tests/test_dashboard_html.py +0 -0
  694. {koru-0.1.331 → koru-0.1.332}/tests/test_dashboard_projects_by_ide.py +0 -0
  695. {koru-0.1.331 → koru-0.1.332}/tests/test_dashboard_ticket_handlers.py +0 -0
  696. {koru-0.1.331 → koru-0.1.332}/tests/test_dashboard_topology_post.py +0 -0
  697. {koru-0.1.331 → koru-0.1.332}/tests/test_decision_arbiter.py +0 -0
  698. {koru-0.1.331 → koru-0.1.332}/tests/test_decision_engine.py +0 -0
  699. {koru-0.1.331 → koru-0.1.332}/tests/test_decision_trace.py +0 -0
  700. {koru-0.1.331 → koru-0.1.332}/tests/test_deployment_events.py +0 -0
  701. {koru-0.1.331 → koru-0.1.332}/tests/test_deps_autorepair.py +0 -0
  702. {koru-0.1.331 → koru-0.1.332}/tests/test_desktop_uri.py +0 -0
  703. {koru-0.1.331 → koru-0.1.332}/tests/test_dev_sync.py +0 -0
  704. {koru-0.1.331 → koru-0.1.332}/tests/test_docker_capture.py +0 -0
  705. {koru-0.1.331 → koru-0.1.332}/tests/test_docker_e2e.py +0 -0
  706. {koru-0.1.331 → koru-0.1.332}/tests/test_docker_ide_matrix.py +0 -0
  707. {koru-0.1.331 → koru-0.1.332}/tests/test_docker_ide_matrix_config.py +0 -0
  708. {koru-0.1.331 → koru-0.1.332}/tests/test_docs_ide_control_surfaces.py +0 -0
  709. {koru-0.1.331 → koru-0.1.332}/tests/test_doctor.py +0 -0
  710. {koru-0.1.331 → koru-0.1.332}/tests/test_doctor_facade.py +0 -0
  711. {koru-0.1.331 → koru-0.1.332}/tests/test_doctor_koru_auto_probe.py +0 -0
  712. {koru-0.1.331 → koru-0.1.332}/tests/test_doctor_reporting_checks.py +0 -0
  713. {koru-0.1.331 → koru-0.1.332}/tests/test_dotenv_loader.py +0 -0
  714. {koru-0.1.331 → koru-0.1.332}/tests/test_drive_orchestrator.py +0 -0
  715. {koru-0.1.331 → koru-0.1.332}/tests/test_drive_repair_policy.py +0 -0
  716. {koru-0.1.331 → koru-0.1.332}/tests/test_e2e.py +0 -0
  717. {koru-0.1.331 → koru-0.1.332}/tests/test_env2llm_registry.py +0 -0
  718. {koru-0.1.331 → koru-0.1.332}/tests/test_env_config.py +0 -0
  719. {koru-0.1.331 → koru-0.1.332}/tests/test_env_flags.py +0 -0
  720. {koru-0.1.331 → koru-0.1.332}/tests/test_environment_profile.py +0 -0
  721. {koru-0.1.331 → koru-0.1.332}/tests/test_events.py +0 -0
  722. {koru-0.1.331 → koru-0.1.332}/tests/test_gate.py +0 -0
  723. {koru-0.1.331 → koru-0.1.332}/tests/test_gc.py +0 -0
  724. {koru-0.1.331 → koru-0.1.332}/tests/test_gc_cli_helpers.py +0 -0
  725. {koru-0.1.331 → koru-0.1.332}/tests/test_gillm_ide_client.py +0 -0
  726. {koru-0.1.331 → koru-0.1.332}/tests/test_gillm_recovery.py +0 -0
  727. {koru-0.1.331 → koru-0.1.332}/tests/test_git_attribution.py +0 -0
  728. {koru-0.1.331 → koru-0.1.332}/tests/test_git_cli.py +0 -0
  729. {koru-0.1.331 → koru-0.1.332}/tests/test_healing_webhook_split.py +0 -0
  730. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_adapters.py +0 -0
  731. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_client.py +0 -0
  732. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_client_contract.py +0 -0
  733. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_command_catalog.py +0 -0
  734. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_doctor_cli.py +0 -0
  735. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_operator_guidance.py +0 -0
  736. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_reload.py +0 -0
  737. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_router.py +0 -0
  738. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_runtime.py +0 -0
  739. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_status_systemmap.py +0 -0
  740. {koru-0.1.331 → koru-0.1.332}/tests/test_ide_work.py +0 -0
  741. {koru-0.1.331 → koru-0.1.332}/tests/test_imgl_integration.py +0 -0
  742. {koru-0.1.331 → koru-0.1.332}/tests/test_init.py +0 -0
  743. {koru-0.1.331 → koru-0.1.332}/tests/test_injection_moved_to_gillm.py +0 -0
  744. {koru-0.1.331 → koru-0.1.332}/tests/test_install_checks.py +0 -0
  745. {koru-0.1.331 → koru-0.1.332}/tests/test_install_manager.py +0 -0
  746. {koru-0.1.331 → koru-0.1.332}/tests/test_integration_ledger.py +0 -0
  747. {koru-0.1.331 → koru-0.1.332}/tests/test_interface_registry.py +0 -0
  748. {koru-0.1.331 → koru-0.1.332}/tests/test_koru_browser_stack.py +0 -0
  749. {koru-0.1.331 → koru-0.1.332}/tests/test_koru_gate_capture.py +0 -0
  750. {koru-0.1.331 → koru-0.1.332}/tests/test_koru_queue_argv.py +0 -0
  751. {koru-0.1.331 → koru-0.1.332}/tests/test_koruapi.py +0 -0
  752. {koru-0.1.331 → koru-0.1.332}/tests/test_koruapi_transports.py +0 -0
  753. {koru-0.1.331 → koru-0.1.332}/tests/test_korudsl.py +0 -0
  754. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_bridges.py +0 -0
  755. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_client.py +0 -0
  756. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_daemon_handlers_ack.py +0 -0
  757. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_daemon_handlers_console_log.py +0 -0
  758. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_daemon_handlers_drive.py +0 -0
  759. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_daemon_handlers_hello.py +0 -0
  760. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_daemon_handlers_plugin_event.py +0 -0
  761. {koru-0.1.331 → koru-0.1.332}/tests/test_koruide_ports.py +0 -0
  762. {koru-0.1.331 → koru-0.1.332}/tests/test_korumesh_envelope.py +0 -0
  763. {koru-0.1.331 → koru-0.1.332}/tests/test_korumesh_store.py +0 -0
  764. {koru-0.1.331 → koru-0.1.332}/tests/test_korumesh_transport.py +0 -0
  765. {koru-0.1.331 → koru-0.1.332}/tests/test_koruobserve_diagnostics.py +0 -0
  766. {koru-0.1.331 → koru-0.1.332}/tests/test_koruobserve_lifecycle.py +0 -0
  767. {koru-0.1.331 → koru-0.1.332}/tests/test_koruvision_agent.py +0 -0
  768. {koru-0.1.331 → koru-0.1.332}/tests/test_koruvision_capture.py +0 -0
  769. {koru-0.1.331 → koru-0.1.332}/tests/test_koruvision_mesh.py +0 -0
  770. {koru-0.1.331 → koru-0.1.332}/tests/test_lane_plugin_matching.py +0 -0
  771. {koru-0.1.331 → koru-0.1.332}/tests/test_llm_reflect.py +0 -0
  772. {koru-0.1.331 → koru-0.1.332}/tests/test_llm_strategies.py +0 -0
  773. {koru-0.1.331 → koru-0.1.332}/tests/test_local_service.py +0 -0
  774. {koru-0.1.331 → koru-0.1.332}/tests/test_loop.py +0 -0
  775. {koru-0.1.331 → koru-0.1.332}/tests/test_mcp_provision.py +0 -0
  776. {koru-0.1.331 → koru-0.1.332}/tests/test_mcp_server.py +0 -0
  777. {koru-0.1.331 → koru-0.1.332}/tests/test_mcp_server_split.py +0 -0
  778. {koru-0.1.331 → koru-0.1.332}/tests/test_nlp2oql_bridge.py +0 -0
  779. {koru-0.1.331 → koru-0.1.332}/tests/test_nlp2uri_ide_control_gate.py +0 -0
  780. {koru-0.1.331 → koru-0.1.332}/tests/test_observability_dsl.py +0 -0
  781. {koru-0.1.331 → koru-0.1.332}/tests/test_observation_mesh_e2e.py +0 -0
  782. {koru-0.1.331 → koru-0.1.332}/tests/test_observe_providers_cli.py +0 -0
  783. {koru-0.1.331 → koru-0.1.332}/tests/test_operator_pipeline.py +0 -0
  784. {koru-0.1.331 → koru-0.1.332}/tests/test_package_deduplication.py +0 -0
  785. {koru-0.1.331 → koru-0.1.332}/tests/test_planfile_queue.py +0 -0
  786. {koru-0.1.331 → koru-0.1.332}/tests/test_planning_llm.py +0 -0
  787. {koru-0.1.331 → koru-0.1.332}/tests/test_plugin_router.py +0 -0
  788. {koru-0.1.331 → koru-0.1.332}/tests/test_policy.py +0 -0
  789. {koru-0.1.331 → koru-0.1.332}/tests/test_post_run_verify.py +0 -0
  790. {koru-0.1.331 → koru-0.1.332}/tests/test_provider_browser_upload.py +0 -0
  791. {koru-0.1.331 → koru-0.1.332}/tests/test_provider_obs.py +0 -0
  792. {koru-0.1.331 → koru-0.1.332}/tests/test_provider_portal_screencast.py +0 -0
  793. {koru-0.1.331 → koru-0.1.332}/tests/test_pyproject_metadata.py +0 -0
  794. {koru-0.1.331 → koru-0.1.332}/tests/test_queue_clean.py +0 -0
  795. {koru-0.1.331 → koru-0.1.332}/tests/test_queue_cli_helpers.py +0 -0
  796. {koru-0.1.331 → koru-0.1.332}/tests/test_redup_integration.py +0 -0
  797. {koru-0.1.331 → koru-0.1.332}/tests/test_refactor_planfile_handoff.py +0 -0
  798. {koru-0.1.331 → koru-0.1.332}/tests/test_reflection_policy.py +0 -0
  799. {koru-0.1.331 → koru-0.1.332}/tests/test_regix_taskfile.py +0 -0
  800. {koru-0.1.331 → koru-0.1.332}/tests/test_remote_control.py +0 -0
  801. {koru-0.1.331 → koru-0.1.332}/tests/test_replay_actions.py +0 -0
  802. {koru-0.1.331 → koru-0.1.332}/tests/test_run_log.py +0 -0
  803. {koru-0.1.331 → koru-0.1.332}/tests/test_runtime.py +0 -0
  804. {koru-0.1.331 → koru-0.1.332}/tests/test_runtime_insights.py +0 -0
  805. {koru-0.1.331 → koru-0.1.332}/tests/test_scan.py +0 -0
  806. {koru-0.1.331 → koru-0.1.332}/tests/test_scan_phase.py +0 -0
  807. {koru-0.1.331 → koru-0.1.332}/tests/test_scan_split.py +0 -0
  808. {koru-0.1.331 → koru-0.1.332}/tests/test_screencast_session.py +0 -0
  809. {koru-0.1.331 → koru-0.1.332}/tests/test_self_control.py +0 -0
  810. {koru-0.1.331 → koru-0.1.332}/tests/test_semcod_tools.py +0 -0
  811. {koru-0.1.331 → koru-0.1.332}/tests/test_serve.py +0 -0
  812. {koru-0.1.331 → koru-0.1.332}/tests/test_shell_evidence.py +0 -0
  813. {koru-0.1.331 → koru-0.1.332}/tests/test_stdio_autonomous_jsonl.py +0 -0
  814. {koru-0.1.331 → koru-0.1.332}/tests/test_strategy_metadata_accessors.py +0 -0
  815. {koru-0.1.331 → koru-0.1.332}/tests/test_strategy_prompt.py +0 -0
  816. {koru-0.1.331 → koru-0.1.332}/tests/test_structured_report.py +0 -0
  817. {koru-0.1.331 → koru-0.1.332}/tests/test_sync_plugin_build.py +0 -0
  818. {koru-0.1.331 → koru-0.1.332}/tests/test_tasks.py +0 -0
  819. {koru-0.1.331 → koru-0.1.332}/tests/test_testql_bridge.py +0 -0
  820. {koru-0.1.331 → koru-0.1.332}/tests/test_ticket_evidence.py +0 -0
  821. {koru-0.1.331 → koru-0.1.332}/tests/test_tools.py +0 -0
  822. {koru-0.1.331 → koru-0.1.332}/tests/test_topology.py +0 -0
  823. {koru-0.1.331 → koru-0.1.332}/tests/test_topology_cli.py +0 -0
  824. {koru-0.1.331 → koru-0.1.332}/tests/test_vdisplay_control_fallback.py +0 -0
  825. {koru-0.1.331 → koru-0.1.332}/tests/test_verification_cycle_integration.py +0 -0
  826. {koru-0.1.331 → koru-0.1.332}/tests/test_verification_engine.py +0 -0
  827. {koru-0.1.331 → koru-0.1.332}/tests/test_vision_interval_floor.py +0 -0
  828. {koru-0.1.331 → koru-0.1.332}/tests/test_vision_provider_mime.py +0 -0
  829. {koru-0.1.331 → koru-0.1.332}/tests/test_watch.py +0 -0
  830. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_cli.py +0 -0
  831. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_env_e2e.py +0 -0
  832. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_gui.py +0 -0
  833. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_ide.py +0 -0
  834. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_ide_extras.py +0 -0
  835. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_llx.py +0 -0
  836. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_project.py +0 -0
  837. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_templates.py +0 -0
  838. {koru-0.1.331 → koru-0.1.332}/tests/test_wizard_tree.py +0 -0
  839. {koru-0.1.331 → koru-0.1.332}/tests/test_wup_taskfile.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: koru
3
- Version: 0.1.331
3
+ Version: 0.1.332
4
4
  Summary: Closed-loop automation across semcod/* repositories.
5
5
  Author: Semcod
6
6
  Author-email: Tom Sapletta <tom@sapletta.com>
@@ -156,11 +156,11 @@ Dynamic: license-file
156
156
 
157
157
  ## AI Cost Tracking
158
158
 
159
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.331-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
160
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$26.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-149.7h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
159
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.332-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
160
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$27.58-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-150.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
161
161
 
162
- - 🤖 **LLM usage:** $26.9493 (437 commits)
163
- - 👤 **Human dev:** ~$14971 (149.7h @ $100/h, 30min dedup)
162
+ - 🤖 **LLM usage:** $27.5767 (438 commits)
163
+ - 👤 **Human dev:** ~$15021 (150.2h @ $100/h, 30min dedup)
164
164
 
165
165
  Generated on 2026-06-11 using [openrouter/deep/deep-v4-pro](https://openrouter.ai/deep/deep-v4-pro)
166
166
 
@@ -7,11 +7,11 @@
7
7
 
8
8
  ## AI Cost Tracking
9
9
 
10
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.331-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
11
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$26.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-149.7h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
10
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.332-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
11
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$27.58-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-150.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
12
12
 
13
- - 🤖 **LLM usage:** $26.9493 (437 commits)
14
- - 👤 **Human dev:** ~$14971 (149.7h @ $100/h, 30min dedup)
13
+ - 🤖 **LLM usage:** $27.5767 (438 commits)
14
+ - 👤 **Human dev:** ~$15021 (150.2h @ $100/h, 30min dedup)
15
15
 
16
16
  Generated on 2026-06-11 using [openrouter/deep/deep-v4-pro](https://openrouter.ai/deep/deep-v4-pro)
17
17
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "koru"
7
- version = "0.1.331"
7
+ version = "0.1.332"
8
8
  description = "Closed-loop automation across semcod/* repositories."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12,<3.14"
@@ -281,6 +281,77 @@ class Nlp2UriDesktopBackend:
281
281
  return _nlp2uri_desktop_send(prompt, ide=ide, submit=submit, dry_run=self.dry_run)
282
282
 
283
283
 
284
+ def _build_plugin_socket_backend(client: IDEControlClient | None) -> AgentBackend:
285
+ if client is None:
286
+ raise ValueError("plugin_socket backend requires an IDEControlClient")
287
+ return PluginSocketBackend(client=client)
288
+
289
+ def _build_mcp_tool_backend(mcp_server: str | None) -> AgentBackend:
290
+ return McpToolBackend(mcp_server=mcp_server)
291
+
292
+ def _build_vendor_agent_cli_backend(shell_client_id: str | None) -> AgentBackend:
293
+ return TillmShellBackend(
294
+ client_id=shell_client_id or os.environ.get("KORU_TILLM_CLIENT", "aider"),
295
+ execute=os.environ.get("KORU_TILLM_DRY_RUN", "").strip().lower()
296
+ not in {"1", "true", "yes", "on"},
297
+ )
298
+
299
+ def _build_gillm_gui_backend() -> AgentBackend:
300
+ return GillmGuiBackend(client=build_gillm_ide_client())
301
+
302
+ def _build_os_injector_backend() -> AgentBackend:
303
+ profile = os.environ.get("KORU_OS_INJECTOR_PROFILE", "").strip()
304
+ if not profile:
305
+ raise ValueError("os_injector backend requires KORU_OS_INJECTOR_PROFILE")
306
+ raw_cfg = os.environ.get("KORU_OS_INJECTOR_CONFIG", "").strip()
307
+ cfg = Path(raw_cfg).expanduser().resolve() if raw_cfg else None
308
+ return OsInjectorBackend(profile_id=profile, config_path=cfg)
309
+
310
+ def _build_nlp2uri_desktop_backend() -> AgentBackend:
311
+ dry = os.environ.get("KORU_NLP2URI_DRY_RUN", "").strip().lower() in {
312
+ "1", "true", "yes", "on",
313
+ }
314
+ return Nlp2UriDesktopBackend(dry_run=dry)
315
+
316
+ def _build_imgl_desktop_backend() -> AgentBackend:
317
+ dry = os.environ.get("KORU_IMGL_DRY_RUN", "").strip().lower() in {
318
+ "1", "true", "yes", "on",
319
+ }
320
+ return ImglDesktopBackend(dry_run=dry)
321
+
322
+ def _build_vdisplay_control_backend() -> AgentBackend:
323
+ dry = os.environ.get("KORU_VDISPLAY_DRY_RUN", "").strip().lower() in {
324
+ "1", "true", "yes", "on",
325
+ }
326
+ return VdisplayControlBackend(dry_run=dry)
327
+
328
+ def _build_noop_backend(noop_reason: str) -> AgentBackend:
329
+ return NoopBackend(reason=noop_reason)
330
+
331
+ _BACKEND_BUILDERS = {
332
+ "plugin_socket": _build_plugin_socket_backend,
333
+ "vscode_family_plugin_socket": _build_plugin_socket_backend,
334
+ "mcp_tool": _build_mcp_tool_backend,
335
+ "mcp_stdio_server": _build_mcp_tool_backend,
336
+ "vendor_agent_cli": _build_vendor_agent_cli_backend,
337
+ "gillm_gui": _build_gillm_gui_backend,
338
+ "gillm_gui_driver": _build_gillm_gui_backend,
339
+ "os_injector": _build_os_injector_backend,
340
+ "os_keyboard_injector": _build_os_injector_backend,
341
+ "nlp2uri_desktop": _build_nlp2uri_desktop_backend,
342
+ "nlp2uri_desktop_window": _build_nlp2uri_desktop_backend,
343
+ "imgl": _build_imgl_desktop_backend,
344
+ "imgl_vision": _build_imgl_desktop_backend,
345
+ "imgl_desktop": _build_imgl_desktop_backend,
346
+ "imgl_vision_driver": _build_imgl_desktop_backend,
347
+ "vdisplay": _build_vdisplay_control_backend,
348
+ "vdisplay_control": _build_vdisplay_control_backend,
349
+ "vdisplay_semantic_control": _build_vdisplay_control_backend,
350
+ "none": _build_noop_backend,
351
+ "noop": _build_noop_backend,
352
+ "": _build_noop_backend,
353
+ }
354
+
284
355
  def build_agent_backend(
285
356
  *,
286
357
  backend_id: str,
@@ -296,44 +367,18 @@ def build_agent_backend(
296
367
  """
297
368
  bid = (backend_id or "").strip().lower().replace("-", "_")
298
369
  normalized = normalize_agent_backend_id(backend_id or "")
299
- if bid == "plugin_socket" or normalized == "vscode_family_plugin_socket":
300
- if client is None:
301
- raise ValueError("plugin_socket backend requires an IDEControlClient")
302
- return PluginSocketBackend(client=client)
303
- if bid == "mcp_tool" or normalized == "mcp_stdio_server":
304
- return McpToolBackend(mcp_server=mcp_server)
305
- if normalized == "vendor_agent_cli":
306
- return TillmShellBackend(
307
- client_id=shell_client_id or os.environ.get("KORU_TILLM_CLIENT", "aider"),
308
- execute=os.environ.get("KORU_TILLM_DRY_RUN", "").strip().lower()
309
- not in {"1", "true", "yes", "on"},
310
- )
311
- if bid == "gillm_gui" or normalized == "gillm_gui_driver":
312
- return GillmGuiBackend(client=build_gillm_ide_client())
313
- if bid == "os_injector" or normalized == "os_keyboard_injector":
314
- profile = os.environ.get("KORU_OS_INJECTOR_PROFILE", "").strip()
315
- if not profile:
316
- raise ValueError("os_injector backend requires KORU_OS_INJECTOR_PROFILE")
317
- raw_cfg = os.environ.get("KORU_OS_INJECTOR_CONFIG", "").strip()
318
- cfg = Path(raw_cfg).expanduser().resolve() if raw_cfg else None
319
- return OsInjectorBackend(profile_id=profile, config_path=cfg)
320
- if bid == "nlp2uri_desktop" or normalized == "nlp2uri_desktop_window":
321
- dry = os.environ.get("KORU_NLP2URI_DRY_RUN", "").strip().lower() in {
322
- "1", "true", "yes", "on",
323
- }
324
- return Nlp2UriDesktopBackend(dry_run=dry)
325
- if bid in ("imgl", "imgl_vision", "imgl_desktop") or normalized == "imgl_vision_driver":
326
- dry = os.environ.get("KORU_IMGL_DRY_RUN", "").strip().lower() in {
327
- "1", "true", "yes", "on",
328
- }
329
- return ImglDesktopBackend(dry_run=dry)
330
- if bid in ("vdisplay", "vdisplay_control") or normalized == "vdisplay_semantic_control":
331
- dry = os.environ.get("KORU_VDISPLAY_DRY_RUN", "").strip().lower() in {
332
- "1", "true", "yes", "on",
333
- }
334
- return VdisplayControlBackend(dry_run=dry)
335
- if bid in ("none", "noop", ""):
336
- return NoopBackend(reason=noop_reason)
370
+ builder = _BACKEND_BUILDERS.get(bid) or _BACKEND_BUILDERS.get(normalized)
371
+ if builder:
372
+ if "client" in builder.__code__.co_varnames and client is not None:
373
+ return builder(client=client)
374
+ elif "mcp_server" in builder.__code__.co_varnames and mcp_server is not None:
375
+ return builder(mcp_server=mcp_server)
376
+ elif "shell_client_id" in builder.__code__.co_varnames and shell_client_id is not None:
377
+ return builder(shell_client_id=shell_client_id)
378
+ elif "noop_reason" in builder.__code__.co_varnames:
379
+ return builder(noop_reason=noop_reason)
380
+ else:
381
+ return builder()
337
382
  raise ValueError(f"unknown agent backend id: {backend_id!r}")
338
383
 
339
384
 
@@ -87,7 +87,8 @@ def imgl_desktop_transport_enabled() -> bool:
87
87
 
88
88
  def default_image_path() -> Path:
89
89
  if _IMGL_DIRECT:
90
- return _default_image_path()
90
+ p = _default_image_path()
91
+ return Path(p) if isinstance(p, (str, bytes, os.PathLike)) else p
91
92
  raw = os.environ.get("KORU_IMGL_IMAGE", "/tmp/koru-imgl-screen.png").strip()
92
93
  return Path(raw).expanduser()
93
94
 
@@ -619,6 +619,28 @@ def send_chat(
619
619
  "fallback_from": "plugin",
620
620
  }
621
621
 
622
+
623
+ def _resolve_vql_chat_target(ide: str, hints: dict) -> dict | None:
624
+ """Resolve chat target using VQL metadata for precise mouse nav on second monitor (DP-1).
625
+ Used in autonomous PyCharm/JetBrains control via vdisplay + VQL centers (e.g. 1024,640).
626
+ """
627
+ vql_target = get_vql_target(ide, role="input", name_contains="chat") or get_vql_target(ide, role="input") or get_vql_target(ide, label="chat")
628
+ if not vql_target and ide in ("pycharm", "jetbrains"):
629
+ vql_target = {"click_center": {"x": 1024, "y": 640, "note": "PyCharm/JetBrains editor area on DP-1 second monitor from VQL"}}
630
+ if vql_target:
631
+ return {
632
+ "ok": True,
633
+ "count": 1,
634
+ "selected": {
635
+ "id": vql_target.get("id", "vql-chat"),
636
+ "backend": "vql",
637
+ "role": vql_target.get("role"),
638
+ "click_point": vql_target.get("click_center"),
639
+ "note": f"VQL target from {vql_target.get('source', 'VQL analysis for second monitor')}"
640
+ }
641
+ }
642
+ return None
643
+
622
644
  canon = _canonical_ide(ide)
623
645
  if canon in {"jetbrains", "pycharm"}:
624
646
  try:
@@ -668,22 +690,9 @@ def send_chat(
668
690
 
669
691
  selector, found = _find_first_selector(ide=ide, selectors=_chat_selectors_for(ide))
670
692
  if selector is None:
671
- # Use VQL target as fallback for chat/input when vision/selector misses (closes observe->act gap)
672
- vql_target = get_vql_target(ide, role="input", name_contains="Chat") or get_vql_target(ide, role="input") or get_vql_target(ide, label="chat")
673
- if vql_target:
674
- # Inject synthetic selector with VQL center for downstream set/click
693
+ found = _resolve_vql_chat_target(ide, hints)
694
+ if found:
675
695
  selector = {"role": "input", "name_contains": "Chat"}
676
- found = {
677
- "ok": True,
678
- "count": 1,
679
- "selected": {
680
- "id": vql_target.get("id", "vql-chat"),
681
- "backend": "vql",
682
- "role": vql_target.get("role"),
683
- "click_point": vql_target.get("click_center"),
684
- "note": f"VQL target from {vql_target.get('source')}"
685
- }
686
- }
687
696
  else:
688
697
  return {
689
698
  "ok": False,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: koru
3
- Version: 0.1.331
3
+ Version: 0.1.332
4
4
  Summary: Closed-loop automation across semcod/* repositories.
5
5
  Author: Semcod
6
6
  Author-email: Tom Sapletta <tom@sapletta.com>
@@ -156,11 +156,11 @@ Dynamic: license-file
156
156
 
157
157
  ## AI Cost Tracking
158
158
 
159
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.331-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
160
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$26.95-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-149.7h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
159
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.332-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
160
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$27.58-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-150.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fdeep%2Fdeep--v4--pro-lightgrey)
161
161
 
162
- - 🤖 **LLM usage:** $26.9493 (437 commits)
163
- - 👤 **Human dev:** ~$14971 (149.7h @ $100/h, 30min dedup)
162
+ - 🤖 **LLM usage:** $27.5767 (438 commits)
163
+ - 👤 **Human dev:** ~$15021 (150.2h @ $100/h, 30min dedup)
164
164
 
165
165
  Generated on 2026-06-11 using [openrouter/deep/deep-v4-pro](https://openrouter.ai/deep/deep-v4-pro)
166
166
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes