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,377 @@
|
|
|
1
|
+
"""Base class for message processing nodes."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from collections.abc import Sequence
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal, Self, overload
|
|
8
|
+
from uuid import uuid4
|
|
9
|
+
|
|
10
|
+
from psygnal import Signal
|
|
11
|
+
|
|
12
|
+
from agentpool.log import get_logger
|
|
13
|
+
from agentpool.messaging import ChatMessage
|
|
14
|
+
from agentpool.talk import AggregatedTalkStats
|
|
15
|
+
from agentpool.utils.tasks import TaskManager
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from collections.abc import AsyncIterator
|
|
20
|
+
from datetime import timedelta
|
|
21
|
+
from types import TracebackType
|
|
22
|
+
|
|
23
|
+
from evented.configs import EventConfig
|
|
24
|
+
from evented.event_data import EventData
|
|
25
|
+
|
|
26
|
+
from agentpool.common_types import (
|
|
27
|
+
AnyTransformFn,
|
|
28
|
+
AsyncFilterFn,
|
|
29
|
+
ProcessorCallback,
|
|
30
|
+
QueueStrategy,
|
|
31
|
+
)
|
|
32
|
+
from agentpool.delegation import AgentPool
|
|
33
|
+
from agentpool.messaging.context import NodeContext
|
|
34
|
+
from agentpool.storage import StorageManager
|
|
35
|
+
from agentpool.talk import Talk, TeamTalk
|
|
36
|
+
from agentpool.talk.stats import AggregatedMessageStats, MessageStats
|
|
37
|
+
from agentpool.tools.base import Tool
|
|
38
|
+
from agentpool_config.forward_targets import ConnectionType
|
|
39
|
+
from agentpool_config.mcp_server import MCPServerConfig
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
logger = get_logger(__name__)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class MessageNode[TDeps, TResult](ABC):
|
|
46
|
+
"""Base class for all message processing nodes."""
|
|
47
|
+
|
|
48
|
+
message_received = Signal(ChatMessage)
|
|
49
|
+
"""Signal emitted when node receives a message."""
|
|
50
|
+
|
|
51
|
+
message_sent = Signal(ChatMessage)
|
|
52
|
+
"""Signal emitted when node creates a message."""
|
|
53
|
+
|
|
54
|
+
def __init__(
|
|
55
|
+
self,
|
|
56
|
+
name: str | None = None,
|
|
57
|
+
description: str | None = None,
|
|
58
|
+
display_name: str | None = None,
|
|
59
|
+
mcp_servers: Sequence[str | MCPServerConfig] | None = None,
|
|
60
|
+
agent_pool: AgentPool[Any] | None = None,
|
|
61
|
+
enable_logging: bool = True,
|
|
62
|
+
event_configs: Sequence[EventConfig] | None = None,
|
|
63
|
+
) -> None:
|
|
64
|
+
"""Initialize message node."""
|
|
65
|
+
super().__init__()
|
|
66
|
+
|
|
67
|
+
from agentpool.mcp_server.manager import MCPManager
|
|
68
|
+
from agentpool.messaging import EventManager
|
|
69
|
+
from agentpool.messaging.connection_manager import ConnectionManager
|
|
70
|
+
from agentpool.models.manifest import AgentsManifest
|
|
71
|
+
|
|
72
|
+
async def _event_handler(event: EventData) -> None:
|
|
73
|
+
if prompt := event.to_prompt():
|
|
74
|
+
await self.run(prompt)
|
|
75
|
+
|
|
76
|
+
self.task_manager = TaskManager()
|
|
77
|
+
self._name = name or self.__class__.__name__
|
|
78
|
+
self._display_name = display_name
|
|
79
|
+
self.log = logger.bind(agent_name=self._name)
|
|
80
|
+
self.agent_pool = agent_pool
|
|
81
|
+
self._manifest = agent_pool.manifest if agent_pool else AgentsManifest()
|
|
82
|
+
self.description = description
|
|
83
|
+
self.connections = ConnectionManager(self)
|
|
84
|
+
cfgs = list(event_configs) if event_configs else None
|
|
85
|
+
self._events = EventManager(configs=cfgs, event_callbacks=[_event_handler])
|
|
86
|
+
name_ = f"node_{self._name}"
|
|
87
|
+
self.mcp = MCPManager(name_, servers=mcp_servers, owner=self.name)
|
|
88
|
+
self.enable_db_logging = enable_logging
|
|
89
|
+
self.conversation_id = str(uuid4())
|
|
90
|
+
# Connect to the combined signal to capture all messages
|
|
91
|
+
# TODO: need to check this
|
|
92
|
+
# node.message_received.connect(self.log_message)
|
|
93
|
+
|
|
94
|
+
async def __aenter__(self) -> Self:
|
|
95
|
+
"""Initialize base message node."""
|
|
96
|
+
if self.enable_db_logging and self.storage:
|
|
97
|
+
await self.storage.log_conversation(
|
|
98
|
+
conversation_id=self.conversation_id,
|
|
99
|
+
node_name=self.name,
|
|
100
|
+
)
|
|
101
|
+
try:
|
|
102
|
+
await self._events.__aenter__()
|
|
103
|
+
await self.mcp.__aenter__()
|
|
104
|
+
except Exception as e:
|
|
105
|
+
await self.__aexit__(type(e), e, e.__traceback__)
|
|
106
|
+
msg = f"Failed to initialize {self.name}"
|
|
107
|
+
raise RuntimeError(msg) from e
|
|
108
|
+
else:
|
|
109
|
+
return self
|
|
110
|
+
|
|
111
|
+
async def __aexit__(
|
|
112
|
+
self,
|
|
113
|
+
exc_type: type[BaseException] | None,
|
|
114
|
+
exc_val: BaseException | None,
|
|
115
|
+
exc_tb: TracebackType | None,
|
|
116
|
+
) -> None:
|
|
117
|
+
"""Clean up base resources."""
|
|
118
|
+
await self._events.__aexit__(exc_type, exc_val, exc_tb)
|
|
119
|
+
await self.mcp.__aexit__(exc_type, exc_val, exc_tb)
|
|
120
|
+
await self.task_manager.cleanup_tasks()
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def connection_stats(self) -> AggregatedTalkStats:
|
|
124
|
+
"""Get stats for all active connections of this node."""
|
|
125
|
+
stats = [talk.stats for talk in self.connections.get_connections()]
|
|
126
|
+
return AggregatedTalkStats(stats=stats)
|
|
127
|
+
|
|
128
|
+
def get_context(self, data: Any = None) -> NodeContext:
|
|
129
|
+
"""Create a new context for this node.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
data: Optional custom data to attach to the context
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
A new NodeContext instance
|
|
136
|
+
"""
|
|
137
|
+
raise NotImplementedError
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def storage(self) -> StorageManager | None:
|
|
141
|
+
"""Get storage manager from pool."""
|
|
142
|
+
return self.agent_pool.storage if self.agent_pool else None
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def name(self) -> str:
|
|
146
|
+
"""Get agent name."""
|
|
147
|
+
return self._name or "agentpool"
|
|
148
|
+
|
|
149
|
+
@name.setter
|
|
150
|
+
def name(self, value: str) -> None:
|
|
151
|
+
self._name = value
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def display_name(self) -> str:
|
|
155
|
+
"""Get human-readable display name, falls back to name."""
|
|
156
|
+
return self._display_name or self._name
|
|
157
|
+
|
|
158
|
+
@display_name.setter
|
|
159
|
+
def display_name(self, value: str | None) -> None:
|
|
160
|
+
self._display_name = value
|
|
161
|
+
|
|
162
|
+
def to_tool(
|
|
163
|
+
self, *, name: str | None = None, description: str | None = None, **kwargs: Any
|
|
164
|
+
) -> Tool[TResult]:
|
|
165
|
+
"""Convert node to a callable tool.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
name: Optional tool name override
|
|
169
|
+
description: Optional tool description override
|
|
170
|
+
**kwargs: Additional arguments for subclass customization
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
Tool instance that can be registered
|
|
174
|
+
"""
|
|
175
|
+
from agentpool.tools.base import Tool
|
|
176
|
+
|
|
177
|
+
async def wrapped(prompt: str) -> TResult:
|
|
178
|
+
result = await self.run(prompt)
|
|
179
|
+
return result.content
|
|
180
|
+
|
|
181
|
+
tool_name = name or f"ask_{self.name}"
|
|
182
|
+
docstring = description or f"Get expert answer from {self.name}"
|
|
183
|
+
if self.description:
|
|
184
|
+
docstring = f"{docstring}\n\n{self.description}"
|
|
185
|
+
wrapped.__doc__ = docstring
|
|
186
|
+
wrapped.__name__ = tool_name
|
|
187
|
+
return Tool.from_callable(wrapped, name_override=tool_name, description_override=docstring)
|
|
188
|
+
|
|
189
|
+
@overload
|
|
190
|
+
def __rshift__(
|
|
191
|
+
self, other: MessageNode[Any, Any] | ProcessorCallback[Any]
|
|
192
|
+
) -> Talk[TResult]: ...
|
|
193
|
+
|
|
194
|
+
@overload
|
|
195
|
+
def __rshift__(
|
|
196
|
+
self, other: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]]
|
|
197
|
+
) -> TeamTalk[TResult]: ...
|
|
198
|
+
|
|
199
|
+
def __rshift__(
|
|
200
|
+
self,
|
|
201
|
+
other: MessageNode[Any, Any]
|
|
202
|
+
| ProcessorCallback[Any]
|
|
203
|
+
| Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
|
|
204
|
+
) -> Talk[Any] | TeamTalk[Any]:
|
|
205
|
+
"""Connect agent to another agent or group.
|
|
206
|
+
|
|
207
|
+
Example:
|
|
208
|
+
agent >> other_agent # Connect to single agent
|
|
209
|
+
agent >> (agent2 & agent3) # Connect to group
|
|
210
|
+
agent >> "other_agent" # Connect by name (needs pool)
|
|
211
|
+
"""
|
|
212
|
+
return self.connect_to(other)
|
|
213
|
+
|
|
214
|
+
@overload
|
|
215
|
+
def connect_to(
|
|
216
|
+
self,
|
|
217
|
+
target: MessageNode[Any, Any] | ProcessorCallback[Any],
|
|
218
|
+
*,
|
|
219
|
+
queued: Literal[True],
|
|
220
|
+
queue_strategy: Literal["concat"],
|
|
221
|
+
) -> Talk[str]: ...
|
|
222
|
+
|
|
223
|
+
@overload
|
|
224
|
+
def connect_to(
|
|
225
|
+
self,
|
|
226
|
+
target: MessageNode[Any, Any] | ProcessorCallback[Any],
|
|
227
|
+
*,
|
|
228
|
+
connection_type: ConnectionType = "run",
|
|
229
|
+
name: str | None = None,
|
|
230
|
+
priority: int = 0,
|
|
231
|
+
delay: timedelta | None = None,
|
|
232
|
+
queued: bool = False,
|
|
233
|
+
queue_strategy: QueueStrategy = "latest",
|
|
234
|
+
transform: AnyTransformFn[Any] | None = None,
|
|
235
|
+
filter_condition: AsyncFilterFn | None = None,
|
|
236
|
+
stop_condition: AsyncFilterFn | None = None,
|
|
237
|
+
exit_condition: AsyncFilterFn | None = None,
|
|
238
|
+
) -> Talk[TResult]: ...
|
|
239
|
+
|
|
240
|
+
@overload
|
|
241
|
+
def connect_to(
|
|
242
|
+
self,
|
|
243
|
+
target: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
|
|
244
|
+
*,
|
|
245
|
+
queued: Literal[True],
|
|
246
|
+
queue_strategy: Literal["concat"],
|
|
247
|
+
) -> TeamTalk[str]: ...
|
|
248
|
+
|
|
249
|
+
@overload
|
|
250
|
+
def connect_to(
|
|
251
|
+
self,
|
|
252
|
+
target: Sequence[MessageNode[Any, TResult] | ProcessorCallback[TResult]],
|
|
253
|
+
*,
|
|
254
|
+
connection_type: ConnectionType = "run",
|
|
255
|
+
name: str | None = None,
|
|
256
|
+
priority: int = 0,
|
|
257
|
+
delay: timedelta | None = None,
|
|
258
|
+
queued: bool = False,
|
|
259
|
+
queue_strategy: QueueStrategy = "latest",
|
|
260
|
+
transform: AnyTransformFn[Any] | None = None,
|
|
261
|
+
filter_condition: AsyncFilterFn | None = None,
|
|
262
|
+
stop_condition: AsyncFilterFn | None = None,
|
|
263
|
+
exit_condition: AsyncFilterFn | None = None,
|
|
264
|
+
) -> TeamTalk[TResult]: ...
|
|
265
|
+
|
|
266
|
+
@overload
|
|
267
|
+
def connect_to(
|
|
268
|
+
self,
|
|
269
|
+
target: Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
|
|
270
|
+
*,
|
|
271
|
+
connection_type: ConnectionType = "run",
|
|
272
|
+
name: str | None = None,
|
|
273
|
+
priority: int = 0,
|
|
274
|
+
delay: timedelta | None = None,
|
|
275
|
+
queued: bool = False,
|
|
276
|
+
queue_strategy: QueueStrategy = "latest",
|
|
277
|
+
transform: AnyTransformFn[Any] | None = None,
|
|
278
|
+
filter_condition: AsyncFilterFn | None = None,
|
|
279
|
+
stop_condition: AsyncFilterFn | None = None,
|
|
280
|
+
exit_condition: AsyncFilterFn | None = None,
|
|
281
|
+
) -> TeamTalk: ...
|
|
282
|
+
|
|
283
|
+
def connect_to(
|
|
284
|
+
self,
|
|
285
|
+
target: MessageNode[Any, Any]
|
|
286
|
+
| ProcessorCallback[Any]
|
|
287
|
+
| Sequence[MessageNode[Any, Any] | ProcessorCallback[Any]],
|
|
288
|
+
*,
|
|
289
|
+
connection_type: ConnectionType = "run",
|
|
290
|
+
name: str | None = None,
|
|
291
|
+
priority: int = 0,
|
|
292
|
+
delay: timedelta | None = None,
|
|
293
|
+
queued: bool = False,
|
|
294
|
+
queue_strategy: QueueStrategy = "latest",
|
|
295
|
+
transform: AnyTransformFn[Any] | None = None,
|
|
296
|
+
filter_condition: AsyncFilterFn | None = None,
|
|
297
|
+
stop_condition: AsyncFilterFn | None = None,
|
|
298
|
+
exit_condition: AsyncFilterFn | None = None,
|
|
299
|
+
) -> Talk[Any] | TeamTalk:
|
|
300
|
+
"""Create connection(s) to target(s)."""
|
|
301
|
+
# Handle callable case
|
|
302
|
+
from agentpool.agents import Agent
|
|
303
|
+
from agentpool.delegation.base_team import BaseTeam
|
|
304
|
+
|
|
305
|
+
if callable(target):
|
|
306
|
+
target = Agent.from_callback(target)
|
|
307
|
+
if pool := self.agent_pool:
|
|
308
|
+
target.agent_pool = pool
|
|
309
|
+
pool.register(target.name, target)
|
|
310
|
+
# we are explicit here just to make disctinction clear, we only want sequences
|
|
311
|
+
# of message units
|
|
312
|
+
if isinstance(target, Sequence) and not isinstance(target, BaseTeam):
|
|
313
|
+
targets: list[MessageNode[Any, Any]] = []
|
|
314
|
+
for t in target:
|
|
315
|
+
match t:
|
|
316
|
+
case _ if callable(t):
|
|
317
|
+
other = Agent.from_callback(t)
|
|
318
|
+
if pool := self.agent_pool:
|
|
319
|
+
other.agent_pool = pool
|
|
320
|
+
pool.register(other.name, other)
|
|
321
|
+
targets.append(other)
|
|
322
|
+
case MessageNode():
|
|
323
|
+
targets.append(t)
|
|
324
|
+
case _:
|
|
325
|
+
msg = f"Invalid node type: {type(t)}"
|
|
326
|
+
raise TypeError(msg)
|
|
327
|
+
else:
|
|
328
|
+
targets = target # type: ignore
|
|
329
|
+
return self.connections.create_connection(
|
|
330
|
+
self,
|
|
331
|
+
targets,
|
|
332
|
+
connection_type=connection_type,
|
|
333
|
+
priority=priority,
|
|
334
|
+
name=name,
|
|
335
|
+
delay=delay,
|
|
336
|
+
queued=queued,
|
|
337
|
+
queue_strategy=queue_strategy,
|
|
338
|
+
transform=transform,
|
|
339
|
+
filter_condition=filter_condition,
|
|
340
|
+
stop_condition=stop_condition,
|
|
341
|
+
exit_condition=exit_condition,
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
async def disconnect_all(self) -> None:
|
|
345
|
+
"""Disconnect from all nodes."""
|
|
346
|
+
for target in list(self.connections.get_targets()):
|
|
347
|
+
self.stop_passing_results_to(target)
|
|
348
|
+
|
|
349
|
+
def stop_passing_results_to(self, other: MessageNode[Any, Any]) -> None:
|
|
350
|
+
"""Stop forwarding results to another node."""
|
|
351
|
+
self.connections.disconnect(other)
|
|
352
|
+
|
|
353
|
+
@abstractmethod
|
|
354
|
+
async def run(self, *prompts: Any, **kwargs: Any) -> ChatMessage[TResult]:
|
|
355
|
+
"""Execute node with prompts. Implementation-specific run logic."""
|
|
356
|
+
|
|
357
|
+
async def get_message_history(self, limit: int | None = None) -> list[ChatMessage[Any]]:
|
|
358
|
+
"""Get message history from storage."""
|
|
359
|
+
from agentpool_config.session import SessionQuery
|
|
360
|
+
|
|
361
|
+
if not self.enable_db_logging or not self.storage:
|
|
362
|
+
return []
|
|
363
|
+
query = SessionQuery(name=self.conversation_id, limit=limit)
|
|
364
|
+
return await self.storage.filter_messages(query)
|
|
365
|
+
|
|
366
|
+
async def log_message(self, message: ChatMessage[Any]) -> None:
|
|
367
|
+
"""Handle message from chat signal."""
|
|
368
|
+
if self.enable_db_logging and self.storage:
|
|
369
|
+
await self.storage.log_message(message)
|
|
370
|
+
|
|
371
|
+
@abstractmethod
|
|
372
|
+
async def get_stats(self) -> MessageStats | AggregatedMessageStats:
|
|
373
|
+
"""Get message statistics for this node."""
|
|
374
|
+
|
|
375
|
+
@abstractmethod
|
|
376
|
+
def run_iter(self, *prompts: Any, **kwargs: Any) -> AsyncIterator[ChatMessage[Any]]:
|
|
377
|
+
"""Yield messages during execution."""
|