changed.对启动器重构的尝试

This commit is contained in:
lincube
2026-05-28 15:14:37 +08:00
parent 1ef47c780b
commit 313d093257
51 changed files with 4509 additions and 2478 deletions

View File

@@ -0,0 +1,88 @@
# Git 提交分析报告
## 基本信息
- **哈希**: 1ee6e68f33f0a1bbeccf7cef8f3767e65d6916c9
- **短哈希**: 1ee6e68
- **作者**: lincube <lincube3@hotmail.com>
- **时间**: 2026-05-28 10:28:31 +0800
- **合入作者**: Cursor <cursoragent@cursor.com>
## 提交信息摘要
refactor(launcher): converge plugin pending to Host via PluginPackaging
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 32 |
| 新增行数 | 881 |
| 删除行数 | 1917 |
| 净变化 | -1036 |
## 详细变更分析
### 架构变更概述
此提交进行了重要的架构调整将插件待处理pending功能从 Launcher 移到了 Host主程序并引入了新的 PluginPackaging 项目。
### 新增项目
1. **LanMountainDesktop.PluginPackaging** - 新的插件打包项目
- `PendingPluginUpgradeStore.cs` - 待处理插件升级存储
- `PluginPackageInstallOptions.cs` - 插件包安装选项
- `PluginPackageInstallResult.cs` - 插件包安装结果
- `PluginPackageInstaller.cs` - 插件包安装器
- `PluginPackageManifest.cs` - 插件包清单
- `PluginPackageManifestReader.cs` - 插件包清单读取器
- `PluginPackagingConstants.cs` - 插件打包常量
### 删除项目
1. **LanMountainDesktop.PluginUpgradeHelper** - 已删除的插件升级辅助项目
- `Program.cs` - 主程序372行
### 主要删除的文件
1. `FlexibleHostLocator.cs` - 灵活主机定位器634行
2. `UpdateCheckService.cs` - 更新检查服务161行
3. `LauncherClient.cs` - Launcher 客户端210行
4. `CliLauncherUpdateBridge.cs` - CLI Launcher 更新桥接48行
5. `IpcLauncherUpdateBridge.cs` - IPC Launcher 更新桥接171行
### 主要变更的文件
1. `PendingPluginUpgradeService.cs` - 大幅简化
2. `PluginMarketInstallService.cs` - 大幅简化,移除了通过 Launcher 安装的逻辑
3. `PluginRuntimeService.cs` - 新增 `ApplyPendingPluginOperations()` 方法
4. 多个文档文件更新 - 反映架构变更
### 架构变化要点
#### 1. 职责转移
- **之前**Launcher 负责插件待处理安装/升级
- **现在**Host主程序负责在启动时应用待处理插件操作
#### 2. 新的流程
1. 插件市场下载包到用户的待处理队列
2. 下次 Host 启动时,在插件发现前应用待处理操作
3. Launcher 保留 CLI 命令作为维护兼容性入口
#### 3. 新增功能
- `PluginRuntimeService.ApplyPendingPluginOperations()` - 应用待处理插件操作
- `PendingPluginUpgradeService.AddPendingInstallOrUpgrade()` - 添加待处理安装或升级
- 新增 `RestartRequired` 状态到 `AirAppMarketInstallState`
## 代码审查要点
### 优势
1. **架构更清晰**Launcher 专注于版本管理和更新Host 专注于插件运行时
2. **减少权限需求**:插件安装不需要通过 Launcher减少了权限提升的场景
3. **简化代码**:删除了大量桥接代码和复杂的协调逻辑
4. **更好的用户体验**:插件安装在 Host 启动时完成,用户体验更流畅
### 潜在风险
1. **功能回归风险**:删除了大量代码,需要确保所有功能都已正确迁移
2. **兼容性**CLI 命令作为兼容性入口,需要确保仍然正常工作
3. **升级路径**:现有用户的待处理插件队列需要正确迁移
4. **错误处理**Host 启动时的插件安装失败需要妥善处理
### 建议
1. 完整测试插件市场安装/升级流程
2. 测试 CLI 插件命令的兼容性
3. 测试待处理插件操作在 Host 启动时的应用
4. 验证升级路径,确保现有用户平滑过渡
5. 检查错误处理和日志记录是否完善

