@amaster.ai/pi-lark 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +1 -3
  2. package/package.json +2 -2
  3. package/skills/lark-apps/SKILL.md +3 -1
  4. package/skills/lark-apps/references/lark-apps-cache.md +38 -5
  5. package/skills/lark-apps/references/lark-apps-db.md +130 -2
  6. package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
  7. package/skills/lark-base/SKILL.md +172 -167
  8. package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
  9. package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
  10. package/skills/lark-base/references/lark-base-app.md +243 -0
  11. package/skills/lark-base/references/lark-base-cell-value.md +26 -19
  12. package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +65 -6
  13. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +1 -1
  14. package/skills/lark-base/references/lark-base-dashboard.md +38 -20
  15. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
  16. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
  17. package/skills/lark-base/references/lark-base-data-query.md +8 -11
  18. package/skills/lark-base/references/lark-base-field-create.md +7 -50
  19. package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
  20. package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
  21. package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +25 -101
  22. package/skills/lark-base/references/lark-base-field-update.md +13 -51
  23. package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
  24. package/skills/lark-base/references/lark-base-form-questions-create.md +36 -5
  25. package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
  26. package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
  27. package/skills/lark-base/references/lark-base-record-history-list.md +19 -2
  28. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
  29. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
  30. package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
  31. package/skills/lark-base/references/lark-base-template-center.md +195 -0
  32. package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
  33. package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
  34. package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
  35. package/skills/lark-calendar/SKILL.md +11 -6
  36. package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
  37. package/skills/lark-calendar/references/lark-calendar-transfer.md +89 -0
  38. package/skills/lark-doc/SKILL.md +3 -3
  39. package/skills/lark-doc/references/lark-doc-fetch.md +9 -4
  40. package/skills/lark-doc/references/lark-doc-update.md +12 -8
  41. package/skills/lark-drive/SKILL.md +5 -3
  42. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -2
  43. package/skills/lark-drive/references/lark-drive-download.md +27 -1
  44. package/skills/lark-drive/references/lark-drive-export.md +1 -0
  45. package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
  46. package/skills/lark-drive/references/lark-drive-preview.md +21 -2
  47. package/skills/lark-drive/references/lark-drive-push.md +5 -1
  48. package/skills/lark-drive/references/lark-drive-search.md +2 -0
  49. package/skills/lark-im/SKILL.md +14 -3
  50. package/skills/lark-im/references/lark-im-message-read-status.md +96 -0
  51. package/skills/lark-mail/references/lark-mail-draft-create.md +12 -12
  52. package/skills/lark-mail/references/lark-mail-forward.md +17 -17
  53. package/skills/lark-mail/references/lark-mail-reply-all.md +8 -8
  54. package/skills/lark-mail/references/lark-mail-reply.md +6 -6
  55. package/skills/lark-mail/references/lark-mail-send.md +20 -20
  56. package/skills/lark-mail/references/lark-mail-template-create.md +7 -6
  57. package/skills/lark-mail/references/lark-mail-template-update.md +7 -6
  58. package/skills/lark-meeting/SKILL.md +146 -0
  59. package/skills/lark-meeting/references/lark-minutes-apply-permission.md +92 -0
  60. package/skills/lark-meeting/references/lark-minutes-detail.md +52 -0
  61. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-download.md +7 -7
  62. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-search.md +4 -34
  63. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-speaker-replace.md +3 -4
  64. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-summary.md +2 -5
  65. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-todo.md +5 -15
  66. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-update.md +2 -3
  67. package/skills/lark-meeting/references/lark-minutes-upload.md +65 -0
  68. package/skills/lark-meeting/references/lark-note-detail.md +15 -0
  69. package/skills/{lark-note → lark-meeting}/references/lark-note-transcript.md +5 -9
  70. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-join.md +4 -55
  71. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-leave.md +2 -41
  72. package/skills/lark-meeting/references/lark-vc-detail.md +31 -0
  73. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-meeting/references/lark-vc-meeting-events.md} +120 -109
  74. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-meeting/references/lark-vc-meeting-list-active.md} +4 -29
  75. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-meeting/references/lark-vc-meeting-message-send.md} +3 -5
  76. package/skills/{lark-vc → lark-meeting}/references/lark-vc-recording.md +5 -64
  77. package/skills/{lark-vc → lark-meeting}/references/lark-vc-search.md +9 -28
  78. package/skills/lark-meeting/scenes/create-and-edit-minutes.md +125 -0
  79. package/skills/lark-meeting/scenes/live-meeting-attend.md +107 -0
  80. package/skills/lark-meeting/scenes/live-meeting-interact.md +72 -0
  81. package/skills/lark-meeting/scenes/query-meeting-and-artifacts.md +90 -0
  82. package/skills/lark-meeting/scenes/query-minutes-and-artifacts.md +70 -0
  83. package/skills/lark-meeting/scenes/query-note-and-artifacts.md +127 -0
  84. package/skills/lark-minutes/SKILL.md +5 -197
  85. package/skills/lark-note/SKILL.md +5 -84
  86. package/skills/lark-shared/SKILL.md +25 -188
  87. package/skills/lark-shared/references/lark-shared-config-init.md +12 -0
  88. package/skills/lark-shared/references/lark-shared-high-risk-approval.md +38 -0
  89. package/skills/lark-shared/references/lark-shared-identity-and-permissions.md +105 -0
  90. package/skills/lark-shared/references/lark-shared-output-contract.md +17 -0
  91. package/skills/lark-shared/references/lark-shared-update-notice.md +23 -0
  92. package/skills/lark-slides/SKILL.md +56 -54
  93. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
  94. package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
  95. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
  96. package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
  97. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
  98. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
  99. package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
  100. package/skills/lark-slides/references/{lark-slides-update-slide.md → cli/lark-slides-update-slide.md} +21 -4
  101. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
  102. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
  103. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
  104. package/skills/lark-slides/references/iconpark-index.json +5 -41901
  105. package/skills/lark-slides/references/iconpark.md +3 -44
  106. package/skills/lark-slides/references/lark-slides-add-slide.md +3 -90
  107. package/skills/lark-slides/references/lark-slides-create.md +3 -174
  108. package/skills/lark-slides/references/lark-slides-delete-slide.md +3 -63
  109. package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -141
  110. package/skills/lark-slides/references/lark-slides-history.md +3 -130
  111. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -102
  112. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
  113. package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -256
  114. package/skills/lark-slides/references/lark-slides-screenshot.md +3 -113
  115. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
  116. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
  117. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -155
  118. package/skills/lark-slides/references/planning-layer.md +1 -1
  119. package/skills/lark-slides/references/slides_chart_demo.xml +5 -1415
  120. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3512
  121. package/skills/lark-slides/references/troubleshooting.md +3 -60
  122. package/skills/lark-slides/references/validation-checklist.md +3 -154
  123. package/skills/lark-slides/references/workflow/error-handling.md +62 -0
  124. package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
  125. package/skills/lark-slides/references/workflow/template-editing.md +85 -0
  126. package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
  127. package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
  128. package/skills/lark-slides/references/xml/iconpark.md +46 -0
  129. package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
  130. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3601 -0
  131. package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
  132. package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -495
  133. package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
  134. package/skills/lark-slides/scripts/xml_lint.py +2989 -0
  135. package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
  136. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2975
  137. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -4712
  138. package/skills/lark-task/SKILL.md +13 -1
  139. package/skills/lark-task/references/lark-task-create.md +3 -1
  140. package/skills/lark-vc/SKILL.md +5 -195
  141. package/skills/lark-vc-agent/SKILL.md +5 -191
  142. package/skills/lark-wiki/SKILL.md +3 -1
  143. package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
  144. package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
  145. package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
  146. package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
  147. package/skills/lark-workflow-meeting-summary/SKILL.md +20 -13
  148. package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
  149. package/skills/lark-base/references/lark-base-data-query-guide.md +0 -69
  150. package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
  151. package/skills/lark-minutes/references/lark-minutes-detail.md +0 -62
  152. package/skills/lark-minutes/references/lark-minutes-upload.md +0 -104
  153. package/skills/lark-note/references/lark-note-detail.md +0 -26
  154. package/skills/lark-vc/references/lark-vc-detail.md +0 -44
  155. package/skills/lark-vc/references/vc-domain-boundaries.md +0 -196
