LobeHub Interactive Prototype
lobehub/lobehub
Builds single-file interactive HTML prototypes rendered with the real LobeHub UI components and written as production-style React, so they can later be split into files.
专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Ant Design X 标准格式. An agent skill from kqcoxn/MaaPipelineEditor.
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-provider --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .claude/skills/x-chat-provider && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .claude/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-providerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-provider --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .agents/skills/x-chat-provider && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .agents/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-provider --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .cursor/skills/x-chat-provider && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .cursor/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kqcoxn/MaaPipelineEditor.git --path .agents/skills/ant-design-x/skills/x-chat-provider--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-provider --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .gemini/skills/x-chat-provider && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .gemini/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-providerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .github/skills/x-chat-provider && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .github/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kqcoxn/MaaPipelineEditor x-chat-provider --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kqcoxn/MaaPipelineEditor.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/ant-design-x/skills/x-chat-provider .opencode/skills/x-chat-provider && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "x-chat-provider" agent skill from https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/ant-design-x/skills/x-chat-provider into .opencode/skills/x-chat-provider/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-chat-provider", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
x-chat-provider专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Ant Design X 标准格式. An agent skill from kqcoxn/MaaPipelineEditor.
X Chat Provider is an agent skill from kqcoxn/MaaPipelineEditor. 专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Ant Design X 标准格式
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `reference/EXAMPLES.md`).
It works with Ant Design. The repository describes itself as: ✨ 可视化构建 MaaFramework Pipeline 的下一代工作流 审阅&编辑&调试 工具,你的工程师牛牛! ✨. The licence is MIT.
Read from SKILL.md and the folder at commit bbfe0d0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
tscFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.deepseek.comAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
X Chat Provider loads about 3.1k tokens when it runs. Until then it costs about 18 tokens; SKILL.md has 287 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kqcoxn/MaaPipelineEditor at commit bbfe0d0, republished under its MIT licence (© kqcoxn). 287 words, ~3,085 tokens.
.claude/skills/x-chat-provider/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.本技能专注解决一个问题:如何将你的流式接口快速适配为 Ant Design X 的 Chat Provider。
不涉及的:useXChat 的使用教程(那是另一个技能)。
| 层级 | 包名 | 核心作用 |
|---|---|---|
| UI层 | @ant-design/x | React UI 组件库 |
| 逻辑层 | @ant-design/x-sdk | 开发工具包 |
| 渲染层 | @ant-design/x-markdown | Markdown 渲染器 |
// ✅ 正确导入示例
import { Bubble } from '@ant-design/x';
import { AbstractChatProvider, OpenAIChatProvider, XRequest } from '@ant-design/x-sdk';graph TD
A[开始] --> B{使用标准OpenAI/DeepSeek API?}
B -->|是| C[使用内置Provider]
B -->|否| D{消息格式是原始数据格式?}
D -->|是| E[使用DefaultChatProvider]
D -->|否| F[自定义Provider]
C --> G[OpenAIChatProvider / DeepSeekChatProvider]
E --> H[直接透传,无需转换]
F --> I[四步创建自定义Provider]| Provider 类型 | 适用场景 | 导入方式 |
|---|---|---|
| OpenAIChatProvider | 标准 OpenAI API 格式 | import { OpenAIChatProvider } from '@ant-design/x-sdk' |
| DeepSeekChatProvider | 标准 DeepSeek API 格式 | import { DeepSeekChatProvider } from '@ant-design/x-sdk' |
| DefaultChatProvider | 透传原始响应,无需格式转换 | import { DefaultChatProvider } from '@ant-design/x-sdk' |
⚠️ 导出名是
OpenAIChatProvider/DeepSeekChatProvider/DefaultChatProvider,注意拼写
DefaultChatProvider 会透传原始响应数据,不做任何转换。适用于:
Bubble.List 的 contentRender 来渲染消息import { DefaultChatProvider, XRequest } from '@ant-design/x-sdk';
interface ChatInput {
query: string;
stream?: boolean;
}
interface ChatOutput {
choices: Array<{ message: { content: string; role: string } }>;
}
// DefaultChatProvider 泛型:<ChatMessage, Input, Output>
// ChatMessage 就是你的 Output 类型(直接透传)
const provider = new DefaultChatProvider<ChatOutput | ChatInput, ChatInput, ChatOutput>({
request: XRequest('https://your-api.com/chat', {
manual: true,
params: { stream: false },
}),
});
// 使用时需要在 Bubble.List 的 role.contentRender 中自行渲染
// role={{ assistant: { contentRender(content) { return content?.choices?.[0]?.message?.content } } }}⚠️
DefaultChatProvider使用时ChatMessage类型通常是你的Output类型或联合类型,渲染需要配合contentRender
| 信息类型 | 示例值 |
|---|---|
| 接口URL | https://your-api.com/chat |
| 请求格式 | JSON,POST |
| 响应格式 | Server-Sent Events |
| 认证方式 | Bearer Token |
// MyChatProvider.ts
import { AbstractChatProvider } from '@ant-design/x-sdk';
import type { TransformMessage } from '@ant-design/x-sdk';
import type { XRequestOptions } from '@ant-design/x-sdk';
interface MyInput {
query: string;
model?: string;
stream?: boolean;
}
interface MyOutput {
content: string;
finish_reason?: string;
}
interface MyMessage {
content: string;
role: 'user' | 'assistant';
}
export class MyChatProvider extends AbstractChatProvider<MyMessage, MyInput, MyOutput> {
// 参数转换:将 onRequest 传入的参数 + XRequest 配置的默认参数合并
// options 来自 XRequest(url, options) 中的 options,可取 options.params 等
transformParams(
requestParams: Partial<MyInput>,
options: XRequestOptions<MyInput, MyOutput, MyMessage>,
): MyInput {
return {
...(options?.params || {}),
query: requestParams.query || '',
model: 'gpt-3.5-turbo',
stream: true,
};
}
// 本地消息:将 onRequest 的参数转为用户侧展示消息(支持返回数组)
transformLocalMessage(requestParams: Partial<MyInput>): MyMessage {
return {
content: requestParams.query || '',
role: 'user',
};
}
// 响应转换:
// info.originMessage:上次该消息的内容(流式累加时用)
// info.chunk:当前流式片段
// info.chunks:所有已收到的片段(onSuccess 时使用)
// info.status:当前状态
// ⚠️ 只返回 MyMessage 类型,禁止加 status 字段
transformMessage(info: TransformMessage<MyMessage, MyOutput>): MyMessage {
const { originMessage, chunk } = info;
if (!chunk?.content || chunk.content === '[DONE]') {
return { ...(originMessage || { content: '', role: 'assistant' }) };
}
return {
content: `${originMessage?.content || ''}${chunk.content}`,
role: 'assistant',
};
}
}| 检查项 | 说明 |
|---|---|
| 只实现3个方法 | transformParams、transformLocalMessage、transformMessage |
| transformParams 签名 | 必须包含第二个参数 options: XRequestOptions<...> |
| 无 status 返回 | transformMessage 返回值中无 status 字段 |
| 无 request 方法 | 确认没有实现 request 方法 |
| 类型检查通过 | tsc --noEmit 无错误 |
import { MyChatProvider } from './MyChatProvider';
import { XRequest } from '@ant-design/x-sdk';
// ⚠️ 必须传 manual: true,否则 AbstractChatProvider 构造函数会抛错
const provider = new MyChatProvider({
request: XRequest('https://your-api.com/chat', {
manual: true,
headers: {
Authorization: 'Bearer your-token',
'Content-Type': 'application/json',
},
params: {
model: 'gpt-3.5-turbo',
stream: true,
},
}),
});
export { provider };从 @ant-design/x-sdk 导出的关键类型:
import type {
// OpenAI 标准消息格式
XModelMessage, // { role: string; content: string | { text: string; type: string } }
XModelParams, // 完整的 OpenAI 请求参数类型(model, messages, stream, temperature 等)
XModelResponse, // 完整的 OpenAI 响应类型(choices, usage 等)
// SSE 流式字段类型
SSEFields, // 'data' | 'event' | 'id' | 'retry'
SSEOutput, // Partial<Record<SSEFields, any>>
// Provider 相关
TransformMessage, // { originMessage, chunk, chunks, status, responseHeaders }
// XRequest 相关
XRequestOptions, // 完整请求配置
XRequestCallbacks, // { onUpdate, onSuccess, onError }
// 消息相关
MessageInfo, // { id, message, status, extraInfo }
} from '@ant-design/x-sdk';// XModelMessage 就是标准 OpenAI 消息格式
// 用于 OpenAIChatProvider / DeepSeekChatProvider 的 ChatMessage 泛型
const userMessage: XModelMessage = { role: 'user', content: 'Hello' };
const systemMessage: XModelMessage = { role: 'system', content: '你是一个助手' };
const developerMessage: XModelMessage = { role: 'developer', content: '系统提示词' };// SSEOutput 是 SSE 流式原始数据的类型
// { data?: string; event?: string; id?: string; retry?: number }
// DeepSeekChatProvider 使用的是 Partial<Record<SSEFields, XModelResponse>>
import { DeepSeekChatProvider, XRequest } from '@ant-design/x-sdk';
import type { SSEFields, XModelParams, XModelResponse } from '@ant-design/x-sdk';
const provider = new DeepSeekChatProvider({
request: XRequest<XModelParams, Partial<Record<SSEFields, XModelResponse>>>(
'https://api.deepseek.com/v1/chat/completions',
{
manual: true,
params: { model: 'deepseek-chat', stream: true },
},
),
});callbacks 允许在 Provider 层面监听请求事件。回调中的第三个参数是经过 transformMessage 处理后的 MessageInfo:
const provider = new OpenAIChatProvider({
request: XRequest<XModelParams, XModelResponse, XModelMessage>(BASE_URL, {
manual: true,
callbacks: {
// onUpdate: 每个流式片段到达时触发
// chunk: 当前片段;responseHeaders: 响应头;message: 当前消息的 MessageInfo
onUpdate: (chunk, responseHeaders, message) => {
console.log('流式更新:', message?.message?.content);
},
// onSuccess: 所有片段接收完成时触发
// chunks: 所有片段数组;message: 最终消息的 MessageInfo
onSuccess: (chunks, responseHeaders, message) => {
console.log('请求完成:', message?.message?.content);
// 可以在这里做数据上报、日志记录等
},
// onError: 请求失败时触发(包括 AbortError)
// error: 错误对象;errorInfo: 额外错误信息;message: 失败时的消息 MessageInfo
onError: (error, errorInfo, responseHeaders, message) => {
console.error('请求失败:', error.message);
},
},
params: { model: 'gpt-4o', stream: true },
}),
});⚠️
callbacks与useXChat的requestFallback不冲突,两者都会执行。callbacks更适合日志/上报,requestFallback用于控制 UI 展示
const request = XRequest('https://your-api.com/chat', {
manual: true,
// 请求失败后重试间隔(毫秒)
retryInterval: 3000,
// 最大重试次数限制(不设置则无限重试)
retryTimes: 3,
// onError 也可以返回数字来动态设置重试间隔
callbacks: {
onError: (error) => {
if (error.name === 'AbortError') return; // 主动取消不重试
return 5000; // 返回数字 = 5秒后重试(优先级高于 retryInterval)
},
},
});当服务端返回的流格式不是标准 SSE 时使用:
const request = XRequest('https://your-api.com/chat', {
manual: true,
// 固定 TransformStream
transformStream: new TransformStream({
transform(chunk, controller) {
controller.enqueue(JSON.parse(chunk));
},
}),
// 或基于 URL 和响应头动态决定
transformStream: (baseURL, responseHeaders) => {
if (responseHeaders.get('x-stream-type') === 'ndjson') {
return new TransformStream({/* ... */});
}
return undefined; // 使用默认 SSE 解析
},
});📖 完整示例:EXAMPLES.md
| 场景类型 | 难度 | 说明 |
|---|---|---|
| 标准OpenAI | 🟢 | 直接使用内置 OpenAIChatProvider |
| 标准DeepSeek | 🟢 | 直接使用内置 DeepSeekChatProvider |
| 透传原始数据 | 🟢 | 使用 DefaultChatProvider |
| 私有SSE API | 🟡 | 四步实现自定义 Provider |
| 多字段响应 | 🟡 | 自定义 Provider + 复杂 ChatMessage |
| 非SSE流 | 🔴 | 自定义 Provider + transformStream |
// ❌ 严重错误
class MyProvider extends AbstractChatProvider {
async request(params: any) {
/* 禁止! */
}
}
// ✅ 唯一正确方式:只实现三个转换方法
class MyProvider extends AbstractChatProvider {
transformParams(params, options) {
/* ... */
}
transformLocalMessage(params) {
/* ... */
}
transformMessage(info) {
/* ... */
}
}// ❌ 错误
transformMessage(info) {
return { content: '...', status: 'error' }; // ❌ status 由框架管理
}
// ✅ 正确
transformMessage(info) {
return { content: '...' }; // ✅
}// ✅ 在 React 组件中,用 useState 保证只创建一次
const [provider] = React.useState(
new MyChatProvider({
request: XRequest(URL, { manual: true }),
}),
);
// ❌ 不要在渲染函数中直接创建(每次渲染都会新建)
// const provider = new MyChatProvider(...); // 放在组件体内会导致问题创建 Provider 前:
完成后:
useState 包裹tsc --noEmit)tsc --noEmit 确保无类型错误© kqcoxn, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/ant-design-x/skills/x-chat-provider of kqcoxn/MaaPipelineEditor.
Open the folder on GitHubat commit bbfe0d0
X Chat Provider next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| X Chat Provider this skillkqcoxn/MaaPipelineEditor | 408 | — | ~3.1k | Automated safety check: Pass | MIT | |
| LobeHub Interactive Prototypelobehub/lobehub | 83k | — | ~1.6k | Automated safety check: Pass | Custom licence | |
| Version ReleaseNG-ZORRO/ng-zorro-antd | 9.2k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Ant Design Mobile Releaseant-design/ant-design-mobile | 12k | — | ~497 | Automated safety check: Pass | MIT | |
| Lobe Designlobehub/lobe-ui | 2.2k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Feature SyncNG-ZORRO/ng-zorro-antd | 9.2k | — | ~840 | Automated safety check: Pass | MIT |
lobehub/lobehub
Builds single-file interactive HTML prototypes rendered with the real LobeHub UI components and written as production-style React, so they can later be split into files.
NG-ZORRO/ng-zorro-antd
NG-ZORRO/ng-zorro-antd repository release workflow. An agent skill from NG-ZORRO/ng-zorro-antd.
ant-design/ant-design-mobile
Prepares an npm release of ant-design-mobile up to the version commit, then tags and publishes the GitHub Release after you run the publish command yourself.
lobehub/lobe-ui
Build UI with the LobeHub design system — @lobehub/ui/base-ui, the controlled form at @lobehub/ui/base-ui/form, and the chat, mobile, dashboard, awesome, brand, mdx, and i18n namespaces, plus…
NG-ZORRO/ng-zorro-antd
Sync an Ant Design React component or feature into NG-ZORRO.
lazzyfu/goInsight
Build, refactor, or review production-grade admin interfaces with Vue 3 + JavaScript + Ant Design Vue 4.x.
kqcoxn/MaaPipelineEditor
Decision guide for antd 6.x, Ant Design Pro 5/ProComponents, Ant Design X v2, and the offline @ant-design/cli.
kqcoxn/MaaPipelineEditor
MaaFramework 开发与集成指南。当任务涉及 MaaFramework 项目结构、Pipeline 协议、ProjectInterface V2 协议、自定义识别/动作(Custom/Agent)、Python/NodeJS/CSharp 等语言 Binding 集成、控制器配置、回调协议或运行时行为时使用。
kqcoxn/MaaPipelineEditor
为 MPE 桌面端策划、生成或修改版本主题背景图,复用机械动力牛牛与章鱼猫的定稿形象;也用于维护这两个角色的设定与三视图。不用于普通界面样式修改或无关插画。
kqcoxn/MaaPipelineEditor
专注讲解如何使用 useXChat Hook,包括自定义 Provider 的集成、消息管理、错误处理、多会话管理等. An agent skill from kqcoxn/MaaPipelineEditor.
kqcoxn/MaaPipelineEditor
当需要用 @ant-design/x-card 让 AI Agent 动态渲染富交互 UI 时使用——涵盖 XCard.Box、XCard.Card、A2UI v0.9 命令、数据绑定、Catalog、Actions 和流式渲染模式。
kqcoxn/MaaPipelineEditor
使用 @ant-design/x 组件库构建 AI 对话 UI 时使用 —— 涵盖 Bubble、Sender、Conversations、Prompts、ThoughtChain、Actions、Welcome、Attachments、Sources、Suggestion、Think、FileCard、CodeHighlighter、Mermaid、Folder、XProvider 和…
Works with
专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Ant Design X 标准格式. An agent skill from kqcoxn/MaaPipelineEditor. X Chat Provider is an agent skill from kqcoxn/MaaPipelineEditor.
Run `npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a claude-code`. Or copy the skill folder (.agents/skills/ant-design-x/skills/x-chat-provider in kqcoxn/MaaPipelineEditor) into .claude/skills/x-chat-provider in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a codex`. Or copy the skill folder (.agents/skills/ant-design-x/skills/x-chat-provider in kqcoxn/MaaPipelineEditor) into .agents/skills/x-chat-provider in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kqcoxn/MaaPipelineEditor --skill x-chat-provider -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/x-chat-provider, .gemini/skills/x-chat-provider, .github/skills/x-chat-provider and .opencode/skills/x-chat-provider in your project.
Going by SKILL.md and its folder, X Chat Provider needs the command-line tools its instructions call (tsc).
SKILL.md names 2 domains. In commands or code: api.deepseek.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
X Chat Provider is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with X Chat Provider: LobeHub Interactive Prototype (lobehub/lobehub, 83k stars), Version Release (NG-ZORRO/ng-zorro-antd, 9.2k stars), Ant Design Mobile Release (ant-design/ant-design-mobile, 12k stars) and Lobe Design (lobehub/lobe-ui, 2.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kqcoxn (a GitHub user) maintains it in kqcoxn/MaaPipelineEditor, which has 408 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 9, 2026.
Source: kqcoxn/MaaPipelineEditor on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.