agentpool 2.1.9__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.

Potentially problematic release.


This version of agentpool might be problematic. Click here for more details.

Files changed (474) hide show
  1. acp/README.md +64 -0
  2. acp/__init__.py +172 -0
  3. acp/__main__.py +10 -0
  4. acp/acp_requests.py +285 -0
  5. acp/agent/__init__.py +6 -0
  6. acp/agent/connection.py +256 -0
  7. acp/agent/implementations/__init__.py +6 -0
  8. acp/agent/implementations/debug_server/__init__.py +1 -0
  9. acp/agent/implementations/debug_server/cli.py +79 -0
  10. acp/agent/implementations/debug_server/debug.html +234 -0
  11. acp/agent/implementations/debug_server/debug_server.py +496 -0
  12. acp/agent/implementations/testing.py +91 -0
  13. acp/agent/protocol.py +65 -0
  14. acp/bridge/README.md +162 -0
  15. acp/bridge/__init__.py +6 -0
  16. acp/bridge/__main__.py +91 -0
  17. acp/bridge/bridge.py +246 -0
  18. acp/bridge/py.typed +0 -0
  19. acp/bridge/settings.py +15 -0
  20. acp/client/__init__.py +7 -0
  21. acp/client/connection.py +251 -0
  22. acp/client/implementations/__init__.py +7 -0
  23. acp/client/implementations/default_client.py +185 -0
  24. acp/client/implementations/headless_client.py +266 -0
  25. acp/client/implementations/noop_client.py +110 -0
  26. acp/client/protocol.py +61 -0
  27. acp/connection.py +280 -0
  28. acp/exceptions.py +46 -0
  29. acp/filesystem.py +524 -0
  30. acp/notifications.py +832 -0
  31. acp/py.typed +0 -0
  32. acp/schema/__init__.py +265 -0
  33. acp/schema/agent_plan.py +30 -0
  34. acp/schema/agent_requests.py +126 -0
  35. acp/schema/agent_responses.py +256 -0
  36. acp/schema/base.py +39 -0
  37. acp/schema/capabilities.py +230 -0
  38. acp/schema/client_requests.py +247 -0
  39. acp/schema/client_responses.py +96 -0
  40. acp/schema/common.py +81 -0
  41. acp/schema/content_blocks.py +188 -0
  42. acp/schema/mcp.py +82 -0
  43. acp/schema/messages.py +171 -0
  44. acp/schema/notifications.py +82 -0
  45. acp/schema/protocol_stuff.md +3 -0
  46. acp/schema/session_state.py +160 -0
  47. acp/schema/session_updates.py +419 -0
  48. acp/schema/slash_commands.py +51 -0
  49. acp/schema/terminal.py +15 -0
  50. acp/schema/tool_call.py +347 -0
  51. acp/stdio.py +250 -0
  52. acp/task/__init__.py +53 -0
  53. acp/task/debug.py +197 -0
  54. acp/task/dispatcher.py +93 -0
  55. acp/task/queue.py +69 -0
  56. acp/task/sender.py +82 -0
  57. acp/task/state.py +87 -0
  58. acp/task/supervisor.py +93 -0
  59. acp/terminal_handle.py +30 -0
  60. acp/tool_call_reporter.py +199 -0
  61. acp/tool_call_state.py +178 -0
  62. acp/transports.py +104 -0
  63. acp/utils.py +240 -0
  64. agentpool/__init__.py +63 -0
  65. agentpool/__main__.py +7 -0
  66. agentpool/agents/__init__.py +30 -0
  67. agentpool/agents/acp_agent/__init__.py +5 -0
  68. agentpool/agents/acp_agent/acp_agent.py +837 -0
  69. agentpool/agents/acp_agent/acp_converters.py +294 -0
  70. agentpool/agents/acp_agent/client_handler.py +317 -0
  71. agentpool/agents/acp_agent/session_state.py +44 -0
  72. agentpool/agents/agent.py +1264 -0
  73. agentpool/agents/agui_agent/__init__.py +19 -0
  74. agentpool/agents/agui_agent/agui_agent.py +677 -0
  75. agentpool/agents/agui_agent/agui_converters.py +423 -0
  76. agentpool/agents/agui_agent/chunk_transformer.py +204 -0
  77. agentpool/agents/agui_agent/event_types.py +83 -0
  78. agentpool/agents/agui_agent/helpers.py +192 -0
  79. agentpool/agents/architect.py +71 -0
  80. agentpool/agents/base_agent.py +177 -0
  81. agentpool/agents/claude_code_agent/__init__.py +11 -0
  82. agentpool/agents/claude_code_agent/claude_code_agent.py +1021 -0
  83. agentpool/agents/claude_code_agent/converters.py +243 -0
  84. agentpool/agents/context.py +105 -0
  85. agentpool/agents/events/__init__.py +61 -0
  86. agentpool/agents/events/builtin_handlers.py +129 -0
  87. agentpool/agents/events/event_emitter.py +320 -0
  88. agentpool/agents/events/events.py +561 -0
  89. agentpool/agents/events/tts_handlers.py +186 -0
  90. agentpool/agents/interactions.py +419 -0
  91. agentpool/agents/slashed_agent.py +244 -0
  92. agentpool/agents/sys_prompts.py +178 -0
  93. agentpool/agents/tool_wrapping.py +184 -0
  94. agentpool/base_provider.py +28 -0
  95. agentpool/common_types.py +226 -0
  96. agentpool/config_resources/__init__.py +16 -0
  97. agentpool/config_resources/acp_assistant.yml +24 -0
  98. agentpool/config_resources/agents.yml +109 -0
  99. agentpool/config_resources/agents_template.yml +18 -0
  100. agentpool/config_resources/agui_test.yml +18 -0
  101. agentpool/config_resources/claude_code_agent.yml +16 -0
  102. agentpool/config_resources/claude_style_subagent.md +30 -0
  103. agentpool/config_resources/external_acp_agents.yml +77 -0
  104. agentpool/config_resources/opencode_style_subagent.md +19 -0
  105. agentpool/config_resources/tts_test_agents.yml +78 -0
  106. agentpool/delegation/__init__.py +8 -0
  107. agentpool/delegation/base_team.py +504 -0
  108. agentpool/delegation/message_flow_tracker.py +39 -0
  109. agentpool/delegation/pool.py +1129 -0
  110. agentpool/delegation/team.py +325 -0
  111. agentpool/delegation/teamrun.py +343 -0
  112. agentpool/docs/__init__.py +5 -0
  113. agentpool/docs/gen_examples.py +42 -0
  114. agentpool/docs/utils.py +370 -0
  115. agentpool/functional/__init__.py +20 -0
  116. agentpool/functional/py.typed +0 -0
  117. agentpool/functional/run.py +80 -0
  118. agentpool/functional/structure.py +136 -0
  119. agentpool/hooks/__init__.py +20 -0
  120. agentpool/hooks/agent_hooks.py +247 -0
  121. agentpool/hooks/base.py +119 -0
  122. agentpool/hooks/callable.py +140 -0
  123. agentpool/hooks/command.py +180 -0
  124. agentpool/hooks/prompt.py +122 -0
  125. agentpool/jinja_filters.py +132 -0
  126. agentpool/log.py +224 -0
  127. agentpool/mcp_server/__init__.py +17 -0
  128. agentpool/mcp_server/client.py +429 -0
  129. agentpool/mcp_server/constants.py +32 -0
  130. agentpool/mcp_server/conversions.py +172 -0
  131. agentpool/mcp_server/helpers.py +47 -0
  132. agentpool/mcp_server/manager.py +232 -0
  133. agentpool/mcp_server/message_handler.py +164 -0
  134. agentpool/mcp_server/registries/__init__.py +1 -0
  135. agentpool/mcp_server/registries/official_registry_client.py +345 -0
  136. agentpool/mcp_server/registries/pulsemcp_client.py +88 -0
  137. agentpool/mcp_server/tool_bridge.py +548 -0
  138. agentpool/messaging/__init__.py +58 -0
  139. agentpool/messaging/compaction.py +928 -0
  140. agentpool/messaging/connection_manager.py +319 -0
  141. agentpool/messaging/context.py +66 -0
  142. agentpool/messaging/event_manager.py +426 -0
  143. agentpool/messaging/events.py +39 -0
  144. agentpool/messaging/message_container.py +209 -0
  145. agentpool/messaging/message_history.py +491 -0
  146. agentpool/messaging/messagenode.py +377 -0
  147. agentpool/messaging/messages.py +655 -0
  148. agentpool/messaging/processing.py +76 -0
  149. agentpool/mime_utils.py +95 -0
  150. agentpool/models/__init__.py +21 -0
  151. agentpool/models/acp_agents/__init__.py +22 -0
  152. agentpool/models/acp_agents/base.py +308 -0
  153. agentpool/models/acp_agents/mcp_capable.py +790 -0
  154. agentpool/models/acp_agents/non_mcp.py +842 -0
  155. agentpool/models/agents.py +450 -0
  156. agentpool/models/agui_agents.py +89 -0
  157. agentpool/models/claude_code_agents.py +238 -0
  158. agentpool/models/file_agents.py +116 -0
  159. agentpool/models/file_parsing.py +367 -0
  160. agentpool/models/manifest.py +658 -0
  161. agentpool/observability/__init__.py +9 -0
  162. agentpool/observability/observability_registry.py +97 -0
  163. agentpool/prompts/__init__.py +1 -0
  164. agentpool/prompts/base.py +27 -0
  165. agentpool/prompts/builtin_provider.py +75 -0
  166. agentpool/prompts/conversion_manager.py +95 -0
  167. agentpool/prompts/convert.py +96 -0
  168. agentpool/prompts/manager.py +204 -0
  169. agentpool/prompts/parts/zed.md +33 -0
  170. agentpool/prompts/prompts.py +581 -0
  171. agentpool/py.typed +0 -0
  172. agentpool/queries/tree-sitter-language-pack/README.md +7 -0
  173. agentpool/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
  174. agentpool/queries/tree-sitter-language-pack/c-tags.scm +9 -0
  175. agentpool/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
  176. agentpool/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
  177. agentpool/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
  178. agentpool/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
  179. agentpool/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
  180. agentpool/queries/tree-sitter-language-pack/d-tags.scm +26 -0
  181. agentpool/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
  182. agentpool/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
  183. agentpool/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
  184. agentpool/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
  185. agentpool/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
  186. agentpool/queries/tree-sitter-language-pack/go-tags.scm +42 -0
  187. agentpool/queries/tree-sitter-language-pack/java-tags.scm +20 -0
  188. agentpool/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
  189. agentpool/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
  190. agentpool/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
  191. agentpool/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
  192. agentpool/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
  193. agentpool/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
  194. agentpool/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
  195. agentpool/queries/tree-sitter-language-pack/python-tags.scm +14 -0
  196. agentpool/queries/tree-sitter-language-pack/r-tags.scm +21 -0
  197. agentpool/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
  198. agentpool/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
  199. agentpool/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
  200. agentpool/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
  201. agentpool/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
  202. agentpool/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
  203. agentpool/queries/tree-sitter-languages/README.md +24 -0
  204. agentpool/queries/tree-sitter-languages/c-tags.scm +9 -0
  205. agentpool/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
  206. agentpool/queries/tree-sitter-languages/cpp-tags.scm +15 -0
  207. agentpool/queries/tree-sitter-languages/dart-tags.scm +91 -0
  208. agentpool/queries/tree-sitter-languages/elisp-tags.scm +8 -0
  209. agentpool/queries/tree-sitter-languages/elixir-tags.scm +54 -0
  210. agentpool/queries/tree-sitter-languages/elm-tags.scm +19 -0
  211. agentpool/queries/tree-sitter-languages/fortran-tags.scm +15 -0
  212. agentpool/queries/tree-sitter-languages/go-tags.scm +30 -0
  213. agentpool/queries/tree-sitter-languages/haskell-tags.scm +3 -0
  214. agentpool/queries/tree-sitter-languages/hcl-tags.scm +77 -0
  215. agentpool/queries/tree-sitter-languages/java-tags.scm +20 -0
  216. agentpool/queries/tree-sitter-languages/javascript-tags.scm +88 -0
  217. agentpool/queries/tree-sitter-languages/julia-tags.scm +60 -0
  218. agentpool/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
  219. agentpool/queries/tree-sitter-languages/matlab-tags.scm +10 -0
  220. agentpool/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
  221. agentpool/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
  222. agentpool/queries/tree-sitter-languages/php-tags.scm +26 -0
  223. agentpool/queries/tree-sitter-languages/python-tags.scm +12 -0
  224. agentpool/queries/tree-sitter-languages/ql-tags.scm +26 -0
  225. agentpool/queries/tree-sitter-languages/ruby-tags.scm +64 -0
  226. agentpool/queries/tree-sitter-languages/rust-tags.scm +60 -0
  227. agentpool/queries/tree-sitter-languages/scala-tags.scm +65 -0
  228. agentpool/queries/tree-sitter-languages/typescript-tags.scm +41 -0
  229. agentpool/queries/tree-sitter-languages/zig-tags.scm +3 -0
  230. agentpool/repomap.py +1231 -0
  231. agentpool/resource_providers/__init__.py +17 -0
  232. agentpool/resource_providers/aggregating.py +54 -0
  233. agentpool/resource_providers/base.py +172 -0
  234. agentpool/resource_providers/codemode/__init__.py +9 -0
  235. agentpool/resource_providers/codemode/code_executor.py +215 -0
  236. agentpool/resource_providers/codemode/default_prompt.py +19 -0
  237. agentpool/resource_providers/codemode/helpers.py +83 -0
  238. agentpool/resource_providers/codemode/progress_executor.py +212 -0
  239. agentpool/resource_providers/codemode/provider.py +150 -0
  240. agentpool/resource_providers/codemode/remote_mcp_execution.py +143 -0
  241. agentpool/resource_providers/codemode/remote_provider.py +171 -0
  242. agentpool/resource_providers/filtering.py +42 -0
  243. agentpool/resource_providers/mcp_provider.py +246 -0
  244. agentpool/resource_providers/plan_provider.py +196 -0
  245. agentpool/resource_providers/pool.py +69 -0
  246. agentpool/resource_providers/static.py +289 -0
  247. agentpool/running/__init__.py +20 -0
  248. agentpool/running/decorators.py +56 -0
  249. agentpool/running/discovery.py +101 -0
  250. agentpool/running/executor.py +284 -0
  251. agentpool/running/injection.py +111 -0
  252. agentpool/running/py.typed +0 -0
  253. agentpool/running/run_nodes.py +87 -0
  254. agentpool/server.py +122 -0
  255. agentpool/sessions/__init__.py +13 -0
  256. agentpool/sessions/manager.py +302 -0
  257. agentpool/sessions/models.py +71 -0
  258. agentpool/sessions/session.py +239 -0
  259. agentpool/sessions/store.py +163 -0
  260. agentpool/skills/__init__.py +5 -0
  261. agentpool/skills/manager.py +120 -0
  262. agentpool/skills/registry.py +210 -0
  263. agentpool/skills/skill.py +36 -0
  264. agentpool/storage/__init__.py +17 -0
  265. agentpool/storage/manager.py +419 -0
  266. agentpool/storage/serialization.py +136 -0
  267. agentpool/talk/__init__.py +13 -0
  268. agentpool/talk/registry.py +128 -0
  269. agentpool/talk/stats.py +159 -0
  270. agentpool/talk/talk.py +604 -0
  271. agentpool/tasks/__init__.py +20 -0
  272. agentpool/tasks/exceptions.py +25 -0
  273. agentpool/tasks/registry.py +33 -0
  274. agentpool/testing.py +129 -0
  275. agentpool/text_templates/__init__.py +39 -0
  276. agentpool/text_templates/system_prompt.jinja +30 -0
  277. agentpool/text_templates/tool_call_default.jinja +13 -0
  278. agentpool/text_templates/tool_call_markdown.jinja +25 -0
  279. agentpool/text_templates/tool_call_simple.jinja +5 -0
  280. agentpool/tools/__init__.py +16 -0
  281. agentpool/tools/base.py +269 -0
  282. agentpool/tools/exceptions.py +9 -0
  283. agentpool/tools/manager.py +255 -0
  284. agentpool/tools/tool_call_info.py +87 -0
  285. agentpool/ui/__init__.py +2 -0
  286. agentpool/ui/base.py +89 -0
  287. agentpool/ui/mock_provider.py +81 -0
  288. agentpool/ui/stdlib_provider.py +150 -0
  289. agentpool/utils/__init__.py +44 -0
  290. agentpool/utils/baseregistry.py +185 -0
  291. agentpool/utils/count_tokens.py +62 -0
  292. agentpool/utils/dag.py +184 -0
  293. agentpool/utils/importing.py +206 -0
  294. agentpool/utils/inspection.py +334 -0
  295. agentpool/utils/model_capabilities.py +25 -0
  296. agentpool/utils/network.py +28 -0
  297. agentpool/utils/now.py +22 -0
  298. agentpool/utils/parse_time.py +87 -0
  299. agentpool/utils/result_utils.py +35 -0
  300. agentpool/utils/signatures.py +305 -0
  301. agentpool/utils/streams.py +112 -0
  302. agentpool/utils/tasks.py +186 -0
  303. agentpool/vfs_registry.py +250 -0
  304. agentpool-2.1.9.dist-info/METADATA +336 -0
  305. agentpool-2.1.9.dist-info/RECORD +474 -0
  306. agentpool-2.1.9.dist-info/WHEEL +4 -0
  307. agentpool-2.1.9.dist-info/entry_points.txt +14 -0
  308. agentpool-2.1.9.dist-info/licenses/LICENSE +22 -0
  309. agentpool_cli/__init__.py +34 -0
  310. agentpool_cli/__main__.py +66 -0
  311. agentpool_cli/agent.py +175 -0
  312. agentpool_cli/cli_types.py +23 -0
  313. agentpool_cli/common.py +163 -0
  314. agentpool_cli/create.py +175 -0
  315. agentpool_cli/history.py +217 -0
  316. agentpool_cli/log.py +78 -0
  317. agentpool_cli/py.typed +0 -0
  318. agentpool_cli/run.py +84 -0
  319. agentpool_cli/serve_acp.py +177 -0
  320. agentpool_cli/serve_api.py +69 -0
  321. agentpool_cli/serve_mcp.py +74 -0
  322. agentpool_cli/serve_vercel.py +233 -0
  323. agentpool_cli/store.py +171 -0
  324. agentpool_cli/task.py +84 -0
  325. agentpool_cli/utils.py +104 -0
  326. agentpool_cli/watch.py +54 -0
  327. agentpool_commands/__init__.py +180 -0
  328. agentpool_commands/agents.py +199 -0
  329. agentpool_commands/base.py +45 -0
  330. agentpool_commands/commands.py +58 -0
  331. agentpool_commands/completers.py +110 -0
  332. agentpool_commands/connections.py +175 -0
  333. agentpool_commands/markdown_utils.py +31 -0
  334. agentpool_commands/models.py +62 -0
  335. agentpool_commands/prompts.py +78 -0
  336. agentpool_commands/py.typed +0 -0
  337. agentpool_commands/read.py +77 -0
  338. agentpool_commands/resources.py +210 -0
  339. agentpool_commands/session.py +48 -0
  340. agentpool_commands/tools.py +269 -0
  341. agentpool_commands/utils.py +189 -0
  342. agentpool_commands/workers.py +163 -0
  343. agentpool_config/__init__.py +53 -0
  344. agentpool_config/builtin_tools.py +265 -0
  345. agentpool_config/commands.py +237 -0
  346. agentpool_config/conditions.py +301 -0
  347. agentpool_config/converters.py +30 -0
  348. agentpool_config/durable.py +331 -0
  349. agentpool_config/event_handlers.py +600 -0
  350. agentpool_config/events.py +153 -0
  351. agentpool_config/forward_targets.py +251 -0
  352. agentpool_config/hook_conditions.py +331 -0
  353. agentpool_config/hooks.py +241 -0
  354. agentpool_config/jinja.py +206 -0
  355. agentpool_config/knowledge.py +41 -0
  356. agentpool_config/loaders.py +350 -0
  357. agentpool_config/mcp_server.py +243 -0
  358. agentpool_config/nodes.py +202 -0
  359. agentpool_config/observability.py +191 -0
  360. agentpool_config/output_types.py +55 -0
  361. agentpool_config/pool_server.py +267 -0
  362. agentpool_config/prompt_hubs.py +105 -0
  363. agentpool_config/prompts.py +185 -0
  364. agentpool_config/py.typed +0 -0
  365. agentpool_config/resources.py +33 -0
  366. agentpool_config/session.py +119 -0
  367. agentpool_config/skills.py +17 -0
  368. agentpool_config/storage.py +288 -0
  369. agentpool_config/system_prompts.py +190 -0
  370. agentpool_config/task.py +162 -0
  371. agentpool_config/teams.py +52 -0
  372. agentpool_config/tools.py +112 -0
  373. agentpool_config/toolsets.py +1033 -0
  374. agentpool_config/workers.py +86 -0
  375. agentpool_prompts/__init__.py +1 -0
  376. agentpool_prompts/braintrust_hub.py +235 -0
  377. agentpool_prompts/fabric.py +75 -0
  378. agentpool_prompts/langfuse_hub.py +79 -0
  379. agentpool_prompts/promptlayer_provider.py +59 -0
  380. agentpool_prompts/py.typed +0 -0
  381. agentpool_server/__init__.py +9 -0
  382. agentpool_server/a2a_server/__init__.py +5 -0
  383. agentpool_server/a2a_server/a2a_types.py +41 -0
  384. agentpool_server/a2a_server/server.py +190 -0
  385. agentpool_server/a2a_server/storage.py +81 -0
  386. agentpool_server/acp_server/__init__.py +22 -0
  387. agentpool_server/acp_server/acp_agent.py +786 -0
  388. agentpool_server/acp_server/acp_tools.py +43 -0
  389. agentpool_server/acp_server/commands/__init__.py +18 -0
  390. agentpool_server/acp_server/commands/acp_commands.py +594 -0
  391. agentpool_server/acp_server/commands/debug_commands.py +376 -0
  392. agentpool_server/acp_server/commands/docs_commands/__init__.py +39 -0
  393. agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +169 -0
  394. agentpool_server/acp_server/commands/docs_commands/get_schema.py +176 -0
  395. agentpool_server/acp_server/commands/docs_commands/get_source.py +110 -0
  396. agentpool_server/acp_server/commands/docs_commands/git_diff.py +111 -0
  397. agentpool_server/acp_server/commands/docs_commands/helpers.py +33 -0
  398. agentpool_server/acp_server/commands/docs_commands/url_to_markdown.py +90 -0
  399. agentpool_server/acp_server/commands/spawn.py +210 -0
  400. agentpool_server/acp_server/converters.py +235 -0
  401. agentpool_server/acp_server/input_provider.py +338 -0
  402. agentpool_server/acp_server/server.py +288 -0
  403. agentpool_server/acp_server/session.py +969 -0
  404. agentpool_server/acp_server/session_manager.py +313 -0
  405. agentpool_server/acp_server/syntax_detection.py +250 -0
  406. agentpool_server/acp_server/zed_tools.md +90 -0
  407. agentpool_server/aggregating_server.py +309 -0
  408. agentpool_server/agui_server/__init__.py +11 -0
  409. agentpool_server/agui_server/server.py +128 -0
  410. agentpool_server/base.py +189 -0
  411. agentpool_server/http_server.py +164 -0
  412. agentpool_server/mcp_server/__init__.py +6 -0
  413. agentpool_server/mcp_server/server.py +314 -0
  414. agentpool_server/mcp_server/zed_wrapper.py +110 -0
  415. agentpool_server/openai_api_server/__init__.py +5 -0
  416. agentpool_server/openai_api_server/completions/__init__.py +1 -0
  417. agentpool_server/openai_api_server/completions/helpers.py +81 -0
  418. agentpool_server/openai_api_server/completions/models.py +98 -0
  419. agentpool_server/openai_api_server/responses/__init__.py +1 -0
  420. agentpool_server/openai_api_server/responses/helpers.py +74 -0
  421. agentpool_server/openai_api_server/responses/models.py +96 -0
  422. agentpool_server/openai_api_server/server.py +242 -0
  423. agentpool_server/py.typed +0 -0
  424. agentpool_storage/__init__.py +9 -0
  425. agentpool_storage/base.py +310 -0
  426. agentpool_storage/file_provider.py +378 -0
  427. agentpool_storage/formatters.py +129 -0
  428. agentpool_storage/memory_provider.py +396 -0
  429. agentpool_storage/models.py +108 -0
  430. agentpool_storage/py.typed +0 -0
  431. agentpool_storage/session_store.py +262 -0
  432. agentpool_storage/sql_provider/__init__.py +21 -0
  433. agentpool_storage/sql_provider/cli.py +146 -0
  434. agentpool_storage/sql_provider/models.py +249 -0
  435. agentpool_storage/sql_provider/queries.py +15 -0
  436. agentpool_storage/sql_provider/sql_provider.py +444 -0
  437. agentpool_storage/sql_provider/utils.py +234 -0
  438. agentpool_storage/text_log_provider.py +275 -0
  439. agentpool_toolsets/__init__.py +15 -0
  440. agentpool_toolsets/builtin/__init__.py +33 -0
  441. agentpool_toolsets/builtin/agent_management.py +239 -0
  442. agentpool_toolsets/builtin/chain.py +288 -0
  443. agentpool_toolsets/builtin/code.py +398 -0
  444. agentpool_toolsets/builtin/debug.py +291 -0
  445. agentpool_toolsets/builtin/execution_environment.py +381 -0
  446. agentpool_toolsets/builtin/file_edit/__init__.py +11 -0
  447. agentpool_toolsets/builtin/file_edit/file_edit.py +747 -0
  448. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/__init__.py +5 -0
  449. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/example_usage.py +311 -0
  450. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/streaming_fuzzy_matcher.py +443 -0
  451. agentpool_toolsets/builtin/history.py +36 -0
  452. agentpool_toolsets/builtin/integration.py +85 -0
  453. agentpool_toolsets/builtin/skills.py +77 -0
  454. agentpool_toolsets/builtin/subagent_tools.py +324 -0
  455. agentpool_toolsets/builtin/tool_management.py +90 -0
  456. agentpool_toolsets/builtin/user_interaction.py +52 -0
  457. agentpool_toolsets/builtin/workers.py +128 -0
  458. agentpool_toolsets/composio_toolset.py +96 -0
  459. agentpool_toolsets/config_creation.py +192 -0
  460. agentpool_toolsets/entry_points.py +47 -0
  461. agentpool_toolsets/fsspec_toolset/__init__.py +7 -0
  462. agentpool_toolsets/fsspec_toolset/diagnostics.py +115 -0
  463. agentpool_toolsets/fsspec_toolset/grep.py +450 -0
  464. agentpool_toolsets/fsspec_toolset/helpers.py +631 -0
  465. agentpool_toolsets/fsspec_toolset/streaming_diff_parser.py +249 -0
  466. agentpool_toolsets/fsspec_toolset/toolset.py +1384 -0
  467. agentpool_toolsets/mcp_run_toolset.py +61 -0
  468. agentpool_toolsets/notifications.py +146 -0
  469. agentpool_toolsets/openapi.py +118 -0
  470. agentpool_toolsets/py.typed +0 -0
  471. agentpool_toolsets/search_toolset.py +202 -0
  472. agentpool_toolsets/semantic_memory_toolset.py +536 -0
  473. agentpool_toolsets/streaming_tools.py +265 -0
  474. agentpool_toolsets/vfs_toolset.py +124 -0
