mcpField
C
current-slide

current-slide

github.com/open-slide文档处理9.4k144 次安装今天更新
代码仓库

关于 current-slide

current-slide 是供 Agent 在 Open Slide 开发查看器中编辑幻灯片的技能。它会在每次编辑前读取实时导航和选择状态,以定位当前幻灯片、页面或元素。

主要功能

  1. 01从 JSON 读取查看器当前状态
  2. 02定位幻灯片、页面和所选元素
  3. 03每次指代当前内容时重新读取状态
  4. 04编辑前检查状态是否过期
  5. 05使用源文件路径和行位置

适用场景

  1. 01编辑查看器中当前打开的幻灯片
  2. 02调整检查器中选中的元素
  3. 03导航状态过期时确认编辑目标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/open-slide/open-slide --skill current-slide

安装后在 Claude Code 中输入/current-slide确认已加载。

详细介绍

用户现在在哪里?

当用户说“修复这个页面”“调整这个标题”或“我正在看的幻灯片”时,他们几乎从不提幻灯片 ID、页码或元素名称——他们指的是开发查看器当前显示的位置。在询问“哪张幻灯片?”或“哪个元素?”之前,请先检查开发服务器每次导航和检查器选取元素时都会写入的文件。

每次出现指示性指代时都重新读取——绝不复用之前的读取结果

current.json 是实时光标,不是对话中的既定事实。在你两次回复之间,用户可能会在幻灯片、页面和元素之间自由切换——包括你处理其他工作期间。每次开始处理含有指示性指代的新一轮请求时,都要重新读取该文件,即使:

  • 你在本次对话中早些时候已经读过它;
  • 你刚编辑完它指向的幻灯片;
  • 用户的新消息听起来像是在接着之前的内容说(“现在把它放大些”“也修好这个”“继续”)。

“继续编辑”这类后续请求,恰恰最可能意味着用户刚切换到了另一张幻灯片或选取了另一个元素。此时如果依赖上次读取的结果,就会在用户毫不知情的情况下编辑错文件。请重新读取,将 slideId / pageIndex / selection 与上次使用的值进行对比,然后根据新值操作。

如何读取

node_modules/.open-slide/current.json

路径相对于项目根目录(用户的 cwd,即包含 slides/ 和 package.json 的目录)。使用 Read 工具。该文件是 JSON。

你会得到什么

{
  "slideId": "q2-roadmap",
  "pageIndex": 2,
  "pageNumber": 3,
  "totalPages": 8,
  "slideTitle": "Q2 Roadmap",
  "view": "slides",
  "pagePath": "slides/q2-roadmap/index.tsx",
  "selection": {
    "line": 42,
    "column": 6,
    "tagName": "h1",
    "text": "Q2 Roadmap"
  },
  "updatedAt": "2026-05-09T14:32:11.123Z"
}
  • slideId — slides/ 下的文件夹名称。任何 /__slides/<id>/... API 或 URL 路径片段都使用原值。
  • pageIndex — 从 0 开始的索引,用于 index.tsx 中的页面数组(export default [Cover, Body, ...])。
  • pageNumber — 从 1 开始的页码,用于向用户说明(“共 8 页中的第 3 页”)以及 URL ?p=N。
  • pagePath — 幻灯片源文件的相对路径。直接传给 Read / Edit。
  • view — "slides"(画布视图)或 "assets"(资源管理器)。如果是 "assets",用户正在浏览该幻灯片的文件,而不是查看页面。
  • selection — 如果没有选中任何内容,则为 null。否则,它是用户在检查器叠层中选取的 JSX 元素:
    • line(从 1 开始)和 column(从 0 开始)指向 pagePath 中 JSX 起始标签的位置。这是规范的定位方式——请按源文件行号匹配,而不是按渲染后的 DOM 匹配。
    • tagName 是渲染后的 DOM 标签名,小写形式("h1"、"div"、"img")。
    • text 是该元素 textContent 中经过去除首尾空白的文本片段(≤120 个字符),可用于确认你查看的是正确节点。
    • 用户切换到不同的幻灯片或页面时,选区会自动清除。
  • updatedAt — 最近一次导航或选区变更的 ISO 时间戳。用它判断数据是否过时。

何时使用

  • 用户以指示性方式提及当前幻灯片或页面:“这个”“这里”“我所在的页面”“我正在看的幻灯片”“我正在处理的内容”。
  • 用户提及某个具体元素:“这个标题”“这张图片”“我刚刚点的按钮”“收紧这里”“更改这个颜色”。如果 selection 不为 null,它就是用户所指的元素。
  • 在询问“哪张幻灯片?”或“哪个元素?”以澄清之前——先检查这个文件。
  • 在根据 git log、最近编辑的文件或最近的幻灯片文件夹进行猜测之前。

何时不使用

  • 用户明确指定了幻灯片(“编辑 q2-roadmap”)——直接使用该名称。
  • apply-comments 工作流已通过 @slide-comment 标记找到正确文件,无需使用此技能。
  • 列出或查找幻灯片时——直接读取 slides/。

陈旧状态 — 操作前先确认

updatedAt 是用户上次导航的时间。请像对待缓存一样看待它:

  • 新鲜(不到约 5 分钟):信任它。打开 pagePath,开始处理。
  • 超过约 5 分钟:编辑前先向用户确认。开发服务器可能未在运行;用户也可能已切换上下文。
  • 已过数小时/数天:忽略它。询问用户指的是哪张幻灯片。

与上一轮看到的值相比,较新的 updatedAt 是用户已切换内容的常见信号——直接切换到新的 slideId / pageIndex / selection,无需询问。

文件缺失时

  • 开发服务器尚未打开过任何幻灯片,或者从未运行过。
  • 不要创建文件,也不要猜测。询问用户指的是哪张幻灯片,或建议他们先在开发服务器中打开幻灯片。

示例 — 页面级引用

用户:“调整此页面的间距”

  1. 读取 node_modules/.open-slide/current.json。
  2. 检查 updatedAt 是否为近期时间。
  3. 读取 pagePath(例如 slides/q2-roadmap/index.tsx)。
  4. 在默认导出的数组中找到 pageIndex 对应的页面。
  5. 查阅 slide-authoring 技能中的间距规则,然后就地编辑该页面。
  6. 若要直观检查结果,请在开发服务器上截取 s/<slideId>/preview?p=<pageNumber> 的屏幕截图——参见 slide-authoring 中的 Previewing a page visually。

如果 current.json 缺失或已过时,请询问:“要调整哪张幻灯片的哪一页?开发服务器最近没有发布当前页面。”

示例 — 元素级引用

用户:“把这个调大”

  1. 读取 node_modules/.open-slide/current.json。
  2. 如果 selection 不为 null,用户指的就是该元素。读取 pagePath,跳转到 selection.line,并找到该行/列附近的 JSX 开始标签。根据 selection.text 中的代码片段和 tagName 确认。
  3. 编辑前,查阅 slide-authoring 中的字号比例和布局规则。
  4. 就地编辑该 JSX 节点。

如果 selection 为 null,则回退到上述页面级流程——并考虑询问“是哪个元素?”,因为用户使用了指示性说法,但尚未在检查器中选中元素。

评论

支持 Markdown