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,192 @@
1
+ """AG-UI agent helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+ from uuid import uuid4
7
+
8
+ from pydantic import TypeAdapter
9
+
10
+ from agentpool.log import get_logger
11
+
12
+
13
+ if TYPE_CHECKING:
14
+ from collections.abc import AsyncIterator
15
+
16
+ from ag_ui.core import Event, ToolMessage
17
+ import httpx
18
+
19
+ from agentpool.agents.context import ConfirmationResult
20
+ from agentpool.messaging.context import NodeContext
21
+ from agentpool.tools import Tool
22
+ from agentpool.ui.base import InputProvider
23
+ from agentpool_config.nodes import ToolConfirmationMode
24
+
25
+
26
+ logger = get_logger(__name__)
27
+
28
+
29
+ async def _should_confirm_tool(
30
+ tool: Tool,
31
+ confirmation_mode: ToolConfirmationMode,
32
+ ) -> bool:
33
+ """Determine if a tool requires confirmation based on mode.
34
+
35
+ Args:
36
+ tool: The tool to check
37
+ confirmation_mode: Current confirmation mode
38
+
39
+ Returns:
40
+ True if confirmation is required
41
+ """
42
+ if confirmation_mode == "never":
43
+ return False
44
+ if confirmation_mode == "always":
45
+ return True
46
+ # "per_tool" mode - check tool's requires_confirmation attribute
47
+ return tool.requires_confirmation
48
+
49
+
50
+ async def _get_tool_confirmation(
51
+ tool: Tool,
52
+ args: dict[str, Any],
53
+ input_provider: InputProvider,
54
+ context: NodeContext[Any],
55
+ ) -> ConfirmationResult:
56
+ """Get confirmation for tool execution.
57
+
58
+ Args:
59
+ tool: Tool to confirm
60
+ args: Tool arguments
61
+ input_provider: Provider for confirmation UI
62
+ context: Node context
63
+
64
+ Returns:
65
+ Confirmation result
66
+ """
67
+ return await input_provider.get_tool_confirmation(
68
+ context=context,
69
+ tool=tool,
70
+ args=args,
71
+ message_history=None,
72
+ )
73
+
74
+
75
+ async def execute_tool_calls(
76
+ tool_calls: list[tuple[str, str, dict[str, Any]]],
77
+ tools_by_name: dict[str, Tool],
78
+ *,
79
+ confirmation_mode: ToolConfirmationMode = "never",
80
+ input_provider: InputProvider | None = None,
81
+ context: NodeContext[Any] | None = None,
82
+ ) -> list[ToolMessage]:
83
+ """Execute tool calls locally and return results.
84
+
85
+ Args:
86
+ tool_calls: List of (tool_call_id, tool_name, args) tuples
87
+ tools_by_name: Dictionary mapping tool names to Tool instances
88
+ confirmation_mode: Tool confirmation mode
89
+ input_provider: Optional input provider for confirmation requests
90
+ context: Optional node context for confirmation
91
+
92
+ Returns:
93
+ List of ToolMessage with execution results
94
+ """
95
+ from ag_ui.core import ToolMessage as AGUIToolMessage
96
+
97
+ results: list[AGUIToolMessage] = []
98
+ for tc_id, tool_name, args in tool_calls:
99
+ if tool_name not in tools_by_name:
100
+ # Tool not registered locally - this is a server-side tool, skip it
101
+ logger.debug("Skipping server-side tool", tool=tool_name)
102
+ continue
103
+
104
+ tool = tools_by_name[tool_name]
105
+
106
+ # Check if confirmation is required
107
+ if await _should_confirm_tool(tool, confirmation_mode):
108
+ if input_provider is None or context is None:
109
+ logger.warning(
110
+ "Tool requires confirmation but no input provider available",
111
+ tool=tool_name,
112
+ )
113
+ result_msg = AGUIToolMessage(
114
+ id=str(uuid4()),
115
+ tool_call_id=tc_id,
116
+ content="Error: Tool requires confirmation but no provider available",
117
+ error="No input provider for confirmation",
118
+ )
119
+ results.append(result_msg)
120
+ continue
121
+
122
+ confirmation = await _get_tool_confirmation(tool, args, input_provider, context)
123
+ if confirmation == "skip":
124
+ logger.info("Tool execution skipped by user", tool=tool_name)
125
+ result_msg = AGUIToolMessage(
126
+ id=str(uuid4()),
127
+ tool_call_id=tc_id,
128
+ content="Tool execution was skipped by user",
129
+ error=None,
130
+ )
131
+ results.append(result_msg)
132
+ continue
133
+ if confirmation in ("abort_run", "abort_chain"):
134
+ logger.info("Tool execution aborted by user", tool=tool_name, action=confirmation)
135
+ result_msg = AGUIToolMessage(
136
+ id=str(uuid4()),
137
+ tool_call_id=tc_id,
138
+ content="Tool execution was aborted by user",
139
+ error="Execution aborted",
140
+ )
141
+ results.append(result_msg)
142
+ # Could raise an exception here to abort the entire run
143
+ continue
144
+
145
+ # Execute the tool
146
+ logger.info("Executing tool", tool=tool_name, args=args)
147
+ try:
148
+ result = await tool.execute(**args)
149
+ result_str = str(result) if not isinstance(result, str) else result
150
+ id_ = str(uuid4())
151
+ result_msg = AGUIToolMessage(id=id_, tool_call_id=tc_id, content=result_str)
152
+ logger.debug("Tool executed", tool=tool_name, result=result_str[:100])
153
+ except Exception as e:
154
+ logger.exception("Tool execution failed", tool=tool_name)
155
+ result_msg = AGUIToolMessage(
156
+ id=str(uuid4()),
157
+ tool_call_id=tc_id,
158
+ content=f"Error executing tool: {e}",
159
+ error=str(e),
160
+ )
161
+ results.append(result_msg)
162
+ return results
163
+
164
+
165
+ async def parse_sse_stream(response: httpx.Response) -> AsyncIterator[Event]:
166
+ """Parse Server-Sent Events stream.
167
+
168
+ Args:
169
+ response: HTTP response with SSE stream
170
+
171
+ Yields:
172
+ Parsed AG-UI events
173
+ """
174
+ from ag_ui.core import Event
175
+
176
+ event_adapter: TypeAdapter[Event] = TypeAdapter(Event)
177
+ buffer = ""
178
+ async for chunk in response.aiter_text():
179
+ buffer += chunk
180
+ # Process complete SSE events
181
+ while "\n\n" in buffer:
182
+ event_text, buffer = buffer.split("\n\n", 1)
183
+ # Parse SSE format: "data: {json}\n"
184
+ for line in event_text.split("\n"):
185
+ if not line.startswith("data: "):
186
+ continue
187
+ json_str = line[6:] # Remove "data: " prefix
188
+ try:
189
+ event = event_adapter.validate_json(json_str)
190
+ yield event
191
+ except (ValueError, TypeError) as e:
192
+ logger.warning("Failed to parse AG-UI event", json=json_str[:100], error=str(e))
@@ -0,0 +1,71 @@
1
+ from __future__ import annotations
2
+
3
+ import pathlib
4
+
5
+ import anyio
6
+ from schemez import YAMLCode
7
+ from upathtools import read_folder_as_text, read_path
8
+
9
+ from agentpool import Agent, models
10
+ import agentpool_config
11
+
12
+
13
+ SYS_PROMPT = """
14
+ You are an expert at creating AgentPool manifests.
15
+ Generate complete, valid YAML that CAN include:
16
+ - Agent configurations with appropriate tools and capabilities
17
+ - Team definitions with proper member relationships
18
+ - Connection setups for message routing
19
+ Follow the provided JSON schema exactly.
20
+ Only add stuff asked for by the user. Be tense. Less is more.
21
+ DONT try to guess tools.
22
+ Add response schemas and storage providers and environment section only when asked for.
23
+ """
24
+
25
+
26
+ CONFIG_PATH = pathlib.Path(agentpool_config.__file__).parent
27
+ CORE_CONFIG_PATH = pathlib.Path(models.__file__).parent
28
+ README_URL = "https://raw.githubusercontent.com/phil65/agentpool/main/README.md"
29
+
30
+
31
+ async def create_architect_agent(
32
+ name: str = "config_generator",
33
+ model: str = "openrouter:gpt-5-nano",
34
+ ) -> Agent[None, YAMLCode]:
35
+ code = await read_folder_as_text(CONFIG_PATH, pattern="**/*.py")
36
+ core_code = await read_folder_as_text(CORE_CONFIG_PATH, pattern="**/*.py")
37
+ readme = await read_path(README_URL)
38
+ context = f"Code:\n{core_code}\n{code}\nReadme:\n{readme}"
39
+ agent = Agent(
40
+ name,
41
+ model=model,
42
+ system_prompt=SYS_PROMPT,
43
+ output_type=YAMLCode,
44
+ )
45
+ agent.conversation.add_context_message(context)
46
+ return agent
47
+
48
+
49
+ async def create_architect_agent_2(
50
+ name: str = "config_generator",
51
+ model: str = "openai:gpt-5-nano",
52
+ ) -> Agent[None, YAMLCode]:
53
+ from agentpool import AgentsManifest
54
+
55
+ code = AgentsManifest.to_python_code()
56
+ return Agent(
57
+ name,
58
+ model=model,
59
+ system_prompt=SYS_PROMPT + f"<config>{code}</config>",
60
+ output_type=YAMLCode,
61
+ )
62
+
63
+
64
+ if __name__ == "__main__":
65
+
66
+ async def main() -> None:
67
+ agent = await create_architect_agent_2()
68
+ cfg = await agent.run("write an AgentManifest with a GIT expert")
69
+ print(cfg.content.code)
70
+
71
+ print(anyio.run(main))
@@ -0,0 +1,177 @@
1
+ """Base class for all agent types."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import abstractmethod
6
+ import asyncio
7
+ from typing import TYPE_CHECKING, Any, Literal
8
+
9
+ from anyenv import MultiEventHandler
10
+ from exxec import LocalExecutionEnvironment
11
+
12
+ from agentpool.agents.events import resolve_event_handlers
13
+ from agentpool.log import get_logger
14
+ from agentpool.messaging import MessageHistory, MessageNode
15
+ from agentpool.tools.manager import ToolManager
16
+
17
+
18
+ if TYPE_CHECKING:
19
+ from collections.abc import AsyncIterator, Sequence
20
+
21
+ from evented.configs import EventConfig
22
+ from exxec import ExecutionEnvironment
23
+
24
+ from agentpool.agents.context import AgentContext
25
+ from agentpool.agents.events import RichAgentStreamEvent
26
+ from agentpool.common_types import BuiltinEventHandlerType, IndividualEventHandler
27
+ from agentpool.delegation import AgentPool
28
+ from agentpool.ui.base import InputProvider
29
+ from agentpool_config.mcp_server import MCPServerConfig
30
+
31
+
32
+ logger = get_logger(__name__)
33
+
34
+ ToolConfirmationMode = Literal["always", "never", "per_tool"]
35
+
36
+
37
+ class BaseAgent[TDeps = None, TResult = str](MessageNode[TDeps, TResult]):
38
+ """Base class for Agent, ACPAgent, AGUIAgent, and ClaudeCodeAgent.
39
+
40
+ Provides shared infrastructure:
41
+ - tools: ToolManager for tool registration and execution
42
+ - conversation: MessageHistory for conversation state
43
+ - event_handler: MultiEventHandler for event distribution
44
+ - _event_queue: Queue for streaming events
45
+ - tool_confirmation_mode: Tool confirmation behavior
46
+ - _input_provider: Provider for user input/confirmations
47
+ - env: ExecutionEnvironment for running code/commands
48
+ - context property: Returns NodeContext for the agent
49
+ """
50
+
51
+ def __init__(
52
+ self,
53
+ *,
54
+ name: str = "agent",
55
+ description: str | None = None,
56
+ display_name: str | None = None,
57
+ mcp_servers: Sequence[str | MCPServerConfig] | None = None,
58
+ agent_pool: AgentPool[Any] | None = None,
59
+ enable_logging: bool = True,
60
+ event_configs: Sequence[EventConfig] | None = None,
61
+ # New shared parameters
62
+ env: ExecutionEnvironment | None = None,
63
+ input_provider: InputProvider | None = None,
64
+ output_type: type[TResult] = str, # type: ignore[assignment]
65
+ tool_confirmation_mode: ToolConfirmationMode = "per_tool",
66
+ event_handlers: Sequence[IndividualEventHandler | BuiltinEventHandlerType] | None = None,
67
+ ) -> None:
68
+ """Initialize base agent with shared infrastructure.
69
+
70
+ Args:
71
+ name: Agent name
72
+ description: Agent description
73
+ display_name: Human-readable display name
74
+ mcp_servers: MCP server configurations
75
+ agent_pool: Agent pool for coordination
76
+ enable_logging: Whether to enable database logging
77
+ event_configs: Event trigger configurations
78
+ env: Execution environment for running code/commands
79
+ input_provider: Provider for user input and confirmations
80
+ output_type: Output type for this agent
81
+ tool_confirmation_mode: How tool execution confirmation is handled
82
+ event_handlers: Event handlers for this agent
83
+ """
84
+ super().__init__(
85
+ name=name,
86
+ description=description,
87
+ display_name=display_name,
88
+ mcp_servers=mcp_servers,
89
+ agent_pool=agent_pool,
90
+ enable_logging=enable_logging,
91
+ event_configs=event_configs,
92
+ )
93
+
94
+ # Shared infrastructure - previously duplicated in all 4 agents
95
+ self._event_queue: asyncio.Queue[RichAgentStreamEvent[Any]] = asyncio.Queue()
96
+ self.conversation = MessageHistory()
97
+ self.env = env or LocalExecutionEnvironment()
98
+ self._input_provider = input_provider
99
+ self._output_type: type[TResult] = output_type
100
+ self.tool_confirmation_mode: ToolConfirmationMode = tool_confirmation_mode
101
+ self.tools = ToolManager()
102
+ resolved_handlers = resolve_event_handlers(event_handlers)
103
+ self.event_handler: MultiEventHandler[IndividualEventHandler] = MultiEventHandler(
104
+ resolved_handlers
105
+ )
106
+
107
+ # Cancellation infrastructure
108
+ self._cancelled = False
109
+ self._current_stream_task: asyncio.Task[Any] | None = None
110
+
111
+ @abstractmethod
112
+ def get_context(self, data: Any = None) -> AgentContext[Any]:
113
+ """Create a new context for this agent.
114
+
115
+ Args:
116
+ data: Optional custom data to attach to the context
117
+
118
+ Returns:
119
+ A new AgentContext instance
120
+ """
121
+ ...
122
+
123
+ @property
124
+ @abstractmethod
125
+ def model_name(self) -> str | None:
126
+ """Get the model name used by this agent."""
127
+ ...
128
+
129
+ @abstractmethod
130
+ def run_stream(
131
+ self,
132
+ *prompt: Any,
133
+ **kwargs: Any,
134
+ ) -> AsyncIterator[RichAgentStreamEvent[TResult]]:
135
+ """Run agent with streaming output.
136
+
137
+ Args:
138
+ *prompt: Input prompts
139
+ **kwargs: Additional arguments
140
+
141
+ Yields:
142
+ Stream events during execution
143
+ """
144
+ ...
145
+
146
+ async def set_tool_confirmation_mode(self, mode: ToolConfirmationMode) -> None:
147
+ """Set tool confirmation mode.
148
+
149
+ Args:
150
+ mode: Confirmation mode - "always", "never", or "per_tool"
151
+ """
152
+ self.tool_confirmation_mode = mode
153
+
154
+ def is_cancelled(self) -> bool:
155
+ """Check if the agent has been cancelled.
156
+
157
+ Returns:
158
+ True if cancellation was requested
159
+ """
160
+ return self._cancelled
161
+
162
+ async def interrupt(self) -> None:
163
+ """Interrupt the currently running stream.
164
+
165
+ This method is called when cancellation is requested. The default
166
+ implementation sets the cancelled flag and cancels the current stream task.
167
+
168
+ Subclasses may override to add protocol-specific cancellation:
169
+ - ACPAgent: Send CancelNotification to remote server
170
+ - ClaudeCodeAgent: Call client.interrupt()
171
+
172
+ The cancelled flag should be checked in run_stream loops to exit early.
173
+ """
174
+ self._cancelled = True
175
+ if self._current_stream_task and not self._current_stream_task.done():
176
+ self._current_stream_task.cancel()
177
+ logger.info("Interrupted agent stream", agent=self.name)
@@ -0,0 +1,11 @@
1
+ """Claude Code Agent - Native Claude Agent SDK integration.
2
+
3
+ This module provides an agent implementation that wraps the Claude Agent SDK's
4
+ ClaudeSDKClient for native integration with agentpool.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from agentpool.agents.claude_code_agent.claude_code_agent import ClaudeCodeAgent
10
+
11
+ __all__ = ["ClaudeCodeAgent"]