@amaster.ai/pi-lark 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/skills/lark-apps/SKILL.md +39 -6
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
- package/skills/lark-apps/references/lark-apps-create.md +6 -3
- package/skills/lark-apps/references/lark-apps-get.md +1 -1
- package/skills/lark-apps/references/lark-apps-list.md +1 -1
- package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
- package/skills/lark-base/SKILL.md +14 -6
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
- package/skills/lark-base/references/lark-base-dashboard.md +17 -4
- package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
- package/skills/lark-base/references/lark-base-field-create.md +19 -8
- package/skills/lark-base/references/lark-base-field-json.md +5 -2
- package/skills/lark-calendar/SKILL.md +1 -1
- package/skills/lark-doc/SKILL.md +26 -61
- package/skills/lark-doc/references/genres/business-analysis.md +30 -0
- package/skills/lark-doc/references/genres/data-report.md +32 -0
- package/skills/lark-doc/references/genres/email.md +38 -0
- package/skills/lark-doc/references/genres/execution-plan.md +27 -0
- package/skills/lark-doc/references/genres/formal-doc.md +37 -0
- package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
- package/skills/lark-doc/references/genres/memo-brief.md +25 -0
- package/skills/lark-doc/references/genres/official-redhead.md +73 -0
- package/skills/lark-doc/references/genres/prd.md +26 -0
- package/skills/lark-doc/references/genres/proposal.md +24 -0
- package/skills/lark-doc/references/genres/research-report.md +32 -0
- package/skills/lark-doc/references/genres/retrospective.md +25 -0
- package/skills/lark-doc/references/genres/route-consumer.md +37 -0
- package/skills/lark-doc/references/genres/route-creative.md +36 -0
- package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
- package/skills/lark-doc/references/genres/route-marketing.md +40 -0
- package/skills/lark-doc/references/genres/route-media.md +36 -0
- package/skills/lark-doc/references/genres/route-opinion.md +38 -0
- package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
- package/skills/lark-doc/references/genres/route-platform.md +9 -0
- package/skills/lark-doc/references/genres/route-report.md +10 -0
- package/skills/lark-doc/references/genres/route-workplace.md +17 -0
- package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
- package/skills/lark-doc/references/genres/technical-doc.md +39 -0
- package/skills/lark-doc/references/genres/wechat.md +39 -0
- package/skills/lark-doc/references/genres/weekly-report.md +24 -0
- package/skills/lark-doc/references/genres/white-paper.md +32 -0
- package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
- package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
- package/skills/lark-doc/references/lark-doc-create.md +22 -48
- package/skills/lark-doc/references/lark-doc-fetch.md +75 -92
- package/skills/lark-doc/references/lark-doc-history.md +16 -15
- package/skills/lark-doc/references/lark-doc-md.md +5 -1
- package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
- package/skills/lark-doc/references/lark-doc-script.md +76 -0
- package/skills/lark-doc/references/lark-doc-update.md +70 -222
- package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
- package/skills/lark-doc/references/lark-doc-xml.md +38 -167
- package/skills/lark-drive/SKILL.md +7 -5
- package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
- package/skills/lark-drive/references/lark-drive-copy.md +87 -0
- package/skills/lark-drive/references/lark-drive-download.md +2 -1
- package/skills/lark-drive/references/lark-drive-export.md +3 -0
- package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
- package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
- package/skills/lark-event/SKILL.md +7 -4
- package/skills/lark-event/references/lark-event-vc.md +8 -2
- package/skills/lark-im/SKILL.md +8 -8
- package/skills/lark-im/references/lark-im-chat-list.md +9 -2
- package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
- package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
- package/skills/lark-im/references/lark-im-chat-search.md +9 -2
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
- package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
- package/skills/lark-im/references/lark-im-flag-list.md +2 -2
- package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
- package/skills/lark-im/references/lark-im-messages-search.md +4 -5
- package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
- package/skills/lark-mail/references/lark-mail-triage.md +19 -4
- package/skills/lark-minutes/SKILL.md +1 -1
- package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
- package/skills/lark-shared/SKILL.md +3 -3
- package/skills/lark-sheets/SKILL.md +83 -82
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
- package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
- package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
- package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
- package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
- package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
- package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
- package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
- package/skills/lark-sheets/scripts/sheets_df.py +21 -3
- package/skills/lark-slides/SKILL.md +27 -44
- package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
- package/skills/lark-slides/references/lark-slides-create.md +77 -65
- package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
- package/skills/lark-slides/references/lark-slides-media-upload.md +3 -25
- package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -1
- package/skills/lark-slides/references/lark-slides-screenshot.md +31 -13
- package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +31 -8
- package/skills/lark-slides/references/slides_chart_demo.xml +1 -2
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +48 -4
- package/skills/lark-slides/references/troubleshooting.md +7 -8
- package/skills/lark-slides/references/validation-checklist.md +4 -4
- package/skills/lark-slides/references/xml-schema-quick-ref.md +23 -11
- package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +360 -76
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +1138 -214
- package/skills/lark-whiteboard/SKILL.md +15 -8
- package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
- package/skills/lark-whiteboard/routes/dsl.md +8 -2
- package/skills/lark-whiteboard/routes/mermaid.md +1 -1
- package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
- package/skills/lark-whiteboard/routes/svg.md +3 -1
- package/skills/lark-whiteboard/scenes/mention.md +71 -0
- package/skills/lark-wiki/SKILL.md +5 -3
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
- package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
- package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
- package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
- package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
18
|
-
lark-cli docs +create --content
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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,78 @@
|
|
|
1
|
+
# docs +fetch(读取飞书云文档)
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
读取整篇文档,或按目录、章节、区间和关键词获取局部内容。
|
|
3
4
|
|
|
4
|
-
##
|
|
5
|
+
## 常用示例
|
|
5
6
|
|
|
6
7
|
```bash
|
|
7
|
-
#
|
|
8
|
-
lark-cli docs +fetch --doc "
|
|
8
|
+
# 读取整篇文档
|
|
9
|
+
lark-cli docs +fetch --doc "文档URL或token"
|
|
9
10
|
|
|
10
|
-
#
|
|
11
|
-
lark-cli docs +fetch --doc
|
|
11
|
+
# 按 URL 中的 #share 锚点局部读取
|
|
12
|
+
lark-cli docs +fetch --doc '文档URL#share-anchor'
|
|
12
13
|
|
|
13
|
-
#
|
|
14
|
-
lark-cli docs +fetch --doc Z1Fj...tnAc --
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
39
|
+
## 选择详细度:`--detail`
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
47
|
+
需要修改文档时使用 `full`;只读场景通常不必获取额外元数据。
|
|
54
48
|
|
|
55
|
-
|
|
49
|
+
## 选择读取范围:`--scope`
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
- `--context-before/--context-after`:**只对整块顶层单元生效**;命中落在容器/表格内(返回容器或切片)时 before/after 被忽略,需要更大范围改用 `section` / `range` 显式指定。
|
|
51
|
+
`--scope` 与 `--detail` 可以组合。优先读取满足任务所需的最小范围;只有确需全文时才省略 `--scope`。
|
|
59
52
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
60
|
+
`keyword` 会依次尝试子串、归一化、分词形变和 RE2 正则匹配。多关键词使用 `|` 表示 OR,例如 `部署|发布|上线`;任一分支命中即返回。
|
|
68
61
|
|
|
69
|
-
|
|
62
|
+
范围参数的共同规则:
|
|
70
63
|
|
|
71
|
-
-
|
|
72
|
-
-
|
|
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
|
-
|
|
67
|
+
推荐选择顺序:
|
|
77
68
|
|
|
78
|
-
|
|
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": "
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,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
|
-
|
|
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
|
-
|
|
9
|
+
- `overwrite` 会重建正文和 block ID,且无法保证保留评论等非正文对象。用户要求保留这些对象时,应先说明限制并确认。
|
|
10
|
+
- `overwrite` 返回 warning 或 `partial_success` 时,先核验最新内容。核验失败或发生 revision conflict 时停止,不要再次覆盖。
|
|
11
|
+
- 权限、网络或临时系统错误应保留原错误分类,不得解释为目标版本不存在。
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
## 按 revision_id 或时间点回滚
|
|
17
14
|
|
|
18
|
-
1.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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": "
|
|
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` 支持
|
|
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` 会作为 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
|
-
-
|
|
44
|
+
- 如果返回 `permission_denied`,或最终下载返回 `HTTP 403`,按错误 `hint` 改用 [`docs +media-preview`](lark-doc-media-preview.md) 预览内容。
|
|
45
|
+
- 如果返回限流错误,停止立即重试,稍后按指数退避重试。
|
|
45
46
|
|
|
46
47
|
## 参考
|
|
47
48
|
|
|
@@ -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` | 查看帮助。 |
|