Commit Graph

41 Commits

Author SHA1 Message Date
Felix
d4f77a442c misc: improve timeout handling and warnings in skills (#211) 2026-02-28 10:16:36 +08:00
Haze
45932a95c3 refactor(chat): modify newSession logic to avoid resetting old sessio… (#185) 2026-02-26 15:23:59 +08:00
Haze
d11f45cc73 fix(chat): enhance file path extraction and preserve optimistic user … (#182) 2026-02-26 14:35:33 +08:00
Haze
1ca0017f85 feat(openclaw): add repair function for ClawX-only bootstrap files an… (#180) 2026-02-26 11:55:19 +08:00
Haze
96ac13fd90 feat(chat, gateway): implement error recovery timer and enhance histo… (#179) 2026-02-26 11:26:39 +08:00
Haze
6383e10d63 feat(chat): reformat streaming output (#173) 2026-02-25 23:59:55 +08:00
Haze
d55305839f feat(updater): implement auto-install countdown and cancellation for updates (#151) 2026-02-24 16:41:53 +08:00
Haze
cf27bb0d64 feat(openclaw): update openclaw version 223 (#149) 2026-02-24 16:09:39 +08:00
Haze
f821949829 fix(model): update gemini apikey modify function (#119) 2026-02-20 20:17:30 +08:00
Haze
c969e899c8 feat(chat): enhance image extraction and file path handling in messages (#116) 2026-02-20 10:48:46 +08:00
Haze
1759b98443 fix(chat): optimize chat with pic response (#103) 2026-02-19 00:29:10 +08:00
Haze
d108a850ef feat(chat): opt pic show in chat history (#87) 2026-02-14 18:00:57 +08:00
Haze
cf8091d81f feat(chat): improve media handling and caching for user messages (#81) 2026-02-14 00:21:04 +08:00
Haze
8a49c66891 fix(chat): enhance file handling and error reporting in ChatInput (#80) 2026-02-13 20:43:42 +08:00
Haze
36fb4bffc7 feat(chat): implement file upload support with staging and media handle (#77) 2026-02-13 18:23:47 +08:00
Felix
a8e26362b9 refactor: Directly add new chat session to state upon creation (#62) 2026-02-12 12:09:14 +08:00
Felix
fcba8b86d5 fix(chat): improve message handling, fix type errors and migrate changes to enhance branch (#50) 2026-02-11 17:10:53 +08:00
paisley
6e09a69f4f feat(app): i18n (#48) 2026-02-11 15:34:53 +08:00
Felix
f9581d2516 fix(chat): improve handling of streaming messages and add pending state management (#46) 2026-02-11 13:55:34 +08:00
Haze
1267e0cc56 fix(updater): update function support alpha (#45) 2026-02-11 13:49:03 +08:00
DigHuang
0ced0b042c refactor(provider): provider API validation & CN defaults (#47) 2026-02-11 13:48:15 +08:00
DigHuang
1b508d5bde feat(provider): mainly support moonshot / siliconflow on setup (#43) 2026-02-11 11:33:33 +08:00
Felix
a0505490cd feat: enhance ClawHub integration with new CLI paths and IPC handlers for config and skills directories (#41) 2026-02-11 11:32:03 +08:00
Felix
816a0e24a2 misc: chat stop button and tool typing indicator and prevent sending message during composition (#37) 2026-02-10 19:12:22 +08:00
Haze
9e5fdc5631 fix(update): electron update function (#32) 2026-02-10 15:20:04 +08:00
paisley
41b6868646 chore: update channel url (#13) 2026-02-09 17:27:13 +08:00
Haze
e6317cafd6 chore(frontend): fix corn task (#3) 2026-02-07 01:28:38 +08:00
Felix
fa6c23b82a feature: channels and skills (#2)
Co-authored-by: paisley <8197966+su8su@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 18:26:06 +08:00
Haze
9fe27e3510 chore(lint): remove ESLint configuration file and update lint scripts
- Deleted the .eslintrc.cjs file to simplify configuration management.
- Updated lint scripts in package.json to remove unnecessary extensions for linting.
- Added new devDependencies for ESLint and globals to enhance linting capabilities.
2026-02-06 05:50:20 +08:00
Haze
94a6cecf2f fix(chat): move toolbar to Header and add New Session button
- Move ChatToolbar (session selector, refresh, thinking toggle) from
  the Chat page body into the Header component, so controls appear
  at the same level as the "Chat" title
- Add New Session button (+) to create a fresh conversation
- Add newSession action to chat store
- Header conditionally renders ChatToolbar only on /chat route
- Chat page fills full content area without duplicate toolbar
2026-02-06 04:57:25 +08:00
Haze
3468d1bdf4 feat(chat): native React chat page with session selector and streaming
Replace the iframe-based Control UI embed with a native React
implementation that communicates directly with the Gateway via
gateway:rpc IPC calls and chat event streaming.

New components:
- ChatToolbar: session selector dropdown, refresh button, thinking toggle
- ChatMessage: message bubbles with markdown (react-markdown + GFM),
  collapsible thinking blocks, tool use cards, image attachments
- ChatInput: textarea with Enter to send, Shift+Enter for new line
- message-utils: extractText/extractThinking/extractImages/extractToolUse
  ported from OpenClaw's message-extract.ts

Rewritten chat store with:
- Session management (sessions.list, switchSession)
- Proper chat.history loading with raw message preservation
- chat.send with idempotencyKey and run tracking
- Streaming via handleChatEvent (delta/final/error/aborted)
- Thinking toggle (show/hide reasoning blocks)
2026-02-06 04:49:01 +08:00
Haze
a36c3c5399 fix(stores): channels.status and skills.status return complex objects, not arrays
The Dashboard crashed with 'channels.slice is not a function' because
channels.status returns a deeply nested object per channel ID, not a
Channel[] array. Same issue with skills.status.

For now, use empty arrays since channel/skill management is deferred
to their dedicated pages. Will properly parse the complex response
format when those pages are implemented.
2026-02-06 03:50:23 +08:00
Haze
f67370ce03 fix(app): scope header overrides to gateway URLs only
- The session.webRequest.onHeadersReceived was stripping X-Frame-Options
  and modifying CSP for ALL responses including the Vite dev server,
  which could break the main app rendering. Now only applies to
  gateway URLs (127.0.0.1:18789 / localhost:18789).
- Dashboard: only fetch channels/skills when gateway is running
- Dashboard: guard against non-array channels/skills data
- Gateway store: use dynamic import() instead of require() for chat
  store to avoid ESM/CJS issues in Vite
2026-02-06 03:40:47 +08:00
Haze
b01952fba7 fix(stores): align RPC methods with OpenClaw protocol and fix chat flow
- Fix channels store: use channels.status instead of channels.list
- Fix skills store: use skills.status instead of skills.list
- Fix chat store: correct chat.history response parsing (messages in payload)
- Fix chat store: handle chat.send async flow (ack + event streaming)
- Add chat event handling for streaming AI responses (delta/final/error)
- Wire gateway:chat-message IPC events to chat store
- Fix health check: use WebSocket status instead of nonexistent /health endpoint
- Fix waitForReady: probe via WebSocket instead of HTTP
- Gracefully degrade when methods are unsupported (no white screen)
2026-02-06 02:38:18 +08:00
Haze
4431d2ba1d feat(providers): implement real API key validation with OpenRouter support
- Replace mock API key validation with actual API calls to verify keys
- Add validateApiKeyWithProvider() with provider-specific implementations
- Support Anthropic, OpenAI, Google, and OpenRouter validation
- Add OpenRouter as a new provider option in setup wizard and settings
- Fix setup page to call real validation instead of mock length check
- Allow validation during setup before provider is saved
- Return user-friendly error messages instead of raw API errors
2026-02-06 01:25:33 +08:00
Haze
e02cf05baf feat(update): implement auto-update functionality with electron-updater
- Add AppUpdater module with update lifecycle management
- Create UpdateSettings UI component with progress display
- Add Progress UI component based on Radix UI
- Create update Zustand store for state management
- Register update IPC handlers in main process
- Auto-check for updates on production startup
- Add commit documentation for commits 2-6
2026-02-05 23:36:12 +08:00
Haze
98a2d9bc83 feat(channels): implement channel connection flows with multi-platform support
- Add comprehensive Channels page with connection statistics and status display
- Implement AddChannelDialog with type-specific connection flows:
  - QR code-based connection for WhatsApp/WeChat
  - Token-based connection for Telegram/Discord/Slack
- Enhance channels store with addChannel, deleteChannel, and requestQrCode actions
- Update electron-store usage to dynamic imports for ESM compatibility
- Add channel connection instructions and documentation links
2026-02-05 23:29:18 +08:00
Haze
ebb6f515a7 feat(providers): implement secure API key storage and provider management
Add complete provider configuration system with the following features:

- Secure API key storage using Electron's safeStorage encryption
- Provider CRUD operations with IPC handlers
- Lazy-loaded electron-store for ESM compatibility
- Provider settings UI component with add/edit/delete functionality
- API key masking for display (shows first/last 4 chars)
- Basic API key format validation per provider type
- Default provider selection
- Provider enable/disable toggle

New files:
- electron/utils/secure-storage.ts: Encrypted key storage and provider config
- src/stores/providers.ts: Zustand store for provider state
- src/components/settings/ProvidersSettings.tsx: Provider management UI
2026-02-05 23:24:31 +08:00
Haze
18dc3bf53f feat(setup): implement functional setup wizard with multi-step flow
Add complete setup wizard implementation with the following features:

- Welcome step with feature highlights
- Environment check step with Node.js, OpenClaw, and Gateway verification
- AI Provider selection with API key input and validation UI
- Channel connection step with QR code placeholder
- Skill bundle selection with recommended bundles pre-selected
- Completion summary showing all configured options

Additional changes:
- Add setupComplete state and markSetupComplete action to settings store
- Auto-redirect to setup wizard on first launch
- Track setup completion in persisted settings
2026-02-05 23:18:43 +08:00
Haze
1646536e40 feat(gateway): enhance gateway process management with auto-reconnection
Improve Gateway lifecycle management with the following features:

- Add exponential backoff reconnection (1s-30s delay, max 10 attempts)
- Add health check monitoring every 30 seconds
- Add proper restart method with graceful shutdown
- Handle server-initiated notifications (channel status, chat messages)
- Add 'reconnecting' state for better UI feedback
- Enhance IPC handlers with isConnected and health check endpoints
- Update preload script with new event channels
- Improve type safety and error handling throughout

Also fixes several TypeScript errors and unused variable warnings.
2026-02-05 23:15:07 +08:00
Haze
b8ab0208d0 feat(core): initialize project skeleton with Electron + React + TypeScript
Set up the complete project foundation for ClawX, a graphical AI assistant:

- Electron main process with IPC handlers, menu, tray, and gateway management
- React renderer with routing, layout components, and page scaffolding
- Zustand state management for gateway, settings, channels, skills, chat, and cron
- shadcn/ui components with Tailwind CSS and CSS variable theming
- Build tooling with Vite, electron-builder, and TypeScript configuration
- Testing setup with Vitest and Playwright
- Development configurations (ESLint, Prettier, gitignore, env example)
2026-02-05 23:09:17 +08:00