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,450 @@
1
+ """Models for agent configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence # noqa: TC003
6
+ from pathlib import Path
7
+ from typing import TYPE_CHECKING, Any, Literal, assert_never
8
+ from uuid import UUID
9
+
10
+ from exxec.configs import ExecutionEnvironmentConfig # noqa: TC002
11
+ from llmling_models.configs import AnyModelConfig # noqa: TC002
12
+ from pydantic import ConfigDict, Field, model_validator
13
+ from pydantic_ai import UsageLimits # noqa: TC002
14
+ from schemez import InlineSchemaDef
15
+ from tokonomics.model_names import ModelId # noqa: TC002
16
+ from toprompt import render_prompt
17
+
18
+ from agentpool import log
19
+ from agentpool.common_types import EndStrategy # noqa: TC001
20
+ from agentpool.prompts.prompts import PromptMessage, StaticPrompt
21
+ from agentpool.resource_providers import StaticResourceProvider
22
+ from agentpool_config.hooks import HooksConfig # noqa: TC001
23
+ from agentpool_config.knowledge import Knowledge # noqa: TC001
24
+ from agentpool_config.nodes import BaseAgentConfig
25
+ from agentpool_config.output_types import StructuredResponseConfig # noqa: TC001
26
+ from agentpool_config.session import MemoryConfig, SessionQuery
27
+ from agentpool_config.system_prompts import PromptConfig # noqa: TC001
28
+ from agentpool_config.tools import BaseToolConfig, ToolConfig # noqa: TC001
29
+ from agentpool_config.toolsets import ToolsetConfig # noqa: TC001
30
+ from agentpool_config.workers import WorkerConfig # noqa: TC001
31
+
32
+
33
+ if TYPE_CHECKING:
34
+ from agentpool.prompts.prompts import BasePrompt
35
+ from agentpool.resource_providers import ResourceProvider
36
+ from agentpool.tools.base import Tool
37
+
38
+
39
+ ToolMode = Literal["codemode"]
40
+ AutoCache = Literal["off", "5m", "1h"]
41
+
42
+ logger = log.get_logger(__name__)
43
+
44
+
45
+ class NativeAgentConfig(BaseAgentConfig):
46
+ """Configuration for a single agent in the system.
47
+
48
+ Defines an agent's complete configuration including its model, environment,
49
+ and behavior settings.
50
+
51
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/agent_configuration/
52
+ """
53
+
54
+ model_config = ConfigDict(
55
+ json_schema_extra={
56
+ "x-icon": "octicon:hubot-16",
57
+ "x-doc-title": "Agent Configuration",
58
+ }
59
+ )
60
+
61
+ type: Literal["native"] = Field(default="native", init=False)
62
+ """Top-level discriminator for agent type."""
63
+
64
+ inherits: str | None = Field(default=None, title="Inheritance source")
65
+ """Name of agent config to inherit from"""
66
+
67
+ model: AnyModelConfig | ModelId | str | None = Field(
68
+ default=None,
69
+ examples=["openai:gpt-5-nano"],
70
+ title="Model configuration or name",
71
+ json_schema_extra={
72
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/model_configuration/"
73
+ },
74
+ )
75
+ """The model to use for this agent. Can be either a simple model name
76
+ string (e.g. 'openai:gpt-5') or a structured model definition.
77
+
78
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/model_configuration/
79
+ """
80
+
81
+ tools: list[ToolConfig | str] = Field(
82
+ default_factory=list,
83
+ examples=[
84
+ ["webbrowser:open", "builtins:print"],
85
+ [
86
+ {
87
+ "type": "import",
88
+ "import_path": "webbrowser:open",
89
+ "name": "web_browser",
90
+ }
91
+ ],
92
+ ],
93
+ title="Tool configurations",
94
+ json_schema_extra={
95
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/tool_configuration/"
96
+ },
97
+ )
98
+ """A list of tools to register with this agent.
99
+
100
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/tool_configuration/
101
+ """
102
+
103
+ toolsets: list[ToolsetConfig] = Field(
104
+ default_factory=list,
105
+ examples=[
106
+ [
107
+ {
108
+ "type": "openapi",
109
+ "spec": "https://api.example.com/openapi.json",
110
+ "namespace": "api",
111
+ },
112
+ {
113
+ "type": "file_access",
114
+ },
115
+ {
116
+ "type": "composio",
117
+ "user_id": "user123@example.com",
118
+ "toolsets": ["github", "slack"],
119
+ },
120
+ ],
121
+ ],
122
+ title="Toolset configurations",
123
+ json_schema_extra={
124
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/toolset_configuration/"
125
+ },
126
+ )
127
+ """Toolset configurations for extensible tool collections.
128
+
129
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/toolset_configuration/
130
+ """
131
+
132
+ session: str | SessionQuery | MemoryConfig | None = Field(
133
+ default=None,
134
+ examples=["main_session", "user_123"],
135
+ title="Session configuration",
136
+ json_schema_extra={
137
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/session_configuration/"
138
+ },
139
+ )
140
+ """Session configuration for conversation recovery.
141
+
142
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/session_configuration/
143
+ """
144
+
145
+ output_type: str | StructuredResponseConfig | None = Field(
146
+ default=None,
147
+ examples=["json_response", "code_output"],
148
+ title="Response type",
149
+ json_schema_extra={
150
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/response_configuration/"
151
+ },
152
+ )
153
+ """Name of the response definition to use.
154
+
155
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/response_configuration/
156
+ """
157
+
158
+ retries: int = Field(default=1, ge=0, examples=[1, 3], title="Model retries")
159
+ """Number of retries for failed operations (maps to pydantic-ai's retries)"""
160
+
161
+ output_retries: int | None = Field(default=None, examples=[1, 3], title="Output retries")
162
+ """Max retries for result validation"""
163
+
164
+ end_strategy: EndStrategy = Field(
165
+ default="early",
166
+ examples=["early", "exhaust"],
167
+ title="Tool execution strategy",
168
+ )
169
+ """The strategy for handling multiple tool calls when a final result is found"""
170
+
171
+ avatar: str | None = Field(
172
+ default=None,
173
+ examples=["https://example.com/avatar.png", "/assets/robot.jpg"],
174
+ title="Avatar image",
175
+ )
176
+ """URL or path to agent's avatar image"""
177
+
178
+ system_prompt: str | Sequence[str | PromptConfig] | None = Field(
179
+ default=None,
180
+ title="System Prompt",
181
+ examples=[
182
+ "You are a helpful assistant.",
183
+ ["You are an AI assistant.", "Always be concise."],
184
+ ],
185
+ json_schema_extra={
186
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/"
187
+ },
188
+ )
189
+ """System prompt for the agent. Can be a string or list of strings/prompt configs.
190
+
191
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/
192
+ """
193
+
194
+ # context_sources: list[ContextSource] = Field(default_factory=list)
195
+ # """Initial context sources to load"""
196
+
197
+ knowledge: Knowledge | None = Field(
198
+ default=None,
199
+ title="Knowledge sources",
200
+ json_schema_extra={
201
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/knowledge_configuration/"
202
+ },
203
+ )
204
+ """Knowledge sources for this agent.
205
+
206
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/knowledge_configuration/
207
+ """
208
+
209
+ workers: list[WorkerConfig] = Field(
210
+ default_factory=list,
211
+ examples=[
212
+ [{"type": "agent", "name": "web_agent", "reset_history_on_run": True}],
213
+ [{"type": "team", "name": "analysis_team"}],
214
+ ],
215
+ title="Worker agents",
216
+ json_schema_extra={
217
+ "documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/worker_configuration/"
218
+ },
219
+ )
220
+ """Worker agents which will be available as tools.
221
+
222
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/worker_configuration/
223
+ """
224
+
225
+ environment: ExecutionEnvironmentConfig | None = Field(
226
+ default=None, title="Execution environment"
227
+ )
228
+ """Execution environment configuration for this agent."""
229
+
230
+ usage_limits: UsageLimits | None = Field(default=None, title="Usage limits")
231
+ """Usage limits for this agent."""
232
+
233
+ tool_mode: ToolMode | None = Field(
234
+ default=None,
235
+ examples=["codemode"],
236
+ title="Tool execution mode",
237
+ )
238
+ """Tool execution mode:
239
+ - None: Default mode - tools are called directly
240
+ - "codemode": Tools are wrapped in a Python execution environment
241
+ """
242
+
243
+ auto_cache: AutoCache = Field(
244
+ default="off",
245
+ examples=["off", "5m", "1h"],
246
+ title="Automatic caching",
247
+ )
248
+ """Automatic prompt caching configuration:
249
+ - "off": No automatic caching
250
+ - "5m": Add cache point with 5 minute TTL
251
+ - "1h": Add cache point with 1 hour TTL
252
+ """
253
+
254
+ hooks: HooksConfig | None = Field(
255
+ default=None,
256
+ title="Lifecycle hooks",
257
+ )
258
+ """Hooks for intercepting and customizing agent behavior at key lifecycle points.
259
+
260
+ Allows adding context, blocking operations, modifying inputs, or triggering
261
+ side effects during session start/end, run execution, tool usage, and delegation.
262
+ """
263
+
264
+ @model_validator(mode="before")
265
+ @classmethod
266
+ def validate_output_type(cls, data: dict[str, Any]) -> dict[str, Any]:
267
+ """Convert result type and apply its settings."""
268
+ output_type = data.get("output_type")
269
+ if isinstance(output_type, dict):
270
+ # Extract response-specific settings
271
+ tool_name = output_type.pop("result_tool_name", None)
272
+ tool_description = output_type.pop("result_tool_description", None)
273
+ retries = output_type.pop("output_retries", None)
274
+
275
+ # Convert remaining dict to ResponseDefinition
276
+ if "type" not in output_type["response_schema"]:
277
+ output_type["response_schema"]["type"] = "inline"
278
+ data["output_type"]["response_schema"] = InlineSchemaDef(**output_type)
279
+
280
+ # Apply extracted settings to agent config
281
+ if tool_name:
282
+ data["result_tool_name"] = tool_name
283
+ if tool_description:
284
+ data["result_tool_description"] = tool_description
285
+ if retries is not None:
286
+ data["output_retries"] = retries
287
+
288
+ return data
289
+
290
+ @model_validator(mode="before")
291
+ @classmethod
292
+ def handle_model_types(cls, data: dict[str, Any]) -> dict[str, Any]:
293
+ """Convert model inputs to appropriate format."""
294
+ if isinstance((model := data.get("model")), str):
295
+ data["model"] = {"type": "string", "identifier": model}
296
+ return data
297
+
298
+ def get_toolsets(self) -> list[ResourceProvider]:
299
+ """Get all resource providers for this agent."""
300
+ providers: list[ResourceProvider] = []
301
+
302
+ # Add providers from toolsets
303
+ for toolset_config in self.toolsets:
304
+ try:
305
+ provider = toolset_config.get_provider()
306
+ providers.append(provider)
307
+ except Exception as e:
308
+ msg = "Failed to create provider for toolset"
309
+ logger.exception(msg, toolset_config)
310
+ raise ValueError(msg) from e
311
+
312
+ return providers
313
+
314
+ def get_tool_provider(self) -> ResourceProvider | None:
315
+ """Get tool provider for this agent."""
316
+ from agentpool.tools.base import Tool
317
+
318
+ # Create provider for static tools
319
+ if not self.tools:
320
+ return None
321
+ static_tools: list[Tool] = []
322
+ for tool_config in self.tools:
323
+ try:
324
+ match tool_config:
325
+ case str():
326
+ tool = Tool.from_callable(tool_config)
327
+ static_tools.append(tool)
328
+ case BaseToolConfig():
329
+ static_tools.append(tool_config.get_tool())
330
+ except Exception:
331
+ logger.exception("Failed to load tool", config=tool_config)
332
+ continue
333
+
334
+ return StaticResourceProvider(name="builtin", tools=static_tools)
335
+
336
+ def get_session_config(self) -> MemoryConfig:
337
+ """Get resolved memory configuration."""
338
+ match self.session:
339
+ case str() | UUID():
340
+ return MemoryConfig(session=SessionQuery(name=str(self.session)))
341
+ case SessionQuery():
342
+ return MemoryConfig(session=self.session)
343
+ case MemoryConfig():
344
+ return self.session
345
+ case None:
346
+ return MemoryConfig()
347
+ case _ as unreachable:
348
+ assert_never(unreachable)
349
+
350
+ def get_system_prompts(self) -> list[BasePrompt]:
351
+ """Get all system prompts as BasePrompts."""
352
+ from agentpool_config.system_prompts import (
353
+ FilePromptConfig,
354
+ FunctionPromptConfig,
355
+ LibraryPromptConfig,
356
+ StaticPromptConfig,
357
+ )
358
+
359
+ prompts: list[BasePrompt] = []
360
+ # Normalize system_prompt to a list
361
+ if self.system_prompt is None:
362
+ return prompts
363
+ prompt_list = (
364
+ [self.system_prompt] if isinstance(self.system_prompt, str) else self.system_prompt
365
+ )
366
+ for prompt in prompt_list:
367
+ match prompt:
368
+ case (str() as content) | StaticPromptConfig(content=content):
369
+ # Convert string to StaticPrompt
370
+ msgs = [PromptMessage(role="system", content=content)]
371
+ static = StaticPrompt(name="system", description="System prompt", messages=msgs)
372
+ prompts.append(static)
373
+ case FilePromptConfig(path=path):
374
+ template_path = Path(path)
375
+ if not template_path.is_absolute() and self.config_file_path:
376
+ base_path = Path(self.config_file_path).parent
377
+ template_path = base_path / path
378
+ template_content = template_path.read_text("utf-8")
379
+ # Create a template-based prompt (for now as StaticPrompt with placeholder)
380
+ static_prompt = StaticPrompt(
381
+ name="system",
382
+ description=f"File prompt: {path}",
383
+ messages=[PromptMessage(role="system", content=template_content)],
384
+ )
385
+ prompts.append(static_prompt)
386
+ case LibraryPromptConfig(reference=ref):
387
+ # Create placeholder for library prompts (resolved by manifest)
388
+ msg = PromptMessage(role="system", content=f"[LIBRARY:{ref}]")
389
+ static = StaticPrompt(name="system", description=f"Ref: {ref}", messages=[msg])
390
+ prompts.append(static)
391
+ case FunctionPromptConfig(arguments=arguments, function=function):
392
+ # Import and call the function to get prompt content
393
+ content = function(**arguments)
394
+ static_prompt = StaticPrompt(
395
+ name="system",
396
+ description=f"Function prompt: {function}",
397
+ messages=[PromptMessage(role="system", content=content)],
398
+ )
399
+ prompts.append(static_prompt)
400
+ case _ as unreachable:
401
+ assert_never(unreachable)
402
+ return prompts
403
+
404
+ def render_system_prompts(self, context: dict[str, Any] | None = None) -> list[str]:
405
+ """Render system prompts with context."""
406
+ from agentpool_config.system_prompts import (
407
+ FilePromptConfig,
408
+ FunctionPromptConfig,
409
+ LibraryPromptConfig,
410
+ StaticPromptConfig,
411
+ )
412
+
413
+ context = context or {"name": self.name, "id": 1, "model": self.model}
414
+ rendered_prompts: list[str] = []
415
+ # Normalize system_prompt to a list
416
+ if self.system_prompt is None:
417
+ return rendered_prompts
418
+ prompt_list = (
419
+ [self.system_prompt] if isinstance(self.system_prompt, str) else self.system_prompt
420
+ )
421
+ for prompt in prompt_list:
422
+ match prompt:
423
+ case (str() as content) | StaticPromptConfig(content=content):
424
+ rendered_prompts.append(render_prompt(content, {"agent": context}))
425
+ case FilePromptConfig(path=path, variables=variables):
426
+ # Load and render Jinja template from file
427
+ template_path = Path(path)
428
+ if not template_path.is_absolute() and self.config_file_path:
429
+ base_path = Path(self.config_file_path).parent
430
+ template_path = base_path / path
431
+
432
+ template_content = template_path.read_text("utf-8")
433
+ template_ctx = {"agent": context, **variables}
434
+ rendered_prompts.append(render_prompt(template_content, template_ctx))
435
+ case LibraryPromptConfig(reference=reference):
436
+ # This will be handled by the manifest's get_agent method
437
+ # For now, just add a placeholder
438
+ rendered_prompts.append(f"[LIBRARY:{reference}]")
439
+ case FunctionPromptConfig(function=function, arguments=arguments):
440
+ # Import and call the function to get prompt content
441
+ content = function(**arguments)
442
+ rendered_prompts.append(render_prompt(content, {"agent": context}))
443
+
444
+ return rendered_prompts
445
+
446
+
447
+ if __name__ == "__main__":
448
+ model = "openai:gpt-5-nano"
449
+ agent_cfg = NativeAgentConfig(name="test_agent", model=model)
450
+ print(agent_cfg)
@@ -0,0 +1,89 @@
1
+ """Configuration models for AG-UI agents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Literal
6
+
7
+ from pydantic import ConfigDict, Field
8
+
9
+ from agentpool_config.nodes import BaseAgentConfig
10
+ from agentpool_config.tools import ToolConfig # noqa: TC001
11
+
12
+
13
+ class AGUIAgentConfig(BaseAgentConfig):
14
+ """Configuration for AG-UI protocol agents.
15
+
16
+ AG-UI agents connect to remote HTTP endpoints that implement the AG-UI protocol,
17
+ enabling integration of any AG-UI compatible server into the agentpool pool.
18
+
19
+ Example:
20
+ ```yaml
21
+ agents:
22
+ remote_assistant:
23
+ type: agui
24
+ endpoint: http://localhost:8000/agent/run
25
+ timeout: 30.0
26
+ headers:
27
+ X-API-Key: ${API_KEY}
28
+ tools:
29
+ - import_path: mymodule.my_tool_function
30
+
31
+ managed_agent:
32
+ endpoint: http://localhost:8765/agent/run
33
+ startup_command: "uv run ag-ui-server config.yml"
34
+ startup_delay: 3.0
35
+ tools:
36
+ - import_path: package.tool_one
37
+ - import_path: package.tool_two
38
+ ```
39
+ """
40
+
41
+ model_config = ConfigDict(
42
+ json_schema_extra={"title": "AG-UI Agent Configuration", "x-icon": "mdi:api"}
43
+ )
44
+
45
+ type: Literal["agui"] = Field(default="agui", init=False)
46
+ """Top-level discriminator for agent type."""
47
+
48
+ endpoint: str = Field(
49
+ ...,
50
+ examples=["http://localhost:8000/agent/run", "https://api.example.com/v1/agent/run"],
51
+ )
52
+ """HTTP endpoint for the AG-UI agent server."""
53
+
54
+ timeout: float = Field(default=60.0, ge=0.1, examples=[30.0, 60.0, 120.0])
55
+ """Request timeout in seconds."""
56
+
57
+ headers: dict[str, str] = Field(default_factory=dict)
58
+ """Additional HTTP headers to send with requests.
59
+
60
+ Useful for authentication or custom routing.
61
+ Environment variables can be used: ${VAR_NAME}
62
+ """
63
+
64
+ startup_command: str | None = Field(
65
+ default=None,
66
+ examples=[
67
+ "uv run ag-ui-server config.yml",
68
+ "python -m my_agui_server --port 8000",
69
+ ],
70
+ )
71
+ """Optional shell command to start the AG-UI server automatically.
72
+
73
+ When provided, the agent will spawn this command on context entry
74
+ and terminate it on exit. Useful for testing or self-contained deployments.
75
+ """
76
+
77
+ startup_delay: float = Field(default=2.0, ge=0.0, examples=[1.0, 2.0, 5.0])
78
+ """Seconds to wait after starting server before connecting.
79
+
80
+ Only relevant when startup_command is provided.
81
+ """
82
+
83
+ tools: list[ToolConfig] = Field(default_factory=list)
84
+ """Tools to expose to the remote agent for client-side execution.
85
+
86
+ When the remote AG-UI agent requests a tool call, these tools are executed
87
+ locally and the result is sent back. This enables human-in-the-loop workflows
88
+ and local capability exposure to remote agents.
89
+ """