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
|
+
"""Config creation toolset with schema validation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import tomllib
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
8
|
+
|
|
9
|
+
import anyenv
|
|
10
|
+
from schemez.helpers import json_schema_to_pydantic_code
|
|
11
|
+
from upathtools import is_directory_sync, to_upath
|
|
12
|
+
from upathtools.filesystems.file_filesystems import JsonSchemaFileSystem
|
|
13
|
+
|
|
14
|
+
from agentpool.resource_providers import StaticResourceProvider
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
import jsonschema
|
|
19
|
+
from upathtools import JoinablePathLike
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
MarkupType = Literal["yaml", "json", "toml"]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _parse_content(content: str, markup: MarkupType) -> dict[str, Any]:
|
|
26
|
+
"""Parse content based on markup type."""
|
|
27
|
+
import yamling
|
|
28
|
+
|
|
29
|
+
match markup:
|
|
30
|
+
case "yaml":
|
|
31
|
+
return yamling.load_yaml(content, verify_type=dict)
|
|
32
|
+
case "json":
|
|
33
|
+
return anyenv.load_json(content, return_type=dict)
|
|
34
|
+
case "toml":
|
|
35
|
+
return tomllib.loads(content)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _format_validation_error(error: jsonschema.ValidationError) -> str:
|
|
39
|
+
"""Format a validation error for user-friendly display."""
|
|
40
|
+
path = " -> ".join(str(p) for p in error.absolute_path) if error.absolute_path else "root"
|
|
41
|
+
return f"At '{path}': {error.message}"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ConfigCreationTools(StaticResourceProvider):
|
|
45
|
+
"""Provider for config creation and validation tools."""
|
|
46
|
+
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
schema_path: JoinablePathLike,
|
|
50
|
+
markup: MarkupType = "yaml",
|
|
51
|
+
name: str = "config_creation",
|
|
52
|
+
) -> None:
|
|
53
|
+
"""Initialize the config creation toolset.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
schema_path: Path to the JSON schema file
|
|
57
|
+
markup: Markup language for configs (yaml, json, toml)
|
|
58
|
+
name: Namespace for the tools
|
|
59
|
+
"""
|
|
60
|
+
super().__init__(name=name)
|
|
61
|
+
self._schema_path = to_upath(schema_path)
|
|
62
|
+
self._markup: MarkupType = markup
|
|
63
|
+
self._schema: dict[str, Any] | None = None
|
|
64
|
+
|
|
65
|
+
self.add_tool(
|
|
66
|
+
self.create_tool(
|
|
67
|
+
self.create_config,
|
|
68
|
+
category="edit",
|
|
69
|
+
read_only=False,
|
|
70
|
+
idempotent=True,
|
|
71
|
+
description_override=(
|
|
72
|
+
f"Create and validate a {markup.upper()} configuration. "
|
|
73
|
+
"Returns validation result and any errors."
|
|
74
|
+
),
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
self.add_tool(
|
|
78
|
+
self.create_tool(
|
|
79
|
+
self.show_schema_as_code, category="read", read_only=True, idempotent=True
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
self.add_tool(
|
|
83
|
+
self.create_tool(self.list_schema, category="read", read_only=True, idempotent=True)
|
|
84
|
+
)
|
|
85
|
+
self.add_tool(
|
|
86
|
+
self.create_tool(
|
|
87
|
+
self.read_schema_node, category="read", read_only=True, idempotent=True
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
def _load_schema(self) -> dict[str, Any]:
|
|
92
|
+
"""Load and cache the JSON schema."""
|
|
93
|
+
if self._schema is None:
|
|
94
|
+
content = self._schema_path.read_text()
|
|
95
|
+
self._schema = anyenv.load_json(content, return_type=dict)
|
|
96
|
+
return self._schema
|
|
97
|
+
|
|
98
|
+
def _get_schema_fs(self) -> JsonSchemaFileSystem:
|
|
99
|
+
"""Get or create the JSON schema filesystem."""
|
|
100
|
+
return JsonSchemaFileSystem(schema_url=str(self._schema_path))
|
|
101
|
+
|
|
102
|
+
async def create_config(self, content: str) -> str:
|
|
103
|
+
"""Create and validate a configuration.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
content: The configuration content in the configured markup format
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Validation result message
|
|
110
|
+
"""
|
|
111
|
+
import jsonschema
|
|
112
|
+
|
|
113
|
+
schema = self._load_schema()
|
|
114
|
+
try:
|
|
115
|
+
data = _parse_content(content, self._markup)
|
|
116
|
+
except Exception as e: # noqa: BLE001
|
|
117
|
+
return f"Failed to parse {self._markup.upper()}: {e}"
|
|
118
|
+
|
|
119
|
+
validator = jsonschema.Draft202012Validator(schema)
|
|
120
|
+
if errors := [_format_validation_error(e) for e in validator.iter_errors(data)]:
|
|
121
|
+
error_list = "\n".join(f"- {e}" for e in errors[:10])
|
|
122
|
+
suffix = f"\n... and {len(errors) - 10} more errors" if len(errors) > 10 else "" # noqa: PLR2004
|
|
123
|
+
return f"Validation failed with {len(errors)} error(s):\n{error_list}{suffix}"
|
|
124
|
+
|
|
125
|
+
return "Configuration is valid! Successfully validated against schema."
|
|
126
|
+
|
|
127
|
+
async def show_schema_as_code(self) -> str:
|
|
128
|
+
"""Show the JSON schema as Python Pydantic code.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
Python code representation of the schema
|
|
132
|
+
"""
|
|
133
|
+
schema = self._load_schema()
|
|
134
|
+
return json_schema_to_pydantic_code(schema, class_name="Config")
|
|
135
|
+
|
|
136
|
+
async def list_schema(self, path: str = "/") -> str:
|
|
137
|
+
"""List contents at a path in the JSON schema.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
path: Path to list (e.g. '/', '/$defs', '/$defs/AgentConfig/properties')
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Formatted listing of schema contents at the path
|
|
144
|
+
"""
|
|
145
|
+
fs = self._get_schema_fs()
|
|
146
|
+
try:
|
|
147
|
+
items = fs.ls(path, detail=True)
|
|
148
|
+
except FileNotFoundError:
|
|
149
|
+
return f"Path not found: {path}"
|
|
150
|
+
|
|
151
|
+
if not items:
|
|
152
|
+
return f"No contents at: {path}"
|
|
153
|
+
|
|
154
|
+
lines = [f"Contents of {path}:\n"]
|
|
155
|
+
for item in items:
|
|
156
|
+
name = item["name"]
|
|
157
|
+
fs = self._get_schema_fs()
|
|
158
|
+
full_path = f"{path.rstrip('/')}/{name}" if path != "/" else f"/{name}"
|
|
159
|
+
is_dir = is_directory_sync(fs, full_path, entry_type=item.get("type"))
|
|
160
|
+
icon = "📁" if is_dir else "📄"
|
|
161
|
+
parts = [f"{icon} {name}"]
|
|
162
|
+
if schema_type := item.get("schema_type"):
|
|
163
|
+
parts.append(f"[{schema_type}]")
|
|
164
|
+
if item.get("required"):
|
|
165
|
+
parts.append("(required)")
|
|
166
|
+
if desc := item.get("description"):
|
|
167
|
+
# Truncate long descriptions
|
|
168
|
+
desc_short = desc[:60] + "..." if len(desc) > 60 else desc # noqa: PLR2004
|
|
169
|
+
parts.append(f"- {desc_short}")
|
|
170
|
+
lines.append(" " + " ".join(parts))
|
|
171
|
+
|
|
172
|
+
return "\n".join(lines)
|
|
173
|
+
|
|
174
|
+
async def read_schema_node(self, path: str) -> str:
|
|
175
|
+
"""Read the JSON schema at a specific path.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
path: Path to read (e.g. '/$defs/AgentConfig', '/properties/agents')
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
JSON schema content at the path
|
|
182
|
+
"""
|
|
183
|
+
fs = self._get_schema_fs()
|
|
184
|
+
try:
|
|
185
|
+
content = fs.cat(path)
|
|
186
|
+
# Parse and re-format for readability
|
|
187
|
+
schema_data = json.loads(content)
|
|
188
|
+
return json.dumps(schema_data, indent=2)
|
|
189
|
+
except FileNotFoundError:
|
|
190
|
+
return f"Path not found: {path}"
|
|
191
|
+
except json.JSONDecodeError as e:
|
|
192
|
+
return f"Failed to parse schema at {path}: {e}"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Entry point based toolset implementation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
|
+
|
|
8
|
+
from epregistry import EntryPointRegistry
|
|
9
|
+
|
|
10
|
+
from agentpool.log import get_logger
|
|
11
|
+
from agentpool.resource_providers import ResourceProvider
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from agentpool.tools.base import Tool
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
logger = get_logger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class EntryPointTools(ResourceProvider):
|
|
22
|
+
"""Provider for entry point based tools."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, module: str) -> None:
|
|
25
|
+
super().__init__(name=module)
|
|
26
|
+
self.module = module
|
|
27
|
+
self._tools: list[Tool] | None = None
|
|
28
|
+
self.registry = EntryPointRegistry[Callable[..., Any]]("agentpool")
|
|
29
|
+
|
|
30
|
+
async def get_tools(self) -> list[Tool]:
|
|
31
|
+
"""Get tools from entry points."""
|
|
32
|
+
# Return cached tools if available
|
|
33
|
+
if self._tools is not None:
|
|
34
|
+
return self._tools
|
|
35
|
+
|
|
36
|
+
self._tools = []
|
|
37
|
+
entry_point = self.registry.get("tools")
|
|
38
|
+
if not entry_point:
|
|
39
|
+
msg = f"No tools entry point found for {self.module}"
|
|
40
|
+
raise ValueError(msg)
|
|
41
|
+
|
|
42
|
+
get_tools = entry_point.load()
|
|
43
|
+
for item in get_tools():
|
|
44
|
+
meta = {"module": self.module}
|
|
45
|
+
tool = self.create_tool(item, metadata=meta)
|
|
46
|
+
self._tools.append(tool)
|
|
47
|
+
return self._tools
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""LSP diagnostics manager for file operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from anyenv.lsp_servers import DiagnosticRunner
|
|
8
|
+
from anyenv.os_commands import get_os_command_provider
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from anyenv.lsp_servers import Diagnostic, LSPServerInfo
|
|
13
|
+
from exxec import ExecutionEnvironment
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DiagnosticsManager:
|
|
17
|
+
"""Manages LSP diagnostics for file operations.
|
|
18
|
+
|
|
19
|
+
Lazily checks server availability and caches results.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, env: ExecutionEnvironment | None = None) -> None:
|
|
23
|
+
"""Initialize diagnostics manager.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
env: Execution environment for running diagnostic commands.
|
|
27
|
+
If None, diagnostics will be disabled.
|
|
28
|
+
"""
|
|
29
|
+
self._env = env
|
|
30
|
+
self._runner: DiagnosticRunner | None = None
|
|
31
|
+
self._server_availability: dict[str, bool] = {}
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def enabled(self) -> bool:
|
|
35
|
+
"""Check if diagnostics are enabled (have an execution environment)."""
|
|
36
|
+
return self._env is not None
|
|
37
|
+
|
|
38
|
+
def _get_runner(self) -> DiagnosticRunner:
|
|
39
|
+
"""Get or create the diagnostic runner."""
|
|
40
|
+
if self._runner is None:
|
|
41
|
+
executor = self._env.execute_command if self._env else None
|
|
42
|
+
self._runner = DiagnosticRunner(executor=executor)
|
|
43
|
+
self._runner.register_defaults()
|
|
44
|
+
return self._runner
|
|
45
|
+
|
|
46
|
+
async def _is_server_available(self, server: LSPServerInfo) -> bool:
|
|
47
|
+
"""Check if a server's CLI command is available (cached).
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
server: The LSP server info to check
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
True if the server's command is available
|
|
54
|
+
"""
|
|
55
|
+
if not self._env or not server.cli_diagnostics:
|
|
56
|
+
return False
|
|
57
|
+
|
|
58
|
+
if server.id not in self._server_availability:
|
|
59
|
+
provider = get_os_command_provider(self._env.os_type)
|
|
60
|
+
which_cmd = provider.get_command("which")
|
|
61
|
+
cmd = which_cmd.create_command(server.cli_diagnostics.command)
|
|
62
|
+
result = await self._env.execute_command(cmd)
|
|
63
|
+
is_available = (
|
|
64
|
+
which_cmd.parse_command(result.stdout or "", result.exit_code or 0) is not None
|
|
65
|
+
)
|
|
66
|
+
self._server_availability[server.id] = is_available
|
|
67
|
+
|
|
68
|
+
return self._server_availability[server.id]
|
|
69
|
+
|
|
70
|
+
async def run_for_file(self, path: str) -> list[Diagnostic]:
|
|
71
|
+
"""Run all applicable diagnostics on a file.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
path: File path to check
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
List of diagnostics from all available servers
|
|
78
|
+
"""
|
|
79
|
+
if not self.enabled:
|
|
80
|
+
return []
|
|
81
|
+
|
|
82
|
+
runner = self._get_runner()
|
|
83
|
+
all_diagnostics: list[Diagnostic] = []
|
|
84
|
+
|
|
85
|
+
for server in runner.get_servers_for_file(path):
|
|
86
|
+
if await self._is_server_available(server):
|
|
87
|
+
result = await runner.run(server, [path])
|
|
88
|
+
all_diagnostics.extend(result.diagnostics)
|
|
89
|
+
|
|
90
|
+
return all_diagnostics
|
|
91
|
+
|
|
92
|
+
def format_diagnostics(self, diagnostics: list[Diagnostic]) -> str:
|
|
93
|
+
"""Format diagnostics as a Markdown table.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
diagnostics: List of diagnostics to format
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Markdown table with Severity, Location, Code, Description columns
|
|
100
|
+
"""
|
|
101
|
+
if not diagnostics:
|
|
102
|
+
return ""
|
|
103
|
+
|
|
104
|
+
lines: list[str] = [
|
|
105
|
+
"| Severity | Location | Code | Description |",
|
|
106
|
+
"|----------|----------|------|-------------|",
|
|
107
|
+
]
|
|
108
|
+
for d in diagnostics:
|
|
109
|
+
loc = f"{d.file}:{d.line}:{d.column}"
|
|
110
|
+
code = d.code or ""
|
|
111
|
+
# Escape pipe characters in message
|
|
112
|
+
msg = d.message.replace("|", "\\|")
|
|
113
|
+
lines.append(f"| {d.severity.upper()} | {loc} | {code} | {msg} |")
|
|
114
|
+
|
|
115
|
+
return "\n".join(lines)
|