fix(pi): retain ownership for uncertain mutations

This commit is contained in:
2026-08-25 23:53:54 +08:00
parent 621ebb1781
commit 019cbb115a
21 changed files with 1113 additions and 67 deletions

View File

@@ -163,9 +163,13 @@ function withoutReconciledRequests(
snapshot: ConversationSnapshot,
): Record<string, CodingPromptRequestState> {
const reconciled = requestIdsInSnapshot(snapshot);
if (!requests || reconciled.size === 0) return requests ?? {};
const requestUncertaintySettled = snapshot.run.status === 'idle' || snapshot.run.status === 'error';
if (!requests || (reconciled.size === 0 && !requestUncertaintySettled)) return requests ?? {};
return Object.fromEntries(
Object.entries(requests).filter(([clientRequestId]) => !reconciled.has(clientRequestId)),
Object.entries(requests).filter(([clientRequestId, request]) => (
!reconciled.has(clientRequestId)
&& !(request.status === 'uncertain' && requestUncertaintySettled)
)),
);
}
@@ -962,21 +966,17 @@ export function createCodingConversationStore(
unread,
};
const requests = state.requestsByConversationId[event.conversationId] ?? {};
const reconciledRequestIds = new Set(incomingMessages.flatMap((message) => (
message.clientRequestId ? [message.clientRequestId] : []
)));
const nextRequests = reconciledRequestIds.size > 0
? Object.fromEntries(
Object.entries(requests).filter(([id]) => !reconciledRequestIds.has(id)),
)
const nextRequests = reducer.snapshot
? withoutReconciledRequests(requests, reducer.snapshot)
: requests;
const requestsChanged = Object.keys(nextRequests).length !== Object.keys(requests).length;
return {
entriesByConversationId: {
...state.entriesByConversationId,
[event.conversationId]: entry,
},
summariesByConversationId: summariesWithEntry(state.summariesByConversationId, entry),
requestsByConversationId: nextRequests === requests
requestsByConversationId: !requestsChanged
? state.requestsByConversationId
: {
...state.requestsByConversationId,