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
@@ -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 a short, descriptive title (3-7 words) for this request. \
31
- Only respond with the title, nothing else."""
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
 
@@ -170,8 +139,75 @@ class MemoryStorageConfig(BaseStorageProviderConfig):
170
139
  """In-memory storage configuration for testing."""
171
140
 
172
141
 
142
+ class ClaudeStorageConfig(BaseStorageProviderConfig):
143
+ """Claude Code native storage format configuration.
144
+
145
+ Reads/writes to Claude Code's native JSONL format in ~/.claude/projects/.
146
+ Useful for sharing conversation history between agentpool and Claude Code CLI.
147
+ """
148
+
149
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Claude Storage"})
150
+
151
+ type: Literal["claude"] = Field("claude", init=False)
152
+ """Claude Code native storage configuration."""
153
+
154
+ path: str = Field(
155
+ default="~/.claude",
156
+ examples=["~/.claude", "/home/user/.claude"],
157
+ title="Claude data directory",
158
+ )
159
+ """Path to Claude data directory (default: ~/.claude)"""
160
+
161
+
162
+ class OpenCodeStorageConfig(BaseStorageProviderConfig):
163
+ """OpenCode native storage format configuration.
164
+
165
+ Reads from OpenCode's native JSON format in ~/.local/share/opencode/storage/.
166
+ Useful for importing conversation history from OpenCode.
167
+ """
168
+
169
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "OpenCode Storage"})
170
+
171
+ type: Literal["opencode"] = Field("opencode", init=False)
172
+ """OpenCode native storage configuration."""
173
+
174
+ path: str = Field(
175
+ default="~/.local/share/opencode/storage",
176
+ examples=["~/.local/share/opencode/storage"],
177
+ title="OpenCode storage directory",
178
+ )
179
+ """Path to OpenCode storage directory."""
180
+
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
+
173
204
  StorageProviderConfig = Annotated[
174
- SQLStorageConfig | FileStorageConfig | TextLogConfig | MemoryStorageConfig,
205
+ SQLStorageConfig
206
+ | FileStorageConfig
207
+ | MemoryStorageConfig
208
+ | ClaudeStorageConfig
209
+ | OpenCodeStorageConfig
210
+ | ZedStorageConfig,
175
211
  Field(discriminator="type"),
176
212
  ]
177
213
 
@@ -237,8 +273,12 @@ class StorageConfig(Schema):
237
273
  """Whether to log additions to the context."""
238
274
 
239
275
  title_generation_model: ModelId | str | None = Field(
240
- default="google-gla:gemini-2.5-flash-lite",
241
- examples=["google-gla:gemini-2.5-flash-lite", None],
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
+ ],
242
282
  title="Title generation model",
243
283
  )
244
284
  """Model to use for generating conversation titles.
@@ -273,6 +313,10 @@ class StorageConfig(Schema):
273
313
  from agentpool.sessions.store import MemorySessionStore
274
314
  from agentpool_storage.session_store import SQLSessionStore
275
315
 
316
+ # Use memory store during tests
317
+ if os.getenv("PYTEST_CURRENT_TEST"):
318
+ return MemorySessionStore()
319
+
276
320
  match self.session_store:
277
321
  case "memory":
278
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 (required_return_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
- required_return_type: ImportString[type[TResult]] = Field(
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.required_return_type:
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, Annotated, Any, Literal
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,6 +99,3 @@ class ImportToolConfig(BaseToolConfig):
107
99
  requires_confirmation=self.requires_confirmation,
108
100
  metadata=self.metadata,
109
101
  )
110
-
111
-
112
- ToolConfig = Annotated[ImportToolConfig, Field(discriminator="type")]