Skip to content

Commit 5fe9c04

Browse files
author
zip700
committed
Preserve live turn ids for edit regeneration
1 parent 767bb83 commit 5fe9c04

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/features/app/hooks/useAppServerEvents.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ describe("useAppServerEvents", () => {
6161
onPlanDelta: vi.fn(),
6262
onApprovalRequest: vi.fn(),
6363
onRequestUserInput: vi.fn(),
64+
onItemStarted: vi.fn(),
6465
onItemCompleted: vi.fn(),
6566
onAgentMessageCompleted: vi.fn(),
6667
onAccountRateLimitsUpdated: vi.fn(),
@@ -324,6 +325,7 @@ describe("useAppServerEvents", () => {
324325
method: "item/completed",
325326
params: {
326327
threadId: "thread-1",
328+
turnId: "turn-2",
327329
item: { type: "agentMessage", id: "item-2", text: "Done" },
328330
},
329331
},
@@ -332,6 +334,7 @@ describe("useAppServerEvents", () => {
332334
expect(handlers.onItemCompleted).toHaveBeenCalledWith("ws-1", "thread-1", {
333335
type: "agentMessage",
334336
id: "item-2",
337+
turnId: "turn-2",
335338
text: "Done",
336339
});
337340
expect(handlers.onAgentMessageCompleted).toHaveBeenCalledWith({
@@ -341,6 +344,25 @@ describe("useAppServerEvents", () => {
341344
text: "Done",
342345
});
343346

347+
act(() => {
348+
listener?.({
349+
workspace_id: "ws-1",
350+
message: {
351+
method: "item/started",
352+
params: {
353+
threadId: "thread-1",
354+
turnId: "turn-3",
355+
item: { type: "userMessage", id: "item-3" },
356+
},
357+
},
358+
});
359+
});
360+
expect(handlers.onItemStarted).toHaveBeenCalledWith("ws-1", "thread-1", {
361+
type: "userMessage",
362+
id: "item-3",
363+
turnId: "turn-3",
364+
});
365+
344366
act(() => {
345367
listener?.({
346368
workspace_id: "ws-1",

src/features/app/hooks/useAppServerEvents.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,10 @@ export function useAppServerEvents(handlers: AppServerEventHandlers) {
467467
if (method === "item/completed") {
468468
const threadId = String(params.threadId ?? params.thread_id ?? "");
469469
const item = params.item as Record<string, unknown> | undefined;
470+
const turnId = String(params.turnId ?? params.turn_id ?? "").trim();
470471
if (threadId && item) {
471-
currentHandlers.onItemCompleted?.(workspace_id, threadId, item);
472+
const itemWithTurnId = turnId ? { ...item, turnId } : item;
473+
currentHandlers.onItemCompleted?.(workspace_id, threadId, itemWithTurnId);
472474
}
473475
if (threadId && item?.type === "agentMessage") {
474476
const itemId = String(item.id ?? "");
@@ -488,8 +490,10 @@ export function useAppServerEvents(handlers: AppServerEventHandlers) {
488490
if (method === "item/started") {
489491
const threadId = String(params.threadId ?? params.thread_id ?? "");
490492
const item = params.item as Record<string, unknown> | undefined;
493+
const turnId = String(params.turnId ?? params.turn_id ?? "").trim();
491494
if (threadId && item) {
492-
currentHandlers.onItemStarted?.(workspace_id, threadId, item);
495+
const itemWithTurnId = turnId ? { ...item, turnId } : item;
496+
currentHandlers.onItemStarted?.(workspace_id, threadId, itemWithTurnId);
493497
}
494498
return;
495499
}

0 commit comments

Comments
 (0)