@amaster.ai/pi-lark 0.1.2-beta.52 → 0.1.2-beta.54

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 (99) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +39 -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-get.md +1 -1
  6. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  8. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  9. package/skills/lark-base/SKILL.md +4 -3
  10. package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
  11. package/skills/lark-base/references/lark-base-field-create.md +19 -8
  12. package/skills/lark-base/references/lark-base-field-json.md +3 -2
  13. package/skills/lark-doc/SKILL.md +25 -61
  14. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  15. package/skills/lark-doc/references/genres/data-report.md +32 -0
  16. package/skills/lark-doc/references/genres/email.md +38 -0
  17. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  18. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  19. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  20. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  21. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  22. package/skills/lark-doc/references/genres/prd.md +26 -0
  23. package/skills/lark-doc/references/genres/proposal.md +24 -0
  24. package/skills/lark-doc/references/genres/research-report.md +32 -0
  25. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  26. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  27. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  28. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  29. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  30. package/skills/lark-doc/references/genres/route-media.md +36 -0
  31. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  32. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  33. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  34. package/skills/lark-doc/references/genres/route-report.md +10 -0
  35. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  36. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  37. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  38. package/skills/lark-doc/references/genres/wechat.md +39 -0
  39. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  40. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  41. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  42. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  43. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  44. package/skills/lark-doc/references/lark-doc-fetch.md +75 -92
  45. package/skills/lark-doc/references/lark-doc-history.md +3 -1
  46. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  47. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  48. package/skills/lark-doc/references/lark-doc-update.md +70 -222
  49. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  50. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  51. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  52. package/skills/lark-drive/SKILL.md +7 -5
  53. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  54. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  55. package/skills/lark-im/SKILL.md +3 -3
  56. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  57. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  58. package/skills/lark-im/references/lark-im-messages-search.md +1 -3
  59. package/skills/lark-sheets/SKILL.md +83 -82
  60. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  61. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  62. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  63. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  64. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  65. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  66. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  67. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  68. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  69. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  70. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  71. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  72. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  73. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  74. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  75. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  76. package/skills/lark-slides/SKILL.md +11 -13
  77. package/skills/lark-slides/references/lark-slides-create.md +70 -39
  78. package/skills/lark-slides/references/lark-slides-edit-workflows.md +4 -7
  79. package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
  80. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +26 -3
  81. package/skills/lark-slides/references/slides_chart_demo.xml +0 -1
  82. package/skills/lark-slides/references/troubleshooting.md +6 -6
  83. package/skills/lark-slides/references/validation-checklist.md +1 -1
  84. package/skills/lark-slides/references/xml-schema-quick-ref.md +0 -2
  85. package/skills/lark-whiteboard/SKILL.md +15 -8
  86. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  87. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  88. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  89. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  90. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  91. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  92. package/skills/lark-whiteboard/routes/svg.md +3 -1
  93. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  94. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  95. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  96. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  97. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  98. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  99. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -97
@@ -1,81 +1,78 @@
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`,不限)|
37
+ |`--format`|否|`json`(默认)\| `pretty`|
43
38
 
44
- `--scope` 和 `--detail` 正交可组合。**省略 `--scope` 即读整篇;获取一小节时优先用局部读取。**
39
+ ## 选择详细度:`--detail`
45
40
 
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) | 每处命中按"最小包容单元"输出;**自动去重**(同容器多命中 → 单个容器,同表格多行命中 → 合并切片) |
41
+ |目的|取值|返回内容|
42
+ |-|-|-|
43
+ |浏览、总结|`simple`(默认)|简洁 XML/Markdown,不含 block ID、样式和引用元数据|
44
+ |定位、跳转|`with-ids`|包含 block ID,可用于 `+update --block-id`,也可拼成 `文档URL#block_id` 直达链接|
45
+ |编辑文档|`full`|包含 block ID、样式和引用元数据,保留完整结构信息|
52
46
 
