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
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
"""Models for agentpool standalone tool configuration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Literal
|
|
6
|
+
|
|
7
|
+
from exxec_config import ExecutionEnvironmentConfig # noqa: TC002
|
|
8
|
+
from pydantic import ConfigDict, Field
|
|
9
|
+
|
|
10
|
+
from agentpool_config.converters import ConversionConfig # noqa: TC001
|
|
11
|
+
from agentpool_config.tools import BaseToolConfig
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from agentpool.tools.base import Tool
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class BashToolConfig(BaseToolConfig):
|
|
19
|
+
"""Configuration for bash command execution tool.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
```yaml
|
|
23
|
+
tools:
|
|
24
|
+
- type: bash
|
|
25
|
+
timeout: 30.0
|
|
26
|
+
output_limit: 10000
|
|
27
|
+
requires_confirmation: true
|
|
28
|
+
environment:
|
|
29
|
+
type: mock
|
|
30
|
+
deterministic_ids: true
|
|
31
|
+
```
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
model_config = ConfigDict(title="Bash Tool")
|
|
35
|
+
|
|
36
|
+
type: Literal["bash"] = Field("bash", init=False)
|
|
37
|
+
"""Bash command execution tool."""
|
|
38
|
+
|
|
39
|
+
timeout: float | None = Field(
|
|
40
|
+
default=None,
|
|
41
|
+
examples=[30.0, 60.0, 120.0],
|
|
42
|
+
title="Command timeout",
|
|
43
|
+
)
|
|
44
|
+
"""Command timeout in seconds. None means no timeout."""
|
|
45
|
+
|
|
46
|
+
output_limit: int | None = Field(
|
|
47
|
+
default=None,
|
|
48
|
+
examples=[10000, 50000, 100000],
|
|
49
|
+
title="Output limit",
|
|
50
|
+
)
|
|
51
|
+
"""Maximum bytes of output to return."""
|
|
52
|
+
|
|
53
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
54
|
+
default=None,
|
|
55
|
+
title="Execution environment",
|
|
56
|
+
)
|
|
57
|
+
"""Execution environment for command execution. Falls back to agent's env if not set."""
|
|
58
|
+
|
|
59
|
+
def get_tool(self) -> Tool:
|
|
60
|
+
"""Convert config to BashTool instance."""
|
|
61
|
+
from agentpool.tool_impls.bash import create_bash_tool
|
|
62
|
+
|
|
63
|
+
env = self.environment.get_provider() if self.environment else None
|
|
64
|
+
return create_bash_tool(
|
|
65
|
+
env=env,
|
|
66
|
+
timeout=self.timeout,
|
|
67
|
+
output_limit=self.output_limit,
|
|
68
|
+
name=self.name or "bash",
|
|
69
|
+
description=self.description or "Execute a shell command and return the output.",
|
|
70
|
+
requires_confirmation=self.requires_confirmation,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class AgentCliToolConfig(BaseToolConfig):
|
|
75
|
+
"""Configuration for agent CLI tool.
|
|
76
|
+
|
|
77
|
+
Example:
|
|
78
|
+
```yaml
|
|
79
|
+
tools:
|
|
80
|
+
- type: agent_cli
|
|
81
|
+
```
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
model_config = ConfigDict(title="Agent CLI Tool")
|
|
85
|
+
|
|
86
|
+
type: Literal["agent_cli"] = Field("agent_cli", init=False)
|
|
87
|
+
"""Agent CLI tool."""
|
|
88
|
+
|
|
89
|
+
def get_tool(self) -> Tool:
|
|
90
|
+
"""Convert config to AgentCliTool instance."""
|
|
91
|
+
from agentpool.tool_impls.agent_cli import create_agent_cli_tool
|
|
92
|
+
|
|
93
|
+
return create_agent_cli_tool(
|
|
94
|
+
name=self.name or "run_agent_cli_command",
|
|
95
|
+
description=self.description or "Execute an internal agent management command.",
|
|
96
|
+
requires_confirmation=self.requires_confirmation,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class QuestionToolConfig(BaseToolConfig):
|
|
101
|
+
"""Configuration for user interaction tool.
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
```yaml
|
|
105
|
+
tools:
|
|
106
|
+
- type: question
|
|
107
|
+
```
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
model_config = ConfigDict(title="Ask User Tool")
|
|
111
|
+
|
|
112
|
+
type: Literal["question"] = Field("question", init=False)
|
|
113
|
+
"""User interaction tool."""
|
|
114
|
+
|
|
115
|
+
def get_tool(self) -> Tool:
|
|
116
|
+
"""Convert config to QuestionTool instance."""
|
|
117
|
+
from agentpool.tool_impls.question import create_question_tool
|
|
118
|
+
|
|
119
|
+
return create_question_tool(
|
|
120
|
+
name=self.name or "question",
|
|
121
|
+
description=self.description or "Ask the user a clarifying question.",
|
|
122
|
+
requires_confirmation=self.requires_confirmation,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class ExecuteCodeToolConfig(BaseToolConfig):
|
|
127
|
+
"""Configuration for Python code execution tool.
|
|
128
|
+
|
|
129
|
+
Example:
|
|
130
|
+
```yaml
|
|
131
|
+
tools:
|
|
132
|
+
- type: execute_code
|
|
133
|
+
requires_confirmation: true
|
|
134
|
+
environment:
|
|
135
|
+
type: mock
|
|
136
|
+
deterministic_ids: true
|
|
137
|
+
```
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
model_config = ConfigDict(title="Execute Code Tool")
|
|
141
|
+
|
|
142
|
+
type: Literal["execute_code"] = Field("execute_code", init=False)
|
|
143
|
+
"""Python code execution tool."""
|
|
144
|
+
|
|
145
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
146
|
+
default=None,
|
|
147
|
+
title="Execution environment",
|
|
148
|
+
)
|
|
149
|
+
"""Execution environment for code execution. Falls back to agent's env if not set."""
|
|
150
|
+
|
|
151
|
+
def get_tool(self) -> Tool:
|
|
152
|
+
"""Convert config to ExecuteCodeTool instance."""
|
|
153
|
+
from agentpool.tool_impls.execute_code import create_execute_code_tool
|
|
154
|
+
|
|
155
|
+
env = self.environment.get_provider() if self.environment else None
|
|
156
|
+
return create_execute_code_tool(
|
|
157
|
+
env=env,
|
|
158
|
+
name=self.name or "execute_code",
|
|
159
|
+
description=self.description or "Execute Python code and return the result.",
|
|
160
|
+
requires_confirmation=self.requires_confirmation,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class ReadToolConfig(BaseToolConfig):
|
|
165
|
+
"""Configuration for file reading tool.
|
|
166
|
+
|
|
167
|
+
Example:
|
|
168
|
+
```yaml
|
|
169
|
+
tools:
|
|
170
|
+
- type: read
|
|
171
|
+
max_file_size_kb: 128
|
|
172
|
+
max_image_size: 1500
|
|
173
|
+
large_file_tokens: 10000
|
|
174
|
+
conversion:
|
|
175
|
+
default_provider: markitdown
|
|
176
|
+
environment:
|
|
177
|
+
type: local
|
|
178
|
+
```
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
model_config = ConfigDict(title="Read Tool")
|
|
182
|
+
|
|
183
|
+
type: Literal["read"] = Field("read", init=False)
|
|
184
|
+
"""File reading tool."""
|
|
185
|
+
|
|
186
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
187
|
+
default=None,
|
|
188
|
+
title="Execution environment",
|
|
189
|
+
)
|
|
190
|
+
"""Execution environment for filesystem access. Falls back to agent's env if not set."""
|
|
191
|
+
|
|
192
|
+
cwd: str | None = Field(
|
|
193
|
+
default=None,
|
|
194
|
+
title="Working directory",
|
|
195
|
+
)
|
|
196
|
+
"""Working directory for resolving relative paths."""
|
|
197
|
+
|
|
198
|
+
max_file_size_kb: int = Field(
|
|
199
|
+
default=64,
|
|
200
|
+
examples=[64, 128, 256],
|
|
201
|
+
title="Max file size",
|
|
202
|
+
)
|
|
203
|
+
"""Maximum file size in KB for read operations."""
|
|
204
|
+
|
|
205
|
+
max_image_size: int | None = Field(
|
|
206
|
+
default=2000,
|
|
207
|
+
examples=[1500, 2000, 2500],
|
|
208
|
+
title="Max image dimensions",
|
|
209
|
+
)
|
|
210
|
+
"""Max width/height for images in pixels. Images are auto-resized if larger."""
|
|
211
|
+
|
|
212
|
+
max_image_bytes: int | None = Field(
|
|
213
|
+
default=None,
|
|
214
|
+
title="Max image file size",
|
|
215
|
+
)
|
|
216
|
+
"""Max file size for images in bytes. Images are compressed if larger."""
|
|
217
|
+
|
|
218
|
+
large_file_tokens: int = Field(
|
|
219
|
+
default=12_000,
|
|
220
|
+
examples=[10_000, 12_000, 15_000],
|
|
221
|
+
title="Large file threshold",
|
|
222
|
+
)
|
|
223
|
+
"""Token threshold for switching to structure map for large files."""
|
|
224
|
+
|
|
225
|
+
map_max_tokens: int = Field(
|
|
226
|
+
default=2048,
|
|
227
|
+
examples=[1024, 2048, 4096],
|
|
228
|
+
title="Structure map max tokens",
|
|
229
|
+
)
|
|
230
|
+
"""Maximum tokens for structure map output."""
|
|
231
|
+
|
|
232
|
+
conversion: ConversionConfig | None = Field(
|
|
233
|
+
default=None,
|
|
234
|
+
title="Conversion config",
|
|
235
|
+
)
|
|
236
|
+
"""Optional conversion config for binary files. If set, converts supported files to markdown."""
|
|
237
|
+
|
|
238
|
+
def get_tool(self) -> Tool:
|
|
239
|
+
"""Convert config to ReadTool instance."""
|
|
240
|
+
from agentpool.tool_impls.read import create_read_tool
|
|
241
|
+
|
|
242
|
+
env = self.environment.get_provider() if self.environment else None
|
|
243
|
+
|
|
244
|
+
# Create converter if conversion config is provided
|
|
245
|
+
converter = None
|
|
246
|
+
if self.conversion is not None:
|
|
247
|
+
try:
|
|
248
|
+
from agentpool.prompts.conversion_manager import ConversionManager
|
|
249
|
+
|
|
250
|
+
converter = ConversionManager(self.conversion)
|
|
251
|
+
except Exception: # noqa: BLE001
|
|
252
|
+
# ConversionManager not available, continue without it
|
|
253
|
+
pass
|
|
254
|
+
|
|
255
|
+
return create_read_tool(
|
|
256
|
+
env=env,
|
|
257
|
+
converter=converter,
|
|
258
|
+
cwd=self.cwd,
|
|
259
|
+
max_file_size_kb=self.max_file_size_kb,
|
|
260
|
+
max_image_size=self.max_image_size,
|
|
261
|
+
max_image_bytes=self.max_image_bytes,
|
|
262
|
+
large_file_tokens=self.large_file_tokens,
|
|
263
|
+
map_max_tokens=self.map_max_tokens,
|
|
264
|
+
name=self.name or "read",
|
|
265
|
+
description=self.description or "Read file contents with automatic format detection.",
|
|
266
|
+
requires_confirmation=self.requires_confirmation,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class ListDirectoryToolConfig(BaseToolConfig):
|
|
271
|
+
"""Configuration for directory listing tool.
|
|
272
|
+
|
|
273
|
+
Example:
|
|
274
|
+
```yaml
|
|
275
|
+
tools:
|
|
276
|
+
- type: list_directory
|
|
277
|
+
max_items: 1000
|
|
278
|
+
environment:
|
|
279
|
+
type: local
|
|
280
|
+
```
|
|
281
|
+
"""
|
|
282
|
+
|
|
283
|
+
model_config = ConfigDict(title="List Directory Tool")
|
|
284
|
+
|
|
285
|
+
type: Literal["list_directory"] = Field("list_directory", init=False)
|
|
286
|
+
"""Directory listing tool."""
|
|
287
|
+
|
|
288
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
289
|
+
default=None,
|
|
290
|
+
title="Execution environment",
|
|
291
|
+
)
|
|
292
|
+
"""Execution environment for filesystem access. Falls back to agent's env if not set."""
|
|
293
|
+
|
|
294
|
+
cwd: str | None = Field(
|
|
295
|
+
default=None,
|
|
296
|
+
title="Working directory",
|
|
297
|
+
)
|
|
298
|
+
"""Working directory for resolving relative paths."""
|
|
299
|
+
|
|
300
|
+
max_items: int = Field(
|
|
301
|
+
default=500,
|
|
302
|
+
examples=[500, 1000, 2000],
|
|
303
|
+
title="Max items",
|
|
304
|
+
)
|
|
305
|
+
"""Maximum number of items to return (safety limit)."""
|
|
306
|
+
|
|
307
|
+
def get_tool(self) -> Tool:
|
|
308
|
+
"""Convert config to ListDirectoryTool instance."""
|
|
309
|
+
from agentpool.tool_impls.list_directory import create_list_directory_tool
|
|
310
|
+
|
|
311
|
+
env = self.environment.get_provider() if self.environment else None
|
|
312
|
+
return create_list_directory_tool(
|
|
313
|
+
env=env,
|
|
314
|
+
cwd=self.cwd,
|
|
315
|
+
max_items=self.max_items,
|
|
316
|
+
name=self.name or "list_directory",
|
|
317
|
+
description=self.description or "List files in a directory with filtering support.",
|
|
318
|
+
requires_confirmation=self.requires_confirmation,
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
class GrepToolConfig(BaseToolConfig):
|
|
323
|
+
"""Configuration for grep search tool.
|
|
324
|
+
|
|
325
|
+
Example:
|
|
326
|
+
```yaml
|
|
327
|
+
tools:
|
|
328
|
+
- type: grep
|
|
329
|
+
max_output_kb: 128
|
|
330
|
+
use_subprocess_grep: true
|
|
331
|
+
environment:
|
|
332
|
+
type: local
|
|
333
|
+
```
|
|
334
|
+
"""
|
|
335
|
+
|
|
336
|
+
model_config = ConfigDict(title="Grep Tool")
|
|
337
|
+
|
|
338
|
+
type: Literal["grep"] = Field("grep", init=False)
|
|
339
|
+
"""Grep search tool."""
|
|
340
|
+
|
|
341
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
342
|
+
default=None,
|
|
343
|
+
title="Execution environment",
|
|
344
|
+
)
|
|
345
|
+
"""Execution environment for filesystem access. Falls back to agent's env if not set."""
|
|
346
|
+
|
|
347
|
+
cwd: str | None = Field(
|
|
348
|
+
default=None,
|
|
349
|
+
title="Working directory",
|
|
350
|
+
)
|
|
351
|
+
"""Working directory for resolving relative paths."""
|
|
352
|
+
|
|
353
|
+
max_output_kb: int = Field(
|
|
354
|
+
default=64,
|
|
355
|
+
examples=[64, 128, 256],
|
|
356
|
+
title="Max output size",
|
|
357
|
+
)
|
|
358
|
+
"""Maximum output size in KB."""
|
|
359
|
+
|
|
360
|
+
use_subprocess_grep: bool = Field(
|
|
361
|
+
default=True,
|
|
362
|
+
title="Use subprocess grep",
|
|
363
|
+
)
|
|
364
|
+
"""Use ripgrep/grep subprocess if available (faster for large codebases)."""
|
|
365
|
+
|
|
366
|
+
def get_tool(self) -> Tool:
|
|
367
|
+
"""Convert config to GrepTool instance."""
|
|
368
|
+
from agentpool.tool_impls.grep import create_grep_tool
|
|
369
|
+
|
|
370
|
+
env = self.environment.get_provider() if self.environment else None
|
|
371
|
+
return create_grep_tool(
|
|
372
|
+
env=env,
|
|
373
|
+
cwd=self.cwd,
|
|
374
|
+
max_output_kb=self.max_output_kb,
|
|
375
|
+
use_subprocess_grep=self.use_subprocess_grep,
|
|
376
|
+
name=self.name or "grep",
|
|
377
|
+
description=self.description or "Search file contents for patterns.",
|
|
378
|
+
requires_confirmation=self.requires_confirmation,
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
class DeletePathToolConfig(BaseToolConfig):
|
|
383
|
+
"""Configuration for delete path tool.
|
|
384
|
+
|
|
385
|
+
Example:
|
|
386
|
+
```yaml
|
|
387
|
+
tools:
|
|
388
|
+
- type: delete_path
|
|
389
|
+
requires_confirmation: true
|
|
390
|
+
environment:
|
|
391
|
+
type: local
|
|
392
|
+
```
|
|
393
|
+
"""
|
|
394
|
+
|
|
395
|
+
model_config = ConfigDict(title="Delete Path Tool")
|
|
396
|
+
|
|
397
|
+
type: Literal["delete_path"] = Field("delete_path", init=False)
|
|
398
|
+
"""Delete path tool."""
|
|
399
|
+
|
|
400
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
401
|
+
default=None,
|
|
402
|
+
title="Execution environment",
|
|
403
|
+
)
|
|
404
|
+
"""Execution environment for filesystem access. Falls back to agent's env if not set."""
|
|
405
|
+
|
|
406
|
+
cwd: str | None = Field(
|
|
407
|
+
default=None,
|
|
408
|
+
title="Working directory",
|
|
409
|
+
)
|
|
410
|
+
"""Working directory for resolving relative paths."""
|
|
411
|
+
|
|
412
|
+
def get_tool(self) -> Tool:
|
|
413
|
+
"""Convert config to DeletePathTool instance."""
|
|
414
|
+
from agentpool.tool_impls.delete_path import create_delete_path_tool
|
|
415
|
+
|
|
416
|
+
env = self.environment.get_provider() if self.environment else None
|
|
417
|
+
return create_delete_path_tool(
|
|
418
|
+
env=env,
|
|
419
|
+
cwd=self.cwd,
|
|
420
|
+
name=self.name or "delete_path",
|
|
421
|
+
description=self.description or "Delete a file or directory.",
|
|
422
|
+
requires_confirmation=self.requires_confirmation,
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
class DownloadFileToolConfig(BaseToolConfig):
|
|
427
|
+
"""Configuration for file download tool.
|
|
428
|
+
|
|
429
|
+
Example:
|
|
430
|
+
```yaml
|
|
431
|
+
tools:
|
|
432
|
+
- type: download_file
|
|
433
|
+
chunk_size: 16384
|
|
434
|
+
timeout: 60.0
|
|
435
|
+
environment:
|
|
436
|
+
type: local
|
|
437
|
+
```
|
|
438
|
+
"""
|
|
439
|
+
|
|
440
|
+
model_config = ConfigDict(title="Download File Tool")
|
|
441
|
+
|
|
442
|
+
type: Literal["download_file"] = Field("download_file", init=False)
|
|
443
|
+
"""File download tool."""
|
|
444
|
+
|
|
445
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
446
|
+
default=None,
|
|
447
|
+
title="Execution environment",
|
|
448
|
+
)
|
|
449
|
+
"""Execution environment for filesystem access. Falls back to agent's env if not set."""
|
|
450
|
+
|
|
451
|
+
cwd: str | None = Field(
|
|
452
|
+
default=None,
|
|
453
|
+
title="Working directory",
|
|
454
|
+
)
|
|
455
|
+
"""Working directory for resolving relative paths."""
|
|
456
|
+
|
|
457
|
+
chunk_size: int = Field(
|
|
458
|
+
default=8192,
|
|
459
|
+
examples=[8192, 16384, 32768],
|
|
460
|
+
title="Chunk size",
|
|
461
|
+
)
|
|
462
|
+
"""Size of chunks to download in bytes."""
|
|
463
|
+
|
|
464
|
+
timeout: float = Field(
|
|
465
|
+
default=30.0,
|
|
466
|
+
examples=[30.0, 60.0, 120.0],
|
|
467
|
+
title="Request timeout",
|
|
468
|
+
)
|
|
469
|
+
"""Request timeout in seconds."""
|
|
470
|
+
|
|
471
|
+
def get_tool(self) -> Tool:
|
|
472
|
+
"""Convert config to DownloadFileTool instance."""
|
|
473
|
+
from agentpool.tool_impls.download_file import create_download_file_tool
|
|
474
|
+
|
|
475
|
+
env = self.environment.get_provider() if self.environment else None
|
|
476
|
+
return create_download_file_tool(
|
|
477
|
+
env=env,
|
|
478
|
+
cwd=self.cwd,
|
|
479
|
+
chunk_size=self.chunk_size,
|
|
480
|
+
timeout=self.timeout,
|
|
481
|
+
name=self.name or "download_file",
|
|
482
|
+
description=self.description or "Download a file from a URL.",
|
|
483
|
+
requires_confirmation=self.requires_confirmation,
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
# Union type for agentpool tool configs
|
|
488
|
+
AgentpoolToolConfig = (
|
|
489
|
+
AgentCliToolConfig
|
|
490
|
+
| QuestionToolConfig
|
|
491
|
+
| BashToolConfig
|
|
492
|
+
| DeletePathToolConfig
|
|
493
|
+
| DownloadFileToolConfig
|
|
494
|
+
| ExecuteCodeToolConfig
|
|
495
|
+
| GrepToolConfig
|
|
496
|
+
| ListDirectoryToolConfig
|
|
497
|
+
| ReadToolConfig
|
|
498
|
+
)
|
|
@@ -25,17 +25,33 @@ if TYPE_CHECKING:
|
|
|
25
25
|
class BaseBuiltinToolConfig(BaseToolConfig):
|
|
26
26
|
"""Base configuration for PydanticAI builtin tools."""
|
|
27
27
|
|
|
28
|
+
type: Literal["builtin"] = Field("builtin", init=False)
|
|
29
|
+
"""Top-level discriminator - always 'builtin' for builtin tools."""
|
|
30
|
+
|
|
31
|
+
builtin_type: str = Field(init=False)
|
|
32
|
+
"""Sub-discriminator for specific builtin tool type."""
|
|
33
|
+
|
|
28
34
|
def get_builtin_tool(self) -> AbstractBuiltinTool:
|
|
29
35
|
"""Convert config to PydanticAI builtin tool instance."""
|
|
30
36
|
raise NotImplementedError
|
|
31
37
|
|
|
32
38
|
|
|
33
39
|
class WebSearchToolConfig(BaseBuiltinToolConfig):
|
|
34
|
-
"""Configuration for PydanticAI web search builtin tool.
|
|
40
|
+
"""Configuration for PydanticAI web search builtin tool.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
```yaml
|
|
44
|
+
tools:
|
|
45
|
+
- type: builtin
|
|
46
|
+
builtin_type: web_search
|
|
47
|
+
search_context_size: high
|
|
48
|
+
blocked_domains: ["spam.com"]
|
|
49
|
+
```
|
|
50
|
+
"""
|
|
35
51
|
|
|
36
52
|
model_config = ConfigDict(title="Web Search Tool")
|
|
37
53
|
|
|
38
|
-
|
|
54
|
+
builtin_type: Literal["web_search"] = Field("web_search", init=False)
|
|
39
55
|
"""Web search builtin tool."""
|
|
40
56
|
|
|
41
57
|
search_context_size: Literal["low", "medium", "high"] = Field(
|
|
@@ -77,11 +93,19 @@ class WebSearchToolConfig(BaseBuiltinToolConfig):
|
|
|
77
93
|
|
|
78
94
|
|
|
79
95
|
class CodeExecutionToolConfig(BaseBuiltinToolConfig):
|
|
80
|
-
"""Configuration for PydanticAI code execution builtin tool.
|
|
96
|
+
"""Configuration for PydanticAI code execution builtin tool.
|
|
97
|
+
|
|
98
|
+
Example:
|
|
99
|
+
```yaml
|
|
100
|
+
tools:
|
|
101
|
+
- type: builtin
|
|
102
|
+
builtin_type: code_execution
|
|
103
|
+
```
|
|
104
|
+
"""
|
|
81
105
|
|
|
82
106
|
model_config = ConfigDict(title="Code Execution Tool")
|
|
83
107
|
|
|
84
|
-
|
|
108
|
+
builtin_type: Literal["code_execution"] = Field("code_execution", init=False)
|
|
85
109
|
"""Code execution builtin tool."""
|
|
86
110
|
|
|
87
111
|
def get_builtin_tool(self) -> CodeExecutionTool:
|
|
@@ -90,12 +114,20 @@ class CodeExecutionToolConfig(BaseBuiltinToolConfig):
|
|
|
90
114
|
|
|
91
115
|
|
|
92
116
|
class WebFetchToolConfig(BaseBuiltinToolConfig):
|
|
93
|
-
"""Configuration for PydanticAI
|
|
117
|
+
"""Configuration for PydanticAI web fetch builtin tool.
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
```yaml
|
|
121
|
+
tools:
|
|
122
|
+
- type: builtin
|
|
123
|
+
builtin_type: web_fetch
|
|
124
|
+
```
|
|
125
|
+
"""
|
|
94
126
|
|
|
95
|
-
model_config = ConfigDict(title="
|
|
127
|
+
model_config = ConfigDict(title="Web Fetch Tool")
|
|
96
128
|
|
|
97
|
-
|
|
98
|
-
"""
|
|
129
|
+
builtin_type: Literal["web_fetch"] = Field("web_fetch", init=False)
|
|
130
|
+
"""Web fetch builtin tool."""
|
|
99
131
|
|
|
100
132
|
def get_builtin_tool(self) -> WebFetchTool:
|
|
101
133
|
"""Convert config to WebFetchTool instance."""
|
|
@@ -103,11 +135,21 @@ class WebFetchToolConfig(BaseBuiltinToolConfig):
|
|
|
103
135
|
|
|
104
136
|
|
|
105
137
|
class ImageGenerationToolConfig(BaseBuiltinToolConfig):
|
|
106
|
-
"""Configuration for PydanticAI image generation builtin tool.
|
|
138
|
+
"""Configuration for PydanticAI image generation builtin tool.
|
|
139
|
+
|
|
140
|
+
Example:
|
|
141
|
+
```yaml
|
|
142
|
+
tools:
|
|
143
|
+
- type: builtin
|
|
144
|
+
builtin_type: image_generation
|
|
145
|
+
quality: high
|
|
146
|
+
size: 1024x1024
|
|
147
|
+
```
|
|
148
|
+
"""
|
|
107
149
|
|
|
108
150
|
model_config = ConfigDict(title="Image Generation Tool")
|
|
109
151
|
|
|
110
|
-
|
|
152
|
+
builtin_type: Literal["image_generation"] = Field("image_generation", init=False)
|
|
111
153
|
"""Image generation builtin tool."""
|
|
112
154
|
|
|
113
155
|
background: Literal["transparent", "opaque", "auto"] = Field(
|
|
@@ -184,11 +226,19 @@ class ImageGenerationToolConfig(BaseBuiltinToolConfig):
|
|
|
184
226
|
|
|
185
227
|
|
|
186
228
|
class MemoryToolConfig(BaseBuiltinToolConfig):
|
|
187
|
-
"""Configuration for PydanticAI memory builtin tool.
|
|
229
|
+
"""Configuration for PydanticAI memory builtin tool.
|
|
230
|
+
|
|
231
|
+
Example:
|
|
232
|
+
```yaml
|
|
233
|
+
tools:
|
|
234
|
+
- type: builtin
|
|
235
|
+
builtin_type: memory
|
|
236
|
+
```
|
|
237
|
+
"""
|
|
188
238
|
|
|
189
239
|
model_config = ConfigDict(title="Memory Tool")
|
|
190
240
|
|
|
191
|
-
|
|
241
|
+
builtin_type: Literal["memory"] = Field("memory", init=False)
|
|
192
242
|
"""Memory builtin tool."""
|
|
193
243
|
|
|
194
244
|
def get_builtin_tool(self) -> MemoryTool:
|
|
@@ -197,11 +247,21 @@ class MemoryToolConfig(BaseBuiltinToolConfig):
|
|
|
197
247
|
|
|
198
248
|
|
|
199
249
|
class MCPServerToolConfig(BaseBuiltinToolConfig):
|
|
200
|
-
"""Configuration for PydanticAI MCP server builtin tool.
|
|
250
|
+
"""Configuration for PydanticAI MCP server builtin tool.
|
|
251
|
+
|
|
252
|
+
Example:
|
|
253
|
+
```yaml
|
|
254
|
+
tools:
|
|
255
|
+
- type: builtin
|
|
256
|
+
builtin_type: mcp_server
|
|
257
|
+
id: my_server
|
|
258
|
+
url: https://api.example.com/mcp
|
|
259
|
+
```
|
|
260
|
+
"""
|
|
201
261
|
|
|
202
262
|
model_config = ConfigDict(title="MCP Server Tool")
|
|
203
263
|
|
|
204
|
-
|
|
264
|
+
builtin_type: Literal["mcp_server"] = Field("mcp_server", init=False)
|
|
205
265
|
"""MCP server builtin tool."""
|
|
206
266
|
|
|
207
267
|
server_id: str = Field(
|
|
@@ -224,12 +284,7 @@ class MCPServerToolConfig(BaseBuiltinToolConfig):
|
|
|
224
284
|
)
|
|
225
285
|
"""Authorization header to use when making requests to the MCP server."""
|
|
226
286
|
|
|
227
|
-
description
|
|
228
|
-
default=None,
|
|
229
|
-
examples=["External API tools", "Code execution server"],
|
|
230
|
-
title="Server description",
|
|
231
|
-
)
|
|
232
|
-
"""A description of the MCP server."""
|
|
287
|
+
# description is inherited from BaseToolConfig
|
|
233
288
|
|
|
234
289
|
allowed_tools: list[str] | None = Field(
|
|
235
290
|
default=None,
|
|
@@ -253,7 +308,7 @@ class MCPServerToolConfig(BaseBuiltinToolConfig):
|
|
|
253
308
|
)
|
|
254
309
|
|
|
255
310
|
|
|
256
|
-
# Union type for builtin tool configs
|
|
311
|
+
# Union type for builtin tool configs (sub-discriminated by builtin_type)
|
|
257
312
|
BuiltinToolConfig = Annotated[
|
|
258
313
|
WebSearchToolConfig
|
|
259
314
|
| CodeExecutionToolConfig
|
|
@@ -261,5 +316,5 @@ BuiltinToolConfig = Annotated[
|
|
|
261
316
|
| ImageGenerationToolConfig
|
|
262
317
|
| MemoryToolConfig
|
|
263
318
|
| MCPServerToolConfig,
|
|
264
|
-
Field(discriminator="
|
|
319
|
+
Field(discriminator="builtin_type"),
|
|
265
320
|
]
|