Skip to main content
ClaudeWave
Skill1.6k repo starsupdated 2d ago

visualizer

当用户要求数据可视化、做图表、生成看板、数据仪表盘、可视化报告、Excel/CSV 转图表、预算/销售/运营等指标分析页面、Chart.js 可视化时使用。只处理数据可视化任务;纯网页、banner、海报、简历等非数据图表设计任务应交给 visual-design。

Install in Claude Code
Copy
git clone --depth 1 https://github.com/Pinvou/pinvou-agent /tmp/visualizer && cp -r /tmp/visualizer/pinvou3-app/src-tauri/resources/common/skill-marketplace/visualizer ~/.claude/skills/visualizer
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# 数据分析可视化

把结构化数据、表格汇总、业务指标或用户描述的数据口径转成可交付的 HTML 数据可视化仪表盘。

## 成功判定
一次合格交付必须同时满足:
- 已读取 `references/visualizer-design-system.md`。
- 已用 `write_file` 写出 `.html` 文件。
- 已用本技能目录下的 `scripts/validate_visualizer_html.py` 校验最终 `.html`,且结果为通过。
- 已调用 `present_artifact(path, title)` 展示产物卡。
- HTML 使用 Chart.js UMD:`https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js`。
- 每个 `<canvas>` 都有 `role="img"`、描述性 `aria-label` 和 fallback text。
- Chart.js 默认 legend 关闭,并使用自定义 HTML legend。
- 数据先聚合再入图,展示数字经过合理四舍五入。
- 图表关键数值常驻显示,不只依赖 hover tooltip;数据密集时显示首尾、峰值、谷值或 Top N 等关键标签。

## 失败判定
如果发生以下任一情况,必须重写产物再交付:
- 使用 ECharts、Plotly、Vega、D3 伪地图或任何非 Chart.js 图表库,除非用户明确点名要求。
- HTML 中出现 `echarts`、`Plotly`、`cdn.plot.ly`、`cdn.jsdelivr.net/npm/echarts`。
- 直接在聊天正文粘贴完整 HTML,而没有写 `.html` 文件和展示 artifact。
- `<canvas>` 缺少 `role="img"`、`aria-label` 或 fallback text。
- 使用默认 Chart.js legend,而没有自定义 HTML legend。
- 图表数值只出现在 hover tooltip 中,画布上没有常驻数值标签。
- 使用彩虹渐变 KPI、重阴影、发光、深色 hero、emoji 或营销页式大标题。
- HTML/CSS/JS 中出现 `<!-- comments -->`、`/* comments */` 或独立行 `// comments`。
- `scripts/validate_visualizer_html.py` 返回失败。

## 必须先读
在执行任务前读取 `references/visualizer-design-system.md`,并遵守其中的 Chart.js、布局、配色、无障碍和流式输出规则。若任务很小,也至少遵守本文件的硬性规则。

## 交付方式
Pinvou 的聊天正文会转义或清理 `<script>`,所以不要把带 Chart.js 的 HTML 直接贴在普通回复正文里当最终成品。

必须按以下流程交付:
1. 用 `write_file` 写出一个 `.html` 文件,文件内容可以是完整可打开 HTML,必须包含可执行的 Chart.js 脚本。
2. 用 `exec_shell` 运行本技能目录下的校验器:
   `python <visualizer-skill-dir>/scripts/validate_visualizer_html.py <artifact.html> --json`
   其中 `<visualizer-skill-dir>` 是 `load_skill` 返回的 Source 所在目录。
3. 如果校验失败,读取错误列表,重写 `.html`,再次运行校验器;不要展示失败产物。
4. 只有校验通过后,才能调用 `present_artifact(path, title)` 展示产物卡。
5. 普通回复只保留简短说明,不重复粘贴整段 HTML。

## 触发边界
使用本技能:
- Excel/CSV/JSON/表格数据转图表、转看板、转可视化报告。
- 用户说“做数据可视化”“做图表”“生成看板”“数据仪表盘”“可视化图表”。
- 数据分析仪表盘、指标看板、可视化报告。
- 柱状图、折线图、组合图、散点图、热力图、图表卡片。
- 用户明确提到 Chart.js、canvas、数据可视化。

不使用本技能:
- 落地页、品牌页、banner、海报、简历、作品集等以视觉表达为主、没有数据图表核心诉求的任务。
- 需要真实地图但没有真实拓扑数据的任务;不要手绘伪地图。
- 需要在线查询最新数据但用户没有提供数据时,先说明需要数据源或使用可用查询工具获取数据。

## 数据纪律
- 不要编造真实业务数据。缺数据时先询问,或明确生成空模板/示例模板。
- 用户给出 Excel、CSV、JSON、表格或明细数据时,先做必要聚合,再写入图表。
- 所有展示数字都要四舍五入到合理精度。
- 图表解释写在普通回复中;HTML 产物内部只放视觉元素、必要标题、图例和简短标签。

