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,61 @@
1
+ """McpRun based toolset implementation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from typing import TYPE_CHECKING, Any, cast
7
+
8
+ from schemez import OpenAIFunctionDefinition
9
+
10
+ from agentpool.resource_providers import ResourceProvider
11
+
12
+
13
+ if TYPE_CHECKING:
14
+ from mcp.types import CallToolResult
15
+
16
+ from agentpool.tools.base import Tool
17
+
18
+
19
+ class McpRunTools(ResourceProvider):
20
+ """Provider for MCP.run tools."""
21
+
22
+ def __init__(self, entity_id: str, session_id: str | None = None) -> None:
23
+ from mcp_run import Client, ClientConfig # type: ignore[import-untyped]
24
+
25
+ super().__init__(name=entity_id)
26
+ id_ = session_id or os.environ.get("MCP_RUN_SESSION_ID")
27
+ config = ClientConfig()
28
+ self.client = Client(session_id=id_, config=config)
29
+ self._tools: list[Tool] | None = None
30
+
31
+ async def get_tools(self) -> list[Tool]:
32
+ """Get tools from MCP.run."""
33
+ # Return cached tools if available
34
+ if self._tools is not None:
35
+ return self._tools
36
+
37
+ self._tools = []
38
+ for name, tool in self.client.tools.items():
39
+
40
+ async def run(tool_name: str = name, **input_dict: Any) -> CallToolResult:
41
+ async with self.client.mcp_sse().connect() as session:
42
+ return await session.call_tool(tool_name, arguments=input_dict) # type: ignore[no-any-return]
43
+
44
+ run.__name__ = name
45
+ wrapped_tool = self.create_tool(
46
+ run, schema_override=cast(OpenAIFunctionDefinition, tool.input_schema)
47
+ )
48
+ self._tools.append(wrapped_tool)
49
+
50
+ return self._tools
51
+
52
+
53
+ if __name__ == "__main__":
54
+ import anyio
55
+
56
+ async def main() -> None:
57
+ tools = McpRunTools("default")
58
+ fns = await tools.get_tools()
59
+ print(fns)
60
+
61
+ anyio.run(main)
@@ -0,0 +1,146 @@
1
+ """Apprise-based notifications toolset implementation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from schemez.functionschema.typedefs import OpenAIFunctionDefinition
8
+
9
+ from agentpool.log import get_logger
10
+ from agentpool.resource_providers import ResourceProvider
11
+
12
+
13
+ if TYPE_CHECKING:
14
+ from collections.abc import Mapping
15
+
16
+ from agentpool.tools.base import Tool
17
+
18
+
19
+ logger = get_logger(__name__)
20
+
21
+
22
+ class NotificationsTools(ResourceProvider):
23
+ """Provider for Apprise-based notification tools.
24
+
25
+ Provides a send_notification tool that can send messages via
26
+ various notification services (Slack, Telegram, Email, etc.)
27
+ configured through Apprise URLs.
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ channels: Mapping[str, str | list[str]],
33
+ name: str = "notifications",
34
+ ) -> None:
35
+ """Initialize notifications provider.
36
+
37
+ Args:
38
+ channels: Named notification channels mapping to Apprise URL(s).
39
+ Values can be a single URL string or list of URLs.
40
+ name: Provider name
41
+ """
42
+ import apprise
43
+
44
+ super().__init__(name=name)
45
+ self.channels = channels
46
+ self._tools: list[Tool] | None = None
47
+ self._apprise = apprise.Apprise()
48
+ for channel_name, urls in self.channels.items():
49
+ # Normalize to list
50
+ url_list = [urls] if isinstance(urls, str) else urls
51
+ for url in url_list:
52
+ # Tag each URL with the channel name for filtering
53
+ self._apprise.add(url, tag=channel_name)
54
+ logger.debug("Added notification URL", channel=channel_name, url=url[:30] + "...")
55
+
56
+ async def get_tools(self) -> list[Tool]:
57
+ """Get notification tools with dynamic schema based on configured channels."""
58
+ if self._tools is not None:
59
+ return self._tools
60
+
61
+ channel_names = sorted(self.channels.keys())
62
+ # Build schema with enum for available channels
63
+ properties: dict[str, Any] = {
64
+ "message": {"type": "string", "description": "The notification message body"},
65
+ "title": {"type": "string", "description": "Optional notification title"},
66
+ }
67
+
68
+ if channel_names:
69
+ properties["channel"] = {
70
+ "type": "string",
71
+ "enum": channel_names,
72
+ "description": "Send to a specific channel. If not specified, sends to all channels.", # noqa: E501
73
+ }
74
+ else:
75
+ properties["channel"] = {
76
+ "type": "string",
77
+ "description": "Send to a specific channel. If not specified, sends to all channels.", # noqa: E501
78
+ }
79
+
80
+ schema_override = OpenAIFunctionDefinition(
81
+ name="send_notification",
82
+ description=(
83
+ "Send a notification via configured channels. "
84
+ "Specify a channel name to send to that channel only, "
85
+ "or omit to broadcast to all channels."
86
+ ),
87
+ parameters={"type": "object", "properties": properties, "required": ["message"]},
88
+ )
89
+
90
+ self._tools = [
91
+ self.create_tool(
92
+ self.send_notification, schema_override=schema_override, open_world=True
93
+ )
94
+ ]
95
+ return self._tools
96
+
97
+ async def send_notification(
98
+ self,
99
+ message: str,
100
+ title: str | None = None,
101
+ channel: str | None = None,
102
+ ) -> dict[str, Any]:
103
+ """Send a notification via configured channels.
104
+
105
+ Args:
106
+ message: The notification message body
107
+ title: Optional notification title
108
+ channel: Send to specific channel, or all if not specified
109
+
110
+ Returns:
111
+ Result dict with success status and details
112
+ """
113
+ if channel:
114
+ if channel not in self.channels:
115
+ return {
116
+ "success": False,
117
+ "error": f"Unknown channel: {channel}",
118
+ "available_channels": list(self.channels.keys()),
119
+ }
120
+ notify_tag = channel
121
+ target_desc = f"channel '{channel}'"
122
+ else:
123
+ notify_tag = "all"
124
+ target_desc = "all channels"
125
+
126
+ logger.info("Sending notification", target=target_desc, title=title, length=len(message))
127
+
128
+ try:
129
+ success = self._apprise.notify(body=message, title=title or "", tag=notify_tag)
130
+ except Exception as e:
131
+ logger.exception("Failed to send notification")
132
+ return {"success": False, "error": str(e), "target": target_desc}
133
+
134
+ if success:
135
+ logger.info("Notification sent successfully", target=target_desc)
136
+ return {
137
+ "success": True,
138
+ "target": target_desc,
139
+ "message": "Notification sent successfully",
140
+ }
141
+ logger.warning("Notification may have partially failed", target=target_desc)
142
+ return {
143
+ "success": False,
144
+ "target": target_desc,
145
+ "message": "Notification delivery may have failed for some channels",
146
+ }
@@ -0,0 +1,118 @@
1
+ """OpenAPI toolset provider."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from schemez.openapi.callable_factory import OpenAPICallableFactory
8
+ from schemez.openapi.loader import load_openapi_spec, parse_operations
9
+ from upathtools import read_path, to_upath
10
+
11
+ from agentpool.log import get_logger
12
+ from agentpool.resource_providers import ResourceProvider
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ import httpx
17
+ from upathtools import JoinablePathLike
18
+
19
+ from agentpool.tools.base import Tool
20
+
21
+ logger = get_logger(__name__)
22
+
23
+
24
+ class OpenAPITools(ResourceProvider):
25
+ """Provider for OpenAPI-based tools."""
26
+
27
+ def __init__(
28
+ self,
29
+ spec: JoinablePathLike,
30
+ base_url: str = "",
31
+ name: str | None = None,
32
+ headers: dict[str, str] | None = None,
33
+ ) -> None:
34
+ super().__init__(name=name or f"openapi_{base_url}")
35
+ self.spec_url = spec
36
+ self.base_url = base_url
37
+ self.headers = headers or {}
38
+ self._client: httpx.AsyncClient | None = None
39
+ self._spec: dict[str, Any] | None = None
40
+ self._schemas: dict[str, dict[str, Any]] = {}
41
+ self._operations: dict[str, Any] = {}
42
+ self._factory: OpenAPICallableFactory | None = None
43
+
44
+ async def get_tools(self) -> list[Tool]:
45
+ """Get all API operations as tools."""
46
+ if not self._spec:
47
+ await self._load_spec()
48
+
49
+ if not self._factory:
50
+ return []
51
+
52
+ tools = []
53
+ for op_id, config in self._operations.items():
54
+ method = self._factory.create_callable(op_id, config)
55
+ tool = self.create_tool(method, metadata={"operation": op_id})
56
+ tools.append(tool)
57
+ return tools
58
+
59
+ async def _load_spec(self) -> dict[str, Any]:
60
+ import httpx
61
+
62
+ if not self._client:
63
+ self._client = httpx.AsyncClient(base_url=self.base_url, headers=self.headers)
64
+
65
+ try:
66
+ spec_str = str(self.spec_url)
67
+ if spec_str.startswith(("http://", "https://")):
68
+ self._spec = load_openapi_spec(spec_str)
69
+ else:
70
+ path = to_upath(self.spec_url)
71
+ if path.exists():
72
+ self._spec = load_openapi_spec(path)
73
+ else:
74
+ # Try reading via upathtools for remote/special paths
75
+ content = await read_path(self.spec_url)
76
+ import tempfile
77
+
78
+ with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f:
79
+ f.write(content)
80
+ temp_path = f.name
81
+ try:
82
+ self._spec = load_openapi_spec(temp_path)
83
+ finally:
84
+ to_upath(temp_path).unlink(missing_ok=True)
85
+
86
+ if not self._spec:
87
+ msg = f"Empty or invalid OpenAPI spec from {self.spec_url}"
88
+ raise ValueError(msg) # noqa: TRY301
89
+
90
+ self._schemas = self._spec.get("components", {}).get("schemas", {})
91
+ self._operations = parse_operations(self._spec.get("paths", {}))
92
+ self._factory = OpenAPICallableFactory(self._schemas, self._make_request)
93
+
94
+ if not self._operations:
95
+ logger.warning("No operations found in spec %s.", self.spec_url)
96
+
97
+ except Exception as e:
98
+ msg = f"Failed to load OpenAPI spec from {self.spec_url}"
99
+ raise ValueError(msg) from e
100
+ else:
101
+ return self._spec
102
+
103
+ async def _make_request(
104
+ self,
105
+ method: str,
106
+ path: str,
107
+ params: dict[str, Any],
108
+ body: dict[str, Any] | None,
109
+ ) -> dict[str, Any]:
110
+ """Perform HTTP request to the API."""
111
+ if not self._client:
112
+ import httpx
113
+
114
+ self._client = httpx.AsyncClient(base_url=self.base_url, headers=self.headers)
115
+
116
+ response = await self._client.request(method=method, url=path, params=params, json=body)
117
+ response.raise_for_status()
118
+ return response.json() # type: ignore[no-any-return]
File without changes
@@ -0,0 +1,202 @@
1
+ """Search toolset implementation using searchly providers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from agentpool.log import get_logger
8
+ from agentpool.resource_providers import ResourceProvider
9
+
10
+
11
+ if TYPE_CHECKING:
12
+ from searchly.base import (
13
+ CountryCode,
14
+ LanguageCode,
15
+ NewsSearchProvider,
16
+ NewsSearchResponse,
17
+ WebSearchProvider,
18
+ WebSearchResponse,
19
+ )
20
+
21
+ from agentpool.agents.context import AgentContext
22
+ from agentpool.tools.base import Tool
23
+
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ def format_web_results(response: WebSearchResponse, query: str) -> str:
29
+ """Format web search results as markdown."""
30
+ if not response.results:
31
+ return f"No results found for: {query}"
32
+
33
+ lines = [f"## Web Search Results for: {query}\n"]
34
+ for i, result in enumerate(response.results, 1):
35
+ lines.append(f"### {i}. [{result.title}]({result.url})")
36
+ lines.append(f"{result.snippet}\n")
37
+ return "\n".join(lines)
38
+
39
+
40
+ def format_news_results(response: NewsSearchResponse, query: str) -> str:
41
+ """Format news search results as markdown."""
42
+ if not response.results:
43
+ return f"No news results found for: {query}"
44
+
45
+ lines = [f"## News Search Results for: {query}\n"]
46
+ for i, result in enumerate(response.results, 1):
47
+ # Build header with source/date if available
48
+ header = f"### {i}. [{result.title}]({result.url})"
49
+ lines.append(header)
50
+
51
+ meta_parts = []
52
+ if result.source:
53
+ meta_parts.append(f"*{result.source}*")
54
+ if result.published:
55
+ meta_parts.append(f"({result.published})")
56
+ if meta_parts:
57
+ lines.append(" ".join(meta_parts))
58
+
59
+ lines.append(f"{result.snippet}\n")
60
+ return "\n".join(lines)
61
+
62
+
63
+ class SearchTools(ResourceProvider):
64
+ """Provider for web and news search tools."""
65
+
66
+ def __init__(
67
+ self,
68
+ web_search: WebSearchProvider | None = None,
69
+ news_search: NewsSearchProvider | None = None,
70
+ ) -> None:
71
+ """Initialize search tools provider.
72
+
73
+ Args:
74
+ web_search: Web search provider instance.
75
+ news_search: News search provider instance.
76
+ """
77
+ super().__init__(name="search")
78
+ self._web_provider = web_search
79
+ self._news_provider = news_search
80
+
81
+ async def web_search( # noqa: D417
82
+ self,
83
+ agent_ctx: AgentContext,
84
+ query: str,
85
+ *,
86
+ max_results: int = 10,
87
+ country: CountryCode | None = None,
88
+ language: LanguageCode | None = None,
89
+ **kwargs: Any,
90
+ ) -> str:
91
+ """Search the web for information.
92
+
93
+ Args:
94
+ query: Search query string.
95
+ max_results: Maximum number of results to return.
96
+ country: Country code for regional results.
97
+ language: Language code for results.
98
+ **kwargs: Provider-specific options.
99
+
100
+ Returns:
101
+ Formatted markdown search results.
102
+ """
103
+ from agentpool.agents.events import TextContentItem
104
+
105
+ assert self._web_provider is not None
106
+
107
+ await agent_ctx.events.tool_call_progress(
108
+ title=f"Searching: {query}",
109
+ items=[TextContentItem(text=f"Searching web for: {query}")],
110
+ )
111
+
112
+ response = await self._web_provider.web_search(
113
+ query,
114
+ max_results=max_results,
115
+ country=country,
116
+ language=language,
117
+ **kwargs,
118
+ )
119
+
120
+ result_count = len(response.results)
121
+ formatted = format_web_results(response, query)
122
+
123
+ await agent_ctx.events.tool_call_progress(
124
+ title=f"Found {result_count} results",
125
+ items=[TextContentItem(text=formatted)],
126
+ replace_content=True,
127
+ )
128
+
129
+ return formatted
130
+
131
+ async def news_search( # noqa: D417
132
+ self,
133
+ agent_ctx: AgentContext,
134
+ query: str,
135
+ *,
136
+ max_results: int = 10,
137
+ country: CountryCode | None = None,
138
+ language: LanguageCode | None = None,
139
+ **kwargs: Any,
140
+ ) -> str:
141
+ """Search for news articles.
142
+
143
+ Args:
144
+ query: Search query string.
145
+ max_results: Maximum number of results to return.
146
+ country: Country code for regional results.
147
+ language: Language code for results.
148
+ **kwargs: Provider-specific options.
149
+
150
+ Returns:
151
+ Formatted markdown news results.
152
+ """
153
+ from agentpool.agents.events import TextContentItem
154
+
155
+ assert self._news_provider is not None
156
+
157
+ await agent_ctx.events.tool_call_progress(
158
+ title=f"Searching news: {query}",
159
+ items=[TextContentItem(text=f"Searching news for: {query}")],
160
+ )
161
+
162
+ response = await self._news_provider.news_search(
163
+ query,
164
+ max_results=max_results,
165
+ country=country,
166
+ language=language,
167
+ **kwargs,
168
+ )
169
+
170
+ result_count = len(response.results)
171
+ formatted = format_news_results(response, query)
172
+
173
+ await agent_ctx.events.tool_call_progress(
174
+ title=f"Found {result_count} articles",
175
+ items=[TextContentItem(text=formatted)],
176
+ replace_content=True,
177
+ )
178
+
179
+ return formatted
180
+
181
+ async def get_tools(self) -> list[Tool]:
182
+ """Get search tools from configured providers."""
183
+ tools: list[Tool] = []
184
+ if self._web_provider:
185
+ tools.append(
186
+ self.create_tool(
187
+ self.web_search,
188
+ read_only=True,
189
+ idempotent=True,
190
+ open_world=True,
191
+ )
192
+ )
193
+ if self._news_provider:
194
+ tools.append(
195
+ self.create_tool(
196
+ self.news_search,
197
+ read_only=True,
198
+ idempotent=True,
199
+ open_world=True,
200
+ )
201
+ )
202
+ return tools