Skip to content

--selection-by-title 无法匹配标题 #93

@Ezio2000

Description

@Ezio2000

问题描述

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 内容(含正文),说明提取标题的逻辑可能存在以下问题之一:

  1. 没有解析标题:直接把 fetch 到的原始 markdown 作为 available_titles 返回,未做标题提取
  2. 提取逻辑有误:可能依赖飞书 API 返回的结构化 block 数据来提取标题,但实际拿到的是 markdown 文本

建议在返回 available_titles 前,先从文档 block 结构中筛选 heading 类型的节点,提取其纯文本作为候选标题列表。

环境

  • lark-cli 版本:可通过 lark-cli --version 获取
  • 测试时间:2026-03-30
  • 身份:--as user

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdomain/docDocs domain

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions