ENDERU
GitHub22 репозиторияDaily Tech4 подписчикаaudion.devвитрина продуктовRSSлента выпусков
← Все заметкиProjects

Спецификация: полноценный раздел «ИМПОРТ–ЭКСПОРТ / AI»

Содержание

Дата: 21.10.2026. Реализация: локальная версия 2.1.0; поддержанные форматы и границы проверки перечислены в tools/AI_TRANSFER_RU.md.

1. Цель

Пользователь открывает раздел AI и видит, какие локальные данные Claude Code, Claude Desktop и Codex найдены на текущем компьютере. Он может выбрать отдельные чаты и категории данных, проверить состав переноса, экспортировать их и восстановить выбранное из бэкапа.

Присутствие переписки на диске должно определяться независимо от установки Claude Desktop. Наличие файлов в архиве и появление восстановленного чата в приложении — разные результаты; программа должна сообщать, какой из них подтверждён.

Задание охватывает движок, CLI, окно Avalonia, формат бэкапа, тесты и документацию. Проверки импорта выполняются на изолированных профилях.

Уточнение владельца: учитывать установленные Claude Desktop, ChatGPT Desktop и Grok CLI. Grok включён в обнаружение локальных сессий и данных. Для Desktop-клиентов наличие приложения и локального профиля отображается независимо от наличия поддерживаемого индекса; облачная история автоматически не извлекается.

2. Подтверждённая проблема

В текущей реализации:

  • ai_backup_live_chat_options() перечисляет только local_*.json из claude-code-sessions приложения Claude Desktop.
  • Переписки Claude Code в .claude/projects и сессии Codex этим списком не обнаруживаются.
  • Настройки, память, навыки, плагины и автоматизации могут экспортироваться, но отдельной инвентаризации этих данных на странице нет.
  • Режим «Перенести самое необходимое» не включает переписки Codex; Claude переносит только чаты, связанные с индексом Desktop и выбранные в списке.
  • ai_backup_bundle_chat_options() читает фиксированную папку project/input, хотя пользователь может выбрать другой ИСТОЧНИК.
  • При пустом ответе списка Form.Ticks() возвращается до добавления кнопки обновления.

При диагностике этой копии обнаружены 68 основных файлов сессий Claude Code и 13 файлов сессий Codex, включая архив. Индекс Claude Desktop отсутствовал; input и output не содержали файлов. Эти числа служат иллюстрацией дефекта, а не нормативом теста: данные меняются.

3. Границы переноса

Переносятся локально доступные данные. Облачные чаты, отсутствующие на диске, не загружаются. Программа не обещает восстановить облачный аккаунт, авторизацию, публикации или содержимое внешнего проекта.

ИсточникОбнаружение чатовОстальные данные
Claude CodeОсновные переписки в каталоге projects, независимо от Desktop; связанные подагенты относятся к основной перепискеНастройки, инструкции, память проектов, навыки и плагины
Claude DesktopЛокальные записи claude-code-sessions и связанные переписки; проверяются обычный профиль и профиль Microsoft StoreТолько явно поддержанные данные; весь профиль Desktop автоматически не копируется
CodexЛокальные активные и архивные сессии; доступные метаданные индекса используются для названия и состоянияНастройки, инструкции, память, правила, навыки, плагины и автоматизации

Корни определяются с учётом CLAUDE_CONFIG_DIR, CODEX_HOME, CODEX_SQLITE_HOME и sqlite_home в конфигурации Codex. Профиль пользователя используется как резервный вариант. Пути не привязываются к диску или имени пользователя.

Неизвестные форматы и ошибки доступа показываются отдельно. Отсутствие поддерживаемого индекса не превращается в утверждение «данных нет».

4. Страница AI

4.1. Источники и сводка

Сверху страницы располагаются блоки Claude Code, Claude Desktop и Codex. Для каждого показываются:

  • Состояние: найдено / не найдено / частично доступно / нет доступа / формат не поддерживается.
  • Фактически проверенный путь.
  • Число обнаруженных основных чатов, число архивных и объём локальных данных.
  • Найденные категории остальных данных с числом файлов и объёмом.
  • Время последнего сканирования и кнопка «Обновить».

Нет данных, идёт сканирование и произошла ошибка — три разных состояния. Ни одно из них не оставляет немую пустую область. Кнопка обновления остаётся доступной при пустом результате и ошибке.

