问题描述
docs +update 的 --selection-by-title 参数在所有场景下都无法匹配标题,始终返回 未找到匹配的标题 错误。
错误信息中的 available_titles 字段返回的是整个文档的 markdown 全文,而不是解析出的标题列表,导致匹配逻辑必然失败。
复现步骤
1. 创建一个包含多章节标题的文档
lark-cli docs +create \
--title "测试文档" \
--markdown "## 第一章\n\n第一章的内容。\n\n## 第二章\n\n第二章的内容。\n\n## 第三章\n\n第三章的内容。"
返回成功,拿到 doc_id。
2. 用 --selection-by-title 尝试删除章节
lark-cli docs +update \
--doc "<doc_id>" \
--mode delete_range \
--selection-by-title "第二章"
3. 实际返回
{
"ok": false,
"error": {
"type": "mcp_error",
"message": "MCP: [VALIDATION:1101] 未找到匹配的标题",
"context": {
"title": "第二章",
"available_titles": "## 第一章\\n\\n第一章的内容。\\n\\n## 第二章\\n\\n第二章的内容。\\n\\n## 第三章\\n\\n第三章的内容。\n"
}
}
}
4. 预期行为
available_titles 应返回 ["第一章", "第二章", "第三章"](标题文本列表)
--selection-by-title "第二章" 应匹配成功并删除该章节
影响范围
以下 mode + --selection-by-title 组合全部不可用:
replace_range --selection-by-title — 无法按标题替换章节
delete_range --selection-by-title — 无法按标题删除章节
目前只能用 --selection-with-ellipsis 作为替代。
分析
available_titles 的值是文档完整 markdown 内容(含正文),说明提取标题的逻辑可能存在以下问题之一:
- 没有解析标题:直接把 fetch 到的原始 markdown 作为 available_titles 返回,未做标题提取
- 提取逻辑有误:可能依赖飞书 API 返回的结构化 block 数据来提取标题,但实际拿到的是 markdown 文本
建议在返回 available_titles 前,先从文档 block 结构中筛选 heading 类型的节点,提取其纯文本作为候选标题列表。
环境
- lark-cli 版本:可通过
lark-cli --version 获取
- 测试时间:2026-03-30
- 身份:
--as user
问题描述
docs +update的--selection-by-title参数在所有场景下都无法匹配标题,始终返回未找到匹配的标题错误。错误信息中的
available_titles字段返回的是整个文档的 markdown 全文,而不是解析出的标题列表,导致匹配逻辑必然失败。复现步骤
1. 创建一个包含多章节标题的文档
返回成功,拿到
doc_id。2. 用
--selection-by-title尝试删除章节3. 实际返回
{ "ok": false, "error": { "type": "mcp_error", "message": "MCP: [VALIDATION:1101] 未找到匹配的标题", "context": { "title": "第二章", "available_titles": "## 第一章\\n\\n第一章的内容。\\n\\n## 第二章\\n\\n第二章的内容。\\n\\n## 第三章\\n\\n第三章的内容。\n" } } }4. 预期行为
available_titles应返回["第一章", "第二章", "第三章"](标题文本列表)--selection-by-title "第二章"应匹配成功并删除该章节影响范围
以下 mode +
--selection-by-title组合全部不可用:replace_range --selection-by-title— 无法按标题替换章节delete_range --selection-by-title— 无法按标题删除章节目前只能用
--selection-with-ellipsis作为替代。分析
available_titles的值是文档完整 markdown 内容(含正文),说明提取标题的逻辑可能存在以下问题之一:建议在返回 available_titles 前,先从文档 block 结构中筛选 heading 类型的节点,提取其纯文本作为候选标题列表。
环境
lark-cli --version获取--as user