Freya MID-UI Desktop App Scaffold
本技能定义了一套工业级桌面软件开发生命周期 (SDLC) 与极简工业风设计系统 (MID-UI)。 作为 AI 代理,当你被要求开发一款基于此规范的桌面应用时,绝对禁止直接开始编写代码。你必须严格遵循以下五个阶段,并在特定的节点停下来等待用户确认(卡点)。
核心参考资料 (Core References - MANDATORY READ)
在执行对应阶段时,你必须读取对应的详细标准文档:
开发流程与话术模板:
@path references/01-sdlc-workflow.mdMID-UI 设计系统(Design Tokens + 组件规格 + Do/Don't):
@path references/02-mid-ui-design.md← Phase 2 唯一视觉标准,所有颜色/尺寸/间距必须从此文档查值,禁止自行发明Rust + Freya 架构与工程规范:
@path references/03-architecture.mdREADME 文档标准与多语言规范:
@path references/04-documentation.md项目开源双许可模板:
@path assets/LICENSE-MIT,@path assets/LICENSE-APACHECI/CD 发布脚本模板:
@path assets/release.yml参考模板工程(逐文件导航):
@path template/实现每个模块前,必须先读对应模板文件,禁止不看模板直接手写已有的模块。你要实现的模块 实现前必须读的模板文件 Cargo.toml依赖与 features 配置@path template/Cargo.toml路由定义、AppState、Context 注入、主题同步 @path template/src/app.rsThemeTokens / with_alpha/RADIUS_*常量@path template/src/theme.rs← 色彩系统权威实现ActivityBar(Logo + 路由 nav + Ripple + 指示器) @path template/src/components/activity_bar.rsDropZone(三态 + rfd 点击降级 + 鼠标样式) @path template/src/components/drop_zone.rsColorPickerPanel(HSV 渐变 + 色相条 + Hex 显示) @path template/src/components/color_picker_panel.rsSettings 页(SpaceBetween 行 + Popup + ThemeChip) @path template/src/views/settings.rsAbout 页(居中布局 + 三链接 + 更新按钮) @path template/src/views/about.rsHome 页(DropZone 接入 + 文件列表展示) @path template/src/views/home.rs更新检测后台逻辑(GitHub API + 版本比对) @path template/src/core/update.rs程序入口 @path template/src/main.rs
阶段 0: 工程状态诊断 (Phase 0: Context Triage)
目标: 明确是“从零开发新项目”还是“旧有工程重构/技术栈迁移”。 行为:
- 询问用户:这是一个全新项目 (Greenfield) 还是旧有工程重构 (Brownfield)?
- 如果是旧工程重构:
- 必须先使用
explore/read工具完整梳理旧工程的目录、业务逻辑和状态管理。 - 识别旧技术栈(如 Tauri, Iced, Electron 或纯 CLI)。
- 核心原则:剥离并保留原有的纯业务逻辑 (Core Logic),但准备好彻底替换旧的 UI 框架代码、构建脚本和相关文档。
- 必须先使用
阶段 1: 需求澄清 (Phase 1: Requirements - The PM Phase)
目标: 完全理解业务核心、边界和系统级依赖。 行为:
- 读取
01-sdlc-workflow.md中的 Phase 1 提问大纲。 - 扮演资深产品经理 (PM),与用户进行多轮对话,澄清:核心输入输出、I/O 权限、常驻托盘需求、持久化配置项、国际化需求。
- 如果是重构:明确技术栈迁移范围(如:废弃前端 JS/TS,纯 Rust 化),生成旧业务逻辑的迁移清单。
- 生成标准的
docs/requirements.md。 [强制卡点]: 等待用户回复“需求确认无误”。
阶段 2: UI 架构与原型设计 (Phase 2: UI/UX Design - The Designer Phase)
目标: 确定软件的视觉呈现、空间拓扑和交互逻辑。严禁讨论 Rust 代码实现。 行为:
- 读取
02-mid-ui-design.md,完整理解以下内容后再开始设计:- 全部 Color Token(dark/light 两套,精确到 Rust 元组值)
- Typography 体系(7 档字号,哪个角色用哪档)
- Spacing 体系(4pt grid,合法值列表)
- 每个组件的精确规格(Activity Bar 尺寸、Nav item 高度、Drop Zone 三态)
- Do / Don't 规则(禁止裸色值、禁止非 4pt 间距、禁止页面布局层绝对定位等)
- 扮演资深 UI 设计师。根据业务需求,使用 ASCII 字符画绘制出
Main Stage的界面布局(输入框在哪、列表在哪)。 - 明确各个组件对应的 Design Tokens(从
02-mid-ui-design.md精确引用,不得自行发明数值)。 - 生成
docs/ui-design.md。 [强制卡点]: 向用户展示 ASCII 草图和视觉映射,等待用户回复“UI 设计通过”。
阶段 3: 系统架构与依赖规划 (Phase 3: System Architecture - The Architect Phase)
目标: 规划目录结构、数据流和依赖选型。 行为:
- 读取
03-architecture.md,理解状态提升 (State Hoisting) 和异步隔离 (Tokio) 规范。 - 扮演资深架构师。如果是重构项目,必须规划“技术栈替换方案”:如何安全移除旧框架依赖(如
tauri-build),将旧的纯 Rust 逻辑解耦并放入新架构的src/core/目录。 - 规划跨路由不丢失的全局状态树 (Context)、局部渲染状态 (Signal)。决定需要引入的额外 Crate(如
serde,directories,tokio)。拒绝无用依赖。 - 生成
docs/design.md与AGENTS.md(记录本项目专属的架构死线)。 [强制卡点]: 简述架构、状态流和选型,等待用户回复“架构通过”。
阶段 4: 编码实现 (Phase 4: Development - The Engineer Phase)
目标: 像素级还原 UI,实现稳定高效的业务逻辑。 行为:
扮演全栈工程师。如果是新项目执行
cargo new。如果是重构项目:先大刀阔斧清理旧框架冗余代码(如src-tauri、前端package.json),再修改Cargo.toml引入 Freya 体系。强烈建议调用系统内置的
rust-skills(内存/错误处理) 和freya(UI 生命周期) 技能协助编码。初始化骨架(严格按文件顺序,先读后写): 逐模块参考或拷贝
template/src/下的对应文件。实现每个模块前必须先用read工具读取对应模板文件,禁止跳过直接手写。 施工顺序如下:第一轮:搭外壳,
cargo build验证通过后再继续- 读
template/Cargo.toml→ 复制依赖声明(freya features、rfd、reqwest 等),按实际业务增删,不得遗漏rfd - 读
template/src/main.rs→ 复制程序入口 - 读
template/src/app.rs→ 复制路由定义、AppState、AppLayout、全局 Context 注入、主题同步逻辑,按业务扩展AppState字段 - 读
template/src/theme.rs→ 直接拷贝ThemeTokens,禁止修改 token 数值 - 读
template/src/components/activity_bar.rs→ 复制 ActivityBar 骨架 - 读
template/src/core/update.rs→ 按需复制更新检测模块(需求不含更新功能可跳过) - 执行
cargo build,确认 0 error,再进行第二轮
第二轮:组装 Main Stage 与业务页面 8. 读
template/src/components/drop_zone.rs→ 复制 DropZone(三态 + rfd + 鼠标样式),接入 Home 页 9. 读template/src/components/color_picker_panel.rs→ 按需复制(需要 Accent Color 配置时) 10. 读template/src/views/settings.rs→ 复制 Settings 页框架(SpaceBetween 行 + Popup + ThemeChip) 11. 读template/src/views/about.rs→ 复制 About 页(居中布局),填入真实应用名/描述/链接 12. 读template/src/views/home.rs→ 了解 DropZone 接入方式后,在此文件中实现核心业务 Main Stage 13. 在src/core/下编写纯 Rust 业务逻辑,与 UI 完全解耦- 读
实现强制验收项(新增):
Theme必须是真实切换(Dark/Light/Auto)并驱动全局 token,不允许仅文字占位。Accent Color必须可见生效(至少作用于 active 指示器、主按钮、Drop Zone hover)。Activity Bar必须采用“顶部 Home、底部 Settings/About”分区,未激活图标默认透明背景,激活态使用指示器。About必须完整实现:Logo(56x56) + Version(Beta) + Check Update + 三链接区,居中布局。Drop Zone必须实现 Idle/Hover/Active 三态,不允许单态静态框。
严格遵守
03-architecture.md中的多线程和异步隔离规则。
阶段 5: 测试与发布 (Phase 5: Testing & Release - The DevOps Phase)
目标: 确保交互动效生效,输出全平台打包脚本和标准多语言文档,并完成远程代码托管部署。 行为:
- 扮演 DevOps 工程师。校验深/浅色模式、跨路由状态是否保持、点击的物理反馈动效是否完美实现。
- 将
@path assets/LICENSE-MIT和@path assets/LICENSE-APACHE复制到项目根目录。 - 工程化脚本: 将
@path assets/Makefile复制到项目根目录。此 Makefile 封装了全平台(Linux, macOS, Windows)的交叉编译指令和制品命名规范。 - Logo 生成: 在项目根目录创建
assets/文件夹。强烈建议使用SVG Logo Designer技能为应用生成一个简约的assets/logo.png或assets/logo.svg,作为应用图标和 README 展示。 - 读取
@path references/04-documentation.md,如果是重构项目,强制重写原有的README.md和架构文档,以反映全新的 Rust+Freya 技术栈。如果是新项目,则生成全新的带居中 Logo 的英文README.md,并在docs/下生成中文README_zh.md。 - 清理旧的 CI/CD 流程(如 Tauri Action),将
@path assets/release.yml复制到.github/workflows/release.yml,开启跨端打包流。 - 远程部署与版本发布 (GitHub Publishing & Release):
- 判断场景: 检查当前目录是否已关联远程仓库 (
git remote -v)。 - 场景 A (首次发布 - 全新项目):
- 询问用户:目标归属 (个人账号或组织名)、仓库名称、可见性 (公开 Public 还是私有 Private) 以及一句话简介 (Description) 和 核心标签 (Topics, 如 rust, freya, desktop)。
- 执行
git init、git add .和git commit -m "Initial commit: Freya MID-UI Scaffold"。 - 格式化 Description:强制将简介格式化为中英双语格式(例如:
一款极简的 xlog 解密工具 · A minimalist xlog decryption utility)。 - 调用
gh repo create <owner>/<repo> --<visibility> --source=. --remote=origin --push --description "<中英双语简介>"将代码正式推送到远程。 - 完善 About 区: 调用
gh repo edit为仓库增加专业配置,例如:将 Homepage 指向 Latest Release (gh repo edit --homepage "https://github.com/<owner>/<repo>/releases/latest"),并添加核心标签 (gh repo edit --add-topic "rust,freya,mid-ui"等)。
- 场景 B (版本迭代 - 已有旧工程/后续更新):
- 询问用户:本次发布的版本号 (如 v1.1.0) 及 简要更新日志 (Release Notes)。
- 自动修改
Cargo.toml中的version字段以匹配新版本号。 - 执行
git add .和git commit -m "chore: release <版本号>"。 - 触发 CI/CD:打标签
git tag <版本号>,随后执行git push origin main --tags,通过.github/workflows/release.yml自动触发全平台云端打包。 - (可选) 使用
gh release create <版本号> --title "<版本号>" --notes "..."创建正式的 GitHub Release 页面。 [强制卡点]: 在执行推送到远端 (新建仓库或 Push Tag) 之前,向用户核对发布信息(仓库配置或版本号),等待用户明确回复“确认发布”。
- 判断场景: 检查当前目录是否已关联远程仓库 (