feat:移除了弹窗,服务器添加sls
This commit is contained in:
107
.agents/skills/lark-whiteboard/routes/dsl.md
Normal file
107
.agents/skills/lark-whiteboard/routes/dsl.md
Normal file
@ -0,0 +1,107 @@
|
||||
# DSL 路径
|
||||
|
||||
> **这是画板,不是网页。** 画板是无限画布上自由放置元素,flex 布局是可选增强。
|
||||
|
||||
## Workflow
|
||||
|
||||
```
|
||||
Step 1: 路由 & 读取知识
|
||||
- 读对应 scene 指南 — 了解结构特征和布局策略
|
||||
- 确定布局策略(见下方快速判断)和构建方式
|
||||
- 读 elements/ 核心模块 — 语法、布局、配色、排版、连线
|
||||
|
||||
Step 2: 生成完整 DSL(含颜色)
|
||||
- 按 content.md 规划信息量和分组
|
||||
- 按 layout.md 选择布局模式和间距
|
||||
- 推荐使用图标让图表更直观,运行 `npx -y @larksuite/whiteboard-cli@^0.2.13 --icons` 查看可用图标
|
||||
- 按 style.md 上色(用户没指定时用默认经典色板)
|
||||
- 按 schema.md 语法输出完整 JSON
|
||||
- 连线参考 connectors.md,排版参考 typography.md
|
||||
|
||||
注意:部分图形(鱼骨/飞轮/柱状/折线等)要按 scene 指南的脚本模板写 CommonJS 脚本生成 JSON:
|
||||
1. 创建产物目录 ./diagrams/YYYY-MM-DDTHHMMSS/
|
||||
2. 将脚本保存为 diagram.gen.cjs(必须 .cjs 后缀,脚本用 require() 写,.js 在 ESM 项目下会崩),执行 node diagram.gen.cjs 产出 diagram.json
|
||||
3. 用产出的 diagram.json 进入 Step 3
|
||||
|
||||
Step 3: 渲染 & 审查 → 交付
|
||||
- 渲染前自查(见下方检查清单)
|
||||
- 渲染 PNG(仅用于预览验证,不是最终产物):npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.json -o diagram.png
|
||||
- 检查:信息完整?布局合理?配色协调?文字无截断?连线无交叉?
|
||||
- 有问题 → 按症状表修复 → 重新渲染(最多 2 轮)
|
||||
- 2 轮后仍有严重问题 → 考虑走 Mermaid 路径兜底
|
||||
- 写入画板:用 whiteboard-cli 将 diagram.json 转换为 OpenAPI 格式并 pipe 给 +update:
|
||||
npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.json --to openapi --format json \
|
||||
| lark-cli whiteboard +update --whiteboard-token <board_token> \
|
||||
--source - --input_format raw --idempotent-token <时间戳+标识> --as user
|
||||
→ 完整 dry-run / 确认流程见 SKILL.md [§ 写入画板](../SKILL.md#写入画板)
|
||||
- 交付:向用户报告 board_token 写入成功
|
||||
```
|
||||
|
||||
**布局策略快速判断**(详见 `elements/layout.md`):
|
||||
|
||||
先定**主布局**,再定子布局:**结构化信息**优先用 Flex,**关系链路**优先用 Dagre,**灵活定位**用绝对布局。
|
||||
|
||||
> **构建方式是强约束**:当 scene 指南要求"脚本生成"时,必须先写脚本(`.cjs`,CommonJS)并用 `node` 执行来产出 JSON 文件。
|
||||
|
||||
## 模块索引
|
||||
|
||||
### 核心参考(必读)
|
||||
|
||||
| 模块 | 文件 | 说明 |
|
||||
| -------- |----------------------------| ------------------------------- |
|
||||
| DSL 语法 | `elements/schema.md` | 节点类型、属性、尺寸值 |
|
||||
| 内容规划 | `elements/content.md` | 信息提取、密度决策、连线预判 |
|
||||
| 布局系统 | `elements/layout.md` | 网格方法论、Flex 映射、间距规则 |
|
||||
| 排版规则 | `elements/typography.md` | 字号层级、对齐、行距 |
|
||||
| 连线系统 | `elements/connectors.md` | 拓扑规划、锚点选择 |
|
||||
| 配色系统 | `elements/style.md` | 多色板、视觉层级 |
|
||||
|
||||
### 场景指南(按类型选读一个)
|
||||
|
||||
| 图表类型 | 文件 | 适用场景 |
|
||||
| ----------- | ------------------------ | -------------------------------------- |
|
||||
| 架构图 | `scenes/architecture.md` | 分层架构、微服务架构 |
|
||||
| 组织架构图 | `scenes/organization.md` | 公司组织、树形层级 |
|
||||
| 泳道图 | `scenes/swimlane.md` | 跨角色流程、跨系统交互流程 |
|
||||
| 对比图 | `scenes/comparison.md` | 方案对比、功能矩阵 |
|
||||
| 鱼骨图 | `scenes/fishbone.md` | 因果分析、根因分析 |
|
||||
| 柱状图 | `scenes/bar-chart.md` | 柱状图、条形图 |
|
||||
| 折线图 | `scenes/line-chart.md` | 折线图、趋势图 |
|
||||
| 树状图 | `scenes/treemap.md` | 矩形树图、层级占比 |
|
||||
| 漏斗图 | `scenes/funnel.md` | 转化漏斗、销售漏斗 |
|
||||
| 金字塔图 | `scenes/pyramid.md` | 层级结构、需求层次 |
|
||||
| 循环/飞轮图 | `scenes/flywheel.md` | 增长飞轮、闭环链路 |
|
||||
| 里程碑 | `scenes/milestone.md` | 时间线、版本演进 |
|
||||
| 流程图 | `scenes/flowchart.md` | 业务流、状态机、带条件判断的链路 |
|
||||
| 图片展示 | `scenes/photo-showcase.md` | 用户显式要求图片/配图/插图时(需先完成 `elements/image.md` 的图片准备) |
|
||||
|
||||
## 渲染前自查
|
||||
|
||||
- [ ] 不同分组用了不同颜色?同组节点样式完全一致?
|
||||
- [ ] 外层浅色背景、内层白色节点?
|
||||
- [ ] 所有节点有边框(borderWidth=2)?文字在背景上清晰可读?
|
||||
- [ ] 连线用灰色(#BBBFC4),不用彩色?
|
||||
- [ ] frame 都写了 layout 属性?gap 和 padding 都显式设置了?
|
||||
- [ ] 含文字节点 height 用 fit-content?connector 在顶层 nodes 数组?
|
||||
|
||||
## 症状→修复表
|
||||
|
||||
| 看到的问题 | 改什么 |
|
||||
| ------------------ | ----------------------------------- |
|
||||
| 文字被截断 | height 改为 fit-content |
|
||||
| 文字溢出容器右侧 | 增大 width,或缩短文字 |
|
||||
| 节点重叠粘连 | 增大 gap |
|
||||
| 节点挤成一团 | 增大 padding 和 gap |
|
||||
| 连线穿过节点 | 调整 fromAnchor/toAnchor 或增大间距 |
|
||||
| 大面积空白 | 缩小外层 frame 宽度 |
|
||||
| 文字和背景色太接近 | 调整 fillColor 或 textColor |
|
||||
| 布局整体偏左/偏右 | 调整绝对定位的 x 坐标使内容居中 |
|
||||
|
||||
## 关键约束速查
|
||||
|
||||
1. **含文字节点的 height 必须用 `'fit-content'`** — 写死数值会截断文字
|
||||
2. **`fill-container` 仅在 flex 父容器中生效** — `layout: 'none'` 下宽度退化为 0
|
||||
3. **`layout: 'none'` 的容器必须有固定宽高** — 不要写成 `fit-content`
|
||||
4. **connector 必须放在顶层 nodes 数组** — 不能嵌套在 frame children 里
|
||||
5. **flex 容器内的 x/y 会被完全忽略** — 需要自由定位时用 `layout: 'none'`
|
||||
6. **Dagre 子容器默认为不透明节点** — 需穿透时声明 `layout: "dagre"` + `layoutOptions: { isCluster: true }`
|
||||
27
.agents/skills/lark-whiteboard/routes/mermaid.md
Normal file
27
.agents/skills/lark-whiteboard/routes/mermaid.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Mermaid 路径
|
||||
|
||||
适用于:思维导图、时序图、类图、饼图、甘特图。
|
||||
|
||||
## Workflow
|
||||
|
||||
```
|
||||
Step 1: 读取知识
|
||||
- 读 scenes/mermaid.md — Mermaid 语法和使用方式
|
||||
|
||||
Step 2: 生成 Mermaid
|
||||
- 按 mermaid.md 的语法编写 .mmd 文件
|
||||
- 只输出纯 Mermaid 语法文本
|
||||
|
||||
Step 3: 渲染验证 & 写入画板 & 交付
|
||||
1. 创建产物目录 ./diagrams/YYYY-MM-DDTHHMMSS/
|
||||
2. 保存为 diagram.mmd
|
||||
3. 渲染(仅用于预览验证,PNG 不是最终产物):
|
||||
npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.mmd -o diagram.png
|
||||
4. 审查 PNG,有问题修改后重新渲染(最多 2 轮)
|
||||
5. 写入画板:用 whiteboard-cli 将 diagram.mmd 转换为 OpenAPI 格式并 pipe 给 +update:
|
||||
npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.mmd --to openapi --format json \
|
||||
| lark-cli whiteboard +update --whiteboard-token <board_token> \
|
||||
--source - --input_format raw --idempotent-token <时间戳+标识> --as user
|
||||
→ 完整 dry-run / 确认流程见 SKILL.md [§ 写入画板](../SKILL.md#写入画板)
|
||||
6. 交付:向用户报告 board_token 写入成功
|
||||
```
|
||||
85
.agents/skills/lark-whiteboard/routes/svg-edit.md
Normal file
85
.agents/skills/lark-whiteboard/routes/svg-edit.md
Normal file
@ -0,0 +1,85 @@
|
||||
# SVG 编辑路径
|
||||
|
||||
通过导出画板的 SVG → 编辑 SVG → 回写画板,实现对已有画板的可视化编辑。
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 有损性警告
|
||||
|
||||
SVG 导出是**纯视觉快照**,再次导入后画板语义(思维导图层级/表格结构/连线绑定/容器类型/mention/节点 ID/锁定/评论)会丢失。
|
||||
|
||||
**保留的信息**:形状几何(位置/大小/路径)、文本内容与基本格式(字号/粗体/斜体/对齐)、填充色/描边色/透明度(线性渐变降级为第一个 stop-color 纯色)、连接器路径形状与箭头样式、`<g>` 嵌套的基本分组关系(≥2 子元素时重建为 DirectFocusGroup)。
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
### 0. 用户确认(强制)
|
||||
|
||||
在执行任何编辑前,**必须**向用户说明:
|
||||
|
||||
> SVG 编辑只保证视觉层面对齐,画板语义(层级/节点类型/思维导图结构/表格结构/连线绑定/容器类型/mention 等)将不可恢复,是否继续?
|
||||
|
||||
**用户未确认前不得执行后续步骤。**
|
||||
|
||||
### 1. 导出当前画板 SVG
|
||||
|
||||
```bash
|
||||
lark-cli whiteboard +export \
|
||||
--whiteboard-token <TOKEN> \
|
||||
--output-type svg \
|
||||
--output <dir>/original.svg \
|
||||
--as user
|
||||
```
|
||||
|
||||
### 2. 编辑 SVG
|
||||
|
||||
在导出的 SVG 上进行修改。参考 [`svg.md` § 画板怎么处理 SVG](./svg.md#画板怎么处理-svg) 了解可识别元素与不支持的装饰特性。
|
||||
|
||||
**技术约束**:
|
||||
- 新增文字必须用 `<text>`(不是 `<path>`),容器宽度留够(CJK ≈ 1em / Latin ≈ 0.6em)
|
||||
- 避免 `skewX` / `skewY` / `matrix(...)` 变换
|
||||
- 禁止使用 `<radialGradient>` / `<filter>` / `<pattern>` / `<clipPath>` / `<mask>`
|
||||
|
||||
**编辑原则**(区别于从零创作):
|
||||
|
||||
- **风格一致**:新增/修改元素应匹配导出 SVG 中已有的配色、字号、线宽、间距风格,不引入突兀的视觉差异
|
||||
- **最小改动**:只修改用户要求的部分,不主动"优化"或重排无关区域
|
||||
- **结构稳定**:尽量保留原有 `<g>` 层级结构,避免不必要的重组导致分组关系变化
|
||||
- **连线协调**:连接器端点绑定已丢失,若移动了形状,必须手动同步调整视觉上连接到该形状的 connector path 端点坐标,否则连线会"断开"
|
||||
- **内部引用完整性**:不要随意删改 `<defs>` 中被 `url(#id)` 引用的元素(`<marker>`/`<linearGradient>` 等)或修改其 `id`,否则引用方会失效
|
||||
|
||||
### 3. 渲染审查
|
||||
|
||||
```bash
|
||||
# 渲染 PNG 预览
|
||||
npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/edited.svg -o <dir>/edited.png -f svg
|
||||
|
||||
# 几何检查(text-overflow / node-overlap)
|
||||
npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/edited.svg -f svg --check
|
||||
```
|
||||
|
||||
结合 PNG 视觉效果和 `--check` 报告进行调整,有问题则修改 SVG 后重新渲染(最多 2 轮)。
|
||||
- SVG 本地渲染预览时,画板中的图片因 session 原因无法正常显示,属于预期内的行为。
|
||||
|
||||
### 4. 写回画板
|
||||
|
||||
`--overwrite` 会清空原画板内容,确认后再执行
|
||||
|
||||
```bash
|
||||
# dry-run 探测
|
||||
lark-cli whiteboard +update \
|
||||
--whiteboard-token <TOKEN> \
|
||||
--source @<dir>/edited.svg \
|
||||
--input_format svg \
|
||||
--idempotent-token <10+字符唯一串> \
|
||||
--overwrite --dry-run --as user
|
||||
|
||||
# 用户确认后执行
|
||||
lark-cli whiteboard +update \
|
||||
--whiteboard-token <TOKEN> \
|
||||
--source @<dir>/edited.svg \
|
||||
--input_format svg \
|
||||
--idempotent-token <10+字符唯一串> \
|
||||
--overwrite --as user
|
||||
```
|
||||
59
.agents/skills/lark-whiteboard/routes/svg.md
Normal file
59
.agents/skills/lark-whiteboard/routes/svg.md
Normal file
@ -0,0 +1,59 @@
|
||||
# SVG 路径
|
||||
|
||||
你在设计一张专业的信息图——内容扎实, 美观漂亮, 具有设计感和视觉张力, 不是枯燥的布局和文字堆砌, **不要做的像普通的网页或者千篇一律的模版**
|
||||
最终交付是**画板跨越重排渲染的节点**(你写 SVG → 画板解析)
|
||||
|
||||
**核心心智纠正 (重要)**:
|
||||
|
||||
- 大多数 AI 如果只考虑“绝对不报错/完美映射”, 最终给出的都是全篇纯白底色加单层 `<rect>` 的方正卡片网格, 极其死板单调, **这将被视为不及格!**
|
||||
- **SVG 给你了完全的设计自由**, 请大胆使用你脑内的图标路径 (`<path>`), 连接指引 (`流畅的 <path>`), 各种环境氛围点缀, 大胆一点, 充分信任你的品味, 发挥出你的顶级艺术创造力!
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. 想清楚要画什么
|
||||
|
||||
- **核心信息是什么?** 能做到一图胜千言, 绝对不要只生成平平无奇的文字表格, 要有设计感
|
||||
- **内容充实度**:如果用户描述稀疏简略, 利用你的领域知识扩展, 保证信息维度和内容充实, 但不要过度堆砌, 淹没重点
|
||||
- **视觉层级与隐喻**:这个没有固定的形式, 你自由判断, 比如: 给重要的节点加光环, 加高亮背景;给对比项设计天平或对称结构
|
||||
|
||||
### 2. 写 SVG
|
||||
|
||||
[!IMPORTANT] 布局, 配色, 信息密度, 装饰物——**全部由你判断**, 打破单调的 `<rect>` 牢笼, 严禁通篇用矩形和文字应付用户
|
||||
|
||||
操作边界约束:
|
||||
|
||||
- **语言跟随用户**:图表文字的语言与用户 prompt 保持一致, 技术术语用行业里通用的写法, 不机械翻译
|
||||
- 文字用 `<text>`(不是 `<path>`), 容器宽度留够——画板按 CJK ≈ 1em / Latin ≈ 0.6em 重排
|
||||
- 连线使用正交折线替代斜直线(`<polyline>` 带水平/垂直折点)视觉效果更好
|
||||
- 可自由使用 `translate`, `rotate`, `scale`但请尽量避免使用 `skewX` / `skewY` / `matrix(...)` 发生空间级扭曲
|
||||
|
||||
### 3. 渲染审查
|
||||
|
||||
```
|
||||
建目录 ./diagrams/YYYY-MM-DDTHHMMSS/ (例:./diagrams/2026-04-15T143022/)
|
||||
写文件 <dir>/diagram.svg
|
||||
渲染 npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -o <dir>/diagram.png -f svg
|
||||
检查 npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --check
|
||||
导出 npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --to openapi --format json > <dir>/diagram.json
|
||||
```
|
||||
|
||||
`npx -y @larksuite/whiteboard-cli@^0.2.13 --check` 检测 `text-overflow` 和 `node-overlap`, 并结合视觉效果(查看 PNG)进行调整
|
||||
|
||||
## 画板怎么处理 SVG
|
||||
|
||||
画板的 svg-parser 把可识别元素转成可编辑节点, 其余降级为内嵌图片(渲染没问题, 虽然不可编辑, 但是可以正常显示);但非阴影用途的 `<filter>` / `<clipPath>` 等装饰特性画板不支持(见下方⚠️)
|
||||
**不需要所有元素都可编辑, 但必须避免使用不支持的装饰特性, 且要兼顾可编辑和美观漂亮**
|
||||
|
||||
**可识别的元素**
|
||||
|
||||
- 形状:`<rect>` / `<circle>` / `<ellipse>` / `<polygon>`
|
||||
- 连线:`<line>` / `<polyline>` / `<path>`(自动识别为直线 / 折线 / 曲线)
|
||||
- 文本:`<text>` / `<tspan>` 画板硬编码 Noto Sans SC **文字必须用 `<text>`**
|
||||
- 分组:`<g>` / `<a>` / `<use>` 引用 `<symbol>`
|
||||
- 变换:`translate` / `rotate` / `scale` 正常;`skewX` / `skewY` / `matrix(...)` 降级
|
||||
- 阴影:`<filter>` 里放 `<feDropShadow>` 或标准 drop/inner primitive 链 (`<feGaussianBlur in="SourceAlpha">` + `<feOffset>` + `<feFlood>` + `<feComposite>` + `<feMerge>`), 会被识别成节点阴影, drop 至多 1 个, inner 至多 1 个; 其余 filter 效果不识别
|
||||
- 渐变:`<linearGradient>` / `<radialGradient>` 在 `<defs>` 中定义, 通过 `fill="url(#id)"` 引用 (载体限 `<rect>` / `<circle>` / `<ellipse>` / `<polygon>` / `<path>`), 需要至少 2 个 `<stop>`, `gradientUnits` 只支持默认的 `objectBoundingBox` (不写即可);
|
||||
|
||||
**⚠️ [!IMPORTANT] 不支持的装饰特性**
|
||||
- `<pattern>` / `<clipPath>` / `<mask>` / 非阴影用途的 `<filter>` (blur / hue-rotate / 复合合成 / `flood-color=url(...)` / 多个 `<feDropShadow>` 等) → 画板不支持,**请避免使用,否则会导致画板渲染问题**
|
||||
- 渐变边界:`gradientUnits="userSpaceOnUse"` / `spreadMethod="reflect|repeat"` / stops 少于 2 个 / 复杂 `gradientTransform` 会变成不可编辑图片, 视觉正确但失去可编辑性, 若无必要请沿用默认 `objectBoundingBox`
|
||||
Reference in New Issue
Block a user