Skip to content

v1.4.2

Latest

Choose a tag to compare

@obra obra released this 21 May 21:30

Fixed

  • Summarization no longer crashes for conversations archived from a different project than the one running sync. Before, every short (≤15 exchange) conversation whose recorded project cwd differed from sync's cwd would silently fail with Cannot read properties of undefined (reading 'match'), and the failed file would re-queue forever. The summarizer now passes the recorded cwd through to the Claude Agent SDK and falls back to a non-resume summary when the project directory no longer exists on disk. Multi-project users were the most affected. Thanks to @minyek for the fix (#93).
  • Codex summarization works again for ChatGPT-subscription users. The summarizer used to forward whatever model id was baked into the historical exchange data, including pre-deprecation values like gpt-5.2-codex. Codex's app-server returns a 400 for any -codex suffix variant when authenticating via a ChatGPT account, so older Codex sessions silently fell through to the transcript-text fallback (hurting recall quality). The summarizer now lets Codex pick the default from ~/.codex/config.toml#model. Operators who need a specific model id can set EPISODIC_MEMORY_CODEX_MODEL. Thanks to @monsterxz9 for the fix (#99).
  • Failed summaries no longer pin the head of the sync queue forever. Any transient summarization error (network blip, API rate limit, SDK shape change) used to leave no sentinel on disk, so the same file would re-attempt on every sync run indefinitely. Ten persistent failures at the head of the queue would block every conversation behind them from being summarized. Sync now writes a structured error sentinel and re-attempts after a configurable threshold (default 1 hour, via EPISODIC_MEMORY_SUMMARY_ERROR_RETRY_HOURS); verify, stats, and the indexer all distinguish real summaries from error sentinels (#96).
  • Concurrent sync workers no longer race when multiple Claude Code sessions fire SessionStart at the same time. Multi-worktree setups previously spawned one background sync process per session, each trying to write to the same SQLite database (which crashes with SQLITE_BUSY on macOS/Linux) and each spawning Claude subprocesses (which exhausts the desktop heap on Windows, crashing workers with STATUS_DLL_INIT_FAILED). A single-instance file lock now serializes sync workers; competing workers print sync already running (pid X); skipping and exit cleanly (#97).
  • The MCP server wrapper detects partial node_modules extractions. An interrupted plugin install could leave a package as just an empty folder (no manifest, no library code), and the previous wrapper declared deps healthy because node_modules/ itself existed. First launch then crashed with a confusing ERR_MODULE_NOT_FOUND. The wrapper now probes each required package's manifest and reruns npm install if any are missing, logging which ones (#95 Bug 1).
  • npm install exits 0 on Windows. The postinstall step previously used unix-only shell syntax (2>/dev/null || true) that fails on cmd.exe, so npm install exited non-zero even when every package installed correctly. Now uses a cross-platform Node script. The reporter on #95 saw this and started troubleshooting what they assumed was a broken install — those follow-on diagnostics led to the misidentified Bug 2 (onnxruntime-common-not-hoisted), which on reproduction turns out to be a misread of npm ls's logical-tree output (the package is hoisted in practice).