@amaster.ai/pi-lark 0.1.5 → 0.1.6

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 (144) hide show
  1. package/package.json +3 -3
  2. package/skills/lark-approval/references/lark-approval-initiate.md +2 -5
  3. package/skills/lark-approval/references/lark-approval-instances-initiated.md +6 -0
  4. package/skills/lark-approval/references/lark-approval-tasks-query.md +9 -0
  5. package/skills/lark-approval/references/lark-approval-tasks-rollback.md +8 -2
  6. package/skills/lark-apps/SKILL.md +25 -7
  7. package/skills/lark-apps/references/lark-apps-access-scope-set.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-automation.md +164 -0
  9. package/skills/lark-apps/references/lark-apps-db-execute.md +186 -2
  10. package/skills/lark-apps/references/lark-apps-db.md +3 -3
  11. package/skills/lark-apps/references/lark-apps-get.md +43 -0
  12. package/skills/lark-apps/references/lark-apps-html-publish.md +7 -2
  13. package/skills/lark-apps/references/lark-apps-init.md +1 -2
  14. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  15. package/skills/lark-apps/references/lark-apps-release-create.md +3 -1
  16. package/skills/lark-apps/references/lark-apps-role.md +133 -0
  17. package/skills/lark-base/SKILL.md +7 -3
  18. package/skills/lark-base/references/dashboard-block-data-config.md +28 -2
  19. package/skills/lark-base/references/lark-base-cell-value.md +9 -4
  20. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
  21. package/skills/lark-base/references/lark-base-dashboard.md +11 -2
  22. package/skills/lark-base/references/lark-base-data-query.md +9 -7
  23. package/skills/lark-base/references/lark-base-field-create.md +4 -2
  24. package/skills/lark-base/references/lark-base-field-json.md +52 -15
  25. package/skills/lark-base/references/lark-base-field-update.md +4 -2
  26. package/skills/lark-base/references/lark-base-view-set-filter.md +3 -1
  27. package/skills/lark-calendar/SKILL.md +89 -31
  28. package/skills/lark-calendar/references/lark-calendar-create.md +8 -39
  29. package/skills/lark-calendar/references/lark-calendar-room-find.md +5 -9
  30. package/skills/lark-calendar/references/lark-calendar-rsvp.md +1 -5
  31. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +59 -0
  32. package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
  33. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +67 -210
  34. package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -5
  35. package/skills/lark-calendar/references/lark-calendar-update.md +2 -7
  36. package/skills/lark-doc/SKILL.md +1 -1
  37. package/skills/lark-doc/references/lark-doc-fetch.md +4 -2
  38. package/skills/lark-doc/references/lark-doc-mindnote.md +17 -2
  39. package/skills/lark-doc/references/lark-doc-whiteboard.md +4 -0
  40. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +35 -0
  41. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  42. package/skills/lark-drive/SKILL.md +20 -8
  43. package/skills/lark-drive/references/lark-drive-comment-location.md +16 -4
  44. package/skills/lark-drive/references/lark-drive-comments-guide.md +16 -8
  45. package/skills/lark-drive/references/lark-drive-delete.md +35 -11
  46. package/skills/lark-drive/references/lark-drive-export.md +39 -10
  47. package/skills/lark-drive/references/lark-drive-files-list.md +27 -2
  48. package/skills/lark-drive/references/lark-drive-inspect.md +2 -0
  49. package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
  50. package/skills/lark-drive/references/lark-drive-member-add.md +1 -1
  51. package/skills/lark-drive/references/lark-drive-move.md +5 -3
  52. package/skills/lark-drive/references/lark-drive-permission-guide.md +12 -0
  53. package/skills/lark-drive/references/lark-drive-pull.md +3 -3
  54. package/skills/lark-drive/references/lark-drive-push.md +33 -6
  55. package/skills/lark-drive/references/lark-drive-status.md +12 -14
  56. package/skills/lark-drive/references/lark-drive-task-result.md +58 -5
  57. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +26 -20
  58. package/skills/lark-drive/references/lark-drive-workflow.md +2 -1
  59. package/skills/lark-event/SKILL.md +2 -1
  60. package/skills/lark-event/references/lark-event-approval.md +170 -0
  61. package/skills/lark-im/SKILL.md +5 -4
  62. package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
  63. package/skills/lark-im/references/lark-im-messages-send.md +1 -1
  64. package/skills/lark-mail/SKILL.md +12 -9
  65. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  66. package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
  67. package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
  68. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  69. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  70. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  71. package/skills/lark-markdown/SKILL.md +3 -2
  72. package/skills/lark-markdown/references/lark-markdown-create.md +22 -2
  73. package/skills/lark-minutes/SKILL.md +19 -4
  74. package/skills/lark-minutes/references/lark-minutes-download.md +0 -2
  75. package/skills/lark-minutes/references/lark-minutes-search.md +0 -2
  76. package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +0 -2
  77. package/skills/lark-minutes/references/lark-minutes-summary.md +0 -2
  78. package/skills/lark-minutes/references/lark-minutes-todo.md +2 -4
  79. package/skills/lark-minutes/references/lark-minutes-update.md +0 -2
  80. package/skills/lark-minutes/references/lark-minutes-upload.md +10 -10
  81. package/skills/lark-shared/SKILL.md +26 -8
  82. package/skills/lark-sheets/SKILL.md +98 -29
  83. package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
  84. package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
  85. package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
  86. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
  87. package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
  88. package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
  89. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
  90. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
  91. package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
  92. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
  93. package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
  94. package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
  95. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
  96. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
  97. package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
  98. package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
  99. package/skills/lark-slides/SKILL.md +29 -18
  100. package/skills/lark-slides/references/asset-planning.md +16 -5
  101. package/skills/lark-slides/references/examples.md +57 -227
  102. package/skills/lark-slides/references/iconpark.md +2 -2
  103. package/skills/lark-slides/references/lark-slides-create.md +21 -2
  104. package/skills/lark-slides/references/lark-slides-media-upload.md +0 -1
  105. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
  106. package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
  107. package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -1
  108. package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
  109. package/skills/lark-slides/references/lark-slides-whiteboard.md +31 -30
  110. package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
  111. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +9 -7
  112. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +4 -4
  113. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +12 -10
  114. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +14 -13
  115. package/skills/lark-slides/references/planning-layer.md +32 -2
  116. package/skills/lark-slides/references/slides_chart_demo.xml +1 -0
  117. package/skills/lark-slides/references/slides_xml_schema_definition.xml +8 -3
  118. package/skills/lark-slides/references/troubleshooting.md +7 -25
  119. package/skills/lark-slides/references/validation-checklist.md +18 -9
  120. package/skills/lark-slides/references/visual-planning.md +4 -3
  121. package/skills/lark-slides/references/xml-format-guide.md +65 -1
  122. package/skills/lark-slides/references/xml-schema-quick-ref.md +7 -3
  123. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +907 -54
  124. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +876 -5
  125. package/skills/lark-task/SKILL.md +1 -0
  126. package/skills/lark-task/references/lark-task-create.md +14 -1
  127. package/skills/lark-vc/SKILL.md +6 -3
  128. package/skills/lark-vc/references/lark-vc-recording.md +0 -2
  129. package/skills/lark-vc/references/vc-domain-boundaries.md +9 -1
  130. package/skills/lark-vc-agent/SKILL.md +25 -15
  131. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +65 -37
  132. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
  133. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +8 -8
  134. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +5 -2
  135. package/skills/lark-wiki/SKILL.md +7 -3
  136. package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
  137. package/skills/lark-wiki/references/lark-wiki-move.md +5 -3
  138. package/skills/lark-wiki/references/lark-wiki-node-get.md +1 -1
  139. package/skills/lark-wiki/references/lark-wiki-node-list.md +9 -2
  140. package/skills/lark-calendar/references/lark-calendar-agenda.md +0 -78
  141. package/skills/lark-calendar/references/lark-calendar-freebusy.md +0 -124
  142. package/skills/lark-calendar/references/lark-calendar-search-event.md +0 -29
  143. package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
  144. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -220
