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,180 @@
|
|
|
1
|
+
"""Built-in commands for AgentPool."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from agentpool_commands.base import NodeCommand
|
|
6
|
+
from agentpool_commands.agents import (
|
|
7
|
+
CreateAgentCommand,
|
|
8
|
+
ListAgentsCommand,
|
|
9
|
+
ShowAgentCommand,
|
|
10
|
+
# SwitchAgentCommand,
|
|
11
|
+
)
|
|
12
|
+
from agentpool_commands.connections import (
|
|
13
|
+
ConnectCommand,
|
|
14
|
+
DisconnectCommand,
|
|
15
|
+
ListConnectionsCommand,
|
|
16
|
+
DisconnectAllCommand,
|
|
17
|
+
)
|
|
18
|
+
from agentpool_commands.models import SetModelCommand
|
|
19
|
+
from agentpool_commands.prompts import ListPromptsCommand, ShowPromptCommand
|
|
20
|
+
from agentpool_commands.resources import (
|
|
21
|
+
ListResourcesCommand,
|
|
22
|
+
ShowResourceCommand,
|
|
23
|
+
AddResourceCommand,
|
|
24
|
+
)
|
|
25
|
+
from agentpool_commands.session import ClearCommand, ResetCommand
|
|
26
|
+
from agentpool_commands.read import ReadCommand
|
|
27
|
+
from agentpool_commands.tools import (
|
|
28
|
+
DisableToolCommand,
|
|
29
|
+
EnableToolCommand,
|
|
30
|
+
ListToolsCommand,
|
|
31
|
+
RegisterToolCommand,
|
|
32
|
+
ShowToolCommand,
|
|
33
|
+
)
|
|
34
|
+
from agentpool_commands.workers import (
|
|
35
|
+
AddWorkerCommand,
|
|
36
|
+
RemoveWorkerCommand,
|
|
37
|
+
ListWorkersCommand,
|
|
38
|
+
)
|
|
39
|
+
from agentpool_commands.utils import (
|
|
40
|
+
CopyClipboardCommand,
|
|
41
|
+
EditAgentFileCommand,
|
|
42
|
+
ShareHistoryCommand,
|
|
43
|
+
)
|
|
44
|
+
from typing import TYPE_CHECKING, Any
|
|
45
|
+
|
|
46
|
+
if TYPE_CHECKING:
|
|
47
|
+
from collections.abc import Sequence
|
|
48
|
+
|
|
49
|
+
from slashed import BaseCommand, SlashedCommand
|
|
50
|
+
|
|
51
|
+
from agentpool.messaging import MessageNode
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_agent_commands(**kwargs: Any) -> Sequence[BaseCommand | type[SlashedCommand]]:
|
|
55
|
+
"""Get commands that operate primarily on a single agent."""
|
|
56
|
+
command_map = {
|
|
57
|
+
"enable_clear": ClearCommand,
|
|
58
|
+
"enable_reset": ResetCommand,
|
|
59
|
+
"enable_copy_clipboard": CopyClipboardCommand,
|
|
60
|
+
"enable_share_history": ShareHistoryCommand,
|
|
61
|
+
"enable_set_model": SetModelCommand,
|
|
62
|
+
"enable_list_tools": ListToolsCommand,
|
|
63
|
+
"enable_show_tool": ShowToolCommand,
|
|
64
|
+
"enable_enable_tool": EnableToolCommand,
|
|
65
|
+
"enable_disable_tool": DisableToolCommand,
|
|
66
|
+
"enable_register_tool": RegisterToolCommand,
|
|
67
|
+
"enable_list_resources": ListResourcesCommand,
|
|
68
|
+
"enable_show_resource": ShowResourceCommand,
|
|
69
|
+
"enable_add_resource": AddResourceCommand,
|
|
70
|
+
"enable_list_prompts": ListPromptsCommand,
|
|
71
|
+
"enable_show_prompt": ShowPromptCommand,
|
|
72
|
+
"enable_add_worker": AddWorkerCommand,
|
|
73
|
+
"enable_remove_worker": RemoveWorkerCommand,
|
|
74
|
+
"enable_list_workers": ListWorkersCommand,
|
|
75
|
+
"enable_connect": ConnectCommand,
|
|
76
|
+
"enable_disconnect": DisconnectCommand,
|
|
77
|
+
"enable_list_connections": ListConnectionsCommand,
|
|
78
|
+
"enable_disconnect_all": DisconnectAllCommand,
|
|
79
|
+
"enable_read": ReadCommand,
|
|
80
|
+
}
|
|
81
|
+
return [command for flag, command in command_map.items() if kwargs.get(flag, True)]
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_pool_commands(**kwargs: Any) -> Sequence[BaseCommand | type[SlashedCommand]]:
|
|
85
|
+
"""Get commands that operate on multiple agents or the pool itself."""
|
|
86
|
+
command_map = {
|
|
87
|
+
"enable_create_agent": CreateAgentCommand,
|
|
88
|
+
"enable_list_agents": ListAgentsCommand,
|
|
89
|
+
"enable_show_agent": ShowAgentCommand,
|
|
90
|
+
"enable_edit_agent_file": EditAgentFileCommand,
|
|
91
|
+
}
|
|
92
|
+
return [command for flag, command in command_map.items() if kwargs.get(flag, True)]
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def filter_commands_for_node(
|
|
96
|
+
commands: Sequence[BaseCommand | type[SlashedCommand]],
|
|
97
|
+
node: MessageNode[Any, Any],
|
|
98
|
+
) -> list[BaseCommand | type[SlashedCommand]]:
|
|
99
|
+
"""Filter commands to those supporting the given node type.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
commands: Commands to filter
|
|
103
|
+
node: The node to check compatibility with
|
|
104
|
+
"""
|
|
105
|
+
result: list[BaseCommand | type[SlashedCommand]] = []
|
|
106
|
+
for cmd in commands:
|
|
107
|
+
cmd_cls = cmd if isinstance(cmd, type) else type(cmd)
|
|
108
|
+
if issubclass(cmd_cls, NodeCommand) and not cmd_cls.supports_node(node):
|
|
109
|
+
continue
|
|
110
|
+
result.append(cmd)
|
|
111
|
+
return result
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def get_commands(
|
|
115
|
+
*,
|
|
116
|
+
enable_clear: bool = True,
|
|
117
|
+
enable_reset: bool = True,
|
|
118
|
+
enable_copy_clipboard: bool = True,
|
|
119
|
+
enable_share_history: bool = True,
|
|
120
|
+
enable_set_model: bool = True,
|
|
121
|
+
enable_list_tools: bool = True,
|
|
122
|
+
enable_show_tool: bool = True,
|
|
123
|
+
enable_enable_tool: bool = True,
|
|
124
|
+
enable_disable_tool: bool = True,
|
|
125
|
+
enable_register_tool: bool = True,
|
|
126
|
+
enable_list_resources: bool = True,
|
|
127
|
+
enable_show_resource: bool = True,
|
|
128
|
+
enable_add_resource: bool = True,
|
|
129
|
+
enable_list_prompts: bool = True,
|
|
130
|
+
enable_show_prompt: bool = True,
|
|
131
|
+
enable_add_worker: bool = True,
|
|
132
|
+
enable_remove_worker: bool = True,
|
|
133
|
+
enable_list_workers: bool = True,
|
|
134
|
+
enable_connect: bool = True,
|
|
135
|
+
enable_disconnect: bool = True,
|
|
136
|
+
enable_list_connections: bool = True,
|
|
137
|
+
enable_disconnect_all: bool = True,
|
|
138
|
+
enable_read: bool = True,
|
|
139
|
+
enable_create_agent: bool = True,
|
|
140
|
+
enable_list_agents: bool = True,
|
|
141
|
+
enable_show_agent: bool = True,
|
|
142
|
+
enable_edit_agent_file: bool = True,
|
|
143
|
+
) -> list[BaseCommand | type[SlashedCommand]]:
|
|
144
|
+
"""Get all built-in commands."""
|
|
145
|
+
agent_kwargs = {
|
|
146
|
+
"enable_clear": enable_clear,
|
|
147
|
+
"enable_reset": enable_reset,
|
|
148
|
+
"enable_copy_clipboard": enable_copy_clipboard,
|
|
149
|
+
"enable_share_history": enable_share_history,
|
|
150
|
+
"enable_set_model": enable_set_model,
|
|
151
|
+
"enable_list_tools": enable_list_tools,
|
|
152
|
+
"enable_show_tool": enable_show_tool,
|
|
153
|
+
"enable_enable_tool": enable_enable_tool,
|
|
154
|
+
"enable_disable_tool": enable_disable_tool,
|
|
155
|
+
"enable_register_tool": enable_register_tool,
|
|
156
|
+
"enable_list_resources": enable_list_resources,
|
|
157
|
+
"enable_show_resource": enable_show_resource,
|
|
158
|
+
"enable_add_resource": enable_add_resource,
|
|
159
|
+
"enable_list_prompts": enable_list_prompts,
|
|
160
|
+
"enable_show_prompt": enable_show_prompt,
|
|
161
|
+
"enable_add_worker": enable_add_worker,
|
|
162
|
+
"enable_remove_worker": enable_remove_worker,
|
|
163
|
+
"enable_list_workers": enable_list_workers,
|
|
164
|
+
"enable_connect": enable_connect,
|
|
165
|
+
"enable_disconnect": enable_disconnect,
|
|
166
|
+
"enable_list_connections": enable_list_connections,
|
|
167
|
+
"enable_disconnect_all": enable_disconnect_all,
|
|
168
|
+
"enable_read": enable_read,
|
|
169
|
+
}
|
|
170
|
+
pool_kwargs = {
|
|
171
|
+
"enable_create_agent": enable_create_agent,
|
|
172
|
+
"enable_list_agents": enable_list_agents,
|
|
173
|
+
"enable_show_agent": enable_show_agent,
|
|
174
|
+
"enable_edit_agent_file": enable_edit_agent_file,
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return [
|
|
178
|
+
*get_agent_commands(**agent_kwargs),
|
|
179
|
+
*get_pool_commands(**pool_kwargs),
|
|
180
|
+
]
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"""Agent management commands."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from slashed import CommandContext, CommandError # noqa: TC002
|
|
6
|
+
from slashed.completers import CallbackCompleter
|
|
7
|
+
|
|
8
|
+
from agentpool.messaging.context import NodeContext # noqa: TC001
|
|
9
|
+
from agentpool_commands.base import NodeCommand
|
|
10
|
+
from agentpool_commands.completers import get_available_agents
|
|
11
|
+
from agentpool_commands.markdown_utils import format_table
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CreateAgentCommand(NodeCommand):
|
|
15
|
+
"""Create a new agent in the current session.
|
|
16
|
+
|
|
17
|
+
Creates a temporary agent that inherits the current agent's model.
|
|
18
|
+
The new agent will exist only for this session.
|
|
19
|
+
|
|
20
|
+
Options:
|
|
21
|
+
--system-prompt "prompt" System instructions for the agent (required)
|
|
22
|
+
--model model_name Override model (default: same as current agent)
|
|
23
|
+
--role role_name Agent role (assistant/specialist/overseer)
|
|
24
|
+
--description "text" Optional description of the agent
|
|
25
|
+
--tools "import_path1|import_path2" Optional list tools (by import path)
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
# Create poet using same model as current agent
|
|
29
|
+
/create-agent poet --system-prompt "Create poems from any text"
|
|
30
|
+
|
|
31
|
+
# Create analyzer with different model
|
|
32
|
+
/create-agent analyzer --system-prompt "Analyze in detail" --model gpt-5
|
|
33
|
+
|
|
34
|
+
# Create specialized helper
|
|
35
|
+
/create-agent helper --system-prompt "Debug code" --role specialist
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
name = "create-agent"
|
|
39
|
+
category = "agents"
|
|
40
|
+
|
|
41
|
+
async def execute_command(
|
|
42
|
+
self,
|
|
43
|
+
ctx: CommandContext[NodeContext],
|
|
44
|
+
agent_name: str,
|
|
45
|
+
system_prompt: str = "",
|
|
46
|
+
*,
|
|
47
|
+
model: str | None = None,
|
|
48
|
+
role: str | None = None,
|
|
49
|
+
description: str | None = None,
|
|
50
|
+
tools: str | None = None,
|
|
51
|
+
) -> None:
|
|
52
|
+
"""Create a new agent in the current session.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
ctx: Command context
|
|
56
|
+
agent_name: Name for the new agent
|
|
57
|
+
system_prompt: System instructions for the agent
|
|
58
|
+
model: Override model (default: same as current agent)
|
|
59
|
+
role: Agent role (assistant/specialist/overseer)
|
|
60
|
+
description: Optional description of the agent
|
|
61
|
+
tools: Optional pipe-separated list of tools (by import path)
|
|
62
|
+
"""
|
|
63
|
+
try:
|
|
64
|
+
if not ctx.context.pool:
|
|
65
|
+
msg = "No agent pool available"
|
|
66
|
+
raise CommandError(msg)
|
|
67
|
+
|
|
68
|
+
# Get model from args or current agent
|
|
69
|
+
current_agent = ctx.context.agent
|
|
70
|
+
tool_list = [t.strip() for t in tools.split("|")] if tools else None
|
|
71
|
+
# Create and register the new agent
|
|
72
|
+
await ctx.context.pool.add_agent(
|
|
73
|
+
name=agent_name,
|
|
74
|
+
model=model or current_agent.model_name,
|
|
75
|
+
system_prompt=system_prompt or (),
|
|
76
|
+
description=description,
|
|
77
|
+
tools=tool_list,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
msg = f"✅ **Created agent** `{agent_name}`"
|
|
81
|
+
if tool_list:
|
|
82
|
+
msg += f" with tools: `{', '.join(tool_list)}`"
|
|
83
|
+
await ctx.print(f"{msg}\n\n💡 Use `/connect {agent_name}` to forward messages")
|
|
84
|
+
|
|
85
|
+
except ValueError as e:
|
|
86
|
+
msg = f"Failed to create agent: {e}"
|
|
87
|
+
raise CommandError(msg) from e
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class ShowAgentCommand(NodeCommand):
|
|
91
|
+
"""Display the complete configuration of the current agent as YAML.
|
|
92
|
+
|
|
93
|
+
Shows:
|
|
94
|
+
- Basic agent settings
|
|
95
|
+
- Model configuration (with override indicators)
|
|
96
|
+
- Environment settings (including inline environments)
|
|
97
|
+
- System prompts
|
|
98
|
+
- Response type configuration
|
|
99
|
+
- Other settings
|
|
100
|
+
|
|
101
|
+
Fields that have been overridden at runtime are marked with comments.
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
name = "show-agent"
|
|
105
|
+
category = "agents"
|
|
106
|
+
|
|
107
|
+
async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
|
|
108
|
+
"""Show current agent's configuration.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
ctx: Command context
|
|
112
|
+
"""
|
|
113
|
+
import yamling
|
|
114
|
+
|
|
115
|
+
node_ctx = ctx.context.node.get_context()
|
|
116
|
+
config = node_ctx.config
|
|
117
|
+
config_dict = config.model_dump(exclude_none=True) # Get base config as dict
|
|
118
|
+
# Format as annotated YAML
|
|
119
|
+
yaml_config = yamling.dump_yaml(
|
|
120
|
+
config_dict,
|
|
121
|
+
sort_keys=False,
|
|
122
|
+
indent=2,
|
|
123
|
+
default_flow_style=False,
|
|
124
|
+
allow_unicode=True,
|
|
125
|
+
)
|
|
126
|
+
# Add header and format for display
|
|
127
|
+
sections = ["\n**Current Node Configuration:**", "```yaml", yaml_config, "```"]
|
|
128
|
+
await ctx.print("\n".join(sections))
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class ListAgentsCommand(NodeCommand):
|
|
132
|
+
"""Show all agents defined in the current configuration.
|
|
133
|
+
|
|
134
|
+
Displays:
|
|
135
|
+
- Agent name
|
|
136
|
+
- Model used (if specified)
|
|
137
|
+
- Description (if available)
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
name = "list-agents"
|
|
141
|
+
category = "agents"
|
|
142
|
+
|
|
143
|
+
async def execute_command(self, ctx: CommandContext[NodeContext]) -> None:
|
|
144
|
+
"""List all available agents.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
ctx: Command context
|
|
148
|
+
"""
|
|
149
|
+
if not ctx.context.pool:
|
|
150
|
+
msg = "No agent pool available"
|
|
151
|
+
raise CommandError(msg)
|
|
152
|
+
|
|
153
|
+
rows = []
|
|
154
|
+
for name, agent in ctx.context.pool.agents.items():
|
|
155
|
+
typ = "dynamic" if name not in ctx.context.definition.agents else "static"
|
|
156
|
+
rows.append({
|
|
157
|
+
"Name": name,
|
|
158
|
+
"Model": str(agent.model_name or ""),
|
|
159
|
+
"Type": f"agent ({typ})",
|
|
160
|
+
"Description": agent.description or "",
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
for name, acp_agent in ctx.context.pool.acp_agents.items():
|
|
164
|
+
rows.append({
|
|
165
|
+
"Name": name,
|
|
166
|
+
"Model": str(acp_agent.model_name or ""),
|
|
167
|
+
"Type": "acp_agent",
|
|
168
|
+
"Description": acp_agent.description or "",
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
headers = ["Name", "Model", "Type", "Description"]
|
|
172
|
+
table = format_table(headers, rows)
|
|
173
|
+
await ctx.print(f"## 🤖 Available Agents\n\n{table}")
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class SwitchAgentCommand(NodeCommand):
|
|
177
|
+
"""Switch the current chat session to a different agent.
|
|
178
|
+
|
|
179
|
+
Use /list-agents to see available agents.
|
|
180
|
+
|
|
181
|
+
Example: /switch-agent url_opener
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
name = "switch-agent"
|
|
185
|
+
category = "agents"
|
|
186
|
+
|
|
187
|
+
async def execute_command(self, ctx: CommandContext[NodeContext], agent_name: str) -> None:
|
|
188
|
+
"""Switch to a different agent.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
ctx: Command context
|
|
192
|
+
agent_name: Name of the agent to switch to
|
|
193
|
+
"""
|
|
194
|
+
msg = "Temporarily disabled"
|
|
195
|
+
raise RuntimeError(msg)
|
|
196
|
+
|
|
197
|
+
def get_completer(self) -> CallbackCompleter:
|
|
198
|
+
"""Get completer for agent names."""
|
|
199
|
+
return CallbackCompleter(get_available_agents)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Base command class with node-type filtering support."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
|
+
|
|
8
|
+
from slashed import SlashedCommand
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from agentpool.messaging import MessageNode
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class NodeCommand(SlashedCommand, ABC):
|
|
16
|
+
"""Base class for commands with node-type filtering.
|
|
17
|
+
|
|
18
|
+
Commands inheriting from this can override `supports_node` to restrict
|
|
19
|
+
which node types they're available for.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
name: str = "" # Placeholder, must be overridden by concrete subclasses
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def supports_node(cls, node: MessageNode[Any, Any]) -> bool:
|
|
26
|
+
"""Check if this command supports the given node type.
|
|
27
|
+
|
|
28
|
+
Override in subclasses to restrict to specific node types.
|
|
29
|
+
Default implementation returns True (supports all nodes).
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
node: The node to check compatibility with
|
|
33
|
+
"""
|
|
34
|
+
return True
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class AgentCommand(NodeCommand):
|
|
38
|
+
"""Base class for commands that only work with Agent nodes."""
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def supports_node(cls, node: MessageNode[Any, Any]) -> bool:
|
|
42
|
+
"""Check if node is an Agent."""
|
|
43
|
+
from agentpool import Agent
|
|
44
|
+
|
|
45
|
+
return isinstance(node, Agent)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Slashed command to list nodes."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from slashed import CommandContext # noqa: TC002
|
|
6
|
+
|
|
7
|
+
from agentpool.log import get_logger
|
|
8
|
+
from agentpool.messaging.context import NodeContext # noqa: TC001
|
|
9
|
+
from agentpool_commands.base import NodeCommand
|
|
10
|
+
from agentpool_commands.markdown_utils import format_table
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
logger = get_logger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ListNodesCommand(NodeCommand):
|
|
17
|
+
"""List all nodes in the pool with their status."""
|
|
18
|
+
|
|
19
|
+
name = "list-nodes"
|
|
20
|
+
category = "pool"
|
|
21
|
+
|
|
22
|
+
async def execute_command(
|
|
23
|
+
self,
|
|
24
|
+
ctx: CommandContext[NodeContext],
|
|
25
|
+
show_connections: bool = False,
|
|
26
|
+
) -> None:
|
|
27
|
+
"""List all nodes and their current status.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
ctx: Command context with node
|
|
31
|
+
show_connections: Whether to show node connections
|
|
32
|
+
"""
|
|
33
|
+
node = ctx.get_data()
|
|
34
|
+
assert node.pool
|
|
35
|
+
|
|
36
|
+
rows = []
|
|
37
|
+
for name, node_ in node.pool.nodes.items():
|
|
38
|
+
# Status check
|
|
39
|
+
status = "🔄 busy" if node_.task_manager.is_busy() else "⏳ idle"
|
|
40
|
+
|
|
41
|
+
# Add connections if requested
|
|
42
|
+
connections = []
|
|
43
|
+
if show_connections and node_.connections.get_targets():
|
|
44
|
+
connections = [a.name for a in node_.connections.get_targets()]
|
|
45
|
+
conn_str = f"→ {', '.join(connections)}"
|
|
46
|
+
else:
|
|
47
|
+
conn_str = ""
|
|
48
|
+
|
|
49
|
+
rows.append({
|
|
50
|
+
"Node": name,
|
|
51
|
+
"Status": status,
|
|
52
|
+
"Connections": conn_str,
|
|
53
|
+
"Description": node_.description or "",
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
headers = ["Node", "Status", "Connections", "Description"]
|
|
57
|
+
table = format_table(headers, rows)
|
|
58
|
+
await ctx.print(f"## 🔗 Available Nodes\n\n{table}")
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Command completion providers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Literal, get_args
|
|
6
|
+
|
|
7
|
+
from slashed import CompletionItem, CompletionProvider
|
|
8
|
+
|
|
9
|
+
from agentpool.agents.context import AgentContext # noqa: TC001
|
|
10
|
+
from agentpool.messaging.context import NodeContext # noqa: TC001
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from collections.abc import AsyncIterator
|
|
15
|
+
|
|
16
|
+
from slashed import CompletionContext
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_available_agents(
|
|
20
|
+
ctx: CompletionContext[AgentContext[Any]],
|
|
21
|
+
agent_type: Literal["all", "regular", "acp"] = "all",
|
|
22
|
+
) -> list[str]:
|
|
23
|
+
"""Get available agent names.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
ctx: Completion context
|
|
27
|
+
agent_type: Filter by agent type ("all", "regular", or "acp")
|
|
28
|
+
"""
|
|
29
|
+
if not ctx.command_context.context.pool:
|
|
30
|
+
return []
|
|
31
|
+
pool = ctx.command_context.context.pool
|
|
32
|
+
match agent_type:
|
|
33
|
+
case "all":
|
|
34
|
+
return list(pool.all_agents.keys())
|
|
35
|
+
case "regular":
|
|
36
|
+
return list(pool.agents.keys())
|
|
37
|
+
case "acp":
|
|
38
|
+
return list(pool.acp_agents.keys())
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def get_available_nodes(ctx: CompletionContext[NodeContext[Any]]) -> list[str]:
|
|
42
|
+
"""Get available node names."""
|
|
43
|
+
if not ctx.command_context.context.pool:
|
|
44
|
+
return []
|
|
45
|
+
return list(ctx.command_context.context.pool.nodes.keys())
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_model_names(ctx: CompletionContext[AgentContext[Any]]) -> list[str]:
|
|
49
|
+
"""Get available model names from pydantic-ai and current configuration.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
- All models from KnownModelName literal type
|
|
53
|
+
- Plus any additional models from current configuration
|
|
54
|
+
"""
|
|
55
|
+
# Get models directly from the Literal type
|
|
56
|
+
from llmling_models import AllModels
|
|
57
|
+
from tokonomics.model_names import ModelId
|
|
58
|
+
|
|
59
|
+
known_models = list(get_args(ModelId)) + list(get_args(AllModels))
|
|
60
|
+
|
|
61
|
+
agent = ctx.command_context.context.agent
|
|
62
|
+
agent_ctx = agent.get_context()
|
|
63
|
+
if not agent_ctx.definition:
|
|
64
|
+
return known_models
|
|
65
|
+
|
|
66
|
+
# Add any additional models from the current configuration (only native agents have model)
|
|
67
|
+
agents = agent_ctx.definition.native_agents
|
|
68
|
+
config_models = {str(a.model) for a in agents.values() if a.model is not None}
|
|
69
|
+
|
|
70
|
+
# Combine both sources, keeping order (known models first)
|
|
71
|
+
all_models = known_models[:]
|
|
72
|
+
all_models.extend(model for model in config_models if model not in all_models)
|
|
73
|
+
return all_models
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class PromptCompleter(CompletionProvider):
|
|
77
|
+
"""Completer for prompts."""
|
|
78
|
+
|
|
79
|
+
async def get_completions(
|
|
80
|
+
self, ctx: CompletionContext[AgentContext[Any]]
|
|
81
|
+
) -> AsyncIterator[CompletionItem]:
|
|
82
|
+
"""Complete prompt references."""
|
|
83
|
+
current = ctx.current_word
|
|
84
|
+
manifest = ctx.command_context.context.definition
|
|
85
|
+
|
|
86
|
+
# If no : yet, suggest providers
|
|
87
|
+
if ":" not in current:
|
|
88
|
+
# Always suggest builtin prompts without prefix
|
|
89
|
+
for name in manifest.prompts.system_prompts:
|
|
90
|
+
if not name.startswith(current):
|
|
91
|
+
continue
|
|
92
|
+
yield CompletionItem(name, metadata="Builtin prompt", kind="choice")
|
|
93
|
+
|
|
94
|
+
# Suggest provider prefixes
|
|
95
|
+
for provider in manifest.prompts.providers or []:
|
|
96
|
+
prefix = f"{provider.type}:"
|
|
97
|
+
if not prefix.startswith(current):
|
|
98
|
+
continue
|
|
99
|
+
yield CompletionItem(prefix, metadata="Prompt provider", kind="choice")
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
# If after provider:, get prompts from that provider
|
|
103
|
+
provider_, partial = current.split(":", 1)
|
|
104
|
+
if provider_ == "builtin" or not provider_:
|
|
105
|
+
# Complete from system prompts
|
|
106
|
+
for name in manifest.prompts.system_prompts:
|
|
107
|
+
if not name.startswith(partial):
|
|
108
|
+
continue
|
|
109
|
+
text = f"{provider_}:{name}" if provider_ else name
|
|
110
|
+
yield CompletionItem(text=text, metadata="Builtin prompt", kind="choice")
|