voidx 3.2.1__tar.gz → 3.3.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 (294) hide show
  1. {voidx-3.2.1 → voidx-3.3.0}/PKG-INFO +96 -95
  2. {voidx-3.2.1 → voidx-3.3.0}/pyproject.toml +59 -57
  3. {voidx-3.2.1 → voidx-3.3.0}/setup.cfg +4 -4
  4. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/__init__.py +3 -3
  5. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/agents.py +77 -77
  6. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/attachments.py +331 -331
  7. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/goal_resolver.py +443 -443
  8. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/compaction.py +97 -97
  9. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/compaction_coordinator.py +683 -680
  10. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/contracts.py +241 -241
  11. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/convergence.py +87 -87
  12. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/core/__init__.py +9 -9
  13. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/core/_voidx_graph.py +460 -460
  14. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/core/helpers.py +126 -126
  15. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/core/llm.py +440 -440
  16. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/permissions.py +196 -196
  17. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/run_loop.py +370 -370
  18. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/runtime.py +10 -10
  19. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/runtime_guards.py +463 -465
  20. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/session_mixin.py +38 -38
  21. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/session_runtime.py +292 -292
  22. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/streaming.py +611 -611
  23. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/subagent.py +453 -396
  24. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/title_mixin.py +100 -100
  25. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/todo_events.py +23 -23
  26. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_execution.py +40 -40
  27. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/__init__.py +8 -8
  28. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/executor.py +362 -357
  29. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/guards.py +150 -150
  30. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/helpers.py +347 -347
  31. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/types.py +86 -86
  32. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/ui.py +143 -143
  33. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/tool_executor/workflow.py +314 -314
  34. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/topology.py +88 -88
  35. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/transcript_mixin.py +18 -18
  36. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/turn_mixin.py +36 -36
  37. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/turn_runner.py +511 -511
  38. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/wiring.py +106 -100
  39. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/workflow_utils.py +32 -32
  40. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/message_rows.py +102 -102
  41. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/prompts.py +184 -177
  42. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/runtime_context.py +603 -594
  43. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/code_ide.py +67 -67
  44. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/guide.py +18 -18
  45. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/handler.py +554 -554
  46. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/host.py +359 -359
  47. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/init.py +95 -95
  48. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/lsp.py +112 -112
  49. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/mcp.py +427 -427
  50. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/model.py +424 -424
  51. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/profile.py +162 -162
  52. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/runtime.py +73 -73
  53. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/session.py +253 -253
  54. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/skills.py +117 -117
  55. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/upgrade.py +98 -98
  56. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/state.py +27 -27
  57. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/task_state.py +31 -31
  58. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/todo_state.py +285 -286
  59. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/tool_call_ids.py +33 -33
  60. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/tool_exchange_sanitizer.py +168 -168
  61. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/tool_filters.py +24 -24
  62. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/tool_result_storage.py +73 -73
  63. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/__init__.py +45 -45
  64. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/enums.py +60 -60
  65. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/models.py +118 -118
  66. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/permissions.py +24 -24
  67. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings.py +444 -444
  68. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_agent.py +21 -21
  69. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_api_keys.py +45 -45
  70. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_code_ide.py +19 -19
  71. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_custom.py +52 -52
  72. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_mcp.py +69 -69
  73. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_permissions.py +86 -86
  74. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_skills.py +79 -79
  75. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_update.py +68 -68
  76. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_utils.py +9 -9
  77. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/config/settings_web.py +47 -47
  78. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/__init__.py +1 -1
  79. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/templates/api-doc.md +64 -64
  80. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/templates/prd.md +117 -117
  81. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/templates/readme.md +55 -55
  82. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/templates/rfc.md +38 -38
  83. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/data/templates/tech-design.md +68 -68
  84. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/diffing.py +323 -323
  85. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/catalog.py +201 -201
  86. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/compaction.py +652 -652
  87. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/instruction.py +307 -307
  88. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/message_markers.py +14 -14
  89. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/message_status.py +12 -12
  90. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/provider.py +608 -608
  91. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/service.py +32 -32
  92. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/usage.py +376 -376
  93. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/logging/__init__.py +6 -6
  94. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/logging/request_log.py +147 -147
  95. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/logging/tool_log.py +75 -75
  96. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/__init__.py +38 -38
  97. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/client.py +266 -266
  98. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/detector.py +395 -395
  99. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/detector_data.py +130 -130
  100. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/manager.py +388 -388
  101. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/schema.py +179 -179
  102. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/main.py +167 -167
  103. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/__init__.py +11 -11
  104. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/base.py +354 -354
  105. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/errors.py +15 -15
  106. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/http_transport.py +120 -120
  107. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/sse_transport.py +151 -151
  108. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/client/stdio_transport.py +116 -116
  109. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/cleanup.py +122 -122
  110. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/context_frames.py +247 -247
  111. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/jsonl_store.py +188 -188
  112. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/runtime_state.py +347 -347
  113. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/service.py +99 -99
  114. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/session.py +408 -408
  115. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/store.py +247 -247
  116. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/subagents.py +21 -21
  117. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/transcript.py +495 -495
  118. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/context.py +59 -59
  119. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/engine.py +186 -186
  120. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/evaluate.py +114 -114
  121. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/rules.py +398 -395
  122. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/sandbox.py +304 -304
  123. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/service.py +326 -326
  124. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/__init__.py +46 -46
  125. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/attachments.py +7 -7
  126. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/intent.py +46 -46
  127. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/reference_tokens.py +9 -9
  128. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/task_state.py +235 -235
  129. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/todo.py +9 -9
  130. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/ui.py +254 -254
  131. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/runtime/ui_port.py +178 -178
  132. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/selfupdate.py +208 -208
  133. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/__init__.py +23 -23
  134. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/context.py +115 -115
  135. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/references.py +73 -73
  136. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/registry.py +287 -247
  137. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/schema.py +49 -49
  138. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/skills/service.py +181 -181
  139. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/__init__.py +19 -19
  140. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/agent.py +294 -304
  141. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/base.py +222 -216
  142. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/__init__.py +6 -6
  143. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/core.py +107 -112
  144. voidx-3.3.0/src/voidx/tools/bash/hint/__init__.py +31 -0
  145. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/hint/file.py +232 -232
  146. voidx-3.3.0/src/voidx/tools/bash/hint/git.py +20 -0
  147. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/hint/search.py +271 -271
  148. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/router.py +69 -69
  149. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/safety.py +88 -88
  150. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/bash/tool.py +127 -123
  151. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/clarify.py +116 -113
  152. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/compact_context.py +56 -53
  153. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/__init__.py +18 -18
  154. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/edit_execute.py +288 -289
  155. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/edit_resolve.py +229 -229
  156. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/file.py +187 -184
  157. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/read.py +285 -232
  158. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/types.py +35 -35
  159. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_ops/write.py +137 -137
  160. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/file_state.py +361 -353
  161. voidx-3.3.0/src/voidx/tools/git.py +951 -0
  162. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/load_doc_template.py +67 -64
  163. voidx-3.3.0/src/voidx/tools/load_skills.py +12 -0
  164. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/lsp.py +140 -134
  165. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/plan_checkpoint.py +366 -363
  166. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/registry.py +137 -137
  167. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/search.py +305 -299
  168. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/service.py +32 -32
  169. voidx-3.3.0/src/voidx/tools/skills.py +252 -0
  170. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/task_status.py +72 -59
  171. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/task_tracker.py +132 -132
  172. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/todo.py +289 -297
  173. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/web_mcp.py +108 -108
  174. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/webfetch.py +256 -253
  175. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/websearch.py +285 -282
  176. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/workflow.py +556 -553
  177. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/commands.py +110 -110
  178. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/agent_display.py +25 -25
  179. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/browse.py +174 -174
  180. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/capture.py +180 -180
  181. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/console/app.py +358 -357
  182. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/console/formatting.py +104 -100
  183. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/console/streaming.py +212 -212
  184. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/diff.py +130 -130
  185. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/display_policy.py +136 -136
  186. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/__init__.py +30 -24
  187. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/agent_placeholder.py +21 -21
  188. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/app.py +456 -453
  189. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/formatting.py +146 -146
  190. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/nodes.py +426 -424
  191. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/nodes_checkpoint.py +116 -115
  192. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/nodes_permission.py +49 -50
  193. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/nodes_startup.py +60 -60
  194. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/nodes_status.py +79 -79
  195. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/status.py +106 -87
  196. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/stream.py +171 -171
  197. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/todo.py +111 -112
  198. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/events/__init__.py +110 -110
  199. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/events/bus.py +119 -119
  200. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/events/consumers.py +587 -386
  201. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/events/schema.py +325 -324
  202. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/tree.py +777 -767
  203. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/types.py +44 -44
  204. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/session.py +378 -378
  205. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/__init__.py +32 -32
  206. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/clipboard_image.py +347 -241
  207. voidx-3.3.0/src/voidx/ui/tools/clipboard_text.py +131 -0
  208. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/file_picker.py +139 -139
  209. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/skill_picker.py +83 -83
  210. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/transcript.py +150 -150
  211. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/activity.py +64 -64
  212. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/app.py +616 -616
  213. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/choice_mixin.py +59 -59
  214. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/clipboard_mixin.py +83 -83
  215. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/helpers.py +144 -144
  216. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/input.py +345 -345
  217. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/overlays.py +157 -157
  218. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/panels.py +340 -340
  219. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/parser.py +440 -440
  220. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/render_activity.py +129 -103
  221. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/render_frame.py +615 -615
  222. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/render_input.py +154 -154
  223. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/render_status.py +266 -266
  224. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/render_todo.py +79 -81
  225. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/renderer.py +24 -24
  226. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/state.py +254 -254
  227. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/terminal_mixin.py +95 -95
  228. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/text_prompt_mixin.py +49 -49
  229. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/__init__.py +70 -70
  230. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/auto_advance.py +162 -162
  231. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/context.py +61 -61
  232. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/dag.py +30 -30
  233. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/nodes.py +411 -411
  234. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/policy.py +82 -82
  235. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/reconcile.py +293 -293
  236. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/render.py +91 -91
  237. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/route.py +49 -49
  238. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/runtime.py +281 -281
  239. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/schema.py +177 -177
  240. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/service.py +143 -143
  241. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/workflow/types.py +101 -101
  242. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/PKG-INFO +96 -95
  243. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/SOURCES.txt +1 -0
  244. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/requires.txt +3 -0
  245. {voidx-3.2.1 → voidx-3.3.0}/tests/test_install_sh.py +162 -162
  246. {voidx-3.2.1 → voidx-3.3.0}/tests/test_npm_package.py +322 -322
  247. voidx-3.2.1/src/voidx/tools/bash/hint/__init__.py +0 -57
  248. voidx-3.2.1/src/voidx/tools/bash/hint/git.py +0 -537
  249. voidx-3.2.1/src/voidx/tools/git.py +0 -1335
  250. voidx-3.2.1/src/voidx/tools/load_skills.py +0 -206
  251. voidx-3.2.1/src/voidx/ui/tools/clipboard_text.py +0 -72
  252. {voidx-3.2.1 → voidx-3.3.0}/README.md +0 -0
  253. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/__init__.py +0 -0
  254. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/graph/__init__.py +0 -0
  255. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/slash/__init__.py +0 -0
  256. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/agent/tool_messages.py +0 -0
  257. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/__init__.py +0 -0
  258. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/llm/context.py +0 -0
  259. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/config.py +0 -0
  260. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/errors.py +0 -0
  261. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/lsp/service.py +0 -0
  262. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/__init__.py +0 -0
  263. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/manager.py +0 -0
  264. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/schema.py +0 -0
  265. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp/tool.py +0 -0
  266. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp_servers/__init__.py +0 -0
  267. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/mcp_servers/web.py +0 -0
  268. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/__init__.py +0 -0
  269. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/memory/model_profiles.py +0 -0
  270. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/__init__.py +0 -0
  271. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/schema.py +0 -0
  272. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/permission/wildcard.py +0 -0
  273. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/tools/web_content.py +0 -0
  274. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/__init__.py +0 -0
  275. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/frontend.py +0 -0
  276. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/gateway/__init__.py +0 -0
  277. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/gateway/bootstrap.py +0 -0
  278. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/gateway/server.py +0 -0
  279. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/gateway/session.py +0 -0
  280. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/__init__.py +0 -0
  281. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/console/__init__.py +0 -0
  282. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/output/dock/state.py +0 -0
  283. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/__init__.py +0 -0
  284. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/commands.py +0 -0
  285. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/envelope.py +0 -0
  286. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/requests.py +0 -0
  287. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/schema.py +0 -0
  288. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/protocol/transcript.py +0 -0
  289. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/attachment_tokens.py +0 -0
  290. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tools/code_ide.py +0 -0
  291. {voidx-3.2.1 → voidx-3.3.0}/src/voidx/ui/tui/__init__.py +0 -0
  292. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/dependency_links.txt +0 -0
  293. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/entry_points.txt +0 -0
  294. {voidx-3.2.1 → voidx-3.3.0}/src/voidx.egg-info/top_level.txt +0 -0
