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,561 @@
1
+ """Event stream events.
2
+
3
+ Unified event system using ToolCallProgressEvent for all tool-related progress updates.
4
+ Rich content (terminals, diffs, locations) is conveyed through the items field.
5
+
6
+ ## UI Content vs Agent Return Values (ACP Protocol)
7
+
8
+ Tools can control what the UI displays separately from what the agent receives:
9
+
10
+ - Emit `tool_call_progress` with content items for UI display
11
+ - Return raw/structured data for the agent
12
+ - Session layer populates `content` (for UI) and `raw_output` (for agent) separately
13
+
14
+ Use `replace_content=True` for streaming/final content that should replace previous state.
15
+ If no content is emitted, the return value is automatically converted for UI (fallback).
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from dataclasses import dataclass, field
21
+ from typing import TYPE_CHECKING, Any, Literal
22
+
23
+ from pydantic_ai import AgentStreamEvent
24
+
25
+ from agentpool.messaging import ChatMessage # noqa: TC001
26
+
27
+
28
+ if TYPE_CHECKING:
29
+ from collections.abc import Sequence
30
+
31
+ from agentpool.resource_providers.plan_provider import PlanEntry
32
+ from agentpool.tools.base import ToolKind
33
+
34
+
35
+ # Lifecycle events (aligned with AG-UI protocol)
36
+
37
+
38
+ @dataclass(kw_only=True)
39
+ class RunStartedEvent:
40
+ """Signals the start of an agent run."""
41
+
42
+ thread_id: str
43
+ """ID of the conversation thread (conversation_id)."""
44
+ run_id: str
45
+ """ID of the agent run (unique per request/response cycle)."""
46
+ agent_name: str | None = None
47
+ """Name of the agent starting the run."""
48
+ event_kind: Literal["run_started"] = "run_started"
49
+ """Event type identifier."""
50
+
51
+
52
+ @dataclass(kw_only=True)
53
+ class RunErrorEvent:
54
+ """Signals an error during an agent run."""
55
+
56
+ message: str
57
+ """Error message."""
58
+ code: str | None = None
59
+ """Error code."""
60
+ run_id: str | None = None
61
+ """ID of the agent run that failed."""
62
+ agent_name: str | None = None
63
+ """Name of the agent that errored."""
64
+ event_kind: Literal["run_error"] = "run_error"
65
+ """Event type identifier."""
66
+
67
+
68
+ # Unified tool call content models (dataclass versions of ACP schema models)
69
+
70
+
71
+ @dataclass(kw_only=True)
72
+ class TerminalContentItem:
73
+ """Embed a terminal for live output display."""
74
+
75
+ type: Literal["terminal"] = "terminal"
76
+ """Content type identifier."""
77
+ terminal_id: str
78
+ """The ID of the terminal being embedded."""
79
+
80
+
81
+ @dataclass(kw_only=True)
82
+ class DiffContentItem:
83
+ """File modification shown as a diff."""
84
+
85
+ type: Literal["diff"] = "diff"
86
+ """Content type identifier."""
87
+ path: str
88
+ """The file path being modified."""
89
+ old_text: str | None = None
90
+ """The original content (None for new files)."""
91
+ new_text: str
92
+ """The new content after modification."""
93
+
94
+
95
+ @dataclass(kw_only=True)
96
+ class LocationContentItem:
97
+ """A file location being accessed or modified.
98
+
99
+ Note: line defaults to 0 (not None) to ensure ACP clients render clickable paths.
100
+ The ACP spec allows None, but some clients (e.g., Claude Code) require the field present.
101
+ """
102
+
103
+ type: Literal["location"] = "location"
104
+ """Content type identifier."""
105
+ path: str
106
+ """The file path being accessed or modified."""
107
+ line: int = 0
108
+ """Line number within the file (0 = beginning/unspecified)."""
109
+
110
+
111
+ @dataclass(kw_only=True)
112
+ class TextContentItem:
113
+ """Simple text content."""
114
+
115
+ type: Literal["text"] = "text"
116
+ """Content type identifier."""
117
+ text: str
118
+ """The text content."""
119
+
120
+
121
+ @dataclass(kw_only=True)
122
+ class FileContentItem:
123
+ """File content with metadata for rich display.
124
+
125
+ Carries structured data about file content. Formatting (e.g., Zed-style
126
+ code blocks) happens at the ACP layer based on client capabilities.
127
+ """
128
+
129
+ type: Literal["file"] = "file"
130
+ """Content type identifier."""
131
+ content: str
132
+ """The file content."""
133
+ path: str
134
+ """The file path."""
135
+ language: str | None = None
136
+ """Language for syntax highlighting (inferred from path if not provided)."""
137
+ start_line: int | None = None
138
+ """Starting line number (1-based) if showing a range."""
139
+ end_line: int | None = None
140
+ """Ending line number (1-based) if showing a range."""
141
+
142
+
143
+ # Union type for all tool call content items
144
+ ToolCallContentItem = (
145
+ TerminalContentItem | DiffContentItem | LocationContentItem | TextContentItem | FileContentItem
146
+ )
147
+
148
+
149
+ @dataclass(kw_only=True)
150
+ class StreamCompleteEvent[TContent]:
151
+ """Event indicating streaming is complete with final message."""
152
+
153
+ message: ChatMessage[TContent]
154
+ """The final chat message with all metadata."""
155
+ event_kind: Literal["stream_complete"] = "stream_complete"
156
+ """Event type identifier."""
157
+
158
+
159
+ @dataclass(kw_only=True)
160
+ class ToolCallStartEvent:
161
+ """Event indicating a tool call has started with rich ACP metadata."""
162
+
163
+ tool_call_id: str
164
+ """The ID of the tool call."""
165
+ tool_name: str
166
+ """The name of the tool being called."""
167
+ title: str
168
+ """Human-readable title describing what the tool is doing."""
169
+ kind: ToolKind = "other"
170
+ """Tool kind (read, edit, delete, move, search, execute, think, fetch, other)."""
171
+ content: list[ToolCallContentItem] = field(default_factory=list)
172
+ """Content produced by the tool call."""
173
+ locations: list[LocationContentItem] = field(default_factory=list)
174
+ """File locations affected by this tool call."""
175
+ raw_input: dict[str, Any] = field(default_factory=dict)
176
+ """The raw input parameters sent to the tool."""
177
+
178
+ event_kind: Literal["tool_call_start"] = "tool_call_start"
179
+ """Event type identifier."""
180
+
181
+
182
+ @dataclass(kw_only=True)
183
+ class ToolCallProgressEvent:
184
+ """Unified tool call progress event with rich content support.
185
+
186
+ This event carries a title and rich content items (terminals, diffs, locations, text)
187
+ that map directly to ACP tool call notifications.
188
+
189
+ Use the classmethod constructors for common patterns:
190
+ - process_started() - Process start with terminal
191
+ - process_output() - Process output update
192
+ - process_exit() - Process completion
193
+ - process_killed() - Process termination
194
+ - process_released() - Process cleanup
195
+ - file_operation() - File read/write/delete
196
+ - file_edit() - File edit with diff
197
+ """
198
+
199
+ tool_call_id: str
200
+ """The ID of the tool call."""
201
+ status: Literal["pending", "in_progress", "completed", "failed"] = "in_progress"
202
+ """Current execution status."""
203
+ title: str | None = None
204
+ """Human-readable title describing the operation."""
205
+
206
+ # Rich content items
207
+ items: Sequence[ToolCallContentItem] = field(default_factory=list)
208
+ """Rich content items (terminals, diffs, locations, text)."""
209
+ replace_content: bool = False
210
+ """If True, items replace existing content instead of appending."""
211
+
212
+ # Legacy fields for backwards compatibility
213
+ progress: int | None = None
214
+ """The current progress of the tool call."""
215
+ total: int | None = None
216
+ """The total progress of the tool call."""
217
+ message: str | None = None
218
+ """Progress message."""
219
+ tool_name: str | None = None
220
+ """The name of the tool being called."""
221
+ tool_input: dict[str, Any] | None = None
222
+ """The input provided to the tool."""
223
+
224
+ event_kind: Literal["tool_call_progress"] = "tool_call_progress"
225
+ """Event type identifier."""
226
+
227
+ @classmethod
228
+ def process_started(
229
+ cls,
230
+ *,
231
+ tool_call_id: str,
232
+ process_id: str,
233
+ command: str,
234
+ success: bool = True,
235
+ error: str | None = None,
236
+ tool_name: str | None = None,
237
+ ) -> ToolCallProgressEvent:
238
+ """Create event for process start.
239
+
240
+ Args:
241
+ tool_call_id: Tool call identifier
242
+ process_id: Process/terminal identifier
243
+ command: Command being executed
244
+ success: Whether process started successfully
245
+ error: Error message if failed
246
+ tool_name: Optional tool name
247
+ """
248
+ status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
249
+ title = f"Running: {command}" if success else f"Failed to start: {command}"
250
+ if error:
251
+ title = f"{title} - {error}"
252
+
253
+ items: list[ToolCallContentItem] = [TerminalContentItem(terminal_id=process_id)]
254
+ if error:
255
+ items.append(TextContentItem(text=f"Error: {error}"))
256
+
257
+ return cls(
258
+ tool_call_id=tool_call_id,
259
+ tool_name=tool_name,
260
+ status=status,
261
+ title=title,
262
+ items=items,
263
+ )
264
+
265
+ @classmethod
266
+ def process_output(
267
+ cls,
268
+ *,
269
+ tool_call_id: str,
270
+ process_id: str,
271
+ output: str,
272
+ tool_name: str | None = None,
273
+ ) -> ToolCallProgressEvent:
274
+ """Create event for process output.
275
+
276
+ Args:
277
+ tool_call_id: Tool call identifier
278
+ process_id: Process/terminal identifier
279
+ output: Process output
280
+ tool_name: Optional tool name
281
+ """
282
+ items = [TerminalContentItem(terminal_id=process_id)]
283
+ title = f"Output: {output[:50]}..." if len(output) > 50 else output # noqa: PLR2004
284
+
285
+ return cls(
286
+ tool_call_id=tool_call_id,
287
+ tool_name=tool_name,
288
+ status="in_progress",
289
+ title=title,
290
+ items=items,
291
+ )
292
+
293
+ @classmethod
294
+ def process_exit(
295
+ cls,
296
+ *,
297
+ tool_call_id: str,
298
+ process_id: str,
299
+ exit_code: int,
300
+ final_output: str | None = None,
301
+ tool_name: str | None = None,
302
+ ) -> ToolCallProgressEvent:
303
+ """Create event for process exit.
304
+
305
+ Args:
306
+ tool_call_id: Tool call identifier
307
+ process_id: Process/terminal identifier
308
+ exit_code: Process exit code
309
+ final_output: Final process output
310
+ tool_name: Optional tool name
311
+ """
312
+ success = exit_code == 0
313
+ status_icon = "✓" if success else "✗"
314
+ title = f"Process exited [{status_icon} exit {exit_code}]"
315
+
316
+ items: list[ToolCallContentItem] = [TerminalContentItem(terminal_id=process_id)]
317
+ if final_output:
318
+ items.append(TextContentItem(text=final_output))
319
+
320
+ return cls(
321
+ tool_call_id=tool_call_id,
322
+ tool_name=tool_name,
323
+ status="in_progress",
324
+ title=title,
325
+ items=items,
326
+ )
327
+
328
+ @classmethod
329
+ def process_killed(
330
+ cls,
331
+ *,
332
+ tool_call_id: str,
333
+ process_id: str,
334
+ success: bool = True,
335
+ error: str | None = None,
336
+ tool_name: str | None = None,
337
+ ) -> ToolCallProgressEvent:
338
+ """Create event for process kill.
339
+
340
+ Args:
341
+ tool_call_id: Tool call identifier
342
+ process_id: Process/terminal identifier
343
+ success: Whether kill succeeded
344
+ error: Error message if failed
345
+ tool_name: Optional tool name
346
+ """
347
+ title = (
348
+ f"Killed process {process_id}" if success else f"Failed to kill process {process_id}"
349
+ )
350
+ if error:
351
+ title = f"{title} - {error}"
352
+
353
+ status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
354
+ items = [TerminalContentItem(terminal_id=process_id)]
355
+
356
+ return cls(
357
+ tool_call_id=tool_call_id,
358
+ tool_name=tool_name,
359
+ status=status,
360
+ title=title,
361
+ items=items,
362
+ )
363
+
364
+ @classmethod
365
+ def process_released(
366
+ cls,
367
+ *,
368
+ tool_call_id: str,
369
+ process_id: str,
370
+ success: bool = True,
371
+ error: str | None = None,
372
+ tool_name: str | None = None,
373
+ ) -> ToolCallProgressEvent:
374
+ """Create event for process resource release.
375
+
376
+ Args:
377
+ tool_call_id: Tool call identifier
378
+ process_id: Process/terminal identifier
379
+ success: Whether release succeeded
380
+ error: Error message if failed
381
+ tool_name: Optional tool name
382
+ """
383
+ title = (
384
+ f"Released process {process_id}"
385
+ if success
386
+ else f"Failed to release process {process_id}"
387
+ )
388
+ if error:
389
+ title = f"{title} - {error}"
390
+
391
+ status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
392
+ items = [TerminalContentItem(terminal_id=process_id)]
393
+
394
+ return cls(
395
+ tool_call_id=tool_call_id,
396
+ tool_name=tool_name,
397
+ status=status,
398
+ title=title,
399
+ items=items,
400
+ )
401
+
402
+ @classmethod
403
+ def file_operation(
404
+ cls,
405
+ *,
406
+ tool_call_id: str,
407
+ operation: Literal["read", "write", "delete", "list", "edit"],
408
+ path: str,
409
+ success: bool,
410
+ error: str | None = None,
411
+ tool_name: str | None = None,
412
+ ) -> ToolCallProgressEvent:
413
+ """Create event for file operation.
414
+
415
+ Args:
416
+ tool_call_id: Tool call identifier
417
+ operation: File operation type
418
+ path: File path
419
+ success: Whether operation succeeded
420
+ error: Error message if failed
421
+ tool_name: Optional tool name
422
+ """
423
+ status: Literal["completed", "failed"] = "completed" if success else "failed"
424
+ title = f"{operation.capitalize()}: {path}"
425
+ if error:
426
+ title = f"{title} - {error}"
427
+
428
+ items: list[ToolCallContentItem] = [LocationContentItem(path=path)]
429
+ if error:
430
+ items.append(TextContentItem(text=f"Error: {error}"))
431
+
432
+ return cls(
433
+ tool_call_id=tool_call_id,
434
+ tool_name=tool_name,
435
+ status=status,
436
+ title=title,
437
+ items=items,
438
+ )
439
+
440
+ @classmethod
441
+ def file_edit(
442
+ cls,
443
+ *,
444
+ tool_call_id: str,
445
+ path: str,
446
+ old_text: str,
447
+ new_text: str,
448
+ status: Literal["in_progress", "completed", "failed"],
449
+ tool_name: str | None = None,
450
+ ) -> ToolCallProgressEvent:
451
+ """Create event for file edit with diff.
452
+
453
+ Args:
454
+ tool_call_id: Tool call identifier
455
+ path: File path being edited
456
+ old_text: Original file content
457
+ new_text: New file content
458
+ status: Edit status
459
+ tool_name: Optional tool name
460
+ """
461
+ items: list[ToolCallContentItem] = [
462
+ DiffContentItem(path=path, old_text=old_text, new_text=new_text),
463
+ LocationContentItem(path=path),
464
+ ]
465
+
466
+ return cls(
467
+ tool_call_id=tool_call_id,
468
+ tool_name=tool_name,
469
+ status=status,
470
+ title=f"Editing: {path}",
471
+ items=items,
472
+ replace_content=True, # Streaming diffs should replace, not accumulate
473
+ )
474
+
475
+
476
+ @dataclass(kw_only=True)
477
+ class CommandOutputEvent:
478
+ """Event for slash command output."""
479
+
480
+ command: str
481
+ """The command name that was executed."""
482
+ output: str
483
+ """The output text from the command."""
484
+ event_kind: Literal["command_output"] = "command_output"
485
+ """Event type identifier."""
486
+
487
+
488
+ @dataclass(kw_only=True)
489
+ class CommandCompleteEvent:
490
+ """Event indicating slash command execution is complete."""
491
+
492
+ command: str
493
+ """The command name that was completed."""
494
+ success: bool
495
+ """Whether the command executed successfully."""
496
+ event_kind: Literal["command_complete"] = "command_complete"
497
+ """Event type identifier."""
498
+
499
+
500
+ @dataclass(kw_only=True)
501
+ class ToolCallCompleteEvent:
502
+ """Event indicating tool call is complete with both input and output."""
503
+
504
+ tool_name: str
505
+ """The name of the tool that was called."""
506
+ tool_call_id: str
507
+ """The ID of the tool call."""
508
+ tool_input: dict[str, Any]
509
+ """The input provided to the tool."""
510
+ tool_result: Any
511
+ """The result returned by the tool."""
512
+ agent_name: str
513
+ """The name of the agent that made the tool call."""
514
+ message_id: str
515
+ """The message ID associated with this tool call."""
516
+ event_kind: Literal["tool_call_complete"] = "tool_call_complete"
517
+ """Event type identifier."""
518
+
519
+
520
+ @dataclass(kw_only=True)
521
+ class CustomEvent[T]:
522
+ """Generic custom event that can be emitted during tool execution."""
523
+
524
+ event_data: T
525
+ """The custom event data of any type."""
526
+ event_type: str = "custom"
527
+ """Type identifier for the custom event."""
528
+ source: str | None = None
529
+ """Optional source identifier (tool name, etc.)."""
530
+ event_kind: Literal["custom"] = "custom"
531
+ """Event type identifier."""
532
+
533
+
534
+ @dataclass(kw_only=True)
535
+ class PlanUpdateEvent:
536
+ """Event indicating plan state has changed."""
537
+
538
+ entries: list[PlanEntry]
539
+ """Current plan entries."""
540
+ tool_call_id: str | None = None
541
+ """Tool call ID for ACP notifications."""
542
+ event_kind: Literal["plan_update"] = "plan_update"
543
+ """Event type identifier."""
544
+
545
+
546
+ type RichAgentStreamEvent[OutputDataT] = (
547
+ AgentStreamEvent
548
+ | StreamCompleteEvent[OutputDataT]
549
+ | RunStartedEvent
550
+ | RunErrorEvent
551
+ | ToolCallStartEvent
552
+ | ToolCallProgressEvent
553
+ | ToolCallCompleteEvent
554
+ | PlanUpdateEvent
555
+ | CustomEvent[Any]
556
+ )
557
+
558
+
559
+ type SlashedAgentStreamEvent[OutputDataT] = (
560
+ RichAgentStreamEvent[OutputDataT] | CommandOutputEvent | CommandCompleteEvent
561
+ )