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,367 @@
|
|
|
1
|
+
"""Parsing logic for file-based agent definitions.
|
|
2
|
+
|
|
3
|
+
Supports loading agents from markdown files with YAML frontmatter in various formats:
|
|
4
|
+
- Claude Code: https://code.claude.com/docs/en/sub-agents.md
|
|
5
|
+
- OpenCode: https://github.com/sst/opencode
|
|
6
|
+
- AgentPool (native): Full NativeAgentConfig fields in frontmatter
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
13
|
+
|
|
14
|
+
from upathtools import to_upath
|
|
15
|
+
|
|
16
|
+
from agentpool.log import get_logger
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from agentpool.models.agents import NativeAgentConfig
|
|
21
|
+
from agentpool.models.file_agents import FileAgentConfig
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
logger = get_logger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Claude Code model alias mapping
|
|
28
|
+
CLAUDE_MODEL_ALIASES: dict[str, str] = {
|
|
29
|
+
"sonnet": "anthropic:claude-sonnet-4-20250514",
|
|
30
|
+
"opus": "anthropic:claude-opus-4-20250514",
|
|
31
|
+
"haiku": "anthropic:claude-haiku-3-5-20241022",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# Claude Code permissionMode to ToolConfirmationMode mapping
|
|
35
|
+
PERMISSION_MODE_MAP: dict[str, Literal["always", "never", "per_tool"]] = {
|
|
36
|
+
"default": "per_tool",
|
|
37
|
+
"acceptEdits": "never",
|
|
38
|
+
"bypassPermissions": "never",
|
|
39
|
+
# 'plan' and 'ignore' don't map well, default to per_tool
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Fields that pass through directly to NativeAgentConfig
|
|
43
|
+
PASSTHROUGH_FIELDS = {
|
|
44
|
+
"inherits",
|
|
45
|
+
"toolsets",
|
|
46
|
+
"session",
|
|
47
|
+
"output_type",
|
|
48
|
+
"retries",
|
|
49
|
+
"output_retries",
|
|
50
|
+
"end_strategy",
|
|
51
|
+
"avatar",
|
|
52
|
+
"config_file_path",
|
|
53
|
+
"knowledge",
|
|
54
|
+
"workers",
|
|
55
|
+
"debug",
|
|
56
|
+
"usage_limits",
|
|
57
|
+
"tool_mode",
|
|
58
|
+
"display_name",
|
|
59
|
+
"triggers",
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def extract_frontmatter(content: str, file_path: str) -> tuple[dict[str, Any], str]:
|
|
64
|
+
"""Extract YAML frontmatter and body from markdown content.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
content: Full markdown file content
|
|
68
|
+
file_path: Path for error messages
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Tuple of (metadata dict, system prompt body)
|
|
72
|
+
|
|
73
|
+
Raises:
|
|
74
|
+
ValueError: If frontmatter is missing or invalid
|
|
75
|
+
"""
|
|
76
|
+
import yamling
|
|
77
|
+
|
|
78
|
+
frontmatter_match = re.match(r"^---\s*\n(.*?)\n---\s*\n?", content, re.DOTALL)
|
|
79
|
+
if not frontmatter_match:
|
|
80
|
+
msg = f"No YAML frontmatter found in {file_path}"
|
|
81
|
+
raise ValueError(msg)
|
|
82
|
+
|
|
83
|
+
try:
|
|
84
|
+
metadata = yamling.load_yaml(frontmatter_match.group(1))
|
|
85
|
+
except yamling.YAMLError as e:
|
|
86
|
+
msg = f"Invalid YAML frontmatter in {file_path}: {e}"
|
|
87
|
+
raise ValueError(msg) from e
|
|
88
|
+
|
|
89
|
+
if not isinstance(metadata, dict):
|
|
90
|
+
msg = f"YAML frontmatter must be a dictionary in {file_path}"
|
|
91
|
+
raise ValueError(msg) # noqa: TRY004
|
|
92
|
+
|
|
93
|
+
system_prompt = content[frontmatter_match.end() :].strip()
|
|
94
|
+
return metadata, system_prompt
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def detect_format(metadata: dict[str, Any]) -> Literal["claude", "opencode", "native"]:
|
|
98
|
+
"""Detect the file format based on frontmatter content.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
metadata: Parsed YAML frontmatter
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Detected format: "claude", "opencode", or "agentpool"
|
|
105
|
+
"""
|
|
106
|
+
# OpenCode indicators
|
|
107
|
+
is_opencode = (
|
|
108
|
+
any(key in metadata for key in ["mode", "temperature", "maxSteps", "disable"])
|
|
109
|
+
or ("tools" in metadata and isinstance(metadata["tools"], dict))
|
|
110
|
+
or ("permission" in metadata and isinstance(metadata["permission"], dict))
|
|
111
|
+
)
|
|
112
|
+
if is_opencode:
|
|
113
|
+
return "opencode"
|
|
114
|
+
|
|
115
|
+
# Native format indicators (agentpool specific fields)
|
|
116
|
+
native_fields = {"toolsets", "session", "knowledge", "workers", "triggers"}
|
|
117
|
+
if any(field in metadata for field in native_fields):
|
|
118
|
+
return "native"
|
|
119
|
+
|
|
120
|
+
# Default to Claude Code format
|
|
121
|
+
return "claude"
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def parse_claude_format(
|
|
125
|
+
metadata: dict[str, Any],
|
|
126
|
+
system_prompt: str,
|
|
127
|
+
file_path: str,
|
|
128
|
+
*,
|
|
129
|
+
skills_registry: Any | None = None,
|
|
130
|
+
) -> dict[str, Any]:
|
|
131
|
+
"""Parse Claude Code format frontmatter.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
metadata: Parsed YAML frontmatter
|
|
135
|
+
system_prompt: Markdown body content
|
|
136
|
+
file_path: Path for logging
|
|
137
|
+
skills_registry: Optional skills registry for loading skills
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Dict of NativeAgentConfig kwargs
|
|
141
|
+
"""
|
|
142
|
+
config_kwargs: dict[str, Any] = {}
|
|
143
|
+
|
|
144
|
+
# Description
|
|
145
|
+
if description := metadata.get("description"):
|
|
146
|
+
config_kwargs["description"] = description
|
|
147
|
+
|
|
148
|
+
# Model handling
|
|
149
|
+
if model := metadata.get("model"):
|
|
150
|
+
if model == "inherit":
|
|
151
|
+
pass # Leave as None, will use default
|
|
152
|
+
elif model in CLAUDE_MODEL_ALIASES:
|
|
153
|
+
config_kwargs["model"] = CLAUDE_MODEL_ALIASES[model]
|
|
154
|
+
else:
|
|
155
|
+
config_kwargs["model"] = model
|
|
156
|
+
|
|
157
|
+
# Permission mode mapping
|
|
158
|
+
if permission_mode := metadata.get("permissionMode"):
|
|
159
|
+
if mapped := PERMISSION_MODE_MAP.get(permission_mode):
|
|
160
|
+
config_kwargs["requires_tool_confirmation"] = mapped
|
|
161
|
+
else:
|
|
162
|
+
logger.warning(
|
|
163
|
+
"Unknown permissionMode %r in %s, using default",
|
|
164
|
+
permission_mode,
|
|
165
|
+
file_path,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
# Tools string format (comma-separated) - not yet supported
|
|
169
|
+
if (tools := metadata.get("tools")) and isinstance(tools, str):
|
|
170
|
+
logger.debug("Claude Code tools string %r in %s (not yet supported)", tools, file_path)
|
|
171
|
+
|
|
172
|
+
# Skills handling
|
|
173
|
+
if (skills_str := metadata.get("skills")) and skills_registry is not None:
|
|
174
|
+
skill_names = [s.strip() for s in skills_str.split(",")]
|
|
175
|
+
for skill_name in skill_names:
|
|
176
|
+
if skill_name not in skills_registry:
|
|
177
|
+
logger.warning(
|
|
178
|
+
"Skill %r from %s not found in registry, ignoring",
|
|
179
|
+
skill_name,
|
|
180
|
+
file_path,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
# System prompt from markdown body
|
|
184
|
+
if system_prompt:
|
|
185
|
+
config_kwargs["system_prompt"] = system_prompt
|
|
186
|
+
|
|
187
|
+
# Pass through agentpool specific fields
|
|
188
|
+
for field in PASSTHROUGH_FIELDS:
|
|
189
|
+
if field in metadata:
|
|
190
|
+
config_kwargs[field] = metadata[field]
|
|
191
|
+
|
|
192
|
+
return config_kwargs
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def parse_opencode_format(
|
|
196
|
+
metadata: dict[str, Any],
|
|
197
|
+
system_prompt: str,
|
|
198
|
+
file_path: str,
|
|
199
|
+
) -> dict[str, Any]:
|
|
200
|
+
"""Parse OpenCode format frontmatter.
|
|
201
|
+
|
|
202
|
+
Args:
|
|
203
|
+
metadata: Parsed YAML frontmatter
|
|
204
|
+
system_prompt: Markdown body content
|
|
205
|
+
file_path: Path for logging
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Dict of NativeAgentConfig kwargs
|
|
209
|
+
"""
|
|
210
|
+
config_kwargs: dict[str, Any] = {}
|
|
211
|
+
|
|
212
|
+
# Description
|
|
213
|
+
if description := metadata.get("description"):
|
|
214
|
+
config_kwargs["description"] = description
|
|
215
|
+
|
|
216
|
+
# Model handling
|
|
217
|
+
if model := metadata.get("model"):
|
|
218
|
+
if model == "inherit":
|
|
219
|
+
pass
|
|
220
|
+
elif model in CLAUDE_MODEL_ALIASES:
|
|
221
|
+
config_kwargs["model"] = CLAUDE_MODEL_ALIASES[model]
|
|
222
|
+
else:
|
|
223
|
+
config_kwargs["model"] = model
|
|
224
|
+
|
|
225
|
+
# Temperature (logged, not directly supported)
|
|
226
|
+
if temperature := metadata.get("temperature"):
|
|
227
|
+
logger.debug(
|
|
228
|
+
"OpenCode temperature %r in %s (not directly supported)", temperature, file_path
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
# MaxSteps (logged, not directly supported)
|
|
232
|
+
if max_steps := metadata.get("maxSteps"):
|
|
233
|
+
logger.debug("OpenCode maxSteps %r in %s (not directly supported)", max_steps, file_path)
|
|
234
|
+
|
|
235
|
+
# Disable (logged, not directly supported)
|
|
236
|
+
if disable := metadata.get("disable"):
|
|
237
|
+
logger.debug("OpenCode disable %r in %s (not directly supported)", disable, file_path)
|
|
238
|
+
|
|
239
|
+
# Mode (informational only)
|
|
240
|
+
if mode := metadata.get("mode"):
|
|
241
|
+
logger.debug("OpenCode mode %r in %s (informational only)", mode, file_path)
|
|
242
|
+
|
|
243
|
+
# Permission handling (granular per-tool)
|
|
244
|
+
if permission := metadata.get("permission"):
|
|
245
|
+
edit_perm = permission.get("edit") if isinstance(permission, dict) else None
|
|
246
|
+
if edit_perm in ("deny", "ask"):
|
|
247
|
+
config_kwargs["requires_tool_confirmation"] = (
|
|
248
|
+
"always" if edit_perm == "ask" else "never"
|
|
249
|
+
)
|
|
250
|
+
logger.debug("OpenCode permission %r in %s (partial mapping)", permission, file_path)
|
|
251
|
+
|
|
252
|
+
# Tools dict format (not yet supported)
|
|
253
|
+
if (tools := metadata.get("tools")) and isinstance(tools, dict):
|
|
254
|
+
logger.debug("OpenCode tools dict %r in %s (not yet supported)", tools, file_path)
|
|
255
|
+
|
|
256
|
+
# System prompt from markdown body
|
|
257
|
+
if system_prompt:
|
|
258
|
+
config_kwargs["system_prompt"] = system_prompt
|
|
259
|
+
|
|
260
|
+
# Pass through agentpool specific fields
|
|
261
|
+
for field in PASSTHROUGH_FIELDS:
|
|
262
|
+
if field in metadata:
|
|
263
|
+
config_kwargs[field] = metadata[field]
|
|
264
|
+
|
|
265
|
+
return config_kwargs
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def parse_native_format(
|
|
269
|
+
metadata: dict[str, Any],
|
|
270
|
+
system_prompt: str,
|
|
271
|
+
) -> dict[str, Any]:
|
|
272
|
+
"""Parse native format frontmatter.
|
|
273
|
+
|
|
274
|
+
This format allows full NativeAgentConfig fields in the frontmatter,
|
|
275
|
+
with the markdown body used as system prompt.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
metadata: Parsed YAML frontmatter
|
|
279
|
+
system_prompt: Markdown body content
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
Dict of NativeAgentConfig kwargs
|
|
283
|
+
"""
|
|
284
|
+
# Start with all metadata (it's already in NativeAgentConfig format)
|
|
285
|
+
config_kwargs = dict(metadata)
|
|
286
|
+
|
|
287
|
+
# Add system prompt from body if present and not already defined
|
|
288
|
+
if system_prompt and "system_prompt" not in config_kwargs:
|
|
289
|
+
config_kwargs["system_prompt"] = system_prompt
|
|
290
|
+
|
|
291
|
+
return config_kwargs
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def parse_agent_file(
|
|
295
|
+
file_path: str,
|
|
296
|
+
*,
|
|
297
|
+
file_format: Literal["claude", "opencode", "native", "auto"] = "auto",
|
|
298
|
+
skills_registry: Any | None = None,
|
|
299
|
+
) -> NativeAgentConfig:
|
|
300
|
+
"""Parse agent markdown file to NativeAgentConfig.
|
|
301
|
+
|
|
302
|
+
Supports Claude Code, OpenCode, and native formats with auto-detection.
|
|
303
|
+
Also supports local and remote paths via UPath.
|
|
304
|
+
|
|
305
|
+
Args:
|
|
306
|
+
file_path: Path to .md file with YAML frontmatter (local or remote)
|
|
307
|
+
file_format: File format to use ("auto" for detection, or explicit format)
|
|
308
|
+
skills_registry: Optional skills registry for loading skills
|
|
309
|
+
|
|
310
|
+
Returns:
|
|
311
|
+
Parsed NativeAgentConfig
|
|
312
|
+
|
|
313
|
+
Raises:
|
|
314
|
+
ValueError: If file cannot be parsed
|
|
315
|
+
"""
|
|
316
|
+
from agentpool.models.agents import NativeAgentConfig
|
|
317
|
+
|
|
318
|
+
path = to_upath(file_path)
|
|
319
|
+
content = path.read_text("utf-8")
|
|
320
|
+
|
|
321
|
+
# Extract frontmatter and body
|
|
322
|
+
metadata, system_prompt = extract_frontmatter(content, file_path)
|
|
323
|
+
|
|
324
|
+
# Detect or use specified format
|
|
325
|
+
detected_format = detect_format(metadata) if file_format == "auto" else file_format
|
|
326
|
+
|
|
327
|
+
# Parse based on format
|
|
328
|
+
if detected_format == "claude":
|
|
329
|
+
config_kwargs = parse_claude_format(
|
|
330
|
+
metadata, system_prompt, file_path, skills_registry=skills_registry
|
|
331
|
+
)
|
|
332
|
+
elif detected_format == "opencode":
|
|
333
|
+
config_kwargs = parse_opencode_format(metadata, system_prompt, file_path)
|
|
334
|
+
elif detected_format == "native":
|
|
335
|
+
config_kwargs = parse_native_format(metadata, system_prompt)
|
|
336
|
+
else:
|
|
337
|
+
msg = f"Unknown format {detected_format!r} for {file_path}"
|
|
338
|
+
raise ValueError(msg)
|
|
339
|
+
|
|
340
|
+
return NativeAgentConfig(**config_kwargs)
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def parse_file_agent_reference(
|
|
344
|
+
reference: str | FileAgentConfig,
|
|
345
|
+
*,
|
|
346
|
+
skills_registry: Any | None = None,
|
|
347
|
+
) -> NativeAgentConfig:
|
|
348
|
+
"""Parse a file agent reference (path string or config) to NativeAgentConfig.
|
|
349
|
+
|
|
350
|
+
Args:
|
|
351
|
+
reference: Either a path string (auto-detect format) or FileAgentConfig
|
|
352
|
+
with explicit type discriminator
|
|
353
|
+
skills_registry: Optional skills registry for loading skills
|
|
354
|
+
|
|
355
|
+
Returns:
|
|
356
|
+
Parsed NativeAgentConfig
|
|
357
|
+
"""
|
|
358
|
+
if isinstance(reference, str):
|
|
359
|
+
# Simple path string: auto-detect format
|
|
360
|
+
return parse_agent_file(reference, skills_registry=skills_registry)
|
|
361
|
+
|
|
362
|
+
# Explicit config: use type as format
|
|
363
|
+
return parse_agent_file(
|
|
364
|
+
reference.path,
|
|
365
|
+
file_format=reference.type,
|
|
366
|
+
skills_registry=skills_registry,
|
|
367
|
+
)
|