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,561 @@
|
|
|
1
|
+
"""Event stream events.
|
|
2
|
+
|
|
3
|
+
Unified event system using ToolCallProgressEvent for all tool-related progress updates.
|
|
4
|
+
Rich content (terminals, diffs, locations) is conveyed through the items field.
|
|
5
|
+
|
|
6
|
+
## UI Content vs Agent Return Values (ACP Protocol)
|
|
7
|
+
|
|
8
|
+
Tools can control what the UI displays separately from what the agent receives:
|
|
9
|
+
|
|
10
|
+
- Emit `tool_call_progress` with content items for UI display
|
|
11
|
+
- Return raw/structured data for the agent
|
|
12
|
+
- Session layer populates `content` (for UI) and `raw_output` (for agent) separately
|
|
13
|
+
|
|
14
|
+
Use `replace_content=True` for streaming/final content that should replace previous state.
|
|
15
|
+
If no content is emitted, the return value is automatically converted for UI (fallback).
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from dataclasses import dataclass, field
|
|
21
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
22
|
+
|
|
23
|
+
from pydantic_ai import AgentStreamEvent
|
|
24
|
+
|
|
25
|
+
from agentpool.messaging import ChatMessage # noqa: TC001
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from collections.abc import Sequence
|
|
30
|
+
|
|
31
|
+
from agentpool.resource_providers.plan_provider import PlanEntry
|
|
32
|
+
from agentpool.tools.base import ToolKind
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# Lifecycle events (aligned with AG-UI protocol)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass(kw_only=True)
|
|
39
|
+
class RunStartedEvent:
|
|
40
|
+
"""Signals the start of an agent run."""
|
|
41
|
+
|
|
42
|
+
thread_id: str
|
|
43
|
+
"""ID of the conversation thread (conversation_id)."""
|
|
44
|
+
run_id: str
|
|
45
|
+
"""ID of the agent run (unique per request/response cycle)."""
|
|
46
|
+
agent_name: str | None = None
|
|
47
|
+
"""Name of the agent starting the run."""
|
|
48
|
+
event_kind: Literal["run_started"] = "run_started"
|
|
49
|
+
"""Event type identifier."""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@dataclass(kw_only=True)
|
|
53
|
+
class RunErrorEvent:
|
|
54
|
+
"""Signals an error during an agent run."""
|
|
55
|
+
|
|
56
|
+
message: str
|
|
57
|
+
"""Error message."""
|
|
58
|
+
code: str | None = None
|
|
59
|
+
"""Error code."""
|
|
60
|
+
run_id: str | None = None
|
|
61
|
+
"""ID of the agent run that failed."""
|
|
62
|
+
agent_name: str | None = None
|
|
63
|
+
"""Name of the agent that errored."""
|
|
64
|
+
event_kind: Literal["run_error"] = "run_error"
|
|
65
|
+
"""Event type identifier."""
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Unified tool call content models (dataclass versions of ACP schema models)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@dataclass(kw_only=True)
|
|
72
|
+
class TerminalContentItem:
|
|
73
|
+
"""Embed a terminal for live output display."""
|
|
74
|
+
|
|
75
|
+
type: Literal["terminal"] = "terminal"
|
|
76
|
+
"""Content type identifier."""
|
|
77
|
+
terminal_id: str
|
|
78
|
+
"""The ID of the terminal being embedded."""
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@dataclass(kw_only=True)
|
|
82
|
+
class DiffContentItem:
|
|
83
|
+
"""File modification shown as a diff."""
|
|
84
|
+
|
|
85
|
+
type: Literal["diff"] = "diff"
|
|
86
|
+
"""Content type identifier."""
|
|
87
|
+
path: str
|
|
88
|
+
"""The file path being modified."""
|
|
89
|
+
old_text: str | None = None
|
|
90
|
+
"""The original content (None for new files)."""
|
|
91
|
+
new_text: str
|
|
92
|
+
"""The new content after modification."""
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@dataclass(kw_only=True)
|
|
96
|
+
class LocationContentItem:
|
|
97
|
+
"""A file location being accessed or modified.
|
|
98
|
+
|
|
99
|
+
Note: line defaults to 0 (not None) to ensure ACP clients render clickable paths.
|
|
100
|
+
The ACP spec allows None, but some clients (e.g., Claude Code) require the field present.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
type: Literal["location"] = "location"
|
|
104
|
+
"""Content type identifier."""
|
|
105
|
+
path: str
|
|
106
|
+
"""The file path being accessed or modified."""
|
|
107
|
+
line: int = 0
|
|
108
|
+
"""Line number within the file (0 = beginning/unspecified)."""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@dataclass(kw_only=True)
|
|
112
|
+
class TextContentItem:
|
|
113
|
+
"""Simple text content."""
|
|
114
|
+
|
|
115
|
+
type: Literal["text"] = "text"
|
|
116
|
+
"""Content type identifier."""
|
|
117
|
+
text: str
|
|
118
|
+
"""The text content."""
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
@dataclass(kw_only=True)
|
|
122
|
+
class FileContentItem:
|
|
123
|
+
"""File content with metadata for rich display.
|
|
124
|
+
|
|
125
|
+
Carries structured data about file content. Formatting (e.g., Zed-style
|
|
126
|
+
code blocks) happens at the ACP layer based on client capabilities.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
type: Literal["file"] = "file"
|
|
130
|
+
"""Content type identifier."""
|
|
131
|
+
content: str
|
|
132
|
+
"""The file content."""
|
|
133
|
+
path: str
|
|
134
|
+
"""The file path."""
|
|
135
|
+
language: str | None = None
|
|
136
|
+
"""Language for syntax highlighting (inferred from path if not provided)."""
|
|
137
|
+
start_line: int | None = None
|
|
138
|
+
"""Starting line number (1-based) if showing a range."""
|
|
139
|
+
end_line: int | None = None
|
|
140
|
+
"""Ending line number (1-based) if showing a range."""
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# Union type for all tool call content items
|
|
144
|
+
ToolCallContentItem = (
|
|
145
|
+
TerminalContentItem | DiffContentItem | LocationContentItem | TextContentItem | FileContentItem
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@dataclass(kw_only=True)
|
|
150
|
+
class StreamCompleteEvent[TContent]:
|
|
151
|
+
"""Event indicating streaming is complete with final message."""
|
|
152
|
+
|
|
153
|
+
message: ChatMessage[TContent]
|
|
154
|
+
"""The final chat message with all metadata."""
|
|
155
|
+
event_kind: Literal["stream_complete"] = "stream_complete"
|
|
156
|
+
"""Event type identifier."""
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
@dataclass(kw_only=True)
|
|
160
|
+
class ToolCallStartEvent:
|
|
161
|
+
"""Event indicating a tool call has started with rich ACP metadata."""
|
|
162
|
+
|
|
163
|
+
tool_call_id: str
|
|
164
|
+
"""The ID of the tool call."""
|
|
165
|
+
tool_name: str
|
|
166
|
+
"""The name of the tool being called."""
|
|
167
|
+
title: str
|
|
168
|
+
"""Human-readable title describing what the tool is doing."""
|
|
169
|
+
kind: ToolKind = "other"
|
|
170
|
+
"""Tool kind (read, edit, delete, move, search, execute, think, fetch, other)."""
|
|
171
|
+
content: list[ToolCallContentItem] = field(default_factory=list)
|
|
172
|
+
"""Content produced by the tool call."""
|
|
173
|
+
locations: list[LocationContentItem] = field(default_factory=list)
|
|
174
|
+
"""File locations affected by this tool call."""
|
|
175
|
+
raw_input: dict[str, Any] = field(default_factory=dict)
|
|
176
|
+
"""The raw input parameters sent to the tool."""
|
|
177
|
+
|
|
178
|
+
event_kind: Literal["tool_call_start"] = "tool_call_start"
|
|
179
|
+
"""Event type identifier."""
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@dataclass(kw_only=True)
|
|
183
|
+
class ToolCallProgressEvent:
|
|
184
|
+
"""Unified tool call progress event with rich content support.
|
|
185
|
+
|
|
186
|
+
This event carries a title and rich content items (terminals, diffs, locations, text)
|
|
187
|
+
that map directly to ACP tool call notifications.
|
|
188
|
+
|
|
189
|
+
Use the classmethod constructors for common patterns:
|
|
190
|
+
- process_started() - Process start with terminal
|
|
191
|
+
- process_output() - Process output update
|
|
192
|
+
- process_exit() - Process completion
|
|
193
|
+
- process_killed() - Process termination
|
|
194
|
+
- process_released() - Process cleanup
|
|
195
|
+
- file_operation() - File read/write/delete
|
|
196
|
+
- file_edit() - File edit with diff
|
|
197
|
+
"""
|
|
198
|
+
|
|
199
|
+
tool_call_id: str
|
|
200
|
+
"""The ID of the tool call."""
|
|
201
|
+
status: Literal["pending", "in_progress", "completed", "failed"] = "in_progress"
|
|
202
|
+
"""Current execution status."""
|
|
203
|
+
title: str | None = None
|
|
204
|
+
"""Human-readable title describing the operation."""
|
|
205
|
+
|
|
206
|
+
# Rich content items
|
|
207
|
+
items: Sequence[ToolCallContentItem] = field(default_factory=list)
|
|
208
|
+
"""Rich content items (terminals, diffs, locations, text)."""
|
|
209
|
+
replace_content: bool = False
|
|
210
|
+
"""If True, items replace existing content instead of appending."""
|
|
211
|
+
|
|
212
|
+
# Legacy fields for backwards compatibility
|
|
213
|
+
progress: int | None = None
|
|
214
|
+
"""The current progress of the tool call."""
|
|
215
|
+
total: int | None = None
|
|
216
|
+
"""The total progress of the tool call."""
|
|
217
|
+
message: str | None = None
|
|
218
|
+
"""Progress message."""
|
|
219
|
+
tool_name: str | None = None
|
|
220
|
+
"""The name of the tool being called."""
|
|
221
|
+
tool_input: dict[str, Any] | None = None
|
|
222
|
+
"""The input provided to the tool."""
|
|
223
|
+
|
|
224
|
+
event_kind: Literal["tool_call_progress"] = "tool_call_progress"
|
|
225
|
+
"""Event type identifier."""
|
|
226
|
+
|
|
227
|
+
@classmethod
|
|
228
|
+
def process_started(
|
|
229
|
+
cls,
|
|
230
|
+
*,
|
|
231
|
+
tool_call_id: str,
|
|
232
|
+
process_id: str,
|
|
233
|
+
command: str,
|
|
234
|
+
success: bool = True,
|
|
235
|
+
error: str | None = None,
|
|
236
|
+
tool_name: str | None = None,
|
|
237
|
+
) -> ToolCallProgressEvent:
|
|
238
|
+
"""Create event for process start.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
tool_call_id: Tool call identifier
|
|
242
|
+
process_id: Process/terminal identifier
|
|
243
|
+
command: Command being executed
|
|
244
|
+
success: Whether process started successfully
|
|
245
|
+
error: Error message if failed
|
|
246
|
+
tool_name: Optional tool name
|
|
247
|
+
"""
|
|
248
|
+
status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
|
|
249
|
+
title = f"Running: {command}" if success else f"Failed to start: {command}"
|
|
250
|
+
if error:
|
|
251
|
+
title = f"{title} - {error}"
|
|
252
|
+
|
|
253
|
+
items: list[ToolCallContentItem] = [TerminalContentItem(terminal_id=process_id)]
|
|
254
|
+
if error:
|
|
255
|
+
items.append(TextContentItem(text=f"Error: {error}"))
|
|
256
|
+
|
|
257
|
+
return cls(
|
|
258
|
+
tool_call_id=tool_call_id,
|
|
259
|
+
tool_name=tool_name,
|
|
260
|
+
status=status,
|
|
261
|
+
title=title,
|
|
262
|
+
items=items,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
@classmethod
|
|
266
|
+
def process_output(
|
|
267
|
+
cls,
|
|
268
|
+
*,
|
|
269
|
+
tool_call_id: str,
|
|
270
|
+
process_id: str,
|
|
271
|
+
output: str,
|
|
272
|
+
tool_name: str | None = None,
|
|
273
|
+
) -> ToolCallProgressEvent:
|
|
274
|
+
"""Create event for process output.
|
|
275
|
+
|
|
276
|
+
Args:
|
|
277
|
+
tool_call_id: Tool call identifier
|
|
278
|
+
process_id: Process/terminal identifier
|
|
279
|
+
output: Process output
|
|
280
|
+
tool_name: Optional tool name
|
|
281
|
+
"""
|
|
282
|
+
items = [TerminalContentItem(terminal_id=process_id)]
|
|
283
|
+
title = f"Output: {output[:50]}..." if len(output) > 50 else output # noqa: PLR2004
|
|
284
|
+
|
|
285
|
+
return cls(
|
|
286
|
+
tool_call_id=tool_call_id,
|
|
287
|
+
tool_name=tool_name,
|
|
288
|
+
status="in_progress",
|
|
289
|
+
title=title,
|
|
290
|
+
items=items,
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
@classmethod
|
|
294
|
+
def process_exit(
|
|
295
|
+
cls,
|
|
296
|
+
*,
|
|
297
|
+
tool_call_id: str,
|
|
298
|
+
process_id: str,
|
|
299
|
+
exit_code: int,
|
|
300
|
+
final_output: str | None = None,
|
|
301
|
+
tool_name: str | None = None,
|
|
302
|
+
) -> ToolCallProgressEvent:
|
|
303
|
+
"""Create event for process exit.
|
|
304
|
+
|
|
305
|
+
Args:
|
|
306
|
+
tool_call_id: Tool call identifier
|
|
307
|
+
process_id: Process/terminal identifier
|
|
308
|
+
exit_code: Process exit code
|
|
309
|
+
final_output: Final process output
|
|
310
|
+
tool_name: Optional tool name
|
|
311
|
+
"""
|
|
312
|
+
success = exit_code == 0
|
|
313
|
+
status_icon = "✓" if success else "✗"
|
|
314
|
+
title = f"Process exited [{status_icon} exit {exit_code}]"
|
|
315
|
+
|
|
316
|
+
items: list[ToolCallContentItem] = [TerminalContentItem(terminal_id=process_id)]
|
|
317
|
+
if final_output:
|
|
318
|
+
items.append(TextContentItem(text=final_output))
|
|
319
|
+
|
|
320
|
+
return cls(
|
|
321
|
+
tool_call_id=tool_call_id,
|
|
322
|
+
tool_name=tool_name,
|
|
323
|
+
status="in_progress",
|
|
324
|
+
title=title,
|
|
325
|
+
items=items,
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
@classmethod
|
|
329
|
+
def process_killed(
|
|
330
|
+
cls,
|
|
331
|
+
*,
|
|
332
|
+
tool_call_id: str,
|
|
333
|
+
process_id: str,
|
|
334
|
+
success: bool = True,
|
|
335
|
+
error: str | None = None,
|
|
336
|
+
tool_name: str | None = None,
|
|
337
|
+
) -> ToolCallProgressEvent:
|
|
338
|
+
"""Create event for process kill.
|
|
339
|
+
|
|
340
|
+
Args:
|
|
341
|
+
tool_call_id: Tool call identifier
|
|
342
|
+
process_id: Process/terminal identifier
|
|
343
|
+
success: Whether kill succeeded
|
|
344
|
+
error: Error message if failed
|
|
345
|
+
tool_name: Optional tool name
|
|
346
|
+
"""
|
|
347
|
+
title = (
|
|
348
|
+
f"Killed process {process_id}" if success else f"Failed to kill process {process_id}"
|
|
349
|
+
)
|
|
350
|
+
if error:
|
|
351
|
+
title = f"{title} - {error}"
|
|
352
|
+
|
|
353
|
+
status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
|
|
354
|
+
items = [TerminalContentItem(terminal_id=process_id)]
|
|
355
|
+
|
|
356
|
+
return cls(
|
|
357
|
+
tool_call_id=tool_call_id,
|
|
358
|
+
tool_name=tool_name,
|
|
359
|
+
status=status,
|
|
360
|
+
title=title,
|
|
361
|
+
items=items,
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
@classmethod
|
|
365
|
+
def process_released(
|
|
366
|
+
cls,
|
|
367
|
+
*,
|
|
368
|
+
tool_call_id: str,
|
|
369
|
+
process_id: str,
|
|
370
|
+
success: bool = True,
|
|
371
|
+
error: str | None = None,
|
|
372
|
+
tool_name: str | None = None,
|
|
373
|
+
) -> ToolCallProgressEvent:
|
|
374
|
+
"""Create event for process resource release.
|
|
375
|
+
|
|
376
|
+
Args:
|
|
377
|
+
tool_call_id: Tool call identifier
|
|
378
|
+
process_id: Process/terminal identifier
|
|
379
|
+
success: Whether release succeeded
|
|
380
|
+
error: Error message if failed
|
|
381
|
+
tool_name: Optional tool name
|
|
382
|
+
"""
|
|
383
|
+
title = (
|
|
384
|
+
f"Released process {process_id}"
|
|
385
|
+
if success
|
|
386
|
+
else f"Failed to release process {process_id}"
|
|
387
|
+
)
|
|
388
|
+
if error:
|
|
389
|
+
title = f"{title} - {error}"
|
|
390
|
+
|
|
391
|
+
status: Literal["in_progress", "failed"] = "in_progress" if success else "failed"
|
|
392
|
+
items = [TerminalContentItem(terminal_id=process_id)]
|
|
393
|
+
|
|
394
|
+
return cls(
|
|
395
|
+
tool_call_id=tool_call_id,
|
|
396
|
+
tool_name=tool_name,
|
|
397
|
+
status=status,
|
|
398
|
+
title=title,
|
|
399
|
+
items=items,
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
@classmethod
|
|
403
|
+
def file_operation(
|
|
404
|
+
cls,
|
|
405
|
+
*,
|
|
406
|
+
tool_call_id: str,
|
|
407
|
+
operation: Literal["read", "write", "delete", "list", "edit"],
|
|
408
|
+
path: str,
|
|
409
|
+
success: bool,
|
|
410
|
+
error: str | None = None,
|
|
411
|
+
tool_name: str | None = None,
|
|
412
|
+
) -> ToolCallProgressEvent:
|
|
413
|
+
"""Create event for file operation.
|
|
414
|
+
|
|
415
|
+
Args:
|
|
416
|
+
tool_call_id: Tool call identifier
|
|
417
|
+
operation: File operation type
|
|
418
|
+
path: File path
|
|
419
|
+
success: Whether operation succeeded
|
|
420
|
+
error: Error message if failed
|
|
421
|
+
tool_name: Optional tool name
|
|
422
|
+
"""
|
|
423
|
+
status: Literal["completed", "failed"] = "completed" if success else "failed"
|
|
424
|
+
title = f"{operation.capitalize()}: {path}"
|
|
425
|
+
if error:
|
|
426
|
+
title = f"{title} - {error}"
|
|
427
|
+
|
|
428
|
+
items: list[ToolCallContentItem] = [LocationContentItem(path=path)]
|
|
429
|
+
if error:
|
|
430
|
+
items.append(TextContentItem(text=f"Error: {error}"))
|
|
431
|
+
|
|
432
|
+
return cls(
|
|
433
|
+
tool_call_id=tool_call_id,
|
|
434
|
+
tool_name=tool_name,
|
|
435
|
+
status=status,
|
|
436
|
+
title=title,
|
|
437
|
+
items=items,
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
@classmethod
|
|
441
|
+
def file_edit(
|
|
442
|
+
cls,
|
|
443
|
+
*,
|
|
444
|
+
tool_call_id: str,
|
|
445
|
+
path: str,
|
|
446
|
+
old_text: str,
|
|
447
|
+
new_text: str,
|
|
448
|
+
status: Literal["in_progress", "completed", "failed"],
|
|
449
|
+
tool_name: str | None = None,
|
|
450
|
+
) -> ToolCallProgressEvent:
|
|
451
|
+
"""Create event for file edit with diff.
|
|
452
|
+
|
|
453
|
+
Args:
|
|
454
|
+
tool_call_id: Tool call identifier
|
|
455
|
+
path: File path being edited
|
|
456
|
+
old_text: Original file content
|
|
457
|
+
new_text: New file content
|
|
458
|
+
status: Edit status
|
|
459
|
+
tool_name: Optional tool name
|
|
460
|
+
"""
|
|
461
|
+
items: list[ToolCallContentItem] = [
|
|
462
|
+
DiffContentItem(path=path, old_text=old_text, new_text=new_text),
|
|
463
|
+
LocationContentItem(path=path),
|
|
464
|
+
]
|
|
465
|
+
|
|
466
|
+
return cls(
|
|
467
|
+
tool_call_id=tool_call_id,
|
|
468
|
+
tool_name=tool_name,
|
|
469
|
+
status=status,
|
|
470
|
+
title=f"Editing: {path}",
|
|
471
|
+
items=items,
|
|
472
|
+
replace_content=True, # Streaming diffs should replace, not accumulate
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
@dataclass(kw_only=True)
|
|
477
|
+
class CommandOutputEvent:
|
|
478
|
+
"""Event for slash command output."""
|
|
479
|
+
|
|
480
|
+
command: str
|
|
481
|
+
"""The command name that was executed."""
|
|
482
|
+
output: str
|
|
483
|
+
"""The output text from the command."""
|
|
484
|
+
event_kind: Literal["command_output"] = "command_output"
|
|
485
|
+
"""Event type identifier."""
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
@dataclass(kw_only=True)
|
|
489
|
+
class CommandCompleteEvent:
|
|
490
|
+
"""Event indicating slash command execution is complete."""
|
|
491
|
+
|
|
492
|
+
command: str
|
|
493
|
+
"""The command name that was completed."""
|
|
494
|
+
success: bool
|
|
495
|
+
"""Whether the command executed successfully."""
|
|
496
|
+
event_kind: Literal["command_complete"] = "command_complete"
|
|
497
|
+
"""Event type identifier."""
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
@dataclass(kw_only=True)
|
|
501
|
+
class ToolCallCompleteEvent:
|
|
502
|
+
"""Event indicating tool call is complete with both input and output."""
|
|
503
|
+
|
|
504
|
+
tool_name: str
|
|
505
|
+
"""The name of the tool that was called."""
|
|
506
|
+
tool_call_id: str
|
|
507
|
+
"""The ID of the tool call."""
|
|
508
|
+
tool_input: dict[str, Any]
|
|
509
|
+
"""The input provided to the tool."""
|
|
510
|
+
tool_result: Any
|
|
511
|
+
"""The result returned by the tool."""
|
|
512
|
+
agent_name: str
|
|
513
|
+
"""The name of the agent that made the tool call."""
|
|
514
|
+
message_id: str
|
|
515
|
+
"""The message ID associated with this tool call."""
|
|
516
|
+
event_kind: Literal["tool_call_complete"] = "tool_call_complete"
|
|
517
|
+
"""Event type identifier."""
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
@dataclass(kw_only=True)
|
|
521
|
+
class CustomEvent[T]:
|
|
522
|
+
"""Generic custom event that can be emitted during tool execution."""
|
|
523
|
+
|
|
524
|
+
event_data: T
|
|
525
|
+
"""The custom event data of any type."""
|
|
526
|
+
event_type: str = "custom"
|
|
527
|
+
"""Type identifier for the custom event."""
|
|
528
|
+
source: str | None = None
|
|
529
|
+
"""Optional source identifier (tool name, etc.)."""
|
|
530
|
+
event_kind: Literal["custom"] = "custom"
|
|
531
|
+
"""Event type identifier."""
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
@dataclass(kw_only=True)
|
|
535
|
+
class PlanUpdateEvent:
|
|
536
|
+
"""Event indicating plan state has changed."""
|
|
537
|
+
|
|
538
|
+
entries: list[PlanEntry]
|
|
539
|
+
"""Current plan entries."""
|
|
540
|
+
tool_call_id: str | None = None
|
|
541
|
+
"""Tool call ID for ACP notifications."""
|
|
542
|
+
event_kind: Literal["plan_update"] = "plan_update"
|
|
543
|
+
"""Event type identifier."""
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
type RichAgentStreamEvent[OutputDataT] = (
|
|
547
|
+
AgentStreamEvent
|
|
548
|
+
| StreamCompleteEvent[OutputDataT]
|
|
549
|
+
| RunStartedEvent
|
|
550
|
+
| RunErrorEvent
|
|
551
|
+
| ToolCallStartEvent
|
|
552
|
+
| ToolCallProgressEvent
|
|
553
|
+
| ToolCallCompleteEvent
|
|
554
|
+
| PlanUpdateEvent
|
|
555
|
+
| CustomEvent[Any]
|
|
556
|
+
)
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
type SlashedAgentStreamEvent[OutputDataT] = (
|
|
560
|
+
RichAgentStreamEvent[OutputDataT] | CommandOutputEvent | CommandCompleteEvent
|
|
561
|
+
)
|