统一的石墨文档导出 AI Skill。当前支持三个模块:auth(认证管理)、file-management(文件浏览)、export(导出下载)。
你是一个安静高效的助手,不是一个解说员。
已将「思维模式」下载到 abc/思维模式.md找到 3 个匹配文件:…先验证凭证,然后搜索文件。~~正在调用搜索 API…~~browser-login.cjs 启动登录流程,告知用户"正在打开浏览器,请完成登录",而不是让用户手动运行命令。batch-export.cjs 一条命令完成。找到 N 篇匹配文档: + 表格(名称、类型、路径)已将「文档名」导出为 xxx 格式,保存到 path共导出 N 篇文档到 path 目录(M 成功,K 失败) + 成功/失败明细表根目录下共 N 个项目: + 表格(名称、类型)已登录石墨,用户:xxx> 安全说明: 此 skill 仅与 石墨文档官方 API (shimo.im) 通信。凭证仅作为 HTTP Cookie 发送到 shimo.im,不会发送到任何其他域名。凭证文件权限为 0600,config/ 目录已加入 .gitignore。禁止在对话中接收或输出 cookie 值。
首次使用或凭证失效时,Agent 应直接运行 browser-login.cjs 启动登录流程,无需让用户手动执行任何命令。
Agent 处理流程:
node /auth/scripts/browser-login.cjs (设置 timeout 300000ms)> 浏览器代理登录无需安装任何额外工具,仅依赖 Node.js 内置模块。如果用户选择通过环境变量配置 shimo_sid,参见 auth/SKILL.md。
每次操作前,先通过预检获取凭证并设为环境变量:
# 验证凭证(人类可读输出)
node <skill-path>/auth/scripts/preflight-check.cjs
# 获取纯 cookie 值(用于传给后续脚本)
SHIMO_COOKIE=$(node <skill-path>/auth/scripts/preflight-check.cjs --raw)
预检脚本从环境变量 SHIMO_COOKIE 或 config/env.json 加载凭证。--raw 模式仅输出纯 cookie 值到 stdout,供 Agent 捕获后作为环境变量传递给后续脚本。
所有业务脚本仅从 process.env.SHIMO_COOKIE 读取凭证,不读取任何文件。
所有操作通过独立的 Node.js 脚本执行,凭证通过环境变量 SHIMO_COOKIE 传入,输出 JSON 到 stdout。
Agent 调用模式:先获取 cookie,再通过环境变量传入:
SHIMO_COOKIE=$(node <skill-path>/auth/scripts/preflight-check.cjs --raw) node <skill-path>/file-management/scripts/search.cjs --keyword <关键词>
| 脚本 | 用法 | 功能 |
|---|---|---|
| ------ | ------ | ------ |
search.cjs | SHIMO_COOKIE=$C node | 搜索文件 |
list-files.cjs | SHIMO_COOKIE=$C node | 列出文件/文件夹 |
list-spaces.cjs | SHIMO_COOKIE=$C node | 获取团队空间 |
| 脚本 | 用法 | 功能 |
|---|---|---|
| ------ | ------ | ------ |
batch-export.cjs | SHIMO_COOKIE=$C node | 一键批量导出 |
batch-export.cjs | SHIMO_COOKIE=$C node | 导出文件夹下所有文件 |
batch-export.cjs | SHIMO_COOKIE=$C node | 导出根目录所有文件 |
export-helper.cjs | SHIMO_COOKIE=$C node | 导出单个文件 |
> 表格中 $C 代表 $(node ,Agent 实际调用时用完整命令替换。
| 脚本 | 用法 | 功能 |
|---|---|---|
| ------ | ------ | ------ |
browser-login.cjs | node | 启动本地反向代理引导浏览器登录(推荐) |
preflight-check.cjs | node | 验证凭证有效性 |
preflight-check.cjs --raw | node | 输出纯 cookie 值(供环境变量传递) |
> API 参考:如需直接使用 HTTP API(如 curl),请参考各模块的 references/api.md。所有请求必须携带 5 个 headers(Referer、Accept、X-Requested-With、Cookie、User-Agent),缺一不可。
| 文档类型 | API type 值 | 支持格式 | 默认格式 |
|---|---|---|---|
| --------- | ------------ | --------- | --------- |
| 新版文档 | newdoc | md, jpg, docx, pdf | md |
| 传统文档 | modoc | docx, wps, pdf | docx |
| 表格 | mosheet | xlsx | xlsx |
| 幻灯片 | presentation | pptx, pdf | pptx |
| 思维导图 | mindmap | xmind, jpg | xmind |
| 表单/白板/画板 | table, board, form | 不支持导出 | — |
类型映射规则(API 返回的 type 可能有变体):
ppt / pptx → presentationsheet → mosheetdoc → newdoc(兜底)mind → mindmap(兜底)当用户意图不够明确时,Agent 应主动引导用户补充信息。以下是常见场景和引导方式:
当用户说"导出文档"、"下载文件"等模糊意图时,Agent 应询问:
./download,并告知用户| 用户说的 | Agent 行为 |
|---|---|
| --------- | ----------- |
| "导出 redis 相关文档" | 直接运行 batch-export.cjs --keyword redis --output ./download |
| "下载所有文档到 ~/Desktop/shimo" | 运行 batch-export.cjs --all --output ~/Desktop/shimo |
| "把 xxx 文件夹的文件导出为 PDF" | 先搜索文件夹获取 guid,再运行 batch-export.cjs --folder |
| "导出文档" (模糊) | 询问导出范围和目录 |
| "查找 xxx 文档" | 用 search.cjs 搜索,展示结果,等待用户指示是否导出 |
batch-export.cjs:搜索+导出的复合任务,一条命令完成./download:用户未指定时使用此目录| 用户意图 | 模块 | 读取 |
|---|---|---|
| --------- | ------ | ------ |
| 登录、扫码、认证、cookie 过期、重新登录 | auth | auth/SKILL.md |
| 搜索文件、查找文档、列出文件、浏览文件夹、查看团队空间、扫描所有文件 | file-management | file-management/SKILL.md |
| 导出文件、下载文档、批量导出、转换格式、查看导出进度 | export | export/SKILL.md |
> 搜索优先原则:当用户要查找特定文件时,优先使用搜索 API(POST /lizard-api/search_v2/files),比递归扫描快得多。只有在需要获取完整文件树时才使用递归扫描。
| 用户说的 | 实际意图 | 正确路由 |
|---|---|---|
| --------- | --------- | --------- |
| "帮我导出石墨文档" | 需要知道范围 | 询问关键词/文件夹,然后 batch-export.cjs 一键完成 |
| "下载我所有的文件" | 批量导出 | batch-export.cjs --all --output ./download |
| "登录失败" / "token 过期" | 凭证问题 | auth — 重新扫码登录 |
| "导出为 PDF" | 单文件导出(需要知道文件 ID) | 先问用户哪个文件,或用 file-management 查找 → export |
| "查看我有哪些文件" | 仅浏览,不导出 | file-management |
| "把表格导出为 markdown" | 格式不支持(mosheet 只支持 xlsx) | 告知用户不支持,建议 xlsx |
核心判断规则:
> 多模块任务:当用户意图涉及多个模块时,按意图顺序依次读取对应的模块文档并逐步执行。先完成前一个模块的操作,再进入下一个模块。
3000 + Math.random() * 2000 ms)。不遵守会触发 HTTP 429。min(1000 * 2^attempt, 16000) + random(0, 1000) ms,最多 5 次轮询。\/<>:"|?* 字符需替换为 _,首尾的 . 需去除。shimo_sid 是会话 cookie,有效期有限。任何 API 调用返回 401 时,提示用户使用方式 A 重新扫码登录。downloadUrl 返回的是重定向链接,curl 必须使用 -L 参数,Node.js fetch 需 redirect: 'follow'。链接是临时的,必须立即下载,不可缓存。共 1 个版本