Commit Graph

408 Commits

Author SHA1 Message Date
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
Nicolas Varrot
82b76cc0a6 docs: release v1.22.0 — message search (Ctrl+F) 2026-02-13 00:57:32 +00:00
Nicolas Varrot
6c19c26b84 feat: message search with Ctrl+F — filter and navigate matches in conversation 2026-02-13 00:57:19 +00:00
Nicolas Varrot
7bcbf8192b docs: release v1.21.0 — streaming thinking/reasoning display 2026-02-13 00:41:42 +00:00
Nicolas Varrot
664fc0e109 feat: display thinking/reasoning content during streaming
Extract thinking blocks from delta events and render them inline
using the existing ThinkingBlock component. Previously, thinking
content was only visible after the stream finished (via history
reload). Now it appears in real-time as the agent reasons.

Closes feedback #57.
2026-02-13 00:41:23 +00:00
Nicolas Varrot
ba92ce8825 docs: release v1.20.2 — theme switcher actually works 2026-02-13 00:30:30 +00:00
Nicolas Varrot
b60c0ce3c4 fix: migrate all components to theme-aware CSS variables
Replace ~150 hardcoded Tailwind color classes (bg-zinc-*, text-zinc-*,
border-white/*, text-cyan-*, bg-cyan-*) with CSS custom properties
(--pc-*) across all 17 components.

Add @theme block in index.css for Tailwind v4 theme-aware utility
classes (bg-pc-elevated, text-pc-text, border-pc-border, etc.).

Add --pc-hover, --pc-hover-strong, --pc-separator variables per theme
(white/alpha for dark/OLED, black/alpha for light).

Theme switcher (dark/light/OLED) now actually works — all UI elements
respond to theme changes in real-time.

Fixes #55
2026-02-13 00:29:50 +00:00
Nicolas Varrot
62663e1ac9 docs: release v1.20.1 — fix CI lint errors 2026-02-13 00:13:41 +00:00
Nicolas Varrot
73a46f3ba7 fix: resolve all ESLint errors blocking CI releases
- Extract ThemeContext and ToolCollapseContext definitions into separate
  files to satisfy react-refresh/only-export-components rule
- Move useTheme and useToolCollapse hooks to dedicated hook files
- Fix empty catch block in ThemeContext (add comment)
- Replace Date.now() ref in ThinkingIndicator with useState initializer
- Update all imports across components

Closes feedback #58
2026-02-13 00:13:12 +00:00
Nicolas Varrot
8ab4f83666 chore: mark feedback #47 done 2026-02-12 23:51:28 +00:00
Nicolas Varrot
7f4e263845 docs: release v1.20.0 — theme switcher 2026-02-12 23:51:19 +00:00
Nicolas Varrot
b20bf41bf4 feat: theme switcher — dark, light, OLED modes with configurable accent colors
- Add ThemeContext with CSS custom properties for all base colors
- Three theme modes: Dark (default), Light, OLED Black
- Six accent colors: Cyan, Violet, Emerald, Amber, Rose, Blue
- Theme switcher dropdown in header (palette icon)
- Persisted in localStorage
- CSS variables replace hardcoded hex colors in index.css and components
- i18n support (EN/FR) for theme labels
2026-02-12 23:51:01 +00:00
Nicolas Varrot
5c35bdda32 docs: release v1.19.0 — tool call word-wrap toggle 2026-02-12 23:47:16 +00:00
Nicolas Varrot
bd446aa2e6 feat: word-wrap toggle on tool call content blocks
Add a wrap/nowrap toggle button on tool call parameters and results.
Default: word-wrap enabled (pre-wrap + break-words) so content fits
without horizontal scrolling. Click the toggle to switch to nowrap
mode for raw formatting with horizontal scroll.

Closes feedback #41
2026-02-12 23:46:55 +00:00
Nicolas Varrot
4bcc9f1eff chore: mark feedback #40 done 2026-02-12 23:43:18 +00:00
Nicolas Varrot
25e63f8d18 feat: improved thinking/reasoning indicator with elapsed time counter
When the agent is reasoning with hidden thinking (thinking=low), show a
pulsing 'Reasoning...' indicator with elapsed time instead of generic
bouncing dots. Once text content starts streaming, falls back to the
regular streaming dots.

Closes feedback #40
2026-02-12 23:42:39 +00:00