diff --git a/LanMountainDesktop.Launcher/Services/Ipc/LauncherCoordinatorIpcServer.cs b/LanMountainDesktop.Launcher/Services/Ipc/LauncherCoordinatorIpcServer.cs index 4a2c08f..7e8b044 100644 --- a/LanMountainDesktop.Launcher/Services/Ipc/LauncherCoordinatorIpcServer.cs +++ b/LanMountainDesktop.Launcher/Services/Ipc/LauncherCoordinatorIpcServer.cs @@ -10,6 +10,9 @@ internal sealed class LauncherCoordinatorIpcServer : IDisposable { private const int LengthPrefixSize = 4; private const int MaxPayloadLength = 1024 * 1024; + private const int BackoffBaseMs = 250; + private const int BackoffMaxMs = 8000; + private const int BackoffJitterMs = 150; private readonly string _pipeName; private readonly Func> _requestHandler; private readonly Action _heartbeatHandler; @@ -78,6 +81,8 @@ internal sealed class LauncherCoordinatorIpcServer : IDisposable private async Task ListenLoopAsync() { + var consecutiveErrors = 0; + while (!_cts.IsCancellationRequested) { NamedPipeServerStream? server = null; @@ -94,6 +99,7 @@ internal sealed class LauncherCoordinatorIpcServer : IDisposable var connectedServer = server; _ = Task.Run(() => HandleConnectionAsync(connectedServer, _cts.Token), _cts.Token); server = null; + consecutiveErrors = 0; } catch (OperationCanceledException) { @@ -101,10 +107,12 @@ internal sealed class LauncherCoordinatorIpcServer : IDisposable } catch (Exception ex) { - Logger.Warn($"Launcher coordinator IPC listener failed: {ex.Message}"); + consecutiveErrors++; + var delay = ComputeBackoff(consecutiveErrors); + Logger.Warn($"Launcher coordinator IPC listener failed (attempt {consecutiveErrors}), retrying in {delay}ms: {ex.Message}"); try { - await Task.Delay(250, _cts.Token).ConfigureAwait(false); + await Task.Delay(delay, _cts.Token).ConfigureAwait(false); } catch (OperationCanceledException) { @@ -118,6 +126,14 @@ internal sealed class LauncherCoordinatorIpcServer : IDisposable } } + private int ComputeBackoff(int attempt) + { + var exponential = BackoffBaseMs * (1 << Math.Min(attempt - 1, 5)); + var capped = Math.Min(exponential, BackoffMaxMs); + var jitter = Random.Shared.Next(0, BackoffJitterMs); + return capped + jitter; + } + private async Task HeartbeatLoopAsync() { while (!_cts.IsCancellationRequested) diff --git a/LanMountainDesktop.Launcher/Services/Ipc/LauncherIpcServer.cs b/LanMountainDesktop.Launcher/Services/Ipc/LauncherIpcServer.cs index ddc5d8a..2d4e447 100644 --- a/LanMountainDesktop.Launcher/Services/Ipc/LauncherIpcServer.cs +++ b/LanMountainDesktop.Launcher/Services/Ipc/LauncherIpcServer.cs @@ -19,10 +19,14 @@ public class LauncherIpcServer : IDisposable /// /// 协议:每条消息以 4 字节小端 int32 长度前缀开头,后跟 UTF-8 JSON 正文。 - /// 这在 Windows Message 模式和 Unix Byte 模式下均能可靠工作。 + /// 这在 Windows Message 模式和 unix Byte 模式下均能可靠工作。 /// private const int LengthPrefixSize = 4; + private const int BackoffBaseMs = 200; + private const int BackoffMaxMs = 5000; + private const int BackoffJitterMs = 100; + public LauncherIpcServer(Action onProgress) { _onProgress = onProgress; @@ -38,6 +42,8 @@ public class LauncherIpcServer : IDisposable private async Task ListenLoopAsync() { + var consecutiveErrors = 0; + while (!_cts.Token.IsCancellationRequested) { NamedPipeServerStream? pipe = null; @@ -47,12 +53,14 @@ public class LauncherIpcServer : IDisposable LauncherIpcConstants.PipeName, PipeDirection.In, 1, - PipeTransmissionMode.Byte); + PipeTransmissionMode.Byte, + PipeOptions.Asynchronous); _currentPipe = pipe; await pipe.WaitForConnectionAsync(_cts.Token); - // 持久连接:在同一连接上循环读取多条消息,直到客户端断开 + consecutiveErrors = 0; + await ReadMessagesFromConnectionAsync(pipe, _cts.Token); } catch (OperationCanceledException) @@ -61,7 +69,7 @@ public class LauncherIpcServer : IDisposable } catch (IOException) { - // 客户端断开连接,继续等待新连接 + consecutiveErrors = 0; continue; } catch (ObjectDisposedException) @@ -70,10 +78,12 @@ public class LauncherIpcServer : IDisposable } catch (Exception ex) { - Console.Error.WriteLine($"IPC listen error: {ex.Message}"); + consecutiveErrors++; + var delay = ComputeBackoff(consecutiveErrors); + Console.Error.WriteLine($"IPC listen error (attempt {consecutiveErrors}), retrying in {delay}ms: {ex.Message}"); try { - await Task.Delay(200, _cts.Token); + await Task.Delay(delay, _cts.Token); } catch (OperationCanceledException) { @@ -96,6 +106,14 @@ public class LauncherIpcServer : IDisposable } } + private int ComputeBackoff(int attempt) + { + var exponential = BackoffBaseMs * (1 << Math.Min(attempt - 1, 5)); + var capped = Math.Min(exponential, BackoffMaxMs); + var jitter = Random.Shared.Next(0, BackoffJitterMs); + return capped + jitter; + } + /// /// 从已连接的管道中持续读取消息,直到连接断开或取消 /// diff --git a/LanMountainDesktop.Shared.IPC/LanMountainDesktopIpcClient.cs b/LanMountainDesktop.Shared.IPC/LanMountainDesktopIpcClient.cs index 97427cd..5f1519e 100644 --- a/LanMountainDesktop.Shared.IPC/LanMountainDesktopIpcClient.cs +++ b/LanMountainDesktop.Shared.IPC/LanMountainDesktopIpcClient.cs @@ -6,7 +6,11 @@ namespace LanMountainDesktop.Shared.IPC; public sealed class LanMountainDesktopIpcClient : IDisposable { + private const int ConnectRetryCount = 3; + private const int ConnectRetryBaseDelayMs = 500; + private bool _started; + private bool _disposed; public LanMountainDesktopIpcClient(string? clientPipeName = null) { @@ -27,6 +31,21 @@ public sealed class LanMountainDesktopIpcClient : IDisposable public async Task ConnectAsync(string pipeName = IpcConstants.DefaultPipeName) { EnsureStarted(); + + for (var attempt = 1; attempt <= ConnectRetryCount; attempt++) + { + try + { + Peer = await Provider.GetAndConnectToPeerAsync(pipeName).ConfigureAwait(false); + return; + } + catch (Exception ex) when (attempt < ConnectRetryCount) + { + var delay = ConnectRetryBaseDelayMs * attempt + Random.Shared.Next(0, 200); + await Task.Delay(delay).ConfigureAwait(false); + } + } + Peer = await Provider.GetAndConnectToPeerAsync(pipeName).ConfigureAwait(false); } @@ -91,6 +110,13 @@ public sealed class LanMountainDesktopIpcClient : IDisposable public void Dispose() { + if (_disposed) + { + return; + } + + _disposed = true; + Peer = null; Provider.Dispose(); } } diff --git a/LanMountainDesktop.Shared.IPC/PublicIpcHostService.cs b/LanMountainDesktop.Shared.IPC/PublicIpcHostService.cs index 09c395a..0b16439 100644 --- a/LanMountainDesktop.Shared.IPC/PublicIpcHostService.cs +++ b/LanMountainDesktop.Shared.IPC/PublicIpcHostService.cs @@ -20,6 +20,7 @@ public sealed class PublicIpcHostService : IDisposable, IExternalIpcNotification private readonly ConcurrentDictionary _connectedPeers = new(StringComparer.OrdinalIgnoreCase); private readonly object _gate = new(); private bool _started; + private bool _disposed; public PublicIpcHostService(string pipeName = IpcConstants.DefaultPipeName) { @@ -190,12 +191,26 @@ public sealed class PublicIpcHostService : IDisposable, IExternalIpcNotification public void Dispose() { + if (_disposed) + { + return; + } + + _disposed = true; + + _connectedPeers.Clear(); + Provider.PeerConnected -= OnPeerConnected; Provider.Dispose(); } private void OnPeerConnected(object? sender, PeerConnectedArgs e) { + if (_disposed) + { + return; + } + var peer = e.Peer; _connectedPeers[peer.PeerName] = peer; peer.PeerConnectionBroken -= OnPeerConnectionBroken; diff --git a/LanMountainDesktop/Services/Launcher/LauncherIpcClient.cs b/LanMountainDesktop/Services/Launcher/LauncherIpcClient.cs index 983a0f7..e1fa740 100644 --- a/LanMountainDesktop/Services/Launcher/LauncherIpcClient.cs +++ b/LanMountainDesktop/Services/Launcher/LauncherIpcClient.cs @@ -17,6 +17,9 @@ public class LauncherIpcClient : IDisposable }; private const int LengthPrefixSize = 4; + private const int ConnectTimeoutMs = 5000; + private const int ConnectRetryCount = 3; + private const int ConnectRetryBaseDelayMs = 300; private NamedPipeClientStream? _pipeClient; private bool _isConnected; @@ -26,26 +29,69 @@ public class LauncherIpcClient : IDisposable public async Task ConnectAsync(CancellationToken cancellationToken = default) { - try + for (var attempt = 1; attempt <= ConnectRetryCount; attempt++) { - _pipeClient = new NamedPipeClientStream( - ".", - LauncherIpcConstants.PipeName, - PipeDirection.Out); + try + { + var client = new NamedPipeClientStream( + ".", + LauncherIpcConstants.PipeName, + PipeDirection.Out, + PipeOptions.Asynchronous); - await _pipeClient.ConnectAsync(5000, cancellationToken); - _isConnected = true; - return true; - } - catch (TimeoutException) - { - return false; - } - catch (Exception ex) - { - AppLogger.Warn("LauncherIpc", $"Failed to connect to Launcher IPC: {ex.Message}"); - return false; + await client.ConnectAsync(ConnectTimeoutMs, cancellationToken); + _pipeClient = client; + _isConnected = true; + return true; + } + catch (TimeoutException) + { + _pipeClient?.Dispose(); + _pipeClient = null; + + if (attempt < ConnectRetryCount) + { + var delay = ConnectRetryBaseDelayMs * attempt + Random.Shared.Next(0, 100); + try + { + await Task.Delay(delay, cancellationToken); + } + catch (OperationCanceledException) + { + return false; + } + } + } + catch (OperationCanceledException) + { + return false; + } + catch (Exception ex) + { + _pipeClient?.Dispose(); + _pipeClient = null; + + if (attempt < ConnectRetryCount) + { + AppLogger.Warn("LauncherIpc", $"Connect attempt {attempt} failed: {ex.Message}, retrying..."); + var delay = ConnectRetryBaseDelayMs * attempt + Random.Shared.Next(0, 100); + try + { + await Task.Delay(delay, cancellationToken); + } + catch (OperationCanceledException) + { + return false; + } + } + else + { + AppLogger.Warn("LauncherIpc", $"Failed to connect to Launcher IPC after {ConnectRetryCount} attempts: {ex.Message}"); + } + } } + + return false; } public async Task ReportProgressAsync(StartupProgressMessage message) @@ -62,14 +108,19 @@ public class LauncherIpcClient : IDisposable var lengthPrefix = BitConverter.GetBytes(payload.Length); Debug.Assert(lengthPrefix.Length == LengthPrefixSize); - lock (_writeLock) + var buffer = ArrayPool.Shared.Rent(LengthPrefixSize + payload.Length); + try { - _pipeClient.Write(lengthPrefix, 0, LengthPrefixSize); - _pipeClient.Write(payload, 0, payload.Length); - _pipeClient.Flush(); - } + Buffer.BlockCopy(lengthPrefix, 0, buffer, 0, LengthPrefixSize); + Buffer.BlockCopy(payload, 0, buffer, LengthPrefixSize, payload.Length); - await Task.CompletedTask; + await _pipeClient.WriteAsync(buffer.AsMemory(0, LengthPrefixSize + payload.Length)).ConfigureAwait(false); + await _pipeClient.FlushAsync().ConfigureAwait(false); + } + finally + { + ArrayPool.Shared.Return(buffer); + } } catch (IOException) { diff --git a/docs/auto_commit_md/20250427_bd2313f.md b/docs/auto_commit_md/20250427_bd2313f.md new file mode 100644 index 0000000..4090306 --- /dev/null +++ b/docs/auto_commit_md/20250427_bd2313f.md @@ -0,0 +1,39 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | bd2313fe7e5f21eed0dfbe75e1ce067d29f9e1be | +| **父提交** | 372b5b7adce4942e4c470c00482acdc8b31a0d05 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-27 16:54:17 (+08:00) | +| **提交信息** | 0.7.9.1 | + +## 提交信息分析 + +这是一个版本号提交,标记了 **0.7.9.1** 版本。通常这类提交表示: +- 版本发布或版本号更新 +- 可能是补丁版本(patch version)的发布 + +## 变更概览 + +由于无法直接获取 diff 信息,建议通过以下命令查看详细变更: + +```bash +git show bd2313fe7e5f21eed0dfbe75e1ce067d29f9e1be +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 备注 + +此提交为版本标记提交,具体变更内容需要查看完整的 diff 输出。 diff --git a/docs/auto_commit_md/20250428_148e4c8.md b/docs/auto_commit_md/20250428_148e4c8.md new file mode 100644 index 0000000..76dc8bc --- /dev/null +++ b/docs/auto_commit_md/20250428_148e4c8.md @@ -0,0 +1,36 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 148e4c894a3e3df7e4c94ac867bb284710774b27 | +| **父提交** | f84111e837289993891b6e2feb57c080b9f60f38 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-28 16:48:51 (+08:00) | +| **提交信息** | 0.8.0 | + +## 提交信息分析 + +**0.8.0** 版本发布,这是一个次要版本更新(Minor Version),通常包含: +- 新功能的添加 +- 向后兼容的 API 变更 +- 重要的改进或重构 + +## 变更概览 + +建议查看详细变更: + +```bash +git show 148e4c894a3e3df7e4c94ac867bb284710774b27 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250428_2dc729c.md b/docs/auto_commit_md/20250428_2dc729c.md new file mode 100644 index 0000000..74c7ba7 --- /dev/null +++ b/docs/auto_commit_md/20250428_2dc729c.md @@ -0,0 +1,33 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 2dc729c9db37026cc5c6824abd9335a7623efa60 | +| **父提交** | 5804627f53e4b1c9f98b83ec3d5645df4513c4ac | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-29 01:23:09 (+08:00) | +| **提交信息** | 0.8.0.2 | + +## 提交信息分析 + +**0.8.0.2** 版本发布,0.8.0 系列的第二个补丁版本。 + +## 变更概览 + +建议查看详细变更: + +```bash +git show 2dc729c9db37026cc5c6824abd9335a7623efa60 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250428_5804627.md b/docs/auto_commit_md/20250428_5804627.md new file mode 100644 index 0000000..dc4e3fe --- /dev/null +++ b/docs/auto_commit_md/20250428_5804627.md @@ -0,0 +1,33 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 5804627f53e4b1c9f98b83ec3d5645df4513c4ac | +| **父提交** | 7a268489c95cf8eac0f71e8c41c1659bd57d324b | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-28 21:48:39 (+08:00) | +| **提交信息** | 0.8.0.1 | + +## 提交信息分析 + +**0.8.0.1** 版本发布,这是 0.8.0 的第一个补丁版本,通常包含 bug 修复或小改进。 + +## 变更概览 + +建议查看详细变更: + +```bash +git show 5804627f53e4b1c9f98b83ec3d5645df4513c4ac +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250428_7a26848.md b/docs/auto_commit_md/20250428_7a26848.md new file mode 100644 index 0000000..6638763 --- /dev/null +++ b/docs/auto_commit_md/20250428_7a26848.md @@ -0,0 +1,44 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 7a268489c95cf8eac0f71e8c41c1659bd57d324b | +| **父提交** | 148e4c894a3e3df7e4c94ac867bb284710774b27 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-28 17:54:45 (+08:00) | +| **提交信息** | ci.圆角 | + +## 提交信息分析 + +**ci.圆角** - 这个提交涉及持续集成(CI)相关的"圆角"(Corner Radius)样式调整。 + +根据项目文档 `CORNER_RADIUS_SPEC.md`,这可能是: +- 统一组件圆角样式 +- 修复圆角相关的 UI 问题 +- 更新 CI 流程中的样式检查 + +## 变更概览 + +建议查看详细变更: + +```bash +git show 7a268489c95cf8eac0f71e8c41c1659bd57d324b +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [x] 代码重构 (Refactoring) +- [x] CI/CD 相关 (CI/CD) +- [ ] 其他 (Other) + +## 相关文档 + +- [圆角规范](file:///d:/github/LanMountainDesktop/docs/CORNER_RADIUS_SPEC.md) +- [视觉规范](file:///d:/github/LanMountainDesktop/docs/VISUAL_SPEC.md) diff --git a/docs/auto_commit_md/20250428_f84111e.md b/docs/auto_commit_md/20250428_f84111e.md new file mode 100644 index 0000000..45ef6c6 --- /dev/null +++ b/docs/auto_commit_md/20250428_f84111e.md @@ -0,0 +1,33 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | f84111e837289993891b6e2feb57c080b9f60f38 | +| **父提交** | bd2313fe7e5f21eed0dfbe75e1ce067d29f9e1be | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-28 03:40:10 (+08:00) | +| **提交信息** | 0.7.9.2 | + +## 提交信息分析 + +版本号更新至 **0.7.9.2**,这是 0.7.9.x 系列的第二个补丁版本。 + +## 变更概览 + +建议查看详细变更: + +```bash +git show f84111e837289993891b6e2feb57c080b9f60f38 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250429_3b810fd.md b/docs/auto_commit_md/20250429_3b810fd.md new file mode 100644 index 0000000..1d8b7ee --- /dev/null +++ b/docs/auto_commit_md/20250429_3b810fd.md @@ -0,0 +1,31 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 3b810fd0ba3900a20c998ae76e7bc70421f8695e | +| **父提交** | 9045624105b0db070aea384b0480ca46586be0a1 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-29 19:23:15 (+08:00) | +| **提交信息** | 0.8.0.4 | + +## 提交信息分析 + +**0.8.0.4** 版本发布,0.8.0 系列的第四个补丁版本。 + +## 变更概览 + +```bash +git show 3b810fd0ba3900a20c998ae76e7bc70421f8695e +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250429_9045624.md b/docs/auto_commit_md/20250429_9045624.md new file mode 100644 index 0000000..d9bd1c3 --- /dev/null +++ b/docs/auto_commit_md/20250429_9045624.md @@ -0,0 +1,31 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 9045624105b0db070aea384b0480ca46586be0a1 | +| **父提交** | 2dc729c9db37026cc5c6824abd9335a7623efa60 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-29 02:36:53 (+08:00) | +| **提交信息** | 0.8.0.3 | + +## 提交信息分析 + +**0.8.0.3** 版本发布,0.8.0 系列的第三个补丁版本。 + +## 变更概览 + +```bash +git show 9045624105b0db070aea384b0480ca46586be0a1 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250429_d054257.md b/docs/auto_commit_md/20250429_d054257.md new file mode 100644 index 0000000..0b60e94 --- /dev/null +++ b/docs/auto_commit_md/20250429_d054257.md @@ -0,0 +1,31 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | d054257db2dad55f4e6861b65c5fd4c2c05305b6 | +| **父提交** | f50cfed3cc259667632f4f379ccd365ad4822e96 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-29 22:14:50 (+08:00) | +| **提交信息** | 0.8.0.41 | + +## 提交信息分析 + +**0.8.0.41** 版本发布,这是一个非标准的版本号,可能是内部测试版本或预发布版本。 + +## 变更概览 + +```bash +git show d054257db2dad55f4e6861b65c5fd4c2c05305b6 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250429_f50cfed.md b/docs/auto_commit_md/20250429_f50cfed.md new file mode 100644 index 0000000..1fd8ca3 --- /dev/null +++ b/docs/auto_commit_md/20250429_f50cfed.md @@ -0,0 +1,31 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | f50cfed3cc259667632f4f379ccd365ad4822e96 | +| **父提交** | 3b810fd0ba3900a20c998ae76e7bc70421f8695e | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-29 21:54:07 (+08:00) | +| **提交信息** | 0.8.0.5 | + +## 提交信息分析 + +**0.8.0.5** 版本发布,0.8.0 系列的第五个补丁版本。 + +## 变更概览 + +```bash +git show f50cfed3cc259667632f4f379ccd365ad4822e96 +``` + +## 提交类型 + +- [x] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250430_2272d35.md b/docs/auto_commit_md/20250430_2272d35.md new file mode 100644 index 0000000..8a893d3 --- /dev/null +++ b/docs/auto_commit_md/20250430_2272d35.md @@ -0,0 +1,39 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 2272d35c16ae1d7e77e398d8020124655e0cd553 | +| **父提交** | d054257db2dad55f4e6861b65c5fd4c2c05305b6 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-04-30 08:10:55 (+08:00) | +| **提交信息** | Revert "0.8.0.41" | + +## 提交信息分析 + +这是一个 **Revert** 提交,回退了之前的 "0.8.0.41" 版本提交。通常这意味着: +- 0.8.0.41 版本存在问题 +- 需要撤销该版本的变更 +- 恢复到之前的稳定状态 + +## 变更概览 + +```bash +git show 2272d35c16ae1d7e77e398d8020124655e0cd553 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [x] 回退 (Revert) +- [ ] 其他 (Other) + +## 相关提交 + +- 被回退的提交: [d054257](file:///d:/github/LanMountainDesktop/docs/auto_commit_md/20250429_d054257.md) diff --git a/docs/auto_commit_md/20250501_88bd92e.md b/docs/auto_commit_md/20250501_88bd92e.md new file mode 100644 index 0000000..cbfbb7b --- /dev/null +++ b/docs/auto_commit_md/20250501_88bd92e.md @@ -0,0 +1,41 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 88bd92e40adfafb30c495724073683f5c1781812 | +| **父提交** | ff014717face0c8dc2f1f80b47a4dc85daa1b6a8 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-01 19:52:06 (+08:00) | +| **提交信息** | fead.Hub组件支持双击打开图片,支持三指翻页退出应用 | + +## 提交信息分析 + +**功能增强提交**:为智教 Hub 组件添加了新的交互功能: +- **双击打开图片** - 支持双击图片进行查看 +- **三指翻页退出应用** - 添加手势操作支持 + +这些改进提升了用户体验和组件的交互性。 + +## 变更概览 + +```bash +git show 88bd92e40adfafb30c495724073683f5c1781812 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及功能 + +- 图片查看功能 +- 触摸手势支持 +- 应用退出操作 diff --git a/docs/auto_commit_md/20250501_964cef2.md b/docs/auto_commit_md/20250501_964cef2.md new file mode 100644 index 0000000..c8ccf63 --- /dev/null +++ b/docs/auto_commit_md/20250501_964cef2.md @@ -0,0 +1,41 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 964cef27eea604b6ca8d4608cef934e0fac77eba | +| **父提交** | 2272d35c16ae1d7e77e398d8020124655e0cd553 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-01 10:34:58 (+08:00) | +| **提交信息** | 通知系统,自习系统,反正做了很多 | + +## 提交信息分析 + +这是一个**功能开发提交**,包含多个重要功能: +- **通知系统** - 实现了应用内通知功能 +- **自习系统** - 添加了自习/学习相关的功能模块 +- 其他多项改进 + +这是一个较大的功能提交,涉及多个子系统的开发。 + +## 变更概览 + +```bash +git show 964cef27eea604b6ca8d4608cef934e0fac77eba +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及模块 + +- 通知系统 (Notification System) +- 自习系统 (Study System) diff --git a/docs/auto_commit_md/20250501_ff01471.md b/docs/auto_commit_md/20250501_ff01471.md new file mode 100644 index 0000000..3d06875 --- /dev/null +++ b/docs/auto_commit_md/20250501_ff01471.md @@ -0,0 +1,38 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | ff014717face0c8dc2f1f80b47a4dc85daa1b6a8 | +| **父提交** | 964cef27eea604b6ca8d4608cef934e0fac77eba | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-01 14:04:59 (+08:00) | +| **提交信息** | fix.修智教hub组件 | + +## 提交信息分析 + +**Bug 修复提交**:修复了"智教 Hub"组件的问题。 + +智教 Hub 是项目中的一个重要组件,根据 `ZHIJIAO_HUB_COMPONENT_FINAL.md` 文档,这是一个集成教育资源的桌面组件。 + +## 变更概览 + +```bash +git show ff014717face0c8dc2f1f80b47a4dc85daa1b6a8 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 相关文档 + +- [智教 Hub 组件总结](file:///d:/github/LanMountainDesktop/docs/ZHIJIAO_HUB_COMPONENT_SUMMARY.md) +- [智教 Hub 组件最终文档](file:///d:/github/LanMountainDesktop/docs/ZHIJIAO_HUB_COMPONENT_FINAL.md) diff --git a/docs/auto_commit_md/20250502_00339f0.md b/docs/auto_commit_md/20250502_00339f0.md new file mode 100644 index 0000000..a9b25ff --- /dev/null +++ b/docs/auto_commit_md/20250502_00339f0.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `00339f0ed0f771d2f5fb09992d6ca75457e824b4` | +| 短 Hash | `00339f0` | +| 作者 | lincube | +| 时间 | 2025-05-02 12:15:35 (+0800) | +| 父 Commit | `021c7ff2458026adf186c2f0f774de03bc1c1622` | + +## 提交信息 + +``` +fix.修Rinshub,怎么不是色色就是逆天 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | Rinshub 组件 | + +## 变更概览 + +本次提交修复了 Rinshub 组件的问题。从提交信息中的描述可以看出,该组件可能涉及内容过滤或展示相关的问题。 + +## 关联提交 + +- 前序提交: `021c7ff` - fix.还是在修智教Hub组件 +- 后续提交: `5d2449f` - fead.加入jiangtokoto数据源 + +## 备注 + +- 提交信息带有开发者个人风格 +- 属于组件内容修复类提交 diff --git a/docs/auto_commit_md/20250502_021c7ff.md b/docs/auto_commit_md/20250502_021c7ff.md new file mode 100644 index 0000000..f16fb01 --- /dev/null +++ b/docs/auto_commit_md/20250502_021c7ff.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `021c7ff2458026adf186c2f0f774de03bc1c1622` | +| 短 Hash | `021c7ff` | +| 作者 | lincube | +| 时间 | 2025-05-02 11:27:38 (+0800) | +| 父 Commit | `675096b6c4acf3b4b3f19d57aca773146b070f1e` | + +## 提交信息 + +``` +fix.还是在修智教Hub组件 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 智教Hub组件 | + +## 变更概览 + +本次提交针对智教Hub组件进行修复,属于连续修复工作的一部分。从提交历史来看,这是对智教Hub组件的多次修复尝试之一,表明该组件可能存在较复杂的问题需要反复调整。 + +## 关联提交 + +- 前序修复: `ff01471` - fix.修智教hub组件 +- 后续修复: `00339f0` - fix.修Rinshub + +## 备注 + +- 提交信息使用了中文描述,符合项目规范 +- 属于组件稳定性修复系列提交 diff --git a/docs/auto_commit_md/20250502_12a2f67.md b/docs/auto_commit_md/20250502_12a2f67.md new file mode 100644 index 0000000..40c1108 --- /dev/null +++ b/docs/auto_commit_md/20250502_12a2f67.md @@ -0,0 +1,39 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `12a2f6729b5de17a78f26f87250e0265fb103b73` | +| 短 Hash | `12a2f67` | +| 作者 | lincube | +| 时间 | 2025-05-02 16:48:51 (+0800) | +| 父 Commit | `5d2449fa8fab2f58d7d23ba23630271f6f57223b` | + +## 提交信息 + +``` +fead.文件管理组件加入 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` (拼写为 fead) - 新功能 | +| 影响范围 | 文件管理组件 | + +## 变更概览 + +本次提交引入了全新的文件管理组件。这是一个重要的功能模块添加,为用户提供文件浏览和管理能力。 + +## 关联提交 + +- 前序提交: `5d2449f` - fead.加入jiangtokoto数据源 +- 后续提交: `0662565` - fead.为文件管理组件添加了跨平台的支持 + +## 备注 + +- 提交类型拼写为 `fead`,实际应为 `feat` +- 属于核心功能组件开发 +- 后续提交进一步完善了跨平台支持 diff --git a/docs/auto_commit_md/20250502_1c3cc76.md b/docs/auto_commit_md/20250502_1c3cc76.md new file mode 100644 index 0000000..d113e21 --- /dev/null +++ b/docs/auto_commit_md/20250502_1c3cc76.md @@ -0,0 +1,40 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 1c3cc76f2144f4b82ea507693820c55ffda1b4a5 | +| **父提交** | 44b87ba12ed658905bf80a0bb9d6d8b35b81b601 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-02 12:54:20 (+08:00) | +| **提交信息** | fead.做了状态栏文字组件,支持了位置放置。 | + +## 提交信息分析 + +**功能新增提交**: +- 开发了状态栏文字组件 +- 支持位置放置功能 + +这是桌面组件系统的一部分,提供了状态栏显示能力。 + +## 变更概览 + +```bash +git show 1c3cc76f2144f4b82ea507693820c55ffda1b4a5 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及功能 + +- 状态栏组件 (Status Bar Component) +- 位置放置系统 (Placement System) diff --git a/docs/auto_commit_md/20250502_35976c3.md b/docs/auto_commit_md/20250502_35976c3.md new file mode 100644 index 0000000..9391b1c --- /dev/null +++ b/docs/auto_commit_md/20250502_35976c3.md @@ -0,0 +1,35 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 35976c3f3df0320014bf3ec6c2d32b13cd6b0213 | +| **父提交** | 88bd92e40adfafb30c495724073683f5c1781812 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-02 00:57:47 (+08:00) | +| **提交信息** | fead.做桌面组件ing,智教hub加了rinshub | + +## 提交信息分析 + +**功能开发中提交**: +- 正在开发桌面组件系统 +- 为智教 Hub 添加了 Rinshub 数据源/功能 + +这是一个进行中的功能开发提交。 + +## 变更概览 + +```bash +git show 35976c3f3df0320014bf3ec6c2d32b13cd6b0213 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) diff --git a/docs/auto_commit_md/20250502_44b87ba.md b/docs/auto_commit_md/20250502_44b87ba.md new file mode 100644 index 0000000..f58d032 --- /dev/null +++ b/docs/auto_commit_md/20250502_44b87ba.md @@ -0,0 +1,37 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 44b87ba12ed658905bf80a0bb9d6d8b35b81b601 | +| **父提交** | 35976c3f3df0320014bf3ec6c2d32b13cd6b0213 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-02 11:22:00 (+08:00) | +| **提交信息** | fead.桌面组件 | + +## 提交信息分析 + +**功能新增提交**:桌面组件系统开发。 + +根据项目架构,桌面组件系统是核心功能之一,位于 `ComponentSystem/` 目录。 + +## 变更概览 + +```bash +git show 44b87ba12ed658905bf80a0bb9d6d8b35b81b601 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 相关目录 + +- [ComponentSystem](file:///d:/github/LanMountainDesktop/LanMountainDesktop/ComponentSystem) diff --git a/docs/auto_commit_md/20250502_5d2449f.md b/docs/auto_commit_md/20250502_5d2449f.md new file mode 100644 index 0000000..5beb3b1 --- /dev/null +++ b/docs/auto_commit_md/20250502_5d2449f.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `5d2449fa8fab2f58d7d23ba23630271f6f57223b` | +| 短 Hash | `5d2449f` | +| 作者 | lincube | +| 时间 | 2025-05-02 15:33:26 (+0800) | +| 父 Commit | `00339f0ed0f771d2f5fb09992d6ca75457e824b4` | + +## 提交信息 + +``` +fead.加入jiangtokoto数据源 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` (拼写为 fead) - 新功能 | +| 影响范围 | 数据源集成 | + +## 变更概览 + +本次提交新增了 jiangtokoto 数据源的集成支持。这是扩展应用内容来源的重要更新,为用户提供更多数据内容选择。 + +## 关联提交 + +- 前序提交: `00339f0` - fix.修Rinshub +- 后续提交: `12a2f67` - fead.文件管理组件加入 + +## 备注 + +- 提交类型拼写为 `fead`,实际应为 `feat` +- 属于数据源扩展类功能 diff --git a/docs/auto_commit_md/20250502_675096b.md b/docs/auto_commit_md/20250502_675096b.md new file mode 100644 index 0000000..ea68ba8 --- /dev/null +++ b/docs/auto_commit_md/20250502_675096b.md @@ -0,0 +1,38 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 675096b6c4acf3b4b3f19d57aca773146b070f1e | +| **父提交** | 1c3cc76f2144f4b82ea507693820c55ffda1b4a5 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-02 21:05:15 (+08:00) | +| **提交信息** | fead.做了状态栏加了更多的胶囊组件。然后我稍微修了一下智教Hub组件 | + +## 提交信息分析 + +**功能新增 + Bug 修复提交**: +- 状态栏添加了更多胶囊组件(Capsule Components) +- 修复了智教 Hub 组件的问题 + +## 变更概览 + +```bash +git show 675096b6c4acf3b4b3f19d57aca773146b070f1e +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及功能 + +- 胶囊组件 (Capsule Components) +- 智教 Hub 组件修复 diff --git a/docs/auto_commit_md/20250503_0662565.md b/docs/auto_commit_md/20250503_0662565.md new file mode 100644 index 0000000..0d22927 --- /dev/null +++ b/docs/auto_commit_md/20250503_0662565.md @@ -0,0 +1,39 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0662565dca6241e36ece52fbb3708e640fb37291` | +| 短 Hash | `0662565` | +| 作者 | lincube | +| 时间 | 2025-05-03 23:22:07 (+0800) | +| 父 Commit | `12a2f6729b5de17a78f26f87250e0265fb103b73` | + +## 提交信息 + +``` +fead.为文件管理组件添加了跨平台的支持 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` (拼写为 fead) - 新功能 | +| 影响范围 | 文件管理组件跨平台支持 | + +## 变更概览 + +本次提交为文件管理组件添加了跨平台支持能力。这是确保组件在不同操作系统(Windows、Linux、macOS)上正常运行的重要改进。 + +## 关联提交 + +- 前序提交: `12a2f67` - fead.文件管理组件加入 +- 后续提交: `5fa2031` - fead.消息盒子组件 + +## 备注 + +- 提交类型拼写为 `fead`,实际应为 `feat` +- 属于跨平台兼容性改进 +- 体现了项目对多平台支持的重视 diff --git a/docs/auto_commit_md/20250505_5fa2031.md b/docs/auto_commit_md/20250505_5fa2031.md new file mode 100644 index 0000000..2f09b96 --- /dev/null +++ b/docs/auto_commit_md/20250505_5fa2031.md @@ -0,0 +1,39 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `5fa2031ad6107a3e6ad8b16ce0a3351fd4737bed` | +| 短 Hash | `5fa2031` | +| 作者 | lincube | +| 时间 | 2025-05-05 09:29:33 (+0800) | +| 父 Commit | `0662565dca6241e36ece52fbb3708e640fb37291` | + +## 提交信息 + +``` +fead.消息盒子组件 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` (拼写为 fead) - 新功能 | +| 影响范围 | 消息盒子组件 | + +## 变更概览 + +本次提交新增了消息盒子组件。这是一个用于显示通知、提示信息的UI组件,为用户提供系统消息和交互反馈的展示能力。 + +## 关联提交 + +- 前序提交: `0662565` - fead.为文件管理组件添加了跨平台的支持 +- 后续提交: `e1d5a0c` - fead.添加了电源菜单 + +## 备注 + +- 提交类型拼写为 `fead`,实际应为 `feat` +- 属于UI组件开发 +- 消息盒子是桌面应用常见的交互组件 diff --git a/docs/auto_commit_md/20250505_8583465.md b/docs/auto_commit_md/20250505_8583465.md new file mode 100644 index 0000000..7fa0534 --- /dev/null +++ b/docs/auto_commit_md/20250505_8583465.md @@ -0,0 +1,47 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 8583465a679e0e7547317a40e2db8802dbcfb3f2 | +| **父提交** | e1d5a0c6def8ef768806722db5530252bc36d40e | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-05 11:35:10 (+08:00) | +| **提交信息** | fead.圆角,终于统一 | + +## 提交信息分析 + +**重要样式统一提交**:完成了圆角样式的统一工作。 + +根据项目文档 `CORNER_RADIUS_SPEC.md` 和 `AGENTS.md`,圆角统一是项目的重要规范: +- 桌面组件根容器必须使用 `{DynamicResource DesignCornerRadiusComponent}` +- 内部元素根据嵌套层级使用 `DesignCornerRadiusSm/Md/Lg` 等 Token +- 严禁硬编码像素值 + +## 变更概览 + +```bash +git show 8583465a679e0e7547317a40e2db8802dbcfb3f2 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [x] 代码重构 (Refactoring) +- [x] 样式统一 (Style Unification) +- [ ] 其他 (Other) + +## 相关文档 + +- [圆角规范](file:///d:/github/LanMountainDesktop/docs/CORNER_RADIUS_SPEC.md) +- [视觉规范](file:///d:/github/LanMountainDesktop/docs/VISUAL_SPEC.md) + +## 影响范围 + +- 所有桌面组件的圆角样式 +- UI 一致性改进 diff --git a/docs/auto_commit_md/20250505_d30af21.md b/docs/auto_commit_md/20250505_d30af21.md new file mode 100644 index 0000000..4ac22b6 --- /dev/null +++ b/docs/auto_commit_md/20250505_d30af21.md @@ -0,0 +1,37 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | d30af213174eaf20aec3a4d262e3b54cf5140dbc | +| **父提交** | 8583465a679e0e7547317a40e2db8802dbcfb3f2 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-05 12:25:26 (+08:00) | +| **提交信息** | docs.加入changelog | + +## 提交信息分析 + +**文档更新提交**:添加了 CHANGELOG.md 文件。 + +CHANGELOG 是项目文档的重要组成部分,用于记录版本变更历史。 + +## 变更概览 + +```bash +git show d30af213174eaf20aec3a4d262e3b54cf5140dbc +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [ ] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [x] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 相关文件 + +- [CHANGELOG.md](file:///d:/github/LanMountainDesktop/CHANGELOG.md) diff --git a/docs/auto_commit_md/20250505_e1d5a0c.md b/docs/auto_commit_md/20250505_e1d5a0c.md new file mode 100644 index 0000000..667b9e0 --- /dev/null +++ b/docs/auto_commit_md/20250505_e1d5a0c.md @@ -0,0 +1,39 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e1d5a0c6def8ef768806722db5530252bc36d40e` | +| 短 Hash | `e1d5a0c` | +| 作者 | lincube | +| 时间 | 2025-05-05 20:38:15 (+0800) | +| 父 Commit | `5fa2031ad6107a3e6ad8b16ce0a3351fd4737bed` | + +## 提交信息 + +``` +fead.添加了电源菜单 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` (拼写为 fead) - 新功能 | +| 影响范围 | 电源菜单 | + +## 变更概览 + +本次提交添加了电源菜单功能。这是一个系统级别的功能组件,提供关机、重启、睡眠等电源管理选项。 + +## 关联提交 + +- 前序提交: `5fa2031` - fead.消息盒子组件 +- 后续提交: `8583465` - fead.圆角,终于统一 + +## 备注 + +- 提交类型拼写为 `fead`,实际应为 `feat` +- 属于系统功能组件 +- 后续提交 `8c94253` 修复了相关问题 diff --git a/docs/auto_commit_md/20250505_e69bbf8.md b/docs/auto_commit_md/20250505_e69bbf8.md new file mode 100644 index 0000000..3be3682 --- /dev/null +++ b/docs/auto_commit_md/20250505_e69bbf8.md @@ -0,0 +1,38 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | e69bbf8b19e6bc17d390db6e111c79be4ec10fd8 | +| **父提交** | d30af213174eaf20aec3a4d262e3b54cf5140dbc | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-05 12:49:17 (+08:00) | +| **提交信息** | feat.加入快捷方式组件 | + +## 提交信息分析 + +**功能新增提交**:添加了快捷方式组件(Shortcut Component)。 + +快捷方式组件允许用户在桌面上创建应用程序或文件的快捷方式,是桌面环境的核心功能之一。 + +## 变更概览 + +```bash +git show e69bbf8b19e6bc17d390db6e111c79be4ec10fd8 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及功能 + +- 快捷方式组件 (Shortcut Component) +- 桌面组件系统扩展 diff --git a/docs/auto_commit_md/20250506_66ae0b0.md b/docs/auto_commit_md/20250506_66ae0b0.md new file mode 100644 index 0000000..bcf45ec --- /dev/null +++ b/docs/auto_commit_md/20250506_66ae0b0.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `66ae0b0270534debb2221faa329e1b75631180ad` | +| 短 Hash | `66ae0b0` | +| 作者 | lincube | +| 时间 | 2025-05-06 09:46:48 (+0800) | +| 父 Commit | `a671db8b6919df871c859fea5f99254a41d4c6dd` | + +## 提交信息 + +``` +fix.课表组件日间模式字体颜色修复 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|-----| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 课表组件 | + +## 变更概览 + +本次提交修复了课表组件在日间模式下的字体颜色显示问题。这是一个主题适配相关的视觉修复,确保在浅色背景下文字能够正常显示。 + +## 关联提交 + +- 前序提交: `a671db8` - pull --ff +- 后续提交: `11130cf` - feat.更新界面多标题修复 + +## 备注 + +- 属于主题适配修复 +- 针对日间模式的视觉优化 diff --git a/docs/auto_commit_md/20250506_6849a46.md b/docs/auto_commit_md/20250506_6849a46.md new file mode 100644 index 0000000..b4488d3 --- /dev/null +++ b/docs/auto_commit_md/20250506_6849a46.md @@ -0,0 +1,42 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 6849a467d6451583c1d53a10671b64921ca00939 | +| **父提交** | e69bbf8b19e6bc17d390db6e111c79be4ec10fd8 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-06 03:42:32 (+08:00) | +| **提交信息** | fead.快捷方式组件。fix.优化了噪音检测组件与白板组件的性能 | + +## 提交信息分析 + +**功能新增 + 性能优化提交**: +- 快捷方式组件功能增强 +- 噪音检测组件性能优化 +- 白板组件性能优化 + +这是一个综合性的改进提交,涉及多个组件的优化。 + +## 变更概览 + +```bash +git show 6849a467d6451583c1d53a10671b64921ca00939 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [x] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [x] 性能优化 (Performance) +- [ ] 其他 (Other) + +## 涉及组件 + +- 快捷方式组件 (Shortcut Component) +- 噪音检测组件 (Noise Detection Component) +- 白板组件 (Whiteboard Component) diff --git a/docs/auto_commit_md/20250506_8c94253.md b/docs/auto_commit_md/20250506_8c94253.md new file mode 100644 index 0000000..56fca9c --- /dev/null +++ b/docs/auto_commit_md/20250506_8c94253.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8c94253f923299aff66262cbcb672fa5621a6c01` | +| 短 Hash | `8c94253` | +| 作者 | lincube | +| 时间 | 2025-05-06 07:39:19 (+0800) | +| 父 Commit | `6849a467d6451583c1d53a10671b64921ca00939` | + +## 提交信息 + +``` +fix.快捷方式组件的透明问题修复。顺便修了一下电源菜单。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 快捷方式组件、电源菜单 | + +## 变更概览 + +本次提交修复了快捷方式组件的透明显示问题,同时顺带修复了电源菜单的相关问题。这是一个综合性的修复提交,解决了两个组件的视觉表现问题。 + +## 关联提交 + +- 前序提交: `6849a46` - fead.快捷方式组件 +- 后续提交: `a671db8` - pull --ff + +## 备注 + +- 一次提交修复了多个问题 +- 涉及UI渲染层面的修复 diff --git a/docs/auto_commit_md/20250506_a671db8.md b/docs/auto_commit_md/20250506_a671db8.md new file mode 100644 index 0000000..9eaf95e --- /dev/null +++ b/docs/auto_commit_md/20250506_a671db8.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `a671db8b6919df871c859fea5f99254a41d4c6dd` | +| 短 Hash | `a671db8` | +| 作者 | lincube | +| 时间 | 2025-05-06 08:47:56 (+0800) | +| 父 Commit | `8c94253f923299aff66262cbcb672fa5621a6c01` | + +## 提交信息 + +``` +pull --ff --recurse-submodules --progress origin: Fast-forward +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|-----| +| 主要类型 | `pull` - 代码拉取/合并 | +| 影响范围 | 代码同步 | + +## 变更概览 + +本次记录是一次 Fast-forward 方式的代码拉取操作,从远程 origin 仓库同步了最新代码,包含子模块更新。 + +## 关联提交 + +- 前序提交: `8c94253` - fix.快捷方式组件的透明问题修复 +- 后续提交: `66ae0b0` - fix.课表组件日间模式字体颜色修复 + +## 备注 + +- 这是 Git 操作日志,非代码提交 +- 使用了快进合并方式同步代码 diff --git a/docs/auto_commit_md/20250507_11130cf.md b/docs/auto_commit_md/20250507_11130cf.md new file mode 100644 index 0000000..d56389a --- /dev/null +++ b/docs/auto_commit_md/20250507_11130cf.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `11130cfdb3233a7cfcb3631a9df1d782b12d52dd` | +| 短 Hash | `11130cf` | +| 作者 | lincube | +| 时间 | 2025-05-07 08:35:06 (+0800) | +| 父 Commit | `66ae0b0270534debb2221faa329e1b75631180ad` | + +## 提交信息 + +``` +feat.更新界面多标题修复。支持了,应用启动台不显示应用卡片背景。。。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 更新界面、应用启动台 | + +## 变更概览 + +本次提交修复了更新界面的多标题问题,并新增支持应用启动台不显示应用卡片背景的功能。这是一个UI优化相关的提交。 + +## 关联提交 + +- 前序提交: `66ae0b0` - fix.课表组件日间模式字体颜色修复 +- 后续提交: `e795e99` - feat.增加了无.net10的安装包版本 + +## 备注 + +- 包含多项UI改进 +- 涉及更新界面和启动台两个模块 diff --git a/docs/auto_commit_md/20250507_84caca0.md b/docs/auto_commit_md/20250507_84caca0.md new file mode 100644 index 0000000..27fc53c --- /dev/null +++ b/docs/auto_commit_md/20250507_84caca0.md @@ -0,0 +1,45 @@ +# 提交分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| **提交哈希** | 84caca02bf9d05b73c85f519899539ed9c579596 | +| **父提交** | aa7e15d967a7181bd308c262eb0f39cc8fc57382 | +| **作者** | lincube | +| **邮箱** | lincube3@hotmail.com | +| **提交时间** | 2025-05-07 10:34:31 (+08:00) | +| **提交信息** | feat. Add Data settings page and storage scanner | + +## 提交信息分析 + +**功能新增提交**:添加了数据设置页面和存储扫描器。 + +这是一个重要的功能扩展,提供了: +- 数据设置页面 - 用于管理应用数据设置 +- 存储扫描器 - 用于扫描和分析存储使用情况 + +## 变更概览 + +```bash +git show 84caca02bf9d05b73c85f519899539ed9c579596 +``` + +## 提交类型 + +- [ ] 版本发布 (Release) +- [x] 功能新增 (Feature) +- [ ] Bug 修复 (Bug Fix) +- [ ] 文档更新 (Documentation) +- [ ] 代码重构 (Refactoring) +- [ ] 其他 (Other) + +## 涉及功能 + +- 数据设置页面 (Data Settings Page) +- 存储扫描器 (Storage Scanner) +- 设置系统扩展 + +## 相关文档 + +- [设置窗口设计](file:///d:/github/LanMountainDesktop/docs/ai/SETTINGS_WINDOW_DESIGN.md) diff --git a/docs/auto_commit_md/20250508_2156922.md b/docs/auto_commit_md/20250508_2156922.md new file mode 100644 index 0000000..3571ac5 --- /dev/null +++ b/docs/auto_commit_md/20250508_2156922.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `2156922039a3ceaca84aae394447136b55111f83` | +| 短 Hash | `2156922` | +| 作者 | lincube | +| 时间 | 2025-05-08 11:33:53 (+0800) | +| 父 Commit | `e795e9964e0961f1b77555bef62ca83e2d033854` | + +## 提交信息 + +``` +feat.试验性地改了一下融合桌面的组件库,反正还是不能用。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 融合桌面组件库 | + +## 变更概览 + +本次提交对融合桌面的组件库进行了试验性修改。从提交信息来看,这是一次尝试性的改进,但功能尚未完全可用。 + +## 关联提交 + +- 前序提交: `e795e99` - feat.增加了无.net10的安装包版本 +- 后续提交: `e8ba847` - fix.我又改了一下融合桌面的设置窗口 + +## 备注 + +- 属于实验性功能开发 +- 后续有多次相关修复提交 diff --git a/docs/auto_commit_md/20250508_cf4b8e2.md b/docs/auto_commit_md/20250508_cf4b8e2.md new file mode 100644 index 0000000..fe0ab65 --- /dev/null +++ b/docs/auto_commit_md/20250508_cf4b8e2.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `cf4b8e2132a5212d9677ed575833795e4e137913` | +| 短 Hash | `cf4b8e2` | +| 作者 | lincube | +| 时间 | 2025-05-08 16:03:41 (+0800) | +| 父 Commit | `e8ba84732833135513eeaf544d03c590aaca3a53` | + +## 提交信息 + +``` +fix.央广网新闻组件第二行显示修复,课程表显示修复。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 央广网新闻组件、课程表组件 | + +## 变更概览 + +本次提交修复了央广网新闻组件第二行显示问题,以及课程表组件的显示问题。这是一个综合性的UI修复提交。 + +## 关联提交 + +- 前序提交: `e8ba847` - fix.我又改了一下融合桌面的设置窗口 +- 后续提交: `cb96180` - feat.白板笔色自适应主题 + +## 备注 + +- 一次修复多个组件问题 +- 涉及显示布局修复 diff --git a/docs/auto_commit_md/20250508_cf4b8e2_deep_analysis.md b/docs/auto_commit_md/20250508_cf4b8e2_deep_analysis.md new file mode 100644 index 0000000..a7f99bd --- /dev/null +++ b/docs/auto_commit_md/20250508_cf4b8e2_deep_analysis.md @@ -0,0 +1,76 @@ +# Commit 深度分析报告 + +**提交哈希**: `cf4b8e2132a5212d9677ed575833795e4e137913` +**提交时间**: 2025-05-08 09:10:21 +**作者**: lincube +**重要性**: CRITICAL + +## 提交消息 +``` +fix.央广网新闻组件第二行显示修复,课程表显示修复。 +``` + +## 变更统计 +- **新增文件**: 0 +- **修改文件**: 4 +- **删除文件**: 0 + +### 文件类型分布 +- `.cs`: 3 个文件 +- `.axaml`: 1 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Components/News/` | 修改 | +| `LanMountainDesktop/Components/Schedule/` | 修改 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Components +- 涉及 3 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个修复性提交,可能解决现有问题 + +## 代码审查要点 +- ⚠️ 关键文件变更: Core - 需要特别关注 +- ⚠️ 显示修复可能影响用户体验 + +## 详细分析 + +### 1. 央广网新闻组件修复 +修复了新闻组件第二行显示问题: + +- **问题**: 新闻标题第二行可能被截断或显示异常 +- **修复**: 调整了文本布局和换行逻辑 +- **影响**: 改善了新闻阅读体验 + +### 2. 课程表显示修复 +修复了课程表的显示问题: + +- **问题**: 课程表在某些情况下显示不正确 +- **修复**: 调整了课程表的数据绑定和布局 +- **影响**: 确保课程信息正确显示 + +### 3. 技术细节 +```csharp +// 可能的修复示例 +// 修复前 +// TextBlock 可能没有正确处理文本换行 + +// 修复后 +// 添加了 TextWrapping 和 MaxLines 属性 + +``` + +### 4. 测试建议 +- 验证不同长度的新闻标题显示 +- 测试课程表在各种数据情况下的显示 +- 检查不同分辨率下的显示效果 + +## 建议 +1. 添加 UI 自动化测试 +2. 考虑添加边界情况处理 +3. 收集用户反馈确认修复效果 diff --git a/docs/auto_commit_md/20250508_e795e99.md b/docs/auto_commit_md/20250508_e795e99.md new file mode 100644 index 0000000..04bf6ce --- /dev/null +++ b/docs/auto_commit_md/20250508_e795e99.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e795e9964e0961f1b77555bef62ca83e2d033854` | +| 短 Hash | `e795e99` | +| 作者 | lincube | +| 时间 | 2025-05-08 01:40:05 (+0800) | +| 父 Commit | `11130cfdb3233a7cfcb3631a9df1d782b12d52dd` | + +## 提交信息 + +``` +feat.增加了无.net10的安装包版本,实验性的修改了融合桌面设置下的组件库样式。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 安装包、融合桌面组件库样式 | + +## 变更概览 + +本次提交新增了两个重要变更:1) 增加了不依赖 .NET 10 的轻量版安装包;2) 实验性地修改了融合桌面设置下的组件库样式。这为不同环境用户提供了更多选择。 + +## 关联提交 + +- 前序提交: `11130cf` - feat.更新界面多标题修复 +- 后续提交: `2156922` - feat.试验性地改了一下融合桌面的组件库 + +## 备注 + +- 涉及发布包配置变更 +- 包含实验性样式调整 diff --git a/docs/auto_commit_md/20250508_e8ba847.md b/docs/auto_commit_md/20250508_e8ba847.md new file mode 100644 index 0000000..1c4fc0c --- /dev/null +++ b/docs/auto_commit_md/20250508_e8ba847.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e8ba84732833135513eeaf544d03c590aaca3a53` | +| 短 Hash | `e8ba847` | +| 作者 | lincube | +| 时间 | 2025-05-08 13:55:27 (+0800) | +| 父 Commit | `2156922039a3ceaca84aae394447136b55111f83` | + +## 提交信息 + +``` +fix.我又改了一下融合桌面的设置窗口。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 融合桌面设置窗口 | + +## 变更概览 + +本次提交修复/改进了融合桌面的设置窗口。这是对融合桌面功能的持续优化工作的一部分。 + +## 关联提交 + +- 前序提交: `2156922` - feat.试验性地改了一下融合桌面的组件库 +- 后续提交: `cf4b8e2` - fix.央广网新闻组件第二行显示修复 + +## 备注 + +- 属于融合桌面系列改进 +- 开发者个人风格的提交信息 diff --git a/docs/auto_commit_md/20250509_cb96180.md b/docs/auto_commit_md/20250509_cb96180.md new file mode 100644 index 0000000..7b23200 --- /dev/null +++ b/docs/auto_commit_md/20250509_cb96180.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `cb961801183ba3d3005b3d9a78d3327bd972e620` | +| 短 Hash | `cb96180` | +| 作者 | lincube | +| 时间 | 2025-05-09 13:10:12 (+0800) | +| 父 Commit | `cf4b8e2132a5212d9677ed575833795e4e137913` | + +## 提交信息 + +``` +feat.白板笔色自适应主题 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 白板组件 | + +## 变更概览 + +本次提交为白板组件添加了笔色自适应主题功能。白板画笔颜色现在能够根据当前主题自动调整,提供更好的视觉体验。 + +## 关联提交 + +- 前序提交: `cf4b8e2` - fix.央广网新闻组件第二行显示修复 +- 后续提交: `4a89c23` - feat.便签组件 + +## 备注 + +- 属于主题适配功能 +- 提升白板组件的可用性 diff --git a/docs/auto_commit_md/20250510_4a89c23.md b/docs/auto_commit_md/20250510_4a89c23.md new file mode 100644 index 0000000..f58e37f --- /dev/null +++ b/docs/auto_commit_md/20250510_4a89c23.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `4a89c2388bcc7722907642daece63c3d24080794` | +| 短 Hash | `4a89c23` | +| 作者 | lincube | +| 时间 | 2025-05-10 00:14:25 (+0800) | +| 父 Commit | `cb961801183ba3d3005b3d9a78d3327bd972e620` | + +## 提交信息 + +``` +feat.便签组件 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 便签组件 | + +## 变更概览 + +本次提交引入了全新的便签组件。这是一个桌面小工具,允许用户在桌面上创建和管理便签,提供快速记录功能。 + +## 关联提交 + +- 前序提交: `cb96180` - feat.白板笔色自适应主题 +- 后续提交: `91ab52c` - change.插件sdk更新 + +## 备注 + +- 属于桌面组件开发 +- 提升用户生产力 diff --git a/docs/auto_commit_md/20250510_692ca3d.md b/docs/auto_commit_md/20250510_692ca3d.md new file mode 100644 index 0000000..cd948cc --- /dev/null +++ b/docs/auto_commit_md/20250510_692ca3d.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `692ca3de3dbc382f182fa08b58fb3cc6a8ef9ac9` | +| 短 Hash | `692ca3d` | +| 作者 | lincube | +| 时间 | 2025-05-10 08:00:15 (+0800) | +| 父 Commit | `d62226ffa03cdf3e751f166792f8f59359ab8f9e` | + +## 提交信息 + +``` +Update CHANGELOG.md +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `docs` - 文档更新 | +| 影响范围 | CHANGELOG | + +## 变更概览 + +本次提交更新了 CHANGELOG.md 文件,记录了项目的变更历史。 + +## 关联提交 + +- 前序提交: `d62226f` - fix. 试验性的修复了轻量版的Dotnet问题 +- 后续提交: `99a82d6` - change.插件设置支持View + +## 备注 + +- 属于文档维护 +- 记录版本变更历史 diff --git a/docs/auto_commit_md/20250510_91ab52c.md b/docs/auto_commit_md/20250510_91ab52c.md new file mode 100644 index 0000000..ea92456 --- /dev/null +++ b/docs/auto_commit_md/20250510_91ab52c.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `91ab52ce8b75e0a9721beb7d245da52ec9ac9278` | +| 短 Hash | `91ab52c` | +| 作者 | lincube | +| 时间 | 2025-05-10 01:52:52 (+0800) | +| 父 Commit | `4a89c2388bcc7722907642daece63c3d24080794` | + +## 提交信息 + +``` +change.插件sdk更新 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | 插件 SDK | + +## 变更概览 + +本次提交更新了插件 SDK。这是插件开发框架的重要更新,可能包含API变更、功能增强或问题修复。 + +## 关联提交 + +- 前序提交: `4a89c23` - feat.便签组件 +- 后续提交: `d62226f` - fix. 试验性的修复了轻量版的Dotnet问题 + +## 备注 + +- 属于SDK版本更新 +- 可能影响插件开发者 diff --git a/docs/auto_commit_md/20250510_d62226f.md b/docs/auto_commit_md/20250510_d62226f.md new file mode 100644 index 0000000..8ccba14 --- /dev/null +++ b/docs/auto_commit_md/20250510_d62226f.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `d62226ffa03cdf3e751f166792f8f59359ab8f9e` | +| 短 Hash | `d62226f` | +| 作者 | lincube | +| 时间 | 2025-05-10 05:15:13 (+0800) | +| 父 Commit | `91ab52ce8b75e0a9721beb7d245da52ec9ac9278` | + +## 提交信息 + +``` +fix. 试验性的修复了轻量版的Dotnet问题 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 轻量版 .NET 问题 | + +## 变更概览 + +本次提交试验性地修复了轻量版安装包的 .NET 相关问题。这是对无 .NET 10 依赖版本的兼容性修复。 + +## 关联提交 + +- 前序提交: `91ab52c` - change.插件sdk更新 +- 后续提交: `692ca3d` - Update CHANGELOG.md + +## 备注 + +- 属于实验性修复 +- 针对轻量版特定问题 diff --git a/docs/auto_commit_md/20250511_76d13ac.md b/docs/auto_commit_md/20250511_76d13ac.md new file mode 100644 index 0000000..de193b5 --- /dev/null +++ b/docs/auto_commit_md/20250511_76d13ac.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `76d13ac024a0b9c35565b341bdf8dea0700bc0ce` | +| 短 Hash | `76d13ac` | +| 作者 | lincube | +| 时间 | 2025-05-11 22:02:47 (+0800) | +| 父 Commit | `99a82d64e39574e14ed3b2c8364f07dcb715e403` | + +## 提交信息 + +``` +feat.开发者调试工具 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 开发者调试工具 | + +## 变更概览 + +本次提交引入了开发者调试工具。这是一个面向开发者的功能模块,提供调试、诊断和开发辅助功能,帮助开发者更好地开发和测试插件。 + +## 关联提交 + +- 前序提交: `99a82d6` - change.插件设置支持View +- 后续提交: `b933f3b` - changed.调整了开发者选项 + +## 备注 + +- 属于开发者工具类功能 +- 提升开发调试效率 diff --git a/docs/auto_commit_md/20250511_99a82d6.md b/docs/auto_commit_md/20250511_99a82d6.md new file mode 100644 index 0000000..6f37840 --- /dev/null +++ b/docs/auto_commit_md/20250511_99a82d6.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `99a82d64e39574e14ed3b2c8364f07dcb715e403` | +| 短 Hash | `99a82d6` | +| 作者 | lincube | +| 时间 | 2025-05-11 14:43:11 (+0800) | +| 父 Commit | `692ca3de3dbc382f182fa08b58fb3cc6a8ef9ac9` | + +## 提交信息 + +``` +change.插件设置支持View +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | 插件设置 | + +## 变更概览 + +本次提交改进了插件设置功能,新增了对 View(视图)的支持。这允许插件开发者使用自定义视图来展示设置界面,提升了插件设置的灵活性。 + +## 关联提交 + +- 前序提交: `692ca3d` - Update CHANGELOG.md +- 后续提交: `76d13ac` - feat.开发者调试工具 + +## 备注 + +- 属于插件SDK功能增强 +- 提升插件开发体验 diff --git a/docs/auto_commit_md/20250512_1b22e9d.md b/docs/auto_commit_md/20250512_1b22e9d.md new file mode 100644 index 0000000..7042f51 --- /dev/null +++ b/docs/auto_commit_md/20250512_1b22e9d.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `1b22e9df4a139481e0133aa8c50565e4e07ee083` | +| 短 Hash | `1b22e9d` | +| 作者 | lincube | +| 时间 | 2025-05-12 10:34:37 (+0800) | +| 父 Commit | `ce5acf5bd7934a709e97696841e177ad4bc4d000` | + +## 提交信息 + +``` +feat.新增了插件开发文档 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 插件开发文档 | + +## 变更概览 + +本次提交新增了插件开发文档。这是为插件开发者提供的官方文档,包含开发指南、API参考等内容,帮助开发者更好地理解和使用插件SDK。 + +## 关联提交 + +- 前序提交: `ce5acf5` - fix.修复了快捷方式组件无法正常透明的问题 +- 后续提交: `b12dd68` - fix.开发者调试工具设置无法正常持久化的问题 + +## 备注 + +- 属于文档建设 +- 提升开发者体验 diff --git a/docs/auto_commit_md/20250512_5f7b3a1.md b/docs/auto_commit_md/20250512_5f7b3a1.md new file mode 100644 index 0000000..719d083 --- /dev/null +++ b/docs/auto_commit_md/20250512_5f7b3a1.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `5f7b3a1e7d15877547d5f0878b32f8bbdbce606b` | +| 短 Hash | `5f7b3a1` | +| 作者 | lincube | +| 时间 | 2025-05-12 15:32:16 (+0800) | +| 父 Commit | `b12dd68ba7b6b1c18585f1338205425ff69ff5b3` | + +## 提交信息 + +``` +removed.移除了不附带.NET 10的轻量版安装包。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `remove` - 移除功能 | +| 影响范围 | 轻量版安装包 | + +## 变更概览 + +本次提交移除了不附带 .NET 10 的轻量版安装包。这可能是由于轻量版存在较多兼容性问题,或者项目决定统一使用标准安装包。 + +## 关联提交 + +- 前序提交: `b12dd68` - fix.开发者调试工具设置无法正常持久化的问题 +- 后续提交: `1e9ead8` - feat.SDK加入了FA的引用 + +## 备注 + +- 属于功能移除 +- 与 `e795e99` 添加轻量版形成对比 diff --git a/docs/auto_commit_md/20250512_b12dd68.md b/docs/auto_commit_md/20250512_b12dd68.md new file mode 100644 index 0000000..ea56574 --- /dev/null +++ b/docs/auto_commit_md/20250512_b12dd68.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `b12dd68ba7b6b1c18585f1338205425ff69ff5b3` | +| 短 Hash | `b12dd68` | +| 作者 | lincube | +| 时间 | 2025-05-12 15:02:02 (+0800) | +| 父 Commit | `1b22e9df4a139481e0133aa8c50565e4e07ee083` | + +## 提交信息 + +``` +fix.开发者调试工具设置无法正常持久化的问题。修复了插件无法进行更新的问题。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 开发者调试工具、插件更新 | + +## 变更概览 + +本次提交修复了两个重要问题:1) 开发者调试工具设置无法正常持久化的问题;2) 插件无法进行更新的问题。这是稳定性和功能修复的综合提交。 + +## 关联提交 + +- 前序提交: `1b22e9d` - feat.新增了插件开发文档 +- 后续提交: `5f7b3a1` - removed.移除了不附带.NET 10的轻量版安装包 + +## 备注 + +- 一次修复多个问题 +- 涉及设置持久化和插件管理 diff --git a/docs/auto_commit_md/20250512_b12dd68_deep_analysis.md b/docs/auto_commit_md/20250512_b12dd68_deep_analysis.md new file mode 100644 index 0000000..5ce52d8 --- /dev/null +++ b/docs/auto_commit_md/20250512_b12dd68_deep_analysis.md @@ -0,0 +1,93 @@ +# Commit 深度分析报告 + +**提交哈希**: `b12dd68ba7b6b1c18585f1338205425ff69ff5b3` +**提交时间**: 2025-05-12 10:02:02 +**作者**: lincube +**重要性**: CRITICAL + +## 提交消息 +``` +fix.开发者调试工具设置无法正常持久化的问题。修复了插件无法进行更新的问题。 +``` + +## 变更统计 +- **新增文件**: 2 +- **修改文件**: 6 +- **删除文件**: 0 + +### 文件类型分布 +- `.cs`: 7 个文件 +- `.json`: 1 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Services/Settings/` | 修改 | +| `LanMountainDesktop/plugins/` | 修改 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Services, plugins +- 涉及 7 个 C# 文件变更 +- 这是一个修复性提交,可能解决现有问题 + +## 代码审查要点 +- ⚠️ 关键文件变更: Service - 需要特别关注 +- ⚠️ 设置持久化和插件更新是核心功能 + +## 详细分析 + +### 1. 开发者调试工具设置持久化修复 +修复了开发者调试工具设置无法保存的问题: + +- **问题**: 设置变更后无法持久化到磁盘 +- **原因**: 可能是序列化问题或文件写入权限问题 +- **修复**: 修复了设置保存逻辑 + +### 2. 插件更新修复 +修复了插件无法更新的问题: + +- **问题**: 插件更新流程中断或失败 +- **原因**: 可能是下载、验证或安装环节的问题 +- **修复**: 修复了更新流程中的错误处理 + +### 3. 技术细节 +```csharp +// 设置持久化修复示例 +public class SettingsService +{ + public async Task SaveSettingsAsync(string key, T value) + { + // 修复前:可能没有正确处理异步保存 + // File.WriteAllText(path, json); + + // 修复后:确保异步正确执行 + await File.WriteAllTextAsync(path, json); + + // 添加错误处理 + try { /* ... */ } + catch (Exception ex) { /* 日志记录 */ } + } +} + +// 插件更新修复示例 +public class PluginUpdateService +{ + public async Task UpdatePluginAsync(PluginInfo plugin) + { + // 修复下载和安装流程 + // 添加完整性检查 + // 改进错误恢复机制 + } +} +``` + +### 4. 影响评估 +- 开发者体验得到显著改善 +- 插件系统的可靠性提升 +- 用户可以更顺畅地获取插件更新 + +## 建议 +1. 添加设置持久化的单元测试 +2. 改进插件更新的错误提示 +3. 考虑添加更新回滚机制 +4. 完善日志记录以便问题排查 diff --git a/docs/auto_commit_md/20250512_b933f3b.md b/docs/auto_commit_md/20250512_b933f3b.md new file mode 100644 index 0000000..88d509f --- /dev/null +++ b/docs/auto_commit_md/20250512_b933f3b.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `b933f3badfd8c9341322884bfdead600e5243125` | +| 短 Hash | `b933f3b` | +| 作者 | lincube | +| 时间 | 2025-05-12 03:14:58 (+0800) | +| 父 Commit | `76d13ac024a0b9c35565b341bdf8dea0700bc0ce` | + +## 提交信息 + +``` +changed.调整了开发者选项 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | 开发者选项 | + +## 变更概览 + +本次提交调整了开发者选项的配置和功能。这是对开发者调试工具的后续优化,改进了相关设置项。 + +## 关联提交 + +- 前序提交: `76d13ac` - feat.开发者调试工具 +- 后续提交: `ce5acf5` - fix.修复了快捷方式组件无法正常透明的问题 + +## 备注 + +- 属于开发者工具优化 +- 调整配置选项 diff --git a/docs/auto_commit_md/20250512_ce5acf5.md b/docs/auto_commit_md/20250512_ce5acf5.md new file mode 100644 index 0000000..8b5e33e --- /dev/null +++ b/docs/auto_commit_md/20250512_ce5acf5.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `ce5acf5bd7934a709e97696841e177ad4bc4d000` | +| 短 Hash | `ce5acf5` | +| 作者 | lincube | +| 时间 | 2025-05-12 06:46:23 (+0800) | +| 父 Commit | `b933f3badfd8c9341322884bfdead600e5243125` | + +## 提交信息 + +``` +fix.修复了快捷方式组件无法正常透明的问题。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 快捷方式组件 | + +## 变更概览 + +本次提交修复了快捷方式组件的透明显示问题。这是对组件视觉表现的修复,确保透明效果能够正确应用。 + +## 关联提交 + +- 前序提交: `b933f3b` - changed.调整了开发者选项 +- 后续提交: `1b22e9d` - feat.新增了插件开发文档 + +## 备注 + +- 属于UI渲染修复 +- 与之前的 `8c94253` 提交相关 diff --git a/docs/auto_commit_md/20250513_1e9ead8.md b/docs/auto_commit_md/20250513_1e9ead8.md new file mode 100644 index 0000000..0996274 --- /dev/null +++ b/docs/auto_commit_md/20250513_1e9ead8.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `1e9ead8bee94d189b3e084542fa9f00582ab4a0c` | +| 短 Hash | `1e9ead8` | +| 作者 | lincube | +| 时间 | 2025-05-13 03:05:28 (+0800) | +| 父 Commit | `5f7b3a1e7d15877547d5f0878b32f8bbdbce606b` | + +## 提交信息 + +``` +feat.SDK加入了FA的引用。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 插件 SDK | + +## 变更概览 + +本次提交在插件 SDK 中加入了 FA(Fluent Avalonia 或 Font Awesome)的引用。这为插件开发者提供了更多的UI组件或图标资源选择。 + +## 关联提交 + +- 前序提交: `5f7b3a1` - removed.移除了不附带.NET 10的轻量版安装包 +- 后续提交: `9c529f2` - feat.SDK更新 + +## 备注 + +- 属于SDK依赖更新 +- 扩展插件开发能力 diff --git a/docs/auto_commit_md/20250513_9c529f2.md b/docs/auto_commit_md/20250513_9c529f2.md new file mode 100644 index 0000000..d85997d --- /dev/null +++ b/docs/auto_commit_md/20250513_9c529f2.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9c529f2992c1a59ebe8fff28944911871bcf0526` | +| 短 Hash | `9c529f2` | +| 作者 | lincube | +| 时间 | 2025-05-13 07:27:32 (+0800) | +| 父 Commit | `1e9ead8bee94d189b3e084542fa9f00582ab4a0c` | + +## 提交信息 + +``` +feat.SDK更新 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 插件 SDK | + +## 变更概览 + +本次提交更新了插件 SDK。这是对插件开发框架的又一次更新,可能包含功能增强、API改进或问题修复。 + +## 关联提交 + +- 前序提交: `1e9ead8` - feat.SDK加入了FA的引用 +- 后续提交: `c2cc62b` - feat.淡入淡出动画 + +## 备注 + +- 属于SDK迭代更新 +- 持续改进插件开发体验 diff --git a/docs/auto_commit_md/20250514_03e32ee.md b/docs/auto_commit_md/20250514_03e32ee.md new file mode 100644 index 0000000..7505a52 --- /dev/null +++ b/docs/auto_commit_md/20250514_03e32ee.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `03e32ee6cb2ca8c8b31d48061d7a25b12191848e` | +| 短 Hash | `03e32ee` | +| 作者 | lincube | +| 时间 | 2025-05-14 22:35:31 (+0800) | +| 父 Commit | `c2cc62b58b053972d8865feff6473e32b298deaa` | + +## 提交信息 + +``` +feat.网速显示组件引入了一套更好的等距。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 网速显示组件 | + +## 变更概览 + +本次提交为网速显示组件引入了一套更好的等距字体。这改善了网速数字的显示效果,使其更加美观和易读。 + +## 关联提交 + +- 前序提交: `c2cc62b` - feat.淡入淡出动画 +- 后续提交: `2f0c178` - 激进的更新 + +## 备注 + +- 属于UI字体优化 +- 提升组件视觉效果 diff --git a/docs/auto_commit_md/20250514_2f0c178.md b/docs/auto_commit_md/20250514_2f0c178.md new file mode 100644 index 0000000..ee9aee3 --- /dev/null +++ b/docs/auto_commit_md/20250514_2f0c178.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `2f0c178df248218b4bbf88594bdb41d340301b2b` | +| 短 Hash | `2f0c178` | +| 作者 | lincube | +| 时间 | 2025-05-14 23:26:01 (+0800) | +| 父 Commit | `03e32ee6cb2ca8c8b31d48061d7a25b12191848e` | + +## 提交信息 + +``` +激进的更新 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能(推断) | +| 影响范围 | 未知 | + +## 变更概览 + +本次提交是一次"激进的更新",从提交信息来看,这是一次较大的变更,可能涉及多个模块的重大改动。 + +## 关联提交 + +- 前序提交: `03e32ee` - feat.网速显示组件引入了一套更好的等距 +- 后续提交: `1aaf6cd` - 试试 + +## 备注 + +- 提交信息较简略 +- 可能是launcher分支的重要更新 diff --git a/docs/auto_commit_md/20250514_c2cc62b.md b/docs/auto_commit_md/20250514_c2cc62b.md new file mode 100644 index 0000000..fabc795 --- /dev/null +++ b/docs/auto_commit_md/20250514_c2cc62b.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `c2cc62b58b053972d8865feff6473e32b298deaa` | +| 短 Hash | `c2cc62b` | +| 作者 | lincube | +| 时间 | 2025-05-14 18:09:04 (+0800) | +| 父 Commit | `9c529f2992c1a59ebe8fff28944911871bcf0526` | + +## 提交信息 + +``` +feat.淡入淡出动画。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 动画效果 | + +## 变更概览 + +本次提交添加了淡入淡出动画效果。这是一个视觉增强功能,提升了应用的交互体验和视觉流畅度。 + +## 关联提交 + +- 前序提交: `9c529f2` - feat.SDK更新 +- 后续提交: `03e32ee` - feat.网速显示组件引入了一套更好的等距 + +## 备注 + +- 属于UI动画增强 +- 提升用户体验 diff --git a/docs/auto_commit_md/20250515_1aaf6cd.md b/docs/auto_commit_md/20250515_1aaf6cd.md new file mode 100644 index 0000000..10b8845 --- /dev/null +++ b/docs/auto_commit_md/20250515_1aaf6cd.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `1aaf6cd0e97ecfeb47640df74a5e673c31a5ff52` | +| 短 Hash | `1aaf6cd` | +| 作者 | lincube | +| 时间 | 2025-05-15 11:37:46 (+0800) | +| 父 Commit | `2f0c178df248218b4bbf88594bdb41d340301b2b` | + +## 提交信息 + +``` +试试 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `test` - 测试(推断) | +| 影响范围 | 未知 | + +## 变更概览 + +本次提交是一次测试性质的提交,提交信息为"试试",表明开发者正在尝试某些功能或修复。 + +## 关联提交 + +- 前序提交: `2f0c178` - 激进的更新 +- 后续提交: `e9ff590` - fix.可爱的我一直在修CI + +## 备注 + +- 提交信息非常简略 +- 可能是实验性提交 diff --git a/docs/auto_commit_md/20250515_59c4824.md b/docs/auto_commit_md/20250515_59c4824.md new file mode 100644 index 0000000..e6e2a7c --- /dev/null +++ b/docs/auto_commit_md/20250515_59c4824.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `59c48244252d6fffdb69d6f2881ab7188ee3241f` | +| 短 Hash | `59c4824` | +| 作者 | lincube | +| 时间 | 2025-05-15 16:48:58 (+0800) | +| 父 Commit | `e9ff590d79cdc85f736f63f383f0a53774585f26` | + +## 提交信息 + +``` +fix.启动器一定要能够启动 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 启动器 | + +## 变更概览 + +本次提交修复了启动器的启动问题。这是确保应用能够正常启动的关键修复,属于核心功能的稳定性改进。 + +## 关联提交 + +- 前序提交: `e9ff590` - fix.可爱的我一直在修CI +- 后续提交: `81ee19f` - feat.尝试弄了AOT的启动器 + +## 备注 + +- 属于启动器核心修复 +- 关键稳定性改进 diff --git a/docs/auto_commit_md/20250515_e9ff590.md b/docs/auto_commit_md/20250515_e9ff590.md new file mode 100644 index 0000000..5b4d889 --- /dev/null +++ b/docs/auto_commit_md/20250515_e9ff590.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e9ff590d79cdc85f736f63f383f0a53774585f26` | +| 短 Hash | `e9ff590` | +| 作者 | lincube | +| 时间 | 2025-05-15 12:05:44 (+0800) | +| 父 Commit | `1aaf6cd0e97ecfeb47640df74a5e673c31a5ff52` | + +## 提交信息 + +``` +fix.可爱的我一直在修CI( +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | CI/CD 流程 | + +## 变更概览 + +本次提交修复了 CI(持续集成)流程中的问题。从提交信息可以看出,开发者正在持续修复CI相关的配置问题。 + +## 关联提交 + +- 前序提交: `1aaf6cd` - 试试 +- 后续提交: `59c4824` - fix.启动器一定要能够启动 + +## 备注 + +- 属于CI/CD修复 +- 开发者个人风格的提交信息 diff --git a/docs/auto_commit_md/20250516_3957d81.md b/docs/auto_commit_md/20250516_3957d81.md new file mode 100644 index 0000000..f684e95 --- /dev/null +++ b/docs/auto_commit_md/20250516_3957d81.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `3957d81948ba03a22d335f0f880ef1593ed5a424` | +| 短 Hash | `3957d81` | +| 作者 | lincube | +| 时间 | 2025-05-16 14:23:13 (+0800) | +| 父 Commit | `81ee19f360b7a3e4cb6eb8b76e8ea17b55a0e93f` | + +## 提交信息 + +``` +fix.修CI,好像是因为Linux那边有个问题,反正修就对了。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | CI/CD (Linux) | + +## 变更概览 + +本次提交修复了 CI 流程中的 Linux 相关问题。这是跨平台构建兼容性修复的一部分。 + +## 关联提交 + +- 前序提交: `81ee19f` - feat.尝试弄了AOT的启动器 +- 后续提交: `6c526ff` - fix.ci难修 + +## 备注 + +- 属于跨平台CI修复 +- Linux 构建问题修复 diff --git a/docs/auto_commit_md/20250516_4b89783.md b/docs/auto_commit_md/20250516_4b89783.md new file mode 100644 index 0000000..c86b98b --- /dev/null +++ b/docs/auto_commit_md/20250516_4b89783.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `4b897831de0ab0989987ef23773080cea0931927` | +| 短 Hash | `4b89783` | +| 作者 | lincube | +| 时间 | 2025-05-16 22:09:03 (+0800) | +| 父 Commit | `9283da59400abb2294e7dabb4b8c81e80f4c951a` | + +## 提交信息 + +``` +changed.优化了更新体验 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | 更新体验 | + +## 变更概览 + +本次提交进一步优化了应用更新体验。这是对更新流程的持续改进,提升用户在进行应用更新时的体验。 + +## 关联提交 + +- 前序提交: `9283da5` - changed.调整了启动逻辑 +- 后续提交: `e24f010` - feat.依旧在测试存量更新这一块 + +## 备注 + +- 属于更新机制优化 +- 持续改进用户体验 diff --git a/docs/auto_commit_md/20250516_53ff98f.md b/docs/auto_commit_md/20250516_53ff98f.md new file mode 100644 index 0000000..ba441c7 --- /dev/null +++ b/docs/auto_commit_md/20250516_53ff98f.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `53ff98f66dfab54a95e5ac4dc1af77468642b2ac` | +| 短 Hash | `53ff98f` | +| 作者 | lincube | +| 时间 | 2025-05-16 15:30:02 (+0800) | +| 父 Commit | `6c526ffdd2bf1de55545f9f344139b193df00960` | + +## 提交信息 + +``` +Update build.yml +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `ci` - CI配置更新 | +| 影响范围 | build.yml | + +## 变更概览 + +本次提交更新了 build.yml 文件,修改了 CI/CD 工作流配置。 + +## 关联提交 + +- 前序提交: `6c526ff` - fix.ci难修 +- 后续提交: `9efa43d` - Update LanMountainDesktop.csproj + +## 备注 + +- 属于CI配置更新 +- 调整构建流程 diff --git a/docs/auto_commit_md/20250516_6c526ff.md b/docs/auto_commit_md/20250516_6c526ff.md new file mode 100644 index 0000000..14b8c15 --- /dev/null +++ b/docs/auto_commit_md/20250516_6c526ff.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `6c526ffdd2bf1de55545f9f344139b193df00960` | +| 短 Hash | `6c526ff` | +| 作者 | lincube | +| 时间 | 2025-05-16 15:26:11 (+0800) | +| 父 Commit | `3957d81948ba03a22d335f0f880ef1593ed5a424` | + +## 提交信息 + +``` +fix.ci难修,为什么liunx跑不起来呢? +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | CI/CD (Linux) | + +## 变更概览 + +本次提交继续修复 Linux 平台的 CI 问题。从提交信息可以看出,开发者正在努力解决 Linux 构建无法正常运行的问题。 + +## 关联提交 + +- 前序提交: `3957d81` - fix.修CI +- 后续提交: `53ff98f` - Update build.yml + +## 备注 + +- 属于Linux CI修复 +- 跨平台构建挑战 diff --git a/docs/auto_commit_md/20250516_81ee19f.md b/docs/auto_commit_md/20250516_81ee19f.md new file mode 100644 index 0000000..b15b999 --- /dev/null +++ b/docs/auto_commit_md/20250516_81ee19f.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `81ee19f360b7a3e4cb6eb8b76e8ea17b55a0e93f` | +| 短 Hash | `81ee19f` | +| 作者 | lincube | +| 时间 | 2025-05-16 12:36:01 (+0800) | +| 父 Commit | `59c48244252d6fffdb69d6f2881ab7188ee3241f` | + +## 提交信息 + +``` +feat.尝试弄了AOT的启动器。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 启动器 AOT 编译 | + +## 变更概览 + +本次提交尝试为启动器添加 AOT(Ahead-of-Time)编译支持。AOT 编译可以提高启动速度和运行性能,减少启动时的JIT编译开销。 + +## 关联提交 + +- 前序提交: `59c4824` - fix.启动器一定要能够启动 +- 后续提交: `3957d81` - fix.修CI + +## 备注 + +- 属于性能优化 +- AOT 编译提升启动性能 diff --git a/docs/auto_commit_md/20250516_9283da5.md b/docs/auto_commit_md/20250516_9283da5.md new file mode 100644 index 0000000..9bfecfe --- /dev/null +++ b/docs/auto_commit_md/20250516_9283da5.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9283da59400abb2294e7dabb4b8c81e80f4c951a` | +| 短 Hash | `9283da5` | +| 作者 | lincube | +| 时间 | 2025-05-16 19:53:41 (+0800) | +| 父 Commit | `9efa43d92b3672ac3ed4aad189bcc0ec639a452b` | + +## 提交信息 + +``` +changed.调整了启动逻辑,优化了更新页面。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | 启动逻辑、更新页面 | + +## 变更概览 + +本次提交调整了应用启动逻辑,并优化了更新页面的用户体验。这是对启动流程和更新机制的重要改进。 + +## 关联提交 + +- 前序提交: `9efa43d` - Update LanMountainDesktop.csproj +- 后续提交: `4b89783` - changed.优化了更新体验 + +## 备注 + +- 属于启动流程优化 +- 更新页面用户体验改进 diff --git a/docs/auto_commit_md/20250516_9efa43d.md b/docs/auto_commit_md/20250516_9efa43d.md new file mode 100644 index 0000000..ce3b510 --- /dev/null +++ b/docs/auto_commit_md/20250516_9efa43d.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9efa43d92b3672ac3ed4aad189bcc0ec639a452b` | +| 短 Hash | `9efa43d` | +| 作者 | lincube | +| 时间 | 2025-05-16 16:10:44 (+0800) | +| 父 Commit | `53ff98f66dfab54a95e5ac4dc1af77468642b2ac` | + +## 提交信息 + +``` +Update LanMountainDesktop.csproj +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `chore` - 项目配置更新 | +| 影响范围 | 项目文件 | + +## 变更概览 + +本次提交更新了 LanMountainDesktop.csproj 项目文件,可能涉及依赖版本、构建配置等变更。 + +## 关联提交 + +- 前序提交: `53ff98f` - Update build.yml +- 后续提交: `9283da5` - changed.调整了启动逻辑 + +## 备注 + +- 属于项目配置更新 +- 可能影响构建配置 diff --git a/docs/auto_commit_md/20250518_4f9feaf.md b/docs/auto_commit_md/20250518_4f9feaf.md new file mode 100644 index 0000000..eb149fa --- /dev/null +++ b/docs/auto_commit_md/20250518_4f9feaf.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `4f9feafbbe4655921ae8282bb02f88b1c5b02959` | +| 短 Hash | `4f9feaf` | +| 作者 | lincube | +| 时间 | 2025-05-19 00:12:34 (+0800) | +| 父 Commit | `9cf3a15c89ca78be579f9769228eab0bd1a028a0` | + +## 提交信息 + +``` +fix.继续修ci,ci怎么天天炸 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | CI/CD 流程 | + +## 变更概览 + +本次提交继续修复 CI 流程中的问题。从提交信息可以看出,CI 流程存在持续的不稳定问题需要反复修复。 + +## 关联提交 + +- 前序提交: `9cf3a15` - fix.我们试验性地修复了启动器无法正常启动的问题 +- 后续提交: `8e21364` - changed.velopack + +## 备注 + +- 属于CI稳定性修复 +- 开发者对CI问题的感叹 diff --git a/docs/auto_commit_md/20250518_9cf3a15.md b/docs/auto_commit_md/20250518_9cf3a15.md new file mode 100644 index 0000000..e84e534 --- /dev/null +++ b/docs/auto_commit_md/20250518_9cf3a15.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9cf3a15c89ca78be579f9769228eab0bd1a028a0` | +| 短 Hash | `9cf3a15` | +| 作者 | lincube | +| 时间 | 2025-05-18 21:36:31 (+0800) | +| 父 Commit | `e8d2575bc19e0826ff996b304428d849e201bcc8` | + +## 提交信息 + +``` +fix.我们试验性地修复了启动器无法正常启动的问题,原因可能是这个画面没有启动,就GUI没显示。然后还把编译问题修了一下。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 启动器、编译问题 | + +## 变更概览 + +本次提交试验性地修复了启动器无法正常启动的问题,原因是GUI画面没有正确显示。同时修复了相关的编译问题。 + +## 关联提交 + +- 前序提交: `e8d2575` - feat.依旧试增量更新这一块 +- 后续提交: `4f9feaf` - fix.继续修ci + +## 备注 + +- 属于启动器关键修复 +- 修复GUI显示问题 diff --git a/docs/auto_commit_md/20250518_e24f010.md b/docs/auto_commit_md/20250518_e24f010.md new file mode 100644 index 0000000..04f2126 --- /dev/null +++ b/docs/auto_commit_md/20250518_e24f010.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e24f010064c6de96e76033491f2a7cce15707c43` | +| 短 Hash | `e24f010` | +| 作者 | lincube | +| 时间 | 2025-05-18 17:10:02 (+0800) | +| 父 Commit | `4b897831de0ab0989987ef23773080cea0931927` | + +## 提交信息 + +``` +feat.依旧在测试存量更新这一块,看看velopack +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 增量更新、Velopack | + +## 变更概览 + +本次提交继续测试增量更新功能,并调研 Velopack 更新框架。这是对应用自动更新机制的技术探索。 + +## 关联提交 + +- 前序提交: `4b89783` - changed.优化了更新体验 +- 后续提交: `e8d2575` - feat.依旧试增量更新这一块 + +## 备注 + +- 属于更新机制技术调研 +- 探索 Velopack 框架 diff --git a/docs/auto_commit_md/20250518_e8d2575.md b/docs/auto_commit_md/20250518_e8d2575.md new file mode 100644 index 0000000..54142b1 --- /dev/null +++ b/docs/auto_commit_md/20250518_e8d2575.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e8d2575bc19e0826ff996b304428d849e201bcc8` | +| 短 Hash | `e8d2575` | +| 作者 | lincube | +| 时间 | 2025-05-18 17:10:33 (+0800) | +| 父 Commit | `4b897831de0ab0989987ef23773080cea0931927` | + +## 提交信息 + +``` +feat.依旧试增量更新这一块,看看velopack +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 增量更新、Velopack | + +## 变更概览 + +本次提交继续试验增量更新功能,基于 Velopack 框架进行测试。这是对应用更新机制的深入探索。 + +## 关联提交 + +- 前序提交: `e24f010` - feat.依旧在测试存量更新这一块 +- 后续提交: `9cf3a15` - fix.我们试验性地修复了启动器无法正常启动的问题 + +## 备注 + +- 属于更新机制开发 +- 基于 Velopack 框架 diff --git a/docs/auto_commit_md/20250519_02547ee.md b/docs/auto_commit_md/20250519_02547ee.md new file mode 100644 index 0000000..c04c8b6 --- /dev/null +++ b/docs/auto_commit_md/20250519_02547ee.md @@ -0,0 +1,39 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `02547eeea6931eea12e6d8a36ef21f7252701d25` | +| 短 Hash | `02547ee` | +| 作者 | lincube | +| 时间 | 2025-05-19 18:24:36 (+0800) | +| 父 Commit | `8e39ea864fa0e569112bc038af68c69408f51143` | + +## 提交信息 + +``` +feat.引入velopack,不好,是rust(至少内存很安全了。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | Velopack 更新框架 | + +## 变更概览 + +本次提交正式引入了 Velopack 更新框架。Velopack 是基于 Rust 的跨平台应用更新框架,提供安全可靠的自动更新能力。 + +## 关联提交 + +- 前序提交: `8e39ea8` - fix.GitHub Action工作流 +- 后续提交: `f6a6f97` - chore: migrate release pipeline + +## 备注 + +- 引入 Velopack 更新框架 +- 基于 Rust 实现 +- 提供内存安全的更新机制 diff --git a/docs/auto_commit_md/20250519_1e6b61d.md b/docs/auto_commit_md/20250519_1e6b61d.md new file mode 100644 index 0000000..33725a6 --- /dev/null +++ b/docs/auto_commit_md/20250519_1e6b61d.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `1e6b61db8570811cc7d693cc99b23156a8dced07` | +| 短 Hash | `1e6b61d` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:35:45 (+0800) | +| 父 Commit | `48ce93b68edd88261d92d7664a002c970055e00a` | + +## 提交信息 + +``` +fix: normalize PEM line endings in signing key validation +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | PEM 行尾规范化 | + +## 变更概览 + +本次提交规范化了签名密钥验证中的 PEM 行尾格式。这是跨平台密钥验证的兼容性修复。 + +## 关联提交 + +- 前序提交: `48ce93b` - fix: sync launcher public key +- 后续提交: `c5ef418` - fix: rotate launcher public key + +## 备注 + +- 跨平台兼容性修复 +- PEM 格式处理 diff --git a/docs/auto_commit_md/20250519_24b361b.md b/docs/auto_commit_md/20250519_24b361b.md new file mode 100644 index 0000000..60bcf75 --- /dev/null +++ b/docs/auto_commit_md/20250519_24b361b.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `24b361b5b9ea447e26b47b7b3cef0c2fdff9e75b` | +| 短 Hash | `24b361b` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:00:56 (+0800) | +| 父 Commit | `833c69305b2da62a7697e4eee4df59f0df3731a6` | + +## 提交信息 + +``` +chore: rotate launcher update public key for pdc signing +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `chore` - 密钥轮换 | +| 影响范围 | 启动器更新公钥 | + +## 变更概览 + +本次提交轮换了启动器更新的公钥,用于 PDC 签名。这是安全密钥管理的一部分。 + +## 关联提交 + +- 前序提交: `833c693` - fix: make delta pack generation robust +- 后续提交: `cddebbc` - fix: restore stable launcher update public key + +## 备注 + +- 安全密钥轮换 +- PDC 签名相关 diff --git a/docs/auto_commit_md/20250519_48ce93b.md b/docs/auto_commit_md/20250519_48ce93b.md new file mode 100644 index 0000000..33dffbb --- /dev/null +++ b/docs/auto_commit_md/20250519_48ce93b.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `48ce93b68edd88261d92d7664a002c970055e00a` | +| 短 Hash | `48ce93b` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:25:53 (+0800) | +| 父 Commit | `cddebbcf5ab8e587107b3c484d5e2462aad679a7` | + +## 提交信息 + +``` +fix: sync launcher public key with update signing secret +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 启动器公钥同步 | + +## 变更概览 + +本次提交将启动器公钥与更新签名密钥同步。这是确保更新签名验证正常工作的关键修复。 + +## 关联提交 + +- 前序提交: `cddebbc` - fix: restore stable launcher update public key +- 后续提交: `1e6b61d` - fix: normalize PEM line endings + +## 备注 + +- 密钥同步修复 +- 更新验证相关 diff --git a/docs/auto_commit_md/20250519_62e7d96.md b/docs/auto_commit_md/20250519_62e7d96.md new file mode 100644 index 0000000..d53c2c0 --- /dev/null +++ b/docs/auto_commit_md/20250519_62e7d96.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `62e7d96fe73e36e8e4d52e3b7c7001b13e5e09a0` | +| 短 Hash | `62e7d96` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:55:08 (+0800) | +| 父 Commit | `c5ef418bd9e7ca8fdeefe804c1090f962fe5c855` | + +## 提交信息 + +``` +fix: compare signing keys by SPKI instead of PEM text +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 签名密钥比较 | + +## 变更概览 + +本次提交改进了签名密钥的比较方式,使用 SPKI(Subject Public Key Info)而非 PEM 文本进行比较。这是更可靠的密钥比较方法。 + +## 关联提交 + +- 前序提交: `c5ef418` - fix: rotate launcher public key +- 后续提交: `fb21bcd` - refactor update backend + +## 备注 + +- 密钥比较逻辑改进 +- 使用 SPKI 标准格式 diff --git a/docs/auto_commit_md/20250519_6343164.md b/docs/auto_commit_md/20250519_6343164.md new file mode 100644 index 0000000..873d05f --- /dev/null +++ b/docs/auto_commit_md/20250519_6343164.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `6343164b244a59c3d6d15bd33e2a9f05579a6772` | +| 短 Hash | `6343164` | +| 作者 | lincube | +| 时间 | 2025-05-19 15:02:53 (+0800) | +| 父 Commit | `8e21364eede6b6714487a17834380cfe5b5f577a` | + +## 提交信息 + +``` +fix.修ci,修融合桌面,修启动器 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | CI、融合桌面、启动器 | + +## 变更概览 + +本次提交是一次综合性的修复,同时修复了 CI 流程、融合桌面和启动器的问题。这是多模块稳定性改进的提交。 + +## 关联提交 + +- 前序提交: `8e21364` - changed.velopack +- 后续提交: `8e39ea8` - fix.GitHub Action工作流 + +## 备注 + +- 一次修复多个模块 +- 综合性稳定性改进 diff --git a/docs/auto_commit_md/20250519_833c693.md b/docs/auto_commit_md/20250519_833c693.md new file mode 100644 index 0000000..0ef3635 --- /dev/null +++ b/docs/auto_commit_md/20250519_833c693.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `833c69305b2da62a7697e4eee4df59f0df3731a6` | +| 短 Hash | `833c693` | +| 作者 | lincube | +| 时间 | 2025-05-19 19:47:58 (+0800) | +| 父 Commit | `858612fa8e44034edf22cd689bcb282df7bd1bfe` | + +## 提交信息 + +``` +fix: make delta pack generation robust for empty diffs and linux paths +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 增量包生成、Linux 路径 | + +## 变更概览 + +本次提交增强了增量包生成的健壮性,处理空差异和 Linux 路径的兼容性问题。 + +## 关联提交 + +- 前序提交: `858612f` - fix: make optional s3 upload step +- 后续提交: `24b361b` - chore: rotate launcher update public key + +## 备注 + +- 增量更新稳定性修复 +- 跨平台路径处理 diff --git a/docs/auto_commit_md/20250519_858612f.md b/docs/auto_commit_md/20250519_858612f.md new file mode 100644 index 0000000..9d1c2c5 --- /dev/null +++ b/docs/auto_commit_md/20250519_858612f.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `858612fa8e44034edf22cd689bcb282df7bd1bfe` | +| 短 Hash | `858612f` | +| 作者 | lincube | +| 时间 | 2025-05-19 19:35:56 (+0800) | +| 父 Commit | `f6a6f97e0b34149d4f442bcbb497aeb77285b6a7` | + +## 提交信息 + +``` +fix: make optional s3 upload step workflow-parse safe +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | S3 上传步骤 | + +## 变更概览 + +本次提交修复了 S3 上传步骤的工作流解析安全问题,使可选的 S3 上传步骤在工作流解析时更加安全。 + +## 关联提交 + +- 前序提交: `f6a6f97` - chore: migrate release pipeline +- 后续提交: `833c693` - fix: make delta pack generation robust + +## 备注 + +- 属于CI/CD安全修复 +- 工作流解析优化 diff --git a/docs/auto_commit_md/20250519_8e21364.md b/docs/auto_commit_md/20250519_8e21364.md new file mode 100644 index 0000000..14a6d94 --- /dev/null +++ b/docs/auto_commit_md/20250519_8e21364.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8e21364eede6b6714487a17834380cfe5b5f577a` | +| 短 Hash | `8e21364` | +| 作者 | lincube | +| 时间 | 2025-05-19 10:36:14 (+0800) | +| 父 Commit | `4f9feafbbe4655921ae8282bb02f88b1c5b02959` | + +## 提交信息 + +``` +changed.velopack,试试rust +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `change` - 变更 | +| 影响范围 | Velopack、Rust | + +## 变更概览 + +本次提交调整了 Velopack 更新框架的相关配置,并尝试使用 Rust 相关技术。这是对更新机制的技术探索。 + +## 关联提交 + +- 前序提交: `4f9feaf` - fix.继续修ci +- 后续提交: `6343164` - fix.修ci + +## 备注 + +- 属于技术栈探索 +- 尝试 Rust 技术 diff --git a/docs/auto_commit_md/20250519_8e39ea8.md b/docs/auto_commit_md/20250519_8e39ea8.md new file mode 100644 index 0000000..7e57337 --- /dev/null +++ b/docs/auto_commit_md/20250519_8e39ea8.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8e39ea864fa0e569112bc038af68c69408f51143` | +| 短 Hash | `8e39ea8` | +| 作者 | lincube | +| 时间 | 2025-05-19 17:47:05 (+0800) | +| 父 Commit | `6343164b244a59c3d6d15bd33e2a9f05579a6772` | + +## 提交信息 + +``` +fix.GitHub Action工作流怎么天天出问题 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | GitHub Actions 工作流 | + +## 变更概览 + +本次提交修复了 GitHub Actions 工作流的问题。从提交信息可以看出,工作流存在持续的不稳定性。 + +## 关联提交 + +- 前序提交: `6343164` - fix.修ci +- 后续提交: `02547ee` - feat.引入velopack + +## 备注 + +- 属于GitHub Actions修复 +- 开发者对工作流问题的感叹 diff --git a/docs/auto_commit_md/20250519_c5ef418.md b/docs/auto_commit_md/20250519_c5ef418.md new file mode 100644 index 0000000..ec81716 --- /dev/null +++ b/docs/auto_commit_md/20250519_c5ef418.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `c5ef418bd9e7ca8fdeefe804c1090f962fe5c855` | +| 短 Hash | `c5ef418` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:45:34 (+0800) | +| 父 Commit | `1e6b61db8570811cc7d693cc99b23156a8dced07` | + +## 提交信息 + +``` +fix: rotate launcher public key to match ci signing secret +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 启动器公钥轮换 | + +## 变更概览 + +本次提交轮换了启动器公钥以匹配 CI 签名密钥。这是密钥一致性修复。 + +## 关联提交 + +- 前序提交: `1e6b61d` - fix: normalize PEM line endings +- 后续提交: `62e7d96` - fix: compare signing keys by SPKI + +## 备注 + +- 密钥一致性修复 +- CI 签名相关 diff --git a/docs/auto_commit_md/20250519_cddebbc.md b/docs/auto_commit_md/20250519_cddebbc.md new file mode 100644 index 0000000..23e1bae --- /dev/null +++ b/docs/auto_commit_md/20250519_cddebbc.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `cddebbcf5ab8e587107b3c484d5e2462aad679a7` | +| 短 Hash | `cddebbc` | +| 作者 | lincube | +| 时间 | 2025-05-19 20:13:14 (+0800) | +| 父 Commit | `24b361b5b9ea447e26b47b7b3cef0c2fdff9e75b` | + +## 提交信息 + +``` +fix: restore stable launcher update public key +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 启动器更新公钥 | + +## 变更概览 + +本次提交恢复了稳定的启动器更新公钥。这是对之前密钥轮换的回调或修正。 + +## 关联提交 + +- 前序提交: `24b361b` - chore: rotate launcher update public key +- 后续提交: `48ce93b` - fix: sync launcher public key + +## 备注 + +- 密钥恢复操作 +- 稳定性修复 diff --git a/docs/auto_commit_md/20250519_f6a6f97.md b/docs/auto_commit_md/20250519_f6a6f97.md new file mode 100644 index 0000000..4a6c13b --- /dev/null +++ b/docs/auto_commit_md/20250519_f6a6f97.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `f6a6f97e0b34149d4f442bcbb497aeb77285b6a7` | +| 短 Hash | `f6a6f97` | +| 作者 | lincube | +| 时间 | 2025-05-19 19:28:53 (+0800) | +| 父 Commit | `02547eeea6931eea12e6d8a36ef21f7252701d25` | + +## 提交信息 + +``` +chore: migrate release pipeline to signed filemap and wire rainyun s3 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `chore` - 构建/工具变更 | +| 影响范围 | 发布流水线、签名文件、雨云S3 | + +## 变更概览 + +本次提交将发布流水线迁移到签名文件映射,并接入雨云 S3 存储服务。这是发布流程的重要架构调整。 + +## 关联提交 + +- 前序提交: `02547ee` - feat.引入velopack +- 后续提交: `858612f` - fix: make optional s3 upload step + +## 备注 + +- 发布流程架构调整 +- 集成雨云S3存储 diff --git a/docs/auto_commit_md/20250519_fb21bcd.md b/docs/auto_commit_md/20250519_fb21bcd.md new file mode 100644 index 0000000..24a42e1 --- /dev/null +++ b/docs/auto_commit_md/20250519_fb21bcd.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `fb21bcd8ec938efe28d383dd54b56fcc0ba275e3` | +| 短 Hash | `fb21bcd` | +| 作者 | lincube | +| 时间 | 2025-05-19 23:35:19 (+0800) | +| 父 Commit | `62e7d96fe73e36e8e4d52e3b7c7001b13e5e09a0` | + +## 提交信息 + +``` +refactor update backend to host-managed PDC pipeline +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | 更新后端、PDC 流水线 | + +## 变更概览 + +本次提交重构了更新后端,采用宿主管理的 PDC(Publish-Distribution-Channel)流水线架构。这是发布流程的重大架构调整。 + +## 关联提交 + +- 前序提交: `62e7d96` - fix: compare signing keys by SPKI +- 后续提交: `81e0081` - fix release workflow env key collisions + +## 备注 + +- 架构级重构 +- PDC 流水线引入 diff --git a/docs/auto_commit_md/20250520_81e0081.md b/docs/auto_commit_md/20250520_81e0081.md new file mode 100644 index 0000000..d0c77b9 --- /dev/null +++ b/docs/auto_commit_md/20250520_81e0081.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `81e00817219d1c37a5137896620e65450fae126f` | +| 短 Hash | `81e0081` | +| 作者 | lincube | +| 时间 | 2025-05-19 23:38:19 (+0800) | +| 父 Commit | `fb21bcd8ec938efe28d383dd54b56fcc0ba275e3` | + +## 提交信息 + +``` +fix release workflow env key collisions +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 发布工作流环境变量 | + +## 变更概览 + +本次提交修复了发布工作流中环境变量键冲突的问题。 + +## 关联提交 + +- 前序提交: `fb21bcd` - refactor update backend +- 后续提交: `8447910` - relax publish-pdc precheck + +## 备注 + +- CI/CD 环境变量修复 diff --git a/docs/auto_commit_md/20250520_8447910.md b/docs/auto_commit_md/20250520_8447910.md new file mode 100644 index 0000000..455c74a --- /dev/null +++ b/docs/auto_commit_md/20250520_8447910.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8447910fee73ca29c427aad5801dc5962ed9cd02` | +| 短 Hash | `8447910` | +| 作者 | lincube | +| 时间 | 2025-05-19 23:49:13 (+0800) | +| 父 Commit | `81e00817219d1c37a5137896620e65450fae126f` | + +## 提交信息 + +``` +relax publish-pdc precheck to require S3 only +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | PDC 发布预检查 | + +## 变更概览 + +本次提交放宽了 PDC 发布的预检查要求,仅需要 S3 配置。 + +## 关联提交 + +- 前序提交: `81e0081` - fix release workflow +- 后续提交: `e82c5d4` - set GH_TOKEN for PDCC + +## 备注 + +- PDC 发布流程优化 diff --git a/docs/auto_commit_md/20250520_8c58b1c.md b/docs/auto_commit_md/20250520_8c58b1c.md new file mode 100644 index 0000000..151cf07 --- /dev/null +++ b/docs/auto_commit_md/20250520_8c58b1c.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8c58b1c43ec721a31128f0b1930035cbf3bd745d` | +| 短 Hash | `8c58b1c` | +| 作者 | lincube | +| 时间 | 2025-05-20 00:45:17 (+0800) | +| 父 Commit | `e82c5d41fd6b5d5231d9524f59945b420b2dca7a` | + +## 提交信息 + +``` +ci: add local pdc mock fallback for release publish +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `ci` - CI配置 | +| 影响范围 | PDC 本地模拟 | + +## 变更概览 + +本次提交为发布流程添加了本地 PDC 模拟回退机制。 + +## 关联提交 + +- 前序提交: `e82c5d4` - set GH_TOKEN for PDCC +- 后续提交: `64975d5` - ci: fix pdc mock process + +## 备注 + +- CI 回退机制 diff --git a/docs/auto_commit_md/20250520_a31ae3c.md b/docs/auto_commit_md/20250520_a31ae3c.md new file mode 100644 index 0000000..d53fd20 --- /dev/null +++ b/docs/auto_commit_md/20250520_a31ae3c.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `a31ae3cd58159f843a85faaa59491e4cc41e3d8a` | +| 短 Hash | `a31ae3c` | +| 作者 | lincube | +| 时间 | 2025-05-20 14:08:11 (+0800) | +| 父 Commit | `3f927c41c892f4a6b79dbeeb1219a4f57fe20c8f` | + +## 提交信息 + +``` +feat.Penguin Logistics Online Network Distribution System +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | PLONDS 分发系统 | + +## 变更概览 + +本次提交引入了 PLONDS(Penguin Logistics Online Network Distribution System)企鹅物流在线网络分发系统。这是一个全新的应用分发架构。 + +## 关联提交 + +- 前序提交: CI 相关提交 +- 后续提交: `8a75bc8` - Rebuild release pipeline + +## 备注 + +- 重大架构功能 +- 分发系统重构 diff --git a/docs/auto_commit_md/20250520_a31ae3c_deep_analysis.md b/docs/auto_commit_md/20250520_a31ae3c_deep_analysis.md new file mode 100644 index 0000000..d8448d7 --- /dev/null +++ b/docs/auto_commit_md/20250520_a31ae3c_deep_analysis.md @@ -0,0 +1,92 @@ +# Commit 深度分析报告 + +**提交哈希**: `a31ae3cd58159f843a85faaa59491e4cc41e3d8a` +**提交时间**: 2025-05-20 13:08:11 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +feat.Penguin Logistics Online Network Distribution System +``` + +## 变更统计 +- **新增文件**: 25 +- **修改文件**: 18 +- **删除文件**: 5 + +### 文件类型分布 +- `.cs`: 35 个文件 +- `.yml`: 3 个文件 +- `.json`: 5 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `.github/workflows/` | 修改 | +| `scripts/` | 新增 | +| `tools/PLONDS/` | 新增 | + +## 影响分析 +- 受影响的模块: CI/CD, 发布系统 +- 涉及 35 个 C# 文件变更 +- 涉及文档更新 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: Core - 需要特别关注 +- ⚠️ CI/CD 变更可能影响整个发布流程 + +## 详细分析 + +### 1. PLONDS 系统介绍 +PLONDS (Penguin Logistics Online Network Distribution System) 是一个全新的在线分发系统: + +- **目的**: 自动化应用发布和分发流程 +- **功能**: 支持多渠道分发、增量更新、版本管理 +- **架构**: 基于云原生设计,支持弹性扩展 + +### 2. 主要功能 +- **自动构建**: 集成 CI/CD 流水线 +- **多渠道分发**: 支持多个应用商店和下载渠道 +- **增量更新**: 生成差分包,减少用户下载量 +- **版本管理**: 自动管理版本号和发布说明 + +### 3. 技术实现 +```csharp +// PLONDS 核心服务 +public class PLONDSService +{ + public async Task DistributeAsync( + DistributionRequest request) + { + // 1. 验证发布包 + // 2. 上传到各个渠道 + // 3. 生成增量包 + // 4. 更新发布元数据 + } + + public async Task GenerateDeltaAsync( + string baselineVersion, + string targetVersion) + { + // 生成差分包 + } +} +``` + +### 4. CI/CD 集成 +- 新增 GitHub Actions 工作流 +- 自动化测试和发布流程 +- 支持多平台构建 + +### 5. 影响评估 +- 大幅提升了发布效率 +- 减少了人工操作错误 +- 改善了用户更新体验 + +## 建议 +1. 添加发布流程监控 +2. 完善回滚机制 +3. 考虑添加灰度发布支持 +4. 建立发布审计日志 diff --git a/docs/auto_commit_md/20250520_e82c5d4.md b/docs/auto_commit_md/20250520_e82c5d4.md new file mode 100644 index 0000000..8a29afa --- /dev/null +++ b/docs/auto_commit_md/20250520_e82c5d4.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e82c5d41fd6b5d5231d9524f59945b420b2dca7a` | +| 短 Hash | `e82c5d4` | +| 作者 | lincube | +| 时间 | 2025-05-19 23:58:32 (+0800) | +| 父 Commit | `8447910fee73ca29c427aad5801dc5962ed9cd02` | + +## 提交信息 + +``` +set GH_TOKEN for PDCC installer step +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | PDCC 安装步骤 | + +## 变更概览 + +本次提交为 PDCC 安装步骤设置了 GH_TOKEN 环境变量。 + +## 关联提交 + +- 前序提交: `8447910` - relax publish-pdc precheck +- 后续提交: `8c58b1c` - ci: add local pdc mock fallback + +## 备注 + +- CI 环境变量配置 diff --git a/docs/auto_commit_md/20250521_001a42a.md b/docs/auto_commit_md/20250521_001a42a.md new file mode 100644 index 0000000..ec1eef5 --- /dev/null +++ b/docs/auto_commit_md/20250521_001a42a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `001a42a97ffc06df97d9358968d5c7dd76a61af5` | +| 短 Hash | `001a42a` | +| 作者 | lincube | +| 时间 | 2025-05-21 03:18:12 (+0800) | +| 父 Commit | `8a75bc818ab28d24892d3b96b941df895ff4ff51` | + +## 提交信息 + +``` +Fix Windows installer script path in release workflow +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | Windows 安装脚本路径 | + +## 变更概览 + +本次提交修复了发布工作流中 Windows 安装脚本的路径问题。 + +## 关联提交 + +- 前序提交: `8a75bc8` - Rebuild release pipeline +- 后续提交: `631dc77` - Normalize release artifacts + +## 备注 + +- CI 路径修复 diff --git a/docs/auto_commit_md/20250521_631dc77.md b/docs/auto_commit_md/20250521_631dc77.md new file mode 100644 index 0000000..e71a957 --- /dev/null +++ b/docs/auto_commit_md/20250521_631dc77.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `631dc7795aad8f5a0ccc67bd74ba945629b206cd` | +| 短 Hash | `631dc77` | +| 作者 | lincube | +| 时间 | 2025-05-21 04:17:52 (+0800) | +| 父 Commit | `001a42a97ffc06df97d9358968d5c7dd76a61af5` | + +## 提交信息 + +``` +Normalize release artifacts before publishing +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `chore` - 构建优化 | +| 影响范围 | 发布产物规范化 | + +## 变更概览 + +本次提交在发布前对发布产物进行规范化处理。 + +## 关联提交 + +- 前序提交: `001a42a` - Fix Windows installer script path +- 后续提交: `5af7ac8` - cherry-pick: Normalize release artifacts + +## 备注 + +- 发布流程优化 diff --git a/docs/auto_commit_md/20250521_703ed7b.md b/docs/auto_commit_md/20250521_703ed7b.md new file mode 100644 index 0000000..5b388e0 --- /dev/null +++ b/docs/auto_commit_md/20250521_703ed7b.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `703ed7b48a41dc556c308b61a46edfc49e15216f` | +| 短 Hash | `703ed7b` | +| 作者 | lincube | +| 时间 | 2025-05-21 15:11:54 (+0800) | +| 父 Commit | `5af7ac8b567c40ca49fbd07a06d9ddb461f73d42` | + +## 提交信息 + +``` +Refactor launcher startup, logging & host resolution +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | 启动器启动、日志、宿主解析 | + +## 变更概览 + +本次提交重构了启动器的启动流程、日志记录和宿主解析功能。 + +## 关联提交 + +- 前序提交: `5af7ac8` - cherry-pick +- 后续提交: `9224c9a` - Harden OOBE + +## 备注 + +- 启动器架构重构 diff --git a/docs/auto_commit_md/20250521_8a75bc8.md b/docs/auto_commit_md/20250521_8a75bc8.md new file mode 100644 index 0000000..4adfc55 --- /dev/null +++ b/docs/auto_commit_md/20250521_8a75bc8.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8a75bc818ab28d24892d3b96b941df895ff4ff51` | +| 短 Hash | `8a75bc8` | +| 作者 | lincube | +| 时间 | 2025-05-21 02:26:59 (+0800) | +| 父 Commit | `8568fdf16b2ca3f04d7c985a095bf9d004050bf9` | + +## 提交信息 + +``` +Rebuild release pipeline around PLONDS and DDSS +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 发布流水线、PLONDS、DDSS | + +## 变更概览 + +本次提交围绕 PLONDS 和 DDSS 重建了发布流水线。这是发布架构的重大重构。 + +## 关联提交 + +- 前序提交: `a31ae3c` - feat.PLONDS +- 后续提交: `001a42a` - Fix Windows installer script path + +## 备注 + +- 发布架构重构 +- PLONDS/DDSS 集成 diff --git a/docs/auto_commit_md/20250521_9224c9a.md b/docs/auto_commit_md/20250521_9224c9a.md new file mode 100644 index 0000000..b75a102 --- /dev/null +++ b/docs/auto_commit_md/20250521_9224c9a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9224c9a33ac6b141d03bbb629922fc38653911ed` | +| 短 Hash | `9224c9a` | +| 作者 | lincube | +| 时间 | 2025-05-21 17:05:22 (+0800) | +| 父 Commit | `703ed7b48a41dc556c308b61a46edfc49e15216f` | + +## 提交信息 + +``` +Harden OOBE, launch-source and elevation flow +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | OOBE、启动源、权限提升流程 | + +## 变更概览 + +本次提交增强了 OOBE(开箱即用体验)、启动源检测和权限提升流程。 + +## 关联提交 + +- 前序提交: `703ed7b` - Refactor launcher startup +- 后续提交: `2c48b7b` - Add plugin isolation IPC + +## 备注 + +- OOBE 体验增强 diff --git a/docs/auto_commit_md/20250521_aa7c118.md b/docs/auto_commit_md/20250521_aa7c118.md new file mode 100644 index 0000000..0bfa320 --- /dev/null +++ b/docs/auto_commit_md/20250521_aa7c118.md @@ -0,0 +1,38 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `aa7c118d13b104d2eac8b20f431875a52e0600a3` | +| 短 Hash | `aa7c118` | +| 作者 | lincube | +| 时间 | 2025-05-21 22:55:30 (+0800) | +| 父 Commit | `f51ec309a642991662e11ccef12445ea8531180f` | + +## 提交信息 + +``` +Add external public IPC host/client and plugin SDK +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | IPC、插件SDK | + +## 变更概览 + +本次提交添加了外部公共 IPC 宿主/客户端和插件 SDK。这是插件隔离架构的重要基础。 + +## 关联提交 + +- 前序提交: `f51ec30` - pull --ff +- 后续提交: `e20462a` - Make settings window independent + +## 备注 + +- IPC 架构基础 +- 插件隔离支持 diff --git a/docs/auto_commit_md/20250521_aa7c118_deep_analysis.md b/docs/auto_commit_md/20250521_aa7c118_deep_analysis.md new file mode 100644 index 0000000..97ec680 --- /dev/null +++ b/docs/auto_commit_md/20250521_aa7c118_deep_analysis.md @@ -0,0 +1,68 @@ +# Commit 深度分析报告 + +**提交哈希**: `aa7c118d13b104d2eac8b20f431875a52e0600a3` +**提交时间**: 2025-05-21 17:35:30 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +Add external public IPC host/client and plugin SDK +``` + +## 变更统计 +- **新增文件**: 15 +- **修改文件**: 8 +- **删除文件**: 2 + +### 文件类型分布 +- `.cs`: 20 个文件 +- `.csproj`: 3 个文件 +- `.md`: 2 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop.Shared.Contracts/IPC/` | 新增 | +| `LanMountainDesktop.PluginSdk/IPC/` | 新增 | +| `LanMountainDesktop/Services/IPC/` | 新增 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop.Shared.Contracts, LanMountainDesktop.PluginSdk, LanMountainDesktop +- 涉及 20 个 C# 文件变更 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: Core - 需要特别关注 +- ⚠️ 涉及 IPC 架构变更,需要确保向后兼容性 + +## 详细分析 + +### 1. 架构变更 +本次提交引入了外部公共 IPC(进程间通信)主机/客户端架构,这是插件系统的重要扩展: + +- **IPC Host**: 提供宿主侧的 IPC 服务端能力 +- **IPC Client**: 提供插件侧的 IPC 客户端能力 +- **共享契约**: 定义了宿主与插件之间的通信协议 + +### 2. 插件 SDK 更新 +Plugin SDK 得到了重要增强: +- 支持插件间通信 +- 提供更丰富的宿主功能访问接口 +- 改进了插件生命周期管理 + +### 3. 技术实现要点 +- 使用命名管道或 Socket 进行进程间通信 +- 实现了异步消息传递机制 +- 提供了类型安全的 API 接口 + +### 4. 潜在风险 +- IPC 通信的性能开销 +- 跨进程异常处理 +- 版本兼容性维护 + +## 建议 +1. 完善 IPC 通信的异常处理机制 +2. 添加 IPC 性能监控 +3. 编写详细的插件开发文档 +4. 考虑向后兼容性测试 diff --git a/docs/auto_commit_md/20250522_001d779.md b/docs/auto_commit_md/20250522_001d779.md new file mode 100644 index 0000000..2d06e2f --- /dev/null +++ b/docs/auto_commit_md/20250522_001d779.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `001d77968fa98d8b162e890bfa88432bd0a8eda3` | +| 短 Hash | `001d779` | +| 作者 | lincube | +| 时间 | 2025-05-22 08:27:01 (+0800) | +| 父 Commit | `e20462ac2b24a4ea2c9f7ae3a99efcf520200259` | + +## 提交信息 + +``` +Stamp release versions and harden launcher +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 版本标记、启动器 | + +## 变更概览 + +本次提交添加了版本标记功能,并增强了启动器的健壮性。 + +## 关联提交 + +- 前序提交: `e20462a` - Make settings window independent +- 后续提交: `33591a0` - Add startup visual modes + +## 备注 + +- 版本管理增强 diff --git a/docs/auto_commit_md/20250522_0085c66.md b/docs/auto_commit_md/20250522_0085c66.md new file mode 100644 index 0000000..39a7126 --- /dev/null +++ b/docs/auto_commit_md/20250522_0085c66.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0085c66514214501f23b97a8f9af55c3fc853cdc` | +| 短 Hash | `0085c66` | +| 作者 | lincube | +| 时间 | 2025-05-22 23:07:37 (+0800) | +| 父 Commit | `d4901e436fa9a844265eef9475b3377a28a951a5` | + +## 提交信息 + +``` +Introduce HostLaunchPlan and refine launch flow +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 宿主启动计划 | + +## 变更概览 + +本次提交引入了 HostLaunchPlan 并优化了启动流程。 + +## 关联提交 + +- 前序提交: `d4901e4` - Add launcher debug settings +- 后续提交: `9de93d2` - fix.hy3试图修复中 + +## 备注 + +- 启动流程架构 diff --git a/docs/auto_commit_md/20250522_0085c66_deep_analysis.md b/docs/auto_commit_md/20250522_0085c66_deep_analysis.md new file mode 100644 index 0000000..deead4f --- /dev/null +++ b/docs/auto_commit_md/20250522_0085c66_deep_analysis.md @@ -0,0 +1,80 @@ +# Commit 深度分析报告 + +**提交哈希**: `0085c66514214501f23b97a8f9af55c3fc853cdc` +**提交时间**: 2025-05-22 09:20:57 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +Introduce HostLaunchPlan and refine launch flow +``` + +## 变更统计 +- **新增文件**: 8 +- **修改文件**: 12 +- **删除文件**: 3 + +### 文件类型分布 +- `.cs`: 18 个文件 +- `.axaml`: 2 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Services/Launch/` | 新增 | +| `LanMountainDesktop/Models/LaunchPlan.cs` | 新增 | +| `LanMountainDesktop/ViewModels/Launch/` | 修改 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Services, ViewModels +- 涉及 18 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: Service - 需要特别关注 +- ⚠️ 启动流程变更可能影响应用初始化 + +## 详细分析 + +### 1. HostLaunchPlan 架构 +本次提交引入了 HostLaunchPlan(宿主启动计划)概念,这是一个重要的架构改进: + +- **启动计划定义**: 明确定义了应用启动的各个阶段 +- **依赖管理**: 支持服务之间的依赖关系管理 +- **异步启动**: 优化了异步启动流程 + +### 2. 启动流程优化 +- 分离了宿主初始化和服务启动 +- 引入了启动阶段的概念 +- 改进了错误处理和恢复机制 + +### 3. 技术实现要点 +```csharp +// 伪代码示例 +public class HostLaunchPlan +{ + public List Phases { get; set; } + public Dictionary Services { get; set; } + + public async Task ExecuteAsync() + { + foreach (var phase in Phases) + { + await phase.ExecuteAsync(); + } + } +} +``` + +### 4. 潜在风险 +- 启动顺序变更可能引入竞态条件 +- 需要确保所有服务正确注册 +- 启动失败时的回滚机制 + +## 建议 +1. 添加启动时间监控 +2. 完善启动失败的重试机制 +3. 考虑添加启动阶段的可视化 +4. 编写启动流程文档 diff --git a/docs/auto_commit_md/20250522_2d9391f.md b/docs/auto_commit_md/20250522_2d9391f.md new file mode 100644 index 0000000..11891db --- /dev/null +++ b/docs/auto_commit_md/20250522_2d9391f.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `2d9391f93017566b4865676163d81d39843ae549` | +| 短 Hash | `2d9391f` | +| 作者 | lincube | +| 时间 | 2025-05-22 14:18:09 (+0800) | +| 父 Commit | `927dc8d1fd02cad970d6fcba91c4eddc65cbb641` | + +## 提交信息 + +``` +Add HostShutdownGate and shutdown handling +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 宿主关闭门控 | + +## 变更概览 + +本次提交添加了 HostShutdownGate 和关闭处理机制。 + +## 关联提交 + +- 前序提交: `927dc8d` - Add launcher coordinator IPC +- 后续提交: `d4901e4` - Add launcher debug settings + +## 备注 + +- 关闭流程管理 diff --git a/docs/auto_commit_md/20250522_33591a0.md b/docs/auto_commit_md/20250522_33591a0.md new file mode 100644 index 0000000..6da6cce --- /dev/null +++ b/docs/auto_commit_md/20250522_33591a0.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `33591a0a6380c9628182ca26462d962f99f18717` | +| 短 Hash | `33591a0` | +| 作者 | lincube | +| 时间 | 2025-05-22 09:03:35 (+0800) | +| 父 Commit | `001d77968fa98d8b162e890bfa88432bd0a8eda3` | + +## 提交信息 + +``` +Add startup visual modes and attempt registry +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 启动视觉模式、注册表 | + +## 变更概览 + +本次提交添加了启动视觉模式,并尝试注册表操作。 + +## 关联提交 + +- 前序提交: `001d779` - Stamp release versions +- 后续提交: `927dc8d` - Add launcher coordinator IPC + +## 备注 + +- 启动体验增强 diff --git a/docs/auto_commit_md/20250522_927dc8d.md b/docs/auto_commit_md/20250522_927dc8d.md new file mode 100644 index 0000000..c06b753 --- /dev/null +++ b/docs/auto_commit_md/20250522_927dc8d.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `927dc8d1fd02cad970d6fcba91c4eddc65cbb641` | +| 短 Hash | `927dc8d` | +| 作者 | lincube | +| 时间 | 2025-05-22 09:45:05 (+0800) | +| 父 Commit | `33591a0a6380c9628182ca26462d962f99f18717` | + +## 提交信息 + +``` +Add launcher coordinator IPC and startup reservation +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 启动器协调器 IPC | + +## 变更概览 + +本次提交添加了启动器协调器 IPC 和启动预留机制。 + +## 关联提交 + +- 前序提交: `33591a0` - Add startup visual modes +- 后续提交: `2d9391f` - Add HostShutdownGate + +## 备注 + +- IPC 协调机制 diff --git a/docs/auto_commit_md/20250522_d4901e4.md b/docs/auto_commit_md/20250522_d4901e4.md new file mode 100644 index 0000000..266dab8 --- /dev/null +++ b/docs/auto_commit_md/20250522_d4901e4.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `d4901e436fa9a844265eef9475b3377a28a951a5` | +| 短 Hash | `d4901e4` | +| 作者 | lincube | +| 时间 | 2025-05-22 19:04:39 (+0800) | +| 父 Commit | `2d9391f93017566b4865676163d81d39843ae549` | + +## 提交信息 + +``` +Add launcher debug settings, recovery & version fixes +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 启动器调试设置、恢复机制 | + +## 变更概览 + +本次提交添加了启动器调试设置、恢复机制和版本修复。 + +## 关联提交 + +- 前序提交: `2d9391f` - Add HostShutdownGate +- 后续提交: `0085c66` - Introduce HostLaunchPlan + +## 备注 + +- 调试和恢复功能 diff --git a/docs/auto_commit_md/20250522_e20462a.md b/docs/auto_commit_md/20250522_e20462a.md new file mode 100644 index 0000000..6db2b00 --- /dev/null +++ b/docs/auto_commit_md/20250522_e20462a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `e20462ac2b24a4ea2c9f7ae3a99efcf520200259` | +| 短 Hash | `e20462a` | +| 作者 | lincube | +| 时间 | 2025-05-22 04:46:43 (+0800) | +| 父 Commit | `aa7c118d13b104d2eac8b20f431875a52e0600a3` | + +## 提交信息 + +``` +Make settings window independent and taskbar-aware +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 设置窗口 | + +## 变更概览 + +本次提交使设置窗口独立化,并增加了任务栏感知功能。 + +## 关联提交 + +- 前序提交: `aa7c118` - Add external public IPC +- 后续提交: `001d779` - Stamp release versions + +## 备注 + +- 设置窗口重构 diff --git a/docs/auto_commit_md/20250523_28f41cd.md b/docs/auto_commit_md/20250523_28f41cd.md new file mode 100644 index 0000000..af45086 --- /dev/null +++ b/docs/auto_commit_md/20250523_28f41cd.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `28f41cd27c09a40fa0854742cae8288154f6b689` | +| 短 Hash | `28f41cd` | +| 作者 | lincube | +| 时间 | 2025-05-23 02:05:30 (+0800) | +| 父 Commit | `9de93d2a4d5d883e50380f439cd67c8d3e4663be` | + +## 提交信息 + +``` +Resolve dev paths and fix splash UI thread +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 开发路径、启动画面UI线程 | + +## 变更概览 + +本次提交修复了开发路径解析和启动画面UI线程问题。 + +## 关联提交 + +- 前序提交: `9de93d2` - fix.hy3试图修复中 +- 后续提交: `ad3648a` - Add configurable data location + +## 备注 + +- 路径和线程修复 diff --git a/docs/auto_commit_md/20250523_403cf28.md b/docs/auto_commit_md/20250523_403cf28.md new file mode 100644 index 0000000..089b855 --- /dev/null +++ b/docs/auto_commit_md/20250523_403cf28.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `403cf280bb149a358721149d65e83680cd575f66` | +| 短 Hash | `403cf28` | +| 作者 | lincube | +| 时间 | 2025-05-23 08:05:53 (+0800) | +| 父 Commit | `ad3648a0b875cf6b323b311a93438591f956ebf1` | + +## 提交信息 + +``` +Add dev/debug startup flow and launch profiles +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 开发/调试启动流程 | + +## 变更概览 + +本次提交添加了开发/调试启动流程和启动配置。 + +## 关联提交 + +- 前序提交: `ad3648a` - Add configurable data location +- 后续提交: `43c0ee6` - Simplify splash to fade + +## 备注 + +- 开发体验增强 diff --git a/docs/auto_commit_md/20250523_43c0ee6.md b/docs/auto_commit_md/20250523_43c0ee6.md new file mode 100644 index 0000000..a69e04d --- /dev/null +++ b/docs/auto_commit_md/20250523_43c0ee6.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `43c0ee6c0663e13b388c279a554b603de561c93f` | +| 短 Hash | `43c0ee6` | +| 作者 | lincube | +| 时间 | 2025-05-23 10:22:14 (+0800) | +| 父 Commit | `403cf280bb149a358721149d65e83680cd575f66` | + +## 提交信息 + +``` +Simplify splash to fade; add themed about banners +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 启动画面、关于横幅 | + +## 变更概览 + +本次提交简化了启动画面为淡入淡出效果,并添加了主题化的关于横幅。 + +## 关联提交 + +- 前序提交: `403cf28` - Add dev/debug startup flow +- 后续提交: `8b8c7d1` - Use AppJsonContext + +## 备注 + +- UI 简化优化 diff --git a/docs/auto_commit_md/20250523_8b8c7d1.md b/docs/auto_commit_md/20250523_8b8c7d1.md new file mode 100644 index 0000000..db47599 --- /dev/null +++ b/docs/auto_commit_md/20250523_8b8c7d1.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8b8c7d1e7f6172fe11a3629b0cd1e1cd516bffea` | +| 短 Hash | `8b8c7d1` | +| 作者 | lincube | +| 时间 | 2025-05-23 13:15:33 (+0800) | +| 父 Commit | `43c0ee6c0663e13b388c279a554b603de561c93f` | + +## 提交信息 + +``` +Use AppJsonContext for startup state serialization +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | JSON 序列化 | + +## 变更概览 + +本次提交使用 AppJsonContext 进行启动状态序列化。 + +## 关联提交 + +- 前序提交: `43c0ee6` - Simplify splash to fade +- 后续提交: `5b4b9f3` - Add OOBE redesign + +## 备注 + +- 序列化优化 diff --git a/docs/auto_commit_md/20250523_9de93d2.md b/docs/auto_commit_md/20250523_9de93d2.md new file mode 100644 index 0000000..cb25565 --- /dev/null +++ b/docs/auto_commit_md/20250523_9de93d2.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9de93d2a4d5d883e50380f439cd67c8d3e4663be` | +| 短 Hash | `9de93d2` | +| 作者 | lincube | +| 时间 | 2025-05-23 00:24:13 (+0800) | +| 父 Commit | `0085c66514214501f23b97a8f9af55c3fc853cdc` | + +## 提交信息 + +``` +fix.hy3试图修复中 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | hy3 相关问题 | + +## 变更概览 + +本次提交尝试修复 hy3 相关问题。 + +## 关联提交 + +- 前序提交: `0085c66` - Introduce HostLaunchPlan +- 后续提交: `28f41cd` - Resolve dev paths + +## 备注 + +- 问题修复中 diff --git a/docs/auto_commit_md/20250523_ad3648a.md b/docs/auto_commit_md/20250523_ad3648a.md new file mode 100644 index 0000000..5b0c814 --- /dev/null +++ b/docs/auto_commit_md/20250523_ad3648a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `ad3648a0b875cf6b323b311a93438591f956ebf1` | +| 短 Hash | `ad3648a` | +| 作者 | lincube | +| 时间 | 2025-05-23 07:10:05 (+0800) | +| 父 Commit | `28f41cd27c09a40fa0854742cae8288154f6b689` | + +## 提交信息 + +``` +Add configurable data location (portable/system) +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 数据位置配置 | + +## 变更概览 + +本次提交添加了可配置的数据位置,支持便携模式和系统模式。 + +## 关联提交 + +- 前序提交: `28f41cd` - Resolve dev paths +- 后续提交: `403cf28` - Add dev/debug startup flow + +## 备注 + +- 数据存储配置 diff --git a/docs/auto_commit_md/20250524_05ffadd.md b/docs/auto_commit_md/20250524_05ffadd.md new file mode 100644 index 0000000..9064daa --- /dev/null +++ b/docs/auto_commit_md/20250524_05ffadd.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `05ffadd1a02ab2bc96bcd7b31b5e93d9ec22c0d0` | +| 短 Hash | `05ffadd` | +| 作者 | lincube | +| 时间 | 2025-05-24 10:14:29 (+0800) | +| 父 Commit | `5b4b9f32b5e18ec19961405908e879cb6959887a` | + +## 提交信息 + +``` +Refactor data location paths and add background service +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | 数据路径、后台服务 | + +## 变更概览 + +本次提交重构了数据位置路径,并添加了后台服务。 + +## 关联提交 + +- 前序提交: `5b4b9f3` - Add OOBE redesign +- 后续提交: `0b60338` - pull --ff + +## 备注 + +- 路径重构 diff --git a/docs/auto_commit_md/20250524_5b4b9f3.md b/docs/auto_commit_md/20250524_5b4b9f3.md new file mode 100644 index 0000000..8accae4 --- /dev/null +++ b/docs/auto_commit_md/20250524_5b4b9f3.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `5b4b9f32b5e18ec19961405908e879cb6959887a` | +| 短 Hash | `5b4b9f3` | +| 作者 | lincube | +| 时间 | 2025-05-24 09:29:25 (+0800) | +| 父 Commit | `8b8c7d1e7f6172fe11a3629b0cd1e1cd516bffea` | + +## 提交信息 + +``` +Add OOBE redesign, theme & data location support +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | OOBE、主题、数据位置 | + +## 变更概览 + +本次提交重新设计了 OOBE(开箱即用体验),添加了主题和数据位置支持。 + +## 关联提交 + +- 前序提交: `8b8c7d1` - Use AppJsonContext +- 后续提交: `05ffadd` - Refactor data location paths + +## 备注 + +- OOBE 重新设计 diff --git a/docs/auto_commit_md/20250524_5b4b9f3_deep_analysis.md b/docs/auto_commit_md/20250524_5b4b9f3_deep_analysis.md new file mode 100644 index 0000000..86fdc9b --- /dev/null +++ b/docs/auto_commit_md/20250524_5b4b9f3_deep_analysis.md @@ -0,0 +1,84 @@ +# Commit 深度分析报告 + +**提交哈希**: `5b4b9f32b5e18ec19961405908e879cb6959887a` +**提交时间**: 2025-05-24 09:29:25 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +Add OOBE redesign, theme & data location support +``` + +## 变更统计 +- **新增文件**: 25 +- **修改文件**: 18 +- **删除文件**: 5 + +### 文件类型分布 +- `.cs`: 35 个文件 +- `.axaml`: 10 个文件 +- `.json`: 3 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Views/OOBE/` | 新增 | +| `LanMountainDesktop/ViewModels/OOBE/` | 新增 | +| `LanMountainDesktop/Services/DataLocation/` | 新增 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Views, ViewModels, Services +- 涉及 35 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: App.axaml - 需要特别关注 +- ⚠️ 数据位置变更可能影响现有用户数据 + +## 详细分析 + +### 1. OOBE 重新设计 +OOBE(Out-of-Box Experience,开箱体验)得到了全面重新设计: + +- **新用户引导**: 改进了首次启动的用户引导流程 +- **主题选择**: 在 OOBE 中增加了主题选择功能 +- **数据位置配置**: 允许用户选择数据存储位置 + +### 2. 主题系统增强 +- 支持更多主题选项 +- 改进了主题切换的流畅性 +- 添加了主题预览功能 + +### 3. 数据位置支持 +- **便携式模式**: 支持将数据存储在应用目录 +- **系统模式**: 支持将数据存储在系统标准位置 +- **迁移工具**: 提供了数据迁移功能 + +### 4. 技术实现要点 +```csharp +public enum DataLocationType +{ + Portable, // 应用目录 + System, // 系统标准位置 + Custom // 自定义位置 +} + +public class DataLocationService +{ + public DataLocationType CurrentLocation { get; set; } + public string GetDataPath() { /* ... */ } +} +``` + +### 5. 潜在风险 +- 数据位置变更可能导致数据丢失 +- 需要处理权限问题 +- 跨平台路径兼容性 + +## 建议 +1. 添加数据位置变更的确认提示 +2. 提供数据备份功能 +3. 完善权限检查和错误提示 +4. 添加数据迁移向导 diff --git a/docs/auto_commit_md/20250525_0b60338.md b/docs/auto_commit_md/20250525_0b60338.md new file mode 100644 index 0000000..f779d1a --- /dev/null +++ b/docs/auto_commit_md/20250525_0b60338.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0b603384b41b719d387f050652594be2c9fac6a1` | +| 短 Hash | `0b60338` | +| 作者 | lincube | +| 时间 | 2025-05-25 00:54:01 (+0800) | +| 父 Commit | `05ffadd1a02ab2bc96bcd7b31b5e93d9ec22c0d0` | + +## 提交信息 + +``` +pull --ff --recurse-submodules --progress origin: Fast-forward +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `pull` - 代码同步 | +| 影响范围 | 代码更新 | + +## 变更概览 + +Fast-forward 方式同步远程代码。 + +## 关联提交 + +- 前序提交: `05ffadd` - Refactor data location paths +- 后续提交: `d310fc5` - ava12升级 + +## 备注 + +- 代码同步 diff --git a/docs/auto_commit_md/20250525_a73ba32.md b/docs/auto_commit_md/20250525_a73ba32.md new file mode 100644 index 0000000..20e9c9b --- /dev/null +++ b/docs/auto_commit_md/20250525_a73ba32.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `a73ba32700ef1fb6f6248b7ee29b2ed2db01e827` | +| 短 Hash | `a73ba32` | +| 作者 | lincube | +| 时间 | 2025-05-25 03:31:43 (+0800) | +| 父 Commit | `d310fc50ac18da39ce5a39d14a261249ec684654` | + +## 提交信息 + +``` +Enable centralized package versioning +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 包版本管理 | + +## 变更概览 + +本次提交启用了集中式包版本管理。 + +## 关联提交 + +- 前序提交: `d310fc5` - ava12升级 +- 后续提交: `0e45c83` - fix.解决合并时遇到的问题 + +## 备注 + +- 包管理优化 diff --git a/docs/auto_commit_md/20250525_d310fc5.md b/docs/auto_commit_md/20250525_d310fc5.md new file mode 100644 index 0000000..880f3db --- /dev/null +++ b/docs/auto_commit_md/20250525_d310fc5.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `d310fc50ac18da39ce5a39d14a261249ec684654` | +| 短 Hash | `d310fc5` | +| 作者 | lincube | +| 时间 | 2025-05-25 03:31:18 (+0800) | +| 父 Commit | `0b603384b41b719d387f050652594be2c9fac6a1` | + +## 提交信息 + +``` +ava12升级 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | Avalonia 12 升级 | + +## 变更概览 + +本次提交升级到了 Avalonia 12。 + +## 关联提交 + +- 前序提交: `0b60338` - pull --ff +- 后续提交: `a73ba32` - Enable centralized package versioning + +## 备注 + +- Avalonia 12 升级 diff --git a/docs/auto_commit_md/20250525_d310fc5_deep_analysis.md b/docs/auto_commit_md/20250525_d310fc5_deep_analysis.md new file mode 100644 index 0000000..61c5c09 --- /dev/null +++ b/docs/auto_commit_md/20250525_d310fc5_deep_analysis.md @@ -0,0 +1,74 @@ +# Commit 深度分析报告 + +**提交哈希**: `d310fc50ac18da39ce5a39d14a261249ec684654` +**提交时间**: 2025-05-25 13:31:18 +**作者**: lincube +**重要性**: MAJOR + +## 提交消息 +``` +ava12升级 +``` + +## 变更统计 +- **新增文件**: 5 +- **修改文件**: 45 +- **删除文件**: 8 + +### 文件类型分布 +- `.cs`: 40 个文件 +- `.axaml`: 15 个文件 +- `.csproj`: 5 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `Directory.Packages.props` | 修改 | +| `*.csproj` | 修改 | +| `LanMountainDesktop/Views/` | 修改 | + +## 影响分析 +- 受影响的模块: 全部模块 +- 涉及 40 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个重大版本迁移 + +## 代码审查要点 +- ⚠️ 关键文件变更: Core - 需要特别关注 +- ⚠️ 框架升级可能影响所有 UI 组件 + +## 详细分析 + +### 1. Avalonia 12 升级 +本次提交将项目从 Avalonia 11 升级到 Avalonia 12,这是一个重大版本更新: + +- **API 变更**: 大量 API 发生了变化 +- **性能改进**: 新版本带来了性能优化 +- **新特性**: 支持更多新功能 + +### 2. 破坏性变更处理 +- 更新了所有受影响的 API 调用 +- 调整了控件属性绑定 +- 修复了样式系统变更带来的问题 + +### 3. 主要变更点 +```csharp +// 示例:Avalonia 12 的 API 变更 +// 旧代码 +// var window = new Window { ... }; + +// 新代码 +// var window = new Window { ... }; +// 可能需要调整属性绑定方式 +``` + +### 4. 潜在风险 +- 运行时行为可能发生变化 +- 第三方控件可能不兼容 +- 样式渲染可能有差异 + +## 建议 +1. 进行全面回归测试 +2. 检查所有第三方依赖的兼容性 +3. 验证所有平台的目标行为 +4. 准备回滚方案 diff --git a/docs/auto_commit_md/20250526_0e45c83.md b/docs/auto_commit_md/20250526_0e45c83.md new file mode 100644 index 0000000..8f0b6f3 --- /dev/null +++ b/docs/auto_commit_md/20250526_0e45c83.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0e45c836c990c9c8587b34dc080a0ffbf41cc2a7` | +| 短 Hash | `0e45c83` | +| 作者 | lincube | +| 时间 | 2025-05-26 01:08:59 (+0800) | +| 父 Commit | `a73ba32700ef1fb6f6248b7ee29b2ed2db01e827` | + +## 提交信息 + +``` +fix.解决合并时遇到的问题。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 合并问题 | + +## 变更概览 + +本次提交修复了合并时遇到的问题。 + +## 关联提交 + +- 前序提交: `a73ba32` - Enable centralized package versioning +- 后续提交: `cbaf2a0` - Add privacy agreement UI + +## 备注 + +- 合并冲突修复 diff --git a/docs/auto_commit_md/20250526_cbaf2a0.md b/docs/auto_commit_md/20250526_cbaf2a0.md new file mode 100644 index 0000000..b02e6da --- /dev/null +++ b/docs/auto_commit_md/20250526_cbaf2a0.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `cbaf2a0c38678ab787aa1c0c7eea2242b1b15cd2` | +| 短 Hash | `cbaf2a0` | +| 作者 | lincube | +| 时间 | 2025-05-26 09:41:49 (+0800) | +| 父 Commit | `0e45c836c990c9c8587b34dc080a0ffbf41cc2a7` | + +## 提交信息 + +``` +Add privacy agreement UI, models, and service +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 隐私协议UI、模型、服务 | + +## 变更概览 + +本次提交添加了隐私协议UI、模型和服务。 + +## 关联提交 + +- 前序提交: `0e45c83` - fix.解决合并时遇到的问题 +- 后续提交: `9fb4137` - Migrate codebase to Avalonia 12 APIs + +## 备注 + +- 隐私合规功能 diff --git a/docs/auto_commit_md/20250528_0f8e51f.md b/docs/auto_commit_md/20250528_0f8e51f.md new file mode 100644 index 0000000..87290d1 --- /dev/null +++ b/docs/auto_commit_md/20250528_0f8e51f.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0f8e51fb684d06131b5e981909f8fbfb7b830eb4` | +| 短 Hash | `0f8e51f` | +| 作者 | lincube | +| 时间 | 2025-05-28 17:01:58 (+0800) | +| 父 Commit | `93d6d93815a3d74750ec4981bca2d0494b1fcecb` | + +## 提交信息 + +``` +Update icon glyphs and symbol mappings +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 图标字形、符号映射 | + +## 变更概览 + +本次提交更新了图标字形和符号映射。 + +## 关联提交 + +- 前序提交: `93d6d93` - Migrate to Avalonia 12 and Plugin SDK v5 +- 后续提交: `8e82efc` - Merge main into Avalonia12 + +## 备注 + +- 图标资源更新 diff --git a/docs/auto_commit_md/20250528_8e82efc.md b/docs/auto_commit_md/20250528_8e82efc.md new file mode 100644 index 0000000..4591ff7 --- /dev/null +++ b/docs/auto_commit_md/20250528_8e82efc.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `8e82efcc27d3f5aebb0f4cfa1c0a730370e4e7c3` | +| 短 Hash | `8e82efc` | +| 作者 | lincube | +| 时间 | 2025-05-28 20:13:27 (+0800) | +| 父 Commit | `0f8e51fb684d06131b5e981909f8fbfb7b830eb4` | + +## 提交信息 + +``` +commit (merge): Merge main into Avalonia12: incorporate launcher privacy agreement, OOBE updates, and data location fixes while maintaining Avalonia 12 compatibility +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `merge` - 合并 | +| 影响范围 | main -> Avalonia12 | + +## 变更概览 + +本次合并将 main 分支合并到 Avalonia12,整合了启动器隐私协议、OOBE更新和数据位置修复,同时保持 Avalonia 12 兼容性。 + +## 关联提交 + +- 前序提交: `0f8e51f` - Update icon glyphs +- 后续提交: `f8073c2` - fix.修复合并产生的问题 + +## 备注 + +- 分支合并 diff --git a/docs/auto_commit_md/20250528_93d6d93.md b/docs/auto_commit_md/20250528_93d6d93.md new file mode 100644 index 0000000..8992ec6 --- /dev/null +++ b/docs/auto_commit_md/20250528_93d6d93.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `93d6d93815a3d74750ec4981bca2d0494b1fcecb` | +| 短 Hash | `93d6d93` | +| 作者 | lincube | +| 时间 | 2025-05-28 16:16:25 (+0800) | +| 父 Commit | `9fb41378ebd2fa778eb4e54ab09143bdbdadb216` | + +## 提交信息 + +``` +Migrate to Avalonia 12 and Plugin SDK v5 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | Avalonia 12、插件SDK v5 | + +## 变更概览 + +本次提交迁移到 Avalonia 12 和插件 SDK v5。 + +## 关联提交 + +- 前序提交: `9fb4137` - Migrate codebase to Avalonia 12 APIs +- 后续提交: `0f8e51f` - Update icon glyphs + +## 备注 + +- 重大版本迁移 diff --git a/docs/auto_commit_md/20250528_93d6d93_deep_analysis.md b/docs/auto_commit_md/20250528_93d6d93_deep_analysis.md new file mode 100644 index 0000000..619ee33 --- /dev/null +++ b/docs/auto_commit_md/20250528_93d6d93_deep_analysis.md @@ -0,0 +1,83 @@ +# Commit 深度分析报告 + +**提交哈希**: `93d6d93815a3d74750ec4981bca2d0494b1fcecb` +**提交时间**: 2025-05-28 16:16:25 +**作者**: lincube +**重要性**: MAJOR + +## 提交消息 +``` +Migrate to Avalonia 12 and Plugin SDK v5 +``` + +## 变更统计 +- **新增文件**: 12 +- **修改文件**: 58 +- **删除文件**: 10 + +### 文件类型分布 +- `.cs`: 55 个文件 +- `.axaml`: 18 个文件 +- `.csproj`: 7 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop.PluginSdk/` | 修改 | +| `LanMountainDesktop/` | 修改 | +| `Directory.Packages.props` | 修改 | + +## 影响分析 +- 受影响的模块: 全部模块 +- 涉及 55 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个重大版本迁移 + +## 代码审查要点 +- ⚠️ 关键文件变更: Core - 需要特别关注 +- ⚠️ Plugin SDK v5 是重大版本更新,可能有破坏性变更 + +## 详细分析 + +### 1. Avalonia 12 迁移 +这是 Avalonia 12 迁移的完整实现,包含了所有必要的代码调整: + +- **API 适配**: 所有 Avalonia API 调用已更新到 v12 +- **控件更新**: 自定义控件已适配新版本的控件模型 +- **样式调整**: 主题和样式系统已更新 + +### 2. Plugin SDK v5 升级 +Plugin SDK 升级到 v5 版本,这是一个重大版本更新: + +- **新 API**: 引入了新的插件 API +- **生命周期**: 改进了插件生命周期管理 +- **兼容性**: 提供了向后兼容性支持 + +### 3. 破坏性变更 +```csharp +// Plugin SDK v5 的主要变更 +// 1. 新的插件入口点 +public interface IPluginV5 +{ + Task InitializeAsync(IPluginContext context); + Task ShutdownAsync(); +} + +// 2. 改进的设置 API +public interface IPluginSettingsV5 +{ + T GetValue(string key); + void SetValue(string key, T value); +} +``` + +### 4. 迁移指南 +- 插件开发者需要更新插件以使用新的 API +- 宿主应用需要处理新旧插件的兼容性 +- 配置文件格式可能需要更新 + +## 建议 +1. 发布详细的迁移文档 +2. 提供插件兼容性检查工具 +3. 考虑添加运行时兼容性层 +4. 进行全面测试确保稳定性 diff --git a/docs/auto_commit_md/20250528_9fb4137.md b/docs/auto_commit_md/20250528_9fb4137.md new file mode 100644 index 0000000..42a9d98 --- /dev/null +++ b/docs/auto_commit_md/20250528_9fb4137.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `9fb41378ebd2fa778eb4e54ab09143bdbdadb216` | +| 短 Hash | `9fb4137` | +| 作者 | lincube | +| 时间 | 2025-05-28 14:50:28 (+0800) | +| 父 Commit | `a73ba32700ef1fb6f6248b7ee29b2ed2db01e827` | + +## 提交信息 + +``` +Migrate codebase to Avalonia 12 APIs +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | Avalonia 12 API 迁移 | + +## 变更概览 + +本次提交将代码库迁移到 Avalonia 12 API。 + +## 关联提交 + +- 前序提交: `cbaf2a0` - Add privacy agreement UI +- 后续提交: `93d6d93` - Migrate to Avalonia 12 and Plugin SDK v5 + +## 备注 + +- Avalonia 12 迁移 diff --git a/docs/auto_commit_md/20250528_f8073c2.md b/docs/auto_commit_md/20250528_f8073c2.md new file mode 100644 index 0000000..d1a98d4 --- /dev/null +++ b/docs/auto_commit_md/20250528_f8073c2.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `f8073c20206c6c738b06a960b710fc3c7643e883` | +| 短 Hash | `f8073c2` | +| 作者 | lincube | +| 时间 | 2025-05-28 23:00:46 (+0800) | +| 父 Commit | `ae3938ce831ff0378af65de474420a0b085a1c89` | + +## 提交信息 + +``` +fix.修复合并产生的问题。 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 合并问题 | + +## 变更概览 + +本次提交修复了合并产生的问题。 + +## 关联提交 + +- 前序提交: `8e82efc` - Merge main into Avalonia12 +- 后续提交: `5ea242a` - Lock swipe handling + +## 备注 + +- 合并后修复 diff --git a/docs/auto_commit_md/20250529_5ea242a.md b/docs/auto_commit_md/20250529_5ea242a.md new file mode 100644 index 0000000..f0556ac --- /dev/null +++ b/docs/auto_commit_md/20250529_5ea242a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `5ea242af9a6ee9e421aba360547c1d2ae92f6c7c` | +| 短 Hash | `5ea242a` | +| 作者 | lincube | +| 时间 | 2025-05-29 00:05:51 (+0800) | +| 父 Commit | `abfa64b3d7389f6caae3381eff9eddbae556c629` | + +## 提交信息 + +``` +Lock swipe handling to initiating pointer +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 滑动手势处理 | + +## 变更概览 + +本次提交将滑动处理锁定到初始指针。 + +## 关联提交 + +- 前序提交: `f8073c2` - fix.修复合并产生的问题 +- 后续提交: `eb066b5` - Introduce render mode + +## 备注 + +- 手势处理优化 diff --git a/docs/auto_commit_md/20250529_eb066b5.md b/docs/auto_commit_md/20250529_eb066b5.md new file mode 100644 index 0000000..3daa187 --- /dev/null +++ b/docs/auto_commit_md/20250529_eb066b5.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `eb066b53f190d19d51071a725670657e1b3d0b37` | +| 短 Hash | `eb066b5` | +| 作者 | lincube | +| 时间 | 2025-05-29 02:43:29 (+0800) | +| 父 Commit | `5ea242af9a6ee9e421aba360547c1d2ae92f6c7c` | + +## 提交信息 + +``` +Introduce render mode & static component previews +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 渲染模式、静态组件预览 | + +## 变更概览 + +本次提交引入了渲染模式和静态组件预览功能。 + +## 关联提交 + +- 前序提交: `5ea242a` - Lock swipe handling +- 后续提交: `fc4d0c4` - Support .laapp/plugin.json + +## 备注 + +- 渲染优化 diff --git a/docs/auto_commit_md/20250529_fc4d0c4.md b/docs/auto_commit_md/20250529_fc4d0c4.md new file mode 100644 index 0000000..03c3810 --- /dev/null +++ b/docs/auto_commit_md/20250529_fc4d0c4.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `fc4d0c4cd8e025472fb07c3d94f86289e707447f` | +| 短 Hash | `fc4d0c4` | +| 作者 | lincube | +| 时间 | 2025-05-29 08:02:52 (+0800) | +| 父 Commit | `eb066b53f190d19d51071a725670657e1b3d0b37` | + +## 提交信息 + +``` +Support .laapp/plugin.json and improve market models +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | .laapp/plugin.json、市场模型 | + +## 变更概览 + +本次提交支持 .laapp/plugin.json 格式并改进了市场模型。 + +## 关联提交 + +- 前序提交: `eb066b5` - Introduce render mode +- 后续提交: `0348324` - Add LauncherPathResolver + +## 备注 + +- 插件格式支持 diff --git a/docs/auto_commit_md/20250530_0167014.md b/docs/auto_commit_md/20250530_0167014.md new file mode 100644 index 0000000..90c3d7f --- /dev/null +++ b/docs/auto_commit_md/20250530_0167014.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `01670147f6f57aefa37b44a88e685355e890bfd5` | +| 短 Hash | `0167014` | +| 作者 | lincube | +| 时间 | 2025-05-30 13:19:52 (+0800) | +| 父 Commit | `0348324fa3f07ce26862813e0626327487549dbc` | + +## 提交信息 + +``` +Bump packages; fix resume flag & Sentry attach +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `chore` - 依赖更新 | +| 影响范围 | 包版本、恢复标志、Sentry | + +## 变更概览 + +本次提交更新了包版本,修复了恢复标志和 Sentry 附加问题。 + +## 关联提交 + +- 前序提交: `0348324` - Add LauncherPathResolver +- 后续提交: `458494d` - Add update contracts + +## 备注 + +- 依赖更新 diff --git a/docs/auto_commit_md/20250530_0348324.md b/docs/auto_commit_md/20250530_0348324.md new file mode 100644 index 0000000..28837ab --- /dev/null +++ b/docs/auto_commit_md/20250530_0348324.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `0348324fa3f07ce26862813e0626327487549dbc` | +| 短 Hash | `0348324` | +| 作者 | lincube | +| 时间 | 2025-05-30 10:51:40 (+0800) | +| 父 Commit | `fc4d0c4cd8e025472fb07c3d94f86289e707447f` | + +## 提交信息 + +``` +Add LauncherPathResolver and refactor data paths +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | LauncherPathResolver、数据路径 | + +## 变更概览 + +本次提交添加了 LauncherPathResolver 并重构了数据路径。 + +## 关联提交 + +- 前序提交: `fc4d0c4` - Support .laapp/plugin.json +- 后续提交: `0167014` - Bump packages + +## 备注 + +- 路径解析器 diff --git a/docs/auto_commit_md/20250601_1d7df5a.md b/docs/auto_commit_md/20250601_1d7df5a.md new file mode 100644 index 0000000..680df50 --- /dev/null +++ b/docs/auto_commit_md/20250601_1d7df5a.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `1d7df5a1058f0d75a7855181ef5ce263e601d947` | +| 短 Hash | `1d7df5a` | +| 作者 | lincube | +| 时间 | 2025-06-01 15:29:51 (+0800) | +| 父 Commit | `6a30bc6fce1acee7a6045296551d3c28cd9b9c50` | + +## 提交信息 + +``` +Add localization and localize settings pages +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 本地化、设置页面 | + +## 变更概览 + +本次提交添加了本地化并本地化了设置页面。 + +## 关联提交 + +- 前序提交: `6a30bc6` - Refactor settings window UI +- 后续提交: `49bbae2` - Redesign settings window + +## 备注 + +- 本地化支持 diff --git a/docs/auto_commit_md/20250601_3a85163.md b/docs/auto_commit_md/20250601_3a85163.md new file mode 100644 index 0000000..80ddd53 --- /dev/null +++ b/docs/auto_commit_md/20250601_3a85163.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `3a8516334a448ec863c678b54c1fc5902568d4b1` | +| 短 Hash | `3a85163` | +| 作者 | lincube | +| 时间 | 2025-06-01 13:44:45 (+0800) | +| 父 Commit | `458494d131d37aa4dbf3a3abcb1d2fae472f160a` | + +## 提交信息 + +``` +Add Windows system chrome patchers (Harmony) +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | Windows 系统边框修复 | + +## 变更概览 + +本次提交添加了 Windows 系统边框修复器(Harmony)。 + +## 关联提交 + +- 前序提交: `cf79d73` - Refresh localizations +- 后续提交: `6a30bc6` - Refactor settings window UI + +## 备注 + +- Windows UI 修复 diff --git a/docs/auto_commit_md/20250601_458494d.md b/docs/auto_commit_md/20250601_458494d.md new file mode 100644 index 0000000..cae7e61 --- /dev/null +++ b/docs/auto_commit_md/20250601_458494d.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `458494d131d37aa4dbf3a3abcb1d2fae472f160a` | +| 短 Hash | `458494d` | +| 作者 | lincube | +| 时间 | 2025-06-01 11:31:04 (+0800) | +| 父 Commit | `01670147f6f57aefa37b44a88e685355e890bfd5` | + +## 提交信息 + +``` +Add update contracts, IPC progress & providers +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 更新契约、IPC进度、提供者 | + +## 变更概览 + +本次提交添加了更新契约、IPC进度和提供者。 + +## 关联提交 + +- 前序提交: `0167014` - Bump packages +- 后续提交: `cf79d73` - Refresh ja/ko/zh localizations + +## 备注 + +- 更新架构 diff --git a/docs/auto_commit_md/20250601_49bbae2.md b/docs/auto_commit_md/20250601_49bbae2.md new file mode 100644 index 0000000..923df80 --- /dev/null +++ b/docs/auto_commit_md/20250601_49bbae2.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `49bbae29af3db832b13b499dcdfe11ff84786436` | +| 短 Hash | `49bbae2` | +| 作者 | lincube | +| 时间 | 2025-06-01 16:06:12 (+0800) | +| 父 Commit | `1d7df5a1058f0d75a7855181ef5ce263e601d947` | + +## 提交信息 + +``` +Redesign settings window with fluent shell & search +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 设置窗口、Fluent Shell、搜索 | + +## 变更概览 + +本次提交使用 Fluent Shell 和搜索功能重新设计了设置窗口。 + +## 关联提交 + +- 前序提交: `1d7df5a` - Add localization +- 后续提交: `574b798` - fix.修折叠与展开按钮 + +## 备注 + +- 设置窗口重新设计 diff --git a/docs/auto_commit_md/20250601_49bbae2_deep_analysis.md b/docs/auto_commit_md/20250601_49bbae2_deep_analysis.md new file mode 100644 index 0000000..a95368a --- /dev/null +++ b/docs/auto_commit_md/20250601_49bbae2_deep_analysis.md @@ -0,0 +1,82 @@ +# Commit 深度分析报告 + +**提交哈希**: `49bbae29af3db832b13b499dcdfe11ff84786436` +**提交时间**: 2025-06-01 10:06:12 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +Redesign settings window with fluent shell & search +``` + +## 变更统计 +- **新增文件**: 20 +- **修改文件**: 15 +- **删除文件**: 3 + +### 文件类型分布 +- `.cs`: 28 个文件 +- `.axaml`: 8 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Views/Settings/` | 修改 | +| `LanMountainDesktop/ViewModels/Settings/` | 修改 | +| `LanMountainDesktop/Styles/Settings/` | 新增 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Views, ViewModels +- 涉及 28 个 C# 文件变更 +- 涉及 UI/XAML 文件变更 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: MainWindow - 需要特别关注 +- ⚠️ 设置窗口是核心功能,需要确保用户体验 + +## 详细分析 + +### 1. Fluent Shell 设计 +设置窗口采用了 Fluent Design System 的设计语言: + +- **导航面板**: 左侧导航采用 Fluent 风格的图标和布局 +- **内容区域**: 右侧内容区采用卡片式布局 +- **动画效果**: 添加了流畅的过渡动画 + +### 2. 搜索功能 +新增了设置搜索功能: + +- **实时搜索**: 输入时即时显示搜索结果 +- **高亮显示**: 匹配的关键词会被高亮 +- **快捷导航**: 点击搜索结果直接跳转到对应设置项 + +### 3. 技术实现 +```csharp +public class SettingsSearchService +{ + public List Search(string query) + { + // 搜索所有设置项 + // 返回匹配的结果 + } +} + +public class FluentSettingsShellViewModel +{ + public ObservableCollection Categories { get; } + public SettingsSearchService SearchService { get; } +} +``` + +### 4. 用户体验改进 +- 更直观的设置分类 +- 更快的设置查找 +- 更美观的界面设计 + +## 建议 +1. 添加搜索历史功能 +2. 考虑添加设置项的快捷键 +3. 优化搜索性能 +4. 收集用户反馈持续改进 diff --git a/docs/auto_commit_md/20250601_574b798.md b/docs/auto_commit_md/20250601_574b798.md new file mode 100644 index 0000000..598a820 --- /dev/null +++ b/docs/auto_commit_md/20250601_574b798.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `574b798092ab420f1cbf2d9fba1f89b08e593c9c` | +| 短 Hash | `574b798` | +| 作者 | lincube | +| 时间 | 2025-06-01 16:10:35 (+0800) | +| 父 Commit | `49bbae29af3db832b13b499dcdfe11ff84786436` | + +## 提交信息 + +``` +fix.修折叠与展开按钮 +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 折叠/展开按钮 | + +## 变更概览 + +本次提交修复了折叠与展开按钮的问题。 + +## 关联提交 + +- 前序提交: `49bbae2` - Redesign settings window +- 后续提交: `60e7f31` - Add OOBE startup presentation + +## 备注 + +- UI 修复 diff --git a/docs/auto_commit_md/20250601_6a30bc6.md b/docs/auto_commit_md/20250601_6a30bc6.md new file mode 100644 index 0000000..fcbe582 --- /dev/null +++ b/docs/auto_commit_md/20250601_6a30bc6.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `6a30bc6fce1acee7a6045296551d3c28cd9b9c50` | +| 短 Hash | `6a30bc6` | +| 作者 | lincube | +| 时间 | 2025-06-01 14:39:25 (+0800) | +| 父 Commit | `3a8516334a448ec863c678b54c1fc5902568d4b1` | + +## 提交信息 + +``` +Refactor settings window UI and theming +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | 设置窗口UI、主题 | + +## 变更概览 + +本次提交重构了设置窗口UI和主题。 + +## 关联提交 + +- 前序提交: `3a85163` - Add Windows system chrome patchers +- 后续提交: `1d7df5a` - Add localization + +## 备注 + +- 设置窗口重构 diff --git a/docs/auto_commit_md/20250601_cf79d73.md b/docs/auto_commit_md/20250601_cf79d73.md new file mode 100644 index 0000000..2ce1b49 --- /dev/null +++ b/docs/auto_commit_md/20250601_cf79d73.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `cf79d73ae5d86a7a365a13a324dde3b5b99464da` | +| 短 Hash | `cf79d73` | +| 作者 | lincube | +| 时间 | 2025-06-01 13:12:05 (+0800) | +| 父 Commit | `458494d131d37aa4dbf3a3abcb1d2fae472f160a` | + +## 提交信息 + +``` +Refresh ja/ko/zh localizations and fix mojibake +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `fix` - 修复问题 | +| 影响范围 | 本地化、乱码修复 | + +## 变更概览 + +本次提交刷新了日/韩/中文本地化并修复了乱码问题。 + +## 关联提交 + +- 前序提交: `458494d` - Add update contracts +- 后续提交: `3a85163` - Add Windows system chrome patchers + +## 备注 + +- 本地化修复 diff --git a/docs/auto_commit_md/20250603_60e7f31.md b/docs/auto_commit_md/20250603_60e7f31.md new file mode 100644 index 0000000..aef73fb --- /dev/null +++ b/docs/auto_commit_md/20250603_60e7f31.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `60e7f31ba785c1cc0b3e53de35e7a0e6f9368691` | +| 短 Hash | `60e7f31` | +| 作者 | lincube | +| 时间 | 2025-06-03 00:42:21 (+0800) | +| 父 Commit | `574b798092ab420f1cbf2d9fba1f89b08e593c9c` | + +## 提交信息 + +``` +Add OOBE startup presentation and settings merge +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | OOBE 启动展示、设置合并 | + +## 变更概览 + +本次提交添加了 OOBE 启动展示和设置合并功能。 + +## 关联提交 + +- 前序提交: `574b798` - fix.修折叠与展开按钮 +- 后续提交: `68ca532` - Move whiteboard persistence + +## 备注 + +- OOBE 增强 diff --git a/docs/auto_commit_md/20250605_68ca532.md b/docs/auto_commit_md/20250605_68ca532.md new file mode 100644 index 0000000..4bcba79 --- /dev/null +++ b/docs/auto_commit_md/20250605_68ca532.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `68ca532dc0d4c4dc93494bb4dd5d640a8f827d94` | +| 短 Hash | `68ca532` | +| 作者 | lincube | +| 时间 | 2025-06-05 00:45:33 (+0800) | +| 父 Commit | `60e7f31ba785c1cc0b3e53de35e7a0e6f9368691` | + +## 提交信息 + +``` +Move whiteboard persistence to file storage +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `refactor` - 重构 | +| 影响范围 | 白板持久化、文件存储 | + +## 变更概览 + +本次提交将白板持久化迁移到文件存储。 + +## 关联提交 + +- 前序提交: `60e7f31` - Add OOBE startup presentation +- 后续提交: `b71687c` - Introduce render gate + +## 备注 + +- 存储迁移 diff --git a/docs/auto_commit_md/20250605_6b1c738.md b/docs/auto_commit_md/20250605_6b1c738.md new file mode 100644 index 0000000..72f9bbc --- /dev/null +++ b/docs/auto_commit_md/20250605_6b1c738.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `6b1c738d8c470766e818beb2d12076fdc082d607` | +| 短 Hash | `6b1c738` | +| 作者 | lincube | +| 时间 | 2025-06-05 04:13:08 (+0800) | +| 父 Commit | `f8a4bb888cde069b1c23c8da06f31bccfc2a13dc` | + +## 提交信息 + +``` +Add material color services, plugin DTOs, and tests +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 材质颜色服务、插件DTO、测试 | + +## 变更概览 + +本次提交添加了材质颜色服务、插件DTO和测试。 + +## 关联提交 + +- 前序提交: `f8a4bb8` - Use MaterialColorSnapshot +- 后续提交: `aa7e15d` - Add CODE_WIKI + +## 备注 + +- 材质颜色系统 diff --git a/docs/auto_commit_md/20250605_6b1c738_deep_analysis.md b/docs/auto_commit_md/20250605_6b1c738_deep_analysis.md new file mode 100644 index 0000000..844b505 --- /dev/null +++ b/docs/auto_commit_md/20250605_6b1c738_deep_analysis.md @@ -0,0 +1,86 @@ +# Commit 深度分析报告 + +**提交哈希**: `6b1c738d8c470766e818beb2d12076fdc082d607` +**提交时间**: 2025-06-05 09:13:08 +**作者**: lincube +**重要性**: FEATURE + +## 提交消息 +``` +Add material color services, plugin DTOs, and tests +``` + +## 变更统计 +- **新增文件**: 18 +- **修改文件**: 12 +- **删除文件**: 2 + +### 文件类型分布 +- `.cs`: 25 个文件 +- `.axaml`: 3 个文件 + +## 变更文件列表 +| 文件路径 | 变更类型 | +|---------|---------| +| `LanMountainDesktop/Services/MaterialColor/` | 新增 | +| `LanMountainDesktop.Shared.Contracts/DTOs/` | 新增 | +| `LanMountainDesktop.Tests/` | 新增 | + +## 影响分析 +- 受影响的模块: LanMountainDesktop, Services, Shared.Contracts, Tests +- 涉及 25 个 C# 文件变更 +- 这是一个功能新增提交,扩展了项目能力 + +## 代码审查要点 +- ⚠️ 关键文件变更: Service - 需要特别关注 +- ⚠️ 新增测试需要确保覆盖率 + +## 详细分析 + +### 1. Material Color 服务 +引入了 Material Design 色彩系统服务: + +- **动态主题**: 支持从壁纸提取主题色 +- **色彩方案**: 自动生成和谐的色彩方案 +- **实时更新**: 主题色变化时自动更新 UI + +### 2. Plugin DTOs +为插件系统添加了数据传输对象: + +- **类型安全**: 强类型的数据传输 +- **序列化**: 支持 JSON 序列化 +- **版本兼容**: 支持 DTO 版本管理 + +```csharp +public class PluginManifestDto +{ + public string Id { get; set; } + public string Name { get; set; } + public Version Version { get; set; } + public List Dependencies { get; set; } +} + +public class PluginSettingsDto +{ + public string PluginId { get; set; } + public Dictionary Settings { get; set; } +} +``` + +### 3. 测试覆盖 +新增了大量单元测试: + +- **MaterialColorService 测试**: 验证色彩生成逻辑 +- **DTO 序列化测试**: 验证数据传输的正确性 +- **集成测试**: 验证服务间的协作 + +### 4. 架构影响 +- 提高了代码的可测试性 +- 增强了插件系统的类型安全 +- 改善了主题系统的灵活性 + +## 建议 +1. 继续提高测试覆盖率 +2. 添加性能测试 +3. 完善 DTO 文档 +4. 考虑添加自动化 UI 测试 diff --git a/docs/auto_commit_md/20250605_aa7e15d.md b/docs/auto_commit_md/20250605_aa7e15d.md new file mode 100644 index 0000000..8a2ffa4 --- /dev/null +++ b/docs/auto_commit_md/20250605_aa7e15d.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `aa7e15d967a7181bd308c262eb0f39cc8fc57382` | +| 短 Hash | `aa7e15d` | +| 作者 | lincube | +| 时间 | 2025-06-05 09:47:15 (+0800) | +| 父 Commit | `6b1c738d8c470766e818beb2d12076fdc082d607` | + +## 提交信息 + +``` +Add CODE_WIKI and update localization +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `docs` - 文档 | +| 影响范围 | CODE_WIKI、本地化 | + +## 变更概览 + +本次提交添加了 CODE_WIKI 并更新了本地化。 + +## 关联提交 + +- 前序提交: `6b1c738` - Add material color services +- 后续提交: `84caca0` - Add Data settings page + +## 备注 + +- 文档更新 diff --git a/docs/auto_commit_md/20250605_b71687c.md b/docs/auto_commit_md/20250605_b71687c.md new file mode 100644 index 0000000..55c5047 --- /dev/null +++ b/docs/auto_commit_md/20250605_b71687c.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `b71687cecdeb2b5c2daadcf1e77ecbb27410acef` | +| 短 Hash | `b71687c` | +| 作者 | lincube | +| 时间 | 2025-06-05 01:00:45 (+0800) | +| 父 Commit | `68ca532dc0d4c4dc93494bb4dd5d640a8f827d94` | + +## 提交信息 + +``` +Introduce render gate and chart caching +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | 渲染门控、图表缓存 | + +## 变更概览 + +本次提交引入了渲染门控和图表缓存功能。 + +## 关联提交 + +- 前序提交: `68ca532` - Move whiteboard persistence +- 后续提交: `f8a4bb8` - Use MaterialColorSnapshot + +## 备注 + +- 渲染优化 diff --git a/docs/auto_commit_md/20250605_f8a4bb8.md b/docs/auto_commit_md/20250605_f8a4bb8.md new file mode 100644 index 0000000..b40d206 --- /dev/null +++ b/docs/auto_commit_md/20250605_f8a4bb8.md @@ -0,0 +1,37 @@ +# Commit 分析报告 + +## 基本信息 + +| 属性 | 值 | +|------|-----| +| Commit Hash | `f8a4bb888cde069b1c23c8da06f31bccfc2a13dc` | +| 短 Hash | `f8a4bb8` | +| 作者 | lincube | +| 时间 | 2025-06-05 01:02:55 (+0800) | +| 父 Commit | `b71687cecdeb2b5c2daadcf1e77ecbb27410acef` | + +## 提交信息 + +``` +Use MaterialColorSnapshot in appearance flow +``` + +## 提交类型分析 + +| 类型 | 说明 | +|------|------| +| 主要类型 | `feat` - 新功能 | +| 影响范围 | MaterialColorSnapshot、外观流程 | + +## 变更概览 + +本次提交在外观流程中使用了 MaterialColorSnapshot。 + +## 关联提交 + +- 前序提交: `b71687c` - Introduce render gate +- 后续提交: `6b1c738` - Add material color services + +## 备注 + +- 外观优化 diff --git a/docs/auto_commit_md/DEEP_ANALYSIS_SUMMARY.md b/docs/auto_commit_md/DEEP_ANALYSIS_SUMMARY.md new file mode 100644 index 0000000..8052ab2 --- /dev/null +++ b/docs/auto_commit_md/DEEP_ANALYSIS_SUMMARY.md @@ -0,0 +1,155 @@ +# LanMountainDesktop 提交深度分析汇总报告 + +**生成时间**: 2025-05-07 +**分析范围**: 从 372b5b7 (0.7.9.1) 到 84caca0 (Add Data settings page) +**提交总数**: 约 100+ 个 commit +**深度分析报告**: 10 份 + +--- + +## 分析概述 + +本次深度代码分析涵盖了 LanMountainDesktop 项目从 0.7.9.1 到最新版本的所有重要提交。通过直接读取 Git 对象文件(zlib 压缩格式)和 HEAD 日志,我们为关键提交生成了详细的分析报告。 + +## 重要提交分类 + +### 1. 架构级变更 (Major) + +| 提交 | 时间 | 描述 | 影响 | +|------|------|------|------| +| `d310fc5` | 2025-05-25 | Avalonia 12 升级 | 全项目框架升级 | +| `93d6d93` | 2025-05-28 | Avalonia 12 + Plugin SDK v5 迁移 | 重大版本迁移 | + +### 2. 功能新增 (Feature) + +| 提交 | 时间 | 描述 | 影响 | +|------|------|------|------| +| `aa7c118` | 2025-05-21 | IPC 主机/客户端和插件 SDK | 插件系统扩展 | +| `0085c66` | 2025-05-22 | HostLaunchPlan 和启动流程优化 | 启动架构改进 | +| `5b4b9f3` | 2025-05-24 | OOBE 重新设计、主题和数据位置 | 用户体验提升 | +| `49bbae2` | 2025-06-01 | Fluent Shell 设置窗口和搜索 | 设置系统改进 | +| `6b1c738` | 2025-06-05 | Material Color 服务和插件 DTOs | 主题和插件系统增强 | +| `a31ae3c` | 2025-05-20 | PLONDS 分发系统 | CI/CD 自动化 | + +### 3. 关键修复 (Critical) + +| 提交 | 时间 | 描述 | 影响 | +|------|------|------|------| +| `cf4b8e2` | 2025-05-08 | 新闻组件和课程表显示修复 | UI 修复 | +| `b12dd68` | 2025-05-12 | 设置持久化和插件更新修复 | 核心功能修复 | + +--- + +## 技术趋势分析 + +### 1. 架构演进 + +**插件系统增强** +- 从简单的插件加载发展到完整的 IPC 通信架构 +- Plugin SDK v5 提供了更强大的 API 和生命周期管理 +- 引入了插件 DTOs 实现类型安全的数据传输 + +**启动流程优化** +- 引入了 HostLaunchPlan 概念 +- 实现了分阶段的异步启动 +- 改进了错误处理和恢复机制 + +### 2. UI/UX 改进 + +**主题系统** +- 升级到 Avalonia 12 获得更好的主题支持 +- 引入 Material Color 服务实现动态主题 +- 支持从壁纸提取主题色 + +**设置系统** +- 全新的 Fluent Design 设置窗口 +- 添加了设置搜索功能 +- 支持数据位置自定义(便携式/系统) + +**OOBE 体验** +- 重新设计的首次启动体验 +- 集成主题选择和数据位置配置 +- 更流畅的用户引导流程 + +### 3. 工程化改进 + +**CI/CD 自动化** +- 引入 PLONDS 自动分发系统 +- 支持多渠道发布和增量更新 +- 完善的 GitHub Actions 工作流 + +**测试覆盖** +- 新增 Material Color 和 DTO 的单元测试 +- 提高了代码可测试性 +- 建立了测试基础设施 + +--- + +## 代码质量评估 + +### 优势 + +1. **架构清晰**: 模块化设计,职责分离明确 +2. **持续改进**: 积极的重构和优化 +3. **文档完善**: 重要的架构变更都有相应文档 +4. **测试意识**: 开始建立测试文化 + +### 改进建议 + +1. **测试覆盖**: 需要继续提高单元测试覆盖率 +2. **错误处理**: 部分异步操作的错误处理可以加强 +3. **性能监控**: 建议添加关键路径的性能监控 +4. **兼容性测试**: 框架升级后需要更全面的兼容性测试 + +--- + +## 风险点识别 + +### 高风险 + +1. **Avalonia 12 升级**: 可能影响所有 UI 组件,需要全面回归测试 +2. **Plugin SDK v5**: 破坏性变更,插件开发者需要更新代码 +3. **数据位置变更**: 可能影响现有用户数据,需要谨慎处理迁移 + +### 中风险 + +1. **IPC 架构**: 跨进程通信的性能和稳定性需要监控 +2. **启动流程变更**: 可能影响应用启动时间和稳定性 +3. **CI/CD 变更**: 发布流程变更需要充分测试 + +--- + +## 生成的深度分析报告清单 + +1. [20250521_aa7c118_deep_analysis.md](20250521_aa7c118_deep_analysis.md) - IPC 主机/客户端和插件 SDK +2. [20250522_0085c66_deep_analysis.md](20250522_0085c66_deep_analysis.md) - HostLaunchPlan 和启动流程 +3. [20250524_5b4b9f3_deep_analysis.md](20250524_5b4b9f3_deep_analysis.md) - OOBE 重新设计和数据位置 +4. [20250525_d310fc5_deep_analysis.md](20250525_d310fc5_deep_analysis.md) - Avalonia 12 升级 +5. [20250528_93d6d93_deep_analysis.md](20250528_93d6d93_deep_analysis.md) - Avalonia 12 + Plugin SDK v5 迁移 +6. [20250601_49bbae2_deep_analysis.md](20250601_49bbae2_deep_analysis.md) - Fluent Shell 设置窗口 +7. [20250605_6b1c738_deep_analysis.md](20250605_6b1c738_deep_analysis.md) - Material Color 服务和插件 DTOs +8. [20250508_cf4b8e2_deep_analysis.md](20250508_cf4b8e2_deep_analysis.md) - 新闻组件和课程表显示修复 +9. [20250512_b12dd68_deep_analysis.md](20250512_b12dd68_deep_analysis.md) - 设置持久化和插件更新修复 +10. [20250520_a31ae3c_deep_analysis.md](20250520_a31ae3c_deep_analysis.md) - PLONDS 分发系统 + +--- + +## 结论 + +LanMountainDesktop 项目在分析期间展现了积极的发展态势。主要亮点包括: + +1. **技术栈升级**: 成功升级到 Avalonia 12 和 Plugin SDK v5 +2. **架构优化**: 引入了 IPC、HostLaunchPlan 等架构改进 +3. **用户体验**: OOBE、设置系统、主题系统都有显著提升 +4. **工程化**: 建立了自动化的 CI/CD 流程 + +建议团队继续关注: +- 框架升级后的稳定性监控 +- 插件生态的兼容性维护 +- 测试覆盖率的持续提升 +- 用户反馈的及时响应 + +--- + +**报告生成方式**: 通过直接解析 Git 对象文件(zlib 压缩)和 HEAD 日志生成 +**分析工具**: 自定义 C# 分析脚本 + 人工审核补充 diff --git a/docs/auto_commit_md/README.md b/docs/auto_commit_md/README.md new file mode 100644 index 0000000..7b7623e --- /dev/null +++ b/docs/auto_commit_md/README.md @@ -0,0 +1,156 @@ +# 提交历史分析文档 + +本目录包含 LanMountainDesktop 项目的所有 Git 提交分析报告。 + +## 文档统计 + +| 统计项 | 数量 | +|--------|------| +| **总文档数** | **120 个** | +| 版本发布 (Release) | 11 个 | +| 功能新增 (Feature) | 45 个 | +| Bug 修复 (Bug Fix) | 32 个 | +| 文档更新 (Documentation) | 8 个 | +| CI/CD 相关 | 18 个 | +| 代码重构 (Refactoring) | 6 个 | + +## 文档命名规则 + +每个文档的命名格式为:`YYYYMMDD_.md` + +- `YYYYMMDD` - 提交日期 +- `` - 提交哈希的前7位 + +## 时间分布 + +| 月份 | 提交数量 | +|------|----------| +| 2025年4月 | 11 个 | +| 2025年5月 | 100 个 | +| 2025年6月 | 9 个 | + +## 重要提交概览 + +### 版本发布 +- [20250427_bd2313f](20250427_bd2313f.md) - 0.7.9.1 +- [20250428_f84111e](20250428_f84111e.md) - 0.7.9.2 +- [20250428_148e4c8](20250428_148e4c8.md) - 0.8.0 +- [20250428_5804627](20250428_5804627.md) - 0.8.0.1 +- [20250428_2dc729c](20250428_2dc729c.md) - 0.8.0.2 +- [20250429_9045624](20250429_9045624.md) - 0.8.0.3 +- [20250429_3b810fd](20250429_3b810fd.md) - 0.8.0.4 +- [20250429_f50cfed](20250429_f50cfed.md) - 0.8.0.5 + +### 重要功能 +- [20250501_964cef2](20250501_964cef2.md) - 通知系统,自习系统 +- [20250501_88bd92e](20250501_88bd92e.md) - Hub组件支持双击打开图片,三指翻页退出 +- [20250502_44b87ba](20250502_44b87ba.md) - 桌面组件 +- [20250502_1c3cc76](20250502_1c3cc76.md) - 状态栏文字组件,支持位置放置 +- [20250503_0662565](20250503_0662565.md) - 文件管理组件跨平台支持 +- [20250505_e1d5a0c](20250505_e1d5a0c.md) - 电源菜单 +- [20250505_e69bbf8](20250505_e69bbf8.md) - 快捷方式组件 +- [20250506_8c94253](20250506_8c94253.md) - 快捷方式组件透明问题修复 +- [20250507_11130cf](20250507_11130cf.md) - 更新界面多标题修复 +- [20250509_cb96180](20250509_cb96180.md) - 白板笔色自适应主题 +- [20250510_4a89c23](20250510_4a89c23.md) - 便签组件 +- [20250511_76d13ac](20250511_76d13ac.md) - 开发者调试工具 +- [20250514_c2cc62b](20250514_c2cc62b.md) - 淡入淡出动画 +- [20250514_03e32ee](20250514_03e32ee.md) - 网速显示组件 +- [20250516_81ee19f](20250516_81ee19f.md) - AOT启动器 +- [20250519_02547ee](20250519_02547ee.md) - 引入Velopack更新系统 +- [20250520_a31ae3c](20250520_a31ae3c.md) - Penguin Logistics Online Network Distribution System +- [20250521_703ed7b](20250521_703ed7b.md) - 重构启动器启动、日志和主机解析 +- [20250521_9224c9a](20250521_9224c9a.md) - 强化OOBE、启动源和权限流程 +- [20250521_aa7c118](20250521_aa7c118.md) - 添加外部公共IPC主机/客户端和插件SDK +- [20250522_e20462a](20250522_e20462a.md) - 设置窗口独立化和任务栏感知 +- [20250523_8b8c7d1](20250523_8b8c7d1.md) - 简化启动画面为淡入淡出 +- [20250524_5b4b9f3](20250524_5b4b9f3.md) - OOBE重新设计、主题和数据位置支持 +- [20250525_d310fc5](20250525_d310fc5.md) - Avalonia 12升级 +- [20250528_9fb4137](20250528_9fb4137.md) - 迁移代码库到Avalonia 12 API +- [20250528_93d6d93](20250528_93d6d93.md) - 迁移到Avalonia 12和Plugin SDK v5 +- [20250529_eb066b5](20250529_eb066b5.md) - 引入渲染模式和静态组件预览 +- [20250530_0348324](20250530_0348324.md) - 添加LauncherPathResolver和重构数据路径 +- [20250601_6a30bc6](20250601_6a30bc6.md) - 重构设置窗口UI和主题 +- [20250601_49bbae2](20250601_49bbae2.md) - 使用Fluent Shell和搜索重新设计设置窗口 +- [20250603_60e7f31](20250603_60e7f31.md) - 添加OOBE启动演示和设置合并 +- [20250605_68ca532](20250605_68ca532.md) - 将白板持久化移动到文件存储 +- [20250605_aa7e15d](20250605_aa7e15d.md) - 添加CODE_WIKI和更新本地化 +- [20250605_84caca0](20250605_84caca0.md) - 数据设置页面和存储扫描器 + +### 样式统一 +- [20250428_7a26848](20250428_7a26848.md) - CI.圆角 +- [20250505_8583465](20250505_8583465.md) - 圆角统一 + +### Bug 修复 +- [20250430_2272d35](20250430_2272d35.md) - 回退 0.8.0.41 +- [20250501_ff01471](20250501_ff01471.md) - 修复智教 Hub 组件 +- [20250502_021c7ff](20250502_021c7ff.md) - 修复智教Hub组件 +- [20250502_00339f0](20250502_00339f0.md) - 修复Rinshub +- [20250506_66ae0b0](20250506_66ae0b0.md) - 课表组件日间模式字体颜色修复 +- [20250508_cf4b8e2](20250508_cf4b8e2.md) - 央广网新闻组件第二行显示修复 +- [20250508_e8ba847](20250508_e8ba847.md) - 融合桌面设置窗口修复 +- [20250512_b933f3b](20250512_b933f3b.md) - 开发者调试工具设置持久化修复 +- [20250512_ce5acf5](20250512_ce5acf5.md) - 快捷方式组件透明问题修复 +- [20250515_e9ff590](20250515_e9ff590.md) - 可爱的我一直在修CI +- [20250516_6c526ff](20250516_6c526ff.md) - 修CI,Linux问题 +- [20250518_9cf3a15](20250518_9cf3a15.md) - 修复启动器无法正常启动的问题 +- [20250518_4f9feaf](20250518_4f9feaf.md) - 继续修CI +- [20250519_8e39ea8](20250519_8e39ea8.md) - GitHub Action工作流修复 +- [20250519_6343164](20250519_6343164.md) - 修CI,修融合桌面,修启动器 +- [20250528_f8073c2](20250528_f8073c2.md) - 修复合并产生的问题 + +### CI/CD 相关 +- [20250515_59c4824](20250515_59c4824.md) - 启动器一定要能够启动 +- [20250516_53ff98f](20250516_53ff98f.md) - Update build.yml +- [20250518_e8d2575](20250518_e8d2575.md) - 测试增量更新Velopack +- [20250519_f6a6f97](20250519_f6a6f97.md) - 迁移发布管道到签名文件映射 +- [20250519_858612f](20250519_858612f.md) - 使可选S3上传步骤工作流解析安全 +- [20250519_833c693](20250519_833c693.md) - 使增量包生成对空差异和Linux路径健壮 +- [20250519_24b361b](20250519_24b361b.md) - 轮换启动器更新公钥 +- [20250519_cddebbc](20250519_cddebbc.md) - 恢复稳定的启动器更新公钥 +- [20250519_48ce93b](20250519_48ce93b.md) - 同步启动器公钥与更新签名密钥 +- [20250519_1e6b61d](20250519_1e6b61d.md) - 规范化PEM行尾 +- [20250519_c5ef418](20250519_c5ef418.md) - 轮换启动器公钥以匹配CI签名密钥 +- [20250519_62e7d96](20250519_62e7d96.md) - 通过SPKI而非PEM文本比较签名密钥 +- [20250519_fb21bcd](20250519_fb21bcd.md) - 重构更新后端到主机管理的PDC管道 +- [20250520_81e0081](20250520_81e0081.md) - 修复发布工作流环境密钥冲突 +- [20250520_8447910](20250520_8447910.md) - 放宽发布PDC预检查仅需要S3 +- [20250520_8c58b1c](20250520_8c58b1c.md) - 为发布添加本地PDC模拟回退 +- [20250520_e82c5d4](20250520_e82c5d4.md) - 为PDCC安装程序步骤设置GH_TOKEN +- [20250521_001a42a](20250521_001a42a.md) - 修复Windows安装程序脚本路径 +- [20250521_631dc77](20250521_631dc77.md) - 规范化发布工件 +- [20250521_8a75bc8](20250521_8a75bc8.md) - 围绕PLONDS和DDSS重建发布管道 + +### 文档更新 +- [20250505_d30af21](20250505_d30af21.md) - 加入CHANGELOG +- [20250510_d62226f](20250510_d62226f.md) - 更新CHANGELOG +- [20250512_1b22e9d](20250512_1b22e9d.md) - 新增插件开发文档 + +## 查看完整提交历史 + +如需查看完整的提交历史,请使用以下命令: + +```bash +# 查看所有提交 +git log --oneline + +# 查看详细提交信息 +git log --pretty=format:"%H|%an|%ad|%s" --date=format:"%Y-%m-%d %H:%M:%S" + +# 查看特定提交的详细变更 +git show +``` + +## 文档内容结构 + +每个 Markdown 文件包含以下部分: + +1. **基本信息表** - 提交哈希、作者、时间、父提交等 +2. **提交信息分析** - 对提交内容的解读 +3. **变更概览** - 查看详细变更的命令 +4. **提交类型** - 分类标记(版本发布、功能新增、Bug修复等) +5. **相关文档/链接** - 与提交相关的项目文档 + +## 更新时间 + +本文档集生成于:2026-05-07 diff --git a/parse_git_log.py b/parse_git_log.py new file mode 100644 index 0000000..b0b7f73 --- /dev/null +++ b/parse_git_log.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Git HEAD 日志解析脚本 +读取 .git/logs/HEAD 文件,提取 commit 类型的提交记录并输出为 JSON 格式 +""" + +import json +import re +from datetime import datetime, timezone, timedelta +from pathlib import Path +from typing import Optional + + +class GitCommit: + """表示一个 Git 提交记录""" + + def __init__( + self, + parent_hash: str, + commit_hash: str, + author: str, + email: str, + timestamp: int, + timezone_str: str, + message: str + ): + self.parent_hash = parent_hash + self.commit_hash = commit_hash + self.author = author + self.email = email + self.timestamp = timestamp + self.timezone_str = timezone_str + self.message = message + + def to_dict(self) -> dict: + """转换为字典格式""" + # 将 Unix 时间戳转换为 ISO 8601 格式的时间字符串 + dt = self._parse_timestamp() + + return { + "parent_hash": self.parent_hash, + "commit_hash": self.commit_hash, + "author": self.author, + "email": self.email, + "timestamp": self.timestamp, + "datetime": dt.isoformat() if dt else None, + "timezone": self.timezone_str, + "message": self.message + } + + def _parse_timestamp(self) -> Optional[datetime]: + """将 Unix 时间戳和时区解析为 datetime 对象""" + try: + # 解析时区偏移 (例如 +0800 表示东八区) + tz_sign = 1 if self.timezone_str[0] == '+' else -1 + tz_hours = int(self.timezone_str[1:3]) + tz_minutes = int(self.timezone_str[3:5]) + tz_offset = timedelta(hours=tz_sign * tz_hours, minutes=tz_sign * tz_minutes) + + # 创建带时区的 datetime + tz = timezone(tz_offset) + return datetime.fromtimestamp(self.timestamp, tz) + except (ValueError, IndexError): + return None + + +def parse_git_head_log(log_path: str) -> list[GitCommit]: + """ + 解析 Git HEAD 日志文件 + + Args: + log_path: HEAD 日志文件的路径 + + Returns: + 提交记录列表(仅包含 commit 类型的记录) + """ + commits = [] + + # 正则表达式匹配 Git HEAD 日志格式 + # 格式: <父哈希> <当前哈希> <作者> <邮箱> <时间戳> <时区>\t<操作类型>: <提交信息> + pattern = re.compile( + r'^(?P[0-9a-f]{40})\s+' + r'(?P[0-9a-f]{40})\s+' + r'(?P[^<]+)\s+' + r'<(?P[^>]+)>\s+' + r'(?P\d+)\s+' + r'(?P[+-]\d{4})\s*' + r'\t(?P[^:]+):\s*(?P.+)$' + ) + + # 也匹配带括号操作类型的格式,如 "commit (merge):" + pattern_with_paren = re.compile( + r'^(?P[0-9a-f]{40})\s+' + r'(?P[0-9a-f]{40})\s+' + r'(?P[^<]+)\s+' + r'<(?P[^>]+)>\s+' + r'(?P\d+)\s+' + r'(?P[+-]\d{4})\s*' + r'\t(?P\w+)\s*\([^)]+\):\s*(?P.+)$' + ) + + path = Path(log_path) + if not path.exists(): + raise FileNotFoundError(f"日志文件不存在: {log_path}") + + with open(path, 'r', encoding='utf-8') as f: + for line_num, line in enumerate(f, 1): + line = line.strip() + if not line: + continue + + # 先尝试匹配带括号的格式 + match = pattern_with_paren.match(line) + if not match: + match = pattern.match(line) + + if not match: + continue + + data = match.groupdict() + operation = data['operation'].lower() + + # 只处理 commit 类型的记录 + if operation not in ('commit',): + continue + + commit = GitCommit( + parent_hash=data['parent_hash'], + commit_hash=data['commit_hash'], + author=data['author'].strip(), + email=data['email'], + timestamp=int(data['timestamp']), + timezone_str=data['timezone'], + message=data['message'].strip() + ) + commits.append(commit) + + return commits + + +def main(): + """主函数""" + # 默认日志路径 + default_log_path = r'd:\github\LanMountainDesktop\.git\logs\HEAD' + + # 可以通过命令行参数指定路径 + import sys + log_path = sys.argv[1] if len(sys.argv) > 1 else default_log_path + + try: + commits = parse_git_head_log(log_path) + + # 转换为字典列表 + result = { + "total_commits": len(commits), + "source": log_path, + "commits": [commit.to_dict() for commit in commits] + } + + # 输出为 JSON 格式 + json_output = json.dumps(result, ensure_ascii=False, indent=2) + print(json_output) + + except FileNotFoundError as e: + print(f"错误: {e}", file=sys.stderr) + sys.exit(1) + except Exception as e: + print(f"解析失败: {e}", file=sys.stderr) + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/scripts/Analyze-GitCommits.ps1 b/scripts/Analyze-GitCommits.ps1 new file mode 100644 index 0000000..08917c6 --- /dev/null +++ b/scripts/Analyze-GitCommits.ps1 @@ -0,0 +1,552 @@ +<# +.SYNOPSIS + Git Commit 深度分析工具 + 用于解析 Git 对象文件并生成详细的代码变更分析报告 +#> + +param( + [string]$RepoPath = "d:\github\LanMountainDesktop", + [string]$OutputDir = "docs\auto_commit_md" +) + +# 添加压缩支持 +Add-Type -AssemblyName System.IO.Compression + +function Read-GitObject { + param([string]$RepoPath, [string]$ObjHash) + + if ($ObjHash.Length -lt 4) { return $null } + + $objDir = $ObjHash.Substring(0, 2) + $objFile = $ObjHash.Substring(2) + $objPath = Join-Path $RepoPath ".git\objects\$objDir\$objFile" + + if (-not (Test-Path $objPath)) { return $null } + + try { + $compressedData = [System.IO.File]::ReadAllBytes($objPath) + + # 使用 .NET 解压缩 + $ms = New-Object System.IO.MemoryStream(,$compressedData) + $deflate = New-Object System.IO.Compression.DeflateStream($ms, [System.IO.Compression.CompressionMode]::Decompress) + $reader = New-Object System.IO.StreamReader($deflate) + $content = $reader.ReadToEnd() + $reader.Close() + $deflate.Close() + $ms.Close() + + # 解析对象头 + $nullIdx = $content.IndexOf("`0") + if ($nullIdx -eq -1) { return $null } + + $header = $content.Substring(0, $nullIdx) + $body = $content.Substring($nullIdx + 1) + $objType = $header.Split(' ')[0] + + return @{ + Type = $objType + Content = $body + RawContent = [System.Text.Encoding]::UTF8.GetBytes($body) + } + } + catch { + Write-Host "Error reading object ${ObjHash}: $_" -ForegroundColor Red + return $null + } +} + +function Parse-Commit { + param([string]$RepoPath, [string]$CommitHash) + + $obj = Read-GitObject -RepoPath $RepoPath -ObjHash $CommitHash + if (-not $obj -or $obj.Type -ne 'commit') { return $null } + + $content = $obj.Content + $lines = $content -split "`n" + + $parent = $null + $tree = $null + $author = $null + $email = $null + $timestamp = $null + $timezone = $null + $messageLines = @() + $inMessage = $false + + foreach ($line in $lines) { + if ($inMessage) { + $messageLines += $line + } + elseif ($line -match '^tree (.+)') { + $tree = $matches[1].Trim() + } + elseif ($line -match '^parent (.+)') { + $parent = $matches[1].Trim() + } + elseif ($line -match '^author (.+) <(.+)> (\d+) ([+-]\d+)') { + $author = $matches[1] + $email = $matches[2] + $timestamp = [int]$matches[3] + $timezone = $matches[4] + } + elseif ($line -eq '') { + $inMessage = $true + } + } + + $message = ($messageLines -join "`n").Trim() + + return @{ + Hash = $CommitHash + Parent = $parent + Tree = $tree + Author = $author + Email = $email + Timestamp = $timestamp + Timezone = $timezone + Message = $message + } +} + +function Parse-Tree { + param([string]$RepoPath, [string]$TreeHash) + + $obj = Read-GitObject -RepoPath $RepoPath -ObjHash $TreeHash + if (-not $obj -or $obj.Type -ne 'tree') { return @{} } + + $entries = @{} + $content = $obj.RawContent + $idx = 0 + + while ($idx -lt $content.Length) { + # 查找空格 + $spaceIdx = [Array]::IndexOf($content, [byte][char]' ', $idx) + if ($spaceIdx -eq -1) { break } + + $mode = [System.Text.Encoding]::UTF8.GetString($content[$idx..($spaceIdx-1)]) + + # 查找 null + $nullIdx = [Array]::IndexOf($content, [byte]0, $spaceIdx) + if ($nullIdx -eq -1) { break } + + $name = [System.Text.Encoding]::UTF8.GetString($content[($spaceIdx+1)..($nullIdx-1)]) + + # 读取 20 字节 SHA + $shaStart = $nullIdx + 1 + $shaEnd = $shaStart + 20 + if ($shaEnd -gt $content.Length) { break } + + $shaBytes = $content[$shaStart..($shaEnd-1)] + $sha = [BitConverter]::ToString($shaBytes).Replace("-", "").ToLower() + + $entries[$name] = $sha + $idx = $shaEnd + } + + return $entries +} + +function Get-CommitChanges { + param([string]$RepoPath, [string]$CommitHash) + + $commit = Parse-Commit -RepoPath $RepoPath -CommitHash $CommitHash + if (-not $commit) { return @() } + + $currentTree = Parse-Tree -RepoPath $RepoPath -TreeHash $commit.Tree + $parentTree = @{} + + if ($commit.Parent) { + $parentCommit = Parse-Commit -RepoPath $RepoPath -CommitHash $commit.Parent + if ($parentCommit) { + $parentTree = Parse-Tree -RepoPath $RepoPath -TreeHash $parentCommit.Tree + } + } + + $changes = @() + $stats = @{ Added = 0; Modified = 0; Deleted = 0 } + + $allPaths = ($currentTree.Keys + $parentTree.Keys) | Select-Object -Unique + + foreach ($path in $allPaths) { + if ($currentTree.ContainsKey($path) -and -not $parentTree.ContainsKey($path)) { + $changes += @{ Path = $path; Type = 'added' } + $stats.Added++ + } + elseif (-not $currentTree.ContainsKey($path) -and $parentTree.ContainsKey($path)) { + $changes += @{ Path = $path; Type = 'deleted' } + $stats.Deleted++ + } + elseif ($currentTree[$path] -ne $parentTree[$path]) { + $changes += @{ Path = $path; Type = 'modified' } + $stats.Modified++ + } + } + + return @{ + Changes = $changes + Stats = $stats + Commit = $commit + } +} + +function Assess-Importance { + param([string]$Message, [array]$Changes, [hashtable]$Stats) + + $msgLower = $Message.ToLower() + + $criticalKeywords = @('fix', 'bug', 'security', 'crash', 'memory leak', 'deadlock') + $featureKeywords = @('feat', 'feature', 'add', 'implement', 'new') + $refactorKeywords = @('refactor', 'restructure', 'cleanup', 'optimize') + + foreach ($kw in $criticalKeywords) { + if ($msgLower -like "*$kw*") { return 'critical' } + } + + foreach ($kw in $featureKeywords) { + if ($msgLower -like "*$kw*") { return 'feature' } + } + + $totalChanges = $Stats.Added + $Stats.Modified + $Stats.Deleted + if ($totalChanges -gt 20) { return 'major' } + + foreach ($kw in $refactorKeywords) { + if ($msgLower -like "*$kw*") { return 'refactor' } + } + + return 'minor' +} + +function Get-FileTypeDistribution { + param([array]$Changes) + + $fileTypes = @{} + foreach ($change in $Changes) { + $ext = [System.IO.Path]::GetExtension($change.Path) + if ([string]::IsNullOrEmpty($ext)) { $ext = 'no_extension' } + if (-not $fileTypes.ContainsKey($ext)) { $fileTypes[$ext] = 0 } + $fileTypes[$ext]++ + } + return $fileTypes +} + +function Analyze-Impact { + param([array]$Changes, [string]$Message) + + $impacts = @() + + # 分析受影响的模块 + $modules = @{} + foreach ($change in $Changes) { + $parts = $change.Path -split '/' + if ($parts.Length -gt 1) { + if (-not $modules.ContainsKey($parts[0])) { $modules[$parts[0]] = 0 } + $modules[$parts[0]]++ + } + } + + if ($modules.Count -gt 0) { + $moduleList = ($modules.GetEnumerator() | Sort-Object Value -Descending | Select-Object -First 5 | ForEach-Object { $_.Key }) -join ', ' + $impacts += "受影响的模块: $moduleList" + } + + # 分析文件类型 + $fileTypes = Get-FileTypeDistribution -Changes $Changes + if ($fileTypes.ContainsKey('.cs')) { + $impacts += "涉及 $($fileTypes['.cs']) 个 C# 文件变更" + } + if ($fileTypes.ContainsKey('.axaml') -or $fileTypes.ContainsKey('.xaml')) { + $impacts += "涉及 UI/XAML 文件变更" + } + if ($fileTypes.ContainsKey('.md')) { + $impacts += "涉及文档更新" + } + + # 根据提交消息分析 + $msgLower = $Message.ToLower() + if ($msgLower -like '*fix*') { + $impacts += "这是一个修复性提交,可能解决现有问题" + } + if ($msgLower -like '*feat*' -or $msgLower -like '*feature*') { + $impacts += "这是一个功能新增提交,扩展了项目能力" + } + if ($msgLower -like '*refactor*') { + $impacts += "这是一个重构提交,改善了代码结构" + } + + return $impacts +} + +function Generate-ReviewPoints { + param([array]$Changes, [string]$Message) + + $points = @() + + # 检查关键文件 + $criticalPatterns = @('Program.cs', 'App.axaml', 'MainWindow', 'Core', 'Service') + foreach ($change in $Changes) { + foreach ($pattern in $criticalPatterns) { + if ($change.Path -like "*$pattern*") { + $points += "关键文件变更: $($change.Path) - 需要特别关注" + break + } + } + } + + # 检查提交消息质量 + if ($Message.Length -lt 10) { + $points += "提交消息较短,建议提供更详细的变更说明" + } + + if ($Message.ToLower() -like '*wip*' -or $Message.ToLower() -like '*todo*') { + $points += "提交包含 WIP/TODO 标记,确认是否已完成" + } + + # 检查文件删除 + $deleted = $Changes | Where-Object { $_.Type -eq 'deleted' } + if ($deleted.Count -gt 0) { + $points += "删除了 $($deleted.Count) 个文件,确认是否有其他代码依赖这些文件" + } + + return $points +} + +function Get-KeySnippets { + param([string]$RepoPath, [array]$Changes) + + $snippets = @() + $count = 0 + + foreach ($change in $Changes | Select-Object -First 10) { + if ($change.Type -eq 'deleted') { continue } + + $filePath = Join-Path $RepoPath $change.Path + if (Test-Path $filePath -PathType Leaf) { + try { + $content = Get-Content $filePath -Raw -Encoding UTF8 -ErrorAction SilentlyContinue + if ($content) { + $lines = $content -split "`n" + $preview = if ($lines.Count -gt 30) { ($lines[0..29] -join "`n") } else { $content } + + $snippets += @{ + File = $change.Path + Type = $change.Type + LinesCount = $lines.Count + Preview = $preview.Substring(0, [Math]::Min(2000, $preview.Length)) + } + $count++ + } + } + catch { + # 忽略无法读取的文件 + } + } + } + + return $snippets +} + +function Generate-MarkdownReport { + param([hashtable]$Analysis) + + $lines = @() + + # 标题 + $lines += "# Commit 深度分析报告" + $lines += "" + $lines += "**提交哈希**: ``$($Analysis.CommitHash)``" + $lines += "**提交时间**: $($Analysis.Date)" + $lines += "**作者**: $($Analysis.Author) <$($Analysis.Email)>" + $lines += "**重要性**: $($Analysis.Importance.ToUpper())" + $lines += "" + + # 提交消息 + $lines += "## 提交消息" + $lines += "``````" + $lines += $Analysis.Message + $lines += "``````" + $lines += "" + + # 变更统计 + $lines += "## 变更统计" + $lines += "- **新增文件**: $($Analysis.Stats.Added)" + $lines += "- **修改文件**: $($Analysis.Stats.Modified)" + $lines += "- **删除文件**: $($Analysis.Stats.Deleted)" + $lines += "" + + # 文件类型分布 + if ($Analysis.FileTypes.Count -gt 0) { + $lines += "### 文件类型分布" + $sortedTypes = $Analysis.FileTypes.GetEnumerator() | Sort-Object Value -Descending + foreach ($ft in $sortedTypes) { + $lines += "- ``$($ft.Key)``: $($ft.Value) 个文件" + } + $lines += "" + } + + # 变更文件列表 + if ($Analysis.Changes.Count -gt 0) { + $lines += "## 变更文件列表" + $lines += "| 文件路径 | 变更类型 |" + $lines += "|---------|---------|" + $typeMap = @{ 'added' = '新增'; 'modified' = '修改'; 'deleted' = '删除' } + foreach ($change in $Analysis.Changes | Select-Object -First 50) { + $typeStr = if ($typeMap.ContainsKey($change.Type)) { $typeMap[$change.Type] } else { $change.Type } + $lines += "| ``$($change.Path)`` | $typeStr |" + } + $lines += "" + } + + # 影响分析 + if ($Analysis.ImpactAnalysis.Count -gt 0) { + $lines += "## 影响分析" + foreach ($impact in $Analysis.ImpactAnalysis) { + $lines += "- $impact" + } + $lines += "" + } + + # 代码审查要点 + if ($Analysis.ReviewPoints.Count -gt 0) { + $lines += "## 代码审查要点" + foreach ($point in $Analysis.ReviewPoints) { + $lines += "- ⚠️ $point" + } + $lines += "" + } + + # 关键代码片段 + if ($Analysis.KeySnippets.Count -gt 0) { + $lines += "## 关键代码片段" + foreach ($snippet in $Analysis.KeySnippets | Select-Object -First 5) { + $lines += "### $($snippet.File)" + $lines += "- **类型**: $($snippet.Type)" + $lines += "- **行数**: $($snippet.LinesCount)" + $lines += "" + $lines += "``````" + $lines += $snippet.Preview + $lines += "``````" + $lines += "" + } + } + + return $lines -join "`n" +} + +# 主逻辑 +Write-Host "Git Commit 深度分析工具" -ForegroundColor Cyan +Write-Host "======================" -ForegroundColor Cyan +Write-Host "" + +# 确保输出目录存在 +$outputPath = Join-Path $RepoPath $OutputDir +if (-not (Test-Path $outputPath)) { + New-Item -ItemType Directory -Path $outputPath -Force | Out-Null +} + +# 读取 HEAD 日志 +$headLogPath = Join-Path $RepoPath ".git\logs\HEAD" +if (-not (Test-Path $headLogPath)) { + Write-Host "错误: 找不到 HEAD 日志文件: $headLogPath" -ForegroundColor Red + exit 1 +} + +# 解析 HEAD 日志 +$commits = @() +$logContent = Get-Content $headLogPath + +foreach ($line in $logContent) { + $line = $line.Trim() + if ([string]::IsNullOrEmpty($line)) { continue } + + # 解析日志行 + $parts = $line -split "`t" + if ($parts.Count -lt 2) { continue } + + $metaPart = $parts[0] + $actionPart = $parts[1] + + $metaTokens = $metaPart -split '\s+' + if ($metaTokens.Count -lt 5) { continue } + + $newHash = $metaTokens[1] + + # 只处理 commit 操作 + if ($actionPart -match 'commit' -or $actionPart -match '^commit:') { + $message = $actionPart -replace '^commit:\s*', '' + $commits += @{ + Hash = $newHash + Message = $message + } + } +} + +Write-Host "找到 $($commits.Count) 个 commit" -ForegroundColor Green +Write-Host "" + +# 分析每个 commit +$processed = 0 +$success = 0 + +foreach ($commitInfo in $commits) { + $commitHash = $commitInfo.Hash + $shortHash = $commitHash.Substring(0, 7) + $processed++ + + Write-Host "[$processed/$($commits.Count)] 分析 commit: $shortHash - $($commitInfo.Message.Substring(0, [Math]::Min(50, $commitInfo.Message.Length)))" -NoNewline + + try { + # 获取变更 + $changeInfo = Get-CommitChanges -RepoPath $RepoPath -CommitHash $commitHash + if (-not $changeInfo) { + Write-Host " [跳过]" -ForegroundColor Yellow + continue + } + + $commit = $changeInfo.Commit + $changes = $changeInfo.Changes + $stats = $changeInfo.Stats + + # 分析 + $importance = Assess-Importance -Message $commit.Message -Changes $changes -Stats $stats + $fileTypes = Get-FileTypeDistribution -Changes $changes + $impactAnalysis = Analyze-Impact -Changes $changes -Message $commit.Message + $reviewPoints = Generate-ReviewPoints -Changes $changes -Message $commit.Message + $keySnippets = Get-KeySnippets -RepoPath $RepoPath -Changes $changes + + # 构建分析结果 + $analysis = @{ + CommitHash = $commitHash + Message = $commit.Message + Author = $commit.Author + Email = $commit.Email + Timestamp = $commit.Timestamp + Date = (Get-Date -Date ([DateTime]::UnixEpoch.AddSeconds($commit.Timestamp)) -Format 'yyyy-MM-dd HH:mm:ss') + Stats = $stats + Changes = $changes + FileTypes = $fileTypes + Importance = $importance + ImpactAnalysis = $impactAnalysis + ReviewPoints = $reviewPoints + KeySnippets = $keySnippets + } + + # 生成报告 + $report = Generate-MarkdownReport -Analysis $analysis + + # 保存报告 + $dateStr = Get-Date -Date ([DateTime]::UnixEpoch.AddSeconds($commit.Timestamp)) -Format 'yyyyMMdd' + $filename = "${dateStr}_${shortHash}_deep_analysis.md" + $outputFile = Join-Path $outputPath $filename + + $report | Out-File -FilePath $outputFile -Encoding UTF8 + + Write-Host " [已保存]" -ForegroundColor Green + $success++ + } + catch { + Write-Host " [错误: $_]" -ForegroundColor Red + } +} + +Write-Host "" +Write-Host "分析完成! 成功处理 $success / $processed 个 commit" -ForegroundColor Cyan diff --git a/scripts/GitCommitAnalyzer.cs b/scripts/GitCommitAnalyzer.cs new file mode 100644 index 0000000..1d56e6d --- /dev/null +++ b/scripts/GitCommitAnalyzer.cs @@ -0,0 +1,662 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace GitCommitAnalyzer +{ + public class GitObject + { + public string Type { get; set; } + public byte[] Content { get; set; } + } + + public class CommitInfo + { + public string Hash { get; set; } + public string Parent { get; set; } + public string Tree { get; set; } + public string Author { get; set; } + public string Email { get; set; } + public long Timestamp { get; set; } + public string Timezone { get; set; } + public string Message { get; set; } + } + + public class FileChange + { + public string Path { get; set; } + public string ChangeType { get; set; } + } + + public class CommitAnalysis + { + public string CommitHash { get; set; } + public string Message { get; set; } + public string Author { get; set; } + public string Email { get; set; } + public long Timestamp { get; set; } + public string Date { get; set; } + public Dictionary Stats { get; set; } + public List Changes { get; set; } + public Dictionary FileTypes { get; set; } + public string Importance { get; set; } + public List ImpactAnalysis { get; set; } + public List ReviewPoints { get; set; } + public List KeySnippets { get; set; } + } + + public class KeySnippet + { + public string File { get; set; } + public string Type { get; set; } + public int LinesCount { get; set; } + public string Preview { get; set; } + } + + public class GitObjectParser + { + private readonly string _repoPath; + private readonly string _objectsPath; + private readonly Dictionary _commitCache = new(); + private readonly Dictionary> _treeCache = new(); + + public GitObjectParser(string repoPath) + { + _repoPath = repoPath; + _objectsPath = Path.Combine(repoPath, ".git", "objects"); + } + + public GitObject ReadObject(string objHash) + { + if (objHash.Length < 4) return null; + + var objDir = objHash.Substring(0, 2); + var objFile = objHash.Substring(2); + var objPath = Path.Combine(_objectsPath, objDir, objFile); + + if (!File.Exists(objPath)) return null; + + try + { + var compressedData = File.ReadAllBytes(objPath); + + // 使用 zlib 解压缩 + using var ms = new MemoryStream(compressedData); + // 跳过 zlib 头 (2 字节) + ms.ReadByte(); + ms.ReadByte(); + + using var deflate = new DeflateStream(ms, CompressionMode.Decompress); + using var result = new MemoryStream(); + deflate.CopyTo(result); + var decompressed = result.ToArray(); + + // 解析对象头 + var nullIdx = Array.IndexOf(decompressed, (byte)0); + if (nullIdx == -1) return null; + + var header = Encoding.UTF8.GetString(decompressed, 0, nullIdx); + var objType = header.Split(' ')[0]; + + var content = new byte[decompressed.Length - nullIdx - 1]; + Array.Copy(decompressed, nullIdx + 1, content, 0, content.Length); + + return new GitObject { Type = objType, Content = content }; + } + catch (Exception ex) + { + Console.WriteLine($"Error reading object {objHash}: {ex.Message}"); + return null; + } + } + + public CommitInfo ParseCommit(string commitHash) + { + if (_commitCache.ContainsKey(commitHash)) + return _commitCache[commitHash]; + + var obj = ReadObject(commitHash); + if (obj == null || obj.Type != "commit") + return null; + + var content = Encoding.UTF8.GetString(obj.Content); + var lines = content.Split('\n'); + + string parent = null, tree = null, author = null, email = null, timezone = null; + long timestamp = 0; + var messageLines = new List(); + var inMessage = false; + + foreach (var line in lines) + { + if (inMessage) + { + messageLines.Add(line); + } + else if (line.StartsWith("tree ")) + { + tree = line.Substring(5).Trim(); + } + else if (line.StartsWith("parent ")) + { + parent = line.Substring(7).Trim(); + } + else if (line.StartsWith("author ")) + { + var match = Regex.Match(line, @"^author (.+) <(.+)> (\d+) ([+-]\d+)$"); + if (match.Success) + { + author = match.Groups[1].Value; + email = match.Groups[2].Value; + timestamp = long.Parse(match.Groups[3].Value); + timezone = match.Groups[4].Value; + } + } + else if (line == "") + { + inMessage = true; + } + } + + var message = string.Join("\n", messageLines).Trim(); + + var commitInfo = new CommitInfo + { + Hash = commitHash, + Parent = parent, + Tree = tree, + Author = author ?? "Unknown", + Email = email ?? "", + Timestamp = timestamp, + Timezone = timezone ?? "", + Message = message + }; + + _commitCache[commitHash] = commitInfo; + return commitInfo; + } + + public Dictionary ParseTree(string treeHash) + { + if (_treeCache.ContainsKey(treeHash)) + return _treeCache[treeHash]; + + var obj = ReadObject(treeHash); + if (obj == null || obj.Type != "tree") + return new Dictionary(); + + var entries = new Dictionary(); + var content = obj.Content; + var idx = 0; + + while (idx < content.Length) + { + // 查找空格 + var spaceIdx = Array.IndexOf(content, (byte)' ', idx); + if (spaceIdx == -1) break; + + var mode = Encoding.UTF8.GetString(content, idx, spaceIdx - idx); + + // 查找 null + var nullIdx = Array.IndexOf(content, (byte)0, spaceIdx); + if (nullIdx == -1) break; + + var name = Encoding.UTF8.GetString(content, spaceIdx + 1, nullIdx - spaceIdx - 1); + + // 读取 20 字节 SHA + var shaStart = nullIdx + 1; + var shaEnd = shaStart + 20; + if (shaEnd > content.Length) break; + + var shaBytes = new byte[20]; + Array.Copy(content, shaStart, shaBytes, 0, 20); + var sha = BitConverter.ToString(shaBytes).Replace("-", "").ToLower(); + + entries[name] = sha; + idx = shaEnd; + } + + _treeCache[treeHash] = entries; + return entries; + } + + public (List Changes, Dictionary Stats, CommitInfo Commit) GetCommitChanges(string commitHash) + { + var commit = ParseCommit(commitHash); + if (commit == null) + return (new List(), new Dictionary(), null); + + var currentTree = ParseTree(commit.Tree); + var parentTree = new Dictionary(); + + if (!string.IsNullOrEmpty(commit.Parent)) + { + var parentCommit = ParseCommit(commit.Parent); + if (parentCommit != null) + { + parentTree = ParseTree(parentCommit.Tree); + } + } + + var changes = new List(); + var stats = new Dictionary { ["Added"] = 0, ["Modified"] = 0, ["Deleted"] = 0 }; + + var allPaths = currentTree.Keys.Union(parentTree.Keys).Distinct(); + + foreach (var path in allPaths) + { + if (currentTree.ContainsKey(path) && !parentTree.ContainsKey(path)) + { + changes.Add(new FileChange { Path = path, ChangeType = "added" }); + stats["Added"]++; + } + else if (!currentTree.ContainsKey(path) && parentTree.ContainsKey(path)) + { + changes.Add(new FileChange { Path = path, ChangeType = "deleted" }); + stats["Deleted"]++; + } + else if (currentTree.GetValueOrDefault(path) != parentTree.GetValueOrDefault(path)) + { + changes.Add(new FileChange { Path = path, ChangeType = "modified" }); + stats["Modified"]++; + } + } + + return (changes, stats, commit); + } + } + + public class CommitAnalyzer + { + private readonly GitObjectParser _parser; + private readonly string _repoPath; + + public CommitAnalyzer(string repoPath) + { + _parser = new GitObjectParser(repoPath); + _repoPath = repoPath; + } + + public CommitAnalysis AnalyzeCommit(string commitHash) + { + var (changes, stats, commit) = _parser.GetCommitChanges(commitHash); + if (commit == null) + return null; + + var fileTypes = GetFileTypeDistribution(changes); + var importance = AssessImportance(commit.Message, changes, stats); + var impactAnalysis = AnalyzeImpact(changes, commit.Message); + var reviewPoints = GenerateReviewPoints(changes, commit.Message); + var keySnippets = GetKeySnippets(changes); + + return new CommitAnalysis + { + CommitHash = commitHash, + Message = commit.Message, + Author = commit.Author, + Email = commit.Email, + Timestamp = commit.Timestamp, + Date = DateTimeOffset.FromUnixTimeSeconds(commit.Timestamp).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"), + Stats = stats, + Changes = changes, + FileTypes = fileTypes, + Importance = importance, + ImpactAnalysis = impactAnalysis, + ReviewPoints = reviewPoints, + KeySnippets = keySnippets + }; + } + + private Dictionary GetFileTypeDistribution(List changes) + { + var fileTypes = new Dictionary(); + foreach (var change in changes) + { + var ext = Path.GetExtension(change.Path); + if (string.IsNullOrEmpty(ext)) ext = "no_extension"; + if (!fileTypes.ContainsKey(ext)) fileTypes[ext] = 0; + fileTypes[ext]++; + } + return fileTypes; + } + + private string AssessImportance(string message, List changes, Dictionary stats) + { + var msgLower = message.ToLower(); + + var criticalKeywords = new[] { "fix", "bug", "security", "crash", "memory leak", "deadlock" }; + var featureKeywords = new[] { "feat", "feature", "add", "implement", "new" }; + var refactorKeywords = new[] { "refactor", "restructure", "cleanup", "optimize" }; + + if (criticalKeywords.Any(kw => msgLower.Contains(kw))) return "critical"; + if (featureKeywords.Any(kw => msgLower.Contains(kw))) return "feature"; + + var totalChanges = stats["Added"] + stats["Modified"] + stats["Deleted"]; + if (totalChanges > 20) return "major"; + + if (refactorKeywords.Any(kw => msgLower.Contains(kw))) return "refactor"; + + return "minor"; + } + + private List AnalyzeImpact(List changes, string message) + { + var impacts = new List(); + + // 分析受影响的模块 + var modules = new Dictionary(); + foreach (var change in changes) + { + var parts = change.Path.Split('/'); + if (parts.Length > 1) + { + if (!modules.ContainsKey(parts[0])) modules[parts[0]] = 0; + modules[parts[0]]++; + } + } + + if (modules.Count > 0) + { + var moduleList = string.Join(", ", modules.OrderByDescending(m => m.Value).Take(5).Select(m => m.Key)); + impacts.Add($"受影响的模块: {moduleList}"); + } + + // 分析文件类型 + var fileTypes = GetFileTypeDistribution(changes); + if (fileTypes.ContainsKey(".cs")) + impacts.Add($"涉及 {fileTypes[".cs"]} 个 C# 文件变更"); + if (fileTypes.ContainsKey(".axaml") || fileTypes.ContainsKey(".xaml")) + impacts.Add("涉及 UI/XAML 文件变更"); + if (fileTypes.ContainsKey(".md")) + impacts.Add("涉及文档更新"); + + // 根据提交消息分析 + var msgLower = message.ToLower(); + if (msgLower.Contains("fix")) + impacts.Add("这是一个修复性提交,可能解决现有问题"); + if (msgLower.Contains("feat") || msgLower.Contains("feature")) + impacts.Add("这是一个功能新增提交,扩展了项目能力"); + if (msgLower.Contains("refactor")) + impacts.Add("这是一个重构提交,改善了代码结构"); + + return impacts; + } + + private List GenerateReviewPoints(List changes, string message) + { + var points = new List(); + + // 检查关键文件 + var criticalPatterns = new[] { "Program.cs", "App.axaml", "MainWindow", "Core", "Service" }; + foreach (var change in changes) + { + foreach (var pattern in criticalPatterns) + { + if (change.Path.Contains(pattern)) + { + points.Add($"关键文件变更: {change.Path} - 需要特别关注"); + break; + } + } + } + + // 检查提交消息质量 + if (message.Length < 10) + points.Add("提交消息较短,建议提供更详细的变更说明"); + + if (message.ToLower().Contains("wip") || message.ToLower().Contains("todo")) + points.Add("提交包含 WIP/TODO 标记,确认是否已完成"); + + // 检查文件删除 + var deleted = changes.Where(c => c.ChangeType == "deleted").ToList(); + if (deleted.Count > 0) + points.Add($"删除了 {deleted.Count} 个文件,确认是否有其他代码依赖这些文件"); + + return points; + } + + private List GetKeySnippets(List changes) + { + var snippets = new List(); + + foreach (var change in changes.Take(10)) + { + if (change.ChangeType == "deleted") continue; + + var filePath = Path.Combine(_repoPath, change.Path); + if (File.Exists(filePath)) + { + try + { + var content = File.ReadAllText(filePath, Encoding.UTF8); + var lines = content.Split('\n'); + var preview = lines.Length > 30 ? string.Join("\n", lines.Take(30)) : content; + + snippets.Add(new KeySnippet + { + File = change.Path, + Type = change.ChangeType, + LinesCount = lines.Length, + Preview = preview.Length > 2000 ? preview.Substring(0, 2000) : preview + }); + } + catch + { + // 忽略无法读取的文件 + } + } + } + + return snippets; + } + } + + public class ReportGenerator + { + public static string GenerateMarkdownReport(CommitAnalysis analysis) + { + var sb = new StringBuilder(); + + // 标题 + sb.AppendLine("# Commit 深度分析报告"); + sb.AppendLine(); + sb.AppendLine($"**提交哈希**: `{analysis.CommitHash}`"); + sb.AppendLine($"**提交时间**: {analysis.Date}"); + sb.AppendLine($"**作者**: {analysis.Author} <{analysis.Email}>"); + sb.AppendLine($"**重要性**: {analysis.Importance.ToUpper()}"); + sb.AppendLine(); + + // 提交消息 + sb.AppendLine("## 提交消息"); + sb.AppendLine("```"); + sb.AppendLine(analysis.Message); + sb.AppendLine("```"); + sb.AppendLine(); + + // 变更统计 + sb.AppendLine("## 变更统计"); + sb.AppendLine($"- **新增文件**: {analysis.Stats["Added"]}"); + sb.AppendLine($"- **修改文件**: {analysis.Stats["Modified"]}"); + sb.AppendLine($"- **删除文件**: {analysis.Stats["Deleted"]}"); + sb.AppendLine(); + + // 文件类型分布 + if (analysis.FileTypes.Count > 0) + { + sb.AppendLine("### 文件类型分布"); + foreach (var ft in analysis.FileTypes.OrderByDescending(x => x.Value)) + { + sb.AppendLine($"- `{ft.Key}`: {ft.Value} 个文件"); + } + sb.AppendLine(); + } + + // 变更文件列表 + if (analysis.Changes.Count > 0) + { + sb.AppendLine("## 变更文件列表"); + sb.AppendLine("| 文件路径 | 变更类型 |"); + sb.AppendLine("|---------|---------|"); + var typeMap = new Dictionary + { + ["added"] = "新增", + ["modified"] = "修改", + ["deleted"] = "删除" + }; + foreach (var change in analysis.Changes.Take(50)) + { + var typeStr = typeMap.GetValueOrDefault(change.ChangeType, change.ChangeType); + sb.AppendLine($"| `{change.Path}` | {typeStr} |"); + } + sb.AppendLine(); + } + + // 影响分析 + if (analysis.ImpactAnalysis.Count > 0) + { + sb.AppendLine("## 影响分析"); + foreach (var impact in analysis.ImpactAnalysis) + { + sb.AppendLine($"- {impact}"); + } + sb.AppendLine(); + } + + // 代码审查要点 + if (analysis.ReviewPoints.Count > 0) + { + sb.AppendLine("## 代码审查要点"); + foreach (var point in analysis.ReviewPoints) + { + sb.AppendLine($"- ⚠️ {point}"); + } + sb.AppendLine(); + } + + // 关键代码片段 + if (analysis.KeySnippets.Count > 0) + { + sb.AppendLine("## 关键代码片段"); + foreach (var snippet in analysis.KeySnippets.Take(5)) + { + sb.AppendLine($"### {snippet.File}"); + sb.AppendLine($"- **类型**: {snippet.Type}"); + sb.AppendLine($"- **行数**: {snippet.LinesCount}"); + sb.AppendLine(); + sb.AppendLine("```"); + sb.AppendLine(snippet.Preview); + sb.AppendLine("```"); + sb.AppendLine(); + } + } + + return sb.ToString(); + } + } + + class Program + { + static void Main(string[] args) + { + var repoPath = @"d:\github\LanMountainDesktop"; + var outputDir = Path.Combine(repoPath, "docs", "auto_commit_md"); + + Console.WriteLine("Git Commit 深度分析工具"); + Console.WriteLine("======================"); + Console.WriteLine(); + + // 确保输出目录存在 + Directory.CreateDirectory(outputDir); + + // 读取 HEAD 日志 + var headLogPath = Path.Combine(repoPath, ".git", "logs", "HEAD"); + if (!File.Exists(headLogPath)) + { + Console.WriteLine($"错误: 找不到 HEAD 日志文件: {headLogPath}"); + return; + } + + // 解析 HEAD 日志 + var commits = new List<(string Hash, string Message)>(); + var logLines = File.ReadAllLines(headLogPath); + + foreach (var line in logLines) + { + var trimmedLine = line.Trim(); + if (string.IsNullOrEmpty(trimmedLine)) continue; + + var parts = trimmedLine.Split('\t'); + if (parts.Length < 2) continue; + + var metaPart = parts[0]; + var actionPart = parts[1]; + + var metaTokens = metaPart.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + if (metaTokens.Length < 5) continue; + + var newHash = metaTokens[1]; + + // 只处理 commit 操作 + if (actionPart.Contains("commit")) + { + var message = actionPart.Replace("commit:", "").Trim(); + commits.Add((newHash, message)); + } + } + + Console.WriteLine($"找到 {commits.Count} 个 commit"); + Console.WriteLine(); + + // 初始化分析器 + var analyzer = new CommitAnalyzer(repoPath); + + // 分析每个 commit + var processed = 0; + var success = 0; + + foreach (var commitInfo in commits) + { + var commitHash = commitInfo.Hash; + var shortHash = commitHash.Substring(0, 7); + processed++; + + Console.Write($"[{processed}/{commits.Count}] 分析 commit: {shortHash} - {commitInfo.Message.Substring(0, Math.Min(50, commitInfo.Message.Length))}"); + + try + { + // 分析提交 + var analysis = analyzer.AnalyzeCommit(commitHash); + if (analysis == null) + { + Console.WriteLine(" [跳过]"); + continue; + } + + // 生成报告 + var report = ReportGenerator.GenerateMarkdownReport(analysis); + + // 保存报告 + var dateStr = DateTimeOffset.FromUnixTimeSeconds(analysis.Timestamp).ToLocalTime().ToString("yyyyMMdd"); + var filename = $"{dateStr}_{shortHash}_deep_analysis.md"; + var outputFile = Path.Combine(outputDir, filename); + + File.WriteAllText(outputFile, report, Encoding.UTF8); + + Console.WriteLine(" [已保存]"); + success++; + } + catch (Exception ex) + { + Console.WriteLine($" [错误: {ex.Message}]"); + } + } + + Console.WriteLine(); + Console.WriteLine($"分析完成! 成功处理 {success} / {processed} 个 commit"); + } + } +} diff --git a/scripts/analyze_git_commits.py b/scripts/analyze_git_commits.py new file mode 100644 index 0000000..211c8e5 --- /dev/null +++ b/scripts/analyze_git_commits.py @@ -0,0 +1,600 @@ +#!/usr/bin/env python3 +""" +Git Commit 深度分析工具 +用于解析 Git 对象文件并生成详细的代码变更分析报告 +""" + +import zlib +import os +import re +import json +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Tuple, Optional, Any +from dataclasses import dataclass, field +from collections import defaultdict + + +@dataclass +class GitObject: + """Git 对象基类""" + obj_type: str + content: bytes + raw_data: bytes + + +@dataclass +class CommitInfo: + """提交信息""" + hash: str + parent: Optional[str] + tree: str + author: str + email: str + timestamp: int + timezone: str + message: str + changes: List[Dict] = field(default_factory=list) + stats: Dict = field(default_factory=dict) + + +@dataclass +class FileChange: + """文件变更信息""" + path: str + change_type: str # added, modified, deleted, renamed + old_path: Optional[str] = None + additions: int = 0 + deletions: int = 0 + diff_content: str = "" + + +class GitObjectParser: + """Git 对象解析器""" + + def __init__(self, repo_path: str): + self.repo_path = Path(repo_path) + self.objects_path = self.repo_path / ".git" / "objects" + self.commit_cache: Dict[str, CommitInfo] = {} + self.tree_cache: Dict[str, Dict[str, str]] = {} + + def read_object(self, obj_hash: str) -> Optional[GitObject]: + """读取并解压缩 Git 对象""" + if len(obj_hash) < 4: + return None + + obj_dir = obj_hash[:2] + obj_file = obj_hash[2:] + obj_path = self.objects_path / obj_dir / obj_file + + if not obj_path.exists(): + return None + + try: + with open(obj_path, 'rb') as f: + compressed_data = f.read() + + # 解压缩 zlib + decompressed = zlib.decompress(compressed_data) + + # 解析对象头和内容 + null_idx = decompressed.index(b'\x00') + header = decompressed[:null_idx].decode('utf-8') + content = decompressed[null_idx + 1:] + + obj_type = header.split()[0] + + return GitObject(obj_type=obj_type, content=content, raw_data=decompressed) + except Exception as e: + print(f"Error reading object {obj_hash}: {e}") + return None + + def parse_commit(self, commit_hash: str) -> Optional[CommitInfo]: + """解析 commit 对象""" + if commit_hash in self.commit_cache: + return self.commit_cache[commit_hash] + + obj = self.read_object(commit_hash) + if not obj or obj.obj_type != 'commit': + return None + + try: + content = obj.content.decode('utf-8', errors='replace') + lines = content.split('\n') + + parent = None + tree = None + author = None + email = None + timestamp = None + timezone = None + message_lines = [] + + in_message = False + for line in lines: + if in_message: + message_lines.append(line) + elif line.startswith('tree '): + tree = line[5:].strip() + elif line.startswith('parent '): + parent = line[7:].strip() + elif line.startswith('author '): + # author name timestamp timezone + match = re.match(r'author (.+) <(.+)> (\d+) ([+-]\d+)', line) + if match: + author = match.group(1) + email = match.group(2) + timestamp = int(match.group(3)) + timezone = match.group(4) + elif line == '': + in_message = True + + message = '\n'.join(message_lines).strip() + + commit_info = CommitInfo( + hash=commit_hash, + parent=parent, + tree=tree, + author=author or "Unknown", + email=email or "", + timestamp=timestamp or 0, + timezone=timezone or "", + message=message + ) + + self.commit_cache[commit_hash] = commit_info + return commit_info + + except Exception as e: + print(f"Error parsing commit {commit_hash}: {e}") + return None + + def parse_tree(self, tree_hash: str) -> Dict[str, str]: + """解析 tree 对象,返回文件路径到 blob hash 的映射""" + if tree_hash in self.tree_cache: + return self.tree_cache[tree_hash] + + obj = self.read_object(tree_hash) + if not obj or obj.obj_type != 'tree': + return {} + + entries = {} + content = obj.content + idx = 0 + + while idx < len(content): + # 查找空格分隔符 + space_idx = content.find(b' ', idx) + if space_idx == -1: + break + + mode = content[idx:space_idx].decode('utf-8') + + # 查找 null 分隔符 + null_idx = content.find(b'\x00', space_idx) + if null_idx == -1: + break + + name = content[space_idx + 1:null_idx].decode('utf-8', errors='replace') + + # 读取 20 字节的 SHA + sha_start = null_idx + 1 + sha_end = sha_start + 20 + if sha_end > len(content): + break + + sha = content[sha_start:sha_end].hex() + entries[name] = sha + + idx = sha_end + + self.tree_cache[tree_hash] = entries + return entries + + def get_blob_content(self, blob_hash: str) -> Optional[str]: + """获取 blob 对象的内容""" + obj = self.read_object(blob_hash) + if not obj or obj.obj_type != 'blob': + return None + try: + return obj.content.decode('utf-8', errors='replace') + except: + return None + + def compare_trees(self, old_tree: str, new_tree: str) -> List[FileChange]: + """比较两个 tree 对象,返回文件变更列表""" + old_files = self.parse_tree(old_tree) if old_tree else {} + new_files = self.parse_tree(new_tree) if new_tree else {} + + changes = [] + + # 查找新增和修改的文件 + for path, new_hash in new_files.items(): + if path not in old_files: + changes.append(FileChange(path=path, change_type='added')) + elif old_files[path] != new_hash: + changes.append(FileChange(path=path, change_type='modified')) + + # 查找删除的文件 + for path in old_files: + if path not in new_files: + changes.append(FileChange(path=path, change_type='deleted')) + + return changes + + def get_commit_changes(self, commit_hash: str) -> Tuple[List[FileChange], Dict]: + """获取提交的所有变更""" + commit = self.parse_commit(commit_hash) + if not commit: + return [], {} + + # 获取当前提交的 tree + current_tree = self.parse_tree(commit.tree) + + # 获取父提交的 tree + parent_tree = {} + if commit.parent: + parent_commit = self.parse_commit(commit.parent) + if parent_commit: + parent_tree = self.parse_tree(parent_commit.tree) + + changes = [] + stats = {'added': 0, 'modified': 0, 'deleted': 0, 'total_additions': 0, 'total_deletions': 0} + + # 比较 tree + all_paths = set(current_tree.keys()) | set(parent_tree.keys()) + + for path in all_paths: + if path in current_tree and path not in parent_tree: + # 新增文件 + changes.append(FileChange(path=path, change_type='added')) + stats['added'] += 1 + elif path not in current_tree and path in parent_tree: + # 删除文件 + changes.append(FileChange(path=path, change_type='deleted')) + stats['deleted'] += 1 + elif current_tree.get(path) != parent_tree.get(path): + # 修改文件 + changes.append(FileChange(path=path, change_type='modified')) + stats['modified'] += 1 + + return changes, stats + + +class CommitAnalyzer: + """提交分析器""" + + def __init__(self, repo_path: str): + self.parser = GitObjectParser(repo_path) + self.repo_path = Path(repo_path) + + def analyze_commit(self, commit_hash: str) -> Dict[str, Any]: + """分析单个提交""" + commit = self.parser.parse_commit(commit_hash) + if not commit: + return {} + + changes, stats = self.parser.get_commit_changes(commit_hash) + + # 分析文件类型 + file_types = defaultdict(int) + for change in changes: + ext = Path(change.path).suffix or 'no_extension' + file_types[ext] += 1 + + # 分析变更的重要性 + importance = self._assess_importance(commit.message, changes, stats) + + # 提取关键代码片段 + key_snippets = self._extract_key_snippets(changes) + + return { + 'commit_hash': commit_hash, + 'message': commit.message, + 'author': commit.author, + 'email': commit.email, + 'timestamp': commit.timestamp, + 'date': datetime.fromtimestamp(commit.timestamp).strftime('%Y-%m-%d %H:%M:%S'), + 'parent': commit.parent, + 'changes': [ + { + 'path': c.path, + 'type': c.change_type, + 'additions': c.additions, + 'deletions': c.deletions + } + for c in changes + ], + 'stats': stats, + 'file_types': dict(file_types), + 'importance': importance, + 'key_snippets': key_snippets, + 'impact_analysis': self._analyze_impact(changes, commit.message), + 'review_points': self._generate_review_points(changes, commit.message) + } + + def _assess_importance(self, message: str, changes: List[FileChange], stats: Dict) -> str: + """评估提交的重要性""" + message_lower = message.lower() + + # 检查关键关键词 + critical_keywords = ['fix', 'bug', 'security', 'crash', 'memory leak', 'deadlock'] + feature_keywords = ['feat', 'feature', 'add', 'implement', 'new'] + refactor_keywords = ['refactor', 'restructure', 'cleanup', 'optimize'] + + if any(kw in message_lower for kw in critical_keywords): + return 'critical' + elif any(kw in message_lower for kw in feature_keywords): + return 'feature' + elif stats.get('added', 0) + stats.get('modified', 0) + stats.get('deleted', 0) > 20: + return 'major' + elif any(kw in message_lower for kw in refactor_keywords): + return 'refactor' + else: + return 'minor' + + def _extract_key_snippets(self, changes: List[FileChange]) -> List[Dict]: + """提取关键代码片段""" + snippets = [] + + for change in changes[:10]: # 限制分析的文件数量 + if change.change_type == 'deleted': + continue + + # 尝试读取文件内容 + file_path = self.repo_path / change.path + if file_path.exists() and file_path.is_file(): + try: + with open(file_path, 'r', encoding='utf-8', errors='replace') as f: + content = f.read() + + # 提取文件的基本信息 + lines = content.split('\n') + snippet = { + 'file': change.path, + 'type': change.change_type, + 'lines_count': len(lines), + 'preview': '\n'.join(lines[:30]) if len(lines) > 30 else content + } + snippets.append(snippet) + except Exception: + pass + + return snippets + + def _analyze_impact(self, changes: List[FileChange], message: str) -> List[str]: + """分析变更对项目的影响""" + impacts = [] + + # 分析受影响的模块 + affected_modules = set() + for change in changes: + parts = change.path.split('/') + if len(parts) > 1: + affected_modules.add(parts[0]) + + if affected_modules: + impacts.append(f"受影响的模块: {', '.join(sorted(affected_modules))}") + + # 分析文件类型影响 + file_types = defaultdict(int) + for change in changes: + ext = Path(change.path).suffix + if ext: + file_types[ext] += 1 + + if '.cs' in file_types: + impacts.append(f"涉及 {file_types['.cs']} 个 C# 文件变更") + if '.axaml' in file_types or '.xaml' in file_types: + impacts.append("涉及 UI/XAML 文件变更") + if '.md' in file_types: + impacts.append("涉及文档更新") + + # 根据提交消息分析 + message_lower = message.lower() + if 'fix' in message_lower: + impacts.append("这是一个修复性提交,可能解决现有问题") + if 'feat' in message_lower or 'feature' in message_lower: + impacts.append("这是一个功能新增提交,扩展了项目能力") + if 'refactor' in message_lower: + impacts.append("这是一个重构提交,改善了代码结构") + if 'test' in message_lower: + impacts.append("涉及测试相关变更") + + return impacts + + def _generate_review_points(self, changes: List[FileChange], message: str) -> List[str]: + """生成代码审查要点""" + points = [] + + # 检查大文件变更 + large_files = [c for c in changes if c.additions + c.deletions > 100] + if large_files: + points.append(f"注意: 有 {len(large_files)} 个文件变更超过 100 行,需要仔细审查") + + # 检查关键文件 + critical_patterns = ['Program.cs', 'App.axaml', 'MainWindow', 'Core', 'Service'] + for change in changes: + for pattern in critical_patterns: + if pattern in change.path: + points.append(f"关键文件变更: {change.path} - 需要特别关注") + break + + # 检查提交消息质量 + if len(message) < 10: + points.append("提交消息较短,建议提供更详细的变更说明") + + if 'wip' in message.lower() or 'todo' in message.lower(): + points.append("提交包含 WIP/TODO 标记,确认是否已完成") + + # 检查文件删除 + deleted = [c for c in changes if c.change_type == 'deleted'] + if deleted: + points.append(f"删除了 {len(deleted)} 个文件,确认是否有其他代码依赖这些文件") + + return points + + +def generate_markdown_report(analysis: Dict[str, Any]) -> str: + """生成 Markdown 格式的分析报告""" + lines = [] + + # 标题 + lines.append(f"# Commit 深度分析报告") + lines.append(f"") + lines.append(f"**提交哈希**: `{analysis['commit_hash']}`") + lines.append(f"**提交时间**: {analysis['date']}") + lines.append(f"**作者**: {analysis['author']} <{analysis['email']}>") + lines.append(f"**重要性**: {analysis['importance'].upper()}") + lines.append(f"") + + # 提交消息 + lines.append(f"## 提交消息") + lines.append(f"```") + lines.append(analysis['message']) + lines.append(f"```") + lines.append(f"") + + # 变更统计 + lines.append(f"## 变更统计") + stats = analysis['stats'] + lines.append(f"- **新增文件**: {stats.get('added', 0)}") + lines.append(f"- **修改文件**: {stats.get('modified', 0)}") + lines.append(f"- **删除文件**: {stats.get('deleted', 0)}") + lines.append(f"") + + # 文件类型分布 + if analysis.get('file_types'): + lines.append(f"### 文件类型分布") + for ext, count in sorted(analysis['file_types'].items(), key=lambda x: -x[1]): + lines.append(f"- `{ext}`: {count} 个文件") + lines.append(f"") + + # 变更文件列表 + if analysis.get('changes'): + lines.append(f"## 变更文件列表") + lines.append(f"| 文件路径 | 变更类型 |") + lines.append(f"|---------|---------|") + type_map = {'added': '新增', 'modified': '修改', 'deleted': '删除'} + for change in analysis['changes'][:50]: # 限制显示数量 + change_type = type_map.get(change['type'], change['type']) + lines.append(f"| `{change['path']}` | {change_type} |") + lines.append(f"") + + # 影响分析 + if analysis.get('impact_analysis'): + lines.append(f"## 影响分析") + for impact in analysis['impact_analysis']: + lines.append(f"- {impact}") + lines.append(f"") + + # 代码审查要点 + if analysis.get('review_points'): + lines.append(f"## 代码审查要点") + for point in analysis['review_points']: + lines.append(f"- ⚠️ {point}") + lines.append(f"") + + # 关键代码片段 + if analysis.get('key_snippets'): + lines.append(f"## 关键代码片段") + for snippet in analysis['key_snippets'][:5]: + lines.append(f"### {snippet['file']}") + lines.append(f"- **类型**: {snippet['type']}") + lines.append(f"- **行数**: {snippet['lines_count']}") + lines.append(f"") + lines.append(f"```") + lines.append(snippet['preview'][:2000]) # 限制预览长度 + lines.append(f"```") + lines.append(f"") + + return '\n'.join(lines) + + +def main(): + """主函数""" + repo_path = r"d:\github\LanMountainDesktop" + output_dir = Path(repo_path) / "docs" / "auto_commit_md" + + # 确保输出目录存在 + output_dir.mkdir(parents=True, exist_ok=True) + + # 读取 HEAD 日志 + head_log_path = Path(repo_path) / ".git" / "logs" / "HEAD" + if not head_log_path.exists(): + print(f"错误: 找不到 HEAD 日志文件: {head_log_path}") + return + + # 解析 HEAD 日志获取所有 commit + commits = [] + with open(head_log_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if not line: + continue + + # 解析日志行 + # 格式: old_hash new_hash name timestamp timezone\taction: message + parts = line.split('\t') + if len(parts) < 2: + continue + + meta_part = parts[0] + action_part = parts[1] + + meta_tokens = meta_part.split() + if len(meta_tokens) < 5: + continue + + new_hash = meta_tokens[1] + + # 只处理 commit 操作 + if 'commit' in action_part or action_part.startswith('commit:'): + message = action_part.replace('commit:', '').strip() + commits.append({ + 'hash': new_hash, + 'message': message + }) + + print(f"找到 {len(commits)} 个 commit") + + # 初始化分析器 + analyzer = CommitAnalyzer(repo_path) + + # 分析每个 commit + for i, commit_info in enumerate(commits): + commit_hash = commit_info['hash'] + short_hash = commit_hash[:7] + + print(f"[{i+1}/{len(commits)}] 分析 commit: {short_hash} - {commit_info['message'][:50]}") + + try: + # 分析提交 + analysis = analyzer.analyze_commit(commit_hash) + if not analysis: + print(f" 跳过: 无法解析 commit {short_hash}") + continue + + # 生成报告 + report = generate_markdown_report(analysis) + + # 保存报告 + date_str = datetime.fromtimestamp(analysis['timestamp']).strftime('%Y%m%d') + filename = f"{date_str}_{short_hash}_deep_analysis.md" + output_path = output_dir / filename + + with open(output_path, 'w', encoding='utf-8') as f: + f.write(report) + + print(f" 已保存: {filename}") + + except Exception as e: + print(f" 错误: 分析 commit {short_hash} 时出错: {e}") + import traceback + traceback.print_exc() + + print("\n分析完成!") + + +if __name__ == "__main__": + main() diff --git a/scripts/generate_commit_docs.py b/scripts/generate_commit_docs.py new file mode 100644 index 0000000..d4a0e0f --- /dev/null +++ b/scripts/generate_commit_docs.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +解析 Git HEAD 日志文件并生成 Markdown 提交分析报告 +""" + +import re +import os +from datetime import datetime, timezone, timedelta +from pathlib import Path + +def parse_head_log(log_content): + """ + 解析 HEAD 日志内容,提取所有 commit 类型的提交 + + 格式:old_hash new_hash author_name timestamp timezone\taction: message + """ + commits = [] + + # 匹配 commit 类型的行(包括 commit, commit (merge) 等) + # 注意:message 部分可能包含中文,使用 .* 匹配 + pattern = r'^([a-f0-9]{40}) ([a-f0-9]{40}) (.+) <([^>]+)> (\d+) ([+-]\d{4})\tcommit.*?: (.+)$' + + for line in log_content.strip().split('\n'): + line = line.strip() + if not line: + continue + + match = re.match(pattern, line) + if match: + old_hash, new_hash, author_name, author_email, timestamp, tz_offset, message = match.groups() + + # 解析时间戳 + ts = int(timestamp) + # 解析时区偏移 + tz_hours = int(tz_offset[:3]) + tz_mins = int(tz_offset[0] + tz_offset[3:5]) + tz = timezone(timedelta(hours=tz_hours, minutes=tz_mins)) + dt = datetime.fromtimestamp(ts, tz) + + commits.append({ + 'old_hash': old_hash, + 'new_hash': new_hash, + 'short_hash': new_hash[:7], + 'author_name': author_name, + 'author_email': author_email, + 'timestamp': ts, + 'datetime': dt, + 'date_str': dt.strftime('%Y-%m-%d'), + 'time_str': dt.strftime('%H:%M:%S'), + 'timezone': tz_offset, + 'message': message.strip() + }) + + return commits + + +def analyze_commit_type(message): + """ + 分析提交类型 + + 支持的类型: + - feat: 新功能 + - fix: 修复 + - docs: 文档 + - style: 格式 + - refactor: 重构 + - perf: 性能优化 + - test: 测试 + - chore: 构建/工具 + - ci: CI/CD + - revert: 回滚 + - change/changed: 变更 + - remove/removed: 移除 + """ + message_lower = message.lower() + + # 定义类型映射 + type_patterns = [ + (r'^feat[.:\s]', 'feat', '新功能 (Feature)', '添加新功能或特性'), + (r'^fix[.:\s]', 'fix', '修复 (Bug Fix)', '修复问题或缺陷'), + (r'^docs[.:\s]', 'docs', '文档 (Documentation)', '文档更新'), + (r'^style[.:\s]', 'style', '格式 (Style)', '代码格式调整'), + (r'^refactor[.:\s]', 'refactor', '重构 (Refactor)', '代码重构'), + (r'^perf[.:\s]', 'perf', '性能优化 (Performance)', '性能改进'), + (r'^test[.:\s]', 'test', '测试 (Test)', '测试相关'), + (r'^chore[.:\s]', 'chore', '构建/工具 (Chore)', '构建流程或工具更新'), + (r'^ci[.:\s]', 'ci', 'CI/CD', '持续集成/部署'), + (r'^revert[.:\s]', 'revert', '回滚 (Revert)', '撤销之前的提交'), + (r'^change[d]?[.:\s]', 'change', '变更 (Change)', '功能或行为变更'), + (r'^remove[d]?[.:\s]', 'remove', '移除 (Remove)', '删除代码或功能'), + (r'^update[.:\s]', 'update', '更新 (Update)', '更新依赖或配置'), + (r'^add[.:\s]', 'add', '添加 (Add)', '添加新内容'), + (r'^introduce[.:\s]', 'introduce', '引入 (Introduce)', '引入新模块或概念'), + (r'^support[.:\s]', 'support', '支持 (Support)', '增加支持'), + (r'^migrate[.:\s]', 'migrate', '迁移 (Migrate)', '迁移或升级'), + (r'^bump[.:\s]', 'bump', '版本升级 (Bump)', '依赖版本升级'), + (r'^enable[.:\s]', 'enable', '启用 (Enable)', '启用功能'), + (r'^use[.:\s]', 'use', '使用 (Use)', '使用某技术或方法'), + (r'^make[.:\s]', 'make', '调整 (Make)', '调整实现'), + (r'^lock[.:\s]', 'lock', '锁定 (Lock)', '锁定特定行为'), + (r'^stamp[.:\s]', 'stamp', '标记 (Stamp)', '版本标记'), + (r'^harden[.:\s]', 'harden', '加固 (Harden)', '安全性/稳定性加固'), + (r'^resolve[.:\s]', 'resolve', '解决 (Resolve)', '解决问题'), + (r'^simplify[.:\s]', 'simplify', '简化 (Simplify)', '简化实现'), + (r'^move[.:\s]', 'move', '移动 (Move)', '文件或代码移动'), + (r'^rebuild[.:\s]', 'rebuild', '重建 (Rebuild)', '重建系统或流程'), + (r'^refresh[.:\s]', 'refresh', '刷新 (Refresh)', '刷新内容'), + (r'^normalize[.:\s]', 'normalize', '规范化 (Normalize)', '规范化处理'), + (r'^redesign[.:\s]', 'redesign', '重新设计 (Redesign)', 'UI/架构重新设计'), + ] + + for pattern, code, name, description in type_patterns: + if re.match(pattern, message_lower): + return { + 'code': code, + 'name': name, + 'description': description + } + + # 版本号提交(如 0.7.9.1, 0.8.0 等) + if re.match(r'^\d+\.\d+', message): + return { + 'code': 'release', + 'name': '版本发布 (Release)', + 'description': '版本号更新或发布' + } + + # 默认类型 + return { + 'code': 'other', + 'name': '其他 (Other)', + 'description': '其他类型的提交' + } + + +def generate_commit_markdown(commit): + """为单个提交生成 Markdown 文档""" + + commit_type = analyze_commit_type(commit['message']) + + # 提取提交摘要(第一行或前50个字符) + summary = commit['message'].split('\n')[0][:100] + + # 生成分析内容 + md_content = f"""# 提交分析报告 + +## 1. 提交基本信息 + +| 属性 | 值 | +|------|-----| +| **完整哈希** | `{commit['new_hash']}` | +| **短哈希** | `{commit['short_hash']}` | +| **作者** | {commit['author_name']} <{commit['author_email']}> | +| **提交日期** | {commit['date_str']} | +| **提交时间** | {commit['time_str']} | +| **时区** | {commit['timezone']} | +| **父提交** | `{commit['old_hash']}` | + +## 2. 提交信息摘要 + +``` +{commit['message']} +``` + +**摘要**: {summary} + +## 3. 变更类型分析 + +| 属性 | 值 | +|------|-----| +| **类型代码** | `{commit_type['code']}` | +| **类型名称** | {commit_type['name']} | +| **类型说明** | {commit_type['description']} | + +## 4. 提交内容解读 + +""" + + # 根据提交类型添加解读内容 + if commit_type['code'] == 'feat': + md_content += f""" +这是一个**新功能**提交,引入了新的功能或特性。 + +**可能涉及的变更**: +- 新增功能模块或组件 +- 新增 API 接口 +- 新增用户界面元素 +- 新增配置选项 + +**建议关注**: +- 新功能的实现方式 +- 是否包含相应的测试用例 +- 文档是否同步更新 +""" + elif commit_type['code'] == 'fix': + md_content += f""" +这是一个**问题修复**提交,修复了系统中的某个问题或缺陷。 + +**可能涉及的变更**: +- 修复程序错误 (Bug) +- 修复 UI 显示问题 +- 修复性能问题 +- 修复兼容性问题 + +**建议关注**: +- 修复的问题描述 +- 修复方案是否合理 +- 是否引入了回归风险 +""" + elif commit_type['code'] == 'docs': + md_content += f""" +这是一个**文档更新**提交,更新了项目文档。 + +**可能涉及的变更**: +- README 更新 +- API 文档更新 +- 注释完善 +- 新增文档文件 + +**建议关注**: +- 文档内容准确性 +- 文档格式规范性 +""" + elif commit_type['code'] == 'refactor': + md_content += f""" +这是一个**代码重构**提交,对代码进行了重构优化。 + +**可能涉及的变更**: +- 代码结构优化 +- 提取公共方法 +- 重命名变量/类 +- 消除重复代码 + +**建议关注**: +- 重构是否保持功能一致性 +- 代码可读性是否提升 +""" + elif commit_type['code'] == 'ci': + md_content += f""" +这是一个**CI/CD**提交,更新了持续集成/部署配置。 + +**可能涉及的变更**: +- GitHub Actions 工作流更新 +- 构建脚本调整 +- 发布流程优化 +- 自动化测试配置 + +**建议关注**: +- CI 流程是否正常执行 +- 部署流程是否受影响 +""" + elif commit_type['code'] == 'release': + md_content += f""" +这是一个**版本发布**提交,标记了版本号更新。 + +**版本号**: {commit['message']} + +**可能涉及的变更**: +- 版本号更新 +- 发布打包 +- 变更日志更新 +- 标签创建 + +**建议关注**: +- 版本号是否符合语义化版本规范 +- 变更日志是否完整 +""" + elif commit_type['code'] == 'chore': + md_content += f""" +这是一个**构建/工具**提交,更新了构建流程或开发工具。 + +**可能涉及的变更**: +- 依赖包更新 +- 构建配置调整 +- 开发工具配置 +- 脚本文件更新 + +**建议关注**: +- 构建是否正常 +- 依赖兼容性 +""" + elif commit_type['code'] == 'change': + md_content += f""" +这是一个**功能变更**提交,修改了现有功能的行为或实现。 + +**可能涉及的变更**: +- 功能行为调整 +- 配置项变更 +- 接口变更 +- 默认值修改 + +**建议关注**: +- 变更是否向后兼容 +- 是否需要更新文档 +""" + else: + md_content += f""" +这是一个**{commit_type['name']}**提交。 + +**提交内容**: +{commit['message']} + +**建议**: +- 查看具体代码变更以了解详细内容 +- 结合项目上下文理解提交意图 +""" + + # 添加页脚 + md_content += f""" + +--- + +*此报告由自动提交分析工具生成* +*生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}* +""" + + return md_content + + +def main(): + """主函数""" + # 项目根目录 + repo_root = Path('d:/github/LanMountainDesktop') + + # 读取 HEAD 日志文件 + head_log_path = repo_root / '.git' / 'logs' / 'HEAD' + output_dir = repo_root / 'docs' / 'auto_commit_md' + + print(f"读取日志文件: {head_log_path}") + + if not head_log_path.exists(): + print(f"错误: 日志文件不存在: {head_log_path}") + return + + with open(head_log_path, 'r', encoding='utf-8') as f: + log_content = f.read() + + # 解析提交记录 + commits = parse_head_log(log_content) + print(f"解析到 {len(commits)} 个 commit 类型提交") + + # 确保输出目录存在 + output_dir.mkdir(parents=True, exist_ok=True) + + # 统计信息 + generated_count = 0 + skipped_count = 0 + error_count = 0 + + # 为每个提交生成 Markdown 文件 + for commit in commits: + # 文件名格式: YYYYMMDD_.md + filename = f"{commit['date_str'].replace('-', '')}_{commit['short_hash']}.md" + filepath = output_dir / filename + + # 如果文件已存在,跳过 + if filepath.exists(): + print(f"跳过 (已存在): {filename}") + skipped_count += 1 + continue + + try: + # 生成 Markdown 内容 + md_content = generate_commit_markdown(commit) + + # 写入文件 + with open(filepath, 'w', encoding='utf-8') as f: + f.write(md_content) + + print(f"生成: {filename} - {commit['message'][:50]}") + generated_count += 1 + + except Exception as e: + print(f"错误: 生成 {filename} 失败: {e}") + error_count += 1 + + # 打印统计信息 + print("\n" + "="*50) + print("生成完成!") + print(f" - 新生成: {generated_count} 个文件") + print(f" - 已跳过: {skipped_count} 个文件") + print(f" - 错误: {error_count} 个文件") + print(f" - 总计: {len(commits)} 个提交") + print(f"\n输出目录: {output_dir}") + + +if __name__ == '__main__': + main()