agentpool 2.2.3__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 +0 -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/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 +18 -49
- 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/task/supervisor.py +2 -2
- acp/utils.py +2 -2
- agentpool/__init__.py +2 -0
- agentpool/agents/acp_agent/acp_agent.py +278 -263
- agentpool/agents/acp_agent/acp_converters.py +150 -17
- agentpool/agents/acp_agent/client_handler.py +35 -24
- agentpool/agents/acp_agent/session_state.py +14 -6
- agentpool/agents/agent.py +471 -643
- agentpool/agents/agui_agent/agui_agent.py +104 -107
- agentpool/agents/agui_agent/helpers.py +3 -4
- agentpool/agents/base_agent.py +485 -32
- 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 +654 -334
- agentpool/agents/claude_code_agent/converters.py +4 -141
- 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/events/__init__.py +22 -0
- agentpool/agents/events/builtin_handlers.py +65 -0
- agentpool/agents/events/event_emitter.py +3 -0
- agentpool/agents/events/events.py +84 -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 +13 -0
- agentpool/agents/slashed_agent.py +5 -4
- agentpool/agents/tool_wrapping.py +18 -6
- agentpool/common_types.py +35 -21
- 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 +9 -8
- agentpool/config_resources/external_acp_agents.yml +2 -1
- agentpool/delegation/base_team.py +4 -30
- agentpool/delegation/pool.py +104 -265
- agentpool/delegation/team.py +57 -57
- agentpool/delegation/teamrun.py +50 -55
- agentpool/functional/run.py +10 -4
- agentpool/mcp_server/client.py +73 -38
- agentpool/mcp_server/conversions.py +54 -13
- agentpool/mcp_server/manager.py +9 -23
- agentpool/mcp_server/registries/official_registry_client.py +10 -1
- agentpool/mcp_server/tool_bridge.py +114 -79
- 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 +87 -8
- agentpool/messaging/messagenode.py +52 -14
- agentpool/messaging/messages.py +2 -26
- agentpool/messaging/processing.py +10 -22
- agentpool/models/__init__.py +1 -1
- agentpool/models/acp_agents/base.py +6 -2
- agentpool/models/acp_agents/mcp_capable.py +124 -15
- agentpool/models/acp_agents/non_mcp.py +0 -23
- agentpool/models/agents.py +66 -66
- agentpool/models/agui_agents.py +1 -1
- agentpool/models/claude_code_agents.py +111 -17
- agentpool/models/file_parsing.py +0 -1
- agentpool/models/manifest.py +70 -50
- agentpool/prompts/conversion_manager.py +1 -1
- agentpool/prompts/prompts.py +5 -2
- agentpool/resource_providers/__init__.py +2 -0
- agentpool/resource_providers/aggregating.py +4 -2
- agentpool/resource_providers/base.py +13 -3
- 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 +66 -12
- agentpool/resource_providers/plan_provider.py +111 -18
- agentpool/resource_providers/pool.py +5 -3
- agentpool/resource_providers/resource_info.py +111 -0
- agentpool/resource_providers/static.py +2 -2
- agentpool/sessions/__init__.py +2 -0
- agentpool/sessions/manager.py +2 -3
- agentpool/sessions/models.py +9 -6
- agentpool/sessions/protocol.py +28 -0
- agentpool/sessions/session.py +11 -55
- agentpool/storage/manager.py +361 -54
- agentpool/talk/registry.py +4 -4
- agentpool/talk/talk.py +9 -10
- agentpool/testing.py +1 -1
- 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/streams.py +21 -96
- agentpool/vfs_registry.py +7 -2
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/METADATA +16 -22
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/RECORD +242 -195
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
- agentpool_cli/__main__.py +20 -0
- agentpool_cli/create.py +1 -1
- agentpool_cli/serve_acp.py +59 -1
- agentpool_cli/serve_opencode.py +1 -1
- agentpool_cli/ui.py +557 -0
- agentpool_commands/__init__.py +12 -5
- agentpool_commands/agents.py +1 -1
- 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/utils.py +31 -32
- agentpool_config/__init__.py +30 -2
- agentpool_config/agentpool_tools.py +498 -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 +1 -5
- agentpool_config/nodes.py +1 -1
- agentpool_config/observability.py +44 -0
- agentpool_config/session.py +0 -3
- agentpool_config/storage.py +38 -39
- agentpool_config/task.py +3 -3
- agentpool_config/tools.py +11 -28
- agentpool_config/toolsets.py +22 -90
- agentpool_server/a2a_server/agent_worker.py +307 -0
- agentpool_server/a2a_server/server.py +23 -18
- agentpool_server/acp_server/acp_agent.py +125 -56
- agentpool_server/acp_server/commands/acp_commands.py +46 -216
- agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +8 -7
- agentpool_server/acp_server/event_converter.py +651 -0
- agentpool_server/acp_server/input_provider.py +53 -10
- agentpool_server/acp_server/server.py +1 -11
- agentpool_server/acp_server/session.py +90 -410
- 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/ENDPOINTS.md +53 -14
- agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
- agentpool_server/opencode_server/__init__.py +0 -8
- agentpool_server/opencode_server/converters.py +132 -26
- agentpool_server/opencode_server/input_provider.py +160 -8
- agentpool_server/opencode_server/models/__init__.py +42 -20
- agentpool_server/opencode_server/models/app.py +12 -0
- agentpool_server/opencode_server/models/events.py +203 -29
- agentpool_server/opencode_server/models/mcp.py +19 -0
- agentpool_server/opencode_server/models/message.py +18 -1
- agentpool_server/opencode_server/models/parts.py +134 -1
- agentpool_server/opencode_server/models/question.py +56 -0
- agentpool_server/opencode_server/models/session.py +13 -1
- agentpool_server/opencode_server/routes/__init__.py +4 -0
- agentpool_server/opencode_server/routes/agent_routes.py +33 -2
- agentpool_server/opencode_server/routes/app_routes.py +66 -3
- agentpool_server/opencode_server/routes/config_routes.py +66 -5
- agentpool_server/opencode_server/routes/file_routes.py +184 -5
- agentpool_server/opencode_server/routes/global_routes.py +1 -1
- agentpool_server/opencode_server/routes/lsp_routes.py +1 -1
- agentpool_server/opencode_server/routes/message_routes.py +122 -66
- agentpool_server/opencode_server/routes/permission_routes.py +63 -0
- agentpool_server/opencode_server/routes/pty_routes.py +23 -22
- agentpool_server/opencode_server/routes/question_routes.py +128 -0
- agentpool_server/opencode_server/routes/session_routes.py +139 -68
- agentpool_server/opencode_server/routes/tui_routes.py +1 -1
- agentpool_server/opencode_server/server.py +47 -2
- agentpool_server/opencode_server/state.py +30 -0
- agentpool_storage/__init__.py +0 -4
- agentpool_storage/base.py +81 -2
- agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
- agentpool_storage/claude_provider/__init__.py +42 -0
- agentpool_storage/{claude_provider.py → claude_provider/provider.py} +190 -8
- agentpool_storage/file_provider.py +149 -15
- agentpool_storage/memory_provider.py +132 -12
- 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/session_store.py +20 -6
- agentpool_storage/sql_provider/sql_provider.py +135 -2
- agentpool_storage/sql_provider/utils.py +2 -12
- 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 -4
- agentpool_toolsets/builtin/code.py +4 -4
- agentpool_toolsets/builtin/debug.py +115 -40
- agentpool_toolsets/builtin/execution_environment.py +54 -165
- agentpool_toolsets/builtin/skills.py +0 -77
- 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/grep.py +25 -5
- agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
- agentpool_toolsets/fsspec_toolset/toolset.py +350 -66
- agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
- agentpool_toolsets/mcp_discovery/toolset.py +74 -17
- agentpool_toolsets/mcp_run_toolset.py +8 -11
- agentpool_toolsets/notifications.py +33 -33
- agentpool_toolsets/openapi.py +3 -1
- agentpool_toolsets/search_toolset.py +3 -1
- 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/opencode_provider.py +0 -730
- agentpool_storage/text_log_provider.py +0 -276
- agentpool_toolsets/builtin/chain.py +0 -288
- agentpool_toolsets/builtin/user_interaction.py +0 -52
- agentpool_toolsets/semantic_memory_toolset.py +0 -536
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/licenses/LICENSE +0 -0
agentpool_config/session.py
CHANGED
|
@@ -103,9 +103,6 @@ class SessionQuery(Schema):
|
|
|
103
103
|
limit: int | None = Field(default=None, examples=[10, 50, 100], title="Message limit")
|
|
104
104
|
"""Maximum number of messages to return."""
|
|
105
105
|
|
|
106
|
-
include_forwarded: bool = Field(default=True, title="Include forwarded messages")
|
|
107
|
-
"""Whether to include messages forwarded through agents."""
|
|
108
|
-
|
|
109
106
|
model_config = ConfigDict(frozen=True)
|
|
110
107
|
|
|
111
108
|
def get_time_cutoff(self) -> datetime | None:
|
agentpool_config/storage.py
CHANGED
|
@@ -19,7 +19,6 @@ if TYPE_CHECKING:
|
|
|
19
19
|
from agentpool.sessions.store import SessionStore
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
LogFormat = Literal["chronological", "conversations"]
|
|
23
22
|
FilterMode = Literal["and", "override"]
|
|
24
23
|
|
|
25
24
|
APP_NAME: Final = "agentpool"
|
|
@@ -27,8 +26,10 @@ APP_AUTHOR: Final = "agentpool"
|
|
|
27
26
|
DATA_DIR: Final = Path(user_data_dir(APP_NAME, APP_AUTHOR))
|
|
28
27
|
DEFAULT_DB_NAME: Final = "history.db"
|
|
29
28
|
DEFAULT_TITLE_PROMPT: Final = """\
|
|
30
|
-
Generate
|
|
31
|
-
|
|
29
|
+
Generate metadata for this conversation request. Provide:
|
|
30
|
+
- A short, descriptive title (3-7 words)
|
|
31
|
+
- A single emoji that represents the topic
|
|
32
|
+
- An iconify icon name (e.g., 'mdi:code-braces', 'mdi:database', 'mdi:bug')"""
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
def get_database_path() -> str:
|
|
@@ -104,38 +105,6 @@ class SQLStorageConfig(BaseStorageProviderConfig):
|
|
|
104
105
|
return create_async_engine(url_str, pool_size=self.pool_size)
|
|
105
106
|
|
|
106
107
|
|
|
107
|
-
class TextLogConfig(BaseStorageProviderConfig):
|
|
108
|
-
"""Text log configuration."""
|
|
109
|
-
|
|
110
|
-
model_config = ConfigDict(json_schema_extra={"x-doc-title": "Text Log"})
|
|
111
|
-
|
|
112
|
-
type: Literal["text_file"] = Field("text_file", init=False)
|
|
113
|
-
"""Text log storage configuration."""
|
|
114
|
-
|
|
115
|
-
path: str = Field(
|
|
116
|
-
examples=["/var/log/agent.log", "~/logs/conversations.txt"],
|
|
117
|
-
title="Log file path",
|
|
118
|
-
)
|
|
119
|
-
"""Path to log file"""
|
|
120
|
-
|
|
121
|
-
format: LogFormat = Field(
|
|
122
|
-
default="chronological",
|
|
123
|
-
examples=["chronological", "conversations"],
|
|
124
|
-
title="Log format",
|
|
125
|
-
)
|
|
126
|
-
"""Log format template to use"""
|
|
127
|
-
|
|
128
|
-
template: Literal["chronological", "conversations"] | str | None = Field( # noqa: PYI051
|
|
129
|
-
default="chronological",
|
|
130
|
-
examples=["chronological", "conversations", "/path/to/template.j2"],
|
|
131
|
-
title="Template",
|
|
132
|
-
)
|
|
133
|
-
"""Template to use: either predefined name or path to custom template"""
|
|
134
|
-
|
|
135
|
-
encoding: str = Field(default="utf-8", examples=["utf-8", "ascii"], title="File encoding")
|
|
136
|
-
"""File encoding"""
|
|
137
|
-
|
|
138
|
-
|
|
139
108
|
class FileStorageConfig(BaseStorageProviderConfig):
|
|
140
109
|
"""File storage configuration."""
|
|
141
110
|
|
|
@@ -210,13 +179,35 @@ class OpenCodeStorageConfig(BaseStorageProviderConfig):
|
|
|
210
179
|
"""Path to OpenCode storage directory."""
|
|
211
180
|
|
|
212
181
|
|
|
182
|
+
class ZedStorageConfig(BaseStorageProviderConfig):
|
|
183
|
+
"""Zed IDE native storage format configuration.
|
|
184
|
+
|
|
185
|
+
Reads from Zed's native SQLite + zstd-compressed JSON format.
|
|
186
|
+
Useful for importing conversation history from Zed's AI assistant.
|
|
187
|
+
|
|
188
|
+
This is a READ-ONLY provider - it cannot write back to Zed's format.
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
model_config = ConfigDict(json_schema_extra={"x-doc-title": "Zed Storage"})
|
|
192
|
+
|
|
193
|
+
type: Literal["zed"] = Field("zed", init=False)
|
|
194
|
+
"""Zed IDE native storage configuration."""
|
|
195
|
+
|
|
196
|
+
path: str = Field(
|
|
197
|
+
default="~/.local/share/zed/threads/threads.db",
|
|
198
|
+
examples=["~/.local/share/zed/threads/threads.db", "~/.local/share/zed"],
|
|
199
|
+
title="Zed threads database path",
|
|
200
|
+
)
|
|
201
|
+
"""Path to Zed threads database (or parent directory)."""
|
|
202
|
+
|
|
203
|
+
|
|
213
204
|
StorageProviderConfig = Annotated[
|
|
214
205
|
SQLStorageConfig
|
|
215
206
|
| FileStorageConfig
|
|
216
|
-
| TextLogConfig
|
|
217
207
|
| MemoryStorageConfig
|
|
218
208
|
| ClaudeStorageConfig
|
|
219
|
-
| OpenCodeStorageConfig
|
|
209
|
+
| OpenCodeStorageConfig
|
|
210
|
+
| ZedStorageConfig,
|
|
220
211
|
Field(discriminator="type"),
|
|
221
212
|
]
|
|
222
213
|
|
|
@@ -282,8 +273,12 @@ class StorageConfig(Schema):
|
|
|
282
273
|
"""Whether to log additions to the context."""
|
|
283
274
|
|
|
284
275
|
title_generation_model: ModelId | str | None = Field(
|
|
285
|
-
default="google-gla:gemini-2.5-flash-lite",
|
|
286
|
-
examples=[
|
|
276
|
+
default="google-gla:gemini-2.5-flash-lite,openrouter:deepseek/deepseek-r1-0528:free",
|
|
277
|
+
examples=[
|
|
278
|
+
"google-gla:gemini-2.5-flash-lite",
|
|
279
|
+
"google-gla:gemini-2.5-flash-lite,openrouter:deepseek/deepseek-r1-0528:free",
|
|
280
|
+
None,
|
|
281
|
+
],
|
|
287
282
|
title="Title generation model",
|
|
288
283
|
)
|
|
289
284
|
"""Model to use for generating conversation titles.
|
|
@@ -318,6 +313,10 @@ class StorageConfig(Schema):
|
|
|
318
313
|
from agentpool.sessions.store import MemorySessionStore
|
|
319
314
|
from agentpool_storage.session_store import SQLSessionStore
|
|
320
315
|
|
|
316
|
+
# Use memory store during tests
|
|
317
|
+
if os.getenv("PYTEST_CURRENT_TEST"):
|
|
318
|
+
return MemorySessionStore()
|
|
319
|
+
|
|
321
320
|
match self.session_store:
|
|
322
321
|
case "memory":
|
|
323
322
|
return MemorySessionStore()
|
agentpool_config/task.py
CHANGED
|
@@ -23,7 +23,7 @@ class Job[TDeps, TResult = str](Schema):
|
|
|
23
23
|
|
|
24
24
|
Requirements:
|
|
25
25
|
- The agent must have compatible dependencies (required_dependency)
|
|
26
|
-
- The agent must produce the specified result type (
|
|
26
|
+
- The agent must produce the specified result type (required_output_type)
|
|
27
27
|
|
|
28
28
|
Equipment:
|
|
29
29
|
- The task provides necessary tools for execution (tools)
|
|
@@ -54,7 +54,7 @@ class Job[TDeps, TResult = str](Schema):
|
|
|
54
54
|
)
|
|
55
55
|
"""The task instruction/prompt."""
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
required_output_type: ImportString[type[TResult]] = Field(
|
|
58
58
|
default="str",
|
|
59
59
|
validate_default=True,
|
|
60
60
|
examples=["str", "dict", "builtins:str"],
|
|
@@ -120,7 +120,7 @@ class Job[TDeps, TResult = str](Schema):
|
|
|
120
120
|
):
|
|
121
121
|
return False
|
|
122
122
|
|
|
123
|
-
if agent._output_type != self.
|
|
123
|
+
if agent._output_type != self.required_output_type:
|
|
124
124
|
return False
|
|
125
125
|
|
|
126
126
|
# Check vision capabilities
|
agentpool_config/tools.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
from typing import TYPE_CHECKING,
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
7
7
|
|
|
8
8
|
from pydantic import ConfigDict, Field, ImportString
|
|
9
9
|
from schemez import Schema
|
|
@@ -56,26 +56,9 @@ class BaseToolConfig(Schema):
|
|
|
56
56
|
requires_confirmation: bool = Field(default=False, title="Requires confirmation")
|
|
57
57
|
"""Whether tool execution needs confirmation."""
|
|
58
58
|
|
|
59
|
-
metadata: dict[str, str] = Field(
|
|
60
|
-
default_factory=dict,
|
|
61
|
-
examples=[
|
|
62
|
-
{"category": "web", "version": "1.0"},
|
|
63
|
-
{"author": "system", "tags": "search,utility"},
|
|
64
|
-
{"priority": "high", "environment": "production"},
|
|
65
|
-
],
|
|
66
|
-
title="Tool metadata",
|
|
67
|
-
)
|
|
59
|
+
metadata: dict[str, str] = Field(default_factory=dict, title="Tool metadata")
|
|
68
60
|
"""Additional tool metadata."""
|
|
69
61
|
|
|
70
|
-
hints: ToolHints | None = Field(
|
|
71
|
-
default=None,
|
|
72
|
-
title="Execution hints",
|
|
73
|
-
examples=[
|
|
74
|
-
{"read_only": True, "destructive": False, "open_world": True, "idempotent": False},
|
|
75
|
-
],
|
|
76
|
-
)
|
|
77
|
-
"""Hints for tool execution."""
|
|
78
|
-
|
|
79
62
|
model_config = ConfigDict(frozen=True)
|
|
80
63
|
|
|
81
64
|
def get_tool(self) -> Tool:
|
|
@@ -95,6 +78,15 @@ class ImportToolConfig(BaseToolConfig):
|
|
|
95
78
|
)
|
|
96
79
|
"""Import path to the tool function."""
|
|
97
80
|
|
|
81
|
+
hints: ToolHints | None = Field(
|
|
82
|
+
default=None,
|
|
83
|
+
title="Execution hints",
|
|
84
|
+
examples=[
|
|
85
|
+
{"read_only": True, "destructive": False, "open_world": True, "idempotent": False},
|
|
86
|
+
],
|
|
87
|
+
)
|
|
88
|
+
"""Hints for tool execution."""
|
|
89
|
+
|
|
98
90
|
def get_tool(self) -> Tool:
|
|
99
91
|
"""Import and create tool from configuration."""
|
|
100
92
|
from agentpool.tools.base import Tool
|
|
@@ -107,12 +99,3 @@ class ImportToolConfig(BaseToolConfig):
|
|
|
107
99
|
requires_confirmation=self.requires_confirmation,
|
|
108
100
|
metadata=self.metadata,
|
|
109
101
|
)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
from agentpool_config.builtin_tools import BuiltinToolConfig # noqa: E402
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
ToolConfig = Annotated[
|
|
116
|
-
ImportToolConfig | BuiltinToolConfig,
|
|
117
|
-
Field(discriminator="type"),
|
|
118
|
-
]
|
agentpool_config/toolsets.py
CHANGED
|
@@ -5,11 +5,11 @@ from __future__ import annotations
|
|
|
5
5
|
import os
|
|
6
6
|
from typing import TYPE_CHECKING, Annotated, Literal, cast
|
|
7
7
|
|
|
8
|
-
from
|
|
9
|
-
from
|
|
8
|
+
from exxec_config import ExecutionEnvironmentConfig
|
|
9
|
+
from llmling_models_config import AnyModelConfig
|
|
10
10
|
from pydantic import ConfigDict, EmailStr, Field, HttpUrl, SecretStr
|
|
11
11
|
from schemez import Schema
|
|
12
|
-
from
|
|
12
|
+
from searchly_config import (
|
|
13
13
|
NewsSearchProviderConfig,
|
|
14
14
|
NewsSearchProviderName,
|
|
15
15
|
WebSearchProviderConfig,
|
|
@@ -18,8 +18,8 @@ from searchly.config import (
|
|
|
18
18
|
)
|
|
19
19
|
from tokonomics.model_names import ModelId
|
|
20
20
|
from upathtools import UPath
|
|
21
|
-
from
|
|
22
|
-
from
|
|
21
|
+
from upathtools_config import FilesystemConfigType
|
|
22
|
+
from upathtools_config.base import FileSystemConfig
|
|
23
23
|
|
|
24
24
|
from agentpool_config.converters import ConversionConfig
|
|
25
25
|
from agentpool_config.tools import ImportToolConfig
|
|
@@ -49,11 +49,10 @@ ExecutionEnvironmentToolName = Literal[
|
|
|
49
49
|
"list_processes",
|
|
50
50
|
]
|
|
51
51
|
|
|
52
|
-
UserInteractionToolName = Literal["ask_user",]
|
|
53
52
|
SkillsToolName = Literal["load_skill", "list_skills"]
|
|
54
53
|
CodeToolName = Literal["format_code", "ast_grep"]
|
|
55
54
|
PlanToolName = Literal["get_plan", "add_plan_entry", "update_plan_entry", "remove_plan_entry"]
|
|
56
|
-
PlanToolMode = Literal["granular", "declarative"
|
|
55
|
+
PlanToolMode = Literal["granular", "declarative"]
|
|
57
56
|
|
|
58
57
|
|
|
59
58
|
class BaseToolsetConfig(Schema):
|
|
@@ -235,24 +234,24 @@ class WorkersToolsetConfig(BaseToolsetConfig):
|
|
|
235
234
|
return WorkersTools(workers=self.workers, name="workers")
|
|
236
235
|
|
|
237
236
|
|
|
238
|
-
class
|
|
239
|
-
"""Configuration for
|
|
237
|
+
class ProcessManagementToolsetConfig(BaseToolsetConfig):
|
|
238
|
+
"""Configuration for process management toolset (code + process management)."""
|
|
240
239
|
|
|
241
240
|
model_config = ConfigDict(
|
|
242
241
|
json_schema_extra={
|
|
243
242
|
"x-icon": "octicon:terminal-16",
|
|
244
|
-
"x-doc-title": "
|
|
243
|
+
"x-doc-title": "Process management Toolset",
|
|
245
244
|
}
|
|
246
245
|
)
|
|
247
246
|
|
|
248
|
-
type: Literal["
|
|
249
|
-
"""
|
|
247
|
+
type: Literal["process_management"] = Field("process_management", init=False)
|
|
248
|
+
"""Process management toolset."""
|
|
250
249
|
|
|
251
250
|
environment: ExecutionEnvironmentConfig | None = Field(
|
|
252
251
|
default=None,
|
|
253
|
-
title="
|
|
252
|
+
title="Process management",
|
|
254
253
|
)
|
|
255
|
-
"""Optional
|
|
254
|
+
"""Optional Process management configuration (defaults to local)."""
|
|
256
255
|
|
|
257
256
|
tools: dict[ExecutionEnvironmentToolName, bool] | None = Field(
|
|
258
257
|
default=None,
|
|
@@ -261,42 +260,11 @@ class ExecutionEnvironmentToolsetConfig(BaseToolsetConfig):
|
|
|
261
260
|
"""Optional tool filter to enable/disable specific tools."""
|
|
262
261
|
|
|
263
262
|
def get_provider(self) -> ResourceProvider:
|
|
264
|
-
"""Create
|
|
265
|
-
from agentpool_toolsets.builtin import
|
|
263
|
+
"""Create Process management tools provider."""
|
|
264
|
+
from agentpool_toolsets.builtin import ProcessManagementTools
|
|
266
265
|
|
|
267
266
|
env = self.environment.get_provider() if self.environment else None
|
|
268
|
-
provider =
|
|
269
|
-
if self.tools is not None:
|
|
270
|
-
from agentpool.resource_providers import FilteringResourceProvider
|
|
271
|
-
|
|
272
|
-
return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
|
|
273
|
-
return provider
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
class UserInteractionToolsetConfig(BaseToolsetConfig):
|
|
277
|
-
"""Configuration for user interaction toolset."""
|
|
278
|
-
|
|
279
|
-
model_config = ConfigDict(
|
|
280
|
-
json_schema_extra={
|
|
281
|
-
"x-icon": "octicon:comment-discussion-16",
|
|
282
|
-
"x-doc-title": "User Interaction Toolset",
|
|
283
|
-
}
|
|
284
|
-
)
|
|
285
|
-
|
|
286
|
-
type: Literal["user_interaction"] = Field("user_interaction", init=False)
|
|
287
|
-
"""User interaction toolset."""
|
|
288
|
-
|
|
289
|
-
tools: dict[UserInteractionToolName, bool] | None = Field(
|
|
290
|
-
default=None,
|
|
291
|
-
title="Tool filter",
|
|
292
|
-
)
|
|
293
|
-
"""Optional tool filter to enable/disable specific tools."""
|
|
294
|
-
|
|
295
|
-
def get_provider(self) -> ResourceProvider:
|
|
296
|
-
"""Create user interaction tools provider."""
|
|
297
|
-
from agentpool_toolsets.builtin import UserInteractionTools
|
|
298
|
-
|
|
299
|
-
provider = UserInteractionTools(name="user_interaction")
|
|
267
|
+
provider = ProcessManagementTools(env=env, name="process_management")
|
|
300
268
|
if self.tools is not None:
|
|
301
269
|
from agentpool.resource_providers import FilteringResourceProvider
|
|
302
270
|
|
|
@@ -644,41 +612,6 @@ class NotificationsToolsetConfig(BaseToolsetConfig):
|
|
|
644
612
|
return NotificationsTools(channels=self.channels)
|
|
645
613
|
|
|
646
614
|
|
|
647
|
-
class SemanticMemoryToolsetConfig(BaseToolsetConfig):
|
|
648
|
-
"""Configuration for semantic memory / knowledge processing toolset."""
|
|
649
|
-
|
|
650
|
-
model_config = ConfigDict(
|
|
651
|
-
json_schema_extra={
|
|
652
|
-
"x-icon": "octicon:database-16",
|
|
653
|
-
"x-doc-title": "Semantic Memory Toolset",
|
|
654
|
-
}
|
|
655
|
-
)
|
|
656
|
-
|
|
657
|
-
type: Literal["semantic_memory"] = Field("semantic_memory", init=False)
|
|
658
|
-
"""Semantic memory toolset using TypeAgent's KnowPro."""
|
|
659
|
-
|
|
660
|
-
model: str | ModelId | AnyModelConfig | None = Field(
|
|
661
|
-
default=None,
|
|
662
|
-
examples=["openai:gpt-4o", "anthropic:claude-sonnet-4-20250514"],
|
|
663
|
-
title="Model for LLM sampling",
|
|
664
|
-
)
|
|
665
|
-
"""Model to use for query translation and answer generation."""
|
|
666
|
-
|
|
667
|
-
dbname: str | None = Field(
|
|
668
|
-
default=None,
|
|
669
|
-
examples=["knowledge.db", "/path/to/memory.db"],
|
|
670
|
-
title="Database path",
|
|
671
|
-
)
|
|
672
|
-
"""SQLite database path for persistent storage, or None for in-memory."""
|
|
673
|
-
|
|
674
|
-
def get_provider(self) -> ResourceProvider:
|
|
675
|
-
"""Create semantic memory tools provider."""
|
|
676
|
-
from agentpool_toolsets.semantic_memory_toolset import SemanticMemoryTools
|
|
677
|
-
|
|
678
|
-
model = m if isinstance(m := self.model, str) or m is None else m.get_model()
|
|
679
|
-
return SemanticMemoryTools(model=model, dbname=self.dbname)
|
|
680
|
-
|
|
681
|
-
|
|
682
615
|
class CustomToolsetConfig(BaseToolsetConfig):
|
|
683
616
|
"""Configuration for custom toolsets."""
|
|
684
617
|
|
|
@@ -847,13 +780,14 @@ class PlanToolsetConfig(BaseToolsetConfig):
|
|
|
847
780
|
"""Plan toolset."""
|
|
848
781
|
|
|
849
782
|
mode: PlanToolMode = Field(
|
|
850
|
-
default="
|
|
783
|
+
default="declarative",
|
|
851
784
|
title="Plan tool mode",
|
|
852
785
|
)
|
|
853
786
|
"""Tool mode:
|
|
854
|
-
- '
|
|
855
|
-
|
|
856
|
-
- '
|
|
787
|
+
- 'declarative': Single set_plan tool with full list (default, recommended)
|
|
788
|
+
- Fewer calls, better UX with parallel updates
|
|
789
|
+
- 'granular': Separate tools (get/add/update/remove)
|
|
790
|
+
- For simpler models or fine-grained control
|
|
857
791
|
"""
|
|
858
792
|
|
|
859
793
|
tools: dict[PlanToolName, bool] | None = Field(
|
|
@@ -954,8 +888,7 @@ ToolsetConfig = Annotated[
|
|
|
954
888
|
OpenAPIToolsetConfig
|
|
955
889
|
| EntryPointToolsetConfig
|
|
956
890
|
| ComposioToolSetConfig
|
|
957
|
-
|
|
|
958
|
-
| UserInteractionToolsetConfig
|
|
891
|
+
| ProcessManagementToolsetConfig
|
|
959
892
|
| SkillsToolsetConfig
|
|
960
893
|
| CodeToolsetConfig
|
|
961
894
|
| FSSpecToolsetConfig
|
|
@@ -966,7 +899,6 @@ ToolsetConfig = Annotated[
|
|
|
966
899
|
| RemoteCodeModeToolsetConfig
|
|
967
900
|
| SearchToolsetConfig
|
|
968
901
|
| NotificationsToolsetConfig
|
|
969
|
-
| SemanticMemoryToolsetConfig
|
|
970
902
|
| ConfigCreationToolsetConfig
|
|
971
903
|
| ImportToolsToolsetConfig
|
|
972
904
|
| PlanToolsetConfig
|