# Contributing — 贡献指南 感谢你对 Graw 的关注与贡献!本指南帮助你快速上手本地开发、了解代码约定并完成一次合规的 Pull Request。 仓库主页: ## 1. 本地开发环境 ### 环境要求 - Go 1.23+ - Node.js 16+ - (可选)Docker 引擎 —— 仅 Docker 管理相关功能需要 ### 启动方式(前后端分离) ```bash # 后端(Go;Windows 使用 start.bat,Linux/macOS 使用 start.sh) cd backend-go go mod download go run . # 默认监听 :8000 # 前端(另开终端) cd frontend npm install npm run dev # → http://localhost:5173,Vite 代理 /api 与 ws 到 :8000 ``` > `backend/` 为 Python/FastAPI 旧版后端(保留兼容与回归测试)。如需运行旧版:`cd backend && python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt && python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload`。 > 注意:Windows 的 PowerShell/cmd 不支持 `&&`,多命令请用分号 `;` 分隔。 ## 2. 代码结构速览 AI 改动代码前请通读根目录 `AGENTS.md`,它描述了整体架构、权限模型与常见陷阱。关键约定摘录: | 想做什么 | 去哪里 | |---------|--------| | 新增一个 REST 业务模块 | Go 默认:`backend-go/internal/graw/handlers_xxx.go` + `httpx.go` 注册;Python 旧版:`backend/app/routers/xxx.py` + `main.py` 的 `include_router` | | 新增一个前端功能页 | `frontend/src/components/windows/XxxWindow.vue`,并在 `App.vue` 的 shortcuts 注册入口(桌面/标准面板两种模式共用) | | 登录 / 鉴权 / 用户 | Go:`backend-go/internal/graw/{auth,sessions,handlers_auth}.go`;Python 旧版:`backend/app/auth.py`、`routers/auth.py` | | 多节点 / 子节点 Agent | Go:`backend-go/internal/graw/agent.go`;Python 旧版:`agent_auth.py`、`agent_cfg.py`、`agent_client.py`、`node_manager.py`(实操见 `docs/node-agent.md`) | | 实时监控 / 指标采集 | Go:`backend-go/internal/graw/{sysmon,metrics_store,handlers_system}.go`、`frontend/src/store/systemMetrics.js` | | 应用商店配方 | `app-store/`(YAML),面板侧机制见 `docs/app-store-recipe.md` | | 改文档 | 开发者/运维文档在 `docs/`,运行逻辑在 `GETMEREAD/`(更新规矩见其 README),文档总索引 `docs/README.md` | ### 必须遵守的约束 - **不要引入 Pinia**:前端全局状态使用 `store/*.js` 的 `reactive` 单例模式。 - **数据持久化**:配置/凭据以 JSON 文件存于 `backend/data/`,写入用「临时文件 + 原子替换」(Go `os.Rename` / Python `os.replace()`);不要放宽该目录权限、不要明文回传凭据。 - **接口鉴权分级**:只读类仅需登录,写操作/命令执行要求管理员或对应模块权限;WebSocket 与部分端点(`/api/ui` public、ShunX)在端点内自行鉴权。 - **CORS 默认关闭**:同源部署,不要为联调方便放开 `*`。 - **多节点透传**:新增接口若需对子节点透传,确认它不在 Agent 代理排除前缀内;涉及本地宿主机能力时做远端能力门控。 ## 3. 测试 Go 后端测试位于 `backend-go/`(`*_test.go`): ```bash cd backend-go go vet ./... go test ./... -count=1 ``` Python 旧版回归测试位于 `backend/`,命名遵循 `test_<模块>_(unit|e2e).py`: ```bash cd backend pip install -r requirements.txt python -m pytest test_*_unit.py -q python -m pytest test_2fa_unit.py test_auditlog_unit.py -q # 指定模块 ``` - 新增/修改功能时请补充对应测试(两套后端已有大量用例可参考)。 - 修改后端后保证 Go 编译与 `go vet` 通过(Python 旧版无语法错误);修改前端后保证 `npm run build` 通过。 ## 4. 代码风格 - **后端**:Go 默认后端保持标准库风格、错误显式返回,注释用中文描述背景与安全约束;Python 旧版使用类型注解 + Pydantic 模型、`logging.getLogger("graw.xxx")`。敏感操作前做鉴权断言。 - **前端**:`