422 Commits

Author SHA1 Message Date
shiyue
8071cdd3cd fix: use openclaw-control-ui clientId to bypass device pairing
Some checks failed
CI / build (20) (push) Has been cancelled
CI / build (22) (push) Has been cancelled
Docker / build-and-push (push) Has been cancelled
CI / notify-failure (push) Has been cancelled
2026-03-14 14:10:01 +08:00
shiyue
a03e8db621 feat: support cross-origin WebSocket proxy for remote gateway
Some checks failed
CI / build (20) (push) Has been cancelled
CI / build (22) (push) Has been cancelled
CI / notify-failure (push) Has been cancelled
Docker / build-and-push (push) Has been cancelled
- Add nginx /gwproxy/ reverse proxy with correct Origin header
- Auto-detect cross-origin gateway URL in GatewayClient.connect()
- Detect path-based proxy deployment in LoginScreen getInitialUrl()
- Change nginx/Docker to listen on port 3000, use host network mode
2026-03-14 13:22:24 +08:00
Nicolas Varrot
246953963b chore: update dependencies (minor/patch bumps) 2026-03-12 21:04:06 +00:00
Nicolas Varrot
7c50b8a77e chore: bump version to 1.69.3 2026-03-11 09:04:55 +00:00
Nicolas Varrot
bc3e507a77 fix: restrict file attachments to images only
The OpenClaw gateway only supports image attachments in chat.send;
non-image files were silently dropped, confusing users (fixes #24).

- Filter non-image files in addFiles handler
- Update file input accept to image/* only
- Remove unused fileToBase64 helper
- Update i18n labels from 'Attach file' to 'Attach image' (all 8 langs)

Fixes #24
2026-03-11 09:04:42 +00:00
Ruhani Rabin
c4eb7dd844 feat: insert selected text into chat editor from previous responses (like chatgpt ui) (#23)
Nice contribution! Select text → Ask in Chat feature. Minor dark-mode and a11y tweaks can be done in follow-up.
2026-03-10 15:29:38 +01:00
Nicolas Varrot
d3d04540c0 chore: remove unused eslint-disable directive in gateway test 2026-03-10 09:02:19 +00:00
Nicolas Varrot
c092ab9a00 chore: bump version to 1.69.2 2026-03-09 21:02:06 +00:00
Nicolas Varrot
e223804777 fix: prevent Enter from sending message during IME composition
Check e.nativeEvent.isComposing and keyCode 229 in addition to
React state, fixing a race condition where compositionend fires
before keydown on some browsers (Chrome/macOS).

Fixes #20
2026-03-09 21:01:33 +00:00
MarlburroW
a129d22007 Merge pull request #22 from b4arena/fix/password-mode-device-signing
fix: exclude token from device signing payload in password auth mode
2026-03-09 22:00:24 +01:00
Marcel Hild
daeac3d631 test: add regression test for password-mode device signing
Covers the case where authMode is 'password' and deviceIdentity is present.
Asserts that buildDeviceAuthPayload is called with token:null (not the password
value) and that the connect request uses auth.password, not auth.token.

Addresses Copilot review comment on PR #22.
2026-03-09 09:19:43 +01:00
Marcel Hild
5a6179aa8b fix: exclude token from device signing payload in password auth mode
When authMode is 'password', the auth token is null/undefined, but was
being included in the device signing payload. This caused a signature
mismatch on the gateway side, preventing password-mode auth from working.
2026-03-08 13:19:44 +01:00
ppzzxx
c9dc2a671a Fix/chinese ime enter send (#21)
* fix: prevent message send when Chinese IME is composing

- Add e.isComposing check to Enter key handler in ChatInput
- This prevents accidental message sending when pressing Enter to confirm Chinese/Japanese input
- Fixes issue where messages would be sent prematurely when using IME composition

Refs: #issue

* fix: prevent message send when Chinese IME is composing

- Add isComposing state to track IME composition status
- Add onCompositionStart/onCompositionEnd event handlers to textarea
- Check isComposing state in Enter key handler to prevent accidental send

This fixes the issue where pressing Enter to confirm Chinese/Japanese input
would prematurely send the message instead of just confirming the IME selection.

The fix uses explicit composition state tracking instead of relying solely on
e.isComposing, which provides more reliable cross-browser behavior.

---------

Co-authored-by: 代码专家 <coder@openclaw.ai>
2026-03-08 13:15:11 +01:00
Nicolas Varrot
463a73b6ab chore: bump version to 1.69.1 2026-03-06 09:03:46 +00:00
Nicolas Varrot
6e9f0e39cc fix(a11y): add role=status and aria-hidden to TypingIndicator
- Add role="status" with aria-label for screen reader announcement
- Mark decorative bounce dots as aria-hidden
2026-03-06 09:03:40 +00:00
Nicolas Varrot
8540902a8a chore: bump version to 1.69.0 2026-03-05 09:02:52 +00:00
MarlburroW
e6d2319adc Merge pull request #18 from ruhanirabin/ui-font-appearance
UI font appearance
2026-03-05 10:01:30 +01:00
MarlburroW
d34be43bb3 Merge pull request #19 from kerbeus-a/feature/per-agent-identity
feat: per-agent identity and session filtering via VITE env vars
2026-03-05 10:00:44 +01:00
Ruhani Rabin
5712d0da40 fix: storage key re-declaration removed 2026-03-05 11:11:41 +08:00
kerbeus-a
397a0e9137 docs: add VITE_AGENT_SESSION and VITE_AGENT_PREFIX to .env.example 2026-03-04 22:05:03 -05:00
Codex
6d4e47774b feat: per-agent identity and session filter via VITE env vars 2026-03-04 21:10:48 -05:00
Nicolas Varrot
effa9f2c2c chore: bump version to 1.68.4 2026-03-04 09:05:21 +00:00
Nicolas Varrot
e2d68925ce refactor: extract history parsing into shared historyParser lib with tests
- Extract duplicated raw message parsing from useGateway and useSecondarySession into src/lib/historyParser.ts
- Add 15 tests covering text, thinking, image, tool_use, tool_result, toolCall/toolResult formats, merging, orphan handling, metadata, and edge cases
- Remove ~126 lines of duplicated code across the two hooks
- Slight bundle size reduction (index: 142.11→140.29 KB)
2026-03-04 09:05:15 +00:00
Ruhani Rabin
87bdaaee37 fix: polish typography settings and storage helpers 2026-03-04 11:45:28 +08:00
Ruhani Rabin
989b74f48a fix: Fixed TypeScript error in SettingsModal.tsx 2026-03-04 11:10:39 +08:00
Ruhani Rabin
090e39016f feat: Font options for the UI in larger screens, for code and screen fonts display 2026-03-04 11:08:31 +08:00
Nicolas Varrot
b7c18d5f3c refactor: extract autoFormat utils from ChatMessage to lib with tests
- 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)
2026-03-03 21:04:06 +00:00
Nicolas Varrot
bd7763a6d3 chore: bump version to 1.68.2 2026-03-03 09:02:00 +00:00
Nicolas Varrot
772ec18d9d fix: slash commands without args now submit immediately on selection
When selecting a slash command without arguments (e.g. /new, /status, /help)
from the autocomplete menu, the command now executes immediately instead of
getting stuck in a loop where the menu kept intercepting Enter keypresses.

Fixes #17
2026-03-03 09:01:51 +00:00
Nicolas Varrot
e634083465 refactor: deduplicate ReactMarkdown lazy import in ChatInput
Replace standalone lazy import of ReactMarkdown + remark-gfm in
ChatInput with the existing LazyMarkdown component, which already
handles lazy loading with remark-gfm, remark-breaks, and
rehype-highlight. Reduces code duplication and ensures consistent
markdown rendering between chat messages and the input preview.
2026-03-01 09:03:10 +00:00
Nicolas Varrot
01e8ea2836 test: add tests for extractAgentIdFromKey and formatAgentId 2026-02-28 21:02:18 +00:00
MarlburroW
c2a4ddc5e7 Merge pull request #16 from yardobr/feat/new-session-command
feat: add /new slash command to create chat sessions
2026-02-28 22:00:29 +01:00
Yaro
4e66d7c4bd feat: add /new slash command to create chat sessions
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
2026-02-28 22:43:20 +02:00
Nicolas Varrot
a11cebdc55 a11y: add aria-labels to sidebar footer buttons 2026-02-28 09:02:52 +00:00
Nicolas Varrot
d852652390 chore: bump to v1.67.4 2026-02-27 21:02:18 +00:00
Nicolas Varrot
9ef1c8be0d perf: lazy-load highlight.js in ToolCall for better code-splitting
ToolCall.tsx previously imported highlight.js statically, pulling the
entire hljs bundle into the main Chat chunk and preventing Vite from
splitting it into the lazy markdown chunk.

Now hljs is dynamically imported and loaded on first use. This:
- Removes the Vite build warning about mixed static/dynamic imports
- Reduces the Chat chunk by ~1.6 KB
- Consolidates hljs into the lazy markdown chunk
- Renders unhighlighted text instantly, then re-renders with syntax
  highlighting once hljs loads (typically < 100ms)
2026-02-27 21:02:13 +00:00
Nicolas Varrot
e77a1c8dcb fix: display image attachments in user message bubbles
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
2026-02-27 13:31:39 +00:00
Nicolas Varrot
88c98f4a66 a11y: add role and keyboard dismiss to overlay backdrops in Sidebar 2026-02-27 09:02:19 +00:00
Nicolas Varrot
8279687898 chore: bump to v1.67.2 2026-02-25 21:02:33 +00:00
Nicolas Varrot
d49d118e26 a11y: add aria-labels and aria-pressed/expanded to LoginScreen buttons 2026-02-25 21:02:23 +00:00
Nicolas Varrot
a9fb646662 chore: bump to v1.67.1 2026-02-24 21:02:05 +00:00
Nicolas Varrot
59a4da1933 refactor: extract shared message parsing helpers into lib/messageExtract
- Move extractText and extractThinking from useGateway and useSecondarySession into shared lib
- Add comprehensive unit tests (13 tests) for both functions
- Eliminate code duplication between the two hooks
2026-02-23 21:02:45 +00:00
Nicolas Varrot
ecdff58dca chore: bump to v1.66.7 2026-02-23 14:46:27 +00:00
Nicolas Varrot
f685f716f8 test: add unit tests for usePwaInstall hook 2026-02-23 14:46:19 +00:00
Nicolas Varrot
e8fe3329f3 feat: add configurable client ID for WebSocket connect frame
Add a clientId option that can be set via:
- VITE_CLIENT_ID env var at build time
- Advanced section in the login screen at runtime
- Stored in localStorage with other credentials

Defaults to 'webchat' for backward compatibility. Users can set it
to 'openclaw-control-ui' to use OpenClaw's dangerouslyDisableDeviceAuth
bypass without post-install patching.

Closes #11
2026-02-23 14:41:15 +00:00
Nicolas Varrot
6ed6a4eadf chore: bump to v1.66.6 2026-02-23 09:05:01 +00:00
Nicolas Varrot
3b28de9f72 test: add unit tests for useNotifications hook and setBaseTitle 2026-02-23 09:04:32 +00:00
Nicolas Varrot
9faa5014a6 perf: wrap ToolCall, CodeBlock, ThinkingBlock, ImageBlock in React.memo
Prevents unnecessary re-renders of these frequently rendered child
components when parent message list updates but individual props
haven't changed.
2026-02-22 21:03:31 +00:00
Nicolas Varrot
4163124c6a test: add unit tests for useSwipeSidebar and useLocale hooks, exclude tests from build tsconfig 2026-02-22 09:03:17 +00:00
Nicolas Varrot
3c51e46cbb test: add unit tests for useSendShortcut hook and @testing-library/react 2026-02-21 21:03:55 +00:00