Junjie
19 小时以前 1b18c27ab5db1a596bde59aca360982364ef1368
#AGENTS.md
1个文件已修改
281 ■■■■■ 已修改文件
AGENTS.md 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
AGENTS.md
@@ -1,8 +1,273 @@
先从原始需求出发,不默认用户已经完全想清楚目标、约束和实现路径。
只有当需求存在关键歧义,且不同理解会导致明显不同方案或较高错误成本时,才先停下来澄清;
否则基于最合理解释继续,并明确说明假设。 当需要给出修改或重构方案时,遵循以下原则:
- 默认只围绕用户明确提出的目标设计方案,不擅自扩展业务目标,不引入替代业务路径。
- 优先给出满足目标的最小完整方案,而不是补丁式兼容方案;但如果“最短路径”与“非补丁”冲突,应优先选择不会引入结构性错误的最小正确方案。
- 不做与当前需求无关的兜底、降级或额外分支设计;但为保证逻辑闭合,允许加入必要的输入约束、状态检查和边界保护。
- 输出方案前,按输入、处理流程、状态变化、输出、上下游影响进行链路检查;
- 对无法验证的部分必须明确标注假设和未验证前提,不得将推测表述为已确认事实。
先从原始需求出发,不默认用户已经完全想清楚目标、约束和实现路径。
只有当需求存在关键歧义,且不同理解会导致明显不同方案或较高错误成本时,才先停下来澄清;否则基于最合理解释继续,并明确说明假设。
当需要在本仓库内给出修改、排查或重构方案时,遵循以下规则。
## 1. 目标边界
- 默认只围绕用户明确提出的目标设计方案,不擅自扩展业务目标,不引入替代业务路径。
- 优先给出满足目标的最小完整方案,而不是补丁式兼容方案;但如果“最短路径”和“最小正确方案”冲突,优先不引入结构性错误。
- 不做与当前需求无关的兜底、降级或额外分支设计;但为保证逻辑闭合,允许加入必要的输入约束、状态检查和边界保护。
- 输出方案前,按“输入 -> 处理流程 -> 状态变化 -> 输出 -> 上下游影响”完成链路检查。
- 对无法验证的部分,必须明确标注假设和未验证前提,不得将推测表述为已确认事实。
## 2. 仓库结构总览
这是一个 `Spring Boot 3.5 + Java 17 + MyBatis-Plus + WAR` 的 WCS 项目,前端不是独立 Node 工程,而是 `src/main/webapp` 下的页面与静态脚本直出。
### 2.1 启动与构建
- 启动入口:`src/main/java/com/zy/Boot.java`
- Maven 坐标:`com.zy:wcs:1.0.0`
- 打包方式:`war`
- 最终产物名:`wcs`
- 默认端口:`9090`
- 默认上下文路径:`/wcs`(由 `server.servlet.context-path: /@pom.build.finalName@` 解析而来)
### 2.2 Java 包结构
- `src/main/java/com/zy/asrs`
  - 业务域主模块。
  - 常见分层:`controller`、`service`、`mapper`、`entity`、`domain`、`task`、`planner`、`ws`。
  - 与任务、出入库、站点、地图、路径策略相关的需求,优先从这里定位。
- `src/main/java/com/zy/core`
  - 设备运行时与调度核心。
  - 关注 `dispatch`、`network`、`thread`、`task`、`move`、`plugin`、`trace`、`properties`。
  - 设备动作编排、线程执行、主流程插件、网络通讯问题优先看这里。
- `src/main/java/com/zy/system`
  - 系统管理与基础配置。
  - 包含用户、角色、权限、资源、日志、License许可证、系统配置、定时任务等。
- `src/main/java/com/zy/ai`
  - AI 相关功能模块。
  - 包含提示词模板、LLM 路由、调用日志、诊断、MCP 挂载、定时任务、初始化逻辑。
  - 涉及 `/ai/**` 页面或接口、Spring AI、MCP Server 时优先看这里。
- `src/main/java/com/zy/common`
  - 通用能力。
  - 包含认证、Web、工具、国际化、通用模型与公共服务。
- `src/main/java/com/core`
  - 旧公共基础能力和代码生成相关内容。
  - 常见内容包括注解、异常、基础工具、生成器模板支撑。
  - 不要默认这里是当前主业务入口,但改动生成器、基础返回结构或底层工具时需要关注。
### 2.3 资源与前端结构
- 页面:`src/main/webapp/views/**`
- 页面脚本:`src/main/webapp/static/js/**`
- 公共组件:`src/main/webapp/components/**`
- 样式:`src/main/webapp/static/css/**`
- Mapper XML:`src/main/resources/mapper/*.xml`
- SQL 迁移脚本:`src/main/resources/sql/*.sql`
- 国际化:`src/main/resources/i18n/**`
- 代码生成模板:`src/main/resources/templates/**`
- 地图/示例文件:`src/main/resources/map/**`
前端结构以“页面目录”和“同名脚本目录”配对为主,例如:
- `views/basStation/**` 对应 `static/js/basStation/**`
- `views/watch/**` 对应 `static/js/watch/**`
- `views/ai/**` 对应 AI 相关页面
但监控与可视化页面还会额外依赖:
- `src/main/webapp/components/MapCanvas.js`
- `src/main/webapp/components/WatchCrnCard.js`
- `src/main/webapp/components/WatchDualCrnCard.js`
- `src/main/webapp/components/WatchRgvCard.js`
## 3. 按需求类型定位代码
### 3.1 后端接口或业务逻辑
优先按这条链路检查:
`Controller -> Service -> ServiceImpl -> Mapper.java -> mapper/*.xml -> 实体/DTO/Param`
注意:
- 本项目大量查询和更新依赖 XML SQL,不能只改 Java Mapper 接口不改 XML。
- 改字段时必须同步检查实体、参数对象、返回对象、SQL 别名和前端字段名。
- 如果是列表页或保存页,通常还要继续联动到 `views/**` 与 `static/js/**`。
### 3.2 数据库结构或菜单/配置新增
优先检查:
- `src/main/resources/sql/*.sql`
- `src/main/java/com/zy/system/**`
- `src/main/java/com/zy/asrs/**`
- `src/main/java/com/zy/ai/**`
规则:
- 表结构、初始化数据、菜单、配置项新增,默认补 SQL 脚本,而不是只改运行时代码。
- 若需求涉及历史迁移,按现有命名风格新增增量 SQL,避免直接覆盖旧脚本。
### 3.3 设备线程、调度、主流程、网络通讯
优先检查:
- `src/main/java/com/zy/core/thread/**`
- `src/main/java/com/zy/core/dispatch/**`
- `src/main/java/com/zy/core/task/**`
- `src/main/java/com/zy/core/network/**`
- `src/main/java/com/zy/asrs/task/**`
- `src/main/java/com/zy/core/plugin/**`
规则:
- 不要只在单个线程类中做局部修补而忽略状态来源、任务下发条件和回写路径。
- 必须检查共享状态、阻塞点、异常吞噬、重试条件、线程退出条件。
- 涉及主流程切换时,注意 `mainProcessPlugin` 配置及相关插件实现。
### 3.4 监控大屏、地图、WebSocket、PixiJS
优先检查:
- `src/main/webapp/views/watch/**`
- `src/main/webapp/views/locMap/locMap.html`
- `src/main/webapp/components/MapCanvas.js`
- `src/main/java/com/zy/asrs/ws/**`
规则:
- WebSocket 地址要带上下文路径 `/wcs`。
- 监控页改动通常不止一个 HTML,可能同时影响 `console.html`、`console_pixijs.html`、`locMap.html` 和组件文件。
- 地图点位、设备状态、颜色、轨迹、性能问题,优先判断是前端渲染问题还是后端推送数据问题,不要混在一起改。
### 3.5 AI、诊断、LLM 路由、MCP
优先检查:
- `src/main/java/com/zy/ai/controller/**`
- `src/main/java/com/zy/ai/service/**`
- `src/main/java/com/zy/ai/config/**`
- `src/main/java/com/zy/ai/mcp/**`
- `src/main/webapp/views/ai/**`
- `src/main/resources/sql/*ai*.sql`
规则:
- 路由、模板、挂载信息很多已经迁移到数据库,不要只盯 `application.yml`。
- 如果需求涉及模型、密钥、路由切换,先区分“数据库主配置”和“YAML 回退配置”。
## 4. 修改原则
### 4.1 默认最小闭环,不做半链路改动
- 只改用户目标直接相关文件。
- 但只要当前链路天然依赖上下游文件,就必须一次改完整,不能留下明显断链。
### 4.2 保持现有工程风格
- 后端保持当前包结构和分层命名方式。
- 前端保持当前 `Vue 2 风格脚本直写` 的方式,不额外引入前端构建体系。
- 非必要不把现有 HTML/JS 页面改造成全新框架写法。
### 4.3 避免结构性错误
- 不随意把业务逻辑塞进 Controller。
- 不新增与现有体系并行但职责重复的 Service、Util、线程或页面。
- 不绕过 Mapper XML 直接拼接杂散 SQL。
## 5. 执行前检查
开始实现前至少确认以下几点:
- 需求属于哪个模块:`asrs`、`core`、`system`、`ai`、`common`、`com/core`
- 是否涉及数据库字段、SQL、菜单、配置项
- 是否涉及前后端联动
- 是否涉及线程状态、设备动作、WebSocket 推送
- 是否需要补国际化文案
- 是否需要新增 SQL 迁移脚本
如果这些问题里有任何一项答案是“是”,实现时必须把相关链路一并纳入。
## 6. 搜索与排查方式
优先用快速定位,不做无边界扫读:
```bash
rg -n "关键字" src/main/java src/main/resources src/main/webapp
rg --files src/main/java/com/zy | rg "Controller|Service|Mapper|Task|Thread"
rg -n "接口路径|字段名|配置项名" src/main/java src/main/webapp src/main/resources
```
排查问题时优先找:
1. 入口 Controller 或页面按钮事件
2. 对应 Service 主流程
3. Mapper XML / SQL
4. 状态回写点
5. 页面渲染或 WebSocket 消费点
## 7. 校验与验证
按成本从低到高执行,无法执行时要明确说明原因。
### 7.1 编译校验
```bash
mvn -q -DskipTests compile
```
### 7.2 定向测试
若改动附近已有测试,优先跑定向测试,例如:
```bash
mvn -q -Dtest=NavigateUtilsTest test
mvn -q -Dtest=WrkAnalysisServiceImplTest test
```
### 7.3 整体测试
```bash
mvn test
```
### 7.4 启动验证
```bash
mvn -q -DskipTests spring-boot:run
```
重点确认:
- 服务端口 `9090`
- 实际访问前缀 `/wcs`
- MySQL、Redis 依赖是否可连接
### 7.5 页面验证
如果改了页面、脚本或 WebSocket,至少说明验证了哪些页面,例如:
- `/wcs/views/index.html`
- `/wcs/views/watch/console.html`
- `/wcs/views/locMap/locMap.html`
- `/wcs/views/ai/*.html`
## 8. 高风险改动提醒
- 改 Mapper XML 时,重点防字段漏映射、别名不一致、结果集类型错误。
- 改线程/调度逻辑时,重点防竞态、重复下发、状态不回收、死循环、异常丢失。
- 改页面字段时,重点防前后端 JSON 字段名不一致。
- 改上下文路径相关代码时,重点防前端硬编码路径漏加 `/wcs`。
- 改 AI 配置时,重点防把数据库配置链路和 YAML 回退链路混淆。
- 改监控/地图逻辑时,重点防“后端数据正确但前端渲染错位”和“前端显示正常但状态源错误”互相误判。
## 9. 输出要求
完成任务后,结果说明应尽量包含:
1. 改了什么,目的是什么。
2. 影响了哪条链路或哪些模块。
3. 实际修改了哪些文件。
4. 跑了哪些验证,结果如何。
5. 哪些内容是基于假设,哪些部分未验证。
如果是排查类任务,优先说明根因、证据和修复点;如果尚未完成,明确阻塞位置,不要把推测当结论。