@@ -0,0 +1,250 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Literal, assert_never, overload
4
+
5
+ from upathtools import AsyncUPath, UnionFileSystem, list_files, read_folder, read_path
6
+
7
+ from agentpool.log import get_logger
8
+ from agentpool.utils.baseregistry import AgentPoolError
9
+
10
+
11
+ if TYPE_CHECKING:
12
+ from collections.abc import Iterator
13
+
14
+ from fsspec import AbstractFileSystem
15
+ from upathtools import AsyncUPath, UPath
16
+
17
+ from agentpool.models.manifest import ResourceConfig
18
+
19
+
20
+ logger = get_logger(__name__)
21
+
22
+
23
+ class VFSRegistry:
24
+ """Registry for virtual filesystems built on UnionFileSystem."""
25
+
26
+ def __init__(self) -> None:
27
+ """Initialize empty VFS registry."""
28
+ self._union_fs = UnionFileSystem({})
29
+ logger.debug("Initialized VFS registry")
30
+
31
+ def __contains__(self, name: str) -> bool:
32
+ """Check if a resource is registered."""
33
+ return name in self._union_fs.filesystems
34
+
35
+ def __len__(self) -> int:
36
+ """Get number of registered resources."""
37
+ return len(self._union_fs.filesystems)
38
+
39
+ def __iter__(self) -> Iterator[str]:
40
+ """Iterate over registered resource names."""
41
+ return iter(self._union_fs.filesystems)
42
+
43
+ @property
44
+ def is_empty(self) -> bool:
45
+ """Check if registry has any resources."""
46
+ return len(self._union_fs.filesystems) == 0
47
+
48
+ def register(self, name: str, fs: AbstractFileSystem | str, *, replace: bool = False) -> None:
49
+ """Register a filesystem resource.
50
+
51
+ Args:
52
+ name: Resource name to use as mount point
53
+ fs: Filesystem instance or URI string
54
+ replace: Whether to replace existing resource
55
+
56
+ Raises:
57
+ ValueError: If resource exists and replace=False
58
+ """
59
+ logger.debug("Registering resource", name=name, type=type(fs).__name__)
60
+ try:
61
+ self._union_fs.register(name, fs, replace=replace)
62
+ except ValueError as e:
63
+ raise AgentPoolError(str(e)) from e
64
+
65
+ def unregister(self, name: str) -> None:
66
+ """Unregister a filesystem resource.
67
+
68
+ Args:
69
+ name: Resource name to remove
70
+
71
+ Raises:
72
+ AgentPoolError: If resource doesn't exist
73
+ """
74
+ logger.debug("Unregistering resource", name=name)
75
+ try:
76
+ self._union_fs.unregister(name)
77
+ except ValueError as e:
78
+ raise AgentPoolError(str(e)) from e
79
+
80
+ def register_from_config(self, name: str, config: ResourceConfig) -> AbstractFileSystem:
81
+ """Register a resource from configuration.
82
+
83
+ Args:
84
+ name: Resource name
85
+ config: Resource configuration
86
+
87
+ Returns:
88
+ The registered filesystem instance
89
+ """
90
+ from upathtools.configs.base import FileSystemConfig, URIFileSystemConfig
91
+
92
+ match config:
93
+ case str() as uri:
94
+ fs_config = URIFileSystemConfig(uri=uri)
95
+ fs = fs_config.create_fs()
96
+ case FileSystemConfig():
97
+ fs = config.create_fs()
98
+ case _ as unreachable:
99
+ assert_never(unreachable)
100
+
101
+ self.register(name, fs)
102
+ return fs
103
+
104
+ def list_resources(self) -> list[str]:
105
+ """List all registered resource names."""
106
+ return self._union_fs.list_mount_points()
107
+
108
+ def get_fs(self) -> UnionFileSystem:
109
+ """Get unified filesystem view of all resources."""
110
+ return self._union_fs
111
+
112
+ @overload
113
+ def get_upath(
114
+ self, resource_name: str | None = None, *, as_async: Literal[True]
115
+ ) -> AsyncUPath: ...
116
+
117
+ @overload
118
+ def get_upath(
119
+ self, resource_name: str | None = None, *, as_async: Literal[False] = False
120
+ ) -> UPath: ...
121
+
122
+ @overload
123
+ def get_upath(
124
+ self, resource_name: str | None = None, *, as_async: bool = False
125
+ ) -> UPath | AsyncUPath: ...
126
+
127
+ def get_upath(
128
+ self, resource_name: str | None = None, *, as_async: bool = False
129
+ ) -> UPath | AsyncUPath:
130
+ """Get a UPath object for accessing resources.
131
+
132
+ Args:
133
+ resource_name: Specific resource or None for unified view
134
+ as_async: Whether to return AsyncUPath
135
+
136
+ Returns:
137
+ UPath or AsyncUPath instance
138
+ """
139
+ if resource_name is not None and resource_name not in self._union_fs.filesystems:
140
+ msg = f"Resource not found: {resource_name}"
141
+ raise AgentPoolError(msg)
142
+
143
+ return self._union_fs.get_upath(resource_name, as_async=as_async)
144
+
145
+ async def get_content(
146
+ self,
147
+ path: str,
148
+ encoding: str = "utf-8",
149
+ recursive: bool = True,
150
+ exclude: list[str] | None = None,
151
+ max_depth: int | None = None,
152
+ ) -> str:
153
+ """Get content from a resource as text.
154
+
155
+ Args:
156
+ path: Path to read, either:
157
+ - resource (whole resource)
158
+ - resource/file.txt (single file)
159
+ - resource/folder (directory)
160
+ encoding: Text encoding for binary content
161
+ recursive: For directories, whether to read recursively
162
+ exclude: For directories, patterns to exclude
163
+ max_depth: For directories, maximum depth to read
164
+
165
+ Returns:
166
+ For files: file content
167
+ For directories: concatenated content of all files
168
+ """
169
+ # Normalize path - ensure it has resource prefix
170
+ if "/" not in path:
171
+ path = f"{path}/"
172
+
173
+ if await self._union_fs._isdir(path):
174
+ content_dict = await read_folder(
175
+ self._union_fs.get_upath(path),
176
+ encoding=encoding,
177
+ recursive=recursive,
178
+ exclude=exclude,
179
+ max_depth=max_depth,
180
+ )
181
+ # Combine all files with headers
182
+ sections = []
183
+ for rel_path, content in sorted(content_dict.items()):
184
+ sections.extend([f"--- {rel_path} ---", content, ""])
185
+ return "\n".join(sections)
186
+
187
+ return await read_path(self._union_fs.get_upath(path), encoding=encoding)
188
+
189
+ async def query(
190
+ self,
191
+ path: str,
192
+ pattern: str = "**/*",
193
+ *,
194
+ recursive: bool = True,
195
+ include_dirs: bool = False,
196
+ exclude: list[str] | None = None,
197
+ max_depth: int | None = None,
198
+ ) -> list[str]:
199
+ """Query contents of a resource or subfolder.
200
+
201
+ Args:
202
+ path: Path to query, either:
203
+ - resource (queries whole resource)
204
+ - resource/subfolder (queries specific folder)
205
+ pattern: Glob pattern to match files against
206
+ recursive: Whether to search subdirectories
207
+ include_dirs: Whether to include directories in results
208
+ exclude: List of patterns to exclude
209
+ max_depth: Maximum directory depth for recursive search
210
+
211
+ Example:
212
+ # Query whole resource
213
+ files = await registry.query("docs")
214
+
215
+ # Query specific subfolder
216
+ files = await registry.query("docs/guides", pattern="*.md")
217
+ """
218
+ # Normalize path - ensure it has resource prefix
219
+ if "/" not in path:
220
+ path = f"{path}/"
221
+
222
+ resource = path.split("/")[0]
223
+ if resource not in self:
224
+ msg = f"Resource not found: {resource}"
225
+ raise AgentPoolError(msg)
226
+
227
+ files = await list_files(
228
+ self._union_fs.get_upath(path),
229
+ pattern=pattern,
230
+ recursive=recursive,
231
+ include_dirs=include_dirs,
232
+ exclude=exclude,
233
+ max_depth=max_depth,
234
+ )
235
+ return [str(p) for p in files]
236
+
237
+ def reset(self) -> None:
238
+ """Reset registry to empty state."""
239
+ logger.debug("Resetting VFS registry")
240
+ self._union_fs = UnionFileSystem({})
241
+
242
+
243
+ if __name__ == "__main__":
244
+ from fsspec.implementations.memory import MemoryFileSystem
245
+
246
+ registry = VFSRegistry()
247
+ fs1 = MemoryFileSystem()
248
+ registry.register("test", fs1)
249
+ union = registry.get_fs()
250
+ print(union.ls(""))
@@ -0,0 +1,336 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentpool
3
+ Version: 2.1.9
4
+ Summary: Pydantic-AI based Multi-Agent Framework with YAML-based Agents, Teams, Workflows & Extended ACP / AGUI integration
5
+ Keywords:
6
+ Author: Philipp Temminghoff
7
+ Author-email: Philipp Temminghoff <philipptemminghoff@googlemail.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Framework :: Pydantic
12
+ Classifier: Framework :: Pydantic :: 2
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Documentation
21
+ Classifier: Topic :: Internet
22
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
+ Classifier: Topic :: Software Development
24
+ Classifier: Topic :: Utilities
25
+ Classifier: Typing :: Typed
26
+ Requires-Dist: anyenv[httpx]>=0.3.0
27
+ Requires-Dist: docler>=1.0.3
28
+ Requires-Dist: docstring-parser>=0.17.0
29
+ Requires-Dist: epregistry
30
+ Requires-Dist: evented>=1.0.5
31
+ Requires-Dist: exxec>=0.1.0
32
+ Requires-Dist: fastmcp>=2.12.4
33
+ Requires-Dist: fsspec
34
+ Requires-Dist: httpx
35
+ Requires-Dist: jinja2
36
+ Requires-Dist: jinjarope
37
+ Requires-Dist: llmling-models>=1.4.1
38
+ Requires-Dist: logfire
39
+ Requires-Dist: mcp>=1.2.0
40
+ Requires-Dist: platformdirs
41
+ Requires-Dist: promptantic>=0.4.5
42
+ Requires-Dist: psygnal>=0.11.1
43
+ Requires-Dist: pydantic>=2.10.0
44
+ Requires-Dist: pydantic-ai-slim>=1.0.0
45
+ Requires-Dist: pydocket==0.16.1
46
+ Requires-Dist: python-dotenv>=1.0.1
47
+ Requires-Dist: rich
48
+ Requires-Dist: schemez[codegen]
49
+ Requires-Dist: searchly[all]>=2.0.1
50
+ Requires-Dist: slashed>=0.1.0
51
+ Requires-Dist: sqlalchemy[aiosqlite]
52
+ Requires-Dist: sqlmodel>=0.0.22
53
+ Requires-Dist: structlog>=25.5.0
54
+ Requires-Dist: tokonomics>=0.1.2
55
+ Requires-Dist: toprompt>=0.0.1
56
+ Requires-Dist: typer
57
+ Requires-Dist: upathtools>=0.1.0
58
+ Requires-Dist: yamling>=2.0.2
59
+ Requires-Dist: fasta2a ; extra == 'a2a'
60
+ Requires-Dist: starlette ; extra == 'a2a'
61
+ Requires-Dist: ag-ui-protocol>=0.1.10 ; extra == 'ag-ui'
62
+ Requires-Dist: braintrust ; extra == 'braintrust'
63
+ Requires-Dist: autoevals ; extra == 'braintrust'
64
+ Requires-Dist: claude-agent-sdk>=0.1.18 ; extra == 'claude'
65
+ Requires-Dist: clipman ; extra == 'clipboard'
66
+ Requires-Dist: rustworkx>=0.17.1 ; extra == 'coding'
67
+ Requires-Dist: grep-ast ; extra == 'coding'
68
+ Requires-Dist: ast-grep-py>=0.40.0 ; extra == 'coding'
69
+ Requires-Dist: tree-sitter>=0.25.2 ; extra == 'coding'
70
+ Requires-Dist: tree-sitter-python>=0.25.0 ; extra == 'coding'
71
+ Requires-Dist: tree-sitter-c>=0.24.1 ; extra == 'coding'
72
+ Requires-Dist: tree-sitter-javascript>=0.25.0 ; extra == 'coding'
73
+ Requires-Dist: tree-sitter>=0.25.2 ; extra == 'coding'
74
+ Requires-Dist: tree-sitter-typescript>=0.23.0 ; extra == 'coding'
75
+ Requires-Dist: tree-sitter-cpp>=0.23.0 ; extra == 'coding'
76
+ Requires-Dist: tree-sitter-rust>=0.23.0 ; extra == 'coding'
77
+ Requires-Dist: tree-sitter-go>=0.23.0 ; extra == 'coding'
78
+ Requires-Dist: tree-sitter-json>=0.24.0 ; extra == 'coding'
79
+ Requires-Dist: tree-sitter-yaml>=0.6.0 ; extra == 'coding'
80
+ Requires-Dist: composio ; extra == 'composio'
81
+ Requires-Dist: pydantic-ai-slim[openai,google,anthropic,mistral,retries]>=1.0.0 ; extra == 'default'
82
+ Requires-Dist: evented[all] ; extra == 'events'
83
+ Requires-Dist: fsspec[git] ; extra == 'git'
84
+ Requires-Dist: langfuse ; extra == 'langfuse'
85
+ Requires-Dist: markitdown ; python_full_version < '3.14' and extra == 'markitdown'
86
+ Requires-Dist: mcpx-py>=0.7.0 ; extra == 'mcp-run'
87
+ Requires-Dist: typeagent>=0.3.3 ; extra == 'memory'
88
+ Requires-Dist: apprise>=1.9.5 ; extra == 'notifications'
89
+ Requires-Dist: keyring>=25.6.0 ; extra == 'oauth'
90
+ Requires-Dist: promptlayer ; extra == 'promptlayer'
91
+ Requires-Dist: logfire[fastapi] ; extra == 'server'
92
+ Requires-Dist: fastapi ; extra == 'server'
93
+ Requires-Dist: uvicorn[standard] ; extra == 'server'
94
+ Requires-Dist: textual>=1.0.0 ; extra == 'textual'
95
+ Requires-Dist: tiktoken ; extra == 'tiktoken'
96
+ Requires-Dist: anyvoice[tts-edge,openai]>=0.0.2 ; extra == 'tts'
97
+ Requires-Python: >=3.13
98
+ Project-URL: Code coverage, https://app.codecov.io/gh/phil65/agentpool
99
+ Project-URL: Discussions, https://github.com/phil65/agentpool/discussions
100
+ Project-URL: Documentation, https://phil65.github.io/agentpool/
101
+ Project-URL: Issues, https://github.com/phil65/agentpool/issues
102
+ Project-URL: Source, https://github.com/phil65/agentpool
103
+ Provides-Extra: a2a
104
+ Provides-Extra: ag-ui
105
+ Provides-Extra: braintrust
106
+ Provides-Extra: claude
107
+ Provides-Extra: clipboard
108
+ Provides-Extra: coding
109
+ Provides-Extra: composio
110
+ Provides-Extra: default
111
+ Provides-Extra: events
112
+ Provides-Extra: git
113
+ Provides-Extra: langfuse
114
+ Provides-Extra: markitdown
115
+ Provides-Extra: mcp-run
116
+ Provides-Extra: memory
117
+ Provides-Extra: notifications
118
+ Provides-Extra: oauth
119
+ Provides-Extra: promptlayer
120
+ Provides-Extra: server
121
+ Provides-Extra: textual
122
+ Provides-Extra: tiktoken
123
+ Provides-Extra: tts
124
+ Description-Content-Type: text/markdown
125
+
126
+ # AgentPool
127
+
128
+ [![PyPI License](https://img.shields.io/pypi/l/agentpool.svg)](https://pypi.org/project/agentpool/)
129
+ [![Package status](https://img.shields.io/pypi/status/agentpool.svg)](https://pypi.org/project/agentpool/)
130
+ [![Monthly downloads](https://img.shields.io/pypi/dm/agentpool.svg)](https://pypi.org/project/agentpool/)
131
+ [![Python version](https://img.shields.io/pypi/pyversions/agentpool.svg)](https://pypi.org/project/agentpool/)
132
+ [![Github Stars](https://img.shields.io/github/stars/phil65/agentpool)](https://github.com/phil65/agentpool/stars)
133
+
134
+ **A unified agent orchestration hub that lets you configure and manage heterogeneous AI agents via YAML and expose them through standardized protocols.**
135
+
136
+ [Documentation](https://phil65.github.io/agentpool/)
137
+
138
+ ## The Problem
139
+
140
+ You want to use multiple AI agents together - Claude Code for refactoring, a custom analysis agent, maybe Goose for specific tasks. But each has different APIs, protocols, and integration patterns. Coordinating them means writing glue code for each combination.
141
+
142
+ ## The Solution
143
+
144
+ AgentPool acts as a protocol bridge. Define all your agents in one YAML file - whether they're native (PydanticAI-based), external ACP agents (Claude Code, Codex, Goose), or AG-UI agents. Then expose them all through ACP or AG-UI protocols, letting them cooperate, delegate, and communicate through a unified interface.
145
+
146
+ ```mermaid
147
+ flowchart TB
148
+ subgraph AgentPool
149
+ subgraph config[YAML Configuration]
150
+ native[Native Agents<br/>PydanticAI]
151
+ acp_agents[ACP Agents<br/>Claude Code, Goose, Codex]
152
+ agui_agents[AG-UI Agents]
153
+ workflows[Teams & Workflows]
154
+ end
155
+
156
+ subgraph interface[Unified Agent Interface]
157
+ delegation[Inter-agent delegation]
158
+ routing[Message routing]
159
+ context[Shared context]
160
+ end
161
+
162
+ config --> interface
163
+ end
164
+
165
+ interface --> acp_server[ACP Server]
166
+ interface --> agui_server[AG-UI Server]
167
+
168
+ acp_server --> clients1[Zed, Toad, ACP Clients]
169
+ agui_server --> clients2[AG-UI Clients]
170
+ ```
171
+
172
+ ## Quick Start
173
+
174
+ ```bash
175
+ uv tool install agentpool[default]
176
+ ```
177
+
178
+ ### Minimal Configuration
179
+
180
+ ```yaml
181
+ # agents.yml
182
+ agents:
183
+ assistant:
184
+ type: native
185
+ model: openai:gpt-4o
186
+ system_prompt: "You are a helpful assistant."
187
+ ```
188
+
189
+ ```bash
190
+ # Run via CLI
191
+ agentpool run assistant "Hello!"
192
+
193
+ # Or start as ACP server (for Zed, Toad, etc.)
194
+ agentpool serve-acp agents.yml
195
+ ```
196
+
197
+ ### Integrating External Agents
198
+
199
+ The real power comes from mixing agent types:
200
+
201
+ ```yaml
202
+ agents:
203
+ # Native PydanticAI-based agent
204
+ coordinator:
205
+ type: native
206
+ model: openai:gpt-4o
207
+ toolsets:
208
+ - type: subagent # Can delegate to all other agents
209
+ system_prompt: "Coordinate tasks between available agents."
210
+
211
+ # Claude Code agent (direct integration)
212
+ claude:
213
+ type: claude
214
+ description: "Claude Code for complex refactoring"
215
+
216
+ # ACP protocol agents
217
+ goose:
218
+ type: acp
219
+ provider: goose
220
+ description: "Goose for file operations"
221
+
222
+ codex:
223
+ type: acp
224
+ provider: codex
225
+ description: "OpenAI Codex agent"
226
+
227
+ # AG-UI protocol agent
228
+ agui_agent:
229
+ type: agui
230
+ url: "http://localhost:8000"
231
+ description: "Custom AG-UI agent"
232
+ ```
233
+
234
+ Now `coordinator` can delegate work to any of these agents, and all are accessible through the same interface.
235
+
236
+ ## Key Features
237
+
238
+ ### Multi-Agent Coordination
239
+
240
+ Agents can form teams (parallel) or chains (sequential):
241
+
242
+ ```yaml
243
+ teams:
244
+ review_pipeline:
245
+ mode: sequential
246
+ members: [analyzer, reviewer, formatter]
247
+
248
+ parallel_coders:
249
+ mode: parallel
250
+ members: [claude, goose]
251
+ ```
252
+
253
+ ```python
254
+ async with AgentPool("agents.yml") as pool:
255
+ # Parallel execution
256
+ team = pool.get_agent("analyzer") & pool.get_agent("reviewer")
257
+ results = await team.run("Review this code")
258
+
259
+ # Sequential pipeline
260
+ chain = analyzer | reviewer | formatter
261
+ result = await chain.run("Process this")
262
+ ```
263
+
264
+ ### Rich YAML Configuration
265
+
266
+ Everything is configurable - models, tools, connections, triggers, storage:
267
+
268
+ ```yaml
269
+ agents:
270
+ analyzer:
271
+ type: native
272
+ model:
273
+ type: fallback
274
+ models: [openai:gpt-4o, anthropic:claude-sonnet-4-0]
275
+ toolsets:
276
+ - type: subagent
277
+ - type: resource_access
278
+ mcp_servers:
279
+ - "uvx mcp-server-filesystem"
280
+ knowledge:
281
+ paths: ["docs/**/*.md"]
282
+ connections:
283
+ - type: node
284
+ name: reporter
285
+ filter_condition:
286
+ type: word_match
287
+ words: [error, warning]
288
+ ```
289
+
290
+ ### Protocol Support
291
+
292
+ - **MCP**: Full support including elicitation, sampling, progress reporting
293
+ - **ACP**: Serve agents to Zed, Toad, and other ACP clients
294
+ - **AG-UI**: Expose agents through AG-UI protocol
295
+
296
+ ### Additional Capabilities
297
+
298
+ - **Structured Output**: Define response schemas inline or import Python types
299
+ - **Storage & Analytics**: Track all interactions with configurable providers
300
+ - **File Abstraction**: UPath-backed operations work on local and remote sources
301
+ - **Triggers**: React to file changes, webhooks, or custom events
302
+ - **Streaming TTS**: Voice output support for all agents
303
+
304
+ ## Usage Patterns
305
+
306
+ ### CLI
307
+
308
+ ```bash
309
+ agentpool run agent_name "prompt" # Single run
310
+ agentpool serve-acp config.yml # Start ACP server
311
+ agentpool watch --config agents.yml # React to triggers
312
+ agentpool history stats --group-by model # View analytics
313
+ ```
314
+
315
+ ### Programmatic
316
+
317
+ ```python
318
+ from agentpool import AgentPool
319
+
320
+ async with AgentPool("agents.yml") as pool:
321
+ agent = pool.get_agent("assistant")
322
+
323
+ # Simple run
324
+ result = await agent.run("Hello")
325
+
326
+ # Streaming
327
+ async for event in agent.run_stream("Tell me a story"):
328
+ print(event)
329
+
330
+ # Multi-modal
331
+ result = await agent.run("Describe this", Path("image.jpg"))
332
+ ```
333
+
334
+ ## Documentation
335
+
336
+ For complete documentation including advanced configuration, connection patterns, and API reference, visit [phil65.github.io/agentpool](https://phil65.github.io/agentpool/).