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,265 @@
|
|
|
1
|
+
"""Streaming Tools - Base classes for tools that use the current agent for streaming.
|
|
2
|
+
|
|
3
|
+
This module provides a pattern for creating tools that:
|
|
4
|
+
1. Take a description/intent as input from the outer agent
|
|
5
|
+
2. Use the SAME agent with forked history for streaming
|
|
6
|
+
3. Process that stream with custom logic (UI updates, incremental writes, etc.)
|
|
7
|
+
|
|
8
|
+
The key insight is that this sidesteps the limitation of pydantic-ai where tool
|
|
9
|
+
execution happens AFTER the model finishes streaming. By using the same agent
|
|
10
|
+
with forked history, we get:
|
|
11
|
+
- Streaming "for free" while maintaining the tool abstraction
|
|
12
|
+
- Full conversation context preserved (the agent knows what was discussed)
|
|
13
|
+
- Cache benefits from the shared conversation history
|
|
14
|
+
|
|
15
|
+
Cache behavior: The forked conversation shares the same cache as the outer agent
|
|
16
|
+
since it uses identical message history. The fork's new messages are NOT persisted
|
|
17
|
+
back to the main conversation.
|
|
18
|
+
|
|
19
|
+
Example usage:
|
|
20
|
+
|
|
21
|
+
@streaming_tool(
|
|
22
|
+
system_prompt="Output the complete file content.",
|
|
23
|
+
)
|
|
24
|
+
async def edit_file(
|
|
25
|
+
ctx: AgentContext,
|
|
26
|
+
stream: AsyncIterator[StreamChunk],
|
|
27
|
+
path: str,
|
|
28
|
+
) -> str:
|
|
29
|
+
content = ""
|
|
30
|
+
async for chunk in stream:
|
|
31
|
+
content += chunk.text
|
|
32
|
+
await ctx.events.file_edit_progress(path, content, "in_progress")
|
|
33
|
+
|
|
34
|
+
await write_file(path, content)
|
|
35
|
+
return f"Edited {path}"
|
|
36
|
+
|
|
37
|
+
# Exposed to outer agent as: edit_file(description: str, path: str) -> str
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from __future__ import annotations
|
|
41
|
+
|
|
42
|
+
from abc import ABC, abstractmethod
|
|
43
|
+
from dataclasses import dataclass
|
|
44
|
+
import functools
|
|
45
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
|
46
|
+
|
|
47
|
+
from pydantic import BaseModel
|
|
48
|
+
from pydantic_ai import PartDeltaEvent, TextPartDelta
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
if TYPE_CHECKING:
|
|
52
|
+
from collections.abc import AsyncIterator, Callable
|
|
53
|
+
|
|
54
|
+
from pydantic_ai.messages import ModelRequest, ModelResponse
|
|
55
|
+
|
|
56
|
+
from agentpool.agents.base_agent import BaseAgent
|
|
57
|
+
from agentpool.agents.context import AgentContext
|
|
58
|
+
from agentpool.messaging import MessageHistory
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
T = TypeVar("T", bound=BaseModel)
|
|
62
|
+
R = TypeVar("R")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass
|
|
66
|
+
class StreamChunk:
|
|
67
|
+
"""A chunk of streamed text from the agent."""
|
|
68
|
+
|
|
69
|
+
text: str
|
|
70
|
+
"""The text content of this chunk."""
|
|
71
|
+
|
|
72
|
+
accumulated: str
|
|
73
|
+
"""All text accumulated so far."""
|
|
74
|
+
|
|
75
|
+
is_complete: bool = False
|
|
76
|
+
"""Whether this is the final chunk."""
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@dataclass
|
|
80
|
+
class StreamingToolConfig:
|
|
81
|
+
"""Configuration for a streaming tool."""
|
|
82
|
+
|
|
83
|
+
prompt_template: str | None = None
|
|
84
|
+
"""Optional prompt template. Use {description} and {kwargs} placeholders."""
|
|
85
|
+
|
|
86
|
+
include_file_content: bool = False
|
|
87
|
+
"""Whether to include file content in the prompt (for edit tools)."""
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class StreamingToolBase(ABC):
|
|
91
|
+
"""Abstract base class for streaming tools.
|
|
92
|
+
|
|
93
|
+
Subclass this to create tools that use the current agent for streaming.
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
config: StreamingToolConfig
|
|
97
|
+
|
|
98
|
+
@abstractmethod
|
|
99
|
+
async def process_stream(
|
|
100
|
+
self,
|
|
101
|
+
ctx: AgentContext,
|
|
102
|
+
stream: AsyncIterator[StreamChunk],
|
|
103
|
+
**kwargs: Any,
|
|
104
|
+
) -> str:
|
|
105
|
+
"""Process the streamed output, return final result for outer agent."""
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
@abstractmethod
|
|
109
|
+
def build_prompt(self, description: str, **kwargs: Any) -> str:
|
|
110
|
+
"""Build the prompt for the streaming request."""
|
|
111
|
+
...
|
|
112
|
+
|
|
113
|
+
async def execute(self, ctx: AgentContext, description: str, **kwargs: Any) -> str:
|
|
114
|
+
"""Execute the streaming tool.
|
|
115
|
+
|
|
116
|
+
This is called by the outer agent. It:
|
|
117
|
+
1. Forks the current conversation history
|
|
118
|
+
2. Streams a response using the same agent
|
|
119
|
+
3. Passes the stream to process_stream()
|
|
120
|
+
"""
|
|
121
|
+
agent = ctx.native_agent
|
|
122
|
+
fork_history = _create_forked_history(agent)
|
|
123
|
+
prompt = self.build_prompt(description, **kwargs)
|
|
124
|
+
|
|
125
|
+
stream = agent.run_stream(
|
|
126
|
+
prompt,
|
|
127
|
+
message_history=fork_history,
|
|
128
|
+
store_history=False,
|
|
129
|
+
)
|
|
130
|
+
chunk_stream = _create_chunk_stream(stream)
|
|
131
|
+
return await self.process_stream(ctx, chunk_stream, **kwargs)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def streaming_tool(
|
|
135
|
+
prompt_template: str | None = None,
|
|
136
|
+
) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
137
|
+
"""Decorator that wraps a stream-processing function into a streaming tool.
|
|
138
|
+
|
|
139
|
+
The decorated function should have the signature:
|
|
140
|
+
async def fn(ctx: AgentContext, stream: AsyncIterator[StreamChunk], **kwargs) -> str
|
|
141
|
+
|
|
142
|
+
The resulting tool will have the signature:
|
|
143
|
+
async def fn(ctx: AgentContext, description: str, **kwargs) -> str
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
prompt_template: Optional template for building the prompt.
|
|
147
|
+
Use {description} for the description and {key} for kwargs.
|
|
148
|
+
|
|
149
|
+
Example:
|
|
150
|
+
@streaming_tool()
|
|
151
|
+
async def generate_code(
|
|
152
|
+
ctx: AgentContext,
|
|
153
|
+
stream: AsyncIterator[StreamChunk],
|
|
154
|
+
language: str,
|
|
155
|
+
) -> str:
|
|
156
|
+
code = ""
|
|
157
|
+
async for chunk in stream:
|
|
158
|
+
code = chunk.accumulated
|
|
159
|
+
await ctx.events.progress(code)
|
|
160
|
+
return f"Generated {len(code)} chars of {language} code"
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
def decorator(fn: Callable[..., Any]) -> Callable[..., Any]:
|
|
164
|
+
@functools.wraps(fn)
|
|
165
|
+
async def wrapper(ctx: AgentContext, description: str, **kwargs: Any) -> str:
|
|
166
|
+
agent = ctx.native_agent
|
|
167
|
+
fork_history = _create_forked_history(agent)
|
|
168
|
+
|
|
169
|
+
# Build prompt
|
|
170
|
+
if prompt_template:
|
|
171
|
+
prompt = prompt_template.format(description=description, **kwargs)
|
|
172
|
+
else:
|
|
173
|
+
prompt = _build_default_prompt(description, **kwargs)
|
|
174
|
+
|
|
175
|
+
# Stream using the same agent with forked history
|
|
176
|
+
stream = agent.run_stream(
|
|
177
|
+
prompt,
|
|
178
|
+
message_history=fork_history,
|
|
179
|
+
store_history=False,
|
|
180
|
+
)
|
|
181
|
+
chunk_stream = _create_chunk_stream(stream)
|
|
182
|
+
return await fn(ctx, chunk_stream, **kwargs) # type: ignore[no-any-return]
|
|
183
|
+
|
|
184
|
+
# Mark as streaming tool for introspection
|
|
185
|
+
wrapper._streaming_tool = True # type: ignore[attr-defined]
|
|
186
|
+
wrapper._prompt_template = prompt_template # type: ignore[attr-defined]
|
|
187
|
+
|
|
188
|
+
return wrapper
|
|
189
|
+
|
|
190
|
+
return decorator
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def _create_forked_history(agent: BaseAgent) -> MessageHistory:
|
|
194
|
+
"""Create a forked message history from the current conversation.
|
|
195
|
+
|
|
196
|
+
The fork preserves full context for cache benefits while isolating
|
|
197
|
+
new messages from the main conversation.
|
|
198
|
+
"""
|
|
199
|
+
from agentpool.messaging import ChatMessage, MessageHistory
|
|
200
|
+
|
|
201
|
+
current_history = agent.conversation.get_history()
|
|
202
|
+
|
|
203
|
+
if current_history:
|
|
204
|
+
# Get pydantic-ai messages and inject cache point
|
|
205
|
+
all_messages: list[ModelRequest | ModelResponse] = []
|
|
206
|
+
for msg in current_history:
|
|
207
|
+
all_messages.extend(msg.to_pydantic_ai())
|
|
208
|
+
|
|
209
|
+
# Wrap in a single ChatMessage for the forked history
|
|
210
|
+
return MessageHistory(
|
|
211
|
+
messages=[ChatMessage(messages=all_messages, role="user", content="")]
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
return MessageHistory()
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
async def _create_chunk_stream(stream: Any) -> AsyncIterator[StreamChunk]:
|
|
218
|
+
"""Create an async iterator of StreamChunk from an agent stream."""
|
|
219
|
+
accumulated = ""
|
|
220
|
+
|
|
221
|
+
async for node in stream:
|
|
222
|
+
match node:
|
|
223
|
+
case PartDeltaEvent(delta=TextPartDelta(content_delta=text)):
|
|
224
|
+
accumulated += text
|
|
225
|
+
yield StreamChunk(text=text, accumulated=accumulated, is_complete=False)
|
|
226
|
+
|
|
227
|
+
yield StreamChunk(text="", accumulated=accumulated, is_complete=True)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def _build_default_prompt(description: str, **kwargs: Any) -> str:
|
|
231
|
+
"""Build a default prompt from description and kwargs."""
|
|
232
|
+
parts = [description]
|
|
233
|
+
|
|
234
|
+
# Add context from kwargs if relevant
|
|
235
|
+
for key, value in kwargs.items():
|
|
236
|
+
if value is not None:
|
|
237
|
+
parts.append(f"{key}: {value}")
|
|
238
|
+
|
|
239
|
+
return "\n\n".join(parts)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
# --- Example Usage ---
|
|
243
|
+
#
|
|
244
|
+
# @streaming_tool()
|
|
245
|
+
# async def streaming_write_file(
|
|
246
|
+
# ctx: AgentContext,
|
|
247
|
+
# stream: AsyncIterator[StreamChunk],
|
|
248
|
+
# path: str,
|
|
249
|
+
# ) -> str:
|
|
250
|
+
# """Write a file with streaming progress updates."""
|
|
251
|
+
# content = ""
|
|
252
|
+
#
|
|
253
|
+
# async for chunk in stream:
|
|
254
|
+
# content = chunk.accumulated
|
|
255
|
+
# await ctx.events.file_edit_progress(
|
|
256
|
+
# path=path,
|
|
257
|
+
# old_text="",
|
|
258
|
+
# new_text=content,
|
|
259
|
+
# status="streaming" if not chunk.is_complete else "completed",
|
|
260
|
+
# )
|
|
261
|
+
#
|
|
262
|
+
# # Write the file
|
|
263
|
+
# from pathlib import Path
|
|
264
|
+
# Path(path).write_text(content)
|
|
265
|
+
# return f"Successfully created {path}"
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""VFS registry filesystem toolset implementation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from agentpool.agents.context import AgentContext # noqa: TC001
|
|
6
|
+
from agentpool.resource_providers import StaticResourceProvider
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
async def vfs_list( # noqa: D417
|
|
10
|
+
ctx: AgentContext,
|
|
11
|
+
path: str = "",
|
|
12
|
+
*,
|
|
13
|
+
pattern: str = "**/*",
|
|
14
|
+
recursive: bool = True,
|
|
15
|
+
include_dirs: bool = False,
|
|
16
|
+
exclude: list[str] | None = None,
|
|
17
|
+
max_depth: int | None = None,
|
|
18
|
+
) -> str:
|
|
19
|
+
"""List contents of a resource path.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
path: Resource path to query (e.g., "docs", "docs://guides", "data://files")
|
|
23
|
+
pattern: Glob pattern to match files against
|
|
24
|
+
recursive: Whether to search subdirectories
|
|
25
|
+
include_dirs: Whether to include directories in results
|
|
26
|
+
exclude: List of patterns to exclude
|
|
27
|
+
max_depth: Maximum directory depth for recursive search
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Formatted list of matching files and directories
|
|
31
|
+
"""
|
|
32
|
+
registry = ctx.definition.vfs_registry
|
|
33
|
+
|
|
34
|
+
# If no path given, list all resources
|
|
35
|
+
if not path:
|
|
36
|
+
resources = list(registry)
|
|
37
|
+
return "Available resources:\n" + "\n".join(f"- {name}" for name in resources)
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
files = await registry.query(
|
|
41
|
+
path,
|
|
42
|
+
pattern=pattern,
|
|
43
|
+
recursive=recursive,
|
|
44
|
+
include_dirs=include_dirs,
|
|
45
|
+
exclude=exclude,
|
|
46
|
+
max_depth=max_depth,
|
|
47
|
+
)
|
|
48
|
+
return "\n".join(files) if files else f"No files found in {path}"
|
|
49
|
+
except (OSError, ValueError, KeyError) as e:
|
|
50
|
+
return f"Error listing {path}: {e}"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def vfs_read( # noqa: D417
|
|
54
|
+
ctx: AgentContext,
|
|
55
|
+
path: str,
|
|
56
|
+
*,
|
|
57
|
+
encoding: str = "utf-8",
|
|
58
|
+
recursive: bool = True,
|
|
59
|
+
exclude: list[str] | None = None,
|
|
60
|
+
max_depth: int | None = None,
|
|
61
|
+
) -> str:
|
|
62
|
+
"""Read content from a resource path.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
path: Resource path to read (e.g., "docs://file.md", "data://folder")
|
|
66
|
+
encoding: Text encoding for binary content
|
|
67
|
+
recursive: For directories, whether to read recursively
|
|
68
|
+
exclude: For directories, patterns to exclude
|
|
69
|
+
max_depth: For directories, maximum depth to read
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
File content or concatenated directory contents
|
|
73
|
+
"""
|
|
74
|
+
registry = ctx.definition.vfs_registry
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
return await registry.get_content(
|
|
78
|
+
path,
|
|
79
|
+
encoding=encoding,
|
|
80
|
+
recursive=recursive,
|
|
81
|
+
exclude=exclude,
|
|
82
|
+
max_depth=max_depth,
|
|
83
|
+
)
|
|
84
|
+
except (OSError, ValueError, KeyError) as e:
|
|
85
|
+
return f"Error reading {path}: {e}"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
async def vfs_info(ctx: AgentContext) -> str:
|
|
89
|
+
"""Get information about all configured resources.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
Formatted information about available resources
|
|
93
|
+
"""
|
|
94
|
+
registry = ctx.definition.vfs_registry
|
|
95
|
+
|
|
96
|
+
if registry.is_empty:
|
|
97
|
+
return "No resources configured"
|
|
98
|
+
|
|
99
|
+
sections = ["## Configured Resources\n"]
|
|
100
|
+
|
|
101
|
+
sections.extend(f"- **{name}**: VFS Resource" for name in registry)
|
|
102
|
+
|
|
103
|
+
# Add union filesystem info
|
|
104
|
+
try:
|
|
105
|
+
union_fs = registry.get_fs()
|
|
106
|
+
sections.append(f"\n**Union filesystem**: {union_fs.__class__.__name__}")
|
|
107
|
+
sections.append(f"**Total resources**: {len(registry)}")
|
|
108
|
+
except (OSError, AttributeError) as e:
|
|
109
|
+
sections.append(f"\n**Union filesystem error**: {e}")
|
|
110
|
+
|
|
111
|
+
return "\n".join(sections)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class VFSTools(StaticResourceProvider):
|
|
115
|
+
"""Provider for VFS registry filesystem tools."""
|
|
116
|
+
|
|
117
|
+
def __init__(self, name: str = "vfs") -> None:
|
|
118
|
+
super().__init__(name=name, tools=[])
|
|
119
|
+
for tool in [
|
|
120
|
+
self.create_tool(vfs_list, category="search", read_only=True, idempotent=True),
|
|
121
|
+
self.create_tool(vfs_read, category="read", read_only=True, idempotent=True),
|
|
122
|
+
self.create_tool(vfs_info, category="read", read_only=True, idempotent=True),
|
|
123
|
+
]:
|
|
124
|
+
self.add_tool(tool)
|