View File

@@ -0,0 +1,83 @@
# Git 提交分析报告
## 基本信息
- **哈希**: 1ef47c780bea380088d2615e8f4ec7d478ca5aa5
- **短哈希**: 1ef47c7
- **作者**: lincube <lincube3@hotmail.com>
- **时间**: 2026-05-28 11:13:14 +0800
- **合入作者**: Cursor <cursoragent@cursor.com>
## 提交信息摘要
refactor(launcher): add DI, IUpdateEngine facade, and architecture tests
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 31 |
| 新增行数 | 168 |
| 删除行数 | 1512 |
| 净变化 | -1344 |
## 详细变更分析
### 新增文件
1. `LanMountainDesktop.Launcher/Update/IUpdateEngine.cs` - 新增更新引擎接口
2. `LanMountainDesktop.Tests/LauncherArchitectureTests.cs` - 新增架构测试文件
### 删除文件
1. `LanMountainDesktop.Launcher/Services/LauncherFlowCoordinator.cs`
2. `LanMountainDesktop.Launcher/Services/LauncherFlowCoordinator.HostStartupMonitor.cs`
3. `LanMountainDesktop.Launcher/Services/LauncherFlowCoordinator.LaunchOrchestrator.cs`
4. `LanMountainDesktop.Launcher/Services/LauncherFlowCoordinator.UiPresenter.cs`
### 重命名文件
1. `LanMountainDesktop.Launcher/Update/UpdateEngineService.cs``LanMountainDesktop.Launcher/Update/UpdateEngineFacade.cs`
### 主要变更点
#### 1. 依赖注入重构
- 新增 `LanMountainDesktop.Launcher/Shell/LauncherServiceRegistration.cs` - DI 服务注册
- 修改 `LanMountainDesktop.Launcher/Shell/LauncherCompositionRoot.cs` - 组合根
- 更新 `LanMountainDesktop.Launcher/Program.cs` - 入口点调整
#### 2. 更新引擎重构
- 新增 `IUpdateEngine` 接口,定义更新引擎契约
- `UpdateEngineService` 重命名为 `UpdateEngineFacade` 并实现接口
- 将更新相关逻辑从巨大的协调器中解耦
#### 3. 协调器移除
- 删除了 `LauncherFlowCoordinator` 及其分部类(共约 1436 行代码)
- 功能已由 `LauncherOrchestrator` + `LaunchPipeline` 替代
#### 4. 架构测试
- 新增 `LauncherArchitectureTests` 测试:
- 验证 Deployment/Update/Startup/Infrastructure 命名空间不依赖 Avalonia
- 确认 `LauncherFlowCoordinator` 已不存在
#### 5. 命名空间调整
- 多个视图文件的 `using` 语句从 `LanMountainDesktop.Launcher.Services` 改为 `LanMountainDesktop.Launcher.Infrastructure`
#### 6. 文档更新
- 更新 `docs/LAUNCHER.md`,反映新的架构设计
- 移除对 `LauncherFlowCoordinator` 的描述
- 添加对 `LauncherOrchestrator` / `LaunchPipeline` 的说明
- 文档化 `IUpdateEngine` / `UpdateEngineFacade`
## 代码审查要点
### 优势
1. **架构清晰**:通过 DI 和接口解耦,代码结构更清晰
2. **责任分离**:将巨型协调器拆分为多个职责单一的组件
3. **可测试性**:新增架构测试,确保关键架构约束得到执行
4. **文档更新**:同步更新了架构文档
5. **代码简化**:净减少 1344 行代码,去除了冗余
### 潜在风险
1. **大规模删除**:删除了大量代码,需要确保没有遗漏功能
2. **依赖注入引入**:新引入 DI 框架,需要验证服务注册是否完整
3. **接口变更**`UpdateEngineService` 重命名并改为接口实现,需确保所有引用都已更新
### 建议
1. 运行完整的测试套件,特别是启动流程和更新相关测试
2. 进行端到端测试,验证启动流程是否正常工作
3. 检查插件相关功能是否仍然正常(提到了插件 pending 处理)

