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.
Files changed (457) hide show
  1. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/PKG-INFO +1 -1
  2. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/orchestrator.py +177 -27
  3. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/runner.py +32 -23
  4. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +88 -0
  5. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/adapter.py +7 -0
  6. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/models.py +9 -1
  7. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/tool.py +58 -0
  8. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/PKG-INFO +1 -1
  9. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/pyproject.toml +1 -1
  10. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/LICENSE +0 -0
  11. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/README.md +0 -0
  12. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/__init__.py +0 -0
  13. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/__init__.py +0 -0
  14. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/__init__.py +0 -0
  15. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/clear.py +0 -0
  16. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/compact.py +0 -0
  17. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/memory.py +0 -0
  18. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  19. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/context.py +0 -0
  20. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/dispatcher.py +0 -0
  21. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/registry.py +0 -0
  22. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/result.py +0 -0
  23. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/command/types.py +0 -0
  24. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/__init__.py +0 -0
  25. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/model_profiles.yaml +0 -0
  26. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/config/model_profiles.yaml.example +0 -0
  27. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/__init__.py +0 -0
  28. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/__init__.py +0 -0
  29. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/agent_config.py +0 -0
  30. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  31. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  32. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  33. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/config/token_estimator.py +0 -0
  34. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/__init__.py +0 -0
  35. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  36. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/compaction_service.py +0 -0
  37. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/message_utils.py +0 -0
  38. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/pipeline.py +0 -0
  39. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/settings.py +0 -0
  40. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  41. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  42. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/base.py +0 -0
  43. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  44. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  45. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/noop.py +0 -0
  46. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/snip.py +0 -0
  47. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  48. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/context/types.py +0 -0
  49. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/__init__.py +0 -0
  50. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/exit_logic.py +0 -0
  51. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  52. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/__init__.py +0 -0
  53. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  54. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/factory.py +0 -0
  55. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/graph/graph_edges.py +0 -0
  56. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/__init__.py +0 -0
  57. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  58. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/config.py +0 -0
  59. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/engine.py +0 -0
  60. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  61. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  62. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/command.py +0 -0
  63. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/http.py +0 -0
  64. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  65. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
  66. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/registry.py +0 -0
  67. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/trust.py +0 -0
  68. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/hook/types.py +0 -0
  69. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/injection/__init__.py +0 -0
  70. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/injection/dedup.py +0 -0
  71. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/loop_abort.py +0 -0
  72. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/__init__.py +0 -0
  73. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/model_node.py +0 -0
  74. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/model_nodes.py +0 -0
  75. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  76. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retrier.py +0 -0
  77. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_bridge.py +0 -0
  78. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_events.py +0 -0
  79. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/retry_policy.py +0 -0
  80. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  81. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  82. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  83. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  84. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/__init__.py +0 -0
  85. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/builder.py +0 -0
  86. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/builtin.py +0 -0
  87. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/compact.py +0 -0
  88. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/sections.py +0 -0
  89. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/prompt/session_context.py +0 -0
  90. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/__init__.py +0 -0
  91. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/context.py +0 -0
  92. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  93. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  94. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/__init__.py +0 -0
  95. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  96. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/context.py +0 -0
  97. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  98. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/graph.py +0 -0
  99. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/progress.py +0 -0
  100. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/prompt.py +0 -0
  101. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/loop/subagent/transcript.py +0 -0
  102. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/__init__.py +0 -0
  103. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/__init__.py +0 -0
  104. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/loader.py +0 -0
  105. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/resolver.py +0 -0
  106. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/runtime.py +0 -0
  107. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/sections.py +0 -0
  108. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/instruction/types.py +0 -0
  109. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/__init__.py +0 -0
  110. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/age.py +0 -0
  111. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
  112. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/extractor.py +0 -0
  113. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/loader.py +0 -0
  114. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/paths.py +0 -0
  115. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/recall.py +0 -0
  116. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/runtime.py +0 -0
  117. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/scan.py +0 -0
  118. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/memdir/types.py +0 -0
  119. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/__init__.py +0 -0
  120. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  121. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/prompts.py +0 -0
  122. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/memory/session/session_memory.py +0 -0
  123. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/__init__.py +0 -0
  124. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  125. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  126. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  127. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  128. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  129. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  130. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  131. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  132. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  133. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/service.py +0 -0
  134. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/state.py +0 -0
  135. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/evaluation/store.py +0 -0
  136. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/events/__init__.py +0 -0
  137. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/__init__.py +0 -0
  138. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  139. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/logging_config.py +0 -0
  140. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  141. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/__init__.py +0 -0
  142. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/cli.py +0 -0
  143. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/service.py +0 -0
  144. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/store.py +0 -0
  145. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/replay/ui.py +0 -0
  146. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/__init__.py +0 -0
  147. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/collector.py +0 -0
  148. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  149. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
  150. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/models.py +0 -0
  151. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  152. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  153. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  154. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/__init__.py +0 -0
  155. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/builtin.py +0 -0
  156. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/config.py +0 -0
  157. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/loader.py +0 -0
  158. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/manifest.py +0 -0
  159. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/registries.py +0 -0
  160. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/plugin/types.py +0 -0
  161. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/__init__.py +0 -0
  162. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/anthropic.py +0 -0
  163. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
  164. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/env.py +0 -0
  165. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/model_profile.py +0 -0
  166. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/provider/openai.py +0 -0
  167. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/__init__.py +0 -0
  168. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/agent_session.py +0 -0
  169. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_factory.py +0 -0
  170. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_recovery.py +0 -0
  171. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/conversation_session.py +0 -0
  172. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/factory.py +0 -0
  173. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/session/protocol.py +0 -0
  174. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/__init__.py +0 -0
  175. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  176. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/ids.py +0 -0
  177. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  178. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  179. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/core/types.py +0 -0
  180. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  181. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  182. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  183. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  184. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  185. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  186. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  187. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  188. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  189. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  190. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  191. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/output/sink.py +0 -0
  192. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  193. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  194. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  195. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  196. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  197. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  198. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  199. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  200. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  201. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  202. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  203. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
  204. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
  205. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
  206. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
  207. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
  208. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
  209. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  210. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  211. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
  212. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  213. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  214. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  215. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  216. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  217. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  218. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  219. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  220. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  221. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  222. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  223. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  224. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  225. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  226. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  227. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  228. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  229. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  230. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  231. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  232. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  233. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  234. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  235. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  236. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  237. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  238. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  239. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  240. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  241. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  242. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  243. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  244. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  245. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  246. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  247. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  248. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  249. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  250. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  251. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
  252. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  253. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
  254. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/__init__.py +0 -0
  255. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/base.py +0 -0
  256. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/errors.py +0 -0
  257. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  258. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/loader.py +0 -0
  259. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  260. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/pipeline.py +0 -0
  261. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/policy.py +0 -0
  262. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/registry.py +0 -0
  263. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  264. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  265. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  266. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  267. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  268. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  269. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/session_store.py +0 -0
  270. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  271. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  272. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/__init__.py +0 -0
  273. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/__init__.py +0 -0
  274. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/backend.py +0 -0
  275. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  276. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  277. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  278. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  279. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  280. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  281. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  282. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  283. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  284. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/limits.py +0 -0
  285. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/loader.py +0 -0
  286. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/models.py +0 -0
  287. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/prompt.py +0 -0
  288. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  289. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/config.py +0 -0
  290. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  291. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/agent/scope.py +0 -0
  292. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
  293. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
  294. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
  295. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/models.py +0 -0
  296. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
  297. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
  298. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
  299. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/__init__.py +0 -0
  300. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/ast_security.py +0 -0
  301. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/backend.py +0 -0
  302. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  303. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  304. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  305. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/limits.py +0 -0
  306. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  307. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/models.py +0 -0
  308. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/observability.py +0 -0
  309. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/output_utils.py +0 -0
  310. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/path_security.py +0 -0
  311. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/prompt.py +0 -0
  312. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  313. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  314. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  315. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/security.py +0 -0
  316. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  317. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  318. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/semantics.py +0 -0
  319. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/session_manager.py +0 -0
  320. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  321. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  322. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  323. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/tool.py +0 -0
  324. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  325. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/__init__.py +0 -0
  326. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/backend.py +0 -0
  327. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/batch_tool.py +0 -0
  328. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  329. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  330. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/limits.py +0 -0
  331. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/models.py +0 -0
  332. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/prompt.py +0 -0
  333. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/quote_match.py +0 -0
  334. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  335. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/settings_validator.py +0 -0
  336. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/staleness.py +0 -0
  337. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/tool.py +0 -0
  338. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/edit/validator.py +0 -0
  339. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/__init__.py +0 -0
  340. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/models.py +0 -0
  341. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/pagination.py +0 -0
  342. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/prompt.py +0 -0
  343. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
  344. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  345. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/glob/tool.py +0 -0
  346. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/__init__.py +0 -0
  347. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/backend.py +0 -0
  348. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/models.py +0 -0
  349. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/prompt.py +0 -0
  350. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  351. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/grep/tool.py +0 -0
  352. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/__init__.py +0 -0
  353. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/backend.py +0 -0
  354. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/limits.py +0 -0
  355. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/models.py +0 -0
  356. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/prompt.py +0 -0
  357. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/read/tool.py +0 -0
  358. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  359. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/__init__.py +0 -0
  360. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  361. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/loader.py +0 -0
  362. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/models.py +0 -0
  363. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/policy.py +0 -0
  364. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/prompt.py +0 -0
  365. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/skill/tool.py +0 -0
  366. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/__init__.py +0 -0
  367. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/hooks.py +0 -0
  368. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/limits.py +0 -0
  369. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/models.py +0 -0
  370. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/prompt.py +0 -0
  371. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_create/tool.py +0 -0
  372. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/__init__.py +0 -0
  373. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/models.py +0 -0
  374. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/prompt.py +0 -0
  375. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_get/tool.py +0 -0
  376. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/__init__.py +0 -0
  377. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/models.py +0 -0
  378. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/prompt.py +0 -0
  379. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_list/tool.py +0 -0
  380. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/__init__.py +0 -0
  381. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/hooks.py +0 -0
  382. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/models.py +0 -0
  383. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/prompt.py +0 -0
  384. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/task_update/tool.py +0 -0
  385. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/__init__.py +0 -0
  386. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/attachments.py +0 -0
  387. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/models.py +0 -0
  388. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/prompt.py +0 -0
  389. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  390. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/user_message/tool.py +0 -0
  391. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/__init__.py +0 -0
  392. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/backend.py +0 -0
  393. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/limits.py +0 -0
  394. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/loader.py +0 -0
  395. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/models.py +0 -0
  396. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/preapproved.py +0 -0
  397. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/prompt.py +0 -0
  398. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/summary.py +0 -0
  399. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/webfetch/tool.py +0 -0
  400. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/__init__.py +0 -0
  401. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/backend.py +0 -0
  402. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/events.py +0 -0
  403. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/limits.py +0 -0
  404. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/loader.py +0 -0
  405. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/models.py +0 -0
  406. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/prompt.py +0 -0
  407. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/websearch/tool.py +0 -0
  408. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/__init__.py +0 -0
  409. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/backend.py +0 -0
  410. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/limits.py +0 -0
  411. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/models.py +0 -0
  412. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/prompt.py +0 -0
  413. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/tool.py +0 -0
  414. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/tools/write/validator.py +0 -0
  415. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/__init__.py +0 -0
  416. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/cwd.py +0 -0
  417. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/host_platform.py +0 -0
  418. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/path_hierarchy.py +0 -0
  419. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/path_user_input.py +0 -0
  420. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/rg_executable.py +0 -0
  421. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/subprocess_text.py +0 -0
  422. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/temp_paths.py +0 -0
  423. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/unc_path.py +0 -0
  424. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  425. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/__init__.py +0 -0
  426. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/base.py +0 -0
  427. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/batch.py +0 -0
  428. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/dag.py +0 -0
  429. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
  430. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
  431. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
  432. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
  433. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
  434. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
  435. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
  436. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
  437. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/event_adapter/types.py +0 -0
  438. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/node.py +0 -0
  439. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  440. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/chaining.py +0 -0
  441. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
  442. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
  443. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
  444. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/patterns/routing.py +0 -0
  445. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workflow/state.py +0 -0
  446. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/__init__.py +0 -0
  447. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/capabilities.py +0 -0
  448. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/config.py +0 -0
  449. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  450. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/resolver.py +0 -0
  451. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx/workspace/validators.py +0 -0
  452. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/SOURCES.txt +0 -0
  453. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  454. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  455. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/requires.txt +0 -0
  456. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  457. {langchain-agentx-python-0.4.0 → langchain-agentx-python-0.4.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
5
5
  Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
6
6
  License: Apache License
@@ -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 回调(2s hint 阈值 + stderr 单行覆写 + 事件冒泡)。
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: 父级的工具进度回调,用于转发子 agent 事件
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
- # 事件冒泡:转发到父级的 tool_progress_callback
73
- # agent 的事件通过此回调冒泡到父级,实现对齐 CC 的目录式展示
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None,
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: Callable[[SubagentProgressEvent], None] | None = None,
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: Callable[[SubagentProgressEvent], None] | None = None,
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
  # ---------------------------------------------------------------------------
@@ -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],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
5
5
  Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
6
6
  License: Apache License