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,192 @@
|
|
|
1
|
+
"""AG-UI agent helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any
|
|
6
|
+
from uuid import uuid4
|
|
7
|
+
|
|
8
|
+
from pydantic import TypeAdapter
|
|
9
|
+
|
|
10
|
+
from agentpool.log import get_logger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from collections.abc import AsyncIterator
|
|
15
|
+
|
|
16
|
+
from ag_ui.core import Event, ToolMessage
|
|
17
|
+
import httpx
|
|
18
|
+
|
|
19
|
+
from agentpool.agents.context import ConfirmationResult
|
|
20
|
+
from agentpool.messaging.context import NodeContext
|
|
21
|
+
from agentpool.tools import Tool
|
|
22
|
+
from agentpool.ui.base import InputProvider
|
|
23
|
+
from agentpool_config.nodes import ToolConfirmationMode
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
logger = get_logger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def _should_confirm_tool(
|
|
30
|
+
tool: Tool,
|
|
31
|
+
confirmation_mode: ToolConfirmationMode,
|
|
32
|
+
) -> bool:
|
|
33
|
+
"""Determine if a tool requires confirmation based on mode.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
tool: The tool to check
|
|
37
|
+
confirmation_mode: Current confirmation mode
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
True if confirmation is required
|
|
41
|
+
"""
|
|
42
|
+
if confirmation_mode == "never":
|
|
43
|
+
return False
|
|
44
|
+
if confirmation_mode == "always":
|
|
45
|
+
return True
|
|
46
|
+
# "per_tool" mode - check tool's requires_confirmation attribute
|
|
47
|
+
return tool.requires_confirmation
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
async def _get_tool_confirmation(
|
|
51
|
+
tool: Tool,
|
|
52
|
+
args: dict[str, Any],
|
|
53
|
+
input_provider: InputProvider,
|
|
54
|
+
context: NodeContext[Any],
|
|
55
|
+
) -> ConfirmationResult:
|
|
56
|
+
"""Get confirmation for tool execution.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
tool: Tool to confirm
|
|
60
|
+
args: Tool arguments
|
|
61
|
+
input_provider: Provider for confirmation UI
|
|
62
|
+
context: Node context
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Confirmation result
|
|
66
|
+
"""
|
|
67
|
+
return await input_provider.get_tool_confirmation(
|
|
68
|
+
context=context,
|
|
69
|
+
tool=tool,
|
|
70
|
+
args=args,
|
|
71
|
+
message_history=None,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
async def execute_tool_calls(
|
|
76
|
+
tool_calls: list[tuple[str, str, dict[str, Any]]],
|
|
77
|
+
tools_by_name: dict[str, Tool],
|
|
78
|
+
*,
|
|
79
|
+
confirmation_mode: ToolConfirmationMode = "never",
|
|
80
|
+
input_provider: InputProvider | None = None,
|
|
81
|
+
context: NodeContext[Any] | None = None,
|
|
82
|
+
) -> list[ToolMessage]:
|
|
83
|
+
"""Execute tool calls locally and return results.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
tool_calls: List of (tool_call_id, tool_name, args) tuples
|
|
87
|
+
tools_by_name: Dictionary mapping tool names to Tool instances
|
|
88
|
+
confirmation_mode: Tool confirmation mode
|
|
89
|
+
input_provider: Optional input provider for confirmation requests
|
|
90
|
+
context: Optional node context for confirmation
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
List of ToolMessage with execution results
|
|
94
|
+
"""
|
|
95
|
+
from ag_ui.core import ToolMessage as AGUIToolMessage
|
|
96
|
+
|
|
97
|
+
results: list[AGUIToolMessage] = []
|
|
98
|
+
for tc_id, tool_name, args in tool_calls:
|
|
99
|
+
if tool_name not in tools_by_name:
|
|
100
|
+
# Tool not registered locally - this is a server-side tool, skip it
|
|
101
|
+
logger.debug("Skipping server-side tool", tool=tool_name)
|
|
102
|
+
continue
|
|
103
|
+
|
|
104
|
+
tool = tools_by_name[tool_name]
|
|
105
|
+
|
|
106
|
+
# Check if confirmation is required
|
|
107
|
+
if await _should_confirm_tool(tool, confirmation_mode):
|
|
108
|
+
if input_provider is None or context is None:
|
|
109
|
+
logger.warning(
|
|
110
|
+
"Tool requires confirmation but no input provider available",
|
|
111
|
+
tool=tool_name,
|
|
112
|
+
)
|
|
113
|
+
result_msg = AGUIToolMessage(
|
|
114
|
+
id=str(uuid4()),
|
|
115
|
+
tool_call_id=tc_id,
|
|
116
|
+
content="Error: Tool requires confirmation but no provider available",
|
|
117
|
+
error="No input provider for confirmation",
|
|
118
|
+
)
|
|
119
|
+
results.append(result_msg)
|
|
120
|
+
continue
|
|
121
|
+
|
|
122
|
+
confirmation = await _get_tool_confirmation(tool, args, input_provider, context)
|
|
123
|
+
if confirmation == "skip":
|
|
124
|
+
logger.info("Tool execution skipped by user", tool=tool_name)
|
|
125
|
+
result_msg = AGUIToolMessage(
|
|
126
|
+
id=str(uuid4()),
|
|
127
|
+
tool_call_id=tc_id,
|
|
128
|
+
content="Tool execution was skipped by user",
|
|
129
|
+
error=None,
|
|
130
|
+
)
|
|
131
|
+
results.append(result_msg)
|
|
132
|
+
continue
|
|
133
|
+
if confirmation in ("abort_run", "abort_chain"):
|
|
134
|
+
logger.info("Tool execution aborted by user", tool=tool_name, action=confirmation)
|
|
135
|
+
result_msg = AGUIToolMessage(
|
|
136
|
+
id=str(uuid4()),
|
|
137
|
+
tool_call_id=tc_id,
|
|
138
|
+
content="Tool execution was aborted by user",
|
|
139
|
+
error="Execution aborted",
|
|
140
|
+
)
|
|
141
|
+
results.append(result_msg)
|
|
142
|
+
# Could raise an exception here to abort the entire run
|
|
143
|
+
continue
|
|
144
|
+
|
|
145
|
+
# Execute the tool
|
|
146
|
+
logger.info("Executing tool", tool=tool_name, args=args)
|
|
147
|
+
try:
|
|
148
|
+
result = await tool.execute(**args)
|
|
149
|
+
result_str = str(result) if not isinstance(result, str) else result
|
|
150
|
+
id_ = str(uuid4())
|
|
151
|
+
result_msg = AGUIToolMessage(id=id_, tool_call_id=tc_id, content=result_str)
|
|
152
|
+
logger.debug("Tool executed", tool=tool_name, result=result_str[:100])
|
|
153
|
+
except Exception as e:
|
|
154
|
+
logger.exception("Tool execution failed", tool=tool_name)
|
|
155
|
+
result_msg = AGUIToolMessage(
|
|
156
|
+
id=str(uuid4()),
|
|
157
|
+
tool_call_id=tc_id,
|
|
158
|
+
content=f"Error executing tool: {e}",
|
|
159
|
+
error=str(e),
|
|
160
|
+
)
|
|
161
|
+
results.append(result_msg)
|
|
162
|
+
return results
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
async def parse_sse_stream(response: httpx.Response) -> AsyncIterator[Event]:
|
|
166
|
+
"""Parse Server-Sent Events stream.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
response: HTTP response with SSE stream
|
|
170
|
+
|
|
171
|
+
Yields:
|
|
172
|
+
Parsed AG-UI events
|
|
173
|
+
"""
|
|
174
|
+
from ag_ui.core import Event
|
|
175
|
+
|
|
176
|
+
event_adapter: TypeAdapter[Event] = TypeAdapter(Event)
|
|
177
|
+
buffer = ""
|
|
178
|
+
async for chunk in response.aiter_text():
|
|
179
|
+
buffer += chunk
|
|
180
|
+
# Process complete SSE events
|
|
181
|
+
while "\n\n" in buffer:
|
|
182
|
+
event_text, buffer = buffer.split("\n\n", 1)
|
|
183
|
+
# Parse SSE format: "data: {json}\n"
|
|
184
|
+
for line in event_text.split("\n"):
|
|
185
|
+
if not line.startswith("data: "):
|
|
186
|
+
continue
|
|
187
|
+
json_str = line[6:] # Remove "data: " prefix
|
|
188
|
+
try:
|
|
189
|
+
event = event_adapter.validate_json(json_str)
|
|
190
|
+
yield event
|
|
191
|
+
except (ValueError, TypeError) as e:
|
|
192
|
+
logger.warning("Failed to parse AG-UI event", json=json_str[:100], error=str(e))
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import pathlib
|
|
4
|
+
|
|
5
|
+
import anyio
|
|
6
|
+
from schemez import YAMLCode
|
|
7
|
+
from upathtools import read_folder_as_text, read_path
|
|
8
|
+
|
|
9
|
+
from agentpool import Agent, models
|
|
10
|
+
import agentpool_config
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
SYS_PROMPT = """
|
|
14
|
+
You are an expert at creating AgentPool manifests.
|
|
15
|
+
Generate complete, valid YAML that CAN include:
|
|
16
|
+
- Agent configurations with appropriate tools and capabilities
|
|
17
|
+
- Team definitions with proper member relationships
|
|
18
|
+
- Connection setups for message routing
|
|
19
|
+
Follow the provided JSON schema exactly.
|
|
20
|
+
Only add stuff asked for by the user. Be tense. Less is more.
|
|
21
|
+
DONT try to guess tools.
|
|
22
|
+
Add response schemas and storage providers and environment section only when asked for.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
CONFIG_PATH = pathlib.Path(agentpool_config.__file__).parent
|
|
27
|
+
CORE_CONFIG_PATH = pathlib.Path(models.__file__).parent
|
|
28
|
+
README_URL = "https://raw.githubusercontent.com/phil65/agentpool/main/README.md"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def create_architect_agent(
|
|
32
|
+
name: str = "config_generator",
|
|
33
|
+
model: str = "openrouter:gpt-5-nano",
|
|
34
|
+
) -> Agent[None, YAMLCode]:
|
|
35
|
+
code = await read_folder_as_text(CONFIG_PATH, pattern="**/*.py")
|
|
36
|
+
core_code = await read_folder_as_text(CORE_CONFIG_PATH, pattern="**/*.py")
|
|
37
|
+
readme = await read_path(README_URL)
|
|
38
|
+
context = f"Code:\n{core_code}\n{code}\nReadme:\n{readme}"
|
|
39
|
+
agent = Agent(
|
|
40
|
+
name,
|
|
41
|
+
model=model,
|
|
42
|
+
system_prompt=SYS_PROMPT,
|
|
43
|
+
output_type=YAMLCode,
|
|
44
|
+
)
|
|
45
|
+
agent.conversation.add_context_message(context)
|
|
46
|
+
return agent
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def create_architect_agent_2(
|
|
50
|
+
name: str = "config_generator",
|
|
51
|
+
model: str = "openai:gpt-5-nano",
|
|
52
|
+
) -> Agent[None, YAMLCode]:
|
|
53
|
+
from agentpool import AgentsManifest
|
|
54
|
+
|
|
55
|
+
code = AgentsManifest.to_python_code()
|
|
56
|
+
return Agent(
|
|
57
|
+
name,
|
|
58
|
+
model=model,
|
|
59
|
+
system_prompt=SYS_PROMPT + f"<config>{code}</config>",
|
|
60
|
+
output_type=YAMLCode,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
|
|
66
|
+
async def main() -> None:
|
|
67
|
+
agent = await create_architect_agent_2()
|
|
68
|
+
cfg = await agent.run("write an AgentManifest with a GIT expert")
|
|
69
|
+
print(cfg.content.code)
|
|
70
|
+
|
|
71
|
+
print(anyio.run(main))
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"""Base class for all agent types."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import abstractmethod
|
|
6
|
+
import asyncio
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
8
|
+
|
|
9
|
+
from anyenv import MultiEventHandler
|
|
10
|
+
from exxec import LocalExecutionEnvironment
|
|
11
|
+
|
|
12
|
+
from agentpool.agents.events import resolve_event_handlers
|
|
13
|
+
from agentpool.log import get_logger
|
|
14
|
+
from agentpool.messaging import MessageHistory, MessageNode
|
|
15
|
+
from agentpool.tools.manager import ToolManager
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from collections.abc import AsyncIterator, Sequence
|
|
20
|
+
|
|
21
|
+
from evented.configs import EventConfig
|
|
22
|
+
from exxec import ExecutionEnvironment
|
|
23
|
+
|
|
24
|
+
from agentpool.agents.context import AgentContext
|
|
25
|
+
from agentpool.agents.events import RichAgentStreamEvent
|
|
26
|
+
from agentpool.common_types import BuiltinEventHandlerType, IndividualEventHandler
|
|
27
|
+
from agentpool.delegation import AgentPool
|
|
28
|
+
from agentpool.ui.base import InputProvider
|
|
29
|
+
from agentpool_config.mcp_server import MCPServerConfig
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
logger = get_logger(__name__)
|
|
33
|
+
|
|
34
|
+
ToolConfirmationMode = Literal["always", "never", "per_tool"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class BaseAgent[TDeps = None, TResult = str](MessageNode[TDeps, TResult]):
|
|
38
|
+
"""Base class for Agent, ACPAgent, AGUIAgent, and ClaudeCodeAgent.
|
|
39
|
+
|
|
40
|
+
Provides shared infrastructure:
|
|
41
|
+
- tools: ToolManager for tool registration and execution
|
|
42
|
+
- conversation: MessageHistory for conversation state
|
|
43
|
+
- event_handler: MultiEventHandler for event distribution
|
|
44
|
+
- _event_queue: Queue for streaming events
|
|
45
|
+
- tool_confirmation_mode: Tool confirmation behavior
|
|
46
|
+
- _input_provider: Provider for user input/confirmations
|
|
47
|
+
- env: ExecutionEnvironment for running code/commands
|
|
48
|
+
- context property: Returns NodeContext for the agent
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(
|
|
52
|
+
self,
|
|
53
|
+
*,
|
|
54
|
+
name: str = "agent",
|
|
55
|
+
description: str | None = None,
|
|
56
|
+
display_name: str | None = None,
|
|
57
|
+
mcp_servers: Sequence[str | MCPServerConfig] | None = None,
|
|
58
|
+
agent_pool: AgentPool[Any] | None = None,
|
|
59
|
+
enable_logging: bool = True,
|
|
60
|
+
event_configs: Sequence[EventConfig] | None = None,
|
|
61
|
+
# New shared parameters
|
|
62
|
+
env: ExecutionEnvironment | None = None,
|
|
63
|
+
input_provider: InputProvider | None = None,
|
|
64
|
+
output_type: type[TResult] = str, # type: ignore[assignment]
|
|
65
|
+
tool_confirmation_mode: ToolConfirmationMode = "per_tool",
|
|
66
|
+
event_handlers: Sequence[IndividualEventHandler | BuiltinEventHandlerType] | None = None,
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Initialize base agent with shared infrastructure.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
name: Agent name
|
|
72
|
+
description: Agent description
|
|
73
|
+
display_name: Human-readable display name
|
|
74
|
+
mcp_servers: MCP server configurations
|
|
75
|
+
agent_pool: Agent pool for coordination
|
|
76
|
+
enable_logging: Whether to enable database logging
|
|
77
|
+
event_configs: Event trigger configurations
|
|
78
|
+
env: Execution environment for running code/commands
|
|
79
|
+
input_provider: Provider for user input and confirmations
|
|
80
|
+
output_type: Output type for this agent
|
|
81
|
+
tool_confirmation_mode: How tool execution confirmation is handled
|
|
82
|
+
event_handlers: Event handlers for this agent
|
|
83
|
+
"""
|
|
84
|
+
super().__init__(
|
|
85
|
+
name=name,
|
|
86
|
+
description=description,
|
|
87
|
+
display_name=display_name,
|
|
88
|
+
mcp_servers=mcp_servers,
|
|
89
|
+
agent_pool=agent_pool,
|
|
90
|
+
enable_logging=enable_logging,
|
|
91
|
+
event_configs=event_configs,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Shared infrastructure - previously duplicated in all 4 agents
|
|
95
|
+
self._event_queue: asyncio.Queue[RichAgentStreamEvent[Any]] = asyncio.Queue()
|
|
96
|
+
self.conversation = MessageHistory()
|
|
97
|
+
self.env = env or LocalExecutionEnvironment()
|
|
98
|
+
self._input_provider = input_provider
|
|
99
|
+
self._output_type: type[TResult] = output_type
|
|
100
|
+
self.tool_confirmation_mode: ToolConfirmationMode = tool_confirmation_mode
|
|
101
|
+
self.tools = ToolManager()
|
|
102
|
+
resolved_handlers = resolve_event_handlers(event_handlers)
|
|
103
|
+
self.event_handler: MultiEventHandler[IndividualEventHandler] = MultiEventHandler(
|
|
104
|
+
resolved_handlers
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Cancellation infrastructure
|
|
108
|
+
self._cancelled = False
|
|
109
|
+
self._current_stream_task: asyncio.Task[Any] | None = None
|
|
110
|
+
|
|
111
|
+
@abstractmethod
|
|
112
|
+
def get_context(self, data: Any = None) -> AgentContext[Any]:
|
|
113
|
+
"""Create a new context for this agent.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
data: Optional custom data to attach to the context
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
A new AgentContext instance
|
|
120
|
+
"""
|
|
121
|
+
...
|
|
122
|
+
|
|
123
|
+
@property
|
|
124
|
+
@abstractmethod
|
|
125
|
+
def model_name(self) -> str | None:
|
|
126
|
+
"""Get the model name used by this agent."""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
@abstractmethod
|
|
130
|
+
def run_stream(
|
|
131
|
+
self,
|
|
132
|
+
*prompt: Any,
|
|
133
|
+
**kwargs: Any,
|
|
134
|
+
) -> AsyncIterator[RichAgentStreamEvent[TResult]]:
|
|
135
|
+
"""Run agent with streaming output.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
*prompt: Input prompts
|
|
139
|
+
**kwargs: Additional arguments
|
|
140
|
+
|
|
141
|
+
Yields:
|
|
142
|
+
Stream events during execution
|
|
143
|
+
"""
|
|
144
|
+
...
|
|
145
|
+
|
|
146
|
+
async def set_tool_confirmation_mode(self, mode: ToolConfirmationMode) -> None:
|
|
147
|
+
"""Set tool confirmation mode.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
mode: Confirmation mode - "always", "never", or "per_tool"
|
|
151
|
+
"""
|
|
152
|
+
self.tool_confirmation_mode = mode
|
|
153
|
+
|
|
154
|
+
def is_cancelled(self) -> bool:
|
|
155
|
+
"""Check if the agent has been cancelled.
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
True if cancellation was requested
|
|
159
|
+
"""
|
|
160
|
+
return self._cancelled
|
|
161
|
+
|
|
162
|
+
async def interrupt(self) -> None:
|
|
163
|
+
"""Interrupt the currently running stream.
|
|
164
|
+
|
|
165
|
+
This method is called when cancellation is requested. The default
|
|
166
|
+
implementation sets the cancelled flag and cancels the current stream task.
|
|
167
|
+
|
|
168
|
+
Subclasses may override to add protocol-specific cancellation:
|
|
169
|
+
- ACPAgent: Send CancelNotification to remote server
|
|
170
|
+
- ClaudeCodeAgent: Call client.interrupt()
|
|
171
|
+
|
|
172
|
+
The cancelled flag should be checked in run_stream loops to exit early.
|
|
173
|
+
"""
|
|
174
|
+
self._cancelled = True
|
|
175
|
+
if self._current_stream_task and not self._current_stream_task.done():
|
|
176
|
+
self._current_stream_task.cancel()
|
|
177
|
+
logger.info("Interrupted agent stream", agent=self.name)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Claude Code Agent - Native Claude Agent SDK integration.
|
|
2
|
+
|
|
3
|
+
This module provides an agent implementation that wraps the Claude Agent SDK's
|
|
4
|
+
ClaudeSDKClient for native integration with agentpool.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from agentpool.agents.claude_code_agent.claude_code_agent import ClaudeCodeAgent
|
|
10
|
+
|
|
11
|
+
__all__ = ["ClaudeCodeAgent"]
|