Резервное копирование и восстановление чатов
Если боковая панель не может загрузить сохранённые чаты, она показывает известную причину ошибки хранилища на языке интерфейса вместе с кнопкой Повторить. Ошибка чтения с диска описывается как проблема чтения. Для неизвестных ошибок остаётся общее сообщение о загрузке; внутренние сведения базы данных в нём не показываются.
Большие сохранённые сообщения и карточки инструментов остаются доступными после перезагрузки или повторного открытия чата, в том числе когда Kodik уже освободил историю из памяти. Содержимое запрошенной страницы истории загружается частями, после чего временные дескрипторы хранилища освобождаются.
При сохранении нового ответа или результата инструмента Kodik определяет его позицию по последней сохранённой записи истории модели. В длинных чатах больше не нужно перечитывать всю историю для каждой новой записи.
Хранилище сохранённых чатов обновляется на месте до формата 14. После подготовки чата страницы истории читают только ссылки на выбранные записи и их содержимое. Старому чату нужна однократная подготовка сохраняемыми порциями; её длительность зависит от объёма истории. Другие чаты могут продолжать сохраняться, а после перезапуска прерванная подготовка возобновляется. Резервные копии форматов с 3 по 13 по-прежнему можно восстановить.
При восстановлении после перезапуска Kodik читает по одному активному субагенту и пропускает записи удалённых чатов ограниченными порциями. Другие сохранённые записи чатов не участвуют в этом поиске. Создание индекса восстановления при первом обновлении всё ещё зависит от объёма сохранённых данных.
Во время подготовки панель чата показывает Подготавливаем сохранённую историю… и продолжает ждать, пока получает обновления от хранилища. В это время можно пользоваться боковой панелью и другими чатами. Если обновления прекращаются, появляется Повторить; повторная попытка продолжает сохранённый прогресс подготовки.
После перезагрузки окна боковая панель и выбранный чат становятся доступны, пока Kodik восстанавливает очереди сообщений других чатов. Каждый восстановленный чат дожидается своей очереди и сохранённой переписки, прежде чем показать поле ввода. Изменения, удаления и отправка сообщений во время чтения очереди сохраняются; строки, которые локально не менялись, обновляются по данным, сохранённым другим окном.
Восстановление прерванных ходов также дожидается только сохранённого состояния выбранного чата перед отправкой ответа. Ошибка в другом отдельном чате не блокирует его; ошибка всего хранилища по-прежнему запрещает новые сохранения до успешного восстановления. Если такая ошибка возникает, пока изменение ожидает сохранения, Kodik сообщает о ней до применения изменения. Повторите действие после восстановления хранилища.
Сохранение новых сообщений выполняется раньше ожидающей фоновой очистки. Автоматическая очистка освобождает страницы постепенно или оставляет свободное место для повторного использования в старых хранилищах; она не переписывает весь файл во время простоя. Проверка заново построенного индекса идёт параллельно сохранению ответов. Повторные страницы истории используют сохранённый кеш, даже если другой чат изменился.
Проверка неиспользуемых файлов идёт небольшими порциями с сохранением прогресса, поэтому сообщения и вложения можно сохранять, пока очистка проверяет большой файл. Перед удалением она повторно проверяет ссылки, открытые чтения и ещё действующие завершённые загрузки. Отмена проверки сохраняет файл, а завершение работы дожидается окончания уже начатого чтения.
Если эта сборка встречает хранилище, созданное более новой версией Kodik, боковая панель сообщает: Это хранилище чатов создано более новой версией Kodik. Обновите Kodik, чтобы открыть его; ничего не изменено. Хранилище остаётся на месте, а кнопка сброса для этой несовместимости не предлагается. Откройте его совместимой более новой сборкой. Старые версии, выпущенные до этой защиты, всё ещё могут отложить более новое хранилище и начать с пустой истории.
Ветвление сохраняет уведомления о восстановленных контрольных точках из своей истории, даже если исходный чат позже изменит эту точку.
На медленных компьютерах через несколько секунд чат показывает не только индикатор загрузки, но и сообщение Открываем хранилище чатов… или Загружаем ваши чаты…. Это не ошибка: загрузка продолжается, и чат открывается автоматически, когда всё готово. Через минуту в сообщении появляется кнопка Повторить, которая запускает загрузку заново. После сбоя или выхода из приложения во время работы агента чат открывается сразу, а изменения, которые пропустил индекс чатов, применяются в фоне. Если индекс отсутствует или повреждён либо обновление меняет его формат, чат тоже открывается сразу: список чатов и переписка читаются прямо из сохранённой истории, пока в фоне строится новый индекс. Если закрыть Kodik во время построения, следующий запуск продолжит его, а не начнёт сначала. Если фоновый процесс агента остановился и не может автоматически перезапуститься, экран восстановления появляется сразу.
После большого объёма работы с чатами Kodik отличает новые данные журнала от места, оставленного для повторного использования, и не запускает лишнее обслуживание хранилища. Новые данные и установленное число записей по-прежнему запускают контрольные точки журнала.
Временные ошибки чтения SQLite обрабатываются ограниченными повторными попытками. Если индекс чатов отстаёт, Kodik читает согласованный снимок канонической истории, сохраняя порядок страниц и границы ветвлений. Если процесс хранилища перезапускается во время первой загрузки истории, список автоматически загружается повторно после подключения.
В Windows сохранение содержимого чата повторяет попытки при кратковременной блокировке файла в течение примерно одной секунды. Если другой процесс освободит файл за это время, сохранение продолжится автоматически. Длительная блокировка и другие ошибки диска по-прежнему останавливают сохранение, не заменяя существующий файл неполными данными.
Очистка использованных манифестов временного содержимого повторяет попытки при таких же кратковременных блокировках Windows. Удаление манифеста не удаляет каноническое содержимое; длительная ошибка очистки по-прежнему сообщается.
Краткие диагностические фрагменты хранят в памяти только показанное начало текста. Это не сокращает сохранённую историю чата или точные данные для продолжения у провайдера; неполные диагностические фрагменты по-прежнему не используются для повторного выполнения.
Журнал восстановления в памяти хранит последний снимок диалога для каждого незавершённого запроса. Заменённые снимки и снимки завершённых запросов освобождаются, а события выполнения остаются доступны. Сообщения из сохранённой истории при этом не удаляются.
Пока запись недоступна, сохранённую историю чатов можно читать даже после перезагрузки окна. Отправка приостанавливается, а текст в поле ввода сохраняется. Когда запись возобновится, сохранённые настройки сессии и другие сведения загрузятся повторно; временные значения в интерфейсе не перезаписывают их.
Подготовленная история читается постранично из опубликованной копии и тогда, когда основную базу данных не удаётся открыть. Kodik читает запрошенные карточки без повторной обработки всей переписки. После восстановления хранилища обновление истории сохраняет только что отправленное сообщение и его стабильный идентификатор, даже если отправка завершилась раньше обновления. Сообщение и ответ сохраняются вместе. Если чтение полной истории совпало с отправкой, его можно повторить после завершения отправки.
Новый чат, чьё первое сообщение было отклонено до принятия, не появляется ни в истории, ни в боковой панели — в том числе после перезагрузки окна: сообщение возвращается в поле ввода, а повторная отправка доставляет его один раз в том же чате.
Если запуск хранилища завершается ошибкой, а прерванный запрос не позволяет освободить блокировку записи, Kodik автоматически перезапускает процесс хранилища. Данные запроса и сведения о владельце блокировки сохраняются для безопасного восстановления. Повторные попытки больше не остаются заблокированными собственным процессом; перезагружать окно не требуется.
Соединения для чтения остаются под контролем до успешного закрытия. При ошибке очистки Kodik не накапливает новые соединения взамен незакрытых и автоматически перезапускает процесс хранилища. При штатном завершении уже начатые операции чтения заканчиваются до освобождения хранилища.
При кратковременной ошибке открытия Kodik сначала повторяет попытки запуска хранилища, не переводя чат сразу в режим чтения. Если доступ всё ещё заблокирован, Kodik не показывает уведомлений: можно продолжать набирать текст, а кнопка Отправить недоступна, пока доступ не вернётся. Фоновая попытка начинается через секунду; при длительной блокировке интервал постепенно увеличивается до минуты. После восстановления отправка снова становится доступной. Черновик не отправляется без вашего действия. Сам по себе режим чтения не означает потерю сообщения. Пока доступ заблокирован, список чатов и статус каждого чата продолжают загружаться из последней сохранённой копии истории.
При перезапуске Kodik находит владельцев прерванных ходов, не загружая остальные сохранённые документы. Для длительных чтений восстановления выделено не более четырёх подключений со снимками, поэтому обычное чтение истории остаётся доступным. Если снимок задерживает контрольную точку журнала, диагностическое предупреждение указывает владельца, этап и возраст самого старого читателя без содержимого чата.
Фоновые построения индекса, резервные копии и экспорт отслеживают выполненную работу. Если владелец не продвигается две минуты, он теряет право публиковать результат и дожидается завершения очистки SQLite, прежде чем освобождать хранилище. Отмена резервного копирования останавливает его между порциями страниц. Экспорт нескольких чатов в Markdown публикует всю выбранную папку целиком, поэтому задержка при чтении следующего чата не оставляет частично опубликованную подборку.
Чтение полного транскрипта продолжается, даже если в это время сохраняется черновик, название чата или другой чат. Если между страницами меняются сообщения или восстановленная история, Kodik начинает чтение заново, чтобы не смешивать разные версии истории. Если диалог продолжает меняться, полное чтение всё ещё может не завершиться.
При сохраняющейся ошибке открытия рядом с хранилищем остаётся диагностический файл storage-open-failure-*.json, в том числе если ошибка возникла до открытия самой базы. Он содержит код ошибки и сведения о доступе к файлам без содержимого чатов. Частота создания и количество таких файлов ограничены. Проверки хранилища распознают сохранённые отчёты: само их наличие не делает исправное хранилище деградировавшим. Повторные попытки не снимают блокировку живого процесса записи и не сбрасывают историю.
Автоматическое восстановление подготавливает и проверяет новую базу до перемещения повреждённой. Если процесс прервётся между этими шагами, следующий запуск продолжит записанную операцию, а не сочтёт отсутствие активного файла пустой историей. Временная ошибка ввода-вывода при извлечении данных останавливает попытку и не считается признаком нечитаемых записей. Повреждённый оригинал остаётся доступен для восстановления.
Помимо трёх новейших копий и новейшей копии за одну из прошлых недель, Kodik сохраняет проверенную копию с наибольшим объёмом истории чатов. То же правило действует для настроенного дополнительного места резервного копирования. Перед удалением старых дополнительных копий Kodik проверяет и синхронизирует скопированные файлы и каталог; при ошибке синхронизации старые копии сохраняются. Восстановление и сброс ждут подтверждённого завершения процесса хранилища перед заменой активного каталога.
Kodik хранит стенограммы чатов профиля, точное продолжение провайдера, черновики, вложения, контрольные точки, Goals, планы, запуски воркеров и записи Team Board в одном локальном каноническом хранилище. Вторая копия истории в другом формате не записывается, а автоматического возврата к старым данным нет.
Если работа компьютера прекращается после того, как SQLite зафиксировал данные в журнале упреждающей записи, но до переноса этих страниц в основной файл базы, при запуске Kodik проверяет полную составную базу и применяет это зафиксированное состояние. Это не миграция и не скрытое исправление по принципу best effort: составное представление должно точно соответствовать схеме SessionStore, её возможностям, внешним ключам и проверкам целостности. В противном случае Kodik оставляет файлы без изменений и отказывается открывать хранилище.
При открытии большого чата сначала загружается ограниченная последняя страница. Более старые строки подгружаются при прокрутке, а точное продолжение провайдера остаётся в фоновом хосте и читается только перед выполнением.
История чатов может завершить загрузку, пока другие чаты продолжают сохранять изменения. Последующие изменения появляются в списке без повторной перезагрузки окна.
Если Kodik закрывается во время ответа, после повторного открытия этот ход помечается как прерванный, а предыдущая история сохраняется. Когда восстановление завершится, можно отправить следующее сообщение в том же чате. Если сохранить сообщение не удалось, его текст остаётся в поле ввода вместе с понятной причиной и кнопкой Повторить.
После перезагрузки окна карточки инструментов восстанавливаются из канонических записей представления, а не собираются заново по короткому текстовому превью. Поэтому сохраняются группы результатов и данные продолжения поиска, команды и вывод терминала, идентификатор и отчёт саб-агента, пути к файлам и прочитанные диапазоны, сводки изменений, сведения памяти и снимки экрана браузера. Если перезагрузка прерывает работающий инструмент, его статус восстановления объединяется с последним полным снимком карточки перед закрытием окна, поэтому уже полученный вывод терминала не заменяется общей карточкой отмены.
При удалении задачи незавершённое владение ходом снимается в той же транзакции хранилища. После перезапуска восстановление игнорирует удалённые задачи, поэтому задача, ранее зависшая в состоянии Working, не может заблокировать запросы в новых или существующих чатах.
После перезапуска отправка сообщения ждёт завершения восстановления чата. Временный сбой восстановления автоматически повторяется до того, как отправка завершится ошибкой. Если результат восстановления уже сохранён, но подтверждение потеряно, Kodik продолжает с сохранённого состояния, не повторяя прерванный запрос провайдера или действие инструмента.
Новые уведомления о том, что перезапуск службы чата прервал или отменил ответ, отображаются на языке интерфейса, в том числе после перезагрузки окна. Ответ модели и сохранённая история запросов провайдера сохраняют исходный текст. Старые уведомления, сохранённые без признака восстановления, сохраняют исходную формулировку.
Все подключения к чату используют один активный ход, поэтому Stop достигает подключения, которому принадлежит выполняющийся запрос. Длительная работа агента не ограничена числом сообщений или вызовов инструментов в контексте; суммаризацию запускает только окно токенов модели. Если сохранённый ход чата не удаётся прочитать, Kodik восстанавливает его по сохранённой истории этого чата или завершает ход как прерванный, чтобы чат снова принимал сообщения. Такой чат не блокирует другие и новые чаты, и сброс не требуется; всё хранилище может затронуть только физическое повреждение базы данных. При ошибке подготовки Chat сохраняет исходную причину для сообщения об ошибке и действия Retry.
Резервная копия, экспорт и восстановление
Заголовок раздела «Резервная копия, экспорт и восстановление»Откройте палитру команд и выполните одно из действий:
- Kodik: Back Up Chat Sessions создаёт новую самодостаточную папку с канонической базой, манифестом и всеми связанными объектами. Резервная копия фиксирует одну согласованную границу, а каждый файл проверяется до публикации. Существующая папка не перезаписывается и не дополняется. Если папка назначения отсутствует или недоступна для записи, резервное копирование завершается ошибкой хранилища, а чат продолжает работать.
- Kodik: Export Chat Sessions создаёт переносимый JSON с читаемой историей диалогов. Этот формат намеренно неполный: он не переносит точное продолжение провайдера, вложения, связи с рабочей областью, контрольные точки и закрытое состояние функций; список потерь сохраняется для каждой сессии.
- Kodik: Restore Chat Sessions From Backup полностью проверяет выбранную резервную копию до показа предупреждения. После подтверждения Kodik заменяет рабочее хранилище и открывает восстановленные данные. При сбое остаётся либо прежнее полное хранилище, либо восстановленное полное хранилище, но не их частичная смесь.
Резервные копии и переносимый экспорт содержат текст чатов в открытом виде. Они не зашифрованы и не подписаны, поэтому храните их как конфиденциальные локальные файлы.
При восстановлении резервной копии во время работы чата открытые разговоры и поля ввода обновляются автоматически. Неотправленные черновики сессий, в том числе в скрытых вкладках, возвращаются к состоянию из резервной копии. Черновики новых чатов, ещё не связанных с сессией, сохраняют локальное содержимое. Следующее сообщение можно отправить из восстановленной истории без перезагрузки окна. Ожидающие сохранения и подготовка отправки, связанные с прежним хранилищем, останавливаются и не повторяются в восстановленной копии. После завершения восстановления начните новое изменение или отправьте сообщение снова. После восстановления активность сессий и завершённые ответы из других открытых окон продолжают обновляться.
Если одна сессия открыта в нескольких окнах, поле ввода без новых локальных изменений следует сохранённому черновику. Отправка этого черновика в одном окне очищает его в остальных таких полях ввода. Новые несохранённые локальные изменения остаются доступными при согласовании черновиков.
Восстановление запускается только явно и останавливается при любой непроверенной ситуации. Отсутствующая, повреждённая, неполная, несовместимая, содержащая символические ссылки или небезопасная копия отклоняется до замены рабочих данных. Kodik не создаёт пустое хранилище ради продолжения запуска.
Команда восстановления доступна, даже если текущая база повреждена и не открывается. Выбранная резервная копия проверяется независимо; отмена оставляет повреждённые данные без изменений. После успешного восстановления Kodik сохраняет прежние повреждённые файлы рядом с восстановленным хранилищем для ручного восстановления или проверки. Восстановленная история обновляется в открытом окне и остаётся доступной после перезапуска Kodik.
Повреждённое хранилище чатов
Заголовок раздела «Повреждённое хранилище чатов»Если Kodik обнаруживает повреждённую базу чатов, в боковой панели сессий появляются сообщение Хранилище чатов повреждено и кнопка Сбросить повреждённое хранилище чатов. При других ошибках загрузки остаётся сообщение о повторной попытке.
Повреждённый заголовок SQLite в непустой базе также запускает этот сценарий восстановления. Kodik сохраняет исходные файлы на месте: нечитаемая сигнатура не означает, что история пуста. Восстановите проверенную резервную копию или явно подтвердите сброс повреждённого хранилища.
Нажмите кнопку сброса и подтвердите Сбросить хранилище чатов, чтобы начать заново. Отмена оставляет повреждённые данные без изменений. После сброса прежние чаты исчезают из активной истории, а старое хранилище сохраняется в отдельной папке sessions.corrupt-<operation-id> рядом с sessions. Новое хранилище открывается сразу: можно начать разговор без перезагрузки окна. Сохранённую копию можно проверить или восстановить вручную; сброс не исправляет её содержимое.
Если повреждена только часть базы данных, Kodik сохраняет чаты, которые ещё можно прочитать: при запуске он восстанавливает хранилище автоматически, а подтверждение сброса показывает, сколько чатов будет сохранено. Удаляются только повреждённые чаты.
Если у вас есть исправная резервная копия и вы хотите вернуть чаты, используйте команду Kodik: Восстановить сессии чата из резервной копии.
Сброс доступен только для повреждённого хранилища. Если повреждение обнаружено во время работы Kodik, полностью закройте и снова откройте приложение перед восстановлением или сбросом: Reload Window не завершает процесс, владеющий хранилищем. Незавершённый запрос или выполняющееся резервное копирование также блокируют замену до завершения работы владельца; в этом случае восстановление сообщает, что чат всё ещё выполняется, — остановите его или дождитесь завершения и повторите попытку. Подтверждение восстановления показывает время создания проверенной копии; более поздние изменения не восстанавливаются.
При запуске Kodik проверяет сохранённый журнал восстановления, прежде чем считать формат основного файла базы несовместимым. Если основной файл отсутствует, а журнал остался, Kodik сохраняет журнал и не создаёт рядом новую базу.
Каждый чат хранит данные для списка чатов (название, статус, последнюю активность и рабочую папку) вместе с собой. Боковая панель и Kodik Mobile читают эти данные постранично. Первый запуск версии, которая меняет способ хранения чатов, один раз обновляет хранилище на месте до открытия Chat; если Kodik закрыть во время обновления, следующий запуск начнёт его заново с неизменённого хранилища. Более ранние версии не могут прочитать обновлённое хранилище: Kodik 2.2.8 и более ранние версии откладывают его в сторону без изменений и начинают с пустого списка чатов.
Если временная ошибка хранилища произошла до сохранения сообщения, Повторить сохраняет исходное сообщение вместе с новым запросом. Сообщение и ответ остаются после перезагрузки и перезапуска; более раннее сообщение с таким же текстом сохраняется отдельно.
Старая история чатов
Заголовок раздела «Старая история чатов»Kodik не ищет и не импортирует старую историю. Старые JSON, JSONL, базы рабочего окна, данные расширения, история провайдера, контрольные точки и файлы ресурсов остаются физически неизменными на диске и не появляются в текущем Chat. Способа перенести эту историю в текущее хранилище нет.
Проверка и обслуживание
Заголовок раздела «Проверка и обслуживание»Когда чтение истории задерживает обслуживание журнала, Kodik повторяет его после завершения чтения и текущей записи. Это помогает повторно использовать выделенное место журнала при параллельной работе чатов, не прерывая чтение сохранённой истории.
Kodik проверяет хранилище чатов после некорректного завершения работы, периодически выполняет полную проверку во время простоя и создаёт автоматические резервные копии при смене версии или по истечении интервала копирования. Проверка и копирование при запуске ждут две минуты после открытия окна, чтобы не мешать загрузке чатов, а проверка, которая нашла только индекс чатов для перестроения, не создаёт лишнюю копию. Эти фоновые проверки и резервные копии не показывают уведомления об обслуживании, восстановлении или ошибках копирования; диагностические сведения остаются в журналах. При обычном завершении работы состояние корректного выхода сохраняется до закрытия хранилища настроек.
Автоматические копии обновляются раз в сутки, даже если приложение не закрывается; обычные профили разработки тоже защищены. После ошибки следующая проверка возможна через пять минут. Все окна используют общий допуск к копированию. Копии находятся в папке session-backups каталога данных профиля. Неизменённые вложения копии используют совместно, поэтому ещё одна копия занимает примерно размер базы чатов. Сохраняются три новейшие пригодные копии и новейшая копия за одну из прошлых недель; байты базы и вложений копии проверяются повторно, если с её последней проверки прошло больше недели. Незавершённые и повреждённые копии в это число не входят и остаются доступными для проверки.
Ручное обслуживание и восстановление доступны в палитре команд:
- Kodik: Check Chat Session Storage выполняет ограниченную быструю проверку.
- Kodik: Verify Chat Session Storage (Full) дополнительно перечитывает и проверяет сохранённые объекты.
- Kodik: Rebuild Chat Session Index пересоздаёт одноразовые представления, не изменяя канонические сообщения.
- Kodik: Clean Up Expired Chat Uploads удаляет оставшиеся незавершённые загрузки.
- Kodik: Collect Unused Chat Content удаляет объекты только после подтверждённого периода, когда на них не ссылается ни одна сессия. Неиспользуемые файлы вложений Kodik удаляет и сам, не раньше чем через сутки после их добавления.
- Kodik: Purge Deleted Chat Sessions окончательно удаляет содержимое уже удалённых сессий небольшими шагами, безопасными при перезапуске. Kodik делает это и сам примерно через минуту после удаления чата; команда делает это сразу. Очистка делает паузы между ограниченными порциями, чтобы ожидающие сообщения могли сохраниться. Большие списки ссылок на вложения и префиксы потоков с зависимостями продолжают очистку после перезапуска с сохранённого места. Запись остаётся на месте, пока на неё ссылается другая запись, а её сохранённое содержимое остаётся целым до безопасного удаления ссылок.
Хранилище постепенно возвращает свободные страницы на диск, если файл это поддерживает, а остальное освободившееся место оставляет для повторного использования. Подробные записи изменений сохраняются только для недавних изменений; квитанция каждого изменения остаётся. Удаление старых подробностей выполняется ограниченными порциями с паузами между ними, чтобы ожидающие сообщения могли сохраниться. Автоматическая очистка во время простоя не переписывает весь файл, в том числе созданный старой версией Kodik.
Если Kodik отклоняет хранилище или резервную копию, сохраните указанные материалы и исправьте конкретную причину. Восстановите права, остановите процесс с блокировкой профиля, перенесите профиль на поддерживаемую локальную файловую систему или выберите корректную копию. Не заменяйте базу вручную, не удаляйте отклонённые данные, не перенаправляйте одну учётную область через символическую ссылку или сетевой ресурс и не копируйте файлы в рабочее хранилище.
Восстановление хранилища отличается от контрольной точки: контрольная точка перематывает одну задачу и изменения рабочей области, а резервная копия защищает всё локальное каноническое хранилище сессий.
Восстановление чатов из старых версий
Заголовок раздела «Восстановление чатов из старых версий»После обновления с версии 2.1.1 или другой старой версии запустите Kodik: Recover Legacy JSON Chat Sessions в палитре команд. Команда читает прежние JSON-записи чатов в хранилище приложения и добавляет их в SQLite. В уведомлении указано, сколько чатов восстановлено, сколько уже существует и сколько записей не удалось восстановить. Повторный запуск безопасен: существующие идентификаторы пропускаются, исходные JSON-записи сохраняются.
Восстанавливаются тексты сообщений, рассуждения, названия чатов, выбор модели и привязка к рабочей папке. История инструментов отображается как текст без возможности повторного выполнения. История запросов провайдера, активные запросы, содержимое вложений, планы, память и контрольные точки файлов не переносятся; новое сообщение начинает новый контекст модели. Отдельные журналы исполнения session-engine.json и .json.d не используются вместо записей видимой истории.
Перед проверкой всей переписки восстановление приводит старые метаданные к текущему формату. Идентификаторы не в формате UUID получают стабильную замену, поэтому повторный запуск не создаёт дубликаты. Пустое или некорректное название заменяется первым сообщением пользователя или «Recovered chat»; длинное название сокращается без изменения текста сообщений. Некорректная дата получает резервное значение, неизвестные режимы (включая act и agent) восстанавливаются как Code, а некорректные необязательные параметры модели и рассуждений заменяются значениями по умолчанию. Auto и старые идентификаторы моделей не обязаны присутствовать в текущем каталоге. Неподдерживаемая рабочая папка отвязывается от восстановленного чата; исходные метаданные остаются в JSON.
Если текущая отдельная запись повреждена или индекс ссылается на отсутствующую запись, команда проверяет эту же запись в state.vscdb.backup. В новом чате из резервной копии появляется примечание на языке интерфейса: последние сообщения могут отсутствовать. Оно остаётся переведённым после повторного открытия чата или перезагрузки окна. Прежние примечания без служебной метки и совпадающий текст модели сохраняют исходную формулировку. Исправные текущие записи имеют приоритет; чаты, найденные только в резервной копии, не импортируются. Отсутствующие записи индекса без пригодной копии учитываются как неудачные попытки восстановления. Пустой текущий индекс не приводит к восстановлению сохранённого старого снимка.
У восстановления нет фиксированного ограничения на размер исходной записи, общий размер переписки или количество сообщений. Длинные чаты обрабатываются небольшими порциями внутри одной транзакции, а очень большие сообщения сохраняются последовательными текстовыми частями без потери содержимого. Доступная память и место на диске по-прежнему имеют значение. Нечитаемые переписки и конфликтующие идентификаторы пропускаются целиком. Отмена или ошибка откатывает импорт текущего чата целиком; уже восстановленные чаты остаются доступными. Ошибка записи в новое хранилище или файловую систему останавливает восстановление. Исходный JSON и резервная копия остаются неизменными.
Если появляется SessionStore archive request is invalid, полностью закройте и снова откройте Kodik. Reload Window обновляет окно, но не основной процесс. Перед импортом команда теперь проверяет поддержку восстановления в обоих фоновых процессах и при несовместимости просит полностью перезапустить приложение.
Сохранённые ошибки
Заголовок раздела «Сохранённые ошибки»Не удалось отобразить это сообщение означает, что Kodik не смог показать одну строку переписки. Эта надпись сама по себе не останавливает агента. Если агент завершил ход с ошибкой, её причина и доступное действие показываются отдельно.
Сообщения об ошибках сохраняют причину после перезагрузки окна и перезапуска приложения. В строке ошибки остаются сообщение и доступная кнопка Повторить, без дополнительных кнопок перехода и диагностических подписей. Идентификатор запроса провайдера сохраняется в данных ошибки. Открытие старого сообщения само по себе не повторяет запрос. Ошибка инструмента и ошибка загрузки его подробностей отображаются внутри карточки; повторная загрузка подробностей не запускает инструмент заново.
Если сохранённая запись хода обрывается, пока агент ещё работает, например потому что хранилище чатов не смогло сохранить шаг, агент сразу останавливается, а ошибка показывает эту причину. Он не продолжает отправлять запросы модели и не сообщает вместо неё о потерянном пакете инструментов.
Ту же причину вы увидите, если хранилище отказало уже после ответа модели, во время сохранения результата инструмента или вашего ответа на вопрос, или дольше, чем может ждать итоговое сохранение хода, например потому что диск заполнен. Ход завершается с этой ошибкой, а не выглядит выполняющимся до перезапуска Kodik, и чат снова принимает сообщения, как только хранилище восстановится. Так же происходит, если хранилище не отказывает, а перестаёт отвечать.
Готовый ответ модели эта ошибка никогда не заменяет, и Kodik не запрашивает его у модели повторно. Если ответ сохранился, а расход токенов и прогресс цели нет, под ответом появляется пометка об этом. Если ответ удалось сохранить только вместе с ошибкой, ошибка показывается под ним. Если не сохранилось ничего, ответ остаётся в чате над ошибкой, а Открыть сохранённый ответ открывает копию, которую Kodik записал в папку sessions/unsaved-answers своего каталога данных; ответ возвращается в чат, когда хранилище восстановится или Kodik перезапустится. Инструмент, результат которого не удалось сохранить, сохраняет вывод, который он действительно вернул, с пометкой, что результат не подтверждён, а субагент, чей ответ не удалось сохранить, всё равно передаёт его главному агенту.
Пока хранилище чатов занято записью, например очисткой удалённого чата, ход ждёт. Ход, который не продвигается, пока хранилище свободно, или ждёт хранилище дольше десяти минут, завершается сообщением The turn stopped making progress and was ended. Если ход не удаётся начать вовремя, чат сообщает, что хранилище занято; отправьте сообщение ещё раз. Где именно ход остановился, записывается в журнал агент-хоста, а не в чат.
Неудачная попытка связаться с моделью вообще не сохраняется как ошибка, пока её можно переждать. Обрыв соединения, таймаут, прерванный поток, недоступный или перегруженный провайдер и ограничение частоты запросов повторяются столько, сколько длятся — и до начала ответа, и посреди него, — а пауза между попытками растёт до тридцати секунд. Чтобы прекратить их, нажмите Стоп. Осознанный отказ провайдера — истёкшие учётные данные, нет доступа, неизвестная модель, запрос, который он отклонит точно так же в следующий раз, — вместо этого останавливается на кнопке Повторить: повтор не изменит ответа.