Ошибка одного источника не скрывает результаты остальных. Отсутствие Claude Desktop не мешает работе с Claude Code и Codex.

4.2. Список чатов

Предусмотреть фильтры по приложению, проекту и архивности, поиск, «Выбрать все» и «Снять все». Архивные переписки доступны в том же списке с явной отметкой.

Строка содержит приложение, название, дату последней активности, проект или рабочую папку и размер. Полный путь и технический идентификатор доступны в подробностях.

Название берётся из доступных метаданных. При его отсутствии допускается короткое название из первого пользовательского сообщения. Если извлечь его нельзя, показывается «Без названия» с датой и коротким идентификатором. Содержимое сообщений не пишется в диагностические журналы.

У одной переписки Claude Code и её записи Desktop должна быть одна единица выбора с отметками обоих источников. Связь устанавливается по идентификатору сессии, а не совпадению заголовков. Запись Desktop без доступной переписки отмечается как неполная.

Подагенты не считаются самостоятельными чатами. Для Codex активный и архивный файл одной сессии не создают две строки. Совпадение идентификаторов у разных приложений не объединяет их.

Обновление и фильтрация сохраняют пользовательский выбор. Команды «Выбрать все» и «Снять все» действуют на видимые строки; рядом показано общее число выбранных, включая скрытые фильтром. Новые чаты после обновления автоматически не выбираются.

4.3. Выбор остальных данных

Отдельный список категорий: память, настройки, инструкции и правила, навыки, плагины, автоматизации, дополнительные данные профиля и кэш, авторизация. Для каждой категории видны приложение, наличие, число файлов и объём.

Чаты выбираются независимо от категорий. Выбранная переписка включается в перенос в любом режиме. Снятая отметка исключает её и из полного профиля, и из общих индексов.

Для нового интерфейса:

  • «Необходимое»: память, настройки, инструкции, правила, навыки, плагины и автоматизации; плагины Codex — нет, их

Codex ставит сам. Состояние приложения Claude (.claude.json) идёт только в полном бэкапе.

  • «Полный профиль»: добавляет явно перечисленные дополнительные данные и кэш. Выбор чатов не меняется.
  • Авторизация всегда выключена по умолчанию и включается отдельно.
  • При первом открытии чаты не выбраны; пользователь видит их количество и может выбрать все одной кнопкой.

Пресеты не изменяют выбор чатов и авторизации. Рядом с действиями показывается итог: «Выбрано N чатов и M категорий, примерно X МБ».

5. Экспорт

Экспорт пишет в ai_backup внутри фактически выбранного НАЗНАЧЕНИЯ. ИСТОЧНИК не влияет на обнаружение живых профилей.

Перед записью доступен план: выбранные приложения, чаты, категории, ожидаемый объём, предупреждения о неполных данных. Если ничего не выбрано или найденные данные недоступны, причина показывается до запуска.

Сохраняются существующие свойства экспорта: новая временная папка, опись, SHA-256 каждого файла, проверка результата, атомарная публикация. Ошибка не повреждает предыдущий бэкап. Пересечение каталога бэкапа с профилями запрещено.

SQLite читается через согласованный snapshot. Результат инвентаризации и экспорта должен относиться к понятному состоянию данных: если выбранная переписка изменилась или исчезла, программа повторно проверяет её либо явно останавливает экспорт. Тихая потеря выбранных данных запрещена.

По каждому выбранному чату сохраняются доступная переписка, необходимые локальные метаданные, связанные подагенты и необходимые локальные вложения. Файлы рабочего проекта и внешние пути автоматически не обходятся. Отсутствующие вложения перечисляются как ограничения.

Общие индексы и SQLite не должны незаметно добавлять снятые с выбора чаты, их заголовки или сообщения. Если из общей базы нельзя безопасно выделить выбранные данные, перенос этого компонента блокируется с объяснением.

installation_id, блокировки, сокеты, временное состояние процессов и несогласованные SQLite sidecar-файлы не переносятся. Секреты авторизации не попадают в опись содержимого окна и журналы; бэкап с ними явно отмечается.

6. Импорт

Список строится из фактически выбранного ИСТОЧНИКА. Поддерживаются корень бэкапа и папка, содержащая единственный ai_backup. При неоднозначности пользователь выбирает бэкап; программа не выбирает первый молча.

