@amaster.ai/pi-lark 0.1.8 → 0.1.10

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 (155) hide show
  1. package/README.md +1 -3
  2. package/package.json +2 -2
  3. package/skills/lark-apps/SKILL.md +3 -1
  4. package/skills/lark-apps/references/lark-apps-cache.md +38 -5
  5. package/skills/lark-apps/references/lark-apps-db.md +130 -2
  6. package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
  7. package/skills/lark-base/SKILL.md +172 -167
  8. package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
  9. package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
  10. package/skills/lark-base/references/lark-base-app.md +243 -0
  11. package/skills/lark-base/references/lark-base-cell-value.md +26 -19
  12. package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +65 -6
  13. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +1 -1
  14. package/skills/lark-base/references/lark-base-dashboard.md +38 -20
  15. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
  16. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
  17. package/skills/lark-base/references/lark-base-data-query.md +8 -11
  18. package/skills/lark-base/references/lark-base-field-create.md +7 -50
  19. package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
  20. package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
  21. package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +25 -101
  22. package/skills/lark-base/references/lark-base-field-update.md +13 -51
  23. package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
  24. package/skills/lark-base/references/lark-base-form-questions-create.md +36 -5
  25. package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
  26. package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
  27. package/skills/lark-base/references/lark-base-record-history-list.md +19 -2
  28. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
  29. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
  30. package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
  31. package/skills/lark-base/references/lark-base-template-center.md +195 -0
  32. package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
  33. package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
  34. package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
  35. package/skills/lark-calendar/SKILL.md +11 -6
  36. package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
  37. package/skills/lark-calendar/references/lark-calendar-transfer.md +89 -0
  38. package/skills/lark-doc/SKILL.md +3 -3
  39. package/skills/lark-doc/references/lark-doc-fetch.md +9 -4
  40. package/skills/lark-doc/references/lark-doc-update.md +12 -8
  41. package/skills/lark-drive/SKILL.md +5 -3
  42. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -2
  43. package/skills/lark-drive/references/lark-drive-download.md +27 -1
  44. package/skills/lark-drive/references/lark-drive-export.md +1 -0
  45. package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
  46. package/skills/lark-drive/references/lark-drive-preview.md +21 -2
  47. package/skills/lark-drive/references/lark-drive-push.md +5 -1
  48. package/skills/lark-drive/references/lark-drive-search.md +2 -0
  49. package/skills/lark-im/SKILL.md +14 -3
  50. package/skills/lark-im/references/lark-im-message-read-status.md +96 -0
  51. package/skills/lark-mail/references/lark-mail-draft-create.md +12 -12
  52. package/skills/lark-mail/references/lark-mail-forward.md +17 -17
  53. package/skills/lark-mail/references/lark-mail-reply-all.md +8 -8
  54. package/skills/lark-mail/references/lark-mail-reply.md +6 -6
  55. package/skills/lark-mail/references/lark-mail-send.md +20 -20
  56. package/skills/lark-mail/references/lark-mail-template-create.md +7 -6
  57. package/skills/lark-mail/references/lark-mail-template-update.md +7 -6
  58. package/skills/lark-meeting/SKILL.md +146 -0
  59. package/skills/lark-meeting/references/lark-minutes-apply-permission.md +92 -0
  60. package/skills/lark-meeting/references/lark-minutes-detail.md +52 -0
  61. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-download.md +7 -7
  62. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-search.md +4 -34
  63. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-speaker-replace.md +3 -4
  64. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-summary.md +2 -5
  65. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-todo.md +5 -15
  66. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-update.md +2 -3
  67. package/skills/lark-meeting/references/lark-minutes-upload.md +65 -0
  68. package/skills/lark-meeting/references/lark-note-detail.md +15 -0
  69. package/skills/{lark-note → lark-meeting}/references/lark-note-transcript.md +5 -9
  70. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-join.md +4 -55
  71. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-leave.md +2 -41
  72. package/skills/lark-meeting/references/lark-vc-detail.md +31 -0
  73. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-meeting/references/lark-vc-meeting-events.md} +120 -109
  74. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-meeting/references/lark-vc-meeting-list-active.md} +4 -29
  75. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-meeting/references/lark-vc-meeting-message-send.md} +3 -5
  76. package/skills/{lark-vc → lark-meeting}/references/lark-vc-recording.md +5 -64
  77. package/skills/{lark-vc → lark-meeting}/references/lark-vc-search.md +9 -28
  78. package/skills/lark-meeting/scenes/create-and-edit-minutes.md +125 -0
  79. package/skills/lark-meeting/scenes/live-meeting-attend.md +107 -0
  80. package/skills/lark-meeting/scenes/live-meeting-interact.md +72 -0
  81. package/skills/lark-meeting/scenes/query-meeting-and-artifacts.md +90 -0
  82. package/skills/lark-meeting/scenes/query-minutes-and-artifacts.md +70 -0
  83. package/skills/lark-meeting/scenes/query-note-and-artifacts.md +127 -0
  84. package/skills/lark-minutes/SKILL.md +5 -197
  85. package/skills/lark-note/SKILL.md +5 -84
  86. package/skills/lark-shared/SKILL.md +25 -188
  87. package/skills/lark-shared/references/lark-shared-config-init.md +12 -0
  88. package/skills/lark-shared/references/lark-shared-high-risk-approval.md +38 -0
  89. package/skills/lark-shared/references/lark-shared-identity-and-permissions.md +105 -0
  90. package/skills/lark-shared/references/lark-shared-output-contract.md +17 -0
  91. package/skills/lark-shared/references/lark-shared-update-notice.md +23 -0
  92. package/skills/lark-slides/SKILL.md +56 -54
  93. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
  94. package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
  95. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
  96. package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
  97. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
  98. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
  99. package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
  100. package/skills/lark-slides/references/{lark-slides-update-slide.md → cli/lark-slides-update-slide.md} +21 -4
  101. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
  102. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
  103. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
  104. package/skills/lark-slides/references/iconpark-index.json +5 -41901
  105. package/skills/lark-slides/references/iconpark.md +3 -44
  106. package/skills/lark-slides/references/lark-slides-add-slide.md +3 -90
  107. package/skills/lark-slides/references/lark-slides-create.md +3 -174
  108. package/skills/lark-slides/references/lark-slides-delete-slide.md +3 -63
  109. package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -141
  110. package/skills/lark-slides/references/lark-slides-history.md +3 -130
  111. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -102
  112. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
  113. package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -256
  114. package/skills/lark-slides/references/lark-slides-screenshot.md +3 -113
  115. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
  116. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
  117. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -155
  118. package/skills/lark-slides/references/planning-layer.md +1 -1
  119. package/skills/lark-slides/references/slides_chart_demo.xml +5 -1415
  120. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3512
  121. package/skills/lark-slides/references/troubleshooting.md +3 -60
  122. package/skills/lark-slides/references/validation-checklist.md +3 -154
  123. package/skills/lark-slides/references/workflow/error-handling.md +62 -0
  124. package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
  125. package/skills/lark-slides/references/workflow/template-editing.md +85 -0
  126. package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
  127. package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
  128. package/skills/lark-slides/references/xml/iconpark.md +46 -0
  129. package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
  130. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3601 -0
  131. package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
  132. package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -495
  133. package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
  134. package/skills/lark-slides/scripts/xml_lint.py +2989 -0
  135. package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
  136. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2975
  137. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -4712
  138. package/skills/lark-task/SKILL.md +13 -1
  139. package/skills/lark-task/references/lark-task-create.md +3 -1
  140. package/skills/lark-vc/SKILL.md +5 -195
  141. package/skills/lark-vc-agent/SKILL.md +5 -191
  142. package/skills/lark-wiki/SKILL.md +3 -1
  143. package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
  144. package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
  145. package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
  146. package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
  147. package/skills/lark-workflow-meeting-summary/SKILL.md +20 -13
  148. package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
  149. package/skills/lark-base/references/lark-base-data-query-guide.md +0 -69
  150. package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
  151. package/skills/lark-minutes/references/lark-minutes-detail.md +0 -62
  152. package/skills/lark-minutes/references/lark-minutes-upload.md +0 -104
  153. package/skills/lark-note/references/lark-note-detail.md +0 -26
  154. package/skills/lark-vc/references/lark-vc-detail.md +0 -44
  155. package/skills/lark-vc/references/vc-domain-boundaries.md +0 -196
@@ -15,12 +15,28 @@ Dashboard 是 Base 中的数据可视化看板,可以把表格数据变成**
15
15
  | 你想做什么 | 用这些命令 | 关键文档 |
16
16
  |------|-----------|---------|
17
17
  | 创建/删除/改名称 | `+dashboard-create/delete/update` | 本页下方「仪表盘管理」 |
18
- | 在仪表盘里添加组件 | `+dashboard-block-create` | 先定位 dashboard、表和字段,再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 构造 `data_config` |
19
- | 修改组件 | `+dashboard-block-update` | 先读 block 现状,再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 决定替换哪些顶层 key |
18
+ | 在仪表盘里添加组件 | `+dashboard-block-create` | 先定位 dashboard、表和字段,再读 [Dashboard Block 配置](lark-base-dashboard-block-config.md) 构造 `data_config` |
19
+ | 修改组件 | `+dashboard-block-update` | 先读 block 现状,再读 [Dashboard Block 配置](lark-base-dashboard-block-config.md) 决定替换哪些顶层 key |
20
+ | 创建/更新时指定组件精确位置大小 | `+dashboard-block-create/update --position` | 本页下方「精确布局 --position vs +dashboard-arrange」 |
20
21
  | 查看仪表盘有哪些组件 | `+dashboard-get` 或 `+dashboard-block-list` | 本页下方「查看仪表盘」 |
21
22
  | 读取图表计算结果 | `+dashboard-block-get-data` | 返回图表最终数据协议;需要 block 元数据先用 `+dashboard-block-get` |
22
23
  | 智能重排组件布局 | `+dashboard-arrange` | 用户明确要求重排,或本次会话新建仪表盘的收尾整理;无法指定 `x/y/w/h`、精确位置或尺寸 |
23
24
 
