Files
svn-log-tool/AGENTS.md
mangmang 2dc0f931a2 chore: 清理测试数据并补充代理规范
移除仓库中的测试脚本和示例日志,减少无关噪音并保持目录整洁。新增 AGENTS.md 统一构建、测试与代码规范,便于后续自动化代理稳定协作。
2026-03-08 22:44:27 +08:00

149 lines
6.3 KiB
Markdown
Raw 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 指南svn-log-tool
本文件提供给自动化编码代理Agent使用。
目标:在不破坏现有行为的前提下,安全、可复现地修改本仓库。
## 1. 项目概览
- 语言与构建Java 8 + Maven`pom.xml`)。
- 打包产物:可执行 fat jar`jar-with-dependencies`)。
- 主入口:`com.svnlog.Main`
- 其他入口:`com.svnlog.DeepSeekLogProcessor``com.svnlog.ExcelAnalyzer`
- 核心目录:
- `src/main/java/com/svnlog/`
- `docs/`
## 2. 常用命令Build / Lint / Test / Run
以下命令默认在仓库根目录执行。
### 2.1 Build
- 仅编译(推荐快速检查):`mvn clean compile`
- 打包(跳过测试):`mvn clean package -DskipTests`
- 打包(执行测试):`mvn clean package`
- 产物(通常):`target/svn-log-tool-1.0.0-jar-with-dependencies.jar`
### 2.2 Lint / 静态检查
- 当前仓库未配置 Checkstyle / SpotBugs / PMD。
-`mvn clean compile` 作为基础语法与依赖检查。
- 若需更严格检查,可使用 `mvn -DskipTests verify`
### 2.3 Test
- 运行全部测试:`mvn test`
- 运行单个测试类(重点):`mvn -Dtest=ClassName test`
- 单测类示例:`mvn -Dtest=SVNLogFetcherTest test`
- 运行单个测试方法(重点):`mvn -Dtest=ClassName#methodName test`
- 单测方法示例:`mvn -Dtest=SVNLogFetcherTest#shouldFilterByUser test`
- 调试失败测试(输出更完整):`mvn -Dtest=ClassName test -e`
- 说明:当前 `src/test/java` 为空;新增测试时采用 Surefire 默认约定。
### 2.4 Run
- 运行主程序SVN 日志抓取):
- `java -jar target/svn-log-tool-1.0.0-jar-with-dependencies.jar`
- 运行 DeepSeek 处理器:
- `java -cp target/svn-log-tool-1.0.0-jar-with-dependencies.jar com.svnlog.DeepSeekLogProcessor`
- Maven 方式运行 DeepSeek
- `mvn exec:java -Dexec.mainClass="com.svnlog.DeepSeekLogProcessor"`
## 3. 代码结构与职责边界
- `Main.java`CLI 交互、读取输入、调用 `SVNLogFetcher`、输出 Markdown。
- `SVNLogFetcher.java`SVN 连接、版本区间处理、日志抓取、用户过滤。
- `LogEntry.java`日志数据模型POJO
- `DeepSeekLogProcessor.java`:读取 Markdown、调用 DeepSeek API、生成 Excel。
- `ExcelAnalyzer.java`:本地临时分析工具,偏实验性质。
- 变更原则:
- 抓取逻辑改在 `SVNLogFetcher`
- 交互逻辑改在 `Main`
- AI/Excel 逻辑改在 `DeepSeekLogProcessor`
- 不把多种职责混入同一方法。
## 4. 代码风格规范(必读)
### 4.1 Java 与兼容性
- 严格保持 Java 8 兼容(`source/target=1.8`)。
- 避免引入仅 Java 9+ 可用 API。
### 4.2 Imports
- 不新增通配符导入(`*`),使用明确导入。
- 按三组排序并空行分隔:
1) `java.*` / `javax.*`
2) 第三方库
3) 本项目包(`com.svnlog.*`
- 删除未使用 import。
### 4.3 格式与排版
- 缩进使用 4 个空格,不用 Tab。
- 单行长度建议 <= 120。
- `if/for/while` 必须使用大括号(即使单行语句)。
- 方法间保留一个空行;逻辑块间适度空行。
### 4.4 类型与数据结构
- 优先使用接口类型声明:`List` / `Map`,实现类写在右侧。
- 泛型必须写完整,避免原生类型。
- 可变共享状态最小化;能用 `final` 的局部变量尽量用 `final`
- 使用 `SimpleDateFormat` 等对象时,注意线程安全作用域。
### 4.5 命名规范
- 类名:`UpperCamelCase`(示例:`SVNLogFetcher`)。
- 方法/变量:`lowerCamelCase`(示例:`fetchLogs`)。
- 常量:`UPPER_SNAKE_CASE`(示例:`DEEPSEEK_API_URL`)。
- 名称应表达业务意图,避免无语义缩写(如 `tmp``data1`)。
### 4.6 异常与错误处理
- 不吞异常;至少记录错误上下文。
- CLI 提示要清晰,并给出可执行下一步。
- 能在边界处校验输入时,尽早校验并快速失败。
- 不要仅 `printStackTrace`;优先输出结构化错误信息。
- 外部调用SVN/API/文件)必须处理失败分支与空响应。
### 4.7 I/O 与资源管理
- 文件与网络资源统一使用 try-with-resources。
- 路径与编码显式声明,默认 UTF-8。
- 大文本拼接优先 `StringBuilder`
### 4.8 注释与文档
- 注释解释“为什么”,避免重复“做了什么”。
- 对外可见方法或复杂逻辑可补充简短 Javadoc。
- 修改行为时同步更新 `docs/` 下文档。
## 5. 安全与敏感信息
- 严禁提交真实密钥、口令、Token、内网敏感地址。
- `DeepSeekLogProcessor` 存在硬编码 API Key 风险;新增改动时应:
- 优先从环境变量读取(如 `DEEPSEEK_API_KEY`)。
- 回退到交互输入。
- 不把真实值写入源码或日志。
- 日志中避免打印完整凭据与隐私信息。
## 6. 测试与验收建议
- 功能变更后至少执行:
- `mvn clean compile`
- `mvn test`(若已有测试)
- 新增测试建议目录:`src/test/java/com/svnlog/`
- 测试命名建议:
- 类名:`<被测类名>Test`
- 方法名:`should<行为>When<条件>`
## 7. Git 与提交建议(给 Agent
- 小步提交,标题建议使用动词前缀:`fix:``feat:``refactor:``docs:`
- 一次提交只做一类改动(功能/重构/文档分离)。
- 不顺手修改无关文件。
- 提交前确认构建产物(`target/`)不入库。
## 8. Cursor / Copilot 规则检查结果
- 未发现 `.cursorrules`
- 未发现 `.cursor/rules/` 目录。
- 未发现 `.github/copilot-instructions.md`
- 若后续新增这些规则文件,应同步更新本 AGENTS并以更具体规则优先。
## 9. 给自动化代理的执行清单
- 先读 `pom.xml` 与目标类,再动代码。
- 先最小改动实现需求,再补测试与文档。
- 变更命令、入口、参数时必须更新本文档。
- 无测试时至少确保 `mvn clean compile` 成功。
- 输出结论时写明:改了什么、为什么、如何验证。
## 10. 最小验证流程(建议)
- 仅修改文档:至少检查 Markdown 渲染与命令可复制执行。
- 修改 Java 代码:执行 `mvn clean compile`
- 涉及测试逻辑:执行 `mvn test` 或目标单测命令。
- 涉及打包/入口:执行 `mvn clean package -DskipTests` 并验证产物。
- 涉及 DeepSeek 调用:避免在 CI/自动化中使用真实密钥做在线调用。
- 最终在变更说明中记录验证命令与结果。