Initial commit: OneOS prototype workspace baseline.

Include weekly report and other prototype sources with project tooling config.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
王冕
2026-06-26 15:36:52 +08:00
commit 7ef8852919
1310 changed files with 282074 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
# AI Studio 项目转换规则
用于将 Google AI Studio 生成的 React 项目转换为本项目原型页面,保持视觉和功能,并符合 `rules/prototype-development-guide.md`
## 目标
- 移除 AI Studio 特定入口与 HTML 模板。
- 将 Import Map / CDN 依赖转为 npm 依赖。
- 产出可在 `src/prototypes/<name>/` 中运行的 React 页面。
## 预处理
```bash
node scripts/ai-studio-converter.mjs <ai-studio-project-dir> [output-name]
```
脚本位于客户端项目 `scripts/` 目录。它会复制项目、分析 Import Map、样式、依赖和环境变量并生成任务文档与分析 JSON。脚本不直接修改业务代码。
## 典型结构
```text
ai-studio-project/
├── assets/
├── components/
├── App.tsx
├── index.tsx
├── index.html
├── constants.ts
├── types.ts
├── vite.config.ts
└── metadata.json
```
重点处理:
- `App.tsx`:转换为本项目 `index.tsx` 入口组件。
- `index.html`:提取 Import Map、Tailwind CDN、自定义样式和字体后删除。
- `index.tsx`:本项目已有挂载入口,删除。
## 默认页面格式
```typescript
/**
* @name 页面名称
*
* 参考资料:
* - /rules/prototype-development-guide.md
*/
import './style.css';
import React from 'react';
export default function PageName() {
return (
<div />
);
}
```
默认保持普通 React 组件;只有明确需要外部接管、配置、数据、事件或动作时,才参考 `rules/axure-api-guide.md` 接入 Axure API。
## 样式迁移
`index.html` 提取 `<style>` 和外部字体,写入 `style.css`
```css
@import "tailwindcss";
@import url('https://fonts.googleapis.com/css2?family=...');
```
保留原有 Tailwind 类名、自定义动画和 CSS 变量。
## Import Map 转换
将 CDN 依赖转换为 npm 包:
| Import Map | npm 包 |
|------------|--------|
| `https://esm.sh/lucide-react` | `lucide-react` |
| `https://esm.sh/framer-motion` | `framer-motion` |
| `https://esm.sh/@google/genai` | `@google/genai` |
排除 `react``react-dom`,本项目已提供。
## 环境变量
`process.env.*` 改为 `import.meta.env.VITE_*`,并告知用户需要配置的 `.env.local` 项。
## 移除文件
完成迁移后移除:
- `index.html`
- `index.tsx`
- `metadata.json`(可保留为参考,但不作为运行入口)
## 验收
```bash
node scripts/check-app-ready.mjs /prototypes/[页面名]
```
要求:
- 状态为 `READY`
- 页面正常渲染。
- 无控制台错误。
- 关键交互正常。
- 样式显示正确。

183
rules/axure-api-guide.md Normal file
View File

@@ -0,0 +1,183 @@
# Axure API 指南
本文说明何时以及如何在原型中接入 Axure API。默认保持普通 React 组件;只有明确需要外部接管、配置、数据、事件或动作时才接入。
## 何时使用
使用场景:
- 需要与 Axure 原型交互。
- 需要配置面板。
- 需要接收外部数据源。
- 需要触发事件或响应动作。
- 需要向外暴露变量。
不使用场景:
- 纯展示型页面。
- 不需要外部交互的普通原型。
- 标准 React 组件即可满足需求。
## 组件结构
```typescript
import React, { forwardRef, useImperativeHandle } from 'react';
import type { AxureHandle, AxureProps } from '../../common/axure-types';
const Component = forwardRef(function MyComponent(
innerProps: AxureProps,
ref: React.ForwardedRef<AxureHandle>,
) {
useImperativeHandle(ref, function () {
return {
getVar: function (name: string) {
return undefined;
},
fireAction: function (name: string, params?: string) {
return undefined;
},
eventList: EVENT_LIST,
actionList: ACTION_LIST,
varList: VAR_LIST,
configList: CONFIG_LIST,
dataList: DATA_LIST,
};
}, []);
return <div />;
});
export default Component;
```
## Props 处理
```typescript
const dataSource = innerProps && innerProps.data ? innerProps.data : {};
const configSource = innerProps && innerProps.config ? innerProps.config : {};
const onEventHandler = typeof innerProps.onEvent === 'function'
? innerProps.onEvent
: function () { return undefined; };
const title = typeof configSource.title === 'string' && configSource.title
? configSource.title
: '默认标题';
```
避免用 `||` 覆盖合法的空值、`0``false`
## 事件
事件 payload 必须是字符串。复杂数据使用 `JSON.stringify()`
```typescript
import type { EventItem } from '../../common/axure-types';
const EVENT_LIST: EventItem[] = [
{ name: 'onClick', desc: '点击按钮时触发' },
{ name: 'onChange', desc: '值改变时触发payload 为 JSON 字符串' },
];
function emitEvent(eventName: string, payload?: string) {
try {
onEventHandler(eventName, payload);
} catch (error) {
console.warn('事件触发失败:', eventName, error);
}
}
```
## 动作
动作 `params` 必须是字符串。复杂参数使用 JSON 字符串,并在 `desc` 中说明格式。
```typescript
import type { Action } from '../../common/axure-types';
const ACTION_LIST: Action[] = [
{ name: 'reset', desc: '重置到初始状态' },
{ name: 'setValue', desc: '设置值参数格式JSON 字符串 {"value":"新值"}', params: 'JSON string' },
];
function fireActionHandler(name: string, params?: string) {
switch (name) {
case 'reset':
break;
case 'setValue':
if (!params) return;
try {
const parsed = JSON.parse(params);
console.log(parsed.value);
} catch (error) {
console.warn('参数解析失败:', error);
}
break;
default:
console.warn('未知动作:', name);
}
}
```
## 变量
变量名使用 snake_case。
```typescript
import type { KeyDesc } from '../../common/axure-types';
const VAR_LIST: KeyDesc[] = [
{ name: 'value', desc: '当前值' },
{ name: 'is_valid', desc: '是否有效' },
];
```
`getVar(name)` 返回值必须与 `VAR_LIST` 中的命名一致。
## 配置项
```typescript
import type { ConfigItem } from '../../common/axure-types';
const CONFIG_LIST: ConfigItem[] = [
{
type: 'input',
attributeId: 'title',
displayName: '标题',
info: '组件顶部显示的标题文本',
initialValue: '默认标题',
},
{
type: 'switch',
attributeId: 'disabled',
displayName: '禁用',
info: '是否禁用组件',
initialValue: false,
},
];
```
常见类型包括 `input``inputNumber``switch``select``color`。更多类型参考 `src/common/config-panel-types.ts`
## 数据项
```typescript
import type { DataDesc } from '../../common/axure-types';
const DATA_LIST: DataDesc[] = [
{
name: 'users',
desc: '用户列表',
keys: [
{ name: 'id', desc: '用户唯一标识' },
{ name: 'name', desc: '用户姓名' },
],
},
];
```
## 自检
- `eventList` / `actionList` / `varList` / `configList` / `dataList` 与实际实现一致。
- 事件 payload 和动作 params 都是字符串。
- 变量名使用 snake_case。
- 仅在明确需要 Axure API 时引入 `forwardRef``useImperativeHandle`

