Skip to content

Commit cd5f85b

Browse files
JusterZhuclaude
andauthored
docs: table cleanup, cookbook UAC notes, contact page, homepage i18n & releaselog translation (#94)
* docs: rewrite Beginner cookbook with step-by-step self-guided flow - Replace Hub-centric 'run the samples' approach with self-guided 'write-your-own' flow: Client → Upgrade → Tools → Server → verify - Add bilibili video embed (BV12P9dBiEEh) and ASCII update flow diagram - Client code: only 3 secrets in UpdateRequest — all identity fields (MainAppName, ClientVersion, UpdateAppName, etc.) are auto-discovered by AppMetadataDiscoverer from generalupdate.manifest.json - Upgrade code: AppType.Upgrade, no SetConfig — params via encrypted IPC - Phase 4 (Tools): use Config tab, not Patch tab; steps match actual UI (.csproj path → Analyze → Generate Sample) - Fix directory structure: Upgrade.exe lives in update/ subdirectory per manifest's updatePath, not alongside Client - Manifest JSON example reflects actual ManifestInfo field names and omits secrets (they belong in code) - Sync all three locales: zh (default), zh-Hans, en Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix: replace react-player import with bilibili iframe embed react-player is not a project dependency, causing Docusaurus build to fail with 'Module not found'. Use bilibili's native iframe embed instead, which requires no extra npm package. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix: address Copilot review — diagram endpoint path and curl -X POST - ASCII diagram: POST /Verification -> POST /Upgrade/Verification - Troubleshooting table: add missing -X POST to curl command Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: remove 部署与运维 (Deployment & Operations) guide section Delete the guide directory and its three locale files. Remove the autogenerated category from sidebars.js. Fix dangling links in Bowl, Differential, and Extension component docs across all locales. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: component table cleanup, cookbook UAC notes, contact page, i18n fixes - Remove 返回值 (return value) column from instance method tables in all 5 component docs (Core, Differential, Drivelution, Bowl, Extension) across default zh-Hans and zh-Hans i18n versions - Add installation directory UAC/permission notes to Beginner cookbook in all 3 locales (zh-Hans default, zh-Hans i18n, en i18n) - Create /contact page with QQ group (748744489) and email contact info, supporting both Chinese and English - Add '联系方式 / Contact' navbar item on the right side - Fix homepage to respect locale: translate hero subtitle, feature cards, tech stack title, and page meta to English when viewing in en mode - Fix homepage CTA button (开始探索 / Get Started) to link to cookbook instead of GeneralSpacestation - Translate 2026-05-20 releaselog entry from Chinese to English in en i18n Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 63a02ba commit cd5f85b

17 files changed

Lines changed: 325 additions & 189 deletions

File tree

website/docs/doc/GeneralUpdate.Bowl.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ sidebar_position: 3
9898

9999
**Bowl:**
100100

101-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
102-
| --- | --- | --- | --- | --- |
103-
| `LaunchAsync(BowlContext, CancellationToken)` | `context` — 执行上下文(建议先调 `Normalize()`);`ct` — 取消令牌 | `Task<BowlResult>` | 启动崩溃监控守护流程 | 三阶段:准备监控 → 运行监控 → 检测到 Dump 则进入故障处理管线 |
101+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
102+
| --- | --- | --- | --- |
103+
| `LaunchAsync(BowlContext, CancellationToken)` | `context` — 执行上下文(建议先调 `Normalize()`);`ct` — 取消令牌 | 启动崩溃监控守护流程 | 三阶段:准备监控 → 运行监控 → 检测到 Dump 则进入故障处理管线 |
104104

105105
**BowlContext:**
106106

107-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
108-
| --- | --- | --- | --- | --- |
109-
| `Normalize()` || `BowlContext` | 应用默认值(`WorkModel``"Upgrade"``TimeoutMs``30000``DumpType``Full`| 返回新实例,不修改原实例 |
107+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
108+
| --- | --- | --- | --- |
109+
| `Normalize()` || 应用默认值(`WorkModel``"Upgrade"``TimeoutMs``30000``DumpType``Full`| 返回新实例,不修改原实例 |
110110

111111
### 3.3 回调事件
112112

website/docs/doc/GeneralUpdate.Core.md

Lines changed: 71 additions & 71 deletions
Large diffs are not rendered by default.

website/docs/doc/GeneralUpdate.Differential.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ Differential 本身是底层库,不提供配置类。所有参数通过构造
9999

100100
**IBinaryDiffer:**
101101

102-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
103-
| --- | --- | --- | --- | --- |
104-
| `CleanAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 新文件路径;`patchFilePath` — 补丁输出路径;`cancellationToken` | `Task` | 发布/构建阶段生成补丁 | 大文件取消不会立即响应,需等待当前文件处理完成 |
105-
| `DirtyAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 补丁还原后文件输出路径;`patchFilePath` — 补丁文件路径;`cancellationToken` | `Task` | 客户端升级阶段应用补丁 | 不会直接覆盖旧文件,结果写入 `newFilePath` |
102+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
103+
| --- | --- | --- | --- |
104+
| `CleanAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 新文件路径;`patchFilePath` — 补丁输出路径;`cancellationToken` | 发布/构建阶段生成补丁 | 大文件取消不会立即响应,需等待当前文件处理完成 |
105+
| `DirtyAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 补丁还原后文件输出路径;`patchFilePath` — 补丁文件路径;`cancellationToken` | 客户端升级阶段应用补丁 | 不会直接覆盖旧文件,结果写入 `newFilePath` |
106106

107107
### 3.3 回调事件
108108

website/docs/doc/GeneralUpdate.Drivelution.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,26 @@ sidebar_position: 8
124124

125125
**GeneralDrivelution(静态类):**
126126

127-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
128-
| --- | --- | --- | --- | --- |
129-
| `Create(DrivelutionOptions?)` | `options` — 全局选项 | `IGeneralDrivelution` | 创建当前平台的驱动更新器 | 自动检测平台 |
130-
| `Create(IServiceProvider)` | `serviceProvider` — DI 容器 | `IGeneralDrivelution` | 从 DI 容器解析 | 未注册时回退到自动平台创建 |
131-
| `QuickUpdateAsync(DriverInfo, UpdateStrategy?, IProgress<UpdateProgress>?, CancellationToken)` | `driverInfo` — 驱动信息;`strategy` — 可选策略(null 时使用默认);`progress` — 进度报告;`ct` — 取消令牌 | `Task<UpdateResult>` | 快速单驱动更新 | 使用安全默认策略 |
132-
| `ValidateAsync(DriverInfo, CancellationToken)` | `driverInfo` — 驱动信息;`ct` — 取消令牌 | `Task<bool>` | 单独验证驱动文件 ||
133-
| `GetPlatformInfo()` || `PlatformInfo` | 查询当前平台信息 | 返回 OS/架构/版本/是否支持 |
134-
| `GetDriversFromDirectoryAsync(string, string?, CancellationToken)` | `directoryPath` — 目录路径;`searchPattern` — 搜索模式;`ct` — 取消令牌 | `Task<List<DriverInfo>>` | 扫描目录解析驱动信息 | 默认搜索模式与平台相关 |
135-
| `BatchUpdateAsync(IEnumerable<DriverInfo>, UpdateStrategy, BatchMode, IProgress<UpdateProgress>?, CancellationToken)` | `drivers` — 驱动列表;`strategy` — 更新策略;`mode` — 顺序/并行;`progress` — 进度;`ct` — 取消令牌 | `Task<BatchUpdateResult>` | 批量更新多个驱动 | 并行模式下底层系统工具可能竞争资源 |
127+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
128+
| --- | ---| --- | --- |
129+
| `Create(DrivelutionOptions?)` | `options` — 全局选项 | 创建当前平台的驱动更新器 | 自动检测平台 |
130+
| `Create(IServiceProvider)` | `serviceProvider` — DI 容器 | 从 DI 容器解析 | 未注册时回退到自动平台创建 |
131+
| `QuickUpdateAsync(DriverInfo, UpdateStrategy?, IProgress<UpdateProgress>?, CancellationToken)` | `driverInfo` — 驱动信息;`strategy` — 可选策略(null 时使用默认);`progress` — 进度报告;`ct` — 取消令牌 | 快速单驱动更新 | 使用安全默认策略 |
132+
| `ValidateAsync(DriverInfo, CancellationToken)` | `driverInfo` — 驱动信息;`ct` — 取消令牌 | 单独验证驱动文件 ||
133+
| `GetPlatformInfo()` || 查询当前平台信息 | 返回 OS/架构/版本/是否支持 |
134+
| `GetDriversFromDirectoryAsync(string, string?, CancellationToken)` | `directoryPath` — 目录路径;`searchPattern` — 搜索模式;`ct` — 取消令牌 | 扫描目录解析驱动信息 | 默认搜索模式与平台相关 |
135+
| `BatchUpdateAsync(IEnumerable<DriverInfo>, UpdateStrategy, BatchMode, IProgress<UpdateProgress>?, CancellationToken)` | `drivers` — 驱动列表;`strategy` — 更新策略;`mode` — 顺序/并行;`progress` — 进度;`ct` — 取消令牌 | 批量更新多个驱动 | 并行模式下底层系统工具可能竞争资源 |
136136

137137
**IGeneralDrivelution:**
138138

139-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
140-
| --- | --- | --- | --- | --- |
141-
| `UpdateAsync(...)` |`QuickUpdateAsync` | `Task<UpdateResult>` | 执行完整更新流水线 ||
142-
| `ValidateAsync(...)` |`GeneralDrivelution.ValidateAsync` | `Task<bool>` | 单独验证 ||
143-
| `BackupAsync(DriverInfo, string, CancellationToken)` | `driverInfo`, `backupPath`, `ct` | `Task<bool>` | 单独备份驱动文件 ||
144-
| `RollbackAsync(string, CancellationToken)` | `backupPath` — 备份路径;`ct` — 取消令牌 | `Task<bool>` | 从备份恢复驱动 | 不同平台恢复逻辑不同 |
145-
| `GetDriversFromDirectoryAsync(...)` |`GeneralDrivelution` | `Task<List<DriverInfo>>` | 扫描目录 ||
146-
| `BatchUpdateAsync(...)` |`GeneralDrivelution` | `Task<BatchUpdateResult>` | 批量更新 ||
139+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
140+
| --- | ---| --- | --- |
141+
| `UpdateAsync(...)` |`QuickUpdateAsync` | 执行完整更新流水线 ||
142+
| `ValidateAsync(...)` |`GeneralDrivelution.ValidateAsync` | 单独验证 ||
143+
| `BackupAsync(DriverInfo, string, CancellationToken)` | `driverInfo`, `backupPath`, `ct` | 单独备份驱动文件 ||
144+
| `RollbackAsync(string, CancellationToken)` | `backupPath` — 备份路径;`ct` — 取消令牌 | 从备份恢复驱动 | 不同平台恢复逻辑不同 |
145+
| `GetDriversFromDirectoryAsync(...)` |`GeneralDrivelution` | 扫描目录 ||
146+
| `BatchUpdateAsync(...)` |`GeneralDrivelution` | 批量更新 ||
147147

148148
### 3.3 回调事件
149149

website/docs/doc/GeneralUpdate.Extension.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -131,34 +131,34 @@ sidebar_position: 7
131131

132132
**IExtensionHost:**
133133

134-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
135-
| --- | --- | --- | --- | --- |
136-
| `QueryExtensionsAsync(ExtensionQueryDTO)` | `query` — 查询条件 | `Task<HttpResponseDTO<PagedResultDTO<ExtensionDTO>>>` | 搜索/浏览可用扩展 | 响应数据在 `Body.Items`|
137-
| `DownloadExtensionAsync(string, string)` | `extensionId` — 扩展 ID;`savePath` — 保存路径 | `Task<bool>` | 单独下载扩展包 | 支持 HTTP Range 断点续传 |
138-
| `UpdateExtensionAsync(string)` | `extensionId` — 扩展 ID | `Task<bool>` | 一键更新单个扩展(推荐入口) | 串起查询→兼容性→依赖→下载→校验→安装全流程 |
139-
| `InstallExtensionAsync(string, bool)` | `extensionPath` — ZIP 包路径;`rollbackOnFailure` — 是否失败回滚 | `Task<bool>` | 手动安装本地扩展包 | 仅接受 `.zip` 格式 |
140-
| `UpdateExtensionsAsync(IEnumerable<string>, CancellationToken)` | `extensionIds` — 扩展 ID 列表;`ct` — 取消令牌 | `Task<Dictionary<string, bool>>` | 批量更新 | 按传入顺序逐个处理 |
141-
| `UninstallExtensionAsync(string, CancellationToken)` | `extensionId` — 扩展 ID;`ct` — 取消令牌 | `Task<bool>` | 卸载扩展 | 移除 catalog 记录并删除扩展目录 |
142-
| `ActivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | `Task` | 激活扩展 | 调用生命周期钩子 |
143-
| `DeactivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | `Task` | 停用扩展 | 调用生命周期钩子 |
144-
| `IsExtensionCompatible(ExtensionMetadata)` | `extension` — 扩展元数据 | `bool` | 检查扩展兼容性 | 基于 `HostVersion``MinHostVersion`/`MaxHostVersion` 比较 |
145-
| `SetAutoUpdate(string, bool)` | `extensionId` — 扩展 ID;`autoUpdate` — 是否自动更新 | `void` | 设置单扩展自动更新开关 | 仅内存状态,不自动后台轮询 |
146-
| `SetGlobalAutoUpdate(bool)` | `enabled` — 是否启用 | `void` | 设置全局自动更新默认值 | 仅内存状态 |
134+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
135+
| --- | --- | --- | --- |
136+
| `QueryExtensionsAsync(ExtensionQueryDTO)` | `query` — 查询条件 | 搜索/浏览可用扩展 | 响应数据在 `Body.Items`|
137+
| `DownloadExtensionAsync(string, string)` | `extensionId` — 扩展 ID;`savePath` — 保存路径 | 单独下载扩展包 | 支持 HTTP Range 断点续传 |
138+
| `UpdateExtensionAsync(string)` | `extensionId` — 扩展 ID | 一键更新单个扩展(推荐入口) | 串起查询→兼容性→依赖→下载→校验→安装全流程 |
139+
| `InstallExtensionAsync(string, bool)` | `extensionPath` — ZIP 包路径;`rollbackOnFailure` — 是否失败回滚 | 手动安装本地扩展包 | 仅接受 `.zip` 格式 |
140+
| `UpdateExtensionsAsync(IEnumerable<string>, CancellationToken)` | `extensionIds` — 扩展 ID 列表;`ct` — 取消令牌 | 批量更新 | 按传入顺序逐个处理 |
141+
| `UninstallExtensionAsync(string, CancellationToken)` | `extensionId` — 扩展 ID;`ct` — 取消令牌 | 卸载扩展 | 移除 catalog 记录并删除扩展目录 |
142+
| `ActivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | 激活扩展 | 调用生命周期钩子 |
143+
| `DeactivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | 停用扩展 | 调用生命周期钩子 |
144+
| `IsExtensionCompatible(ExtensionMetadata)` | `extension` — 扩展元数据 | 检查扩展兼容性 | 基于 `HostVersion``MinHostVersion`/`MaxHostVersion` 比较 |
145+
| `SetAutoUpdate(string, bool)` | `extensionId` — 扩展 ID;`autoUpdate` — 是否自动更新 | 设置单扩展自动更新开关 | 仅内存状态,不自动后台轮询 |
146+
| `SetGlobalAutoUpdate(bool)` | `enabled` — 是否启用 | 设置全局自动更新默认值 | 仅内存状态 |
147147

148148
**GeneralExtensionHost 附加方法:**
149149

150-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
151-
| --- | --- | --- | --- | --- |
152-
| `IsAutoUpdateEnabled(string)` | `extensionId` — 扩展 ID | `bool` | 查询指定扩展的自动更新开关 | 单扩展设置优先于全局设置 |
150+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
151+
| --- | --- | --- | --- |
152+
| `IsAutoUpdateEnabled(string)` | `extensionId` — 扩展 ID | 查询指定扩展的自动更新开关 | 单扩展设置优先于全局设置 |
153153

154154
**ExtensionHostBuilder:**
155155

156-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
157-
| --- | --- | --- | --- | --- |
158-
| `ConfigureOptions(Action<ExtensionHostOptions>)` | `configure` — 配置委托 | `ExtensionHostBuilder` | 通过 Lambda 配置选项 ||
159-
| `WithOptions(ExtensionHostOptions)` | `options` — 选项对象 | `ExtensionHostBuilder` | 直接设置选项 ||
160-
| `ConfigureServices(Action<IServiceCollection>)` | `configure` — DI 注册委托 | `ExtensionHostBuilder` | 替换或添加服务 |`Build()` 前调用 |
161-
| `Build()` || `IExtensionHost` | 构建宿主实例 | 自动注册未覆盖的默认服务 |
156+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
157+
| --- | --- | --- | --- |
158+
| `ConfigureOptions(Action<ExtensionHostOptions>)` | `configure` — 配置委托 | 通过 Lambda 配置选项 ||
159+
| `WithOptions(ExtensionHostOptions)` | `options` — 选项对象 | 直接设置选项 ||
160+
| `ConfigureServices(Action<IServiceCollection>)` | `configure` — DI 注册委托 | 替换或添加服务 |`Build()` 前调用 |
161+
| `Build()` || 构建宿主实例 | 自动注册未覆盖的默认服务 |
162162

163163
### 3.3 回调事件
164164

website/docs/quickstart/Beginner cookbook.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,26 @@ Client (新版本):
371371
3. [GeneralUpdate.Bowl](../doc/GeneralUpdate.Bowl):崩溃监控、备份和失败恢复
372372
4. [GeneralUpdate.Tools](./GeneralUpdate.PacketTool):补丁包、Hash、OSS Config、Simulation 的完整操作指南
373373

374-
## 示例仓库
374+
## 安装目录注意事项
375+
376+
更新过程中,应用程序需要对安装目录进行读写操作。为避免触发 Windows UAC(用户账户控制)弹窗,请将应用安装在以下非系统保护的目录:
377+
378+
| 推荐目录 | 路径示例 |
379+
| --- | --- |
380+
| 用户 AppData(推荐) | `C:\Users\<用户名>\AppData\Local\<你的应用名>\` |
381+
| 用户主目录 | `C:\Users\<用户名>\<你的应用名>\` |
382+
| 非系统盘自定义目录 | `D:\<你的应用名>\` |
375383

384+
**不推荐的目录:**
385+
386+
- `C:\Program Files\` — 需要管理员权限才能写入
387+
- `C:\Program Files (x86)\` — 需要管理员权限才能写入
388+
- `C:\Windows\` — 系统目录,禁止写入
389+
- 系统盘根目录(如 `C:\`) — 可能触发权限限制
390+
391+
> **提示**:如果在更新时遇到"权限不足"或 UAC 弹窗,请检查应用是否安装在不推荐的目录中。将应用迁移到用户目录通常可以解决此问题。
392+
393+
## 示例仓库
376394
| 仓库 | 地址 |
377395
| --- | --- |
378396
| Samples(Server + Hub) | [GeneralUpdate-Samples](https://github.com/GeneralLibrary/GeneralUpdate-Samples) |

website/docusaurus.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ const config = {
9292
},
9393
],
9494
},
95+
{
96+
to: '/contact',
97+
label: '联系方式',
98+
position: 'right',
99+
},
95100
{
96101
href: 'https://github.com/GeneralLibrary',
97102
label: 'GitHub',

website/i18n/en/docusaurus-plugin-content-docs/current/quickstart/Beginner cookbook.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,26 @@ After this flow works, read these pages in order:
373373
3. [GeneralUpdate.Bowl](../doc/GeneralUpdate.Bowl): crash monitoring, backup, and failure recovery
374374
4. [GeneralUpdate.Tools](./GeneralUpdate.PacketTool): complete guides for patches, hashes, OSS config, and simulation
375375

376-
## Sample repositories
376+
## Installation directory notes
377+
378+
The update process requires read/write access to the application directory. To avoid Windows UAC (User Account Control) prompts, install your application in one of the following non-system-protected directories:
379+
380+
| Recommended directory | Example path |
381+
| --- | --- |
382+
| User AppData (recommended) | `C:\Users\<username>\AppData\Local\<YourApp>\` |
383+
| User home directory | `C:\Users\<username>\<YourApp>\` |
384+
| Custom non-system drive | `D:\<YourApp>\` |
377385

386+
**Not recommended:**
387+
388+
- `C:\Program Files\` — requires administrator privileges to write
389+
- `C:\Program Files (x86)\` — requires administrator privileges to write
390+
- `C:\Windows\` — system directory, write-protected
391+
- System drive root (e.g. `C:\`) — may trigger permission restrictions
392+
393+
> **Tip**: If you encounter "Access Denied" or UAC prompts during updates, check whether the application is installed in a non-recommended directory. Moving the application to a user directory usually resolves the issue.
394+
395+
## Sample repositories
378396
| Repository | URL |
379397
| --- | --- |
380398
| Samples (Server + Hub) | [GeneralUpdate-Samples](https://github.com/GeneralLibrary/GeneralUpdate-Samples) |

website/i18n/en/docusaurus-plugin-content-docs/current/releaselog/GeneralUpdateReleaselog.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ tags: [log]
99

1010
### 📍2026-05-20 — v10.5.0-beta.2
1111

12-
- **GeneralUpdate.Core**: 统一 `GeneralUpdateBootstrap` 入口,合并原 ClientCore Core 能力;新增 `SetSource()` 轻配置入口与 `generalupdate.manifest.json` 极简接入;重构下载子系统为可替换的 5 层模型(Source/Policy/Executor/Pipeline/Orchestrator);扩展点体系增至 10 个可替换接口
13-
- **GeneralUpdate.Bowl**: `BowlContext` 配置 API 稳定;优化 Windows/Linux/macOS ProcDump 集成
14-
- **GeneralUpdate.Differential**: 稳定 `IBinaryDiffer` 抽象;BSDIFF 4.0 + Streaming HDiff 双算法;BZip2 / Deflate 压缩
15-
- **GeneralUpdate.Drivelution**: 稳定跨平台驱动更新流水线;Windows pnputil / Linux insmod-dpkg-rpm / macOS kextload-installer
16-
- **GeneralUpdate.Extension**: 稳定 `IExtensionHost` 抽象;Zip Slip 安全解压;拓扑排序依赖解析
17-
- **文档**: 重构全部 5 个组件文档为统一模板;新增入门实战手册;新增软件外包服务页面
18-
- **Samples**: Hub 示例浏览器 9 个场景覆盖完整更新/OSS/静默/推送/差分/压缩/扩展/Bowl/驱动
12+
- **GeneralUpdate.Core**: Unified `GeneralUpdateBootstrap` entry point, merging original ClientCore and Core capabilities; added `SetSource()` lightweight config entry and `generalupdate.manifest.json` minimal setup; refactored download subsystem into replaceable 5-layer model (Source/Policy/Executor/Pipeline/Orchestrator); extension points increased to 10 replaceable interfaces
13+
- **GeneralUpdate.Bowl**: `BowlContext` configuration API stabilized; optimized Windows/Linux/macOS ProcDump integration
14+
- **GeneralUpdate.Differential**: Stabilized `IBinaryDiffer` abstraction; BSDIFF 4.0 + Streaming HDiff dual algorithm; BZip2 / Deflate compression
15+
- **GeneralUpdate.Drivelution**: Stabilized cross-platform driver update pipeline; Windows pnputil / Linux insmod-dpkg-rpm / macOS kextload-installer
16+
- **GeneralUpdate.Extension**: Stabilized `IExtensionHost` abstraction; Zip Slip safe extraction; topological sort dependency resolution
17+
- **Docs**: Refactored all 5 component docs with unified template; added Beginner cookbook; added software outsourcing service page
18+
- **Samples**: Hub sample browser with 9 scenarios covering full update/OSS/silent/push/differential/compression/extension/Bowl/driver
1919

2020
### 📍2026-04-10
2121

website/i18n/en/docusaurus-theme-classic/navbar.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
"message": "Pricing",
1616
"description": "Navbar item with label 定价"
1717
},
18+
"item.label.联系方式": {
19+
"message": "Contact",
20+
"description": "Navbar item with label 联系方式"
21+
},
1822
"item.label.GitHub": {
1923
"message": "GitHub",
2024
"description": "Navbar item with label GitHub"

0 commit comments

Comments
 (0)