ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CopilotKit 纯 CSS 定制 CopilotChat 外观:Agno 集成 chat-customization-css 深度解析与 QA 验证指南

CopilotKit 纯 CSS 定制 CopilotChat 外观:Agno 集成 chat-customization-css 深度解析与 QA 验证指南 CopilotKit 纯 CSS 定制 CopilotChat 外观Agno 集成 chat-customization-css 深度解析与 QA 验证指南【免费下载链接】CopilotKitThe Frontend Stack for Agents Generative UI. React, Angular, Mobile, Slack, and more. Makers of the AG-UI Protocol项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit本文围绕 CopilotKit 仓库中 Agno 集成的chat-customization-css演示部署于/demos/chat-customization-css系统讲解如何不触碰组件、不替换 Slot仅用一张样式表把开箱即用的CopilotChat完全重塑为品牌化外观并给出其官方 QA 清单CSS 变量、输入字体、消息气泡往返样式的逐项验证方法与源码级依据。读完本文你将掌握 CopilotKit v2 的 CSS 变量覆盖机制、data-testid选择器体系以及如何用 Playwright E2E 与浏览器控制台对该定制能力做自动化回归验证。一、演示要解决的核心问题默认 CopilotChat 与品牌外观的差距CopilotChat的默认外观是圆角、系统无衬线字体、极简浅色风格。对于直接把它嵌入产品的团队最常见的诉求是把它换成我们的品牌皮肤而 CopilotKit 为此提供了两条定制路径Slots组件替换改变渲染什么_what_例如把整个输入条换成自定义 React 组件参考仓库中的chat-slots演示纯 CSS 定制在默认结构可用、只需要不同视觉身份how it looks时仅靠样式覆盖完成换肤——这正是本演示的主题。chat-customization-css演示证明了一条工程结论团队可以把CopilotChat直接拿来用通过一个作用域隔离的样式表完成品牌换肤全程不需要打开任何组件源码。演示 READMEsrc/app/demos/chat-customization-css/README.md明确将其定位为默认结构不变、只换视觉身份的示范而官方 QA 文档qa/chat-customization-css.md则把这一能力拆成可机器验证的检查点。二、演示的接线方式runtimeUrl、agent 与作用域包装页面实现位于 src/app/demos/chat-customization-css/page.tsx代码刻意保持极简让视觉差异完全来自样式表use client; import React from react; import { CopilotKit, CopilotChat } from copilotkit/react-core/v2; import ./theme.css; // 主题样式表整个演示的灵魂 export default function ChatCustomizationCssDemo() { return ( CopilotKit runtimeUrl/api/copilotkit agentchat-customization-css div classNameflex justify-center items-center h-screen w-full bg-white p-6 div classNamechat-css-demo-scope h-full w-full max-w-4xl CopilotChat agentIdchat-customization-css classNameh-full attachments{{ enabled: true }} / /div /div /CopilotKit ); }关键接线点CopilotKit通过runtimeUrl/api/copilotkit连接 Next.js 运行时路由通过agentchat-customization-css指定后端 AgentREADME 说明该 Agent 由src/agents/main.py中的graph支撑CopilotChat被包在div classNamechat-css-demo-scope中所有主题选择器都命名空间化在这个 class 之下从而保证主题不会泄漏到 showcase 的其他部分主题由页面顶部的import ./theme.css引入——把该文件复制到其他项目即可端到端生效字体会通过import从 Google Fonts 自举加载演示因此完全自包含。后端运行时路由 src/app/api/copilotkit/route.ts 展示了 Agent 注册机制mainAgentNames数组中包含了chat-customization-css它被别名为共享的 AgnomainAgentHttpAgent指向http://localhost:8000/agui可通过AGENT_URL环境变量覆盖并透出GET /api/copilotkit健康检查返回agent_status等字段——这正是 QA 前置条件中/api/health的对应后端健康依据。此外manifest.yaml 将chat-customization-css注册为独立 feature 与 demoroute: /demos/chat-customization-css并声明本集成基于copilotkit_version: 2.0.0。三、主题的双层作用机制v2 Token 覆盖 类目标样式theme.csssrc/app/demos/chat-customization-css/theme.css是理解整个定制的钥匙它把工作分为两层第一层[data-copilotkit]上的 v2 Token 覆盖CopilotKit v2 运行时在聊天根节点挂载[data-copilotkit]属性并读取--background、--foreground、--primary、--muted、--border、--ring、--radius等设计令牌来渲染所有 Tailwind 工具类如cpk:bg-muted、cpk:text-foreground。因此在作用域内重新指向这些令牌就能自动重着色运行时渲染的每一个工具类无需逐个类覆盖.chat-css-demo-scope [data-copilotkit] { --background: var(--halcyon-paper); /* #f4efe6 暖羊皮纸 */ --foreground: var(--halcyon-ink); /* #1a1714 暖墨色 */ --primary: var(--halcyon-ember); /* #c44a1f 深铜色 */ --primary-foreground: var(--halcyon-paper-elevated); --muted: var(--halcyon-paper-soft); --muted-foreground: var(--halcyon-ink-mute); --accent: var(--halcyon-ember-soft); --border: var(--halcyon-rule); --ring: var(--halcyon-ember); --radius: 0px; /* 全局直角化 */ }所有色板值先在.chat-css-demo-scope上以--halcyon-*自定义属性定义paper/ink/ember/rule 等 12 个语义令牌与 4 个字体栈、2 组阴影再被映射到 v2 令牌上。第二层类目标样式补充 Token 表达不了的细节CSS 变量只能改颜色和圆角表达不了编辑排版细节所以主题再叠加针对结构类的规则.copilotKitChat羊皮纸表面 左上角环境光晕 内联 SVG 噪点纸张颗粒 直角边框::before绘制固定在聊天顶部居中的 mono 刊头CopilotChat · Customized with CSS.copilotKitMessage.copilotKitUserMessage外层透明内层bg-muted气泡用[class*bg-muted]子串选择器命中改成 mono 字体、左侧 2px 铜色边条并追加::before的→光标前缀让用户消息读起来像一条 CLI 指令.copilotKitMessage.copilotKitAssistantMessageFraunces 衬线体、去气泡化左侧::before铜色细线作为编辑栏标内部.prose的标题、列表、引用、行内代码、代码块、链接、分割线全部做了排版处理深墨色代码卡片、衬线引用 pull-quote 等.copilotKitInput输入条由默认圆角药丸改为直角卡片 铜色 focus 环button[data-testidcopilot-send-button]逐个覆盖 v2 发送按钮的cpk:bg-black cpk:text-white cpk:rounded-full cpk:h-9 cpk:w-9令牌变成 36×36 方形铜色按钮含 hover/disabled 态建议词[class*copilotKitSuggestion]、滚动条::-webkit-scrollbar、文本选区::selection、欢迎屏入场动画halcyon-rise并尊重prefers-reduced-motion也一并定制。作用域隔离以上每个选择器都以.chat-css-demo-scope开头主题无法泄漏到 showcase 其他页面。四、官方 QA 清单逐项解读关联文档核心内容QA 文档 qa/chat-customization-css.md 是一份可执行的手工验收清单要求演示部署在/demos/chat-customization-css且 Agent 后端/api/health健康。其核心检查点如下逐项说明验证意图1. 基础功能Basic Functionality检查项说明导航到/demos/chat-customization-css演示路由与 manifest.yaml 中注册的 route 一致可见.chat-css-demo-scope包装器该作用域 wrapper 是所有--copilot-kit-*变量覆盖生效的载体它的存在即证明theme.css已加载且作用域正确主题化输入框位于作用域内通过data-testidcopilot-chat-input断言 v2 输入框已挂载测试还同时断言占位符 Type a message2. 特性专项检查Feature-Specific ChecksCSS 变量在作用域 wrapper 上读取计算样式应解析出以下主题值--copilot-kit-primary-color#ff006e热粉色主色--copilot-kit-background-color#fff8f0米白背景--copilot-kit-secondary-color#fde047琥珀副色输入字体验证文本域使用 Georgia serif 字体。往返样式Round-Trip Styling发送 hello 完成一轮对话后用户消息气泡背景为包含rgb(255, 0, 110)的热粉 linear-gradient助手消息气泡背景为rgb(253, 224, 71)即琥珀#fde047。事实说明QA 清单固定的上述热粉/琥珀色值与当前仓库theme.css中的 HALCYON 色板ember#c44a1f、paper#f4efe6并不一致说明该 QA 清单跟踪的可能是演示的早期主题版本手工/自动化验证时应以实际部署版本的令牌值为准验证机制本身计算样式断言则完全通用。3. 错误处理Error Handling页面加载与交互全程不得出现未捕获的控制台错误uncaught console errors。五、源码级佐证E2E 测试如何把 QA 清单自动化Playwright 测试 tests/e2e/chat-customization-css.spec.ts 把上述手工清单翻译成了可回归的断言值得逐条对照作用域与输入框挂载page.goto(/demos/chat-customization-css)后断言.chat-css-demo-scope可见且其内部的[data-testidcopilot-chat-input]与占位符 Type a message 可见CSS 变量解析在作用域 wrapper 上用getComputedStyle(el).getPropertyValue(...)读取--halcyon-ember/--halcyon-paper/--halcyon-ink断言分别为#c44a1f、#f4efe6、#1a1714。测试注释说明若theme.css未加载或.chat-css-demo-scope选择器未匹配这些变量会解析为空字符串——空串即失败这是对主题生效性的强断言输入字体对.copilotKitInput textarea断言fontFamily匹配/Inter Tight/。默认 CopilotChat 文本域不使用该字体因此这是主题确实赢下了级联的可靠信号往返样式为了拿到确定性回复测试刻意使用Say hello in one short sentence匹配 d5-all.json 中的 aimock 固定 fixture而非小写hello发送后断言用户消息外层background-color为rgba(0, 0, 0, 0)透明同理断言助手消息透明HALCYON 下助手消息无气泡、仅靠::before左规则呈现编辑风格。这套测试透露了三条可复用的经验优先用data-testid而非脆弱的选择器copilot-chat-input、copilot-send-button、copilot-welcome-screen、copilot-user-message、copilot-assistant-message是 v2 暴露的稳定测试钩子用默认样式不该有的字体/颜色作为主题生效证据比直接比对品牌色更抗样式演化消息内容要匹配 mock fixture才能获得确定性响应避免流式 Agent 回复的不稳定。六、运行与验证前提健康检查、Agent 别名与版本约束要在本地复现并执行这份 QA需要满足以下前提全部有仓库配置依据Agent 后端src/agents/main.py暴露的graph以 AG-UI 协议运行在http://localhost:8000route.ts 中AGENT_URL默认值并通过GET /health提供健康检查对应 QA 前置条件中的/api/health运行时路由/api/copilotkit由createCopilotRuntimeHandler单路由模式托管chat-customization-css作为mainAgentNames之一的别名指向共享主 Agent版本manifest.yaml 声明集成基于copilotkit_version: 2.0.0CSS 变量覆盖与data-testid体系均以 v2 为前提PARITY_NOTES.md 也将chat-customization-css列为 chat 定制路径之一依赖Next.js App Router 页面copilotkit/react-core/v2提供CopilotKit/CopilotChat。满足上述条件后按 QA 清单在浏览器执行即可或用npx playwright test tests/e2e/chat-customization-css.spec.ts自动回归。七、结论CSS 与 Slots 的分工边界chat-customization-css演示给出了一条清晰的选择标准当默认结构可用、只需换肤时选择纯 CSS——用[data-copilotkit]上的 v2 令牌覆盖重着色所有 Tailwind 工具类再以作用域化的类规则补充排版细节当需要改变渲染内容本身时选择 Slots参考chat-slots演示。QA 文档则提供了把外观是否被正确定制量化为计算样式断言的完整方法作用域 wrapper 可见性、CSS 变量解析值、输入字体、往返消息气泡样式、无未捕获控制台错误。配合 theme.css、page.tsx 与 E2E 测试任何团队都能在半天内把 CopilotKit 聊天组件换成本品牌皮肤并建立可回归的自动化防线。【免费下载链接】CopilotKitThe Frontend Stack for Agents Generative UI. React, Angular, Mobile, Slack, and more. Makers of the AG-UI Protocol项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表