langchain-agentx-python 2.2.6__py3-none-any.whl → 2.2.7__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.2.6"
14
+ __version__ = "2.2.7"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
@@ -10,7 +10,7 @@ outer_permission_resolver.py — 段 6 outer 裁决(GAP-3)
10
10
  PermissionOrchestrator._resolve_outer
11
11
 
12
12
  当前裁剪范围:
13
- 不调用 L3 UI;AskUserQuestion gather 仍由 pipeline 特例处理。
13
+ 不调用 L3 UI;AskUserQuestion gather ask 经 RUI 保留后由 pipeline L3 处理。
14
14
  """
15
15
 
16
16
  from __future__ import annotations
@@ -31,8 +31,10 @@ runtime/pipeline.py — 工具执行管道与输出大小管控
31
31
  IdenticalCallMemo;命中则直接返回带 Hint 的 ToolResultEnvelope(不执行 invoke),
32
32
  作为“软提示防重复”策略的执行层硬约束替代。
33
33
 
34
- AskUserQuestion:
35
- `truncate_if_needed` 之后发 `ask_user_question_completed`(`_emit_post_invoke_analytics`)。
34
+ AskUserQuestion(CC L3):
35
+ 无 answers 时 L1 ask → 进 ``_handle_l3_ask``(不再 pending envelope 短路);
36
+ handler 经 ``updated_input`` 注入 answers[+annotations] 后唯一 invoke;
37
+ `truncate_if_needed` 之后发 `ask_user_question_completed`。
36
38
  """
37
39
 
38
40
  from __future__ import annotations
@@ -77,7 +79,9 @@ from .denial_tracking_bridge import (
77
79
  record_l3_response,
78
80
  suppression_observability_events,
79
81
  )
