From 6ab4400ace2371847271da1d160ebbf3d1d99002 Mon Sep 17 00:00:00 2001 From: Marco Beretta <81851188+berry-13@users.noreply.github.com> Date: Mon, 22 Jun 2026 09:58:55 +0200 Subject: [PATCH] fix: cap agent abort and disconnect partial saves to the parent expiry The agents /chat/abort endpoint and the resumable disconnect handler save a partial response through saveMessage without saveConvo following, but did not pass capExpiryToConversation. In an ephemeral deployment with a parent that already has an earlier active expiredAt, the partial response got a freshly computed later deadline and outlived its conversation. Pass the same cap metadata used by the other message-only abort path so the partial response cannot outlive its parent. If generation later completes, the normal response-end save re-stamps the message with a fresh deadline. --- api/server/controllers/agents/request.js | 5 ++++- api/server/routes/agents/__tests__/abort.spec.js | 1 + api/server/routes/agents/index.js | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/api/server/controllers/agents/request.js b/api/server/controllers/agents/request.js index 0b8c0cee1a..384873cb1f 100644 --- a/api/server/controllers/agents/request.js +++ b/api/server/controllers/agents/request.js @@ -315,7 +315,10 @@ const ResumableAgentController = async (req, res, next, initializeClient, addTit interfaceConfig: req?.config?.interfaceConfig, }, partialMessage, - { context: 'api/server/controllers/agents/request.js - partial response on disconnect' }, + { + context: 'api/server/controllers/agents/request.js - partial response on disconnect', + capExpiryToConversation: true, + }, ); logger.debug( diff --git a/api/server/routes/agents/__tests__/abort.spec.js b/api/server/routes/agents/__tests__/abort.spec.js index 418c5f4254..71989f5031 100644 --- a/api/server/routes/agents/__tests__/abort.spec.js +++ b/api/server/routes/agents/__tests__/abort.spec.js @@ -285,6 +285,7 @@ describe('Agent Abort Endpoint', () => { }), expect.objectContaining({ context: 'api/server/routes/agents/index.js - abort endpoint', + capExpiryToConversation: true, }), ); }); diff --git a/api/server/routes/agents/index.js b/api/server/routes/agents/index.js index 16af74f246..45e7b67d26 100644 --- a/api/server/routes/agents/index.js +++ b/api/server/routes/agents/index.js @@ -313,7 +313,10 @@ router.post('/chat/abort', configMiddleware, async (req, res) => { interfaceConfig: req?.config?.interfaceConfig, }, responseMessage, - { context: 'api/server/routes/agents/index.js - abort endpoint' }, + { + context: 'api/server/routes/agents/index.js - abort endpoint', + capExpiryToConversation: true, + }, ); logger.debug(`[AgentStream] Saved partial response for: ${jobStreamId}`); } catch (saveError) {