mirror of
https://github.com/alibaba/arthas.git
synced 2026-10-20 08:18:03 +00:00
53 lines
3.4 KiB
Markdown
53 lines
3.4 KiB
Markdown
# AGENTS.md
|
||
|
||
本仓库是 Arthas,包含 JVM 诊断工具的 Java 多模块源码、Web 控制台和 VuePress 文档站。以下约定适用于整个仓库。
|
||
|
||
## 工作原则
|
||
|
||
- 从第一性原理出发:先明确要解决的问题、输入输出和必须保持的约束,再定位相关实现与测试。
|
||
- 选择能完整满足当前需求的最小实现。优先直接的控制流和已有能力;新增抽象、依赖或配置必须有具体收益。
|
||
- 修复根因,避免用多层兜底、静默吞错、伪造默认值或反复重试掩盖错误。兼容与恢复逻辑只服务于已知场景,并明确触发条件、失败结果和终止条件。
|
||
- 在输入和系统边界校验,内部依赖明确的契约,避免层层重复防御。
|
||
- 保持修改聚焦,沿用附近代码的风格。保留用户已有改动,不顺带重构、格式化或清理无关文件。
|
||
|
||
## 工程入口
|
||
|
||
- `core/`:诊断命令、字节码增强、会话与结果渲染;命令实现在 `core/src/main/java/com/taobao/arthas/core/command/`。
|
||
- `boot/`、`agent/`、`spy/`:启动与 attach、类加载隔离、插桩回调。
|
||
- `arthas-mcp-server/`:MCP 接口;`tunnel-client/`、`tunnel-server/`:远程连接。
|
||
- `web-ui/arthasWebConsole/`:Vue Web 控制台。
|
||
- `site/docs/doc/`、`site/docs/en/doc/`:中英文用户文档;`site/docs/.vuepress/`:站点配置、导航、主题和静态资源。
|
||
- 各模块的 `src/test/` 放单元测试;`arthas-mcp-integration-test/`、`arthas-external-command-integration-test/` 和 `integration-test/` 放集成测试。
|
||
|
||
## 必须保持的约束
|
||
|
||
- Java 默认兼容 JDK 8,模块覆盖设置以对应 `pom.xml` 为准。JDK 17+ 构建会额外启用 Tunnel Server、MCP 和外部命令集成测试模块;构建行为以根 `pom.xml` 和 `.github/workflows/test.yaml` 为准。
|
||
- Arthas 运行在目标 JVM 内。诊断异常不能影响业务线程;保留必要的异常隔离和类加载隔离,确保监听器、增强和线程等资源在结束或取消时正确释放。
|
||
- 命令沿用现有 Command → Model → View 分工,保持结果数据与终端渲染分离;修改输出时检查 HTTP/MCP 等调用方的兼容性。
|
||
- 命令行为、参数或输出变化时,同步相关测试和中英文文档。增删文档页面时检查导航与相对链接。
|
||
- 修改源码,不手工编辑 `target/`、`node_modules/`、VuePress 的 `.temp/`、`.cache/`、`dist/` 等生成内容。
|
||
|
||
## 验证与交付
|
||
|
||
按改动选择能证明行为正确的最小验证范围;修复缺陷时优先补能复现问题的回归测试。跨模块或打包变更再扩大验证范围。
|
||
|
||
以下命令在仓库根目录执行:
|
||
|
||
```bash
|
||
# Java 模块测试:将 core 替换为受影响的模块
|
||
./mvnw -pl core -am test
|
||
|
||
# MCP 集成测试:需要 JDK 17+ 和 bash,verify 阶段才执行集成测试
|
||
./mvnw -pl arthas-mcp-integration-test -am verify
|
||
|
||
# 完整构建与测试
|
||
./mvnw clean install -P full
|
||
|
||
# 文档站构建:先按 site/README.md 安装依赖
|
||
npm --prefix site run docs:build
|
||
```
|
||
|
||
- 文档改动检查示例、链接和页面构建;纯说明文字调整无需运行全量 Java 测试。
|
||
- 提交前检查 `git diff --check` 和变更范围。只格式化修改涉及的文件,避免全仓库格式化。
|
||
- 交付时简要说明改了什么、验证结果及未验证项。环境或依赖阻塞时报告具体原因,不通过增加兜底或跳过检查来伪装成功。
|