25
+ ## 精确布局 --position vs +dashboard-arrange
26
+
27
+ create/update 可选 `--position`,用 12 列栅格坐标精确指定单个组件的落点与大小:`{"x","y","w","h"}`,`x`/`y` 为左上角坐标(>=0),`w` 为宽度(1..12,且 `x+w<=12`),`h` 为高度(>=1)。它与 `name`/`type`/`data_config` 平级挂在请求体顶层。
28
+
29
+ > [!IMPORTANT]
30
+ > - **四个 key 必须齐全且都是数字**:`position` 按整体提交、不做逐字段合并,所以只传 `{"x":6}` 表达的不是"只挪位置不改大小",而是一个缺了三项的位置。本地会拒绝残缺对象(含显式 `null`)。
31
+ > - 坐标**取值不做本地校验**:越界、负值或重叠坐标会原样发给服务端,由服务端自动重排。调用方仍应优先规划 12 列范围内且不重叠的坐标,避免自动重排改变预期落点。
32
+ > - 不传 `--position`:create 由服务端自动装箱,update 保持当前布局不变。
33
+ > - 只有用户明确给出 `x/y/w/h`、具体行列/顺序、每个组件宽高或可直接换算的尺寸比例时才用 `--position`。"调整布局""美化""撑满""铺满"本身不算精确约束,没有组件级坐标或尺寸时优先用 `+dashboard-arrange` 整盘编排。
34
+ > - 命令成功即视为写入成功,一般无需仅为读回位置再调用 `+dashboard-block-get` / `+dashboard-block-list`;成功响应不代表最终渲染位置已经过读回验证。
35
+
36
+ ## statistics 指标卡数值格式
37
+
38
+ `statistics` 组件可在 create/update 的 `data_config.number_format` 中设置 `formatName` 和 `precision`。create 会校验组件类型和子字段;update 不接收 `--type`,只校验 `number_format` 子字段,再由服务端结合现有 block 类型裁决。枚举、精度范围、更新语义和可复制模板读取 [Dashboard Block 配置](lark-base-dashboard-block-config.md)。
39
+
24
40
  ## 典型场景工作流
25
41
 
26
42
  ### 场景 1:从 0 到 1 创建仪表盘
@@ -30,7 +46,7 @@ Dashboard 是 Base 中的数据可视化看板,可以把表格数据变成**
30
46
  - 聚合方式:创建指标卡或分布图时优先把聚合写进 `data_config`,只有 Top N、字段取值探索、复杂筛选校验或 helper 汇总表场景才先用 `+data-query`。
31
47
  - Dry-run 边界:已按模板构造的简单指标卡、分布图、趋势图不需要逐个 `--dry-run` 后再真实创建;只有在调试 JSON、检查请求体、复杂自造 `data_config` 或处理 API validation 错误时才 dry-run。
32
48
  - 验证方式:创建接口成功返回即表示写入成功。只有结果不确定时才用一次 `+dashboard-get` 或 `+dashboard-block-list` 确认仪表盘和组件存在;不要仅为确认创建而逐组件调用 `+dashboard-block-get-data`。
33
- - 布局方式:`+dashboard-arrange` 仅两种情况使用:① 用户明确要求美化/重排;② 本次会话中从零新建的仪表盘,建完组件后做一次性布局整理。不是创建成功的必要步骤。
49
+ - 布局方式:用户没有给出组件级坐标或尺寸时,创建完成后用一次 `+dashboard-arrange` 整盘编排即可;只有用户明确给出可执行的精确布局约束时才在 create 中带 `--position`,此时通常不再需要 arrange。
34
50
 
35
51
  示例:搭建一个销售数据分析仪表盘
36
52
 
@@ -48,7 +64,7 @@ lark-cli base +field-list --base-token xxx --table-id <table_id>
48
64
 
49
65
  # 第 4 步:顺序创建每个组件(必须串行执行,不能并发)
50
66
  # 重要:创建组件前,先确定 dashboard_id、组件 name/type 和真实表字段
51
- # 再阅读 dashboard-block-data-config.md 了解 data_config 结构、组件类型和 filter 规则
67
+ # 再阅读 lark-base-dashboard-block-config.md 了解 data_config 结构、组件类型和 filter 规则
52
68
 
53
69
  # 第 1 个组件
54
70
  lark-cli base +dashboard-block-create \
@@ -68,9 +84,10 @@ lark-cli base +dashboard-block-create \
68
84
 
69
85
  # 继续创建其他组件...
70
86
 
71
- # 第 5 步:组件创建完成后,使用 arrange 命令智能重排布局(可选但推荐)
87
+ # 第 5 步:组件创建完成后,可按需使用 arrange 智能重排(未使用 --position 时可选)
72
88
  # 默认布局可能不够美观,arrange 会根据组件数量和类型自动优化布局
73
- # 若用户没有要求美化/重排,可先跳过此步骤;这不影响仪表盘和组件是否已创建成功
89
+ # 若任一组件使用了显式 --position,跳过此步骤;除非用户明确同意放弃精确布局
90
+ # 若用户没有要求美化/重排,也可跳过;这不影响仪表盘和组件是否已创建成功
74
91
  lark-cli base +dashboard-arrange \
75
92
  --base-token xxx \
76
93
  --dashboard-id blk_xxx
@@ -93,7 +110,7 @@ lark-cli base +field-list --base-token xxx --table-id <table_id>
93
110
 
94
111
  # 第 4 步:顺序创建每个新组件(必须串行执行,不能并发)
95
112
  # 重要:先确定 dashboard_id、组件 name/type 和真实表字段
96
- # 再阅读 dashboard-block-data-config.md 了解 data_config 结构
113
+ # 再阅读 lark-base-dashboard-block-config.md 了解 data_config 结构
97
114
  lark-cli base +dashboard-block-create \
98
115
  --base-token xxx \
99
116
  --dashboard-id blk_xxx \
@@ -105,7 +122,7 @@ lark-cli base +dashboard-block-create \
105
122
  ### 场景 3:编辑已有组件
106
123
 
107
124
  > [!IMPORTANT]
108
- > `+dashboard-block-update` **不能修改组件的 `type`**(图表类型),只能更新 `name` 和 `data_config`。
125
+ > `+dashboard-block-update` **不能修改组件的 `type`**(图表类型),只能更新 `name`、`data_config` 和可选的 `position`。
109
126
  > 如需更换组件类型,必须先删除再重新创建。
110
127
 