После выбора отображаются дата бэкапа, версия формата, приложения, чаты, категории и состояние целостности. Отсутствие бэкапа, повреждение и неподдерживаемый формат имеют разные сообщения. При смене ИСТОЧНИКА прежние данные и план инвалидируются.

Пользователь выбирает чаты и категории независимо. Новый импорт открывается с выключенной авторизацией и включённым пробным запуском. Перед изменением профилей показывается план ADD / SAME / CONFLICT / REPLACE / SKIP с количеством объектов и местом назначения.

Правила восстановления:

  1. Весь бэкап проверяется до первой записи. Небезопасные пути, подмена через reparse point и неверные хеши блокируют импорт.
  2. Локальные данные, не относящиеся к выбору, сохраняются. Восстановление выбранных чатов не заменяет весь индекс или базу приложения.
  3. Совпадение идентификатора и содержимого даёт SAME. Разное содержимое считается конфликтом; по умолчанию сохраняется локальная версия. Замена включается явно.
  4. Перед заменой создаётся восстанавливаемая копия затрагиваемых файлов или записей. Журнал изменений позволяет откатить незавершённый импорт; итог сообщает, был ли выполнен откат.
  5. Пробный запуск не меняет профили и не создаёт в них папки, базы или индексы.
  6. Перед записью требуется закрыть затрагиваемые приложения. Программа их принудительно не завершает. Чтение и пробный запуск разрешены.
  7. Абсолютные пути чужого компьютера показываются до записи. Сопоставление рабочих папок задаётся явно; молчаливое переписывание путей запрещено.

Восстановленный чат должен появляться в поддерживаемом приложении с перепиской и доступными метаданными. Простое копирование JSONL не считается выполнением этого требования.

Для Codex до реализации необходимо подтвердить механизм регистрации восстановленных сессий для поддерживаемых версий. Нельзя предполагать существование команды импорта или писать в неизвестную схему живой SQLite. Адаптер принимается только после проверки изолированного восстановления с сохранением посторонних чатов. Неподдерживаемая версия явно блокирует восстановление; сохранение файлов допускается как отдельный результат «Архив сохранён, восстановление в приложение не подтверждено».

7. Память и объединение

Память Claude и Codex видна отдельными категориями до запуска переноса. При импорте она следует общим правилам проверки, конфликтов и резервирования.

Существующее действие объединения .md-памяти Claude сохраняется и называется явно: «Объединить память Claude». Оно не должно обещать объединение памяти Codex. Автоматическое смысловое объединение текстов и неизвестных баз памяти в эту задачу не входит.

8. Движок и формат

Инвентаризация и планирование реализуются в движке и доступны через CLI; окно использует те же результаты. Самостоятельного обхода профилей и восстановления средствами C# быть не должно.

Ввести общий каталог данных с адаптерами Claude Code, Claude Desktop и Codex. Минимальная модель результата:

ОбъектПоля
ИсточникПриложение, корень, состояние, версия обнаруженного формата, предупреждения
ЧатСтабильный ключ с префиксом приложения, исходные идентификаторы, название, даты, проект, архивность, размер, зависимости, полнота, поддержка восстановления
КатегорияПриложение, категория, число файлов, размер, состояние доступности
ПланОтпечаток источника и выбора, список действий, конфликты, предупреждения, итоговые количества

Ошибки отдельных файлов дают частичный результат с диагностикой. Ошибка источника не кодируется фиктивным пунктом, который можно отметить как чат. Неизвестные ключи выбора вызывают понятную ошибку.

Для новых бэкапов ввести schema_version: 3: сохранить файловую опись и добавить каталог чатов, их принадлежность приложениям, зависимости и категории данных. Внутренние пути остаются относительными. Ключ выбора однозначно соответствует единице переноса.

Каталог также проходит проверку целостности и согласованности с файлами: нельзя подменить принадлежность файла чату или включить файл вне описи. При изменении бэкапа после построения плана требуется повторная проверка и новый план.

