feat(conversation): replicate WorkBuddy rewind-to-message action (TODO 05)

This commit is contained in:
xiaohan.yuan committed 2026-10-17 06:52:56 +08:00
1 parent 074523a501
commit c7ab047d52
11 files changed
+293 -60

No files matched your search

+6 -2
View File
@@ -494,11 +494,15 @@ async function testFeedbackAndRevert(bundle: TestBundle, state: TestState, works
assert.equal(await bundle.sessions.getPendingNativeBranch(rejectedId), undefined)
const readOnlyId = await invoke('session:create', 'read-only-revert') as { id: string }
await bundle.sessions.appendMessage(readOnlyId.id, message('read-only-user', 'user', 'read only'))
await bundle.sessions.appendMessage(readOnlyId.id, message('read-only-user', 'user', 'read only', { nativeEntryId: 'native-read-only-target' }))
await bundle.sessions.appendMessage(readOnlyId.id, message('read-only-assistant', 'assistant', 'read', {
tools: [{ id: 'read-tool', name: 'read_file', args: {}, argsRaw: '{}', status: 'ok' }]
}))
await assert.rejects(invoke('chat:revert', readOnlyId.id, 'read-only-user'), /没有可恢复/)
seedNativeHistory(state, readOnlyId.id, [['native-read-only-target', 'read only']])
// 原版 rewind 的 no-version 变体:没有产物版本时只回退对话内容,产物保持不变。
const readOnlyResult = await invoke('chat:revert', readOnlyId.id, 'read-only-user') as { messages: unknown[] }
assert.deepEqual(readOnlyResult.messages, [], 'conversation-only rewind should truncate to before the message')
assert.deepEqual(await bundle.sessions.getMessages(readOnlyId.id), [], 'conversation-only rewind should persist the truncated prefix')
const unknownPath = join(workspace, 'unknown-write.txt')
await writeFile(unknownPath, 'after', 'utf8')