agentpool 2.1.9__py3-none-any.whl → 2.5.0__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.
Files changed (311) hide show
  1. acp/__init__.py +13 -4
  2. acp/acp_requests.py +20 -77
  3. acp/agent/connection.py +8 -0
  4. acp/agent/implementations/debug_server/debug_server.py +6 -2
  5. acp/agent/protocol.py +6 -0
  6. acp/bridge/README.md +15 -2
  7. acp/bridge/__init__.py +3 -2
  8. acp/bridge/__main__.py +60 -19
  9. acp/bridge/ws_server.py +173 -0
  10. acp/bridge/ws_server_cli.py +89 -0
  11. acp/client/connection.py +38 -29
  12. acp/client/implementations/default_client.py +3 -2
  13. acp/client/implementations/headless_client.py +2 -2
  14. acp/connection.py +2 -2
  15. acp/notifications.py +20 -50
  16. acp/schema/__init__.py +2 -0
  17. acp/schema/agent_responses.py +21 -0
  18. acp/schema/client_requests.py +3 -3
  19. acp/schema/session_state.py +63 -29
  20. acp/stdio.py +39 -9
  21. acp/task/supervisor.py +2 -2
  22. acp/transports.py +362 -2
  23. acp/utils.py +17 -4
  24. agentpool/__init__.py +6 -1
  25. agentpool/agents/__init__.py +2 -0
  26. agentpool/agents/acp_agent/acp_agent.py +407 -277
  27. agentpool/agents/acp_agent/acp_converters.py +196 -38
  28. agentpool/agents/acp_agent/client_handler.py +191 -26
  29. agentpool/agents/acp_agent/session_state.py +17 -6
  30. agentpool/agents/agent.py +607 -572
  31. agentpool/agents/agui_agent/__init__.py +0 -2
  32. agentpool/agents/agui_agent/agui_agent.py +176 -110
  33. agentpool/agents/agui_agent/agui_converters.py +0 -131
  34. agentpool/agents/agui_agent/helpers.py +3 -4
  35. agentpool/agents/base_agent.py +632 -17
  36. agentpool/agents/claude_code_agent/FORKING.md +191 -0
  37. agentpool/agents/claude_code_agent/__init__.py +13 -1
  38. agentpool/agents/claude_code_agent/claude_code_agent.py +1058 -291
  39. agentpool/agents/claude_code_agent/converters.py +74 -143
  40. agentpool/agents/claude_code_agent/history.py +474 -0
  41. agentpool/agents/claude_code_agent/models.py +77 -0
  42. agentpool/agents/claude_code_agent/static_info.py +100 -0
  43. agentpool/agents/claude_code_agent/usage.py +242 -0
  44. agentpool/agents/context.py +40 -0
  45. agentpool/agents/events/__init__.py +24 -0
  46. agentpool/agents/events/builtin_handlers.py +67 -1
  47. agentpool/agents/events/event_emitter.py +32 -2
  48. agentpool/agents/events/events.py +104 -3
  49. agentpool/agents/events/infer_info.py +145 -0
  50. agentpool/agents/events/processors.py +254 -0
  51. agentpool/agents/interactions.py +41 -6
  52. agentpool/agents/modes.py +67 -0
  53. agentpool/agents/slashed_agent.py +5 -4
  54. agentpool/agents/tool_call_accumulator.py +213 -0
  55. agentpool/agents/tool_wrapping.py +18 -6
  56. agentpool/common_types.py +56 -21
  57. agentpool/config_resources/__init__.py +38 -1
  58. agentpool/config_resources/acp_assistant.yml +2 -2
  59. agentpool/config_resources/agents.yml +3 -0
  60. agentpool/config_resources/agents_template.yml +1 -0
  61. agentpool/config_resources/claude_code_agent.yml +10 -6
  62. agentpool/config_resources/external_acp_agents.yml +2 -1
  63. agentpool/delegation/base_team.py +4 -30
  64. agentpool/delegation/pool.py +136 -289
  65. agentpool/delegation/team.py +58 -57
  66. agentpool/delegation/teamrun.py +51 -55
  67. agentpool/diagnostics/__init__.py +53 -0
  68. agentpool/diagnostics/lsp_manager.py +1593 -0
  69. agentpool/diagnostics/lsp_proxy.py +41 -0
  70. agentpool/diagnostics/lsp_proxy_script.py +229 -0
  71. agentpool/diagnostics/models.py +398 -0
  72. agentpool/functional/run.py +10 -4
  73. agentpool/mcp_server/__init__.py +0 -2
  74. agentpool/mcp_server/client.py +76 -32
  75. agentpool/mcp_server/conversions.py +54 -13
  76. agentpool/mcp_server/manager.py +34 -54
  77. agentpool/mcp_server/registries/official_registry_client.py +35 -1
  78. agentpool/mcp_server/tool_bridge.py +186 -139
  79. agentpool/messaging/__init__.py +0 -2
  80. agentpool/messaging/compaction.py +72 -197
  81. agentpool/messaging/connection_manager.py +11 -10
  82. agentpool/messaging/event_manager.py +5 -5
  83. agentpool/messaging/message_container.py +6 -30
  84. agentpool/messaging/message_history.py +99 -8
  85. agentpool/messaging/messagenode.py +52 -14
  86. agentpool/messaging/messages.py +54 -35
  87. agentpool/messaging/processing.py +12 -22
  88. agentpool/models/__init__.py +1 -1
  89. agentpool/models/acp_agents/base.py +6 -24
  90. agentpool/models/acp_agents/mcp_capable.py +126 -157
  91. agentpool/models/acp_agents/non_mcp.py +129 -95
  92. agentpool/models/agents.py +98 -76
  93. agentpool/models/agui_agents.py +1 -1
  94. agentpool/models/claude_code_agents.py +144 -19
  95. agentpool/models/file_parsing.py +0 -1
  96. agentpool/models/manifest.py +113 -50
  97. agentpool/prompts/conversion_manager.py +1 -1
  98. agentpool/prompts/prompts.py +5 -2
  99. agentpool/repomap.py +1 -1
  100. agentpool/resource_providers/__init__.py +11 -1
  101. agentpool/resource_providers/aggregating.py +56 -5
  102. agentpool/resource_providers/base.py +70 -4
  103. agentpool/resource_providers/codemode/code_executor.py +72 -5
  104. agentpool/resource_providers/codemode/helpers.py +2 -2
  105. agentpool/resource_providers/codemode/provider.py +64 -12
  106. agentpool/resource_providers/codemode/remote_mcp_execution.py +2 -2
  107. agentpool/resource_providers/codemode/remote_provider.py +9 -12
  108. agentpool/resource_providers/filtering.py +3 -1
  109. agentpool/resource_providers/mcp_provider.py +89 -12
  110. agentpool/resource_providers/plan_provider.py +228 -46
  111. agentpool/resource_providers/pool.py +7 -3
  112. agentpool/resource_providers/resource_info.py +111 -0
  113. agentpool/resource_providers/static.py +4 -2
  114. agentpool/sessions/__init__.py +4 -1
  115. agentpool/sessions/manager.py +33 -5
  116. agentpool/sessions/models.py +59 -6
  117. agentpool/sessions/protocol.py +28 -0
  118. agentpool/sessions/session.py +11 -55
  119. agentpool/skills/registry.py +13 -8
  120. agentpool/storage/manager.py +572 -49
  121. agentpool/talk/registry.py +4 -4
  122. agentpool/talk/talk.py +9 -10
  123. agentpool/testing.py +538 -20
  124. agentpool/tool_impls/__init__.py +6 -0
  125. agentpool/tool_impls/agent_cli/__init__.py +42 -0
  126. agentpool/tool_impls/agent_cli/tool.py +95 -0
  127. agentpool/tool_impls/bash/__init__.py +64 -0
  128. agentpool/tool_impls/bash/helpers.py +35 -0
  129. agentpool/tool_impls/bash/tool.py +171 -0
  130. agentpool/tool_impls/delete_path/__init__.py +70 -0
  131. agentpool/tool_impls/delete_path/tool.py +142 -0
  132. agentpool/tool_impls/download_file/__init__.py +80 -0
  133. agentpool/tool_impls/download_file/tool.py +183 -0
  134. agentpool/tool_impls/execute_code/__init__.py +55 -0
  135. agentpool/tool_impls/execute_code/tool.py +163 -0
  136. agentpool/tool_impls/grep/__init__.py +80 -0
  137. agentpool/tool_impls/grep/tool.py +200 -0
  138. agentpool/tool_impls/list_directory/__init__.py +73 -0
  139. agentpool/tool_impls/list_directory/tool.py +197 -0
  140. agentpool/tool_impls/question/__init__.py +42 -0
  141. agentpool/tool_impls/question/tool.py +127 -0
  142. agentpool/tool_impls/read/__init__.py +104 -0
  143. agentpool/tool_impls/read/tool.py +305 -0
  144. agentpool/tools/__init__.py +2 -1
  145. agentpool/tools/base.py +114 -34
  146. agentpool/tools/manager.py +57 -1
  147. agentpool/ui/base.py +2 -2
  148. agentpool/ui/mock_provider.py +2 -2
  149. agentpool/ui/stdlib_provider.py +2 -2
  150. agentpool/utils/file_watcher.py +269 -0
  151. agentpool/utils/identifiers.py +121 -0
  152. agentpool/utils/pydantic_ai_helpers.py +46 -0
  153. agentpool/utils/streams.py +616 -2
  154. agentpool/utils/subprocess_utils.py +155 -0
  155. agentpool/utils/token_breakdown.py +461 -0
  156. agentpool/vfs_registry.py +7 -2
  157. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/METADATA +41 -27
  158. agentpool-2.5.0.dist-info/RECORD +579 -0
  159. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
  160. agentpool_cli/__main__.py +24 -0
  161. agentpool_cli/create.py +1 -1
  162. agentpool_cli/serve_acp.py +100 -21
  163. agentpool_cli/serve_agui.py +87 -0
  164. agentpool_cli/serve_opencode.py +119 -0
  165. agentpool_cli/ui.py +557 -0
  166. agentpool_commands/__init__.py +42 -5
  167. agentpool_commands/agents.py +75 -2
  168. agentpool_commands/history.py +62 -0
  169. agentpool_commands/mcp.py +176 -0
  170. agentpool_commands/models.py +56 -3
  171. agentpool_commands/pool.py +260 -0
  172. agentpool_commands/session.py +1 -1
  173. agentpool_commands/text_sharing/__init__.py +119 -0
  174. agentpool_commands/text_sharing/base.py +123 -0
  175. agentpool_commands/text_sharing/github_gist.py +80 -0
  176. agentpool_commands/text_sharing/opencode.py +462 -0
  177. agentpool_commands/text_sharing/paste_rs.py +59 -0
  178. agentpool_commands/text_sharing/pastebin.py +116 -0
  179. agentpool_commands/text_sharing/shittycodingagent.py +112 -0
  180. agentpool_commands/tools.py +57 -0
  181. agentpool_commands/utils.py +80 -30
  182. agentpool_config/__init__.py +30 -2
  183. agentpool_config/agentpool_tools.py +498 -0
  184. agentpool_config/builtin_tools.py +77 -22
  185. agentpool_config/commands.py +24 -1
  186. agentpool_config/compaction.py +258 -0
  187. agentpool_config/converters.py +1 -1
  188. agentpool_config/event_handlers.py +42 -0
  189. agentpool_config/events.py +1 -1
  190. agentpool_config/forward_targets.py +1 -4
  191. agentpool_config/jinja.py +3 -3
  192. agentpool_config/mcp_server.py +132 -6
  193. agentpool_config/nodes.py +1 -1
  194. agentpool_config/observability.py +44 -0
  195. agentpool_config/session.py +0 -3
  196. agentpool_config/storage.py +82 -38
  197. agentpool_config/task.py +3 -3
  198. agentpool_config/tools.py +11 -22
  199. agentpool_config/toolsets.py +109 -233
  200. agentpool_server/a2a_server/agent_worker.py +307 -0
  201. agentpool_server/a2a_server/server.py +23 -18
  202. agentpool_server/acp_server/acp_agent.py +234 -181
  203. agentpool_server/acp_server/commands/acp_commands.py +151 -156
  204. agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +18 -17
  205. agentpool_server/acp_server/event_converter.py +651 -0
  206. agentpool_server/acp_server/input_provider.py +53 -10
  207. agentpool_server/acp_server/server.py +24 -90
  208. agentpool_server/acp_server/session.py +173 -331
  209. agentpool_server/acp_server/session_manager.py +8 -34
  210. agentpool_server/agui_server/server.py +3 -1
  211. agentpool_server/mcp_server/server.py +5 -2
  212. agentpool_server/opencode_server/.rules +95 -0
  213. agentpool_server/opencode_server/ENDPOINTS.md +401 -0
  214. agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
  215. agentpool_server/opencode_server/__init__.py +19 -0
  216. agentpool_server/opencode_server/command_validation.py +172 -0
  217. agentpool_server/opencode_server/converters.py +975 -0
  218. agentpool_server/opencode_server/dependencies.py +24 -0
  219. agentpool_server/opencode_server/input_provider.py +421 -0
  220. agentpool_server/opencode_server/models/__init__.py +250 -0
  221. agentpool_server/opencode_server/models/agent.py +53 -0
  222. agentpool_server/opencode_server/models/app.py +72 -0
  223. agentpool_server/opencode_server/models/base.py +26 -0
  224. agentpool_server/opencode_server/models/common.py +23 -0
  225. agentpool_server/opencode_server/models/config.py +37 -0
  226. agentpool_server/opencode_server/models/events.py +821 -0
  227. agentpool_server/opencode_server/models/file.py +88 -0
  228. agentpool_server/opencode_server/models/mcp.py +44 -0
  229. agentpool_server/opencode_server/models/message.py +179 -0
  230. agentpool_server/opencode_server/models/parts.py +323 -0
  231. agentpool_server/opencode_server/models/provider.py +81 -0
  232. agentpool_server/opencode_server/models/pty.py +43 -0
  233. agentpool_server/opencode_server/models/question.py +56 -0
  234. agentpool_server/opencode_server/models/session.py +111 -0
  235. agentpool_server/opencode_server/routes/__init__.py +29 -0
  236. agentpool_server/opencode_server/routes/agent_routes.py +473 -0
  237. agentpool_server/opencode_server/routes/app_routes.py +202 -0
  238. agentpool_server/opencode_server/routes/config_routes.py +302 -0
  239. agentpool_server/opencode_server/routes/file_routes.py +571 -0
  240. agentpool_server/opencode_server/routes/global_routes.py +94 -0
  241. agentpool_server/opencode_server/routes/lsp_routes.py +319 -0
  242. agentpool_server/opencode_server/routes/message_routes.py +761 -0
  243. agentpool_server/opencode_server/routes/permission_routes.py +63 -0
  244. agentpool_server/opencode_server/routes/pty_routes.py +300 -0
  245. agentpool_server/opencode_server/routes/question_routes.py +128 -0
  246. agentpool_server/opencode_server/routes/session_routes.py +1276 -0
  247. agentpool_server/opencode_server/routes/tui_routes.py +139 -0
  248. agentpool_server/opencode_server/server.py +475 -0
  249. agentpool_server/opencode_server/state.py +151 -0
  250. agentpool_server/opencode_server/time_utils.py +8 -0
  251. agentpool_storage/__init__.py +12 -0
  252. agentpool_storage/base.py +184 -2
  253. agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
  254. agentpool_storage/claude_provider/__init__.py +42 -0
  255. agentpool_storage/claude_provider/provider.py +1089 -0
  256. agentpool_storage/file_provider.py +278 -15
  257. agentpool_storage/memory_provider.py +193 -12
  258. agentpool_storage/models.py +3 -0
  259. agentpool_storage/opencode_provider/ARCHITECTURE.md +386 -0
  260. agentpool_storage/opencode_provider/__init__.py +16 -0
  261. agentpool_storage/opencode_provider/helpers.py +414 -0
  262. agentpool_storage/opencode_provider/provider.py +895 -0
  263. agentpool_storage/project_store.py +325 -0
  264. agentpool_storage/session_store.py +26 -6
  265. agentpool_storage/sql_provider/__init__.py +4 -2
  266. agentpool_storage/sql_provider/models.py +48 -0
  267. agentpool_storage/sql_provider/sql_provider.py +269 -3
  268. agentpool_storage/sql_provider/utils.py +12 -13
  269. agentpool_storage/zed_provider/__init__.py +16 -0
  270. agentpool_storage/zed_provider/helpers.py +281 -0
  271. agentpool_storage/zed_provider/models.py +130 -0
  272. agentpool_storage/zed_provider/provider.py +442 -0
  273. agentpool_storage/zed_provider.py +803 -0
  274. agentpool_toolsets/__init__.py +0 -2
  275. agentpool_toolsets/builtin/__init__.py +2 -12
  276. agentpool_toolsets/builtin/code.py +96 -57
  277. agentpool_toolsets/builtin/debug.py +118 -48
  278. agentpool_toolsets/builtin/execution_environment.py +115 -230
  279. agentpool_toolsets/builtin/file_edit/file_edit.py +115 -7
  280. agentpool_toolsets/builtin/skills.py +9 -4
  281. agentpool_toolsets/builtin/subagent_tools.py +64 -51
  282. agentpool_toolsets/builtin/workers.py +4 -2
  283. agentpool_toolsets/composio_toolset.py +2 -2
  284. agentpool_toolsets/entry_points.py +3 -1
  285. agentpool_toolsets/fsspec_toolset/__init__.py +13 -1
  286. agentpool_toolsets/fsspec_toolset/diagnostics.py +860 -73
  287. agentpool_toolsets/fsspec_toolset/grep.py +99 -7
  288. agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
  289. agentpool_toolsets/fsspec_toolset/image_utils.py +161 -0
  290. agentpool_toolsets/fsspec_toolset/toolset.py +500 -95
  291. agentpool_toolsets/mcp_discovery/__init__.py +5 -0
  292. agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
  293. agentpool_toolsets/mcp_discovery/toolset.py +511 -0
  294. agentpool_toolsets/mcp_run_toolset.py +87 -12
  295. agentpool_toolsets/notifications.py +33 -33
  296. agentpool_toolsets/openapi.py +3 -1
  297. agentpool_toolsets/search_toolset.py +3 -1
  298. agentpool-2.1.9.dist-info/RECORD +0 -474
  299. agentpool_config/resources.py +0 -33
  300. agentpool_server/acp_server/acp_tools.py +0 -43
  301. agentpool_server/acp_server/commands/spawn.py +0 -210
  302. agentpool_storage/text_log_provider.py +0 -275
  303. agentpool_toolsets/builtin/agent_management.py +0 -239
  304. agentpool_toolsets/builtin/chain.py +0 -288
  305. agentpool_toolsets/builtin/history.py +0 -36
  306. agentpool_toolsets/builtin/integration.py +0 -85
  307. agentpool_toolsets/builtin/tool_management.py +0 -90
  308. agentpool_toolsets/builtin/user_interaction.py +0 -52
  309. agentpool_toolsets/semantic_memory_toolset.py +0 -536
  310. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
  311. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -5,16 +5,18 @@ from __future__ import annotations
