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,289 @@
|
|
|
1
|
+
"""Static resource provider implementation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any, overload
|
|
6
|
+
|
|
7
|
+
from agentpool.resource_providers import ResourceProvider
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from collections.abc import Callable, Sequence
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
from agentpool import Agent, MessageNode
|
|
15
|
+
from agentpool.common_types import ToolSource, ToolType
|
|
16
|
+
from agentpool.prompts.prompts import BasePrompt
|
|
17
|
+
from agentpool.tools.base import Tool
|
|
18
|
+
from agentpool_config.resources import ResourceInfo
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class StaticResourceProvider(ResourceProvider):
|
|
22
|
+
"""Provider for pre-configured tools, prompts and resources.
|
|
23
|
+
|
|
24
|
+
Allows creating a provider that serves a fixed set of resources
|
|
25
|
+
passed during initialization. Useful for converting static configurations
|
|
26
|
+
to the common ResourceProvider interface.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
name: str = "static",
|
|
32
|
+
tools: Sequence[Tool] | None = None,
|
|
33
|
+
prompts: Sequence[BasePrompt] | None = None,
|
|
34
|
+
resources: Sequence[ResourceInfo] | None = None,
|
|
35
|
+
) -> None:
|
|
36
|
+
"""Initialize provider with static resources.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
name: Name of the provider
|
|
40
|
+
tools: Optional list of tools to serve
|
|
41
|
+
prompts: Optional list of prompts to serve
|
|
42
|
+
resources: Optional list of resources to serve
|
|
43
|
+
"""
|
|
44
|
+
super().__init__(name=name)
|
|
45
|
+
self._tools = list(tools) if tools else []
|
|
46
|
+
self._prompts = list(prompts) if prompts else []
|
|
47
|
+
self._resources = list(resources) if resources else []
|
|
48
|
+
|
|
49
|
+
async def get_tools(self) -> list[Tool]:
|
|
50
|
+
"""Get pre-configured tools."""
|
|
51
|
+
return self._tools
|
|
52
|
+
|
|
53
|
+
async def get_prompts(self) -> list[BasePrompt]:
|
|
54
|
+
"""Get pre-configured prompts."""
|
|
55
|
+
return self._prompts
|
|
56
|
+
|
|
57
|
+
async def get_resources(self) -> list[ResourceInfo]:
|
|
58
|
+
"""Get pre-configured resources."""
|
|
59
|
+
return self._resources
|
|
60
|
+
|
|
61
|
+
def add_tool(self, tool: Tool) -> None:
|
|
62
|
+
"""Add a tool to this provider.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
tool: Tool to add
|
|
66
|
+
"""
|
|
67
|
+
self._tools.append(tool)
|
|
68
|
+
|
|
69
|
+
def remove_tool(self, name: str) -> bool:
|
|
70
|
+
"""Remove a tool by name.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
name: Name of tool to remove
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
True if tool was found and removed, False otherwise
|
|
77
|
+
"""
|
|
78
|
+
for i, tool in enumerate(self._tools):
|
|
79
|
+
if tool.name == name:
|
|
80
|
+
self._tools.pop(i)
|
|
81
|
+
return True
|
|
82
|
+
return False
|
|
83
|
+
|
|
84
|
+
def add_prompt(self, prompt: BasePrompt) -> None:
|
|
85
|
+
"""Add a prompt to this provider.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
prompt: Prompt to add
|
|
89
|
+
"""
|
|
90
|
+
self._prompts.append(prompt)
|
|
91
|
+
|
|
92
|
+
def remove_prompt(self, name: str) -> bool:
|
|
93
|
+
"""Remove a prompt by name.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
name: Name of prompt to remove
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
True if prompt was found and removed, False otherwise
|
|
100
|
+
"""
|
|
101
|
+
for i, prompt in enumerate(self._prompts):
|
|
102
|
+
if prompt.name == name:
|
|
103
|
+
self._prompts.pop(i)
|
|
104
|
+
return True
|
|
105
|
+
return False
|
|
106
|
+
|
|
107
|
+
def add_resource(self, resource: ResourceInfo) -> None:
|
|
108
|
+
"""Add a resource to this provider.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
resource: Resource to add
|
|
112
|
+
"""
|
|
113
|
+
self._resources.append(resource)
|
|
114
|
+
|
|
115
|
+
def remove_resource(self, name: str) -> bool:
|
|
116
|
+
"""Remove a resource by name.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
name: Name of resource to remove
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
True if resource was found and removed, False otherwise
|
|
123
|
+
"""
|
|
124
|
+
for i, resource in enumerate(self._resources):
|
|
125
|
+
if resource.name == name:
|
|
126
|
+
self._resources.pop(i)
|
|
127
|
+
return True
|
|
128
|
+
return False
|
|
129
|
+
|
|
130
|
+
def register_tool(
|
|
131
|
+
self,
|
|
132
|
+
tool: ToolType,
|
|
133
|
+
*,
|
|
134
|
+
name_override: str | None = None,
|
|
135
|
+
description_override: str | None = None,
|
|
136
|
+
enabled: bool = True,
|
|
137
|
+
source: ToolSource = "dynamic",
|
|
138
|
+
requires_confirmation: bool = False,
|
|
139
|
+
metadata: dict[str, str] | None = None,
|
|
140
|
+
) -> Tool:
|
|
141
|
+
"""Register a new tool with custom settings.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
tool: Tool to register (callable, Tool instance, or import path)
|
|
145
|
+
name_override: Optional name override for the tool
|
|
146
|
+
description_override: Optional description override for the tool
|
|
147
|
+
enabled: Whether tool is initially enabled
|
|
148
|
+
source: Tool source (runtime/agent/builtin/dynamic)
|
|
149
|
+
requires_confirmation: Whether tool needs confirmation
|
|
150
|
+
metadata: Additional tool metadata
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
Created Tool instance
|
|
154
|
+
"""
|
|
155
|
+
from agentpool.tools.base import Tool as ToolClass
|
|
156
|
+
|
|
157
|
+
match tool:
|
|
158
|
+
case ToolClass():
|
|
159
|
+
tool.description = description_override or tool.description
|
|
160
|
+
tool.name = name_override or tool.name
|
|
161
|
+
tool.source = source
|
|
162
|
+
tool.metadata = tool.metadata | (metadata or {})
|
|
163
|
+
tool.enabled = enabled
|
|
164
|
+
|
|
165
|
+
case _:
|
|
166
|
+
tool = ToolClass.from_callable(
|
|
167
|
+
tool,
|
|
168
|
+
enabled=enabled,
|
|
169
|
+
source=source,
|
|
170
|
+
name_override=name_override,
|
|
171
|
+
description_override=description_override,
|
|
172
|
+
requires_confirmation=requires_confirmation,
|
|
173
|
+
metadata=metadata or {},
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
self.add_tool(tool)
|
|
177
|
+
return tool
|
|
178
|
+
|
|
179
|
+
def register_worker(
|
|
180
|
+
self,
|
|
181
|
+
worker: MessageNode[Any, Any],
|
|
182
|
+
*,
|
|
183
|
+
name: str | None = None,
|
|
184
|
+
reset_history_on_run: bool = True,
|
|
185
|
+
pass_message_history: bool = False,
|
|
186
|
+
parent: Agent[Any, Any] | None = None,
|
|
187
|
+
) -> Tool:
|
|
188
|
+
"""Register an agent as a worker tool.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
worker: Agent to register as worker
|
|
192
|
+
name: Optional name override for the worker tool
|
|
193
|
+
reset_history_on_run: Whether to clear history before each run
|
|
194
|
+
pass_message_history: Whether to pass parent's message history
|
|
195
|
+
parent: Optional parent agent for history/context sharing
|
|
196
|
+
"""
|
|
197
|
+
from agentpool import Agent, BaseTeam
|
|
198
|
+
from agentpool.agents.acp_agent import ACPAgent
|
|
199
|
+
|
|
200
|
+
match worker:
|
|
201
|
+
case BaseTeam():
|
|
202
|
+
tool = worker.to_tool(name=name)
|
|
203
|
+
case ACPAgent():
|
|
204
|
+
tool = worker.to_tool(name=name, description=worker.description)
|
|
205
|
+
case Agent():
|
|
206
|
+
tool = worker.to_tool(
|
|
207
|
+
parent=parent,
|
|
208
|
+
name=name,
|
|
209
|
+
reset_history_on_run=reset_history_on_run,
|
|
210
|
+
pass_message_history=pass_message_history,
|
|
211
|
+
)
|
|
212
|
+
case _:
|
|
213
|
+
msg = f"Unsupported worker type: {type(worker)}"
|
|
214
|
+
raise ValueError(msg)
|
|
215
|
+
|
|
216
|
+
self.add_tool(tool)
|
|
217
|
+
return tool
|
|
218
|
+
|
|
219
|
+
@overload
|
|
220
|
+
def tool(self, func: Callable[..., Any]) -> Callable[..., Any]: ...
|
|
221
|
+
|
|
222
|
+
@overload
|
|
223
|
+
def tool(
|
|
224
|
+
self,
|
|
225
|
+
*,
|
|
226
|
+
name: str | None = None,
|
|
227
|
+
description: str | None = None,
|
|
228
|
+
enabled: bool = True,
|
|
229
|
+
requires_confirmation: bool = False,
|
|
230
|
+
metadata: dict[str, str] | None = None,
|
|
231
|
+
**kwargs: Any,
|
|
232
|
+
) -> Callable[[Callable[..., Any]], Callable[..., Any]]: ...
|
|
233
|
+
|
|
234
|
+
def tool(
|
|
235
|
+
self,
|
|
236
|
+
func: Callable[..., Any] | None = None,
|
|
237
|
+
*,
|
|
238
|
+
name: str | None = None,
|
|
239
|
+
description: str | None = None,
|
|
240
|
+
enabled: bool = True,
|
|
241
|
+
requires_confirmation: bool = False,
|
|
242
|
+
metadata: dict[str, str] | None = None,
|
|
243
|
+
**kwargs: Any,
|
|
244
|
+
) -> Callable[..., Any] | Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
245
|
+
"""Decorator to register a function as a tool.
|
|
246
|
+
|
|
247
|
+
Can be used with or without parameters:
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# Without parameters
|
|
251
|
+
@provider.tool
|
|
252
|
+
def my_function(x: int) -> str:
|
|
253
|
+
return str(x)
|
|
254
|
+
|
|
255
|
+
# With parameters
|
|
256
|
+
@provider.tool(name="custom_name", description="Custom description")
|
|
257
|
+
def another_function(y: str) -> str:
|
|
258
|
+
return y.upper()
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Args:
|
|
262
|
+
func: Function to register (when used without parentheses)
|
|
263
|
+
name: Override for tool name
|
|
264
|
+
description: Override for tool description
|
|
265
|
+
enabled: Whether tool is initially enabled
|
|
266
|
+
requires_confirmation: Whether execution needs confirmation
|
|
267
|
+
metadata: Additional tool metadata
|
|
268
|
+
**kwargs: Additional arguments passed to Tool.from_callable
|
|
269
|
+
"""
|
|
270
|
+
from agentpool.tools.base import Tool
|
|
271
|
+
|
|
272
|
+
def decorator(f: Callable[..., Any]) -> Callable[..., Any]:
|
|
273
|
+
tool = Tool.from_callable(
|
|
274
|
+
f,
|
|
275
|
+
name_override=name,
|
|
276
|
+
description_override=description,
|
|
277
|
+
enabled=enabled,
|
|
278
|
+
requires_confirmation=requires_confirmation,
|
|
279
|
+
metadata=metadata or {},
|
|
280
|
+
**kwargs,
|
|
281
|
+
)
|
|
282
|
+
self.add_tool(tool)
|
|
283
|
+
return f
|
|
284
|
+
|
|
285
|
+
if func is None:
|
|
286
|
+
# Called with arguments: @provider.tool(...)
|
|
287
|
+
return decorator
|
|
288
|
+
# Called without arguments: @provider.tool
|
|
289
|
+
return decorator(func)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Decorator auto-injection / run package."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from agentpool.running.decorators import with_nodes
|
|
6
|
+
from agentpool.running.discovery import NodeFunction, node_function
|
|
7
|
+
from agentpool.running.executor import execute_single, execute_functions
|
|
8
|
+
from agentpool.running.run_nodes import run_nodes_async, run_nodes
|
|
9
|
+
from agentpool.running.injection import NodeInjectionError
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"NodeFunction",
|
|
13
|
+
"NodeInjectionError",
|
|
14
|
+
"execute_functions",
|
|
15
|
+
"execute_single",
|
|
16
|
+
"node_function",
|
|
17
|
+
"run_nodes",
|
|
18
|
+
"run_nodes_async",
|
|
19
|
+
"with_nodes",
|
|
20
|
+
]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Decorators for agent injection and execution."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from functools import wraps
|
|
6
|
+
import inspect
|
|
7
|
+
from typing import TYPE_CHECKING, overload
|
|
8
|
+
|
|
9
|
+
from agentpool.running.injection import inject_nodes
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from collections.abc import Awaitable, Callable
|
|
14
|
+
|
|
15
|
+
from agentpool import AgentPool
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@overload
|
|
19
|
+
def with_nodes[T, **P](
|
|
20
|
+
pool: AgentPool,
|
|
21
|
+
) -> Callable[[Callable[P, Awaitable[T]]], Callable[P, Awaitable[T]]]: ...
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@overload
|
|
25
|
+
def with_nodes[T, **P](
|
|
26
|
+
pool: AgentPool,
|
|
27
|
+
func: Callable[P, Awaitable[T]],
|
|
28
|
+
) -> Callable[P, Awaitable[T]]: ...
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def with_nodes[T, **P](
|
|
32
|
+
pool: AgentPool,
|
|
33
|
+
func: Callable[P, Awaitable[T]] | None = None,
|
|
34
|
+
) -> Callable[P, Awaitable[T]] | Callable[[Callable[P, Awaitable[T]]], Callable[P, Awaitable[T]]]:
|
|
35
|
+
"""Inject nodes into function parameters."""
|
|
36
|
+
|
|
37
|
+
def decorator(func: Callable[P, Awaitable[T]]) -> Callable[P, Awaitable[T]]:
|
|
38
|
+
@wraps(func)
|
|
39
|
+
async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
|
|
40
|
+
# Convert args to kwargs for injection check
|
|
41
|
+
sig = inspect.signature(func)
|
|
42
|
+
bound_args = sig.bind_partial(*args)
|
|
43
|
+
all_kwargs = {**bound_args.arguments, **kwargs}
|
|
44
|
+
# Get needed nodes
|
|
45
|
+
nodes = inject_nodes(func, pool, all_kwargs)
|
|
46
|
+
# Create kwargs with nodes first, then other args
|
|
47
|
+
final_kwargs = {**nodes, **kwargs}
|
|
48
|
+
# Convert back to args/kwargs using signature
|
|
49
|
+
bound = sig.bind(**final_kwargs)
|
|
50
|
+
bound.apply_defaults()
|
|
51
|
+
# Call with proper args/kwargs
|
|
52
|
+
return await func(*bound.args, **bound.kwargs)
|
|
53
|
+
|
|
54
|
+
return wrapper
|
|
55
|
+
|
|
56
|
+
return decorator(func) if func else decorator
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Function discovery and metadata handling."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
import inspect
|
|
8
|
+
from typing import TYPE_CHECKING, Any
|
|
9
|
+
|
|
10
|
+
from agentpool.log import get_logger
|
|
11
|
+
from agentpool.utils.inspection import get_fn_name
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from collections.abc import Sequence
|
|
16
|
+
|
|
17
|
+
from agentpool.common_types import AnyCallable
|
|
18
|
+
|
|
19
|
+
logger = get_logger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class NodeFunction:
|
|
24
|
+
"""Metadata for a function that uses nodes."""
|
|
25
|
+
|
|
26
|
+
func: AnyCallable
|
|
27
|
+
"""The actual function to execute."""
|
|
28
|
+
|
|
29
|
+
depends_on: list[str] = field(default_factory=list)
|
|
30
|
+
"""Names of functions this one depends on."""
|
|
31
|
+
|
|
32
|
+
deps: Any = None
|
|
33
|
+
"""Node dependencies."""
|
|
34
|
+
|
|
35
|
+
default_inputs: dict[str, Any] = field(default_factory=dict)
|
|
36
|
+
"""Default parameter values."""
|
|
37
|
+
|
|
38
|
+
name: str = field(init=False)
|
|
39
|
+
"""Function name (from function.__name__)."""
|
|
40
|
+
|
|
41
|
+
def __post_init__(self) -> None:
|
|
42
|
+
"""Set name and validate dependencies."""
|
|
43
|
+
self.name = get_fn_name(self.func)
|
|
44
|
+
# Extract default inputs from function signature
|
|
45
|
+
|
|
46
|
+
sig = inspect.signature(self.func)
|
|
47
|
+
self.default_inputs = {
|
|
48
|
+
name: param.default
|
|
49
|
+
for name, param in sig.parameters.items()
|
|
50
|
+
if param.default is not param.empty
|
|
51
|
+
}
|
|
52
|
+
logger.debug("Registered node function", name=self.name, deps=self.depends_on)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def node_function(
|
|
56
|
+
func: Callable[..., Any] | None = None,
|
|
57
|
+
*,
|
|
58
|
+
deps: Any | None = None,
|
|
59
|
+
depends_on: str | Sequence[str | Callable[..., Any]] | Callable[..., Any] | None = None,
|
|
60
|
+
) -> Callable[..., Any]:
|
|
61
|
+
"""Mark a function for automatic node execution.
|
|
62
|
+
|
|
63
|
+
Can be used as simple decorator or with arguments:
|
|
64
|
+
|
|
65
|
+
@node_function
|
|
66
|
+
async def func(): ...
|
|
67
|
+
|
|
68
|
+
@node_function(order=1, depends_on="other_func")
|
|
69
|
+
async def func(): ...
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
func: Function to mark
|
|
73
|
+
deps: Dependencies to inject into all Agent parameters
|
|
74
|
+
depends_on: Names of functions this one depends on
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Decorated function
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
def decorator(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
81
|
+
match depends_on:
|
|
82
|
+
case None:
|
|
83
|
+
depends_on_ = []
|
|
84
|
+
case str():
|
|
85
|
+
depends_on_ = [depends_on]
|
|
86
|
+
case Callable():
|
|
87
|
+
depends_on_ = [get_fn_name(depends_on)]
|
|
88
|
+
case [*items]:
|
|
89
|
+
depends_on_ = [
|
|
90
|
+
i.__name__ if isinstance(i, Callable) else str(i) # type: ignore[union-attr, arg-type]
|
|
91
|
+
for i in items
|
|
92
|
+
]
|
|
93
|
+
case _:
|
|
94
|
+
msg = f"Invalid depends_on: {depends_on}"
|
|
95
|
+
raise ValueError(msg)
|
|
96
|
+
# TODO: we still need to inject the deps in execution part.
|
|
97
|
+
metadata = NodeFunction(func=func, depends_on=depends_on_ or [], deps=deps)
|
|
98
|
+
func._node_function = metadata # type: ignore
|
|
99
|
+
return func
|
|
100
|
+
|
|
101
|
+
return decorator(func) if func is not None else decorator
|