53
- > 💡 **多关键词用 `\|` 拼接(OR 语义,任一命中即返回)**:例 `"部署\|发布\|上线"`,三词任一命中都进结果,适合**同义词/别名/多业务术语**一次召回(如 `bug\|缺陷\|故障`)。
47
+ 需要修改文档时使用 `full`;只读场景通常不必获取额外元数据。
54
48
 
55
- **设置 `--scope` 时共用** `--context-before` / `--context-after` / `--max-depth`。
49
+ ## 选择读取范围:`--scope`
56
50
 
57
- - `--max-depth`:`outline` = 标题层级上限(3 = h1~h3);其它模式 = 被选块的子树遍历深度(`-1` 不限,`0` 仅块自身)。
58
- - `--context-before/--context-after`:**只对整块顶层单元生效**;命中落在容器/表格内(返回容器或切片)时 before/after 被忽略,需要更大范围改用 `section` / `range` 显式指定。
51
+ `--scope` 与 `--detail` 可以组合。优先读取满足任务所需的最小范围;只有确需全文时才省略 `--scope`。
59
52
 
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`;不要为省事直接读整篇
53
+ |模式|适用场景|关键参数|返回行为|
54
+ |-|-|-|-|
55
+ |`outline`|结构未知,先查看目录|`--max-depth`|扁平列出标题;返回的标题 ID 可作为 `section` 或 `range` 的端点|
56
+ |`section`|读取某个标题对应的整节|`--start-block-id`(必填)|顶层标题展开到下一个同级或更高级标题之前;容器内节点(含内嵌标题)按最小包容单元返回容器或表格切片|
57
+ |`range`|已知精确起止位置|`--start-block-id`、`--end-block-id` 至少一个|同一顶层序列按区间切片;同一容器返回整个容器;同一表格返回瘦身切片;跨顶层时完整返回端点所在的顶层块|
58
+ |`keyword`|只有关键词或模糊线索|`--keyword`(必填)|按最小包容单元返回命中;同一容器的多处命中自动去重,同一表格的多行命中合并为切片|
66
59
 
67
- ## 局部读取的输出结构:`<fragment>` 与 `<excerpt>`
60
+ `keyword` 会依次尝试子串、归一化、分词形变和 RE2 正则匹配。多关键词使用 `|` 表示 OR,例如 `部署|发布|上线`;任一分支命中即返回。
68
61
 
69
- 设置 `--scope` 时返回的 `content` 被一个 `<fragment>` 节点包裹,属性包含 `mode` / `requested-start` / `requested-end` / `keyword`(按需)。子节点只有两种形态:
62
+ 范围参数的共同规则:
70
63
 
71
- - **顶层块**:完整块直接作为 `<fragment>` 的子节点,无额外包裹。
72
- - **`<excerpt top-block-id="..." parent-block-path="...">`**:非顶层节选(容器整体 / 表格瘦身切片)。
73
- - `top-block-id`:所在顶层块 id,想看该块全貌时作 `section` / `range` 锚点再拉一次。
74
- - `parent-block-path`:从顶层块到 excerpt 内容直接父节点的 id 路径,`/` 分隔(表格切片时即表格自身 id)。
64
+ - `--max-depth`:`outline` 中 `3` 表示列出 h1~h3;其它模式中 `0` 表示仅返回块自身,`-1` 表示不限深度。
65
+ - `--context-before` / `--context-after`:仅对完整的顶层块生效。命中位于容器或表格内时会被忽略;如需更大范围,改用 `section` 或 `range`。
75
66
 
76
- **看到 `<excerpt>` 即意味着这是节选**,不能假设看到了该顶层块的全貌。
67
+ 推荐选择顺序:
77
68
 
78
- **表格默认瘦身**:即便 `<table>` 本身是顶层块也只返回 thead + 命中 tr。想拿整张表 → `range --start-block-id <table-id> --end-block-id <table-id>`;切片范围恰好覆盖全部 tr 时 SDK 自动升级为整块、不包 `<excerpt>`。
69
+ |已知信息|首选方式|后续动作|
70
+ |-|-|-|
71
+ |具体术语、错误码或标识|`keyword`|上下文不足时,用返回的 `top-block-id` 再执行 `section` 或 `range`|
72
+ |章节或标题|`outline --max-depth 3`|获取标题 ID 后执行 `section`|
73
+ |精确起止位置|`range`|按需调整端点或深度|
74
+ |没有关键词,也不了解结构|`outline`|根据目录转入 `section` 或 `range`|
75
+ |确实需要整篇|省略 `--scope`|—|
79
76
 
80
77
  ## 返回值
81
78
 
@@ -85,7 +82,7 @@ lark-cli docs +fetch --doc Z1Fj...tnAc \
85
82
  "identity": "user",
86
83
  "data": {
87
84
  "document": {
88
- "document_id": "doxcnXXXX",
85
+ "document_id": "docToken",
89
86
  "revision_id": 12,
90
87
  "content": "<title>标题</title><p>文档内容...</p>",
91
88
  "reference_map": {
@@ -100,49 +97,35 @@ lark-cli docs +fetch --doc Z1Fj...tnAc \
100
97
  }
101
98
  }
102
99
  ```
