Skip to content

Releases: Chumikov/opencode-sync

v1.2.7

Choose a tag to compare

@Chumikov Chumikov released this 01 May 20:32

Изменения с v1.2.6

  • Манифест: записываются только ID сессий с файлами в репо. Неудачный экспорт больше не попадает в манифест — при следующем push сессия будет повторно обработана
  • Recovery: сессии из старого манифеста без файлов в репо переэкспортируются независимо от текущего scope (исправляет потерю сессий при первом push с ошибками)
  • .gitignore: добавлены sync.log и .opencode-sync.lock — устраняет ошибку cannot pull with rebase: unstaged changes
  • 275 тестов

v1.2.6

Choose a tag to compare

@Chumikov Chumikov released this 01 May 20:09

Изменения с v1.2.3

  • Критический фикс: экспорт сессий через временный файл вместо pipe — обходит обрезку stdout в opencode export на ~128KB. Ранее сессии >128KB молча пропускались как «битый JSON»
  • Shell-обёртка: trap EXIT (bash/zsh) и try/finally (PowerShell) для гарантированного push при закрытии терминала
  • 273 теста

v1.2.3

Choose a tag to compare

@Chumikov Chumikov released this 01 May 19:44

Изменения с 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

Choose a tag to compare

@Chumikov Chumikov released this 01 May 10:44

Изменения с v1.2.1

  • Первый push экспортирует все сессии без фильтрации по scope (если манифеста ещё нет)
  • Обновлён README: PAT-токен как основной способ, описание scope, deleted set, структура данных
  • 270 тестов

v1.2.1

Choose a tag to compare

@Chumikov Chumikov released this 30 Apr 22:32

Что нового

Проектная область видимости (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 — Критические исправления и рефакторинг

Choose a tag to compare

@Chumikov Chumikov released this 29 Apr 20:50

Что нового в v1.2.0

Критические исправления

  • saveSessionToFile использует реальный projectId вместо хардкода "global" — устранён баг, при котором сессии с не-global projectId реэкспортировались при каждом push
  • deleteSession валидирует sessionId перед передачей в CLI — защита от инъекции аргументов
  • PowerShell: корректный путь лога — используются / вместо ошибочных \\
  • detectPowerShell: корректная проверка PSModulePath!== undefined вместо ошибочного || === ""

Новые возможности

  • OPENCODE_SYNC_BRANCH — env-переменная для override ветки репозитория
  • Валидация структуры JSON-конфига — читаемая ошибка вместо загадочных падений при повреждённом файле

Оптимизации

  • Убран двойной вызов isLocalNewer при push (кеширование в Map, 2× быстрее проверка)
  • sync передаёт localMap из pull → push — исключён повторный вызов opencode db
  • withRetry использует 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

Choose a tag to compare

@Chumikov Chumikov released this 29 Apr 15:37
  • Синхронизация ВСЕХ сессий (все проекты, не только текущий)
  • listSessions() через opencode db вместо session list
  • Все сессии экспортируются как global для кросс-платформенности
  • importSession() запускается из \C:\Users\chumi → project_id = global
  • Исправлена валидация ID сессий (поддержка _)
  • Проверка версии opencode при setup (≥ 1.14)
  • ensureRepo() обрабатывает пустой клон (hasCommits)
  • Обновлён README

v1.1.4

Choose a tag to compare

@Chumikov Chumikov released this 29 Apr 14:03
  • Инициализация пустого репозитория: начальный 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

Choose a tag to compare

@Chumikov Chumikov released this 29 Apr 10:48
  • Исправлен prepublishOnly для совместимости с Windows
  • Обновлён README: описание использования cmd /c на Windows
  • Улучшено покрытие тестами (86% веток)
  • Экспортирована _openCodeExecArgs() для кроссплатформенного тестирования
  • Добавлены тесты для cloneAll, listRemoteBranches, выбора веток

v1.1.2

Choose a tag to compare

@Chumikov Chumikov released this 29 Apr 10:11

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.