langchain_agentx_stream_ui 0.3.7 → 0.4.2

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.
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ComponentType, ReactNode } from 'react';
3
- import { a as SessionNodeKind, S as SessionNode, i as ToolCounts } from './nodes-BcyPw6Fr.js';
4
- import { T as ToolDisplayRegistry, P as PermissionUiMode } from './sessionViewOptions-DQRzPuN_.js';
5
- import { a as ToolBodyMode } from './types-BEXSHQG7.js';
3
+ import { a as SessionNodeKind, S as SessionNode, i as ToolCounts } from './nodes-7_0rCAc4.js';
4
+ import { T as ToolDisplayRegistry, P as PermissionUiMode } from './sessionViewOptions-EIBugOkf.js';
5
+ import { a as ToolBodyMode } from './types-DAkw2VOv.js';
6
6
  import { StoreApi } from 'zustand/vanilla';
7
7
 
8
8
  /** Common fields on every LangchainAgentEvent (SDK mirror). */
@@ -447,6 +447,249 @@ interface RoundSummary {
447
447
  }
448
448
  declare function createEmptyTree(): SessionTree;
449
449
 
450
+ /**
451
+ * workflowDisplay.ts — SDK WorkflowDisplayPayload 契约(TS)
452
+ *
453
+ * 职责:
454
+ * 对齐 langchain_agentx WorkflowDisplayPayload;结构事件 data.display 类型。
455
+ *
456
+ * 链路位置:
457
+ * workflowContainerProjector → WorkflowChrome(P2+)。
458
+ *
459
+ * 当前裁剪范围:
460
+ * 只读消费;不计算 display(由 SDK enricher 注入)。
461
+ */
462
+ type WorkflowDisplayScope = 'workflow' | 'stage' | 'item' | 'branch' | 'aggregate' | 'subworkflow';
463
+ type WorkflowDisplayStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'cancelled' | 'blocked' | 'retrying';
464
+ /** 对齐 SDK display_resolver.WorkflowDisplayPayload */
465
+ interface WorkflowDisplayPayload {
466
+ version?: number;
467
+ scope?: WorkflowDisplayScope;
468
+ title?: string;
469
+ description?: string;
470
+ workflow_title?: string;
471
+ workflow_description?: string;
472
+ parent_title?: string;
473
+ breadcrumb?: string[];
474
+ progress_current?: number;
475
+ progress_total?: number;
476
+ progress_label?: string;
477
+ progress_indeterminate?: boolean;
478
+ status?: WorkflowDisplayStatus;
479
+ status_reason?: string;
480
+ icon?: string;
481
+ item_index?: number;
482
+ item_total?: number;
483
+ metrics_completed?: number;
484
+ metrics_running?: number;
485
+ metrics_failed?: number;
486
+ metrics_total?: number;
487
+ decision_label?: string;
488
+ pattern?: string;
489
+ debug_key?: string;
490
+ }
491
+
492
+ /**
493
+ * workflowContainer.ts — Workflow 容器树投影类型
494
+ *
495
+ * 职责:
496
+ * 容器节点、正文块、快照;对齐 SDK workflow_container_projector。
497
+ *
498
+ * 链路位置:
499
+ * workflowContainerProjector → workflowReducer(P1+)→ WorkflowChrome(P2+)。
500
+ *
501
+ * 当前裁剪范围:
502
+ * 不含 React 视图 props;仅投影层 state。
503
+ */
504
+
505
+ type WorkflowContainerScope = 'workflow' | 'stage' | 'item' | 'branch' | 'aggregate' | 'subworkflow';
506
+ type WorkflowContainerStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'cancelled' | 'blocked' | 'retrying';
507
+ type ContentBlockKind = 'reasoning' | 'text' | 'tool';
508
+ interface WorkflowContentBlock {
509
+ kind: ContentBlockKind;
510
+ preview: string;
511
+ tool_name: string | null;
512
+ }
513
+ interface WorkflowContainerNode {
514
+ container_id: string;
515
+ scope: WorkflowContainerScope;
516
+ workflow_path: string;
517
+ workflow_depth: number;
518
+ scope_key: string;
519
+ title: string;
520
+ subtitle: string;
521
+ status: WorkflowContainerStatus;
522
+ pattern: string;
523
+ parent_container_id: string | null;
524
+ display: WorkflowDisplayPayload | null;
525
+ content_blocks: WorkflowContentBlock[];
526
+ is_open: boolean;
527
+ }
528
+ /** reducer 运行时节点:投影字段 + loop 绑定(P1) */
529
+ interface WorkflowContainerRuntimeNode extends WorkflowContainerNode {
530
+ loopSessionId: string | null;
531
+ }
532
+ /** WorkflowSession 容器树 state(P1+) */
533
+ interface WorkflowContainerTreeState {
534
+ rootContainerIds: string[];
535
+ activeContainerIds: string[];
536
+ containersById: Record<string, WorkflowContainerRuntimeNode>;
537
+ }
538
+
539
+ /**
540
+ * workflowSession.ts — Workflow 会话顶层状态
541
+ *
542
+ * 职责:
543
+ * 定义 /workflow 页专用 WorkflowSessionState(与 /chat SessionTree 隔离)。
544
+ *
545
+ * 链路位置:
546
+ * workflowReducer → workflowSessionStore → WorkflowSession / WorkflowChrome。
547
+ *
548
+ * 当前裁剪范围:
549
+ * 不含合并 TaskListFooter(P3);parallel 结构仅基础字段。
550
+ */
551
+
552
+ /** SDK v1.9.0 根 workflow 终态语义 SSOT */
553
+ type WorkflowTerminalKind = 'healthy' | 'forced_closeout' | 'failed';
554
+ /** 宿主业务权威快照 — 唯一控制面输入(D33) */
555
+ type WorkflowAuthorityStatus = 'pending' | 'running' | 'done' | 'error' | 'canceled' | 'partial_success';
556
+ interface WorkflowAuthoritySnapshot {
557
+ taskId: string;
558
+ status: WorkflowAuthorityStatus;
559
+ updatedAt: number;
560
+ metadata?: {
561
+ failed_items?: string[];
562
+ cleanup_failures?: Array<{
563
+ action: string;
564
+ error: string;
565
+ }>;
566
+ execution_authority?: true;
567
+ orphan_items_reaped?: number;
568
+ partial_success_kind?: string;
569
+ projection_status?: 'complete' | 'degraded' | 'running';
570
+ projection_dropped_count?: number;
571
+ };
572
+ }
573
+ /** 纯投影 / 传输展示态 — 不可驱动宿主 phase(D33) */
574
+ type WorkflowDisplayProjectionStatus = 'connecting' | 'running' | 'done' | 'error' | 'done_with_warning';
575
+ interface WorkflowDisplayProjection {
576
+ /** SSE 字节流是否已结束(transport) */
577
+ streamEnded: boolean;
578
+ /** 投影推断的编排展示态(workflow-end / 容器树;缺帧时不 infer done) */
579
+ projectionStatus: WorkflowDisplayProjectionStatus;
580
+ terminalKind: WorkflowTerminalKind | null;
581
+ openChildIdentities: string[];
582
+ /** streamEnded 且 authority 仍 running 超过阈值时的展示降级 */
583
+ awaitingAuthority?: boolean;
584
+ /** streamEnded + running 超过 120s 仍无 authority terminal */
585
+ authoritySyncFailed?: boolean;
586
+ /** authoritySource.subscribe 抛错时的展示降级 */
587
+ authoritySubscribeFailed?: boolean;
588
+ }
589
+ /** P2:stage 完成摘要缓存(loop 树淘汰后仍显示 teaser) */
590
+ interface CachedStageDoneSummary {
591
+ label: string;
592
+ teaser: string;
593
+ extraLines: number;
594
+ fullMarkdown?: string;
595
+ }
596
+ type WorkflowRunStatus = 'running' | 'done' | 'error';
597
+ interface WorkflowStageProgress {
598
+ stageKey: string;
599
+ stageIndex: number;
600
+ stageTotal?: number;
601
+ status: 'pending' | 'running' | 'done' | 'failed';
602
+ error?: string;
603
+ }
604
+ interface ParallelItemProgress {
605
+ itemKey: string;
606
+ itemIndex: number;
607
+ itemTotal?: number;
608
+ status: 'pending' | 'running' | 'done' | 'failed';
609
+ loopSessionId: string | null;
610
+ error?: string;
611
+ }
612
+ interface WorkflowProgressState {
613
+ workflowId: string | null;
614
+ workflowPath: string | null;
615
+ status: WorkflowRunStatus;
616
+ stages: WorkflowStageProgress[];
617
+ parallelItems: Record<string, ParallelItemProgress>;
618
+ }
619
+ type WorkflowScopeKind = 'stage' | 'parallel-item' | 'subworkflow';
620
+ interface WorkflowScopeFrame {
621
+ kind: WorkflowScopeKind;
622
+ key: string;
623
+ loopSessionId: string | null;
624
+ }
625
+ interface WorkflowSessionState {
626
+ /** 宿主注入;Reducer 禁止写入 */
627
+ authority: WorkflowAuthoritySnapshot | null;
628
+ /** 事件投影 + 传输展示;不可驱动 phase */
629
+ display: WorkflowDisplayProjection;
630
+ meta: {
631
+ workflowRunId: string | null;
632
+ startedAt: number | null;
633
+ lastEventId: string | null;
634
+ };
635
+ /** SDK 容器树投影 + loopSessionId 绑定(P1 主模型) */
636
+ containerTree: WorkflowContainerTreeState;
637
+ /** 过渡期 dual-write;P2+ UI 逐步改读 containerTree */
638
+ workflowProgress: WorkflowProgressState;
639
+ loopTreesBySessionId: Record<string, SessionTree>;
640
+ /** P2:container_id → done 摘要(loop 淘汰后) */
641
+ stageDoneSummariesByContainerId: Record<string, CachedStageDoneSummary>;
642
+ /** P2:completed hydrated loop LRU 热缓存(最近使用在数组尾部) */
643
+ hotCompletedLoopSessionIds: string[];
644
+ activeLoopSessionId: string | null;
645
+ /** D36 P4:snapshot hydrate 后的 tail 游标 */
646
+ projectionCursor: string | null;
647
+ snapshotVersion: number | null;
648
+ reconnectSuppressedReason: string | null;
649
+ /** D36 T6:snapshot 404/409 时展示降级,禁止 history fallback */
650
+ snapshotHydrateFailed: boolean;
651
+ /** @deprecated P1 起由 containerTree.activeContainerIds 替代 */
652
+ openScopeStack: WorkflowScopeFrame[];
653
+ internalErrors: ReducerError[];
654
+ }
655
+ declare function createEmptyWorkflowSessionState(): WorkflowSessionState;
656
+
657
+ /**
658
+ * askSnapshot.ts — AskDisplaySnapshot DTO(D39 P2)
659
+ *
660
+ * 职责:remount hydrate SSOT;与 AgentEvent 协议独立。
661
+ * 链路:GET /projection/snapshot → hydrateAskFromSnapshot。
662
+ */
663
+
664
+ type AskSnapshotProjectionStatus = 'complete' | 'degraded' | 'running';
665
+ /** snapshot 内 sessionTree — 不含 internalErrors / debugEvents */
666
+ type SessionTreeSnapshot = Omit<SessionTree, 'internalErrors' | 'debugEvents'>;
667
+ interface AskCoalescedBlock {
668
+ nodeId: string;
669
+ kind: 'reasoning' | 'text' | 'tool';
670
+ tailPreview: string;
671
+ droppedDeltaCount: number;
672
+ }
673
+ interface AskDisplaySnapshotMetadata {
674
+ projection_status: AskSnapshotProjectionStatus;
675
+ /** 已 fold 进 sessionTree 的事件条数;hydrate 时写入 store.eventCount */
676
+ reducerEventCount: number;
677
+ s0_event_count?: number;
678
+ dropped_s2_count?: number;
679
+ }
680
+ /** remount SSOT — 独立 DTO,非 AgentEvent[] */
681
+ interface AskDisplaySnapshot {
682
+ runId: string;
683
+ sessionId: string;
684
+ /** evt_{n:06d};tail 只发严格 > cursor */
685
+ cursor: string;
686
+ snapshotVersion: number;
687
+ capturedAt: number;
688
+ sessionTree: SessionTreeSnapshot;
689
+ coalescedBlocks?: AskCoalescedBlock[];
690
+ metadata: AskDisplaySnapshotMetadata;
691
+ }
692
+
450
693
  interface MultiSessionSourceConfig {
451
694
  sessionId: string;
452
695
  source: Source;
@@ -477,6 +720,11 @@ interface MultiAgentSessionProps {
477
720
  }
478
721
  declare function MultiAgentSession({ sessions, activeSessionId: controlledActiveId, defaultActiveSessionId, onActiveSessionChange, maxSessions, tierOverrides, debug, registry, onError, virtualized, virtualizeThreshold, interactionBus, toolDisplayRegistry, defaultBodyMode, groupParallelTools, permissionUiMode, markdownRenderer, children, }: MultiAgentSessionProps): react_jsx_runtime.JSX.Element;
479
722
 
723
+ /**
724
+ * SessionStore — live Ask 展示态 SSOT(A04 §08 P-ASK-CLIENT-REDUCER)。
725
+ * SSE 事件经 applyEvent → reducer;hydrateFromSnapshot 仅 remount /bootstrap。
726
+ */
727
+
480
728
  interface SessionStoreOptions {
481
729
  tierOverrides?: TierOverrides;
482
730
  debug?: boolean;
@@ -486,12 +734,27 @@ interface SessionStoreOptions {
486
734
  initialSeenEventIds?: Iterable<string>;
487
735
  /** D34 P2 LeakGate synthesize;默认 off */
488
736
  subagentLeakGate?: boolean;
737
+ /** D38 P4:宿主注入 authoritySource 时 true,Spinner phase 读 authority */
738
+ authorityBindingActive?: boolean;
489
739
  }
490
740
  interface SessionStoreState {
491
741
  tree: SessionTree;
492
742
  eventCount: number;
743
+ /** D39 P2:hydrate 后 tail dedupe SSOT */
744
+ projectionCursor: string | null;
745
+ snapshotVersion: number | null;
746
+ snapshotHydrateFailed: boolean;
747
+ reconnectSuppressedReason: string | null;
748
+ /** D38 P4:REST 执行权威;仅 authorityBindingActive 时驱动 Spinner phase */
749
+ authority: WorkflowAuthoritySnapshot | null;
750
+ authoritySubscribeFailed: boolean;
751
+ authorityBindingActive: boolean;
493
752
  applyEvent: (event: LangchainAgentEvent, ctx?: SourceEventContext) => void;
494
753
  applyEvents: (events: LangchainAgentEvent[]) => void;
754
+ applyAuthoritySnapshot: (snapshot: WorkflowAuthoritySnapshot) => void;
755
+ setAuthoritySubscribeFailed: (failed: boolean) => void;
756
+ hydrateFromSnapshot: (snapshot: AskDisplaySnapshot) => void;
757
+ markSnapshotHydrateFailed: () => void;
495
758
  reset: () => void;
496
759
  markAsError: (error?: Error) => void;
497
760
  }
@@ -541,4 +804,4 @@ declare function useActiveSession(): ActiveSessionView;
541
804
 
542
805
  declare function useSessionIds(): string[];
543
806
 
544
- export { createSessionStore as A, getNoopInteractionBus as B, type CommonFields as C, DEFAULT_EVENT_TIERS as D, type EventTier as E, useActiveSession as F, useSessionIds as G, type InteractionBus as I, type LangchainAgentEvent as L, type MarkdownRenderer as M, NodeRegistry as N, type PermissionResolvePayload as P, type ReducerError as R, type SessionSlice as S, type Task as T, type EventType as a, type InteractionBusHandlers as b, type MarkdownRendererProps as c, MultiAgentSession as d, type MultiAgentSessionProps as e, type MultiSessionSourceConfig as f, type MultiSessionStore as g, type MultiSessionStoreOptions as h, type MultiSessionStoreState as i, type NodeWidget as j, type NodeWidgetProps as k, type SessionStatus as l, type SessionStore as m, type SessionStoreOptions as n, type SessionStoreState as o, type SessionTree as p, type Source as q, type SourceEventContext as r, type SourceHandler as s, type TaskPhase as t, type TaskStatus as u, type TierOverrides as v, createActiveSessionBridge as w, createEmptyTree as x, createInteractionBus as y, createMultiSessionStore as z };
807
+ export { createMultiSessionStore as $, type AskCoalescedBlock as A, type WorkflowAuthorityStatus as B, type CommonFields as C, DEFAULT_EVENT_TIERS as D, type EventTier as E, type WorkflowContainerRuntimeNode as F, type WorkflowContainerTreeState as G, type WorkflowDisplayProjection as H, type InteractionBus as I, type WorkflowDisplayProjectionStatus as J, type WorkflowProgressState as K, type LangchainAgentEvent as L, type MarkdownRenderer as M, NodeRegistry as N, type WorkflowScopeFrame as O, type PermissionResolvePayload as P, type WorkflowSessionState as Q, type ReducerError as R, type SessionSlice as S, type Task as T, type WorkflowStageProgress as U, type WorkflowTerminalKind as V, type WorkflowAuthoritySnapshot as W, createActiveSessionBridge as X, createEmptyTree as Y, createEmptyWorkflowSessionState as Z, createInteractionBus as _, type AskDisplaySnapshot as a, createSessionStore as a0, getNoopInteractionBus as a1, useActiveSession as a2, useSessionIds as a3, type AskDisplaySnapshotMetadata as b, type AskSnapshotProjectionStatus as c, type EventType as d, type InteractionBusHandlers as e, type MarkdownRendererProps as f, MultiAgentSession as g, type MultiAgentSessionProps as h, type MultiSessionSourceConfig as i, type MultiSessionStore as j, type MultiSessionStoreOptions as k, type MultiSessionStoreState as l, type NodeWidget as m, type NodeWidgetProps as n, type SessionStatus as o, type SessionStore as p, type SessionStoreOptions as q, type SessionStoreState as r, type SessionTree as s, type SessionTreeSnapshot as t, type Source as u, type SourceEventContext as v, type SourceHandler as w, type TaskPhase as x, type TaskStatus as y, type TierOverrides as z };
@@ -1,7 +1,7 @@
1
- export { d as MultiAgentSession, e as MultiAgentSessionProps, f as MultiSessionSourceConfig, g as MultiSessionStore, h as MultiSessionStoreOptions, i as MultiSessionStoreState, S as SessionSlice, w as createActiveSessionBridge, z as createMultiSessionStore, F as useActiveSession, G as useSessionIds } from './multi-session-CsPvSE9d.js';
1
+ export { g as MultiAgentSession, h as MultiAgentSessionProps, i as MultiSessionSourceConfig, j as MultiSessionStore, k as MultiSessionStoreOptions, l as MultiSessionStoreState, S as SessionSlice, X as createActiveSessionBridge, $ as createMultiSessionStore, a2 as useActiveSession, a3 as useSessionIds } from './multi-session--0z_-ut1.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
- import './nodes-BcyPw6Fr.js';
5
- import './sessionViewOptions-DQRzPuN_.js';
6
- import './types-BEXSHQG7.js';
4
+ import './nodes-7_0rCAc4.js';
5
+ import './sessionViewOptions-EIBugOkf.js';
6
+ import './types-DAkw2VOv.js';
7
7
  import 'zustand/vanilla';
@@ -2,13 +2,13 @@ import {
2
2
  MultiAgentSession,
3
3
  createActiveSessionBridge,
4
4
  createMultiSessionStore
5
- } from "./chunk-7QYE5PN5.js";
5
+ } from "./chunk-7X7IF2A4.js";
6
6
  import "./chunk-MRGHYRSV.js";
7
7
  import "./chunk-DP7V33X7.js";
8
8
  import {
9
9
  useActiveSession,
10
10
  useSessionIds
11
- } from "./chunk-24FLS4TF.js";
11
+ } from "./chunk-AY7QLXFB.js";
12
12
  import "./chunk-QL3DIGFI.js";
13
13
  import "./chunk-4RIOBLGB.js";
14
14
  export {
@@ -113,6 +113,8 @@ interface ToolCallNode {
113
113
  subagentTranscript?: SubagentTranscriptEntry[];
114
114
  /** 子 agent 实例生命周期(agent_id → marker) */
115
115
  subagentSessions?: Record<string, SubagentSessionMarker>;
116
+ /** P2:subagent-start 缺父 tool-call 时由 reducer 合成(syntheticAgentToolOnSubagentStart) */
117
+ syntheticParent?: boolean;
116
118
  }
117
119
  interface SubAgentNode {
118
120
  kind: 'subagent';
@@ -1,4 +1,4 @@
1
- import { T as ToolBodyComponent, a as ToolBodyMode } from './types-BEXSHQG7.js';
1
+ import { T as ToolBodyComponent, a as ToolBodyMode } from './types-DAkw2VOv.js';
2
2
 
3
3
  declare class ToolDisplayRegistry {
4
4
  private readonly map;
@@ -1,8 +1,8 @@
1
- export { B as BodyBlock, a as BodyBlockList, D as DiffView, M as MAX_PREVIEW_LINES, b as MarkdownBlock, T as TruncatedContent, c as buildBashBodyBlocks, d as displayPath, f as formatDiffFromStrings, e as formatPatternTitle, g as formatSearchResultBody, h as formatTimeoutFooter, p as parseDiffText, t as truncateCommand, i as truncateLines } from './MarkdownBlock-CcXZ5nTm.js';
2
- export { a as ToolBodyMode } from './types-BEXSHQG7.js';
1
+ export { B as BodyBlock, a as BodyBlockList, D as DiffView, M as MAX_PREVIEW_LINES, b as MarkdownBlock, T as TruncatedContent, c as buildBashBodyBlocks, d as displayPath, f as formatDiffFromStrings, e as formatPatternTitle, g as formatSearchResultBody, h as formatTimeoutFooter, p as parseDiffText, t as truncateCommand, i as truncateLines } from './MarkdownBlock-DeICJUtu.js';
2
+ export { a as ToolBodyMode } from './types-DAkw2VOv.js';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
5
- import './nodes-BcyPw6Fr.js';
5
+ import './nodes-7_0rCAc4.js';
6
6
 
7
7
  /**
8
8
  * textHelpers.ts — 标题预览截断
package/dist/tools.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { P as PermissionUiMode } from './sessionViewOptions-DQRzPuN_.js';
2
- export { T as ToolDisplayRegistry, g as createDefaultToolRegistry } from './sessionViewOptions-DQRzPuN_.js';
3
- export { A as AgentToolBody, a as AskUserQuestionToolBody, B as BashToolBody, D as DefaultToolBody, E as EditToolBody, G as GlobToolBody, b as GrepToolBody, R as ReadToolBody, S as SkillToolBody, W as WebFetchToolBody, c as WebSearchToolBody, d as WriteToolBody, f as formatToolTitle, r as resolveToolBody } from './AskUserQuestionToolBody-CUXqUkar.js';
1
+ import { P as PermissionUiMode } from './sessionViewOptions-EIBugOkf.js';
2
+ export { T as ToolDisplayRegistry, g as createDefaultToolRegistry } from './sessionViewOptions-EIBugOkf.js';
3
+ export { A as AgentToolBody, a as AskUserQuestionToolBody, B as BashToolBody, D as DefaultToolBody, E as EditToolBody, G as GlobToolBody, b as GrepToolBody, R as ReadToolBody, S as SkillToolBody, W as WebFetchToolBody, c as WebSearchToolBody, d as WriteToolBody, f as formatToolTitle, r as resolveToolBody } from './AskUserQuestionToolBody-J8MqSUEs.js';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ReactNode } from 'react';
6
- import { h as ToolCallNode, P as PermissionNode } from './nodes-BcyPw6Fr.js';
7
- export { T as ToolBodyComponent, a as ToolBodyMode, b as ToolDisplayProps } from './types-BEXSHQG7.js';
6
+ import { h as ToolCallNode, P as PermissionNode } from './nodes-7_0rCAc4.js';
7
+ export { T as ToolBodyComponent, a as ToolBodyMode, b as ToolDisplayProps } from './types-DAkw2VOv.js';
8
8
 
9
9
  interface ToolCallShellProps {
10
10
  status: ToolCallNode['status'];
@@ -1,5 +1,5 @@
1
1
  import { ComponentType } from 'react';
2
- import { h as ToolCallNode, e as SubagentProgressEntry, g as SubagentTranscriptEntry, f as SubagentSessionMarker } from './nodes-BcyPw6Fr.js';
2
+ import { h as ToolCallNode, e as SubagentProgressEntry, g as SubagentTranscriptEntry, f as SubagentSessionMarker } from './nodes-7_0rCAc4.js';
3
3
 
4
4
  /**
5
5
  * types.ts — Tool Display 公共类型
package/dist/virtual.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as SessionNodeKind, S as SessionNode } from './nodes-BcyPw6Fr.js';
2
+ import { a as SessionNodeKind, S as SessionNode } from './nodes-7_0rCAc4.js';
3
3
 
4
4
  /**
5
5
  * 职责:VirtualTimeline 按 SessionNode kind 或 RenderableEntry kind 估算行高。
package/dist/virtual.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  SessionTimeline,
6
6
  VirtualTimeline,
7
7
  estimateNodeSize
8
- } from "./chunk-24FLS4TF.js";
8
+ } from "./chunk-AY7QLXFB.js";
9
9
  import "./chunk-QL3DIGFI.js";
10
10
  import "./chunk-4RIOBLGB.js";
11
11
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "langchain_agentx_stream_ui",
3
- "version": "0.3.7",
3
+ "version": "0.4.2",
4
4
  "description": "React session timeline component library for LangchainAgentEvent SSE streams",
5
5
  "license": "MIT",
6
6
  "author": "wugk",
@@ -56,7 +56,9 @@
56
56
  ],
57
57
  "scripts": {
58
58
  "build": "tsup",
59
- "test": "vitest run",
59
+ "test": "vitest run --exclude 'tests/integration/**'",
60
+ "test:unit": "vitest run --exclude 'tests/integration/**'",
61
+ "test:integration": "vitest run tests/integration",
60
62
  "test:watch": "vitest",
61
63
  "typecheck": "tsc --noEmit"
62
64
  },