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,377 @@
1
+ """Base class for message processing nodes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC, abstractmethod
6
+ from collections.abc import Sequence
7
+ from typing import TYPE_CHECKING, Any, Literal, Self, overload
8
+ from uuid import uuid4
9
+
10
+ from psygnal import Signal
11
+
12
+ from agentpool.log import get_logger
13
+ from agentpool.messaging import ChatMessage
14
+ from agentpool.talk import AggregatedTalkStats
15
+ from agentpool.utils.tasks import TaskManager
16
+
17
+
18
+ if TYPE_CHECKING:
19
+ from collections.abc import AsyncIterator
20
+ from datetime import timedelta
21
+ from types import TracebackType
22
+
23
+ from evented.configs import EventConfig
24
+ from evented.event_data import EventData
25
+
26
+ from agentpool.common_types import (
27
+ AnyTransformFn,
28
+ AsyncFilterFn,
29
+ ProcessorCallback,
30
+ QueueStrategy,
31
+ )
32
+ from agentpool.delegation import AgentPool
33
+ from agentpool.messaging.context import NodeContext
34
+ from agentpool.storage import StorageManager
35
+ from agentpool.talk import Talk, TeamTalk
36
+ from agentpool.talk.stats import AggregatedMessageStats, MessageStats
37
+ from agentpool.tools.base import Tool
38
+ from agentpool_config.forward_targets import ConnectionType
39
+ from agentpool_config.mcp_server import MCPServerConfig
40
+
41
+
42
+ logger = get_logger(__name__)
43
+
44
+
45
+ class MessageNode[TDeps, TResult](ABC):
46
+ """Base class for all message processing nodes."""
47
+
48
+ message_received = Signal(ChatMessage)
49
+ """Signal emitted when node receives a message."""
50
+
51
+ message_sent = Signal(ChatMessage)
52
+ """Signal emitted when node creates a message."""
53
+
54
+ def __init__(
55
+ self,
56
+ name: str | None = None,
57
+ description: str | None = None,
58
+ display_name: str | None = None,
59
+ mcp_servers: Sequence[str | MCPServerConfig] | None = None,
60
+ agent_pool: AgentPool[Any] | None = None,
61
+ enable_logging: bool = True,
62
+ event_configs: Sequence[EventConfig] | None = None,
63
+ ) -> None:
64
+ """Initialize message node."""
65
+ super().__init__()
66
+
67
+ from agentpool.mcp_server.manager import MCPManager
68
+ from agentpool.messaging import EventManager
69
+ from agentpool.messaging.connection_manager import ConnectionManager
70
+ from agentpool.models.manifest import AgentsManifest
71
+
72
+ async def _event_handler(event: EventData) -> None:
73
+ if prompt := event.to_prompt():
74
+ await self.run(prompt)
75
+
76
+ self.task_manager = TaskManager()
77
+ self._name = name or self.__class__.__name__
78
+ self._display_name = display_name
79
+ self.log = logger.bind(agent_name=self._name)
80
+ self.agent_pool = agent_pool
81
+ self._manifest = agent_pool.manifest if agent_pool else AgentsManifest()
82
+ self.description = description
83
+ self.connections = ConnectionManager(self)
84
+ cfgs = list(event_configs) if event_configs else None
85
+ self._events = EventManager(configs=cfgs, event_callbacks=[_event_handler])
86
+ name_ = f"node_{self._name}"
87
+ self.mcp = MCPManager(name_, servers=mcp_servers, owner=self.name)
88
+ self.enable_db_logging = enable_logging
89
+ self.conversation_id = str(uuid4())
90
+ # Connect to the combined signal to capture all messages
91
+ # TODO: need to check this
92
+ # node.message_received.connect(self.log_message)
93
+
94
+ async def __aenter__(self) -> Self:
95
+ """Initialize base message node."""
96
+ if self.enable_db_logging and self.storage:
97
+ await self.storage.log_conversation(
98
+ conversation_id=self.conversation_id,
99
+ node_name=self.name,
100
+ )
101
+ try:
102
+ await self._events.__aenter__()
103
+ await self.mcp.__aenter__()
104
+ except Exception as e:
105
+ await self.__aexit__(type(e), e, e.__traceback__)
106
+ msg = f"Failed to initialize {self.name}"
107
+ raise RuntimeError(msg) from e
108
+ else:
109
+ return self
110
+
111
+ async def __aexit__(
112
+ self,
113
+ exc_type: type[BaseException] | None,
114
+ exc_val: BaseException | None,
115
+ exc_tb: TracebackType | None,
116
+ ) -> None:
117
+ """Clean up base resources."""
118
+ await self._events.__aexit__(exc_type, exc_val, exc_tb)
119
+ await self.mcp.__aexit__(exc_type, exc_val, exc_tb)
120
+ await self.task_manager.cleanup_tasks()
121
+
122
+ @property
123
+ def connection_stats(self) -> AggregatedTalkStats:
124
+ """Get stats for all active connections of this node."""
125
+ stats = [talk.stats for talk in self.connections.get_connections()]
126
+ return AggregatedTalkStats(stats=stats)
127
+
128
+ def get_context(self, data: Any = None) -> NodeContext:
129
+ """Create a new context for this node.
130
+
131
+ Args:
132
+ data: Optional custom data to attach to the context
133
+
134
+ Returns:
135
+ A new NodeContext instance
136
+ """
137
+ raise NotImplementedError
138
+
139
+ @property
140
+ def storage(self) -> StorageManager | None:
141
+ """Get storage manager from pool."""
142
+ return self.agent_pool.storage if self.agent_pool else None
143
+
144
+ @property
145
+ def name(self) -> str:
146
+ """Get agent name."""
147
+ return self._name or "agentpool"
148
+
149
+ @name.setter
150
+ def name(self, value: str) -> None:
151
+ self._name = value
152
+
153
+ @property
154
+ def display_name(self) -> str:
155
+ """Get human-readable display name, falls back to name."""
156
+ return self._display_name or self._name
157
+
158
+ @display_name.setter
159
+ def display_name(self, value: str | None) -> None:
160
+ self._display_name = value
161
+
162
+ def to_tool(
163
+ self, *, name: str | None = None, description: str | None = None, **kwargs: Any
164
+ ) -> Tool[TResult]:
165
+ """Convert node to a callable tool.
166
+
167
+ Args:
168
+ name: Optional tool name override
169
+ description: Optional tool description override
170
+ **kwargs: Additional arguments for subclass customization
171
+
172
+ Returns:
173
+ Tool instance that can be registered
174
+ """
175
+ from agentpool.tools.base import Tool
176
+
177
+ async def wrapped(prompt: str) -> TResult:
178
+ result = await self.run(prompt)
179
+ return result.content
180
+
181
+ tool_name = name or f"ask_{self.name}"
182
+ docstring = description or f"Get expert answer from {self.name}"
183
+ if self.description:
184
+ docstring = f"{docstring}\n\n{self.description}"
185
+ wrapped.__doc__ = docstring
186
+ wrapped.__name__ = tool_name
187
+ return Tool.from_callable(wrapped, name_override=tool_name, description_override=docstring)
188
+
189
+ @overload
190
+ def __rshift__(
191
+ self, other: MessageNode[Any, Any] | ProcessorCallback[Any]
192
+ ) -> Talk[TResult]: ...
193
+
194
+ @overload
195
+ def __rshift__(
196
+ self, other: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]]
197
+ ) -> TeamTalk[TResult]: ...
198
+
199
+ def __rshift__(
200
+ self,
201
+ other: MessageNode[Any, Any]
202
+ | ProcessorCallback[Any]
203
+ | Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
204
+ ) -> Talk[Any] | TeamTalk[Any]:
205
+ """Connect agent to another agent or group.
206
+
207
+ Example:
208
+ agent >> other_agent # Connect to single agent
209
+ agent >> (agent2 & agent3) # Connect to group
210
+ agent >> "other_agent" # Connect by name (needs pool)
211
+ """
212
+ return self.connect_to(other)
213
+
214
+ @overload
215
+ def connect_to(
216
+ self,
217
+ target: MessageNode[Any, Any] | ProcessorCallback[Any],
218
+ *,
219
+ queued: Literal[True],
220
+ queue_strategy: Literal["concat"],
221
+ ) -> Talk[str]: ...
222
+
223
+ @overload
224
+ def connect_to(
225
+ self,
226
+ target: MessageNode[Any, Any] | ProcessorCallback[Any],
227
+ *,
228
+ connection_type: ConnectionType = "run",
229
+ name: str | None = None,
230
+ priority: int = 0,
231
+ delay: timedelta | None = None,
232
+ queued: bool = False,
233
+ queue_strategy: QueueStrategy = "latest",
234
+ transform: AnyTransformFn[Any] | None = None,
235
+ filter_condition: AsyncFilterFn | None = None,
236
+ stop_condition: AsyncFilterFn | None = None,
237
+ exit_condition: AsyncFilterFn | None = None,
238
+ ) -> Talk[TResult]: ...
239
+
240
+ @overload
241
+ def connect_to(
242
+ self,
243
+ target: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
244
+ *,
245
+ queued: Literal[True],
246
+ queue_strategy: Literal["concat"],
247
+ ) -> TeamTalk[str]: ...
248
+
249
+ @overload
250
+ def connect_to(
251
+ self,
252
+ target: Sequence[MessageNode[Any, TResult] | ProcessorCallback[TResult]],
253
+ *,
254
+ connection_type: ConnectionType = "run",
255
+ name: str | None = None,
256
+ priority: int = 0,
257
+ delay: timedelta | None = None,
258
+ queued: bool = False,
259
+ queue_strategy: QueueStrategy = "latest",
260
+ transform: AnyTransformFn[Any] | None = None,
261
+ filter_condition: AsyncFilterFn | None = None,
262
+ stop_condition: AsyncFilterFn | None = None,
263
+ exit_condition: AsyncFilterFn | None = None,
264
+ ) -> TeamTalk[TResult]: ...
265
+
266
+ @overload
267
+ def connect_to(
268
+ self,
269
+ target: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
270
+ *,
271
+ connection_type: ConnectionType = "run",
272
+ name: str | None = None,
273
+ priority: int = 0,
274
+ delay: timedelta | None = None,
275
+ queued: bool = False,
276
+ queue_strategy: QueueStrategy = "latest",
277
+ transform: AnyTransformFn[Any] | None = None,
278
+ filter_condition: AsyncFilterFn | None = None,
279
+ stop_condition: AsyncFilterFn | None = None,
280
+ exit_condition: AsyncFilterFn | None = None,
281
+ ) -> TeamTalk: ...
282
+
283
+ def connect_to(
284
+ self,
285
+ target: MessageNode[Any, Any]
286
+ | ProcessorCallback[Any]
287
+ | Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
288
+ *,
289
+ connection_type: ConnectionType = "run",
290
+ name: str | None = None,
291
+ priority: int = 0,
292
+ delay: timedelta | None = None,
293
+ queued: bool = False,
294
+ queue_strategy: QueueStrategy = "latest",
295
+ transform: AnyTransformFn[Any] | None = None,
296
+ filter_condition: AsyncFilterFn | None = None,
297
+ stop_condition: AsyncFilterFn | None = None,
298
+ exit_condition: AsyncFilterFn | None = None,
299
+ ) -> Talk[Any] | TeamTalk:
300
+ """Create connection(s) to target(s)."""
301
+ # Handle callable case
302
+ from agentpool.agents import Agent
303
+ from agentpool.delegation.base_team import BaseTeam
304
+
305
+ if callable(target):
306
+ target = Agent.from_callback(target)
307
+ if pool := self.agent_pool:
308
+ target.agent_pool = pool
309
+ pool.register(target.name, target)
310
+ # we are explicit here just to make disctinction clear, we only want sequences
311
+ # of message units
312
+ if isinstance(target, Sequence) and not isinstance(target, BaseTeam):
313
+ targets: list[MessageNode[Any, Any]] = []
314
+ for t in target:
315
+ match t:
316
+ case _ if callable(t):
317
+ other = Agent.from_callback(t)
318
+ if pool := self.agent_pool:
319
+ other.agent_pool = pool
320
+ pool.register(other.name, other)
321
+ targets.append(other)
322
+ case MessageNode():
323
+ targets.append(t)
324
+ case _:
325
+ msg = f"Invalid node type: {type(t)}"
326
+ raise TypeError(msg)
327
+ else:
328
+ targets = target # type: ignore
329
+ return self.connections.create_connection(
330
+ self,
331
+ targets,
332
+ connection_type=connection_type,
333
+ priority=priority,
334
+ name=name,
335
+ delay=delay,
336
+ queued=queued,
337
+ queue_strategy=queue_strategy,
338
+ transform=transform,
339
+ filter_condition=filter_condition,
340
+ stop_condition=stop_condition,
341
+ exit_condition=exit_condition,
342
+ )
343
+
344
+ async def disconnect_all(self) -> None:
345
+ """Disconnect from all nodes."""
346
+ for target in list(self.connections.get_targets()):
347
+ self.stop_passing_results_to(target)
348
+
349
+ def stop_passing_results_to(self, other: MessageNode[Any, Any]) -> None:
350
+ """Stop forwarding results to another node."""
351
+ self.connections.disconnect(other)
352
+
353
+ @abstractmethod
354
+ async def run(self, *prompts: Any, **kwargs: Any) -> ChatMessage[TResult]:
355
+ """Execute node with prompts. Implementation-specific run logic."""
356
+
357
+ async def get_message_history(self, limit: int | None = None) -> list[ChatMessage[Any]]:
358
+ """Get message history from storage."""
359
+ from agentpool_config.session import SessionQuery
360
+
361
+ if not self.enable_db_logging or not self.storage:
362
+ return []
363
+ query = SessionQuery(name=self.conversation_id, limit=limit)
364
+ return await self.storage.filter_messages(query)
365
+
366
+ async def log_message(self, message: ChatMessage[Any]) -> None:
367
+ """Handle message from chat signal."""
368
+ if self.enable_db_logging and self.storage:
369
+ await self.storage.log_message(message)
370
+
371
+ @abstractmethod
372
+ async def get_stats(self) -> MessageStats | AggregatedMessageStats:
373
+ """Get message statistics for this node."""
374
+
375
+ @abstractmethod
376
+ def run_iter(self, *prompts: Any, **kwargs: Any) -> AsyncIterator[ChatMessage[Any]]:
377
+ """Yield messages during execution."""