@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
|
@@ -12,6 +12,18 @@ metadata:
|
|
|
12
12
|
|
|
13
13
|
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理**
|
|
14
14
|
|
|
15
|
+
## 命令选择与渐进式发现(必读)
|
|
16
|
+
|
|
17
|
+
执行任何 Task 命令前,必须先确认能力真实存在,禁止根据用户意图自行拼接或猜测 `+<verb>`:
|
|
18
|
+
|
|
19
|
+
1. 先将用户意图与下方 Shortcut 表精确匹配。只有表中明确列出的 shortcut 才可直接选择;参数不确定时读取对应 reference 或运行该 shortcut 的 `--help`。
|
|
20
|
+
2. 没有精确匹配、或无法确认当前版本是否支持时,先运行 `lark-cli task --help`,以当前 CLI 输出的命令列表为准。
|
|
21
|
+
3. help 中存在匹配 shortcut 时,使用 help 列出的完整 shortcut token(例如 `+create`)运行 `lark-cli task <shortcut> --help`,再按真实 flag 执行。
|
|
22
|
+
4. help 中没有匹配 shortcut 时,不得尝试相似的 `+<verb>`;从 help 中选择原生 resource,运行 `lark-cli task <resource> --help` 确认 method,再运行 `lark-cli schema task.<resource>.<method>` 获取参数结构,最后调用 `lark-cli task <resource> <method> ...`。
|
|
23
|
+
5. 遇到 `unknown_subcommand` 时必须停止猜测或尝试变体,回到第 2 步重新发现能力。
|
|
24
|
+
|
|
25
|
+
shortcut 名称只能来自本 Skill 的 Shortcut 表或 `lark-cli task --help`;原生 resource/method 以逐级 help 为准,参数名、类型和嵌套结构以 method schema 为准。
|
|
26
|
+
|
|
15
27
|
> **任务搜索技巧**:先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**查询关键字**(例如任务名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了任务查询关键字,则目标是**任务**时优先使用 `+search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“今年以来”“已完成”“由我创建”“我关注的”),并且使用 `+search` 与 `+get-related-tasks` / `+get-my-tasks` 都能达到目的时,应优先使用列表型能力,而不是搜索型能力。其中,“与我相关 / 我关注的 / 由我创建”等优先考虑 `+get-related-tasks`;“我负责的 / 分配给我”的列表优先考虑 `+get-my-tasks`。不要把时间范围词(例如“今年以来”)本身误当成 `query` 去走搜索。
|
|
16
28
|
> **任务搜索相关性提示**:`+search` 当前不会自动判断搜索结果与搜索发起人的相关性。如果用户明确要求搜索“与我相关”的任务,必须先识别具体关系,获取当前用户的 `open_id`,并显式传入对应的 `--assignee`(负责人)、`--creator`(创建人)或 `--follower`(关注人)过滤条件;不能只依赖 `query` 期待自动返回与当前用户相关的任务。
|
|
17
29
|
> **任务清单搜索技巧**:任务清单也遵循同样的判断逻辑。先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**清单查询关键字**(例如清单名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了清单查询关键字,则优先使用 `+tasklist-search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“由我创建的任务清单”“今年以来创建的清单”),并且使用搜索或原生列取清单都能达到目的时,应优先使用原生 `tasklists.list` 接口列取清单(先 `schema task.tasklists.list`,再 `lark-cli task tasklists list --as user ...`),再按 `creator`、`created_at` 等字段做本地筛选和分页控制。
|
|
@@ -48,7 +48,9 @@ lark-cli task +create --summary "Test Task" --dry-run
|
|
|
48
48
|
| `--data <json>` | No | JSON object merged into the task create request for API fields without dedicated flags, such as `{"is_milestone":true}`. Explicit named flags override same-named fields in this object. |
|
|
49
49
|
| `--dry-run` | No | Preview the API call (JSON payload) without actually creating the task. |
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
> **Required:** If `task +create` has no dedicated flag for a field requested by the user, first inspect `lark-cli schema task.tasks.create`, then add that field to `--data` using the exact field name, type, and nesting from the Meta API request-body schema. Do not omit requested fields or guess their JSON shape. Keep fields already supplied through dedicated flags out of `--data`.
|
|
52
|
+
|
|
53
|
+
Prefer this shortcut over the raw `tasks create` command when `--data` can express the request. Do not assume that other shortcuts support `--data`; check each shortcut's `--help` output first.
|
|
52
54
|
|
|
53
55
|
## Workflow
|
|
54
56
|
|
package/skills/lark-vc/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-vc
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description: "
|
|
4
|
+
description: "飞书视频会议:查询进行中的会议列表(含会议 ID)、读取会中实时内容(发言、聊天、共享等)、发送会中消息,以及搜索历史会议、查询会议纪要(总结/待办/章节/逐字稿)和参会人快照。Agent 真实入会/离会走 lark-vc-agent;查询未来日程走 lark-calendar。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["lark-cli"]
|
|
@@ -20,7 +20,11 @@ metadata:
|
|
|
20
20
|
|
|
21
21
|
## 身份
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
身份是跨命令工作流的状态,不是单条命令的局部参数:一旦某个 ID(如 `note_id`、`minute_token`)由某个身份取得,后续消费它的命令(包括跨到 lark-minutes / lark-note / lark-doc)必须显式沿用相同 `--as`;不要依赖 profile 默认身份,也不要为绕过权限错误切换身份。完整规则见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 的「身份延续」。
|
|
24
|
+
|
|
25
|
+
**本链路的身份策略覆盖到最后一跳读正文**:`vc +detail` → `note +detail` → `docs +fetch --doc <note_doc_token> / <verbatim_doc_token>` 全程用同一个 `--as`。[lark-doc](../lark-doc/SKILL.md) 对普通文档推荐 `--as user`,**不覆盖本链路取得的纪要文档 token**;读正文时不要因此切回 user。
|
|
26
|
+
|
|
27
|
+
本 skill 默认使用 `--as user`。`+detail`、`+recording`、`meeting get`、`+meeting-list-active`、`+meeting-events` 和 `+meeting-message-send` 也支持 `--as bot`;`+meeting-events` 和 `+meeting-message-send` 必须沿用 `meeting_id` 的来源身份。`+search` 仅支持 `--as user`。
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
30
|
# BAD — 查昨天的会议用 calendar,会漏掉即时会议
|
|
@@ -37,6 +41,9 @@ lark-cli vc +search --query "站会" --start <start_time> --end <end_time>
|
|
|
37
41
|
| [`+search`](references/lark-vc-search.md) | 搜索历史会议记录(需至关键词、时间范围、组织者、参与者、会议室少一个筛选条件) |
|
|
38
42
|
| [`+detail`](references/lark-vc-detail.md) | 通过 meeting-ids 获取会议详情,包括 note_id 和 minute_token |
|
|
39
43
|
| [`+recording`](references/lark-vc-recording.md) | 通过 meeting-ids 或 calendar-event-ids 查询 minute_token |
|
|
44
|
+
| [`+meeting-list-active`](references/lark-vc-meeting-list-active.md) | 查询当前身份可见的进行中会议并获取 `meeting_id` |
|
|
45
|
+
| [`+meeting-events`](references/lark-vc-meeting-events.md) | 读取当前身份可见的会中事件 |
|
|
46
|
+
| [`+meeting-message-send`](references/lark-vc-meeting-message-send.md) | 发送会中文本或 reaction |
|
|
40
47
|
|
|
41
48
|
- 使用任何 Shortcut 前,必须先读其对应 reference 文档。
|
|
42
49
|
|
|
@@ -47,8 +54,10 @@ lark-cli vc +search --query "站会" --start <start_time> --end <end_time>
|
|
|
47
54
|
| 查"昨天的会议""上周的会""已结束的会议" | 本 skill(`+search`,含即时会议) |
|
|
48
55
|
| 查日历/日程或未来时间的会议 | [lark-calendar](../lark-calendar/SKILL.md) |
|
|
49
56
|
| 查"今天有哪些会议" | `vc +search`(已结束)+ lark-calendar(未开始),合并展示 |
|
|
57
|
+
| 查询进行中的会议、会中事件或发送会中消息 | 本 skill 的 `+meeting-list-active` / `+meeting-events` / `+meeting-message-send`,也可由 [lark-vc-agent](../lark-vc-agent/SKILL.md) 编排 |
|
|
58
|
+
| 用户询问会议内容,但未提供 `meeting_id`,也未明确指向已结束会议 | 先用 `+meeting-list-active` 查询进行中的会议;无结果时,再用 `+search` 查询当天最近结束的会议;仍无结果时询问会议时间、主题或会议号,不自行扩大时间范围 |
|
|
50
59
|
| 只按自然语言标题查"xx 纪要的逐字稿 / 原始记录 / 谁说了什么" | 先到 [lark-drive](../lark-drive/SKILL.md) / [lark-doc](../lark-doc/SKILL.md);仅在已拿到 `note_id` / `vc-node-id` 后再到 [lark-note](../lark-note/SKILL.md) |
|
|
51
|
-
| Agent
|
|
60
|
+
| Agent 真实入会/离会 | [lark-vc-agent](../lark-vc-agent/SKILL.md) |
|
|
52
61
|
| 妙记信息/时长/封面/链接 | 先走 `vc +detail` 或 `vc +recording` 获取 `minute_token`,再用 [lark-minutes](../lark-minutes/SKILL.md) 的 `minutes get` |
|
|
53
62
|
| 本地音视频文件转纪要/逐字稿 | 先走 [lark-minutes](../lark-minutes/SKILL.md) 上传,再用 `minutes +detail --minute-tokens` |
|
|
54
63
|
|
|
@@ -142,7 +151,7 @@ lark-cli vc meeting get --params '{"meeting_id":"<meeting_id>","with_participant
|
|
|
142
151
|
|---------|---------|--------|
|
|
143
152
|
| 参会人快照(谁参加过、何时入/离会,任意时点)| `vc meeting get --with-participants` | 本 skill |
|
|
144
153
|
| 已结束会议的发言内容 | 优先:`vc +detail` 取 `note_id` 再 `note +detail` 取 `verbatim_doc_token` 后 `docs +fetch`;备选:`vc +detail` 取 `minute_token` 再 `minutes +detail --transcript` | [lark-note](../lark-note/SKILL.md) / [lark-minutes](../lark-minutes/SKILL.md) |
|
|
145
|
-
| **进行中会议**的实时事件流(转写、聊天、共享、会中加入/离开)| `vc +meeting-events` | [`lark-vc-agent`](../lark-vc-agent/SKILL.md) |
|
|
154
|
+
| **进行中会议**的实时事件流(转写、聊天、共享、会中加入/离开)| `vc +meeting-events` | 本 skill / [`lark-vc-agent`](../lark-vc-agent/SKILL.md) |
|
|
146
155
|
| **Agent 真实入会 / 离会** | `vc +meeting-join` / `vc +meeting-leave` | [`lark-vc-agent`](../lark-vc-agent/SKILL.md) |
|
|
147
156
|
|
|
148
157
|
## 资源关系
|
|
@@ -173,6 +182,7 @@ Meeting (视频会议)
|
|
|
173
182
|
> - 已有 `doc_token` 且目标是读正文 → [lark-doc](../lark-doc/SKILL.md)。
|
|
174
183
|
> - 只有自然语言纪要标题 → 文档搜索 / Docx 正文读取;有显式 `vc-node-id` 才进入 [lark-note](../lark-note/SKILL.md)。
|
|
175
184
|
> - 从日程出发(只有 `event_id`)→ 先走 [`calendar +meeting`](../lark-calendar/references/lark-calendar-meeting.md) 拿到 `meeting_id` 或 `meeting_note`,再按上述路径继续。
|
|
185
|
+
> - **跨到 lark-minutes / lark-note / lark-doc 时必须沿用来源身份**:例如 `vc +detail --as bot` 拿到的 `note_id`,下一步 `note +detail --note-id <note_id>` 也要显式加 `--as bot`;不要省略 `--as` 让身份被 profile 默认值悄悄换成 user(或反过来)。`note +transcript` 目前仅支持 `--as user`——如果 `note +detail --as bot` 返回 `note_display_type=unified`,停在这一步向用户说明"该纪要的逐字稿只能以 user 身份读取",只有用户明确同意才切到 `--as user`,不要静默切换。
|
|
176
186
|
|
|
177
187
|
## API Resources
|
|
178
188
|
|
|
@@ -199,7 +209,7 @@ lark-cli vc meeting get --params '{"meeting_id": "<meeting_id>", "with_participa
|
|
|
199
209
|
## 不在本 skill 范围
|
|
200
210
|
|
|
201
211
|
- 查询未来的会议日程 → [lark-calendar](../lark-calendar/SKILL.md)
|
|
202
|
-
- Agent
|
|
212
|
+
- Agent 真实入会/离会 → [lark-vc-agent](../lark-vc-agent/SKILL.md)
|
|
203
213
|
- 只有纪要文档标题的逐字稿查询 → 文档搜索 / Docx 正文读取;有显式 `vc-node-id` 才进入 [lark-note](../lark-note/SKILL.md)
|
|
204
214
|
- 本地音视频文件转纪要/逐字稿、妙记搜索/下载/上传/重命名/替换说话人 → [lark-minutes](../lark-minutes/SKILL.md)
|
|
205
215
|
- 通过 `note_id` 取纪要文档 Token → [lark-note](../lark-note/SKILL.md)
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
|
|
2
2
|
# vc +detail
|
|
3
3
|
|
|
4
|
-
通过会议 ID 获取会议详情,包括基本信息、关联的纪要 ID(`note_id`)和妙记 Token(`minute_token
|
|
4
|
+
通过会议 ID 获取会议详情,包括基本信息、关联的纪要 ID(`note_id`)和妙记 Token(`minute_token`)。只读,支持 `--as user` / `--as bot`。
|
|
5
5
|
|
|
6
6
|
## 命令
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
9
|
# 单个 / 批量(逗号分隔,最多 50 个)
|
|
10
10
|
lark-cli vc +detail --meeting-ids <meeting_id1>,<meeting_id2>
|
|
11
|
+
|
|
12
|
+
# bot 身份(只能查 bot 有权限的会议)
|
|
13
|
+
lark-cli vc +detail --meeting-ids <meeting_id1>,<meeting_id2> --as bot
|
|
11
14
|
```
|
|
12
15
|
|
|
13
16
|
## 输出字段
|
|
@@ -26,19 +29,21 @@ lark-cli vc +detail --meeting-ids <meeting_id1>,<meeting_id2>
|
|
|
26
29
|
|
|
27
30
|
### 场景 1:获取会议的纪要和妙记关联
|
|
28
31
|
|
|
29
|
-
`vc +detail` 只能拿到 `note_id` 和 `minute_token`,不直接返回纪要文档 token 与妙记产物内容。要获取实际产物,需根据用户诉求继续调用 `note +detail` 或 `minutes +detail
|
|
32
|
+
`vc +detail` 只能拿到 `note_id` 和 `minute_token`,不直接返回纪要文档 token 与妙记产物内容。要获取实际产物,需根据用户诉求继续调用 `note +detail` 或 `minutes +detail`,**并沿用第 1 步同一个 `--as`**(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」):
|
|
30
33
|
|
|
31
34
|
```bash
|
|
32
35
|
# 1. 获取会议详情,拿到 note_id 和 minute_token
|
|
33
|
-
lark-cli vc +detail --meeting-ids <meeting_id>
|
|
36
|
+
lark-cli vc +detail --meeting-ids <meeting_id> --as bot
|
|
34
37
|
|
|
35
38
|
# 2. 用 note_id 获取纪要文档 Token(note_doc_token / verbatim_doc_token / shared_doc_tokens)
|
|
36
|
-
|
|
39
|
+
# 显式沿用第 1 步的身份,不要省略 --as
|
|
40
|
+
lark-cli note +detail --note-id <note_id> --as bot
|
|
37
41
|
|
|
38
|
-
# 3. 用 minute_token
|
|
42
|
+
# 3. 用 minute_token 获取妙记产物(同样沿用第 1 步的身份)
|
|
39
43
|
# ⚠️ 必须显式指定 --summary / --todo / --chapter / --keyword / --transcript 中至少一个 flag,
|
|
40
44
|
# 不传任何 flag 则不会返回任何产物内容。
|
|
41
|
-
lark-cli minutes +detail --minute-tokens
|
|
45
|
+
lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxxxxxx --todo --transcript --as bot
|
|
42
46
|
```
|
|
43
47
|
|
|
44
48
|
> **路由建议**:当用户未明确指定使用妙记时,**优先**走 `note +detail` 链路(纪要文档信息更完整、含逐字稿原文),仅在 `note_id` 为空或用户要求妙记产物时才走 `minutes +detail`。
|
|
49
|
+
> **身份边界**:`note +transcript` 目前仅支持 `--as user`。若上面第 2 步用 `--as bot` 拿到 `note_display_type=unified`,停下来向用户说明该纪要逐字稿只能以 user 身份读取,只有用户明确同意才切换身份重试。
|
|
@@ -65,7 +65,7 @@ lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-token
|
|
|
65
65
|
lark-cli vc +meeting-join --as bot --meeting-number 123456789
|
|
66
66
|
|
|
67
67
|
# 再查询事件
|
|
68
|
-
lark-cli vc +meeting-events --as bot --meeting-id <id>
|
|
68
|
+
lark-cli vc +meeting-events --as bot --meeting-id <id> --page-all --format pretty
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
如果应用机器人已经在会中,也可以先通过 active meeting 找会:
|
|
@@ -114,7 +114,9 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
|
|
|
114
114
|
- `--format pretty`:默认推荐格式,输出当前身份和逐条时间线,适合快速理解“发生了什么”。
|
|
115
115
|
- `--format ndjson`:输出事件行,并带 metadata 行,适合流式消费。
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
**选型原则**:默认先用 `--format pretty`;仅当 `pretty` 缺少完成任务所必需的结构化字段时,才改用 `--format json`。用户明确要求 JSON 或规则明确要求结构化字段时可直接用 `--format json`;需要流式消费时用 `--format ndjson`。
|
|
118
|
+
|
|
119
|
+
> **JSON 成本**:JSON 保留完整 payload,输出通常远大于 `pretty`;长会全量拉取时会显著占用上下文空间。
|
|
118
120
|
|
|
119
121
|
> **注意**:pretty 输出中的正文文本会做单行转义,真实换行会显示为 `\n`,避免打乱时间线布局。
|
|
120
122
|
|
|
@@ -131,19 +133,117 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
|
|
|
131
133
|
|
|
132
134
|
执行准则:
|
|
133
135
|
|
|
134
|
-
- 如果上下文已有明确 `meeting_id`,沿用该 `meeting_id` 的来源身份执行 `+meeting-events --page-all --format json`。
|
|
135
136
|
- 如果上下文没有明确 `meeting_id`,先按用户当前意图选择身份:问“我/当前用户所在会议”用 `lark-cli vc +meeting-list-active --as user --format json`;问“应用机器人可见的目标用户会议”用 `lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json`。返回多个会议时先让用户选择。
|
|
136
137
|
- 如果上下文只有 9 位会议号,先按当前身份执行 `+meeting-list-active` 并按 `meeting_no` 匹配;匹配到唯一会议后再查事件。不要为了总结会议而自动调用 `+meeting-join`。
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
|
|
140
|
-
- `share_doc.title`
|
|
141
|
-
- `share_doc.url`
|
|
142
|
-
- 必须继续读取共享文档内容,再生成总结,不能只根据“开始共享了某文档”这条事件和文档标题来概括会议内容。
|
|
143
|
-
- 若存在多个共享文档,优先读取**最近一次共享**的文档。
|
|
138
|
+
- 确认 `meeting_id` 后,沿用其来源身份执行 `lark-cli vc +meeting-events --as <same_identity> --meeting-id <id> --page-all --format pretty` 拉取最新事件流。
|
|
139
|
+
- 如果事件流显示开始共享内容(JSON 事件类型为 `magic_share_started`,pretty 时间线显示“开始共享”),并包含文档标题或 URL 等线索,必须继续读取共享文档内容后再生成总结,不能只根据共享事件和文档标题概括会议内容。
|
|
140
|
+
- 若存在多个共享文档,按用户问题读取相关文档;处理某条文档上下文事件时必须按该 item 的 `share_id` 精确关联,不能用“最近一次共享”替代。
|
|
144
141
|
- 若文档读取失败,必须明确说明“以下总结仅基于会中事件流,未成功读取共享文档内容”。
|
|
145
142
|
|
|
146
|
-
### 7.
|
|
143
|
+
### 7. 文档上下文事件消费
|
|
144
|
+
|
|
145
|
+
`document_context_changed` 是只读线索事件。需要根据该事件执行评论、章节或预览等后续处理时,必须用 `+meeting-events --page-all --format json` 读取 `share_id`、`comment_id`、`element_token` 等完整字段;仅向用户展示时间线时仍默认使用 pretty。`vc +meeting-events` 保留原始 payload,并按既有事件输出约定派生 actor 与 pretty timeline;它不会为单个事件类型扩张 JSON/NDJSON 公共 envelope,也不会查询评论、下载素材或写文件。后续 Drive/Docs 命令只能由 Agent 按下表显式选择。
|
|
146
|
+
|
|
147
|
+
#### 共享会话关联
|
|
148
|
+
|
|
149
|
+
`share_id` 标识一次共享会话。Agent 按事件时间顺序消费完整事件流,并维护共享会话状态:
|
|
150
|
+
|
|
151
|
+
1. 从 `payload.magic_share_started_items[]` 读取 `share_id` 和 `share_doc`,建立 `share_id -> share_doc` 映射并标记会话开始。同一 `share_id` 重复携带相同文档时按幂等事件处理;若指向不同文档则停止解析,不覆盖旧映射。
|
|
152
|
+
2. `document_context_changed_items[]` 通过自己的 `share_id` 精确查找该映射。当前契约中 item 自带的 `share_doc` 不提供文档信息;只保留它的原始值,不作为 URL/title 来源,也不做冲突判定。
|
|
153
|
+
3. `payload.magic_share_ended_items[]` 使用相同 `share_id` 标记该会话结束。历史映射可保留用于解释本批次中结束前已发生的上下文事件,但不能再作为新的活动共享会话。
|
|
154
|
+
4. 增量拉取从会话中途开始且本地没有对应映射时,重新拉取包含 `magic_share_started` 的完整事件流;仍无法命中则标记未解析。禁止回退到当前文档、最近一次共享或其他 `share_id`。
|
|
155
|
+
|
|
156
|
+
#### 字段合同
|
|
157
|
+
|
|
158
|
+
| 路径 | 含义与处理 |
|
|
159
|
+
| --- | --- |
|
|
160
|
+
| `payload.magic_share_started_items[].share_id/share_doc` | 建立一次共享会话与文档 URL/title 的映射。缺 `share_id` 时不建立映射。 |
|
|
161
|
+
| `payload.magic_share_ended_items[].share_id` | 结束同一 `share_id` 的共享会话;不得结束其他映射。 |
|
|
162
|
+
| `payload.document_context_changed_items[]` | 结构化消费按原序读取;pretty timeline 沿用统一时间排序。每项恰有一个已知 context 才生成 pretty 条目,未知/歧义项只保留 raw。 |
|
|
163
|
+
| `item.operator` | 当前 item 的 actor;缺 ID/name 时不猜共享发起人。 |
|
|
164
|
+
| `item.share_id` | 当前上下文所属共享会话;用它精确查找 `magic_share_started` 建立的 `share_doc` 映射。 |
|
|
165
|
+
| `item.share_doc.url/title` | 当前不作为文档元信息来源;保留在 raw payload 以兼容未来扩展。文档 URL/title 只从同 `share_id` 的 `magic_share_started` 映射取得。 |
|
|
166
|
+
| `item.time` | Unix 毫秒字符串;缺失或非法时 timeline 回退到事件时间。 |
|
|
167
|
+
| `item.comment_focus.comment_id/focused` | `focused=true` 才精确查询一个 comment ID;`false` 是清除焦点,零查询。 |
|
|
168
|
+
| `item.section_location.parent_titles/title/level` | `section_path` 按 parent 原序再追加 title,trim 后丢弃空段,以 ` > ` 连接;`level` 仅作诊断,不参与截断或补层。 |
|
|
169
|
+
| `item.element_preview.action/element_type/element_token/block_id` | 只有 `open + image + token`、`open + whiteboard + token` 可在明确预览意图下路由;其他组合零调用。 |
|
|
170
|
+
| 事件公共 envelope | JSON/NDJSON 只使用既有 `event_id/event_type/event_time/actors/payload`;不新增顶层 `summary/section_path`,也不发明 `derived.document_context`。 |
|
|
171
|
+
| 事件 `payload` | 原始恢复面;未知字段保留,顶层空数组沿用所有会议事件共用的压缩规则,派生字段不会写回 payload。 |
|
|
172
|
+
|
|
173
|
+
#### 评论聚焦:只查一个 ID
|
|
174
|
+
|
|
175
|
+
先读取当前 item 的 `share_id` 和 `comment_focus.comment_id`,再按“共享会话关联”取得 `share_doc.url`。优先把完整 URL 传给现有 shortcut,由它解析实际 `file_token/file_type`(含 Wiki 解包);如果上游只留下裸 token,则必须同时提供已解析且受支持的 `file_type`。
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# 推荐:share_doc.url 完整可用
|
|
179
|
+
lark-cli drive +batch-query-comments \
|
|
180
|
+
--as <same_identity> \
|
|
181
|
+
--url "<share_doc.url>" \
|
|
182
|
+
--comment-ids "<comment_focus.comment_id>" \
|
|
183
|
+
--format json
|
|
184
|
+
|
|
185
|
+
# 只有已经可靠解析出裸 token/type 时使用
|
|
186
|
+
lark-cli drive +batch-query-comments \
|
|
187
|
+
--as <same_identity> \
|
|
188
|
+
--token "<file_token>" \
|
|
189
|
+
--type "<file_type>" \
|
|
190
|
+
--comment-ids "<comment_focus.comment_id>" \
|
|
191
|
+
--format json
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
该 shortcut 对应 `drive.file.comments.batch_query`,请求体必须只有 `comment_ids:["<当前comment_id>"]`。响应处理规则:
|
|
195
|
+
|
|
196
|
+
1. 整个响应 `items` 长度必须恰为 1,且 `items[0].comment_id` 必须与请求 ID 完全相等。`items` 为空、多于 1 项或唯一项 ID 不同都停止;即使多项中恰有一项匹配,也不得挑选该项继续。失败时保留 `share_doc/comment_id`,禁止改用 `drive +list-comments` 扫描整篇文档。
|
|
197
|
+
2. `item.quote` 是引用位置;评论正文和回复在 `item.reply_list.replies`,其中第一条是根评论。
|
|
198
|
+
3. 完整性看命中评论卡片的 **`item.has_more`**,不是外层评论分页,也不是根据非空 `page_token` 猜测。`item.has_more=false` 时直接使用内嵌列表,零 `+list-replies` 调用。
|
|
199
|
+
4. `item.has_more=true` 时忽略截断列表,从**不带 `--page-token` 的第一页**开始重建完整 replies:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
lark-cli drive +list-replies \
|
|
203
|
+
--as <same_identity> \
|
|
204
|
+
--url "<share_doc.url>" \
|
|
205
|
+
--comment-id "<comment_focus.comment_id>" \
|
|
206
|
+
--page-size 100 \
|
|
207
|
+
--format json
|
|
208
|
+
|
|
209
|
+
lark-cli drive +list-replies \
|
|
210
|
+
--as <same_identity> \
|
|
211
|
+
--url "<share_doc.url>" \
|
|
212
|
+
--comment-id "<comment_focus.comment_id>" \
|
|
213
|
+
--page-size 100 \
|
|
214
|
+
--page-token "<returned_page_token>" \
|
|
215
|
+
--format json
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
第一页 `items[0]` 才是根评论;后续页的 `items[0]` 是普通回复。按页原序累积,直到页级 `has_more=false`。如果 `has_more=true` 但 `page_token` 为空、与已用 token 重复、API/权限失败或 comment ID 改变,立即停止并标记为 `partial`;保留已经取得的内容和原始标识,不循环、不重复根评论、不声称完整。
|
|
219
|
+
|
|
220
|
+
#### 章节定位
|
|
221
|
+
|
|
222
|
+
结构化消费直接读取当前 `section_location` item。pretty timeline 会按 `parent_titles` 原序追加 `title`,trim 后丢弃空段,并以 ` > ` 连接;多个 section item 分别展示,不选择其中一个覆盖事件级标量;标题全空时不生成 pretty 条目,只保留 raw。该路径是本地展示派生,不写回 JSON/NDJSON,也不需要或允许为它新增 API 查询。
|
|
223
|
+
|
|
224
|
+
#### 元素预览:显式白名单
|
|
225
|
+
|
|
226
|
+
只有用户或上层 Agent 明确要求预览,并且 item 命中下表时才执行。两个命令都会写入 `--output`,因此输出路径必须由本次调用显式选择;不得默认覆盖已有文件。
|
|
227
|
+
|
|
228
|
+
| action | element_type | token 条件 | 精确命令 |
|
|
229
|
+
| --- | --- | --- | --- |
|
|
230
|
+
| `open` | `image` | `element_token` 非空 | `lark-cli docs +media-preview --as <same_identity> --token "<element_token>" --output "<explicit-path>"` |
|
|
231
|
+
| `open` | `whiteboard` | `element_token` 非空 | `lark-cli docs +media-download --as <same_identity> --type whiteboard --token "<element_token>" --output "<explicit-path>"` |
|
|
232
|
+
| `close` | `image`/`whiteboard` | 任意 | 零调用;pretty 只记录预览关闭 |
|
|
233
|
+
| 未知 | 任意 | 任意 | 零调用;不生成 pretty 条目,只保留 raw |
|
|
234
|
+
| `open` | 未知/空 | 任意 | 零调用;禁止把原值透传到 `--type` |
|
|
235
|
+
| `open` | `image`/`whiteboard` | token 为空 | 零调用;保留 `block_id/element_type/action` 并提示缺 token |
|
|
236
|
+
|
|
237
|
+
#### 失败恢复
|
|
238
|
+
|
|
239
|
+
- parser 遇到未知字段、歧义 one-of 或单 item 缺字段:保留整个事件 `payload`、`event_id/event_type/event_time` 和可用 sibling;该 item 不生成 pretty 条目,也不合成通用描述。
|
|
240
|
+
- `share_id` 缺失、映射未命中或 `share_doc` 冲突:回显 `share_id`、可用的 `share_doc.url/title` 与 `comment_id`;必要时重新拉取完整事件流,仍无法关联则停止,不用最近一次共享兜底。
|
|
241
|
+
- `share_doc` 无法解析:回显 `share_id`、`share_doc.url/title` 与 `comment_id`,提示需要有效文档 URL 或已确认的 `file_token/file_type`;不要猜 type。
|
|
242
|
+
- Drive API/权限失败:保留精确 batch-query 命令与 `comment_id`,根据 CLI 的 `missing_scopes/hint` 恢复权限后重试;不要扫描全部评论。
|
|
243
|
+
- Docs 预览失败:保留 `action/element_type/element_token/block_id` 和用户选择的输出路径,修复权限或 token 后重试同一白名单命令;不要让 `meeting-events` 自动下载兜底。
|
|
244
|
+
- 未知 context/type/action:保留 raw 并说明当前 CLI 没有安全路由;不得自动调用 overwrite、download 或任何猜测的 shortcut。
|
|
245
|
+
|
|
246
|
+
### 8. 关于 `page_token` 的返回与续拉
|
|
147
247
|
|
|
148
248
|
- 不管这次是只查 1 页,还是通过 `--page-all` 已经把当前可见事件都拿完,都应把最后拿到的 `page_token` 一并保留下来并返回给用户。
|
|
149
249
|
- 只要响应里出现 `has_more=true`、pretty 里出现 `more available`,或返回了非空 `page_token`,就必须先判断当前结果是否完整;默认情况下,这意味着你还需要继续分页。
|
|
@@ -160,7 +260,7 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
|
|
|
160
260
|
|------|------|
|
|
161
261
|
| `meeting` | 会议身份与时间状态,包含 `id/topic/meeting_no/start_time/end_time/status` |
|
|
162
262
|
| `identity` | 当前读取身份,包含 `id/name/participant_type/label` |
|
|
163
|
-
| `events` |
|
|
263
|
+
| `events` | 结构化事件列表;每条事件沿用 `event_id/event_type/event_time/actors/payload` 公共 envelope,事件专属数据保留在 `payload` |
|
|
164
264
|
| `warnings` | 非阻断告警列表;事件列表本身仍可使用 |
|
|
165
265
|
| `has_more` | 是否还有下一页 |
|
|
166
266
|
| `page_token` | 下一页游标 |
|
|
@@ -175,6 +275,7 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
|
|
|
175
275
|
| `transcript_received` | 收到转写文本 |
|
|
176
276
|
| `magic_share_started` | 开始共享内容 / 文档 |
|
|
177
277
|
| `magic_share_ended` | 结束共享 |
|
|
278
|
+
| `document_context_changed` | 评论聚焦、章节定位或元素预览上下文变化 |
|
|
178
279
|
|
|
179
280
|
### Forwarding meeting chat and reactions to IM
|
|
180
281
|
|
|
@@ -304,12 +405,12 @@ lark-cli vc +meeting-events \
|
|
|
304
405
|
|
|
305
406
|
## 参考
|
|
306
407
|
|
|
307
|
-
- [lark-vc-agent-meeting-join](lark-vc-agent-meeting-join.md) — 先真实入会
|
|
308
|
-
- [lark-vc-
|
|
309
|
-
- [lark-vc-agent-meeting-leave](lark-vc-agent-meeting-leave.md) — 用户明确要求时离会
|
|
310
|
-
- [lark-vc-search](
|
|
311
|
-
- [lark-vc-recording](
|
|
312
|
-
- [lark-vc-detail](
|
|
313
|
-
- [lark-vc-agent](
|
|
314
|
-
- [lark-vc](
|
|
408
|
+
- [lark-vc-agent-meeting-join](../../lark-vc-agent/references/lark-vc-agent-meeting-join.md) — 先真实入会
|
|
409
|
+
- [lark-vc-meeting-list-active](lark-vc-meeting-list-active.md) — 发现当前可读事件的进行中会议 ID
|
|
410
|
+
- [lark-vc-agent-meeting-leave](../../lark-vc-agent/references/lark-vc-agent-meeting-leave.md) — 用户明确要求时离会
|
|
411
|
+
- [lark-vc-search](lark-vc-search.md) — 搜索历史会议(获取 meeting_id)
|
|
412
|
+
- [lark-vc-recording](lark-vc-recording.md) — 查询 minute_token
|
|
413
|
+
- [lark-vc-detail](lark-vc-detail.md) — 获取会议详情
|
|
414
|
+
- [lark-vc-agent](../../lark-vc-agent/SKILL.md) — Agent 参会能力
|
|
415
|
+
- [lark-vc](../SKILL.md) — 视频会议原子域(Meeting / Note 等核心概念)
|
|
315
416
|
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|
|
@@ -87,5 +87,5 @@ lark-cli vc +meeting-list-active --as bot --user-id <user_open_id> --format json
|
|
|
87
87
|
|
|
88
88
|
## 参考
|
|
89
89
|
|
|
90
|
-
- [lark-vc-agent-meeting-join](lark-vc-agent-meeting-join.md) — 让应用机器人真实入会并拿 `meeting.id`
|
|
91
|
-
- [lark-vc-
|
|
90
|
+
- [lark-vc-agent-meeting-join](../../lark-vc-agent/references/lark-vc-agent-meeting-join.md) — 让应用机器人真实入会并拿 `meeting.id`
|
|
91
|
+
- [lark-vc-meeting-events](lark-vc-meeting-events.md) — 使用 `meeting_id` 读取会中事件
|
|
@@ -129,6 +129,6 @@ VC_CanNotSee, VC_NoSound, VC_LooksGood, VC_SoundsClear
|
|
|
129
129
|
|
|
130
130
|
## 相关
|
|
131
131
|
|
|
132
|
-
- [lark-vc-
|
|
133
|
-
- [lark-vc-
|
|
134
|
-
- [lark-vc-agent-meeting-join](lark-vc-agent-meeting-join.md) — 应用机器人入会
|
|
132
|
+
- [lark-vc-meeting-list-active](lark-vc-meeting-list-active.md) — 发现当前进行中会议 ID
|
|
133
|
+
- [lark-vc-meeting-events](lark-vc-meeting-events.md) — 读取会中事件
|
|
134
|
+
- [lark-vc-agent-meeting-join](../../lark-vc-agent/references/lark-vc-agent-meeting-join.md) — 应用机器人入会
|
|
@@ -40,9 +40,11 @@ lark-cli vc +recording --meeting-ids 69xxxxxxxxxxxxx28 --dry-run
|
|
|
40
40
|
|
|
41
41
|
每次只能指定一种输入方式。同时传入会报错。
|
|
42
42
|
|
|
43
|
-
### 2.
|
|
43
|
+
### 2. 身份支持
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
`--meeting-ids` 和 `--calendar-event-ids` 两种模式都支持 `--as user` 和 `--as bot`。user token 只能查自己有权限的录制;bot 使用 tenant_access_token,只能查 bot 有权限的录制。
|
|
46
|
+
|
|
47
|
+
拿到的 `minute_token` 是在某个身份下解析出来的:下一步传给 `minutes minutes get` / `minutes +detail` / `minutes +download` 时必须显式沿用同一个 `--as`,不要省略让身份被 profile 默认值悄悄换掉(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」)。
|
|
46
48
|
|
|
47
49
|
### 3. 批量上限
|
|
48
50
|
|
|
@@ -78,10 +80,10 @@ lark-cli vc +recording --meeting-ids 69xxxxxxxxxxxxx28 --dry-run
|
|
|
78
80
|
|
|
79
81
|
```bash
|
|
80
82
|
# 第 1 步:通过 meeting_id 查询录制,拿到 minute_token
|
|
81
|
-
lark-cli vc +recording --meeting-ids xxx
|
|
83
|
+
lark-cli vc +recording --meeting-ids xxx --as bot
|
|
82
84
|
|
|
83
|
-
# 第 2 步:使用上一步返回的 minute_token
|
|
84
|
-
lark-cli minutes +download --minute-tokens
|
|
85
|
+
# 第 2 步:使用上一步返回的 minute_token 下载妙记文件,沿用第 1 步的身份
|
|
86
|
+
lark-cli minutes +download --minute-tokens obcnxxxxxxxxxxxxxxxxxxxx --as bot
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
### 场景 2:知道 meeting_id,想查询妙记基础信息
|
|
@@ -136,7 +138,7 @@ lark-cli minutes +download --minute-tokens <minute_token>
|
|
|
136
138
|
| `no recording available` | 该会议无录制或录制未完成 | 确认会议已结束且开启了录制 |
|
|
137
139
|
| `121005 no permission` | 无权查看该会议录制 | 确认是会议参与者或有录制权限 |
|
|
138
140
|
| `124002 recording generating` | 录制文件仍在生成中 | 等待录制完成后重试 |
|
|
139
|
-
| `missing required scope(s)` | 权限不足 |
|
|
141
|
+
| `missing required scope(s)` | 权限不足 | `--as user`:按提示运行 `auth login --scope`;`--as bot`:使用错误中的 `console_url` 去开发者后台开通,**禁止**对 bot 执行 `auth login`(见 [lark-shared](../../lark-shared/SKILL.md) 的权限恢复表) |
|
|
140
142
|
|
|
141
143
|
## 提示
|
|
142
144
|
|
|
@@ -99,6 +99,8 @@ lark-cli vc +search --start "<YYYY-MM-DD>" --end "<YYYY-MM-DD>" --format json
|
|
|
99
99
|
|
|
100
100
|
#### Step 2: 根据 meeting_id 查询产物
|
|
101
101
|
|
|
102
|
+
> **身份延续**:`vc +detail` 支持 `--as user` / `--as bot`。用哪个身份取到 `note_id` / `minute_token`,Step 2、Step 3 后续每一条命令(`note +detail`、`minutes +detail`、`docs +fetch`)都要显式带上**同一个** `--as`;不要省略让身份被 profile 默认值悄悄换掉。完整规则见 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 的「身份延续」。
|
|
103
|
+
|
|
102
104
|
##### 获取会议产物
|
|
103
105
|
|
|
104
106
|
当用户提供 `meeting_id` 并需要会议产物时,先用 `vc +detail` 拿到 `note_id` 和 `minute_token`:
|
|
@@ -111,7 +113,7 @@ lark-cli vc +detail --meeting-ids '<meeting_id1>,<meeting_id2>'
|
|
|
111
113
|
|
|
112
114
|
**优先路径:通过 `note_id` 获取纪要产物**
|
|
113
115
|
|
|
114
|
-
如果用户未明确要求使用妙记,且返回了 `note_id`,**优先**使用 `note +detail` 获取纪要文档的 token
|
|
116
|
+
如果用户未明确要求使用妙记,且返回了 `note_id`,**优先**使用 `note +detail` 获取纪要文档的 token 信息(沿用上一步的 `--as`):
|
|
115
117
|
|
|
116
118
|
```bash
|
|
117
119
|
lark-cli note +detail --note-id <note_id>
|
|
@@ -141,6 +143,8 @@ lark-cli minutes +detail --minute-tokens '<minute_token1>,<minute_token2>' \
|
|
|
141
143
|
|
|
142
144
|
智能纪要(`note_doc_token`)是飞书文档,使用 `docs +fetch` 读取正文内容;**逐字稿的读取方式由 `note_display_type` 决定**:
|
|
143
145
|
|
|
146
|
+
读正文是本链路的最后一跳,身份仍由本链路决定:`--as <user|bot>` 一律填 Step 2 取得 token 时用的那个身份。[lark-doc](../../lark-doc/SKILL.md) 对普通文档推荐 `--as user`,那是用户自有文档的默认建议,**不适用于这里的纪要文档 token**,不要因此切回 user。
|
|
147
|
+
|
|
144
148
|
```bash
|
|
145
149
|
# 纪要正文(两种展示类型都适用)
|
|
146
150
|
lark-cli docs +fetch --doc <note_doc_token> --doc-format markdown
|
|
@@ -149,6 +153,9 @@ lark-cli docs +fetch --doc <note_doc_token> --doc-format markdown
|
|
|
149
153
|
lark-cli docs +fetch --doc <verbatim_doc_token> --doc-format markdown
|
|
150
154
|
|
|
151
155
|
# note_display_type=unified:逐字稿不是独立文档,按 note_id 拉取
|
|
156
|
+
# ⚠️ note +transcript 目前仅支持 --as user;如果上面的 note_id 是通过 --as bot
|
|
157
|
+
# 拿到的,在这一步停下来向用户说明"该纪要逐字稿只能以 user 身份读取",
|
|
158
|
+
# 只有用户明确同意才切到 --as user,不要静默切换身份重试
|
|
152
159
|
lark-cli note +transcript --note-id <note_id>
|
|
153
160
|
```
|
|
154
161
|
|
|
@@ -32,8 +32,8 @@ metadata:
|
|
|
32
32
|
|
|
33
33
|
本 skill 与 [`lark-vc`](../lark-vc/SKILL.md) 并列:
|
|
34
34
|
|
|
35
|
-
- **`lark-vc`**
|
|
36
|
-
- **`lark-vc-agent`**
|
|
35
|
+
- **`lark-vc`** **负责会议查询和共享会中能力**:发现进行中会议、读取事件、发送消息,以及搜索历史会议、查询参会人快照和会议产物
|
|
36
|
+
- **`lark-vc-agent`** **负责应用机器人会中编排**:真实入会 / 离会,并复用上述共享能力读取事件或发送消息
|
|
37
37
|
|
|
38
38
|
按此分工路由,避免两个 skill 语义混淆。
|
|
39
39
|
|
|
@@ -87,7 +87,22 @@ metadata:
|
|
|
87
87
|
10. **只要你是基于** **`+meeting-events`** **来回答一场正在进行中的会议内容,就不能直接复用旧结果。** 无论用户是在问“现在/刚刚/最新”的状态,还是让你“总结一下这个会议讲什么”,都必须先重新拉一次当前事件流,确认拿到的是最新信息,再基于最新结果回答。只有在用户明确要求基于某次历史快照继续分析时,才可以复用旧结果。
|
|
88
88
|
11. **会中聊天 / 互动转发到 IM 时基于 JSON 事件构造 IM post。** `chat_received_items[].message_type == 3` 表示会中 reaction;构造 IM post 时,先用 [`lark-im` reaction emoji 白名单](../lark-im/references/lark-im-reactions.md) 判断同一 item 的 `content`:白名单内才写成 Feishu post `emotion` 节点,不在白名单内则保留原始 key 并写成文本节点,例如 `[CanNotSee]`。普通聊天按文本发送。不要从 pretty/Markdown 重新拼消息,也不要把整条消息退化成纯文本;只降级非法 reaction key。用户已说“发给我 / 推送给我 / 发到我的单聊”时,默认用 bot 身份直接发当前用户;收件人不明确时只补问收件人。
|
|
89
89
|
12. 用户直接问“这个会议讲了什么 / 现在讲到哪了”且上下文没有明确 `meeting_id` 时,先用用户身份发现当前会议;如果用户明确要求应用机器人视角,或上下文已经是应用机器人参会流程,再用应用身份发现。若返回多个会议,展示候选并让用户选择。
|
|
90
|
-
13.
|
|
90
|
+
13. 默认用户身份路径未发现当前会议时,改用 [`lark-vc`](../lark-vc/SKILL.md) 的 `+search` 查询当天最近结束的会议;仍无结果时询问会议时间、主题或会议号,不自行扩大时间范围。应用机器人视角未发现当前会议时,按当前身份解释空结果,不自动查询历史会议或真实入会。
|
|
91
|
+
14. 用户直接提供 **9 位会议号** 并询问会中事件/会议内容时,默认把它当作 active meeting 的筛选条件:先按当前身份查 active meetings,并在返回里匹配 `meeting_no == <9位会议号>`;匹配到唯一会议后取长数字 `meeting_id`,再用同一身份查事件。只有用户明确要求“入会 / 让应用机器人旁听 / 代我参会”时才改用 `+meeting-join`。
|
|
92
|
+
|
|
93
|
+
#### 文档上下文事件
|
|
94
|
+
|
|
95
|
+
`event_type == "document_context_changed"` 时,结构化消费按 `payload.document_context_changed_items` 原序读取;CLI pretty timeline 与其他事件一致,按 item `time` 排序。每个 item 只接受一个 `comment_focus`、`section_location` 或 `element_preview`;零个、多个、字段缺失或未知值不生成 pretty 条目,但保留事件 `payload` 和原标识,不猜字段别名。
|
|
96
|
+
|
|
97
|
+
| context | 消费规则 |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| `comment_focus` | 先按完整事件流中的 `magic_share_started/ended` 维护 `share_id -> share_doc` 共享会话映射,再用当前 item 的 `share_id` 精确关联文档;禁止退化为“最近一次共享”猜测。`document_context_changed` item 自带的 `share_doc` 当前不提供文档信息,只保留在 raw payload,不作为解析来源。仅当 `focused=true`、单个 `comment_id` 和由开始共享事件解析出的有效文档 URL 均存在时,用 `drive +batch-query-comments` 精确查询该 ID;严格匹配、回复分页与失败终止条件见 reference。`focused=false` 表示清除焦点,零评论调用。 |
|
|
100
|
+
| `section_location` | 从当前 item 的 `parent_titles/title` 按原序派生 pretty timeline 中的章节路径;JSON/NDJSON 继续只保留原始 payload,不新增事件顶层 `section_path`。不得根据 `level` 反转、截断或补造路径,也不调用文档 API。 |
|
|
101
|
+
| `element_preview` | 只有用户明确要求预览且 `action=open` 时路由:`element_type=image` 使用 `docs +media-preview --token <element_token> --output <用户选择路径>`;`element_type=whiteboard` 使用 `docs +media-download --type whiteboard --token <element_token> --output <用户选择路径>`。`close`、未知 type/action、缺 token 或无明确预览意图均零调用;禁止把未知 `element_type` 透传给 `--type`,禁止自动选择覆盖路径。 |
|
|
102
|
+
|
|
103
|
+
`vc +meeting-events` 始终只读,不因评论或元素上下文自动调用 Drive/Docs,也不写文件。`share_id` 无法关联、评论 API/权限失败或 reply 游标为空/重复时,明确标记结果为未解析或 partial,并保留 `share_id`、`share_doc`、`comment_id`、`element_token`、`block_id` 和 raw payload,给出可重试的精确命令;不要用“最近一次共享”、全量评论扫描或自动下载兜底。完整命令与终止条件见 [`+meeting-events` reference](../lark-vc/references/lark-vc-meeting-events.md#文档上下文事件消费)。
|
|
104
|
+
|
|
105
|
+
JSON/NDJSON 的单事件 envelope 始终只使用既有 `event_id/event_type/event_time/actors/payload` 字段;不得为 `document_context_changed` 单独增加顶层 `summary/section_path` 或新的 `derived` 层。结构化消费从 `payload.document_context_changed_items[]` 读取,pretty 仅作可读派生展示。
|
|
91
106
|
|
|
92
107
|
### 3. 发送会中文本或会中表情(写操作)
|
|
93
108
|
|
|
@@ -164,15 +179,15 @@ Shortcut 是对常用操作的高级封装(`lark-cli vc +<verb> [flags]`)。
|
|
|
164
179
|
| Shortcut | 类型 | 说明 |
|
|
165
180
|
| --------------------------------------------------------------- | -- | -------------------------------------------------------------------------- |
|
|
166
181
|
| [`+meeting-join`](references/lark-vc-agent-meeting-join.md) | 写 | Join an in-progress meeting by 9-digit meeting number |
|
|
167
|
-
| [`+meeting-list-active`](references/lark-vc-
|
|
168
|
-
| [`+meeting-events`](references/lark-vc-
|
|
169
|
-
| [`+meeting-message-send`](references/lark-vc-
|
|
182
|
+
| [`+meeting-list-active`](../lark-vc/references/lark-vc-meeting-list-active.md) | 读 | List active meetings and discover meeting_id for event reads |
|
|
183
|
+
| [`+meeting-events`](../lark-vc/references/lark-vc-meeting-events.md) | 读 | List meeting events visible to the current identity (participant, transcript, chat, share, document context) |
|
|
184
|
+
| [`+meeting-message-send`](../lark-vc/references/lark-vc-meeting-message-send.md) | 写 | Send an in-meeting text message or reaction emoji |
|
|
170
185
|
| [`+meeting-leave`](references/lark-vc-agent-meeting-leave.md) | 写 | Leave a meeting by meeting\_id |
|
|
171
186
|
|
|
172
187
|
- [`+meeting-join`](references/lark-vc-agent-meeting-join.md):入参格式、写操作可见性风险、入会失败排查。
|
|
173
|
-
- [`+meeting-list-active`](references/lark-vc-
|
|
174
|
-
- [`+meeting-events`](references/lark-vc-
|
|
175
|
-
- [`+meeting-message-send`](references/lark-vc-
|
|
188
|
+
- [`+meeting-list-active`](../lark-vc/references/lark-vc-meeting-list-active.md):用户身份和应用身份的不同返回范围。
|
|
189
|
+
- [`+meeting-events`](../lark-vc/references/lark-vc-meeting-events.md):`meeting_id` 来源、身份延续、分页和错误码(10005 / 20001 / 20002)。
|
|
190
|
+
- [`+meeting-message-send`](../lark-vc/references/lark-vc-meeting-message-send.md):会中文本、完整 `emoji_type` 列表、身份延续和写操作风险。
|
|
176
191
|
- [`+meeting-leave`](references/lark-vc-agent-meeting-leave.md):`meeting_id` 的来源与写操作可见性。
|
|
177
192
|
|
|
178
193
|
## 应用身份权限配置检查
|
|
@@ -131,8 +131,8 @@ lark-cli vc +detail --meeting-ids <meeting.id>
|
|
|
131
131
|
## 参考
|
|
132
132
|
|
|
133
133
|
- [lark-vc-agent-meeting-leave](lark-vc-agent-meeting-leave.md) — 对应的离会命令
|
|
134
|
-
- [lark-vc-
|
|
135
|
-
- [lark-vc-
|
|
134
|
+
- [lark-vc-meeting-list-active](../../lark-vc/references/lark-vc-meeting-list-active.md) — 发现当前可读事件的进行中会议 ID
|
|
135
|
+
- [lark-vc-meeting-events](../../lark-vc/references/lark-vc-meeting-events.md) — 会中事件流
|
|
136
136
|
- [lark-vc-search](../../lark-vc/references/lark-vc-search.md) — 搜索历史会议记录
|
|
137
137
|
- [lark-vc-recording](../../lark-vc/references/lark-vc-recording.md) — 查询 minute_token
|
|
138
138
|
- [lark-vc-detail](../../lark-vc/references/lark-vc-detail.md) — 获取会议详情
|
|
@@ -95,8 +95,8 @@ lark-cli vc +detail --meeting-ids <meeting.id>
|
|
|
95
95
|
## 参考
|
|
96
96
|
|
|
97
97
|
- [lark-vc-agent-meeting-join](lark-vc-agent-meeting-join.md) — 对应的入会命令
|
|
98
|
-
- [lark-vc-
|
|
99
|
-
- [lark-vc-
|
|
98
|
+
- [lark-vc-meeting-list-active](../../lark-vc/references/lark-vc-meeting-list-active.md) — 发现当前可读事件的进行中会议 ID
|
|
99
|
+
- [lark-vc-meeting-events](../../lark-vc/references/lark-vc-meeting-events.md) — 会中事件流
|
|
100
100
|
- [lark-vc-search](../../lark-vc/references/lark-vc-search.md) — 搜索历史会议(获取 meeting_id)
|
|
101
101
|
- [lark-vc-recording](../../lark-vc/references/lark-vc-recording.md) — 查询 minute_token
|
|
102
102
|
- [lark-vc-detail](../../lark-vc/references/lark-vc-detail.md) — 获取会议详情
|
|
@@ -36,6 +36,7 @@ metadata:
|
|
|
36
36
|
- 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id <ID> --yes`(高风险写操作,必须显式 `--yes`)。
|
|
37
37
|
- 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/<wiki_token>"`);务必先用 `wiki +node-get` 解析出 `data.space_id` 再传。
|
|
38
38
|
- 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。
|
|
39
|
+
- 用户要**原地重命名 Wiki 节点 / 修改节点标题**:使用 `lark-cli drive +update-title --url '<wiki_url>' --title '<new_title>'`。该命令保留同一个 `node_token`,并会根据 API 返回给出准确的缺失 scope 和授权提示;不要探索 raw `wiki.nodes` 的 `update_title` 端点,也不要通过复制或新建第二个节点实现改名。
|
|
39
40
|
- 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id <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 <url>` 解析出 `node_token`。
|
|
40
41
|
- `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。
|
|
41
42
|
- 用户说“给知识库添加成员/管理员”:先把目标解析成“用户 / 群 / 部门 / 应用”四类之一,再决定 `--member-type`,不要先调 `wiki +member-add` 再根据报错反推类型。
|
|
@@ -111,7 +112,8 @@ lark-cli wiki <resource> <method> [flags] # 调用 API
|
|
|
111
112
|
|
|
112
113
|
## 不在本 skill 范围
|
|
113
114
|
|
|
114
|
-
-
|
|
115
|
+
- 上传文件到知识库节点下 → [`lark-drive`](../lark-drive/SKILL.md)(`drive +upload --wiki-token`)
|
|
116
|
+
- 下载 Wiki 节点对应的文件(底层 `obj_type` 为 `file`)→ [`lark-drive`](../lark-drive/SKILL.md):`drive +download --wiki-token <node_token>` 或 `drive +download --url <wiki_url>`(CLI 会先把 Wiki 节点解析到底层文件再下载);底层是 `docx`/`sheet`/`bitable`/`slides` 等在线文档时改用 `drive +export`
|
|
115
117
|
- 编辑文档正文内容 → [`lark-doc`](../lark-doc/SKILL.md)
|
|
116
118
|
- 表格 / 多维表格数据操作 → [`lark-sheets`](../lark-sheets/SKILL.md) / [`lark-base`](../lark-base/SKILL.md)
|
|
117
119
|
- 按名称搜索文档 / Wiki / 表格文件、评论与权限管理 → [`lark-drive`](../lark-drive/SKILL.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# lark-wiki +node-copy
|
|
2
2
|
|
|
3
|
-
Copy
|
|
3
|
+
Copy one Wiki node, including that node's content, to a target space or under a target parent node. Descendant nodes are not copied.
|
|
4
4
|
|
|
5
5
|
> ⚠️ **High-risk write** — the upstream API is flagged `danger: true`, so this shortcut requires explicit `--yes` confirmation before issuing the request. Forgetting `--yes` returns a `confirmation_required` error and the copy is **not** performed.
|
|
6
6
|
|
|
@@ -46,26 +46,12 @@ lark-cli wiki +node-copy \
|
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
## Migration workflow
|
|
50
|
-
|
|
51
|
-
To migrate a subtree from one space to another:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
# 1. List nodes in the source space
|
|
55
|
-
lark-cli wiki +node-list --space-id source_space_id
|
|
56
|
-
|
|
57
|
-
# 2. Copy each node to the target space
|
|
58
|
-
lark-cli wiki +node-copy \
|
|
59
|
-
--space-id <source_space_id> \
|
|
60
|
-
--node-token wikcn_EXAMPLE_TOKEN \
|
|
61
|
-
--target-space-id <target_space_id> \
|
|
62
|
-
--yes
|
|
63
|
-
```
|
|
64
|
-
|
|
65
49
|
## Notes
|
|
66
50
|
|
|
67
|
-
- Copying is recursive
|
|
68
|
-
-
|
|
51
|
+
- Copying is non-recursive: only the requested node and its content are copied.
|
|
52
|
+
- Descendant nodes must be copied separately.
|
|
53
|
+
- When the Wiki service returns `131009` lock contention, the CLI retries twice with bounded exponential backoff. If contention remains, wait before retrying again and avoid concurrent writes under the same target parent.
|
|
54
|
+
- To move an existing Wiki node without keeping the source, use [`wiki +move`](lark-wiki-move.md) instead of copy-then-delete.
|
|
69
55
|
|
|
70
56
|
## Required Scope
|
|
71
57
|
|