@amaster.ai/pi-lark 0.1.2-beta.42 → 0.1.2-beta.44

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.
Files changed (35) hide show
  1. package/package.json +3 -3
  2. package/skills/lark-approval/references/lark-approval-initiate.md +2 -5
  3. package/skills/lark-approval/references/lark-approval-instances-initiated.md +6 -0
  4. package/skills/lark-approval/references/lark-approval-tasks-query.md +9 -0
  5. package/skills/lark-approval/references/lark-approval-tasks-rollback.md +8 -2
  6. package/skills/lark-apps/SKILL.md +16 -10
  7. package/skills/lark-apps/references/lark-apps-access-scope-set.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-db-execute.md +185 -1
  9. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  10. package/skills/lark-apps/references/lark-apps-role.md +133 -0
  11. package/skills/lark-base/SKILL.md +6 -2
  12. package/skills/lark-base/references/dashboard-block-data-config.md +28 -2
  13. package/skills/lark-base/references/lark-base-cell-value.md +9 -4
  14. package/skills/lark-base/references/lark-base-dashboard.md +11 -2
  15. package/skills/lark-base/references/lark-base-data-query.md +9 -7
  16. package/skills/lark-base/references/lark-base-field-create.md +4 -2
  17. package/skills/lark-base/references/lark-base-field-json.md +52 -15
  18. package/skills/lark-base/references/lark-base-field-update.md +4 -2
  19. package/skills/lark-base/references/lark-base-view-set-filter.md +3 -1
  20. package/skills/lark-drive/SKILL.md +4 -2
  21. package/skills/lark-drive/references/lark-drive-delete.md +23 -11
  22. package/skills/lark-drive/references/lark-drive-move.md +5 -3
  23. package/skills/lark-drive/references/lark-drive-task-result.md +58 -5
  24. package/skills/lark-event/SKILL.md +2 -1
  25. package/skills/lark-event/references/lark-event-approval.md +170 -0
  26. package/skills/lark-slides/references/slides_xml_schema_definition.xml +7 -2
  27. package/skills/lark-slides/references/xml-format-guide.md +15 -0
  28. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +264 -6
  29. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +348 -6
  30. package/skills/lark-vc/SKILL.md +6 -3
  31. package/skills/lark-vc/references/vc-domain-boundaries.md +9 -1
  32. package/skills/lark-vc-agent/SKILL.md +1 -1
  33. package/skills/lark-wiki/SKILL.md +4 -2
  34. package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
  35. package/skills/lark-wiki/references/lark-wiki-move.md +5 -3
@@ -90,6 +90,10 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
90
90
 
91
91
  `sort.order`:`asc`(升序)/ `desc`(降序)
92
92
 
93
+ 只要写 `sort` 对象,就需要明确排序方向。CLI 会把 `sort.type` 为 `group` 或 `view` 且缺少 `order` 的情况规范化为 `order:"asc"`;`sort.type:"value"` 必须显式写 `order:"asc"` 或 `order:"desc"`,因为指标值排序方向会改变业务含义。
94
+
95
+ 如果表中行序就是业务顺序,首次创建 block 时就一次性设置 `sort:{"type":"view","order":"asc"}` 保留行序,避免创建后再二次更新排序条件。
96
+
93
97
  示例 — 柱状图按销售额降序:
94
98
 
95
99
  ```json
@@ -169,9 +173,10 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
169
173
  - 长度/结构
170
174
  - `group_by` 最多 2 个;每项 `field_name` 必填
171
175
  - `group_by[].sort.type` 取值 `group|value|view`;`order` 取值 `asc|desc`
172
- - 规范化(CLI 自动处理)
176
+ - 规范化(CLI 自动处理;`--no-validate` 时不生效,`data_config` 原样透传给后端)
173
177
  - `series[].rollup` 自动转成大写(如 `sum` → `SUM`)
174
178
  - `group_by[].sort.type/order` 自动转成小写
179
+ - `group_by[].sort.type` 为 `group` 或 `view` 且缺少 `order` 时,自动补 `order:"asc"`;`value` 排序不会自动补方向
175
180
  - 本地校验(可通过 `--no-validate` 跳过)
176
181
  - `+dashboard-block-create` 默认对 `data_config` 做轻量校验;失败会聚合错误并给出修复建议
177
182
  - `+dashboard-block-update` 不做强类型校验,由后端验证具体字段
@@ -264,14 +269,35 @@ user / created_by / updated_by: is, isNot, isEmpty, isNotEmpty
264
269
 
265
270
  漏斗图(流程转化):
266
271
 
272
+ 先判断用户要看的数值语义:
273
+
274
+ - **当前数量**:统计每个当前状态/阶段下有多少记录,例如“各环节当前数量”“当前阶段分布”。源表有状态/阶段字段时,直接用 `count_all:true` + `group_by`。
275
+ - **累计数量**:统计到达该阶段及其后续阶段(后缀和)的累计数量,例如“流程转化”“从 A 到 B 各环节转化”。此口径假设流程单向、无跳阶/回退、记录不删除;不满足时须用状态变更历史,不能对当前快照累加。如果表中已有累计数量字段或阶段汇总表,直接用该字段画漏斗图;否则先计算累计数量,创建并写入 helper 汇总表后再画图。
276
+
277
+ 当前数量:
278
+
267
279
  ```json
