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,17 @@
1
+ """Resource provider implementations."""
2
+
3
+ from agentpool.resource_providers.base import ResourceProvider
4
+ from agentpool.resource_providers.static import StaticResourceProvider
5
+ from agentpool.resource_providers.filtering import FilteringResourceProvider
6
+ from agentpool.resource_providers.aggregating import AggregatingResourceProvider
7
+ from agentpool.resource_providers.mcp_provider import MCPResourceProvider
8
+ from agentpool.resource_providers.plan_provider import PlanProvider
9
+
10
+ __all__ = [
11
+ "AggregatingResourceProvider",
12
+ "FilteringResourceProvider",
13
+ "MCPResourceProvider",
14
+ "PlanProvider",
15
+ "ResourceProvider",
16
+ "StaticResourceProvider",
17
+ ]
@@ -0,0 +1,54 @@
1
+ """Aggregating resource provider."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from agentpool.resource_providers import ResourceProvider
8
+
9
+
10
+ if TYPE_CHECKING:
11
+ from pydantic_ai import ModelRequestPart
12
+
13
+ from agentpool.prompts.prompts import BasePrompt
14
+ from agentpool.tools.base import Tool
15
+ from agentpool_config.resources import ResourceInfo
16
+
17
+
18
+ class AggregatingResourceProvider(ResourceProvider):
19
+ """Provider that combines resources from multiple providers."""
20
+
21
+ def __init__(self, providers: list[ResourceProvider], name: str = "aggregating") -> None:
22
+ """Initialize provider with list of providers to aggregate.
23
+
24
+ Args:
25
+ providers: Resource providers to aggregate (stores reference to list)
26
+ name: Name for this provider
27
+ """
28
+ super().__init__(name=name)
29
+ # Store reference to the providers list for dynamic updates
30
+ self.providers = providers
31
+
32
+ async def get_tools(self) -> list[Tool]:
33
+ """Get tools from all providers."""
34
+ return [t for provider in self.providers for t in await provider.get_tools()]
35
+
36
+ async def get_prompts(self) -> list[BasePrompt]:
37
+ """Get prompts from all providers."""
38
+ return [p for provider in self.providers for p in await provider.get_prompts()]
39
+
40
+ async def get_resources(self) -> list[ResourceInfo]:
41
+ """Get resources from all providers."""
42
+ return [r for provider in self.providers for r in await provider.get_resources()]
43
+
44
+ async def get_request_parts(
45
+ self, name: str, arguments: dict[str, str] | None = None
46
+ ) -> list[ModelRequestPart]:
47
+ """Try to get prompt from first provider that has it."""
48
+ for provider in self.providers:
49
+ try:
50
+ return await provider.get_request_parts(name, arguments)
51
+ except KeyError:
52
+ continue
53
+ msg = f"Prompt {name!r} not found in any provider"
54
+ raise KeyError(msg)
@@ -0,0 +1,172 @@
1
+ """Base resource provider interface."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, Self
6
+
7
+ from agentpool.log import get_logger
8
+ from agentpool.tools.base import Tool
9
+ from agentpool_config.tools import ToolHints
10
+
11
+
12
+ if TYPE_CHECKING:
13
+ from collections.abc import Callable
14
+ from types import TracebackType
15
+
16
+ from pydantic_ai import ModelRequestPart
17
+ from schemez import OpenAIFunctionDefinition
18
+
19
+ from agentpool.prompts.prompts import BasePrompt
20
+ from agentpool.skills.skill import Skill
21
+ from agentpool.tools.base import ToolKind
22
+ from agentpool_config.resources import ResourceInfo
23
+
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ class ResourceProvider:
29
+ """Base class for resource providers.
30
+
31
+ Provides tools, prompts, and other resources to agents.
32
+ Default implementations return empty lists - override as needed.
33
+ """
34
+
35
+ def __init__(self, name: str, owner: str | None = None) -> None:
36
+ """Initialize the resource provider."""
37
+ self.name = name
38
+ self.owner = owner
39
+ self.log = logger.bind(name=self.name, owner=self.owner)
40
+
41
+ async def __aenter__(self) -> Self:
42
+ """Async context entry if required."""
43
+ return self
44
+
45
+ async def __aexit__(
46
+ self,
47
+ exc_type: type[BaseException] | None,
48
+ exc_val: BaseException | None,
49
+ exc_tb: TracebackType | None,
50
+ ) -> None:
51
+ """Async context cleanup if required."""
52
+
53
+ def __repr__(self) -> str:
54
+ return f"{self.__class__.__name__}(name={self.name!r})"
55
+
56
+ async def get_tools(self) -> list[Tool]:
57
+ """Get available tools. Override to provide tools."""
58
+ return []
59
+
60
+ async def get_tool(self, tool_name: str) -> Tool:
61
+ """Get specific tool."""
62
+ tools = await self.get_tools()
63
+ for tool in tools:
64
+ if tool.name == tool_name:
65
+ return tool
66
+ msg = f"Tool {tool_name!r} not found"
67
+ raise ValueError(msg)
68
+
69
+ async def get_prompts(self) -> list[BasePrompt]:
70
+ """Get available prompts. Override to provide prompts."""
71
+ return []
72
+
73
+ async def get_resources(self) -> list[ResourceInfo]:
74
+ """Get available resources. Override to provide resources."""
75
+ return []
76
+
77
+ async def get_skills(self) -> list[Skill]:
78
+ """Get available skills. Override to provide skills."""
79
+ return []
80
+
81
+ async def get_skill_instructions(self, skill_name: str) -> str:
82
+ """Get full instructions for a specific skill.
83
+
84
+ Args:
85
+ skill_name: Name of the skill to get instructions for
86
+
87
+ Returns:
88
+ The full skill instructions for execution
89
+
90
+ Raises:
91
+ KeyError: If skill not found
92
+ """
93
+ msg = f"Skill {skill_name!r} not found"
94
+ raise KeyError(msg)
95
+
96
+ async def get_request_parts(
97
+ self, name: str, arguments: dict[str, str] | None = None
98
+ ) -> list[ModelRequestPart]:
99
+ """Get a prompt formatted with arguments.
100
+
101
+ Args:
102
+ name: Name of the prompt to format
103
+ arguments: Optional arguments for prompt formatting
104
+
105
+ Returns:
106
+ Single chat message with merged content
107
+
108
+ Raises:
109
+ KeyError: If prompt not found
110
+ ValueError: If formatting fails
111
+ """
112
+ prompts = await self.get_prompts()
113
+ prompt = next((p for p in prompts if p.name == name), None)
114
+ if not prompt:
115
+ msg = f"Prompt {name!r} not found"
116
+ raise KeyError(msg)
117
+
118
+ messages = await prompt.format(arguments or {})
119
+ if not messages:
120
+ msg = f"Prompt {name!r} produced no messages"
121
+ raise ValueError(msg)
122
+
123
+ return [p for prompt_msg in messages for p in prompt_msg.to_pydantic_parts()]
124
+
125
+ def create_tool(
126
+ self,
127
+ fn: Callable[..., Any],
128
+ read_only: bool | None = None,
129
+ destructive: bool | None = None,
130
+ idempotent: bool | None = None,
131
+ open_world: bool | None = None,
132
+ requires_confirmation: bool = False,
133
+ metadata: dict[str, Any] | None = None,
134
+ category: ToolKind | None = None,
135
+ name_override: str | None = None,
136
+ description_override: str | None = None,
137
+ schema_override: OpenAIFunctionDefinition | None = None,
138
+ ) -> Tool:
139
+ """Create a tool from a function.
140
+
141
+ Args:
142
+ fn: Function to create a tool from
143
+ read_only: Whether the tool is read-only
144
+ destructive: Whether the tool is destructive
145
+ idempotent: Whether the tool is idempotent
146
+ open_world: Whether the tool is open-world
147
+ requires_confirmation: Whether the tool requires confirmation
148
+ metadata: Metadata for the tool
149
+ category: Category of the tool
150
+ name_override: Override the name of the tool
151
+ description_override: Override the description of the tool
152
+ schema_override: Override the schema of the tool
153
+
154
+ Returns:
155
+ Tool created from the function
156
+ """
157
+ return Tool.from_callable(
158
+ fn=fn,
159
+ category=category,
160
+ source=self.name,
161
+ requires_confirmation=requires_confirmation,
162
+ metadata=metadata,
163
+ name_override=name_override,
164
+ description_override=description_override,
165
+ schema_override=schema_override,
166
+ hints=ToolHints(
167
+ read_only=read_only,
168
+ destructive=destructive,
169
+ idempotent=idempotent,
170
+ open_world=open_world,
171
+ ),
172
+ )
@@ -0,0 +1,9 @@
1
+ """Meta-resource provider that exposes tools through Python execution."""
2
+
3
+ from agentpool.resource_providers.codemode.provider import CodeModeResourceProvider
4
+ from agentpool.resource_providers.codemode.remote_provider import (
5
+ RemoteCodeModeResourceProvider,
6
+ )
7
+
8
+
9
+ __all__ = ["CodeModeResourceProvider", "RemoteCodeModeResourceProvider"]
@@ -0,0 +1,215 @@
1
+ """Code execution provider with secure tool isolation via FastAPI server."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import contextlib
7
+ from dataclasses import dataclass
8
+ from typing import TYPE_CHECKING, Any, Self
9
+
10
+ import anyio
11
+
12
+ from agentpool.log import get_logger
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ from collections.abc import Sequence
17
+ import socket
18
+ from types import TracebackType
19
+
20
+ from exxec.base import ExecutionEnvironment
21
+ from exxec.configs import ExecutionEnvironmentConfig
22
+ from exxec.models import ServerInfo
23
+ from fastapi import FastAPI
24
+ from schemez import ToolsetCodeGenerator
25
+ import uvicorn
26
+
27
+ from agentpool.tools.base import Tool
28
+
29
+
30
+ logger = get_logger(__name__)
31
+
32
+
33
+ @dataclass
34
+ class RemoteCodeExecutor:
35
+ """Provides secure code execution with tool access via FastAPI server.
36
+
37
+ Architecture:
38
+ - FastAPI server runs in HOST environment with tool routes
39
+ - User code runs in SANDBOX environment (Docker, E2B, etc.)
40
+ - Sandbox makes HTTP calls to server for tool execution
41
+ """
42
+
43
+ toolset_generator: ToolsetCodeGenerator
44
+ """Code generator for tools."""
45
+
46
+ execution_env: ExecutionEnvironment
47
+ """Execution environment for running code."""
48
+
49
+ @classmethod
50
+ def from_tools(
51
+ cls,
52
+ tools: Sequence[Tool],
53
+ env_config: ExecutionEnvironmentConfig,
54
+ server_host: str = "localhost",
55
+ server_port: int = 8000,
56
+ include_docstrings: bool = True,
57
+ ) -> RemoteCodeExecutor:
58
+ """Create provider from tools and environment configuration.
59
+
60
+ Args:
61
+ tools: Tools to make available for code execution
62
+ env_config: Execution environment configuration
63
+ server_host: Host for FastAPI server
64
+ server_port: Port for FastAPI server
65
+ include_docstrings: Include function docstrings in documentation
66
+
67
+ Returns:
68
+ RemoteCodeExecutor instance
69
+ """
70
+ from agentpool.resource_providers.codemode.helpers import tools_to_codegen
71
+
72
+ toolset_gen = tools_to_codegen(tools, include_docstrings)
73
+ server_handler = ToolServerLifecycleHandler(toolset_gen, server_host, server_port)
74
+ execution_env = env_config.get_provider(server_handler)
75
+ return cls(toolset_gen, execution_env)
76
+
77
+ def get_tool_description(self) -> str:
78
+ """Get comprehensive description of available tools."""
79
+ return self.toolset_generator.generate_tool_description()
80
+
81
+ async def execute_code(self, code: str) -> Any:
82
+ """Execute code with tools available via HTTP API.
83
+
84
+ Args:
85
+ code: Python code to execute
86
+
87
+ Returns:
88
+ Execution result from the environment
89
+ """
90
+ return await self.execution_env.execute(code)
91
+
92
+ async def __aenter__(self) -> Self:
93
+ """Async context manager entry."""
94
+ await self.execution_env.__aenter__()
95
+ return self
96
+
97
+ async def __aexit__(
98
+ self,
99
+ exc_type: type[BaseException] | None,
100
+ exc_val: BaseException | None,
101
+ exc_tb: TracebackType | None,
102
+ ) -> None:
103
+ """Async context manager exit."""
104
+ return await self.execution_env.__aexit__(exc_type, exc_val, exc_tb)
105
+
106
+
107
+ class ToolServerLifecycleHandler:
108
+ """Manages FastAPI server lifecycle for tool access."""
109
+
110
+ def __init__(
111
+ self,
112
+ toolset_generator: ToolsetCodeGenerator,
113
+ host: str = "localhost",
114
+ port: int = 8000,
115
+ ) -> None:
116
+ self.toolset_generator = toolset_generator
117
+ self.host = host
118
+ self.port = port # Will be set when socket is created
119
+ self.app: FastAPI | None = None
120
+ self.server: uvicorn.Server | None = None
121
+ self._server_task: asyncio.Task[None] | None = None
122
+ self._socket: socket.socket | None = None
123
+
124
+ async def __aenter__(self) -> ServerInfo:
125
+ """Start FastAPI server with tool routes."""
126
+ from exxec.models import ServerInfo
127
+ from fastapi import FastAPI
128
+
129
+ from agentpool.utils.network import _create_socket
130
+
131
+ if self.server is not None:
132
+ return ServerInfo(url=f"http://{self.host}:{self.port}", port=self.port)
133
+ # Create socket and get actual port
134
+ self._socket, self.port = _create_socket(self.port)
135
+ # Create FastAPI app
136
+ self.app = FastAPI(title="Tool Server", description="Generated tool endpoints")
137
+
138
+ # Add tool routes
139
+ self.toolset_generator.add_all_routes(self.app, "/tools")
140
+
141
+ import uvicorn
142
+
143
+ config = uvicorn.Config(
144
+ self.app,
145
+ log_level="error", # Reduce log noise
146
+ access_log=False,
147
+ host=self.host,
148
+ port=self.port,
149
+ ws="websockets-sansio",
150
+ )
151
+ self.server = uvicorn.Server(config)
152
+
153
+ # Start server in background with our socket
154
+ self._server_task = asyncio.create_task(self.server.serve([self._socket]))
155
+ logger.info("Started tool server", host=self.host, port=self.port)
156
+ await anyio.sleep(0.1) # Wait for server to start properly
157
+ # Verify server is running
158
+ max_retries = 10
159
+ for _ in range(max_retries):
160
+ if self.server.started:
161
+ break
162
+ await anyio.sleep(0.1)
163
+
164
+ return ServerInfo(url=f"http://{self.host}:{self.port}", port=self.port)
165
+
166
+ async def __aexit__(
167
+ self,
168
+ exc_type: type[BaseException] | None,
169
+ exc_val: BaseException | None,
170
+ exc_tb: TracebackType | None,
171
+ ) -> None:
172
+ """Stop FastAPI server."""
173
+ # Stop server gracefully
174
+ if self.server:
175
+ with contextlib.suppress(Exception):
176
+ self.server.should_exit = True
177
+ if hasattr(self.server, "force_exit"):
178
+ self.server.force_exit = True
179
+
180
+ # Cancel server task
181
+ if self._server_task and not self._server_task.done():
182
+ self._server_task.cancel()
183
+ with contextlib.suppress(asyncio.CancelledError, Exception):
184
+ await asyncio.wait_for(self._server_task, timeout=1.0)
185
+
186
+ # Close socket
187
+ if self._socket:
188
+ with contextlib.suppress(Exception):
189
+ self._socket.close()
190
+
191
+ # Reset state
192
+ self.server = None
193
+ self._server_task = None
194
+ self._socket = None
195
+ self.app = None
196
+
197
+
198
+ if __name__ == "__main__":
199
+ from exxec.configs import LocalExecutionEnvironmentConfig
200
+
201
+ from agentpool.tools.base import Tool
202
+
203
+ def add_numbers(x: int, y: int) -> int:
204
+ """Add two numbers."""
205
+ return x + y
206
+
207
+ async def main() -> None:
208
+ tools = [Tool.from_callable(add_numbers)]
209
+ config = LocalExecutionEnvironmentConfig()
210
+ provider = RemoteCodeExecutor.from_tools(tools, config, server_port=9876)
211
+ async with provider:
212
+ result = await provider.execute_code("_result = await add_numbers(5, 3)")
213
+ print(f"Result: {result.result}")
214
+
215
+ anyio.run(main)
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ USAGE = """
5
+ A tool to execute python code.
6
+ You can (and should) use the provided stubs as async function calls
7
+ if you need to.
8
+ Write an async main function which returns the result if neccessary.
9
+ DONT write placeholders. DONT run the function yourself. just write the function.
10
+
11
+ Example:
12
+ async def main():
13
+ result_1 = await provided_function()
14
+ result_2 = await provided_function_2("some_arg")
15
+ return result_1 + result_2
16
+
17
+ You may also use loops, conditionals etc. if neccessary.
18
+
19
+ """
@@ -0,0 +1,83 @@
1
+ """Prepare LLM output to be in proper shape and executable."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import ast
6
+ from typing import TYPE_CHECKING
7
+
8
+ from agentpool.log import get_logger
9
+
10
+
11
+ if TYPE_CHECKING:
12
+ from collections.abc import Sequence
13
+
14
+ from schemez import ToolsetCodeGenerator
15
+
16
+ from agentpool.tools import Tool
17
+
18
+ logger = get_logger(__name__)
19
+
20
+
21
+ def validate_code(python_code: str) -> None:
22
+ """Validate code structure and raise ModelRetry for fixable issues."""
23
+ from pydantic_ai import ModelRetry
24
+
25
+ code = python_code.strip()
26
+ try:
27
+ ast.parse(code)
28
+ except SyntaxError as e:
29
+ msg = f"Invalid code syntax: {e}"
30
+ logger.info("Invalid code", code=code)
31
+ raise ModelRetry(msg) from None
32
+ else:
33
+ if "async def main(" not in code:
34
+ logger.info("Code not in async def main()", code=code)
35
+ msg = (
36
+ "Code must be wrapped in 'async def main():' function. "
37
+ "Please rewrite your code like:\n"
38
+ "async def main():\n"
39
+ " # your code here\n"
40
+ " return result"
41
+ )
42
+ raise ModelRetry(msg)
43
+
44
+ # Check if code contains a return statement
45
+ if "return " not in code:
46
+ logger.info("Code does not contain a return statement", code=code)
47
+ msg = "The main() function should return a value."
48
+ raise ModelRetry(msg)
49
+
50
+
51
+ def tools_to_codegen(
52
+ tools: Sequence[Tool],
53
+ include_docstrings: bool = True,
54
+ ) -> ToolsetCodeGenerator:
55
+ """Create a ToolsetCodeGenerator from a sequence of Tools.
56
+
57
+ Args:
58
+ tools: Tools to generate code for
59
+ include_docstrings: Include function docstrings in documentation
60
+
61
+ Returns:
62
+ ToolsetCodeGenerator instance
63
+ """
64
+ from pydantic_ai import RunContext
65
+ from schemez import ToolCodeGenerator, ToolsetCodeGenerator, create_schema
66
+
67
+ from agentpool.agents.context import AgentContext
68
+
69
+ generators = [
70
+ ToolCodeGenerator(
71
+ schema=create_schema(
72
+ t.callable,
73
+ name_override=t.name,
74
+ description_override=t.description,
75
+ mode="openai",
76
+ exclude_types=[AgentContext, RunContext],
77
+ ),
78
+ callable=t.callable,
79
+ name_override=t.name,
80
+ )
81
+ for t in tools
82
+ ]
83
+ return ToolsetCodeGenerator(generators, include_docstrings)