langchain-agentx-python 0.5.1__tar.gz → 0.5.3__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 (491) hide show
  1. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/PKG-INFO +1 -1
  2. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/__init__.py +13 -1
  3. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/exit_logic.py +4 -1
  4. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/graph_edges.py +19 -7
  5. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/__init__.py +18 -1
  6. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/engine.py +63 -5
  7. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/graph_wiring.py +32 -24
  8. langchain-agentx-python-0.5.3/langchain_agentx/loop/hook/hook_projection.py +164 -0
  9. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/types.py +9 -0
  10. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +147 -29
  11. langchain-agentx-python-0.5.3/langchain_agentx/observability/trace/hook_event_emitter.py +96 -0
  12. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/__init__.py +23 -0
  13. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/loader.py +53 -1
  14. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/override.py +26 -5
  15. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/path_safety.py +193 -0
  16. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/permission_decision.py +22 -0
  17. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/policy.py +116 -49
  18. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/read_ignore_patterns.py +53 -0
  19. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/read_permission.py +120 -0
  20. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/settings_validator.py +9 -3
  21. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/rg_list_backend.py +15 -3
  22. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/PKG-INFO +1 -1
  23. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/SOURCES.txt +4 -0
  24. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/pyproject.toml +1 -1
  25. langchain-agentx-python-0.5.1/langchain_agentx/observability/trace/hook_event_emitter.py +0 -49
  26. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/LICENSE +0 -0
  27. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/README.md +0 -0
  28. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/__init__.py +0 -0
  29. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/__init__.py +0 -0
  30. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/clear.py +0 -0
  31. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/compact.py +0 -0
  32. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/memory.py +0 -0
  33. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  34. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/context.py +0 -0
  35. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/dispatcher.py +0 -0
  36. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/registry.py +0 -0
  37. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/result.py +0 -0
  38. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/command/types.py +0 -0
  39. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/config/__init__.py +0 -0
  40. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/config/model_profiles.yaml +0 -0
  41. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/config/model_profiles.yaml.example +0 -0
  42. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/__init__.py +0 -0
  43. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/__init__.py +0 -0
  44. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/agent_config.py +0 -0
  45. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  46. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  47. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  48. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/token_estimator.py +0 -0
  49. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/__init__.py +0 -0
  50. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  51. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/compaction_service.py +0 -0
  52. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/message_utils.py +0 -0
  53. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/pipeline.py +0 -0
  54. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/settings.py +0 -0
  55. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  56. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  57. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/base.py +0 -0
  58. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  59. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  60. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/noop.py +0 -0
  61. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/snip.py +0 -0
  62. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  63. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/types.py +0 -0
  64. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/__init__.py +0 -0
  65. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  66. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/__init__.py +0 -0
  67. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  68. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/factory.py +0 -0
  69. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  70. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/config.py +0 -0
  71. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  72. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  73. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/command.py +0 -0
  74. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/http.py +0 -0
  75. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  76. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/registry.py +0 -0
  77. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/trust.py +0 -0
  78. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/injection/__init__.py +0 -0
  79. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/injection/dedup.py +0 -0
  80. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/loop_abort.py +0 -0
  81. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/__init__.py +0 -0
  82. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/model_node.py +0 -0
  83. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/model_nodes.py +0 -0
  84. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  85. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retrier.py +0 -0
  86. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_bridge.py +0 -0
  87. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_events.py +0 -0
  88. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_policy.py +0 -0
  89. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  90. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  91. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  92. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  93. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/__init__.py +0 -0
  94. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/builder.py +0 -0
  95. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/builtin.py +0 -0
  96. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/compact.py +0 -0
  97. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/sections.py +0 -0
  98. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/session_context.py +0 -0
  99. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/__init__.py +0 -0
  100. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/context.py +0 -0
  101. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  102. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  103. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/__init__.py +0 -0
  104. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  105. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/context.py +0 -0
  106. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  107. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/graph.py +0 -0
  108. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
  109. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/progress.py +0 -0
  110. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/prompt.py +0 -0
  111. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/runner.py +0 -0
  112. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/transcript.py +0 -0
  113. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/__init__.py +0 -0
  114. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/__init__.py +0 -0
  115. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/loader.py +0 -0
  116. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/resolver.py +0 -0
  117. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/runtime.py +0 -0
  118. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/sections.py +0 -0
  119. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/types.py +0 -0
  120. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/__init__.py +0 -0
  121. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/age.py +0 -0
  122. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
  123. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/extractor.py +0 -0
  124. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/loader.py +0 -0
  125. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/paths.py +0 -0
  126. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/recall.py +0 -0
  127. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/runtime.py +0 -0
  128. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/scan.py +0 -0
  129. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/types.py +0 -0
  130. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/__init__.py +0 -0
  131. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  132. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/prompts.py +0 -0
  133. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/session_memory.py +0 -0
  134. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/__init__.py +0 -0
  135. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  136. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  137. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  138. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  139. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  140. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  141. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  142. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  143. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  144. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/service.py +0 -0
  145. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/state.py +0 -0
  146. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/store.py +0 -0
  147. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/events/__init__.py +0 -0
  148. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/__init__.py +0 -0
  149. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  150. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/logging_config.py +0 -0
  151. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  152. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/__init__.py +0 -0
  153. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/cli.py +0 -0
  154. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/service.py +0 -0
  155. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/store.py +0 -0
  156. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/ui.py +0 -0
  157. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/__init__.py +0 -0
  158. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/collector.py +0 -0
  159. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  160. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/models.py +0 -0
  161. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  162. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  163. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  164. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/__init__.py +0 -0
  165. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/builtin.py +0 -0
  166. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/config.py +0 -0
  167. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/loader.py +0 -0
  168. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/manifest.py +0 -0
  169. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/registries.py +0 -0
  170. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/types.py +0 -0
  171. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/__init__.py +0 -0
  172. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/anthropic.py +0 -0
  173. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
  174. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/env.py +0 -0
  175. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/model_profile.py +0 -0
  176. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/openai.py +0 -0
  177. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/__init__.py +0 -0
  178. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/agent_session.py +0 -0
  179. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_factory.py +0 -0
  180. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_recovery.py +0 -0
  181. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_session.py +0 -0
  182. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/factory.py +0 -0
  183. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/session/protocol.py +0 -0
  184. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/__init__.py +0 -0
  185. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  186. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/ids.py +0 -0
  187. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  188. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  189. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/types.py +0 -0
  190. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  191. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  192. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  193. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  194. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  195. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  196. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  197. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  198. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  199. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  200. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  201. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/output/sink.py +0 -0
  202. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  203. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  204. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  205. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  206. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  207. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  208. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  209. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  210. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  211. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  212. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  213. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
  214. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
  215. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
  216. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
  217. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
  218. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
  219. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  220. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  221. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
  222. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  223. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  224. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  225. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  226. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  227. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  228. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  229. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  230. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  231. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  232. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  233. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  234. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  235. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  236. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  237. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  238. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  239. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  240. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  241. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  242. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  243. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  244. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  245. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  246. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  247. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  248. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  249. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  250. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  251. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  252. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  253. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  254. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  255. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  256. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  257. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  258. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  259. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  260. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  261. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
  262. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  263. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
  264. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/adapter.py +0 -0
  265. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/__init__.py +0 -0
  266. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/allowlist.py +0 -0
  267. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/__init__.py +0 -0
  268. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/classifier.py +0 -0
  269. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/parser.py +0 -0
  270. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/prompt.py +0 -0
  271. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/schema.py +0 -0
  272. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/transcript.py +0 -0
  273. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/config.py +0 -0
  274. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/config_update.py +0 -0
  275. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/decision.py +0 -0
  276. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/events.py +0 -0
  277. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/factory.py +0 -0
  278. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/feedback.py +0 -0
  279. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/hook.py +0 -0
  280. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/rule_stripping.py +0 -0
  281. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/state.py +0 -0
  282. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/base.py +0 -0
  283. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/errors.py +0 -0
  284. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  285. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/models.py +0 -0
  286. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  287. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/pipeline.py +0 -0
  288. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/policy_decorator.py +0 -0
  289. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/__init__.py +0 -0
  290. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/_abort.py +0 -0
  291. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/cli_interactive.py +0 -0
  292. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/handler.py +0 -0
  293. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/headless.py +0 -0
  294. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/legacy_resolver_adapter.py +0 -0
  295. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/race.py +0 -0
  296. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/types.py +0 -0
  297. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/registry.py +0 -0
  298. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  299. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  300. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  301. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  302. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  303. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  304. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/session_store.py +0 -0
  305. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  306. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  307. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/__init__.py +0 -0
  308. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/__init__.py +0 -0
  309. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/backend.py +0 -0
  310. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  311. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  312. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  313. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  314. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  315. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  316. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  317. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  318. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  319. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/limits.py +0 -0
  320. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/loader.py +0 -0
  321. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/models.py +0 -0
  322. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/prompt.py +0 -0
  323. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  324. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/config.py +0 -0
  325. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  326. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/scope.py +0 -0
  327. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/tool.py +0 -0
  328. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
  329. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
  330. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
  331. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/models.py +0 -0
  332. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
  333. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
  334. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
  335. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/__init__.py +0 -0
  336. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/ast_security.py +0 -0
  337. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/auto_mode_adapter.py +0 -0
  338. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/backend.py +0 -0
  339. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  340. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  341. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  342. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/events.py +0 -0
  343. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/limits.py +0 -0
  344. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  345. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/models.py +0 -0
  346. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/observability.py +0 -0
  347. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/output_utils.py +0 -0
  348. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/path_security.py +0 -0
  349. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/prompt.py +0 -0
  350. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  351. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  352. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  353. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/security.py +0 -0
  354. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  355. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  356. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/semantics.py +0 -0
  357. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/session_manager.py +0 -0
  358. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  359. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  360. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  361. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/tool.py +0 -0
  362. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  363. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/__init__.py +0 -0
  364. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/backend.py +0 -0
  365. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  366. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  367. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/limits.py +0 -0
  368. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/models.py +0 -0
  369. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/prompt.py +0 -0
  370. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/quote_match.py +0 -0
  371. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  372. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/staleness.py +0 -0
  373. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/tool.py +0 -0
  374. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/validator.py +0 -0
  375. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/__init__.py +0 -0
  376. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/models.py +0 -0
  377. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/pagination.py +0 -0
  378. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/prompt.py +0 -0
  379. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  380. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/tool.py +0 -0
  381. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/__init__.py +0 -0
  382. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/backend.py +0 -0
  383. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/models.py +0 -0
  384. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/prompt.py +0 -0
  385. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  386. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/tool.py +0 -0
  387. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/__init__.py +0 -0
  388. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/backend.py +0 -0
  389. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/limits.py +0 -0
  390. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/models.py +0 -0
  391. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/prompt.py +0 -0
  392. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/tool.py +0 -0
  393. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  394. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/__init__.py +0 -0
  395. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  396. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/loader.py +0 -0
  397. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/models.py +0 -0
  398. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/policy.py +0 -0
  399. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/prompt.py +0 -0
  400. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/tool.py +0 -0
  401. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/__init__.py +0 -0
  402. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/hooks.py +0 -0
  403. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/limits.py +0 -0
  404. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/models.py +0 -0
  405. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/prompt.py +0 -0
  406. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/tool.py +0 -0
  407. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/__init__.py +0 -0
  408. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/models.py +0 -0
  409. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/prompt.py +0 -0
  410. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/tool.py +0 -0
  411. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/__init__.py +0 -0
  412. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/models.py +0 -0
  413. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/prompt.py +0 -0
  414. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/tool.py +0 -0
  415. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/__init__.py +0 -0
  416. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/hooks.py +0 -0
  417. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/models.py +0 -0
  418. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/prompt.py +0 -0
  419. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/tool.py +0 -0
  420. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/__init__.py +0 -0
  421. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/attachments.py +0 -0
  422. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/models.py +0 -0
  423. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/prompt.py +0 -0
  424. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  425. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/tool.py +0 -0
  426. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/__init__.py +0 -0
  427. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/backend.py +0 -0
  428. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/limits.py +0 -0
  429. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/loader.py +0 -0
  430. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/models.py +0 -0
  431. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/preapproved.py +0 -0
  432. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/prompt.py +0 -0
  433. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/summary.py +0 -0
  434. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/tool.py +0 -0
  435. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/__init__.py +0 -0
  436. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/backend.py +0 -0
  437. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/events.py +0 -0
  438. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/limits.py +0 -0
  439. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/loader.py +0 -0
  440. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/models.py +0 -0
  441. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/prompt.py +0 -0
  442. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/tool.py +0 -0
  443. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/__init__.py +0 -0
  444. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/backend.py +0 -0
  445. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/limits.py +0 -0
  446. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/models.py +0 -0
  447. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/prompt.py +0 -0
  448. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/tool.py +0 -0
  449. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/validator.py +0 -0
  450. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/__init__.py +0 -0
  451. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/cwd.py +0 -0
  452. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/host_platform.py +0 -0
  453. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/path_hierarchy.py +0 -0
  454. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/path_user_input.py +0 -0
  455. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/rg_executable.py +0 -0
  456. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/subprocess_text.py +0 -0
  457. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/temp_paths.py +0 -0
  458. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/unc_path.py +0 -0
  459. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  460. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/__init__.py +0 -0
  461. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/base.py +0 -0
  462. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/batch.py +0 -0
  463. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/dag.py +0 -0
  464. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
  465. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
  466. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
  467. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
  468. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
  469. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
  470. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
  471. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
  472. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/types.py +0 -0
  473. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/node.py +0 -0
  474. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  475. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/chaining.py +0 -0
  476. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
  477. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
  478. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
  479. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/routing.py +0 -0
  480. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/state.py +0 -0
  481. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/__init__.py +0 -0
  482. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/capabilities.py +0 -0
  483. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/config.py +0 -0
  484. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  485. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/resolver.py +0 -0
  486. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/validators.py +0 -0
  487. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  488. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  489. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/requires.txt +0 -0
  490. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  491. {langchain-agentx-python-0.5.1 → langchain-agentx-python-0.5.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.5.1
3
+ Version: 0.5.3
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,12 +11,19 @@ from langchain_agentx import create_loop_agent
11
11
  ```
12
12
  """
13
13
 
14
- __version__ = "0.5.1"
14
+ __version__ = "0.5.3"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
18
18
  )
19
19
 
20
+ from .loop.hook import ( # noqa: F401
21
+ ATTACHMENT_HOOK_BLOCKING_ERROR,
22
+ ATTACHMENT_HOOK_CANCELLED,
23
+ ATTACHMENT_HOOK_NON_BLOCKING_ERROR,
24
+ ATTACHMENT_HOOK_STOPPED_CONTINUATION,
25
+ ATTACHMENT_HOOK_SUCCESS,
26
+ )
20
27
  from .observability import ( # noqa: F401
21
28
  EventAdapterState,
22
29
  LangchainAgentEvent,
@@ -31,6 +38,11 @@ from .session import AgentSession, create_agent_session # noqa: F401
31
38
  from .workflow import BaseWorkflow # noqa: F401
32
39
 
33
40
  __all__ = [
41
+ "ATTACHMENT_HOOK_BLOCKING_ERROR",
42
+ "ATTACHMENT_HOOK_CANCELLED",
43
+ "ATTACHMENT_HOOK_NON_BLOCKING_ERROR",
44
+ "ATTACHMENT_HOOK_STOPPED_CONTINUATION",
45
+ "ATTACHMENT_HOOK_SUCCESS",
34
46
  "create_loop_agent",
35
47
  "create_agent_session",
36
48
  "AgentSession",
@@ -21,7 +21,7 @@ Agent Loop 退出逻辑与扩展状态定义。
21
21
 
22
22
  from __future__ import annotations
23
23
 
24
- from typing import Any, TypedDict
24
+ from typing import Any, NotRequired, TypedDict
25
25
 
26
26
  from langchain_core.messages import AIMessage
27
27
 
@@ -260,6 +260,9 @@ class AgentLoopState(TypedDict):
260
260
  max_output_tokens_override: int | None # max_output_tokens 升档参数
261
261
  max_output_tokens_recovery_count: int # max_output_tokens 恢复计数
262
262
  __hook_result__: dict[str, Any] | None # 新 Hook 聚合结果(loop_controller 首选读取)
263
+ _hook_ui_events: NotRequired[
264
+ list[dict[str, Any]]
265
+ ] # per-script UI 事件队列;节点 patch 替换,非 add_messages 累积
263
266
  _hook_engine: Any | None # Hook 引擎实例(hook 节点/edge 读取)
264
267
  _hook_runner: Any | None # Hook 执行协作者(hook 节点/edge 读取)
265
268
  _session_env: dict[str, str] # SESSION_START hook 注入的会话级环境变量
@@ -34,6 +34,7 @@ from langgraph.graph.state import StateGraph
34
34
  from langgraph.prebuilt.tool_node import ToolCallWithContext, ToolNode
35
35
  from langgraph.types import Send
36
36
  from ..hook.async_hook_runner import AsyncHookRunner
37
+ from ..hook.hook_projection import hook_result_to_event_dict
37
38
  from ..hook.types import HookContext, HookEvent
38
39
 
39
40
  # 导入事件发射器(CLI Phase 1A 骨架)
@@ -84,6 +85,7 @@ def _execute_hook_common(
84
85
  tool_name: str | None = None,
85
86
  tool_input: dict[str, Any] | None = None,
86
87
  tool_result: Any = None,
88
+ tool_call_id: str | None = None,
87
89
  ) -> dict[str, Any] | None:
88
90
  hook_engine = state.get("_hook_engine")
89
91
  if hook_engine is None:
@@ -102,15 +104,21 @@ def _execute_hook_common(
102
104
  ctx_kwargs["tool_input"] = tool_input
103
105
  if tool_result is not None:
104
106
  ctx_kwargs["tool_result"] = tool_result
107
+ if tool_call_id is not None:
108
+ ctx_kwargs["tool_call_id"] = tool_call_id
105
109
  ctx = HookContext(**ctx_kwargs)
106
110
  result = hook_runner.run(hook_engine, ctx)
107
- return {
108
- "prevent_continuation": bool(result.prevent_continuation),
109
- "blocking_errors": list(result.blocking_errors) or None,
110
- "permission_behavior": result.permission_behavior,
111
- "hook_permission_decision_reason": result.hook_permission_decision_reason,
112
- "updated_input": result.updated_input,
113
- }
111
+ hook_dict = hook_result_to_event_dict(
112
+ result,
113
+ tool_call_id=tool_call_id,
114
+ )
115
+ emitter = getattr(hook_engine, "_event_emitter", None)
116
+ if emitter is not None and hasattr(emitter, "drain_ui_events"):
117
+ pending = emitter.drain_ui_events()
118
+ if pending:
119
+ # 每次 hook 调用替换列表(非累积);LangGraph 对未注解键为 last-write-wins
120
+ state["_hook_ui_events"] = pending
121
+ return hook_dict
114
122
 
115
123
 
116
124
  def _execute_hook_for_tool(
@@ -120,6 +128,7 @@ def _execute_hook_for_tool(
120
128
  tool_name: str,
121
129
  tool_input: dict[str, Any] | None,
122
130
  tool_result: Any = None,
131
+ tool_call_id: str | None = None,
123
132
  ) -> dict[str, Any] | None:
124
133
  return _execute_hook_common(
125
134
  state,
@@ -127,6 +136,7 @@ def _execute_hook_for_tool(
127
136
  tool_name=tool_name,
128
137
  tool_input=tool_input,
129
138
  tool_result=tool_result,
139
+ tool_call_id=tool_call_id,
130
140
  )
131
141
 
132
142
 
@@ -679,6 +689,7 @@ class LoopControllerEdge:
679
689
  event=HookEvent.PRE_TOOL_USE,
680
690
  tool_name=tool_name,
681
691
  tool_input=tool_args if isinstance(tool_args, dict) else {},
692
+ tool_call_id=str(tool_call.get("id") or "") or None,
682
693
  )
683
694
  next_tool_call = tool_call
684
695
  blocked_message: ToolMessage | None = None
@@ -812,6 +823,7 @@ def _make_tools_to_model_edge(
812
823
  tool_name=str(tc.get("name") or ""),
813
824
  tool_input=tc.get("args") if isinstance(tc.get("args"), dict) else {},
814
825
  tool_result=getattr(tm, "content", None),
826
+ tool_call_id=str(getattr(tm, "tool_call_id", "") or "") or None,
815
827
  )
816
828
  if isinstance(hook_result, dict):
817
829
  state["__hook_result__"] = hook_result
@@ -15,7 +15,16 @@ from .config import HookCandidate, HookCandidateDecision, HookSpec, HooksConfigS
15
15
  from .async_hook_runner import AsyncHookRunner
16
16
  from .engine import HookEngine
17
17
  from .executors import AgentExecutor, CommandExecutor, HttpExecutor, PromptExecutor
18
- from .graph_wiring import HookGraphWiring
18
+ from .graph_wiring import HookGraphWiring, derive_hook_outcome
19
+ from .hook_projection import (
20
+ ATTACHMENT_HOOK_BLOCKING_ERROR,
21
+ ATTACHMENT_HOOK_CANCELLED,
22
+ ATTACHMENT_HOOK_NON_BLOCKING_ERROR,
23
+ ATTACHMENT_HOOK_STOPPED_CONTINUATION,
24
+ ATTACHMENT_HOOK_SUCCESS,
25
+ derive_attachment_type,
26
+ hook_result_to_event_dict,
27
+ )
19
28
  from .registry import HookRegistry
20
29
  from .trust import WorkspaceTrustChecker
21
30
  from .types import (
@@ -27,6 +36,11 @@ from .types import (
27
36
  )
28
37
 
29
38
  __all__ = [
39
+ "ATTACHMENT_HOOK_BLOCKING_ERROR",
40
+ "ATTACHMENT_HOOK_CANCELLED",
41
+ "ATTACHMENT_HOOK_NON_BLOCKING_ERROR",
42
+ "ATTACHMENT_HOOK_STOPPED_CONTINUATION",
43
+ "ATTACHMENT_HOOK_SUCCESS",
30
44
  "AggregatedHookResult",
31
45
  "AsyncHookRunner",
32
46
  "HookCandidate",
@@ -45,4 +59,7 @@ __all__ = [
45
59
  "PromptExecutor",
46
60
  "AgentExecutor",
47
61
  "WorkspaceTrustChecker",
62
+ "derive_attachment_type",
63
+ "derive_hook_outcome",
64
+ "hook_result_to_event_dict",
48
65
  ]
@@ -37,6 +37,7 @@ from .types import (
37
37
  HookResult,
38
38
  PermissionBehavior,
39
39
  )
40
+ from .hook_projection import build_hook_info
40
41
  from .trust import WorkspaceTrustChecker
41
42
 
42
43
  if TYPE_CHECKING:
@@ -97,6 +98,7 @@ class HookEngine:
97
98
  self._trust_checker = trust_checker
98
99
 
99
100
  async def execute(self, ctx: HookContext) -> AggregatedHookResult:
101
+ batch_started_at = time.perf_counter()
100
102
  candidates, skipped = self._snapshot.get_candidates_with_decisions(ctx)
101
103
  self._emit_skipped_records(ctx, skipped)
102
104
  if not candidates:
@@ -119,15 +121,23 @@ class HookEngine:
119
121
  ]
120
122
 
121
123
  for candidate in sequential_candidates:
122
- one = await self._run_with_record(candidate, ctx)
124
+ one = await self._run_with_record(candidate, ctx, result)
123
125
  self._merge(result, one)
124
126
 
125
127
  if parallel_candidates:
126
- parallel_results = await asyncio.gather(
127
- *(self._run_with_record(candidate, ctx) for candidate in parallel_candidates)
128
+
129
+ async def _run_parallel(candidate: HookCandidate) -> tuple[HookResult, AggregatedHookResult]:
130
+ local = AggregatedHookResult()
131
+ one = await self._run_with_record(candidate, ctx, local)
132
+ return one, local
133
+
134
+ pairs = await asyncio.gather(
135
+ *(_run_parallel(candidate) for candidate in parallel_candidates)
128
136
  )
129
- for one in parallel_results:
137
+ for one, local in pairs:
130
138
  self._merge(result, one)
139
+ result.hook_infos.extend(local.hook_infos)
140
+ result.duration_ms = (time.perf_counter() - batch_started_at) * 1000
131
141
  return result
132
142
 
133
143
  def _filter_trusted_candidates(
@@ -144,11 +154,55 @@ class HookEngine:
144
154
  trusted.append(candidate)
145
155
  return trusted
146
156
 
147
- async def _run_with_record(self, candidate: HookCandidate, ctx: HookContext) -> HookResult:
157
+ async def _run_with_record(
158
+ self,
159
+ candidate: HookCandidate,
160
+ ctx: HookContext,
161
+ agg: AggregatedHookResult,
162
+ ) -> HookResult:
163
+ hook_name = str(candidate.spec.config.get("name") or candidate.spec.hook_id)
164
+ if self._event_emitter is not None:
165
+ self._event_emitter.emit_progress(
166
+ {
167
+ "hook_id": candidate.spec.hook_id,
168
+ "hook_name": hook_name,
169
+ "hook_event": ctx.event.value,
170
+ "tool_call_id": ctx.tool_call_id,
171
+ "session_id": ctx.session_id,
172
+ "node_level": False,
173
+ "phase": "running",
174
+ }
175
+ )
148
176
  started_at = time.perf_counter()
149
177
  one = await self._run_one(candidate, ctx)
150
178
  duration_ms = (time.perf_counter() - started_at) * 1000
151
179
  outcome = self._emit_execution_record(ctx, candidate, one, duration_ms)
180
+ info = build_hook_info(
181
+ hook_id=candidate.spec.hook_id,
182
+ hook_event=ctx.event.value,
183
+ config=candidate.spec.config,
184
+ outcome=outcome, # type: ignore[arg-type]
185
+ duration_ms=duration_ms,
186
+ stdout=one.stdout,
187
+ stderr=one.stderr,
188
+ exit_code=one.exit_code,
189
+ prevent_continuation=one.prevent_continuation,
190
+ blocking_errors=list(one.blocking_errors) or None,
191
+ tool_call_id=ctx.tool_call_id,
192
+ )
193
+ agg.hook_infos.append(info)
194
+ agg.duration_ms += duration_ms
195
+ if self._event_emitter is not None:
196
+ self._event_emitter.emit_response(
197
+ {
198
+ **info,
199
+ "combined_stdout": one.stdout,
200
+ "combined_stderr": one.stderr,
201
+ "node_level": False,
202
+ "phase": "finished",
203
+ "session_id": ctx.session_id,
204
+ }
205
+ )
152
206
  if outcome == "success" and candidate.spec.on_success is not None:
153
207
  candidate.spec.on_success()
154
208
  return one
@@ -245,6 +299,10 @@ class HookEngine:
245
299
  outcome=outcome,
246
300
  prevent_continuation=result.prevent_continuation,
247
301
  duration_ms=duration_ms,
302
+ tool_call_id=ctx.tool_call_id,
303
+ stdout=result.stdout,
304
+ stderr=result.stderr,
305
+ exit_code=result.exit_code,
248
306
  )
249
307
  self._try_emit_record(ctx.session_id, record)
250
308
  return outcome
@@ -19,26 +19,17 @@ from uuid import uuid4
19
19
 
20
20
  from .async_hook_runner import AsyncHookRunner
21
21
  from .engine import HookEngine
22
+ from .hook_projection import derive_hook_outcome, hook_result_to_event_dict
22
23
  from .types import AggregatedHookResult, HookContext, HookEvent
23
24
 
24
25
 
25
- def _to_hook_result_dict(result: AggregatedHookResult) -> dict[str, Any]:
26
- """将 AggregatedHookResult 转换为字典,包含 Hook 输出结果(stdout/stderr/exit_code)。"""
27
- return {
28
- "prevent_continuation": result.prevent_continuation,
29
- "blocking_errors": list(result.blocking_errors) or None,
30
- "permission_behavior": result.permission_behavior,
31
- "hook_permission_decision_reason": result.hook_permission_decision_reason,
32
- "additional_contexts": list(result.additional_contexts),
33
- "updated_input": result.updated_input,
34
- "state_patch": dict(result.state_patch),
35
- # Hook 输出结果(对齐 CC hook_response)
36
- "stdouts": list(result.stdouts) or None,
37
- "stderrs": list(result.stderrs) or None,
38
- "exit_codes": list(result.exit_codes) or None,
39
- "combined_stdout": result.combined_stdout or None,
40
- "combined_stderr": result.combined_stderr or None,
41
- }
26
+ def _to_hook_result_dict(
27
+ result: AggregatedHookResult,
28
+ *,
29
+ tool_call_id: str | None = None,
30
+ ) -> dict[str, Any]:
31
+ """兼容别名:图节点 __hook_result__ 与事件 adapter 共用投影。"""
32
+ return hook_result_to_event_dict(result, tool_call_id=tool_call_id)
42
33
 
43
34
 
44
35
  @dataclass
@@ -71,6 +62,7 @@ class HookGraphWiring:
71
62
  result = self._execute_sync(HookEvent.LOOP_START, state_with_run_id)
72
63
  if result is not None:
73
64
  patch["__hook_result__"] = _to_hook_result_dict(result)
65
+ patch.update(self._drain_hook_ui_events())
74
66
  if result.state_patch:
75
67
  patch.update(dict(result.state_patch))
76
68
  return patch
@@ -78,8 +70,10 @@ class HookGraphWiring:
78
70
  def before_model_node(self, state: dict[str, Any], runtime: Any) -> dict[str, Any]:
79
71
  result = self._execute_sync(HookEvent.BEFORE_MODEL, state)
80
72
  patch = {"__hook_result__": _to_hook_result_dict(result)} if result is not None else {}
81
- if result is not None and result.state_patch:
82
- patch.update(dict(result.state_patch))
73
+ if result is not None:
74
+ patch.update(self._drain_hook_ui_events())
75
+ if result.state_patch:
76
+ patch.update(dict(result.state_patch))
83
77
  if self.trace_lifecycle_collector is not None:
84
78
  patch.update(self.trace_lifecycle_collector.before_model_node(state))
85
79
  return patch
@@ -87,8 +81,10 @@ class HookGraphWiring:
87
81
  def after_model_node(self, state: dict[str, Any], runtime: Any) -> dict[str, Any]:
88
82
  result = self._execute_sync(HookEvent.AFTER_MODEL, state)
89
83
  patch = {"__hook_result__": _to_hook_result_dict(result)} if result is not None else {}
90
- if result is not None and result.state_patch:
91
- patch.update(dict(result.state_patch))
84
+ if result is not None:
85
+ patch.update(self._drain_hook_ui_events())
86
+ if result.state_patch:
87
+ patch.update(dict(result.state_patch))
92
88
  if self.session_memory is not None:
93
89
  self.session_memory.maybe_trigger(state)
94
90
  if self.trace_lifecycle_collector is not None:
@@ -118,6 +114,7 @@ class HookGraphWiring:
118
114
  if result is None:
119
115
  return {}
120
116
  patch = {"__hook_result__": _to_hook_result_dict(result)}
117
+ patch.update(self._drain_hook_ui_events())
121
118
  if result.state_patch:
122
119
  patch.update(dict(result.state_patch))
123
120
  return patch
@@ -125,8 +122,10 @@ class HookGraphWiring:
125
122
  def loop_end_node(self, state: dict[str, Any], runtime: Any) -> dict[str, Any]:
126
123
  result = self._execute_sync(HookEvent.LOOP_END, state)
127
124
  patch = {"__hook_result__": _to_hook_result_dict(result)} if result is not None else {}
128
- if result is not None and result.state_patch:
129
- patch.update(dict(result.state_patch))
125
+ if result is not None:
126
+ patch.update(self._drain_hook_ui_events())
127
+ if result.state_patch:
128
+ patch.update(dict(result.state_patch))
130
129
  if self.trace_lifecycle_collector is not None:
131
130
  patch.update(self.trace_lifecycle_collector.loop_end_node(state))
132
131
  return patch
@@ -137,5 +136,14 @@ class HookGraphWiring:
137
136
  ctx = HookContext(event=event, state=state, session_id=state.get("_run_id"))
138
137
  return self.hook_runner.run(self.hook_engine, ctx)
139
138
 
139
+ def _drain_hook_ui_events(self) -> dict[str, Any]:
140
+ emitter = getattr(self.hook_engine, "_event_emitter", None)
141
+ if emitter is None or not hasattr(emitter, "drain_ui_events"):
142
+ return {}
143
+ pending = emitter.drain_ui_events()
144
+ if not pending:
145
+ return {}
146
+ return {"_hook_ui_events": pending}
147
+
140
148
 
141
- __all__ = ["HookGraphWiring"]
149
+ __all__ = ["HookGraphWiring", "_to_hook_result_dict", "derive_hook_outcome"]
@@ -0,0 +1,164 @@
1
+ """
2
+ hook_projection.py — Hook 结果到 LangchainAgent 事件的 SDK 侧投影(对齐 CC attachment / hook_response)。
3
+
4
+ 职责:
5
+ 集中推导 outcome、attachment_type,并将 AggregatedHookResult / 单 hook 执行信息转为事件 data dict。
6
+
7
+ 链路位置:
8
+ graph_wiring、graph_edges、HookEventEmitter、langchain_agentx_event_adapter 共用。
9
+
10
+ 当前裁剪范围:
11
+ 仅结构化投影;不做 CLI 展示决策。
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from typing import Any
17
+
18
+ from .types import AggregatedHookResult, HookOutcome
19
+
20
+ AttachmentType = str
21
+
22
+ ATTACHMENT_HOOK_SUCCESS = "hook_success"
23
+ ATTACHMENT_HOOK_BLOCKING_ERROR = "hook_blocking_error"
24
+ ATTACHMENT_HOOK_NON_BLOCKING_ERROR = "hook_non_blocking_error"
25
+ ATTACHMENT_HOOK_STOPPED_CONTINUATION = "hook_stopped_continuation"
26
+ ATTACHMENT_HOOK_CANCELLED = "hook_cancelled"
27
+
28
+
29
+ def derive_hook_outcome(result: AggregatedHookResult) -> HookOutcome:
30
+ """从聚合结果推导 outcome(与 HookEngine._emit_execution_record 语义对齐)。"""
31
+ if result.prevent_continuation or result.blocking_errors:
32
+ return "blocking"
33
+ if any(code != 0 for code in result.exit_codes):
34
+ return "non_blocking_error"
35
+ return "success"
36
+
37
+
38
+ def derive_attachment_type(
39
+ result: AggregatedHookResult,
40
+ outcome: HookOutcome | None = None,
41
+ ) -> AttachmentType:
42
+ """推导 CC 风格 attachment_type(CLI 仅据此选控件)。"""
43
+ resolved = outcome or derive_hook_outcome(result)
44
+ if result.prevent_continuation and not result.blocking_errors:
45
+ return ATTACHMENT_HOOK_STOPPED_CONTINUATION
46
+ if resolved == "blocking" or result.blocking_errors:
47
+ return ATTACHMENT_HOOK_BLOCKING_ERROR
48
+ if resolved == "non_blocking_error":
49
+ return ATTACHMENT_HOOK_NON_BLOCKING_ERROR
50
+ if resolved == "cancelled":
51
+ return ATTACHMENT_HOOK_CANCELLED
52
+ return ATTACHMENT_HOOK_SUCCESS
53
+
54
+
55
+ def hook_display_name(hook_id: str, hook_event: str, config: dict[str, Any]) -> str:
56
+ """对齐 CC ``hookEvent:matcher`` 展示名(config.name 优先)。"""
57
+ name = config.get("name")
58
+ if isinstance(name, str) and name.strip():
59
+ return name.strip()
60
+ return hook_id or hook_event
61
+
62
+
63
+ def derive_attachment_type_for_hook(
64
+ *,
65
+ outcome: HookOutcome,
66
+ prevent_continuation: bool = False,
67
+ blocking_errors: list[str] | None = None,
68
+ exit_codes: list[int] | None = None,
69
+ ) -> AttachmentType:
70
+ """单条 hook 的 attachment_type(避免为 build_hook_info 构造假 AggregatedHookResult)。"""
71
+ blocking = list(blocking_errors or [])
72
+ if prevent_continuation and not blocking:
73
+ return ATTACHMENT_HOOK_STOPPED_CONTINUATION
74
+ if outcome == "blocking" or blocking:
75
+ return ATTACHMENT_HOOK_BLOCKING_ERROR
76
+ if outcome == "non_blocking_error" or any(
77
+ code != 0 for code in (exit_codes or [])
78
+ ):
79
+ return ATTACHMENT_HOOK_NON_BLOCKING_ERROR
80
+ if outcome == "cancelled":
81
+ return ATTACHMENT_HOOK_CANCELLED
82
+ return ATTACHMENT_HOOK_SUCCESS
83
+
84
+
85
+ def build_hook_info(
86
+ *,
87
+ hook_id: str,
88
+ hook_event: str,
89
+ config: dict[str, Any],
90
+ outcome: HookOutcome,
91
+ duration_ms: float,
92
+ stdout: str | None = None,
93
+ stderr: str | None = None,
94
+ exit_code: int | None = None,
95
+ prevent_continuation: bool = False,
96
+ blocking_errors: list[str] | None = None,
97
+ tool_call_id: str | None = None,
98
+ ) -> dict[str, Any]:
99
+ """单条 hook 执行明细(STOP 批次 summary / hook_infos[])。"""
100
+ return {
101
+ "hook_id": hook_id,
102
+ "hook_name": hook_display_name(hook_id, hook_event, config),
103
+ "hook_event": hook_event,
104
+ "outcome": outcome,
105
+ "duration_ms": duration_ms,
106
+ "stdout": stdout,
107
+ "stderr": stderr,
108
+ "exit_code": exit_code,
109
+ "prevent_continuation": prevent_continuation,
110
+ "blocking_errors": list(blocking_errors) if blocking_errors else None,
111
+ "tool_call_id": tool_call_id,
112
+ "attachment_type": derive_attachment_type_for_hook(
113
+ outcome=outcome,
114
+ prevent_continuation=prevent_continuation,
115
+ blocking_errors=blocking_errors,
116
+ exit_codes=[exit_code] if exit_code is not None else None,
117
+ ),
118
+ }
119
+
120
+
121
+ def hook_result_to_event_dict(
122
+ result: AggregatedHookResult,
123
+ *,
124
+ tool_call_id: str | None = None,
125
+ ) -> dict[str, Any]:
126
+ """将 AggregatedHookResult 转为 HOOK_FINISHED / 图节点 __hook_result__ 契约。"""
127
+ outcome = derive_hook_outcome(result)
128
+ payload: dict[str, Any] = {
129
+ "outcome": outcome,
130
+ "attachment_type": derive_attachment_type(result, outcome),
131
+ "prevent_continuation": result.prevent_continuation,
132
+ "blocking_errors": list(result.blocking_errors) or None,
133
+ "permission_behavior": result.permission_behavior,
134
+ "hook_permission_decision_reason": result.hook_permission_decision_reason,
135
+ "additional_contexts": list(result.additional_contexts) or None,
136
+ "updated_input": result.updated_input,
137
+ "state_patch": dict(result.state_patch) or None,
138
+ "stdouts": list(result.stdouts) or None,
139
+ "stderrs": list(result.stderrs) or None,
140
+ "exit_codes": list(result.exit_codes) or None,
141
+ "combined_stdout": result.combined_stdout or None,
142
+ "combined_stderr": result.combined_stderr or None,
143
+ "duration_ms": result.duration_ms if result.duration_ms > 0 else None,
144
+ "hook_infos": list(result.hook_infos) or None,
145
+ }
146
+ if tool_call_id:
147
+ payload["tool_call_id"] = tool_call_id
148
+ return payload
149
+
150
+
151
+ __all__ = [
152
+ "ATTACHMENT_HOOK_BLOCKING_ERROR",
153
+ "ATTACHMENT_HOOK_CANCELLED",
154
+ "ATTACHMENT_HOOK_NON_BLOCKING_ERROR",
155
+ "ATTACHMENT_HOOK_STOPPED_CONTINUATION",
156
+ "ATTACHMENT_HOOK_SUCCESS",
157
+ "AttachmentType",
158
+ "build_hook_info",
159
+ "derive_attachment_type",
160
+ "derive_attachment_type_for_hook",
161
+ "derive_hook_outcome",
162
+ "hook_display_name",
163
+ "hook_result_to_event_dict",
164
+ ]
@@ -57,6 +57,7 @@ class HookContext:
57
57
  - tool_name: 工具名称
58
58
  - tool_input: 工具输入参数
59
59
  - tool_result: 工具执行结果
60
+ - tool_call_id: LangGraph / LLM 工具调用 ID(PRE/POST 工具 hook)
60
61
  - workflow_id: Workflow ID(用于 Workflow 级事件)
61
62
  - workflow_session_id: Workflow 唯一会话 ID(Phase 1 新增)
62
63
  - workflow_path: Workflow 层级路径(Phase 1 新增)
@@ -81,6 +82,7 @@ class HookContext:
81
82
  tool_name: str | None = None
82
83
  tool_input: dict[str, Any] | None = None
83
84
  tool_result: Any = None
85
+ tool_call_id: str | None = None
84
86
 
85
87
  # === Workflow 级字段(Phase 1)===
86
88
  workflow_id: str | None = None
@@ -107,6 +109,10 @@ class HookExecutionRecord:
107
109
  outcome: HookOutcome
108
110
  prevent_continuation: bool
109
111
  duration_ms: float
112
+ tool_call_id: str | None = None
113
+ stdout: str | None = None
114
+ stderr: str | None = None
115
+ exit_code: int | None = None
110
116
 
111
117
 
112
118
  @dataclass
@@ -145,6 +151,9 @@ class AggregatedHookResult:
145
151
  # 合并后的完整输出(用于事件展示)
146
152
  combined_stdout: str = ""
147
153
  combined_stderr: str = ""
154
+ # 批次级:单 hook 明细(对齐 CC stop_hook_summary / hook_infos)
155
+ hook_infos: list[dict[str, Any]] = field(default_factory=list)
156
+ duration_ms: float = 0.0
148
157
 
149
158
 
150
159
  __all__ = [