View File

@@ -0,0 +1,74 @@
# Axure 导出修复规则
用于“导出到 Axure”前的代码检查失败场景处理规范问题、补齐 `@mode axure`,并让目标文件通过当前检测链路。
## 适用场景
- 用户在导出到 Axure 前触发 code-review 失败。
- 需要快速修复当前导出检测错误。
- 需要补齐 Axure 模式头注释。
## 目标
1. 优先修复 `error`,再评估 `warning`
2. 不改变现有业务功能、交互和视觉表现。
3. 让目标文件通过当前导出前检查。
## 固定流程
### 1. 锁定修改范围
- 只修改报错目标文件,通常是 `src/prototypes/<name>/index.tsx`
- 不主动重构无关代码。
- 不处理 Figma 等第三方导出链路。
### 2. 按优先级修复检查项
- `error` 必须修复。
- `warning` 尽量修复;无法安全修复时在交付说明中说明。
- 每项改动都保持原有行为一致。
### 3. 补齐头部注释
用于 Axure 导出的文件头建议包含:
- `@name`
- `@mode axure`
- `rules/axure-export-workflow.md`
- `rules/prototype-development-guide.md`
- `rules/axure-api-guide.md`(需要 Axure API 时)
模板:
```typescript
/**
* @name 组件或页面名称
* @mode axure
*
* 参考资料:
* - /rules/axure-export-workflow.md
* - /rules/prototype-development-guide.md
* - /rules/axure-api-guide.md
*/
```
导出组件名必须满足当前检测要求Axure 导出模式下默认使用 `Component``export default Component`
### 4. Axure API 处理策略
- Axure API 是可选项。
- 不为了“通过导出检测”强行引入 `forwardRef<AxureHandle, AxureProps>`
- 只有明确需要配置面板、外部数据源、事件回调或动作触发时,才按 `rules/axure-api-guide.md` 集成。
### 5. 交付前自检
- 全部阻断错误已修复。
- warning 已评估并尽量处理。
- 文件头包含 `@mode axure` 和相关 rules 路径。
- 默认导出符合当前导出检查逻辑。
## 非目标
- 不扩展到 Figma 或其他导出链路。
- 不修改构建插件和检查规则策略。
- 不进行大规模样式重写或架构重构。

View File

@@ -0,0 +1,109 @@
# 原型开发与验收指南
用于 `src/prototypes/<name>/` 下的原型实现、局部修改、多页面组织和预览验收。主题创建、派生和主题页验收优先看 `rules/theme-guide.md`
开发流程:
```text
读取已确认需求和设计决策 -> 修改原型目录内代码 -> 运行验收脚本 -> 按错误信息修复 -> 重新验收
```
## 实现边界
- 一个原型目录就是主要隔离边界,页面组件、样式和素材优先留在对应原型目录内。
- 不为单个原型随意修改 `src/common/`、全局主题或共享工具。
- 多步骤或高风险修改先拆成短任务,逐项处理并维护当前状态。
- 一次只处理一个明确问题;遇到构建、运行或验收失败,先定位原因再继续。
- 完成后必须通过预览验收;纯视觉、文案、布局和素材调整不要求测试驱动。
## 文件结构与命名
```text
src/prototypes/<name>/
├── index.tsx # 必需
├── style.css # 可选
├── components/ # 可选:原型内部共享组件
├── pages/ # 可选:多页面原型页面组件
└── assets/ # 可选:原型专属素材
```
- 原型入口文件必须是 `index.tsx`
- 原型目录名使用小写字母、数字、连字符,如 `order-review`
- 当目录名为 `untitled``untitled-*` 或显示名为「未命名」时,开始生成实际内容前应更新为有意义的目录名和 `@name`
- 本项目当前不产出独立 `components` 资源;原型内部组件放在对应原型目录下的 `components/`
每个原型的 `index.tsx` 顶部建议包含面向用户的中文 `@name`,用于预览列表展示名:
```typescript
/**
* @name 评审工作台
*/
```
## 多页面原型
单个原型可以包含多个页面,通过 URL hash 参数 `#page=<pageId>` 定位:
```text
/prototypes/express-app/#page=home
/prototypes/express-app/#page=detail
```
多页面仍属于同一个原型目录;页面组件放在原型内部的 `pages/`,跨页面共享组件放在原型内部的 `components/`
使用公共 hook `src/common/useHashPage.ts`
```typescript
import { useHashPage } from '../../common/useHashPage';
export default function MyApp() {
const { page, setPage } = useHashPage('home');
// page === 'home' | 'detail' | ...
}
```
- `pageId` 命名使用小写字母、数字、连字符。
- 不带 `#page=` 时自动使用 `defaultPage`
- 此路由完全在原型内部,不影响构建。
参考实现:`src/prototypes/ref-app-home/index.tsx`
## 依赖与样式
- React 与 Hooks 直接从 `react` 导入。
- 第三方库按需导入,新增依赖必须同步更新 `package.json`
- 使用 Tailwind CSS V4 时,入口样式文件需包含:
```css
@import "tailwindcss";
```
- 使用主题 CSS Variables 时,按所选 `DESIGN.md` 和主题规则引入,不复制另一套 token。
## 验收流程
运行原型验收脚本:
```bash
node scripts/check-app-ready.mjs /prototypes/[原型目录]
```
关键返回字段:
- `status`: `READY` / `ERROR` / `TIMEOUT`
- `targetUrl`: 本次验收目标地址。
- `errors`: 构建、运行时或页面加载错误列表。
错误处理:
- `ERROR`:按 `errors` 修复后重新执行验收脚本,直到通过。
- `TIMEOUT`:优先排查 dev server 启动、端口、长任务和运行时阻塞。
- 修复时先处理构建、启动和运行时报错,再处理交互与视觉问题;一次只修一个明确问题,修完重新验收。
## 最小清单
- [ ] `index.tsx` 完整存在。
- [ ] `index.tsx` 顶部有清晰的 `@name`
- [ ] 占位原型已更新为有意义的目录名和显示名。
- [ ] 新增依赖已写入 `package.json`
- [ ] `check-app-ready.mjs` 原型验收通过。

View File

@@ -0,0 +1,151 @@
# 原型 Review 指导
用于审查 Axhub Make client 原型的业务完整性、项目对齐、逻辑连贯性、数据一致性、状态、异常、边界条件和恢复路径。
本规则关注“这个原型表达的业务是否成立”。视觉美观、品牌一致性、响应式和可访问性问题按 `rules/ui-review-guide.md` 处理。
## 审查入口
当用户说「原型评审」「需求评审」「业务逻辑评审」「看看缺漏」「检查状态和错误处理」「帮我从业务角度挑问题」时,读取本规则并输出 Markdown 评审结论。
不要输出 JSON不要写 JSON 文件。
## 审查依据
审查依据按以下优先级使用:
1. 用户当前说明、附件、链接、截图、需求文档、PRD、会议纪要、业务规则、字段表、数据样例等用户提供的信息源。用户提供的信息源权重最高。
2. `src/prototypes/<prototype-id>/.spec/` 中最近的决策、规格或计划 Markdown。排除 `ui-review.md``prototype-review.md` 和其他 review 结果。
3. `src/resources/` 中与当前原型相关的需求、业务资料、字段清单、流程记录和数据样例。
4. 当前原型源码、`canvas.excalidraw``annotation-source.json`、路由、页面配置和局部状态实现。
5. `.axhub/make/project.json` 等 metadata 只作为项目资源、入口和命名关系证据。
如果用户提供的信息源与 `.spec``src/resources/` 或原型实现冲突,以用户提供的信息源为准,并在评审中标记为「资料冲突/待确认」。不要用项目旧文件覆盖用户最新资料。
## 明确不审
- 不评价视觉美观、品牌一致性、响应式布局、可访问性细节或是否符合 `DESIGN.md`
- 不把配色、圆角、间距、字体、图标风格作为原型 Review 问题。
- 只有当 UI 缺失直接导致业务状态、错误、流程或字段无法表达时,才作为业务完整性问题记录。
## 推荐审查流程
1. **确定目标**
- 原型:`src/prototypes/<prototype-id>/`
- 原型内页面:保留 `pageId`
- 目标不清时,先问用户确认
2. **读取资料**
- 先读取用户本轮提供的信息源
- 再读取当前原型 `.spec` 中最新决策
- 再读取相关 `src/resources/` 资料
- 最后读取原型源码、画布和 metadata
3. **建立业务基线**
- 确认核心用户、业务目标、主流程、关键对象和成功标准
- 记录明确范围和不做范围
- 标记资料冲突、缺失资料和需要用户确认的问题
4. **审查完整性和连贯性**
- 检查主流程入口、出口、成功路径和必要分支
- 检查空、加载、成功、失败、权限不足、无数据、部分成功等状态
- 检查数据模型、字段名称、枚举值、状态值和业务口径是否一致
5. **审查边界和恢复**
- 输入校验、范围上下限、空值、重复值、非法格式
- 网络、系统、权限、资源不存在、会话过期、外部集成失败
- 重复点击、并发编辑、数据过期、跨页面返回、流程中断
- 每个重要错误都要有恢复路径,而不只是报错
6. **写入 `.spec`**
- 原型级:`src/prototypes/<prototype-id>/.spec/prototype-review.md`
- 页面级如后续需要:`src/prototypes/<prototype-id>/.spec/<page-id>/prototype-review.md`
## 核心审查维度
- **原型完整性**:核心用户、主流程、入口、出口、空/加载/成功/失败状态是否覆盖。
- **项目上下文一致性**:是否与用户资料、最新 `.spec` 决策、资源文档、项目 metadata、已有原型命名和范围一致。
- **业务逻辑连贯性**:流程顺序、状态迁移、角色权限、操作前置条件、数据生命周期是否自洽。
- **数据模型一致性**:实体、字段名、枚举、状态值、单位、时间/金额/数量口径是否在用户资料、资源、规格和原型中一致。
- **Edge cases**:输入校验、边界条件、系统/网络失败、权限失败、并发/重复操作、集成失败、恢复路径。
## Markdown 模板
```markdown
# Prototype Review
- 审查目标src/prototypes/<prototype-id>
- 用户资料/参考资料:列出本次使用的用户资料、.spec、resources、源码或 metadata
- 生成时间2026-05-22 00:00
## 总体点评
用 1-3 段总结原型在业务完整性、项目对齐、逻辑连贯性和风险覆盖上的整体质量。先说最影响业务成立的问题,再说可以保留的有效表达。
## P0-P3 优先级问题
### P1 - Finding title
- 证据:说明来自用户资料、.spec、resources、源码、画布或 metadata 的具体线索。
- 影响:说明对业务流程、数据口径、用户任务、状态理解或后续实现/测试的影响。
- 修复方向:给出可执行的需求、原型或资料补充建议。
## 完整性与项目对齐
说明核心用户、主流程、入口出口、范围边界、资料冲突、最新决策和项目资源是否对齐。
## 业务逻辑连贯性
说明流程顺序、状态迁移、角色权限、操作前置条件、数据生命周期和跨页面一致性。
## 状态、异常、边界与恢复
按输入校验、边界条件、错误状态、并发/重复操作、集成失败和恢复路径整理发现。没有明显问题时也要说明已检查。
## 证据与评估说明
- 用户资料优先级:说明是否存在用户资料,以及是否与项目内资料冲突。
- 读取范围:说明读取了哪些 .spec、resources、源码、画布或 metadata。
- 独立评估full 或 degraded并说明原因。
```
## 分组要求
前三组固定且顺序不可变:
1. `总体点评`
2. `P0-P3 优先级问题`,最多 5 条
3. `完整性与项目对齐`
可以追加额外分组,例如 `业务逻辑连贯性``状态、异常、边界与恢复``证据与评估说明`,但必须放在前三组之后。
## 优先级
- `P0`:核心业务流程无法成立,或与用户提供的明确需求/最新决策冲突。
- `P1`:主要流程、关键状态、权限或数据口径存在严重缺漏。
- `P2`:明显业务摩擦或边界缺失,但存在可用绕行。
- `P3`:低风险补充项,后续完善后会提升业务表达或测试覆盖。
不要使用 `P4` 或更低优先级。
## 子代理与独立评估
有子代理能力时,优先拆成两个独立评估:
- 业务完整性评估:只看用户资料、`.spec``src/resources/` 和 metadata先判断业务基线。
- 原型证据评估:看源码、画布、路由、状态和页面实现,判断原型是否表达了业务基线。
两个评估完成前不要互相暴露结论。没有子代理时,先完成业务完整性笔记,再看原型证据,并在 `证据与评估说明` 中标记独立评估为 `degraded`
当审查 3 个以上独立页面或业务流程时,优先按流程或页面拆分并行审查,最后统一综合成 `.spec/prototype-review.md`
## 交付说明
最终回复至少包含:
- 审查目标
- 写入的 `.spec/prototype-review.md` 路径
- 使用的用户资料和项目资料
- P0-P3 数量
- 是否发现资料冲突/待确认项
- 独立评估是否完整

View File

@@ -0,0 +1,109 @@
# 需求与设计对齐指南
用于新建或明显更新原型、主题、项目文档等资源时,先收敛产品需求,再确认设计方案。对齐贯穿全过程:读取资料、生成规格、计划实施和验收时,只要发现会改变方向、范围、成本或验收标准的问题,都应回到相应阶段继续确认。
核心流程:
```text
读取上下文 -> 产品需求对齐 -> 产品需求确认 -> DESIGN.md 候选确认 -> 设计方案对齐 -> 设计决策确认 -> 规格/计划 -> 实施验证
```
## 何时触发
- 新建原型页面、主题或项目文档。
- 明显重构信息架构、核心交互、页面流程或视觉方向。
- 用户需求模糊,例如只说“生成一个健身 APP”。
- 存在多种合理功能范围、布局方式、交互路径、内容组织或视觉方案。
- 用户明确要求先看方向、先出方案、先写规格或先出计划。
- 资料、主题、现有原型或资源目录之间有冲突,且会改变产出方向。
局部文案、样式、素材替换、明确 bug 修复等不改变产品范围、信息架构和视觉骨架的任务,可以跳过正式对齐;但仍要记录采用的假设,并在发现关键缺口时回到对齐流程。
## 上下文读取
提问前先读取可获得的信息,不把项目里能找到的问题抛给用户。
优先级:
1. 用户当前消息、附件、截图、链接和已给出的约束。
2. 当前目录最近的 `AGENTS.md``README.md` 和相关 `rules/`
3. 关联原型:目录结构、入口文件、必要样式和已有交互。
4. 资源目录:只做目录级扫描,了解已有原型、主题、文档和资产。
5. 相关文件:只读取会影响本次判断的文件,不批量展开无关文件。
重点看:
- `src/prototypes/`:是否已有同类原型、参考页或可复用页面结构。
- `src/themes/`:是否已有相近主题或设计系统。
- `src/resources/`:是否已有业务说明、字段、流程资料或素材。
- 原型内 `assets/``canvas-assets/`:是否有用户提供或历史沉淀的素材。
## 产品需求对齐
产品需求阶段负责回答“做什么”,方向应以收敛为主。通常需要明确:
- 目标用户和核心任务。
- 本次范围、功能清单和不做什么。
- 页面或资源的核心内容、数据来源和素材来源。
- 关键状态、核心路径和必要交互。
- 用户最终如何判断结果可用。
只问会影响范围、成本或验收的问题。能从上下文推断的内容直接记为假设继续;如果缺失信息会导致不同功能范围、不同页面结构或不同验收标准,必须先问。
## 设计方案对齐
设计方案阶段负责回答“怎么表达”。进入视觉、主题或明显 UI 改版前,必须先让用户确认一个 `DESIGN.md` 作为设计基底:
1. 如果用户已指定 `DESIGN.md` 或主题,直接采用。
2. 如果用户未指定,先从项目默认主题、已有同类原型和 `src/themes/` 中整理 3-4 个最匹配候选,让用户选择。
3. 候选说明只写适用理由、主要风格、取舍和预览链接,不替用户决定最终基底。
4. 不自行新建 `DESIGN.md`;没有合适候选时,停止并请用户提供设计基底或主题方向。
整理候选时优先读取主题 `theme.json`,用 `tags.*``display.distributionTags``identity.title*/description*``display.variant` 做检索与候选说明;用 `identity.slug``assets.designMd.path` 校验目录与 `DESIGN.md` 路径。
候选必须提供可打开的主题预览链接。优先使用资源 metadata 里的 `clientUrl` / `previewUrl`;没有时使用 `/themes/<theme-slug>`。同时标出对应 `DESIGN.md` 路径,便于用户核对。
`DESIGN.md` 确定后,用户零散提出的颜色、字体、布局、动效、组件形态等需求,都作为基于该设计基底的调整处理,不另起一套视觉系统。
新建页面、大面积 UI 改版或模糊需求,设计阶段至少覆盖 5 个设计问题或设计决策变量;局部微调、明确 bug 修复或用户已给出完整设计约束时不受此下限限制。
常见设计问题包括:
- 首屏目标:主操作、信息概览、品牌表达或引导转化。
- 信息层级:哪些内容必须突出,哪些可以折叠或延后。
- 布局模式:看板、列表详情、仪表盘、向导、沉浸页或多步骤流程。
- 交互路径:高频用户效率优先,还是首次用户理解优先。
- 数据呈现:真实数据、文档推断、临时示例数据或空状态优先。
- 视觉语气:严格继承 `DESIGN.md`,还是在其基础上加强某种风格倾向。
落地时优先复用所选 `DESIGN.md` 对应的 CSS Variables、tokens 和组件习惯;缺少 token 时贴近所选基底的视觉语言,并在方案或交付说明中写明假设。
## 提问规则
- 先读上下文,能推断就不问。
- 默认一次只问一个决策点;同一主题下强相关的 2-3 个参数可以合并为一问。
- 尽量给出 2-3 个互斥选项,并标出推荐答案。
- 推荐答案要说明取舍,不只表达偏好。
- 不为了补齐形式追问已能从上下文判断的问题。
- 用户回答后继续收敛;如果出现新分支,再追加提问。
## 确认与记录
进入实现前必须让用户确认产品需求和设计方案。确认产物可以是中文规格文档、执行计划或方案摘要,但至少包含:
- 产品需求:目标用户、核心任务、范围、功能清单、内容/数据来源、验收重点。
- 设计方案:采用的 `DESIGN.md`、整体设计方向、关键设计决策、设计假设。
- 实施边界:本轮会做什么,不会做什么。
确认过的方案或规格需要归档为当时决策快照;未确认的不归档。
- 保存位置:原型相关内容保存到 `src/prototypes/<prototype-name>/.spec/`
- 文件命名:文件名必须包含日期,建议使用 `YYYY-MM-DD-<topic>.md`
- 归档内容:只记录已确认的需求问题、设计问题、用户选择和最终设计决策。
- 归档性质:只表示当下决策,不要求跟随后续实现继续同步变化。
触发过对齐时,本轮交付说明或确认产物中只需补充:
- 问题。
- 用户选择。
- 最终设计决策。

View File

@@ -0,0 +1,11 @@
# 资源指南
`src/resources/` 用于存放项目资料、需求说明和原型讨论中需要长期保留的上下文,方便后续生成、修改和复盘原型时读取。
常见内容包括:
- Markdown 文档,如需求说明、页面说明、调研记录、会议纪要
- 数据样例,如 JSON、CSV、TSV、表格导出文件
- 设计或业务附件,如 PDF、Office 文档、压缩包等
图片、截图、参考图等素材只在需要长期保留为项目资料时放入 `src/resources/`。原型页面素材、主题素材和画布截图按对应规则放到原型、主题或画布目录内。

148
rules/theme-guide.md Normal file
View File

@@ -0,0 +1,148 @@
# 主题创建与验收指南
本文档约束 `make-client` 中主题资源的创建、更新、派生与验收。主题只面向当前标准结构。
## 核心原则
- `DESIGN.md` 是主题事实源:品牌定位、设计原则、色彩、字体、圆角、间距、边框、阴影、组件规则和禁用做法,均优先按它判断。
- `theme.json` 是运行时与管理端消费的结构化摘要;`assets/tokens.json` 是轻量 token 快照;`style.css` 是演示页可见样式。三者必须与 `DESIGN.md` 保持一致。
- 用户当前消息或附件的优先级高于已有文件;若用户要求与 `DESIGN.md` 冲突,先更新 `DESIGN.md`,再同步派生文件。
- 不根据截图、元数据或自动推断结果覆盖明确写在 `DESIGN.md` 中的规则;只能在 `DESIGN.md` 缺失信息时补充合理假设,并在文档或交付说明中写清楚。
- 主题代码、CSS 和 `theme.json` 中的本地资源引用必须使用主题内相对路径,禁止根路径、本机绝对路径或 `../` 逃逸到其他目录。
- 主题演示页不得引入与该主题无关的 UI 库,避免污染视觉表达。
## 标准参考主题
当前标准参考主题是 `src/themes/linear/`。新建或重做主题时,参考它的目录结构、`theme.json` 字段组织、`index.tsx` 接入方式和预览资源引用方式。
参考范围:
- `index.tsx`:引入 `./style.css`、读取 `./theme.json`、将 `display` 映射为 `DesignMdBatchShowcase` 配置,并静态 import 本地预览资源。
- `theme.json`:包含 `schemaVersion``source``identity``tags``assets``tokens``previewImages``display`
- `style.css`:以 `@import "tailwindcss";` 开头,在 `.dmb-page` 中写入 `--dmb-*` CSS Variables。
- `assets/`:至少包含 `tokens.json` 和一个稳定预览图,例如 `official-homepage.webp``cover.webp``source-preview.webp`
不要复制参考主题的品牌内容、视觉风格、文案或临时生成注释。新主题必须用自己的 `DESIGN.md` 派生真实 token、展示字段和预览资源。
## 推荐来源与导入路径
用户查找和导入主题时,优先走这两类来源:
- `getdesign.md`:主流 Design.md 主题的优先来源,适合先找品牌主线和标准主题。
- `styles.refero.design`:补缺优先来源,适合找行业、场景、字体、颜色和 token 更丰富的主题。
当前只推荐这两类 active source旧来源不作为默认导入入口。
推荐的导入路径按这个顺序走:
```bash
node scripts/collect-design-md-batch.mjs
node scripts/generate-design-md-theme-pages.mjs
node scripts/review-design-md-theme-pages.mjs
```
对应的本地产物和主题落点分别是:
- `.local/design-md-batch/manifest.json`
- `client/src/themes/<slug>/`
如果用户已经提供了 Design.md 线索、品牌名或详情页链接,就先按上面两类来源定位,再进入采集、生成和复查。
## 标准交付物
每个主题目录使用 `kebab-case` 命名,例如 `stripe``longcipher-design`
```text
src/themes/<theme-key>/
├── DESIGN.md # 必需,主题事实依据
├── theme.json # 必需,结构化主题元数据与展示配置
├── assets/
│ ├── tokens.json # 必需,轻量 token 快照
│ └── ... # 预览图、官网截图、字体、preview.html 等主题私有资源
├── style.css # 必需,主题演示页样式变量
├── tw.css # 必需Tailwind v4 主题片段或最小可用片段
└── index.tsx # 必需,主题演示页入口,必须 export default Component
```
## `DESIGN.md` 编写规范
`DESIGN.md` 应写成可执行的设计规范,而不是氛围描述。信息充分时至少覆盖:
- 主题身份:品牌/产品背景、适用场景、不适用场景、关键词。
- 视觉原则:信息密度、页面气质、品牌表达边界、动效或图片使用原则。
- 色彩系统主色、背景、表面、文本、边框、状态色、CTA 或限制色的使用边界。
- 字体系统display/body/mono 角色、字号层级、字重和 fallback。
- 尺寸系统:间距、圆角、边框、阴影、卡片、表单、按钮、导航、表格等基础组件规则。
- 使用约束:明确的 Do/Don't尤其是禁用的大面积颜色、错误圆角、过度阴影、无关行业布局等。
生成或更新 `DESIGN.md` 时,优先使用用户提供的规范、原始 Design.md、官方设计资料和当前主题已有内容。截图和元数据只能用于补缺不能覆盖明确规则。
## 派生文件规范
`theme.json` 必须承载管理端和演示页需要的结构化信息:
- `identity.slug` 必须与主题目录名一致;`titleZh``descriptionZh` 面向管理端展示。
- `tokens.palette``tokens.typography``tokens.radius``tokens.spacing` 等必须从 `DESIGN.md` 抽取或由用户确认。
- `display.palette``display.typography``display.radius``display.spacing``display.borders``display.shadows``display.usageGuidance` 应服务于演示页展示,并与 `tokens` 同源。
- `assets``previewImages` 只引用当前主题目录内资源,不引用本机绝对路径或其他主题资源。
`assets/tokens.json` 只保存轻量 token 快照:
- 至少包含 `palette``typography`;若 `DESIGN.md` 提供圆角、间距、边框或阴影,也应保留对应字段。
-`theme.json.tokens` 保持一致,不额外发明另一套命名或语义。
`style.css` 用于让演示页真实体现主题:
- 必须 `@import "tailwindcss";`
- 使用 `.dmb-page` 写入 `--dmb-*` CSS Variables包括 accent、link、muted、background、font、radius、spacing、border 等可见变量。
- 变量值必须来自 `DESIGN.md``theme.json.tokens`,不能为了好看临时换色。
`tw.css` 用于保留 Tailwind v4 主题片段:
- 若来源提供 Tailwind/CSS 变量,应尽量原样保留并补齐 `@import "tailwindcss";`
- 若暂无可用内容,可保持最小可用片段,但不得替代 `DESIGN.md` 成为事实源。
## 演示页规范
`index.tsx` 是主题预览入口,必须:
- `export default Component`
- 引入 `./style.css`,读取 `./theme.json`,并把 `display` 配置传入 `DesignMdBatchShowcase`
- 通过静态 import 引入本地预览资源,例如 `./assets/official-homepage.webp?url`
- 展示颜色、字体、圆角、间距、边框/阴影、使用建议和典型场景。
- 不展示内部采集过程、脚本状态、TODO、占位文案或无关营销内容。
可以复用 `DesignMdBatchShowcase` 的结构,但主题内容、标签、色板、使用建议和预览图必须来自当前 `DESIGN.md`
## 更新工作流
1. 先读用户要求、当前主题 `DESIGN.md``theme.json``assets/tokens.json``style.css``tw.css``index.tsx` 和相关资源。
2. 判断冲突:用户明确修改意图优先;否则以 `DESIGN.md` 为准,修正派生文件。
3. 修改事实源:新增或修正设计规则时先改 `DESIGN.md`
4. 同步派生:更新 `theme.json.tokens/display``assets/tokens.json``style.css``tw.css` 和预览资源引用。
5. 检查一致性:主色是否来自 `DESIGN.md`,字体角色是否完整,圆角/间距/边框/阴影是否没有丢失,使用建议是否非泛化。
6. 查找和导入:优先从 `getdesign.md``styles.refero.design` 定位主题,再用 `collect``generate``review` 三个脚本串起导入流程。
7. 验收预览:运行主题 ready 检查并打开目标页面做视觉回归,确认字体、颜色、间距、建议项和预览图都能完整渲染。
输入来源优先级:
1. 用户当前明确要求、附件、截图和链接。
2. 当前主题 `DESIGN.md`
3. 当前主题 `theme.json``assets/tokens.json``style.css``tw.css``index.tsx`
4. 官方设计资料或原始 Design.md 来源。
5. 标准参考主题 `src/themes/linear/` 和同类主题。
## 验收流程
基础检查:
```bash
node scripts/check-app-ready.mjs /themes/[主题名]
```
验收重点:
- `READY` 后访问目标页面,检查预览图、色板、字体、圆角、间距、边框、阴影和使用建议是否与 `DESIGN.md` 一致。
- 若出现 `ERROR`优先修复入口、资源路径、JSON 结构和 CSS 导入。
- 若出现 `TIMEOUT`,排查 dev server、依赖安装、构建缓存或长任务。
- 视觉问题按 `DESIGN.md`、用户要求、`rules/requirements-alignment-guide.md` 的顺序判断,不以自动生成结果为准。

164
rules/ui-review-guide.md Normal file
View File

@@ -0,0 +1,164 @@
# UI Review 指导
用于审查 Axhub Make client 原型页面的 UI 质量、设计一致性、响应式、可访问性和核心元件表现。
## 审查入口
优先使用官方 Impeccable 技能的 critique 流程:
```text
/impeccable critique <target>
```
`<target>` 应明确到原型或页面,例如:
```text
/impeccable critique src/prototypes/beginner-guide
/impeccable critique beginner-guide/install-agent
```
如果用户说「UI review」「审查这个页面」「检查设计质量」「帮我挑一下 UI 问题」,按本规则约束 `/impeccable critique` 的产物,不另起一套审查流程。
## 审查依据
审查依据只允许是一个 `DESIGN.md`
1. 用户明确指定的 `DESIGN.md` 或主题目录下的 `DESIGN.md`
2. 用户未指定时,使用项目默认设计的 `DESIGN.md`
3. 如果没有用户指定或项目默认的 `DESIGN.md`,必须停止,要求用户提供
禁止把以下内容作为审查依据:
- `PRODUCT.md`
- `theme.json`
- `tokens.json`
- CSS 变量文件
- 截图
- README 或其他说明文档
这些文件可以作为证据或实现参考,但不能替代 `DESIGN.md` 的规范地位。
## Impeccable 使用约束
使用 `/impeccable critique` 时,必须在执行前附加或内化以下约束:
```text
Use /impeccable critique as the review method, but follow Axhub rules:
1. Use only the selected DESIGN.md as the design basis.
2. Ignore PRODUCT.md and all other design files as normative criteria.
3. If no DESIGN.md is available, stop and ask for one.
4. Do not write .impeccable critique artifacts as the deliverable.
5. Produce a Markdown report, not JSON.
6. Write the result to the target prototype .spec directory.
7. Include sections in order: 总体点评, P0-P3 优先级问题, 核心元件.
8. Priorities must contain at most 5 P0-P3 findings.
```
如果 Impeccable 的原始流程要求 `PRODUCT.md``.impeccable/critique` 或额外上下文,与本规则冲突时,以本规则为准。
## 推荐审查流程
1. **确定目标**
- 原型:`src/prototypes/<prototype-id>/`
- 原型内页面:保留 `pageId`
- 目标不清时,先问用户确认
2. **确定 DESIGN.md**
- 用户指定主题时,读取 `src/themes/<theme-id>/DESIGN.md`
- 用户指定路径时,只读取该 `DESIGN.md`
- 未指定且项目默认不存在时,停止
3. **执行 Impeccable critique**
- 读取目标源码和本地样式
- 有预览环境时检查桌面和移动端
- 可用浏览器时保留截图证据
- 允许使用 Impeccable detector 作为辅助证据,但不要让 detector 输出先污染设计判断
4. **综合结论**
- 不直接拼接 Impeccable 原报告
- 按 Axhub Markdown 模板重组
- P0-P3 问题最多 5 条
- 必须包含核心元件或关键 UI 区块点评
5. **写入 `.spec`**
- 原型级:`src/prototypes/<prototype-id>/.spec/ui-review.md`
- 页面级如后续需要:`src/prototypes/<prototype-id>/.spec/<page-id>/ui-review.md`
## Markdown 模板
```markdown
# UI Review
- 审查目标src/prototypes/<prototype-id>
- 使用设计依据src/themes/<theme-id>/DESIGN.md
- 生成时间2026-05-22 00:00
## 总体点评
用 1-3 段总结整体设计质量、与 DESIGN.md 的一致性、主要风险和最值得保留的亮点。
## P0-P3 优先级问题
### P1 - Finding title
- 证据:说明出现位置、截图/预览观察或源码线索。
- 影响:说明对用户任务、理解、可访问性或品牌一致性的影响。
- 修复方向:给出可执行的设计或实现建议。
## 核心元件
### Hero / Header / Form / Navigation
按关键 UI 区块点评是否符合 DESIGN.md指出保留点和调整点。
## 响应式与可访问性
记录桌面/移动端差异、键盘/语义/对比度等发现。没有明显问题时也要说明已检查。
## 证据与评估说明
- 浏览器/截图:说明是否使用。
- Scanner说明是否使用。
- 独立评估full 或 degraded并说明原因。
```
## 分组要求
前三组固定且顺序不可变:
1. `总体点评`
2. `P0-P3 优先级问题`,最多 5 条
3. `核心元件`
可以追加额外分组,例如 `响应式与可访问性``证据与评估说明`,但必须放在前三组之后。
## 优先级
- `P0`:阻断核心任务完成,或违反 `DESIGN.md` 中强制规则
- `P1`:显著增加用户完成任务的难度,或造成 WCAG AA 级别可访问性问题
- `P2`:明显体验摩擦,但存在可用绕行
- `P3`:低影响 polish修复后更好但不影响主要任务
不要使用 `P4` 或更低优先级。
## 子代理与独立评估
有子代理能力时,优先拆成两个独立评估:
- 设计评估:只看目标、`DESIGN.md`、截图/预览和源码
- 证据评估:看 scanner、响应式、可访问性和实现风险
两个评估完成前不要互相暴露结论。没有子代理时,先完成设计评估笔记,再看 scanner/证据,并在 `证据与评估说明` 中标记独立评估为 `degraded`
当审查 3 个以上独立页面或组件时,优先按目标拆分并行审查,最后统一综合成 `.spec/ui-review.md`
## 交付说明
最终回复至少包含:
- 审查目标
- 使用的 `DESIGN.md`
- 写入的 `.spec/ui-review.md` 路径
- P0-P3 数量
- 是否使用浏览器/截图/scanner
- 独立评估是否完整

