@amaster.ai/pi-lark 0.1.2-beta.44 → 0.1.2-beta.45

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 (122) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +23 -12
  3. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  4. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  5. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  6. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  7. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  8. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  9. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  10. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  11. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  12. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  13. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  14. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  15. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  16. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  17. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  18. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  19. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  20. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  21. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  22. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  23. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  24. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  25. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  26. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  27. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  28. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  29. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  30. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  31. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  32. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  33. package/skills/lark-apps/references/lark-apps-file.md +1 -1
  34. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  35. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  36. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  37. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  38. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  39. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  40. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  41. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  42. package/skills/lark-base/SKILL.md +1 -2
  43. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  44. package/skills/lark-base/references/lark-base-field-create.md +4 -0
  45. package/skills/lark-base/references/lark-base-field-json.md +4 -4
  46. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  47. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  48. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  49. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  50. package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
  51. package/skills/lark-calendar/references/lark-calendar-update.md +3 -0
  52. package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
  53. package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
  54. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
  55. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  56. package/skills/lark-drive/SKILL.md +4 -1
  57. package/skills/lark-drive/references/lark-drive-comment-location.md +2 -2
  58. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  59. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  60. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  61. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  62. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  63. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  64. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  65. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  66. package/skills/lark-event/SKILL.md +1 -0
  67. package/skills/lark-event/references/lark-event-application.md +38 -0
  68. package/skills/lark-im/SKILL.md +1 -1
  69. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  70. package/skills/lark-okr/SKILL.md +71 -26
  71. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  72. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  73. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  74. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  75. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  76. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  77. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  78. package/skills/lark-slides/SKILL.md +103 -46
  79. package/skills/lark-slides/references/asset-planning.md +6 -4
  80. package/skills/lark-slides/references/iconpark.md +2 -2
  81. package/skills/lark-slides/references/lark-slides-create.md +2 -3
  82. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  83. package/skills/lark-slides/references/lark-slides-media-upload.md +1 -2
  84. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  85. package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
  86. package/skills/lark-slides/references/lark-slides-screenshot.md +1 -1
  87. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
  88. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
  89. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  90. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  91. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
  92. package/skills/lark-slides/references/planning-layer.md +11 -10
  93. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
  94. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -45
  95. package/skills/lark-slides/references/troubleshooting.md +25 -7
  96. package/skills/lark-slides/references/validation-checklist.md +33 -13
  97. package/skills/lark-slides/references/visual-planning.md +25 -22
  98. package/skills/lark-slides/references/xml-schema-quick-ref.md +225 -46
  99. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +223 -22
  100. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +183 -124
  101. package/skills/lark-whiteboard/SKILL.md +13 -12
  102. package/skills/lark-whiteboard/elements/layout.md +1 -1
  103. package/skills/lark-whiteboard/elements/schema.md +2 -2
  104. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  105. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  106. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
  107. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  108. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  109. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  110. package/skills/lark-whiteboard/routes/svg.md +11 -6
  111. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  112. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  113. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  114. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  115. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  116. package/skills/lark-wiki/SKILL.md +1 -0
  117. package/skills/lark-slides/references/examples.md +0 -91
  118. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  119. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  120. package/skills/lark-slides/references/slide-templates.md +0 -201
  121. package/skills/lark-slides/references/slides_demo.xml +0 -226
  122. package/skills/lark-slides/references/xml-format-guide.md +0 -433
@@ -0,0 +1,132 @@
1
+ # slides history(历史版本与回滚)
2
+
3
+ 用于查看 Slides XML presentation 历史版本、按 `history_version_id` 回滚,以及查询回滚任务状态。
4
+
5
+ `entries[].edit_time` 是 UTC RFC3339 时间字符串(例如 `2026-06-22T12:24:45Z`)。按时间匹配时先将其解析为时间值,再比较先后关系或时间差。
6
+
7
+ ## 安全流程
8
+
9
+ 1. 先用分页接口 `+history-list` 找到目标版本的 `history_version_id`。
10
+ 2. 如果用户指定的是 `revision_id`,不要假设它唯一,也不要把 `revision_id` 直接传给 `+history-revert`。先拉一页并在 `entries[]` 中筛选 `revision_id` 相同的候选;如果未匹配到且 `has_more=true`,继续用 `page_token` 翻页;如果已匹配到候选,最多额外再拉一页补齐可能跨页的相邻候选。最终优先根据用户目标时间与 `edit_time` 的接近程度选择最合适的一条,取同一条的 `history_version_id`;如果没有目标时间,或多个候选无法可靠区分,再向用户展示候选版本(`history_version_id`、`revision_id`、`edit_time`、`name/description`)并确认后回滚。
11
+ 3. 如果用户指定的是某一时刻但没有指定 `revision_id`,按 `entries[].edit_time` 匹配;优先选择不晚于目标时刻的最近一条历史记录,无法明确匹配时先向用户确认候选版本。
12
+ 4. 使用 `+history-revert` 发起回滚。接口会立即返回 `task_id`,回滚任务在服务端异步执行。
13
+ 5. 如果返回 `status: running`,保存 `task_id`,按照返回的 `poll_after_ms` 等待后调用 `+history-revert-status`。任务创建成功后,不得因为状态查询失败而重新发起回滚。
14
+ 6. 状态变为 `done`、`partial_failed` 或 `failed` 后停止轮询;达到整体轮询上限时也停止轮询,并向用户返回 `task_id` 和当前状态。
15
+ 7. 回滚完成后,用 `slides +xml-get` 或 `slides xml_presentations get` 读取演示文稿确认内容。
16
+
17
+ ## 按 revision_id 或时间点回滚
18
+
19
+ 当用户说“回滚到 revision_id=42”“恢复到昨天下午 3 点的版本”这类需求时,流程是:
20
+
21
+ 1. 执行 `slides +history-list --presentation <presentation>` 获取第一页历史记录;`+history-list` 是分页接口,只有 `has_more=true` 且还需要更多候选时才继续传 `--page-token` 翻页。
22
+ 2. 如果用户给出 `revision_id`:先筛选当前页中 `entries[].revision_id == 用户给出的 revision_id`。如果未命中且 `has_more=true`,继续拉下一页;如果已经命中候选,最多额外再拉一页,补齐同一个 `revision_id` 可能跨页出现的相邻 `history_version_id`。若用户同时给出目标时间,在候选里选择 `edit_time` 与目标时间最接近的一条;若未给目标时间但候选只有一条,可直接使用;若多个候选无法可靠区分,不要自行取第一条,向用户展示候选并确认。
23
+ 3. 如果用户只给出时间:用 `entries[].edit_time` 匹配,选择目标时刻之前最近的一条;如果用户表达的是“最接近某时刻”,则选择绝对时间差最小的一条。
24
+ 4. 从最终匹配条目读取 `history_version_id`。`history_version_id` 对应服务端 `minor_history.version`,这是回滚接口需要的 ID。
25
+ 5. 执行 `slides +history-revert --presentation <presentation> --history-version-id <history_version_id>`。
26
+
27
+ 候选确认时使用类似格式:
28
+
29
+ ```text
30
+ 同一个 revision_id 命中多个历史版本,请确认要回滚哪一条:
31
+ - history_version_id=11 revision_id=42 edit_time=2026-06-22T12:24:45Z name=...
32
+ - history_version_id=12 revision_id=42 edit_time=2026-06-22T12:25:14Z name=...
33
+ ```
34
+
35
+ ## 命令
36
+
37
+ ```bash
38
+ # 列出历史版本
39
+ lark-cli slides +history-list --presentation "<slides_url_or_token>" --page-size 20
40
+
41
+ # 翻页
42
+ lark-cli slides +history-list --presentation "<slides_url_or_token>" --page-size 20 --page-token "<page_token>"
43
+
44
+ # 发起回滚任务,立即返回 task_id
45
+ lark-cli slides +history-revert --presentation "<slides_url_or_token>" --history-version-id 42
46
+
47
+ # 查询回滚任务状态
48
+ lark-cli slides +history-revert-status --presentation "<slides_url_or_token>" --task-id "<task_id>"
49
+ ```
50
+
51
+ ## 参数
52
+
53
+ | 命令 | 参数 | 必填 | 说明 |
54
+ |-|-|-|-|
55
+ | `+history-list` | `--presentation` | 是 | `xml_presentation_id`、Slides URL,或可解析为 Slides 的 wiki URL |
56
+ | `+history-list` | `--page-size` | 否 | 返回条数,范围 `1-20`,默认 `20` |
57
+ | `+history-list` | `--page-token` | 否 | 上一页返回的 `page_token` |
58
+ | `+history-revert` | `--presentation` | 是 | 同一个演示文稿 |
59
+ | `+history-revert` | `--history-version-id` | 是 | `+history-list` 返回的 `history_version_id`,必须大于 0 |
60
+ | `+history-revert-status` | `--presentation` | 是 | 同一个演示文稿 |
61
+ | `+history-revert-status` | `--task-id` | 是 | `+history-revert` 返回的 `task_id` |
62
+
63
+ ## 异步轮询策略
64
+
65
+ 1. `+history-revert` 返回 `task_id` 后,认为回滚任务已经成功创建。
66
+ 2. 如果 `status` 不是 `running`,不再调用状态接口。
67
+ 3. 如果 `status` 是 `running`,等待响应中的 `poll_after_ms` 后调用 `+history-revert-status`;`poll_after_ms` 缺失、为 `0` 或非法时,默认等待 10 秒。
68
+ 4. 状态查询返回 `running` 时继续轮询;返回 `done`、`partial_failed` 或 `failed` 时停止。
69
+ 5. 除非用户另有要求,默认最多轮询 5 分钟。达到上限后停止轮询,向用户说明任务仍在运行并返回 `task_id`,不得将其描述为回滚失败。
70
+ 6. 状态查询出现临时错误时,按相同间隔最多连续重试 3 次;只重试 `+history-revert-status`,不得重新调用 `+history-revert`。
71
+ 7. `done` 后读取当前演示文稿内容进行验证。
72
+ 8. `partial_failed` 或 `failed` 时展示 `failed_block_tokens`;除非用户明确确认,不得自动再次发起回滚。
73
+
74
+ ## 返回值要点
75
+
76
+ `+history-list` 返回:
77
+
78
+ ```json
79
+ {
80
+ "entries": [
81
+ {
82
+ "revision_id": 42,
83
+ "history_version_id": "11",
84
+ "edit_time": "2026-06-22T12:24:45Z",
85
+ "type": 1,
86
+ "name": "版本名",
87
+ "description": "版本说明",
88
+ "editor_ids": ["ou_xxx"]
89
+ }
90
+ ],
91
+ "has_more": true,
92
+ "page_token": "page_token"
93
+ }
94
+ ```
95
+
96
+ `+history-revert` 返回:
97
+
98
+ ```json
99
+ {
100
+ "task_id": "task_xxx",
101
+ "status": "running",
102
+ "history_version_id": "11",
103
+ "poll_after_ms": 10000
104
+ }
105
+ ```
106
+
107
+ `+history-revert-status` 返回:
108
+
109
+ ```json
110
+ {
111
+ "status": "partial_failed",
112
+ "history_version_id": "11",
113
+ "failed_block_tokens": ["blk_xxx"]
114
+ }
115
+ ```
116
+
117
+ `status` 可能是 `running`、`done`、`partial_failed`、`failed`。当状态是 `partial_failed` 或 `failed` 时,优先检查 `failed_block_tokens`。
118
+
119
+ ## 回滚后验证
120
+
121
+ 回滚成功后必须读取一次当前内容确认:
122
+
123
+ ```bash
124
+ lark-cli slides +xml-get --presentation "<slides_url_or_token>" --output ./presentation.xml
125
+ ```
126
+
127
+ 如果只需要快速检查返回结构,也可以走 raw OpenAPI:
128
+
129
+ ```bash
130
+ lark-cli api get "/open-apis/slides_ai/v1/xml_presentations/<xml_presentation_id>" \
131
+ --params '{"revision_id":-1}'
132
+ ```
@@ -1,8 +1,6 @@
1
1
 
2
2
  # slides +media-upload(上传本地图片到飞书幻灯片)
3
3
 
4
- > **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
5
-
6
4
  把本地图片上传到指定演示文稿的 drive 媒体库,返回 `file_token`。**返回的 token 作为 `<img src="...">` 的值塞进 slide XML 即可显示图片。**
7
5
 
8
6
  ## 命令
@@ -125,3 +123,4 @@ lark-cli slides +replace-slide --as user \
125
123
 
126
124
  - [+create](lark-slides-create.md) — 新建 PPT(支持 `@` 占位符自动上传图片)
127
125
  - [+replace-slide](lark-slides-replace-slide.md) — 给已有页加图 / 换图(`block_insert` / `block_replace`)
126
+ - [xml_presentation.slide create](lark-slides-xml-presentation-slide-create.md) — 创建 slide 页面(拿到 file_token 后塞进 XML)
@@ -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
+ 注意:该截图能力受应用白名单限制,绝大多数应用不可用。截图失败时不要引导用户申请 `slides:presentation:screenshot` 权限;记录错误后降级到 XML 读回、结构 lint、文本重叠检查等非截图检查路径。
8
8
 
9
9
  ## 命令
10
10
 
@@ -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) - 删除幻灯片页面