voidx 3.3.0__tar.gz → 3.4.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 (316) hide show
  1. {voidx-3.3.0 → voidx-3.4.0}/PKG-INFO +96 -96
  2. {voidx-3.3.0 → voidx-3.4.0}/pyproject.toml +62 -59
  3. {voidx-3.3.0 → voidx-3.4.0}/setup.cfg +4 -4
  4. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/__init__.py +3 -3
  5. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/agents.py +77 -77
  6. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/attachments.py +331 -331
  7. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/goal_resolver.py +443 -443
  8. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/compaction.py +97 -97
  9. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/compaction_coordinator.py +683 -683
  10. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/contracts.py +241 -241
  11. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/convergence.py +87 -87
  12. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/core/__init__.py +9 -9
  13. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/core/_voidx_graph.py +460 -460
  14. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/core/helpers.py +126 -126
  15. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/core/llm.py +441 -440
  16. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/permissions.py +196 -196
  17. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/run_loop.py +390 -370
  18. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/runtime.py +10 -10
  19. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/runtime_guards.py +469 -463
  20. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/session_mixin.py +38 -38
  21. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/session_runtime.py +292 -292
  22. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/streaming.py +611 -611
  23. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/subagent.py +453 -453
  24. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/title_mixin.py +100 -100
  25. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/todo_events.py +23 -23
  26. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_execution.py +40 -40
  27. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/__init__.py +8 -8
  28. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/executor.py +362 -362
  29. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/guards.py +150 -150
  30. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/helpers.py +347 -347
  31. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/types.py +86 -86
  32. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/ui.py +143 -143
  33. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/tool_executor/workflow.py +314 -314
  34. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/topology.py +88 -88
  35. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/transcript_mixin.py +18 -18
  36. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/turn_mixin.py +36 -36
  37. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/turn_runner.py +511 -511
  38. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/wiring.py +106 -106
  39. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/workflow_utils.py +32 -32
  40. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/message_rows.py +102 -102
  41. voidx-3.4.0/src/voidx/agent/message_trimming.py +511 -0
  42. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/prompts.py +174 -184
  43. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/runtime_context.py +607 -603
  44. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/code_ide.py +67 -67
  45. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/guide.py +18 -18
  46. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/handler.py +554 -554
  47. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/host.py +359 -359
  48. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/init.py +95 -95
  49. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/lsp.py +112 -112
  50. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/mcp.py +427 -427
  51. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/model.py +424 -424
  52. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/profile.py +162 -162
  53. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/runtime.py +73 -73
  54. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/session.py +253 -253
  55. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/skills.py +117 -117
  56. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/upgrade.py +98 -98
  57. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/state.py +27 -27
  58. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/task_state.py +31 -31
  59. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/todo_state.py +282 -285
  60. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/tool_call_ids.py +33 -33
  61. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/tool_exchange_sanitizer.py +168 -168
  62. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/tool_filters.py +24 -24
  63. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/tool_result_storage.py +73 -73
  64. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/__init__.py +45 -45
  65. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/enums.py +60 -60
  66. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/models.py +118 -118
  67. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/permissions.py +24 -24
  68. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings.py +444 -444
  69. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_agent.py +21 -21
  70. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_api_keys.py +45 -45
  71. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_code_ide.py +19 -19
  72. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_custom.py +52 -52
  73. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_mcp.py +69 -69
  74. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_permissions.py +86 -86
  75. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_skills.py +79 -79
  76. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_update.py +68 -68
  77. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_utils.py +9 -9
  78. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/config/settings_web.py +47 -47
  79. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/__init__.py +1 -1
  80. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/templates/api-doc.md +64 -64
  81. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/templates/prd.md +117 -117
  82. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/templates/readme.md +55 -55
  83. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/templates/rfc.md +38 -38
  84. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/data/templates/tech-design.md +68 -68
  85. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/diffing.py +323 -323
  86. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/catalog.py +201 -201
  87. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/compaction.py +652 -652
  88. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/instruction.py +307 -307
  89. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/message_markers.py +14 -14
  90. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/message_status.py +12 -12
  91. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/provider.py +608 -608
  92. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/service.py +32 -32
  93. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/usage.py +376 -376
  94. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/logging/__init__.py +6 -6
  95. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/logging/request_log.py +147 -147
  96. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/logging/tool_log.py +75 -75
  97. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/__init__.py +38 -38
  98. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/client.py +266 -266
  99. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/detector.py +395 -395
  100. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/detector_data.py +130 -130
  101. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/manager.py +388 -388
  102. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/schema.py +179 -179
  103. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/main.py +167 -167
  104. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/__init__.py +11 -11
  105. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/base.py +354 -354
  106. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/errors.py +15 -15
  107. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/http_transport.py +120 -120
  108. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/sse_transport.py +151 -151
  109. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/client/stdio_transport.py +116 -116
  110. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/cleanup.py +122 -122
  111. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/context_frames.py +247 -247
  112. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/jsonl_store.py +188 -188
  113. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/runtime_state.py +347 -347
  114. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/service.py +99 -99
  115. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/session.py +439 -408
  116. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/store.py +247 -247
  117. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/subagents.py +21 -21
  118. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/transcript.py +495 -495
  119. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/context.py +59 -59
  120. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/engine.py +195 -186
  121. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/evaluate.py +114 -114
  122. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/rules.py +404 -398
  123. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/sandbox.py +304 -304
  124. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/service.py +326 -326
  125. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/__init__.py +46 -46
  126. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/attachments.py +7 -7
  127. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/intent.py +46 -46
  128. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/reference_tokens.py +9 -9
  129. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/task_state.py +235 -235
  130. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/todo.py +9 -9
  131. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/ui.py +254 -254
  132. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/runtime/ui_port.py +178 -178
  133. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/selfupdate.py +208 -208
  134. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/__init__.py +23 -23
  135. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/context.py +115 -115
  136. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/references.py +73 -73
  137. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/registry.py +287 -287
  138. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/schema.py +49 -49
  139. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/skills/service.py +181 -181
  140. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/__init__.py +19 -19
  141. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/agent.py +294 -294
  142. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/base.py +222 -222
  143. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/__init__.py +6 -6
  144. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/core.py +73 -107
  145. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/hint/__init__.py +31 -31
  146. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/hint/file.py +232 -232
  147. voidx-3.4.0/src/voidx/tools/bash/hint/git.py +7 -0
  148. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/hint/search.py +271 -271
  149. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/router.py +69 -69
  150. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/bash/safety.py +59 -88
  151. voidx-3.4.0/src/voidx/tools/bash/tool.py +75 -0
  152. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/clarify.py +152 -116
  153. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/compact_context.py +56 -56
  154. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/__init__.py +18 -18
  155. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/edit_execute.py +357 -288
  156. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/edit_resolve.py +273 -229
  157. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/file.py +187 -187
  158. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/read.py +279 -285
  159. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/types.py +35 -35
  160. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_ops/write.py +137 -137
  161. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/file_state.py +467 -361
  162. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/git.py +951 -951
  163. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/load_doc_template.py +67 -67
  164. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/load_skills.py +12 -12
  165. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/lsp.py +140 -140
  166. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/plan_checkpoint.py +366 -366
  167. voidx-3.4.0/src/voidx/tools/powershell/__init__.py +7 -0
  168. voidx-3.4.0/src/voidx/tools/powershell/core.py +107 -0
  169. voidx-3.4.0/src/voidx/tools/powershell/hint/__init__.py +1 -0
  170. voidx-3.4.0/src/voidx/tools/powershell/hint/file.py +50 -0
  171. voidx-3.4.0/src/voidx/tools/powershell/hint/search.py +50 -0
  172. voidx-3.4.0/src/voidx/tools/powershell/router.py +98 -0
  173. voidx-3.4.0/src/voidx/tools/powershell/safety.py +70 -0
  174. voidx-3.4.0/src/voidx/tools/powershell/sandbox.py +241 -0
  175. voidx-3.4.0/src/voidx/tools/powershell/tool.py +97 -0
  176. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/registry.py +146 -137
  177. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/search.py +305 -305
  178. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/service.py +32 -32
  179. voidx-3.4.0/src/voidx/tools/shell/__init__.py +21 -0
  180. voidx-3.4.0/src/voidx/tools/shell/common.py +165 -0
  181. voidx-3.4.0/src/voidx/tools/shell/hint/__init__.py +1 -0
  182. voidx-3.4.0/src/voidx/tools/shell/hint/git.py +44 -0
  183. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/skills.py +252 -252
  184. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/task_status.py +72 -72
  185. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/task_tracker.py +132 -132
  186. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/todo.py +289 -289
  187. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/web_mcp.py +108 -108
  188. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/webfetch.py +256 -256
  189. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/websearch.py +285 -285
  190. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/workflow.py +556 -556
  191. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/commands.py +110 -110
  192. voidx-3.4.0/src/voidx/ui/gateway/adapter.py +512 -0
  193. voidx-3.4.0/src/voidx/ui/gateway/diff_review.py +210 -0
  194. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/gateway/server.py +114 -86
  195. voidx-3.4.0/src/voidx/ui/gateway/session.py +440 -0
  196. voidx-3.4.0/src/voidx/ui/gateway/terminal.py +205 -0
  197. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/agent_display.py +25 -25
  198. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/browse.py +174 -174
  199. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/capture.py +180 -180
  200. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/console/app.py +358 -358
  201. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/console/formatting.py +104 -104
  202. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/console/streaming.py +212 -212
  203. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/diff.py +130 -130
  204. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/display_policy.py +137 -136
  205. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/__init__.py +30 -30
  206. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/agent_placeholder.py +21 -21
  207. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/app.py +458 -456
  208. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/formatting.py +146 -146
  209. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/nodes.py +429 -426
  210. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/nodes_checkpoint.py +126 -116
  211. voidx-3.4.0/src/voidx/ui/output/dock/nodes_clarify.py +92 -0
  212. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/nodes_permission.py +49 -49
  213. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/nodes_startup.py +60 -60
  214. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/nodes_status.py +79 -79
  215. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/status.py +106 -106
  216. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/stream.py +171 -171
  217. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/todo.py +111 -111
  218. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/events/__init__.py +114 -110
  219. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/events/bus.py +119 -119
  220. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/events/consumers.py +604 -587
  221. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/events/schema.py +342 -325
  222. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/tree.py +777 -777
  223. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/types.py +44 -44
  224. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/__init__.py +59 -59
  225. voidx-3.4.0/src/voidx/ui/protocol/v2/__init__.py +5 -0
  226. voidx-3.4.0/src/voidx/ui/protocol/v2/envelope.py +116 -0
  227. voidx-3.4.0/src/voidx/ui/protocol/v2/methods.py +81 -0
  228. voidx-3.4.0/src/voidx/ui/protocol/v2/snapshot.py +37 -0
  229. voidx-3.4.0/src/voidx/ui/protocol/v2/threads.py +55 -0
  230. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/session.py +378 -378
  231. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/__init__.py +32 -32
  232. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/clipboard_image.py +347 -347
  233. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/clipboard_text.py +131 -131
  234. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/file_picker.py +139 -139
  235. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/skill_picker.py +83 -83
  236. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/transcript.py +150 -150
  237. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/activity.py +64 -64
  238. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/app.py +616 -616
  239. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/choice_mixin.py +59 -59
  240. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/clipboard_mixin.py +83 -83
  241. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/helpers.py +144 -144
  242. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/input.py +345 -345
  243. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/overlays.py +157 -157
  244. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/panels.py +340 -340
  245. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/parser.py +482 -440
  246. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/render_activity.py +129 -129
  247. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/render_frame.py +615 -615
  248. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/render_input.py +154 -154
  249. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/render_status.py +266 -266
  250. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/render_todo.py +79 -79
  251. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/renderer.py +24 -24
  252. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/state.py +254 -254
  253. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/terminal_mixin.py +95 -95
  254. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/text_prompt_mixin.py +49 -49
  255. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/__init__.py +70 -70
  256. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/auto_advance.py +162 -162
  257. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/context.py +61 -61
  258. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/dag.py +30 -30
  259. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/nodes.py +415 -411
  260. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/policy.py +82 -82
  261. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/reconcile.py +293 -293
  262. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/render.py +91 -91
  263. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/route.py +49 -49
  264. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/runtime.py +281 -281
  265. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/schema.py +177 -177
  266. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/service.py +143 -143
  267. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/workflow/types.py +101 -101
  268. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/PKG-INFO +96 -96
  269. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/SOURCES.txt +23 -0
  270. voidx-3.4.0/tests/test_install_sh.py +476 -0
  271. {voidx-3.3.0 → voidx-3.4.0}/tests/test_npm_package.py +323 -322
  272. voidx-3.3.0/src/voidx/tools/bash/hint/git.py +0 -20
  273. voidx-3.3.0/src/voidx/tools/bash/tool.py +0 -127
  274. voidx-3.3.0/src/voidx/ui/gateway/session.py +0 -136
  275. voidx-3.3.0/tests/test_install_sh.py +0 -162
  276. {voidx-3.3.0 → voidx-3.4.0}/README.md +0 -0
  277. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/__init__.py +0 -0
  278. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/graph/__init__.py +0 -0
  279. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/slash/__init__.py +0 -0
  280. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/agent/tool_messages.py +0 -0
  281. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/__init__.py +0 -0
  282. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/llm/context.py +0 -0
  283. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/config.py +0 -0
  284. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/errors.py +0 -0
  285. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/lsp/service.py +0 -0
  286. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/__init__.py +0 -0
  287. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/manager.py +0 -0
  288. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/schema.py +0 -0
  289. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp/tool.py +0 -0
  290. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp_servers/__init__.py +0 -0
  291. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/mcp_servers/web.py +0 -0
  292. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/__init__.py +0 -0
  293. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/memory/model_profiles.py +0 -0
  294. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/__init__.py +0 -0
  295. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/schema.py +0 -0
  296. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/permission/wildcard.py +0 -0
  297. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/tools/web_content.py +0 -0
  298. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/__init__.py +0 -0
  299. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/frontend.py +0 -0
  300. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/gateway/__init__.py +0 -0
  301. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/gateway/bootstrap.py +0 -0
  302. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/__init__.py +0 -0
  303. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/console/__init__.py +0 -0
  304. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/output/dock/state.py +0 -0
  305. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/commands.py +0 -0
  306. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/envelope.py +0 -0
  307. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/requests.py +0 -0
  308. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/schema.py +0 -0
  309. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/protocol/transcript.py +0 -0
  310. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/attachment_tokens.py +0 -0
  311. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tools/code_ide.py +0 -0
  312. {voidx-3.3.0 → voidx-3.4.0}/src/voidx/ui/tui/__init__.py +0 -0
  313. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/dependency_links.txt +0 -0
  314. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/entry_points.txt +0 -0
  315. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/requires.txt +0 -0
  316. {voidx-3.3.0 → voidx-3.4.0}/src/voidx.egg-info/top_level.txt +0 -0
@@ -1,96 +1,96 @@
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
+ Metadata-Version: 2.4
2
+ Name: voidx
3
+ Version: 3.4.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,59 +1,62 @@
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
+ [project]
2
+ name = "voidx"
3
+ dynamic = ["version"]
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.dynamic]
46
+ version = {attr = "voidx.__version__"}
47
+
48
+ [tool.setuptools.packages.find]
49
+ where = ["src"]
50
+
51
+ [tool.setuptools.package-data]
52
+ "voidx.skills" = [
53
+ "bundled/*/SKILL.md",
54
+ ]
55
+ "voidx.data" = [
56
+ "templates/*.md",
57
+ ]
58
+
59
+ [tool.pytest.ini_options]
60
+ asyncio_mode = "auto"
61
+ pythonpath = ["src"]
62
+ 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.3.0"
1
+ """VoidX - A coding agent that quantifies everything."""
2
+
3
+ __version__ = "3.4.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)