@amaster.ai/pi-lark 0.1.13 → 0.1.14
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-base/references/lark-base-workflow-schema.md +2 -2
- package/skills/lark-calendar/SKILL.md +44 -16
- package/skills/lark-calendar/references/lark-calendar-list-attendees.md +33 -0
- package/skills/lark-calendar/references/lark-calendar-recurring.md +62 -66
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +7 -1
- package/skills/lark-drive/references/lark-drive-comment-location.md +1 -1
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +1 -1
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +1 -1
- package/skills/lark-okr/SKILL.md +38 -29
- package/skills/lark-okr/references/lark-okr-comment-create.md +103 -0
- package/skills/lark-okr/references/lark-okr-comment-delete.md +59 -0
- package/skills/lark-okr/references/lark-okr-comment-detail.md +80 -0
- package/skills/lark-okr/references/lark-okr-comment-get.md +66 -0
- package/skills/lark-okr/references/lark-okr-comment-list.md +79 -0
- package/skills/lark-okr/references/lark-okr-comment-patch.md +73 -0
- package/skills/lark-okr/references/lark-okr-comment-solve-reopen.md +83 -0
- package/skills/lark-okr/references/lark-okr-entities.md +66 -2
- package/skills/lark-sheets/SKILL.md +1 -0
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +3 -3
- package/skills/lark-sheets/references/lark-sheets-legacy-command-migration.md +152 -0
- package/skills/lark-sheets/references/lark-sheets-read-data.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-lark",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"vitest": "^4.0.0"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@amaster.ai/pi-shared": "0.1.
|
|
64
|
+
"@amaster.ai/pi-shared": "0.1.14"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"fetch-skills": "node scripts/fetch-skills.mjs",
|
|
@@ -239,7 +239,7 @@
|
|
|
239
239
|
{
|
|
240
240
|
"table_name": "项目表",
|
|
241
241
|
"field_name": "截止日期",
|
|
242
|
-
"offset": 1,
|
|
242
|
+
"offset": -1,
|
|
243
243
|
"unit": "DAY",
|
|
244
244
|
"hour": 9,
|
|
245
245
|
"minute": 0,
|
|
@@ -252,7 +252,7 @@
|
|
|
252
252
|
| `table_name` | 是 | 数据表名 |
|
|
253
253
|
| `field_name` | 是 | 日期字段名(必须为 `datetime` / `created_at` / `formula` / `lookup` 类型) |
|
|
254
254
|
| `unit` | 是 | 偏移单位:`MINUTE` / `HOUR` / `DAY` / `WEEK` / `MONTH` |
|
|
255
|
-
| `offset` | 是 |
|
|
255
|
+
| `offset` | 是 | 提前/延后的偏移量(触发时间 = 日期字段时间 + `offset` × `unit`,因此负数=提前、正数=延后;范围由 `unit` 决定):`MINUTE` ∈ {0, 5, 15, 30, -5, -15, -30};`HOUR` ∈ [-6, -1] ∪ [1, 6];`DAY` ∈ [-7, 7];`WEEK` ∈ [-7, -1] ∪ [1, 7];`MONTH` ∈ [-7, -1] ∪ [1, 7] |
|
|
256
256
|
| `hour` | 是 | 触发小时 (0-23),默认 9 |
|
|
257
257
|
| `minute` | 是 | 触发分钟 (0-59),默认 0 |
|
|
258
258
|
| `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
|
|
@@ -35,15 +35,17 @@ lark-cli calendar +agenda --as bot
|
|
|
35
35
|
| Shortcut | 说明 |
|
|
36
36
|
|----------|------|
|
|
37
37
|
| `+agenda` | 查看日程安排(默认今天) |
|
|
38
|
-
| [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id |
|
|
38
|
+
| [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id,**注意**: 视频会议链接获取走+get命令 |
|
|
39
39
|
| [`+create`](references/lark-calendar-create.md) | 创建日程并邀请参会人(ISO 8601 时间) |
|
|
40
|
-
| [`+update`](references/lark-calendar-update.md) |
|
|
41
|
-
| `+
|
|
40
|
+
| [`+update`](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室;重复性日程/例外必须传 `--apply-to`(详见 [重复性日程操作规范](references/lark-calendar-recurring.md)) |
|
|
41
|
+
| `+delete` | 删除日程;重复性日程/例外必须传 `--apply-to`(详见 [重复性日程操作规范](references/lark-calendar-recurring.md)) |
|
|
42
|
+
| `+freebusy` | 查询主日历的忙闲/RSVP状态/空闲时间段。(**如需预约/推荐时间段**走 `+suggestion`——它综合工作时间、忙碌区间和休息时间推荐。) |
|
|
42
43
|
| [`+room-find`](references/lark-calendar-room-find.md) | 针对一个或多个**明确的**时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) |
|
|
43
44
|
| [`+rsvp`](references/lark-calendar-rsvp.md) | 回复日程(接受/拒绝/待定) |
|
|
44
45
|
| [`+join-event`](references/lark-calendar-join-event.md) | 凭分享 token 加入日程(分享链接/二维码/分享卡片/RSVP 卡片) |
|
|
45
46
|
| [`+suggestion`](references/lark-calendar-suggestion.md) | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 |
|
|
46
47
|
| [`+transfer`](references/lark-calendar-transfer.md) | 把日程组织者转让给另一个用户或机器人;不可逆,需 `--yes` |
|
|
48
|
+
| [`+list-attendees`](references/lark-calendar-list-attendees.md) | 列出日程的参与人和会议室(支持按 `--type` 过滤:user / resource / chat / third_party) |
|
|
47
49
|
|
|
48
50
|
### `+get` — 单日程详情
|
|
49
51
|
|
|
@@ -56,6 +58,8 @@ lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id>
|
|
|
56
58
|
|
|
57
59
|
日程描述统一使用 `description` 一个字段,按 **Markdown** 富文本处理。读取日程时 `description` 返回 Markdown 富文本(仅有纯文本描述时返回该纯文本);创建/更新日程时也通过 `--description` 传入 Markdown。
|
|
58
60
|
|
|
61
|
+
> `+get` 返回不含参会人和会议室。需要参与人视角(用户 / 会议室 / 群 / 三方邮箱)请调用 [`+list-attendees`](references/lark-calendar-list-attendees.md)。
|
|
62
|
+
|
|
59
63
|
### `+search-event` — 按关键词、时间范围和参会人搜索日程
|
|
60
64
|
|
|
61
65
|
仅返回基础字段(`event_id`/`summary`/`start`/`end` 等),需要详情请走 `+get`。
|
|
@@ -69,6 +73,13 @@ lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id>
|
|
|
69
73
|
lark-cli calendar +search-event --query "周会" --start 2026-04-20 --end 2026-04-27 --attendee-ids "ou_user1,oc_chat1,omm_room1" --page-token <page_token> --page-size 30
|
|
70
74
|
```
|
|
71
75
|
|
|
76
|
+
### `+delete` — 删除日程
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# calendar_id不传,默认primary
|
|
80
|
+
lark-cli calendar +delete --calendar-id <calendar_id> --event-id <event_id> --notify true
|
|
81
|
+
```
|
|
82
|
+
|
|
72
83
|
### `+agenda` — 查看近期日程安排
|
|
73
84
|
|
|
74
85
|
默认查询当天。结果应整理为按日期分组、按开始时间升序的易读时间线。
|
|
@@ -83,20 +94,36 @@ lark-cli calendar +agenda --start 2026-03-10 --end 2026-03-17 --calendar-id <cal
|
|
|
83
94
|
- 已取消的日程自动过滤;无日程时直接告知"日程清空"。
|
|
84
95
|
- 时间范围超过 40 天会自动拆分查询并合并结果。
|
|
85
96
|
|
|
86
|
-
### `+freebusy` —
|
|
97
|
+
### `+freebusy` — 查询主日历忙闲时段 / 事件 / 公共空闲
|
|
87
98
|
|
|
88
|
-
|
|
99
|
+
`+freebusy` 一个入口承担四种视角:几何计算类(`busy` / `free` / `common_free`)走自动合并;事件维度类(`raw_busy`)保留每条上游日程 + `rsvp_status`。
|
|
89
100
|
|
|
90
101
|
```bash
|
|
91
102
|
# start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天
|
|
92
|
-
# user-id 目标用户 open_id
|
|
93
|
-
|
|
103
|
+
# user-id 目标用户 open_id,可重复或用逗号分隔;默认当前登录用户,bot 身份必须显式传至少一个
|
|
104
|
+
# type 视角四选一(默认 busy):
|
|
105
|
+
# busy 每个 user 合并后的忙碌区间(找空档、看忙碌时段)
|
|
106
|
+
# raw_busy 每个 user 的原始日程块 + rsvp_status(数会议、看每个会的 rsvp)
|
|
107
|
+
# free 每个 user 在时间窗内的空闲区间(可带 --min-duration 过滤)
|
|
108
|
+
# common_free 所有 user 的共同空闲区间(可带 --min-duration 过滤)
|
|
109
|
+
# min-duration 仅对 free / common_free 生效;Go duration 格式,例如 30m、1h、90m
|
|
110
|
+
|
|
111
|
+
# 查询忙碌时间段(去重并合并相邻/重叠段)
|
|
112
|
+
lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type busy
|
|
113
|
+
|
|
114
|
+
# 看别人有几个会、每个会的起止 + rsvp(不合并相邻/重叠段,带rsvp状态)
|
|
115
|
+
lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type raw_busy
|
|
116
|
+
|
|
117
|
+
# 查询用户空闲时间段
|
|
118
|
+
lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-11 --user-id ou_a,ou_b --type free
|
|
119
|
+
|
|
120
|
+
# 多人公共空闲时间段(推荐替代手工合并)
|
|
121
|
+
lark-cli calendar +freebusy --start 2026-03-11T09:00:00+08:00 --end 2026-03-11T18:00:00+08:00 --user-id ou_a,ou_b --type common_free --min-duration 30m
|
|
94
122
|
```
|
|
95
123
|
|
|
96
124
|
用法提示:
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
- 预约/改约场景下,调用规则(参与人过多、含群组、来自 `+suggestion` 等)详见 [schedule-clear-time.md § 查询忙闲](references/lark-calendar-schedule-clear-time.md#2-查询忙闲)。
|
|
125
|
+
- **`+freebusy` 只适用于查询忙碌/空闲时间段这一事实**。如果目标是"给会议**推荐**一个合适的时间段"(单人或多人),必须优先使用 [`+suggestion`](references/lark-calendar-suggestion.md)——它会综合**工作时间段、忙碌时间段、休息时间段**来推荐,`+freebusy` 只回答"哪些区间空着",不判断该区间是否适合排会。
|
|
126
|
+
- **多人公共空闲**:只想拿"哪些区间共同没被占"→ `--type common_free [--min-duration <dur>]`;想拿"推荐的会议时间段"→ 走 `+suggestion`。
|
|
100
127
|
|
|
101
128
|
## 前置条件路由
|
|
102
129
|
|
|
@@ -120,6 +147,9 @@ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
|
|
|
120
147
|
- **时间块 vs 时间范围**:时间块是具体确定的连续时间段(如 `14:00~15:00`),时间范围是泛指(如"今天下午")。`+room-find` 必须基于确定时间块,不能基于模糊范围。
|
|
121
148
|
- **会议室(Room)**:"room"不是"房间",是"会议室"。会议室是日程的一种参与人(resource attendee),不能脱离日程单独预定。
|
|
122
149
|
- **日程会议 ID(Meeting ID)**:日程的历史视频会议 ID,在日程上开过视频会议才会有。
|
|
150
|
+
- **日程分享链接 vs 会议链接**:两者是不同事物,不可混用。
|
|
151
|
+
- 日程分享链接:`https://<domain>/calendar/share?token=<token>`,指向日程本身,用于分享日程详情。
|
|
152
|
+
- 会议链接:`https://<domain>/j/<number>`,指向视频会议入口;同一重复性日程序列的所有实例共用同一个会议链接。
|
|
123
153
|
|
|
124
154
|
## 术语映射
|
|
125
155
|
|
|
@@ -134,11 +164,12 @@ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
|
|
|
134
164
|
| 查询日历/日程或未来时间的会议 | 本 skill |
|
|
135
165
|
| 按关键词搜索日程 | 本 skill(`+search-event`) |
|
|
136
166
|
| 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill(`+meeting`) |
|
|
167
|
+
| 查看日程的参会人 / 会议室(含 `--type resource` 只看会议室) | 本 skill([`+list-attendees`](references/lark-calendar-list-attendees.md)) |
|
|
137
168
|
| 把日程分享给某人 / 群 | 本 skill:先 `calendar events share_info` 取**日程分享链接**,再走 [lark-im](../lark-im/SKILL.md) 发送该链接;分享链接不是 applink,不要自己拼接或用 applink 代替 |
|
|
138
169
|
| 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先 `+meeting` 取 `meeting_id`,再进入 [`lark-meeting`](../lark-meeting/SKILL.md):[`vc +detail`](../lark-meeting/references/lark-vc-detail.md) → [`note +detail`](../lark-meeting/references/lark-note-detail.md) / [`minutes +detail`](../lark-meeting/references/lark-minutes-detail.md) |
|
|
139
170
|
| 预约/改约日程、调整时间、添加/更换会议室、查会议室 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) |
|
|
140
171
|
| 仅编辑日程字段(标题/描述)或增删参会人(不涉及时间和会议室) | 先定位 `event_id`,再读 [+update](references/lark-calendar-update.md) 执行变更 |
|
|
141
|
-
| 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md)
|
|
172
|
+
| 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md);`+update` / `+delete` 均通过 `--apply-to=single|all|this-and-following` 指定范围 |
|
|
142
173
|
| 转让日程组织者(「把这个日程交给 XX」「组织者改成 XX」「这个会转给我」「bot 建完还给我」) | 读 [+transfer](references/lark-calendar-transfer.md);`--as` 用**当前组织者**身份,`--to-user-id` 传接收人,用户和机器人任意互转 |
|
|
143
174
|
|
|
144
175
|
## 任务类型分流
|
|
@@ -170,9 +201,6 @@ lark-cli calendar <resource> <method> [flags]
|
|
|
170
201
|
# 查询用户主日历
|
|
171
202
|
lark-cli calendar calendars primary
|
|
172
203
|
|
|
173
|
-
# 获取日程详情及 app_link
|
|
174
|
-
lark-cli calendar events get --calendar-id <calendar_id> --event-id <event_id>
|
|
175
|
-
|
|
176
204
|
# 获取日程分享链接(分享给他人/群前必须先拿到)
|
|
177
205
|
# 返回形如 {{domain}}/calendar/share?token=<token> 的分享链接,不是 applink;直接把该链接发给对方(对方可凭链接中的 token 走 +join-event 加入)
|
|
178
206
|
lark-cli calendar events share_info --calendar-id <calendar_id> --event-id <event_id>
|
|
@@ -194,8 +222,8 @@ lark-cli calendar events delete --calendar-id <calendar_id> --event-id <event_id
|
|
|
194
222
|
## 常用其他域命令
|
|
195
223
|
|
|
196
224
|
```bash
|
|
197
|
-
#
|
|
198
|
-
lark-cli contact +search-user --
|
|
225
|
+
# 批量搜索多个用户,更多参数详见 lark-contact
|
|
226
|
+
lark-cli contact +search-user --queries "<q1>,<q2>" --as user
|
|
199
227
|
|
|
200
228
|
# 搜索群聊,更多参数详见 lark-im
|
|
201
229
|
lark-cli im +chat-search --query <query> --as user
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# calendar +list-attendees
|
|
2
|
+
|
|
3
|
+
列出单个日程的参与人(用户 / 会议室 / 群 / 三方邮箱)。只读。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 查看指定日历(默认primary)下某日程的全部类型参与人和会议室
|
|
9
|
+
lark-cli calendar +list-attendees --calendar-id <calendar_id> --event-id <event_id>
|
|
10
|
+
|
|
11
|
+
# 只看会议室
|
|
12
|
+
lark-cli calendar +list-attendees --event-id <event_id> --type resource
|
|
13
|
+
|
|
14
|
+
# 同时看用户与会议室
|
|
15
|
+
lark-cli calendar +list-attendees --event-id <event_id> --type user --type resource
|
|
16
|
+
|
|
17
|
+
# 分页续拉(由调用方基于 has_more / page_token 决定是否再调一次)
|
|
18
|
+
lark-cli calendar +list-attendees --event-id <event_id> --page-size 100 --page-token <page_token>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 参数
|
|
22
|
+
|
|
23
|
+
| 参数 | 必填 | 说明 |
|
|
24
|
+
|------|------|------|
|
|
25
|
+
| `--event-id <id>` | **是** | 目标日程 ID |
|
|
26
|
+
| `--calendar-id <id>` | 否 | 日历 ID,省略则使用主日历(`primary`) |
|
|
27
|
+
| `--type <type>` | 否 | 按 attendee 类型过滤;可重复或逗号分隔。枚举:`user` / `resource` / `chat` / `third_party`。留空返回全部类型|
|
|
28
|
+
| `--page-size <n>` | 否 | 上游分页大小;默认 `20`|
|
|
29
|
+
| `--page-token <token>` | 否 | 上游分页游标,来自上一次返回的 `page_token` |
|
|
30
|
+
|
|
31
|
+
## 提示
|
|
32
|
+
|
|
33
|
+
- `type=chat` 的群参与人**不返回 `rsvp_status`**(群本身没有群级 RSVP 状态)。需要群成员的 RSVP 请走原生 OpenAPI。
|
|
@@ -1,91 +1,87 @@
|
|
|
1
1
|
# 重复性日程操作规范
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
重复性日程/例外的编辑和删除必须显式指定操作范围。相关命令:
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- **event_id 结构**:`event_id` 的格式为 `{event_uid}_{originalTime}`。普通日程或重复性日程本体的 `originalTime` 为 `0`;例外的 `originalTime > 0`,代表该例外在原重复性序列中本来的时间位置。因此 `{event_uid}_0` 即为原重复性日程的 `event_id`。
|
|
8
|
-
- **原重复性日程**:携带 `rrule` 的日程本体,`event_id` 形如 `{event_uid}_0`。系列的所有属性(标题、时间、rrule、描述等)都挂在本体上。
|
|
9
|
-
- **例外(Exception)**:对某次实例做过「仅此次」编辑后产生的独立日程,`event_id` 形如 `{event_uid}_{originalTime}`(`originalTime > 0`)。通过 `event_uid` 部分即可关联回原重复性日程。
|
|
10
|
-
- 删除/更新原重复性日程 **不会** 级联处理例外——必须手动逐个处理。
|
|
11
|
-
|
|
12
|
-
## 前置步骤(所有范围通用)
|
|
5
|
+
- `lark-cli calendar +delete` — 删除日程;重复性日程/例外必须传 `--apply-to`。
|
|
6
|
+
- `lark-cli calendar +update` — 更新日程;重复性日程/例外必须传 `--apply-to`。
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
2. 通过 `events instance_view` 或 `+agenda` 列出实例,识别哪些是例外(`event_id` 中 `originalTime > 0` 的即为例外)。
|
|
16
|
-
3. 确认用户的操作范围。
|
|
8
|
+
> **强制规则:用户未明确操作范围时,必须先向用户确认,禁止 Agent 默认选取任何 `--apply-to`。** 用户表达含糊(如「删掉这个会」「改一下这个日程」)时也必须确认——`--apply-to=single` 只删/改一次,`--apply-to=all` 会影响整个序列及所有例外,代价截然不同。
|
|
17
9
|
|
|
18
|
-
##
|
|
10
|
+
## `--apply-to` 与日程类型的匹配矩阵
|
|
19
11
|
|
|
20
|
-
|
|
21
|
-
|------|------|------|
|
|
22
|
-
| 1 | `lark-cli calendar +update --event-id <原重复日程ID> --start ... --end ...` | 更新原重复性日程的时间 |
|
|
23
|
-
| 2 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<例外ID>","need_notification":false}'` (逐个) | 时间变更后例外已无意义,必须删除 |
|
|
12
|
+
先记住四种日程类型:**普通日程(Normal)**、**重复性日程本体(Master)**、**重复性日程实例(Instance)**、**重复性日程例外(Exception)**。四种类型允许的 `--apply-to` 组合如下(❌ = 传入即报错):
|
|
24
13
|
|
|
25
|
-
|
|
14
|
+
| 日程类型 | event_id 形状 | `single` | `all` | `this-and-following` |
|
|
15
|
+
|----------|--------------|:--------:|:-----:|:--------------------:|
|
|
16
|
+
| Normal(普通日程) | `{uid}_0`(无 rrule) | 隐含默认 | ❌ | ❌ |
|
|
17
|
+
| Master(重复性日程本体) | `{uid}_0`(有 rrule) | ❌ | ✅ | ❌ |
|
|
18
|
+
| Instance(重复性日程实例) | `{uid}_{ts>0}`,`is_exception=false` | ✅ | ✅ | ✅ |
|
|
19
|
+
| Exception(重复性日程例外)| `{uid}_{ts>0}`,`is_exception=true` | ✅ | ✅ | ❌(Exception 已占据该时间位,需改传另一个未被独立化的 Instance id 作为分割点) |
|
|
26
20
|
|
|
27
|
-
|
|
21
|
+
三个 `--apply-to` 的含义与影响面:
|
|
28
22
|
|
|
29
|
-
|
|
|
30
|
-
|
|
31
|
-
|
|
|
32
|
-
|
|
|
23
|
+
| 值 | 语义 | 影响面 |
|
|
24
|
+
|----|------|--------|
|
|
25
|
+
| `single` | 只操作当前这一次 | 只改/删传入的这一个 event_id 本身;例外不动其它例外,实例不动整个序列 |
|
|
26
|
+
| `all` | 操作整条重复性序列 | Master 本体 **和** 所有例外都会被处理(时间变更时例外先被删除,其它字段则会同步 PATCH 到每个例外) |
|
|
27
|
+
| `this-and-following` | 从「起始实例」起截断并新建后续序列 | 用 UNTIL 截断 Master、删除起始实例起的所有未来例外、以起始实例的时间为起点 创建 一条新序列继承 Master 的默认字段 |
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
## 删除全部
|
|
37
|
-
|
|
38
|
-
| 步骤 | 命令 | 说明 |
|
|
39
|
-
|------|------|------|
|
|
40
|
-
| 1 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<原重复日程ID>","need_notification":true}'` | 删除重复性日程本体 |
|
|
41
|
-
| 2 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<例外ID>","need_notification":false}'` (逐个) | 删除所有例外日程 |
|
|
29
|
+
## 关键概念
|
|
42
30
|
|
|
43
|
-
>
|
|
31
|
+
- **event_id 结构**:`event_id` 的格式为 `{event_uid}_{originalTime}`。`originalTime = 0` 表示 Master 或 Normal;`originalTime > 0` 表示某一次在原序列中本来的时间戳(Unix 秒)。因此 `{event_uid}_0` 即为重复性日程本体的 `event_id`。
|
|
32
|
+
- **Master(重复性日程本体)**:携带 `rrule` 的日程本体,`event_id` 形如 `{event_uid}_0`。序列的所有默认属性(标题、时间、rrule、描述、参会人等)都挂在本体上。
|
|
33
|
+
- **Normal(普通日程)**:不携带 `rrule`,`event_id` 也是 `{event_uid}_0`,但没有序列概念。只能用 `--apply-to=single`(可省略)。
|
|
34
|
+
- **Instance vs Exception —— 二者最容易混淆,务必区分**:
|
|
35
|
+
- **Instance(实例)**:由 rrule 展开出来的「虚拟」发生点,本身不落库。`event_id` 形如 `{event_uid}_{originalTime}`(`originalTime > 0`),是从 `+agenda` / `+search-event` 返回的可寻址标识。**从未被单独编辑过**——所有属性都从 Master 继承而来。在 API 层可以对 Instance id 发 GET,但对它发写操作时(操作此次),会先把它「实体化」成一条 Exception。
|
|
36
|
+
- **Exception(例外)**:某个 Instance 被显式修改(改时间、改标题、改参会人等)或被显式删除标记后落库产生的**独立日程**。`event_id` 形状与 Instance 完全一样(`{event_uid}_{originalTime}`),肉眼**无法**区分——唯一可靠的判据是 `calendar +get` 返回的 `is_exception=true`(Instance 为 false)。Exception 已经脱离 Master 的字段继承,是一份可独立编辑/删除的实体。
|
|
37
|
+
- **一句话总结**:Instance 是 rrule 展开出来的「占位符」,Exception 是「已经被独立化的实例」。判断当前 event_id 是哪种,先跑 `+get` 看 `is_exception`。
|
|
38
|
+
- 删除/更新 Master **不会** 级联处理例外——命令内部会显式扫描并处理例外。
|
|
44
39
|
|
|
45
|
-
##
|
|
40
|
+
## 前置步骤(所有范围通用)
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
1. 通过 `+agenda` 或 `+search-event` 定位到目标日程 / 实例,拿到 `event_id`。
|
|
43
|
+
2. 判断日程类型:
|
|
44
|
+
- `event_id` 后缀 `_0` 且无 `recurrence` → Normal;
|
|
45
|
+
- `event_id` 后缀 `_0` 且有 `recurrence` → Master;
|
|
46
|
+
- `event_id` 后缀 `_{数字>0}` 且 `is_exception=false` → Instance;
|
|
47
|
+
- `event_id` 后缀 `_{数字>0}` 且 `is_exception=true` → Exception。
|
|
48
|
+
- 需要精确判断时跑 `calendar +get` 看 `recurrence` 和 `is_exception` 字段。
|
|
49
|
+
3. **与用户确认 `--apply-to` 范围(未明确一律先问,禁止默认)**。
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
> 新日程应继承原日程的参会人、会议室等配置(除非用户明确要修改)。
|
|
51
|
+
## 常见命令
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
### 删除
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
| 2 | `lark-cli calendar events delete ...` (逐个) | 删除指定时间之后(含)的例外日程 |
|
|
55
|
+
```bash
|
|
56
|
+
# 删除此次(例外或instance)
|
|
57
|
+
lark-cli calendar +delete --event-id <uid_originalTime> --apply-to single
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
# 删除全部(主日程 id 或任意 例外/instance id)
|
|
60
|
+
lark-cli calendar +delete --event-id <uid_originalTime> --apply-to all
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
# 删除此次及后续(必须传具体instance id)
|
|
63
|
+
lark-cli calendar +delete --event-id <uid_originalTime> --apply-to this-and-following
|
|
64
|
+
```
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
- **删除仅此次**:定位到具体实例的 `event_id`,调用 `events delete`。
|
|
66
|
+
### 更新
|
|
69
67
|
|
|
70
|
-
|
|
68
|
+
```bash
|
|
69
|
+
# 编辑此次(单个实例 / 例外)
|
|
70
|
+
lark-cli calendar +update --event-id <uid_originalTime> --apply-to single --summary <summary>
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
| 「改这个重复日程的标题」「全部改」「每次都改」 | 编辑全部 |
|
|
75
|
-
| 「删掉这个重复日程」「取消所有」 | 删除全部 |
|
|
76
|
-
| 「从下周开始改时间」「后面的都改」 | 编辑此次及后续 |
|
|
77
|
-
| 「从下周开始不要了」「后面的都删」 | 删除此次及后续 |
|
|
78
|
-
| 「就改这一次」「只删这一次」 | 仅此次 |
|
|
79
|
-
| 「给明天的日程加个会议室」(且为重复日程) | 范围不明确,**必须询问用户** |
|
|
80
|
-
| 未明确范围 | **必须询问用户** |
|
|
72
|
+
# 编辑全部(主日程 id 或任意 例外/instance id)
|
|
73
|
+
lark-cli calendar +update --event-id <uid_originalTime> --apply-to all --summary <summary>
|
|
81
74
|
|
|
82
|
-
|
|
75
|
+
# 编辑全部:改时间
|
|
76
|
+
lark-cli calendar +update --event-id <uid_originalTime> --apply-to all --start <start> --end <end>
|
|
83
77
|
|
|
84
|
-
|
|
78
|
+
# 编辑此次及后续:截断主日程 + 删未来例外 + 创建新序列
|
|
79
|
+
lark-cli calendar +update --event-id <uid_originalTime> --apply-to this-and-following --summary <summary>
|
|
80
|
+
```
|
|
85
81
|
|
|
86
|
-
##
|
|
82
|
+
## 语义细则
|
|
87
83
|
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
84
|
+
- **`--apply-to=all` 时的字段传播**:只把用户本次显式传的 flag 应用到每个例外和主日程。例外原本自定义过的其他字段(例如自己的描述)保持不变。
|
|
85
|
+
- **`--apply-to=this-and-following` 的字段继承**:新创建的日程从原主日程继承 summary、description、rrule、start/end(用起始实例的时间)、vchat/reminders/location/visibility;用户任何显式传的 flag 优先。
|
|
86
|
+
- **`--start/--end` 变更**:`all` 场景下,例外会被删除(原始占位已无意义),主日程再 PATCH;`this-and-following` 场景下,`--start/--end` 传了会作为新序列的时间,否则用起始实例的时间。
|
|
87
|
+
- **参会人**:`this-and-following` 创建新序列时,若传了 `--add-attendee-ids`,会额外 添加attendees 到新序列;`--remove-attendee-ids` 会从新序列的参与人列表移除。
|
|
@@ -35,7 +35,12 @@ lark-cli calendar +room-find \
|
|
|
35
35
|
### 2. 查询忙闲
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
38
|
+
# 单人 / 多人查忙:--user-id 可重复或逗号分隔;服务端已合并相邻/重叠忙碌区间
|
|
39
|
+
lark-cli calendar +freebusy --start "<start>" --end "<end>" --user-id "ou_a,ou_b"
|
|
40
|
+
|
|
41
|
+
# 直接求共同空闲(推荐用于「找几个人一起有空」)
|
|
42
|
+
lark-cli calendar +freebusy --start "<start>" --end "<end>" \
|
|
43
|
+
--user-id "ou_a,ou_b,ou_c" --type common_free --min-duration 30m
|
|
39
44
|
```
|
|
40
45
|
|
|
41
46
|
规则:
|
|
@@ -43,6 +48,7 @@ lark-cli calendar +freebusy --start "<start>" --end "<end>"
|
|
|
43
48
|
- 参与人过多(超过 5 人):仅查询**当前用户**及少数核心人员忙闲即可
|
|
44
49
|
- 参与人含**群组**:无需展开群组成员查询忙闲
|
|
45
50
|
- 如果用户是从 `+suggestion` 确认了时间块后进入本分支的,**无需再调用 `+freebusy`**
|
|
51
|
+
- 找多人共同空闲:直接用 `--type common_free [--min-duration <dur>]`,让 CLI 一次算出共同空闲;不要自己再合并求交
|
|
46
52
|
|
|
47
53
|
### 3. 冲突处理
|
|
48
54
|
|
|
@@ -154,7 +154,7 @@ lark-cli docs +fetch --doc '<doc_token_or_url>' --detail with-ids
|
|
|
154
154
|
- 如果 `quote` 是 `C3`、`A1` 这类单元格坐标,可拆出 `spreadsheet_token` / `sheet_id` 后用 `lark-sheets` 读取该单元格确认:
|
|
155
155
|
|
|
156
156
|
```bash
|
|
157
|
-
lark-cli sheets +
|
|
157
|
+
lark-cli sheets +cells-get \
|
|
158
158
|
--spreadsheet-token '<spreadsheet_token>' \
|
|
159
159
|
--sheet-id '<sheet_id>' \
|
|
160
160
|
--range '<cell>'
|
package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md
CHANGED
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
| 资源类型 | 验证方式 |
|
|
146
146
|
|---------------|---------------------|
|
|
147
147
|
| `docx` / `doc` | 允许时使用 `docs +fetch --api-version v2`。 |
|
|
148
|
-
| `sheet` | 使用 `sheets +
|
|
148
|
+
| `sheet` | 使用 `sheets +cells-search` 查关键词证据,或用 `sheets +cells-get` 读取有界范围。 |
|
|
149
149
|
| `bitable` | 只有必要且已加载 Base 能力时验证。 |
|
|
150
150
|
| `slides` | 除非具备幻灯片读取能力,否则使用元数据 / 预览 / 标题证据。 |
|
|
151
151
|
| `file` | 仅在支持时使用标题、元数据、预览或导出文本。 |
|
|
@@ -179,7 +179,7 @@ Risk / Structure: `R2-R3` / `S3`
|
|
|
179
179
|
| `RESOLVE_TARGET` | `drive +inspect`、`wiki +node-get`、`wiki +space-list`、仅用于查找文件夹候选的 `drive +search` | 解析目标位置 |
|
|
180
180
|
| `SEARCH_RECALL` / `RECALL_ENHANCE` | `drive +search` | 搜索召回和覆盖增强 |
|
|
181
181
|
| `RESOURCE_RESOLVE` | `drive +inspect`、`wiki +node-get`、`drive metas batch_query`、必要时 `drive permission.members auth` | 解析标准 token、owner、权限信号和移动资格 |
|
|
182
|
-
| `CONTENT_VERIFY` | `docs +fetch`、`sheets +
|
|
182
|
+
| `CONTENT_VERIFY` | `docs +fetch`、`sheets +cells-get`、`sheets +cells-search`、必要时 `drive +preview` | 验证内容证据 |
|
|
183
183
|
| `EXECUTE` | `drive +create-folder`、`wiki +node-create`、`drive +move`、`wiki +move`、`wiki +move-to-drive`、`drive +task_result` | 执行已确认写操作 |
|
|
184
184
|
| `VERIFY` | `drive files list`、`wiki +node-list`、`wiki +node-get`、`drive +inspect`、`drive +task_result` | 验证执行结果 |
|
|
185
185
|
| `RESTORE` | `drive +move`、`wiki +move`、`drive +delete`、`wiki +node-delete`、`drive +task_result` | 恢复已确认资源并清理本次新建目标 |
|
|
@@ -34,7 +34,7 @@ lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_x
|
|
|
34
34
|
| `--message-id <id>` | Yes | Message ID (`om_xxx` format) |
|
|
35
35
|
| `--file-key <key>` | Yes | Resource key (`img_xxx` or `file_xxx`) |
|
|
36
36
|
| `--type <type>` | Yes | Resource type: `image` or `file` |
|
|
37
|
-
| `--output <path>` | No |
|
|
37
|
+
| `--output <path>` | No | Output path, relative or absolute, that must resolve inside the built-in allowed roots (the working directory, `/tmp`, `~/files`); system and credential directories stay refused. When omitted, the command uses the attachment name when available and otherwise falls back to the resource key |
|
|
38
38
|
| `--as <identity>` | No | Identity type: `user` (default) or `bot` |
|
|
39
39
|
| `--dry-run` | No | Print the request only, do not execute it |
|
|
40
40
|
|
package/skills/lark-okr/SKILL.md
CHANGED
|
@@ -16,19 +16,20 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
## 快速决策
|
|
18
18
|
|
|
19
|
-
| 用户需求
|
|
20
|
-
|
|
21
|
-
| 查看自己/他人的 OKR
|
|
22
|
-
| 为自己写一组 OKR
|
|
23
|
-
| 只新增一条 O 或单条 KR
|
|
24
|
-
| 编辑内容/备注/截止时间
|
|
25
|
-
| 修改 OKR 分数
|
|
26
|
-
| 调整顺序或权重
|
|
27
|
-
| 更新数字进度/完成度
|
|
28
|
-
| 写文字进展
|
|
29
|
-
| 对齐目标
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
| 用户需求 | 操作路径 | 参考文档 |
|
|
20
|
+
|------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
21
|
+
| 查看自己/他人的 OKR | 获取用户 ID -> `+cycle-list` -> `+cycle-detail` -> 按需查指标/进展记录 | [`cycle-list`](references/lark-okr-cycle-list.md), [`cycle-detail`](references/lark-okr-cycle-detail.md), [`indicators`](references/lark-okr-indicators.md), [`progress-list`](references/lark-okr-progress-list.md) |
|
|
22
|
+
| 为自己写一组 OKR | 优先用 `+batch-create` 创建 Objective/KR 骨架 | [`batch-create`](references/lark-okr-batch-create.md), [`contentblock`](references/lark-okr-contentblock.md) |
|
|
23
|
+
| 只新增一条 O 或单条 KR | 用 `+create` | [`create`](references/lark-okr-create.md) |
|
|
24
|
+
| 编辑内容/备注/截止时间 | 用 `+patch` | [`patch`](references/lark-okr-patch.md) |
|
|
25
|
+
| 修改 OKR 分数 | 只有用户明确说“分数”“评分”“打分”“score”时才用 `+patch --score`;分数不是进度/完成度 | [`patch`](references/lark-okr-patch.md) |
|
|
26
|
+
| 调整顺序或权重 | 用 `+reorder` / `+weight` | [`reorder`](references/lark-okr-reorder.md), [`weight`](references/lark-okr-weight.md) |
|
|
27
|
+
| 更新数字进度/完成度 | 百分比或不带单位数字用 `+indicator-update`;需要改单位/目标值时查指标后用 `indicators patch` | [`indicator-update`](references/lark-okr-indicator-update.md), [`indicators`](references/lark-okr-indicators.md) |
|
|
28
|
+
| 写文字进展 | 用 `+progress-create`;如果文本和数字都有,百分比或默认单位可使用 `--progress-percent` 统一改,非百分比单位更新量化指标 | [`progress-create`](references/lark-okr-progress-create.md), [`progress-list`](references/lark-okr-progress-list.md), [`progress-update`](references/lark-okr-progress-update.md) |
|
|
29
|
+
| 对齐目标 | 直接按对齐关系工作流处理 | [`alignments`](references/lark-okr-alignments.md) |
|
|
30
|
+
| 查询/创建/修改/解决 OKR 评论 | 获取周期下全部评论聚合用 `+comment-detail`,查询单个 O/KR/进展或仅查询周期全局评论用 `+comment-list`; | [`comment`](references/lark-okr-comment-list.md), [`comment-create`](references/lark-okr-comment-create.md), [`comment-solve-reopen`](references/lark-okr-comment-solve-reopen.md) |
|
|
31
|
+
|
|
32
|
+
分类只在用户明确要求分类,或创建 Objective 返回 `invalid parameters` 且怀疑租户强制开启分类时处理:用 `lark-cli okr categories list --params '{"owner_type":"user","page_size":100}' --as user` 查可用分类,选择语义合适且`enabled=true` 的分类 ID;分类可后续调整,不必停下等待用户确认。
|
|
32
33
|
|
|
33
34
|
获取当前用户用 `contact +get-user`;按姓名/邮箱查他人用 `contact +search-user`,拿到 `open_id` 后再查 OKR。
|
|
34
35
|
|
|
@@ -65,22 +66,30 @@ lark-cli okr +indicator-update \
|
|
|
65
66
|
|
|
66
67
|
Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`)。有 Shortcut 的操作优先使用。
|
|
67
68
|
|
|
68
|
-
| Shortcut
|
|
69
|
-
|
|
70
|
-
| [`+cycle-list`](references/lark-okr-cycle-list.md)
|
|
71
|
-
| [`+cycle-detail`](references/lark-okr-cycle-detail.md)
|
|
72
|
-
| [`+create`](references/lark-okr-create.md)
|
|
73
|
-
| [`+progress-list`](references/lark-okr-progress-list.md)
|
|
74
|
-
| [`+progress-get`](references/lark-okr-progress-get.md)
|
|
75
|
-
| [`+progress-create`](references/lark-okr-progress-create.md)
|
|
76
|
-
| [`+progress-update`](references/lark-okr-progress-update.md)
|
|
77
|
-
| [`+progress-delete`](references/lark-okr-progress-delete.md)
|
|
78
|
-
| [`+upload-image`](references/lark-okr-image-upload.md)
|
|
79
|
-
| [`+batch-create`](references/lark-okr-batch-create.md)
|
|
80
|
-
| [`+reorder`](references/lark-okr-reorder.md)
|
|
81
|
-
| [`+weight`](references/lark-okr-weight.md)
|
|
82
|
-
| [`+indicator-update`](references/lark-okr-indicator-update.md)
|
|
83
|
-
| [`+patch`](references/lark-okr-patch.md)
|
|
69
|
+
| Shortcut | 说明 |
|
|
70
|
+
|------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
|
|
71
|
+
| [`+cycle-list`](references/lark-okr-cycle-list.md) | 分页获取特定用户的 OKR 周期列表,可以用 `--time-range` 对当前页后置筛选 |
|
|
72
|
+
| [`+cycle-detail`](references/lark-okr-cycle-detail.md) | 获取特定 OKR 中所有目标和关键结果的内容 |
|
|
73
|
+
| [`+create`](references/lark-okr-create.md) | 创建单个 Objective(可带备注),或向已有 Objective 新增 KR |
|
|
74
|
+
| [`+progress-list`](references/lark-okr-progress-list.md) | 分页获取目标或关键结果的进展记录列表 |
|
|
75
|
+
| [`+progress-get`](references/lark-okr-progress-get.md) | 根据 ID 获取单条 OKR 进展记录 |
|
|
76
|
+
| [`+progress-create`](references/lark-okr-progress-create.md) | 为目标或关键结果创建进展记录 |
|
|
77
|
+
| [`+progress-update`](references/lark-okr-progress-update.md) | 更新指定 ID 的进展记录内容 |
|
|
78
|
+
| [`+progress-delete`](references/lark-okr-progress-delete.md) | 删除指定 ID 的进展记录(不可恢复) |
|
|
79
|
+
| [`+upload-image`](references/lark-okr-image-upload.md) | 上传图片用于 OKR 进展记录的富文本内容 |
|
|
80
|
+
| [`+batch-create`](references/lark-okr-batch-create.md) | 批量创建 Objective(可带备注)和 KR |
|
|
81
|
+
| [`+reorder`](references/lark-okr-reorder.md) | 调整 Objective 或 KR 的顺位 |
|
|
82
|
+
| [`+weight`](references/lark-okr-weight.md) | 调整 Objective 或 KR 的权重 |
|
|
83
|
+
| [`+indicator-update`](references/lark-okr-indicator-update.md) | 更新 Objective 或 KR 的当前进度指标。更复杂的量化指标操作见 [量化指标管理](references/lark-okr-indicators.md) |
|
|
84
|
+
| [`+patch`](references/lark-okr-patch.md) | 部分更新 Objective 或 KR(content、notes、score、deadline) |
|
|
85
|
+
| [`+comment-detail`](references/lark-okr-comment-detail.md) | 获取周期下 Cycle/Objective/KeyResult/Progress 的全部评论 |
|
|
86
|
+
| [`+comment-list`](references/lark-okr-comment-list.md) | 分页获取单个 OKR 实体下的评论 |
|
|
87
|
+
| [`+comment-get`](references/lark-okr-comment-get.md) | 获取单条评论详情 |
|
|
88
|
+
| [`+comment-create`](references/lark-okr-comment-create.md) | 创建新评论或回复已有评论(仅支持 --as user) |
|
|
89
|
+
| [`+comment-patch`](references/lark-okr-comment-patch.md) | 修改评论内容(仅支持 --as user) |
|
|
90
|
+
| [`+comment-delete`](references/lark-okr-comment-delete.md) | 永久删除单条评论(仅支持 --as user) |
|
|
91
|
+
| [`+comment-solve`](references/lark-okr-comment-solve-reopen.md) | 解决评论或划词评论串(仅支持 --as user) |
|
|
92
|
+
| [`+comment-reopen`](references/lark-okr-comment-solve-reopen.md) | 重新打开评论或划词评论串(仅支持 --as user) |
|
|
84
93
|
|
|
85
94
|
### 创建场景选择
|
|
86
95
|
|