@amaster.ai/pi-lark 0.1.7 → 0.1.9

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 (215) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +41 -6
  3. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
  4. package/skills/lark-apps/references/lark-apps-create.md +6 -3
  5. package/skills/lark-apps/references/lark-apps-db.md +130 -2
  6. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  9. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  10. package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
  11. package/skills/lark-base/SKILL.md +155 -159
  12. package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
  13. package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
  14. package/skills/lark-base/references/lark-base-app.md +225 -0
  15. package/skills/lark-base/references/lark-base-cell-value.md +26 -19
  16. package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +37 -5
  17. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +18 -2
  18. package/skills/lark-base/references/lark-base-dashboard.md +25 -12
  19. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
  20. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
  21. package/skills/lark-base/references/lark-base-data-query.md +8 -11
  22. package/skills/lark-base/references/lark-base-field-create.md +13 -45
  23. package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
  24. package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
  25. package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +18 -100
  26. package/skills/lark-base/references/lark-base-field-update.md +13 -51
  27. package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
  28. package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
  29. package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
  30. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
  31. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
  32. package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
  33. package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
  34. package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
  35. package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
  36. package/skills/lark-calendar/SKILL.md +3 -1
  37. package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
  38. package/skills/lark-doc/SKILL.md +26 -61
  39. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  40. package/skills/lark-doc/references/genres/data-report.md +32 -0
  41. package/skills/lark-doc/references/genres/email.md +38 -0
  42. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  43. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  44. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  45. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  46. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  47. package/skills/lark-doc/references/genres/prd.md +26 -0
  48. package/skills/lark-doc/references/genres/proposal.md +24 -0
  49. package/skills/lark-doc/references/genres/research-report.md +32 -0
  50. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  51. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  52. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  53. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  54. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  55. package/skills/lark-doc/references/genres/route-media.md +36 -0
  56. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  57. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  58. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  59. package/skills/lark-doc/references/genres/route-report.md +10 -0
  60. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  61. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  62. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  63. package/skills/lark-doc/references/genres/wechat.md +39 -0
  64. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  65. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  66. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  67. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  68. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  69. package/skills/lark-doc/references/lark-doc-fetch.md +80 -92
  70. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  71. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  72. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  73. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  74. package/skills/lark-doc/references/lark-doc-update.md +73 -221
  75. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  76. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  77. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  78. package/skills/lark-drive/SKILL.md +11 -7
  79. package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
  80. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  81. package/skills/lark-drive/references/lark-drive-download.md +29 -2
  82. package/skills/lark-drive/references/lark-drive-export.md +4 -0
  83. package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
  84. package/skills/lark-drive/references/lark-drive-preview.md +21 -2
  85. package/skills/lark-drive/references/lark-drive-push.md +5 -1
  86. package/skills/lark-drive/references/lark-drive-search.md +2 -0
  87. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  88. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  89. package/skills/lark-event/SKILL.md +7 -4
  90. package/skills/lark-event/references/lark-event-vc.md +8 -2
  91. package/skills/lark-im/SKILL.md +14 -9
  92. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  93. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  94. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  95. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  96. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  97. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  98. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  99. package/skills/lark-im/references/lark-im-flag-list.md +2 -2
  100. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  101. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  102. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  103. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  104. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  105. package/skills/lark-minutes/SKILL.md +12 -6
  106. package/skills/lark-minutes/references/lark-minutes-apply-permission.md +95 -0
  107. package/skills/lark-minutes/references/lark-minutes-detail.md +7 -6
  108. package/skills/lark-minutes/references/lark-minutes-download.md +4 -2
  109. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  110. package/skills/lark-note/SKILL.md +13 -9
  111. package/skills/lark-note/references/lark-note-detail.md +5 -2
  112. package/skills/lark-note/references/lark-note-transcript.md +2 -0
  113. package/skills/lark-shared/SKILL.md +39 -3
  114. package/skills/lark-sheets/SKILL.md +83 -82
  115. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  116. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  117. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  118. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  119. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  120. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  121. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  122. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  123. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  124. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  125. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  126. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  127. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  128. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  129. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  130. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  131. package/skills/lark-slides/SKILL.md +64 -81
  132. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
  133. package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
  134. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
  135. package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
  136. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
  137. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
  138. package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
  139. package/skills/lark-slides/references/cli/lark-slides-update-slide.md +163 -0
  140. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
  141. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
  142. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
  143. package/skills/lark-slides/references/iconpark-index.json +5 -41901
  144. package/skills/lark-slides/references/iconpark.md +3 -44
  145. package/skills/lark-slides/references/lark-slides-add-slide.md +5 -0
  146. package/skills/lark-slides/references/lark-slides-create.md +3 -162
  147. package/skills/lark-slides/references/lark-slides-delete-slide.md +5 -0
  148. package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -142
  149. package/skills/lark-slides/references/lark-slides-history.md +3 -130
  150. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -124
  151. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
  152. package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -235
  153. package/skills/lark-slides/references/lark-slides-screenshot.md +3 -95
  154. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
  155. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
  156. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -132
  157. package/skills/lark-slides/references/planning-layer.md +1 -1
  158. package/skills/lark-slides/references/slides_chart_demo.xml +5 -1416
  159. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3468
  160. package/skills/lark-slides/references/troubleshooting.md +3 -61
  161. package/skills/lark-slides/references/validation-checklist.md +3 -154
  162. package/skills/lark-slides/references/workflow/error-handling.md +62 -0
  163. package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
  164. package/skills/lark-slides/references/workflow/template-editing.md +85 -0
  165. package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
  166. package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
  167. package/skills/lark-slides/references/xml/iconpark.md +46 -0
  168. package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
  169. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3514 -0
  170. package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
  171. package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -483
  172. package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
  173. package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
  174. package/skills/lark-slides/scripts/xml_lint.py +2989 -0
  175. package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
  176. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2691
  177. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -3788
  178. package/skills/lark-task/SKILL.md +12 -0
  179. package/skills/lark-task/references/lark-task-create.md +3 -1
  180. package/skills/lark-vc/SKILL.md +15 -5
  181. package/skills/lark-vc/references/lark-vc-detail.md +11 -6
  182. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-vc/references/lark-vc-meeting-events.md} +121 -20
  183. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-vc/references/lark-vc-meeting-list-active.md} +2 -2
  184. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-vc/references/lark-vc-meeting-message-send.md} +3 -3
  185. package/skills/lark-vc/references/lark-vc-recording.md +8 -6
  186. package/skills/lark-vc/references/vc-domain-boundaries.md +8 -1
  187. package/skills/lark-vc-agent/SKILL.md +24 -9
  188. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +2 -2
  189. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +2 -2
  190. package/skills/lark-whiteboard/SKILL.md +15 -8
  191. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  192. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  193. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  194. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  195. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  196. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  197. package/skills/lark-whiteboard/routes/svg.md +3 -1
  198. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  199. package/skills/lark-wiki/SKILL.md +8 -4
  200. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  201. package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
  202. package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
  203. package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
  204. package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
  205. package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
  206. package/skills/lark-base/references/lark-base-data-query-guide.md +0 -61
  207. package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
  208. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  209. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  210. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  211. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  212. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  213. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  214. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
  215. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
