Skip to content

v0.1.16

Choose a tag to compare

@dwnmf dwnmf released this 27 Feb 21:24
· 17 commits to main since this release

Что исправлено

Исправлен баг дублирования/«каши» в стриминговом выводе сообщений и tool-ошибок (когда фрагменты приходят перекрывающимися или как снимок целого текста, а не чистый delta).

Симптомы до фикса

  • Повторяющиеся куски текста в ответах (например, Готово...Готово... и т.п.).
  • Нечитаемые длинные строки в сообщениях и ошибках инструментов.

Root cause

Клиентская функция склейки стрима в src/lib/message-limits.ts всегда делала простое current + delta.
При перекрывающихся чанках или snapshot-чанках это порождало экспоненциальные повторы текста в UI.

Технические изменения

src/lib/message-limits.ts

  • Добавлен mergeStreamingChunk(current, chunk):
    • если chunk уже содержит current как префикс -> берём chunk;
    • если current уже заканчивается chunk -> оставляем current;
    • иначе ищем максимальный overlap (suffix(current) == prefix(chunk)) и добавляем только недостающую часть;
    • fallback: обычная конкатенация.
  • appendDeltaWithCap(...) теперь использует merge перед ограничением длины и безопасной обрезкой.

src/lib/message-limits.test.ts

  • Добавлены тесты:
    • snapshot-чанки не дублируют текст;
    • overlap-чанки склеиваются один раз без повторов.

Проверка

  • bun run test src/lib/message-limits.test.ts — PASS
  • bun run ci:local — PASS (lint + typecheck + tests + build)

Коммит

  • 51ffd6f fix(stream): dedupe overlapping chunks to prevent repeated output