Commit Graph

373 Commits

Author SHA1 Message Date
Nicolas Varrot
85a14224ad fix: theme switcher portal — max z-index, remove backdrop-blur to fix compositing 2026-02-13 08:46:13 +00:00
Nicolas Varrot
885cd0ea22 fix: render theme switcher via portal to escape overflow/stacking context 2026-02-13 08:44:26 +00:00
Nicolas Varrot
f2162c6731 test: add i18n and highlight.js test suites (18 cases, 95 total) 2026-02-13 08:42:59 +00:00
Nicolas Varrot
317096499c fix: theme switcher click handling — prevent click-outside from swallowing button clicks 2026-02-13 08:36:12 +00:00
Nicolas Varrot
97ceb08b86 docs: release v1.31.1 — theme variable fix in App.tsx 2026-02-13 08:27:31 +00:00
Nicolas Varrot
3fcaa1eef8 fix: replace remaining hardcoded zinc color classes with theme variables in App.tsx 2026-02-13 08:26:54 +00:00
Nicolas Varrot
e698e64bc8 test: add unit tests for image, utils, and credentials modules (22 cases) 2026-02-13 08:11:17 +00:00
Nicolas Varrot
3fad7b1e0a test: expand exportChat coverage with tool_result and edge case tests 2026-02-13 07:56:54 +00:00
Nicolas Varrot
bb9393c138 test: add systemEvent utility tests (21 cases) 2026-02-13 07:40:45 +00:00
Nicolas Varrot
0e4ae0ed7f ci: add test coverage reporting with v8 provider
- Add vitest.config.ts with v8 coverage provider
- Add npm run test:coverage script
- Add coverage step to CI (Node 22, reports in job summary)
- Coverage tracks src/lib/ utilities (currently ~21% lines)
- Install @vitest/coverage-v8 dev dependency
2026-02-13 07:27:02 +00:00
Nicolas Varrot
41f3952548 docs: update CONTRIBUTING.md with lint and test steps, remove duplicate PR template 2026-02-13 07:10:33 +00:00
Nicolas Varrot
141bc4e8fc docs: release v1.31.0 — unit test infrastructure 2026-02-13 06:59:02 +00:00
Nicolas Varrot
c4725e65c2 feat: add Vitest unit tests for utility functions
- Set up Vitest with 27 tests across 3 test suites
- relativeTime: edge cases, time buckets, future timestamps
- sessionDisplayName: labels, kinds, channels, UUID truncation
- messagesToMarkdown: roles, blocks, tool calls, system events
- Add test and test:watch npm scripts
- Add test step to CI workflow
2026-02-13 06:58:39 +00:00
Nicolas Varrot
f05db6aa6d refactor: replace console.log with debug logger in gateway client
WebSocket debug logs are now silent by default. Enable with:
  localStorage.setItem('pinchchat:debug', '1')

Reduces console noise in production while keeping full debug
visibility available for developers.
2026-02-13 06:41:26 +00:00
Nicolas Varrot
6b0261f9c1 perf: reduce bundle size by using custom highlight.js subset
Replace highlight.js/lib/common (36 languages) with a curated subset
of 16 languages relevant for coding-assistant chat UIs. Both ToolCall
(direct hljs) and ChatMessage (rehype-highlight) now share the same
custom bundle from src/lib/highlight.ts.

Languages included: bash, css, diff, dockerfile, go, ini, javascript,
json, markdown, python, rust, shell, sql, typescript, xml, yaml.

