@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,80 +0,0 @@
|
|
|
1
|
-
# Drive 评论查询、统计与回复指南
|
|
2
|
-
|
|
3
|
-
> 前置条件:先阅读 [`../SKILL.md`](../SKILL.md) 的“评论能力入口”,添加评论参数细节见 [`lark-drive-add-comment.md`](lark-drive-add-comment.md),获取评论列表优先使用 [`lark-drive-list-comments.md`](lark-drive-list-comments.md),reaction 见 [`lark-drive-reactions.md`](lark-drive-reactions.md)。
|
|
4
|
-
|
|
5
|
-
## 评论模式
|
|
6
|
-
|
|
7
|
-
- `drive +add-comment` 支持全文评论和局部评论。
|
|
8
|
-
- 全文评论:未传 `--block-id` 时默认启用,也可显式传 `--full-comment`;支持 `docx`、旧版 `doc` URL、白名单扩展名的 Drive file,以及最终解析为 `doc` / `docx` / `file` 的 wiki URL。
|
|
9
|
-
- 局部评论:传 `--block-id` 时启用;`docx` 支持文本定位或 block id,`sheet` 支持 `<sheetId>!<cell>`,`slides` 支持 `<slide-block-type>!<xml-id>`,wiki URL 解析到这些类型时也支持对应局部评论。
|
|
10
|
-
- Drive file 只支持全文评论,不支持局部评论。支持扩展名:`.md`、`.txt`、`.json`、`.csv`、`.go`、`.js`、`.py`、`.pptx`、`.png`、`.jpg`、`.jpeg`、`.zip`、`.mp3`、`.mp4`。`.pdf`、`.docx`、`.xlsx` 等未在白名单内的普通文件暂不支持。
|
|
11
|
-
- Review / 审阅 / 校对 / 逐条指出问题场景优先使用局部评论,不要把多个可定位问题汇总成一条全文评论。
|
|
12
|
-
- `drive +add-comment` 的 `--content` 需要传 `reply_elements` JSON 数组字符串,例如 `--content '[{"type":"text","text":"正文"}]'`。
|
|
13
|
-
- `slides` 评论要求显式传 `--block-id <slide-block-type>!<xml-id>`;CLI 会将其拆分后写入 `anchor.block_id` 和 `anchor.slide_block_type`。其中 `<xml-id>` 是 PPT XML 协议中的元素 `id`;不支持 `--selection-with-ellipsis` 和 `--full-comment`。
|
|
14
|
-
- 评论写入内容里的文本不能直接出现 `<`、`>`;提交前应转义为 `<`、`>`。`drive +add-comment` 会对 `type=text` 文本元素自动兜底转义;直接调用原生评论 API 时需要自行转义。
|
|
15
|
-
- 如果 wiki 解析后不是 `doc` / `docx` / `file` / `sheet` / `slides`,不要用 `+add-comment`。
|
|
16
|
-
|
|
17
|
-
## 查询默认口径
|
|
18
|
-
|
|
19
|
-
优先使用 `drive +list-comments`,不要优先手写 `drive file.comments list`。shortcut 默认 `--solved-status false`,即仅查询未解决评论。即使用户说“所有评论”“全部评论”“把评论都列出来”,只要没有明确提到包含已解决评论,仍然按默认口径查询未解决评论;仅当用户明确要求包含已解决评论时,才传 `--solved-status all`。只查已解决评论时传 `--solved-status true`。
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
# 默认查询:仅未解决评论
|
|
23
|
-
lark-cli drive +list-comments --url '<DOC_URL>'
|
|
24
|
-
|
|
25
|
-
# 全部评论:包含已解决和未解决
|
|
26
|
-
lark-cli drive +list-comments --url '<DOC_URL>' --solved-status all
|
|
27
|
-
|
|
28
|
-
# 已解决评论
|
|
29
|
-
lark-cli drive +list-comments --url '<DOC_URL>' --solved-status true
|
|
30
|
-
|
|
31
|
-
# 裸 wiki token
|
|
32
|
-
lark-cli drive +list-comments --token '<WIKI_TOKEN>' --type wiki
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 评论卡片与统计
|
|
37
|
-
|
|
38
|
-
- `drive file.comments list` 返回的 `items` 是评论卡片列表,每个 `item` 对应用户界面中的一张评论卡片,不是平铺的互动消息列表。
|
|
39
|
-
- 创建第一条评论时会同时创建该卡片里的第一条 reply;真正承载正文的是 `item.reply_list.replies`,其中第一条 reply 在用户视角下就是这张卡片里的“评论本身”。
|
|
40
|
-
- 统计“评论数”或“评论卡片数”:统计 `items` 长度;全量统计时对所有分页返回的 `items` 长度累加。
|
|
41
|
-
- 统计“回复数”:统计所有 `item.reply_list.replies` 长度之和,再减去 `items` 长度。
|
|
42
|
-
- 统计“总互动数”:统计所有 `item.reply_list.replies` 长度之和,包含每张评论卡片里的首条评论。
|
|
43
|
-
- 如果 `item.has_more=true`,说明该评论卡片下还有更多回复未包含在当前返回中;需要继续调用 `drive file.comment.replys list` 拉全后,再做全量回复数或总互动数统计。
|
|
44
|
-
|
|
45
|
-
## 排序
|
|
46
|
-
|
|
47
|
-
- 只有当用户明确提到“最新评论”“最后评论”“最早评论”时,才需要按 `create_time` 排序。
|
|
48
|
-
- 排序前必须拉完所有评论分页,不能只取第一页。
|
|
49
|
-
- “最新评论”/“最后评论”:按 `create_time` 降序取第一条。
|
|
50
|
-
- “最早评论”:按 `create_time` 升序取第一条。
|
|
51
|
-
- 用户只说“第一条评论”时,直接使用 `drive file.comments list` 返回的第一条,不需要额外排序。
|
|
52
|
-
|
|
53
|
-
## 回复限制
|
|
54
|
-
|
|
55
|
-
- 回复前先检查目标评论状态。
|
|
56
|
-
- `is_whole=true` 的全文评论不支持回复;遇到时提示“全文评论不支持回复”。
|
|
57
|
-
- `is_solved=true` 的已解决评论不支持回复;遇到时提示“该评论已被解决,无法回复”。
|
|
58
|
-
- 当目标评论不能回复时,只提示限制,不要自动替用户寻找其他可回复评论。
|
|
59
|
-
|
|
60
|
-
## batch_query 与 list
|
|
61
|
-
|
|
62
|
-
- `drive file.comments batch_query` 用于已知评论 ID 后的批量查询,需要传入具体评论 ID 列表。
|
|
63
|
-
- `drive +list-comments` 用于分页获取评论列表;如果要统计全量评论数、遍历包含已解决评论在内的所有评论、获取全量最新评论或最后 N 条评论,请先传 `--solved-status all` 并拉完所有分页。它会处理 URL、wiki token 和 token/type 匹配问题。
|
|
64
|
-
- `drive file.comments list` 是原生命令。需要 shortcut 未暴露的字段时才使用。
|
|
65
|
-
|
|
66
|
-
## 评论定位字段
|
|
67
|
-
|
|
68
|
-
- 需要根据评论定位到文档正文位置时(例如根据评论 review 文档、区分多处相同引用文本、把评论落点映射到 `docs +fetch` 的 block),先确认目标是 `file_type=docx`,再阅读 [`lark-drive-comment-location.md`](lark-drive-comment-location.md),并使用 `drive +list-comments --need-relation`。
|
|
69
|
-
- `--need-relation` 仅 docx 生效;其他文档类型会静默忽略。
|
|
70
|
-
|
|
71
|
-
## 原生 API
|
|
72
|
-
|
|
73
|
-
需要更底层地直接调用评论 V2 协议时,先查看 schema,再调用原生命令。全文评论省略 `anchor`,局部评论传 `anchor.block_id`。
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
lark-cli schema drive.file.comments.create_v2
|
|
77
|
-
lark-cli drive file.comments create_v2 \
|
|
78
|
-
--params '{"file_token":"<DOC_TOKEN>"}' \
|
|
79
|
-
--data '{"file_type":"docx","reply_elements":[{"type":"text","text":"全文评论内容"}]}'
|
|
80
|
-
```
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# 完整操作示例
|
|
2
|
-
|
|
3
|
-
本文档提供与 CLI schema 一致的调用示例,XML 内容均遵循 [slides_xml_schema_definition.xml](slides_xml_schema_definition.xml)。
|
|
4
|
-
|
|
5
|
-
> **重要**:新建 PPT 请使用 `slides +create --slides`,传入由 `<slide>` XML 字符串组成的 JSON 数组;每个元素必须是一页完整的 `<slide>`。复杂内容建议先创建空白 PPT,再通过 `xml_presentation.slide.create` 逐页添加。完整 `<presentation>` XML 可用于本地 lint 或读取,但不能直接作为 `+create` 的提交参数。
|
|
6
|
-
|
|
7
|
-
## 目录
|
|
8
|
-
|
|
9
|
-
- [示例 1:可靠创建 6 页 PPT](#示例-1可靠创建-6-页-ppt)
|
|
10
|
-
- [示例 7: +replace-slide + block_insert 给已有页加图](#示例-7-replace-slide--block_insert-给已有页加图)
|
|
11
|
-
- [示例 8: +replace-slide + block_replace 替换一个块](#示例-8-replace-slide--block_replace-替换一个块)
|
|
12
|
-
|
|
13
|
-
## 示例 1:可靠创建 6 页 PPT
|
|
14
|
-
|
|
15
|
-
### 1. 写入规划文件
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
DECK_DIR=".lark-slides/plan/reliable-six-page-ppt"
|
|
19
|
-
mkdir -p "$DECK_DIR"
|
|
20
|
-
|
|
21
|
-
# 按 planning-layer.md 写入 "$DECK_DIR/slide_plan.json",
|
|
22
|
-
# 至少记录 6 页的顺序和标题。
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 2. 为每页保存独立 XML
|
|
26
|
-
|
|
27
|
-
每个文件都是完整的 `<slide>`。下面的循环会生成 6 个独立 XML 文件;实际项目中可将每页主体替换为规划内容。
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
titles=("主题与结论" "问题背景" "核心方法" "关键数据" "执行计划" "总结与行动")
|
|
31
|
-
for i in {1..6}; do
|
|
32
|
-
printf -v page '%02d' "$i"
|
|
33
|
-
cat > "$DECK_DIR/slide-$page.xml" <<XML
|
|
34
|
-
<slide xmlns="http://www.larkoffice.com/sml/2.0"><style><fill><fillColor color="rgb(248,250,252)"/></fill></style><data><shape type="rect" topLeftX="56" topLeftY="56" width="12" height="428"><fill><fillColor color="rgb(37,99,235)"/></fill></shape><shape type="text" topLeftX="100" topLeftY="160" width="760" height="90"><content textType="title" autoFit="normal-auto-fit"><p>${titles[$((i-1))]}</p></content></shape><shape type="text" topLeftX="100" topLeftY="290" width="700" height="70"><content textType="body" autoFit="normal-auto-fit"><p>页面主体内容。</p></content></shape></data></slide>
|
|
35
|
-
XML
|
|
36
|
-
done
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### 3. 逐页运行 lint
|
|
40
|
-
|
|
41
|
-
提交前检查每个独立 XML。`summary.error_count` 必须为 `0`,否则先修复 XML 或布局问题。
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
for slide_xml in "$DECK_DIR"/slide-0{1,2,3,4,5,6}.xml; do
|
|
45
|
-
python3 skills/lark-slides/scripts/xml_text_overlap_lint.py \
|
|
46
|
-
--input "$slide_xml" | tee "${slide_xml%.xml}.lint.json"
|
|
47
|
-
done
|
|
48
|
-
|
|
49
|
-
test "$(jq -s 'map(.summary.error_count) | add' "$DECK_DIR"/slide-0{1,2,3,4,5,6}.lint.json)" = "0"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 4. 使用 `+create` 创建 6 页 PPT
|
|
53
|
-
|
|
54
|
-
`--slides` 接收由 6 个完整 `<slide>` XML 字符串组成的 JSON 数组;使用 `jq --rawfile` 避免手动处理 XML 引号和换行。
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
lark-cli slides +create --as user \
|
|
58
|
-
--title "可靠创建 6 页 PPT" \
|
|
59
|
-
--slides "$(jq -n \
|
|
60
|
-
--rawfile s1 "$DECK_DIR/slide-01.xml" \
|
|
61
|
-
--rawfile s2 "$DECK_DIR/slide-02.xml" \
|
|
62
|
-
--rawfile s3 "$DECK_DIR/slide-03.xml" \
|
|
63
|
-
--rawfile s4 "$DECK_DIR/slide-04.xml" \
|
|
64
|
-
--rawfile s5 "$DECK_DIR/slide-05.xml" \
|
|
65
|
-
--rawfile s6 "$DECK_DIR/slide-06.xml" \
|
|
66
|
-
'[$s1, $s2, $s3, $s4, $s5, $s6]')" \
|
|
67
|
-
> "$DECK_DIR/create.json"
|
|
68
|
-
create_status=$?
|
|
69
|
-
|
|
70
|
-
if [ "$create_status" -ne 0 ]; then
|
|
71
|
-
exit "$create_status"
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
if ! PRESENTATION_ID=$(jq -er '.data.xml_presentation_id | strings | select(length > 0)' "$DECK_DIR/create.json"); then
|
|
75
|
-
echo "missing non-empty data.xml_presentation_id in $DECK_DIR/create.json" >&2
|
|
76
|
-
exit 1
|
|
77
|
-
fi
|
|
78
|
-
echo "$PRESENTATION_ID" > "$DECK_DIR/xml_presentation_id"
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
如果创建中途失败,先保存已经返回的 `xml_presentation_id`,再回读确认实际已创建页数。
|
|
82
|
-
|
|
83
|
-
### 5. 用 `+xml-get` 回读全文 XML
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
lark-cli slides +xml-get --as user \
|
|
87
|
-
--presentation "$PRESENTATION_ID" \
|
|
88
|
-
--output "$DECK_DIR/readback.xml" \
|
|
89
|
-
--json | tee "$DECK_DIR/readback.json"
|
|
90
|
-
```
|
|
91
|
-
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# slides +replace-pages(多页整页重建)
|
|
2
|
-
|
|
3
|
-
批量替换已有演示文稿里的多个页面,保持原 `xml_presentation_id` 和原 Slides 链接不变。适合多页版式大改、坐标重排、整页视觉重建;单个文本框、图片或 shape 的局部编辑仍优先用 [`+replace-slide`](lark-slides-replace-slide.md)。
|
|
4
|
-
|
|
5
|
-
> 重要:这是多步编排,不是后端原子事务。CLI 对每页执行“先创建新页到旧页前,再删除旧页”;创建失败时旧页会保留。删除失败时可能出现新旧页同时存在,需要按返回结果继续处理。
|
|
6
|
-
|
|
7
|
-
## 命令
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
lark-cli slides +replace-pages \
|
|
11
|
-
--as user \
|
|
12
|
-
--presentation <slides_url_or_xml_presentation_id> \
|
|
13
|
-
--pages @pages.json
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## 参数
|
|
17
|
-
|
|
18
|
-
| 参数 | 必需 | 说明 |
|
|
19
|
-
|------|------|------|
|
|
20
|
-
| `--presentation` | 是 | `xml_presentation_id`、`/slides/` URL 或 `/wiki/` URL |
|
|
21
|
-
| `--pages` | 是 | JSON 数组,每项包含 `slide_id` 和 `content`;支持 literal、`@file`、stdin `-` |
|
|
22
|
-
| `--dry-run` | 否 | 基于 `slide_id` 输入输出替换计划,不执行 create/delete |
|
|
23
|
-
| `--continue-on-error` | 否 | 默认失败即停;开启后继续处理后续页,并在结果中标记失败项 |
|
|
24
|
-
| `--validate-only` | 否 | 只校验输入并生成替换计划,不执行 Slides get/create/delete |
|
|
25
|
-
|
|
26
|
-
## pages.json
|
|
27
|
-
|
|
28
|
-
```json
|
|
29
|
-
[
|
|
30
|
-
{
|
|
31
|
-
"slide_id": "slide_short_id_1",
|
|
32
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data></data></slide>"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"slide_id": "slide_short_id_2",
|
|
36
|
-
"content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data></data></slide>"
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
规则:
|
|
42
|
-
|
|
43
|
-
- 每项必须提供 `slide_id`;不支持 `slide_number`。
|
|
44
|
-
- `content` 必须是完整 `<slide>...</slide>` XML。
|
|
45
|
-
- 同一批次不能重复 `slide_id`。
|
|
46
|
-
- CLI 不会回读整份 presentation;如果 `slide_id` 已失效,create/delete 阶段会返回对应错误。
|
|
47
|
-
|
|
48
|
-
## Dry Run
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
lark-cli slides +replace-pages --as user \
|
|
52
|
-
--presentation "$PID" \
|
|
53
|
-
--pages @pages.json \
|
|
54
|
-
--dry-run
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
输出包含 `xml_presentation_id`、`pages_count`、`plan`,以及每页的 `old_slide_id`、`insert_before_slide_id` 和动作 `create_before_then_delete_old`。Dry-run 只基于输入的 `slide_id` 构造计划,不会调用 `xml_presentations.get`,也不会执行 create/delete。
|
|
58
|
-
|
|
59
|
-
## 成功输出
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"xml_presentation_id": "xxx",
|
|
64
|
-
"pages_count": 2,
|
|
65
|
-
"status": "completed",
|
|
66
|
-
"summary": {
|
|
67
|
-
"replaced": 2,
|
|
68
|
-
"failed": 0,
|
|
69
|
-
"total": 2
|
|
70
|
-
},
|
|
71
|
-
"results": [
|
|
72
|
-
{
|
|
73
|
-
"old_slide_id": "old3",
|
|
74
|
-
"new_slide_id": "new3",
|
|
75
|
-
"status": "replaced"
|
|
76
|
-
}
|
|
77
|
-
],
|
|
78
|
-
"revision_id": 123
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
如果使用 `--continue-on-error` 且任一页面失败,CLI 会继续处理后续页,但最终以 partial failure 非零退出;stdout 仍保留完整 `results`,顶层 `ok` 为 `false`,`status` 为 `partial_failure`。
|
|
83
|
-
|
|
84
|
-
`status` 可能为:
|
|
85
|
-
|
|
86
|
-
- `replaced`:新页创建成功,旧页删除成功。
|
|
87
|
-
- `create_failed`:新页创建失败,旧页保留。
|
|
88
|
-
- `delete_failed`:新页已创建,但旧页删除失败。
|
|
89
|
-
|
|
90
|
-
## 使用建议
|
|
91
|
-
|
|
92
|
-
1. 大幅改写前先 `slides +xml-get` 保存当前 XML,并记录要替换页面的 `slide_id`。
|
|
93
|
-
2. 生成只含 `slide_id` 的 `pages.json` 后先跑 `--dry-run` 或 `--validate-only`。
|
|
94
|
-
3. 默认不要开 `--continue-on-error`,除非能接受部分页面已替换。
|
|
95
|
-
4. 替换后再回读全文 XML 并截图检查,确认页序、视觉和文本没有破损。
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
# Whiteboard 画板元素
|
|
2
|
-
|
|
3
|
-
`<whiteboard>` 放在 `<data>` 内,内部可放 **SVG** 或 **Mermaid**,用于绘制流程图、时序图、架构图、散点图、漏斗图、自定义图标、装饰图案等 `<chart>` 和 `<shape>` 难以覆盖的视觉内容。
|
|
4
|
-
|
|
5
|
-
普通柱状图、条形图、折线图、面积图、雷达图、饼图 / 环图和组合图应优先使用原生 `<chart>`。除非用户明确要求像素级自定义,或图表类型确实不受 `<chart>` 支持,否则不要用 `<whiteboard>` + SVG / Mermaid 重画这些标准图表。
|
|
6
|
-
|
|
7
|
-
> 前置条件:使用本文档前先阅读 [lark-slides SKILL.md](../SKILL.md)。
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## `<chart>` 还是 `<whiteboard>`?
|
|
12
|
-
|
|
13
|
-
**先判断内容类型,再进入本文档:**
|
|
14
|
-
|
|
15
|
-
| 场景 | 推荐元素 |
|
|
16
|
-
|------|---------|
|
|
17
|
-
| 有结构化数据序列的柱/条/折线/面积/雷达/饼/环/组合图 | `<chart>` — 原生渲染,支持 legend / tooltip / 系列配色 |
|
|
18
|
-
| 散点图、漏斗图(`<chart>` 不支持)或其他非原生数据视觉 | `<whiteboard>` SVG |
|
|
19
|
-
| 流程图、时序图、架构图、类图、ER 图等拓扑图 | `<whiteboard>` Mermaid 或 SVG |
|
|
20
|
-
| 自定义图标、徽标、示意性图形(需要 path/polygon 精确控制) | `<whiteboard>` SVG |
|
|
21
|
-
| 进度条、波浪背景、装饰图案、像素级自定义可视化 | `<whiteboard>` SVG |
|
|
22
|
-
|
|
23
|
-
> 适合 `<chart>` 的内容就用 `<chart>`,不要用 SVG / Mermaid 手绘——原生渲染更省力、结构更稳定,也更容易被回读和后续编辑。
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## whiteboard 公共属性
|
|
28
|
-
|
|
29
|
-
| 属性 | 必需 | 说明 |
|
|
30
|
-
|------|------|------|
|
|
31
|
-
| `topLeftX` | 是 | 左上角 X 坐标(slide 坐标系,slide 默认宽 960) |
|
|
32
|
-
| `topLeftY` | 是 | 左上角 Y 坐标(slide 坐标系,slide 默认高 540) |
|
|
33
|
-
| `width` | 是 | 画板宽度(像素) |
|
|
34
|
-
| `height` | 是 | 画板高度(像素) |
|
|
35
|
-
|
|
36
|
-
> SVG 模式下 `<svg>` 需声明 `xmlns="http://www.w3.org/2000/svg"`;内容大小由子元素包围盒决定,`width`/`height`/`viewBox` 不影响渲染(仅当元素属性使用百分比值时需要 `viewBox` 提供计算基准)。Mermaid 模式不需要额外属性。
|
|
37
|
-
|
|
38
|
-
SVG 内的坐标相对于 whiteboard 自身左上角(0,0),与 slide 坐标系无关。
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## SVG 还是 Mermaid?
|
|
43
|
-
|
|
44
|
-
选择分三步:**先排除原生 `<chart>`,再判断 whiteboard 类型,最后看当前模型身份**。
|
|
45
|
-
|
|
46
|
-
### 第一步:先确认是否应该使用 `<chart>`
|
|
47
|
-
|
|
48
|
-
如果内容是柱状图、条形图、折线图、面积图、雷达图、饼图 / 环图或组合图,返回使用原生 `<chart>`,不要继续套用本文档的 SVG / Mermaid 路径。
|
|
49
|
-
|
|
50
|
-
### 第二步:whiteboard 类型优先判断
|
|
51
|
-
|
|
52
|
-
以下类型**推荐 Mermaid**,自动布局、代码简洁;如需精确匹配品牌配色或自定义节点样式,可改用 SVG:
|
|
53
|
-
|
|
54
|
-
| 图表类型 | Mermaid 关键字 |
|
|
55
|
-
|----------|--------------|
|
|
56
|
-
| 流程图、决策树、架构图 | `flowchart TD` / `flowchart LR` |
|
|
57
|
-
| 时序图 | `sequenceDiagram` |
|
|
58
|
-
| 类图 | `classDiagram` |
|
|
59
|
-
| 甘特图 | `gantt` |
|
|
60
|
-
| 状态图 | `stateDiagram-v2` |
|
|
61
|
-
| 思维导图 | `mindmap` |
|
|
62
|
-
| ER 图 | `erDiagram` |
|
|
63
|
-
|
|
64
|
-
### 第三步:非原生图表与装饰元素按模型身份选路径
|
|
65
|
-
|
|
66
|
-
上表以外的场景(散点图、漏斗图、进度条、时间线、波浪背景、星点纹理等)需要精确控制坐标和配色,SVG 表达力更强,但各模型生成 SVG 的能力有差异:
|
|
67
|
-
|
|
68
|
-
| 模型身份 | 路径 |
|
|
69
|
-
|----------|------|
|
|
70
|
-
| Claude / Gemini / GPT / GLM | **SVG** — 精确控制坐标、颜色、透明度 |
|
|
71
|
-
| Doubao / Seed / Other | **Mermaid** — 用 `gantt`、`flowchart` 等近似表达;确实无法用 Mermaid 表达时才回退到简单 SVG 矩形/线条 |
|
|
72
|
-
|
|
73
|
-
> **先自报身份再选路径**:在决定使用 SVG 之前,确认当前模型属于哪一类。不要跳过这一步。
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## 模式一:SVG
|
|
78
|
-
|
|
79
|
-
### ⚠️ 设计品质要求
|
|
80
|
-
|
|
81
|
-
在 slide 里嵌入 `<whiteboard>` 的目的是**表达原生 `<chart>` 或基础 `<shape>` 难以覆盖的视觉关系**,不是把标准数据图表手绘一遍。
|
|
82
|
-
|
|
83
|
-
- **不要只用矩形加文字应付**:通篇纯白底色 + 方块 + 黑字等于白做,这是不及格输出
|
|
84
|
-
- **非原生数据视觉必须有坐标系**:散点、漏斗等仍要有必要的坐标轴、刻度、数值标注或分段说明,不要只画点或色块
|
|
85
|
-
- **字号必须有层级**:标题 ≠ 标签 ≠ 数值,混用同一字号会消灭视觉焦点
|
|
86
|
-
- **配色要与 slide 主题呼应**:深色 slide 背景下图表用透明底或深色卡片;浅色背景下避免再加纯白底块
|
|
87
|
-
- **每个 whiteboard 都是设计机会**:主动用圆角、半透明填充、清晰分组、节点状态等细节拉开与默认模板的差距
|
|
88
|
-
- **写 SVG 前先判断背景亮度**:背景亮度 < 30% 时,装饰元素"对比不足"比"过强"危害更大,宁重勿轻;
|
|
89
|
-
- **装饰层次用亮度跳跃,不用线性叠透明度**:`α=0.04→0.08→0.12` 的等差递增在深色底上几乎看不出差异(相邻层亮度差 ≈20);正确做法是非线性跳跃如 `0.10→0.40→0.70→1.0`,相邻层亮度差 ≥60。
|
|
90
|
-
|
|
91
|
-
### 语法
|
|
92
|
-
|
|
93
|
-
```xml
|
|
94
|
-
<whiteboard width="400" height="300" topLeftX="500" topLeftY="120">
|
|
95
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
96
|
-
<rect x="50" y="50" width="80" height="200" rx="4" fill="rgba(59,130,246,0.85)"/>
|
|
97
|
-
<text x="90" y="270" text-anchor="middle" font-size="12" fill="rgba(100,116,139,1)">ABC</text>
|
|
98
|
-
</svg>
|
|
99
|
-
</whiteboard>
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
`<svg>` 需声明 `xmlns="http://www.w3.org/2000/svg"`;`width`/`height`/`viewBox` 无需填写,若元素属性使用百分比值则需额外声明 `viewBox`。
|
|
103
|
-
|
|
104
|
-
### ⚠️ 渲染包围盒规则
|
|
105
|
-
|
|
106
|
-
whiteboard 渲染时以**所有子元素的几何包围盒合并结果**为内容区域,自适应缩放到容器。
|
|
107
|
-
|
|
108
|
-
`<svg>` 上的 `width`、`height`、`viewBox` 不影响内容区域的计算,但 `viewBox` 有一个实际用途:**为百分比属性提供计算基准**。若元素使用 `width="50%"` 等百分比值,必须声明 `viewBox` 才能正确解析;绝对坐标元素则无需关心。推荐统一使用绝对坐标,避免引入百分比依赖。
|
|
109
|
-
|
|
110
|
-
### 支持的 SVG 元素
|
|
111
|
-
|
|
112
|
-
| 元素 | 说明 | 典型用途 |
|
|
113
|
-
|------|------|---------|
|
|
114
|
-
| `<rect>` | 矩形,支持 `rx` 圆角 | 卡片、进度条、分段色块 |
|
|
115
|
-
| `<circle>` | 圆 | 节点、装饰点、环形图 |
|
|
116
|
-
| `<ellipse>` | 椭圆 | 自定义轮廓图形 |
|
|
117
|
-
| `<line>` | 直线 | 轴线、分隔线、连接线 |
|
|
118
|
-
| `<path>` | 任意路径(支持 Q/C 曲线) | 波浪、曲线、弧形 |
|
|
119
|
-
| `<text>` | 文本,支持中文 | 标签、数值 |
|
|
120
|
-
| `<polygon>` | 多边形 | 箭头、星形、面积填充 |
|
|
121
|
-
| `<g>` | 分组 | 批量变换、语义分组 |
|
|
122
|
-
| `<linearGradient>` | 线性渐变定义,配合 `fill="url(#id)"` 使用 | 渐变背景、渐变填充 |
|
|
123
|
-
|
|
124
|
-
**颜色:** 统一用 `rgba(R,G,B,A)`,对深浅背景都友好。
|
|
125
|
-
**虚线:** `stroke-dasharray="4,4"` 用于网格线 / 坐标轴。
|
|
126
|
-
**变换:** `transform="translate(x,y)"` / `rotate(deg cx cy)` / `scale(n)` 均支持。
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
### 元素计算
|
|
130
|
-
|
|
131
|
-
SVG 中只要涉及批量定位、等间距排布或数据映射,**建议额外运行一个 Python 脚本把坐标算出来再填入 SVG**,而不是手动估值。适用范围包括散点、漏斗、装饰性点阵、等间距圆、重复图案等;普通柱状图、折线图、饼图仍应回到原生 `<chart>`。
|
|
132
|
-
|
|
133
|
-
> **主动去算**:写 SVG 之前先运行脚本,把输出当注释贴在 `<svg>` 开头,再照着填坐标。估值几乎每次都需要反复调整,跳过这步反而更慢。
|
|
134
|
-
|
|
135
|
-
**散点图 / 装饰性点阵范式**
|
|
136
|
-
|
|
137
|
-
```python
|
|
138
|
-
W, H = 360, 260
|
|
139
|
-
origin_x, origin_y = 50, 216 # 左下角,SVG Y 轴向下
|
|
140
|
-
cw, ch = 290, 184
|
|
141
|
-
|
|
142
|
-
points = [(12, 40), (28, 80), (45, 65)]
|
|
143
|
-
x_min, x_max, y_min, y_max = 0, 50, 0, 100
|
|
144
|
-
for i, (xv, yv) in enumerate(points):
|
|
145
|
-
x = round(origin_x + (xv - x_min) / (x_max - x_min) * cw)
|
|
146
|
-
y = round(origin_y - (yv - y_min) / (y_max - y_min) * ch)
|
|
147
|
-
print(f"point-{i}: cx={x} cy={y}")
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**装饰性元素(等间距范式)**
|
|
151
|
-
|
|
152
|
-
```python
|
|
153
|
-
n, total_w, cy, r = 8, 340, 40, 4
|
|
154
|
-
step = total_w / (n - 1)
|
|
155
|
-
for i in range(n):
|
|
156
|
-
print(f"circle-{i}: cx={round(i * step)} cy={cy} r={r}")
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
**最大包围盒 → whiteboard 尺寸**
|
|
160
|
-
|
|
161
|
-
所有元素坐标算完后,汇总出整体包围盒,直接作为 whiteboard 的 `width`/`height`:
|
|
162
|
-
|
|
163
|
-
```python
|
|
164
|
-
# 每个元素登记 (x, y, w, h),含 stroke 外扩
|
|
165
|
-
elements = [
|
|
166
|
-
(10, 20, 80, 160), # item-0
|
|
167
|
-
(107, 10, 80, 170), # item-1
|
|
168
|
-
(204, 40, 80, 140), # item-2
|
|
169
|
-
(0, 0, 300, 1), # x-axis
|
|
170
|
-
]
|
|
171
|
-
|
|
172
|
-
xs = [x for x, y, w, h in elements]
|
|
173
|
-
ys = [y for x, y, w, h in elements]
|
|
174
|
-
x2 = [x + w for x, y, w, h in elements]
|
|
175
|
-
y2 = [y + h for x, y, w, h in elements]
|
|
176
|
-
|
|
177
|
-
wb_w = max(x2) - min(xs)
|
|
178
|
-
wb_h = max(y2) - min(ys)
|
|
179
|
-
print(f"whiteboard width={wb_w} height={wb_h}")
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
输出即 `<whiteboard width=... height=...>` 的值,无需手动估算。
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
### 布局模式
|
|
186
|
-
|
|
187
|
-
**全屏装饰层**
|
|
188
|
-
```xml
|
|
189
|
-
<whiteboard width="960" height="540" topLeftX="0" topLeftY="0">
|
|
190
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
191
|
-
...
|
|
192
|
-
</svg>
|
|
193
|
-
</whiteboard>
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
> ⚠️ 全屏装饰 whiteboard 必须放在所有 `<shape>` / `<img>` / `<table>` 之前,否则会遮挡文字内容。XML 中元素位置越靠后,渲染层级越高。
|
|
197
|
-
|
|
198
|
-
**侧栏图表(与文字 shape 并排)**
|
|
199
|
-
```xml
|
|
200
|
-
<!-- 左侧文字 -->
|
|
201
|
-
<shape type="text" topLeftX="60" topLeftY="120" width="500" height="340">...</shape>
|
|
202
|
-
<!-- 右侧图表 -->
|
|
203
|
-
<whiteboard width="340" height="340" topLeftX="580" topLeftY="120">
|
|
204
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
205
|
-
...
|
|
206
|
-
</svg>
|
|
207
|
-
</whiteboard>
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**底部装饰条**
|
|
211
|
-
```xml
|
|
212
|
-
<whiteboard width="960" height="100" topLeftX="0" topLeftY="440">
|
|
213
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
214
|
-
...
|
|
215
|
-
</svg>
|
|
216
|
-
</whiteboard>
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
### 禁止使用的 SVG 特性
|
|
222
|
-
|
|
223
|
-
以下特性在 slide `<whiteboard>` 渲染端不支持或行为不可预测,必须避免:
|
|
224
|
-
|
|
225
|
-
| 禁止 | 原因 | 替代方案 |
|
|
226
|
-
|------|------|---------|
|
|
227
|
-
| `<radialGradient>` | 渲染失败 | 用 `<linearGradient>` 或 `rgba()` 透明度模拟深浅层次 |
|
|
228
|
-
| `<filter>`(阴影、模糊等) | 渲染失败 | 用半透明 `<rect>` 叠加模拟阴影 |
|
|
229
|
-
| `<clipPath>` / `<mask>` | 渲染失败 | 调整元素坐标和尺寸自然裁切 |
|
|
230
|
-
| `<pattern>` | 渲染失败 | 手动铺 `<circle>` / `<rect>` 点阵 |
|
|
231
|
-
| `skewX` / `skewY` / `matrix(...)` | 空间扭曲,降级渲染 | 用 `rotate` + `translate` 替代 |
|
|
232
|
-
| `<image>` 外链 URL | 不支持外链 | 先上传得到 file_token,再用 `<img>` 元素 |
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
## 模式二:Mermaid
|
|
238
|
-
|
|
239
|
-
### 语法
|
|
240
|
-
|
|
241
|
-
```xml
|
|
242
|
-
<whiteboard topLeftX="72" topLeftY="60" width="816" height="360">
|
|
243
|
-
<mermaid>
|
|
244
|
-
<![CDATA[
|
|
245
|
-
flowchart TD
|
|
246
|
-
A[检查 lark-cli 与 jq] --> B[编写每页 slide XML]
|
|
247
|
-
B --> C[通过 jq 生成 slides JSON]
|
|
248
|
-
C --> D[执行 slides +create]
|
|
249
|
-
D --> E[读取 xml_presentation_id]
|
|
250
|
-
E --> F[回读并验证创建结果]
|
|
251
|
-
]]>
|
|
252
|
-
</mermaid>
|
|
253
|
-
</whiteboard>
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
**关键点:**
|
|
257
|
-
- 内容用 `<![CDATA[...]]>` 包裹——Mermaid 语法里的 `[`、`>`、`-->` 是 XML 特殊字符,CDATA 避免转义问题
|
|
258
|
-
- whiteboard 只需 `topLeftX`、`topLeftY`、`width`、`height`
|
|
259
|
-
|
|
260
|
-
### 支持的 Mermaid 图表类型
|
|
261
|
-
|
|
262
|
-
| 类型 | 关键字 | 适用场景 |
|
|
263
|
-
|------|--------|---------|
|
|
264
|
-
| 流程图 | `flowchart TD` / `flowchart LR` | 业务流程、决策树、工作流 |
|
|
265
|
-
| 时序图 | `sequenceDiagram` | 系统交互、API 调用链 |
|
|
266
|
-
| 甘特图 | `gantt` | 项目计划、里程碑 |
|
|
267
|
-
| 类图 | `classDiagram` | 对象关系、架构设计 |
|
|
268
|
-
| ER 图 | `erDiagram` | 数据库结构 |
|
|
269
|
-
| 状态图 | `stateDiagram-v2` | 状态机、生命周期 |
|
|
270
|
-
| 思维导图 | `mindmap` | 主题梳理、知识架构 |
|
|
271
|
-
| 用户旅程 | `journey` | 用户体验路径 |
|
|
272
|
-
|
|
273
|
-
### Mermaid 布局建议
|
|
274
|
-
|
|
275
|
-
Mermaid 图表会自动撑满 whiteboard 区域。建议:
|
|
276
|
-
- 流程图留足高度,节点较多时适当增加 height(比如 400-480)
|
|
277
|
-
- 避免一页放超过 15 个节点,内容太密时考虑分页
|
|
278
|
-
- 推荐尺寸参考:
|
|
279
|
-
|
|
280
|
-
| 图表类型 | 建议 width | 建议 height |
|
|
281
|
-
|---------|-----------|------------|
|
|
282
|
-
| 流程图(5-8 节点) | 720-816 | 300-400 |
|
|
283
|
-
| 时序图(3-5 参与者) | 720-816 | 320-420 |
|
|
284
|
-
| 甘特图 | 816 | 280-360 |
|
|
285
|
-
| 思维导图 | 816 | 380-480 |
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## 注意事项 & 已知问题
|
|
290
|
-
|
|
291
|
-
### z-order(SVG 模式)
|
|
292
|
-
|
|
293
|
-
whiteboard 在 XML 中的位置决定渲染层级:在 shape 前 → 在下层;在 shape 后 → 在上层。全屏装饰 whiteboard 应放在所有 shape 之前。
|
|
294
|
-
|
|
295
|
-
### Mermaid CDATA 必要性
|
|
296
|
-
|
|
297
|
-
Mermaid 语法包含 `[`、`>`、`-->`,不用 CDATA 直接写会破坏 XML 解析。始终使用 `<![CDATA[ ... ]]>`。
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
## 快速自检清单
|
|
302
|
-
|
|
303
|
-
**SVG 模式——结构检查:**
|
|
304
|
-
- [ ] `<svg>` 声明了 `xmlns="http://www.w3.org/2000/svg"`
|
|
305
|
-
- [ ] whiteboard 的 `width`/`height` 由所有元素的最大包围盒(含 stroke 外扩)计算得出,不手动估值
|
|
306
|
-
- [ ] `topLeftX + width ≤ 960`,`topLeftY + height ≤ 540`
|
|
307
|
-
- [ ] 无 `<radialGradient>` / `<filter>` / `<clipPath>`
|
|
308
|
-
- [ ] 文字 `y` 坐标为 baseline 位置,最小值 ≥ font-size(避免被裁切)
|
|
309
|
-
|
|
310
|
-
**SVG 模式——视觉品质检查:**
|
|
311
|
-
- [ ] 非原生数据视觉有必要的坐标轴、网格线、数值标注或分段说明,没有"裸点"或无解释色块
|
|
312
|
-
- [ ] 字号有层级:标题 > 数值 > 轴标签,非全部相同
|
|
313
|
-
- [ ] 单一数据系列用同一颜色,多系列用不同颜色且对比充足
|
|
314
|
-
- [ ] 轴标签与图表元素互不遮挡,留有足够空间
|
|
315
|
-
- [ ] 坐标推导有注释(写明 originX/Y、chartW/H、数据映射公式)
|
|
316
|
-
|
|
317
|
-
**Mermaid 模式:**
|
|
318
|
-
- [ ] 内容包在 `<![CDATA[...]]>` 内
|
|
319
|
-
- [ ] CDATA 结束符 `]]>` 不出现在 Mermaid 代码本身中
|
|
320
|
-
- [ ] `topLeftX + width ≤ 960`,`topLeftY + height ≤ 540`
|
|
321
|
-
- [ ] 节点数量合理(单图不超过 15-20 个节点)
|
|
322
|
-
|
|
323
|
-
**通用:**
|
|
324
|
-
- [ ] XML 标签全部闭合,属性引号完整
|
|
325
|
-
- [ ] 如果失败,检查是否是偶发 5001000,重试一次
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
## 参考
|
|
330
|
-
|
|
331
|
-
- [lark-slides SKILL.md](../SKILL.md)
|