SuperAPI AI 工具集

d2

设计与创作

查看项目

更新于 10-16 02:11

技能介绍

用途

d2 是一个 Emacs 技能,用于在用户调用 "/d2" 时,根据当前上下文创建图表。它使用 D2 从最近的交互上下文中提取或推导可图表化的数据,生成 PNG 图片,并以 Markdown 图片形式输出,使其能够内联渲染。

主要能力

  • 从当前上下文提取或推导可图表化的数据。
  • 生成 PNG 格式的图表图片。
  • 将结果以 Markdown 图片形式输出在单独一行,例如:![description](/tmp/agent-diagram-XXXX.png)。
  • 根据 Emacs 的前景色和背景模式调整图表样式,保证在用户 Emacs 背景上的可读性。

使用方式

  1. 用户调用 "/d2"。
  2. 从当前上下文提取或推导可图表化的数据。
  3. 如果本次会话中尚未从之前的图表得知 Emacs 前景色和背景模式,则进行查询:
    • emacsclient --eval '(face-foreground (quote default))' 返回十六进制颜色,如 "#eeffff"。
    • emacsclient --eval '(frame-parameter nil (quote background-mode))' 返回 dark 或 light。
    • 两者在本次会话的后续图表中复用。
  4. 使用前景色将 D2 文件写入临时文件。
  5. 运行 D2:如果背景模式为 dark,使用 --theme 200;如果为 light,使用 --theme 0。命令示例: d2 --theme 200 --pad 40 /tmp/agent-diagram-XXXX.d2 /tmp/agent-diagram-XXXX.png
  6. 成功运行后,在单独一行输出 Markdown 图片。

D2 模板

根据 Emacs 背景模式选择 --theme 200(dark)或 --theme 0(light)。将查询到的前景色应用到节点和边的 style.font-color 和 style.stroke。模板示例:

direction: right

node1: Label {
  style.font-color: "#eeffff"
  style.fill: "#2d3748"
  style.stroke: "#eeffff"
}

node2: Label {
  style.font-color: "#eeffff"
  style.fill: "#2d3748"
  style.stroke: "#eeffff"
}

node1 -> node2: label {style.stroke: "#eeffff"; style.font-color: "#eeffff"}

规则

  • 每个会话只查询一次 Emacs 前景色,并在后续所有图表中复用;仅在颜色未知时再次查询。
  • 每个会话通过 (frame-parameter nil 'background-mode) 查询一次背景模式。dark 使用 --theme 200,light 使用 --theme 0。始终使用 --pad 40。
  • 文件名始终使用时间戳(例如 /tmp/agent-diagram-$(date +%s).png),不要使用描述性名称。
  • 将所有节点和边的 style.font-color 和 style.stroke 设置为查询到的前景色,使图表在用户 Emacs 背景上可读。
  • 使用有意义的填充颜色区分不同类型的元素。
  • D2 成功运行后,在单独一行输出 Markdown 图片 ![description](path)。
  • 为数据选择合适的布局方向和结构。
  • 当边标签能增加清晰度时,为其添加标签。
  • 如果最近上下文中没有可图表化的数据,告知用户。

适用场景

适用于在 Emacs 中需要根据当前对话或交互上下文快速生成图表的场景,尤其是希望图表样式与 Emacs 主题(深色/浅色)匹配、并直接以 Markdown 图片内联展示的情况。

限制

  • 依赖 D2 工具和 emacsclient 可用。
  • 需要从上下文中存在可图表化的数据,否则会告知用户无法生成。
  • 关于收费、价格、平台支持范围等信息,资料中暂未提供。