langchain-agentx-python 0.2.5__tar.gz → 0.2.7__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 (440) hide show
  1. {langchain-agentx-python-0.2.5/langchain_agentx_python.egg-info → langchain-agentx-python-0.2.7}/PKG-INFO +1 -1
  2. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/graph_edges.py +14 -0
  3. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/model_node.py +26 -28
  4. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/model_nodes.py +24 -26
  5. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retrier.py +5 -2
  6. langchain-agentx-python-0.2.7/langchain_agentx/loop/model/retry_bridge.py +56 -0
  7. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/compatible_chat_openai.py +20 -1
  8. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7/langchain_agentx_python.egg-info}/PKG-INFO +1 -1
  9. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/pyproject.toml +1 -1
  10. langchain-agentx-python-0.2.5/langchain_agentx/loop/model/retry_bridge.py +0 -58
  11. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/LICENSE +0 -0
  12. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/README.md +0 -0
  13. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/__init__.py +0 -0
  14. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/__init__.py +0 -0
  15. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/__init__.py +0 -0
  16. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/clear.py +0 -0
  17. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/compact.py +0 -0
  18. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/memory.py +0 -0
  19. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  20. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/context.py +0 -0
  21. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/dispatcher.py +0 -0
  22. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/registry.py +0 -0
  23. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/result.py +0 -0
  24. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/types.py +0 -0
  25. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/__init__.py +0 -0
  26. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/model_profiles.yaml +0 -0
  27. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/model_profiles.yaml.example +0 -0
  28. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/__init__.py +0 -0
  29. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/__init__.py +0 -0
  30. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/agent_config.py +0 -0
  31. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  32. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  33. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  34. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/token_estimator.py +0 -0
  35. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/__init__.py +0 -0
  36. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  37. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/compaction_service.py +0 -0
  38. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/message_utils.py +0 -0
  39. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/pipeline.py +0 -0
  40. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/settings.py +0 -0
  41. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  42. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  43. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/base.py +0 -0
  44. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  45. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  46. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/noop.py +0 -0
  47. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/snip.py +0 -0
  48. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  49. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/types.py +0 -0
  50. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/__init__.py +0 -0
  51. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/exit_logic.py +0 -0
  52. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  53. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/__init__.py +0 -0
  54. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  55. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/factory.py +0 -0
  56. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/__init__.py +0 -0
  57. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  58. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/config.py +0 -0
  59. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/engine.py +0 -0
  60. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  61. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  62. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/command.py +0 -0
  63. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/http.py +0 -0
  64. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  65. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
  66. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/registry.py +0 -0
  67. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/trust.py +0 -0
  68. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/types.py +0 -0
  69. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/injection/__init__.py +0 -0
  70. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/injection/dedup.py +0 -0
  71. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/loop_abort.py +0 -0
  72. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/__init__.py +0 -0
  73. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  74. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retry_events.py +0 -0
  75. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retry_policy.py +0 -0
  76. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  77. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  78. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  79. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  80. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/__init__.py +0 -0
  81. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/builder.py +0 -0
  82. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/builtin.py +0 -0
  83. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/compact.py +0 -0
  84. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/sections.py +0 -0
  85. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/__init__.py +0 -0
  86. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/context.py +0 -0
  87. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  88. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  89. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/__init__.py +0 -0
  90. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  91. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/context.py +0 -0
  92. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  93. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/graph.py +0 -0
  94. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
  95. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/progress.py +0 -0
  96. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/prompt.py +0 -0
  97. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/runner.py +0 -0
  98. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/transcript.py +0 -0
  99. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/__init__.py +0 -0
  100. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/__init__.py +0 -0
  101. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/loader.py +0 -0
  102. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/resolver.py +0 -0
  103. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/runtime.py +0 -0
  104. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/sections.py +0 -0
  105. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/types.py +0 -0
  106. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/__init__.py +0 -0
  107. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/age.py +0 -0
  108. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
  109. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/extractor.py +0 -0
  110. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/loader.py +0 -0
  111. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/paths.py +0 -0
  112. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/recall.py +0 -0
  113. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/runtime.py +0 -0
  114. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/scan.py +0 -0
  115. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/types.py +0 -0
  116. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/__init__.py +0 -0
  117. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  118. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/prompts.py +0 -0
  119. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/session_memory.py +0 -0
  120. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/__init__.py +0 -0
  121. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  122. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  123. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  124. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  125. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  126. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  127. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  128. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  129. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  130. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/service.py +0 -0
  131. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/state.py +0 -0
  132. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/store.py +0 -0
  133. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/events/__init__.py +0 -0
  134. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
  135. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/__init__.py +0 -0
  136. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  137. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/logging_config.py +0 -0
  138. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  139. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/__init__.py +0 -0
  140. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/cli.py +0 -0
  141. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/service.py +0 -0
  142. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/store.py +0 -0
  143. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/ui.py +0 -0
  144. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/__init__.py +0 -0
  145. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/collector.py +0 -0
  146. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  147. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
  148. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/models.py +0 -0
  149. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  150. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  151. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  152. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/__init__.py +0 -0
  153. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/builtin.py +0 -0
  154. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/config.py +0 -0
  155. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/loader.py +0 -0
  156. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/manifest.py +0 -0
  157. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/registries.py +0 -0
  158. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/types.py +0 -0
  159. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/__init__.py +0 -0
  160. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/anthropic.py +0 -0
  161. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/env.py +0 -0
  162. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/model_profile.py +0 -0
  163. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/openai.py +0 -0
  164. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/__init__.py +0 -0
  165. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/agent_session.py +0 -0
  166. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_factory.py +0 -0
  167. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_recovery.py +0 -0
  168. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_session.py +0 -0
  169. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/factory.py +0 -0
  170. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/protocol.py +0 -0
  171. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/__init__.py +0 -0
  172. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  173. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/ids.py +0 -0
  174. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  175. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  176. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/types.py +0 -0
  177. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  178. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  179. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  180. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  181. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  182. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  183. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  184. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  185. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  186. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  187. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  188. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/output/sink.py +0 -0
  189. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  190. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  191. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  192. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  193. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  194. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  195. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  196. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  197. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  198. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  199. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  200. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
  201. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
  202. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
  203. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
  204. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
  205. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
  206. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  207. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  208. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
  209. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  210. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  211. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  212. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  213. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  214. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  215. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  216. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  217. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  218. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  219. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  220. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  221. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  222. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  223. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  224. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  225. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  226. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  227. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  228. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  229. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  230. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  231. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  232. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  233. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  234. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  235. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  236. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  237. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  238. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  239. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  240. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  241. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  242. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  243. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  244. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  245. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  246. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  247. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  248. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
  249. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  250. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
  251. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/__init__.py +0 -0
  252. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/adapter.py +0 -0
  253. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/base.py +0 -0
  254. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/errors.py +0 -0
  255. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  256. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/loader.py +0 -0
  257. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/models.py +0 -0
  258. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  259. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/pipeline.py +0 -0
  260. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/policy.py +0 -0
  261. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/registry.py +0 -0
  262. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  263. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  264. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  265. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  266. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  267. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  268. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/session_store.py +0 -0
  269. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  270. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  271. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/__init__.py +0 -0
  272. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/__init__.py +0 -0
  273. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/backend.py +0 -0
  274. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  275. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  276. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  277. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  278. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  279. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  280. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  281. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  282. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  283. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/limits.py +0 -0
  284. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/loader.py +0 -0
  285. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/models.py +0 -0
  286. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/prompt.py +0 -0
  287. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  288. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/config.py +0 -0
  289. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  290. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/scope.py +0 -0
  291. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/tool.py +0 -0
  292. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
  293. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
  294. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
  295. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/models.py +0 -0
  296. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
  297. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
  298. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
  299. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/__init__.py +0 -0
  300. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/ast_security.py +0 -0
  301. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/backend.py +0 -0
  302. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  303. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  304. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  305. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/limits.py +0 -0
  306. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  307. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/models.py +0 -0
  308. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/observability.py +0 -0
  309. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/output_utils.py +0 -0
  310. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/path_security.py +0 -0
  311. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/prompt.py +0 -0
  312. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  313. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  314. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  315. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/security.py +0 -0
  316. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  317. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  318. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/semantics.py +0 -0
  319. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/session_manager.py +0 -0
  320. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  321. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  322. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  323. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/tool.py +0 -0
  324. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  325. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/__init__.py +0 -0
  326. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/backend.py +0 -0
  327. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/batch_tool.py +0 -0
  328. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  329. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  330. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/limits.py +0 -0
  331. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/models.py +0 -0
  332. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/prompt.py +0 -0
  333. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/quote_match.py +0 -0
  334. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  335. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/settings_validator.py +0 -0
  336. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/staleness.py +0 -0
  337. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/tool.py +0 -0
  338. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/validator.py +0 -0
  339. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/__init__.py +0 -0
  340. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/models.py +0 -0
  341. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/pagination.py +0 -0
  342. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/prompt.py +0 -0
  343. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
  344. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  345. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/tool.py +0 -0
  346. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/__init__.py +0 -0
  347. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/backend.py +0 -0
  348. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/models.py +0 -0
  349. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/prompt.py +0 -0
  350. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  351. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/tool.py +0 -0
  352. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/__init__.py +0 -0
  353. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/backend.py +0 -0
  354. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/limits.py +0 -0
  355. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/models.py +0 -0
  356. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/prompt.py +0 -0
  357. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/tool.py +0 -0
  358. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  359. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/__init__.py +0 -0
  360. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  361. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/loader.py +0 -0
  362. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/models.py +0 -0
  363. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/policy.py +0 -0
  364. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/prompt.py +0 -0
  365. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/tool.py +0 -0
  366. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/__init__.py +0 -0
  367. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/hooks.py +0 -0
  368. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/limits.py +0 -0
  369. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/models.py +0 -0
  370. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/prompt.py +0 -0
  371. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/tool.py +0 -0
  372. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/__init__.py +0 -0
  373. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/models.py +0 -0
  374. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/prompt.py +0 -0
  375. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/tool.py +0 -0
  376. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/__init__.py +0 -0
  377. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/models.py +0 -0
  378. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/prompt.py +0 -0
  379. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/tool.py +0 -0
  380. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/__init__.py +0 -0
  381. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/hooks.py +0 -0
  382. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/models.py +0 -0
  383. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/prompt.py +0 -0
  384. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/tool.py +0 -0
  385. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/__init__.py +0 -0
  386. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/attachments.py +0 -0
  387. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/models.py +0 -0
  388. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/prompt.py +0 -0
  389. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  390. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/tool.py +0 -0
  391. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/__init__.py +0 -0
  392. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/backend.py +0 -0
  393. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/limits.py +0 -0
  394. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/models.py +0 -0
  395. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/prompt.py +0 -0
  396. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/tool.py +0 -0
  397. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/validator.py +0 -0
  398. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/__init__.py +0 -0
  399. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/cwd.py +0 -0
  400. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/host_platform.py +0 -0
  401. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/path_hierarchy.py +0 -0
  402. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/path_user_input.py +0 -0
  403. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/rg_executable.py +0 -0
  404. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/subprocess_text.py +0 -0
  405. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/temp_paths.py +0 -0
  406. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/unc_path.py +0 -0
  407. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  408. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/__init__.py +0 -0
  409. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/base.py +0 -0
  410. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/batch.py +0 -0
  411. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/dag.py +0 -0
  412. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
  413. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
  414. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
  415. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
  416. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
  417. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
  418. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
  419. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
  420. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/types.py +0 -0
  421. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/node.py +0 -0
  422. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  423. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/chaining.py +0 -0
  424. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
  425. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
  426. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
  427. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/routing.py +0 -0
  428. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/state.py +0 -0
  429. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/__init__.py +0 -0
  430. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/capabilities.py +0 -0
  431. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/config.py +0 -0
  432. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  433. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/resolver.py +0 -0
  434. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/validators.py +0 -0
  435. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/SOURCES.txt +0 -0
  436. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  437. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  438. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/requires.txt +0 -0
  439. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  440. {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.2.5
3
+ Version: 0.2.7
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
@@ -461,6 +461,20 @@ class LoopControllerEdge:
461
461
  ) -> str | None:
