База данных и миграции
Всё состояние лежит в одном файле SQLite, comfyui-desktop.db в папке с данными.
Его открывает main через better-sqlite3 (src/main/database.ts). Окно никогда его не открывает.
Таблицы
| Таблица | Что хранит |
|---|---|
settings | Одна строка: несекретные настройки (поставщик, модель, адреса, язык, анимация) и preferences_json, проверенные настройки. |
secret_records | Сохранённые ключи и токены, зашифрованные хранилищем паролей системы. |
projects | Проекты и версия, которую показывает каждый (current_revision_id). |
graph_revisions | Каждая версия каждого графа: ноды, связи, документ ComfyUI, компоненты, название и заметки, и кто её сделал. |
applied_commands | Каждая применённая команда: её actionId, исполнитель, ход, содержимое и результат. |
runs | Ходы помощника и их состояние. |
proposals | Черновики помощника. |
explanations | Объяснения типов нод, моделей, связей и объектов графа, с источником. |
chat_messages | Разговор, пока включено «Хранить историю чата в проекте». |
node_catalog, node_packs, model_catalog | То, что прочитано из ComfyUI, с метаданными моделей и найденным в интернете. |
sync_state | Состояние синхронизации парами «ключ и значение»: последняя синхронизация, автосинхронизация и её интервал. |
schema_migrations | Какие версии схемы применены и когда. |
Открытие
openDatabase в src/main/database.ts:
- Файл, версия схемы которого новее, чем знает это приложение, отклоняется до того, как что-то записано («Ваши данные сохранены более новой версией…»).
- Журнал WAL; включён
secure_delete, поэтому забытый ключ перезаписывается, а не остаётся в свободных страницах. - Перед обновлением файл копируется в
comfyui-desktop.db.before-v<N>.bak(хранится только самая новая копия) (src/main/settings/databaseSafety.ts). migrateдоводит схему доSCHEMA_VERSION(src/main/settings/migrate.ts).- Ошибка распознаётся (повреждён, новее, только чтение, нет места, занят) и показывается словами; повреждённый файл
можно переименовать в
comfyui-desktop.db.damaged-<дата>и начать с пустыми данными.
Как добавить миграцию
- Увеличьте
SCHEMA_VERSIONвsrc/main/settings/migrate.tsи опишите новую версию в комментарии над ней одним предложением: что добавляет и зачем. - Напишите
applyVersionN(db). Сделайте её безопасной для любой базы предыдущей версии: проверяйтеcolumnNames/tableNamesпередALTER TABLE, пишитеCREATE … IF NOT EXISTS, давайте новым столбцам значение по умолчанию. - Добавьте шаг в
migrate, в своей транзакции, которая пишет и строкуschema_migrations, как у шагов до него. - Никогда не меняйте старые
applyVersion…: базы у людей уже прошли через них. - Проверьте в
tests/unit/settingsMigration.test.ts: база предыдущей версии с настоящими строками обновляется, сохраняет строки, а сбой до записи версии оставляет её как была.
Более новую базу старое приложение не откроет, поэтому планируйте изменение, с которым можно вернуться назад: приложение откажется и скажет об этом; данные останутся нетронутыми.