dev-code · git:20260923.2013b81 · 2026-09-23 · sha256 328df6fbe7b4711e
dev-code git:20260923.2013b81A
Immutable. This exact content never changes and is served at /api/v1/blob/328df6fbe7b4711e.
---
name: dev-code
description: "一句话生成项目·编码实现。按设计文档写真实可运行的代码(全栈/纯前端/CLI/脚本)。Use when user says 编码实现/写代码."
argument-hint: [project-idea]
allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob
---
# 编码实现
按系统设计实现真实可运行的代码:**$ARGUMENTS**
## ⛔ 先确认项目类型
**读 AGENTS.md 的 `project_type` 决定实现方式**(fullstack / frontend / cli / script)。不同类型目录结构和技术栈不同,按 DESIGN.md 的"目录结构"实现。
## ⛔⛔⛔ 任务规模警示
这是**完整的软件项目**,不是玩具。要按 DESIGN.md 把代码全部实现成**能真正跑起来**的,代码量大,别写一半就退出。end_turn 前自问:主入口写了吗?能跑吗?RUN.md 写了怎么启动吗?任何"否"→继续干。
## 输入
1. **DESIGN.md**(必须存在)— 架构/目录结构/技术选型。严格按它实现。
2. **REQUIREMENTS.md** — 功能清单,逐条实现"必做"项。
3. **schema.sql** — 全栈项目的建表 SQL(仅全栈有)。
4. **AGENTS.md** — project_type + 技术栈参数。
## 各类型目录约定(按 project_type)
- **fullstack**:`code/frontend/`(前端+package.json)+ `code/backend/`(入口 `code/backend/main.py`、requirements.txt、database.py)+ `code/README.md` + `RUN.md`
- **frontend**:`code/`(前端项目,入口 index.html 或框架入口 + package.json)+ `code/README.md` + `RUN.md`
- **cli**:`code/`(源码,主入口如 `code/main.py`/`code/cli.py`、requirements.txt)+ `code/README.md` + `RUN.md`
- **script**:`code/`(源码,主脚本如 `code/main.py`)+ `code/README.md` + `RUN.md`
`RUN.md`(工作区根):写清怎么装依赖、怎么启动/运行。
## ⛔ 前端审美铁律(fullstack / frontend 类型必读)
前端**必须使用 daisyUI 组件库**,不手写零散 CSS:
- 按需读参考:`cat references/daisyui_ref.md`(本 skill 自带)获取组件 class 和主题。
- 用 daisyUI 语义组件:`btn` `card` `navbar` `input` `table` `alert` `modal` `menu` 等。
- 选协调主题(`light`/`corporate`/`nord`),`<html data-theme="...">` 统一设置。
- 优先本地引入(CSS 放 `code/frontend/` 本地),CDN 兜底并在 README 注明离线方案。
- 布局遵循基本原则:`container mx-auto`、统一间距、清晰层次、响应式(`sm:`/`lg:`)。禁止裸 HTML 无样式表单/按钮。
## 完成铁律
- 主入口存在且是有效代码(全栈后端 `code/backend/main.py` 是有效应用;其余 `code/` 下有明确主入口)。
- 有依赖清单(Python→requirements.txt,Node→package.json)。
- `RUN.md` + `code/README.md` 齐全。
- 真实业务逻辑,不留大片 `# TODO` 空函数。
- ⛔ **恢复场景**:若 `code/` 已有部分代码(上次跑了一半),在其基础上**续写补全,不要推倒重来**。
## ⛔⛔ 分步写入规则(防大段写入被截断,务必遵守)
**绝不一次性 Write 一个大文件。** 单次写入过大会被截断,产出残缺代码。规则:
1. **每个文件用 Bash heredoc 分段写,每段 ≤ 150 行**:先 `cat > file` 写第一段,再 `cat >> file` 追加后续段。
2. **heredoc 必须用带单引号的 `'EOF'`** —— 代码含 `$` `\` `` ` `` 等特殊字符,不加引号会被转义成乱码:
```bash
cat > code/main.py << 'EOF'
...前 150 行...
EOF
cat >> code/main.py << 'EOF'
...后续行...
EOF
```
3. **写完每个文件用 `wc -l 文件` 确认行数符合预期**(验证没被截断)。
4. 一个文件写完就落盘,再写下一个,不要囤在上下文里。
⛔ **结束前必跑产出验证**(按类型自适应):
```bash
echo "=== 编码产出验证 ==="
PASS=true
PTYPE=$(grep -oE "project_type[:=] *(fullstack|frontend|cli|script)" AGENTS.md 2>/dev/null | grep -oE "(fullstack|frontend|cli|script)" | head -1)
PTYPE=${PTYPE:-fullstack}
echo "项目类型: $PTYPE"
[ -f RUN.md ] && echo "OK RUN.md" || { echo "FAIL 缺 RUN.md"; PASS=false; }
[ -f code/README.md ] && echo "OK code/README.md" || { echo "FAIL 缺 code/README.md"; PASS=false; }
if [ "$PTYPE" = "fullstack" ]; then
if [ -f code/backend/main.py ]; then echo "OK backend/main.py"; else echo "FAIL 缺 code/backend/main.py"; PASS=false; fi
{ [ -f code/backend/requirements.txt ] || [ -f code/backend/package.json ]; } && echo "OK 后端依赖清单" || { echo "FAIL 缺后端依赖清单"; PASS=false; }
[ -d code/frontend ] && echo "OK code/frontend/" || { echo "FAIL 缺 code/frontend/"; PASS=false; }
else
# 前端/CLI/脚本: code/ 下要有至少一个主源码文件
N=$(find code -maxdepth 3 -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.jsx" -o -name "*.tsx" -o -name "*.html" \) 2>/dev/null | wc -l)
if [ "$N" -ge 1 ]; then echo "OK code/ 下有 $N 个源码文件"; else echo "FAIL code/ 无源码文件"; PASS=false; fi
# ⛔ 纯前端/静态 HTML: 若有 .html 散页但无 index.html + 无 package.json, 预览起不来 → 必须补 index.html
if [ "$PTYPE" = "frontend" ] && ! [ -f code/package.json ] && ! [ -f code/index.html ] && find code -name "*.html" 2>/dev/null | grep -q .; then
echo "FAIL 纯前端有 .html 页面但缺 index.html 入口, 预览起不来 —— 必须补一个 index.html(首页/导航)"; PASS=false
fi
fi
[ "$PASS" != true ] && echo "产出验证失败 — 必须补全后重跑, 不要结束本步骤"
```
验证失败就继续补全,不要 end_turn。
## STEP_MANIFEST 产出声明
本步骤完成后,必须调用 `engine.step_manifest.write_manifest`(或经 bridge/common 等价入口)在工作区根目录写入 `STEP_MANIFEST.json`,至少包含:stepName / backend(含版本)/ config / inputFiles / outputFiles(含 SHA-256)/ commands / dependencies。质量门禁 `step_manifest` 将校验其存在性与完整性;缺失或无效将导致本步骤无法通过(fail)。
建议额外记录:输入材料来源哈希、模板版本。