@@ -1,95 +1,96 @@
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
+ Metadata-Version: 2.4
2
+ Name: voidx
3
+ Version: 3.3.0
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
+ Requires-Dist: Pillow>=10.0.0; platform_system == "Windows"
20
+ Provides-Extra: gemini
21
+ Requires-Dist: langchain-google-genai>=4.0.0; extra == "gemini"
22
+ Provides-Extra: dev
23
+ Requires-Dist: build>=1.2.0; extra == "dev"
24
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
25
+ Requires-Dist: pytest-asyncio>=0.25.0; extra == "dev"
26
+
27
+ # voidx
28
+
29
+ voidx is a terminal AI coding agent built in Python.
30
+
31
+ ## Install
32
+
33
+ ### One-line install (no Python or npm required)
34
+
35
+ macOS / Linux:
36
+
37
+ ```bash
38
+ curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
39
+ ```
40
+
41
+ Windows (PowerShell):
42
+
43
+ ```powershell
44
+ irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
45
+ ```
46
+
47
+ The installer downloads a standalone Python runtime and sets up voidx in an
48
+ isolated environment — nothing else is needed on your machine.
49
+
50
+ ### pip
51
+
52
+ ```bash
53
+ pip install voidx
54
+ voidx
55
+ ```
56
+
57
+ ### npm
58
+
59
+ ```bash
60
+ npm install -g @chikhamx/voidx
61
+ voidx
62
+ ```
63
+
64
+ ### From source
65
+
66
+ ```bash
67
+ git clone https://github.com/chikhamx/voidx.git
68
+ cd voidx
69
+ pip install -e .
70
+ voidx
71
+ ```
72
+
73
+ ### China / slow network
74
+
75
+ Set mirror environment variables before running any install method:
76
+
77
+ ```bash
78
+ export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
79
+ export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
80
+ ```
81
+
82
+ ## Useful Commands
83
+
84
+ ```bash
85
+ voidx version
86
+ voidx sessions
87
+ voidx -w /path/to/project
88
+ ```
89
+
90
+ ## Development
91
+
92
+ ```bash
93
+ .venv/bin/python -m pytest
94
+ .venv/bin/python scripts/package.py --format all --clean
95
+ npm --prefix npm run check
96
+ ```
@@ -1,57 +1,59 @@
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
+ [project]
2
+ name = "voidx"
3
+ version = "3.3.0"
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
+ "Pillow>=10.0.0; platform_system == 'Windows'",
21
+ ]
22
+
23
+ [project.scripts]
24
+ voidx = "voidx.main:cli"
25
+
26
+ [project.optional-dependencies]
27
+ gemini = ["langchain-google-genai>=4.0.0"]
28
+ dev = [
29
+ "build>=1.2.0",
30
+ "pytest>=8.0.0",
31
+ "pytest-asyncio>=0.25.0",
32
+ ]
33
+
34
+ [dependency-groups]
35
+ dev = [
36
+ "build>=1.2.0",
37
+ "pytest>=8.0.0",
38
+ "pytest-asyncio>=0.25.0",
39
+ ]
40
+
41
+ [build-system]
42
+ requires = ["setuptools>=68", "wheel"]
43
+ build-backend = "setuptools.build_meta"
44
+
45
+ [tool.setuptools.packages.find]
46
+ where = ["src"]
47
+
48
+ [tool.setuptools.package-data]
49
+ "voidx.skills" = [
50
+ "bundled/*/SKILL.md",
51
+ ]
52
+ "voidx.data" = [
53
+ "templates/*.md",
54
+ ]
55
+
56
+ [tool.pytest.ini_options]
57
+ asyncio_mode = "auto"
58
+ pythonpath = ["src"]
59
+ 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.2.1"
1
+ """VoidX - A coding agent that quantifies everything."""
2
+
3
+ __version__ = "3.3.0"
@@ -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)