111
128
  ```bash
@@ -127,25 +144,26 @@ lark-cli base +field-list --base-token xxx --table-id <table_id>
127
144
 
128
145
  # 第 5 步:执行更新
129
146
  # 重要:先读取当前 block 的 name/type/data_config
130
- # 再阅读 dashboard-block-data-config.md 了解 data_config 更新规则
147
+ # 再阅读 lark-base-dashboard-block-config.md 了解 data_config 更新规则
131
148
  lark-cli base +dashboard-block-update \
132
149
  --base-token xxx \
133
150
  --dashboard-id blk_xxx \
134
151
  --block-id chtxxxxxxxx \
135
- --data-config '{...}'
152
+ --data-config '{...}' \
153
+ --position '{...}' # 可选,只在需要调整布局时传
136
154
 
137
155
  ```
138
156
 
139
157
  ### 场景 4:重排仪表盘布局
140
158
 
141
- 当用户明确要求对已有仪表盘进行布局重排或美化时使用(对本次会话从零新建的仪表盘,可在建完组件后直接做一次性整理,见场景 1)。
159
+ 当用户要求调整布局、重排、美化、撑满或铺满,但没有给出组件级坐标或尺寸时使用。定位仪表盘后用一次 `+dashboard-arrange` 整盘编排即可(对本次会话从零新建的仪表盘,在建完组件后编排一次)。
142
160
 
143
161
  > [!CAUTION]
144
162
  > - 排列结果是**服务端智能推荐**,不一定完全符合用户预期
145
- > - Dashboard shortcut 无法指定 `x/y/w/h`、精确位置或尺寸(如"第一排放 A""图表撑满整行"),排列逻辑是**自适应**的
163
+ > - `+dashboard-arrange` 无法指定 `x/y/w/h`、精确位置或尺寸,排列逻辑是**自适应**的;只有用户明确给出可执行的组件级坐标、行列或尺寸约束时才改用 `--position`
146
164
  > - **不建议**在已有仪表盘上自动调用,除非用户明确要求
147
- > - 用户只要求一般性重排/美化时,可执行一次 `+dashboard-arrange`;用户要求精确结果时,先说明限制并询问是否接受自适应布局,接受后才执行,不能静默替代或声称精确满足
148
- > - 执行一次 `+dashboard-arrange` 后即停止;不要继续探测 raw `lark-cli api`、源码或未公开布局参数
165
+ > - 用户只要求一般性重排、美化、撑满或铺满时,用 `+dashboard-arrange` 整盘编排
166
+ > - 编排结果不理想时,可结合用户反馈再调整;不要为了凑效果去探测 raw `lark-cli api`、源码或未公开布局参数
149
167
 
150
168
  ```bash
151
169
  # 第 1 步:列出仪表盘,定位到目标仪表盘
@@ -169,7 +187,7 @@ lark-cli base +dashboard-arrange \
169
187
 
170
188
  1. 图表或指标卡:使用方式 D 读取计算结果。
171
189
  2. `text`:使用方式 C,正文位于 `data_config.text`;text 没有计算结果,但属于完整仪表盘内容。
172
- 3. get-data 返回不支持的图表类型:先用方式 C 读取真实 `data_config`,确认 `table_name`、维度、指标、聚合与筛选,再按 [数据分析 SOP](lark-base-data-analysis-sop.md) 使用 `+data-query` 重建同口径结果。字段必须来自真实配置和表结构,不得猜测;无法等价重建时明确报告限制,不能静默省略该 block。
190
+ 3. get-data 返回不支持的图表类型:先用方式 C 读取真实 `data_config`,确认 `table_name`、维度、指标、聚合与筛选,再按 [Record 查询与分析 SOP](lark-base-record-query-and-analysis-sop.md) 使用 `+data-query` 重建同口径结果。字段必须来自真实配置和表结构,不得猜测;无法等价重建时明确报告限制,不能静默省略该 block。
173
191
 
174
192
  ```bash
175
193
  # 第 1 步:列出仪表盘,定位到当前仪表盘
@@ -209,14 +227,14 @@ lark-cli base +dashboard-block-get-data --base-token xxx --block-id chtxxxxxxxx
209
227
  | 单个关键指标 | statistics | 指标卡组件 |
210
228
  | 富文本说明/标题/注释 | text | 文本组件(支持 Markdown) |
211
229
 
212
- 详细组件类型和 data_config 完整规则:[dashboard-block-data-config.md](dashboard-block-data-config.md)
230
+ 详细组件类型和 data_config 完整规则:[Dashboard Block 配置](lark-base-dashboard-block-config.md)
213
231
 
214
232
  ## 常见问题
215
233
 
216
234
  **Q: 创建组件的命令和 data_config 怎么写?**
217
235
  A:
218
236
  1. 先确定 `dashboard_id`、组件 `name`、组件 `type` 和真实表字段
219
- 2. 再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 了解:
237
+ 2. 再读 [Dashboard Block 配置](lark-base-dashboard-block-config.md) 了解:
220
238
  - 全部组件类型的可复制模板
221
239
  - filter 筛选条件格式
222
240
  - 字段类型与操作符对应表
@@ -232,17 +250,17 @@ A: 常见原因:
232
250
  A: 不可以,必须串行执行。等上一个 `+dashboard-block-create` 完成后再执行下一个。
233
251
 
234
252
  **Q: 组件的 `type` 创建后能改吗?**
235
- A: 不能。`+dashboard-block-update` 只能修改 `name` 和 `data_config`,不能修改 `type`。
253
+ A: 不能。`+dashboard-block-update` 只能修改 `name`、`data_config` 和 `position`,不能修改 `type`。
236
254
 
237
255
  **Q: 更新组件的命令和 data_config 怎么写?**
238
256
  A:
239
257
  1. 先读取当前 block,确认 `block_id`、当前 `type` 和已有 `data_config`
