langchain-agentx-python 0.5.2__tar.gz → 0.5.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/PKG-INFO +1 -1
  2. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/__init__.py +1 -1
  3. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/__init__.py +13 -0
  4. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/loader.py +53 -1
  5. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/path_safety.py +193 -0
  6. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/policy.py +116 -49
  7. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/read_ignore_patterns.py +53 -0
  8. langchain-agentx-python-0.5.3/langchain_agentx/tool_runtime/read_permission.py +120 -0
  9. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/settings_validator.py +9 -3
  10. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/rg_list_backend.py +15 -3
  11. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/PKG-INFO +1 -1
  12. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/SOURCES.txt +3 -0
  13. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/pyproject.toml +1 -1
  14. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/LICENSE +0 -0
  15. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/README.md +0 -0
  16. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/__init__.py +0 -0
  17. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/__init__.py +0 -0
  18. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/clear.py +0 -0
  19. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/compact.py +0 -0
  20. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/memory.py +0 -0
  21. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
  22. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/context.py +0 -0
  23. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/dispatcher.py +0 -0
  24. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/registry.py +0 -0
  25. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/result.py +0 -0
  26. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/command/types.py +0 -0
  27. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/config/__init__.py +0 -0
  28. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/config/model_profiles.yaml +0 -0
  29. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/config/model_profiles.yaml.example +0 -0
  30. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/__init__.py +0 -0
  31. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/__init__.py +0 -0
  32. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/agent_config.py +0 -0
  33. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
  34. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
  35. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/runtime_settings.py +0 -0
  36. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/config/token_estimator.py +0 -0
  37. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/__init__.py +0 -0
  38. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/blocking_guard.py +0 -0
  39. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/compaction_service.py +0 -0
  40. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/message_utils.py +0 -0
  41. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/pipeline.py +0 -0
  42. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/settings.py +0 -0
  43. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/__init__.py +0 -0
  44. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
  45. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/base.py +0 -0
  46. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/collapse.py +0 -0
  47. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
  48. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/noop.py +0 -0
  49. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/snip.py +0 -0
  50. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
  51. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/context/types.py +0 -0
  52. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/__init__.py +0 -0
  53. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/exit_logic.py +0 -0
  54. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/exit/reason_codes.py +0 -0
  55. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/__init__.py +0 -0
  56. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
  57. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/factory.py +0 -0
  58. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/graph/graph_edges.py +0 -0
  59. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/__init__.py +0 -0
  60. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
  61. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/config.py +0 -0
  62. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/engine.py +0 -0
  63. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
  64. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/agent.py +0 -0
  65. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/command.py +0 -0
  66. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/http.py +0 -0
  67. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
  68. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
  69. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/hook_projection.py +0 -0
  70. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/registry.py +0 -0
  71. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/trust.py +0 -0
  72. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/hook/types.py +0 -0
  73. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/injection/__init__.py +0 -0
  74. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/injection/dedup.py +0 -0
  75. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/loop_abort.py +0 -0
  76. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/__init__.py +0 -0
  77. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/model_node.py +0 -0
  78. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/model_nodes.py +0 -0
  79. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
  80. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retrier.py +0 -0
  81. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_bridge.py +0 -0
  82. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_events.py +0 -0
  83. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/retry_policy.py +0 -0
  84. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/schema_and_format.py +0 -0
  85. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
  86. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
  87. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
  88. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/__init__.py +0 -0
  89. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/builder.py +0 -0
  90. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/builtin.py +0 -0
  91. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/compact.py +0 -0
  92. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/sections.py +0 -0
  93. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/prompt/session_context.py +0 -0
  94. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/__init__.py +0 -0
  95. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/context.py +0 -0
  96. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/context_factory.py +0 -0
  97. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
  98. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/__init__.py +0 -0
  99. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/async_runner.py +0 -0
  100. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/context.py +0 -0
  101. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
  102. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/graph.py +0 -0
  103. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
  104. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/progress.py +0 -0
  105. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/prompt.py +0 -0
  106. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/runner.py +0 -0
  107. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/loop/subagent/transcript.py +0 -0
  108. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/__init__.py +0 -0
  109. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/__init__.py +0 -0
  110. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/loader.py +0 -0
  111. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/resolver.py +0 -0
  112. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/runtime.py +0 -0
  113. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/sections.py +0 -0
  114. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/instruction/types.py +0 -0
  115. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/__init__.py +0 -0
  116. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/age.py +0 -0
  117. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
  118. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/extractor.py +0 -0
  119. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/loader.py +0 -0
  120. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/paths.py +0 -0
  121. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/recall.py +0 -0
  122. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/runtime.py +0 -0
  123. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/scan.py +0 -0
  124. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/memdir/types.py +0 -0
  125. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/__init__.py +0 -0
  126. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/compact_bridge.py +0 -0
  127. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/prompts.py +0 -0
  128. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/memory/session/session_memory.py +0 -0
  129. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/__init__.py +0 -0
  130. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/__init__.py +0 -0
  131. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
  132. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
  133. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
  134. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
  135. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
  136. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
  137. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
  138. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
  139. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/service.py +0 -0
  140. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/state.py +0 -0
  141. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/evaluation/store.py +0 -0
  142. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/events/__init__.py +0 -0
  143. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
  144. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/__init__.py +0 -0
  145. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/debug_burst.py +0 -0
  146. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/logging_config.py +0 -0
  147. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/logging/logging_contract.py +0 -0
  148. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/__init__.py +0 -0
  149. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/cli.py +0 -0
  150. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/service.py +0 -0
  151. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/store.py +0 -0
  152. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/replay/ui.py +0 -0
  153. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/__init__.py +0 -0
  154. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/collector.py +0 -0
  155. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/event_emitter.py +0 -0
  156. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
  157. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/models.py +0 -0
  158. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
  159. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/trace_callback.py +0 -0
  160. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
  161. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/__init__.py +0 -0
  162. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/builtin.py +0 -0
  163. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/config.py +0 -0
  164. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/loader.py +0 -0
  165. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/manifest.py +0 -0
  166. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/registries.py +0 -0
  167. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/plugin/types.py +0 -0
  168. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/__init__.py +0 -0
  169. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/anthropic.py +0 -0
  170. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
  171. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/env.py +0 -0
  172. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/model_profile.py +0 -0
  173. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/provider/openai.py +0 -0
  174. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/__init__.py +0 -0
  175. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/agent_session.py +0 -0
  176. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_factory.py +0 -0
  177. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_recovery.py +0 -0
  178. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/conversation_session.py +0 -0
  179. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/factory.py +0 -0
  180. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/session/protocol.py +0 -0
  181. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/__init__.py +0 -0
  182. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/__init__.py +0 -0
  183. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/ids.py +0 -0
  184. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
  185. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
  186. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/core/types.py +0 -0
  187. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
  188. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
  189. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
  190. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
  191. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
  192. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
  193. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
  194. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
  195. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
  196. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
  197. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/output/__init__.py +0 -0
  198. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/output/sink.py +0 -0
  199. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
  200. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
  201. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
  202. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
  203. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
  204. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
  205. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
  206. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
  207. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/__init__.py +0 -0
  208. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
  209. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
  210. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
  211. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
  212. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
  213. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
  214. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
  215. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
  216. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
  217. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
  218. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
  219. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
  220. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
  221. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
  222. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
  223. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
  224. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
  225. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
  226. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
  227. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
  228. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
  229. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
  230. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
  231. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
  232. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
  233. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
  234. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
  235. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
  236. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
  237. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
  238. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
  239. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
  240. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
  241. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
  242. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
  243. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
  244. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
  245. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
  246. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
  247. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
  248. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
  249. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
  250. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
  251. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
  252. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
  253. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
  254. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
  255. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
  256. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
  257. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
  258. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
  259. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
  260. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
  261. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/adapter.py +0 -0
  262. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/__init__.py +0 -0
  263. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/allowlist.py +0 -0
  264. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/__init__.py +0 -0
  265. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/classifier.py +0 -0
  266. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/parser.py +0 -0
  267. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/prompt.py +0 -0
  268. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/schema.py +0 -0
  269. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/classifier/transcript.py +0 -0
  270. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/config.py +0 -0
  271. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/config_update.py +0 -0
  272. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/decision.py +0 -0
  273. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/events.py +0 -0
  274. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/factory.py +0 -0
  275. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/feedback.py +0 -0
  276. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/hook.py +0 -0
  277. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/rule_stripping.py +0 -0
  278. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/auto_mode/state.py +0 -0
  279. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/base.py +0 -0
  280. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/errors.py +0 -0
  281. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
  282. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/models.py +0 -0
  283. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/override.py +0 -0
  284. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/permission_context.py +0 -0
  285. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/permission_decision.py +0 -0
  286. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/pipeline.py +0 -0
  287. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/policy_decorator.py +0 -0
  288. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/__init__.py +0 -0
  289. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/_abort.py +0 -0
  290. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/cli_interactive.py +0 -0
  291. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/handler.py +0 -0
  292. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/headless.py +0 -0
  293. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/legacy_resolver_adapter.py +0 -0
  294. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/race.py +0 -0
  295. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/prompt/types.py +0 -0
  296. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/registry.py +0 -0
  297. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
  298. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
  299. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
  300. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
  301. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
  302. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
  303. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/session_store.py +0 -0
  304. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
  305. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
  306. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/__init__.py +0 -0
  307. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/__init__.py +0 -0
  308. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/backend.py +0 -0
  309. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
  310. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
  311. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
  312. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/general.py +0 -0
  313. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
  314. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
  315. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
  316. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
  317. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
  318. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/limits.py +0 -0
  319. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/loader.py +0 -0
  320. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/models.py +0 -0
  321. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/prompt.py +0 -0
  322. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
  323. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/config.py +0 -0
  324. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/registry/registry.py +0 -0
  325. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/scope.py +0 -0
  326. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/agent/tool.py +0 -0
  327. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
  328. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
  329. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
  330. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/models.py +0 -0
  331. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
  332. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
  333. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
  334. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/__init__.py +0 -0
  335. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/ast_security.py +0 -0
  336. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/auto_mode_adapter.py +0 -0
  337. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/backend.py +0 -0
  338. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
  339. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
  340. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
  341. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/events.py +0 -0
  342. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/limits.py +0 -0
  343. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/mode_validation.py +0 -0
  344. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/models.py +0 -0
  345. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/observability.py +0 -0
  346. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/output_utils.py +0 -0
  347. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/path_security.py +0 -0
  348. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/prompt.py +0 -0
  349. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
  350. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/result_presenter.py +0 -0
  351. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
  352. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/security.py +0 -0
  353. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
  354. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/sed_validation.py +0 -0
  355. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/semantics.py +0 -0
  356. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/session_manager.py +0 -0
  357. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/session_runtime.py +0 -0
  358. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/shell_locator.py +0 -0
  359. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/task_runtime.py +0 -0
  360. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/tool.py +0 -0
  361. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
  362. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/__init__.py +0 -0
  363. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/backend.py +0 -0
  364. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/diff_generator.py +0 -0
  365. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
  366. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/limits.py +0 -0
  367. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/models.py +0 -0
  368. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/prompt.py +0 -0
  369. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/quote_match.py +0 -0
  370. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
  371. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/staleness.py +0 -0
  372. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/tool.py +0 -0
  373. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/edit/validator.py +0 -0
  374. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/__init__.py +0 -0
  375. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/models.py +0 -0
  376. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/pagination.py +0 -0
  377. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/prompt.py +0 -0
  378. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
  379. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/glob/tool.py +0 -0
  380. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/__init__.py +0 -0
  381. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/backend.py +0 -0
  382. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/models.py +0 -0
  383. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/prompt.py +0 -0
  384. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
  385. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/grep/tool.py +0 -0
  386. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/__init__.py +0 -0
  387. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/backend.py +0 -0
  388. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/limits.py +0 -0
  389. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/models.py +0 -0
  390. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/prompt.py +0 -0
  391. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/read/tool.py +0 -0
  392. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
  393. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/__init__.py +0 -0
  394. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
  395. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/loader.py +0 -0
  396. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/models.py +0 -0
  397. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/policy.py +0 -0
  398. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/prompt.py +0 -0
  399. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/skill/tool.py +0 -0
  400. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/__init__.py +0 -0
  401. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/hooks.py +0 -0
  402. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/limits.py +0 -0
  403. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/models.py +0 -0
  404. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/prompt.py +0 -0
  405. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_create/tool.py +0 -0
  406. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/__init__.py +0 -0
  407. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/models.py +0 -0
  408. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/prompt.py +0 -0
  409. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_get/tool.py +0 -0
  410. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/__init__.py +0 -0
  411. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/models.py +0 -0
  412. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/prompt.py +0 -0
  413. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_list/tool.py +0 -0
  414. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/__init__.py +0 -0
  415. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/hooks.py +0 -0
  416. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/models.py +0 -0
  417. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/prompt.py +0 -0
  418. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/task_update/tool.py +0 -0
  419. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/__init__.py +0 -0
  420. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/attachments.py +0 -0
  421. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/models.py +0 -0
  422. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/prompt.py +0 -0
  423. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
  424. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/user_message/tool.py +0 -0
  425. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/__init__.py +0 -0
  426. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/backend.py +0 -0
  427. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/limits.py +0 -0
  428. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/loader.py +0 -0
  429. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/models.py +0 -0
  430. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/preapproved.py +0 -0
  431. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/prompt.py +0 -0
  432. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/summary.py +0 -0
  433. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/webfetch/tool.py +0 -0
  434. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/__init__.py +0 -0
  435. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/backend.py +0 -0
  436. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/events.py +0 -0
  437. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/limits.py +0 -0
  438. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/loader.py +0 -0
  439. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/models.py +0 -0
  440. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/prompt.py +0 -0
  441. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/websearch/tool.py +0 -0
  442. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/__init__.py +0 -0
  443. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/backend.py +0 -0
  444. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/limits.py +0 -0
  445. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/models.py +0 -0
  446. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/prompt.py +0 -0
  447. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/tool.py +0 -0
  448. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/tools/write/validator.py +0 -0
  449. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/__init__.py +0 -0
  450. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/cwd.py +0 -0
  451. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/host_platform.py +0 -0
  452. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/path_hierarchy.py +0 -0
  453. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/path_user_input.py +0 -0
  454. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/rg_executable.py +0 -0
  455. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/subprocess_text.py +0 -0
  456. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/temp_paths.py +0 -0
  457. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/unc_path.py +0 -0
  458. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/utils/win_reserved_paths.py +0 -0
  459. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/__init__.py +0 -0
  460. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/base.py +0 -0
  461. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/batch.py +0 -0
  462. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/dag.py +0 -0
  463. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
  464. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
  465. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
  466. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
  467. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
  468. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
  469. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
  470. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
  471. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/event_adapter/types.py +0 -0
  472. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/node.py +0 -0
  473. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/__init__.py +0 -0
  474. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/chaining.py +0 -0
  475. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
  476. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
  477. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
  478. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/patterns/routing.py +0 -0
  479. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workflow/state.py +0 -0
  480. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/__init__.py +0 -0
  481. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/capabilities.py +0 -0
  482. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/config.py +0 -0
  483. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
  484. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/resolver.py +0 -0
  485. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx/workspace/validators.py +0 -0
  486. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
  487. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
  488. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/requires.txt +0 -0
  489. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/langchain_agentx_python.egg-info/top_level.txt +0 -0
  490. {langchain-agentx-python-0.5.2 → langchain-agentx-python-0.5.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
5
5
  Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
6
6
  License: Apache License
@@ -11,7 +11,7 @@ from langchain_agentx import create_loop_agent
11
11
  ```
12
12
  """
13
13
 
14
- __version__ = "0.5.2"
14
+ __version__ = "0.5.3"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
@@ -28,7 +28,9 @@ from .models import (
28
28
  from .identical_call_cache import IdenticalCallMemo
29
29
  from .loader import ToolRuntimeLoader
30
30
  from .pipeline import PermissionAskInterrupt, ToolExecutorPipeline, ToolOutputManager
31
+ from .path_safety import PathSafetyConfig, PathSafetyEvaluator
31
32
  from .policy import DefaultPolicyEngine, PolicyEngine, ToolPolicyConfig
33
+ from .read_ignore_patterns import ReadDenyPatternCollector, normalize_read_deny_pattern
32
34
  from .policy_decorator import PolicyEngineDecorator
33
35
  from .prompt import (
34
36
  CliInteractivePolicyEngine,
@@ -52,17 +54,23 @@ from .resolvers import (
52
54
  PermissionResolver,
53
55
  WorkflowPermissionResolver,
54
56
  )
57
+ from .auto_mode.config import AutoModeConfig
58
+ from .auto_mode.events import AutoModeDecisionEvent
55
59
  from .override import DenyOverrideManager, DenyOverrideRecord, enrich_blocked_deny_envelope
56
60
  from .permission_decision import (
57
61
  ENVELOPE_META_KEY_CAN_OVERRIDE,
58
62
  ENVELOPE_META_KEY_DENY_OVERRIDE,
59
63
  ENVELOPE_META_KEY_POLICY_ID,
60
64
  ENVELOPE_META_KEY_TOOL_CALL_ID,
65
+ POLICY_ID_DENY_OVERRIDE_CONSUMED,
61
66
  )
62
67
  from .session_store import AgentSessionStore, FileReadRecord, FileWriteRecord
63
68
  from .state_bridge import ToolStateBridge
64
69
 
65
70
  __all__ = [
71
+ # auto mode
72
+ "AutoModeConfig",
73
+ "AutoModeDecisionEvent",
66
74
  # models
67
75
  "ToolExecutionContext",
68
76
  "ToolResultEnvelope",
@@ -86,6 +94,10 @@ __all__ = [
86
94
  "PolicyEngine",
87
95
  "DefaultPolicyEngine",
88
96
  "PolicyEngineDecorator",
97
+ "PathSafetyConfig",
98
+ "PathSafetyEvaluator",
99
+ "ReadDenyPatternCollector",
100
+ "normalize_read_deny_pattern",
89
101
  # prompt (L3)
90
102
  "PermissionPromptHandler",
91
103
  "PermissionUpdate",
@@ -112,6 +124,7 @@ __all__ = [
112
124
  "ENVELOPE_META_KEY_TOOL_CALL_ID",
113
125
  "ENVELOPE_META_KEY_POLICY_ID",
114
126
  "ENVELOPE_META_KEY_DENY_OVERRIDE",
127
+ "POLICY_ID_DENY_OVERRIDE_CONSUMED",
115
128
  # pipeline
116
129
  "ToolOutputManager",
117
130
  "ToolExecutorPipeline",
@@ -34,7 +34,9 @@ from .auto_mode.config_update import (
34
34
  merge_auto_mode_config,
35
35
  )
36
36
  from .auto_mode.state import get_auto_mode_state
37
+ from .path_safety import PathSafetyConfig
37
38
  from .policy import DefaultPolicyEngine, PolicyEngine, ToolPolicyConfig
39
+ from .read_ignore_patterns import ReadDenyPatternCollector
38
40
  from .registry import RuntimeToolRegistry
39
41
  from .prompt.handler import PermissionPromptHandler
40
42
  from .resolvers import PermissionResolver
@@ -126,6 +128,9 @@ class ToolRuntimeLoader:
126
128
  from langchain_agentx.tools.glob import GlobRuntimeTool
127
129
  from langchain_agentx.tools.grep import GrepRuntimeTool
128
130
  from langchain_agentx.tools.edit import EditRuntimeTool
131
+ from langchain_agentx.tools.edit.settings_validator import SettingsValidator
132
+ from langchain_agentx.tools.edit.staleness import StalenessChecker
133
+ from langchain_agentx.tools.edit.validator import EditStringValidator
129
134
  from langchain_agentx.tools.read import ReadRuntimeTool
130
135
  from langchain_agentx.tools.ripgrep_plugin_exclusions import PluginCacheGlobExclusions
131
136
  from langchain_agentx.tools.task_list.tool import TaskListRuntimeTool
@@ -138,6 +143,10 @@ class ToolRuntimeLoader:
138
143
 
139
144
  wr = Path(workspace_root).resolve()
140
145
  cfg = AgentWorkspaceConfig(workspace_root=wr, agent_home=agent_home)
146
+ self._inject_path_safety_policy(
147
+ workspace_root=str(wr),
148
+ agent_home_segment=cfg.agent_home_dir.name,
149
+ )
141
150
  plugin_ex = PluginCacheGlobExclusions(
142
151
  cache_root=str(cfg.plugin_cache_dir.resolve()),
143
152
  )
@@ -145,14 +154,30 @@ class ToolRuntimeLoader:
145
154
  # v0.2.0:创建共享 bridge,初始 cwd 为 workspace_root
146
155
  # Bash cd 后,Read/Write/Edit 自动感知新路径;Glob 存储摘要到同一 state
147
156
  shared_bridge = ToolStateBridge(initial_cwd=str(wr))
157
+ search_ignore_patterns = self._collect_search_ignore_patterns()
158
+
159
+ settings_validator = SettingsValidator(agent_home_segment=cfg.agent_home_dir.name)
160
+ edit_staleness = StalenessChecker(shared_bridge)
161
+ edit_string_validator = EditStringValidator(
162
+ state_bridge=shared_bridge,
163
+ staleness_checker=edit_staleness,
164
+ settings_validator=settings_validator,
165
+ )
148
166
 
149
167
  self.register(ReadRuntimeTool(state_bridge=shared_bridge))
150
168
  self.register(WriteRuntimeTool(state_bridge=shared_bridge))
151
- self.register(EditRuntimeTool(state_bridge=shared_bridge))
169
+ self.register(
170
+ EditRuntimeTool(
171
+ state_bridge=shared_bridge,
172
+ string_validator=edit_string_validator,
173
+ staleness_checker=edit_staleness,
174
+ )
175
+ )
152
176
  self.register(
153
177
  GrepRuntimeTool(
154
178
  workspace_root=str(wr),
155
179
  plugin_cache_glob_exclusions=plugin_ex,
180
+ ignore_patterns=search_ignore_patterns or None,
156
181
  )
157
182
  )
158
183
  self.register(
@@ -160,6 +185,7 @@ class ToolRuntimeLoader:
160
185
  workspace_root=str(wr),
161
186
  plugin_cache_glob_exclusions=plugin_ex,
162
187
  state_bridge=shared_bridge,
188
+ ignore_patterns=search_ignore_patterns or None,
163
189
  )
164
190
  )
165
191
  self.register(BashRuntimeTool(state_bridge=shared_bridge))
@@ -187,6 +213,32 @@ class ToolRuntimeLoader:
187
213
 
188
214
  return self
189
215
 
216
+ def _collect_search_ignore_patterns(self) -> list[str]:
217
+ """Read deny → Glob/Grep ``ignore_patterns``(CC getFileReadIgnorePatterns)。"""
218
+ cfg = self._policy_config
219
+ if cfg is None and isinstance(self._policy, DefaultPolicyEngine):
220
+ cfg = self._policy._config
221
+ return ReadDenyPatternCollector().collect(cfg)
222
+
223
+ def _inject_path_safety_policy(
224
+ self,
225
+ *,
226
+ workspace_root: str,
227
+ agent_home_segment: str,
228
+ ) -> None:
229
+ """为已装配的 DefaultPolicyEngine 注入 PathSafetyConfig(来自 workspace)。"""
230
+ path_cfg = PathSafetyConfig.from_workspace(
231
+ workspace_root=workspace_root,
232
+ agent_home_segment=agent_home_segment,
233
+ )
234
+ if self._policy_config is not None and self._policy_config.path_safety is None:
235
+ self._policy_config.path_safety = path_cfg
236
+ if isinstance(self._policy, DefaultPolicyEngine):
237
+ pc = self._policy._config
238
+ if pc.path_safety is None:
239
+ pc.path_safety = path_cfg
240
+ self._policy = DefaultPolicyEngine(pc)
241
+
190
242
  def create_session(self, session_id: str | None = None) -> AgentSessionStore:
191
243
  return AgentSessionStore(session_id=session_id)
192
244
 
@@ -0,0 +1,193 @@
1
+ """
2
+ path_safety.py — 写路径安全评估(对齐 CC filesystem.ts)
3
+
4
+ 职责:
5
+ 将 CC ``DANGEROUS_DIRECTORIES`` / ``DANGEROUS_FILES`` / ``isClaudeConfigFilePath``
6
+ 映射为 SDK 的 ``AuthorizationDecision(behavior=ask)``;``agent_home`` 段名可配置。
7
+
8
+ 链路位置:
9
+ ``DefaultPolicyEngine.authorize`` / ``authorize_path`` 在 ask_globs 之后、roots 之前调用。
10
+
11
+ 当前裁剪范围:
12
+ 不实现 session 级 ``/.claude/**`` allow 绕过、Windows 可疑路径全套、内部 plan/scratchpad 白名单。
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import os
18
+ from dataclasses import dataclass, field
19
+ from pathlib import Path
20
+ from typing import TYPE_CHECKING
21
+
22
+ from .models import AuthorizationDecision
23
+
24
+ if TYPE_CHECKING:
25
+ pass
26
+
27
+ # 与 CC DANGEROUS_DIRECTORIES 对齐(不含 agent_home,运行时注入)
28
+ _DEFAULT_DANGEROUS_DIRECTORY_SEGMENTS: tuple[str, ...] = (
29
+ ".git",
30
+ ".vscode",
31
+ ".idea",
32
+ )
33
+
34
+ # 与 CC DANGEROUS_FILES 对齐(按文件名,大小写不敏感)
35
+ _DANGEROUS_FILE_NAMES: frozenset[str] = frozenset(
36
+ {
37
+ ".gitconfig",
38
+ ".gitmodules",
39
+ ".bashrc",
40
+ ".bash_profile",
41
+ ".zshrc",
42
+ ".zprofile",
43
+ ".profile",
44
+ ".ripgreprc",
45
+ ".mcp.json",
46
+ ".claude.json",
47
+ }
48
+ )
49
+
50
+ _WORKTREES_SEGMENT = "worktrees"
51
+
52
+ # agent_home 下需 ask 的子目录(对齐 isClaudeConfigFilePath 的 commands/agents/skills)
53
+ _AGENT_CONFIG_SUBDIRS: tuple[str, ...] = ("commands", "agents", "skills")
54
+
55
+ _IDE_SETTINGS_PARENTS: tuple[str, ...] = (".vscode", ".cursor")
56
+
57
+
58
+ def _normalize_case(path: str) -> str:
59
+ return path.replace("\\", "/").lower()
60
+
61
+
62
+ @dataclass
63
+ class PathSafetyConfig:
64
+ """写路径安全配置。"""
65
+
66
+ agent_home_segment: str
67
+ workspace_root: str | None = None
68
+ enabled: bool = True
69
+ dangerous_directory_segments: tuple[str, ...] = field(
70
+ default_factory=lambda: _DEFAULT_DANGEROUS_DIRECTORY_SEGMENTS
71
+ )
72
+ worktrees_segment: str = _WORKTREES_SEGMENT
73
+
74
+ def __post_init__(self) -> None:
75
+ seg = (self.agent_home_segment or "").strip()
76
+ if not seg:
77
+ raise ValueError("agent_home_segment must be non-empty")
78
+ if not seg.startswith("."):
79
+ seg = f".{seg}"
80
+ object.__setattr__(self, "agent_home_segment", seg)
81
+
82
+ @classmethod
83
+ def from_workspace(
84
+ cls,
85
+ *,
86
+ workspace_root: str,
87
+ agent_home_segment: str,
88
+ enabled: bool = True,
89
+ ) -> PathSafetyConfig:
90
+ return cls(
91
+ agent_home_segment=agent_home_segment,
92
+ workspace_root=str(Path(workspace_root).resolve()),
93
+ enabled=enabled,
94
+ )
95
+
96
+
97
+ class PathSafetyEvaluator:
98
+ """评估写操作目标路径是否需人工确认(CC checkPathSafetyForAutoEdit 子集)。"""
99
+
100
+ def __init__(self, config: PathSafetyConfig) -> None:
101
+ self._config = config
102
+ home = config.agent_home_segment.lower()
103
+ self._dangerous_segments = frozenset(
104
+ s.lower() for s in (*config.dangerous_directory_segments, config.agent_home_segment)
105
+ )
106
+ self._agent_home_lower = home
107
+ self._worktrees_lower = config.worktrees_segment.lower()
108
+
109
+ def evaluate_unc_path(self, path: str) -> AuthorizationDecision | None:
110
+ """UNC / extended-length 前缀:Read 与 Write 均先拦截(CC 对齐)。"""
111
+ if not self._config.enabled:
112
+ return None
113
+ raw = path.strip()
114
+ if raw.startswith("\\\\") or raw.startswith("//"):
115
+ return AuthorizationDecision(
116
+ behavior="ask",
117
+ message=(
118
+ f"Permission required: path uses a UNC or extended-length prefix: {path}"
119
+ ),
120
+ policy_id="dangerous_unc_path",
121
+ metadata={"classifier_approvable": False},
122
+ )
123
+ return None
124
+
125
+ def evaluate_write_path(self, path: str) -> AuthorizationDecision | None:
126
+ """
127
+ 若路径需保护则返回 ``ask`` 决策;否则返回 ``None``(继续后续 roots 检查)。
128
+ """
129
+ if not self._config.enabled:
130
+ return None
131
+
132
+ unc = self.evaluate_unc_path(path)
133
+ if unc is not None:
134
+ return unc
135
+
136
+ real = os.path.realpath(os.path.expanduser(path.strip()))
137
+ if self._is_agent_config_file_path(real):
138
+ return AuthorizationDecision(
139
+ behavior="ask",
140
+ message=(
141
+ f"Permission required: editing agent configuration file: {real}"
142
+ ),
143
+ policy_id="agent_config_file",
144
+ metadata={"classifier_approvable": True},
145
+ )
146
+
147
+ if self._is_dangerous_path(real):
148
+ return AuthorizationDecision(
149
+ behavior="ask",
150
+ message=f"Permission required: sensitive path: {real}",
151
+ policy_id="dangerous_directory",
152
+ metadata={"classifier_approvable": True},
153
+ )
154
+
155
+ return None
156
+
157
+ def _is_dangerous_path(self, real_path: str) -> bool:
158
+ parts = Path(real_path).parts
159
+ for i, segment in enumerate(parts):
160
+ seg_lower = segment.lower()
161
+ if seg_lower not in self._dangerous_segments:
162
+ continue
163
+ if seg_lower == self._agent_home_lower:
164
+ next_part = parts[i + 1] if i + 1 < len(parts) else None
165
+ if next_part and next_part.lower() == self._worktrees_lower:
166
+ continue
167
+ return True
168
+
169
+ file_name = parts[-1].lower() if parts else ""
170
+ if file_name in _DANGEROUS_FILE_NAMES:
171
+ return True
172
+ return False
173
+
174
+ def _is_agent_config_file_path(self, real_path: str) -> bool:
175
+ p = Path(real_path)
176
+ posix = _normalize_case(p.as_posix())
177
+ home = self._agent_home_lower
178
+
179
+ for sub in _AGENT_CONFIG_SUBDIRS:
180
+ marker = f"/{home}/{sub}/"
181
+ if marker in posix:
182
+ return True
183
+
184
+ if p.name.lower() != "settings.json":
185
+ return False
186
+
187
+ for parent in (*_IDE_SETTINGS_PARENTS, self._config.agent_home_segment):
188
+ pl = parent.lower()
189
+ if f"/{pl}/" in posix:
190
+ return True
191
+ if p.parent.name.lower() == pl.lstrip("."):
192
+ return True
193
+ return False
@@ -50,7 +50,9 @@ from dataclasses import dataclass, field
50
50
  from typing import TYPE_CHECKING, Any
51
51
 
52
52
  from .models import AuthorizationDecision, ToolExecutionContext
53
+ from .path_safety import PathSafetyConfig, PathSafetyEvaluator
53
54
  from .permission_context import get_active_auto_approved_tools
55
+ from .read_permission import ReadPathAuthorizer
54
56
  from .permission_decision import (
55
57
  POLICY_ID_PREFIX_ALWAYS_ASK_TOOL,
56
58
  PermissionDecisionType,
@@ -81,6 +83,8 @@ class ToolPolicyConfig:
81
83
  deny_globs: 硬拒绝的 glob 模式列表,优先级高于 roots 检查。
82
84
  对应 CC alwaysDenyRules。
83
85
  示例:["**/secrets/**", "**/*.prod.env"]
86
+ read_deny_globs: 仅用于 Read 的 deny glob;同步隐藏于 Glob/Grep(CC getFileReadIgnorePatterns)。
87
+ 不参与 ``DefaultPolicyEngine`` 路径 fnmatch,除非重复写入 deny_globs。
84
88
  ask_globs: 需要人工确认的敏感路径 glob 模式列表。
85
89
  对应 CC alwaysAskRules(路径规则)。
86
90
  headless 模式下自动降级为 deny;交互模式下触发 HITL。
@@ -91,16 +95,21 @@ class ToolPolicyConfig:
91
95
  read_only_mode: 全局只读模式,is_destructive=True 的工具直接拒绝。
92
96
  enable_builtin_deny: 启用内置危险路径保护(.env/.ssh/*.key/credentials 等)。
93
97
  生产环境建议保持 True。
98
+ enable_path_safety: 启用写路径 CC 对齐安全(危险目录 / agent 配置 / worktrees 例外)。
99
+ path_safety: ``PathSafetyConfig``(含 ``agent_home_segment``);为 None 时不评估。
94
100
  auto_mode: Auto Mode 配置(可选,Phase 1)。
95
101
  """
96
102
 
97
103
  read_roots: list[str] = field(default_factory=list)
98
104
  write_roots: list[str] = field(default_factory=list)
99
105
  deny_globs: list[str] = field(default_factory=list)
106
+ read_deny_globs: list[str] = field(default_factory=list)
100
107
  ask_globs: list[str] = field(default_factory=list)
101
108
  always_ask_tools: frozenset[str] = field(default_factory=frozenset)
102
109
  read_only_mode: bool = False
103
110
  enable_builtin_deny: bool = True
111
+ enable_path_safety: bool = True
112
+ path_safety: PathSafetyConfig | None = None
104
113
  auto_mode: "AutoModeConfig | None" = None
105
114
 
106
115
  def __post_init__(self) -> None:
@@ -138,10 +147,13 @@ class ToolPolicyConfig:
138
147
  read_roots=new_read,
139
148
  write_roots=new_write,
140
149
  deny_globs=self.deny_globs,
150
+ read_deny_globs=self.read_deny_globs,
141
151
  ask_globs=self.ask_globs,
142
152
  always_ask_tools=self.always_ask_tools,
143
153
  read_only_mode=self.read_only_mode,
144
154
  enable_builtin_deny=self.enable_builtin_deny,
155
+ enable_path_safety=self.enable_path_safety,
156
+ path_safety=self.path_safety,
145
157
  auto_mode=self.auto_mode,
146
158
  )
147
159
 
@@ -228,9 +240,11 @@ class DefaultPolicyEngine(PolicyEngine):
228
240
  [4] enable_builtin_deny → BUILTIN_DENY_GLOBS → deny
229
241
  [5] deny_globs 命中 → deny
230
242
  [6] ask_globs 命中 → ask(headless 时 pipeline 降级为 deny)
243
+ [6.5] enable_path_safety + 写工具 → PathSafetyEvaluator → ask(CC checkPathSafetyForAutoEdit)
231
244
  [7] 读写分权:
232
- is_read_only=True → 检查 read_roots
233
- is_read_only=False检查 write_roots
245
+ is_read_only=True → ReadPathAuthorizer(read_deny → deny → builtin → ask
246
+ write_implies_read read_roots;见 read_permission.py)
247
+ is_read_only=False → path_safety + write_roots
234
248
  roots 为空列表 → 跳过,视为不限制
235
249
  [8] 通过 → allow
236
250
 
@@ -238,6 +252,7 @@ class DefaultPolicyEngine(PolicyEngine):
238
252
  [1] ~ read_only_mode(全局禁止写操作)
239
253
  [2][3] ~ alwaysDenyRules(固定拒绝)
240
254
  [4] ~ alwaysAskRules(需确认)
255
+ [6.5] ~ DANGEROUS_DIRECTORIES / isClaudeConfigFilePath(写 ask)
241
256
  [5] ~ allWorkingDirectories(访问空间限制)
242
257
 
243
258
  工具读写标志来源:
@@ -289,6 +304,22 @@ class DefaultPolicyEngine(PolicyEngine):
289
304
  self._write_roots = [os.path.realpath(r) for r in config.write_roots]
290
305
  self._always_ask_tools = config.always_ask_tools
291
306
  self._auto_mode_hook = auto_mode_hook
307
+ self._path_safety: PathSafetyEvaluator | None = None
308
+ if config.enable_path_safety and config.path_safety is not None:
309
+ self._path_safety = PathSafetyEvaluator(config.path_safety)
310
+ self._read_authorizer = ReadPathAuthorizer(
311
+ config,
312
+ path_safety=self._path_safety,
313
+ check_deny_globs=self._check_deny_globs,
314
+ check_ask_globs=self._check_ask_globs,
315
+ check_builtin_deny=self._check_builtin_deny,
316
+ authorize_destructive_path=self._evaluate_write_allowance_for_implied_read,
317
+ authorize_read_roots=lambda real_path: self._authorize_path_roots(
318
+ real_path,
319
+ is_read_only_tool=True,
320
+ ),
321
+ with_decision_source=self._with_decision_source,
322
+ )
292
323
 
293
324
  def authorize(
294
325
  self,
@@ -368,7 +399,14 @@ class DefaultPolicyEngine(PolicyEngine):
368
399
 
369
400
  real_path = os.path.realpath(os.path.expanduser(path))
370
401
 
371
- # [2] 用户自定义 deny_globs
402
+ if is_read_only_tool:
403
+ return self._read_authorizer.authorize(
404
+ real_path,
405
+ tool_name=tool_name,
406
+ active_auto_approved_tools_lower=active_auto_approved_tools_lower,
407
+ )
408
+
409
+ # [2] 用户自定义 deny_globs(写工具)
372
410
  deny_result = self._check_deny_globs(real_path)
373
411
  if deny_result is not None:
374
412
  return self._with_decision_source(
@@ -376,18 +414,9 @@ class DefaultPolicyEngine(PolicyEngine):
376
414
  matched_rule=deny_result.policy_id,
377
415
  )
378
416
 
379
- # [3] 内置危险路径黑名单
380
- if self._config.enable_builtin_deny:
381
- for pattern in self.BUILTIN_DENY_GLOBS:
382
- if fnmatch.fnmatch(real_path, pattern):
383
- return self._with_decision_source(
384
- AuthorizationDecision(
385
- behavior="deny",
386
- message="Permission denied: access to this path is not allowed.",
387
- policy_id="builtin_deny",
388
- ),
389
- matched_rule="builtin_deny",
390
- )
417
+ builtin = self._check_builtin_deny(real_path)
418
+ if builtin is not None:
419
+ return self._with_decision_source(builtin, matched_rule="builtin_deny")
391
420
 
392
421
  # [4] ask_globs:敏感路径需要人工确认
393
422
  # headless 模式下 pipeline 会将 ask 自动降级为 deny;交互模式触发 HITL
@@ -421,23 +450,7 @@ class DefaultPolicyEngine(PolicyEngine):
421
450
  matched_rule=ask_result.policy_id,
422
451
  )
423
452
 
424
- # [5] 读写分权根目录检查
425
- roots = self._read_roots if is_read_only_tool else self._write_roots
426
- if roots:
427
- if not any(self._within_root(real_path, r) for r in roots):
428
- return self._with_decision_source(
429
- AuthorizationDecision(
430
- behavior="deny",
431
- message="Permission denied: path is outside the allowed workspace.",
432
- policy_id="read_roots" if is_read_only_tool else "write_roots",
433
- ),
434
- matched_rule="read_roots" if is_read_only_tool else "write_roots",
435
- )
436
-
437
- return self._with_decision_source(
438
- AuthorizationDecision(behavior="allow"),
439
- matched_rule="default_allow",
440
- )
453
+ return self._authorize_destructive_path(real_path)
441
454
 
442
455
  async def aauthorize(
443
456
  self,
@@ -497,6 +510,13 @@ class DefaultPolicyEngine(PolicyEngine):
497
510
  """
498
511
  real_path = os.path.realpath(os.path.expanduser(path))
499
512
 
513
+ if not is_write:
514
+ return self._read_authorizer.authorize(
515
+ real_path,
516
+ tool_name="read",
517
+ active_auto_approved_tools_lower=set(),
518
+ )
519
+
500
520
  if self._config.read_only_mode and is_write:
501
521
  return self._with_decision_source(
502
522
  AuthorizationDecision(
@@ -514,17 +534,9 @@ class DefaultPolicyEngine(PolicyEngine):
514
534
  matched_rule=deny_result.policy_id,
515
535
  )
516
536
 
517
- if self._config.enable_builtin_deny:
518
- for pattern in self.BUILTIN_DENY_GLOBS:
519
- if fnmatch.fnmatch(real_path, pattern):
520
- return self._with_decision_source(
521
- AuthorizationDecision(
522
- behavior="deny",
523
- message="Permission denied: access to this path is not allowed.",
524
- policy_id="builtin_deny",
525
- ),
526
- matched_rule="builtin_deny",
527
- )
537
+ builtin = self._check_builtin_deny(real_path)
538
+ if builtin is not None:
539
+ return self._with_decision_source(builtin, matched_rule="builtin_deny")
528
540
 
529
541
  ask_result = self._check_ask_globs(real_path)
530
542
  if ask_result is not None:
@@ -533,16 +545,73 @@ class DefaultPolicyEngine(PolicyEngine):
533
545
  matched_rule=ask_result.policy_id,
534
546
  )
535
547
 
536
- roots = self._write_roots if is_write else self._read_roots
548
+ return self._authorize_destructive_path(real_path)
549
+
550
+ # ---- 内部辅助 ----
551
+
552
+ def _authorize_destructive_path(self, real_path: str) -> AuthorizationDecision:
553
+ """写工具路径尾部:path_safety + write_roots(deny/builtin/ask 已由 authorize 处理)。"""
554
+ return self._authorize_path_roots(
555
+ real_path,
556
+ is_read_only_tool=False,
557
+ )
558
+
559
+ def _evaluate_write_allowance_for_implied_read(
560
+ self,
561
+ real_path: str,
562
+ ) -> AuthorizationDecision:
563
+ """CC Write allow ⇒ Read allow:复用写链(无 skill ask 绕过)。"""
564
+ deny_result = self._check_deny_globs(real_path)
565
+ if deny_result is not None:
566
+ return deny_result
567
+ builtin = self._check_builtin_deny(real_path)
568
+ if builtin is not None:
569
+ return builtin
570
+ ask_result = self._check_ask_globs(real_path)
571
+ if ask_result is not None:
572
+ return ask_result
573
+ return self._authorize_path_roots(
574
+ real_path,
575
+ is_read_only_tool=False,
576
+ )
577
+
578
+ def _check_builtin_deny(self, real_path: str) -> AuthorizationDecision | None:
579
+ if not self._config.enable_builtin_deny:
580
+ return None
581
+ for pattern in self.BUILTIN_DENY_GLOBS:
582
+ if fnmatch.fnmatch(real_path, pattern):
583
+ return AuthorizationDecision(
584
+ behavior="deny",
585
+ message="Permission denied: access to this path is not allowed.",
586
+ policy_id="builtin_deny",
587
+ )
588
+ return None
589
+
590
+ def _authorize_path_roots(
591
+ self,
592
+ real_path: str,
593
+ *,
594
+ is_read_only_tool: bool,
595
+ ) -> AuthorizationDecision:
596
+ """ask_globs 之后:写路径安全 + read/write_roots。"""
597
+ if not is_read_only_tool and self._path_safety is not None:
598
+ safety = self._path_safety.evaluate_write_path(real_path)
599
+ if safety is not None:
600
+ return self._with_decision_source(
601
+ safety,
602
+ matched_rule=safety.policy_id or "path_safety",
603
+ )
604
+
605
+ roots = self._read_roots if is_read_only_tool else self._write_roots
537
606
  if roots:
538
- if not any(self._within_root(real_path, root) for root in roots):
607
+ if not any(self._within_root(real_path, r) for r in roots):
539
608
  return self._with_decision_source(
540
609
  AuthorizationDecision(
541
610
  behavior="deny",
542
611
  message="Permission denied: path is outside the allowed workspace.",
543
- policy_id="write_roots" if is_write else "read_roots",
612
+ policy_id="read_roots" if is_read_only_tool else "write_roots",
544
613
  ),
545
- matched_rule="write_roots" if is_write else "read_roots",
614
+ matched_rule="read_roots" if is_read_only_tool else "write_roots",
546
615
  )
547
616
 
548
617
  return self._with_decision_source(
@@ -550,8 +619,6 @@ class DefaultPolicyEngine(PolicyEngine):
550
619
  matched_rule="default_allow",
551
620
  )
552
621
 
553
- # ---- 内部辅助 ----
554
-
555
622
  def _check_always_ask_tool(self, tool_name: str) -> AuthorizationDecision | None:
556
623
  """工具级 always ask(CC getAskRuleForTool 工具名维度)。"""
557
624
  if tool_name.lower() not in self._always_ask_tools: