Loading...
Loading...
Develop @ant-design/agentic-ui components for AI chat interfaces. Use when creating thought chain visualization, tool call displays, markdown editors, bubble components, workspace panels, or any agentic UI development. Triggers on keywords like bubble, thought chain, tool use, markdown editor, workspace, chat layout, agentic.
npx skill4agent add antdigital-ai/agentic-ui agentic-ui-developmentpnpm install # 安装依赖
pnpm start # 启动文档站点 (http://localhost:8000)
pnpm test # 运行单元测试
pnpm run build # 构建项目# 搜索组件
python .cursor/skills/agentic-ui-development/scripts/search.py "chat bubble"
# 按域搜索
python .cursor/skills/agentic-ui-development/scripts/search.py "chart" --domain plugin
python .cursor/skills/agentic-ui-development/scripts/search.py "scroll" --domain hook
python .cursor/skills/agentic-ui-development/scripts/search.py "color" --domain token
# 获取推荐方案
python .cursor/skills/agentic-ui-development/scripts/search.py "ai assistant" --recommend
# 生成完整设计系统 (推荐)
# -p 是 --project-name 的简写,用于指定项目名称
python .cursor/skills/agentic-ui-development/scripts/search.py "ai chat" --design-system --project-name "My App"
# 持久化设计系统 (Master + Overrides 模式)
python .cursor/skills/agentic-ui-development/scripts/search.py "ai chat" --design-system --persist --project-name "My App" --page "chat"| 触发关键词 | 组件/功能 |
|---|---|
| 对话气泡组件 |
| 思维链可视化 |
| 工具调用展示 |
| Markdown 编辑器 |
| 多模态输入框 |
| 工作区面板 |
| 任务列表 |
| 会话历史 |
| 布局框架 |
| 智能体运行控制 |
| 按钮组件 |
| 动画效果 |
| 国际化 |
┌─────────────────────────────────────────────────────────────────┐
│ 1. USER REQUEST │
│ "创建一个带思维链的 AI 对话气泡" │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 2. DESIGN SYSTEM GENERATION (--design-system) │
│ • BM25 search across 4 domains (component, plugin, hook, │
│ token) │
│ • Apply reasoning rules from reasoning-rules.json │
│ • Generate complete recommendation with anti-patterns │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 3. COMPONENT SEARCH (Multi-domain) │
│ • Component matching (37 components) │
│ • Props API lookup │
│ • Style token recommendations │
│ • Related hooks & utilities │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 4. CODE GENERATION │
│ • Apply component template │
│ • Use design tokens (not hardcoded values) │
│ • Include TypeScript types │
│ • Add proper event handlers │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 5. PRE-DELIVERY CHECKLIST │
│ [ ] Uses Ant Design tokens (no hardcoded colors) │
│ [ ] TypeScript types complete (no `any`) │
│ [ ] Event handlers use `on` prefix │
│ [ ] CSS-in-JS with createStyles │
│ [ ] Tests included (≥80% coverage) │
└─────────────────────────────────────────────────────────────────┘--design-systempython .cursor/skills/agentic-ui-development/scripts/search.py "ai chat assistant" --design-system --project-name "My AI App"# 创建 MASTER.md
python .cursor/skills/agentic-ui-development/scripts/search.py "ai chat" --design-system --persist --project-name "My App"
# 同时创建页面覆盖文件
python .cursor/skills/agentic-ui-development/scripts/search.py "ai chat" --design-system --persist --project-name "My App" --page "chat"design-system/my-app/
├── MASTER.md # 全局设计规则 (Source of Truth)
└── pages/
└── chat.md # 页面特定覆盖规则design-system/<project>/pages/[page].mddesign-system/<project>/MASTER.md| Component | Purpose | Source |
|---|---|---|
| 对话气泡 (AI/User) | |
| 思维链可视化 | |
| 工具调用展示 | |
| 任务状态列表 | |
| 结果状态提示 | |
| 智能体运行控制 | |
| Component | Purpose | Source |
|---|---|---|
| 流式 Markdown 编辑器 | |
| 多模态输入框 | |
| JSON Schema 表单 | |
| Component | Purpose | Source |
|---|---|---|
| 智能体应用布局 | |
| 对话界面布局 | |
| 对话启动页 | |
| 多标签工作台 | |
| Component | Purpose | Source |
|---|---|---|
| 会话历史 | |
| 欢迎引导 | |
| 建议列表 | |
| 加载状态 | |
| 机器人头像 | |
| 渐变文字效果 | |
| 文字动画 | |
| 打字机动画 | |
| 国际化支持 | |
| Component | Purpose | Source |
|---|---|---|
| 图标按钮 | |
| 切换按钮 | |
| 激活按钮 | |
| 操作图标盒 | |
| 操作项容器 | |
| Plugin | Purpose | Source |
|---|---|---|
| 图表渲染 (Chart.js) | |
| 代码高亮 (ACE) | |
| 数学公式 | |
| 图表渲染 | |
| 代码格式化 | |
// 1. Use Ant Design tokens
const useStyles = createStyles(({ token }) => ({
container: {
padding: token.padding, // ✅ Not '16px'
color: token.colorText, // ✅ Not '#000'
borderRadius: token.borderRadius, // ✅ Not '6px'
},
}));
// 2. Complete TypeScript types
interface MyComponentProps {
onSelect?: (item: Item) => void; // ✅ on prefix
config?: MyConfig; // ✅ Config suffix
}
// 3. CSS-in-JS pattern
import { createStyles } from '@ant-design/cssinjs';// 1. Hardcoded values
padding: '16px', // ❌ Use token.padding
color: '#1890ff', // ❌ Use token.colorPrimary
backgroundColor: 'white', // ❌ Use token.colorBgContainer
// 2. Any types
props: any // ❌ Define proper interface
// 3. Inline styles
style={{ padding: 16 }} // ❌ Use createStyles
// 4. Wrong event naming
handleClick // ❌ Use onClickComponentName/
├── components/ # 子组件
├── hooks/ # 自定义 Hook (useXxx.ts)
├── types/ # 类型定义
├── __tests__/ # 测试文件 (ComponentName.test.tsx)
├── index.tsx # 主组件入口
└── style.ts # CSS-in-JS 样式[ ] Uses @ant-design/cssinjs createStyles
[ ] All colors from token system
[ ] TypeScript types complete (no `any`)
[ ] Event handlers with `on` prefix
[ ] BEM class naming (.component__element--modifier)
[ ] Unit tests included
[ ] Proper error boundaries
[ ] Accessibility (aria-* attributes)
[ ] Performance (React.memo, useMemo, useCallback)| Domain | Content | Example Keywords |
|---|---|---|
| 37 个 UI 组件 | bubble, chat, layout, editor, thought, task, workspace |
| 5 个 Markdown 插件 | chart, code, katex, mermaid, formatter |
| 12 个 React Hooks | scroll, size, speech, click, language, intersection |
| 51 个设计令牌 | color, padding, font, border, shadow, motion |
# 基本搜索
python .cursor/skills/agentic-ui-development/scripts/search.py "query"
# 指定域搜索
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --domain component
# 获取推荐方案
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --recommend
# 生成设计系统 (--project-name 可简写为 -p)
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --design-system --project-name "Project"
# 持久化设计系统
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --design-system --persist --project-name "Project" --page "page"
# 输出格式 (--format 可简写为 -f)
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --format json # JSON
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --format markdown # Markdown
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --format ascii # ASCII (default)
# 限制结果数量 (--limit 可简写为 -n)
python .cursor/skills/agentic-ui-development/scripts/search.py "query" --limit 3+------------------------------------------------------------------------------------------+
| TARGET: MY AI APP - AGENTIC UI RECOMMENDATION
+------------------------------------------------------------------------------------------+
|
| QUERY: ai chat assistant
| RULE MATCHED: ai-assistant
|
| RECOMMENDED COMPONENTS:
| Bubble.AIBubble, ThoughtChainList, ToolUseBar, WelcomeMessage
|
| RECOMMENDED HOOKS:
| useAutoScroll, useSpeechSynthesis
|
| RECOMMENDED PLUGINS:
| N/A
|
| KEY TOKENS:
| colorPrimary, colorSuccess, motionDurationMid
|
| STYLE PRIORITY:
| modern, glassmorphism, dark-mode
|
| ANTI-PATTERNS (AVOID):
| ❌ No thought chain for AI
| ❌ Missing streaming support
| ❌ No tool call visibility
|
| PRE-DELIVERY CHECKLIST:
| [ ] Uses @ant-design/cssinjs createStyles
| [ ] All colors from token system
| [ ] TypeScript types complete (no any)
| [ ] Event handlers with 'on' prefix
| [ ] BEM class naming
| [ ] Unit tests included (≥80% coverage)
| [ ] Proper error boundaries
|
+------------------------------------------------------------------------------------------+| File | Content |
|---|---|
| 37 个组件数据 |
| 5 个插件数据 |
| 12 个 Hooks 数据 |
| 51 个设计令牌 |
| 15 条推理规则 |
| Token | Description |
|---|---|
| 主色 |
| 成功色 |
| 警告色 |
| 错误色 |
| 主文本 |
| 次要文本 |
| 容器背景 |
| 边框色 |
| Token | Value |
|---|---|
| 8px |
| 12px |
| 16px |
| 24px |
const useStyles = createStyles(({ token }) => ({
container: {
padding: token.padding, // DO: token
color: token.colorText, // DO: token
// padding: '16px', // DON'T: hardcode
},
}));| Plugin | Purpose | Usage |
|---|---|---|
| 图表渲染 | |
| 代码高亮 | |
| 数学公式 | |
| 图表渲染 | |
<MarkdownEditor plugins={['code', 'katex', 'mermaid', 'chart']} />import { Bubble } from '@ant-design/agentic-ui';
<Bubble.AIBubble
content="分析完成"
thoughtChain={[
{ type: 'thought', content: '分析需求' },
{ type: 'action', content: '执行查询' },
]}
status="success"
streaming={true}
/>
<Bubble.UserBubble content="请分析数据" avatar={{ src: '/avatar.png' }} />import { ThoughtChainList } from '@ant-design/agentic-ui';
<ThoughtChainList
items={[
{ type: 'thought', title: '分析', status: 'completed' },
{ type: 'action', title: '执行', status: 'loading', costMillis: 234 },
]}
collapsed={false}
onToggle={(collapsed) => {}}
/>import { ToolUseBar } from '@ant-design/agentic-ui';
<ToolUseBar
name="搜索工具"
status="success"
params={{ query: 'React' }}
result={{ items: [...], count: 10 }}
costMillis={1234}
/>import { MarkdownEditor } from '@ant-design/agentic-ui';
<MarkdownEditor
value={markdown}
onChange={setMarkdown}
plugins={['code', 'katex', 'mermaid']}
toolbar={{ bold: true, italic: true, code: true }}
/>import Workspace from '@ant-design/agentic-ui';
<Workspace
activeKey="file"
tabs={[
{ key: 'browser', title: '浏览器', content: <BrowserPreview /> },
{ key: 'file', title: '文件', content: <FileViewer /> },
]}
onTabChange={(key) => {}}
/>import React from 'react';
import { createStyles } from '@ant-design/cssinjs';
export interface {{ComponentName}}Props {
className?: string;
children?: React.ReactNode;
onSelect?: (value: string) => void;
}
const useStyles = createStyles(({ token }) => ({
container: {
padding: token.padding,
backgroundColor: token.colorBgContainer,
borderRadius: token.borderRadius,
},
}));
export const {{ComponentName}}: React.FC<{{ComponentName}}Props> = ({
className, children, onSelect,
}) => {
const { styles, cx } = useStyles();
return <div className={cx(styles.container, className)}>{children}</div>;
};import { useState, useCallback } from 'react';
export const use{{HookName}} = (defaultValue = '') => {
const [value, setValue] = useState(defaultValue);
const reset = useCallback(() => setValue(defaultValue), [defaultValue]);
return { value, setValue, reset };
};import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { describe, it, expect, vi } from 'vitest';
describe('{{ComponentName}}', () => {
it('should render', () => {
render(<{{ComponentName}} />);
expect(screen.getByRole('button')).toBeInTheDocument();
});
it('should handle click', async () => {
const onClick = vi.fn();
render(<{{ComponentName}} onClick={onClick} />);
await userEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalledTimes(1);
});
});pnpm test # 单元测试
pnpm test:coverage # 带覆盖率 (>=80%)
pnpm test:e2e # E2E 测试<type>(<scope>): <description>
Types: feat | fix | docs | style | refactor | perf | test | chore
Scopes: bubble | editor | workspace | history | plugin | corefeat(bubble): add streaming text animationfix(editor): resolve cursor position issuetest(thought-chain): add unit tests for ToolCall