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,76 @@
1
+ """Helper functions for common message processing logic."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from agentpool.messaging import ChatMessage
8
+ from agentpool.prompts.convert import convert_prompts
9
+
10
+
11
+ if TYPE_CHECKING:
12
+ from pydantic_ai import UserContent
13
+
14
+ from agentpool.common_types import PromptCompatible
15
+ from agentpool.messaging import MessageNode
16
+ from agentpool.messaging.connection_manager import ConnectionManager
17
+
18
+
19
+ async def prepare_prompts(
20
+ *prompt: PromptCompatible | ChatMessage[Any],
21
+ ) -> tuple[ChatMessage[Any], list[UserContent], ChatMessage[Any] | None]:
22
+ """Prepare prompts for processing.
23
+
24
+ Extracted from MessageNode.pre_run logic.
25
+
26
+ Args:
27
+ *prompt: The prompt(s) to prepare.
28
+
29
+ Returns:
30
+ A tuple of:
31
+ - Either incoming message, or a constructed incoming message based
32
+ on the prompt(s).
33
+ - A list of prompts to be sent to the model.
34
+ - The original ChatMessage if forwarded, None otherwise
35
+ """
36
+ if len(prompt) == 1 and isinstance(prompt[0], ChatMessage):
37
+ original_msg = prompt[0]
38
+ # Update received message's chain to show it came through its source
39
+ user_msg = original_msg.forwarded(original_msg).to_request()
40
+ prompts = await convert_prompts([user_msg.content])
41
+ # clear cost info to avoid double-counting
42
+ return user_msg, prompts, original_msg
43
+ prompts = await convert_prompts(prompt)
44
+ user_msg = ChatMessage.user_prompt(message=prompts)
45
+ return user_msg, prompts, None
46
+
47
+
48
+ async def finalize_message(
49
+ message: ChatMessage[Any],
50
+ previous_message: ChatMessage[Any] | None,
51
+ node: MessageNode[Any, Any],
52
+ connections: ConnectionManager,
53
+ original_message: ChatMessage[Any] | None,
54
+ wait_for_connections: bool | None = None,
55
+ ) -> ChatMessage[Any]:
56
+ """Handle message finalization and routing.
57
+
58
+ Args:
59
+ message: The response message to finalize
60
+ previous_message: The original user message (if any)
61
+ node: The message node that produced the message
62
+ connections: Connection manager for routing
63
+ original_message: The original ChatMessage if forwarded, None otherwise
64
+ wait_for_connections: Whether to wait for connected nodes
65
+
66
+ Returns:
67
+ The finalized message
68
+ """
69
+ # For chain processing, update the response's chain if input was forwarded
70
+ if original_message:
71
+ message = message.forwarded(original_message)
72
+ node.message_sent.emit(message) # Emit signals
73
+ await node.log_message(message) # Log message if enabled
74
+ # Route to connections
75
+ await connections.route_message(message, wait=wait_for_connections)
76
+ return message
@@ -0,0 +1,95 @@
1
+ """Centralized MIME type utilities for agentpool.
2
+
3
+ Uses pydantic-ai's enhanced MimeTypes instance for better cross-platform
4
+ coverage of modern file types (.xlsx, .docx, .webp, .mkv, etc.).
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from pydantic_ai.messages import _mime_types
10
+
11
+
12
+ # MIME type prefixes that are definitely binary (no need to probe content)
13
+ BINARY_MIME_PREFIXES = (
14
+ "image/",
15
+ "audio/",
16
+ "video/",
17
+ "application/octet-stream",
18
+ "application/zip",
19
+ "application/gzip",
20
+ "application/x-tar",
21
+ "application/pdf",
22
+ "application/x-executable",
23
+ "application/x-sharedlib",
24
+ )
25
+
26
+ # MIME type prefixes that should be treated as text
27
+ TEXT_MIME_PREFIXES = (
28
+ "text/",
29
+ "application/json",
30
+ "application/xml",
31
+ "application/javascript",
32
+ )
33
+
34
+ # How many bytes to probe for binary detection
35
+ BINARY_PROBE_SIZE = 8192
36
+
37
+
38
+ def guess_type(path: str) -> str | None:
39
+ """Guess the MIME type of a file based on its path/extension.
40
+
41
+ Uses pydantic-ai's enhanced MimeTypes instance which has better
42
+ coverage for modern file types across platforms.
43
+
44
+ Args:
45
+ path: File path or URL to guess type for
46
+
47
+ Returns:
48
+ MIME type string or None if unknown
49
+ """
50
+ mime_type, _ = _mime_types.guess_type(path)
51
+ return mime_type
52
+
53
+
54
+ def is_binary_mime(mime_type: str | None) -> bool:
55
+ """Check if MIME type is known to be binary (skip content probing).
56
+
57
+ Args:
58
+ mime_type: MIME type string or None
59
+
60
+ Returns:
61
+ True if the MIME type is definitely binary
62
+ """
63
+ if mime_type is None:
64
+ return False
65
+ return any(mime_type.startswith(prefix) for prefix in BINARY_MIME_PREFIXES)
66
+
67
+
68
+ def is_text_mime(mime_type: str | None) -> bool:
69
+ """Check if a MIME type represents text content.
70
+
71
+ Args:
72
+ mime_type: MIME type string or None
73
+
74
+ Returns:
75
+ True if the MIME type is text-based (defaults to True for unknown)
76
+ """
77
+ if mime_type is None:
78
+ return True # Default to text for unknown types
79
+ return any(mime_type.startswith(prefix) for prefix in TEXT_MIME_PREFIXES)
80
+
81
+
82
+ def is_binary_content(data: bytes) -> bool:
83
+ """Detect binary content by probing for null bytes.
84
+
85
+ Uses the same heuristic as git: if the first ~8KB contains a null byte,
86
+ the content is considered binary.
87
+
88
+ Args:
89
+ data: Raw bytes to check
90
+
91
+ Returns:
92
+ True if content appears to be binary
93
+ """
94
+ probe = data[:BINARY_PROBE_SIZE]
95
+ return b"\x00" in probe
@@ -0,0 +1,21 @@
1
+ """Core data models for AgentPool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from agentpool.models.acp_agents import ACPAgentConfig, ACPAgentConfigTypes, BaseACPAgentConfig
6
+ from agentpool.models.agents import NativeAgentConfig
7
+ from agentpool.models.agui_agents import AGUIAgentConfig
8
+ from agentpool.models.claude_code_agents import ClaudeCodeAgentConfig
9
+ from agentpool.models.manifest import AgentsManifest, AnyAgentConfig
10
+
11
+
12
+ __all__ = [
13
+ "ACPAgentConfig",
14
+ "ACPAgentConfigTypes",
15
+ "AGUIAgentConfig",
16
+ "AgentsManifest",
17
+ "AnyAgentConfig",
18
+ "BaseACPAgentConfig",
19
+ "ClaudeCodeAgentConfig",
20
+ "NativeAgentConfig",
21
+ ]
@@ -0,0 +1,22 @@
1
+ """ACP Agets."""
2
+
3
+ from typing import Annotated
4
+ from .non_mcp import RegularACPAgentConfigTypes
5
+ from .mcp_capable import MCPCapableACPAgentConfigTypes, MCPCapableACPAgentConfig
6
+ from .base import BaseACPAgentConfig, ACPAgentConfig
7
+ from pydantic import Field
8
+
9
+ # Union of all ACP agent config types (discriminated by 'provider')
10
+ ACPAgentConfigTypes = Annotated[
11
+ ACPAgentConfig | RegularACPAgentConfigTypes | MCPCapableACPAgentConfigTypes,
12
+ Field(discriminator="provider"),
13
+ ]
14
+
15
+ __all__ = [
16
+ "ACPAgentConfig",
17
+ "ACPAgentConfigTypes",
18
+ "BaseACPAgentConfig",
19
+ "MCPCapableACPAgentConfig",
20
+ "MCPCapableACPAgentConfigTypes",
21
+ "RegularACPAgentConfigTypes",
22
+ ]
@@ -0,0 +1,308 @@
1
+ """Configuration models for ACP (Agent Client Protocol) agents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence # noqa: TC003
6
+ import os
7
+ import tempfile
8
+ from typing import TYPE_CHECKING, Annotated, Any, Literal
9
+
10
+ from exxec import ExecutionEnvironmentStr, get_environment # noqa: TC002
11
+ from exxec.configs import (
12
+ E2bExecutionEnvironmentConfig,
13
+ ExecutionEnvironmentConfig, # noqa: TC002
14
+ )
15
+ from pydantic import ConfigDict, Field
16
+ from tokonomics.model_discovery import ProviderType # noqa: TC002
17
+
18
+ from agentpool_config.nodes import NodeConfig
19
+ from agentpool_config.system_prompts import PromptConfig # noqa: TC001
20
+
21
+
22
+ if TYPE_CHECKING:
23
+ from exxec import ExecutionEnvironment
24
+
25
+ from agentpool.prompts.manager import PromptManager
26
+
27
+
28
+ class BaseACPAgentConfig(NodeConfig):
29
+ """Base configuration for all ACP agents.
30
+
31
+ Provides common fields and the interface for building commands.
32
+ """
33
+
34
+ model_config = ConfigDict(
35
+ json_schema_extra={
36
+ "x-icon": "octicon:terminal-16",
37
+ "x-doc-title": "ACP Agent Configuration",
38
+ }
39
+ )
40
+
41
+ type: Literal["acp"] = Field("acp", init=False)
42
+ """Top-level discriminator for agent type."""
43
+
44
+ cwd: str | None = Field(
45
+ default=None,
46
+ title="Working Directory",
47
+ examples=["/path/to/project", ".", "/home/user/myproject"],
48
+ )
49
+ """Working directory for the session."""
50
+
51
+ env: dict[str, str] = Field(
52
+ default_factory=dict,
53
+ title="Environment Variables",
54
+ examples=[{"PATH": "/usr/local/bin:/usr/bin", "DEBUG": "1"}],
55
+ )
56
+ """Environment variables to set."""
57
+
58
+ execution_environment: Annotated[
59
+ ExecutionEnvironmentStr | ExecutionEnvironmentConfig,
60
+ Field(
61
+ default="local",
62
+ title="Execution Environment",
63
+ examples=[
64
+ "docker",
65
+ E2bExecutionEnvironmentConfig(template="python-sandbox"),
66
+ ],
67
+ ),
68
+ ] = "local"
69
+ """Execution environment config for the agent's own toolsets."""
70
+
71
+ client_execution_environment: Annotated[
72
+ ExecutionEnvironmentStr | ExecutionEnvironmentConfig | None,
73
+ Field(
74
+ default=None,
75
+ title="Client Execution Environment",
76
+ examples=[
77
+ "local",
78
+ "docker",
79
+ E2bExecutionEnvironmentConfig(template="python-sandbox"),
80
+ ],
81
+ ),
82
+ ] = None
83
+ """Execution environment for handling subprocess requests (filesystem, terminals).
84
+
85
+ When the ACP subprocess requests file/terminal operations, this environment
86
+ determines where those operations execute. Falls back to execution_environment
87
+ if not set.
88
+
89
+ Use cases:
90
+ - None (default): Use same env as toolsets (execution_environment)
91
+ - "local": Subprocess operates on its own local filesystem
92
+ - Remote config: Subprocess operates in a specific remote environment
93
+ """
94
+
95
+ allow_file_operations: bool = Field(default=True, title="Allow File Operations")
96
+ """Whether to allow file read/write operations."""
97
+
98
+ allow_terminal: bool = Field(default=True, title="Allow Terminal")
99
+ """Whether to allow terminal operations."""
100
+
101
+ requires_tool_confirmation: Literal["never", "always"] = Field(
102
+ default="always", title="Tool confirmation mode"
103
+ )
104
+ """Whether to automatically grant all permission requests."""
105
+
106
+ system_prompt: str | Sequence[str | PromptConfig] | None = Field(
107
+ default=None,
108
+ title="System Prompt",
109
+ examples=[
110
+ "You are a helpful coding assistant.",
111
+ ["Always write tests.", "Focus on Python."],
112
+ ],
113
+ json_schema_extra={
114
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/"
115
+ },
116
+ )
117
+ """System prompt for the agent. Can be a string or list of strings/prompt configs.
118
+
119
+ Support varies by agent:
120
+ - Claude: passed via --system-prompt
121
+ - Auggie: passed via --instruction-file
122
+ - Stakpak: passed via --system-prompt-file
123
+ - Others: may not support system prompts
124
+
125
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/
126
+ """
127
+
128
+ def get_command(self) -> str:
129
+ """Get the command to spawn the ACP server."""
130
+ raise NotImplementedError
131
+
132
+ async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
133
+ """Get command arguments."""
134
+ raise NotImplementedError
135
+
136
+ async def render_system_prompt(
137
+ self,
138
+ prompt_manager: PromptManager | None = None,
139
+ context: dict[str, Any] | None = None,
140
+ ) -> str | None:
141
+ """Render system prompt to a single string.
142
+
143
+ Resolves library references and renders templates.
144
+
145
+ Args:
146
+ prompt_manager: Optional prompt manager for resolving library references
147
+ context: Optional context for template rendering
148
+
149
+ Returns:
150
+ Rendered system prompt string, or None if no prompt configured
151
+ """
152
+ from toprompt import render_prompt
153
+
154
+ from agentpool_config.system_prompts import (
155
+ FilePromptConfig,
156
+ FunctionPromptConfig,
157
+ LibraryPromptConfig,
158
+ StaticPromptConfig,
159
+ )
160
+
161
+ if self.system_prompt is None:
162
+ return None
163
+
164
+ context = context or {"name": self.name}
165
+ prompt_list = (
166
+ [self.system_prompt] if isinstance(self.system_prompt, str) else self.system_prompt
167
+ )
168
+
169
+ rendered_parts: list[str] = []
170
+ for prompt in prompt_list:
171
+ match prompt:
172
+ case str() as content:
173
+ rendered_parts.append(render_prompt(content, {"agent": context}))
174
+ case StaticPromptConfig(content=content):
175
+ rendered_parts.append(render_prompt(content, {"agent": context}))
176
+ case FilePromptConfig(path=path, variables=variables):
177
+ from pathlib import Path
178
+
179
+ template_path = Path(path)
180
+ if not template_path.is_absolute() and self.config_file_path:
181
+ base_path = Path(self.config_file_path).parent
182
+ template_path = base_path / path
183
+ template_content = template_path.read_text("utf-8")
184
+ template_ctx = {"agent": context, **variables}
185
+ rendered_parts.append(render_prompt(template_content, template_ctx))
186
+ case LibraryPromptConfig(reference=reference):
187
+ if prompt_manager:
188
+ resolved = await prompt_manager.get_from(reference)
189
+ rendered_parts.append(render_prompt(resolved, {"agent": context}))
190
+ else:
191
+ # Fallback: include reference marker
192
+ rendered_parts.append(f"[LIBRARY:{reference}]")
193
+ case FunctionPromptConfig(function=function, arguments=arguments):
194
+ content = function(**arguments)
195
+ rendered_parts.append(render_prompt(content, {"agent": context}))
196
+
197
+ return "\n\n".join(rendered_parts) if rendered_parts else None
198
+
199
+ async def write_system_prompt_file(
200
+ self,
201
+ prompt_manager: PromptManager | None = None,
202
+ context: dict[str, Any] | None = None,
203
+ ) -> str | None:
204
+ """Write system prompt to a temporary file.
205
+
206
+ Creates a temp file in the system temp directory that will be
207
+ cleaned up on system restart.
208
+
209
+ Args:
210
+ prompt_manager: Optional prompt manager for resolving library references
211
+ context: Optional context for template rendering
212
+
213
+ Returns:
214
+ Path to the temp file, or None if no prompt configured
215
+ """
216
+ content = await self.render_system_prompt(prompt_manager, context)
217
+ if not content:
218
+ return None
219
+
220
+ fd, path = tempfile.mkstemp(prefix="agentpool_prompt_", suffix=".txt")
221
+ with os.fdopen(fd, "w") as f:
222
+ f.write(content)
223
+ return path
224
+
225
+ def get_execution_environment(self) -> ExecutionEnvironment:
226
+ """Create execution environment from config."""
227
+ if isinstance(self.execution_environment, str):
228
+ return get_environment(self.execution_environment)
229
+ return self.execution_environment.get_provider()
230
+
231
+ def get_client_execution_environment(self) -> ExecutionEnvironment | None:
232
+ """Create client execution environment from config.
233
+
234
+ Returns None if not configured (caller should fall back to main env).
235
+ """
236
+ if self.client_execution_environment is None:
237
+ return None
238
+ if isinstance(self.client_execution_environment, str):
239
+ return get_environment(self.client_execution_environment)
240
+ return self.client_execution_environment.get_provider()
241
+
242
+ @property
243
+ def model_providers(self) -> list[ProviderType]:
244
+ """Return the model providers used by this ACP agent.
245
+
246
+ Override in subclasses to specify which providers the agent uses.
247
+ Used for intelligent model discovery and fallback configuration.
248
+ """
249
+ return []
250
+
251
+
252
+ class ACPAgentConfig(BaseACPAgentConfig):
253
+ """Configuration for a custom ACP agent with explicit command.
254
+
255
+ Use this for ACP servers that don't have a preset, or when you need
256
+ full control over the command and arguments.
257
+
258
+ Example:
259
+ ```yaml
260
+ agents:
261
+ custom_agent:
262
+ type: acp
263
+ provider: custom
264
+ command: my-acp-server
265
+ args: ["--mode", "coding"]
266
+ cwd: /path/to/project
267
+ ```
268
+ """
269
+
270
+ model_config = ConfigDict(json_schema_extra={"title": "Custom ACP Agent Configuration"})
271
+
272
+ provider: Literal["custom"] = Field("custom", init=False)
273
+ """Discriminator for custom ACP agent."""
274
+
275
+ command: str = Field(
276
+ ...,
277
+ title="Command",
278
+ examples=["claude-code-acp", "aider", "my-custom-acp"],
279
+ )
280
+ """Command to spawn the ACP server."""
281
+
282
+ args: list[str] = Field(
283
+ default_factory=list,
284
+ title="Arguments",
285
+ examples=[["--mode", "coding"], ["--debug", "--verbose"]],
286
+ )
287
+ """Arguments to pass to the command."""
288
+
289
+ providers: list[ProviderType] = Field(
290
+ default_factory=list,
291
+ title="Providers",
292
+ examples=[["openai", "anthropic"], ["gemini"]],
293
+ )
294
+ """Model providers this agent can use."""
295
+
296
+ @property
297
+ def model_providers(self) -> list[ProviderType]:
298
+ """Return configured providers for custom ACP agents."""
299
+ return list(self.providers)
300
+
301
+ def get_command(self) -> str:
302
+ """Get the command to spawn the ACP server."""
303
+ return self.command
304
+
305
+ async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
306
+ """Get command arguments."""
307
+ _ = prompt_manager # Custom agents use explicit args
308
+ return self.args