Releases: phiat/claude-esp
v0.4.4
What's New
- Fix CJK/multibyte character wrapping — word-wrapping now uses display-width-aware splitting (
go-runewidth) instead of byte offsets. CJK characters, emoji, and other wide characters wrap correctly without garbling.
感謝 @tznthou 的回報!Thanks for the detailed report on the Rust version — fix applied to both repos.
Install / Upgrade
go install github.com/phiat/claude-esp@latestFull Changelog: v0.4.3...v0.4.4
v0.4.3
What's New
- Fix crash on sessions with image content (#4) — screenshots pasted into Claude Code no longer crash the parser
- Scanner buffer increased from 1MB to 10MB (grows on demand, starts at 64KB)
- Parser gracefully skips malformed/truncated JSON lines instead of crashing
- Tests added for image content blocks and truncated JSON
Thanks @kristian-pactum for reporting!
Install / Upgrade
go install github.com/phiat/claude-esp@latestFull Changelog: v0.4.2...v0.4.3
v0.4.2
What's New
- Text toggle (
x) — show/hide assistant text responses, now visible by default - Solo mode (
s) — isolate a session or agent in tree view; press again to un-solo - Tool names on output — output headers show the tool name (e.g., "Bash result (1.2s)")
- Dedup fix — tool input and output with the same ID are both kept (previously one was dropped)
- Rename "Auto" → "Scroll" in header to disambiguate from auto-discovery
- Remove destructive session delete (
x/d) — solo + space toggle covers filtering
Based on PR #2 by @rdmontgomery
Install / Upgrade
go install github.com/phiat/claude-esp@latestv0.4.1
What's New
- Fix: Agent type names now correctly appear in stream view (not just tree)
- README: Updated features list with agent type labels, token tracking, tool duration
Install / Upgrade
go install github.com/phiat/claude-esp@latestFull Changelog: v0.4.0...v0.4.1
v0.4.0
What's New
- Agent type labels — Subagents now show their type (e.g., "Explore", "code-reviewer") instead of generic "Agent-abc1234" in both the tree and stream views. Reads
.meta.jsonfiles created by Claude Code. - Tool execution duration — Tool output headers now show how long each tool took (e.g., "(1.2s)", "(45ms)") from
toolUseResult.durationMs. - Token usage tracking — Cumulative input/output token counts displayed in the header bar (e.g., "12.3k in / 4.5k out"). Shows total session cost including history.
Install / Upgrade
go install github.com/phiat/claude-esp@latestOr download pre-built binaries below.
What's Changed
Full Changelog: v0.3.1...v0.4.0
v0.3.1
What's New
Graceful startup when Claude Code isn't running
Previously, claude-esp would crash if ~/.claude didn't exist or no sessions were found. Now it starts the TUI with an empty tree and auto-discovers sessions as they appear.
- No crash on missing
~/.claude— shows "Waiting for Claude Code sessions..." and watches for the directory to be created - No crash with
-s <unknown-id>— waits for the session to appear instead of bailing - Ancestor directory watching — when
~/.claude/projectsdoesn't exist yet, watches the closest existing parent directory and switches to full recursive watching when Claude Code starts
Full Changelog: v0.3.0...v0.3.1
Full Changelog: v0.3.0...v0.3.1
v0.3.0
What's New
Real-time filesystem notifications
Replaced polling with OS-native filesystem notifications via fsnotify:
- inotify on Linux, kqueue/FSEvents on macOS — true real-time streaming with zero idle CPU
- 50ms debounce coalesces burst writes for efficient processing
- Automatic fallback to polling on filesystems that don't support notifications (NFS, some cross-FS WSL2 setups)
- The
-pflag now only applies in fallback polling mode
Details
- Latency drops from 0-500ms (polling) to ~50ms (debounce window)
- Zero CPU usage when idle (no more periodic file scans)
- Scales to many sessions without additional overhead
- 11 new tests covering fsnotify integration, debounce behavior, concurrency, and polling fallback
- All existing functionality and keybindings unchanged
Full Changelog: v0.2.2...v0.3.0
v0.2.2
Full Changelog: v0.2.1...v0.2.2
v0.2.1
Bug Fix
-
Fix crash when parsing MCP server tool results (#2)
MCP tools return
contentas an array of content blocks, while built-in tools use a plain string. The parser only handled strings, causing a JSON parse failure whenever any MCP server was invoked.
Thanks to @Tom-De-Santa-FOSS for reporting this issue (#1).
note: Does not affect rust version. (It uses serde_json::Value for the content field and already handles both String and Array variants.)
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Full Changelog: v0.1.0...v0.2.0