@@ -0,0 +1,38 @@
1
+ # Genre Contract: Xiaohongshu Note / 小红书笔记 (`platform.xiaohongshu`)
2
+
3
+ ## 核心定位(硬约束)
4
+
5
+ - 交付物是飞书文档中的“小红书风格”内容稿,不代表实际发布,也不执行小红书平台审核、禁词、流量或商业规则。
6
+ - 视觉策略默认使用 `rich`,偏爱图文并茂和清晰轻松的阅读体验,但装饰不能代替内容。
7
+ - 写作风格鲜活、有节奏、有画面感,可使用符合语境的 emoji。
8
+ - 一篇只解决一个主要问题;标题、封面、首屏和正文围绕同一获得感并真正兑现。不编造亲历、身份、数字、效果或用户反馈,材料不足时用第二人称、场景化讲解或中性叙述。
9
+ - 飞书源稿禁止使用 `callout`;生成后通过 Draft Profile Check 的 `profile.blocks` 检查,其他 block 按真实信息关系选择。
10
+
11
+ ## 适用与消歧
12
+
13
+ 用户明确要“小红书笔记、小红书写法、小红书 style、红书感、XHS 风格”时使用,内容保存在哪里不影响本合同生效。
14
+
15
+ 仅把小红书作为研究对象、数据源或业务渠道时不触发:小红书运营方案走 Workplace,平台数据或竞品分析走 Report,规则说明走 Knowledge。若同时要小红书风格稿和正式体裁,分别生成,不混写。
16
+
17
+ ## 笔记主任务
18
+
19
+ | 主任务 | 内容脊柱 |
20
+ |-|-|
21
+ | 教程 / 攻略 / 知识 | 痛点场景 → 核心判断 → 分步做法 → 易错点 / 限制 → 马上可做的一步 |
22
+ | 体验 / 测评 / 探店 | 使用场景 → 具体观察 → 亮点与槽点 → 适合谁 / 不适合谁 → 选择建议 |
23
+ | 观点 / 热点 | 争议或反差 → 核心判断 → 理由与例子 → 另一面 / 边界 → 留给读者的问题 |
24
+ | 个人经历 / 成长 | 真实困扰 → 转折瞬间 → 做过什么 → 可观察变化 → 可迁移认识 |
25
+ | 推荐 / 种草 / 活动 | 目标人群与场景 → 核心价值 → 具体理由 / 体验 → 使用条件与取舍 |
26
+
27
+ ## 成稿要求
28
+
29
+ - 先钉住具体读者、场景与获得感;内部比较搜索清晰型、痛点共鸣型、反差好奇型 3 个标题,成稿只输出正文能兑现的最强一个。
30
+ - 首屏用 1—3 个短段落完成“具体场景 / 冲突 → 核心判断 → 内容预告”,不从宏大背景或自我介绍讲起。
31
+ - 正文用短段落和有意义的小标题按信息增量推进;每节新增动作、观察、例子、判断或限制。“活人感”来自具体细节、选择和取舍,不靠强塞网感词。
32
+ - emoji 可比正式体裁用得更积极,用于导航、语气和停顿,但不连续堆叠。围绕一个视觉中心设计封面,图片 / 截图 / 示意图就近服务对应内容;无可用图片时给出简短配图建议,正文仍须独立可读。
33
+ - 核心主题词自然出现在标题或首屏,相关表达按需进入小标题和正文;话题标签少而相关,不为覆盖关键词而复读。
34
+ - 结尾用一句记忆点收束;互动问题可选且至多一个,不要求固定收尾动作。
35
+
36
+ ## 交付前检查
37
+
38
+ 确认读者能一眼判断“这和我有关”,标题承诺已兑现,每节都有实质信息,手机上容易扫读,emoji 与图片确实帮助理解。出现公文腔、长铺垫、文字墙、题文错配、空情绪或虚构事实时返工。
@@ -0,0 +1,121 @@
1
+ # Lark Doc Authoring
2
+
3
+ ## Philosophy
4
+
5
+ 以下原则是每个内容、结构和视觉决策的判定依据;写作和复查时逐条套用,冲突时按「约束栈」排序。
6
+
7
+ - **读者本位**:落地前先回答:读者是谁、为什么要读、带着什么任务来。按读者的任务组织内容,不按功能或作者视角罗列。
8
+ - **结构先行**:结论先行,先整体后局部;按逻辑分组与递进,依据关系选择列表、步骤或表格,使内容便于扫读。(特殊体裁除外)
9
+ - **视觉服从语义**:先确定全篇主线和每节的中心任务或命题,再让视觉层级复现内容优先级。文档脱离讲解仍须完整、连续、可独立阅读。
10
+ - **最低理解成本**:选择最能降低读者理解、执行和出错成本的表达形式,而不是机械选择字符最少或制作成本最低的形式;删冗余,用短句、动词和数据,并按真实信息关系使用图、表格或交互组件。
11
+ - **克制且连贯**:每个视觉元素必须承担导航、比较、解释、证据、行动,或体裁所需的氛围与品牌功能;相关文字与视觉相邻,同类关系复用同类组件和样式。去掉后不影响读者任务或预期语气的装饰应删除。
12
+ - **约束栈**:事实 > 用户硬约束 > 读者任务 > 内容 > 组件样式;后项不得牺牲或放宽前项,格式与组件不得反向改变内容判断。
13
+ - **表达一致**:同一对象、动作和状态全文同名;标题层级与编号采用统一体系,如下;用户提供样例时,在不违反更高优先级规则的前提下延续其有效结构、语气、术语和编号。
14
+ - **自动编号模式**:每一个正文标题都写 `seq="auto"`,标题文本不手写任何前置序号。
15
+ - **中文手写模式**:适用于公文或正式场景,在标题文本中手写 `一、→(一)→ 1.→(1)`;最忌中文层级配阿拉伯小数,绝不出现 `一、` 下接 `1.1`。
16
+
17
+ ## Step Plan
18
+
19
+ **CRITICAL:从零创作文档时按下述步骤依次执行,不可跳步。**
20
+
21
+ ### Step 1:理解读者任务、文档格式要求、硬约束和禁区。
22
+
23
+ ### Step 2:选择 genre content contract。
24
+
25
+ 下表文件均位于当前 Skill 的 `references/genres/` 目录。
26
+
27
+ - 路由表仅用于选择候选,不代替 contract。高置信命中后必须读取对应 Profile / Adapter,并按其中的路由与消歧规则复核;未读取不得确定该值或进入 Step 3。确认后记录固定短名,最多各读取一个;未命中时,`genre_contract` 和 `adapter` 均可使用 `"none"` 或 `null`。
28
+ - contract 决定内容任务、证据和体裁边界;adapter 只调整与所选 contract 兼容的平台结构、写作风格和组件约束。
29
+
30
+ | Content Profile | 独特专业任务 |
31
+ |-|-|
32
+ | [`route-workplace.md`](genres/route-workplace.md) | 组织决策、执行、留档 |
33
+ | [`route-report.md`](genres/route-report.md) | 数据、研究和证据形成洞察 |
34
+ | [`route-knowledge.md`](genres/route-knowledge.md) | 理解、自学、一次已知操作或检索 |
35
+ | [`route-media.md`](genres/route-media.md) | 独立采集、核实和公共理解 |
36
+ | [`route-opinion.md`](genres/route-opinion.md) | 形成并论证判断 |
37
+ | [`route-consumer.md`](genres/route-consumer.md) | 以真实体验或测试辅助消费选择 |
38
+ | [`route-marketing.md`](genres/route-marketing.md) | 组织授权的认知、转化或公关内容 |
39
+ | [`route-personal-brand.md`](genres/route-personal-brand.md) | 本人经历、能力和作品的可信呈现 |
40
+ | [`route-creative.md`](genres/route-creative.md) | 角色、冲突、情节与分支叙事 |
41
+
42
+ | Adapter | 渠道 |
43
+ |-|-|
44
+ | [`route-platform.md`](genres/route-platform.md) | Email、微信公众号、小红书 |
45
+
46
+ ### Step 3:收集资料并扫描表达机会。
47
+
48
+ 1. 强制扫描事实、数据、案例、引用和图片等资源缺口;内容需要而现有材料不足时必须检索或生成,判断需要图片且用户未提供素材时必须搜索图片。
49
+ 2. 根据用户要求、contract / adapter 限制和内容需要确定 `presentation_mode`,再识别真实信息关系并选择候选表达;不因命中关系就机械使用组件。
50
+
51
+ | 信息关系 | 候选表达 |
52
+ |-|-|
53
+ | 同组字段的精确比较或映射 | `table` |
54
+ | 流程、依赖、分支、时序、层级、因果、空间或拓扑关系 | `whiteboard` |
55
+ | 对象、场景、界面、外观、氛围、示例或视觉证据 | `img` |
56
+ | 复杂交互、动态状态、可探索数据或应用式布局 | `html5-block` |
57
+ | 两组简短、等权且适合横向阅读的信息 | `grid` |
58
+ | 单个关键提醒或限制 | `callout` |
59
+ | 简单并列、步骤或连续论述 | 列表或段落 |
60
+
61
+ 3. 按全篇、章节、block 三个尺度构图:相关内容相邻,同类关系保持相同顺序与对齐;正文可以是主表达,不要求每节都有 presentation block。
62
+ 4. 在写正文前确定计划使用的 block 和具体 `purpose`。Presentation Decision 的 `visual_plan.blocks` 只记录确需最低数量约束的 `whiteboard`、`img`、`html5-block`。三类均无硬性数量要求时写 `"blocks": []`。
63
+
64
+ `presentation_mode` 只表示模型采用的视觉策略;只有用户要求、contract / adapter 限制互相冲突时才询问用户:
65
+
66
+ - `formal`:视觉正式、克制;不使用高亮块、emoji 或装饰性组件,只保留正式体裁确有必要的结构。
67
+ - `normal`:按内容需要使用组件;只有能降低理解、执行或出错成本时才扩展视觉表达。
68
+ - `rich`:主动利用图片、画板、HTML 和其他飞书组件;每个组件须有明确目的,不设全局数量配额。
69
+
70
+ ### Step 4:提交 Presentation Decision,并初始化草稿。
71
+
72
+ 生成完整 JSON;字段值必须来自 Step 1–3,不得照抄示例。`word_count` 仅在用户明确提出字数要求时加入,使用 `min` / `max`;单边无限制写 `null`,“约 N 字”按 ±10%,无要求时省略整个字段:
73
+
74
+ ```json
75
+ {
76
+ "audience": "项目负责人",
77
+ "reader_task": "判断偏差并决定下一轮动作",
78
+ "genre_contract": null,
79
+ "adapter": null,
80
+ "presentation_mode": "rich",
81
+ "visual_plan": {
82
+ "reason": "需要用因果图解释偏差来源与后续行动依赖",
83
+ "blocks": [
84
+ {"type": "whiteboard", "min_count": 1, "purpose": "展示偏差成因与行动依赖"}
85
+ ]
86
+ }
87
+ }
88
+ ```
89
+
90
+ 不预建临时目录、草稿或决策文件。将上述 JSON 原样替换命令中的占位符并实际执行:
91
+
92
+ ```bash
93
+ lark-cli docs +script --command init-draft --presentation-decision '<上方完整 JSON>' --format json
94
+ ```
95
+
96
+ 成功后:
97
+
98
+ - 保持当前工作目录不变;将 `data.workspace` 原样记为 `work_dir`,将 `data.draft_path` 原样记为 `draft_path`;遵循 `data.tip`,后续始终使用 `@./<draft_path>`。
99
+ - CLI 会创建独占的 `work_dir` 并保存 `.presentation-decision.json` 作为固定基线,**但不会创建 `draft_path` 指向的 XML**。`draft_path` 是当前任务可直接写入的新文件路径;要求、资料或 contract 实质变化时,提交新决策并重新初始化,不得直接改基线。
100
+
101
+ ### Step 5:生成 release candidate。
102
+
103
+ 读取 [`lark-doc-xml.md`](lark-doc-xml.md),并结合 Presentation Decision、适用 contract 和 Philosophy 生成完整 XML。使用扩展标签时按需读取 [`拓展标签`](lark-doc-xml-extended-blocks.md)。
104
+
105
+ 1. 公开网络图片使用 `<img href="URL"/>`;已有本地图片使用 `<img path="@./relative/path"/>`;画板使用 `<whiteboard path="@./relative/path"/>` 并遵循[`画板工作流`](lark-doc-whiteboard.md);HTML 使用 `<html5-block path="@./file.html"/>` 并遵循[`拓展标签`](lark-doc-xml-extended-blocks.md)。
106
+ 2. 直接在 Step 4 返回的 `draft_path` 创建并写入完整 release candidate。
107
+ 3. 首次写入后,发现 XML 语法问题时只修复最小范围,不无故重写正确内容。
108
+
109
+ ### Step 6:执行 Draft Profile Check。
110
+
111
+ 1. 执行 `lark-cli docs +script --command parse --content "@./<draft_path>" --format json`。顶层 `ok` 仅表示命令执行成功,是否通过看 `data.assessment.status`。失败时按 `data.diagnostics[]` 局部修复;只有草稿为空、截断或结构无效时才全文重建。`parse` 不替代 XML 规则或服务端校验。
112
+ 2. Profile Check 通过后,按 [`lark-doc-xml.md`](lark-doc-xml.md) 复查标签、属性和值,并依据 Philosophy 检查事实与来源、用户硬约束、适用 contract / adapter 以及 `visual_plan`。最终 XML 能否写入以 `docs +create` 的服务端结果为准。
113
+
114
+ ### Step 7:创建文档并处理局部失败。
115
+
116
+ 1. 只有最新 release candidate 完成 Draft Profile Check 和 XML 规则复查后,才读取 [`lark-doc-create.md`](lark-doc-create.md),使用同一个 `draft_path` 创建文档。
117
+ 2. 创建结果存在 warning、局部资源失败或回查发现局部问题时,不得再次新建文档;读取 [`lark-doc-update.md`](lark-doc-update.md),对已创建文档做最小范围修复,并按 update 流程 fetch 验证。
118
+
119
+ ### Step 8:清理并交付。
120
+
121
+ 无论创建成功、失败或被阻塞,只要 Step 4 已返回 `work_dir`,就先离开该目录,再使用当前运行时的文件删除能力精确删除整个 `work_dir`;不要使用通配符,也不要删除目录外的用户原始文件。最终只交付用户需要的结果,并说明必要来源、未关闭缺口、异常、失败或阻塞原因,以及文档 URL 或 token。
@@ -1,24 +1,15 @@
1
1
  # docs +create(创建飞书云文档)
2
2
 
3
- > **前置条件(MUST READ):** 生成文档内容前,必须先用 Read 工具读取以下文件,缺一不可:
4
- > 1. [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规则(使用 Markdown 格式时改读 [`lark-doc-md.md`](lark-doc-md.md))
5
- > 2. [`lark-doc-style.md`](style/lark-doc-style.md) — 写作原则(默认段落、按体裁、组件克制)
6
- > 3. [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、单 Agent 串行撰写)
7
- >
8
- > **未读完以上文件就生成内容会导致格式错误。**
3
+ 从 XML(默认)或 Markdown 内容创建一个新的飞书云文档;语义创作默认使用 XML,只有 Authoring 明确判定为 Markdown 例外时才使用 Markdown。
9
4
 
10
- 从 XML(默认)或 Markdown 内容创建一个新的飞书云文档。
11
-
12
- > **⚠️ 格式选择规则:** 创建 / 导入场景下 XML 和 Markdown 都可以——用户提供 `.md` 本地文件、或明确说"导入 Markdown"时,直接用 Markdown;没有明确指示时默认 XML(表达能力更强,可承载更丰富的结构化内容)。不要在用户没要求的情况下主动从 XML 切到 Markdown,也不要在用户已给出 Markdown 时强行改成 XML。
5
+ 写入前必须按 `--doc-format` 读取对应格式参考:`xml` 读取 [`lark-doc-xml.md`](lark-doc-xml.md),`markdown` 读取 [`lark-doc-md.md`](lark-doc-md.md);Markdown 中使用 XML 扩展标签时还须读取 `lark-doc-xml.md`。
13
6
 
14
7
  ## 命令
15
8
 
16
9
  ```bash
17
- # 创建 XML 文档(默认格式,推荐)
18
- lark-cli docs +create --content '<title>项目计划</title><h1>目标</h1><p>记录本周重点。</p>'
19
-
20
- # 仅当用户明确要求导入 Markdown 时才使用;文档标题用 --title,正文标题按内容自然组织
21
- lark-cli docs +create --doc-format markdown --title "项目计划" --content $'## 目标\n\n- 明确重点\n- 记录待办'
10
+ # 简单内容优先使用 `--content -`,文件导入如下:
11
+ lark-cli docs +create --doc-format xml --content "@<XML 文件相对路径>"
12
+ lark-cli docs +create --doc-format markdown --content "@./draft.md"
22
13
  ```
23
14
 
24
15
  ## 返回值
@@ -35,46 +26,29 @@ lark-cli docs +create --doc-format markdown --title "项目计划" --content $'#
35
26
  "new_blocks": [
36
27
  { "block_id": "blkcnXXXX", "block_type": "whiteboard", "block_token": "boardXXXX" }
37
28
  ]
38
- }
29
+ },
30
+ "warnings": [],
31
+ "tips": ""
39
32
  }