103
-
104
100
  `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>` 包裹,详见上文"局部读取的输出结构"。
105
101
 
102
+ ### 理解局部读取结果
103
+
106
104
  ## 参数
107
105
 
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
- ```
106
+ 设置 `--scope` 后,`content` 外层是 `<fragment>`,并按需携带 `mode`、`requested-start`、`requested-end` 或 `keyword` 属性。其子节点有两种形式:
107
+
108
+ - **顶层块**:直接作为 `<fragment>` 的子节点,表示返回了完整块。
109
+ - **`<excerpt top-block-id="..." parent-block-path="...">`**:表示只返回了容器或表格中的节选。
110
+ - `top-block-id` 是节选所在的顶层块 ID。需要查看完整块时,可将它作为 `section` 或 `range` 的锚点重新读取。
111
+ - `parent-block-path` 是从顶层块到节选内容直接父节点的 ID 路径,以 `/` 分隔;表格切片中即表格自身 ID。
112
+
113
+ 看到 `<excerpt>` 时,不要假设已经获取了整个顶层块。
132
114
 
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`
115
+ 表格默认瘦身:即使 `<table>` 本身是顶层块,也只返回表头和命中的行。读取整张表时,使用 `range --start-block-id <table-id> --end-block-id <table-id>`。如果切片覆盖全部数据行,SDK 会自动返回完整表格,不再包裹 `<excerpt>`。
137
116
 
138
- ## 嵌入电子表格 / 多维表格
117
+ ## 处理文档内嵌资源
139
118
 
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) 路由表。
119
+ |返回内容|处理方式|
120
+ |-|-|
121
+ |`<img>`、`<source>`|有 `url` 时仅下载可信的公开 HTTPS URL:拒绝 userinfo 及解析到 private、loopback、link-local、multicast、unspecified 地址的 host,并逐次校验重定向;不满足时禁止请求。无 `url` 时提取 `token`,预览用 `docs +media-preview`,下载用 `docs +media-download`|
122
+ |`<whiteboard>`|提取 `token`,使用 `docs +media-download`|
123
+ |`<sheet>`、`<cite file-type="sheets">`|提取 `token` 和 `sheet-id`,转到 [`lark-sheets`](../../lark-sheets/SKILL.md)|
124
+ |`<bitable>`、`<cite file-type="bitable">`|提取 `token` 和 `table-id`,转到 [`lark-base`](../../lark-base/SKILL.md)|
125
+ |`<vc-transcribe-tab>`|提取 `vc-node-id`,使用 [`lark-note`](../../lark-note/SKILL.md) 的 `note +detail`|
126
+ |`<synced_reference>`|提取 `src-token` 和 `src-block-id`,读取源文档并定位 block|
141
127
 
142
128
  ## 参考
143
129
 
144
- - [lark-doc-create](lark-doc-create.md) — 创建文档
145
- - [lark-doc-update](lark-doc-update.md) — 更新文档
146
130
  - [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) — 读取、更新、删除文档封面图
131
+ - [lark-doc-media-download](lark-doc-media-download.md) — 下载素材或画板缩略图
@@ -2,6 +2,8 @@
2
2
 
3
3
  用于查看 Docx 历史版本、按 `history_version_id` 回滚,以及查询回滚任务状态。
4
4
 
5
+ `entries[].edit_time` 是 RFC3339 时间字符串(例如 `2026-06-22T12:24:45Z`)。按时间匹配时先将其解析为时间值,再比较先后关系或时间差。
6
+
5
7
  ## 安全约束
6
8
 
7
9
  - `overwrite` 会重建正文和 block ID,且无法保证保留评论等非正文对象。用户要求保留这些对象时,应先说明限制并确认。
@@ -70,7 +72,7 @@ lark-cli docs +history-revert-status --doc "<docx_url_or_token>" --task-id "<tas
70
72
  {
71
73
  "revision_id": 42,
72
74
  "history_version_id": "11",
73
- "edit_time": "1780000000",
75
+ "edit_time": "2026-06-22T12:24:45Z",
74
76
  "type": 1,
75
77
  "name": "版本名",
76
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)。
@@ -0,0 +1,76 @@
1
+ # `docs +script`
2
+
3
+ ## 脚本列表
4
+
5
+ | `--command` | 用途 |
6
+ |-|-|
7
+ | `init-draft` | 创建带 Presentation Decision 基线的独占工作区,并预留尚不存在的 XML 路径。 |
8
+ | `parse` | 解析本地或在线文档,返回画像并检查决策与资源。 |
9
+
10
+ 每个脚本只使用其小节列出的专用参数;所有脚本均可使用文末的通用参数。
11
+
12
+ ## `init-draft`
13
+
14
+ ### 参数
15
+
16
+ | 参数 | 必填 | 用法 |
17
+ |-|-|-|
18
+ | `--command init-draft` | 是 | 选择本脚本。 |
19
+ | `--presentation-decision` | 是 | 完整决策 JSON;接受内联 JSON、`@./decision.json` 形式的 CWD 下相对路径或 `-`(stdin)。 |
20
+
21
+ ```bash
22
+ lark-cli docs +script --command init-draft \
23
+ --presentation-decision '<完整 Presentation Decision JSON>' \
24
+ --format json
25
+ ```
26
+
27
+ `data` 的结构如下;实际随机段为 8 位十六进制字符:
28
+
29
+ ```json
30
+ {
31
+ "workspace": "draft_a1b2c3d4_folder",
32
+ "draft_path": "draft_a1b2c3d4_folder/draft.xml",
33
+ "tip": "The workspace directory has been created successfully. draft_path points to a new XML file that does not exist yet. Create and write the file directly without reading it first."
34
+ }
35
+ ```
36
+
37
+ - 在生成正文前执行;不要自行创建工作目录或决策文件。CLI 固定生成 `draft_<8位十六进制字符>_folder/draft.xml`,以返回的实际路径为准。
38
+ - 决策必须是单个 JSON 对象,包含 `audience`、`reader_task`、`genre_contract`、`adapter`、`presentation_mode` 和 `visual_plan`。`presentation_mode` 取 `formal|normal|rich`;`genre_contract`、`adapter` 使用固定短名、`"none"` 或 `null`。
39
+ - `visual_plan` 包含非空 `reason` 和 `blocks` 数组;每项为 `{type,min_count,purpose}`,`type` 不重复,`min_count` 为正整数。按本 Skill 创建文档时,`blocks` 只对 `whiteboard`、`img`、`html5-block` 设置最低数量,其他表达按内容需要使用但不设数量约束;三类均无需约束时写 `[]`。CLI 为外部决策兼容 `type: "list"`,检查时将 `<ul>` 与 `<ol>` 的数量相加。仅有字数要求时添加 `word_count: {min,max}`;未指定的一侧写 `null`,至少一侧为正整数,且 `min <= max`。
40
+ - 返回 `data.workspace`(已创建的随机工作区)、`data.draft_path`(可直接写入的 XML 路径)和英文操作提示 `data.tip`。工作区及其中的 `.presentation-decision.json` 已存在,但 XML 尚不存在;遵循提示直接使用文件创建/写入能力在 `draft_path` 写入完整 XML,首次写入前不要读取该路径。
41
+ - 后续始终使用 `draft_path`,不得另建 XML、复用其他任务的路径或修改工作区中的 `.presentation-decision.json`;使用完后精确删除 `workspace`。
42
+
43
+ ## `parse`
44
+
45
+ ### 参数
46
+
47
+ | 参数 | 必填 | 用法 |
48
+ |-|-|-|
49
+ | `--command parse` | 是 | 选择本脚本。 |
50
+ | `--content` | 二选一 | 本地 XML 的字面内容、`@./document.xml` 形式的 CWD 下相对路径或 `-`(stdin)。 |
51
+ | `--doc` | 二选一 | 在线 Docx/Wiki URL 或 token;与 `--content` 互斥。 |
52
+ | `--presentation-decision` | 否 | 用于检查当前输入的完整决策 JSON;支持内联、`@./decision.json` 形式的 CWD 下相对路径或 `-`。 |
53
+
54
+ ```bash
55
+ lark-cli docs +script --command parse --content "@./document.xml" --format json
56
+ lark-cli docs +script --command parse --doc "<Docx/Wiki URL 或 token>" --format json
57
+ lark-cli docs +script --command parse --content "@./document.xml" --presentation-decision '<JSON>' --format json
58
+ ```
59
+
60
+ - `--content` 与 `--presentation-decision` 同时使用时,最多一个参数读取 stdin。
61
+ - 决策必须包含 `audience`、`reader_task`、`genre_contract`、`adapter`、`presentation_mode` 和 `visual_plan`;`presentation_mode` 取 `formal|normal|rich`。`visual_plan` 包含非空 `reason` 和不重复的 `{type,min_count,purpose}` 数组;兼容的 `list` 约束按 `<ul>` 与 `<ol>` 的合计数量检查。仅有字数要求时添加合法的 `word_count: {min,max}`。
62
+ - 使用 `--content "@./<init-draft 返回的 data.draft_path>"` 时自动加载保存的决策;显式 `--presentation-decision` 优先。
63
+ - `--doc` 需要 `docx:document:readonly`;`--content` 不调用 OpenAPI。
64
+ - 返回 `data.assessment.status`、`data.profile` 和按需出现的 `data.diagnostics[]`;profile 包含 `word_count`、`char_count`、`block_count` 和 `blocks[]`。顶层 `ok` 只表示命令是否成功执行。画像、决策或资源预检未通过时,命令仍以 `ok:true` 和退出码 0 返回,但 `assessment.status` 为 `failed`;每条 diagnostic 提供 `severity`、稳定 `code`、`msg`、可选 `expected` / `actual` 和 `suggested`。同一原因失败的远程图片合并为一条 diagnostic,并在 `image_indices[]` 中列出图片序号,避免重复提示。修复后重新解析,直到 `assessment.status` 为 `passed`。
65
+ - `parse` 不是 XML/SDK schema validator。成功且无 warning 也不保证服务端接受;写入前仍须按 XML 规则复查。
66
+
67
+ ## 所有脚本通用参数
68
+
69
+ | 参数 | 用法 |
70
+ |-|-|
71
+ | `--as user|bot` | 选择身份。 |
72
+ | `--dry-run` | 只返回执行计划,不联网、解析或写文件。 |
73
+ | `--format` | 输出格式:`json|pretty|table|ndjson|csv`;模型使用默认的 `json`。 |
74
+ | `--json` | `--format json` 的别名。 |
75
+ | `--jq` / `-q` | 裁剪 JSON;不得与非 JSON 格式同时使用。 |
76
+ | `-h` / `--help` | 查看帮助。 |