| 889 | } |
| 890 | |
| 891 | private mergeAgentState(oldState: unknown | null, newState: unknown | null): unknown | null { |
| 892 | if (oldState === null) return newState |
| 893 | if (newState === null) return oldState |
| 894 | |
| 895 | const oldObj = oldState as Record<string, unknown> |
| 896 | const newObj = newState as Record<string, unknown> |
| 897 | |
| 898 | const completedRequests = { |
| 899 | ...((oldObj.completedRequests as Record<string, unknown> | undefined) ?? {}), |
| 900 | ...((newObj.completedRequests as Record<string, unknown> | undefined) ?? {}) |
| 901 | } |
| 902 | // Filter out requests that are already completed to avoid resurrecting them as pending |
| 903 | const completedIds = new Set(Object.keys(completedRequests)) |
| 904 | const requests = Object.fromEntries( |
| 905 | Object.entries({ |
| 906 | ...((oldObj.requests as Record<string, unknown> | undefined) ?? {}), |
| 907 | ...((newObj.requests as Record<string, unknown> | undefined) ?? {}) |
| 908 | }).filter(([id]) => !completedIds.has(id)) |
| 909 | ) |
| 910 | |
| 911 | return { ...oldObj, ...newObj, requests, completedRequests } |
| 912 | } |
| 913 | |
| 914 | private extractAgentSessionId( |
| 915 | metadata: NonNullable<Session['metadata']> |