240
- 2. 再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 了解 data_config 结构
258
+ 2. 再读 [Dashboard Block 配置](lark-base-dashboard-block-config.md) 了解 data_config 结构
241
259
 
242
260
  **data_config 更新策略(顶层 key merge)**:
243
261
  - 只传入需要修改的顶层字段(如 `series`、`filter`)
244
262
  - 未传的顶层字段(如 `group_by`)自动保留原值
245
- - 但每个传入的字段内部是**全量替换**(如传新 `filter` 会完整覆盖旧 `filter`)
263
+ - 但每个传入的字段内部通常是**全量替换**(如传新 `filter` 会完整覆盖旧 `filter`);`number_format` 例外,按子字段合并,见 [Dashboard Block 配置](lark-base-dashboard-block-config.md) 的 number_format 小节
246
264
 
247
265
  **Q: 查看已有组件有什么用?**
248
266
  A: 在「添加新组件」或「编辑组件」前查看已有组件可以:
@@ -0,0 +1,93 @@
1
+ # Base NDJSON:pandas 示例
2
+
3
+ 仅在统一数据分析 SOP 已选择 pandas 后读取。本页不重复 Base 的粒度与关系规则,只展示对应实现。
4
+
5
+ 示例假设 `records.ndjson` 包含 `record_id`、`日期`、`状态`、`金额`、`负责人`、`标签`、`关联客户`;`customers.ndjson` 包含 `record_id`、`客户名称`。多值列使用统一数据分析 SOP 定义的数组结构。
6
+
7
+ ## 加载与日期解析
8
+
9
+ ```python
10
+ import pandas as pd
11
+
12
+ records = pd.read_json("records.ndjson", lines=True)
13
+ raw_dates = records["日期"].astype("string")
14
+ records["日期_local"] = pd.to_datetime(
15
+ raw_dates.str.slice(0, 10), format="%Y-%m-%d", errors="coerce"
16
+ )
17
+ records["日期_instant"] = pd.to_datetime(
18
+ raw_dates, format="ISO8601", utc=True, errors="coerce"
19
+ )
20
+ ```
21
+
22
+ 按来源 Base 的日、周、月分组使用 `日期_local`;计算真实时长、排序或跨时区比较使用 `日期_instant`。实际任务只需构造所需的一列。
23
+
24
+ ## 集合谓词:保持 record 粒度
25
+
26
+ 筛选“状态”包含“进行中”的记录,并在 record 粒度汇总:
27
+
28
+ ```python
29
+ active = records[records["状态"].map(lambda values: "进行中" in values)]
30
+ summary = {
31
+ "records_count": len(active),
32
+ "amount_sum": active["金额"].sum(min_count=1),
33
+ }
34
+ ```
35
+
36
+ ## 单数组展开:切换到人员粒度
37
+
38
+ ```python
39
+ owners = records[["record_id", "负责人"]].explode("负责人", ignore_index=True)
40
+ owners = owners[owners["负责人"].notna()].assign(
41
+ user_id=lambda df: df["负责人"].map(lambda user: user["id"]),
42
+ user_name=lambda df: df["负责人"].map(lambda user: user["name"]),
43
+ )
44
+ by_owner = (
45
+ owners.groupby(["user_id", "user_name"], as_index=False)
46
+ .agg(records_count=("record_id", "nunique"))
47
+ .sort_values("records_count", ascending=False)
48
+ )
49
+ ```
50
+
51
+ ## Link JOIN:先建立边表
52
+
53
+ ```python
54
+ edges = (
55
+ records[["record_id", "关联客户"]]
56
+ .rename(columns={"record_id": "source_record_id"})
57
+ .explode("关联客户", ignore_index=True)
58
+ )
59
+ edges = edges[edges["关联客户"].notna()].assign(
60
+ target_record_id=lambda df: df["关联客户"].map(lambda link: link["id"])
61
+ )[["source_record_id", "target_record_id"]]
62
+
63
+ customers = pd.read_json("customers.ndjson", lines=True).rename(
64
+ columns={"record_id": "target_record_id"}
65
+ )
66
+ joined = edges.merge(
67
+ customers[["target_record_id", "客户名称"]],
68
+ on="target_record_id",
69
+ how="left",
70
+ )
71
+ ```
72
+
73
+ ## 多数组共现:显式生成行内笛卡尔积
74
+
75
+ 连续两次 `explode` 表示同一 source record 内的 `负责人 × 标签`:
76
+
77
+ ```python
78
+ pairs = (
79
+ records[["record_id", "负责人", "标签"]]
80
+ .explode("负责人", ignore_index=True)
81
+ .explode("标签", ignore_index=True)
82
+ .dropna(subset=["负责人", "标签"])
83
+ .assign(
84
+ user_id=lambda df: df["负责人"].map(lambda user: user["id"]),
85
+ user_name=lambda df: df["负责人"].map(lambda user: user["name"]),
86
+ )
87
+ )
88
+ cooccurrence = (
89
+ pairs.groupby(["user_id", "user_name", "标签"], as_index=False)
90
+ .agg(records_count=("record_id", "nunique"))
91
+ .sort_values("records_count", ascending=False)
92
+ )
93
+ ```
@@ -0,0 +1,120 @@
1
+ # Base NDJSON:Python 标准库示例
2
+
3
+ 仅在统一数据分析 SOP 已选择 Python 标准库后读取。本页不重复 Base 的粒度与关系规则,只展示对应实现。
4
+
5
+ 示例假设 `records.ndjson` 包含 `record_id`、`日期`、`状态`、`金额`、`负责人`、`标签`、`关联客户`;`customers.ndjson` 包含 `record_id`、`客户名称`。多值列使用统一数据分析 SOP 定义的数组结构。
6
+
7
+ ## 加载与日期解析
8
+
9
+ NDJSON 每行是一条独立 JSON record;按行读取即可,不要先把文件整体载入字符串。
10
+
11
+ ```python
12
+ import json
13
+ from datetime import date, datetime
14
+
15
+
16
+ def read_ndjson(path):
17
+ with open(path, encoding="utf-8") as stream:
18
+ for line in stream:
19
+ if line.strip():
20
+ yield json.loads(line)
21
+
22
+
23
+ records = list(read_ndjson("records.ndjson"))
24
+ for record in records:
25
+ raw_date = record["日期"]
26
+ record["日期_local"] = date.fromisoformat(raw_date[:10]) if raw_date else None
27
+ record["日期_instant"] = datetime.fromisoformat(raw_date) if raw_date else None
28
+ ```
29
+
30
+ 按来源 Base 的日、周、月分组使用 `日期_local`;计算真实时长、排序或跨时区比较使用 `日期_instant`。实际任务只需构造所需的一项。
31
+
32
+ ## 集合谓词:保持 record 粒度
33
+
34
+ 筛选“状态”包含“进行中”的记录,并在 record 粒度汇总:
35
+
36
+ ```python
37
+ active = [record for record in records if "进行中" in record["状态"]]
38
+ amounts = [record["金额"] for record in active if record["金额"] is not None]
39
+ summary = {
40
+ "records_count": len(active),
41
+ "amount_sum": sum(amounts) if amounts else None,
42
+ }
43
+ ```
44
+
45
+ ## 单数组展开:切换到人员粒度
46
+
47
+ 用嵌套循环表达 lateral expansion;按人员 `id` 聚合,`name` 只用于展示。
48
+
49
+ ```python
50
+ from collections import defaultdict
51
+
52
+ record_ids_by_owner = defaultdict(set)
53
+ owner_names = {}
54
+ for record in records:
55
+ for owner in record["负责人"]:
56
+ record_ids_by_owner[owner["id"]].add(record["record_id"])
57
+ owner_names[owner["id"]] = owner["name"]
58
+
59
+ by_owner = sorted(
60
+ (
61
+ {
62
+ "user_id": user_id,
63
+ "user_name": owner_names[user_id],
64
+ "records_count": len(record_ids),
65
+ }
66
+ for user_id, record_ids in record_ids_by_owner.items()
67
+ ),
68
+ key=lambda row: (-row["records_count"], row["user_id"]),
69
+ )
70
+ ```
71
+
72
+ ## Link JOIN:先建立目标表索引
73
+
74
+ 目标表的 `record_id` 是唯一主键,可直接建立哈希索引;Link 的 `id` 用于索引查找。
75
+
76
+ ```python
77
+ customers = {
78
+ customer["record_id"]: customer
79
+ for customer in read_ndjson("customers.ndjson")
80
+ }
81
+
82
+ joined = []
83
+ for record in records:
84
+ for link in record["关联客户"]:
85
+ customer = customers.get(link["id"])
86
+ joined.append(
87
+ {
88
+ "source_record_id": record["record_id"],
89
+ "target_record_id": link["id"],
90
+ "客户名称": customer["客户名称"] if customer else None,
91
+ }
92
+ )
93
+ ```
94
+
95
+ ## 多数组共现:显式生成行内笛卡尔积
96
+
97
+ 两层嵌套循环表示同一 source record 内的 `负责人 × 标签`:
98
+
99
+ ```python
100
+ record_ids_by_pair = defaultdict(set)
101
+ owner_names = {}
102
+ for record in records:
103
+ for owner in record["负责人"]:
104
+ owner_names[owner["id"]] = owner["name"]
105
+ for tag in record["标签"]:
106
+ record_ids_by_pair[(owner["id"], tag)].add(record["record_id"])
107
+
108
+ cooccurrence = sorted(
109
+ (
110
+ {
111
+ "user_id": user_id,
112
+ "user_name": owner_names[user_id],
113
+ "标签": tag,
114
+ "records_count": len(record_ids),
115
+ }
116
+ for (user_id, tag), record_ids in record_ids_by_pair.items()
117
+ ),
118
+ key=lambda row: (-row["records_count"], row["user_id"], row["标签"]),
119
+ )
120
+ ```
@@ -1,11 +1,9 @@
1
1
 
