@amaster.ai/pi-lark 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/skills/lark-apps/SKILL.md +2 -0
- package/skills/lark-apps/references/lark-apps-db.md +130 -2
- package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
- package/skills/lark-base/SKILL.md +155 -167
- package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
- package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
- package/skills/lark-base/references/lark-base-app.md +225 -0
- package/skills/lark-base/references/lark-base-cell-value.md +26 -19
- package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +37 -5
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +1 -1
- package/skills/lark-base/references/lark-base-dashboard.md +9 -9
- package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
- package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
- package/skills/lark-base/references/lark-base-data-query.md +8 -11
- package/skills/lark-base/references/lark-base-field-create.md +7 -50
- package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
- package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
- package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +15 -100
- package/skills/lark-base/references/lark-base-field-update.md +13 -51
- package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
- package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
- package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
- package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
- package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
- package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
- package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
- package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
- package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
- package/skills/lark-calendar/SKILL.md +2 -0
- package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
- package/skills/lark-doc/SKILL.md +3 -3
- package/skills/lark-doc/references/lark-doc-fetch.md +8 -3
- package/skills/lark-doc/references/lark-doc-update.md +12 -8
- package/skills/lark-drive/SKILL.md +5 -3
- package/skills/lark-drive/references/lark-drive-download.md +27 -1
- package/skills/lark-drive/references/lark-drive-export.md +1 -0
- package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
- package/skills/lark-drive/references/lark-drive-preview.md +21 -2
- package/skills/lark-drive/references/lark-drive-push.md +5 -1
- package/skills/lark-drive/references/lark-drive-search.md +2 -0
- package/skills/lark-im/SKILL.md +6 -1
- package/skills/lark-minutes/SKILL.md +11 -5
- package/skills/lark-minutes/references/lark-minutes-apply-permission.md +95 -0
- package/skills/lark-minutes/references/lark-minutes-detail.md +7 -6
- package/skills/lark-minutes/references/lark-minutes-download.md +4 -2
- package/skills/lark-note/SKILL.md +13 -9
- package/skills/lark-note/references/lark-note-detail.md +5 -2
- package/skills/lark-note/references/lark-note-transcript.md +2 -0
- package/skills/lark-shared/SKILL.md +36 -0
- package/skills/lark-slides/SKILL.md +54 -54
- package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
- package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
- package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
- package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
- package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
- package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
- package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
- package/skills/lark-slides/references/{lark-slides-update-slide.md → cli/lark-slides-update-slide.md} +21 -4
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
- package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
- package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
- package/skills/lark-slides/references/iconpark-index.json +5 -41901
- package/skills/lark-slides/references/iconpark.md +3 -44
- package/skills/lark-slides/references/lark-slides-add-slide.md +3 -90
- package/skills/lark-slides/references/lark-slides-create.md +3 -174
- package/skills/lark-slides/references/lark-slides-delete-slide.md +3 -63
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -141
- package/skills/lark-slides/references/lark-slides-history.md +3 -130
- package/skills/lark-slides/references/lark-slides-media-upload.md +3 -102
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
- package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -256
- package/skills/lark-slides/references/lark-slides-screenshot.md +3 -113
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -155
- package/skills/lark-slides/references/planning-layer.md +1 -1
- package/skills/lark-slides/references/slides_chart_demo.xml +5 -1415
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3512
- package/skills/lark-slides/references/troubleshooting.md +3 -60
- package/skills/lark-slides/references/validation-checklist.md +3 -154
- package/skills/lark-slides/references/workflow/error-handling.md +62 -0
- package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
- package/skills/lark-slides/references/workflow/template-editing.md +85 -0
- package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
- package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
- package/skills/lark-slides/references/xml/iconpark.md +46 -0
- package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
- package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3514 -0
- package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
- package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -495
- package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
- package/skills/lark-slides/scripts/xml_lint.py +2989 -0
- package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2975
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -4712
- package/skills/lark-task/SKILL.md +12 -0
- package/skills/lark-task/references/lark-task-create.md +3 -1
- package/skills/lark-vc/SKILL.md +15 -5
- package/skills/lark-vc/references/lark-vc-detail.md +11 -6
- package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-vc/references/lark-vc-meeting-events.md} +121 -20
- package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-vc/references/lark-vc-meeting-list-active.md} +2 -2
- package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-vc/references/lark-vc-meeting-message-send.md} +3 -3
- package/skills/lark-vc/references/lark-vc-recording.md +8 -6
- package/skills/lark-vc/references/vc-domain-boundaries.md +8 -1
- package/skills/lark-vc-agent/SKILL.md +24 -9
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +2 -2
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +2 -2
- package/skills/lark-wiki/SKILL.md +3 -1
- package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
- package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
- package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
- package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
- package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
- package/skills/lark-base/references/lark-base-data-query-guide.md +0 -69
- package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## 常用示例
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
#
|
|
8
|
+
# 读取整篇文档,并附带当前用户可见的未解决评论;
|
|
9
9
|
lark-cli docs +fetch --doc "文档URL或token"
|
|
10
10
|
|
|
11
11
|
# 按 URL 中的 #share 锚点局部读取
|
|
@@ -34,7 +34,6 @@ lark-cli docs +fetch --doc Z1Fj...tnAc --scope section --start-block-id blkTitle
|
|
|
34
34
|
|`--context-before`|否|返回命中项之前的顶层兄弟块数量(默认 `0`)|
|
|
35
35
|
|`--context-after`|否|返回命中项之后的顶层兄弟块数量(默认 `0`)|
|
|
36
36
|
|`--max-depth`|否|`outline` 表示标题层级上限;其它模式表示子树深度(默认 `-1`,不限)|
|
|
37
|
-
|`--format`|否|`json`(默认)\| `pretty`|
|
|
38
37
|
|
|
39
38
|
## 选择详细度:`--detail`
|
|
40
39
|
|
|
@@ -90,6 +89,11 @@ lark-cli docs +fetch --doc Z1Fj...tnAc --scope section --start-block-id blkTitle
|
|
|
90
89
|
"<ref>": {
|
|
91
90
|
"<real-attr-key>": "<real-attr-value>"
|
|
92
91
|
}
|
|
92
|
+
},
|
|
93
|
+
"comments": {
|
|
94
|
+
"c1": {
|
|
95
|
+
"data": "<comment comment-id=\"xx\" block-id=\"xx\"><quote>引用内容</quote><msg>评论内容</msg></comment>"
|
|
96
|
+
}
|
|
93
97
|
}
|
|
94
98
|
},
|
|
95
99
|
"tips": "<safe replay or degradation guidance>"
|
|
@@ -97,7 +101,8 @@ lark-cli docs +fetch --doc Z1Fj...tnAc --scope section --start-block-id blkTitle
|
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
103
|
```
|
|
100
|
-
`content` 的格式由 `--doc-format` 决定。`reference_map`
|
|
104
|
+
- `content` 的格式由 `--doc-format` 决定。`reference_map` 是结构化 sidecar,一级键表示引用组:普通资源组通常以 `block_type` 命名,二级键 `ref` 对应正文中的临时引用,其值由真实属性组成;保留组 `comments` 使用 `<ref>.data` 保存评论。XML、Markdown 和 IM Markdown 在存在可见评论时都会返回该组;Markdown 正文没有与评论 key 对应的内联引用,这是有意的协议设计。没有提取数据时,`reference_map` 可能为空。`comments.tips.data` 表示评论因数量上限被截断,文档顶层 `tips` 则给出安全回放或依赖降级提示。`content` 和 `reference_map` 属于同一份响应,应保留完整 JSON 响应;`im-markdown` 仅用于获取内容后在 `lark-im` 场景下使用。设置 `--scope` 时会被 `<fragment>` 包裹,详见下文“局部读取的输出结构”。
|
|
105
|
+
- 评论内容不保证全部返回,需要详细信息时使用 `drive +list-comments` 获取完整评论。
|
|
101
106
|
|
|
102
107
|
### 理解局部读取结果
|
|
103
108
|
|
|
@@ -13,12 +13,15 @@ lark-cli docs +fetch --doc "文档URL或token" --scope keyword --keyword "key1|k
|
|
|
13
13
|
# 替换文本;--content "" 可删除文本
|
|
14
14
|
lark-cli docs +update --doc "xx" --command str_replace --pattern "旧内容" --content "新内容"
|
|
15
15
|
|
|
16
|
-
#
|
|
16
|
+
# 替换单个 block,或同父连续范围内的 block
|
|
17
17
|
lark-cli docs +update --doc "xx" --command block_replace --block-id blkTarget --content '<p>新段落</p>'
|
|
18
|
+
lark-cli docs +update --doc "xx" --command block_replace --start-block-id blkFirst --end-block-id blkLast --content '<p></p>'
|
|
19
|
+
|
|
18
20
|
lark-cli docs +update --doc "xx" --command block_insert_after --block-id blkAnchor --content '<h2>新章节</h2><p>章节内容</p>'
|
|
19
21
|
|
|
20
|
-
#
|
|
21
|
-
lark-cli docs +update --doc "xx" --command block_delete --block-id
|
|
22
|
+
# 删除单个 block 或范围内的 block
|
|
23
|
+
lark-cli docs +update --doc "xx" --command block_delete --block-id blkA
|
|
24
|
+
lark-cli docs +update --doc "xx" --command block_delete --start-block-id blkFirst --end-block-id blkLast
|
|
22
25
|
```
|
|
23
26
|
|
|
24
27
|
## 推荐流程
|
|
@@ -29,8 +32,8 @@ lark-cli docs +update --doc "xx" --command block_delete --block-id "blkA,blkB"
|
|
|
29
32
|
- 只有模糊关键词:用 `--scope keyword --keyword "key1|key2" --context-before 1 --context-after 1 --detail with-ids`
|
|
30
33
|
- 明确整篇重构才读 `--detail with-ids` 全文;只读摘要或确认事实时用更轻的 fetch
|
|
31
34
|
2. **Diagnose(诊断问题)**:判断用户目标、当前结构、语气、重复、断流、事实口径和需要保留的资源;识别哪些 block 必须原样保留。
|
|
32
|
-
3. **Patch Plan(制定局部计划)**:把修改拆成最小安全操作:简单行内文本替换用 `str_replace
|
|
33
|
-
4. **Patch(精确修改)**:按 block / section
|
|
35
|
+
3. **Patch Plan(制定局部计划)**:把修改拆成最小安全操作:简单行内文本替换用 `str_replace`,但它不支持资源替换;单个 block 用一个 `--block-id`,同一直接父节点下的连续 block 用 `--start-block-id`/`--end-block-id`。连续范围适用于 `block_replace` 和 `block_delete`。整段/整块重写用 `block_replace`;增补章节用 `block_insert_after`;删冗余用 `block_delete`;调整顺序用 `block_move_after`。
|
|
36
|
+
4. **Patch(精确修改)**:按 block / section 执行局部命令。替换内容必须符合目标父容器的结构;例如替换列表项范围时使用 `<li>...</li>`。保护 `<cite>`、`<img>`、`<source>`、`<whiteboard>`、`<sheet>`、`<bitable>`、`<synced_reference>` 等 token 化内容,不要改成纯文本或占位符。同一 block 的多处修改合并成一次 `block_replace`。
|
|
34
37
|
5. **Verify(fetch 验证)**:每轮写操作后按影响范围重新 fetch,检查用户要求、结构、语气、事实、资源块和 block ID 是否符合预期;不满足就基于最新 fetch 结果继续 Diagnose / Patch,不要沿用上一轮 block ID。
|
|
35
38
|
|
|
36
39
|
除非用户明确要求完全重建,或原文已无保留价值,否则不要使用 `overwrite`;它可能丢失评论和暂不支持的资源。
|
|
@@ -51,7 +54,8 @@ lark-cli docs +update --doc "xx" --command block_delete --block-id "blkA,blkB"
|
|
|
51
54
|
|`--doc-format`|否|`xml`(默认)或 `markdown`|
|
|
52
55
|
|`--content`|视指令|写入内容;`str_replace` 传空字符串可删除文本|
|
|
53
56
|
|`--pattern`|视指令|`str_replace` 的简单行内匹配文本;不要用于多行、整段或多个 block|
|
|
54
|
-
|`--block-id`|视指令|目标 block ID
|
|
57
|
+
|`--block-id`|视指令|目标 block ID;`-1` 表示文档末尾,`0` 表示文档开头(仅适用于支持这些锚点的指令)|
|
|
58
|
+
|`--start-block-id` / `--end-block-id`|视指令|`block_replace` / `block_delete` 的同父连续闭区间,必须成对使用,且不能与 `--block-id` 混用;`--start-block-id` 用 `0` 表示从文档开头开始,`--end-block-id` 用 `-1` 表示到文档末尾结束|
|
|
55
59
|
|`--src-block-ids`|视指令|要复制或移动的源 block ID,多个 ID 用逗号分隔|
|
|
56
60
|
|`--reference-map`|否|保留或回放既有 `reference_map`,需与 `--content` 配合;支持 JSON、任务目录内的相对 `@file` 或 stdin `-`|
|
|
57
61
|
|`--revision-id`|否|基准版本号,默认 `-1`(最新版本)|
|
|
@@ -63,8 +67,8 @@ lark-cli docs +update --doc "xx" --command block_delete --block-id "blkA,blkB"
|
|
|
63
67
|
|`str_replace`|全文查找替换;支持富文本内的文本替换,但不支持资源替换;涉及多个 block 时建议用 `block_replace`;空 `--content` 表示删除|`--pattern`、`--content`|
|
|
64
68
|
|`block_insert_after`|在指定 block 后插入内容;逐章填充时指定对应标题的 block ID|`--block-id`、`--content`|
|
|
65
69
|
|`block_copy_insert_after`|按 ID 顺序复制源 block,源 block 不变;基础标签均支持,资源块仅支持 `img`、`source`、`whiteboard`、`sheet`、`chat_card`、`sub-page-list`,不支持 `task`、`bitable`、`base_ref`、`synced_reference`、`synced_source`、`okr`|`--block-id`、`--src-block-ids`|
|
|
66
|
-
|`block_replace
|
|
67
|
-
|`block_delete
|
|
70
|
+
|`block_replace`|替换单个 block(`--block-id`)或同父连续闭区间(`--start-block-id`/`--end-block-id`);不支持跨容器或反向区间|`--content`,以及 `--block-id` 或 `--start-block-id`+`--end-block-id`|
|
|
71
|
+
|`block_delete`|删除单个 block(`--block-id`)或同父连续闭区间(`--start-block-id`/`--end-block-id`);不支持跨容器或反向区间|`--block-id` 或 `--start-block-id`+`--end-block-id`|
|
|
68
72
|
|`block_move_after`|移动已有 block,支持所有块类型;|`--block-id`、`--src-block-ids`|
|
|
69
73
|
|`append`|仅在文末追加,等价于 `block_insert_after --block-id -1`|`--content`|
|
|
70
74
|
|`overwrite`|清空后重写全文,丢失图片、评论等内容,非必要不使用|`--content`|
|
|
@@ -21,17 +21,18 @@ metadata:
|
|
|
21
21
|
## 快速决策
|
|
22
22
|
|
|
23
23
|
- 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:切到 `lark-wiki`,使用 `lark-cli wiki +move-to-drive`;不要把 Wiki token 直接交给 `drive +move`。这是会改变文档归属和权限继承的写操作,执行前确认源节点与目标位置。
|
|
24
|
-
- 用户要**复制文档 / 创建副本
|
|
24
|
+
- 用户要**复制文档 / 创建副本 到云盘或者文件夹**时:已提供可直接使用的 URL 或 token,按 [`references/lark-drive-copy.md`](references/lark-drive-copy.md) 使用 `lark-cli drive +copy`;仅提供标题时,先按 [`references/lark-drive-search.md`](references/lark-drive-search.md) 使用 `drive +search` 唯一定位源资源,再按 copy reference 复制。如果是要复制文档 / 创建副本到知识库,使用 `wiki +node-copy`(见 [`lark-wiki-node-copy.md`](../lark-wiki/references/lark-wiki-node-copy.md))。
|
|
25
25
|
- 用户要**识别飞书 / doubao 云空间 URL 的类型和 token**时,可以先按 URL 路径形态做轻量判断;当路径已明确指向 docx / sheet / bitable / slides / file / folder 等资源时,可直接提取对应 token/type。传入 wiki URL、需要识别标题或 canonical URL、URL/token 有歧义,或后续操作依赖底层真实资源时,再使用 `lark-cli drive +inspect --url '<url>'` 进行识别;具体用法、失败处理和边界见 [`references/lark-drive-inspect.md`](references/lark-drive-inspect.md)。
|
|
26
26
|
- 高风险写操作(删除、公开权限修改、owner 转移、版本删除/回滚、批量移动/覆盖/同步)必须同时满足三个条件才执行:目标已解析为该操作可直接使用的执行对象,执行细节已明确到可直接调用命令(例如删除的 file-token/type、公开权限修改的共享范围、owner 转移的目标 owner、版本删除/回滚的 version id、移动/覆盖/同步的目标位置和冲突策略),且用户在本轮明确确认执行这些具体目标和执行细节。用户只说“删除没用的文件”“开放/共享给大家”“改成开放”“覆盖/移动这些”只表示目标状态;先只读发现并列出候选、权限档位或执行方案,停止等待用户确认。
|
|
27
27
|
- 用户要**检查 / 治理文档权限、公开范围、链接分享、外部访问、复制下载权限、密级标签、owner 转移**,或要”权限风险报告、收紧权限、申请查看 / 编辑权限、转移 / 批量转移 owner”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`permission_governance`](references/lark-drive-workflow-permission-governance.md) workflow。
|
|
28
|
+
- 用户明确要**移除单个云文档协作者权限**时,使用 `lark-cli drive +member-remove`;先阅读 [`references/lark-drive-member-remove.md`](references/lark-drive-member-remove.md)。这是高风险写操作,真实执行必须确认准确的资源、成员 ID/type 和 wiki 权限范围,并显式传 `--yes`。
|
|
28
29
|
- 用户要为指定飞书文档**设置 / 修改密级标签(secure label)**,或查询当前用户可用的密级标签,直接读取 [`references/lark-drive-secure-label.md`](references/lark-drive-secure-label.md);这是 Drive 文件治理能力。
|
|
29
30
|
- 用户要**检查 / 治理文档权限、公开范围、链接分享、外部访问、复制下载权限、密级标签、owner 转移**,或要“权限风险报告、收紧权限、申请查看 / 编辑权限、转移 / 批量转移 owner”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`permission_governance`](references/lark-drive-workflow-permission-governance.md) workflow。
|
|
30
31
|
- 用户要**查询文件、文件夹或云文档自身的公开访问、分享、协作者管理、安全与评论权限设置**,优先使用 `lark-cli drive +permission-get-setting`;它只读取目标自身设置,不递归审计文件夹子文档权限。裸 token 必须显式传 `--type`。
|
|
31
32
|
- 用户要**按特定主题、关键词或内容线索跨容器查找资料,并统一收集到 Drive 文件夹或 Wiki 节点**,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`topic_move_collector`](references/lark-drive-workflow-topic-move-collector.md) workflow。该 workflow 负责搜索召回、内容验证、相关性分类、移动计划、写前确认和结果验证;禁止直接从 `drive +search` 或 `drive +move` 开始。
|
|
32
33
|
- 用户要**整理云盘 / 文件夹 / 文档库 / 知识库 / 个人文档库**,或要“盘点目录结构、找出未归档/临时/重复/空目录、生成整理方案”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](references/lark-drive-workflow-knowledge-organize.md) workflow。默认只生成方案;创建目录、移动资源、申请权限都必须单独确认。
|
|
33
34
|
- 按主题跨范围查找并集中归档,进入 `topic_move_collector`;对已知文件夹、文档库或知识库做目录盘点和结构重组,进入 `knowledge_organize`;只移动一个已明确资源时仍使用原子移动命令。
|
|
34
|
-
- 用户要**搜文档 / Wiki / 电子表格 / 多维表格 / 云空间(云盘/云存储)对象**,优先使用 `lark-cli drive +search
|
|
35
|
+
- 用户要**搜文档 / Wiki / 电子表格 / 多维表格 / 云空间(云盘/云存储)对象**,优先使用 `lark-cli drive +search`;按标题定位和处理重复候选时遵循 [`references/lark-drive-search.md`](references/lark-drive-search.md)。自然语言里"最近我编辑过的"、"我创建的"(→ `--created-by-me`,原始创建者语义)、"我负责/owner 的"(→ `--mine`,owner 语义)、"最近一周我打开过的 xxx"、"某人 owner 的 docx" 等直接映射到扁平 flag,避免手写嵌套 JSON。
|
|
35
36
|
- 用户要对**文档评论**做任何操作(添加评论、列表 / 批量查询、回复、获取 / 更新 / 删除回复、解决 / 恢复、reaction),按下方 Shortcuts 表选择对应的 `drive +<verb>` 评论命令,执行前先阅读该命令的 ref。按评论定位文档正文位置见 [`references/lark-drive-comment-location.md`](references/lark-drive-comment-location.md)。
|
|
36
37
|
- 用户给出 doubao.com 的云空间资源 URL/token,或明确提到豆包里的 file/folder/docx/sheet/bitable/wiki 资源时,仍按资源类型、URL 路径和 token 路由到本 skill;不要因为域名不是飞书而回退到 WebFetch。
|
|
37
38
|
- 用户要把本地 `.xlsx` / `.csv` / `.base` 导入成 Base / 多维表格 / bitable,第一步必须使用 `lark-cli drive +import --type bitable`。
|
|
@@ -43,7 +44,7 @@ metadata:
|
|
|
43
44
|
- 用户要查看、下载、回滚或删除文件的**历史版本**,使用 `drive +version-history`、`drive +version-get`、`drive +version-revert`、`drive +version-delete`;这组命令同时支持 `--as user` 和 `--as bot`,自动化场景优先 `--as bot`。
|
|
44
45
|
- 用户要把本地 `.xlsx` / `.xls` / `.csv` 导入成电子表格,使用 `lark-cli drive +import --type sheet`。
|
|
45
46
|
- 用户要在云空间(云盘/云存储)里新建文件夹,优先使用 `lark-cli drive +create-folder`。
|
|
46
|
-
- 用户要查看或下载文件内容,或者查看文件可用预览格式并获取 PDF / HTML / 文本 / 图片等转换预览产物,使用 `lark-cli drive +preview`。
|
|
47
|
+
- 用户要查看或下载文件内容,或者查看文件可用预览格式并获取 PDF / HTML / 文本 / 图片等转换预览产物,使用 `lark-cli drive +preview`。`+preview` 和 `+download` 都支持 `--file-token` / `--url` / `--wiki-token` 三选一(Wiki 会解析到底层 `file`);但两者只处理 Drive **文件**,若目标是 docx/sheet/bitable/slides 等在线文档,改用 `drive +export`。
|
|
47
48
|
- 用户要获取某个文件的封面图,优先使用 `lark-cli drive +cover`;先 `--list-only` 看规格,再选 `--spec` 下载。
|
|
48
49
|
- 用户要导出云文档时,优先使用 `lark-cli drive +export --url '<文档 URL>' --file-extension <格式>`;详细参数、Wiki token 和错误码处理见 [`references/lark-drive-export.md`](references/lark-drive-export.md)。
|
|
49
50
|
- 用户要把本地文件上传到知识库 / 文档库里的某个 wiki 节点下时,仍然使用 `lark-cli drive +upload --wiki-token <wiki_token>`;不要误切到 `wiki` 域命令。
|
|
@@ -154,6 +155,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli drive +<verb> [flags]`)
|
|
|
154
155
|
| [`+apply-permission`](references/lark-drive-apply-permission.md) | 以 user 身份向文档 owner 申请访问权限。 |
|
|
155
156
|
| [`+member-add`](references/lark-drive-member-add.md) | 添加一个或最多 10 个 Drive 文档、文件、文件夹或 wiki 节点协作者/授权成员;封装 Drive permission member create/batch_create,真实写入需要 `--yes`。 |
|
|
156
157
|
| [`+member-list`](references/lark-drive-member-list.md) | 查询 Drive 文档、文件、文件夹或 wiki 节点的协作者/授权成员列表。 |
|
|
158
|
+
| [`+member-remove`](references/lark-drive-member-remove.md) | 移除一个 Drive 文档、文件、文件夹或 wiki 节点协作者;封装 Drive permission member delete,真实写入需要 `--yes`。 |
|
|
157
159
|
| [`+permission-get-setting`](references/lark-drive-permission-get-setting.md) | 查询文件、文件夹或云文档自身的公开访问、分享、协作者管理、安全与评论权限设置;支持 URL 或裸 token + `--type`;不递归读取文件夹子文档权限。 |
|
|
158
160
|
| [`+secure-label-list`](references/lark-drive-secure-label.md) | 列出当前用户可用的密级标签。 |
|
|
159
161
|
| [`+secure-label-update`](references/lark-drive-secure-label.md) | 更新 Drive 文件或文档的密级标签。 |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
从飞书云空间(云盘/云存储)下载文件到本地。下载对象是 Drive **文件**(上传的 PDF/zip/图片/音视频等文件),以及支持 Wiki URL / Wiki token。
|
|
7
7
|
|
|
8
8
|
## 命令
|
|
9
9
|
|
|
@@ -13,8 +13,27 @@ lark-cli drive +download --file-token boxbc_xxx --output ./report.pdf
|
|
|
13
13
|
|
|
14
14
|
# 只提供 token,默认保存到当前目录
|
|
15
15
|
lark-cli drive +download --file-token boxbc_xxx
|
|
16
|
+
|
|
17
|
+
# 直接传 URL,CLI 自动解析类型和 token
|
|
18
|
+
lark-cli drive +download --url "https://example.feishu.cn/file/<FILE_TOKEN>" --output ./report.pdf
|
|
19
|
+
|
|
20
|
+
# Wiki URL 也可直接传,CLI 会先解析到底层 obj_token/obj_type(obj_type 必须是 file)
|
|
21
|
+
lark-cli drive +download --url "https://example.feishu.cn/wiki/<WIKI_NODE_TOKEN>" --output ./report.pdf
|
|
22
|
+
|
|
23
|
+
# 只有裸 Wiki node token 时,显式传 --wiki-token,让 CLI 先解析底层文件
|
|
24
|
+
lark-cli drive +download --wiki-token "<WIKI_NODE_TOKEN>" --output ./report.pdf
|
|
16
25
|
```
|
|
17
26
|
|
|
27
|
+
## 参数
|
|
28
|
+
|
|
29
|
+
| 参数 | 必填 | 说明 |
|
|
30
|
+
|------|------|------|
|
|
31
|
+
| `--file-token` | 条件必填 | Drive 文件 token;与 `--url` / `--wiki-token` 三选一 |
|
|
32
|
+
| `--url` | 条件必填 | 飞书文件 URL 或 Wiki URL;CLI 自动解析类型和 token |
|
|
33
|
+
| `--wiki-token` | 条件必填 | 裸 Wiki node token;CLI 先解析到底层 Drive 文件 |
|
|
34
|
+
| `--output` | 否 | 本地输出路径;不传时默认保存到当前目录 |
|
|
35
|
+
| `--overwrite` | 否 | 覆盖已存在的输出文件;不传时目标已存在会报错 |
|
|
36
|
+
|
|
18
37
|
## URL 解析
|
|
19
38
|
|
|
20
39
|
从飞书文件 URL 提取 token:
|
|
@@ -25,10 +44,17 @@ https://xxx.feishu.cn/drive/file/boxbc_xxx
|
|
|
25
44
|
file_token
|
|
26
45
|
```
|
|
27
46
|
|
|
47
|
+
Wiki URL / 裸 Wiki node token 会先解析到底层文档,解析后会在输出里附带 `wiki_token` 和 `wiki_node`(含底层 `obj_token`/`obj_type`)。
|
|
48
|
+
|
|
49
|
+
## 关键约束
|
|
50
|
+
|
|
51
|
+
- Wiki 节点解析后的 `obj_type` 必须是 `file`;不确定 token 类型时,先用 `lark-cli drive +inspect --url <TOKEN> --type wiki` 检查。
|
|
52
|
+
|
|
28
53
|
## 排障
|
|
29
54
|
|
|
30
55
|
- 如果返回 `permission_denied`,或最终下载返回 `HTTP 403`,按错误 `hint` 使用 `lark-cli drive +preview --file-token <FILE_TOKEN> --type source_file --output <path>` 获取预览产物。
|
|
31
56
|
- 如果返回限流错误,停止立即重试,稍后按指数退避重试。
|
|
57
|
+
- 如果目标(或 Wiki 解析出的底层文档)是 `docx` / `sheet` / `bitable` / `slides` 等在线文档,`+download` 无法直接下载,会返回 typed validation error;改用 [lark-drive-export](lark-drive-export.md) 渲染成 pdf / xlsx / pptx / markdown 等格式。
|
|
32
58
|
|
|
33
59
|
## 参考
|
|
34
60
|
|
|
@@ -147,6 +147,7 @@ lark-cli drive +export \
|
|
|
147
147
|
| `1069914` | token 非法或 token/type 不匹配;常见原因是把 Wiki node token 当作底层 `docx` / `sheet` / `bitable` token 使用,没有传 `--doc-type wiki` | 优先改用 `--url <Wiki URL>`;只有裸 Wiki token 时,用 `--token <WIKI_NODE_TOKEN> --doc-type wiki`。不确定 token 类型时,先用 `lark-cli drive +inspect --url <TOKEN> --type wiki` 检查是否能解包为 Wiki node;如果不是 Wiki token,再检查 token 来源、`--doc-type` 是否与实际资源类型一致 |
|
|
148
148
|
| `1069902` | 没有当前导出任务所需权限 | 不要直接重试同一命令;先确认当前 `--as` 身份是否能访问该文档、是否有下载/导出权限,以及文档是否受分享、密级或租户策略限制。需要补权限时,让文档 owner 或管理员授权后再执行 |
|
|
149
149
|
| `99991400` / `rate_limit` | OpenAPI 请求频率受限 | 立即停止并按错误 `hint` 处理:没有 `ticket` 时,至少等待 1 分钟后重跑原 `drive +export`;已有 `ticket` 时,只执行 `drive +task_result --scenario export` 续查,不要重复创建任务。持续限频时从 1 分钟开始指数退避 |
|
|
150
|
+
| `9499` + `too many request(s)` | 导出任务接口的另一种限频响应;同一个 `9499` 在其它 Drive 接口也可能表示参数类型错误,CLI 会结合服务端消息区分 | 按 `rate_limit` 处理:立即停止,等待至少 1 分钟并指数退避;已有 `ticket` 时只续查该任务,不要重新创建 |
|
|
150
151
|
| `99991679` | 缺少 OpenAPI scope | 按错误 envelope 中的 `missing_scopes` / `required_scope` / `hint` 补齐授权;常见方式是重新执行 `lark-cli auth login --scope "<缺失 scope>"`。补 scope 前不要反复重试导出命令 |
|
|
151
152
|
|
|
152
153
|
## 推荐续跑方式
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# drive +member-remove(移除协作者权限)
|
|
2
|
+
|
|
3
|
+
> 这是高风险写操作。真实执行会移除权限,需要核对资源和成员后显式加 `--yes`。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
lark-cli drive +member-remove \
|
|
9
|
+
--token "<bare_token_or_url>" \
|
|
10
|
+
--type docx \
|
|
11
|
+
--member-id "ou_xxx" \
|
|
12
|
+
--member-type openid \
|
|
13
|
+
--yes
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 参数
|
|
17
|
+
|
|
18
|
+
| 参数 | 必填 | 说明 |
|
|
19
|
+
|------|------|------|
|
|
20
|
+
| `--token` | 是 | 裸 token 或完整 URL。路径支持 `/drive/folder/`、`/docx/`、`/doc/`、`/sheets/`、`/base/`、`/bitable/`、`/wiki/`、`/file/`、`/mindnotes/`、`/slides/`、`/minutes/`、`/page/`;URL 可从路径推断类型,裸 token 必须同时传 `--type`。 |
|
|
21
|
+
| `--type` | 条件必填 | 资源类型:`docx` / `doc` / `sheet` / `bitable` / `file` / `folder` / `wiki` / `mindnote` / `slides` / `minutes` / `apps`。完整 URL 可省略。 |
|
|
22
|
+
| `--member-id` | 是 | 要移除的单个协作者 ID。逗号分隔的多成员输入会被拒绝;批量场景应逐个调用。 |
|
|
23
|
+
| `--member-type` | 是 | ID 类型:`email` / `openid` / `openchat` / `opendepartmentid` / `userid` / `unionid` / `groupid` / `wikispaceid`。 |
|
|
24
|
+
| `--member-kind` | 条件必填 | 仅 `--member-type=wikispaceid` 使用:未启用知识库成员分组时传 `wiki_space_member`,启用后根据权限传 `wiki_space_viewer` 或 `wiki_space_editor`。 |
|
|
25
|
+
| `--perm-type` | 否 | 仅 wiki 协作者使用:`container`(默认,当前页面及子页面)或 `single_page`(仅当前页面)。 |
|
|
26
|
+
| `--dry-run` | 否 | 只预览 DELETE URL、query 和 body,不调用接口。 |
|
|
27
|
+
| `--yes` | 真实执行时是 | 确认高风险权限移除操作。 |
|
|
28
|
+
|
|
29
|
+
## 输出
|
|
30
|
+
|
|
31
|
+
以移除 `openid` 类型的用户协作者为例,成功后返回:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"ok": true,
|
|
36
|
+
"identity": "user",
|
|
37
|
+
"data": {
|
|
38
|
+
"removed": true,
|
|
39
|
+
"resource_token": "doxcnxxx",
|
|
40
|
+
"resource_type": "docx",
|
|
41
|
+
"member_id": "ou_xxx",
|
|
42
|
+
"member_type": "openid",
|
|
43
|
+
"member_kind": "user"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Wiki 普通协作者还会返回 `perm_type`;`wikispaceid` 返回所传的 `member_kind`。
|
|
49
|
+
|
|
50
|
+
`removed: true` 表示删除请求成功完成,不保证该权限此前一定存在。
|
|
51
|
+
|
|
52
|
+
## 行为说明
|
|
53
|
+
|
|
54
|
+
- **身份支持**:支持 `--as user` 和 `--as bot`。
|
|
55
|
+
- **部门协作者**:`--member-type=opendepartmentid` 只能配合 `--as user`;bot 身份会在客户端提前拒绝。
|
|
56
|
+
- **安全编码**:资源 token 和 member ID 都作为独立 path segment 编码。
|
|
57
|
+
- **Wiki 范围**:普通 wiki 协作者默认删除 `container` 权限;只删除当前页面权限时显式传 `single_page`。
|
|
58
|
+
- **Wiki 空间成员**:`--member-type=wikispaceid` 仅支持 `--type=wiki`;必须用 `--member-kind` 指明成员角色,并且不能同时传 `--perm-type`。
|
|
59
|
+
- **错误处理**:OpenAPI 返回的 typed error 原样透传,可根据错误信封中的 subtype、code、hint 和权限信息处理。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、权限处理和安全规则。
|
|
4
4
|
|
|
5
|
-
查看或下载 Drive
|
|
5
|
+
查看或下载 Drive 文件内容,或列出并获取文件可用的预览产物。对象是 Drive **文件**,也支持 Wiki URL / node token(CLI 先把 Wiki 节点解析到底层文件,`obj_type` 必须是 `file`)。这个 shortcut 不猜测默认类型:
|
|
6
6
|
|
|
7
7
|
- 如果只需要查看或下载文件内容,或不关心 PDF/text/image 等转换预览,优先使用 `--type source_file --output <path>`
|
|
8
8
|
- 只想看候选项时,用 `--list-only`
|
|
@@ -20,6 +20,22 @@ lark-cli drive +preview \
|
|
|
20
20
|
--type source_file \
|
|
21
21
|
--output ./artifacts/source
|
|
22
22
|
|
|
23
|
+
# 推荐:直接传 URL,CLI 自动解析类型和 token
|
|
24
|
+
lark-cli drive +preview \
|
|
25
|
+
--url "https://example.feishu.cn/file/<FILE_TOKEN>" \
|
|
26
|
+
--list-only
|
|
27
|
+
|
|
28
|
+
# Wiki URL 也可直接传,CLI 会先解析到底层 obj_token/obj_type(obj_type 必须是 file)
|
|
29
|
+
lark-cli drive +preview \
|
|
30
|
+
--url "https://example.feishu.cn/wiki/<WIKI_NODE_TOKEN>" \
|
|
31
|
+
--type source_file \
|
|
32
|
+
--output ./artifacts/source
|
|
33
|
+
|
|
34
|
+
# 只有裸 Wiki node token 时,显式传 --wiki-token
|
|
35
|
+
lark-cli drive +preview \
|
|
36
|
+
--wiki-token "<WIKI_NODE_TOKEN>" \
|
|
37
|
+
--list-only
|
|
38
|
+
|
|
23
39
|
# 列出可用预览候选项
|
|
24
40
|
lark-cli drive +preview \
|
|
25
41
|
--file-token "<FILE_TOKEN>" \
|
|
@@ -50,7 +66,9 @@ lark-cli drive +preview \
|
|
|
50
66
|
|
|
51
67
|
| 参数 | 必填 | 说明 |
|
|
52
68
|
|------|------|------|
|
|
53
|
-
| `--file-token` |
|
|
69
|
+
| `--file-token` | 条件必填 | Drive 文件 token;与 `--url` / `--wiki-token` 三选一 |
|
|
70
|
+
| `--url` | 条件必填 | 飞书文件 URL 或 Wiki URL;CLI 自动解析类型和 token |
|
|
71
|
+
| `--wiki-token` | 条件必填 | 裸 Wiki node token;CLI 先解析到底层 Drive 文件 |
|
|
54
72
|
| `--type` | 条件必填 | 预览类型;优先使用 `--list-only` 返回的 `type`,如 `pdf` / `html` / `text` / `png` / `jpg` / `source_file` |
|
|
55
73
|
| `--version` | 否 | 文件版本号 |
|
|
56
74
|
| `--list-only` | 否 | 仅返回候选项,不下载 |
|
|
@@ -90,6 +108,7 @@ lark-cli drive +preview \
|
|
|
90
108
|
- `--type source_file` 用于查看文件内容,不依赖 `--list-only` 返回的候选项;它适合读取或保存源内容,不等同于 PDF/text/image 等转换预览
|
|
91
109
|
- 候选项状态来自后端 `preview_status` 枚举,例如 `READY` / `PROCESSING` / `FAILED` / `NO_SUPPORT`
|
|
92
110
|
- 本地文件名在未显式带扩展名时,会结合响应头自动补扩展名
|
|
111
|
+
- Wiki URL / 裸 Wiki node token 会先解析到底层文档,解析后会在输出里附带 `wiki_token` 和 `wiki_node`(含底层 `obj_token`/`obj_type`);`obj_type` 必须是 `file`。如果 Wiki 指向 `docx` / `sheet` / `bitable` / `slides` 等在线文档,`+preview` 无法直接处理,CLI 会返回 typed validation error,并在 hint 中提示改用 [lark-drive-export](lark-drive-export.md)
|
|
93
112
|
|
|
94
113
|
### 参考
|
|
95
114
|
|
|
@@ -134,6 +134,8 @@ lark-cli drive +push --local-dir ./repo --folder-token fldcnxxxxxxxxx \
|
|
|
134
134
|
|
|
135
135
|
`+push` 的失败项带结构化字段,agent 必须优先读 `items[].error_class` / `phase` / `code`,不要只看自然语言 `error` 文本。`summary.aborted=true` 表示命令已经遇到终止性错误并停止后续批处理;这时**不要原样重试**,先修复根因。
|
|
136
136
|
|
|
137
|
+
`retryable=true` 只表示修复根因或等待后可以再次尝试,不表示应该立即、无限重放整个 push;重试时采用有上限的指数退避和抖动。
|
|
138
|
+
|
|
137
139
|
常见终止性错误:
|
|
138
140
|
|
|
139
141
|
| `error_class` | 常见 `code` | 含义 | Agent 应对 |
|
|
@@ -144,8 +146,10 @@ lark-cli drive +push --local-dir ./repo --folder-token fldcnxxxxxxxxx \
|
|
|
144
146
|
| `invalid_api_parameters` | `1061002` | API 参数被服务端拒绝 | 停止重试,检查 `--folder-token`、覆盖模式、`file_token`、文件名和上传参数;不要对同一参数组合批量重试 |
|
|
145
147
|
| `parent_node_missing` | `1061044` | 上传 / 建目录使用的父文件夹不存在或当前身份不可见 | 停止重试,检查 `--folder-token` 是否仍存在、是否有权限、父目录是否在 push 过程中被删除;不要继续上传同一目录树 |
|
|
146
148
|
| `parent_sibling_limit` | `1062507` | 目标父文件夹单层子节点数量超过上限 | 停止重试,清理目标目录、换一个 `--folder-token`,或把上传内容拆到多个子目录 |
|
|
149
|
+
| `quota_exceeded` | `1061101` / `1061061` | 租户或当前用户的 Drive 容量配额已满 | 停止重试,释放容量、调整目标位置或扩容后再执行 push |
|
|
147
150
|
| `rate_limited` | `99991400` | 触发频控 | 停止当前批次,退避后再重试 |
|
|
148
|
-
| `
|
|
151
|
+
| `conflict` | `1061045` | 同一目标发生资源竞争 | 停止当前批次,避免并发操作同一目标;退避后有限重试 |
|
|
152
|
+
| `server_error` | `1663` / `1061001` / `2200` / HTTP 5xx | Drive 服务端或网关异常 | 停止当前批次,稍后有限重试 |
|
|
149
153
|
|
|
150
154
|
非终止但需要解释的状态:
|
|
151
155
|
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
>
|
|
26
26
|
> **`--query` 最长 30 个字符**:按字符数(Unicode 码点)算,中文每字算 1 个,与 ASCII 同口径;超过 30 会被服务端拒绝(`99992402 field validation failed`,**是报错不是截断**)。长关键词必须先压缩成核心实体 + 主题词(如把整句问题压成「项目名 + 主题」再搜),不要把整句原问塞进 `--query`。
|
|
27
27
|
>
|
|
28
|
+
> **按完整标题定位:** 使用 `--only-title`;标题不超过 30 个字符时直接查询,超长标题使用不超过限制的稳定片段召回,再按返回标题严格匹配。使用相同 query 和过滤条件按 `page_token` 检查,最多 3 页;仅在 `has_more=false` 且跨页恰好一个严格匹配时继续写操作,否则请用户缩小范围或补充信息。`drive files list` 只用于枚举已知文件夹的直接子项。
|
|
29
|
+
>
|
|
28
30
|
> **列表型请求不要硬塞关键词**:如果用户只是要求"我这月创建的所有文档"、"最近半年我编辑过的文档"、"按类型分类统计"这类范围浏览 / 汇总请求,且没有给出标题片段或业务关键词,应使用 `--query ""` 搭配 `--created-by-me`、`--mine`、`--created-*`、`--edited-*`、`--doc-types` 等过滤条件。不要把"查找"、"所有文档"、"最近更新过"、"按类型分类统计"这类动作词或统计意图放进 `--query`,否则会把本来应靠 filter 命中的结果过度收窄。
|
|
29
31
|
>
|
|
30
32
|
> **标题词 + 正文词联合搜索**:如果用户同时给出标题关键词和正文关键词,并要求同一资源同时满足两项条件,优先执行一条普通联合搜索:`lark-cli drive +search --query "标题词 正文词"`,并在同一条命令中叠加用户指定的 `--folder-tokens`、`--doc-types` 等过滤条件。不要把这种联合搜索拆成“标题搜索 + 正文搜索”后自行拼交集;也不要把 `--only-title` 或 `intitle:` 用作主候选路径。只有用户明确只查标题时,才使用 `--only-title` 或 `intitle:`。
|
package/skills/lark-im/SKILL.md
CHANGED
|
@@ -190,7 +190,11 @@ lark-cli im <resource> <method> [flags] # 调用 API
|
|
|
190
190
|
|
|
191
191
|
### images
|
|
192
192
|
|
|
193
|
-
- `create` — 上传图片。Identity: `
|
|
193
|
+
- `create` — 上传图片。Identity: supports `user` and `bot`; user identity requires `im:resource` scope on the UAT.
|
|
194
|
+
|
|
195
|
+
### files
|
|
196
|
+
|
|
197
|
+
- `create` — 上传文件。Identity: supports `user` and `bot`; user identity requires `im:resource` scope on the UAT.
|
|
194
198
|
|
|
195
199
|
### pins
|
|
196
200
|
|
|
@@ -238,6 +242,7 @@ lark-cli im <resource> <method> [flags] # 调用 API
|
|
|
238
242
|
| `reactions.list` | `im:message.reactions:read` |
|
|
239
243
|
| `threads.forward` | `im:message` |
|
|
240
244
|
| `images.create` | `im:resource` |
|
|
245
|
+
| `files.create` | `im:resource` |
|
|
241
246
|
| `pins.create` | `im:message.pins:write_only` |
|
|
242
247
|
| `pins.delete` | `im:message.pins:write_only` |
|
|
243
248
|
| `pins.list` | `im:message.pins:read` |
|
|
@@ -20,7 +20,9 @@ metadata:
|
|
|
20
20
|
|
|
21
21
|
## 身份
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
身份是跨命令工作流的状态:一旦某个 `minute_token` / `note_id` 由某个身份取得,后续消费它的命令必须显式沿用相同 `--as`,不要依赖 profile 默认身份。完整规则见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 的「身份延续」。
|
|
24
|
+
|
|
25
|
+
所有 minutes 命令默认使用 `--as user`。`+search`、`minutes get`、`+detail`、`+download` 和 `+apply-permission` 也支持 `--as bot`(bot 只能访问 / 操作 bot 有权限的妙记)。精确身份支持以 `<command> --help` 为准。
|
|
24
26
|
|
|
25
27
|
## Shortcuts
|
|
26
28
|
|
|
@@ -31,7 +33,7 @@ metadata:
|
|
|
31
33
|
| [`+download`](references/lark-minutes-download.md) | 下载妙记音视频媒体文件 |
|
|
32
34
|
| [`+upload`](references/lark-minutes-upload.md) | 上传 file_token 生成妙记 |
|
|
33
35
|
| [`+update`](references/lark-minutes-update.md) | 更新妙记标题 |
|
|
34
|
-
| `+apply-permission` | 申请妙记查看或编辑权限 |
|
|
36
|
+
| [`+apply-permission`](references/lark-minutes-apply-permission.md) | 申请妙记查看或编辑权限 |
|
|
35
37
|
| [`+speaker-replace`](references/lark-minutes-speaker-replace.md) | 替换妙记逐字稿中的说话人(须先 `lark-cli api GET .../speakerlist` 取 `speaker_id`) |
|
|
36
38
|
| `+word-replace` | 批量替换逐字稿关键词(详见 `lark-cli minutes +word-replace --help`) |
|
|
37
39
|
| [`+summary`](references/lark-minutes-summary.md) | 替换妙记 AI 总结全文 |
|
|
@@ -79,17 +81,21 @@ metadata:
|
|
|
79
81
|
|
|
80
82
|
### 3. 申请妙记权限
|
|
81
83
|
|
|
82
|
-
遇到妙记没有查看或编辑权限时,引导用户申请对应权限;只有用户明确要申请时,才调用 `minutes +apply-permission
|
|
84
|
+
遇到妙记没有查看或编辑权限时,引导用户申请对应权限;只有用户明确要申请时,才调用 `minutes +apply-permission`。使用前必读 [`+apply-permission` reference](references/lark-minutes-apply-permission.md)(write 操作,含 user/bot 身份与权限语义)。
|
|
83
85
|
|
|
84
86
|
只有当用户明确要求"申请查看权限"、"申请编辑权限"、"帮我申请这条妙记权限"时,才调用:
|
|
85
87
|
|
|
86
88
|
```bash
|
|
87
|
-
lark-cli minutes +apply-permission --minute-token <token> --perm view|edit
|
|
89
|
+
lark-cli minutes +apply-permission --minute-token <token> --perm view|edit --as user
|
|
90
|
+
lark-cli minutes +apply-permission --minute-token <token> --perm view|edit --as bot
|
|
88
91
|
```
|
|
89
92
|
|
|
90
93
|
这是向妙记所有者发起权限申请,不代表立即获得权限。
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
**安全约束**:
|
|
96
|
+
- 遇到无权限错误时,不要自动调用 `+apply-permission`;先把无权限事实告知用户,只有用户明确要求申请权限时才发起申请。
|
|
97
|
+
- **必须沿用触发无权限错误时的来源身份**:例如 `--as bot` 读取妙记时遇到无权限,申请也要用 `--as bot`,不要切到 user 身份申请。
|
|
98
|
+
- **禁止**用切换身份的方式绕过资源权限(例如 bot 无权限时改用 user 身份重新读取)。
|
|
93
99
|
|
|
94
100
|
### 4. 上传音视频文件生成妙记(并可继续获取纪要 / 逐字稿)
|
|
95
101
|
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# minutes +apply-permission
|
|
2
|
+
|
|
3
|
+
向妙记所有者发起查看或编辑权限申请。**写操作**,只在用户明确要求申请权限时才调用;调用后不代表立即获得权限,只是提交了一条申请。
|
|
4
|
+
|
|
5
|
+
本 skill 对应 shortcut:`lark-cli minutes +apply-permission`(调用 `POST /open-apis/minutes/v1/minutes/{minute_token}/permissions/apply`)。支持 `--as user` / `--as bot`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 以 user 身份申请查看权限
|
|
11
|
+
lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm view --as user
|
|
12
|
+
|
|
13
|
+
# 以 bot 身份申请编辑权限
|
|
14
|
+
lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm edit --as bot
|
|
15
|
+
|
|
16
|
+
# 预览 API 调用
|
|
17
|
+
lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm view --dry-run
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 参数
|
|
21
|
+
|
|
22
|
+
| 参数 | 必填 | 说明 |
|
|
23
|
+
|------|------|------|
|
|
24
|
+
| `--minute-token <token>` | 是 | 妙记 Token |
|
|
25
|
+
| `--perm <view\|edit>` | 是 | 申请的权限:`view`(查看)或 `edit`(编辑) |
|
|
26
|
+
| `--dry-run` | 否 | 预览 API 调用,不执行 |
|
|
27
|
+
|
|
28
|
+
## user / bot 身份与权限语义
|
|
29
|
+
|
|
30
|
+
- **user**:以当前登录用户身份向妙记所有者申请。所有者在飞书客户端收到申请通知,同意后该用户获得对应权限。
|
|
31
|
+
- **bot**:以应用身份向妙记所有者申请,代表"这个应用"而不是某个用户。同意后应用(bot)获得对应权限,不会让触发申请的用户本人获得权限。
|
|
32
|
+
- 两种身份的申请互不代表:user 身份申请通过后 bot 仍然无权限,反之亦然。
|
|
33
|
+
|
|
34
|
+
## 核心约束
|
|
35
|
+
|
|
36
|
+
### 1. 必须继承触发无权限错误的来源身份
|
|
37
|
+
|
|
38
|
+
`+apply-permission` 不是通用的"求权限"按钮:它申请的是**当前 `--as` 对应身份**的权限。如果是 `--as bot` 读取妙记时遇到无权限,就要用 `--as bot` 申请;如果是 `--as user` 遇到无权限,就用 `--as user` 申请。不要在申请时切换成另一个身份——那申请的是另一个主体的权限,解决不了原来那次调用的问题。
|
|
39
|
+
|
|
40
|
+
### 2. missing scope 与资源 ACL 是两类不同问题
|
|
41
|
+
|
|
42
|
+
- **missing scope**(当前身份完全没有 `minutes:permission:apply` / `minutes:minutes.basic:read` 等 scope):这不是"没有这条妙记的权限",`+apply-permission` 解决不了。`--as user` 用 `auth login --scope` 补权限;`--as bot` 去开发者后台开通,**禁止**对 bot 执行 `auth login`。完整规则见 [lark-shared](../../lark-shared/SKILL.md)。
|
|
43
|
+
- **资源 ACL**(scope 都有,但对**这一条具体妙记**没有查看/编辑权限):这才是 `+apply-permission` 要解决的场景。
|
|
44
|
+
|
|
45
|
+
先看错误的 `error.subtype` 是 `missing_scope` 还是资源级别的权限拒绝,再决定要不要调用本命令。
|
|
46
|
+
|
|
47
|
+
### 3. 只有用户明确要求才发起申请
|
|
48
|
+
|
|
49
|
+
遇到无权限错误时,先把"当前身份对这条妙记没有权限"的事实告知用户;只有用户明确说"帮我申请查看/编辑权限"时才调用本命令。不要在检测到无权限后自动发起申请。
|
|
50
|
+
|
|
51
|
+
### 4. 禁止通过切换身份绕过资源权限
|
|
52
|
+
|
|
53
|
+
如果 `--as bot` 对某条妙记没有权限,不要改用 `--as user` 重新读取来"绕过"这个限制(除非用户明确同意切换身份继续任务)。申请权限和切换身份是两件不同的事:前者是解决 bot 自身权限不足,后者是换一个完全不同的主体去访问资源。
|
|
54
|
+
|
|
55
|
+
## 所需权限
|
|
56
|
+
|
|
57
|
+
| 身份 | 所需权限 |
|
|
58
|
+
|------|---------|
|
|
59
|
+
| user / bot | `minutes:permission:apply` |
|
|
60
|
+
|
|
61
|
+
## 输出结果
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"minute_token": "obcnxxxxxxxxxxxxxxxxxxxx",
|
|
66
|
+
"perm": "view"
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| 字段 | 说明 |
|
|
71
|
+
|------|------|
|
|
72
|
+
| `minute_token` | 妙记 Token |
|
|
73
|
+
| `perm` | 申请的权限(`view` / `edit`) |
|
|
74
|
+
|
|
75
|
+
## 如何获取 minute_token
|
|
76
|
+
|
|
77
|
+
| 来源 | 获取方式 |
|
|
78
|
+
|------|---------|
|
|
79
|
+
| 妙记 URL | 从 URL 末尾提取,如 `https://sample.feishu.cn/minutes/obcnxxxxxxxxxxxxxxxxxxxx` |
|
|
80
|
+
| 妙记搜索 | `lark-cli minutes +search --query "关键词"` |
|
|
81
|
+
| 会议产物查询 | `lark-cli vc +recording --meeting-ids <id>`,拿到 `minute_token`(沿用同一 `--as`) |
|
|
82
|
+
|
|
83
|
+
## 常见错误与排查
|
|
84
|
+
|
|
85
|
+
| 错误现象 | 根本原因 | 解决方案 |
|
|
86
|
+
|---------|---------|---------|
|
|
87
|
+
| `--perm` 不是 `view`/`edit` | 参数值不合法 | 只能传 `view` 或 `edit` |
|
|
88
|
+
| `missing required scope(s)` | 当前身份缺少 `minutes:permission:apply` | 见上方「missing scope 与资源 ACL」 |
|
|
89
|
+
| 申请后仍无权限 | 所有者尚未同意 | 这是异步申请,需等待所有者处理;不代表命令执行失败 |
|
|
90
|
+
|
|
91
|
+
## 参考
|
|
92
|
+
|
|
93
|
+
- [lark-minutes](../SKILL.md) — 妙记全部命令
|
|
94
|
+
- [minutes +detail](lark-minutes-detail.md) — 妙记内容与产物查询
|
|
95
|
+
- [lark-shared](../../lark-shared/SKILL.md) — 身份延续与权限恢复规则
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
# minutes +detail
|
|
3
3
|
|
|
4
|
-
通过 `minute_token` 查询妙记详情,按需获取 AI
|
|
4
|
+
通过 `minute_token` 查询妙记详情,按需获取 AI 产物(总结/待办/章节/逐字稿/关键词)。只读,支持 `--as user` / `--as bot`。
|
|
5
5
|
|
|
6
6
|
> `--summary` / `--todo` / `--chapter` / `--keyword` / `--transcript` 至少一个;不传任何产物 flag 时只返回基础信息(如 `title`),AI 产物字段都不会出现。一次性获取所有产物:`--summary --todo --chapter --keyword --transcript`。
|
|
7
7
|
|
|
@@ -46,17 +46,18 @@ lark-cli minutes +detail --minute-tokens obcxxx --transcript --overwrite --outpu
|
|
|
46
46
|
|
|
47
47
|
## 典型链路:从 minute_token 拿纪要文档 token
|
|
48
48
|
|
|
49
|
-
只持有 `minute_token`(如妙记 URL 入口),又想拿 AI 智能纪要 /
|
|
49
|
+
只持有 `minute_token`(如妙记 URL 入口),又想拿 AI 智能纪要 / 逐字稿文档时;每一步都要沿用同一个 `--as`(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」):
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
# 1. 取妙记关联的 note_id,没有关联会议纪要则为空
|
|
53
|
-
lark-cli minutes +detail --minute-tokens
|
|
53
|
+
lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxxxxxx --as bot
|
|
54
54
|
|
|
55
55
|
# 2. 用 note_id 拿 note_doc_token / verbatim_doc_token / shared_doc_tokens
|
|
56
|
-
|
|
56
|
+
# 沿用第 1 步的身份,不要省略 --as
|
|
57
|
+
lark-cli note +detail --note-id <note_id> --as bot
|
|
57
58
|
|
|
58
|
-
# 3. 读纪要 /
|
|
59
|
-
lark-cli docs +fetch --api-version v2 --doc <note_doc_token> --doc-format markdown
|
|
59
|
+
# 3. 读纪要 / 逐字稿正文(同样沿用第 1 步的身份)
|
|
60
|
+
lark-cli docs +fetch --api-version v2 --doc <note_doc_token> --doc-format markdown --as bot
|
|
60
61
|
```
|
|
61
62
|
|
|
62
63
|
> `minute_token` 不要直接传给 `note +detail`:必须先用本命令拿到 `note_id` 再调用 `note +detail`。
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
# minutes +download
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
下载妙记的音视频媒体文件到本地,或获取有效期 1
|
|
5
|
+
下载妙记的音视频媒体文件到本地,或获取有效期 1 天的下载链接。只读操作,支持 `--as user` / `--as bot`。
|
|
6
6
|
|
|
7
7
|
本 skill 对应 shortcut:`lark-cli minutes +download`。
|
|
8
8
|
|
|
9
|
+
`minute_token` 是在某个身份下解析出来的(如 `vc +recording --as bot`):调用本命令时必须显式沿用同一个 `--as`,不要省略让身份被默认值悄悄换掉(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」)。
|
|
10
|
+
|
|
9
11
|
## 命令
|
|
10
12
|
|
|
11
13
|
```bash
|
|
@@ -119,7 +121,7 @@ API 限流 5 次/秒,批量下载时需注意控制频率。
|
|
|
119
121
|
| 妙记尚未准备好 | 2091003 | 转写未完成 | 等待转写完成后重试 |
|
|
120
122
|
| 资源已删除 | 2091004 | 妙记已被删除 | 确认妙记文件仍然存在 |
|
|
121
123
|
| 权限不足 | 2091005 | 无阅读权限 | 检查是否有该妙记的访问权限 |
|
|
122
|
-
| `missing required scope(s)` | — |
|
|
124
|
+
| `missing required scope(s)` | — | 当前身份缺少 scope | `--as user`:运行 `auth login --scope "minutes:minutes.media:export"`;`--as bot`:使用错误中的 `console_url` 去开发者后台开通,**禁止**对 bot 执行 `auth login`(见 [lark-shared](../../lark-shared/SKILL.md) 的权限恢复表) |
|
|
123
125
|
|
|
124
126
|
## 提示
|
|
125
127
|
|