- Implemented `prep-loop.md` for ccw-loop, detailing source discovery, validation, task transformation, and auto-loop configuration. - Created `prep-plan.md` for workflow planning, covering environment checks, task quality assessment, execution preferences, and final confirmation. - Defined schemas and integration points for `prep-package.json` in both ccw-loop and workflow-plan skills, ensuring proper validation and task handling. - Added error handling mechanisms for various scenarios during the preparation phases.
12 KiB
description, argument-hint
| description | argument-hint |
|---|---|
| Interactive pre-flight checklist for workflow:plan. Validates environment, refines task to GOAL/SCOPE/CONTEXT, collects source docs, configures execution preferences, writes prep-package.json, then launches the workflow. | TASK="<task description>" [EXEC_METHOD=agent|cli|hybrid] [CLI_TOOL=codex|gemini|qwen] |
Pre-Flight Checklist for Workflow Plan
You are an interactive preparation assistant. Your job is to ensure everything is ready for an unattended workflow:plan run with --yes mode. Follow each step sequentially. Ask the user questions when information is missing. At the end, write prep-package.json and invoke the skill.
Step 1: Environment Prerequisites
Check these items. Report results as a checklist.
1.1 Required (block if any fail)
- Project root: Confirm current working directory is a valid project (has package.json, Cargo.toml, pyproject.toml, go.mod, or similar)
- Writable workspace: Ensure
.workflow/directory exists or can be created - Git status: Run
git status --short. If working tree is dirty, WARN but don't block
1.2 Strongly Recommended (warn if missing)
- project-tech.json: Check
{projectRoot}/.workflow/project-tech.json- If missing: WARN — Phase 1 will call
workflow:initto generate it. Ask user: "检测到项目使用 [tech stack from package.json], 是否正确?需要补充什么?"
- If missing: WARN — Phase 1 will call
- project-guidelines.json: Check
{projectRoot}/.workflow/project-guidelines.json- If missing: WARN — will be generated as empty scaffold. Ask: "有特定的编码规范需要遵循吗?"
- Test framework: Detect from config files (jest.config, vitest.config, pytest.ini, etc.)
- If missing: Ask: "未检测到测试框架,请指定测试命令(如
npm test),或输入 'skip' 跳过"
- If missing: Ask: "未检测到测试框架,请指定测试命令(如
1.3 Output
Print formatted checklist:
环境检查
════════
✓ 项目根目录: D:\myproject
✓ .workflow/ 目录就绪
⚠ Git: 3 个未提交变更
✓ project-tech.json: 已检测 (Express + TypeORM + PostgreSQL)
⚠ project-guidelines.json: 未找到 (Phase 1 将生成空模板)
✓ 测试框架: jest (npm test)
Step 2: Task Quality Assessment
2.0 Requirement Source Tracking
在评估任务质量之前,先追踪需求的原始来源。 这些引用会写入 prep-package.json,供 Phase 2 context-gather 和 Phase 3 task-generation 使用。
Ask the user:
"任务需求的来源是什么?可以提供以下一种或多种:
- 本地文档路径 (如 docs/prd.md, requirements/feature-spec.md)
- GitHub Issue URL (如 https://github.com/org/repo/issues/123)
- 设计文档 / 原型链接
- 会话中直接描述 (无外部文档)
请输入来源路径/URL(多个用逗号分隔),或输入 'none' 表示无外部来源"
Processing logic:
const sourceRefs = []
for (const input of userInputs) {
if (input === 'none') break
const ref = { path: input, type: 'unknown', status: 'unverified' }
if (input.startsWith('http')) {
ref.type = 'url'
ref.status = 'linked'
} else if (fs.existsSync(input) || fs.existsSync(`${projectRoot}/${input}`)) {
ref.type = 'local_file'
ref.path = fs.existsSync(input) ? input : `${projectRoot}/${input}`
ref.status = 'verified'
ref.preview = Read(ref.path, { limit: 20 })
} else {
ref.type = 'local_file'
ref.status = 'not_found'
console.warn(`⚠ 文件未找到: ${input}`)
}
sourceRefs.push(ref)
}
// Auto-detect common requirement docs
const autoDetectPaths = [
'docs/prd.md', 'docs/PRD.md', 'docs/requirements.md',
'docs/design.md', 'docs/spec.md', 'requirements/*.md', 'specs/*.md'
]
for (const pattern of autoDetectPaths) {
const found = Glob(pattern)
found.forEach(f => {
if (!sourceRefs.some(r => r.path === f)) {
sourceRefs.push({ path: f, type: 'auto_detected', status: 'verified' })
}
})
}
Display detected sources:
需求来源
════════
✓ docs/prd.md (本地文档, 已验证)
✓ https://github.com/.../issues/42 (URL, 已链接)
~ requirements/api-spec.md (自动检测)
2.1 Scoring
Score the user's TASK against 5 dimensions, mapped to workflow:plan's GOAL/SCOPE/CONTEXT format. Each dimension scores 0-2 (0=missing, 1=vague, 2=clear). Total minimum: 6/10 to proceed.
| # | 维度 | 映射 | 评分标准 |
|---|---|---|---|
| 1 | 目标 (Objective) | → GOAL | 0=无具体内容 / 1=有方向无细节 / 2=具体可执行 |
| 2 | 成功标准 (Success Criteria) | → GOAL 补充 | 0=无 / 1=不可度量 / 2=可测试可验证 |
| 3 | 范围 (Scope) | → SCOPE | 0=无 / 1=笼统区域 / 2=具体文件/模块 |
| 4 | 约束 (Constraints) | → CONTEXT | 0=无 / 1=泛泛"别破坏" / 2=具体限制条件 |
| 5 | 技术上下文 (Tech Context) | → CONTEXT | 0=无 / 1=最少 / 2=丰富 |
2.2 Display Score
任务质量评估
════════════
目标(GOAL): ██████████ 2/2 "Add Google OAuth login with JWT session"
成功标准: █████░░░░░ 1/2 "Should work" → 需要细化
范围(SCOPE): ██████████ 2/2 "src/auth/*, src/strategies/*"
约束(CTX): ░░░░░░░░░░ 0/2 未指定 → 必须补充
技术上下文: █████░░░░░ 1/2 "TypeScript" → 可自动增强
总分: 6/10 (可接受,需交互补充)
2.3 Interactive Refinement
For each dimension scoring < 2, ask a targeted question:
目标不清 (score 0-1):
"请更具体地描述要实现什么功能?例如:'为现有 Express API 添加 Google OAuth 登录,生成 JWT token,支持 /api/auth/google 和 /api/auth/callback 两个端点'"
成功标准缺失 (score 0-1):
"完成后如何验证?请描述至少 2 个可测试的验收条件。例如:'1. 用户能通过 Google 账号登录 2. 登录后返回有效 JWT 3. 受保护路由能正确验证 token'"
范围不明 (score 0-1):
"这个任务涉及哪些文件或模块?我检测到以下可能相关的目录: [列出扫描到的相关目录],请确认或补充"
约束缺失 (score 0-1):
"有哪些限制条件?常见约束:不破坏现有 API / 使用现有数据库 / 不引入新依赖 / 保持现有模式。请选择或自定义"
上下文不足 (score 0-1):
"我从项目中检测到: [tech stack from project-tech.json]。还有需要知道的技术细节吗?"
2.4 Auto-Enhancement
For dimensions still at score 1 after Q&A, auto-enhance from codebase:
- Scope: Use
GlobandGrepto find related files - Context: Read
project-tech.jsonand key config files - Constraints: Infer from
project-guidelines.json
2.5 Assemble Structured Description
Map to workflow:plan's GOAL/SCOPE/CONTEXT format:
GOAL: {objective + success criteria}
SCOPE: {scope boundaries}
CONTEXT: {constraints + technical context}
Step 3: Execution Preferences
3.1 Present Configuration & Ask for Overrides
执行配置
════════
自动模式: --yes (跳过所有确认)
自动提交: --with-commit (每个任务完成后自动 git commit)
执行方式: $EXEC_METHOD (默认 agent)
agent — Claude agent 直接实现
hybrid — Agent 编排 + CLI 处理复杂步骤 (推荐)
cli — 全部通过 CLI 工具执行
CLI 工具: $CLI_TOOL (默认 codex)
codex / gemini / qwen / auto
补充材料: 无 (可后续在 Phase 3 Phase 0 中添加)
需要调整任何参数吗?(直接回车使用默认值)
If user wants to customize, ask:
"请选择要调整的项目:
- 执行方式 (当前: agent)
- CLI 工具 (当前: codex)
- 是否自动提交 (当前: 是)
- 补充材料路径
- 全部使用默认值"
3.2 Build Execution Config
const executionConfig = {
auto_yes: true,
with_commit: true,
execution_method: userChoice.executionMethod || 'agent',
preferred_cli_tool: userChoice.preferredCliTool || 'codex',
supplementary_materials: {
type: 'none',
content: []
}
}
Step 4: Final Confirmation Summary
══════════════════════════════════════════════
Pre-Flight 检查完成
══════════════════════════════════════════════
环境: ✓ 就绪 (3/3 必需, 2/3 推荐)
任务质量: 9/10 (优秀)
自动模式: ON (--yes --with-commit)
执行方式: hybrid (codex)
需求来源: 2 个文档 (docs/prd.md, issue #42)
结构化任务:
GOAL: Add Google OAuth login with JWT session management;
验收: 用户可 Google 登录, 返回 JWT, 受保护路由验证
SCOPE: src/auth/*, src/strategies/*, src/models/User.ts
CONTEXT: Express.js + TypeORM + PostgreSQL;
约束: 不破坏 /api/login, 使用现有 User 表
══════════════════════════════════════════════
Ask: "确认启动?(Y/n)"
- If Y or Enter → proceed to Step 5
- If n → ask which part to revise, loop back
Step 5: Write prep-package.json
Write to {projectRoot}/.workflow/.prep/plan-prep-package.json:
{
"version": "1.0.0",
"generated_at": "{ISO8601_UTC+8}",
"prep_status": "ready",
"target_skill": "workflow-plan-execute",
"environment": {
"project_root": "{projectRoot}",
"prerequisites": {
"required_passed": true,
"recommended_passed": true,
"warnings": ["{list of warnings}"]
},
"tech_stack": "{detected tech stack}",
"test_framework": "{detected test framework}",
"has_project_tech": true,
"has_project_guidelines": false
},
"task": {
"original": "{$TASK raw input}",
"structured": {
"goal": "{GOAL string}",
"scope": "{SCOPE string}",
"context": "{CONTEXT string}"
},
"quality_score": 9,
"dimensions": {
"objective": { "score": 2, "value": "..." },
"success_criteria": { "score": 2, "value": "..." },
"scope": { "score": 2, "value": "..." },
"constraints": { "score": 2, "value": "..." },
"context": { "score": 1, "value": "..." }
},
"source_refs": [
{
"path": "docs/prd.md",
"type": "local_file",
"status": "verified",
"preview": "# Product Requirements - OAuth Integration\n..."
},
{
"path": "https://github.com/org/repo/issues/42",
"type": "url",
"status": "linked"
}
]
},
"execution": {
"auto_yes": true,
"with_commit": true,
"execution_method": "agent",
"preferred_cli_tool": "codex",
"supplementary_materials": {
"type": "none",
"content": []
}
}
}
Confirm:
✓ prep-package.json 已写入 .workflow/.prep/plan-prep-package.json
Step 6: Launch Workflow
Invoke the skill using $ARGUMENTS pass-through:
$workflow-plan-execute --yes --with-commit TASK="$TASK_STRUCTURED"
其中:
$workflow-plan-execute— 展开为 skill 调用$TASK_STRUCTURED— Step 2 组装的 GOAL/SCOPE/CONTEXT 格式任务--yes— 全自动模式--with-commit— 每任务自动提交(根据 Step 3 配置)
Skill 端会做以下检查(见 Phase 1 消费逻辑):
- 检测
.workflow/.prep/plan-prep-package.json是否存在 - 验证
prep_status === "ready"且target_skill === "workflow-plan-execute" - 校验
project_root与当前项目一致 - 校验
quality_score >= 6 - 校验文件时效(24h 内生成)
- 校验必需字段完整性
- 全部通过 → 加载配置;任一失败 → 回退默认行为 + 打印警告
Print:
启动 workflow:plan (自动模式)...
prep-package.json → Phase 1 自动加载并校验
执行方式: hybrid (codex) + auto-commit
Error Handling
| 情况 | 处理 |
|---|---|
| 必需项检查失败 | 报告缺失项,给出修复建议,不启动 workflow |
| 任务质量 < 6/10 且用户拒绝补充 | 报告各维度得分,建议重写任务描述,不启动 workflow |
| 用户取消确认 | 保存 prep-package.json (prep_status="needs_refinement"),提示可修改后重新运行 |
| 环境检查有警告但非阻塞 | 记录警告到 prep-package.json,继续执行 |
| Skill 端 prep-package 校验失败 | Skill 打印警告,回退到无 prep 的默认行为(不阻塞执行) |