langchain-agentx-python 2.3.1__py3-none-any.whl → 2.3.3__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/__init__.py +2 -0
- langchain_agentx/loop/config/loop_config.py +12 -0
- langchain_agentx/loop/graph/factory.py +30 -2
- langchain_agentx/tool_runtime/loader.py +2 -0
- langchain_agentx/tool_runtime/loop_loader.py +13 -3
- langchain_agentx/tools/skill/catalog.py +1 -1
- langchain_agentx/tools/skill/multi_source_repository.py +2 -0
- langchain_agentx/tools/skill/repository_factory.py +5 -3
- langchain_agentx/tools/skill/source_paths.py +62 -12
- langchain_agentx/workspace/project_memory_layout.py +4 -0
- {langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/METADATA +11 -23
- {langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/RECORD +16 -16
- {langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/LICENSE +0 -0
- {langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/WHEEL +0 -0
- {langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/top_level.txt +0 -0
langchain_agentx/__init__.py
CHANGED
|
@@ -4,6 +4,7 @@ from .loop_config import (
|
|
|
4
4
|
AgentStateConfig,
|
|
5
5
|
LoopServices,
|
|
6
6
|
PromptConfig,
|
|
7
|
+
SkillDiscoveryConfig,
|
|
7
8
|
TraceConfig,
|
|
8
9
|
SubagentLinkage,
|
|
9
10
|
)
|
|
@@ -25,6 +26,7 @@ from .runtime_settings import (
|
|
|
25
26
|
__all__ = [
|
|
26
27
|
"AgentLoopConfig",
|
|
27
28
|
"AgentStateConfig",
|
|
29
|
+
"SkillDiscoveryConfig",
|
|
28
30
|
"LoopServices",
|
|
29
31
|
"PromptConfig",
|
|
30
32
|
"TraceConfig",
|
|
@@ -52,6 +52,16 @@ class PromptConfig:
|
|
|
52
52
|
thinking_generation_enabled: bool = True # 是否启用 request-side thinking 生成(对齐 CC thinkingConfig)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
@dataclass(frozen=True)
|
|
56
|
+
class SkillDiscoveryConfig:
|
|
57
|
+
"""Workflow / 双 workspace 节点的 Skill 发现层级(对齐 bug.md ComponentScan)。"""
|
|
58
|
+
|
|
59
|
+
project_skills_dir: str | Path | None = None
|
|
60
|
+
global_skills_dir: str | Path | None = None
|
|
61
|
+
include_managed: bool = False
|
|
62
|
+
include_user_home: bool = False
|
|
63
|
+
|
|
64
|
+
|
|
55
65
|
@dataclass(frozen=True)
|
|
56
66
|
class AgentStateConfig:
|
|
57
67
|
"""Agent 状态配置(Agent 状态目录落点 / 派生目录视图)。
|
|
@@ -64,6 +74,7 @@ class AgentStateConfig:
|
|
|
64
74
|
runtime_cwd: 工具运行时 cwd / 相对路径展开基准(None 时回退到 workspace_root)
|
|
65
75
|
read_roots: 只读根目录
|
|
66
76
|
write_roots: 只写根目录
|
|
77
|
+
skill_discovery: 可选项目级 / 全局 skill 目录(覆盖 legacy 三源)
|
|
67
78
|
|
|
68
79
|
CC 对照:无直接对应,SDK 特化的状态层配置。
|
|
69
80
|
"""
|
|
@@ -74,6 +85,7 @@ class AgentStateConfig:
|
|
|
74
85
|
write_roots: tuple[str, ...] = ()
|
|
75
86
|
workspace_trust_accepted: bool | None = None
|
|
76
87
|
enable_dynamic_root_grant: bool = False
|
|
88
|
+
skill_discovery: SkillDiscoveryConfig | None = None
|
|
77
89
|
|
|
78
90
|
|
|
79
91
|
@dataclass(frozen=True)
|
|
@@ -585,7 +585,10 @@ class LoopGraphBuilder:
|
|
|
585
585
|
session_store.hooks_snapshot = self._hook_snapshot
|
|
586
586
|
from langchain_agentx.tools.skill.repository_factory import build_skill_repository
|
|
587
587
|
|
|
588
|
-
session_store.skill_repository = build_skill_repository(
|
|
588
|
+
session_store.skill_repository = build_skill_repository(
|
|
589
|
+
self._workspace_cfg,
|
|
590
|
+
discovery=self._skill_discovery_layout,
|
|
591
|
+
)
|
|
589
592
|
self._trace_callback_handler: TraceCallbackHandler | None = None
|
|
590
593
|
self._trace_tool_callback_handler: TraceCallbackHandler | None = None
|
|
591
594
|
hook_event_emitter = None
|
|
@@ -745,6 +748,7 @@ class LoopGraphBuilder:
|
|
|
745
748
|
workspace_root=self._workspace_root,
|
|
746
749
|
agent_home_segment=self._agent_home_segment,
|
|
747
750
|
session_cwd=self._workspace_cfg.session_cwd or self._workspace_cfg.workspace_root,
|
|
751
|
+
skill_discovery=self._skill_discovery_layout,
|
|
748
752
|
)
|
|
749
753
|
# 用户已在 loader 上注册自定义 AgentRuntimeTool 时,跳过默认 Agent 注册,
|
|
750
754
|
# 由后续合并循环把用户实例搬入 loop_loader.registry。
|
|
@@ -759,7 +763,9 @@ class LoopGraphBuilder:
|
|
|
759
763
|
if tool.name in self._loop_loader.registry._tools:
|
|
760
764
|
existing = self._loop_loader.registry.get(tool.name)
|
|
761
765
|
if existing is not tool:
|
|
762
|
-
|
|
766
|
+
# 宿主与 register_default_tools 同名不同实例:保留默认。
|
|
767
|
+
# debug:CLI 镜像全量默认工具时属常态,勿打 stderr(S-4 仍可 caplog)。
|
|
768
|
+
logger.debug(
|
|
763
769
|
"Host loader tool %r not merged into loop; "
|
|
764
770
|
"register_default_tools already registered %r (S-4)",
|
|
765
771
|
tool.name,
|
|
@@ -1078,6 +1084,7 @@ class LoopGraphBuilder:
|
|
|
1078
1084
|
self._workspace_cfg = workspace_cfg
|
|
1079
1085
|
self._workspace_root = str(workspace_cfg.workspace_root)
|
|
1080
1086
|
self._agent_home_segment = workspace_cfg.agent_home_segment
|
|
1087
|
+
self._skill_discovery_layout = self._resolve_skill_discovery_layout()
|
|
1081
1088
|
from langchain_agentx.workspace import WorkspaceBoundary
|
|
1082
1089
|
|
|
1083
1090
|
self._workspace_boundary = WorkspaceBoundary.build(
|
|
@@ -1086,6 +1093,27 @@ class LoopGraphBuilder:
|
|
|
1086
1093
|
write_roots=list(self._config.workspace.write_roots) or None,
|
|
1087
1094
|
)
|
|
1088
1095
|
|
|
1096
|
+
def _resolve_skill_discovery_layout(self) -> Any | None:
|
|
1097
|
+
from langchain_agentx.tools.skill.source_paths import SkillDiscoveryLayout
|
|
1098
|
+
|
|
1099
|
+
sd = self._config.workspace.skill_discovery
|
|
1100
|
+
if sd is None:
|
|
1101
|
+
return None
|
|
1102
|
+
return SkillDiscoveryLayout(
|
|
1103
|
+
project_skills_dir=(
|
|
1104
|
+
Path(sd.project_skills_dir).expanduser()
|
|
1105
|
+
if sd.project_skills_dir is not None
|
|
1106
|
+
else None
|
|
1107
|
+
),
|
|
1108
|
+
global_skills_dir=(
|
|
1109
|
+
Path(sd.global_skills_dir).expanduser()
|
|
1110
|
+
if sd.global_skills_dir is not None
|
|
1111
|
+
else None
|
|
1112
|
+
),
|
|
1113
|
+
include_managed=sd.include_managed,
|
|
1114
|
+
include_user_home=sd.include_user_home,
|
|
1115
|
+
)
|
|
1116
|
+
|
|
1089
1117
|
def _sync_tool_policy_roots_from_workspace(self) -> None:
|
|
1090
1118
|
"""挂载 A:compile 后以 AgentLoopConfig.workspace 刷新 loader policy roots。"""
|
|
1091
1119
|
loader = self._services.loader
|
|
@@ -131,6 +131,7 @@ class ToolRuntimeLoader:
|
|
|
131
131
|
workspace_root: str,
|
|
132
132
|
agent_home_segment: str = ".langchain_agentx",
|
|
133
133
|
session_cwd: str | Path | None = None,
|
|
134
|
+
skill_discovery: Any | None = None,
|
|
134
135
|
) -> LoopLoader:
|
|
135
136
|
"""构造独立的 per-loop 工具注册表(不污染 loader 主 registry)。"""
|
|
136
137
|
return LoopLoader(
|
|
@@ -138,6 +139,7 @@ class ToolRuntimeLoader:
|
|
|
138
139
|
workspace_root=workspace_root,
|
|
139
140
|
agent_home_segment=agent_home_segment,
|
|
140
141
|
session_cwd=session_cwd,
|
|
142
|
+
skill_discovery=skill_discovery,
|
|
141
143
|
)
|
|
142
144
|
|
|
143
145
|
def create_session(self, session_id: str | None = None) -> AgentSessionStore:
|
|
@@ -34,11 +34,13 @@ class LoopLoader:
|
|
|
34
34
|
workspace_root: str,
|
|
35
35
|
agent_home_segment: str = ".langchain_agentx",
|
|
36
36
|
session_cwd: str | Path | None = None,
|
|
37
|
+
skill_discovery: Any | None = None,
|
|
37
38
|
) -> None:
|
|
38
39
|
self._process = process
|
|
39
40
|
self._workspace_root = workspace_root
|
|
40
41
|
self._agent_home = agent_home_segment
|
|
41
42
|
self._session_cwd = session_cwd
|
|
43
|
+
self._skill_discovery = skill_discovery
|
|
42
44
|
self._registry = RuntimeToolRegistry(
|
|
43
45
|
pipeline=process.pipeline,
|
|
44
46
|
adapter=process.adapter,
|
|
@@ -107,7 +109,7 @@ class LoopLoader:
|
|
|
107
109
|
agent_home_segment=self._agent_home,
|
|
108
110
|
session_cwd=effective_cwd,
|
|
109
111
|
)
|
|
110
|
-
self._merge_skill_read_roots_policy(cfg)
|
|
112
|
+
self._merge_skill_read_roots_policy(cfg, discovery=self._skill_discovery)
|
|
111
113
|
self._inject_project_memory_policy(cfg)
|
|
112
114
|
plugin_ex = PluginCacheGlobExclusions(
|
|
113
115
|
cache_root=str(cfg.plugin_cache_dir.resolve()),
|
|
@@ -211,11 +213,19 @@ class LoopLoader:
|
|
|
211
213
|
setter(patterns)
|
|
212
214
|
return patterns
|
|
213
215
|
|
|
214
|
-
def _merge_skill_read_roots_policy(
|
|
216
|
+
def _merge_skill_read_roots_policy(
|
|
217
|
+
self,
|
|
218
|
+
workspace_cfg: Any,
|
|
219
|
+
*,
|
|
220
|
+
discovery: Any | None = None,
|
|
221
|
+
) -> None:
|
|
215
222
|
"""G-2:skill 发现目录并入 read_roots(在 project_memory 注入之前)。"""
|
|
216
223
|
from langchain_agentx.tools.skill.source_paths import resolve_skill_read_roots
|
|
217
224
|
|
|
218
|
-
roots = resolve_skill_read_roots(
|
|
225
|
+
roots = resolve_skill_read_roots(
|
|
226
|
+
workspace_cfg,
|
|
227
|
+
discovery=discovery if discovery is not None else self._skill_discovery,
|
|
228
|
+
)
|
|
219
229
|
if not roots:
|
|
220
230
|
return
|
|
221
231
|
base = self._process.effective_policy_config()
|
|
@@ -35,7 +35,7 @@ if TYPE_CHECKING:
|
|
|
35
35
|
from langchain_agentx.plugin.registries import SkillRegistry
|
|
36
36
|
from langchain_agentx.workspace.config import ResolvedAgentStateConfig
|
|
37
37
|
|
|
38
|
-
SkillLoadedFrom = Literal["bundled", "plugin", "managed", "user", "project", "dynamic"]
|
|
38
|
+
SkillLoadedFrom = Literal["bundled", "plugin", "managed", "user", "project", "global", "dynamic"]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
@dataclass(frozen=True, slots=True)
|
|
@@ -57,6 +57,8 @@ class MultiSourceSkillCommandRepository:
|
|
|
57
57
|
|
|
58
58
|
for spec in self._sources:
|
|
59
59
|
skills_dir = spec.skills_dir
|
|
60
|
+
if not skills_dir.expanduser().resolve().is_dir():
|
|
61
|
+
continue
|
|
60
62
|
if self._gitignore_guard.should_skip_skills_dir(skills_dir, cwd=self._cwd):
|
|
61
63
|
continue
|
|
62
64
|
for cmd in self._dir_loader.load_commands_from_dir(skills_dir):
|
|
@@ -17,7 +17,7 @@ from langchain_agentx.workspace.config import ResolvedAgentStateConfig
|
|
|
17
17
|
|
|
18
18
|
from .loader import SkillCommandRepository
|
|
19
19
|
from .multi_source_repository import MultiSourceSkillCommandRepository
|
|
20
|
-
from .source_paths import resolve_skill_source_specs
|
|
20
|
+
from .source_paths import SkillDiscoveryLayout, resolve_skill_source_specs
|
|
21
21
|
|
|
22
22
|
SkillRepository = Union[SkillCommandRepository, MultiSourceSkillCommandRepository]
|
|
23
23
|
|
|
@@ -26,13 +26,15 @@ def build_skill_repository(
|
|
|
26
26
|
workspace_cfg: ResolvedAgentStateConfig,
|
|
27
27
|
*,
|
|
28
28
|
skills_root: Path | None = None,
|
|
29
|
+
discovery: SkillDiscoveryLayout | None = None,
|
|
29
30
|
) -> SkillRepository:
|
|
30
31
|
if skills_root is not None:
|
|
31
32
|
return SkillCommandRepository(Path(skills_root).expanduser().resolve())
|
|
33
|
+
cwd = workspace_cfg.session_cwd or workspace_cfg.workspace_root
|
|
32
34
|
return MultiSourceSkillCommandRepository(
|
|
33
|
-
resolve_skill_source_specs(workspace_cfg),
|
|
35
|
+
resolve_skill_source_specs(workspace_cfg, discovery=discovery),
|
|
34
36
|
workspace_root=workspace_cfg.workspace_root,
|
|
35
|
-
cwd=
|
|
37
|
+
cwd=cwd,
|
|
36
38
|
)
|
|
37
39
|
|
|
38
40
|
|
|
@@ -26,7 +26,21 @@ from langchain_agentx.workspace.project_key import resolve_config_home_dir
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from .models import SkillCommand
|
|
28
28
|
|
|
29
|
-
DiskSkillSource = Literal["managed", "user", "project"]
|
|
29
|
+
DiskSkillSource = Literal["managed", "user", "project", "global"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@dataclass(frozen=True, slots=True)
|
|
33
|
+
class SkillDiscoveryLayout:
|
|
34
|
+
"""显式 skill 发现层级(Workflow 节点 / 双 workspace 宿主)。
|
|
35
|
+
|
|
36
|
+
first-wins 顺序:project → global → user → managed(与 CC 项目覆盖全局一致)。
|
|
37
|
+
未设 ``discovery`` 时保留 legacy:managed → user → project。
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
project_skills_dir: Path | None = None
|
|
41
|
+
global_skills_dir: Path | None = None
|
|
42
|
+
include_managed: bool = False
|
|
43
|
+
include_user_home: bool = False
|
|
30
44
|
|
|
31
45
|
|
|
32
46
|
@dataclass(frozen=True, slots=True)
|
|
@@ -61,23 +75,35 @@ def resolve_managed_skills_dir(agent_home_segment: str) -> Path:
|
|
|
61
75
|
return resolve_managed_settings_root() / segment / "skills"
|
|
62
76
|
|
|
63
77
|
|
|
78
|
+
def _existing_skills_dir(path: Path) -> Path | None:
|
|
79
|
+
try:
|
|
80
|
+
resolved = path.expanduser().resolve()
|
|
81
|
+
except OSError:
|
|
82
|
+
return None
|
|
83
|
+
if resolved.is_dir():
|
|
84
|
+
return resolved
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
|
|
64
88
|
def resolve_skill_read_roots(
|
|
65
89
|
workspace_cfg: ResolvedAgentStateConfig,
|
|
66
90
|
*,
|
|
67
91
|
project_skills_dir: Path | None = None,
|
|
92
|
+
discovery: SkillDiscoveryLayout | None = None,
|
|
68
93
|
) -> tuple[Path, ...]:
|
|
69
|
-
"""Skill
|
|
94
|
+
"""Skill 可读根(仅 **已存在** 的目录;S-5 发现语义,非 boundary 错误)。"""
|
|
70
95
|
seen: set[Path] = set()
|
|
71
96
|
roots: list[Path] = []
|
|
72
97
|
for spec in resolve_skill_source_specs(
|
|
73
98
|
workspace_cfg,
|
|
74
99
|
project_skills_dir=project_skills_dir,
|
|
100
|
+
discovery=discovery,
|
|
75
101
|
):
|
|
76
|
-
|
|
77
|
-
if
|
|
102
|
+
existing = _existing_skills_dir(spec.skills_dir)
|
|
103
|
+
if existing is None or existing in seen:
|
|
78
104
|
continue
|
|
79
|
-
seen.add(
|
|
80
|
-
roots.append(
|
|
105
|
+
seen.add(existing)
|
|
106
|
+
roots.append(existing)
|
|
81
107
|
return tuple(roots)
|
|
82
108
|
|
|
83
109
|
|
|
@@ -85,20 +111,44 @@ def resolve_skill_source_specs(
|
|
|
85
111
|
workspace_cfg: ResolvedAgentStateConfig,
|
|
86
112
|
*,
|
|
87
113
|
project_skills_dir: Path | None = None,
|
|
114
|
+
discovery: SkillDiscoveryLayout | None = None,
|
|
88
115
|
) -> list[SkillSourceSpec]:
|
|
89
|
-
"""
|
|
116
|
+
"""Skill 源列表;repository first-wins 按列表顺序。"""
|
|
90
117
|
segment = workspace_cfg.agent_home_segment
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
if discovery is None:
|
|
119
|
+
project_dir = project_skills_dir or workspace_cfg.skills_dir
|
|
120
|
+
specs: list[SkillSourceSpec] = []
|
|
121
|
+
if not policy_skills_disabled():
|
|
122
|
+
specs.append(SkillSourceSpec(resolve_managed_skills_dir(segment), "managed"))
|
|
123
|
+
specs.append(SkillSourceSpec(resolve_user_skills_dir(segment), "user"))
|
|
124
|
+
specs.append(SkillSourceSpec(Path(project_dir).expanduser().resolve(), "project"))
|
|
125
|
+
return specs
|
|
126
|
+
|
|
127
|
+
project_dir = (
|
|
128
|
+
discovery.project_skills_dir
|
|
129
|
+
or project_skills_dir
|
|
130
|
+
or workspace_cfg.skills_dir
|
|
131
|
+
)
|
|
132
|
+
specs = [
|
|
133
|
+
SkillSourceSpec(Path(project_dir).expanduser().resolve(), "project"),
|
|
134
|
+
]
|
|
135
|
+
if discovery.global_skills_dir is not None:
|
|
136
|
+
specs.append(
|
|
137
|
+
SkillSourceSpec(
|
|
138
|
+
Path(discovery.global_skills_dir).expanduser().resolve(),
|
|
139
|
+
"global",
|
|
140
|
+
)
|
|
141
|
+
)
|
|
142
|
+
if discovery.include_user_home:
|
|
143
|
+
specs.append(SkillSourceSpec(resolve_user_skills_dir(segment), "user"))
|
|
144
|
+
if not policy_skills_disabled() and discovery.include_managed:
|
|
94
145
|
specs.append(SkillSourceSpec(resolve_managed_skills_dir(segment), "managed"))
|
|
95
|
-
specs.append(SkillSourceSpec(resolve_user_skills_dir(segment), "user"))
|
|
96
|
-
specs.append(SkillSourceSpec(Path(project_dir).expanduser().resolve(), "project"))
|
|
97
146
|
return specs
|
|
98
147
|
|
|
99
148
|
|
|
100
149
|
__all__ = [
|
|
101
150
|
"DiskSkillSource",
|
|
151
|
+
"SkillDiscoveryLayout",
|
|
102
152
|
"SkillSourceSpec",
|
|
103
153
|
"SourcedSkillEntry",
|
|
104
154
|
"policy_skills_disabled",
|
|
@@ -149,6 +149,10 @@ class ProjectMemoryLayoutResolver:
|
|
|
149
149
|
key_sess = self.sanitizer.sanitize(str(cwd))
|
|
150
150
|
l2_project_dir = config_home / _PROJECTS_DIRNAME / key_l2
|
|
151
151
|
sess_project_dir = config_home / _PROJECTS_DIRNAME / key_sess
|
|
152
|
+
# SSOT:布局解析即保证 projects/{key} 存在,避免启动链路先读/扫描 transcript 时
|
|
153
|
+
# FileNotFoundError(子目录首次启动、key_sess 全新时必现)。
|
|
154
|
+
l2_project_dir.mkdir(parents=True, exist_ok=True)
|
|
155
|
+
sess_project_dir.mkdir(parents=True, exist_ok=True)
|
|
152
156
|
override = _resolve_memory_dir_override(memory_dir_override)
|
|
153
157
|
return ProjectMemoryLayout(
|
|
154
158
|
agent_home_segment=agent_home_segment.strip(),
|
{langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.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.3
|
|
4
4
|
Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
|
|
5
5
|
Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
|
|
6
6
|
License: Apache License
|
|
@@ -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=6ftpvlLKaDt-1ujsfwn1CpOzcZoVDPlRwOsS7KZDCR0,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
|
|
@@ -29,10 +29,10 @@ langchain_agentx/loop/benchmark_frozen_config.py,sha256=YI4IaDVMBOEucF36F2oNv5mw
|
|
|
29
29
|
langchain_agentx/loop/loop_abort.py,sha256=cKlHxZh0u7-drCVqEiRtzkO270MHw6grJuZ1NpKoGfo,3250
|
|
30
30
|
langchain_agentx/loop/message_contract.py,sha256=Twl83TneU2PRdxgGRBxs6S9_ovRT6cb5WeCUzd6oJnE,2196
|
|
31
31
|
langchain_agentx/loop/run_context.py,sha256=dhNiLhvqD_QYacGMA0B5P3wWpSe3O6wU_XcVEzb86Z4,8303
|
|
32
|
-
langchain_agentx/loop/config/__init__.py,sha256=
|
|
32
|
+
langchain_agentx/loop/config/__init__.py,sha256=0pf3Mml7LZpQ1C3_AtROFQClrBQegaGCG4YCTfSr9v8,1137
|
|
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=
|
|
35
|
+
langchain_agentx/loop/config/loop_config.py,sha256=b87oJNcy9rYi-bYnw32OFCndXOPj54-ysrpe0F1fR2w,16147
|
|
36
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
|
|
@@ -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=-RDgiprUAydk_tSA86CyI7zgj9wC6gPen2p39OFscIU,105591
|
|
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=PL9WTWhK4BffoVsIjvCZP45tXbE8a2Zc0vp0bJKg2ew,9541
|
|
410
|
+
langchain_agentx/tool_runtime/loop_loader.py,sha256=p_gDv9HWwPnO9KBRJWp8bNBuGq_-zh-yB8Ns0X3qQqA,9920
|
|
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
|
|
@@ -606,7 +606,7 @@ langchain_agentx/tools/shared/read_state_guard.py,sha256=YSDyACWwBGVl-GhpR7qDzYg
|
|
|
606
606
|
langchain_agentx/tools/shared/staleness.py,sha256=wTSpnLdazuxTdbC5U7zNLdWxkMPq4F7M0TbrIBOBbKA,2519
|
|
607
607
|
langchain_agentx/tools/skill/__init__.py,sha256=hNIgFeIcwpifU34Itwv5y25G4dvqBxY1XJEYfrOsBmc,132
|
|
608
608
|
langchain_agentx/tools/skill/argument_substitution.py,sha256=xj_naOGCgPG7x9HAE2GzYsPQ50iDueWGjU02Oa3Ml98,2669
|
|
609
|
-
langchain_agentx/tools/skill/catalog.py,sha256=
|
|
609
|
+
langchain_agentx/tools/skill/catalog.py,sha256=kYCchsAgz32PQxkhRViewUpmaJW3mvRF1AhBEugGC88,16387
|
|
610
610
|
langchain_agentx/tools/skill/dynamic_catalog.py,sha256=kc9tcAJMbvieIaO0SN89b58I0OIjPRsccKv8pLVoyXI,5409
|
|
611
611
|
langchain_agentx/tools/skill/dynamic_discoverer.py,sha256=1zUcWHJn96UFJeDY9NPsjpZAJ3iQFAq_Y7REyUGXfMo,2978
|
|
612
612
|
langchain_agentx/tools/skill/file_discovery.py,sha256=mEMSg5eqGbv0bU7ZWY_i7WdYZsL618pMo0wMrbunbSc,2202
|
|
@@ -615,14 +615,14 @@ langchain_agentx/tools/skill/guards.py,sha256=tO6hLncKW0eMpWLrdnZLeMzfknL0ufbE8N
|
|
|
615
615
|
langchain_agentx/tools/skill/hook_registration.py,sha256=2V5srDxBFFnMVEvVbw1Rj39qcij4AtWPzgvL7--D72c,3739
|
|
616
616
|
langchain_agentx/tools/skill/loader.py,sha256=E0P90vvja5thi-1nPT4OkWtOniBkISvumA5agV150XU,10086
|
|
617
617
|
langchain_agentx/tools/skill/models.py,sha256=oo6hsDQtZth_xMetL38NzyxOrDQNzurmTgH8b55VV10,3144
|
|
618
|
-
langchain_agentx/tools/skill/multi_source_repository.py,sha256=
|
|
618
|
+
langchain_agentx/tools/skill/multi_source_repository.py,sha256=P1IRodDmnB1hNTqBcsbWvCFqesCSdE2mW-zhxee8dyE,3370
|
|
619
619
|
langchain_agentx/tools/skill/paths_matcher.py,sha256=J4SOBThray_72mrYiQUfJ5Icu6TPwhctFLugXvMIEkI,3487
|
|
620
620
|
langchain_agentx/tools/skill/plugin_loader.py,sha256=qT0VcIWkKFmRGGH8-e_f4y1XIpjY71TVbnZwnu2M9_M,1191
|
|
621
621
|
langchain_agentx/tools/skill/policy.py,sha256=SFlW627gyo_-wyIppAqoytBmrLPlSGw-mbR00gjOJQY,1541
|
|
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
|
-
langchain_agentx/tools/skill/repository_factory.py,sha256=
|
|
625
|
-
langchain_agentx/tools/skill/source_paths.py,sha256=
|
|
624
|
+
langchain_agentx/tools/skill/repository_factory.py,sha256=aFYIw65ctz1sLfEmn8E3YfpgTvTc1YI9XkueWpeiXtA,1359
|
|
625
|
+
langchain_agentx/tools/skill/source_paths.py,sha256=x-WHorUgt2xyI5hcvALT2e6Ra-HDpKgIv7plQezRkws,5324
|
|
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
|
|
@@ -760,14 +760,14 @@ langchain_agentx/workspace/path_canonical.py,sha256=Z_mmDJQMP4WmBhjBpRUGKGg7XCsK
|
|
|
760
760
|
langchain_agentx/workspace/path_key_normalizer.py,sha256=ICk9uGiiNFH-zaXJG3_vx91uOpgWmgOPIjJoSYevKOc,1113
|
|
761
761
|
langchain_agentx/workspace/plans.py,sha256=wo0ogpErnmwBrNwsHHCzARnIfHM7xnhpAMiN39SjCCI,11813
|
|
762
762
|
langchain_agentx/workspace/project_key.py,sha256=iA_C6oLM8ebWX6C4GXpJp-SO_n6O1heNcyNebC513QA,2808
|
|
763
|
-
langchain_agentx/workspace/project_memory_layout.py,sha256=
|
|
763
|
+
langchain_agentx/workspace/project_memory_layout.py,sha256=F-PlZpOCnXQGh24LF8nINgjkLmA6yTJ6tcdWzEzxL0U,8092
|
|
764
764
|
langchain_agentx/workspace/resolver.py,sha256=stWBxa-jkNO2nZKEJr89Qb4805FcEFm76NpybWb-LYs,6444
|
|
765
765
|
langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXOUBGr1Gjnl8CfCoTIuYc,7558
|
|
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.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
770
|
+
langchain_agentx_python-2.3.3.dist-info/METADATA,sha256=e_CGB6uG3nhxDnh2VADLt975KFC-uVAARQlRtha-3es,23942
|
|
771
|
+
langchain_agentx_python-2.3.3.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
|
|
772
|
+
langchain_agentx_python-2.3.3.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
|
|
773
|
+
langchain_agentx_python-2.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_python-2.3.1.dist-info → langchain_agentx_python-2.3.3.dist-info}/top_level.txt
RENAMED
|
File without changes
|