/** * Stream Accumulator * * Extracted from OpenCodeEventHub.handleMessagePartUpdated. * Handles streaming delta accumulation for text, reasoning, tool calls, * subtasks, retry, and compaction events. */ import type { StreamStateManager } from '../store/stream-state.js'; import type { ToolRuntimeState } from './opencode-event-hub.js'; import type { UserMessageIdCache } from './user-message-cache.js'; export interface StreamAccumulatorDeps { toSessionId: (value: unknown) => string; chatSessionStore: { getChatId(sessionId: string): string | undefined; rememberSessionAlias(sessionId: string, chatId: string, ttl: number): void; }; outputBuffer: { get(bufferKey: string): unknown; getOrCreate(bufferKey: string, conversationId: string, sessionId: string, msgId: string | null): unknown; append(bufferKey: string, text: string): void; appendThinking(bufferKey: string, text: string): void; touch(bufferKey: string): void; }; setToolCallCorrelation: (toolCallId: unknown, chatId: unknown) => void; setMessageCorrelation: (messageId: unknown, chatId: unknown) => void; asRecord: (value: unknown) => Record | null; normalizeToolStatus: (status: unknown) => 'pending' | 'running' | 'completed' | 'failed'; buildToolTraceOutput: (part: Record, status: ToolRuntimeState['status'], withInput: boolean) => string | undefined; upsertToolState: (bufferKey: string, toolKey: string, state: ToolRuntimeState, kind?: 'tool' | 'subtask') => void; getOrCreateToolStateBucket: (bufferKey: string) => Map; upsertTimelineNote: (bufferKey: string, noteKey: string, text: string, variant?: 'retry' | 'compaction' | 'question' | 'error' | 'permission') => void; appendTimelineText: (bufferKey: string, segmentKey: string, type: 'text' | 'reasoning', deltaText: string) => void; setTimelineText: (bufferKey: string, segmentKey: string, type: 'text' | 'reasoning', text: string) => void; streamStateManager: StreamStateManager; appendTextFromPart: (sessionID: string, part: { id?: unknown; text?: unknown; }, bufferKey: string) => void; appendReasoningFromPart: (sessionID: string, part: { id?: unknown; text?: unknown; }, bufferKey: string) => void; stringifyToolOutput: (value: unknown) => string | undefined; getToolStatusText: (status: ToolRuntimeState['status']) => string; pickFirstDefined: (...values: unknown[]) => unknown; resolveConversationRoute: (sessionId: string, fallbackConversationId: string) => { platform: string; conversationId: string; bufferKey: string; permissionChatKey: string; }; userMessageIdCache: UserMessageIdCache; } export declare class StreamAccumulator { private depsFactory; constructor(depsFactory: () => StreamAccumulatorDeps); handleMessagePartUpdated(event: unknown): void; } //# sourceMappingURL=stream-accumulator.d.ts.map