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.
- acp/__init__.py +13 -4
- acp/acp_requests.py +20 -77
- acp/agent/connection.py +8 -0
- acp/agent/implementations/debug_server/debug_server.py +6 -2
- acp/agent/protocol.py +6 -0
- acp/bridge/README.md +15 -2
- acp/bridge/__init__.py +3 -2
- acp/bridge/__main__.py +60 -19
- acp/bridge/ws_server.py +173 -0
- acp/bridge/ws_server_cli.py +89 -0
- acp/client/connection.py +38 -29
- acp/client/implementations/default_client.py +3 -2
- acp/client/implementations/headless_client.py +2 -2
- acp/connection.py +2 -2
- acp/notifications.py +20 -50
- acp/schema/__init__.py +2 -0
- acp/schema/agent_responses.py +21 -0
- acp/schema/client_requests.py +3 -3
- acp/schema/session_state.py +63 -29
- acp/stdio.py +39 -9
- acp/task/supervisor.py +2 -2
- acp/transports.py +362 -2
- acp/utils.py +17 -4
- agentpool/__init__.py +6 -1
- agentpool/agents/__init__.py +2 -0
- agentpool/agents/acp_agent/acp_agent.py +407 -277
- agentpool/agents/acp_agent/acp_converters.py +196 -38
- agentpool/agents/acp_agent/client_handler.py +191 -26
- agentpool/agents/acp_agent/session_state.py +17 -6
- agentpool/agents/agent.py +607 -572
- agentpool/agents/agui_agent/__init__.py +0 -2
- agentpool/agents/agui_agent/agui_agent.py +176 -110
- agentpool/agents/agui_agent/agui_converters.py +0 -131
- agentpool/agents/agui_agent/helpers.py +3 -4
- agentpool/agents/base_agent.py +632 -17
- agentpool/agents/claude_code_agent/FORKING.md +191 -0
- agentpool/agents/claude_code_agent/__init__.py +13 -1
- agentpool/agents/claude_code_agent/claude_code_agent.py +1058 -291
- agentpool/agents/claude_code_agent/converters.py +74 -143
- agentpool/agents/claude_code_agent/history.py +474 -0
- agentpool/agents/claude_code_agent/models.py +77 -0
- agentpool/agents/claude_code_agent/static_info.py +100 -0
- agentpool/agents/claude_code_agent/usage.py +242 -0
- agentpool/agents/context.py +40 -0
- agentpool/agents/events/__init__.py +24 -0
- agentpool/agents/events/builtin_handlers.py +67 -1
- agentpool/agents/events/event_emitter.py +32 -2
- agentpool/agents/events/events.py +104 -3
- agentpool/agents/events/infer_info.py +145 -0
- agentpool/agents/events/processors.py +254 -0
- agentpool/agents/interactions.py +41 -6
- agentpool/agents/modes.py +67 -0
- agentpool/agents/slashed_agent.py +5 -4
- agentpool/agents/tool_call_accumulator.py +213 -0
- agentpool/agents/tool_wrapping.py +18 -6
- agentpool/common_types.py +56 -21
- agentpool/config_resources/__init__.py +38 -1
- agentpool/config_resources/acp_assistant.yml +2 -2
- agentpool/config_resources/agents.yml +3 -0
- agentpool/config_resources/agents_template.yml +1 -0
- agentpool/config_resources/claude_code_agent.yml +10 -6
- agentpool/config_resources/external_acp_agents.yml +2 -1
- agentpool/delegation/base_team.py +4 -30
- agentpool/delegation/pool.py +136 -289
- agentpool/delegation/team.py +58 -57
- agentpool/delegation/teamrun.py +51 -55
- agentpool/diagnostics/__init__.py +53 -0
- agentpool/diagnostics/lsp_manager.py +1593 -0
- agentpool/diagnostics/lsp_proxy.py +41 -0
- agentpool/diagnostics/lsp_proxy_script.py +229 -0
- agentpool/diagnostics/models.py +398 -0
- agentpool/functional/run.py +10 -4
- agentpool/mcp_server/__init__.py +0 -2
- agentpool/mcp_server/client.py +76 -32
- agentpool/mcp_server/conversions.py +54 -13
- agentpool/mcp_server/manager.py +34 -54
- agentpool/mcp_server/registries/official_registry_client.py +35 -1
- agentpool/mcp_server/tool_bridge.py +186 -139
- agentpool/messaging/__init__.py +0 -2
- agentpool/messaging/compaction.py +72 -197
- agentpool/messaging/connection_manager.py +11 -10
- agentpool/messaging/event_manager.py +5 -5
- agentpool/messaging/message_container.py +6 -30
- agentpool/messaging/message_history.py +99 -8
- agentpool/messaging/messagenode.py +52 -14
- agentpool/messaging/messages.py +54 -35
- agentpool/messaging/processing.py +12 -22
- agentpool/models/__init__.py +1 -1
- agentpool/models/acp_agents/base.py +6 -24
- agentpool/models/acp_agents/mcp_capable.py +126 -157
- agentpool/models/acp_agents/non_mcp.py +129 -95
- agentpool/models/agents.py +98 -76
- agentpool/models/agui_agents.py +1 -1
- agentpool/models/claude_code_agents.py +144 -19
- agentpool/models/file_parsing.py +0 -1
- agentpool/models/manifest.py +113 -50
- agentpool/prompts/conversion_manager.py +1 -1
- agentpool/prompts/prompts.py +5 -2
- agentpool/repomap.py +1 -1
- agentpool/resource_providers/__init__.py +11 -1
- agentpool/resource_providers/aggregating.py +56 -5
- agentpool/resource_providers/base.py +70 -4
- agentpool/resource_providers/codemode/code_executor.py +72 -5
- agentpool/resource_providers/codemode/helpers.py +2 -2
- agentpool/resource_providers/codemode/provider.py +64 -12
- agentpool/resource_providers/codemode/remote_mcp_execution.py +2 -2
- agentpool/resource_providers/codemode/remote_provider.py +9 -12
- agentpool/resource_providers/filtering.py +3 -1
- agentpool/resource_providers/mcp_provider.py +89 -12
- agentpool/resource_providers/plan_provider.py +228 -46
- agentpool/resource_providers/pool.py +7 -3
- agentpool/resource_providers/resource_info.py +111 -0
- agentpool/resource_providers/static.py +4 -2
- agentpool/sessions/__init__.py +4 -1
- agentpool/sessions/manager.py +33 -5
- agentpool/sessions/models.py +59 -6
- agentpool/sessions/protocol.py +28 -0
- agentpool/sessions/session.py +11 -55
- agentpool/skills/registry.py +13 -8
- agentpool/storage/manager.py +572 -49
- agentpool/talk/registry.py +4 -4
- agentpool/talk/talk.py +9 -10
- agentpool/testing.py +538 -20
- agentpool/tool_impls/__init__.py +6 -0
- agentpool/tool_impls/agent_cli/__init__.py +42 -0
- agentpool/tool_impls/agent_cli/tool.py +95 -0
- agentpool/tool_impls/bash/__init__.py +64 -0
- agentpool/tool_impls/bash/helpers.py +35 -0
- agentpool/tool_impls/bash/tool.py +171 -0
- agentpool/tool_impls/delete_path/__init__.py +70 -0
- agentpool/tool_impls/delete_path/tool.py +142 -0
- agentpool/tool_impls/download_file/__init__.py +80 -0
- agentpool/tool_impls/download_file/tool.py +183 -0
- agentpool/tool_impls/execute_code/__init__.py +55 -0
- agentpool/tool_impls/execute_code/tool.py +163 -0
- agentpool/tool_impls/grep/__init__.py +80 -0
- agentpool/tool_impls/grep/tool.py +200 -0
- agentpool/tool_impls/list_directory/__init__.py +73 -0
- agentpool/tool_impls/list_directory/tool.py +197 -0
- agentpool/tool_impls/question/__init__.py +42 -0
- agentpool/tool_impls/question/tool.py +127 -0
- agentpool/tool_impls/read/__init__.py +104 -0
- agentpool/tool_impls/read/tool.py +305 -0
- agentpool/tools/__init__.py +2 -1
- agentpool/tools/base.py +114 -34
- agentpool/tools/manager.py +57 -1
- agentpool/ui/base.py +2 -2
- agentpool/ui/mock_provider.py +2 -2
- agentpool/ui/stdlib_provider.py +2 -2
- agentpool/utils/file_watcher.py +269 -0
- agentpool/utils/identifiers.py +121 -0
- agentpool/utils/pydantic_ai_helpers.py +46 -0
- agentpool/utils/streams.py +616 -2
- agentpool/utils/subprocess_utils.py +155 -0
- agentpool/utils/token_breakdown.py +461 -0
- agentpool/vfs_registry.py +7 -2
- {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/METADATA +41 -27
- agentpool-2.5.0.dist-info/RECORD +579 -0
- {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
- agentpool_cli/__main__.py +24 -0
- agentpool_cli/create.py +1 -1
- agentpool_cli/serve_acp.py +100 -21
- agentpool_cli/serve_agui.py +87 -0
- agentpool_cli/serve_opencode.py +119 -0
- agentpool_cli/ui.py +557 -0
- agentpool_commands/__init__.py +42 -5
- agentpool_commands/agents.py +75 -2
- agentpool_commands/history.py +62 -0
- agentpool_commands/mcp.py +176 -0
- agentpool_commands/models.py +56 -3
- agentpool_commands/pool.py +260 -0
- agentpool_commands/session.py +1 -1
- agentpool_commands/text_sharing/__init__.py +119 -0
- agentpool_commands/text_sharing/base.py +123 -0
- agentpool_commands/text_sharing/github_gist.py +80 -0
- agentpool_commands/text_sharing/opencode.py +462 -0
- agentpool_commands/text_sharing/paste_rs.py +59 -0
- agentpool_commands/text_sharing/pastebin.py +116 -0
- agentpool_commands/text_sharing/shittycodingagent.py +112 -0
- agentpool_commands/tools.py +57 -0
- agentpool_commands/utils.py +80 -30
- agentpool_config/__init__.py +30 -2
- agentpool_config/agentpool_tools.py +498 -0
- agentpool_config/builtin_tools.py +77 -22
- agentpool_config/commands.py +24 -1
- agentpool_config/compaction.py +258 -0
- agentpool_config/converters.py +1 -1
- agentpool_config/event_handlers.py +42 -0
- agentpool_config/events.py +1 -1
- agentpool_config/forward_targets.py +1 -4
- agentpool_config/jinja.py +3 -3
- agentpool_config/mcp_server.py +132 -6
- agentpool_config/nodes.py +1 -1
- agentpool_config/observability.py +44 -0
- agentpool_config/session.py +0 -3
- agentpool_config/storage.py +82 -38
- agentpool_config/task.py +3 -3
- agentpool_config/tools.py +11 -22
- agentpool_config/toolsets.py +109 -233
- agentpool_server/a2a_server/agent_worker.py +307 -0
- agentpool_server/a2a_server/server.py +23 -18
- agentpool_server/acp_server/acp_agent.py +234 -181
- agentpool_server/acp_server/commands/acp_commands.py +151 -156
- agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +18 -17
- agentpool_server/acp_server/event_converter.py +651 -0
- agentpool_server/acp_server/input_provider.py +53 -10
- agentpool_server/acp_server/server.py +24 -90
- agentpool_server/acp_server/session.py +173 -331
- agentpool_server/acp_server/session_manager.py +8 -34
- agentpool_server/agui_server/server.py +3 -1
- agentpool_server/mcp_server/server.py +5 -2
- agentpool_server/opencode_server/.rules +95 -0
- agentpool_server/opencode_server/ENDPOINTS.md +401 -0
- agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
- agentpool_server/opencode_server/__init__.py +19 -0
- agentpool_server/opencode_server/command_validation.py +172 -0
- agentpool_server/opencode_server/converters.py +975 -0
- agentpool_server/opencode_server/dependencies.py +24 -0
- agentpool_server/opencode_server/input_provider.py +421 -0
- agentpool_server/opencode_server/models/__init__.py +250 -0
- agentpool_server/opencode_server/models/agent.py +53 -0
- agentpool_server/opencode_server/models/app.py +72 -0
- agentpool_server/opencode_server/models/base.py +26 -0
- agentpool_server/opencode_server/models/common.py +23 -0
- agentpool_server/opencode_server/models/config.py +37 -0
- agentpool_server/opencode_server/models/events.py +821 -0
- agentpool_server/opencode_server/models/file.py +88 -0
- agentpool_server/opencode_server/models/mcp.py +44 -0
- agentpool_server/opencode_server/models/message.py +179 -0
- agentpool_server/opencode_server/models/parts.py +323 -0
- agentpool_server/opencode_server/models/provider.py +81 -0
- agentpool_server/opencode_server/models/pty.py +43 -0
- agentpool_server/opencode_server/models/question.py +56 -0
- agentpool_server/opencode_server/models/session.py +111 -0
- agentpool_server/opencode_server/routes/__init__.py +29 -0
- agentpool_server/opencode_server/routes/agent_routes.py +473 -0
- agentpool_server/opencode_server/routes/app_routes.py +202 -0
- agentpool_server/opencode_server/routes/config_routes.py +302 -0
- agentpool_server/opencode_server/routes/file_routes.py +571 -0
- agentpool_server/opencode_server/routes/global_routes.py +94 -0
- agentpool_server/opencode_server/routes/lsp_routes.py +319 -0
- agentpool_server/opencode_server/routes/message_routes.py +761 -0
- agentpool_server/opencode_server/routes/permission_routes.py +63 -0
- agentpool_server/opencode_server/routes/pty_routes.py +300 -0
- agentpool_server/opencode_server/routes/question_routes.py +128 -0
- agentpool_server/opencode_server/routes/session_routes.py +1276 -0
- agentpool_server/opencode_server/routes/tui_routes.py +139 -0
- agentpool_server/opencode_server/server.py +475 -0
- agentpool_server/opencode_server/state.py +151 -0
- agentpool_server/opencode_server/time_utils.py +8 -0
- agentpool_storage/__init__.py +12 -0
- agentpool_storage/base.py +184 -2
- agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
- agentpool_storage/claude_provider/__init__.py +42 -0
- agentpool_storage/claude_provider/provider.py +1089 -0
- agentpool_storage/file_provider.py +278 -15
- agentpool_storage/memory_provider.py +193 -12
- agentpool_storage/models.py +3 -0
- agentpool_storage/opencode_provider/ARCHITECTURE.md +386 -0
- agentpool_storage/opencode_provider/__init__.py +16 -0
- agentpool_storage/opencode_provider/helpers.py +414 -0
- agentpool_storage/opencode_provider/provider.py +895 -0
- agentpool_storage/project_store.py +325 -0
- agentpool_storage/session_store.py +26 -6
- agentpool_storage/sql_provider/__init__.py +4 -2
- agentpool_storage/sql_provider/models.py +48 -0
- agentpool_storage/sql_provider/sql_provider.py +269 -3
- agentpool_storage/sql_provider/utils.py +12 -13
- agentpool_storage/zed_provider/__init__.py +16 -0
- agentpool_storage/zed_provider/helpers.py +281 -0
- agentpool_storage/zed_provider/models.py +130 -0
- agentpool_storage/zed_provider/provider.py +442 -0
- agentpool_storage/zed_provider.py +803 -0
- agentpool_toolsets/__init__.py +0 -2
- agentpool_toolsets/builtin/__init__.py +2 -12
- agentpool_toolsets/builtin/code.py +96 -57
- agentpool_toolsets/builtin/debug.py +118 -48
- agentpool_toolsets/builtin/execution_environment.py +115 -230
- agentpool_toolsets/builtin/file_edit/file_edit.py +115 -7
- agentpool_toolsets/builtin/skills.py +9 -4
- agentpool_toolsets/builtin/subagent_tools.py +64 -51
- agentpool_toolsets/builtin/workers.py +4 -2
- agentpool_toolsets/composio_toolset.py +2 -2
- agentpool_toolsets/entry_points.py +3 -1
- agentpool_toolsets/fsspec_toolset/__init__.py +13 -1
- agentpool_toolsets/fsspec_toolset/diagnostics.py +860 -73
- agentpool_toolsets/fsspec_toolset/grep.py +99 -7
- agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
- agentpool_toolsets/fsspec_toolset/image_utils.py +161 -0
- agentpool_toolsets/fsspec_toolset/toolset.py +500 -95
- agentpool_toolsets/mcp_discovery/__init__.py +5 -0
- agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
- agentpool_toolsets/mcp_discovery/toolset.py +511 -0
- agentpool_toolsets/mcp_run_toolset.py +87 -12
- agentpool_toolsets/notifications.py +33 -33
- agentpool_toolsets/openapi.py +3 -1
- agentpool_toolsets/search_toolset.py +3 -1
- agentpool-2.1.9.dist-info/RECORD +0 -474
- agentpool_config/resources.py +0 -33
- agentpool_server/acp_server/acp_tools.py +0 -43
- agentpool_server/acp_server/commands/spawn.py +0 -210
- agentpool_storage/text_log_provider.py +0 -275
- agentpool_toolsets/builtin/agent_management.py +0 -239
- agentpool_toolsets/builtin/chain.py +0 -288
- agentpool_toolsets/builtin/history.py +0 -36
- agentpool_toolsets/builtin/integration.py +0 -85
- agentpool_toolsets/builtin/tool_management.py +0 -90
- agentpool_toolsets/builtin/user_interaction.py +0 -52
- agentpool_toolsets/semantic_memory_toolset.py +0 -536
- {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
- {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
|
|
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
|
-
|
|
53
|
+
tools: list[AnyToolConfig | str] = Field(
|
|
51
54
|
default_factory=list,
|
|
52
|
-
title="
|
|
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
|
-
"""
|
|
64
|
+
"""Tools and toolsets to expose to this ACP agent via MCP bridge.
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
available to the external ACP agent.
|
|
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
|
-
|
|
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
|
-
|
|
245
|
+
auto_approve: bool = Field(
|
|
215
246
|
default=False,
|
|
216
|
-
title="
|
|
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.
|
|
264
|
-
if self.
|
|
265
|
-
args.extend(["--tools", ",".join(self.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
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
|
)
|