Хранилище CLI и перенос состояния
Kodik CLI хранит изменяемое состояние под одним CLI persistence identity. Идентификатор объединяет вариант сборки и непрозрачный digest физического корня CLI, поэтому symlink или другое написание того же пути не создаёт второго владельца.
Production обычно использует ~/.kodik/cli. Явный --cli-data-dir <path> (или VSCODE_CLI_DATA_DIR) выбирает этот корень точно и отключает автоматический импорт из другого глобального дома. Development- и portable-корни имеют отдельные identities для credentials и сервисов.
Автоматический перенос production-состояния
Заголовок раздела «Автоматический перенос production-состояния»Когда стандартный production CLI впервые заменяет прежнего владельца ~/.vscode-cli, он импортирует записи по смыслу, а не переименовывает и не копирует каталог рекурсивно:
| Запись источника | Результат |
|---|---|
versions.json |
Файл разбирается заново; импортируются только совместимые пути установок, которые всё ещё существуют на этой машине. При конфликте побеждает destination. |
servers/, вложенный cli/, serve-web/, staging загрузок и индексы cache |
Создаются или загружаются заново. |
| Логи и stale lock-файлы | Остаются неактивными у источника. Live lock блокирует перенос, пока связанный CLI или сервис не остановлен. |
license_consent.json |
Не переносится; при необходимости текущую лицензию нужно принять снова. |
token.json |
Никогда не копируется. Для file-backed credential источника нужен новый вход. |
| Прежний credential в OS keyring | Production-destination без credentials может один раз принять его только через secret-store API. |
serve-web-token и serve-web-key-half |
Генерируются заново под destination identity. |
| Tunnel-записи и регистрация OS service | Никогда не клонируются автоматически; используйте явную передачу единственного владельца ниже. |
| Неизвестные записи | Остаются нетронутыми и неактивными у источника; перенос блокируется, пока новая версия Kodik или явное восстановление не классифицирует их. |
CLI записывает манифест без секретов в <cli-root>/.migration/global-home/. Ошибки permissions, повреждённые или неизвестные записи, активные locks, aliases, concurrent или прерванный перенос и отказ keyring явно останавливают затронутую команду. Kodik не продолжает работу с внешне пустым identity.
Явный импорт
Заголовок раздела «Явный импорт»Если автоматический перенос намеренно отключён, укажите точные source и destination:
kodik --cli-data-dir /path/to/destination state import --from /path/to/sourceКоманда импортирует только повторно проверенные несекретные durable records. Source сохраняется неактивным; более поздние изменения из старого CLI не синхронизируются автоматически.
Credentials остаются изолированными, пока вы явно не разрешите их повторное использование на том же устройстве. Если вариант сборки источника отличается от запущенного CLI, укажите его:
kodik --cli-data-dir /path/to/dev-cli state import \ --from /path/to/production-cli \ --reuse-credentials \ --source-build-variant productionПовторное использование читает credential источника через host keyring и записывает его через API keyring назначения. token.json не копируется. Если portable-носитель подключён к другой машине, исходной записи host keyring там нет, и Kodik сообщает, что на новом host нужно войти снова.
Владение tunnel и сервисом
Заголовок раздела «Владение tunnel и сервисом»Tunnel record и systemd-, launchd- или Windows-service являются ресурсом с одним владельцем. Передавайте их явно:
kodik --cli-data-dir /path/to/destination state import \ --from /path/to/source \ --reuse-credentials \ --source-build-variant production \ --transfer-tunnel-service \ --accept-server-license-termsKodik останавливает source tunnel, удаляет регистрацию его сервиса, проверяет authentication назначения, перемещает типизированные tunnel records, заново создаёт команду сервиса с точным destination root, регистрирует её и проверяет нового владельца. Если регистрация или проверка завершается ошибкой, Kodik восстанавливает записи и service registration источника и сообщает о неудачном переносе. Не копируйте tunnel JSON вручную и не запускайте два identity для одного сервиса.
Сохранённый нетуннельный source полезен для downgrade recovery, но старый и новый корни намеренно расходятся. Автоматической очистки нет: храните неизвестные файлы и диагностические логи, пока destination не проверен независимо и старой сборке или сервису больше не нужен источник.
