@amaster.ai/pi-lark 0.1.6 → 0.1.8
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.
- package/README.md +5 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/lark-apps/SKILL.md +59 -14
- package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
- package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
- package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
- package/skills/lark-apps/creative-design/assets/index.html +27 -0
- package/skills/lark-apps/creative-design/creative-design.md +239 -0
- package/skills/lark-apps/creative-design/references/aily.md +39 -0
- package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
- package/skills/lark-apps/creative-design/references/charts.md +165 -0
- package/skills/lark-apps/creative-design/references/claude.md +36 -0
- package/skills/lark-apps/creative-design/references/codex.md +32 -0
- package/skills/lark-apps/creative-design/references/data-report.md +108 -0
- package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
- package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
- package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
- package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
- package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
- package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
- package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
- package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
- package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
- package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
- package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
- package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
- package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
- package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
- package/skills/lark-apps/references/lark-apps-automation.md +80 -2
- package/skills/lark-apps/references/lark-apps-cache.md +61 -0
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -5
- package/skills/lark-apps/references/lark-apps-create.md +6 -4
- package/skills/lark-apps/references/lark-apps-db.md +1 -1
- package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
- package/skills/lark-apps/references/lark-apps-file.md +2 -2
- package/skills/lark-apps/references/lark-apps-get.md +1 -1
- package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
- package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
- package/skills/lark-apps/references/lark-apps-init.md +1 -1
- package/skills/lark-apps/references/lark-apps-list.md +2 -2
- package/skills/lark-apps/references/lark-apps-local-dev.md +80 -11
- package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
- package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
- package/skills/lark-base/SKILL.md +34 -19
- package/skills/lark-base/references/lark-base-cell-value.md +3 -3
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
- package/skills/lark-base/references/lark-base-dashboard.md +17 -4
- package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
- package/skills/lark-base/references/lark-base-data-query.md +11 -4
- package/skills/lark-base/references/lark-base-field-create.md +21 -6
- package/skills/lark-base/references/lark-base-field-json.md +9 -6
- package/skills/lark-base/references/lark-base-field-update.md +17 -1
- package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
- package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
- package/skills/lark-base/references/lark-base-form-submit.md +16 -7
- package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
- package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
- package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
- package/skills/lark-base/references/lark-base-role-guide.md +11 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
- package/skills/lark-base/references/role-config.md +31 -5
- package/skills/lark-calendar/SKILL.md +14 -8
- package/skills/lark-calendar/references/lark-calendar-create.md +6 -5
- package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
- package/skills/lark-calendar/references/lark-calendar-update.md +10 -4
- package/skills/lark-contact/SKILL.md +19 -3
- package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
- package/skills/lark-doc/SKILL.md +26 -61
- package/skills/lark-doc/references/genres/business-analysis.md +30 -0
- package/skills/lark-doc/references/genres/data-report.md +32 -0
- package/skills/lark-doc/references/genres/email.md +38 -0
- package/skills/lark-doc/references/genres/execution-plan.md +27 -0
- package/skills/lark-doc/references/genres/formal-doc.md +37 -0
- package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
- package/skills/lark-doc/references/genres/memo-brief.md +25 -0
- package/skills/lark-doc/references/genres/official-redhead.md +73 -0
- package/skills/lark-doc/references/genres/prd.md +26 -0
- package/skills/lark-doc/references/genres/proposal.md +24 -0
- package/skills/lark-doc/references/genres/research-report.md +32 -0
- package/skills/lark-doc/references/genres/retrospective.md +25 -0
- package/skills/lark-doc/references/genres/route-consumer.md +37 -0
- package/skills/lark-doc/references/genres/route-creative.md +36 -0
- package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
- package/skills/lark-doc/references/genres/route-marketing.md +40 -0
- package/skills/lark-doc/references/genres/route-media.md +36 -0
- package/skills/lark-doc/references/genres/route-opinion.md +38 -0
- package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
- package/skills/lark-doc/references/genres/route-platform.md +9 -0
- package/skills/lark-doc/references/genres/route-report.md +10 -0
- package/skills/lark-doc/references/genres/route-workplace.md +17 -0
- package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
- package/skills/lark-doc/references/genres/technical-doc.md +39 -0
- package/skills/lark-doc/references/genres/wechat.md +39 -0
- package/skills/lark-doc/references/genres/weekly-report.md +24 -0
- package/skills/lark-doc/references/genres/white-paper.md +32 -0
- package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
- package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
- package/skills/lark-doc/references/lark-doc-create.md +22 -48
- package/skills/lark-doc/references/lark-doc-fetch.md +84 -93
- package/skills/lark-doc/references/lark-doc-history.md +16 -15
- package/skills/lark-doc/references/lark-doc-md.md +5 -1
- package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
- package/skills/lark-doc/references/lark-doc-script.md +76 -0
- package/skills/lark-doc/references/lark-doc-update.md +70 -222
- package/skills/lark-doc/references/lark-doc-whiteboard.md +14 -17
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +46 -0
- package/skills/lark-doc/references/lark-doc-xml.md +38 -166
- package/skills/lark-drive/SKILL.md +32 -50
- package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
- package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +3 -3
- package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
- package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +9 -15
- package/skills/lark-drive/references/lark-drive-copy.md +87 -0
- package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
- package/skills/lark-drive/references/lark-drive-download.md +6 -1
- package/skills/lark-drive/references/lark-drive-export.md +3 -0
- package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
- package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
- package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
- package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
- package/skills/lark-drive/references/lark-drive-preview.md +11 -1
- package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
- package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
- package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
- package/skills/lark-drive/references/lark-drive-search.md +7 -1
- package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
- package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
- package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
- package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
- package/skills/lark-drive/references/lark-drive-upload.md +1 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
- package/skills/lark-event/SKILL.md +8 -4
- package/skills/lark-event/references/lark-event-application.md +38 -0
- package/skills/lark-event/references/lark-event-vc.md +8 -2
- package/skills/lark-im/SKILL.md +9 -9
- package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
- package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
- package/skills/lark-im/references/card/resource/icons.md +14 -0
- package/skills/lark-im/references/lark-im-chat-list.md +9 -2
- package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
- package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
- package/skills/lark-im/references/lark-im-chat-search.md +9 -2
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
- package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
- package/skills/lark-im/references/lark-im-flag-list.md +9 -8
- package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
- package/skills/lark-im/references/lark-im-messages-search.md +4 -5
- package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
- package/skills/lark-mail/references/lark-mail-triage.md +19 -4
- package/skills/lark-minutes/SKILL.md +1 -1
- package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
- package/skills/lark-okr/SKILL.md +71 -26
- package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
- package/skills/lark-okr/references/lark-okr-create.md +173 -0
- package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
- package/skills/lark-okr/references/lark-okr-entities.md +1 -0
- package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
- package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
- package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
- package/skills/lark-shared/SKILL.md +3 -3
- package/skills/lark-sheets/SKILL.md +83 -82
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
- package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
- package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
- package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
- package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
- package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
- package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
- package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
- package/skills/lark-sheets/scripts/sheets_df.py +21 -3
- package/skills/lark-slides/SKILL.md +134 -104
- package/skills/lark-slides/references/asset-planning.md +6 -4
- package/skills/lark-slides/references/iconpark.md +2 -2
- package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
- package/skills/lark-slides/references/lark-slides-create.md +86 -66
- package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
- package/skills/lark-slides/references/lark-slides-history.md +132 -0
- package/skills/lark-slides/references/lark-slides-media-upload.md +4 -27
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
- package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -4
- package/skills/lark-slides/references/lark-slides-screenshot.md +33 -15
- package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +90 -32
- package/skills/lark-slides/references/planning-layer.md +11 -10
- package/skills/lark-slides/references/slides_chart_demo.xml +1415 -1
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +539 -79
- package/skills/lark-slides/references/troubleshooting.md +26 -9
- package/skills/lark-slides/references/validation-checklist.md +55 -18
- package/skills/lark-slides/references/visual-planning.md +25 -22
- package/skills/lark-slides/references/xml-schema-quick-ref.md +299 -51
- package/skills/lark-slides/scripts/sxsd_validator.py +1052 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1964 -195
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +4051 -501
- package/skills/lark-task/SKILL.md +7 -0
- package/skills/lark-task/references/lark-task-complete.md +6 -2
- package/skills/lark-task/references/lark-task-create.md +9 -0
- package/skills/lark-task/references/lark-task-update.md +6 -2
- package/skills/lark-whiteboard/SKILL.md +21 -13
- package/skills/lark-whiteboard/elements/layout.md +1 -1
- package/skills/lark-whiteboard/elements/schema.md +2 -2
- package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +17 -16
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +7 -7
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +23 -31
- package/skills/lark-whiteboard/routes/dsl.md +11 -5
- package/skills/lark-whiteboard/routes/mermaid.md +3 -3
- package/skills/lark-whiteboard/routes/svg-edit.md +9 -6
- package/skills/lark-whiteboard/routes/svg.md +14 -7
- package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
- package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
- package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/mention.md +71 -0
- package/skills/lark-whiteboard/scenes/treemap.md +1 -1
- package/skills/lark-wiki/SKILL.md +6 -3
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
- package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
- package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
- package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
- package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
- package/skills/lark-slides/references/examples.md +0 -91
- package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
- package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
- package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -125
- package/skills/lark-slides/references/slide-templates.md +0 -201
- package/skills/lark-slides/references/slides_demo.xml +0 -226
- package/skills/lark-slides/references/xml-format-guide.md +0 -433
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
|
|
2
2
|
# slides +create(创建飞书幻灯片)
|
|
3
3
|
|
|
4
|
-
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
5
|
-
|
|
6
4
|
创建一个新的飞书幻灯片演示文稿,可选一步添加页面内容。
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
提交源必须是直接生成的单页 `<slide>` XML。禁止从完整 `<presentation>` XML 解析、拆分、重序列化出 slide 数组再提交。
|
|
7
|
+
|
|
8
|
+
本命令只从零创建演示文稿,没有导入本地 PPT 文件的参数。要把已有 PPTX 变成 Slides,用 `drive +import --file <x.pptx> --type slides`,再在导入结果上编辑,流程见 [lark-slides-pptx-template-workflows.md](lark-slides-pptx-template-workflows.md)。
|
|
9
|
+
|
|
10
|
+
## 创建方式选择
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
| 场景 | 推荐方式 |
|
|
13
|
+
|------|----------|
|
|
14
|
+
| 不超过 10 页 | 每页存一个 XML 文件,`slides +create --slide @page-01.xml --slide @page-02.xml ...` 一步创建 |
|
|
15
|
+
| 超过 10 页 | **两步创建**:先 `slides +create` 创建空白 PPT,再用 [`+add-slide`](lark-slides-add-slide.md) 逐页添加 |
|
|
16
|
+
| 已有 PPT 继续追加或插入页面 | 使用 [`+add-slide`](lark-slides-add-slide.md),必要时配合 `--before-slide-id` |
|
|
17
|
+
|
|
18
|
+
> [!IMPORTANT]
|
|
19
|
+
> `slides +create` 带页面时底层会逐页创建,不是原子操作。中途失败时先记录 `xml_presentation_id`,回读确认当前状态,再继续修复或追加。
|
|
13
20
|
|
|
14
|
-
|
|
21
|
+
**CRITICAL — 提交前必须先跑版式 lint**:把待提交的 `<slide>` XML 存成本地文件,运行 [`scripts/xml_text_overlap_lint.py`](../scripts/xml_text_overlap_lint.py),`summary.error_count` 必须为 0。
|
|
15
22
|
|
|
16
23
|
## 命令
|
|
17
24
|
|
|
@@ -19,31 +26,22 @@
|
|
|
19
26
|
# 创建空白 PPT
|
|
20
27
|
lark-cli slides +create --title "项目汇报"
|
|
21
28
|
|
|
22
|
-
# 创建 PPT +
|
|
23
|
-
lark-cli slides +create --title "项目汇报"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
# 创建 PPT + 添加页面:每页一个 XML 文件,重复 --slide,顺序即页序
|
|
30
|
+
lark-cli slides +create --as user --title "项目汇报" \
|
|
31
|
+
--slide @.lark-slides/plan/project/slide-01.xml \
|
|
32
|
+
--slide @.lark-slides/plan/project/slide-02.xml
|
|
33
|
+
|
|
34
|
+
# 已有组装好的 JSON 数组:从文件或 stdin 读
|
|
35
|
+
lark-cli slides +create --as user --title "项目汇报" --slides @./deck.json
|
|
36
|
+
cat deck.json | lark-cli slides +create --as user --title "项目汇报" --slides -
|
|
27
37
|
|
|
28
38
|
# 以应用身份创建(自动授权当前用户)
|
|
29
39
|
lark-cli slides +create --title "项目汇报" --as bot
|
|
30
40
|
|
|
31
41
|
# 预览(不执行)
|
|
32
|
-
lark-cli slides +create --title "项目汇报" --
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
复杂内容建议按页保存 XML,再用 `jq --rawfile` 组装 `--slides` 参数:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
lark-cli slides +create --as user --title "项目汇报" \
|
|
39
|
-
--slides "$(jq -n \
|
|
40
|
-
--rawfile s1 .lark-slides/plan/project/slide-01.xml \
|
|
41
|
-
--rawfile s2 .lark-slides/plan/project/slide-02.xml \
|
|
42
|
-
'[$s1, $s2]')"
|
|
42
|
+
lark-cli slides +create --title "项目汇报" --slide @./slide-01.xml --dry-run
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
`--rawfile` 会把文件内容作为字符串读入 JSON,自动处理 XML 中的引号和换行;不要手动拼接带大量转义符的 JSON 字符串。
|
|
46
|
-
|
|
47
45
|
## 返回值
|
|
48
46
|
|
|
49
47
|
工具成功执行后,返回一个 JSON 对象,包含以下字段:
|
|
@@ -52,15 +50,15 @@ lark-cli slides +create --as user --title "项目汇报" \
|
|
|
52
50
|
- **`title`**(string):演示文稿标题
|
|
53
51
|
- **`url`**(string,可选):演示文稿的在线链接,如有返回则务必展示给用户(需要 drive 相关权限;若获取失败则不返回此字段)
|
|
54
52
|
- **`revision_id`**(integer):演示文稿版本号
|
|
55
|
-
- **`slide_ids`**(string[]
|
|
56
|
-
- **`slides_added`**(integer
|
|
57
|
-
- **`images_uploaded`**(integer
|
|
53
|
+
- **`slide_ids`**(string[],可选):带页面创建时返回,成功添加的页面 ID 列表
|
|
54
|
+
- **`slides_added`**(integer,可选):带页面创建时返回,成功添加的页面数量
|
|
55
|
+
- **`images_uploaded`**(integer,可选):页面 XML 中含 `@<本地路径>` 占位符时返回,已上传的去重后图片数量
|
|
58
56
|
- **`permission_grant`**(object,可选):仅 `--as bot` 时返回,说明是否已自动为当前 CLI 用户授予可管理权限
|
|
59
57
|
|
|
60
58
|
> [!IMPORTANT]
|
|
61
|
-
>
|
|
59
|
+
> 不带页面参数时,`slides +create` 只创建空白演示文稿。创建后用 [`+add-slide`](lark-slides-add-slide.md) 逐页添加 slide 内容。
|
|
62
60
|
>
|
|
63
|
-
>
|
|
61
|
+
> 带了页面时,CLI 先创建空白演示文稿,再逐页调用 slide 创建接口添加页面。如果某一页添加失败,CLI 会停止并报错,已创建的演示文稿和已添加的页面会保留。
|
|
64
62
|
>
|
|
65
63
|
> 如果演示文稿是**以应用身份(bot)创建**的,如 `lark-cli slides +create --as bot`,CLI 会**尝试为当前 CLI 用户自动授予该演示文稿的 `full_access`(可管理权限)**。
|
|
66
64
|
>
|
|
@@ -76,27 +74,67 @@ lark-cli slides +create --as user --title "项目汇报" \
|
|
|
76
74
|
| 参数 | 必填 | 说明 |
|
|
77
75
|
|------|------|------|
|
|
78
76
|
| `--title` | 否 | 演示文稿标题(不传则默认 "Untitled") |
|
|
79
|
-
| `--
|
|
77
|
+
| `--slide` | 否 | 一页 `<slide>` XML,或 `@路径`;可重复,最多 10 次。格式见[页面输入形式](#页面输入形式) |
|
|
78
|
+
| `--slides` | 否 | 页面 XML 的 JSON 字符串数组,最多 10 个;支持 `@文件` 和 `-`(stdin)。格式见[页面输入形式](#页面输入形式) |
|
|
79
|
+
|
|
80
|
+
10 页是 CLI 的上限,服务端每次只接收一页。超过 10 页时先用 `+create` 创建空白 PPT,再用 [`+add-slide`](lark-slides-add-slide.md) 逐页添加。
|
|
81
|
+
|
|
82
|
+
两种形式的每一页都会在发请求前校验成「单个完整的 `<slide>` 文档」。不合格的页在创建演示文稿之前报错并指出页序号,不会留下空壳演示文稿。
|
|
83
|
+
|
|
84
|
+
## 页面输入形式
|
|
85
|
+
|
|
86
|
+
页面内容有 `--slide` 和 `--slides` 两种传法,二选一,同时传会报错。
|
|
87
|
+
|
|
88
|
+
两种形式的 `@路径` 都必须是 CWD 内的相对路径(如 `./slide-01.xml`);绝对路径和 `../` 会被拒(报 `invalid file path`)。XML 写在别的目录时,先 `cd` 过去或把文件拷进 CWD 再执行。
|
|
80
89
|
|
|
81
|
-
|
|
90
|
+
### `--slide`:一页一个文件
|
|
91
|
+
|
|
92
|
+
可重复,重复次数即页数,出现顺序即页序。值是一页完整的 `<slide>` XML,或读取该 XML 的 `@路径`。
|
|
93
|
+
|
|
94
|
+
文件内容就是这一页 XML 本身,外面没有引号或方括号:
|
|
95
|
+
|
|
96
|
+
```xml
|
|
97
|
+
<slide xmlns="https://www.larkoffice.com/sml/2.0">
|
|
98
|
+
<data>…第1页…</data>
|
|
99
|
+
</slide>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
文件内容不需要转义:引号、换行、中文原样写。
|
|
103
|
+
|
|
104
|
+
### `--slides`:一个 JSON 数组
|
|
105
|
+
|
|
106
|
+
值是 JSON 字符串数组,每个元素是一整页 XML,支持 `@文件` 和 `-`(stdin)。
|
|
107
|
+
|
|
108
|
+
文件内容是一个 JSON 文档,XML 以 JSON 字符串出现,其中的 `"` 写作 `\"`,换行写作 `\n`:
|
|
82
109
|
|
|
83
110
|
```json
|
|
84
111
|
[
|
|
85
|
-
"<slide xmlns=\"
|
|
86
|
-
"<slide xmlns=\"
|
|
112
|
+
"<slide xmlns=\"https://www.larkoffice.com/sml/2.0\"><data>…第1页…</data></slide>",
|
|
113
|
+
"<slide xmlns=\"https://www.larkoffice.com/sml/2.0\"><data>…第2页…</data></slide>"
|
|
87
114
|
]
|
|
88
115
|
```
|
|
89
116
|
|
|
90
|
-
|
|
117
|
+
数组元素是页面 XML 原文。包装成 API 所需的 `{"slide": {"content": …}}` 并逐页调用由 CLI 完成。
|
|
118
|
+
|
|
119
|
+
> [!WARNING]
|
|
120
|
+
> `--slides '[...]'` 的风险点主要在 shell 参数传递,而不是单纯页数。即使只有 1 页,只要 XML 足够复杂,也建议改用 `--slide @page-01.xml` 逐页传文件。
|
|
91
121
|
|
|
92
|
-
|
|
122
|
+
## 本地图片:`@<path>` 占位符
|
|
93
123
|
|
|
94
124
|
`<img>` 元素的 `src` 属性如果以 `@` 开头,CLI 会把它当作本地文件路径,自动上传到当前演示文稿,并把占位符替换为返回的 `file_token`。
|
|
95
125
|
|
|
126
|
+
`slide-01.xml`:
|
|
127
|
+
|
|
128
|
+
```xml
|
|
129
|
+
<slide xmlns="https://www.larkoffice.com/sml/2.0">
|
|
130
|
+
<data>
|
|
131
|
+
<img src="@./assets/chart.png" topLeftX="100" topLeftY="100" width="320" height="180"/>
|
|
132
|
+
</data>
|
|
133
|
+
</slide>
|
|
134
|
+
```
|
|
135
|
+
|
|
96
136
|
```bash
|
|
97
|
-
lark-cli slides +create --as user --title "图测试" --
|
|
98
|
-
"<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><img src=\"@./assets/chart.png\" topLeftX=\"100\" topLeftY=\"100\" width=\"320\" height=\"180\"/></data></slide>"
|
|
99
|
-
]'
|
|
137
|
+
lark-cli slides +create --as user --title "图测试" --slide @./slide-01.xml
|
|
100
138
|
```
|
|
101
139
|
|
|
102
140
|
行为:
|
|
@@ -111,37 +149,18 @@ lark-cli slides +create --as user --title "图测试" --slides '[
|
|
|
111
149
|
> [!IMPORTANT]
|
|
112
150
|
> **路径必须在 CWD 内**:`@/abs/path/x.png` 或 `@../up/x.png` 这种会被 CLI 拒绝(报 `unsafe file path`)。如果素材在别的目录,先 `cd` 过去再执行。
|
|
113
151
|
|
|
114
|
-
### 给已有 PPT 加带图新页
|
|
115
|
-
|
|
116
|
-
`+create --slides` 只在新建 PPT 时使用 `@` 占位符。给已有 PPT 加带图新页要分两步(CLI 没封装这个组合):
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
# 1) 上传图片
|
|
120
|
-
TOKEN=$(lark-cli slides +media-upload --as user \
|
|
121
|
-
--file ./pic.png --presentation $PRES_ID | jq -r .data.file_token)
|
|
122
|
-
|
|
123
|
-
# 2) 用返回的 file_token 创建带图新页
|
|
124
|
-
lark-cli slides xml_presentation.slide create --as user \
|
|
125
|
-
--params "{\"xml_presentation_id\":\"$PRES_ID\"}" \
|
|
126
|
-
--data "{\"slide\":{\"content\":\"<slide xmlns=\\\"http://www.larkoffice.com/sml/2.0\\\"><data><img src=\\\"$TOKEN\\\" topLeftX=\\\"100\\\" topLeftY=\\\"100\\\" width=\\\"200\\\" height=\\\"200\\\"/></data></slide>\"}}"
|
|
127
|
-
```
|
|
128
|
-
|
|
129
152
|
## 创建后续步骤
|
|
130
153
|
|
|
131
|
-
|
|
154
|
+
创建空白 PPT 时,`slides +create` 返回的 `xml_presentation_id` 用于后续操作:
|
|
132
155
|
|
|
133
156
|
```bash
|
|
134
157
|
# 第 1 步:创建空白 PPT
|
|
135
|
-
PRES_ID=$(lark-cli slides +create --title "项目汇报"
|
|
136
|
-
|
|
137
|
-
# 第 2
|
|
138
|
-
lark-cli slides
|
|
139
|
-
--
|
|
140
|
-
--
|
|
141
|
-
"slide": {
|
|
142
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\">...</slide>"
|
|
143
|
-
}
|
|
144
|
-
}'
|
|
158
|
+
PRES_ID=$(lark-cli slides +create --title "项目汇报" --jq '.data.xml_presentation_id')
|
|
159
|
+
|
|
160
|
+
# 第 2 步:逐页添加(--slide 支持 @file,复杂 XML 优先走文件)
|
|
161
|
+
lark-cli slides +add-slide --as user \
|
|
162
|
+
--presentation "$PRES_ID" \
|
|
163
|
+
--slide @.lark-slides/plan/<deck>/page1.xml
|
|
145
164
|
```
|
|
146
165
|
|
|
147
166
|
## 常见错误
|
|
@@ -153,4 +172,5 @@ lark-cli slides xml_presentation.slide create --as user \
|
|
|
153
172
|
|
|
154
173
|
## 相关命令
|
|
155
174
|
|
|
156
|
-
- [slides +
|
|
175
|
+
- [slides +add-slide](lark-slides-add-slide.md) — 追加/插入单页(两步创建的第二步)
|
|
176
|
+
- [slides +xml-get](lark-slides-xml-presentations-get.md) — 读取 PPT 内容并保存到本地文件
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# slides +delete-slide(按 slide_id 删除单页)
|
|
2
|
+
|
|
3
|
+
从演示文稿删除**一页**,按 `slide_id` 指定。只改一页里的局部内容用 [`+replace-slide`](lark-slides-replace-slide.md),不要删了重建。
|
|
4
|
+
|
|
5
|
+
`--presentation` 接受 token / `/slides/` URL / `/wiki/` URL,ID 是普通 flag 而不是 `--params` JSON 串。
|
|
6
|
+
|
|
7
|
+
> `--slide-id` 只接受单个 ID —— 不支持逗号分隔的列表(`+screenshot` 的 `--slide-id` 支持,这个不支持),也不支持按页号删。
|
|
8
|
+
|
|
9
|
+
## 命令
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 直接传 xml_presentation_id
|
|
13
|
+
lark-cli slides +delete-slide --as user \
|
|
14
|
+
--presentation "$PID" \
|
|
15
|
+
--slide-id "$SID"
|
|
16
|
+
|
|
17
|
+
# slides URL / wiki URL 都可以(wiki 会自动解析并校验 obj_type=slides)
|
|
18
|
+
lark-cli slides +delete-slide --as user \
|
|
19
|
+
--presentation "https://xxx.feishu.cn/wiki/wikcnXXXXXX" \
|
|
20
|
+
--slide-id "$SID"
|
|
21
|
+
|
|
22
|
+
# 删之前先确认打到哪份 PPT、哪一页
|
|
23
|
+
lark-cli slides +delete-slide --presentation "$PID" --slide-id "$SID" --dry-run
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 参数
|
|
27
|
+
|
|
28
|
+
| 参数 | 必需 | 说明 |
|
|
29
|
+
|------|------|------|
|
|
30
|
+
| `--presentation` | 是 | `xml_presentation_id`、`/slides/` URL 或 `/wiki/` URL |
|
|
31
|
+
| `--slide-id` | 是 | 要删除的页面 ID |
|
|
32
|
+
| `--revision-id` | 否 | 演示文稿版本号,默认 `-1`(最新);传具体版本号做乐观锁 |
|
|
33
|
+
| `--dry-run` | 否 | 打印将要发起的请求,不删除 |
|
|
34
|
+
|
|
35
|
+
## 成功输出
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"xml_presentation_id": "slides_example_presentation_id",
|
|
40
|
+
"slide_id": "slide_example_id",
|
|
41
|
+
"deleted": true,
|
|
42
|
+
"revision_id": 43
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 怎么拿 `slide_id`
|
|
47
|
+
|
|
48
|
+
`slide_id` 是服务端短 ID,**不能从 XML 里推导**。两个来源:
|
|
49
|
+
|
|
50
|
+
1. `+create` / `+add-slide` 的返回值里存下来;
|
|
51
|
+
2. 事后回读:`slides +xml-get --presentation "$PID" --output .lark-slides/plan/<deck>/readback.xml`。
|
|
52
|
+
|
|
53
|
+
删错页的代价高于多跑一次回读 —— 不确定就先回读 + `+screenshot` 看一眼再删。
|
|
54
|
+
|
|
55
|
+
## 删错了怎么办
|
|
56
|
+
|
|
57
|
+
删除在原地不可撤销,但可以走历史版本回滚:`+history-list` 找 `history_version_id` → `+history-revert`(只接受 `history_version_id`,不能传 `revision_id`)→ `+history-revert-status` 轮询。命令用法见 [lark-slides-history.md](lark-slides-history.md)。
|
|
58
|
+
|
|
59
|
+
## 常见错误
|
|
60
|
+
|
|
61
|
+
| 现象 | 原因 | 解决 |
|
|
62
|
+
|------|------|------|
|
|
63
|
+
| `--slide-id cannot be empty` | 传了空串或纯空格 | 检查变量有没有取到值 |
|
|
64
|
+
| 3350001 `invalid param` | `slide_id` 写错或该页已被删 | `+xml-get` 回读确认 `slide_id` 还在 |
|
|
65
|
+
| 403 / 权限不足 | 当前身份对这份 PPT 没有编辑权限 | 检查是否拥有 `slides:presentation:update` 或 `slides:presentation:write_only` scope;wiki 链接另需 `wiki:node:read`;`--as bot` 还要求该 bot 对目标 PPT 有编辑权限 |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 编辑已有 PPT:读-改-写闭环
|
|
2
2
|
|
|
3
|
-
局部编辑走 **shortcut [`+replace-slide`](lark-slides-replace-slide.md)**(块级替换 / 插入),配合 `xml_presentation.slide.get` 读原页拿 `block_id
|
|
3
|
+
局部编辑走 **shortcut [`+replace-slide`](lark-slides-replace-slide.md)**(块级替换 / 插入),配合 `xml_presentation.slide.get` 读原页拿 `block_id`。整页重建走 **[`+update-slide`](lark-slides-update-slide.md)**,多页就每页各跑一次 —— 它原地覆盖并保留 `slide_id` 和页序;只有写进 `--content` 且带原 id 的元素才会保留元素 id,遗漏的元素会被删除。
|
|
4
4
|
|
|
5
5
|
> 生成 XML 前**必读** [xml-schema-quick-ref.md](xml-schema-quick-ref.md)。
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| 已知某块的 `block_id`,要换这块内容(改标题、换图、挪坐标) | `block_replace` | 精准替换,原子性好;`replacement` 根 `id` 由 CLI 自动注入为 `block_id` |
|
|
12
12
|
| 只加 1~N 个元素、不动现有布局 | `block_insert` | 新增不覆盖,可选 `insert_before_block_id` 指定位置 |
|
|
13
13
|
| 一次动多个元素(如:换标题 + 加图) | 单次 `--parts` 里拼多条 | 整批作为原子事务,任一失败整批不生效;`block_replace` 和 `block_insert` 可混用 |
|
|
14
|
-
|
|
|
14
|
+
| 整页版式重建、整页坐标重排、改页面背景、删若干元素 | `+update-slide`(每页一次) | 原地整页覆盖,`slide_id` 和页序不变;带原 `id` 的元素保留 id,不带 `id` 的作为新元素插入,遗漏的被删除 |
|
|
15
15
|
|
|
16
16
|
> **没有字段级 patch**:即便只想改一个 `shape` 的 `topLeftX`,也得把整个块的新 XML 写出来用 `block_replace`。这不是"微调",是块级重写。
|
|
17
17
|
|
|
@@ -33,6 +33,8 @@ lark-cli slides +replace-slide --as user \
|
|
|
33
33
|
|
|
34
34
|
`slide_id` / 页序不会变。`block_replace` 的 `replacement` 根元素 `id` 会自动注入为 `block_id`,用户手写 XML 时不需要自己加。
|
|
35
35
|
|
|
36
|
+
> **part 的字段名是 `block_id` + `replacement`(XML 字符串)**:写成 `content` / `xml` / `block` 会被 CLI 拒绝(报 `unknown field "content"; did you mean "replacement"?`)。收到这个报错时改字段名,不要改字段值。
|
|
37
|
+
|
|
36
38
|
## `revision_id` 参数
|
|
37
39
|
|
|
38
40
|
`--revision-id` 默认 `-1`,表示基于当前最新版执行。传具体版本号时,服务端以该版本为 base 应用变更:
|
|
@@ -103,10 +105,7 @@ lark-cli slides +replace-slide --as user \
|
|
|
103
105
|
```bash
|
|
104
106
|
lark-cli slides +replace-slide --as user \
|
|
105
107
|
--presentation "$PID" --slide-id "$SID" \
|
|
106
|
-
--parts '[
|
|
107
|
-
{"action":"block_replace","block_id":"bab","replacement":"<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"},
|
|
108
|
-
{"action":"block_insert","insertion":"<img src=\"<file_token>\" topLeftX=\"700\" topLeftY=\"400\" width=\"180\" height=\"100\"/>"}
|
|
109
|
-
]'
|
|
108
|
+
--parts '[{"action":"block_replace","block_id":"bab","replacement":"<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"},{"action":"block_insert","insertion":"<img src=\"<file_token>\" topLeftX=\"700\" topLeftY=\"400\" width=\"180\" height=\"100\"/>"}]'
|
|
110
109
|
```
|
|
111
110
|
|
|
112
111
|
整批作为原子事务:任一条失败整批不生效。失败时后端通常返回 3350001;若响应中带 `failed_part_index` / `failed_reason` 字段,shortcut 会原样透传。
|
|
@@ -137,7 +136,7 @@ cat parts.json | lark-cli slides +replace-slide --as user --presentation "$PID"
|
|
|
137
136
|
## 相关文档
|
|
138
137
|
|
|
139
138
|
- [lark-slides-replace-slide.md](lark-slides-replace-slide.md) — +replace-slide shortcut 参数详情
|
|
140
|
-
- [lark-slides-
|
|
139
|
+
- [lark-slides-update-slide.md](lark-slides-update-slide.md) — +update-slide shortcut 参数详情(整页覆盖)
|
|
141
140
|
- [lark-slides-xml-presentation-slide-get.md](lark-slides-xml-presentation-slide-get.md) — slide.get 参考(拿 `block_id` / `revision_id`)
|
|
142
141
|
- [lark-slides-xml-presentation-slide-replace.md](lark-slides-xml-presentation-slide-replace.md) — 底层 replace API 参考(一般直接用 shortcut 即可)
|
|
143
142
|
- [lark-slides-media-upload.md](lark-slides-media-upload.md) — 上传图片拿 file_token
|
|
@@ -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
|
## 命令
|
|
@@ -54,30 +52,8 @@ lark-cli slides +media-upload --file ./pic.png --presentation $PRES_ID --dry-run
|
|
|
54
52
|
|
|
55
53
|
## 使用流程
|
|
56
54
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
# 1) 上传图片
|
|
61
|
-
TOKEN=$(lark-cli slides +media-upload --as user \
|
|
62
|
-
--file ./pic.png \
|
|
63
|
-
--presentation $PRES_ID | jq -r .data.file_token)
|
|
64
|
-
|
|
65
|
-
# 2) 用 file_token 创建带图新页
|
|
66
|
-
lark-cli slides xml_presentation.slide create --as user \
|
|
67
|
-
--params "{\"xml_presentation_id\":\"$PRES_ID\"}" \
|
|
68
|
-
--data "{\"slide\":{\"content\":\"<slide xmlns=\\\"http://www.larkoffice.com/sml/2.0\\\"><data><img src=\\\"$TOKEN\\\" topLeftX=\\\"100\\\" topLeftY=\\\"100\\\" width=\\\"320\\\" height=\\\"180\\\"/></data></slide>\"}}"
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### 新建带图 PPT(推荐用 `+create --slides` 的 `@` 占位符,一步到位)
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# 不需要单独 +media-upload,写 src="@<本地路径>" 即可
|
|
75
|
-
lark-cli slides +create --as user --title "图测试" --slides '[
|
|
76
|
-
"<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><img src=\"@./pic.png\" topLeftX=\"100\" topLeftY=\"100\" width=\"320\" height=\"180\"/></data></slide>"
|
|
77
|
-
]'
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
详见 [+create 文档](lark-slides-create.md#本地图片path-占位符)。
|
|
55
|
+
> 新建 PPT([`+create --slides`](lark-slides-create.md))或给已有 PPT 加新页([`+add-slide`](lark-slides-add-slide.md))都不需要单独上传:XML 里把 `<img src>` 写成 `@<本地路径>`,CLI 会自动上传并替换成 `file_token`。
|
|
56
|
+
> 本命令用于往**已有页**里加图,或需要自己拿着 `file_token` 拼 XML 的场景。
|
|
81
57
|
|
|
82
58
|
### 给已有 PPT 的已有页加图
|
|
83
59
|
|
|
@@ -107,7 +83,7 @@ lark-cli slides +replace-slide --as user \
|
|
|
107
83
|
|
|
108
84
|
`+media-upload` 内部调用 `POST /open-apis/drive/v1/medias/upload_all`(单次上传,最大 20 MB),固定使用:
|
|
109
85
|
|
|
110
|
-
- `parent_type=slide_file`(slides
|
|
86
|
+
- `parent_type=slide_file`(slides 后端唯一接受的取值)
|
|
111
87
|
- `parent_node=<xml_presentation_id>`
|
|
112
88
|
|
|
113
89
|
**不要尝试用 `slides_image`、`slide_image` 等 parent_type**——后端会返回 1061001 / 1061002 错误。这是 slides 的特殊约定。
|
|
@@ -125,3 +101,4 @@ lark-cli slides +replace-slide --as user \
|
|
|
125
101
|
|
|
126
102
|
- [+create](lark-slides-create.md) — 新建 PPT(支持 `@` 占位符自动上传图片)
|
|
127
103
|
- [+replace-slide](lark-slides-replace-slide.md) — 给已有页加图 / 换图(`block_insert` / `block_replace`)
|
|
104
|
+
- [+add-slide](lark-slides-add-slide.md) — 追加/插入单页(同样支持 `@` 占位符自动上传)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# PPT Template Rewrite Principles
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
核心原则:模板不是风格参考,而是必须沿用的编辑底稿。
|
|
4
4
|
|
|
5
5
|
## Import First
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
如果用户提供的模板是 PPTX 格式,先把模板导入成 Lark Slides。后续写入目标是导入后的 Slides,不是新建一个脱离模板的 deck,也不是先在本地重画 PPTX 再导入。
|
|
8
8
|
|
|
9
|
-
直接使用以下命令,不需要先加载 `lark-drive`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
85
|
+
完成标准是“原模板的版式、字体和视觉结构仍清晰存在,内容已经被准确替换,并且回读后没有溢出和遮挡”。
|
|
@@ -1,9 +1,9 @@
|
|
|
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
|
|
|
5
|
+
> **`--parts` 字段名是硬约束**:装 XML 片段的字段,`block_replace` 只认 `replacement`,`block_insert` 只认 `insertion`(都是字符串)。`content` / `xml` / `new_xml` / `block_xml` / `block` / `element` / `data` 这些写法,以及任何其他字段名,**一律被 CLI 直接拒绝**——常见的错法会直接告诉你该用哪个字段(`unknown field "content"; did you mean "replacement"?`),其余只列出该 action 的合法字段集。`<content>` 是 `<shape>` 的**子元素**,不是 part 的字段名——这是最常见的搞混点。
|
|
6
|
+
|
|
7
7
|
相比直接调 `xml_presentation.slide.replace`,这个 shortcut 的四个额外价值:
|
|
8
8
|
|
|
9
9
|
1. `--presentation` 接受 `xml_presentation_id` / `/slides/` URL / `/wiki/` URL(wiki 自动解析);
|
|
@@ -74,6 +74,23 @@ lark-cli slides +replace-slide --as user \
|
|
|
74
74
|
| `insertion` | 是 | 要插入的 XML 片段 |
|
|
75
75
|
| `insert_before_block_id` | 否 | 插到这个块之前;省略(不提供此字段)则追加到页末 |
|
|
76
76
|
|
|
77
|
+
### 错误字段名(CLI 直接拒绝)
|
|
78
|
+
|
|
79
|
+
part 里出现上表以外的字段一律报错,不会被静默忽略。报错总会点名写错的那个字段,并按情况给出下一步:能对上正确字段时直接建议它(`did you mean "replacement"?`),字段属于另一个 action 时说明归属(`it belongs to block_insert`),都对不上时列出该 action 的合法字段集。无论哪种,**要改的是字段名,不是字段值**。
|
|
80
|
+
|
|
81
|
+
```jsonc
|
|
82
|
+
// ❌ 全部被拒
|
|
83
|
+
[{"action":"block_replace","block_id":"bUn","content":"<p>...</p>"}] // unknown field "content"; did you mean "replacement"?
|
|
84
|
+
[{"action":"block_replace","block_id":"bUn","xml":"<shape.../>"}] // 同上(new_xml / block_xml / element / data 一样)
|
|
85
|
+
[{"action":"block_replace","block_id":"bUn","block":{"content":"..."}}] // 不能把内容嵌一层 block
|
|
86
|
+
[{"action":"block_replace","block_id":"bUn","insertion":"<shape/>"}] // insertion 属于 block_insert
|
|
87
|
+
[{"action":"block_replace","block_id":"bUn","replacement":{"type":"..."}}] // replacement 必须是字符串,报 .replacement must be a string
|
|
88
|
+
|
|
89
|
+
// ✅ 正确
|
|
90
|
+
[{"action":"block_replace","block_id":"bUn","replacement":"<shape type=\"text\"><content><p>新内容</p></content></shape>"}]
|
|
91
|
+
[{"action":"block_insert","insertion":"<shape type=\"rect\" width=\"100\" height=\"100\"/>"}]
|
|
92
|
+
```
|
|
93
|
+
|
|
77
94
|
## 合法根元素速查
|
|
78
95
|
|
|
79
96
|
`block_replace.replacement` 和 `block_insert.insertion` 必须以 SML 2.0 定义的合法元素为根。完整权威定义看 [`slides_xml_schema_definition.xml`](slides_xml_schema_definition.xml);这里只列能作为**根**的类型 + 每种类型的最小可工作片段。
|
|
@@ -88,7 +105,6 @@ lark-cli slides +replace-slide --as user \
|
|
|
88
105
|
| `<table>` | 表格 | 整表替换会**重建内部 td id**,旧 td block_id 立即失效 |
|
|
89
106
|
| `<td>` | 单元格局部替换 | 只能 `block_replace`,不能 `block_insert`;`block_id` 必须是最新 `slide.get` 拿到的 td id |
|
|
90
107
|
| `<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
108
|
|
|
93
109
|
**不可作为根元素**:
|
|
94
110
|
|
|
@@ -227,7 +243,9 @@ lark-cli slides +replace-slide --as user \
|
|
|
227
243
|
| 3350002 not found | `--revision-id` 传了不存在的版本号(超过当前 revision) | 用 `-1` 或用 `slide.get` 拿到的有效 `revision_id` |
|
|
228
244
|
| `--parts[i] action "str_replace" is not supported` | CLI 不暴露 `str_replace` | 把替换需求改写成 `block_replace` / `block_insert` |
|
|
229
245
|
| `--parts contains N items, exceeds maximum of 200` | 一次提交 parts 太多 | 拆多次调用 |
|
|
230
|
-
| `--parts[i]
|
|
246
|
+
| `--parts[i] unknown field "content"; did you mean "replacement"?` | XML 塞进了不存在的字段名(`content` / `xml` / `block` / `data` 等) | 只改字段名:`block_replace` 用 `replacement`,`block_insert` 用 `insertion`;报错自带一行正确写法的 hint |
|
|
247
|
+
| `--parts[i] unknown field "insertion"; it belongs to block_insert` | 字段和 `action` 不配对 | 按 action 取字段:`block_replace` = `block_id` + `replacement`;`block_insert` = `insertion` (+ `insert_before_block_id`) |
|
|
248
|
+
| `--parts[i] (block_replace) requires non-empty block_id` / `replacement` | 字段名对,但值缺失或是空串 | 按 parts 元素结构补齐值 |
|
|
231
249
|
| `<img>` 不显示 / 显示破图 | `src` 写了外链 URL | 换成通过 [`+media-upload`](lark-slides-media-upload.md) 拿到的 `file_token` |
|
|
232
250
|
| 3350001 | `replacement` 不是合法单根 XML 片段,或 `block_id` 不存在 | CLI 已自动注入 `id` 和 `<content/>`;如果仍报错,重新 `slide.get` 拿最新 XML 确认 `block_id` 存在;检查 XML 结构是否合法;坐标是否超出 960×540 |
|
|
233
251
|
| 403 | 权限不足 | 需要 `slides:presentation:update` 或 `slides:presentation:write_only`;wiki URL 还需要 `wiki:node:read` |
|