Markdown chunk: 477KB → 336KB (-30%, -45KB gzipped)
2026-02-13 06:11:46 +00:00
Nicolas Varrot
8679fdc3a0 docs: add pull request template for contributors 2026-02-13 05:55:01 +00:00
Nicolas Varrot
7819383812 docs: release v1.30.1 — accessibility aria-labels 2026-02-13 05:42:56 +00:00
Nicolas Varrot
de6976bae8 fix: add missing aria-labels to icon-only buttons for accessibility
- Sidebar close button: aria-label for screen readers
- Sidebar search clear button: aria-label
- ChatMessage raw JSON copy button: aria-label
- Added i18n keys: sidebar.close, sidebar.clearSearch (EN + FR)
2026-02-13 05:42:23 +00:00
Nicolas Varrot
72f410566a docs: add ARCHITECTURE.md with codebase map for contributors 2026-02-13 05:26:47 +00:00
Nicolas Varrot
78dd2d3b11 docs: release v1.30.0 — PWA service worker 2026-02-13 05:12:00 +00:00
Nicolas Varrot
5a4c5ba457 feat: add service worker for PWA support (offline caching, installability)
- Add sw.js with stale-while-revalidate caching for static assets
- Network-first for HTML navigation, skip API/WS requests
- Register service worker in main.tsx on page load
- Enhanced manifest.json with orientation, categories, and all icon sizes
- App is now installable as a standalone PWA on mobile and desktop
2026-02-13 05:11:39 +00:00
Nicolas Varrot
33d72d65bd docs: release v1.29.2 — image loading & error states 2026-02-13 04:57:22 +00:00
Nicolas Varrot
5f3f73e4c9 fix: add loading skeleton and error fallback for images
- Show a pulsing placeholder while images load
- Display a graceful error state with ImageOff icon when images fail to load
- Prevents broken image icons from cluttering the chat
2026-02-13 04:56:47 +00:00
Nicolas Varrot
d106f51d9c docs: release v1.29.1 — secure external links 2026-02-13 04:42:54 +00:00
Nicolas Varrot
dfbfc375da fix: open external links in new tab with rel=noopener noreferrer
Markdown links pointing to external URLs (http/https) now open in a
new tab with target=_blank and rel='noopener noreferrer' for security.
Internal/relative links are unaffected.
2026-02-13 04:42:39 +00:00
Nicolas Varrot
ad6f81d4d7 docs: update landing page Recent Updates with v1.18-v1.29 features
Replace outdated feature cards (v1.4-v1.13) with the latest additions:
- Themes & accent colors (v1.20-v1.29)
- Thinking/reasoning display (v1.18-v1.25)
- Split view (v1.28)
- Message search (v1.22)
- Syntax highlighting input (v1.27)
- Drag & drop sessions (v1.26)
- Agent avatars (v1.19)
- Raw JSON & metadata viewer (v1.15-v1.24)
- Keyboard shortcuts (v1.13, kept)
2026-02-13 04:26:50 +00:00
Nicolas Varrot
c36c9fc86b docs: release v1.29.0 — system theme option 2026-02-13 04:13:16 +00:00
Nicolas Varrot
2157d7ebd5 feat: add System theme option that follows OS color scheme
Adds a 'System' option to the theme switcher that automatically uses
light or dark theme based on the OS prefers-color-scheme setting.
Dynamically updates when the OS preference changes (e.g. scheduled
dark mode). i18n labels added for EN/FR.
2026-02-13 04:13:01 +00:00
Nicolas Varrot
aa37d7b313 docs: add Contributor Covenant Code of Conduct 2026-02-13 03:58:13 +00:00
Nicolas Varrot
e0a418d332 docs: release v1.28.2 — zero lint warnings 2026-02-13 03:42:08 +00:00
Nicolas Varrot
1770e95d0a fix: resolve all ESLint warnings (setState in useEffect)
Suppress 3 react-hooks/set-state-in-effect warnings with targeted
eslint-disable comments. These are intentional patterns:
- ChatInput: restore draft text on session switch
- MessageSearch: reset active index on query change
- ToolCall: sync open state with global collapse/expand toggle

Lint now passes with 0 errors and 0 warnings.
2026-02-13 03:41:39 +00:00
Nicolas Varrot
3149457bf7 docs: release v1.28.1 — security headers and nginx caching fix 2026-02-13 03:27:59 +00:00
Nicolas Varrot
979bc14ca8 fix: add security headers and no-cache for index.html in nginx config
- X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy
- Prevent caching index.html so SPA updates are always picked up
- Add engines field (node >=18) and lint:fix script to package.json
2026-02-13 03:27:29 +00:00
Nicolas Varrot
f27f386332 chore: add .editorconfig and .nvmrc for consistent DX 2026-02-13 03:10:47 +00:00
Nicolas Varrot
28acf1b4d5 docs: update README features with split view, syntax highlighting, drag & drop, raw JSON viewer, and channel icons 2026-02-13 02:55:29 +00:00
Nicolas Varrot
381c8951c8 docs: release v1.28.0 — split view for 2 sessions side by side 2026-02-13 02:44:58 +00:00
Nicolas Varrot
f09482e6cb feat: multi-tab split view for 2 sessions side by side
- Add split view button (columns icon) in sidebar session actions
- Click to open any session in a secondary pane alongside the primary
- Resizable divider between panes (drag to resize, persisted in localStorage)
- Secondary pane supports full chat: history, streaming, send, abort
- Close split view via X button or clicking the split icon again
- Each pane has independent scroll, search, and tool collapse
- Keyboard shortcut and i18n support (EN/FR)
2026-02-13 02:44:33 +00:00
Nicolas Varrot
00bf6d156f docs: release v1.27.0 — syntax highlighting in textarea 2026-02-13 02:26:49 +00:00
Nicolas Varrot
b0492434d0 feat: syntax highlighting in chat input textarea
Real-time markdown syntax coloring while typing using a transparent
textarea overlay approach. Highlights: code blocks, inline code,
bold, italic, headings, and links. Toggle button (highlighter icon)
to enable/disable, persisted in localStorage.
2026-02-13 02:26:15 +00:00
Nicolas Varrot
e3149661d8 docs: release v1.26.0 — drag & drop session reordering 2026-02-13 02:11:14 +00:00
Nicolas Varrot
35652eaeb5 feat: drag & drop session reordering in sidebar
- Drag sessions to reorder within pinned/unpinned groups
- Custom order persists in localStorage
- Visual feedback: dragged item fades, drop target highlights
- Disabled during search filtering
- Works alongside existing pin feature (pinned group stays on top)
2026-02-13 02:10:53 +00:00
Nicolas Varrot
16af579e3c docs: mark feedback #51 as done 2026-02-13 01:56:46 +00:00
Nicolas Varrot
60ecaa5905 docs: release v1.25.0 — live markdown preview 2026-02-13 01:56:35 +00:00
Nicolas Varrot
4dfaaff2b5 feat: live markdown preview toggle in chat input
- Eye icon button next to file picker toggles preview on/off
- Shows rendered markdown above textarea in real-time
- Lazy-loads ReactMarkdown (no bundle impact when off)
- Preference persisted in localStorage
- i18n: EN/FR labels for show/hide preview
2026-02-13 01:56:13 +00:00
Nicolas Varrot
550a9dbba9 docs: release v1.24.0 — raw JSON viewer 2026-02-13 01:41:22 +00:00
Nicolas Varrot
82d2e37a27 feat: raw JSON viewer toggle on each message
Add a {⁠} button (visible on hover) that toggles a collapsible panel
showing the full raw gateway JSON payload for any message.
Includes copy-to-clipboard, word-wrap, and i18n (EN/FR).
Useful for debugging and understanding the gateway protocol.

Closes feedback #52
2026-02-13 01:41:04 +00:00
Nicolas Varrot
e1cfb47ae0 docs: update README with new features and Ctrl+F shortcut 2026-02-13 01:25:45 +00:00
Nicolas Varrot
6125e0468b docs: mark feedback #54 as done 2026-02-13 01:12:45 +00:00
Nicolas Varrot
17836bf5ed docs: release v1.23.0 — webhook scaffolding cleanup 2026-02-13 01:12:19 +00:00
Nicolas Varrot
c7cd47b09a feat: strip webhook/hook scaffolding from user messages
Messages from /hooks/agent containing SECURITY NOTICE blocks and
<<<EXTERNAL_UNTRUSTED_CONTENT>>> delimiters are now cleaned up.
Only the actual user content is displayed, with a small webhook
badge indicator showing the message originated from a webhook.

Closes feedback #54
2026-02-13 01:12:04 +00:00