366 lines
17 KiB
Markdown
366 lines
17 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to PinchChat are documented here.
|
||
|
||
Format based on [Keep a Changelog](https://keepachangelog.com/), with [Conventional Commits](https://www.conventionalcommits.org/).
|
||
|
||
## [1.37.0] — 2026-02-13
|
||
|
||
### Added
|
||
- Response generation time displayed on assistant messages (e.g. "· 12.3s") — shows how long each response took to generate during the current session
|
||
|
||
## [1.36.1] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Sync `<html lang>` attribute with i18n locale selection for better screen reader and browser language support
|
||
- Remove duplicate `aria-label` on message search input
|
||
|
||
## [1.36.0] — 2026-02-13
|
||
|
||
### Added
|
||
- Semantic `<time>` elements on all message timestamps with full-date tooltip on hover
|
||
- Lazy-loaded ReactMarkdown and plugins for faster initial page render
|
||
- Print stylesheet for conversation export
|
||
- GatewayClient WebSocket unit tests (12 tests)
|
||
|
||
### Documentation
|
||
- Reverse proxy configuration guide (Nginx, Caddy, Traefik)
|
||
|
||
## [1.34.1] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Drop Node 18 from CI matrix — Vite 7.3 requires Node 20.19+
|
||
- Update minimum Node.js version to 20.19 in engines and docs
|
||
|
||
## [1.34.0] — 2026-02-13
|
||
|
||
### Added
|
||
- Loading spinner while JS bundles load (CSS-only, no flash of blank screen)
|
||
- Noscript fallback message for users with JavaScript disabled
|
||
|
||
## [1.33.1] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Service worker cache now busts on each build (version+timestamp in cache name)
|
||
- PWA users no longer get stuck on stale cached assets
|
||
- Auto-reload when new service worker version is detected
|
||
- Periodic SW update check every 30 minutes
|
||
|
||
## [1.33.0] — 2026-02-13
|
||
|
||
### Added
|
||
- Syntax highlighting for C, C++, and Java code blocks
|
||
- Aliases: `h` (C headers), `cc`/`cxx`/`c++`/`hpp`/`hxx` (C++ variants)
|
||
|
||
## [1.32.2] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Render markdown unordered and ordered lists with proper bullet/number styles
|
||
|
||
## [1.32.1] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Improve light theme readability for tool call badges (darker text, higher bg opacity) and user message bubbles (more contrast)
|
||
|
||
## [1.32.0] — 2026-02-13
|
||
|
||
### Added
|
||
- Optimistic message rendering — sent messages appear instantly with status indicators (sending → sent)
|
||
- Debugging section in troubleshooting guide
|
||
|
||
### Fixed
|
||
- Theme switcher portal — max z-index, remove backdrop-blur to fix compositing issues
|
||
- Theme switcher rendered via portal to escape overflow/stacking context
|
||
- Theme switcher click handling — prevent click-outside from swallowing button clicks
|
||
|
||
### Tests
|
||
- Add i18n and highlight.js test suites (18 cases, 95 total)
|
||
|
||
## [1.31.1] — 2026-02-13
|
||
|
||
### Fixed
|
||
- Replace remaining hardcoded `text-zinc-*` classes in App.tsx with theme CSS variables for proper light/OLED theme support
|
||
|
||
## [1.31.0] — 2026-02-13
|
||
### Added
|
||
- Unit test infrastructure with Vitest — 27 tests across 3 suites (relativeTime, sessionDisplayName, messagesToMarkdown)
|
||
- `npm test` and `npm run test:watch` scripts
|
||
- Test step added to CI workflow (runs on all Node.js matrix versions)
|
||
|
||
## [1.30.1] — 2026-02-13
|
||
### Fixed
|
||
- Added missing `aria-label` attributes to icon-only buttons (sidebar close, search clear, JSON copy) for screen reader accessibility
|
||
- Added i18n keys for new aria-labels (EN + FR)
|
||
|
||
## [1.30.0] — 2026-02-13
|
||
### Added
|
||
- Service worker for PWA support — static assets are cached for instant loads and offline shell
|
||
- App is now installable as a standalone PWA on mobile and desktop (Add to Home Screen)
|
||
- Enhanced manifest with orientation, categories, and complete icon set
|
||
|
||
## [1.29.2] — 2026-02-13
|
||
### Fixed
|
||
- Images now show a pulsing loading skeleton while loading and a graceful error fallback (icon + alt text) when they fail to load
|
||
|
||
## [1.29.1] — 2026-02-13
|
||
### Fixed
|
||
- External links in markdown messages now open in a new tab with `rel="noopener noreferrer"` for security
|
||
|
||
## [1.29.0] — 2026-02-13
|
||
### Added
|
||
- System theme option — automatically follows OS light/dark preference via `prefers-color-scheme`, updates dynamically when OS setting changes
|
||
|
||
## [1.28.2] — 2026-02-13
|
||
### Fixed
|
||
- Resolved all 3 ESLint warnings (react-hooks/set-state-in-effect) — lint now passes with 0 errors and 0 warnings
|
||
|
||
## [1.28.1] — 2026-02-13
|
||
### Fixed
|
||
- Docker: added security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy)
|
||
- Docker: index.html is no longer cached, ensuring SPA updates are always picked up after redeploy
|
||
### Changed
|
||
- Added `engines` field (`node >=18`) and `lint:fix` npm script to package.json
|
||
|
||
## [1.28.0] — 2026-02-13
|
||
### Added
|
||
- Multi-tab split view — open 2 sessions side by side with a resizable divider
|
||
- Split view button in sidebar session actions (columns icon)
|
||
- Secondary pane supports full chat: history, streaming, sending, aborting
|
||
- Divider width persisted in localStorage
|
||
|
||
## [1.27.0] — 2026-02-13
|
||
### Added
|
||
- Syntax highlighting in chat input textarea — real-time markdown coloring (code blocks, inline code, bold, italic, headings, links) using transparent overlay technique
|
||
- Toggle button (highlighter icon) to enable/disable syntax highlighting, persisted in localStorage
|
||
|
||
## [1.26.0] — 2026-02-13
|
||
### Added
|
||
- Drag & drop session reordering in sidebar — custom order persists in localStorage, works within pinned/unpinned groups
|
||
|
||
## [1.24.0] — 2026-02-13
|
||
### Added
|
||
- Raw JSON viewer toggle on each message — hover to reveal `{}` button, click to show full gateway payload as formatted JSON with copy support
|
||
|
||
## [1.20.2] — 2026-02-13
|
||
### Fixed
|
||
- Theme switcher now actually works — migrated ~150 hardcoded Tailwind color classes across all 17 components to CSS custom properties
|
||
- All UI elements (backgrounds, text, borders, accents, hover states) now respond to Dark/Light/OLED theme changes in real-time
|
||
- Added theme-aware hover, separator, and scrollbar variables per theme mode
|
||
- Markdown styles (code, blockquotes, tables) now use theme variables instead of hardcoded colors
|
||
|
||
## [1.20.0] — 2026-02-12
|
||
### Added
|
||
- Theme switcher — Dark, Light, and OLED Black modes with 6 configurable accent colors (Cyan, Violet, Emerald, Amber, Rose, Blue)
|
||
- CSS custom properties system for consistent theming across all components
|
||
- Theme and accent preferences persisted in localStorage
|
||
|
||
## [1.18.0] — 2026-02-12
|
||
### Added
|
||
- Improved thinking/reasoning indicator with elapsed time counter — shows pulsing "Reasoning..." with timer when agent is thinking with hidden content, instead of generic bouncing dots
|
||
|
||
## [1.16.0] — 2026-02-12
|
||
### Added
|
||
- Display agent avatar from OpenClaw identity config — shown in assistant message bubbles and header when configured
|
||
|
||
## [1.15.1] — 2026-02-12
|
||
### Fixed
|
||
- Metadata viewer popup was invisible due to parent `overflow-hidden` — now renders via portal outside the message bubble
|
||
|
||
## [1.15.0] — 2026-02-12
|
||
### Added
|
||
- Message metadata viewer — discreet ℹ️ button on hover shows raw message details (id, role, timestamp, channel, etc.)
|
||
|
||
## [1.14.2] — 2026-02-12
|
||
### Fixed
|
||
- Textarea scrollbar only appears when content overflows max-height (no more permanent scrollbar)
|
||
|
||
## [1.14.1] — 2026-02-12
|
||
### Fixed
|
||
- Session deletion now persists across page refreshes via localStorage blacklist — deleted sessions no longer reappear after reload
|
||
|
||
## [1.14.0] — 2026-02-12
|
||
### Added
|
||
- Collapse/expand all tool calls toggle — floating button appears when conversation has tool calls, lets you collapse or expand all at once
|
||
|
||
## [1.13.0] — 2026-02-12
|
||
### Added
|
||
- Keyboard shortcuts Alt+↑ / Alt+↓ to navigate between sessions
|
||
- Shortcut documented in the keyboard shortcuts help panel (?)
|
||
|
||
## [1.12.0] — 2026-02-12
|
||
|
||
### Added
|
||
- Export conversation as Markdown file — download button in header saves current session with formatted messages, tool calls, thinking blocks, and timestamps
|
||
|
||
## [1.11.1] — 2026-02-12
|
||
|
||
### Fixed
|
||
- **Windows horizontal scrollbar** — hide horizontal scrollbar in textarea input; add word-wrap to prevent overflow
|
||
|
||
## [1.11.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **Relative timestamps in sidebar** — each session shows how recently it was active (2m, 3h, 1d)
|
||
- **Message preview in sidebar** — last message preview shown below session name
|
||
- **Recency sorting** — sessions sorted by most recently updated within pinned/unpinned groups
|
||
|
||
## [1.10.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **Agent name badge** — display the agent name (e.g. "Marlbot") in the header next to the session label (`17ff52a`)
|
||
|
||
## [1.9.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **Human-friendly session titles** — header and sidebar now show readable names (Main, Cron, Task + channel) instead of raw UUIDs; falls back to label or cleaned key (`52a1a7f`)
|
||
|
||
## [1.8.1] — 2026-02-12
|
||
|
||
### Fixed
|
||
- **Markdown rendering in long messages** — `autoFormatText` no longer wraps markdown prose in code fences; bold, headings, and bullet lists are now correctly rendered (`4c8faf0`)
|
||
|
||
## [1.7.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **Delete session from sidebar** — trash icon on hover with confirmation dialog; calls `sessions.delete` on the gateway (`e94325b`)
|
||
|
||
## [1.6.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **System event detection** — heartbeats, cron triggers, webhooks, and channel events now display as subtle inline notifications instead of full user message bubbles (`581675d`)
|
||
|
||
## [1.5.0] — 2026-02-12
|
||
|
||
### Added
|
||
- **Resizable sidebar** — drag the right edge to resize the sidebar; width persists across sessions (`fa9b10a`)
|
||
|
||
## [1.4.0] — 2026-02-12
|
||
|
||
New features and mobile fixes.
|
||
|
||
### Added
|
||
- **Session pinning** — pin important sessions to the top of the sidebar for quick access (`e24378a`)
|
||
- **Model badge** — see which AI model is handling the current session, displayed next to the token progress bar (`96f2883`, `1465ae1`)
|
||
|
||
### Fixed
|
||
- **Mobile viewport overflow** — chat messages no longer clip on left/right edges on iPhone (`8ef1b42`)
|
||
|
||
## [1.3.0] — 2026-02-12
|
||
|
||
New features improving daily usability.
|
||
|
||
### Added
|
||
- **Unread message indicators** — sessions with new messages show a visual badge in the sidebar so you never miss activity (`c0d27a7`)
|
||
- **Copy buttons on tool calls** — expanded tool call parameters and results now have one-click copy buttons (`908dbb4`)
|
||
- **Troubleshooting guide** — README now includes a troubleshooting section for common connection and build issues (`7a55940`)
|
||
|
||
### Fixed
|
||
- **CI lint errors** — resolved lint issues in Sidebar, TypingIndicator, and useGateway (`6734b54`)
|
||
|
||
## [1.2.2] — 2026-02-12
|
||
|
||
Code readability and developer experience polish.
|
||
|
||
### Added
|
||
- **Language labels on code blocks** — fenced code blocks now show the language name (e.g. "python", "bash") in a subtle label for easier identification (`ae3f683`)
|
||
- **Elapsed time on thinking indicator** — see how long the agent has been thinking with a live counter (`0c95150`)
|
||
|
||
## [1.2.1] — 2026-02-12
|
||
|
||
Small UX and documentation polish.
|
||
|
||
### Added
|
||
- **Auto-focus chat input** — input field automatically focuses when switching sessions or on connection, so you can start typing immediately (`f2038a2`)
|
||
- **Keyboard navigation for sessions** — use arrow keys to navigate the session list in the sidebar (`f55a24c`)
|
||
- **i18n contribution guide** — README now includes a section explaining how to add new languages (`f827307`)
|
||
|
||
## [1.2.0] — 2026-02-12
|
||
|
||
Polish, performance, and developer experience improvements.
|
||
|
||
### Added
|
||
- **Browser tab title** — shows the active session name in the tab title (`e53ef36`)
|
||
- **PWA support** — manifest, apple-touch-icon, and proper favicon sizes for installable webapp (`b8cbc75`)
|
||
- **Channel/type icons in session list** — Discord, Telegram, cron, and webchat sessions now show recognizable icons in the sidebar (`73d9e5f`)
|
||
- **Date separators** — visual dividers between messages from different days for easier conversation scanning (`375bd10`)
|
||
- **Screenshot in README** — added a real screenshot of the app to the README (`788909f`)
|
||
- **Loading indicator** — spinner when switching sessions (`cb882f5`)
|
||
- **Login URL validation** — inline hint when gateway URL doesn't start with ws:// or wss://, connect button disabled until valid (`dc49734`)
|
||
|
||
### Changed
|
||
- **Lazy-loaded Chat component** — reduces initial bundle size by deferring heavy markdown/syntax-highlighting imports (`b5eafde`)
|
||
|
||
### Fixed
|
||
- **Notification API guard** — no longer crashes in browsers that don't support the Notification API (`8301cba`)
|
||
- **ESLint + CI** — resolved all ESLint errors including React compiler rules; added lint step to CI pipeline (`916910f`, `29482e3`)
|
||
- **WebSocket reconnection** — exponential backoff with jitter instead of fixed-interval retry, preventing thundering herd on server restart (`f8be728`)
|
||
|
||
## [1.1.0] — 2026-02-11
|
||
|
||
A massive feature release turning PinchChat from a basic chat UI into a polished, accessible, and well-documented webchat client for OpenClaw.
|
||
|
||
### Added
|
||
- **OG card image + social meta tags** — rich previews when sharing links on Twitter/Discord/etc. (`88b6494`)
|
||
- **Retry/resend button on user messages** — resend a message if something went wrong (`5b2f3a3`)
|
||
- **Browser notifications + tab badge** — get notified of new messages even when the tab is in the background (`473d23c`)
|
||
- **PR template + security policy** — standardized PR descriptions and responsible disclosure process (`d020094`)
|
||
- **ErrorBoundary** — graceful crash recovery with a user-friendly error screen instead of a blank page (`b61a232`)
|
||
- **Keyboard shortcuts modal** — press `?` to see all available shortcuts (`ae83545`)
|
||
- **Session search filter** — filter sessions in the sidebar with `Ctrl+K` shortcut (`1779709`)
|
||
- **Emoji icons on tool call badges** — visual icons per tool type (🔍 web_search, ⚡ exec, 📖 read, etc.) (`72f7d76`)
|
||
- **Line break support** — messages now preserve single line breaks via remark-breaks (`59104b4`)
|
||
- **Copy button on assistant messages** — one-click copy of the full message text (`dd5b56e`)
|
||
- **Animated UI demo on landing page** — interactive fake chat showing tool call visualization, typing effects, and thinking indicators (`d26c498`)
|
||
- **Connection lost/reconnected banner** — visual feedback when WebSocket connection drops or recovers (`32a2166`)
|
||
- **Scroll-to-bottom button** — appears when scrolled up in chat, click to jump to latest messages (`b56c80a`)
|
||
- **Inline image display** — images render directly in chat with a click-to-expand lightbox (`762a5f2`)
|
||
- **Logo integration** — PinchChat logo in header, login screen, favicon, and OG meta tags (`97c16be`)
|
||
- **GitHub Pages landing page** — feature showcase at [marlburrow.github.io/pinchchat](https://marlburrow.github.io/pinchchat/) (`4f47732`)
|
||
- **Docker support** — Dockerfile, docker-compose.yml, CI auto-publish to `ghcr.io/marlburrow/pinchchat` (`5fd7300`)
|
||
- **Language selector** — toggle EN/FR in the header at runtime (`9b3aed4`)
|
||
- **Copy button on code blocks** — one-click copy for code snippets (`b6a989b`)
|
||
- **i18n support** — English and French UI via `VITE_LOCALE` env var (`99b7db9`)
|
||
- **Runtime login screen** — enter gateway credentials at runtime, no secrets baked into the build (`36f9480`)
|
||
- **NO_REPLY filtering** — silently hides agent NO_REPLY messages from the chat (`8834b2a`)
|
||
- **GitHub Actions CI** — lint and build checks on every push and PR (`a6b26b0`)
|
||
- **Issue templates** — bug report and feature request forms (`2d3ee47`)
|
||
- **Contributing guide** — CONTRIBUTING.md with dev setup and PR guidelines (`e34643d`)
|
||
|
||
### Changed
|
||
- **Landing page layout** — moved demo to hero section, replaced grid with alternating feature sections (`d118498`)
|
||
- **Token progress bars** — unified with subtle cyan opacity ramp, replacing the multi-color gradient (`84c8e24`)
|
||
- **Features rewrite** — pragmatic feature descriptions in README and landing page, highlighting real differentiators (`f556c8d`)
|
||
- **Architecture diagram** — replaced ASCII art with a Mermaid diagram in the README (`02d2ab3`)
|
||
- **Smart auto-scroll** — only auto-scrolls when the user is near the bottom (`3e7a596`)
|
||
- **Timestamp locale** — uses the selected i18n locale instead of hardcoded `fr-FR` (`88c393e`)
|
||
- **Vendor code-splitting** — split React and markdown dependencies into separate chunks, eliminating the 500KB bundle warning (`d7bdf3b`)
|
||
|
||
### Fixed
|
||
- **Prefers-reduced-motion** — all animations respect the user's OS motion preference (`fd66fed`)
|
||
- **ARIA accessibility** — added ARIA attributes to interactive elements for screen reader support (`78f82fd`)
|
||
- Landing page demo messages left-aligned (inherited text-align:center from hero) (`02e4bcf`)
|
||
- i18n key for 'Parameters' label in tool call expansion (`195ad62`)
|
||
- Sidebar overlay closes on Escape key + aria-hidden for screen readers (`91c22a1`)
|
||
- Corrected `index.html` lang attribute, page title, favicon path, and added SEO meta tags (`24c7d00`)
|
||
- Localized all hardcoded French strings to English with ARIA accessibility attributes (`3370916`)
|
||
- Fixed OpenClaw repo link in README (`604f902`)
|
||
|
||
### Improved
|
||
- **TypeScript strictness** — replaced `any` types with proper interfaces across gateway client, hooks, and components (`693229c`)
|
||
|
||
### Renamed
|
||
- **ClawChat → PinchChat** — full project rename across all files, configs, and docs (`d58c34f`)
|
||
|
||
## [1.0.0] — 2026-02-11
|
||
|
||
Initial release as ClawChat.
|
||
|
||
- Dark neon theme with Tailwind CSS v4
|
||
- WebSocket connection to OpenClaw gateway
|
||
- Session sidebar with token usage progress bars
|
||
- Markdown rendering with GFM and syntax highlighting
|
||
- Tool call badges with expandable JSON panels
|
||
- Thinking block display (collapsible)
|
||
- File upload with image compression and drag & drop
|
||
- Streaming response display
|