<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://support.lingke.ink/index.php?action=history&amp;feed=atom&amp;title=Koring-launcher%2Fabout-devmd</id>
	<title>Koring-launcher/about-devmd - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://support.lingke.ink/index.php?action=history&amp;feed=atom&amp;title=Koring-launcher%2Fabout-devmd"/>
	<link rel="alternate" type="text/html" href="https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;action=history"/>
	<updated>2026-07-28T22:47:31Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;diff=49&amp;oldid=prev</id>
		<title>2026年7月9日 (四) 12:17 Dream pep</title>
		<link rel="alternate" type="text/html" href="https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;diff=49&amp;oldid=prev"/>
		<updated>2026-07-09T12:17:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;amp;diff=49&amp;amp;oldid=48&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>Dream pep</name></author>
	</entry>
	<entry>
		<id>https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;diff=48&amp;oldid=prev</id>
		<title>Dream pep：​创建页面，内容为“# Koring Launcher — 开发文档  ## 技术栈  | 层 | 技术 | |---|---| | Frontend | React 19 + Vite 7 + TypeScript | | UI | Tailwind CSS v4 + shadcn/ui (base-ui) | | 状态管理 | Zustand | | Backend | Rust / Tauri 2 | | Sidecar | Node.js / TypeScript / @xmcl/* | | 配置存储 | YAML (serde_yaml) + Windows Registry | | 包管理 | pnpm | | 目标平台 | ARM64 Windows (`aarch64-pc-windows-msvc`) |  ## 快速命令  ```bash pnpm dev                # 前…”</title>
		<link rel="alternate" type="text/html" href="https://support.lingke.ink/index.php?title=Koring-launcher/about-devmd&amp;diff=48&amp;oldid=prev"/>
		<updated>2026-07-09T12:15:53Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“# Koring Launcher — 开发文档  ## 技术栈  | 层 | 技术 | |---|---| | Frontend | React 19 + Vite 7 + TypeScript | | UI | Tailwind CSS v4 + shadcn/ui (base-ui) | | 状态管理 | Zustand | | Backend | Rust / Tauri 2 | | Sidecar | Node.js / TypeScript / @xmcl/* | | 配置存储 | YAML (serde_yaml) + Windows Registry | | 包管理 | pnpm | | 目标平台 | ARM64 Windows (`aarch64-pc-windows-msvc`) |  ## 快速命令  ```bash pnpm dev                # 前…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;# Koring Launcher — 开发文档&lt;br /&gt;
