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,266 @@
1
+ """Headless ACP client implementation with real filesystem and terminal operations.
2
+
3
+ This module provides a headless client implementation that performs actual
4
+ filesystem operations and uses ProcessManager for real terminal execution,
5
+ making it ideal for testing and standalone usage.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from pathlib import Path
11
+ from typing import TYPE_CHECKING, Any
12
+ import uuid
13
+
14
+ from anyenv import ProcessManager
15
+
16
+ from acp.client.protocol import Client
17
+ from acp.schema import (
18
+ CreateTerminalResponse,
19
+ KillTerminalCommandResponse,
20
+ ReadTextFileResponse,
21
+ ReleaseTerminalResponse,
22
+ RequestPermissionResponse,
23
+ TerminalOutputResponse,
24
+ WaitForTerminalExitResponse,
25
+ WriteTextFileResponse,
26
+ )
27
+ from agentpool.log import get_logger
28
+
29
+
30
+ if TYPE_CHECKING:
31
+ from acp.schema import (
32
+ CreateTerminalRequest,
33
+ KillTerminalCommandRequest,
34
+ ReadTextFileRequest,
35
+ ReleaseTerminalRequest,
36
+ RequestPermissionRequest,
37
+ SessionNotification,
38
+ TerminalOutputRequest,
39
+ WaitForTerminalExitRequest,
40
+ WriteTextFileRequest,
41
+ )
42
+
43
+ logger = get_logger(__name__)
44
+
45
+
46
+ class HeadlessACPClient(Client):
47
+ """Headless ACP client with real filesystem and terminal operations.
48
+
49
+ This client implementation:
50
+ - Performs real filesystem operations
51
+ - Uses ProcessManager for actual terminal/command execution
52
+ - Automatically grants permissions for testing
53
+ - Suitable for testing and standalone usage
54
+ """
55
+
56
+ def __init__(
57
+ self,
58
+ *,
59
+ working_dir: Path | str | None = None,
60
+ allow_file_operations: bool = True,
61
+ auto_grant_permissions: bool = True,
62
+ ) -> None:
63
+ """Initialize headless ACP client.
64
+
65
+ Args:
66
+ working_dir: Default working directory for operations
67
+ allow_file_operations: Whether to allow file read/write operations
68
+ auto_grant_permissions: Whether to automatically grant all permissions
69
+ """
70
+ self.working_dir = Path(working_dir) if working_dir else Path.cwd()
71
+ self.allow_file_operations = allow_file_operations
72
+ self.auto_grant_permissions = auto_grant_permissions
73
+ # Process management for terminals
74
+ self.process_manager = ProcessManager()
75
+ self.terminals: dict[str, str] = {} # terminal_id -> process_id
76
+ # Tracking for testing/debugging
77
+ self.notifications: list[SessionNotification] = []
78
+ self.permission_requests: list[RequestPermissionRequest] = []
79
+
80
+ async def request_permission(
81
+ self, params: RequestPermissionRequest
82
+ ) -> RequestPermissionResponse:
83
+ """Handle permission requests. Grants if auto_grant_permissions is True."""
84
+ self.permission_requests.append(params)
85
+ tool_name = params.tool_call.title or "operation"
86
+ logger.info("Permission requested", tool_name=tool_name)
87
+ if self.auto_grant_permissions and params.options:
88
+ # Grant permission using first available option
89
+ option_id = params.options[0].option_id
90
+ logger.debug("Auto-granting permission", tool_name=tool_name)
91
+ return RequestPermissionResponse.allowed(option_id)
92
+ logger.debug("Denying permission", tool_name=tool_name)
93
+ return RequestPermissionResponse.denied()
94
+
95
+ async def session_update(self, params: SessionNotification) -> None:
96
+ """Handle session update notifications."""
97
+ typ = type(params.update).__name__
98
+ logger.debug("Session update", session_id=params.session_id, update_type=typ)
99
+ self.notifications.append(params)
100
+
101
+ async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse:
102
+ """Read text from file."""
103
+ if not self.allow_file_operations:
104
+ raise RuntimeError("File operations not allowed")
105
+ path = Path(params.path)
106
+ if not path.exists():
107
+ raise FileNotFoundError(f"File not found: {params.path}")
108
+ try:
109
+ content = path.read_text(encoding="utf-8")
110
+ # Apply line filtering if requested
111
+ if params.line is not None or params.limit is not None:
112
+ lines = content.splitlines(keepends=True)
113
+ start_line = (params.line - 1) if params.line else 0
114
+ end_line = start_line + params.limit if params.limit else len(lines)
115
+ content = "".join(lines[start_line:end_line])
116
+ logger.debug("Read file", path=params.path, num_chars=len(content))
117
+ return ReadTextFileResponse(content=content)
118
+
119
+ except Exception:
120
+ logger.exception("Failed to read file", path=params.path)
121
+ raise
122
+
123
+ async def write_text_file(self, params: WriteTextFileRequest) -> WriteTextFileResponse:
124
+ """Write text to file."""
125
+ if not self.allow_file_operations:
126
+ raise RuntimeError("File operations not allowed")
127
+ path = Path(params.path)
128
+ try:
129
+ path.parent.mkdir(parents=True, exist_ok=True)
130
+ path.write_text(params.content, encoding="utf-8")
131
+ logger.debug("Wrote file", path=params.path, num_chars=len(params.content))
132
+ return WriteTextFileResponse()
133
+ except Exception:
134
+ logger.exception("Failed to write file", path=params.path)
135
+ raise
136
+
137
+ async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse:
138
+ """Create a new terminal session using ProcessManager."""
139
+ try:
140
+ process_id = await self.process_manager.start_process(
141
+ command=params.command,
142
+ args=list(params.args) if params.args else None,
143
+ cwd=params.cwd or str(self.working_dir),
144
+ env={var.name: var.value for var in (params.env or [])},
145
+ output_limit=params.output_byte_limit,
146
+ )
147
+ terminal_id = f"term_{uuid.uuid4().hex[:8]}"
148
+ self.terminals[terminal_id] = process_id
149
+ msg = "Created terminal"
150
+ logger.info(msg, terminal_id=terminal_id, command=params.command, args=params.args)
151
+
152
+ return CreateTerminalResponse(terminal_id=terminal_id)
153
+
154
+ except Exception:
155
+ logger.exception("Failed to create terminal", command=params.command)
156
+ raise
157
+
158
+ async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse:
159
+ """Get output from terminal."""
160
+ terminal_id = params.terminal_id
161
+ if terminal_id not in self.terminals:
162
+ msg = f"Terminal {terminal_id} not found"
163
+ raise ValueError(msg)
164
+ try:
165
+ process_id = self.terminals[terminal_id]
166
+ output = await self.process_manager.get_output(process_id)
167
+ return TerminalOutputResponse(output=output.combined, truncated=output.truncated)
168
+ except Exception:
169
+ logger.exception("Failed to get output", terminal_id=terminal_id)
170
+ raise
171
+
172
+ async def wait_for_terminal_exit(
173
+ self, params: WaitForTerminalExitRequest
174
+ ) -> WaitForTerminalExitResponse:
175
+ """Wait for terminal process to exit."""
176
+ terminal_id = params.terminal_id
177
+ if terminal_id not in self.terminals:
178
+ msg = f"Terminal {terminal_id} not found"
179
+ raise ValueError(msg)
180
+ try:
181
+ process_id = self.terminals[terminal_id]
182
+ exit_code = await self.process_manager.wait_for_exit(process_id)
183
+ logger.debug("Terminal exited", terminal_id=terminal_id, exit_code=exit_code)
184
+ return WaitForTerminalExitResponse(exit_code=exit_code)
185
+ except Exception:
186
+ logger.exception("Failed to wait", terminal_id=terminal_id)
187
+ raise
188
+
189
+ async def kill_terminal(
190
+ self, params: KillTerminalCommandRequest
191
+ ) -> KillTerminalCommandResponse | None:
192
+ """Kill terminal process."""
193
+ terminal_id = params.terminal_id
194
+ if terminal_id not in self.terminals:
195
+ msg = f"Terminal {terminal_id} not found"
196
+ raise ValueError(msg)
197
+ try:
198
+ process_id = self.terminals[terminal_id]
199
+ await self.process_manager.kill_process(process_id)
200
+ logger.info("Killed terminal", terminal_id=terminal_id)
201
+ return KillTerminalCommandResponse()
202
+ except Exception:
203
+ logger.exception("Failed to kill terminal", terminal_id=terminal_id)
204
+ raise
205
+
206
+ async def release_terminal(
207
+ self, params: ReleaseTerminalRequest
208
+ ) -> ReleaseTerminalResponse | None:
209
+ """Release terminal resources."""
210
+ terminal_id = params.terminal_id
211
+ if terminal_id not in self.terminals:
212
+ msg = f"Terminal {terminal_id} not found"
213
+ raise ValueError(msg)
214
+ try:
215
+ process_id = self.terminals[terminal_id]
216
+ await self.process_manager.release_process(process_id)
217
+ del self.terminals[terminal_id] # Remove from our tracking
218
+ logger.info("Released terminal", terminal_id=terminal_id)
219
+ return ReleaseTerminalResponse()
220
+ except Exception:
221
+ logger.exception("Failed to release terminal", terminal_id=terminal_id)
222
+ raise
223
+
224
+ async def cleanup(self) -> None:
225
+ """Clean up all resources."""
226
+ logger.info("Cleaning up headless client resources")
227
+ for terminal_id, process_id in self.terminals.items():
228
+ try:
229
+ await self.process_manager.release_process(process_id)
230
+ except Exception:
231
+ logger.exception("Error cleaning up terminal", terminal_id=terminal_id)
232
+
233
+ self.terminals.clear()
234
+ await self.process_manager.cleanup()
235
+ logger.info("Headless client cleanup completed")
236
+
237
+ # Testing/debugging helpers
238
+
239
+ def get_session_updates(self) -> list[SessionNotification]:
240
+ """Get all received session updates."""
241
+ return self.notifications.copy()
242
+
243
+ def clear_session_updates(self) -> None:
244
+ """Clear all stored session updates."""
245
+ self.notifications.clear()
246
+
247
+ def get_permission_requests(self) -> list[RequestPermissionRequest]:
248
+ """Get all permission requests."""
249
+ return self.permission_requests.copy()
250
+
251
+ def clear_permission_requests(self) -> None:
252
+ """Clear all stored permission requests."""
253
+ self.permission_requests.clear()
254
+
255
+ def list_active_terminals(self) -> list[str]:
256
+ """List all active terminal IDs."""
257
+ return list(self.terminals.keys())
258
+
259
+ async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
260
+ """Handle extension method calls."""
261
+ logger.debug("Extension method called", method=method)
262
+ return {"ok": True, "method": method, "params": params}
263
+
264
+ async def ext_notification(self, method: str, params: dict[str, Any]) -> None:
265
+ """Handle extension notifications."""
266
+ logger.debug("Extension notification", method=method)
@@ -0,0 +1,110 @@
1
+ """No-op ACP client implementation for bridging scenarios.
2
+
3
+ This module provides a minimal client that returns empty/default responses
4
+ for all operations. Useful for scenarios where you need a Client implementation
5
+ but don't actually need to handle client-side operations (e.g., when bridging
6
+ an agent to a different transport).
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING, Any
12
+
13
+ from acp.client.protocol import Client
14
+
15
+
16
+ if TYPE_CHECKING:
17
+ from acp.schema import (
18
+ CreateTerminalRequest,
19
+ CreateTerminalResponse,
20
+ KillTerminalCommandRequest,
21
+ KillTerminalCommandResponse,
22
+ ReadTextFileRequest,
23
+ ReadTextFileResponse,
24
+ ReleaseTerminalRequest,
25
+ ReleaseTerminalResponse,
26
+ RequestPermissionRequest,
27
+ RequestPermissionResponse,
28
+ SessionNotification,
29
+ TerminalOutputRequest,
30
+ TerminalOutputResponse,
31
+ WaitForTerminalExitRequest,
32
+ WaitForTerminalExitResponse,
33
+ WriteTextFileRequest,
34
+ WriteTextFileResponse,
35
+ )
36
+
37
+
38
+ class NoOpClient(Client):
39
+ """Minimal client that returns default responses for all operations.
40
+
41
+ This client is useful for bridging scenarios where you need a Client
42
+ implementation but don't actually need to handle client-side operations.
43
+ All methods return minimal valid responses.
44
+ """
45
+
46
+ async def request_permission(
47
+ self, params: RequestPermissionRequest
48
+ ) -> RequestPermissionResponse:
49
+ """Grant permission using first available option."""
50
+ from acp.schema import AllowedOutcome, RequestPermissionResponse
51
+
52
+ return RequestPermissionResponse(outcome=AllowedOutcome(option_id="allow"))
53
+
54
+ async def session_update(self, params: SessionNotification) -> None:
55
+ """Ignore session updates."""
56
+
57
+ async def write_text_file(self, params: WriteTextFileRequest) -> WriteTextFileResponse:
58
+ """Return empty write response."""
59
+ from acp.schema import WriteTextFileResponse
60
+
61
+ return WriteTextFileResponse()
62
+
63
+ async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse:
64
+ """Return empty file content."""
65
+ from acp.schema import ReadTextFileResponse
66
+
67
+ return ReadTextFileResponse(content="")
68
+
69
+ async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse:
70
+ """Return dummy terminal ID."""
71
+ from acp.schema import CreateTerminalResponse
72
+
73
+ return CreateTerminalResponse(terminal_id="noop-terminal")
74
+
75
+ async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse:
76
+ """Return empty terminal output."""
77
+ from acp.schema import TerminalOutputResponse
78
+
79
+ return TerminalOutputResponse(output="", truncated=False)
80
+
81
+ async def release_terminal(
82
+ self, params: ReleaseTerminalRequest
83
+ ) -> ReleaseTerminalResponse | None:
84
+ """Return empty release response."""
85
+ from acp.schema import ReleaseTerminalResponse
86
+
87
+ return ReleaseTerminalResponse()
88
+
89
+ async def wait_for_terminal_exit(
90
+ self, params: WaitForTerminalExitRequest
91
+ ) -> WaitForTerminalExitResponse:
92
+ """Return immediate exit with code 0."""
93
+ from acp.schema import WaitForTerminalExitResponse
94
+
95
+ return WaitForTerminalExitResponse(exit_code=0)
96
+
97
+ async def kill_terminal(
98
+ self, params: KillTerminalCommandRequest
99
+ ) -> KillTerminalCommandResponse | None:
100
+ """Return empty kill response."""
101
+ from acp.schema import KillTerminalCommandResponse
102
+
103
+ return KillTerminalCommandResponse()
104
+
105
+ async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
106
+ """Return empty dict for extension methods."""
107
+ return {}
108
+
109
+ async def ext_notification(self, method: str, params: dict[str, Any]) -> None:
110
+ """Ignore extension notifications."""
acp/client/protocol.py ADDED
@@ -0,0 +1,61 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any, Protocol
4
+
5
+
6
+ if TYPE_CHECKING:
7
+ from acp.schema import (
8
+ CreateTerminalRequest,
9
+ CreateTerminalResponse,
10
+ KillTerminalCommandRequest,
11
+ KillTerminalCommandResponse,
12
+ ReadTextFileRequest,
13
+ ReadTextFileResponse,
14
+ ReleaseTerminalRequest,
15
+ ReleaseTerminalResponse,
16
+ RequestPermissionRequest,
17
+ RequestPermissionResponse,
18
+ SessionNotification,
19
+ TerminalOutputRequest,
20
+ TerminalOutputResponse,
21
+ WaitForTerminalExitRequest,
22
+ WaitForTerminalExitResponse,
23
+ WriteTextFileRequest,
24
+ WriteTextFileResponse,
25
+ )
26
+
27
+
28
+ class Client(Protocol):
29
+ """Base client interface for ACP."""
30
+
31
+ async def request_permission(
32
+ self, params: RequestPermissionRequest
33
+ ) -> RequestPermissionResponse: ...
34
+
35
+ async def session_update(self, params: SessionNotification) -> None: ...
36
+
37
+ async def write_text_file(
38
+ self, params: WriteTextFileRequest
39
+ ) -> WriteTextFileResponse | None: ...
40
+
41
+ async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse: ...
42
+
43
+ async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse: ...
44
+
45
+ async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse: ...
46
+
47
+ async def release_terminal(
48
+ self, params: ReleaseTerminalRequest
49
+ ) -> ReleaseTerminalResponse | None: ...
50
+
51
+ async def wait_for_terminal_exit(
52
+ self, params: WaitForTerminalExitRequest
53
+ ) -> WaitForTerminalExitResponse: ...
54
+
55
+ async def kill_terminal(
56
+ self, params: KillTerminalCommandRequest
57
+ ) -> KillTerminalCommandResponse | None: ...
58
+
59
+ async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]: ...
60
+
61
+ async def ext_notification(self, method: str, params: dict[str, Any]) -> None: ...