langchain-agentx-python 0.4.0__tar.gz → 0.4.1__tar.gz
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.
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/PKG-INFO +1 -1
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/orchestrator.py +177 -27
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/runner.py +32 -23
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +88 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/adapter.py +7 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/models.py +9 -1
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/tool.py +58 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/PKG-INFO +1 -1
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/pyproject.toml +1 -1
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/LICENSE +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/README.md +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/clear.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/compact.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/context.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/dispatcher.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/registry.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/result.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/model_profiles.yaml +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/model_profiles.yaml.example +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/agent_config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/runtime_settings.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/token_estimator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/blocking_guard.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/compaction_service.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/message_utils.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/pipeline.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/settings.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/collapse.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/noop.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/snip.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/exit_logic.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/reason_codes.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/factory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/graph_edges.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/engine.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/agent.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/command.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/http.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/registry.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/trust.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/injection/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/injection/dedup.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/loop_abort.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/model_node.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/model_nodes.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retrier.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_bridge.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_events.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_policy.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/schema_and_format.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/builder.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/builtin.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/compact.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/sections.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/session_context.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/context.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/context_factory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/async_runner.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/context.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/graph.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/progress.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/transcript.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/resolver.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/sections.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/age.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/extractor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/paths.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/recall.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/scan.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/compact_bridge.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/prompts.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/session_memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/service.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/state.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/events/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/debug_burst.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/logging_config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/logging_contract.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/cli.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/service.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/ui.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/collector.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/event_emitter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/trace_callback.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/builtin.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/manifest.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/registries.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/anthropic.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/env.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/model_profile.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/openai.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/agent_session.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_factory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_recovery.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_session.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/factory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/protocol.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/ids.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/output/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/output/sink.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/errors.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/permission_context.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/pipeline.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/policy.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/registry.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/session_store.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/general.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/registry.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/scope.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/ast_security.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/mode_validation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/observability.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/output_utils.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/path_security.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/result_presenter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/security.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sed_validation.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/semantics.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/session_manager.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/session_runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/shell_locator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/task_runtime.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/batch_tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/diff_generator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/quote_match.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/settings_validator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/staleness.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/validator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/pagination.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/policy.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/hooks.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/hooks.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/attachments.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/preapproved.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/summary.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/events.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/loader.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/backend.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/limits.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/models.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/prompt.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/tool.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/validator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/cwd.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/host_platform.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/path_hierarchy.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/path_user_input.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/rg_executable.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/subprocess_text.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/temp_paths.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/unc_path.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/win_reserved_paths.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/base.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/batch.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/dag.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/types.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/node.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/chaining.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/routing.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/state.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/__init__.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/capabilities.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/config.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/resolver.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/validators.py +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/SOURCES.txt +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/requires.txt +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/top_level.txt +0 -0
- {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/setup.cfg +0 -0
|
@@ -11,6 +11,8 @@ CC 对照:src/tools/AgentTool/AgentTool.tsx call() 中 runAgent / registerAsyn
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
+
import asyncio
|
|
15
|
+
import inspect
|
|
14
16
|
import logging
|
|
15
17
|
import os
|
|
16
18
|
import time
|
|
@@ -51,50 +53,36 @@ def _make_progress_handler(
|
|
|
51
53
|
parent_tool_use_id: str | None = None,
|
|
52
54
|
tool_progress_callback: Any = None,
|
|
53
55
|
):
|
|
54
|
-
"""构造 on_progress
|
|
56
|
+
"""构造 on_progress 回调(事件冒泡 + 可选的 CLI 提示)。
|
|
55
57
|
|
|
56
58
|
Args:
|
|
57
59
|
subagent_type: 子 agent 类型
|
|
58
60
|
started_at: 开始时间戳
|
|
59
61
|
parent_tool_use_id: 父级 tool_use_id,用于事件冒泡(CC 对齐)
|
|
60
|
-
tool_progress_callback:
|
|
61
|
-
"""
|
|
62
|
-
import sys
|
|
63
|
-
hint_shown = False
|
|
62
|
+
tool_progress_callback: 父级的工具进度回调(异步路径用于 adispatch_custom_event)
|
|
64
63
|
|
|
64
|
+
事件流向:
|
|
65
|
+
同步路径: 子 agent 事件 → tool_progress_callback(Channel B)→ CLI 处理
|
|
66
|
+
异步路径: 子 agent 事件 → tool_progress_callback → adispatch_custom_event(Channel A)
|
|
67
|
+
"""
|
|
65
68
|
def _on_progress(event: Any) -> None:
|
|
66
|
-
nonlocal hint_shown
|
|
67
69
|
|
|
68
70
|
# 设置 parent_tool_use_id(如果事件支持)
|
|
69
71
|
if hasattr(event, "parent_tool_use_id") and event.parent_tool_use_id is None:
|
|
70
72
|
object.__setattr__(event, "parent_tool_use_id", parent_tool_use_id)
|
|
71
73
|
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
+
# 事件冒泡:转发到 tool_progress_callback
|
|
75
|
+
# - 同步路径:转发到 CLI 的 tool_progress_callback(Channel B)
|
|
76
|
+
# - 异步路径:转发到 _bubble_progress → adispatch_custom_event(Channel A)
|
|
74
77
|
if tool_progress_callback is not None and callable(tool_progress_callback):
|
|
75
78
|
try:
|
|
76
|
-
tool_progress_callback(event)
|
|
79
|
+
result = tool_progress_callback(event)
|
|
80
|
+
# 支持异步回调
|
|
81
|
+
if inspect.iscoroutine(result):
|
|
82
|
+
asyncio.create_task(result)
|
|
77
83
|
except Exception:
|
|
78
84
|
logger.debug("tool_progress_callback failed", exc_info=True)
|
|
79
85
|
|
|
80
|
-
# CLI 输出
|
|
81
|
-
if not hint_shown and time.monotonic() - started_at > 2.0:
|
|
82
|
-
hint_shown = True
|
|
83
|
-
print(
|
|
84
|
-
f"\r[Agent:{subagent_type}] task is running... (Ctrl+C to interrupt)",
|
|
85
|
-
file=sys.stderr,
|
|
86
|
-
flush=True,
|
|
87
|
-
)
|
|
88
|
-
if getattr(event, "summary", ""):
|
|
89
|
-
print(
|
|
90
|
-
f"\r[{subagent_type}] {event.summary:<80}",
|
|
91
|
-
file=sys.stderr,
|
|
92
|
-
end="",
|
|
93
|
-
flush=True,
|
|
94
|
-
)
|
|
95
|
-
if getattr(event, "type", "") == "completed":
|
|
96
|
-
print("", file=sys.stderr)
|
|
97
|
-
|
|
98
86
|
return _on_progress
|
|
99
87
|
|
|
100
88
|
|
|
@@ -265,6 +253,130 @@ class SubagentOrchestrator:
|
|
|
265
253
|
execution_trace=getattr(result, "execution_trace", None),
|
|
266
254
|
)
|
|
267
255
|
|
|
256
|
+
async def ainvoke_subagent(
|
|
257
|
+
self,
|
|
258
|
+
inp: "AgentToolInput",
|
|
259
|
+
ctx: "ToolExecutionContext",
|
|
260
|
+
subagent_config: "SubagentConfig",
|
|
261
|
+
on_progress: Any | None = None,
|
|
262
|
+
) -> "AgentToolOutput":
|
|
263
|
+
"""异步执行子代理(支持实时事件冒泡)。
|
|
264
|
+
|
|
265
|
+
与 invoke_subagent 的区别:
|
|
266
|
+
- on_progress 回调支持异步(用于 adispatch_custom_event)
|
|
267
|
+
- 不通过 _run_coroutine_sync,直接在异步上下文执行
|
|
268
|
+
- 保留同步 invoke 路径用于兼容(非 ToolNode 场景)
|
|
269
|
+
|
|
270
|
+
CC 对照:AgentTool.tsx call() 中 onProgress 回调
|
|
271
|
+
"""
|
|
272
|
+
from langchain_agentx.tools.agent.models import AgentToolOutput
|
|
273
|
+
from langchain_agentx.loop.subagent.async_runner import run_async_agent_lifecycle
|
|
274
|
+
|
|
275
|
+
log = self._build_logger(ctx)
|
|
276
|
+
child_agent_id = str(uuid.uuid4())
|
|
277
|
+
overrides, runtime_ctx, prepared = self._derive_runtime_context(
|
|
278
|
+
inp=inp,
|
|
279
|
+
ctx=ctx,
|
|
280
|
+
subagent_config=subagent_config,
|
|
281
|
+
child_agent_id=child_agent_id,
|
|
282
|
+
)
|
|
283
|
+
is_async = self._decide_async(inp=inp, ctx=ctx)
|
|
284
|
+
|
|
285
|
+
log.info(
|
|
286
|
+
"agent ainvoke mode=%s subagent_type=%s async=%s",
|
|
287
|
+
self._mode, inp.subagent_type or "general-purpose", is_async,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
parent_registry = getattr(ctx, "tool_registry", None)
|
|
291
|
+
if parent_registry is None or not hasattr(parent_registry, "list"):
|
|
292
|
+
raise RuntimeError(
|
|
293
|
+
"tool_registry missing in ToolExecutionContext; "
|
|
294
|
+
"please construct the parent agent with ToolRuntimeLoader(loader=...)."
|
|
295
|
+
)
|
|
296
|
+
parent_loader = getattr(ctx, "tool_loader", None)
|
|
297
|
+
if parent_loader is None or not hasattr(parent_loader, "fork_with_tools"):
|
|
298
|
+
raise RuntimeError(
|
|
299
|
+
"tool_loader missing in ToolExecutionContext; "
|
|
300
|
+
"please construct the parent agent with ToolRuntimeLoader(loader=...)."
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
runtime_tools = list(parent_registry.list())
|
|
304
|
+
runtime_tools = assemble_tool_pool(runtime_tools, subagent_config, is_async=is_async)
|
|
305
|
+
allowed_tool_names: set[str] = {getattr(t, "name", "") for t in runtime_tools if getattr(t, "name", "")}
|
|
306
|
+
child_loader = parent_loader.fork_with_tools(runtime_tools)
|
|
307
|
+
|
|
308
|
+
system_prompt = enhance_system_prompt_with_env(
|
|
309
|
+
subagent_config.system_prompt_factory(),
|
|
310
|
+
runtime_ctx.cwd,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
effective_cwd = runtime_ctx.cwd or get_cwd()
|
|
314
|
+
parent_notice_cwd = getattr(ctx, "cwd", None) or get_cwd()
|
|
315
|
+
inject_fork_wt = self._mode == "fork" and prepared.worktree_dir is not None
|
|
316
|
+
with run_with_cwd_override(effective_cwd):
|
|
317
|
+
output_dir = self._resolve_background_output_dir(runtime_ctx)
|
|
318
|
+
subagent_ctx = create_subagent_context(
|
|
319
|
+
parent_ctx=ctx,
|
|
320
|
+
task=inp.prompt,
|
|
321
|
+
subagent_type=inp.subagent_type or "general-purpose",
|
|
322
|
+
system_prompt=system_prompt,
|
|
323
|
+
max_steps=runtime_ctx.max_steps,
|
|
324
|
+
agent_depth=runtime_ctx.agent_depth,
|
|
325
|
+
isolation=overrides.isolation,
|
|
326
|
+
fork_from_parent=(self._mode == "fork"),
|
|
327
|
+
is_async=is_async,
|
|
328
|
+
model=runtime_ctx.model,
|
|
329
|
+
path_prep=prepared,
|
|
330
|
+
inject_fork_worktree_notice=inject_fork_wt,
|
|
331
|
+
fork_worktree_parent_cwd=parent_notice_cwd,
|
|
332
|
+
fork_worktree_path=prepared.worktree_dir,
|
|
333
|
+
)
|
|
334
|
+
subagent_ctx.agent_id = child_agent_id
|
|
335
|
+
|
|
336
|
+
parent_tool_use_id = getattr(ctx, "tool_call_id", None)
|
|
337
|
+
|
|
338
|
+
# 构造异步进度回调
|
|
339
|
+
_on_progress = _make_progress_handler(
|
|
340
|
+
inp.subagent_type or "general-purpose",
|
|
341
|
+
time.monotonic(),
|
|
342
|
+
parent_tool_use_id=parent_tool_use_id,
|
|
343
|
+
tool_progress_callback=on_progress, # 使用传入的异步回调
|
|
344
|
+
)
|
|
345
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
346
|
+
|
|
347
|
+
if is_async:
|
|
348
|
+
return await self._launch_async_subagent_with_progress(
|
|
349
|
+
agent_output_cls=AgentToolOutput,
|
|
350
|
+
subagent_ctx=subagent_ctx,
|
|
351
|
+
loader=child_loader,
|
|
352
|
+
model=runtime_ctx.model,
|
|
353
|
+
description=inp.description,
|
|
354
|
+
on_progress=_on_progress,
|
|
355
|
+
parent_ctx=ctx,
|
|
356
|
+
output_dir=output_dir,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
# 前台执行:直接调用 run_subagent(异步版本)
|
|
360
|
+
result = await run_subagent(
|
|
361
|
+
ctx=subagent_ctx,
|
|
362
|
+
loader=child_loader,
|
|
363
|
+
model=runtime_ctx.model,
|
|
364
|
+
on_progress=_on_progress,
|
|
365
|
+
allowed_tool_names=allowed_tool_names,
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
return AgentToolOutput(
|
|
369
|
+
status=result.status,
|
|
370
|
+
content=result.content,
|
|
371
|
+
agent_id=result.agent_id,
|
|
372
|
+
total_steps=result.total_steps,
|
|
373
|
+
terminal_reason=result.terminal_reason or None,
|
|
374
|
+
error_message=result.error_message or None,
|
|
375
|
+
output_file=getattr(result, "output_file", None),
|
|
376
|
+
child_run_id=getattr(result, "child_run_id", None),
|
|
377
|
+
execution_trace=getattr(result, "execution_trace", None),
|
|
378
|
+
)
|
|
379
|
+
|
|
268
380
|
def _build_logger(self, ctx: "ToolExecutionContext") -> ObservabilityLoggerAdapter:
|
|
269
381
|
return ObservabilityLoggerAdapter(
|
|
270
382
|
logger,
|
|
@@ -359,6 +471,44 @@ class SubagentOrchestrator:
|
|
|
359
471
|
output_file=handle.output_file,
|
|
360
472
|
)
|
|
361
473
|
|
|
474
|
+
async def _launch_async_subagent_with_progress(
|
|
475
|
+
self,
|
|
476
|
+
*,
|
|
477
|
+
agent_output_cls: type[Any],
|
|
478
|
+
subagent_ctx: Any,
|
|
479
|
+
loader: Any,
|
|
480
|
+
model: Any,
|
|
481
|
+
description: str | None,
|
|
482
|
+
on_progress: Any,
|
|
483
|
+
parent_ctx: "ToolExecutionContext",
|
|
484
|
+
output_dir: str,
|
|
485
|
+
) -> Any:
|
|
486
|
+
"""异步启动子 agent(支持实时进度回调)。
|
|
487
|
+
|
|
488
|
+
与 _launch_async_subagent 的区别:
|
|
489
|
+
- 使用 register_background_agent 但不等待完成
|
|
490
|
+
- 返回 async_launched 状态
|
|
491
|
+
- 进度通过 on_progress 回调实时上报
|
|
492
|
+
"""
|
|
493
|
+
handle = self._register_background_agent(
|
|
494
|
+
subagent_ctx=subagent_ctx,
|
|
495
|
+
loader=loader,
|
|
496
|
+
model=model,
|
|
497
|
+
output_dir=output_dir,
|
|
498
|
+
description=description,
|
|
499
|
+
on_progress=on_progress,
|
|
500
|
+
parent_ctx=parent_ctx,
|
|
501
|
+
)
|
|
502
|
+
return agent_output_cls(
|
|
503
|
+
status="async_launched",
|
|
504
|
+
content="",
|
|
505
|
+
agent_id=handle.agent_id,
|
|
506
|
+
total_steps=0,
|
|
507
|
+
terminal_reason="background",
|
|
508
|
+
task_id=handle.task_id,
|
|
509
|
+
output_file=handle.output_file,
|
|
510
|
+
)
|
|
511
|
+
|
|
362
512
|
def _run_with_background_signal(
|
|
363
513
|
self,
|
|
364
514
|
*,
|
|
@@ -24,6 +24,7 @@ CC 对照:runAgent.ts runAgent();onProgress 回调逻辑
|
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
26
26
|
import asyncio
|
|
27
|
+
import inspect
|
|
27
28
|
import logging
|
|
28
29
|
import threading
|
|
29
30
|
from concurrent.futures import Future
|
|
@@ -190,19 +191,27 @@ def _build_graph_input_messages(initial_messages: list[Any]) -> list[Any]:
|
|
|
190
191
|
]
|
|
191
192
|
|
|
192
193
|
|
|
193
|
-
def _emit_progress(
|
|
194
|
-
on_progress:
|
|
194
|
+
async def _emit_progress(
|
|
195
|
+
on_progress: Any,
|
|
195
196
|
event: SubagentProgressEvent,
|
|
196
197
|
) -> None:
|
|
198
|
+
"""发射进度事件(支持异步回调)。
|
|
199
|
+
|
|
200
|
+
如果 on_progress 是异步函数,则使用 await 调用;
|
|
201
|
+
否则使用同步调用。这允许子 Agent 进度事件通过
|
|
202
|
+
adispatch_custom_event 实时冒泡到主 graph。
|
|
203
|
+
"""
|
|
197
204
|
if on_progress:
|
|
198
|
-
on_progress(event)
|
|
205
|
+
result = on_progress(event)
|
|
206
|
+
if inspect.iscoroutine(result):
|
|
207
|
+
await result
|
|
199
208
|
|
|
200
209
|
|
|
201
|
-
def _handle_tool_start_event(
|
|
210
|
+
async def _handle_tool_start_event(
|
|
202
211
|
*,
|
|
203
212
|
ctx: SubagentContext,
|
|
204
213
|
event: dict[str, Any],
|
|
205
|
-
on_progress:
|
|
214
|
+
on_progress: Any,
|
|
206
215
|
current_step: int,
|
|
207
216
|
trace: SubagentExecutionTrace | None = None,
|
|
208
217
|
) -> tuple[int, str]:
|
|
@@ -225,7 +234,7 @@ def _handle_tool_start_event(
|
|
|
225
234
|
if trace:
|
|
226
235
|
trace.add_tool_call(tool_call)
|
|
227
236
|
|
|
228
|
-
_emit_progress(
|
|
237
|
+
await _emit_progress(
|
|
229
238
|
on_progress,
|
|
230
239
|
SubagentProgressEvent(
|
|
231
240
|
type="tool_use",
|
|
@@ -272,13 +281,13 @@ def _is_tool_error(output: Any) -> bool:
|
|
|
272
281
|
return False
|
|
273
282
|
|
|
274
283
|
|
|
275
|
-
def _handle_tool_end_event(
|
|
284
|
+
async def _handle_tool_end_event(
|
|
276
285
|
*,
|
|
277
286
|
ctx: SubagentContext,
|
|
278
287
|
event: dict[str, Any],
|
|
279
288
|
data: dict[str, Any],
|
|
280
289
|
transcript: SubagentTranscriptManager,
|
|
281
|
-
on_progress:
|
|
290
|
+
on_progress: Any,
|
|
282
291
|
step: int,
|
|
283
292
|
trace: SubagentExecutionTrace | None = None,
|
|
284
293
|
) -> None:
|
|
@@ -306,7 +315,7 @@ def _handle_tool_end_event(
|
|
|
306
315
|
|
|
307
316
|
msg_dict = {"role": "tool", "tool_name": tool_name, "content": transcript_text}
|
|
308
317
|
transcript.append(msg_dict)
|
|
309
|
-
_emit_progress(
|
|
318
|
+
await _emit_progress(
|
|
310
319
|
on_progress,
|
|
311
320
|
SubagentProgressEvent(
|
|
312
321
|
type="tool_result",
|
|
@@ -319,11 +328,11 @@ def _handle_tool_end_event(
|
|
|
319
328
|
)
|
|
320
329
|
|
|
321
330
|
|
|
322
|
-
def _handle_chat_model_end_event(
|
|
331
|
+
async def _handle_chat_model_end_event(
|
|
323
332
|
*,
|
|
324
333
|
ctx: SubagentContext,
|
|
325
334
|
data: dict[str, Any],
|
|
326
|
-
on_progress:
|
|
335
|
+
on_progress: Any,
|
|
327
336
|
collected_assistant_messages: list[Any],
|
|
328
337
|
total_steps: int,
|
|
329
338
|
) -> int:
|
|
@@ -333,7 +342,7 @@ def _handle_chat_model_end_event(
|
|
|
333
342
|
has_tool_calls = bool(output is not None and getattr(output, "tool_calls", None))
|
|
334
343
|
if not has_tool_calls:
|
|
335
344
|
total_steps += 1
|
|
336
|
-
_emit_progress(
|
|
345
|
+
await _emit_progress(
|
|
337
346
|
on_progress,
|
|
338
347
|
SubagentProgressEvent(
|
|
339
348
|
type="model_step",
|
|
@@ -370,7 +379,7 @@ async def _collect_subagent_events(
|
|
|
370
379
|
graph_input: dict[str, Any],
|
|
371
380
|
run_tags: list[str],
|
|
372
381
|
transcript: SubagentTranscriptManager,
|
|
373
|
-
on_progress:
|
|
382
|
+
on_progress: Any,
|
|
374
383
|
trace: SubagentExecutionTrace,
|
|
375
384
|
) -> _EventCollectionResult:
|
|
376
385
|
collected_assistant_messages: list[Any] = []
|
|
@@ -389,7 +398,7 @@ async def _collect_subagent_events(
|
|
|
389
398
|
event_name = event.get("event", "")
|
|
390
399
|
data = event.get("data") or {}
|
|
391
400
|
if event_name == "on_tool_start":
|
|
392
|
-
tool_step, last_tool_name = _handle_tool_start_event(
|
|
401
|
+
tool_step, last_tool_name = await _handle_tool_start_event(
|
|
393
402
|
ctx=ctx,
|
|
394
403
|
event=event,
|
|
395
404
|
on_progress=on_progress,
|
|
@@ -397,7 +406,7 @@ async def _collect_subagent_events(
|
|
|
397
406
|
trace=trace,
|
|
398
407
|
)
|
|
399
408
|
elif event_name == "on_tool_end":
|
|
400
|
-
_handle_tool_end_event(
|
|
409
|
+
await _handle_tool_end_event(
|
|
401
410
|
ctx=ctx,
|
|
402
411
|
event=event,
|
|
403
412
|
data=data,
|
|
@@ -407,7 +416,7 @@ async def _collect_subagent_events(
|
|
|
407
416
|
trace=trace,
|
|
408
417
|
)
|
|
409
418
|
elif event_name == "on_chat_model_end":
|
|
410
|
-
total_steps = _handle_chat_model_end_event(
|
|
419
|
+
total_steps = await _handle_chat_model_end_event(
|
|
411
420
|
ctx=ctx,
|
|
412
421
|
data=data,
|
|
413
422
|
on_progress=on_progress,
|
|
@@ -440,13 +449,13 @@ async def _collect_subagent_events(
|
|
|
440
449
|
)
|
|
441
450
|
|
|
442
451
|
|
|
443
|
-
def _build_subagent_result(
|
|
452
|
+
async def _build_subagent_result(
|
|
444
453
|
*,
|
|
445
454
|
ctx: SubagentContext,
|
|
446
455
|
collected: _EventCollectionResult,
|
|
447
456
|
transcript: SubagentTranscriptManager,
|
|
448
457
|
allowed_tool_names: set[str] | None,
|
|
449
|
-
on_progress:
|
|
458
|
+
on_progress: Any,
|
|
450
459
|
trace: SubagentExecutionTrace,
|
|
451
460
|
) -> SubagentResult:
|
|
452
461
|
content = _extract_final_content(collected.collected_assistant_messages, allowed_tool_names)
|
|
@@ -463,7 +472,7 @@ def _build_subagent_result(
|
|
|
463
472
|
)
|
|
464
473
|
# 更新 trace 的 terminal_reason
|
|
465
474
|
trace.terminal_reason = collected.terminal_reason
|
|
466
|
-
_emit_progress(
|
|
475
|
+
await _emit_progress(
|
|
467
476
|
on_progress,
|
|
468
477
|
SubagentProgressEvent(
|
|
469
478
|
type="completed",
|
|
@@ -490,7 +499,7 @@ async def run_subagent(
|
|
|
490
499
|
ctx: SubagentContext,
|
|
491
500
|
loader: Any,
|
|
492
501
|
model: Any | None = None,
|
|
493
|
-
on_progress:
|
|
502
|
+
on_progress: Any = None,
|
|
494
503
|
allowed_tool_names: set[str] | None = None,
|
|
495
504
|
) -> SubagentResult:
|
|
496
505
|
"""运行子 Agent(plain/fork 同步路径)。
|
|
@@ -499,7 +508,7 @@ async def run_subagent(
|
|
|
499
508
|
ctx: 子 Agent 执行上下文
|
|
500
509
|
loader: 子会话 ToolRuntimeLoader
|
|
501
510
|
model: 语言模型(str 或 BaseChatModel),None 时继承 ctx.model
|
|
502
|
-
on_progress: 进度回调(Channel B
|
|
511
|
+
on_progress: 进度回调(Channel B),每个工具调用步骤触发(支持异步)
|
|
503
512
|
allowed_tool_names: 工具白名单,用于识别 XML 退化格式(如 <Read>...</Read>)
|
|
504
513
|
|
|
505
514
|
Returns:
|
|
@@ -536,7 +545,7 @@ async def run_subagent(
|
|
|
536
545
|
on_progress=on_progress,
|
|
537
546
|
trace=trace,
|
|
538
547
|
)
|
|
539
|
-
return _build_subagent_result(
|
|
548
|
+
return await _build_subagent_result(
|
|
540
549
|
ctx=ctx,
|
|
541
550
|
collected=collected,
|
|
542
551
|
transcript=transcript,
|
|
@@ -554,7 +563,7 @@ async def run_subagent_with_background_signal(
|
|
|
554
563
|
ctx: SubagentContext,
|
|
555
564
|
loader: Any,
|
|
556
565
|
model: Any | None = None,
|
|
557
|
-
on_progress:
|
|
566
|
+
on_progress: Any = None,
|
|
558
567
|
background_signal: asyncio.Event | None = None,
|
|
559
568
|
on_background_request: Callable[[SubagentContext], str] | None = None,
|
|
560
569
|
allowed_tool_names: set[str] | None = None,
|
|
@@ -84,6 +84,10 @@ class LangchainAgentEventType(Enum):
|
|
|
84
84
|
# 子 Agent
|
|
85
85
|
SUBAGENT_START = "subagent-start"
|
|
86
86
|
SUBAGENT_END = "subagent-end"
|
|
87
|
+
# 子 Agent 内部工具调用事件(通过 adispatch_custom_event 冒泡)
|
|
88
|
+
SUBAGENT_TOOL_CALL = "subagent-tool-call"
|
|
89
|
+
SUBAGENT_TOOL_RESULT = "subagent-tool-result"
|
|
90
|
+
SUBAGENT_MODEL_STEP = "subagent-model-step"
|
|
87
91
|
|
|
88
92
|
# 错误
|
|
89
93
|
ERROR = "error"
|
|
@@ -229,6 +233,11 @@ class LangGraphToLangchainAgentEventAdapter:
|
|
|
229
233
|
async for oc_event in self._handle_error(name, data):
|
|
230
234
|
yield oc_event
|
|
231
235
|
|
|
236
|
+
elif event_type == "on_custom_event":
|
|
237
|
+
async for oc_event in self._handle_custom_event(event):
|
|
238
|
+
if oc_event is not None:
|
|
239
|
+
yield oc_event
|
|
240
|
+
|
|
232
241
|
def _event(
|
|
233
242
|
self,
|
|
234
243
|
*,
|
|
@@ -253,6 +262,10 @@ class LangGraphToLangchainAgentEventAdapter:
|
|
|
253
262
|
def emit_subagent_event(self, progress_event: Any) -> LangchainAgentEvent | None:
|
|
254
263
|
"""将子 agent 的进度事件转换为 LangchainAgentEvent(事件冒泡)。
|
|
255
264
|
|
|
265
|
+
.. deprecated::
|
|
266
|
+
推荐使用 adispatch_custom_event + _handle_custom_event 路径(Channel A)。
|
|
267
|
+
此方法保留用于兼容旧代码和测试。
|
|
268
|
+
|
|
256
269
|
用于实现 CC 风格的子 agent 内部工具调用事件转发。
|
|
257
270
|
当子 agent 调用工具时,其事件通过 tool_progress_callback 冒泡到父级,
|
|
258
271
|
父级调用此方法将事件转换为标准格式。
|
|
@@ -1045,6 +1058,81 @@ class LangGraphToLangchainAgentEventAdapter:
|
|
|
1045
1058
|
step_index=self.state.step_index,
|
|
1046
1059
|
)
|
|
1047
1060
|
|
|
1061
|
+
async def _handle_custom_event(
|
|
1062
|
+
self, event: Dict[str, Any]
|
|
1063
|
+
) -> AsyncGenerator[LangchainAgentEvent, None]:
|
|
1064
|
+
"""处理 on_custom_event(子 Agent 事件冒泡)。
|
|
1065
|
+
|
|
1066
|
+
当子 Agent 通过 adispatch_custom_event 发射进度事件时,
|
|
1067
|
+
这些事件会通过主 graph 的 astream_events 流冒泡上来。
|
|
1068
|
+
|
|
1069
|
+
事件格式:
|
|
1070
|
+
{
|
|
1071
|
+
"event": "on_custom_event",
|
|
1072
|
+
"name": "subagent_progress",
|
|
1073
|
+
"data": {
|
|
1074
|
+
"type": "tool_use" | "tool_result" | "model_step" | "completed",
|
|
1075
|
+
"subagent_type": str,
|
|
1076
|
+
"agent_id": str,
|
|
1077
|
+
"tool_name": str,
|
|
1078
|
+
"summary": str,
|
|
1079
|
+
"step": int,
|
|
1080
|
+
"parent_tool_use_id": str,
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
"""
|
|
1084
|
+
if not self.enable_subagent_events:
|
|
1085
|
+
return
|
|
1086
|
+
|
|
1087
|
+
event_name = event.get("name", "")
|
|
1088
|
+
if event_name != "subagent_progress":
|
|
1089
|
+
return
|
|
1090
|
+
|
|
1091
|
+
data = event.get("data", {})
|
|
1092
|
+
if not isinstance(data, dict):
|
|
1093
|
+
return
|
|
1094
|
+
|
|
1095
|
+
event_type = data.get("type", "")
|
|
1096
|
+
parent_tool_use_id = data.get("parent_tool_use_id")
|
|
1097
|
+
|
|
1098
|
+
# 映射到 SDK 事件类型
|
|
1099
|
+
type_mapping = {
|
|
1100
|
+
"tool_use": LangchainAgentEventType.SUBAGENT_TOOL_CALL,
|
|
1101
|
+
"tool_result": LangchainAgentEventType.SUBAGENT_TOOL_RESULT,
|
|
1102
|
+
"model_step": LangchainAgentEventType.SUBAGENT_MODEL_STEP,
|
|
1103
|
+
"completed": None, # 不发事件,由 SUBAGENT_END 表示
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
target_type = type_mapping.get(event_type)
|
|
1107
|
+
if target_type is None:
|
|
1108
|
+
return
|
|
1109
|
+
|
|
1110
|
+
event_data: Dict[str, Any] = {
|
|
1111
|
+
"subagent_type": data.get("subagent_type", ""),
|
|
1112
|
+
"agent_id": data.get("agent_id", ""),
|
|
1113
|
+
"summary": data.get("summary", "")[:200],
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if parent_tool_use_id:
|
|
1117
|
+
event_data["parent_tool_use_id"] = parent_tool_use_id
|
|
1118
|
+
|
|
1119
|
+
if event_type == "tool_use":
|
|
1120
|
+
event_data["tool_name"] = data.get("tool_name", "")
|
|
1121
|
+
event_data["status"] = "running"
|
|
1122
|
+
event_data["step"] = data.get("step", 0)
|
|
1123
|
+
elif event_type == "tool_result":
|
|
1124
|
+
event_data["tool_name"] = data.get("tool_name", "")
|
|
1125
|
+
event_data["summary"] = data.get("summary", "")[:200]
|
|
1126
|
+
elif event_type == "model_step":
|
|
1127
|
+
event_data["text"] = data.get("summary", "")
|
|
1128
|
+
|
|
1129
|
+
yield self._event(
|
|
1130
|
+
event_type=target_type,
|
|
1131
|
+
data=event_data,
|
|
1132
|
+
step_index=self.state.step_index,
|
|
1133
|
+
tool_name=data.get("tool_name"),
|
|
1134
|
+
)
|
|
1135
|
+
|
|
1048
1136
|
|
|
1049
1137
|
__all__ = [
|
|
1050
1138
|
"LangchainAgentEventType",
|
|
@@ -206,6 +206,12 @@ class LangChainAdapter:
|
|
|
206
206
|
if tool_progress_callback is None and loop_config is not None:
|
|
207
207
|
tool_progress_callback = getattr(loop_config, "tool_progress_callback", None)
|
|
208
208
|
|
|
209
|
+
# 保留原始 RunnableConfig 用于 adispatch_custom_event(子 Agent 事件冒泡)
|
|
210
|
+
# 只在 config 非空时传递,避免工具层直接访问 LangGraph 内部字段
|
|
211
|
+
runnable_config_to_pass: Any | None = None
|
|
212
|
+
if config is not None and not isinstance(config, str):
|
|
213
|
+
runnable_config_to_pass = config
|
|
214
|
+
|
|
209
215
|
return ToolExecutionContext(
|
|
210
216
|
tool_name=tool_name,
|
|
211
217
|
# 回退顺序:显式 tool_call_id -> config.tool_call_id -> input.tool_call_id -> input.id -> run_id
|
|
@@ -240,6 +246,7 @@ class LangChainAdapter:
|
|
|
240
246
|
capabilities=capabilities,
|
|
241
247
|
network_access_allowed=network_access_allowed,
|
|
242
248
|
tool_progress_callback=tool_progress_callback,
|
|
249
|
+
runnable_config=runnable_config_to_pass,
|
|
243
250
|
)
|
|
244
251
|
|
|
245
252
|
def build_structured_tool(
|
|
@@ -120,8 +120,16 @@ class ToolExecutionContext:
|
|
|
120
120
|
tool_progress_callback: Any | None = None
|
|
121
121
|
"""
|
|
122
122
|
可选;``RunnableConfig.configurable["tool_progress_callback"]`` 或 AgentLoopConfig 注入。
|
|
123
|
-
签名为 ``(event: ProgressEvent) -> None``(具体类型由工具包定义,避免 runtime 循环依赖)。
|
|
123
|
+
签名为 ``(event: ProgressEvent) -> None | Coroutine``(具体类型由工具包定义,避免 runtime 循环依赖)。
|
|
124
|
+
|
|
125
|
+
用于:
|
|
126
|
+
- 同步路径:子 agent 事件通过此回调转发到 CLI(Channel B)
|
|
127
|
+
- 异步路径:子 agent 事件通过此回调 → adispatch_custom_event(Channel A)
|
|
128
|
+
"""
|
|
129
|
+
runnable_config: Any | None = None
|
|
124
130
|
"""
|
|
131
|
+
可选;LangGraph RunnableConfig 原始对象,保留用于 adispatch_custom_event 等需要
|
|
132
|
+
parent_run_id 上下文的场景(子 Agent 事件冒泡)。工具层不应直接访问其内部字段。"""
|
|
125
133
|
|
|
126
134
|
|
|
127
135
|
# ---------------------------------------------------------------------------
|
{langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/tool.py
RENAMED
|
@@ -12,9 +12,12 @@ CC 对照:src/tools/AgentTool/AgentTool.tsx call() 方法
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
+
import asyncio
|
|
15
16
|
import logging
|
|
16
17
|
from typing import Any, Literal
|
|
17
18
|
|
|
19
|
+
from langchain_core.callbacks import adispatch_custom_event
|
|
20
|
+
|
|
18
21
|
from langchain_agentx.loop.subagent.orchestrator import SubagentOrchestrator
|
|
19
22
|
from langchain_agentx.tool_runtime.base import RuntimeTool
|
|
20
23
|
from langchain_agentx.tool_runtime.models import (
|
|
@@ -187,6 +190,61 @@ class AgentRuntimeTool(RuntimeTool):
|
|
|
187
190
|
subagent_config = self._registry.get(subagent_type)
|
|
188
191
|
return self._orchestrator.invoke_subagent(inp=inp, ctx=ctx, subagent_config=subagent_config)
|
|
189
192
|
|
|
193
|
+
async def ainvoke(self, data: dict[str, Any], ctx: ToolExecutionContext) -> AgentToolOutput:
|
|
194
|
+
"""异步执行子 Agent(支持实时事件冒泡)。
|
|
195
|
+
|
|
196
|
+
与 invoke 的区别:
|
|
197
|
+
- 通过 adispatch_custom_event 将子 Agent 进度事件实时冒泡到主 graph
|
|
198
|
+
- on_progress 回调改为异步,支持实时事件发射
|
|
199
|
+
- 保留同步 invoke 路径用于兼容(ToolNode 默认使用 arun)
|
|
200
|
+
|
|
201
|
+
CC 对照:AgentTool.tsx call() 中 onProgress → createProgressMessage → stream.enqueue
|
|
202
|
+
"""
|
|
203
|
+
cwd_vr = apply_agent_cwd_to_data(data, ctx)
|
|
204
|
+
if cwd_vr is not None:
|
|
205
|
+
return AgentToolOutput(
|
|
206
|
+
status="error",
|
|
207
|
+
content="",
|
|
208
|
+
agent_id="",
|
|
209
|
+
total_steps=0,
|
|
210
|
+
error_message=cwd_vr.message or "cwd 校验失败",
|
|
211
|
+
)
|
|
212
|
+
inp = AgentToolInput.model_validate(data)
|
|
213
|
+
subagent_type = inp.subagent_type or "general-purpose"
|
|
214
|
+
subagent_config = self._registry.get(subagent_type)
|
|
215
|
+
|
|
216
|
+
# 获取 parent_config 用于 adispatch_custom_event(需要 parent_run_id)
|
|
217
|
+
parent_config = getattr(ctx, "runnable_config", None)
|
|
218
|
+
parent_tool_use_id = getattr(ctx, "tool_call_id", None)
|
|
219
|
+
|
|
220
|
+
# 构造异步进度回调:实时冒泡子 Agent 事件到主 graph
|
|
221
|
+
async def _bubble_progress(event: Any) -> None:
|
|
222
|
+
"""实时冒泡子 Agent 进度事件到主 graph 的 astream_events 流。"""
|
|
223
|
+
if parent_config is not None:
|
|
224
|
+
try:
|
|
225
|
+
await adispatch_custom_event(
|
|
226
|
+
name="subagent_progress",
|
|
227
|
+
data={
|
|
228
|
+
"type": getattr(event, "type", ""),
|
|
229
|
+
"subagent_type": getattr(event, "subagent_type", ""),
|
|
230
|
+
"agent_id": getattr(event, "agent_id", ""),
|
|
231
|
+
"tool_name": getattr(event, "tool_name", ""),
|
|
232
|
+
"summary": getattr(event, "summary", "")[:200],
|
|
233
|
+
"step": getattr(event, "step", 0),
|
|
234
|
+
"parent_tool_use_id": parent_tool_use_id,
|
|
235
|
+
},
|
|
236
|
+
config=parent_config,
|
|
237
|
+
)
|
|
238
|
+
except Exception:
|
|
239
|
+
logger.debug("adispatch_custom_event failed", exc_info=True)
|
|
240
|
+
|
|
241
|
+
return await self._orchestrator.ainvoke_subagent(
|
|
242
|
+
inp=inp,
|
|
243
|
+
ctx=ctx,
|
|
244
|
+
subagent_config=subagent_config,
|
|
245
|
+
on_progress=_bubble_progress,
|
|
246
|
+
)
|
|
247
|
+
|
|
190
248
|
def present(
|
|
191
249
|
self,
|
|
192
250
|
data: dict[str, Any],
|