Files
quick-share/AGENTS.md
2026-03-06 14:32:52 +08:00

142 lines
6.1 KiB
Markdown
Raw Permalink 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.
# AGENTS.md
本文件面向在本仓库中工作的自动化编码代理agent
目标:在不破坏现有行为的前提下,稳定、可回归地进行开发与维护。
## 0. 仓库概览
- 仓库名:`quick-share`DataTool - 房间数据传输助手)。
- 架构:前后端分离。
- `backend/`Spring Boot 3.2.5 + Java 17。
- `frontend/`Vue 3 + TypeScript + Vite + Pinia + TailwindCSS。
- 通信约定:
- REST`/api/room/**`
- WebSocket(STOMP/SockJS)`/ws`,应用前缀 `/app`,订阅前缀 `/topic`
## 1. 环境与启动
### 1.1 版本要求
- Java17+。
- Maven3.8+。
- Node.js18+。
- npm9+。
### 1.2 本地启动(开发)
- 后端:`cd backend && mvn spring-boot:run`
- 前端:`cd frontend && npm install && npm run dev`
- 默认地址:
- 后端 `http://localhost:8080`
- 前端 `http://localhost:5173`
## 2. Build / Lint / Test 命令
说明:仓库未配置前端 lint/test 脚本;后端使用 Maven 标准测试流程。
### 2.1 后端Maven
- 全量编译+测试:`cd backend && mvn clean test`
- 全量验证CI 推荐):`cd backend && mvn clean verify`
- 打包(跳过测试):`cd backend && mvn clean package -DskipTests`
- 运行单个测试类:`cd backend && mvn -Dtest=RoomServiceTest test`
- 运行单个测试方法:`cd backend && mvn -Dtest=RoomServiceTest#shouldCreateRoom test`
- 故障排查:可追加 `-e`(详细异常)或 `-X`debug 日志)。
### 2.2 前端Vite + TypeScript
- 安装依赖:`cd frontend && npm install`
- 开发启动:`cd frontend && npm run dev`
- 生产构建:`cd frontend && npm run build`
- 预览构建:`cd frontend && npm run preview`
- 类型检查:`cd frontend && npx tsc --noEmit`
### 2.3 “单测”现状(重点)
- 后端:支持 `-Dtest=类名` / `-Dtest=类名#方法名` 精准执行。
- 前端:当前未安装 Vitest/Jest且无 `npm test` 脚本。
- 若任务要求“跑前端单测”,先确认是否已新增测试框架再执行。
## 3. 通用开发原则
- 只做最小必要改动,避免无关重构。
- 不随意改对外协议字段名REST/WS JSON
- 优先复用现有 store/service/utils避免重复造轮子。
- 前后端联动改动时,保持契约同步(字段、枚举、路径)。
- 错误处理优先“可读、可定位”,不要静默吞关键异常。
## 4. 前端规范Vue 3 + TypeScript
### 4.1 类型与 TS
- `frontend/tsconfig.json` 已启用 `strict: true`,新增代码必须通过。
- 禁用 `any`;必要时使用 `unknown` 并做类型收窄。
- API 响应、消息模型、store 状态优先显式接口定义。
- 公共类型放在 `frontend/src/types/`(如 `room.ts`)。
- 类型导入优先 `import type`
### 4.2 组件与状态管理
- 使用 `script setup lang="ts"`(与现有组件一致)。
- 组件文件名使用 `PascalCase.vue`
- 组合式 API 优先:`ref` / `computed` / `watch`
- 跨组件共享状态集中到 Pinia当前核心在 `wsStore`)。
- WebSocket 逻辑优先复用 `RoomWsClient` + `wsStore`,避免旁路实现。
### 4.3 导入、路径与格式
- 导入顺序建议:
1) 第三方依赖。
2) `@/` 别名模块。
3) 相对路径模块。
- 优先使用 `@/` 别名,减少深层 `../../`
- 现有 TS/Vue 代码风格2 空格缩进、单引号、语句末尾分号。
### 4.4 命名约定
- 变量/函数:`camelCase`
- 类型/接口:`PascalCase`
- 常量:`UPPER_SNAKE_CASE`阈值、key 前缀等)。
- 布尔语义命名:`is/has/can/should` 前缀。
### 4.5 样式与 UI
- 样式体系Tailwind + 少量 CSS 变量(见 `frontend/src/assets/main.css`)。
- 复用语义色:`primary` / `success` / `danger` / `warning`
- 不引入新 UI 框架(除非任务明确要求)。
- 响应式写法遵循已有断点习惯:`sm` / `md` / `lg`
### 4.6 前端错误处理
- `fetch` 后必须检查 `res.ok`,失败时给出可理解错误。
- `catch` 中保留必要诊断信息,同时确保 UI 状态可恢复。
- 对上传/下载/队列等流程错误后要维护一致状态进度、loading、重试入口
## 5. 后端规范Spring Boot + Java
### 5.1 Java 风格
- 使用 Java 17 特性时保持克制,优先可读性。
- 缩进 4 空格;类名 `PascalCase`,成员 `camelCase`,常量 `UPPER_SNAKE_CASE`
- DTO/不可变结构优先 `record`(项目已采用)。
### 5.2 分层职责
- `controller`:参数校验、协议转换、状态码。
- `service`:核心业务规则、状态流转。
- `config`:框架配置与属性绑定。
- 避免把复杂业务塞入 Controller。
### 5.3 异常与 I/O
- 参数/状态非法:优先 `IllegalArgumentException` 或明确状态码。
- I/O 失败:保留异常链,不吞异常。
- 对外返回结构保持稳定,避免随意改 key。
- 文件/流操作使用 `try-with-resources` 并处理清理逻辑。
### 5.4 并发与状态
- 房间会话是并发场景,遵循现有并发容器策略(如 `ConcurrentHashMap`)。
- 共享状态修改必须考虑线程安全与资源释放(离房、断连、文件清理)。
## 6. 协议与兼容性
- 消息结构以 `frontend/src/types/room.ts` 与后端 `MessagePayload` 对齐。
- 修改消息字段时必须同步更新:
- 前端类型定义。
- 前端消息处理分支。
- 后端发送/接收逻辑。
- 现有架构约束:文件内容走 HTTP消息元数据走 WebSocket不要随意改。
## 7. 变更后自检
- 后端改动:至少执行 `cd backend && mvn test`(或受影响单测)。
- 前端改动:至少执行 `cd frontend && npm run build``cd frontend && npx tsc --noEmit`
- 文档改动:核对命令、端口、路径、环境变量名是否与仓库一致。
- 最终确认:未误改协议字段、路由路径、事件类型、配置 key。
## 8. Cursor / Copilot 规则同步
已检查以下位置:
- `.cursorrules`
- `.cursor/rules/`
- `.github/copilot-instructions.md`
当前仓库未发现上述文件,因此本 `AGENTS.md` 为主要代理执行规范。
若后续新增 Cursor/Copilot 规则,请将关键约束并入本文件并保持一致。