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,175 @@
1
+ """Agent connection management commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from rich.tree import Tree
8
+ from slashed import CommandContext, CommandError # noqa: TC002
9
+ from slashed.completers import CallbackCompleter
10
+
11
+ from agentpool.log import get_logger
12
+ from agentpool.messaging import MessageNode
13
+ from agentpool.messaging.context import NodeContext # noqa: TC001
14
+ from agentpool_commands.base import NodeCommand
15
+ from agentpool_commands.completers import get_available_nodes
16
+
17
+
18
+ logger = get_logger(__name__)
19
+
20
+
21
+ def format_node_name(node: MessageNode[Any, Any], current: bool = False) -> str:
22
+ """Format node name for display."""
23
+ name = node.name
24
+ if current:
25
+ return f"โ–บ {name} (current)"
26
+ if node.connections.get_targets():
27
+ return f"โ— {name}"
28
+ return f"โ—‹ {name}"
29
+
30
+
31
+ class ConnectCommand(NodeCommand):
32
+ """Connect the current node to another node.
33
+
34
+ Messages will be forwarded to the target node.
35
+
36
+ Examples:
37
+ /connect node2 # Forward to node, wait for responses
38
+ /connect node2 --no-wait # Forward without waiting
39
+ """
40
+
41
+ name = "connect"
42
+ category = "nodes"
43
+
44
+ async def execute_command(
45
+ self,
46
+ ctx: CommandContext[NodeContext],
47
+ node_name: str,
48
+ *,
49
+ wait: bool = True,
50
+ ) -> None:
51
+ """Connect to another node.
52
+
53
+ Args:
54
+ ctx: Command context
55
+ node_name: Name of the node to connect to
56
+ wait: Whether to wait for responses (default: True)
57
+ """
58
+ try:
59
+ assert ctx.context.pool
60
+ target_node = ctx.context.pool[node_name]
61
+ assert isinstance(target_node, MessageNode)
62
+ ctx.context.node.connect_to(target_node)
63
+ ctx.context.node.connections.set_wait_state(node_name, wait)
64
+ text = "*(waiting for responses)*" if wait else "*(async)*"
65
+ msg = f"๐Ÿ”— **Connected:** `{ctx.context.node_name}` โ†’ `{node_name}` {text}"
66
+ await ctx.print(msg)
67
+ except Exception as e:
68
+ msg = f"Failed to connect {ctx.context.node_name!r} to {node_name!r}: {e}"
69
+ raise CommandError(msg) from e
70
+
71
+ def get_completer(self) -> CallbackCompleter:
72
+ """Get completer for node names."""
73
+ return CallbackCompleter(get_available_nodes)
74
+
75
+
76
+ class DisconnectCommand(NodeCommand):
77
+ """Disconnect the current node from a target node.
78
+
79
+ Stops forwarding messages to the specified node.
80
+
81
+ Example: /disconnect node2
82
+ """
83
+
84
+ name = "disconnect"
85
+ category = "nodes"
86
+
87
+ async def execute_command(
88
+ self,
89
+ ctx: CommandContext[NodeContext],
90
+ node_name: str,
91
+ ) -> None:
92
+ """Disconnect from another node.
93
+
94
+ Args:
95
+ ctx: Command context
96
+ node_name: Name of the node to disconnect from
97
+ """
98
+ source = ctx.context.node_name
99
+ try:
100
+ assert ctx.context.pool
101
+ target_node = ctx.context.pool[node_name]
102
+ assert isinstance(target_node, MessageNode)
103
+ ctx.context.node.connections.disconnect(target_node)
104
+ await ctx.print(f"๐Ÿ”Œ **Disconnected:** `{source}` โ›” `{node_name}`")
105
+ except Exception as e:
106
+ msg = f"{source!r} failed to disconnect from {node_name!r}: {e}"
107
+ raise CommandError(msg) from e
108
+
109
+ def get_completer(self) -> CallbackCompleter:
110
+ """Get completer for node names."""
111
+ return CallbackCompleter(get_available_nodes)
112
+
113
+
114
+ class DisconnectAllCommand(NodeCommand):
115
+ """Disconnect from all nodes.
116
+
117
+ Remove all node connections.
118
+ """
119
+
120
+ name = "disconnect-all"
121
+ category = "nodes"
122
+
123
+ async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
124
+ """Disconnect from all nodes.
125
+
126
+ Args:
127
+ ctx: Command context
128
+ """
129
+ if not ctx.context.node.connections.get_targets():
130
+ await ctx.print("โ„น๏ธ **No active connections**") # noqa: RUF001
131
+ return
132
+ source = ctx.context.node_name
133
+ await ctx.context.node.disconnect_all()
134
+ await ctx.print(f"๐Ÿ”Œ **Disconnected** `{source}` from all nodes")
135
+
136
+
137
+ class ListConnectionsCommand(NodeCommand):
138
+ """Show current node connections and their status.
139
+
140
+ Displays:
141
+ - Connected nodes
142
+ - Wait settings
143
+ - Message flow direction
144
+ """
145
+
146
+ name = "connections"
147
+ category = "nodes"
148
+
149
+ async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
150
+ """List current connections.
151
+
152
+ Args:
153
+ ctx: Command context
154
+ """
155
+ if not ctx.context.node.connections.get_targets():
156
+ await ctx.print("โ„น๏ธ **No active connections**") # noqa: RUF001
157
+ return
158
+
159
+ # Create tree visualization
160
+ tree = Tree(format_node_name(ctx.context.node, current=True))
161
+
162
+ # Use session's get_connections() for info
163
+ for node in ctx.context.node.connections.get_targets():
164
+ assert ctx.context.pool
165
+ name = format_node_name(ctx.context.pool[node.name])
166
+ _branch = tree.add(name)
167
+
168
+ # Create string representation
169
+ from rich.console import Console
170
+
171
+ console = Console()
172
+ with console.capture() as capture:
173
+ console.print(tree)
174
+ tree_str = capture.get()
175
+ await ctx.print(f"\n## ๐ŸŒณ Connection Tree\n\n```\n{tree_str}\n```")
@@ -0,0 +1,31 @@
1
+ """Markdown formatting utilities for command output."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+
8
+ def format_table(headers: list[str], rows: list[dict[str, Any]]) -> str:
9
+ """Format data as a markdown table.
10
+
11
+ Args:
12
+ headers: Column headers
13
+ rows: List of dicts with keys matching headers
14
+
15
+ Returns:
16
+ Markdown table string
17
+ """
18
+ if not rows:
19
+ return ""
20
+
21
+ # Create header row
22
+ header_row = "| " + " | ".join(headers) + " |"
23
+ separator_row = "|" + "|".join("---" for _ in headers) + "|"
24
+
25
+ # Create data rows
26
+ data_rows = []
27
+ for row in rows:
28
+ values = [str(row.get(header, "")) for header in headers]
29
+ data_rows.append("| " + " | ".join(values) + " |")
30
+
31
+ return "\n".join([header_row, separator_row, *data_rows])
@@ -0,0 +1,62 @@
1
+ """Model-related commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from slashed import CommandContext # noqa: TC002
8
+ from slashed.completers import CallbackCompleter
9
+
10
+ from agentpool.agents.context import AgentContext # noqa: TC001
11
+ from agentpool_commands.base import NodeCommand
12
+ from agentpool_commands.completers import get_model_names
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ from agentpool.messaging import MessageNode
17
+
18
+
19
+ class SetModelCommand(NodeCommand):
20
+ """Change the language model for the current conversation.
21
+
22
+ The model change takes effect immediately for all following messages.
23
+ Previous messages and their context are preserved.
24
+
25
+ Examples:
26
+ /set-model gpt-5
27
+ /set-model openai:gpt-5-mini
28
+ /set-model claude-2
29
+
30
+ Note: Available models depend on your configuration and API access.
31
+ """
32
+
33
+ name = "set-model"
34
+ category = "model"
35
+
36
+ async def execute_command(
37
+ self,
38
+ ctx: CommandContext[AgentContext],
39
+ model: str,
40
+ ) -> None:
41
+ """Change the model for the current conversation.
42
+
43
+ Args:
44
+ ctx: Command context
45
+ model: Model name to switch to
46
+ """
47
+ try:
48
+ # Create new session with model override
49
+ ctx.context.native_agent.set_model(model)
50
+ await ctx.print(f"โœ… **Model changed to:** `{model}`")
51
+ except Exception as e: # noqa: BLE001
52
+ await ctx.print(f"โŒ **Failed to change model:** {e}")
53
+
54
+ def get_completer(self) -> CallbackCompleter:
55
+ """Get completer for model names."""
56
+ return CallbackCompleter(get_model_names)
57
+
58
+ @classmethod
59
+ def supports_node(cls, node: MessageNode[Any, Any]) -> bool:
60
+ from agentpool import Agent
61
+
62
+ return isinstance(node, Agent)
@@ -0,0 +1,78 @@
1
+ """Prompt slash commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from slashed import CommandContext, CommandError # noqa: TC002
6
+
7
+ from agentpool.messaging.context import NodeContext # noqa: TC001
8
+ from agentpool_commands.base import NodeCommand
9
+ from agentpool_commands.completers import PromptCompleter
10
+
11
+
12
+ class ShowPromptCommand(NodeCommand):
13
+ """Show prompts from configured prompt hubs.
14
+
15
+ Usage examples:
16
+ /prompt role.reviewer # Use builtin prompt
17
+ /prompt langfuse:explain@v2 # Use specific version
18
+ /prompt some_prompt[var=value] # With variables
19
+ """
20
+
21
+ name = "prompt"
22
+ category = "prompts"
23
+
24
+ async def execute_command(self, ctx: CommandContext[NodeContext], identifier: str) -> None:
25
+ """Show prompt content.
26
+
27
+ Args:
28
+ ctx: Command context
29
+ identifier: Prompt identifier ([provider:]name[@version][?var=val])
30
+ """
31
+ try:
32
+ prompt = await ctx.context.prompt_manager.get(identifier)
33
+ await ctx.print(f"## ๐Ÿ“ Prompt Content\n\n```\n{prompt}\n```")
34
+ except Exception as e:
35
+ msg = f"Error getting prompt: {e}"
36
+ raise CommandError(msg) from e
37
+
38
+ def get_completer(self) -> PromptCompleter:
39
+ """Get completer for prompt names."""
40
+ return PromptCompleter()
41
+
42
+
43
+ class ListPromptsCommand(NodeCommand):
44
+ """List available prompts from all providers.
45
+
46
+ Show all prompts available in the current configuration.
47
+ Each prompt is shown with its name and description.
48
+ """
49
+
50
+ name = "list-prompts"
51
+ category = "prompts"
52
+
53
+ async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
54
+ """List available prompts from all providers.
55
+
56
+ Args:
57
+ ctx: Command context
58
+ """
59
+ prompts = await ctx.context.prompt_manager.list_prompts()
60
+ output_lines = ["\n## ๐Ÿ“ Available Prompts\n"]
61
+
62
+ for provider, provider_prompts in prompts.items():
63
+ if not provider_prompts:
64
+ continue
65
+
66
+ output_lines.append(f"\n### {provider.title()}\n")
67
+ sorted_prompts = sorted(provider_prompts)
68
+
69
+ # For builtin prompts we can show their description
70
+ if provider == "builtin":
71
+ for prompt_name in sorted_prompts:
72
+ prompt = ctx.context.definition.prompts.system_prompts[prompt_name]
73
+ desc = f" - *{prompt.category}*" if prompt.category else ""
74
+ output_lines.append(f"- **{prompt_name}**{desc}")
75
+ else:
76
+ # For other providers, just show names
77
+ output_lines.extend(f"- `{prompt_name}`" for prompt_name in sorted_prompts)
78
+ await ctx.print("\n".join(output_lines))
File without changes
@@ -0,0 +1,77 @@
1
+ """Command for reading file content into conversations."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from slashed import CommandContext, CommandError # noqa: TC002
8
+ from slashed.completers import PathCompleter
9
+
10
+ from agentpool.agents.context import AgentContext # noqa: TC001
11
+ from agentpool.log import get_logger
12
+ from agentpool_commands.base import NodeCommand
13
+
14
+
15
+ if TYPE_CHECKING:
16
+ from agentpool.messaging import MessageNode
17
+
18
+ logger = get_logger(__name__)
19
+
20
+
21
+ class ReadCommand(NodeCommand):
22
+ """Read content from files or URLs into the conversation.
23
+
24
+ By default reads raw content, but can convert supported formats to markdown
25
+ with the --convert-to-md flag.
26
+
27
+ Supported formats for conversion:
28
+ - PDF documents
29
+ - Office files (Word, Excel, PowerPoint)
30
+ - Images (with metadata)
31
+ - Audio files (metadata)
32
+ - HTML pages
33
+ - Text formats (CSV, JSON, XML)
34
+
35
+ Examples:
36
+ /read document.txt # Read raw text
37
+ /read document.pdf --convert-to-md # Convert PDF to markdown
38
+ /read https://example.com/doc.docx --convert-to-md
39
+ /read presentation.pptx --convert-to-md
40
+ """
41
+
42
+ name = "read"
43
+ category = "content"
44
+
45
+ async def execute_command(
46
+ self,
47
+ ctx: CommandContext[AgentContext],
48
+ path: str,
49
+ *,
50
+ convert_to_md: bool = False,
51
+ ) -> None:
52
+ """Read file content into conversation.
53
+
54
+ Args:
55
+ ctx: Command context
56
+ path: Path or URL to read
57
+ convert_to_md: Whether to convert to markdown format
58
+ """
59
+ try:
60
+ agent = ctx.context.agent
61
+ await agent.conversation.add_context_from_path(path, convert_to_md=convert_to_md)
62
+ await ctx.print(f"๐Ÿ“„ **Added content from** {path!r} **to next message as context**")
63
+ except Exception as e:
64
+ msg = f"Unexpected error reading {path}: {e}"
65
+ logger.exception(msg)
66
+ raise CommandError(msg) from e
67
+
68
+ @classmethod
69
+ def supports_node(cls, node: MessageNode[Any, Any]) -> bool:
70
+ """Only available for Agent nodes."""
71
+ from agentpool import Agent
72
+
73
+ return isinstance(node, Agent)
74
+
75
+ def get_completer(self) -> PathCompleter:
76
+ """Get completer for file paths."""
77
+ return PathCompleter()
@@ -0,0 +1,210 @@
1
+ """Resource management commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from slashed import CommandContext, CommandError # noqa: TC002
6
+
7
+ from agentpool.agents.context import AgentContext # noqa: TC001
8
+ from agentpool.log import get_logger
9
+ from agentpool.messaging.context import NodeContext # noqa: TC001
10
+ from agentpool_commands.base import AgentCommand, NodeCommand
11
+ from agentpool_commands.markdown_utils import format_table
12
+
13
+
14
+ logger = get_logger(__name__)
15
+
16
+
17
+ class ListResourcesCommand(NodeCommand):
18
+ """Display all resources available to the agent.
19
+
20
+ Shows:
21
+ - Resource names and descriptions
22
+ - Resource types and URIs
23
+ - Whether parameters are supported
24
+ - MIME types
25
+
26
+ Resource types can be:
27
+ - path: Files or URLs
28
+ - text: Raw text content
29
+ - cli: Command line tools
30
+ - source: Python source code
31
+ - callable: Python functions
32
+ - image: Image files
33
+
34
+ Use /show-resource for detailed information about specific resources.
35
+ """
36
+
37
+ name = "list-resources"
38
+ category = "resources"
39
+
40
+ async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
41
+ """List available resources.
42
+
43
+ Args:
44
+ ctx: Command context
45
+ """
46
+ try:
47
+ fs = ctx.context.definition.vfs_registry.get_fs()
48
+ root = await fs._ls("/", detail=True)
49
+
50
+ rows = []
51
+ for entry in root:
52
+ protocol = entry["name"].removesuffix("://")
53
+ info = await fs._info(f"{protocol}://")
54
+
55
+ rows.append({
56
+ "Resource": protocol,
57
+ "Type": info.get("type", "unknown"),
58
+ "URI": info.get("uri", ""),
59
+ "Description": info.get("description", ""),
60
+ })
61
+
62
+ headers = ["Resource", "Type", "URI", "Description"]
63
+ table = format_table(headers, rows)
64
+ await ctx.print(f"## ๐Ÿ“ Available Resources\n\n{table}")
65
+ except Exception as e: # noqa: BLE001
66
+ await ctx.print(f"โŒ **Failed to list resources:** {e}")
67
+
68
+
69
+ class ShowResourceCommand(NodeCommand):
70
+ """Display detailed information and content of a specific resource.
71
+
72
+ Shows:
73
+ - Resource metadata (type, URI, description)
74
+ - MIME type information
75
+ - Parameter support status
76
+ - Resource content (if loadable)
77
+
78
+ For resources that support parameters:
79
+ - Pass parameters as --param arguments
80
+ - Parameters are passed to resource loader
81
+
82
+ Examples:
83
+ /show-resource config.yml # Show configuration file
84
+ /show-resource template --date today # Template with parameters
85
+ /show-resource image.png # Show image details
86
+ /show-resource api --key value # API with parameters
87
+
88
+ Note: Some resources might require parameters to be viewed.
89
+ """
90
+
91
+ name = "show-resource"
92
+ category = "resources"
93
+
94
+ async def execute_command(
95
+ self,
96
+ ctx: CommandContext[NodeContext],
97
+ name: str,
98
+ **kwargs: str,
99
+ ) -> None:
100
+ """Show details or content of a resource.
101
+
102
+ Args:
103
+ ctx: Command context
104
+ name: Resource name to show
105
+ **kwargs: Additional parameters for the resource
106
+ """
107
+ try:
108
+ fs = ctx.context.definition.vfs_registry.get_fs()
109
+
110
+ # Get resource info
111
+ try:
112
+ info = await fs._info(f"{name}://")
113
+ except Exception as e: # noqa: BLE001
114
+ await ctx.print(f"โŒ **Resource** `{name}` **not found:** {e}")
115
+ return
116
+
117
+ sections = [f"## ๐Ÿ“ Resource: {name}\n"]
118
+ if typ := info.get("type"):
119
+ sections.append(f"**Type:** `{typ}`")
120
+ if uri := info.get("uri"):
121
+ sections.append(f"**URI:** `{uri}`")
122
+ if desc := info.get("description"):
123
+ sections.append(f"Description: {desc}")
124
+ if mime := info.get("mime_type"):
125
+ sections.append(f"MIME Type: {mime}")
126
+
127
+ # Try to list contents
128
+ try:
129
+ listing = await fs._ls(f"{name}://", detail=False)
130
+ if listing:
131
+ sections.extend(["\n# Contents:", "```", *listing, "```"])
132
+ except Exception as e: # noqa: BLE001
133
+ sections.append(f"\nFailed to list contents: {e}")
134
+
135
+ await ctx.print("\n".join(sections))
136
+ except Exception as e: # noqa: BLE001
137
+ await ctx.print(f"โŒ **Error accessing resource:** {e}")
138
+
139
+
140
+ class AddResourceCommand(AgentCommand):
141
+ """Add content from a resource to the next message.
142
+
143
+ Parameters are passed to the resource loader if supported.
144
+
145
+ Examples:
146
+ /add-resource config.yml
147
+ /add-resource template --date today
148
+ /add-resource api_data --key value
149
+ """
150
+
151
+ name = "add-resource"
152
+ category = "resources"
153
+
154
+ async def execute_command(
155
+ self,
156
+ ctx: CommandContext[AgentContext],
157
+ resource_path: str,
158
+ *,
159
+ pattern: str | None = None,
160
+ **kwargs: str,
161
+ ) -> None:
162
+ """Add resource content as context for the next message.
163
+
164
+ Args:
165
+ ctx: Command context
166
+ resource_path: Resource name or resource/path
167
+ pattern: Pattern for filtering files
168
+ **kwargs: Additional parameters for the resource
169
+ """
170
+ try:
171
+ # Parse resource name and path
172
+ parts = resource_path.split("/", 1)
173
+ resource_name = parts[0]
174
+ path = parts[1] if len(parts) > 1 else ""
175
+
176
+ registry = ctx.context.definition.vfs_registry
177
+
178
+ if path:
179
+ if "*" in path:
180
+ # It's a pattern - use query
181
+ files = await registry.query(resource_name, pattern=path)
182
+ for file in files:
183
+ content = await registry.get_content(resource_name, file)
184
+ ctx.context.agent.conversation.add_context_message(
185
+ content, source=f"{resource_name}/{file}", **kwargs
186
+ )
187
+ msg = f"Added {len(files)} files from {resource_name!r} matching {path!r}"
188
+ else:
189
+ # Specific file
190
+ content = await registry.get_content(resource_name, path)
191
+ ctx.context.agent.conversation.add_context_message(
192
+ content, source=f"{resource_name}/{path}", **kwargs
193
+ )
194
+ msg = f"Added '{resource_name}/{path}' to context"
195
+ else:
196
+ # Add all content from resource root
197
+ files = await registry.query(resource_name, pattern=pattern or "**/*")
198
+ for file in files:
199
+ content = await registry.get_content(resource_name, file)
200
+ ctx.context.agent.conversation.add_context_message(
201
+ content, source=f"{resource_name}/{file}", **kwargs
202
+ )
203
+ msg = f"โœ… **Added {len(files)} files from** `{resource_name}`"
204
+
205
+ await ctx.print(msg)
206
+
207
+ except Exception as e:
208
+ msg = f"Error loading resource: {e}"
209
+ logger.exception(msg)
210
+ raise CommandError(msg) from e
@@ -0,0 +1,48 @@
1
+ """Agent session slash commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from slashed import CommandContext # noqa: TC002
6
+
7
+ from agentpool.agents.context import AgentContext # noqa: TC001
8
+ from agentpool_commands.base import AgentCommand
9
+
10
+
11
+ class ClearCommand(AgentCommand):
12
+ """Clear the current chat session history.
13
+
14
+ This removes all previous messages but keeps tools and settings.
15
+ """
16
+
17
+ name = "clear"
18
+ category = "session"
19
+
20
+ async def execute_command(self, ctx: CommandContext[AgentContext]) -> None:
21
+ """Clear chat history.
22
+
23
+ Args:
24
+ ctx: Command context
25
+ """
26
+ ctx.context.agent.conversation.clear()
27
+ await ctx.print("๐Ÿงน **Chat history cleared**")
28
+
29
+
30
+ class ResetCommand(AgentCommand):
31
+ """Reset the entire session state.
32
+
33
+ - Clears chat history
34
+ - Restores default tool settings
35
+ - Resets any session-specific configurations
36
+ """
37
+
38
+ name = "reset"
39
+ category = "session"
40
+
41
+ async def execute_command(self, ctx: CommandContext[AgentContext]) -> None:
42
+ """Reset session state.
43
+
44
+ Args:
45
+ ctx: Command context
46
+ """
47
+ await ctx.context.native_agent.reset()
48
+ await ctx.print("๐Ÿ”„ **Session state reset** - history cleared, tools and settings restored")