1
0
Files
nex/openspec/changes/archive/2026-05-05-unify-branding-and-about-version/specs/desktop-app/spec.md
lanyuanxiaoyao 8eea30ea11 feat: 统一品牌标识、关于页面三卡片布局与版本诊断功能
- 统一品牌为 Nex:侧边栏、托盘 tooltip、HTML 标题、favicon (PNG 替代 SVG)
- 重构关于页面为三卡片布局(品牌/版本/链接),版本状态 Tag 绝对定位右上角
- 新增 GET /api/version 后端接口,返回 version/commit/build_time
- 新增前端版本一致性诊断:匹配/不匹配/不可判断三种状态
- 同步 delta specs 到主 specs 并归档变更
2026-05-05 03:28:22 +08:00

3.0 KiB
Raw Blame History

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 路由)