From 6f542aafe2e29209b1abe9a00cf1c480db6e9e22 Mon Sep 17 00:00:00 2001 From: liujinkun Date: Fri, 31 Jul 2026 15:42:49 +0800 Subject: [PATCH 1/2] docs(wiki): route node resolution through shortcut --- .../lark-drive/references/lark-drive-apply-permission.md | 2 +- skills/lark-slides/SKILL.md | 4 ++-- skills/lark-wiki/SKILL.md | 8 +++++--- skills/lark-wiki/references/lark-wiki-delete-space.md | 7 ++++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/skills/lark-drive/references/lark-drive-apply-permission.md b/skills/lark-drive/references/lark-drive-apply-permission.md index f61877ff77..e9f225ccb7 100644 --- a/skills/lark-drive/references/lark-drive-apply-permission.md +++ b/skills/lark-drive/references/lark-drive-apply-permission.md @@ -70,7 +70,7 @@ API 成功时返回空 `data`(仅 `code: 0, msg: "success"`),对应 CLI ## 与 wiki URL 的关系 -传入 `/wiki/` 时,shortcut 会直接用 `node_token` 作为路径参数并以 `type=wiki` 调用接口。如果需要先把 wiki 节点解析成 `obj_token`(例如想显式对底层 docx 申请),自行先调 `wiki spaces get_node` 拿 `obj_token + obj_type`,再用 bare token + `--type docx` 调本命令。 +传入 `/wiki/` 时,shortcut 会直接用 `node_token` 作为路径参数并以 `type=wiki` 调用接口。如果需要先把 wiki 节点解析成 `obj_token`(例如想显式对底层 docx 申请),先调 `wiki +node-get --node-token '' --as user --format json`,从顶层读取 `obj_token + obj_type`,再用 bare token + `--type docx` 调本命令。 ## 参考 diff --git a/skills/lark-slides/SKILL.md b/skills/lark-slides/SKILL.md index 9232dd65bd..b953d25387 100644 --- a/skills/lark-slides/SKILL.md +++ b/skills/lark-slides/SKILL.md @@ -274,10 +274,10 @@ N. 结尾页:[结尾文案] ### Wiki 链接特殊处理(关键!) -知识库链接(`/wiki/TOKEN`)不能直接当 `xml_presentation_id`。直接调用原生 API 前,先查询 wiki 节点,确认 `node.obj_type == "slides"`,再用 `node.obj_token` 作为真实 presentation ID。 +知识库链接(`/wiki/TOKEN`)不能直接当 `xml_presentation_id`。直接调用原生 API 前,先用 Wiki shortcut 查询节点,确认顶层 `obj_type == "slides"`,再用顶层 `obj_token` 作为真实 presentation ID。 ```bash -lark-cli wiki spaces get_node --as user --params '{"token":"wiki_token"}' +lark-cli wiki +node-get --node-token '' --as user --format json ``` Shortcut `+replace-slide` 和 `+media-upload` 会自动解析 `/wiki/` URL;手动调用 `xml_presentations.*` / `xml_presentation.slide.*` 时才需要自己做这一步。 diff --git a/skills/lark-wiki/SKILL.md b/skills/lark-wiki/SKILL.md index cca107c45e..3a997bda3e 100644 --- a/skills/lark-wiki/SKILL.md +++ b/skills/lark-wiki/SKILL.md @@ -27,14 +27,14 @@ metadata: - 用户要**按特定主题 / 关键词 / 内容线索查找资料并收集到知识库节点或新建知识库节点下**,必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`topic_move_collector`](../lark-drive/references/lark-drive-workflow-topic-move-collector.md) workflow。该 workflow 使用 Drive 全量搜索召回,再按 Wiki 目标解析、确认和移动;不要只用 Wiki 节点列表做局部遍历。 - 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](../lark-drive/references/lark-drive-workflow-knowledge-organize.md) workflow;该 workflow 负责 Drive / Wiki / 个人文档库的统一入口解析、资源盘点、分类计划、写前确认和结果验证。 - 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:使用 `wiki +move-to-drive`,不要使用 `wiki +move` 或 `drive +move`。这是会改变节点归属和权限继承的写操作,执行前确认源节点与目标位置。 -- 用户给的是知识库 URL(`.../wiki/`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki spaces get_node --params '{"token":""}'` 获取 `space_id`,后续成员接口统一使用 `space_id`。 +- 用户给的是知识库 URL(`.../wiki/`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki +node-get --node-token '' --as user --format json` 获取顶层 `space_id`,后续成员接口统一使用 `space_id`。 - 用户要**删除**知识空间(`wiki +delete-space`)但只给了名称或 URL:**不能**把名称 / URL 原样传给 `--space-id`,必须先解析出真实 `space_id`。解析方式: - - URL(`.../wiki/`):`lark-cli wiki spaces get_node --params '{"token":""}' --format json`,读 `data.node.space_id`。 + - URL(`.../wiki/`):`lark-cli wiki +node-get --node-token '' --as user --format json`,读顶层 `space_id`。 - 只知名称:`lark-cli wiki spaces list --format json`,边翻页边收集 items 并按 `name` 精确匹配;**一旦任一页累计到至少 1 条精确匹配就停止翻页**。只有当翻完所有页(`has_more=false`)仍无精确匹配时,才对已收集的全量 items 做宽松匹配(`name` trim 空格、大小写不敏感、子串包含)。 - **关键安全约束**:无论精确还是模糊,**无论命中 1 条还是多条,发起删除前都必须把候选(`name` + `space_id` + `description` + `space_type`)列给用户,由用户明确选定一个 `space_id` 再执行**。不要因为"只命中一条"就自动执行删除。 - 命中 0 条:停下来问用户是名称拼错了还是调用方无权限;**不要**自行改名字重试。 - 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id --yes`(高风险写操作,必须显式 `--yes`)。 - - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/"`);务必先用 `wiki spaces get_node` 解析出 `data.node.space_id` 再传。 + - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/"`);务必先用 `wiki +node-get` 解析出顶层 `space_id` 再传。 - 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。 - 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id `。不要把 wiki URL、node token、doc token、名称直接当 `--space-id`。钻子节点时 `--parent-node-token` 必须是 wiki node token;如果用户给的是 docx/sheet/base URL,先用 `wiki +node-get --node-token ` 解析出 `node_token`。 - `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。 @@ -48,6 +48,8 @@ metadata: Shortcut 是对常用操作的高级封装(`lark-cli wiki + [flags]`)。有 Shortcut 的操作优先使用。 +获取或解析 Wiki 节点统一优先使用 `wiki +node-get`,包括只为获取 `space_id`、`node_token`、`obj_token` 或 `obj_type` 的中间步骤。只有当前 CLI 不提供该 shortcut,或任务明确需要 shortcut 未输出的原始响应字段时,才回退到 `wiki spaces get_node`;回退前先运行 `lark-cli schema wiki.spaces.get_node`。 + | Shortcut | 说明 | |----------|------| | [`+move`](references/lark-wiki-move.md) | Move a wiki node, or move a Drive document into Wiki | diff --git a/skills/lark-wiki/references/lark-wiki-delete-space.md b/skills/lark-wiki/references/lark-wiki-delete-space.md index 3218a92818..3bf26db350 100644 --- a/skills/lark-wiki/references/lark-wiki-delete-space.md +++ b/skills/lark-wiki/references/lark-wiki-delete-space.md @@ -118,12 +118,13 @@ dry-run 会展示两步调用链: ### 2. 只有知识库 URL(`.../wiki/`) ```bash -lark-cli wiki spaces get_node \ - --params '{"token":""}' \ +lark-cli wiki +node-get \ + --node-token '' \ + --as user \ --format json ``` -读取 `data.node.space_id`。 +读取顶层 `space_id`。只有当前 CLI 不提供 `+node-get`,或必须读取 shortcut 未输出的原始字段时,才在查看 `lark-cli schema wiki.spaces.get_node` 后回退到原生命令。 ### 3. 只有知识库名称 From 8e19aae336465c4d5d044623d3df73a21f3f194d Mon Sep 17 00:00:00 2001 From: liujinkun Date: Fri, 31 Jul 2026 18:32:30 +0800 Subject: [PATCH 2/2] docs(wiki): address node routing review feedback --- skills/lark-drive/references/lark-drive-apply-permission.md | 2 +- skills/lark-slides/SKILL.md | 2 +- skills/lark-wiki/SKILL.md | 6 +++--- skills/lark-wiki/references/lark-wiki-delete-space.md | 4 +++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/skills/lark-drive/references/lark-drive-apply-permission.md b/skills/lark-drive/references/lark-drive-apply-permission.md index e9f225ccb7..afb006c3ea 100644 --- a/skills/lark-drive/references/lark-drive-apply-permission.md +++ b/skills/lark-drive/references/lark-drive-apply-permission.md @@ -70,7 +70,7 @@ API 成功时返回空 `data`(仅 `code: 0, msg: "success"`),对应 CLI ## 与 wiki URL 的关系 -传入 `/wiki/` 时,shortcut 会直接用 `node_token` 作为路径参数并以 `type=wiki` 调用接口。如果需要先把 wiki 节点解析成 `obj_token`(例如想显式对底层 docx 申请),先调 `wiki +node-get --node-token '' --as user --format json`,从顶层读取 `obj_token + obj_type`,再用 bare token + `--type docx` 调本命令。 +传入 `/wiki/` 时,shortcut 会直接用 `node_token` 作为路径参数并以 `type=wiki` 调用接口。如果需要先把 wiki 节点解析成 `obj_token`(例如想显式对底层 docx 申请),先使用与后续权限申请相同的身份调用 `wiki +node-get --node-token '' --as user --format json`(下游使用 bot 时两步都改为 `--as bot`),读取 `data.obj_token` 和 `data.obj_type`,再把 bare `obj_token` 传给 `--token`、把真实 `obj_type` 传给 `--type`(例如 `data.obj_type` 为 `docx` 时使用 `--type docx`)。 ## 参考 diff --git a/skills/lark-slides/SKILL.md b/skills/lark-slides/SKILL.md index b953d25387..bf3870fb63 100644 --- a/skills/lark-slides/SKILL.md +++ b/skills/lark-slides/SKILL.md @@ -274,7 +274,7 @@ N. 结尾页:[结尾文案] ### Wiki 链接特殊处理(关键!) -知识库链接(`/wiki/TOKEN`)不能直接当 `xml_presentation_id`。直接调用原生 API 前,先用 Wiki shortcut 查询节点,确认顶层 `obj_type == "slides"`,再用顶层 `obj_token` 作为真实 presentation ID。 +知识库链接(`/wiki/TOKEN`)不能直接当 `xml_presentation_id`。直接调用原生 API 前,先用 Wiki shortcut 查询节点,确认 `data.obj_type == "slides"`,再用 `data.obj_token` 作为真实 presentation ID。 ```bash lark-cli wiki +node-get --node-token '' --as user --format json diff --git a/skills/lark-wiki/SKILL.md b/skills/lark-wiki/SKILL.md index 3a997bda3e..e3077f6219 100644 --- a/skills/lark-wiki/SKILL.md +++ b/skills/lark-wiki/SKILL.md @@ -27,14 +27,14 @@ metadata: - 用户要**按特定主题 / 关键词 / 内容线索查找资料并收集到知识库节点或新建知识库节点下**,必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`topic_move_collector`](../lark-drive/references/lark-drive-workflow-topic-move-collector.md) workflow。该 workflow 使用 Drive 全量搜索召回,再按 Wiki 目标解析、确认和移动;不要只用 Wiki 节点列表做局部遍历。 - 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](../lark-drive/references/lark-drive-workflow-knowledge-organize.md) workflow;该 workflow 负责 Drive / Wiki / 个人文档库的统一入口解析、资源盘点、分类计划、写前确认和结果验证。 - 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:使用 `wiki +move-to-drive`,不要使用 `wiki +move` 或 `drive +move`。这是会改变节点归属和权限继承的写操作,执行前确认源节点与目标位置。 -- 用户给的是知识库 URL(`.../wiki/`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki +node-get --node-token '' --as user --format json` 获取顶层 `space_id`,后续成员接口统一使用 `space_id`。 +- 用户给的是知识库 URL(`.../wiki/`),且后续要查成员/加成员/删成员:先确定下游成员操作的身份(默认 `user`;用户明确要求应用 / bot 视角时用 `bot`),再调用 `lark-cli wiki +node-get --node-token '' --as user --format json`,从 `data.space_id` 获取空间 ID;下游使用 bot 时将示例中的身份改为 `--as bot`。节点解析与后续成员操作必须使用相同身份。 - 用户要**删除**知识空间(`wiki +delete-space`)但只给了名称或 URL:**不能**把名称 / URL 原样传给 `--space-id`,必须先解析出真实 `space_id`。解析方式: - - URL(`.../wiki/`):`lark-cli wiki +node-get --node-token '' --as user --format json`,读顶层 `space_id`。 + - URL(`.../wiki/`):先确定后续 `wiki +delete-space` 的身份(默认 `user`;明确要求 bot 视角时用 `bot`),再调用 `lark-cli wiki +node-get --node-token '' --as user --format json`,读取 `data.space_id`;下游使用 bot 时将示例中的身份改为 `--as bot`。解析和删除必须使用相同身份。 - 只知名称:`lark-cli wiki spaces list --format json`,边翻页边收集 items 并按 `name` 精确匹配;**一旦任一页累计到至少 1 条精确匹配就停止翻页**。只有当翻完所有页(`has_more=false`)仍无精确匹配时,才对已收集的全量 items 做宽松匹配(`name` trim 空格、大小写不敏感、子串包含)。 - **关键安全约束**:无论精确还是模糊,**无论命中 1 条还是多条,发起删除前都必须把候选(`name` + `space_id` + `description` + `space_type`)列给用户,由用户明确选定一个 `space_id` 再执行**。不要因为"只命中一条"就自动执行删除。 - 命中 0 条:停下来问用户是名称拼错了还是调用方无权限;**不要**自行改名字重试。 - 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id --yes`(高风险写操作,必须显式 `--yes`)。 - - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/"`);务必先用 `wiki +node-get` 解析出顶层 `space_id` 再传。 + - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/"`);务必先用 `wiki +node-get` 解析出 `data.space_id` 再传。 - 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。 - 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id `。不要把 wiki URL、node token、doc token、名称直接当 `--space-id`。钻子节点时 `--parent-node-token` 必须是 wiki node token;如果用户给的是 docx/sheet/base URL,先用 `wiki +node-get --node-token ` 解析出 `node_token`。 - `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。 diff --git a/skills/lark-wiki/references/lark-wiki-delete-space.md b/skills/lark-wiki/references/lark-wiki-delete-space.md index 3bf26db350..253a014d55 100644 --- a/skills/lark-wiki/references/lark-wiki-delete-space.md +++ b/skills/lark-wiki/references/lark-wiki-delete-space.md @@ -117,6 +117,8 @@ dry-run 会展示两步调用链: ### 2. 只有知识库 URL(`.../wiki/`) +先确定后续 `wiki +delete-space` 使用的身份:默认使用 `user`;用户明确要求应用 / bot 视角时使用 `bot`。下面展示默认 user 身份;下游使用 bot 时将两步都改为 `--as bot`。节点解析和删除必须使用相同身份。 + ```bash lark-cli wiki +node-get \ --node-token '' \ @@ -124,7 +126,7 @@ lark-cli wiki +node-get \ --format json ``` -读取顶层 `space_id`。只有当前 CLI 不提供 `+node-get`,或必须读取 shortcut 未输出的原始字段时,才在查看 `lark-cli schema wiki.spaces.get_node` 后回退到原生命令。 +读取 `data.space_id`。只有当前 CLI 不提供 `+node-get`,或必须读取 shortcut 未输出的原始字段时,才在查看 `lark-cli schema wiki.spaces.get_node` 后回退到原生命令。 ### 3. 只有知识库名称