@@ -2701,6 +2701,76 @@ describe("TriggerChatTransport", function () {
27012701 expect ( runStore . deleteCalls ) . toContain ( "chat-cleanup-set-failure" ) ;
27022702 } ) ;
27032703
2704+ it ( "keeps completed streams successful when cleanup set and delete both fail" , async function ( ) {
2705+ const errors : TriggerChatTransportError [ ] = [ ] ;
2706+ const runStore = new FailingCleanupSetAndDeleteRunStore ( 4 ) ;
2707+
2708+ const server = await startServer ( function ( req , res ) {
2709+ if ( req . method === "POST" && req . url === "/api/v1/tasks/chat-task/trigger" ) {
2710+ res . writeHead ( 200 , {
2711+ "content-type" : "application/json" ,
2712+ "x-trigger-jwt" : "pk_run_cleanup_set_delete_failure" ,
2713+ } ) ;
2714+ res . end ( JSON . stringify ( { id : "run_cleanup_set_delete_failure" } ) ) ;
2715+ return ;
2716+ }
2717+
2718+ if (
2719+ req . method === "GET" &&
2720+ req . url === "/realtime/v1/streams/run_cleanup_set_delete_failure/chat-stream"
2721+ ) {
2722+ res . writeHead ( 200 , {
2723+ "content-type" : "text/event-stream" ,
2724+ } ) ;
2725+ writeSSE (
2726+ res ,
2727+ "1-0" ,
2728+ JSON . stringify ( { type : "text-start" , id : "cleanup_set_delete_failure_1" } )
2729+ ) ;
2730+ writeSSE (
2731+ res ,
2732+ "2-0" ,
2733+ JSON . stringify ( { type : "text-end" , id : "cleanup_set_delete_failure_1" } )
2734+ ) ;
2735+ res . end ( ) ;
2736+ return ;
2737+ }
2738+
2739+ res . writeHead ( 404 ) ;
2740+ res . end ( ) ;
2741+ } ) ;
2742+
2743+ const transport = new TriggerChatTransport ( {
2744+ task : "chat-task" ,
2745+ stream : "chat-stream" ,
2746+ accessToken : "pk_trigger" ,
2747+ baseURL : server . url ,
2748+ runStore,
2749+ onError : function onError ( error ) {
2750+ errors . push ( error ) ;
2751+ } ,
2752+ } ) ;
2753+
2754+ const stream = await transport . sendMessages ( {
2755+ trigger : "submit-message" ,
2756+ chatId : "chat-cleanup-set-delete-failure" ,
2757+ messageId : undefined ,
2758+ messages : [ ] ,
2759+ abortSignal : undefined ,
2760+ } ) ;
2761+
2762+ const chunks = await readChunks ( stream ) ;
2763+ expect ( chunks ) . toHaveLength ( 2 ) ;
2764+ expect ( errors ) . toHaveLength ( 0 ) ;
2765+
2766+ await waitForCondition ( function ( ) {
2767+ const state = runStore . get ( "chat-cleanup-set-delete-failure" ) ;
2768+ return Boolean ( state && state . isActive === true && state . lastEventId === "2-0" ) ;
2769+ } ) ;
2770+ expect ( runStore . setCalls ) . toContain ( "chat-cleanup-set-delete-failure" ) ;
2771+ expect ( runStore . deleteCalls ) . toContain ( "chat-cleanup-set-delete-failure" ) ;
2772+ } ) ;
2773+
27042774 it ( "returns null from reconnect after stream completion cleanup" , async function ( ) {
27052775 const server = await startServer ( function ( req , res ) {
27062776 if ( req . method === "POST" && req . url === "/api/v1/tasks/chat-task/trigger" ) {
0 commit comments