MCPcopy
hub / github.com/codeaashu/claude-code / streamRenderedMessages

Function streamRenderedMessages

src/utils/exportRenderer.tsx:55–85  ·  view source on GitHub ↗
(messages: Message[], tools: Tools, sink: (ansiChunk: string) => void | Promise<void>, {
  columns,
  verbose = false,
  chunkSize = 40,
  onProgress
}: {
  columns?: number;
  verbose?: boolean;
  chunkSize?: number;
  onProgress?: (rendered: number) => void;
} = {})

Source from the content-addressed store, hash-verified

53 * which chunk each landed in.
54 */
55export async function streamRenderedMessages(messages: Message[], tools: Tools, sink: (ansiChunk: string) => void | Promise<void>, {
56 columns,
57 verbose = false,
58 chunkSize = 40,
59 onProgress
60}: {
61 columns?: number;
62 verbose?: boolean;
63 chunkSize?: number;
64 onProgress?: (rendered: number) => void;
65} = {}): Promise<void> {
66 const renderChunk = (range: readonly [number, number]) => renderToAnsiString(<AppStateProvider>
67 <StaticKeybindingProvider>
68 <Messages messages={messages} tools={tools} commands={[]} verbose={verbose} toolJSX={null} toolUseConfirmQueue={[]} inProgressToolUseIDs={new Set()} isMessageSelectorVisible={false} conversationId="export" screen="prompt" streamingToolUses={[]} showAllInTranscript={true} isLoading={false} renderRange={range} />
69 </StaticKeybindingProvider>
70 </AppStateProvider>, columns);
71
72 // renderRange indexes into the post-collapse array whose length we can't
73 // see from here — normalize splits each Message into one NormalizedMessage
74 // per content block (unbounded per message), collapse merges some back.
75 // Ceiling is the exact normalize output count + chunkSize so the loop
76 // always reaches the empty slice where break fires (collapse only shrinks).
77 let ceiling = chunkSize;
78 for (const m of messages) ceiling += normalizedUpperBound(m);
79 for (let offset = 0; offset < ceiling; offset += chunkSize) {
80 const ansi = await renderChunk([offset, offset + chunkSize]);
81 if (stripAnsi(ansi).trim() === '') break;
82 await sink(ansi);
83 onProgress?.(offset + chunkSize);
84 }
85}
86
87/**
88 * Renders messages to a plain text string suitable for export.

Callers 1

Calls 5

normalizedUpperBoundFunction · 0.85
renderChunkFunction · 0.85
stripAnsiFunction · 0.85
sinkFunction · 0.85
onProgressFunction · 0.50

Tested by

no test coverage detected