462
462
  if terminal_reason != TERMINAL_REASON_MAX_STEPS:
463
463
  return None
464
+
465
+ # 防重入保护:如果已经给过机会(force_text_exit=True),直接终止
466
+ if state.get("force_text_exit"):
467
+ # 已经注入过 MAX_STEPS_PROMPT 且清空了工具,模型仍返回 tool_calls 或未正确退出
468
+ # 此时直接终止,避免无限循环
469
+ emit_loop_decision_event(
470
+ state=state,
471
+ decision="terminal",
472
+ selected_edge=self._task_reconcile_or_end(state),
473
+ reason_code="max_steps_force_text_exit_failed",
474
+ evidence={"step": state.get("step", 0), "reason": "model did not comply with force_text_exit"},
475
+ )
476
+ return self._task_reconcile_or_end(state)
477
+
464
478
  messages = list(state.get("messages") or [])
465
479
  messages.append(AIMessage(content=MAX_STEPS_PROMPT))
466
480
  state["messages"] = messages
@@ -42,7 +42,7 @@ from ..exit.reason_codes import (
42
42
  TRANSITION_WITHHOLD_RECOVERY_RETRY,
43
43
  )
44
44
  from .retrier import ModelCallRetrier, RetryContext
45
- from .retry_bridge import build_retry_event_commands
45
+ from .retry_bridge import emit_retry_events
46
46
  from .tool_and_model_binding import get_bound_model, handle_model_output
