所有涉及 One Design Next 设计系统的用户请求都从这里进入。本 skill 负责:
p3-page-implement/GUIDE.md#单次-writeedit-的物理限制)。历史 trace 多次出现 1700 行 Write 被截断 → 重写又截断 → 浪费 40% 时间。constraints.md#错误排查铁律 或本文件「错误排查铁律」节)。直接、具体。说文件名、组件名、命令。不说"让我们来看看"、"首先我需要"。
禁止 AI 式废话:不说"综合考虑"、"值得注意的是"、"需要指出"。
短段落。结尾给行动项。
**当用户请求匹配任何子 skill 时,必须立即加载该 skill 的 GUIDE.md 并按其流程执行。
不要直接回答用户问题。不要跳过 skill 流程。子 skill 有结构化的多步工作流,
效果始终优于即兴回答。**
只有在没有任何 skill 匹配时,才直接回答。
主流水线是横向的 5 个 skill 串联;p2 是一条并列的三层知识带,主流水线各阶段按需消费。
主流水线(PHASE 1 分析 → PHASE 3 执行 → PHASE 4 质保;PHASE 2 是知识层)
用户输入 → design-analyst → design-spec → page-implement → audit → polish
(需求分析+提问) (Prompt+区块匹配) (代码) (审查) (精修)
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌────────────────────────────────────────────────────────────────────────────┐
│ p2 知识层(三个并列知识包,按需加载) │
├───────────────────────┬──────────────────────┬─────────────────────────────┤
│ p2-business-knowledge │ p2-block-catalog │ p2-one-design │
│ 业务语境 / 站点地图 │ 区块清单 / rules / │ 组件 / rules / │
│ 模块 / 页面知识 │ references(tsx) │ references / design-tokens │
│ │ │ │
│ design-analyst 消费 │ design-spec 消费 │ design-spec / page-implement │
│ design-spec 消费 │ page-implement 消费 │ / audit / polish 都消费 │
└───────────────────────┴──────────────────────┴─────────────────────────────┘
关键认知:
next_skill 前后咬合,自动接力design-analyst 只用 business-knowledge(+ 可选 block-catalog 作参考),不需要加载 one-design当你看到这些模式时,立即加载对应的 skill:
| 用户说了什么 | 加载的 Skill | 路径 |
|---|---|---|
| ------------------------------------------------------------------- | ----------------- | ---------------------------- |
| 「修这个错」/「报错了帮我看下」/「修正以上错误」/「ts 报错」/「编译失败」 | constraints「错误排查铁律」(先跑 tsc 拿真实报错,禁止读散文猜) | constraints.md#错误排查铁律 |
| 贴了截图/草稿图/线框图 | design-analyst | p1-design-analyst/GUIDE.md |
| "做一个页面"、"搭建 XX"、"生成区块"、"开发 XX 功能" | design-analyst | p1-design-analyst/GUIDE.md |
| "分析这个需求"、"分析一下" | design-analyst | p1-design-analyst/GUIDE.md |
| 给了结构化需求文档、设计 Prompt | design-spec | p1-design-spec/GUIDE.md |
| "审查"、"检查"、"review"、"合规检查" | audit | p4-audit/GUIDE.md |
| "精修"、"polish"、"优化细节"、"发布前" | polish | p4-polish/GUIDE.md |
| "创建项目"、"新建项目"、"初始化"、"scaffold"、"template"、"starter" | 本 skill 直接处理 | 见下方「创建项目」 |
| "GenUI"、"AI对话页面"、"聊天界面"、"对话组件" | 本 skill 直接处理 | 见下方「知识查询」 |
| "有哪些组件"、"怎么用 XX"、"查一下"、"设计规范" | 本 skill 直接处理 | 见下方「知识查询」 |
| "实现页面"、"生成页面代码"、"把设计稿转成代码" | page-implement | p3-page-implement/GUIDE.md |
> page-implement 处理页面级设计实现,用已有区块 + 设计系统拼装完整页面。design-spec 完成后默认接力到 page-implement。
当用户说的话同时匹配多个 skill 时,按以下优先级判断:
不确定分什么类? 问用户,不猜。格式:
"您想要 (A) 创建新项目、(B) 创建页面/区块、(C) 审查已有代码、(D) 查询组件用法、(E) 其他?"
在执行 design-analyst、design-spec、page-implement 之前,先检查当前是否在 ODN 项目中:
package.json,且 dependencies 中包含 one-design-next这保证用户说"做一个数据看板"时,AI 会先 scaffold 项目、再进入设计流水线,而不是在一个空目录里生成代码。
在 page-implement 写任何 .tsx 之前,必须先把需求文本扫一遍,命中以下关键词就强制查 p2-block-catalog,禁止自行重写:
| 需求文本里出现的词 | 必须查的区块 | 文件 |
|---|---|---|
| ------------------ | ------------ | ------ |
| 触点 / 媒体 / 多媒体对比 | touchpoint-analysis (L2) | p2-block-catalog/rules.md |
| 渗透 / 渗透率 | penetration-analysis (L2) | 同上 |
| 排名 / 榜 / TOP / 飙升 | ranking-list (L2,4 变体) | 同上 |
| 5R / 拉新 / 促活 / 回流 / R1-R5 | metric-card-group (L2) | 同上 |
| 心智 / 份额 / 趋势(品牌) | metrics-overview (L2) | 同上 |
| 雷达 / 本品 vs 参照 | radar-with-metrics-panel (L2) | 同上 |
| 词云 | wordcloud-section (L2) / mindshare-dictionary (L3) | 同上 |
| 转化复盘 / 转化指标 | conversion-metrics / conversion-trend (L3) | 同上 |
| 涟漪 / 相似度 | ripple-chart (L3) | 同上 |
| 桑基 / 资产流转 | sankey-chart (L3) | 同上 |
| TreeMap / 心智图谱 | treemap-panel (L3) | 同上 |
| 四象限 / 矩阵 / 资产×R3 | quadrant-scatter (L3) | 同上 |
| 主从 / 复盘布局 | review-master-detail-layout (L1) | 同上 |
| 页面头部 / 筛选栏 / 顶部 Tab | page-header (L1,14 种模式) | 同上 |
| 候选池 / 人群挑选 | crowd-pick-card-grid (L2) | 同上 |
| 日期范围(任何场景) | ry-date-range-picker 区块 | references/blocks/ry-date-range-picker.tsx |
判断准则:
Read 对应区块源码(在 references/blocks/.tsx )import 复用,不准重写p2-block-catalog/GUIDE.md 候选区块小节)> 这条规则专门治"看到'触点对比'就自己写一个 如果以下条件同时满足,直接输出组装步骤让用户手动执行,不进入子 skill: 输出「创建项目」章节中的完整组装步骤,让用户在终端中自行执行。所有文件都在 以下规则适用于所有子 skill、所有阶段,无论是用组件还是手写 div。 违反任何一条,audit 必须判定为 🔴 严重。 ODN 已经提供的控件/容器,禁止用原生 HTML 或别的组件拼装替代。命中以下任意一项,audit 必须判定为 🔴 严重。 唯一例外(白名单): > 判断准则:如果你正在用原生标签拼一个完整的交互控件,方向已经走偏了——回头查 > 如果生成的 UI 看起来像 SaaS 官网(渐变 Hero、全屏大图、动态粒子、紫蓝配色),那就偏离了 ODN。 ODN 是 B 端工具 UI:白底、实色、方正、无装饰。用信息层级传达重要性,不用视觉装饰。 遇到「上线公告 / Hero / 头图 / 封面 / 落地页」等需求时,尤其要警惕渐变先验。正确做法:白底容器 + 实色标签/徽章 + 字号层级制造视觉冲击。 视觉自检: 组件选用自检(与视觉同级 · 缺一项即不准报 DONE): > 完整反模式清单(AP-01 ~ AP-20)见 终极检验:把生成的页面截图和如翼现有页面并排放——看得出哪个是新做的吗?如果新页面明显"更好看""更现代""更有设计感",那就偏了。ODN 追求的是融入,不是突出。 子 skill 之间有固定的接力关系。当一个 skill 执行完毕后,自动加载下一个: 每个 skill 的 frontmatter 中声明了 当 向下游传递时标注: 完整功能,所有操作正常执行。 当用户只是提问(不是要创建/审查/修复),本 skill 直接回答,不转发。 流程:识别问题类型 → 读取对应文件 → 提取信息 → 简洁回答。 当用户要改已实现的如翼 workshop 页时: 区块目录( 选择准则: 当用户意图为创建新项目时,从 **强制规则:必须使用 Vite + React + TypeScript + Tailwind CSS + one-design-next 组件库。 禁止用纯 HTML/CSS、Material UI、Ant Design 或其他 UI 库替代。 所有如翼页面必须以 > MANIFEST 兜底原则:当 Glob、列目录或 不存在"网络不通"的问题——所有文件都在本地 设置 同时把 安装依赖: 创建 创建 从 当用户只要一个或几个页面(如"创建如翼首页的模板"): 以 只需复制: 不需要逐个读 tsx 文件来分析 import——MANIFEST 已预计算。 组装后的项目使用 React Router 做 URL 路由: 每个 workshop 页面( 页面注册表 ```tsx import "one-design-next/dist/style/base.css" ``` 每个 skill 完成后,报告以下状态之一: > 用户说「修这个错」「报错了」「修正以上错误」但没贴具体报错信息时——你的第一动作不是通读代码 + 翻规则 md 猜。 ✅ 正确流程: ❌ 严禁: > 这条专门治"用户说有 bug 但没给报错 → AI 凭空通读 5 个 rules.md → 错杀对的 prop → 没装依赖也敢交付"的灾难循环。一次失败 trace 烧掉 80K+ token 的 80% 都是这种"读散文猜错"。 只要本次会话产出了 未满足任一条 → 最多只能报 > 这条约束专门治"构建跑通 = 完成"的错觉。预览能打开不代表组件用对了——历史上多次出现 构建失败、依赖安装失败、包管理器报错(如 > 这条专门治"构建一直失败但 AI 一直在改配置烧 token"的循环。一次构建问题最多消耗 3 次尝试,超出就停下报 BLOCKED,给用户结论性结果,不要把技术决策外包给用户。 熔断格式: 共 6 个版本 + 排序按钮"的复发模式。区块清单里有的,必须用清单里的。
短路规则:空目录 + 无终端
package.jsonreferences/ 目录下,不需要网络。设计底线(全流水线强制 · 零容忍)
视觉铁律
禁止 原因 替代 ------ ------ ------ linear-gradient / radial-gradient / bg-gradient-to- / from- / via-*ODN 是实色系统,不用渐变 实色 bg-brand-6 / bg-white / bg-[#f2f5fa]毛玻璃 backdrop-blur / 霓虹 glow / neonAI 审美陷阱 投影层级 shadow-1 ~ shadow-4Tailwind 默认色板 blue-500 / purple-600 / indigo-*未映射到 ODN Token ODN 语义色 text-brand-6 / text-black-12硬编码色值 #296BEF / rgb(41,107,239)绕过 Token 体系 var(--odn-color-*) 或 Tailwind 语义色(ECharts option 除外:Canvas 不支持直接写 var(),用 getComputedStyle 读取实际值后传入,见 data-display.md Chart 段)外部图标库 lucide-react / react-icons / heroiconsODN 有内置 Icon 组件 组件选用铁律(与视觉铁律同级 · 零容忍)
场景 ❌ 禁止 ✅ 必须用 ------ -------- ---------- 数据表格 /
/ / / 自己拼整张表 日期范围(如翼) / / 用两个 Select 拼"年/月" / 自画日历面板RyDateRangePicker 区块(blocks/ry-date-range-picker.tsx)单日期 自画日历 / 用 Select 拼日期 下拉选择 / + 弹层自己写 / 用 Popover + 列表自拼级联选择 多个 Select 嵌套 / 自写树形面板 (树形场景统一 Cascader,禁止 TreeSelect)表单布局 裸 + + 手写栅格 + 弹窗 自写遮罩 + 居中容器 抽屉 自写右滑面板 浮层提示 自写 absolute 气泡 / title 属性 / 下拉菜单 自写 Popover + 列表全局消息 alert() / 自写 toastMessage.info() / Message.success()警告提示 自写黄/红条 卡片 裸 + 空状态 自写"暂无数据"插图 加载态 自写 spinner SVG Tab 切换 自写按钮组切换 (按需选 5 种变体)分页 自写"上一页/下一页"按钮 头像 + 圆形折叠面板 / 自写展开 / 滚动区 裸 overflow-auto 当主滚动壳虚拟列表 自己截窗渲染 图标 lucide-react / inline SVG(业务图标) 直拼,但仍须用 ODN 颜色 token
Select 拼接(-ml-px + 自定义 border-radius)的复合控件场景允许 DateRangePicker,其他场景一律走 RyDateRangePickerp2-one-design/GUIDE.md 的组件速查表。如果速查表里有,必须用速查表里的。基调铁律
生成后自检(所有产出代码的 skill 必须执行)
gradient / from- / via- / to-(AP-15)lucide-react / react-icons / heroicons(AP-11) /
/ (除浮层内嵌小表白名单外,AP-19) / / / (AP-19)RyDateRangePicker,不是 DateRangePicker、不是两个 Select 拼"年/月"(AP-20) 设了
scroll={{ x: 'max-content' }}(不是固定数字),且每列 width 不小于中文 title 的实际宽度(AP-21)Form + Form.Item,不是裸 + Inputp2-one-design/rules/design-paradigm.md。完整组件选用映射见上方「组件选用铁律」表。流水线
[项目环境检查] → design-analyst → design-spec → page-implement → audit → polish
next_skill,按此执行。mode 参数沿流水线向下透传。mode 参数
readonly 模式(外部平台默认)
mode=readonly 时:docs-pages/、不更新 block-catalog、business-knowledge 等知识文件components/ 下的组件源码page-implement 输出代码到用户工作目录polish 输出修复建议但不自动修改audit 和知识查询正常工作mode: readonlyfull 模式(本项目内部默认)
知识查询
用户问题类型 读取的文件 -------------------------------------------- ----------------------------------------------------------------------------------- 组件用法("Button 怎么用") p2-one-design/GUIDE.md + p2-one-design/rules/ 对应文件组件列表 p2-one-design/references/component-list.md设计规范("颜色"、"间距"、"Token") p2-one-design/rules/design-tokens.md图标("搜索图标叫什么") p2-one-design/rules/icons.mdGenUI 组件("对话组件怎么用") p2-one-design/rules/genui.md + GUIDE.md GenUI 章节区块("有没有筛选区块") p2-block-catalog/GUIDE.md业务知识("5R 是什么") p2-business-knowledge/GUIDE.md + rules/页面类型("仪表盘长什么样") p2-business-knowledge/GUIDE.md 页面类型参考已有 workshop 页(slug、改某页、和某页对齐) p2-page-catalog/GUIDE.md(含 / 路由约定)+ p2-page-catalog/rules.md已有 workshop 页面(与
p2-page-catalog 联跑时)/ 直达该页;slug 与 p2-page-catalog/rules.md 中的章节标题一致。文件名与 slug 不一致时查 references/workshop/workshopModules.ts 的 WORKSHOP_SLUG_TO_IMPORT。/workshop/;模板独立跑时为 /。references/workshop/(skills 内自包含),详见 p2-page-catalog/GUIDE.md。区块查询 · 按"想解决什么产品问题"路由
p2-block-catalog)按 L1/L2/L3/L4 分层。当用户问"要做 XX 该用什么区块"时,按产品问题映射:产品问题 优先考虑的区块 层级 ------------------------------------------------------------- ---------------------------------------------- ---- 页面壳(复盘主从布局) review-master-detail-layoutL1 页面头部/筛选栏/Tab page-header(14 种模式)L1 从候选池挑选人群 crowd-pick-card-gridL2 某维度的排位展示 ranking-list(brand/share/hot/surge 4 变体)L2 5R 人群资产指标 metric-card-groupL2 品牌心智量 + 份额 + 趋势 metrics-overviewL2 渗透率对比 + 榜单联动 penetration-analysisL2 多媒体触点对比 touchpoint-analysisL2 通用词云段落 wordcloud-sectionL2 本品 vs 参照系雷达对比 radar-with-metrics-panelL2 转化复盘的核心指标 conversion-metrics / conversion-trendL3 人群相似度涟漪 ripple-chartL3 资产流转桑基图 sankey-chartL3 心智图谱 TreeMap treemap-panelL3 四象限分布图(资产×R3 或心智双矩阵,同一 quadrant-scatter)quadrant-scatterL3 结构化"热词榜+多层词云" mindshare-dictionaryL3 p2-block-catalog/GUIDE.md 的候选区块小节)创建项目
references/ 目录组装一个基于 one-design-next 的完整项目。RuyiLayout 组件为页面壳。**处理流程
Read references/MANIFEST.json。它预计算了每个页面的文件、区块依赖和数据依赖,不需要自行扫描 import。禁止跳过 MANIFEST 直接靠 Glob/列目录决定要哪些文件——Glob 在某些环境下会失败(已观测到"查找目录失败"复发),此时 MANIFEST 是唯一可靠的清单data-dashboard),无法推断时用 odn-appnpm install(pnpm v10+ 必须先确保 .npmrc + package.json 的 pnpm.onlyBuiltDependencies 已就位,见「1. 创建 Vite + React + Tailwind 项目骨架」)npm run dev 启动开发服务器home)→ 告知 http://localhost:5173/ 直达该页http://localhost:5173/ 是空壳起始页,用于从零搭新页面find 类操作失败时,永远回退到 Read references/MANIFEST.json——它包含完整的 pages / allBlocks / allWorkshop / allData 清单。不准在缺失目录信息时凭空臆想要哪些文件。降级策略
条件 行为 ------ ------------------------------------------------ 有终端 自动执行下方全部步骤 无终端 输出完整步骤让用户手动执行(包括文件列表和命令) references/ 里,不需要 clone 或 degit。组装步骤
1. 创建 Vite + React + Tailwind 项目骨架
mkdir <项目名> && cd <项目名>
npm init -y
package.json(pnpm v10+ 必须包含 pnpm.onlyBuiltDependencies 和 packageManager,否则会卡 ERR_PNPM_IGNORED_BUILDS):{
"name": "<项目名>",
"private": true,
"type": "module",
"packageManager": "pnpm@9.15.0",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"pnpm": {
"onlyBuiltDependencies": ["esbuild", "sharp", "@swc/core"]
}
}
references/scaffold/.npmrc 复制到项目根目录,包含 auto-install-peers=true 等 pnpm v10 兼容配置。npm install one-design-next react react-dom react-router-dom
npm install -D @tailwindcss/vite tailwindcss @vitejs/plugin-react vite typescript @types/react @types/react-dom
tsconfig.json:{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"resolveJsonModule": true
},
"include": ["src"]
}
index.html:<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><项目名></title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
2. 复制 scaffold 关键文件
references/scaffold/ 复制到项目根目录和 src/:来源 目标 说明 -------------------------------------------------------------------------- ------------------- --------------------------------------- references/scaffold/vite.config.tsvite.config.tsReact dedupe,不可删减 references/scaffold/main.tsxsrc/main.tsx全局 React 兼容,不可删减 references/scaffold/app.csssrc/app.cssODN token → Tailwind 桥接,不可删减 references/scaffold/App.tsxsrc/App.tsx路由入口 references/scaffold/vite-env.d.tssrc/vite-env.d.tsVite 类型声明 references/scaffold/pages/src/pages/WorkshopPage (内联生成) .npmrcpnpm v10 兼容,scaffold 脚本内联生成 3. 复制 workshop 页面和区块
来源 目标 说明 ---------------------------------------- -------------------- ------------------- references/workshop/*.tsxsrc/workshop/33 个完整页面 references/workshop/workshopModules.tssrc/workshop/页面注册表 references/workshop/data/*.jsonsrc/workshop/data/mock 数据(精简版) references/blocks/src/blocks/31 个可复用区块 全量复制(快捷命令,有终端时一键执行)
# 假设 SKILLS_DIR 指向 skills/ 目录的绝对路径
SKILLS_DIR="<skills目录路径>"
cp "$SKILLS_DIR/references/scaffold/vite.config.ts" .
cat > .npmrc << 'EOF'
auto-install-peers=true
strict-peer-dependencies=false
EOF
mkdir -p src/pages src/workshop/data src/blocks
cp "$SKILLS_DIR/references/scaffold/main.tsx" src/
cp "$SKILLS_DIR/references/scaffold/app.css" src/
cp "$SKILLS_DIR/references/scaffold/App.tsx" src/
cp "$SKILLS_DIR/references/scaffold/vite-env.d.ts" src/
cp "$SKILLS_DIR/references/scaffold/pages/"*.tsx src/pages/
cp "$SKILLS_DIR/references/workshop/"*.tsx src/workshop/
cp "$SKILLS_DIR/references/workshop/"*.ts src/workshop/
cp "$SKILLS_DIR/references/workshop/data/"*.json src/workshop/data/
cp -r "$SKILLS_DIR/references/blocks/"* src/blocks/
按需复制(用户只要特定页面时)
references/MANIFEST.json → 找到 pages.home 为例,MANIFEST 记录:{
"file": "workshop/home.tsx",
"blocks": ["blocks/ry-date-range-picker.tsx"],
"data": [
"workshop/data/home-trend-data.json",
"workshop/data/home-view-data.json",
"workshop/data/market-rank-config.json",
"workshop/data/market-rank-data.json"
]
}
workshop/home.tsx → src/workshop/workshop/workshopModules.ts → src/workshop/(始终需要,但只保留选中页面的注册条目)workshop/data/home-.json + workshop/data/market-rank-.json → src/workshop/data/blocks/ry-date-range-picker.tsx → src/blocks/_internal/*,也一并复制 blocks/_internal/项目架构
路由 组件 用途 -------- -------------- ------------------------------------------------ /:slugWorkshopPage动态路由,从 workshopModules.ts 懒加载指定页面src/workshop/)是完全自包含的——内置 RuyiLayout + 菜单 + 业务内容 + mock 数据,不依赖外部状态。src/workshop/workshopModules.ts 包含:WORKSHOP_SLUG_TO_IMPORT:slug → 懒加载 import 映射(/:slug 路由用)WORKSHOP_INDEX:{ slug, title }[] 数组定制要点
修改项 位置 说明 ------------ ------------------------- -------------------------- 页面标题 index.html 的 修改为项目名称 新增业务页面 src/workshop/创建页面文件(见下方流程) 新增页面
src/workshop/(每个页面自包含 RuyiLayout + 菜单 + 内容)workshopModules.ts:// 在 WORKSHOP_SLUG_TO_IMPORT 中添加:
"<slug>": () => import("./<slug>"),
// 在 WORKSHOP_INDEX 中添加:
{ slug: "<slug>", title: "页面中文名" },
/ 路由访问注意事项
import { Button } from 'one-design-next' 会通过 dist/index.js → dist/style/index.js → base.css 自动引入样式,无需显式引入 base.css。若出现样式全丢,检查是否用了子路径导入(import Button from 'one-design-next/dist/button')——子路径绕过了 dist/index.js,样式链会断掉,此时需在 main.tsx 最顶部加:app.css 第一行必须是 @import 'tailwindcss' important;——末尾的 important 不可省略,否则 Tailwind utility class 无法覆盖 ODN 组件内部样式。如果不用 references/scaffold/app.css 而自行创建,务必确保这一行正确。app.css 中的 @theme 块是核心——它将 ODN CSS 变量桥接到 Tailwind 4 的工具类体系。必须原样保留,不可删减。main.tsx 中的 globalThis.React = React 是 one-design-next 兼容所需,不可删除。vite.config.ts 中的 resolve.dedupe + resolve.alias 防止 React 多副本,不可删除。完成状态协议
状态 含义 ---------------------- -------------------------------------------- DONE 全部步骤完成。给出证据(tsc 0 error / 预览跑起来 / 用户确认)。 DONE_PENDING_VERIFICATION 改完了但当前环境装不上依赖、跑不了 tsc,需用户在自己环境验证。 DONE_WITH_CONCERNS 完成了,但有问题需要用户知道。列出每个问题。 BLOCKED 无法继续。说明原因和已尝试的方法。 NEEDS_CONTEXT 缺少信息。明确说需要什么。 NEEDS_VERIFICATION 用户要求纯静态 review(明确说"不要跑"),代码改完但未跑过 tsc/预览。 错误排查铁律(修代码前必读)
npx tsc --noEmit 2>&1 | head -80(或 npm run dev / vite build)拿真实报错rules/*.md 来猜哪儿不对DONE——必须降级为 DONE_PENDING_VERIFICATION / BLOCKED涉及代码产出时的强约束(page-implement / polish 必读)
.tsx / .ts / .css 等代码文件,报 DONE 必须满足以下两条:p4-audit/GUIDE.md → 对生成代码执行审查 → 输出审查报告"动作,且报告判定为 ✅ 合规DONE_WITH_CONCERNS,且必须在第一行写明"未运行 audit"或"未执行自检"。 替代
Table、Select 拼日期范围这类问题,根因都是跳过了 audit。熔断机制
构建工具/依赖问题专项熔断
ERR_PNPM_IGNORED_BUILDS、peer dep 冲突、版本不兼容)算同一步骤,3 次失败必须停止,禁止继续:.npmrc 的不同变体package.json ↔ .npmrc ↔ pnpm-workspace.yaml 之间反复腾挪.npmrc 写什么、为什么 pnpm 报错。用户只关心"页面有没有跑起来".npmrc + package.json 是否包含必要的 pnpm 兼容字段(auto-install-peers、pnpm.onlyBuiltDependencies、packageManager);缺哪条补哪条,再装一次BLOCKED,附上具体报错信息 + 建议的修复方向(如"建议把 Node 升到 ≥ 20.10"),不要让用户自己想方案.npmrc 改什么状态:BLOCKED
原因:[1-2 句]
已尝试:[做了什么]
建议:[用户下一步该做什么]
错误处理
场景 处理 ------------------------- ------------------------------------------------------------ 无法判断意图 用上方选择题问用户 readonly 模式下请求写操作 "当前为只读模式,无法修改组件库。代码将输出到您的工作目录。" 缺少必要输入 根据目标 skill 的 args 定义,提示补充 子 skill 文件不存在 回退到 one-design 知识包直接回答 知识文件缺失(外部平台) 使用核心层知识,不报错。见各知识包的「知识分层」章节 版本历史
🔗 相关推荐
Self-Improving + Proactive Agent
Skill Vetter
self-improving agent