agentpool 2.1.9__py3-none-any.whl → 2.5.0__py3-none-any.whl

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 (311) hide show
  1. acp/__init__.py +13 -4
  2. acp/acp_requests.py +20 -77
  3. acp/agent/connection.py +8 -0
  4. acp/agent/implementations/debug_server/debug_server.py +6 -2
  5. acp/agent/protocol.py +6 -0
  6. acp/bridge/README.md +15 -2
  7. acp/bridge/__init__.py +3 -2
  8. acp/bridge/__main__.py +60 -19
  9. acp/bridge/ws_server.py +173 -0
  10. acp/bridge/ws_server_cli.py +89 -0
  11. acp/client/connection.py +38 -29
  12. acp/client/implementations/default_client.py +3 -2
  13. acp/client/implementations/headless_client.py +2 -2
  14. acp/connection.py +2 -2
  15. acp/notifications.py +20 -50
  16. acp/schema/__init__.py +2 -0
  17. acp/schema/agent_responses.py +21 -0
  18. acp/schema/client_requests.py +3 -3
  19. acp/schema/session_state.py +63 -29
  20. acp/stdio.py +39 -9
  21. acp/task/supervisor.py +2 -2
  22. acp/transports.py +362 -2
  23. acp/utils.py +17 -4
  24. agentpool/__init__.py +6 -1
  25. agentpool/agents/__init__.py +2 -0
  26. agentpool/agents/acp_agent/acp_agent.py +407 -277
  27. agentpool/agents/acp_agent/acp_converters.py +196 -38
  28. agentpool/agents/acp_agent/client_handler.py +191 -26
  29. agentpool/agents/acp_agent/session_state.py +17 -6
  30. agentpool/agents/agent.py +607 -572
  31. agentpool/agents/agui_agent/__init__.py +0 -2
  32. agentpool/agents/agui_agent/agui_agent.py +176 -110
  33. agentpool/agents/agui_agent/agui_converters.py +0 -131
  34. agentpool/agents/agui_agent/helpers.py +3 -4
  35. agentpool/agents/base_agent.py +632 -17
  36. agentpool/agents/claude_code_agent/FORKING.md +191 -0
  37. agentpool/agents/claude_code_agent/__init__.py +13 -1
  38. agentpool/agents/claude_code_agent/claude_code_agent.py +1058 -291
  39. agentpool/agents/claude_code_agent/converters.py +74 -143
  40. agentpool/agents/claude_code_agent/history.py +474 -0
  41. agentpool/agents/claude_code_agent/models.py +77 -0
  42. agentpool/agents/claude_code_agent/static_info.py +100 -0
  43. agentpool/agents/claude_code_agent/usage.py +242 -0
  44. agentpool/agents/context.py +40 -0
  45. agentpool/agents/events/__init__.py +24 -0
  46. agentpool/agents/events/builtin_handlers.py +67 -1
  47. agentpool/agents/events/event_emitter.py +32 -2
  48. agentpool/agents/events/events.py +104 -3
  49. agentpool/agents/events/infer_info.py +145 -0
  50. agentpool/agents/events/processors.py +254 -0
  51. agentpool/agents/interactions.py +41 -6
  52. agentpool/agents/modes.py +67 -0
  53. agentpool/agents/slashed_agent.py +5 -4
  54. agentpool/agents/tool_call_accumulator.py +213 -0
  55. agentpool/agents/tool_wrapping.py +18 -6
  56. agentpool/common_types.py +56 -21
  57. agentpool/config_resources/__init__.py +38 -1
  58. agentpool/config_resources/acp_assistant.yml +2 -2
  59. agentpool/config_resources/agents.yml +3 -0
  60. agentpool/config_resources/agents_template.yml +1 -0
  61. agentpool/config_resources/claude_code_agent.yml +10 -6
  62. agentpool/config_resources/external_acp_agents.yml +2 -1
  63. agentpool/delegation/base_team.py +4 -30
  64. agentpool/delegation/pool.py +136 -289
  65. agentpool/delegation/team.py +58 -57
  66. agentpool/delegation/teamrun.py +51 -55
  67. agentpool/diagnostics/__init__.py +53 -0
  68. agentpool/diagnostics/lsp_manager.py +1593 -0
  69. agentpool/diagnostics/lsp_proxy.py +41 -0
  70. agentpool/diagnostics/lsp_proxy_script.py +229 -0
  71. agentpool/diagnostics/models.py +398 -0
  72. agentpool/functional/run.py +10 -4
  73. agentpool/mcp_server/__init__.py +0 -2
  74. agentpool/mcp_server/client.py +76 -32
  75. agentpool/mcp_server/conversions.py +54 -13
  76. agentpool/mcp_server/manager.py +34 -54
  77. agentpool/mcp_server/registries/official_registry_client.py +35 -1
  78. agentpool/mcp_server/tool_bridge.py +186 -139
  79. agentpool/messaging/__init__.py +0 -2
  80. agentpool/messaging/compaction.py +72 -197
  81. agentpool/messaging/connection_manager.py +11 -10
  82. agentpool/messaging/event_manager.py +5 -5
  83. agentpool/messaging/message_container.py +6 -30
  84. agentpool/messaging/message_history.py +99 -8
  85. agentpool/messaging/messagenode.py +52 -14
  86. agentpool/messaging/messages.py +54 -35
  87. agentpool/messaging/processing.py +12 -22
  88. agentpool/models/__init__.py +1 -1
  89. agentpool/models/acp_agents/base.py +6 -24
  90. agentpool/models/acp_agents/mcp_capable.py +126 -157
  91. agentpool/models/acp_agents/non_mcp.py +129 -95
  92. agentpool/models/agents.py +98 -76
  93. agentpool/models/agui_agents.py +1 -1
  94. agentpool/models/claude_code_agents.py +144 -19
  95. agentpool/models/file_parsing.py +0 -1
  96. agentpool/models/manifest.py +113 -50
  97. agentpool/prompts/conversion_manager.py +1 -1
  98. agentpool/prompts/prompts.py +5 -2
  99. agentpool/repomap.py +1 -1
  100. agentpool/resource_providers/__init__.py +11 -1
  101. agentpool/resource_providers/aggregating.py +56 -5
  102. agentpool/resource_providers/base.py +70 -4
  103. agentpool/resource_providers/codemode/code_executor.py +72 -5
  104. agentpool/resource_providers/codemode/helpers.py +2 -2
  105. agentpool/resource_providers/codemode/provider.py +64 -12
  106. agentpool/resource_providers/codemode/remote_mcp_execution.py +2 -2
  107. agentpool/resource_providers/codemode/remote_provider.py +9 -12
  108. agentpool/resource_providers/filtering.py +3 -1
  109. agentpool/resource_providers/mcp_provider.py +89 -12
  110. agentpool/resource_providers/plan_provider.py +228 -46
  111. agentpool/resource_providers/pool.py +7 -3
  112. agentpool/resource_providers/resource_info.py +111 -0
  113. agentpool/resource_providers/static.py +4 -2
  114. agentpool/sessions/__init__.py +4 -1
  115. agentpool/sessions/manager.py +33 -5
  116. agentpool/sessions/models.py +59 -6
  117. agentpool/sessions/protocol.py +28 -0
  118. agentpool/sessions/session.py +11 -55
  119. agentpool/skills/registry.py +13 -8
  120. agentpool/storage/manager.py +572 -49
  121. agentpool/talk/registry.py +4 -4
  122. agentpool/talk/talk.py +9 -10
  123. agentpool/testing.py +538 -20
  124. agentpool/tool_impls/__init__.py +6 -0
  125. agentpool/tool_impls/agent_cli/__init__.py +42 -0
  126. agentpool/tool_impls/agent_cli/tool.py +95 -0
  127. agentpool/tool_impls/bash/__init__.py +64 -0
  128. agentpool/tool_impls/bash/helpers.py +35 -0
  129. agentpool/tool_impls/bash/tool.py +171 -0
  130. agentpool/tool_impls/delete_path/__init__.py +70 -0
  131. agentpool/tool_impls/delete_path/tool.py +142 -0
  132. agentpool/tool_impls/download_file/__init__.py +80 -0
  133. agentpool/tool_impls/download_file/tool.py +183 -0
  134. agentpool/tool_impls/execute_code/__init__.py +55 -0
  135. agentpool/tool_impls/execute_code/tool.py +163 -0
  136. agentpool/tool_impls/grep/__init__.py +80 -0
  137. agentpool/tool_impls/grep/tool.py +200 -0
  138. agentpool/tool_impls/list_directory/__init__.py +73 -0
  139. agentpool/tool_impls/list_directory/tool.py +197 -0
  140. agentpool/tool_impls/question/__init__.py +42 -0
  141. agentpool/tool_impls/question/tool.py +127 -0
  142. agentpool/tool_impls/read/__init__.py +104 -0
  143. agentpool/tool_impls/read/tool.py +305 -0
  144. agentpool/tools/__init__.py +2 -1
  145. agentpool/tools/base.py +114 -34
  146. agentpool/tools/manager.py +57 -1
  147. agentpool/ui/base.py +2 -2
  148. agentpool/ui/mock_provider.py +2 -2
  149. agentpool/ui/stdlib_provider.py +2 -2
  150. agentpool/utils/file_watcher.py +269 -0
  151. agentpool/utils/identifiers.py +121 -0
  152. agentpool/utils/pydantic_ai_helpers.py +46 -0
  153. agentpool/utils/streams.py +616 -2
  154. agentpool/utils/subprocess_utils.py +155 -0
  155. agentpool/utils/token_breakdown.py +461 -0
  156. agentpool/vfs_registry.py +7 -2
  157. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/METADATA +41 -27
  158. agentpool-2.5.0.dist-info/RECORD +579 -0
  159. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
  160. agentpool_cli/__main__.py +24 -0
  161. agentpool_cli/create.py +1 -1
  162. agentpool_cli/serve_acp.py +100 -21
  163. agentpool_cli/serve_agui.py +87 -0
  164. agentpool_cli/serve_opencode.py +119 -0
  165. agentpool_cli/ui.py +557 -0
  166. agentpool_commands/__init__.py +42 -5
  167. agentpool_commands/agents.py +75 -2
  168. agentpool_commands/history.py +62 -0
  169. agentpool_commands/mcp.py +176 -0
  170. agentpool_commands/models.py +56 -3
  171. agentpool_commands/pool.py +260 -0
  172. agentpool_commands/session.py +1 -1
  173. agentpool_commands/text_sharing/__init__.py +119 -0
  174. agentpool_commands/text_sharing/base.py +123 -0
  175. agentpool_commands/text_sharing/github_gist.py +80 -0
  176. agentpool_commands/text_sharing/opencode.py +462 -0
  177. agentpool_commands/text_sharing/paste_rs.py +59 -0
  178. agentpool_commands/text_sharing/pastebin.py +116 -0
  179. agentpool_commands/text_sharing/shittycodingagent.py +112 -0
  180. agentpool_commands/tools.py +57 -0
  181. agentpool_commands/utils.py +80 -30
  182. agentpool_config/__init__.py +30 -2
  183. agentpool_config/agentpool_tools.py +498 -0
  184. agentpool_config/builtin_tools.py +77 -22
  185. agentpool_config/commands.py +24 -1
  186. agentpool_config/compaction.py +258 -0
  187. agentpool_config/converters.py +1 -1
  188. agentpool_config/event_handlers.py +42 -0
  189. agentpool_config/events.py +1 -1
  190. agentpool_config/forward_targets.py +1 -4
  191. agentpool_config/jinja.py +3 -3
  192. agentpool_config/mcp_server.py +132 -6
  193. agentpool_config/nodes.py +1 -1
  194. agentpool_config/observability.py +44 -0
  195. agentpool_config/session.py +0 -3
  196. agentpool_config/storage.py +82 -38
  197. agentpool_config/task.py +3 -3
  198. agentpool_config/tools.py +11 -22
  199. agentpool_config/toolsets.py +109 -233
  200. agentpool_server/a2a_server/agent_worker.py +307 -0
  201. agentpool_server/a2a_server/server.py +23 -18
  202. agentpool_server/acp_server/acp_agent.py +234 -181
  203. agentpool_server/acp_server/commands/acp_commands.py +151 -156
  204. agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +18 -17
  205. agentpool_server/acp_server/event_converter.py +651 -0
  206. agentpool_server/acp_server/input_provider.py +53 -10
  207. agentpool_server/acp_server/server.py +24 -90
  208. agentpool_server/acp_server/session.py +173 -331
  209. agentpool_server/acp_server/session_manager.py +8 -34
  210. agentpool_server/agui_server/server.py +3 -1
  211. agentpool_server/mcp_server/server.py +5 -2
  212. agentpool_server/opencode_server/.rules +95 -0
  213. agentpool_server/opencode_server/ENDPOINTS.md +401 -0
  214. agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
  215. agentpool_server/opencode_server/__init__.py +19 -0
  216. agentpool_server/opencode_server/command_validation.py +172 -0
  217. agentpool_server/opencode_server/converters.py +975 -0
  218. agentpool_server/opencode_server/dependencies.py +24 -0
  219. agentpool_server/opencode_server/input_provider.py +421 -0
  220. agentpool_server/opencode_server/models/__init__.py +250 -0
  221. agentpool_server/opencode_server/models/agent.py +53 -0
  222. agentpool_server/opencode_server/models/app.py +72 -0
  223. agentpool_server/opencode_server/models/base.py +26 -0
  224. agentpool_server/opencode_server/models/common.py +23 -0
  225. agentpool_server/opencode_server/models/config.py +37 -0
  226. agentpool_server/opencode_server/models/events.py +821 -0
  227. agentpool_server/opencode_server/models/file.py +88 -0
  228. agentpool_server/opencode_server/models/mcp.py +44 -0
  229. agentpool_server/opencode_server/models/message.py +179 -0
  230. agentpool_server/opencode_server/models/parts.py +323 -0
  231. agentpool_server/opencode_server/models/provider.py +81 -0
  232. agentpool_server/opencode_server/models/pty.py +43 -0
  233. agentpool_server/opencode_server/models/question.py +56 -0
  234. agentpool_server/opencode_server/models/session.py +111 -0
  235. agentpool_server/opencode_server/routes/__init__.py +29 -0
  236. agentpool_server/opencode_server/routes/agent_routes.py +473 -0
  237. agentpool_server/opencode_server/routes/app_routes.py +202 -0
  238. agentpool_server/opencode_server/routes/config_routes.py +302 -0
  239. agentpool_server/opencode_server/routes/file_routes.py +571 -0
  240. agentpool_server/opencode_server/routes/global_routes.py +94 -0
  241. agentpool_server/opencode_server/routes/lsp_routes.py +319 -0
  242. agentpool_server/opencode_server/routes/message_routes.py +761 -0
  243. agentpool_server/opencode_server/routes/permission_routes.py +63 -0
  244. agentpool_server/opencode_server/routes/pty_routes.py +300 -0
  245. agentpool_server/opencode_server/routes/question_routes.py +128 -0
  246. agentpool_server/opencode_server/routes/session_routes.py +1276 -0
  247. agentpool_server/opencode_server/routes/tui_routes.py +139 -0
  248. agentpool_server/opencode_server/server.py +475 -0
  249. agentpool_server/opencode_server/state.py +151 -0
  250. agentpool_server/opencode_server/time_utils.py +8 -0
  251. agentpool_storage/__init__.py +12 -0
  252. agentpool_storage/base.py +184 -2
  253. agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
  254. agentpool_storage/claude_provider/__init__.py +42 -0
  255. agentpool_storage/claude_provider/provider.py +1089 -0
  256. agentpool_storage/file_provider.py +278 -15
  257. agentpool_storage/memory_provider.py +193 -12
  258. agentpool_storage/models.py +3 -0
  259. agentpool_storage/opencode_provider/ARCHITECTURE.md +386 -0
  260. agentpool_storage/opencode_provider/__init__.py +16 -0
  261. agentpool_storage/opencode_provider/helpers.py +414 -0
  262. agentpool_storage/opencode_provider/provider.py +895 -0
  263. agentpool_storage/project_store.py +325 -0
  264. agentpool_storage/session_store.py +26 -6
  265. agentpool_storage/sql_provider/__init__.py +4 -2
  266. agentpool_storage/sql_provider/models.py +48 -0
  267. agentpool_storage/sql_provider/sql_provider.py +269 -3
  268. agentpool_storage/sql_provider/utils.py +12 -13
  269. agentpool_storage/zed_provider/__init__.py +16 -0
  270. agentpool_storage/zed_provider/helpers.py +281 -0
  271. agentpool_storage/zed_provider/models.py +130 -0
  272. agentpool_storage/zed_provider/provider.py +442 -0
  273. agentpool_storage/zed_provider.py +803 -0
  274. agentpool_toolsets/__init__.py +0 -2
  275. agentpool_toolsets/builtin/__init__.py +2 -12
  276. agentpool_toolsets/builtin/code.py +96 -57
  277. agentpool_toolsets/builtin/debug.py +118 -48
  278. agentpool_toolsets/builtin/execution_environment.py +115 -230
  279. agentpool_toolsets/builtin/file_edit/file_edit.py +115 -7
  280. agentpool_toolsets/builtin/skills.py +9 -4
  281. agentpool_toolsets/builtin/subagent_tools.py +64 -51
  282. agentpool_toolsets/builtin/workers.py +4 -2
  283. agentpool_toolsets/composio_toolset.py +2 -2
  284. agentpool_toolsets/entry_points.py +3 -1
  285. agentpool_toolsets/fsspec_toolset/__init__.py +13 -1
  286. agentpool_toolsets/fsspec_toolset/diagnostics.py +860 -73
  287. agentpool_toolsets/fsspec_toolset/grep.py +99 -7
  288. agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
  289. agentpool_toolsets/fsspec_toolset/image_utils.py +161 -0
  290. agentpool_toolsets/fsspec_toolset/toolset.py +500 -95
  291. agentpool_toolsets/mcp_discovery/__init__.py +5 -0
  292. agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
  293. agentpool_toolsets/mcp_discovery/toolset.py +511 -0
  294. agentpool_toolsets/mcp_run_toolset.py +87 -12
  295. agentpool_toolsets/notifications.py +33 -33
  296. agentpool_toolsets/openapi.py +3 -1
  297. agentpool_toolsets/search_toolset.py +3 -1
  298. agentpool-2.1.9.dist-info/RECORD +0 -474
  299. agentpool_config/resources.py +0 -33
  300. agentpool_server/acp_server/acp_tools.py +0 -43
  301. agentpool_server/acp_server/commands/spawn.py +0 -210
  302. agentpool_storage/text_log_provider.py +0 -275
  303. agentpool_toolsets/builtin/agent_management.py +0 -239
  304. agentpool_toolsets/builtin/chain.py +0 -288
  305. agentpool_toolsets/builtin/history.py +0 -36
  306. agentpool_toolsets/builtin/integration.py +0 -85
  307. agentpool_toolsets/builtin/tool_management.py +0 -90
  308. agentpool_toolsets/builtin/user_interaction.py +0 -52
  309. agentpool_toolsets/semantic_memory_toolset.py +0 -536
  310. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
  311. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -5,18 +5,11 @@ from __future__ import annotations
