langchain-agentx-python 2.1.7__py3-none-any.whl → 2.1.9__py3-none-any.whl
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/__init__.py +1 -1
- langchain_agentx/loop/config/loop_config.py +5 -0
- langchain_agentx/loop/config/loop_runtime_overlay.py +6 -1
- langchain_agentx/loop/graph/factory.py +22 -2
- langchain_agentx/loop/runtime/context_factory.py +1 -0
- langchain_agentx/loop/subagent/context.py +3 -0
- langchain_agentx/loop/subagent/graph.py +1 -0
- langchain_agentx/observability/trace/__init__.py +8 -0
- langchain_agentx/observability/trace/persist_policy.py +40 -0
- langchain_agentx/session/agent_session.py +4 -0
- langchain_agentx/session/factory.py +1 -0
- langchain_agentx/tool_runtime/adapter.py +6 -1
- langchain_agentx/tool_runtime/cancel_projection.py +85 -0
- langchain_agentx/tool_runtime/pipeline.py +6 -1
- langchain_agentx/tools/agent/tool.py +29 -3
- langchain_agentx/workspace/capabilities.py +18 -2
- {langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/METADATA +1 -1
- {langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/RECORD +21 -19
- {langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/LICENSE +0 -0
- {langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/WHEEL +0 -0
- {langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/top_level.txt +0 -0
langchain_agentx/__init__.py
CHANGED
|
@@ -81,8 +81,13 @@ class TraceConfig:
|
|
|
81
81
|
"""观测追踪配置。
|
|
82
82
|
|
|
83
83
|
CC 对照:options.debug / queryTracking 等。
|
|
84
|
+
|
|
85
|
+
- ``enabled``:是否挂 TraceCollector 埋点(lifecycle / callback)。
|
|
86
|
+
- ``persist``:是否挂 ``SqliteTraceStore`` 写 traces.db;默认 False,避免盘胀。
|
|
87
|
+
亦可经环境变量 ``LANGCHAIN_AGENTX_TRACE_PERSIST=1`` 打开(见 persist_policy)。
|
|
84
88
|
"""
|
|
85
89
|
enabled: bool = True
|
|
90
|
+
persist: bool = False
|
|
86
91
|
visibility: str | None = None
|
|
87
92
|
parent_run_id: str | None = None
|
|
88
93
|
parent_tool_call_id: str | None = None
|
|
@@ -9,7 +9,8 @@ loop_runtime_overlay.py — L4 graph_factory 运行期 overlay(IF-G6)
|
|
|
9
9
|
→ graph_factory(overlay) → apply_to(AgentLoopConfig) → create_loop_agent
|
|
10
10
|
|
|
11
11
|
当前裁剪范围:
|
|
12
|
-
仅 session_id、trace 父链、subagent 标记、capabilities、enable_trace
|
|
12
|
+
仅 session_id、trace 父链、subagent 标记、capabilities、enable_trace / trace_persist;
|
|
13
|
+
不含 container_type。
|
|
13
14
|
"""
|
|
14
15
|
|
|
15
16
|
from __future__ import annotations
|
|
@@ -26,6 +27,7 @@ class LoopRuntimeOverlay:
|
|
|
26
27
|
|
|
27
28
|
session_id: str | None = None
|
|
28
29
|
enable_trace: bool | None = None
|
|
30
|
+
trace_persist: bool | None = None
|
|
29
31
|
capabilities: Any = None
|
|
30
32
|
parent_conversation_session_id: str | None = None
|
|
31
33
|
is_subagent: bool | None = None
|
|
@@ -41,6 +43,9 @@ class LoopRuntimeOverlay:
|
|
|
41
43
|
if self.enable_trace is not None:
|
|
42
44
|
trace = replace(trace, enabled=self.enable_trace)
|
|
43
45
|
trace_changed = True
|
|
46
|
+
if self.trace_persist is not None:
|
|
47
|
+
trace = replace(trace, persist=self.trace_persist)
|
|
48
|
+
trace_changed = True
|
|
44
49
|
if self.parent_conversation_session_id is not None:
|
|
45
50
|
trace = replace(trace, parent_conversation_session_id=self.parent_conversation_session_id)
|
|
46
51
|
trace_changed = True
|
|
@@ -305,6 +305,7 @@ def _flatten_config_for_runtime(config: AgentLoopConfig) -> _FlatLoopConfig:
|
|
|
305
305
|
agent_depth=config.agent_depth,
|
|
306
306
|
subagent_type=config.subagent.subagent_type,
|
|
307
307
|
trace_enabled=config.trace.enabled,
|
|
308
|
+
trace_persist=config.trace.persist,
|
|
308
309
|
headless=config.headless,
|
|
309
310
|
model_profile=config.model_profile,
|
|
310
311
|
model_profile_registry=config.model_profile_registry,
|
|
@@ -1143,9 +1144,28 @@ class LoopGraphBuilder:
|
|
|
1143
1144
|
if not self._config.trace.enabled:
|
|
1144
1145
|
return None
|
|
1145
1146
|
if self._services.trace_collector is not None:
|
|
1147
|
+
# 显式注入:调用方自管 store 生命周期(测试 / 宿主)
|
|
1146
1148
|
return self._services.trace_collector
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
+
|
|
1150
|
+
from ...observability.trace.persist_policy import resolve_trace_persist
|
|
1151
|
+
|
|
1152
|
+
persist = resolve_trace_persist(configured=bool(self._config.trace.persist))
|
|
1153
|
+
caps = self._services.capabilities
|
|
1154
|
+
caps_collector = (
|
|
1155
|
+
caps.trace_collector
|
|
1156
|
+
if caps is not None and getattr(caps, "trace_collector", None) is not None
|
|
1157
|
+
else None
|
|
1158
|
+
)
|
|
1159
|
+
|
|
1160
|
+
if not persist:
|
|
1161
|
+
# 不落盘:复用 caps 上无 store 的 collector;若 caps 误带 store 则改用内存 collector,避免写库。
|
|
1162
|
+
if caps_collector is not None and getattr(caps_collector, "_store", None) is None:
|
|
1163
|
+
return caps_collector
|
|
1164
|
+
return TraceCollector(store=None)
|
|
1165
|
+
|
|
1166
|
+
# persist=True:必须挂有 store 的 collector;caps 无 store 时兜底 from_env,避免「开了 persist 仍不落盘」。
|
|
1167
|
+
if caps_collector is not None and getattr(caps_collector, "_store", None) is not None:
|
|
1168
|
+
return caps_collector
|
|
1149
1169
|
return TraceCollector(SqliteTraceStore.from_env())
|
|
1150
1170
|
|
|
1151
1171
|
def _resolve_response_format_setup(
|
|
@@ -91,6 +91,7 @@ class SubagentContext:
|
|
|
91
91
|
parent_tool_call_id: str | None = None # 触发本子 Agent 的 tool_call_id
|
|
92
92
|
parent_conversation_session_id: str | None = None
|
|
93
93
|
enable_trace: bool = True
|
|
94
|
+
trace_persist: bool = False
|
|
94
95
|
runnable_config: Any = None # 父 runnable_config:仅供 tool_progress custom event 回调链;非子 raw 合并
|
|
95
96
|
isolation: str = "none"
|
|
96
97
|
worktree_dir: str | None = None
|
|
@@ -324,6 +325,7 @@ def create_subagent_context(
|
|
|
324
325
|
parent_tool_call_id=parent_tool_call_id,
|
|
325
326
|
parent_conversation_session_id=parent_conversation_id,
|
|
326
327
|
enable_trace=bool(getattr(parent_ctx, "trace_enabled", True)),
|
|
328
|
+
trace_persist=bool(getattr(parent_ctx, "trace_persist", False)),
|
|
327
329
|
isolation=isolation,
|
|
328
330
|
worktree_dir=worktree_dir,
|
|
329
331
|
workspace_root=str(parent_workspace_root),
|
|
@@ -476,6 +478,7 @@ class SubagentContextFactory:
|
|
|
476
478
|
parent_run_id=parent_runtime.parent_run_id,
|
|
477
479
|
parent_conversation_session_id=parent_runtime.parent_conversation_session_id,
|
|
478
480
|
enable_trace=not skip_transcript,
|
|
481
|
+
trace_persist=bool(getattr(parent_runtime, "trace_persist", False)),
|
|
479
482
|
workspace_root=workspace_root,
|
|
480
483
|
agent_home_segment=agent_home_segment,
|
|
481
484
|
cwd=effective_cwd,
|
|
@@ -13,6 +13,11 @@ from .sqlite_store import SqliteTraceStore
|
|
|
13
13
|
from .trace_lifecycle_collector import TraceLifecycleCollector
|
|
14
14
|
from .trace_callback import TraceCallbackHandler
|
|
15
15
|
from .hook_event_emitter import HookEventEmitter
|
|
16
|
+
from .persist_policy import (
|
|
17
|
+
ENV_TRACE_PERSIST,
|
|
18
|
+
env_trace_persist_enabled,
|
|
19
|
+
resolve_trace_persist,
|
|
20
|
+
)
|
|
16
21
|
|
|
17
22
|
__all__ = [
|
|
18
23
|
"TraceSession",
|
|
@@ -22,4 +27,7 @@ __all__ = [
|
|
|
22
27
|
"TraceLifecycleCollector",
|
|
23
28
|
"TraceCallbackHandler",
|
|
24
29
|
"HookEventEmitter",
|
|
30
|
+
"ENV_TRACE_PERSIST",
|
|
31
|
+
"env_trace_persist_enabled",
|
|
32
|
+
"resolve_trace_persist",
|
|
25
33
|
]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""
|
|
2
|
+
persist_policy.py — Trace SQLite 落盘开关解析
|
|
3
|
+
|
|
4
|
+
职责:
|
|
5
|
+
统一 ``TraceConfig.persist`` 与环境变量的合成规则;默认不落盘。
|
|
6
|
+
|
|
7
|
+
链路位置:
|
|
8
|
+
RuntimeCapabilities / Loop factory / AgentSession → resolve_trace_persist
|
|
9
|
+
|
|
10
|
+
当前裁剪范围:
|
|
11
|
+
仅布尔开关;不负责 db 路径(路径仍由 SqliteTraceStore / AGENTX_TRACE_DB_PATH)。
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
ENV_TRACE_PERSIST = "LANGCHAIN_AGENTX_TRACE_PERSIST"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def env_trace_persist_enabled() -> bool:
|
|
22
|
+
"""环境变量是否打开落盘(``1`` / ``true`` / ``yes`` / ``on``)。"""
|
|
23
|
+
val = os.getenv(ENV_TRACE_PERSIST, "").strip().lower()
|
|
24
|
+
return val in ("1", "true", "yes", "on")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def resolve_trace_persist(*, configured: bool = False) -> bool:
|
|
28
|
+
"""合成是否挂 SqliteTraceStore。
|
|
29
|
+
|
|
30
|
+
规则:``configured`` OR env;默认 False。
|
|
31
|
+
单独设置 ``AGENTX_TRACE_DB_PATH`` **不会**自动打开 persist。
|
|
32
|
+
"""
|
|
33
|
+
return bool(configured) or env_trace_persist_enabled()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"ENV_TRACE_PERSIST",
|
|
38
|
+
"env_trace_persist_enabled",
|
|
39
|
+
"resolve_trace_persist",
|
|
40
|
+
]
|
|
@@ -82,6 +82,7 @@ class AgentSession:
|
|
|
82
82
|
transcript_writer: SubagentTranscriptStore | None = None,
|
|
83
83
|
container_type: str = "interactive",
|
|
84
84
|
enable_trace: bool = True,
|
|
85
|
+
trace_persist: bool = False,
|
|
85
86
|
capabilities: RuntimeCapabilities | None = None,
|
|
86
87
|
) -> None:
|
|
87
88
|
self._graph = graph
|
|
@@ -93,6 +94,7 @@ class AgentSession:
|
|
|
93
94
|
self._messages: list[Any] = []
|
|
94
95
|
self._container_type = container_type
|
|
95
96
|
self._enable_trace = enable_trace
|
|
97
|
+
self._trace_persist = trace_persist
|
|
96
98
|
self._transcript_writer = transcript_writer
|
|
97
99
|
self._last_transcript_uuid: str | None = None
|
|
98
100
|
self._last_finish_outcome: dict[str, Any] | None = None
|
|
@@ -100,6 +102,7 @@ class AgentSession:
|
|
|
100
102
|
self._capabilities = capabilities or RuntimeCapabilities.build(
|
|
101
103
|
resource_root=workspace_cfg.workspace_root,
|
|
102
104
|
agent_home_segment=workspace_cfg.agent_home_segment,
|
|
105
|
+
trace_persist=trace_persist,
|
|
103
106
|
)
|
|
104
107
|
self._skill_registry = SkillRegistry(workspace_root=workspace_cfg.workspace_root)
|
|
105
108
|
self._command_registry = PluginCommandRegistry()
|
|
@@ -544,6 +547,7 @@ class AgentSession:
|
|
|
544
547
|
return self._graph_factory(
|
|
545
548
|
LoopRuntimeOverlay(
|
|
546
549
|
enable_trace=self._enable_trace,
|
|
550
|
+
trace_persist=self._trace_persist,
|
|
547
551
|
capabilities=self._capabilities,
|
|
548
552
|
),
|
|
549
553
|
active_files_getter=getter,
|
|
@@ -653,10 +653,15 @@ class LangChainAdapter:
|
|
|
653
653
|
|
|
654
654
|
@staticmethod
|
|
655
655
|
def _envelope_to_event_artifact_dict(env: ToolResultEnvelope) -> dict[str, Any]:
|
|
656
|
+
from langchain_agentx.tool_runtime.cancel_projection import (
|
|
657
|
+
resolve_artifact_terminal_state,
|
|
658
|
+
)
|
|
659
|
+
|
|
656
660
|
raw = asdict(env)
|
|
657
661
|
raw["schema_version"] = "2"
|
|
658
662
|
result = LangChainAdapter._json_safe_value(raw)
|
|
659
|
-
result
|
|
663
|
+
meta = result.get("meta") if isinstance(result.get("meta"), dict) else {}
|
|
664
|
+
result["terminal_state"] = resolve_artifact_terminal_state(meta=meta)
|
|
660
665
|
# B1/C3 方案 B:blocks/hints/artifacts 同时落 meta.envelope_extensions,
|
|
661
666
|
# CLI Bridge 只消费 meta/display/payload,不扩字段面。
|
|
662
667
|
extensions: dict[str, Any] = {}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
tool_runtime/cancel_projection.py — 工具取消投影(层 C · D-TR)
|
|
3
|
+
|
|
4
|
+
职责:判定取消窄条件,解析 artifact ``terminal_state`` 与 model payload 双轨哨兵。
|
|
5
|
+
链路位置:``AgentRuntimeTool.present`` → adapter/pipeline ``envelope → artifact``。
|
|
6
|
+
对照 CC:``CANCEL_MESSAGE`` / ``INTERRUPT_MESSAGE_FOR_TOOL_USE``;设计 D-TR-1…4。
|
|
7
|
+
当前裁剪:不扩 ``ToolResultEnvelope.status``;禁止仅凭散文含 cancel 推断。
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Any, Literal, Mapping
|
|
13
|
+
|
|
14
|
+
from langchain_agentx.loop.exit.reason_codes import (
|
|
15
|
+
TERMINAL_REASON_ABORTED_STREAMING,
|
|
16
|
+
TERMINAL_REASON_ABORTED_TOOLS,
|
|
17
|
+
TERMINAL_REASON_HOOK_STOPPED,
|
|
18
|
+
)
|
|
19
|
+
from langchain_agentx.tool_runtime.messages import (
|
|
20
|
+
CANCEL_MESSAGE,
|
|
21
|
+
INTERRUPT_MESSAGE_FOR_TOOL_USE,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
CANCEL_ERROR_KINDS = frozenset({"aborted", "user_cancelled", "cancelled"})
|
|
25
|
+
|
|
26
|
+
ABORT_LIKE_TERMINAL_REASONS = frozenset(
|
|
27
|
+
{
|
|
28
|
+
TERMINAL_REASON_ABORTED_STREAMING,
|
|
29
|
+
TERMINAL_REASON_ABORTED_TOOLS,
|
|
30
|
+
TERMINAL_REASON_HOOK_STOPPED,
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def is_cancel_projection(
|
|
36
|
+
*,
|
|
37
|
+
source_status: str | None = None,
|
|
38
|
+
error_kind: str | None = None,
|
|
39
|
+
terminal_reason: str | None = None,
|
|
40
|
+
) -> bool:
|
|
41
|
+
"""D-TR-3:满足其一即视为用户取消投影(窄条件)。"""
|
|
42
|
+
if source_status == "interrupted":
|
|
43
|
+
return True
|
|
44
|
+
if error_kind in CANCEL_ERROR_KINDS:
|
|
45
|
+
return True
|
|
46
|
+
if terminal_reason in ABORT_LIKE_TERMINAL_REASONS:
|
|
47
|
+
return True
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def resolve_cancel_model_payload(*, error_kind: str | None) -> str:
|
|
52
|
+
"""D-TR-4:Stop 轨 ``user_cancelled`` → CANCEL;其余取消 → INTERRUPT_FOR_TOOL_USE。"""
|
|
53
|
+
if error_kind == "user_cancelled":
|
|
54
|
+
return CANCEL_MESSAGE
|
|
55
|
+
return INTERRUPT_MESSAGE_FOR_TOOL_USE
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def resolve_artifact_terminal_state(
|
|
59
|
+
*,
|
|
60
|
+
meta: Mapping[str, Any] | None = None,
|
|
61
|
+
terminal_reason: str | None = None,
|
|
62
|
+
) -> Literal["completed", "cancelled"]:
|
|
63
|
+
"""adapter/pipeline 共用:取消 → ``cancelled``,否则 ``completed``。"""
|
|
64
|
+
m = meta if isinstance(meta, Mapping) else {}
|
|
65
|
+
reason = terminal_reason if terminal_reason is not None else m.get("terminal_reason")
|
|
66
|
+
kind = m.get("error_kind")
|
|
67
|
+
source = m.get("source_status")
|
|
68
|
+
if is_cancel_projection(
|
|
69
|
+
source_status=str(source) if source is not None else None,
|
|
70
|
+
error_kind=str(kind) if kind is not None else None,
|
|
71
|
+
terminal_reason=str(reason) if reason is not None else None,
|
|
72
|
+
):
|
|
73
|
+
return "cancelled"
|
|
74
|
+
return "completed"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
__all__ = [
|
|
78
|
+
"ABORT_LIKE_TERMINAL_REASONS",
|
|
79
|
+
"CANCEL_ERROR_KINDS",
|
|
80
|
+
"CANCEL_MESSAGE",
|
|
81
|
+
"INTERRUPT_MESSAGE_FOR_TOOL_USE",
|
|
82
|
+
"is_cancel_projection",
|
|
83
|
+
"resolve_artifact_terminal_state",
|
|
84
|
+
"resolve_cancel_model_payload",
|
|
85
|
+
]
|
|
@@ -684,7 +684,12 @@ class ToolExecutorPipeline:
|
|
|
684
684
|
|
|
685
685
|
artifact = json_safe(asdict(envelope))
|
|
686
686
|
artifact["schema_version"] = "2"
|
|
687
|
-
|
|
687
|
+
from langchain_agentx.tool_runtime.cancel_projection import (
|
|
688
|
+
resolve_artifact_terminal_state,
|
|
689
|
+
)
|
|
690
|
+
|
|
691
|
+
meta = artifact.get("meta") if isinstance(artifact.get("meta"), dict) else {}
|
|
692
|
+
artifact["terminal_state"] = resolve_artifact_terminal_state(meta=meta)
|
|
688
693
|
|
|
689
694
|
# display 可选(CC renderToolResultMessage?);无 Output 跳过;抛错不炸 pipeline
|
|
690
695
|
if (
|
|
@@ -17,6 +17,10 @@ import logging
|
|
|
17
17
|
from typing import Any, Literal
|
|
18
18
|
|
|
19
19
|
from langchain_agentx.tool_runtime.base import RuntimeTool
|
|
20
|
+
from langchain_agentx.tool_runtime.cancel_projection import (
|
|
21
|
+
is_cancel_projection,
|
|
22
|
+
resolve_cancel_model_payload,
|
|
23
|
+
)
|
|
20
24
|
from langchain_agentx.tool_runtime.models import (
|
|
21
25
|
AuthorizationDecision,
|
|
22
26
|
L1PermissionResult,
|
|
@@ -355,7 +359,14 @@ class AgentRuntimeTool(RuntimeTool):
|
|
|
355
359
|
},
|
|
356
360
|
)
|
|
357
361
|
if out.status == "error":
|
|
358
|
-
|
|
362
|
+
if is_cancel_projection(
|
|
363
|
+
error_kind=out.error_kind,
|
|
364
|
+
terminal_reason=out.terminal_reason,
|
|
365
|
+
):
|
|
366
|
+
return self._present_cancelled(inp, out, source_status="error")
|
|
367
|
+
payload = out.error_message or (
|
|
368
|
+
out.errors[0] if out.errors else "Subagent execution failed"
|
|
369
|
+
)
|
|
359
370
|
return ToolResultEnvelope(
|
|
360
371
|
status="error",
|
|
361
372
|
tool_name=self.name,
|
|
@@ -368,16 +379,31 @@ class AgentRuntimeTool(RuntimeTool):
|
|
|
368
379
|
**_agent_termination_meta(out),
|
|
369
380
|
},
|
|
370
381
|
)
|
|
382
|
+
# interrupted(及未知非 completed/async)→ 取消投影(D-TR-3/4)
|
|
383
|
+
return self._present_cancelled(inp, out, source_status="interrupted")
|
|
384
|
+
|
|
385
|
+
def _present_cancelled(
|
|
386
|
+
self,
|
|
387
|
+
inp: AgentToolInput,
|
|
388
|
+
out: AgentToolOutput,
|
|
389
|
+
*,
|
|
390
|
+
source_status: str,
|
|
391
|
+
) -> ToolResultEnvelope:
|
|
392
|
+
"""层 C:取消双轨 payload;Envelope.status 仍为 error(D-TR-2)。"""
|
|
393
|
+
error_kind = out.error_kind or "aborted"
|
|
394
|
+
term = _agent_termination_meta(out)
|
|
395
|
+
term["error_kind"] = error_kind
|
|
371
396
|
return ToolResultEnvelope(
|
|
372
397
|
status="error",
|
|
373
398
|
tool_name=self.name,
|
|
374
399
|
summary=f"Agent({inp.subagent_type}) interrupted",
|
|
375
|
-
payload=
|
|
400
|
+
payload=resolve_cancel_model_payload(error_kind=error_kind),
|
|
376
401
|
meta={
|
|
377
402
|
"agent_id": out.agent_id,
|
|
378
403
|
"terminal_reason": out.terminal_reason,
|
|
379
404
|
"mode": self._mode,
|
|
380
|
-
|
|
405
|
+
"source_status": source_status,
|
|
406
|
+
**term,
|
|
381
407
|
},
|
|
382
408
|
)
|
|
383
409
|
|
|
@@ -18,7 +18,8 @@ workspace/capabilities.py — RuntimeCapabilities 单例与分档协作者
|
|
|
18
18
|
- B 档:WorkspaceDefaults(default_skills_dir / default_agents_dir)
|
|
19
19
|
- Overrides:NodeWorkspaceOverrides(skills_dir / agents_dir + validate)
|
|
20
20
|
- provider 凭证管理暂沿用原 provider 模块,后续另迁
|
|
21
|
-
- 不承载目录副作用创建;trace_collector
|
|
21
|
+
- 不承载目录副作用创建;trace_collector 默认不挂 Sqlite(persist=False);
|
|
22
|
+
失败降级不写磁盘,仅发 hook 告警
|
|
22
23
|
"""
|
|
23
24
|
|
|
24
25
|
from __future__ import annotations
|
|
@@ -145,7 +146,8 @@ class _TraceCollectorFactory:
|
|
|
145
146
|
"""trace_collector 构造 + 失败降级的小协作者。
|
|
146
147
|
|
|
147
148
|
将"构造 / retry / 降级 / hook 告警"聚合为一个职责,避免 capabilities.build
|
|
148
|
-
|
|
149
|
+
变成过程式堆叠。``persist=False`` 时直接 ``TraceCollector(store=None)``,
|
|
150
|
+
不建库;失败降级同样为 store=None(内存空操作)。
|
|
149
151
|
"""
|
|
150
152
|
|
|
151
153
|
_RETRYABLE_ERRORS: tuple[type[BaseException], ...] = (ConnectionError, TimeoutError)
|
|
@@ -154,16 +156,21 @@ class _TraceCollectorFactory:
|
|
|
154
156
|
self,
|
|
155
157
|
*,
|
|
156
158
|
primary_home_dir: Path,
|
|
159
|
+
persist: bool = False,
|
|
157
160
|
hook_registry: Any | None = None,
|
|
158
161
|
store_builder: Optional[Callable[[Path], Any]] = None,
|
|
159
162
|
) -> None:
|
|
160
163
|
self._primary_home_dir = primary_home_dir
|
|
164
|
+
self._persist = persist
|
|
161
165
|
self._hook_registry = hook_registry
|
|
162
166
|
self._store_builder = store_builder
|
|
163
167
|
|
|
164
168
|
def build(self) -> Any:
|
|
165
169
|
from langchain_agentx.observability.trace import TraceCollector
|
|
166
170
|
|
|
171
|
+
if not self._persist:
|
|
172
|
+
return TraceCollector(store=None)
|
|
173
|
+
|
|
167
174
|
try:
|
|
168
175
|
return self._build_once()
|
|
169
176
|
except self._RETRYABLE_ERRORS as e:
|
|
@@ -237,6 +244,7 @@ class RuntimeCapabilities:
|
|
|
237
244
|
hook_registry: Any | None = None,
|
|
238
245
|
profile_registry_loader: Optional[Callable[[Path], ModelProfileRegistry]] = None,
|
|
239
246
|
trace_store_builder: Optional[Callable[[Path], Any]] = None,
|
|
247
|
+
trace_persist: bool | None = None,
|
|
240
248
|
) -> "RuntimeCapabilities":
|
|
241
249
|
"""构造 RuntimeCapabilities 单例。
|
|
242
250
|
|
|
@@ -248,7 +256,10 @@ class RuntimeCapabilities:
|
|
|
248
256
|
hook_registry: 可选 hook 注册表,用于 trace_collector 失败告警。
|
|
249
257
|
profile_registry_loader: 注入点,便于测试 mock ``ModelProfileRegistry.from_files``。
|
|
250
258
|
trace_store_builder: 注入点,便于测试替换 store 构造。
|
|
259
|
+
trace_persist: 是否挂 SqliteTraceStore;``None`` 时仅看环境变量,默认不落盘。
|
|
251
260
|
"""
|
|
261
|
+
from langchain_agentx.observability.trace.persist_policy import resolve_trace_persist
|
|
262
|
+
|
|
252
263
|
from .resolver import resolve_agent_home_string, resolve_workspace_root_path
|
|
253
264
|
|
|
254
265
|
resolved_root = resolve_workspace_root_path(resource_root)
|
|
@@ -258,8 +269,10 @@ class RuntimeCapabilities:
|
|
|
258
269
|
lambda home: ModelProfileRegistry.from_files(agent_home_dir=home)
|
|
259
270
|
)
|
|
260
271
|
registry = loader(primary_home_dir)
|
|
272
|
+
persist = resolve_trace_persist(configured=bool(trace_persist))
|
|
261
273
|
collector = _TraceCollectorFactory(
|
|
262
274
|
primary_home_dir=primary_home_dir,
|
|
275
|
+
persist=persist,
|
|
263
276
|
hook_registry=hook_registry,
|
|
264
277
|
store_builder=trace_store_builder,
|
|
265
278
|
).build()
|
|
@@ -286,6 +299,7 @@ class RuntimeCapabilities:
|
|
|
286
299
|
hook_registry: Any | None = None,
|
|
287
300
|
profile_registry_loader: Optional[Callable[[Path], ModelProfileRegistry]] = None,
|
|
288
301
|
trace_store_builder: Optional[Callable[[Path], Any]] = None,
|
|
302
|
+
trace_persist: bool | None = None,
|
|
289
303
|
) -> "RuntimeCapabilities":
|
|
290
304
|
"""从 ResolvedAgentStateConfig 构造 RuntimeCapabilities 的便捷入口。
|
|
291
305
|
|
|
@@ -296,6 +310,7 @@ class RuntimeCapabilities:
|
|
|
296
310
|
hook_registry: 可选 hook 注册表,用于 trace_collector 失败告警
|
|
297
311
|
profile_registry_loader: 注入点,便于测试 mock ModelProfileRegistry.from_files
|
|
298
312
|
trace_store_builder: 注入点,便于测试替换 store 构造
|
|
313
|
+
trace_persist: 是否挂 SqliteTraceStore;默认不落盘(见 ``resolve_trace_persist``)
|
|
299
314
|
|
|
300
315
|
Returns:
|
|
301
316
|
构造好的 RuntimeCapabilities 实例
|
|
@@ -319,6 +334,7 @@ class RuntimeCapabilities:
|
|
|
319
334
|
hook_registry=hook_registry,
|
|
320
335
|
profile_registry_loader=profile_registry_loader,
|
|
321
336
|
trace_store_builder=trace_store_builder,
|
|
337
|
+
trace_persist=trace_persist,
|
|
322
338
|
)
|
|
323
339
|
|
|
324
340
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
langchain_agentx/__init__.py,sha256=
|
|
1
|
+
langchain_agentx/__init__.py,sha256=Ap7xVSHcnVF6vuJw2G3SKTcI2QDzn2JSGQZSj-zuHjY,1614
|
|
2
2
|
langchain_agentx/command/__init__.py,sha256=Ej260S5uFQcmEtGZQG_NH7BYjHoStrpBLtGUsBTxyZk,631
|
|
3
3
|
langchain_agentx/command/allowed_tools.py,sha256=TVA0VM8rm98H-QbLK_GRiX5RhEAZFxKawliMi4kk96A,3359
|
|
4
4
|
langchain_agentx/command/context.py,sha256=DIGOGPBw5UGDBm0WNNJlKx1h_9rCRmcdROv4DT61Qug,731
|
|
@@ -32,8 +32,8 @@ langchain_agentx/loop/run_context.py,sha256=dhNiLhvqD_QYacGMA0B5P3wWpSe3O6wU_XcV
|
|
|
32
32
|
langchain_agentx/loop/config/__init__.py,sha256=WdRQVXuvGU4myaGOZ8guFFvUb66jfsAIp9DLANJGieg,1083
|
|
33
33
|
langchain_agentx/loop/config/agent_config.py,sha256=tOnAHFor6dkle3FvUOVx0YsmiYVTH11UrWSyTmOLV0c,3100
|
|
34
34
|
langchain_agentx/loop/config/interaction_profile.py,sha256=UWrlI3aTWjYRq1mDeXL-xL-iCrQU-bXDXhETP6q9icY,10020
|
|
35
|
-
langchain_agentx/loop/config/loop_config.py,sha256=
|
|
36
|
-
langchain_agentx/loop/config/loop_runtime_overlay.py,sha256=
|
|
35
|
+
langchain_agentx/loop/config/loop_config.py,sha256=f_McUyP8xJAhBka3bPOkk7dkPCe1ZLRX0HI5gsEb370,15680
|
|
36
|
+
langchain_agentx/loop/config/loop_runtime_overlay.py,sha256=PuB4vFdqCHXRbAFhAJIrtwq9pUIrHafyn0ApD4s06KU,2440
|
|
37
37
|
langchain_agentx/loop/config/model_context_resolver.py,sha256=o9RR0Vnu07TD4Y3V8jk5V1NfkMcPcLjE8uaaLOe22Qo,4067
|
|
38
38
|
langchain_agentx/loop/config/model_retry_config.py,sha256=bakCbGeNRO-_SXMT_LLE3nu3m9scZe1MSxPdyEGO99w,8178
|
|
39
39
|
langchain_agentx/loop/config/runtime_settings.py,sha256=uKkwyxgx5u34qbjP1DFrIRt0EygRCtsH8tMN0kWA0Yo,1551
|
|
@@ -68,7 +68,7 @@ langchain_agentx/loop/exit/terminal.py,sha256=_DAZk-kS4Xd0nxMlayLo60-uj1Y5ozgBjL
|
|
|
68
68
|
langchain_agentx/loop/exit/withheld_error.py,sha256=LfX3j7Rgd9VoMzlz7GOs9TPuRe7RXr_Gxweyotx3tqQ,1846
|
|
69
69
|
langchain_agentx/loop/graph/__init__.py,sha256=9pUUqn7G87n3lV45iYIU24j0wcTHyCD--SSdtv3urh4,136
|
|
70
70
|
langchain_agentx/loop/graph/builtin_loop_control.py,sha256=QpiHe8b_yp4fyLlZ8nSXlW19cTrWGvYUkOGQZrXE9Ow,8722
|
|
71
|
-
langchain_agentx/loop/graph/factory.py,sha256=
|
|
71
|
+
langchain_agentx/loop/graph/factory.py,sha256=TthwQtNiOeT5K-bgBhuW89yrkdP6iyYXCcL4tn-puJk,103958
|
|
72
72
|
langchain_agentx/loop/graph/graph_edges.py,sha256=kW6Npx-nMIPzcaisCxVPkTwf5Y9GOKy1NWCNkJWeJBQ,47370
|
|
73
73
|
langchain_agentx/loop/graph/reactive_compact_node.py,sha256=633b5hTnR3BK8GBEKWhzOwGB0BQrVRKozNxDomWFjLo,8762
|
|
74
74
|
langchain_agentx/loop/graph/runtime_tools_node.py,sha256=Elppfi83hgSy_9_st4-eZ4sX_usBm2l5dlJyLDqwFjw,7062
|
|
@@ -128,7 +128,7 @@ langchain_agentx/loop/prompt/tool_aware_sections.py,sha256=vST7Z5y2eoITTTcsBo9ol
|
|
|
128
128
|
langchain_agentx/loop/prompt/using_your_tools.py,sha256=NVLscfx2jzCHOx5R1jcoTwcOMsFkPx2Y9p_XD0Von3U,5251
|
|
129
129
|
langchain_agentx/loop/runtime/__init__.py,sha256=7FEIC1nvNHIbe2azfJzg5AWH9GWYfCQopQWx8a5OMqM,555
|
|
130
130
|
langchain_agentx/loop/runtime/context.py,sha256=dJHQvhs79c6xJZMrkB6-aUNFVax2R7V20Oj48nFePJs,1242
|
|
131
|
-
langchain_agentx/loop/runtime/context_factory.py,sha256=
|
|
131
|
+
langchain_agentx/loop/runtime/context_factory.py,sha256=m3ics_dOTqEKNlf6ETIOnVj6LxVLTayuE8NIMoEl0kY,7744
|
|
132
132
|
langchain_agentx/loop/runtime/subagent_execution_paths.py,sha256=Bgyiom48uta1FZcnIE7fIxyrD-VFCRsw7s8IxIxmLb4,4033
|
|
133
133
|
langchain_agentx/loop/stream/graph_driver.py,sha256=qMZHEw3wJ19Tfbz31-VPLy8Mt6e90xKougIjAoaEFCE,3935
|
|
134
134
|
langchain_agentx/loop/stream/helpers.py,sha256=b2sqtwrAa5ic5B5AzNqItU8pmDHw13iGs3hBiShSIZk,1390
|
|
@@ -141,13 +141,13 @@ langchain_agentx/loop/subagent/active_run_registry.py,sha256=KurhAMDTBnRkdxNidaM
|
|
|
141
141
|
langchain_agentx/loop/subagent/async_runner.py,sha256=gGx8UMZbsnxUMPzc_7-XkWgd1EiuRcFAoOVUfjhFltE,13740
|
|
142
142
|
langchain_agentx/loop/subagent/boundary_snapshot.py,sha256=9cQuqN29nJDRnHnx9c8b09KRmODE2zv15Z06QyjVJps,10008
|
|
143
143
|
langchain_agentx/loop/subagent/cache_safe_params.py,sha256=-qcgdazEYRy6s4ILQuttpxraE3gsxq17Ro7LYBnuv3E,4460
|
|
144
|
-
langchain_agentx/loop/subagent/context.py,sha256=
|
|
144
|
+
langchain_agentx/loop/subagent/context.py,sha256=tjUKMOCdgrWXdQokCoA0IHI2WR8Q73pWaDGFfR_rxTs,22483
|
|
145
145
|
langchain_agentx/loop/subagent/display_projector.py,sha256=AKsGWS1c9reH0kuD5u4oQ24KsBgyt7X10iZM3ere6Fs,3504
|
|
146
146
|
langchain_agentx/loop/subagent/fork_boilerplate.py,sha256=2Uh3cwegL7V-DvtLIxjX7ik5uW5mXfY2NBzP-biREso,5005
|
|
147
147
|
langchain_agentx/loop/subagent/fork_ports.py,sha256=hZATCvlYOxNVZtR3PoOVbI1GkA0KhHEyux6lUIjG5_4,1323
|
|
148
148
|
langchain_agentx/loop/subagent/fork_worktree_notice.py,sha256=WKAJVxvRMJfbzRe_07Mgrm_zQIQCYx4RwsUnWSSOnkg,1389
|
|
149
149
|
langchain_agentx/loop/subagent/forked_runner.py,sha256=ZEwkNlbwp1-PlJB5COHMKUu_w8EnSMLRc8s0umZ4NuM,6667
|
|
150
|
-
langchain_agentx/loop/subagent/graph.py,sha256=
|
|
150
|
+
langchain_agentx/loop/subagent/graph.py,sha256=2UnkvIFzwtYAERJ7mTpK-YeQOsotPZyayMyV85SFRjw,5254
|
|
151
151
|
langchain_agentx/loop/subagent/orchestrator.py,sha256=jO4312_4ReCja3Lvv0PZ6WniWtrVqwGURYtewiwLQb0,34338
|
|
152
152
|
langchain_agentx/loop/subagent/progress.py,sha256=_4YCDnVDH8sBiwXhCQVB8OHaUQwsCOGdUTP_Z_yOdsU,6522
|
|
153
153
|
langchain_agentx/loop/subagent/progress_dispatcher.py,sha256=e1Kd16WRUOAJSeAjupukrlxHoyCR_JO84SHqntMCzdQ,3831
|
|
@@ -241,11 +241,12 @@ langchain_agentx/observability/replay/cli.py,sha256=qqF6zY0I8PHl59C5MvgXBHfcNub0
|
|
|
241
241
|
langchain_agentx/observability/replay/service.py,sha256=1sogs2sepaapj2pi6Uf1dW2GjuzRngZHBbdM9Ptdc1A,2706
|
|
242
242
|
langchain_agentx/observability/replay/store.py,sha256=R7_v2mXb1lRSmIdN--tV2TVzuQRjsTsoSvJ0r5XvhrQ,9539
|
|
243
243
|
langchain_agentx/observability/replay/ui.py,sha256=EE8Hk9IPSudMHD6pYIqn4MTmU99-Cr1Yf8P1LH3Kh8I,1456
|
|
244
|
-
langchain_agentx/observability/trace/__init__.py,sha256=
|
|
244
|
+
langchain_agentx/observability/trace/__init__.py,sha256=nFg9C3WPbhQxP61niPiFmPn7XZL26V8bfDOXJIk1nUg,885
|
|
245
245
|
langchain_agentx/observability/trace/collector.py,sha256=ySah82wEU1CRCsSvk317wsK1PVBEoDoekWGXHtXmLtA,25103
|
|
246
246
|
langchain_agentx/observability/trace/event_emitter.py,sha256=gElYR4VSpGvJWznDmFAFXVD07qOo2m-rPEBEEdB7Wdc,5054
|
|
247
247
|
langchain_agentx/observability/trace/hook_event_emitter.py,sha256=B9errn3PjRjk6JKCYvmRUMAwGdq5HVrmqYcT8ib4E4o,3536
|
|
248
248
|
langchain_agentx/observability/trace/models.py,sha256=COcD-_8rNx0TYQOrlYfR2TizkzlFolEZc2VI3xsGJy0,5010
|
|
249
|
+
langchain_agentx/observability/trace/persist_policy.py,sha256=Q-IaQkIGPc2FDsTYZc-ip-tDOYtSs8YvWArvJAI8b2A,1125
|
|
249
250
|
langchain_agentx/observability/trace/sqlite_store.py,sha256=Ix9GkAgS8LDJK0jGtHqpN3hhrXjuz_DecnxOJGlGBDw,36316
|
|
250
251
|
langchain_agentx/observability/trace/trace_callback.py,sha256=K3tFiS_i5FruZbQlWIwrqYQKbkmFbETaQr0RHoZHRd4,12551
|
|
251
252
|
langchain_agentx/observability/trace/trace_lifecycle_collector.py,sha256=b5QN2LPr45ifBHg8VmuLIoZJ7FY8RpGXp28W0vOBtvk,4309
|
|
@@ -293,12 +294,12 @@ langchain_agentx/provider/semantics/families/openai_finish_reason.py,sha256=t5eb
|
|
|
293
294
|
langchain_agentx/provider/semantics/families/openai_interpreter.py,sha256=zT7EFfHJ5fmYZ_F59vDfyrYdEwcMJANxkoW1Pt3iocI,1915
|
|
294
295
|
langchain_agentx/provider/semantics/families/openai_normalizer.py,sha256=oaf2Riz8EY6VQpc6SNKtsb-naMELw3gYV3IsnZoRBYU,2155
|
|
295
296
|
langchain_agentx/session/__init__.py,sha256=uXxjBzhW1FtvSfDTTaGZPbyeSFRzRQb2MfxDumKViug,1234
|
|
296
|
-
langchain_agentx/session/agent_session.py,sha256=
|
|
297
|
+
langchain_agentx/session/agent_session.py,sha256=u2tyI82FTZVbH8MoRSxja_6Ggor1rkQDSqJllExEphw,24790
|
|
297
298
|
langchain_agentx/session/cleanup_registry.py,sha256=aaPUn9psCwgZ27fB1qW7lzc1TeKaBvQAxhcHDiNs2Rs,4137
|
|
298
299
|
langchain_agentx/session/conversation_factory.py,sha256=zsGBx9OwAOW21sqFsjK4d9mYLRRyxC5Bp1R9OCijxzI,5911
|
|
299
300
|
langchain_agentx/session/conversation_recovery.py,sha256=OXzaxywRmqRwNA2Q1UNOpUvMlIjBzgdbsNPxPGHwoaA,5803
|
|
300
301
|
langchain_agentx/session/conversation_session.py,sha256=aQJBZlQsgg2-q_it4qvRwhPkvKNODDZ1TDsrMXMwvCE,17563
|
|
301
|
-
langchain_agentx/session/factory.py,sha256=
|
|
302
|
+
langchain_agentx/session/factory.py,sha256=9sRKDXTPe1LYphCK3qpUKUdfracv0ckKV4Es2BQdhe4,6213
|
|
302
303
|
langchain_agentx/session/plan_mode.py,sha256=GjPLBG6eVrTB7M-CeMwLqkHCQDdD93cCgwIAvOF0wRM,4710
|
|
303
304
|
langchain_agentx/session/plan_mode_attachments.py,sha256=byIJC2F3RTJ9BTWVhpbE1e1rRwahAH5anPKsMXFvUE8,13861
|
|
304
305
|
langchain_agentx/session/protocol.py,sha256=uNkNiQ2MD9ReJgPaYe5bF0x6JzVqv2TL-hAG8ME1Obs,622
|
|
@@ -389,9 +390,10 @@ langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py,sha256=qez3WnzBTag
|
|
|
389
390
|
langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py,sha256=lqWlCqucs26fhr4M9LfgY8I0xuNDxwSLkre6XjAJDhA,6877
|
|
390
391
|
langchain_agentx/tool_runtime/__init__.py,sha256=C4ZrS6UWSL65ErfNWMvBuZBnht6ZuGb0PBXwA0Xke74,5144
|
|
391
392
|
langchain_agentx/tool_runtime/accept_edits_fast_path.py,sha256=UMCOF9Ws7hx3pcYvL-Kq7vzIAGvOGdEfx69ccUDXT-k,2281
|
|
392
|
-
langchain_agentx/tool_runtime/adapter.py,sha256=
|
|
393
|
+
langchain_agentx/tool_runtime/adapter.py,sha256=rM-Y2zSZ--N-TIvx1HtI1J7ralPU0w4jJuX3bBvIVxM,33847
|
|
393
394
|
langchain_agentx/tool_runtime/agent_home_bypass.py,sha256=na9xQPgJ02qA3YiJ1F8jN0Uv4uBDPzqRk3lfPPE089g,8010
|
|
394
395
|
langchain_agentx/tool_runtime/base.py,sha256=Ez9W42DsaiZcWDDO8UfRKv3E7_Z6WBcABkwdAi6qTK8,21390
|
|
396
|
+
langchain_agentx/tool_runtime/cancel_projection.py,sha256=81_Bvg8ZiuPdl1usePt7ykXFuO6Sg7UXogYQBX6aysQ,2788
|
|
395
397
|
langchain_agentx/tool_runtime/capabilities.py,sha256=KHwu5KLqrpPKLOTwHhnvIIs9MTmQYeuS2hAFmI_Nsy8,3837
|
|
396
398
|
langchain_agentx/tool_runtime/classifier_denial_bridge.py,sha256=Wv40rYc5U3Mn7G3H7sUWrcG78HyLKnrRXvv7Yv9wI5U,2743
|
|
397
399
|
langchain_agentx/tool_runtime/classifier_denial_limit.py,sha256=RVLELUNO346_0ssg46bap52TRTp1dVzCOqdfjpuOpek,3793
|
|
@@ -419,7 +421,7 @@ langchain_agentx/tool_runtime/permission_rules.py,sha256=ev6-Hm3N8YtbJO3SLGpoGMU
|
|
|
419
421
|
langchain_agentx/tool_runtime/permission_settings_loader.py,sha256=Xu6dso0ghh4pb7Puf8nj20nXxjGeQvL4kIGycavwG_o,5624
|
|
420
422
|
langchain_agentx/tool_runtime/permission_settings_sync.py,sha256=g6TvjWwa7D0kw5rDznPsoMv7xylESPOyWA2vZW4HDm0,4590
|
|
421
423
|
langchain_agentx/tool_runtime/permission_snapshot.py,sha256=xFoi9fIcZjSw_zrIoyglneM-vJsDOLCEjiVoazr5Ack,1947
|
|
422
|
-
langchain_agentx/tool_runtime/pipeline.py,sha256=
|
|
424
|
+
langchain_agentx/tool_runtime/pipeline.py,sha256=b4ZlEMH5i3_rqWjPx3g7BD6Yv2hvk-R6qgKFgo-b3eU,54284
|
|
423
425
|
langchain_agentx/tool_runtime/policy.py,sha256=PLk_-5wu69_Gjqig0pj71brcu6VfLvGSIHsAUHOiYIQ,30068
|
|
424
426
|
langchain_agentx/tool_runtime/policy_decorator.py,sha256=XWbgh_TRlPJ-J-RFo1FKjIN_n_Z9rtLTfSwBQoyLTTg,2264
|
|
425
427
|
langchain_agentx/tool_runtime/process_loader.py,sha256=1YMn6ntnpdbIHJbO7wF1xuz7gNKYxK0UJAOxq96dZX4,6166
|
|
@@ -505,7 +507,7 @@ langchain_agentx/tools/agent/models.py,sha256=jPxah6JgPt0UlZVyrAQxQeZmVUDOBV7xyl
|
|
|
505
507
|
langchain_agentx/tools/agent/prompt.py,sha256=QQA40AfA5sEIl_LG7kn7UlUKFBOzsHSs_M8c5n-p7YU,8093
|
|
506
508
|
langchain_agentx/tools/agent/prompt_scope.py,sha256=xQup3hosuN0B6TFq7jYV5SE6gzZNwR6BOQ552dfef5I,2677
|
|
507
509
|
langchain_agentx/tools/agent/scope.py,sha256=6F2ZJgSvt-gFeciyKIQxaIiW5PBW9zUeTj3P0uxqrrg,6324
|
|
508
|
-
langchain_agentx/tools/agent/tool.py,sha256=
|
|
510
|
+
langchain_agentx/tools/agent/tool.py,sha256=h6yw2vDsla6teu47D5drOlVOn0KO_e973n_aih24qSU,17972
|
|
509
511
|
langchain_agentx/tools/agent/built_in/__init__.py,sha256=4YUHj8nUcUOvJW9p158W_t_RBoQt8Uh7eTt0idnCTE4,657
|
|
510
512
|
langchain_agentx/tools/agent/built_in/agentx_guide.py,sha256=Wz4791lK_URpAGtKWceEMvJlD_cu79KfmNQka5yXeUs,2719
|
|
511
513
|
langchain_agentx/tools/agent/built_in/explore.py,sha256=H5757yjmudceFVaMN0O4YDH267DKfFPMSxGR83waNkk,3504
|
|
@@ -742,7 +744,7 @@ langchain_agentx/workflow/patterns/routing.py,sha256=jsMcFEbV7T3bU5O1MpQXuA8Ygdl
|
|
|
742
744
|
langchain_agentx/workflow/patterns/specs.py,sha256=nR_TPOxO7qNEpaj-hYvDkpjLz3dgG4HDHGa8trlljNw,1696
|
|
743
745
|
langchain_agentx/workspace/__init__.py,sha256=QhrN4zcq4vX9Sh2td632-nyFiBDXCGl_AUGU1wcJ4-U,2821
|
|
744
746
|
langchain_agentx/workspace/boundary.py,sha256=5XyWXXLyshc1Nl3cSMKGwcy0QayDZVIdz7aMl7Y1JpM,4102
|
|
745
|
-
langchain_agentx/workspace/capabilities.py,sha256=
|
|
747
|
+
langchain_agentx/workspace/capabilities.py,sha256=KQxGsnB8RtNi_wtXgTo4K6bDLDfwnouYnL78CAlsp3c,14129
|
|
746
748
|
langchain_agentx/workspace/config.py,sha256=w3p2usd9LNJ6_alZ_VTZw3Vpm9ceITLW-gvTFvt9DqM,9537
|
|
747
749
|
langchain_agentx/workspace/errors.py,sha256=qeqf4LdhnroC867aKRXkrGsUxFN-HdnFiyzG3_2ghKo,1481
|
|
748
750
|
langchain_agentx/workspace/grant.py,sha256=bhqmrHx_iH1UuXINdGswZ4q3VnQOS8ltzgVG2V0fZag,911
|
|
@@ -757,8 +759,8 @@ langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXO
|
|
|
757
759
|
langchain_agentx/workspace/tool_boundary.py,sha256=UDwX6swpSLsx9HNkYuuRRiV5o7ZZG_Bru2Yn0c5kNX8,5724
|
|
758
760
|
langchain_agentx/workspace/validators.py,sha256=tQt-6TOcL8Fw7Ig5ebA9S7vGWh1rby920eFW6x8Tk9E,1439
|
|
759
761
|
langchain_agentx/workspace/view.py,sha256=PGasqTaqhlD03SXXazHuw4RHfV681AIdlsYqL70pEjc,4774
|
|
760
|
-
langchain_agentx_python-2.1.
|
|
761
|
-
langchain_agentx_python-2.1.
|
|
762
|
-
langchain_agentx_python-2.1.
|
|
763
|
-
langchain_agentx_python-2.1.
|
|
764
|
-
langchain_agentx_python-2.1.
|
|
762
|
+
langchain_agentx_python-2.1.9.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
763
|
+
langchain_agentx_python-2.1.9.dist-info/METADATA,sha256=6jvj-EwhulXBUBtaJgpJEaiyiFDPgxUnU7nX6dvS6Zk,24250
|
|
764
|
+
langchain_agentx_python-2.1.9.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
|
|
765
|
+
langchain_agentx_python-2.1.9.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
|
|
766
|
+
langchain_agentx_python-2.1.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_python-2.1.7.dist-info → langchain_agentx_python-2.1.9.dist-info}/top_level.txt
RENAMED
|
File without changes
|