5
5
  import json
6
6
  from typing import TYPE_CHECKING, Any, Literal, assert_never, cast
7
7
 
8
+ import anyenv
8
9
  from pydantic import BaseModel, ConfigDict, Field
9
- from tokonomics.model_discovery import ProviderType # noqa: TC002
10
10
 
11
11
  from agentpool.models.acp_agents.base import BaseACPAgentConfig
12
+ from agentpool_config import AnyToolConfig, BaseToolConfig # noqa: TC001
12
13
  from agentpool_config.output_types import StructuredResponseConfig # noqa: TC001
13
- from agentpool_config.toolsets import ToolsetConfig # noqa: TC001
14
+ from agentpool_config.toolsets import BaseToolsetConfig
14
15
 
15
16
 
16
17
  if TYPE_CHECKING:
17
18
  from agentpool.prompts.manager import PromptManager
19
+ from agentpool.resource_providers import ResourceProvider
18
20
 
19
21
 
20
22
  ClaudeCodeModelName = Literal["default", "sonnet", "opus", "haiku", "sonnet[1m]", "opusplan"]
@@ -23,6 +25,7 @@ ClaudeCodeToolName = Literal[
23
25
  "Bash",
24
26
  "BashOutput",
25
27
  "Edit",
28
+ "EnterPlanMode",
26
29
  "ExitPlanMode",
27
30
  "Glob",
28
31
  "Grep",
@@ -47,23 +50,51 @@ class MCPCapableACPAgentConfig(BaseACPAgentConfig):
47
50
  that can be exposed via an internal MCP bridge.
48
51
  """
49
52
 
50
- toolsets: list[ToolsetConfig] = Field(
53
+ tools: list[AnyToolConfig | str] = Field(
51
54
  default_factory=list,
52
- title="Toolsets",
55
+ title="Tools",
53
56
  examples=[
54
57
  [
55
58
  {"type": "subagent"},
56
59
  {"type": "agent_management"},
60
+ "webbrowser:open",
57
61
  ],
58
62
  ],
59
63
  )
60
- """Toolsets to expose to this ACP agent via MCP bridge.
64
+ """Tools and toolsets to expose to this ACP agent via MCP bridge.
61
65
 
62
- These toolsets will be started as an in-process MCP server and made
63
- available to the external ACP agent. This allows ACP agents to use
64
- internal agentpool toolsets like subagent delegation.
66
+ Supports both single tools and toolsets. These will be started as an
67
+ in-process MCP server and made available to the external ACP agent.
65
68
  """
66
69
 
70
+ def get_tool_providers(self) -> list[ResourceProvider]:
71
+ """Get all resource providers for this agent's tools.
72
+
73
+ Returns:
74
+ List of ResourceProvider instances
75
+ """
76
+ from agentpool.resource_providers import StaticResourceProvider
77
+ from agentpool.tools.base import Tool
78
+
79
+ providers: list[ResourceProvider] = []
80
+ static_tools: list[Tool] = []
81
+
82
+ for tool_config in self.tools:
83
+ try:
84
+ if isinstance(tool_config, BaseToolsetConfig):
85
+ providers.append(tool_config.get_provider())
86
+ elif isinstance(tool_config, str):
87
+ static_tools.append(Tool.from_callable(tool_config))
88
+ elif isinstance(tool_config, BaseToolConfig):
89
+ static_tools.append(tool_config.get_tool())
90
+ except Exception: # noqa: BLE001
91
+ continue
92
+
93
+ if static_tools:
94
+ providers.append(StaticResourceProvider(name="tools", tools=static_tools))
95
+
96
+ return providers
97
+
67
98
  def build_mcp_config_json(self) -> str | None:
68
99
  """Convert inherited mcp_servers to standard MCP config JSON format.
69
100
 
@@ -197,12 +228,12 @@ class ClaudeACPAgentConfig(MCPCapableACPAgentConfig):
197
228
  )
198
229
  """Additional directories to allow tool access to."""
199
230
 
200
- tools: list[ClaudeCodeToolName | str] | None = Field(
231
+ builtin_tools: list[ClaudeCodeToolName | str] | None = Field(
201
232
  default=None,
202
- title="Tools",
233
+ title="Built-in Tools",
203
234
  examples=[["Bash", "Edit", "Read"], []],
204
235
  )
205
- """Available tools from built-in set. Empty list disables all tools."""
236
+ """Available tools from Claude's built-in set. Empty list disables all tools."""
206
237
 
207
238
  fallback_model: ClaudeCodeModelName | None = Field(
208
239
  default=None,
@@ -211,9 +242,9 @@ class ClaudeACPAgentConfig(MCPCapableACPAgentConfig):
211
242
  )
212
243
  """Fallback model when default is overloaded."""
213
244
 
214
- dangerously_skip_permissions: bool = Field(
245
+ auto_approve: bool = Field(
215
246
  default=False,
216
- title="Dangerously Skip Permissions",
247
+ title="Auto Approve",
217
248
  )
218
249
  """Bypass all permission checks. Only for sandboxed environments."""
219
250
 
@@ -260,14 +291,14 @@ class ClaudeACPAgentConfig(MCPCapableACPAgentConfig):
260
291
  args.append("--strict-mcp-config")
261
292
  if self.add_dir:
262
293
  args.extend(["--add-dir", *self.add_dir])
263
- if self.tools is not None:
264
- if self.tools:
265
- args.extend(["--tools", ",".join(self.tools)])
294
+ if self.builtin_tools is not None:
295
+ if self.builtin_tools:
296
+ args.extend(["--tools", ",".join(self.builtin_tools)])
266
297
  else:
267
298
  args.extend(["--tools", ""])
268
299
  if self.fallback_model:
269
300
  args.extend(["--fallback-model", self.fallback_model])
270
- if self.dangerously_skip_permissions:
301
+ if self.auto_approve:
271
302
  args.append("--dangerously-skip-permissions")
272
303
  if self.output_type:
273
304
  args.extend(["--output-format", "json"])
@@ -286,128 +317,7 @@ class ClaudeACPAgentConfig(MCPCapableACPAgentConfig):
286
317
  return None
287
318
  # StructuredResponseConfig - resolve schema via get_schema()
288
319
  model_cls = cast(type[BaseModel], self.output_type.response_schema.get_schema())
289
- return json.dumps(model_cls.model_json_schema())
290
-
291
- @property
292
- def model_providers(self) -> list[ProviderType]:
293
- """Claude Code uses Anthropic models."""
294
- return ["anthropic"]
295
-
296
-
297
- class GeminiACPAgentConfig(MCPCapableACPAgentConfig):
298
- """Configuration for Gemini CLI via ACP.
299
-
300
- Provides typed settings for the gemini CLI with ACP support.
301
-
302
- Example:
303
- ```yaml
304
- agents:
305
- coder:
306
- type: acp
307
- provider: gemini
308
- cwd: /path/to/project
309
- model: gemini-2.5-pro
310
- approval_mode: auto_edit
311
- allowed_tools:
312
- - read_file
313
- - write_file
314
- - terminal
315
- ```
316
- """
317
-
318
- model_config = ConfigDict(json_schema_extra={"title": "Gemini ACP Agent Configuration"})
319
-
320
- provider: Literal["gemini"] = Field("gemini", init=False)
321
- """Discriminator for Gemini ACP agent."""
322
-
323
- model: str | None = Field(
324
- default=None,
325
- title="Model",
326
- examples=["gemini-2.5-pro", "gemini-2.5-flash"],
327
- )
328
- """Model override."""
329
-
330
- approval_mode: Literal["default", "auto_edit", "yolo"] | None = Field(
331
- default=None,
332
- title="Approval Mode",
333
- examples=["auto_edit", "yolo"],
334
- )
335
- """Approval mode for tool execution."""
336
-
337
- sandbox: bool = Field(default=False, title="Sandbox")
338
- """Run in sandbox mode."""
339
-
340
- yolo: bool = Field(default=False, title="YOLO")
341
- """Automatically accept all actions."""
342
-
343
- allowed_tools: list[str] | None = Field(
344
- default=None,
345
- title="Allowed Tools",
346
- examples=[["read_file", "write_file", "terminal"], ["search"]],
347
- )
348
- """Tools allowed to run without confirmation."""
349
-
350
- allowed_mcp_server_names: list[str] | None = Field(
351
- default=None,
352
- title="Allowed MCP Server Names",
353
- examples=[["filesystem", "github"], ["slack"]],
354
- )
355
- """Allowed MCP server names."""
356
-
357
- extensions: list[str] | None = Field(
358
- default=None,
359
- title="Extensions",
360
- examples=[["python", "typescript"], ["rust", "go"]],
361
- )
362
- """List of extensions to use. If not provided, all are used."""
363
-
364
- include_directories: list[str] | None = Field(
365
- default=None,
366
- title="Include Directories",
367
- examples=[["/path/to/lib", "/path/to/shared"], ["./vendor"]],
368
- )
369
- """Additional directories to include in the workspace."""
370
-
371
- output_format: Literal["text", "json", "stream-json"] | None = Field(
372
- default=None,
373
- title="Output Format",
374
- examples=["json", "stream-json"],
375
- )
376
- """Output format."""
377
-
378
- def get_command(self) -> str:
379
- """Get the command to spawn the ACP server."""
380
- return "gemini"
381
-
382
- @property
383
- def model_providers(self) -> list[ProviderType]:
384
- """Gemini CLI uses Google Gemini models."""
385
- return ["gemini"]
386
-
387
- async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
388
- """Build command arguments from settings."""
389
- args: list[str] = ["--experimental-acp"]
390
-
391
- if self.model:
392
- args.extend(["--model", self.model])
393
- if self.approval_mode:
394
- args.extend(["--approval-mode", self.approval_mode])
395
- if self.sandbox:
396
- args.append("--sandbox")
397
- if self.yolo:
398
- args.append("--yolo")
399
- if self.allowed_tools:
400
- args.extend(["--allowed-tools", *self.allowed_tools])
401
- if self.allowed_mcp_server_names:
402
- args.extend(["--allowed-mcp-server-names", *self.allowed_mcp_server_names])
403
- if self.extensions:
404
- args.extend(["--extensions", *self.extensions])
405
- if self.include_directories:
406
- args.extend(["--include-directories", *self.include_directories])
407
- if self.output_format:
408
- args.extend(["--output-format", self.output_format])
409
-
410
- return args
320
+ return anyenv.dump_json(model_cls.model_json_schema())
411
321
 
412
322
 
413
323
  class FastAgentACPAgentConfig(MCPCapableACPAgentConfig):
@@ -428,7 +338,7 @@ class FastAgentACPAgentConfig(MCPCapableACPAgentConfig):
428
338
  provider: fast-agent
429
339
  cwd: /path/to/project
430
340
  model: claude-3.5-sonnet-20241022
431
- toolsets:
341
+ tools:
432
342
  - type: subagent
433
343
  - type: agent_management
434
344
  skills_dir: ./my-skills
@@ -513,11 +423,6 @@ class FastAgentACPAgentConfig(MCPCapableACPAgentConfig):
513
423
 
514
424
  return args
515
425
 
516
- @property
517
- def model_providers(self) -> list[ProviderType]:
518
- """fast-agent supports multiple providers."""
519
- return ["openai", "anthropic", "gemini", "openrouter"]
520
-
521
426
 
522
427
  class AuggieACPAgentConfig(MCPCapableACPAgentConfig):
523
428
  """Configuration for Auggie (Augment Code) via ACP.
@@ -681,11 +586,6 @@ class AuggieACPAgentConfig(MCPCapableACPAgentConfig):
681
586
 
682
587
  return args
683
588
 
684
- @property
685
- def model_providers(self) -> list[ProviderType]:
686
- """Auggie uses Augment Code's models."""
687
- return []
688
-
689
589
 
690
590
  class KimiACPAgentConfig(MCPCapableACPAgentConfig):
691
591
  """Configuration for Kimi CLI via ACP.
@@ -737,7 +637,7 @@ class KimiACPAgentConfig(MCPCapableACPAgentConfig):
737
637
  )
738
638
  """Working directory for the agent."""
739
639
 
740
- yolo: bool = Field(default=False, title="YOLO")
640
+ auto_approve: bool = Field(default=False, title="Auto Approve")
741
641
  """Automatically approve all actions."""
742
642
 
743
643
  thinking: bool | None = Field(default=None, title="Thinking")
@@ -767,24 +667,93 @@ class KimiACPAgentConfig(MCPCapableACPAgentConfig):
767
667
  if mcp_json:
768
668
  args.extend(["--mcp-config", mcp_json])
769
669
 
770
- if self.yolo:
670
+ if self.auto_approve:
771
671
  args.append("--yolo")
772
672
  if self.thinking is not None and self.thinking:
773
673
  args.append("--thinking")
774
674
 
775
675
  return args
776
676
 
777
- @property
778
- def model_providers(self) -> list[ProviderType]:
779
- """Kimi uses Moonshot AI's models."""
780
- return []
677
+
678
+ class AgentpoolACPAgentConfig(MCPCapableACPAgentConfig):
679
+ """Configuration for agentpool's own ACP server.
680
+
681
+ This allows using agentpool serve-acp as an ACP agent, with MCP bridge support
682
+ for tool metadata preservation.
683
+
684
+ Example:
685
+ ```yaml
686
+ acp_agents:
687
+ my_agentpool:
688
+ type: agentpool
689
+ config_path: path/to/agent_config.yml
690
+ agent: agent_name # Optional: specific agent to use
691
+ mcp_servers:
692
+ - type: stdio
693
+ command: mcp-server-filesystem
694
+ args: ["--root", "/workspace"]
695
+ ```
696
+ """
697
+
698
+ model_config = ConfigDict(title="Agentpool ACP Agent")
699
+
700
+ provider: Literal["agentpool"] = Field("agentpool", init=False)
701
+ """Discriminator for agentpool ACP agent."""
702
+
703
+ config_path: str | None = None
704
+ """Path to agentpool configuration file (optional)."""
705
+
706
+ agent: str | None = None
707
+ """Specific agent name to use from config (defaults to first agent)."""
708
+
709
+ file_access: bool = True
710
+ """Enable file system access for the agent."""
711
+
712
+ terminal_access: bool = True
713
+ """Enable terminal access for the agent."""
714
+
715
+ load_skills: bool = True
716
+ """Load client-side skills from .claude/skills directory."""
717
+
718
+ def get_command(self) -> str:
719
+ """Get the command to run agentpool serve-acp."""
720
+ return "agentpool"
721
+
722
+ async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
723
+ """Build command arguments for agentpool serve-acp."""
724
+ args = ["serve-acp"]
725
+
726
+ # Add config path if specified
727
+ if self.config_path:
728
+ args.append(self.config_path)
729
+
730
+ # Add agent selection
731
+ if self.agent:
732
+ args.extend(["--agent", self.agent])
733
+
734
+ # Add file/terminal access flags
735
+ if not self.file_access:
736
+ args.append("--no-file-access")
737
+ if not self.terminal_access:
738
+ args.append("--no-terminal-access")
739
+
740
+ # Add skills flag
741
+ if not self.load_skills:
742
+ args.append("--no-skills")
743
+
744
+ # Convert inherited mcp_servers to --mcp-config format
745
+ mcp_json = self.build_mcp_config_json()
746
+ if mcp_json:
747
+ args.extend(["--mcp-config", mcp_json])
748
+
749
+ return args
781
750
 
782
751
 
783
752
  # Union of all ACP agent config types
784
753
  MCPCapableACPAgentConfigTypes = (
785
754
  ClaudeACPAgentConfig
786
- | GeminiACPAgentConfig
787
755
  | FastAgentACPAgentConfig
788
756
  | AuggieACPAgentConfig
789
757
  | KimiACPAgentConfig
758
+ | AgentpoolACPAgentConfig
790
759
  )