Releases: Chumikov/opencode-sync
Releases · Chumikov/opencode-sync
Release list
v1.2.7
Изменения с v1.2.6
- Манифест: записываются только ID сессий с файлами в репо. Неудачный экспорт больше не попадает в манифест — при следующем push сессия будет повторно обработана
- Recovery: сессии из старого манифеста без файлов в репо переэкспортируются независимо от текущего scope (исправляет потерю сессий при первом push с ошибками)
- .gitignore: добавлены
sync.logи.opencode-sync.lock— устраняет ошибкуcannot pull with rebase: unstaged changes - 275 тестов
v1.2.6
Изменения с v1.2.3
- Критический фикс: экспорт сессий через временный файл вместо pipe — обходит обрезку stdout в
opencode exportна ~128KB. Ранее сессии >128KB молча пропускались как «битый JSON» - Shell-обёртка:
trap EXIT(bash/zsh) иtry/finally(PowerShell) для гарантированного push при закрытии терминала - 273 теста
v1.2.3
Изменения с v1.2.2
- Shell-обёртка
opencode()теперь используетtrap EXIT(bash/zsh) иtry/finally(PowerShell) для гарантированного запускаopencode-sync pushпри любом способе завершения: нормальный выход, Ctrl+C, закрытие терминала (SIGHUP), SIGTERM - Fish shell — без изменений (нет механизма trap внутри функций)
- 272 теста
v1.2.2
v1.2.1
Что нового
Проектная область видимости (scope)
pushиpullтеперь фильтруют сессии по текущему проекту- Проект определяется через
git rev-parse --show-toplevel→ SHA1 первого коммита =projectId - Если нет git-репозитория — режим
global(только глобальные сессии) - Манифест остаётся полным (все id), orphan-чистка только в scoped-папке
Отслеживание удалённых сессий (deleted set)
- Удалённые сессии записываются в
manifests/{device}-deleted.json pullне импортирует сессии из deleted set — предотвращает возврат удалённых сессий- При
push: старый манифест сравнивается с новым, разница попадает в deleted set
Защита первого запуска
- Первый
pullна новом устройстве (когда манифеста ещё нет) не удаляет локальные сессии - Удаление сессий происходит только если манифест устройства существует в репо
Тесты
- 268 тестов (было 239), 13 файлов
- Новые тесты: scope, deleted set, защита первого запуска, scoped фильтрация
v1.2.0 — Критические исправления и рефакторинг
Что нового в v1.2.0
Критические исправления
saveSessionToFileиспользует реальныйprojectIdвместо хардкода"global"— устранён баг, при котором сессии с не-global projectId реэкспортировались при каждом pushdeleteSessionвалидируетsessionIdперед передачей в CLI — защита от инъекции аргументов- PowerShell: корректный путь лога — используются
/вместо ошибочных\\ detectPowerShell: корректная проверкаPSModulePath—!== undefinedвместо ошибочного|| === ""
Новые возможности
OPENCODE_SYNC_BRANCH— env-переменная для override ветки репозитория- Валидация структуры JSON-конфига — читаемая ошибка вместо загадочных падений при повреждённом файле
Оптимизации
- Убран двойной вызов
isLocalNewerпри push (кеширование в Map, 2× быстрее проверка) syncпередаётlocalMapиз pull → push — исключён повторный вызовopencode dbwithRetryиспользует exponential backoff вместо линейной задержки
Рефакторинг
- Удалён мёртвый
exportSession(sync-версия) — не использовался в продакшн-коде - Дедубликация
installToRcFile/installPsFunction→ единаяinstallBlockToRcFileвshell.ts - Исправлен
SESSION_ID_REв тестах (добавлен_)
Статистика
- 239 тестов (все пройдены)
- Покрытие: 95.5% stmt / 86.3% branches
- Lint: 0 ошибок
- 10 файлов изменено, -117 / +50 строк
Полный changelog: v1.1.5...v1.2.0
v1.1.5
- Синхронизация ВСЕХ сессий (все проекты, не только текущий)
- listSessions() через opencode db вместо session list
- Все сессии экспортируются как global для кросс-платформенности
- importSession() запускается из \C:\Users\chumi → project_id = global
- Исправлена валидация ID сессий (поддержка _)
- Проверка версии opencode при setup (≥ 1.14)
- ensureRepo() обрабатывает пустой клон (hasCommits)
- Обновлён README
v1.1.4
- Инициализация пустого репозитория: начальный commit + push -u при setup
- Лог-файл sync.log вместо /dev/null: ошибки записываются в ~/.local/share/opencode-sync/sync.log
- При ошибке показывается краткое сообщение со ссылкой на лог-файл
- push использует -u флаг для настройки upstream
- Shell-функции обновлены для bash/zsh, fish и PowerShell
v1.1.3
- Исправлен prepublishOnly для совместимости с Windows
- Обновлён README: описание использования cmd /c на Windows
- Улучшено покрытие тестами (86% веток)
- Экспортирована _openCodeExecArgs() для кроссплатформенного тестирования
- Добавлены тесты для cloneAll, listRemoteBranches, выбора веток
v1.1.2
Fixes
- Корректный fallback при отсутствующей ветке main — setup больше не падает, если дефолтная ветка называется master или иначе. Ветки определяются через git ls-remote до повторного clone.
- Запуск opencode через cmd /c на Windows — execFileSync не находил .cmd/.exe shim без shell. Теперь opencode корректно обнаруживается и запускается при любом способе установки (npm, Chocolatey, Scoop, curl и др.).
- Кроссплатформенные тесты — исправлены тесты с Windows path separators, все 223 теста проходят на Linux, macOS и Windows.