View File

@@ -0,0 +1,45 @@
# Git 提交分析报告
## 基本信息
- **哈希**: 545dee85a79942a18b18a81a86a53bb700161f9d
- **短哈希**: 545dee8
- **作者**: lincube <lincube3@hotmail.com>
- **时间**: 2026-05-28 10:28:16 +0800
- **合入作者**: Cursor <cursoragent@cursor.com>
## 提交信息摘要
fix(launcher): wire HostStartupMonitor into launch flow
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 1 |
| 新增行数 | 1 |
| 删除行数 | 1 |
| 净变化 | 0 |
## 详细变更分析
### 变更的文件
`LanMountainDesktop.Launcher/Startup/HostStartupMonitor.cs`
### 具体变更
修改了 `HostStartupMonitor` 中的 `Request` 记录的 `ComposeLaunchDetails` 函数签名:
- **之前**`Func<bool, bool, bool, Dictionary<string, string>>`
- **之后**`Func<bool, bool, Dictionary<string, string>>`
移除了第三个布尔参数。
## 代码审查要点
### 优势
1. **简化接口**:减少了不必要的参数
2. **保持兼容性**:这是一个小的调整,不会造成大的影响
### 潜在风险
1. **调用点需要同步更新**:需要确保所有调用 `HostStartupMonitor` 的地方都已同步更新
2. **参数用途不明确**:不清楚移除的参数原本的用途
### 建议
1. 检查所有调用点,确保已同步更新
2. 运行相关测试,确保功能正常

View File