2
- # Base data-query DSL SSOT
2
+ # Base data-query DSL reference
3
3
 
4
- > **入口指南**: [lark-base-data-query-guide.md](lark-base-data-query-guide.md) | **前置条件**: 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
4
+ > **前置路由**: [Record 查询与分析 SOP](lark-base-record-query-and-analysis-sop.md) | **认证或授权问题**: [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md)
5
5
 
6
- 本文档是 `+data-query` JSON DSL 的单一事实来源(SSOT),用于说明完整字段、操作符、限制、返回和错误恢复。常用 fewshot 与命令选择先读 [lark-base-data-query-guide.md](lark-base-data-query-guide.md)。
7
-
8
- 查询类任务还必须先遵守 [`lark-base-data-analysis-sop.md`](lark-base-data-analysis-sop.md)。`+data-query` 适合让筛选、分组、聚合、排序和 TopN 在 Base 云端查询服务中执行;不要用默认分页的 `+record-list` 或本地 `jq` 替代聚合查询。
6
+ 本文档合并常用 fewshot 与完整 DSL 协议。只有 [Record 查询与分析 SOP](lark-base-record-query-and-analysis-sop.md) 的 Cloud 路径选定 `+data-query` 后才读取,并优先定位与当前查询有关的示例、字段或错误协议。
9
7
 
10
8
  ## 限制
11
9
 
@@ -432,12 +430,12 @@ CLI 输出标准信封 `{ok, identity, data}`(失败时为 `{ok:false, identit
432
430
 
433
431
  1. 用 `+data-query` 在 Base 云端查询服务中完成全局筛选、分组、聚合、排序和 TopN,得到业务 key、分组值或候选字段组合。
434
432
  2. 如果已经拿到候选记录的 `record_id`,用 `+record-get` 读取逐条记录字段。
435
- 3. 如果拿到的是结构化业务 key(例如编号、状态、日期、金额等),用 `+record-list --filter-json` 做精确过滤后读取;不要用 `+record-search` 代替结构化条件。
433
+ 3. 如果拿到的是结构化业务 key(例如编号、状态、日期、金额等),用 `+record-list --filter-json` 做精确过滤后读取;`+record-search` 用于文本展示值关键词。
436
434
  4. 只有候选条件本身是文本展示值关键词时,才使用 `+record-search`,并用 `search_fields` 限定范围、`select_fields` 做投影。
437
435
  5. 若候选记录包含 link 字段,提取关联 `record_id` 后到关联表用 `+record-get` 批量读取展示字段。
438
- 6. 最终回答业务字段,不要把内部 `record_id` 当作用户可读答案。
436
+ 6. 最终回答展示真实业务字段;内部 `record_id` 用于连接或定位。
439
437
 
440
- 不要把 `data-query pagination.limit` 理解为分页扫描;它只限制 Base 云端查询服务返回的聚合结果行数,不支持 offset。需要全量原始记录导出时回到 data analysis SOP 的 `+record-list` 分页规则。
438
+ 不要把 `data-query pagination.limit` 理解为分页扫描;它只限制 Base 云端查询服务返回的聚合结果行数,不支持 offset。需要逐条原始记录时按 Cloud SOP 的 `+record-list` / `+record-search` 回查规则处理。
441
439
 
442
440
  ## 坑点
443
441
 
@@ -450,12 +448,11 @@ CLI 输出标准信封 `{ok, identity, data}`(失败时为 `{ok:false, identit
450
448
  - ⚠️ **数据表标识 `tableId` vs `tableName`**:datasource 中可以用 `tableId`(如 `tblXXX`)或 `tableName`(数据表的用户自定义显示名称),二选一,不要混用
451
449
  - ⚠️ **`pagination.limit` 最大 5000**:超过会报错,且不支持 offset,只支持 limit
452
450
  - ⚠️ **所有 alias 必须全局唯一**:dimensions 和 measures 之间的 alias 也不能重名
453
- - ⚠️ **不要用本地分页结果替代 data-query**:凡是全局计数、分组、聚合、排序 TopN,优先让 `+data-query` 在 Base 云端查询服务中执行;默认页 `+record-list` 后本地统计只能得到已读取范围内的结果
454
451
 
455
452
  ## 参考
456
453
 
457
454
  - [lark-base](../SKILL.md) — 多维表格全部命令
458
455
  - [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
459
- - [lark-base-data-analysis-sop.md](lark-base-data-analysis-sop.md) — 查询范围、选路、下推、分页、`+record-list` / `+record-search` 回查和关系查询 SOP
456
+ - [Cloud SOP](lark-base-record-query-and-analysis-cloud-sop.md) — Cloud 路径的查询范围、下推、分页、`+record-list` / `+record-search` 回查和关系查询
460
457
  - [lark-base-cell-value.md](lark-base-cell-value.md) — CellValue 格式规范
461
- - [lark-base-field-json.md](lark-base-field-json.md) — 字段类型与 JSON 结构
458
+ - [Field Schema](lark-base-field-schema.md) — 字段类型与 JSON 结构
@@ -2,15 +2,9 @@
2
2
 
3
3
  > **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
4
4
 
5
- 创建一个或多个字段;同一表的多个字段默认使用一次 JSON 数组输入。预计串行运行时间超过 caller/tool timeout 时按时间预算拆分,不按固定条数切块。
5
+ 创建一个或多个字段;同一表的多个字段优先使用一次 JSON 数组输入。
6
6
 
7
- ## Agent 最小工作流
8
-
9
- 1. 先判断是不是 `formula` / `lookup`。
10
- 2. 如果是:先读对应 guide。
11
- 3. 没读 guide 前,不要直接创建 formula / lookup 字段。
12
- 4. 读完 guide 后,再构造 `--json` 并创建字段。
13
- 5. 如果是跨表 formula / lookup,再补查**目标表**的结构。
7
+ `formula` / `lookup` 创建前读取对应 guide;涉及跨表引用时同时读取目标表结构。
14
8
 
15
9
  ## 推荐命令
16
10
 
@@ -25,11 +19,6 @@ lark-cli base +field-create \
25
19
  --table-id <table_id> \
26
20
  --json '{"name":"状态","type":"select","multiple":false,"default_value":["Todo"],"options":[{"name":"Todo","hue":"Blue","lightness":"Lighter"},{"name":"Done","hue":"Green","lightness":"Light"}]}'
27
21
 
28
- lark-cli base +field-create \
29
- --base-token <base_token> \
30
- --table-id <table_id> \
31
- --json '{"name":"负责人","type":"user","multiple":false,"default_value":[{"$slot":"current_user"}],"description":"用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"}'
32
-
33
22
  # 多个字段复用相同字段 JSON 形状,一次传非空数组
34
23
  lark-cli base +field-create \
35
24
  --base-token <base_token> \
@@ -56,10 +45,10 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
56
45
  ## JSON 值规范
57
46
 
58
47
  - `--json` 接受单个字段 **JSON 对象**,也接受多个字段对象组成的非空数组;不要再套 `fields` 等外层对象。
59
- - 数组按顺序创建字段,遇到首个失败即停止且不自动回滚已创建字段;需要原子写入时不要假设数组具备事务语义。
48
+ - 数组按顺序创建字段,遇到首个失败即停止且不自动回滚;部分失败时保留 `items` 中的 `created` 项,按 `hint` 修正后只提交 `failed` 和 `not_attempted` 项,并保持依赖顺序。
60
49
  - 每个字段对象最少包含:`name`、`type`。
61
50
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接,如 `协作约定可参考[团队字段约定](https://example.com/field-spec)`。
62
- - 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;`datetime` / `user` 的动态填充用 `$slot`。完整规则见 [lark-base-field-json.md](lark-base-field-json.md)。
51
+ - 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;`datetime` / `user` 的动态填充用 `$slot`。完整规则见 [Field Schema](lark-base-field-schema.md)。
63
52
  - `type` 不同,必填子字段不同:
64
53
  - `select`:`multiple` 控制是否多选,`options` 定义静态选项,`dynamic_options_source` 定义动态选项来源。静态与动态选项配置二选一,不能同时传。
65
54
  - `link`:必须有 `link_table`,可选 `bidirectional`、`bidirectional_link_field_name`。
@@ -81,40 +70,8 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
81
70
  }
82
71
  ```
83
72
 
84
- **字段说明示例**
85
-
86
- ```json
87
- {
88
- "name": "负责人",
89
- "type": "user",
90
- "multiple": false,
91
- "description": "用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"
92
- }
93
- ```
94
-
95
- ## 返回重点
96
-
97
- - 单字段返回 `field` 和 `created: true`;多字段完整返回服务端 `fields`、`total` 和 `created: true`。
98
- - 大数组成功时若不需要逐字段 ID,可追加 `--jq 'if .ok then (.data | {created,total,field_get_recommended,next_step,verification_hint}) else . end'` 控制 stdout 大小;失败分支仍保留完整部分失败明细。需要逐字段 ID 时不要使用该投影。
99
- - 数组部分失败返回 `ok:false`、`summary` 和有序 `items`,保留已创建字段及 ID、失败项和未执行项。`failed` 项保留 `type`、`subtype`、`code`、`hint`、`retryable`、`log_id`、`troubleshooter`,以及原 typed error 已有的扩展字段,例如权限错误的 `missing_scopes`、`identity`、`console_url` 或安全策略错误的 `challenge_url`;扩展键与部分失败账本的 `index`、`status`、`field`、`error` 冲突时,以带 `error_` 前缀的无冲突别名输出(例如 `field` → `error_field`)。
100
- - 部分失败统一返回 `next_step:"inspect_items"`;`field_get_recommended` 仅表示已创建字段是否建议读回。`retryable:true` 只表示该 `failed` 项可原样自动重试;否则先按该项 `hint` 完成授权或修正输入,再重新提交该项。`not_attempted` 项应单独继续。
101
- - 调用方超时且未收到命令终态输出时,不要重投整个数组;先按本次提交的字段名定向读回,再只提交缺失项。没有写前快照时,读回命中的同名项只能标记为 `ambiguous`,不得计作本轮 `created`。
102
- - 完整成功且返回 `field_get_recommended:false`、`next_step:"done"` 时直接结束;除非用户明确要求读回或额外属性,否则不要再执行 `+field-list/get`。确需核验时用 `--jq` 过滤 `+field-list`,不要把全部字段打印进上下文。
103
- - `field_get_recommended:true` 表示完成当前 `next_step` 后按 `verification_hint` 读回;完整成功时 `next_step:"field_get"` 表示可直接读回。`formula`、`lookup`、`link`、`auto_number` 等字段更适合读回确认服务端最终结构。
104
-
105
- ## 工作流
106
-
107
- 1. formula / lookup 字段必须先阅读对应指南;没读之前不要直接创建。
108
- 2. 创建简单字段时,优先相信命令返回;只有用户要求精确核对额外属性,或返回建议读回时,才继续执行 `+field-get`。
109
-
110
- ## 坑点
111
-
112
- - ⚠️ 这是写入操作,执行前必须确认。
113
- - ⚠️ 当 `type` 是 `formula` 或 `lookup` 时,先读对应 guide,再创建。
114
- - ⚠️ 不要把“每次创建后都 `+field-get`”当作固定流程;按返回里的 `field_get_recommended` 和 `next_step` 决定是否读回。
115
-
116
73
  ## 参考
117
74
 
118
- - [lark-base-field-json.md](lark-base-field-json.md) — 字段 JSON 规范(推荐)
119
- - [formula-field-guide.md](formula-field-guide.md) — formula 指南(创建公式必读)
120
- - [lookup-field-guide.md](lookup-field-guide.md) — lookup 指南(创建查找引用必读)
75
+ - [Field Schema](lark-base-field-schema.md) — 字段 JSON 规范(推荐)
76
+ - [Formula Field](lark-base-field-formula.md) — 创建公式必读
77
+ - [Lookup Field](lark-base-field-lookup.md) — 创建查找引用必读
@@ -1,4 +1,4 @@
1
- # Base Formula Writing Guide
1
+ # Base Formula Field
2
2
 
3
3
  ## Mandatory Read Acknowledgement
4
4
 
@@ -1,4 +1,4 @@
1
- # Base Lookup Field Configuration Guide
1
+ # Base Lookup Field
2
2
 
3
3
  ## Mandatory Read Acknowledgement
4
4