47
47
  from .tool_transcript_guard import repair_messages_for_llm_invoke
48
48
 
@@ -295,14 +295,13 @@ class ModelNode(Runnable):
295
295
  compaction_settings=self._compaction_settings,
296
296
  )
297
297
  if synth is not None:
298
- model_response, retry_event_commands = synth, []
298
+ model_response = synth
299
299
  else:
300
- model_response, retry_event_commands = self._run_sync(request, state, config=config)
300
+ model_response, _ = self._run_sync(request, state, config=config)
301
301
 
302
302
  return self._build_state_update(
303
303
  state=state,
304
304
  model_response=model_response,
305
- retry_event_commands=retry_event_commands,
306
305
  mode="sync",
307
306
  )
308
307
 
@@ -319,14 +318,13 @@ class ModelNode(Runnable):
319
318
  compaction_settings=self._compaction_settings,
320
319
  )
321
320
  if synth is not None:
322
- model_response, retry_event_commands = synth, []
321
+ model_response = synth
323
322
  else:
324
- model_response, retry_event_commands = await self._arun_async(request, state, config=config)
323
+ model_response, _ = await self._arun_async(request, state, config=config)
325
324
 
326
325
  return self._build_state_update(
327
326
  state=state,
328
327
  model_response=model_response,
329
- retry_event_commands=retry_event_commands,
330
328
  mode="async",
331
329
  )
