langchain-agentx-python 2.3.2__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.
@@ -11,7 +11,7 @@ from langchain_agentx import create_loop_agent
11
11
  ```
12
12
  """
13
13
 
14
- __version__ = "2.3.2"
14
+ __version__ = "2.3.3"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
@@ -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(self._workspace_cfg)
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。
@@ -1080,6 +1084,7 @@ class LoopGraphBuilder:
1080
1084
  self._workspace_cfg = workspace_cfg
1081
1085
  self._workspace_root = str(workspace_cfg.workspace_root)
1082
1086
  self._agent_home_segment = workspace_cfg.agent_home_segment
1087
+ self._skill_discovery_layout = self._resolve_skill_discovery_layout()
1083
1088
  from langchain_agentx.workspace import WorkspaceBoundary
1084
1089
 
1085
1090
  self._workspace_boundary = WorkspaceBoundary.build(
@@ -1088,6 +1093,27 @@ class LoopGraphBuilder:
1088
1093
  write_roots=list(self._config.workspace.write_roots) or None,
1089
1094
  )
1090
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
+
1091
1117
  def _sync_tool_policy_roots_from_workspace(self) -> None:
1092
1118
  """挂载 A:compile 后以 AgentLoopConfig.workspace 刷新 loader policy roots。"""
1093
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(self, workspace_cfg: Any) -> None:
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(workspace_cfg)
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=workspace_cfg.workspace_root,
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 发现目录绝对路径(与 ``resolve_skill_source_specs`` 同源,去重保序)。"""
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
- resolved = spec.skills_dir.expanduser().resolve()
77
- if resolved in seen:
102
+ existing = _existing_skills_dir(spec.skills_dir)
103
+ if existing is None or existing in seen:
78
104
  continue
79
- seen.add(resolved)
80
- roots.append(resolved)
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
- """managed → user → project(first-wins 由 repository 执行)。"""
116
+ """Skill 源列表;repository first-wins 按列表顺序。"""
90
117
  segment = workspace_cfg.agent_home_segment
91
- project_dir = project_skills_dir or workspace_cfg.skills_dir
92
- specs: list[SkillSourceSpec] = []
93
- if not policy_skills_disabled():
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(),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 2.3.2
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
@@ -1,4 +1,4 @@
1
- langchain_agentx/__init__.py,sha256=UYRKrpqJvIQs_odLFNlRSJVoGCAv6UA1VLWG64SQ0gE,1614
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=WdRQVXuvGU4myaGOZ8guFFvUb66jfsAIp9DLANJGieg,1083
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=f_McUyP8xJAhBka3bPOkk7dkPCe1ZLRX0HI5gsEb370,15680
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=BMNHUGqNhOhcqxtdsB0TeI5ZHqK_0QdDwb3K32LmhxA,104607
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=vT1_1QoBCpDGhe9sWRqgDZBcuErF35rAcOAENDrUcCI,9452
410
- langchain_agentx/tool_runtime/loop_loader.py,sha256=H8QKRmoi3ni-8vkyx90W2zfC4quDOfnNTc3d4ote4hM,9615
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=CJKAKnFyFy5iuBNKpj6mwHZ3dVcOIJnJAk0OOWd9MbY,16377
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=gP5dBWZ07mLFbIdsmrmL9rrdiarD1vtb26pgy2f35cc,3282
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=7zDoPDZgxoR03CkmKdx9b0aUXwaH8E5LtBYQPGF26rA,1222
625
- langchain_agentx/tools/skill/source_paths.py,sha256=2CeVYF37JONiXrKQcogdBs0Y31p9AAMIOgGXZKnBQfE,3651
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=6B0FAfoqdIL_gWUmlaF-8w5OwKYhZP6P3TKZomv7F-A,7779
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.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,,
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,,