[bug][mcp] replaceImage всё ещё дёргает курсор: mutateLiveContentUnlocked пишет деструктивно (продолжение #152) #164
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Выделено из ревью PR #154 (suggestion 4).
Симптом
Фикс #152 (структурный диф через
applyDocToFragment/updateYFragment, сохраняющий Yjs-id и якорь курсора) применён к основному write-пути, но путь замены изображения остался на старом деструктивном write-back. Значит для инструментаreplaceImageпрыжок курсора #152 всё ещё воспроизводится.Где
packages/mcp/src/client.ts—mutateLiveContentUnlocked(≈ L489–491) делает по-старому:Используется из
replaceImage(см.client.ts:2659и:2713).Предлагаемая правка
Перевести
mutateLiveContentUnlockedна тот жеapplyDocToFragment(ydoc, newDoc), что и основной путь, чтобы диф сохранял id неизменных узлов и якорь курсора. Сопроводить тестом на этот путь (по образцуcomment-cursor-stability.test.mjs): курсор/RelativePosition в неизменном узле переживает замену изображения.Заметки
ydoc.transact) и совместимостьupdateYFragmentс узлом image на верхнем/вложенном уровне.