332
330
 
@@ -360,9 +358,12 @@ class ModelNode(Runnable):
360
358
  SystemMessage(content=effective) if effective is not None else None
361
359
  )
362
360
 
361
+ # force_text_exit: max_steps 达限时,清空工具列表强制模型输出文本
362
+ tools = [] if state.get("force_text_exit") else self._default_tools
363
+
363
364
  return _ModelRequest(
364
365
  model=self._model,
365
- tools=self._default_tools,
366
+ tools=tools,
366
367
  system_message=system_message,
367
368
  response_format=self._initial_response_format,
368
369
  messages=state.get("messages", []),
@@ -463,10 +464,9 @@ class ModelNode(Runnable):
463
464
  config: RunnableConfig | None = None,
464
465
  ) -> tuple[Any, list[Command]]:
465
466
  """同步重试与降级执行。"""
466
- retry_event_commands: list[Command] = []
467
467
  try:
468
468
  if self._retrier is None:
469
- return self._invoke_bound(request, config=config), retry_event_commands
469
+ return self._invoke_bound(request, config=config), []
470
470
  retry_ctx = RetryContext(
471
471
  scope="background" if state.get("retry_scope") == "background" else "foreground"
472
472
  )
@@ -474,11 +474,11 @@ class ModelNode(Runnable):
474
474
  lambda: self._invoke_bound(request, config=config),
475
475
  context=retry_ctx,
476
476
  )
477
- retry_event_commands = build_retry_event_commands(retry_result.events)
478
- return retry_result.value, retry_event_commands
477
+ emit_retry_events(retry_result.events)
478
+ return retry_result.value, []
479
479
  except Exception as primary_exc:
480
480
  if self._fallback_model is None:
481
- return _synthetic_api_error_model_response(primary_exc, self._name), retry_event_commands
481
+ return _synthetic_api_error_model_response(primary_exc, self._name), []
482
482
  logger.warning(
483
483
  "Primary model invoke failed; retrying once with fallback_model",
484
484
  exc_info=True,
@@ -486,15 +486,15 @@ class ModelNode(Runnable):
486
486
  req_fb = request.override(model=self._fallback_model)
487
487
  try:
488
488
  if self._retrier is None:
489
- return self._invoke_bound(req_fb, config=config), retry_event_commands
489
+ return self._invoke_bound(req_fb, config=config), []
490
490
  fb_result = self._retrier.invoke(
491
491
  lambda: self._invoke_bound(req_fb, config=config),
492
492
  context=retry_ctx,
493
493
  )
494
- retry_event_commands.extend(build_retry_event_commands(fb_result.events))
495
- return fb_result.value, retry_event_commands
494
+ emit_retry_events(fb_result.events)
495
+ return fb_result.value, []
496
496
  except Exception as fb_exc:
497
- return _synthetic_api_error_model_response(fb_exc, self._name), retry_event_commands
497
+ return _synthetic_api_error_model_response(fb_exc, self._name), []
498
498
 
499
499
  async def _arun_async(
500
500
  self,
@@ -504,10 +504,9 @@ class ModelNode(Runnable):
504
504
  config: RunnableConfig | None = None,
505
505
  ) -> tuple[Any, list[Command]]:
506
506
  """异步重试与降级执行。"""
507
- retry_event_commands: list[Command] = []
508
507
  try:
509
508
  if self._retrier is None:
510
- return await self._ainvoke_bound(request, config=config), retry_event_commands
509
+ return await self._ainvoke_bound(request, config=config), []
511
510
  retry_ctx = RetryContext(
512
511
  scope="background" if state.get("retry_scope") == "background" else "foreground"
513
512
  )
@@ -515,11 +514,11 @@ class ModelNode(Runnable):
515
514
  lambda: self._ainvoke_bound(request, config=config),
516
515
  context=retry_ctx,
517
516
  )
