From a5eb0c65830d195322426a363058c2c4aa0c4768 Mon Sep 17 00:00:00 2001 From: UtkarshUsername Date: Fri, 30 Oct 2026 14:18:23 +0530 Subject: [PATCH 1/2] perf(client): skip idle inbox placement serialization --- .../src/state/threadInbox.test.ts | 2 ++ .../client-runtime/src/state/threadInbox.ts | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/client-runtime/src/state/threadInbox.test.ts b/packages/client-runtime/src/state/threadInbox.test.ts index 35c7fa8355e39..8d898ed326cee 100644 --- a/packages/client-runtime/src/state/threadInbox.test.ts +++ b/packages/client-runtime/src/state/threadInbox.test.ts @@ -45,7 +45,9 @@ describe("createInboxReturnTracker", () => { }); it("stamps a thread when it stops working, but never on the first observation", () => { const tracker = createInboxReturnTracker(); + using stringify = vi.spyOn(JSON, "stringify"); const first = tracker.observe([thread("a", true), thread("b", false)]); + expect(stringify).toHaveBeenCalledTimes(1); expect(first.returnedAt(thread("a", true))).toBeUndefined(); expect(first.returnedAt(thread("b", false))).toBeUndefined(); diff --git a/packages/client-runtime/src/state/threadInbox.ts b/packages/client-runtime/src/state/threadInbox.ts index de9cd822398d0..93b38fbb98042 100644 --- a/packages/client-runtime/src/state/threadInbox.ts +++ b/packages/client-runtime/src/state/threadInbox.ts @@ -123,7 +123,7 @@ export function createInboxReturnTracker() { const keyOf = (thread: ThreadKeyInput) => `${thread.environmentId}:${thread.id}`; const states = new Map< string, - { working: boolean; deadline: number | null; placement: string } + { working: boolean; deadline: number | null; placement: string | null } >(); const returns = new Map(); const listeners = new Set<() => void>(); @@ -184,17 +184,21 @@ export function createInboxReturnTracker() { for (const thread of threads) { const key = keyOf(thread); present.add(key); - const placement = JSON.stringify([ - thread.archivedAt, - thread.deletedAt, - thread.pinnedAt, - thread.settledOverride, - thread.settledAt, - thread.snoozedAt, - thread.snoozedUntil, - thread.activeOrderKey, - ]); const previous = states.get(key); + const actual = isThreadWorking(thread); + const placement = + actual || previous?.working + ? JSON.stringify([ + thread.archivedAt, + thread.deletedAt, + thread.pinnedAt, + thread.settledOverride, + thread.settledAt, + thread.snoozedAt, + thread.snoozedUntil, + thread.activeOrderKey, + ]) + : null; const actionable = thread.hasPendingApprovals || thread.hasPendingUserInput || @@ -210,7 +214,6 @@ export function createInboxReturnTracker() { thread.pinnedAt != null || thread.settledOverride === "settled" || effectiveSnoozed(thread, { now: observedAt }); - const actual = isThreadWorking(thread); // Only shelf placement is held: execution state and attention requests stay authoritative. const deadline = !actual && previous?.working && !actionable && !moved && !excluded From 4dc8cef4af59af9732dd433b7becca5c1425621a Mon Sep 17 00:00:00 2001 From: maria-rcks Date: Mon, 2 Nov 2026 02:19:13 +0000 Subject: [PATCH 2/2] test(client): keep inbox return assertions behavioral --- packages/client-runtime/src/state/threadInbox.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/client-runtime/src/state/threadInbox.test.ts b/packages/client-runtime/src/state/threadInbox.test.ts index 8d898ed326cee..35c7fa8355e39 100644 --- a/packages/client-runtime/src/state/threadInbox.test.ts +++ b/packages/client-runtime/src/state/threadInbox.test.ts @@ -45,9 +45,7 @@ describe("createInboxReturnTracker", () => { }); it("stamps a thread when it stops working, but never on the first observation", () => { const tracker = createInboxReturnTracker(); - using stringify = vi.spyOn(JSON, "stringify"); const first = tracker.observe([thread("a", true), thread("b", false)]); - expect(stringify).toHaveBeenCalledTimes(1); expect(first.returnedAt(thread("a", true))).toBeUndefined(); expect(first.returnedAt(thread("b", false))).toBeUndefined();