langchain-agentx-python 0.6.0__tar.gz → 0.6.1__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.
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/PKG-INFO +1 -1
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/__init__.py +1 -1
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/agent_loop_config.py +1 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/graph/factory.py +12 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/factory.py +8 -1
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/pipeline.py +3 -2
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/__init__.py +4 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/cli_interactive.py +6 -2
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/headless.py +23 -5
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/legacy_resolver_adapter.py +13 -3
- langchain-agentx-python-0.6.1/langchain_agentx/tool_runtime/prompt/messages.py +44 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/race.py +75 -14
- langchain-agentx-python-0.6.1/langchain_agentx/tool_runtime/prompt/session_mode.py +28 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/types.py +54 -2
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/backend.py +14 -2
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/security.py +2 -64
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/session_runtime.py +2 -1
- langchain-agentx-python-0.6.1/langchain_agentx/tools/bash/shell_quoting.py +145 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/tool.py +1 -14
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/PKG-INFO +1 -1
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/SOURCES.txt +3 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/pyproject.toml +1 -1
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/LICENSE +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/README.md +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/builtin/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/builtin/clear.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/builtin/compact.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/builtin/memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/context.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/dispatcher.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/registry.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/result.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/command/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/config/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/config/model_profiles.yaml +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/config/model_profiles.yaml.example +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/agent_config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/runtime_settings.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/config/token_estimator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/blocking_guard.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/compaction_service.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/message_utils.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/pipeline.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/settings.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/collapse.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/noop.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/snip.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/context/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/exit/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/exit/exit_logic.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/exit/reason_codes.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/graph/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/graph/graph_edges.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/engine.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/executors/agent.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/executors/command.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/executors/http.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/hook_projection.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/registry.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/trust.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/hook/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/injection/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/injection/dedup.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/loop_abort.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/model_node.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/model_nodes.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/retrier.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/retry_bridge.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/retry_events.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/retry_policy.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/schema_and_format.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/builder.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/builtin.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/compact.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/sections.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/prompt/session_context.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/runtime/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/runtime/context.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/runtime/context_factory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/async_runner.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/context.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/graph.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/progress.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/runner.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/loop/subagent/transcript.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/resolver.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/runtime.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/sections.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/instruction/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/age.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/extractor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/paths.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/recall.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/runtime.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/scan.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/memdir/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/session/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/session/compact_bridge.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/session/prompts.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/memory/session/session_memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/service.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/state.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/evaluation/store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/events/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/logging/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/logging/debug_burst.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/logging/logging_config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/logging/logging_contract.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/replay/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/replay/cli.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/replay/service.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/replay/store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/replay/ui.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/collector.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/event_emitter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/trace_callback.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/builtin.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/manifest.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/registries.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/plugin/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/anthropic.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/compatible_chat_openai.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/env.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/model_profile.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/provider/openai.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/agent_session.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/conversation_factory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/conversation_recovery.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/conversation_session.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/protocol.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/core/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/core/ids.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/core/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/output/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/output/sink.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/store/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/adapter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/allowlist.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/classifier.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/parser.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/schema.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/classifier/transcript.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/config_update.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/decision.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/events.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/factory.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/feedback.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/hook.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/rule_stripping.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/auto_mode/state.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/errors.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/loop_loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/override.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/path_safety.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/permission_context.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/permission_decision.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/policy.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/policy_decorator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/process_loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/_abort.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/prompt/handler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/read_ignore_patterns.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/read_permission.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/registry.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/session_store.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/general.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/registry/config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/registry/registry.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/scope.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/agent/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/ast_security.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/auto_mode_adapter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/boundary_check.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/events.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/mode_validation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/observability.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/output_utils.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/path_security.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/result_presenter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/sed_validation.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/semantics.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/session_manager.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/shell_locator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/task_runtime.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/diff_generator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/quote_match.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/settings_validator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/staleness.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/edit/validator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/pagination.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/glob/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/grep/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/read/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/policy.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/skill/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/hooks.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_create/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_get/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_get/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_get/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_get/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_list/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_list/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_list/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_list/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_update/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_update/hooks.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_update/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_update/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/task_update/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/attachments.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/user_message/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/preapproved.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/summary.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/webfetch/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/events.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/loader.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/websearch/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/backend.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/limits.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/models.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/prompt.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/tool.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/tools/write/validator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/cwd.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/host_platform.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/path_hierarchy.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/path_user_input.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/rg_executable.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/subprocess_text.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/temp_paths.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/unc_path.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/utils/win_reserved_paths.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/base.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/batch.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/dag.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/event_adapter/types.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/node.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/chaining.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/patterns/routing.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workflow/state.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/__init__.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/boundary.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/capabilities.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/config.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/errors.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/grant.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/l3_root_grant.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/resolver.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/root_grant_manager.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/tool_boundary.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/validators.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/workspace/view.py +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/requires.txt +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx_python.egg-info/top_level.txt +0 -0
- {langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/setup.cfg +0 -0
|
@@ -67,6 +67,7 @@ class AgentLoopConfig:
|
|
|
67
67
|
subagent_type: str | None = None
|
|
68
68
|
# 观测控制面:主 Agent 打开则子 Agent 默认继承打开
|
|
69
69
|
trace_enabled: bool = True
|
|
70
|
+
headless: bool = False
|
|
70
71
|
# 模型能力配置:显式 profile > registry 匹配 > model metadata > 代码兜底
|
|
71
72
|
model_profile: ModelProfile | None = None
|
|
72
73
|
model_profile_registry: ModelProfileRegistry | None = None
|
|
@@ -101,6 +101,7 @@ from ..config import AgentLoopConfig, ModelContextResolver
|
|
|
101
101
|
from ..config.runtime_settings import compute_recursion_limit
|
|
102
102
|
from ...provider.model_profile import ModelProfileRegistry # re-exported for legacy tests
|
|
103
103
|
from ...workspace import resolve_agent_workspace_config
|
|
104
|
+
from ...tool_runtime.prompt.session_mode import infer_session_headless
|
|
104
105
|
|
|
105
106
|
logger = logging.getLogger(__name__)
|
|
106
107
|
SKILL_TOOL_NAME = "skill"
|
|
@@ -195,6 +196,7 @@ class LoopGraphBuilder:
|
|
|
195
196
|
enable_git_snapshot: bool | None = None,
|
|
196
197
|
include_default_session_context: bool = True,
|
|
197
198
|
enable_dynamic_root_grant: bool = False,
|
|
199
|
+
headless: bool | None = None,
|
|
198
200
|
) -> None:
|
|
199
201
|
self._raw_model = model
|
|
200
202
|
self._raw_system_prompt = system_prompt
|
|
@@ -240,6 +242,7 @@ class LoopGraphBuilder:
|
|
|
240
242
|
self._raw_enable_git_snapshot = enable_git_snapshot
|
|
241
243
|
self._raw_include_default_session_context = include_default_session_context
|
|
242
244
|
self._raw_enable_dynamic_root_grant = enable_dynamic_root_grant
|
|
245
|
+
self._raw_headless = headless
|
|
243
246
|
|
|
244
247
|
self._prepared = False
|
|
245
248
|
|
|
@@ -368,6 +371,7 @@ class LoopGraphBuilder:
|
|
|
368
371
|
subagent_type=self._raw_subagent_type,
|
|
369
372
|
trace_enabled=self._raw_enable_trace,
|
|
370
373
|
model_profile_registry=self._model_profile_registry,
|
|
374
|
+
headless=self._resolve_session_headless(),
|
|
371
375
|
)
|
|
372
376
|
self._compaction_settings = self._build_compaction_settings()
|
|
373
377
|
self._loop_context_compaction = default_loop_context_compaction().with_default_pipeline(
|
|
@@ -477,6 +481,12 @@ class LoopGraphBuilder:
|
|
|
477
481
|
)
|
|
478
482
|
self._prepared = True
|
|
479
483
|
|
|
484
|
+
def _resolve_session_headless(self) -> bool:
|
|
485
|
+
return infer_session_headless(
|
|
486
|
+
headless=self._raw_headless,
|
|
487
|
+
container_type=self._raw_container_type,
|
|
488
|
+
)
|
|
489
|
+
|
|
480
490
|
def _resolve_model_session_and_logger(
|
|
481
491
|
self,
|
|
482
492
|
) -> tuple[BaseChatModel, str, ObservabilityLoggerAdapter]:
|
|
@@ -1443,6 +1453,7 @@ def create_loop_agent(
|
|
|
1443
1453
|
enable_git_snapshot: bool | None = None,
|
|
1444
1454
|
include_default_session_context: bool = True,
|
|
1445
1455
|
enable_dynamic_root_grant: bool = False,
|
|
1456
|
+
headless: bool | None = None,
|
|
1446
1457
|
) -> CompiledStateGraph[
|
|
1447
1458
|
AgentState[ResponseT], ContextT, _InputAgentState, _OutputAgentState[ResponseT]
|
|
1448
1459
|
]:
|
|
@@ -1493,6 +1504,7 @@ def create_loop_agent(
|
|
|
1493
1504
|
enable_git_snapshot=enable_git_snapshot,
|
|
1494
1505
|
include_default_session_context=include_default_session_context,
|
|
1495
1506
|
enable_dynamic_root_grant=enable_dynamic_root_grant,
|
|
1507
|
+
headless=headless,
|
|
1496
1508
|
)
|
|
1497
1509
|
tool_node = builder._build_tool_node()
|
|
1498
1510
|
model_node = builder._build_model_nodes(tool_node)
|
{langchain-agentx-python-0.6.0 → langchain-agentx-python-0.6.1}/langchain_agentx/session/factory.py
RENAMED
|
@@ -24,6 +24,7 @@ from langchain_core.language_models.chat_models import BaseChatModel
|
|
|
24
24
|
from ..loop.graph.factory import create_loop_agent
|
|
25
25
|
from ..loop.hook import HookEngine, HooksConfigSnapshot, HookRegistry, WorkspaceTrustChecker
|
|
26
26
|
from ..loop.subagent.transcript import SubagentTranscriptStore
|
|
27
|
+
from ..tool_runtime.prompt.session_mode import infer_session_headless
|
|
27
28
|
from ..workspace import resolve_agent_workspace_config
|
|
28
29
|
from .agent_session import AgentSession
|
|
29
30
|
|
|
@@ -40,6 +41,7 @@ def create_agent_session(
|
|
|
40
41
|
transcript_writer: SubagentTranscriptStore | None = None,
|
|
41
42
|
container_type: str = "interactive",
|
|
42
43
|
enable_trace: bool = True,
|
|
44
|
+
headless: bool | None = None,
|
|
43
45
|
**loop_kwargs: Any,
|
|
44
46
|
) -> AgentSession:
|
|
45
47
|
"""创建默认走 graph_factory 注入路径的 AgentSession。
|
|
@@ -48,6 +50,10 @@ def create_agent_session(
|
|
|
48
50
|
(环境变量 ``LANGCHAIN_AGENTX_*`` 与产品默认 ``.langchain_agentx``)。
|
|
49
51
|
"""
|
|
50
52
|
resolved_session_id = session_id or f"session-{uuid4().hex}"
|
|
53
|
+
resolved_headless = infer_session_headless(
|
|
54
|
+
headless=headless,
|
|
55
|
+
container_type=container_type,
|
|
56
|
+
)
|
|
51
57
|
workspace_cfg = resolve_agent_workspace_config(
|
|
52
58
|
workspace_root=workspace_root,
|
|
53
59
|
agent_home=agent_home,
|
|
@@ -65,7 +71,7 @@ def create_agent_session(
|
|
|
65
71
|
hook_engine = HookEngine(
|
|
66
72
|
snapshot,
|
|
67
73
|
trust_checker=WorkspaceTrustChecker(
|
|
68
|
-
headless=
|
|
74
|
+
headless=resolved_headless,
|
|
69
75
|
workspace_trust_accepted=workspace_cfg.workspace_trust_accepted,
|
|
70
76
|
),
|
|
71
77
|
)
|
|
@@ -88,6 +94,7 @@ def create_agent_session(
|
|
|
88
94
|
enable_trace=enable_trace,
|
|
89
95
|
enable_dynamic_root_grant=True,
|
|
90
96
|
capabilities=capabilities,
|
|
97
|
+
headless=resolved_headless,
|
|
91
98
|
**loop_kwargs,
|
|
92
99
|
)
|
|
93
100
|
|
|
@@ -910,7 +910,8 @@ class ToolExecutorPipeline:
|
|
|
910
910
|
ask_decision=auth,
|
|
911
911
|
ask_prompt=auth.ask_prompt,
|
|
912
912
|
suggestions=self._suggestions_from_auth(auth),
|
|
913
|
-
headless=
|
|
913
|
+
headless=False,
|
|
914
|
+
session_headless=self._headless,
|
|
914
915
|
)
|
|
915
916
|
|
|
916
917
|
def _revalidate_after_l3(
|
|
@@ -1040,7 +1041,7 @@ class ToolExecutorPipeline:
|
|
|
1040
1041
|
if resp.behavior == "deny":
|
|
1041
1042
|
env = blocked_envelope(
|
|
1042
1043
|
tool.name,
|
|
1043
|
-
resp.reason or auth.ask_prompt or "User rejected the operation.",
|
|
1044
|
+
resp.message or resp.reason or auth.ask_prompt or "User rejected the operation.",
|
|
1044
1045
|
policy_id=auth.policy_id,
|
|
1045
1046
|
)
|
|
1046
1047
|
self._attach_runtime_observability(
|
|
@@ -14,6 +14,8 @@ from .headless import HeadlessPromptHandler
|
|
|
14
14
|
from .legacy_resolver_adapter import LegacyResolverPromptHandler
|
|
15
15
|
from .race import HitlRaceCoordinator, PromptBranch, PromptClassifier
|
|
16
16
|
from .types import (
|
|
17
|
+
DecisionReason,
|
|
18
|
+
DecisionReasonType,
|
|
17
19
|
PermissionUpdate,
|
|
18
20
|
PromptDecisionSource,
|
|
19
21
|
PromptRequest,
|
|
@@ -22,6 +24,8 @@ from .types import (
|
|
|
22
24
|
|
|
23
25
|
__all__ = [
|
|
24
26
|
"PermissionPromptHandler",
|
|
27
|
+
"DecisionReason",
|
|
28
|
+
"DecisionReasonType",
|
|
25
29
|
"PermissionUpdate",
|
|
26
30
|
"PromptDecisionSource",
|
|
27
31
|
"PromptRequest",
|
|
@@ -42,7 +42,7 @@ def permission_resolver_to_user_ui(
|
|
|
42
42
|
return PromptResponse(
|
|
43
43
|
behavior="allow" if allowed else "deny",
|
|
44
44
|
decision_source=PromptDecisionSource.USER_UI,
|
|
45
|
-
|
|
45
|
+
message=None if allowed else (prompt or "denied by user"),
|
|
46
46
|
)
|
|
47
47
|
|
|
48
48
|
return _ui
|
|
@@ -67,9 +67,10 @@ class CliInteractivePromptHandler(HitlRaceCoordinator):
|
|
|
67
67
|
user_ui: UserUiCallback,
|
|
68
68
|
hooks: Sequence[PromptBranch] | None = None,
|
|
69
69
|
classifier: PromptClassifier | None = None,
|
|
70
|
-
hard_timeout_seconds: float =
|
|
70
|
+
hard_timeout_seconds: float | None = None,
|
|
71
71
|
hook_timeout_seconds: float = 30.0,
|
|
72
72
|
classifier_timeout_seconds: float = 15.0,
|
|
73
|
+
headless_session: bool = False,
|
|
73
74
|
) -> None:
|
|
74
75
|
super().__init__(
|
|
75
76
|
hooks=hooks,
|
|
@@ -78,6 +79,7 @@ class CliInteractivePromptHandler(HitlRaceCoordinator):
|
|
|
78
79
|
hard_timeout_seconds=hard_timeout_seconds,
|
|
79
80
|
hook_timeout_seconds=hook_timeout_seconds,
|
|
80
81
|
classifier_timeout_seconds=classifier_timeout_seconds,
|
|
82
|
+
headless_session=headless_session,
|
|
81
83
|
)
|
|
82
84
|
|
|
83
85
|
@classmethod
|
|
@@ -107,6 +109,7 @@ class CliInteractivePolicyEngine(PolicyEngineDecorator):
|
|
|
107
109
|
auto_mode_hook: Any | None = None,
|
|
108
110
|
hooks: Sequence[PromptBranch] | None = None,
|
|
109
111
|
classifier: PromptClassifier | None = None,
|
|
112
|
+
headless_session: bool = False,
|
|
110
113
|
) -> None:
|
|
111
114
|
warnings.warn(
|
|
112
115
|
"CliInteractivePolicyEngine is deprecated; use "
|
|
@@ -130,6 +133,7 @@ class CliInteractivePolicyEngine(PolicyEngineDecorator):
|
|
|
130
133
|
user_ui=ui,
|
|
131
134
|
hooks=hooks,
|
|
132
135
|
classifier=classifier,
|
|
136
|
+
headless_session=headless_session,
|
|
133
137
|
)
|
|
134
138
|
|
|
135
139
|
@property
|
|
@@ -14,13 +14,19 @@ import logging
|
|
|
14
14
|
from collections.abc import Sequence
|
|
15
15
|
|
|
16
16
|
from .race import PromptBranch, _deny, _run_hook_chain
|
|
17
|
-
from .types import
|
|
17
|
+
from .types import (
|
|
18
|
+
DecisionReason,
|
|
19
|
+
DecisionReasonType,
|
|
20
|
+
PromptDecisionSource,
|
|
21
|
+
PromptRequest,
|
|
22
|
+
PromptResponse,
|
|
23
|
+
)
|
|
18
24
|
|
|
19
25
|
logger = logging.getLogger(__name__)
|
|
20
26
|
|
|
21
27
|
|
|
22
28
|
class HeadlessPromptHandler:
|
|
23
|
-
"""非交互 L3:只跑 hook,无 hook 决议则 ``
|
|
29
|
+
"""非交互 L3:只跑 hook,无 hook 决议则 ``PROMPTS_UNAVAILABLE`` deny。"""
|
|
24
30
|
|
|
25
31
|
def __init__(
|
|
26
32
|
self,
|
|
@@ -34,7 +40,11 @@ class HeadlessPromptHandler:
|
|
|
34
40
|
async def handle(self, request: PromptRequest) -> PromptResponse:
|
|
35
41
|
if not self._hooks:
|
|
36
42
|
return _deny(
|
|
37
|
-
reason=
|
|
43
|
+
reason=DecisionReason(
|
|
44
|
+
type=DecisionReasonType.PROMPTS_UNAVAILABLE,
|
|
45
|
+
detail="prompts unavailable",
|
|
46
|
+
),
|
|
47
|
+
tool_name=request.tool_name,
|
|
38
48
|
source=PromptDecisionSource.HEADLESS_FALLBACK,
|
|
39
49
|
)
|
|
40
50
|
try:
|
|
@@ -46,12 +56,20 @@ class HeadlessPromptHandler:
|
|
|
46
56
|
except Exception as exc:
|
|
47
57
|
logger.exception("headless hook chain failed for %s: %s", request.tool_name, exc)
|
|
48
58
|
return _deny(
|
|
49
|
-
reason=
|
|
59
|
+
reason=DecisionReason(
|
|
60
|
+
type=DecisionReasonType.PROMPTS_UNAVAILABLE,
|
|
61
|
+
detail=f"headless hook failure: {exc}",
|
|
62
|
+
),
|
|
63
|
+
tool_name=request.tool_name,
|
|
50
64
|
source=PromptDecisionSource.HEADLESS_FALLBACK,
|
|
51
65
|
)
|
|
52
66
|
if resp is not None:
|
|
53
67
|
return resp
|
|
54
68
|
return _deny(
|
|
55
|
-
reason=
|
|
69
|
+
reason=DecisionReason(
|
|
70
|
+
type=DecisionReasonType.PROMPTS_UNAVAILABLE,
|
|
71
|
+
detail="prompts unavailable",
|
|
72
|
+
),
|
|
73
|
+
tool_name=request.tool_name,
|
|
56
74
|
source=PromptDecisionSource.HEADLESS_FALLBACK,
|
|
57
75
|
)
|
|
@@ -14,7 +14,13 @@ from __future__ import annotations
|
|
|
14
14
|
import warnings
|
|
15
15
|
|
|
16
16
|
from ..resolvers.base import PermissionResolver
|
|
17
|
-
from .types import
|
|
17
|
+
from .types import (
|
|
18
|
+
DecisionReason,
|
|
19
|
+
DecisionReasonType,
|
|
20
|
+
PromptDecisionSource,
|
|
21
|
+
PromptRequest,
|
|
22
|
+
PromptResponse,
|
|
23
|
+
)
|
|
18
24
|
|
|
19
25
|
|
|
20
26
|
class LegacyResolverPromptHandler:
|
|
@@ -37,10 +43,14 @@ class LegacyResolverPromptHandler:
|
|
|
37
43
|
return PromptResponse(
|
|
38
44
|
behavior="deny",
|
|
39
45
|
decision_source=PromptDecisionSource.LEGACY_RESOLVER,
|
|
40
|
-
|
|
46
|
+
decision_reason=DecisionReason(
|
|
47
|
+
type=DecisionReasonType.USER_REJECT,
|
|
48
|
+
detail=f"legacy resolver failed: {exc}",
|
|
49
|
+
),
|
|
50
|
+
message=f"Permission denied: legacy resolver failed: {exc}",
|
|
41
51
|
)
|
|
42
52
|
return PromptResponse(
|
|
43
53
|
behavior="allow" if allowed else "deny",
|
|
44
54
|
decision_source=PromptDecisionSource.LEGACY_RESOLVER,
|
|
45
|
-
|
|
55
|
+
message=None if allowed else (prompt or "denied by legacy resolver"),
|
|
46
56
|
)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
prompt/messages.py — L3 deny 消息模板(对齐 CC AUTO_REJECT_MESSAGE)
|
|
3
|
+
|
|
4
|
+
职责:
|
|
5
|
+
LLM-facing 拒因文案与 workaround 指引;内部诊断与展示层分离。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
DENIAL_WORKAROUND_GUIDANCE = (
|
|
11
|
+
"You should only try to work around this restriction in reasonable ways "
|
|
12
|
+
"that do not attempt to bypass the intent behind this denial. "
|
|
13
|
+
"If you believe this capability is essential to complete the user's request, "
|
|
14
|
+
"STOP and explain to the user what you were trying to do and why you need this permission."
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
PROMPTS_UNAVAILABLE_TEMPLATE = (
|
|
18
|
+
"Permission to use {tool_name} has been denied because "
|
|
19
|
+
"this session is running in non-interactive mode. "
|
|
20
|
+
f"{DENIAL_WORKAROUND_GUIDANCE}"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
UI_RESPONSE_TIMEOUT_TEMPLATE = (
|
|
24
|
+
"Permission to use {tool_name} has been denied because "
|
|
25
|
+
"no user response was received within the configured timeout. "
|
|
26
|
+
f"{DENIAL_WORKAROUND_GUIDANCE}"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
USER_ABORT_TEMPLATE = (
|
|
30
|
+
"Permission to use {tool_name} has been denied because "
|
|
31
|
+
"the session was aborted before a user response was received. "
|
|
32
|
+
f"{DENIAL_WORKAROUND_GUIDANCE}"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
NO_PARTICIPANTS_TEMPLATE = (
|
|
36
|
+
"Permission to use {tool_name} has been denied because "
|
|
37
|
+
"no permission prompt handler is configured for this session. "
|
|
38
|
+
f"{DENIAL_WORKAROUND_GUIDANCE}"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
GENERIC_DENY_TEMPLATE = (
|
|
42
|
+
"Permission to use {tool_name} has been denied. "
|
|
43
|
+
f"{DENIAL_WORKAROUND_GUIDANCE}"
|
|
44
|
+
)
|
|
@@ -3,13 +3,14 @@ prompt/race.py — HitlRaceCoordinator(L3 默认交互 race)
|
|
|
3
3
|
|
|
4
4
|
职责:
|
|
5
5
|
三路并发(PermissionRequest hooks / classifier / user UI)+ FIRST_COMPLETED;
|
|
6
|
-
deny 优先于 allow;abort
|
|
6
|
+
deny 优先于 allow;abort 与可选 hard_timeout;finally 取消余 task。
|
|
7
7
|
|
|
8
8
|
链路位置:
|
|
9
9
|
交互模式 pipeline 默认 prompt_handler(Phase 3 注入)。
|
|
10
10
|
|
|
11
11
|
当前裁剪:
|
|
12
12
|
hook 链为串行 awaitables 列表;classifier 单实例 Protocol。
|
|
13
|
+
UI 等待默认 unbounded(对齐 CC);hard_timeout 仅显式配置时生效。
|
|
13
14
|
"""
|
|
14
15
|
|
|
15
16
|
from __future__ import annotations
|
|
@@ -22,7 +23,13 @@ from typing import Protocol
|
|
|
22
23
|
|
|
23
24
|
from ._abort import _resolve_abort_event, run_with_branch_timeout, wait_for_abort
|
|
24
25
|
from .handler import PermissionPromptHandler
|
|
25
|
-
from .types import
|
|
26
|
+
from .types import (
|
|
27
|
+
DecisionReason,
|
|
28
|
+
DecisionReasonType,
|
|
29
|
+
PromptDecisionSource,
|
|
30
|
+
PromptRequest,
|
|
31
|
+
PromptResponse,
|
|
32
|
+
)
|
|
26
33
|
|
|
27
34
|
logger = logging.getLogger(__name__)
|
|
28
35
|
|
|
@@ -41,13 +48,15 @@ class PromptClassifier(Protocol):
|
|
|
41
48
|
|
|
42
49
|
def _deny(
|
|
43
50
|
*,
|
|
44
|
-
reason:
|
|
51
|
+
reason: DecisionReason,
|
|
52
|
+
tool_name: str,
|
|
45
53
|
source: PromptDecisionSource = PromptDecisionSource.HEADLESS_FALLBACK,
|
|
46
54
|
) -> PromptResponse:
|
|
47
55
|
return PromptResponse(
|
|
48
56
|
behavior="deny",
|
|
49
57
|
decision_source=source,
|
|
50
|
-
|
|
58
|
+
decision_reason=reason,
|
|
59
|
+
message=reason.to_llm_message(tool_name),
|
|
51
60
|
)
|
|
52
61
|
|
|
53
62
|
|
|
@@ -117,12 +126,15 @@ def _consume_completed(
|
|
|
117
126
|
return deny, allow
|
|
118
127
|
|
|
119
128
|
|
|
129
|
+
def _is_headless_request(request: PromptRequest, *, headless_session: bool) -> bool:
|
|
130
|
+
return request.headless or request.session_headless or headless_session
|
|
131
|
+
|
|
132
|
+
|
|
120
133
|
class HitlRaceCoordinator:
|
|
121
134
|
"""
|
|
122
135
|
默认 L3 交互 race:hooks ‖ classifier ‖ user_ui。
|
|
123
136
|
|
|
124
|
-
headless
|
|
125
|
-
时仅跑 hook 链并 deny 兜底。
|
|
137
|
+
headless / 无 UI 会话应在入口走 ``_run_headless``,不在 race 内赌时钟。
|
|
126
138
|
"""
|
|
127
139
|
|
|
128
140
|
def __init__(
|
|
@@ -131,9 +143,10 @@ class HitlRaceCoordinator:
|
|
|
131
143
|
hooks: Sequence[PromptBranch] | None = None,
|
|
132
144
|
classifier: PromptClassifier | None = None,
|
|
133
145
|
user_ui: PromptBranch | None = None,
|
|
134
|
-
hard_timeout_seconds: float =
|
|
146
|
+
hard_timeout_seconds: float | None = None,
|
|
135
147
|
hook_timeout_seconds: float = 30.0,
|
|
136
148
|
classifier_timeout_seconds: float = 15.0,
|
|
149
|
+
headless_session: bool = False,
|
|
137
150
|
) -> None:
|
|
138
151
|
self._hooks = list(hooks or ())
|
|
139
152
|
self._classifier = classifier
|
|
@@ -141,6 +154,14 @@ class HitlRaceCoordinator:
|
|
|
141
154
|
self._hard_timeout = hard_timeout_seconds
|
|
142
155
|
self._hook_timeout = hook_timeout_seconds
|
|
143
156
|
self._classifier_timeout = classifier_timeout_seconds
|
|
157
|
+
self._headless_session = headless_session
|
|
158
|
+
|
|
159
|
+
if not headless_session and user_ui is None:
|
|
160
|
+
logger.warning(
|
|
161
|
+
"HitlRaceCoordinator created without user_ui in non-headless session — "
|
|
162
|
+
"interactive prompts will deny without participants. "
|
|
163
|
+
"Either set headless_session=True or provide user_ui."
|
|
164
|
+
)
|
|
144
165
|
|
|
145
166
|
@classmethod
|
|
146
167
|
def default(cls) -> HitlRaceCoordinator:
|
|
@@ -148,7 +169,7 @@ class HitlRaceCoordinator:
|
|
|
148
169
|
return cls()
|
|
149
170
|
|
|
150
171
|
async def handle(self, request: PromptRequest) -> PromptResponse:
|
|
151
|
-
if request.
|
|
172
|
+
if _is_headless_request(request, headless_session=self._headless_session):
|
|
152
173
|
return await self._run_headless(request)
|
|
153
174
|
|
|
154
175
|
task_sources: dict[asyncio.Task, PromptDecisionSource] = {}
|
|
@@ -185,7 +206,13 @@ class HitlRaceCoordinator:
|
|
|
185
206
|
] = PromptDecisionSource.USER_UI
|
|
186
207
|
|
|
187
208
|
if not task_sources:
|
|
188
|
-
return _deny(
|
|
209
|
+
return _deny(
|
|
210
|
+
reason=DecisionReason(
|
|
211
|
+
type=DecisionReasonType.NO_PARTICIPANTS,
|
|
212
|
+
detail="no prompt participants configured",
|
|
213
|
+
),
|
|
214
|
+
tool_name=request.tool_name,
|
|
215
|
+
)
|
|
189
216
|
|
|
190
217
|
abort_task: asyncio.Task[None] | None = None
|
|
191
218
|
if _resolve_abort_event(request.ctx) is not None:
|
|
@@ -208,10 +235,26 @@ class HitlRaceCoordinator:
|
|
|
208
235
|
return_when=asyncio.FIRST_COMPLETED,
|
|
209
236
|
)
|
|
210
237
|
if not done:
|
|
211
|
-
|
|
238
|
+
if self._hard_timeout is not None:
|
|
239
|
+
return _deny(
|
|
240
|
+
reason=DecisionReason(
|
|
241
|
+
type=DecisionReasonType.UI_RESPONSE_TIMEOUT,
|
|
242
|
+
detail="ui_response_timeout",
|
|
243
|
+
),
|
|
244
|
+
tool_name=request.tool_name,
|
|
245
|
+
source=PromptDecisionSource.USER_UI,
|
|
246
|
+
)
|
|
247
|
+
continue
|
|
212
248
|
|
|
213
249
|
if abort_task is not None and abort_task in done:
|
|
214
|
-
|
|
250
|
+
return _deny(
|
|
251
|
+
reason=DecisionReason(
|
|
252
|
+
type=DecisionReasonType.USER_ABORT,
|
|
253
|
+
detail="permission prompt aborted",
|
|
254
|
+
),
|
|
255
|
+
tool_name=request.tool_name,
|
|
256
|
+
source=PromptDecisionSource.USER_UI,
|
|
257
|
+
)
|
|
215
258
|
|
|
216
259
|
deny_hit, allow_hit = _consume_completed(
|
|
217
260
|
done,
|
|
@@ -243,11 +286,23 @@ class HitlRaceCoordinator:
|
|
|
243
286
|
best_allow.decision_source,
|
|
244
287
|
)
|
|
245
288
|
return best_allow
|
|
246
|
-
return _deny(
|
|
289
|
+
return _deny(
|
|
290
|
+
reason=DecisionReason(
|
|
291
|
+
type=DecisionReasonType.NO_DECISION,
|
|
292
|
+
detail="no prompt decision",
|
|
293
|
+
),
|
|
294
|
+
tool_name=request.tool_name,
|
|
295
|
+
)
|
|
247
296
|
|
|
248
297
|
async def _run_headless(self, request: PromptRequest) -> PromptResponse:
|
|
249
298
|
if not self._hooks:
|
|
250
|
-
return _deny(
|
|
299
|
+
return _deny(
|
|
300
|
+
reason=DecisionReason(
|
|
301
|
+
type=DecisionReasonType.PROMPTS_UNAVAILABLE,
|
|
302
|
+
detail="prompts unavailable",
|
|
303
|
+
),
|
|
304
|
+
tool_name=request.tool_name,
|
|
305
|
+
)
|
|
251
306
|
resp = await _run_hook_chain(
|
|
252
307
|
self._hooks,
|
|
253
308
|
request,
|
|
@@ -255,4 +310,10 @@ class HitlRaceCoordinator:
|
|
|
255
310
|
)
|
|
256
311
|
if resp is not None:
|
|
257
312
|
return resp
|
|
258
|
-
return _deny(
|
|
313
|
+
return _deny(
|
|
314
|
+
reason=DecisionReason(
|
|
315
|
+
type=DecisionReasonType.PROMPTS_UNAVAILABLE,
|
|
316
|
+
detail="prompts unavailable",
|
|
317
|
+
),
|
|
318
|
+
tool_name=request.tool_name,
|
|
319
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
prompt/session_mode.py — 会话 headless 推断(对齐 CC shouldAvoidPermissionPrompts)
|
|
3
|
+
|
|
4
|
+
职责:
|
|
5
|
+
在 session / loop 创建时推断是否应避免交互式 permission prompt。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
_HEADLESS_CONTAINER_TYPES = frozenset({"background", "batch", "worker", "sdk"})
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def infer_session_headless(
|
|
16
|
+
*,
|
|
17
|
+
headless: bool | None,
|
|
18
|
+
container_type: str | None = None,
|
|
19
|
+
) -> bool:
|
|
20
|
+
"""显式 ``headless`` 优先;否则 container_type 或无 TTY stdout 推断。"""
|
|
21
|
+
if headless is not None:
|
|
22
|
+
return headless
|
|
23
|
+
if container_type in _HEADLESS_CONTAINER_TYPES:
|
|
24
|
+
return True
|
|
25
|
+
try:
|
|
26
|
+
return not sys.stdout.isatty()
|
|
27
|
+
except Exception:
|
|
28
|
+
return False
|
|
@@ -19,6 +19,13 @@ from enum import StrEnum
|
|
|
19
19
|
from typing import Any, Literal
|
|
20
20
|
|
|
21
21
|
from ..models import AuthorizationDecision, ToolExecutionContext
|
|
22
|
+
from .messages import (
|
|
23
|
+
GENERIC_DENY_TEMPLATE,
|
|
24
|
+
NO_PARTICIPANTS_TEMPLATE,
|
|
25
|
+
PROMPTS_UNAVAILABLE_TEMPLATE,
|
|
26
|
+
UI_RESPONSE_TIMEOUT_TEMPLATE,
|
|
27
|
+
USER_ABORT_TEMPLATE,
|
|
28
|
+
)
|
|
22
29
|
|
|
23
30
|
|
|
24
31
|
class PromptDecisionSource(StrEnum):
|
|
@@ -31,6 +38,38 @@ class PromptDecisionSource(StrEnum):
|
|
|
31
38
|
LEGACY_RESOLVER = "legacy_resolver"
|
|
32
39
|
|
|
33
40
|
|
|
41
|
+
class DecisionReasonType(StrEnum):
|
|
42
|
+
"""结构化拒因类型(内部诊断 + LLM 模板路由)。"""
|
|
43
|
+
|
|
44
|
+
HOOK_DENY = "hook_deny"
|
|
45
|
+
CLASSIFIER_DENY = "classifier_deny"
|
|
46
|
+
USER_REJECT = "user_reject"
|
|
47
|
+
NO_PARTICIPANTS = "no_participants"
|
|
48
|
+
PROMPTS_UNAVAILABLE = "prompts_unavailable"
|
|
49
|
+
UI_RESPONSE_TIMEOUT = "ui_response_timeout"
|
|
50
|
+
USER_ABORT = "user_abort"
|
|
51
|
+
NO_DECISION = "no_decision"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@dataclass(frozen=True)
|
|
55
|
+
class DecisionReason:
|
|
56
|
+
type: DecisionReasonType
|
|
57
|
+
detail: str | None = None
|
|
58
|
+
|
|
59
|
+
def to_llm_message(self, tool_name: str) -> str:
|
|
60
|
+
if self.type == DecisionReasonType.PROMPTS_UNAVAILABLE:
|
|
61
|
+
return PROMPTS_UNAVAILABLE_TEMPLATE.format(tool_name=tool_name)
|
|
62
|
+
if self.type == DecisionReasonType.UI_RESPONSE_TIMEOUT:
|
|
63
|
+
return UI_RESPONSE_TIMEOUT_TEMPLATE.format(tool_name=tool_name)
|
|
64
|
+
if self.type == DecisionReasonType.USER_ABORT:
|
|
65
|
+
return USER_ABORT_TEMPLATE.format(tool_name=tool_name)
|
|
66
|
+
if self.type == DecisionReasonType.NO_PARTICIPANTS:
|
|
67
|
+
return NO_PARTICIPANTS_TEMPLATE.format(tool_name=tool_name)
|
|
68
|
+
if self.detail:
|
|
69
|
+
return f"Permission to use {tool_name} has been denied: {self.detail}"
|
|
70
|
+
return GENERIC_DENY_TEMPLATE.format(tool_name=tool_name)
|
|
71
|
+
|
|
72
|
+
|
|
34
73
|
@dataclass(frozen=True)
|
|
35
74
|
class PermissionUpdate:
|
|
36
75
|
"""
|
|
@@ -55,7 +94,10 @@ class PromptRequest:
|
|
|
55
94
|
input_data: dict[str, Any]
|
|
56
95
|
ctx: ToolExecutionContext
|
|
57
96
|
ask_decision: AuthorizationDecision
|
|
58
|
-
headless: bool
|
|
97
|
+
headless: bool = False
|
|
98
|
+
"""单次请求强制 headless(罕见 override;默认 False)。"""
|
|
99
|
+
session_headless: bool = False
|
|
100
|
+
"""会话级 headless(对齐 CC shouldAvoidPermissionPrompts)。"""
|
|
59
101
|
ask_prompt: str | None = None
|
|
60
102
|
suggestions: tuple[PermissionUpdate, ...] = field(default_factory=tuple)
|
|
61
103
|
|
|
@@ -66,6 +108,16 @@ class PromptResponse:
|
|
|
66
108
|
|
|
67
109
|
behavior: Literal["allow", "deny"]
|
|
68
110
|
decision_source: PromptDecisionSource
|
|
69
|
-
|
|
111
|
+
decision_reason: DecisionReason | None = None
|
|
112
|
+
message: str | None = None
|
|
70
113
|
updated_input: dict[str, Any] | None = None
|
|
71
114
|
permission_updates: tuple[PermissionUpdate, ...] = field(default_factory=tuple)
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def reason(self) -> str | None:
|
|
118
|
+
"""Deprecated:请用 ``message`` 或 ``decision_reason.detail``。"""
|
|
119
|
+
if self.message is not None:
|
|
120
|
+
return self.message
|
|
121
|
+
if self.decision_reason is not None:
|
|
122
|
+
return self.decision_reason.detail
|
|
123
|
+
return None
|