@@ -1,46 +1,5 @@
1
- # IconPark 图标
1
+ # IconPark 图标(兼容入口)
2
2
 
3
- IconPark 图标通过 `<icon>` 写入 slides XML,`iconType` 必须来自本 skill 的离线索引,避免凭记忆拼路径。
3
+ 本文档已迁移至 [`xml/iconpark.md`](xml/iconpark.md)。
4
4
 
5
- ## 机器优先流程
6
-
7
- ```bash
8
- python3 skills/lark-slides/scripts/iconpark_tool.py search --query "增长趋势" --limit 8
9
- python3 skills/lark-slides/scripts/iconpark_tool.py resolve --name chart-line
10
- python3 skills/lark-slides/scripts/iconpark_tool.py list-categories
11
- ```
12
-
13
- `search` 返回 JSON 数组,每项包含 `iconType`、`category`、`name`、`tags`、`score`。直接把选中的 `iconType` 写入 XML,并为图标指定可见颜色:
14
-
15
- ```xml
16
- <icon iconType="iconpark/Charts/chart-line.svg" topLeftX="80" topLeftY="120" width="32" height="32">
17
- <fill>
18
- <fillColor color="rgba(37, 99, 235, 1)"/>
19
- </fill>
20
- </icon>
21
- ```
22
-
23
- ## 使用规则
24
-
25
- - 默认先检索:语义图标需求必须先用 `iconpark_tool.py search --limit 8` 或 `--limit 10`,让 agent 从候选里结合版面语义二次判断;不要阅读全文索引,也不要编造不存在的 `iconType`。
26
- - 图标用于概念提示、步骤、状态、指标、角色和导航;不要用无关装饰图标填充版面。
27
- - 常用尺寸:行内状态图标 16-24px,卡片标题图标 28-40px,主视觉图标 56-96px。
28
- - 图标必须填充颜色并和背景有足够对比;深色背景优先放在浅色圆形/方形底上,或使用 `rgba(255, 255, 255, 1)` 作为图标填充色。
29
- - 查不到合适图标时,从高频示例里选择替代图标(随机选择,不要千篇一律),不留空图标位。
30
-
31
- ## 高频示例
32
-
33
- | 语义 | iconType |
34
- |---|---|
35
- | 设置/配置 | `iconpark/Base/setting.svg` |
36
- | 目标 | `iconpark/Base/aiming.svg` |
37
- | 增长趋势 | `iconpark/Charts/positive-dynamics.svg` |
38
- | 折线趋势 | `iconpark/Charts/chart-line.svg` |
39
- | 占比 | `iconpark/Charts/chart-proportion.svg` |
40
- | 数据看板 | `iconpark/Charts/data-screen.svg` |
41
- | 成功 | `iconpark/Character/check-one.svg` |
42
- | 失败/风险 | `iconpark/Character/close-one.svg` |
43
- | 团队/用户 | `iconpark/Peoples/peoples.svg` |
44
- | 安全防护 | `iconpark/Safe/protect.svg` |
45
- | 全球/市场 | `iconpark/Travel/world.svg` |
46
- | 邮件/联系 | `iconpark/Office/envelope-one.svg` |
5
+ 此文件仅保留旧路径兼容性;后续引用请使用新路径。
@@ -1,92 +1,5 @@
1
- # slides +add-slide(向已有演示文稿追加/插入单页)
1
+ # slides +add-slide(兼容入口)
2
2
 
