Ver código fonte

test(opencode): cover bootstrap placement when native compaction retains user messages

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Drew Ritter 2 dias atrás
pai
commit
d29eaf543c
1 arquivos alterados com 23 adições e 2 exclusões
  1. 23 2
      tests/opencode/test-session-bootstrap.mjs

+ 23 - 2
tests/opencode/test-session-bootstrap.mjs

@@ -190,12 +190,33 @@ assert.equal(bootstrapCount(recoveredChild), 0);
 assert.equal(recoveredChild.messages.length, 1);
 assert.equal(retryChild.lookups.length, 2);
 
+const newPromptAfterCheckpoint = compactedEvent('new-prompt-after-checkpoint-root');
+newPromptAfterCheckpoint.messages.push({ role: 'user', content: [{ type: 'text', text: 'Continue' }] });
+await compactedRoot.invoke(newPromptAfterCheckpoint);
+assert.equal(bootstrapCount(newPromptAfterCheckpoint), 1);
+assert.equal(newPromptAfterCheckpoint.messages.length, 2);
+assert.equal(newPromptAfterCheckpoint.messages[1].content.length, 2);
+
 const retainedUser = compactedEvent('retained-user-root');
-retainedUser.messages.push({ role: 'user', content: [{ type: 'text', text: 'Continue' }] });
+retainedUser.messages.unshift({ role: 'user', content: [{ type: 'text', text: 'Keep going' }] });
+const retainedCheckpoint = structuredClone(retainedUser.messages[1]);
 await compactedRoot.invoke(retainedUser);
 assert.equal(bootstrapCount(retainedUser), 1);
 assert.equal(retainedUser.messages.length, 2);
-assert.equal(retainedUser.messages[1].content.length, 2);
+assert.equal(retainedUser.messages[0].content.length, 2);
+assert.ok(retainedUser.messages[0].content[0].text.startsWith(marker));
+assert.equal(retainedUser.messages[0].content[1].text, 'Keep going');
+assert.deepEqual(retainedUser.messages[1], retainedCheckpoint);
+await compactedRoot.invoke(retainedUser);
+assert.equal(bootstrapCount(retainedUser), 1);
+assert.equal(retainedUser.messages.length, 2);
+
+const retainedUserChild = compactedEvent('retained-user-child');
+retainedUserChild.messages.unshift({ role: 'user', content: [{ type: 'text', text: 'Keep going' }] });
+const originalRetainedUserChild = structuredClone(retainedUserChild);
+await compactedChild.invoke(retainedUserChild);
+assert.equal(bootstrapCount(retainedUserChild), 0);
+assert.deepEqual(retainedUserChild, originalRetainedUserChild);
 const empty = { sessionID: 'empty', messages: [] };
 await compactedRoot.invoke(empty);
 assert.deepEqual(empty.messages, []);