82
+ from .messages import INTERRUPT_MESSAGE_FOR_TOOL_USE
80
83
  from .prompt import (
84
+ DecisionReasonType,
81
85
  HeadlessPromptHandler,
82
86
  LegacyResolverPromptHandler,
83
87
  PermissionUpdate,
@@ -126,41 +130,6 @@ def _as_run_result(
126
130
  _ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion"
127
131
 
128
132
 
129
- def _try_envelope_pending_user_questions_gather(
130
- *,
131
- tool: RuntimeTool,
132
- auth: AuthorizationDecision,
133
- headless: bool,
134
- ) -> ToolResultEnvelope | None:
135
- """
136
- AskUserQuestion:run_l1 / evaluate_permission 以 behavior=ask + metadata.gather_tool 表达「待 UI 收集答案」。
137
- 在 sync/async pipeline 中于默认 ask→blocked 之前短路,返回 ok envelope(payload 含 questions)。
138
- """
139
- md = auth.metadata or {}
140
- if md.get("gather_tool") != tool.name:
141
- return None
142
- if headless:
143
- return blocked_envelope(
144
- tool.name,
145
- "AskUserQuestion requires interactive mode.",
146
- policy_id="ask_user_question_headless",
147
- )
148
- return ToolResultEnvelope(
149
- status="ok",
150
- tool_name=tool.name,
151
- summary=auth.ask_prompt or auth.message or "Answer questions?",
152
- payload={
153
- "pending_user_questions": True,
154
- "questions": md.get("questions"),
155
- },
156
- meta={
157
- "gather_tool": tool.name,
158
- "permission": "pending_user_questions",
159
- "policy_id": auth.policy_id,
160
- },
161
- )
162
-
163
-
164
133
  def _emit_ask_user_question_analytics(
165
134
  *,
166
135
  tool: RuntimeTool,
@@ -173,9 +142,6 @@ def _emit_ask_user_question_analytics(
173
142
  return
174
143
  if envelope.status != "ok":
175
144
  return
176
- meta_out = envelope.meta or {}
177
- if meta_out.get("permission") == "pending_user_questions":
178
- return
179
145
  collector = ctx.trace_collector
180
146
  session_id = ctx.trace_emit_session_id
181
147
  if collector is None or not isinstance(session_id, str) or not session_id.strip():
@@ -763,26 +729,6 @@ class ToolExecutorPipeline:
763
729
  )
764
730
  return _as_run_result(env, parsed_input=parsed_data, ctx=ctx)
765
731
  if auth.behavior == "ask":
766
- gather = _try_envelope_pending_user_questions_gather(
767
- tool=tool, auth=auth, headless=self._headless
768
- )
769
- if gather is not None:
770
- self._attach_runtime_observability(
771
- gather,
772
- ctx=ctx,
773
- events=[
774
- {
775
- "event": "permission_checked",
776
- "behavior": "pending_user_questions",
777
- "policy_id": auth.policy_id,
778
- },
779
- ],
780
- decision_trace=(auth.metadata or {}).get("decision_trace"),
781
- )
782
- final_g = self._output_manager.truncate_if_needed(
783
- gather, tool, ctx.tool_call_id
784
- )
785
- return _as_run_result(final_g, parsed_input=parsed_data, ctx=ctx)
786
732
  logger.warning(
787
733
  "tool permission requires ask tool=%s headless=%s policy_id=%s",
788
734
  tool.name,
@@ -960,26 +906,6 @@ class ToolExecutorPipeline:
960
906
  )
961
907
  return _as_run_result(env, parsed_input=parsed_data, ctx=ctx)
962
908
  if auth.behavior == "ask":
963
- gather = _try_envelope_pending_user_questions_gather(
964
- tool=tool, auth=auth, headless=self._headless
965
- )
966
- if gather is not None:
967
- self._attach_runtime_observability(
968
- gather,
969
- ctx=ctx,
970
- events=[
971
- {
972
- "event": "permission_checked",
973
- "behavior": "pending_user_questions",
974
- "policy_id": auth.policy_id,
975
- },
976
- ],
977
- decision_trace=(auth.metadata or {}).get("decision_trace"),
978
- )
979
- final_g = self._output_manager.truncate_if_needed(
980
- gather, tool, ctx.tool_call_id
981
- )
982
- return _as_run_result(final_g, parsed_input=parsed_data, ctx=ctx)
983
909
  logger.warning(
984
910
  "tool permission requires ask tool=%s headless=%s policy_id=%s",
985
911
  tool.name,
@@ -1125,6 +1051,12 @@ class ToolExecutorPipeline:
1125
1051
  ctx: ToolExecutionContext,
1126
1052
  auth: AuthorizationDecision,
1127
1053
  ) -> PromptRequest:
1054
+ md = auth.metadata or {}
1055
+ is_gather = md.get("gather_tool") == tool.name
1056
+ questions = md.get("questions") if is_gather else None
1057
+ if is_gather and questions is None:
1058
+ raw_q = parsed_data.get("questions")
1059
+ questions = raw_q if isinstance(raw_q, list) else None
1128
1060
  return PromptRequest(
1129
1061
  tool_name=tool.name,
1130
1062
  input_data=parsed_data,
@@ -1135,6 +1067,8 @@ class ToolExecutorPipeline:
1135
1067
  suggestions=self._suggestions_from_auth(auth),
1136
1068
  headless=False,
1137
1069
  session_headless=self._headless,
1070
+ interaction_kind="gather" if is_gather else "permission",
1071
+ questions=questions if isinstance(questions, list) else None,
1138
1072
  )
1139
1073
 
1140
1074
  def _maybe_suppress_l3_ask(
@@ -1319,21 +1253,51 @@ class ToolExecutorPipeline:
1319
1253
  )
1320
1254
 
1321
1255
  if resp.behavior == "deny":
1256
+ reason = resp.decision_reason
1257
+ is_cancel = (
1258
+ reason is not None and reason.type == DecisionReasonType.USER_ABORT
1259
+ )
1260
+ is_gather = (auth.metadata or {}).get("gather_tool") == tool.name
1261
+ if is_cancel:
1262
+ msg = resp.message or resp.reason or INTERRUPT_MESSAGE_FOR_TOOL_USE
1263
+ behavior_evt = "ask_cancelled_by_user"
1264
+ extra_meta = {
1265
+ "l3_outcome": "cancel",
1266
+ "source_status": "interrupted",
1267
+ "error_kind": "aborted",
1268
+ }
1269
+ else:
1270
+ if is_gather:
1271
+ msg = (
1272
+ resp.message
1273
+ or resp.reason
1274
+ or "User declined to answer questions."
1275
+ )
1276
+ else:
1277
+ msg = (
1278
+ resp.message
1279
+ or resp.reason
1280
+ or auth.ask_prompt
1281
+ or "User rejected the operation."
1282
+ )
1283
+ behavior_evt = "ask_rejected_by_resolver"
1284
+ extra_meta = {"l3_outcome": "decline"}
1322
1285
  env = attach_permission_tool_input(
1323
1286
  blocked_envelope(
1324
1287
  tool.name,
1325
- resp.message or resp.reason or auth.ask_prompt or "User rejected the operation.",
1288
+ msg,
1326
1289
  policy_id=auth.policy_id,
1327
1290
  ),
1328
1291
  parsed_data,
1329
1292
  )
1293
+ env.meta = {**(env.meta or {}), **extra_meta}
1330
1294
  attach_denial_tracking_meta(env, tool, ctx, auth)
1331
1295
  self._attach_runtime_observability(
1332
1296
  env,
1333
1297
  ctx=ctx,
1334
1298
  events=[
1335
1299
  self._permission_checked_event(
1336
- "ask_rejected_by_resolver",
1300
+ behavior_evt,
1337
1301
  auth.policy_id,
1338
1302
  parsed_data,
1339
1303
  decision_source=resp.decision_source.value,
@@ -16,6 +16,7 @@ from .race import HitlRaceCoordinator, PromptBranch, PromptClassifier
16
16
  from .types import (
17
17
  DecisionReason,
18
18
  DecisionReasonType,
19
+ InteractionKind,
19
20
  PermissionUpdate,
20
21
  PromptDecisionSource,
21
22
  PromptRequest,
@@ -26,6 +27,7 @@ __all__ = [
26
27
  "PermissionPromptHandler",
27
28
  "DecisionReason",
28
29
  "DecisionReasonType",
30
+ "InteractionKind",
29
31
  "PermissionUpdate",
30
32
  "PromptDecisionSource",
31
33
  "PromptRequest",
@@ -4,12 +4,15 @@ prompt/types.py — L3 HITL 数据契约
4
4
  职责:
5
5
  PromptRequest / PromptResponse 与 PermissionUpdate、PromptDecisionSource。
6
6
  L2 ask 决策打包为 PromptRequest,L3 产出二态 PromptResponse。
7
+ AskUser gather:interaction_kind=gather;updated_input 可含 answers[+annotations]。
7
8
 
8
9
  链路位置:
9
- ToolExecutorPipeline ask 分支 → PermissionPromptHandler.handle(Phase 3 接线)。
10
+ ToolExecutorPipeline ask 分支 → PermissionPromptHandler.handle。
10
11
 
11
12
  当前裁剪:
12
- PermissionUpdate 为 CC addRules/replaceRules 等的最小 Python 镜像;持久化由 Phase 3 接入。
13
+ PermissionUpdate 为 CC addRules/replaceRules 等的最小 Python 镜像。
14
+ A2:cancel=USER_ABORT / decline=USER_REJECT;reject_with_feedback=P1。
15
+ A3:图片 contentBlocks 旁路未建模。
13
16
  """
14
17
 
15
18
  from __future__ import annotations
@@ -28,6 +31,8 @@ from .messages import (
28
31
  )
29
32
  from ..messages import REJECT_MESSAGE, SUBAGENT_REJECT_MESSAGE
30
33
 
34
+ InteractionKind = Literal["gather", "permission"]
35
+
31
36
 
32
37
  class PromptDecisionSource(StrEnum):
33
38
  """L3 决议来源,对齐 CC decisionReason.type。"""
@@ -108,11 +113,19 @@ class PromptRequest:
108
113
  display_label: str | None = None
109
114
  """UI 短摘要;来自 tool.summary_for_ui_call()。None 时 L3 fallback tool_name。"""
110
115
  suggestions: tuple[PermissionUpdate, ...] = field(default_factory=tuple)
116
+ interaction_kind: InteractionKind = "permission"
117
+ """permission=Allow/Deny;gather=AskUser Q→A(对 CC AskUserQuestionPermissionRequest)。"""
118
+ questions: list[Any] | None = None
119
+ """gather 时的问题列表(常来自 auth.metadata.questions);permission 为 None。"""
111
120
 
112
121
 
113
122
  @dataclass(frozen=True)
114
123
  class PromptResponse:
115
- """L3 → Pipeline 出参;behavior 仅 allow/deny。"""
124
+ """L3 → Pipeline 出参;behavior 仅 allow/deny。
125
+
126
+ allow 时 ``updated_input`` 可含 answers 与可选 annotations(A1)。
127
+ deny 时用 ``decision_reason.type`` 区分 cancel(USER_ABORT)与 decline(USER_REJECT)(A2 MVP)。
128
+ """
116
129
 
117
130
  behavior: Literal["allow", "deny"]
118
131
  decision_source: PromptDecisionSource
@@ -2,13 +2,16 @@
2
2
  tools/ask_user_question/tool.py — AskUserQuestionTool
3
3
 
4
4
  职责:
5
- CC AskUserQuestion 对齐:normalize → validate → permissions(含待答两跳)→ invoke → present。
5
+ CC AskUserQuestion 对齐:normalize → validate → L1 ask(无 answers)→
6
+ L3 注入 answers[+annotations] → invoke → present。
6
7
 
7
8
  链路位置:
8
- ToolRuntimeLoader.register_default_tools;pipeline 对 gather_tool 短路返回 pending envelope。
9
+ ToolRuntimeLoader.register_default_tools;pipeline 对 gather ask 走
10
+ ``_handle_l3_ask``(不再 pending envelope 短路)。
9
11
 
10
12
  当前裁剪范围:
11
- v3:preview HTML 校验(ctx.question_preview_format)、annotations、present 摘要;渠道禁用集合对齐 CC。
13
+ v3:preview HTML 校验、annotations、present 摘要;渠道禁用集合对齐 CC。
14
+ A3 图片 contentBlocks 旁路未做。
12
15
  """
13
16
 
14
17
  from __future__ import annotations
@@ -40,7 +43,7 @@ from .prompt import (
40
43
  )
41
44
  from .validators import QuestionValidator
42
45
 
43
- # AuthorizationDecision.metadata:pipeline 识别待答短路(值须等于 RuntimeTool.name)
46
+ # AuthorizationDecision.metadata:L3 PromptRequest.interaction_kind=gather 识别键
44
47
  GATHER_TOOL_META_KEY = "gather_tool"
45
48
 
46
49
  # CC isEnabled:Telegram/Discord 等无 TUI 渠道
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 2.2.6
3
+ Version: 2.2.7
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=w5E568-acwfUArEGRc1Fs10Ni10VOEs-jLn4UGZVjeE,1614
1
+ langchain_agentx/__init__.py,sha256=u163iBLScsjUuLfV2YYL3tProAOl3aRQEK1lyYmWoJA,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
@@ -411,7 +411,7 @@ langchain_agentx/tool_runtime/loop_loader.py,sha256=C_4T9XxlDmKaTzGv4MO6mJuR-rd6
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
414
- langchain_agentx/tool_runtime/outer_permission_resolver.py,sha256=t6vq1f6K0EYZFAlEBV-Ic2hoGB3miVZWqvrZOQv-Z0A,4169
414
+ langchain_agentx/tool_runtime/outer_permission_resolver.py,sha256=8uKS148DXxt5SfDIHmbRwee4FchKdlquUZbfWeyNRXw,4184
415
415
  langchain_agentx/tool_runtime/override.py,sha256=D8TRftoeWzqlTuWCGUxNkFY7XzWx_d5oxI_ltNibqPA,10258
416
416
  langchain_agentx/tool_runtime/path_safety.py,sha256=dUrl2SObKmRDwdm9k8veO_Eh0iXw0LPLAMZJGxeKnTE,8548
417
417
  langchain_agentx/tool_runtime/permission_context.py,sha256=ReVV2kjVWAPTsPaYXxRB-dICqualEvi2zzwF8NX_Wkk,6229
@@ -422,7 +422,7 @@ langchain_agentx/tool_runtime/permission_rules.py,sha256=ev6-Hm3N8YtbJO3SLGpoGMU
422
422
  langchain_agentx/tool_runtime/permission_settings_loader.py,sha256=Xu6dso0ghh4pb7Puf8nj20nXxjGeQvL4kIGycavwG_o,5624
423
423
  langchain_agentx/tool_runtime/permission_settings_sync.py,sha256=g6TvjWwa7D0kw5rDznPsoMv7xylESPOyWA2vZW4HDm0,4590
424
424
  langchain_agentx/tool_runtime/permission_snapshot.py,sha256=xFoi9fIcZjSw_zrIoyglneM-vJsDOLCEjiVoazr5Ack,1947
425
- langchain_agentx/tool_runtime/pipeline.py,sha256=b4ZlEMH5i3_rqWjPx3g7BD6Yv2hvk-R6qgKFgo-b3eU,54284
425
+ langchain_agentx/tool_runtime/pipeline.py,sha256=cNC8FzeBtfNo8I02wXsaBbbpwxbVXu67eRnr_OfEU3Y,53104
426
426
  langchain_agentx/tool_runtime/policy.py,sha256=PLk_-5wu69_Gjqig0pj71brcu6VfLvGSIHsAUHOiYIQ,30068
427
427
  langchain_agentx/tool_runtime/policy_decorator.py,sha256=XWbgh_TRlPJ-J-RFo1FKjIN_n_Z9rtLTfSwBQoyLTTg,2264
428
428
  langchain_agentx/tool_runtime/process_loader.py,sha256=1YMn6ntnpdbIHJbO7wF1xuz7gNKYxK0UJAOxq96dZX4,6166
@@ -475,7 +475,7 @@ langchain_agentx/tool_runtime/execution/appliers/stubs.py,sha256=B4FaJX63uXpOcKR
475
475
  langchain_agentx/tool_runtime/progress/__init__.py,sha256=iMp-7s8G9_fELXJLPY1sWqpHYqpvtmUyNU3KinJgc5w,727
476
476
  langchain_agentx/tool_runtime/progress/event.py,sha256=tM-lvqhs6435pjVW4BjP9vb2Ryuuvwo6CmtybVD8juk,2711
477
477
  langchain_agentx/tool_runtime/progress/sampler.py,sha256=FqJWaYAIBj4xC40qHVkG1MrHHwirZ5rd-I5vnmgmGh8,5362
478
- langchain_agentx/tool_runtime/prompt/__init__.py,sha256=8tQkXdQTjJqgkbJTCCpN1Z_k_wrLNiUoWwluYU8Te4w,1123
478
+ langchain_agentx/tool_runtime/prompt/__init__.py,sha256=bLtNsq8iDMvF9tkwLpBKTJ9Y6iWAfdvsqhOz_u5UvvM,1167
479
479
  langchain_agentx/tool_runtime/prompt/_abort.py,sha256=z9LFN6e067ptsfR571liagkHiQnauoksfMbpoRUIXfo,1568
480
480
  langchain_agentx/tool_runtime/prompt/cli_interactive.py,sha256=3_Uyzu5FeOOCNOC7SvrZr7qalGaCxMbqpiGTyCeZscw,5898
481
481
  langchain_agentx/tool_runtime/prompt/handler.py,sha256=t7TQkBiyPESf6uTBDikmu2iZVPmUmsqH7dO-NZypzdQ,570
@@ -484,7 +484,7 @@ langchain_agentx/tool_runtime/prompt/legacy_resolver_adapter.py,sha256=wFMSSaJrO
484
484
  langchain_agentx/tool_runtime/prompt/messages.py,sha256=IYkQPRSHTW87pZ6u31phWX45ooAG0cqn3OnZ4UyJPOU,1569
485
485
  langchain_agentx/tool_runtime/prompt/race.py,sha256=kNNHxP1CLI3ysVx8T0i8UM_ya190837bSngJYhEsTP4,11326
486
486
  langchain_agentx/tool_runtime/prompt/session_mode.py,sha256=kt_8BxPzoBQmeGbZBvl2ih6n_--4NDjTgK0D2kMryV4,2714
487
- langchain_agentx/tool_runtime/prompt/types.py,sha256=vfokexTdun0pjTlteA4CSb1fX94p0GDdkwCsXeTenlM,4618
487
+ langchain_agentx/tool_runtime/prompt/types.py,sha256=mvPk6HSxKlngihpRnNut1VDbmKsAejHxCKvihzXIREA,5334
488
488
  langchain_agentx/tool_runtime/resolvers/__init__.py,sha256=3nr1ouLHAF1O17Zfg1yKrZ5qAezDwRdVSWKN0lu-Iik,818
489
489
  langchain_agentx/tool_runtime/resolvers/agent_session.py,sha256=ZcQga1itCTX2TgNoIaCfVzV20w7nQjSkgDYRU4AWHto,3855
490
490
  langchain_agentx/tool_runtime/resolvers/background.py,sha256=gSdkP2GiPVr7eV00LRKoeQVgU4eUjbpKgmbNIHAeyUI,869
@@ -524,7 +524,7 @@ langchain_agentx/tools/ask_user_question/constants.py,sha256=vK5QraZBBVj7woW1TF0
524
524
  langchain_agentx/tools/ask_user_question/html_preview.py,sha256=OwNpsH9qm8iJ-TTbzkMFvG49T4-oNJXJXH4OZ8r55wc,3913
525
525
  langchain_agentx/tools/ask_user_question/models.py,sha256=uLc2UK_v8iMFEL1Zk0mUOBYdcg2HfbaLdH68o8kr7GE,3376
526
526
  langchain_agentx/tools/ask_user_question/prompt.py,sha256=0RdVuUeNzQBzPeVrLcbiBqh1uizFgUANvaKOZpVy_qg,2803
527
- langchain_agentx/tools/ask_user_question/tool.py,sha256=KGIjeLD9J_3RR-C3fGpOsuqjULmuobohG0F2ie8i8UI,13405
527
+ langchain_agentx/tools/ask_user_question/tool.py,sha256=DgU7OBAqrJBb77ewQ76okoUFJxTThAiN6PRMPa8_FvU,13467
528
528
  langchain_agentx/tools/ask_user_question/validators.py,sha256=gUYuuKJNrExWGvhFlmhqqSU8ax7s4EhXMvTEjapHeiY,5974
529
529
  langchain_agentx/tools/bash/__init__.py,sha256=molPHFDylE2wWG_aQx7fb0ciAx3wWpdXzIixTZV5ne4,214
530
530
  langchain_agentx/tools/bash/ast_security.py,sha256=6DFd_TwT986dbGkKT3UnDIZioBdmi8mbJcYSI-XEtdM,22444
@@ -761,8 +761,8 @@ langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXO
761
761
  langchain_agentx/workspace/tool_boundary.py,sha256=UDwX6swpSLsx9HNkYuuRRiV5o7ZZG_Bru2Yn0c5kNX8,5724
762
762
  langchain_agentx/workspace/validators.py,sha256=tQt-6TOcL8Fw7Ig5ebA9S7vGWh1rby920eFW6x8Tk9E,1439
763
763
  langchain_agentx/workspace/view.py,sha256=PGasqTaqhlD03SXXazHuw4RHfV681AIdlsYqL70pEjc,4774
764
- langchain_agentx_python-2.2.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
765
- langchain_agentx_python-2.2.6.dist-info/METADATA,sha256=aFUHiJcRrYfmX1zz5EcopI4JNyrKygDP2OeT6HlaEPg,24250
766
- langchain_agentx_python-2.2.6.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
767
- langchain_agentx_python-2.2.6.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
768
- langchain_agentx_python-2.2.6.dist-info/RECORD,,
764
+ langchain_agentx_python-2.2.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
765
+ langchain_agentx_python-2.2.7.dist-info/METADATA,sha256=hqm9pkU7FcAv244Gd1gPQyI1-A81Xf3uWQmi9YZq-Wg,24250
766
+ langchain_agentx_python-2.2.7.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
767
+ langchain_agentx_python-2.2.7.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
768
+ langchain_agentx_python-2.2.7.dist-info/RECORD,,