@@ -0,0 +1,98 @@
# Git 提交分析报告
## 基本信息
- **哈希**: a26b6faace509f2ff8806e95fe5891ce4b325fc4
- **短哈希**: a26b6fa
- **作者**: lincube &lt;lincube3@hotmail.com&gt;
- **时间**: 2026-05-28 11:03:49 +0800
- **合入作者**: Cursor &lt;cursoragent@cursor.com&gt;
## 提交信息摘要
refactor(launcher): replace LauncherFlowCoordinator with LaunchPipeline and slim App shell
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 19 |
| 新增行数 | 2517 |
| 删除行数 | 788 |
| 净变化 | +1729 |
## 详细变更分析
### 新增文件
1. `LanMountainDesktop.Launcher/Shell/EntryHandlers/LaunchEntryHandlers.cs` - 启动入口处理器
2. `LanMountainDesktop.Launcher/Shell/EntryHandlers/PreviewEntryHandler.cs` - 预览入口处理器
3. `LanMountainDesktop.Launcher/Shell/LauncherCompositionRoot.cs` - 组合根
4. `LanMountainDesktop.Launcher/Shell/LauncherOrchestrator.cs` - 启动协调器
5. `LanMountainDesktop.Launcher/Startup/ExistingHostProbe.cs` - 现有主机探测
6. `LanMountainDesktop.Launcher/Startup/HostLaunchModels.cs` - 主机启动模型
7. `LanMountainDesktop.Launcher/Startup/HostLaunchService.cs` - 主机启动服务
8. `LanMountainDesktop.Launcher/Startup/LaunchAttemptDetails.cs` - 启动尝试详情
9. `LanMountainDesktop.Launcher/Startup/LaunchPipeline.cs` - 启动管道
10. `LanMountainDesktop.Launcher/Startup/LaunchUiPresenter.cs` - UI 展示器
11. `LanMountainDesktop.Launcher/Startup/Phases/ApplyPendingUpdatePhase.cs` - 应用待更新阶段
12. `LanMountainDesktop.Launcher/Startup/Phases/CleanupDeploymentsPhase.cs` - 清理部署阶段
13. `LanMountainDesktop.Launcher/Startup/Phases/ExistingHostProbePhase.cs` - 现有主机探测阶段
14. `LanMountainDesktop.Launcher/Startup/Phases/LaunchHostPhase.cs` - 启动主机阶段
15. `LanMountainDesktop.Launcher/Startup/Phases/MonitorStartupPhase.cs` - 监控启动阶段
16. `LanMountainDesktop.Launcher/Startup/Phases/OobeGatePhase.cs` - OOBE 关卡阶段
### 主要变更文件
1. `LanMountainDesktop.Launcher/App.axaml.cs` - 大幅精简,移除大量逻辑
### 主要变更点
#### 1. 架构重构
- **移除巨型协调器**:将 `LauncherFlowCoordinator` 的功能拆分到多个职责单一的类中
- **引入管道模式**:新增 `LaunchPipeline` 来管理启动流程
- **阶段化设计**将启动流程拆分为多个独立的阶段Phase
#### 2. 启动阶段设计
新增以下启动阶段:
- `CleanupDeploymentsPhase` - 清理部署
- `ExistingHostProbePhase` - 现有主机探测
- `ApplyPendingUpdatePhase` - 应用待更新
- `OobeGatePhase` - OOBE 关卡
- `LaunchHostPhase` - 启动主机
- `MonitorStartupPhase` - 监控启动
#### 3. 核心组件
- **LauncherOrchestrator** - 负责整体协调
- **LauncherCompositionRoot** - 组合根,负责对象组装
- **HostLaunchService** - 主机启动服务
- **ExistingHostProbe** - 现有主机探测逻辑
- **LaunchUiPresenter** - UI 展示逻辑
#### 4. 入口处理
- 新增 `LaunchEntryHandlers``PreviewEntryHandler`
- 将入口处理逻辑从 `App` 类中移出
#### 5. App 类精简
- `App.axaml.cs` 从 815 行大幅减少
- 逻辑被分散到各个专门的类中
#### 6. 测试更新
- `LauncherAirAppLifecycleServiceTests` 更新以使用新的入口处理器
- `LauncherGlobalUsings.cs` 添加新的命名空间引用
## 代码审查要点
### 优势
1. **职责分离**:每个类职责更加单一清晰
2. **可扩展性**:通过阶段模式,方便添加新的启动阶段
3. **可测试性**:各个组件可以独立测试
4. **代码组织**:文件结构更清晰,便于维护
5. **增量变化**:虽然新增了很多代码,但这是为了更好的架构
### 潜在风险
1. **复杂度增加**:组件数量增多,理解整个流程需要查看更多文件
2. **阶段顺序依赖**:阶段之间有依赖关系,需要确保顺序正确
3. **状态管理**`LaunchContext` 需要在多个阶段之间传递状态,需确保状态一致性
4. **回归风险**:大规模重构可能引入隐藏的 bug
### 建议
1. 为每个阶段编写单元测试
2. 编写集成测试验证完整启动流程
3. 考虑添加流程图文档,帮助理解各阶段关系
4. 进行充分的端到端测试,确保各种启动场景正常工作

View File

