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,266 @@
|
|
|
1
|
+
"""Headless ACP client implementation with real filesystem and terminal operations.
|
|
2
|
+
|
|
3
|
+
This module provides a headless client implementation that performs actual
|
|
4
|
+
filesystem operations and uses ProcessManager for real terminal execution,
|
|
5
|
+
making it ideal for testing and standalone usage.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import TYPE_CHECKING, Any
|
|
12
|
+
import uuid
|
|
13
|
+
|
|
14
|
+
from anyenv import ProcessManager
|
|
15
|
+
|
|
16
|
+
from acp.client.protocol import Client
|
|
17
|
+
from acp.schema import (
|
|
18
|
+
CreateTerminalResponse,
|
|
19
|
+
KillTerminalCommandResponse,
|
|
20
|
+
ReadTextFileResponse,
|
|
21
|
+
ReleaseTerminalResponse,
|
|
22
|
+
RequestPermissionResponse,
|
|
23
|
+
TerminalOutputResponse,
|
|
24
|
+
WaitForTerminalExitResponse,
|
|
25
|
+
WriteTextFileResponse,
|
|
26
|
+
)
|
|
27
|
+
from agentpool.log import get_logger
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from acp.schema import (
|
|
32
|
+
CreateTerminalRequest,
|
|
33
|
+
KillTerminalCommandRequest,
|
|
34
|
+
ReadTextFileRequest,
|
|
35
|
+
ReleaseTerminalRequest,
|
|
36
|
+
RequestPermissionRequest,
|
|
37
|
+
SessionNotification,
|
|
38
|
+
TerminalOutputRequest,
|
|
39
|
+
WaitForTerminalExitRequest,
|
|
40
|
+
WriteTextFileRequest,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
logger = get_logger(__name__)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class HeadlessACPClient(Client):
|
|
47
|
+
"""Headless ACP client with real filesystem and terminal operations.
|
|
48
|
+
|
|
49
|
+
This client implementation:
|
|
50
|
+
- Performs real filesystem operations
|
|
51
|
+
- Uses ProcessManager for actual terminal/command execution
|
|
52
|
+
- Automatically grants permissions for testing
|
|
53
|
+
- Suitable for testing and standalone usage
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
*,
|
|
59
|
+
working_dir: Path | str | None = None,
|
|
60
|
+
allow_file_operations: bool = True,
|
|
61
|
+
auto_grant_permissions: bool = True,
|
|
62
|
+
) -> None:
|
|
63
|
+
"""Initialize headless ACP client.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
working_dir: Default working directory for operations
|
|
67
|
+
allow_file_operations: Whether to allow file read/write operations
|
|
68
|
+
auto_grant_permissions: Whether to automatically grant all permissions
|
|
69
|
+
"""
|
|
70
|
+
self.working_dir = Path(working_dir) if working_dir else Path.cwd()
|
|
71
|
+
self.allow_file_operations = allow_file_operations
|
|
72
|
+
self.auto_grant_permissions = auto_grant_permissions
|
|
73
|
+
# Process management for terminals
|
|
74
|
+
self.process_manager = ProcessManager()
|
|
75
|
+
self.terminals: dict[str, str] = {} # terminal_id -> process_id
|
|
76
|
+
# Tracking for testing/debugging
|
|
77
|
+
self.notifications: list[SessionNotification] = []
|
|
78
|
+
self.permission_requests: list[RequestPermissionRequest] = []
|
|
79
|
+
|
|
80
|
+
async def request_permission(
|
|
81
|
+
self, params: RequestPermissionRequest
|
|
82
|
+
) -> RequestPermissionResponse:
|
|
83
|
+
"""Handle permission requests. Grants if auto_grant_permissions is True."""
|
|
84
|
+
self.permission_requests.append(params)
|
|
85
|
+
tool_name = params.tool_call.title or "operation"
|
|
86
|
+
logger.info("Permission requested", tool_name=tool_name)
|
|
87
|
+
if self.auto_grant_permissions and params.options:
|
|
88
|
+
# Grant permission using first available option
|
|
89
|
+
option_id = params.options[0].option_id
|
|
90
|
+
logger.debug("Auto-granting permission", tool_name=tool_name)
|
|
91
|
+
return RequestPermissionResponse.allowed(option_id)
|
|
92
|
+
logger.debug("Denying permission", tool_name=tool_name)
|
|
93
|
+
return RequestPermissionResponse.denied()
|
|
94
|
+
|
|
95
|
+
async def session_update(self, params: SessionNotification) -> None:
|
|
96
|
+
"""Handle session update notifications."""
|
|
97
|
+
typ = type(params.update).__name__
|
|
98
|
+
logger.debug("Session update", session_id=params.session_id, update_type=typ)
|
|
99
|
+
self.notifications.append(params)
|
|
100
|
+
|
|
101
|
+
async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse:
|
|
102
|
+
"""Read text from file."""
|
|
103
|
+
if not self.allow_file_operations:
|
|
104
|
+
raise RuntimeError("File operations not allowed")
|
|
105
|
+
path = Path(params.path)
|
|
106
|
+
if not path.exists():
|
|
107
|
+
raise FileNotFoundError(f"File not found: {params.path}")
|
|
108
|
+
try:
|
|
109
|
+
content = path.read_text(encoding="utf-8")
|
|
110
|
+
# Apply line filtering if requested
|
|
111
|
+
if params.line is not None or params.limit is not None:
|
|
112
|
+
lines = content.splitlines(keepends=True)
|
|
113
|
+
start_line = (params.line - 1) if params.line else 0
|
|
114
|
+
end_line = start_line + params.limit if params.limit else len(lines)
|
|
115
|
+
content = "".join(lines[start_line:end_line])
|
|
116
|
+
logger.debug("Read file", path=params.path, num_chars=len(content))
|
|
117
|
+
return ReadTextFileResponse(content=content)
|
|
118
|
+
|
|
119
|
+
except Exception:
|
|
120
|
+
logger.exception("Failed to read file", path=params.path)
|
|
121
|
+
raise
|
|
122
|
+
|
|
123
|
+
async def write_text_file(self, params: WriteTextFileRequest) -> WriteTextFileResponse:
|
|
124
|
+
"""Write text to file."""
|
|
125
|
+
if not self.allow_file_operations:
|
|
126
|
+
raise RuntimeError("File operations not allowed")
|
|
127
|
+
path = Path(params.path)
|
|
128
|
+
try:
|
|
129
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
130
|
+
path.write_text(params.content, encoding="utf-8")
|
|
131
|
+
logger.debug("Wrote file", path=params.path, num_chars=len(params.content))
|
|
132
|
+
return WriteTextFileResponse()
|
|
133
|
+
except Exception:
|
|
134
|
+
logger.exception("Failed to write file", path=params.path)
|
|
135
|
+
raise
|
|
136
|
+
|
|
137
|
+
async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse:
|
|
138
|
+
"""Create a new terminal session using ProcessManager."""
|
|
139
|
+
try:
|
|
140
|
+
process_id = await self.process_manager.start_process(
|
|
141
|
+
command=params.command,
|
|
142
|
+
args=list(params.args) if params.args else None,
|
|
143
|
+
cwd=params.cwd or str(self.working_dir),
|
|
144
|
+
env={var.name: var.value for var in (params.env or [])},
|
|
145
|
+
output_limit=params.output_byte_limit,
|
|
146
|
+
)
|
|
147
|
+
terminal_id = f"term_{uuid.uuid4().hex[:8]}"
|
|
148
|
+
self.terminals[terminal_id] = process_id
|
|
149
|
+
msg = "Created terminal"
|
|
150
|
+
logger.info(msg, terminal_id=terminal_id, command=params.command, args=params.args)
|
|
151
|
+
|
|
152
|
+
return CreateTerminalResponse(terminal_id=terminal_id)
|
|
153
|
+
|
|
154
|
+
except Exception:
|
|
155
|
+
logger.exception("Failed to create terminal", command=params.command)
|
|
156
|
+
raise
|
|
157
|
+
|
|
158
|
+
async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse:
|
|
159
|
+
"""Get output from terminal."""
|
|
160
|
+
terminal_id = params.terminal_id
|
|
161
|
+
if terminal_id not in self.terminals:
|
|
162
|
+
msg = f"Terminal {terminal_id} not found"
|
|
163
|
+
raise ValueError(msg)
|
|
164
|
+
try:
|
|
165
|
+
process_id = self.terminals[terminal_id]
|
|
166
|
+
output = await self.process_manager.get_output(process_id)
|
|
167
|
+
return TerminalOutputResponse(output=output.combined, truncated=output.truncated)
|
|
168
|
+
except Exception:
|
|
169
|
+
logger.exception("Failed to get output", terminal_id=terminal_id)
|
|
170
|
+
raise
|
|
171
|
+
|
|
172
|
+
async def wait_for_terminal_exit(
|
|
173
|
+
self, params: WaitForTerminalExitRequest
|
|
174
|
+
) -> WaitForTerminalExitResponse:
|
|
175
|
+
"""Wait for terminal process to exit."""
|
|
176
|
+
terminal_id = params.terminal_id
|
|
177
|
+
if terminal_id not in self.terminals:
|
|
178
|
+
msg = f"Terminal {terminal_id} not found"
|
|
179
|
+
raise ValueError(msg)
|
|
180
|
+
try:
|
|
181
|
+
process_id = self.terminals[terminal_id]
|
|
182
|
+
exit_code = await self.process_manager.wait_for_exit(process_id)
|
|
183
|
+
logger.debug("Terminal exited", terminal_id=terminal_id, exit_code=exit_code)
|
|
184
|
+
return WaitForTerminalExitResponse(exit_code=exit_code)
|
|
185
|
+
except Exception:
|
|
186
|
+
logger.exception("Failed to wait", terminal_id=terminal_id)
|
|
187
|
+
raise
|
|
188
|
+
|
|
189
|
+
async def kill_terminal(
|
|
190
|
+
self, params: KillTerminalCommandRequest
|
|
191
|
+
) -> KillTerminalCommandResponse | None:
|
|
192
|
+
"""Kill terminal process."""
|
|
193
|
+
terminal_id = params.terminal_id
|
|
194
|
+
if terminal_id not in self.terminals:
|
|
195
|
+
msg = f"Terminal {terminal_id} not found"
|
|
196
|
+
raise ValueError(msg)
|
|
197
|
+
try:
|
|
198
|
+
process_id = self.terminals[terminal_id]
|
|
199
|
+
await self.process_manager.kill_process(process_id)
|
|
200
|
+
logger.info("Killed terminal", terminal_id=terminal_id)
|
|
201
|
+
return KillTerminalCommandResponse()
|
|
202
|
+
except Exception:
|
|
203
|
+
logger.exception("Failed to kill terminal", terminal_id=terminal_id)
|
|
204
|
+
raise
|
|
205
|
+
|
|
206
|
+
async def release_terminal(
|
|
207
|
+
self, params: ReleaseTerminalRequest
|
|
208
|
+
) -> ReleaseTerminalResponse | None:
|
|
209
|
+
"""Release terminal resources."""
|
|
210
|
+
terminal_id = params.terminal_id
|
|
211
|
+
if terminal_id not in self.terminals:
|
|
212
|
+
msg = f"Terminal {terminal_id} not found"
|
|
213
|
+
raise ValueError(msg)
|
|
214
|
+
try:
|
|
215
|
+
process_id = self.terminals[terminal_id]
|
|
216
|
+
await self.process_manager.release_process(process_id)
|
|
217
|
+
del self.terminals[terminal_id] # Remove from our tracking
|
|
218
|
+
logger.info("Released terminal", terminal_id=terminal_id)
|
|
219
|
+
return ReleaseTerminalResponse()
|
|
220
|
+
except Exception:
|
|
221
|
+
logger.exception("Failed to release terminal", terminal_id=terminal_id)
|
|
222
|
+
raise
|
|
223
|
+
|
|
224
|
+
async def cleanup(self) -> None:
|
|
225
|
+
"""Clean up all resources."""
|
|
226
|
+
logger.info("Cleaning up headless client resources")
|
|
227
|
+
for terminal_id, process_id in self.terminals.items():
|
|
228
|
+
try:
|
|
229
|
+
await self.process_manager.release_process(process_id)
|
|
230
|
+
except Exception:
|
|
231
|
+
logger.exception("Error cleaning up terminal", terminal_id=terminal_id)
|
|
232
|
+
|
|
233
|
+
self.terminals.clear()
|
|
234
|
+
await self.process_manager.cleanup()
|
|
235
|
+
logger.info("Headless client cleanup completed")
|
|
236
|
+
|
|
237
|
+
# Testing/debugging helpers
|
|
238
|
+
|
|
239
|
+
def get_session_updates(self) -> list[SessionNotification]:
|
|
240
|
+
"""Get all received session updates."""
|
|
241
|
+
return self.notifications.copy()
|
|
242
|
+
|
|
243
|
+
def clear_session_updates(self) -> None:
|
|
244
|
+
"""Clear all stored session updates."""
|
|
245
|
+
self.notifications.clear()
|
|
246
|
+
|
|
247
|
+
def get_permission_requests(self) -> list[RequestPermissionRequest]:
|
|
248
|
+
"""Get all permission requests."""
|
|
249
|
+
return self.permission_requests.copy()
|
|
250
|
+
|
|
251
|
+
def clear_permission_requests(self) -> None:
|
|
252
|
+
"""Clear all stored permission requests."""
|
|
253
|
+
self.permission_requests.clear()
|
|
254
|
+
|
|
255
|
+
def list_active_terminals(self) -> list[str]:
|
|
256
|
+
"""List all active terminal IDs."""
|
|
257
|
+
return list(self.terminals.keys())
|
|
258
|
+
|
|
259
|
+
async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
|
|
260
|
+
"""Handle extension method calls."""
|
|
261
|
+
logger.debug("Extension method called", method=method)
|
|
262
|
+
return {"ok": True, "method": method, "params": params}
|
|
263
|
+
|
|
264
|
+
async def ext_notification(self, method: str, params: dict[str, Any]) -> None:
|
|
265
|
+
"""Handle extension notifications."""
|
|
266
|
+
logger.debug("Extension notification", method=method)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""No-op ACP client implementation for bridging scenarios.
|
|
2
|
+
|
|
3
|
+
This module provides a minimal client that returns empty/default responses
|
|
4
|
+
for all operations. Useful for scenarios where you need a Client implementation
|
|
5
|
+
but don't actually need to handle client-side operations (e.g., when bridging
|
|
6
|
+
an agent to a different transport).
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING, Any
|
|
12
|
+
|
|
13
|
+
from acp.client.protocol import Client
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from acp.schema import (
|
|
18
|
+
CreateTerminalRequest,
|
|
19
|
+
CreateTerminalResponse,
|
|
20
|
+
KillTerminalCommandRequest,
|
|
21
|
+
KillTerminalCommandResponse,
|
|
22
|
+
ReadTextFileRequest,
|
|
23
|
+
ReadTextFileResponse,
|
|
24
|
+
ReleaseTerminalRequest,
|
|
25
|
+
ReleaseTerminalResponse,
|
|
26
|
+
RequestPermissionRequest,
|
|
27
|
+
RequestPermissionResponse,
|
|
28
|
+
SessionNotification,
|
|
29
|
+
TerminalOutputRequest,
|
|
30
|
+
TerminalOutputResponse,
|
|
31
|
+
WaitForTerminalExitRequest,
|
|
32
|
+
WaitForTerminalExitResponse,
|
|
33
|
+
WriteTextFileRequest,
|
|
34
|
+
WriteTextFileResponse,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class NoOpClient(Client):
|
|
39
|
+
"""Minimal client that returns default responses for all operations.
|
|
40
|
+
|
|
41
|
+
This client is useful for bridging scenarios where you need a Client
|
|
42
|
+
implementation but don't actually need to handle client-side operations.
|
|
43
|
+
All methods return minimal valid responses.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
async def request_permission(
|
|
47
|
+
self, params: RequestPermissionRequest
|
|
48
|
+
) -> RequestPermissionResponse:
|
|
49
|
+
"""Grant permission using first available option."""
|
|
50
|
+
from acp.schema import AllowedOutcome, RequestPermissionResponse
|
|
51
|
+
|
|
52
|
+
return RequestPermissionResponse(outcome=AllowedOutcome(option_id="allow"))
|
|
53
|
+
|
|
54
|
+
async def session_update(self, params: SessionNotification) -> None:
|
|
55
|
+
"""Ignore session updates."""
|
|
56
|
+
|
|
57
|
+
async def write_text_file(self, params: WriteTextFileRequest) -> WriteTextFileResponse:
|
|
58
|
+
"""Return empty write response."""
|
|
59
|
+
from acp.schema import WriteTextFileResponse
|
|
60
|
+
|
|
61
|
+
return WriteTextFileResponse()
|
|
62
|
+
|
|
63
|
+
async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse:
|
|
64
|
+
"""Return empty file content."""
|
|
65
|
+
from acp.schema import ReadTextFileResponse
|
|
66
|
+
|
|
67
|
+
return ReadTextFileResponse(content="")
|
|
68
|
+
|
|
69
|
+
async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse:
|
|
70
|
+
"""Return dummy terminal ID."""
|
|
71
|
+
from acp.schema import CreateTerminalResponse
|
|
72
|
+
|
|
73
|
+
return CreateTerminalResponse(terminal_id="noop-terminal")
|
|
74
|
+
|
|
75
|
+
async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse:
|
|
76
|
+
"""Return empty terminal output."""
|
|
77
|
+
from acp.schema import TerminalOutputResponse
|
|
78
|
+
|
|
79
|
+
return TerminalOutputResponse(output="", truncated=False)
|
|
80
|
+
|
|
81
|
+
async def release_terminal(
|
|
82
|
+
self, params: ReleaseTerminalRequest
|
|
83
|
+
) -> ReleaseTerminalResponse | None:
|
|
84
|
+
"""Return empty release response."""
|
|
85
|
+
from acp.schema import ReleaseTerminalResponse
|
|
86
|
+
|
|
87
|
+
return ReleaseTerminalResponse()
|
|
88
|
+
|
|
89
|
+
async def wait_for_terminal_exit(
|
|
90
|
+
self, params: WaitForTerminalExitRequest
|
|
91
|
+
) -> WaitForTerminalExitResponse:
|
|
92
|
+
"""Return immediate exit with code 0."""
|
|
93
|
+
from acp.schema import WaitForTerminalExitResponse
|
|
94
|
+
|
|
95
|
+
return WaitForTerminalExitResponse(exit_code=0)
|
|
96
|
+
|
|
97
|
+
async def kill_terminal(
|
|
98
|
+
self, params: KillTerminalCommandRequest
|
|
99
|
+
) -> KillTerminalCommandResponse | None:
|
|
100
|
+
"""Return empty kill response."""
|
|
101
|
+
from acp.schema import KillTerminalCommandResponse
|
|
102
|
+
|
|
103
|
+
return KillTerminalCommandResponse()
|
|
104
|
+
|
|
105
|
+
async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
|
|
106
|
+
"""Return empty dict for extension methods."""
|
|
107
|
+
return {}
|
|
108
|
+
|
|
109
|
+
async def ext_notification(self, method: str, params: dict[str, Any]) -> None:
|
|
110
|
+
"""Ignore extension notifications."""
|
acp/client/protocol.py
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Protocol
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from acp.schema import (
|
|
8
|
+
CreateTerminalRequest,
|
|
9
|
+
CreateTerminalResponse,
|
|
10
|
+
KillTerminalCommandRequest,
|
|
11
|
+
KillTerminalCommandResponse,
|
|
12
|
+
ReadTextFileRequest,
|
|
13
|
+
ReadTextFileResponse,
|
|
14
|
+
ReleaseTerminalRequest,
|
|
15
|
+
ReleaseTerminalResponse,
|
|
16
|
+
RequestPermissionRequest,
|
|
17
|
+
RequestPermissionResponse,
|
|
18
|
+
SessionNotification,
|
|
19
|
+
TerminalOutputRequest,
|
|
20
|
+
TerminalOutputResponse,
|
|
21
|
+
WaitForTerminalExitRequest,
|
|
22
|
+
WaitForTerminalExitResponse,
|
|
23
|
+
WriteTextFileRequest,
|
|
24
|
+
WriteTextFileResponse,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Client(Protocol):
|
|
29
|
+
"""Base client interface for ACP."""
|
|
30
|
+
|
|
31
|
+
async def request_permission(
|
|
32
|
+
self, params: RequestPermissionRequest
|
|
33
|
+
) -> RequestPermissionResponse: ...
|
|
34
|
+
|
|
35
|
+
async def session_update(self, params: SessionNotification) -> None: ...
|
|
36
|
+
|
|
37
|
+
async def write_text_file(
|
|
38
|
+
self, params: WriteTextFileRequest
|
|
39
|
+
) -> WriteTextFileResponse | None: ...
|
|
40
|
+
|
|
41
|
+
async def read_text_file(self, params: ReadTextFileRequest) -> ReadTextFileResponse: ...
|
|
42
|
+
|
|
43
|
+
async def create_terminal(self, params: CreateTerminalRequest) -> CreateTerminalResponse: ...
|
|
44
|
+
|
|
45
|
+
async def terminal_output(self, params: TerminalOutputRequest) -> TerminalOutputResponse: ...
|
|
46
|
+
|
|
47
|
+
async def release_terminal(
|
|
48
|
+
self, params: ReleaseTerminalRequest
|
|
49
|
+
) -> ReleaseTerminalResponse | None: ...
|
|
50
|
+
|
|
51
|
+
async def wait_for_terminal_exit(
|
|
52
|
+
self, params: WaitForTerminalExitRequest
|
|
53
|
+
) -> WaitForTerminalExitResponse: ...
|
|
54
|
+
|
|
55
|
+
async def kill_terminal(
|
|
56
|
+
self, params: KillTerminalCommandRequest
|
|
57
|
+
) -> KillTerminalCommandResponse | None: ...
|
|
58
|
+
|
|
59
|
+
async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]: ...
|
|
60
|
+
|
|
61
|
+
async def ext_notification(self, method: str, params: dict[str, Any]) -> None: ...
|