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
agentpool_cli/agent.py ADDED
@@ -0,0 +1,175 @@
1
+ """Agent-related CLI commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shutil
6
+ from typing import Annotated
7
+
8
+ import typer as t
9
+
10
+ from agentpool_cli import agent_store, resolve_agent_config
11
+ from agentpool_cli.common import verbose_opt
12
+
13
+
14
+ agent_cli = t.Typer(help="Agent management commands", no_args_is_help=True)
15
+
16
+ NAME_HELP = "Name for the configuration (defaults to filename)"
17
+
18
+ INTERACTIVE_CMD = "--interactive/--no-interactive"
19
+ INTERACTIVE_HELP = "Use interactive configuration wizard"
20
+
21
+
22
+ @agent_cli.command("init")
23
+ def init_agent_config(
24
+ output: Annotated[str, t.Argument(help="Path to write agent configuration file")],
25
+ name: Annotated[str | None, t.Option("--name", "-n", help=NAME_HELP)] = None,
26
+ interactive: Annotated[bool, t.Option(INTERACTIVE_CMD, help=INTERACTIVE_HELP)] = False,
27
+ ) -> None:
28
+ """Initialize a new agent configuration file.
29
+
30
+ Creates and activates a new agent configuration. The configuration will be
31
+ automatically registered and set as active.
32
+ """
33
+ from pathlib import Path
34
+
35
+ if interactive:
36
+ from agentpool.utils.inspection import validate_import
37
+
38
+ validate_import("promptantic", "chat")
39
+ from promptantic import ModelGenerator
40
+
41
+ from agentpool import AgentsManifest
42
+
43
+ generator = ModelGenerator()
44
+ manifest = generator.populate(AgentsManifest)
45
+ manifest.save(output)
46
+ else:
47
+ from agentpool import config_resources
48
+
49
+ shutil.copy2(config_resources.AGENTS_TEMPLATE, output)
50
+
51
+ config_name = name or Path(output).stem
52
+ agent_store.add_config(config_name, output)
53
+ agent_store.set_active(config_name)
54
+
55
+ print(f"\nCreated and activated agent configuration {config_name!r}: {output}")
56
+ print("\nTry these commands:")
57
+ print(" agentpool list")
58
+ print(" agentpool chat simple_agent")
59
+
60
+
61
+ @agent_cli.command("add")
62
+ def add_agent_file(
63
+ name: Annotated[str, t.Argument(help="Name for the agent configuration file")],
64
+ path: Annotated[str, t.Argument(help="Path to agent configuration file")],
65
+ verbose: bool = verbose_opt,
66
+ ) -> None:
67
+ """Add a new agent configuration file."""
68
+ try:
69
+ agent_store.add_config(name, path)
70
+ t.echo(f"Added agent configuration {name!r} -> {path}")
71
+ except Exception as e:
72
+ t.echo(f"Error adding configuration: {e}", err=True)
73
+ raise t.Exit(1) from e
74
+
75
+
76
+ @agent_cli.command("set")
77
+ def set_active_file(
78
+ name: Annotated[str, t.Argument(help="Name of agent configuration to set as active")],
79
+ verbose: bool = verbose_opt,
80
+ ) -> None:
81
+ """Set the active agent configuration file."""
82
+ try:
83
+ agent_store.set_active(name)
84
+ t.echo(f"Set {name!r} as active agent configuration")
85
+ except Exception as e:
86
+ t.echo(f"Error setting active configuration: {e}", err=True)
87
+ raise t.Exit(1) from e
88
+
89
+
90
+ def list_configs() -> None:
91
+ """List stored agent configurations."""
92
+ from rich.console import Console
93
+ from rich.table import Table
94
+
95
+ configs = agent_store.list_configs()
96
+ active = agent_store.get_active()
97
+ active_name = active.name if active else None
98
+
99
+ if not configs:
100
+ t.echo("No configurations stored. Use 'agentpool add' to add one.")
101
+ return
102
+
103
+ table = Table(title="Stored Configurations")
104
+ table.add_column("Name", style="cyan")
105
+ table.add_column("Path")
106
+ table.add_column("Active", justify="center")
107
+
108
+ for name, path in configs:
109
+ marker = "✓" if name == active_name else ""
110
+ table.add_row(name, path, marker)
111
+
112
+ Console().print(table)
113
+
114
+
115
+ def list_agents(
116
+ config_name: Annotated[
117
+ str | None,
118
+ t.Option(
119
+ "-c",
120
+ "--config",
121
+ help="Name of agent configuration to list (defaults to active)",
122
+ ),
123
+ ] = None,
124
+ verbose: bool = verbose_opt,
125
+ ) -> None:
126
+ """List agents from the active (or specified) configuration."""
127
+ import yaml
128
+
129
+ try:
130
+ try:
131
+ config_path = resolve_agent_config(config_name)
132
+ except ValueError as e:
133
+ msg = str(e)
134
+ raise t.BadParameter(msg) from e
135
+
136
+ # Parse YAML directly without loading full manifest
137
+ from upathtools import to_upath
138
+
139
+ text = to_upath(config_path).read_text()
140
+ data = yaml.safe_load(text)
141
+
142
+ agents = data.get("agents", {})
143
+ if not agents:
144
+ t.echo("No agents found in configuration.")
145
+ return
146
+
147
+ from rich.console import Console
148
+ from rich.table import Table
149
+
150
+ table = Table(title="Agents")
151
+ table.add_column("Name", style="cyan")
152
+ table.add_column("Type", style="magenta")
153
+ table.add_column("Display Name")
154
+ table.add_column("Description")
155
+
156
+ for name, config in agents.items():
157
+ agent_type = config.get("type", "native")
158
+ display = config.get("display_name", name)
159
+ desc = config.get("description", "")
160
+ # Truncate long descriptions
161
+ if len(desc) > 50: # noqa: PLR2004
162
+ desc = desc[:47] + "..."
163
+ table.add_row(name, agent_type, display, desc)
164
+
165
+ Console().print(table)
166
+
167
+ except t.Exit:
168
+ raise
169
+ except Exception as e:
170
+ t.echo(f"Error: {e}", err=True)
171
+ if verbose:
172
+ import traceback
173
+
174
+ t.echo(traceback.format_exc(), err=True)
175
+ raise t.Exit(1) from e
@@ -0,0 +1,23 @@
1
+ """Type definitions for CLI options."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Literal
6
+
7
+
8
+ # Log levels
9
+ LogLevel = Literal["debug", "info", "warning", "error"]
10
+
11
+ # Output detail levels
12
+ DetailLevel = Literal["simple", "detailed", "markdown"]
13
+
14
+ # Statistics grouping options
15
+ GroupBy = Literal["agent", "model", "hour", "day"]
16
+
17
+ OutputFormat = Literal["json", "yaml", "table", "text"]
18
+
19
+ # Provider types
20
+ Provider = Literal["pydantic_ai"]
21
+
22
+ # Merge methods for pull requests
23
+ MergeMethod = Literal["merge", "squash", "rebase"]
@@ -0,0 +1,163 @@
1
+ """Common utilities for the CLI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime
6
+ import json
7
+ import logging
8
+ from logging.handlers import RotatingFileHandler
9
+ from pathlib import Path
10
+ import sys
11
+ from typing import TYPE_CHECKING, Any, Literal, assert_never
12
+
13
+ import platformdirs
14
+ import typer as t
15
+
16
+
17
+ if TYPE_CHECKING:
18
+ from collections.abc import Sequence
19
+
20
+ OutputFormat = Literal["text", "json", "yaml"]
21
+
22
+ CONFIG_HELP = "Path to config file or name of stored config"
23
+ OUTPUT_FORMAT_HELP = "Output format. One of: text, json, yaml"
24
+ VERBOSE_HELP = "Enable debug logging"
25
+ # Command options
26
+ OUTPUT_FORMAT_CMDS = "-o", "--output-format"
27
+ VERBOSE_CMDS = "-v", "--verbose"
28
+
29
+ LOG_DIR = Path(platformdirs.user_log_dir("agentpool", "agentpool"))
30
+ TIMESTAMP = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
31
+ LOG_FILE = LOG_DIR / f"agentpool_{TIMESTAMP}.log"
32
+
33
+ MAX_LOG_SIZE = 10 * 1024 * 1024 # (10MB)
34
+
35
+ BACKUP_COUNT = 5
36
+
37
+
38
+ def setup_logging(
39
+ *,
40
+ level: int | str = logging.INFO,
41
+ handlers: Sequence[logging.Handler] | None = None,
42
+ format_string: str | None = None,
43
+ log_to_file: bool = True,
44
+ ) -> None:
45
+ """Configure logging.
46
+
47
+ Args:
48
+ level: The logging level for console output
49
+ handlers: Optional sequence of handlers to add
50
+ format_string: Optional custom format string
51
+ log_to_file: Whether to log to file in addition to stdout
52
+ """
53
+ logger = logging.getLogger("agentpool")
54
+ logger.setLevel(logging.DEBUG)
55
+ format_string = format_string or "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
56
+ formatter = logging.Formatter(format_string)
57
+ if not handlers:
58
+ handlers = []
59
+ # Add stdout handler with user-specified level
60
+ stdout_handler = logging.StreamHandler(sys.stdout)
61
+ stdout_handler.setFormatter(formatter)
62
+ stdout_handler.setLevel(level)
63
+ handlers.append(stdout_handler)
64
+ # Add file handler if requested (always DEBUG level)
65
+ if log_to_file:
66
+ try:
67
+ LOG_DIR.mkdir(parents=True, exist_ok=True)
68
+ file_handler = RotatingFileHandler(
69
+ LOG_FILE,
70
+ maxBytes=MAX_LOG_SIZE,
71
+ backupCount=BACKUP_COUNT,
72
+ encoding="utf-8",
73
+ )
74
+ file_handler.setFormatter(formatter)
75
+ file_handler.setLevel(logging.DEBUG)
76
+ handlers.append(file_handler)
77
+ except Exception as exc: # noqa: BLE001
78
+ msg = f"Failed to create log file: {exc}"
79
+ print(msg, file=sys.stderr)
80
+
81
+ for handler in handlers:
82
+ if not handler.formatter:
83
+ handler.setFormatter(formatter)
84
+ logger.addHandler(handler)
85
+
86
+ logger.info("Logging initialized")
87
+ if log_to_file:
88
+ msg = "Console logging level: %s, File logging level: DEBUG (%s)"
89
+ logger.debug(msg, logging.getLevelName(level), LOG_FILE)
90
+
91
+
92
+ def complete_config_names() -> list[str]:
93
+ """Complete stored config names."""
94
+ from agentpool_cli import agent_store
95
+
96
+ return [name for name, _ in agent_store.list_configs()]
97
+
98
+
99
+ def complete_output_formats() -> list[str]:
100
+ """Complete output format options."""
101
+ return ["text", "json", "yaml"]
102
+
103
+
104
+ def verbose_callback(ctx: t.Context, _param: t.CallbackParam, value: bool) -> bool:
105
+ """Handle verbose flag."""
106
+ if value:
107
+ setup_logging(level=logging.DEBUG)
108
+ return value
109
+
110
+
111
+ output_format_opt = t.Option(
112
+ "text",
113
+ *OUTPUT_FORMAT_CMDS,
114
+ help=OUTPUT_FORMAT_HELP,
115
+ autocompletion=complete_output_formats,
116
+ )
117
+ verbose_opt = t.Option(False, *VERBOSE_CMDS, help=VERBOSE_HELP, callback=verbose_callback)
118
+
119
+
120
+ def format_output(result: Any, output_format: OutputFormat = "text") -> None:
121
+ """Format and print data in the requested format using TypeAdapter.
122
+
123
+ Args:
124
+ result: Any object to format
125
+ output_format: One of: text, json, yaml
126
+ """
127
+ from pydantic import TypeAdapter
128
+ from rich.console import Console
129
+
130
+ adapter = TypeAdapter(type(result))
131
+ data = adapter.dump_python(result)
132
+ console = Console()
133
+ match output_format:
134
+ case "json":
135
+ print(json.dumps(data, indent=2, default=str))
136
+ case "yaml":
137
+ import yamling
138
+
139
+ print(yamling.dump_yaml(data))
140
+ case "text":
141
+ console.print(data)
142
+ case _ as unreachable:
143
+ assert_never(unreachable)
144
+
145
+
146
+ if __name__ == "__main__":
147
+ from dataclasses import dataclass
148
+
149
+ @dataclass
150
+ class Person:
151
+ """Test class."""
152
+
153
+ name: str
154
+ age: int
155
+
156
+ people = [Person("Alice", 30), Person("Bob", 25)]
157
+
158
+ print("=== JSON ===")
159
+ format_output(people, "json")
160
+ print("\n=== YAML ===")
161
+ format_output(people, "yaml")
162
+ print("\n=== TEXT ===")
163
+ format_output(people, "text")
@@ -0,0 +1,175 @@
1
+ """Web interface commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Annotated, Any, ClassVar
6
+
7
+ import typer
8
+
9
+ from agentpool_cli.cli_types import Provider # noqa: TC001
10
+
11
+
12
+ def create(
13
+ output: Annotated[
14
+ str | None,
15
+ typer.Option(
16
+ "-o",
17
+ "--output",
18
+ help="Output file path. If not provided, only displays the config.",
19
+ ),
20
+ ] = None,
21
+ add_to_store: Annotated[
22
+ bool, typer.Option("-a", "--add-to-store", help="Add generated config to ConfigStore")
23
+ ] = False,
24
+ model: Annotated[
25
+ str, typer.Option("-m", "--model", help="Model to use for generation")
26
+ ] = "gpt-5",
27
+ provider: Annotated[
28
+ Provider, typer.Option("-p", "--provider", help="Provider to use")
29
+ ] = "pydantic_ai",
30
+ ) -> None:
31
+ """Interactive config generator for agents and teams."""
32
+ from schemez import YAMLCode
33
+ from textual.app import App
34
+ from textual.binding import Binding
35
+ from textual.containers import ScrollableContainer
36
+ from textual.widgets import Header, Input, Static
37
+
38
+ from agentpool import Agent, AgentsManifest
39
+ from agentpool.agents.architect import create_architect_agent
40
+ from agentpool.utils.count_tokens import count_tokens
41
+ from agentpool_cli import agent_store
42
+
43
+ if TYPE_CHECKING:
44
+ from textual.app import ComposeResult
45
+
46
+ class StatsDisplay(Static):
47
+ """Display for token count and validation status."""
48
+
49
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
50
+ super().__init__(*args, markup=kwargs.pop("markup", False), **kwargs)
51
+
52
+ def update_stats(self, token_count: int, status: str | None = None) -> None:
53
+ """Update the stats display."""
54
+ text = f"Context tokens: {token_count:,}"
55
+ if status:
56
+ text = f"{status} | {text}"
57
+ self.update(text)
58
+
59
+ class YamlDisplay(ScrollableContainer):
60
+ """Display for YAML content with syntax highlighting."""
61
+
62
+ def __init__(self) -> None:
63
+ super().__init__()
64
+ self._content = Static("")
65
+
66
+ def compose(self) -> ComposeResult:
67
+ """Initial empty content."""
68
+ yield self._content
69
+
70
+ def update_yaml(self, content: str) -> None:
71
+ """Update the YAML content with syntax highlighting."""
72
+ from rich.syntax import Syntax
73
+
74
+ syntax = Syntax(content, "yaml", theme="monokai")
75
+ self._content.update(syntax)
76
+
77
+ class ConfigGeneratorApp(App[None]):
78
+ """Application for generating configuration files."""
79
+
80
+ CSS = """
81
+ Screen {
82
+ layout: grid;
83
+ grid-size: 1;
84
+ padding: 1;
85
+ }
86
+
87
+ Input {
88
+ dock: top;
89
+ margin: 1 0;
90
+ }
91
+
92
+ YamlDisplay {
93
+ height: 1fr;
94
+ border: solid green;
95
+ }
96
+
97
+ StatsDisplay {
98
+ dock: bottom;
99
+ height: 3;
100
+ content-align: center middle;
101
+ }
102
+ """
103
+
104
+ BINDINGS: ClassVar = [
105
+ Binding("ctrl+s", "save", "Save Config", show=True),
106
+ ("escape", "quit", "Quit"),
107
+ ]
108
+
109
+ def __init__(
110
+ self,
111
+ model: str = "openai:gpt-5-mini",
112
+ output_path: str | None = None,
113
+ add_to_store: bool = False,
114
+ ) -> None:
115
+ from upathtools import to_upath
116
+
117
+ super().__init__()
118
+ agent = Agent(output_type=YAMLCode)
119
+ self.agent = agent
120
+ self.current_config: str | None = None
121
+ self.output_path = to_upath(output_path) if output_path else None
122
+ self.add_to_store = add_to_store
123
+ self._token_count: int = 0
124
+
125
+ def compose(self) -> ComposeResult:
126
+ yield Header()
127
+ yield Input(placeholder="Describe your configuration needs...")
128
+ yield YamlDisplay()
129
+ yield StatsDisplay("Context tokens: calculating...")
130
+
131
+ async def on_mount(self) -> None:
132
+ """Load schema and calculate token count."""
133
+ self.agent = await create_architect_agent(model="openai:gpt-5-nano")
134
+ assert self.agent.model_name
135
+ model_name = self.agent.model_name.split(":")[-1]
136
+ context = await self.agent.conversation.format_history()
137
+ self._token_count = count_tokens(context, model_name)
138
+ stats = self.query_one(StatsDisplay)
139
+ stats.update_stats(self._token_count)
140
+
141
+ async def on_input_submitted(self, message: Input.Submitted) -> None:
142
+ """Generate config when user hits enter."""
143
+ from pydantic import ValidationError
144
+ from yamling import YAMLError
145
+
146
+ yaml = await self.agent.run(message.value)
147
+ self.current_config = yaml.content.code
148
+ try:
149
+ AgentsManifest.from_yaml(yaml.content.code)
150
+ status = "✓ Valid configuration"
151
+ except (ValidationError, YAMLError) as e:
152
+ status = f"✗ Invalid: {e}"
153
+
154
+ content = self.query_one(YamlDisplay)
155
+ content.update_yaml(yaml.content.code)
156
+ stats = self.query_one(StatsDisplay)
157
+ stats.update_stats(self._token_count, status)
158
+
159
+ def action_save(self) -> None:
160
+ """Save current config."""
161
+ if not self.current_config:
162
+ self.notify("No configuration generated yet!")
163
+ return
164
+
165
+ if not self.output_path:
166
+ self.notify("No output path specified!")
167
+ return
168
+
169
+ self.output_path.write_text(self.current_config)
170
+ if self.add_to_store:
171
+ agent_store.add_config(self.output_path.stem, str(self.output_path))
172
+ self.notify(f"Saved to {self.output_path}")
173
+
174
+ app = ConfigGeneratorApp(model=model, provider=provider) # type: ignore
175
+ app.run()