- Move guessLanguage, looksLikeCode, autoFormatText to src/lib/autoFormat.ts
- Add comprehensive test suite (23 tests) covering language detection, code detection, and auto-formatting
- Reduce ChatMessage.tsx by ~90 lines
- Total tests: 238 (up from 215)
Introduces a `/new` slash command that lets users create a fresh chat
session for the current agent without leaving the chat input.
- Add `createNewSession` to `useGateway` that calls `sessions.create`
on the gateway (with a client-side fallback key when the RPC is
unavailable).
- Register `/new` in the slash-command menu with i18n descriptions
across all 8 supported languages.
- Wire `onNewSession` through `Chat` → `ChatInput` so typing `/new`
triggers session creation.
- Add `extractAgentIdFromKey` and `formatAgentId` helpers to
`sessionName.ts` to derive a human-readable agent name from the
session key (e.g. `agent:my-cool-bot:…` → "My Cool Bot").
- Use the new helpers in `Header` and `App` to show per-session agent
names, especially for sub-agent sessions where the gateway-level
identity differs from the session agent.
Made-with: Cursor
Images sent by the user were transmitted to the gateway correctly but
not shown in the chat UI, making it appear as if attachments were lost.
Now image blocks are included in the user message for immediate visual
feedback.
Closes#14
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.
- 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
- 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
- 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