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,345 @@
1
+ """MCP Registry client service for discovering and managing MCP servers.
2
+
3
+ This module provides functionality to interact with the Model Context Protocol
4
+ registry API for server discovery and configuration.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from dataclasses import dataclass
10
+ import logging
11
+ import time
12
+ from typing import Any, Literal, Self
13
+
14
+ import anyio
15
+ import httpx
16
+ from pydantic import Field
17
+ from schemez import Schema
18
+
19
+
20
+ # Constants
21
+ HTTP_NOT_FOUND = 404
22
+ CACHE_TTL = 3600 # 1 hour
23
+ NAME = "io.modelcontextprotocol.registry/official"
24
+
25
+ ServiceName = str
26
+ log = logging.getLogger(__name__)
27
+ TransportType = Literal["stdio", "sse", "websocket", "http"]
28
+
29
+
30
+ class UnsupportedTransportError(Exception):
31
+ """Raised when no supported transport is available."""
32
+
33
+
34
+ class RegistryRepository(Schema):
35
+ """Repository information for a registry server."""
36
+
37
+ url: str | None = None
38
+ source: str | None = None
39
+ """Repository platform (e.g., 'github')."""
40
+
41
+ subfolder: str | None = None
42
+ """Repository subfolder path."""
43
+
44
+
45
+ class RegistryTransport(Schema):
46
+ """Transport configuration for a package."""
47
+
48
+ type: str
49
+ """Transport type (stdio, sse, streamable-http)."""
50
+
51
+ url: str | None = None
52
+ """URL for HTTP transports."""
53
+
54
+
55
+ class RegistryPackage(Schema):
56
+ """Package information for installing an MCP server."""
57
+
58
+ registry_type: str = Field(alias="registryType")
59
+ """Package registry type (npm, pypi, docker)."""
60
+
61
+ identifier: str
62
+ """Package identifier."""
63
+
64
+ version: str | None = None
65
+ """Package version."""
66
+
67
+ transport: RegistryTransport
68
+ """Transport configuration."""
69
+
70
+ environment_variables: list[dict[str, Any]] = Field(
71
+ default_factory=list, alias="environmentVariables"
72
+ )
73
+ """Environment variables."""
74
+
75
+ package_arguments: list[dict[str, Any]] = Field(default_factory=list, alias="packageArguments")
76
+ """Package arguments."""
77
+
78
+ runtime_hint: str | None = Field(None, alias="runtimeHint")
79
+ """Runtime hint."""
80
+
81
+ registry_base_url: str | None = Field(None, alias="registryBaseUrl")
82
+ """Registry base URL."""
83
+
84
+ file_sha256: str | None = Field(None, alias="fileSha256")
85
+ """File SHA256 hash."""
86
+
87
+
88
+ class RegistryRemote(Schema):
89
+ """Remote endpoint configuration."""
90
+
91
+ type: str
92
+ """Remote type (sse, streamable-http)."""
93
+
94
+ url: str
95
+ """Remote URL."""
96
+
97
+ headers: list[dict[str, Any]] = Field(default_factory=list)
98
+ """Request headers."""
99
+
100
+
101
+ class RegistryServer(Schema):
102
+ """MCP server entry from the registry."""
103
+
104
+ name: ServiceName
105
+ """Unique server identifier."""
106
+
107
+ description: str
108
+ """Server description."""
109
+
110
+ version: str
111
+ """Server version."""
112
+
113
+ repository: RegistryRepository
114
+ """Repository information."""
115
+
116
+ packages: list[RegistryPackage] = Field(default_factory=list)
117
+ """Available packages."""
118
+
119
+ remotes: list[RegistryRemote] = Field(default_factory=list)
120
+ """Remote endpoints."""
121
+
122
+ schema_: str | None = Field(None, alias="$schema")
123
+ """JSON schema URL."""
124
+
125
+ def get_preferred_transport(self) -> TransportType:
126
+ """Select optimal transport method based on availability and performance."""
127
+ # Prefer local packages for better performance/security
128
+ for package in self.packages:
129
+ if package.registry_type in ["docker", "oci"]: # OCI containers
130
+ return "stdio"
131
+
132
+ # Fallback to remote endpoints
133
+ for remote in self.remotes:
134
+ if remote.type == "sse":
135
+ return "sse"
136
+ if remote.type in ["streamable-http", "http"]:
137
+ return "http"
138
+ if remote.type == "websocket":
139
+ return "websocket"
140
+
141
+ # Provide helpful error message
142
+ available_transports = []
143
+ if self.packages:
144
+ available_transports.extend([f"package:{pkg.registry_type}" for pkg in self.packages])
145
+ if self.remotes:
146
+ available_transports.extend([f"remote:{remote.type}" for remote in self.remotes])
147
+
148
+ if available_transports:
149
+ error_msg = (
150
+ f"No supported transport for {self.name}. "
151
+ f"Available: {available_transports}. "
152
+ f"Supported: docker packages, sse/streamable-http/websocket remotes"
153
+ )
154
+ else:
155
+ error_msg = (
156
+ f"No transports available for {self.name}. Server metadata may be incomplete"
157
+ )
158
+
159
+ raise UnsupportedTransportError(error_msg)
160
+
161
+
162
+ class RegistryServerWrapper(Schema):
163
+ """Wrapper for server data from the official registry API."""
164
+
165
+ server: RegistryServer
166
+ """The actual server data."""
167
+
168
+ meta: dict[str, Any] = Field(default_factory=dict, alias="_meta")
169
+ """Registry metadata."""
170
+
171
+
172
+ class RegistryListResponse(Schema):
173
+ """Response from the registry list servers endpoint."""
174
+
175
+ servers: list[RegistryServerWrapper]
176
+ """List of wrapped server entries."""
177
+
178
+ metadata: dict[str, Any] = Field(default_factory=dict)
179
+ """Response metadata."""
180
+
181
+
182
+ @dataclass(slots=True)
183
+ class ListServersCacheEntry:
184
+ """Cache entry for list_servers results."""
185
+
186
+ servers: list[RegistryServer]
187
+ timestamp: float
188
+
189
+
190
+ @dataclass(slots=True)
191
+ class GetServerCacheEntry:
192
+ """Cache entry for get_server results."""
193
+
194
+ server: RegistryServer
195
+ timestamp: float
196
+
197
+
198
+ class MCPRegistryClient:
199
+ """Client for interacting with the MCP registry API."""
200
+
201
+ def __init__(self, base_url: str = "https://registry.modelcontextprotocol.io") -> None:
202
+ self.base_url = base_url.rstrip("/")
203
+ self.client = httpx.AsyncClient(timeout=30.0)
204
+ self._cache_lists: dict[str, ListServersCacheEntry] = {}
205
+ self._cache_servers: dict[str, GetServerCacheEntry] = {}
206
+
207
+ async def list_servers(
208
+ self, search: str | None = None, status: str = "active"
209
+ ) -> list[RegistryServer]:
210
+ """List servers from registry with optional filtering."""
211
+ cache_key = f"list_servers:{search}:{status}"
212
+
213
+ # Check cache first
214
+ if cache_key in self._cache_lists:
215
+ cached_entry = self._cache_lists[cache_key]
216
+ if time.time() - cached_entry.timestamp < CACHE_TTL:
217
+ log.debug("Using cached server list")
218
+ return cached_entry.servers
219
+
220
+ try:
221
+ log.info("Fetching server list from registry")
222
+ response = await self.client.get(f"{self.base_url}/v0/servers")
223
+ response.raise_for_status()
224
+ data = response.json()
225
+ except httpx.HTTPError as e:
226
+ msg = f"Failed to list servers: {e}"
227
+ raise MCPRegistryError(msg) from e
228
+ else:
229
+ data = RegistryListResponse(**data)
230
+ if status: # Filter by status from metadata
231
+ wrappers = [w for w in data.servers if w.meta.get(NAME, {}).get("status") == status]
232
+ else:
233
+ wrappers = data.servers
234
+ servers = [wrapper.server for wrapper in wrappers]
235
+ if search: # Filter by search term
236
+ lower = search.lower()
237
+ servers = [s for s in servers if lower in s.name.lower() + s.description.lower()]
238
+ # Cache the result
239
+ ts = time.time()
240
+ self._cache_lists[cache_key] = ListServersCacheEntry(servers=servers, timestamp=ts)
241
+ log.info("Successfully fetched %d servers", len(servers))
242
+ return servers
243
+
244
+ async def get_server(self, server_id: str) -> RegistryServer:
245
+ """Get full server details including packages."""
246
+ cache_key = f"server:{server_id}"
247
+ # Check cache first
248
+ if cache_key in self._cache_servers:
249
+ cached_entry = self._cache_servers[cache_key]
250
+ if time.time() - cached_entry.timestamp < CACHE_TTL:
251
+ log.debug("Using cached server details for %s", server_id)
252
+ return cached_entry.server
253
+
254
+ log.info("Fetching server details for %s", server_id)
255
+ try:
256
+ # Get all wrappers to access metadata
257
+ response = await self.client.get(f"{self.base_url}/v0/servers")
258
+ response.raise_for_status()
259
+ data = response.json()
260
+ response_data = RegistryListResponse(**data)
261
+ # Find server by name
262
+ target_wrapper = None
263
+ for wrapper in response_data.servers:
264
+ if wrapper.server.name == server_id:
265
+ target_wrapper = wrapper
266
+ break
267
+
268
+ if not target_wrapper:
269
+ msg = f"Server {server_id!r} not found in registry"
270
+ raise MCPRegistryError(msg)
271
+ # Get the UUID from metadata
272
+ server_uuid = target_wrapper.meta.get(NAME, {}).get("id")
273
+ if not server_uuid:
274
+ msg = f"No UUID found for server {server_id!r}"
275
+ raise MCPRegistryError(msg)
276
+ # Now fetch the full server details using UUID
277
+ response = await self.client.get(f"{self.base_url}/v0/servers/{server_uuid}")
278
+ response.raise_for_status()
279
+ server_data = response.json()
280
+ except httpx.HTTPStatusError as e:
281
+ if e.response.status_code == HTTP_NOT_FOUND:
282
+ msg = f"Server {server_id!r} not found in registry"
283
+ raise MCPRegistryError(msg) from e
284
+ msg = f"Failed to get server details: {e}"
285
+ raise MCPRegistryError(msg) from e
286
+ except (httpx.HTTPError, ValueError, KeyError) as e:
287
+ msg = f"Failed to get server details: {e}"
288
+ raise MCPRegistryError(msg) from e
289
+ else:
290
+ server = RegistryServer(**server_data)
291
+ ts = time.time()
292
+ self._cache_servers[cache_key] = GetServerCacheEntry(server=server, timestamp=ts)
293
+ log.info("Successfully fetched server details for %s", server_id)
294
+ return server
295
+
296
+ def clear_cache(self) -> None:
297
+ """Clear the metadata cache."""
298
+ self._cache_lists.clear()
299
+ self._cache_servers.clear()
300
+ log.debug("Cleared metadata cache")
301
+
302
+ async def close(self) -> None:
303
+ """Close the HTTP client."""
304
+ await self.client.aclose()
305
+ log.debug("Closed HTTP client")
306
+
307
+ async def __aenter__(self) -> Self:
308
+ return self
309
+
310
+ async def __aexit__(self, *args: object) -> None:
311
+ await self.close()
312
+
313
+
314
+ class MCPRegistryError(Exception):
315
+ """Exception raised for MCP registry operations."""
316
+
317
+
318
+ if __name__ == "__main__":
319
+
320
+ async def main() -> None:
321
+ """Test the MCP registry client with caching and transport resolution."""
322
+ async with MCPRegistryClient() as client:
323
+ print("Listing servers from official registry...")
324
+ servers = await client.list_servers()
325
+ print(f"Found {len(servers)} servers")
326
+
327
+ # Test transport resolution for first few servers
328
+ for server in servers[:3]:
329
+ print(f"\n=== {server.name} ===")
330
+ try:
331
+ transport = server.get_preferred_transport()
332
+ print(f"Preferred transport: {transport}")
333
+
334
+ # Show available transports
335
+ if server.packages:
336
+ print(f"Packages: {[p.registry_type for p in server.packages]}")
337
+ if server.remotes:
338
+ print(f"Remotes: {[r.type for r in server.remotes]}")
339
+
340
+ except UnsupportedTransportError as e:
341
+ print(f"Transport error: {e}")
342
+
343
+ print(server)
344
+
345
+ anyio.run(main)
@@ -0,0 +1,88 @@
1
+ """Functions to discover available MCP servers from PulseMCP."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Literal
6
+
7
+ import anyenv
8
+ from pydantic import Field
9
+ from schemez import Schema
10
+
11
+
12
+ class Remote(Schema):
13
+ """Information about a remote MCP server endpoint."""
14
+
15
+ url_direct: str | None = None
16
+ url_setup: str | None = None
17
+ transport: Literal["streamable_http", "sse"] | None = None
18
+ authentication_method: str | None = None
19
+ cost: str | None = None
20
+
21
+
22
+ class ServerInfo(Schema):
23
+ """Information about an MCP server."""
24
+
25
+ name: str
26
+ url: str
27
+ external_url: str | None = None
28
+ short_description: str
29
+ source_code_url: str | None = None
30
+ github_stars: int | None = Field(default=None)
31
+ package_registry: str | None = None
32
+ package_name: str | None = None
33
+ package_download_count: int | None = Field(default=None)
34
+ ai_generated_description: str | None = Field(
35
+ default=None, alias="EXPERIMENTAL_ai_generated_description"
36
+ )
37
+ remotes: list[Remote] = Field(default_factory=list)
38
+
39
+
40
+ class ServerListResponse(Schema):
41
+ """Response from the MCP server list endpoint."""
42
+
43
+ servers: list[ServerInfo]
44
+ next: str | None = None
45
+ total_count: int
46
+
47
+
48
+ async def get_mcp_servers(
49
+ query: str | None = None,
50
+ count_per_page: int | None = None,
51
+ offset: int | None = None,
52
+ ) -> list[ServerInfo]:
53
+ """Fetch all available MCP servers.
54
+
55
+ Args:
56
+ query: Optional query string to filter the results.
57
+ count_per_page: Optional number of results to return per page.
58
+ offset: Optional offset for pagination.
59
+
60
+ Returns:
61
+ List of ServerInfo objects representing available MCP servers.
62
+
63
+ Raises:
64
+ HTTPError: If the API request fails.
65
+ """
66
+ params: dict[str, Any] = {}
67
+ if query:
68
+ params["query"] = query
69
+ if count_per_page is not None:
70
+ params["count_per_page"] = count_per_page
71
+ if offset is not None:
72
+ params["offset"] = offset
73
+ result = await anyenv.get_json(
74
+ "https://api.pulsemcp.com/v0beta/servers",
75
+ headers={"User-Agent": "MCPToolDiscovery/1.0"},
76
+ params=params,
77
+ return_type=ServerListResponse,
78
+ )
79
+ return result.servers
80
+
81
+
82
+ if __name__ == "__main__":
83
+ import asyncio
84
+
85
+ servers = asyncio.run(get_mcp_servers(count_per_page=100))
86
+ print(f"Found {len(servers)} MCP servers")
87
+ for server in servers:
88
+ print(server)