Commit Graph

7 Commits

Author SHA1 Message Date
Innei 2933b9fcc5 ⚡️ perf(desktop): show the main window on first paint, compile cache, dev progress (#19429)
* ⚡️ perf(desktop): show the main window on the loading screen's first paint

`ready-to-show` only fires with the `load` event for the desktop entry, which
lands ~250ms after the static loading screen has actually painted. The preload
now reports that first paint (double rAF after `#loading-screen` enters the
DOM) and the main process shows the window on whichever signal arrives first.

Measured on the packaged app (warm start, window creation = 0): window visible
at +140ms instead of +370ms, with the loading screen already painted.

Claude-Session: https://claude.ai/code/session_012z4cpfrWDXZDtNgT4uJKoS

* ⚡️ perf(desktop): enable the V8 compile cache for the main process bundle

Injected as an entry banner because rolldown hoists chunk requires above any
statement in the entry source, so `main-app` would otherwise load uncached.
Main bundle load 55ms → 37ms warm; exec → main.js ~10ms faster on a
packaged build.

Claude-Session: https://claude.ai/code/session_012z4cpfrWDXZDtNgT4uJKoS

* ✨ feat(desktop): show Vite transform progress on the dev loading screens

A cold `bun run dev` sits on the loading logo for 10s+ while Vite transforms
thousands of modules. A serve-only plugin streams the transform count and the
current file over the HMR socket, and an injected client renders it at the
bottom of the window for as long as any boot placeholder (`#loading-screen`,
`#boot-shell`, `#app-shell-fallback`) is on screen.

Claude-Session: https://claude.ai/code/session_012z4cpfrWDXZDtNgT4uJKoS
2026-09-11 15:50:00 +08:00
Innei 59f16c15f7 🐛 fix(desktop): resolve UI language from the OS instead of the pruned app locale (#17804)
Packaging prunes the app's macOS `.lproj` markers via `electronLanguages`, which
makes Chromium report `en-US` for both `app.getLocale()` and the renderer's
`navigator.language` on a non-English system. First launch therefore came up in
English, and i18next then cached that wrong value in localStorage.

Resolve the UI language from `app.getPreferredSystemLanguages()` — the only API
that survives the pruning — and hand it to the renderer via the `lng` query
param and a new `lobeEnv.systemLanguage` preload field, so no code path depends
on the poisoned values anymore.
2026-08-01 15:33:58 +08:00
Arvin Xu af3f0ea171 🐛 fix(desktop): preserve Error cause across IPC so renderer sees real failure reason (#15597)
* 🐛 fix(desktop): preserve Error cause across IPC so renderer sees real failure reason

Electron's IPC error serialization carries an Error's message/stack/name plus
its enumerable own properties, but a standard `cause` (set via
`new Error(msg, { cause })`) is non-enumerable — so the real failure reason
(e.g. undici wrapping ENOTFOUND/ECONNREFUSED under a generic
`TypeError: fetch failed`) was dropped on the way to the renderer.

- IPC base: re-expose `cause` as an enumerable, clone-safe field in the central
  handler catch (nested Errors flattened to { name, message, code }) so every
  IPC method's error carries it.
- Heterogeneous agent executor: include `cause` in the ChatMessageError body so
  the surfaced error structure exposes the underlying reason alongside message.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* 🐛 fix(desktop): ferry IPC error cause via a serializable envelope

Making `cause` enumerable before rethrowing didn't actually reach the renderer:
Electron's `ipcRenderer.invoke` rebuilds a thrown handler error from its *string*
form (`Error invoking remote method '<channel>': <String(error)>`), so the
original error object — and any `cause` — never crosses the boundary.

Switch to an explicit serializable envelope:
- `~common/ipcError`: `toIpcErrorEnvelope` (clone-safe plain object, recursively
  captures name/message/stack/code/cause) + `isIpcErrorEnvelope` /
  `fromIpcErrorEnvelope` to rebuild a real Error.
- IPC base handler: return the envelope instead of throwing.
- preload `invoke`: detect the envelope and re-throw a rebuilt Error (with
  `cause`), preserving the "promise rejects on failure" contract.
- hetero executor: flatten the Error cause to a plain object for the
  DB-persisted `ChatMessageError.body`.

Adds unit tests for the envelope round-trip and the preload unwrap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 22:58:50 +08:00
LobeHub Bot dce106b8be 🌐 chore: translate non-English comments to English in desktop core modules (#11873)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 12:57:09 +08:00
LobeHub Bot d33d374a11 🌐 chore: translate non-English comments to English in database & desktop modules (#11578)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-18 12:02:52 +08:00
Arvin Xu 1fb7b292ca ⚡️ perf: move settings into one page (#10229)
* move settings into one page

* fix: change the jump link to react-router-dom

---------

Co-authored-by: ONLY-yours <1349021570@qq.com>
2025-11-24 15:10:41 +08:00
Arvin Xu ed97363255 ✨ feat: support desktop release framework and workflow (#6474)
* add desktop

fix build

update release desktop ci

improve desktop build for pr workflow

update desktop build workflow

test auto updater

fix

fix release nightly channel

support shortcut framework

improve nightly version rule

add zip release

only add mac publish

fix static file relative issue

support delete files

fix lint

enable asar

add setting open in editor in menu

add electron store framework and locale update flow

fix default searchFCModel

refactor the electron server ipc to stable mode

improve electron dev workflow

improve electron build workflow

make qwen2.5b default

improve comment workflow

fix types

refactor code

improve window size of settings/provider

路由拦截器v3.5

fix RouteIntercept issue

improve log

use productName in package.json

update

add pin list for feature flag

update

sure settings update

make ollama as default provider in desktop

fix desktop close page issue

fix desktop default variants

improve to reduce bundle

improve to reduce bundle again

improve set desktop version workflow

add nightly icons

add prebuild scripts to reduce package size

add to test prebuild

fix workflow

try to add sign and notarize for mac in workflow

try to add sign and notarize

add i18n for menu and main

update menu i18n

add i18n framework

add menu implement and setting

improve layout design for desktop

update Author

fix failed register protocol

fix prod building

fix tests

fix open error of mac and windows
improve lint

update pr comment

add service framework

add fileSearchService

improve

fix release workflow

add header

improve pr workflow fetch

improve client fetch

add linux upload workflow

improve workflow and implement

fix build electron in ci

build the desktop framework

fix build electron in ci

update tsconfig

fix desktop build workflow

finish desktop build workflow

fix workflow build steps

update workflow

test release workflow

refactor

update

update

improve loading state

refactor the 404 error

* 重构存储路径,统一到一个 lobehub-storage 下,方便未来用户自定义存储路径

* fix lint

* update

* try to fix windows open issue

* rename

* fix storage

* refactor the remote server sync

* refactor the request method

* 完成服务端同步实现逻辑

* fix lint

* save size

* refactor to make sure different instance of ipc channel

* clean log

* fix refresh

* fix tools calling

* fix auth callback issue

* update workflow

* add window ico

* push

* update

* add beta release

* fix update issue

* 完成官方实例链接

* fix

* fix stdio
2025-04-27 11:57:06 +08:00