Repository navigation
v0.2.63
v0.2.63 — Server performance: session memory leak fixed, faster SQLite, no more event-loop stalls
Release date: 2026-09-22
Previous version: v0.2.62
Summary
A performance-only release with no UI changes. A memory leak that grew with every interactive terminal session is fixed. SQLite gets indexes on the columns the app actually filters by and a cheaper commit mode, so log-heavy runs and deletes stop scanning whole tables. Two operations that froze the entire server (worktree npm install and per-chunk debug logging) now run without blocking terminals, WebSocket traffic, or other requests. Indexes are created automatically on the first start after updating.
Highlights
Interactive sessions no longer leak memory
- Every interactive terminal session buffered a filtered copy of its whole output into a stream nothing read, so the server heap grew for as long as the session stayed open. The filtered stream is now skipped for interactive sessions (the terminal already receives raw bytes directly), and the filter no longer runs on every spinner frame.
SQLite: indexes and cheaper commits
- Added indexes on
project_id,status, and the parent keys of the log tables (task logs, session logs, discussion logs and messages, schedule runs). Previously only the wiki tables were indexed, so list queries and every cascading delete scanned full tables. - WAL mode now uses
synchronous = NORMAL. The default forced one fsync per commit, and the log streamers commit once per output line. - Log inserts no longer re-read the row they just wrote, and the sidebar activity counter is computed with
COUNTin SQL instead of loading every todo, session, and discussion row on each status change.
No more server-wide stalls
- With the per-project "npm auto install" option on, creating a worktree ran
npm installsynchronously and froze the whole server for up to four minutes. It now runs asynchronously. - Debug logging appended to the log file synchronously on every output chunk. Each run now writes through a single stream.
Housekeeping
- The 30-day log retention sweep now also runs once a day. It previously ran only at startup, so always-on servers never pruned.
- The MCP
read_session_outputtool reads only the tail it returns instead of assembling up to 2 MB of history on every call. - Removed dead session-log classification code left over from an earlier logging path.
Migration
- No action required. The new indexes are created automatically on the first start after updating; on a large database this can take a few seconds.
Install / Update
npm i -g clitrigger@0.2.63Desktop app — pick the right asset:
- Windows (recommended):
CLITrigger-Setup-0.2.63.exe— installer with Start Menu shortcut, uninstaller, and auto-update. - Windows (portable):
CLITrigger-0.2.63.exe— run directly, no install; no shortcuts and no auto-update (grab new versions manually). - macOS:
.dmg/ Linux:.AppImage
Full commit list
- c679f7c perf(server): 스피너 정규식 상수화, 오래된 로그 정리 일일 타이머
- fe70744 perf(server): npm install과 디버그 로그 쓰기의 이벤트 루프 블로킹 제거
- 06f2cba perf(db): 로그 INSERT 되읽기 제거, 상태 카운트 SQL 집계, raw chunk 꼬리 읽기
- fcbfc2f refactor(session): 미참조 classifyPtyLine·streamToSessionLogs 삭제
- 42f01e6 perf(db): synchronous=NORMAL 설정 및 FK/필터 컬럼 인덱스 추가
- e347fe7 fix(session): 인터랙티브 세션의 소비되지 않는 stdout 스트림 누수 제거
Related docs
- Detailed changelog — per-date technical decision records
Full Changelog: v0.2.62...v0.2.63