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,122 @@
1
+ """Prompt-based hook implementation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from string import Template
7
+ from typing import TYPE_CHECKING, Literal
8
+
9
+ from pydantic import Field
10
+ from schemez import Schema
11
+
12
+ from agentpool.hooks.base import Hook, HookResult
13
+ from agentpool.log import get_logger
14
+
15
+
16
+ if TYPE_CHECKING:
17
+ from agentpool.hooks.base import HookEvent, HookInput
18
+
19
+
20
+ logger = get_logger(__name__)
21
+
22
+ # Default fast model for hook evaluation
23
+ DEFAULT_HOOK_MODEL = "openai:gpt-4o-mini"
24
+
25
+
26
+ class HookDecision(Schema):
27
+ """Structured response from LLM hook evaluation."""
28
+
29
+ decision: Literal["allow", "deny"]
30
+ """Whether to allow or deny the action"""
31
+
32
+ reason: str = Field(default="")
33
+ """Explanation for the decision"""
34
+
35
+
36
+ class PromptHook(Hook):
37
+ """Hook that uses an LLM to evaluate the action.
38
+
39
+ The prompt is sent to a fast LLM which returns a structured decision.
40
+ Supports placeholders: $INPUT, $TOOL_NAME, $TOOL_INPUT, $AGENT_NAME, etc.
41
+ """
42
+
43
+ def __init__(
44
+ self,
45
+ event: HookEvent,
46
+ prompt: str,
47
+ matcher: str | None = None,
48
+ timeout: float = 30.0,
49
+ enabled: bool = True,
50
+ model: str | None = None,
51
+ ):
52
+ """Initialize prompt hook.
53
+
54
+ Args:
55
+ event: The lifecycle event this hook handles.
56
+ prompt: Prompt template for LLM evaluation.
57
+ matcher: Regex pattern for matching.
58
+ timeout: Maximum execution time in seconds.
59
+ enabled: Whether this hook is active.
60
+ model: Model to use for evaluation. Defaults to a fast model.
61
+ """
62
+ super().__init__(event=event, matcher=matcher, timeout=timeout, enabled=enabled)
63
+ self.prompt_template = prompt
64
+ self.model = model or DEFAULT_HOOK_MODEL
65
+
66
+ async def execute(self, input_data: HookInput) -> HookResult:
67
+ """Execute the LLM evaluation.
68
+
69
+ Args:
70
+ input_data: The hook input data.
71
+
72
+ Returns:
73
+ Hook result from LLM.
74
+ """
75
+ try:
76
+ prompt = self._build_prompt(input_data)
77
+ decision = await self._query_llm(prompt)
78
+ return HookResult(decision=decision.decision, reason=decision.reason)
79
+ except Exception as e:
80
+ logger.exception("Prompt hook failed")
81
+ return HookResult(decision="allow", reason=str(e))
82
+
83
+ def _build_prompt(self, input_data: HookInput) -> str:
84
+ """Build prompt with placeholder substitutions.
85
+
86
+ Args:
87
+ input_data: The hook input data.
88
+
89
+ Returns:
90
+ Formatted prompt string.
91
+ """
92
+ variables = {
93
+ "INPUT": json.dumps(dict(input_data), indent=2),
94
+ "TOOL_NAME": input_data.get("tool_name", ""),
95
+ "TOOL_INPUT": json.dumps(input_data.get("tool_input", {}), indent=2),
96
+ "TOOL_OUTPUT": json.dumps(input_data.get("tool_output", ""), indent=2),
97
+ "AGENT_NAME": input_data.get("agent_name", ""),
98
+ "PROMPT": input_data.get("prompt", ""),
99
+ "EVENT": input_data.get("event", ""),
100
+ }
101
+ template = Template(self.prompt_template)
102
+ return template.safe_substitute(variables)
103
+
104
+ async def _query_llm(self, prompt: str) -> HookDecision:
105
+ """Query the LLM for evaluation.
106
+
107
+ Args:
108
+ prompt: The evaluation prompt.
109
+
110
+ Returns:
111
+ Structured hook decision.
112
+ """
113
+ from pydantic_ai import Agent
114
+
115
+ agent: Agent[None, HookDecision] = Agent(
116
+ model=self.model,
117
+ system_prompt="You are a security/policy evaluation assistant. "
118
+ "Analyze the request and decide whether to allow or deny it.",
119
+ output_type=HookDecision,
120
+ )
121
+ result = await agent.run(prompt)
122
+ return result.output
@@ -0,0 +1,132 @@
1
+ """Jinja filters for agentpool documentation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ import jinja2
8
+
9
+
10
+ if TYPE_CHECKING:
11
+ from collections.abc import Mapping, Sequence
12
+ import os
13
+
14
+ from mknodes.jinja.nodeenvironment import NodeEnvironment
15
+
16
+
17
+ @jinja2.pass_environment
18
+ def pydantic_playground_url(
19
+ env: NodeEnvironment,
20
+ files: Mapping[str, str] | Sequence[str | os.PathLike[str]],
21
+ active_index: int = 0,
22
+ ) -> str:
23
+ """Generate a Pydantic Playground URL from files.
24
+
25
+ Args:
26
+ env: The jinja environment (passed automatically)
27
+ files: Either a mapping of filenames to content, or a sequence of file paths
28
+ active_index: Index of the file to show as active (default: 0)
29
+
30
+ Returns:
31
+ URL to Pydantic Playground with files pre-loaded
32
+ """
33
+ import mknodes as mk
34
+
35
+ link = mk.MkLink.for_pydantic_playground(files, active_index=active_index)
36
+ return str(link.target)
37
+
38
+
39
+ @jinja2.pass_environment
40
+ def pydantic_playground_iframe(
41
+ env: NodeEnvironment,
42
+ files: Mapping[str, str] | Sequence[str | os.PathLike[str]],
43
+ width: int = 1200,
44
+ height: int = 900,
45
+ active_index: int = 0,
46
+ ) -> str:
47
+ """Generate an MkIFrame for Pydantic Playground.
48
+
49
+ Args:
50
+ env: The jinja environment (passed automatically)
51
+ files: Either a mapping of filenames to content, or a sequence of file paths
52
+ width: Width of the iframe
53
+ height: Height of the iframe
54
+ active_index: Index of the file to show as active
55
+
56
+ Returns:
57
+ MkIFrame node
58
+ """
59
+ import mknodes as mk
60
+
61
+ link = mk.MkLink.for_pydantic_playground(files, active_index=active_index)
62
+ return str(mk.MkIFrame(str(link.target), width=width, height=height, parent=env.node))
63
+
64
+
65
+ @jinja2.pass_environment
66
+ def pydantic_playground_link(
67
+ env: NodeEnvironment,
68
+ files: Mapping[str, str] | Sequence[str | os.PathLike[str]],
69
+ title: str = "Open in Pydantic Playground",
70
+ active_index: int = 0,
71
+ as_button: bool = True,
72
+ ) -> str:
73
+ """Generate an MkLink to Pydantic Playground.
74
+
75
+ Args:
76
+ env: The jinja environment (passed automatically)
77
+ files: Either a mapping of filenames to content, or a sequence of file paths
78
+ title: Link text
79
+ active_index: Index of the file to show as active
80
+ as_button: Whether to style as a button
81
+
82
+ Returns:
83
+ MkLink node
84
+ """
85
+ import mknodes as mk
86
+
87
+ link = mk.MkLink.for_pydantic_playground(
88
+ files, title=title, active_index=active_index, parent=env.node
89
+ )
90
+ if as_button:
91
+ link.as_button = True
92
+ return str(link)
93
+
94
+
95
+ @jinja2.pass_environment
96
+ def pydantic_playground(
97
+ env: NodeEnvironment,
98
+ files: Mapping[str, str] | Sequence[str | os.PathLike[str]],
99
+ width: int = 1200,
100
+ height: int = 900,
101
+ active_index: int = 0,
102
+ show_link: bool = True,
103
+ link_title: str = "Open in Pydantic Playground",
104
+ ) -> str:
105
+ """Generate both iframe and link for Pydantic Playground.
106
+
107
+ Args:
108
+ env: The jinja environment (passed automatically)
109
+ files: Either a mapping of filenames to content, or a sequence of file paths
110
+ width: Width of the iframe
111
+ height: Height of the iframe
112
+ active_index: Index of the file to show as active
113
+ show_link: Whether to show a link below the iframe
114
+ link_title: Text for the link
115
+
116
+ Returns:
117
+ MkContainer with iframe and optional link
118
+ """
119
+ import mknodes as mk
120
+
121
+ link = mk.MkLink.for_pydantic_playground(files, active_index=active_index)
122
+ iframe = mk.MkIFrame(str(link.target), width=width, height=height)
123
+
124
+ if show_link:
125
+ button_link = mk.MkLink.for_pydantic_playground(
126
+ files, title=link_title, active_index=active_index
127
+ )
128
+ button_link.as_button = True
129
+ container = mk.MkContainer([iframe, button_link], parent=env.node)
130
+ return str(container)
131
+ container = mk.MkContainer([iframe], parent=env.node)
132
+ return str(container)
agentpool/log.py ADDED
@@ -0,0 +1,224 @@
1
+ """Logging configuration for agentpool with structlog support."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from contextlib import contextmanager
6
+ import logging
7
+ from logging.handlers import RotatingFileHandler
8
+ import sys
9
+ from typing import TYPE_CHECKING, Any
10
+
11
+ import logfire
12
+ import structlog
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ from collections.abc import Iterator, Sequence
17
+
18
+ from slashed import OutputWriter
19
+
20
+
21
+ LogLevel = int | str
22
+
23
+
24
+ _LOGGING_CONFIGURED = False
25
+
26
+
27
+ def configure_logging(
28
+ level: LogLevel = "INFO",
29
+ *,
30
+ use_colors: bool | None = None,
31
+ json_logs: bool = False,
32
+ force: bool = False,
33
+ log_file: str | None = None,
34
+ ) -> None:
35
+ """Configure structlog and standard logging.
36
+
37
+ Args:
38
+ level: Logging level
39
+ use_colors: Whether to use colored output (auto-detected if None)
40
+ json_logs: Force JSON output regardless of TTY detection
41
+ force: Force reconfiguration even if already configured
42
+ log_file: Optional file path to write logs to instead of stderr
43
+ """
44
+ global _LOGGING_CONFIGURED # noqa: PLW0603
45
+
46
+ if _LOGGING_CONFIGURED and not force:
47
+ return
48
+
49
+ if isinstance(level, str):
50
+ level = getattr(logging, level.upper())
51
+
52
+ if log_file:
53
+ _configure_file_logging(level, log_file)
54
+ else:
55
+ _configure_console_logging(level, use_colors=use_colors, json_logs=json_logs)
56
+
57
+ _LOGGING_CONFIGURED = True
58
+
59
+
60
+ def _configure_file_logging(level: LogLevel, log_file: str, max_lines: int = 5000) -> None:
61
+ """Configure logging to write to a file with human-readable format and line-based rotation.
62
+
63
+ Args:
64
+ level: Logging level
65
+ log_file: Path to log file
66
+ max_lines: Maximum number of lines before rotation (default: 5000)
67
+ """
68
+ if isinstance(level, str):
69
+ level = getattr(logging, level.upper())
70
+
71
+ # Estimate bytes per line (assuming ~200 chars average)
72
+ max_bytes = max_lines * 200
73
+
74
+ # Set up rotating file handler with 3 backup files
75
+ handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=3, encoding="utf-8")
76
+ handler.setFormatter(logging.Formatter("%(message)s"))
77
+ logging.basicConfig(level=level, handlers=[handler], force=True)
78
+
79
+ # Configure structlog processors for file output
80
+ processors: list[Any] = [
81
+ structlog.stdlib.filter_by_level,
82
+ structlog.stdlib.add_log_level,
83
+ structlog.stdlib.add_logger_name,
84
+ structlog.stdlib.PositionalArgumentsFormatter(),
85
+ structlog.processors.TimeStamper(fmt="iso"),
86
+ structlog.processors.StackInfoRenderer(),
87
+ structlog.processors.format_exc_info,
88
+ structlog.processors.UnicodeDecoder(),
89
+ logfire.StructlogProcessor(), # Capture logs for observability
90
+ structlog.dev.ConsoleRenderer(
91
+ colors=False, exception_formatter=structlog.dev.plain_traceback
92
+ ),
93
+ ]
94
+
95
+ structlog.configure(
96
+ processors=processors,
97
+ context_class=dict,
98
+ logger_factory=structlog.stdlib.LoggerFactory(),
99
+ wrapper_class=structlog.stdlib.BoundLogger,
100
+ cache_logger_on_first_use=True,
101
+ )
102
+
103
+
104
+ def _configure_console_logging(
105
+ level: LogLevel, *, use_colors: bool | None = None, json_logs: bool = False
106
+ ) -> None:
107
+ """Configure logging to stderr with console or JSON format."""
108
+ if isinstance(level, str):
109
+ level = getattr(logging, level.upper())
110
+
111
+ # Determine output format
112
+ colors = sys.stderr.isatty() and not json_logs if use_colors is None else use_colors or False
113
+ use_console_renderer = not json_logs and (colors or sys.stderr.isatty())
114
+ # Configure standard logging as backend
115
+ handler = logging.StreamHandler(sys.stderr)
116
+ if use_console_renderer:
117
+ # For console output, don't show level in stdlib logging (structlog handles it)
118
+ handler.setFormatter(logging.Formatter("%(message)s"))
119
+ logging.basicConfig(level=level, handlers=[handler], force=True)
120
+ else: # For structured output, use minimal formatting
121
+ logging.basicConfig(level=level, handlers=[handler], force=True, format="%(message)s")
122
+ processors: list[Any] = [
123
+ structlog.stdlib.filter_by_level,
124
+ structlog.stdlib.add_log_level,
125
+ structlog.stdlib.PositionalArgumentsFormatter(),
126
+ structlog.processors.TimeStamper(fmt="iso"),
127
+ structlog.processors.StackInfoRenderer(),
128
+ structlog.processors.UnicodeDecoder(),
129
+ ]
130
+
131
+ # Add logger name only for non-console renderers (avoid duplication with stdlib)
132
+ if not use_console_renderer:
133
+ processors.insert(1, structlog.stdlib.add_logger_name)
134
+ processors.append(structlog.processors.format_exc_info)
135
+
136
+ # Add logfire processor before final renderer to capture logs for observability
137
+ processors.append(logfire.StructlogProcessor())
138
+
139
+ # Add final renderer
140
+ if use_console_renderer:
141
+ processors.append(structlog.dev.ConsoleRenderer(colors=colors))
142
+ else:
143
+ processors.append(structlog.processors.JSONRenderer())
144
+
145
+ structlog.configure(
146
+ processors=processors,
147
+ context_class=dict,
148
+ logger_factory=structlog.stdlib.LoggerFactory(),
149
+ wrapper_class=structlog.stdlib.BoundLogger,
150
+ cache_logger_on_first_use=True,
151
+ )
152
+
153
+
154
+ def get_logger(name: str, log_level: LogLevel | None = None) -> structlog.stdlib.BoundLogger:
155
+ """Get a structlog logger for the given name.
156
+
157
+ Args:
158
+ name: The name of the logger, will be prefixed with 'agentpool.'
159
+ log_level: The logging level to set for the logger
160
+
161
+ Returns:
162
+ A structlog BoundLogger instance
163
+ """
164
+ # Ensure basic structlog configuration exists for tests
165
+ if not _LOGGING_CONFIGURED and not structlog.is_configured():
166
+ # Minimal configuration that doesn't interfere with stdio
167
+ structlog.configure(
168
+ processors=[
169
+ structlog.stdlib.filter_by_level,
170
+ structlog.stdlib.add_log_level,
171
+ structlog.processors.StackInfoRenderer(),
172
+ logfire.StructlogProcessor(),
173
+ structlog.dev.ConsoleRenderer(colors=False),
174
+ ],
175
+ wrapper_class=structlog.stdlib.BoundLogger,
176
+ logger_factory=structlog.stdlib.LoggerFactory(),
177
+ cache_logger_on_first_use=True,
178
+ )
179
+
180
+ logger = structlog.get_logger(f"agentpool.{name}")
181
+ if log_level is not None:
182
+ if isinstance(log_level, str):
183
+ log_level = getattr(logging, log_level.upper())
184
+ assert log_level
185
+ # Set level on underlying stdlib logger
186
+ stdlib_logger = logging.getLogger(f"agentpool.{name}")
187
+ stdlib_logger.setLevel(log_level)
188
+ return logger # type: ignore[no-any-return]
189
+
190
+
191
+ @contextmanager
192
+ def set_handler_level(
193
+ level: int,
194
+ logger_names: Sequence[str],
195
+ *,
196
+ session_handler: OutputWriter | None = None,
197
+ ) -> Iterator[None]:
198
+ """Temporarily set logging level and optionally add session handler.
199
+
200
+ Args:
201
+ level: Logging level to set
202
+ logger_names: Names of loggers to configure
203
+ session_handler: Optional output writer for session logging
204
+ """
205
+ loggers = [logging.getLogger(name) for name in logger_names]
206
+ old_levels = [logger.level for logger in loggers]
207
+
208
+ handler = None
209
+ if session_handler:
210
+ from slashed.log import SessionLogHandler
211
+
212
+ handler = SessionLogHandler(session_handler)
213
+ for logger in loggers:
214
+ logger.addHandler(handler)
215
+
216
+ try:
217
+ for logger in loggers:
218
+ logger.setLevel(level)
219
+ yield
220
+ finally:
221
+ for logger, old_level in zip(loggers, old_levels, strict=True):
222
+ logger.setLevel(old_level)
223
+ if handler:
224
+ logger.removeHandler(handler)
@@ -0,0 +1,17 @@
1
+ """MCP server integration for AgentPool."""
2
+
3
+ from agentpool.mcp_server.client import MCPClient
4
+ from agentpool.mcp_server.tool_bridge import (
5
+ BridgeConfig,
6
+ ToolBridgeRegistry,
7
+ ToolManagerBridge,
8
+ create_tool_bridge,
9
+ )
10
+
11
+ __all__ = [
12
+ "BridgeConfig",
13
+ "MCPClient",
14
+ "ToolBridgeRegistry",
15
+ "ToolManagerBridge",
16
+ "create_tool_bridge",
17
+ ]