From 192a8c697c3210b7f423bf8047ee7c73bb745bb8 Mon Sep 17 00:00:00 2001 From: BillyOutlast <172061051+BillyOutlast@users.noreply.github.com> Date: Mon, 12 Oct 2026 10:52:31 -0400 Subject: [PATCH] #31 resume steer: emit AiRequestUserMessage array shape so the chat renderer survives Resume --- .../AiGeneration/Studio/UseStudioRuntime.js | 12 +++++++++++- packages/ai-studio/MANIFEST.json | 4 ++-- tests/integration/ai-byok-flow.test.mjs | 9 +++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/ai-studio/AiGeneration/Studio/UseStudioRuntime.js b/packages/ai-studio/AiGeneration/Studio/UseStudioRuntime.js index d4ef2fb..3c5e1ad 100644 --- a/packages/ai-studio/AiGeneration/Studio/UseStudioRuntime.js +++ b/packages/ai-studio/AiGeneration/Studio/UseStudioRuntime.js @@ -86,7 +86,17 @@ export const buildResumeUpdate = (aiRequest: any): any => { { type: 'message', role: 'user', - content: buildResumeSteerMessage(reason), + // Array item shape, matching AiRequestUserMessage: the chat + // message list maps/filter over message.content (#31: a bare + // string here crashed the renderer with + // "s.content.map is not a function"). + content: [ + { + type: 'user_request', + status: 'completed', + text: buildResumeSteerMessage(reason), + }, + ], messageId: `resume-steer-${Date.now()}`, }, ] diff --git a/packages/ai-studio/MANIFEST.json b/packages/ai-studio/MANIFEST.json index dd71863..25668c1 100644 --- a/packages/ai-studio/MANIFEST.json +++ b/packages/ai-studio/MANIFEST.json @@ -71,9 +71,9 @@ "sha256": "12df5f3f54a52e3c2c72646e6825360206eec0521dd6f15d73cd39660b21e0d2" }, "AiGeneration/Studio/UseStudioRuntime.js": { - "bytes": 14337, + "bytes": 14735, "origin": "newIDE/app/src/AiGeneration/Studio/UseStudioRuntime.js", - "sha256": "684f5f46c18f6b40dfadf01756ae62621e9c28a82d3a74a423bea61e09014cc3" + "sha256": "a3bb06c3d436dd869f938b86d2917626e8b368f7f61b530f3f4bbd77f71a3807" }, "dev-harness/mock-ai-provider.js": { "bytes": 9862, diff --git a/tests/integration/ai-byok-flow.test.mjs b/tests/integration/ai-byok-flow.test.mjs index b0c741b..f279dd8 100644 --- a/tests/integration/ai-byok-flow.test.mjs +++ b/tests/integration/ai-byok-flow.test.mjs @@ -619,6 +619,15 @@ describe('integration: T05 suspended UI and resume (terminal status card)', () = assert.ok(resumeSlice.includes("status: 'ready'"), 'resume must reset status to ready'); assert.ok(resumeSlice.includes('error: null'), 'resume must clear the error'); assert.ok(resumeSlice.includes('buildResumeSteerMessage'), 'resume must attach the steer prompt'); + // #31: the steer message content must be the AiRequestUserMessage array + // shape ({type:'user_request', status:'completed', text}) — the chat + // message list maps/filters over message.content, and a bare string + // crashed the renderer (s.content.map is not a function). + assert.ok(resumeSlice.includes("type: 'user_request'"), 'resume steer must use the user_request item shape'); + assert.ok( + !resumeSlice.includes('content: buildResumeSteerMessage(reason),'), + 'resume steer must not use bare string content' + ); // Clear Stalled purges exactly gd-custom-ai-requests. assert.ok( src.includes("gd-custom-ai-requests"),