Merge branch 'feat/docs-tone-pass-remove-defensive-wording'

This commit is contained in:
AskaEth committed 2026-11-01 20:02:10 +08:00
commit 6cfac9c823
2 files changed
+33 -52

No files matched your search

+18 -30
View File
@@ -10,17 +10,6 @@ Unlucky Launcher (ULL) is a free, open-source Minecraft: Java Edition launcher w
WebView. The launcher embeds an AI agent client (chat / configuration / crash diagnosis) and can be WebView. The launcher embeds an AI agent client (chat / configuration / crash diagnosis) and can be
attached to other agent tooling as an MCP server. attached to other agent tooling as an MCP server.
## Compliance statement
- **Sign-in with your Microsoft account.** Authentication goes through Microsoft OAuth 2.0
device code flow → Xbox Live → XSTS → `api.minecraftservices.com`, using the player's own
Microsoft account and their own game entitlement.
- **Credentials stay on your machine.** Account tokens are stored locally only, are never sent to
any server operated by this project, and the AI features cannot read them.
- **Online play requires a Microsoft account and a valid game entitlement.**
- ULL does not distribute, mirror, proxy or modify any Minecraft game files.
- Not affiliated with Mojang or Microsoft.
## Highlights ## Highlights
- **Single-file native binary**: the launcher itself needs no JVM, no WebView and no sidecar - **Single-file native binary**: the launcher itself needs no JVM, no WebView and no sidecar
@@ -28,13 +17,15 @@ attached to other agent tooling as an MCP server.
dependency. dependency.
- **Two UI stacks during the rewrite**: the released UI is Slint (Royalty-Free 2.0); the - **Two UI stacks during the rewrite**: the released UI is Slint (Royalty-Free 2.0); the
next-generation UI is iced 0.14 + Material 3 Expressive and is still being written (see Status). next-generation UI is iced 0.14 + Material 3 Expressive and is still being written (see Status).
- **CPU software-rendering fallback**: `--software-renderer` gives the full UI on machines with no - **CPU software-rendering fallback**: `--software-renderer` keeps the interface rendering
usable GPU or with broken drivers. normally on machines with no usable GPU or with broken drivers.
- **AI agent + MCP**: chat, setting edits and crash diagnosis inside the launcher; `ull agent - **AI agent + MCP**: chat, setting edits and crash diagnosis inside the launcher; `ull agent
serve` exposes the same core as an MCP server (stdio or Streamable HTTP) to external agent tools. serve` exposes the same core as an MCP server (stdio or Streamable HTTP) to external agent tools.
- **Mod loaders**: Fabric, Quilt, NeoForge, Forge, with modpack and CurseForge / Modrinth clients in - **Mod loaders**: Fabric, Quilt, NeoForge, Forge, with modpack and CurseForge / Modrinth clients in
the core. the core.
- **Java management**: a Temurin → Oracle → Microsoft → Zulu fallback chain, region-aware. - **Java management**: a Temurin → Oracle → Microsoft → Zulu fallback chain, region-aware.
- **Accounts**: sign in with a Microsoft account over OAuth 2.0 device code flow → Xbox Live →
XSTS → `api.minecraftservices.com`; account tokens are kept on this machine only.
- **Engine**: multi-source download (health scoring, mirrors, chunked transfers, hash while - **Engine**: multi-source download (health scoring, mirrors, chunked transfers, hash while
downloading) and a YAML rule-based crash diagnosis engine. downloading) and a YAML rule-based crash diagnosis engine.
- **License**: Apache-2.0 © AskaEth (YeiJ). - **License**: Apache-2.0 © AskaEth (YeiJ).
@@ -51,9 +42,9 @@ Two tracks. They are not the same product yet, so read the headings before downl
those texts sit next to the `.exe` because a bare exe cannot hold them, while the unix archives those texts sit next to the `.exe` because a bare exe cannot hold them, while the unix archives
already contain them. already contain them.
- **UI**: Slint + Metro. This is the shipped GUI — the instance, download, account, Java, log and - **UI**: Slint + Metro. This is the shipped GUI — the instance, download, account, Java, log and
settings pages drive the real engine (the in-app AI chat panel is a scripted placeholder). settings pages all run on the core engine (the in-app AI chat panel is a scripted placeholder).
- **CLI `ull`** is built from the same tree at the same version and is fully usable — but the - **CLI `ull`** is built from the same tree at the same version — but the `v0.1.0` assets ship
`v0.1.0` assets ship only the GUI binary. If you want the CLI, build it yourself: only the GUI binary. If you want the CLI, build it yourself:
`cargo build --release --bin ull`. Commands: `instances`, `install`, `launch`, `accounts`, `cargo build --release --bin ull`. Commands: `instances`, `install`, `launch`, `accounts`,
`sessions`, `logs`, `diag`, `config`, `java`, `agent`. `sessions`, `logs`, `diag`, `config`, `java`, `agent`.
- Windows ARM64 and Linux ARM64 slots are wired into the release pipeline; the next tagged release - Windows ARM64 and Linux ARM64 slots are wired into the release pipeline; the next tagged release
@@ -61,8 +52,7 @@ Two tracks. They are not the same product yet, so read the headings before downl
### Track B — in progress on `dev`: next-generation UI (iced + Material 3 Expressive) ### Track B — in progress on `dev`: next-generation UI (iced + Material 3 Expressive)
**Nothing on this track is released, and no download contains it.** You can only see it by **This track is not released yet — you can see it only by building from source.**
building from source.
- **Locked direction**: the look is Material 3 Expressive and the framework is iced 0.14; the UI - **Locked direction**: the look is Material 3 Expressive and the framework is iced 0.14; the UI
layer is written from scratch. Neither the style nor the framework will change again. layer is written from scratch. Neither the style nor the framework will change again.
@@ -83,7 +73,7 @@ Binaries in the workspace, so you can tell them apart:
|--------|-------|-------| |--------|-------|-------|
| `unlucky-launcher` | `crates/app` (Slint) | released in v0.1.0; still the usable GUI | | `unlucky-launcher` | `crates/app` (Slint) | released in v0.1.0; still the usable GUI |
| `unlucky-launcher-iced` | `crates/app-iced` (iced 0.14) | under construction; skeleton only, not shipped | | `unlucky-launcher-iced` | `crates/app-iced` (iced 0.14) | under construction; skeleton only, not shipped |
| `ull` | `crates/cli` | built from the same tree at the same version; not shipped in the v0.1.0 assets | | `ull` | `crates/cli` | built from the same tree at the same version; not in the v0.1.0 assets |
## Module map ## Module map
@@ -167,17 +157,15 @@ a real runner.
Minimum baseline: **Windows 10**; Windows 8.1 / 8 / 7 are not supported. Minimum baseline: **Windows 10**; Windows 8.1 / 8 / 7 are not supported.
- Windows 10/11 builds use the **standard toolchain** (MSVC / GNU) — no custom target specs, no - Windows 10/11 builds use the **standard toolchain** (MSVC / GNU), built the same way as
`-Zbuild-std`, no import-table allowlists upstream cargo
- macOS 12+ (Apple Silicon and Intel) and Linux x64 / arm64 are supported build slots; on Linux, - macOS 12+ (Apple Silicon and Intel) and Linux x64 / arm64 are supported build slots; on Linux,
X11 is the preferred path today and Wayland is the long-term direction. macOS builds are unsigned, X11 is the preferred path today and Wayland is the long-term direction. macOS builds are unsigned,
so the first launch needs the Gatekeeper quarantine attribute cleared so the first launch needs the Gatekeeper quarantine attribute cleared
(`xattr -d com.apple.quarantine`) (`xattr -d com.apple.quarantine`)
- Android Termux is experimental and not promised: CLI only, GUI unverified - Android Termux is experimental and not promised: CLI only, GUI unverified
- Platform independence is expressed through **separate test matrices**, not separate artifact - Each platform runs its own test matrix; capability differences use feature gates with runtime
pipelines; capability differences use feature gates with runtime probing probing.
- **Renderer fallback on both UI stacks**: the Slint build drops to software rendering, the iced
build drops from wgpu to tiny-skia, so a machine without a usable GPU still gets the full UI
## License and acknowledgements ## License and acknowledgements
@@ -197,8 +185,8 @@ Minimum baseline: **Windows 10**; Windows 8.1 / 8 / 7 are not supported.
`zip` / `flate2` / `tar` (MIT / Apache-2.0). The allow-list cargo-deny enforces is in `deny.toml`; `zip` / `flate2` / `tar` (MIT / Apache-2.0). The allow-list cargo-deny enforces is in `deny.toml`;
GPL-family dependencies may not enter the main line. GPL-family dependencies may not enter the main line.
Thanks to [HMCL](https://github.com/HMCL-dev/HMCL) and Thanks to [HMCL](https://github.com/HMCL-dev/HMCL) and [PCL2](https://github.com/Meloong-Git/PCL)
[PCL2](https://github.com/Meloong-Git/PCL) (both GPL-3.0) — those two old-timers have been riding (both GPL-3.0). They have been with the vast majority of Minecraft players for years, and this
along with the overwhelming majority of Minecraft players for years now. This launcher learned an project has benefited a great deal from their design choices and implementation details.
enormous amount from them about how a launcher should feel and how it should work, and it exists
very much in their debt. Not affiliated with Mojang or Microsoft.
+15 -22
View File
@@ -9,26 +9,19 @@ Unlucky Launcher(ULL)是一个用 Rust 写的免费开源 Minecraft: Java
每个平台就一个原生二进制——没有安装包、没有捆绑运行时、没有 WebView。启动器内置 AI Agent 每个平台就一个原生二进制——没有安装包、没有捆绑运行时、没有 WebView。启动器内置 AI Agent
客户端(对话 / 改配置 / 崩溃诊断),也能作为 MCP server 接进别的 Agent 工具。 客户端(对话 / 改配置 / 崩溃诊断),也能作为 MCP server 接进别的 Agent 工具。
## 合规声明
- **用 Microsoft 账户登录**:认证走 Microsoft OAuth 2.0 device code flow → Xbox Live → XSTS →
`api.minecraftservices.com`,用的是玩家自己的 Microsoft 账户与自己已购的游戏权益。
- **凭据只存本机**:账户令牌只保存在本机,不上传本项目运营的任何服务器,AI 功能也读不到。
- **联机游玩需要 Microsoft 账户与有效的游戏权益。**
- 不分发、不镜像、不代理、不修改任何 Minecraft 游戏文件。
- 与 Mojang、Microsoft 无关联。
## 特性 ## 特性
- **单文件原生二进制**:启动器本体不需要 JVM、不需要 WebView、不带旁挂运行时。游戏要的 JDK 由 - **单文件原生二进制**:启动器本体不需要 JVM、不需要 WebView、不带旁挂运行时。游戏要的 JDK 由
启动器按实例下载管理,不是启动器的依赖。 启动器按实例下载管理,不是启动器的依赖。
- **重写期两套 UI 并存**:已发布版本是 Slint(Royalty-Free 2.0);下一代 UI 是 iced 0.14 + - **重写期两套 UI 并存**:已发布版本是 Slint(Royalty-Free 2.0);下一代 UI 是 iced 0.14 +
Material 3 Expressive,目前仍在写(见「当前状态」)。 Material 3 Expressive,目前仍在写(见「当前状态」)。
- **CPU 软渲染兜底**:`--software-renderer` 让没有可用 GPU 或驱动有问题的老机也能拿到完整界面。 - **CPU 软渲染兜底**:`--software-renderer` 让没有可用 GPU 或驱动有问题的老机也能正常显示界面。
- **AI Agent + MCP**:启动器内可对话、改设置、读崩溃诊断;`ull agent serve` 把同一个内核以 MCP - **AI Agent + MCP**:启动器内可对话、改设置、读崩溃诊断;`ull agent serve` 把同一个内核以 MCP
server 形态(stdio 或 Streamable HTTP)开放给外部 Agent 工具。 server 形态(stdio 或 Streamable HTTP)开放给外部 Agent 工具。
- **加载器**:Fabric / Quilt / NeoForge / Forge;整合包与 CurseForge / Modrinth 客户端在 core 里。 - **加载器**:Fabric / Quilt / NeoForge / Forge;整合包与 CurseForge / Modrinth 客户端在 core 里。
- **Java 管理**:Temurin → Oracle → Microsoft → Zulu 回退链,带地区判定。 - **Java 管理**:Temurin → Oracle → Microsoft → Zulu 回退链,带地区判定。
- **账户**:用 Microsoft 账户登录,认证走 OAuth 2.0 device code flow → Xbox Live → XSTS →
`api.minecraftservices.com`;账户令牌只保存在本机。
- **引擎**:多源下载(健康度评分、镜像、分块传输、边下边算)与 YAML 规则引擎的崩溃诊断。 - **引擎**:多源下载(健康度评分、镜像、分块传输、边下边算)与 YAML 规则引擎的崩溃诊断。
- **许可**:Apache-2.0 © AskaEth (YeiJ)。 - **许可**:Apache-2.0 © AskaEth (YeiJ)。
@@ -36,15 +29,15 @@ Unlucky Launcher(ULL)是一个用 Rust 写的免费开源 Minecraft: Java
两条轨道,还不是同一个东西——看小标题再决定下载什么。 两条轨道,还不是同一个东西——看小标题再决定下载什么。
### 轨道 A —— 已发布:v0.1.0,Slint 版(现在真能下载的就是它) ### 轨道 A —— 已发布:v0.1.0,Slint 版(现在能下载的就是它)
- **GitHub Releases `v0.1.0`**(2026-11-01,标记为 pre-release):单文件产物覆盖 Windows x64(裸 - **GitHub Releases `v0.1.0`**(2026-11-01,标记为 pre-release):单文件产物覆盖 Windows x64(裸
`.exe`)、Linux x64、macOS(arm64 与 x64)`.tar.gz`。每个 Release 另挂 `SHA256SUMS.txt` 与 `.exe`)、Linux x64、macOS(arm64 与 x64)`.tar.gz`。每个 Release 另挂 `SHA256SUMS.txt` 与
`LICENSE` / `NOTICE` / `README.md` 三份文本——Windows 是「一个 exe 装不下文本」所以并列挂出, `LICENSE` / `NOTICE` / `README.md` 三份文本——Windows 是「一个 exe 装不下文本」所以并列挂出,
unix 归档里本来就装着。 unix 归档里本来就装着。
- **UI**:Slint + Metro。这是已交付的图形界面——实例、下载、账户、Java、日志、设置各页驱动真实引擎 - **UI**:Slint + Metro。这是已交付的图形界面——实例、下载、账户、Java、日志、设置
(应用内 AI 对话面板仍是脚本化的占位)。 各页都由 core 引擎驱动(应用内 AI 对话面板仍是脚本化的占位)。
- **CLI `ull`** 与 v0.1.0 同源同版本、完整可用,但发布资产里只有 GUI 单文件——要用它请自己构建: - **CLI `ull`** 与 v0.1.0 同源同版本,但发布资产里只有 GUI 单文件——要用它请自己构建:
`cargo build --release --bin ull`。命令:`instances`、`install`、`launch`、`accounts`、`sessions`、 `cargo build --release --bin ull`。命令:`instances`、`install`、`launch`、`accounts`、`sessions`、
`logs`、`diag`、`config`、`java`、`agent`。 `logs`、`diag`、`config`、`java`、`agent`。
- Windows ARM64 与 Linux ARM64 两个槽位已接进发布流水线,随下一个 tag 发布;`v0.1.0` 的资产早于 - Windows ARM64 与 Linux ARM64 两个槽位已接进发布流水线,随下一个 tag 发布;`v0.1.0` 的资产早于
@@ -52,7 +45,7 @@ Unlucky Launcher(ULL)是一个用 Rust 写的免费开源 Minecraft: Java
### 轨道 B —— dev 上的下一代 UI(iced + M3 Expressive,施工中) ### 轨道 B —— dev 上的下一代 UI(iced + M3 Expressive,施工中)
**这条轨道没有任何已发布的东西,任何下载都拿不到它。** 想看只能自己从源码编。 **这条轨道还没发布——要看只能自己从源码编。**
- **方向已锁死**:视觉 = Material 3 Expressive,框架 = iced 0.14,UI 层从头写;风格与框架都不会再换。 - **方向已锁死**:视觉 = Material 3 Expressive,框架 = iced 0.14,UI 层从头写;风格与框架都不会再换。
- **已完成**:令牌 crate `crates/design`(零 UI 框架依赖、零第三方 crate——真 HCT 色彩、排版档位、 - **已完成**:令牌 crate `crates/design`(零 UI 框架依赖、零第三方 crate——真 HCT 色彩、排版档位、
@@ -94,7 +87,7 @@ Unlucky-Launcher (cargo workspace)
| `download` | 多源健康度、镜像、分块下载、边下边算 | | `download` | 多源健康度、镜像、分块下载、边下边算 |
| `game` | 版本/实例仓库、快照与继承解析 | | `game` | 版本/实例仓库、快照与继承解析 |
| `launch` | 10 阶段启动管线、进程、JSONL 事件流 | | `launch` | 10 阶段启动管线、进程、JSONL 事件流 |
| `auth` | Microsoft 正版登录(OAuth 2.0 device code → Xbox Live → XSTS → Minecraft Services) | | `auth` | Microsoft 账户登录(OAuth 2.0 device code → Xbox Live → XSTS → Minecraft Services) |
| `addon` | 加载器安装、整合包、CurseForge / Modrinth | | `addon` | 加载器安装、整合包、CurseForge / Modrinth |
| `diagnose` | 五类信号采集、YAML 规则引擎、hs_err 解析 | | `diagnose` | 五类信号采集、YAML 规则引擎、hs_err 解析 |
| `platform` | OS 抽象:路径、进程、文件锁、能力探测、运行期 OS 检测 | | `platform` | OS 抽象:路径、进程、文件锁、能力探测、运行期 OS 检测 |
@@ -147,14 +140,12 @@ cargo build --release # 三个 bin 都落在 ta
最低基线 **Windows 10**;Windows 8.1 / 8 / 7 不在支持范围内。 最低基线 **Windows 10**;Windows 8.1 / 8 / 7 不在支持范围内。
- Windows 10/11 走**标准工具链**产物(MSVC / GNU),无自定义 target spec、无 `-Zbuild-std`、无导入表白名单 - Windows 10/11 的产物由**标准工具链**(MSVC / GNU)构建,构建方式与上游 cargo 一致
- macOS 12+(Apple Silicon 与 Intel)与 Linux x64 / arm64 都是支持槽位;Linux 上 X11 是当前首选路径, - macOS 12+(Apple Silicon 与 Intel)与 Linux x64 / arm64 都是支持槽位;Linux 上 X11 是当前首选路径,
Wayland 是大方向。macOS 产物未签名,首次启动要自己清掉 Gatekeeper 隔离标记 Wayland 是大方向。macOS 产物未签名,首次启动要自己清掉 Gatekeeper 隔离标记
(`xattr -d com.apple.quarantine`) (`xattr -d com.apple.quarantine`)
- Android Termux 试验级、不承诺:只保证 CLI,GUI 未验证 - Android Termux 试验级、不承诺:只保证 CLI,GUI 未验证
- 平台独立性体现在**独立测试矩阵**,而非独立产物链;能力差异用 feature gate + 运行期探测表达 - 每个平台跑各自的测试矩阵;能力差异用 feature gate + 运行期探测表达。
- **两套 UI 都有渲染兜底**:Slint 版降软渲染,iced 版从 wgpu 降到 tiny-skia,没有可用 GPU 的机器
同样能拿到完整界面
## 许可证与致谢 ## 许可证与致谢
@@ -171,5 +162,7 @@ cargo build --release # 三个 bin 都落在 ta
(MIT / Apache-2.0)。cargo-deny 强制执行的白名单在 `deny.toml`;GPL 系依赖不得进主干。 (MIT / Apache-2.0)。cargo-deny 强制执行的白名单在 `deny.toml`;GPL 系依赖不得进主干。
感谢 [HMCL](https://github.com/HMCL-dev/HMCL) 和 [PCL2](https://github.com/Meloong-Git/PCL) 感谢 [HMCL](https://github.com/HMCL-dev/HMCL) 和 [PCL2](https://github.com/Meloong-Git/PCL)
(均 GPL-3.0)——这两位陪着绝大多数 MC 玩家走了好多年的老前辈。启动器该是什么手感、该怎么把一件 (均 GPL-3.0)。这两款启动器陪着绝大多数 MC 玩家走了很多年,
事做顺,我们是从它们身上学的;这个项目欠它们一份很大的人情。 本项目在设计取舍与实现细节上都从中受益良多。
与 Mojang、Microsoft 无关联。