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,319 @@
1
+ """Manages message flow between agents/groups."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+ from contextlib import asynccontextmanager
7
+ from typing import TYPE_CHECKING, Any, Self
8
+
9
+ from psygnal import Signal
10
+ from psygnal.containers import EventedList
11
+
12
+ from agentpool.log import get_logger
13
+ from agentpool.talk import AggregatedTalkStats, Talk, TeamTalk
14
+
15
+
16
+ if TYPE_CHECKING:
17
+ from collections.abc import AsyncIterator
18
+ from datetime import timedelta
19
+
20
+ from agentpool.common_types import AgentName, AnyTransformFn, AsyncFilterFn, QueueStrategy
21
+ from agentpool.messaging import ChatMessage, MessageNode
22
+ from agentpool_config.forward_targets import ConnectionType
23
+
24
+ logger = get_logger(__name__)
25
+
26
+
27
+ class ConnectionManager:
28
+ """Manages connections for both Agents and Teams."""
29
+
30
+ connection_processed = Signal(Talk.ConnectionProcessed)
31
+
32
+ node_connected = Signal(object) # Node
33
+ connection_added = Signal(Talk) # Agent
34
+
35
+ def __init__(self, owner: MessageNode[Any, Any]) -> None:
36
+ self.owner = owner
37
+ # helper class for the user
38
+ self._connections = EventedList[Talk]()
39
+ self._wait_states: dict[AgentName, bool] = {}
40
+
41
+ def __repr__(self) -> str:
42
+ return f"ConnectionManager({self.owner})"
43
+
44
+ def _on_talk_added(self, index: int, talk: Talk) -> None:
45
+ """Connect to new talk's signal."""
46
+ talk.connection_processed.connect(self._handle_message_flow)
47
+
48
+ def _on_talk_removed(self, index: int, talk: Talk) -> None:
49
+ """Disconnect from removed talk's signal."""
50
+ talk.connection_processed.disconnect(self._handle_message_flow)
51
+
52
+ def _on_talk_changed(self, index: int, old: Talk, new: Talk) -> None:
53
+ """Update signal connections on talk change."""
54
+ old.connection_processed.disconnect(self._handle_message_flow)
55
+ new.connection_processed.connect(self._handle_message_flow)
56
+
57
+ def _handle_message_flow(self, event: Talk.ConnectionProcessed) -> None:
58
+ """Forward message flow to our aggregated signal."""
59
+ self.connection_processed.emit(event)
60
+
61
+ def set_wait_state(self, target: MessageNode[Any, Any] | AgentName, wait: bool = True) -> None:
62
+ """Set waiting behavior for target."""
63
+ target_name = target if isinstance(target, str) else target.name
64
+ self._wait_states[target_name] = wait
65
+
66
+ async def wait_for_connections(self, _seen: set[AgentName] | None = None) -> None:
67
+ """Wait for this agent and all connected agents to complete their tasks."""
68
+ seen: set[AgentName] = _seen or {self.owner.name}
69
+
70
+ # Wait for our own tasks
71
+ await self.owner.task_manager.complete_tasks()
72
+
73
+ # Wait for connected agents
74
+ for agent in self.get_targets():
75
+ if agent.name not in seen:
76
+ seen.add(agent.name)
77
+ await agent.connections.wait_for_connections(seen)
78
+
79
+ def get_targets(
80
+ self, recursive: bool = False, _seen: set[AgentName] | None = None
81
+ ) -> set[MessageNode[Any, Any]]:
82
+ """Get all currently connected target agents.
83
+
84
+ Args:
85
+ recursive: Whether to include targets of targets
86
+ """
87
+ # Get direct targets
88
+ targets = {t for conn in self._connections for t in conn.targets if conn.active}
89
+
90
+ if not recursive:
91
+ return targets
92
+
93
+ # Track seen agents to prevent cycles
94
+ seen = _seen or {self.owner.name}
95
+ all_targets = set()
96
+
97
+ for target in targets:
98
+ if target.name not in seen:
99
+ targets_ = target.connections.get_targets(recursive=True, _seen=seen)
100
+ seen.add(target.name)
101
+ all_targets.add(target)
102
+ all_targets.update(targets_)
103
+
104
+ return all_targets
105
+
106
+ def has_connection_to(self, target: MessageNode[Any, Any]) -> bool:
107
+ """Check if target is connected."""
108
+ return any(target in conn.targets for conn in self._connections if conn.active)
109
+
110
+ def create_connection(
111
+ self,
112
+ source: MessageNode[Any, Any],
113
+ target: MessageNode[Any, Any] | Sequence[MessageNode[Any, Any]],
114
+ *,
115
+ connection_type: ConnectionType = "run",
116
+ priority: int = 0,
117
+ delay: timedelta | None = None,
118
+ queued: bool = False,
119
+ queue_strategy: QueueStrategy = "latest",
120
+ transform: AnyTransformFn[Any] | None = None,
121
+ filter_condition: AsyncFilterFn | None = None,
122
+ stop_condition: AsyncFilterFn | None = None,
123
+ exit_condition: AsyncFilterFn | None = None,
124
+ name: str | None = None,
125
+ ) -> Talk[Any] | TeamTalk:
126
+ """Create connection(s) to target(s).
127
+
128
+ Args:
129
+ source: Source agent or team
130
+ target: Single target or sequence of targets
131
+ connection_type: How to handle messages
132
+ priority: Task priority (lower = higher priority)
133
+ delay: Optional delay before processing
134
+ queued: Whether to queue messages for manual processing
135
+ queue_strategy: How to process queued messages
136
+ transform: Optional message transformation
137
+ filter_condition: When to filter messages
138
+ stop_condition: When to disconnect
139
+ exit_condition: When to exit application
140
+ name: Optional name for cross-referencing connections
141
+ """
142
+ if isinstance(target, Sequence):
143
+ # Create individual talks recursively
144
+ talks = [
145
+ self.create_connection(
146
+ source,
147
+ t,
148
+ connection_type=connection_type,
149
+ priority=priority,
150
+ delay=delay,
151
+ queued=queued,
152
+ queue_strategy=queue_strategy,
153
+ transform=transform,
154
+ filter_condition=filter_condition,
155
+ stop_condition=stop_condition,
156
+ exit_condition=exit_condition,
157
+ # Don't pass name - it should only apply to single connections
158
+ )
159
+ for t in target
160
+ ]
161
+ return TeamTalk(talks)
162
+
163
+ # Single target case
164
+ talk = Talk(
165
+ source=source,
166
+ targets=[target],
167
+ connection_type=connection_type,
168
+ name=name,
169
+ priority=priority,
170
+ delay=delay,
171
+ queued=queued,
172
+ queue_strategy=queue_strategy,
173
+ transform=transform,
174
+ filter_condition=filter_condition,
175
+ stop_condition=stop_condition,
176
+ exit_condition=exit_condition,
177
+ )
178
+ # TODO: better perhaps directly connect EventedList signal to node_connected?
179
+ # or emit in _on_talk_added?
180
+ self.node_connected.emit(target)
181
+ self._connections.append(talk)
182
+ self.connection_added.emit(talk)
183
+ if pool := source.agent_pool:
184
+ # Always use Talk's name for registration
185
+ if name:
186
+ pool.connection_registry.register(name, talk)
187
+ else:
188
+ pool.connection_registry.register_auto(talk)
189
+ else:
190
+ logger.debug("Could not register connection. no pool available", connection=name)
191
+ return talk
192
+
193
+ async def trigger_all(self) -> dict[AgentName, list[ChatMessage[Any]]]:
194
+ """Trigger all queued connections."""
195
+ return {
196
+ i.source.name: await i.trigger()
197
+ for i in self._connections
198
+ if isinstance(i, Talk) and i.queued
199
+ }
200
+
201
+ async def trigger_for(
202
+ self, target: AgentName | MessageNode[Any, Any]
203
+ ) -> list[ChatMessage[Any]]:
204
+ """Trigger queued connections to specific target."""
205
+ target_name = target if isinstance(target, str) else target.name
206
+ results = []
207
+ for talk in self._connections:
208
+ if talk.queued and (t.name == target_name for t in talk.targets):
209
+ results.extend(await talk.trigger())
210
+ return results
211
+
212
+ def disconnect_all(self) -> None:
213
+ """Disconnect all managed connections."""
214
+ for conn in self._connections:
215
+ conn.disconnect()
216
+ self._connections.clear()
217
+
218
+ def disconnect(self, node: MessageNode[Any, Any]) -> None:
219
+ """Disconnect a specific node."""
220
+ for talk in self._connections:
221
+ if node in talk.targets or node == talk.source:
222
+ talk.active = False
223
+ self._connections.remove(talk)
224
+
225
+ async def route_message(self, message: ChatMessage[Any], wait: bool | None = None) -> None:
226
+ """Route message to all connections."""
227
+ if wait is not None:
228
+ should_wait = wait
229
+ else:
230
+ should_wait = any(self._wait_states.get(t.name, False) for t in self.get_targets())
231
+ msg = "ConnectionManager routing message"
232
+ logger.debug(msg, sender=message.name, num_connections=len(self._connections))
233
+ for talk in self._connections:
234
+ await talk._handle_message(message, None)
235
+
236
+ if should_wait:
237
+ await self.wait_for_connections()
238
+
239
+ @asynccontextmanager
240
+ async def paused_routing(self) -> AsyncIterator[Self]:
241
+ """Temporarily pause message routing to connections."""
242
+ active_talks = [talk for talk in self._connections if talk.active]
243
+ for talk in active_talks:
244
+ talk.active = False
245
+ try:
246
+ yield self
247
+ finally:
248
+ for talk in active_talks:
249
+ talk.active = True
250
+
251
+ @property
252
+ def stats(self) -> AggregatedTalkStats:
253
+ """Get aggregated statistics for all connections."""
254
+ return AggregatedTalkStats(stats=[conn.stats for conn in self._connections])
255
+
256
+ def get_connections(self, recursive: bool = False) -> list[Talk[Any]]:
257
+ """Get all Talk connections, flattening TeamTalks."""
258
+ result = []
259
+ seen = set()
260
+
261
+ # Get our direct connections
262
+ for conn in self._connections:
263
+ result.append(conn) # noqa: PERF402
264
+ # Get target connections if recursive
265
+ if recursive:
266
+ for conn in result:
267
+ for target in conn.targets:
268
+ if target.name not in seen:
269
+ seen.add(target.name)
270
+ result.extend(target.connections.get_connections(True))
271
+
272
+ return result
273
+
274
+ def get_mermaid_diagram(
275
+ self,
276
+ include_details: bool = True,
277
+ recursive: bool = True,
278
+ ) -> str:
279
+ """Generate mermaid flowchart of all connections."""
280
+ lines = ["flowchart LR"]
281
+ connections = self.get_connections(recursive=recursive)
282
+
283
+ for talk in connections:
284
+ source = talk.source.name
285
+ for target in talk.targets:
286
+ if not include_details:
287
+ lines.append(f" {source}-->{target.name}")
288
+ continue
289
+ details: list[str] = []
290
+ details.append(talk.connection_type)
291
+ if talk.queued:
292
+ details.append(f"queued({talk.queue_strategy})")
293
+ if talk.filter_condition:
294
+ details.append(f"filter:{talk.filter_condition.__name__}")
295
+ if talk.stop_condition:
296
+ details.append(f"stop:{talk.stop_condition.__name__}")
297
+ if talk.exit_condition:
298
+ details.append(f"exit:{talk.exit_condition.__name__}")
299
+ elif any([talk.filter_condition, talk.stop_condition, talk.exit_condition]):
300
+ details.append("conditions")
301
+
302
+ label = f"|{' '.join(details)}|" if details else ""
303
+ lines.append(f" {source}--{label}-->{target.name}")
304
+
305
+ return "\n".join(lines)
306
+
307
+
308
+ if __name__ == "__main__":
309
+ from agentpool.agents import Agent
310
+
311
+ agent = Agent("test_agent")
312
+ agent_2 = Agent("test_agent_2")
313
+ agent_3 = Agent("test_agent_3")
314
+ agent_4 = Agent("test_agent_4")
315
+ _conn_1 = agent >> agent_2
316
+ _conn_2 = agent >> agent_3
317
+ _conn_3 = agent_2 >> agent_4
318
+ # print(agent.connections.get_connections(recursive=True))
319
+ # print(agent.connections.get_mermaid_diagram())
@@ -0,0 +1,66 @@
1
+ """Base class for message processing nodes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from typing import TYPE_CHECKING, Any
7
+
8
+
9
+ if TYPE_CHECKING:
10
+ from agentpool import AgentPool
11
+ from agentpool.agents.base_agent import BaseAgent
12
+ from agentpool.messaging import MessageNode
13
+ from agentpool.models.manifest import AgentsManifest
14
+ from agentpool.prompts.manager import PromptManager
15
+ from agentpool.ui.base import InputProvider
16
+ from agentpool_config.nodes import NodeConfig
17
+
18
+
19
+ @dataclass(kw_only=True)
20
+ class NodeContext[TDeps = object]:
21
+ """Context for message processing nodes."""
22
+
23
+ node: MessageNode[TDeps, Any]
24
+ """Current Node."""
25
+
26
+ pool: AgentPool[Any] | None = None
27
+ """The agent pool the node is part of."""
28
+
29
+ config: NodeConfig
30
+ """Node configuration."""
31
+
32
+ definition: AgentsManifest
33
+ """Complete agent definition with all configurations."""
34
+
35
+ input_provider: InputProvider | None = None
36
+ """Provider for human-input-handling."""
37
+
38
+ data: TDeps | None = None
39
+ """Custom context data."""
40
+
41
+ @property
42
+ def node_name(self) -> str:
43
+ """Name of the current node."""
44
+ return self.node.name
45
+
46
+ @property
47
+ def agent(self) -> BaseAgent[TDeps, Any]:
48
+ """Return agent node, type-narrowed to BaseAgent."""
49
+ from agentpool.agents.base_agent import BaseAgent
50
+
51
+ assert isinstance(self.node, BaseAgent)
52
+ return self.node
53
+
54
+ def get_input_provider(self) -> InputProvider:
55
+ from agentpool.ui.stdlib_provider import StdlibInputProvider
56
+
57
+ if self.input_provider:
58
+ return self.input_provider
59
+ if self.pool and self.pool._input_provider:
60
+ return self.pool._input_provider
61
+ return StdlibInputProvider()
62
+
63
+ @property
64
+ def prompt_manager(self) -> PromptManager:
65
+ """Get prompt manager from manifest."""
66
+ return self.definition.prompt_manager