agentpool 2.1.9__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.
Potentially problematic release.
This version of agentpool might be problematic. Click here for more details.
- acp/README.md +64 -0
- acp/__init__.py +172 -0
- acp/__main__.py +10 -0
- acp/acp_requests.py +285 -0
- acp/agent/__init__.py +6 -0
- acp/agent/connection.py +256 -0
- acp/agent/implementations/__init__.py +6 -0
- acp/agent/implementations/debug_server/__init__.py +1 -0
- acp/agent/implementations/debug_server/cli.py +79 -0
- acp/agent/implementations/debug_server/debug.html +234 -0
- acp/agent/implementations/debug_server/debug_server.py +496 -0
- acp/agent/implementations/testing.py +91 -0
- acp/agent/protocol.py +65 -0
- acp/bridge/README.md +162 -0
- acp/bridge/__init__.py +6 -0
- acp/bridge/__main__.py +91 -0
- acp/bridge/bridge.py +246 -0
- acp/bridge/py.typed +0 -0
- acp/bridge/settings.py +15 -0
- acp/client/__init__.py +7 -0
- acp/client/connection.py +251 -0
- acp/client/implementations/__init__.py +7 -0
- acp/client/implementations/default_client.py +185 -0
- acp/client/implementations/headless_client.py +266 -0
- acp/client/implementations/noop_client.py +110 -0
- acp/client/protocol.py +61 -0
- acp/connection.py +280 -0
- acp/exceptions.py +46 -0
- acp/filesystem.py +524 -0
- acp/notifications.py +832 -0
- acp/py.typed +0 -0
- acp/schema/__init__.py +265 -0
- acp/schema/agent_plan.py +30 -0
- acp/schema/agent_requests.py +126 -0
- acp/schema/agent_responses.py +256 -0
- acp/schema/base.py +39 -0
- acp/schema/capabilities.py +230 -0
- acp/schema/client_requests.py +247 -0
- acp/schema/client_responses.py +96 -0
- acp/schema/common.py +81 -0
- acp/schema/content_blocks.py +188 -0
- acp/schema/mcp.py +82 -0
- acp/schema/messages.py +171 -0
- acp/schema/notifications.py +82 -0
- acp/schema/protocol_stuff.md +3 -0
- acp/schema/session_state.py +160 -0
- acp/schema/session_updates.py +419 -0
- acp/schema/slash_commands.py +51 -0
- acp/schema/terminal.py +15 -0
- acp/schema/tool_call.py +347 -0
- acp/stdio.py +250 -0
- acp/task/__init__.py +53 -0
- acp/task/debug.py +197 -0
- acp/task/dispatcher.py +93 -0
- acp/task/queue.py +69 -0
- acp/task/sender.py +82 -0
- acp/task/state.py +87 -0
- acp/task/supervisor.py +93 -0
- acp/terminal_handle.py +30 -0
- acp/tool_call_reporter.py +199 -0
- acp/tool_call_state.py +178 -0
- acp/transports.py +104 -0
- acp/utils.py +240 -0
- agentpool/__init__.py +63 -0
- agentpool/__main__.py +7 -0
- agentpool/agents/__init__.py +30 -0
- agentpool/agents/acp_agent/__init__.py +5 -0
- agentpool/agents/acp_agent/acp_agent.py +837 -0
- agentpool/agents/acp_agent/acp_converters.py +294 -0
- agentpool/agents/acp_agent/client_handler.py +317 -0
- agentpool/agents/acp_agent/session_state.py +44 -0
- agentpool/agents/agent.py +1264 -0
- agentpool/agents/agui_agent/__init__.py +19 -0
- agentpool/agents/agui_agent/agui_agent.py +677 -0
- agentpool/agents/agui_agent/agui_converters.py +423 -0
- agentpool/agents/agui_agent/chunk_transformer.py +204 -0
- agentpool/agents/agui_agent/event_types.py +83 -0
- agentpool/agents/agui_agent/helpers.py +192 -0
- agentpool/agents/architect.py +71 -0
- agentpool/agents/base_agent.py +177 -0
- agentpool/agents/claude_code_agent/__init__.py +11 -0
- agentpool/agents/claude_code_agent/claude_code_agent.py +1021 -0
- agentpool/agents/claude_code_agent/converters.py +243 -0
- agentpool/agents/context.py +105 -0
- agentpool/agents/events/__init__.py +61 -0
- agentpool/agents/events/builtin_handlers.py +129 -0
- agentpool/agents/events/event_emitter.py +320 -0
- agentpool/agents/events/events.py +561 -0
- agentpool/agents/events/tts_handlers.py +186 -0
- agentpool/agents/interactions.py +419 -0
- agentpool/agents/slashed_agent.py +244 -0
- agentpool/agents/sys_prompts.py +178 -0
- agentpool/agents/tool_wrapping.py +184 -0
- agentpool/base_provider.py +28 -0
- agentpool/common_types.py +226 -0
- agentpool/config_resources/__init__.py +16 -0
- agentpool/config_resources/acp_assistant.yml +24 -0
- agentpool/config_resources/agents.yml +109 -0
- agentpool/config_resources/agents_template.yml +18 -0
- agentpool/config_resources/agui_test.yml +18 -0
- agentpool/config_resources/claude_code_agent.yml +16 -0
- agentpool/config_resources/claude_style_subagent.md +30 -0
- agentpool/config_resources/external_acp_agents.yml +77 -0
- agentpool/config_resources/opencode_style_subagent.md +19 -0
- agentpool/config_resources/tts_test_agents.yml +78 -0
- agentpool/delegation/__init__.py +8 -0
- agentpool/delegation/base_team.py +504 -0
- agentpool/delegation/message_flow_tracker.py +39 -0
- agentpool/delegation/pool.py +1129 -0
- agentpool/delegation/team.py +325 -0
- agentpool/delegation/teamrun.py +343 -0
- agentpool/docs/__init__.py +5 -0
- agentpool/docs/gen_examples.py +42 -0
- agentpool/docs/utils.py +370 -0
- agentpool/functional/__init__.py +20 -0
- agentpool/functional/py.typed +0 -0
- agentpool/functional/run.py +80 -0
- agentpool/functional/structure.py +136 -0
- agentpool/hooks/__init__.py +20 -0
- agentpool/hooks/agent_hooks.py +247 -0
- agentpool/hooks/base.py +119 -0
- agentpool/hooks/callable.py +140 -0
- agentpool/hooks/command.py +180 -0
- agentpool/hooks/prompt.py +122 -0
- agentpool/jinja_filters.py +132 -0
- agentpool/log.py +224 -0
- agentpool/mcp_server/__init__.py +17 -0
- agentpool/mcp_server/client.py +429 -0
- agentpool/mcp_server/constants.py +32 -0
- agentpool/mcp_server/conversions.py +172 -0
- agentpool/mcp_server/helpers.py +47 -0
- agentpool/mcp_server/manager.py +232 -0
- agentpool/mcp_server/message_handler.py +164 -0
- agentpool/mcp_server/registries/__init__.py +1 -0
- agentpool/mcp_server/registries/official_registry_client.py +345 -0
- agentpool/mcp_server/registries/pulsemcp_client.py +88 -0
- agentpool/mcp_server/tool_bridge.py +548 -0
- agentpool/messaging/__init__.py +58 -0
- agentpool/messaging/compaction.py +928 -0
- agentpool/messaging/connection_manager.py +319 -0
- agentpool/messaging/context.py +66 -0
- agentpool/messaging/event_manager.py +426 -0
- agentpool/messaging/events.py +39 -0
- agentpool/messaging/message_container.py +209 -0
- agentpool/messaging/message_history.py +491 -0
- agentpool/messaging/messagenode.py +377 -0
- agentpool/messaging/messages.py +655 -0
- agentpool/messaging/processing.py +76 -0
- agentpool/mime_utils.py +95 -0
- agentpool/models/__init__.py +21 -0
- agentpool/models/acp_agents/__init__.py +22 -0
- agentpool/models/acp_agents/base.py +308 -0
- agentpool/models/acp_agents/mcp_capable.py +790 -0
- agentpool/models/acp_agents/non_mcp.py +842 -0
- agentpool/models/agents.py +450 -0
- agentpool/models/agui_agents.py +89 -0
- agentpool/models/claude_code_agents.py +238 -0
- agentpool/models/file_agents.py +116 -0
- agentpool/models/file_parsing.py +367 -0
- agentpool/models/manifest.py +658 -0
- agentpool/observability/__init__.py +9 -0
- agentpool/observability/observability_registry.py +97 -0
- agentpool/prompts/__init__.py +1 -0
- agentpool/prompts/base.py +27 -0
- agentpool/prompts/builtin_provider.py +75 -0
- agentpool/prompts/conversion_manager.py +95 -0
- agentpool/prompts/convert.py +96 -0
- agentpool/prompts/manager.py +204 -0
- agentpool/prompts/parts/zed.md +33 -0
- agentpool/prompts/prompts.py +581 -0
- agentpool/py.typed +0 -0
- agentpool/queries/tree-sitter-language-pack/README.md +7 -0
- agentpool/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/c-tags.scm +9 -0
- agentpool/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
- agentpool/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
- agentpool/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
- agentpool/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
- agentpool/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
- agentpool/queries/tree-sitter-language-pack/d-tags.scm +26 -0
- agentpool/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
- agentpool/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
- agentpool/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
- agentpool/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
- agentpool/queries/tree-sitter-language-pack/go-tags.scm +42 -0
- agentpool/queries/tree-sitter-language-pack/java-tags.scm +20 -0
- agentpool/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
- agentpool/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
- agentpool/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
- agentpool/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
- agentpool/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
- agentpool/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
- agentpool/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/python-tags.scm +14 -0
- agentpool/queries/tree-sitter-language-pack/r-tags.scm +21 -0
- agentpool/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
- agentpool/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
- agentpool/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
- agentpool/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
- agentpool/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
- agentpool/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
- agentpool/queries/tree-sitter-languages/README.md +24 -0
- agentpool/queries/tree-sitter-languages/c-tags.scm +9 -0
- agentpool/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
- agentpool/queries/tree-sitter-languages/cpp-tags.scm +15 -0
- agentpool/queries/tree-sitter-languages/dart-tags.scm +91 -0
- agentpool/queries/tree-sitter-languages/elisp-tags.scm +8 -0
- agentpool/queries/tree-sitter-languages/elixir-tags.scm +54 -0
- agentpool/queries/tree-sitter-languages/elm-tags.scm +19 -0
- agentpool/queries/tree-sitter-languages/fortran-tags.scm +15 -0
- agentpool/queries/tree-sitter-languages/go-tags.scm +30 -0
- agentpool/queries/tree-sitter-languages/haskell-tags.scm +3 -0
- agentpool/queries/tree-sitter-languages/hcl-tags.scm +77 -0
- agentpool/queries/tree-sitter-languages/java-tags.scm +20 -0
- agentpool/queries/tree-sitter-languages/javascript-tags.scm +88 -0
- agentpool/queries/tree-sitter-languages/julia-tags.scm +60 -0
- agentpool/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
- agentpool/queries/tree-sitter-languages/matlab-tags.scm +10 -0
- agentpool/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
- agentpool/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
- agentpool/queries/tree-sitter-languages/php-tags.scm +26 -0
- agentpool/queries/tree-sitter-languages/python-tags.scm +12 -0
- agentpool/queries/tree-sitter-languages/ql-tags.scm +26 -0
- agentpool/queries/tree-sitter-languages/ruby-tags.scm +64 -0
- agentpool/queries/tree-sitter-languages/rust-tags.scm +60 -0
- agentpool/queries/tree-sitter-languages/scala-tags.scm +65 -0
- agentpool/queries/tree-sitter-languages/typescript-tags.scm +41 -0
- agentpool/queries/tree-sitter-languages/zig-tags.scm +3 -0
- agentpool/repomap.py +1231 -0
- agentpool/resource_providers/__init__.py +17 -0
- agentpool/resource_providers/aggregating.py +54 -0
- agentpool/resource_providers/base.py +172 -0
- agentpool/resource_providers/codemode/__init__.py +9 -0
- agentpool/resource_providers/codemode/code_executor.py +215 -0
- agentpool/resource_providers/codemode/default_prompt.py +19 -0
- agentpool/resource_providers/codemode/helpers.py +83 -0
- agentpool/resource_providers/codemode/progress_executor.py +212 -0
- agentpool/resource_providers/codemode/provider.py +150 -0
- agentpool/resource_providers/codemode/remote_mcp_execution.py +143 -0
- agentpool/resource_providers/codemode/remote_provider.py +171 -0
- agentpool/resource_providers/filtering.py +42 -0
- agentpool/resource_providers/mcp_provider.py +246 -0
- agentpool/resource_providers/plan_provider.py +196 -0
- agentpool/resource_providers/pool.py +69 -0
- agentpool/resource_providers/static.py +289 -0
- agentpool/running/__init__.py +20 -0
- agentpool/running/decorators.py +56 -0
- agentpool/running/discovery.py +101 -0
- agentpool/running/executor.py +284 -0
- agentpool/running/injection.py +111 -0
- agentpool/running/py.typed +0 -0
- agentpool/running/run_nodes.py +87 -0
- agentpool/server.py +122 -0
- agentpool/sessions/__init__.py +13 -0
- agentpool/sessions/manager.py +302 -0
- agentpool/sessions/models.py +71 -0
- agentpool/sessions/session.py +239 -0
- agentpool/sessions/store.py +163 -0
- agentpool/skills/__init__.py +5 -0
- agentpool/skills/manager.py +120 -0
- agentpool/skills/registry.py +210 -0
- agentpool/skills/skill.py +36 -0
- agentpool/storage/__init__.py +17 -0
- agentpool/storage/manager.py +419 -0
- agentpool/storage/serialization.py +136 -0
- agentpool/talk/__init__.py +13 -0
- agentpool/talk/registry.py +128 -0
- agentpool/talk/stats.py +159 -0
- agentpool/talk/talk.py +604 -0
- agentpool/tasks/__init__.py +20 -0
- agentpool/tasks/exceptions.py +25 -0
- agentpool/tasks/registry.py +33 -0
- agentpool/testing.py +129 -0
- agentpool/text_templates/__init__.py +39 -0
- agentpool/text_templates/system_prompt.jinja +30 -0
- agentpool/text_templates/tool_call_default.jinja +13 -0
- agentpool/text_templates/tool_call_markdown.jinja +25 -0
- agentpool/text_templates/tool_call_simple.jinja +5 -0
- agentpool/tools/__init__.py +16 -0
- agentpool/tools/base.py +269 -0
- agentpool/tools/exceptions.py +9 -0
- agentpool/tools/manager.py +255 -0
- agentpool/tools/tool_call_info.py +87 -0
- agentpool/ui/__init__.py +2 -0
- agentpool/ui/base.py +89 -0
- agentpool/ui/mock_provider.py +81 -0
- agentpool/ui/stdlib_provider.py +150 -0
- agentpool/utils/__init__.py +44 -0
- agentpool/utils/baseregistry.py +185 -0
- agentpool/utils/count_tokens.py +62 -0
- agentpool/utils/dag.py +184 -0
- agentpool/utils/importing.py +206 -0
- agentpool/utils/inspection.py +334 -0
- agentpool/utils/model_capabilities.py +25 -0
- agentpool/utils/network.py +28 -0
- agentpool/utils/now.py +22 -0
- agentpool/utils/parse_time.py +87 -0
- agentpool/utils/result_utils.py +35 -0
- agentpool/utils/signatures.py +305 -0
- agentpool/utils/streams.py +112 -0
- agentpool/utils/tasks.py +186 -0
- agentpool/vfs_registry.py +250 -0
- agentpool-2.1.9.dist-info/METADATA +336 -0
- agentpool-2.1.9.dist-info/RECORD +474 -0
- agentpool-2.1.9.dist-info/WHEEL +4 -0
- agentpool-2.1.9.dist-info/entry_points.txt +14 -0
- agentpool-2.1.9.dist-info/licenses/LICENSE +22 -0
- agentpool_cli/__init__.py +34 -0
- agentpool_cli/__main__.py +66 -0
- agentpool_cli/agent.py +175 -0
- agentpool_cli/cli_types.py +23 -0
- agentpool_cli/common.py +163 -0
- agentpool_cli/create.py +175 -0
- agentpool_cli/history.py +217 -0
- agentpool_cli/log.py +78 -0
- agentpool_cli/py.typed +0 -0
- agentpool_cli/run.py +84 -0
- agentpool_cli/serve_acp.py +177 -0
- agentpool_cli/serve_api.py +69 -0
- agentpool_cli/serve_mcp.py +74 -0
- agentpool_cli/serve_vercel.py +233 -0
- agentpool_cli/store.py +171 -0
- agentpool_cli/task.py +84 -0
- agentpool_cli/utils.py +104 -0
- agentpool_cli/watch.py +54 -0
- agentpool_commands/__init__.py +180 -0
- agentpool_commands/agents.py +199 -0
- agentpool_commands/base.py +45 -0
- agentpool_commands/commands.py +58 -0
- agentpool_commands/completers.py +110 -0
- agentpool_commands/connections.py +175 -0
- agentpool_commands/markdown_utils.py +31 -0
- agentpool_commands/models.py +62 -0
- agentpool_commands/prompts.py +78 -0
- agentpool_commands/py.typed +0 -0
- agentpool_commands/read.py +77 -0
- agentpool_commands/resources.py +210 -0
- agentpool_commands/session.py +48 -0
- agentpool_commands/tools.py +269 -0
- agentpool_commands/utils.py +189 -0
- agentpool_commands/workers.py +163 -0
- agentpool_config/__init__.py +53 -0
- agentpool_config/builtin_tools.py +265 -0
- agentpool_config/commands.py +237 -0
- agentpool_config/conditions.py +301 -0
- agentpool_config/converters.py +30 -0
- agentpool_config/durable.py +331 -0
- agentpool_config/event_handlers.py +600 -0
- agentpool_config/events.py +153 -0
- agentpool_config/forward_targets.py +251 -0
- agentpool_config/hook_conditions.py +331 -0
- agentpool_config/hooks.py +241 -0
- agentpool_config/jinja.py +206 -0
- agentpool_config/knowledge.py +41 -0
- agentpool_config/loaders.py +350 -0
- agentpool_config/mcp_server.py +243 -0
- agentpool_config/nodes.py +202 -0
- agentpool_config/observability.py +191 -0
- agentpool_config/output_types.py +55 -0
- agentpool_config/pool_server.py +267 -0
- agentpool_config/prompt_hubs.py +105 -0
- agentpool_config/prompts.py +185 -0
- agentpool_config/py.typed +0 -0
- agentpool_config/resources.py +33 -0
- agentpool_config/session.py +119 -0
- agentpool_config/skills.py +17 -0
- agentpool_config/storage.py +288 -0
- agentpool_config/system_prompts.py +190 -0
- agentpool_config/task.py +162 -0
- agentpool_config/teams.py +52 -0
- agentpool_config/tools.py +112 -0
- agentpool_config/toolsets.py +1033 -0
- agentpool_config/workers.py +86 -0
- agentpool_prompts/__init__.py +1 -0
- agentpool_prompts/braintrust_hub.py +235 -0
- agentpool_prompts/fabric.py +75 -0
- agentpool_prompts/langfuse_hub.py +79 -0
- agentpool_prompts/promptlayer_provider.py +59 -0
- agentpool_prompts/py.typed +0 -0
- agentpool_server/__init__.py +9 -0
- agentpool_server/a2a_server/__init__.py +5 -0
- agentpool_server/a2a_server/a2a_types.py +41 -0
- agentpool_server/a2a_server/server.py +190 -0
- agentpool_server/a2a_server/storage.py +81 -0
- agentpool_server/acp_server/__init__.py +22 -0
- agentpool_server/acp_server/acp_agent.py +786 -0
- agentpool_server/acp_server/acp_tools.py +43 -0
- agentpool_server/acp_server/commands/__init__.py +18 -0
- agentpool_server/acp_server/commands/acp_commands.py +594 -0
- agentpool_server/acp_server/commands/debug_commands.py +376 -0
- agentpool_server/acp_server/commands/docs_commands/__init__.py +39 -0
- agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +169 -0
- agentpool_server/acp_server/commands/docs_commands/get_schema.py +176 -0
- agentpool_server/acp_server/commands/docs_commands/get_source.py +110 -0
- agentpool_server/acp_server/commands/docs_commands/git_diff.py +111 -0
- agentpool_server/acp_server/commands/docs_commands/helpers.py +33 -0
- agentpool_server/acp_server/commands/docs_commands/url_to_markdown.py +90 -0
- agentpool_server/acp_server/commands/spawn.py +210 -0
- agentpool_server/acp_server/converters.py +235 -0
- agentpool_server/acp_server/input_provider.py +338 -0
- agentpool_server/acp_server/server.py +288 -0
- agentpool_server/acp_server/session.py +969 -0
- agentpool_server/acp_server/session_manager.py +313 -0
- agentpool_server/acp_server/syntax_detection.py +250 -0
- agentpool_server/acp_server/zed_tools.md +90 -0
- agentpool_server/aggregating_server.py +309 -0
- agentpool_server/agui_server/__init__.py +11 -0
- agentpool_server/agui_server/server.py +128 -0
- agentpool_server/base.py +189 -0
- agentpool_server/http_server.py +164 -0
- agentpool_server/mcp_server/__init__.py +6 -0
- agentpool_server/mcp_server/server.py +314 -0
- agentpool_server/mcp_server/zed_wrapper.py +110 -0
- agentpool_server/openai_api_server/__init__.py +5 -0
- agentpool_server/openai_api_server/completions/__init__.py +1 -0
- agentpool_server/openai_api_server/completions/helpers.py +81 -0
- agentpool_server/openai_api_server/completions/models.py +98 -0
- agentpool_server/openai_api_server/responses/__init__.py +1 -0
- agentpool_server/openai_api_server/responses/helpers.py +74 -0
- agentpool_server/openai_api_server/responses/models.py +96 -0
- agentpool_server/openai_api_server/server.py +242 -0
- agentpool_server/py.typed +0 -0
- agentpool_storage/__init__.py +9 -0
- agentpool_storage/base.py +310 -0
- agentpool_storage/file_provider.py +378 -0
- agentpool_storage/formatters.py +129 -0
- agentpool_storage/memory_provider.py +396 -0
- agentpool_storage/models.py +108 -0
- agentpool_storage/py.typed +0 -0
- agentpool_storage/session_store.py +262 -0
- agentpool_storage/sql_provider/__init__.py +21 -0
- agentpool_storage/sql_provider/cli.py +146 -0
- agentpool_storage/sql_provider/models.py +249 -0
- agentpool_storage/sql_provider/queries.py +15 -0
- agentpool_storage/sql_provider/sql_provider.py +444 -0
- agentpool_storage/sql_provider/utils.py +234 -0
- agentpool_storage/text_log_provider.py +275 -0
- agentpool_toolsets/__init__.py +15 -0
- agentpool_toolsets/builtin/__init__.py +33 -0
- agentpool_toolsets/builtin/agent_management.py +239 -0
- agentpool_toolsets/builtin/chain.py +288 -0
- agentpool_toolsets/builtin/code.py +398 -0
- agentpool_toolsets/builtin/debug.py +291 -0
- agentpool_toolsets/builtin/execution_environment.py +381 -0
- agentpool_toolsets/builtin/file_edit/__init__.py +11 -0
- agentpool_toolsets/builtin/file_edit/file_edit.py +747 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/__init__.py +5 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/example_usage.py +311 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/streaming_fuzzy_matcher.py +443 -0
- agentpool_toolsets/builtin/history.py +36 -0
- agentpool_toolsets/builtin/integration.py +85 -0
- agentpool_toolsets/builtin/skills.py +77 -0
- agentpool_toolsets/builtin/subagent_tools.py +324 -0
- agentpool_toolsets/builtin/tool_management.py +90 -0
- agentpool_toolsets/builtin/user_interaction.py +52 -0
- agentpool_toolsets/builtin/workers.py +128 -0
- agentpool_toolsets/composio_toolset.py +96 -0
- agentpool_toolsets/config_creation.py +192 -0
- agentpool_toolsets/entry_points.py +47 -0
- agentpool_toolsets/fsspec_toolset/__init__.py +7 -0
- agentpool_toolsets/fsspec_toolset/diagnostics.py +115 -0
- agentpool_toolsets/fsspec_toolset/grep.py +450 -0
- agentpool_toolsets/fsspec_toolset/helpers.py +631 -0
- agentpool_toolsets/fsspec_toolset/streaming_diff_parser.py +249 -0
- agentpool_toolsets/fsspec_toolset/toolset.py +1384 -0
- agentpool_toolsets/mcp_run_toolset.py +61 -0
- agentpool_toolsets/notifications.py +146 -0
- agentpool_toolsets/openapi.py +118 -0
- agentpool_toolsets/py.typed +0 -0
- agentpool_toolsets/search_toolset.py +202 -0
- agentpool_toolsets/semantic_memory_toolset.py +536 -0
- agentpool_toolsets/streaming_tools.py +265 -0
- agentpool_toolsets/vfs_toolset.py +124 -0
|
@@ -0,0 +1,842 @@
|
|
|
1
|
+
"""Configuration models for ACP (Agent Client Protocol) agents."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import ConfigDict, Field
|
|
8
|
+
from tokonomics.model_discovery import ProviderType # noqa: TC002
|
|
9
|
+
|
|
10
|
+
from agentpool.models.acp_agents.base import BaseACPAgentConfig
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from agentpool.prompts.manager import PromptManager
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ClaudeCodeModelName = Literal["default", "sonnet", "opus", "haiku", "sonnet[1m]", "opusplan"]
|
|
18
|
+
ClaudeCodeToolName = Literal[
|
|
19
|
+
"AskUserQuestion",
|
|
20
|
+
"Bash",
|
|
21
|
+
"BashOutput",
|
|
22
|
+
"Edit",
|
|
23
|
+
"ExitPlanMode",
|
|
24
|
+
"Glob",
|
|
25
|
+
"Grep",
|
|
26
|
+
"KillShell",
|
|
27
|
+
"NotebookEdit",
|
|
28
|
+
"Read",
|
|
29
|
+
"Skill",
|
|
30
|
+
"SlashCommand",
|
|
31
|
+
"Task",
|
|
32
|
+
"TodoWrite",
|
|
33
|
+
"WebFetch",
|
|
34
|
+
"WebSearch",
|
|
35
|
+
"Write",
|
|
36
|
+
]
|
|
37
|
+
ClaudeCodePermissionmode = Literal["default", "acceptEdits", "bypassPermissions", "dontAsk", "plan"]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class CodexACPAgentConfig(BaseACPAgentConfig):
|
|
41
|
+
"""Configuration for Zed Codex via ACP.
|
|
42
|
+
|
|
43
|
+
Provides typed settings for the codex-acp server.
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
```yaml
|
|
47
|
+
agents:
|
|
48
|
+
coder:
|
|
49
|
+
type: acp
|
|
50
|
+
provider: codex
|
|
51
|
+
cwd: /path/to/project
|
|
52
|
+
model: o3
|
|
53
|
+
sandbox_permissions:
|
|
54
|
+
- disk-full-read-access
|
|
55
|
+
```
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
model_config = ConfigDict(json_schema_extra={"title": "Codex ACP Agent Configuration"})
|
|
59
|
+
|
|
60
|
+
provider: Literal["codex"] = Field("codex", init=False)
|
|
61
|
+
"""Discriminator for Codex ACP agent."""
|
|
62
|
+
|
|
63
|
+
model: str | None = Field(
|
|
64
|
+
default=None,
|
|
65
|
+
title="Model",
|
|
66
|
+
examples=["o3", "o4-mini"],
|
|
67
|
+
)
|
|
68
|
+
"""Model override."""
|
|
69
|
+
|
|
70
|
+
sandbox_permissions: list[str] | None = Field(
|
|
71
|
+
default=None,
|
|
72
|
+
title="Sandbox Permissions",
|
|
73
|
+
examples=[["disk-full-read-access"], ["network-access", "disk-write-access"]],
|
|
74
|
+
)
|
|
75
|
+
"""Sandbox permissions."""
|
|
76
|
+
|
|
77
|
+
shell_environment_policy_inherit: Literal["all", "none"] | None = Field(
|
|
78
|
+
default=None,
|
|
79
|
+
title="Shell Environment Policy Inherit",
|
|
80
|
+
examples=["all", "none"],
|
|
81
|
+
)
|
|
82
|
+
"""Shell environment inheritance policy."""
|
|
83
|
+
|
|
84
|
+
def get_command(self) -> str:
|
|
85
|
+
"""Get the command to spawn the ACP server."""
|
|
86
|
+
return "npx"
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def model_providers(self) -> list[ProviderType]:
|
|
90
|
+
"""Codex uses OpenAI models."""
|
|
91
|
+
return ["openai"]
|
|
92
|
+
|
|
93
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
94
|
+
"""Build command arguments from settings."""
|
|
95
|
+
args: list[str] = ["@zed-industries/codex-acp"]
|
|
96
|
+
|
|
97
|
+
if self.model:
|
|
98
|
+
args.extend(["-c", f'model="{self.model}"'])
|
|
99
|
+
if self.sandbox_permissions:
|
|
100
|
+
# Format as TOML array
|
|
101
|
+
perms = ", ".join(f'"{p}"' for p in self.sandbox_permissions)
|
|
102
|
+
args.extend(["-c", f"sandbox_permissions=[{perms}]"])
|
|
103
|
+
if self.shell_environment_policy_inherit:
|
|
104
|
+
args.extend([
|
|
105
|
+
"-c",
|
|
106
|
+
f"shell_environment_policy.inherit={self.shell_environment_policy_inherit}",
|
|
107
|
+
])
|
|
108
|
+
|
|
109
|
+
return args
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class OpenCodeACPAgentConfig(BaseACPAgentConfig):
|
|
113
|
+
"""Configuration for OpenCode via ACP.
|
|
114
|
+
|
|
115
|
+
Provides typed settings for the opencode acp server.
|
|
116
|
+
|
|
117
|
+
Example:
|
|
118
|
+
```yaml
|
|
119
|
+
agents:
|
|
120
|
+
coder:
|
|
121
|
+
type: acp
|
|
122
|
+
provider: opencode
|
|
123
|
+
cwd: /path/to/project
|
|
124
|
+
log_level: INFO
|
|
125
|
+
```
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
model_config = ConfigDict(json_schema_extra={"title": "OpenCode ACP Agent Configuration"})
|
|
129
|
+
|
|
130
|
+
provider: Literal["opencode"] = Field("opencode", init=False)
|
|
131
|
+
"""Discriminator for OpenCode ACP agent."""
|
|
132
|
+
|
|
133
|
+
def get_command(self) -> str:
|
|
134
|
+
"""Get the command to spawn the ACP server."""
|
|
135
|
+
return "opencode"
|
|
136
|
+
|
|
137
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
138
|
+
"""Build command arguments from settings."""
|
|
139
|
+
args: list[str] = ["acp"]
|
|
140
|
+
|
|
141
|
+
if self.cwd:
|
|
142
|
+
args.extend(["--cwd", self.cwd])
|
|
143
|
+
return args
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def model_providers(self) -> list[ProviderType]:
|
|
147
|
+
"""OpenCode supports multiple providers."""
|
|
148
|
+
return ["openai", "anthropic", "gemini", "openrouter"]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class GooseACPAgentConfig(BaseACPAgentConfig):
|
|
152
|
+
"""Configuration for Goose via ACP.
|
|
153
|
+
|
|
154
|
+
Block's open-source coding agent.
|
|
155
|
+
|
|
156
|
+
Example:
|
|
157
|
+
```yaml
|
|
158
|
+
agents:
|
|
159
|
+
coder:
|
|
160
|
+
type: acp
|
|
161
|
+
provider: goose
|
|
162
|
+
cwd: /path/to/project
|
|
163
|
+
```
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
model_config = ConfigDict(json_schema_extra={"title": "Goose ACP Agent Configuration"})
|
|
167
|
+
|
|
168
|
+
provider: Literal["goose"] = Field("goose", init=False)
|
|
169
|
+
"""Discriminator for Goose ACP agent."""
|
|
170
|
+
|
|
171
|
+
def get_command(self) -> str:
|
|
172
|
+
"""Get the command to spawn the ACP server."""
|
|
173
|
+
return "goose"
|
|
174
|
+
|
|
175
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
176
|
+
"""Build command arguments from settings."""
|
|
177
|
+
return ["acp"]
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def model_providers(self) -> list[ProviderType]:
|
|
181
|
+
"""Goose supports multiple providers."""
|
|
182
|
+
return ["openai", "anthropic", "gemini", "openrouter"]
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
class MistralACPAgentConfig(BaseACPAgentConfig):
|
|
186
|
+
"""Configuration for Mistral Agent via ACP.
|
|
187
|
+
|
|
188
|
+
Example:
|
|
189
|
+
```yaml
|
|
190
|
+
agents:
|
|
191
|
+
coder:
|
|
192
|
+
type: acp
|
|
193
|
+
provider: mistral
|
|
194
|
+
cwd: /path/to/project
|
|
195
|
+
```
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
model_config = ConfigDict(json_schema_extra={"title": "Mistral ACP Agent Configuration"})
|
|
199
|
+
|
|
200
|
+
provider: Literal["mistral"] = Field("mistral", init=False)
|
|
201
|
+
"""Discriminator for Mistral ACP agent."""
|
|
202
|
+
|
|
203
|
+
def get_command(self) -> str:
|
|
204
|
+
"""Get the command to spawn the ACP server."""
|
|
205
|
+
return "vibe-acp"
|
|
206
|
+
|
|
207
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
208
|
+
"""Build command arguments from settings."""
|
|
209
|
+
return []
|
|
210
|
+
|
|
211
|
+
@property
|
|
212
|
+
def model_providers(self) -> list[ProviderType]:
|
|
213
|
+
"""Goose supports multiple providers."""
|
|
214
|
+
return ["mistral"]
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class OpenHandsACPAgentConfig(BaseACPAgentConfig):
|
|
218
|
+
"""Configuration for OpenHands via ACP.
|
|
219
|
+
|
|
220
|
+
Open-source autonomous AI agent (formerly OpenDevin).
|
|
221
|
+
|
|
222
|
+
Example:
|
|
223
|
+
```yaml
|
|
224
|
+
agents:
|
|
225
|
+
coder:
|
|
226
|
+
type: acp
|
|
227
|
+
provider: openhands
|
|
228
|
+
cwd: /path/to/project
|
|
229
|
+
```
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
model_config = ConfigDict(json_schema_extra={"title": "OpenHands ACP Agent Configuration"})
|
|
233
|
+
|
|
234
|
+
provider: Literal["openhands"] = Field("openhands", init=False)
|
|
235
|
+
"""Discriminator for OpenHands ACP agent."""
|
|
236
|
+
|
|
237
|
+
def get_command(self) -> str:
|
|
238
|
+
"""Get the command to spawn the ACP server."""
|
|
239
|
+
return "openhands"
|
|
240
|
+
|
|
241
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
242
|
+
"""Build command arguments from settings."""
|
|
243
|
+
return ["acp"]
|
|
244
|
+
|
|
245
|
+
@property
|
|
246
|
+
def model_providers(self) -> list[ProviderType]:
|
|
247
|
+
"""OpenHands supports multiple providers."""
|
|
248
|
+
return ["openai", "anthropic", "gemini", "openrouter"]
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class AmpACPAgentConfig(BaseACPAgentConfig):
|
|
252
|
+
"""Configuration for Amp (AmpCode) via ACP.
|
|
253
|
+
|
|
254
|
+
ACP bridge adapter that spawns the Amp CLI internally. The amp-acp bridge
|
|
255
|
+
itself has no CLI configuration options. It spawns `amp --no-notifications`
|
|
256
|
+
and bridges the communication to ACP protocol.
|
|
257
|
+
|
|
258
|
+
Configuration is done via environment variables:
|
|
259
|
+
- AMP_EXECUTABLE: Path to amp binary (default: 'amp' from PATH)
|
|
260
|
+
- AMP_PREFER_SYSTEM_PATH: Set to '1' to use system amp instead of npx version
|
|
261
|
+
- AMP_API_KEY: API key for Amp service
|
|
262
|
+
- AMP_URL: URL for Amp service (default: https://ampcode.com/)
|
|
263
|
+
- AMP_SETTINGS_FILE: Path to settings file
|
|
264
|
+
|
|
265
|
+
For amp CLI configuration (permissions, MCP servers, etc.), use the amp
|
|
266
|
+
settings file at ~/.config/amp/settings.json
|
|
267
|
+
|
|
268
|
+
Example:
|
|
269
|
+
```yaml
|
|
270
|
+
agents:
|
|
271
|
+
amp:
|
|
272
|
+
type: acp
|
|
273
|
+
provider: amp
|
|
274
|
+
cwd: /path/to/project
|
|
275
|
+
env:
|
|
276
|
+
AMP_EXECUTABLE: /usr/local/bin/amp
|
|
277
|
+
AMP_PREFER_SYSTEM_PATH: "1"
|
|
278
|
+
AMP_API_KEY: your-api-key
|
|
279
|
+
```
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
model_config = ConfigDict(json_schema_extra={"title": "Amp ACP Agent Configuration"})
|
|
283
|
+
|
|
284
|
+
provider: Literal["amp"] = Field("amp", init=False)
|
|
285
|
+
"""Discriminator for Amp ACP agent."""
|
|
286
|
+
|
|
287
|
+
def get_command(self) -> str:
|
|
288
|
+
"""Get the command to spawn the ACP bridge server."""
|
|
289
|
+
return "npx"
|
|
290
|
+
|
|
291
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
292
|
+
"""Build command arguments for amp-acp bridge."""
|
|
293
|
+
return ["-y", "amp-acp"]
|
|
294
|
+
|
|
295
|
+
@property
|
|
296
|
+
def model_providers(self) -> list[ProviderType]:
|
|
297
|
+
"""Amp supports multiple providers."""
|
|
298
|
+
return ["openai", "anthropic", "gemini"]
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class CagentACPAgentConfig(BaseACPAgentConfig):
|
|
302
|
+
"""Configuration for Docker cagent via ACP.
|
|
303
|
+
|
|
304
|
+
Agent Builder and Runtime by Docker Engineering.
|
|
305
|
+
|
|
306
|
+
Example:
|
|
307
|
+
```yaml
|
|
308
|
+
agents:
|
|
309
|
+
cagent:
|
|
310
|
+
type: acp
|
|
311
|
+
provider: cagent
|
|
312
|
+
cwd: /path/to/project
|
|
313
|
+
agent_file: ./agent.yaml
|
|
314
|
+
code_mode_tools: true
|
|
315
|
+
working_dir: /path/to/work
|
|
316
|
+
```
|
|
317
|
+
"""
|
|
318
|
+
|
|
319
|
+
model_config = ConfigDict(json_schema_extra={"title": "Cagent ACP Agent Configuration"})
|
|
320
|
+
|
|
321
|
+
provider: Literal["cagent"] = Field("cagent", init=False)
|
|
322
|
+
"""Discriminator for Docker cagent ACP agent."""
|
|
323
|
+
|
|
324
|
+
agent_file: str | None = Field(
|
|
325
|
+
default=None,
|
|
326
|
+
title="Agent File",
|
|
327
|
+
examples=["./agent.yaml", "registry.docker.io/my-agent:latest"],
|
|
328
|
+
)
|
|
329
|
+
"""Agent configuration file or registry reference."""
|
|
330
|
+
|
|
331
|
+
code_mode_tools: bool = Field(default=False, title="Code Mode Tools")
|
|
332
|
+
"""Provide a single tool to call other tools via Javascript."""
|
|
333
|
+
|
|
334
|
+
env_from_file: list[str] | None = Field(
|
|
335
|
+
default=None,
|
|
336
|
+
title="Env From File",
|
|
337
|
+
examples=[[".env", ".env.production"], ["config/.env.local"]],
|
|
338
|
+
)
|
|
339
|
+
"""Set environment variables from file."""
|
|
340
|
+
|
|
341
|
+
models_gateway: str | None = Field(
|
|
342
|
+
default=None,
|
|
343
|
+
title="Models Gateway",
|
|
344
|
+
examples=["http://localhost:8000", "https://api.example.com/models"],
|
|
345
|
+
)
|
|
346
|
+
"""Set the models gateway address."""
|
|
347
|
+
|
|
348
|
+
working_dir: str | None = Field(
|
|
349
|
+
default=None,
|
|
350
|
+
title="Working Dir",
|
|
351
|
+
examples=["/path/to/project", "/home/user/workspace"],
|
|
352
|
+
)
|
|
353
|
+
"""Set the working directory for the session."""
|
|
354
|
+
|
|
355
|
+
debug: bool = Field(default=False, title="Debug")
|
|
356
|
+
"""Enable debug logging."""
|
|
357
|
+
|
|
358
|
+
otel: bool = Field(default=False, title="OTEL")
|
|
359
|
+
"""Enable OpenTelemetry tracing."""
|
|
360
|
+
|
|
361
|
+
log_file: str | None = Field(
|
|
362
|
+
default=None,
|
|
363
|
+
title="Log File",
|
|
364
|
+
examples=["/var/log/cagent.log", "./debug.log"],
|
|
365
|
+
)
|
|
366
|
+
"""Path to debug log file."""
|
|
367
|
+
|
|
368
|
+
def get_command(self) -> str:
|
|
369
|
+
"""Get the command to spawn the ACP server."""
|
|
370
|
+
return "cagent"
|
|
371
|
+
|
|
372
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
373
|
+
"""Build command arguments from settings."""
|
|
374
|
+
args = ["acp"]
|
|
375
|
+
|
|
376
|
+
if self.agent_file:
|
|
377
|
+
args.append(self.agent_file)
|
|
378
|
+
if self.code_mode_tools:
|
|
379
|
+
args.append("--code-mode-tools")
|
|
380
|
+
if self.env_from_file:
|
|
381
|
+
for env_file in self.env_from_file:
|
|
382
|
+
args.extend(["--env-from-file", env_file])
|
|
383
|
+
if self.models_gateway:
|
|
384
|
+
args.extend(["--models-gateway", self.models_gateway])
|
|
385
|
+
if self.working_dir:
|
|
386
|
+
args.extend(["--working-dir", self.working_dir])
|
|
387
|
+
if self.debug:
|
|
388
|
+
args.append("--debug")
|
|
389
|
+
if self.otel:
|
|
390
|
+
args.append("--otel")
|
|
391
|
+
if self.log_file:
|
|
392
|
+
args.extend(["--log-file", self.log_file])
|
|
393
|
+
|
|
394
|
+
return args
|
|
395
|
+
|
|
396
|
+
@property
|
|
397
|
+
def model_providers(self) -> list[ProviderType]:
|
|
398
|
+
"""Cagent supports multiple providers via MCP."""
|
|
399
|
+
return ["openai", "anthropic", "gemini"]
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
class StakpakACPAgentConfig(BaseACPAgentConfig):
|
|
403
|
+
"""Configuration for Stakpak Agent via ACP.
|
|
404
|
+
|
|
405
|
+
Terminal-native DevOps Agent in Rust with enterprise-grade security.
|
|
406
|
+
|
|
407
|
+
Example:
|
|
408
|
+
```yaml
|
|
409
|
+
agents:
|
|
410
|
+
stakpak:
|
|
411
|
+
type: acp
|
|
412
|
+
provider: stakpak
|
|
413
|
+
cwd: /path/to/project
|
|
414
|
+
model: smart
|
|
415
|
+
workdir: /path/to/work
|
|
416
|
+
verbose: true
|
|
417
|
+
```
|
|
418
|
+
"""
|
|
419
|
+
|
|
420
|
+
model_config = ConfigDict(json_schema_extra={"title": "Stakpak ACP Agent Configuration"})
|
|
421
|
+
|
|
422
|
+
provider: Literal["stakpak"] = Field("stakpak", init=False)
|
|
423
|
+
"""Discriminator for Stakpak ACP agent."""
|
|
424
|
+
|
|
425
|
+
workdir: str | None = Field(
|
|
426
|
+
default=None,
|
|
427
|
+
title="Workdir",
|
|
428
|
+
examples=["/path/to/workdir", "/home/user/projects"],
|
|
429
|
+
)
|
|
430
|
+
"""Run the agent in a specific directory."""
|
|
431
|
+
|
|
432
|
+
verbose: bool = Field(default=False, title="Verbose")
|
|
433
|
+
"""Enable verbose output."""
|
|
434
|
+
|
|
435
|
+
debug: bool = Field(default=False, title="Debug")
|
|
436
|
+
"""Enable debug output."""
|
|
437
|
+
|
|
438
|
+
disable_secret_redaction: bool = Field(default=False, title="Disable Secret Redaction")
|
|
439
|
+
"""Disable secret redaction (WARNING: prints secrets to console)."""
|
|
440
|
+
|
|
441
|
+
privacy_mode: bool = Field(default=False, title="Privacy Mode")
|
|
442
|
+
"""Enable privacy mode to redact private data."""
|
|
443
|
+
|
|
444
|
+
study_mode: bool = Field(default=False, title="Study Mode")
|
|
445
|
+
"""Enable study mode to use the agent as a study assistant."""
|
|
446
|
+
|
|
447
|
+
index_big_project: bool = Field(default=False, title="Index Big Project")
|
|
448
|
+
"""Allow indexing of large projects (more than 500 supported files)."""
|
|
449
|
+
|
|
450
|
+
enable_slack_tools: bool = Field(default=False, title="Enable Slack Tools")
|
|
451
|
+
"""Enable Slack tools (experimental)."""
|
|
452
|
+
|
|
453
|
+
disable_mcp_mtls: bool = Field(default=False, title="Disable MCP mTLS")
|
|
454
|
+
"""Disable mTLS (WARNING: uses unencrypted HTTP communication)."""
|
|
455
|
+
|
|
456
|
+
enable_subagents: bool = Field(default=False, title="Enable Subagents")
|
|
457
|
+
"""Enable subagents."""
|
|
458
|
+
|
|
459
|
+
subagent_config: str | None = Field(
|
|
460
|
+
default=None,
|
|
461
|
+
title="Subagent Config",
|
|
462
|
+
examples=["subagents.toml", "/etc/stakpak/subagents.toml"],
|
|
463
|
+
)
|
|
464
|
+
"""Subagent configuration file subagents.toml."""
|
|
465
|
+
|
|
466
|
+
allowed_tools: list[str] | None = Field(
|
|
467
|
+
default=None,
|
|
468
|
+
title="Allowed Tools",
|
|
469
|
+
examples=[["bash", "edit", "read"], ["search", "browse"]],
|
|
470
|
+
)
|
|
471
|
+
"""Allow only the specified tools in the agent's context."""
|
|
472
|
+
|
|
473
|
+
profile: str | None = Field(
|
|
474
|
+
default=None,
|
|
475
|
+
title="Profile",
|
|
476
|
+
examples=["default", "production", "development"],
|
|
477
|
+
)
|
|
478
|
+
"""Configuration profile to use."""
|
|
479
|
+
|
|
480
|
+
model: Literal["smart", "eco"] | None = Field(
|
|
481
|
+
default=None,
|
|
482
|
+
title="Model",
|
|
483
|
+
examples=["smart", "eco"],
|
|
484
|
+
)
|
|
485
|
+
"""Choose agent model on startup."""
|
|
486
|
+
|
|
487
|
+
config: str | None = Field(
|
|
488
|
+
default=None,
|
|
489
|
+
title="Config",
|
|
490
|
+
examples=["config.toml", "/etc/stakpak/config.toml"],
|
|
491
|
+
)
|
|
492
|
+
"""Custom path to config file."""
|
|
493
|
+
|
|
494
|
+
def get_command(self) -> str:
|
|
495
|
+
"""Get the command to spawn the ACP server."""
|
|
496
|
+
return "stakpak"
|
|
497
|
+
|
|
498
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
499
|
+
"""Build command arguments from settings."""
|
|
500
|
+
args = ["acp"]
|
|
501
|
+
|
|
502
|
+
# Handle system prompt from base class - Stakpak uses file
|
|
503
|
+
prompt_file = await self.write_system_prompt_file(prompt_manager)
|
|
504
|
+
if prompt_file:
|
|
505
|
+
args.extend(["--system-prompt-file", prompt_file])
|
|
506
|
+
|
|
507
|
+
if self.workdir:
|
|
508
|
+
args.extend(["--workdir", self.workdir])
|
|
509
|
+
if self.verbose:
|
|
510
|
+
args.append("--verbose")
|
|
511
|
+
if self.debug:
|
|
512
|
+
args.append("--debug")
|
|
513
|
+
if self.disable_secret_redaction:
|
|
514
|
+
args.append("--disable-secret-redaction")
|
|
515
|
+
if self.privacy_mode:
|
|
516
|
+
args.append("--privacy-mode")
|
|
517
|
+
if self.study_mode:
|
|
518
|
+
args.append("--study-mode")
|
|
519
|
+
if self.index_big_project:
|
|
520
|
+
args.append("--index-big-project")
|
|
521
|
+
if self.enable_slack_tools:
|
|
522
|
+
args.append("--enable-slack-tools")
|
|
523
|
+
if self.disable_mcp_mtls:
|
|
524
|
+
args.append("--disable-mcp-mtls")
|
|
525
|
+
if self.enable_subagents:
|
|
526
|
+
args.append("--enable-subagents")
|
|
527
|
+
if self.subagent_config:
|
|
528
|
+
args.extend(["--subagent-config", self.subagent_config])
|
|
529
|
+
if self.allowed_tools:
|
|
530
|
+
for tool in self.allowed_tools:
|
|
531
|
+
args.extend(["--tool", tool])
|
|
532
|
+
if self.profile:
|
|
533
|
+
args.extend(["--profile", self.profile])
|
|
534
|
+
if self.model:
|
|
535
|
+
args.extend(["--model", self.model])
|
|
536
|
+
if self.config:
|
|
537
|
+
args.extend(["--config", self.config])
|
|
538
|
+
|
|
539
|
+
return args
|
|
540
|
+
|
|
541
|
+
@property
|
|
542
|
+
def model_providers(self) -> list[ProviderType]:
|
|
543
|
+
"""Stakpak supports multiple providers."""
|
|
544
|
+
return ["openai", "anthropic", "gemini"]
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
class VTCodeACPAgentConfig(BaseACPAgentConfig):
|
|
548
|
+
"""Configuration for VT Code via ACP.
|
|
549
|
+
|
|
550
|
+
Rust-based terminal coding agent with semantic code intelligence.
|
|
551
|
+
|
|
552
|
+
Example:
|
|
553
|
+
```yaml
|
|
554
|
+
agents:
|
|
555
|
+
vtcode:
|
|
556
|
+
type: acp
|
|
557
|
+
provider: vtcode
|
|
558
|
+
cwd: /path/to/project
|
|
559
|
+
model: gemini-2.5-flash-preview-05-20
|
|
560
|
+
model_provider: gemini
|
|
561
|
+
workspace: /path/to/workspace
|
|
562
|
+
```
|
|
563
|
+
"""
|
|
564
|
+
|
|
565
|
+
model_config = ConfigDict(json_schema_extra={"title": "VTCode ACP Agent Configuration"})
|
|
566
|
+
|
|
567
|
+
provider: Literal["vtcode"] = Field("vtcode", init=False)
|
|
568
|
+
"""Discriminator for VT Code ACP agent."""
|
|
569
|
+
|
|
570
|
+
model: str | None = Field(
|
|
571
|
+
default=None,
|
|
572
|
+
title="Model",
|
|
573
|
+
examples=["gemini-2.5-flash-preview-05-20", "gpt-4o", "claude-3-5-sonnet"],
|
|
574
|
+
)
|
|
575
|
+
"""LLM Model ID."""
|
|
576
|
+
|
|
577
|
+
model_provider: (
|
|
578
|
+
Literal["gemini", "openai", "anthropic", "deepseek", "openrouter", "xai"] | None
|
|
579
|
+
) = Field(
|
|
580
|
+
default=None,
|
|
581
|
+
title="Model Provider",
|
|
582
|
+
examples=["gemini", "openai"],
|
|
583
|
+
)
|
|
584
|
+
"""LLM Provider."""
|
|
585
|
+
|
|
586
|
+
api_key_env: str | None = Field(
|
|
587
|
+
default=None,
|
|
588
|
+
title="API Key Env",
|
|
589
|
+
examples=["GEMINI_API_KEY", "OPENAI_API_KEY"],
|
|
590
|
+
)
|
|
591
|
+
"""API key environment variable."""
|
|
592
|
+
|
|
593
|
+
workspace: str | None = Field(
|
|
594
|
+
default=None,
|
|
595
|
+
title="Workspace",
|
|
596
|
+
examples=["/path/to/workspace", "/home/user/projects"],
|
|
597
|
+
)
|
|
598
|
+
"""Workspace root directory for file operations."""
|
|
599
|
+
|
|
600
|
+
enable_tree_sitter: bool = Field(default=False, title="Enable Tree-Sitter")
|
|
601
|
+
"""Enable tree-sitter code analysis."""
|
|
602
|
+
|
|
603
|
+
performance_monitoring: bool = Field(default=False, title="Performance Monitoring")
|
|
604
|
+
"""Enable performance monitoring."""
|
|
605
|
+
|
|
606
|
+
research_preview: bool = Field(default=False, title="Research Preview")
|
|
607
|
+
"""Enable research-preview features."""
|
|
608
|
+
|
|
609
|
+
security_level: Literal["strict", "moderate", "permissive"] | None = Field(
|
|
610
|
+
default=None,
|
|
611
|
+
title="Security Level",
|
|
612
|
+
examples=["strict", "moderate"],
|
|
613
|
+
)
|
|
614
|
+
"""Security level for tool execution."""
|
|
615
|
+
|
|
616
|
+
show_file_diffs: bool = Field(default=False, title="Show File Diffs")
|
|
617
|
+
"""Show diffs for file changes in chat interface."""
|
|
618
|
+
|
|
619
|
+
max_concurrent_ops: int | None = Field(
|
|
620
|
+
default=None,
|
|
621
|
+
title="Max Concurrent Ops",
|
|
622
|
+
examples=[5, 10],
|
|
623
|
+
)
|
|
624
|
+
"""Maximum concurrent async operations."""
|
|
625
|
+
|
|
626
|
+
api_rate_limit: int | None = Field(
|
|
627
|
+
default=None,
|
|
628
|
+
title="API Rate Limit",
|
|
629
|
+
examples=[60, 100],
|
|
630
|
+
)
|
|
631
|
+
"""Maximum API requests per minute."""
|
|
632
|
+
|
|
633
|
+
max_tool_calls: int | None = Field(
|
|
634
|
+
default=None,
|
|
635
|
+
title="Max Tool Calls",
|
|
636
|
+
examples=[100, 500],
|
|
637
|
+
)
|
|
638
|
+
"""Maximum tool calls per session."""
|
|
639
|
+
|
|
640
|
+
config: str | None = Field(
|
|
641
|
+
default=None,
|
|
642
|
+
title="Config",
|
|
643
|
+
examples=["config.toml", "/etc/vtcode/config.toml"],
|
|
644
|
+
)
|
|
645
|
+
"""Configuration file path."""
|
|
646
|
+
|
|
647
|
+
skip_confirmations: bool = Field(default=False, title="Skip Confirmations")
|
|
648
|
+
"""Skip safety confirmations."""
|
|
649
|
+
|
|
650
|
+
full_auto: bool = Field(default=False, title="Full Auto")
|
|
651
|
+
"""Enable full-auto mode (no interaction)."""
|
|
652
|
+
|
|
653
|
+
def get_command(self) -> str:
|
|
654
|
+
"""Get the command to spawn the ACP server."""
|
|
655
|
+
return "vtcode"
|
|
656
|
+
|
|
657
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
658
|
+
"""Build command arguments from settings."""
|
|
659
|
+
args = ["acp"]
|
|
660
|
+
|
|
661
|
+
if self.model:
|
|
662
|
+
args.extend(["--model", self.model])
|
|
663
|
+
if self.model_provider:
|
|
664
|
+
args.extend(["--provider", self.model_provider])
|
|
665
|
+
if self.api_key_env:
|
|
666
|
+
args.extend(["--api-key-env", self.api_key_env])
|
|
667
|
+
if self.workspace:
|
|
668
|
+
args.extend(["--workspace", self.workspace])
|
|
669
|
+
if self.enable_tree_sitter:
|
|
670
|
+
args.append("--enable-tree-sitter")
|
|
671
|
+
if self.performance_monitoring:
|
|
672
|
+
args.append("--performance-monitoring")
|
|
673
|
+
if self.research_preview:
|
|
674
|
+
args.append("--research-preview")
|
|
675
|
+
if self.security_level:
|
|
676
|
+
args.extend(["--security-level", self.security_level])
|
|
677
|
+
if self.show_file_diffs:
|
|
678
|
+
args.append("--show-file-diffs")
|
|
679
|
+
if self.max_concurrent_ops is not None:
|
|
680
|
+
args.extend(["--max-concurrent-ops", str(self.max_concurrent_ops)])
|
|
681
|
+
if self.api_rate_limit is not None:
|
|
682
|
+
args.extend(["--api-rate-limit", str(self.api_rate_limit)])
|
|
683
|
+
if self.max_tool_calls is not None:
|
|
684
|
+
args.extend(["--max-tool-calls", str(self.max_tool_calls)])
|
|
685
|
+
if self.config:
|
|
686
|
+
args.extend(["--config", self.config])
|
|
687
|
+
if self.skip_confirmations:
|
|
688
|
+
args.append("--skip-confirmations")
|
|
689
|
+
if self.full_auto:
|
|
690
|
+
args.append("--full-auto")
|
|
691
|
+
|
|
692
|
+
return args
|
|
693
|
+
|
|
694
|
+
@property
|
|
695
|
+
def model_providers(self) -> list[ProviderType]:
|
|
696
|
+
"""VT Code supports multiple providers."""
|
|
697
|
+
return ["openai", "anthropic", "gemini"]
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
class CursorACPAgentConfig(BaseACPAgentConfig):
|
|
701
|
+
"""Configuration for Cursor via ACP.
|
|
702
|
+
|
|
703
|
+
Cursor CLI agent with filesystem and terminal capabilities.
|
|
704
|
+
See https://github.com/blowmage/cursor-agent-acp-npm
|
|
705
|
+
|
|
706
|
+
Example:
|
|
707
|
+
```yaml
|
|
708
|
+
agents:
|
|
709
|
+
coder:
|
|
710
|
+
type: acp
|
|
711
|
+
provider: cursor
|
|
712
|
+
cwd: /path/to/project
|
|
713
|
+
session_dir: ~/.cursor-sessions
|
|
714
|
+
timeout: 30000
|
|
715
|
+
```
|
|
716
|
+
"""
|
|
717
|
+
|
|
718
|
+
model_config = ConfigDict(json_schema_extra={"title": "Cursor ACP Agent Configuration"})
|
|
719
|
+
|
|
720
|
+
provider: Literal["cursor"] = Field("cursor", init=False)
|
|
721
|
+
"""Discriminator for Cursor ACP agent."""
|
|
722
|
+
|
|
723
|
+
config: str | None = Field(
|
|
724
|
+
default=None,
|
|
725
|
+
title="Config",
|
|
726
|
+
examples=["config.json", "/etc/cursor/config.json"],
|
|
727
|
+
)
|
|
728
|
+
"""Path to configuration file."""
|
|
729
|
+
|
|
730
|
+
log_level: Literal["error", "warn", "info", "debug"] | None = Field(
|
|
731
|
+
default=None,
|
|
732
|
+
title="Log Level",
|
|
733
|
+
examples=["info", "debug"],
|
|
734
|
+
)
|
|
735
|
+
"""Logging level."""
|
|
736
|
+
|
|
737
|
+
log_file: str | None = Field(
|
|
738
|
+
default=None,
|
|
739
|
+
title="Log File",
|
|
740
|
+
examples=["/var/log/cursor.log", "./cursor-debug.log"],
|
|
741
|
+
)
|
|
742
|
+
"""Log file path (logs to stderr by default)."""
|
|
743
|
+
|
|
744
|
+
session_dir: str | None = Field(
|
|
745
|
+
default=None,
|
|
746
|
+
title="Session Dir",
|
|
747
|
+
examples=["~/.cursor-sessions", "/tmp/cursor-sessions"],
|
|
748
|
+
)
|
|
749
|
+
"""Session storage directory (default: ~/.cursor-sessions)."""
|
|
750
|
+
|
|
751
|
+
timeout: int | None = Field(
|
|
752
|
+
default=None,
|
|
753
|
+
title="Timeout",
|
|
754
|
+
examples=[30000, 60000],
|
|
755
|
+
)
|
|
756
|
+
"""Cursor-agent timeout in milliseconds (default: 30000)."""
|
|
757
|
+
|
|
758
|
+
retries: int | None = Field(
|
|
759
|
+
default=None,
|
|
760
|
+
title="Retries",
|
|
761
|
+
examples=[3, 5],
|
|
762
|
+
)
|
|
763
|
+
"""Number of retries for cursor-agent commands (default: 3)."""
|
|
764
|
+
|
|
765
|
+
max_sessions: int | None = Field(
|
|
766
|
+
default=None,
|
|
767
|
+
title="Max Sessions",
|
|
768
|
+
examples=[100, 200],
|
|
769
|
+
)
|
|
770
|
+
"""Maximum number of concurrent sessions (default: 100)."""
|
|
771
|
+
|
|
772
|
+
session_timeout: int | None = Field(
|
|
773
|
+
default=None,
|
|
774
|
+
title="Session Timeout",
|
|
775
|
+
examples=[3600000, 7200000],
|
|
776
|
+
)
|
|
777
|
+
"""Session timeout in milliseconds (default: 3600000)."""
|
|
778
|
+
|
|
779
|
+
no_filesystem: bool = Field(default=False, title="No Filesystem")
|
|
780
|
+
"""Disable filesystem tools."""
|
|
781
|
+
|
|
782
|
+
no_terminal: bool = Field(default=False, title="No Terminal")
|
|
783
|
+
"""Disable terminal tools."""
|
|
784
|
+
|
|
785
|
+
max_processes: int | None = Field(
|
|
786
|
+
default=None,
|
|
787
|
+
title="Max Processes",
|
|
788
|
+
examples=[5, 10],
|
|
789
|
+
)
|
|
790
|
+
"""Maximum number of terminal processes (default: 5)."""
|
|
791
|
+
|
|
792
|
+
def get_command(self) -> str:
|
|
793
|
+
"""Get the command to spawn the ACP server."""
|
|
794
|
+
return "cursor-agent-acp"
|
|
795
|
+
|
|
796
|
+
async def get_args(self, prompt_manager: PromptManager | None = None) -> list[str]:
|
|
797
|
+
"""Build command arguments from settings."""
|
|
798
|
+
args: list[str] = []
|
|
799
|
+
|
|
800
|
+
if self.config:
|
|
801
|
+
args.extend(["--config", self.config])
|
|
802
|
+
if self.log_level:
|
|
803
|
+
args.extend(["--log-level", self.log_level])
|
|
804
|
+
if self.log_file:
|
|
805
|
+
args.extend(["--log-file", self.log_file])
|
|
806
|
+
if self.session_dir:
|
|
807
|
+
args.extend(["--session-dir", self.session_dir])
|
|
808
|
+
if self.timeout is not None:
|
|
809
|
+
args.extend(["--timeout", str(self.timeout)])
|
|
810
|
+
if self.retries is not None:
|
|
811
|
+
args.extend(["--retries", str(self.retries)])
|
|
812
|
+
if self.max_sessions is not None:
|
|
813
|
+
args.extend(["--max-sessions", str(self.max_sessions)])
|
|
814
|
+
if self.session_timeout is not None:
|
|
815
|
+
args.extend(["--session-timeout", str(self.session_timeout)])
|
|
816
|
+
if self.no_filesystem:
|
|
817
|
+
args.append("--no-filesystem")
|
|
818
|
+
if self.no_terminal:
|
|
819
|
+
args.append("--no-terminal")
|
|
820
|
+
if self.max_processes is not None:
|
|
821
|
+
args.extend(["--max-processes", str(self.max_processes)])
|
|
822
|
+
return args
|
|
823
|
+
|
|
824
|
+
@property
|
|
825
|
+
def model_providers(self) -> list[ProviderType]:
|
|
826
|
+
"""Cursor supports multiple providers."""
|
|
827
|
+
return ["openai", "anthropic", "gemini", "openrouter"]
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
# Union of all ACP agent config types
|
|
831
|
+
RegularACPAgentConfigTypes = (
|
|
832
|
+
CodexACPAgentConfig
|
|
833
|
+
| OpenCodeACPAgentConfig
|
|
834
|
+
| GooseACPAgentConfig
|
|
835
|
+
| OpenHandsACPAgentConfig
|
|
836
|
+
| AmpACPAgentConfig
|
|
837
|
+
| CagentACPAgentConfig
|
|
838
|
+
| StakpakACPAgentConfig
|
|
839
|
+
| MistralACPAgentConfig
|
|
840
|
+
| VTCodeACPAgentConfig
|
|
841
|
+
| CursorACPAgentConfig
|
|
842
|
+
)
|