diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index 41cfb57..e686802 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "@claude-prism/desktop",
- "version": "1.0.4",
+ "version": "1.0.5",
"private": true,
"type": "module",
"scripts": {
diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml
index 11d7704..c189d08 100644
--- a/apps/desktop/src-tauri/Cargo.toml
+++ b/apps/desktop/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "claude-prism-desktop"
-version = "1.0.4"
+version = "1.0.5"
description = "AI-powered LaTeX writing workspace"
edition = "2021"
diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs
index 331a199..f0b41e4 100644
--- a/apps/desktop/src-tauri/src/lib.rs
+++ b/apps/desktop/src-tauri/src/lib.rs
@@ -320,6 +320,39 @@ pub fn run() {
tauri::RunEvent::Ready => {
set_macos_app_icon();
}
+ // Workaround: WKWebView sometimes fails to repaint after the app
+ // returns from background, leaving a black screen. We apply two
+ // complementary fixes on focus-restore:
+ // 1. Nudge the window size by 1 px and back (forces native
+ // compositing layer to re-composite).
+ // 2. Trigger a DOM reflow via JS (forces WKWebView render tree
+ // rebuild without losing app state).
+ // Either one alone may not cover all cases.
+ // See https://github.com/tauri-apps/tauri/issues/5226
+ // https://github.com/tauri-apps/tauri/issues/14843
+ #[cfg(target_os = "macos")]
+ tauri::RunEvent::WindowEvent {
+ ref label,
+ event: tauri::WindowEvent::Focused(true),
+ ..
+ } => {
+ if let Some(window) = app_handle.get_webview_window(label) {
+ // 1) Native resize nudge
+ if let Ok(size) = window.inner_size() {
+ let _ = window.set_size(tauri::Size::Physical(tauri::PhysicalSize {
+ width: size.width + 1,
+ height: size.height,
+ }));
+ let _ = window.set_size(tauri::Size::Physical(size));
+ }
+ // 2) DOM reflow to force WKWebView render tree rebuild
+ let _ = window.eval(
+ "document.body.style.display='none';\
+ document.body.offsetHeight;\
+ document.body.style.display='';"
+ );
+ }
+ }
tauri::RunEvent::WindowEvent {
label,
event: tauri::WindowEvent::Destroyed,
diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json
index 190386a..be40241 100644
--- a/apps/desktop/src-tauri/tauri.conf.json
+++ b/apps/desktop/src-tauri/tauri.conf.json
@@ -2,7 +2,7 @@
"$schema": "https://raw.githubusercontent.com/nicegui-unofficial/nicegui-tauri-template/main/src-tauri/tauri.conf-v2-schema.json",
"identifier": "com.claude-prism.desktop",
"productName": "ClaudePrism",
- "version": "1.0.4",
+ "version": "1.0.5",
"build": {
"beforeDevCommand": "pnpm dev",
"beforeBuildCommand": "pnpm build",
diff --git a/apps/desktop/src/components/workspace/sidebar.tsx b/apps/desktop/src/components/workspace/sidebar.tsx
index 91d488e..8f58b28 100644
--- a/apps/desktop/src/components/workspace/sidebar.tsx
+++ b/apps/desktop/src/components/workspace/sidebar.tsx
@@ -1,4 +1,5 @@
import { useState, useCallback, useMemo, useRef, useEffect } from "react";
+import { getVersion } from "@tauri-apps/api/app";
import {
FileTextIcon,
FolderIcon,
@@ -181,13 +182,22 @@ function getFileIcon(file: ProjectFile) {
return