@@ -0,0 +1,109 @@
# Git 提交分析报告
## 基本信息
- **哈希**: b219f109ec1c69c21d57be7ac3e03dcd6f981877
- **短哈希**: b219f10
- **作者**: lincube &lt;lincube3@hotmail.com&gt;
- **时间**: 2026-05-28 10:43:30 +0800
- **合入作者**: Cursor &lt;cursoragent@cursor.com&gt;
## 提交信息摘要
refactor(launcher): reorganize into responsibility folders
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 57 |
| 新增行数 | 92 |
| 删除行数 | 197 |
| 净变化 | -105 |
## 详细变更分析
### 主要目录重组
此提交主要是将文件从单一的 `Services` 文件夹重新组织到按职责划分的文件夹中:
#### 1. AirApp 相关
-`Services/AirApp/` 移动到 `AirApp/`
- 涉及文件:
- `AirAppHostLocator.cs`
- `AirAppInstanceKey.cs`
- `IAirAppProcessStarter.cs`
- `LauncherAirAppLifecycleIpcHost.cs`
- `LauncherAirAppLifecycleService.cs`
#### 2. Deployment 相关
-`Services/` 移动到 `Deployment/`
- 涉及文件:
- `DeploymentLocator.cs`
- `HostDiscoveryOptions.cs`
- `HostLaunchPlan.cs`
- `HostResolutionResult.cs`
- `LegacyVersionDetector.cs`
#### 3. Infrastructure 相关
-`Services/` 移动到 `Infrastructure/`
- 涉及文件:
- `Commands.cs`
- `DataLocationResolver.cs`
- `DeferredSplashStageReporter.cs`
- `DotNetRuntimeProbe.cs`
- `ISplashStageReporter.cs`
- `LanguagePreferenceService.cs`
- `LauncherBackgroundService.cs`
- `LauncherDebugSettingsStore.cs`
- `LauncherExecutionContext.cs`
- `Logger.cs`
- `ThemeService.cs`
#### 4. Oobe 相关
-`Services/` 移动到 `Oobe/`
- 涉及文件:
- `DataLocationOobeStep.cs`
- `HostAppSettingsOobeMerger.cs`
- `IOobeStep.cs`
- `LauncherWindowsStartupService.cs`
- `OobeStateService.cs`
- `PrivacyAgreementService.cs`
- `WelcomeOobeStep.cs`
#### 5. Startup 相关
-`Services/` 移动到 `Startup/`
- 涉及文件:
- `StartupAttemptRegistry.cs`
- `StartupDiagnostics.cs`
- `StartupSuccessTracker.cs`
#### 6. Update 相关
-`Services/` 移动到 `Update/`
- 涉及文件:
- `IUpdateProgressReporter.cs`
- `NullUpdateProgressReporter.cs`
- `UpdateCheckService.cs`
- `UpdateEngineService.cs`
### 其他变更
1. 新增 `GlobalUsings.cs` - 添加全局 using 语句
2. 新增 `LauncherGlobalUsings.cs`(测试项目)- 测试项目的全局 using
3. `OobeWindow.axaml.cs` - 更新命名空间引用
4. 多个测试文件更新 - 更新命名空间引用
## 代码审查要点
### 优势
1. **更好的组织结构**:按职责划分文件夹,代码组织更清晰
2. **易于导航**:开发者可以更快找到相关功能的文件
3. **模块化**:每个文件夹代表一个功能模块
4. **可维护性提升**:相关文件放在一起,便于维护
### 潜在风险
1. **合并冲突风险**:大量文件移动可能导致合并冲突
2. **引用更新不完整**:需要确保所有 using 语句和引用都已更新
3. **文档需要同步**:相关文档可能需要更新以反映新的文件结构
4. **Git 历史**:文件移动可能会影响 Git 历史追踪
### 建议
1. 运行完整的编译检查,确保没有遗漏的引用
2. 运行测试套件,确保所有测试通过
3. 检查相关文档是否需要更新
4. 考虑为新的文件夹结构添加 README 说明

View File

