docs: align vision with reusable desktop template

This commit is contained in:
QiuSW
2026-07-08 15:45:01 +08:00
parent d2eeb049d0
commit 47d3c653c6
15 changed files with 493 additions and 112 deletions
+15 -2
View File
@@ -4,7 +4,9 @@
## 项目定位
`cmbone` 是从 `SuiDemo` 迁移而来的 Wails v3 本地桌面项目。当前目标不是继续堆功能,而是保持一个简单、清晰、初级程序员可维护的 Wails + Vue + SQLite 应用骨架。
`cmbone` 是从 `SuiDemo` 迁移而来的 Wails v3 本地桌面项目。当前目标是打造一个 Windows-first、可扩展到其他平台的可复用桌面应用模板,而不是某个单一业务产品。
模板要内置常见桌面应用能力:应用壳、设置、登录、主业务模块、操作日志、数据统计和常用业务组件。第一批业务样例使用“电商商品图片 AI 优化”,用来验证模板能否承载真实业务闭环。
项目当前已具备:
@@ -13,6 +15,15 @@
- 本地 SQLite 配置和热键表。
- 托盘菜单、快捷键、OCR 示例窗口。
目标模块包括:
- 登录:本地固定账号 provider 和真实后端 provider 两种路径。
- 设置:主题、语言、窗口行为、快捷键、数据目录、日志策略。
- 主业务:商品图片 AI 优化样例,包括任务、结果、失败反馈。
- 操作日志:审计日志和运行日志分开设计。
- 数据统计:图片处理量、成功率、耗时、失败数、日志数和 7 天趋势。
- 常用组件:输入框、多选框、下拉框、多行文本、表格、筛选和分页示例。
## 必读顺序
每次开始工作前,按顺序读取:
@@ -27,11 +38,13 @@
## 工作规则
- 只做当前任务要求的改动,不夹带重构、依赖升级或产品扩展。
- 只做当前任务要求的改动,不夹带重构、依赖升级或无验收标准的产品扩展。
- 保持 Go `1.23.0`、Wails `v3.0.0-alpha.9`、`@wailsio/runtime 3.0.0-alpha.66` 的兼容关系;不要直接升级到 latest。
- 不提交 `bin/`、`frontend/dist/`、`frontend/node_modules/` 等构建产物或依赖目录。
- 后端服务方法变更后,优先使用 `wails3 generate bindings` 重新生成 `frontend/bindings`;如果本机没有 CLI,只允许小范围手动修正并在 `progress.md` 记录原因。
- 涉及存储结构时,同步更新 `docs/04-architecture.md`、`docs/api.md`、`docs/current-state.md` 和相关任务验收。
- 登录、日志、统计和业务样例必须通过 provider / service 边界接入,不把演示逻辑写死在前端页面里。
- 自研组件库不是目标;优先复用 Ant Design Vue,并沉淀项目级组合组件和使用示例。
- 提交前至少运行 `go test ./...`、`cd frontend && npm run build`、`go build -o bin/cmbone.exe .`。
## 风格
+6 -2
View File
@@ -1,12 +1,15 @@
# cmbone
基于 SuiDemo 迁移而来的 Wails v3 桌面项目,已从模板仓库整理为可直接维护和构建的普通工程。
基于 SuiDemo 迁移而来的 Wails v3 桌面项目,目标是打造一个 Windows-first、可扩展到其他平台的可复用桌面应用模板。
模板内置方向包括:应用壳、设置、登录、主业务模块、操作日志、数据统计和常用业务组件。第一批业务样例以“电商商品图片 AI 优化”为主,用它验证模板是否能支撑真实业务闭环。
## 技术栈
- 后端:Go 1.23.0、Wails v3.0.0-alpha.9、SQLite
- 前端:Vue 3、TypeScript、Vite、Tailwind CSS、Ant Design Vue
- 功能:多语言、主题切换、本地配置、快捷键、OCR 示例
- 当前功能:多语言、主题切换、本地配置、快捷键、OCR 示例
- 目标模板模块:登录、设置、主业务、审计日志、运行日志、数据统计、常用组件示例
## 环境准备
@@ -62,6 +65,7 @@ wails3 package
- 当前依赖按系统 Go 1.23.0 锁定,升级 Go 前不要随意升级 Wails、SQLite 或热键库。
- 修改后端服务后,优先使用 `wails3 generate bindings` 重新生成 `frontend/bindings`;如果本机没有 CLI,只做小范围手动绑定。
- 提交前至少运行 `go test ./...` 和 `npm run build`。
- 模板能力按任务逐步落地,不一次性堆完整平台;优先保证 Windows 10+ 体验和可维护性。
## Harness Coding 文档
+26 -18
View File
@@ -4,16 +4,16 @@
## 一句话定位
`cmbone` 是一个 Wails v3 + Vue 3 + SQLite 的本地桌面应用骨架,当前重点是保持可运行、可构建、可维护。
`cmbone` 是一个 Windows-first、可扩展到其他平台的 Wails v3 + Vue 3 + SQLite 可复用桌面应用模板。
第一版 MVP 只做:桌面主窗口、设置页、多语言、主题、本地配置、热键、托盘和 OCR 示例窗口的稳定闭环。
模板目标不是做空泛框架,而是沉淀桌面端常用模块:应用壳、设置、登录、主业务模块、操作日志、数据统计和常用业务组件。第一批业务样例使用“电商商品图片 AI 优化”来验证模板是否能支撑真实业务闭环。
## 必读顺序
每次开始写代码前,按这个顺序建立上下文:
1. [`01-vision.md`](01-vision.md):为什么做、为谁做、什么不做。
2. [`02-requirements.md`](02-requirements.md):MVP 要什么、怎么算达成。
2. [`02-requirements.md`](02-requirements.md):模板 MVP 要什么、怎么算达成。
3. [`03-tech-stack.md`](03-tech-stack.md):既定技术选型。
4. [`04-architecture.md`](04-architecture.md):系统结构、职责划分、数据模型和关键难点。
5. [`05-coding-rules.md`](05-coding-rules.md):写代码前必须遵守的规则。
@@ -34,14 +34,14 @@
## 当前阶段
当前项目处于:MVP 基线整理与文档接入阶段。
当前项目处于:可复用桌面应用模板的产品定位校准阶段。
优先路径:
1. Phase 0:保持可运行、可测试、可构建。
2. Phase 1:收敛 Wails 服务、前端绑定和本地存储边界。
3. Phase 2:完善主窗口和第二窗口的真实用户流程。
4. Phase 3:补齐最小测试和发布文档。
1. Phase 0:保持迁移后的 Wails/Vue/SQLite 基线可运行、可测试、可构建。
2. Phase 1:建立 Windows-first 的应用壳、主布局、设置和登录边界。
3. Phase 2:实现商品图片 AI 优化样例、审计日志、运行日志和数据统计。
4. Phase 3:补齐组件示例、测试、打包和交接文档。
## 领取任务规则
@@ -52,21 +52,25 @@
- 完成后把执行记录追加到 [`../progress.md`](../progress.md),并覆盖更新 [`current-state.md`](current-state.md) 的当前快照。
- 结束会话前过一遍 [`clean-state-checklist.md`](clean-state-checklist.md)。
## MVP 边界
## 模板 MVP 边界
MVP 只做:
- 主窗口能启动并展示设置、快捷键、标签、关于等基础页面。
- 本地 SQLite 能初始化并保存配置和热键。
- 托盘菜单、语言切换、主题切换、快捷键和第二窗口能按现有设计工作。
- 前端构建、后端测试和后端编译保持通过。
- 应用壳:主窗口、侧边导航、顶部用户区、内容区,Windows 10+ 优先。
- 登录:本地固定账号 provider 和真实后端 provider 的可替换边界。
- 设置:主题、语言、窗口行为、快捷键、数据目录和日志策略。
- 主业务样例:电商商品图片 AI 优化的任务列表、状态、结果和失败反馈。
- 操作日志:审计日志用于记录用户动作,运行日志用于排错。
- 数据统计:今日处理图片数、AI 优化成功率、平均耗时、失败任务数、今日操作日志数、最近 7 天处理趋势。
- 常用组件示例:输入框、多选框、下拉框、多行文本、表格、筛选和分页。
MVP 不做:
- 云端账号、同步、付费和远程 API。
- 复杂任务管理或业务工作流。
- 未确认产品方向前的大型 UI 重构。
- 未验证兼容性的 Wails / Go / Vite 大版本升级。
- 完整权限系统、角色系统或企业 SSO。
- 完整 macOS / Linux 体验承诺;当前是 Windows-first,其他平台保持结构可扩展。
- 自研 UI 组件库;优先复用 Ant Design Vue。
- 复杂 BI 报表、自动更新和插件市场。
- 未确认接口前的真实 AI 服务深度集成。
## 常见任务该看哪里
@@ -74,7 +78,11 @@ MVP 不做:
做后端服务:先看 [`api.md`](api.md)、[`04-architecture.md`](04-architecture.md),再看 `internal/services/`。
做数据模型:先看 [`04-architecture.md`](04-architecture.md),改 schema 后必须同步更新相关文档和测试。
做登录:先看 [`04-architecture.md`](04-architecture.md) 的 AuthProvider 边界,不把账号密码写死在前端。
做日志:区分审计日志和运行日志,先看 [`04-architecture.md`](04-architecture.md) 的数据模型。
做统计:只围绕 MVP 指标,不提前做复杂报表平台。
做运行 / 打包:先看 [`03-tech-stack.md`](03-tech-stack.md) 和 [`current-state.md`](current-state.md)。
+44 -18
View File
@@ -2,38 +2,64 @@
## 项目目标
`cmbone` 的目标是提供一个简单、可维护的 Wails v3 桌面应用基础工程,让后续功能可以在稳定的 Go 后端、Vue 前端和本地 SQLite 存储上继续演进。
`cmbone` 的目标是成为一个可复用桌面应用模板:以 Wails v3 承载跨平台桌面能力,以 Windows 10+ 作为主要体验目标,以 Vue 3 构建稳定的业务界面,以 SQLite 承载本地配置、业务数据、日志和统计。
当前最重要的结果是:
它不是单一业务产品,也不是大而空的框架。它要提供一套能被复制、裁剪和扩展的桌面端基础能力,让后续具体业务模块可以快速接入。
- 新成员能按 README 和 Harness Coding 文档启动项目。
- 初级程序员能看懂目录职责和常用命令。
- 每次改动都有明确任务、验证命令和提交记录。
## 模板定位
核心定位:
- Windows-first:优先保证 Windows 10+ 上的启动、窗口、热键、托盘、打包和用户体验。
- 可扩展跨平台:代码结构保留 macOS / Linux 适配边界,但不在 MVP 承诺完整体验。
- 本地优先:配置、日志、任务和统计默认落 SQLite 或本地文件。
- 业务可替换:登录、AI 服务、主业务模块通过 provider / service 边界替换。
- 初级程序员可维护:模块职责清楚,任务小步推进,不追求抽象炫技。
## 目标用户
- 项目维护者:需要快速判断当前状态、任务边界和验证方式。
- 初级前端 / 后端程序员:需要沿着清晰模块做小范围改动。
- 项目维护者:需要一套可复用的桌面应用起点。
- 初级前端 / 后端程序员:需要沿着清晰模块做设置、表单、表格、日志和统计类功能。
- AI coding agent:需要稳定的上下文入口、任务看板和质量规则。
- 后续业务团队:需要把具体业务模块插入模板,而不是从零搭桌面壳。
## 产品方向
## 第一批业务样例
短期方向是桌面工具壳和设置中心:
第一批主业务模块使用“电商商品图片 AI 优化”。
- 主窗口负责常驻设置、快捷键和信息展示。
- 第二窗口用于快捷打开轻量功能,如 OCR 示例。
- 后端服务负责平台能力、本地配置和数据持久化。
这个样例用于验证模板是否具备真实业务所需的基本能力:
- 登录后进入主应用。
- 上传或选择商品图片。
- 创建 AI 优化任务。
- 查看任务状态、结果和失败原因。
- 记录用户操作和系统错误。
- 在数据统计页看到处理量、成功率、耗时和失败趋势。
## 核心模块
- 应用壳:主窗口、侧边导航、顶部用户区、内容区。
- 设置:主题、语言、窗口行为、快捷键、数据目录、日志策略。
- 登录:本地固定账号 provider 和真实后端 provider。
- 主业务:商品图片 AI 优化样例。
- 操作日志:审计日志和运行日志分开。
- 数据统计:围绕业务任务和日志生成基础指标。
- 常用组件:输入框、多选框、下拉框、多行文本、表格、筛选、分页和状态反馈。
## 非目标
- 现在不做云端账号、远程同步、复杂权限、支付或 SaaS 化。
- 现在不把项目改造成大型前端单页应用。
- 现在不引入 Electron、Tauri 或其他桌面框架替代 Wails。
- 现在不追逐 latest 依赖版本,优先保持当前 Go 1.23.0 可构建。
- 不自研完整 UI 组件库,优先使用 Ant Design Vue 和项目级组合封装。
- 不在 MVP 做复杂权限、角色、组织、企业 SSO。
- 不在 MVP 做复杂 BI 平台、报表设计器或插件市场。
- 不在 MVP 承诺完整 macOS / Linux 体验。
- 不在没有真实接口前重度绑定某个 AI 服务商。
- 不追逐 latest 依赖版本,优先保持当前 Go 1.23.0 可构建。
## 成功标准
- 文档、目录、命令和代码事实一致。
- 新项目可以基于模板快速保留或删除登录、设置、日志、统计和业务样例。
- Windows 10+ 上可以稳定启动、构建和打包。
- `.\init.ps1` 可以完成依赖安装、测试、前端构建和后端编译。
- 新增功能能落在明确模块内,不需要跨多层猜测。
- 文档、目录、命令、接口和当前代码事实一致。
- 新增模块都有清楚 service / model / route 边界。
- 提交历史能看出每次改动的意图和验证结果。
+58 -14
View File
@@ -1,31 +1,74 @@
# 需求说明
## MVP 范围
## 模板 MVP 范围
### P0 · 必须保持
### P0 · 基线必须保持
- 应用能启动 Wails 主窗口,并加载嵌入的 `frontend/dist` 资源。
- 主窗口包含 Dashboard、General、Shortcut、Tags、About 等现有区域。
- Windows 10+ 是主要运行和体验目标。
- 多语言资源能从 `frontend/src/locales/*.json` 加载,并能通过 UI / 服务切换。
- 主题配置能保存到本地 SQLite 并在前端生效。
- 快捷键配置能从数据库读取、更新,并注册到系统热键层。
- 托盘菜单能执行显示、隐藏、语言切换和退出等基础动作。
- 第二窗口能通过热键或服务打开,承载 OCR 示例页面。
- `go test ./...`、`npm run build`、`go build -o bin/cmbone.exe .` 通过。
### P1 · 近期增强
### P0 · 模板必须具备
- 明确主窗口默认大小、最大化策略和自适应布局规则。
- 补齐热键服务、配置服务、存储迁移的边界测试。
- OCR 失败时给出可理解的前端反馈。
- 文档化 Wails bindings 生成流程。
- 应用壳:侧边导航、顶部用户区、主内容区,默认布局适合长期业务操作。
- 设置模块:主题、语言、窗口行为、快捷键、数据目录、日志策略。
- 登录模块:支持本地固定账号 provider;预留真实后端 provider。
- 主业务模块:以电商商品图片 AI 优化为样例,包含任务创建、列表、状态、结果和失败反馈。
- 操作日志模块:审计日志记录用户动作,运行日志记录系统错误和排错信息。
- 数据统计模块:展示第一批 P0 指标。
- 常用组件示例:输入框、多选框、下拉框、多行文本、表格、筛选、分页和状态标签。
### P2 · 后续再做
## 第一批统计指标
- 发布安装包和自动更新。
- 更完整的系统通知能力。
- 可配置插件或更多工具模块。
- 业务化功能闭环。
P0 数据统计只做 6 个指标:
- 今日处理图片数。
- AI 优化成功率。
- 平均处理耗时。
- 失败任务数。
- 今日操作日志数。
- 最近 7 天处理趋势。
P1 再考虑:
- 图片优化前后平均文件大小变化。
- 不同优化类型使用次数,例如增强、压缩、背景替换。
- 最常见错误类型 Top 5。
- 当前本地数据库大小和输出目录占用空间。
- 登录成功 / 失败次数。
- 任务队列状态:待处理、处理中、成功、失败。
## 登录要求
- 本地固定账号只用于模板演示和离线场景。
- 固定账号密码不得写死在前端。
- 真实后端登录通过 provider 接入,返回 token 或 session。
- 登录成功、失败、退出必须写入审计日志。
- MVP 不做复杂权限、角色或 SSO。
## 日志要求
审计日志用于回答“谁在什么时候做了什么”:
- 登录、退出、登录失败。
- 修改设置。
- 创建图片优化任务。
- 任务成功、失败、取消。
- 导出或清理数据。
运行日志用于排错:
- AI 调用失败。
- 数据库错误。
- 文件读写失败。
- 热键注册失败。
- 未捕获的服务错误。
审计日志和运行日志不要混在同一张业务表里。
## 验收标准
@@ -43,3 +86,4 @@
- Wails 版本固定为 `v3.0.0-alpha.9`。
- 前端 runtime 固定为 `@wailsio/runtime 3.0.0-alpha.66`。
- 不提交 `node_modules`、`dist`、`bin`、本地数据库或用户配置。
- 依赖升级必须单独开任务。
+19
View File
@@ -7,6 +7,12 @@
- 本地数据库:`modernc.org/sqlite v1.38.2`
- 系统热键:`golang.design/x/hotkey v0.4.1`
运行策略:
- Windows 10+ 是主要目标环境。
- macOS / Linux 保留代码边界,但不在 MVP 承诺完整体验。
- 平台差异统一放在 `platform/` 或明确 provider 层。
Wails CLI 安装命令:
```powershell
@@ -25,6 +31,12 @@ go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.9
- 样式:Tailwind CSS `^3.4.1`
- 国际化:Vue I18n `^11.1.5`
UI 策略:
- 不自研完整组件库。
- 优先复用 Ant Design Vue。
- 只沉淀项目级组合组件和使用示例,例如筛选表格、设置项、状态标签、日志列表。
## 目录职责
```text
@@ -94,3 +106,10 @@ wails3 package
- 升级 Wails 后,同时检查 `@wailsio/runtime` 和 `frontend/bindings`。
- 升级 Vite / TypeScript 后,必须跑 `npm run build`。
- 依赖升级必须单独提交,不和业务功能混在一起。
## 目标模块技术边界
- 登录:通过 `AuthProvider` 支持本地固定账号和真实后端,不在前端写死密码。
- 主业务:商品图片 AI 优化通过服务层封装,MVP 可先用本地模拟 provider。
- 操作日志:审计日志进 SQLite,运行日志可进 SQLite 或本地滚动日志文件。
- 数据统计:MVP 直接 SQL 聚合,不提前引入 BI 或图表后端。
+124 -14
View File
@@ -12,17 +12,24 @@ main.go
├─ AppConfigService
├─ HotkeyService
├─ SystemInfo
└─ OCRService
├─ OCRService # 当前存量示例
├─ AuthService # 目标模块
├─ AuditLogService # 目标模块
├─ AppLogService # 目标模块
├─ ImageOptimizationService # 目标业务样例
└─ MetricsService # 目标模块
frontend/src
├─ router
├─ components
├─ layouts
├─ pages
├─ components
├─ modules
├─ utils
└─ locales
```
前端通过 `frontend/bindings` 调用 Wails 暴露的 Go 服务。后端服务访问本地 SQLite、平台热键和系统能力。
前端通过 `frontend/bindings` 调用 Wails 暴露的 Go 服务。后端服务访问本地 SQLite、平台热键、文件系统、真实后端或 AI provider。
## 后端边界
@@ -32,21 +39,57 @@ frontend/src
- `internal/services/appservice.go`:负责窗口、托盘、语言资源和应用生命周期。
- `internal/services/appconfig_service.go`:负责配置读写的 Wails 服务边界。
- `internal/services/hotkey_service.go`:负责热键读取、更新和重新注册。
- `internal/services/ocr_service.go`:负责 OCR 服务入口。
- `internal/services/ocr_service.go`:当前 OCR 存量示例,后续可演进为图片 AI 能力的一部分。
- `platform/`:隔离 Windows / macOS 热键和系统能力差异。
目标新增边界:
- `AuthService`:登录、退出、会话读取;内部通过 `AuthProvider` 接入本地固定账号或真实后端。
- `AuditLogService`:记录和查询用户操作审计日志。
- `AppLogService`:记录和查询运行错误,必要时可落本地滚动日志文件。
- `ImageOptimizationService`:商品图片 AI 优化任务的创建、状态、结果和失败原因。
- `MetricsService`:对业务任务和日志做基础聚合,输出统计卡片和趋势数据。
服务之间不要互相绕过边界直接操作平台实现。新增平台能力时,优先放在 `platform/`,再由 `internal/services/` 暴露稳定方法。
## 前端边界
- `frontend/src/router/index.ts`:只维护页面路由。
- `frontend/src/components/Main/Index.vue`:主窗口布局入口。
- `frontend/src/components/Setting/`:设置项和通用设置控件。
- `frontend/src/components/Shortcut/`:快捷键设置。
- `frontend/src/pages/Home/Index.vue`:第二窗口 / OCR 页面。
- `frontend/src/utils/`:国际化、主题、OS 和热键工具函数。
- `frontend/src/router/index.ts`:维护页面路由。
- `frontend/src/layouts/`:目标目录,放登录布局和主应用布局。
- `frontend/src/modules/auth/`:目标目录,放登录页面、会话状态和 provider 调用。
- `frontend/src/modules/settings/`:目标目录,放设置页和设置项。
- `frontend/src/modules/image-optimizer/`:目标目录,放商品图片 AI 优化样例。
- `frontend/src/modules/logs/`:目标目录,放审计日志和运行日志页面。
- `frontend/src/modules/metrics/`:目标目录,放统计卡片和趋势图。
- `frontend/src/modules/components-demo/`:目标目录,放常用组件示例。
- `frontend/src/components/`:通用展示组件和组合控件。
- `frontend/src/utils/`:国际化、主题、OS、热键等工具函数。
- `frontend/bindings/`:由 Wails 生成或按 Wails 合约维护,不写业务逻辑。
## 登录架构
登录必须通过 provider 边界实现:
```text
AuthService
└─ AuthProvider
├─ LocalAuthProvider
└─ RemoteAuthProvider
```
- `LocalAuthProvider`:用于模板演示和离线模式,固定账号密码由后端配置或安全哈希保存,不写死在前端。
- `RemoteAuthProvider`:用于真实后端,负责请求登录接口并保存 token / session。
- 前端只关心登录、退出和当前会话,不关心 provider 细节。
## 日志架构
审计日志和运行日志分开:
- 审计日志:记录用户可解释动作,支持查询、筛选和导出。
- 运行日志:记录系统错误和排错信息,支持按时间、级别、模块查看。
审计日志用于“责任链”,运行日志用于“故障定位”。不要用一张表混合两种语义。
## 数据模型
SQLite 数据库位于用户配置目录下的 `cmbone/cmbone.db`,不进入 git。
@@ -74,24 +117,91 @@ appconfig(
)
```
目标新增表:
```sql
auth_sessions(
id INTEGER PRIMARY KEY,
user_id TEXT,
username TEXT,
provider TEXT,
token TEXT,
created_at DATETIME,
expires_at DATETIME,
active INTEGER
)
```
```sql
audit_logs(
id INTEGER PRIMARY KEY,
actor TEXT,
action TEXT,
target_type TEXT,
target_id TEXT,
detail TEXT,
created_at DATETIME
)
```
```sql
app_logs(
id INTEGER PRIMARY KEY,
level TEXT,
module TEXT,
message TEXT,
detail TEXT,
created_at DATETIME
)
```
```sql
image_tasks(
id INTEGER PRIMARY KEY,
source_path TEXT,
status TEXT,
operation TEXT,
duration_ms INTEGER,
error_message TEXT,
created_at DATETIME,
updated_at DATETIME
)
```
```sql
image_task_results(
id INTEGER PRIMARY KEY,
task_id INTEGER,
output_path TEXT,
before_size INTEGER,
after_size INTEGER,
created_at DATETIME
)
```
统计数据早期直接用 SQL 聚合,不急着落 `daily_metrics` 缓存表。数据量变大后再增加缓存表。
迁移要求:
- 初始化必须幂等。
- 新字段必须有默认值或迁移逻辑。
- schema 变化必须同步 `store_test.go`、`api.md` 和 `current-state.md`。
## 窗口与事件
## 窗口与页面
- 主窗口路由:`/#/`
- 第二窗口路由:`/#/second`
- 目标主应用路由:登录页、Dashboard、图片优化、日志、统计、设置、组件示例。
- 托盘菜单由 `AppService` 配置。
- 热键触发目标当前包含打开第二窗口。
- 热键触发目标可以是打开主窗口、打开快捷功能或创建快速任务。
窗口策略应保持简单:主窗口负责配置和信息,第二窗口负责轻量快捷功能。不要把长期复杂流程塞入第二窗口。
窗口策略:主窗口承载长期业务操作,默认应充分利用屏幕空间;第二窗口只保留轻量快捷功能,不承载复杂业务流程。
## 关键风险
- 范围膨胀:模板容易变成“大而全平台”,必须按任务小步交付。
- Wails v3 仍是 alpha,CLI、Go 模块和 runtime 必须保持匹配。
- bindings 若与 Go 服务签名不一致,前端会在运行时失败。
- OCR 和热键依赖平台能力,跨平台修改必须分别验证。
- 登录 provider、AI provider 和日志模块必须有清晰边界,否则后续替换困难。
- OCR、热键、托盘依赖平台能力,跨平台修改必须分别验证。
- Vite 构建可能出现 chunk size warning,警告不等于失败,但需要避免无节制增加前端体积。
+4
View File
@@ -25,6 +25,8 @@
- 后端服务方法签名变化必须同步前端 bindings。
- 前端 UI 文案走现有 i18n 体系,避免新增硬编码中文/英文。
- 新依赖必须说明必要性;能用标准库或现有依赖解决时不新增。
- 登录、AI、日志和统计能力必须经过 service / provider 边界,不写死在页面组件里。
- 常用输入框、多选框、下拉框、多行文本、表格等优先使用 Ant Design Vue,不自研基础控件。
## 模块规则
@@ -33,6 +35,8 @@
- 平台差异放在 `platform/`。
- 前端 bindings 不承载业务逻辑。
- 通用 UI 组件保持小而直接,不为未来需求提前抽象。
- 审计日志记录用户动作,运行日志记录系统错误,两类日志不要混用。
- 数据统计只做任务要求的指标,不提前做复杂报表平台。
## 验证要求
+19 -13
View File
@@ -14,38 +14,44 @@
`TODO` 待开始 · `DOING` 进行中 · `DONE` 已完成并验收 · `BLOCKED` 受阻
## Phase 0 · 基线
## Phase 0 · 基线与定位
| ID | 任务 | 依赖 | 验收要点 | 状态 |
| --- | --- | --- | --- | --- |
| T-000 | 接入 Harness Coding 文档 | - | `AGENTS.md`、`docs/`、`progress.md`、`init.ps1`、`init.sh` 已创建;README 已登记入口;统一验证通过 | DONE |
| T-001 | 验证迁移后构建基线 | T-000 | `go test ./...`、`npm run build`、`go build -o bin/cmbone.exe .` 通过 | DONE |
| T-002 | 校准为可复用桌面应用模板 | T-001 | 愿景、需求、架构、API、路由、任务和当前状态文档都改为 Windows-first 可复用模板方向 | DONE |
## Phase 1 · 近期维护
## Phase 1 · 应用壳与基础模块
| ID | 任务 | 依赖 | 验收要点 | 状态 |
| --- | --- | --- | --- | --- |
| T-010 | 梳理主窗口最大化与自适应布局策略 | T-001 | 明确是否默认最大化;主内容区域能填满空余空间;移动/小窗口尺寸下无明显溢出;更新 `routes.md` 或架构说明 | TODO |
| T-011 | 文档化 Wails bindings 生成流程 | T-001 | README 或技术栈文档说明 `wails3 generate bindings` 的使用、失败处理和版本要求 | TODO |
| T-012 | 增加前端最小质量检查 | T-001 | 前端至少保留 `npm run build`;如新增 lint/test,命令写入 `package.json` 和文档 | TODO |
| T-010 | 建立 Windows-first 主窗口布局策略 | T-002 | 明确是否默认最大化;侧边导航、顶部用户区、内容区能填满空余空间;小窗口无明显溢出 | TODO |
| T-011 | 搭建主应用路由骨架 | T-010 | `login`、`dashboard`、`image-optimizer`、`logs`、`statistics`、`settings`、`components` 路由可访问 | TODO |
| T-012 | 实现登录 provider 边界 | T-011 | 支持本地固定账号 provider;预留 remote provider;账号密码不写死在前端;登录事件写审计日志 | TODO |
| T-013 | 收敛设置模块 schema | T-011 | 主题、语言、窗口行为、快捷键、数据目录、日志策略都有统一配置定义和默认值 | TODO |
## Phase 2 · 服务边界
## Phase 2 · 业务样例与日志统计
| ID | 任务 | 依赖 | 验收要点 | 状态 |
| --- | --- | --- | --- | --- |
| T-020 | 补强 SQLite 初始化测试 | T-001 | `store_test.go` 覆盖默认配置和热键初始化;`go test ./...` 通过 | TODO |
| T-021 | 收敛热键服务错误处理 | T-020 | 注册失败、更新失败和重复注册路径有明确错误返回或日志 | TODO |
| T-022 | 完善 OCR 失败反馈 | T-001 | OCR 失败时前端能展示可理解提示;后端错误不被吞掉 | TODO |
| T-020 | 建立商品图片 AI 优化任务模型 | T-012 | `image_tasks`、`image_task_results` 迁移和基础测试通过;可创建模拟任务 | TODO |
| T-021 | 实现审计日志与运行日志边界 | T-012 | 审计日志和运行日志分开;登录、设置变更、任务创建、任务失败可记录 | TODO |
| T-022 | 实现 P0 数据统计 | T-020 | 今日处理图片数、成功率、平均耗时、失败数、今日操作日志数、7 天趋势可查询 | TODO |
| T-023 | 实现商品图片 AI 优化页面 | T-020 | 上传/选择图片、任务列表、状态、结果预览、失败提示路径可用 | TODO |
## Phase 3 · 发布准备
## Phase 3 · 组件、质量与发布
| ID | 任务 | 依赖 | 验收要点 | 状态 |
| --- | --- | --- | --- | --- |
| T-030 | 补充 Windows 打包验证文档 | T-011 | `wails3 package` 前置条件、输出目录和常见失败处理写入 README 或 docs | TODO |
| T-031 | 完成一次人工 smoke 清单 | T-010 | 主窗口、第二窗口、语言、主题、热键、托盘都按清单验证并记录结果 | TODO |
| T-030 | 建立常用组件示例页 | T-011 | 输入框、多选框、下拉框、多行文本、表格、筛选、分页、状态标签有可运行示例 | TODO |
| T-031 | 文档化 Wails bindings 生成流程 | T-011 | README 或技术栈文档说明 `wails3 generate bindings` 的使用、失败处理和版本要求 | TODO |
| T-032 | 补充 Windows 打包验证文档 | T-031 | `wails3 package` 前置条件、输出目录和常见失败处理写入 README 或 docs | TODO |
| T-033 | 完成一次模板 smoke 清单 | T-023 | 登录、设置、业务样例、日志、统计、组件示例、托盘、热键都按清单验证并记录结果 | TODO |
## Backlog
- 梳理应用真实产品方向和名称。
- 评估是否需要 Playwright / Vitest 覆盖前端关键页面。
- 评估是否需要平台能力降级策略。
- 评估真实 AI 后端 provider 的接口形态。
- 评估本地数据库备份、恢复和清理策略。
+67 -6
View File
@@ -1,8 +1,10 @@
# API 与模块合约
> 本项目没有远程 HTTP API。这里记录 Wails 暴露给前端的 Go 服务方法和本地模块约定。
> 本项目没有固定远程 HTTP API。这里记录 Wails 暴露给前端的 Go 服务方法、本地模块合约,以及目标 provider 边界。
## AppService
## 当前已存在服务
### AppService
文件:`internal/services/appservice.go`
@@ -14,7 +16,7 @@
- 窗口创建、显示、隐藏和托盘菜单逻辑集中在 `AppService`。
- 语言资源来自 `frontend/src/locales/*.json` 的嵌入文件。
## AppConfigService
### AppConfigService
文件:`internal/services/appconfig_service.go`
@@ -28,7 +30,7 @@
- 配置持久化走 SQLite `appconfig` 表。
- 新增配置项时,必须有默认值和迁移逻辑。
## HotkeyService
### HotkeyService
文件:`internal/services/hotkey_service.go`
@@ -41,13 +43,13 @@
- 平台注册通过 `platform/` 实现,服务层不直接写平台细节。
- 更新失败时必须返回错误,不只打印日志。
## SystemInfo
### SystemInfo
文件:`internal/services/systeminfo.go`
- `GetOS() string`:返回当前系统标识。
## OCRService
### OCRService
文件:`internal/services/ocr_service.go`
@@ -55,9 +57,68 @@
约束:
- 当前是存量示例服务,后续可并入商品图片 AI 优化样例。
- 失败时返回错误给前端。
- 平台依赖或能力缺失时,不应导致主窗口不可启动。
## 目标新增服务
### AuthService
目标方法:
- `Login(username string, password string) (Session, error)`:登录并返回会话。
- `Logout() error`:退出当前会话。
- `GetCurrentSession() (Session, error)`:读取当前会话。
- `SetAuthMode(mode string) error`:切换 `local` 或 `remote` provider。
约束:
- 前端不得写死固定账号密码。
- `LocalAuthProvider` 只用于演示和离线模式。
- `RemoteAuthProvider` 用于真实后端登录。
- 登录成功、失败和退出必须写审计日志。
### AuditLogService
目标方法:
- `Record(action string, targetType string, targetID string, detail string) error`:记录审计事件。
- `List(filter AuditLogFilter) ([]AuditLog, error)`:分页查询审计日志。
- `Export(filter AuditLogFilter) (string, error)`:导出审计日志文件。
审计日志记录用户动作,不记录系统堆栈。
### AppLogService
目标方法:
- `Record(level string, module string, message string, detail string) error`:记录运行日志。
- `List(filter AppLogFilter) ([]AppLog, error)`:分页查询运行日志。
- `Export(filter AppLogFilter) (string, error)`:导出运行日志文件。
运行日志用于排错,可以记录错误详情和模块名。
### ImageOptimizationService
目标方法:
- `CreateTask(input ImageTaskInput) (ImageTask, error)`:创建图片优化任务。
- `ListTasks(filter ImageTaskFilter) ([]ImageTask, error)`:查询任务列表。
- `GetTask(id int64) (ImageTaskDetail, error)`:查询任务详情和结果。
- `CancelTask(id int64) error`:取消待处理或处理中任务。
MVP 可以先用本地模拟 provider,后续再接真实 AI 后端。
### MetricsService
目标方法:
- `GetDashboardMetrics() (DashboardMetrics, error)`:返回今日处理图片数、成功率、平均耗时、失败数、今日操作日志数。
- `GetProcessingTrend(days int) ([]DailyMetric, error)`:返回最近 N 天处理趋势。
统计早期直接基于 `image_tasks`、`image_task_results`、`audit_logs` 聚合。
## 前端绑定
绑定目录:`frontend/bindings/cmbone/internal/services`
+17 -4
View File
@@ -4,18 +4,27 @@
## 当前阶段
项目处于迁移后基线稳定和 Harness Coding 文档接入阶段。当前主要任务是保持 Wails/Vue/SQLite 工程简单、可构建、可维护。
项目处于可复用桌面应用模板的产品定位校准阶段。目标已经从迁移后的基础工程调整为“Windows-first、可扩展到其他平台的桌面端应用模板”。
当前代码仍是迁移后的 Wails/Vue/SQLite 基线,已具备设置、多语言、主题、本地配置、热键、托盘和 OCR 示例。登录、商品图片 AI 优化、审计日志、运行日志和数据统计仍是目标模块,尚未落地实现。
## 已确认事实
- 项目类型:可复用桌面应用模板。
- 主要运行场景:Windows 10 以及以后的 Windows 操作系统。
- 跨平台策略:Windows-first,保留 macOS / Linux 适配边界,不在 MVP 承诺完整体验。
- 第一批业务样例:电商商品图片 AI 优化。
- 登录策略:本地固定账号 provider + 真实后端 provider 的可替换边界。
- 日志策略:审计日志用于用户动作追踪,运行日志用于系统排错。
- 第一批统计指标:今日处理图片数、AI 优化成功率、平均处理耗时、失败任务数、今日操作日志数、最近 7 天处理趋势。
- Go 模块名:`cmbone`
- Go 版本:`1.23.0`
- Wails 版本:`v3.0.0-alpha.9`
- 前端 runtime:`@wailsio/runtime 3.0.0-alpha.66`
- 前端框架:Vue 3、Vite、TypeScript、Tailwind CSS、Ant Design Vue
- 本地数据库:SQLite,用户配置目录下 `cmbone/cmbone.db`
- 主窗口路由:`/#/`
- 第二窗口路由:`/#/second`
- 当前主窗口路由:`/#/`
- 当前第二窗口路由:`/#/second`
## 当前命令
@@ -44,7 +53,9 @@ wails3 dev
## 已知风险
- 模板范围容易膨胀,必须按任务小步实现。
- Wails v3 alpha 版本需要保持 CLI、Go 模块和前端 runtime 匹配。
- 登录 provider、AI provider、日志和统计模块尚未实现,当前只是文档目标。
- OCR 和热键依赖平台实现,跨平台修改需要分别验证。
- 当前前端以构建检查为主,暂未引入专门的前端单元测试。
- bindings 生成依赖本机安装的 `wails3`。
@@ -66,9 +77,11 @@ wails3 dev
- `npm run build` 通过。
- `go build -o bin\cmbone.exe .` 通过。
同日完成可复用桌面应用模板定位校准后,已再次运行旧定位残留检查、`git diff --check` 和 `.\init.ps1`,结果均通过。
## 下一步
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-010`:梳理主窗口最大化与自适应布局策略。
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-010`:建立 Windows-first 主窗口布局策略。
## 当前 blocker
+22
View File
@@ -24,6 +24,16 @@
| `internal/services/appconfig_service.go` | `GetAppConfig` / `SetAppConfig` | 前端配置读写入口 |
| `internal/services/appconfig_service.go` | `GetLanguage` / `SetLanguage` | 语言配置读写入口 |
## 目标模板模块
| 模块 | 目标服务 | 说明 |
| --- | --- | --- |
| 登录 | `AuthService` | 本地固定账号 provider 和真实后端 provider |
| 审计日志 | `AuditLogService` | 记录登录、设置变更、任务操作、导出等用户动作 |
| 运行日志 | `AppLogService` | 记录 AI 调用、数据库、文件、热键等错误 |
| 商品图片 AI 优化 | `ImageOptimizationService` | 创建任务、查询状态、查看结果和失败原因 |
| 数据统计 | `MetricsService` | 聚合今日处理量、成功率、耗时、失败数和 7 天趋势 |
## 热键
| 文件 | 方法 / 内容 | 说明 |
@@ -43,3 +53,15 @@
| `frontend/src/pages/Home/Index.vue` | 第二窗口入口 | OCR 示例页面 |
| `frontend/src/utils/ThemeManager.ts` | 主题工具 | 主题切换和持久化协作 |
| `frontend/src/utils/i18n.ts` | 国际化工具 | 语言资源和切换 |
## 目标前端目录
| 目录 | 说明 |
| --- | --- |
| `frontend/src/layouts/` | 登录布局和主应用布局 |
| `frontend/src/modules/auth/` | 登录和会话 |
| `frontend/src/modules/settings/` | 设置中心 |
| `frontend/src/modules/image-optimizer/` | 商品图片 AI 优化业务样例 |
| `frontend/src/modules/logs/` | 审计日志和运行日志 |
| `frontend/src/modules/metrics/` | 数据统计 |
| `frontend/src/modules/components-demo/` | 常用组件示例 |
+22 -8
View File
@@ -5,17 +5,20 @@
| 领域 | 当前等级 | 说明 |
| --- | --- | --- |
| 项目结构 | B | 已从模板整理为普通工程,目录职责基本清楚 |
| 后端服务 | B | 服务边界清晰,但热键和 OCR 的错误路径仍可加强 |
| 本地存储 | B | SQLite 初始化和基础测试已存在,后续可补更多迁移测试 |
| 前端结构 | B | Vue 组件按功能拆分,主窗口布局策略仍需明确 |
| 产品定位 | B | 已校准为 Windows-first 可复用桌面应用模板,后续需要代码落地 |
| 后端服务 | B | 现有服务边界清晰,登录、日志、统计和业务样例服务尚未实现 |
| 本地存储 | B | SQLite 初始化和基础测试已存在,目标新增表需要迁移和测试 |
| 前端结构 | B- | Vue 组件按功能拆分,但尚未形成模板化主布局和目标路由 |
| 构建验证 | B | Go 测试、前端构建、后端编译可运行 |
| 文档 | B | Harness Coding 文档已接入,后续随代码继续维护 |
| 文档 | B+ | Harness Coding 文档已接入,并同步了模板愿景 |
## 主要风险
- 模板范围膨胀:登录、设置、业务、日志、统计和组件示例都要做,但必须小步交付。
- Wails v3 alpha 版本兼容性风险。
- bindings 与 Go 服务签名不一致的运行时风险。
- 热键和 OCR 跨平台行为不完全一致。
- 登录 provider、AI provider、日志和统计如果没有边界,会导致后续替换困难。
- 热键、托盘、OCR 等平台能力在 Windows 以外行为不完全一致。
- 前端缺少专门单元测试,主要依赖构建和人工 smoke。
## 质量门槛
@@ -27,10 +30,21 @@
- 涉及前端时 `npm run build` 通过。
- 涉及后端启动时 `go build -o bin/cmbone.exe .` 通过。
- 涉及 UI 时完成对应窗口的人工检查。
- 涉及登录、日志、统计或业务样例时,同步更新 `api.md`、`routes.md`、`current-state.md` 和任务验收。
## 模板模块质量要求
- 登录:本地 provider 和 remote provider 边界清楚,密码不写死在前端。
- 设置:配置项有 key、类型、默认值、说明和迁移逻辑。
- 主业务:商品图片 AI 优化可以先模拟,但任务状态、失败原因和结果结构要真实。
- 审计日志:记录用户动作,字段可查询、可导出。
- 运行日志:记录系统错误,能支持排错。
- 数据统计:只做 P0 指标,不提前做复杂 BI。
- 组件示例:复用 Ant Design Vue,不自研组件库。
## 改进方向
- 为存储迁移、配置服务、热键服务补充更细测试。
- 为主窗口最大化和自适应布局建立明确规则。
- 为 OCR 失败、热键注册失败补充用户可理解反馈。
- 建立 Windows-first 主窗口最大化和自适应布局策略。
- 为登录、日志、图片任务和统计新增服务、模型、迁移和测试。
- 为商品图片 AI 优化样例补充真实页面闭环。
- 为 Wails bindings 生成流程补充完整操作说明。
+27 -13
View File
@@ -4,26 +4,40 @@
当前使用 hash history,适配 Wails 桌面窗口。
## 路由表
## 当前路由
| 路由 | 组件 | 窗口 | 职责 |
| --- | --- | --- | --- |
| `#/` | `frontend/src/components/Main/Index.vue` | 主窗口 | 设置中心、导航、主题、语言、快捷键、标签、关于等 |
| `#/second` | `frontend/src/pages/Home/Index.vue` | 第二窗口 | OCR 示例和轻量快捷功能 |
| `#/` | `frontend/src/components/Main/Index.vue` | 主窗口 | 当前设置中心、导航、主题、语言、快捷键、标签、关于等 |
| `#/second` | `frontend/src/pages/Home/Index.vue` | 第二窗口 | 当前 OCR 示例和轻量快捷功能 |
## 主窗口区域
## 目标路由
主窗口当前由 `Main/Index.vue` 组织以下区域:
| 路由 | 页面 | 职责 |
| --- | --- | --- |
| `#/login` | 登录页 | 本地固定账号登录或真实后端登录 |
| `#/dashboard` | 工作台 | 展示 P0 统计指标和最近任务 |
| `#/business/image-optimizer` | 商品图片 AI 优化 | 创建优化任务、查看任务列表、状态、结果和失败原因 |
| `#/logs/audit` | 审计日志 | 查询用户操作记录 |
| `#/logs/app` | 运行日志 | 查询系统错误和排错信息 |
| `#/statistics` | 数据统计 | 查看趋势、成功率、耗时和失败任务 |
| `#/settings` | 设置中心 | 主题、语言、窗口、快捷键、数据目录、日志策略 |
| `#/components` | 组件示例 | 输入框、多选框、下拉框、多行文本、表格、筛选、分页 |
| `#/about` | 关于 | 应用版本、运行环境和文档入口 |
- Dashboard:概览。
- General:通用设置。
- Shortcut:快捷键设置。
- Tags:标签相关展示。
- About:关于信息。
## 主窗口布局
目标主窗口使用三段式布局:
- 侧边导航:模块入口。
- 顶部区域:当前用户、运行状态、快捷动作。
- 内容区:路由页面,填满剩余空间。
Windows 10+ 是主要体验目标。主窗口是否默认最大化需要通过任务确认,但内容区必须能稳定填满空余区域,不能只占左上角小块。
## 页面规则
- 新增页面必须先确认是否属于主窗口长期功能,还是第二窗口轻量功能。
- 主窗口应优先使用可维护的设置布局,不做营销式首页。
- 第二窗口保持小而聚焦,不承载复杂流程。
- 新增页面必须先确认属于模板能力、业务样例还是开发者示例。
- 主业务页面放在主窗口,不放在第二窗口。
- 第二窗口保持轻量快捷功能,不承载长期复杂业务流程。
- 路由变化必须同步本文和相关任务验收。
+23
View File
@@ -29,3 +29,26 @@
- `npm install` 报告 3 个 moderate audit findings,本次文档任务未处理依赖审计。
- 前端构建提示 Browserslist 数据过期。
- Vite 提示生产 chunk 大于 500 kB。
### 校准为可复用桌面应用模板
- 任务:根据项目愿景,把文档从基础 Wails 工程调整为 Windows-first、可扩展到其他平台的可复用桌面应用模板。
- 决策:
- 模板核心模块包括应用壳、设置、登录、主业务、操作日志、数据统计和常用组件示例。
- 第一批业务样例使用“电商商品图片 AI 优化”。
- 登录设计为本地固定账号 provider 和真实后端 provider 两种路径。
- 操作日志分为审计日志和运行日志,分别服务审计和排错。
- 第一批统计指标为今日处理图片数、AI 优化成功率、平均处理耗时、失败任务数、今日操作日志数、最近 7 天处理趋势。
- 结果:更新 README、AGENTS、愿景、需求、技术栈、架构、编码规则、任务看板、API、路由、当前状态、方法地图和质量文档。
- 验证:
- 旧定位关键词搜索通过,未发现旧定位残留。
- `git diff --check` 通过。
- `.\init.ps1` 通过。
- 脚本内 `npm install` 通过。
- 脚本内 `go test ./...` 通过。
- 脚本内 `cd frontend && npm run build` 通过。
- 脚本内 `go build -o bin\cmbone.exe .` 通过。
- 非阻塞警告:
- `npm install` 仍报告 3 个 moderate audit findings。
- 前端构建仍提示 Browserslist 数据过期。
- Vite 仍提示生产 chunk 大于 500 kB。