From 8d82025b7032a67488422bf6900af2ceb943b0b6 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 16 Feb 2026 00:45:07 +0900 Subject: [PATCH] fix: address Cubic round-4 P2 issues - isTodo: allow optional id to match Todo interface, preventing todos without ids from being silently dropped - messageHasContentFromSDK: treat unknown part types as empty (continue) instead of content (return true) for parity with existing storage logic - readMessagesFromSDK in recover-empty-content-message-sdk: wrap SDK call in try/catch to prevent recovery from throwing --- src/features/background-agent/session-todo-checker.ts | 2 +- .../empty-content-recovery-sdk.ts | 2 +- .../session-recovery/recover-empty-content-message-sdk.ts | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/features/background-agent/session-todo-checker.ts b/src/features/background-agent/session-todo-checker.ts index 3feaedbf7..c1bad3375 100644 --- a/src/features/background-agent/session-todo-checker.ts +++ b/src/features/background-agent/session-todo-checker.ts @@ -4,7 +4,7 @@ function isTodo(value: unknown): value is Todo { if (typeof value !== "object" || value === null) return false const todo = value as Record return ( - typeof todo["id"] === "string" && + (typeof todo["id"] === "string" || todo["id"] === undefined) && typeof todo["content"] === "string" && typeof todo["status"] === "string" && typeof todo["priority"] === "string" diff --git a/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts b/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts index a2260a93a..c9ba7ed66 100644 --- a/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts +++ b/src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts @@ -32,7 +32,7 @@ function messageHasContentFromSDK(message: SDKMessage): boolean { if (TOOL_TYPES.has(type)) return true - return true + continue } return false diff --git a/src/hooks/session-recovery/recover-empty-content-message-sdk.ts b/src/hooks/session-recovery/recover-empty-content-message-sdk.ts index e40b1b8fb..e8be862a3 100644 --- a/src/hooks/session-recovery/recover-empty-content-message-sdk.ts +++ b/src/hooks/session-recovery/recover-empty-content-message-sdk.ts @@ -133,8 +133,12 @@ function sdkMessageHasContent(message: MessageData): boolean { } async function readMessagesFromSDK(client: Client, sessionID: string): Promise { - const response = await client.session.messages({ path: { id: sessionID } }) - return (response.data ?? []) as MessageData[] + try { + const response = await client.session.messages({ path: { id: sessionID } }) + return (response.data ?? []) as MessageData[] + } catch { + return [] + } } function findMessagesWithThinkingOnlyFromSDK(messages: MessageData[]): string[] {