View File

@@ -0,0 +1,113 @@
# V0 项目转换规则
用于将 V0 生成的 Next.js 项目转换为本项目原型页面,保持视觉和功能,并符合 `rules/prototype-development-guide.md`
## 目标
- 保持页面视觉一致性。
- 移除 Next.js 特有实现。
- 产出可在 `src/prototypes/<name>/` 中运行的 React 页面。
## 预处理
```bash
node scripts/v0-converter.mjs <v0-project-dir> [output-name]
```
脚本位于客户端项目 `scripts/` 目录。它会复制项目、分析路径别名和依赖,并生成任务文档与分析 JSON。脚本不直接修改业务代码。
## 默认页面格式
默认转换为普通 React 页面。只有明确需要 Axhub / Axure 接管时才接入 Axure API。
```typescript
/**
* @name 页面名称
*
* 参考资料:
* - /rules/prototype-development-guide.md
*/
import './style.css';
import React from 'react';
export default function PageName() {
return (
<div />
);
}
```
需要 Axure API 时,再参考 `rules/axure-api-guide.md`
## 移除 Next.js 代码
移除或替换:
- `"use client"`:删除。
- `next/navigation`:删除或改为组件内状态/普通链接。
- `next/image`:改为 `<img>`
- `next/link`:改为 `<a>`
- `Metadata``@vercel/*`:删除。
## 路径别名
`@/` 转换为相对路径:
```typescript
// V0
import { cn } from "@/lib/utils";
// 转换后
import { cn } from "../lib/utils";
```
以脚本生成的分析表为准逐项检查。
## 样式
`style.css` 以 Tailwind V4 入口开头:
```css
@import "tailwindcss";
```
随后合并源项目全局样式文件、主题变量和自定义样式。
## 依赖
排除:
- `next``next-*`
- `@vercel/*`
- `react``react-dom`
保留并按需安装:
- `class-variance-authority`
- `clsx`
- `tailwind-merge`
- `@radix-ui/*`
- `lucide-react`
- `recharts`
- `date-fns`
新增依赖优先使用 npm便于生成项目在没有 pnpm 的用户环境中继续运行:
```bash
npm install <package-name>
```
## 验收
```bash
node scripts/check-app-ready.mjs /prototypes/[页面名]
```
要求:
- 状态为 `READY`
- 页面正常渲染。
- 无控制台错误。
- 关键交互正常。
- 样式显示正确。