## HTML 产物硬规则
- 输出 `.html` 文件,不输出 Markdown 包裹的 HTML。
- 使用 Chart.js UMD:`https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js`。
- 每个 `<canvas>` 必须有 `role="img"`、描述性 `aria-label` 和 fallback text。
- 默认 legend 必须关闭,使用自定义 HTML legend。
- 默认在图表关键数据点上常驻显示数值标签,不只依赖 hover tooltip;柱状图显示在柱体末端或顶部,折线图显示在关键节点附近,饼图/环图显示分类占比。数据密集时只显示首尾、峰值、谷值或 Top N 等关键标签,避免重叠;完整数值保留在图例或 KPI 卡中。
- canvas 外层 wrapper 设置高度,canvas 本身不直接设置高度。
- Chart.js 配置里使用硬编码 hex,不使用 CSS 变量。
- 页面视觉要扁平、紧凑、无渐变背景、无阴影、无深色外层容器。
- 不写 HTML 注释、CSS/JS 块注释或行内叙事注释。
- 不写独立行 `//` 注释;生成脚本内也不要把解释性注释复制进最终 HTML。
- 不使用 emoji;需要图形标识时用 CSS 小色块或简洁 SVG。
- 字号保持紧凑:h1 15px、h2 14px、h3 13px、正文 13px;只使用 400 和 500 字重。
- 推荐结构:2-4 个 KPI 卡片、1 个宽趋势图、1-2 个辅助对比图、每个图表上方放自定义 legend。
- HTML 内只放视觉元素、标题、图例和必要标签;详细分析写在普通回复中。
- 若引用完整规范与本文件冲突,以本文件的交付方式为准。

## 交付前机器校验
本技能自带校验器 `scripts/validate_visualizer_html.py`,用于拦截常见违规项,包括注释残留、ECharts/Plotly、缺失 Chart.js UMD、canvas 无障碍缺失、默认 legend 未关闭、缺少自定义 legend、渐变/阴影/模糊/发光、异常字重、过小字号和 emoji。

校验器失败时必须按错误逐项修复并重跑,直到输出 `ok: true` 或文本 `OK visualizer artifact`。不要把“校验失败但看起来可用”的 HTML 交付给用户。
visual-designSkill

直出好看的网页/落地页/banner/海报/产品介绍页/数据报告/简历/作品集等视觉物料——套一套设计系统,模型自由写自包含 HTML,颜值由规则锁死、不靠模板。用户说"做个网页/页面/落地页/banner/海报/报告页/作品集/简历"或"把这份内容做成网页版"时使用。⚠️ 不含信息检索:查天气/查行情/查股价/查数据请走对应连接器,不是本技能。

dwsSkill

【何时用:仅当用户明确指向钉钉/DingTalk(钉钉文档、钉钉日程等)时使用;泛指做文档/表格/待办/审批默认走本地工具,不要误用钉钉】用 dws CLI 管理钉钉:AI表格/AI搜问(找人首选)/目标管理(Agoal)/组织大脑/日历/通讯录/群聊与机器人消息/待办/审批/考勤/日志(日报周报)/DING消息/钉钉文档/云盘/Markdown文件/AI听记/邮箱/在线电子表格(axls)/知识库/白板/开放平台文档/个人IM与OA事件订阅。用户要求操作上述钉钉产品时使用。

lark-baseSkill

【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限;遇到 Base/多维表格/bitable、BaseApp/AppMode 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入转 lark-drive,认证/授权转 lark-shared。

lark-calendarSkill

【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书日历:管理日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。不负责:查询视频会议记录(本 skill 只覆盖日程;lark-vc 技能未随包收录,可 CLI 直连,见意图路由)、待办任务(走 lark-task)。

lark-docSkill

【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云文档(Docx/Wiki)与思维笔记内容操作:读取、创建、编辑文档,插入或下载图片附件,查询或回滚历史版本。用户给出文档 URL/token(含 doubao.com 的 /docx/、/wiki/)时使用,按 URL 路径/token 而非域名路由;内嵌表格、多维表格、画板先提取 token 再切对应 skill。文档评论走 lark-drive;表格或 Base 内部数据操作不在本 skill。

lark-driveSkill

【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云空间:管理 Drive 文件/文件夹,上传下载、复制移动删除、评论、权限、密级标签、版本、改标题,导入 Word/Markdown/Excel/CSV/PPTX/.base 为在线文档;doubao.com 云空间 URL 同走本 skill,不回退 WebFetch。不负责:文档内容编辑(lark-doc)、表格/Base 表内数据(lark-sheets/lark-base)、知识库节点(lark-wiki)。

lark-imSkill

【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)与卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索或创建群聊/话题群、管理标记数据、Feed 置顶与标签数据、处理卡片回调时使用。

lark-sharedSkill

【何时用:仅在其他 lark-* 技能遇到认证/授权/身份/配置问题时,或首次使用 lark-cli 时;泛指需求默认走本地工具】lark-cli 共享规则:首次配置(config init)、认证登录(auth login --domain/--scope,split-flow)、登录态查询与撤销(auth status/logout/whoami)、--as user/bot 身份切换、权限不足与 missing_scope 处理、JSON 输出契约与 _notice、update 更新、高风险操作审批(exit 10)。