@amaster.ai/pi-lark 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +41 -6
  3. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
  4. package/skills/lark-apps/references/lark-apps-create.md +6 -3
  5. package/skills/lark-apps/references/lark-apps-db.md +130 -2
  6. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  9. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  10. package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
  11. package/skills/lark-base/SKILL.md +155 -159
  12. package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
  13. package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
  14. package/skills/lark-base/references/lark-base-app.md +225 -0
  15. package/skills/lark-base/references/lark-base-cell-value.md +26 -19
  16. package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +37 -5
  17. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +18 -2
  18. package/skills/lark-base/references/lark-base-dashboard.md +25 -12
  19. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
  20. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
  21. package/skills/lark-base/references/lark-base-data-query.md +8 -11
  22. package/skills/lark-base/references/lark-base-field-create.md +13 -45
  23. package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
  24. package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
  25. package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +18 -100
  26. package/skills/lark-base/references/lark-base-field-update.md +13 -51
  27. package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
  28. package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
  29. package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
  30. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
  31. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
  32. package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
  33. package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
  34. package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
  35. package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
  36. package/skills/lark-calendar/SKILL.md +3 -1
  37. package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
  38. package/skills/lark-doc/SKILL.md +26 -61
  39. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  40. package/skills/lark-doc/references/genres/data-report.md +32 -0
  41. package/skills/lark-doc/references/genres/email.md +38 -0
  42. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  43. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  44. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  45. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  46. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  47. package/skills/lark-doc/references/genres/prd.md +26 -0
  48. package/skills/lark-doc/references/genres/proposal.md +24 -0
  49. package/skills/lark-doc/references/genres/research-report.md +32 -0
  50. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  51. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  52. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  53. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  54. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  55. package/skills/lark-doc/references/genres/route-media.md +36 -0
  56. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  57. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  58. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  59. package/skills/lark-doc/references/genres/route-report.md +10 -0
  60. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  61. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  62. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  63. package/skills/lark-doc/references/genres/wechat.md +39 -0
  64. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  65. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  66. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  67. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  68. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  69. package/skills/lark-doc/references/lark-doc-fetch.md +80 -92
  70. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  71. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  72. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  73. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  74. package/skills/lark-doc/references/lark-doc-update.md +73 -221
  75. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  76. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  77. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  78. package/skills/lark-drive/SKILL.md +11 -7
  79. package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
  80. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  81. package/skills/lark-drive/references/lark-drive-download.md +29 -2
  82. package/skills/lark-drive/references/lark-drive-export.md +4 -0
  83. package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
  84. package/skills/lark-drive/references/lark-drive-preview.md +21 -2
  85. package/skills/lark-drive/references/lark-drive-push.md +5 -1
  86. package/skills/lark-drive/references/lark-drive-search.md +2 -0
  87. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  88. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  89. package/skills/lark-event/SKILL.md +7 -4
  90. package/skills/lark-event/references/lark-event-vc.md +8 -2
  91. package/skills/lark-im/SKILL.md +14 -9
  92. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  93. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  94. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  95. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  96. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  97. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  98. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  99. package/skills/lark-im/references/lark-im-flag-list.md +2 -2
  100. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  101. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  102. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  103. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  104. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  105. package/skills/lark-minutes/SKILL.md +12 -6
  106. package/skills/lark-minutes/references/lark-minutes-apply-permission.md +95 -0
  107. package/skills/lark-minutes/references/lark-minutes-detail.md +7 -6
  108. package/skills/lark-minutes/references/lark-minutes-download.md +4 -2
  109. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  110. package/skills/lark-note/SKILL.md +13 -9
  111. package/skills/lark-note/references/lark-note-detail.md +5 -2
  112. package/skills/lark-note/references/lark-note-transcript.md +2 -0
  113. package/skills/lark-shared/SKILL.md +39 -3
  114. package/skills/lark-sheets/SKILL.md +83 -82
  115. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  116. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  117. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  118. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  119. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  120. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  121. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  122. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  123. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  124. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  125. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  126. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  127. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  128. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  129. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  130. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  131. package/skills/lark-slides/SKILL.md +64 -81
  132. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
  133. package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
  134. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
  135. package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
  136. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
  137. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
  138. package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
  139. package/skills/lark-slides/references/cli/lark-slides-update-slide.md +163 -0
  140. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
  141. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
  142. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
  143. package/skills/lark-slides/references/iconpark-index.json +5 -41901
  144. package/skills/lark-slides/references/iconpark.md +3 -44
  145. package/skills/lark-slides/references/lark-slides-add-slide.md +5 -0
  146. package/skills/lark-slides/references/lark-slides-create.md +3 -162
  147. package/skills/lark-slides/references/lark-slides-delete-slide.md +5 -0
  148. package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -142
  149. package/skills/lark-slides/references/lark-slides-history.md +3 -130
  150. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -124
  151. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
  152. package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -235
  153. package/skills/lark-slides/references/lark-slides-screenshot.md +3 -95
  154. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
  155. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
  156. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -132
  157. package/skills/lark-slides/references/planning-layer.md +1 -1
  158. package/skills/lark-slides/references/slides_chart_demo.xml +5 -1416
  159. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3468
  160. package/skills/lark-slides/references/troubleshooting.md +3 -61
  161. package/skills/lark-slides/references/validation-checklist.md +3 -154
  162. package/skills/lark-slides/references/workflow/error-handling.md +62 -0
  163. package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
  164. package/skills/lark-slides/references/workflow/template-editing.md +85 -0
  165. package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
  166. package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
  167. package/skills/lark-slides/references/xml/iconpark.md +46 -0
  168. package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
  169. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3514 -0
  170. package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
  171. package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -483
  172. package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
  173. package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
  174. package/skills/lark-slides/scripts/xml_lint.py +2989 -0
  175. package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
  176. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2691
  177. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -3788
  178. package/skills/lark-task/SKILL.md +12 -0
  179. package/skills/lark-task/references/lark-task-create.md +3 -1
  180. package/skills/lark-vc/SKILL.md +15 -5
  181. package/skills/lark-vc/references/lark-vc-detail.md +11 -6
  182. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-vc/references/lark-vc-meeting-events.md} +121 -20
  183. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-vc/references/lark-vc-meeting-list-active.md} +2 -2
  184. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-vc/references/lark-vc-meeting-message-send.md} +3 -3
  185. package/skills/lark-vc/references/lark-vc-recording.md +8 -6
  186. package/skills/lark-vc/references/vc-domain-boundaries.md +8 -1
  187. package/skills/lark-vc-agent/SKILL.md +24 -9
  188. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +2 -2
  189. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +2 -2
  190. package/skills/lark-whiteboard/SKILL.md +15 -8
  191. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  192. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  193. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  194. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  195. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  196. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  197. package/skills/lark-whiteboard/routes/svg.md +3 -1
  198. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  199. package/skills/lark-wiki/SKILL.md +8 -4
  200. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  201. package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
  202. package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
  203. package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
  204. package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
  205. package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
  206. package/skills/lark-base/references/lark-base-data-query-guide.md +0 -61
  207. package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
  208. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  209. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  210. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  211. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  212. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  213. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  214. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
  215. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
