@amaster.ai/pi-lark 0.1.6 → 0.1.7

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 (178) hide show
  1. package/README.md +5 -1
  2. package/dist/config.d.ts +1 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +2 -2
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/index.js.map +1 -1
  9. package/package.json +3 -3
  10. package/skills/lark-apps/SKILL.md +24 -12
  11. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  12. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  13. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  14. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  15. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  16. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  17. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  18. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  19. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  20. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  21. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  22. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  23. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  24. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  25. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  26. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  27. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  28. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  29. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  30. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  31. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  32. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  33. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  34. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  35. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  36. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  37. package/skills/lark-apps/references/lark-apps-cache.md +61 -0
  38. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  39. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  40. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  41. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  42. package/skills/lark-apps/references/lark-apps-file.md +2 -2
  43. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  44. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  45. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  46. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  47. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  48. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  49. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  50. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  51. package/skills/lark-base/SKILL.md +20 -13
  52. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  53. package/skills/lark-base/references/lark-base-data-query.md +11 -4
  54. package/skills/lark-base/references/lark-base-field-create.md +4 -0
  55. package/skills/lark-base/references/lark-base-field-json.md +4 -4
  56. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  57. package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
  58. package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
  59. package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
  60. package/skills/lark-base/references/lark-base-form-submit.md +16 -7
  61. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  62. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  63. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  64. package/skills/lark-base/references/lark-base-role-guide.md +11 -0
  65. package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
  66. package/skills/lark-base/references/role-config.md +31 -5
  67. package/skills/lark-calendar/SKILL.md +14 -8
  68. package/skills/lark-calendar/references/lark-calendar-create.md +6 -5
  69. package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
  70. package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
  71. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
  72. package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
  73. package/skills/lark-calendar/references/lark-calendar-update.md +10 -4
  74. package/skills/lark-contact/SKILL.md +19 -3
  75. package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
  76. package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
  77. package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
  78. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
  79. package/skills/lark-doc/references/lark-doc-xml.md +4 -3
  80. package/skills/lark-drive/SKILL.md +25 -45
  81. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
  82. package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
  83. package/skills/lark-drive/references/lark-drive-apply-permission.md +2 -2
  84. package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
  85. package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
  86. package/skills/lark-drive/references/lark-drive-comment-location.md +9 -15
  87. package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
  88. package/skills/lark-drive/references/lark-drive-download.md +5 -1
  89. package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
  90. package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
  91. package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
  92. package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
  93. package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
  94. package/skills/lark-drive/references/lark-drive-preview.md +11 -1
  95. package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
  96. package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
  97. package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
  98. package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
  99. package/skills/lark-drive/references/lark-drive-search.md +7 -1
  100. package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
  101. package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
  102. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  103. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
  104. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
  105. package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
  106. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  107. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  108. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  109. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  110. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  111. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  112. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  113. package/skills/lark-event/SKILL.md +1 -0
  114. package/skills/lark-event/references/lark-event-application.md +38 -0
  115. package/skills/lark-im/SKILL.md +1 -1
  116. package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
  117. package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
  118. package/skills/lark-im/references/card/resource/icons.md +14 -0
  119. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  120. package/skills/lark-okr/SKILL.md +71 -26
  121. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  122. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  123. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  124. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  125. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  126. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  127. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  128. package/skills/lark-slides/SKILL.md +115 -68
  129. package/skills/lark-slides/references/asset-planning.md +6 -4
  130. package/skills/lark-slides/references/iconpark.md +2 -2
  131. package/skills/lark-slides/references/lark-slides-create.md +16 -8
  132. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  133. package/skills/lark-slides/references/lark-slides-media-upload.md +2 -3
  134. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  135. package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
  136. package/skills/lark-slides/references/lark-slides-screenshot.md +4 -4
  137. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
  138. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
  139. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  140. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  141. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
  142. package/skills/lark-slides/references/planning-layer.md +11 -10
  143. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
  144. package/skills/lark-slides/references/slides_xml_schema_definition.xml +492 -76
  145. package/skills/lark-slides/references/troubleshooting.md +25 -7
  146. package/skills/lark-slides/references/validation-checklist.md +53 -16
  147. package/skills/lark-slides/references/visual-planning.md +25 -22
  148. package/skills/lark-slides/references/xml-schema-quick-ref.md +281 -45
  149. package/skills/lark-slides/scripts/sxsd_validator.py +908 -0
  150. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1650 -165
  151. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +3139 -513
  152. package/skills/lark-task/SKILL.md +7 -0
  153. package/skills/lark-task/references/lark-task-complete.md +6 -2
  154. package/skills/lark-task/references/lark-task-create.md +9 -0
  155. package/skills/lark-task/references/lark-task-update.md +6 -2
  156. package/skills/lark-whiteboard/SKILL.md +13 -12
  157. package/skills/lark-whiteboard/elements/layout.md +1 -1
  158. package/skills/lark-whiteboard/elements/schema.md +2 -2
  159. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  160. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  161. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
  162. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  163. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  164. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  165. package/skills/lark-whiteboard/routes/svg.md +11 -6
  166. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  167. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  168. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  169. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  170. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  171. package/skills/lark-wiki/SKILL.md +1 -0
  172. package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
  173. package/skills/lark-slides/references/examples.md +0 -91
  174. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  175. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  176. package/skills/lark-slides/references/slide-templates.md +0 -201
  177. package/skills/lark-slides/references/slides_demo.xml +0 -226
  178. package/skills/lark-slides/references/xml-format-guide.md +0 -433
@@ -1,12 +1,12 @@
1
1
  # PPT Template Rewrite Principles
2
2
 
3
- 本页只约束“用户指定 PPT 模板、底稿、已有 PPTX/PDF/Slides,并要求基于它二次创作”的场景。核心原则:模板不是风格参考,而是必须沿用的编辑底稿。
3
+ 核心原则:模板不是风格参考,而是必须沿用的编辑底稿。
4
4
 
5
5
  ## Import First
6
6
 
7
- 用户指定 PPT 模板时,先把模板导入成 Lark Slides。后续写入目标是导入后的 Slides,不是新建一个脱离模板的 deck,也不是先在本地重画 PPTX 再导入。
7
+ 如果用户提供的模板是 PPTX 格式,先把模板导入成 Lark Slides。后续写入目标是导入后的 Slides,不是新建一个脱离模板的 deck,也不是先在本地重画 PPTX 再导入。
8
8
 
9
- 直接使用以下命令,不需要先加载 `lark-drive` skill:
9
+ 直接使用以下命令,不需要先加载 `lark-drive` Skill:
10
10
 
11
11
  ```bash
12
12
  lark-cli drive +import --as user --file "<template.pptx>" --type slides --json
@@ -18,13 +18,9 @@ lark-cli drive +import --as user --file "<template.pptx>" --type slides --json
18
18
  lark-cli drive +task_result --scenario import --ticket <TICKET>
19
19
  ```
20
20
 
21
- 导入后必须回读 Slides 内容,理解每页的真实版式、字体、层级、图片、图表、shape、表格和文本容器。回读结果是模板二创的事实来源。
22
-
23
21
  ## Read Before Editing
24
22
 
25
- 编辑任何 PPT 页面前,必须先阅读该页面。
26
-
27
- 如果当前上下文中没有该页内容,必须重新读取页面;这里的“当前上下文”不包含 System Prompt。不能只凭记忆、文件名、缩略图印象或模板整体风格判断来编辑具体页面。
23
+ 导入后必须阅读 Slides 内容,理解每页的真实版式、字体、层级、图片、图表、shape、表格和文本容器。阅读结果是后续编辑的事实来源。
28
24
 
29
25
  阅读页面时至少判断:
30
26
 
@@ -47,7 +43,7 @@ lark-cli drive +task_result --scenario import --ticket <TICKET>
47
43
 
48
44
  ## Preserve Design
49
45
 
50
- 模板二创必须严格沿用原版式和字体,只改内容,不做设计。
46
+ 编辑必须严格沿用原版式和字体,只改内容,不做设计。
51
47
 
52
48
  默认保留:
53
49
 
@@ -56,7 +52,7 @@ lark-cli drive +task_result --scenario import --ticket <TICKET>
56
52
  - 背景图、图片、logo、图表、表格、装饰形状、线条、图标和页面结构。
57
53
  - 模板中不同页型之间的差异。
58
54
 
59
- 不要把模板页改造成统一的通用卡片、白板、标题栏、三栏、2x2 卡片或大面积遮罩。不要把模板当作背景图后另起一套设计系统。
55
+ 不要把模板页改造成统一的通用卡片、空白板式布局、标题栏、三栏、2x2 卡片或大面积遮罩。不要把模板当作背景图后另起一套设计系统。
60
56
 
61
57
  ## Content Only
62
58
 
@@ -86,4 +82,4 @@ lark-cli drive +task_result --scenario import --ticket <TICKET>
86
82
 
87
83
  发现文字溢出时,优先凝练文字或缩减字号。发现遮挡时,调整 shape 顺序、局部位置或复用原有空白区域解决。只有在这些方法都不能满足内容表达时,才做局部新增或删除。
88
84
 
89
- 模板二创的完成标准不是“生成了一套看起来统一的新 PPT”,而是“原模板的版式、字体和视觉结构仍清晰存在,内容已经被准确替换,并且回读后没有溢出和遮挡”。
85
+ 完成标准是“原模板的版式、字体和视觉结构仍清晰存在,内容已经被准确替换,并且回读后没有溢出和遮挡”。
@@ -1,7 +1,5 @@
1
1
  # slides +replace-slide(块级替换 / 插入)
2
2
 
3
- > **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
4
-
5
3
  对指定 slide 做块级替换或插入。编辑已有 PPT 的主路径——`slide_id` 不变、页序不动、只影响被指定的块。
6
4
 
7
5
  相比直接调 `xml_presentation.slide.replace`,这个 shortcut 的四个额外价值:
@@ -88,7 +86,6 @@ lark-cli slides +replace-slide --as user \
88
86
  | `<table>` | 表格 | 整表替换会**重建内部 td id**,旧 td block_id 立即失效 |
89
87
  | `<td>` | 单元格局部替换 | 只能 `block_replace`,不能 `block_insert`;`block_id` 必须是最新 `slide.get` 拿到的 td id |
90
88
  | `<chart>` | 图表(line/bar/column/pie/area/radar/combo) | 必须嵌 `<chartPlotArea>` + `<chartData>` + `<dim1>/<dim2>/<chartField>` |
91
- | `<whiteboard>` | 画板(SVG 或 Mermaid) | 内嵌 `<svg>` 或 `<mermaid>`;`slide.get` 返回结构不含内部数据,但可直接写完整新 XML 做 `block_replace` 覆盖;详见 [`lark-slides-whiteboard.md`](lark-slides-whiteboard.md) |
92
89
 
93
90
  **不可作为根元素**:
94
91
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  获取幻灯片页面截图并保存为本地图片文件。默认用于已存在 PPT 页面截图;传入 `--content` 时用于直接渲染单个 `<slide>` XML 片段预览。本 shortcut 会在 CLI 进程内解码并写入文件,stdout 只返回文件路径、大小、页面 ID 等元信息,避免把图片 Base64 输出给模型。
6
6
 
7
- 注意:该截图能力受应用白名单限制,绝大多数应用不可用。若截图失败,记录错误即可;不要引导用户申请 `slides:presentation:screenshot` 权限。后续按 `validation-checklist.md` 走非截图验证,不要声称已完成截图验收。
7
+ 截图失败则降级到 XML 读回、结构 lint等非截图检查路径。
8
8
 
9
9
  ## 命令
10
10
 
@@ -26,8 +26,8 @@ lark-cli slides +screenshot --as user \
26
26
  | 参数 | 必需 | 说明 |
27
27
  |------|------|------|
28
28
  | `--presentation` | list 模式必需 | `xml_presentation_id`、`/slides/` URL,或解析后为 slides 的 `/wiki/` URL。传 `--content` 时不能使用 |
29
- | `--slide-id` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面 short ID;多页截图时重复传入;一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
30
- | `--slide-number` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面页号;多页截图时重复传入;一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
29
+ | `--slide-id` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面 short ID;多页截图时重复传入,或用逗号分隔一次传多个(如 `--slide-id slide_1,slide_2`);一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
30
+ | `--slide-number` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面页号;多页截图时重复传入,或用逗号分隔一次传多个(如 `--slide-number 1,2,3`);一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
31
31
  | `--content` | render 模式必需 | 要直接渲染的 `<slide>` XML 片段;支持直接传值、`@file`、`-` stdin。传入后不能同时传 `--slide-id` / `--slide-number` |
32
32
  | `--output-dir` | 否 | 输出目录,默认 `.lark-slides/screenshots`;必须是当前目录内的相对路径 |
33
33
  | `--output-name` | 否 | render 模式的输出文件名 stem;未指定时优先用返回的 `slide_id`,否则用 `rendered-slide`。若目标文件已存在,会自动追加递增后缀避免覆盖 |
@@ -44,7 +44,7 @@ lark-cli slides +screenshot --as user \
44
44
 
45
45
  ### 多页截图
46
46
 
47
- 一次不要超过 10 页;如需更多页面,分批调用。
47
+ 一次不要超过 10 页;如需更多页面,分批调用。可以重复传参,也可以用逗号分隔一次传多个:
48
48
 
49
49
  ```bash
50
50
  lark-cli slides +screenshot --as user \
@@ -0,0 +1,219 @@
1
+ # lark-slides xml_presentation.slide create
2
+
3
+ ## 用途
4
+
5
+ 在指定的 XML 演示文稿中创建新的幻灯片页面,通常用于给 `slides +create` 创建出的空白 PPT 逐页补充内容。
6
+
7
+ ## 命令
8
+
9
+ ```bash
10
+ lark-cli slides xml_presentation.slide create --as user --params '<json_params>' --data '<json_data>'
11
+ ```
12
+
13
+ ## 参数说明
14
+
15
+ | 参数 | 类型 | 必需 | 说明 |
16
+ |------|------|------|------|
17
+ | `--params` | JSON string | 是 | 路径参数与查询参数 |
18
+ | `--data` | JSON string | 是 | 请求体,包含新页面内容 |
19
+
20
+ ### params JSON 结构
21
+
22
+ ```json
23
+ {
24
+ "xml_presentation_id": "slides_example_presentation_id",
25
+ "revision_id": -1,
26
+ "tid": "idMock"
27
+ }
28
+ ```
29
+
30
+ | 字段 | 类型 | 必需 | 说明 |
31
+ |------|------|------|------|
32
+ | `xml_presentation_id` | string | 是 | 目标演示文稿的唯一标识符 |
33
+ | `revision_id` | integer | 否 | 演示文稿版本号,`-1` 表示最新版本 |
34
+ | `tid` | string | 否 | 锁的事务 ID |
35
+
36
+ ### data JSON 结构
37
+
38
+ ```json
39
+ {
40
+ "slide": {
41
+ "slide_id": "slide_example_id",
42
+ "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\">...</slide>"
43
+ },
44
+ "before_slide_id": "slide_before_target"
45
+ }
46
+ ```
47
+
48
+ | 字段 | 类型 | 必需 | 说明 |
49
+ |------|------|------|------|
50
+ | `slide.slide_id` | string | 否 | 幻灯片页面 short ID |
51
+ | `slide.content` | string | 否 | 新幻灯片的 XML 内容 |
52
+ | `before_slide_id` | string | 否 | 插入到指定页面之前 |
53
+
54
+ ## slide XML 结构
55
+
56
+ `slide.content` 是一个完整的 `<slide>` 元素,遵循 SML 2.0 Schema:
57
+
58
+ ```xml
59
+ <slide xmlns="http://www.larkoffice.com/sml/2.0">
60
+ <data>
61
+ <shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
62
+ <content textType="title">
63
+ <p>标题</p>
64
+ </content>
65
+ </shape>
66
+ </data>
67
+ </slide>
68
+ ```
69
+
70
+ 详细格式请参考 [xml-schema-quick-ref.md](xml-schema-quick-ref.md)。
71
+
72
+ ## 使用示例
73
+
74
+ ### 在末尾添加幻灯片
75
+
76
+ ```bash
77
+ lark-cli slides xml_presentation.slide create --as user --params '{
78
+ "xml_presentation_id": "slides_example_presentation_id"
79
+ }' --data '{
80
+ "slide": {
81
+ "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新页面标题</p></content></shape><shape type=\"text\" topLeftX=\"80\" topLeftY=\"200\" width=\"800\" height=\"180\"><content textType=\"body\"><p>内容文本</p></content></shape></data></slide>"
82
+ }
83
+ }'
84
+ ```
85
+
86
+ ### 在指定页面前插入幻灯片
87
+
88
+ ```bash
89
+ lark-cli slides xml_presentation.slide create --as user --params '{
90
+ "xml_presentation_id": "slides_example_presentation_id"
91
+ }' --data '{
92
+ "slide": {
93
+ "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>插入的标题页</p></content></shape></data></slide>"
94
+ },
95
+ "before_slide_id": "slide_before_target"
96
+ }'
97
+ ```
98
+
99
+ ### 带图形元素的幻灯片
100
+
101
+ ```bash
102
+ lark-cli slides xml_presentation.slide create --as user --params '{
103
+ "xml_presentation_id": "slides_example_presentation_id"
104
+ }' --data '{
105
+ "slide": {
106
+ "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"520\" height=\"120\"><content textType=\"title\"><p>数据展示</p></content></shape><shape type=\"rect\" topLeftX=\"700\" topLeftY=\"100\" width=\"200\" height=\"150\"><fill><fillColor color=\"rgb(100, 149, 237)\"/></fill></shape></data></slide>"
107
+ }
108
+ }'
109
+ ```
110
+
111
+ ### 从文件读取 XML
112
+
113
+ ```bash
114
+ # 先创建 slide.xml 文件
115
+ cat > slide.xml << 'EOF'
116
+ <slide xmlns="http://www.larkoffice.com/sml/2.0">
117
+ <data>
118
+ <shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
119
+ <content textType="title">
120
+ <p>从文件加载</p>
121
+ </content>
122
+ </shape>
123
+ <shape type="text" topLeftX="80" topLeftY="200" width="800" height="180">
124
+ <content textType="body">
125
+ <p>这是从文件读取的幻灯片内容</p>
126
+ </content>
127
+ </shape>
128
+ </data>
129
+ </slide>
130
+ EOF
131
+
132
+ # 然后创建幻灯片
133
+ lark-cli slides xml_presentation.slide create --as user \
134
+ --params '{"xml_presentation_id":"slides_example_presentation_id"}' \
135
+ --data "$(jq -n --arg content "$(cat slide.xml)" '{slide:{content:$content}}')"
136
+ ```
137
+
138
+ ## 返回值
139
+
140
+ 成功时返回创建的幻灯片信息:
141
+
142
+ ```json
143
+ {
144
+ "code": 0,
145
+ "data": {
146
+ "slide_id": "slide_example_id",
147
+ "revision_id": 100
148
+ },
149
+ "msg": "success"
150
+ }
151
+ ```
152
+
153
+ ### 返回字段说明
154
+
155
+ | 字段 | 类型 | 说明 |
156
+ |------|------|------|
157
+ | `data.slide_id` | string | 新幻灯片的唯一标识 |
158
+ | `data.revision_id` | integer | 演示文稿最新版本号 |
159
+
160
+ ## slide 元素可用子元素
161
+
162
+ | 元素 | 说明 |
163
+ |------|------|
164
+ | `<style>` | 页面样式(背景填充) |
165
+ | `<data>` | 图形元素容器(shape、img、table、chart 等) |
166
+ | `<note>` | 演讲者备注 |
167
+
168
+ > [!IMPORTANT]
169
+ > **本地图片必须先上传**:`xml_presentation.slide.create` 不识别 `@./local.png` 占位符(那是 `+create --slides` 的语法糖)。直接调本接口添加带图新页时,必须先用 [`slides +media-upload`](lark-slides-media-upload.md) 拿到 `file_token`,再写进 `<img src="<file_token>">`。
170
+ >
171
+ > 如果是从零开始建带图 PPT,**强烈建议改用 [`slides +create --slides '[...]'`](lark-slides-create.md#本地图片path-占位符)** 一步搞定(自动上传 + 替换 token)。
172
+
173
+ ## 常见错误
174
+
175
+ | 错误码 | 含义 | 解决方案 |
176
+ |--------|------|----------|
177
+ | 404 | 演示文稿不存在 | 检查 `xml_presentation_id` 是否正确 |
178
+ | 400 | XML 格式错误 | 检查 `slide.content` 是否是完整 `<slide>` 元素 |
179
+ | 400 | 请求体结构错误 | 检查是否按 `slide.content` 和 `before_slide_id` 包装 |
180
+ | 403 | 权限不足 | 检查是否拥有 `slides:presentation:update` 或 `slides:presentation:write_only` scope |
181
+ | 3350001 | XML 非 well-formed 或服务端参数校验失败 | 优先检查未转义字符:文本 `Q&A -> Q&amp;A`,文本 `<` / `>` 写成 `&lt;` / `&gt;`,属性 URL `a=1&b=2 -> a=1&amp;b=2` |
182
+
183
+ ## 注意事项
184
+
185
+ 1. **执行前必做**: 使用 `lark-cli schema slides.xml_presentation.slide.create` 查看最新的参数结构
186
+ 2. **slide.content 格式**: 必须是完整的 `<slide>` 元素,不是整个 presentation
187
+ 3. **命名空间建议**: 协议标准写法应带 `xmlns`,例如 `<slide xmlns="http://www.larkoffice.com/sml/2.0">`;当前服务端实现可能兼容不带 `xmlns` 的输入,但不作为协议保证
188
+ 4. **fill / border 写法**: 颜色填充使用 `<fill><fillColor color="..."/></fill>`,边框常用 `<border color="..." width="2"/>`
189
+ 5. **插入位置**: 通过 `before_slide_id` 指定插入目标,而不是用 `position`
190
+ 6. **JSON 转义**: 如果直接内联 XML,需要正确转义双引号
191
+ 7. **建议**: 先使用 `slides +xml-get` 获取现有结构,再添加新页面
192
+
193
+ ## 批量添加建议
194
+
195
+ 如果需要添加多张幻灯片,建议先明确每一页的 `before_slide_id`,或直接按最终顺序逐页追加:
196
+
197
+ ```bash
198
+ #!/bin/bash
199
+
200
+ PRESENTATION_ID="slides_example_presentation_id"
201
+
202
+ declare -a slides=(
203
+ '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 1</p></content></shape></data></slide>'
204
+ '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 2</p></content></shape></data></slide>'
205
+ '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 3</p></content></shape></data></slide>'
206
+ )
207
+
208
+ for slide_xml in "${slides[@]}"; do
209
+ payload=$(jq -n --arg content "$slide_xml" '{slide:{content:$content}}')
210
+ lark-cli slides xml_presentation.slide create --as user --params "{\"xml_presentation_id\":\"$PRESENTATION_ID\"}" --data "$payload"
211
+ done
212
+ ```
213
+
214
+ ## 相关命令
215
+
216
+ - [slides +create](lark-slides-create.md) - 创建空白 PPT
217
+ - [slides +xml-get](lark-slides-xml-presentations-get.md) - 读取 PPT 内容并保存到本地文件
218
+ - [xml_presentation.slide delete](lark-slides-xml-presentation-slide-delete.md) - 删除幻灯片页面
219
+ - [xml-schema-quick-ref.md](xml-schema-quick-ref.md) - XML Schema 快速参考
@@ -64,11 +64,11 @@ lark-cli slides xml_presentation.slide delete --as user --params '{"xml_presenta
64
64
 
65
65
  ```json
66
66
  {
67
- "ok": true,
68
- "identity": "user",
67
+ "code": 0,
69
68
  "data": {
70
69
  "revision_id": 100
71
- }
70
+ },
71
+ "msg": "success"
72
72
  }
73
73
  ```
74
74
 
@@ -121,5 +121,6 @@ done
121
121
 
122
122
  ## 相关命令
123
123
 
124
- - [slides +create](lark-slides-create.md) - 创建 PPT / 添加幻灯片页面
125
- - [slides +xml-get](lark-slides-xml-get.md) - 读取 PPT 内容并保存到本地文件
124
+ - [slides +create](lark-slides-create.md) - 创建空白 PPT
125
+ - [slides +xml-get](lark-slides-xml-presentations-get.md) - 读取 PPT 内容并保存到本地文件
126
+ - [xml_presentation.slide create](lark-slides-xml-presentation-slide-create.md) - 添加幻灯片页面
@@ -94,7 +94,7 @@ lark-cli slides xml_presentation.slide get --as user --params '{
94
94
  ## 注意事项
95
95
 
96
96
  1. **执行前必做**:`lark-cli schema slides.xml_presentation.slide.get` 查看最新参数结构
97
- 2. **block_id 提取**:返回 XML 里每个顶层块(shape、img、table、chart、whiteboard 等)的 `id` 属性即为 `block_id`,通常是 3 字符短码,例如 `<shape id="bUn" ...>`。用以下命令列出当前页所有 block_id:
97
+ 2. **block_id 提取**:返回 XML 里每个顶层块(shape、img、table、chart 等)的 `id` 属性即为 `block_id`,通常是 3 字符短码,例如 `<shape id="bUn" ...>`。用以下命令列出当前页所有 block_id:
98
98
 
99
99
  ```bash
100
100
  lark-cli slides xml_presentation.slide get --as user \
@@ -106,5 +106,5 @@ lark-cli slides xml_presentation.slide get --as user --params '{
106
106
 
107
107
  - [slides +replace-slide](lark-slides-replace-slide.md) — 块级替换 shortcut(推荐)
108
108
  - [xml_presentation.slide replace](lark-slides-xml-presentation-slide-replace.md) — 底层 replace API 参考
109
- - [slides +xml-get](lark-slides-xml-get.md) — 读整个 PPT 并保存到本地文件
109
+ - [slides +xml-get](lark-slides-xml-presentations-get.md) — 读整个 PPT 并保存到本地文件
110
110
  - [lark-slides-edit-workflows.md](lark-slides-edit-workflows.md) — 读-改-写闭环
@@ -173,13 +173,12 @@ lark-cli slides xml_presentation.slide replace --as user --params '{
173
173
  ## 注意事项
174
174
 
175
175
  1. **parts 原子事务**:任一条失败整批回滚,不会出现"前几条成功、后几条失败"的中间态。
176
- 2. **block_id 的获取**:`slide.get` 返回的 XML 里每个块(shape、img、table、chart、whiteboard 等)会带 3 位 short element ID,用这个值填 `block_id` / `insert_before_block_id`。
176
+ 2. **block_id 的获取**:`slide.get` 返回的 XML 里每个块(shape、img、table、chart 等)会带 3 位 short element ID,用这个值填 `block_id` / `insert_before_block_id`。
177
177
  3. **`<img>` 必须用 file_token**:不能用外链 URL——先 [`slides +media-upload`](lark-slides-media-upload.md) 拿 token。
178
178
  4. **不能字段级 patch**:要改一个块的某个属性(比如只改 `topLeftX`),得写整块新 XML 走 `block_replace`;API 不支持"只改一个字段"。
179
179
  5. **`block_replace` 要求 `replacement` 根元素带 `id="<block_id>"`**:底层 API 的硬约束,缺失会返回 3350001。推荐走 shortcut [`+replace-slide`](lark-slides-replace-slide.md)——它会自动把 `id` 注入到 `replacement` 根元素上,用户写 XML 时不用自己加。
180
180
  6. **`<shape>` 必须有 `<content/>` 子元素**:SML 2.0 schema 要求,缺失同样触发 3350001。shortcut [`+replace-slide`](lark-slides-replace-slide.md) 会自动注入 `<content/>`,直接调底层 API 需要自己加。
181
- 7. **`<whiteboard>` 返回结构不含内部数据**:`slide.get` 返回的 whiteboard 块只有外层标签和位置属性,SVG / Mermaid 内容不会随 XML 一起返回。但 `block_replace` 仍然可以强行覆盖——直接写入完整新 whiteboard XML 即可。
182
- 8. **执行前必做**:`lark-cli schema slides.xml_presentation.slide.replace` 查看最新参数结构。
181
+ 7. **执行前必做**:`lark-cli schema slides.xml_presentation.slide.replace` 查看最新参数结构。
183
182
 
184
183
  ## 相关命令
185
184
 
@@ -4,13 +4,66 @@
4
4
 
5
5
  读取飞书幻灯片(PPT)演示文稿的完整 XML 内容信息。
6
6
 
7
+ ## Shortcut
8
+
9
+ 使用 `slides +xml-get` shortcut,可以把 XML 保存到本地文件,避免终端输出被截断。
10
+
11
+
12
+ ```bash
13
+ lark-cli slides +xml-get --as user \
14
+ --presentation "slides_example_presentation_id" \
15
+ --output .lark-slides/plan/slides_example_presentation_id/readback.xml \
16
+ --json
17
+ ```
18
+
19
+ ### 参数说明
20
+
21
+ | 参数 | 类型 | 必需 | 说明 |
22
+ |------|------|------|------|
23
+ | `--presentation` | string | 是 | 演示文稿的唯一标识符 |
24
+ | `--revision-id` | integer | 否 | 版本号,`-1` 表示最新版本 |
25
+ | `--output` | string | 是 | 本地文件,必须使用相对路径 |
26
+ | `--remove-attr-id` | flag | 否 | 移除 XML id 属性后读取 |
27
+ | `--json` | flag | 是 | 必须按照 json 格式输出 |
28
+
29
+
30
+ ### 基础示例
31
+
32
+ ```bash
33
+ lark-cli slides +xml-get --as user \
34
+ --presentation "slides_example_presentation_id" \
35
+ --output .lark-slides/plan/slides_example_presentation_id/readback.xml \
36
+ --json
37
+ ```
38
+
39
+ ### 指定版本读取
40
+
41
+ ```bash
42
+ lark-cli slides +xml-get --as user \
43
+ --presentation "slides_example_presentation_id" \
44
+ --revision-id 10 \
45
+ --output .lark-slides/plan/slides_example_presentation_id/readback-r10.xml \
46
+ --json
47
+ ```
48
+
49
+ ### 移除 XML id 属性后读取
50
+
51
+ ```bash
52
+ lark-cli slides +xml-get --as user \
53
+ --presentation "slides_example_presentation_id" \
54
+ --remove-attr-id \
55
+ --output .lark-slides/plan/slides_example_presentation_id/readback-no-id.xml \
56
+ --json
57
+ ```
58
+
59
+
7
60
  ## 底层原生命令形态
8
61
 
9
62
  ```bash
10
63
  lark-cli slides xml_presentations get --as user --params '<json_params>'
11
64
  ```
12
65
 
13
- ## 参数说明
66
+ ### 参数说明
14
67
 
15
68
  | 参数 | 类型 | 必需 | 说明 |
16
69
  |------|------|------|------|
@@ -30,30 +83,8 @@ lark-cli slides xml_presentations get --as user --params '<json_params>'
30
83
  | `xml_presentation_id` | string | 是 | 演示文稿的唯一标识符 |
31
84
  | `revision_id` | integer | 否 | 版本号,`-1` 表示最新版本 |
32
85
 
33
- ## 使用示例
34
86
 
35
- ### 基础示例
36
-
37
- ```bash
38
- lark-cli slides xml_presentations get --as user \
39
- --params '{"xml_presentation_id":"slides_example_presentation_id","revision_id":-1}'
40
- ```
41
-
42
- ### 指定版本读取
43
-
44
- ```bash
45
- lark-cli slides xml_presentations get --as user \
46
- --params '{"xml_presentation_id":"slides_example_presentation_id","revision_id":10}'
47
- ```
48
-
49
- ### 移除 XML id 属性后读取
50
-
51
- ```bash
52
- lark-cli slides xml_presentations get --as user \
53
- --params '{"xml_presentation_id":"slides_example_presentation_id","revision_id":-1,"remove_attr_id":true}'
54
- ```
55
-
56
- ## 返回值
87
+ ### 返回值
57
88
 
58
89
  成功时返回演示文稿的完整信息:
59
90
 
@@ -79,7 +110,7 @@ lark-cli slides xml_presentations get --as user \
79
110
  | `data.xml_presentation.revision_id` | integer | 版本号 |
80
111
  | `data.xml_presentation.content` | string | XML 格式的完整内容 |
81
112
 
82
- ## 常见错误
113
+ ### 常见错误
83
114
 
84
115
  | 错误码 | 含义 | 解决方案 |
85
116
  |--------|------|----------|
@@ -87,13 +118,17 @@ lark-cli slides xml_presentations get --as user \
87
118
  | 403 | 权限不足 | 检查是否拥有 `slides:presentation:read` scope,或是否有访问权限 |
88
119
  | 400 | 参数格式错误 | 确保 `--params` 是合法的 JSON 字符串 |
89
120
 
90
- ## 注意事项
91
121
 
92
- 1. 直接调用底层 API 前,使用 `lark-cli schema slides.xml_presentations.get` 查看最新的参数结构
93
- 2. 返回的 XML 在 `data.xml_presentation.content` 字段中
94
- 3. 如果只需要部分信息,可以使用 `jq` 等工具过滤返回结果
122
+ ### 注意事项
123
+
124
+ 1. lark-slides 工作流默认使用 `slides +xml-get`;只有必须直接调底层 API 时,才使用
125
+ 2. 直接调用底层 API 前,使用 `lark-cli schema slides.xml_presentations.get` 查看最新的参数结构
126
+ 3. 返回的 XML 在 `data.xml_presentation.content` 字段中
127
+ 4. 如果只需要部分信息,可以使用 `jq` 等工具过滤返回结果
128
+ 5. 不要在普通工作流中把完整 XML 打到终端;用 `slides +xml-get --output` 保存文件
95
129
 
96
130
  ## 相关命令
97
131
 
98
- - [slides +create](lark-slides-create.md) - 创建 PPT / 添加幻灯片页面
132
+ - [slides +create](lark-slides-create.md) - 创建空白 PPT
133
+ - [xml_presentation.slide create](lark-slides-xml-presentation-slide-create.md) - 添加幻灯片页面
99
134
  - [xml_presentation.slide delete](lark-slides-xml-presentation-slide-delete.md) - 删除幻灯片页面
@@ -12,7 +12,8 @@
12
12
  4. 写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`。
13
13
  5. 读取 `xml-schema-quick-ref.md`、`visual-planning.md` 和 `asset-planning.md`。
14
14
  6. 按 plan、visual planning 和 asset planning 规则逐页生成 XML,把 `layout_type`、`visual_focus`、`text_density` 转成具体页面几何和文本量约束,并把缺失素材转成可执行兜底视觉。
15
- 7. 创建 PPT 后用 `slides +xml-get` 回读,核对页面数量、关键元素和 plan 到 XML 的对应关系。
15
+ 7. 创建 PPT 后用 `slides +xml-get` 回读,核对页面数量、关键元素和 plan 到 XML 的对应关系,空白 PPT 中没有 slide 元素。
16
+
16
17
 
17
18
  ## Plan Path
18
19
 
@@ -57,7 +58,7 @@ Exception:
57
58
  "theme_style": "Clean business style, light background, restrained blue accent, strong visual hierarchy.",
58
59
  "visual_system": {
59
60
  "background_strategy": "Content pages use one light base; cover and closing may use a related dark treatment with the same accent system.",
60
- "motif": "A reusable left accent bar and consistent card/header treatments.",
61
+ "motif": "Consistent card style and numbered anchors.",
61
62
  "color_roles": {
62
63
  "primary": "Used for the dominant structural motif and about 60-70% of visual weight.",
63
64
  "secondary": "Used for grouped regions, comparison panels, or supporting categories.",
@@ -87,7 +88,7 @@ Exception:
87
88
  "asset_type": "logo",
88
89
  "purpose": "Signal product or team identity on the opening page.",
89
90
  "suggested_query": "product logo",
90
- "fallback_if_missing": "Use a small text badge and abstract shape motif instead of a real logo."
91
+ "fallback_if_missing": "Create a close-enough image with the image generation tool instead of a real logo."
91
92
  },
92
93
  "text_density": "low",
93
94
  "speaker_intent": "Frame the decision and establish the deck's point of view."
@@ -137,7 +138,7 @@ Optional slide fields:
137
138
  }
138
139
  ```
139
140
 
140
- When `chart_contract.required == true`, XML generation must produce a `<chart>` element on that slide. A shape, line, polyline, or whiteboard approximation does not satisfy the plan.
141
+ When `chart_contract.required == true`, XML generation must produce a `<chart>` element on that slide. A shape, line, or polyline approximation does not satisfy the plan.
141
142
 
142
143
  `data_source` must be one of:
143
144
 
@@ -181,7 +182,7 @@ Text density must be realistic for the planned geometry. If a page needs long ti
181
182
  Before generating XML, define a visual system that can survive the whole deck:
182
183
 
183
184
  - `background_strategy`: specify the default background for normal content pages, and which page roles may intentionally differ. Do not let pages drift through near-identical but inconsistent background colors.
184
- - `motif`: choose one or two reusable structural devices, such as a side bar, header rail, numbered node, card treatment, diagram lane, or section band. The motif should appear consistently enough that pages feel related.
185
+ - `motif`: choose one reusable structural device, such as numbered node, card treatment, half-bleed image zone, headline, or footer. The motif should appear consistently enough that pages feel related.
185
186
  - `color_roles`: assign primary, secondary, and accent roles. The same color must not mean unrelated things across pages.
186
187
  - `cover_content_relationship`: if the cover uses a different dark or image-led treatment, state how it connects to content pages through shared colors, motifs, or geometry.
187
188
  - `closing_relationship`: if the closing page mirrors the cover, state that explicitly so it looks intentional rather than like a new theme.
@@ -203,22 +204,22 @@ Do not hard-code a page number just because a previous deck used that pattern. P
203
204
 
204
205
  ## Asset Planning
205
206
 
206
- `asset_need` is metadata. It can describe a desired figure, diagram, chart, icon, logo, screenshot, or fallback shape-based visual, but it must not require web search, local download, or media upload.
207
+ `asset_need` is metadata. It can describe a desired figure, diagram, chart, icon, logo, screenshot, or fallback visual.
207
208
 
208
209
  Use an object for one planned asset, an array for multiple real needs, or `asset_type: "none"` when no asset is useful. Each planned asset must include:
209
210
 
210
211
  - `asset_type`: one of `paper_figure`, `architecture_diagram`, `icon`, `logo`, `chart`, `infographic`, `screenshot`, `flow_diagram`, or `none`.
211
212
  - `purpose`: why this asset helps the page's key message.
212
213
  - `suggested_query`: short future lookup hint only; do not execute it unless separately requested.
213
- - `fallback_if_missing`: concrete XML-native visual plan using shapes, labels, tables, whiteboard diagrams, or placeholder panels.
214
+ - `fallback_if_missing`: a plan to create a close-enough image with the image generation tool, or a native `<chart>` for data.
214
215
  - `chart_contract`: when `asset_type` is `chart` and the visual is a supported standard data chart, set this optional slide-level field so generation is locked to native `<chart>`.
215
216
 
216
217
  For detailed rules and examples, read `asset-planning.md`.
217
218
 
218
219
  Good examples:
219
220
 
220
- - `{"asset_type":"architecture_diagram","purpose":"Explain component relationships.","suggested_query":"service architecture diagram","fallback_if_missing":"Draw a component diagram with grouped boxes, connector arrows, and short labels."}`
221
- - `{"asset_type":"logo","purpose":"Identify the customer context.","suggested_query":"customer logo","fallback_if_missing":"Use a text label in a small badge."}`
221
+ - `{"asset_type":"architecture_diagram","purpose":"Explain component relationships.","suggested_query":"service architecture diagram","fallback_if_missing":"Render the component diagram with <shape> + <line>."}`
222
+ - `{"asset_type":"logo","purpose":"Identify the customer context.","suggested_query":"customer logo","fallback_if_missing":"Create a close-enough image with the image generation tool instead of a real logo."}`
222
223
  - `{"asset_type":"chart","purpose":"Show adoption trend.","suggested_query":"monthly adoption trend chart","fallback_if_missing":"Render a native `<chart>` using the provided series when available; otherwise render a native `<chart>` with mock placeholder values and label it as 模拟数据,仅占位,待替换真实数据."}`
223
224
 
224
225
  ## XML Generation Contract
@@ -229,7 +230,7 @@ Before writing each slide XML, map the plan fields to concrete decisions:
229
230
  - `layout_type` determines the coordinate structure and element types. Use `visual-planning.md` for concrete layout rules.
230
231
  - `visual_focus` determines the largest visual region or emphasized object.
231
232
  - `text_density` caps visible text volume.
232
- - `asset_need` informs placeholder diagrams, icons, charts, screenshots, or shape-based fallback visuals only. Missing real assets must use `fallback_if_missing`, not blank regions.
233
+ - `asset_need` informs placeholder diagrams, icons, charts, screenshots, or fallback visuals only. Missing real assets must use `fallback_if_missing`, not blank regions.
233
234
  - `chart_contract` locks supported standard data charts to native `<chart>` output. Manual approximations are allowed only when the planned chart type is unsupported by `<chart>` or when the visual is explicitly non-data/decorative.
234
235
 
235
236
  After creating the PPT, fetch the presentation and verify: