voidx 3.1.2__tar.gz → 3.2.1__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 (291) hide show
  1. {voidx-3.1.2 → voidx-3.2.1}/PKG-INFO +95 -95
  2. {voidx-3.1.2 → voidx-3.2.1}/pyproject.toml +57 -57
  3. {voidx-3.1.2 → voidx-3.2.1}/setup.cfg +4 -4
  4. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/__init__.py +3 -3
  5. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/agents.py +77 -77
  6. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/attachments.py +331 -331
  7. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/goal_resolver.py +443 -443
  8. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/compaction.py +97 -97
  9. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/compaction_coordinator.py +680 -679
  10. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/contracts.py +241 -241
  11. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/convergence.py +87 -87
  12. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/core/__init__.py +9 -9
  13. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/core/_voidx_graph.py +460 -460
  14. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/core/helpers.py +126 -126
  15. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/core/llm.py +440 -440
  16. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/permissions.py +196 -185
  17. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/run_loop.py +370 -370
  18. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/runtime.py +10 -10
  19. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/runtime_guards.py +465 -462
  20. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/session_mixin.py +38 -38
  21. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/session_runtime.py +292 -292
  22. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/streaming.py +611 -611
  23. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/subagent.py +396 -396
  24. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/title_mixin.py +100 -100
  25. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/todo_events.py +23 -17
  26. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_execution.py +40 -40
  27. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/__init__.py +8 -8
  28. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/executor.py +357 -355
  29. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/guards.py +150 -150
  30. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/helpers.py +347 -347
  31. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/types.py +86 -86
  32. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/ui.py +143 -143
  33. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/tool_executor/workflow.py +314 -314
  34. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/topology.py +88 -88
  35. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/transcript_mixin.py +18 -18
  36. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/turn_mixin.py +36 -36
  37. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/turn_runner.py +511 -509
  38. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/wiring.py +100 -100
  39. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/workflow_utils.py +32 -32
  40. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/message_rows.py +102 -102
  41. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/prompts.py +177 -177
  42. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/runtime_context.py +594 -594
  43. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/code_ide.py +67 -67
  44. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/guide.py +18 -18
  45. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/handler.py +554 -554
  46. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/host.py +359 -359
  47. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/init.py +95 -95
  48. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/lsp.py +112 -112
  49. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/mcp.py +427 -427
  50. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/model.py +424 -424
  51. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/profile.py +162 -162
  52. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/runtime.py +73 -73
  53. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/session.py +253 -253
  54. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/skills.py +117 -117
  55. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/upgrade.py +98 -98
  56. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/state.py +27 -27
  57. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/task_state.py +31 -31
  58. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/todo_state.py +286 -260
  59. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/tool_call_ids.py +33 -33
  60. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/tool_exchange_sanitizer.py +168 -168
  61. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/tool_filters.py +24 -24
  62. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/tool_result_storage.py +73 -73
  63. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/__init__.py +45 -45
  64. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/enums.py +60 -60
  65. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/models.py +118 -118
  66. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/permissions.py +24 -24
  67. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings.py +444 -444
  68. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_agent.py +21 -21
  69. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_api_keys.py +45 -45
  70. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_code_ide.py +19 -19
  71. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_custom.py +52 -52
  72. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_mcp.py +69 -69
  73. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_permissions.py +86 -86
  74. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_skills.py +79 -79
  75. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_update.py +68 -68
  76. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_utils.py +9 -9
  77. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/config/settings_web.py +47 -47
  78. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/__init__.py +1 -1
  79. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/templates/api-doc.md +64 -64
  80. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/templates/prd.md +117 -117
  81. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/templates/readme.md +55 -55
  82. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/templates/rfc.md +38 -38
  83. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/data/templates/tech-design.md +68 -68
  84. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/diffing.py +323 -323
  85. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/catalog.py +201 -201
  86. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/compaction.py +652 -652
  87. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/instruction.py +307 -307
  88. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/message_markers.py +14 -14
  89. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/message_status.py +12 -12
  90. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/provider.py +608 -608
  91. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/service.py +32 -32
  92. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/usage.py +376 -376
  93. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/logging/__init__.py +6 -6
  94. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/logging/request_log.py +147 -147
  95. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/logging/tool_log.py +75 -75
  96. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/__init__.py +38 -38
  97. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/client.py +266 -266
  98. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/detector.py +395 -395
  99. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/detector_data.py +130 -130
  100. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/manager.py +388 -388
  101. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/schema.py +179 -179
  102. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/main.py +167 -167
  103. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/__init__.py +11 -11
  104. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/base.py +354 -354
  105. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/errors.py +15 -15
  106. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/http_transport.py +120 -120
  107. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/sse_transport.py +151 -151
  108. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/client/stdio_transport.py +116 -116
  109. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/cleanup.py +122 -122
  110. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/context_frames.py +247 -247
  111. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/jsonl_store.py +188 -188
  112. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/runtime_state.py +347 -347
  113. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/service.py +99 -99
  114. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/session.py +408 -408
  115. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/store.py +247 -247
  116. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/subagents.py +21 -21
  117. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/transcript.py +495 -495
  118. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/context.py +59 -59
  119. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/engine.py +186 -186
  120. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/evaluate.py +114 -114
  121. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/rules.py +395 -390
  122. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/sandbox.py +304 -304
  123. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/service.py +326 -326
  124. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/__init__.py +46 -46
  125. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/attachments.py +7 -7
  126. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/intent.py +46 -46
  127. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/reference_tokens.py +9 -9
  128. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/task_state.py +235 -229
  129. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/todo.py +9 -9
  130. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/ui.py +254 -252
  131. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/runtime/ui_port.py +178 -178
  132. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/selfupdate.py +208 -208
  133. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/__init__.py +23 -23
  134. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/context.py +115 -115
  135. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/references.py +73 -73
  136. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/registry.py +247 -247
  137. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/schema.py +49 -49
  138. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/skills/service.py +181 -181
  139. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/__init__.py +19 -19
  140. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/agent.py +304 -304
  141. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/base.py +216 -216
  142. voidx-3.2.1/src/voidx/tools/bash/__init__.py +6 -0
  143. voidx-3.2.1/src/voidx/tools/bash/core.py +112 -0
  144. voidx-3.2.1/src/voidx/tools/bash/hint/__init__.py +57 -0
  145. voidx-3.2.1/src/voidx/tools/bash/hint/file.py +232 -0
  146. voidx-3.2.1/src/voidx/tools/bash/hint/git.py +537 -0
  147. voidx-3.2.1/src/voidx/tools/bash/hint/search.py +271 -0
  148. voidx-3.2.1/src/voidx/tools/bash/router.py +69 -0
  149. voidx-3.2.1/src/voidx/tools/bash/safety.py +88 -0
  150. voidx-3.1.2/src/voidx/tools/bash.py → voidx-3.2.1/src/voidx/tools/bash/tool.py +123 -202
  151. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/clarify.py +113 -113
  152. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/compact_context.py +53 -53
  153. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/__init__.py +18 -18
  154. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/edit_execute.py +289 -279
  155. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/edit_resolve.py +229 -229
  156. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/file.py +184 -184
  157. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/read.py +232 -232
  158. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/types.py +35 -35
  159. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_ops/write.py +137 -139
  160. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/file_state.py +353 -353
  161. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/git.py +1335 -1335
  162. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/load_doc_template.py +64 -64
  163. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/load_skills.py +206 -206
  164. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/lsp.py +134 -134
  165. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/plan_checkpoint.py +363 -254
  166. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/registry.py +137 -139
  167. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/search.py +299 -299
  168. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/service.py +32 -32
  169. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/task_status.py +59 -59
  170. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/task_tracker.py +132 -99
  171. voidx-3.2.1/src/voidx/tools/todo.py +297 -0
  172. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/web_mcp.py +108 -108
  173. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/webfetch.py +253 -253
  174. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/websearch.py +282 -282
  175. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/workflow.py +553 -553
  176. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/commands.py +110 -110
  177. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/agent_display.py +25 -25
  178. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/browse.py +174 -174
  179. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/capture.py +180 -180
  180. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/console/app.py +357 -356
  181. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/console/formatting.py +100 -100
  182. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/console/streaming.py +212 -212
  183. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/diff.py +130 -130
  184. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/display_policy.py +136 -137
  185. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/__init__.py +24 -22
  186. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/agent_placeholder.py +21 -21
  187. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/app.py +453 -416
  188. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/formatting.py +146 -146
  189. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/nodes.py +424 -416
  190. voidx-3.2.1/src/voidx/ui/output/dock/nodes_checkpoint.py +115 -0
  191. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/nodes_permission.py +50 -50
  192. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/nodes_startup.py +60 -60
  193. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/nodes_status.py +79 -79
  194. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/status.py +87 -76
  195. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/stream.py +171 -113
  196. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/todo.py +112 -106
  197. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/events/__init__.py +110 -102
  198. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/events/bus.py +119 -119
  199. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/events/consumers.py +386 -370
  200. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/events/schema.py +324 -289
  201. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/tree.py +767 -738
  202. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/types.py +44 -44
  203. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/session.py +378 -378
  204. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/__init__.py +32 -32
  205. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/clipboard_image.py +241 -241
  206. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/clipboard_text.py +72 -72
  207. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/file_picker.py +139 -139
  208. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/skill_picker.py +83 -83
  209. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/transcript.py +150 -149
  210. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/activity.py +64 -64
  211. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/app.py +616 -615
  212. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/choice_mixin.py +59 -59
  213. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/clipboard_mixin.py +83 -83
  214. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/helpers.py +144 -144
  215. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/input.py +345 -345
  216. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/overlays.py +157 -157
  217. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/panels.py +340 -340
  218. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/parser.py +440 -440
  219. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/render_activity.py +103 -92
  220. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/render_frame.py +615 -587
  221. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/render_input.py +154 -154
  222. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/render_status.py +266 -266
  223. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/render_todo.py +81 -81
  224. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/renderer.py +24 -24
  225. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/state.py +254 -254
  226. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/terminal_mixin.py +95 -95
  227. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/text_prompt_mixin.py +49 -49
  228. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/__init__.py +70 -70
  229. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/auto_advance.py +162 -162
  230. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/context.py +61 -61
  231. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/dag.py +30 -30
  232. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/nodes.py +411 -418
  233. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/policy.py +82 -82
  234. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/reconcile.py +293 -293
  235. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/render.py +91 -91
  236. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/route.py +49 -49
  237. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/runtime.py +281 -281
  238. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/schema.py +177 -177
  239. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/service.py +143 -143
  240. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/workflow/types.py +101 -101
  241. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/PKG-INFO +95 -95
  242. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/SOURCES.txt +10 -3
  243. {voidx-3.1.2 → voidx-3.2.1}/tests/test_install_sh.py +162 -162
  244. {voidx-3.1.2 → voidx-3.2.1}/tests/test_npm_package.py +322 -327
  245. voidx-3.1.2/src/voidx/tools/bash_router.py +0 -1222
  246. voidx-3.1.2/src/voidx/tools/repomap.py +0 -249
  247. voidx-3.1.2/src/voidx/tools/todo.py +0 -86
  248. {voidx-3.1.2 → voidx-3.2.1}/README.md +0 -0
  249. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/__init__.py +0 -0
  250. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/graph/__init__.py +0 -0
  251. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/slash/__init__.py +0 -0
  252. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/agent/tool_messages.py +0 -0
  253. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/__init__.py +0 -0
  254. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/llm/context.py +0 -0
  255. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/config.py +0 -0
  256. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/errors.py +0 -0
  257. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/lsp/service.py +0 -0
  258. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/__init__.py +0 -0
  259. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/manager.py +0 -0
  260. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/schema.py +0 -0
  261. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp/tool.py +0 -0
  262. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp_servers/__init__.py +0 -0
  263. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/mcp_servers/web.py +0 -0
  264. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/__init__.py +0 -0
  265. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/memory/model_profiles.py +0 -0
  266. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/__init__.py +0 -0
  267. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/schema.py +0 -0
  268. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/permission/wildcard.py +0 -0
  269. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/tools/web_content.py +0 -0
  270. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/__init__.py +0 -0
  271. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/frontend.py +0 -0
  272. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/gateway/__init__.py +0 -0
  273. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/gateway/bootstrap.py +0 -0
  274. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/gateway/server.py +0 -0
  275. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/gateway/session.py +0 -0
  276. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/__init__.py +0 -0
  277. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/console/__init__.py +0 -0
  278. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/output/dock/state.py +0 -0
  279. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/__init__.py +0 -0
  280. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/commands.py +0 -0
  281. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/envelope.py +0 -0
  282. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/requests.py +0 -0
  283. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/schema.py +0 -0
  284. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/protocol/transcript.py +0 -0
  285. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/attachment_tokens.py +0 -0
  286. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tools/code_ide.py +0 -0
  287. {voidx-3.1.2 → voidx-3.2.1}/src/voidx/ui/tui/__init__.py +0 -0
  288. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/dependency_links.txt +0 -0
  289. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/entry_points.txt +0 -0
  290. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/requires.txt +0 -0
  291. {voidx-3.1.2 → voidx-3.2.1}/src/voidx.egg-info/top_level.txt +0 -0