40
33
  }
41
34
  ```
42
35
 
43
- - **`document.new_blocks`**:本次操作新增的 block 列表(如画板)。`block_id` 可用于 `docs +update` 的 `--block-id` 做精确编辑;`block_token` 是资源块(如画板)的 token,可交给 `lark-whiteboard` 等 skill 继续操作
44
-
45
- > \[!IMPORTANT]
46
- > 如果文档是**以应用身份(bot)创建**的,如 `lark-cli docs +create --as bot` 在文档创建成功后,CLI 会**尝试为当前 CLI 用户自动授予该文档的 `full_access`(可管理权限)**。
47
- >
48
- > 以应用身份创建时,结果里会额外返回 `permission_grant` 字段,明确说明授权结果:
49
- > - `status = granted`:当前 CLI 用户已获得该文档的可管理权限
50
- > - `status = skipped`:本地没有可用的当前用户 `open_id`,因此不会自动授权;可提示用户先完成 `lark-cli auth login`,再让 AI / agent 继续使用应用身份(bot)授予当前用户权限
51
- > - `status = failed`:文档已创建成功,但自动授权用户失败;会带上失败原因,并提示稍后重试或继续使用 bot 身份处理该文档
52
- >
53
- > `permission_grant.perm = full_access` 表示该资源已授予”可管理权限”。
54
- >
55
- > **不要擅自执行 owner 转移。** 如果用户需要把 owner 转给自己,必须单独确认。
36
+ - **`document.new_blocks`**:本次操作新增的 block 列表(如画板)。`block_id` 可用于 `docs +update` 的 `--block-id` 做精确编辑;`block_token` 是资源块(如画板)的 token,可交给 `lark-whiteboard` 等 skill 继续操作。
37
+ - **`warnings`**:服务端返回的警告列表;`ok=true` 时也要检查,按提示确认是否存在降级或未完全处理的内容。
38
+ - **`tips`**:服务端返回的后续处理建议;为空表示没有额外建议,非空本身不表示创建失败。
39
+ - **`permission_grant`**:仅以 bot 身份创建时返回。CLI 会尝试为当前 CLI 用户授予新文档的 `full_access`;`status` 为 `granted` 表示授权成功,`skipped` 表示没有可用的当前用户 `open_id`,`failed` 表示文档已创建但授权失败。`perm` 固定为 `full_access`,失败或跳过时按 `message` / `hint` 处理。**自动授权不等于 owner 转移;用户要求转移 owner 时必须单独确认。**
56
40
 
57
41
  ## 参数
58
42
 
59
- | 参数 | 必填 | 说明 |
60
- | ------------------- | -- |---------------------------------------------|
61
- | `--title` | 否 | 文档标题,Markdown 导入时使用;XML 创建推荐在 `--content` 开头写 `<title>...</title>`;多个标题仅保留第一个并在 `warnings` / `degrade_details` 提示 |
62
- | `--content` | 视情况 | 文档内容(XML 或 Markdown 格式);不传 `--content` 时必须传 `--title` |
63
- | `--reference-map` | 否 | 结构化 `reference_map` JSON object;必须与 `--content` 一起使用。普通写入优先把结构写在正文里;该参数主要用于保留或回放已有 `document.reference_map`。支持直接 JSON、`@reference-map.json`(相对路径)或 `-` 从 stdin 读取。 |
64
- | `--doc-format` | 否 | 内容格式:`xml`(默认,始终优先使用)\| `markdown`(仅用户明确要求时) |
65
- | `--parent-token` | 否 | 父文件夹或知识库节点 token(与 `--parent-position` 互斥) |
66
- | `--parent-position` | 否 | 父节点位置,如 `my_library`(与 `--parent-token` 互斥) |
67
-
68
- ## 最佳实践
69
-
70
- - **较长文档**:参考 [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) 先建骨架再分段写入;短文档可一次写完整内容
71
- - **表达形式**:由用户目标和内容决定。需要结构化表达时可参考 [`lark-doc-style.md`](style/lark-doc-style.md),但不要默认套用固定开头、固定富 block 比例或固定图表
43
+ |参数|必填|说明|
44
+ |-|-|-|
45
+ |`--title`|否|文档标题,Markdown 导入时使用;XML 创建推荐在 `--content` 开头写 `<title>...</title>`;多个标题仅保留第一个|
46
+ |`--content`|视情况|文档内容(XML 或 Markdown 格式);不传 `--content` 时必须传 `--title`|
47
+ |`--reference-map`|否|结构化 `reference_map` JSON object;必须与 `--content` 一起使用。普通写入优先把结构写在正文里;该参数主要用于保留或回放已有 `document.reference_map`。支持直接 JSON、任务独占目录内的相对 `@file`,或 `-` 从 stdin 读取。|
48
+ |`--doc-format`|否|CLI 与语义创作均默认 `xml`,并建议显式传入;仅用户明确要求 Markdown 或保真导入 Markdown 时使用 `markdown`。不要混用完整的 XML 与 Markdown 文档格式;Markdown 中允许使用文档已定义的 XML 扩展标签。|
49
+ |`--parent-token`|否|父文件夹或知识库节点 token(与 `--parent-position` 互斥)|
50
+ |`--parent-position`|否|父节点位置,如 `my_library`(与 `--parent-token` 互斥)|
72
51
 
73
- ## 参考
52
+ ## 需要回查文档
74
53
 
75
- - [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、单 Agent 串行撰写)
76
- - [`lark-doc-style.md`](style/lark-doc-style.md) — 文档写作原则(默认段落、按体裁、组件克制)
77
- - [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规范
78
- - [`lark-doc-fetch.md`](lark-doc-fetch.md) — 获取文档
79
- - [`lark-doc-update.md`](lark-doc-update.md) — 更新文档
80
- - [`lark-doc-media-insert.md`](lark-doc-media-insert.md) — 插入图片/文件到文档
54
+ 用 `lark-cli docs +fetch --doc "<document_id 或文档 URL>" --detail with-ids` 回查,若需要更多信息可查看 [`+fetch`](lark-doc-fetch.md)。
@@ -1,81 +1,77 @@
1
+ # docs +fetch(读取飞书云文档)
1
2
 
2
- # docs +fetch(获取飞书云文档)
3
+ 读取整篇文档,或按目录、章节、区间和关键词获取局部内容。
3
4
 
4
- ## 命令
5
+ ## 常用示例
5
6
 
6
7
  ```bash