9. Совместимость и ограничения изменений

  • Сохранить идентификаторы операций ai_backup_export, ai_backup_import, ai_backup_merge и ai_backup_open.
  • Существующие CLI-вызовы и .cmd-обёртки сохраняют прежнюю семантику; новый явный выбор передаётся дополнительными параметрами. Смешение старых и новых противоречащих параметров отклоняется.
  • Новые вызовы различают отсутствие выбора и явно пустой список. Пустой список означает «ни одного чата» даже в полном режиме.
  • Новая версия читает бэкапы schema 1 и 2 с явным описанием ограничений. Старый формат без manifest остаётся доступен только через существующее явное разрешение.
  • Внутренний код не дублирует правила обнаружения в Python и PowerShell; каталог и план служат общим источником истины для списка и фактического переноса.
  • Сохранить защиту авторизации, проверку путей, SQLite snapshot и атомарную публикацию. Автоматизации пользователя только переносятся как данные и не запускаются при импорте.
  • Все новые подписи и сообщения имеют русскую и английскую версии. Остальные разделы программы не меняются.

Версию программы при реализации изменить согласно SKILL.md: MINOR при сохранении совместимости; несовместимое изменение требует отдельного решения. Подготовка этого документа не меняет номер версии.

10. Критерии приёмки

  1. Без установленного Claude Desktop отображаются локальные переписки Claude Code и Codex. Удаление индекса Desktop не делает список пустым.
  2. Найденные память, настройки, навыки, плагины и автоматизации видны с количеством файлов и объёмом. Отсутствующие категории не выглядят ошибкой.
  3. Общая переписка Claude Code/Desktop не дублируется; архивные чаты доступны; подагенты не увеличивают число основных чатов.
  4. Пустой список, отсутствие доступа и неизвестный формат объясняются на странице. Обновление доступно во всех состояниях.
  5. Выбранный чат экспортируется и в необходимом, и в полном режиме. Невыбранный отсутствует в файлах и общих метаданных нового бэкапа.
  6. Явно пустой список чатов исключает все переписки. Авторизация не переносится без отдельного выбора.
  7. Импорт из пользовательского ИСТОЧНИКА показывает именно его содержимое; переключение папки обновляет список и отменяет старый план.
  8. Экспорт двух чатов из нескольких и последующий импорт в отдельный профиль восстанавливают только выбранные чаты. Уже существующие посторонние переписки сохраняются.
  9. Восстановленные чаты появляются в поддерживаемом приложении. Для каждой заявленной версии Codex это проверено отдельно; одного совпадения хешей недостаточно.
  10. Конфликт по умолчанию сохраняет локальную версию. Явная замена резервируется и допускает проверенный откат.
  11. Повреждённый бэкап, подмена после планирования, небезопасный путь и неизвестный формат отклоняются до изменения профиля.
  12. Сбой экспорта сохраняет предыдущий бэкап. Сбой импорта не удаляет посторонние данные и даёт точный результат восстановления или отката.
  13. Старые CLI-вызовы и бэкапы schema 1/2 проходят регрессионные проверки с прежней семантикой.
  14. В журналах отсутствуют секреты авторизации и тексты сообщений; отчёт содержит только необходимую диагностику и результаты переноса.

11. Проверка и сдача

Файловые сценарии проверяются на изолированных профилях через переменные окружения. Набор включает Claude Code без Desktop, Store и обычный Desktop, Codex с активными и архивными сессиями, вынесенную SQLite, пустые и повреждённые данные, коллизии идентификаторов, конфликты и прерванные операции.

Для Codex обязательны фикстуры поддерживаемых версий и отдельная проверка появления чата в приложении с сохранением посторонних переписок. Форматы, для которых такая проверка не выполнена, не объявляются поддержанными.

Окно проверяется вне экрана: обнаружение данных, пустые состояния, обновление, поиск, сохранение выбора, переключение ИСТОЧНИКА и обе локализации. Проверки не используют реальную мышь и не импортируют данные в рабочие профили пользователя.

После реализации выполнить профильные тесты, общую регрессию, проверку CLI и сборку окна по правилам проекта. Обновить русское и английское руководство и список дымовых проверок. В результате сдачи указать поддержанные версии приложений, проверенные сценарии и оставшиеся ограничения.

Порядок реализации: общий каталог и обнаружение → списки и категории в окне → план и schema 3 → выборочный экспорт → проверенное восстановление → совместимость и приёмка. До завершения восстановления раздел не объявляется полноценным переносом чатов.

Правлено 29.10.2026