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,98 @@
1
+ """OpenAI-compatible API server for AgentPool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Literal, TypedDict
6
+
7
+ from pydantic import Field
8
+ from schemez import Schema
9
+
10
+ from agentpool.log import get_logger
11
+
12
+
13
+ logger = get_logger(__name__)
14
+
15
+
16
+ class CompletionUsage(TypedDict):
17
+ """Token usage information."""
18
+
19
+ input_tokens: int
20
+ output_tokens: int
21
+ total_tokens: int
22
+
23
+
24
+ class OpenAIModelInfo(Schema):
25
+ """OpenAI model info format."""
26
+
27
+ id: str
28
+ object: str = "model"
29
+ owned_by: str = "agentpool"
30
+ created: int
31
+ description: str | None = None
32
+ permissions: list[str] = Field(default_factory=list)
33
+
34
+
35
+ class FunctionCall(Schema):
36
+ """Function call information."""
37
+
38
+ name: str
39
+ arguments: str
40
+
41
+
42
+ class ToolCall(Schema):
43
+ """Tool call information."""
44
+
45
+ id: str
46
+ type: str = "function"
47
+ function: FunctionCall
48
+
49
+
50
+ class OpenAIMessage(Schema):
51
+ """OpenAI chat message format."""
52
+
53
+ role: Literal["system", "user", "assistant", "tool", "function"]
54
+ content: str | None # Content can be null in function calls
55
+ name: str | None = None
56
+ function_call: FunctionCall | None = None
57
+ tool_calls: list[ToolCall] | None = None
58
+
59
+
60
+ class ChatCompletionRequest(Schema):
61
+ """OpenAI chat completion request."""
62
+
63
+ model: str
64
+ messages: list[OpenAIMessage]
65
+ stream: bool = False
66
+ temperature: float | None = None
67
+ max_tokens: int | None = None
68
+ tools: list[dict[str, Any]] | None = None
69
+ tool_choice: str | None = Field(default="auto")
70
+
71
+
72
+ class Choice(Schema):
73
+ """Choice in a completion response."""
74
+
75
+ index: int = 0
76
+ message: OpenAIMessage
77
+ finish_reason: str = "stop"
78
+
79
+
80
+ class ChatCompletionResponse(Schema):
81
+ """OpenAI chat completion response."""
82
+
83
+ id: str
84
+ object: str = "chat.completion"
85
+ created: int
86
+ model: str
87
+ choices: list[Choice]
88
+ usage: CompletionUsage | None = None
89
+
90
+
91
+ class ChatCompletionChunk(Schema):
92
+ """Chunk of a streaming chat completion."""
93
+
94
+ id: str
95
+ object: str = "chat.completion.chunk"
96
+ created: int
97
+ model: str
98
+ choices: list[dict[str, Any]]
@@ -0,0 +1 @@
1
+ """Responses API."""
@@ -0,0 +1,74 @@
1
+ """OpenAI-compatible responses endpoint."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+ from uuid import uuid4
7
+
8
+ from agentpool_server.openai_api_server.responses.models import (
9
+ Response,
10
+ ResponseMessage,
11
+ ResponseOutputText,
12
+ ResponseToolCall,
13
+ ResponseUsage,
14
+ )
15
+
16
+
17
+ if TYPE_CHECKING:
18
+ from agentpool.agents import Agent
19
+ from agentpool.agents.acp_agent import ACPAgent
20
+ from agentpool_server.openai_api_server.responses.models import ResponseRequest
21
+
22
+
23
+ async def handle_request(request: ResponseRequest, agent: Agent[Any, Any] | ACPAgent) -> Response:
24
+ from fastapi import HTTPException
25
+
26
+ match request.input:
27
+ case str():
28
+ content = request.input
29
+ case list():
30
+ # Get last text content from structured input
31
+ last = request.input[-1]["content"]
32
+ text_parts = [p["text"] for p in last if p["type"] == "input_text"]
33
+ content = "\n".join(text_parts)
34
+ case _:
35
+ raise HTTPException(400, "Invalid input format")
36
+
37
+ message = await agent.run(content)
38
+ text = ResponseOutputText(text=str(message.content))
39
+ output_msg_id = f"msg_{uuid4().hex}"
40
+ output_msg = ResponseMessage(id=output_msg_id, role="assistant", content=[text])
41
+ output: list[ResponseMessage | ResponseToolCall] = [output_msg]
42
+
43
+ calls = [
44
+ ResponseToolCall(type=f"{tc.tool_name}_call", id=tc.tool_call_id)
45
+ for tc in message.get_tool_calls()
46
+ ]
47
+ output = calls + output # type: ignore
48
+
49
+ usage_info: ResponseUsage | None = None
50
+ if message.cost_info and (token_usage := message.cost_info.token_usage):
51
+ # Map the keys correctly from agent's dict to ResponseUsage TypedDict
52
+ input_tk = token_usage.input_tokens
53
+ output_tk = token_usage.output_tokens
54
+ total_tk = token_usage.total_tokens
55
+
56
+ usage_info = ResponseUsage(
57
+ input_tokens=input_tk,
58
+ input_tokens_details={},
59
+ output_tokens=output_tk,
60
+ output_tokens_details={},
61
+ total_tokens=total_tk,
62
+ )
63
+
64
+ return Response(
65
+ model=request.model,
66
+ output=output,
67
+ instructions=request.instructions,
68
+ max_output_tokens=request.max_output_tokens,
69
+ temperature=request.temperature,
70
+ tools=request.tools,
71
+ tool_choice=request.tool_choice,
72
+ usage=usage_info,
73
+ metadata=request.metadata,
74
+ )
@@ -0,0 +1,96 @@
1
+ """Models for OpenAI responses endpoint."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+ from datetime import datetime
7
+ from typing import Any, Literal, TypedDict
8
+ from uuid import uuid4
9
+
10
+ from pydantic import Field
11
+ from schemez import Schema
12
+
13
+
14
+ class InputText(Schema):
15
+ """Text input part."""
16
+
17
+ type: Literal["input_text"] = "input_text"
18
+ text: str
19
+
20
+
21
+ class InputImage(Schema):
22
+ """Image input part."""
23
+
24
+ type: Literal["input_image"] = "input_image"
25
+ image_url: str
26
+
27
+
28
+ class ResponseOutputText(Schema):
29
+ """Text output part."""
30
+
31
+ type: Literal["output_text"] = "output_text"
32
+ text: str
33
+ annotations: list[dict[str, Any]] = Field(default_factory=list)
34
+
35
+
36
+ class ResponseToolCall(Schema):
37
+ """Tool call in response."""
38
+
39
+ type: str # web_search_call etc
40
+ id: str
41
+ status: Literal["completed", "error"] = "completed"
42
+
43
+
44
+ class ResponseMessage(Schema):
45
+ """ResponseMessage in response."""
46
+
47
+ type: Literal["message"] = "message"
48
+ id: str
49
+ status: Literal["completed", "error"] = "completed"
50
+ role: Literal["user", "assistant", "system"]
51
+ content: list[ResponseOutputText]
52
+
53
+
54
+ class ResponseUsage(TypedDict):
55
+ """Token usage information."""
56
+
57
+ input_tokens: int
58
+ input_tokens_details: dict[str, int]
59
+ output_tokens: int
60
+ output_tokens_details: dict[str, int]
61
+ total_tokens: int
62
+
63
+
64
+ class ResponseRequest(Schema):
65
+ """Request for /v1/responses endpoint."""
66
+
67
+ model: str
68
+ input: str | list[dict[str, Any]]
69
+ instructions: str | None = None
70
+ stream: bool = False
71
+ temperature: float = 1.0
72
+ tools: list[dict[str, Any]] = Field(default_factory=list)
73
+ tool_choice: str = "auto"
74
+ max_output_tokens: int | None = None
75
+ metadata: dict[str, str] = Field(default_factory=dict)
76
+
77
+
78
+ class Response(Schema):
79
+ """Response from /v1/responses endpoint."""
80
+
81
+ id: str = Field(default_factory=lambda: f"resp_{uuid4().hex}")
82
+ object: Literal["response"] = "response"
83
+ created_at: int = Field(default_factory=lambda: int(datetime.now().timestamp()))
84
+ status: Literal["completed", "error"] = "completed"
85
+ error: str | None = None
86
+ model: str
87
+ output: Sequence[ResponseMessage | ResponseToolCall]
88
+
89
+ # Include all the request parameters
90
+ instructions: str | None = None
91
+ max_output_tokens: int | None = None
92
+ temperature: float = 1.0
93
+ tools: list[dict[str, Any]] = Field(default_factory=list)
94
+ tool_choice: str = "auto"
95
+ usage: ResponseUsage | None = None
96
+ metadata: dict[str, str] = Field(default_factory=dict)
@@ -0,0 +1,242 @@
1
+ """OpenAI-compatible API server for AgentPool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Annotated, Any
6
+
7
+ import anyenv
8
+
9
+ from agentpool.log import get_logger
10
+ from agentpool_server import BaseServer
11
+ from agentpool_server.openai_api_server.completions.helpers import stream_response
12
+ from agentpool_server.openai_api_server.completions.models import (
13
+ ChatCompletionResponse,
14
+ Choice,
15
+ OpenAIMessage,
16
+ OpenAIModelInfo,
17
+ )
18
+ from agentpool_server.openai_api_server.responses.helpers import handle_request
19
+
20
+
21
+ if TYPE_CHECKING:
22
+ from fastapi import Header, Response
23
+
24
+ from agentpool import AgentPool
25
+ from agentpool_server.openai_api_server.completions.models import ChatCompletionRequest
26
+ from agentpool_server.openai_api_server.responses.models import (
27
+ Response as ResponsesResponse,
28
+ ResponseRequest,
29
+ )
30
+ logger = get_logger(__name__)
31
+
32
+
33
+ class OpenAIAPIServer(BaseServer):
34
+ """OpenAI-compatible API server backed by AgentPool.
35
+
36
+ Provides both chat completions and responses endpoints.
37
+ """
38
+
39
+ def __init__(
40
+ self,
41
+ pool: AgentPool,
42
+ *,
43
+ name: str | None = None,
44
+ host: str = "0.0.0.0",
45
+ port: int = 8000,
46
+ cors: bool = True,
47
+ docs: bool = True,
48
+ api_key: str | None = None,
49
+ raise_exceptions: bool = False,
50
+ ) -> None:
51
+ """Initialize OpenAI-compatible server.
52
+
53
+ Args:
54
+ pool: AgentPool containing available agents
55
+ name: Optional Server name (auto-generated if None)
56
+ host: Host to bind server to
57
+ port: Port to bind server to
58
+ cors: Whether to enable CORS middleware
59
+ docs: Whether to enable API documentation endpoints
60
+ api_key: Optional API key for authentication
61
+ raise_exceptions: Whether to raise exceptions during server start
62
+ """
63
+ from fastapi import Depends, FastAPI
64
+ import logfire
65
+
66
+ super().__init__(pool, name=name, raise_exceptions=raise_exceptions)
67
+ self.host = host
68
+ self.port = port
69
+ self.api_key = api_key
70
+ self.app = FastAPI()
71
+ logfire.instrument_fastapi(self.app)
72
+
73
+ if cors:
74
+ from fastapi.middleware.cors import CORSMiddleware
75
+
76
+ self.app.add_middleware(
77
+ CORSMiddleware,
78
+ allow_origins=["*"],
79
+ allow_credentials=True,
80
+ allow_methods=["*"],
81
+ allow_headers=["*"],
82
+ )
83
+
84
+ if not docs:
85
+ self.app.docs_url = None
86
+ self.app.redoc_url = None
87
+
88
+ # Add routes with authentication dependency
89
+ dep = Depends(self.verify_api_key)
90
+ self.app.get("/v1/models")(self.list_models)
91
+ self.app.post("/v1/chat/completions", dependencies=[dep], response_model=None)(
92
+ self.create_chat_completion
93
+ )
94
+ self.app.post("/v1/responses", dependencies=[dep])(self.create_response)
95
+
96
+ def verify_api_key(
97
+ self, authorization: Annotated[str | None, Header(alias="Authorization")] = None
98
+ ) -> None:
99
+ """Verify API key if configured."""
100
+ from fastapi import HTTPException
101
+
102
+ if not authorization:
103
+ raise HTTPException(401, "Missing API key")
104
+ if not authorization.startswith("Bearer "):
105
+ raise HTTPException(401, "Invalid authorization format")
106
+ if self.api_key and authorization != f"Bearer {self.api_key}":
107
+ raise HTTPException(401, "Invalid API key")
108
+
109
+ async def list_models(self) -> dict[str, Any]:
110
+ """List available agents as models."""
111
+ models = []
112
+ for name, agent in self.pool.all_agents.items():
113
+ info = OpenAIModelInfo(id=name, created=0, description=agent.description)
114
+ models.append(info)
115
+ return {"object": "list", "data": models}
116
+
117
+ async def create_chat_completion(self, request: ChatCompletionRequest) -> Response:
118
+ """Handle chat completion requests."""
119
+ from fastapi import HTTPException, Response
120
+ from fastapi.responses import StreamingResponse
121
+
122
+ try:
123
+ agent = self.pool.all_agents[request.model]
124
+ except KeyError:
125
+ raise HTTPException(404, f"Model {request.model} not found") from None
126
+
127
+ # Just take the last message content - let agent handle history
128
+ content = request.messages[-1].content or ""
129
+ if request.stream:
130
+ return StreamingResponse(
131
+ stream_response(agent, content, request),
132
+ media_type="text/event-stream",
133
+ )
134
+ try:
135
+ response = await agent.run(content)
136
+ message = OpenAIMessage(role="assistant", content=str(response.content))
137
+ completion_response = ChatCompletionResponse(
138
+ id=response.message_id,
139
+ created=int(response.timestamp.timestamp()),
140
+ model=request.model,
141
+ choices=[Choice(message=message)],
142
+ usage=response.cost_info.token_usage if response.cost_info else None, # pyright: ignore
143
+ )
144
+ json = completion_response.model_dump_json()
145
+ return Response(content=json, media_type="application/json")
146
+ except Exception as e:
147
+ self.log.exception("Error processing chat completion")
148
+ raise HTTPException(500, f"Error: {e!s}") from e
149
+
150
+ async def create_response(self, req_body: ResponseRequest) -> ResponsesResponse:
151
+ """Handle response creation requests."""
152
+ from fastapi import HTTPException
153
+
154
+ try:
155
+ agent = self.pool.agents[req_body.model]
156
+ return await handle_request(req_body, agent)
157
+ except KeyError:
158
+ raise HTTPException(404, f"Model {req_body.model} not found") from None
159
+ except Exception as e:
160
+ raise HTTPException(500, str(e)) from e
161
+
162
+ async def _start_async(self) -> None:
163
+ """Start the server (blocking async - runs until stopped)."""
164
+ import uvicorn
165
+
166
+ config = uvicorn.Config(
167
+ self.app,
168
+ host=self.host,
169
+ port=self.port,
170
+ log_level="info",
171
+ ws="websockets-sansio",
172
+ )
173
+ server = uvicorn.Server(config)
174
+ await server.serve()
175
+
176
+
177
+ if __name__ == "__main__":
178
+ import anyio
179
+ import httpx
180
+
181
+ from agentpool import AgentPool
182
+
183
+ async def test_completions() -> None:
184
+ """Test the chat completions API."""
185
+ async with httpx.AsyncClient() as client:
186
+ response = await client.post(
187
+ "http://localhost:8000/v1/chat/completions",
188
+ headers={"Authorization": "Bearer dummy"},
189
+ json={
190
+ "model": "gpt-5-mini",
191
+ "messages": [{"role": "user", "content": "Tell me a joke"}],
192
+ "stream": True,
193
+ },
194
+ timeout=30.0,
195
+ )
196
+
197
+ if response.is_success:
198
+ for line in response.iter_lines():
199
+ if line.startswith("data: "):
200
+ data = line[6:] # Remove "data: " prefix
201
+ if data == "[DONE]":
202
+ break
203
+ chunk = anyenv.load_json(data, return_type=dict)
204
+ delta = chunk["choices"][0]["delta"]
205
+ if "content" in delta:
206
+ print(delta["content"], end="", flush=True)
207
+ print("\n")
208
+ else:
209
+ print("Completions error:", response.text)
210
+
211
+ async def test_responses() -> None:
212
+ """Test the responses API."""
213
+ timeout = httpx.Timeout(30.0, connect=5.0)
214
+ async with httpx.AsyncClient(timeout=timeout) as client:
215
+ response = await client.post(
216
+ "http://localhost:8000/v1/responses",
217
+ headers={"Authorization": "Bearer dummy"},
218
+ json={
219
+ "model": "gpt-5-mini",
220
+ "input": "Tell me a three sentence bedtime story about a unicorn.",
221
+ },
222
+ )
223
+ print("Responses result:", response.text)
224
+
225
+ if not response.is_success:
226
+ print("Responses error:", response.text)
227
+
228
+ async def main() -> None:
229
+ """Run server and test both endpoints."""
230
+ pool = AgentPool()
231
+ await pool.add_agent("gpt-5-mini", model="openai:gpt-5-mini")
232
+ async with (
233
+ OpenAIAPIServer(pool, host="0.0.0.0", port=8000) as server,
234
+ server.run_context(),
235
+ ):
236
+ await anyio.sleep(1) # Wait for server to start
237
+ print("Testing completions endpoint...")
238
+ await test_completions()
239
+ print("\nTesting responses endpoint...")
240
+ await test_responses()
241
+
242
+ anyio.run(main)
File without changes
@@ -0,0 +1,9 @@
1
+ """Storage provider package."""
2
+
3
+ from agentpool_storage.base import StorageProvider
4
+ from agentpool_storage.session_store import SQLSessionStore
5
+
6
+ __all__ = [
7
+ "SQLSessionStore",
8
+ "StorageProvider",
9
+ ]