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.
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
acp/README.md ADDED
@@ -0,0 +1,64 @@
1
+ ## ACP Protocol Features
2
+
3
+ ### JSON-RPC 2.0 Communication
4
+
5
+ ACP uses JSON-RPC 2.0 over newline-delimited JSON streams:
6
+
7
+ ```json
8
+ // Initialize request
9
+ {"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":1},"id":1}
10
+
11
+ // Initialize response
12
+ {"jsonrpc":"2.0","result":{"protocolVersion":1,"agentCapabilities":{...}},"id":1}
13
+
14
+ // Create session
15
+ {"jsonrpc":"2.0","method":"session/new","params":{"cwd":"/tmp"},"id":2}
16
+
17
+ // Session response
18
+ {"jsonrpc":"2.0","result":{"sessionId":"sess_abc123"},"id":2}
19
+
20
+ // Send prompt
21
+ {"jsonrpc":"2.0","method":"session/prompt","params":{
22
+ "sessionId":"sess_abc123",
23
+ "prompt":[{"type":"text","text":"Hello!"}]
24
+ },"id":3}
25
+
26
+ // Streaming responses via session updates
27
+ {"jsonrpc":"2.0","method":"session/update","params":{
28
+ "sessionId":"sess_abc123",
29
+ "update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"Hi there!"}}
30
+ }}
31
+ ```
32
+
33
+ ### Content Blocks
34
+
35
+ ACP supports rich content blocks:
36
+
37
+ ```python
38
+ # Text content
39
+ TextContent(text="Hello world")
40
+
41
+ # Image content
42
+ ImageContent(type="image", data="base64...", mimeType="image/png")
43
+
44
+ # Audio content
45
+ AudioContent(type="audio", data="base64...", mimeType="audio/wav")
46
+
47
+ # Resource links
48
+ ResourceContentBlock(type="resource_link", uri="file:///path/to/file", name="document.pdf")
49
+
50
+ # Embedded resources
51
+ EmbeddedResource(type="resource", resource=TextResourceContents(uri="...", text="..."))
52
+ ```
53
+
54
+
55
+ ### MCP Server Integration
56
+
57
+ ACP provides seamless integration with MCP (Model Context Protocol) servers, allowing agents to access external tools and data sources. MCP servers are automatically connected when creating sessions.
58
+
59
+ #### How MCP Integration Works
60
+
61
+ 1. **Session Creation**: Client provides MCP server configurations in `session/new`
62
+ 2. **Automatic Connection**: ACP server connects to all specified MCP servers
63
+ 3. **Tool Integration**: MCP tools become available to the agent automatically
64
+ 4. **Transparent Usage**: Agent can use MCP tools just like built-in tools
acp/__init__.py ADDED
@@ -0,0 +1,172 @@
1
+ """Agent Client protocol (ACP) implementation."""
2
+
3
+ from acp.client import DefaultACPClient, HeadlessACPClient, NoOpClient, ClientSideConnection
4
+ from acp.agent import AgentSideConnection
5
+ from acp.bridge import ACPBridge, BridgeSettings
6
+ from acp.filesystem import ACPFileSystem, ACPPath
7
+ from acp.agent.protocol import Agent
8
+ from acp.client.protocol import Client
9
+ from acp.terminal_handle import TerminalHandle
10
+ from acp.tool_call_state import ToolCallState
11
+ from acp.schema import (
12
+ AuthenticateRequest,
13
+ AuthenticateResponse,
14
+ CancelNotification,
15
+ CreateTerminalRequest,
16
+ ClientCapabilities,
17
+ SessionMode,
18
+ FileSystemCapability,
19
+ AgentMessageChunk,
20
+ UserMessageChunk,
21
+ TextContentBlock,
22
+ SessionModeState,
23
+ Implementation,
24
+ ToolCallLocation,
25
+ EnvVariable,
26
+ StdioMcpServer,
27
+ SseMcpServer,
28
+ HttpMcpServer,
29
+ CreateTerminalResponse,
30
+ InitializeRequest,
31
+ PlanEntryPriority,
32
+ PlanEntryStatus,
33
+ InitializeResponse,
34
+ KillTerminalCommandRequest,
35
+ KillTerminalCommandResponse,
36
+ LoadSessionRequest,
37
+ LoadSessionResponse,
38
+ ModelInfo,
39
+ AllowedOutcome,
40
+ DeniedOutcome,
41
+ NewSessionRequest,
42
+ NewSessionResponse,
43
+ PromptRequest,
44
+ PromptResponse,
45
+ ReadTextFileRequest,
46
+ ReadTextFileResponse,
47
+ ReleaseTerminalRequest,
48
+ ReleaseTerminalResponse,
49
+ RequestPermissionRequest,
50
+ RequestPermissionResponse,
51
+ SessionModelState,
52
+ SessionNotification,
53
+ SetSessionModelRequest,
54
+ SetSessionModelResponse,
55
+ SetSessionModeRequest,
56
+ SetSessionModeResponse,
57
+ TerminalOutputRequest,
58
+ TerminalOutputResponse,
59
+ WaitForTerminalExitRequest,
60
+ WaitForTerminalExitResponse,
61
+ WriteTextFileRequest,
62
+ WriteTextFileResponse,
63
+ PermissionOption,
64
+ PROTOCOL_VERSION,
65
+ AgentMethod,
66
+ ClientMethod,
67
+ Annotations,
68
+ AvailableCommand,
69
+ PlanEntry,
70
+ ToolCallContent,
71
+ ToolCallKind,
72
+ ToolCallStatus,
73
+ ToolCall,
74
+ )
75
+ from acp.stdio import stdio_streams, run_agent, connect_to_agent
76
+ from acp.exceptions import RequestError
77
+
78
+ __version__ = "0.0.1"
79
+
80
+ __all__ = [ # noqa: RUF022
81
+ # bridge
82
+ "ACPBridge",
83
+ "BridgeSettings",
84
+ # client implementations
85
+ "DefaultACPClient",
86
+ "HeadlessACPClient",
87
+ "NoOpClient",
88
+ # constants
89
+ "PROTOCOL_VERSION",
90
+ # literal types
91
+ "AgentMethod",
92
+ "ClientMethod",
93
+ # types
94
+ "Annotations",
95
+ "AvailableCommand",
96
+ "PlanEntry",
97
+ "AllowedOutcome",
98
+ "ToolCall",
99
+ "DeniedOutcome",
100
+ "ToolCallContent",
101
+ "PermissionOption",
102
+ "ToolCallKind",
103
+ "PlanEntryPriority",
104
+ "PlanEntryStatus",
105
+ "ToolCallStatus",
106
+ "InitializeRequest",
107
+ "ToolCallLocation",
108
+ "InitializeResponse",
109
+ "EnvVariable",
110
+ "HttpMcpServer",
111
+ "StdioMcpServer",
112
+ "SseMcpServer",
113
+ "NewSessionRequest",
114
+ "AgentMessageChunk",
115
+ "UserMessageChunk",
116
+ "TextContentBlock",
117
+ "NewSessionResponse",
118
+ "LoadSessionRequest",
119
+ "LoadSessionResponse",
120
+ "AuthenticateRequest",
121
+ "AuthenticateResponse",
122
+ "PromptRequest",
123
+ "ClientCapabilities",
124
+ "SessionModeState",
125
+ "SessionMode",
126
+ "Implementation",
127
+ "PromptResponse",
128
+ "WriteTextFileRequest",
129
+ "WriteTextFileResponse",
130
+ "ReadTextFileRequest",
131
+ "ReadTextFileResponse",
132
+ "RequestPermissionRequest",
133
+ "RequestPermissionResponse",
134
+ "CancelNotification",
135
+ "SessionNotification",
136
+ "SetSessionModeRequest",
137
+ "SetSessionModeResponse",
138
+ # model types
139
+ "ModelInfo",
140
+ "SessionModelState",
141
+ "SetSessionModelRequest",
142
+ "SetSessionModelResponse",
143
+ # terminal types
144
+ "CreateTerminalRequest",
145
+ "CreateTerminalResponse",
146
+ "TerminalOutputRequest",
147
+ "TerminalOutputResponse",
148
+ "WaitForTerminalExitRequest",
149
+ "WaitForTerminalExitResponse",
150
+ "KillTerminalCommandRequest",
151
+ "KillTerminalCommandResponse",
152
+ "ReleaseTerminalRequest",
153
+ "ReleaseTerminalResponse",
154
+ # core
155
+ "AgentSideConnection",
156
+ "ClientSideConnection",
157
+ "RequestError",
158
+ "Agent",
159
+ "Client",
160
+ "TerminalHandle",
161
+ "ToolCallState",
162
+ # connection helpers (recommended)
163
+ "run_agent",
164
+ "connect_to_agent",
165
+ # split protocols
166
+ "FileSystemCapability",
167
+ # stdio helper
168
+ "stdio_streams",
169
+ # filesystem
170
+ "ACPFileSystem",
171
+ "ACPPath",
172
+ ]
acp/__main__.py ADDED
@@ -0,0 +1,10 @@
1
+ """ACP package main entry point.
2
+
3
+ Allows running the ACP debug server with:
4
+ python -m acp
5
+ """
6
+
7
+ if __name__ == "__main__":
8
+ from acp.agent.implementations.debug_server.cli import main
9
+
10
+ main()
acp/acp_requests.py ADDED
@@ -0,0 +1,285 @@
1
+ """ACP request utilities for simplified client interactions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ from typing import TYPE_CHECKING
7
+
8
+ from acp.schema import (
9
+ CreateTerminalRequest,
10
+ EnvVariable,
11
+ KillTerminalCommandRequest,
12
+ PermissionOption,
13
+ ReadTextFileRequest,
14
+ ReleaseTerminalRequest,
15
+ RequestPermissionRequest,
16
+ TerminalOutputRequest,
17
+ ToolCall,
18
+ WaitForTerminalExitRequest,
19
+ WriteTextFileRequest,
20
+ )
21
+ from acp.terminal_handle import TerminalHandle
22
+ from agentpool.log import get_logger
23
+
24
+
25
+ if TYPE_CHECKING:
26
+ from acp import (
27
+ Client,
28
+ RequestPermissionResponse,
29
+ TerminalOutputResponse,
30
+ WaitForTerminalExitResponse,
31
+ )
32
+
33
+ logger = get_logger(__name__)
34
+
35
+
36
+ RULES_FILE_NAMES = [
37
+ ".rules",
38
+ "CLAUDE.md",
39
+ "AGENT.md",
40
+ "AGENTS.md",
41
+ "GEMINI.md",
42
+ ".cursorrules",
43
+ ".windsurfrules",
44
+ ".clinerules",
45
+ ".github/copilot-instructions.md",
46
+ ]
47
+
48
+
49
+ class ACPRequests:
50
+ """Clean API for creating and sending ACP session requests.
51
+
52
+ Provides convenient methods for common request patterns,
53
+ handling both creation and sending in a single call.
54
+ """
55
+
56
+ def __init__(self, client: Client, session_id: str) -> None:
57
+ """Initialize requests helper.
58
+
59
+ Args:
60
+ client: ACP client
61
+ session_id: Session ID
62
+ """
63
+ self.client = client
64
+ self.id = session_id
65
+
66
+ async def read_text_file(
67
+ self,
68
+ path: str,
69
+ *,
70
+ limit: int | None = None,
71
+ line: int | None = None,
72
+ ) -> str:
73
+ """Read text content from a file.
74
+
75
+ Args:
76
+ path: File path to read
77
+ limit: Maximum number of lines to read
78
+ line: Line number to start reading from (1-based)
79
+
80
+ Returns:
81
+ File content as string
82
+ """
83
+ request = ReadTextFileRequest(
84
+ session_id=self.id,
85
+ path=path,
86
+ limit=limit,
87
+ line=line,
88
+ )
89
+ response = await self.client.read_text_file(request)
90
+ return response.content
91
+
92
+ async def read_agent_rules(self, cwd: str) -> str | None:
93
+ """Check common agent rule files and return content of first match.
94
+
95
+ Args:
96
+ cwd: Current working directory
97
+
98
+ Returns:
99
+ Agent rules as string or None if not found
100
+ """
101
+ for filename in RULES_FILE_NAMES:
102
+ if info := await self.read_text_file(f"{cwd}/{filename}"):
103
+ return info
104
+ return None
105
+
106
+ async def write_text_file(self, path: str, content: str) -> None:
107
+ """Write text content to a file.
108
+
109
+ Args:
110
+ path: File path to write
111
+ content: Text content to write
112
+ """
113
+ request = WriteTextFileRequest(session_id=self.id, path=path, content=content)
114
+ await self.client.write_text_file(request)
115
+
116
+ async def create_terminal(
117
+ self,
118
+ command: str,
119
+ *,
120
+ args: list[str] | None = None,
121
+ cwd: str | None = None,
122
+ env: dict[str, str] | None = None,
123
+ output_byte_limit: int | None = None,
124
+ ) -> TerminalHandle:
125
+ """Create a new terminal session.
126
+
127
+ Args:
128
+ command: Command to run. For shell commands (pipes, redirects, etc.),
129
+ pass the full command string and omit args.
130
+ args: Command arguments, appended to command.
131
+ cwd: Working directory for terminal
132
+ env: Environment variables for terminal
133
+ output_byte_limit: Maximum bytes to capture from output
134
+ """
135
+ request = CreateTerminalRequest(
136
+ session_id=self.id,
137
+ command=command,
138
+ # Only include args if non-empty, following claude-code-acp pattern.
139
+ # When args is None/empty, ACP clients interpret command as a shell command.
140
+ args=args or None,
141
+ cwd=cwd,
142
+ env=[EnvVariable(name=k, value=v) for k, v in (env or {}).items()],
143
+ output_byte_limit=output_byte_limit,
144
+ )
145
+ response = await self.client.create_terminal(request)
146
+ return TerminalHandle(terminal_id=response.terminal_id, requests=self)
147
+
148
+ async def terminal_output(self, terminal_id: str) -> TerminalOutputResponse:
149
+ """Get output from a terminal session.
150
+
151
+ Args:
152
+ terminal_id: Terminal identifier
153
+
154
+ Returns:
155
+ Terminal output response
156
+ """
157
+ request = TerminalOutputRequest(session_id=self.id, terminal_id=terminal_id)
158
+ return await self.client.terminal_output(request)
159
+
160
+ async def wait_for_terminal_exit(
161
+ self,
162
+ terminal_id: str,
163
+ ) -> WaitForTerminalExitResponse:
164
+ """Wait for a terminal to exit.
165
+
166
+ Args:
167
+ terminal_id: Terminal identifier
168
+
169
+ Returns:
170
+ Terminal exit response with exit_code
171
+ """
172
+ request = WaitForTerminalExitRequest(session_id=self.id, terminal_id=terminal_id)
173
+ return await self.client.wait_for_terminal_exit(request)
174
+
175
+ async def kill_terminal(self, terminal_id: str) -> None:
176
+ """Kill a terminal session.
177
+
178
+ Args:
179
+ terminal_id: Terminal identifier to kill
180
+ """
181
+ request = KillTerminalCommandRequest(session_id=self.id, terminal_id=terminal_id)
182
+ await self.client.kill_terminal(request)
183
+
184
+ async def release_terminal(self, terminal_id: str) -> None:
185
+ """Release a terminal session.
186
+
187
+ Args:
188
+ terminal_id: Terminal identifier to release
189
+ """
190
+ request = ReleaseTerminalRequest(session_id=self.id, terminal_id=terminal_id)
191
+ await self.client.release_terminal(request)
192
+
193
+ async def run_command(
194
+ self,
195
+ command: str,
196
+ *,
197
+ args: list[str] | None = None,
198
+ cwd: str | None = None,
199
+ env: dict[str, str] | None = None,
200
+ output_byte_limit: int | None = None,
201
+ timeout_seconds: int | None = None,
202
+ ) -> tuple[str, int | None]:
203
+ """Execute a shell command and return output and exit code.
204
+
205
+ This is a high-level convenience method that creates a terminal,
206
+ runs the command, waits for completion, and cleans up.
207
+
208
+ Args:
209
+ command: Command to execute
210
+ args: Command arguments
211
+ cwd: Working directory for command execution
212
+ env: Environment variables for command execution
213
+ output_byte_limit: Maximum bytes to capture from output
214
+ timeout_seconds: Command timeout in seconds
215
+
216
+ Returns:
217
+ Tuple of (output, exit_code)
218
+ """
219
+ terminal_handle = await self.create_terminal(
220
+ command=command,
221
+ args=args,
222
+ cwd=cwd,
223
+ env=env,
224
+ output_byte_limit=output_byte_limit,
225
+ )
226
+ terminal_id = terminal_handle.terminal_id
227
+
228
+ try:
229
+ if timeout_seconds: # Wait for completion (with optional timeout)
230
+ try:
231
+ exit_result = await asyncio.wait_for(
232
+ self.wait_for_terminal_exit(terminal_id),
233
+ timeout=timeout_seconds,
234
+ )
235
+ except TimeoutError: # Kill on timeout and get partial output
236
+ await self.kill_terminal(terminal_id)
237
+ output_response = await self.terminal_output(terminal_id)
238
+ return output_response.output, None
239
+ else:
240
+ exit_result = await self.wait_for_terminal_exit(terminal_id)
241
+
242
+ output_response = await self.terminal_output(terminal_id)
243
+ return output_response.output, exit_result.exit_code
244
+
245
+ finally: # Always release terminal
246
+ await self.release_terminal(terminal_id)
247
+
248
+ async def request_permission(
249
+ self,
250
+ tool_call_id: str,
251
+ *,
252
+ title: str | None = None,
253
+ options: list[PermissionOption] | None = None,
254
+ ) -> RequestPermissionResponse:
255
+ """Request permission from user before executing a tool call.
256
+
257
+ Args:
258
+ tool_call_id: Unique identifier for the tool call
259
+ title: Human-readable description of the operation
260
+ options: Available permission options (defaults to allow/reject once)
261
+
262
+ Returns:
263
+ Permission response with user's decision
264
+ """
265
+ if options is None:
266
+ options = [
267
+ PermissionOption(
268
+ option_id="allow-once",
269
+ name="Allow once",
270
+ kind="allow_once",
271
+ ),
272
+ PermissionOption(
273
+ option_id="reject-once",
274
+ name="Reject",
275
+ kind="reject_once",
276
+ ),
277
+ ]
278
+
279
+ tool_call = ToolCall(tool_call_id=tool_call_id, title=title)
280
+ request = RequestPermissionRequest(
281
+ session_id=self.id,
282
+ tool_call=tool_call,
283
+ options=options,
284
+ )
285
+ return await self.client.request_permission(request)
acp/agent/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ """Agent (Server) ACP Connection."""
2
+
3
+ from acp.agent.protocol import Agent
4
+ from acp.agent.connection import AgentSideConnection
5
+
6
+ __all__ = ["Agent", "AgentSideConnection"]