@@ -157,24 +157,61 @@ export const POST: APIRoute = async ({ request }) => {
157157 messages : coreMessages ,
158158 tools,
159159 stopWhen : isStepCount ( 10 ) ,
160- onFinish : async ( ) => {
161- try {
162- if ( mcpClient ) {
163- await mcpClient . close ( ) ;
164- }
165- } catch {
166- // Ignore cleanup errors
167- }
160+ onError : ( { error } ) => {
161+ console . error ( "[StreamText Internal Error]" , error ) ;
168162 } ,
169163 } ) ;
170164
171- const textResponse = result . toTextStreamResponse ( ) ;
172- const headers = new Headers ( textResponse . headers ) ;
173- headers . set ( "access-control-allow-origin" , "*" ) ;
174- return new Response ( textResponse . body , {
175- status : textResponse . status ,
176- statusText : textResponse . statusText ,
177- headers,
165+ // Pipe text stream through TransformStream with explicit error surface
166+ const transformStream = new TransformStream ( ) ;
167+ const writer = transformStream . writable . getWriter ( ) ;
168+ const encoder = new TextEncoder ( ) ;
169+
170+ ( async ( ) => {
171+ try {
172+ let hasOutput = false ;
173+ for await ( const chunk of result . textStream ) {
174+ if ( chunk ) {
175+ hasOutput = true ;
176+ await writer . write ( encoder . encode ( chunk ) ) ;
177+ }
178+ }
179+ if ( ! hasOutput ) {
180+ // Fallback: check full text from result in case textStream did not emit intermediate text
181+ const fullText = await result . text ;
182+ if ( fullText ) {
183+ await writer . write ( encoder . encode ( fullText ) ) ;
184+ } else {
185+ await writer . write (
186+ encoder . encode (
187+ "I searched the CodingCat.dev dataset for your query, but did not find any matching results." ,
188+ ) ,
189+ ) ;
190+ }
191+ }
192+ } catch ( streamErr ) {
193+ console . error ( "[StreamText Stream Loop Error]" , streamErr ) ;
194+ const errMsg =
195+ streamErr instanceof Error ? streamErr . message : String ( streamErr ) ;
196+ await writer . write (
197+ encoder . encode ( `\n\n[Error generating response: ${ errMsg } ]` ) ,
198+ ) ;
199+ } finally {
200+ await writer . close ( ) ;
201+ if ( mcpClient ) {
202+ try {
203+ await mcpClient . close ( ) ;
204+ } catch { }
205+ }
206+ }
207+ } ) ( ) ;
208+
209+ return new Response ( transformStream . readable , {
210+ headers : {
211+ "content-type" : "text/plain; charset=utf-8" ,
212+ "access-control-allow-origin" : "*" ,
213+ "cache-control" : "no-cache" ,
214+ } ,
178215 } ) ;
179216 } catch ( err ) {
180217 try {
0 commit comments