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,188 @@
1
+ """Content block schema definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+ from datetime import datetime
7
+ from typing import Annotated, Literal, Self
8
+
9
+ from pydantic import Field
10
+
11
+ from acp.schema.base import AnnotatedObject
12
+
13
+
14
+ Audience = Sequence[Literal["assistant", "user"]]
15
+
16
+
17
+ class BaseResourceContents(AnnotatedObject):
18
+ """Text-based resource contents."""
19
+
20
+ mime_type: str | None = None
21
+ """MIME type of the resource."""
22
+
23
+ uri: str
24
+ """URI of the resource."""
25
+
26
+
27
+ class TextResourceContents(BaseResourceContents):
28
+ """Text-based resource contents."""
29
+
30
+ text: str
31
+ """Text content of the resource."""
32
+
33
+
34
+ class BlobResourceContents(BaseResourceContents):
35
+ """Binary resource contents."""
36
+
37
+ blob: str
38
+ """Base64-encoded binary content of the resource."""
39
+
40
+
41
+ class Annotations(AnnotatedObject):
42
+ """Optional annotations for the client.
43
+
44
+ The client can use annotations to inform how objects are used or displayed.
45
+ """
46
+
47
+ audience: Audience | None = None
48
+ """Audience for the annotated resource."""
49
+
50
+ last_modified: str | None = None
51
+ """Last modified timestamp of the annotated resource."""
52
+
53
+ priority: float | None = None
54
+ """Priority of the annotated resource."""
55
+
56
+ @classmethod
57
+ def optionally_create(
58
+ cls,
59
+ audience: Audience | None = None,
60
+ last_modified: datetime | str | None = None,
61
+ priority: float | None = None,
62
+ ) -> Self | None:
63
+ """Create an annotations object if any value is given, otherwise return None."""
64
+ if audience is None and last_modified is None and priority is None:
65
+ return None
66
+ if isinstance(last_modified, datetime):
67
+ last_modified = last_modified.strftime("%Y-%m-%dT%H:%M:%SZ")
68
+ return cls(audience=audience, last_modified=last_modified, priority=priority)
69
+
70
+
71
+ class BaseContentBlock(AnnotatedObject):
72
+ """Base content block."""
73
+
74
+ annotations: Annotations | None = None
75
+ """Annotations for the content block."""
76
+
77
+
78
+ ResourceContents = TextResourceContents | BlobResourceContents
79
+
80
+
81
+ class EmbeddedResourceContentBlock[TResourceContents: ResourceContents = ResourceContents](
82
+ BaseContentBlock
83
+ ):
84
+ """Complete resource contents embedded directly in the message.
85
+
86
+ Preferred for including context as it avoids extra round-trips.
87
+
88
+ Requires the `embeddedContext` prompt capability when included in prompts.
89
+ """
90
+
91
+ type: Literal["resource"] = Field(default="resource", init=False)
92
+
93
+ resource: TResourceContents
94
+ """Resource content that can be embedded in a message."""
95
+
96
+
97
+ class TextContentBlock(BaseContentBlock):
98
+ """Text content.
99
+
100
+ May be plain text or formatted with Markdown.
101
+
102
+ All agents MUST support text content blocks in prompts.
103
+ Clients SHOULD render this text as Markdown.
104
+ """
105
+
106
+ type: Literal["text"] = Field(default="text", init=False)
107
+
108
+ text: str
109
+ """Text content of the block."""
110
+
111
+
112
+ class ImageContentBlock(BaseContentBlock):
113
+ """Images for visual context or analysis.
114
+
115
+ Requires the `image` prompt capability when included in prompts.
116
+ """
117
+
118
+ type: Literal["image"] = Field(default="image", init=False)
119
+
120
+ data: str
121
+ """Base64-encoded image data."""
122
+
123
+ mime_type: str
124
+ """MIME type of the image."""
125
+
126
+ uri: str | None = None
127
+ """URI of the image."""
128
+
129
+
130
+ class AudioContentBlock(BaseContentBlock):
131
+ """Audio data for transcription or analysis.
132
+
133
+ Requires the `audio` prompt capability when included in prompts.
134
+ """
135
+
136
+ type: Literal["audio"] = Field(default="audio", init=False)
137
+
138
+ data: str
139
+ """Base64-encoded audio data."""
140
+
141
+ mime_type: str
142
+ """MIME type of the audio."""
143
+
144
+
145
+ # Resource links:
146
+ # [@index.js](file:///Users/.../projects/reqwest/examples/wasm_github_fetch/index.js)
147
+ # [@wasm](file:///Users/.../projects/reqwest/src/wasm)
148
+ # [@error](file:///Users/.../projects/reqwest/src/async_impl/client.rs?symbol=Error#L2661:2661)
149
+ # [@error.rs (23:27)](file:///Users/.../projects/reqwest/src/error.rs#L23:27)
150
+
151
+
152
+ class ResourceContentBlock(BaseContentBlock):
153
+ """References to resources that the agent can access.
154
+
155
+ All agents MUST support resource links in prompts.
156
+ """
157
+
158
+ type: Literal["resource_link"] = Field(default="resource_link", init=False)
159
+
160
+ description: str | None = None
161
+ """Description of the resource."""
162
+
163
+ mime_type: str | None = None
164
+ """MIME type of the resource."""
165
+
166
+ name: str
167
+ """Name of the resource."""
168
+
169
+ size: int | None = Field(default=None, ge=0)
170
+ """Size of the resource in bytes."""
171
+
172
+ title: str | None = None
173
+ """Title of the resource."""
174
+
175
+ uri: str
176
+ """URI of the resource."""
177
+
178
+
179
+ ContentBlock = Annotated[
180
+ (
181
+ TextContentBlock
182
+ | ImageContentBlock
183
+ | AudioContentBlock
184
+ | ResourceContentBlock
185
+ | EmbeddedResourceContentBlock
186
+ ),
187
+ Field(discriminator="type"),
188
+ ]
acp/schema/mcp.py ADDED
@@ -0,0 +1,82 @@
1
+ """MCP schema definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence # noqa: TC003
6
+ from typing import Literal
7
+
8
+ from pydantic import Field, HttpUrl # noqa: TC002
9
+
10
+ from acp.schema.base import AnnotatedObject, Schema
11
+ from acp.schema.common import EnvVariable # noqa: TC001
12
+
13
+
14
+ class HttpHeader(AnnotatedObject):
15
+ """An HTTP header to set when making requests to the MCP server."""
16
+
17
+ name: str
18
+ """The name of the HTTP header."""
19
+
20
+ value: str
21
+ """The value to set for the HTTP header."""
22
+
23
+
24
+ class BaseMcpServer(Schema):
25
+ """MCP server base class."""
26
+
27
+ name: str
28
+ """Human-readable name identifying this MCP server."""
29
+
30
+
31
+ class HttpMcpServer(BaseMcpServer):
32
+ """HTTP transport configuration.
33
+
34
+ Only available when the Agent capabilities indicate `mcp_capabilities.http` is `true`.
35
+ """
36
+
37
+ headers: Sequence[HttpHeader]
38
+ """HTTP headers to set when making requests to the MCP server."""
39
+
40
+ type: Literal["http"] = Field(default="http", init=False)
41
+ """HTTP transport type."""
42
+
43
+ url: HttpUrl
44
+ """URL to the MCP server."""
45
+
46
+
47
+ class SseMcpServer(BaseMcpServer):
48
+ """SSE transport configuration.
49
+
50
+ Only available when the Agent capabilities indicate `mcp_capabilities.sse` is `true`.
51
+ """
52
+
53
+ headers: Sequence[HttpHeader]
54
+ """HTTP headers to set when making requests to the MCP server."""
55
+
56
+ type: Literal["sse"] = Field(default="sse", init=False)
57
+ """SSE transport type."""
58
+
59
+ url: HttpUrl
60
+ """URL to the MCP server."""
61
+
62
+
63
+ class StdioMcpServer(BaseMcpServer):
64
+ """Stdio transport configuration.
65
+
66
+ All Agents MUST support this transport.
67
+ """
68
+
69
+ args: Sequence[str]
70
+ """Command-line arguments to pass to the MCP server."""
71
+
72
+ # typ: Literal["stdio"] = Field(default="stdio", init=False)
73
+ # """Stdio transport type."""
74
+
75
+ command: str
76
+ """Path to the MCP server executable."""
77
+
78
+ env: Sequence[EnvVariable]
79
+ """Environment variables to set when launching the MCP server."""
80
+
81
+
82
+ McpServer = HttpMcpServer | SseMcpServer | StdioMcpServer
acp/schema/messages.py ADDED
@@ -0,0 +1,171 @@
1
+ """Message schema definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Literal
6
+
7
+ from pydantic import Field
8
+
9
+ from acp.schema.agent_requests import AgentRequest # noqa: TC001
10
+ from acp.schema.agent_responses import AgentResponse # noqa: TC001
11
+ from acp.schema.base import Schema
12
+ from acp.schema.client_requests import ClientRequest # noqa: TC001
13
+ from acp.schema.client_responses import ClientResponse # noqa: TC001
14
+ from acp.schema.common import Error # noqa: TC001
15
+ from acp.schema.notifications import ( # noqa: TC001
16
+ CancelNotification,
17
+ SessionNotification,
18
+ )
19
+
20
+
21
+ AgentMethod = Literal[
22
+ "authenticate",
23
+ "initialize",
24
+ "session/cancel",
25
+ "session/load",
26
+ "session/new",
27
+ "session/prompt",
28
+ "session/set_mode",
29
+ "session/set_model",
30
+ "session/list",
31
+ "session/fork",
32
+ "session/resume",
33
+ ]
34
+
35
+ ClientMethod = Literal[
36
+ "fs/read_text_file",
37
+ "fs/write_text_file",
38
+ "session/request_permission",
39
+ "session/update",
40
+ "terminal/create",
41
+ "terminal/kill",
42
+ "terminal/output",
43
+ "terminal/release",
44
+ "terminal/wait_for_exit",
45
+ ]
46
+
47
+
48
+ class JsonRPCMessage(Schema):
49
+ """JSON-RPC 2.0 message."""
50
+
51
+ jsonrpc: Literal["2.0"] = Field(default="2.0", init=False)
52
+ """JSON RPC Messsage."""
53
+
54
+
55
+ class ClientNotificationMessage(JsonRPCMessage):
56
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
57
+
58
+ Specified as [required by JSON-RPC 2.0 Specification][1].
59
+
60
+ [1]: https://www.jsonrpc.org/specification#compatibility
61
+ """
62
+
63
+ method: ClientMethod | str
64
+ """Method name."""
65
+
66
+ params: CancelNotification | Any | None = None
67
+ """Agent notification parameters."""
68
+
69
+
70
+ class ClientResponseMessage(JsonRPCMessage):
71
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
72
+
73
+ Specified as [required by JSON-RPC 2.0 Specification][1].
74
+
75
+ [1]: https://www.jsonrpc.org/specification#compatibility
76
+ """
77
+
78
+ id: int | str | None = None
79
+ """JSON RPC Request Id."""
80
+
81
+ result: ClientResponse | Any
82
+ """All possible responses that a client can send to an agent.
83
+
84
+ This enum is used internally for routing RPC responses. You typically won't need
85
+ to use this directly - the responses are handled automatically by the connection.
86
+ These are responses to the corresponding `AgentRequest` variants."""
87
+
88
+
89
+ class AgentResponseMessage(JsonRPCMessage):
90
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
91
+
92
+ Specified as [required by JSON-RPC 2.0 Specification][1].
93
+
94
+ [1]: https://www.jsonrpc.org/specification#compatibility
95
+ """
96
+
97
+ id: int | str | None = None
98
+ """JSON RPC Request Id."""
99
+
100
+ result: AgentResponse | Any
101
+ """All possible responses that an agent can send to a client.
102
+
103
+ This enum is used internally for routing RPC responses. You typically won't need
104
+ to use this directly - the responses are handled automatically by the connection.
105
+ These are responses to the corresponding `ClientRequest` variants."""
106
+
107
+
108
+ class ClientRequestMessage(JsonRPCMessage):
109
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
110
+
111
+ Specified as [required by JSON-RPC 2.0 Specification][1].
112
+
113
+ [1]: https://www.jsonrpc.org/specification#compatibility
114
+ """
115
+
116
+ id: int | str | None = None
117
+ """JSON RPC Request Id."""
118
+
119
+ method: ClientMethod | str
120
+ """Method name."""
121
+
122
+ params: ClientRequest | Any | None = None
123
+ """Client request parameters."""
124
+
125
+
126
+ class AgentRequestMessage(JsonRPCMessage):
127
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
128
+
129
+ Specified as [required by JSON-RPC 2.0 Specification][1].
130
+
131
+ [1]: https://www.jsonrpc.org/specification#compatibility
132
+ """
133
+
134
+ id: int | str | None = None
135
+ """JSON RPC Request Id."""
136
+
137
+ method: AgentMethod | str
138
+ """Method name."""
139
+
140
+ params: AgentRequest | Any | None = None
141
+ """Agent request parameters."""
142
+
143
+
144
+ class AgentNotificationMessage(JsonRPCMessage):
145
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
146
+
147
+ Specified as [required by JSON-RPC 2.0 Specification][1].
148
+
149
+ [1]: https://www.jsonrpc.org/specification#compatibility
150
+ """
151
+
152
+ method: AgentMethod | str
153
+ """Method name."""
154
+
155
+ params: SessionNotification | Any | None = None
156
+ """Agent notification parameters."""
157
+
158
+
159
+ class ErrorMessage(JsonRPCMessage):
160
+ """A message (request, response, or notification) with `"jsonrpc": "2.0"`.
161
+
162
+ Specified as
163
+ [required by JSON-RPC 2.0 Specification][1].
164
+
165
+ [1]: https://www.jsonrpc.org/specification#compatibility
166
+ """
167
+
168
+ id: int | str | None = None
169
+ """JSON RPC Request Id."""
170
+
171
+ error: Error
@@ -0,0 +1,82 @@
1
+ """Notification schema definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, TypeVar
6
+
7
+ from acp.schema.base import AnnotatedObject
8
+ from acp.schema.session_updates import SessionUpdate
9
+
10
+
11
+ TSessionUpdate_co = TypeVar(
12
+ "TSessionUpdate_co",
13
+ covariant=True,
14
+ bound=SessionUpdate,
15
+ )
16
+
17
+
18
+ class SessionNotification[TSessionUpdate_co: SessionUpdate = SessionUpdate](AnnotatedObject):
19
+ """Notification containing a session update from the agent.
20
+
21
+ Used to stream real-time progress and results during prompt processing.
22
+
23
+ See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)
24
+ """
25
+
26
+ session_id: str
27
+ """The ID of the session this update pertains to."""
28
+
29
+ update: TSessionUpdate_co
30
+ """The session update data."""
31
+
32
+
33
+ class CancelNotification(AnnotatedObject):
34
+ """Notification to cancel ongoing operations for a session.
35
+
36
+ This is a notification sent by the client to cancel an ongoing prompt turn.
37
+
38
+ Upon receiving this notification, the Agent SHOULD:
39
+ - Stop all language model requests as soon as possible
40
+ - Abort all tool call invocations in progress
41
+ - Send any pending `session/update` notifications
42
+ - Respond to the original `session/prompt` request with `StopReason::Cancelled`
43
+
44
+ See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)
45
+ """
46
+
47
+ session_id: str
48
+ """The ID of the session to cancel operations for."""
49
+
50
+
51
+ class ExtNotification(AnnotatedObject):
52
+ """Extension notification from client or agent.
53
+
54
+ Allows sending arbitrary notifications that are not part of the ACP spec.
55
+ Extension notifications provide a way to send one-way messages for custom
56
+ functionality while maintaining protocol compatibility.
57
+
58
+ The method name should be prefixed with an underscore (e.g., `_myExtension/notify`).
59
+
60
+ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
61
+ """
62
+
63
+ method: str
64
+ """The extension method name (should be prefixed with underscore)."""
65
+
66
+ params: dict[str, Any] | None = None
67
+ """Optional parameters for the notification."""
68
+
69
+
70
+ AgentNotification = SessionNotification | ExtNotification
71
+ """All possible notifications that an agent can send to a client.
72
+
73
+ This is used internally for routing RPC notifications.
74
+ Notifications do not expect a response.
75
+ """
76
+
77
+ ClientNotification = CancelNotification | ExtNotification
78
+ """All possible notifications that a client can send to an agent.
79
+
80
+ This is used internally for routing RPC notifications.
81
+ Notifications do not expect a response.
82
+ """
@@ -0,0 +1,3 @@
1
+ Stdio MCP server type discriminator
2
+ ReadTextFileRequest.line should be ge 1, not ge 0?
3
+ AudioContentBlock should have "uri"?
@@ -0,0 +1,160 @@
1
+ """Session state schema definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+ from typing import Annotated, Literal
7
+
8
+ from pydantic import Field
9
+
10
+ from acp.schema.base import AnnotatedObject
11
+
12
+
13
+ # Type aliases for config option identifiers
14
+ SessionConfigId = str
15
+ """Unique identifier for a configuration option."""
16
+
17
+ SessionConfigValueId = str
18
+ """Unique identifier for a possible value within a configuration option."""
19
+
20
+ SessionConfigGroupId = str
21
+ """Unique identifier for a group of values within a configuration option."""
22
+
23
+
24
+ class ModelInfo(AnnotatedObject):
25
+ """**UNSTABLE**: This capability is not part of the spec yet.
26
+
27
+ Information about a selectable model.
28
+ """
29
+
30
+ description: str | None = None
31
+ """Optional description of the model."""
32
+
33
+ model_id: str
34
+ """Unique identifier for the model."""
35
+
36
+ name: str
37
+ """Human-readable name of the model."""
38
+
39
+
40
+ class SessionModelState(AnnotatedObject):
41
+ """**UNSTABLE**: This capability is not part of the spec yet.
42
+
43
+ The set of models and the one currently active.
44
+ """
45
+
46
+ available_models: Sequence[ModelInfo]
47
+ """The set of models that the Agent can use."""
48
+
49
+ current_model_id: str
50
+ """The current model the Agent is using."""
51
+
52
+
53
+ class SessionMode(AnnotatedObject):
54
+ """A mode the agent can operate in.
55
+
56
+ See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
57
+ """
58
+
59
+ description: str | None = None
60
+ """Optional description of the mode."""
61
+
62
+ id: str
63
+ """Unique identifier for the mode."""
64
+
65
+ name: str
66
+ """Human-readable name of the mode."""
67
+
68
+
69
+ class SessionModeState(AnnotatedObject):
70
+ """The set of modes and the one currently active."""
71
+
72
+ available_modes: Sequence[SessionMode]
73
+ """The set of modes that the Agent can operate in."""
74
+
75
+ current_mode_id: str
76
+ """The current mode the Agent is in."""
77
+
78
+
79
+ class SessionInfo(AnnotatedObject):
80
+ """**UNSTABLE**: This capability is not part of the spec yet.
81
+
82
+ Information about a session returned by session/list.
83
+ """
84
+
85
+ cwd: str
86
+ """The working directory for this session. Must be an absolute path."""
87
+
88
+ session_id: str
89
+ """Unique identifier for the session."""
90
+
91
+ title: str | None = None
92
+ """Human-readable title for the session."""
93
+
94
+ updated_at: str | None = None
95
+ """ISO 8601 timestamp of last activity."""
96
+
97
+
98
+ class SessionConfigSelectOption(AnnotatedObject):
99
+ """A possible value for a configuration selector."""
100
+
101
+ id: SessionConfigValueId
102
+ """Unique identifier for this value."""
103
+
104
+ label: str
105
+ """Human-readable label for this value."""
106
+
107
+ description: str | None = None
108
+ """Optional description explaining this value."""
109
+
110
+
111
+ class SessionConfigSelectGroup(AnnotatedObject):
112
+ """A group of possible values for a configuration selector."""
113
+
114
+ id: SessionConfigGroupId
115
+ """Unique identifier for this group."""
116
+
117
+ label: str
118
+ """Human-readable label for this group."""
119
+
120
+ options: Sequence[SessionConfigSelectOption]
121
+ """The options within this group."""
122
+
123
+
124
+ SessionConfigSelectOptions = Sequence[SessionConfigSelectOption | SessionConfigSelectGroup]
125
+ """The possible values for a configuration selector, optionally organized into groups."""
126
+
127
+
128
+ class SessionConfigSelect(AnnotatedObject):
129
+ """A configuration option that allows selecting a single value from a list.
130
+
131
+ Similar to a dropdown/select UI element.
132
+ """
133
+
134
+ type: Literal["select"] = Field(default="select", init=False)
135
+ """Discriminator for the config option type."""
136
+
137
+ id: SessionConfigId
138
+ """Unique identifier for this configuration option."""
139
+
140
+ label: str
141
+ """Human-readable label for this option."""
142
+
143
+ description: str | None = None
144
+ """Optional description explaining this option."""
145
+
146
+ options: SessionConfigSelectOptions
147
+ """The possible values for this option."""
148
+
149
+ value: SessionConfigValueId
150
+ """The currently selected value ID."""
151
+
152
+
153
+ SessionConfigOption = Annotated[
154
+ SessionConfigSelect,
155
+ Field(discriminator="type"),
156
+ ]
157
+ """A session configuration option.
158
+
159
+ Currently only supports select-type options, but designed for extensibility.
160
+ """