diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index 98bad07..4ebef8b 100644 --- a/README.md +++ b/README.md @@ -6,24 +6,33 @@ [![UnoCSS](https://img.shields.io/badge/UnoCSS-Atomic-333333.svg)](https://unocss.dev/) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -**LagZero** 是一款专为极致游戏体验打造的跨平台、高性能游戏加速器桌面客户端。基于 **Vue 3**、**TypeScript** 和 **Electron** 构建,底层集成强大的 **sing-box** 核心,旨在提供最低延迟、最稳定的网络加速方案。 +**LagZero** 是一款专为游戏体验打造的游戏加速器。基于 **Vue 3**、**TypeScript** 和 **Electron** 构建,底层集成强大的 **sing-box** 核心,旨在提供最低延迟、最稳定的网络加速方案。 --- ## ✨ 核心特性 -- 🚀 **极速性能**: 底层采用高性能网络核心,支持多线程加速,确保毫秒级响应。 -- 🎨 **现代美学**: 深度定制的 **Glassmorphism**(磨砂玻璃)设计风格,极致的暗色模式体验。 -- 🛠️ **智能监控**: 独创的 **Chain Proxy** 进程链追踪技术,自动识别并加速游戏子进程。 -- 🔧 **高度可定制**: 可视化路由规则编辑器,支持 VLESS, VMess, Trojan, Shadowsocks 等主流协议。 -- 📦 **开箱即用**: 内置 sing-box 核心自动管理,支持一键更新与版本校验。 -- 🌍 **跨平台支撑**: 完美适配 Windows, macOS 和 Linux 操作系统。 +- 🚀 **极速性能**: 底层采用高性能 **sing-box** 网络核心,支持多协议节点加速,确保毫秒级响应。 +- 🎨 **现代美学**: 深度定制的 **Vue 3** + **Naive UI** 设计风格,提供极致的暗色模式与自定义主题色体验。 +- 🎮 **智能游戏库**: 自动扫描并识别本地游戏(Steam、Xbox 等),一键配置加速。 +- 🛠️ **精细化控制**: 独创的 **Process Proxy** 进程追踪技术,搭配 TUN 虚拟网卡模式,实现进程级路由分流。 +- 🌐 **多协议支持**: 全面支持 Shadowsocks, VMess, VLESS, Trojan, TUIC, Hysteria2 等主流与新兴代理协议。 +- 🔌 **本地代理系统**: 内置本地 HTTP/SOCKS 代理服务,支持 PAC 自动代理配置脚本。 +- 📊 **流量可视化**: 实时网络延迟测试、节点状态监测与流量统计图表(基于 ECharts)。 +- 📦 **开箱即用**: 内置 sing-box 核心自动管理,支持代理订阅自动更新与节点订阅解析。 --- ## 📸 界面预览 -_(截图正在准备中...)_ +

+ 仪表盘 + 游戏库 +

+

+ 节点管理 + 系统设置 +

--- @@ -40,30 +49,42 @@ _(截图正在准备中...)_ ## 🚀 快速开始 -### 环境要求 +### 环境与依赖 -- **Node.js**: 18.x 或更高版本 -- **包管理器**: [pnpm](https://pnpm.io/) 9.x 或更高版本 +- **Node.js**: 18.x 或更高版本 (推荐使用 LTS 版本) +- **包管理器**: [pnpm](https://pnpm.io/) (必须使用 pnpm) -### 安装依赖 +### 安装与运行流程 ```bash +# 1. 获取代码并进入工作区 (前提) +# git clone https://github.com/ZenEcho/LagZero.git +# cd LagZero + +# 2. 安装所有的 Node 依赖项 pnpm install -``` -### 启动开发环境 +# 3. 重新编译原生模块 (极度关键!因为依赖了 Better-SQLite3,必须要适配 Electron 的 Node ABI) +pnpm rebuild:native +# 备用命令:如果你在上方重构过程中卡住,可尝试专用的数据库重建脚本 +# pnpm rebuild:sqlite -```bash +# 4. 启动开发模式 (包含 Vite 热更新界面与 Electron 主进程热重载) pnpm dev ``` -### 构建打包 +### 源码编译与打包构建 -| 平台 | 命令 | 说明 | -| :---------- | :------------------ | :------------------------------------- | -| **通用** | `pnpm dist` | 打包当前平台的安装包(Installer) | -| **通用** | `pnpm pack` | 打包为免安装目录(Unpacked) | -| **Windows** | `pnpm dist:win:all` | 同时生成 x64 和 arm64 的安装包与便携版 | +LagZero 配备了齐全的 `package.json` 构建脚手架命令,可直接调用处理打包分发任务: + +| `pnpm` 任务指令 | 执行说明 | +| :-------------- | :----------------------------------------------------------------------------------------------------------- | +| `build` | 纯前端侧的**生产编译**(执行 `vue-tsc` 类型检查后输出网页 `dist` 资产) | +| `pack` | 将程序打包为对应平台的**免安装目录** (`Unpacked`),适合用来调试真实的打包环境 | +| `dist` | 直接将应用封包为当前平台的常规**安装包** (`Installer`/`.exe`/`.dmg`/`.AppImage`等) | +| `dist:win:all` | **(Windows 发布必用)** 全量打包构建 `x64` 和 `arm64` 架构下的 **NSIS安装程序** 与 **Portable便携单文件版本** | + +_(提示:你还可以从 `package.json` 中发现更细粒度的构建宏,如仅打 x64 便携版 `dist:win:x64:portable`)_ --- @@ -71,16 +92,31 @@ pnpm dev ```text ├── .github/ # GitHub Actions 自动化配置 -├── docs/ # 项目文档 (API, 用户手册) +├── docs/ # 项目文档 (API, 用户手册等) +├── docImages/ # 文档相关配图目录 ├── electron/ # Electron 主进程源码 -│ ├── main.ts # 进程入口 -│ └── singbox/ # sing-box 核心集成逻辑 +│ ├── common/ # 主进程与渲染进程共享常量 / 类型 +│ ├── db/ # 本地 SQLite 数据表结构与迁移 +│ ├── main/ # 进程入口与窗口生命周期管理 +│ ├── preload/ # 预加载脚本 (ContextBridge 桥接 API) +│ ├── services/ # 核心服务 (代理引擎, 节点解析, 游戏扫描等) +│ ├── stores/ # 本地数据持久化与配置存储 +│ └── utils/ # 主进程通用工具函数库 +├── public/ # 静态资源 (应用图标等,无须编译构建) ├── src/ # 渲染进程 (Vue 源码) -│ ├── components/ # 组件 -│ ├── views/ # 页面 -│ ├── stores/ # 状态管理 -│ └── assets/ # 静态资源 -└── tests/ # 单元测试与集成测试 +│ ├── api/ # 接口请求封装 +│ ├── assets/ # 全局样式与图片资源 +│ ├── components/ # 全局和基础 UI 组件 +│ ├── composables/ # Vue 组合式公共函数 (Hooks) +│ ├── constants/ # 前端静态枚举与常数定义 +│ ├── layouts/ # 基础页面布局框架 +│ ├── locales/ # 多语言国际化配置 (i18n) +│ ├── router/ # Vue Router 路由配置 +│ ├── stores/ # Pinia 全局状态管理 +│ ├── types/ # 前端 TypeScript 接口与类型定义 +│ ├── utils/ # 前端通用辅助工具类 +│ └── views/ # 主体业务视图与页面 +└── tests/ # 单元测试与端到端测试目录 ``` --- diff --git a/docImages/dashboard.png b/docImages/dashboard.png new file mode 100644 index 0000000..36e7327 Binary files /dev/null and b/docImages/dashboard.png differ diff --git a/docImages/index.png b/docImages/index.png deleted file mode 100644 index 4498bc2..0000000 Binary files a/docImages/index.png and /dev/null differ diff --git a/docImages/library.png b/docImages/library.png new file mode 100644 index 0000000..5e3f900 Binary files /dev/null and b/docImages/library.png differ diff --git a/docImages/nodes.png b/docImages/nodes.png new file mode 100644 index 0000000..790762c Binary files /dev/null and b/docImages/nodes.png differ diff --git a/docImages/settings.png b/docImages/settings.png new file mode 100644 index 0000000..aaeac3f Binary files /dev/null and b/docImages/settings.png differ diff --git a/package.json b/package.json index c1cfa68..99fec04 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "main": "dist-electron/index.js", "type": "module", "author": "LagZero Team", - "description": "是一款专为极致游戏体验打造的、高性能游戏加速器桌面客户端", + "description": "一款专为游戏体验打造的游戏加速器", "repository": { "type": "git", "url": "https://github.com/ZenEcho/LagZero.git" diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 02f59a6..59c7288 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -239,7 +239,7 @@ "dns_bootstrap": "Bootstrap DNS", "dns_bootstrap_hint": "Used to resolve remote DNS domains (e.g. dns.google). Prefer a directly reachable DNS IP such as 223.5.5.5.", "download_update": "Download Update Now", - "tagline": "Cross-platform Game Accelerator", + "tagline": "A game accelerator specially designed for enhancing gaming experience", "preferences": "Preferences", "theme_desc": "Choose an accent color that matches your style.", "dns_flush_failed": "Failed to flush DNS cache", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index ddf038e..6ecc9e4 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -239,7 +239,7 @@ "dns_bootstrap": "Bootstrap DNS", "dns_bootstrap_hint": "用于解析远端 DNS 域名(例如 dns.google)。推荐填写可直连的 DNS IP,如 223.5.5.5。", "download_update": "立即下载更新", - "tagline": "跨平台游戏加速器", + "tagline": "一款专为游戏体验打造的游戏加速器", "preferences": "偏好设置", "theme_desc": "选择符合您风格的主题色。", "dns_flush_failed": "清理 DNS 缓存失败", diff --git a/src/utils/protocol.test.ts b/src/utils/protocol.test.ts index cb73fc6..8493c63 100644 --- a/src/utils/protocol.test.ts +++ b/src/utils/protocol.test.ts @@ -69,18 +69,18 @@ describe('Protocol Parsing', () => { expect(result).not.toBeNull() expect(result?.type).toBe('vmess') expect(result?.server).toBe('planb.mojcn.com') - expect(result?.server_port).toBe(16617) + expect(result?.server_port).toBe(1617) expect(result?.network).toBe('ws') expect(result?.host).toContain('mobgslb.tbcache.com') }) it('should parse VLESS reality link with pbk/sid/sni/fp', () => { - const link = 'vless://13a3abd8-6315-4735-b3a2-39f38a2e4f3d@156.246.93.26:38073?encryption=none&security=reality&flow=xtls-rprx-vision&type=tcp&sni=www.paypal.com&pbk=DrpIgSOtaEHqJywmydYjljWB9FD_1PlFjQIAlbHiOgk&fp=chrome#233boy-reality-156.246.93.26' + const link = 'vless://13a3abd8-6315-4735-b3a2-39f38a2e4f3d@156.246.93.1:38073?encryption=none&security=reality&flow=xtls-rprx-vision&type=tcp&sni=www.paypal.com&pbk=DrpIgSOtaEHqJywmydYjljWB9FD_1PlFjQIAlbHiOgk&fp=chrome#233boy-reality-156.246.1.26' const result = parseShareLink(link) expect(result).not.toBeNull() expect(result?.type).toBe('vless') - expect(result?.server).toBe('156.246.93.26') + expect(result?.server).toBe('156.246.93.1') expect(result?.server_port).toBe(38073) expect(result?.security).toBe('reality') expect(result?.flow).toBe('xtls-rprx-vision') diff --git a/tests/unit/singbox-config.spec.ts b/tests/unit/singbox-config.spec.ts index 9ab3860..b7a1086 100644 --- a/tests/unit/singbox-config.spec.ts +++ b/tests/unit/singbox-config.spec.ts @@ -311,7 +311,7 @@ describe('generateSingboxConfig', () => { }) it('should generate VLESS reality outbound from share link', () => { - const link = 'vless://13a3abd8-6315-4735-b3a2-39f38a2e4f3d@156.246.93.26:38073?encryption=none&security=reality&flow=xtls-rprx-vision&type=tcp&sni=www.paypal.com&pbk=DrpIgSOtaEHqJywmydYjljWB9FD_1PlFjQIAlbHiOgk&fp=chrome#233boy-reality-156.246.93.26' + const link = 'vless://13a3abd8-6315-4735-b3a2-39f38a2e4f3d@156.246.1.26:38073?encryption=none&security=reality&flow=xtls-rprx-vision&type=tcp&sni=www.paypal.com&pbk=DrpIgSOtaEHqJywmydYjljWB9FD_1PlFjQIAlbHiOgk&fp=chrome#233boy-reality-156.246.1.26' const node = parseShareLink(link) expect(node).not.toBeNull() const config = JSON.parse(generateSingboxConfig(mockGame, node as NodeConfig))