langchain-agentx-python 2.3.7__py3-none-any.whl → 2.3.8__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.7"
14
+ __version__ = "2.3.8"
15
15
 
16
16
  from .mcp.call import McpToolCaller
17
17
  from .mcp.client_manager import McpClientManager, McpConnectedClient
@@ -127,6 +127,11 @@ class SubagentContext:
127
127
  inherit_hooks: bool | frozenset[HookEvent] | None = True
128
128
  """True/None → DEFAULT_SUBAGENT_INHERITED_EVENTS;False → 不继承;frozenset → 自定义事件集。"""
129
129
 
130
+ progress_host_kind: str | None = None
131
+ """Skill fork:``skill_progress`` 时 runner 只冒泡 CC 同构 skill progress,不发 subagent 双通道。"""
132
+ skill_prompt: str = ""
133
+ """Skill fork:↔ CC ``onProgress`` ``data.prompt``(skill 正文)。"""
134
+
130
135
 
131
136
  @dataclass
132
137
  class SubagentResult:
@@ -25,7 +25,7 @@ from langchain_agentx.loop.runtime.subagent_execution_paths import (
25
25
  resolve_subagent_effective_cwd,
26
26
  resolve_subagent_workspace_root,
27
27
  )
28
- from langchain_agentx.loop.subagent.context import create_subagent_context
28
+ from langchain_agentx.loop.subagent.context import SubagentContext, create_subagent_context
29
29
  from langchain_agentx.loop.subagent.hooks_pipeline import (
30
30
  _apply_agent_frontmatter_hooks as _pipeline_apply_agent_hooks,
31
31
  _apply_skill_fork_hooks as _pipeline_apply_skill_hooks,
@@ -54,6 +54,23 @@ from langchain_agentx.observability.logging import ObservabilityLoggerAdapter, b
54
54
  from langchain_agentx.workspace import resolve_agent_state_config
55
55
  from langchain_agentx.loop.config.thinking_config import ThinkingConfig
56
56
 
57
+
58
+ def _apply_skill_fork_progress_host(
59
+ subagent_ctx: SubagentContext,
60
+ *,
61
+ skill_hook_frontmatter: dict[str, Any] | None,
62
+ skill_prompt: str,
63
+ ) -> None:
64
+ """Skill fork:注入 CC 同构 skill_progress 冒泡上下文(Phase A · L8/L9)。"""
65
+ if skill_hook_frontmatter is None:
66
+ return
67
+ from langchain_agentx.tools.skill.fork import is_fork_execution_context
68
+
69
+ if is_fork_execution_context(skill_hook_frontmatter):
70
+ subagent_ctx.progress_host_kind = "skill_progress"
71
+ subagent_ctx.skill_prompt = skill_prompt or ""
72
+
73
+
57
74
  if TYPE_CHECKING:
58
75
  from langchain_agentx.loop.runtime import AgentLoopConfig
59
76
  from langchain_agentx.tool_runtime.models import ToolExecutionContext
@@ -344,6 +361,11 @@ class SubagentOrchestrator:
344
361
  is_builtin_subagent=getattr(subagent_config, "is_builtin", False),
345
362
  inherit_hooks=True if inherit_hooks is None else inherit_hooks,
346
363
  )
364
+ _apply_skill_fork_progress_host(
365
+ subagent_ctx,
366
+ skill_hook_frontmatter=skill_hook_frontmatter,
367
+ skill_prompt=inp.prompt or "",
368
+ )
347
369
  subagent_ctx.mcp_child_session = mcp_child
348
370
  scope = propagate_subagent_tool_scope(
349
371
  parent_ctx=ctx,
@@ -564,6 +586,11 @@ class SubagentOrchestrator:
564
586
  is_builtin_subagent=getattr(subagent_config, "is_builtin", False),
565
587
  inherit_hooks=True if inherit_hooks is None else inherit_hooks,
566
588
  )
589
+ _apply_skill_fork_progress_host(
590
+ subagent_ctx,
591
+ skill_hook_frontmatter=skill_hook_frontmatter,
592
+ skill_prompt=inp.prompt or "",
593
+ )
567
594
  subagent_ctx.mcp_child_session = mcp_child
