Repository navigation
Adds a Hide tool calls checkbox to the top of any session view that contains tool calls.
Ticking it hides every tool call and any message whose only content was a call, so the conversation reads on its own. On a typical session that's 142 tool calls hidden and the visible entry count dropping from 223 to 81. Sessions without tool calls show no control bar. The setting is per-view and resets on reload - nothing about the stored log or the shared link changes.
How it works - the controls are injected when a view is served rather than baked into the generated file. The stored conversation.html is untouched, existing sessions pick the feature up with no regeneration, and cclogviewer stays unforked. The script is served from /viewer-controls.js so it runs under script-src 'self', and it keys off cclogviewer's markup - if those classes ever change it renders nothing rather than breaking the page. No preference is persisted, deliberately, to keep the view origin free of client-side storage.
Upgrading - no configuration changes. One thing to know if you're working on the code: the view ETag is now the generation hash prefix plus VIEWER_CONTROLS_VERSION, and that constant must be bumped whenever public/viewer-controls.js changes, or browsers will serve a cached page with the old controls for up to an hour.