@@ -0,0 +1,103 @@
# Git 提交分析报告
## 基本信息
- **哈希**: ebe35d6f91b844dcdf3729d0d894875804749e9a
- **短哈希**: ebe35d6
- **作者**: lincube &lt;lincube3@hotmail.com&gt;
- **时间**: 2026-05-28 10:27:33 +0800
- **合入作者**: Cursor &lt;cursoragent@cursor.com&gt;
## 提交信息摘要
fix(launcher): extract startup subsystem and harden IPC detection
## 变更统计
| 指标 | 数值 |
|------|------|
| 变更文件数 | 14 |
| 新增行数 | 1990 |
| 删除行数 | 1535 |
| 净变化 | +455 |
## 详细变更分析
### 概述
此提交将启动子系统从庞大的 `LauncherFlowCoordinator` 中提取出来,形成独立的、职责更清晰的模块,并加强了 IPC 检测机制。
### 新增文件
#### 1. 启动子系统核心组件
- `HostActivationPolicy.cs` - 主机激活策略
- `HostStartupMonitor.cs` - 主机启动监控器
- `PublicIpcConnection.cs` - 公共 IPC 连接
- `StartupDiagnostics.cs` - 启动诊断
- `StartupSuccessTracker.cs` - 启动成功跟踪器
- `StartupTimeoutPolicy.cs` - 启动超时策略
#### 2. 分部类文件
- `LauncherFlowCoordinator.HostStartupMonitor.cs` - 主机启动监控器分部类
- `LauncherFlowCoordinator.LaunchOrchestrator.cs` - 启动协调器分部类
- `LauncherFlowCoordinator.UiPresenter.cs` - UI 展示器分部类
#### 3. 测试文件
- `HostActivationPolicyTests.cs` - 主机激活策略测试
- `StartupSuccessTrackerTests.cs` - 启动成功跟踪器测试
### 主要变更的文件
- `LauncherFlowCoordinator.cs` - 大幅简化1612行 → 更少)
- `LauncherMultiInstancePolicyTests.cs` - 更新命名空间引用
- `LauncherStartupTimeoutPolicyTests.cs` - 更新测试以引用新文件
### 核心功能改进
#### 1. 提取启动子系统
- 将启动相关逻辑从 `LauncherFlowCoordinator` 中分离
- 形成独立的、可测试的组件
- 每个组件职责单一清晰
#### 2. 主机激活策略 (`HostActivationPolicy`)
- `ShouldProbeExistingHostBeforeLaunch()` - 决定是否在启动前探测现有主机
- `IsExistingHostReadyForLauncherDecision()` - 检查现有主机是否准备好
- `IsRecoverableActivationFailure()` - 判断激活失败是否可恢复
- 退出码分类方法
#### 3. 启动成功跟踪器 (`StartupSuccessTracker`)
- 支持多种启动策略(前台、重启后台、重启托盘)
- 根据不同阶段判断启动成功
- 提供恢复成功状态构建
#### 4. 启动超时策略 (`StartupTimeoutPolicy`)
- 软超时30秒
- 硬超时120秒
- IPC 连接超时配置
- 重试间隔配置
#### 5. 启动诊断 (`StartupDiagnostics`)
- 可通过环境变量 `LMD_LAUNCHER_STARTUP_DIAG=1` 启用
- 记录启动事件到 JSONL 文件
- 追踪 Shell 状态变化
#### 6. 加强 IPC 检测 (`PublicIpcConnection`)
- 带退避的连接尝试
- 更好的错误处理
- 超时控制
## 代码审查要点
### 优势
1. **更好的模块化**:代码组织更清晰,每个组件职责单一
2. **可测试性提升**:提取出的组件都有对应的测试
3. **诊断能力增强**:新增启动诊断功能,便于问题排查
4. **IPC 检测更健壮**:带退避的重试机制,超时配置更精细
5. **代码可读性**:庞大的协调器被拆解,更易理解和维护
### 潜在风险
1. **回归风险**:大规模重构可能引入隐藏的 bug
2. **组件协调**:需要确保新组件之间的交互正确
3. **测试覆盖**:需要确保所有路径都有充分的测试
### 建议
1. 完整测试启动流程,包括各种边缘情况
2. 测试多实例场景
3. 测试重启场景(托盘、后台等)
4. 启用启动诊断,验证诊断功能正常
5. 测试超时场景