agentpool 2.1.9__py3-none-any.whl → 2.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. acp/__init__.py +13 -4
  2. acp/acp_requests.py +20 -77
  3. acp/agent/connection.py +8 -0
  4. acp/agent/implementations/debug_server/debug_server.py +6 -2
  5. acp/agent/protocol.py +6 -0
  6. acp/bridge/README.md +15 -2
  7. acp/bridge/__init__.py +3 -2
  8. acp/bridge/__main__.py +60 -19
  9. acp/bridge/ws_server.py +173 -0
  10. acp/bridge/ws_server_cli.py +89 -0
  11. acp/client/connection.py +38 -29
  12. acp/client/implementations/default_client.py +3 -2
  13. acp/client/implementations/headless_client.py +2 -2
  14. acp/connection.py +2 -2
  15. acp/notifications.py +20 -50
  16. acp/schema/__init__.py +2 -0
  17. acp/schema/agent_responses.py +21 -0
  18. acp/schema/client_requests.py +3 -3
  19. acp/schema/session_state.py +63 -29
  20. acp/stdio.py +39 -9
  21. acp/task/supervisor.py +2 -2
  22. acp/transports.py +362 -2
  23. acp/utils.py +17 -4
  24. agentpool/__init__.py +6 -1
  25. agentpool/agents/__init__.py +2 -0
  26. agentpool/agents/acp_agent/acp_agent.py +407 -277
  27. agentpool/agents/acp_agent/acp_converters.py +196 -38
  28. agentpool/agents/acp_agent/client_handler.py +191 -26
  29. agentpool/agents/acp_agent/session_state.py +17 -6
  30. agentpool/agents/agent.py +607 -572
  31. agentpool/agents/agui_agent/__init__.py +0 -2
  32. agentpool/agents/agui_agent/agui_agent.py +176 -110
  33. agentpool/agents/agui_agent/agui_converters.py +0 -131
  34. agentpool/agents/agui_agent/helpers.py +3 -4
  35. agentpool/agents/base_agent.py +632 -17
  36. agentpool/agents/claude_code_agent/FORKING.md +191 -0
  37. agentpool/agents/claude_code_agent/__init__.py +13 -1
  38. agentpool/agents/claude_code_agent/claude_code_agent.py +1058 -291
  39. agentpool/agents/claude_code_agent/converters.py +74 -143
  40. agentpool/agents/claude_code_agent/history.py +474 -0
  41. agentpool/agents/claude_code_agent/models.py +77 -0
  42. agentpool/agents/claude_code_agent/static_info.py +100 -0
  43. agentpool/agents/claude_code_agent/usage.py +242 -0
  44. agentpool/agents/context.py +40 -0
  45. agentpool/agents/events/__init__.py +24 -0
  46. agentpool/agents/events/builtin_handlers.py +67 -1
  47. agentpool/agents/events/event_emitter.py +32 -2
  48. agentpool/agents/events/events.py +104 -3
  49. agentpool/agents/events/infer_info.py +145 -0
  50. agentpool/agents/events/processors.py +254 -0
  51. agentpool/agents/interactions.py +41 -6
  52. agentpool/agents/modes.py +67 -0
  53. agentpool/agents/slashed_agent.py +5 -4
  54. agentpool/agents/tool_call_accumulator.py +213 -0
  55. agentpool/agents/tool_wrapping.py +18 -6
  56. agentpool/common_types.py +56 -21
  57. agentpool/config_resources/__init__.py +38 -1
  58. agentpool/config_resources/acp_assistant.yml +2 -2
  59. agentpool/config_resources/agents.yml +3 -0
  60. agentpool/config_resources/agents_template.yml +1 -0
  61. agentpool/config_resources/claude_code_agent.yml +10 -6
  62. agentpool/config_resources/external_acp_agents.yml +2 -1
  63. agentpool/delegation/base_team.py +4 -30
  64. agentpool/delegation/pool.py +136 -289
  65. agentpool/delegation/team.py +58 -57
  66. agentpool/delegation/teamrun.py +51 -55
  67. agentpool/diagnostics/__init__.py +53 -0
  68. agentpool/diagnostics/lsp_manager.py +1593 -0
  69. agentpool/diagnostics/lsp_proxy.py +41 -0
  70. agentpool/diagnostics/lsp_proxy_script.py +229 -0
  71. agentpool/diagnostics/models.py +398 -0
  72. agentpool/functional/run.py +10 -4
  73. agentpool/mcp_server/__init__.py +0 -2
  74. agentpool/mcp_server/client.py +76 -32
  75. agentpool/mcp_server/conversions.py +54 -13
  76. agentpool/mcp_server/manager.py +34 -54
  77. agentpool/mcp_server/registries/official_registry_client.py +35 -1
  78. agentpool/mcp_server/tool_bridge.py +186 -139
  79. agentpool/messaging/__init__.py +0 -2
  80. agentpool/messaging/compaction.py +72 -197
  81. agentpool/messaging/connection_manager.py +11 -10
  82. agentpool/messaging/event_manager.py +5 -5
  83. agentpool/messaging/message_container.py +6 -30
  84. agentpool/messaging/message_history.py +99 -8
  85. agentpool/messaging/messagenode.py +52 -14
  86. agentpool/messaging/messages.py +54 -35
  87. agentpool/messaging/processing.py +12 -22
  88. agentpool/models/__init__.py +1 -1
  89. agentpool/models/acp_agents/base.py +6 -24
  90. agentpool/models/acp_agents/mcp_capable.py +126 -157
  91. agentpool/models/acp_agents/non_mcp.py +129 -95
  92. agentpool/models/agents.py +98 -76
  93. agentpool/models/agui_agents.py +1 -1
  94. agentpool/models/claude_code_agents.py +144 -19
  95. agentpool/models/file_parsing.py +0 -1
  96. agentpool/models/manifest.py +113 -50
  97. agentpool/prompts/conversion_manager.py +1 -1
  98. agentpool/prompts/prompts.py +5 -2
  99. agentpool/repomap.py +1 -1
  100. agentpool/resource_providers/__init__.py +11 -1
  101. agentpool/resource_providers/aggregating.py +56 -5
  102. agentpool/resource_providers/base.py +70 -4
  103. agentpool/resource_providers/codemode/code_executor.py +72 -5
  104. agentpool/resource_providers/codemode/helpers.py +2 -2
  105. agentpool/resource_providers/codemode/provider.py +64 -12
  106. agentpool/resource_providers/codemode/remote_mcp_execution.py +2 -2
  107. agentpool/resource_providers/codemode/remote_provider.py +9 -12
  108. agentpool/resource_providers/filtering.py +3 -1
  109. agentpool/resource_providers/mcp_provider.py +89 -12
  110. agentpool/resource_providers/plan_provider.py +228 -46
  111. agentpool/resource_providers/pool.py +7 -3
  112. agentpool/resource_providers/resource_info.py +111 -0
  113. agentpool/resource_providers/static.py +4 -2
  114. agentpool/sessions/__init__.py +4 -1
  115. agentpool/sessions/manager.py +33 -5
  116. agentpool/sessions/models.py +59 -6
  117. agentpool/sessions/protocol.py +28 -0
  118. agentpool/sessions/session.py +11 -55
  119. agentpool/skills/registry.py +13 -8
  120. agentpool/storage/manager.py +572 -49
  121. agentpool/talk/registry.py +4 -4
  122. agentpool/talk/talk.py +9 -10
  123. agentpool/testing.py +538 -20
  124. agentpool/tool_impls/__init__.py +6 -0
  125. agentpool/tool_impls/agent_cli/__init__.py +42 -0
  126. agentpool/tool_impls/agent_cli/tool.py +95 -0
  127. agentpool/tool_impls/bash/__init__.py +64 -0
  128. agentpool/tool_impls/bash/helpers.py +35 -0
  129. agentpool/tool_impls/bash/tool.py +171 -0
  130. agentpool/tool_impls/delete_path/__init__.py +70 -0
  131. agentpool/tool_impls/delete_path/tool.py +142 -0
  132. agentpool/tool_impls/download_file/__init__.py +80 -0
  133. agentpool/tool_impls/download_file/tool.py +183 -0
  134. agentpool/tool_impls/execute_code/__init__.py +55 -0
  135. agentpool/tool_impls/execute_code/tool.py +163 -0
  136. agentpool/tool_impls/grep/__init__.py +80 -0
  137. agentpool/tool_impls/grep/tool.py +200 -0
  138. agentpool/tool_impls/list_directory/__init__.py +73 -0
  139. agentpool/tool_impls/list_directory/tool.py +197 -0
  140. agentpool/tool_impls/question/__init__.py +42 -0
  141. agentpool/tool_impls/question/tool.py +127 -0
  142. agentpool/tool_impls/read/__init__.py +104 -0
  143. agentpool/tool_impls/read/tool.py +305 -0
  144. agentpool/tools/__init__.py +2 -1
  145. agentpool/tools/base.py +114 -34
  146. agentpool/tools/manager.py +57 -1
  147. agentpool/ui/base.py +2 -2
  148. agentpool/ui/mock_provider.py +2 -2
  149. agentpool/ui/stdlib_provider.py +2 -2
  150. agentpool/utils/file_watcher.py +269 -0
  151. agentpool/utils/identifiers.py +121 -0
  152. agentpool/utils/pydantic_ai_helpers.py +46 -0
  153. agentpool/utils/streams.py +616 -2
  154. agentpool/utils/subprocess_utils.py +155 -0
  155. agentpool/utils/token_breakdown.py +461 -0
  156. agentpool/vfs_registry.py +7 -2
  157. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/METADATA +41 -27
  158. agentpool-2.5.0.dist-info/RECORD +579 -0
  159. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
  160. agentpool_cli/__main__.py +24 -0
  161. agentpool_cli/create.py +1 -1
  162. agentpool_cli/serve_acp.py +100 -21
  163. agentpool_cli/serve_agui.py +87 -0
  164. agentpool_cli/serve_opencode.py +119 -0
  165. agentpool_cli/ui.py +557 -0
  166. agentpool_commands/__init__.py +42 -5
  167. agentpool_commands/agents.py +75 -2
  168. agentpool_commands/history.py +62 -0
  169. agentpool_commands/mcp.py +176 -0
  170. agentpool_commands/models.py +56 -3
  171. agentpool_commands/pool.py +260 -0
  172. agentpool_commands/session.py +1 -1
  173. agentpool_commands/text_sharing/__init__.py +119 -0
  174. agentpool_commands/text_sharing/base.py +123 -0
  175. agentpool_commands/text_sharing/github_gist.py +80 -0
  176. agentpool_commands/text_sharing/opencode.py +462 -0
  177. agentpool_commands/text_sharing/paste_rs.py +59 -0
  178. agentpool_commands/text_sharing/pastebin.py +116 -0
  179. agentpool_commands/text_sharing/shittycodingagent.py +112 -0
  180. agentpool_commands/tools.py +57 -0
  181. agentpool_commands/utils.py +80 -30
  182. agentpool_config/__init__.py +30 -2
  183. agentpool_config/agentpool_tools.py +498 -0
  184. agentpool_config/builtin_tools.py +77 -22
  185. agentpool_config/commands.py +24 -1
  186. agentpool_config/compaction.py +258 -0
  187. agentpool_config/converters.py +1 -1
  188. agentpool_config/event_handlers.py +42 -0
  189. agentpool_config/events.py +1 -1
  190. agentpool_config/forward_targets.py +1 -4
  191. agentpool_config/jinja.py +3 -3
  192. agentpool_config/mcp_server.py +132 -6
  193. agentpool_config/nodes.py +1 -1
  194. agentpool_config/observability.py +44 -0
  195. agentpool_config/session.py +0 -3
  196. agentpool_config/storage.py +82 -38
  197. agentpool_config/task.py +3 -3
  198. agentpool_config/tools.py +11 -22
  199. agentpool_config/toolsets.py +109 -233
  200. agentpool_server/a2a_server/agent_worker.py +307 -0
  201. agentpool_server/a2a_server/server.py +23 -18
  202. agentpool_server/acp_server/acp_agent.py +234 -181
  203. agentpool_server/acp_server/commands/acp_commands.py +151 -156
  204. agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +18 -17
  205. agentpool_server/acp_server/event_converter.py +651 -0
  206. agentpool_server/acp_server/input_provider.py +53 -10
  207. agentpool_server/acp_server/server.py +24 -90
  208. agentpool_server/acp_server/session.py +173 -331
  209. agentpool_server/acp_server/session_manager.py +8 -34
  210. agentpool_server/agui_server/server.py +3 -1
  211. agentpool_server/mcp_server/server.py +5 -2
  212. agentpool_server/opencode_server/.rules +95 -0
  213. agentpool_server/opencode_server/ENDPOINTS.md +401 -0
  214. agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
  215. agentpool_server/opencode_server/__init__.py +19 -0
  216. agentpool_server/opencode_server/command_validation.py +172 -0
  217. agentpool_server/opencode_server/converters.py +975 -0
  218. agentpool_server/opencode_server/dependencies.py +24 -0
  219. agentpool_server/opencode_server/input_provider.py +421 -0
  220. agentpool_server/opencode_server/models/__init__.py +250 -0
  221. agentpool_server/opencode_server/models/agent.py +53 -0
  222. agentpool_server/opencode_server/models/app.py +72 -0
  223. agentpool_server/opencode_server/models/base.py +26 -0
  224. agentpool_server/opencode_server/models/common.py +23 -0
  225. agentpool_server/opencode_server/models/config.py +37 -0
  226. agentpool_server/opencode_server/models/events.py +821 -0
  227. agentpool_server/opencode_server/models/file.py +88 -0
  228. agentpool_server/opencode_server/models/mcp.py +44 -0
  229. agentpool_server/opencode_server/models/message.py +179 -0
  230. agentpool_server/opencode_server/models/parts.py +323 -0
  231. agentpool_server/opencode_server/models/provider.py +81 -0
  232. agentpool_server/opencode_server/models/pty.py +43 -0
  233. agentpool_server/opencode_server/models/question.py +56 -0
  234. agentpool_server/opencode_server/models/session.py +111 -0
  235. agentpool_server/opencode_server/routes/__init__.py +29 -0
  236. agentpool_server/opencode_server/routes/agent_routes.py +473 -0
  237. agentpool_server/opencode_server/routes/app_routes.py +202 -0
  238. agentpool_server/opencode_server/routes/config_routes.py +302 -0
  239. agentpool_server/opencode_server/routes/file_routes.py +571 -0
  240. agentpool_server/opencode_server/routes/global_routes.py +94 -0
  241. agentpool_server/opencode_server/routes/lsp_routes.py +319 -0
  242. agentpool_server/opencode_server/routes/message_routes.py +761 -0
  243. agentpool_server/opencode_server/routes/permission_routes.py +63 -0
  244. agentpool_server/opencode_server/routes/pty_routes.py +300 -0
  245. agentpool_server/opencode_server/routes/question_routes.py +128 -0
  246. agentpool_server/opencode_server/routes/session_routes.py +1276 -0
  247. agentpool_server/opencode_server/routes/tui_routes.py +139 -0
  248. agentpool_server/opencode_server/server.py +475 -0
  249. agentpool_server/opencode_server/state.py +151 -0
  250. agentpool_server/opencode_server/time_utils.py +8 -0
  251. agentpool_storage/__init__.py +12 -0
  252. agentpool_storage/base.py +184 -2
  253. agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
  254. agentpool_storage/claude_provider/__init__.py +42 -0
  255. agentpool_storage/claude_provider/provider.py +1089 -0
  256. agentpool_storage/file_provider.py +278 -15
  257. agentpool_storage/memory_provider.py +193 -12
  258. agentpool_storage/models.py +3 -0
  259. agentpool_storage/opencode_provider/ARCHITECTURE.md +386 -0
  260. agentpool_storage/opencode_provider/__init__.py +16 -0
  261. agentpool_storage/opencode_provider/helpers.py +414 -0
  262. agentpool_storage/opencode_provider/provider.py +895 -0
  263. agentpool_storage/project_store.py +325 -0
  264. agentpool_storage/session_store.py +26 -6
  265. agentpool_storage/sql_provider/__init__.py +4 -2
  266. agentpool_storage/sql_provider/models.py +48 -0
  267. agentpool_storage/sql_provider/sql_provider.py +269 -3
  268. agentpool_storage/sql_provider/utils.py +12 -13
  269. agentpool_storage/zed_provider/__init__.py +16 -0
  270. agentpool_storage/zed_provider/helpers.py +281 -0
  271. agentpool_storage/zed_provider/models.py +130 -0
  272. agentpool_storage/zed_provider/provider.py +442 -0
  273. agentpool_storage/zed_provider.py +803 -0
  274. agentpool_toolsets/__init__.py +0 -2
  275. agentpool_toolsets/builtin/__init__.py +2 -12
  276. agentpool_toolsets/builtin/code.py +96 -57
  277. agentpool_toolsets/builtin/debug.py +118 -48
  278. agentpool_toolsets/builtin/execution_environment.py +115 -230
  279. agentpool_toolsets/builtin/file_edit/file_edit.py +115 -7
  280. agentpool_toolsets/builtin/skills.py +9 -4
  281. agentpool_toolsets/builtin/subagent_tools.py +64 -51
  282. agentpool_toolsets/builtin/workers.py +4 -2
  283. agentpool_toolsets/composio_toolset.py +2 -2
  284. agentpool_toolsets/entry_points.py +3 -1
  285. agentpool_toolsets/fsspec_toolset/__init__.py +13 -1
  286. agentpool_toolsets/fsspec_toolset/diagnostics.py +860 -73
  287. agentpool_toolsets/fsspec_toolset/grep.py +99 -7
  288. agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
  289. agentpool_toolsets/fsspec_toolset/image_utils.py +161 -0
  290. agentpool_toolsets/fsspec_toolset/toolset.py +500 -95
  291. agentpool_toolsets/mcp_discovery/__init__.py +5 -0
  292. agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
  293. agentpool_toolsets/mcp_discovery/toolset.py +511 -0
  294. agentpool_toolsets/mcp_run_toolset.py +87 -12
  295. agentpool_toolsets/notifications.py +33 -33
  296. agentpool_toolsets/openapi.py +3 -1
  297. agentpool_toolsets/search_toolset.py +3 -1
  298. agentpool-2.1.9.dist-info/RECORD +0 -474
  299. agentpool_config/resources.py +0 -33
  300. agentpool_server/acp_server/acp_tools.py +0 -43
  301. agentpool_server/acp_server/commands/spawn.py +0 -210
  302. agentpool_storage/text_log_provider.py +0 -275
  303. agentpool_toolsets/builtin/agent_management.py +0 -239
  304. agentpool_toolsets/builtin/chain.py +0 -288
  305. agentpool_toolsets/builtin/history.py +0 -36
  306. agentpool_toolsets/builtin/integration.py +0 -85
  307. agentpool_toolsets/builtin/tool_management.py +0 -90
  308. agentpool_toolsets/builtin/user_interaction.py +0 -52
  309. agentpool_toolsets/semantic_memory_toolset.py +0 -536
  310. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
  311. {agentpool-2.1.9.dist-info → agentpool-2.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -5,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 exxec.configs import ExecutionEnvironmentConfig
9
- from llmling_models.configs.model_configs import AnyModelConfig
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 searchly.config import (
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 upathtools.configs import FilesystemConfigType
22
- from upathtools.configs.base import FileSystemConfig
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
@@ -33,12 +33,6 @@ if TYPE_CHECKING:
33
33
 
34
34
  MarkupType = Literal["yaml", "json", "toml"]
35
35
  # Tool name literals for statically-defined toolsets
36
- AgentManagementToolName = Literal[
37
- "create_worker_agent",
38
- "add_agent",
39
- "add_team",
40
- "connect_nodes",
41
- ]
42
36
  SubagentToolName = Literal[
43
37
  "list_available_nodes",
44
38
  "delegate_to",
@@ -46,7 +40,7 @@ SubagentToolName = Literal[
46
40
  ]
47
41
  ExecutionEnvironmentToolName = Literal[
48
42
  "execute_code",
49
- "execute_command",
43
+ "bash",
50
44
  "start_process",
51
45
  "get_process_output",
52
46
  "wait_for_process",
@@ -55,13 +49,10 @@ ExecutionEnvironmentToolName = Literal[
55
49
  "list_processes",
56
50
  ]
57
51
 
58
- ToolManagementToolName = Literal["register_tool", "register_code_tool"]
59
- UserInteractionToolName = Literal["ask_user",]
60
- HistoryToolName = Literal["search_history", "show_statistics"]
61
52
  SkillsToolName = Literal["load_skill", "list_skills"]
62
- IntegrationToolName = Literal["add_local_mcp_server", "add_remote_mcp_server"]
63
53
  CodeToolName = Literal["format_code", "ast_grep"]
64
54
  PlanToolName = Literal["get_plan", "add_plan_entry", "update_plan_entry", "remove_plan_entry"]
55
+ PlanToolMode = Literal["granular", "declarative"]
65
56
 
66
57
 
67
58
  class BaseToolsetConfig(Schema):
@@ -176,37 +167,6 @@ class ComposioToolSetConfig(BaseToolsetConfig):
176
167
  return ComposioTools(user_id=self.user_id, toolsets=self.toolsets, api_key=key)
177
168
 
178
169
 
179
- class AgentManagementToolsetConfig(BaseToolsetConfig):
180
- """Configuration for agent pool building tools."""
181
-
182
- model_config = ConfigDict(
183
- json_schema_extra={
184
- "x-icon": "octicon:people-16",
185
- "x-doc-title": "Agent Management Toolset",
186
- }
187
- )
188
-
189
- type: Literal["agent_management"] = Field("agent_management", init=False)
190
- """Agent pool building toolset (create_worker_agent, add_agent, add_team, connect_nodes)."""
191
-
192
- tools: dict[AgentManagementToolName, bool] | None = Field(
193
- default=None,
194
- title="Tool filter",
195
- )
196
- """Optional tool filter to enable/disable specific tools."""
197
-
198
- def get_provider(self) -> ResourceProvider:
199
- """Create agent management tools provider."""
200
- from agentpool_toolsets.builtin import AgentManagementTools
201
-
202
- provider = AgentManagementTools(name="agent_management")
203
- if self.tools is not None:
204
- from agentpool.resource_providers import FilteringResourceProvider
205
-
206
- return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
207
- return provider
208
-
209
-
210
170
  class SubagentToolsetConfig(BaseToolsetConfig):
211
171
  """Configuration for subagent interaction tools."""
212
172
 
@@ -274,24 +234,24 @@ class WorkersToolsetConfig(BaseToolsetConfig):
274
234
  return WorkersTools(workers=self.workers, name="workers")
275
235
 
276
236
 
277
- class ExecutionEnvironmentToolsetConfig(BaseToolsetConfig):
278
- """Configuration for execution environment toolset (code + process management)."""
237
+ class ProcessManagementToolsetConfig(BaseToolsetConfig):
238
+ """Configuration for process management toolset (code + process management)."""
279
239
 
280
240
  model_config = ConfigDict(
281
241
  json_schema_extra={
282
242
  "x-icon": "octicon:terminal-16",
283
- "x-doc-title": "Execution Environment Toolset",
243
+ "x-doc-title": "Process management Toolset",
284
244
  }
285
245
  )
286
246
 
287
- type: Literal["execution"] = Field("execution", init=False)
288
- """Execution environment toolset."""
247
+ type: Literal["process_management"] = Field("process_management", init=False)
248
+ """Process management toolset."""
289
249
 
290
250
  environment: ExecutionEnvironmentConfig | None = Field(
291
251
  default=None,
292
- title="Execution environment",
252
+ title="Process management",
293
253
  )
294
- """Optional execution environment configuration (defaults to local)."""
254
+ """Optional Process management configuration (defaults to local)."""
295
255
 
296
256
  tools: dict[ExecutionEnvironmentToolName, bool] | None = Field(
297
257
  default=None,
@@ -300,104 +260,11 @@ class ExecutionEnvironmentToolsetConfig(BaseToolsetConfig):
300
260
  """Optional tool filter to enable/disable specific tools."""
301
261
 
302
262
  def get_provider(self) -> ResourceProvider:
303
- """Create execution environment tools provider."""
304
- from agentpool_toolsets.builtin import ExecutionEnvironmentTools
263
+ """Create Process management tools provider."""
264
+ from agentpool_toolsets.builtin import ProcessManagementTools
305
265
 
306
266
  env = self.environment.get_provider() if self.environment else None
307
- provider = ExecutionEnvironmentTools(env=env, name="execution")
308
- if self.tools is not None:
309
- from agentpool.resource_providers import FilteringResourceProvider
310
-
311
- return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
312
- return provider
313
-
314
-
315
- class ToolManagementToolsetConfig(BaseToolsetConfig):
316
- """Configuration for tool management toolset."""
317
-
318
- model_config = ConfigDict(
319
- json_schema_extra={
320
- "x-icon": "octicon:tools-16",
321
- "x-doc-title": "Tool Management Toolset",
322
- }
323
- )
324
-
325
- type: Literal["tool_management"] = Field("tool_management", init=False)
326
- """Tool management toolset."""
327
-
328
- tools: dict[ToolManagementToolName, bool] | None = Field(
329
- default=None,
330
- title="Tool filter",
331
- )
332
- """Optional tool filter to enable/disable specific tools."""
333
-
334
- def get_provider(self) -> ResourceProvider:
335
- """Create tool management tools provider."""
336
- from agentpool_toolsets.builtin import ToolManagementTools
337
-
338
- provider = ToolManagementTools(name="tool_management")
339
- if self.tools is not None:
340
- from agentpool.resource_providers import FilteringResourceProvider
341
-
342
- return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
343
- return provider
344
-
345
-
346
- class UserInteractionToolsetConfig(BaseToolsetConfig):
347
- """Configuration for user interaction toolset."""
348
-
349
- model_config = ConfigDict(
350
- json_schema_extra={
351
- "x-icon": "octicon:comment-discussion-16",
352
- "x-doc-title": "User Interaction Toolset",
353
- }
354
- )
355
-
356
- type: Literal["user_interaction"] = Field("user_interaction", init=False)
357
- """User interaction toolset."""
358
-
359
- tools: dict[UserInteractionToolName, bool] | None = Field(
360
- default=None,
361
- title="Tool filter",
362
- )
363
- """Optional tool filter to enable/disable specific tools."""
364
-
365
- def get_provider(self) -> ResourceProvider:
366
- """Create user interaction tools provider."""
367
- from agentpool_toolsets.builtin import UserInteractionTools
368
-
369
- provider = UserInteractionTools(name="user_interaction")
370
- if self.tools is not None:
371
- from agentpool.resource_providers import FilteringResourceProvider
372
-
373
- return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
374
- return provider
375
-
376
-
377
- class HistoryToolsetConfig(BaseToolsetConfig):
378
- """Configuration for history toolset."""
379
-
380
- model_config = ConfigDict(
381
- json_schema_extra={
382
- "x-icon": "octicon:history-16",
383
- "x-doc-title": "History Toolset",
384
- }
385
- )
386
-
387
- type: Literal["history"] = Field("history", init=False)
388
- """History toolset."""
389
-
390
- tools: dict[HistoryToolName, bool] | None = Field(
391
- default=None,
392
- title="Tool filter",
393
- )
394
- """Optional tool filter to enable/disable specific tools."""
395
-
396
- def get_provider(self) -> ResourceProvider:
397
- """Create history tools provider."""
398
- from agentpool_toolsets.builtin import HistoryTools
399
-
400
- provider = HistoryTools(name="history")
267
+ provider = ProcessManagementTools(env=env, name="process_management")
401
268
  if self.tools is not None:
402
269
  from agentpool.resource_providers import FilteringResourceProvider
403
270
 
@@ -441,37 +308,6 @@ class SkillsToolsetConfig(BaseToolsetConfig):
441
308
  return provider
442
309
 
443
310
 
444
- class IntegrationToolsetConfig(BaseToolsetConfig):
445
- """Configuration for integration toolset."""
446
-
447
- model_config = ConfigDict(
448
- json_schema_extra={
449
- "x-icon": "octicon:link-16",
450
- "x-doc-title": "Integration Toolset",
451
- }
452
- )
453
-
454
- type: Literal["integrations"] = Field("integrations", init=False)
455
- """Integration toolset."""
456
-
457
- tools: dict[IntegrationToolName, bool] | None = Field(
458
- default=None,
459
- title="Tool filter",
460
- )
461
- """Optional tool filter to enable/disable specific tools."""
462
-
463
- def get_provider(self) -> ResourceProvider:
464
- """Create integration tools provider."""
465
- from agentpool_toolsets.builtin import IntegrationTools
466
-
467
- provider = IntegrationTools(name="integrations")
468
- if self.tools is not None:
469
- from agentpool.resource_providers import FilteringResourceProvider
470
-
471
- return FilteringResourceProvider(provider, cast(dict[str, bool], self.tools))
472
- return provider
473
-
474
-
475
311
  class CodeToolsetConfig(BaseToolsetConfig):
476
312
  """Configuration for code toolset."""
477
313
 
@@ -607,6 +443,32 @@ class FSSpecToolsetConfig(BaseToolsetConfig):
607
443
  )
608
444
  """Maximum tokens for structure map output when reading large files."""
609
445
 
446
+ edit_tool: Literal["simple", "batch", "agentic"] = Field(
447
+ default="simple",
448
+ title="Edit tool variant",
449
+ )
450
+ """Which edit tool to expose: "simple" (single replacement),
451
+ "batch" (multiple replacements), or "agentic" (LLM-driven editing)."""
452
+
453
+ max_image_size: int | None = Field(
454
+ default=2000,
455
+ ge=100,
456
+ le=8192,
457
+ title="Maximum image dimension",
458
+ )
459
+ """Max width/height for images in pixels. Larger images are auto-resized
460
+ for better model compatibility. Set to None to disable resizing."""
461
+
462
+ max_image_bytes: int | None = Field(
463
+ default=None,
464
+ ge=102400,
465
+ le=20971520,
466
+ title="Maximum image file size",
467
+ )
468
+ """Max file size for images in bytes. Images exceeding this are compressed
469
+ using progressive quality/dimension reduction. Default: 4.5MB (Anthropic limit).
470
+ Set to None to use the default 4.5MB limit."""
471
+
610
472
  def get_provider(self) -> ResourceProvider:
611
473
  """Create FSSpec filesystem tools provider."""
612
474
  import fsspec
@@ -641,6 +503,9 @@ class FSSpecToolsetConfig(BaseToolsetConfig):
641
503
  enable_diagnostics=self.enable_diagnostics,
642
504
  large_file_tokens=self.large_file_tokens,
643
505
  map_max_tokens=self.map_max_tokens,
506
+ edit_tool=self.edit_tool,
507
+ max_image_size=self.max_image_size,
508
+ max_image_bytes=self.max_image_bytes,
644
509
  )
645
510
 
646
511
 
@@ -747,41 +612,6 @@ class NotificationsToolsetConfig(BaseToolsetConfig):
747
612
  return NotificationsTools(channels=self.channels)
748
613
 
749
614
 
750
- class SemanticMemoryToolsetConfig(BaseToolsetConfig):
751
- """Configuration for semantic memory / knowledge processing toolset."""
752
-
753
- model_config = ConfigDict(
754
- json_schema_extra={
755
- "x-icon": "octicon:database-16",
756
- "x-doc-title": "Semantic Memory Toolset",
757
- }
758
- )
759
-
760
- type: Literal["semantic_memory"] = Field("semantic_memory", init=False)
761
- """Semantic memory toolset using TypeAgent's KnowPro."""
762
-
763
- model: str | ModelId | AnyModelConfig | None = Field(
764
- default=None,
765
- examples=["openai:gpt-4o", "anthropic:claude-sonnet-4-20250514"],
766
- title="Model for LLM sampling",
767
- )
768
- """Model to use for query translation and answer generation."""
769
-
770
- dbname: str | None = Field(
771
- default=None,
772
- examples=["knowledge.db", "/path/to/memory.db"],
773
- title="Database path",
774
- )
775
- """SQLite database path for persistent storage, or None for in-memory."""
776
-
777
- def get_provider(self) -> ResourceProvider:
778
- """Create semantic memory tools provider."""
779
- from agentpool_toolsets.semantic_memory_toolset import SemanticMemoryTools
780
-
781
- model = m if isinstance(m := self.model, str) or m is None else m.get_model()
782
- return SemanticMemoryTools(model=model, dbname=self.dbname)
783
-
784
-
785
615
  class CustomToolsetConfig(BaseToolsetConfig):
786
616
  """Configuration for custom toolsets."""
787
617
 
@@ -949,6 +779,17 @@ class PlanToolsetConfig(BaseToolsetConfig):
949
779
  type: Literal["plan"] = Field("plan", init=False)
950
780
  """Plan toolset."""
951
781
 
782
+ mode: PlanToolMode = Field(
783
+ default="declarative",
784
+ title="Plan tool mode",
785
+ )
786
+ """Tool mode:
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
791
+ """
792
+
952
793
  tools: dict[PlanToolName, bool] | None = Field(
953
794
  default=None,
954
795
  title="Tool filter",
@@ -959,7 +800,7 @@ class PlanToolsetConfig(BaseToolsetConfig):
959
800
  """Create plan tools provider."""
960
801
  from agentpool.resource_providers import PlanProvider
961
802
 
962
- provider = PlanProvider()
803
+ provider = PlanProvider(mode=self.mode)
963
804
  if self.tools is not None:
964
805
  from agentpool.resource_providers import FilteringResourceProvider
965
806
 
@@ -987,19 +828,59 @@ class DebugToolsetConfig(BaseToolsetConfig):
987
828
  type: Literal["debug"] = Field("debug", init=False)
988
829
  """Debug toolset."""
989
830
 
990
- install_log_handler: bool = Field(
991
- default=True,
992
- title="Install log handler",
993
- )
994
- """Whether to install the memory log handler for log inspection."""
995
-
996
831
  def get_provider(self) -> ResourceProvider:
997
832
  """Create debug tools provider."""
998
833
  from agentpool_toolsets.builtin.debug import DebugTools
999
834
 
1000
- return DebugTools(
1001
- name=self.namespace or "debug",
1002
- install_log_handler=self.install_log_handler,
835
+ return DebugTools(name=self.namespace or "debug")
836
+
837
+
838
+ class MCPDiscoveryToolsetConfig(BaseToolsetConfig):
839
+ """Configuration for MCP discovery toolset.
840
+
841
+ Enables dynamic discovery and use of MCP servers without preloading tools.
842
+ Uses semantic search over 1000+ indexed servers for intelligent matching.
843
+
844
+ Requires the `mcp-discovery` extra: `pip install agentpool[mcp-discovery]`
845
+ """
846
+
847
+ model_config = ConfigDict(
848
+ json_schema_extra={
849
+ "x-icon": "octicon:search-16",
850
+ "x-doc-title": "MCP Discovery Toolset",
851
+ }
852
+ )
853
+
854
+ type: Literal["mcp_discovery"] = Field("mcp_discovery", init=False)
855
+ """MCP discovery toolset."""
856
+
857
+ registry_url: str = Field(
858
+ default="https://registry.modelcontextprotocol.io",
859
+ title="Registry URL",
860
+ )
861
+ """Base URL for the MCP registry API."""
862
+
863
+ allowed_servers: list[str] | None = Field(
864
+ default=None,
865
+ title="Allowed servers",
866
+ )
867
+ """If set, only these server names can be used."""
868
+
869
+ blocked_servers: list[str] | None = Field(
870
+ default=None,
871
+ title="Blocked servers",
872
+ )
873
+ """Server names that cannot be used."""
874
+
875
+ def get_provider(self) -> ResourceProvider:
876
+ """Create MCP discovery tools provider."""
877
+ from agentpool_toolsets.mcp_discovery.toolset import MCPDiscoveryToolset
878
+
879
+ return MCPDiscoveryToolset(
880
+ name=self.namespace or "mcp_discovery",
881
+ registry_url=self.registry_url,
882
+ allowed_servers=self.allowed_servers,
883
+ blocked_servers=self.blocked_servers,
1003
884
  )
1004
885
 
1005
886
 
@@ -1007,13 +888,8 @@ ToolsetConfig = Annotated[
1007
888
  OpenAPIToolsetConfig
1008
889
  | EntryPointToolsetConfig
1009
890
  | ComposioToolSetConfig
1010
- | AgentManagementToolsetConfig
1011
- | ExecutionEnvironmentToolsetConfig
1012
- | ToolManagementToolsetConfig
1013
- | UserInteractionToolsetConfig
1014
- | HistoryToolsetConfig
891
+ | ProcessManagementToolsetConfig
1015
892
  | SkillsToolsetConfig
1016
- | IntegrationToolsetConfig
1017
893
  | CodeToolsetConfig
1018
894
  | FSSpecToolsetConfig
1019
895
  | VFSToolsetConfig
@@ -1023,11 +899,11 @@ ToolsetConfig = Annotated[
1023
899
  | RemoteCodeModeToolsetConfig
1024
900
  | SearchToolsetConfig
1025
901
  | NotificationsToolsetConfig
1026
- | SemanticMemoryToolsetConfig
1027
902
  | ConfigCreationToolsetConfig
1028
903
  | ImportToolsToolsetConfig
1029
904
  | PlanToolsetConfig
1030
905
  | DebugToolsetConfig
906
+ | MCPDiscoveryToolsetConfig
1031
907
  | CustomToolsetConfig,
1032
908
  Field(discriminator="type"),
1033
909
  ]