langchain-agentx-python 2.3.0__py3-none-any.whl → 2.3.2__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/graph/factory.py +13 -2
- langchain_agentx/tool_runtime/loader.py +1 -0
- langchain_agentx/tool_runtime/loop_loader.py +12 -1
- langchain_agentx/tool_runtime/policy.py +23 -3
- langchain_agentx/tool_runtime/process_loader.py +24 -7
- langchain_agentx/tools/bash/command_allow_rules.py +14 -9
- langchain_agentx/tools/skill/source_paths.py +21 -0
- {langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/METADATA +11 -23
- {langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/RECORD +13 -13
- {langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/LICENSE +0 -0
- {langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/WHEEL +0 -0
- {langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/top_level.txt +0 -0
langchain_agentx/__init__.py
CHANGED
|
@@ -756,8 +756,19 @@ class LoopGraphBuilder:
|
|
|
756
756
|
include_agent=not user_has_agent_tool,
|
|
757
757
|
)
|
|
758
758
|
for tool in self._services.loader.registry.list():
|
|
759
|
-
if tool.name
|
|
760
|
-
self._loop_loader.
|
|
759
|
+
if tool.name in self._loop_loader.registry._tools:
|
|
760
|
+
existing = self._loop_loader.registry.get(tool.name)
|
|
761
|
+
if existing is not tool:
|
|
762
|
+
# 宿主与 register_default_tools 同名不同实例:保留默认。
|
|
763
|
+
# debug:CLI 镜像全量默认工具时属常态,勿打 stderr(S-4 仍可 caplog)。
|
|
764
|
+
logger.debug(
|
|
765
|
+
"Host loader tool %r not merged into loop; "
|
|
766
|
+
"register_default_tools already registered %r (S-4)",
|
|
767
|
+
tool.name,
|
|
768
|
+
tool.name,
|
|
769
|
+
)
|
|
770
|
+
continue
|
|
771
|
+
self._loop_loader.register(tool)
|
|
761
772
|
self._runtime_tools = self._loop_loader.registry.list()
|
|
762
773
|
from ...loop.prompt.tool_aware_sections import collect_enabled_tool_names
|
|
763
774
|
|
|
@@ -155,6 +155,7 @@ class ToolRuntimeLoader:
|
|
|
155
155
|
目的:为 subagent 组装“过滤后的工具池”而不丢失权限/管控语义。
|
|
156
156
|
"""
|
|
157
157
|
child = ToolRuntimeLoader(
|
|
158
|
+
policy_config=self._process.policy_config,
|
|
158
159
|
policy_engine=self._process.policy,
|
|
159
160
|
headless=self._process.headless if headless is None else headless,
|
|
160
161
|
prompt_handler=self._process.prompt_handler,
|
|
@@ -107,6 +107,7 @@ class LoopLoader:
|
|
|
107
107
|
agent_home_segment=self._agent_home,
|
|
108
108
|
session_cwd=effective_cwd,
|
|
109
109
|
)
|
|
110
|
+
self._merge_skill_read_roots_policy(cfg)
|
|
110
111
|
self._inject_project_memory_policy(cfg)
|
|
111
112
|
plugin_ex = PluginCacheGlobExclusions(
|
|
112
113
|
cache_root=str(cfg.plugin_cache_dir.resolve()),
|
|
@@ -210,11 +211,21 @@ class LoopLoader:
|
|
|
210
211
|
setter(patterns)
|
|
211
212
|
return patterns
|
|
212
213
|
|
|
214
|
+
def _merge_skill_read_roots_policy(self, workspace_cfg: Any) -> None:
|
|
215
|
+
"""G-2:skill 发现目录并入 read_roots(在 project_memory 注入之前)。"""
|
|
216
|
+
from langchain_agentx.tools.skill.source_paths import resolve_skill_read_roots
|
|
217
|
+
|
|
218
|
+
roots = resolve_skill_read_roots(workspace_cfg)
|
|
219
|
+
if not roots:
|
|
220
|
+
return
|
|
221
|
+
base = self._process.effective_policy_config()
|
|
222
|
+
self._process.apply_policy_config(base.with_merged_read_roots(roots))
|
|
223
|
+
|
|
213
224
|
def _inject_project_memory_policy(self, workspace_cfg: Any) -> None:
|
|
214
225
|
"""Per-loop 注入 CC projects 树读写根与 path_safety layout。"""
|
|
215
226
|
layout = workspace_cfg.project_memory_layout
|
|
216
227
|
workspace_root = str(Path(self._workspace_root).resolve())
|
|
217
|
-
base = self._process.
|
|
228
|
+
base = self._process.effective_policy_config()
|
|
218
229
|
if not base.read_roots:
|
|
219
230
|
base = replace(base, read_roots=[workspace_root])
|
|
220
231
|
if not base.write_roots:
|
|
@@ -45,9 +45,11 @@ from __future__ import annotations
|
|
|
45
45
|
import fnmatch
|
|
46
46
|
import os
|
|
47
47
|
import sys
|
|
48
|
+
from pathlib import Path
|
|
48
49
|
import warnings
|
|
49
50
|
from abc import ABC, abstractmethod
|
|
50
51
|
from dataclasses import dataclass, field, replace
|
|
52
|
+
from collections.abc import Iterable
|
|
51
53
|
from typing import TYPE_CHECKING, Any
|
|
52
54
|
|
|
53
55
|
from .models import AuthorizationDecision, ToolExecutionContext
|
|
@@ -123,6 +125,20 @@ class ToolPolicyConfig:
|
|
|
123
125
|
normalize_tool_name_set(self.cli_allow_tools),
|
|
124
126
|
)
|
|
125
127
|
|
|
128
|
+
def with_merged_read_roots(
|
|
129
|
+
self,
|
|
130
|
+
extra: Iterable[str | os.PathLike[str]],
|
|
131
|
+
) -> "ToolPolicyConfig":
|
|
132
|
+
"""Union ``read_roots``;保留 cliArg / rules 等字段(Phase 2 skill 发现根)。"""
|
|
133
|
+
merged: list[str] = []
|
|
134
|
+
seen: set[str] = set()
|
|
135
|
+
for raw in (*self.read_roots, *(str(Path(p).expanduser().resolve()) for p in extra)):
|
|
136
|
+
if not raw or raw in seen:
|
|
137
|
+
continue
|
|
138
|
+
seen.add(raw)
|
|
139
|
+
merged.append(raw)
|
|
140
|
+
return replace(self, read_roots=merged)
|
|
141
|
+
|
|
126
142
|
def with_project_memory_layout(
|
|
127
143
|
self,
|
|
128
144
|
layout: "ProjectMemoryLayout",
|
|
@@ -313,11 +329,16 @@ class DefaultPolicyEngine(PolicyEngine):
|
|
|
313
329
|
config: 策略配置
|
|
314
330
|
auto_mode_hook: Auto Mode 授权 Hook(可选,Phase 1 集成)
|
|
315
331
|
"""
|
|
332
|
+
self._auto_mode_hook = auto_mode_hook
|
|
333
|
+
self._internal_paths = InternalPathEvaluator()
|
|
334
|
+
self._agent_home_bypass = AgentHomeSessionBypassEvaluator()
|
|
335
|
+
self.replace_policy_config(config)
|
|
336
|
+
|
|
337
|
+
def replace_policy_config(self, config: ToolPolicyConfig) -> None:
|
|
338
|
+
"""原地更新 config 与派生 roots/authorizer(loop project memory 注入)。"""
|
|
316
339
|
self._config = config
|
|
317
340
|
self._read_roots = [os.path.realpath(r) for r in config.read_roots]
|
|
318
341
|
self._write_roots = [os.path.realpath(r) for r in config.write_roots]
|
|
319
|
-
self._auto_mode_hook = auto_mode_hook
|
|
320
|
-
self._internal_paths = InternalPathEvaluator()
|
|
321
342
|
self._path_safety: PathSafetyEvaluator | None = None
|
|
322
343
|
if config.enable_path_safety and config.path_safety is not None:
|
|
323
344
|
self._path_safety = PathSafetyEvaluator(
|
|
@@ -341,7 +362,6 @@ class DefaultPolicyEngine(PolicyEngine):
|
|
|
341
362
|
self._within_root(real_path, r) for r in self._read_roots
|
|
342
363
|
),
|
|
343
364
|
)
|
|
344
|
-
self._agent_home_bypass = AgentHomeSessionBypassEvaluator()
|
|
345
365
|
|
|
346
366
|
def authorize(
|
|
347
367
|
self,
|
|
@@ -50,14 +50,21 @@ class ProcessLoader:
|
|
|
50
50
|
permission_resolver=permission_resolver,
|
|
51
51
|
)
|
|
52
52
|
self._adapter = LangChainAdapter()
|
|
53
|
-
self._policy_config = policy_config
|
|
54
53
|
if policy_engine is not None:
|
|
55
54
|
self._policy: PolicyEngine | None = policy_engine
|
|
55
|
+
if policy_config is not None:
|
|
56
|
+
self._policy_config = policy_config
|
|
57
|
+
elif isinstance(policy_engine, DefaultPolicyEngine):
|
|
58
|
+
self._policy_config = policy_engine._config
|
|
59
|
+
else:
|
|
60
|
+
self._policy_config = None
|
|
56
61
|
elif policy_config is not None:
|
|
62
|
+
self._policy_config = policy_config
|
|
57
63
|
self._policy = DefaultPolicyEngine(policy_config)
|
|
58
64
|
else:
|
|
59
|
-
|
|
60
|
-
self._policy_config =
|
|
65
|
+
empty = ToolPolicyConfig()
|
|
66
|
+
self._policy_config = empty
|
|
67
|
+
self._policy = DefaultPolicyEngine(empty)
|
|
61
68
|
|
|
62
69
|
def set_permission_resolver(
|
|
63
70
|
self,
|
|
@@ -141,12 +148,22 @@ class ProcessLoader:
|
|
|
141
148
|
def permission_resolver(self) -> PermissionResolver | None:
|
|
142
149
|
return self._permission_resolver
|
|
143
150
|
|
|
151
|
+
def effective_policy_config(self) -> ToolPolicyConfig:
|
|
152
|
+
"""policy_config → DefaultPolicyEngine._config → 空配置(loop 注入 SSOT)。"""
|
|
153
|
+
if self._policy_config is not None:
|
|
154
|
+
return self._policy_config
|
|
155
|
+
policy = self._policy
|
|
156
|
+
if isinstance(policy, DefaultPolicyEngine):
|
|
157
|
+
return policy._config
|
|
158
|
+
return ToolPolicyConfig()
|
|
159
|
+
|
|
144
160
|
def apply_policy_config(self, policy_config: ToolPolicyConfig) -> None:
|
|
145
|
-
"""
|
|
146
|
-
auto_hook = None
|
|
147
|
-
if isinstance(self._policy, DefaultPolicyEngine):
|
|
148
|
-
auto_hook = self._policy._auto_mode_hook
|
|
161
|
+
"""替换策略配置;DefaultPolicyEngine 原地 rebind,保留 engine 实例 id。"""
|
|
149
162
|
self._policy_config = policy_config
|
|
163
|
+
if isinstance(self._policy, DefaultPolicyEngine):
|
|
164
|
+
self._policy.replace_policy_config(policy_config)
|
|
165
|
+
return
|
|
166
|
+
auto_hook = None
|
|
150
167
|
self._policy = DefaultPolicyEngine(policy_config, auto_mode_hook=auto_hook)
|
|
151
168
|
|
|
152
169
|
def sync_permission_rules_from_disk(
|
|
@@ -24,6 +24,8 @@ from langchain_agentx.tool_runtime.permission_rules import (
|
|
|
24
24
|
)
|
|
25
25
|
from langchain_agentx.tools.bash.read_only_validation import BashReadOnlyClassifier
|
|
26
26
|
|
|
27
|
+
from langchain_agentx.tool_runtime.policy import PolicyEngine, resolve_default_policy_engine
|
|
28
|
+
|
|
27
29
|
if TYPE_CHECKING:
|
|
28
30
|
from langchain_agentx.tool_runtime.policy import DefaultPolicyEngine
|
|
29
31
|
|
|
@@ -80,13 +82,14 @@ def cliarg_bash_has_content_allow_without_bare_tool(
|
|
|
80
82
|
def try_registry_bash_content_allow_decision(
|
|
81
83
|
command: str,
|
|
82
84
|
ctx: ToolExecutionContext,
|
|
83
|
-
policy_engine:
|
|
85
|
+
policy_engine: PolicyEngine | None,
|
|
84
86
|
) -> AuthorizationDecision | None:
|
|
85
87
|
"""cliArg/settings 等内容级 Bash allow(CC bashPermissions prefix allow,path 通过后)。"""
|
|
86
|
-
|
|
88
|
+
engine = resolve_default_policy_engine(policy_engine)
|
|
89
|
+
if engine is None:
|
|
87
90
|
return None
|
|
88
91
|
registry = build_permission_rule_registry(
|
|
89
|
-
policy_config=
|
|
92
|
+
policy_config=engine._config,
|
|
90
93
|
session_store=ctx.session_store,
|
|
91
94
|
workspace_root=ctx.workspace_root,
|
|
92
95
|
agent_home_segment=ctx.agent_home_segment,
|
|
@@ -107,10 +110,11 @@ def promote_unscoped_bash_passthrough_to_ask(
|
|
|
107
110
|
*,
|
|
108
111
|
command: str,
|
|
109
112
|
ctx: ToolExecutionContext,
|
|
110
|
-
policy_engine:
|
|
113
|
+
policy_engine: PolicyEngine | None,
|
|
111
114
|
) -> AuthorizationDecision:
|
|
112
115
|
"""无 cliArg Bash allow 时,write_roots 静默 allow → ask(对齐 CC passthrough)。"""
|
|
113
|
-
|
|
116
|
+
engine = resolve_default_policy_engine(policy_engine)
|
|
117
|
+
if engine is None or decision.behavior != "allow":
|
|
114
118
|
return decision
|
|
115
119
|
if _READ_ONLY_CLASSIFIER.classify(
|
|
116
120
|
command.strip(),
|
|
@@ -120,7 +124,7 @@ def promote_unscoped_bash_passthrough_to_ask(
|
|
|
120
124
|
if decision.policy_id != "write_roots":
|
|
121
125
|
return decision
|
|
122
126
|
registry = build_permission_rule_registry(
|
|
123
|
-
policy_config=
|
|
127
|
+
policy_config=engine._config,
|
|
124
128
|
session_store=ctx.session_store,
|
|
125
129
|
workspace_root=ctx.workspace_root,
|
|
126
130
|
agent_home_segment=ctx.agent_home_segment,
|
|
@@ -145,13 +149,14 @@ def promote_unmatched_cliarg_content_only_allow_to_ask(
|
|
|
145
149
|
*,
|
|
146
150
|
command: str,
|
|
147
151
|
ctx: ToolExecutionContext,
|
|
148
|
-
policy_engine:
|
|
152
|
+
policy_engine: PolicyEngine | None,
|
|
149
153
|
) -> AuthorizationDecision:
|
|
150
154
|
"""roots 内 silent allow → ask(仅 cliArg 有 Bash(pattern) 且无裸 Bash 时)。"""
|
|
151
|
-
|
|
155
|
+
engine = resolve_default_policy_engine(policy_engine)
|
|
156
|
+
if engine is None or decision.behavior != "allow" or decision.policy_id:
|
|
152
157
|
return decision
|
|
153
158
|
registry = build_permission_rule_registry(
|
|
154
|
-
policy_config=
|
|
159
|
+
policy_config=engine._config,
|
|
155
160
|
session_store=ctx.session_store,
|
|
156
161
|
workspace_root=ctx.workspace_root,
|
|
157
162
|
agent_home_segment=ctx.agent_home_segment,
|
|
@@ -61,6 +61,26 @@ def resolve_managed_skills_dir(agent_home_segment: str) -> Path:
|
|
|
61
61
|
return resolve_managed_settings_root() / segment / "skills"
|
|
62
62
|
|
|
63
63
|
|
|
64
|
+
def resolve_skill_read_roots(
|
|
65
|
+
workspace_cfg: ResolvedAgentStateConfig,
|
|
66
|
+
*,
|
|
67
|
+
project_skills_dir: Path | None = None,
|
|
68
|
+
) -> tuple[Path, ...]:
|
|
69
|
+
"""Skill 发现目录绝对路径(与 ``resolve_skill_source_specs`` 同源,去重保序)。"""
|
|
70
|
+
seen: set[Path] = set()
|
|
71
|
+
roots: list[Path] = []
|
|
72
|
+
for spec in resolve_skill_source_specs(
|
|
73
|
+
workspace_cfg,
|
|
74
|
+
project_skills_dir=project_skills_dir,
|
|
75
|
+
):
|
|
76
|
+
resolved = spec.skills_dir.expanduser().resolve()
|
|
77
|
+
if resolved in seen:
|
|
78
|
+
continue
|
|
79
|
+
seen.add(resolved)
|
|
80
|
+
roots.append(resolved)
|
|
81
|
+
return tuple(roots)
|
|
82
|
+
|
|
83
|
+
|
|
64
84
|
def resolve_skill_source_specs(
|
|
65
85
|
workspace_cfg: ResolvedAgentStateConfig,
|
|
66
86
|
*,
|
|
@@ -83,6 +103,7 @@ __all__ = [
|
|
|
83
103
|
"SourcedSkillEntry",
|
|
84
104
|
"policy_skills_disabled",
|
|
85
105
|
"resolve_managed_skills_dir",
|
|
106
|
+
"resolve_skill_read_roots",
|
|
86
107
|
"resolve_skill_source_specs",
|
|
87
108
|
"resolve_user_skills_dir",
|
|
88
109
|
]
|
{langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: langchain-agentx-python
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.2
|
|
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
|
|
@@ -216,34 +216,22 @@ Classifier: Operating System :: OS Independent
|
|
|
216
216
|
Requires-Python: >=3.11
|
|
217
217
|
Description-Content-Type: text/markdown
|
|
218
218
|
License-File: LICENSE
|
|
219
|
-
Requires-Dist: langgraph<1.3.0,>=1.2.
|
|
219
|
+
Requires-Dist: langgraph<1.3.0,>=1.2.11
|
|
220
220
|
Requires-Dist: langgraph-prebuilt<1.2.0,>=1.1.0
|
|
221
|
-
Requires-Dist: langchain<2.0.0,>=1.
|
|
222
|
-
Requires-Dist: langchain-core<2.0.0,>=1.
|
|
223
|
-
Requires-Dist: langchain-text-splitters>=1.1.
|
|
224
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
225
|
-
Requires-Dist: langchain-google-genai<
|
|
226
|
-
Requires-Dist: langchain-
|
|
227
|
-
Requires-Dist:
|
|
228
|
-
Requires-Dist:
|
|
221
|
+
Requires-Dist: langchain<2.0.0,>=1.4.2
|
|
222
|
+
Requires-Dist: langchain-core<2.0.0,>=1.6.3
|
|
223
|
+
Requires-Dist: langchain-text-splitters>=1.1.2
|
|
224
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.6.1
|
|
225
|
+
Requires-Dist: langchain-google-genai<4.4,>=4.3.7
|
|
226
|
+
Requires-Dist: langchain-openai>=1.6.2
|
|
227
|
+
Requires-Dist: openai<4.0.0,>=2.45.0
|
|
228
|
+
Requires-Dist: aiohttp>=3.14.3
|
|
229
229
|
Requires-Dist: tree-sitter==0.21.3
|
|
230
230
|
Requires-Dist: tree-sitter-languages>=1.10.2
|
|
231
|
-
Requires-Dist: networkx
|
|
232
|
-
Requires-Dist: matplotlib
|
|
233
|
-
Requires-Dist: graspologic
|
|
234
|
-
Requires-Dist: future
|
|
235
231
|
Requires-Dist: wcmatch
|
|
236
|
-
Requires-Dist:
|
|
237
|
-
Requires-Dist: tiktoken
|
|
238
|
-
Requires-Dist: google-genai<2.0.0,>=1.61.0
|
|
232
|
+
Requires-Dist: google-genai<2.0.0,>=1.65.0
|
|
239
233
|
Requires-Dist: google-auth<3.0.0,>=2.48.0
|
|
240
234
|
Requires-Dist: filetype==1.2.0
|
|
241
|
-
Requires-Dist: uvicorn[standard]
|
|
242
|
-
Requires-Dist: pycryptodome
|
|
243
|
-
Requires-Dist: chardet>=5.0.0
|
|
244
|
-
Requires-Dist: pandas
|
|
245
|
-
Requires-Dist: mcp>=1.19.0
|
|
246
|
-
Requires-Dist: fastapi
|
|
247
235
|
Requires-Dist: portalocker<4,>=2.8.2
|
|
248
236
|
Requires-Dist: filelock>=3.0
|
|
249
237
|
Requires-Dist: cachetools<7,>=5.3
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
langchain_agentx/__init__.py,sha256=
|
|
1
|
+
langchain_agentx/__init__.py,sha256=UYRKrpqJvIQs_odLFNlRSJVoGCAv6UA1VLWG64SQ0gE,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
|
|
@@ -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=31o4H6SDGC_vECSliXecuVEnzlD1ahlVZ5JzEpxYY04,9248
|
|
71
|
-
langchain_agentx/loop/graph/factory.py,sha256=
|
|
71
|
+
langchain_agentx/loop/graph/factory.py,sha256=BMNHUGqNhOhcqxtdsB0TeI5ZHqK_0QdDwb3K32LmhxA,104607
|
|
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=wQkbc0ophyefpPZEc0q1vKoJOIdS4S6d6hSsrkdRLDk,7387
|
|
@@ -406,8 +406,8 @@ langchain_agentx/tool_runtime/failure_event_emitter.py,sha256=C7c4Gc7Vo_R6_ah2Xx
|
|
|
406
406
|
langchain_agentx/tool_runtime/identical_call_cache.py,sha256=v8WWuTHWR5ThujcMO4Ty28mZS_w-JN24267fZ4PHWK8,3865
|
|
407
407
|
langchain_agentx/tool_runtime/inner_permission_chain.py,sha256=50wYXRu7Hi-rvDiI2QxSLC4uBAsJwG3Vp-v3AutLY4E,17629
|
|
408
408
|
langchain_agentx/tool_runtime/limits.py,sha256=imE1IetmyKQM82INR0VkP3qZNM4bjUJuf1CG5BkY0uw,356
|
|
409
|
-
langchain_agentx/tool_runtime/loader.py,sha256=
|
|
410
|
-
langchain_agentx/tool_runtime/loop_loader.py,sha256=
|
|
409
|
+
langchain_agentx/tool_runtime/loader.py,sha256=vT1_1QoBCpDGhe9sWRqgDZBcuErF35rAcOAENDrUcCI,9452
|
|
410
|
+
langchain_agentx/tool_runtime/loop_loader.py,sha256=H8QKRmoi3ni-8vkyx90W2zfC4quDOfnNTc3d4ote4hM,9615
|
|
411
411
|
langchain_agentx/tool_runtime/loop_runtime_context.py,sha256=HBZMdtKD7MpU8o7JmURFZGPTfxr2aFFlFF2nBZR_n8s,3613
|
|
412
412
|
langchain_agentx/tool_runtime/messages.py,sha256=Fp-ZiLAbOQAQa8uIv-owE8PXtWyhpYSXxtzy3PVbKSw,3631
|
|
413
413
|
langchain_agentx/tool_runtime/models.py,sha256=cO9EgLKPXiktHl_xXtBwLQrCo6mj4tbT4WoPmuFLE0w,20345
|
|
@@ -424,9 +424,9 @@ langchain_agentx/tool_runtime/permission_settings_loader.py,sha256=Xu6dso0ghh4pb
|
|
|
424
424
|
langchain_agentx/tool_runtime/permission_settings_sync.py,sha256=g6TvjWwa7D0kw5rDznPsoMv7xylESPOyWA2vZW4HDm0,4590
|
|
425
425
|
langchain_agentx/tool_runtime/permission_snapshot.py,sha256=xFoi9fIcZjSw_zrIoyglneM-vJsDOLCEjiVoazr5Ack,1947
|
|
426
426
|
langchain_agentx/tool_runtime/pipeline.py,sha256=cNC8FzeBtfNo8I02wXsaBbbpwxbVXu67eRnr_OfEU3Y,53104
|
|
427
|
-
langchain_agentx/tool_runtime/policy.py,sha256=
|
|
427
|
+
langchain_agentx/tool_runtime/policy.py,sha256=CZvkFS9m28q1txTz5MTltKGouMQZJnRVyz8DEfRewYA,30892
|
|
428
428
|
langchain_agentx/tool_runtime/policy_decorator.py,sha256=XWbgh_TRlPJ-J-RFo1FKjIN_n_Z9rtLTfSwBQoyLTTg,2264
|
|
429
|
-
langchain_agentx/tool_runtime/process_loader.py,sha256=
|
|
429
|
+
langchain_agentx/tool_runtime/process_loader.py,sha256=qpgfRIla7Tyvbf9FcwGo5Z8x_ymNdMBxrx7OrZAQpzA,6889
|
|
430
430
|
langchain_agentx/tool_runtime/prompt_context.py,sha256=Dw3Qs8yWwT7dv-ZVHKnQxtPPKQXGySOQpwH4sstfsjE,3233
|
|
431
431
|
langchain_agentx/tool_runtime/read_ignore_patterns.py,sha256=l4kNulVDaOdQxcs4FeC2DT6k3172D4hgeafEbqGGvTw,3034
|
|
432
432
|
langchain_agentx/tool_runtime/read_permission.py,sha256=rwH7NEtL57aUKXVjSf6hMOOvEWOayNFyvI_SNoNCHPA,9284
|
|
@@ -535,7 +535,7 @@ langchain_agentx/tools/bash/bash_hardening.py,sha256=KEYKRC7kS_to4mzXuChvCmOIIb4
|
|
|
535
535
|
langchain_agentx/tools/bash/bash_registry_content.py,sha256=YHE3PwuLBeFrEux4xNaDZjJpYtUSMFPLYr6A7g-fFxk,3569
|
|
536
536
|
langchain_agentx/tools/bash/bash_runtime_contract.py,sha256=s8vrvMl7405KLGw2hPFbzlzWohm5JX3c9cImMBgqh8I,1511
|
|
537
537
|
langchain_agentx/tools/bash/boundary_check.py,sha256=k9Bv-baIAUDE3-c_Brw3VSXXYMv_g3lTM0mabIadnwc,8822
|
|
538
|
-
langchain_agentx/tools/bash/command_allow_rules.py,sha256=
|
|
538
|
+
langchain_agentx/tools/bash/command_allow_rules.py,sha256=aIXxnb4tD3fDWqADTKAgNaN5DP8TqbMeFw0NxfFtFQQ,7562
|
|
539
539
|
langchain_agentx/tools/bash/cwd_reporter.py,sha256=mASbKWLb4MiX4zLKY3w1ocIdfhmwj5KRgX4OW_PcAns,2642
|
|
540
540
|
langchain_agentx/tools/bash/events.py,sha256=xDpPA3zhne2cnlYTmiiPTsV423-h-Nw-VKDR_rlnbGE,6065
|
|
541
541
|
langchain_agentx/tools/bash/l1_decision_reason.py,sha256=MOL9HBBpJEgypuTiYdNojQBl8eIsTwRge5CtGeYRJKI,5365
|
|
@@ -622,7 +622,7 @@ langchain_agentx/tools/skill/policy.py,sha256=SFlW627gyo_-wyIppAqoytBmrLPlSGw-mb
|
|
|
622
622
|
langchain_agentx/tools/skill/prompt.py,sha256=tvSqvCGroVdloveiWIYxIPQmpESqzPAs5ZJztvHBdOI,1782
|
|
623
623
|
langchain_agentx/tools/skill/registry_permission.py,sha256=ns_S6IBOdacrZcgHzCOj9rjlPOIecavF5hW-pHmalcY,3258
|
|
624
624
|
langchain_agentx/tools/skill/repository_factory.py,sha256=7zDoPDZgxoR03CkmKdx9b0aUXwaH8E5LtBYQPGF26rA,1222
|
|
625
|
-
langchain_agentx/tools/skill/source_paths.py,sha256=
|
|
625
|
+
langchain_agentx/tools/skill/source_paths.py,sha256=2CeVYF37JONiXrKQcogdBs0Y31p9AAMIOgGXZKnBQfE,3651
|
|
626
626
|
langchain_agentx/tools/skill/tool.py,sha256=vhiwjeyST9BhsMZmKk8-Vej3JId0AxTPrQ5ebFvguG4,19711
|
|
627
627
|
langchain_agentx/tools/skill/bundled/__init__.py,sha256=gaCH_mROpv0lIgLjin1VIFu-8hbP2nY1PHoF7vZt2Ns,4516
|
|
628
628
|
langchain_agentx/tools/skill/bundled/prompts.py,sha256=gcaTnNRlWfHNPgO3EfZxU9vMYbOapMrAduvgaVc-_Fc,4838
|
|
@@ -766,8 +766,8 @@ langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXO
|
|
|
766
766
|
langchain_agentx/workspace/tool_boundary.py,sha256=UDwX6swpSLsx9HNkYuuRRiV5o7ZZG_Bru2Yn0c5kNX8,5724
|
|
767
767
|
langchain_agentx/workspace/validators.py,sha256=tQt-6TOcL8Fw7Ig5ebA9S7vGWh1rby920eFW6x8Tk9E,1439
|
|
768
768
|
langchain_agentx/workspace/view.py,sha256=PGasqTaqhlD03SXXazHuw4RHfV681AIdlsYqL70pEjc,4774
|
|
769
|
-
langchain_agentx_python-2.3.
|
|
770
|
-
langchain_agentx_python-2.3.
|
|
771
|
-
langchain_agentx_python-2.3.
|
|
772
|
-
langchain_agentx_python-2.3.
|
|
773
|
-
langchain_agentx_python-2.3.
|
|
769
|
+
langchain_agentx_python-2.3.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
770
|
+
langchain_agentx_python-2.3.2.dist-info/METADATA,sha256=kIbTWeDzgAZS7u3vcxnCjP_NGMr1C6S3fUvdo_Ervw8,23942
|
|
771
|
+
langchain_agentx_python-2.3.2.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
|
|
772
|
+
langchain_agentx_python-2.3.2.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
|
|
773
|
+
langchain_agentx_python-2.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_python-2.3.0.dist-info → langchain_agentx_python-2.3.2.dist-info}/top_level.txt
RENAMED
|
File without changes
|