3
- 向已有演示文稿添加**一页**。这是两步创建流程的第二步:先 `+create` 建空壳,再逐页 `+add-slide`;也用于给已有 PPT 追加新页。
3
+ 本文档已迁移至 [`cli/lark-slides-add-slide.md`](cli/lark-slides-add-slide.md)。
4
4
 
5
- `--presentation` 接受 token / `/slides/` URL / `/wiki/` URL(wiki 自动解析),`--slide` 直接收 XML(支持 `@file` 和 stdin,复杂 XML 走文件可绕开 shell 转义),`<img src="@./local.png">` 占位符自动上传并替换成 `file_token`。
6
-
7
- **CRITICAL — 提交前必须先跑版式 lint**:把待提交的 `<slide>` XML 存成本地文件,运行 [`scripts/xml_text_overlap_lint.py`](../scripts/xml_text_overlap_lint.py),`summary.error_count` 必须为 0。
8
-
9
- ## 命令
10
-
11
- ```bash
12
- # 追加到末尾(XML 直接作为参数)
13
- lark-cli slides +add-slide --as user \
14
- --presentation "$PID" \
15
- --slide '<slide xmlns="https://www.larkoffice.com/sml/2.0"><data></data></slide>'
16
-
17
- # XML 从文件读(推荐:避免 shell 转义和长参数截断)
18
- lark-cli slides +add-slide --as user \
19
- --presentation "$PID" \
20
- --slide @page3.xml
21
-
22
- # XML 从 stdin 读
23
- cat page3.xml | lark-cli slides +add-slide --as user --presentation "$PID" --slide -
24
-
25
- # 插到某页之前
26
- lark-cli slides +add-slide --as user \
27
- --presentation "$PID" \
28
- --slide @cover.xml \
29
- --before-slide-id "$SID"
30
-
31
- # wiki 链接(CLI 自动 wiki.spaces.get_node 解析,并校验 obj_type=slides)
32
- lark-cli slides +add-slide --as user \
33
- --presentation "https://xxx.feishu.cn/wiki/wikcnXXXXXX" \
34
- --slide @page3.xml
35
-
36
- # 预览请求,不实际写入
37
- lark-cli slides +add-slide --presentation "$PID" --slide @page3.xml --dry-run
38
- ```
39
-
40
- ## 参数
41
-
42
- | 参数 | 必需 | 说明 |
43
- |------|------|------|
44
- | `--presentation` | 是 | `xml_presentation_id`、`/slides/` URL 或 `/wiki/` URL |
45
- | `--slide` | 是 | 一个完整的 `<slide>...</slide>` 文档;支持字面量、`@file`、stdin `-` |
46
- | `--before-slide-id` | 否 | 插到该 `slide_id` 之前;**不传就是追加到末尾** |
47
- | `--revision-id` | 否 | 演示文稿版本号,默认 `-1`(最新);传具体版本号做乐观锁 |
48
- | `--dry-run` | 否 | 打印将要发起的请求(含图片上传步骤),不写入 |
49
-
50
- `@file` 路径**必须在 CWD 内**(如 `@./plan/page3.xml`);绝对路径和 `../` 会被拒绝并报 `unsafe file path`。
51
-
52
- ## 本地图片:`@路径` 占位符
53
-
54
- XML 里写 `<img src="@./chart.png" .../>`,CLI 会:先把每个不重复的本地文件上传到这份演示文稿(`parent_type=slide_file`),再把 `src` 替换成返回的 `file_token`,最后才提交页面。
55
-
56
- 占位符路径按**执行命令时的 CWD** 解析,跟 `--slide @file` 所在目录无关;`@./assets/x.png` 找的是 `$PWD/assets/x.png`。
57
-
58
- ```bash
59
- lark-cli slides +add-slide --as user \
60
- --presentation "$PID" \
61
- --slide '<slide xmlns="https://www.larkoffice.com/sml/2.0"><data><img src="@./chart.png" topLeftX="100" topLeftY="100" width="320" height="180"/></data></slide>'
62
- ```
63
-
64
- - 文件不存在、不是普通文件、超过 20 MB,都在**调用任何接口之前**报错,不会留下半成品。
65
- - 去重只在**单次调用内**生效:多页共用同一张图时,逐页循环会把它每页重传一次。这种图先用 [`+media-upload`](lark-slides-media-upload.md) 传一次,把 `file_token` 写进各页的 `src`。
66
-
67
- ## 成功输出
68
-
69
- ```json
70
- {
71
- "xml_presentation_id": "slides_example_presentation_id",
72
- "slide_id": "slide_example_id",
73
- "revision_id": 42,
74
- "before_slide_id": "slide_example_target_id",
75
- "images_uploaded": 1,
76
- "issues": "[issue=unsupported_attr tag=<strong> attr=style]"
77
- }
78
- ```
79
-
80
- | 字段 | 说明 |
81
- |------|------|
82
- | `slide_id` | 新创建页面的唯一标识 |
83
- | `issues` | 字符串,**只在服务端丢弃过内容时才出现**:页面创建成功,但括号里列出的标签/属性没写进去。出现就必须 `+screenshot` 复核,别当纯警告忽略;干净提交时这个字段不返回 |
84
-
85
- ## 常见错误
86
-
87
- | 现象 | 原因 | 解决 |
88
- |------|------|------|
89
- | `--slide is not a single complete <slide> document` | 传了 `<presentation>` 整份 XML,或多个 `<slide>` 拼在一起 | 一次只传一页,根元素必须是 `<slide>` |
90
- | `--slide cannot be empty` | `@file` 指向空文件,或 stdin 没内容 | 检查文件内容 |
91
- | 3350001 | XML 结构/转义有问题;**或 `--before-slide-id` 不是有效 `slide_id`** | 优先改用 `--slide @file` 绕开 shell 转义;插页失败先 `+xml-get` 回读确认 `slide_id`;再按 [troubleshooting.md](troubleshooting.md) 排查 |
92
- | 1061004 / 403 | 当前身份对这份 PPT 没有编辑权限 | 检查是否拥有 `slides:presentation:update` 或 `slides:presentation:write_only` scope;wiki 链接另需 `wiki:node:read`,`@` 占位符另需 `docs:document.media:upload`;`--as bot` 还要求该 bot 对目标 PPT 有编辑权限 |
5
+ 此文件仅保留旧路径兼容性;后续引用请使用新路径。
@@ -1,176 +1,5 @@
1
+ # slides +create(创建飞书幻灯片)(兼容入口)
1
2
 
