voidx 3.5.1__tar.gz → 3.7.0__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 (844) hide show
  1. voidx-3.7.0/PKG-INFO +118 -0
  2. voidx-3.7.0/README.md +88 -0
  3. voidx-3.7.0/pyproject.toml +64 -0
  4. voidx-3.7.0/src/tests/test_agent/graph/conftest.py +1 -0
  5. voidx-3.7.0/src/tests/test_agent/graph/stream_llm_helpers.py +272 -0
  6. voidx-3.7.0/src/tests/test_agent/graph/test_call_llm_compaction.py +794 -0
  7. voidx-3.7.0/src/tests/test_agent/graph/test_call_llm_compaction_advanced.py +252 -0
  8. voidx-3.7.0/src/tests/test_agent/graph/test_call_llm_tools.py +451 -0
  9. voidx-3.7.0/src/tests/test_agent/graph/test_compaction_flow_run_once.py +370 -0
  10. voidx-3.7.0/src/tests/test_agent/graph/test_execute_tools_guard.py +1807 -0
  11. voidx-3.7.0/src/tests/test_agent/graph/test_execute_tools_todo.py +439 -0
  12. voidx-3.7.0/src/tests/test_agent/graph/test_graph_authorization.py +482 -0
  13. voidx-3.7.0/src/tests/test_agent/graph/test_graph_setup_prompts.py +352 -0
  14. voidx-3.7.0/src/tests/test_agent/graph/test_guards_tool_op.py +305 -0
  15. voidx-3.7.0/src/tests/test_agent/graph/test_parallel_subagents_dedup.py +391 -0
  16. voidx-3.7.0/src/tests/test_agent/graph/test_prepare_workflow.py +402 -0
  17. voidx-3.7.0/src/tests/test_agent/graph/test_run_loop_startup.py +686 -0
  18. voidx-3.7.0/src/tests/test_agent/graph/test_run_loop_title_misc.py +178 -0
  19. voidx-3.7.0/src/tests/test_agent/graph/test_run_loop_workflow.py +172 -0
  20. voidx-3.7.0/src/tests/test_agent/graph/test_run_loop_workflow_advanced.py +144 -0
  21. voidx-3.7.0/src/tests/test_agent/graph/test_runtime_guards.py +431 -0
  22. voidx-3.7.0/src/tests/test_agent/graph/test_session_persistence.py +643 -0
  23. voidx-3.7.0/src/tests/test_agent/graph/test_session_run_once.py +429 -0
  24. voidx-3.7.0/src/tests/test_agent/graph/test_subagent_llm_retry.py +306 -0
  25. voidx-3.7.0/src/tests/test_agent/graph/test_subagent_runner.py +416 -0
  26. voidx-3.7.0/src/tests/test_agent/graph/test_tool_execution_auth.py +389 -0
  27. voidx-3.7.0/src/tests/test_agent/graph/test_turn_control_e2e.py +250 -0
  28. voidx-3.7.0/src/tests/test_agent/graph/test_turn_control_integration.py +643 -0
  29. voidx-3.7.0/src/tests/test_agent/graph/test_turn_runner_guidance_discard.py +138 -0
  30. voidx-3.7.0/src/tests/test_agent/graph/test_turn_runner_idle_event.py +11 -0
  31. voidx-3.7.0/src/tests/test_agent/graph/test_workflow_done.py +311 -0
  32. voidx-3.7.0/src/tests/test_agent/graph/test_workflow_review.py +319 -0
  33. voidx-3.7.0/src/tests/test_agent/graph/test_workflow_transactions.py +315 -0
  34. voidx-3.7.0/src/tests/test_agent/graph/test_workflow_transactions_barrier.py +350 -0
  35. voidx-3.7.0/src/tests/test_agent/loop/test_manager.py +126 -0
  36. voidx-3.7.0/src/tests/test_agent/loop/test_prompt_source.py +71 -0
  37. voidx-3.7.0/src/tests/test_agent/slash/test_slash_loop.py +82 -0
  38. voidx-3.7.0/src/tests/test_agent/slash/test_slash_model.py +592 -0
  39. voidx-3.7.0/src/tests/test_agent/slash/test_slash_session.py +469 -0
  40. voidx-3.7.0/src/tests/test_agent/slash/test_slash_skills.py +98 -0
  41. voidx-3.7.0/src/tests/test_agent/test_file_rwlock.py +581 -0
  42. voidx-3.7.0/src/tests/test_agent/test_goal_resolver.py +721 -0
  43. voidx-3.7.0/src/tests/test_agent/test_goal_resolver_advanced.py +455 -0
  44. voidx-3.7.0/src/tests/test_agent/test_guard_guidance.py +70 -0
  45. voidx-3.7.0/src/tests/test_agent/test_guide_command.py +110 -0
  46. voidx-3.7.0/src/tests/test_agent/test_message_trimming_rules.py +493 -0
  47. voidx-3.7.0/src/tests/test_agent/test_permission.py +576 -0
  48. voidx-3.7.0/src/tests/test_agent/test_permission_phase2.py +454 -0
  49. voidx-3.7.0/src/tests/test_agent/test_permission_phase3.py +399 -0
  50. voidx-3.7.0/src/tests/test_agent/test_permission_phase4.py +298 -0
  51. voidx-3.7.0/src/tests/test_agent/test_permission_phase5.py +114 -0
  52. voidx-3.7.0/src/tests/test_agent/test_permission_phase6.py +306 -0
  53. voidx-3.7.0/src/tests/test_agent/test_prompts.py +130 -0
  54. voidx-3.7.0/src/tests/test_agent/test_runtime_context_builder.py +595 -0
  55. voidx-3.7.0/src/tests/test_agent/test_task_state.py +225 -0
  56. voidx-3.7.0/src/tests/test_agent/test_task_state_context_sync.py +93 -0
  57. voidx-3.7.0/src/tests/test_agent/test_task_state_rendering.py +231 -0
  58. voidx-3.7.0/src/tests/test_agent/test_turn_control.py +250 -0
  59. voidx-3.7.0/src/tests/test_agent/test_turn_control_prompt.py +57 -0
  60. voidx-3.7.0/src/tests/test_agent/test_turn_metrics.py +74 -0
  61. voidx-3.7.0/src/tests/test_agent/test_turn_start.py +159 -0
  62. voidx-3.7.0/src/tests/test_archive_script.py +386 -0
  63. voidx-3.7.0/src/tests/test_config/test_config_advanced.py +587 -0
  64. voidx-3.7.0/src/tests/test_config/test_retry_config.py +95 -0
  65. voidx-3.7.0/src/tests/test_install_sh.py +592 -0
  66. voidx-3.7.0/src/tests/test_llm/test_fallback_summary.py +176 -0
  67. voidx-3.7.0/src/tests/test_llm/test_gemini_provider.py +366 -0
  68. voidx-3.7.0/src/tests/test_llm/test_goal_resolver_retry.py +98 -0
  69. voidx-3.7.0/src/tests/test_llm/test_instruction_cache.py +113 -0
  70. voidx-3.7.0/src/tests/test_llm/test_llm_catalog.py +40 -0
  71. voidx-3.7.0/src/tests/test_llm/test_llm_catalog_fetchers.py +255 -0
  72. voidx-3.7.0/src/tests/test_llm/test_llm_provider.py +580 -0
  73. voidx-3.7.0/src/tests/test_logging/test_external.py +41 -0
  74. voidx-3.7.0/src/tests/test_lsp/test_lsp.py +512 -0
  75. voidx-3.7.0/src/tests/test_mcp/test_mcp.py +596 -0
  76. voidx-3.7.0/src/tests/test_memory/test_main.py +62 -0
  77. voidx-3.7.0/src/tests/test_npm_package.py +604 -0
  78. voidx-3.7.0/src/tests/test_runtime/test_processes.py +362 -0
  79. voidx-3.7.0/src/tests/test_runtime/test_runtime_ui.py +114 -0
  80. voidx-3.7.0/src/tests/test_selfupdate/test_selfupdate.py +575 -0
  81. voidx-3.7.0/src/tests/test_skills/test_workflow_advance.py +513 -0
  82. voidx-3.7.0/src/tests/test_test_runner.py +677 -0
  83. voidx-3.7.0/src/tests/test_tools/bash/test_router_git.py +318 -0
  84. voidx-3.7.0/src/tests/test_tools/bash/test_router_safety.py +94 -0
  85. voidx-3.7.0/src/tests/test_tools/bash/test_router_sed_grep.py +376 -0
  86. voidx-3.7.0/src/tests/test_tools/bash/test_tool.py +197 -0
  87. voidx-3.7.0/src/tests/test_tools/file/test_coverage_fingerprint.py +571 -0
  88. voidx-3.7.0/src/tests/test_tools/file/test_edit_anchors.py +297 -0
  89. voidx-3.7.0/src/tests/test_tools/file/test_edit_bounds_input.py +102 -0
  90. voidx-3.7.0/src/tests/test_tools/file/test_edit_coverage.py +197 -0
  91. voidx-3.7.0/src/tests/test_tools/file/test_edit_dedup.py +591 -0
  92. voidx-3.7.0/src/tests/test_tools/file/test_edit_drift_fallback.py +121 -0
  93. voidx-3.7.0/src/tests/test_tools/file/test_edit_drift_fallback_e2e.py +190 -0
  94. voidx-3.7.0/src/tests/test_tools/file/test_edit_errors.py +136 -0
  95. voidx-3.7.0/src/tests/test_tools/file/test_edit_line_insert.py +217 -0
  96. voidx-3.7.0/src/tests/test_tools/file/test_edit_llm_messages.py +80 -0
  97. voidx-3.7.0/src/tests/test_tools/file/test_edit_replace.py +476 -0
  98. voidx-3.7.0/src/tests/test_tools/file/test_edit_trailing_newline.py +296 -0
  99. voidx-3.7.0/src/tests/test_tools/file/test_read.py +410 -0
  100. voidx-3.7.0/src/tests/test_tools/file/test_read_write.py +309 -0
  101. voidx-3.7.0/src/tests/test_tools/file/test_render_numbered_diff.py +59 -0
  102. voidx-3.7.0/src/tests/test_tools/file/test_write_file.py +500 -0
  103. voidx-3.7.0/src/tests/test_tools/test_clarify_tool.py +284 -0
  104. voidx-3.7.0/src/tests/test_tools/test_diffing.py +200 -0
  105. voidx-3.7.0/src/tests/test_tools/test_file_tools_redesign.py +801 -0
  106. voidx-3.7.0/src/tests/test_tools/test_git_tool_phase5.py +455 -0
  107. voidx-3.7.0/src/tests/test_tools/test_git_tool_raw_permissions.py +392 -0
  108. voidx-3.7.0/src/tests/test_tools/test_git_tool_schema_errors.py +169 -0
  109. voidx-3.7.0/src/tests/test_tools/test_git_tool_structured.py +469 -0
  110. voidx-3.7.0/src/tests/test_tools/test_infer_state_patch.py +84 -0
  111. voidx-3.7.0/src/tests/test_tools/test_interactive_tools.py +483 -0
  112. voidx-3.7.0/src/tests/test_tools/test_interactive_tools_write.py +432 -0
  113. voidx-3.7.0/src/tests/test_tools/test_load_doc_template.py +164 -0
  114. voidx-3.7.0/src/tests/test_tools/test_loop_integration.py +34 -0
  115. voidx-3.7.0/src/tests/test_tools/test_loop_registry.py +42 -0
  116. voidx-3.7.0/src/tests/test_tools/test_make_interact_callback.py +201 -0
  117. voidx-3.7.0/src/tests/test_tools/test_plan_checkpoint.py +445 -0
  118. voidx-3.7.0/src/tests/test_tools/test_powershell_tool.py +389 -0
  119. voidx-3.7.0/src/tests/test_tools/test_powershell_tool_phase6.py +53 -0
  120. voidx-3.7.0/src/tests/test_tools/test_replace_failure_logging.py +140 -0
  121. voidx-3.7.0/src/tests/test_tools/test_resolve_safe.py +18 -0
  122. voidx-3.7.0/src/tests/test_tools/test_retry.py +176 -0
  123. voidx-3.7.0/src/tests/test_tools/test_schedule_wakeup.py +70 -0
  124. voidx-3.7.0/src/tests/test_tools/test_search.py +452 -0
  125. voidx-3.7.0/src/tests/test_tools/test_shell_tool_phase6.py +111 -0
  126. voidx-3.7.0/src/tests/test_tools/test_state_update_from_executed_tools.py +267 -0
  127. voidx-3.7.0/src/tests/test_tools/test_task_tracker.py +191 -0
  128. voidx-3.7.0/src/tests/test_tools/test_tool_error_handling.py +241 -0
  129. voidx-3.7.0/src/tests/test_tools/test_tool_registry.py +123 -0
  130. voidx-3.7.0/src/tests/test_tools/test_tool_schemas.py +276 -0
  131. voidx-3.7.0/src/tests/test_tools/test_tool_state_patch.py +57 -0
  132. voidx-3.7.0/src/tests/test_tools/test_user_interaction_models.py +58 -0
  133. voidx-3.7.0/src/tests/test_tools/test_web_mcp.py +365 -0
  134. voidx-3.7.0/src/tests/test_tools/test_webfetch.py +332 -0
  135. voidx-3.7.0/src/tests/test_tools/test_workflow_tool.py +963 -0
  136. voidx-3.7.0/src/tests/test_ui/gateway/test_adapter.py +516 -0
  137. voidx-3.7.0/src/tests/test_ui/gateway/test_gateway_headless_frontend.py +80 -0
  138. voidx-3.7.0/src/tests/test_ui/gateway/test_gateway_v2_dispatch.py +421 -0
  139. voidx-3.7.0/src/tests/test_ui/gateway/test_gateway_v2_routing.py +549 -0
  140. voidx-3.7.0/src/tests/test_ui/gateway/test_gateway_v2_server.py +523 -0
  141. voidx-3.7.0/src/tests/test_ui/gateway/test_gateway_v2_session.py +361 -0
  142. voidx-3.7.0/src/tests/test_ui/gateway/test_guidance_fallback.py +116 -0
  143. voidx-3.7.0/src/tests/test_ui/gateway/test_ui_events_dock_prompts.py +528 -0
  144. voidx-3.7.0/src/tests/test_ui/gateway/test_ui_events_dock_status.py +461 -0
  145. voidx-3.7.0/src/tests/test_ui/gateway/test_ui_events_streaming.py +394 -0
  146. voidx-3.7.0/src/tests/test_ui/gateway/test_ui_gateway.py +440 -0
  147. voidx-3.7.0/src/tests/test_ui/output/test_console_app.py +15 -0
  148. voidx-3.7.0/src/tests/test_ui/output/test_fmt_args.py +95 -0
  149. voidx-3.7.0/src/tests/test_ui/output/test_output_browse.py +11 -0
  150. voidx-3.7.0/src/tests/test_ui/output/test_tool_display.py +33 -0
  151. voidx-3.7.0/src/tests/test_ui/output/test_tree_smoke.py +383 -0
  152. voidx-3.7.0/src/tests/test_ui/test_display_policy.py +166 -0
  153. voidx-3.7.0/src/tests/test_voidx_entrypoint.py +71 -0
  154. voidx-3.7.0/src/tests/test_wheel_build.py +94 -0
  155. voidx-3.7.0/src/tests/test_wheel_verify_cwd.py +67 -0
  156. voidx-3.7.0/src/tests/test_workflow/test_auto_advance.py +439 -0
  157. voidx-3.7.0/src/voidx/__init__.py +3 -0
  158. voidx-3.7.0/src/voidx/agent/attachments.py +370 -0
  159. voidx-3.7.0/src/voidx/agent/goal_resolver.py +566 -0
  160. voidx-3.7.0/src/voidx/agent/graph/contracts.py +246 -0
  161. voidx-3.7.0/src/voidx/agent/graph/core/helpers.py +198 -0
  162. voidx-3.7.0/src/voidx/agent/graph/core/llm.py +769 -0
  163. voidx-3.7.0/src/voidx/agent/graph/core/voidx_graph.py +675 -0
  164. voidx-3.7.0/src/voidx/agent/graph/permissions.py +197 -0
  165. voidx-3.7.0/src/voidx/agent/graph/run_loop.py +438 -0
  166. voidx-3.7.0/src/voidx/agent/graph/runtime_guards.py +517 -0
  167. voidx-3.7.0/src/voidx/agent/graph/subagent.py +508 -0
  168. voidx-3.7.0/src/voidx/agent/graph/tool_executor/executor.py +508 -0
  169. voidx-3.7.0/src/voidx/agent/graph/tool_executor/guards.py +151 -0
  170. voidx-3.7.0/src/voidx/agent/graph/tool_executor/helpers.py +675 -0
  171. voidx-3.7.0/src/voidx/agent/graph/tool_executor/types.py +88 -0
  172. voidx-3.7.0/src/voidx/agent/graph/turn_control.py +146 -0
  173. voidx-3.7.0/src/voidx/agent/graph/turn_metrics.py +34 -0
  174. voidx-3.7.0/src/voidx/agent/graph/turn_runner.py +535 -0
  175. voidx-3.7.0/src/voidx/agent/graph/wiring.py +116 -0
  176. voidx-3.7.0/src/voidx/agent/loop/__init__.py +6 -0
  177. voidx-3.7.0/src/voidx/agent/loop/manager.py +162 -0
  178. voidx-3.7.0/src/voidx/agent/loop/prompt_source.py +136 -0
  179. voidx-3.7.0/src/voidx/agent/loop/slash.py +98 -0
  180. voidx-3.7.0/src/voidx/agent/message_trimming.py +511 -0
  181. voidx-3.7.0/src/voidx/agent/prompts.py +312 -0
  182. voidx-3.7.0/src/voidx/agent/runtime_context.py +607 -0
  183. voidx-3.7.0/src/voidx/agent/slash/handler.py +563 -0
  184. voidx-3.7.0/src/voidx/agent/slash/host.py +365 -0
  185. voidx-3.7.0/src/voidx/agent/slash/model.py +436 -0
  186. voidx-3.7.0/src/voidx/agent/slash/profile.py +162 -0
  187. voidx-3.7.0/src/voidx/agent/slash/runtime.py +77 -0
  188. voidx-3.7.0/src/voidx/agent/state.py +28 -0
  189. voidx-3.7.0/src/voidx/config/__init__.py +47 -0
  190. voidx-3.7.0/src/voidx/config/models.py +152 -0
  191. voidx-3.7.0/src/voidx/config/settings.py +522 -0
  192. voidx-3.7.0/src/voidx/config/settings_permissions.py +172 -0
  193. voidx-3.7.0/src/voidx/config/settings_retry.py +28 -0
  194. voidx-3.7.0/src/voidx/data/documents/README.md +12 -0
  195. voidx-3.7.0/src/voidx/data/documents/templates/api-doc.md +69 -0
  196. voidx-3.7.0/src/voidx/data/documents/templates/capability-spec.md +66 -0
  197. voidx-3.7.0/src/voidx/data/documents/templates/implementation-spec.md +98 -0
  198. voidx-3.7.0/src/voidx/data/documents/templates/prd.md +118 -0
  199. voidx-3.7.0/src/voidx/data/documents/templates/readme.md +26 -0
  200. voidx-3.7.0/src/voidx/data/documents/templates/rfc.md +56 -0
  201. voidx-3.7.0/src/voidx/data/documents/templates/tasks.md +65 -0
  202. voidx-3.7.0/src/voidx/data/documents/templates/tech-design.md +114 -0
  203. voidx-3.7.0/src/voidx/data/documents/voidx-guide/README.md +17 -0
  204. voidx-3.7.0/src/voidx/data/documents/voidx-guide/context.md +13 -0
  205. voidx-3.7.0/src/voidx/data/documents/voidx-guide/debug.md +9 -0
  206. voidx-3.7.0/src/voidx/data/documents/voidx-guide/extension.md +41 -0
  207. voidx-3.7.0/src/voidx/data/documents/voidx-guide/mode.md +14 -0
  208. voidx-3.7.0/src/voidx/data/documents/voidx-guide/model.md +16 -0
  209. voidx-3.7.0/src/voidx/data/documents/voidx-guide/permission.md +33 -0
  210. voidx-3.7.0/src/voidx/data/documents/voidx-guide/preferences.md +12 -0
  211. voidx-3.7.0/src/voidx/data/documents/voidx-guide/quickstart.md +40 -0
  212. voidx-3.7.0/src/voidx/data/documents/voidx-guide/reference.md +37 -0
  213. voidx-3.7.0/src/voidx/data/documents/voidx-guide/session.md +19 -0
  214. voidx-3.7.0/src/voidx/data/documents/voidx-guide/upgrade.md +10 -0
  215. voidx-3.7.0/src/voidx/data/documents/voidx-guide/web.md +11 -0
  216. voidx-3.7.0/src/voidx/data/documents/voidx-guide/workflow.md +26 -0
  217. voidx-3.7.0/src/voidx/diffing.py +352 -0
  218. voidx-3.7.0/src/voidx/llm/catalog.py +403 -0
  219. voidx-3.7.0/src/voidx/llm/compaction.py +706 -0
  220. voidx-3.7.0/src/voidx/llm/instruction.py +305 -0
  221. voidx-3.7.0/src/voidx/llm/provider.py +850 -0
  222. voidx-3.7.0/src/voidx/llm/service.py +39 -0
  223. voidx-3.7.0/src/voidx/logging/external.py +47 -0
  224. voidx-3.7.0/src/voidx/lsp/client.py +312 -0
  225. voidx-3.7.0/src/voidx/lsp/errors.py +23 -0
  226. voidx-3.7.0/src/voidx/lsp/manager.py +391 -0
  227. voidx-3.7.0/src/voidx/main.py +167 -0
  228. voidx-3.7.0/src/voidx/mcp/client/base.py +375 -0
  229. voidx-3.7.0/src/voidx/mcp/client/http_transport.py +114 -0
  230. voidx-3.7.0/src/voidx/mcp/client/sse_transport.py +144 -0
  231. voidx-3.7.0/src/voidx/mcp/client/stdio_transport.py +115 -0
  232. voidx-3.7.0/src/voidx/mcp/manager.py +322 -0
  233. voidx-3.7.0/src/voidx/mcp/tool.py +84 -0
  234. voidx-3.7.0/src/voidx/mcp_servers/web.py +103 -0
  235. voidx-3.7.0/src/voidx/memory/transcript.py +491 -0
  236. voidx-3.7.0/src/voidx/paths.py +77 -0
  237. voidx-3.7.0/src/voidx/permission/context.py +90 -0
  238. voidx-3.7.0/src/voidx/permission/engine.py +209 -0
  239. voidx-3.7.0/src/voidx/permission/evaluate.py +114 -0
  240. voidx-3.7.0/src/voidx/permission/git_policy.py +270 -0
  241. voidx-3.7.0/src/voidx/permission/grants.py +385 -0
  242. voidx-3.7.0/src/voidx/permission/process_sandbox.py +46 -0
  243. voidx-3.7.0/src/voidx/permission/rules.py +446 -0
  244. voidx-3.7.0/src/voidx/permission/schema.py +24 -0
  245. voidx-3.7.0/src/voidx/permission/service.py +589 -0
  246. voidx-3.7.0/src/voidx/permission/shell_policy.py +138 -0
  247. voidx-3.7.0/src/voidx/runtime/_win32_jobs.py +200 -0
  248. voidx-3.7.0/src/voidx/runtime/processes.py +277 -0
  249. voidx-3.7.0/src/voidx/runtime/task_state.py +243 -0
  250. voidx-3.7.0/src/voidx/runtime/ui.py +309 -0
  251. voidx-3.7.0/src/voidx/selfupdate.py +534 -0
  252. voidx-3.7.0/src/voidx/tools/__init__.py +18 -0
  253. voidx-3.7.0/src/voidx/tools/agent.py +331 -0
  254. voidx-3.7.0/src/voidx/tools/base.py +424 -0
  255. voidx-3.7.0/src/voidx/tools/bash/hint/file.py +232 -0
  256. voidx-3.7.0/src/voidx/tools/bash/safety.py +59 -0
  257. voidx-3.7.0/src/voidx/tools/bash/tool.py +102 -0
  258. voidx-3.7.0/src/voidx/tools/checkpoint.py +365 -0
  259. voidx-3.7.0/src/voidx/tools/clarify.py +151 -0
  260. voidx-3.7.0/src/voidx/tools/document.py +133 -0
  261. voidx-3.7.0/src/voidx/tools/file/__init__.py +20 -0
  262. voidx-3.7.0/src/voidx/tools/file/manage.py +456 -0
  263. voidx-3.7.0/src/voidx/tools/file/read.py +304 -0
  264. voidx-3.7.0/src/voidx/tools/file/replace.py +658 -0
  265. voidx-3.7.0/src/voidx/tools/file/replace_resolve.py +325 -0
  266. voidx-3.7.0/src/voidx/tools/file/safe_path.py +461 -0
  267. voidx-3.7.0/src/voidx/tools/file/state.py +475 -0
  268. voidx-3.7.0/src/voidx/tools/file/write.py +249 -0
  269. voidx-3.7.0/src/voidx/tools/git.py +1242 -0
  270. voidx-3.7.0/src/voidx/tools/lsp.py +216 -0
  271. voidx-3.7.0/src/voidx/tools/powershell/sandbox.py +241 -0
  272. voidx-3.7.0/src/voidx/tools/powershell/tool.py +125 -0
  273. voidx-3.7.0/src/voidx/tools/registry.py +155 -0
  274. voidx-3.7.0/src/voidx/tools/retry.py +36 -0
  275. voidx-3.7.0/src/voidx/tools/schedule_wakeup.py +90 -0
  276. voidx-3.7.0/src/voidx/tools/search.py +308 -0
  277. voidx-3.7.0/src/voidx/tools/service.py +32 -0
  278. voidx-3.7.0/src/voidx/tools/shell/common.py +129 -0
  279. voidx-3.7.0/src/voidx/tools/shell/hint/git.py +78 -0
  280. voidx-3.7.0/src/voidx/tools/skills.py +252 -0
  281. voidx-3.7.0/src/voidx/tools/todo.py +310 -0
  282. voidx-3.7.0/src/voidx/tools/web/__init__.py +13 -0
  283. voidx-3.7.0/src/voidx/tools/web/fetch.py +291 -0
  284. voidx-3.7.0/src/voidx/tools/web/mcp.py +121 -0
  285. voidx-3.7.0/src/voidx/tools/web/search.py +301 -0
  286. voidx-3.7.0/src/voidx/tools/workflow.py +736 -0
  287. voidx-3.7.0/src/voidx/ui/commands.py +122 -0
  288. voidx-3.7.0/src/voidx/ui/gateway/__init__.py +13 -0
  289. voidx-3.7.0/src/voidx/ui/gateway/adapter.py +561 -0
  290. voidx-3.7.0/src/voidx/ui/gateway/frontend.py +206 -0
  291. voidx-3.7.0/src/voidx/ui/gateway/run_manager.py +279 -0
  292. voidx-3.7.0/src/voidx/ui/gateway/server.py +245 -0
  293. voidx-3.7.0/src/voidx/ui/gateway/session/core.py +469 -0
  294. voidx-3.7.0/src/voidx/ui/gateway/session/method/sessions.py +160 -0
  295. voidx-3.7.0/src/voidx/ui/gateway/session/method/settings.py +268 -0
  296. voidx-3.7.0/src/voidx/ui/output/browse.py +170 -0
  297. voidx-3.7.0/src/voidx/ui/output/console/app.py +358 -0
  298. voidx-3.7.0/src/voidx/ui/output/console/formatting.py +108 -0
  299. voidx-3.7.0/src/voidx/ui/output/console/streaming.py +219 -0
  300. voidx-3.7.0/src/voidx/ui/output/diff.py +128 -0
  301. voidx-3.7.0/src/voidx/ui/output/display_policy.py +135 -0
  302. voidx-3.7.0/src/voidx/ui/output/dock/__init__.py +40 -0
  303. voidx-3.7.0/src/voidx/ui/output/dock/app.py +528 -0
  304. voidx-3.7.0/src/voidx/ui/output/dock/nodes.py +416 -0
  305. voidx-3.7.0/src/voidx/ui/output/dock/nodes_checkpoint.py +124 -0
  306. voidx-3.7.0/src/voidx/ui/output/dock/nodes_clarify.py +89 -0
  307. voidx-3.7.0/src/voidx/ui/output/dock/nodes_status.py +76 -0
  308. voidx-3.7.0/src/voidx/ui/output/dock/state.py +59 -0
  309. voidx-3.7.0/src/voidx/ui/output/dock/status.py +121 -0
  310. voidx-3.7.0/src/voidx/ui/output/dock/stream.py +187 -0
  311. voidx-3.7.0/src/voidx/ui/output/events/__init__.py +123 -0
  312. voidx-3.7.0/src/voidx/ui/output/events/bus.py +154 -0
  313. voidx-3.7.0/src/voidx/ui/output/events/consumers.py +606 -0
  314. voidx-3.7.0/src/voidx/ui/output/events/schema.py +367 -0
  315. voidx-3.7.0/src/voidx/ui/output/manage_display.py +113 -0
  316. voidx-3.7.0/src/voidx/ui/output/tool_display.py +62 -0
  317. voidx-3.7.0/src/voidx/ui/output/tree.py +820 -0
  318. voidx-3.7.0/src/voidx/ui/output/types.py +95 -0
  319. voidx-3.7.0/src/voidx/ui/protocol/requests.py +52 -0
  320. voidx-3.7.0/src/voidx/ui/session.py +404 -0
  321. voidx-3.7.0/src/voidx/workflow/dag.py +30 -0
  322. voidx-3.7.0/src/voidx/workflow/nodes.py +426 -0
  323. voidx-3.7.0/src/voidx/workflow/runtime.py +282 -0
  324. voidx-3.7.0/src/voidx/workflow/types.py +104 -0
  325. voidx-3.7.0/src/voidx.egg-info/PKG-INFO +118 -0
  326. voidx-3.7.0/src/voidx.egg-info/SOURCES.txt +598 -0
  327. voidx-3.5.1/PKG-INFO +0 -100
  328. voidx-3.5.1/README.md +0 -70
  329. voidx-3.5.1/pyproject.toml +0 -64
  330. voidx-3.5.1/src/tests/test_agent/graph/stream_llm_helpers.py +0 -252
  331. voidx-3.5.1/src/tests/test_agent/graph/test_call_llm_compaction.py +0 -629
  332. voidx-3.5.1/src/tests/test_agent/graph/test_call_llm_compaction_advanced.py +0 -247
  333. voidx-3.5.1/src/tests/test_agent/graph/test_call_llm_tools.py +0 -336
  334. voidx-3.5.1/src/tests/test_agent/graph/test_compaction_flow_run_once.py +0 -370
  335. voidx-3.5.1/src/tests/test_agent/graph/test_execute_tools_guard.py +0 -671
  336. voidx-3.5.1/src/tests/test_agent/graph/test_execute_tools_todo.py +0 -439
  337. voidx-3.5.1/src/tests/test_agent/graph/test_graph_authorization.py +0 -478
  338. voidx-3.5.1/src/tests/test_agent/graph/test_graph_setup_prompts.py +0 -351
  339. voidx-3.5.1/src/tests/test_agent/graph/test_guards_tool_op.py +0 -301
  340. voidx-3.5.1/src/tests/test_agent/graph/test_parallel_subagents_dedup.py +0 -391
  341. voidx-3.5.1/src/tests/test_agent/graph/test_prepare_workflow.py +0 -354
  342. voidx-3.5.1/src/tests/test_agent/graph/test_run_loop_startup.py +0 -469
  343. voidx-3.5.1/src/tests/test_agent/graph/test_run_loop_title_misc.py +0 -174
  344. voidx-3.5.1/src/tests/test_agent/graph/test_run_loop_workflow.py +0 -172
  345. voidx-3.5.1/src/tests/test_agent/graph/test_run_loop_workflow_advanced.py +0 -148
  346. voidx-3.5.1/src/tests/test_agent/graph/test_runtime_guards.py +0 -401
  347. voidx-3.5.1/src/tests/test_agent/graph/test_session_persistence.py +0 -545
  348. voidx-3.5.1/src/tests/test_agent/graph/test_session_run_once.py +0 -341
  349. voidx-3.5.1/src/tests/test_agent/graph/test_subagent_runner.py +0 -416
  350. voidx-3.5.1/src/tests/test_agent/graph/test_tool_execution_auth.py +0 -386
  351. voidx-3.5.1/src/tests/test_agent/graph/test_workflow_done.py +0 -314
  352. voidx-3.5.1/src/tests/test_agent/graph/test_workflow_review.py +0 -319
  353. voidx-3.5.1/src/tests/test_agent/graph/test_workflow_transactions.py +0 -315
  354. voidx-3.5.1/src/tests/test_agent/graph/test_workflow_transactions_barrier.py +0 -350
  355. voidx-3.5.1/src/tests/test_agent/slash/test_slash_model.py +0 -521
  356. voidx-3.5.1/src/tests/test_agent/slash/test_slash_session.py +0 -453
  357. voidx-3.5.1/src/tests/test_agent/slash/test_slash_skills.py +0 -84
  358. voidx-3.5.1/src/tests/test_agent/test_file_rwlock.py +0 -304
  359. voidx-3.5.1/src/tests/test_agent/test_goal_resolver.py +0 -557
  360. voidx-3.5.1/src/tests/test_agent/test_goal_resolver_advanced.py +0 -400
  361. voidx-3.5.1/src/tests/test_agent/test_message_trimming_rules.py +0 -493
  362. voidx-3.5.1/src/tests/test_agent/test_permission.py +0 -480
  363. voidx-3.5.1/src/tests/test_agent/test_prompts.py +0 -53
  364. voidx-3.5.1/src/tests/test_agent/test_runtime_context_builder.py +0 -555
  365. voidx-3.5.1/src/tests/test_agent/test_task_state.py +0 -216
  366. voidx-3.5.1/src/tests/test_agent/test_task_state_rendering.py +0 -229
  367. voidx-3.5.1/src/tests/test_config/test_config_advanced.py +0 -500
  368. voidx-3.5.1/src/tests/test_install_sh.py +0 -476
  369. voidx-3.5.1/src/tests/test_llm/test_fallback_summary.py +0 -110
  370. voidx-3.5.1/src/tests/test_llm/test_gemini_provider.py +0 -347
  371. voidx-3.5.1/src/tests/test_llm/test_instruction_cache.py +0 -88
  372. voidx-3.5.1/src/tests/test_llm/test_llm_catalog.py +0 -49
  373. voidx-3.5.1/src/tests/test_llm/test_llm_provider.py +0 -387
  374. voidx-3.5.1/src/tests/test_lsp/test_lsp.py +0 -359
  375. voidx-3.5.1/src/tests/test_mcp/test_mcp.py +0 -376
  376. voidx-3.5.1/src/tests/test_memory/test_main.py +0 -76
  377. voidx-3.5.1/src/tests/test_npm_package.py +0 -357
  378. voidx-3.5.1/src/tests/test_runtime/test_runtime_ui.py +0 -112
  379. voidx-3.5.1/src/tests/test_selfupdate/test_selfupdate.py +0 -103
  380. voidx-3.5.1/src/tests/test_skills/test_workflow_advance.py +0 -495
  381. voidx-3.5.1/src/tests/test_tools/bash/test_router_git.py +0 -318
  382. voidx-3.5.1/src/tests/test_tools/bash/test_router_safety.py +0 -94
  383. voidx-3.5.1/src/tests/test_tools/bash/test_router_sed_grep.py +0 -376
  384. voidx-3.5.1/src/tests/test_tools/bash/test_tool.py +0 -165
  385. voidx-3.5.1/src/tests/test_tools/file_ops/test_coverage_fingerprint.py +0 -579
  386. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_anchors.py +0 -297
  387. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_bounds_input.py +0 -102
  388. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_coverage.py +0 -180
  389. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_dedup.py +0 -298
  390. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_drift_fallback.py +0 -121
  391. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_drift_fallback_e2e.py +0 -190
  392. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_errors.py +0 -136
  393. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_line_insert.py +0 -217
  394. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_llm_messages.py +0 -80
  395. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_replace.py +0 -391
  396. voidx-3.5.1/src/tests/test_tools/file_ops/test_edit_trailing_newline.py +0 -296
  397. voidx-3.5.1/src/tests/test_tools/file_ops/test_read.py +0 -402
  398. voidx-3.5.1/src/tests/test_tools/file_ops/test_read_write.py +0 -309
  399. voidx-3.5.1/src/tests/test_tools/file_ops/test_write_file.py +0 -360
  400. voidx-3.5.1/src/tests/test_tools/test_clarify_tool.py +0 -285
  401. voidx-3.5.1/src/tests/test_tools/test_diffing.py +0 -128
  402. voidx-3.5.1/src/tests/test_tools/test_git_tool_raw_permissions.py +0 -391
  403. voidx-3.5.1/src/tests/test_tools/test_git_tool_schema_errors.py +0 -144
  404. voidx-3.5.1/src/tests/test_tools/test_git_tool_structured.py +0 -431
  405. voidx-3.5.1/src/tests/test_tools/test_infer_state_patch.py +0 -72
  406. voidx-3.5.1/src/tests/test_tools/test_interactive_tools.py +0 -454
  407. voidx-3.5.1/src/tests/test_tools/test_interactive_tools_write.py +0 -430
  408. voidx-3.5.1/src/tests/test_tools/test_load_doc_template.py +0 -68
  409. voidx-3.5.1/src/tests/test_tools/test_make_interact_callback.py +0 -201
  410. voidx-3.5.1/src/tests/test_tools/test_plan_checkpoint.py +0 -445
  411. voidx-3.5.1/src/tests/test_tools/test_powershell_tool.py +0 -385
  412. voidx-3.5.1/src/tests/test_tools/test_replace_failure_logging.py +0 -142
  413. voidx-3.5.1/src/tests/test_tools/test_resolve_safe.py +0 -68
  414. voidx-3.5.1/src/tests/test_tools/test_search.py +0 -456
  415. voidx-3.5.1/src/tests/test_tools/test_state_update_from_executed_tools.py +0 -267
  416. voidx-3.5.1/src/tests/test_tools/test_task_tracker.py +0 -165
  417. voidx-3.5.1/src/tests/test_tools/test_tool_error_handling.py +0 -220
  418. voidx-3.5.1/src/tests/test_tools/test_tool_registry.py +0 -122
  419. voidx-3.5.1/src/tests/test_tools/test_tool_schemas.py +0 -178
  420. voidx-3.5.1/src/tests/test_tools/test_tool_state_patch.py +0 -57
  421. voidx-3.5.1/src/tests/test_tools/test_user_interaction_models.py +0 -58
  422. voidx-3.5.1/src/tests/test_tools/test_web_mcp.py +0 -280
  423. voidx-3.5.1/src/tests/test_tools/test_webfetch.py +0 -157
  424. voidx-3.5.1/src/tests/test_tools/test_workflow_tool.py +0 -634
  425. voidx-3.5.1/src/tests/test_ui/gateway/test_adapter.py +0 -473
  426. voidx-3.5.1/src/tests/test_ui/gateway/test_gateway_v2_dispatch.py +0 -306
  427. voidx-3.5.1/src/tests/test_ui/gateway/test_gateway_v2_routing.py +0 -480
  428. voidx-3.5.1/src/tests/test_ui/gateway/test_gateway_v2_server.py +0 -527
  429. voidx-3.5.1/src/tests/test_ui/gateway/test_gateway_v2_session.py +0 -301
  430. voidx-3.5.1/src/tests/test_ui/gateway/test_ui_events_dock_prompts.py +0 -471
  431. voidx-3.5.1/src/tests/test_ui/gateway/test_ui_events_dock_status.py +0 -355
  432. voidx-3.5.1/src/tests/test_ui/gateway/test_ui_events_streaming.py +0 -349
  433. voidx-3.5.1/src/tests/test_ui/gateway/test_ui_gateway.py +0 -396
  434. voidx-3.5.1/src/tests/test_ui/output/test_fmt_args.py +0 -50
  435. voidx-3.5.1/src/tests/test_ui/output/test_output_browse.py +0 -22
  436. voidx-3.5.1/src/tests/test_ui/output/test_tree_smoke.py +0 -327
  437. voidx-3.5.1/src/tests/test_ui/test_display_policy.py +0 -166
  438. voidx-3.5.1/src/tests/test_workflow/test_auto_advance.py +0 -412
  439. voidx-3.5.1/src/voidx/__init__.py +0 -3
  440. voidx-3.5.1/src/voidx/agent/attachments.py +0 -386
  441. voidx-3.5.1/src/voidx/agent/goal_resolver.py +0 -444
  442. voidx-3.5.1/src/voidx/agent/graph/contracts.py +0 -245
  443. voidx-3.5.1/src/voidx/agent/graph/core/helpers.py +0 -176
  444. voidx-3.5.1/src/voidx/agent/graph/core/llm.py +0 -470
  445. voidx-3.5.1/src/voidx/agent/graph/core/voidx_graph.py +0 -591
  446. voidx-3.5.1/src/voidx/agent/graph/permissions.py +0 -196
  447. voidx-3.5.1/src/voidx/agent/graph/run_loop.py +0 -419
  448. voidx-3.5.1/src/voidx/agent/graph/runtime_guards.py +0 -496
  449. voidx-3.5.1/src/voidx/agent/graph/subagent.py +0 -454
  450. voidx-3.5.1/src/voidx/agent/graph/tool_executor/executor.py +0 -410
  451. voidx-3.5.1/src/voidx/agent/graph/tool_executor/guards.py +0 -150
  452. voidx-3.5.1/src/voidx/agent/graph/tool_executor/helpers.py +0 -492
  453. voidx-3.5.1/src/voidx/agent/graph/tool_executor/types.py +0 -86
  454. voidx-3.5.1/src/voidx/agent/graph/turn_runner.py +0 -513
  455. voidx-3.5.1/src/voidx/agent/graph/wiring.py +0 -106
  456. voidx-3.5.1/src/voidx/agent/message_trimming.py +0 -511
  457. voidx-3.5.1/src/voidx/agent/prompts.py +0 -174
  458. voidx-3.5.1/src/voidx/agent/runtime_context.py +0 -607
  459. voidx-3.5.1/src/voidx/agent/slash/handler.py +0 -553
  460. voidx-3.5.1/src/voidx/agent/slash/host.py +0 -359
  461. voidx-3.5.1/src/voidx/agent/slash/model.py +0 -485
  462. voidx-3.5.1/src/voidx/agent/slash/profile.py +0 -162
  463. voidx-3.5.1/src/voidx/agent/slash/runtime.py +0 -74
  464. voidx-3.5.1/src/voidx/agent/state.py +0 -27
  465. voidx-3.5.1/src/voidx/config/__init__.py +0 -45
  466. voidx-3.5.1/src/voidx/config/models.py +0 -124
  467. voidx-3.5.1/src/voidx/config/settings.py +0 -486
  468. voidx-3.5.1/src/voidx/config/settings_permissions.py +0 -86
  469. voidx-3.5.1/src/voidx/data/templates/api-doc.md +0 -64
  470. voidx-3.5.1/src/voidx/data/templates/prd.md +0 -117
  471. voidx-3.5.1/src/voidx/data/templates/readme.md +0 -55
  472. voidx-3.5.1/src/voidx/data/templates/rfc.md +0 -38
  473. voidx-3.5.1/src/voidx/data/templates/tech-design.md +0 -68
  474. voidx-3.5.1/src/voidx/diffing.py +0 -323
  475. voidx-3.5.1/src/voidx/llm/catalog.py +0 -204
  476. voidx-3.5.1/src/voidx/llm/compaction.py +0 -652
  477. voidx-3.5.1/src/voidx/llm/instruction.py +0 -308
  478. voidx-3.5.1/src/voidx/llm/provider.py +0 -705
  479. voidx-3.5.1/src/voidx/llm/service.py +0 -34
  480. voidx-3.5.1/src/voidx/lsp/client.py +0 -267
  481. voidx-3.5.1/src/voidx/lsp/errors.py +0 -19
  482. voidx-3.5.1/src/voidx/lsp/manager.py +0 -388
  483. voidx-3.5.1/src/voidx/main.py +0 -167
  484. voidx-3.5.1/src/voidx/mcp/client/base.py +0 -355
  485. voidx-3.5.1/src/voidx/mcp/client/http_transport.py +0 -120
  486. voidx-3.5.1/src/voidx/mcp/client/sse_transport.py +0 -151
  487. voidx-3.5.1/src/voidx/mcp/client/stdio_transport.py +0 -116
  488. voidx-3.5.1/src/voidx/mcp/manager.py +0 -321
  489. voidx-3.5.1/src/voidx/mcp/tool.py +0 -75
  490. voidx-3.5.1/src/voidx/mcp_servers/web.py +0 -104
  491. voidx-3.5.1/src/voidx/memory/transcript.py +0 -495
  492. voidx-3.5.1/src/voidx/paths.py +0 -45
  493. voidx-3.5.1/src/voidx/permission/context.py +0 -59
  494. voidx-3.5.1/src/voidx/permission/engine.py +0 -195
  495. voidx-3.5.1/src/voidx/permission/evaluate.py +0 -114
  496. voidx-3.5.1/src/voidx/permission/rules.py +0 -404
  497. voidx-3.5.1/src/voidx/permission/schema.py +0 -24
  498. voidx-3.5.1/src/voidx/permission/service.py +0 -326
  499. voidx-3.5.1/src/voidx/runtime/task_state.py +0 -235
  500. voidx-3.5.1/src/voidx/runtime/ui.py +0 -288
  501. voidx-3.5.1/src/voidx/selfupdate.py +0 -209
  502. voidx-3.5.1/src/voidx/tools/__init__.py +0 -19
  503. voidx-3.5.1/src/voidx/tools/agent.py +0 -294
  504. voidx-3.5.1/src/voidx/tools/base.py +0 -230
  505. voidx-3.5.1/src/voidx/tools/bash/hint/file.py +0 -232
  506. voidx-3.5.1/src/voidx/tools/bash/safety.py +0 -59
  507. voidx-3.5.1/src/voidx/tools/bash/tool.py +0 -75
  508. voidx-3.5.1/src/voidx/tools/clarify.py +0 -154
  509. voidx-3.5.1/src/voidx/tools/file_ops/__init__.py +0 -19
  510. voidx-3.5.1/src/voidx/tools/file_ops/edit_execute.py +0 -563
  511. voidx-3.5.1/src/voidx/tools/file_ops/edit_resolve.py +0 -325
  512. voidx-3.5.1/src/voidx/tools/file_ops/file.py +0 -187
  513. voidx-3.5.1/src/voidx/tools/file_ops/read.py +0 -279
  514. voidx-3.5.1/src/voidx/tools/file_ops/write.py +0 -138
  515. voidx-3.5.1/src/voidx/tools/file_state.py +0 -467
  516. voidx-3.5.1/src/voidx/tools/git.py +0 -951
  517. voidx-3.5.1/src/voidx/tools/load_doc_template.py +0 -67
  518. voidx-3.5.1/src/voidx/tools/load_skills.py +0 -12
  519. voidx-3.5.1/src/voidx/tools/lsp.py +0 -140
  520. voidx-3.5.1/src/voidx/tools/plan_checkpoint.py +0 -367
  521. voidx-3.5.1/src/voidx/tools/powershell/sandbox.py +0 -241
  522. voidx-3.5.1/src/voidx/tools/powershell/tool.py +0 -97
  523. voidx-3.5.1/src/voidx/tools/registry.py +0 -146
  524. voidx-3.5.1/src/voidx/tools/search.py +0 -311
  525. voidx-3.5.1/src/voidx/tools/service.py +0 -32
  526. voidx-3.5.1/src/voidx/tools/shell/common.py +0 -165
  527. voidx-3.5.1/src/voidx/tools/shell/hint/git.py +0 -44
  528. voidx-3.5.1/src/voidx/tools/skills.py +0 -252
  529. voidx-3.5.1/src/voidx/tools/todo.py +0 -289
  530. voidx-3.5.1/src/voidx/tools/web_mcp.py +0 -108
  531. voidx-3.5.1/src/voidx/tools/webfetch.py +0 -256
  532. voidx-3.5.1/src/voidx/tools/websearch.py +0 -285
  533. voidx-3.5.1/src/voidx/tools/workflow.py +0 -654
  534. voidx-3.5.1/src/voidx/ui/commands.py +0 -111
  535. voidx-3.5.1/src/voidx/ui/gateway/__init__.py +0 -6
  536. voidx-3.5.1/src/voidx/ui/gateway/adapter.py +0 -547
  537. voidx-3.5.1/src/voidx/ui/gateway/run_manager.py +0 -269
  538. voidx-3.5.1/src/voidx/ui/gateway/server.py +0 -242
  539. voidx-3.5.1/src/voidx/ui/gateway/session/core.py +0 -399
  540. voidx-3.5.1/src/voidx/ui/gateway/session/method/sessions.py +0 -142
  541. voidx-3.5.1/src/voidx/ui/gateway/session/method/settings.py +0 -250
  542. voidx-3.5.1/src/voidx/ui/output/browse.py +0 -174
  543. voidx-3.5.1/src/voidx/ui/output/console/app.py +0 -358
  544. voidx-3.5.1/src/voidx/ui/output/console/formatting.py +0 -104
  545. voidx-3.5.1/src/voidx/ui/output/console/streaming.py +0 -212
  546. voidx-3.5.1/src/voidx/ui/output/diff.py +0 -130
  547. voidx-3.5.1/src/voidx/ui/output/display_policy.py +0 -135
  548. voidx-3.5.1/src/voidx/ui/output/dock/__init__.py +0 -38
  549. voidx-3.5.1/src/voidx/ui/output/dock/app.py +0 -478
  550. voidx-3.5.1/src/voidx/ui/output/dock/nodes.py +0 -447
  551. voidx-3.5.1/src/voidx/ui/output/dock/nodes_checkpoint.py +0 -126
  552. voidx-3.5.1/src/voidx/ui/output/dock/nodes_clarify.py +0 -92
  553. voidx-3.5.1/src/voidx/ui/output/dock/nodes_status.py +0 -79
  554. voidx-3.5.1/src/voidx/ui/output/dock/state.py +0 -53
  555. voidx-3.5.1/src/voidx/ui/output/dock/status.py +0 -134
  556. voidx-3.5.1/src/voidx/ui/output/dock/stream.py +0 -172
  557. voidx-3.5.1/src/voidx/ui/output/events/__init__.py +0 -121
  558. voidx-3.5.1/src/voidx/ui/output/events/bus.py +0 -154
  559. voidx-3.5.1/src/voidx/ui/output/events/consumers.py +0 -612
  560. voidx-3.5.1/src/voidx/ui/output/events/schema.py +0 -359
  561. voidx-3.5.1/src/voidx/ui/output/tree.py +0 -809
  562. voidx-3.5.1/src/voidx/ui/output/types.py +0 -98
  563. voidx-3.5.1/src/voidx/ui/protocol/requests.py +0 -51
  564. voidx-3.5.1/src/voidx/ui/session.py +0 -378
  565. voidx-3.5.1/src/voidx/workflow/dag.py +0 -30
  566. voidx-3.5.1/src/voidx/workflow/nodes.py +0 -415
  567. voidx-3.5.1/src/voidx/workflow/runtime.py +0 -281
  568. voidx-3.5.1/src/voidx/workflow/types.py +0 -101
  569. voidx-3.5.1/src/voidx.egg-info/PKG-INFO +0 -100
  570. voidx-3.5.1/src/voidx.egg-info/SOURCES.txt +0 -516
  571. {voidx-3.5.1 → voidx-3.7.0}/LICENSE +0 -0
  572. {voidx-3.5.1 → voidx-3.7.0}/setup.cfg +0 -0
  573. {voidx-3.5.1 → voidx-3.7.0}/src/tests/__init__.py +0 -0
  574. {voidx-3.5.1 → voidx-3.7.0}/src/tests/conftest.py +0 -0
  575. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/__init__.py +0 -0
  576. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/conftest.py +0 -0
  577. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/__init__.py +0 -0
  578. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/run_loop_helpers.py +0 -0
  579. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_compaction_flow.py +0 -0
  580. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_convergence.py +0 -0
  581. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_parallel_subagents.py +0 -0
  582. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_run_loop_title_lsp.py +0 -0
  583. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_session_context_frames.py +0 -0
  584. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_session_crud.py +0 -0
  585. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_session_messages.py +0 -0
  586. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_session_runtime_state.py +0 -0
  587. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_session_transcript.py +0 -0
  588. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_stream_llm_sanitization.py +0 -0
  589. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_subagent_persistence.py +0 -0
  590. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_subagent_step_budget.py +0 -0
  591. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_subagent_step_budget_convergence.py +0 -0
  592. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_subagent_step_budget_final.py +0 -0
  593. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_todo_events.py +0 -0
  594. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/graph/test_tool_result_preview.py +0 -0
  595. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/__init__.py +0 -0
  596. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/test_slash_init.py +0 -0
  597. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/test_slash_mcp.py +0 -0
  598. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/test_slash_model_advanced.py +0 -0
  599. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/test_slash_tavily.py +0 -0
  600. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/slash/test_slash_upgrade.py +0 -0
  601. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_attachments.py +0 -0
  602. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_message_trimming_parsers.py +0 -0
  603. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_module_boundaries.py +0 -0
  604. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_permission_append.py +0 -0
  605. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_runtime_context_prompts.py +0 -0
  606. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_runtime_context_skill_stripping.py +0 -0
  607. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_todo_replay_sanitization.py +0 -0
  608. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_tool_exchange_sanitizer.py +0 -0
  609. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_tool_filters_gemini.py +0 -0
  610. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_tool_messages.py +0 -0
  611. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_agent/test_tool_result_storage.py +0 -0
  612. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_config/__init__.py +0 -0
  613. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_config/test_config.py +0 -0
  614. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/conftest.py +0 -0
  615. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_compaction_retry.py +0 -0
  616. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_llm_provider_advanced.py +0 -0
  617. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_llm_usage.py +0 -0
  618. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_overflow_threshold.py +0 -0
  619. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_prune_args.py +0 -0
  620. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_request_log.py +0 -0
  621. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_streaming_sanitize.py +0 -0
  622. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_llm/test_token_counting.py +0 -0
  623. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_logging/test_internal_error.py +0 -0
  624. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_logging/test_tool_log.py +0 -0
  625. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_lsp/__init__.py +0 -0
  626. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_lsp/test_lsp_advanced.py +0 -0
  627. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_mcp/__init__.py +0 -0
  628. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_memory/__init__.py +0 -0
  629. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_memory/test_main_startup.py +0 -0
  630. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_memory/test_schema_migration.py +0 -0
  631. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_permission/__init__.py +0 -0
  632. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_runtime/__init__.py +0 -0
  633. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_runtime/test_goal_resolution_refactor.py +0 -0
  634. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_selfupdate/__init__.py +0 -0
  635. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_skills/__init__.py +0 -0
  636. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_skills/conftest.py +0 -0
  637. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_skills/test_create_skill.py +0 -0
  638. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_skills/test_skill_parsing.py +0 -0
  639. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_skills/test_skill_references.py +0 -0
  640. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_tools/__init__.py +0 -0
  641. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_tools/bash/__init__.py +0 -0
  642. {voidx-3.5.1/src/tests/test_tools/file_ops → voidx-3.7.0/src/tests/test_tools/file}/__init__.py +0 -0
  643. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_tools/test_git_tool_destructive.py +0 -0
  644. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_tools/test_skills_tool.py +0 -0
  645. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_tools/test_todo_tool.py +0 -0
  646. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/__init__.py +0 -0
  647. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/conftest.py +0 -0
  648. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/helpers.py +0 -0
  649. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_diff_review.py +0 -0
  650. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_gateway_v2_crud_diff.py +0 -0
  651. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_run_manager.py +0 -0
  652. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_terminal.py +0 -0
  653. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_ui_events_dock_bus.py +0 -0
  654. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_ui_events_subagent.py +0 -0
  655. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/gateway/test_ui_events_todo.py +0 -0
  656. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/output/__init__.py +0 -0
  657. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/output/test_dock_formatting.py +0 -0
  658. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/output/test_scrollback_flush.py +0 -0
  659. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/output/test_ui_diff.py +0 -0
  660. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/output/test_ui_session_changes.py +0 -0
  661. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/__init__.py +0 -0
  662. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/test_dto.py +0 -0
  663. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/test_v2_envelope.py +0 -0
  664. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/test_v2_methods.py +0 -0
  665. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/test_v2_snapshot.py +0 -0
  666. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/protocol/test_v2_threads.py +0 -0
  667. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/test_file_picker.py +0 -0
  668. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/__init__.py +0 -0
  669. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/test_clipboard_image.py +0 -0
  670. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/test_clipboard_image_windows.py +0 -0
  671. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/test_clipboard_text.py +0 -0
  672. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/test_clipboard_text_windows.py +0 -0
  673. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_ui/tools/test_code_ide.py +0 -0
  674. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_workflow/__init__.py +0 -0
  675. {voidx-3.5.1 → voidx-3.7.0}/src/tests/test_workflow/test_workflow_reconcile.py +0 -0
  676. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/__init__.py +0 -0
  677. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/agents.py +0 -0
  678. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/__init__.py +0 -0
  679. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/compaction.py +0 -0
  680. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/compaction_coordinator.py +0 -0
  681. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/convergence.py +0 -0
  682. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/core/__init__.py +0 -0
  683. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/runtime.py +0 -0
  684. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/session_mixin.py +0 -0
  685. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/session_runtime.py +0 -0
  686. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/streaming.py +0 -0
  687. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/thread_context.py +0 -0
  688. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/title_mixin.py +0 -0
  689. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/todo_events.py +0 -0
  690. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/tool_execution.py +0 -0
  691. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/tool_executor/__init__.py +0 -0
  692. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/tool_executor/ui.py +0 -0
  693. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/tool_executor/workflow.py +0 -0
  694. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/topology.py +0 -0
  695. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/transcript_mixin.py +0 -0
  696. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/turn_mixin.py +0 -0
  697. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/graph/workflow_utils.py +0 -0
  698. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/message_rows.py +0 -0
  699. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/__init__.py +0 -0
  700. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/code_ide.py +0 -0
  701. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/guide.py +0 -0
  702. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/init.py +0 -0
  703. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/lsp.py +0 -0
  704. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/mcp.py +0 -0
  705. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/session.py +0 -0
  706. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/skills.py +0 -0
  707. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/slash/upgrade.py +0 -0
  708. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/task_state.py +0 -0
  709. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/todo_state.py +0 -0
  710. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/tool_call_ids.py +0 -0
  711. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/tool_exchange_sanitizer.py +0 -0
  712. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/tool_filters.py +0 -0
  713. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/tool_messages.py +0 -0
  714. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/agent/tool_result_storage.py +0 -0
  715. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/defaults.py +0 -0
  716. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/enums.py +0 -0
  717. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/permissions.py +0 -0
  718. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_agent.py +0 -0
  719. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_api_keys.py +0 -0
  720. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_code_ide.py +0 -0
  721. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_custom.py +0 -0
  722. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_mcp.py +0 -0
  723. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_skills.py +0 -0
  724. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_update.py +0 -0
  725. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_utils.py +0 -0
  726. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/config/settings_web.py +0 -0
  727. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/data/__init__.py +0 -0
  728. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/llm/__init__.py +0 -0
  729. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/llm/context.py +0 -0
  730. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/llm/message_markers.py +0 -0
  731. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/llm/message_status.py +0 -0
  732. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/llm/usage.py +0 -0
  733. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/logging/__init__.py +0 -0
  734. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/logging/internal_error.py +0 -0
  735. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/logging/request_log.py +0 -0
  736. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/logging/tool_log.py +0 -0
  737. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/__init__.py +0 -0
  738. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/config.py +0 -0
  739. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/detector.py +0 -0
  740. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/detector_data.py +0 -0
  741. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/schema.py +0 -0
  742. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/lsp/service.py +0 -0
  743. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/mcp/__init__.py +0 -0
  744. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/mcp/client/__init__.py +0 -0
  745. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/mcp/client/errors.py +0 -0
  746. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/mcp/schema.py +0 -0
  747. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/mcp_servers/__init__.py +0 -0
  748. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/__init__.py +0 -0
  749. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/cleanup.py +0 -0
  750. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/context_frames.py +0 -0
  751. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/jsonl_store.py +0 -0
  752. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/model_profiles.py +0 -0
  753. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/runtime_state.py +0 -0
  754. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/service.py +0 -0
  755. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/session.py +0 -0
  756. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/store.py +0 -0
  757. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/memory/subagents.py +0 -0
  758. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/permission/__init__.py +0 -0
  759. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/permission/sandbox.py +0 -0
  760. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/permission/wildcard.py +0 -0
  761. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/__init__.py +0 -0
  762. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/attachments.py +0 -0
  763. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/intent.py +0 -0
  764. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/reference_tokens.py +0 -0
  765. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/todo.py +0 -0
  766. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/runtime/ui_port.py +0 -0
  767. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/__init__.py +0 -0
  768. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/context.py +0 -0
  769. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/references.py +0 -0
  770. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/registry.py +0 -0
  771. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/schema.py +0 -0
  772. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/skills/service.py +0 -0
  773. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/__init__.py +0 -0
  774. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/core.py +0 -0
  775. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/hint/__init__.py +0 -0
  776. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/hint/git.py +0 -0
  777. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/hint/search.py +0 -0
  778. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/bash/router.py +0 -0
  779. /voidx-3.5.1/src/voidx/tools/compact_context.py → /voidx-3.7.0/src/voidx/tools/compact.py +0 -0
  780. {voidx-3.5.1/src/voidx/tools/file_ops → voidx-3.7.0/src/voidx/tools/file}/types.py +0 -0
  781. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/__init__.py +0 -0
  782. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/core.py +0 -0
  783. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/hint/__init__.py +0 -0
  784. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/hint/file.py +0 -0
  785. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/hint/search.py +0 -0
  786. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/router.py +0 -0
  787. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/powershell/safety.py +0 -0
  788. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/shell/__init__.py +0 -0
  789. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/shell/hint/__init__.py +0 -0
  790. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/task_status.py +0 -0
  791. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/tools/task_tracker.py +0 -0
  792. /voidx-3.5.1/src/voidx/tools/web_content.py → /voidx-3.7.0/src/voidx/tools/web/content.py +0 -0
  793. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/__init__.py +0 -0
  794. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/command_catalog.py +0 -0
  795. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/frontend.py +0 -0
  796. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/bootstrap.py +0 -0
  797. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/diff_review.py +0 -0
  798. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/__init__.py +0 -0
  799. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/consumer.py +0 -0
  800. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/method/__init__.py +0 -0
  801. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/method/diff.py +0 -0
  802. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/method/integrations.py +0 -0
  803. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/session/method/terminal.py +0 -0
  804. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/gateway/terminal.py +0 -0
  805. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/__init__.py +0 -0
  806. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/agent_display.py +0 -0
  807. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/ansi_marker.py +0 -0
  808. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/capture.py +0 -0
  809. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/console/__init__.py +0 -0
  810. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/dock/agent_placeholder.py +0 -0
  811. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/dock/formatting.py +0 -0
  812. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/dock/nodes_permission.py +0 -0
  813. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/dock/nodes_startup.py +0 -0
  814. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/output/dock/todo.py +0 -0
  815. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/__init__.py +0 -0
  816. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/commands.py +0 -0
  817. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/schema.py +0 -0
  818. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/transcript.py +0 -0
  819. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/v2/__init__.py +0 -0
  820. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/v2/envelope.py +0 -0
  821. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/v2/methods.py +0 -0
  822. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/v2/snapshot.py +0 -0
  823. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/protocol/v2/threads.py +0 -0
  824. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/__init__.py +0 -0
  825. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/attachment_tokens.py +0 -0
  826. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/clipboard_image.py +0 -0
  827. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/clipboard_text.py +0 -0
  828. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/code_ide.py +0 -0
  829. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/file_picker.py +0 -0
  830. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/tools/skill_picker.py +0 -0
  831. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/ui/transcript.py +0 -0
  832. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/__init__.py +0 -0
  833. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/auto_advance.py +0 -0
  834. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/context.py +0 -0
  835. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/policy.py +0 -0
  836. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/reconcile.py +0 -0
  837. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/render.py +0 -0
  838. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/route.py +0 -0
  839. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/schema.py +0 -0
  840. {voidx-3.5.1 → voidx-3.7.0}/src/voidx/workflow/service.py +0 -0
  841. {voidx-3.5.1 → voidx-3.7.0}/src/voidx.egg-info/dependency_links.txt +0 -0
  842. {voidx-3.5.1 → voidx-3.7.0}/src/voidx.egg-info/entry_points.txt +0 -0
  843. {voidx-3.5.1 → voidx-3.7.0}/src/voidx.egg-info/requires.txt +0 -0
  844. {voidx-3.5.1 → voidx-3.7.0}/src/voidx.egg-info/top_level.txt +0 -0
