Skip to content

Commit 4545575

Browse files
committed
fix: persist mock stream messages to history on completion
- Call HistoryService.updateHistory when stream-end fires in mock mode - Mirrors real StreamManager behavior to persist completed messages - Prevents empty assistant entries in chat.jsonl after mock runs - Addresses Codex review comment about mock persistence Change-Id: I4f4cd7fe27355a561cd4e2193a4045424918dd1e Signed-off-by: Thomas Kosiewski <tk@coder.com>
1 parent 257b36e commit 4545575

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

src/services/mock/mockScenarioPlayer.ts

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,18 +125,18 @@ export class MockScenarioPlayer {
125125

126126
for (const event of turn.assistant.events) {
127127
const timer = setTimeout(() => {
128-
this.dispatchEvent(workspaceId, event, turn.assistant.messageId, historySequence);
128+
void this.dispatchEvent(workspaceId, event, turn.assistant.messageId, historySequence);
129129
}, event.delay);
130130
timers.push(timer);
131131
}
132132
}
133133

134-
private dispatchEvent(
134+
private async dispatchEvent(
135135
workspaceId: string,
136136
event: MockAssistantEvent,
137137
messageId: string,
138138
historySequence: number
139-
): void {
139+
): Promise<void> {
140140
switch (event.kind) {
141141
case "stream-start": {
142142
const payload: StreamStartEvent = {
@@ -216,6 +216,34 @@ export class MockScenarioPlayer {
216216
},
217217
parts: event.parts,
218218
};
219+
220+
// Update history with completed message (mirrors real StreamManager behavior)
221+
// Fetch the current message from history to get its historySequence
222+
const historyResult = await this.deps.historyService.getHistory(workspaceId);
223+
if (historyResult.success) {
224+
const existingMessage = historyResult.data.find((msg) => msg.id === messageId);
225+
if (existingMessage?.metadata?.historySequence !== undefined) {
226+
const completedMessage: CmuxMessage = {
227+
id: messageId,
228+
role: "assistant",
229+
parts: event.parts,
230+
metadata: {
231+
...existingMessage.metadata,
232+
model: event.metadata.model,
233+
systemMessageTokens: event.metadata.systemMessageTokens,
234+
},
235+
};
236+
const updateResult = await this.deps.historyService.updateHistory(
237+
workspaceId,
238+
completedMessage
239+
);
240+
241+
if (!updateResult.success) {
242+
console.error(`Failed to update history for ${messageId}: ${updateResult.error}`);
243+
}
244+
}
245+
}
246+
219247
this.deps.aiService.emit("stream-end", payload);
220248
this.cleanup(workspaceId);
221249
break;

0 commit comments

Comments
 (0)