一键导入
openspec-ff-new
创建 Frontend-First 新功能。引导用户描述需求,生成 proposal.md,创建符合 api-convention 的 Mock 数据模板和前端组件模板。这是 Frontend-First 流程 Step 1 + Step 2 的启动步骤。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
创建 Frontend-First 新功能。引导用户描述需求,生成 proposal.md,创建符合 api-convention 的 Mock 数据模板和前端组件模板。这是 Frontend-First 流程 Step 1 + Step 2 的启动步骤。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Generate a design system using ui-ux-pro-max. Use when creating frontend UI, generating design.md, or when user requests design system recommendations for their project.
完成 Frontend-First 集成与归档。在 Step 7 使用——检查契约测试是否通过,生成前端切换指南,创建归档文档。标志着一个功能从 Mock 驱动到真实 API 的完整过渡。
冻结 Frontend-First UI 和 Mock 数据。在 Step 3 使用——展示检查清单,要求用户逐项确认,保存 Mock 数据版本快照,生成 ui-freeze.md。冻结后 Mock 数据结构不再变动。
从冻结的 Mock 数据反推 API Spec。在 Frontend-First 流程 Step 4 使用——读取 Mock 数据文件和前端组件,自动生成 spec.md。这是 Frontend-First 流程的核心步骤。
Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
Verify implementation matches change artifacts. Use when the user wants to validate that implementation is complete, correct, and coherent before archiving.
| name | openspec-ff-new |
| description | 创建 Frontend-First 新功能。引导用户描述需求,生成 proposal.md,创建符合 api-convention 的 Mock 数据模板和前端组件模板。这是 Frontend-First 流程 Step 1 + Step 2 的启动步骤。 |
| license | MIT |
| compatibility | Works with any frontend project using the Frontend-First workflow. |
| metadata | {"author":"openspec","version":"1.0"} |
创建 Frontend-First 新功能:引导用户描述需求 → 生成 proposal.md → 创建 Mock 数据模板 + 前端组件模板。
前提条件: 项目已完成 Frontend-First 初始化(Step 0),devtools/mocks/ 目录存在。
Input: 功能名称(feature name)。如果未提供,使用 AskUserQuestion 询问。
Steps
收集需求信息
使用 AskUserQuestion 工具 逐步引导用户:
a. 功能名称
b. 背景和目标
c. 非目标
d. 开发模式确认
openspec/config.yaml 中的 dev_modefullstack 或 frontend-only,继续完整流程backend-only,提示用户此功能走 Spec-First 流程,建议使用 /opsx:new 代替生成 proposal.md
在 openspec/specs/<feature>/ 目录下创建 proposal.md:
# Proposal: <功能名称>
## 背景
<用户提供的背景>
## 目标
- <目标1>
- <目标2>
- <目标3>
## 非目标
- <排除项1>
- <排除项2>
## 关键用例
1. <用例1>
2. <用例2>
创建 Mock 数据模板
在 devtools/mocks/data/<feature>/ 目录下创建 Mock 文件。
读取 openspec/conventions/api-convention.md 中的响应信封规范,确保模板符合约束。
// devtools/mocks/data/<feature>/<feature>.mock.ts
// Mock 数据 — 遵守 api-convention.md 约束
// 响应信封:{ code, message, data }
// 字段命名:snake_case
// 日期格式:ISO 8601 "2024-01-28T10:30:00Z"
// 错误码:6位数字 CCMMSS
// 成功响应 — 正常数据
export const mock<Feature>ListSuccess = {
code: 0,
message: 'success',
data: {
items: [
// TODO: 根据 UI 需要填充字段
{ id: 1 },
],
total: 1,
page: 1,
page_size: 20,
},
}
// 成功响应 — 空列表
export const mock<Feature>ListEmpty = {
code: 0,
message: 'success',
data: {
items: [],
total: 0,
page: 1,
page_size: 20,
},
}
// 错误响应 — 参数错误
export const mock<Feature>Error = {
code: 100001,
message: '缺少必填参数',
data: null,
}
创建 MSW Handler 模板
// devtools/mocks/data/<feature>/handlers.ts
import { http, HttpResponse } from 'msw'
import { mock<Feature>ListSuccess } from './<feature>.mock'
export const <feature>Handlers = [
http.get('/api/<feature>', () => {
return HttpResponse.json(mock<Feature>ListSuccess)
}),
]
同时更新 devtools/mocks/handlers.ts 汇总文件,import 新功能的 handlers。
创建前端组件模板(如果项目有前端框架)
检测项目使用的框架(React/Vue),生成对应的组件骨架:
// src/components/<Feature>/<Feature>List.tsx (React 示例)
import { useEffect, useState } from 'react'
export function <Feature>List() {
const [data, setData] = useState(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState(null)
useEffect(() => {
fetch('/api/<feature>')
.then(res => res.json())
.then(json => {
if (json.code !== 0) throw new Error(json.message)
setData(json.data)
})
.catch(err => setError(err.message))
.finally(() => setLoading(false))
}, [])
if (loading) return <div>加载中...</div>
if (error) return <div>错误: {error}</div>
if (!data?.items.length) return <div>暂无数据</div>
return (
<div>
{/* TODO: 根据 UI 设计填充展示内容 */}
{data.items.map(item => (
<div key={item.id}>{JSON.stringify(item)}</div>
))}
</div>
)
}
提示用户下一步
✅ Frontend-First 功能「<feature>」已创建
已生成:
- openspec/specs/<feature>/proposal.md(需求文档)
- devtools/mocks/data/<feature>/<feature>.mock.ts(Mock 数据模板)
- devtools/mocks/data/<feature>/handlers.ts(MSW Handler)
- src/components/<Feature>/<Feature>List.tsx(前端组件骨架)
下一步:
1. 在浏览器中运行项目,开始设计 UI(Step 2)
2. 根据 UI 需要,补充 Mock 数据中的字段
3. 满意后运行 /opsx:ff-freeze 冻结 UI(Step 3)
Output
proposal.md(需求文档)Guardrails
{ code: 0, message: "success", data: { ... } } 信封格式{ items, total, page, page_size }