voidx-3.7.0/PKG-INFO ADDED
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.4
2
+ Name: voidx
3
+ Version: 3.7.0
4
+ Summary: A coding agent that quantifies everything and solves with tools, not fuzzy prompts.
5
+ Author: chikhamx
6
+ License: MIT
7
+ Requires-Python: >=3.11
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: langgraph>=0.3.0
11
+ Requires-Dist: langchain>=0.3.0
12
+ Requires-Dist: langchain-anthropic>=0.3.0
13
+ Requires-Dist: langchain-openai>=0.3.0
14
+ Requires-Dist: pydantic>=2.10.0
15
+ Requires-Dist: pydantic-settings>=2.7.0
16
+ Requires-Dist: typer>=0.15.0
17
+ Requires-Dist: rich>=13.9.0
18
+ Requires-Dist: tiktoken>=0.8.0
19
+ Requires-Dist: httpx>=0.28.0
20
+ Requires-Dist: websockets>=14
21
+ Requires-Dist: pathspec>=0.12
22
+ Requires-Dist: Pillow>=10.0.0; platform_system == "Windows"
23
+ Provides-Extra: gemini
24
+ Requires-Dist: langchain-google-genai>=4.0.0; extra == "gemini"
25
+ Provides-Extra: dev
26
+ Requires-Dist: build>=1.2.0; extra == "dev"
27
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
28
+ Requires-Dist: pytest-asyncio>=0.25.0; extra == "dev"
29
+ Dynamic: license-file
30
+
31
+ # voidx
32
+
33
+ voidx is a terminal AI coding agent built in Python.
34
+
35
+ ## Install
36
+
37
+ ### One-line install (no Python or npm required)
38
+
39
+ macOS / Linux:
40
+
41
+ ```bash
42
+ curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
43
+ ```
44
+
45
+ Windows (PowerShell):
46
+
47
+ ```powershell
48
+ irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
49
+ ```
50
+
51
+ The installer downloads a standalone Python runtime and sets up voidx in an
52
+ isolated environment — nothing else is needed on your machine.
53
+
54
+ ### pip
55
+
56
+ ```bash
57
+ python -m pip install voidx voidx-cli
58
+ voidx
59
+ ```
60
+
61
+ ### npm
62
+
63
+ ```bash
64
+ npm install -g @chikhamx/voidx
65
+ voidx
66
+ ```
67
+
68
+ ## Upgrade
69
+
70
+ Upgrade both Python packages together so the core and terminal UI stay on the
71
+ same version:
72
+
73
+ ```bash
74
+ python -m pip install --upgrade voidx voidx-cli
75
+ ```
76
+
77
+ For npm installations, upgrade the npm package instead:
78
+
79
+ ```bash
80
+ npm update -g @chikhamx/voidx
81
+ ```
82
+
83
+ The one-line installers can be rerun to repair or upgrade their managed
84
+ environment.
85
+
86
+ ### From source
87
+
88
+ ```bash
89
+ git clone https://github.com/chikhamx/voidx.git
90
+ cd voidx
91
+ pip install -e .
92
+ voidx
93
+ ```
94
+
95
+ ### China / slow network
96
+
97
+ Set mirror environment variables before running any install method:
98
+
99
+ ```bash
100
+ export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
101
+ export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
102
+ ```
103
+
104
+ ## Useful Commands
105
+
106
+ ```bash
107
+ voidx version
108
+ voidx sessions
109
+ voidx -w /path/to/project
110
+ ```
111
+
112
+ ## Development
113
+
114
+ ```bash
115
+ .venv/bin/python -m pytest
116
+ .venv/bin/python scripts/package.py --format all --clean
117
+ npm --prefix npm run check
118
+ ```
voidx-3.7.0/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # voidx
2
+
3
+ voidx is a terminal AI coding agent built in Python.
4
+
5
+ ## Install
6
+
7
+ ### One-line install (no Python or npm required)
8
+
9
+ macOS / Linux:
10
+
11
+ ```bash
12
+ curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
13
+ ```
14
+
15
+ Windows (PowerShell):
16
+
17
+ ```powershell
18
+ irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
19
+ ```
20
+
21
+ The installer downloads a standalone Python runtime and sets up voidx in an
22
+ isolated environment — nothing else is needed on your machine.
23
+
24
+ ### pip
25
+
26
+ ```bash
27
+ python -m pip install voidx voidx-cli
28
+ voidx
29
+ ```
30
+
31
+ ### npm
32
+
33
+ ```bash
34
+ npm install -g @chikhamx/voidx
35
+ voidx
36
+ ```
37
+
38
+ ## Upgrade
39
+
40
+ Upgrade both Python packages together so the core and terminal UI stay on the
41
+ same version:
42
+
43
+ ```bash
44
+ python -m pip install --upgrade voidx voidx-cli
45
+ ```
46
+
47
+ For npm installations, upgrade the npm package instead:
48
+
49
+ ```bash
50
+ npm update -g @chikhamx/voidx
51
+ ```
52
+
53
+ The one-line installers can be rerun to repair or upgrade their managed
54
+ environment.
55
+
56
+ ### From source
57
+
58
+ ```bash
59
+ git clone https://github.com/chikhamx/voidx.git
60
+ cd voidx
61
+ pip install -e .
62
+ voidx
63
+ ```
64
+
65
+ ### China / slow network
66
+
67
+ Set mirror environment variables before running any install method:
68
+
69
+ ```bash
70
+ export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
71
+ export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
72
+ ```
73
+
74
+ ## Useful Commands
75
+
76
+ ```bash
77
+ voidx version
78
+ voidx sessions
79
+ voidx -w /path/to/project
80
+ ```
81
+
82
+ ## Development
83
+
84
+ ```bash
85
+ .venv/bin/python -m pytest
86
+ .venv/bin/python scripts/package.py --format all --clean
87
+ npm --prefix npm run check
88
+ ```
@@ -0,0 +1,64 @@
1
+ [project]
2
+ name = "voidx"
3
+ dynamic = ["version"]
4
+ description = "A coding agent that quantifies everything and solves with tools, not fuzzy prompts."
5
+ license = {text = "MIT"}
6
+ authors = [{name = "chikhamx"}]
7
+ readme = "README.md"
8
+ requires-python = ">=3.11"
9
+ dependencies = [
10
+ "langgraph>=0.3.0",
11
+ "langchain>=0.3.0",
12
+ "langchain-anthropic>=0.3.0",
13
+ "langchain-openai>=0.3.0",
14
+ "pydantic>=2.10.0",
15
+ "pydantic-settings>=2.7.0",
16
+ "typer>=0.15.0",
17
+ "rich>=13.9.0",
18
+ "tiktoken>=0.8.0",
19
+ "httpx>=0.28.0",
20
+ "websockets>=14",
21
+ "pathspec>=0.12",
22
+ "Pillow>=10.0.0; platform_system == 'Windows'",
23
+ ]
24
+
25
+ [project.scripts]
26
+ voidx = "voidx.main:cli"
27
+
28
+ [project.optional-dependencies]
29
+ gemini = ["langchain-google-genai>=4.0.0"]
30
+ dev = [
31
+ "build>=1.2.0",
32
+ "pytest>=8.0.0",
33
+ "pytest-asyncio>=0.25.0",
34
+ ]
35
+
36
+ [dependency-groups]
37
+ dev = [
38
+ "build>=1.2.0",
39
+ "pytest>=8.0.0",
40
+ "pytest-asyncio>=0.25.0",
41
+ ]
42
+
43
+ [build-system]
44
+ requires = ["setuptools>=68", "wheel"]
45
+ build-backend = "setuptools.build_meta"
46
+
47
+ [tool.setuptools.dynamic]
48
+ version = {attr = "voidx.__version__"}
49
+
50
+ [tool.setuptools.packages.find]
51
+ where = ["src"]
52
+
53
+ [tool.setuptools.package-data]
54
+ "voidx.skills" = [
55
+ "bundled/*/SKILL.md",
56
+ ]
57
+ "voidx.data" = [
58
+ "documents/**/*.md",
59
+ ]
60
+
61
+ [tool.pytest.ini_options]
62
+ asyncio_mode = "auto"
63
+ pythonpath = ["src", "tui"]
64
+ testpaths = ["src/tests", "tui/tests"]
@@ -0,0 +1 @@
1
+ """Existing conftest."""
@@ -0,0 +1,272 @@
1
+ """Shared helpers for test_stream_llm split files."""
2
+
3
+ import sys
4
+ from pathlib import Path
5
+ from types import SimpleNamespace
6
+
7
+ from langchain_core.messages import AIMessage, AIMessageChunk, HumanMessage, RemoveMessage, SystemMessage, ToolMessage
8
+ from langgraph.graph.message import REMOVE_ALL_MESSAGES
9
+ from rich.console import Console
10
+
11
+
12
+ from voidx.agent.graph.streaming import stream_llm as _stream_llm
13
+ from voidx.agent.graph import VoidXGraph
14
+ from voidx.agent.graph.convergence import is_step_hint_message
15
+ from voidx.agent.runtime_context import RuntimeContextBuilder
16
+ from voidx.agent.task_state import TaskState, TodoRunState
17
+ from voidx.config import Config, ModelConfig
18
+ from voidx.llm.compaction import CompactionSelection
19
+ from voidx.llm.message_markers import is_guidance_message
20
+ from voidx.memory.context_frames import load_context_frames
21
+ from voidx.memory.session import MessageRow, create_session, delete_session, save_message
22
+ from voidx.ui.output.console import StreamingRenderer
23
+ from voidx.ui.output.dock import ANSI_LINE_PREFIX, BottomInputDock, set_dock
24
+ from voidx.ui.output.events import AnsiAppended, DockEventConsumer, StatusFinished, StatusUpdated, ui_events
25
+ from voidx.workflow.runtime import WorkflowRunState, WorkflowRunStatus
26
+
27
+ def _plain(line: str) -> str:
28
+ return line.replace(ANSI_LINE_PREFIX, "")
29
+
30
+
31
+ class FakeStreamingModel:
32
+ def __init__(self) -> None:
33
+ self.messages = None
34
+
35
+ def bind_tools(self, tool_defs):
36
+ return self
37
+
38
+ async def astream(self, messages):
39
+ self.messages = messages
40
+ yield AIMessageChunk(content=[{"type": "thinking", "text": "think"}])
41
+ yield AIMessageChunk(content="answer")
42
+ yield AIMessageChunk(
43
+ content="",
44
+ tool_calls=[{"name": "turn", "args": {"operation": "stop", "intent": "", "goal": ""}, "id": "turn-1", "type": "tool_call"}],
45
+ )
46
+
47
+
48
+ class FakeUsageStreamingModel:
49
+ def bind_tools(self, tool_defs):
50
+ return self
51
+
52
+ async def astream(self, messages):
53
+ yield AIMessageChunk(
54
+ content="answer",
55
+ usage_metadata={
56
+ "input_tokens": 7,
57
+ "output_tokens": 3,
58
+ "total_tokens": 10,
59
+ },
60
+ )
61
+ yield AIMessageChunk(
62
+ content="",
63
+ tool_calls=[{"name": "turn", "args": {"operation": "stop", "intent": "", "goal": ""}, "id": "turn-1", "type": "tool_call"}],
64
+ )
65
+
66
+
67
+ class FakeDuplicatedReasoningStreamingModel:
68
+ async def astream(self, messages):
69
+ yield AIMessageChunk(
70
+ content="622",
71
+ additional_kwargs={"reasoning_content": "622"},
72
+ )
73
+ yield AIMessageChunk(content="final answer")
74
+ yield AIMessageChunk(
75
+ content="",
76
+ tool_calls=[{"name": "turn", "args": {"operation": "stop", "intent": "", "goal": ""}, "id": "turn-1", "type": "tool_call"}],
77
+ )
78
+
79
+
80
+ class FakeDsmlStreamingModel:
81
+ def __init__(self) -> None:
82
+ self.messages = None
83
+
84
+ def bind_tools(self, tool_defs):
85
+ return self
86
+
87
+ async def astream(self, messages):
88
+ self.messages = messages
89
+ yield AIMessageChunk(content=(
90
+ '也必须在 commands 列表中注册:\n\n'
91
+ '<||DSML||tool_calls>\n'
92
+ '<||DSML||invoke name="grep">\n'
93
+ '<||DSML||parameter name="path" string="true">src/voidx/ui/commands.py</||DSML||parameter>\n'
94
+ '<||DSML||parameter name="pattern" string="true">permissions</||DSML||parameter>\n'
95
+ '</||DSML||invoke>\n'
96
+ '</||DSML||tool_calls>'
97
+ ))
98
+
99
+
100
+ class FakeMalformedDsmlStreamingModel:
101
+ def bind_tools(self, tool_defs):
102
+ return self
103
+
104
+ async def astream(self, messages):
105
+ yield AIMessageChunk(content=(
106
+ '<|||DSML||tool_calls>\n'
107
+ '<||DSML||invoke name="grep">\n'
108
+ '<||DSML||parameter name="path" string="true">src/voidx/ui/commands.py</||DSML||parameter>\n'
109
+ '</||DSML||invoke>\n'
110
+ '</|||DSML||tool_calls>'
111
+ ))
112
+
113
+
114
+ class FakeMalformedLegacyXmlStreamingModel:
115
+ def bind_tools(self, tool_defs):
116
+ return self
117
+
118
+ async def astream(self, messages):
119
+ yield AIMessageChunk(content=(
120
+ "<tool_call>"
121
+ "<tool_name>read</tool_name>"
122
+ "<arg_key>file_path</arg_key><arg_value>src/voidx/permission/engine.py</arg_value>"
123
+ ))
124
+
125
+
126
+ class RepairsMalformedToolCallStreamingModel:
127
+ def __init__(self) -> None:
128
+ self.calls = 0
129
+ self.messages_by_call = []
130
+
131
+ def bind_tools(self, tool_defs):
132
+ return self
133
+
134
+ async def astream(self, messages):
135
+ self.calls += 1
136
+ self.messages_by_call.append(messages)
137
+ if self.calls == 1:
138
+ yield AIMessageChunk(content=(
139
+ "<tool_call>"
140
+ "<tool_name>read</tool_name>"
141
+ "<arg_key>file_path</arg_key><arg_value>src/voidx/permission/engine.py</arg_value>"
142
+ ))
143
+ return
144
+ yield AIMessageChunk(content="repaired answer")
145
+ yield AIMessageChunk(
146
+ content="",
147
+ tool_calls=[{"name": "turn", "args": {"operation": "stop", "intent": "", "goal": ""}, "id": "turn-1", "type": "tool_call"}],
148
+ )
149
+
150
+
151
+ class AlwaysMalformedToolCallStreamingModel:
152
+ def __init__(self) -> None:
153
+ self.calls = 0
154
+
155
+ def bind_tools(self, tool_defs):
156
+ return self
157
+
158
+ async def astream(self, messages):
159
+ self.calls += 1
160
+ yield AIMessageChunk(content=(
161
+ "<tool_call>"
162
+ "<tool_name>read</tool_name>"
163
+ "<arg_key>file_path</arg_key><arg_value>src/voidx/permission/engine.py</arg_value>"
164
+ ))
165
+
166
+
167
+ class FakeMalformedProviderJsonToolCallStreamingModel:
168
+ def bind_tools(self, tool_defs):
169
+ return self
170
+
171
+ async def astream(self, messages):
172
+ yield AIMessageChunk(content=(
173
+ '{"tool_calls":[{"function":{"name":"read","arguments":"{\\"file_path\\":'
174
+ ))
175
+
176
+
177
+ class FakeLegacyXmlToolCallStreamingModel:
178
+ def bind_tools(self, tool_defs):
179
+ return self
180
+
181
+ async def astream(self, messages):
182
+ yield AIMessageChunk(content=(
183
+ "<tool_call>"
184
+ "<tool_name>Read</tool_name>"
185
+ "<arg_key>file_path</arg_key><arg_value>src/voidx/permission/engine.py</arg_value>"
186
+ "<arg_key>offset</arg_key><arg_value>110</arg_value>"
187
+ "<arg_key>limit</arg_key><arg_value>50</arg_value>"
188
+ "</tool_call>"
189
+ ))
190
+
191
+
192
+ class FakeLegacyXmlArgPairToolCallStreamingModel:
193
+ def bind_tools(self, tool_defs):
194
+ return self
195
+
196
+ async def astream(self, messages):
197
+ yield AIMessageChunk(content=(
198
+ "<tool_call>"
199
+ "<arg_key>tool_name</arg_key><arg_value>read</arg_value>"
200
+ "<arg_key>file_path</arg_key><arg_value>src/voidx/permission/engine.py</arg_value>"
201
+ "<arg_key>offset</arg_key><arg_value>110</arg_value>"
202
+ "</tool_call>"
203
+ ))
204
+
205
+
206
+ class TrackingStreamingModel(FakeStreamingModel):
207
+ def __init__(self) -> None:
208
+ super().__init__()
209
+ self.bound_tools = None
210
+
211
+ def bind_tools(self, tool_defs):
212
+ self.bound_tools = tool_defs
213
+ return self
214
+
215
+
216
+ class FailsOnceStreamingModel(FakeStreamingModel):
217
+ def __init__(self) -> None:
218
+ super().__init__()
219
+ self.calls = 0
220
+
221
+ async def astream(self, messages):
222
+ self.calls += 1
223
+ if self.calls == 1:
224
+ raise ConnectionError("Connection error.")
225
+ self.messages = messages
226
+ yield AIMessageChunk(content="answer")
227
+ yield AIMessageChunk(
228
+ content="",
229
+ tool_calls=[{"name": "turn", "args": {"operation": "stop", "intent": "", "goal": ""}, "id": "turn-1", "type": "tool_call"}],
230
+ )
231
+
232
+
233
+ class FakeRenderer:
234
+ def __init__(self, *args, **kwargs) -> None:
235
+ self.text: list[str] = []
236
+ self.thinking: list[str] = []
237
+ self.started = False
238
+ self.done_called = False
239
+ self.discarded = False
240
+
241
+ def start(self) -> None:
242
+ self.started = True
243
+
244
+ def feed_text(self, text: str) -> None:
245
+ self.text.append(text)
246
+
247
+ def feed_thinking(self, text: str) -> None:
248
+ self.thinking.append(text)
249
+
250
+ def discard(self) -> None:
251
+ self.discarded = True
252
+
253
+ def done(self) -> None:
254
+ self.done_called = True
255
+
256
+ def error(self, text: str) -> None:
257
+ pass
258
+
259
+
260
+ class FailsNonRetryableStreamingModel(FakeStreamingModel):
261
+ """Raises an exception with status_code=404 on first call."""
262
+ def __init__(self) -> None:
263
+ super().__init__()
264
+ self.calls = 0
265
+
266
+ async def astream(self, messages):
267
+ self.calls += 1
268
+ # Must yield first to remain an async generator
269
+ yield AIMessageChunk(content="")
270
+ exc = RuntimeError("404 model_not_found")
271
+ exc.status_code = 404 # type: ignore
272
+ raise exc