&lt;br /&gt;
## 技术栈&lt;br /&gt;
&lt;br /&gt;
| 层 | 技术 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| Frontend | React 19 + Vite 7 + TypeScript |&lt;br /&gt;
| UI | Tailwind CSS v4 + shadcn/ui (base-ui) |&lt;br /&gt;
| 状态管理 | Zustand |&lt;br /&gt;
| Backend | Rust / Tauri 2 |&lt;br /&gt;
| Sidecar | Node.js / TypeScript / @xmcl/* |&lt;br /&gt;
| 配置存储 | YAML (serde_yaml) + Windows Registry |&lt;br /&gt;
| 包管理 | pnpm |&lt;br /&gt;
| 目标平台 | ARM64 Windows (`aarch64-pc-windows-msvc`) |&lt;br /&gt;
&lt;br /&gt;
## 快速命令&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
pnpm dev                # 前端 dev server (port 1420)&lt;br /&gt;
pnpm dev:t              # 前端 + Rust dev (需 VS 环境)&lt;br /&gt;
./dev-vs.cmd            # VS ARM64 环境启动 dev&lt;br /&gt;
pnpm build              # 生产构建 (switch-icon run + tsc + vite build)&lt;br /&gt;
pnpm build:beta         # Beta 构建 (switch-icon beta + tsc + vite build --mode beta)&lt;br /&gt;
./build-vs.cmd          # Rust 编译 (production, NSIS 打包)&lt;br /&gt;
./build-vs.cmd --mode beta  # Rust 编译 (beta, 跳过打包)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 构建模式&lt;br /&gt;
&lt;br /&gt;
| 模式 | `VITE_BUILD_MODE` | 图标 | Badge | 说明 |&lt;br /&gt;
|---|---|---|---|---|&lt;br /&gt;
| dev | `&amp;quot;dev&amp;quot;` | `dev.png` | 🟢 DEV | 开发预览版 |&lt;br /&gt;
| beta | `&amp;quot;beta&amp;quot;` | `beta.png` | 🟡 BETA | 测试版 |&lt;br /&gt;
| run | `&amp;quot;run&amp;quot;` | `run.png` | 无 | 正式版 |&lt;br /&gt;
&lt;br /&gt;
模式由 `src/lib/mode.ts` 导出 `BUILD_MODE`, `isDev`, `isBeta`, `isRun`。&lt;br /&gt;
&lt;br /&gt;
## 环境变量 (.env.*)&lt;br /&gt;
&lt;br /&gt;
```env&lt;br /&gt;
VITE_BUILD_MODE=dev|beta|run&lt;br /&gt;
VITE_APP_ICON=/dev.png|/beta.png|/run.png&lt;br /&gt;
VITE_START_POP=true|false              # 启动弹窗开关&lt;br /&gt;
VITE_START_POP_TITLE=&amp;quot;...&amp;quot;             # 弹窗标题&lt;br /&gt;
VITE_START_POP_INFO=&amp;quot;...&amp;quot;              # 弹窗内容&lt;br /&gt;
VITE_START_POP_BOUTTON=&amp;quot;...&amp;quot;           # 弹窗按钮文字&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## 配置存储架构&lt;br /&gt;
&lt;br /&gt;
### 概览&lt;br /&gt;
&lt;br /&gt;
| 数据类型 | 存储位置 | 格式 | 说明 |&lt;br /&gt;
|---------|---------|------|------|&lt;br /&gt;
| 用户设置 | 程序目录 `Koring.yml` | YAML | 所有可配置项 |&lt;br /&gt;
| 账户凭证 | Windows Registry `HKCU\Software\KoringLauncher` | REG_SZ | token/xboxProfile |&lt;br /&gt;
| 实例配置 | 实例目录 `koring-instance.json` | JSON | per-instance |&lt;br /&gt;
| 任务历史 | localStorage `koring-task-history` | JSON | 临时，max 50 |&lt;br /&gt;
&lt;br /&gt;
### Koring.yml 结构&lt;br /&gt;
&lt;br /&gt;
```yaml&lt;br /&gt;
version: 1&lt;br /&gt;
&lt;br /&gt;
theme:&lt;br /&gt;
  darkMode: auto          # auto | light | dark&lt;br /&gt;
  parallax: true&lt;br /&gt;
&lt;br /&gt;
a11y:&lt;br /&gt;
  reduceMotion: false&lt;br /&gt;
  reduceTransparency: false&lt;br /&gt;
  highContrast: false&lt;br /&gt;
  contentBlurOpacity: 50  # 0-100&lt;br /&gt;
&lt;br /&gt;
background:&lt;br /&gt;
  bgType: image           # image | color&lt;br /&gt;
  image: /background.png&lt;br /&gt;
  blur: 0                 # 0-20&lt;br /&gt;
  opacity: 100            # 0-100&lt;br /&gt;
&lt;br /&gt;
game:&lt;br /&gt;
  gameDir: .minecraft&lt;br /&gt;
  resourceDir: &amp;quot;&amp;quot;&lt;br /&gt;
  savesDir: &amp;quot;&amp;quot;&lt;br /&gt;
  instancesDir: .minecraft/instances&lt;br /&gt;
&lt;br /&gt;
java:&lt;br /&gt;
  javaPath: &amp;quot;&amp;quot;&lt;br /&gt;
  memMode: auto           # auto | custom&lt;br /&gt;
  memGB: 4                # 1-16&lt;br /&gt;
  gc: auto                # auto | zgc | g1&lt;br /&gt;
  jvmArgs: &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
advanced:&lt;br /&gt;
  afterLaunch: close      # close | minimize | keep&lt;br /&gt;
  winMode: default        # default | fullscreen | custom&lt;br /&gt;
  customWidth: 854&lt;br /&gt;
  customHeight: 480&lt;br /&gt;
  gameArgs: &amp;quot;&amp;quot;&lt;br /&gt;
  preLaunchCmd: &amp;quot;&amp;quot;&lt;br /&gt;
  debugMode: false&lt;br /&gt;
&lt;br /&gt;
download:&lt;br /&gt;
  fileSource: mirror      # mirror | official | official-only&lt;br /&gt;
  versionSource: mirror&lt;br /&gt;
  threads: 16             # 1-64&lt;br /&gt;
  speedLimit: 0           # KB/s, 0=不限速&lt;br /&gt;
&lt;br /&gt;
network:&lt;br /&gt;
  securityId:&lt;br /&gt;
    enabled: false&lt;br /&gt;
    authUrl: &amp;quot;&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 注册表结构&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
HKCU\Software\KoringLauncher&lt;br /&gt;
  └─ auth&lt;br /&gt;
       ├─ username      (REG_SZ)&lt;br /&gt;
       ├─ uuid          (REG_SZ)&lt;br /&gt;
       ├─ accessToken   (REG_SZ)&lt;br /&gt;
       ├─ refreshToken  (REG_SZ)&lt;br /&gt;
       └─ xboxProfile   (REG_SZ, JSON string)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 向上兼容策略&lt;br /&gt;
&lt;br /&gt;
1. **版本号** — `version` 字段，每次结构变更递增&lt;br /&gt;
2. **默认值填充** — 加载时缺失字段自动补全，不丢数据&lt;br /&gt;
3. **迁移函数** — `migrate_v0_to_v1()` 等，按版本链执行&lt;br /&gt;
4. **未知字段保留** — YAML 解析器保留不认识的字段&lt;br /&gt;
5. **Debounce 写入** — 300ms debounce 避免频繁 IO&lt;br /&gt;
&lt;br /&gt;
### Rust 实现&lt;br /&gt;
&lt;br /&gt;
**新文件：**&lt;br /&gt;
- `src-tauri/src/config.rs` — `AppConfig` 结构体、`load_config()`、`save_config()`、`merge_defaults()`、`migrate()`&lt;br /&gt;
- `src-tauri/src/registry.rs` — `read_auth()`、`write_auth()`、`delete_auth()`&lt;br /&gt;
&lt;br /&gt;
**Tauri 命令：**&lt;br /&gt;
- `get_config` → 返回 `AppConfig` JSON&lt;br /&gt;
- `save_config(cfg)` → 写入 `Koring.yml`&lt;br /&gt;
- `get_auth` → 从注册表读取 `AuthData`&lt;br /&gt;
- `save_auth(auth)` → 写入注册表&lt;br /&gt;
- `delete_auth_cmd` → 删除注册表认证数据&lt;br /&gt;
&lt;br /&gt;
### 前端实现&lt;br /&gt;
&lt;br /&gt;
**新文件：**&lt;br /&gt;
- `src/api/config.ts` — `getConfig()`、`saveConfig()` 类型定义&lt;br /&gt;
- `src/api/auth-registry.ts` — `getAuth()`、`saveAuth()`、`deleteAuth()`&lt;br /&gt;
- `src/stores/configStore.ts` — 统一配置 Zustand store&lt;br /&gt;
&lt;br /&gt;
**configStore 接口：**&lt;br /&gt;
```ts&lt;br /&gt;
useConfigStore.getState().config         // 完整配置&lt;br /&gt;
useConfigStore.getState().loaded         // 是否已加载&lt;br /&gt;
useConfigStore.getState().init()         // 从 Rust 加载&lt;br /&gt;
useConfigStore.getState().setTheme({...})  // 部分更新 + debounce 写回&lt;br /&gt;
useConfigStore.getState().setA11y({...})&lt;br /&gt;
useConfigStore.getState().setBackground({...})&lt;br /&gt;
useConfigStore.getState().setGame({...})&lt;br /&gt;
useConfigStore.getState().setJava({...})&lt;br /&gt;
useConfigStore.getState().setAdvanced({...})&lt;br /&gt;
useConfigStore.getState().setDownload({...})&lt;br /&gt;
useConfigStore.getState().setNetwork({...})&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Store 委托模式：**&lt;br /&gt;
themeStore / a11yStore / backgroundStore / authStore 都是 configStore 的薄包装层：&lt;br /&gt;
- 读取时从 `configStore.config.*` 同步&lt;br /&gt;
- 写入时通过各自的 `set*()` 同时更新本地状态和 configStore&lt;br /&gt;
- 提供 `sync*FromConfig()` 函数在 App 启动时同步&lt;br /&gt;
&lt;br /&gt;
**App 启动流程：**&lt;br /&gt;
```&lt;br /&gt;
configStore.init() → syncThemeFromConfig() → syncA11yFromConfig() → syncBackgroundFromConfig() → authStore.initFromRegistry()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## 项目结构&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
koring-launcher/&lt;br /&gt;
├── src/                        # 前端源码&lt;br /&gt;
│   ├── App.tsx                 # 路由入口 + configStore 初始化&lt;br /&gt;
│   ├── index.css               # 全局样式 + CSS 变量 + 动画&lt;br /&gt;
│   ├── layouts/&lt;br /&gt;
│   │   └── RootLayout.tsx      # 三层布局: BackgroundLayer + ContentLayer + SystemLayer&lt;br /&gt;
│   ├── components/&lt;br /&gt;
│   │   ├── background/&lt;br /&gt;
│   │   │   └── BackgroundLayer.tsx    # 全屏背景层 + 视差 + 强内容遮罩&lt;br /&gt;
│   │   ├── system/&lt;br /&gt;
│   │   │   ├── SystemLayer.tsx        # 系统层容器 (z-[100])&lt;br /&gt;
│   │   │   ├── TitleBar.tsx           # 自定义标题栏 (40px, 胶囊菜单/返回按钮)&lt;br /&gt;
│   │   │   └── WindowControls.tsx     # 窗口按钮 + DEV/BETA badge + TaskButton&lt;br /&gt;
│   │   ├── splash/&lt;br /&gt;
│   │   │   └── Splash.tsx             # 启动动画 (独立窗口, HTML+React)&lt;br /&gt;
│   │   ├── silk/&lt;br /&gt;
│   │   │   └── Silk.tsx               # WebGL 丝绸着色器 (Three.js)&lt;br /&gt;
│   │   ├── task/&lt;br /&gt;
│   │   │   ├── TaskButton.tsx         # 标题栏任务指示器 (SVG 圆弧动画)&lt;br /&gt;
│   │   │   └── TaskCard.tsx           # 单个任务卡片 (进度条+日志)&lt;br /&gt;
│   │   ├── ui/                        # shadcn/ui 组件&lt;br /&gt;
│   │   │   ├── sheet.tsx, button.tsx, switch.tsx, slider.tsx&lt;br /&gt;
│   │   │   ├── progress.tsx, badge.tsx, separator.tsx&lt;br /&gt;
│   │   │   ├── label.tsx, radio-group.tsx, alert-dialog.tsx&lt;br /&gt;
│   │   ├── VersionCard.tsx            # 版本/更新卡片 (Silk 背景+毛玻璃)&lt;br /&gt;
│   │   ├── UnderConstruction.tsx      # &amp;quot;装修中&amp;quot; 占位组件&lt;br /&gt;
│   │   └── StartupPopup.tsx           # 启动弹窗 (环境变量控制)&lt;br /&gt;
│   ├── stores/&lt;br /&gt;
│   │   ├── configStore.ts     # 统一配置 store (→ Koring.yml)&lt;br /&gt;
│   │   ├── themeStore.ts      # 主题 (委托 configStore)&lt;br /&gt;
│   │   ├── a11yStore.ts       # 无障碍 (委托 configStore)&lt;br /&gt;
│   │   ├── backgroundStore.ts # 背景 (委托 configStore)&lt;br /&gt;
│   │   ├── authStore.ts       # 认证 (→ Registry)&lt;br /&gt;
│   │   ├── routeStore.ts      # 路由 (历史栈)&lt;br /&gt;
│   │   ├── taskStore.ts       # 任务队列 (localStorage)&lt;br /&gt;
│   │   ├── instanceStore.ts   # 实例管理&lt;br /&gt;
│   │   ├── installStore.ts    # Minecraft 安装&lt;br /&gt;
│   │   ├── launchStore.ts     # 游戏启动&lt;br /&gt;
│   │   ├── modsStore.ts       # Mod 搜索&lt;br /&gt;
│   │   ├── updateStore.ts     # 应用更新&lt;br /&gt;
│   │   └── devStore.ts        # 开发者调试&lt;br /&gt;
│   ├── api/&lt;br /&gt;
│   │   ├── config.ts          # AppConfig 读写 (→ Tauri invoke)&lt;br /&gt;
│   │   ├── auth-registry.ts   # AuthData 读写 (→ Registry)&lt;br /&gt;
│   │   ├── instance.ts        # 实例 API&lt;br /&gt;
│   │   ├── auth.ts            # 登录 API&lt;br /&gt;
│   │   ├── sidecar.ts         # 通用 sidecar IPC&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   ├── hooks/&lt;br /&gt;
│   │   └── useTheme.ts         # 同步 darkMode → .dark class&lt;br /&gt;
│   ├── lib/&lt;br /&gt;
│   │   ├── mode.ts             # BUILD_MODE 常量&lt;br /&gt;
│   │   └── utils.ts            # cn() 工具函数&lt;br /&gt;
│   ├── types/&lt;br /&gt;
│   │   └── task.ts             # Task 类型定义&lt;br /&gt;
│   └── pages/                  # 页面组件&lt;br /&gt;
├── src-tauri/                  # Rust 后端&lt;br /&gt;
│   ├── Cargo.toml              # 依赖: serde, serde_json, serde_yaml, winreg&lt;br /&gt;
│   ├── tauri.conf.json         # 窗口配置 + Bundle + Updater&lt;br /&gt;
│   ├── capabilities/default.json   # 权限声明&lt;br /&gt;
│   ├── src/&lt;br /&gt;
│   │   ├── lib.rs              # 插件注册 + splash/main + 命令注册&lt;br /&gt;
│   │   ├── config.rs           # AppConfig 读写 + 迁移 + 默认值&lt;br /&gt;
│   │   ├── registry.rs         # Windows Registry 读写&lt;br /&gt;
│   │   ├── commands/mod.rs     # Tauri 命令 (→ sidecar + config + auth)&lt;br /&gt;
│   │   └── sidecar.rs          # Sidecar 进程管理&lt;br /&gt;
│   └── binaries/               # Sidecar 二进制文件&lt;br /&gt;
├── sidecar/                    # Node.js Sidecar&lt;br /&gt;
│   └── src/&lt;br /&gt;
│       ├── handlers/           # 10 个 handler&lt;br /&gt;
│       ├── utils/paths.ts      # 路径工具 + InstanceConfig&lt;br /&gt;
│       └── protocol/types.ts   # IPC 消息类型&lt;br /&gt;
├── splash.html                 # 启动动画 HTML 入口&lt;br /&gt;
├── build-vs.cmd                # VS 环境编译脚本&lt;br /&gt;
└── dev-vs.cmd                  # VS 环境开发脚本&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## 页面路由&lt;br /&gt;
&lt;br /&gt;
### 顶层路由 (标题栏可见)&lt;br /&gt;
&lt;br /&gt;
| Key | Label | 组件 | 说明 |&lt;br /&gt;
|---|---|---|---|&lt;br /&gt;
| `home` | 首页 | `pages/home/index.tsx` | StartCard 启动组件 |&lt;br /&gt;
| `store` | 资源 | `pages/store/index.tsx` | 🚧 装修中 |&lt;br /&gt;
| `today` | 资讯 | `pages/today/index.tsx` | 🚧 装修中 |&lt;br /&gt;
| `play-link` | 联机 | `pages/play-link/index.tsx` | 🚧 装修中 |&lt;br /&gt;
| `setting` | 设置 | `pages/setting/index.tsx` | 侧边栏 + 内容区 |&lt;br /&gt;
&lt;br /&gt;
### 隐藏路由&lt;br /&gt;
&lt;br /&gt;
| Key | Label | 组件 |&lt;br /&gt;
|---|---|---|&lt;br /&gt;
| `task-queue` | 任务队列 | `pages/task-queue.tsx` |&lt;br /&gt;
| `debug` | 调试 | `pages/debug/index.tsx` |&lt;br /&gt;
| `debug-splash` | 启动动画调试 | `pages/debug/splash-debug.tsx` |&lt;br /&gt;
| `debug-display` | 显示效果调试 | `pages/debug/display-debug.tsx` |&lt;br /&gt;
| `debug-version-card` | 版本卡片调试 | `pages/debug/version-card-debug.tsx` |&lt;br /&gt;
| `debug-task` | 任务队列调试 | `pages/debug/task-debug.tsx` |&lt;br /&gt;
&lt;br /&gt;
### 路由导航 (历史栈)&lt;br /&gt;
&lt;br /&gt;
路由使用动态历史栈替代静态 parentMap。每次 `navigate()` 压入历史，`goBack()` 弹出。&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Zustand Stores&lt;br /&gt;
&lt;br /&gt;
### configStore (统一配置中心)&lt;br /&gt;
&lt;br /&gt;
所有用户设置的单一数据源。读写通过 Tauri invoke 与 `Koring.yml` 同步。&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
config: AppConfig       // 完整配置&lt;br /&gt;
loaded: boolean         // 是否已从 Rust 加载&lt;br /&gt;
&lt;br /&gt;
init()                  // 从 Rust 加载配置&lt;br /&gt;
setTheme(patch)         // 部分更新 + debounce 300ms 写回&lt;br /&gt;
setA11y(patch)&lt;br /&gt;
setBackground(patch)&lt;br /&gt;
setGame(patch)&lt;br /&gt;
setJava(patch)&lt;br /&gt;
setAdvanced(patch)&lt;br /&gt;
setDownload(patch)&lt;br /&gt;
setNetwork(patch)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### themeStore (委托 configStore)&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
darkMode: &amp;quot;auto&amp;quot; | &amp;quot;light&amp;quot; | &amp;quot;dark&amp;quot;&lt;br /&gt;
parallax: boolean&lt;br /&gt;
setDarkMode(mode)       // 更新 DOM + configStore&lt;br /&gt;
setParallax(v)          // configStore&lt;br /&gt;
syncThemeFromConfig()   // 启动时从 config 同步&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### a11yStore (委托 configStore)&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
reduceMotion, reduceTransparency, highContrast, contentBlurOpacity&lt;br /&gt;
syncA11yFromConfig()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### backgroundStore (委托 configStore)&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
type: &amp;quot;image&amp;quot; | &amp;quot;color&amp;quot;, image, blur, opacity&lt;br /&gt;
setImage / setColor / setBlur / setOpacity / reset&lt;br /&gt;
syncBackgroundFromConfig()&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### authStore (委托 Registry)&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
user: AuthResult | null&lt;br /&gt;
initFromRegistry()      // 从 Windows Registry 加载&lt;br /&gt;
loginOffline(username)  // 通过 sidecar + 保存到 registry&lt;br /&gt;
logout()                // 清除 registry&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### routeStore (历史栈导航)&lt;br /&gt;
&lt;br /&gt;
```ts&lt;br /&gt;
current: RouteKey&lt;br /&gt;
history: RouteKey[]     // 导航历史栈&lt;br /&gt;
navigate(key)           // 压入历史&lt;br /&gt;
goBack()                // 弹出历史&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### taskStore (localStorage)&lt;br /&gt;
&lt;br /&gt;
任务队列。localStorage 持久化历史 (max 50)。&lt;br /&gt;
&lt;br /&gt;
### 其他 Store&lt;br /&gt;
&lt;br /&gt;
- `devStore` — 开发者调试 (内存)&lt;br /&gt;
- `installStore` — Minecraft 安装 (内存，ephemeral)&lt;br /&gt;
- `launchStore` — 游戏启动 (内存，ephemeral)&lt;br /&gt;
- `modsStore` — Mod 搜索 (内存，ephemeral)&lt;br /&gt;
- `updateStore` — 应用更新 (内存，ephemeral)&lt;br /&gt;
- `instanceStore` — 实例管理 (sidecar 查询)&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## 核心组件&lt;br /&gt;
&lt;br /&gt;
### 三层布局 (RootLayout)&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
z-0   BackgroundLayer     全屏背景图 + 视差 + 模糊 + 强内容遮罩&lt;br /&gt;
z-1   ContentLayer        页面内容区 (top: 40px, overflow-auto)&lt;br /&gt;
z-100 SystemLayer         自定义标题栏 (TitleBar)&lt;br /&gt;
z-200 StartupPopup        启动弹窗 (环境变量控制)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### TitleBar 标题栏&lt;br /&gt;
&lt;br /&gt;
三种模式:&lt;br /&gt;
- **`default`**: 左侧品牌文字 + 中间胶囊菜单 (可拖拽切换) + 右侧窗口控制&lt;br /&gt;
- **`sub`**: 左侧返回按钮 + 品牌文字 + 右侧窗口控制 (隐藏 TaskButton)&lt;br /&gt;
- **`window`**: 仅窗口控制&lt;br /&gt;
&lt;br /&gt;
### BackgroundLayer 背景层&lt;br /&gt;
&lt;br /&gt;
- 支持 `image` (CSS background-image) 和 `color` (CSS background-color) 两种类型&lt;br /&gt;
- 视差效果: 鼠标移动时背景偏移 ±20px, scale(1.05)&lt;br /&gt;
- 强内容遮罩: 非 home 页面自动显示 (可通过 `contentBlurOpacity` 控制)&lt;br /&gt;
- 深色模式叠加层: `bg-black/35`&lt;br /&gt;
&lt;br /&gt;
### StartCard 启动组件 (首页)&lt;br /&gt;
&lt;br /&gt;
胶囊形启动组件，位于首页左下角:&lt;br /&gt;
- 左: 设置齿轮图标 (→ setting)&lt;br /&gt;
- 中: &amp;quot;启动游戏&amp;quot; 按钮 (primary 色, rounded-full)&lt;br /&gt;
- 右: 实例选择图标 (Package)&lt;br /&gt;
&lt;br /&gt;
### TaskQueue 任务系统&lt;br /&gt;
&lt;br /&gt;
- 执行器模式: `addTask(type, title, desc, async (ctx) =&amp;gt; {...})`&lt;br /&gt;
- 支持并行执行 (多个任务同时运行)&lt;br /&gt;
- AbortController 取消机制&lt;br /&gt;
- localStorage 持久化历史 (max 50)&lt;br /&gt;
- 任务类型: `install` / `download` / `update` / `launch` / `auth` / `sync` / `custom`&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Tauri 窗口配置&lt;br /&gt;
&lt;br /&gt;
| 窗口 | 尺寸 | 特性 |&lt;br /&gt;
|---|---|---|&lt;br /&gt;
| splashscreen | 480×320 | 无边框, 透明, 不可缩放, 居中 |&lt;br /&gt;
| main | 900×600 (min 800×600) | 无边框, 透明, 隐藏启动 |&lt;br /&gt;
&lt;br /&gt;
## 权限 (capabilities/default.json)&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
core:default, core:window:default, core:window:allow-*,&lt;br /&gt;
core:webview:allow-create-webview-window,&lt;br /&gt;
opener:default, process:default, shell:allow-execute,&lt;br /&gt;
updater:default, dialog:default&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Rust 依赖&lt;br /&gt;
&lt;br /&gt;
```toml&lt;br /&gt;
tauri = &amp;quot;2&amp;quot;&lt;br /&gt;
tauri-plugin-opener, tauri-plugin-process, tauri-plugin-dialog,&lt;br /&gt;
tauri-plugin-shell, tauri-plugin-updater&lt;br /&gt;
serde = { version = &amp;quot;1&amp;quot;, features = [&amp;quot;derive&amp;quot;] }&lt;br /&gt;
serde_json = &amp;quot;1&amp;quot;&lt;br /&gt;
serde_yaml = &amp;quot;0.9&amp;quot;&lt;br /&gt;
uuid = { version = &amp;quot;1&amp;quot;, features = [&amp;quot;v4&amp;quot;] }&lt;br /&gt;
tokio = { version = &amp;quot;1&amp;quot;, features = [&amp;quot;time&amp;quot;] }&lt;br /&gt;
[target.&amp;#039;cfg(windows)&amp;#039;.dependencies]&lt;br /&gt;
winreg = &amp;quot;0.52&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## IPC 协议&lt;br /&gt;
&lt;br /&gt;
前端 → `invoke()` → Rust `commands::*` → sidecar stdin (JSON) → sidecar stdout (JSON) → Tauri 事件 → 前端&lt;br /&gt;
&lt;br /&gt;
Sidecar 命令: `install-minecraft`, `install-mod-loader`, `get-version-list`, `launch-game`, `offline-login`, `search-mods`, `install-mod`, `create-instance`, `list-instances`&lt;br /&gt;
&lt;br /&gt;
Rust 直接命令: `get_config`, `save_config`, `get_auth`, `save_auth`, `delete_auth_cmd`&lt;/div&gt;</summary>
		<author><name>Dream pep</name></author>
	</entry>
</feed>