Files
Hua.Todo/docs/manual/03-版本记录.md
T
ShaoHua 3213d4c718 feat: 完成v1.3.0架构对齐与Web端根路径托管全量开发
- 重构架构:抽离AddCloudSyncServer到扩展类,补全中间层文档对齐
- 修复根路径404与鉴权跳转:新增中间件处理浏览器请求302跳转
- 实现种子数据初始化:添加默认管理员账号自动创建逻辑
- 优化前端代理与构建:新增Vite代理配置与自动构建Target
- 补全测试与文档:新增集成测试,更新开发与部署文档
2026-08-08 07:33:44 +08:00

87 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 版本更新历史
## 版本更新
### 版本策略
- 采用语义化版本号:`MAJOR.MINOR.PATCH`
- v1.0.0:初始 WPF 版本
- v1.1.0:MAUI + WebView 跨平台版本
- v1.2.0:Linux 支持与增强功能
- v1.3.0(开发中):MCP 服务与语音控制
### v1.3.0 (2026-08-08,Host 双角色+路由+鉴权流修补)
- **修复:根路径 404 / 前端缺失引导**:`Hua.Todo.Host/Program.cs` 新增 `MinimalBootstrapPageMiddleware`(位于 Swagger 之后、UseDefaultFiles/UseStaticFiles 之前)。当前端 `wwwroot/index.html` 缺失时,访问 `/` 或 SPA 路由(如 `/settings`)不再返回 404,而是返回**中文最小引导页**(含期望路径、WebRoot、环境版本、三种修复方式:`dotnet build Host` / 手动 npm build / CI skip build;同时列出 `/swagger`、`/api/auth/bootstrap` 等仍可用的入口),解决了"根路径 404 看起来像后端挂了"的误判问题。
- **修复:没权限应该跳登录页**:`DynamicApiMiddleware` 新增 `WriteUnauthorizedResponse` / `WriteForbiddenResponse` / `IsBrowserHtmlRequest` 三个方法。判定规则:请求是 `GET`/`HEAD` 且 `Accept: text/html` 且 **非** `X-Requested-With: XMLHttpRequest` → 视为「用户在地址栏直访问接口页面」→ 返回 `302 Location: "/"`,回到 Host 前端 SPA,SPA 判断未登录 → 弹出登录/云同步设置 `CloudSyncSettingsDialog` 完成鉴权。**不破坏** axios/fetch:Accept 为 JSON 或非 GET/HEAD 时,继续返回原有的 401/403 JSON(`success=false + message`)。403 同样走 302 跳转。
- **架构文档对齐(Host 不区分模式 = 双角色统一部署)**:更新 `01-项目架构.md` 模式 B 章节:Host 部署时**同时承担 (1) Web 端前端/后端同源部署和 (2) 云同步权威服务端**两种职责,不区分"模式";端点列表扩展为 4 项(`/`、`/api/*`、`/mcp`、`/swagger + /admin/*`);明确 401/403 在浏览器页面时 302 跳 `/` 由 SPA 接管登录;新增中间件顺序硬约束链接。
- **验收测试补齐(ATDD)**:新增 `test/Hua.Todo.Host.Tests/CloudSync/HostBootstrapAndAuthRedirectTests.cs`,覆盖 6 场景:① 无 index.html 时 GET `/` + AcceptHtml → 200 + 引导页含「前端尚未构建」构建命令;② `/settings`(SPA 路由)同样 200 引导页;③ 未登录浏览器 GET `/api/security/policy`(PolicyRead 权限)+ AcceptHtml → 302 `/`;④ 未登录 AcceptJson 同一接口 → 401 JSON `success=false`;⑤ PUT `/api/security/policy`(非 GET)+ AcceptHtml → 仍 401 JSON 不跳转;⑥ 匿名 `POST /api/cloud-sync/probe` 不被 redirect 或 401 影响。6 个新测试 + 原 `WebRootStaticFileTests` 4 个场景 = 10 个全部通过。
### v1.3.0 (2026-06-17)
- **架构对齐(v1.3.0 工单 05)**:新增「Hua.Todo.HttpApi.AspNetCore」中间层到项目清单和依赖图(Core → Application → HttpApi.AspNetCore → {Host,Maui,Avalonia});抽离 `AddCloudSyncServer` 到 `CloudSyncServiceCollectionExtensions.cs`;清理 `01-项目架构.md` §5 过时的扩展点路径;`00-工单总览.md` 明确模式 B 中间件顺序硬约束,`MapCloudSyncProxySettings` 已废弃(接口改由 DynamicApi 自动暴露)。
- **Web 端根路径托管前端(v1.3.0 工单 06)**:模式 B 下 Host 同时承担「动态 API + 前端静态站点 + MCP」三大职责;`Program.cs` 新增 `UseDefaultFiles`/`UseStaticFiles`/`MapFallbackToFile("index.html")` 并对齐中间件顺序;`Host.csproj` 新增 `BuildHuaTodoWebWebRoot` Target(增量 npm build + 双份 wwwroot 拷贝 + Node 缺失 Warning);开发文档新增「模式 B 双开」与「BuildHuaTodoWebWebRoot 自动构建」指南;新增 `WebRootStaticFileTests.cs` 覆盖根路径 / SPA fallback / API 不覆盖 / Swagger 不覆盖 4 场景。
- **CloudSync Swagger + 路由修复**:CloudSync 接口改查 `IsMetadataEnabled`,移除 `IsEnabled=false`,Swagger 中 `/auth/* /tasks/* /security/* /admin/* /cloud-sync/*` 可见;MCP 工具改用命名空间过滤 `Hua.Todo.Application.CloudSync.*`,避免云同步接口暴露为 MCP。
- **CloudSync 端点 DynamicApi 化**:移除 16 个手动 `MapCloudSyncEndpoints()`,新增 5 个 `IDynamicApiService` 接口 + `DynamicApiRouteAttribute` + `RequirePermissionAttribute`,中间件支持自定义前缀与权限检查;错误响应统一 401/403。
- **测试项目重构**:`src/test/` → `test/`;Host.Tests 161 个测试全部通过。
- **Host 云同步端点补齐修复**:Program.cs 新增 `AddCloudSyncServer()` + `MapCloudSyncEndpoints()`(后已改为 DynamicApi) + `app.UseAuthentication()` 顺序;前端云同步默认账号 `admin`/`123456` + 默认地址 `http://localhost:5173`;`TaskList.vue` 新增登录/登出/同步按钮。
### v1.3.0 (2026-06-16)
- **MCP 服务**:新增 MCP 协议端点(`/mcp`),DynamicMcpToolExtensions 自动扫描 IDynamicApiService 接口生成 MCP 工具;当前覆盖 ITaskService(9 个)+ IVoiceService(4 个)= 13 个 MCP 工具
- **语音控制核心**:新增 Voice 模块(Core 接口、LLM 客户端、双策略意图解析器、指令执行器、AiBreakdownService);26 个单元测试通过
- **文档重组**:`docs/manual/` 目录按普通用户/开发者分离重组,新增双入口导航
### v1.2.8 (2026-06-14)
- **文档**:新增 [云同步规则](./08-云同步规则.md),汇总 Todo 待办项云同步的架构、API 契约、认证鉴权、同步工作流、安全策略与可控落盘等完整规则。
### v1.2.8 (2026-04-13)
- **云同步增强**:在 `Hua.Todo.Application` 中深度集成 `CloudSync` 模块,支持权限验证、安全策略(SecurityPolicy)与任务同步 DTO。
- **动态 API 增强**:完善 `DynamicApi` 逻辑,支持 Swagger 自动过滤与中间件拦截。
- **代码规范同步**:强制执行 XML 文档注释与跨平台逻辑分离规范,更新 `.trae/rules` 规则库。
- **多平台构建优化**:优化 `Directory.Build.props` 与 `Directory.Build.targets`,精细化控制各平台(Windows/Android/iOS/Linux)的构建开关与依赖。
- **版本号统一**:全项目版本号提升至 `v1.2.8`,同步更新各平台安装包与发布脚本。
### v1.2.0(2026-04-07)
- **Linux 官方支持**:新增 `Hua.Todo.Avalonia` 项目,正式适配 Linux 平台,同时支持 Windows 和 macOS。
- **Avalonia 桌面交互**:增加托盘菜单(显示/退出)、关闭隐藏到托盘、Windows 全局热键唤起主窗口、热键配置本地持久化;并对齐 Avalonia 的 appsettings 默认值。
- **关键词检索**:主界面增加搜索框,按任务标题实时过滤;采用"命中即显示(含上下文)"策略;支持 Esc 清空;英文大小写不敏感。
- **云同步(基础可用)**:新增"云同步设置"弹窗,支持手动配置服务端地址(格式校验 + 保存时可达性/风险提示);登录成功后拉取云端任务并刷新主界面(v1.2.0 为只读展示);401/403 时会自动清会话并弹出登录入口。
- **MAUI(Windows)内嵌 API 文档**:Debug 模式下,内嵌 WebServer 默认提供 Swagger UI(`{HostUrl}/swagger`)与 OpenAPI JSON(`{HostUrl}/swagger/v1/swagger.json`),便于本地接口调试。
- **Android 启动稳定性修复**:在 AndroidManifest 中移除 `androidx.startup.InitializationProvider` 自动初始化入口,规避 `androidx.lifecycle.ProcessLifecycleInitializer` 缺失导致的启动崩溃(`NoClassDefFoundError`)。
- **MAUI Android 调试配置修复**:在 `Hua.Todo.Maui.csproj` 中显式启用 `AndroidApplication`,并将调试架构配置从 `AndroidSupportedAbis` 切换为 `RuntimeIdentifiers=android-x64`,减少 Visual Studio 启动 Android 调试时的项目识别与模拟器架构问题。
- **Swagger 输出补齐 Dynamic API**:任务管理等 Dynamic API 端点会出现在 `swagger.json` 中,避免"接口缺失"导致联调困难。
- **SQLite DateTime 兼容修复**:新增 `LenientUtcDateTimeStringConverter`,本地数据库中若存在历史遗留的 DateTime "ticks/时间戳字符串"脏数据,读取时将被兼容解析,避免 `/api/task` 等查询因单条坏数据整体失败。
- **SPA 路由回落行为修复**:当 Release/非 Debug 未启用 Swagger 时,`/swagger` 不再被当作"后端专用路径"排除,访问会按 SPA 路由规则回落到 `/index.html`,避免直接 404。
- **MAUI 多平台构建开关**:在 Windows 开发机上默认仅构建 Android + Windows 目标,避免 iOS/MacCatalyst 目标在非 macOS 环境触发运行时包缺失(NETSDK1082);在 macOS 上仍会包含 iOS/MacCatalyst 目标。
- **发布脚本整理**:拆分/对齐各平台发布入口,新增 `publish.ps1` 作为统一入口(默认发布 Windows + Linux),Windows 发布脚本支持开关打包与版本自增,发布产物会落盘到 `artifacts/`。
- **Windows 发布打包修复**:Inno Setup 安装包文件名带版本号(Hua.Todo_Setup_vX.Y.Z.exe);安装后快捷方式/启动项指向 Hua.Todo.Maui.exe;发布产物强制 IsUsingStatic=true。
- **Windows WebView2 数据目录调整**:MAUI(Unpackaged)默认会在安装目录生成 `Hua.Todo.Maui.exe.WebView2`;现改为写入 `%LocalAppData%\Hua.Todo\WebView2`,避免污染安装目录。
- **Windows WebView2 Runtime 误判修复**:当系统已安装 WebView2 Runtime 但发布产物缺少/裁剪 WebView2 托管程序集时,旧检测逻辑会误判为"未安装";现改为优先从常见安装目录探测 Evergreen 版本,避免阻断主界面加载。
- **Windows 三件套开发体验**:新增 `start-host.ps1` / `start-dev.ps1`,并在 MAUI 中约定 `IsUsingStatic=false` 时不启动内置 WebServer,避免注入覆盖 Vite 的 `/api -> 5173` 代理配置。
- **文档与部署指南**:新增部署文档,详细说明开发环境搭建、多平台发布流程(Windows/Linux/Docker)以及关键配置项。
### v1.1.1 (2026-04-06)
- **文档规范增强**:新增文档同步规则,强制代码变更与文档更新保持同步。
- **项目结构说明校准**:修正 README.md 和技术文档中对 `Hua.Todo.Host`、`Hua.Todo.Application` 等模块的路径与职责描述。
- **端口配置校准**:修正文档中关于前端与后端 API 的端口说明(5173/5174)。
- **PRD 校准**:移除 v1.2.0 PRD 中"本地迭代不支持"表述与"数据迁移(导入/导出)"小节。
- **PRD 校准**:移除 v1.2.0 PRD 中"云同步"需求。
### v1.1.0 更新内容
- 重构为 MAUI + WebView 架构
- 实现跨平台支持 (Windows, macOS, Android, iOS)
- 使用 HTTP API 进行前后端通信
- 采用 Vue.js 3 作为前端框架
- 使用 SQLite 作为本地数据库
- 实现子任务支持
### v1.0.0 初始版本
- 初始 WPF 版本。