xykj-plus/claude-ecc/AGENTS.md
2026-06-13 13:48:51 +08:00

132 lines
7.0 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
This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
## 仓库概览
本仓库是一个 monorepo包含两个相互独立的子项目
- `admin-xy/` —— 企业管理系统后端Spring Boot 3 + Java 21+ 前端React 18 + Vite + TypeScript统一通过 Docker Compose 部署。
- `log-analyzer/` —— 纯前端Vite + React + TypeScript工具用于解析 `.Codex/logs/` 下的 hook trace JSONL 文件,通过 Vite 自定义插件 `logApiPlugin` 暴露 `/api/folders`、`/api/files` 等接口读取本地日志。
两个子项目互不依赖,构建命令、依赖、部署方式都应分别执行。
## 常用命令
### admin-xy 后端(`admin-xy/server`
```bash
# 本地运行(默认 dev profileH2 内存库 + Flyway 迁移,端口 9010
mvn spring-boot:run
# 打包(跳过测试)
mvn -DskipTests clean package
# 运行全部测试
mvn test
# 运行单个测试类 / 单个方法
mvn test -Dtest=AuthServiceTest
mvn test -Dtest=AuthServiceTest#shouldLoginWithValidCredentials
```
- 入口:`com.adminxy.AdminXyApplication`
- 数据库迁移:`src/main/resources/db/migration/V*.sql`Flyway 管理,`ddl-auto=validate`**禁止**改已发布的 V 脚本,新增请递增版本号)
- Profile默认 `dev`H2生产通过 `SPRING_PROFILES_ACTIVE=prod` 切到 MySQL连接与密钥全部来自环境变量`SPRING_DATASOURCE_ADMIN_*`、`JWT_SECRET`)。
### admin-xy 前端(`admin-xy/web`
```bash
npm install
npm run dev # Vite dev server端口 9001/api 反代到 http://localhost:9010
npm run build # tsc 严格类型检查 + vite build
npm run preview
```
- 路径别名:`@` → `admin-xy/web/src`
- 状态管理Zustand`src/stores/`表单react-hook-form + ZodUIRadix + Tailwindshadcn 风格,组件放 `src/components/ui`
### admin-xy 整体部署(`admin-xy/`
```bash
./build-images.sh # 构建 admin-xy-server:latest、admin-xy-web:latest
./build-images.sh --no-cache
sudo ./deploy.sh # 生产部署:初始化 /opt/admin-xy → 构建镜像 → docker compose up
sudo ./deploy.sh --stop # 停止并移除容器
sudo ./deploy.sh --restart # 重启容器(不重建镜像)
```
生产配置存放于 `/opt/admin-xy/.env`(首次运行 `deploy.sh` 会生成模板)。`deploy.sh` 会把本目录下的 `docker-compose.yml` 同步到 `/opt/admin-xy/`
### log-analyzer`log-analyzer/`
```bash
npm install
npm run dev # Vite dev server自定义插件读取 ../.Codex/logs
npm run build # tsc -b && vite build
```
## 架构要点
### admin-xy 后端分层Spring Boot
```
com.adminxy
├── AdminXyApplication # 启用 @EnableJpaAuditing
├── common/ # ApiResponse<T>、PageResult<T>、BaseEntity、全局异常
├── config/ # SecurityConfig、CorsConfig、JwtProperties、DataInitializer
├── security/ # JwtAuthenticationFilter、JwtTokenProvider、CustomUserDetailsService
├── permission/ # 权限注解/校验
└── module/
├── auth/ ├── user/ ├── role/ └── menu/
└── 每个模块Entity + Repository + Service + Controller + dto/
```
重要约定:
- **统一响应**:所有 REST 接口返回 `ApiResponse<T>``success/data/error/meta`);分页用 `PageResult<T>`
- **认证**JWT 无状态模式(`SessionCreationPolicy.STATELESS`CSRF 禁用;`JwtAuthenticationFilter` 从 `Authorization: Bearer <token>` 提取并注入 `SecurityContext`401 走 `RestAuthenticationEntryPoint`
- **授权**`@EnableMethodSecurity` 开启,方法级权限用 `@PreAuthorize` + 自定义 `permission/` 下的校验器。
- **模块划分**按领域user/role/menu/auth分包每个模块自包含 Controller→Service→Repository→Entity→DTO 一条链,跨模块调用通过 Service 接口而不是 Repository。
- **迁移优先**:表结构一律通过 Flyway V 脚本创建Entity 注解只做 `validate`,不允许 `update`/`create`。
### admin-xy 前端组织
```
src/
├── main.tsx / routes/ # 路由react-router-dom v6含 guards.tsx 做鉴权守卫)
├── pages/ # 按业务页面login/dashboard/user/role/menu
├── components/
│ ├── ui/ # 原子组件shadcn 风格,封装 Radix
│ ├── layout/ # AppShell、侧边栏等
│ └── common/ # 业务通用组件
├── stores/ # Zustandauth-storetoken/user、app-store全局 UI 状态)
├── schemas/ # Zod 校验 schema
├── hooks/、lib/、types/ # 复用 hook、axios 实例与工具、共享类型
```
关键约定:
- axios 实例在 `src/lib/` 统一拦截请求头JWT和响应错误401 登出、统一 toast
- 所有跨页面状态走 Zustand store不要用 Context 做可变状态。
- 表单流程Zod schema → `@hookform/resolvers/zod` → react-hook-form → API 调用。
### log-analyzer 的特殊之处
Vite 配置里内置了 `logApiPlugin``vite.config.ts`)——**这是本地日志浏览的后端**。它在 dev server 中间件里暴露 `/api/folders`、`/api/files`、`/api/file`,直接读取仓库根的 `.Codex/logs/`(向上一级解析)。修改日志读取逻辑需同时改 Vite 插件与前端调用方。
### `.Codex/` 目录
- `.Codex/hooks/trace.mjs` —— 所有 Codex hook 事件都通过它写入 `.Codex/logs/trace-<session_id>.jsonl`。关键约束:**必须**把日志写到 `trace.mjs` 自身所在目录的 `../logs`,不能依赖 `cwd`,否则会在各子项目下生成多余 `.Codex/logs`(已在此之前修复过一次)。
- `.Codex/rules/common/*.md` + `.Codex/rules/typescript/*.md` —— 项目级规范,会在对话中以 system reminder 形式注入,遵循即可,不要额外复述。
- `.Codex/logs/` —— 明确加入 git 追踪(见 `.gitignore``!.Codex/logs/`),用于 log-analyzer 复现会话。
## 开发约定(本仓库特有)
- **Git 远程**:默认 push 到 Gitee`https://gitee.com/xiangyuetech-d/Codex-ecc.git`)。提交信息按 `.Codex/rules/common/git-workflow.md` 的 Conventional Commits 风格(`feat|fix|refactor|docs|test|chore|perf|ci: <desc>`**不要**追加自动归因尾行。
- **端口**:后端 9010、前端 9001前端 dev server 的 `/api` 反代到后端 9010。改端口要同步更新 `vite.config.ts`、`docker-compose.yml`、`application.yml`。
- **密钥**`JWT_SECRET` 至少 32 字节;生产所有敏感配置必须来自环境变量或 `/opt/admin-xy/.env`,不得硬编码进 yml/代码。
- **前端不允许 `console.log`**:已在 hooks 中配置自动检测,请使用 sonner / 已有 logger 替代。
- **日志写入**:任何新加的 hook 脚本若要写文件,沿用 `trace.mjs` 的做法——以脚本自身路径定位,避免写到子项目目录。