518
- retry_event_commands = build_retry_event_commands(retry_result.events)
519
- return retry_result.value, retry_event_commands
517
+ emit_retry_events(retry_result.events)
518
+ return retry_result.value, []
520
519
  except Exception as primary_exc:
521
520
  if self._fallback_model is None:
522
- return _synthetic_api_error_model_response(primary_exc, self._name), retry_event_commands
521
+ return _synthetic_api_error_model_response(primary_exc, self._name), []
523
522
  logger.warning(
524
523
  "Primary model ainvoke failed; retrying once with fallback_model",
525
524
  exc_info=True,
@@ -527,15 +526,15 @@ class ModelNode(Runnable):
527
526
  req_fb = request.override(model=self._fallback_model)
528
527
  try:
529
528
  if self._retrier is None:
530
- return await self._ainvoke_bound(req_fb, config=config), retry_event_commands
529
+ return await self._ainvoke_bound(req_fb, config=config), []
531
530
  fb_result = await self._retrier.ainvoke(
532
531
  lambda: self._ainvoke_bound(req_fb, config=config),
533
532
  context=retry_ctx,
534
533
  )
535
- retry_event_commands.extend(build_retry_event_commands(fb_result.events))
536
- return fb_result.value, retry_event_commands
534
+ emit_retry_events(fb_result.events)
535
+ return fb_result.value, []
537
536
  except Exception as fb_exc:
538
- return _synthetic_api_error_model_response(fb_exc, self._name), retry_event_commands
537
+ return _synthetic_api_error_model_response(fb_exc, self._name), []
539
538
 
540
539
  # ===== 退出逻辑与状态更新 =====
541
540
 
@@ -544,7 +543,6 @@ class ModelNode(Runnable):
544
543
  *,
545
544
  state: dict,
546
545
  model_response: Any,
547
- retry_event_commands: list[Command],
548
546
  mode: str,
549
547
  ) -> dict:
550
548
  """构建状态更新 + Command 列表。"""
@@ -584,7 +582,7 @@ class ModelNode(Runnable):
584
582
  base_state["structured_response"] = model_response.structured_response
585
583
  state_update["structured_response"] = model_response.structured_response
586
584
 
587
- return [*retry_event_commands, Command(update=base_state), Command(update=state_update)]
585
+ return [Command(update=base_state), Command(update=state_update)]
588
586
 
589
587
  def _find_last_ai_message(self, messages: list[Any]) -> AIMessage | None:
590
588
  for msg in reversed(messages):
@@ -37,7 +37,7 @@ from ..exit.reason_codes import (
37
37
  TRANSITION_WITHHOLD_RECOVERY_EXHAUSTED,
38
38
  TRANSITION_WITHHOLD_RECOVERY_RETRY,
39
39
  )
40
- from .retry_bridge import build_retry_event_commands
40
+ from .retry_bridge import emit_retry_events
41
41
  from .retrier import ModelCallRetrier, RetryContext
42
42
  from .tool_and_model_binding import get_bound_model, handle_model_output
43
43
  from .tool_transcript_guard import repair_messages_for_llm_invoke
@@ -200,7 +200,7 @@ class _ModelNodeBuilder:
200
200
  config: RunnableConfig | None = None,
201
201
  ) -> List[Command[Any]]:
202
202
  request = self._build_request(state, runtime)
