langchain-agentx-python 0.1.6__tar.gz → 0.1.8__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 (416) hide show
  1. {langchain-agentx-python-0.1.6/langchain_agentx_python.egg-info → langchain-agentx-python-0.1.8}/PKG-INFO +2 -2
  2. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/README.md +1 -1
  3. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/graph/factory.py +23 -5
  4. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/agent_memory.py +6 -0
  5. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/runtime.py +13 -1
  6. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/agent_session.py +7 -0
  7. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/factory.py +9 -3
  8. langchain-agentx-python-0.1.8/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +77 -0
  9. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +2 -1
  10. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +1 -1
  11. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/adapter.py +15 -0
  12. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/loader.py +2 -0
  13. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/models.py +7 -0
  14. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/pipeline.py +155 -5
  15. langchain-agentx-python-0.1.8/langchain_agentx/tools/agent/limits.py +62 -0
  16. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/__init__.py +18 -0
  17. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/constants.py +26 -0
  18. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/html_preview.py +122 -0
  19. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/models.py +120 -0
  20. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/prompt.py +45 -0
  21. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/tool.py +314 -0
  22. langchain-agentx-python-0.1.8/langchain_agentx/tools/ask_user_question/validators.py +157 -0
  23. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/tool.py +6 -1
  24. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/base.py +42 -2
  25. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/node.py +31 -35
  26. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/chaining.py +14 -1
  27. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +12 -1
  28. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/orchestrator.py +13 -1
  29. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/parallelization.py +13 -1
  30. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/routing.py +12 -1
  31. langchain-agentx-python-0.1.8/langchain_agentx/workspace/__init__.py +34 -0
  32. langchain-agentx-python-0.1.8/langchain_agentx/workspace/capabilities.py +234 -0
  33. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workspace/config.py +41 -1
  34. langchain-agentx-python-0.1.8/langchain_agentx/workspace/resolver.py +174 -0
  35. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8/langchain_agentx_python.egg-info}/PKG-INFO +2 -2
  36. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx_python.egg-info/SOURCES.txt +8 -0
  37. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/pyproject.toml +1 -1
  38. langchain-agentx-python-0.1.6/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -41
  39. langchain-agentx-python-0.1.6/langchain_agentx/tools/agent/limits.py +0 -26
  40. langchain-agentx-python-0.1.6/langchain_agentx/workspace/__init__.py +0 -13
  41. langchain-agentx-python-0.1.6/langchain_agentx/workspace/resolver.py +0 -74
  42. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/LICENSE +0 -0
  43. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/__init__.py +0 -0
  44. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/__init__.py +0 -0
  45. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/builtin/__init__.py +0 -0
  46. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/builtin/clear.py +0 -0
  47. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/builtin/compact.py +0 -0
  48. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/builtin/memory.py +0 -0
  49. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  50. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/context.py +0 -0
  51. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/dispatcher.py +0 -0
  52. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/registry.py +0 -0
  53. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/result.py +0 -0
  54. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/command/types.py +0 -0
  55. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/config/__init__.py +0 -0
  56. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/__init__.py +0 -0
  57. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/__init__.py +0 -0
  58. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/agent_config.py +0 -0
  59. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  60. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  61. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  62. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/config/token_estimator.py +0 -0
  63. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/__init__.py +0 -0
  64. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  65. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/compaction_service.py +0 -0
  66. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/message_utils.py +0 -0
  67. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/pipeline.py +0 -0
  68. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/settings.py +0 -0
  69. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  70. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  71. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/base.py +0 -0
  72. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  73. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  74. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/noop.py +0 -0
  75. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/snip.py +0 -0
  76. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  77. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/context/types.py +0 -0
  78. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/exit/__init__.py +0 -0
  79. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/exit/exit_logic.py +0 -0
  80. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  81. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/graph/__init__.py +0 -0
  82. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  83. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/graph/graph_edges.py +0 -0
  84. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/__init__.py +0 -0
  85. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  86. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/config.py +0 -0
  87. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/engine.py +0 -0
  88. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  89. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  90. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/executors/command.py +0 -0
  91. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/executors/http.py +0 -0
  92. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  93. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
  94. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/registry.py +0 -0
  95. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/trust.py +0 -0
  96. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/hook/types.py +0 -0
  97. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/injection/__init__.py +0 -0
  98. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/injection/dedup.py +0 -0
  99. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/loop_abort.py +0 -0
  100. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/__init__.py +0 -0
  101. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/model_node.py +0 -0
  102. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/model_nodes.py +0 -0
  103. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  104. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/retrier.py +0 -0
  105. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/retry_bridge.py +0 -0
  106. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/retry_events.py +0 -0
  107. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/retry_policy.py +0 -0
  108. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  109. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  110. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  111. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  112. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/prompt/__init__.py +0 -0
  113. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/prompt/builder.py +0 -0
  114. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/prompt/builtin.py +0 -0
  115. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/prompt/compact.py +0 -0
  116. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/prompt/sections.py +0 -0
  117. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/runtime/__init__.py +0 -0
  118. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/runtime/context.py +0 -0
  119. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  120. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  121. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/__init__.py +0 -0
  122. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  123. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/context.py +0 -0
  124. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  125. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/graph.py +0 -0
  126. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
  127. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/progress.py +0 -0
  128. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/prompt.py +0 -0
  129. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/runner.py +0 -0
  130. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/loop/subagent/transcript.py +0 -0
  131. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/__init__.py +0 -0
  132. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/__init__.py +0 -0
  133. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/loader.py +0 -0
  134. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/resolver.py +0 -0
  135. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/runtime.py +0 -0
  136. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/sections.py +0 -0
  137. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/instruction/types.py +0 -0
  138. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/__init__.py +0 -0
  139. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/age.py +0 -0
  140. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/extractor.py +0 -0
  141. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/loader.py +0 -0
  142. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/paths.py +0 -0
  143. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/recall.py +0 -0
  144. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/scan.py +0 -0
  145. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/memdir/types.py +0 -0
  146. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/session/__init__.py +0 -0
  147. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  148. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/session/prompts.py +0 -0
  149. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/memory/session/session_memory.py +0 -0
  150. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/__init__.py +0 -0
  151. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  152. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  153. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  154. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  155. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  156. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  157. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  158. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  159. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  160. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/service.py +0 -0
  161. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/state.py +0 -0
  162. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/evaluation/store.py +0 -0
  163. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/events/__init__.py +0 -0
  164. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
  165. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/logging/__init__.py +0 -0
  166. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  167. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/logging/logging_config.py +0 -0
  168. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  169. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/replay/__init__.py +0 -0
  170. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/replay/cli.py +0 -0
  171. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/replay/service.py +0 -0
  172. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/replay/store.py +0 -0
  173. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/replay/ui.py +0 -0
  174. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/__init__.py +0 -0
  175. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/collector.py +0 -0
  176. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  177. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
  178. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/models.py +0 -0
  179. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  180. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  181. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  182. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/__init__.py +0 -0
  183. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/builtin.py +0 -0
  184. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/config.py +0 -0
  185. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/loader.py +0 -0
  186. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/manifest.py +0 -0
  187. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/registries.py +0 -0
  188. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/plugin/types.py +0 -0
  189. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/__init__.py +0 -0
  190. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/anthropic.py +0 -0
  191. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
  192. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/env.py +0 -0
  193. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/model_profile.py +0 -0
  194. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/provider/openai.py +0 -0
  195. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/__init__.py +0 -0
  196. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/conversation_factory.py +0 -0
  197. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/conversation_recovery.py +0 -0
  198. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/conversation_session.py +0 -0
  199. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/session/protocol.py +0 -0
  200. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/__init__.py +0 -0
  201. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  202. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/core/ids.py +0 -0
  203. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  204. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  205. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/core/types.py +0 -0
  206. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  207. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  208. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  209. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  210. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  211. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  212. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  213. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  214. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  215. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  216. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  217. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/output/sink.py +0 -0
  218. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  219. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  220. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  221. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  222. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  223. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  224. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  225. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  226. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  227. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  228. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  229. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  230. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  231. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  232. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  233. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  234. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  235. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  236. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  237. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  238. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  239. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  240. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  241. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  242. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  243. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  244. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  245. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  246. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  247. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  248. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  249. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  250. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  251. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  252. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  253. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  254. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  255. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  256. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  257. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  258. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  259. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  260. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  261. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  262. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  263. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  264. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  265. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  266. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  267. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  268. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  269. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  270. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  271. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/__init__.py +0 -0
  272. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/base.py +0 -0
  273. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/errors.py +0 -0
  274. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  275. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  276. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/policy.py +0 -0
  277. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/registry.py +0 -0
  278. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  279. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  280. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  281. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  282. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  283. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  284. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/session_store.py +0 -0
  285. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  286. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  287. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/__init__.py +0 -0
  288. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/__init__.py +0 -0
  289. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/backend.py +0 -0
  290. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  291. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  292. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  293. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  294. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  295. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  296. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  297. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  298. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  299. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/loader.py +0 -0
  300. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/models.py +0 -0
  301. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/prompt.py +0 -0
  302. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  303. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/registry/config.py +0 -0
  304. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  305. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/scope.py +0 -0
  306. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/agent/tool.py +0 -0
  307. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/__init__.py +0 -0
  308. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/ast_security.py +0 -0
  309. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/backend.py +0 -0
  310. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  311. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  312. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  313. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/limits.py +0 -0
  314. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  315. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/models.py +0 -0
  316. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/observability.py +0 -0
  317. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/output_utils.py +0 -0
  318. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/path_security.py +0 -0
  319. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/prompt.py +0 -0
  320. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  321. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  322. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  323. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/security.py +0 -0
  324. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  325. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  326. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/semantics.py +0 -0
  327. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/session_manager.py +0 -0
  328. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  329. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  330. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  331. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/tool.py +0 -0
  332. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  333. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/__init__.py +0 -0
  334. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/backend.py +0 -0
  335. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/batch_tool.py +0 -0
  336. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  337. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  338. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/limits.py +0 -0
  339. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/models.py +0 -0
  340. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/prompt.py +0 -0
  341. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/quote_match.py +0 -0
  342. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  343. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/settings_validator.py +0 -0
  344. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/staleness.py +0 -0
  345. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/tool.py +0 -0
  346. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/edit/validator.py +0 -0
  347. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/__init__.py +0 -0
  348. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/models.py +0 -0
  349. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/pagination.py +0 -0
  350. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/prompt.py +0 -0
  351. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
  352. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  353. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/glob/tool.py +0 -0
  354. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/__init__.py +0 -0
  355. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/backend.py +0 -0
  356. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/models.py +0 -0
  357. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/prompt.py +0 -0
  358. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  359. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/grep/tool.py +0 -0
  360. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/__init__.py +0 -0
  361. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/backend.py +0 -0
  362. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/limits.py +0 -0
  363. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/models.py +0 -0
  364. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/prompt.py +0 -0
  365. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/read/tool.py +0 -0
  366. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  367. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/__init__.py +0 -0
  368. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  369. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/loader.py +0 -0
  370. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/models.py +0 -0
  371. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/policy.py +0 -0
  372. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/prompt.py +0 -0
  373. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/skill/tool.py +0 -0
  374. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/__init__.py +0 -0
  375. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/attachments.py +0 -0
  376. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/models.py +0 -0
  377. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/prompt.py +0 -0
  378. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  379. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/__init__.py +0 -0
  380. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/backend.py +0 -0
  381. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/limits.py +0 -0
  382. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/models.py +0 -0
  383. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/prompt.py +0 -0
  384. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/tool.py +0 -0
  385. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/tools/write/validator.py +0 -0
  386. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/__init__.py +0 -0
  387. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/cwd.py +0 -0
  388. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/host_platform.py +0 -0
  389. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/path_hierarchy.py +0 -0
  390. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/path_user_input.py +0 -0
  391. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/rg_executable.py +0 -0
  392. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/subprocess_text.py +0 -0
  393. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/temp_paths.py +0 -0
  394. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/unc_path.py +0 -0
  395. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  396. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/__init__.py +0 -0
  397. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/batch.py +0 -0
  398. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/dag.py +0 -0
  399. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
  400. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
  401. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
  402. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
  403. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
  404. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
  405. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
  406. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
  407. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/event_adapter/types.py +0 -0
  408. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  409. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workflow/state.py +0 -0
  410. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  411. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx/workspace/validators.py +0 -0
  412. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  413. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  414. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx_python.egg-info/requires.txt +0 -0
  415. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  416. {langchain-agentx-python-0.1.6 → langchain-agentx-python-0.1.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.1.6
3
+ Version: 0.1.8
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
@@ -471,7 +471,7 @@ pytest langchain_agentx/
471
471
 
472
472
  ### 代码规范
473
473
 
474
- 所有代码遵循项目编码规范:`docs/guides/coding-style-guide.md`
474
+ 所有代码遵循项目编码规范:`docs/guides/coding-style-guide.html`
475
475
 
476
476
  ## 贡献
477
477
 
@@ -251,7 +251,7 @@ pytest langchain_agentx/
251
251
 
252
252
  ### 代码规范
253
253
 
254
- 所有代码遵循项目编码规范:`docs/guides/coding-style-guide.md`
254
+ 所有代码遵循项目编码规范:`docs/guides/coding-style-guide.html`
255
255
 
256
256
  ## 贡献
257
257
 
@@ -101,7 +101,7 @@ from ..prompt import SystemPromptSection, build_effective_system_prompt
101
101
  from ...tools.agent.prompt import build_explore_plan_guidance
102
102
  from ..config import AgentLoopConfig, ModelContextResolver
103
103
  from ..config.runtime_settings import compute_recursion_limit
104
- from ...provider.model_profile import ModelProfileRegistry
104
+ from ...provider.model_profile import ModelProfileRegistry # re-exported for legacy tests
105
105
  from ...workspace import resolve_agent_workspace_config
106
106
 
107
107
  logger = logging.getLogger(__name__)
@@ -140,6 +140,7 @@ if TYPE_CHECKING:
140
140
  from langgraph.runtime import Runtime
141
141
  from ...task_runtime.core.interfaces import TaskRuntime
142
142
  from ...tool_runtime import AgentSessionStore, ToolRuntimeLoader
143
+ from ...workspace import RuntimeCapabilities
143
144
 
144
145
  class LoopGraphBuilder:
145
146
  """create_loop_agent 内部图构建器,不对外暴露。
@@ -189,6 +190,7 @@ class LoopGraphBuilder:
189
190
  workspace_trust_accepted: bool | None = None,
190
191
  raw_hooks: "HookRegistry | None" = None,
191
192
  enable_session_memory: bool = False,
193
+ capabilities: "RuntimeCapabilities | None" = None,
192
194
  ) -> None:
193
195
  self._raw_model = model
194
196
  self._raw_system_prompt = system_prompt
@@ -227,6 +229,7 @@ class LoopGraphBuilder:
227
229
  self._raw_workspace_trust_accepted = workspace_trust_accepted
228
230
  self._raw_hooks = raw_hooks
229
231
  self._raw_enable_session_memory = enable_session_memory
232
+ self._raw_capabilities = capabilities
230
233
 
231
234
  self._prepared = False
232
235
 
@@ -246,9 +249,14 @@ class LoopGraphBuilder:
246
249
  append_system_prompt = self._raw_append_system_prompt
247
250
  self._setup_loader_tools()
248
251
  self._resolve_workspace_config()
249
- self._model_profile_registry = ModelProfileRegistry.from_files(
250
- agent_home_dir=self._workspace_cfg.agent_home_dir
251
- )
252
+ if self._raw_capabilities is None:
253
+ from ...workspace import RuntimeCapabilities as _Caps
254
+
255
+ self._raw_capabilities = _Caps.build(
256
+ primary_workspace_root=self._workspace_cfg.workspace_root,
257
+ primary_agent_home=self._workspace_cfg.agent_home,
258
+ )
259
+ self._model_profile_registry = self._raw_capabilities.model_profile_registry
252
260
  self._model_context_resolver = ModelContextResolver()
253
261
  self._session_memory_manager: SessionMemoryManager | None = None
254
262
  self._session_memory_compact_bridge: SessionMemoryCompactBridge | None = None
@@ -280,6 +288,7 @@ class LoopGraphBuilder:
280
288
  MemoryPromptBootstrap(
281
289
  workspace_root=Path(self._workspace_root),
282
290
  agent_home=self._agent_home,
291
+ available_tools=self._loader_tools,
283
292
  ).build_sections()
284
293
  )
285
294
  self._dynamic_sections.extend(
@@ -287,6 +296,7 @@ class LoopGraphBuilder:
287
296
  workspace_cfg=self._workspace_cfg,
288
297
  is_subagent=self._raw_is_subagent,
289
298
  subagent_type=self._raw_subagent_type,
299
+ available_tools=self._loader_tools,
290
300
  ).build_sections()
291
301
  )
292
302
  system_message = self._build_system_message(
@@ -350,6 +360,8 @@ class LoopGraphBuilder:
350
360
  self._context_schema = self._raw_context_schema
351
361
  self._is_subagent = self._raw_is_subagent
352
362
  self._task_runtime = self._raw_task_runtime
363
+ if self._task_runtime is None and self._raw_capabilities is not None:
364
+ self._task_runtime = self._raw_capabilities.task_runtime
353
365
  self._task_notification_max_priority = self._raw_task_notification_max_priority
354
366
  self._queued_command_providers = list(self._raw_queued_command_providers)
355
367
  self._enable_tool_call_degradation_fix = self._raw_enable_tool_call_degradation_fix
@@ -544,7 +556,11 @@ class LoopGraphBuilder:
544
556
  def _resolve_trace_collector(self) -> TraceCollector | None:
545
557
  if not self._raw_enable_trace:
546
558
  return None
547
- return self._raw_trace_collector or TraceCollector(SqliteTraceStore.from_env())
559
+ if self._raw_trace_collector is not None:
560
+ return self._raw_trace_collector
561
+ if self._raw_capabilities is not None and self._raw_capabilities.trace_collector is not None:
562
+ return self._raw_capabilities.trace_collector
563
+ return TraceCollector(SqliteTraceStore.from_env())
548
564
 
549
565
  def _resolve_response_format_setup(
550
566
  self,
@@ -1349,6 +1365,7 @@ def create_loop_agent(
1349
1365
  workspace_trust_accepted: bool | None = None,
1350
1366
  hooks: "HookRegistry | None" = None,
1351
1367
  enable_session_memory: bool = False,
1368
+ capabilities: "RuntimeCapabilities | None" = None,
1352
1369
  ) -> CompiledStateGraph[
1353
1370
  AgentState[ResponseT], ContextT, _InputAgentState, _OutputAgentState[ResponseT]
1354
1371
  ]:
@@ -1392,6 +1409,7 @@ def create_loop_agent(
1392
1409
  workspace_trust_accepted=workspace_trust_accepted,
1393
1410
  raw_hooks=hooks,
1394
1411
  enable_session_memory=enable_session_memory,
1412
+ capabilities=capabilities,
1395
1413
  )
1396
1414
  tool_node = builder._build_tool_node()
1397
1415
  model_node = builder._build_model_nodes(tool_node)
@@ -123,15 +123,21 @@ class AgentMemoryPromptBootstrap:
123
123
  is_subagent: bool,
124
124
  subagent_type: str | None,
125
125
  scope: str = "project",
126
+ available_tools: list[Any] | None = None,
126
127
  ) -> None:
127
128
  self._workspace_cfg = workspace_cfg
128
129
  self._is_subagent = is_subagent
129
130
  self._subagent_type = subagent_type
130
131
  self._scope = scope
132
+ self._available_tools = available_tools or []
131
133
 
132
134
  def build_sections(self) -> list["SystemPromptSection"]:
135
+ # 只有 Agent 工具存在且是 subagent 时才注入 agent_memory prompt
133
136
  if not self._is_subagent or not self._subagent_type:
134
137
  return []
138
+ if not any(t.name == "Agent" for t in self._available_tools):
139
+ return []
140
+
135
141
  from langchain_agentx.loop.prompt.sections import section
136
142
 
137
143
  service = AgentMemoryPromptService(self._workspace_cfg)
@@ -25,13 +25,25 @@ if TYPE_CHECKING:
25
25
 
26
26
 
27
27
  class MemoryPromptBootstrap:
28
- def __init__(self, *, workspace_root: str | Path, agent_home: str) -> None:
28
+ def __init__(
29
+ self,
30
+ *,
31
+ workspace_root: str | Path,
32
+ agent_home: str,
33
+ available_tools: list[Any] | None = None,
34
+ ) -> None:
29
35
  self._workspace_root = workspace_root
30
36
  self._agent_home = agent_home
37
+ self._available_tools = available_tools or []
31
38
 
32
39
  def build_sections(self) -> list["SystemPromptSection"]:
33
40
  from langchain_agentx.loop.prompt.sections import section
34
41
 
42
+ # 只有 Write 工具存在时才注入 auto_memory prompt
43
+ # 否则 agent 会尝试写文件但没有工具,导致 fallback 到 bash → 权限拒绝
44
+ if not any(t.name == "write" for t in self._available_tools):
45
+ return []
46
+
35
47
  workspace_cfg = resolve_agent_workspace_config(
36
48
  workspace_root=self._workspace_root,
37
49
  agent_home=self._agent_home,
@@ -38,6 +38,7 @@ from ..plugin.loader import PluginLoader
38
38
  from ..plugin.registries import AgentRegistry, CommandRegistry as PluginCommandRegistry, SkillRegistry
39
39
  from ..plugin.types import PluginLoadResult
40
40
  from ..loop.subagent.transcript import SubagentTranscriptStore
41
+ from ..workspace import RuntimeCapabilities
41
42
  from ..workspace.config import AgentWorkspaceConfig
42
43
 
43
44
  logger = logging.getLogger(__name__)
@@ -58,6 +59,7 @@ class AgentSession:
58
59
  transcript_writer: SubagentTranscriptStore | None = None,
59
60
  container_type: str = "interactive",
60
61
  enable_trace: bool = True,
62
+ capabilities: RuntimeCapabilities | None = None,
61
63
  ) -> None:
62
64
  self._graph = graph
63
65
  self._graph_factory = graph_factory
@@ -71,6 +73,10 @@ class AgentSession:
71
73
  self._transcript_writer = transcript_writer
72
74
  self._last_transcript_uuid: str | None = None
73
75
  self._session_memory_manager: Any | None = None
76
+ self._capabilities = capabilities or RuntimeCapabilities.build(
77
+ primary_workspace_root=workspace_cfg.workspace_root,
78
+ primary_agent_home=workspace_cfg.agent_home,
79
+ )
74
80
  self._skill_registry = SkillRegistry()
75
81
  self._command_registry = PluginCommandRegistry()
76
82
  self._agent_registry = AgentRegistry()
@@ -270,6 +276,7 @@ class AgentSession:
270
276
  active_files_getter=getter,
271
277
  container_type=self._container_type,
272
278
  enable_trace=self._enable_trace,
279
+ capabilities=self._capabilities,
273
280
  )
274
281
 
275
282
  def _append_transcript_message(self, message: Any) -> None:
@@ -33,7 +33,7 @@ def create_agent_session(
33
33
  *,
34
34
  session_id: str | None = None,
35
35
  workspace_root: str | Path | None = None,
36
- agent_home: str = ".langchain_agentx",
36
+ agent_home: str | None = None,
37
37
  hooks: HookRegistry | None = None,
38
38
  hook_engine: Any | None = None,
39
39
  workspace_trust_prompter: Any | None = None,
@@ -42,10 +42,14 @@ def create_agent_session(
42
42
  enable_trace: bool = True,
43
43
  **loop_kwargs: Any,
44
44
  ) -> AgentSession:
45
- """创建默认走 graph_factory 注入路径的 AgentSession。"""
45
+ """创建默认走 graph_factory 注入路径的 AgentSession。
46
+
47
+ ``workspace_root`` / ``agent_home`` 为 ``None`` 时与 ``resolve_agent_workspace_config`` 默认链一致
48
+ (环境变量 ``LANGCHAIN_AGENTX_*`` 与产品默认 ``.langchain_agentx``)。
49
+ """
46
50
  resolved_session_id = session_id or f"session-{uuid4().hex}"
47
51
  workspace_cfg = resolve_agent_workspace_config(
48
- workspace_root=workspace_root or Path.cwd(),
52
+ workspace_root=workspace_root,
49
53
  agent_home=agent_home,
50
54
  )
51
55
  workspace_trust_accepted = _resolve_workspace_trust_accepted(
@@ -69,6 +73,7 @@ def create_agent_session(
69
73
  def _graph_factory(
70
74
  active_files_getter: Any = None,
71
75
  container_type: str = container_type,
76
+ capabilities: Any = None,
72
77
  **_ignored: Any,
73
78
  ):
74
79
  return create_loop_agent(
@@ -81,6 +86,7 @@ def create_agent_session(
81
86
  active_files_getter=active_files_getter,
82
87
  container_type=container_type,
83
88
  enable_trace=enable_trace,
89
+ capabilities=capabilities,
84
90
  **loop_kwargs,
85
91
  )
86
92
 
@@ -0,0 +1,77 @@
1
+ """
2
+ task_runtime/tasks/ai_analysis/base.py — 后台 AI 分析任务基类。
3
+
4
+ 职责:
5
+ 继承 BaseWorkflow,覆盖 container_type 为 background_task;
6
+ 提供占位 ``build_graph`` 满足 ABC;``run(**kwargs)`` 直接委派 ``_execute`` 并静默降级。
7
+
8
+ 链路位置:
9
+ 由后台任务调度器通过队列轮询触发。
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import logging
15
+ from abc import abstractmethod
16
+ from pathlib import Path
17
+ from typing import Any
18
+
19
+ from langgraph.graph import END, START, StateGraph
20
+
21
+ from ....loop.hook.registry import HookRegistry
22
+ from ....workflow.base import BaseWorkflow
23
+ from ....workflow.state import WorkflowState
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ class BackgroundAiTask(BaseWorkflow):
29
+ """后台 AI 分析任务基类。失败必须静默降级。"""
30
+
31
+ container_type: str = "background_task"
32
+
33
+ def __init__(
34
+ self,
35
+ workflow_id: str | None = None,
36
+ hook_registry: HookRegistry | None = None,
37
+ **kwargs: Any,
38
+ ) -> None:
39
+ # 历史调用方曾传 hook_engine;BaseWorkflow 使用 HookRegistry + HookEngine,此处丢弃兼容字段。
40
+ kwargs.pop("hook_engine", None)
41
+ wid = workflow_id or "background_task"
42
+ reg = hook_registry or HookRegistry()
43
+ if (
44
+ kwargs.get("capabilities") is None
45
+ and kwargs.get("workspace_root") is None
46
+ and kwargs.get("agent_home") is None
47
+ ):
48
+ kwargs.setdefault("workspace_root", Path.cwd())
49
+ kwargs.setdefault("agent_home", ".langchain_agentx")
50
+ super().__init__(workflow_id=wid, hook_registry=reg, **kwargs)
51
+
52
+ def build_graph(self) -> StateGraph:
53
+ """满足 BaseWorkflow ABC;后台任务实际入口为 ``run`` → ``_execute``,不编译执行本图。"""
54
+ graph = StateGraph(WorkflowState)
55
+
56
+ async def _placeholder(state: WorkflowState) -> WorkflowState:
57
+ return state
58
+
59
+ graph.add_node("_background_placeholder", _placeholder)
60
+ graph.add_edge(START, "_background_placeholder")
61
+ graph.add_edge("_background_placeholder", END)
62
+ return graph
63
+
64
+ async def run(self, **kwargs: Any) -> Any:
65
+ """执行后台逻辑;异常时静默降级为 ``None``(不调用 LangGraph ``super().run``)。"""
66
+ try:
67
+ return await self._execute(**kwargs)
68
+ except Exception:
69
+ logger.exception("%s 执行失败,静默降级", self.__class__.__name__)
70
+ return None
71
+
72
+ @abstractmethod
73
+ async def _execute(self, **kwargs: Any) -> Any:
74
+ """子类实现具体分析逻辑,结果写回外部存储。"""
75
+
76
+
77
+ __all__ = ["BackgroundAiTask"]
@@ -57,6 +57,7 @@ def try_start_trace_cleanup_after_compile(
57
57
 
58
58
  import langchain_agentx.task_runtime.tasks.ai_analysis # noqa: F401 — registry 侧载
59
59
 
60
+ from langchain_agentx.loop.hook.registry import HookRegistry
60
61
  from langchain_agentx.observability.evaluation.store import EvaluationStore
61
62
  from langchain_agentx.observability.trace.sqlite_store import SqliteTraceStore
62
63
  from langchain_agentx.task_runtime.tasks.ai_analysis.registry import registry
@@ -80,7 +81,7 @@ def try_start_trace_cleanup_after_compile(
80
81
  marker_cooldown_seconds=marker_cooldown_seconds,
81
82
  task_factory_kwargs={
82
83
  "graph_factory": _noop_graph_factory,
83
- "hook_engine": wiring.hook_engine,
84
+ "hook_registry": HookRegistry(),
84
85
  },
85
86
  )
86
87
  loop.create_task(scheduler.start())
@@ -60,7 +60,7 @@ class TraceCleanupScheduler(BackgroundAiTaskScheduler):
60
60
  enable_file_lock: 为 True 时用 ``portalocker`` 非阻塞独占锁,避免多进程同时跑 DELETE。
61
61
  lock_path / marker_path: 默认与 ``trace_store.db_path`` 同目录派生文件名。
62
62
  marker_cooldown_seconds: 非 None 时,marker 存在且距上次成功清理不足该秒数则跳过本轮(多进程节流);**None** 表示不按 marker 跳过(§4.1 Q5 幂等每轮)。
63
- task_factory_kwargs: 除 ``trace_store`` / ``evaluation_store`` 外传给 ``TraceCleanupTask`` 的 ``graph_factory`` / ``hook_engine`` 等。
63
+ task_factory_kwargs: 除 ``trace_store`` / ``evaluation_store`` 外传给 ``TraceCleanupTask`` 的 ``graph_factory`` / ``hook_registry`` 等。
64
64
  """
65
65
  db = Path(trace_store.db_path)
66
66
  self._trace_store = trace_store
@@ -160,6 +160,19 @@ class LangChainAdapter:
160
160
  except Exception:
161
161
  tool_config_path = None
162
162
 
163
+ channels: set[str] | None = None
164
+ raw_ch = configurable.get("channels") or configurable.get("active_channels")
165
+ if isinstance(raw_ch, (list, tuple, set)):
166
+ ch_set = {str(x).strip() for x in raw_ch if str(x).strip()}
167
+ channels = ch_set or None
168
+
169
+ question_preview_format: str | None = None
170
+ raw_pf = configurable.get("question_preview_format")
171
+ if isinstance(raw_pf, str) and raw_pf.strip():
172
+ low = raw_pf.strip().lower()
173
+ if low in ("markdown", "html"):
174
+ question_preview_format = low
175
+
163
176
  return ToolExecutionContext(
164
177
  tool_name=tool_name,
165
178
  # 回退顺序:显式 tool_call_id -> config.tool_call_id -> input.tool_call_id -> input.id -> run_id
@@ -187,8 +200,10 @@ class LangChainAdapter:
187
200
  trace_enabled=trace_enabled,
188
201
  cancel_event=cancel_ev,
189
202
  tool_config_path=tool_config_path,
203
+ channels=channels,
190
204
  trace_collector=trace_collector,
191
205
  trace_emit_session_id=trace_emit_session_id,
206
+ question_preview_format=question_preview_format,
192
207
  )
193
208
 
194
209
  def build_structured_tool(
@@ -106,6 +106,7 @@ class ToolRuntimeLoader:
106
106
  """
107
107
  from pathlib import Path
108
108
 
109
+ from langchain_agentx.tools.ask_user_question import AskUserQuestionTool
109
110
  from langchain_agentx.tools.bash import BashRuntimeTool
110
111
  from langchain_agentx.tools.glob import GlobRuntimeTool
111
112
  from langchain_agentx.tools.grep import GrepRuntimeTool
@@ -142,6 +143,7 @@ class ToolRuntimeLoader:
142
143
  )
143
144
  self.register(BashRuntimeTool())
144
145
  self.register(UserMessageTool())
146
+ self.register(AskUserQuestionTool())
145
147
 
146
148
  if include_agent:
147
149
  from langchain_agentx.tools.agent import AgentRuntimeTool
@@ -101,10 +101,17 @@ class ToolExecutionContext:
101
101
  """可选;由 ``RunnableConfig.configurable[\"cancel_event\"]`` 注入。set 后 Grep/Glob 应中断 rg。"""
102
102
  tool_config_path: str | None = None
103
103
  """可选;`LangChainAdapter` 由 workspace 解析的 `tool_runtime_config.json` 绝对路径(UserMessage v2+)。"""
104
+ channels: set[str] | None = None
105
+ """可选;当前激活渠道(如 ``{"cli"}`` / ``{"discord"}``),供 AskUserQuestion 等工具禁用无 TUI 场景。"""
104
106
  trace_collector: Any | None = None
105
107
  """可选;来自 graph state / configurable 的 `TraceCollector`,供 pipeline 发 `user_message_send`。"""
106
108
  trace_emit_session_id: str | None = None
107
109
  """可选;`emit_event(session_id=...)` 用,与 Trace 会话键(常为 `_run_id`)对齐。"""
110
+ question_preview_format: Literal["markdown", "html"] | None = None
111
+ """
112
+ 可选;宿主经 ``RunnableConfig.configurable["question_preview_format"]`` 注入,
113
+ 取值为 ``markdown`` 或 ``html``,供 AskUserQuestion v3 对 ``preview`` 做 HTML 校验门控。
114
+ """
108
115
 
109
116
 
110
117
  # ---------------------------------------------------------------------------
@@ -31,7 +31,8 @@ runtime/pipeline.py — 工具执行管道与输出大小管控
31
31
  作为“软提示防重复”策略的执行层硬约束替代。
32
32
 
33
33
  UserMessage v2:
34
- `truncate_if_needed` 之后对 `user_message` 工具发 `user_message_send`(`_emit_user_message_analytics`)。
34
+ `truncate_if_needed` 之后对 `user_message` `user_message_send`;
35
+ 对 `AskUserQuestion` 发 `ask_user_question_completed`(`_emit_post_invoke_analytics`)。
35
36
  """
36
37
 
37
38
  from __future__ import annotations
@@ -135,6 +136,115 @@ def _emit_user_message_analytics(
135
136
  logger.debug("user_message_send emit skipped: %s", exc)
136
137
 
137
138
 
139
+ _ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion"
140
+
141
+
142
+ def _try_envelope_pending_user_questions_gather(
143
+ *,
144
+ tool: RuntimeTool,
145
+ auth: AuthorizationDecision,
146
+ headless: bool,
147
+ ) -> ToolResultEnvelope | None:
148
+ """
149
+ AskUserQuestion:check_permissions 以 behavior=ask + metadata.gather_tool 表达「待 UI 收集答案」。
150
+ 在 sync/async pipeline 中于默认 ask→blocked 之前短路,返回 ok envelope(payload 含 questions)。
151
+ """
152
+ md = auth.metadata or {}
153
+ if md.get("gather_tool") != tool.name:
154
+ return None
155
+ if headless:
156
+ return blocked_envelope(
157
+ tool.name,
158
+ "AskUserQuestion requires interactive mode.",
159
+ policy_id="ask_user_question_headless",
160
+ )
161
+ return ToolResultEnvelope(
162
+ status="ok",
163
+ tool_name=tool.name,
164
+ summary=auth.ask_prompt or auth.message or "Answer questions?",
165
+ payload={
166
+ "pending_user_questions": True,
167
+ "questions": md.get("questions"),
168
+ },
169
+ meta={
170
+ "gather_tool": tool.name,
171
+ "permission": "pending_user_questions",
172
+ "policy_id": auth.policy_id,
173
+ },
174
+ )
175
+
176
+
177
+ def _emit_ask_user_question_analytics(
178
+ *,
179
+ tool: RuntimeTool,
180
+ parsed_data: dict[str, Any],
181
+ envelope: ToolResultEnvelope,
182
+ ctx: ToolExecutionContext,
183
+ ) -> None:
184
+ """对齐设计 v2:成功完成后发分析事件(依赖 trace_collector)。"""
185
+ if tool.name != _ASK_USER_QUESTION_TOOL_NAME:
186
+ return
187
+ if envelope.status != "ok":
188
+ return
189
+ meta_out = envelope.meta or {}
190
+ if meta_out.get("permission") == "pending_user_questions":
191
+ return
192
+ collector = ctx.trace_collector
193
+ session_id = ctx.trace_emit_session_id
194
+ if collector is None or not isinstance(session_id, str) or not session_id.strip():
195
+ return
196
+ try:
197
+ has_fn = getattr(collector, "has_session", None)
198
+ if callable(has_fn) and not has_fn(session_id):
199
+ return
200
+ except Exception:
201
+ return
202
+
203
+ questions = parsed_data.get("questions")
204
+ question_count = len(questions) if isinstance(questions, list) else 0
205
+ answers = parsed_data.get("answers") or {}
206
+ answered_count = len(answers) if isinstance(answers, dict) else 0
207
+ has_multi = False
208
+ if isinstance(questions, list):
209
+ for q in questions:
210
+ if isinstance(q, dict) and q.get("multiSelect") is True:
211
+ has_multi = True
212
+ break
213
+
214
+ payload: dict[str, Any] = {
215
+ "question_count": question_count,
216
+ "answered_count": answered_count,
217
+ "has_multi_select": has_multi,
218
+ }
219
+
220
+ try:
221
+ emit_fn = getattr(collector, "emit_event", None)
222
+ if not callable(emit_fn):
223
+ return
224
+ emit_fn(
225
+ session_id=session_id,
226
+ event_type="ask_user_question_completed",
227
+ payload=payload,
228
+ )
229
+ except Exception as exc:
230
+ logger.debug("ask_user_question_completed emit skipped: %s", exc)
231
+
232
+
233
+ def _emit_post_invoke_analytics(
234
+ *,
235
+ tool: RuntimeTool,
236
+ parsed_data: dict[str, Any],
237
+ envelope: ToolResultEnvelope,
238
+ ctx: ToolExecutionContext,
239
+ ) -> None:
240
+ _emit_user_message_analytics(
241
+ tool=tool, parsed_data=parsed_data, envelope=envelope, ctx=ctx
242
+ )
243
+ _emit_ask_user_question_analytics(
244
+ tool=tool, parsed_data=parsed_data, envelope=envelope, ctx=ctx
245
+ )
246
+
247
+
138
248
  # ---------------------------------------------------------------------------
139
249
  # PermissionAskInterrupt
140
250
  # ---------------------------------------------------------------------------
@@ -421,6 +531,26 @@ class ToolExecutorPipeline:
421
531
  )
422
532
  return env
423
533
  if auth.behavior == "ask":
534
+ gather = _try_envelope_pending_user_questions_gather(
535
+ tool=tool, auth=auth, headless=self._headless
536
+ )
537
+ if gather is not None:
538
+ self._attach_runtime_observability(
539
+ gather,
540
+ ctx=ctx,
541
+ events=[
542
+ {
543
+ "event": "permission_checked",
544
+ "behavior": "pending_user_questions",
545
+ "policy_id": auth.policy_id,
546
+ },
547
+ ],
548
+ decision_trace=(auth.metadata or {}).get("decision_trace"),
549
+ )
550
+ final_g = self._output_manager.truncate_if_needed(
551
+ gather, tool, ctx.tool_call_id
552
+ )
553
+ return final_g
424
554
  logger.warning(
425
555
  "tool permission requires ask tool=%s headless=%s policy_id=%s",
426
556
  tool.name,
@@ -462,7 +592,7 @@ class ToolExecutorPipeline:
462
592
  final_dedup = self._output_manager.truncate_if_needed(
463
593
  out, tool, ctx.tool_call_id
464
594
  )
465
- _emit_user_message_analytics(
595
+ _emit_post_invoke_analytics(
466
596
  tool=tool,
467
597
  parsed_data=parsed_data,
468
598
  envelope=final_dedup,
@@ -495,7 +625,7 @@ class ToolExecutorPipeline:
495
625
  final = self._output_manager.truncate_if_needed(
496
626
  envelope, tool, ctx.tool_call_id
497
627
  )
498
- _emit_user_message_analytics(
628
+ _emit_post_invoke_analytics(
499
629
  tool=tool,
500
630
  parsed_data=parsed_data,
501
631
  envelope=final,
@@ -554,6 +684,26 @@ class ToolExecutorPipeline:
554
684
  )
555
685
  return env
556
686
  if auth.behavior == "ask":
687
+ gather = _try_envelope_pending_user_questions_gather(
688
+ tool=tool, auth=auth, headless=self._headless
689
+ )
690
+ if gather is not None:
691
+ self._attach_runtime_observability(
692
+ gather,
693
+ ctx=ctx,
694
+ events=[
695
+ {
696
+ "event": "permission_checked",
697
+ "behavior": "pending_user_questions",
698
+ "policy_id": auth.policy_id,
699
+ },
700
+ ],
701
+ decision_trace=(auth.metadata or {}).get("decision_trace"),
702
+ )
703
+ final_g = self._output_manager.truncate_if_needed(
704
+ gather, tool, ctx.tool_call_id
705
+ )
706
+ return final_g
557
707
  logger.warning(
558
708
  "tool permission requires ask tool=%s headless=%s policy_id=%s",
559
709
  tool.name,
@@ -615,7 +765,7 @@ class ToolExecutorPipeline:
615
765
  final_dedup = self._output_manager.truncate_if_needed(
616
766
  out, tool, ctx.tool_call_id
617
767
  )
618
- _emit_user_message_analytics(
768
+ _emit_post_invoke_analytics(
619
769
  tool=tool,
620
770
  parsed_data=parsed_data,
621
771
  envelope=final_dedup,
@@ -648,7 +798,7 @@ class ToolExecutorPipeline:
648
798
  final = self._output_manager.truncate_if_needed(
649
799
  envelope, tool, ctx.tool_call_id
650
800
  )
651
- _emit_user_message_analytics(
801
+ _emit_post_invoke_analytics(
652
802
  tool=tool,
653
803
  parsed_data=parsed_data,
654
804
  envelope=final,