|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project are documented here. |
| 4 | + |
| 5 | +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/). |
| 6 | + |
| 7 | +## [Unreleased] |
| 8 | + |
| 9 | +Nothing yet. |
| 10 | + |
| 11 | +## [0.1.0] — 2026-04-22 |
| 12 | + |
| 13 | +First public release. |
| 14 | + |
| 15 | +### Added |
| 16 | + |
| 17 | +- Single-file HTML viewer for Claude Code JSONL transcripts. |
| 18 | +- Six UI languages with live switcher: English, Русский, Español, Français, 中文, العربية. Arabic auto-switches to RTL. |
| 19 | +- Light / dark theme with automatic detection from the OS `prefers-color-scheme`. Manual click pins the choice. |
| 20 | +- Drag-and-drop file loading — drop anywhere on the page. Folders and non-file drags are rejected cleanly. |
| 21 | +- Reader mode — one toggle that hides all service entries, leaving only real user messages and assistant text. |
| 22 | +- Copy-per-message button in every entry header. Clipboard API with `document.execCommand` fallback for `file://` contexts. ✓ confirmation for 1.2 s after copy. |
| 23 | +- Friendly tool names — 16 known Claude Code tools get emoji + label (`📖 Read file`, `🖥️ Shell`, `📝 Edit file`, …). Unknown / MCP tools keep `🔧 {raw_name}`. |
| 24 | +- Bundled `demo.jsonl` + "Try with example" button in the empty state (online only — `fetch()` is blocked on `file://`). |
| 25 | +- Five category filters: thinking, tools, results, system/meta, ui-state. Toggle via a single CSS class, no DOM reflow. |
| 26 | +- Streaming JSONL parse via `file.stream()` + `TextDecoderStream` — no full-string load. |
| 27 | +- Native virtualization via `content-visibility: auto` on each entry. |
| 28 | +- Chunked rendering — 500 records per chunk, "Load more" button for the rest. |
| 29 | +- Size caps — 20 KB prose / 5 KB service blocks. Stringification is also bounded. |
| 30 | +- `.json` fallback — plain JSON arrays/objects are parsed as records too. |
| 31 | + |
| 32 | +### Security / privacy |
| 33 | + |
| 34 | +- XSS-safe markdown rendering: every text block is HTML-escaped before `marked.parse` so raw HTML can never reach the DOM. |
| 35 | +- Markdown images are neutralized — rendered as inert text with visible URL, never fetched. Prevents a crafted transcript from leaking the viewer's IP / usage via tracker images. |
| 36 | +- External links restricted to `http(s)` and opened with `rel="noopener noreferrer nofollow" target="_blank"`. Other schemes (`javascript:`, `data:`, `file:`, `mailto:`) are rendered as plain text. |
| 37 | +- `localStorage` access wrapped in try/catch — survives strict privacy modes. |
| 38 | + |
| 39 | +### Packaging |
| 40 | + |
| 41 | +- Unlicense (public domain, no attribution required). |
| 42 | +- GitHub Pages hosted live demo. |
| 43 | +- Single-file release build via CI — one HTML with marked.min.js inlined, available as a release asset. |
| 44 | + |
| 45 | +[Unreleased]: https://github.com/hitmman55/claude-code-chat-viewer/compare/v0.1.0...HEAD |
| 46 | +[0.1.0]: https://github.com/hitmman55/claude-code-chat-viewer/releases/tag/v0.1.0 |
0 commit comments