MCPcopy
hub / github.com/danielmiessler/Fabric / createMessageStream

Method createMessageStream

web/src/lib/services/ChatService.ts:110–203  ·  view source on GitHub ↗
(
		reader: ReadableStreamDefaultReader<Uint8Array>,
	)

Source from the content-addressed store, hash-verified

108 }
109
110 private createMessageStream(
111 reader: ReadableStreamDefaultReader<Uint8Array>,
112 ): ReadableStream<StreamResponse> {
113 let buffer = "";
114 const language = get(languageStore);
115 const validator = new LanguageValidator(language);
116
117 const processResponse = (response: StreamResponse) => {
118 const pattern = get(selectedPatternName);
119
120 if (pattern) {
121 // Do NOT call cleanPatternOutput here - it runs on each streaming token
122 // and .trim() strips leading spaces that serve as word separators.
123 // Cleaning should be done on the final accumulated content at display time.
124
125 // Simplified format determination - always markdown unless mermaid
126 const isMermaid = [
127 "graph TD",
128 "gantt",
129 "flowchart",
130 "sequenceDiagram",
131 "classDiagram",
132 "stateDiagram",
133 ].some((starter) => response.content.trim().startsWith(starter));
134
135 response.format = isMermaid ? "mermaid" : "markdown";
136 }
137
138 if (response.type === "content") {
139 response.content = validator.enforceLanguage(response.content);
140 }
141
142 return response;
143 };
144 return new ReadableStream({
145 async start(controller) {
146 try {
147 while (true) {
148 const { done, value } = await reader.read();
149 if (done) break;
150
151 buffer += new TextDecoder().decode(value);
152 const segments = buffer.split("\n\n");
153 // Last segment may be incomplete; keep it as buffer
154 buffer = segments.pop() || "";
155 for (const segment of segments) {
156 const trimmed = segment.trim();
157 if (!trimmed.startsWith("data: ")) continue;
158 try {
159 let response = JSON.parse(
160 trimmed.slice(6),
161 ) as StreamResponse;
162
163 response = processResponse(response);
164 controller.enqueue(response);
165 } catch (parseError) {
166 console.error(
167 "Error parsing stream message:",

Callers 1

fetchStreamMethod · 0.95

Calls 1

getFunction · 0.50

Tested by

no test coverage detected