568
595
  scope = propagate_subagent_tool_scope(
569
596
  parent_ctx=ctx,
@@ -8,6 +8,8 @@ CC 对照:src/agent/subagent/progress.ts onProgress 回调参数类型
8
8
 
9
9
  # transcript lane 在 tool_progress custom event 上的 phase 值(与 adapter mapper 冻结一致)
10
10
  SUBAGENT_TRANSCRIPT_PHASE = "transcript_message"
11
+ # Skill fork CC 对齐:Typed Tool Progress(↔ CC data.type === 'skill_progress')
12
+ SKILL_PROGRESS_PHASE = "skill_progress"
11
13
 
12
14
  from dataclasses import dataclass, field
13
15
  from typing import Any, Literal
@@ -14,6 +14,7 @@ from typing import Any
14
14
 
15
15
  from langchain_agentx.loop.subagent.context import SubagentContext
16
16
  from langchain_agentx.loop.subagent.progress import (
17
+ SKILL_PROGRESS_PHASE,
17
18
  SUBAGENT_TRANSCRIPT_PHASE,
18
19
  SubagentProgressEvent,
19
20
  )
@@ -46,6 +47,31 @@ class SubagentProgressDispatcher:
46
47
  event_data["tool_input"] = dict(event.tool_call_detail.tool_input)
47
48
  return event_data
48
49
 
50
+ @staticmethod
51
+ def build_skill_progress_payload(
52
+ ctx: SubagentContext,
53
+ *,
54
+ message_kind: str,
55
+ message: dict[str, Any],
56
+ step: int,
57
+ tool_name: str,
58
+ agent_id: str,
59
+ ) -> dict[str, Any]:
60
+ return {
61
+ "tool_call_id": ctx.parent_tool_call_id,
62
+ "agent_id": agent_id,
63
+ "phase": SKILL_PROGRESS_PHASE,
64
+ "step": step,
65
+ "tool_name": tool_name,
66
+ "message_kind": message_kind,
67
+ "message": dict(message),
68
+ "prompt": str(getattr(ctx, "skill_prompt", "") or ""),
69
+ "data": {
70
+ "subagent_type": ctx.subagent_type,
71
+ "type": "skill_progress",
72
+ },
73
+ }
74
+
49
75
  @staticmethod
50
76
  def build_transcript_payload(
51
77
  ctx: SubagentContext,
@@ -265,6 +265,35 @@ async def _emit_progress(
265
265
  await SubagentProgressDispatcher.dispatch_async(parent_config, payload)
266
266
 
267
267
 
268
+ def _uses_skill_progress_host(ctx: SubagentContext) -> bool:
269
+ return getattr(ctx, "progress_host_kind", None) == "skill_progress"
270
+
271
+
272
+ async def _emit_skill_progress(
273
+ ctx: SubagentContext,
274
+ *,
275
+ message_kind: str,
276
+ message: dict[str, Any],
277
+ step: int,
278
+ tool_name: str,
279
+ ) -> None:
280
+ """Skill fork:单帧 CC 同构 skill_progress(L9 · 不发 subagent 双通道)。"""
281
+ parent_config = getattr(ctx, "runnable_config", None)
282
+ if parent_config is None:
283
+ return
284
+ payload = SubagentProgressDispatcher.build_skill_progress_payload(
285
+ ctx,
286
+ message_kind=message_kind,
287
+ message=message,
288
+ step=step,
289
+ tool_name=tool_name,
290
+ agent_id=ctx.agent_id,
291
+ )
292
+ if SubagentProgressDispatcher.dispatch_sync(parent_config, payload):
293
+ return
294
+ await SubagentProgressDispatcher.dispatch_async(parent_config, payload)
295
+
296
+
268
297
  async def _emit_transcript_progress(
269
298
  ctx: SubagentContext,
270
299
  event: SubagentProgressEvent,
@@ -322,6 +351,21 @@ async def _handle_tool_start_event(
322
351
  if not tool_call_id:
323
352
  tool_call_id = f"{SYNTHETIC_TRANSCRIPT_TOOL_ID_PREFIX}{ctx.agent_id}:{next_step}"
324
353
 
354
+ message_kind, normalized = SubagentTranscriptMessageBuilder.build_tool_use(
355
+ tool_name=tool_name,
356
+ tool_input=tool_input if isinstance(tool_input, dict) else None,
357
+ tool_call_id=tool_call_id,
358
+ )
359
+ if _uses_skill_progress_host(ctx):
360
+ await _emit_skill_progress(
361
+ ctx,
362
+ message_kind=message_kind,
363
+ message=normalized,
364
+ step=next_step,
365
+ tool_name=tool_name,
366
+ )
367
+ return next_step, tool_name
368
+
325
369
  await _emit_progress(
326
370
  ctx,
327
371
  SubagentProgressEvent(
@@ -335,12 +379,6 @@ async def _handle_tool_start_event(
335
379
  trace=trace,
336
380
  ),
337
381
  )
338
-
339
- message_kind, normalized = SubagentTranscriptMessageBuilder.build_tool_use(
340
- tool_name=tool_name,
341
- tool_input=tool_input if isinstance(tool_input, dict) else None,
342
- tool_call_id=tool_call_id,
343
- )
344
382
  await _emit_transcript_progress(
345
383
  ctx,
346
384
  SubagentProgressEvent(
@@ -419,6 +457,23 @@ async def _handle_tool_end_event(
419
457
  synthetic=synthetic,
420
458
  )
421
459
  transcript.append(msg_dict)
460
+
461
+ message_kind, normalized = SubagentTranscriptMessageBuilder.build_tool_result(
462
+ tool_name=tool_name,
463
+ content=transcript_text,
464
+ tool_call_id=tool_call_id,
465
+ synthetic=synthetic,
466
+ )
467
+ if _uses_skill_progress_host(ctx):
468
+ await _emit_skill_progress(
469
+ ctx,
470
+ message_kind=message_kind,
471
+ message=normalized,
472
+ step=step,
473
+ tool_name=tool_name,
474
+ )
475
+ return
476
+
422
477
  await _emit_progress(
423
478
  ctx,
424
479
  SubagentProgressEvent(
@@ -430,13 +485,6 @@ async def _handle_tool_end_event(
430
485
  summary=summary[:200] if summary else "",
431
486
  ),
432
487
  )
433
-
434
- message_kind, normalized = SubagentTranscriptMessageBuilder.build_tool_result(
435
- tool_name=tool_name,
436
- content=transcript_text,
437
- tool_call_id=tool_call_id,
438
- synthetic=synthetic,
439
- )
440
488
  await _emit_transcript_progress(
441
489
  ctx,
442
490
  SubagentProgressEvent(
@@ -38,6 +38,9 @@ from langchain_agentx.observability.events.model_end_text_backfill import (
38
38
  BackfillKind,
39
39
  ModelEndTextBackfillPolicy,
40
40
  )
41
+ from langchain_agentx.observability.events.skill_progress_event_mapper import (
42
+ SkillProgressEventMapper,
43
+ )
41
44
  from langchain_agentx.observability.events.subagent_event_mapper import (
42
45
  SubagentBoundaryPayloadBuilder,
43
46
  SubagentProgressEventMapper,
@@ -136,6 +139,7 @@ class LangchainAgentEventType(Enum):
136
139
  SUBAGENT_TOOL_RESULT = "subagent-tool-result"
137
140
  SUBAGENT_TRANSCRIPT_MESSAGE = "subagent-transcript-message"
138
141
  SUBAGENT_MODEL_STEP = "subagent-model-step"
142
+ SKILL_PROGRESS = "skill-progress"
139
143
  ERROR = "error"
140
144
  API_RETRY = "api-retry"
141
145
  ASSISTANT_TURN_SUPERSEDED = "assistant-turn-superseded"
@@ -1553,6 +1557,16 @@ class AgentEventProjector:
1553
1557
  if not isinstance(data, dict):
1554
1558
  return
1555
1559
 
1560
+ skill_mapped = SkillProgressEventMapper.map_custom_tool_progress(data)
1561
+ if skill_mapped is not None:
1562
+ yield self._event(
1563
+ event_type=skill_mapped.event_type,
1564
+ data=skill_mapped.data,
1565
+ step_index=self.state.step_index,
1566
+ tool_name=skill_mapped.tool_name,
1567
+ )
1568
+ return
1569
+
1556
1570
  if self.enable_subagent_events:
1557
1571
  mapped = SubagentProgressEventMapper.map_custom_tool_progress(data)
1558
1572
  if mapped is not None:
@@ -0,0 +1,87 @@
1
+ """
2
+ skill_progress_event_mapper.py — Skill fork tool_progress → skill-progress SSE
3
+
4
+ 职责:将 custom event ``tool_progress``(phase skill_progress)映射为 LangchainAgentEventType.SKILL_PROGRESS。
5
+ 链路位置:AgentEventProjector._handle_custom_event,优先于 SubagentProgressEventMapper。
6
+ 当前裁剪范围:仅 Skill fork progress;不含 Agent agent_progress(另轨 subagent-*)。
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from dataclasses import dataclass
12
+ from typing import Any, TYPE_CHECKING
13
+
14
+ # 与 loop.subagent.progress.SKILL_PROGRESS_PHASE 同值;此处不 import loop,避免 observability↔loop 循环依赖
15
+ _SKILL_PROGRESS_PHASE = "skill_progress"
16
+
17
+ if TYPE_CHECKING:
18
+ from langchain_agentx.observability.events.langchain_agentx_event_adapter import (
19
+ LangchainAgentEventType,
20
+ )
21
+
22
+
23
+ @dataclass(frozen=True)
24
+ class MappedSkillProgress:
25
+ event_type: "LangchainAgentEventType"
26
+ data: dict[str, Any]
27
+ tool_name: str | None
28
+
29
+
30
+ class SkillProgressEventMapper:
31
+ """Skill fork progress → ``skill-progress`` 公共协议。"""
32
+
33
+ @classmethod
34
+ def is_skill_progress_payload(cls, data: dict[str, Any]) -> bool:
35
+ if not isinstance(data, dict):
36
+ return False
37
+ phase = data.get("phase")
38
+ return isinstance(phase, str) and phase == _SKILL_PROGRESS_PHASE
39
+
40
+ @classmethod
41
+ def map_custom_tool_progress(
42
+ cls,
43
+ data: dict[str, Any],
44
+ ) -> MappedSkillProgress | None:
45
+ from langchain_agentx.observability.events.langchain_agentx_event_adapter import (
46
+ LangchainAgentEventType,
47
+ )
48
+
49
+ if not cls.is_skill_progress_payload(data):
50
+ return None
51
+
52
+ message = data.get("message")
53
+ if not isinstance(message, dict):
54
+ return None
55
+
56
+ message_kind = data.get("message_kind")
57
+ if message_kind not in ("assistant", "user"):
58
+ return None
59
+
60
+ agent_id = data.get("agent_id")
61
+ if not isinstance(agent_id, str) or not agent_id.strip():
62
+ return None
63
+
64
+ step_raw = data.get("step", 0)
65
+ step = int(step_raw) if isinstance(step_raw, (int, float)) else 0
66
+
67
+ event_data: dict[str, Any] = {
68
+ "tool_call_id": str(data.get("tool_call_id") or ""),
69
+ "agent_id": agent_id,
70
+ "type": "skill_progress",
71
+ "prompt": str(data.get("prompt") or ""),
72
+ "message_kind": message_kind,
73
+ "message": dict(message),
74
+ "step": step,
75
+ }
76
+ tool_name = str(data.get("tool_name") or "")
77
+ if tool_name:
78
+ event_data["tool_name"] = tool_name
79
+
80
+ return MappedSkillProgress(
81
+ event_type=LangchainAgentEventType.SKILL_PROGRESS,
82
+ data=event_data,
83
+ tool_name=tool_name or None,
84
+ )
85
+
86
+
87
+ __all__ = ["MappedSkillProgress", "SkillProgressEventMapper"]
@@ -12,6 +12,8 @@ from __future__ import annotations
12
12
  from dataclasses import dataclass
13
13
  from typing import Any, TYPE_CHECKING
14
14
 
15
+ _SKILL_PROGRESS_PHASE = "skill_progress"
16
+
15
17
  if TYPE_CHECKING:
16
18
  from langchain_agentx.observability.events.langchain_agentx_event_adapter import (
17
19
  LangchainAgentEventType,
@@ -21,7 +23,11 @@ _SUBAGENT_TRANSCRIPT_PHASE = "transcript_message"
21
23
 
22
24
  _SUBAGENT_TEASER_PHASES = frozenset({"tool_use", "tool_result"})
23
25
  _SUBAGENT_DROP_PHASES = frozenset({"model_step"})
24
- _SUBAGENT_KNOWN_PHASES = _SUBAGENT_TEASER_PHASES | _SUBAGENT_DROP_PHASES | {_SUBAGENT_TRANSCRIPT_PHASE}
26
+ _SUBAGENT_KNOWN_PHASES = (
27
+ _SUBAGENT_TEASER_PHASES
28
+ | _SUBAGENT_DROP_PHASES
29
+ | {_SUBAGENT_TRANSCRIPT_PHASE, _SKILL_PROGRESS_PHASE}
30
+ )
25
31
 
26
32
 
27
33
  @dataclass(frozen=True)
@@ -109,6 +115,9 @@ class SubagentProgressEventMapper:
109
115
  if not isinstance(phase, str):
110
116
  return None
111
117
 
118
+ if phase == _SKILL_PROGRESS_PHASE:
119
+ return None
120
+
112
121
  if phase == _SUBAGENT_TRANSCRIPT_PHASE:
113
122
  return cls._map_transcript(data, LangchainAgentEventType)
114
123
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 2.3.7
3
+ Version: 2.3.8
4
4
  Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
5
5
  Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
6
6
  License: Apache License
@@ -1,4 +1,4 @@
1
- langchain_agentx/__init__.py,sha256=zQXChDyx78k93u07LSKkHsuhqm9jmU0_873Vc4IXRcI,2014
1
+ langchain_agentx/__init__.py,sha256=gtvKFAWnCZTzCzgO9-k_SOm0i5QAt-QQKXfYx8noXtw,2014
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
@@ -146,7 +146,7 @@ langchain_agentx/loop/subagent/active_run_registry.py,sha256=KurhAMDTBnRkdxNidaM
146
146
  langchain_agentx/loop/subagent/async_runner.py,sha256=gGx8UMZbsnxUMPzc_7-XkWgd1EiuRcFAoOVUfjhFltE,13740
147
147
  langchain_agentx/loop/subagent/boundary_snapshot.py,sha256=9cQuqN29nJDRnHnx9c8b09KRmODE2zv15Z06QyjVJps,10008
148
148
  langchain_agentx/loop/subagent/cache_safe_params.py,sha256=-qcgdazEYRy6s4ILQuttpxraE3gsxq17Ro7LYBnuv3E,4460
149
- langchain_agentx/loop/subagent/context.py,sha256=oupi8suTfCINUiWwDhfRbFFzRE-w26SXi8Hfz22xR2U,23729
149
+ langchain_agentx/loop/subagent/context.py,sha256=tR2QQfNBKci0_rOm6e_p5wNXlo1gZntHpgkFfIuTLHE,24000
150
150
  langchain_agentx/loop/subagent/display_projector.py,sha256=AKsGWS1c9reH0kuD5u4oQ24KsBgyt7X10iZM3ere6Fs,3504
151
151
  langchain_agentx/loop/subagent/fork_boilerplate.py,sha256=2Uh3cwegL7V-DvtLIxjX7ik5uW5mXfY2NBzP-biREso,5005
152
152
  langchain_agentx/loop/subagent/fork_ports.py,sha256=hZATCvlYOxNVZtR3PoOVbI1GkA0KhHEyux6lUIjG5_4,1323
@@ -157,13 +157,13 @@ langchain_agentx/loop/subagent/hook_attachment_messages.py,sha256=em3VXaUfURou_Y
157
157
  langchain_agentx/loop/subagent/hooks_compose.py,sha256=enPKRsAbqjB5HqACE-YFzM8K3Job7azi4wpqI1kmgl8,2515
158
158
  langchain_agentx/loop/subagent/hooks_pipeline.py,sha256=4OweLS52TRbcaUO56YpE-qX71ZPCjPRS0j9KzIcx5ls,6399
159
159
  langchain_agentx/loop/subagent/mcp_child_servers.py,sha256=UJ9FtIZroYvP6KfNLUnHKbb7bqg2qSmo15MkzHcVKME,4395
160
- langchain_agentx/loop/subagent/orchestrator.py,sha256=XdGHFihgDc5O3U27fAf8jOin4oGNXexuqgDMeuBdrzM,40804
160
+ langchain_agentx/loop/subagent/orchestrator.py,sha256=35gaY6gzdlCxEogyYiTRos5KtSpsSOADJBZIHazsQbc,41785
161
161
  langchain_agentx/loop/subagent/parent_hook_snapshot.py,sha256=cwBC2eXvx1evc6QPpI42zq-iKThpObyoyWmkDNj9E7Q,2095
162
- langchain_agentx/loop/subagent/progress.py,sha256=_4YCDnVDH8sBiwXhCQVB8OHaUQwsCOGdUTP_Z_yOdsU,6522
163
- langchain_agentx/loop/subagent/progress_dispatcher.py,sha256=e1Kd16WRUOAJSeAjupukrlxHoyCR_JO84SHqntMCzdQ,3831
162
+ langchain_agentx/loop/subagent/progress.py,sha256=nef3VVT9QmB2ZWCDAO86cmtVwCJIR8lXMr6jczQKqOY,6650
163
+ langchain_agentx/loop/subagent/progress_dispatcher.py,sha256=KD5EdfoGplIaT8xvt5vgfXgSLPbvn9KqvY85wLpOX7A,4603
164
164
  langchain_agentx/loop/subagent/prompt.py,sha256=p7RgzibNfEJdfX8nBnZGEwQLa3_EgOn4E56T9MBRIEc,1722
165
165
  langchain_agentx/loop/subagent/reasoning_extractor.py,sha256=KrCQtBdKzsjAEfA7H5COuXzBhuGGonT2Su8IEKYlUpA,1334
166
- langchain_agentx/loop/subagent/runner.py,sha256=ms200D_0oM9Scqr1OmDd_va6ORAl_OB57RCqEeC9HtA,33736
166
+ langchain_agentx/loop/subagent/runner.py,sha256=GCYWWMZtkJRH8L1sJAwrVwe0yOqO-6kBT-6p5J1w_s0,35142
167
167
  langchain_agentx/loop/subagent/subagent_start_hooks.py,sha256=HIyW7_ta9JNxiyrgL8scNpZzcJrAyld4qaRehYx36GY,1359
168
168
  langchain_agentx/loop/subagent/subagent_termination_classifier.py,sha256=ULArQeAibgy6ETSf4vRR0L6X1rsDM7-ZuLzRWQ_pmeY,3158
169
169
  langchain_agentx/loop/subagent/transcript.py,sha256=-S0VjZcvqlJQGkVGu8VDMTYwTwOePdjDHfjYi3uu7BY,7187
@@ -264,7 +264,7 @@ langchain_agentx/observability/evaluation/checkers/tool_behavior.py,sha256=o1nH8
264
264
  langchain_agentx/observability/events/__init__.py,sha256=mORGJjMvJ6ob5tOqFOyyGhDLjK4gB-Q2HN0l-GPmamk,1624
265
265
  langchain_agentx/observability/events/accumulated_text_scope.py,sha256=M4OvuQTgReF8SFrOmr-M5vyOJpzfvxj_DKD5bVpGb70,3169
266
266
  langchain_agentx/observability/events/agent_defaults.py,sha256=gmX0P__lux5xbCb8dtAlVCb3wZ7avaqFleoW4Q5anw4,1187
267
- langchain_agentx/observability/events/agent_event_projector.py,sha256=Vsyd3XRFuN4ZoblCpOm1rZEUmEo1yu8DX9OyCXgsiPg,64726
267
+ langchain_agentx/observability/events/agent_event_projector.py,sha256=aWh3BsJyTmzcNdRlFXrvnLoCzNoJy9DX7mmFxvNcJYI,65285
268
268
  langchain_agentx/observability/events/api_retry_projection.py,sha256=XGb09sNOi6k1ZGW4YqMLBE8GDxNwNMprk62jV9TS9dQ,2433
269
269
  langchain_agentx/observability/events/compact_event_gate.py,sha256=50RJemwB1lnQn_NFWOFSgU418ZUR8dbd_v0538PT7zM,4751
270
270
  langchain_agentx/observability/events/factory.py,sha256=gqMATIK9tBQzaPWSPhCCSPuCq-WF562ZDTnFUaMm9Qc,1570
@@ -274,7 +274,8 @@ langchain_agentx/observability/events/langchain_agentx_event_adapter.py,sha256=u
274
274
  langchain_agentx/observability/events/mcp_event_sink.py,sha256=4gOS2_JfIGwr3bUWCH47H7uaztLypkfQ7Ews71Jbwn0,1989
275
275
  langchain_agentx/observability/events/model_end_text_backfill.py,sha256=7RBnxWLi1Oe-Bw9WTYqN-B6IdytFlY-Jso1STtQr6rE,5157
276
276
  langchain_agentx/observability/events/oob_event_sink.py,sha256=ijE2AI8gfoMPRPXDwQszNWi_aCKwODywpG884blo08E,5670
277
- langchain_agentx/observability/events/subagent_event_mapper.py,sha256=9M9cKzMz7_OXOod0JKtLb-FtUhAKiAVikKGRF6h6Ttk,6860
277
+ langchain_agentx/observability/events/skill_progress_event_mapper.py,sha256=3-TZcwOT57oSTxRu7GpUGbq_2wI6TimipTbM9dsaZmU,2878
278
+ langchain_agentx/observability/events/subagent_event_mapper.py,sha256=DihmbR3YZsb_xlNmbIbL5LsftEWNlbM5FHLqXcq7R0k,7009
278
279
  langchain_agentx/observability/events/subagent_window_text_guard.py,sha256=myo4SSV2TKZjpyrCoe-g5beNGmZnYZefa8nqW76q0Xc,3101
279
280
  langchain_agentx/observability/events/tool_call_id_resolver.py,sha256=Mun8jNb91tbV7hvIUkFG9g6NJGHVMW0kHS7Zt6N2gUA,4530
280
281
  langchain_agentx/observability/events/tool_outcome_resolver.py,sha256=YqF9Io9-0xdIdz7iYQuJkY-PiUXLC0zR26Eb9n35L9g,4357
@@ -836,8 +837,8 @@ langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXO
836
837
  langchain_agentx/workspace/tool_boundary.py,sha256=UDwX6swpSLsx9HNkYuuRRiV5o7ZZG_Bru2Yn0c5kNX8,5724
837
838
  langchain_agentx/workspace/validators.py,sha256=tQt-6TOcL8Fw7Ig5ebA9S7vGWh1rby920eFW6x8Tk9E,1439
838
839
  langchain_agentx/workspace/view.py,sha256=PGasqTaqhlD03SXXazHuw4RHfV681AIdlsYqL70pEjc,4774
839
- langchain_agentx_python-2.3.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
840
- langchain_agentx_python-2.3.7.dist-info/METADATA,sha256=p1SyevO1IsExSYN-OZOIgFId_BsYNhQG7feoPqOu7W4,23971
841
- langchain_agentx_python-2.3.7.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
842
- langchain_agentx_python-2.3.7.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
843
- langchain_agentx_python-2.3.7.dist-info/RECORD,,
840
+ langchain_agentx_python-2.3.8.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
841
+ langchain_agentx_python-2.3.8.dist-info/METADATA,sha256=LQpK-C85dJ_lAdk9w7weRSeVJKKWJzEnBuDdytblGEY,23971
842
+ langchain_agentx_python-2.3.8.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
843
+ langchain_agentx_python-2.3.8.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
844
+ langchain_agentx_python-2.3.8.dist-info/RECORD,,