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,42 @@
1
+ """Filtering resource provider implementation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from agentpool.resource_providers import ResourceProvider
8
+
9
+
10
+ if TYPE_CHECKING:
11
+ from agentpool.tools.base import Tool
12
+
13
+
14
+ class FilteringResourceProvider(ResourceProvider):
15
+ """Wrapper that filters tools from a ResourceProvider based on tool name filter."""
16
+
17
+ def __init__(
18
+ self,
19
+ provider: ResourceProvider,
20
+ tool_filter: dict[str, bool],
21
+ ) -> None:
22
+ """Initialize filtering wrapper.
23
+
24
+ Args:
25
+ provider: The provider to wrap
26
+ tool_filter: Dict mapping tool names to enabled state (defaults to True)
27
+ """
28
+ self._provider = provider
29
+ self._tool_filter = tool_filter
30
+
31
+ def __getattr__(self, name: str) -> Any:
32
+ """Delegate attribute access to wrapped provider."""
33
+ return getattr(self._provider, name)
34
+
35
+ async def get_tools(self) -> list[Tool]:
36
+ """Get filtered tools from wrapped provider.
37
+
38
+ Returns only tools where the filter value is True. Tools not in the filter
39
+ default to enabled (True).
40
+ """
41
+ tools = await self._provider.get_tools()
42
+ return [t for t in tools if self._tool_filter.get(t.name, True)]
@@ -0,0 +1,246 @@
1
+ """Tool management for AgentPool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ from contextlib import AsyncExitStack
7
+ from typing import TYPE_CHECKING, Any, Self
8
+
9
+ from agentpool.log import get_logger
10
+ from agentpool.resource_providers import ResourceProvider
11
+ from agentpool_config.mcp_server import BaseMCPServerConfig
12
+ from agentpool_config.resources import ResourceInfo
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ from typing import Literal
17
+
18
+ from fastmcp.client.sampling import SamplingHandler
19
+
20
+ from agentpool.prompts.prompts import MCPClientPrompt
21
+ from agentpool.tools.base import Tool
22
+ from agentpool_config.mcp_server import MCPServerConfig
23
+
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ class MCPResourceProvider(ResourceProvider):
29
+ """Resource provider for a single MCP server."""
30
+
31
+ def __init__(
32
+ self,
33
+ server: MCPServerConfig | str,
34
+ name: str = "mcp",
35
+ owner: str | None = None,
36
+ source: Literal["pool", "node"] = "node",
37
+ sampling_callback: SamplingHandler[Any, Any] | None = None,
38
+ accessible_roots: list[str] | None = None,
39
+ ) -> None:
40
+ from agentpool.mcp_server import MCPClient
41
+
42
+ super().__init__(name, owner=owner)
43
+ self.server = BaseMCPServerConfig.from_string(server) if isinstance(server, str) else server
44
+ self.source = source
45
+ self.exit_stack = AsyncExitStack()
46
+ self._accessible_roots = accessible_roots
47
+ self._sampling_callback = sampling_callback
48
+
49
+ # Tool caching
50
+ self._tools_cache: list[Tool] | None = None
51
+ self._saved_enabled_states: dict[str, bool] = {}
52
+
53
+ # Prompt caching
54
+ self._prompts_cache: list[MCPClientPrompt] | None = None
55
+
56
+ # Resource caching
57
+ self._resources_cache: list[ResourceInfo] | None = None
58
+
59
+ self.client = MCPClient(
60
+ config=self.server,
61
+ sampling_callback=self._sampling_callback,
62
+ accessible_roots=self._accessible_roots,
63
+ tool_change_callback=self._on_tools_changed,
64
+ prompt_change_callback=self._on_prompts_changed,
65
+ resource_change_callback=self._on_resources_changed,
66
+ )
67
+
68
+ def __repr__(self) -> str:
69
+ return f"MCPResourceProvider({self.server!r}, source={self.source!r})"
70
+
71
+ async def __aenter__(self) -> Self:
72
+ try:
73
+ await self.exit_stack.enter_async_context(self.client)
74
+ except Exception as e:
75
+ # Clean up in case of error
76
+ await self.__aexit__(type(e), e, e.__traceback__)
77
+ msg = "Failed to initialize MCP manager"
78
+ raise RuntimeError(msg) from e
79
+
80
+ return self
81
+
82
+ async def __aexit__(self, *args: object) -> None:
83
+ try:
84
+ try:
85
+ # Clean up exit stack (which includes MCP clients)
86
+ await self.exit_stack.aclose()
87
+ except RuntimeError as e:
88
+ if "different task" in str(e):
89
+ # Handle task context mismatch
90
+ current_task = asyncio.current_task()
91
+ if current_task:
92
+ loop = asyncio.get_running_loop()
93
+ await loop.create_task(self.exit_stack.aclose())
94
+ else:
95
+ raise
96
+
97
+ except Exception as e:
98
+ msg = "Error during MCP manager cleanup"
99
+ logger.exception(msg, exc_info=e)
100
+ raise RuntimeError(msg) from e
101
+
102
+ async def _on_tools_changed(self) -> None:
103
+ """Callback when tools change on the MCP server."""
104
+ logger.info("MCP tool list changed, refreshing provider cache")
105
+ self._saved_enabled_states = {t.name: t.enabled for t in self._tools_cache or []}
106
+ self._tools_cache = None
107
+
108
+ async def _on_prompts_changed(self) -> None:
109
+ """Callback when prompts change on the MCP server."""
110
+ logger.info("MCP prompt list changed, refreshing provider cache")
111
+ self._prompts_cache = None
112
+
113
+ async def _on_resources_changed(self) -> None:
114
+ """Callback when resources change on the MCP server."""
115
+ logger.info("MCP resource list changed, refreshing provider cache")
116
+ self._resources_cache = None
117
+
118
+ async def refresh_tools_cache(self) -> None:
119
+ """Refresh the tools cache by fetching from client."""
120
+ try:
121
+ # Get fresh tools from client
122
+ mcp_tools = await self.client.list_tools()
123
+ all_tools: list[Tool] = []
124
+
125
+ for tool in mcp_tools:
126
+ try:
127
+ tool_info = self.client.convert_tool(tool)
128
+ all_tools.append(tool_info)
129
+ except Exception:
130
+ logger.exception("Failed to create MCP tool", name=tool.name)
131
+ continue
132
+
133
+ # Restore enabled states from saved states
134
+ for tool_info in all_tools:
135
+ if tool_info.name in self._saved_enabled_states:
136
+ tool_info.enabled = self._saved_enabled_states[tool_info.name]
137
+
138
+ self._tools_cache = all_tools
139
+ logger.debug("Refreshed MCP tools cache", num_tools=len(all_tools))
140
+ except Exception:
141
+ logger.exception("Failed to refresh MCP tools cache")
142
+ self._tools_cache = []
143
+
144
+ async def get_tools(self) -> list[Tool]:
145
+ """Get cached tools, refreshing if necessary."""
146
+ if self._tools_cache is None:
147
+ await self.refresh_tools_cache()
148
+
149
+ return self._tools_cache or []
150
+
151
+ async def refresh_prompts_cache(self) -> None:
152
+ """Refresh the prompts cache by fetching from client."""
153
+ from agentpool.prompts.prompts import MCPClientPrompt
154
+
155
+ try:
156
+ result = await self.client.list_prompts()
157
+ all_prompts: list[MCPClientPrompt] = []
158
+
159
+ for prompt in result:
160
+ try:
161
+ converted = MCPClientPrompt.from_fastmcp(self.client, prompt)
162
+ all_prompts.append(converted)
163
+ except Exception:
164
+ logger.exception("Failed to convert prompt", name=prompt.name)
165
+ continue
166
+
167
+ self._prompts_cache = all_prompts
168
+ logger.debug("Refreshed MCP prompts cache", num_prompts=len(all_prompts))
169
+ except Exception:
170
+ logger.exception("Failed to refresh MCP prompts cache")
171
+ self._prompts_cache = []
172
+
173
+ async def get_prompts(self) -> list[MCPClientPrompt]: # type: ignore
174
+ """Get cached prompts, refreshing if necessary."""
175
+ if self._prompts_cache is None:
176
+ await self.refresh_prompts_cache()
177
+
178
+ return self._prompts_cache or []
179
+
180
+ async def refresh_resources_cache(self) -> None:
181
+ """Refresh the resources cache by fetching from client."""
182
+ try:
183
+ result = await self.client.list_resources()
184
+ all_resources: list[ResourceInfo] = []
185
+
186
+ for resource in result:
187
+ try:
188
+ converted = await ResourceInfo.from_mcp_resource(resource)
189
+ all_resources.append(converted)
190
+ except Exception:
191
+ logger.exception("Failed to convert resource", name=resource.name)
192
+ continue
193
+
194
+ self._resources_cache = all_resources
195
+ logger.debug("Refreshed MCP resources cache", num_resources=len(all_resources))
196
+ except Exception:
197
+ logger.exception("Failed to refresh MCP resources cache")
198
+ self._resources_cache = []
199
+
200
+ async def get_resources(self) -> list[ResourceInfo]:
201
+ """Get cached resources, refreshing if necessary."""
202
+ if self._resources_cache is None:
203
+ await self.refresh_resources_cache()
204
+
205
+ return self._resources_cache or []
206
+
207
+
208
+ if __name__ == "__main__":
209
+ import anyio
210
+
211
+ from agentpool_config.mcp_server import StdioMCPServerConfig
212
+
213
+ cfg = StdioMCPServerConfig(
214
+ command="uv",
215
+ args=["run", "/home/phil65/dev/oss/agentpool/tests/mcp_server/server.py"],
216
+ )
217
+
218
+ async def main() -> None:
219
+ manager = MCPResourceProvider(cfg)
220
+ async with manager:
221
+ prompts = await manager.get_prompts()
222
+ print(f"Found prompts: {prompts}")
223
+
224
+ # Test static prompt (no arguments)
225
+ static_prompt = next(p for p in prompts if p.name == "static_prompt")
226
+ print(f"\n--- Testing static prompt: {static_prompt} ---")
227
+ components = await static_prompt.get_components()
228
+ assert components, "No prompt components found"
229
+ print(f"Found {len(components)} prompt components:")
230
+ for i, component in enumerate(components):
231
+ comp_type = type(component).__name__
232
+ print(f" {i + 1}. {comp_type}: {component.content}")
233
+
234
+ # Test dynamic prompt (with arguments)
235
+ dynamic_prompt = next(p for p in prompts if p.name == "dynamic_prompt")
236
+ print(f"\n--- Testing dynamic prompt: {dynamic_prompt} ---")
237
+ components = await dynamic_prompt.get_components(
238
+ arguments={"some_arg": "Hello, world!"}
239
+ )
240
+ assert components, "No prompt components found"
241
+ print(f"Found {len(components)} prompt components:")
242
+ for i, component in enumerate(components):
243
+ comp_type = type(component).__name__
244
+ print(f" {i + 1}. {comp_type}: {component.content}")
245
+
246
+ anyio.run(main)
@@ -0,0 +1,196 @@
1
+ """Plan provider for agent planning and task management."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from typing import TYPE_CHECKING, Literal
7
+
8
+ from agentpool.agents.context import AgentContext # noqa: TC001
9
+ from agentpool.resource_providers import ResourceProvider
10
+
11
+
12
+ if TYPE_CHECKING:
13
+ from agentpool.tools.base import Tool
14
+
15
+
16
+ # Plan entry types - domain models independent of ACP
17
+ PlanEntryPriority = Literal["high", "medium", "low"]
18
+ PlanEntryStatus = Literal["pending", "in_progress", "completed"]
19
+
20
+
21
+ @dataclass(kw_only=True)
22
+ class PlanEntry:
23
+ """A single entry in the execution plan.
24
+
25
+ Represents a task or goal that the assistant intends to accomplish
26
+ as part of fulfilling the user's request.
27
+ """
28
+
29
+ content: str
30
+ """Human-readable description of what this task aims to accomplish."""
31
+
32
+ priority: PlanEntryPriority
33
+ """The relative importance of this task."""
34
+
35
+ status: PlanEntryStatus
36
+ """Current execution status of this task."""
37
+
38
+
39
+ @dataclass(kw_only=True)
40
+ class PlanUpdateEvent:
41
+ """Event indicating plan state has changed."""
42
+
43
+ entries: list[PlanEntry]
44
+ """Current plan entries."""
45
+ event_kind: Literal["plan_update"] = "plan_update"
46
+ """Event type identifier."""
47
+
48
+
49
+ class PlanProvider(ResourceProvider):
50
+ """Provides plan-related tools for agent planning and task management.
51
+
52
+ This provider creates tools for managing agent plans and tasks,
53
+ emitting domain events that can be handled by protocol adapters.
54
+ """
55
+
56
+ def __init__(self) -> None:
57
+ """Initialize plan provider."""
58
+ super().__init__(name="plan")
59
+ self._current_plan: list[PlanEntry] = []
60
+
61
+ async def get_tools(self) -> list[Tool]:
62
+ """Get plan management tools."""
63
+ return [
64
+ self.create_tool(self.get_plan, category="read"),
65
+ self.create_tool(self.add_plan_entry, category="other"),
66
+ self.create_tool(self.update_plan_entry, category="edit"),
67
+ self.create_tool(self.remove_plan_entry, category="delete"),
68
+ ]
69
+
70
+ async def get_plan(self, agent_ctx: AgentContext) -> str:
71
+ """Get the current plan formatted as markdown.
72
+
73
+ Args:
74
+ agent_ctx: Agent execution context
75
+
76
+ Returns:
77
+ Markdown-formatted plan with all entries and their status
78
+ """
79
+ if not self._current_plan:
80
+ return "## Plan\n\n*No plan entries yet.*"
81
+
82
+ lines = ["## Plan", ""]
83
+ status_icons = {
84
+ "pending": "⬚",
85
+ "in_progress": "◐",
86
+ "completed": "✓",
87
+ }
88
+ priority_labels = {
89
+ "high": "🔴",
90
+ "medium": "🟡",
91
+ "low": "🟢",
92
+ }
93
+ for i, entry in enumerate(self._current_plan):
94
+ icon = status_icons.get(entry.status, "?")
95
+ priority = priority_labels.get(entry.priority, "")
96
+ lines.append(f"{i}. {icon} {priority} {entry.content} *({entry.status})*")
97
+
98
+ return "\n".join(lines)
99
+
100
+ async def add_plan_entry(
101
+ self,
102
+ agent_ctx: AgentContext,
103
+ content: str,
104
+ priority: PlanEntryPriority = "medium",
105
+ index: int | None = None,
106
+ ) -> str:
107
+ """Add a new plan entry.
108
+
109
+ Args:
110
+ agent_ctx: Agent execution context
111
+ content: Description of what this task aims to accomplish
112
+ priority: Relative importance (high/medium/low)
113
+ index: Optional position to insert at (default: append to end)
114
+
115
+ Returns:
116
+ Success message indicating entry was added
117
+ """
118
+ entry = PlanEntry(content=content, priority=priority, status="pending")
119
+ if index is None:
120
+ self._current_plan.append(entry)
121
+ entry_index = len(self._current_plan) - 1
122
+ else:
123
+ if index < 0 or index > len(self._current_plan):
124
+ return f"Error: Index {index} out of range (0-{len(self._current_plan)})"
125
+ self._current_plan.insert(index, entry)
126
+ entry_index = index
127
+
128
+ await self._emit_plan_update(agent_ctx)
129
+
130
+ return f"Added plan entry at index {entry_index}: {content!r} (priority={priority!r})"
131
+
132
+ async def update_plan_entry(
133
+ self,
134
+ agent_ctx: AgentContext,
135
+ index: int,
136
+ content: str | None = None,
137
+ status: PlanEntryStatus | None = None,
138
+ priority: PlanEntryPriority | None = None,
139
+ ) -> str:
140
+ """Update an existing plan entry.
141
+
142
+ Args:
143
+ agent_ctx: Agent execution context
144
+ index: Position of entry to update (0-based)
145
+ content: New task description
146
+ status: New execution status
147
+ priority: New priority level
148
+
149
+ Returns:
150
+ Success message indicating what was updated
151
+ """
152
+ if index < 0 or index >= len(self._current_plan):
153
+ return f"Error: Index {index} out of range (0-{len(self._current_plan) - 1})"
154
+
155
+ entry = self._current_plan[index]
156
+ updates = []
157
+
158
+ if content is not None:
159
+ entry.content = content
160
+ updates.append(f"content to {content!r}")
161
+
162
+ if status is not None:
163
+ entry.status = status
164
+ updates.append(f"status to {status!r}")
165
+
166
+ if priority is not None:
167
+ entry.priority = priority
168
+ updates.append(f"priority to {priority!r}")
169
+
170
+ if not updates:
171
+ return "No changes specified"
172
+
173
+ await self._emit_plan_update(agent_ctx)
174
+ return f"Updated entry {index}: {', '.join(updates)}"
175
+
176
+ async def remove_plan_entry(self, agent_ctx: AgentContext, index: int) -> str:
177
+ """Remove a plan entry.
178
+
179
+ Args:
180
+ agent_ctx: Agent execution context
181
+ index: Position of entry to remove (0-based)
182
+
183
+ Returns:
184
+ Success message indicating entry was removed
185
+ """
186
+ if index < 0 or index >= len(self._current_plan):
187
+ return f"Error: Index {index} out of range (0-{len(self._current_plan) - 1})"
188
+ removed_entry = self._current_plan.pop(index)
189
+ await self._emit_plan_update(agent_ctx)
190
+ if self._current_plan:
191
+ return f"Removed entry {index}: {removed_entry.content!r}, remaining entries reindexed"
192
+ return f"Removed entry {index}: {removed_entry.content!r}, plan is now empty"
193
+
194
+ async def _emit_plan_update(self, agent_ctx: AgentContext) -> None:
195
+ """Emit plan update event."""
196
+ await agent_ctx.events.plan_updated(self._current_plan)
@@ -0,0 +1,69 @@
1
+ """Resource provider exposing Nodes as tools."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from agentpool.log import get_logger
8
+ from agentpool.resource_providers import ResourceProvider
9
+
10
+
11
+ if TYPE_CHECKING:
12
+ from agentpool import AgentPool
13
+ from agentpool.prompts.prompts import BasePrompt
14
+ from agentpool.tools.base import Tool
15
+ from agentpool_config.resources import ResourceInfo
16
+
17
+ logger = get_logger(__name__)
18
+
19
+
20
+ class PoolResourceProvider(ResourceProvider):
21
+ """Provider that exposes an AgentPool's resources."""
22
+
23
+ def __init__(
24
+ self,
25
+ pool: AgentPool[Any],
26
+ name: str | None = None,
27
+ zed_mode: bool = False,
28
+ include_team_members: bool = False,
29
+ ) -> None:
30
+ """Initialize provider with agent pool.
31
+
32
+ Args:
33
+ pool: Agent pool to expose resources from
34
+ name: Optional name override (defaults to pool name)
35
+ zed_mode: Whether to enable Zed mode
36
+ include_team_members: Whether to include team members in the pool
37
+ in addition to the team itself.
38
+ """
39
+ super().__init__(name=name or repr(pool))
40
+ self.pool = pool
41
+ self.zed_mode = zed_mode
42
+ self.include_team_members = include_team_members
43
+
44
+ async def get_tools(self) -> list[Tool]:
45
+ """Get tools from all agents in pool."""
46
+ team_tools = [team.to_tool() for team in self.pool.teams.values()]
47
+ agents = list(self.pool.agents.values())
48
+ team_members = {member for t in self.pool.teams.values() for member in t.nodes}
49
+ if self.include_team_members:
50
+ agent_tools = [agent.to_tool() for agent in agents]
51
+ else:
52
+ agent_tools = [agent.to_tool() for agent in agents if agent not in team_members]
53
+ return team_tools + agent_tools
54
+
55
+ async def get_prompts(self) -> list[BasePrompt]:
56
+ """Get prompts from pool's manifest."""
57
+ prompts: list[Any] = []
58
+ # if self.pool.manifest.prompts:
59
+ # prompts.extend(self.pool.manifest.prompts.system_prompts.values())
60
+
61
+ # if self.zed_mode:
62
+ # prompts = prepare_prompts_for_zed(prompts)
63
+
64
+ return prompts
65
+
66
+ async def get_resources(self) -> list[ResourceInfo]:
67
+ """Get resources from pool's manifest."""
68
+ # Here we could expose knowledge bases or other resources from manifest
69
+ return []