- 统一品牌为 Nex:侧边栏、托盘 tooltip、HTML 标题、favicon (PNG 替代 SVG) - 重构关于页面为三卡片布局(品牌/版本/链接),版本状态 Tag 绝对定位右上角 - 新增 GET /api/version 后端接口,返回 version/commit/build_time - 新增前端版本一致性诊断:匹配/不匹配/不可判断三种状态 - 同步 delta specs 到主 specs 并归档变更
3.0 KiB
3.0 KiB
MODIFIED Requirements
Requirement: 系统托盘
系统 SHALL 提供跨平台系统托盘功能,支持托盘图标和菜单。图标格式 SHALL 根据平台自动选择。
Scenario: 托盘图标显示
- WHEN 桌面应用启动成功
- THEN 系统根据平台加载正确的图标格式
- AND 在 Windows 上加载 ICO 格式图标(
assets/icon.ico) - AND 在 macOS 和 Linux 上加载 PNG 格式图标(
assets/icon.png) - AND 托盘图标 tooltip 显示
Nex
Scenario: 托盘菜单显示
- WHEN 用户点击托盘图标(左键或右键)
- THEN 显示托盘菜单
- AND 菜单包含"打开管理界面"选项
- AND 菜单包含"状态: 运行中"选项(禁用状态)
- AND 菜单包含"端口: 9826"选项(禁用状态)
- AND 菜单包含"退出"选项
Scenario: 打开管理界面
- WHEN 用户点击托盘菜单"打开管理界面"
- THEN 系统在浏览器中打开
http://localhost:9826
Scenario: 浏览器打开失败
- WHEN 系统无法打开浏览器(浏览器未安装等)
- THEN 托盘菜单仍可正常使用
- AND 用户可手动访问
http://localhost:9826
Scenario: 退出应用
- WHEN 用户点击托盘菜单"退出"
- THEN 系统优雅关闭后端服务
- AND 托盘图标消失
- AND 应用进程退出
Requirement: 静态文件服务
系统 SHALL 通过 Gin 同时服务 API、协议代理和前端静态资源。
Scenario: API 请求路由
- WHEN 请求路径以
/api/或/health开头 - THEN 请求由现有业务 handler 处理或返回 API 风格 404
Scenario: 版本接口路由
- WHEN desktop 模式收到
GET /api/version请求 - THEN 请求 SHALL 由版本信息 handler 处理
- THEN 响应 SHALL 为 API JSON 响应
- THEN 请求 SHALL NOT 返回前端
index.html
Scenario: 协议代理请求路由
- WHEN 请求路径以
/openai/或/anthropic/开头 - THEN 请求 SHALL 被视为协议代理请求或返回 API 风格 404
- THEN 请求 SHALL NOT 返回前端
index.html
Scenario: OpenAI 代理路由
- WHEN desktop 模式收到
/openai/v1/chat/completions请求 - THEN 请求 SHALL 进入 ProxyHandler
- THEN ProxyHandler SHALL 获取 clientProtocol 为
openai
Scenario: Anthropic 代理路由
- WHEN desktop 模式收到
/anthropic/v1/messages请求 - THEN 请求 SHALL 进入 ProxyHandler
- THEN ProxyHandler SHALL 获取 clientProtocol 为
anthropic
Scenario: 静态资源路由
- WHEN 请求路径为
/assets/* - THEN 返回嵌入的前端静态资源文件
- THEN 请求 SHALL NOT 被协议代理路由处理
Scenario: PNG Favicon 路由
- WHEN 请求路径为
/icon.png - THEN 返回来源于统一应用图标的 PNG favicon 资源
- THEN 请求 SHALL NOT 被协议代理路由处理
Scenario: SPA 路由回退
- WHEN 请求路径不匹配任何 API、协议代理或静态资源路由
- THEN 返回
index.html(支持前端 SPA 路由)