268
280
  {
269
281
  "table_name": "表名",
270
- "series": [{ "field_name": "数值字段", "rollup": "SUM" }],
282
+ "count_all": true,
271
283
  "group_by": [{ "field_name": "状态字段", "mode": "integrated" }]
272
284
  }
273
285
  ```
274
286
 
287
+ 累计数量:
288
+
289
+ ```json
290
+ {
291
+ "table_name": "流程汇总表名",
292
+ "series": [{ "field_name": "累计数量", "rollup": "SUM" }],
293
+ "group_by": [{ "field_name": "阶段字段", "mode": "integrated", "sort": {"type":"view","order":"asc"} }]
294
+ }
295
+ ```
296
+
297
+ 如果只有当前状态数据但用户要看流程转化,需要先按业务阶段顺序计算每个阶段的累计数量,再创建 helper 汇总表(如:阶段、累计数量),用 `+record-batch-create` 一次写入后,按“累计数量”模板创建漏斗图。helper 表行序就是业务顺序时,首次创建 block 时一次性设置好 `group_by.sort`。
298
+
299
+ > ⚠️ 注意:helper 汇总表仅用于源表无法直接聚合出目标形态的场景(如上面的累计数量漏斗图)。只要能在源表上直接用 `group_by` + `rollup`(含 `AVERAGE`)算出,就不需要新建 helper 表。
300
+
275
301
  词云(文本频率):
276
302
 
277
303
  ```json
@@ -16,15 +16,20 @@
16
16
 
17
17
  ## 2. 各类型 CellValue
18
18
 
19
- ### 2.1 text / phone / url
19
+ ### 2.1 text
20
20
 
21
- 用字符串。URL 字段也传 URL 字符串;普通文本里可以保留 Markdown 风格链接文本,平台会按字段类型处理。
21
+ text 字段的 `style.type` 影响单元格检查逻辑:
22
+ `type=plain` 传 Markdown 格式的字符串。
23
+ `type=url` 传一个带 title 的 Markdown 格式链接,或单独传一个链接。
24
+ `type=phone` 传合法电话号码。
25
+ `type=email` 传合法邮箱字符串。
22
26
 
23
27
  ```json
24
28
  {
25
- "标题": "Hello",
29
+ "标题": "Hello, [lark-cli](https://github.com/larksuite/cli)",
30
+ "官网": "[官网](https://example.com)",
26
31
  "联系电话": "1380000000000",
27
- "官网": "https://example.com"
32
+ "邮箱": "owner@example.com"
28
33
  }
29
34
  ```
30
35
 
@@ -19,12 +19,19 @@ Dashboard 是 Base 中的数据可视化看板,可以把表格数据变成**
19
19
  | 修改组件 | `+dashboard-block-update` | 先读 block 现状,再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 决定替换哪些顶层 key |
20
20
  | 查看仪表盘有哪些组件 | `+dashboard-get` 或 `+dashboard-block-list` | 本页下方「查看仪表盘」 |
21
21
  | 读取图表计算结果 | `+dashboard-block-get-data` | 返回图表最终数据协议;需要 block 元数据先用 `+dashboard-block-get` |
22
- | 智能重排组件布局 | `+dashboard-arrange` | 只在用户明确要求重排时执行;无法指定精确位置 |
22
+ | 智能重排组件布局 | `+dashboard-arrange` | 用户明确要求重排,或本次会话新建仪表盘的收尾整理;无法指定精确位置 |
23
23
 
24
24
  ## 典型场景工作流
25
25
 
26
26
  ### 场景 1:从 0 到 1 创建仪表盘
27
27
 
28
+ 从 0 到 1 创建仪表盘时,按用户需求规划组件的类型和数量,并注意以下要点:
29
+
30
+ - 聚合方式:创建指标卡或分布图时优先把聚合写进 `data_config`,只有 Top N、字段取值探索、复杂筛选校验或 helper 汇总表场景才先用 `+data-query`。
31
+ - Dry-run 边界:已按模板构造的简单指标卡、分布图、趋势图不需要逐个 `--dry-run` 后再真实创建;只有在调试 JSON、检查请求体、复杂自造 `data_config` 或处理 API validation 错误时才 dry-run。
32
+ - 验证方式:通过创建接口返回值确认创建成功与否,只在结果不确定时用 `+dashboard-get` 或 `+dashboard-block-list` 确认仪表盘和组件存在,或调用 `+dashboard-block-get-data`读取计算结果验证。
33
+ - 布局方式:`+dashboard-arrange` 仅两种情况使用:① 用户明确要求美化/重排;② 本次会话中从零新建的仪表盘,建完组件后做一次性布局整理。不是创建成功的必要步骤。
34
+
28
35
  示例:搭建一个销售数据分析仪表盘
29
36
 
30
37
  ```bash
@@ -63,6 +70,7 @@ lark-cli base +dashboard-block-create \
63
70
 
64
71
  # 第 5 步:组件创建完成后,使用 arrange 命令智能重排布局(可选但推荐)
65
72
  # 默认布局可能不够美观,arrange 会根据组件数量和类型自动优化布局
73
+ # 若用户没有要求美化/重排,可先跳过此步骤;这不影响仪表盘和组件是否已创建成功
66
74
  lark-cli base +dashboard-arrange \
67
75
  --base-token xxx \
68
76
  --dashboard-id blk_xxx
@@ -125,11 +133,12 @@ lark-cli base +dashboard-block-update \
125
133
  --dashboard-id blk_xxx \
126
134
  --block-id chtxxxxxxxx \
127
135
  --data-config '{...}'
136
+
128
137
  ```
129
138
 
130
139
  ### 场景 4:重排仪表盘布局
131
140
 
132
- 当用户明确要求对已有仪表盘进行布局重排或美化时使用。
141
+ 当用户明确要求对已有仪表盘进行布局重排或美化时使用(对本次会话从零新建的仪表盘,可在建完组件后直接做一次性整理,见场景 1)。
133
142
 
134
143
  > [!CAUTION]
135
144
  > - 排列结果是**服务端智能推荐**,不一定完全符合用户预期
@@ -347,28 +347,30 @@ value 使用预定义关键字机制,第一个元素为字符串常量名称
347
347
  |------|------|------|------|
348
348
  | `format` | string | 是 | 固定为 `"flat"`,表示返回扁平化的对象数组 |
349
349
 
350
- ## API 出参详情
350
+ ## CLI 出参详情
351
+
352
+ CLI 输出标准信封 `{ok, identity, data}`(失败时为 `{ok:false, identity, error}`)。
351
353
 
352
354
  **成功时:**
353
355
 
354
356
  ```json
355
- {"code": 0, "data": {"main_data": [{"dim_city": {"value": "北京"}, "total_amount": {"value": 12345.00}}, ...]}, "msg": ""}
357
+ {"ok": true, "identity": "user", "data": {"main_data": [{"dim_city": {"value": "北京"}, "total_amount": {"value": 12345.00}}, ...]}}
356
358
  ```
357
359
 
358
360
  **失败时:**
359
361
 
360
362
  ```json
361
- {"code": 800004006, "data": {"error": {"code": 800004006, ...}}, "msg": "DSL validation failed"}
363
+ {"ok": false, "identity": "user", "error": {"type": "api", "subtype": "unknown", "code": 800004006, "message": "...does not exist in table schema", "hint": "...", "log_id": "..."}}
362
364
  ```
363
365
 
364
366
  **Response 字段:**
365
367
 
366
368
  | 字段 | 类型 | 说明 |
367
369
  |------|------|------|
368
- | `code` | int | 状态码,0 为成功 |
369
- | `msg` | string | 错误信息 |
370
- | `data.main_data` | []object | 查询结果数组,每个元素为一行数据 |
371
- | `data.error` | object | 失败时的错误详情 |
370
+ | `ok` | bool | 是否成功 |
371
+ | `identity` | string | 执行身份:`user` / `bot` |
372
+ | `data.main_data` | []object | 查询结果数组,每个元素为一行数据(成功时) |
373
+ | `error` | object | 失败时的 typed 错误,含 `type` / `subtype` / `code` / `message` / `hint` / `log_id` |
372
374
 
373
375
  每行数据的字段值封装在 CellValue 中:
374
376
 
@@ -23,12 +23,12 @@ lark-cli base +field-create \
23
23
  lark-cli base +field-create \
24
24
  --base-token <base_token> \
25
25
  --table-id <table_id> \
26
- --json '{"name":"状态","type":"select","multiple":false,"options":[{"name":"Todo","hue":"Blue","lightness":"Lighter"},{"name":"Done","hue":"Green","lightness":"Light"}]}'
26
+ --json '{"name":"状态","type":"select","multiple":false,"default_value":["Todo"],"options":[{"name":"Todo","hue":"Blue","lightness":"Lighter"},{"name":"Done","hue":"Green","lightness":"Light"}]}'
27
27
 
28
28
  lark-cli base +field-create \
29
29
  --base-token <base_token> \
30
30
  --table-id <table_id> \
31
- --json '{"name":"负责人","type":"user","multiple":false,"description":"用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"}'
31
+ --json '{"name":"负责人","type":"user","multiple":false,"default_value":[{"$slot":"current_user"}],"description":"用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"}'
32
32
  ```
33
33
 
34
34
  ## 参数
@@ -51,6 +51,7 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
51
51
  - `--json` 必须是 **JSON 对象**,顶层直接传字段定义,不要再套一层。
52
52
  - 顶层最少包含:`name`、`type`。
53
53
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接,如 `协作约定可参考[团队字段约定](https://example.com/field-spec)`。
54
+ - 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;`datetime` / `user` 的动态填充用 `$slot`。完整规则见 [lark-base-field-json.md](lark-base-field-json.md)。
54
55
  - `type` 不同,必填子字段不同:
55
56
  - `select`:`multiple` 控制是否多选,`options` 定义静态选项,`dynamic_options_source` 定义动态选项来源。静态与动态选项配置二选一,不能同时传。
56
57
  - `link`:必须有 `link_table`,可选 `bidirectional`、`bidirectional_link_field_name`。
@@ -64,6 +65,7 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
64
65
  "name": "状态",
65
66
  "type": "select",
66
67
  "multiple": false,
68
+ "default_value": ["Todo"],
67
69
  "options": [
68
70
  { "name": "Todo", "hue": "Blue", "lightness": "Lighter" },
69
71
  { "name": "Done", "hue": "Green", "lightness": "Light" }
@@ -9,6 +9,7 @@
9
9
  - `--json` 必须是 JSON 对象。
10
10
  - 顶层统一使用:`type` + `name` + 类型特有字段。
11
11
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
12
+ - 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null`;省略表示创建时不设置、更新时不修改。
12
13
  - 不要使用旧结构:`field_name`、`property`、`ui_type`、数字枚举 `type`。
13
14
  - `+field-update` 使用同样的字段 JSON 结构,但语义是 `PUT`;这是高风险写入操作,建议先 `+field-get` 再按目标状态全量提交,并带 `--yes`。
14
15
  - `type=formula` 或 `type=lookup` 创建/更新前,必须先读对应 guide。
@@ -27,12 +28,12 @@
27
28
 
28
29
  | 类型 | 最小必填字段 | 常见补充字段 |
29
30
  |------|--------------|-------------|
30
- | `text` | `type` `name` | `style.type` |
31
- | `number` | `type` `name` | `style` |
32
- | `select` | `type` `name` | `multiple` + `options`,或 `multiple` + `dynamic_options_source` |
33
- | `datetime` | `type` `name` | `style.format` |
31
+ | `text` | `type` `name` | `style.type` `default_value` |
32
+ | `number` | `type` `name` | `style` `default_value` |
33
+ | `select` | `type` `name` | `multiple` + `options` + 静态 `default_value`,或 `multiple` + `dynamic_options_source` |
34
+ | `datetime` | `type` `name` | `style.format` `default_value` |
34
35
  | `created_at` / `updated_at` | `type` `name` | `style.format` |
35
- | `user` / `group_chat` | `type` `name` | `multiple` |
36
+ | `user` / `group_chat` | `type` `name` | `multiple`;仅 `user` 支持 `default_value` |
36
37
  | `created_by` / `updated_by` | `type` `name` | 无 |
37
38
  | `link` | `type` `name` `link_table` | `bidirectional` `bidirectional_link_field_name` |
38
39
  | `formula` | `type` `name` `expression` | 无 |
@@ -47,31 +48,37 @@
47
48
  ### 3.1 text
48
49
 
49
50
  文本字段;电话、超链接、邮箱、条码也都属于 `text`,通过 `style.type` 区分。
51
+ 支持 `default_value`:静态 Markdown 文本字符串;`phone` style 必须是合法电话号码;`url` style 传一个 Markdown 链接或裸 URL;`email` style 必须是合法邮箱字符串,不要传 Markdown 链接或 `mailto:`。
50
52
 
51
53
  最小写法(默认 `style.type` 为 `plain`):
52
54
 
53
55
  ```json
54
56
  {
55
57
  "type": "text",
56
- "name": "标题"
58
+ "name": "标题",
59
+ "default_value": "默认标题"
57
60
  }
58
61
  ```
59
62
 
60
63
  常用写法:
61
64
 
65
+ 默认值可以是 Markdown 文本
62
66
  ```json
63
67
  {
64
68
  "type": "text",
65
69
  "name": "标题",
66
- "description": "主标题字段"
70
+ "description": "主标题字段",
71
+ "default_value": "未命名"
67
72
  }
68
73
  ```
69
74
 
75
+ `style.type=phone` 时默认值是合法电话号码字符串。
70
76
  ```json
71
77
  {
72
78
  "type": "text",
73
79
  "name": "联系电话",
74
- "style": { "type": "phone" }
80
+ "style": { "type": "phone" },
81
+ "default_value": "+8613800000000"
75
82
  }
76
83
  ```
77
84
 
@@ -79,7 +86,17 @@
79
86
  {
80
87
  "type": "text",
81
88
  "name": "官网",
82
- "style": { "type": "url" }
89
+ "style": { "type": "url" },
90
+ "default_value": "[官网](https://example.com)"
91
+ }
92
+ ```
93
+
94
+ ```json
95
+ {
96
+ "type": "text",
97
+ "name": "邮箱",
98
+ "style": { "type": "email" },
99
+ "default_value": "owner@example.com"
83
100
  }
84
101
  ```
85
102
 
@@ -88,13 +105,15 @@
88
105
  ### 3.2 number
89
106
 
90
107
  数字字段;货币、进度、评分都属于 `number`,通过 `style.type` 区分。
108
+ 支持 `default_value`:静态 JSON number;所有 number style 都按这个规则写。
91
109
 
92
110
  最小写法(默认 `style.type` 为 `plain`):
93
111
 
94
112
  ```json
95
113
  {
96
114
  "type": "number",
97
- "name": "工时"
115
+ "name": "工时",
116
+ "default_value": 8
98
117
  }
99
118
  ```
100
119
 
@@ -118,7 +137,8 @@
118
137
  "precision": 2,
119
138
  "percentage": false,
120
139
  "thousands_separator": true
121
- }
140
+ },
141
+ "default_value": 8
122
142
  }
123
143
  ```
124
144
 
@@ -151,7 +171,8 @@
151
171
  {
152
172
  "type": "number",
153
173
  "name": "完成度",
154
- "style": { "type": "progress", "percentage": true, "color": "Blue" }
174
+ "style": { "type": "progress", "percentage": true, "color": "Blue" },
175
+ "default_value": 0.65
155
176
  }
156
177
  ```
157
178
 
@@ -180,6 +201,7 @@
180
201
  #### 静态选项
181
202
 
182
203
  支持字段:`multiple`、`options`
204
+ 支持 `default_value`:静态选项名数组;即使 `multiple=false` 也写数组,如 `["Todo"]`。
183
205
 
184
206
  默认值 / 约束:
185
207
  - `multiple` 默认 `false`
@@ -189,12 +211,14 @@
189
211
  - `options[].hue` 可用:`Red`、`Orange`、`Yellow`、`Lime`、`Green`、`Turquoise`、`Wathet`、`Blue`、`Carmine`、`Purple`、`Gray` 缺省值为 `Blue`
190
212
  - `options[].lightness` 可用:`Lighter`、`Light`、`Standard`、`Dark`、`Darker` 缺省值为 `Lighter`
191
213
  - 选项里没有 `id`,只有 `name`。
214
+ - 支持 `default_value` 配置:填选项名数组。
192
215
 
193
216
  ```json
194
217
  {
195
218
  "type": "select",
196
219
  "name": "状态",
197
220
  "multiple": false,
221
+ "default_value": ["Todo"],
198
222
  "options": [
199
223
  { "name": "Todo", "hue": "Blue", "lightness": "Lighter" },
200
224
  { "name": "Done", "hue": "Green", "lightness": "Light" }
@@ -205,6 +229,7 @@
205
229
  #### 动态选项
206
230
 
207
231
  支持字段:`multiple`、`dynamic_options_source`
232
+ 动态选项不支持 `default_value`。
208
233
 
209
234
  默认值 / 约束:
210
235
  - `multiple` 默认 `false`
@@ -213,6 +238,7 @@
213
238
  - `dynamic_options_source.field_id` 填来源字段 id 或字段名
214
239
  - `dynamic_options_source` 仅创建支持;更新已有字段时不要传
215
240
  - 引用选项条件 / 级联筛选条件:这个功能在 Base 前端支持,属于 UI-only 属性,OpenAPI 里不支持,CLI 不能读取、创建或更新;不要根据接口返回缺失判断未配置
241
+ - 动态选项不支持配置 `default_value`。
216
242
 
217
243
  ```json