@@ -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
- 创建一个字段。
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,10 +19,11 @@ 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
 
22
+ # 多个字段复用相同字段 JSON 形状,一次传非空数组
28
23
  lark-cli base +field-create \
29
24
  --base-token <base_token> \
30
25
  --table-id <table_id> \
31
- --json '{"name":"负责人","type":"user","multiple":false,"default_value":[{"$slot":"current_user"}],"description":"用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"}'
26
+ --json '[{"name":"备注","type":"text"},{"name":"优先级","type":"select","multiple":false,"options":[{"name":"高"},{"name":"低"}]}]'
32
27
  ```
33
28
 
34
29
  ## 参数
@@ -37,7 +32,8 @@ lark-cli base +field-create \
37
32
  |------|------|------|
38
33
  | `--base-token <token>` | 是 | Base Token |
39
34
  | `--table-id <id_or_name>` | 是 | 表 ID 或表名 |
40
- | `--json <body>` | 是 | 字段属性 JSON 对象 |
35
+ | `--json <body>` | 是 | 单个字段 JSON 对象,或多个字段对象组成的非空数组 |
36
+
41
37
  ## API 入参详情
42
38
 
43
39
  **HTTP 方法和路径:**
@@ -48,10 +44,11 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
48
44
 
49
45
  ## JSON 值规范
50
46
 
51
- - `--json` 必须是 **JSON 对象**,顶层直接传字段定义,不要再套一层。
52
- - 顶层最少包含:`name`、`type`。
47
+ - `--json` 接受单个字段 **JSON 对象**,也接受多个字段对象组成的非空数组;不要再套 `fields` 等外层对象。
48
+ - 数组按顺序创建字段,遇到首个失败即停止且不自动回滚;部分失败时保留 `items` 中的 `created` 项,按 `hint` 修正后只提交 `failed` 和 `not_attempted` 项,并保持依赖顺序。
49
+ - 每个字段对象最少包含:`name`、`type`。
53
50
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接,如 `协作约定可参考[团队字段约定](https://example.com/field-spec)`。
54
- - 需要字段默认值时传 `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)。
55
52
  - `type` 不同,必填子字段不同:
56
53
  - `select`:`multiple` 控制是否多选,`options` 定义静态选项,`dynamic_options_source` 定义动态选项来源。静态与动态选项配置二选一,不能同时传。
57
54
  - `link`:必须有 `link_table`,可选 `bidirectional`、`bidirectional_link_field_name`。
@@ -73,37 +70,8 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
73
70
  }
74
71
  ```
75
72
 
76
- **字段说明示例**
77
-
78
- ```json
79
- {
80
- "name": "负责人",
81
- "type": "user",
82
- "multiple": false,
83
- "description": "用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"
84
- }
85
- ```
86
-
87
- ## 返回重点
88
-
89
- - 返回 `field` 和 `created: true`。
90
- - 如果返回 `field_get_recommended:false` 且 `next_step:"done"`,表示本次是简单字段创建,通常不需要立刻执行 `+field-get`。
91
- - 如果返回 `field_get_recommended:true` 或 `next_step:"field_get"`,按 `verification_hint` 读回字段;`formula`、`lookup`、`link`、`auto_number` 等计算、关联或生成型字段更适合读回确认服务端最终结构。
92
-
93
- ## 工作流
94
-
95
-
96
- 1. formula / lookup 字段必须先阅读对应指南;没读之前不要直接创建。
97
- 2. 创建简单字段时,优先相信命令返回;只有用户要求精确核对额外属性,或返回建议读回时,才继续执行 `+field-get`。
98
-
99
- ## 坑点
100
-
101
- - ⚠️ 这是写入操作,执行前必须确认。
102
- - ⚠️ 当 `type` 是 `formula` 或 `lookup` 时,先读对应 guide,再创建。
103
- - ⚠️ 不要把“每次创建后都 `+field-get`”当作固定流程;按返回里的 `field_get_recommended` 和 `next_step` 决定是否读回。
104
-
105
73
  ## 参考
106
74
 
107
- - [lark-base-field-json.md](lark-base-field-json.md) — 字段 JSON 规范(推荐)
108
- - [formula-field-guide.md](formula-field-guide.md) — formula 指南(创建公式必读)
109
- - [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
 
@@ -1,4 +1,4 @@
1
- # Base field JSON SSOT
1
+ # Base Field Schema
2
2
 
3
3
  > 适用命令:`lark-cli base +field-create`、`lark-cli base +field-update`
4
4
 
@@ -6,12 +6,13 @@
6
6
 
7
7
  ## 1. 顶层规则(必须遵守)
8
8
 
9
- - `--json` 必须是 JSON 对象。
10
- - 顶层统一使用:`type` + `name` + 类型特有字段。
9
+ - 单个字段定义始终是 JSON 对象,每个字段对象统一使用:`type` + `name` + 类型特有字段。
10
+ - `+field-create --json` 接受一个字段对象或非空字段对象数组。
11
+ - `+field-update --json` 只接受一个字段对象。
11
12
  - 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
12
- - 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null`;省略表示创建时不设置、更新时不修改。
13
+ - 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null`;创建时省略表示不设置。
13
14
  - 不要使用旧结构:`field_name`、`property`、`ui_type`、数字枚举 `type`。
14
- - `+field-update` 使用同样的字段 JSON 结构,但语义是 `PUT`;这是高风险写入操作,建议先 `+field-get` 再按目标状态全量提交,并带 `--yes`。
15
+ - `+field-update` 是 override 式的完整覆盖 `PUT`,不是 partial update;先用 `+field-get` 读取当前定义,在其基础上修改目标属性,并把整个字段需要保留的可写配置完整写回,同时带 `--yes`。
15
16
  - `type=formula` 或 `type=lookup` 创建/更新前,必须先读对应 guide。
16
17
 
17
18
  推荐示例:
@@ -184,7 +185,7 @@
184
185
  - `icon` 默认 `star`
185
186
  - `icon` 可用:`star`、`heart`、`thumbsup`、`fire`、`smile`、`lightning`、`flower`、`number`
186
187
  - `min` 取值 `0..1`,默认 `1`
187
- - `max` 默认 `5`;常见或已文档化的范围为 `1..10`,但 CLI 不强制上限为 `10`。如果用户明确需要更大评分范围,优先确认平台能力或用 `+field-create/update --dry-run` 检查请求形状;平台拒绝后再建议改用普通数字或进度字段。
188
+ - `max` 取值 `1..10`,默认 `5`
188
189
 
189
190
  ```json
190
191
  {
@@ -228,6 +229,8 @@
228
229
 
229
230
  #### 动态选项
230
231
 
232
+ 当新字段要引用或复用另一选项字段的选项列表时,优先使用 `dynamic_options_source`,避免重复定义和维护 `options`。
233
+
231
234
  支持字段:`multiple`、`dynamic_options_source`
232
235
  动态选项不支持 `default_value`。
233
236
 
@@ -263,7 +266,7 @@
263
266
  {
264
267
  "type": "datetime",
265
268
  "name": "截止时间",
266
- "default_value": "2026-03-24 10:00:00"
269
+ "default_value": "2026-03-24 10:00"
267
270
  }
268
271
  ```
269
272
 
@@ -271,7 +274,7 @@
271
274
 
272
275
  默认值 / 约束:
273
276
  - `style.format` 默认 `yyyy/MM/dd` 可用格式:`yyyy/MM/dd`、`yyyy/MM/dd HH:mm`、`yyyy/MM/dd HH:mm Z`、`yyyy-MM-dd`、`yyyy-MM-dd HH:mm`、`yyyy-MM-dd HH:mm Z`、`MM-dd`、`MM/dd/yyyy`、`dd/MM/yyyy`
274
- - `style.format` 只控制前端显示格式;当前可配置格式最多显示到分钟,底层时间值仍可保留秒级精度。
277
+ - `style.format` 只控制 Base 前端展示,不影响 CLI 读取的 CellValue;前端当前最多配置到分钟级展示,底层时间值以毫秒级精度存储。
275
278
 
276
279
  常用写法:
277
280
 
@@ -304,12 +307,7 @@
304
307
 
305
308
  ### 3.6 user / group_chat
306
309
 
307
- 人员字段和群字段都支持 `multiple`。
308
- `user` 支持 `default_value`:人员 CellValue 数组,元素可用 `{ "id": "ou_xxx" }` 或 `{ "$slot": "current_user" }`;不要猜用户 ID。`group_chat` 不支持默认值。
309
-
310
- 默认值 / 约束:
311
- - `multiple` 默认 `true`
312
- - `user` 字段支持 `default_value` 配置,`group_chat` 字段不支持 `default_value` 配置。
310
+ 两者都支持 `multiple`(默认 `true`);仅 `user` 支持人员数组 `default_value`,元素使用 `{ "id": "ou_xxx" }` 或 `{ "$slot": "current_user" }`,用户 ID 必须来自真实查询。
313
311
 
314
312
  ```json
315
313
  {
@@ -326,15 +324,7 @@
326
324
 
327
325
  ### 3.7 created_by / updated_by
328
326
 
329
- 系统创建人 / 系统修改人字段;记录写入时应视为只读。
330
-
331
- ```json
332
- { "type": "created_by", "name": "创建人" }
333
- ```
334
-
335
- ```json
336
- { "type": "updated_by", "name": "更新人" }
337
- ```
327
+ 系统创建人和修改人字段,记录写入时只读:`{ "type": "created_by", "name": "创建人" }`、`{ "type": "updated_by", "name": "更新人" }`。
338
328
 
339
329
  ### 3.8 link
340
330
 
@@ -376,7 +366,7 @@
376
366
 
377
367
  ### 3.9 formula
378
368
 
379
- 公式字段;`expression` 必填。创建/更新前先读 [formula-field-guide.md](formula-field-guide.md) 学习公式语法。
369
+ 公式字段;`expression` 必填。创建/更新前先读 [Formula Field](lark-base-field-formula.md) 学习公式语法。
380
370
 
381
371
  ```json
382
372
  {
@@ -388,34 +378,7 @@
388
378
 
389
379
  ### 3.10 lookup
390
380
 
391
- 查找引用字段;`from`、`select`、`where` 必填,`aggregate` 可选。创建/更新前先读 [lookup-field-guide.md](lookup-field-guide.md)。
392
-
393
- 支持字段:`from`、`select`、`where`、`aggregate`
394
-
395
- 默认值 / 约束:
396
- - `from`、`select`、`where` 必填
397
- - `aggregate` 默认 `raw_value` 代表不进行聚合,直接返回 select 回的原始值
398
- - `aggregate` 可用:`raw_value`、`sum`、`average`、`counta`、`unique_counta`、`max`、`min`、`unique`
399
- - `where.logic` 默认 `and`,仅支持 `and` / `or`
400
- - `where.conditions` 至少 1 条
401
- - `conditions` 每项是三元组 `[field, op, value?]`
402
-
403
- ```json
404
- {
405
- "type": "lookup",
406
- "name": "状态汇总",
407
- "from": "任务表",
408
- "select": "状态",
409
- "where": {
410
- "logic": "and",
411
- "conditions": [
412
- ["负责人", "==", { "type": "field_ref", "field": "当前负责人" }],
413
- ["状态", "non_empty", null]
414
- ]
415
- },
416
- "aggregate": "raw_value"
417
- }
418
- ```
381
+ 查找引用字段使用 `from`、`select`、`where` 和可选 `aggregate`;结构、条件和聚合值必须按 [Lookup Field](lark-base-field-lookup.md) 构造。
419
382
 
420
383
  ### 3.11 auto_number
421
384
 
@@ -430,52 +393,7 @@
430
393
  }
431
394
  ```
432
395
 
433
- 支持字段:`style.rules`
434
-
435
- 默认值 / 约束:
436
- - `style.rules` 是规则数组,数量 `1..9`
437
- - 默认规则:
438
-
439
- ```json
440
- {
441
- "style": {
442
- "rules": [
443
- { "type": "text", "text": "NO." },
444
- { "type": "incremental_number", "length": 3 }
445
- ]
446
- }
447
- }
448
- ```
449
-
450
- #### `text`
451
-
452
- 支持字段:`text`
453
-
454
- ```json
455
- { "type": "text", "text": "TASK-" }
456
- ```
457
-
458
- #### `incremental_number`
459
-
460
- 支持字段:`length`
461
-
462
- 默认值 / 约束:
463
- - `length` 取值 `1..9`
464
-
465
- ```json
466
- { "type": "incremental_number", "length": 4 }
467
- ```
468
-
469
- #### `created_time`
470
-
471
- 支持字段:`date_format`
472
-
473
- 默认值 / 约束:
474
- - `date_format` 可用:`yyyyMMdd`、`yyyyMM`、`yyMM`、`MMdd`、`yyyy`、`MM`、`dd`
475
-
476
- ```json
477
- { "type": "created_time", "date_format": "yyyyMMdd" }
478
- ```
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`。
479
397
 
480
398
  自定义规则:
481
399
 
@@ -503,7 +421,7 @@
503
421
  { "type": "location", "name": "位置" }
504
422
  ```
505
423
 
506
- 写入必须使用 `{lng,lat}`。location 读回会包含 `full_address`;筛选和 `location -> text` 类型转换按 `full_address` 字符串处理,只有公式能访问坐标。
424
+ Location 读取为 `{lng,lat,full_address}`;写入只使用数字 `{lng,lat}`,`full_address` 由平台根据坐标解析,不允许手动指定;筛选行为按照 `full_address` 做字符串筛选,将 Location 当作文本列使用文本 operator。`location -> text` 时只保留 `full_address`。
507
425
 
508
426
  ```json
509
427
  { "type": "checkbox", "name": "完成" }
@@ -512,7 +430,7 @@
512
430
  ## 4. 创建与更新
513
431
 
514
432
  - `+field-create`:按目标字段配置直接构造 `--json`。
515
- - `+field-update`:使用同样的 JSON 结构,但语义是 `PUT`;建议先 `+field-get`,再按目标完整状态提交,并带 `--yes`。当 `type` 是 `auto_number` 时,更新编号规则本身就会把新规则应用到已有编号,无需额外参数,也不要在 JSON 里塞额外的底层实现参数。
433
+ - `+field-update`:使用同样的 JSON 结构,但执行完整覆盖更新,不是局部 patch。先用 `+field-get` 读取当前定义,在其基础上修改目标属性;需要保留的名称、类型、样式、选项、默认值、描述及类型专属配置都应完整写回,并带 `--yes`。
516
434
 
517
435
  ## 5. 暂不支持字段
518
436