2
- # slides +create(创建飞书幻灯片)
3
+ 本文档已迁移至 [`cli/lark-slides-create.md`](cli/lark-slides-create.md)。
3
4
 
4
- 创建一个新的飞书幻灯片演示文稿,可选一步添加页面内容。
5
-
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
-
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`,回读确认当前状态,再继续修复或追加。
20
-
21
- **CRITICAL — 提交前必须先跑版式 lint**:把待提交的 `<slide>` XML 存成本地文件,运行 [`scripts/xml_text_overlap_lint.py`](../scripts/xml_text_overlap_lint.py),`summary.error_count` 必须为 0。
22
-
23
- ## 命令
24
-
25
- ```bash
26
- # 创建空白 PPT
27
- lark-cli slides +create --title "项目汇报"
28
-
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 -
37
-
38
- # 以应用身份创建(自动授权当前用户)
39
- lark-cli slides +create --title "项目汇报" --as bot
40
-
41
- # 预览(不执行)
42
- lark-cli slides +create --title "项目汇报" --slide @./slide-01.xml --dry-run
43
- ```
44
-
45
- ## 返回值
46
-
47
- 工具成功执行后,返回一个 JSON 对象,包含以下字段:
48
-
49
- - **`xml_presentation_id`**(string):演示文稿的唯一标识符,后续添加页面时需要此 ID
50
- - **`title`**(string):演示文稿标题
51
- - **`url`**(string,可选):演示文稿的在线链接,如有返回则务必展示给用户(需要 drive 相关权限;若获取失败则不返回此字段)
52
- - **`revision_id`**(integer):演示文稿版本号
53
- - **`slide_ids`**(string[],可选):带页面创建时返回,成功添加的页面 ID 列表
54
- - **`slides_added`**(integer,可选):带页面创建时返回,成功添加的页面数量
55
- - **`images_uploaded`**(integer,可选):页面 XML 中含 `@<本地路径>` 占位符时返回,已上传的去重后图片数量
56
- - **`permission_grant`**(object,可选):仅 `--as bot` 时返回,说明是否已自动为当前 CLI 用户授予可管理权限
57
-
58
- > [!IMPORTANT]
59
- > 不带页面参数时,`slides +create` 只创建空白演示文稿。创建后用 [`+add-slide`](lark-slides-add-slide.md) 逐页添加 slide 内容。
60
- >
61
- > 带了页面时,CLI 先创建空白演示文稿,再逐页调用 slide 创建接口添加页面。如果某一页添加失败,CLI 会停止并报错,已创建的演示文稿和已添加的页面会保留。
62
- >
63
- > 如果演示文稿是**以应用身份(bot)创建**的,如 `lark-cli slides +create --as bot`,CLI 会**尝试为当前 CLI 用户自动授予该演示文稿的 `full_access`(可管理权限)**。
64
- >
65
- > 以应用身份创建时,结果里会额外返回 `permission_grant` 字段,明确说明授权结果:
66
- > - `status = granted`:当前 CLI 用户已获得该演示文稿的可管理权限
67
- > - `status = skipped`:本地没有可用的当前用户 `open_id`,因此不会自动授权
68
- > - `status = failed`:演示文稿已创建成功,但自动授权用户失败
69
- >
70
- > **不要擅自执行 owner 转移。** 如果用户需要把 owner 转给自己,必须单独确认。
71
-
72
- ## 参数
73
-
74
- | 参数 | 必填 | 说明 |
75
- |------|------|------|
76
- | `--title` | 否 | 演示文稿标题(不传则默认 "Untitled") |
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 再执行。
89
-
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`:
109
-
110
- ```json
111
- [
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>"
114
- ]
115
- ```
116
-
117
- 数组元素是页面 XML 原文。包装成 API 所需的 `{"slide": {"content": …}}` 并逐页调用由 CLI 完成。
118
-
119
- > [!WARNING]
120
- > `--slides '[...]'` 的风险点主要在 shell 参数传递,而不是单纯页数。即使只有 1 页,只要 XML 足够复杂,也建议改用 `--slide @page-01.xml` 逐页传文件。
121
-
122
- ## 本地图片:`@<path>` 占位符
123
-
124
- `<img>` 元素的 `src` 属性如果以 `@` 开头,CLI 会把它当作本地文件路径,自动上传到当前演示文稿,并把占位符替换为返回的 `file_token`。
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
-
136
- ```bash
137
- lark-cli slides +create --as user --title "图测试" --slide @./slide-01.xml
138
- ```
139
-
140
- 行为:
141
-
142
- - 路径相对于**当前工作目录**(CWD)解析;**必须是 CWD 内的相对路径**(如 `./pic.png`、`./assets/x.png`)
143
- - 同一份图被多次引用时**只上传一次**(按路径去重)
144
- - `src` 不以 `@` 开头的会原样保留,但**只允许写 `slides +media-upload` 拿到的 `file_token`**;**禁止写 http(s) 外链 URL**:飞书 slides 渲染端不会代理外链图片,外链 src 通常显示破图。要用网图必须先下载到 CWD 内、再走上传流程
145
- - 单张图片最大 20 MB(slides upload API 不支持分片上传)
146
- - 校验阶段就会检查所有占位符文件存在及大小;缺文件或超限直接报错,不会创建空白 PPT 占位
147
- - 创空白 PPT → 上传所有图 → 替换 token → 逐页创建 slide,按这个顺序执行
148
-
149
- > [!IMPORTANT]
150
- > **路径必须在 CWD 内**:`@/abs/path/x.png` 或 `@../up/x.png` 这种会被 CLI 拒绝(报 `unsafe file path`)。如果素材在别的目录,先 `cd` 过去再执行。
151
-
152
- ## 创建后续步骤
153
-
154
- 创建空白 PPT 时,`slides +create` 返回的 `xml_presentation_id` 用于后续操作:
155
-
156
- ```bash
157
- # 第 1 步:创建空白 PPT
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
164
- ```
165
-
166
- ## 常见错误
167
-
168
- | 错误码 | 含义 | 解决方案 |
169
- |--------|------|----------|
170
- | 400 | 参数错误 | 检查参数格式是否正确 |
171
- | 403 | 权限不足 | 检查是否拥有 `slides:presentation:create` 和 `slides:presentation:write_only` scope |
172
-
173
- ## 相关命令
174
-
175
- - [slides +add-slide](lark-slides-add-slide.md) — 追加/插入单页(两步创建的第二步)
176
- - [slides +xml-get](lark-slides-xml-presentations-get.md) — 读取 PPT 内容并保存到本地文件
5
+ 此文件仅保留旧路径兼容性;后续引用请使用新路径。
@@ -1,65 +1,5 @@
1
- # slides +delete-slide(按 slide_id 删除单页)
1
+ # slides +delete-slide(兼容入口)
2
2
 
3
- 从演示文稿删除**一页**,按 `slide_id` 指定。只改一页里的局部内容用 [`+replace-slide`](lark-slides-replace-slide.md),不要删了重建。
3
+ 本文档已迁移至 [`cli/lark-slides-delete-slide.md`](cli/lark-slides-delete-slide.md)。
4
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 有编辑权限 |
5
+ 此文件仅保留旧路径兼容性;后续引用请使用新路径。
@@ -1,143 +1,5 @@
1
- # 编辑已有 PPT:读-改-写闭环
1
+ # 编辑已有 PPT:读-改-写闭环(兼容入口)
2
2
 
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,遗漏的元素会被删除。
3
+ 本文档已迁移至 [`workflow/slides-editing.md`](workflow/slides-editing.md)。
4
4
 
5
- > 生成 XML 前**必读** [xml-schema-quick-ref.md](xml-schema-quick-ref.md)。
6
-
7
- ## 决策树:block_replace vs block_insert
8
-
9
- | 需求 | 推荐 action | 理由 |
10
- |------|------------|------|
11
- | 已知某块的 `block_id`,要换这块内容(改标题、换图、挪坐标) | `block_replace` | 精准替换,原子性好;`replacement` 根 `id` 由 CLI 自动注入为 `block_id` |
12
- | 只加 1~N 个元素、不动现有布局 | `block_insert` | 新增不覆盖,可选 `insert_before_block_id` 指定位置 |
13
- | 一次动多个元素(如:换标题 + 加图) | 单次 `--parts` 里拼多条 | 整批作为原子事务,任一失败整批不生效;`block_replace` 和 `block_insert` 可混用 |
14
- | 整页版式重建、整页坐标重排、改页面背景、删若干元素 | `+update-slide`(每页一次) | 原地整页覆盖,`slide_id` 和页序不变;带原 `id` 的元素保留 id,不带 `id` 的作为新元素插入,遗漏的被删除 |
15
-
16
- > **没有字段级 patch**:即便只想改一个 `shape` 的 `topLeftX`,也得把整个块的新 XML 写出来用 `block_replace`。这不是"微调",是块级重写。
17
-
18
- ## 最小读-改-写闭环
19
-
20
- ```bash
21
- PID="xml_presentation_id_here"
22
- SID="slide_id_here"
23
-
24
- # 1. 读原页,从 XML 里挑出要改的块的 3 位 short id(如 bUn / bab)
25
- lark-cli slides xml_presentation.slide get --as user \
26
- --params "{\"xml_presentation_id\":\"$PID\",\"slide_id\":\"$SID\"}"
27
-
28
- # 2. 用 +replace-slide 直接改那个块(不需要搬原 XML)
29
- lark-cli slides +replace-slide --as user \
30
- --presentation "$PID" --slide-id "$SID" \
31
- --parts '[{"action":"block_replace","block_id":"bUn","replacement":"<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"}]'
32
- ```
33
-
34
- `slide_id` / 页序不会变。`block_replace` 的 `replacement` 根元素 `id` 会自动注入为 `block_id`,用户手写 XML 时不需要自己加。
35
-
36
- > **part 的字段名是 `block_id` + `replacement`(XML 字符串)**:写成 `content` / `xml` / `block` 会被 CLI 拒绝(报 `unknown field "content"; did you mean "replacement"?`)。收到这个报错时改字段名,不要改字段值。
37
-
38
- ## `revision_id` 参数
39
-
40
- `--revision-id` 默认 `-1`,表示基于当前最新版执行。传具体版本号时,服务端以该版本为 base 应用变更:
41
-
42
- ```bash
43
- # 读时拿当前 revision_id
44
- REV=$(lark-cli slides xml_presentation.slide get --as user \
45
- --params "{\"xml_presentation_id\":\"$PID\",\"slide_id\":\"$SID\"}" \
46
- | jq '.data.revision_id')
47
-
48
- # 写时传该版本号,服务端以此为 base
49
- lark-cli slides +replace-slide --as user \
50
- --presentation "$PID" --slide-id "$SID" --revision-id "$REV" \
51
- --parts '[{"action":"block_replace","block_id":"bUn","replacement":"<shape type=\"rect\" topLeftX=\"100\" topLeftY=\"100\" width=\"200\" height=\"100\"/>"}]'
52
- ```
53
-
54
- 注意:传不存在的版本号(超过当前 revision)会返回 3350002 not found;不确定时用 `-1` 即可。
55
-
56
- ## `--tid` 事务锁
57
-
58
- 跨请求的并发事务 ID,多人协作长事务才用得上。**单人单次调用留空**即可。
59
-
60
- ## 两种 action 详解
61
-
62
- ### block_replace — 整块替换
63
-
64
- 适合"已知块 ID,要换这块整体内容"的场景。`replacement` 根元素的 `id="<block_id>"` 由 CLI 自动注入(用户手写的 XML 如果没带 `id` 直接省略即可;如果带了错的会被覆盖为正确值)。
65
-
66
- ```bash
67
- lark-cli slides +replace-slide --as user \
68
- --presentation "$PID" --slide-id "$SID" \
69
- --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>"}]'
70
- ```
71
-
72
- 字段说明:
73
-
74
- | 字段 | 必填 | 说明 |
75
- |------|------|------|
76
- | `action` | 是 | 固定为 `block_replace` |
77
- | `block_id` | 是 | 目标块的 3 位 short element ID(从 `slide.get` 返回的 XML 里读)|
78
- | `replacement` | 是 | 新 XML 片段;根元素 `id` 会被 CLI 自动注入为 `block_id` |
79
-
80
- ### block_insert — 整块插入
81
-
82
- 适合"只想加一个元素,不动现有元素"的场景(典型:给已有页加图)。
83
-
84
- ```bash
85
- lark-cli slides +replace-slide --as user \
86
- --presentation "$PID" --slide-id "$SID" \
87
- --parts "$(jq -n --arg token "$FILE_TOKEN" \
88
- '[{action:"block_insert",insertion:("<img src=\""+$token+"\" topLeftX=\"500\" topLeftY=\"100\" width=\"200\" height=\"150\"/>"),insert_before_block_id:"baa"}]')"
89
- ```
90
-
91
- 字段说明:
92
-
93
- | 字段 | 必填 | 说明 |
94
- |------|------|------|
95
- | `action` | 是 | 固定为 `block_insert` |
96
- | `insertion` | 是 | 要插入的完整 XML 片段 |
97
- | `insert_before_block_id` | 否 | 插到这个块之前;省略(不提供此字段)则追加到页面末尾 |
98
-
99
- > **`<img>` 必须用 `file_token`**,不能用外链 URL——先 `slides +media-upload --file ./pic.png --presentation $PID` 拿 token。
100
-
101
- ### 批量 parts
102
-
103
- 一次 `--parts` 最多 200 条,按数组顺序串行执行。`block_replace` 和 `block_insert` 可以在同一批次混用。举例:一次性把标题块替换、然后在末尾追加一个装饰图。
104
-
105
- ```bash
106
- lark-cli slides +replace-slide --as user \
107
- --presentation "$PID" --slide-id "$SID" \
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\"/>"}]'
109
- ```
110
-
111
- 整批作为原子事务:任一条失败整批不生效。失败时后端通常返回 3350001;若响应中带 `failed_part_index` / `failed_reason` 字段,shortcut 会原样透传。
112
-
113
- ## 大 --parts 用 jq 或 stdin 组装
114
-
115
- `--parts` 支持 `@file`(读文件)和 `-`(stdin)作为值来源,适合批量 XML 场景:
116
-
117
- ```bash
118
- # 从文件读
119
- lark-cli slides +replace-slide --as user --presentation "$PID" --slide-id "$SID" \
120
- --parts @parts.json
121
-
122
- # 从 stdin 读
123
- cat parts.json | lark-cli slides +replace-slide --as user --presentation "$PID" --slide-id "$SID" \
124
- --parts -
125
- ```
126
-
127
- ## 错误排查
128
-
129
- | 现象 | 原因 | 对策 |
130
- |------|------|------|
131
- | 3350001,hint 含 "block_id not found" | `parts[i].block_id` 在当前页不存在 | 重新 `slide.get` 拿最新 XML,按里面的 short ID 再填 |
132
- | 3350002 not found | `--revision-id` 传了不存在的版本号 | 用 `-1` 或实际存在的 `revision_id` |
133
- | `<img>` 不显示 / 显示破图 | `src` 写了外链 URL | 换成通过 `+media-upload` 拿到的 `file_token` |
134
- | 3350001(block_replace 返回) | 正常情况下 CLI 已自动注入 `id` 和 `<content/>`;如果仍报错,确认 `block_id` 在当前页存在(重新 `slide.get`),检查 XML 结构是否合法;坐标是否超出 960×540 范围 | — |
135
-
136
- ## 相关文档
137
-
138
- - [lark-slides-replace-slide.md](lark-slides-replace-slide.md) — +replace-slide shortcut 参数详情
139
- - [lark-slides-update-slide.md](lark-slides-update-slide.md) — +update-slide shortcut 参数详情(整页覆盖)
140
- - [lark-slides-xml-presentation-slide-get.md](lark-slides-xml-presentation-slide-get.md) — slide.get 参考(拿 `block_id` / `revision_id`)
141
- - [lark-slides-xml-presentation-slide-replace.md](lark-slides-xml-presentation-slide-replace.md) — 底层 replace API 参考(一般直接用 shortcut 即可)
142
- - [lark-slides-media-upload.md](lark-slides-media-upload.md) — 上传图片拿 file_token
143
- - [xml-schema-quick-ref.md](xml-schema-quick-ref.md) — XML 元素和属性速查
5
+ 此文件仅保留旧路径兼容性;后续引用请使用新路径。