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