5
5
  from typing import TYPE_CHECKING, Any, Literal
6
6
 
7
7
  from pydantic_ai import (
8
- FunctionToolCallEvent,
9
- FunctionToolResultEvent,
10
8
  ModelRetry,
11
9
  PartDeltaEvent,
12
- PartStartEvent,
13
- RetryPromptPart,
14
- TextPart,
15
10
  TextPartDelta,
16
- ThinkingPart,
17
11
  ThinkingPartDelta,
18
12
  ToolCallPartDelta,
19
- ToolReturnPart,
20
13
  )
21
14
 
22
15
  from agentpool.agents.context import AgentContext # noqa: TC001
@@ -129,58 +122,60 @@ async def batch_stream_deltas( # noqa: PLR0915
129
122
  yield _make_batched_event()
130
123
 
131
124
 
132
- async def _stream_agent_with_progress(
125
+ async def _stream_subagent(
133
126
  ctx: AgentContext,
127
+ source_name: str,
128
+ source_type: Literal["agent", "team_parallel", "team_sequential"],
134
129
  stream: AsyncIterator[RichAgentStreamEvent[Any]],
135
130
  *,
136
131
  batch_deltas: bool = False,
132
+ depth: int = 1,
137
133
  ) -> str:
138
- """Stream an agent's execution and emit progress events.
134
+ """Stream a subagent's execution, emitting SubAgentEvents into parent stream.
139
135
 
140
136
  Args:
141
137
  ctx: Agent context for emitting events
138
+ source_name: Name of the subagent/team
139
+ source_type: Whether source is "agent" or "team"
142
140
  stream: Async iterator of stream events from agent.run_stream()
143
141
  batch_deltas: If True, batch consecutive text/thinking deltas for fewer UI updates
142
+ depth: Nesting depth for nested delegation
144
143
 
145
144
  Returns:
146
- Aggregated content from the stream
145
+ Final text content from the stream
147
146
  """
147
+ from agentpool.agents.events import StreamCompleteEvent, SubAgentEvent
148
+
148
149
  if batch_deltas:
149
150
  stream = batch_stream_deltas(stream)
150
151
 
151
- aggregated: list[str] = []
152
+ final_content: str = ""
152
153
  async for event in stream:
153
- match event:
154
- case (
155
- PartStartEvent(part=TextPart(content=delta))
156
- | PartDeltaEvent(delta=TextPartDelta(content_delta=delta))
157
- ):
158
- aggregated.append(delta)
159
- await ctx.events.tool_call_progress("".join(aggregated))
160
- case (
161
- PartStartEvent(part=ThinkingPart(content=delta))
162
- | PartDeltaEvent(delta=ThinkingPartDelta(content_delta=delta))
163
- ):
164
- if delta:
165
- aggregated.append(f"💭 {delta}")
166
- await ctx.events.tool_call_progress("".join(aggregated))
167
- case FunctionToolCallEvent(part=part):
168
- aggregated.append(f"\n🔧 Using tool: {part.tool_name}\n")
169
- await ctx.events.tool_call_progress("".join(aggregated))
170
- case FunctionToolResultEvent(
171
- result=ToolReturnPart(content=content, tool_name=tool_name),
172
- ):
173
- aggregated.append(f"✅ {tool_name}: {content}\n")
174
- await ctx.events.tool_call_progress("".join(aggregated))
154
+ # Handle nested SubAgentEvents - increment depth
155
+ if isinstance(event, SubAgentEvent):
156
+ nested_event = SubAgentEvent(
157
+ source_name=event.source_name,
158
+ source_type=event.source_type,
159
+ event=event.event,
160
+ depth=event.depth + depth,
161
+ )
162
+ await ctx.events.emit_event(nested_event)
163
+ else:
164
+ # Wrap the event in SubAgentEvent
165
+ subagent_event = SubAgentEvent(
166
+ source_name=source_name,
167
+ source_type=source_type,
168
+ event=event,
169
+ depth=depth,
170
+ )
171
+ await ctx.events.emit_event(subagent_event)
175
172
 
176
- case FunctionToolResultEvent(result=RetryPromptPart(tool_name=tool_name) as result):
177
- error_message = result.model_response()
178
- aggregated.append(f"❌ {tool_name or 'unknown'}: {error_message}\n")
179
- await ctx.events.tool_call_progress("".join(aggregated))
180
- case _:
181
- pass
173
+ # Extract final content from StreamCompleteEvent
174
+ if isinstance(event, StreamCompleteEvent):
175
+ content = event.message.content
176
+ final_content = str(content) if content else ""
182
177
 
183
- return "".join(aggregated).strip()
178
+ return final_content
184
179
 
185
180
 
186
181
  class SubagentTools(StaticResourceProvider):
@@ -269,6 +264,10 @@ class SubagentTools(StaticResourceProvider):
269
264
  Returns:
270
265
  The result of the delegated task
271
266
  """
267
+ from agentpool import Team, TeamRun
268
+ from agentpool.agents.base_agent import BaseAgent
269
+ from agentpool.common_types import SupportsRunStream
270
+
272
271
  if not ctx.pool:
273
272
  msg = "Agent needs to be in a pool to delegate tasks"
274
273
  raise ToolError(msg)
@@ -278,15 +277,26 @@ class SubagentTools(StaticResourceProvider):
278
277
  f"Available nodes: {', '.join(ctx.pool.nodes.keys())}"
279
278
  )
280
279
  raise ModelRetry(msg)
280
+ # Determine source type and get node
281
+ node = ctx.pool.nodes[agent_or_team_name]
282
+ match node:
283
+ case Team():
284
+ source_type: Literal["team_parallel", "team_sequential", "agent"] = "team_parallel"
285
+ case TeamRun():
286
+ source_type = "team_sequential"
287
+ case BaseAgent():
288
+ source_type = "agent"
289
+ if not isinstance(node, SupportsRunStream):
290
+ msg = f"Node {agent_or_team_name} does not support streaming"
291
+ raise ToolError(msg)
281
292
 
282
- # For teams, use simple run() - no streaming support yet
283
- if agent_or_team_name in ctx.pool.teams:
284
- result = await ctx.pool.teams[agent_or_team_name].run(prompt)
285
- return result.format(style="detailed", show_costs=True)
286
- # For agents (regular or ACP), stream with progress events
287
- agent = ctx.pool.all_agents[agent_or_team_name]
288
- return await _stream_agent_with_progress(
289
- ctx, agent.run_stream(prompt), batch_deltas=self._batch_stream_deltas
293
+ # Stream with SubAgentEvent wrapping
294
+ return await _stream_subagent(
295
+ ctx,
296
+ source_name=agent_or_team_name,
297
+ source_type=source_type,
298
+ stream=node.run_stream(prompt),
299
+ batch_deltas=self._batch_stream_deltas,
290
300
  )
291
301
 
292
302
  async def ask_agent( # noqa: D417
@@ -315,9 +325,12 @@ class SubagentTools(StaticResourceProvider):
315
325
 
316
326
  agent = ctx.pool.all_agents[agent_name]
317
327
  try:
318
- stream = agent.run_stream(message)
319
- return await _stream_agent_with_progress(
320
- ctx, stream, batch_deltas=self._batch_stream_deltas
328
+ return await _stream_subagent(
329
+ ctx,
330
+ source_name=agent_name,
331
+ source_type="agent",
332
+ stream=agent.run_stream(message),
333
+ batch_deltas=self._batch_stream_deltas,
321
334
  )
322
335
  except Exception as e:
323
336
  msg = f"Failed to ask agent {agent_name}: {e}"
@@ -11,6 +11,8 @@ from agentpool.tools.exceptions import ToolError
11
11
 
12
12
 
13
13
  if TYPE_CHECKING:
14
+ from collections.abc import Sequence
15
+
14
16
  from agentpool.tools.base import Tool
15
17
  from agentpool_config.workers import WorkerConfig
16
18
 
@@ -35,7 +37,7 @@ class WorkersTools(ResourceProvider):
35
37
  super().__init__(name=name)
36
38
  self.workers = workers
37
39
 
38
- async def get_tools(self) -> list[Tool]:
40
+ async def get_tools(self) -> Sequence[Tool]:
39
41
  """Get tools for all configured workers."""
40
42
  return [self._create_worker_tool(i) for i in self.workers]
41
43
 
@@ -78,7 +80,7 @@ class WorkersTools(ResourceProvider):
78
80
  old_history = worker.conversation.get_history()
79
81
  worker.conversation.set_history(ctx.agent.conversation.get_history())
80
82
  elif reset_history_on_run:
81
- worker.conversation.clear()
83
+ await worker.conversation.clear()
82
84
 
83
85
  try:
84
86
  result = await worker.run(prompt)
@@ -10,7 +10,7 @@ from agentpool.resource_providers import ResourceProvider
10
10
 
11
11
 
12
12
  if TYPE_CHECKING:
13
- from collections.abc import Callable
13
+ from collections.abc import Callable, Sequence
14
14
 
15
15
  from agentpool.tools.base import Tool
16
16
 
@@ -52,7 +52,7 @@ class ComposioTools(ResourceProvider):
52
52
  handle_tool_call.__name__ = tool_slug
53
53
  return handle_tool_call
54
54
 
55
- async def get_tools(self) -> list[Tool]:
55
+ async def get_tools(self) -> Sequence[Tool]:
56
56
  """Get tools from composio."""
57
57
  # Return cached tools if available
58
58
  if self._tools is not None:
@@ -12,6 +12,8 @@ from agentpool.resource_providers import ResourceProvider
12
12
 
13
13
 
14
14
  if TYPE_CHECKING:
15
+ from collections.abc import Sequence
16
+
15
17
  from agentpool.tools.base import Tool
16
18
 
17
19
 
@@ -27,7 +29,7 @@ class EntryPointTools(ResourceProvider):
27
29
  self._tools: list[Tool] | None = None
28
30
  self.registry = EntryPointRegistry[Callable[..., Any]]("agentpool")
29
31
 
30
- async def get_tools(self) -> list[Tool]:
32
+ async def get_tools(self) -> Sequence[Tool]:
31
33
  """Get tools from entry points."""
32
34
  # Return cached tools if available
33
35
  if self._tools is not None:
@@ -2,6 +2,18 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from agentpool_toolsets.fsspec_toolset.diagnostics import (
6
+ DiagnosticsConfig,
7
+ DiagnosticsManager,
8
+ DiagnosticsResult,
9
+ )
10
+ from agentpool_toolsets.fsspec_toolset.image_utils import resize_image_if_needed
5
11
  from agentpool_toolsets.fsspec_toolset.toolset import FSSpecTools
6
12
 
7
- __all__ = ["FSSpecTools"]
13
+ __all__ = [
14
+ "DiagnosticsConfig",
15
+ "DiagnosticsManager",
16
+ "DiagnosticsResult",
17
+ "FSSpecTools",
18
+ "resize_image_if_needed",
19
+ ]