@amaster.ai/pi-lark 0.1.2-beta.57 → 0.1.2-beta.59
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/SKILL.md +155 -155
- 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 +9 -14
- 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-query.md +5 -5
- 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} +13 -98
- package/skills/lark-base/references/lark-base-field-update.md +13 -51
- package/skills/lark-base/references/lark-base-filter-condition.md +7 -35
- 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-data-analysis-cloud.md → lark-base-record-query-and-analysis-cloud-sop.md} +4 -4
- package/skills/lark-base/references/{lark-base-data-analysis-sop.md → lark-base-record-query-and-analysis-sop.md} +27 -18
- 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/references/lark-calendar-create.md +4 -4
- package/skills/lark-doc/SKILL.md +4 -4
- 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-im/SKILL.md +6 -1
- package/skills/lark-note/SKILL.md +2 -0
- package/skills/lark-slides/references/cli/lark-slides-update-slide.md +18 -1
- package/skills/lark-vc/SKILL.md +2 -0
- package/skills/lark-vc/references/vc-domain-boundaries.md +2 -0
- package/skills/lark-wiki/references/lark-wiki-node-copy.md +1 -0
- package/skills/lark-wiki/references/lark-wiki-node-get.md +4 -0
- package/skills/lark-base/references/lark-base-data-query-guide.md +0 -67
- package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Base
|
|
1
|
+
# Base Field Schema
|
|
2
2
|
|
|
3
3
|
> 适用命令:`lark-cli base +field-create`、`lark-cli base +field-update`
|
|
4
4
|
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
- `+field-create --json` 接受一个字段对象或非空字段对象数组。
|
|
11
11
|
- `+field-update --json` 只接受一个字段对象。
|
|
12
12
|
- 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
|
|
13
|
-
- 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null
|
|
13
|
+
- 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null`;创建时省略表示不设置。
|
|
14
14
|
- 不要使用旧结构:`field_name`、`property`、`ui_type`、数字枚举 `type`。
|
|
15
|
-
- `+field-update`
|
|
15
|
+
- `+field-update` 是 override 式的完整覆盖 `PUT`,不是 partial update;先用 `+field-get` 读取当前定义,在其基础上修改目标属性,并把整个字段需要保留的可写配置完整写回,同时带 `--yes`。
|
|
16
16
|
- `type=formula` 或 `type=lookup` 创建/更新前,必须先读对应 guide。
|
|
17
17
|
|
|
18
18
|
推荐示例:
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
- `icon` 默认 `star`
|
|
186
186
|
- `icon` 可用:`star`、`heart`、`thumbsup`、`fire`、`smile`、`lightning`、`flower`、`number`
|
|
187
187
|
- `min` 取值 `0..1`,默认 `1`
|
|
188
|
-
- `max`
|
|
188
|
+
- `max` 取值 `1..10`,默认 `5`
|
|
189
189
|
|
|
190
190
|
```json
|
|
191
191
|
{
|
|
@@ -229,6 +229,8 @@
|
|
|
229
229
|
|
|
230
230
|
#### 动态选项
|
|
231
231
|
|
|
232
|
+
当新字段要引用或复用另一选项字段的选项列表时,优先使用 `dynamic_options_source`,避免重复定义和维护 `options`。
|
|
233
|
+
|
|
232
234
|
支持字段:`multiple`、`dynamic_options_source`
|
|
233
235
|
动态选项不支持 `default_value`。
|
|
234
236
|
|
|
@@ -305,12 +307,7 @@
|
|
|
305
307
|
|
|
306
308
|
### 3.6 user / group_chat
|
|
307
309
|
|
|
308
|
-
|
|
309
|
-
`user` 支持 `default_value`:人员 CellValue 数组,元素可用 `{ "id": "ou_xxx" }` 或 `{ "$slot": "current_user" }`;不要猜用户 ID。`group_chat` 不支持默认值。
|
|
310
|
-
|
|
311
|
-
默认值 / 约束:
|
|
312
|
-
- `multiple` 默认 `true`
|
|
313
|
-
- `user` 字段支持 `default_value` 配置,`group_chat` 字段不支持 `default_value` 配置。
|
|
310
|
+
两者都支持 `multiple`(默认 `true`);仅 `user` 支持人员数组 `default_value`,元素使用 `{ "id": "ou_xxx" }` 或 `{ "$slot": "current_user" }`,用户 ID 必须来自真实查询。
|
|
314
311
|
|
|
315
312
|
```json
|
|
316
313
|
{
|
|
@@ -327,15 +324,7 @@
|
|
|
327
324
|
|
|
328
325
|
### 3.7 created_by / updated_by
|
|
329
326
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
```json
|
|
333
|
-
{ "type": "created_by", "name": "创建人" }
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
```json
|
|
337
|
-
{ "type": "updated_by", "name": "更新人" }
|
|
338
|
-
```
|
|
327
|
+
系统创建人和修改人字段,记录写入时只读:`{ "type": "created_by", "name": "创建人" }`、`{ "type": "updated_by", "name": "更新人" }`。
|
|
339
328
|
|
|
340
329
|
### 3.8 link
|
|
341
330
|
|
|
@@ -377,7 +366,7 @@
|
|
|
377
366
|
|
|
378
367
|
### 3.9 formula
|
|
379
368
|
|
|
380
|
-
公式字段;`expression` 必填。创建/更新前先读 [
|
|
369
|
+
公式字段;`expression` 必填。创建/更新前先读 [Formula Field](lark-base-field-formula.md) 学习公式语法。
|
|
381
370
|
|
|
382
371
|
```json
|
|
383
372
|
{
|
|
@@ -389,34 +378,7 @@
|
|
|
389
378
|
|
|
390
379
|
### 3.10 lookup
|
|
391
380
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
支持字段:`from`、`select`、`where`、`aggregate`
|
|
395
|
-
|
|
396
|
-
默认值 / 约束:
|
|
397
|
-
- `from`、`select`、`where` 必填
|
|
398
|
-
- `aggregate` 默认 `raw_value` 代表不进行聚合,直接返回 select 回的原始值
|
|
399
|
-
- `aggregate` 可用:`raw_value`、`sum`、`average`、`counta`、`unique_counta`、`max`、`min`、`unique`
|
|
400
|
-
- `where.logic` 默认 `and`,仅支持 `and` / `or`
|
|
401
|
-
- `where.conditions` 至少 1 条
|
|
402
|
-
- `conditions` 每项是三元组 `[field, op, value?]`
|
|
403
|
-
|
|
404
|
-
```json
|
|
405
|
-
{
|
|
406
|
-
"type": "lookup",
|
|
407
|
-
"name": "状态汇总",
|
|
408
|
-
"from": "任务表",
|
|
409
|
-
"select": "状态",
|
|
410
|
-
"where": {
|
|
411
|
-
"logic": "and",
|
|
412
|
-
"conditions": [
|
|
413
|
-
["负责人", "==", { "type": "field_ref", "field": "当前负责人" }],
|
|
414
|
-
["状态", "non_empty", null]
|
|
415
|
-
]
|
|
416
|
-
},
|
|
417
|
-
"aggregate": "raw_value"
|
|
418
|
-
}
|
|
419
|
-
```
|
|
381
|
+
查找引用字段使用 `from`、`select`、`where` 和可选 `aggregate`;结构、条件和聚合值必须按 [Lookup Field](lark-base-field-lookup.md) 构造。
|
|
420
382
|
|
|
421
383
|
### 3.11 auto_number
|
|
422
384
|
|
|
@@ -431,52 +393,7 @@
|
|
|
431
393
|
}
|
|
432
394
|
```
|
|
433
395
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
默认值 / 约束:
|
|
437
|
-
- `style.rules` 是规则数组,数量 `1..9`
|
|
438
|
-
- 默认规则:
|
|
439
|
-
|
|
440
|
-
```json
|
|
441
|
-
{
|
|
442
|
-
"style": {
|
|
443
|
-
"rules": [
|
|
444
|
-
{ "type": "text", "text": "NO." },
|
|
445
|
-
{ "type": "incremental_number", "length": 3 }
|
|
446
|
-
]
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
#### `text`
|
|
452
|
-
|
|
453
|
-
支持字段:`text`
|
|
454
|
-
|
|
455
|
-
```json
|
|
456
|
-
{ "type": "text", "text": "TASK-" }
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
#### `incremental_number`
|
|
460
|
-
|
|
461
|
-
支持字段:`length`
|
|
462
|
-
|
|
463
|
-
默认值 / 约束:
|
|
464
|
-
- `length` 取值 `1..9`
|
|
465
|
-
|
|
466
|
-
```json
|
|
467
|
-
{ "type": "incremental_number", "length": 4 }
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
#### `created_time`
|
|
471
|
-
|
|
472
|
-
支持字段:`date_format`
|
|
473
|
-
|
|
474
|
-
默认值 / 约束:
|
|
475
|
-
- `date_format` 可用:`yyyyMMdd`、`yyyyMM`、`yyMM`、`MMdd`、`yyyy`、`MM`、`dd`
|
|
476
|
-
|
|
477
|
-
```json
|
|
478
|
-
{ "type": "created_time", "date_format": "yyyyMMdd" }
|
|
479
|
-
```
|
|
396
|
+
`style.rules` 包含 1–9 条规则:固定文本用 `{ "type":"text", "text":"TASK-" }`;递增序号用 `{ "type":"incremental_number", "length":4 }`(长度 1–9);创建时间用 `{ "type":"created_time", "date_format":"yyyyMMdd" }`,格式支持 `yyyyMMdd`、`yyyyMM`、`yyMM`、`MMdd`、`yyyy`、`MM`、`dd`。
|
|
480
397
|
|
|
481
398
|
自定义规则:
|
|
482
399
|
|
|
@@ -504,7 +421,7 @@
|
|
|
504
421
|
{ "type": "location", "name": "位置" }
|
|
505
422
|
```
|
|
506
423
|
|
|
507
|
-
|
|
424
|
+
Location 读取为 `{lng,lat,full_address}`;写入只使用数字 `{lng,lat}`,`full_address` 由平台根据坐标解析,不允许手动指定;筛选行为按照 `full_address` 做字符串筛选,将 Location 当作文本列使用文本 operator。`location -> text` 时只保留 `full_address`。
|
|
508
425
|
|
|
509
426
|
```json
|
|
510
427
|
{ "type": "checkbox", "name": "完成" }
|
|
@@ -513,14 +430,12 @@
|
|
|
513
430
|
## 4. 创建与更新
|
|
514
431
|
|
|
515
432
|
- `+field-create`:按目标字段配置直接构造 `--json`。
|
|
516
|
-
- `+field-update`:使用同样的 JSON
|
|
433
|
+
- `+field-update`:使用同样的 JSON 结构,但执行完整覆盖更新,不是局部 patch。先用 `+field-get` 读取当前定义,在其基础上修改目标属性;需要保留的名称、类型、样式、选项、默认值、描述及类型专属配置都应完整写回,并带 `--yes`。
|
|
517
434
|
|
|
518
435
|
## 5. 暂不支持字段
|
|
519
436
|
|
|
520
437
|
Object(对象字段)、Button(按钮字段)、Stage(流程字段)暂时都没有被 CLI 支持。这些字段会展示为 `not_support` 字段并被保护:不允许修改,不允许读取内容。
|
|
521
438
|
|
|
522
|
-
遇到暂不支持的字段类型时,直接说明 Base CLI 当前不支持并停止;不要猜测未注册的字段 JSON、service 或 schema,也不要用其他字段类型冒充目标能力。
|
|
523
|
-
|
|
524
439
|
## 6. 易错点
|
|
525
440
|
|
|
526
441
|
- `select` 只有一个类型;不要写 `single_select` / `multi_select`,用 `multiple` 控制是否多选。
|
|
@@ -14,19 +14,6 @@ lark-cli base +field-update \
|
|
|
14
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
|
-
lark-cli base +field-update \
|
|
18
|
-
--base-token <base_token> \
|
|
19
|
-
--table-id <table_id> \
|
|
20
|
-
--field-id <field_id> \
|
|
21
|
-
--json '{"name":"负责人","type":"user","multiple":false,"default_value":null,"description":"用于标记记录的直接负责人"}' \
|
|
22
|
-
--yes
|
|
23
|
-
|
|
24
|
-
lark-cli base +field-update \
|
|
25
|
-
--base-token <base_token> \
|
|
26
|
-
--table-id <table_id> \
|
|
27
|
-
--field-id <field_id> \
|
|
28
|
-
--json '{"name":"编号","type":"auto_number","style":{"rules":[{"type":"text","text":"TASK-"},{"type":"created_time","date_format":"yyyyMM"},{"type":"text","text":"-"},{"type":"incremental_number","length":4}]}}' \
|
|
29
|
-
--yes
|
|
30
17
|
```
|
|
31
18
|
|
|
32
19
|
## 参数
|
|
@@ -49,19 +36,17 @@ lark-cli base +field-update \
|
|
|
49
36
|
PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
50
37
|
```
|
|
51
38
|
|
|
52
|
-
当 `--json.type` 是 `auto_number` 时,仍然走同一个 v3 字段更新接口:更新自动编号规则后,接口现状就会把新规则应用到已有编号(这是接口默认行为,只是 agent 通常不知道),因此**不需要**任何额外开关或参数。只需要正常提交目标自动编号字段定义即可;如果用户要求“将修改用于已有编号”,直接执行这次 `+field-update` 就能达到效果,不要在 `--json` 里额外添加任何参数去“触发”重排。
|
|
53
|
-
|
|
54
39
|
## JSON 值规范
|
|
55
40
|
|
|
56
41
|
- `--json` 必须是 **JSON 对象**,顶层直接传字段定义。
|
|
57
|
-
- 更新语义是 `PUT
|
|
42
|
+
- 更新语义是 override 式的完整覆盖 `PUT`,不是 partial update;先读取当前定义,再提交整个字段需要保留的可写配置,不要只传零散片段。
|
|
58
43
|
- 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
|
|
59
|
-
- 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;传 `null`
|
|
44
|
+
- 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;传 `null` 清空。完整规则见 [Field Schema](lark-base-field-schema.md)。
|
|
60
45
|
- `select` 更新时:`options` 仍按对象数组传,避免混入无效字段。
|
|
61
46
|
- `link` 更新限制:
|
|
62
47
|
- 不能把非 `link` 字段改成 `link`,也不能把 `link` 改成非 `link`。
|
|
63
48
|
- 现有 `link` 字段的 `bidirectional` 不能改。
|
|
64
|
-
- `auto_number
|
|
49
|
+
- 更新 `auto_number.style.rules` 会按新规则更新已有记录的编号;规则结构见 [Field Schema](lark-base-field-schema.md)。
|
|
65
50
|
|
|
66
51
|
**推荐更新示例**
|
|
67
52
|
|
|
@@ -79,32 +64,17 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
79
64
|
}
|
|
80
65
|
```
|
|
81
66
|
|
|
82
|
-
**字段说明示例**
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"name": "负责人",
|
|
87
|
-
"type": "user",
|
|
88
|
-
"multiple": false,
|
|
89
|
-
"description": "用于标记记录的直接负责人"
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
67
|
## 返回重点
|
|
94
68
|
|
|
95
69
|
- 返回 `field` 和 `updated: true`。
|
|
96
|
-
- `
|
|
97
|
-
- 如果响应中的 `field.type` 与提交的 `type` 不一致,必须把它当作待核验的类型不匹配;不能返回完成态,也不能只根据其中任一类型推断更新成功。
|
|
98
|
-
- 如果 API 报告本次更新没有产生任何变更(no-op),命令会如实返回该错误;这通常说明目标字段已是期望状态,不要机械重试同一份 `+field-update`。需要确认当前字段完整状态时执行 `+field-get`。
|
|
99
|
-
- 如果返回 `field_get_recommended:true` 或 `next_step:"field_get"`,按提示读回字段;`auto_number` 更新后还应抽样读记录值确认编号已按新规则生成。
|
|
70
|
+
- 按返回的 `next_step` 和 `verification_hint` 继续;类型转换涉及已有值时抽样读取记录。
|
|
100
71
|
|
|
101
72
|
## 工作流
|
|
102
73
|
|
|
103
74
|
|
|
104
|
-
1.
|
|
75
|
+
1. 先用 `+field-get` 读取当前定义,只改变目标属性,并把需要保留的其他可写配置完整写回。
|
|
105
76
|
2. `formula/lookup` 类型更新前先阅读对应指南。
|
|
106
|
-
3.
|
|
107
|
-
4. 如果这次更新会改变字段 `type` 先按下方“字段类型变更规则”判断能否执行。如果不修改 `type`,大多数场景都相对安全。
|
|
77
|
+
3. 如果这次更新会改变字段 `type`,先按下方“字段类型变更规则”判断能否执行。如果不修改 `type`,大多数场景都相对安全。
|
|
108
78
|
|
|
109
79
|
## 字段类型变更规则
|
|
110
80
|
|
|
@@ -149,10 +119,10 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
149
119
|
|
|
150
120
|
只有在**整列数据丢失可接受**时,才允许对黑名单场景例外执行。
|
|
151
121
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
122
|
+
1. 该列为空。
|
|
123
|
+
2. 正在初始化新建的空表。
|
|
124
|
+
3. 主字段不能删除,需要通过更新完成初始化。
|
|
125
|
+
4. 用户明确接受整列数据丢失。
|
|
156
126
|
|
|
157
127
|
不满足以上条件时,不要转换。
|
|
158
128
|
|
|
@@ -167,14 +137,6 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
167
137
|
- 可能影响视图 / 筛选 / 排序 / 公式 / lookup / 写入引用
|
|
168
138
|
- 如果用户不接受风险:不要执行转换。
|
|
169
139
|
|
|
170
|
-
### 完成态验证
|
|
171
|
-
|
|
172
|
-
- `FieldReadback`: 读回字段结构,确认 `type` / `multiple` / `style` / `options`
|
|
173
|
-
- `NoopReadback`: `+field-update` 返回 no-op 错误时,只能说明 API 报告没有产生变更;可以跳过重复 update,但不能替代 `FieldReadback`
|
|
174
|
-
- `ValueReadback`: 抽样读回转换后的单元格值
|
|
175
|
-
- `DownstreamReadback`: 若涉及看板 / 分组 / 排序 / lookup / 公式,继续读回结果
|
|
176
|
-
- `CompletionRule`: 结构、值、下游能力都正确,才能回复“已完成”
|
|
177
|
-
|
|
178
140
|
## 坑点
|
|
179
141
|
|
|
180
142
|
- ⚠️ 这是全量字段属性更新语义,不是 patch。
|
|
@@ -184,6 +146,6 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
184
146
|
## 参考
|
|
185
147
|
|
|
186
148
|
- 更新前读取当前字段,确认现有 `type` 和具体配置细节,再决定是原地更新还是新建字段迁移。
|
|
187
|
-
- [
|
|
188
|
-
- [
|
|
189
|
-
- [
|
|
149
|
+
- [Field Schema](lark-base-field-schema.md) — 字段 JSON 规范(推荐)
|
|
150
|
+
- [Formula Field](lark-base-field-formula.md) — 更新公式前必读
|
|
151
|
+
- [Lookup Field](lark-base-field-lookup.md) — 更新查找引用前必读
|
|
@@ -10,7 +10,7 @@ Filter 是一组「字段/操作符/值」条件的组合,用 `logic`(`and`
|
|
|
10
10
|
- `+record-list --filter-json` / `+record-search --filter-json` 的结构化记录筛选。
|
|
11
11
|
- `+form-questions-create` / `+form-questions-update` 中的 `visible_rule` 显隐条件。
|
|
12
12
|
|
|
13
|
-
本协议**不适用于 `+data-query`**。`+data-query` 支持过滤,但使用的是 LiteQuery DSL 的 `filters` 对象结构:`{"type":1,"conjunction":"and","conditions":[{"field_name":"状态","operator":"is","value":["有效"]}]}`,不是这里的 tuple 条件 `["状态","==","有效"]
|
|
13
|
+
本协议**不适用于 `+data-query`**。`+data-query` 支持过滤,但使用的是 LiteQuery DSL 的 `filters` 对象结构:`{"type":1,"conjunction":"and","conditions":[{"field_name":"状态","operator":"is","value":["有效"]}]}`,不是这里的 tuple 条件 `["状态","==","有效"]`。需要聚合查询时先返回 [Record 查询与分析 SOP](lark-base-record-query-and-analysis-sop.md) 选路;SOP 选定 `+data-query` 后再读取 guide 和完整 DSL reference。
|
|
14
14
|
|
|
15
15
|
## 1. 顶层结构
|
|
16
16
|
|
|
@@ -60,11 +60,7 @@ value 类型取决于条件引用对象(字段 / 题目)的类型。
|
|
|
60
60
|
|
|
61
61
|
### `text`
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
```json
|
|
66
|
-
["标题", "!=", "已归档"]
|
|
67
|
-
```
|
|
63
|
+
用字符串;高频的片段包含 / 排除使用 `intersects` / `disjoint`,完整文本比较使用 `==` / `!=`:
|
|
68
64
|
|
|
69
65
|
```json
|
|
70
66
|
["标题", "intersects", "发布"]
|
|
@@ -82,8 +78,6 @@ location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度
|
|
|
82
78
|
["位置", "intersects", "深圳"]
|
|
83
79
|
```
|
|
84
80
|
|
|
85
|
-
不推荐写 `["位置", "==", "深圳"]` 这类精确匹配,除非确保筛选值与完整 `full_address` 完全一致。
|
|
86
|
-
|
|
87
81
|
### `number` / `auto_number`
|
|
88
82
|
|
|
89
83
|
用数字:
|
|
@@ -104,11 +98,9 @@ location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度
|
|
|
104
98
|
["状态", "disjoint", ["Archived"]]
|
|
105
99
|
```
|
|
106
100
|
|
|
107
|
-
### `user` / `created_by` / `updated_by`
|
|
101
|
+
### `user` / `group_chat` / `created_by` / `updated_by`
|
|
108
102
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
> **人员筛选:不要猜 ID。** 不知道 `open_id` 时,先用 `lark-contact` 查 id:`lark-cli contact +search-user --query "<姓名/邮箱/手机号>" --as user`。
|
|
103
|
+
用对象数组;人员使用 `ou_xxx`,群组使用 `oc_xxx`。不知道 ID 时,人员用 `lark-contact` 查询,群组用 `lark-im` 搜索。
|
|
112
104
|
|
|
113
105
|
```json
|
|
114
106
|
["负责人", "intersects", [{ "id": "ou_xxx" }]]
|
|
@@ -118,12 +110,6 @@ location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度
|
|
|
118
110
|
["负责人", "disjoint", [{ "id": "ou_xxx" }]]
|
|
119
111
|
```
|
|
120
112
|
|
|
121
|
-
### `group_chat`
|
|
122
|
-
|
|
123
|
-
用对象数组:
|
|
124
|
-
|
|
125
|
-
> **群组筛选:不要猜 ID。** 不知道 `chat_id` 时,先用 `lark-im` 搜群:`lark-cli im +chat-search --query "<群名关键词>" --as user`;取结果里的 `oc_xxx`。
|
|
126
|
-
|
|
127
113
|
```json
|
|
128
114
|
["负责群", "intersects", [{ "id": "oc_xxx" }]]
|
|
129
115
|
```
|
|
@@ -167,21 +153,7 @@ location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度
|
|
|
167
153
|
|
|
168
154
|
### `formula` / `lookup`
|
|
169
155
|
|
|
170
|
-
|
|
171
|
-
- 拿不准时,先把 `value` 当作单个字符串填入做一次尝试。
|
|
172
|
-
- 如果报错,再按错误提示把 `value` 改成对应类型。
|
|
173
|
-
|
|
174
|
-
字符串示例:
|
|
175
|
-
|
|
176
|
-
```json
|
|
177
|
-
["风险说明", "intersects", "高风险"]
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
数字示例:
|
|
181
|
-
|
|
182
|
-
```json
|
|
183
|
-
["汇总分", ">=", 80]
|
|
184
|
-
```
|
|
156
|
+
value schema 随计算结果类型变化;拿不准时先读取字段定义,或根据错误提示修正 value 和 operator。
|
|
185
157
|
|
|
186
158
|
## 4. 易错点
|
|
187
159
|
|
|
@@ -189,7 +161,7 @@ location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度
|
|
|
189
161
|
- `user` / `group_chat` / `link` 不要写成单个标量。
|
|
190
162
|
- `empty` / `non_empty` 统一表示格子为空 / 非空,不要传 value;标量空格子和多值字段没有任何元素都属于空。
|
|
191
163
|
- 日期条件稳定写法用 `ExactDate(...)` 或 `Today` / `Yesterday` / `Tomorrow`。
|
|
192
|
-
- `formula` / `lookup` 的 value
|
|
164
|
+
- `formula` / `lookup` 的 value schema 是动态的;拿不准 value 类型时先读字段定义,或根据错误提示修正类型。
|
|
193
165
|
|
|
194
166
|
## 5. 参考
|
|
195
|
-
- [
|
|
167
|
+
- [Lookup Field](lark-base-field-lookup.md)
|
|
@@ -51,7 +51,11 @@ lark-cli base +record-batch-create --base-token <base_token> --table-id <table_i
|
|
|
51
51
|
## 坑点
|
|
52
52
|
|
|
53
53
|
- 每个 `create_records` 元素都是独立的记录字段对象,只提交该记录需要写入的字段。
|
|
54
|
-
- 单次最多 200
|
|
54
|
+
- 单次最多 200 条;`1254104` 表示超过单批上限,拆成多个批次。
|
|
55
|
+
- `1254045` 表示字段不存在,重新 `+field-list` 后使用真实字段名或 `field_id`。
|
|
56
|
+
- `1254015` 表示 CellValue 类型不匹配,按真实 Field schema 和 CellValue 规范修正。
|
|
57
|
+
- 返回 `ignored_fields` / `READONLY` 时,从普通 Record 写入中移除 Formula、Lookup、系统字段和自动编号等只读字段。
|
|
58
|
+
- 同一 Table 连续批量写入使用串行执行;`1254291` 表示并发写冲突,短暂等待后重试当前批次。
|
|
55
59
|
- `select` 字段只支持写入字段中已有的选项;构造 CellValue 前先用 `+field-list` 或 `+field-search-options` 确认目标选项存在。
|
|
56
60
|
|
|
57
61
|
## 参考
|
|
@@ -45,9 +45,12 @@ lark-cli base +record-batch-update --base-token <base_token> --table-id <table_i
|
|
|
45
45
|
|
|
46
46
|
## 坑点
|
|
47
47
|
|
|
48
|
-
- 单次最多更新 200
|
|
48
|
+
- 单次最多更新 200 条记录;`1254104` 表示超过单批上限,拆成多个批次。
|
|
49
|
+
- `1254045` 表示字段不存在,重新 `+field-list` 后使用真实字段名或 `field_id`。
|
|
50
|
+
- `1254015` 表示 CellValue 类型不匹配,按真实 Field schema 和 CellValue 规范修正。
|
|
49
51
|
- 命令不会自动做字段/行映射转换,传什么就发什么。
|
|
50
|
-
- 如果字段映射包含只读字段,返回里可能出现 `ignored_fields
|
|
52
|
+
- 如果字段映射包含只读字段,返回里可能出现 `ignored_fields` / `READONLY`;移除 Formula、Lookup、系统字段和自动编号等只读字段。
|
|
53
|
+
- 同一 Table 连续批量写入使用串行执行;`1254291` 表示并发写冲突,短暂等待后重试当前批次。
|
|
51
54
|
|
|
52
55
|
## 参考
|
|
53
56
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Base
|
|
1
|
+
# Base Record 查询与分析 Cloud SOP
|
|
2
2
|
|
|
3
3
|
统一数据分析 SOP 将任务路由到 Cloud 时使用本 SOP。覆盖记录读取、筛选、排序、Top/Bottom N、聚合统计、分组聚合、多表关联和查询后写入前的目标定位。
|
|
4
4
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
| 明确关键词 | `+record-search --keyword ... --search-field ... --field-id ...` | 必须显式指定 `--search-field`;可叠加 `--filter-json` |
|
|
26
26
|
| 按条件找原始记录 | `+record-list --filter-json ...` | `filter-json` 与视图筛选结构一致,支持文本、数字、日期、选项、人员、群组、关联等值 |
|
|
27
27
|
| 排序 / TopN 原始记录 | `+record-list --filter-json ... --sort-json ... --limit N` | 最高/最新用 `desc:true`,最低/最早用 `desc:false`;数组顺序表达优先级;最多 10 个排序条件 |
|
|
28
|
-
| 聚合 / 分组 / 分组排序 | `+data-query` | 读取 [data-query
|
|
28
|
+
| 聚合 / 分组 / 分组排序 | `+data-query` | 读取 [data-query DSL reference](lark-base-data-query.md),使用 filters/dimensions/measures/sort/limit |
|
|
29
29
|
| 聚合后输出逐条记录 | `+data-query` 得到业务 key 或候选字段组合 -> `+record-list --filter-json` / `+record-get` 回查 | `+data-query` 维度行按字段组合去重且不返回 `record_id` |
|
|
30
30
|
| 多表 / 多跳关联 | 以候选数最小的事实表为驱动表,沿业务 key 或 Link 逐跳回查 | 读出 Link 单元格的 `id`(目标表 `record_id`)后,到被关联表批量 `+record-get` 展示字段 |
|
|
31
31
|
| 查询后写入 / 视图化 | 先用本 SOP 得到可复核的目标记录 id 集合 | 再进入记录写入或视图配置;高价值可复用查询可沉淀为持久视图 |
|
|
@@ -55,7 +55,7 @@ lark-cli base +record-list \
|
|
|
55
55
|
--limit 20
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
常用 `filter-json` condition fewshot 统一见 [Base
|
|
58
|
+
常用 `filter-json` condition fewshot 统一见 [Base Record 查询与分析 SOP](lark-base-record-query-and-analysis-sop.md);完整协议见 [Base Filter 条件结构](lark-base-filter-condition.md)。
|
|
59
59
|
|
|
60
60
|
`--sort-json` 传排序数组,数组顺序就是优先级,`desc:true` 为降序,`desc:false` 为升序,最多 10 个排序条件。
|
|
61
61
|
|
|
@@ -84,7 +84,7 @@ lark-cli base +record-search \
|
|
|
84
84
|
|
|
85
85
|
- 让 Base 云端查询服务完成 filters、dimensions、measures、sort、pagination.limit。
|
|
86
86
|
- `pagination.limit` 是 Base 云端查询服务中的结果限制,不是本地分页扫描。
|
|
87
|
-
-
|
|
87
|
+
- 读取 [data-query DSL reference](lark-base-data-query.md) 中与当前查询有关的 fewshot、字段和协议。
|
|
88
88
|
- `+data-query` 可返回聚合结果或维度字段行;维度字段行按字段组合去重且不返回 `record_id`,不能当逐条原始记录结果使用。
|
|
89
89
|
- 需要输出逐条记录、记录定位或完整行级字段时,先用 `+data-query` 得到业务 key、分组值或候选字段组合,再用 `+record-list --filter-json` / `+record-get` 回查。
|
|
90
90
|
|
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
# Base
|
|
1
|
+
# Base Record 查询、匹配与分析 SOP
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
任何 Record 读取、预览、搜索、筛选、匹配、统计、聚合、TopN、多表或语义分析,以及写操作中的记录定位和结果验收,都先完整读取本 SOP。先区分需要 LLM 理解原文的语义分析与可程序化计算的确定性分析,再按数据规模与计算复杂度选择路径;即使用户直接要求解释、编写或排错 `+data-query` 命令或 DSL,也先由本 SOP 确认口径和路径,再读取底层 reference。
|
|
4
4
|
|
|
5
5
|
## 分流决策
|
|
6
6
|
|
|
7
|
-
1.
|
|
7
|
+
1. 明确所有需要参与分析的表;上下文已有整表 `records_count` 时用于提前分流,否则直接按下文导出或探测,不为获取规模单独枚举表。
|
|
8
8
|
2. 如果结论必须依赖 LLM 理解原始内容,例如开放文本打标、情绪或意图识别、主题归纳、语义分类、相似性判断或实体消歧,进入下文“LLM 语义分析”路径。
|
|
9
|
-
3.
|
|
9
|
+
3. 对于其余确定性查询,任一分析表已知超过 2000 行或 NDJSON 探测返回 `has_more=true` 时,先从任务意图中提取可在单表内独立执行的日期、状态、关键词等谓词,逐表下推后用 `--field-id '<一个简单标量字段>' --limit 2000 --format ndjson --output <probe>.ndjson --minimal-stdout` 复查。目标是每张表都达到 `has_more=false`;任一表无法压缩到 2000 行以内时,转 [Cloud SOP](lark-base-record-query-and-analysis-cloud-sop.md) 用云端的数据分析能力。
|
|
10
10
|
4. 所有分析表都不超过 2000 行后:若只有一张表且短 jq 可清晰完成筛选、计数、简单分组/聚合/排序、TopN 可以使用 jq。
|
|
11
|
-
5. 其余确定性任务比如多表、日历计算和复杂数据分析,在 Python 可用时使用 Python,否则进入 [Cloud SOP](lark-base-
|
|
11
|
+
5. 其余确定性任务比如多表、日历计算和复杂数据分析,在 Python 可用时使用 Python,否则进入 [Cloud SOP](lark-base-record-query-and-analysis-cloud-sop.md)。
|
|
12
12
|
|
|
13
|
-
进入 Cloud 后先由 Cloud SOP 在原始记录查询与聚合查询之间选路;只有选定 `+data-query` 时才读取 data-query
|
|
13
|
+
进入 Cloud 后先由 Cloud SOP 在原始记录查询与聚合查询之间选路;只有选定 `+data-query` 时才读取 [data-query DSL reference](lark-base-data-query.md)。
|
|
14
14
|
|
|
15
15
|
## 执行与交付
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
所有 records 读取统一使用 `--format ndjson --output <artifact>.ndjson`。NDJSON 将大记录集写入 records 文件,并在 stdout 返回包含摘要、列 schema 和 stats 的 manifest,避免把过长用户数据直接加载进模型上下文。用 Python 或数据分析引擎直接处理 records 文件。未传 `--limit` 时最多读取 2000 条;仅在探测、预览或用户明确要求前 N 条时缩小限制。
|
|
18
|
+
|
|
19
|
+
### NDJSON 读取示例
|
|
20
|
+
|
|
21
|
+
按任务替换真实 token、ID、投影、条件和 artifact 名称;`+record-search` 和 `+record-get` 使用相同的 NDJSON 输出参数。
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
lark-cli base +record-list \
|
|
25
|
+
--base-token <base_token> \
|
|
26
|
+
--table-id <table_id> \
|
|
27
|
+
--field-id <field> \
|
|
28
|
+
--format ndjson \
|
|
29
|
+
--output ./records.ndjson \
|
|
30
|
+
--as user
|
|
31
|
+
```
|
|
18
32
|
|
|
19
33
|
缩小大表记录范围时,展示文本关键词用 `+record-search`,日期、状态、数字、空值、选项、人员和关联等结构化条件用 `+record-list --filter-json`。
|
|
20
34
|
|
|
@@ -45,7 +59,7 @@
|
|
|
45
59
|
}
|
|
46
60
|
```
|
|
47
61
|
|
|
48
|
-
全表分析的常规资源链路是 `+table-list`
|
|
62
|
+
全表分析的常规资源链路是 `+table-list` 确认目标表,并用已有整表 `records_count` 或 NDJSON `has_more` 确认规模;对所有参与分析的表并发执行 `+field-list` 读取所需 schema,再按上述 NDJSON 契约用 `+record-list` 导出记录。已有可信的 `table_id` 时可直接并发读取各表 `+field-list`。`+view-get` 可按需读取,作为用户持久化访问习惯的可选参考;其中的 filter、sort 与字段范围可辅助理解用户常用的查询范围和排序偏好,并结合当前任务确定最终口径。
|
|
49
63
|
|
|
50
64
|
1. 每次读取使用任务所需的最小投影,并包含 JOIN、解释、回查或写入需要的业务 key。
|
|
51
65
|
2. 全局结论以 `has_more=false` 的完整导出或 Cloud 聚合结果为依据;`has_more=true` 时继续收敛单表谓词或选择 Cloud 路径。
|
|
@@ -53,16 +67,12 @@
|
|
|
53
67
|
4. Base 标量空值很常见;聚合前按用户口径确定空值是排除、按零计入还是进入分母。用户未指定且不同处理会实质改变结论时,说明空值数量、采用的口径及其影响;任务涉及业务键、展开、JOIN 或金额分摊时,同样明确目标粒度及与口径直接相关的重复或总量守恒。
|
|
54
68
|
5. 最终结果保留真实表、查询范围和计算口径,展示用户可读字段;内部 ID 用于连接或定位。
|
|
55
69
|
|
|
56
|
-
`+table-list` / `+base-block-list` 返回的 `records_count` 表示整表行数;manifest 的 `records_count` 表示本次查询实际导出的行数。
|
|
57
|
-
|
|
58
70
|
## 复用本轮 NDJSON
|
|
59
71
|
|
|
60
72
|
Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否复用:
|
|
61
73
|
|
|
62
74
|
1. 短时间内继续分析或表中数据低频变化时,谓词下推口径一致且已有列覆盖计算需求即可优先复用。
|
|
63
|
-
2. 间隔较长或表中数据高频变化时,批量提取 manifests 的 `base_token/table_id/rev
|
|
64
|
-
|
|
65
|
-
> 例:本轮已按“日期在 2026 年”导出 `orders.ndjson`,用户继续要求按负责人聚合;谓词和所需列未变,直接复用。若间隔较长或该表频繁写入,manifest `rev=42` 与 `+table-list` 最新 `rev` 相同则复用,最新 `rev=43` 则重新导出。
|
|
75
|
+
2. 间隔较长或表中数据高频变化时,批量提取 manifests 的 `base_token/table_id/rev`,刷新相关表元数据并校验最新 `rev`;版本一致且谓词口径未变时复用,否则重新导出对应表。
|
|
66
76
|
|
|
67
77
|
## LLM 语义分析
|
|
68
78
|
|
|
@@ -76,7 +86,7 @@ Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否
|
|
|
76
86
|
|
|
77
87
|
## Manifest
|
|
78
88
|
|
|
79
|
-
`--output <path>.ndjson` 生成 `<path>.ndjson` 与 `<path>.manifest.json`;记录写入 NDJSON,stdout 返回 manifest
|
|
89
|
+
`--output <path>.ndjson` 生成 `<path>.ndjson` 与 `<path>.manifest.json`;记录写入 NDJSON,stdout 返回 manifest。
|
|
80
90
|
|
|
81
91
|
分析 artifact 使用相对路径输出到当前工作目录,例如 `--output ./records.ndjson`。
|
|
82
92
|
|
|
@@ -115,7 +125,6 @@ Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否
|
|
|
115
125
|
|
|
116
126
|
- stdout 的 `records_count` 和 `has_more` 描述本次导出;确认后无需在分析代码中重读 manifest 或重新统计 NDJSON 行数。
|
|
117
127
|
- `record_file_size_bytes` 是 NDJSON artifact 的实际字节数,用于选择一次读取、预览或分批方式;确定性计算由 jq/Python 直接读取文件。
|
|
118
|
-
- manifest 的 `rev` 是导出首个响应页返回的 table revision;与 `+table-list` 返回的最新 `rev` 比较,可判断本轮 NDJSON 是否仍对应当前表版本。
|
|
119
128
|
- `query_context` 保存导出查询范围;复用本轮 NDJSON 时结合原查询上下文确认谓词下推口径保持一致。
|
|
120
129
|
- 仅在需要 `columns`、example、hint 或执行 artifact 复用判断时读取 `manifest_file`;满足复用条件后直接继续分析现有 NDJSON。
|
|
121
130
|
- `ignored_fields` 和 `record_not_found` 仅在 stdout 返回时关注。
|
|
@@ -174,7 +183,7 @@ Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否
|
|
|
174
183
|
|
|
175
184
|
NDJSON 每行是一条 record。单表短筛选、计数和简单聚合可直接用 jq;下面筛选“状态”包含“进行中”的记录,并统计记录数和金额合计:
|
|
176
185
|
|
|
177
|
-
默认导出后使用本地 `jq -s`,同一 artifact
|
|
186
|
+
默认导出后使用本地 `jq -s`,同一 artifact 可反复查询而无需重新下载;本地 jq 不可用时,使用 Python 或其他数据分析引擎处理 records 文件。
|
|
178
187
|
|
|
179
188
|
```bash
|
|
180
189
|
lark-cli base +record-list \
|
|
@@ -182,8 +191,8 @@ lark-cli base +record-list \
|
|
|
182
191
|
--table-id <table_id> \
|
|
183
192
|
--field-id 状态 \
|
|
184
193
|
--field-id 金额 \
|
|
185
|
-
--
|
|
186
|
-
--
|
|
194
|
+
--format ndjson \
|
|
195
|
+
--output records.ndjson &&
|
|
187
196
|
jq -s '
|
|
188
197
|
map(select((.["状态"] | index("进行中")) != null)) as $records
|
|
189
198
|
| ($records | map(.["金额"] | select(. != null))) as $amounts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Base
|
|
1
|
+
# Base Role Permission Schema
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **模块入口**: [Advanced Permission 与 Role](lark-base-advanced-permission-and-role.md) | **相关命令**: `+role-create` · `+role-update` · `+role-get`
|
|
4
4
|
|
|
5
5
|
本文档是角色权限 JSON(AdvPermBaseRoleConfig)的单一事实来源(SSOT),供 `+role-create` 和 `+role-update` 构造 `--json` 参数时参考。
|
|
6
6
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
本文档是 Workflow `steps` JSON 的单一事实来源(SSOT),定义完整数据结构,适用于:
|
|
4
4
|
- **查询场景**:理解 `+workflow-get` 返回的 `steps` 结构
|
|
5
5
|
- **创建/修改场景**:构造 `+workflow-create` / `+workflow-update` 的 `--json` body
|
|
6
|
-
> 💡 **本文档是纯字段参考**。如需**创建/修改**工作流的完整示例,请阅读 [
|
|
6
|
+
> 💡 **本文档是纯字段参考**。如需**创建/修改**工作流的完整示例,请阅读 [Workflow](lark-base-workflow.md)。
|
|
7
7
|
---
|
|
8
8
|
## 📖 快速导航
|
|
9
9
|
|
|
@@ -1067,5 +1067,5 @@ $.{stepId}.{fieldId}.fileToken → 文件 Token 列表(array<string>,仅
|
|
|
1067
1067
|
|
|
1068
1068
|
## 参考
|
|
1069
1069
|
|
|
1070
|
-
- [
|
|
1070
|
+
- [Workflow](lark-base-workflow.md) — 完整示例和构造技巧
|
|
1071
1071
|
- 创建/更新时外层只承载 workflow 元信息,核心校验对象是 `steps`;列表只用于拿 workflow ID 和启停状态
|