Commit Graph

178 Commits

Author SHA1 Message Date
Nicolas Varrot
3970e8a00c test: add unit tests for hooks (useBookmarks, useUpdateCheck)
- Export loadBookmarks/saveBookmarks and isNewer for testability
- Add 12 tests covering bookmark persistence and semver comparison
- Total: 165 tests passing
2026-02-20 09:04:38 +00:00
Nicolas Varrot
295ba7b3e5 test: add unit tests for notificationSound module 2026-02-19 21:02:49 +00:00
Nicolas Varrot
5c47dd2aeb feat: add password authentication support (closes #7)
Add token/password auth mode toggle on the login screen.
When password mode is selected, sends { password } instead of
{ token } in the WebSocket connect handshake.

Also adds clipboard utility tests and fixes credential test
to include authMode field.
2026-02-18 22:07:06 +00:00
togotago
16db1cf811 feat: strip webchat envelope metadata from user messages (#10)
When OpenClaw's webchat relays user messages, it wraps them in metadata
(conversation info JSON block + UTC timestamp prefix). This strips the
envelope at render time so users see only their actual text.

- Add hasWebchatEnvelope() and stripWebchatEnvelope() to systemEvent.ts
- Chain webchat + webhook stripping via stripAll() helper in ChatMessage
- Fix 'webhook' label only appearing for actual webhook messages, not
  for envelope-stripped webchat messages

Co-authored-by: togotago <drewmfleury@gmail.com>
2026-02-18 23:00:55 +01:00
togotago
0740d55dde feat: make system event messages collapsible (#9)
System events now render as compact pills (label + chevron + timestamp)
that expand on click to reveal the full message content.

- Collapsed (default): rounded-full pill with Zap icon, label, ChevronDown,
  and timestamp. Clean single-line appearance.
- Expanded (on click): rounded-xl container with full message text shown
  below in whitespace-pre-wrap. Chevron rotates 180deg.
- Added cursor-pointer and hover:bg-pc-elevated/50 for discoverability.
- Removed always-visible truncated text from collapsed state for a cleaner
  default appearance.

Co-authored-by: togotago <drewmfleury@gmail.com>
2026-02-18 23:00:50 +01:00
togotago
6311461ca0 feat: add system event detection for OpenClaw subagent and gateway messages (#8)
Add detection patterns for OpenClaw-specific system messages so they
render as subtle inline notifications instead of full chat bubbles:

- [System Message] — subagent completion notifications
- [Queued announce messages — batched system messages
- System: [timestamp] — gateway events (e.g. WhatsApp connected)
- Pre-compaction memory flush — internal memory prompts

Includes 6 test cases (5 positive matches + 1 negative for mid-sentence
false positive prevention).

Co-authored-by: togotago <drewmfleury@gmail.com>
2026-02-18 23:00:44 +01:00
Nicolas Varrot
42c84bc387 test: add deviceIdentity tests for buildDeviceAuthPayload (137 total) 2026-02-16 02:01:28 +00:00
Nicolas Varrot
151215cd4b feat: device identity for OpenClaw 2026.2.14+ pairing (#6)
- Generate Ed25519 keypair via Web Crypto API
- Persist keypair in IndexedDB (survives page reloads)
- Sign connect payload with device private key
- Include device object in connect params (id, publicKey, signature, signedAt)
- Handle NOT_PAIRED error with 'pairing' connection status
- Show pairing-pending banner with instructions to run openclaw devices approve
- Extract nonce from connect.challenge for v2 payload signing
- Add i18n translations for pairing banner in all 8 languages

Closes #6
2026-02-16 00:00:20 +00:00
Nicolas Varrot
da75ac3ccc fix: correct toolUseId property name in export test 2026-02-15 22:02:26 +00:00
Nicolas Varrot
08842d1b3a test: add tests for mergeWithCache, exportAsMarkdown, and slashUtils (127 total) 2026-02-15 22:01:45 +00:00
Nicolas Varrot
414e2ccae5 fix: session tooltip click-through, copy buttons stopPropagation, rename spacebar (v1.64.2) 2026-02-15 20:39:28 +00:00
Nicolas Varrot
7606a09ba9 fix: clipboard fallback for insecure contexts, session rename via sessions.patch
- Add copyToClipboard utility with execCommand fallback for HTTP deployments (#76)
- Replace all navigator.clipboard.writeText calls with copyToClipboard
- Session rename now persists server-side via sessions.patch (#78)
- Pass onRename callback from App to Sidebar
2026-02-15 20:07:33 +00:00
Nicolas Varrot
15ace2a9ba feat: collapsible long code blocks with expand/collapse toggle
Code blocks longer than 25 lines are now automatically collapsed,
showing only the first 10 lines with a gradient fade and a
'Show all N lines' button. Click to expand/collapse.

Also fixes version sync (package.json now matches v1.63.4)
and shows line count in the language header for long blocks.
2026-02-15 18:04:25 +00:00
Nicolas Varrot
eb63675761 fix: move action buttons below content to prevent overlap on short messages (v1.63.4) 2026-02-15 17:58:27 +00:00
Nicolas Varrot
bb100a0a22 fix: min-width on bubbles to prevent button wrap, fix session tooltip clickable, fix compact scope (v1.63.3) 2026-02-15 17:56:22 +00:00
Nicolas Varrot
38fb717758 fix: move retry button into inline toolbar (v1.63.2) 2026-02-15 17:43:48 +00:00
Nicolas Varrot
e52d5b7d51 fix: move message action buttons inside bubble, no more overflow clipping 2026-02-15 17:09:14 +00:00
Nicolas Varrot
9ee9874181 feat: swipe gesture to open/close sidebar on mobile
Swipe right from the left edge to open the sidebar,
swipe left to close it. Standard mobile UX pattern
with edge detection, vertical drift rejection, and
time-based velocity check.
2026-02-15 16:04:57 +00:00
Nicolas Varrot
7890d34583 feat: session rename — double-click or pencil icon to set custom session names
- Double-click session name in sidebar to rename inline
- Pencil icon on hover for discoverability
- Custom names persisted in localStorage
- Enter to confirm, Escape to cancel, blur to save
- Clear name to revert to auto-generated display name
- Search filter respects custom names
- i18n for all 8 languages
2026-02-15 14:03:10 +00:00
Nicolas Varrot
f012336e30 feat: reply-to-message with quote preview in chat input 2026-02-15 12:04:13 +00:00
Nicolas Varrot
b3eea972a1 feat: unread message count badges in sidebar sessions 2026-02-15 10:03:02 +00:00
Nicolas Varrot
578c0d2a47 feat: collapsible long assistant messages with show more/less toggle
Long assistant messages (>3000 chars) are now collapsed to 400px with a
gradient fade-out and a 'Show more' button. Clicking it reveals the full
message with a 'Show less' button to re-collapse. Streaming messages are
never collapsed. Fully i18n'd (8 languages).
2026-02-15 06:03:38 +00:00
Nicolas Varrot
bc59ed4a91 feat: unified settings modal consolidating theme, language, sound, and send shortcut preferences 2026-02-15 04:04:49 +00:00
Nicolas Varrot
e1ba4aaf9d fix: session deletion persistence and action button overlap
- Fix blacklist reconciliation logic that was removing blacklisted keys
  for sessions still on the gateway (inverted filter condition)
- Move message action buttons (copy, bookmark, metadata, retry) above
  the message bubble (-top-3) to prevent overlapping text content

Closes #73, #74
2026-02-15 02:02:00 +00:00
Nicolas Varrot
156c6d1990 feat: add Italian (it) locale support 2026-02-15 00:01:46 +00:00
Nicolas Varrot
45d5469c5c feat: add Chinese Simplified (zh) locale support 2026-02-14 22:01:55 +00:00
Nicolas Varrot
474701ba5e feat: add Portuguese (pt) locale support 2026-02-14 20:02:12 +00:00
Nicolas Varrot
d7250ead32 feat: add Japanese (ja) locale support 2026-02-14 17:53:48 +00:00
Nicolas Varrot
bc7fc08a5c feat: add German (de) locale support 2026-02-14 17:24:01 +00:00
Nicolas Varrot
8a95abe809 feat: add Spanish (es) locale support 2026-02-14 16:55:53 +00:00
Nicolas Varrot
fbb63b920c feat: session info popover on header click 2026-02-14 16:25:08 +00:00
Nicolas Varrot
be631a4df7 feat: slash command autocomplete in chat input
Type '/' to see available OpenClaw commands (/status, /reasoning,
/verbose, /model, /compact, /reset, /help) with descriptions.
Navigate with arrow keys, select with Tab/Enter.
Supports EN/FR i18n.
2026-02-14 15:57:39 +00:00
Nicolas Varrot
bd5ff6b75a feat: context compaction button in token bar (≥50% usage) 2026-02-14 15:25:17 +00:00
Nicolas Varrot
926971324b feat: export conversation as Markdown download 2026-02-14 14:54:52 +00:00
Nicolas Varrot
70d29dc70e feat: preserve messages after compaction (IndexedDB cache) + show agent name in header
- Add IndexedDB message cache to retain pre-compaction history locally
- Show compaction separator with amber styling when messages are compacted
- Archived messages render at 60% opacity above the separator
- Display agent name (from gateway identity) in header instead of 'PinchChat' when available
- Fallback to 'PinchChat' when no agent name is configured
- Add i18n keys for compaction separator (EN/FR)

Closes #72, #69
2026-02-14 14:25:41 +00:00
Nicolas Varrot
143e9486c2 feat: PWA install prompt, brand-colored channel icons, image load fix, semantic connection indicator
- Fix image display bug: remove loading='lazy' + use opacity instead of hidden (#66)
- PWA: add id/scope to manifest, fix SW cache name, add install prompt hook + button (#64)
- Colorize channel icons with brand colors (Discord blurple, Telegram blue, etc.) (#68)
- Use semantic green for connection indicator instead of theme accent (#70)
- Replace Sparkles icon with PinchChat logo in sidebar (#65)
- Replace decorative dots in sidebar footer with GitHub link (#71)
2026-02-14 13:58:18 +00:00
Nicolas Varrot
1c9e90b132 feat: persist scroll position per session when switching 2026-02-14 11:53:05 +00:00
Nicolas Varrot
aa9680cad6 feat: message bookmarks — star important messages and jump back to them
- Add bookmark button on message hover (amber star icon)
- Bookmarked messages show a small star indicator in the timestamp row
- Floating bookmarks panel to list and jump to bookmarked messages
- Bookmarks persisted in localStorage per session
- i18n support (EN/FR)
2026-02-14 09:56:37 +00:00
Nicolas Varrot
1c804cb53b feat: word-wrap toggle for code blocks
Add a persistent wrap/nowrap toggle button in the code block header bar,
consistent with the existing tool call content viewer. Persisted in
localStorage. Default is nowrap (existing behavior).
2026-02-14 07:55:58 +00:00
Nicolas Varrot
1c564d57b5 feat: configurable send shortcut (Enter vs Ctrl+Enter)
Add toggle in chat input to switch between Enter-to-send (default)
and Ctrl+Enter-to-send modes. Preference persists in localStorage.
Keyboard shortcuts modal reflects the current setting.
2026-02-14 05:54:11 +00:00
Nicolas Varrot
058501709e chore: fix lint warnings — suppress eslint-disable on setState in effects 2026-02-14 03:54:30 +00:00
Nicolas Varrot
28fe46d523 feat: show new message count badge on scroll-to-bottom button
When scrolled up and new messages arrive, the scroll-to-bottom button
now shows a count badge (e.g. '3', '99+') instead of just bouncing.
This gives users a clear sense of how many messages they missed.
2026-02-14 01:54:13 +00:00
Nicolas Varrot
a52bca40d5 refactor: remove HighlightedTextarea (cursor desync unfixable) 2026-02-14 00:49:53 +00:00
Nicolas Varrot
cb5a67ba20 fix: disable syntax highlight by default (cursor desync issue) 2026-02-14 00:45:55 +00:00
Nicolas Varrot
b248963e71 feat: auto-detect WSS gateway URL for HTTPS deployments 2026-02-14 00:36:13 +00:00
Nicolas Varrot
0bf25f40a9 feat: add suggestion chips to empty chat state
Clickable example prompts appear when a session has no messages,
giving users quick-start ideas. 2x2 grid on desktop, stacked on mobile.
Fully i18n'd (EN/FR).
2026-02-13 23:55:26 +00:00
togotago
f46d233553 fix: reconcile deleted sessions blacklist against gateway (#4)
Fix: reconcile deleted-sessions blacklist against gateway on each refresh. Permanent sessions like agent:main:main auto-recover from accidental deletion. Closes #3
2026-02-14 00:52:06 +01:00
Nicolas Varrot
d3b1b931b2 fix: clearer update indicator — current version + separate green badge for available update 2026-02-13 22:11:04 +00:00
Nicolas Varrot
d478eee638 fix: cursor desync in highlighted textarea (#68) + update indicator (#67)
- Remove font-style:italic from .ht-italic (different glyph widths cause desync)
- Remove font-weight:600 from .ht-heading (bolder glyphs are wider)
- Remove background/border-radius from code token spans
- Remove text-decoration from .ht-link
- Token spans now ONLY use color — zero text geometry changes
- Use inherit for font-size/line-height in shared .ht-backdrop/.ht-textarea
- Add update check hook: polls GitHub releases, shows indicator in sidebar
2026-02-13 22:01:25 +00:00
Nicolas Varrot
2b095278c7 feat: session filter chips in sidebar — filter by channel type, active status 2026-02-13 21:54:45 +00:00