Commit Graph

69 Commits

Author SHA1 Message Date
Haze
c440e95464 chore(product): fix link in app (#22) 2026-02-09 22:20:51 +08:00
DigHuang
fa22a17d7d chore(icon): use platform-specific tray icons (#21) 2026-02-09 21:22:38 +08:00
paisley
0667a241d6 feat(discord): make Guild/Server ID a required field (#20) 2026-02-09 19:19:09 +08:00
DigHuang
329ca7623d docs(readme): add logo, update init, adjust structure (#18) 2026-02-09 18:59:28 +08:00
paisley
905b828e9b fix crontab task (#19) 2026-02-09 18:59:21 +08:00
Haze
19ae5b0f75 0.1.3 2026-02-09 18:33:59 +08:00
Haze
a6776c5453 fix: exclude builder-debug.yml from release to avoid duplicate asset (#17)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 18:27:46 +08:00
Haze
25771966eb chore(package): update version to 0.1.2 and add versioning scripts (#16) 2026-02-09 18:13:15 +08:00
Felix
ba53fa5ab2 feat: restore dev console link and show gateway token (#15) 2026-02-09 18:04:12 +08:00
Haze
5eea27d196 fix(package): release yml lose bin file (#14) 2026-02-09 17:36:42 +08:00
paisley
41b6868646 chore: update channel url (#13) 2026-02-09 17:27:13 +08:00
DigHuang
05b5874832 feat(style): refactor layout, remove Header & Improve gateway readiness checks (#12) 2026-02-09 17:00:27 +08:00
Haze
86ddd843c4 fix: cleanup unnecessary files before code signing to reduce file count
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 16:28:42 +08:00
Haze
506d243ecf fix: increase file descriptor limit to 65536 for macOS build
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 16:20:16 +08:00
Haze
0cdcb1845d fix: increase file descriptor limit for macOS build
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 15:50:06 +08:00
Haze
8e932d89b8 Release v0.1.1
- Update version to 0.1.1
- Fix auto-update configuration (GitHub repository path)
- Optimize release workflow for platform-specific installers
- Add detailed release notes template

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 15:41:38 +08:00
Haze
93caeedd12 Fix/add x86 macos (#11) 2026-02-09 15:38:29 +08:00
Felix
ca71ef9b9b feat: add Gateway button to dashboard header (#10)
lgtm
2026-02-09 15:37:39 +08:00
Haze
de445ae3d5 Chore/build npm (#9)
Co-authored-by: DigHuang <114602213+DigHuang@users.noreply.github.com>
Co-authored-by: Felix <24791380+vcfgv@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 15:10:08 +08:00
arianachennn-design
0b7f1c700e Update README.md (#5)
Co-authored-by: Felix <24791380+vcfgv@users.noreply.github.com>
2026-02-07 16:09:35 +08:00
Haze
4cd720ac43 Create SECURITY.md for security policy
Added a security policy document outlining supported versions and vulnerability reporting.
2026-02-07 01:45:52 +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
f9845023c3 Merge pull request #1 from intellispectrum/0.1.0-dev
dev-0.1.0
2026-02-06 05:57:43 +08:00
Haze
aa032385da chore(dependencies): add @testing-library/jest-dom to package.json and pnpm-lock.yaml
- Included @testing-library/jest-dom version 6.9.1 to enhance testing capabilities.
- Updated pnpm-lock.yaml to reflect the new dependency and its resolution details.
- Removed unused version click handling from Sidebar component to streamline code.
2026-02-06 05:55:14 +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
4e1f79922b chore(workspace): add root package to pnpm workspace configuration
- Included the root directory as a package in the pnpm workspace to facilitate dependency management and streamline project structure.
2026-02-06 05:38:21 +08:00
Haze
b576cd2e1b chore(ci, release): update pnpm action to v4 and version to 9 in CI and release workflows
- Upgraded pnpm/action-setup from v2 to v4 in both CI and release workflows.
- Updated pnpm version from 8 to 9 to ensure compatibility with the latest features and improvements.
2026-02-06 05:33:40 +08:00
Haze
fc511826a1 refactor(sidebar): remove version button from Sidebar component
- Eliminated the version display button from the Sidebar to streamline the UI.
- Adjusted layout to maintain consistency with the overall design.
2026-02-06 05:20:55 +08:00
Haze
e9ad15bf6f fix(ui): move chat controls to header, add new session, fix settings layout
Chat page:
- Move session selector, refresh, thinking toggle to the Header bar
  (same level as "Chat" title) instead of inside the chat content area
- Add "New Session" button (+ icon) to create fresh chat sessions
- Remove duplicate toolbar from chat body

Settings page:
- Remove max-w-2xl constraint so cards fill available width
- Redesign provider cards: compact layout with key + actions in one row
- Shorten API key display (sk-...df67 format instead of full masked key)
- Move edit/delete/star buttons inside the key row background area
- Remove duplicate "AI Providers" heading (already in card header)
2026-02-06 05:11:39 +08:00
Haze
ecb36f0ed8 fix(build): update OpenClaw submodule URL and enhance gateway token management
- Changed the OpenClaw submodule URL to the official GitHub repository for proper integration.
- Implemented automatic gateway token generation on first launch, ensuring seamless authentication for users.
- Updated the gateway manager to utilize the generated token for WebSocket connections.
2026-02-06 05:03:53 +08:00
Haze
7fded9bf8d refactor(chat): remove instruction text from ChatInput component
- Removed the instruction text for sending messages (Enter to send, Shift+Enter for new line) from the ChatInput component to streamline the UI.
2026-02-06 04:59:40 +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
bdb734120f refactor(ui): remove search, theme toggle, and notifications from header 2026-02-06 04:18:42 +08:00
Haze
191948ce51 fix(docs): update repository links in README and menu to reflect new GitHub organization 2026-02-06 04:18:16 +08:00
Haze
20af6c7ba3 fix(auth): add required models:[] array to provider config 2026-02-06 04:03:46 +08:00
Haze
ed060c142f fix(auth): register models.providers for OpenRouter and other providers
OpenClaw's model resolution checks cfg.models.providers[provider] for
baseUrl and API type. Without this config entry, any model for that
provider returns "Unknown model" even if the API key is correct.

- Reverted model names back to user-specified versions
- Added PROVIDER_CONFIGS with baseUrl, api type, and env var name
- setOpenClawDefaultModel() now writes models.providers.openrouter
  (and other providers) to openclaw.json so model resolution works
- Config format: { models: { providers: { openrouter: {
    baseUrl: "https://openrouter.ai/api/v1",
    api: "openai-completions",
    apiKey: "OPENROUTER_API_KEY" } } } }
2026-02-06 04:02:07 +08:00
Haze
07320042a7 fix(auth): use OpenClaw-recognized model names (openrouter/auto, etc.) 2026-02-06 03:53:26 +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
7089c7a891 fix(app): add ErrorBoundary to show actual crash errors instead of white screen 2026-02-06 03:48:29 +08:00
Haze
7818798bff fix(app): remove provider:list check that caused white screen on startup 2026-02-06 03:45:50 +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
71409042cb fix(auth): update default models to latest versions 2026-02-06 03:37:27 +08:00
Haze
a92ced3c4a fix(auth): use correct model config format (object, not string)
OpenClaw expects agents.defaults.model as { primary: "provider/model" }
not a plain string. The previous code wrote a string which caused:
"agents.defaults.model: Invalid input: expected object, received string"
2026-02-06 03:31:24 +08:00
Haze
4b9ab69b9b fix(setup): auto-redirect to setup when no API keys are configured
If setup was previously completed but no provider API keys were saved
(due to the legacy bug where validation didn't persist keys), the app
now detects this on startup and redirects to the setup wizard so the
user can re-enter their key with the fixed save flow.
2026-02-06 03:27:32 +08:00
Haze
00475ce2b5 fix(auth): configure OpenClaw default model when saving provider
- Add setOpenClawDefaultModel() to write the correct model to
  ~/.openclaw/openclaw.json based on the selected provider
- Maps: openrouter -> openrouter/anthropic/claude-sonnet-4,
  anthropic -> anthropic/claude-sonnet-4, etc.
- Call setOpenClawDefaultModel on provider:save IPC handler
- Fixes "No API key found for provider anthropic" when user
  configured OpenRouter (wrong default model was being used)
2026-02-06 03:26:39 +08:00
Haze
542178c1e7 fix(chat): switch from webview to iframe for Control UI embedding
The <webview> tag had issues with event listener attachment and React
ref handling, causing the loading overlay to stay forever (white screen).
Switched to a standard <iframe> which is simpler and works reliably:
- Uses iframe onLoad/onError instead of webview dom-ready events
- Added 5s fallback timeout to dismiss loading overlay
- The X-Frame-Options/CSP header overrides from session.webRequest
  allow the iframe to load the Control UI
2026-02-06 03:21:43 +08:00
Haze
1e6cc8e329 docs: update build process for commits 16-17 2026-02-06 03:12:40 +08:00
Haze
284861a0f5 feat(chat): write API keys to OpenClaw and embed Control UI for chat
Part 1: API Key Integration
- Create electron/utils/openclaw-auth.ts to write keys to
  ~/.openclaw/agents/main/agent/auth-profiles.json
- Update provider:save and provider:setApiKey IPC handlers to
  persist keys to OpenClaw auth-profiles alongside ClawX storage
- Save API key to OpenClaw on successful validation in Setup wizard
- Pass provider API keys as environment variables when starting
  the Gateway process (ANTHROPIC_API_KEY, OPENROUTER_API_KEY, etc.)

Part 2: Embed OpenClaw Control UI for Chat
- Replace custom Chat UI with <webview> embedding the Gateway's
  built-in Control UI at http://127.0.0.1:{port}/?token={token}
- Add gateway:getControlUiUrl IPC handler to provide tokenized URL
- Enable webviewTag in Electron BrowserWindow preferences
- Override X-Frame-Options/CSP headers to allow webview embedding
- Suppress noisy control-ui token_mismatch stderr messages
- Add loading/error states for the embedded webview

This fixes the "No API key found for provider" error and replaces
the buggy custom chat implementation with OpenClaw's battle-tested
Control UI.
2026-02-06 03:12:17 +08:00