218
244
  {
@@ -229,13 +255,15 @@
229
255
  ### 3.4 datetime
230
256
 
231
257
  手动填写的日期/时间字段。系统时间用 `created_at` / `updated_at`。
258
+ 支持 `default_value`:静态时间字符串,或 `{ "$slot": "record_created_time" }`。`datetime + record_created_time` 是自动填充可编辑单元格;`created_at` 是只读创建时间元信息。
232
259
 
233
260
  最小写法:
234
261
 
235
262
  ```json
236
263
  {
237
264
  "type": "datetime",
238
- "name": "截止时间"
265
+ "name": "截止时间",
266
+ "default_value": "2026-03-24 10:00:00"
239
267
  }
240
268
  ```
241
269
 
@@ -251,7 +279,8 @@
251
279
  {
252
280
  "type": "datetime",
253
281
  "name": "截止时间",
254
- "style": { "format": "yyyy-MM-dd HH:mm" }
282
+ "style": { "format": "yyyy-MM-dd HH:mm" },
283
+ "default_value": { "$slot": "record_created_time" }
255
284
  }
256
285
  ```
257
286
 
@@ -276,12 +305,19 @@
276
305
  ### 3.6 user / group_chat
277
306
 
278
307
  人员字段和群字段都支持 `multiple`。
308
+ `user` 支持 `default_value`:人员 CellValue 数组,元素可用 `{ "id": "ou_xxx" }` 或 `{ "$slot": "current_user" }`;不要猜用户 ID。`group_chat` 不支持默认值。
279
309
 
280
310
  默认值 / 约束:
281
311
  - `multiple` 默认 `true`
312
+ - `user` 字段支持 `default_value` 配置,`group_chat` 字段不支持 `default_value` 配置。
282
313
 
283
314
  ```json
284
- { "type": "user", "name": "负责人", "multiple": true }
315
+ {
316
+ "type": "user",
317
+ "name": "负责人",
318
+ "multiple": true,
319
+ "default_value": [{ "$slot": "current_user" }, { "id": "ou_xxx" }]
320
+ }
285
321
  ```
286
322
 
287
323
  ```json
@@ -488,3 +524,4 @@ Object(对象字段)、Button(按钮字段)、Stage(流程字段)暂
488
524
  - `number` 的精度、货币、进度、评分配置都放在 `style` 下,不要写顶层 `precision`。
489
525
  - `datetime` 是手动日期字段;系统时间请改用 `created_at` / `updated_at`。
490
526
  - `formula` / `lookup` 没读 guide 前不要直接写。
527
+ - 只有 `text`、`number`、静态 `select`、`datetime`、`user` 支持 `default_value`;清空统一传 `"default_value": null`。其他字段类型不要配置默认值。
@@ -11,14 +11,14 @@ lark-cli base +field-update \
11
11
  --base-token <base_token> \
12
12
  --table-id <table_id> \
13
13
  --field-id <field_id> \
14
- --json '{"name":"状态","type":"select","multiple":false,"options":[{"name":"Todo","hue":"Blue","lightness":"Lighter"},{"name":"Doing","hue":"Orange","lightness":"Light"},{"name":"Done","hue":"Green","lightness":"Light"}]}' \
14
+ --json '{"name":"状态","type":"select","multiple":false,"default_value":["Doing"],"options":[{"name":"Todo","hue":"Blue","lightness":"Lighter"},{"name":"Doing","hue":"Orange","lightness":"Light"},{"name":"Done","hue":"Green","lightness":"Light"}]}' \
15
15
  --yes
16
16
 
17
17
  lark-cli base +field-update \
18
18
  --base-token <base_token> \
19
19
  --table-id <table_id> \
20
20
  --field-id <field_id> \
21
- --json '{"name":"负责人","type":"user","multiple":false,"description":"用于标记记录的直接负责人"}' \
21
+ --json '{"name":"负责人","type":"user","multiple":false,"default_value":null,"description":"用于标记记录的直接负责人"}' \
22
22
  --yes
23
23
  ```
24
24
 
@@ -47,6 +47,7 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
47
47
  - `--json` 必须是 **JSON 对象**,顶层直接传字段定义。
48
48
  - 更新语义是 `PUT`(全量字段配置更新),不要只传零散片段;至少显式包含 `name`、`type`,并补齐该类型所需关键配置。
49
49
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
50
+ - 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;传 `null` 清空,省略表示不修改现有默认值。完整规则见 [lark-base-field-json.md](lark-base-field-json.md)。
50
51
  - `select` 更新时:`options` 仍按对象数组传,避免混入无效字段。
51
52
  - `link` 更新限制:
52
53
  - 不能把非 `link` 字段改成 `link`,也不能把 `link` 改成非 `link`。
@@ -59,6 +60,7 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
59
60
  "name": "状态",
60
61
  "type": "select",
61
62
  "multiple": false,
63
+ "default_value": ["Doing"],
62
64
  "options": [
63
65
  { "name": "Todo", "hue": "Blue", "lightness": "Lighter" },
64
66
  { "name": "Doing", "hue": "Orange", "lightness": "Light" },
@@ -174,11 +174,13 @@ lark-cli base +view-set-filter \
174
174
 
175
175
  - 先读取当前筛选配置,理解现有 `logic` 和 `conditions` 的组合关系;只替换用户要求变更的条件,未提到的条件默认保留。
176
176
  - 优先传字段 id,不要依赖字段名。
177
+ - 拿不准字段 type 或真实取值时,先用 `+field-list` / `+record-list` 确认,再按对应字段类型的 value 写法构造条件;别按字段名猜 type、凭印象猜枚举取值。
177
178
  - 需要清空全部筛选时,直接传 `{"conditions":[]}`。
178
179
 
179
180
  ## 7. 易错点
180
181
 
181
- - 不要再写旧对象风格:`{"field_name":...,"operator":...}`。
182
+ - 本 tuple DSL 由 `+view-set-filter` 与 `+record-list` / `+record-search` 的 `--filter-json` 共用;不要写成 `+data-query` 的对象风格 `{"field_name":...,"operator":...}`(会报校验失败)。
183
+ - 标量类字段(`text` / `number` / `datetime` 等)的 value 用标量、别包成数组(各类型详见 value 写法一节)。
182
184
  - `user` / `group_chat` / `link` 不要写成单个标量。
183
185
  - `empty` / `non_empty` 不要硬塞无意义的 value。
184
186
  - 日期条件稳定写法用 `ExactDate(...)` 或 `Today` / `Yesterday` / `Tomorrow`。
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lark-drive
3
3
  version: 1.0.0
4
- description: "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。"
4
+ description: "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
@@ -20,10 +20,12 @@ metadata:
20
20
 
21
21
  ## 快速决策
22
22
 
23
+ - 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:切到 `lark-wiki`,使用 `lark-cli wiki +move-to-drive`;不要把 Wiki token 直接交给 `drive +move`。这是会改变文档归属和权限继承的写操作,执行前确认源节点与目标位置。
23
24
  - 用户要**复制文档 / 创建副本 / 另存为副本**时,使用 `lark-cli drive files copy`。先用 `lark-cli schema drive.files.copy --format json` 确认参数;如果来源是 wiki URL/token,先用 `lark-cli drive +inspect` 获取底层 `token` 和 `type`,不要把 wiki token 直接当 `file_token`。`params.file_token` 传源文档 token,`data.folder_token` 传目标文件夹 token,`data.name` 传副本名称,`data.type` 传源文件类型(如 `docx` / `sheet` / `bitable` / `slides`)。示例:`lark-cli drive files copy --params '{"file_token":"<DOC_TOKEN>"}' --data '{"folder_token":"<FOLDER_TOKEN>","name":"<COPY_NAME>","type":"docx"}'`。如返回 `confirmation_required`,按 `lark-shared` 高风险审批协议向用户确认后,在原命令末尾追加 `--yes` 重试。
24
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)。
25
26
  - 高风险写操作(删除、公开权限修改、owner 转移、版本删除/回滚、批量移动/覆盖/同步)必须同时满足三个条件才执行:目标已解析为该操作可直接使用的执行对象,执行细节已明确到可直接调用命令(例如删除的 file-token/type、公开权限修改的共享范围、owner 转移的目标 owner、版本删除/回滚的 version id、移动/覆盖/同步的目标位置和冲突策略),且用户在本轮明确确认执行这些具体目标和执行细节。用户只说“删除没用的文件”“开放/共享给大家”“改成开放”“覆盖/移动这些”只表示目标状态;先只读发现并列出候选、权限档位或执行方案,停止等待用户确认。
26
- - 用户要**检查 / 治理文档权限、公开范围、链接分享、外部访问、复制下载权限、密级标签、owner 转移**,或要“权限风险报告、收紧权限、申请查看 / 编辑权限、转移 / 批量转移 owner”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`permission_governance`](references/lark-drive-workflow-permission-governance.md) workflow。
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
+ - 用户要为指定飞书文档**设置 / 修改密级标签(secure label)**,或查询当前用户可用的密级标签,直接读取 [`references/lark-drive-secure-label.md`](references/lark-drive-secure-label.md);这是 Drive 文件治理能力。
27
29
  - 用户要**整理云盘 / 文件夹 / 文档库 / 知识库 / 个人文档库**,或要“盘点目录结构、找出未归档/临时/重复/空目录、生成整理方案”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](references/lark-drive-workflow-knowledge-organize.md) workflow。默认只生成方案;创建目录、移动资源、申请权限都必须单独确认。
28
30
  - 用户要**搜文档 / Wiki / 电子表格 / 多维表格 / 云空间(云盘/云存储)对象**,优先使用 `lark-cli drive +search`。自然语言里"最近我编辑过的"、"我创建的"(→ `--created-by-me`,原始创建者语义)、"我负责/owner 的"(→ `--mine`,owner 语义)、"最近一周我打开过的 xxx"、"某人 owner 的 docx" 等直接映射到扁平 flag,避免手写嵌套 JSON。
29
31
  - 用户要**获取文档评论列表**时,优先使用 `lark-cli drive +list-comments --url '<url>'`,不要优先手写 `drive file.comments list`;支持妙搭 apps 的 `/page/<token>` URL;具体使用方式先阅读 [`references/lark-drive-list-comments.md`](references/lark-drive-list-comments.md)。
@@ -20,16 +20,20 @@
20
20
 
21
21
  若缺少任一条件,使用 `drive +search`、`drive +inspect` 或只读 API 收集候选并回复待确认清单;启发式规则(打开时间、标题模式、owner、文件类型等)只能作为候选筛选依据,不能升级为删除确认。执行 `drive +delete` 时必须使用解析后的 `--file-token` 和 `--type`。
22
22
 
23
+ ## 批量删除建议
24
+
25
+ 批量删除文件或文件夹时,建议逐个串行处理,不要并发执行删除命令,并发删除可能触发服务端加锁或冲突,导致部分删除失败;这类失败通常需要等待后对单个失败项重试。
26
+
23
27
  ## 命令
24
28
 
25
29
  ```bash
26
- # 删除普通文件
30
+ # 删除普通文件(异步操作,会自动有限轮询任务状态)
27
31
  lark-cli drive +delete \
28
32
  --file-token <FILE_TOKEN> \
29
33
  --type file \
30
34
  --yes
31
35
 
32
- # 删除在线文档
36
+ # 删除在线文档(异步操作,会自动有限轮询任务状态)
33
37
  lark-cli drive +delete \
34
38
  --file-token <DOCX_TOKEN> \
35
39
  --type docx \
@@ -52,22 +56,30 @@ lark-cli drive +delete \
52
56
 
53
57
  ## 行为说明
54
58
 
55
- - **普通文件删除**:同步操作,成功时直接返回 `deleted=true`
56
- - **文件夹删除**:异步操作,接口返回 `task_id`,shortcut 会先做有限轮询;如果在轮询窗口内完成,则直接返回成功结果
57
- - **轮询超时不是失败**:文件夹删除内置最多轮询 30 次、每次间隔 2 秒;如果轮询结束任务仍未完成,会返回 `task_id`、`status`、`ready=false`、`timed_out=true` 和 `next_command`
58
- - **继续查询**:当看到 `next_command` 时,改用 `lark-cli drive +task_result --scenario task_check --task-id <TASK_ID>` 继续查询
59
- - **状态值**:`task_check` 的服务端状态通常是 `success`、`fail`、`process`
59
+ - **删除可能需要等待**:删除操作在服务端可能异步处理,shortcut 会在本次命令内自动做有限次数的结果轮询
60
+ - **已完成则停止**:如果返回 `deleted=true`,且没有返回 `next_command`,说明删除已经完成,不需要再调用 `drive +task_result`
61
+ - **未完成再续查**:如果超过内置轮询次数仍未完成,会返回 `ready=false`、`timed_out=true`、`task_id` 和 `next_command`;此时按 `next_command` 继续查询删除结果
62
+ - **task_id 不是成功条件**:`task_id` 只是续查凭据。没有 `task_id` 但返回 `deleted=true` 时,也表示删除已完成
63
+ - **失败处理**:如果返回 `failed=true` 或 `status=fail`,按错误信息和 `task_id` 报告删除失败;不要重复删除同一资源
64
+
65
+ ## 常见错误处理
66
+
67
+ | 错误码 | 含义 | 建议处理 |
68
+ |--------|------|----------|
69
+ | `1061007` | 文件已删除 | 视为目标已不可用,无需重试删除 |
70
+ | `99991400` | 命中接口限频 | 等待一段时间后重试;批量删除时保持串行并降低频率 |
71
+ | `99991679` | 缺失 scope | 按错误里的 `missing_scopes`、`hint` 申请/授权所需 scope 后重试 |
60
72
 
61
73
  ## 推荐续跑方式
62
74
 
63
75
  ```bash
64
- # 第一步:先直接删除文件夹
76
+ # 第一步:先直接删除资源
65
77
  lark-cli drive +delete \
66
- --file-token <FOLDER_TOKEN> \
67
- --type folder \
78
+ --file-token <FILE_OR_FOLDER_TOKEN> \
79
+ --type <TYPE> \
68
80
  --yes
69
81
 
70
- # 如果返回 ready=false / timed_out=true,再继续查
82
+ # 只有返回 ready=false / timed_out=true 或 next_command 时,才需要继续查
71
83
  lark-cli drive +task_result \
72
84
  --scenario task_check \
73
85
  --task-id <TASK_ID>
@@ -5,15 +5,16 @@
5
5
 
6
6
  将文件或文件夹移动到用户云空间(云盘/云存储)的其他位置。
7
7
 
8
- ## 与 `wiki +move` 的区别
8
+ ## 与 Wiki 移动 shortcut 的区别
9
9
 
10
10
  - `drive +move` 只处理 **Drive 文件夹树内部** 的位置调整,目标位置用 `--folder-token` 表示
11
11
  - `wiki +move` 处理的是 **Wiki 知识空间 / 页面层级**:要么移动已有 Wiki 节点,要么把 Drive 文档迁入 Wiki
12
- - 如果用户说“移动到某个文件夹”“移动到我的空间根目录”,应使用 `drive +move`
12
+ - `wiki +move-to-drive` 把 **已有 Wiki 节点移出知识库**,放到 Drive 文件夹或“我的空间”根目录
13
+ - 如果用户说“移动到某个文件夹”“移动到我的空间根目录”,还要判断源对象:源对象已在 Drive 时使用 `drive +move`;源对象是 Wiki 节点时使用 `wiki +move-to-drive`
13
14
  - 如果用户说“移动到某个知识库 / 页面下”“迁入 Wiki / 知识空间”,应使用 `wiki +move`
14
15
  - 如果用户说“移动到我的文档库 / 我的知识库 / 个人知识库 / my_library”,不要使用 `drive +move`;先按 Wiki 目标处理
15
16
  - `我的文档库` 不是 Drive root folder,也不是 `--folder-token` 省略后的默认目的地
16
- - `drive +move` 不支持 wiki 文档;如果目标是 Wiki,不要尝试用 `drive +move` 代替
17
+ - `drive +move` 不支持 Wiki 文档;Wiki 节点到 Drive 应使用 `wiki +move-to-drive`,目标是 Wiki 时使用 `wiki +move`
17
18
 
18
19
  ## 不要误用到 `我的文档库`
19
20
 
@@ -117,4 +118,5 @@ lark-cli drive +task_result \
117
118
  ## 参考
118
119
 
119
120
  - [lark-drive](../SKILL.md) -- 云空间(云盘/云存储)全部命令
121
+ - [wiki +move-to-drive](../../lark-wiki/references/lark-wiki-move-to-drive.md) -- 将 Wiki 节点移出知识库并放入 Drive
120
122
  - [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数