langchain_agentx_stream_ui 0.1.0
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.
- package/README.md +236 -0
- package/dist/AskUserQuestionToolBody-CyuNy_k5.d.ts +33 -0
- package/dist/MarkdownBlock-3iEW0Ubm.d.ts +100 -0
- package/dist/chunk-4RIOBLGB.js +666 -0
- package/dist/chunk-4RIOBLGB.js.map +1 -0
- package/dist/chunk-DP7V33X7.js +13 -0
- package/dist/chunk-DP7V33X7.js.map +1 -0
- package/dist/chunk-G2KYJCMM.js +5171 -0
- package/dist/chunk-G2KYJCMM.js.map +1 -0
- package/dist/chunk-MHK53ZHC.js +972 -0
- package/dist/chunk-MHK53ZHC.js.map +1 -0
- package/dist/chunk-W6QQHTJ4.js +785 -0
- package/dist/chunk-W6QQHTJ4.js.map +1 -0
- package/dist/chunk-WM6Y6APP.js +411 -0
- package/dist/chunk-WM6Y6APP.js.map +1 -0
- package/dist/default.css +1364 -0
- package/dist/index.d.ts +650 -0
- package/dist/index.js +743 -0
- package/dist/index.js.map +1 -0
- package/dist/multi-session-CviqerRl.d.ts +494 -0
- package/dist/multi-session.d.ts +7 -0
- package/dist/multi-session.js +21 -0
- package/dist/multi-session.js.map +1 -0
- package/dist/nodes-DqhaBW7M.d.ts +195 -0
- package/dist/sessionViewOptions-DLSFRQwZ.d.ts +158 -0
- package/dist/tools-presentation.d.ts +14 -0
- package/dist/tools-presentation.js +37 -0
- package/dist/tools-presentation.js.map +1 -0
- package/dist/tools.d.ts +21 -0
- package/dist/tools.js +43 -0
- package/dist/tools.js.map +1 -0
- package/dist/types-aXj5TYSP.d.ts +33 -0
- package/dist/virtual.d.ts +36 -0
- package/dist/virtual.js +19 -0
- package/dist/virtual.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/view/AgentSession.tsx","../src/core/store.ts","../src/view/tools/groupParallelTools.ts","../src/view/nodes/SubAgentNode.tsx","../src/transport/createAgentxSseSource.ts","../src/transport/createReplaySource.ts"],"sourcesContent":["/**\n * 职责:顶层容器,连接 Source → store → Timeline 渲染。\n * 链路位置:业务页面 <AgentSession source={...} /> 唯一入口。\n * 当前裁剪范围:单会话;initialEvents 支持 EventBuffer 快照续流(M3);reducer/transport 异常自吞。\n */\nimport { useEffect, useMemo, useRef, type ReactNode } from 'react';\n\nimport { createSessionStore } from '../core/store';\nimport { replayEvents } from '../core/replay';\nimport {\n SessionStoreContext,\n NodeRegistryContext,\n ToolDisplayOptionsContext,\n SessionViewOptionsContext,\n} from '../core/context/SessionContext';\nimport type { Source } from '../transport/types';\nimport type { LangchainAgentEvent, TierOverrides } from '../types/events';\nimport type { ReducerError } from '../types/tree';\nimport { createDefaultRegistry } from './defaultRegistry';\nimport type { NodeRegistry } from './NodeRegistry';\nimport { SessionTimeline } from './SessionTimeline';\nimport { InteractionBusContext } from '../core/context/InteractionContext';\nimport type { InteractionBus } from '../core/interaction/InteractionBus';\nimport { getNoopInteractionBus } from '../core/interaction/InteractionBus';\nimport { useInternalErrors, useSessionStatus } from '../core/hooks';\nimport type { MarkdownRenderer } from '../core/context/MarkdownRendererContext';\nimport { MarkdownRendererContext } from '../core/context/MarkdownRendererContext';\nimport {\n createDefaultToolRegistry,\n type ToolDisplayRegistry,\n} from './tools/registry';\nimport type { ToolBodyMode } from './tools/types';\nimport type { PermissionUiMode, DisplayMode } from './sessionViewOptions';\nimport { DEFAULT_SESSION_VIEW_OPTIONS } from './sessionViewOptions';\n\nexport interface AgentSessionProps {\n source: Source;\n /** 挂载时先 replay 预灌树(含 EventBuffer ingest 快照),再接 source 续流 */\n initialEvents?: LangchainAgentEvent[];\n registry?: NodeRegistry;\n tierOverrides?: TierOverrides;\n onError?: (error: Error) => void;\n autoReconnect?: boolean;\n debug?: boolean;\n /** 为 true 且主舞台节点数超过阈值时使用 VirtualTimeline(V2-E) */\n virtualized?: boolean;\n virtualizeThreshold?: number;\n /** 权限回写薄层;PermissionCard 触发 onPermissionResolve(V2-D) */\n interactionBus?: InteractionBus;\n /** 按工具名注册 Body 组件(V3-T0) */\n toolDisplayRegistry?: ToolDisplayRegistry;\n /** 工具正文默认 preview / full(V3-T0) */\n defaultBodyMode?: ToolBodyMode;\n /** @deprecated Phase 4 起由 projection GroupedToolUseAccumulator 自动分组;保留 prop 兼容 */\n groupParallelTools?: boolean;\n /** 权限 UI:standalone | inline | both(V3-T4.6);后台 bypass 时通常无 pending */\n permissionUiMode?: PermissionUiMode;\n /** 富 Markdown 渲染(simple demo 可注入 react-markdown + mermaid) */\n markdownRenderer?: MarkdownRenderer;\n /** 对齐 CLI display mode(normal / brief_only / transcript) */\n displayMode?: DisplayMode;\n /** 对齐 CC verbose;为 true 时跳过分组并展开 explore detail */\n verbose?: boolean;\n exploreFullscreenBash?: boolean;\n memoryDir?: string | null;\n workspaceRoot?: string | null;\n children?: ReactNode;\n}\n\nfunction DebugPanel() {\n const status = useSessionStatus();\n const errors = useInternalErrors();\n if (errors.length === 0) return null;\n return (\n <div className=\"lax-debug-panel\" data-testid=\"lax-debug-panel\">\n <div>status: {status}</div>\n <ul>\n {errors.map((err: ReducerError, i: number) => (\n <li key={`${err.eventIndex}-${i}`}>\n [{err.eventType}] {err.message}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport function AgentSession({\n source,\n initialEvents,\n registry,\n tierOverrides: _tierOverrides,\n onError,\n autoReconnect: _autoReconnect,\n debug = false,\n virtualized = false,\n virtualizeThreshold,\n interactionBus,\n toolDisplayRegistry,\n defaultBodyMode = 'preview',\n groupParallelTools = false,\n permissionUiMode = 'standalone',\n markdownRenderer,\n displayMode = 'normal',\n verbose = false,\n exploreFullscreenBash = true,\n memoryDir = null,\n workspaceRoot = null,\n children,\n}: AgentSessionProps) {\n const storeRef = useRef<ReturnType<typeof createSessionStore> | null>(null);\n if (storeRef.current === null) {\n const replayOpts = {\n tierOverrides: _tierOverrides,\n collectDebug: debug,\n };\n const initialTree =\n initialEvents && initialEvents.length > 0\n ? replayEvents(initialEvents, replayOpts)\n : undefined;\n storeRef.current = createSessionStore(initialTree, {\n tierOverrides: _tierOverrides,\n debug,\n initialEventCount: initialEvents?.length ?? 0,\n });\n }\n const registryRef = useMemo(() => registry ?? createDefaultRegistry(), [registry]);\n const busRef = useMemo(\n () => interactionBus ?? getNoopInteractionBus(),\n [interactionBus],\n );\n const toolDisplayRef = useMemo(\n () => ({\n registry: toolDisplayRegistry ?? createDefaultToolRegistry(),\n defaultBodyMode,\n }),\n [toolDisplayRegistry, defaultBodyMode],\n );\n const sessionViewRef = useMemo(\n () => ({\n ...DEFAULT_SESSION_VIEW_OPTIONS,\n groupParallelTools,\n permissionUiMode,\n verboseReasoning: debug,\n displayMode,\n verbose,\n exploreFullscreenBash,\n memoryDir,\n workspaceRoot,\n }),\n [\n groupParallelTools,\n permissionUiMode,\n debug,\n displayMode,\n verbose,\n exploreFullscreenBash,\n memoryDir,\n workspaceRoot,\n ],\n );\n\n useEffect(() => {\n const store = storeRef.current!;\n const controller = new AbortController();\n\n void source.start((event, ctx) => {\n store.getState().applyEvent(event, ctx);\n }, controller.signal).catch((err: unknown) => {\n const error = err instanceof Error ? err : new Error(String(err));\n store.getState().markAsError(error);\n onError?.(error);\n });\n\n return () => {\n controller.abort();\n };\n }, [source, onError]);\n\n return (\n <SessionStoreContext.Provider value={storeRef.current!}>\n <InteractionBusContext.Provider value={busRef}>\n <NodeRegistryContext.Provider value={registryRef}>\n <MarkdownRendererContext.Provider value={markdownRenderer}>\n <ToolDisplayOptionsContext.Provider value={toolDisplayRef}>\n <SessionViewOptionsContext.Provider value={sessionViewRef}>\n <div className=\"lax-agent-session\" data-testid=\"lax-agent-session\">\n {children ?? (\n <SessionTimeline\n virtualized={virtualized}\n virtualizeThreshold={virtualizeThreshold}\n groupParallelTools={groupParallelTools}\n />\n )}\n {debug ? <DebugPanel /> : null}\n </div>\n </SessionViewOptionsContext.Provider>\n </ToolDisplayOptionsContext.Provider>\n </MarkdownRendererContext.Provider>\n </NodeRegistryContext.Provider>\n </InteractionBusContext.Provider>\n </SessionStoreContext.Provider>\n );\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla';\n\nimport { createEmptyTree, type ReducerError, type SessionTree } from '../types/tree';\nimport type { LangchainAgentEvent, TierOverrides } from '../types/events';\nimport { markEventIdSeen, shouldSkipDuplicateEvent } from './dedupe';\nimport { reduceTree, type ReduceOptions } from './reducer';\nimport type { SourceEventContext } from '../transport/types';\n\nexport interface SessionStoreOptions {\n tierOverrides?: TierOverrides;\n debug?: boolean;\n /** 预灌历史事件数;续流时保证 reducer eventIndex 连续 */\n initialEventCount?: number;\n /** 续传恢复:已见过的 SSE id,避免重叠帧重复建节点 */\n initialSeenEventIds?: Iterable<string>;\n}\n\nexport interface SessionStoreState {\n tree: SessionTree;\n eventCount: number;\n applyEvent: (event: LangchainAgentEvent, ctx?: SourceEventContext) => void;\n applyEvents: (events: LangchainAgentEvent[]) => void;\n reset: () => void;\n markAsError: (error?: Error) => void;\n}\n\nfunction safeReduce(\n tree: SessionTree,\n event: LangchainAgentEvent,\n eventIndex: number,\n options?: ReduceOptions,\n): { tree: SessionTree; error?: ReducerError } {\n try {\n return { tree: reduceTree(tree, event, eventIndex, options) };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const stack = err instanceof Error ? err.stack : undefined;\n if (import.meta.env?.DEV) {\n console.error('[langchain_agentx_stream_ui] reducer error:', err);\n }\n return {\n tree: {\n ...tree,\n internalErrors: [\n ...tree.internalErrors,\n { eventIndex, eventType: event.event_type, message, stack },\n ],\n },\n };\n }\n}\n\nexport function createSessionStore(\n initialTree: SessionTree = createEmptyTree(),\n storeOptions?: SessionStoreOptions,\n): StoreApi<SessionStoreState> {\n const reduceOpts: ReduceOptions = {\n tierOverrides: storeOptions?.tierOverrides,\n collectDebug: storeOptions?.debug === true,\n };\n const initialEventCount = storeOptions?.initialEventCount ?? 0;\n const seenEventIds = new Set<string>(storeOptions?.initialSeenEventIds);\n return createStore<SessionStoreState>((set, get) => ({\n tree: initialTree,\n eventCount: initialEventCount,\n applyEvent(event, ctx) {\n const sseEventId = ctx?.sseEventId;\n if (shouldSkipDuplicateEvent(seenEventIds, sseEventId)) return;\n\n const { tree, eventCount } = get();\n const { tree: reduced } = safeReduce(tree, event, eventCount, reduceOpts);\n const nextTree: SessionTree =\n sseEventId\n ? {\n ...reduced,\n meta: { ...reduced.meta, lastEventId: sseEventId },\n }\n : reduced;\n markEventIdSeen(seenEventIds, sseEventId);\n set({ tree: nextTree, eventCount: eventCount + 1 });\n },\n applyEvents(events) {\n let { tree, eventCount } = get();\n for (const event of events) {\n const result = safeReduce(tree, event, eventCount, reduceOpts);\n tree = result.tree;\n eventCount += 1;\n }\n set({ tree, eventCount });\n },\n reset() {\n seenEventIds.clear();\n set({ tree: createEmptyTree(), eventCount: 0 });\n },\n markAsError(error?: Error) {\n const { tree } = get();\n set({\n tree: {\n ...tree,\n status: 'error',\n internalErrors: error\n ? [\n ...tree.internalErrors,\n {\n eventIndex: -1,\n eventType: 'sse_connection_failed',\n message: error.message,\n stack: error.stack,\n },\n ]\n : tree.internalErrors,\n },\n });\n },\n }));\n}\n\nexport type SessionStore = StoreApi<SessionStoreState>;\n","/**\n * groupParallelTools.ts — 主舞台 Timeline 条目分组(过渡实现)\n *\n * @deprecated Phase 4 由 core/projection GroupedToolUseAccumulator + mountCandidates 替代。\n * 对齐参考:CC GroupedToolUseContent · buildMessageLookups 并行同工具分组语义\n */\nimport type { SessionNode } from '../../types/nodes';\n\nexport type TimelineEntry =\n | { kind: 'node'; nodeId: string }\n | { kind: 'tool_group'; toolName: string; nodeIds: string[] };\n\nexport interface BuildTimelineEntriesOptions {\n /** @deprecated 使用 projection grouped_tool_use;保留至 Phase 4 迁移完成 */\n groupParallelTools?: boolean;\n hideStandalonePermissions?: boolean;\n}\n\n/** @deprecated 见 core/projection;Phase 4 删除 */\nexport function buildTimelineEntries(\n rootIds: string[],\n byId: Record<string, SessionNode | undefined>,\n options: BuildTimelineEntriesOptions = {},\n): TimelineEntry[] {\n const filtered = options.hideStandalonePermissions\n ? rootIds.filter((id) => byId[id]?.kind !== 'permission')\n : [...rootIds];\n\n if (!options.groupParallelTools) {\n return filtered.map((nodeId) => ({ kind: 'node', nodeId }));\n }\n\n const entries: TimelineEntry[] = [];\n let i = 0;\n\n while (i < filtered.length) {\n const id = filtered[i]!;\n const node = byId[id];\n\n if (node?.kind !== 'tool_call') {\n entries.push({ kind: 'node', nodeId: id });\n i += 1;\n continue;\n }\n\n const toolName = node.toolName;\n const groupIds = [id];\n let j = i + 1;\n\n while (j < filtered.length) {\n const nextId = filtered[j]!;\n const next = byId[nextId];\n if (next?.kind !== 'tool_call' || next.toolName !== toolName) break;\n groupIds.push(nextId);\n j += 1;\n }\n\n if (groupIds.length >= 2) {\n entries.push({ kind: 'tool_group', toolName, nodeIds: groupIds });\n } else {\n entries.push({ kind: 'node', nodeId: id });\n }\n\n i = j;\n }\n\n return entries;\n}\n","/**\n * 职责:默认 SubAgentNode 纵向嵌套容器 widget(方案 A 已退场)。\n * 链路位置:宿主可通过 NodeRegistry.register('subagent', SubAgentBlock) 恢复旧行为。\n * 当前裁剪范围:纵向缩进;不含横向并列布局。\n * @deprecated 方案 A 主时间线不再渲染 SubAgentBlock;子 agent progress 折叠在 AgentToolBody。\n */\nimport { useChildren, useNodeTyped } from '../../core/hooks';\nimport { useNodeRegistry } from '../../core/context/SessionContext';\nimport { TimelineItem } from '../Timeline';\n\nexport interface SubAgentBlockProps {\n nodeId: string;\n}\n\nexport function SubAgentBlock({ nodeId }: SubAgentBlockProps) {\n const node = useNodeTyped(nodeId, 'subagent');\n const childIds = useChildren(nodeId);\n const registry = useNodeRegistry();\n if (!node) return null;\n\n return (\n <div className=\"lax-subagent-block\" data-status={node.status}>\n <div className=\"lax-subagent-block__header\">SubAgent: {node.subagentId}</div>\n <div className=\"lax-subagent-block__children\">\n {childIds.map((childId) => (\n <TimelineItem key={childId} nodeId={childId} registry={registry} />\n ))}\n </div>\n </div>\n );\n}\n","/**\n * 职责:浏览器 EventSource 封装,解码 meta/agentx 命名帧并校验协议版本。\n * 链路位置:业务页面 createAgentxSseSource({ url }) → AgentSession source prop。\n * 当前裁剪范围:protocol_version \"1\";SSE id 行续传;网络错误依赖 EventSource 原生重连(Last-Event-ID)。\n */\nimport type { LangchainAgentEvent } from '../types/events';\nimport type { Source, SourceHandler, SourceEventContext } from './types';\n\nexport const EXPECTED_PROTOCOL_VERSION = '1';\n\nexport interface AgentxSseSourceOptions {\n url: string;\n onError?: (error: Error) => void;\n autoReconnect?: boolean;\n reconnectDelayMs?: number;\n /** 每收到 agentx 帧 SSE id 时回调(含续传重叠 id) */\n onLastEventId?: (id: string) => void;\n /** 测试注入:替换全局 EventSource */\n EventSourceImpl?: typeof EventSource;\n}\n\nexport interface AgentxMetaFrame {\n protocol_version: string;\n session_id?: string | null;\n started_at?: number;\n}\n\nfunction defaultOnError(error: Error): void {\n console.error('[langchain_agentx_stream_ui] SSE error:', error);\n}\n\n/** 手动重连时追加 resume 查询参数(EventSource 无法设 Last-Event-ID 请求头)。 */\nexport function buildResumeStreamUrl(\n baseUrl: string,\n lastEventId: string | null | undefined,\n queryParam = 'last_event_id',\n): string {\n if (!lastEventId) return baseUrl;\n const sep = baseUrl.includes('?') ? '&' : '?';\n return `${baseUrl}${sep}${encodeURIComponent(queryParam)}=${encodeURIComponent(lastEventId)}`;\n}\n\nexport function createAgentxSseSource(options: AgentxSseSourceOptions): Source {\n const {\n url,\n onError = defaultOnError,\n autoReconnect = true,\n reconnectDelayMs = 1000,\n onLastEventId,\n EventSourceImpl = EventSource,\n } = options;\n\n return {\n start(handler: SourceHandler, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n let es: EventSource | null = null;\n let handshakeOk = false;\n let lastEventId: string | null = null;\n let fatal = false;\n\n // Delta 合并缓冲:减少高频 text-delta/reasoning-delta 导致的 React 更新频率\n type BufferedDelta = {\n event: LangchainAgentEvent;\n ctx?: SourceEventContext;\n };\n let bufferedDelta: BufferedDelta | null = null;\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n const flushBufferedDelta = (): void => {\n if (flushTimer) {\n clearTimeout(flushTimer);\n flushTimer = null;\n }\n if (!bufferedDelta) return;\n handler(bufferedDelta.event, bufferedDelta.ctx);\n bufferedDelta = null;\n };\n\n const isBufferedDeltaEvent = (event: LangchainAgentEvent): boolean =>\n event.event_type === 'text-delta' || event.event_type === 'reasoning-delta';\n\n const mergeDeltaEvent = (\n prev: LangchainAgentEvent,\n next: LangchainAgentEvent,\n ): LangchainAgentEvent | null => {\n if (prev.event_type !== next.event_type) return null;\n if (prev.step_index !== next.step_index) return null;\n if (prev.tool_name !== next.tool_name) return null;\n if (prev.session_id !== next.session_id) return null;\n\n const prevData = prev.data as { delta?: string; text?: string; content?: string };\n const nextData = next.data as { delta?: string; text?: string; content?: string };\n\n const prevChunk = prevData.delta ?? prevData.text ?? prevData.content ?? '';\n const nextChunk = nextData.delta ?? nextData.text ?? nextData.content ?? '';\n\n return {\n ...next,\n data: {\n ...next.data,\n text: `${prevChunk}${nextChunk}`,\n },\n } as LangchainAgentEvent;\n };\n\n const cleanup = (): void => {\n es?.close();\n es = null;\n };\n\n const finish = (error?: Error): void => {\n flushBufferedDelta();\n cleanup();\n if (error) reject(error); else resolve();\n };\n\n const connect = (resumeFromId?: string | null): void => {\n if (signal.aborted || fatal) {\n finish();\n return;\n }\n\n const connectUrl =\n resumeFromId != null && resumeFromId !== ''\n ? buildResumeStreamUrl(url, resumeFromId)\n : url;\n\n es = new EventSourceImpl(connectUrl);\n handshakeOk = false;\n\n es.addEventListener('meta', (event: MessageEvent<string>) => {\n try {\n const meta = JSON.parse(event.data) as AgentxMetaFrame;\n if (meta.protocol_version !== EXPECTED_PROTOCOL_VERSION) {\n fatal = true;\n const error = new Error(\n `Unsupported protocol_version: ${meta.protocol_version}`,\n );\n onError(error);\n cleanup();\n finish(error);\n return;\n }\n handshakeOk = true;\n } catch (err) {\n fatal = true;\n const error =\n err instanceof Error ? err : new Error('Failed to decode meta frame');\n onError(error);\n cleanup();\n finish(error);\n }\n });\n\n es.addEventListener('agentx', (event: MessageEvent<string>) => {\n if (!handshakeOk) {\n fatal = true;\n const error = new Error('Received agentx frame before meta handshake');\n onError(error);\n cleanup();\n finish(error);\n return;\n }\n try {\n const agentEvent = JSON.parse(event.data) as LangchainAgentEvent;\n const sseEventId = event.lastEventId || undefined;\n if (sseEventId) {\n lastEventId = sseEventId;\n onLastEventId?.(sseEventId);\n }\n\n const ctx = sseEventId ? { sseEventId } : undefined;\n\n // Delta 合并:减少高频流事件导致的 React 更新频率\n if (isBufferedDeltaEvent(agentEvent)) {\n if (bufferedDelta) {\n const merged = mergeDeltaEvent(bufferedDelta.event, agentEvent);\n if (merged) {\n bufferedDelta = { event: merged, ctx };\n } else {\n flushBufferedDelta();\n bufferedDelta = { event: agentEvent, ctx };\n }\n } else {\n bufferedDelta = { event: agentEvent, ctx };\n }\n\n if (!flushTimer) {\n flushTimer = setTimeout(() => {\n flushBufferedDelta();\n }, 16);\n }\n } else {\n flushBufferedDelta();\n handler(agentEvent, ctx);\n }\n } catch (err) {\n onError(\n new Error(\n err instanceof Error\n ? `Failed to decode agentx frame: ${err.message}`\n : 'Failed to decode agentx frame',\n ),\n );\n }\n });\n\n es.onerror = () => {\n flushBufferedDelta();\n if (signal.aborted || fatal) {\n cleanup();\n finish();\n return;\n }\n if (!autoReconnect) {\n fatal = true;\n const error = new Error('SSE connection error');\n onError(error);\n cleanup();\n finish(error);\n return;\n }\n // 关闭旧连接并以 lastEventId 重连(浏览器原生重连无法注入自定义 EventSourceImpl)\n cleanup();\n setTimeout(() => connect(lastEventId), reconnectDelayMs);\n };\n };\n\n signal.addEventListener('abort', () => {\n flushBufferedDelta();\n fatal = true;\n finish();\n }, { once: true });\n\n connect();\n });\n },\n };\n}\n\n/** 测试/Story 用:内存事件源 */\nexport function createMockSource(events: LangchainAgentEvent[]): Source {\n return {\n async start(handler, signal) {\n for (const event of events) {\n if (signal.aborted) break;\n handler(event);\n }\n },\n };\n}\n","/**\n * 职责:内存事件源,按序投递 events 实现 Source 接口。\n * 链路位置:历史回放、测试、AgentSession 只读时间线。\n * 当前裁剪范围:可选 delayMs 模拟流式;不含 SSE 续传。\n */\nimport type { LangchainAgentEvent } from '../types/events';\nimport type { ReplayOptions } from '../core/replay';\nimport type { Source, SourceHandler } from './types';\n\nexport interface ReplaySourceOptions extends ReplayOptions {\n /** 事件间隔毫秒;默认 0 立即投递 */\n delayMs?: number;\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nexport function createReplaySource(\n events: LangchainAgentEvent[],\n opts?: ReplaySourceOptions,\n): Source {\n const delayMs = opts?.delayMs ?? 0;\n\n return {\n async start(handler: SourceHandler, signal: AbortSignal): Promise<void> {\n for (const event of events) {\n if (signal.aborted) break;\n handler(event);\n if (delayMs > 0) {\n await sleep(delayMs, signal);\n }\n }\n },\n };\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
|
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ComponentType, ReactNode } from 'react';
|
|
3
|
+
import { a as SessionNodeKind, S as SessionNode, h as ToolCounts } from './nodes-DqhaBW7M.js';
|
|
4
|
+
import { T as ToolDisplayRegistry, P as PermissionUiMode } from './sessionViewOptions-DLSFRQwZ.js';
|
|
5
|
+
import { a as ToolBodyMode } from './types-aXj5TYSP.js';
|
|
6
|
+
import { StoreApi } from 'zustand/vanilla';
|
|
7
|
+
|
|
8
|
+
/** Common fields on every LangchainAgentEvent (SDK mirror). */
|
|
9
|
+
interface CommonFields {
|
|
10
|
+
step_index: number | null;
|
|
11
|
+
tool_name: string | null;
|
|
12
|
+
session_id: string | null;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
interface ToolCallData {
|
|
16
|
+
tool_call_id?: string;
|
|
17
|
+
input?: unknown;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
interface ToolResultData {
|
|
21
|
+
schema_version?: string;
|
|
22
|
+
status: string;
|
|
23
|
+
summary: string | null;
|
|
24
|
+
payload: unknown;
|
|
25
|
+
display?: unknown;
|
|
26
|
+
blocks?: unknown[];
|
|
27
|
+
artifacts?: unknown[];
|
|
28
|
+
hints?: unknown;
|
|
29
|
+
meta?: unknown;
|
|
30
|
+
error?: {
|
|
31
|
+
message: string;
|
|
32
|
+
type?: string;
|
|
33
|
+
} | null;
|
|
34
|
+
truncated?: boolean;
|
|
35
|
+
overflow_file?: string | null;
|
|
36
|
+
tool_name?: string;
|
|
37
|
+
tool_call_id?: string;
|
|
38
|
+
}
|
|
39
|
+
interface SubagentFoldKeys {
|
|
40
|
+
tool_call_id: string;
|
|
41
|
+
agent_id: string;
|
|
42
|
+
subagent_type?: string;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
/** SDK 1.2.0 subagent-start / subagent-end boundary payload。 */
|
|
46
|
+
interface SubAgentBoundaryData extends SubagentFoldKeys {
|
|
47
|
+
tool_name: string;
|
|
48
|
+
child_session_id?: string;
|
|
49
|
+
}
|
|
50
|
+
/** SDK 1.2.0 subagent-tool-call / subagent-tool-result progress payload。 */
|
|
51
|
+
interface SubagentProgressData extends SubagentFoldKeys {
|
|
52
|
+
tool_name: string;
|
|
53
|
+
step?: number;
|
|
54
|
+
summary?: string;
|
|
55
|
+
status?: string;
|
|
56
|
+
}
|
|
57
|
+
/** tool-progress:主 agent Bash 等无 agent_id;subagent 冒泡带 agent_id。 */
|
|
58
|
+
interface ToolProgressData {
|
|
59
|
+
tool_call_id?: string;
|
|
60
|
+
agent_id?: string;
|
|
61
|
+
tool_name?: string;
|
|
62
|
+
phase?: string;
|
|
63
|
+
current?: number;
|
|
64
|
+
total?: number;
|
|
65
|
+
message?: string;
|
|
66
|
+
data?: Record<string, unknown>;
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
69
|
+
interface ErrorEventData {
|
|
70
|
+
/** 薄层 / 协议约定字段 */
|
|
71
|
+
message?: string;
|
|
72
|
+
type?: string;
|
|
73
|
+
source?: string;
|
|
74
|
+
/** SDK adapter 字段(loop_stream_driver.error_visible 等) */
|
|
75
|
+
error?: string;
|
|
76
|
+
error_type?: string;
|
|
77
|
+
synthetic?: boolean;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
}
|
|
80
|
+
type LangchainAgentEvent = ({
|
|
81
|
+
event_type: 'start';
|
|
82
|
+
data: Record<string, unknown>;
|
|
83
|
+
} & CommonFields) | ({
|
|
84
|
+
event_type: 'finish';
|
|
85
|
+
data: Record<string, unknown>;
|
|
86
|
+
} & CommonFields) | ({
|
|
87
|
+
event_type: 'text-start';
|
|
88
|
+
data: Record<string, unknown>;
|
|
89
|
+
} & CommonFields) | ({
|
|
90
|
+
event_type: 'text-delta';
|
|
91
|
+
data: {
|
|
92
|
+
delta?: string;
|
|
93
|
+
text?: string;
|
|
94
|
+
};
|
|
95
|
+
} & CommonFields) | ({
|
|
96
|
+
event_type: 'text-end';
|
|
97
|
+
data: {
|
|
98
|
+
text?: string;
|
|
99
|
+
};
|
|
100
|
+
} & CommonFields) | ({
|
|
101
|
+
event_type: 'reasoning-start';
|
|
102
|
+
data: Record<string, unknown>;
|
|
103
|
+
} & CommonFields) | ({
|
|
104
|
+
event_type: 'reasoning-delta';
|
|
105
|
+
data: {
|
|
106
|
+
delta?: string;
|
|
107
|
+
text?: string;
|
|
108
|
+
};
|
|
109
|
+
} & CommonFields) | ({
|
|
110
|
+
event_type: 'reasoning-end';
|
|
111
|
+
data: {
|
|
112
|
+
text?: string;
|
|
113
|
+
};
|
|
114
|
+
} & CommonFields) | ({
|
|
115
|
+
event_type: 'tool-input';
|
|
116
|
+
data: ToolCallData & {
|
|
117
|
+
params?: unknown;
|
|
118
|
+
};
|
|
119
|
+
} & CommonFields) | ({
|
|
120
|
+
event_type: 'tool-call';
|
|
121
|
+
data: ToolCallData;
|
|
122
|
+
} & CommonFields) | ({
|
|
123
|
+
event_type: 'tool-result';
|
|
124
|
+
data: ToolResultData;
|
|
125
|
+
} & CommonFields) | ({
|
|
126
|
+
event_type: 'tool-artifact';
|
|
127
|
+
data: ToolResultData;
|
|
128
|
+
} & CommonFields) | ({
|
|
129
|
+
event_type: 'tool-error';
|
|
130
|
+
data: {
|
|
131
|
+
message: string;
|
|
132
|
+
type?: string;
|
|
133
|
+
};
|
|
134
|
+
} & CommonFields) | ({
|
|
135
|
+
event_type: 'tool-input-start';
|
|
136
|
+
data: Record<string, unknown>;
|
|
137
|
+
} & CommonFields) | ({
|
|
138
|
+
event_type: 'tool-input-delta';
|
|
139
|
+
data: {
|
|
140
|
+
delta: string;
|
|
141
|
+
};
|
|
142
|
+
} & CommonFields) | ({
|
|
143
|
+
event_type: 'tool-progress';
|
|
144
|
+
data: ToolProgressData;
|
|
145
|
+
} & CommonFields) | ({
|
|
146
|
+
event_type: 'start-step';
|
|
147
|
+
data: Record<string, unknown>;
|
|
148
|
+
} & CommonFields) | ({
|
|
149
|
+
event_type: 'finish-step';
|
|
150
|
+
data: Record<string, unknown>;
|
|
151
|
+
} & CommonFields) | ({
|
|
152
|
+
event_type: 'subagent-start';
|
|
153
|
+
data: SubAgentBoundaryData;
|
|
154
|
+
} & CommonFields) | ({
|
|
155
|
+
event_type: 'subagent-end';
|
|
156
|
+
data: SubAgentBoundaryData;
|
|
157
|
+
} & CommonFields) | ({
|
|
158
|
+
event_type: 'subagent-tool-call';
|
|
159
|
+
data: SubagentProgressData;
|
|
160
|
+
} & CommonFields) | ({
|
|
161
|
+
event_type: 'subagent-tool-result';
|
|
162
|
+
data: SubagentProgressData;
|
|
163
|
+
} & CommonFields) | ({
|
|
164
|
+
event_type: 'subagent-model-step';
|
|
165
|
+
data: Record<string, unknown>;
|
|
166
|
+
} & CommonFields) | ({
|
|
167
|
+
event_type: 'hook-progress';
|
|
168
|
+
data: Record<string, unknown>;
|
|
169
|
+
} & CommonFields) | ({
|
|
170
|
+
event_type: 'hook-finished';
|
|
171
|
+
data: Record<string, unknown>;
|
|
172
|
+
} & CommonFields) | ({
|
|
173
|
+
event_type: 'compact-start';
|
|
174
|
+
data: Record<string, unknown>;
|
|
175
|
+
} & CommonFields) | ({
|
|
176
|
+
event_type: 'compact-end';
|
|
177
|
+
data: Record<string, unknown>;
|
|
178
|
+
} & CommonFields) | ({
|
|
179
|
+
event_type: 'task-started';
|
|
180
|
+
data: Record<string, unknown>;
|
|
181
|
+
} & CommonFields) | ({
|
|
182
|
+
event_type: 'task-progress';
|
|
183
|
+
data: Record<string, unknown>;
|
|
184
|
+
} & CommonFields) | ({
|
|
185
|
+
event_type: 'task-notification-enqueued';
|
|
186
|
+
data: Record<string, unknown>;
|
|
187
|
+
} & CommonFields) | ({
|
|
188
|
+
event_type: 'task-notification-consumed';
|
|
189
|
+
data: Record<string, unknown>;
|
|
190
|
+
} & CommonFields) | ({
|
|
191
|
+
event_type: 'task-terminated';
|
|
192
|
+
data: Record<string, unknown>;
|
|
193
|
+
} & CommonFields) | ({
|
|
194
|
+
event_type: 'task-list-snapshot';
|
|
195
|
+
data: TaskListSnapshotData;
|
|
196
|
+
} & CommonFields) | ({
|
|
197
|
+
event_type: 'error';
|
|
198
|
+
data: ErrorEventData;
|
|
199
|
+
} & CommonFields) | ({
|
|
200
|
+
event_type: 'permission-request';
|
|
201
|
+
data: PermissionRequestData;
|
|
202
|
+
} & CommonFields) | ({
|
|
203
|
+
event_type: 'memory-saved';
|
|
204
|
+
data: MemorySavedEventData;
|
|
205
|
+
} & CommonFields) | ({
|
|
206
|
+
event_type: string;
|
|
207
|
+
data: Record<string, unknown>;
|
|
208
|
+
} & CommonFields);
|
|
209
|
+
/** SDK MEMORY_SAVED 事件载荷(对齐 CLI MemorySavedSummaryHandler.parse)。 */
|
|
210
|
+
interface MemorySavedEventData {
|
|
211
|
+
count?: number;
|
|
212
|
+
written_paths?: string[];
|
|
213
|
+
display_hint?: string;
|
|
214
|
+
[key: string]: unknown;
|
|
215
|
+
}
|
|
216
|
+
interface TaskListSnapshotTaskData {
|
|
217
|
+
id: string;
|
|
218
|
+
subject?: string;
|
|
219
|
+
description?: string;
|
|
220
|
+
status?: string;
|
|
221
|
+
blocked_by?: string[];
|
|
222
|
+
blocks?: string[];
|
|
223
|
+
owner?: string;
|
|
224
|
+
active_form?: string;
|
|
225
|
+
metadata?: Record<string, unknown>;
|
|
226
|
+
}
|
|
227
|
+
interface TaskListSnapshotData {
|
|
228
|
+
tasks: TaskListSnapshotTaskData[];
|
|
229
|
+
session_id: string;
|
|
230
|
+
timestamp: number;
|
|
231
|
+
/** 磁盘 task_list_id;与 UI session_id 可不同(Simple Demo 为 default) */
|
|
232
|
+
task_list_id?: string;
|
|
233
|
+
}
|
|
234
|
+
interface PermissionRequestData {
|
|
235
|
+
request_id: string;
|
|
236
|
+
tool_name?: string;
|
|
237
|
+
ask_prompt?: string;
|
|
238
|
+
ask_decision?: {
|
|
239
|
+
message?: string;
|
|
240
|
+
behavior?: string;
|
|
241
|
+
};
|
|
242
|
+
input_data?: unknown;
|
|
243
|
+
[key: string]: unknown;
|
|
244
|
+
}
|
|
245
|
+
type EventType = LangchainAgentEvent['event_type'];
|
|
246
|
+
type EventTier = 'main' | 'collapsed' | 'debug' | 'state';
|
|
247
|
+
type TierOverrides = Partial<Record<EventType, Exclude<EventTier, 'state'>>>;
|
|
248
|
+
declare const DEFAULT_EVENT_TIERS: Record<string, EventTier>;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* 职责:定义 Source 抽象,解耦 transport 与 React 容器。
|
|
252
|
+
* 链路位置:AgentSession 消费 Source;createAgentxSseSource 提供 SSE 实现。
|
|
253
|
+
* 当前裁剪范围:单会话实时流、replay 与 SSE 续传去重。
|
|
254
|
+
*/
|
|
255
|
+
|
|
256
|
+
interface SourceEventContext {
|
|
257
|
+
/** SSE 帧 id: 行;续传重叠时用于 store 幂等去重 */
|
|
258
|
+
sseEventId?: string;
|
|
259
|
+
}
|
|
260
|
+
type SourceHandler = (event: LangchainAgentEvent, ctx?: SourceEventContext) => void;
|
|
261
|
+
interface Source {
|
|
262
|
+
start(handler: SourceHandler, signal: AbortSignal): Promise<void>;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* 职责:kind → React widget 映射,支持 override/register 扩展。
|
|
267
|
+
* 链路位置:Timeline 按节点 kind 查找 widget;业务通过 override 替换。
|
|
268
|
+
* 当前裁剪范围:8 类内置 kind + 自定义 register;无插件系统。
|
|
269
|
+
*/
|
|
270
|
+
|
|
271
|
+
interface NodeWidgetProps {
|
|
272
|
+
nodeId: string;
|
|
273
|
+
}
|
|
274
|
+
type NodeWidget = ComponentType<NodeWidgetProps>;
|
|
275
|
+
declare class NodeRegistry {
|
|
276
|
+
private readonly widgets;
|
|
277
|
+
constructor(widgets: Map<string, NodeWidget>);
|
|
278
|
+
static default(): NodeRegistry;
|
|
279
|
+
override(kind: SessionNodeKind | string, widget: NodeWidget): NodeRegistry;
|
|
280
|
+
register(kind: string, widget: NodeWidget): NodeRegistry;
|
|
281
|
+
get(kind: string): NodeWidget | undefined;
|
|
282
|
+
has(kind: string): boolean;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* 职责:人类回写薄层 API;PermissionNode 触发,业务实现 HTTP 回写。
|
|
287
|
+
* 链路位置:AgentSession interactionBus prop → PermissionNode 按钮。
|
|
288
|
+
* 当前裁剪范围:permission resolve;不含 HITL 表单协议。
|
|
289
|
+
*/
|
|
290
|
+
interface PermissionResolvePayload {
|
|
291
|
+
requestId: string;
|
|
292
|
+
allow: boolean;
|
|
293
|
+
message?: string;
|
|
294
|
+
}
|
|
295
|
+
interface InteractionBus {
|
|
296
|
+
resolvePermission: (payload: PermissionResolvePayload) => void | Promise<void>;
|
|
297
|
+
}
|
|
298
|
+
interface InteractionBusHandlers {
|
|
299
|
+
onPermissionResolve?: (payload: PermissionResolvePayload) => void | Promise<void>;
|
|
300
|
+
}
|
|
301
|
+
declare function createInteractionBus(handlers?: InteractionBusHandlers): InteractionBus;
|
|
302
|
+
declare function getNoopInteractionBus(): InteractionBus;
|
|
303
|
+
|
|
304
|
+
interface MarkdownRendererProps {
|
|
305
|
+
content: string;
|
|
306
|
+
className?: string;
|
|
307
|
+
}
|
|
308
|
+
type MarkdownRenderer = (props: MarkdownRendererProps) => ReactNode;
|
|
309
|
+
|
|
310
|
+
interface MultiSessionSourceConfig {
|
|
311
|
+
sessionId: string;
|
|
312
|
+
source: Source;
|
|
313
|
+
/** EventBuffer ingest 快照或历史事件;挂载时 replay 后再接 source 续流(M3) */
|
|
314
|
+
initialEvents?: LangchainAgentEvent[];
|
|
315
|
+
}
|
|
316
|
+
interface MultiAgentSessionProps {
|
|
317
|
+
sessions: MultiSessionSourceConfig[];
|
|
318
|
+
/** 受控活跃 session */
|
|
319
|
+
activeSessionId?: string | null;
|
|
320
|
+
/** 非受控默认活跃 session */
|
|
321
|
+
defaultActiveSessionId?: string | null;
|
|
322
|
+
onActiveSessionChange?: (sessionId: string | null) => void;
|
|
323
|
+
maxSessions?: number;
|
|
324
|
+
tierOverrides?: TierOverrides;
|
|
325
|
+
debug?: boolean;
|
|
326
|
+
registry?: NodeRegistry;
|
|
327
|
+
onError?: (error: Error, sessionId: string) => void;
|
|
328
|
+
virtualized?: boolean;
|
|
329
|
+
virtualizeThreshold?: number;
|
|
330
|
+
interactionBus?: InteractionBus;
|
|
331
|
+
toolDisplayRegistry?: ToolDisplayRegistry;
|
|
332
|
+
defaultBodyMode?: ToolBodyMode;
|
|
333
|
+
groupParallelTools?: boolean;
|
|
334
|
+
permissionUiMode?: PermissionUiMode;
|
|
335
|
+
markdownRenderer?: MarkdownRenderer;
|
|
336
|
+
children?: ReactNode;
|
|
337
|
+
}
|
|
338
|
+
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;
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* 任务类型定义(对齐 CC tasks.ts)
|
|
342
|
+
*/
|
|
343
|
+
type TaskStatus = 'pending' | 'in_progress' | 'completed';
|
|
344
|
+
interface Task {
|
|
345
|
+
id: string;
|
|
346
|
+
subject: string;
|
|
347
|
+
description?: string;
|
|
348
|
+
activeForm?: string;
|
|
349
|
+
owner?: string;
|
|
350
|
+
status: TaskStatus;
|
|
351
|
+
blocks: string[];
|
|
352
|
+
blockedBy: string[];
|
|
353
|
+
metadata?: Record<string, unknown>;
|
|
354
|
+
startedAt?: number;
|
|
355
|
+
completedAt?: number;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
type SessionStatus = 'connecting' | 'running' | 'done' | 'error';
|
|
359
|
+
/** 任务列表可见性阶段(对齐 CC / 设计文档 §3.2.3) */
|
|
360
|
+
type TaskPhase = 'hidden' | 'visible' | 'hidden-after-completion';
|
|
361
|
+
interface ReducerError {
|
|
362
|
+
eventIndex: number;
|
|
363
|
+
eventType: string;
|
|
364
|
+
message: string;
|
|
365
|
+
stack?: string;
|
|
366
|
+
}
|
|
367
|
+
interface SessionTree {
|
|
368
|
+
rootChildren: string[];
|
|
369
|
+
byId: Record<string, SessionNode>;
|
|
370
|
+
openSubAgentStack: string[];
|
|
371
|
+
status: SessionStatus;
|
|
372
|
+
meta: {
|
|
373
|
+
sessionId: string | null;
|
|
374
|
+
startedAt: number | null;
|
|
375
|
+
lastEventId: string | null;
|
|
376
|
+
};
|
|
377
|
+
internalErrors: ReducerError[];
|
|
378
|
+
debugEvents: {
|
|
379
|
+
eventIndex: number;
|
|
380
|
+
eventType: string;
|
|
381
|
+
data: unknown;
|
|
382
|
+
}[];
|
|
383
|
+
/** hook-finished / compact-* 等;供 projection system_summary,不进入主舞台 Unknown */
|
|
384
|
+
systemEvents: {
|
|
385
|
+
eventIndex: number;
|
|
386
|
+
eventType: string;
|
|
387
|
+
data: unknown;
|
|
388
|
+
timestamp: number;
|
|
389
|
+
}[];
|
|
390
|
+
/** step:name → 下一 seq;无 tool_call_id 时分配 tool:step:name:seq */
|
|
391
|
+
toolSeqCounters: Record<string, number>;
|
|
392
|
+
/** step:name → 当前进行中的 tool 节点 id(result 后清除) */
|
|
393
|
+
activeToolByStepName: Record<string, string>;
|
|
394
|
+
/** 当前活跃的 thinking 轮次 ID */
|
|
395
|
+
activeRoundId: string | null;
|
|
396
|
+
/** 已完成的轮次摘要(用于回溯显示) */
|
|
397
|
+
roundSummaries: RoundSummary[];
|
|
398
|
+
/** 任务列表(由 task-list-snapshot 驱动) */
|
|
399
|
+
tasks: Record<string, Task>;
|
|
400
|
+
/** 任务列表可见阶段 */
|
|
401
|
+
taskPhase: TaskPhase;
|
|
402
|
+
/** 本轮是否曾显示过任务列表 */
|
|
403
|
+
hasEverShownTaskList: boolean;
|
|
404
|
+
/** 全部任务完成后等待最终主输出 */
|
|
405
|
+
waitingForFinalResponseAfterTasks: boolean;
|
|
406
|
+
/** 首个任务快照时间(毫秒) */
|
|
407
|
+
taskStartTime: number | null;
|
|
408
|
+
/** Hook 进度跟踪(对齐 CC stopHookSpinnerSuffix) */
|
|
409
|
+
hookProgress: {
|
|
410
|
+
/** 当前正在执行的 hook toolUseID */
|
|
411
|
+
currentToolUseID: string | null;
|
|
412
|
+
/** Hook 总数 */
|
|
413
|
+
total: number;
|
|
414
|
+
/** 已完成数 */
|
|
415
|
+
completed: number;
|
|
416
|
+
/** 自定义状态消息 */
|
|
417
|
+
customMessage: string | null;
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
/** 轮次摘要记录 */
|
|
421
|
+
interface RoundSummary {
|
|
422
|
+
roundId: string;
|
|
423
|
+
reasoningNodeId: string;
|
|
424
|
+
exploreNodeId: string | null;
|
|
425
|
+
summaryNodeId: string | null;
|
|
426
|
+
startedAt: number;
|
|
427
|
+
endedAt: number;
|
|
428
|
+
toolCounts: ToolCounts;
|
|
429
|
+
}
|
|
430
|
+
declare function createEmptyTree(): SessionTree;
|
|
431
|
+
|
|
432
|
+
interface SessionStoreOptions {
|
|
433
|
+
tierOverrides?: TierOverrides;
|
|
434
|
+
debug?: boolean;
|
|
435
|
+
/** 预灌历史事件数;续流时保证 reducer eventIndex 连续 */
|
|
436
|
+
initialEventCount?: number;
|
|
437
|
+
/** 续传恢复:已见过的 SSE id,避免重叠帧重复建节点 */
|
|
438
|
+
initialSeenEventIds?: Iterable<string>;
|
|
439
|
+
}
|
|
440
|
+
interface SessionStoreState {
|
|
441
|
+
tree: SessionTree;
|
|
442
|
+
eventCount: number;
|
|
443
|
+
applyEvent: (event: LangchainAgentEvent, ctx?: SourceEventContext) => void;
|
|
444
|
+
applyEvents: (events: LangchainAgentEvent[]) => void;
|
|
445
|
+
reset: () => void;
|
|
446
|
+
markAsError: (error?: Error) => void;
|
|
447
|
+
}
|
|
448
|
+
declare function createSessionStore(initialTree?: SessionTree, storeOptions?: SessionStoreOptions): StoreApi<SessionStoreState>;
|
|
449
|
+
type SessionStore = StoreApi<SessionStoreState>;
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* 职责:多会话顶层 store,按 sessionId 路由事件到独立 SessionTree。
|
|
453
|
+
* 链路位置:MultiAgentSession 消费;业务也可直接 createMultiSessionStore。
|
|
454
|
+
* 当前裁剪范围:进程内 LRU(默认 10);不含 Source 生命周期管理。
|
|
455
|
+
*/
|
|
456
|
+
|
|
457
|
+
interface SessionSlice {
|
|
458
|
+
tree: SessionTree;
|
|
459
|
+
eventCount: number;
|
|
460
|
+
}
|
|
461
|
+
interface MultiSessionStoreOptions {
|
|
462
|
+
maxSessions?: number;
|
|
463
|
+
tierOverrides?: TierOverrides;
|
|
464
|
+
debug?: boolean;
|
|
465
|
+
/** 初始活跃 session;默认 null */
|
|
466
|
+
activeSessionId?: string | null;
|
|
467
|
+
}
|
|
468
|
+
interface MultiSessionStoreState {
|
|
469
|
+
sessions: Record<string, SessionSlice>;
|
|
470
|
+
activeSessionId: string | null;
|
|
471
|
+
order: string[];
|
|
472
|
+
applyEvent: (sessionId: string, event: LangchainAgentEvent, ctx?: SourceEventContext) => void;
|
|
473
|
+
applyEvents: (sessionId: string, events: LangchainAgentEvent[]) => void;
|
|
474
|
+
setActiveSessionId: (id: string | null) => void;
|
|
475
|
+
removeSession: (id: string) => void;
|
|
476
|
+
replaySession: (sessionId: string, events: LangchainAgentEvent[]) => void;
|
|
477
|
+
ensureSession: (sessionId: string, initialEvents?: LangchainAgentEvent[]) => void;
|
|
478
|
+
getSessionTree: (sessionId: string) => SessionTree | undefined;
|
|
479
|
+
}
|
|
480
|
+
declare function createMultiSessionStore(options?: MultiSessionStoreOptions): StoreApi<MultiSessionStoreState>;
|
|
481
|
+
type MultiSessionStore = StoreApi<MultiSessionStoreState>;
|
|
482
|
+
/** 将 MultiSessionStore 活跃会话投影为 SessionStore,供 Timeline hooks 复用。 */
|
|
483
|
+
declare function createActiveSessionBridge(multiStore: MultiSessionStore): StoreApi<SessionStoreState>;
|
|
484
|
+
|
|
485
|
+
interface ActiveSessionView {
|
|
486
|
+
activeSessionId: string | null;
|
|
487
|
+
tree: SessionTree;
|
|
488
|
+
setActiveSessionId: MultiSessionStoreState['setActiveSessionId'];
|
|
489
|
+
}
|
|
490
|
+
declare function useActiveSession(): ActiveSessionView;
|
|
491
|
+
|
|
492
|
+
declare function useSessionIds(): string[];
|
|
493
|
+
|
|
494
|
+
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 };
|
|
@@ -0,0 +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-CviqerRl.js';
|
|
2
|
+
import 'react/jsx-runtime';
|
|
3
|
+
import 'react';
|
|
4
|
+
import './nodes-DqhaBW7M.js';
|
|
5
|
+
import './sessionViewOptions-DLSFRQwZ.js';
|
|
6
|
+
import './types-aXj5TYSP.js';
|
|
7
|
+
import 'zustand/vanilla';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MultiAgentSession,
|
|
3
|
+
createActiveSessionBridge,
|
|
4
|
+
createMultiSessionStore
|
|
5
|
+
} from "./chunk-W6QQHTJ4.js";
|
|
6
|
+
import "./chunk-WM6Y6APP.js";
|
|
7
|
+
import "./chunk-DP7V33X7.js";
|
|
8
|
+
import {
|
|
9
|
+
useActiveSession,
|
|
10
|
+
useSessionIds
|
|
11
|
+
} from "./chunk-G2KYJCMM.js";
|
|
12
|
+
import "./chunk-MHK53ZHC.js";
|
|
13
|
+
import "./chunk-4RIOBLGB.js";
|
|
14
|
+
export {
|
|
15
|
+
MultiAgentSession,
|
|
16
|
+
createActiveSessionBridge,
|
|
17
|
+
createMultiSessionStore,
|
|
18
|
+
useActiveSession,
|
|
19
|
+
useSessionIds
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=multi-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|