langchain-agentx-python 0.1.5__tar.gz → 0.1.6__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 (411) hide show
  1. {langchain-agentx-python-0.1.5/langchain_agentx_python.egg-info → langchain-agentx-python-0.1.6}/PKG-INFO +1 -1
  2. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/__init__.py +1 -1
  3. langchain-agentx-python-0.1.6/langchain_agentx/workflow/__init__.py +24 -0
  4. langchain-agentx-python-0.1.6/langchain_agentx/workflow/base.py +544 -0
  5. langchain-agentx-python-0.1.6/langchain_agentx/workflow/batch.py +134 -0
  6. langchain-agentx-python-0.1.6/langchain_agentx/workflow/dag.py +130 -0
  7. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/__init__.py +32 -0
  8. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/adapter.py +298 -0
  9. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/depth_resolver.py +147 -0
  10. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/handlers/__init__.py +22 -0
  11. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +181 -0
  12. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +134 -0
  13. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +142 -0
  14. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/stack.py +145 -0
  15. langchain-agentx-python-0.1.6/langchain_agentx/workflow/event_adapter/types.py +152 -0
  16. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/chaining.py +1 -1
  17. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +1 -1
  18. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/orchestrator.py +1 -1
  19. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/parallelization.py +1 -1
  20. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/routing.py +1 -1
  21. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6/langchain_agentx_python.egg-info}/PKG-INFO +1 -1
  22. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx_python.egg-info/SOURCES.txt +9 -3
  23. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/pyproject.toml +1 -1
  24. langchain-agentx-python-0.1.5/langchain_agentx/workflow/__init__.py +0 -7
  25. langchain-agentx-python-0.1.5/langchain_agentx/workflow/base.py +0 -97
  26. langchain-agentx-python-0.1.5/langchain_agentx/workflow/base_spike.py +0 -47
  27. langchain-agentx-python-0.1.5/langchain_agentx/workflow/base_v2.py +0 -255
  28. langchain-agentx-python-0.1.5/langchain_agentx/workflow/base_v3_streaming.py +0 -366
  29. langchain-agentx-python-0.1.5/langchain_agentx/workflow/batch.py +0 -55
  30. langchain-agentx-python-0.1.5/langchain_agentx/workflow/dag.py +0 -54
  31. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/LICENSE +0 -0
  32. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/README.md +0 -0
  33. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/__init__.py +0 -0
  34. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/builtin/__init__.py +0 -0
  35. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/builtin/clear.py +0 -0
  36. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/builtin/compact.py +0 -0
  37. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/builtin/memory.py +0 -0
  38. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  39. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/context.py +0 -0
  40. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/dispatcher.py +0 -0
  41. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/registry.py +0 -0
  42. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/result.py +0 -0
  43. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/command/types.py +0 -0
  44. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/config/__init__.py +0 -0
  45. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/__init__.py +0 -0
  46. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/__init__.py +0 -0
  47. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/agent_config.py +0 -0
  48. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  49. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  50. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  51. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/config/token_estimator.py +0 -0
  52. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/__init__.py +0 -0
  53. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  54. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/compaction_service.py +0 -0
  55. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/message_utils.py +0 -0
  56. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/pipeline.py +0 -0
  57. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/settings.py +0 -0
  58. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  59. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  60. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/base.py +0 -0
  61. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  62. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  63. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/noop.py +0 -0
  64. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/snip.py +0 -0
  65. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  66. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/context/types.py +0 -0
  67. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/exit/__init__.py +0 -0
  68. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/exit/exit_logic.py +0 -0
  69. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  70. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/graph/__init__.py +0 -0
  71. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  72. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/graph/factory.py +0 -0
  73. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/graph/graph_edges.py +0 -0
  74. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/__init__.py +0 -0
  75. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  76. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/config.py +0 -0
  77. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/engine.py +0 -0
  78. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  79. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  80. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/executors/command.py +0 -0
  81. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/executors/http.py +0 -0
  82. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  83. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
  84. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/registry.py +0 -0
  85. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/trust.py +0 -0
  86. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/hook/types.py +0 -0
  87. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/injection/__init__.py +0 -0
  88. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/injection/dedup.py +0 -0
  89. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/loop_abort.py +0 -0
  90. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/__init__.py +0 -0
  91. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/model_node.py +0 -0
  92. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/model_nodes.py +0 -0
  93. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  94. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/retrier.py +0 -0
  95. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/retry_bridge.py +0 -0
  96. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/retry_events.py +0 -0
  97. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/retry_policy.py +0 -0
  98. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  99. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  100. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  101. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  102. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/prompt/__init__.py +0 -0
  103. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/prompt/builder.py +0 -0
  104. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/prompt/builtin.py +0 -0
  105. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/prompt/compact.py +0 -0
  106. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/prompt/sections.py +0 -0
  107. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/runtime/__init__.py +0 -0
  108. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/runtime/context.py +0 -0
  109. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  110. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  111. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/__init__.py +0 -0
  112. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  113. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/context.py +0 -0
  114. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  115. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/graph.py +0 -0
  116. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
  117. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/progress.py +0 -0
  118. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/prompt.py +0 -0
  119. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/runner.py +0 -0
  120. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/loop/subagent/transcript.py +0 -0
  121. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/__init__.py +0 -0
  122. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/__init__.py +0 -0
  123. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/loader.py +0 -0
  124. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/resolver.py +0 -0
  125. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/runtime.py +0 -0
  126. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/sections.py +0 -0
  127. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/instruction/types.py +0 -0
  128. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/__init__.py +0 -0
  129. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/age.py +0 -0
  130. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
  131. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/extractor.py +0 -0
  132. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/loader.py +0 -0
  133. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/paths.py +0 -0
  134. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/recall.py +0 -0
  135. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/runtime.py +0 -0
  136. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/scan.py +0 -0
  137. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/memdir/types.py +0 -0
  138. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/session/__init__.py +0 -0
  139. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  140. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/session/prompts.py +0 -0
  141. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/memory/session/session_memory.py +0 -0
  142. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/__init__.py +0 -0
  143. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  144. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  145. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  146. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  147. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  148. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  149. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  150. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  151. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  152. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/service.py +0 -0
  153. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/state.py +0 -0
  154. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/evaluation/store.py +0 -0
  155. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/events/__init__.py +0 -0
  156. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
  157. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/logging/__init__.py +0 -0
  158. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  159. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/logging/logging_config.py +0 -0
  160. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  161. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/replay/__init__.py +0 -0
  162. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/replay/cli.py +0 -0
  163. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/replay/service.py +0 -0
  164. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/replay/store.py +0 -0
  165. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/replay/ui.py +0 -0
  166. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/__init__.py +0 -0
  167. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/collector.py +0 -0
  168. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  169. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
  170. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/models.py +0 -0
  171. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  172. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  173. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  174. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/__init__.py +0 -0
  175. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/builtin.py +0 -0
  176. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/config.py +0 -0
  177. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/loader.py +0 -0
  178. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/manifest.py +0 -0
  179. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/registries.py +0 -0
  180. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/plugin/types.py +0 -0
  181. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/__init__.py +0 -0
  182. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/anthropic.py +0 -0
  183. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
  184. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/env.py +0 -0
  185. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/model_profile.py +0 -0
  186. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/provider/openai.py +0 -0
  187. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/__init__.py +0 -0
  188. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/agent_session.py +0 -0
  189. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/conversation_factory.py +0 -0
  190. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/conversation_recovery.py +0 -0
  191. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/conversation_session.py +0 -0
  192. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/factory.py +0 -0
  193. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/session/protocol.py +0 -0
  194. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/__init__.py +0 -0
  195. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  196. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/core/ids.py +0 -0
  197. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  198. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  199. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/core/types.py +0 -0
  200. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  201. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  202. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  203. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  204. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  205. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  206. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  207. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  208. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  209. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  210. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  211. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/output/sink.py +0 -0
  212. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  213. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  214. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  215. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  216. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  217. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  218. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  219. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  220. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  221. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  222. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  223. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  224. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  225. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
  226. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  227. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  228. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  229. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  230. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  231. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  232. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  233. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  234. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  235. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  236. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  237. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  238. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  239. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  240. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  241. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  242. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  243. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  244. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  245. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  246. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  247. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  248. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  249. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  250. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  251. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  252. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  253. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  254. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  255. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  256. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  257. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  258. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  259. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  260. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  261. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  262. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  263. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  264. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  265. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
  266. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  267. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
  268. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/__init__.py +0 -0
  269. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/adapter.py +0 -0
  270. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/base.py +0 -0
  271. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/errors.py +0 -0
  272. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  273. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/loader.py +0 -0
  274. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/models.py +0 -0
  275. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  276. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/pipeline.py +0 -0
  277. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/policy.py +0 -0
  278. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/registry.py +0 -0
  279. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  280. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  281. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  282. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  283. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  284. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  285. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/session_store.py +0 -0
  286. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  287. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  288. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/__init__.py +0 -0
  289. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/__init__.py +0 -0
  290. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/backend.py +0 -0
  291. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  292. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  293. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  294. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  295. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  296. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  297. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  298. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  299. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  300. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/limits.py +0 -0
  301. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/loader.py +0 -0
  302. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/models.py +0 -0
  303. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/prompt.py +0 -0
  304. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  305. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/registry/config.py +0 -0
  306. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  307. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/scope.py +0 -0
  308. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/agent/tool.py +0 -0
  309. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/__init__.py +0 -0
  310. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/ast_security.py +0 -0
  311. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/backend.py +0 -0
  312. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  313. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  314. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  315. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/limits.py +0 -0
  316. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  317. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/models.py +0 -0
  318. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/observability.py +0 -0
  319. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/output_utils.py +0 -0
  320. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/path_security.py +0 -0
  321. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/prompt.py +0 -0
  322. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  323. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  324. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  325. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/security.py +0 -0
  326. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  327. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  328. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/semantics.py +0 -0
  329. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/session_manager.py +0 -0
  330. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  331. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  332. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  333. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/tool.py +0 -0
  334. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  335. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/__init__.py +0 -0
  336. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/backend.py +0 -0
  337. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/batch_tool.py +0 -0
  338. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  339. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  340. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/limits.py +0 -0
  341. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/models.py +0 -0
  342. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/prompt.py +0 -0
  343. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/quote_match.py +0 -0
  344. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  345. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/settings_validator.py +0 -0
  346. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/staleness.py +0 -0
  347. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/tool.py +0 -0
  348. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/edit/validator.py +0 -0
  349. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/__init__.py +0 -0
  350. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/models.py +0 -0
  351. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/pagination.py +0 -0
  352. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/prompt.py +0 -0
  353. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
  354. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  355. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/glob/tool.py +0 -0
  356. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/__init__.py +0 -0
  357. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/backend.py +0 -0
  358. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/models.py +0 -0
  359. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/prompt.py +0 -0
  360. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  361. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/grep/tool.py +0 -0
  362. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/__init__.py +0 -0
  363. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/backend.py +0 -0
  364. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/limits.py +0 -0
  365. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/models.py +0 -0
  366. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/prompt.py +0 -0
  367. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/read/tool.py +0 -0
  368. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  369. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/__init__.py +0 -0
  370. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  371. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/loader.py +0 -0
  372. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/models.py +0 -0
  373. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/policy.py +0 -0
  374. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/prompt.py +0 -0
  375. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/skill/tool.py +0 -0
  376. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/__init__.py +0 -0
  377. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/attachments.py +0 -0
  378. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/models.py +0 -0
  379. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/prompt.py +0 -0
  380. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  381. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/user_message/tool.py +0 -0
  382. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/__init__.py +0 -0
  383. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/backend.py +0 -0
  384. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/limits.py +0 -0
  385. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/models.py +0 -0
  386. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/prompt.py +0 -0
  387. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/tool.py +0 -0
  388. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/tools/write/validator.py +0 -0
  389. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/__init__.py +0 -0
  390. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/cwd.py +0 -0
  391. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/host_platform.py +0 -0
  392. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/path_hierarchy.py +0 -0
  393. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/path_user_input.py +0 -0
  394. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/rg_executable.py +0 -0
  395. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/subprocess_text.py +0 -0
  396. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/temp_paths.py +0 -0
  397. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/unc_path.py +0 -0
  398. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  399. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/node.py +0 -0
  400. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  401. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workflow/state.py +0 -0
  402. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workspace/__init__.py +0 -0
  403. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workspace/config.py +0 -0
  404. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  405. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workspace/resolver.py +0 -0
  406. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx/workspace/validators.py +0 -0
  407. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  408. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  409. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx_python.egg-info/requires.txt +0 -0
  410. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  411. {langchain-agentx-python-0.1.5 → langchain-agentx-python-0.1.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.1.5
3
+ Version: 0.1.6
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,7 +11,7 @@ from langchain_agentx import create_loop_agent
11
11
  ```
12
12
  """
13
13
 
14
- __version__ = "0.1.0"
14
+ __version__ = "0.1.6"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
@@ -0,0 +1,24 @@
1
+ """Workflow 容器导出。"""
2
+
3
+ from .base import BaseWorkflow
4
+ from .batch import BatchWorkflow
5
+ from .dag import DagWorkflow
6
+
7
+ # Workflow 事件适配器导出(Phase 4)
8
+ from .event_adapter import (
9
+ WorkflowEventAdapter,
10
+ WorkflowEvent,
11
+ WorkflowEventType,
12
+ WorkflowAdapterState,
13
+ )
14
+
15
+ __all__ = [
16
+ "BaseWorkflow",
17
+ "DagWorkflow",
18
+ "BatchWorkflow",
19
+ # 事件适配器
20
+ "WorkflowEventAdapter",
21
+ "WorkflowEvent",
22
+ "WorkflowEventType",
23
+ "WorkflowAdapterState",
24
+ ]
@@ -0,0 +1,544 @@
1
+ """
2
+ base.py — BaseWorkflow 基础设施层
3
+
4
+ 职责:
5
+ - 定义 Workflow 的标准接口(build_graph + run + as_node)
6
+ - 提供通用能力(Hook 发射、Trace 映射、并发控制)
7
+ - 支持层级关系(workflow_session_id、workflow_path)
8
+ - 支持内存提取清理(drain_pending_memory_extractions)
9
+
10
+ 链路位置:
11
+ - Layer 2: 基础设施层
12
+ - 被 Layer 3 (特殊 Workflow) 继承
13
+ - 可作为其他 Workflow 的节点(as_node)
14
+
15
+ 当前裁剪范围:
16
+ - 不提供具体的拓扑结构(由 Layer 3 实现)
17
+ - 仅支持 Workflow 级 Hook 事件(WORKFLOW_START、WORKFLOW_END)
18
+ - 不支持 per-item Hook 事件(Phase 2+)
19
+
20
+ 设计原则(Phase 1):
21
+ - 使用 AgentNode 路径,废弃 graph_factory / _invoke_agent / _astream_agent
22
+ - parent_workflow 在运行时注入(run() / as_node() 参数),避免循环依赖
23
+ - as_node() 直接返回完整 state,让 LangGraph reducer 处理合并
24
+ - max_concurrency 仅存储配置值,不实例化 Semaphore(由子类按需创建)
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ import asyncio
30
+ import logging
31
+ from abc import ABC, abstractmethod
32
+ from typing import Any, AsyncIterator
33
+ from uuid import uuid4
34
+
35
+ from langgraph.graph import StateGraph
36
+ from langchain_core.runnables import RunnableConfig
37
+
38
+ from ..loop.hook.types import HookContext, HookEvent
39
+ from ..loop.hook.registry import HookRegistry
40
+ from ..loop.hook.engine import HookEngine
41
+ from ..memory.memdir.agent_memory import drain_pending_agent_memory_extraction
42
+ from .state import WorkflowState
43
+
44
+ # Lazy import for event_adapter(避免循环依赖)
45
+ # 实际使用时通过 _get_event_adapter() 延迟导入
46
+
47
+
48
+ logger = logging.getLogger(__name__)
49
+
50
+
51
+ class BaseWorkflow(ABC):
52
+ """基础设施层基类:定义 Workflow 的标准契约和通用能力。
53
+
54
+ 双重身份:
55
+ - 作为基类:Layer 3 继承 BaseWorkflow,复用通用能力
56
+ - 作为组件:run() 方法签名与 LangGraph 节点函数一致,可作为其他 Workflow 的节点
57
+
58
+ 设计原则(Phase 1):
59
+ - __init__ 只接收 workflow_id 和 hook_registry,不存储 parent_workflow
60
+ - parent_workflow 在运行时注入(run() / as_node() 参数),避免循环依赖
61
+ - max_concurrency 仅存储配置值,不实例化 Semaphore(由子类按需创建)
62
+ """
63
+
64
+ def __init__(
65
+ self,
66
+ workflow_id: str,
67
+ hook_registry: HookRegistry,
68
+ trace_collector: Any = None,
69
+ max_concurrency: int | None = None,
70
+ graph_factory: Any = None,
71
+ ):
72
+ """初始化 BaseWorkflow。
73
+
74
+ Args:
75
+ workflow_id: Workflow 标识符
76
+ hook_registry: Hook 注册表
77
+ trace_collector: Trace 收集器(可选)
78
+ max_concurrency: 并发控制限制(仅存储,不实例化 Semaphore)
79
+ graph_factory: 兼容层参数(用于 Batch/Dag 迁移,可选)
80
+ """
81
+ self._workflow_id = workflow_id
82
+ self._hook_registry = hook_registry
83
+ self._hook_engine = HookEngine(hook_registry.build_snapshot())
84
+ self._trace_collector = trace_collector
85
+ self._max_concurrency = max_concurrency or 4
86
+
87
+ # 初始化 _workflow_path(在 run() 中会更新)
88
+ self._workflow_path = workflow_id
89
+ self._workflow_session_id = None
90
+
91
+ # === 兼容层:支持 Batch/Dag 迁移 ===
92
+ self._graph_factory = graph_factory
93
+ self._semaphore = asyncio.Semaphore(self._max_concurrency)
94
+ self.container_type = "workflow_task"
95
+
96
+ # 注意:parent_workflow 移到 run() 参数,避免 __init__ 时的循环依赖(问题 20)
97
+ # 注意:graph_factory 仅用于兼容 Batch/Dag,新代码应使用 build_graph()
98
+
99
+ @abstractmethod
100
+ def build_graph(self) -> StateGraph:
101
+ """子类实现:构建 LangGraph 图。
102
+
103
+ 返回的 StateGraph 中:
104
+ - 节点可以是 AgentNode.build() 返回的节点函数(Layer 1)
105
+ - 也可以是其他 Workflow(Layer 2 或 Layer 3)
106
+ """
107
+ pass
108
+
109
+ def compile(self):
110
+ """编译并返回可执行的图。"""
111
+ return self.build_graph().compile()
112
+
113
+ async def run(
114
+ self,
115
+ initial_state: dict,
116
+ *,
117
+ parent_workflow: "BaseWorkflow | None" = None,
118
+ ) -> dict:
119
+ """执行 Workflow(对外 API,用于顶层调用)。
120
+
121
+ Args:
122
+ initial_state: 初始状态
123
+ parent_workflow: 父 Workflow(用于构建层级关系,问题 20)
124
+
125
+ Returns:
126
+ 完整的 WorkflowState,包含所有字段的状态
127
+
128
+ 注意:
129
+ - 作为顶层 Workflow 调用时使用此方法
130
+ - 作为其他 Workflow 的子节点时,应使用 as_node() 方法
131
+
132
+ 层级关系(§2.7 问题 12、20):
133
+ - parent_workflow 在运行时注入,而不是 __init__
134
+ - 构建完整的 workflow_path(如 "wiki-build>wiki-l1")
135
+
136
+ 内存提取(§2.7 问题 16):
137
+ - Workflow 结束时需要清理 pending 的 memory extraction
138
+ - 通过 try-finally 确保无论成功或失败都会执行清理
139
+ """
140
+ # === 构建层级关系(问题 20)===
141
+ # parent_workflow 在运行时注入,而不是 __init__
142
+ if parent_workflow is None:
143
+ workflow_path = self._workflow_id
144
+ else:
145
+ workflow_path = f"{parent_workflow._workflow_path}>{self._workflow_id}"
146
+
147
+ # 生成唯一的 workflow_session_id
148
+ workflow_session_id = f"workflow-{self._workflow_id}-{uuid4().hex[:8]}"
149
+
150
+ # 保存当前 workflow_path(用于子 Workflow 构建)
151
+ self._workflow_path = workflow_path
152
+ self._workflow_session_id = workflow_session_id
153
+
154
+ await self._emit_hook(HookEvent.WORKFLOW_START, {
155
+ "workflow_id": self._workflow_id,
156
+ "workflow_session_id": workflow_session_id,
157
+ "workflow_path": workflow_path,
158
+ })
159
+
160
+ graph = self.compile()
161
+
162
+ try:
163
+ result = await graph.ainvoke(initial_state)
164
+
165
+ await self._emit_hook(HookEvent.WORKFLOW_END, {
166
+ "workflow_id": self._workflow_id,
167
+ "workflow_session_id": workflow_session_id,
168
+ "workflow_path": workflow_path,
169
+ })
170
+
171
+ return result
172
+
173
+ finally:
174
+ # === 内存提取清理(问题 16)===
175
+ # 确保无论成功或失败都清理 pending 的 memory extraction
176
+ # 注意:drain 与 trace_collector 无关,memory extraction 的清理永远执行
177
+ await self._drain_pending_memory_extractions()
178
+
179
+ def as_node(
180
+ self,
181
+ *,
182
+ parent_workflow: "BaseWorkflow | None" = None,
183
+ outer_semaphore: asyncio.Semaphore | None = None,
184
+ ) -> callable:
185
+ """返回符合 LangGraph 节点语义的 callable(用于子图嵌套)。
186
+
187
+ Args:
188
+ parent_workflow: 父 Workflow(用于构建层级关系,问题 20)
189
+ outer_semaphore: 外层并发控制信号量(问题 19)
190
+
191
+ 与 run() 的区别:
192
+ - run(): 返回完整 WorkflowState(用于顶层调用)
193
+ - as_node(): 返回完整 WorkflowState(作为其他 Workflow 的节点)
194
+
195
+ 实现原理:
196
+ - 直接调用 run() 返回完整 state
197
+ - 传递 parent_workflow 构建层级关系
198
+ - 使用 outer_semaphore 控制并发(如果提供)
199
+ - LangGraph 的 reducer 会自动处理合并
200
+
201
+ 并发控制(问题 19):
202
+ - 如果 outer_workflow 提供 semaphore,子 workflow 的执行会被限流
203
+ - 这解决了 DeepSearch 场景下 45 个 sub-workflow 同时启动的问题
204
+
205
+ 注意(问题 18 - as_node() diff 算法硬 bug):
206
+ - ✅ 新设计(正确):直接返回完整 state,让 LangGraph reducer 处理合并
207
+ - ❌ 旧设计(错误):手算 diff,硬编码字段名,假设 reducer 是 list append
208
+ """
209
+ async def node_fn(state: dict) -> dict:
210
+ # === 并发控制(问题 19)===
211
+ if outer_semaphore is not None:
212
+ async with outer_semaphore:
213
+ return await self.run(state, parent_workflow=parent_workflow)
214
+ else:
215
+ return await self.run(state, parent_workflow=parent_workflow)
216
+
217
+ return node_fn
218
+
219
+ async def _invoke_agent(
220
+ self,
221
+ messages: list,
222
+ task_key: str,
223
+ parent_session_id: str | None = None,
224
+ ) -> dict:
225
+ """兼容层:为 Batch/Dag 提供 agent 调用接口。
226
+
227
+ 迁移自 base.py:59-74,保留原有行为。
228
+
229
+ Args:
230
+ messages: 消息列表
231
+ task_key: 任务标识符,用于构建 session_id
232
+ parent_session_id: 父会话 ID(可选)
233
+
234
+ Returns:
235
+ agent 执行结果字典
236
+
237
+ Raises:
238
+ RuntimeError: 如果 graph_factory 未提供
239
+ """
240
+ if self._graph_factory is None:
241
+ raise RuntimeError(
242
+ "_invoke_agent() requires graph_factory parameter. "
243
+ "This method is for Batch/Dag compatibility only."
244
+ )
245
+
246
+ session_id = f"{self._workflow_id}-{task_key}"
247
+ async with self._semaphore:
248
+ graph = self._graph_factory(
249
+ session_id=session_id,
250
+ parent_conversation_session_id=parent_session_id,
251
+ is_subagent=parent_session_id is not None,
252
+ container_type=self.container_type,
253
+ )
254
+ result = await graph.ainvoke({"messages": messages})
255
+ return dict(result) if isinstance(result, dict) else {"result": result}
256
+
257
+ async def astream_events(
258
+ self,
259
+ initial_state: dict,
260
+ *,
261
+ parent_workflow: "BaseWorkflow | None" = None,
262
+ subgraphs: bool = True,
263
+ version: str = "v2",
264
+ **kwargs
265
+ ) -> AsyncIterator[dict]:
266
+ """流式执行 Workflow,返回所有事件(包括嵌套子图)。
267
+
268
+ Args:
269
+ initial_state: 初始状态
270
+ parent_workflow: 父 Workflow(用于构建层级关系)
271
+ subgraphs: 是否包含嵌套子图事件,默认 True
272
+ version: 事件格式版本,"v1" 或 "v2"
273
+ **kwargs: 传递给 LangGraph astream_events 的其他参数
274
+
275
+ Yields:
276
+ 事件字典,格式由 LangGraph astream_events 定义
277
+
278
+ 事件格式(v2):
279
+ {
280
+ "event": "on_chain_start" | "on_chain_end" | "on_chain_stream" | ...,
281
+ "data": {...},
282
+ "metadata": {
283
+ "langgraph_node": str,
284
+ "langgraph_checkpoint_ns": str, # 命名空间路径
285
+ ...
286
+ }
287
+ }
288
+
289
+ Hook 事件:
290
+ - WORKFLOW_START 在开始时发射
291
+ - WORKFLOW_END 在结束时发射
292
+
293
+ 注意(v2 合并):
294
+ - workflow_path 作为 local 变量传递,避免并发状态错乱
295
+ - 不写入 self._workflow_path / self._workflow_session_id
296
+ """
297
+ # === 构建层级关系 ===
298
+ if parent_workflow is None:
299
+ workflow_path = self._workflow_id
300
+ else:
301
+ workflow_path = f"{parent_workflow._workflow_path}>{self._workflow_id}"
302
+
303
+ # 生成唯一的 workflow_session_id(local 变量)
304
+ workflow_session_id = f"workflow-{self._workflow_id}-{uuid4().hex[:8]}"
305
+
306
+ # === 发射 WORKFLOW_START Hook ===
307
+ await self._emit_hook(HookEvent.WORKFLOW_START, {
308
+ "workflow_id": self._workflow_id,
309
+ "workflow_session_id": workflow_session_id,
310
+ "workflow_path": workflow_path,
311
+ })
312
+
313
+ try:
314
+ # === 流式执行,传递 subgraphs 参数 ===
315
+ graph = self.compile()
316
+
317
+ # 注意:不注入 workflow_path 到 configurable(经验证不会透传到事件 metadata)
318
+ # workflow_path 由 WorkflowEventAdapter 通过 langgraph_checkpoint_ns 维护
319
+ config: RunnableConfig = {}
320
+
321
+ async for event in graph.astream_events(
322
+ initial_state,
323
+ config=config,
324
+ subgraphs=subgraphs,
325
+ version=version,
326
+ **kwargs,
327
+ ):
328
+ yield event
329
+
330
+ # === 发射 WORKFLOW_END Hook ===
331
+ await self._emit_hook(HookEvent.WORKFLOW_END, {
332
+ "workflow_id": self._workflow_id,
333
+ "workflow_session_id": workflow_session_id,
334
+ "workflow_path": workflow_path,
335
+ })
336
+
337
+ finally:
338
+ # === 内存提取清理 ===
339
+ await self._drain_pending_memory_extractions()
340
+
341
+ async def run_stream(
342
+ self,
343
+ initial_state: dict,
344
+ *,
345
+ parent_workflow: "BaseWorkflow | None" = None,
346
+ filter_events: bool = True,
347
+ **kwargs
348
+ ) -> AsyncIterator[tuple[str, dict]]:
349
+ """便捷的流式执行方法,返回过滤后的事件。
350
+
351
+ Args:
352
+ initial_state: 初始状态
353
+ parent_workflow: 父 Workflow
354
+ filter_events: 是否过滤事件,只返回关键事件
355
+ **kwargs: 传递给 astream_events 的其他参数
356
+
357
+ Yields:
358
+ (event_type, event_data) 元组
359
+
360
+ 当 filter_events=True 时,只返回:
361
+ - ("node_start", {...}) - 节点开始
362
+ - ("node_end", {...}) - 节点结束
363
+ - ("workflow_start", {...}) - Workflow 开始
364
+ - ("workflow_end", {...}) - Workflow 结束
365
+ - ("item_start", {...}) - 并行项开始
366
+ - ("item_done", {...}) - 并行项完成
367
+
368
+ 当 filter_events=False 时,返回所有原始事件。
369
+ """
370
+ if not filter_events:
371
+ async for event in self.astream_events(initial_state, parent_workflow=parent_workflow, **kwargs):
372
+ event_type = event.get("event", "unknown")
373
+ yield (event_type, event)
374
+ else:
375
+ async for event in self.astream_events(initial_state, parent_workflow=parent_workflow, **kwargs):
376
+ event_name = event.get("event", "")
377
+ metadata = event.get("metadata", {})
378
+ node = metadata.get("langgraph_node", "")
379
+ ns = metadata.get("langgraph_checkpoint_ns", "")
380
+
381
+ # 获取当前 workflow_path(从 parent 或 self)
382
+ if parent_workflow:
383
+ workflow_path = f"{parent_workflow._workflow_path}>{self._workflow_id}"
384
+ else:
385
+ workflow_path = self._workflow_id
386
+
387
+ # 过滤出关键事件
388
+ if event_name == "on_chain_start":
389
+ if node:
390
+ yield ("node_start", {
391
+ "node": node,
392
+ "ns": ns,
393
+ "workflow_path": workflow_path,
394
+ })
395
+ else:
396
+ yield ("workflow_start", {
397
+ "workflow_id": self._workflow_id,
398
+ "workflow_path": workflow_path,
399
+ })
400
+
401
+ elif event_name == "on_chain_end":
402
+ if node:
403
+ yield ("node_end", {
404
+ "node": node,
405
+ "ns": ns,
406
+ "workflow_path": workflow_path,
407
+ })
408
+ else:
409
+ yield ("workflow_end", {
410
+ "workflow_id": self._workflow_id,
411
+ "workflow_path": workflow_path,
412
+ })
413
+
414
+ # 检测并行项(parallel_N 格式的节点)
415
+ if node and node.startswith("parallel_"):
416
+ if event_name == "on_chain_start":
417
+ yield ("item_start", {
418
+ "node": node,
419
+ "ns": ns,
420
+ "workflow_path": workflow_path,
421
+ })
422
+ elif event_name == "on_chain_end":
423
+ yield ("item_done", {
424
+ "node": node,
425
+ "ns": ns,
426
+ "workflow_path": workflow_path,
427
+ })
428
+
429
+ async def astream_workflow_events(
430
+ self,
431
+ initial_state: dict,
432
+ *,
433
+ parent_workflow: "BaseWorkflow | None" = None,
434
+ enable_agent_events: bool = False,
435
+ workflow_structure: dict | None = None,
436
+ **kwargs
437
+ ) -> AsyncIterator[Any]:
438
+ """流式执行 Workflow,返回结构化事件(新 API)。
439
+
440
+ Args:
441
+ initial_state: 初始状态
442
+ parent_workflow: 父 Workflow
443
+ enable_agent_events: 是否同时输出 Agent 内部事件(需配合 CompositeEventAdapter)
444
+ workflow_structure: 结构信息,包含:
445
+ - total_stages: ChainingWorkflow 的 stage 总数
446
+ - total_parallel: ParallelizationWorkflow 的并行节点数
447
+ - routes: RoutingWorkflow 的路由 key 列表
448
+ **kwargs: 传递给 astream_events 的其他参数
449
+
450
+ Yields:
451
+ WorkflowEvent: 结构化的 Workflow 事件
452
+
453
+ 嵌套语义说明:
454
+ - 本方法**只能在根 Workflow 上调用**
455
+ - 嵌套子 Workflow 通过 SUBWORKFLOW_START/END 事件表达
456
+ - workflow_path 从根开始构建(如 "wiki-build>parallel_0")
457
+ - 不允许在子 Workflow 上单独创建 adapter(避免路径不连续)
458
+
459
+ 示例:
460
+ ```python
461
+ workflow = ChainingWorkflow(
462
+ workflow_id="my-workflow",
463
+ stages=[...],
464
+ hook_registry=registry,
465
+ )
466
+
467
+ async for event in workflow.astream_workflow_events(
468
+ initial_state={"messages": [...]},
469
+ workflow_structure={"total_stages": 3},
470
+ ):
471
+ if event.event_type == WorkflowEventType.STAGE_DONE:
472
+ print(f"Stage {event.data['stage_index']} done")
473
+ ```
474
+ """
475
+ from .event_adapter import WorkflowEventAdapter, WorkflowEvent
476
+
477
+ # === 构建配置 ===
478
+ config = {}
479
+ if workflow_structure:
480
+ config.update(workflow_structure)
481
+
482
+ # === 生成 session_id ===
483
+ workflow_session_id = f"workflow-{self._workflow_id}-{uuid4().hex[:8]}"
484
+
485
+ # === 创建适配器 ===
486
+ adapter = WorkflowEventAdapter(
487
+ self._workflow_id,
488
+ session_id=workflow_session_id,
489
+ config=config,
490
+ )
491
+
492
+ # === 流式处理事件 ===
493
+ async for event in self.astream_events(initial_state, parent_workflow=parent_workflow, **kwargs):
494
+ for wf_event in adapter.consume(event):
495
+ yield wf_event
496
+
497
+ # === 通用能力(由 Layer 3 复用)===
498
+
499
+ async def _emit_hook(self, event: HookEvent, ctx: dict) -> None:
500
+ """发射 Hook 事件,构造 HookContext。
501
+
502
+ Args:
503
+ event: Hook 事件类型
504
+ ctx: 上下文数据(包含 workflow_id, workflow_session_id, workflow_path 等)
505
+ """
506
+ hook_ctx = HookContext(
507
+ event=event,
508
+ state=ctx.get("state", {}),
509
+ session_id=ctx.get("session_id"),
510
+ tool_name=ctx.get("tool_name"),
511
+ tool_input=ctx.get("tool_input"),
512
+ tool_result=ctx.get("tool_result"),
513
+ # ← Workflow 级字段(Phase 1)
514
+ workflow_id=ctx.get("workflow_id"),
515
+ workflow_session_id=ctx.get("workflow_session_id"),
516
+ workflow_path=ctx.get("workflow_path"),
517
+ )
518
+ await self._hook_engine.execute(hook_ctx)
519
+
520
+ async def _drain_pending_memory_extractions(self) -> None:
521
+ """清理 pending 的 memory extraction 任务。
522
+
523
+ 这是为了确保 Workflow 结束时不会遗留未完成的 memory extraction。
524
+ 与 create_loop_agent 内部的逻辑保持一致。
525
+
526
+ 实现说明:
527
+ - 依赖于 trace_collector 的接口
528
+ - 如果 trace_collector 为 None,则跳过清理
529
+ - 清理失败不应抛出异常,只记录日志
530
+ """
531
+ try:
532
+ # 调用模块级函数清理 memory extraction
533
+ # 注意:这是 memory 子系统的模块级函数,不是 TraceCollector 的方法
534
+ # 签名:drain_pending_agent_memory_extraction(timeout_ms: int = 60_000)
535
+ await drain_pending_agent_memory_extraction(
536
+ timeout_ms=60_000, # 默认 60 秒超时
537
+ )
538
+ except Exception as e:
539
+ # 清理失败不应抛出异常,避免掩盖主流程的错误
540
+ # 记录日志即可
541
+ logger.warning(f"Failed to drain pending memory extractions: {e}")
542
+
543
+
544
+ __all__ = ["BaseWorkflow"]