PACP 单模块代码生成协调者
本技能是单模块快速生成协调者,面向简单业务/单模块场景。读取用户需求,构建临时规格,调用 pacp-coding-backend / pacp-coding-frontend 生成代码,统一编译验证。
你会得到:临时规格({项目根目录}/.pacp/temp/pacp-temp-*.spec.md,全部生成成功后删除)+ 模块代码 + 编译验证报告。
> 复杂业务(多模块、原型解析、依赖排序)请用 pacp-spec——它的规格持久化到 .pacp/ 目录,支持多批次隔离和跨会话恢复。
执行流程概览
Step 1: 解析需求(business/module/entity/functions/mode/fields)
Step 2: 识别目录(pom.xml / package.json)
Step 3: 信息确认(业务命名、字段清单、组件选型)
Step 4: 构建临时规格(10 章节 spec + 数据库类型确认)
Step 5: 调用子技能生成代码(按 mode 调 backend/frontend)
Step 6: 统一编译验证(mvn compile + test / pnpm build)
核心职责
| 职责 | 说明 | 产出 |
|---|---|---|
| 需求解析 | 从用户输入中提取业务/模块/实体/功能/模式/字段 | 结构化需求 |
| 目录识别 | 查找后端/前端项目目录 | 输出目录路径 |
| 构建临时规格 | 生成 spec 文件 + 确认数据库类型 | 临时规格文件 |
| 调用子技能 | 按模式调 backend/frontend 生成代码 | 模块代码 |
| 统一编译验证 | mvn/pnpm 编译 + 测试 | 验证报告 |
执行流程
| Step | 阶段 | 主要任务 | 输出 |
|---|---|---|---|
| 1 | 需求解析 | 提取业务/模块/实体/功能/模式/字段 | 结构化需求 |
| 2 | 目录识别 | 查找后端/前端项目目录 | 输出目录路径 |
| 3 | 信息确认 | 转向结构化信息,确认理解 | 确认后的需求 |
| 4 | 构建临时规格 | 生成 spec 文件 + 确认数据库类型 | 临时规格文件 |
| 5 | 调用子技能 | 按模式调 backend/frontend 生成代码 | 模块代码 |
| 6 | 统一编译验证 | mvn/pnpm 编译 + 测试 | 验证报告 |
详细步骤
Step 1:需求解析
从用户输入中提取结构化信息:
| 信息项 | 说明 | 取值示例 |
|---|---|---|
business |
所属业务 | hjkq |
module |
功能模块 | station |
entity |
实体名 | Station |
functions |
功能清单 | query/add/update/delete |
mode |
生成模式 | backend / frontend / fullstack |
fields |
字段清单 | 字段名+类型+约束 |
模式判定:
- 用户提到"后端"、"Java"、"SQL" → backend
- 用户提到"前端"、"Vue"、"页面" → frontend
- 其他或同时提到前后端 → fullstack
Step 2:目录识别(🔴 核心铁律)
| 项目类型 | 识别标志 | 查找命令 |
|---|---|---|
| 后端项目 | 目录下有 pom.xml |
find . -name "pom.xml" |
| 前端项目 | 目录下有 package.json |
find . -name "package.json" |
- 找不到对应目录 → CHECKPOINT:询问用户项目路径
- 仅
frontend模式时跳过后端目录查找 - 仅
backend模式时跳过前端目录查找
Step 3:信息确认
- 检查业务命名是否含行政区划名称(如"贵阳-GY"),若含则暂停纠正
- 将提取的结构化信息展示给用户
- CHECKPOINT:理解有歧义时暂停确认 → 用户修正后继续;若用户无法提供明确信息,则按默认值推断并标注"待确认"
- 字段清单不完整时 → 按智能默认值补全,标注来源为"智能推荐",后续可调整
Step 4:构建临时规格
4.1 数据库类型确认(核心铁律)
若 mode 含 backend 或 fullstack,必须先确认数据库类型:
- 规则见 Skill(pacp-rules, args="database-type-confirm")
4.2 创建临时规格文件
生成路径:{项目根目录}/.pacp/temp/pacp-temp-{business}.{module}.spec.md
> 中断恢复:临时规格文件存放在项目目录下(而非 /tmp/),会话中断后可通过检查该目录恢复。恢复逻辑见下方「临时规格中断恢复」章节。
规格包含 10 个标准章节(格式见 Skill(pacp-rules, args="spec-format")):
1. 模块元信息
2. 实体清单
3. 字段规格表
4. 功能字段映射表
5. 字段关系约束表
6. 功能矩阵
7. 布局清单
8. 模块依赖关系
9. 模块内实体关系
10. 占位符映射表
组件选型:字段的组件绑定规则查 Skill(pacp-rules, args="frontend-component-mapping")。
测试数据章节:若 mode 含 backend 或 fullstack,在规格末尾追加「测试数据」章节:
- 默认每实体 10 条种子数据
- 字段→测试值生成策略,审计字段固定值
- 规则见 Skill(pacp-rules, args="sql-init-data")
- 用户明确说「不需要测试数据」时跳过
Step 5:调用子技能生成代码
参数格式:{spec_file_path}#{backend_dir}#{frontend_dir}#{database_type}#caller=pacp-coding
> 🔴 分隔符规则:# 为参数分隔符。若路径中包含 # 字符,须用 \# 转义(解析时 \# → #)。建议项目目录避免使用 # 字符。
按 mode 决定调用策略:
| mode | 调用顺序 | 说明 |
|---|---|---|
backend |
仅 pacp-coding-backend |
生成 SQL + Java + JUnit |
frontend |
仅 pacp-coding-frontend |
生成 Vue + API + 路由 |
fullstack |
先 backend → 后 frontend | 前后端顺序生成 |
backend 调用时同步生成 init SQL:
- 读取规格测试数据章节
- 规则查 Skill(pacp-rules, args="sql-init-data")
- 输出:doc/db/business/{所属业务}/DATA/{db_type}-{功能模块}-init.sql
- 仅生成已确认的数据库类型,不四库全生成
子技能不执行编译:pacp-coding-backend/pacp-coding-frontend 被协调者调用时仅做静态审核(规范+一致性+SQL语法),不执行 mvn/pnpm 编译。
子技能调用失败处理:
- 后端失败 → 询问用户:修复后重试 / 仅生成前端 / 中止
- 前端失败 → 询问用户:修复后重试 / 仅生成后端 / 中止
- 修复后重试:修复失败模块的问题后,从该模块继续生成
- 用户选择"仅生成X端"时,跳过失败端,继续生成另一端,在最终报告中标注
完成后:删除临时规格文件 {项目根目录}/.pacp/temp/pacp-temp-*.spec.md。
Step 6:统一编译验证
6.1 编译
编译命令见 Skill(pacp-rules, args="startup-service") 的「编译验证」章节,按 mode 选择对应命令。
6.2 失败处理
一线修复:查 Skill(pacp-rules, args="compile-error-troubleshoot") 速查表。
仍失败:报告错误清单(错误类型+错误文件+行号+错误原因+依赖包名),询问用户三选一:修复后重试 / 强制生成 / 中止。
临时规格中断恢复
> 临时规格文件存放在项目目录({项目根目录}/.pacp/temp/)而非 /tmp/,确保会话中断后仍可恢复。与 pacp-spec 的批次目录(.pacp/{batch-id}/)互不干扰——详见 pacp-spec SKILL.md 的「temp/ 与批次目录隔离规则」。
恢复检查(Step 2 之后、Step 3 之前执行)
> 需要先完成 Step 2 目录识别,获得 {项目根目录} 后才能检查 .pacp/temp/ 目录。
1. 检查 {项目根目录}/.pacp/temp/ 目录是否存在 pacp-temp-*.spec.md 文件
2. 若存在 → 读取文件头部的模块元信息
3. 向用户确认:"发现未完成的临时规格文件:{文件名},描述:{模块中文名}。如何处理?"
4. 用户选项:
- **继续生成**:跳过 Step 3-4,直接从 Step 5 调用子技能(使用已有临时规格)
- **重新生成**:删除已有临时规格,从 Step 3 重新开始
- **删除**:删除临时规格,中止本次操作
清理时机
- 正常完成:全部代码生成 + 编译验证通过后,删除临时规格文件
- 用户中止:保留临时规格文件,供下次恢复
- 编译失败:保留临时规格文件,供修复后重试
确认策略(🔴 CHECKPOINT)
以下 7 种场景必须暂停向用户确认:
| # | 场景 | 处理方式 |
|---|---|---|
| 1 | 业务分类不确定 | 暂停询问 |
| 2 | 模块/实体划分不确定 | 暂停询问 |
| 3 | 字段清单不完整 | 暂停询问 |
| 4 | 组件绑定有冲突 | 暂停询问 |
| 5 | 公共代码值缺失 | 暂停询问 |
| 6 | 数据库类型无法确定 | 暂停询问 |
| 7 | 编译失败 | 报告并询问三选一 |
额外场景:测试数据中自定义枚举无码值池时,暂停询问合法取值。
资源指针
外部规则库(pacp-rules,Skill 工具调用查询)
| 规则文件 | 查询场景 |
|---|---|
Skill(pacp-rules, args="database-type-confirm") |
数据库类型确认 |
Skill(pacp-rules, args="data-model-standard") |
数据模型规范(实体命名/表名/字段类型) |
Skill(pacp-rules, args="frontend-component-mapping") |
组件选型映射 |
Skill(pacp-rules, args="sql-init-data") |
测试数据生成规则 |
Skill(pacp-rules, args="compile-error-troubleshoot") |
编译错误速查 |
本技能依赖关系
> 🔴 pacp-coding 依赖以下技能安装在同一个父目录下(如 skills/),否则骨架路径引用会失效:
> - pacp-rules(规则查询,通过 Skill() 调用)
> - pacp-coding-backend(后端骨架 + SQL 骨架 + 子技能调用)
> - pacp-coding-frontend(前端骨架 + 子技能调用)
>
> 场景角色:pacp-coding 作为协调者被用户直接调用,适用于单模块快速生成场景。复杂多模块场景请用 pacp-spec。
| 资源 | 路径 | 说明 |
|---|---|---|
| 模块规格模板 | ../pacp-spec/skeletons/spec/module-spec-tpl.md |
10 章节规格模板(可选,仅当引用 pacp-spec 模板时) |
| 后端骨架 | ../pacp-coding-backend/skeletons/backend/ |
Controller/Service/DAO/Mapper 模板 |
| 前端骨架 | ../pacp-coding-frontend/skeletons/frontend/ |
list/detail/api/router 模板 |
| SQL 骨架 | ../pacp-coding-backend/skeletons/sql/ |
DDL/Init 模板 |