# AGENTS.md > AI 编程助手(OpenCode / DeepSeek TUI)工作指引 — 进入仓库后首先阅读本文件 --- ## 1. 项目概述 **Forge Admin** — 基于 Vue3 + Spring Boot 3 的企业级中后台管理框架,微内核插件化架构。 - **后端**: Java 17 + Spring Boot 3.2 + MyBatis-Plus 3.5 + Sa-Token 1.38 + Flowable 7.0 - **前端**: Vue 3.5 + Naive UI 2.42 + Vite 7 + Pinia 3 + UnoCSS 66 - **数据库**: MySQL 8.0+ / Redis 6.0+ - **构建**: Maven (后端) + pnpm (前端) - **核心能力**: RBAC 权限、多租户隔离、AI 代码生成、Flowable 工作流、消息中心、AI 数据大屏 ``` forge-server/ # 后端根目录 ├── forge-admin-server/ # 主应用入口(Spring Boot) ├── forge-report-server/ # 大屏报表服务 ├── forge-app-server/ # App 接口服务 ├── forge-flow/ # 独立流程引擎服务 ├── forge-framework/ # 核心框架层(插件 + 启动器) │ ├── forge-plugin-parent/ # 业务插件(system/generator/job/message/flow/ai) │ └── forge-starter-parent/ # 技术启动器(auth/cache/orm/tenant/crypto … 共 20 个) ├── forge-business/ # 业务模块 forge-admin-ui/ # 前端主项目 forge-docs/ # VitePress 文档站 code-copilot/ # AI 辅助编码规则 & 变更管理 .agents/ # 项目级 Agent Skill 目录(进入仓库后统一识别) .opencode/ # OpenCode 配置 & 记忆文件 ``` --- ## 2. 快速命令 ### 2.1 渐进式开发流程(推荐) > 遵循 **No Spec No Code** 原则。所有变更产物存放在 `code-copilot/changes/[变更名]/` | 命令 | 用途 | |------|------| | `/spec-init` | 初始化项目上下文 | | `/propose <需求>` | 创建变更提案(生成 spec.md + tasks.md) | | `/apply <变更名>` | 按 Spec 执行编码 | | `/fix <变更名>` | Review 后增量修正 | | `/review <变更名>` | 两阶段审查(Spec 合规 + 代码质量) | | `/test <变更名>` | 按自动化测试标准增量生成/执行测试 | | `/archive <变更名>` | 归档并沉淀知识 | > 执行 `/test`、阶段收尾验证、Review 后修复验证或归档前验收时,必须先读取 `code-copilot/rules/automated-testing-standard.md`,复用当前变更已有 `test-spec.md`、`execution-log.md`、`spec.md`、`tasks.md`,按本轮差异做增量验证;禁止每次从零开始重新规划测试流程。 ### 2.2 后端 ```bash # 构建全项目(跳过测试加速) cd forge && mvn clean install -DskipTests # 启动 admin 服务(默认 localhost:8580) cd forge/forge-admin-server && mvn spring-boot:run # 启动 flow 服务(默认 localhost:8581) cd forge/forge-flow && mvn spring-boot:run # 指定环境 mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` ### 2.3 前端 ```bash cd forge-admin-ui # 安装依赖 pnpm install # 开发模式(默认 localhost:5173) pnpm dev # 生产构建 pnpm build # Lint & 自动修复 pnpm lint:fix ``` > 默认登录凭证:`admin` / `123456` ### 2.4 环境变量 | 文件 | 用途 | |------|------| | `forge/forge-admin-server/src/main/resources/application-dev.yml` | 后端本地配置(数据库/Redis) | | `forge/forge-admin-server/src/main/resources/application-dev.example.yml` | 后端配置模板(可提交) | | `forge-admin-ui/.env.local` | 前端本地环境变量 | | `forge-admin-ui/.env.example` | 前端环境变量模板(可提交) | ### 2.5 Agent 与 Skill 使用规范 > 所有 AI 编程助手进入仓库后必须统一按本节识别和使用项目级 Skill,避免不同 Agent 使用不同规则。 - **项目级 Skill 目录固定为 `.agents/skills/`**(目录名为复数 `agents`)。其它 Agent 启动后必须优先扫描该目录下的 `*/SKILL.md`,并将其作为 Forge 项目专用 Skill 来源;若工具链默认识别 `.agent/skills/`,必须在适配层映射到本目录,禁止在仓库内复制两套 Skill。 - **不要使用 `superpowers/` 目录承载 Forge 项目规范**;项目内专用能力统一沉淀到 `.agents/skills/`,全局个人能力才放到用户级技能目录。 - **触发即读取**:当用户请求明确命中某个 Skill 描述,或任务类型明显匹配该 Skill(例如 CRUD 生成、流程开发、UI 检查),执行前必须完整读取对应 `SKILL.md`。 - **最小必要原则**:只读取本轮任务需要的 Skill;多个 Skill 同时适用时按任务链路排序读取,避免无关上下文污染判断。 - **Forge 编码类任务默认遵循本文件第 5 章关键约定**;需要更细规范时继续读取 `code-copilot/rules/coding-style.md` 和 `forge-docs/guide/conventions.md`。若当前环境额外暴露用户级 `forge-coding-standards` Skill,可作为补充,但不得替代本文件和项目级 `.agents/skills/`。 - **CRUD 代码生成/审查优先使用 `.agents/skills/forge-codegen-crud/SKILL.md`**;流程业务开发/审查优先使用 `.agents/skills/forge-business-flow-development/SKILL.md`。 - **Skill 规范优先级**:`AGENTS.md` > 当前变更 `spec.md` > `.agents/skills/*/SKILL.md` > `code-copilot/rules/*` > 其它参考文档。若 Skill 与本文件冲突,以本文件为准。 --- ## 3. 后端架构 ### 3.1 完整模块树 ``` forge/ ├── forge-admin-server/ # 【主应用】Spring Boot 入口,聚合所有插件 │ └── src/main/java/com/mdframe/forge/admin/ │ ├── controller/ # REST 控制器 │ ├── service/ # 业务服务 │ └── config/ # 应用配置 │ ├── forge-framework/ # 【框架层】不依赖具体业务 │ ├── forge-dependencies/ # 统一依赖版本管理(BOM) │ │ │ ├── forge-plugin-parent/ # 【业务插件】可插拔功能模块 │ │ ├── forge-plugin-system/ # 系统管理(用户/角色/菜单/部门/岗位/租户/字典) │ │ ├── forge-plugin-generator/ # 代码生成器(AI 驱动) │ │ ├── forge-plugin-job/ # 定时任务(Quartz / SnailJob) │ │ ├── forge-plugin-message/ # 消息中心(站内信/邮件/短信) │ │ ├── forge-plugin-flow/ # 流程引擎(Flowable) │ │ └── forge-plugin-ai/ # AI 供应商管理 │ │ │ └── forge-starter-parent/ # 【技术启动器】底层能力封装 │ ├── forge-starter-core/ # 核心工具类、异常、统一响应 │ ├── forge-starter-web/ # Web 层封装(Undertow + 全局异常处理) │ ├── forge-starter-auth/ # 认证授权(Sa-Token + 权限注解) │ ├── forge-starter-orm/ # ORM(MyBatis-Plus + 动态数据源 + 分页) │ ├── forge-starter-cache/ # 缓存(Redis + Redisson 分布式锁) │ ├── forge-starter-tenant/ # 多租户( TenantLineInnerInterceptor ) │ ├── forge-starter-datascope/ # 数据权限( DataScopeInterceptor ) │ ├── forge-starter-crypto/ # API 加解密(@ApiEncrypt / @ApiDecrypt) │ ├── forge-starter-excel/ # Excel 导入导出(EasyExcel) │ ├── forge-starter-file/ # 文件存储(OSS / RustFS / 本地) │ ├── forge-starter-log/ # 操作日志(@OperationLog) │ ├── forge-starter-idempotent/ # 幂等性(注解 + Redisson 分布式锁) │ ├── forge-starter-id/ # 分布式 ID(雪花算法) │ ├── forge-starter-config/ # 动态配置刷新(@RefreshScope) │ ├── forge-starter-trans/ # 分布式事务 │ ├── forge-starter-social/ # 社交登录 │ ├── forge-starter-websocket/ # WebSocket │ ├── forge-starter-message/ # 消息服务 │ ├── forge-starter-job/ # 任务调度基础设施 │ ├── forge-starter-api-config/ # API 行为动态配置 │ └── forge-flow-client/ # 流程客户端(@FlowBind / @FlowStart / @FlowCallback) │ ├── forge-flow/ # 独立流程服务(可选部署) ├── forge-report-server/ # 大屏报表服务 ├── forge-app-server/ # App 接口服务 └── forge-business/ # 业务模块 ``` ### 3.2 标准分层架构 ``` Controller 层 → 接收请求、参数校验、协议转换 ↓ Service 层 → 业务编排、事务边界(禁止互相注入导致循环依赖) ↓ Manager 层 → [可选] 领域能力、单一职责、可复用 ↓ Mapper 层 → 纯数据访问(MyBatis-Plus + XML) ``` **包结构约定**(每个 plugin 内部): ``` plugin-xxx/ ├── controller/ # REST 控制器 ├── service/ # 服务接口 │ └── impl/ # 服务实现 ├── mapper/ # MyBatis Mapper 接口 + XML ├── entity/ # 数据库实体 ├── dto/ # 请求 DTO ├── vo/ # 响应 VO ├── constant/ # 常量 └── listener/ # 事件监听器 ``` ### 3.3 核心子系统速查 | 子系统 | 关键类/注解 | 文档 | |--------|------------|------| | 认证授权 | `SaTokenInterceptor`, `@SaCheckPermission` | `forge-starter-auth` | | 多租户 | `TenantLineInnerInterceptor`(自动追加 `WHERE tenant_id = ?`) | `forge-starter-tenant` | | 数据权限 | `DataScopeInterceptor`(按 mapperMethod 精确匹配 XML SQL 改写) | `forge-starter-datascope` | | API 加解密 | `@ApiEncrypt`, `@ApiDecrypt` | `forge-starter-crypto` | | 操作日志 | `@OperationLog` | `forge-starter-log` | | 幂等控制 | `@Idempotent` | `forge-starter-idempotent` | | 流程引擎 | `@FlowBind`, `@FlowStart`, `@FlowCallback` | `forge-plugin-flow` | | 统一响应 | `RespInfo.success(data)` / `RespInfo.error(msg)` | `forge-starter-core` | | 全局异常 | `GlobalExceptionHandler`(`@RestControllerAdvice`) | `forge-starter-web` | ### 3.4 前后端术语映射 | 前端(UI/组件) | 后端(API/Entity) | |-----------------|-------------------| | `AiCrudPage` 组件 | `GET /page`, `POST /`, `PUT /`, `DELETE /:id` | | `DictSelect` / `DictTag` | `sys_dict_type` + `sys_dict_data` 表 | | `RegionTreeSelect` | `sys_region_code` 表 | | `useDict()` | `GET /system/dict/data/type/{type}` | | `request` 工具 | `SaTokenInterceptor` 鉴权 | | `postEncrypt` 工具 | `@ApiDecrypt` 注解 | --- ## 4. 前端架构 ### 4.1 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | Vue 3 | 3.5 | 组合式 API(`