203
- model_response, retry_event_commands = self._run_sync_with_retries(
203
+ model_response, _ = self._run_sync_with_retries(
204
204
  request,
205
205
  state,
206
206
  config=config,
@@ -208,7 +208,6 @@ class _ModelNodeBuilder:
208
208
  return self._build_commands_from_response(
209
209
  state=state,
210
210
  model_response=model_response,
211
- retry_event_commands=retry_event_commands,
212
211
  mode="sync",
213
212
  )
214
213
 
@@ -223,7 +222,7 @@ class _ModelNodeBuilder:
223
222
  config: RunnableConfig | None = None,
224
223
  ) -> List[Command[Any]]:
225
224
  request = self._build_request(state, runtime)
226
- model_response, retry_event_commands = await self._run_async_with_retries(
225
+ model_response, _ = await self._run_async_with_retries(
227
226
  request,
228
227
  state,
229
228
  config=config,
@@ -231,7 +230,6 @@ class _ModelNodeBuilder:
231
230
  return self._build_commands_from_response(
232
231
  state=state,
233
232
  model_response=model_response,
234
- retry_event_commands=retry_event_commands,
235
233
  mode="async",
236
234
  )
237
235
 
@@ -262,9 +260,12 @@ class _ModelNodeBuilder:
262
260
  )
263
261
  system_message = _SystemMessage(content=effective) if effective is not None else None
264
262
 
263
+ # force_text_exit: max_steps 达限时,清空工具列表强制模型输出文本
264
+ tools = [] if state.get("force_text_exit") else self._default_tools
265
+
265
266
  return _ModelRequest(
266
267
  model=self._model,
267
- tools=self._default_tools,
268
+ tools=tools,
268
269
  system_message=system_message,
269
270
  response_format=self._initial_response_format,
270
271
  messages=state["messages"],
@@ -371,10 +372,9 @@ class _ModelNodeBuilder:
371
372
  )
372
373
  if synth is not None:
373
374
  return synth, []
374
- retry_event_commands: list[Command[Any]] = []
375
375
  try:
376
376
  if self._retrier is None:
377
- return self._invoke_bound_sync(request, config=config), retry_event_commands
377
+ return self._invoke_bound_sync(request, config=config), []
378
378
  retry_ctx = RetryContext(
379
379
  scope="background" if state.get("retry_scope") == "background" else "foreground"
380
380
  )
@@ -382,11 +382,11 @@ class _ModelNodeBuilder:
382
382
  lambda: self._invoke_bound_sync(request, config=config),
383
383
  context=retry_ctx,
384
384
  )
385
- retry_event_commands = build_retry_event_commands(retry_result.events)
386
- return retry_result.value, retry_event_commands
385
+ emit_retry_events(retry_result.events)
386
+ return retry_result.value, []
387
387
  except Exception as primary_exc:
388
388
  if self._fallback_model is None:
389
- return _synthetic_api_error_model_response(primary_exc, self._name), retry_event_commands
389
+ return _synthetic_api_error_model_response(primary_exc, self._name), []
390
390
  logger.warning(
391
391
  "Primary model invoke failed; retrying once with fallback_model",
392
392
  exc_info=True,
@@ -395,15 +395,15 @@ class _ModelNodeBuilder:
395
395
  req_fb.model = self._fallback_model
396
396
  try:
397
397
  if self._retrier is None:
398
- return self._invoke_bound_sync(req_fb, config=config), retry_event_commands
398
+ return self._invoke_bound_sync(req_fb, config=config), []
399
399
  fb_result = self._retrier.invoke(
400
400
  lambda: self._invoke_bound_sync(req_fb, config=config),
401
401
  context=retry_ctx,
402
402
  )
403
- retry_event_commands.extend(build_retry_event_commands(fb_result.events))
404
- return fb_result.value, retry_event_commands
403
+ emit_retry_events(fb_result.events)
404
+ return fb_result.value, []
405
405
  except Exception as fb_exc:
406
- return _synthetic_api_error_model_response(fb_exc, self._name), retry_event_commands
406
+ return _synthetic_api_error_model_response(fb_exc, self._name), []
407
407
 
408
408
  async def _run_async_with_retries(
409
409
  self,
@@ -421,10 +421,9 @@ class _ModelNodeBuilder:
421
421
  )
422
422
  if synth is not None:
423
423
  return synth, []
424
- retry_event_commands: list[Command[Any]] = []
425
424
  try:
426
425
  if self._retrier is None:
427
- return await self._invoke_bound_async(request, config=config), retry_event_commands
426
+ return await self._invoke_bound_async(request, config=config), []
428
427
  retry_ctx = RetryContext(
429
428
  scope="background" if state.get("retry_scope") == "background" else "foreground"
430
429
  )
@@ -432,11 +431,11 @@ class _ModelNodeBuilder:
432
431
  lambda: self._invoke_bound_async(request, config=config),
433
432
  context=retry_ctx,
434
433
  )
435
- retry_event_commands = build_retry_event_commands(retry_result.events)
436
- return retry_result.value, retry_event_commands
434
+ emit_retry_events(retry_result.events)
435
+ return retry_result.value, []
437
436
  except Exception as primary_exc:
438
437
  if self._fallback_model is None:
439
- return _synthetic_api_error_model_response(primary_exc, self._name), retry_event_commands
438
+ return _synthetic_api_error_model_response(primary_exc, self._name), []
440
439
  logger.warning(
441
440
  "Primary model ainvoke failed; retrying once with fallback_model",
442
441
  exc_info=True,
@@ -445,22 +444,21 @@ class _ModelNodeBuilder:
445
444
  req_fb.model = self._fallback_model
446
445
  try:
447
446
  if self._retrier is None:
448
- return await self._invoke_bound_async(req_fb, config=config), retry_event_commands
447
+ return await self._invoke_bound_async(req_fb, config=config), []
449
448
  fb_result = await self._retrier.ainvoke(
450
449
  lambda: self._invoke_bound_async(req_fb, config=config),
451
450
  context=retry_ctx,
452
451
  )
453
- retry_event_commands.extend(build_retry_event_commands(fb_result.events))
454
- return fb_result.value, retry_event_commands
452
+ emit_retry_events(fb_result.events)
453
+ return fb_result.value, []
455
454
  except Exception as fb_exc:
456
- return _synthetic_api_error_model_response(fb_exc, self._name), retry_event_commands
455
+ return _synthetic_api_error_model_response(fb_exc, self._name), []
457
456
 
458
457
  def _build_commands_from_response(
459
458
  self,
460
459
  *,
461
460
  state: AgentState[Any],
462
461
  model_response: Any,
463
- retry_event_commands: list[Command[Any]],
464
462
  mode: str,
465
463
  ) -> List[Command[Any]]:
466
464
  last_ai_message = self._find_last_ai_message(model_response.result)
@@ -498,7 +496,7 @@ class _ModelNodeBuilder:
498
496
  if model_response.structured_response is not None:
499
497
  base_state["structured_response"] = model_response.structured_response
500
498
  state_update["structured_response"] = model_response.structured_response
501
- return [*retry_event_commands, Command(update=base_state), Command(update=state_update)]
499
+ return [Command(update=base_state), Command(update=state_update)]
502
500
 
503
501
  def _find_last_ai_message(self, messages: list[Any]) -> AIMessage | None:
504
502
  for msg in reversed(messages):
@@ -92,15 +92,18 @@ class RetryClassifier:
92
92
  @dataclass(slots=True)
93
93
  class ModelRetryConfig:
94
94
  max_retries: int = 10
95
- initial_delay: float = 0.5
95
+ initial_delay: float = 2.0
96
96
  backoff_factor: float = 2.0
97
- max_delay: float = 32.0
97
+ max_delay: float = 60.0
98
98
  jitter: bool = True
99
99
  heartbeat_threshold_seconds: float = 30.0
100
100
  heartbeat_interval_seconds: float = 30.0
101
101
  retry_on: Callable[[Exception], bool] = default_retry_on
102
102
  allow_background_529_retry: bool = False
103
103
  auth_recovery_handler: AuthRecoveryHandler | None = None
104
+ # Fallback 机制:连续 N 次 429/529 后触发 fallback
105
+ max_consecutive_rate_limit: int = 3
106
+ fallback_model: Any | None = None
104
107
 
105
108
 
106
109
  @dataclass(slots=True)
@@ -0,0 +1,56 @@
1
+ """
2
+ 模型重试事件处理。
3
+
4
+ 职责:
5
+ - 将 retrier 产出的事件记录到日志
6
+ - 不再写入 messages state,避免污染 LLM 上下文
7
+ - 事件通过 trace/observability 通道对外暴露(由外部系统订阅)
8
+
9
+ 重要变更:
10
+ 旧版本将重试事件转为 SystemMessage 写入 state,导致:
11
+ - LLM 上下文被大量重试提示污染
12
+ - _strip_system_messages_from_state 需要额外处理这些消息
13
+
14
+ 新版本仅记录日志和返回事件数据,由外部系统(如 trace 包)决定如何展示。
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import logging
20
+ from typing import Iterable
21
+
22
+ from .retry_events import ModelRetryEvent
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+
27
+ def _format_retry_event_message(event: ModelRetryEvent) -> str:
28
+ """格式化重试事件为可读字符串。"""
29
+ seconds = max(0, int(round(event.retry_in_ms / 1000)))
30
+ if event.event_type == "heartbeat":
31
+ prefix = "Retry still pending"
32
+ else:
33
+ prefix = "Retry scheduled"
34
+ return (
35
+ f"[{prefix}] in {seconds}s "
36
+ f"(attempt {event.attempt}/{event.max_retries}) "
37
+ f"{event.error_type}: {event.error_message}"
38
+ )
39
+
40
+
41
+ def emit_retry_events(events: Iterable[ModelRetryEvent]) -> None:
42
+ """
43
+ 发出重试事件(记录日志 + 返回原始事件数据)。
44
+
45
+ 不再返回 Command,避免重试事件写入 messages state。
46
+ 外部系统可通过 observability/trace 通道订阅这些事件。
47
+
48
+ Args:
49
+ events: 重试事件列表
50
+ """
51
+ for event in events:
52
+ msg = _format_retry_event_message(event)
53
+ logger.info("[ModelRetry] %s", msg)
54
+
55
+
56
+ __all__ = ["emit_retry_events", "_format_retry_event_message"]
@@ -29,7 +29,26 @@ from langchain_openai import ChatOpenAI
29
29
 
30
30
 
31
31
  class CompatibleChatOpenAI(ChatOpenAI):
32
- """OpenAI 兼容 ChatModel 封装(支持 reasoning_content)。"""
32
+ """OpenAI 兼容 ChatModel 封装(支持 reasoning_content)。
33
+
34
+ 重要:本类默认禁用 OpenAI SDK 内置重试(max_retries=0),由外层 ModelCallRetrier
35
+ 统一管理重试逻辑,避免双层重试导致请求放大问题。
36
+ """
37
+
38
+ def __init__(
39
+ self,
40
+ max_retries: int = 0,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ """
44
+ 初始化 CompatibleChatOpenAI。
45
+
46
+ Args:
47
+ max_retries: OpenAI SDK 内置重试次数,默认 0(由外层 ModelCallRetrier 接管)。
48
+ 如需启用 SDK 内置重试,显式传入 max_retries > 0。
49
+ **kwargs: 传递给 ChatOpenAI 的其他参数。
50
+ """
51
+ super().__init__(max_retries=max_retries, **kwargs)
33
52
 
34
53
  def _get_request_payload(
35
54
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.2.5
3
+ Version: 0.2.7
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
@@ -4,7 +4,7 @@
4
4
 
5
5
  [project]
6
6
  name = "langchain-agentx-python"
7
- version = "0.2.5"
7
+ version = "0.2.7"
8
8
  description = "LangChain/LangGraph-based agent utilities for CodeBaseX."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,58 +0,0 @@
1
- """
2
- 模型重试事件到 loop message 的桥接。
3
-
4
- 职责:
5
- - 将 retrier 产出的事件转为 SystemMessage
6
- - 由 model_node 统一并入 Command(update={"messages": ...})
7
- """
8
-
9
- from __future__ import annotations
10
-
11
- from typing import Iterable
12
-
13
- from langchain_core.messages import SystemMessage
14
- from langgraph.types import Command
15
-
16
- from .retry_events import (
17
- RETRY_EVENT_METADATA_FLAG,
18
- RETRY_EVENT_SUBTYPE,
19
- ModelRetryEvent,
20
- )
21
-
22
-
23
- def _format_retry_event_message(event: ModelRetryEvent) -> str:
24
- seconds = max(0, int(round(event.retry_in_ms / 1000)))
25
- if event.event_type == "heartbeat":
26
- prefix = "Retry still pending"
27
- else:
28
- prefix = "Retry scheduled"
29
- return (
30
- f"[{prefix}] in {seconds}s "
31
- f"(attempt {event.attempt}/{event.max_retries}) "
32
- f"{event.error_type}: {event.error_message}"
33
- )
34
-
35
-
36
- def build_retry_event_commands(events: Iterable[ModelRetryEvent]) -> list[Command]:
37
- commands: list[Command] = []
38
- for event in events:
39
- msg = SystemMessage(
40
- content=_format_retry_event_message(event),
41
- response_metadata={
42
- RETRY_EVENT_METADATA_FLAG: True,
43
- "subtype": RETRY_EVENT_SUBTYPE,
44
- "event_type": event.event_type,
45
- "retry_in_ms": event.retry_in_ms,
46
- "attempt": event.attempt,
47
- "max_retries": event.max_retries,
48
- "error": {
49
- "type": event.error_type,
50
- "message": event.error_message,
51
- },
52
- },
53
- )
54
- commands.append(Command(update={"messages": [msg]}))
55
- return commands
56
-
57
-
58
- __all__ = ["build_retry_event_commands"]