Code Factory — 代码交付工厂 Skill (v1.0)
将自然语言需求自动转化为可交付的完整项目资产。
架构:分层模块化设计,状态机驱动 + 契约校验 + 事务保护 + 熔断容错。
触发方式
| 触发短语 | 动作 |
|---|---|
| "生产一个项目" | 激活完整交付流程 |
| "交付一个项目" | 激活完整交付流程 |
| "帮我写一个完整的项目" | 激活完整交付流程 |
| "创建一个项目叫..." | 激活完整交付流程 |
| "给我写一个 [功能] 的工具" | 激活完整交付流程 |
自动触发条件
当检测到用户请求生成完整项目/工具/应用时自动激活。
架构概览
用户输入
│
▼
┌──────────────────────────────────────────────┐
│ contracts/ 数据契约层 │
│ ├─ input_schema.py → ProjectRequest │
│ ├─ output_schema.py → ProjectResult │
│ ├─ step_context.py → StepContext │
│ ├─ step_outputs.py → TypedDict 类型定义 │
│ ├─ asset_manifest_schema.py │
│ └─ exceptions.py → 统一异常定义 │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ layers/ 核心执行层 │
│ ├─ orchestrator.py 状态机编排引擎 │
│ ├─ step_registry.py 步骤注册表 │
│ ├─ step_handlers/ 步骤处理器 (7个) │
│ │ ├─ preflight_handler.py │
│ │ ├─ snapshot_handler.py │
│ │ ├─ spec_handler.py │
│ │ ├─ asset_handler.py │
│ │ ├─ verify_handler.py │
│ │ ├─ retry_handler.py │
│ │ └─ delivery_handler.py │
│ ├─ preflight.py Phase 0 预检 │
│ ├─ spec_engine.py Spec 推导引擎 │
│ ├─ asset_generator.py 资产生成器 │
│ ├─ verifier.py 自动验证器 │
│ ├─ retry_controller.py 智能重试控制器 │
│ └─ deliverer.py 交付组装器 │
│ Phase0 → Step1 → Step2 → ... → Step6 │
│ 每步独立执行、独立失败、独立回滚 │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ middlewares/ 横切中间件 │
│ ├─ circuit_breaker.py 熔断器 │
│ ├─ transaction_manager.py 事务管理 (UoW) │
│ ├─ anti_corruption.py 防腐层 (ACL) │
│ ├─ pipeline_guard.py 管道守护者 │
│ ├─ saga_coordinator.py Saga 补偿协调器 │
│ ├─ side_effect_log.py 副作用追踪器 │
│ └─ service_container.py DI 容器 │
└─────────────────────────────────────────────────┘
执行流程
Phase 0: Preflight — 环境预检
实现模块:
layers/preflight.py
生成前先验证环境完整性,避免生成后跑不通:
- 检查 Python 版本是否满足项目需求
- 检查目标目录是否存在、可写
- 检查必要依赖是否已安装
- 检查磁盘空间是否充足(≥100MB)
- 不通过则直接报告缺少什么,后续步骤全部 SKIPPED
Step 1: 环境快照
实现模块:
layers/step_handlers/snapshot_handler.py
结构化采集环境信息,经过 anti_corruption.py 校验后存入 StepContext。
Step 2: Spec 推导与计划生成
实现模块:
layers/spec_engine.py
根据用户需求推导内部规格(spec),输出格式受 contracts/ Schema 约束:
- Spec 推导:从用户需求中提取功能范围、输入输出、边界条件、验收标准
- 验收标准格式:每条用 Given/When/Then + P1/P2/P3 优先级标记
- 用户完全无感知——不要求用户写任何 spec,AI 内部完成
Step 3: 生成资产文件
实现模块:
layers/asset_generator.py+templates/
所有文件写入通过 TransactionManager 暂存到 staging 区域:
- 验证全部通过 →
tx.commit()原子提交 - 任何步骤失败 →
tx.rollback()完整回滚
标准化项目结构:
project_assets/[project_name]/
├── src/ # 源码目录
│ └── main.py # 主程序(<!-- HARD-GATE --> 标记)
├── tests/ # 测试目录
│ └── test_main.py # pytest 测试
├── docs/ # 文档目录
│ └── README.md # 使用说明/安装/依赖
├── requirements.txt # 依赖清单
├── run.sh # 一键运行脚本
├── SKILL.md # AI 技能元数据头
├── ASSET_MANIFEST.md # 人类可读版资源地图表
├── manifest.json # 机器可读版资产清单
└── environment.toml # 环境隔离配置
Step 4: 自动验证(含依赖图谱检查)
实现模块:
layers/verifier.py
- 依赖影响预检:分析模块间依赖,检查是否有循环引用
- HARD-GATE 强制门禁验证:凡标记
<!-- HARD-GATE -->的关键函数/API,必须通过独立验证 - 运行
pytest tests/ -v→ 确认全部测试通过 - 输出结构化审查报告(Risk Assessment → 逐个文件 → 缺失测试 → 建议)
Step 5: 智能重试
实现模块:
layers/retry_controller.py
受 circuit_breaker.py 熔断器保护:
- 第 1 次失败:自动分析错误→修改代码→重新验证
- 第 2 次失败:更换修复策略(缩小修改范围)→重新验证
- 第 3 次失败:记录结构化失败模式到
learnings/failure_patterns.json→ 暂停并报告
Step 6: 交付
实现模块:
layers/deliverer.py
输出:
- 项目路径(绝对路径)
- README.md 内容预览
- ASSET_MANIFEST.md 资源地图摘要
- manifest.json 机器可读摘要
- 测试结果摘要
状态机定义
PENDING ──→ RUNNING ──→ SUCCESS
├──→ FAILED ──→ (retry ≤ 3) ──→ RUNNING
│ └──→ (retry exhausted) ──→ 记录失败模式
├──→ TIMED_OUT (单步骤 > 120s)
└──→ ROLLED_BACK (事务回滚)
PENDING ──→ SKIPPED (前置条件不满足,如 Phase 0 失败)
全局熔断规则 (middlewares/circuit_breaker.py):
- 全局超时:600s
- 单步骤超时:120s
- 连续 3 次失败 → 熔断打开,拒绝后续请求
数据契约(见 contracts/ 目录)
| 契约文件 | 约束内容 |
|---|---|
input_schema.py | ProjectRequest — project_name 格式、description 长度、python_version 格式、安全上限 |
output_schema.py | ProjectResult, StepResult, StepStatus — 统一成功/失败标准(六态转换) |
step_context.py | StepContext — 步骤间唯一数据载体,线程安全,TypedDict 类型标注 |
step_outputs.py | TypedDict 定义 — 7 个步骤的输出类型契约 |
asset_manifest_schema.py | AssetManifest — 锁定 manifest.json 字段格式 |
exceptions.py | 统一异常定义 — PreflightFailedError |
代码规范(强制)
- 简洁优先:10行能解决→不写20行
- 单一职责:每个函数≤30行,只做一件事
- 命名清晰:不用 x/tmp/data 等无意义变量名
- 类型提示:所有函数参数+返回值加 type hints
- 错误处理:不用
pass或裸except - 零硬编码:魔法数字/路径/配置提取为常量或参数
- 无调试print:最终代码不含
print,用正式日志或异常 - HARD-GATE 强制门禁:关键函数/API 入口前必须插入
<!-- HARD-GATE -->注释标记 - 每个公开函数≥1个测试用例
- 必须包含边界条件测试(空列表/零值/文件不存在)
注意事项
- 所有文件使用 UTF-8 编码
- 如果用户指定了项目名以外的路径偏好,使用用户指定路径
- 不要修改项目目录以外的任何文件
- 如果用户只说了功能没给项目名,用功能名加小写下划线命名
- 技能自身的测试位于
tests/目录,运行pytest tests/ -v
运行技能自身测试
pip install -e ".[dev]"
pytest tests/ -v
✅ 自检清单
| 检查项 | 状态 | 说明 |
|---|---|---|
| name 存在 | ✅ | code-factory |
| name = 目录名 | ✅ | vs code-factory |
| description 存在 | ✅ | 自动生成项目结构... |
| 触发方式清晰 | ✅ | 5 个触发短语表 |
| 有 H1 标题 | ✅ | # Code Factory |
| 分层架构 | ✅ | contracts + layers + step_handlers + middlewares + templates |
| 状态机驱动 | ✅ | PENDING→RUNNING→SUCCESS/FAILED/SKIPPED/ROLLED_BACK/TIMED_OUT 六态 |
| 事务保护 | ✅ | TransactionManager prepare→commit→rollback 原子三段式 |
| 熔断容错 | ✅ | CircuitBreaker CLOSED/OPEN/HALF_OPEN 三态 + 全局 600s / 步骤 120s |
| 契约校验 | ✅ | 防腐层 7 步 ACL 校验(含 Step6 出口校验) |
| 副作用追踪 | ✅ | SideEffectTracker 审计 + 补偿计划生成 + 幂等性检测 |
| 跨步骤补偿 | ✅ | SagaCoordinator 逆序补偿 + 精准文件清理 |
| 幂等性 | ✅ | AssetGenerator 内容比对,跳过相同文件 |
| 退避重试 | ✅ | RetryController 3 次重试 + 指数退避 (1s/2s/4s) |
| 零外部 API 依赖 | ✅ | 纯本地生成 |
| 验证机制 | ✅ | Phase 0 预检 + Step 4 验证 + Step 5 智能重试 |
| 双格式输出 | ✅ | ASSET_MANIFEST.md(人类)+ manifest.json(机器) |
| 标准化结构 | ✅ | src/tests/docs 三级目录 |
| 失败闭环 | ✅ | learnings/failure_patterns.json 结构化记录 + 原子写入 |
| Spec 驱动 | ✅ | 内部 spec→plan→tasks 三段式 |
| 依赖预检 | ✅ | 依赖图谱 + HARD-GATE 验证 |
| 环境隔离 | ✅ | environment.toml + venv |
| 技能元数据 | ✅ | 自动生成标准 SKILL.md 头部 |
| 审查报告 | ✅ | 结构化输出 Risk→Files→Tests→Suggestions |
| 可测试 | ✅ | tests/ 17 个测试文件 + 174 测试用例 |
Agent 执行指令
职责边界
| 操作 | 执行方式 | 说明 |
|---|---|---|
| 项目初始化 | Agent LLM | 创建项目目录结构 |
| Spec推导 | Agent LLM | 从需求推导内部规格 |
| 资产文件生成 | Agent LLM | 生成 src/tests/docs 等文件 |
| 自动验证 | exec脚本 | pytest tests/ -v |
| 依赖安装 | exec脚本 | pip install -e . |
| 重试修复 | Agent LLM + exec | 分析错误->修改代码->重测 |
| 交付 | write文件 | 写入最终交付物 |
标准工作流
- 接收任务描述 -> 创建项目目录
- Agent 执行 Spec 推导
- Agent 生成代码文件
- 安装依赖: pip install -e .
- 运行测试: pytest tests/ -v
- GREEN -> 交付; RED -> 分析报告->修复->重测(最多3轮)
- 写入交付物
错误恢复
- pip失败 -> 检查 requirements.txt 格式
- pytest失败 -> 读取错误信息,定位失败用例
- 3轮重试仍失败 -> 记录失败模式,暂停报告
评论
加载中…