@@ -5,7 +5,7 @@
5
5
  1. **明确写入边界**:写入前必须能回答"目标 range 的起止行列号是多少?是否落在用户授权范围内?"。除用户明示要修改的区域外,禁止扩张到原数据列以外或新建 Sheet。
6
6
  2. **完整性断言**:批量写入前先把"预期写入条数"硬编码到代码里(如要填 106 条翻译 → `expected = 106`),写完后回读断言 `actual == expected`。少于预期就继续写,禁止交付半成品。
7
7
  3. **回读抽样校验**:写完关键值 / 公式后,用 `+csv-get` 或 `+cells-get` 重新读取写入区域,至少抽样 3-5 个代表性单元格(首 / 中 / 末),核对值与预期一致(与本地脚本计算的预期值对照)。公式特定的"先验证模板再 --copy-to-range / 修完再读回"细则见下方相关章节。
8
- 4. **护原表 · 派生产物落点(写排名 / 标记 / 汇总 / 改写列时易丢数据)**:派生结果一律写到**真实末列 +1 的全新空列**或新建子表,**禁止复用任何已有原数据列**——哪怕该列看起来"空",也要先 `+csv-get` 回读确认整列无原始数据再写。三条铁律:① 不把新公式 / 新值写进原数据列(典型反例:把新算的排名公式写进了原本存放另一份原始数据的列,整列原始数据被覆盖丢失);② 不改写、不合并原表头字段名(典型反例:把几个独立表头字段合并成一列,原字段名丢失);③ 慎用 `--allow-overwrite`:它一旦让写入区盖到相邻原始列 / 行就是不可逆数据丢失,加它之前必须用 `+sheet-info` / `+csv-get` 核清目标 range 不含任何原始数据。
8
+ 4. **护原表 · 派生产物落点(写排名 / 标记 / 汇总 / 改写列时易丢数据)**:派生结果一律写到**真实末列 +1 的全新空列**或新建子表,**禁止复用任何已有原数据列**——哪怕该列看起来"空",也要先 `+csv-get` 回读确认整列无原始数据再写。三条准则:① 不把新公式 / 新值写进原数据列(典型反例:把新算的排名公式写进了原本存放另一份原始数据的列,整列原始数据被覆盖丢失);② 不改写、不合并原表头字段名(典型反例:把几个独立表头字段合并成一列,原字段名丢失);③ 慎用 `--allow-overwrite`:它一旦让写入区盖到相邻原始列 / 行就是不可逆数据丢失,加它之前必须用 `+sheet-info` / `+csv-get` 核清目标 range 不含任何原始数据。
9
9
 
10
10
  ## 新增列 / 新增行的样式继承(防止视觉风格不一致)
11
11
 
@@ -13,7 +13,7 @@
13
13
 
14
14
  **完整继承清单**(写新列 / 新行时 cells 数组必须同时携带):
15
15
 
16
- 1. `cell_styles.font_size` / `cell_styles.font_weight` / `cell_styles.font_color` / `cell_styles.font_style`(字号 / 粗细 / 颜色 / 斜体等)
16
+ 1. `cell_styles.font_family` / `cell_styles.font_size` / `cell_styles.font_weight` / `cell_styles.font_color` / `cell_styles.font_style`(字体名称 / 字号 / 粗细 / 颜色 / 斜体等)
17
17
  2. `cell_styles.horizontal_alignment` / `cell_styles.vertical_alignment`(H-Align / V-Align)—— 漏继承会导致新列对齐与原列不一致(常见)
18
18
  3. `cell_styles.number_format`(小数位 / 千分位 / 百分比 / 日期格式)—— 漏继承会导致同列数值格式混乱
19
19
  4. `cell_styles.background_color`(背景色)
@@ -43,6 +43,8 @@
43
43
 
44
44
  **典型反例**:长数字列(如审批单号、流水号)未设 `number_format`,飞书显示为 `1.23E+15`,用户复制出来已经丢失精度。
45
45
 
46
+ > **数字还是文本,按"数据本质是量值还是标识符"二选一 —— 不看当下要不要计算**:金额 / 百分比 / 比率 / 计数 / 度量这类**本质是量值**的数据,一律以**数字类型**写入(百分比存小数 `0.54` 配 `number_format:"0%"`),**不要**设 `@` 文本格式。**这与"用户当下是否要排序 / 求和"无关**——数据类型由数据本质决定、不由当下用途决定:表格数据几乎总会被后续排序 / 图表 / 二次计算复用,`"54%"` 文本与数值列混排本就破坏一致性,且数字 + `number_format` 显示效果与文本**完全相同**,没有任何理由选文本。**最常见的误判就是"这只是 leaderboard / 报表 / 看板展示,又不用算,写成 `54%` 字符串就行"——这是错的,展示用途不改变"百分比是数值"的事实。**(`+table-put` 用 `dtypes` 声明 `int64` / `float64`;版式 `+table-put` 装不下时用 `+cells-set` 传数字 + `number_format`;都别在本地拼成带 `$` / `%` 的字符串走 `+csv-put`。)反过来,编号 `001`、规格 `3-1`、身份证 / 电话 / 单据号等**本质是标识符 / 标签**、要原样保留不被飞书自动解释的内容(否则 `001`→`1`、`3-1`→日期、点分日期 `12.10`→`12.1`(尾零丢失)、长号→科学计数),才以**字符串类型**写入(`dtypes` 设 `object`)并把 `number_format` 设为 `"@"`(文本格式),字面保真。
47
+
46
48
  ## 使用场景
47
49
 
