PicoBot/.agents/skills/lark-doc/references/lark-doc-media-insert.md
ooodc a7883dbed9 refactor(todo): 重构待办事项管理逻辑及更新状态规则
- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段
- 强制每个任务都必须有唯一 id,且由用户负责生成
- 修改合并模式逻辑,merge=true 下保留未提及的旧任务
- 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress)
- 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled
- 优化状态转换校验,允许特定状态间合法切换
- 简化任务变更消息,移除详细的新增/更新/移除统计
- 更新文档和示例,明确 id 必须由用户生成和使用
- 修复和补充测试,增强状态转换和合并模式验证
- 调整任务时间戳生成逻辑,统一使用当前时间及索引
- 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
2026-06-13 09:22:33 +08:00

6.8 KiB
Raw Blame History

docs +media-insert文档末尾插入图片/文件)

前置条件: 先阅读 ../lark-shared/SKILL.md 了解认证、全局参数和安全规则。

把"创建空 block → 上传文件 → 设置 token"三步合并成一个命令,在文档末尾插入本地图片或文件。

来源选择Agent 必读)

最高优先级:用户明确指定了来源,就严格按用户的来。 下面的启发式只在用户没表态时生效。

  • 用户说"把这张截图插进去"、"用剪切板里的图"、"我刚复制的" → 无条件走 --from-clipboard
  • 用户说"用 ~/Downloads/foo.png"、"插本地这个文件"、给了具体路径 → 无条件走 --file
  • 用户两者都没说清 → 按下表的启发式推断。

即使推断看起来更"优"(比如用户说了路径但你觉得走剪切板更省事),也不要自作主张换来源。要换,先问。

按下列顺序判断,不要反向做

用户的图片来源 命令 禁止做法
图片已经在剪切板里(截图快捷键、从飞书/浏览器复制、从设计稿复制) --from-clipboard 不要先把剪切板存到本地文件再用 --file。多一步文件 I/O还得清理临时文件。
图片是磁盘上的真实文件 --file <path>
图片是 URL 先下载到本地 → --file;或用 drive 相关命令

--from-clipboard 走进程内存直传不产生临时文件macOS / Windows 内置支持Linux 需要 xclipwl-pastexsel 任一。

剪切板为空时的 fallback

--from-clipboard 失败(剪切板里不是图片 / 没有图片 / Linux 上三个工具都没装)时,命令会返回 clipboard contains no image data(或类似的平台错误)。这不是错误退出理由,而是 fallback 信号。

Agent 的标准处置顺序(每一步失败再进下一步,不要并行):

  1. 先用 --from-clipboard 试一次。
  2. 如果返回"no image data"类错误,向用户明确说明剪切板里没有可识别的图片,请用户提供本地文件路径或重新复制一张图。
  3. 拿到本地路径后,用 --file <path> 重试同一条插入命令(其他参数如 --doc / --align / --caption 保持不变)。

禁止做法

  • 不要悄悄把空剪切板当"成功但没插入"处理。必须提示用户。
  • 不要在剪切板失败后自行瞎猜某个本地文件路径(比如最近修改的 png。必须让用户给路径。
  • 不要用"先让用户保存剪切板到磁盘再 --file"的建议绕过 --from-clipboard,当且仅当剪切板确实没图片时才退回本地路径。

命令

# 🟢 推荐:从剪切板直接插入(无需先存盘)
lark-cli docs +media-insert --doc doxcnXXX --from-clipboard

# 从本地文件插入
# 除了上传本地文件,还可以在 `docs +update` 时直接通过网络 URL 插入图片,无需先下载到本地:
lark-cli docs +update --api-version v2 --doc "<doc_id>" --command block_insert_after \
  --block-id "目标 block_id" \
  --content '<img href="https://example.com/photo.png"/>'

# 插入图片(默认)
lark-cli docs +media-insert --doc doxcnXXX --file ./image.png

# doc 支持直接传 docx URL自动提取 document_id
lark-cli docs +media-insert --doc "https://xxx.feishu.cn/docx/doxcnXXX" --from-clipboard

# 如果上一步是 create-doc优先传返回值里的 doc_id
# 不要把 /wiki/... 形式的 doc_url 直接传给 docs +media-insert
lark-cli docs +media-insert --doc doxcnReturnedByCreateDoc --file ./image.png

# 插入文件(非图片)
lark-cli docs +media-insert --doc doxcnXXX --file ./spec.pdf --type file

# 图片对齐与描述caption
lark-cli docs +media-insert --doc doxcnXXX --from-clipboard --align center --caption "架构图"

# Insert image with explicit display width (height auto-computed from aspect ratio)
lark-cli docs +media-insert --doc doxcnXXX --file ./banner.png --width 800 --align center

# Insert image with explicit width and height
lark-cli docs +media-insert --doc doxcnXXX --from-clipboard --width 800 --height 447 --caption "architecture diagram"

参数

参数 必填 说明
--doc <id> 文档 ID 或 docx URL仅支持 /docx/<document_id> 形式自动提取;不支持 /wiki/... URL 自动提取
--from-clipboard 二选一 从系统剪切板读取图片(与 --file 互斥。macOS/Windows 内置支持Linux 需要 xclip / wl-paste / xsel 之一。
--file <path> 二选一 本地文件路径(文件大于 20MB 时自动切换分片上传)
--type <type> image(默认)或 file--from-clipboard 目前只产出 image。
--align <align> 仅图片:left / center(默认)/ right
--caption <text> 仅图片:图片描述
--width <px> Image display width in pixels (only for --type=image). If --height is omitted, it is auto-computed from the source image aspect ratio. Supported auto-detection formats: PNG, JPEG, GIF; other formats (WebP, BMP, etc.) require both --width and --height.
--height <px> Image display height in pixels (only for --type=image). If --width is omitted, it is auto-computed from the source image aspect ratio. Supported auto-detection formats: PNG, JPEG, GIF; other formats (WebP, BMP, etc.) require both --width and --height.

Important

如果上一步是 lark-doc-create,并且它在知识库/知识空间场景下返回的是 /wiki/... 形式的 doc_url,后续调用 docs +media-insert 时应优先传 doc_id,不要直接传这个 doc_url

平台注意(仅 --from-clipboard

平台 依赖 典型错误
macOS osascript内置 剪切板为空 / 不是图片 → "clipboard contains no image data"
Windows PowerShell + System.Windows.Forms内置 同上
Linux xclipwl-pastexsel 任一 都没安装 → 报错会提示用发行版包管理器安装

命令不支持读取 TIFF 等非 PNG/JPEG/GIF/WebP/BMP 的冷门格式;遇到这类剪切板会返回 "contains no image data",此时才考虑先用系统工具转成文件再 --file

输出

命令成功后会输出 JSON包含document_idblock_idfile_tokenfile_name(剪切板路径下为 clipboard.png)、type

Caution

这是写入操作(会修改文档内容)—— 执行前必须确认用户意图。

参考

  • lark-doc-fetch — 获取文档内容(可用于确认插入后的结果、以及提取媒体 token
  • lark-shared — 认证和全局参数