fix: scope observation to current turn
Require assistant natural language after the latest user message so a completed prompt cannot reuse historical replies when queuing the observation snapshot.
This commit is contained in:
@@ -363,8 +363,22 @@ export function queueAgentSessionSync(
|
||||
|
||||
/** Queue the final product Conversation snapshot after a completed prompt turn. */
|
||||
export function queueCodingConversationSessionSync(snapshot: ConversationSnapshot): void {
|
||||
const messages: RawMessage[] = snapshot.nodes.flatMap((node) => {
|
||||
if (node.kind !== 'message') return [];
|
||||
const messageNodes = snapshot.nodes.filter((node) => node.kind === 'message');
|
||||
let lastUserIndex = -1;
|
||||
for (let index = messageNodes.length - 1; index >= 0; index -= 1) {
|
||||
if (messageNodes[index].role === 'user') {
|
||||
lastUserIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lastUserIndex < 0) return;
|
||||
const currentTurnAssistantIds = new Set(messageNodes
|
||||
.slice(lastUserIndex + 1)
|
||||
.filter((node) => node.role === 'assistant')
|
||||
.map((node) => node.id));
|
||||
if (currentTurnAssistantIds.size === 0) return;
|
||||
|
||||
const messages: RawMessage[] = messageNodes.flatMap((node) => {
|
||||
return [{
|
||||
id: node.id,
|
||||
role: node.role,
|
||||
@@ -384,7 +398,11 @@ export function queueCodingConversationSessionSync(snapshot: ConversationSnapsho
|
||||
messages,
|
||||
updatedAt,
|
||||
);
|
||||
if (!data?.messages.some((message) => message.role === 'assistant')) return;
|
||||
if (!data?.messages.some((message) => (
|
||||
message.role === 'assistant'
|
||||
&& typeof message.id === 'string'
|
||||
&& currentTurnAssistantIds.has(message.id)
|
||||
))) return;
|
||||
queueAgentSessionData(data);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user