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,176 @@
1
+ """Get Python code from Pydantic model schema."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import uuid
7
+
8
+ from pydantic_ai import UserPromptPart
9
+ from schemez import jsonschema_to_code, openapi_to_code
10
+ from slashed import CommandContext # noqa: TC002
11
+
12
+ from agentpool.log import get_logger
13
+ from agentpool.messaging.context import NodeContext # noqa: TC001
14
+ from agentpool_commands.base import NodeCommand
15
+ from agentpool_server.acp_server.session import ACPSession # noqa: TC001
16
+
17
+ from .helpers import SCHEMA_EXTRACTION_SCRIPT
18
+
19
+
20
+ logger = get_logger(__name__)
21
+
22
+
23
+ class GetSchemaCommand(NodeCommand):
24
+ """Get Python code from Pydantic model schema.
25
+
26
+ Supports both dot notation paths to BaseModel classes and URLs to OpenAPI schemas.
27
+ Uses datamodel-codegen to generate clean Python code from schemas.
28
+ """
29
+
30
+ name = "get-schema"
31
+ category = "docs"
32
+
33
+ async def execute_command(
34
+ self,
35
+ ctx: CommandContext[NodeContext[ACPSession]],
36
+ input_path: str,
37
+ *,
38
+ class_name: str | None = None,
39
+ cwd: str | None = None,
40
+ ) -> None:
41
+ """Get Python code from Pydantic model schema.
42
+
43
+ Args:
44
+ ctx: Command context with ACP session
45
+ input_path: Dot notation path to BaseModel or URL to OpenAPI schema
46
+ class_name: Optional custom class name for generated code
47
+ cwd: Working directory to run in (defaults to session cwd)
48
+ """
49
+ session = ctx.context.data
50
+ assert session
51
+
52
+ # Generate tool call ID
53
+ tool_call_id = f"get-schema-{uuid.uuid4().hex[:8]}"
54
+
55
+ try:
56
+ # Check if we have terminal access
57
+ if not (
58
+ session.client_capabilities
59
+ and session.client_capabilities.terminal
60
+ and session.acp_agent.terminal_access
61
+ ):
62
+ await session.notifications.send_agent_text(
63
+ "❌ **Terminal access not available for schema generation**"
64
+ )
65
+ return
66
+
67
+ # Determine if input is URL or dot path
68
+ is_url = input_path.startswith(("http://", "https://"))
69
+
70
+ # Start tool call
71
+ display_title = (
72
+ f"Generating schema from URL: {input_path}"
73
+ if is_url
74
+ else f"Generating schema from model: {input_path}"
75
+ )
76
+ await session.notifications.tool_call_start(
77
+ tool_call_id=tool_call_id,
78
+ title=display_title,
79
+ kind="read",
80
+ )
81
+
82
+ if is_url:
83
+ # Direct URL approach - use OpenAPIParser directly
84
+ try:
85
+ generated_code = await asyncio.to_thread(
86
+ openapi_to_code, input_path=input_path, class_name=class_name
87
+ )
88
+ except Exception as e: # noqa: BLE001
89
+ await session.notifications.tool_call_progress(
90
+ tool_call_id=tool_call_id,
91
+ status="failed",
92
+ title=f"Failed to generate from URL: {e!s}",
93
+ )
94
+ return
95
+
96
+ generated_code = generated_code.strip()
97
+
98
+ else:
99
+ # Dot path approach - client-side schema extraction
100
+ # Step 1: CLIENT-SIDE - Extract schema via inline script
101
+ schema_script = SCHEMA_EXTRACTION_SCRIPT.format(input_path=input_path)
102
+
103
+ # Run schema extraction client-side using uv run python -c
104
+ output, exit_code = await session.requests.run_command(
105
+ command="uv",
106
+ args=["run", "python", "-c", schema_script],
107
+ cwd=cwd or session.cwd,
108
+ )
109
+
110
+ if exit_code != 0:
111
+ error_msg = output.strip() or f"Exit code: {exit_code}"
112
+ await session.notifications.tool_call_progress(
113
+ tool_call_id=tool_call_id,
114
+ status="failed",
115
+ title=f"Failed to extract schema: {error_msg}",
116
+ )
117
+ return
118
+
119
+ schema_json = output.strip()
120
+ if not schema_json:
121
+ await session.notifications.tool_call_progress(
122
+ tool_call_id=tool_call_id,
123
+ status="failed",
124
+ title="No schema extracted from model",
125
+ )
126
+ return
127
+
128
+ # Step 2: SERVER-SIDE - Generate code from schema
129
+
130
+ try:
131
+ generated_code = await asyncio.to_thread(
132
+ jsonschema_to_code,
133
+ schema_json=schema_json,
134
+ class_name=class_name,
135
+ input_path=input_path,
136
+ )
137
+ except Exception as e: # noqa: BLE001
138
+ await session.notifications.tool_call_progress(
139
+ tool_call_id=tool_call_id,
140
+ status="failed",
141
+ title=f"Failed to generate code: {e!s}",
142
+ )
143
+ return
144
+
145
+ generated_code = generated_code.strip()
146
+
147
+ if not generated_code:
148
+ await session.notifications.tool_call_progress(
149
+ tool_call_id=tool_call_id,
150
+ status="completed",
151
+ title="No code generated from schema",
152
+ )
153
+ return
154
+
155
+ # Stage the generated code for use in agent context
156
+ staged_part = UserPromptPart(
157
+ content=f"Generated Python code from {input_path}:\n\n{generated_code}"
158
+ )
159
+ session.staged_content.add([staged_part])
160
+
161
+ # Send successful result - wrap in code block for proper display
162
+ staged_count = len(session.staged_content)
163
+ await session.notifications.tool_call_progress(
164
+ tool_call_id=tool_call_id,
165
+ status="completed",
166
+ title=f"Schema code generated and staged ({staged_count} total parts)",
167
+ content=[f"```python\n{generated_code}\n```"],
168
+ )
169
+
170
+ except Exception as e:
171
+ logger.exception("Unexpected error generating schema code", input_path=input_path)
172
+ await session.notifications.tool_call_progress(
173
+ tool_call_id=tool_call_id,
174
+ status="failed",
175
+ title=f"Error: {e}",
176
+ )
@@ -0,0 +1,110 @@
1
+ """Get Python source code using dot notation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import uuid
6
+
7
+ from pydantic_ai import UserPromptPart
8
+ from slashed import CommandContext # noqa: TC002
9
+
10
+ from agentpool.log import get_logger
11
+ from agentpool.messaging.context import NodeContext # noqa: TC001
12
+ import agentpool.utils.importing
13
+ from agentpool_commands.base import NodeCommand
14
+ from agentpool_server.acp_server.session import ACPSession # noqa: TC001
15
+
16
+
17
+ logger = get_logger(__name__)
18
+
19
+
20
+ class GetSourceCommand(NodeCommand):
21
+ """Get Python source code using dot notation.
22
+
23
+ Uses the AgentPool importing.py utility to fetch source code
24
+ for any Python object accessible via dot notation.
25
+ """
26
+
27
+ name = "get-source"
28
+ category = "docs"
29
+
30
+ async def execute_command(
31
+ self,
32
+ ctx: CommandContext[NodeContext[ACPSession]],
33
+ dot_path: str,
34
+ *,
35
+ cwd: str | None = None,
36
+ ) -> None:
37
+ """Get Python source code for an object.
38
+
39
+ Args:
40
+ ctx: Command context with ACP session
41
+ dot_path: Dot notation path to Python object (e.g., 'requests.Session.get')
42
+ cwd: Working directory to run in (defaults to session cwd)
43
+ """
44
+ session = ctx.context.data
45
+ assert session
46
+
47
+ # Generate tool call ID
48
+ tool_call_id = f"get-source-{uuid.uuid4().hex[:8]}"
49
+
50
+ try:
51
+ # Check if we have terminal access
52
+ if not (
53
+ session.client_capabilities
54
+ and session.client_capabilities.terminal
55
+ and session.acp_agent.terminal_access
56
+ ):
57
+ msg = "❌ **Terminal access not available for source code fetching**"
58
+ await session.notifications.send_agent_text(msg)
59
+ return
60
+
61
+ importing_py_path = agentpool.utils.importing.__file__
62
+ assert isinstance(importing_py_path, str)
63
+ await session.notifications.tool_call_start(
64
+ tool_call_id=tool_call_id,
65
+ title=f"Getting source: {dot_path}",
66
+ kind="read",
67
+ )
68
+ # Run importing.py as script
69
+ output, exit_code = await session.requests.run_command(
70
+ command="uv",
71
+ args=["run", importing_py_path, dot_path],
72
+ cwd=cwd or session.cwd,
73
+ )
74
+ # Check if command succeeded
75
+ if exit_code != 0:
76
+ error_msg = output.strip() or f"Exit code: {exit_code}"
77
+ await session.notifications.tool_call_progress(
78
+ tool_call_id=tool_call_id,
79
+ status="failed",
80
+ title=f"Failed to get source for {dot_path}: {error_msg}",
81
+ )
82
+ return
83
+ source_content = output.strip()
84
+ if not source_content:
85
+ await session.notifications.tool_call_progress(
86
+ tool_call_id=tool_call_id,
87
+ status="completed",
88
+ title="No source code found",
89
+ )
90
+ return
91
+ # Stage the source content for use in agent context
92
+ content = f"Python source code for {dot_path}:\n\n{source_content}"
93
+ staged_part = UserPromptPart(content=content)
94
+ session.staged_content.add([staged_part])
95
+ # Send successful result - wrap in code block for proper display
96
+ staged_count = len(session.staged_content)
97
+ await session.notifications.tool_call_progress(
98
+ tool_call_id=tool_call_id,
99
+ status="completed",
100
+ title=f"Source code fetched and staged ({staged_count} total parts)",
101
+ content=[f"```python\n{source_content}\n```"],
102
+ )
103
+
104
+ except Exception as e:
105
+ logger.exception("Unexpected error fetching source code", dot_path=dot_path)
106
+ await session.notifications.tool_call_progress(
107
+ tool_call_id=tool_call_id,
108
+ status="failed",
109
+ title=f"Error: {e}",
110
+ )
@@ -0,0 +1,111 @@
1
+ """Fetch git diff for a specific commit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import uuid
6
+
7
+ from pydantic_ai import UserPromptPart
8
+ from slashed import CommandContext # noqa: TC002
9
+
10
+ from agentpool.log import get_logger
11
+ from agentpool.messaging.context import NodeContext # noqa: TC001
12
+ from agentpool_commands.base import NodeCommand
13
+ from agentpool_server.acp_server.session import ACPSession # noqa: TC001
14
+
15
+
16
+ logger = get_logger(__name__)
17
+
18
+
19
+ class GitDiffCommand(NodeCommand):
20
+ """Fetch git diff for a specific commit.
21
+
22
+ Executes git diff client-side to get the complete diff
23
+ and displays it in a structured format.
24
+ """
25
+
26
+ name = "git-diff"
27
+ category = "docs"
28
+
29
+ async def execute_command(
30
+ self,
31
+ ctx: CommandContext[NodeContext[ACPSession]],
32
+ commit: str,
33
+ *,
34
+ base_commit: str | None = None,
35
+ cwd: str | None = None,
36
+ ) -> None:
37
+ """Fetch git diff for a specific commit.
38
+
39
+ Args:
40
+ ctx: Command context with ACP session
41
+ commit: Commit hash or reference to diff
42
+ base_commit: Base commit to compare against (defaults to commit~1)
43
+ cwd: Working directory to run git in (defaults to session cwd)
44
+ """
45
+ session = ctx.context.data
46
+ assert session
47
+ tool_call_id = f"git-diff-{uuid.uuid4().hex[:8]}"
48
+ try:
49
+ caps = session.client_capabilities # Check if we have terminal access for running git
50
+ if not (caps and caps.terminal and session.acp_agent.terminal_access):
51
+ msg = "❌ **Terminal access not available for git operations**"
52
+ await session.notifications.send_agent_text(msg)
53
+ return
54
+
55
+ # Build git diff command
56
+ if base_commit:
57
+ git_command = ["git", "diff", base_commit, commit]
58
+ display_title = f"Git diff: {base_commit}..{commit}"
59
+ else:
60
+ git_command = ["git", "diff", f"{commit}~1", commit]
61
+ display_title = f"Git diff: {commit}"
62
+
63
+ # Start tool call
64
+ await session.notifications.tool_call_start(
65
+ tool_call_id=tool_call_id,
66
+ title=display_title,
67
+ kind="execute",
68
+ )
69
+
70
+ # Run git diff command
71
+ output, exit_code = await session.requests.run_command(
72
+ command=git_command[0],
73
+ args=git_command[1:],
74
+ cwd=cwd or session.cwd,
75
+ )
76
+
77
+ # Check if git command succeeded
78
+ if exit_code != 0:
79
+ await session.notifications.tool_call_progress(
80
+ tool_call_id=tool_call_id,
81
+ status="failed",
82
+ title=f"Git diff failed (exit code: {exit_code})",
83
+ )
84
+ return
85
+ diff_content = output.strip()
86
+ if not diff_content:
87
+ await session.notifications.tool_call_progress(
88
+ tool_call_id=tool_call_id,
89
+ status="completed",
90
+ title="No changes found in diff",
91
+ )
92
+ return
93
+
94
+ # Stage the diff content for use in agent context
95
+ staged_part = UserPromptPart(content=f"Git diff for {display_title}:\n\n{diff_content}")
96
+ session.staged_content.add([staged_part])
97
+ # Send successful result - wrap in code block for proper display
98
+ staged_count = len(session.staged_content)
99
+ await session.notifications.tool_call_progress(
100
+ tool_call_id=tool_call_id,
101
+ status="completed",
102
+ title=f"Git diff fetched and staged ({staged_count} total parts)",
103
+ content=[f"```diff\n{diff_content}\n```"],
104
+ )
105
+ except Exception as e:
106
+ logger.exception("Unexpected error fetching git diff", commit=commit)
107
+ await session.notifications.tool_call_progress(
108
+ tool_call_id=tool_call_id,
109
+ status="failed",
110
+ title=f"Error: {e}",
111
+ )
@@ -0,0 +1,33 @@
1
+ """Helper functions and constants for documentation commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ # Script constants for client-side execution
7
+ SCHEMA_EXTRACTION_SCRIPT = """
8
+ import sys
9
+ import json
10
+ import importlib
11
+
12
+ def import_callable(path):
13
+ parts = path.split(".")
14
+ for i in range(len(parts), 0, -1):
15
+ try:
16
+ module_path = ".".join(parts[:i])
17
+ module = importlib.import_module(module_path)
18
+ obj = module
19
+ for part in parts[i:]:
20
+ obj = getattr(obj, part)
21
+ return obj
22
+ except (ImportError, AttributeError):
23
+ continue
24
+ raise ImportError(f"Could not import %s" % path)
25
+
26
+ try:
27
+ model_class = import_callable("{input_path}")
28
+ schema = model_class.model_json_schema()
29
+ print(json.dumps(schema, indent=2))
30
+ except Exception as e:
31
+ print(f"Error: %s" % e, file=sys.stderr)
32
+ sys.exit(1)
33
+ """
@@ -0,0 +1,90 @@
1
+ """Convert a webpage to markdown using urltomarkdown.herokuapp.com."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import urllib.parse
6
+ import uuid
7
+
8
+ import anyenv
9
+ from pydantic_ai import UserPromptPart
10
+ from slashed import CommandContext # noqa: TC002
11
+
12
+ from agentpool.log import get_logger
13
+ from agentpool.messaging.context import NodeContext # noqa: TC001
14
+ from agentpool_commands.base import NodeCommand
15
+ from agentpool_server.acp_server.session import ACPSession # noqa: TC001
16
+
17
+
18
+ logger = get_logger(__name__)
19
+
20
+
21
+ class UrlToMarkdownCommand(NodeCommand):
22
+ """Convert a webpage to markdown using urltomarkdown.herokuapp.com.
23
+
24
+ Fetches a web page and converts it to markdown format,
25
+ making it ideal for staging as AI context.
26
+ """
27
+
28
+ name = "url-to-markdown"
29
+ category = "docs"
30
+
31
+ async def execute_command(
32
+ self,
33
+ ctx: CommandContext[NodeContext[ACPSession]],
34
+ url: str,
35
+ *,
36
+ title: bool = True,
37
+ links: bool = True,
38
+ clean: bool = True,
39
+ ) -> None:
40
+ """Convert a webpage to markdown.
41
+
42
+ Args:
43
+ ctx: Command context with ACP session
44
+ url: URL to convert to markdown
45
+ title: Include page title as H1 header
46
+ links: Include links in markdown output
47
+ clean: Clean/filter content before conversion
48
+ """
49
+ session = ctx.context.data
50
+ assert session
51
+ tool_call_id = f"url-to-markdown-{uuid.uuid4().hex[:8]}"
52
+ api_url = "https://urltomarkdown.herokuapp.com/" # Build API URL and parameters
53
+ params = {"url": url}
54
+ if title:
55
+ params["title"] = "true"
56
+ if not links:
57
+ params["links"] = "false"
58
+ if not clean:
59
+ params["clean"] = "false"
60
+ try:
61
+ await session.notifications.tool_call_start(
62
+ tool_call_id=tool_call_id,
63
+ title=f"Converting to markdown: {url}",
64
+ kind="fetch",
65
+ )
66
+ response = await anyenv.get(api_url, params=params, timeout=30.0)
67
+ markdown_content = await response.text()
68
+ page_title = ""
69
+ if "X-Title" in response.headers:
70
+ page_title = urllib.parse.unquote(response.headers["X-Title"])
71
+ page_title = f" - {page_title}"
72
+ # Stage the markdown content for use in agent context
73
+ content = f"Webpage content from {url}{page_title}:\n\n{markdown_content}"
74
+ staged_part = UserPromptPart(content=content)
75
+ session.staged_content.add([staged_part])
76
+ # Send successful result - wrap in code block for proper display
77
+ staged_count = len(session.staged_content)
78
+ await session.notifications.tool_call_progress(
79
+ tool_call_id=tool_call_id,
80
+ status="completed",
81
+ title=f"Webpage converted and staged ({staged_count} total parts)",
82
+ content=[f"```markdown\n{markdown_content}\n```"],
83
+ )
84
+ except Exception as e:
85
+ logger.exception("Unexpected error converting URL", url=url)
86
+ await session.notifications.tool_call_progress(
87
+ tool_call_id=tool_call_id,
88
+ status="failed",
89
+ title=f"Error: {e}",
90
+ )