@@ -1,95 +1,95 @@
1
- Metadata-Version: 2.4
2
- Name: voidx
3
- Version: 3.1.2
4
- Summary: A coding agent that quantifies everything and solves with tools, not fuzzy prompts.
5
- Requires-Python: >=3.11
6
- Description-Content-Type: text/markdown
7
- Requires-Dist: langgraph>=0.3.0
8
- Requires-Dist: langchain>=0.3.0
9
- Requires-Dist: langchain-anthropic>=0.3.0
10
- Requires-Dist: langchain-openai>=0.3.0
11
- Requires-Dist: pydantic>=2.10.0
12
- Requires-Dist: pydantic-settings>=2.7.0
13
- Requires-Dist: typer>=0.15.0
14
- Requires-Dist: rich>=13.9.0
15
- Requires-Dist: tiktoken>=0.8.0
16
- Requires-Dist: httpx>=0.28.0
17
- Requires-Dist: websockets>=14
18
- Requires-Dist: pathspec>=0.12
19
- Provides-Extra: gemini
20
- Requires-Dist: langchain-google-genai>=4.0.0; extra == "gemini"
21
- Provides-Extra: dev
22
- Requires-Dist: build>=1.2.0; extra == "dev"
23
- Requires-Dist: pytest>=8.0.0; extra == "dev"
24
- Requires-Dist: pytest-asyncio>=0.25.0; extra == "dev"
25
-
26
- # voidx
27
-
28
- voidx is a terminal AI coding agent built in Python.
29
-
30
- ## Install
31
-
32
- ### One-line install (no Python or npm required)
33
-
34
- macOS / Linux:
35
-
36
- ```bash
37
- curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
38
- ```
39
-
40
- Windows (PowerShell):
41
-
42
- ```powershell
43
- irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
44
- ```
45
-
46
- The installer downloads a standalone Python runtime and sets up voidx in an
47
- isolated environment — nothing else is needed on your machine.
48
-
49
- ### pip
50
-
51
- ```bash
52
- pip install voidx
53
- voidx
54
- ```
55
-
56
- ### npm
57
-
58
- ```bash
59
- npm install -g @chikhamx/voidx
60
- voidx
61
- ```
62
-
63
- ### From source
64
-
65
- ```bash
66
- git clone https://github.com/chikhamx/voidx.git
67
- cd voidx
68
- pip install -e .
69
- voidx
70
- ```
71
-
72
- ### China / slow network
73
-
74
- Set mirror environment variables before running any install method:
75
-
76
- ```bash
77
- export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
78
- export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
79
- ```
80
-
81
- ## Useful Commands
82
-
83
- ```bash
84
- voidx version
85
- voidx sessions
86
- voidx -w /path/to/project
87
- ```
88
-
89
- ## Development
90
-
91
- ```bash
92
- .venv/bin/python -m pytest
93
- .venv/bin/python scripts/package.py --format all --clean
94
- npm --prefix npm run check
95
- ```
1
+ Metadata-Version: 2.4
2
+ Name: voidx
3
+ Version: 3.2.1
4
+ Summary: A coding agent that quantifies everything and solves with tools, not fuzzy prompts.
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: langgraph>=0.3.0
8
+ Requires-Dist: langchain>=0.3.0
9
+ Requires-Dist: langchain-anthropic>=0.3.0
10
+ Requires-Dist: langchain-openai>=0.3.0
11
+ Requires-Dist: pydantic>=2.10.0
12
+ Requires-Dist: pydantic-settings>=2.7.0
13
+ Requires-Dist: typer>=0.15.0
14
+ Requires-Dist: rich>=13.9.0
15
+ Requires-Dist: tiktoken>=0.8.0
16
+ Requires-Dist: httpx>=0.28.0
17
+ Requires-Dist: websockets>=14
18
+ Requires-Dist: pathspec>=0.12
19
+ Provides-Extra: gemini
20
+ Requires-Dist: langchain-google-genai>=4.0.0; extra == "gemini"
21
+ Provides-Extra: dev
22
+ Requires-Dist: build>=1.2.0; extra == "dev"
23
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
24
+ Requires-Dist: pytest-asyncio>=0.25.0; extra == "dev"
25
+
26
+ # voidx
27
+
28
+ voidx is a terminal AI coding agent built in Python.
29
+
30
+ ## Install
31
+
32
+ ### One-line install (no Python or npm required)
33
+
34
+ macOS / Linux:
35
+
36
+ ```bash
37
+ curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
38
+ ```
39
+
40
+ Windows (PowerShell):
41
+
42
+ ```powershell
43
+ irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
44
+ ```
45
+
46
+ The installer downloads a standalone Python runtime and sets up voidx in an
47
+ isolated environment — nothing else is needed on your machine.
48
+
49
+ ### pip
50
+
51
+ ```bash
52
+ pip install voidx
53
+ voidx
54
+ ```
55
+
56
+ ### npm
57
+
58
+ ```bash
59
+ npm install -g @chikhamx/voidx
60
+ voidx
61
+ ```
62
+
63
+ ### From source
64
+
65
+ ```bash
66
+ git clone https://github.com/chikhamx/voidx.git
67
+ cd voidx
68
+ pip install -e .
69
+ voidx
70
+ ```
71
+
72
+ ### China / slow network
73
+
74
+ Set mirror environment variables before running any install method:
75
+
76
+ ```bash
77
+ export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
78
+ export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
79
+ ```
80
+
81
+ ## Useful Commands
82
+
83
+ ```bash
84
+ voidx version
85
+ voidx sessions
86
+ voidx -w /path/to/project
87
+ ```
88
+
89
+ ## Development
90
+
91
+ ```bash
92
+ .venv/bin/python -m pytest
93
+ .venv/bin/python scripts/package.py --format all --clean
94
+ npm --prefix npm run check
95
+ ```
@@ -1,57 +1,57 @@
1
- [project]
2
- name = "voidx"
3
- version = "3.1.2"
4
- description = "A coding agent that quantifies everything and solves with tools, not fuzzy prompts."
5
- readme = "README.md"
6
- requires-python = ">=3.11"
7
- dependencies = [
8
- "langgraph>=0.3.0",
9
- "langchain>=0.3.0",
10
- "langchain-anthropic>=0.3.0",
11
- "langchain-openai>=0.3.0",
12
- "pydantic>=2.10.0",
13
- "pydantic-settings>=2.7.0",
14
- "typer>=0.15.0",
15
- "rich>=13.9.0",
16
- "tiktoken>=0.8.0",
17
- "httpx>=0.28.0",
18
- "websockets>=14",
19
- "pathspec>=0.12",
20
- ]
21
-
22
- [project.scripts]
23
- voidx = "voidx.main:cli"
24
-
25
- [project.optional-dependencies]
26
- gemini = ["langchain-google-genai>=4.0.0"]
27
- dev = [
28
- "build>=1.2.0",
29
- "pytest>=8.0.0",
30
- "pytest-asyncio>=0.25.0",
31
- ]
32
-
33
- [dependency-groups]
34
- dev = [
35
- "build>=1.2.0",
36
- "pytest>=8.0.0",
37
- "pytest-asyncio>=0.25.0",
38
- ]
39
-
40
- [build-system]
41
- requires = ["setuptools>=68", "wheel"]
42
- build-backend = "setuptools.build_meta"
43
-
44
- [tool.setuptools.packages.find]
45
- where = ["src"]
46
-
47
- [tool.setuptools.package-data]
48
- "voidx.skills" = [
49
- "bundled/*/SKILL.md",
50
- ]
51
- "voidx.data" = [
52
- "templates/*.md",
53
- ]
54
-
55
- [tool.pytest.ini_options]
56
- asyncio_mode = "auto"
57
- testpaths = ["tests"]
1
+ [project]
2
+ name = "voidx"
3
+ version = "3.2.1"
4
+ description = "A coding agent that quantifies everything and solves with tools, not fuzzy prompts."
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ dependencies = [
8
+ "langgraph>=0.3.0",
9
+ "langchain>=0.3.0",
10
+ "langchain-anthropic>=0.3.0",
11
+ "langchain-openai>=0.3.0",
12
+ "pydantic>=2.10.0",
13
+ "pydantic-settings>=2.7.0",
14
+ "typer>=0.15.0",
15
+ "rich>=13.9.0",
16
+ "tiktoken>=0.8.0",
17
+ "httpx>=0.28.0",
18
+ "websockets>=14",
19
+ "pathspec>=0.12",
20
+ ]
21
+
22
+ [project.scripts]
23
+ voidx = "voidx.main:cli"
24
+
25
+ [project.optional-dependencies]
26
+ gemini = ["langchain-google-genai>=4.0.0"]
27
+ dev = [
28
+ "build>=1.2.0",
29
+ "pytest>=8.0.0",
30
+ "pytest-asyncio>=0.25.0",
31
+ ]
32
+
33
+ [dependency-groups]
34
+ dev = [
35
+ "build>=1.2.0",
36
+ "pytest>=8.0.0",
37
+ "pytest-asyncio>=0.25.0",
38
+ ]
39
+
40
+ [build-system]
41
+ requires = ["setuptools>=68", "wheel"]
42
+ build-backend = "setuptools.build_meta"
43
+
44
+ [tool.setuptools.packages.find]
45
+ where = ["src"]
46
+
47
+ [tool.setuptools.package-data]
48
+ "voidx.skills" = [
49
+ "bundled/*/SKILL.md",
50
+ ]
51
+ "voidx.data" = [
52
+ "templates/*.md",
53
+ ]
54
+
55
+ [tool.pytest.ini_options]
56
+ asyncio_mode = "auto"
57
+ testpaths = ["tests"]
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -1,3 +1,3 @@
1
- """VoidX - A coding agent that quantifies everything."""
2
-
3
- __version__ = "3.1.2"
1
+ """VoidX - A coding agent that quantifies everything."""
2
+
3
+ __version__ = "3.2.1"
@@ -1,77 +1,77 @@
1
- """Agent definitions — typed config and whenToUse descriptions.
2
-
3
- voidx uses one agent identity:
4
- voidx — primary identity, also used for isolated child runs
5
-
6
- Runtime personas (coordinate/explore/plan/implement/review) are thinking-mode
7
- labels, not AgentDef ids.
8
-
9
- Tool visibility is controlled by the ToolRegistry and permission layer,
10
- not by a static whitelist on AgentDef.
11
- """
12
-
13
-
14
- from __future__ import annotations
15
-
16
- from pydantic import BaseModel
17
-
18
- # ── agent definitions ─────────────────────────────────────────────────────
19
-
20
- class AgentDef(BaseModel):
21
- """An agent's complete definition — typed, no loose config."""
22
- name: str
23
- description: str
24
- when_to_use: str
25
- can_write: bool
26
- can_delegate: bool # can it start child agents via the agent tool?
27
- hidden: bool = False # hidden from user-facing lists?
28
- model: str | None = None # None = inherit from parent
29
-
30
- # ── built-in agents ────────────────────────────────────────────────────────
31
-
32
- BUILTIN_AGENTS: dict[str, AgentDef] = {
33
- "voidx": AgentDef(
34
- name="voidx",
35
- description="Primary agent. Understands intent, edits small scoped changes directly, "
36
- "delegates broad work to specialists, reviews results.",
37
- when_to_use="Default agent for all user interactions. Always use first.",
38
- can_write=True,
39
- can_delegate=True,
40
- hidden=False,
41
- ),
42
- }
43
-
44
-
45
- def get_agent(name: str) -> AgentDef | None:
46
- return BUILTIN_AGENTS.get(name)
47
-
48
-
49
- def get_visible_agents() -> list[AgentDef]:
50
- return [a for a in BUILTIN_AGENTS.values() if not a.hidden]
51
-
52
-
53
- def get_subagents() -> list[AgentDef]:
54
- """Child-run identities voidx can delegate to."""
55
- agent = get_agent("voidx")
56
- return [child_run_agent_def(agent)] if agent is not None else []
57
-
58
-
59
- def child_run_agent_def(agent: AgentDef) -> AgentDef:
60
- """Return the child-run view of the public voidx identity."""
61
- return agent.model_copy(update={
62
- "name": "voidx",
63
- "description": "Isolated child run of voidx that follows the supplied workflow route.",
64
- "when_to_use": "Use for delegated child work that benefits from isolated context.",
65
- "can_delegate": False,
66
- })
67
-
68
-
69
- def child_agent_descriptions_for_llm() -> str:
70
- """Generate child-agent descriptions for the agent tool."""
71
- lines = ["Available child agents:"]
72
- for agent in get_subagents():
73
- lines.append(
74
- f"- {agent.name}: {agent.description}\n"
75
- f" Write access: {agent.can_write}"
76
- )
77
- return "\n".join(lines)
1
+ """Agent definitions — typed config and whenToUse descriptions.
2
+
3
+ voidx uses one agent identity:
4
+ voidx — primary identity, also used for isolated child runs
5
+
6
+ Runtime personas (coordinate/explore/plan/implement/review) are thinking-mode
7
+ labels, not AgentDef ids.
8
+
9
+ Tool visibility is controlled by the ToolRegistry and permission layer,
10
+ not by a static whitelist on AgentDef.
11
+ """
12
+
13
+
14
+ from __future__ import annotations
15
+
16
+ from pydantic import BaseModel
17
+
18
+ # ── agent definitions ─────────────────────────────────────────────────────
19
+
20
+ class AgentDef(BaseModel):
21
+ """An agent's complete definition — typed, no loose config."""
22
+ name: str
23
+ description: str
24
+ when_to_use: str
25
+ can_write: bool
26
+ can_delegate: bool # can it start child agents via the agent tool?
27
+ hidden: bool = False # hidden from user-facing lists?
28
+ model: str | None = None # None = inherit from parent
29
+
30
+ # ── built-in agents ────────────────────────────────────────────────────────
31
+
32
+ BUILTIN_AGENTS: dict[str, AgentDef] = {
33
+ "voidx": AgentDef(
34
+ name="voidx",
35
+ description="Primary agent. Understands intent, edits small scoped changes directly, "
36
+ "delegates broad work to specialists, reviews results.",
37
+ when_to_use="Default agent for all user interactions. Always use first.",
38
+ can_write=True,
39
+ can_delegate=True,
40
+ hidden=False,
41
+ ),
42
+ }
43
+
44
+
45
+ def get_agent(name: str) -> AgentDef | None:
46
+ return BUILTIN_AGENTS.get(name)
47
+
48
+
49
+ def get_visible_agents() -> list[AgentDef]:
50
+ return [a for a in BUILTIN_AGENTS.values() if not a.hidden]
51
+
52
+
53
+ def get_subagents() -> list[AgentDef]:
54
+ """Child-run identities voidx can delegate to."""
55
+ agent = get_agent("voidx")
56
+ return [child_run_agent_def(agent)] if agent is not None else []
57
+
58
+
59
+ def child_run_agent_def(agent: AgentDef) -> AgentDef:
60
+ """Return the child-run view of the public voidx identity."""
61
+ return agent.model_copy(update={
62
+ "name": "voidx",
63
+ "description": "Isolated child run of voidx that follows the supplied workflow route.",
64
+ "when_to_use": "Use for delegated child work that benefits from isolated context.",
65
+ "can_delegate": False,
66
+ })
67
+
68
+
69
+ def child_agent_descriptions_for_llm() -> str:
70
+ """Generate child-agent descriptions for the agent tool."""
71
+ lines = ["Available child agents:"]
72
+ for agent in get_subagents():
73
+ lines.append(
74
+ f"- {agent.name}: {agent.description}\n"
75
+ f" Write access: {agent.can_write}"
76
+ )
77
+ return "\n".join(lines)