7
- # 获取文档(默认 XML,simple)
8
- lark-cli docs +fetch --doc "https://xxx.feishu.cn/docx/Z1Fj...tnAc"
8
+ # 读取整篇文档,并附带当前用户可见的未解决评论;
9
+ lark-cli docs +fetch --doc "文档URL或token"
9
10
 
10
- # Markdown 格式
11
- lark-cli docs +fetch --doc Z1Fj...tnAc --doc-format markdown
11
+ # 按 URL 中的 #share 锚点局部读取
12
+ lark-cli docs +fetch --doc '文档URL#share-anchor'
12
13
 
13
- # 带 block ID(用于后续 block 级更新)
14
- lark-cli docs +fetch --doc Z1Fj...tnAc --detail with-ids
14
+ # 按关键词定位
15
+ lark-cli docs +fetch --doc Z1Fj...tnAc --scope keyword --keyword "部署|发布|上线"
15
16
 
16
- # 只拿目录
17
+ # 先查看目录,再读取指定章节
17
18
  lark-cli docs +fetch --doc Z1Fj...tnAc --scope outline --max-depth 3
18
-
19
- # 按 block id 区间精读
20
- lark-cli docs +fetch --doc Z1Fj...tnAc --scope range --start-block-id blkA --end-block-id blkB --detail with-ids
21
-
22
- # URL 带 #share 选区锚点时自动局部读取
23
- lark-cli docs +fetch --doc 'docURL#share-anchor'
24
-
25
- # 读整个章节(以标题 id 为锚点,自动展开到下一个同级/更高级标题前)
26
- lark-cli docs +fetch --doc Z1Fj...tnAc \
27
- --scope section --start-block-id <标题id> --detail with-ids
28
-
29
- # 按关键词定位(多关键词用 | 分隔,任一命中即返回)
30
- lark-cli docs +fetch --doc Z1Fj...tnAc \
31
- --scope keyword --keyword "部署|发布|上线"
19
+ lark-cli docs +fetch --doc Z1Fj...tnAc --scope section --start-block-id blkTitle
32
20
  ```
33
21
 
34
- ## 选 `--detail`(每块详细度)
35
-
36
- | 意图 | `--detail` | 说明 |
37
- |------|-----------|------|
38
- | **只读**:浏览或总结文档内容 | `simple`(默认) | 简洁 XML/Markdown,不含 block ID、样式属性、引用元数据 |
39
- | **定位**:需要 block ID 与其他业务交互 | `with-ids` | 包含 block ID(如 `<p id="blkcnXXXX">`),可用于 `+update` 的 `--block-id`,也可用于拼接 `文档URL#block_id` 形式的直达链接 |
40
- | **编辑**:任何修改文档内容的需求 | `full` | 包含 block ID + 样式属性 + 引用元数据,提供完整文档结构信息 |
22
+ ## 参数
41
23
 
42
- ## 选 `--scope`(读取范围)
24
+ |参数|必填|说明|
25
+ |-|-|-|
26
+ |`--doc`|是|文档 URL 或 token,支持 `/docx/`、`/wiki/` 和带 `#share-...` 的选区链接|
27
+ |`--doc-format`|否|`xml`(默认)\| `markdown` \| `im-markdown`(供后续 `lark-im` 场景使用)|
28
+ |`--detail`|否|`simple`(默认)\| `with-ids` \| `full`|
29
+ |`--revision-id`|否|文档版本号;`-1` 表示最新版本(默认)|
30
+ |`--scope`|否|`outline` \| `range` \| `keyword` \| `section`;省略则读取整篇|
31
+ |`--start-block-id`|否|`range` 的起点,或 `section` 的锚点(`section` 必填)|
32
+ |`--end-block-id`|否|`range` 的终点;`-1` 表示读到末尾|
33
+ |`--keyword`|否|`keyword` 模式的关键词;支持多级自动匹配和多分支 OR|
34
+ |`--context-before`|否|返回命中项之前的顶层兄弟块数量(默认 `0`)|
35
+ |`--context-after`|否|返回命中项之后的顶层兄弟块数量(默认 `0`)|
36
+ |`--max-depth`|否|`outline` 表示标题层级上限;其它模式表示子树深度(默认 `-1`,不限)|
43
37
 
44
- `--scope` 和 `--detail` 正交可组合。**省略 `--scope` 即读整篇;获取一小节时优先用局部读取。**
38
+ ## 选择详细度:`--detail`
45
39
 
46
- | 模式 | 何时用 | 关键参数 | 行为要点 |
47
- |-|-|-|-|
48
- | `outline` | 不知道结构,先看目录 | `--max-depth`(标题层级上限) | 扁平列出所有标题,**包括嵌在容器里的内嵌标题**(如 callout 里的 h3);这些 id 可直接作后续 `section` / `range` 端点 |
49
- | `section` | 读某个标题对应的整节 | `--start-block-id`(必填) | 顶层标题 → 展开到下一同级/更高级标题前;容器内节点(含内嵌标题) → 按"最小包容单元"返回容器/表格切片,不做 heading 扩展;顶层非标题块 → 仅该块 |
50
- | `range` | 已知精确起止 | `--start-block-id` / `--end-block-id` 至少一个;`-1` = 读到末尾 | 两端同顶层 → 顶层序列切片;两端同一容器 → 容器整体;两端同一表格 → 瘦身切片;**跨顶层 → 端点所在顶层块整块输出,不做瘦身** |
51
- | `keyword` | 只有模糊关键词 | `--keyword`(**多级自动 fallback**:子串 → 归一化 → 分词形变 → RE2 正则;`\|` 分隔多分支 OR) | 每处命中按"最小包容单元"输出;**自动去重**(同容器多命中 → 单个容器,同表格多行命中 → 合并切片) |
40
+ |目的|取值|返回内容|
41
+ |-|-|-|
42
+ |浏览、总结|`simple`(默认)|简洁 XML/Markdown,不含 block ID、样式和引用元数据|
43
+ |定位、跳转|`with-ids`|包含 block ID,可用于 `+update --block-id`,也可拼成 `文档URL#block_id` 直达链接|
44
+ |编辑文档|`full`|包含 block ID、样式和引用元数据,保留完整结构信息|
52
45
 
53
- > 💡 **多关键词用 `\|` 拼接(OR 语义,任一命中即返回)**:例 `"部署\|发布\|上线"`,三词任一命中都进结果,适合**同义词/别名/多业务术语**一次召回(如 `bug\|缺陷\|故障`)。
46
+ 需要修改文档时使用 `full`;只读场景通常不必获取额外元数据。
54
47
 
55
- **设置 `--scope` 时共用** `--context-before` / `--context-after` / `--max-depth`。
48
+ ## 选择读取范围:`--scope`
56
49
 
57
- - `--max-depth`:`outline` = 标题层级上限(3 = h1~h3);其它模式 = 被选块的子树遍历深度(`-1` 不限,`0` 仅块自身)。
58
- - `--context-before/--context-after`:**只对整块顶层单元生效**;命中落在容器/表格内(返回容器或切片)时 before/after 被忽略,需要更大范围改用 `section` / `range` 显式指定。
50
+ `--scope` 与 `--detail` 可以组合。优先读取满足任务所需的最小范围;只有确需全文时才省略 `--scope`。
59
51
 
60
- **决策顺序**(核心原则:**局部获取优于全量获取**,根据需求形态选起点,必要时多步组合收敛范围):
61
- 1. 需求**直接给出待查的具体术语/错误码/标识** → 直接走 `keyword` 粗匹配(多级 fallback 自动覆盖形变),需要更大上下文时用返回的 `top-block-id` 走 `section` / `range`
62
- 2. 需求**指向某个章节/标题**("修改 XX 章"、"总结第 3 节"、"关于 xx 的内容")→ 先 `outline --max-depth 3` 拿目录 → `section --start-block-id <标题id>` 精读
63
- 3. 已知**精确起止 / 跨节连续区间** → `range`
64
- 4. **结构未知且无明确关键词/章节线索** → `outline` 探测,再回到 2/3
65
- 5. **兜底**:仅在确需整篇时才省略 `--scope`;不要为省事直接读整篇
52
+ |模式|适用场景|关键参数|返回行为|
53
+ |-|-|-|-|
54
+ |`outline`|结构未知,先查看目录|`--max-depth`|扁平列出标题;返回的标题 ID 可作为 `section` 或 `range` 的端点|
55
+ |`section`|读取某个标题对应的整节|`--start-block-id`(必填)|顶层标题展开到下一个同级或更高级标题之前;容器内节点(含内嵌标题)按最小包容单元返回容器或表格切片|
56
+ |`range`|已知精确起止位置|`--start-block-id`、`--end-block-id` 至少一个|同一顶层序列按区间切片;同一容器返回整个容器;同一表格返回瘦身切片;跨顶层时完整返回端点所在的顶层块|
57
+ |`keyword`|只有关键词或模糊线索|`--keyword`(必填)|按最小包容单元返回命中;同一容器的多处命中自动去重,同一表格的多行命中合并为切片|
66
58
 
67
- ## 局部读取的输出结构:`<fragment>` 与 `<excerpt>`
59
+ `keyword` 会依次尝试子串、归一化、分词形变和 RE2 正则匹配。多关键词使用 `|` 表示 OR,例如 `部署|发布|上线`;任一分支命中即返回。
68
60
 
69
- 设置 `--scope` 时返回的 `content` 被一个 `<fragment>` 节点包裹,属性包含 `mode` / `requested-start` / `requested-end` / `keyword`(按需)。子节点只有两种形态:
61
+ 范围参数的共同规则:
70
62
 
71
- - **顶层块**:完整块直接作为 `<fragment>` 的子节点,无额外包裹。
72
- - **`<excerpt top-block-id="..." parent-block-path="...">`**:非顶层节选(容器整体 / 表格瘦身切片)。
73
- - `top-block-id`:所在顶层块 id,想看该块全貌时作 `section` / `range` 锚点再拉一次。
74
- - `parent-block-path`:从顶层块到 excerpt 内容直接父节点的 id 路径,`/` 分隔(表格切片时即表格自身 id)。
63
+ - `--max-depth`:`outline` 中 `3` 表示列出 h1~h3;其它模式中 `0` 表示仅返回块自身,`-1` 表示不限深度。
64
+ - `--context-before` / `--context-after`:仅对完整的顶层块生效。命中位于容器或表格内时会被忽略;如需更大范围,改用 `section` 或 `range`。
75
65
 
76
- **看到 `<excerpt>` 即意味着这是节选**,不能假设看到了该顶层块的全貌。
66
+ 推荐选择顺序:
77
67
 
78
- **表格默认瘦身**:即便 `<table>` 本身是顶层块也只返回 thead + 命中 tr。想拿整张表 → `range --start-block-id <table-id> --end-block-id <table-id>`;切片范围恰好覆盖全部 tr 时 SDK 自动升级为整块、不包 `<excerpt>`。
68
+ |已知信息|首选方式|后续动作|
69
+ |-|-|-|
70
+ |具体术语、错误码或标识|`keyword`|上下文不足时,用返回的 `top-block-id` 再执行 `section` 或 `range`|
71
+ |章节或标题|`outline --max-depth 3`|获取标题 ID 后执行 `section`|
72
+ |精确起止位置|`range`|按需调整端点或深度|
73
+ |没有关键词,也不了解结构|`outline`|根据目录转入 `section` 或 `range`|
74
+ |确实需要整篇|省略 `--scope`|—|
79
75
 
80
76
  ## 返回值
81
77
 
@@ -85,7 +81,7 @@ lark-cli docs +fetch --doc Z1Fj...tnAc \
85
81
  "identity": "user",
86
82
  "data": {
87
83
  "document": {
88
- "document_id": "doxcnXXXX",
84
+ "document_id": "docToken",
89
85
  "revision_id": 12,
90
86
  "content": "<title>标题</title><p>文档内容...</p>",
91
87
  "reference_map": {
@@ -93,6 +89,11 @@ lark-cli docs +fetch --doc Z1Fj...tnAc \
93
89
  "<ref>": {
94
90
  "<real-attr-key>": "<real-attr-value>"
95
91
  }
92
+ },
93
+ "comments": {
94
+ "c1": {
95
+ "data": "<comment comment-id=\"xx\" block-id=\"xx\"><quote>引用内容</quote><msg>评论内容</msg></comment>"
96
+ }
96
97
  }
97
98
  },
98
99
  "tips": "<safe replay or degradation guidance>"
@@ -100,49 +101,36 @@ lark-cli docs +fetch --doc Z1Fj...tnAc \
100
101
  }
101
102
  }
102
103
  ```
104
+ - `content` 的格式由 `--doc-format` 决定。`reference_map` 是结构化 sidecar,一级键表示引用组:普通资源组通常以 `block_type` 命名,二级键 `ref` 对应正文中的临时引用,其值由真实属性组成;保留组 `comments` 使用 `<ref>.data` 保存评论。XML、Markdown 和 IM Markdown 在存在可见评论时都会返回该组;Markdown 正文没有与评论 key 对应的内联引用,这是有意的协议设计。没有提取数据时,`reference_map` 可能为空。`comments.tips.data` 表示评论因数量上限被截断,文档顶层 `tips` 则给出安全回放或依赖降级提示。`content` 和 `reference_map` 属于同一份响应,应保留完整 JSON 响应;`im-markdown` 仅用于获取内容后在 `lark-im` 场景下使用。设置 `--scope` 时会被 `<fragment>` 包裹,详见下文“局部读取的输出结构”。
105
+ - 评论内容不保证全部返回,需要详细信息时使用 `drive +list-comments` 获取完整评论。
103
106
 
104
- `content` 的格式由 `--doc-format` 决定。`reference_map` 是正文引用数据的结构化 sidecar:一级键 `block_type` 表示引用所在的块类型,二级键 `ref` 对应正文中的临时引用;每个引用的值是由 `real-attr-key` 和 `real-attr-value` 组成的真实属性映射,具体属性由块类型决定。没有提取数据时,`reference_map` 可能为空。`content` 和 `reference_map` 属于同一份响应,保留或回放内容时应配套处理。`tips` 给出安全回放或降级提示。`im-markdown` 仅用于获取内容后在 `lark-im` 场景下使用。设置 `--scope` 时会被 `<fragment>` 包裹,详见上文"局部读取的输出结构"。
107
+ ### 理解局部读取结果
105
108
 
106
109
  ## 参数
107
110
 
108
- | 参数 | 必填 | 说明 |
109
- |------|------|------|
110
- | `--doc` | 是 | 文档 URL 或 token(支持 `/docx/` 和 `/wiki/`) |
111
- | `--doc-format` | 否 | `xml`(默认)\| `markdown` \| `im-markdown`(仅用于获取内容后在 `lark-im` 场景下使用) |
112
- | `--detail` | 否 | `simple`(默认)\| `with-ids` \| `full` |
113
- | `--revision-id` | 否 | 文档版本号,`-1` = 最新(默认) |
114
- | `--scope` | 否 | `outline` \| `range` \| `keyword` \| `section`(省略 = 读整篇) |
115
- | `--start-block-id` | 否 | `range`/`section` 起始/锚点 id(`section` 必填) |
116
- | `--end-block-id` | 否 | `range` 结束 id;`-1` 表示读到末尾 |
117
- | `--keyword` | 否 | `keyword` 模式关键词,**4 层自动 fallback**(子串 → 归一化 → 分词形变 → RE2 正则);`\|` 分隔多分支 OR |
118
- | `--context-before` | 否 | 命中前拉几个兄弟块(仅对顶层单元生效,默认 `0`) |
119
- | `--context-after` | 否 | 命中后拉几个兄弟块(仅对顶层单元生效,默认 `0`) |
120
- | `--max-depth` | 否 | `outline` = 标题层级上限;其它 = 子树深度(`-1` 不限,默认) |
121
- | `--format` | 否 | `json`(默认)\| `pretty` |
122
-
123
- ## 图片、文件、画板的处理
124
-
125
- **文档中的素材以 XML 标签形式出现:**
126
-
127
- ```xml
128
- <img token="..." url="https://..." width="..." height="..."/>
129
- <source token="..." url="https://..." name="skills.zip"/>
130
- <whiteboard token="..."/>
131
- ```
111
+ 设置 `--scope` 后,`content` 外层是 `<fragment>`,并按需携带 `mode`、`requested-start`、`requested-end` 或 `keyword` 属性。其子节点有两种形式:
112
+
113
+ - **顶层块**:直接作为 `<fragment>` 的子节点,表示返回了完整块。
114
+ - **`<excerpt top-block-id="..." parent-block-path="...">`**:表示只返回了容器或表格中的节选。
115
+ - `top-block-id` 是节选所在的顶层块 ID。需要查看完整块时,可将它作为 `section` 或 `range` 的锚点重新读取。
116
+ - `parent-block-path` 是从顶层块到节选内容直接父节点的 ID 路径,以 `/` 分隔;表格切片中即表格自身 ID。
117
+
118
+ 看到 `<excerpt>` 时,不要假设已经获取了整个顶层块。
132
119
 
133
- - `<img>` / `<source>` 带 `url` 时,直接用该 URL 下载即可(普通 HTTP GET),无需走 shortcut。
134
- - 没有 `url`、或只想预览 → `docs +media-preview --token <token> --output ./preview_media`
135
- - 明确下载,或目标是 `<whiteboard>`(画板只能走 shortcut) → `docs +media-download --token <token> --output ./downloaded_media`
136
- - 文档封面图不是正文素材;下载/更新/删除封面图 → `docs +resource-download/+resource-update/+resource-delete --type cover`
120
+ 表格默认瘦身:即使 `<table>` 本身是顶层块,也只返回表头和命中的行。读取整张表时,使用 `range --start-block-id <table-id> --end-block-id <table-id>`。如果切片覆盖全部数据行,SDK 会自动返回完整表格,不再包裹 `<excerpt>`。
137
121
 
138
- ## 嵌入电子表格 / 多维表格
122
+ ## 处理文档内嵌资源
139
123
 
140
- 返回中可能含 `<sheet>`、`<bitable>`、`<cite file-type="sheets|bitable">`。内部数据无法通过 `docs +fetch` 获取,提取 `token` 等属性后切到 [`lark-sheets`](../../lark-sheets/SKILL.md) / [`lark-base`](../../lark-base/SKILL.md) 下钻,详见 [SKILL.md 快速决策](../SKILL.md) 路由表。
124
+ |返回内容|处理方式|
125
+ |-|-|
126
+ |`<img>`、`<source>`|有 `url` 时仅下载可信的公开 HTTPS URL:拒绝 userinfo 及解析到 private、loopback、link-local、multicast、unspecified 地址的 host,并逐次校验重定向;不满足时禁止请求。无 `url` 时提取 `token`,预览用 `docs +media-preview`,下载用 `docs +media-download`|
127
+ |`<whiteboard>`|提取 `token`,使用 `docs +media-download`|
128
+ |`<sheet>`、`<cite file-type="sheets">`|提取 `token` 和 `sheet-id`,转到 [`lark-sheets`](../../lark-sheets/SKILL.md)|
129
+ |`<bitable>`、`<cite file-type="bitable">`|提取 `token` 和 `table-id`,转到 [`lark-base`](../../lark-base/SKILL.md)|
130
+ |`<vc-transcribe-tab>`|提取 `vc-node-id`,使用 [`lark-note`](../../lark-note/SKILL.md) 的 `note +detail`|
131
+ |`<synced_reference>`|提取 `src-token` 和 `src-block-id`,读取源文档并定位 block|
141
132
 
142
133
  ## 参考
143
134
 
144
- - [lark-doc-create](lark-doc-create.md) — 创建文档
145
- - [lark-doc-update](lark-doc-update.md) — 更新文档
146
135
  - [lark-doc-media-preview](lark-doc-media-preview.md) — 预览素材
147
- - [lark-doc-media-download](lark-doc-media-download.md) — 下载素材/画板缩略图
148
- - [lark-doc-resource-cover](lark-doc-resource-cover.md) — 读取、更新、删除文档封面图
136
+ - [lark-doc-media-download](lark-doc-media-download.md) — 下载素材或画板缩略图
@@ -2,24 +2,25 @@
2
2
 
3
3
  用于查看 Docx 历史版本、按 `history_version_id` 回滚,以及查询回滚任务状态。
4
4
 
5
- ## 安全流程
5
+ `entries[].edit_time` 是 RFC3339 时间字符串(例如 `2026-06-22T12:24:45Z`)。按时间匹配时先将其解析为时间值,再比较先后关系或时间差。
6
6
 
7
- 1. 先用分页接口 `+history-list` 找到目标版本的 `history_version_id`。
8
- 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`)并确认后回滚。
9
- 3. 如果用户指定的是某一时刻但没有指定 `revision_id`,按 `entries[].edit_time` 匹配;优先选择不晚于目标时刻的最近一条历史记录,无法明确匹配时先向用户确认候选版本。
10
- 4. 再用 `+history-revert --history-version-id <history_version_id>` 发起回滚。默认最多等待 30 秒;如果返回 `status: running`,记录 `task_id`。
11
- 5. 用 `+history-revert-status` 轮询 `task_id`,直到状态不再是 `running`。
12
- 6. 回滚完成后,用 `docs +fetch` 读取文档确认内容。
7
+ ## 安全约束
13
8
 
14
- ## 按 revision_id 或时间点回滚
9
+ - `overwrite` 会重建正文和 block ID,且无法保证保留评论等非正文对象。用户要求保留这些对象时,应先说明限制并确认。
10
+ - `overwrite` 返回 warning 或 `partial_success` 时,先核验最新内容。核验失败或发生 revision conflict 时停止,不要再次覆盖。
11
+ - 权限、网络或临时系统错误应保留原错误分类,不得解释为目标版本不存在。
15
12
 
16
- 当用户说“回滚到 revision_id=42”“恢复到昨天下午 3 点的版本”这类需求时,流程是:
13
+ ## 按 revision_id 或时间点回滚
17
14
 
18
- 1. 执行 `docs +history-list --doc <doc>` 获取第一页历史记录;`+history-list` 是分页接口,只有 `has_more=true` 且还需要更多候选时才继续传 `--page-token` 翻页。
19
- 2. 如果用户给出 `revision_id`:先筛选当前页中 `entries[].revision_id == 用户给出的 revision_id`。如果未命中且 `has_more=true`,继续拉下一页;如果已经命中候选,最多额外再拉一页,补齐同一个 `revision_id` 可能跨页出现的相邻 `history_version_id`。若用户同时给出目标时间,在候选里选择 `edit_time` 与目标时间最接近的一条;若未给目标时间但候选只有一条,可直接使用;若多个候选无法可靠区分,不要自行取第一条,向用户展示候选并确认。
20
- 3. 如果用户只给出时间:用 `entries[].edit_time` 匹配,选择目标时刻之前最近的一条;如果用户表达的是“最接近某时刻”,则选择绝对时间差最小的一条。
21
- 4. 从最终匹配条目读取 `history_version_id`。`history_version_id` 对应服务端 `minor_history.version`,这是回滚接口需要的 ID。
22
- 5. 执行 `docs +history-revert --doc <doc> --history-version-id <history_version_id>`。
15
+ 1. 使用 `+history-list` 定位目标记录。需要更多候选时,根据 `has_more` 和 `page_token` 翻页。
16
+ - 用户指定 `revision_id`:逐页筛选相同 `revision_id` 的记录。未命中时必须继续翻页至 `has_more=false` 才可进入 fallback;命中位于页尾时,继续读取下一页以收集相邻的同 `revision_id` 候选。多条记录时结合 `edit_time` 选择;无法区分时请用户确认。
17
+ - 用户指定时间:选择不晚于目标时间的最近一条记录;用户明确要求“最接近”时,选择时间差最小的记录。
18
+ 2. 找到目标记录后,使用该记录的 `history_version_id` 调用 `+history-revert`。不要将 `revision_id` 传给回滚接口。返回 `running` 时使用 `+history-revert-status` 查询;只有 `done` 表示成功,其他终态均停止并报告。
19
+ 3. 没有目标记录但用户指定了 `revision_id` 时,可读取目标版本并恢复正文:
20
+ - 使用 `docs +fetch --doc "<doc>" --revision-id <revision_id> --scope full --detail full --format json` 读取目标版本。确认文档一致、返回的 `revision_id` 与目标一致,且 `content` 不是 `<fragment>`。
21
+ - 使用 `docs +fetch --doc "<doc>" --scope full --detail full --format json` 读取当前完整文档,其 `content` 同样不得是 `<fragment>`。目标与当前响应的 `revision_id` 相同时直接结束,不执行 `overwrite`。否则移除目标 `content` 中旧的 block ID,将正文写入任务目录下的相对路径,然后仅执行一次 `docs +update --doc "<doc>" --command overwrite --revision-id <current_revision_id> --content @target.xml`,其中 `current_revision_id` 来自当前文档响应。目标响应包含非空 JSON object 形式的 `reference_map` 时,将其写入相对路径并追加 `--reference-map @target-reference-map.json`;否则省略该参数。`+update` 不支持 `--yes`。
22
+ - 使用 `docs +fetch --doc "<doc>" --scope full --detail full --format json` 读取最新完整文档并核验。忽略重新生成的 block ID,正文结构、文本、链接和引用资源应与目标版本一致。
23
+ 4. 目标版本明确不可读时停止并报告。
23
24
 
24
25
  候选确认时使用类似格式:
25
26
 
@@ -71,7 +72,7 @@ lark-cli docs +history-revert-status --doc "<docx_url_or_token>" --task-id "<tas
71
72
  {
72
73
  "revision_id": 42,
73
74
  "history_version_id": "11",
74
- "edit_time": "1780000000",
75
+ "edit_time": "2026-06-22T12:24:45Z",
75
76
  "type": 1,
76
77
  "name": "版本名",
77
78
  "description": "版本说明",
@@ -48,7 +48,7 @@
48
48
  自行构造 Markdown 内容写入时同理:如字面文本 `a]b` 应写为 `a\]b`,`C:\Users` 应写为 `C:\\Users`。
49
49
 
50
50
  ## Shell 传参
51
- - **首选文件传参**:`--content` 支持 `@path/to/file.md`(读文件)和 `-`(读 stdin),彻底绕开 shell 转义;多行、含特殊字符、长文本强烈推荐。字面量以 `@` 开头时用 `@@` 转义(`--pattern` 不支持 `@file`)
51
+ - **首选文件传参**:`--content` 支持 `@./path/to/file.md`(读文件)和 `-`(读 stdin),彻底绕开 shell 转义;多行、含特殊字符、长文本强烈推荐。字面量以 `@` 开头时用 `@@` 转义(`--pattern` 不支持 `@file`)
52
52
  - **⚠️ `@file` 路径限制**:`@file` 只接受当前工作目录下的相对路径,传绝对路径(如 `@/tmp/xxx.md`)会报 `unsafe file path`。需要落盘时,将文件写在 cwd 下(如 `./_content.md`),用完自行清理。
53
53
  - **默认用单引号 `'...'`**:完全字面量,`$`、`` ` ``、`\`、`>`、`\<b>` 等全部原样保留
54
54
  - **双引号 `"..."`**:会展开 `$变量`、反引号和 `$(...)` 命令替换,`\` 仍参与转义,易踩坑
@@ -66,6 +66,10 @@ Markdown 格式支持通过 URL 插入网络图片,图片将自动从 HTTP 下
66
66
  - URL 支持 `http://` 和 `https://` 协议
67
67
  - 对应的 XML 格式为:`<img href="https://example.com/photo.png"/>`
68
68
 
69
+ 本地图片使用 `![alt](@./images/photo.png)`(路径含空格时写作 `![alt](<@./images/product shot.png>)`);路径必须位于当前工作目录内,`alt` 会作为 caption。附件使用 `<source path="@./files/report.pdf"/>`
70
+
71
+ 目前不支持将 Base64 Data URI(如 `data:image/png;base64,...`)直接作为 Markdown 图片地址传入;如仅有 Base64 数据,请先解码为本地图片文件,再使用上述 `@./...` 路径上传。
72
+
69
73
  ## Markdown 不支持的 Block 类型
70
74
 
71
75
  非原生 Markdown 语法的内容(如下划线、高亮框(Callout)、勾选框、多维表格、画板、思维导图、电子表格、网格布局、引用(@文档/@人)、按钮、日期提醒、行内文件、文字颜色/背景色、同步块等)采用 XML 语法表示,详见 [`lark-doc-xml.md`](lark-doc-xml.md)。
@@ -41,7 +41,8 @@ lark-cli docs +media-download --type whiteboard --token "wbcnxxxxxxxx" --output
41
41
 
42
42
  ## 排障
43
43
 
44
- - 如果报错返回的信息包含 `HTTP 403`,且目标是图片/文件素材,可以改成调用 [`docs +media-preview`](lark-doc-media-preview.md) 看是否能先预览内容
44
+ - 如果返回 `permission_denied`,或最终下载返回 `HTTP 403`,按错误 `hint` 改用 [`docs +media-preview`](lark-doc-media-preview.md) 预览内容。
45
+ - 如果返回限流错误,停止立即重试,稍后按指数退避重试。
45
46
 
46
47
  ## 参考
47
48