48
50
  写入。向飞书表格的单元格区域写入值、公式、样式、批注、图片或下拉,也可批量写入 CSV / DataFrame。本 reference 覆盖 6 个 shortcut,按数据来源 + 内容形态选:
@@ -50,23 +52,26 @@
50
52
  | 场景 | 用这个 shortcut | 原因 |
51
53
  |------|----------------|------|
52
54
  | 模型手里已经有 CSV 文本(小规模手动构造、从 `+csv-get` 取到后简单加工) | `+csv-put` | 直接传 CSV 文本 + `--start-cell`,不用自己拼二维 cells 数组;必要时自动扩容行列 |
53
- | 列里有数值语义的数据(数字 / 金额 / 百分比 / 日期 / 计数)→ 飞书,要类型保真(来源不限:DataFrame、Counter、dict、list 都算) | `+table-put` | typed 协议(外层 `{"sheets":[{"name":"…","columns":[...],"data":[[...]],"dtypes":{...},"formats":{...}}]}`,**只有这四件套字段**):`dtypes` 用 pandas dtype 串声明列类型(`int64` / `float64` / `datetime64[ns]` / `bool` / `object`),`formats` 给每列展示格式(千分位 / 百分比 / 日期)。**date 落真日期、金额 / 百分比 / 计数等数值列保精度且带 `number_format`(可排序 / 求和 / 入图表)**、string 保前导零,多 sheet 一次写。**只要列有数值语义就走这里**,不要在本地把数字拼成带 `$` / `%` 的字符串再走 `+csv-put` |
55
+ | 列里有数值语义的数据(数字 / 金额 / 百分比 / 日期 / 计数)→ 飞书,要类型保真(来源不限:DataFrame、Counter、dict、list 都算) | `+table-put` | typed 协议(外层 `{"sheets":[{"name":"…","columns":[...],"data":[[...]],"dtypes":{...},"formats":{...}}]}`,**只有这四件套字段**):`dtypes` 用 pandas dtype 串声明列类型(`int64` / `float64` / `datetime64[ns]` / `bool` / `object`),`formats` 给每列展示格式(千分位 / 百分比 / 日期)。**date 落真日期、金额 / 百分比 / 计数等数值列保精度且带 `number_format`(可排序 / 求和 / 入图表)**、string 保前导零,多 sheet 一次写 |
54
56
  | 写入含样式、批注、图片、数据校验等任意富写入 | `+cells-set` | 唯一支持完整富字段的 shortcut(公式 `+csv-put` 也能写) |
55
57
  | 只改已有 cell 的样式,不动 value/formula | `+cells-set-style` | 拍平 10 个样式字段为独立 flag;不触发不必要的值写入 |
56
58
  | 单 cell 嵌入图片 | `+cells-set-image` | 比 `+cells-set` 参数更简短 |
57
- | 大量纯值 + 需要表头样式/边框 | 先用 `+csv-put` 写值,再用 `+cells-set-style` 补样式 | 分工配合,入参最短 |
59
+ | 在**已有区域**局部补表头样式/边框 | 先用 `+csv-put` 写值,再用 `+cells-set-style` 补样式 | 分工配合,入参最短 |
60
+ | **新建子表 / 整表成套美化**(哪怕全是纯文本) | `+table-put --sheets … --styles …` 一步带值 + 全套样式(区域底色 / 边框 / 列宽 / 行高 / 合并;payload 里不存在的 sheet 名自动建子表) | `--styles` 与列是否 typed 无关,纯文本同样适用;比「写值 + 多次刷样式」少好几次调用 |
58
61
 
59
- **优先级**:常规批量写入(纯值或公式)优先 `+csv-put`(最短入参,直接传 CSV 文本);含样式/批注/图片才用 `+cells-set`。⚠️ 这里"纯值"特指**已是文本、无需保留数值语义**的内容;只要列里是金额 / 百分比 / 日期 / 计数等有数值语义的数据,应优先 `+table-put`(用 typed 协议的 `dtypes` 声明列类型 + `formats` 设展示格式),而不是 `+csv-put`。
62
+ **选命令按内容形态分流(不设"默认首选")**:① 列有数值语义(金额 / 百分比 / 日期 / 计数)→ `+table-put`(`dtypes` 声明类型 + `formats` 设展示格式),版式装不下时 → `+cells-set` 传数字 + `number_format`;② 要样式 / 批注 / 图片 / 富文本 → `+cells-set`;③ **仅**全文本、无数值语义的内容平铺 → `+csv-put`(入参最短)。判据详见上方「数字还是文本」。
60
63
 
61
64
  ⚠️ `+csv-put` 可写值或公式:以 `=` 开头的单元格会被当作公式计算(读回时 `formula` 字段保留、`value` 为计算结果)。**公式内部含逗号 / 引号 / 换行时必须按 RFC 4180 转义**——含逗号的字段整格用双引号包裹、字段内部的引号再翻倍:如 `=COUNTIF(D5:D22,"及格")` 必须写成 `"=COUNTIF(D5:D22,""及格"")"`(外层双引号包裹整格,内部 `"及格"` 的引号翻倍成 `""及格""`)。漏转义会被 CSV 解析器按逗号拆列、整块写入区域错位(如本该 `G4:H6` 错成 `G4:K4`),详见下方 `+csv-put` 示例。**因此含逗号 / 引号 / 换行的公式优先改用 `+cells-set`(JSON 二维数组)写入——`cells[r][c].formula` 字段直接放公式串,零 CSV 转义负担,从根上避免拆列错位**(`+table-put` 的 typed 协议只接受 `columns / data / dtypes / formats` 四件套、没有 `formula` 字段,公式写入只能走 `+cells-set` / `+csv-put`)。此外 `+csv-put` **不会**携带样式/批注/图片,也无法把 `=` 开头的内容当字面量文本写入;需要样式/批注/图片用 `+cells-set`(或"写值 + 补样式"两步法)。
62
65
 
63
- ⚠️ **别把本该是数值的列格式化成字符串用 `+csv-put` 写入**:金额 / 百分比 / 市值 / 计数等列,若在本地拼成带 `$` / `%` / 千分位的字符串(如 `"$1,234.50"` / `"+30.5%"`)再 `+csv-put` 灌进去,单元格会变成**文本**——丢失排序 / 求和 / 图表 / 透视能力,且与 `number` 列混排时无法参与计算。正解是 `+table-put --sheets` 完整 payload(外层一定要带 `{"sheets":[...]}`、列名走 `columns`、二维数据走 `data`、列 pandas dtype 走 `dtypes`、列展示格式走 `formats`),数值列用 pandas dtype 串如 `dtypes:{"价格":"float64"}`(百分比同样存小数 `0.305`),并配 `formats:{"价格":"$#,##0.00","完成率":"0.0%"}` 做展示格式,**显示效果完全相同、数值无损**。判断信号:**当你准备把一个数字 format 成字符串再写时,几乎总该用 `+table-put` 而非 `+csv-put`**。
66
+ ⚠️ **`+csv-put` 会把数值落成文本**:把金额 / 百分比 / 计数等在本地拼成带 `$` / `%` / 千分位的字符串(如 `"$1,234.50"` / `"+30.5%"`)再 `+csv-put` 灌进去,单元格就是**文本**——丢失排序 / 求和 / 图表能力,且与数值列混排无法参与计算。数值该怎么写、何时 `+table-put`、版式装不下时何时退 `+cells-set` 传数字 + `number_format`,判据与分流见上方「数字还是文本」;核心一句:**准备把数字 format 成字符串再写时就是走错了路,数值一律以数字写入 + `number_format` 控制显示。**
67
+
68
+ ⚠️ **`+csv-put` 也会把「看着像数字」的字段静默数值化**(与上一条相反的另一半坑):CSV 里语义是**日期标签 / 编号 / 标识符**、内容却全是数字字符的列,会被按数值解析——`12.10`→`12.1`(点分日期尾零丢失)、`3.0`→`3`、`001`→`1`、长号→科学计数。**这类列即使已攒好 CSV 文本也不能裸走 `+csv-put`**:优先 `+table-put` 把该列 `dtypes` 声明为 `object`(无年份的点分标签如 `12.10` / `3-1` 字面保真)或 `datetime64[ns]`(完整真日期),版式装不下再退 `+cells-set` + `number_format:"@"`。此类失真在「抽样首 / 中 / 末」回读时易被掩盖(`12.10` / `12.20` 等尾零行常不落在抽样窗口),日期 / 编号列回读要专挑带尾零 / 前导零的代表值核对。
64
69
 
65
70
  ⚠️ 大数据回写走"`+csv-get` 按 `--range` 行窗口分批读到本地 + 本地脚本处理 + `+csv-put` 分批回写"。
66
71
 
67
72
  ## `+cells-set` 写入要点(常用模式 / 公式 / 样式)
68
73
 
69
- > 以下是用 `+cells-set`(及 `+cells-set-style`)做富写入时的常用模式与铁律;选哪个 shortcut 见上方「使用场景」。
74
+ > 以下是用 `+cells-set`(及 `+cells-set-style`)做富写入时的常用模式与准则;选哪个 shortcut 见上方「使用场景」。
70
75
 
71
76
  `+cells-set` 为一块区域设置值 / 公式 / 批注 / 样式,也支持 `rich_text` 的 `type: "embed-image"` 嵌入单元格图片。**关键:`cells` 二维数组的行列维度必须与 `range`(闭区间)严格一致,否则触发 `InvalidCellRangeError`**——维度计算示例见文末 `## Schemas` 的 `--cells`。
72
77
 
@@ -80,12 +85,14 @@
80
85
  - 用户说”这列 / 整列 / 这行 / 首行 / 向下复制”时,**必须**使用模板单元格 + `--copy-to-range`
81
86
  - 多区域写入相同格式/公式结构时,优先写一个模板,再用 `--copy-to-range` 复制到所有目标区域
82
87
 
88
+ ⚠️ **模板 `--range` 从数据行起算、别把表头圈进去**:`--copy-to-range` 会把 `--range` 模板按目标区尺寸周期性平铺,模板里若含了表头行,表头会每隔几行重复铺进数据区。整列填充时模板只取一格数据样式(如 `H2`),不要取成 `H1:H2`。
89
+
83
90
  ⚠️ **逐行写入公式是常见低效写法**:对每一行单独调用 `+cells-set` 写公式(如 26 次)既慢又易错,且不会自动平移公式引用。正确做法是 1 次模板写入 + 1 次 `--copy-to-range`(公式引用自动平移)。
84
91
 
85
92
  💡 **写入公式前先按迁移规则改写**:如果公式来自 Excel 或包含数组场景,先读取并遵循 `lark-sheets-formula-translation` 的规则完成改写,再把最终公式写入 `formula` 字段。
86
93
 
87
94
  💡 **内容与样式分离写入(推荐)**:当需要同时写入内容和样式时,`cells` 中每个单元格都带上 `cell_styles` / `border_styles` 会导致入参非常冗长。由于同一区域的样式通常高度重复(如整列统一背景色、统一边框),推荐拆成两步:
88
- 1. **先写内容**:`+cells-set` 只传 `value` / `formula`,不带样式,`cells` 入参精简
95
+ 1. **先写内容**:`+cells-set` 只传 `value` / `formula`,不带样式,`cells` 入参精简。⚠️ 这里"不带样式"指暂不带 `cell_styles`,**不是**降级用 `+csv-put` 铺文本——数值列(百分比 / 金额 / 计数)仍必须以数字写入(百分比传 `0.44`):样式能后补,数据类型不能后补(见上方「数字还是文本」)。
89
96
  2. **再批量刷样式**:对区域中的一个单元格写入目标样式作为模板,再用 `--copy-to-range` 将样式扩展到整列 / 整行 / 整个区域(`--copy-to-range` 会复制值、公式和样式,所以模板单元格应已包含正确的值)
90
97
 
91
98
  示例:要对 A2:A100 写入数据并统一设置蓝色背景 + 边框:
@@ -120,6 +127,8 @@ Step 2: `+cells-set` — range="A2", cells 含 value + cell_styles + border_styl
120
127
  7. **公式范围与用户指令字面对齐**:用户说"对 F 至 L 列求和"就必须写 `SUM(F2:L2)` 或 `F2+G2+H2+I2+J2+K2+L2`,**不能漏列、多列、错列**。写完用 `+cells-get` 拿回 `formula` 字符串,与用户原话逐字对照(参与求和的列名一致 / 起止列号一致 / 运算符一致),不一致就是违规
121
128
  8. **量纲 / 单位换算 / 数量乘项预检(公式不报错但结果整体偏倍数)**:从文本提取数字做计算前,先核对**单位是否统一、是否漏乘数量、口径是否一致**——这类错误公式能跑通、无 `#` 报错,回读也看不出(值"像对的")。必须用本地脚本对 3–5 个代表行**离线手算一遍预期值**,与公式结果逐格比对量级:① 单位不一致先统一再算(典型反例:尺寸 `320CM*337CM` 直接取数相乘除以 1e6 得 0.11,正确是 CM→MM 换算后得 10.78,**差 100 倍**);② 按"单件×数量"的量必须乘数量列(典型反例:侧面板面积漏乘 F 列数量,F=2 的行只算了一半);③ 标准值口径对齐(典型反例:营养成分 mg/kg 与 g/100g 口径混用,整列放大 100 倍)。**口径 / 单位 / 数量任一项错,整列计算结果就是错的;这类错误公式不报错、回读也不易看出,必须靠离线手算对照。**
122
129
 
130
+ ⚠️ **公式写入的默认收尾不是停在回读,而是继续跑 `+formula-verify`**:`+csv-get` / `+cells-get` 的抽样回读只能帮你快速发现明显错误,但它覆盖不到整列中段、隐藏行、被条件格式遮蔽的错误,也看不到 `partial` 截断。**只要这次 `+cells-set` / `--copy-to-range` / `+csv-put` 实际写入了公式,收尾默认就是转到 `lark-sheets-formula-verify` 跑 `+formula-verify`,直到 `status='success'`。** 不要等用户补一句“再验证下公式”才做。
131
+
123
132
  ⚠️ **收到 `formula_errors` 反馈后不要只打补丁**:`+cells-set` 返回值里若出现 `formula_errors: [{cell, formula, error_type, detail}]`,说明某些 cell 公式编译失败(`error_type=compile_failed` 通常是函数语法错如 `SPLIT(x)[1]` 的下标取值飞书不支持(SPLIT 本身支持,取第 N 项用 `INDEX(SPLIT(...),N)`);`non_formula` 是 `=` 开头但解析不通过)。此时**禁止只聚焦修报错点的局部语法**(如仅把 `[1]` 换成 `INDEX(..,1)`),必须:
124
133
 
125
134
  1. **重新审视整条公式的完整性**:被 formula_errors 标出的那一行,公式除了下标语法错,还可能有其他先天缺陷(字符清洗不全、IFERROR 兜底漏条件、引用列写错),修完语法错后立即整体复核
@@ -227,7 +236,7 @@ lark-cli sheets +dropdown-set \
227
236
 
228
237
  > ⚠️ **`--source-range` 必须带 sheet 前缀**(即使跟 `--range` 同 sheet)。注意一个坑:回读这种 listFromRange 下拉单元格时,`data_validation.range` 看起来不带 sheet 前缀(形如 `$T$1:$T$3`),如果要把读出来的 range 反过来写回 `--source-range`,**必须自己重新补上 sheet 前缀**,否则会被拒。
229
238
  >
230
- > ⚠️ **sheet 前缀里的表名一律「裸写」,不要加引号**——这条对所有带 sheet 前缀的 range 入参通用(`--source-range`、`+cells-batch-set-style` / `+cells-batch-clear` / `+dropdown-update` 的 `--ranges` 等)。即使表名含点或空格(如 `2025.9`、`一月份 `),也直接写 `2025.9!A1`;**不要**按电子表格习惯写成 `'2025.9'!A1`——引号会被当成表名的一部分,导致 `sheet "'2025.9'" not found`。
239
+ > ⚠️ **`--ranges` 类批量 flag 的 sheet 前缀必须「裸写」**——`+cells-batch-set-style` / `+cells-batch-clear` / `+dropdown-update` / `+dropdown-delete` 的 `--ranges` 解析器不接受引号:表名含点或空格(如 `2025.9`、`一月份`)也直接写 `2025.9!A1`,写成 `'2025.9'!A1` 会被当成表名一部分、报 `sheet not found`。**但 `--source-range`、透视表 `--source`、`--range` 走 A1 标准**:sheet 名带单引号(如 `'Sheet1'!A1:B2`)是标准写法、裸写也接受,回读统一返回带引号形式——别把 `--ranges` 的裸写要求套到这些 flag 上。
231
240
 
232
241
  `+dropdown-update`(多 range 批量更新)的所有 flag 语义与 `+dropdown-set` 完全一致;只是目标 `--ranges` 由单值变成 JSON 数组(每项带 sheet 前缀),同一份选项 + 配色应用到所有 range。
233
242
 
@@ -265,6 +274,7 @@ _公共四件套 · 系统:`--dry-run`_
265
274
  | `--range` | string | required | 目标范围(A1 格式,如 `A1:B2`) |
266
275
  | `--background-color` | string | optional | 背景颜色(十六进制,如 `#ffffff`) |
267
276
  | `--font-color` | string | optional | 字体颜色(十六进制,如 `#000000`) |
277
+ | `--font-family` | string | optional | 字体名称(如 `Arial`、`微软雅黑`) |
268
278
  | `--font-size` | float64 | optional | 字体大小(px,例:10、12、14) |
269
279
  | `--font-style` | string | optional | 字体样式(可选值:`normal` / `italic`) |
270
280
  | `--font-weight` | string | optional | 字重(可选值:`normal` / `bold`) |
@@ -330,7 +340,7 @@ _【维度】行列数必须与 range 完全一致:'A1:C2'→[[_,_,_],[_,_,_]]
330
340
  - `value` (oneOf?) — 静态单元格值(文本、数字、布尔)
331
341
  - `formula` (string?) — 以 '=' 开头的单元格公式(例如:'=SUM(A1:A10)')
332
342
  - `note` (string?) — 单元格批注/备注
333
- - `cell_styles` (object?) — 单元格样式属性,包括字体、颜色、对齐方式和数字格式 { font_color?: string, font_size?: number, font_weight?: enum, font_style?: enum, font_line?: enum, …共 10 项 }
343
+ - `cell_styles` (object?) — 单元格样式属性,包括字体、颜色、对齐方式和数字格式 { font_color?: string, font_family?: string, font_size?: number, font_weight?: enum, font_style?: enum, …共 11 项 }
334
344
  - `border_styles` (object?) — 单元格边框配置,含 top/bottom/left/right 四个方向,每个方向的结构相同(见 top) { top?: object, bottom?: object, left?: object, right?: object }
335
345
  - `rich_text` (array<object>?) — 富文本内容 each: { type: enum, text: string, style?: object, link?: string, mention_token?: string, …共 17 项 }
336
346
  - `multiple_values` (array<object>?) — 多值内容,用于支持多选的列表验证单元格 each: { value: oneOf, format?: string }
@@ -373,7 +383,7 @@ _一个或多个子表的 typed 数据,每个数组元素写入一张子表;
373
383
 
374
384
  **数组项**(类型 object):
375
385
  - `cell_merges` (array<object>?) — 单元格合并操作数组;range 使用 A1 单元格范围,merge_type 默认 all each: { merge_type?: enum, range: string }
376
- - `cell_styles` (array<object>?) — 单元格样式操作数组;每项用 A1 单元格 range 指定范围,字段名与 +cells-set-style 对齐 each: { background_color?: string, border_styles?: object, font_color?: string, font_line?: enum, font_size?: number, …共 12 项 }
386
+ - `cell_styles` (array<object>?) — 单元格样式操作数组;每项用 A1 单元格 range 指定范围,字段名与 +cells-set-style 对齐 each: { background_color?: string, border_styles?: object, font_color?: string, font_family?: string, font_line?: enum, …共 13 项 }
377
387
  - `col_sizes` (array<object>?) — 列宽操作数组;range 使用列范围如 A:C,type 为 pixel/standard,pixel 需要 size each: { range: string, size?: number, type: enum }
378
388
  - `name` (string) — 子表名
379
389
  - `row_sizes` (array<object>?) — 行高操作数组;range 使用行范围如 1:3,type 为 pixel/standard/auto,pixel 需要 size each: { range: string, size?: number, type: enum }
@@ -10,34 +10,40 @@ metadata:
10
10
 
11
11
  # slides (v1)
12
12
 
13
+ **CRITICAL — 全局硬约束:PPT 的尺寸是 960x540,确保主体内容在页面边界内。**
14
+
15
+ **CRITICAL — 图片至关重要:必须有意识的主动多用图片!素材图使用生图工具和搜图工具,缺图时用生图工具生成配图补足;背景图必须使用生图工具,且生图指令中必须明确要求不要出现任何文字。**
16
+
17
+ **CRITICAL — 防文本溢出:所有承载突出信息和密集文字的 `<content>` 必须设置 `autoFit="normal-auto-fit"`,字号会在框内自动缩排以防溢出。**
18
+
13
19
  ## Quick Reference
14
20
 
15
21
  | 用户需求 | 优先动作 | 关键文档 / 命令 |
16
22
  |----------|----------|-----------------|
17
23
  | 新建 PPT | 先规划 `slide_plan.json`,再按复杂度选择一步或两步创建 | `planning-layer.md`、`visual-planning.md`、`asset-planning.md`、`slides +create` |
18
- | 已有 PPT 大幅改写 | 多页整页重建用 `+replace-pages`,单页局部编辑用 `+replace-slide` | `xml_presentations.get`、`lark-slides-replace-pages.md`、`lark-slides-edit-workflows.md` |
24
+ | 从模板创建或编辑已有本地 PPTX | 导入 PPTX 为 Slides | `lark-slides-pptx-template-workflows.md` |
19
25
  | 编辑单个标题、文本块、图片或局部元素 | 优先块级替换/插入,不改页序 | `slides +replace-slide`、`lark-slides-replace-slide.md` |
20
- | 读取或分析已有 PPT | 解析 slides/wiki token,回读全文或单页 XML,保存 `xml_presentation_id`、`slide_id`、`revision_id` | `xml_presentations.get`、`xml_presentation.slide.get` |
21
- | 获取幻灯片页面截图 | 用 `slide_id` 或页号指定页面 | `slides +screenshot`、`lark-slides-screenshot.md` |
26
+ | 读取或分析已有 PPT | 解析 slides/wiki token,用 shortcut 回读全文 XML 或读取单页 XML,保存 `xml_presentation_id`、`slide_id`、`revision_id` | `slides +xml-get`、`xml_presentation.slide.get` |
27
+ | 获取幻灯片页面截图 | 用 `slide_id` 或页号指定页面,一次不超过 10 页 | `slides +screenshot`、`lark-slides-screenshot.md` |
22
28
  | 上传或使用图片 | 先上传为 `file_token`,禁止直接写 http(s) 外链 | `slides +media-upload`,或 `+create --slides` 的 `@./path` 占位符 |
23
- | 在 slide 中绘制柱/条/折线/面积/雷达/饼等有数据序列的图表 | 使用原生 `<chart>` 元素 | `xml-schema-quick-ref.md` |
24
- | 在 slide 中绘制流程图、时序图、架构图、散点图、漏斗图或装饰图案 | 必须先用 Read 工具读取参考文档,再生成 `<whiteboard>` 元素 | [`lark-slides-whiteboard.md`](references/lark-slides-whiteboard.md) |
25
- | 使用语义图标 | 先检索 IconPark,再写 `<icon iconType="...">` | `iconpark_tool.py search → resolve`、`iconpark.md` |
29
+ | 绘制图表 | 原生图表用 `<chart>`,其他用 `<shape>` + `<line>`,只有复杂 Mermaid、SVG 用 `<whiteboard>` | `xml-schema-quick-ref.md`、`slides_chart_demo.xml` |
30
+ | 绘制表格 | 优先用 `rect` 和 `text` 模拟,其他用 `<table>` | `xml-schema-quick-ref.md` |
31
+ | 使用图标 | 禁止盲猜 `iconType`,必须先检索 IconPark,再写 `<icon iconType="...">`,图标必须填充颜色并和背景有足够对比,禁止使用 emoji 图标 | `iconpark_tool.py search → resolve`、`iconpark.md` |
26
32
  | 创建失败、空白页、3350001、布局异常 | 先回读状态,再按排障清单修复,不假设原操作原子成功 | `troubleshooting.md`、`validation-checklist.md` |
27
33
 
28
34
  **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),认证、权限和全局参数均以 lark-shared 为准。**
29
35
 
30
36
  **CRITICAL — 生成任何 XML 之前,MUST 先用 Read 工具读取 [xml-schema-quick-ref.md](references/xml-schema-quick-ref.md),禁止凭记忆猜测 XML 结构。**
31
37
 
32
- **CRITICAL — PPT 生成与模板编辑硬约束:PPT 的尺寸是 960x540,确保主体内容在页面边界内。多用生图,辅助搜图,必须要图文并茂。不要为了画出一个具象物体而堆叠 3 个以上仅用于拟形的 shape。生成背景图时必须在 prompt 中明确要求不要出现任何文字。用户指定 PPT 模板时,用 lark-drive 技能导入成 lark slides,回读理解每页版式后,直接在该 slides 上编辑,可以填改文字和图片、按需增删模板页,必须严格沿用原版式和字体,只改内容不做设计,完成后回读并微调,凝练文字或缩减字号消除文字溢出,调整 shape 顺序或位置避免文字遮挡。**
33
-
34
38
  **CRITICAL — 新建演示文稿或大幅改写页面时,MUST 先生成 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`,再生成 XML。先创建对应目录,规划层规则和中间产物生命周期见 [planning-layer.md](references/planning-layer.md)。仅替换一个标题、插入一个块等小型已有页编辑可豁免。**
35
39
 
36
40
  **CRITICAL — 新建演示文稿或大幅改写页面时,生成 XML 前 MUST 读取 [visual-planning.md](references/visual-planning.md),确保 `layout_type`、`visual_focus`、`text_density` 实际改变页面几何、主视觉和文本量。**
37
41
 
38
- **CRITICAL — 新建演示文稿或大幅改写页面时,规划 `asset_need` MUST 遵循 [asset-planning.md](references/asset-planning.md):只做元数据规划,必须有 `fallback_if_missing`,不得要求真实搜索、下载或上传素材。**
42
+ **CRITICAL — 新建演示文稿或大幅改写页面时,规划 `asset_need` MUST 遵循 [asset-planning.md](references/asset-planning.md)。**
43
+
44
+ **CRITICAL — 将完整 `<slide>` XML 提交给 `slides +create --slides`、`xml_presentation.slide create` 或 `slides +replace-pages` 之前,MUST 先把待提交 XML 保存到本地文件并运行 [`scripts/xml_text_overlap_lint.py`](scripts/xml_text_overlap_lint.py);`summary.error_count` 必须为 0 才能调用接口。**
39
45
 
40
- **CRITICAL — 创建或大幅改写后,MUST 按 [validation-checklist.md](references/validation-checklist.md) 做显式验证:回读全文 XML、核对页数和关键元素、检查空白/破损页、明显溢出、布局风险;XML 语法和文本重叠静态检查优先使用 [`scripts/xml_text_overlap_lint.py`](scripts/xml_text_overlap_lint.py)。**
46
+ **CRITICAL — 创建或大幅改写后,MUST 按 [validation-checklist.md](references/validation-checklist.md) 做显式验证:回读全文 XML、核对页数和关键元素、检查空白/破损页、明显溢出、布局风险。**
41
47
 
42
48
  **CRITICAL — 创建前自检或失败排障时,MUST 按 [troubleshooting.md](references/troubleshooting.md) 检查 XML 转义、结构、shell 截断、图片 token、3350001 和布局风险。**
43
49
 
@@ -79,14 +85,13 @@ lark-cli auth login --domain slides
79
85
  - 编辑:[`lark-slides-edit-workflows.md`](references/lark-slides-edit-workflows.md)、[`lark-slides-replace-slide.md`](references/lark-slides-replace-slide.md)、[`lark-slides-replace-pages.md`](references/lark-slides-replace-pages.md)
80
86
  - 截图:[`lark-slides-screenshot.md`](references/lark-slides-screenshot.md)
81
87
  - 图片:[`lark-slides-media-upload.md`](references/lark-slides-media-upload.md)
82
- - 流程图 / 时序图 / 架构图 / 装饰图案:[`lark-slides-whiteboard.md`](references/lark-slides-whiteboard.md)
83
88
  - 图标:[`iconpark.md`](references/iconpark.md)、[`scripts/iconpark_tool.py`](scripts/iconpark_tool.py)
84
89
  - 排障:[`troubleshooting.md`](references/troubleshooting.md)
85
90
  - 完整协议:[`slides_xml_schema_definition.xml`](references/slides_xml_schema_definition.xml)
86
91
 
87
92
  ## Workflow
88
93
 
89
- > **这是演示文稿,不是文档。** 每页 slide 是独立的视觉画面,信息密度要低,排版要留白。
94
+ > **这是演示文稿,不是文档。** 每页 slide 是独立的视觉画面,信息密度要适当,排版要留白。
90
95
 
91
96
  ### Design Ideas
92
97
 
@@ -124,7 +129,9 @@ lark-cli auth login --domain slides
124
129
  - 不要用低对比文字或低对比图标,例如浅灰字压在浅色背景上。
125
130
  - 不要让装饰线穿过文字,或让页脚、来源、编号挤压主体内容。
126
131
  - 不要把素材缺失表现为空白图片框;必须按 `fallback_if_missing` 生成 XML-native 视觉。
127
- - 不要留下占位文案、示例公司名、示例日期或与用户主题无关的内容。
132
+ - 不要留下模板占位文案、示例公司名、示例日期或与用户主题无关的原模板内容。
133
+ - 不要使用 emoji。
134
+ - 不要为了画出一个具象物体而堆叠 3 个以上仅用于拟形的 shape。
128
135
 
129
136
  ### 创建方式选择
130
137
 
@@ -140,9 +147,11 @@ lark-cli auth login --domain slides
140
147
  > [!IMPORTANT]
141
148
  > `slides +create --slides` 底层会逐页创建,不是原子操作。中途失败时先记录 `xml_presentation_id`,回读确认当前状态,再继续修复或追加。
142
149
 
150
+ ### 生成流程
151
+
143
152
  ```text
144
153
  Step 1: 需求澄清 & 读取知识
145
- - 澄清主题、受众、页数、风格
154
+ - 澄清主题、受众、页数、风格;若用户上传 PPTX 作为模板,按顶部『用户自定义模板』规则处理
146
155
  - 读取 xml-schema-quick-ref.md;新建 / 大幅改写时还要读取 planning-layer.md、visual-planning.md、asset-planning.md
147
156
 
148
157
  Step 2: 生成大纲 → 用户确认 → 写入 slide_plan.json
@@ -153,10 +162,11 @@ Step 2: 生成大纲 → 用户确认 → 写入 slide_plan.json
153
162
  Step 3: 按 slide_plan.json 生成 XML → 创建
154
163
  - 逐页消费 plan:key_message 定主结论,layout_type 定几何,visual_focus 定主视觉,text_density 定文本量
155
164
  - 缺少真实素材时必须用 `fallback_if_missing` 生成 XML-native 兜底视觉;不要留空
165
+ - 调用创建或整页替换接口前,先保存待提交 XML 并运行 xml_text_overlap_lint.py;error_count 不为 0 必须先修
156
166
  - 创建方式按“创建方式选择”判断;图片、复杂 XML、转义和 3350001 排查按 lark-slides-create.md、media-upload.md、troubleshooting.md 执行
157
167
 
158
168
  Step 4: 审查 & 交付
159
- - 创建完成后,必须用 xml_presentations.get 读取全文 XML,并按 validation-checklist.md 做显式验证记录,包括 XML 文本重叠检查
169
+ - 创建完成后,必须用 `slides +xml-get` 读取全文 XML,并按 validation-checklist.md 做显式验证记录
160
170
  - 失败或部分成功按 troubleshooting.md 处理;局部问题优先用 `+replace-slide` 修正
161
171
  - 没问题 → 交付:告知用户演示文稿 ID 和访问方式
162
172
  ```
@@ -173,7 +183,7 @@ lark-cli slides xml_presentation.slide create \
173
183
  --data "$(jq -n --arg content '<slide xmlns="http://www.larkoffice.com/sml/2.0">
174
184
  <style><fill><fillColor color="BACKGROUND_COLOR"/></fill></style>
175
185
  <data>
176
- 在这里放置 shape、line、table、chart、whiteboard 等元素
186
+ <!-- 在这里放置 shape、line、table、chart 等元素 -->
177
187
  </data>
178
188
  </slide>' '{slide:{content:$content}}')"
179
189
 
@@ -247,11 +257,12 @@ Shortcut 是对常用操作的高级封装(`lark-cli slides +<verb> [flags]`
247
257
  | Shortcut | 说明 |
248
258
  |----------|------|
249
259
  | [`+create`](references/lark-slides-create.md) | 创建 PPT(可选 `--slides` 一步添加页面,支持 `<img src="@./local.png">` 占位符自动上传) |
260
+ | [`+xml-get`](references/lark-slides-xml-get.md) | 读取全文或单页 XML,并可保存到本地文件,避免终端输出被截断 |
250
261
  | [`+media-upload`](references/lark-slides-media-upload.md) | 上传本地图片到指定演示文稿,返回 `file_token`(用作 `<img src="...">`),最大 20 MB |
251
262
  | [`+replace-slide`](references/lark-slides-replace-slide.md) | 对已有幻灯片页面进行块级替换/插入(`block_replace` / `block_insert`),自动注入 id 和 `<content/>`,不改变页序 |
252
263
  | [`+replace-pages`](references/lark-slides-replace-pages.md) | 在原演示文稿内批量重建多个页面:先创建新页到旧页前,再删除旧页;适合已有 Slides 的多页大改,不新建链接 |
253
264
 
254
- 没有 Shortcut 覆盖时使用原生 API。高频资源:`xml_presentations.get` 读取全文;`xml_presentation.slide.create/delete/get/replace` 管理单页。
265
+ 没有 Shortcut 覆盖时使用原生 API。高频资源:`slides +xml-get` 读取全文;`xml_presentation.slide.create/delete/get/replace` 管理单页。
255
266
 
256
267
  ```bash
257
268
  lark-cli schema slides.<resource>.<method> # 调用 API 前必须先查看参数结构
@@ -262,7 +273,7 @@ lark-cli slides <resource> <method> [flags] # 调用 API
262
273
 
263
274
  ## 核心规则
264
275
 
265
- 1. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;风格和大纲只能作为规划输入,不能绕过规划层
276
+ 1. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;模板、风格和大纲只能作为规划输入,不能绕过规划层
266
277
  2. **创建流程**:简单短 XML(1-3 页、结构简单、特殊字符少)可用 `slides +create --slides '[...]'` 一步创建;复杂内容、含图片/中文大段文本/嵌套引号/较多特殊字符,或超过 10 页时,默认先 `slides +create` 创建空白 PPT,再用 `xml_presentation.slide.create` 逐页添加
267
278
  3. **`<slide>` 直接子元素只有 `<style>`、`<data>`、`<note>`**:文本和图形必须放在 `<data>` 内
268
279
  4. **文本通过 `<content>` 表达**:必须用 `<content><p>...</p></content>`,不能把文字直接写在 shape 内
@@ -6,8 +6,7 @@
6
6
 
7
7
  ## Core Rules
8
8
 
9
- - `asset_need` is metadata only. It can guide page design, but it must not require web search, local download, media upload, or external tools.
10
- - Every planned asset must include a fallback visual plan so the slide can be generated with XML shapes, text, arrows, tables, simple charts, whiteboard diagrams, or placeholder regions.
9
+ - Every planned asset must include a fallback visual plan. The fallback can use native charts, tables, whiteboard diagrams, placeholder regions, or XML shapes, text, and arrows as appropriate.
11
10
  - Asset needs must serve the page's `key_message` and `visual_focus`. Do not add decorative assets that do not clarify the page.
12
11
  - Prefer a few high-value asset plans over one asset on every page. For a 6-page technical or business deck, plan assets on at least 3 pages when the content allows.
13
12
  - If a real local asset already exists or the user provides one, it can be used through the normal media-upload workflow. Still keep `fallback_if_missing` in the plan.
@@ -43,7 +42,7 @@ For a page without a meaningful asset need, use:
43
42
  - `architecture_diagram`: system components, data flow, dependency map, or model structure.
44
43
  - `icon`: small semantic symbol for a concept, step, role, or status.
45
44
  - `logo`: brand, product, team, or customer mark.
46
- - `chart`: line, bar, pie, radar, area, or combo data visual. Note: `<chart>` does not support funnel or scatter — map those to `<whiteboard>` SVG at generation time.
45
+ - `chart`: column, bar, line, area, radar, pie, doughnut/ring, or combo data visual. Note: `<chart>` does not support funnel or scatter — map those to `<whiteboard>` SVG at generation time.
47
46
  - `infographic`: composed visual explanation, usually combining labels, numbers, and simple shapes.
48
47
  - `screenshot`: product UI, terminal output, workflow state, or page capture.
49
48
  - `flow_diagram`: process, sequence, decision tree, or mechanism diagram.
@@ -64,11 +63,23 @@ Match asset type to slide role:
64
63
 
65
64
  `suggested_query` is only a future lookup hint. Write it as a short phrase a human or later workflow could search, but do not execute the search unless the user separately requests real assets.
66
65
 
66
+ For `asset_type: "chart"`:
67
+
68
+ - If the visual is a supported standard data chart — column, bar, line, area, radar, pie, doughnut/ring, or combo — `fallback_if_missing` must still render as a native `<chart>`.
69
+ - Do not imitate supported standard data visuals with manual drawing primitives or `<whiteboard>`.
70
+ - Choose the data source explicitly:
71
+ - `user_provided`: when the user provides concrete values, tables, CSV, or metric lists, use those values and do not replace them with mock data.
72
+ - `mock_placeholder`: when the user asks for a placeholder, template, example, or chart position to replace later, use mock data in a native `<chart>`.
73
+ - `mock_required_by_intent`: when the user does not provide concrete values but asks for data expression, charts, trends, comparisons, or distributions, use mock data in a native `<chart>`.
74
+ - Mock data must be labeled as `模拟数据,仅占位,待替换真实数据` or equivalent. Do not present mock values as facts.
75
+ - Manual drawing fallbacks are allowed only for unsupported chart types such as scatter, funnel, waterfall-like custom visuals, or decorative non-data visuals.
76
+
67
77
  `fallback_if_missing` must be concrete enough to turn into XML, for example:
68
78
 
69
79
  - "Draw a simplified attention matrix with 5 token labels, semi-transparent cells, and arrows to output token."
70
80
  - "Use three grouped boxes with arrows from client to gateway to service; add small protocol labels."
71
- - "Render a mini bar chart with 4 bars using shapes and value labels."
81
+ - "Render a native `<chart>` using the user-provided series."
82
+ - "Render a native `<chart>` with mock placeholder values and label it as `模拟数据,仅占位,待替换真实数据`."
72
83
  - "Use a bordered placeholder panel with product area labels, not an empty image."
73
84
 
74
85
  Weak fallbacks to avoid:
@@ -118,7 +129,7 @@ Business comparison page:
118
129
  When generating XML:
119
130
 
120
131
  1. If an asset exists and the workflow supports it, place it in the planned visual region.
121
- 2. If no asset exists, immediately render `fallback_if_missing` with XML-native shapes, text, lines, arrows, tables, whiteboard diagrams, or chart-like elements.
132
+ 2. If no asset exists, immediately render `fallback_if_missing` with the planned XML-native element type. Supported standard data visuals still use native `<chart>`; other fallbacks may use shapes, text, lines, arrows, tables, whiteboard diagrams, or placeholder panels.
122
133
  3. Size the fallback to satisfy `visual_focus`; it should be a real page element, not a tiny decoration.
123
134
  4. Keep text-density limits. Do not compensate for missing assets by adding long bullet text.
124
135
  5. After creation, fetch the presentation and verify asset pages are not blank and that each planned fallback is visible when no real asset was used.