@amaster.ai/pi-lark 0.1.2-beta.53 → 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.
- package/package.json +2 -2
- package/skills/lark-apps/SKILL.md +29 -2
- package/skills/lark-base/SKILL.md +4 -3
- 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 +3 -2
- package/skills/lark-doc/SKILL.md +25 -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 +3 -1
- package/skills/lark-doc/references/lark-doc-md.md +5 -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-im/SKILL.md +3 -3
- package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
- package/skills/lark-slides/SKILL.md +11 -13
- package/skills/lark-slides/references/lark-slides-create.md +70 -39
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +4 -7
- package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +26 -3
- package/skills/lark-slides/references/slides_chart_demo.xml +0 -1
- package/skills/lark-slides/references/troubleshooting.md +6 -6
- package/skills/lark-slides/references/validation-checklist.md +1 -1
- package/skills/lark-slides/references/xml-schema-quick-ref.md +0 -2
- 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 -97
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 编辑已有 PPT:读-改-写闭环
|
|
2
2
|
|
|
3
|
-
局部编辑走 **shortcut [`+replace-slide`](lark-slides-replace-slide.md)**(块级替换 / 插入),配合 `xml_presentation.slide.get` 读原页拿 `block_id
|
|
3
|
+
局部编辑走 **shortcut [`+replace-slide`](lark-slides-replace-slide.md)**(块级替换 / 插入),配合 `xml_presentation.slide.get` 读原页拿 `block_id`。整页重建走 **[`+update-slide`](lark-slides-update-slide.md)**,多页就每页各跑一次 —— 它原地覆盖并保留 `slide_id` 和页序;只有写进 `--content` 且带原 id 的元素才会保留元素 id,遗漏的元素会被删除。
|
|
4
4
|
|
|
5
5
|
> 生成 XML 前**必读** [xml-schema-quick-ref.md](xml-schema-quick-ref.md)。
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| 已知某块的 `block_id`,要换这块内容(改标题、换图、挪坐标) | `block_replace` | 精准替换,原子性好;`replacement` 根 `id` 由 CLI 自动注入为 `block_id` |
|
|
12
12
|
| 只加 1~N 个元素、不动现有布局 | `block_insert` | 新增不覆盖,可选 `insert_before_block_id` 指定位置 |
|
|
13
13
|
| 一次动多个元素(如:换标题 + 加图) | 单次 `--parts` 里拼多条 | 整批作为原子事务,任一失败整批不生效;`block_replace` 和 `block_insert` 可混用 |
|
|
14
|
-
|
|
|
14
|
+
| 整页版式重建、整页坐标重排、改页面背景、删若干元素 | `+update-slide`(每页一次) | 原地整页覆盖,`slide_id` 和页序不变;带原 `id` 的元素保留 id,不带 `id` 的作为新元素插入,遗漏的被删除 |
|
|
15
15
|
|
|
16
16
|
> **没有字段级 patch**:即便只想改一个 `shape` 的 `topLeftX`,也得把整个块的新 XML 写出来用 `block_replace`。这不是"微调",是块级重写。
|
|
17
17
|
|
|
@@ -105,10 +105,7 @@ lark-cli slides +replace-slide --as user \
|
|
|
105
105
|
```bash
|
|
106
106
|
lark-cli slides +replace-slide --as user \
|
|
107
107
|
--presentation "$PID" --slide-id "$SID" \
|
|
108
|
-
--parts '[
|
|
109
|
-
{"action":"block_replace","block_id":"bab","replacement":"<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"},
|
|
110
|
-
{"action":"block_insert","insertion":"<img src=\"<file_token>\" topLeftX=\"700\" topLeftY=\"400\" width=\"180\" height=\"100\"/>"}
|
|
111
|
-
]'
|
|
108
|
+
--parts '[{"action":"block_replace","block_id":"bab","replacement":"<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"},{"action":"block_insert","insertion":"<img src=\"<file_token>\" topLeftX=\"700\" topLeftY=\"400\" width=\"180\" height=\"100\"/>"}]'
|
|
112
109
|
```
|
|
113
110
|
|
|
114
111
|
整批作为原子事务:任一条失败整批不生效。失败时后端通常返回 3350001;若响应中带 `failed_part_index` / `failed_reason` 字段,shortcut 会原样透传。
|
|
@@ -139,7 +136,7 @@ cat parts.json | lark-cli slides +replace-slide --as user --presentation "$PID"
|
|
|
139
136
|
## 相关文档
|
|
140
137
|
|
|
141
138
|
- [lark-slides-replace-slide.md](lark-slides-replace-slide.md) — +replace-slide shortcut 参数详情
|
|
142
|
-
- [lark-slides-
|
|
139
|
+
- [lark-slides-update-slide.md](lark-slides-update-slide.md) — +update-slide shortcut 参数详情(整页覆盖)
|
|
143
140
|
- [lark-slides-xml-presentation-slide-get.md](lark-slides-xml-presentation-slide-get.md) — slide.get 参考(拿 `block_id` / `revision_id`)
|
|
144
141
|
- [lark-slides-xml-presentation-slide-replace.md](lark-slides-xml-presentation-slide-replace.md) — 底层 replace API 参考(一般直接用 shortcut 即可)
|
|
145
142
|
- [lark-slides-media-upload.md](lark-slides-media-upload.md) — 上传图片拿 file_token
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# slides +update-slide(整页更新已有页面)
|
|
2
|
+
|
|
3
|
+
把一整页 XML 交给某个已有页面,页面变成 `--content` 描述的样子。`slide_id` 和页序都不变。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 标准用法:整页 XML 从文件读(推荐:避免 shell 转义和长参数截断)
|
|
9
|
+
lark-cli slides +update-slide --as user \
|
|
10
|
+
--presentation "https://xxx.larkoffice.com/slides/SCtZ...ynae" \
|
|
11
|
+
--slide-id "piy" \
|
|
12
|
+
--content @page.xml
|
|
13
|
+
|
|
14
|
+
# XML 从 stdin 读
|
|
15
|
+
cat page.xml | lark-cli slides +update-slide --as user \
|
|
16
|
+
--presentation "$PRES" --slide-id "$SLIDE" --content -
|
|
17
|
+
|
|
18
|
+
# wiki 链接直接传(CLI 自动解析并校验 obj_type=slides)
|
|
19
|
+
lark-cli slides +update-slide --as user \
|
|
20
|
+
--presentation "https://xxx.larkoffice.com/wiki/wikcn..." \
|
|
21
|
+
--slide-id "piy" --content @page.xml
|
|
22
|
+
|
|
23
|
+
# 预览请求,不实际写入
|
|
24
|
+
lark-cli slides +update-slide --as user \
|
|
25
|
+
--presentation "$PRES" --slide-id "$SLIDE" --content @page.xml --dry-run
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 参数
|
|
29
|
+
|
|
30
|
+
| 参数 | 必需 | 说明 |
|
|
31
|
+
|------|------|------|
|
|
32
|
+
| `--presentation` | 是 | `xml_presentation_id`、`/slides/` URL 或 `/wiki/` URL |
|
|
33
|
+
| `--slide-id` | 是 | 要整页替换的页面 `slide_id` |
|
|
34
|
+
| `--content` | 是 | 这一页的完整目标 XML,单一 `<slide>` 根;支持字面量、`@file`、stdin `-`。别名:`--xml` / `--slide-xml` / `--slide-content` / `--content-xml` |
|
|
35
|
+
| `--revision-id` | 否 | 默认 `-1`(最新)。它只选择服务端执行所基于的快照,不是“页面有新编辑就拒绝”的乐观锁;传旧版本号会以旧快照重建页面并丢弃其后的编辑 |
|
|
36
|
+
| `--tid` | 否 | 调用方提供的任务/事务标识,CLI 原样透传;用于关联同一编辑任务或重试,不等同于版本前置条件,不能单独保证并发冲突时拒绝写入。一般留空 |
|
|
37
|
+
|
|
38
|
+
`@file` 和 `+xml-get --output` 一样**只接受当前目录下的相对路径**,绝对路径会被拒。
|
|
39
|
+
命令别名:`slides +update`(隐藏);服务别名:`lark-cli slide …` 等价于 `lark-cli slides …`。
|
|
40
|
+
|
|
41
|
+
如果要求“从读取之后页面一旦变化就不再写入”,不能只传 `--revision-id` 或 `--tid`。写入前必须再次用 `+xml-get` 回读最新版,比较读取期间是否发生变化;有变化时先基于最新版重新合并本次修改,再执行整页写回。当前 shortcut 不提供严格的 compare-and-swap 保证。
|
|
42
|
+
|
|
43
|
+
## 语义:`--content` 就是这一页的最终状态
|
|
44
|
+
|
|
45
|
+
**没写进 `--content` 的东西会从页面上消失。** 这不是补丁,是整页覆盖。
|
|
46
|
+
|
|
47
|
+
| 你在 `--content` 里怎么写 | 页面上的结果 |
|
|
48
|
+
|---|---|
|
|
49
|
+
| 元素带原来的 `id` | 按新 XML 更新这个元素 |
|
|
50
|
+
| 元素不带 `id` | 作为新元素插入到它所在的位置 |
|
|
51
|
+
| 原来有、`--content` 里没有的元素 | **删除** |
|
|
52
|
+
| `<style>` 改了 | 背景等页面样式跟着改 |
|
|
53
|
+
| 没写 `<note>` | 讲者备注被清空 |
|
|
54
|
+
|
|
55
|
+
一次请求就能同时做完改样式、插入、删除、换备注、换背景——这是 `+replace-slide` 逐元素 part 做不到的(它没法寻址背景,也没有 move 操作)。
|
|
56
|
+
|
|
57
|
+
## 标准读-改-写流程
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# 1. 读回当前页(拿到带 id 的完整 XML)
|
|
61
|
+
lark-cli slides +xml-get --as user \
|
|
62
|
+
--presentation "$PRES" --slide-id "$SLIDE" --output page.xml
|
|
63
|
+
|
|
64
|
+
# 2. 编辑 page.xml —— 保留想留下的元素的 id,删掉不要的整段,新元素不写 id
|
|
65
|
+
|
|
66
|
+
# 3. 整页写回
|
|
67
|
+
lark-cli slides +update-slide --as user \
|
|
68
|
+
--presentation "$PRES" --slide-id "$SLIDE" --content @page.xml
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
先 `--dry-run` 看请求,确认无误再执行。
|
|
72
|
+
|
|
73
|
+
> ⚠️ **第 1 步不要加 `--remove-attr-id`。** 那个参数会把所有元素的 `id` 去掉,再交给 `+update-slide` 的话,每个元素都会被当成新元素插入、原来的全部被删除——页面看起来一样,但所有元素换了新 id,锚在旧 id 上的评论和 block 直达链接全部失效,而且**不会有任何报错**。`--remove-attr-id` 只用于只读查看。
|
|
74
|
+
|
|
75
|
+
## 命令校验与空页限制
|
|
76
|
+
|
|
77
|
+
| 情况 | 报错 |
|
|
78
|
+
|---|---|
|
|
79
|
+
| 根元素不是 `<slide>`(例如直接给了 `<shape>`) | `--content root must be <slide>` → 改单个元素请用 `+replace-slide` |
|
|
80
|
+
| 根 `id` 和 `--slide-id` 不一致 | 拒绝。这通常是 A 页的 XML 要写到 B 页 —— 会毁掉 B 页 |
|
|
81
|
+
| 根 `id` 缺失 | 自动补上 `--slide-id`,不报错 |
|
|
82
|
+
| 根标签带命名空间前缀(`<sml:slide>`) | 拒绝。页面 id 没法贴到带前缀的标签上;写成 `<slide>`,需要命名空间就用默认 `xmlns` |
|
|
83
|
+
| `<slide>` 之后还有第二个根元素或多余文本 | 拒绝。服务端解析会静默丢掉它们 |
|
|
84
|
+
| XML 不合法 | 拒绝,带上出错位置 |
|
|
85
|
+
| `<slide/>`(自闭合,空页) | 命令本身可以解析,但提交前的强制版式 lint 会报 `blank_slide`;按本 Skill 不得调用接口提交空页 |
|
|
86
|
+
|
|
87
|
+
标为“拒绝”的情况由命令校验拦截,**不会发出任何请求**;空页则必须在调用命令前由强制版式 lint 拦截。
|
|
88
|
+
|
|
89
|
+
## 什么时候不要用它
|
|
90
|
+
|
|
91
|
+
- **只改一个元素** → 用 [`+replace-slide`](lark-slides-replace-slide.md),一条 `block_replace` part 更省,也不用带上整页
|
|
92
|
+
- **要改多个页面** → 对每一页各跑一次本命令
|
|
93
|
+
- **要新建页面** → `slides +create` 或 `xml_presentation.slide create`
|
|
94
|
+
|
|
95
|
+
## 提交前与写入后验证
|
|
96
|
+
|
|
97
|
+
和其他整页写入一样,把 `--content` 存成本地文件后先跑版式 lint。先取得当前已加载 `lark-slides/SKILL.md` 的父目录,记为 `<lark-slides-skill-dir>`;不要猜测全局安装路径:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
python3 "<lark-slides-skill-dir>/scripts/xml_text_overlap_lint.py" --input page.xml
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`summary.error_count` 必须为 0 才调接口;`warning_count > 0` 时写完要截图复核。
|
|
104
|
+
|
|
105
|
+
写入成功后,必须回读整份演示文稿的最新 XML,而不是只相信写接口的成功响应:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
lark-cli slides +xml-get --as user \
|
|
109
|
+
--presentation "$PRES" --output readback.xml
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
按当前已加载 `lark-slides/SKILL.md` 指向的 [validation-checklist.md](validation-checklist.md) 完成验证:核对总页数、目标页和关键元素(包括需要保留的 ID、文本、背景与备注),并对回读 XML 运行同一版式 lint;发现差异时先停止后续写入并重新基于最新版处理。
|
|
113
|
+
|
|
114
|
+
## 成功输出
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"ok": true,
|
|
119
|
+
"identity": "user",
|
|
120
|
+
"data": {
|
|
121
|
+
"xml_presentation_id": "slides_example_presentation_id",
|
|
122
|
+
"slide_id": "piy",
|
|
123
|
+
"revision_id": 43
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
| `data` 下的字段 | 说明 |
|
|
129
|
+
|------|------|
|
|
130
|
+
| `xml_presentation_id` | 实际写入的演示文稿 ID |
|
|
131
|
+
| `slide_id` | 与传入相同——整页覆盖不换页 id |
|
|
132
|
+
| `revision_id` | 写入后的新版本号 |
|
|
133
|
+
|
|
134
|
+
服务端拒绝这次写入时(`failed_reason` 非空)**不会**返回成功输出,而是报错并带上原因——单个 part 承载整页,任何失败都意味着页面没被写入。
|
|
135
|
+
|
|
136
|
+
- 原因包含 `not found`:先检查 `--presentation` 和 `--slide-id`,再用 `slides +xml-get` 回读当前页面 ID。页面可能已删除,或 ID 来自另一份演示文稿。
|
|
137
|
+
- 其他 invalid-parameter 错误:检查 `--content` 中不支持的元素、缺少 `<content/>` 的 `<shape>`,以及超出 960×540 的坐标。
|
|
138
|
+
|
|
139
|
+
## 常见错误
|
|
140
|
+
|
|
141
|
+
| 现象 | 原因 | 解决 |
|
|
142
|
+
|------|------|------|
|
|
143
|
+
| 3350001,原因包含 `not found` | `--presentation` 不匹配,或 `--slide-id` 对应的页面已被删除 | 检查 `--presentation` 和 `--slide-id`,再用 `slides +xml-get` 回读当前页面 ID |
|
|
144
|
+
| 3350001,其他 invalid param | `--content` 的 XML 结构有问题(如 `<shape>` 缺 `<content/>`、包含服务端不支持的元素) | 按 [troubleshooting.md](troubleshooting.md) 检查 `--content` 的 XML 结构 |
|
|
145
|
+
| 3350002 not found | `--revision-id` 传了不存在的版本号 | 用 `-1` 或真实存在的 `revision_id` |
|
|
146
|
+
| 1061004 / 403 | 当前身份对这份 PPT 没有编辑权限 | 检查是否拥有 `slides:presentation:update` 或 `slides:presentation:write_only` scope;wiki 链接另需 `wiki:node:read`;`--as bot` 还要求该 bot 对目标 PPT 有编辑权限 |
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## 用途
|
|
4
4
|
|
|
5
|
-
读取飞书幻灯片(PPT
|
|
5
|
+
读取飞书幻灯片(PPT)的完整演示文稿 XML,或通过 `--slide-id` / `--slide-number` 读取指定单页 XML。
|
|
6
6
|
|
|
7
7
|
## Shortcut
|
|
8
8
|
|
|
9
9
|
使用 `slides +xml-get` shortcut,可以把 XML 保存到本地文件,避免终端输出被截断。
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
```bash
|
|
13
12
|
lark-cli slides +xml-get --as user \
|
|
14
13
|
--presentation "slides_example_presentation_id" \
|
|
@@ -23,7 +22,10 @@ lark-cli slides +xml-get --as user \
|
|
|
23
22
|
| `--presentation` | string | 是 | 演示文稿的唯一标识符 |
|
|
24
23
|
| `--revision-id` | integer | 否 | 版本号,`-1` 表示最新版本 |
|
|
25
24
|
| `--output` | string | 否 | XML 保存路径,必须使用相对路径;省略时 XML 在 stdout 的 JSON envelope 中返回 |
|
|
26
|
-
| `--
|
|
25
|
+
| `--raw` | flag | 否 | 直接把 XML 输出到 stdout,不包 JSON envelope;不能与 `--output`、`--jq` 或非 JSON `--format` 同时使用 |
|
|
26
|
+
| `--slide-id` | string | 否 | 只读取指定 `slide_id` 的单页 XML;不能与 `--slide-number` 或 `--remove-attr-id` 同时使用 |
|
|
27
|
+
| `--slide-number` | integer | 否 | 只读取指定的 1-based 页码;不能与 `--slide-id` 或 `--remove-attr-id` 同时使用 |
|
|
28
|
+
| `--remove-attr-id` | flag | 否 | 仅全文读取可用;移除 XML id 属性后读取,不适合后续精确块编辑 |
|
|
27
29
|
| `--json` | flag | 否 | `--format json` 的简写,json 为默认输出格式 |
|
|
28
30
|
|
|
29
31
|
|
|
@@ -36,6 +38,27 @@ lark-cli slides +xml-get --as user \
|
|
|
36
38
|
--json
|
|
37
39
|
```
|
|
38
40
|
|
|
41
|
+
### 读取单页并保存
|
|
42
|
+
|
|
43
|
+
按页面 ID 和按页码二选一:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
lark-cli slides +xml-get --as user \
|
|
47
|
+
--presentation "slides_example_presentation_id" \
|
|
48
|
+
--slide-id "slide_example_id" \
|
|
49
|
+
--output .lark-slides/plan/slides_example_presentation_id/slide.xml \
|
|
50
|
+
--json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 直接输出 XML 到管道
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
lark-cli slides +xml-get --as user \
|
|
57
|
+
--presentation "slides_example_presentation_id" \
|
|
58
|
+
--slide-number 1 \
|
|
59
|
+
--raw
|
|
60
|
+
```
|
|
61
|
+
|
|
39
62
|
### 指定版本读取
|
|
40
63
|
|
|
41
64
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Troubleshooting
|
|
2
2
|
|
|
3
|
-
本文件覆盖 lark-slides 的通用创建前自检、XML 排障和常见失败处理。命令专属问题优先看对应 reference,例如 `+replace-slide`、`+media-upload
|
|
3
|
+
本文件覆盖 lark-slides 的通用创建前自检、XML 排障和常见失败处理。命令专属问题优先看对应 reference,例如 `+replace-slide`、`+media-upload`。
|
|
4
4
|
|
|
5
5
|
## XML Preflight
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- 特殊字符已转义:正文和标题里的 `&`、`<`、`>` 不能裸写;属性值里的裸 `&` 也必须写成 `&`。
|
|
10
10
|
- 属性引号安全:XML 属性、shell 引号、JSON 字符串包装之间没有互相打断。
|
|
11
11
|
- 结构合法:`<slide>` 下只放 `<style>`、`<data>`、`<note>`,文本都在 `<content>` 内。
|
|
12
|
-
- 图片路径正确:`<img src="@...">`
|
|
12
|
+
- 图片路径正确:`<img src="@...">` 占位符由 `+create` 和 `+add-slide` 处理。
|
|
13
13
|
|
|
14
14
|
## Failure Order
|
|
15
15
|
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
3. 检查失败页是否含未转义字符:`Q&A -> Q&A`,文本 `<` / `>` 写成 `<` / `>`,属性 URL `a=1&b=2 -> a=1&b=2`。
|
|
21
21
|
4. 检查标签闭合、属性引号、`<content>` 结构,以及 `<slide>` 直接子元素。
|
|
22
22
|
5. 页面空白、溢出、重叠或越界时,按 [validation-checklist.md](validation-checklist.md) 运行 `xml_text_overlap_lint.py`;先修复所有 `error`,再对 `warning` 指向的页面和元素做截图复核。
|
|
23
|
-
6. 如果使用 `--slides '[...]'
|
|
24
|
-
7. 局部问题用 `+replace-slide`
|
|
23
|
+
6. 如果使用 `--slides '[...]'` 字面量,怀疑 shell 转义或截断时改用文件输入:`+create --slide @page-01.xml --slide @page-02.xml`。
|
|
24
|
+
7. 局部问题用 `+replace-slide` 块级修正;整页结构要改时用 `+delete-slide` 删旧页 + `+add-slide` 建新页。
|
|
25
25
|
|
|
26
26
|
## Symptom Fixes
|
|
27
27
|
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
| 表格列宽不合理 | 调整 `colgroup` 中 `col` 的 `width` 值 |
|
|
35
35
|
| 图表没有显示 | 检查 `chartPlotArea` 和 `chartData` 是否都包含,`dim1` / `dim2` 数据数量是否匹配 |
|
|
36
36
|
| 图片被裁掉一部分 | `<img>` 的 `width` / `height` 是裁剪后尺寸;要整图显示就让 `width:height` 对齐原图比例 |
|
|
37
|
-
| 图片不显示 / `<img src>` 仍是 `@path` | `@`
|
|
37
|
+
| 图片不显示 / `<img src>` 仍是 `@path` | `@` 占位符由 `+create` 和 `+add-slide` 替换 |
|
|
38
38
|
| 新插入的 `<img>` 挡住原有元素 | `slide.get` 读原页,对照已有块坐标挑空白位置;空间不够就在同一批 `--parts` 里先移动/缩小现有块再插图 |
|
|
39
39
|
| 渐变背景变成白色 | 渐变必须用 `rgba()` 格式 + 百分比停靠点,如 `linear-gradient(135deg,rgba(30,60,114,1) 0%,rgba(59,130,246,1) 100%)` |
|
|
40
40
|
| 整体风格不统一 | 封面页和结尾页用同一背景,内容页保持一致的配色和字号体系 |
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|--------------|------|----------|
|
|
46
46
|
| 400 XML 格式错误 | XML 语法错误 | 检查标签闭合、属性引号、特殊字符转义 |
|
|
47
47
|
| 400 请求包装错误 | `--data` 未按 schema 包装 | 检查是否传入 `xml_presentation.content` 或 `slide.content` |
|
|
48
|
-
| 创建成功但页面空白 / 内容缺失 / 布局错乱 | 常见于 `--slides '[...]'`
|
|
48
|
+
| 创建成功但页面空白 / 内容缺失 / 布局错乱 | 常见于 `--slides '[...]'` 字面量的 shell 转义或长参数传递问题 | 改用 `--slide @file`(每页一个文件)或 `--slides @deck.json`,并在创建后立即读取 XML 验证 |
|
|
49
49
|
| 403 权限不足 | scope 或文档权限不匹配 | 确认 scope 和文档权限;无权限时根据错误响应引导用户解决 |
|
|
50
50
|
| 404 演示文稿不存在 | `xml_presentation_id` 不正确或无权限 | 检查 token;wiki URL 需先解析真实 `obj_token` |
|
|
51
51
|
| 404 幻灯片不存在 | `slide_id` 不正确 | 重新读取 presentation 或 slide,确认最新 ID |
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
## 最小可用示例
|
|
13
13
|
|
|
14
14
|
```xml
|
|
15
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
16
15
|
<presentation xmlns="https://www.larkoffice.com/sml/2.0" width="960" height="540">
|
|
17
16
|
<slide>
|
|
18
17
|
<data>
|
|
@@ -431,7 +430,6 @@ XSD 中的 `title`、`headline`、`sub-headline`、`body`、`caption` 主要出
|
|
|
431
430
|
## 完整示例
|
|
432
431
|
|
|
433
432
|
```xml
|
|
434
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
435
433
|
<presentation xmlns="https://www.larkoffice.com/sml/2.0" width="960" height="540">
|
|
436
434
|
<title>季度报告</title>
|
|
437
435
|
<theme>
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# 文档统计:总字数 / 总字符数
|
|
2
|
-
|
|
3
|
-
当用户需要统计 Docx / Wiki 文档的总字数或总字符数时,使用本 skill 附带脚本 `scripts/doc_word_stat.py`。统计口径以该脚本为准,不要改用其他方式自行计算,也不要只读取 simple 摘要后统计。
|
|
4
|
-
|
|
5
|
-
## 调用方式
|
|
6
|
-
|
|
7
|
-
在线文档使用 XML full 内容,并让脚本读取 `docs +fetch --format json` 的 envelope:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \
|
|
11
|
-
| python3 skills/lark-doc/scripts/doc_word_stat.py --protocol xml --lark-json --pretty
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
`$URL` 可以是用户给出的 docx/wiki URL,也可以是可被 `docs +fetch` 解析的 token。
|
|
15
|
-
|
|
16
|
-
## 统计范围
|
|
17
|
-
|
|
18
|
-
先判断用户要求的是**整篇文档**还是**局部内容**:
|
|
19
|
-
|
|
20
|
-
- 整篇文档的总字数 / 总字符数:按上方「调用方式」抓取 `full` 内容后统计。
|
|
21
|
-
- 本次新增 / 替换 / 改写片段的字数:优先统计拟写内容本身;内容已写入文档时,只 fetch 对应 block / range 后统计。不得用整篇文档字数对比局部目标。
|
|
22
|
-
|
|
23
|
-
如需在自动化或回归验证中发现未覆盖块类型,追加严格参数:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \
|
|
27
|
-
| python3 skills/lark-doc/scripts/doc_word_stat.py --protocol xml --lark-json --pretty --fail-on-unsupported --fail-on-unknown
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## 如何读取结果
|
|
31
|
-
|
|
32
|
-
脚本输出 JSON。对用户汇报时默认只读两个核心字段:
|
|
33
|
-
|
|
34
|
-
- `word_count`:总字数。按语义单位统计汉字、英文单词/URL/code path、数字、中文标点;普通贴着英文的英文标点不计入,但独立 ASCII 符号、中文之间的 `/` 等以脚本结果为准。
|
|
35
|
-
- `char_count`:总字符数。统计汉字、英文字母、数字、中英文标点和脚本识别的可见符号;空格不计入。
|
|
36
|
-
|
|
37
|
-
其余字段用于排查或解释:
|
|
38
|
-
|
|
39
|
-
- `breakdown`:拆分统计来源,例如 `han_chars`、`english_words`、`digits`、`chinese_punctuations`。
|
|
40
|
-
- `unknown_blocks`:脚本遇到未知 XML/Markdown 块类型;通常表示需要扩展解析规则。
|
|
41
|
-
- `unsupported_blocks`:脚本识别到块类型,但当前无法可靠提取可见文本。
|
|
42
|
-
- `diagnostics.has_unknown` / `diagnostics.has_unsupported`:快速判断统计是否存在覆盖风险。
|
|
43
|
-
|
|
44
|
-
如果 `unknown_blocks` 或 `unsupported_blocks` 非空,回复用户时要说明“已统计可提取文本,但存在未覆盖块,结果可能偏低”,并列出对应块类型。为空时可直接给出结果。
|
|
45
|
-
|
|
46
|
-
## 字数遵循校验
|
|
47
|
-
|
|
48
|
-
当用户给了明确字数要求(写 N 字 / x-y 字 / x 字左右 / 上下浮动)时执行;没有明确字数要求则跳过。字数必须按本文流程用脚本统计,不要自己估。
|
|
49
|
-
|
|
50
|
-
1. 先按「统计范围」确认统计对象,再把要求归一成目标区间:`>x`→`[x+1, +∞)`;`<y`→`(-∞, y-1]`;`x-y`→`[x, y]`;`x 字左右`→`[round(0.9x), round(1.1x)]`
|
|
51
|
-
2. 按统计对象选择对应输入并调用脚本统计实际字数,读取输出里的 `word_count`
|
|
52
|
-
3. 对比 `word_count` 与目标区间:区间内即通过;低于下限 → 补充**实质内容**(非注水);高于上限 → 删减冗余内容。改完重新统计
|
|
53
|
-
4. **最多 2 轮**。2 轮后仍不达标:停止,不得为达标而注水或删关键内容;如实汇报【目标区间 / 当前字数 / 差值与方向 / 已试 2 轮 / 未达原因】,**禁止谎称达标**
|
|
54
|
-
|
|
55
|
-
## 输出示例
|
|
56
|
-
|
|
57
|
-
输入正文等价于:`标题` + `一个苹果是 an apple。` 时,输出形态如下:
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{
|
|
61
|
-
"word_count": 10,
|
|
62
|
-
"char_count": 15,
|
|
63
|
-
"breakdown": {
|
|
64
|
-
"han_chars": 7,
|
|
65
|
-
"english_words": 2,
|
|
66
|
-
"number_words": 0,
|
|
67
|
-
"chinese_punctuations": 1,
|
|
68
|
-
"english_letters": 7,
|
|
69
|
-
"digits": 0,
|
|
70
|
-
"english_punctuations": 0,
|
|
71
|
-
"symbol_words": 0,
|
|
72
|
-
"symbol_chars": 0
|
|
73
|
-
},
|
|
74
|
-
"protocol": "xml",
|
|
75
|
-
"unknown_blocks": [],
|
|
76
|
-
"unsupported_blocks": [],
|
|
77
|
-
"diagnostics": {
|
|
78
|
-
"has_unknown": false,
|
|
79
|
-
"has_unsupported": false,
|
|
80
|
-
"types": {},
|
|
81
|
-
"unknown_types": {},
|
|
82
|
-
"unsupported_types": {},
|
|
83
|
-
"actions": {}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
面向用户的回复可简化为:
|
|
89
|
-
|
|
90
|
-
```text
|
|
91
|
-
总字数:10
|
|
92
|
-
总字符数:15
|
|
93
|
-
```
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# 从零创作工作流
|
|
2
|
-
|
|
3
|
-
用户提供主题、需求或简要说明,需要生成一份新的飞书文档时,遵循本工作流。
|
|
4
|
-
|
|
5
|
-
## 核心方法论 — Code-Act Loop
|
|
6
|
-
|
|
7
|
-
通过自适应的 **Code-Act Loop** 驱动文档创作,而非固定模板式的工作流。每次任务都循环执行:
|
|
8
|
-
|
|
9
|
-
1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么
|
|
10
|
-
2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进正文;仅画板渲染按需隔离到 SubAgent(见步骤三)
|
|
11
|
-
3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标
|
|
12
|
-
4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环
|
|
13
|
-
|
|
14
|
-
循环在文档达到质量标准且满足用户需求时结束。不要试图一次性产出完美内容——迭代打磨效果更好。根据用户实际需求灵活决定文档结构和版块,而不是套用固定模板。
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## 典型 Code-Act Loop 流程
|
|
18
|
-
|
|
19
|
-
### 步骤一:规划与撰写(单 Agent 串行)
|
|
20
|
-
|
|
21
|
-
正文由主 Agent 串行维护,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效。
|
|
22
|
-
|
|
23
|
-
1. 分析用户需求:受众、目的、范围
|
|
24
|
-
2. 设计大纲:根据任务自然选择结构。可以是短文、纪要、FAQ、方案、报告、清单或其他形式;不要默认套固定章节、固定开头或固定富 block 配比
|
|
25
|
-
3. `docs +create` 创建并撰写:
|
|
26
|
-
- **短文档**:一次写入完整内容。使用 Markdown 时,避免同时传入 `--title` 和同名 `# 标题`
|
|
27
|
-
- **长文档**:先建骨架(标题 + 各级标题),再由主 Agent **顺序逐节**用 `block_insert_after --block-id <章节标题 block_id>` 补全正文;写完一节再写下一节,始终带着已写内容的上下文,保证衔接、不重复
|
|
28
|
-
- ⚠️ 不要一次性把超长完整内容塞进 `--content`,容易触发字符/参数限制;长文按节分次写入
|
|
29
|
-
- ⚠️ 同一节内多次插入时,要锚到**上一个新插入的 block**(按 [`lark-doc-update.md`](../lark-doc-update.md) 的「Block ID 生命周期」),否则反复锚同一个标题会让段落顺序颠倒
|
|
30
|
-
- ⚠️ 若先建骨架写了占位摘要,补正文时**删除占位摘要**,不要留残渣
|
|
31
|
-
- ⚠️ **`@file` 路径限制**:`--content @file` 只接受当前工作目录下的相对路径,传绝对路径(如 `@/tmp/xxx.md`)会报 `unsafe file path`。需要落盘时,将文件写在 cwd 下,用完自行清理
|
|
32
|
-
|
|
33
|
-
### 步骤二:整合审查与画板识别(串行)
|
|
34
|
-
|
|
35
|
-
4. `docs +fetch --api-version v2 --detail with-ids` 获取文档,审查整体效果
|
|
36
|
-
5. 评估内容是否满足用户目标:事实是否完整、结构是否清楚、语气是否匹配、是否保留必要素材;检查跨节有无重复、矛盾或断流。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题就地定向修正
|
|
37
|
-
6. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节、推荐画板类型、mermaid/SVG 路径和用于画图的源内容
|
|
38
|
-
|
|
39
|
-
### 步骤三:画板处理与润色
|
|
40
|
-
|
|
41
|
-
7. **优先处理步骤二识别出的画板需求**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent
|
|
42
|
-
8. 由**主 Agent 自行润色**(不另起内容子 Agent,正文始终一人维护):文字密集且不易读时,优先拆段、加小标题或调整顺序——叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`);只有确实存在行列数据时才用 `<table>`。其余富 block 的取舍一律遵循 `lark-doc-style.md` 的写作原则,不主动堆叠。需要明显分隔的主题可补充 `<hr/>`,不强制章节间都使用。本地图片使用 `docs +media-insert` 插入
|
|
43
|
-
|
|
44
|
-
### 步骤四:专项校验
|
|
45
|
-
|
|
46
|
-
9. **字数门禁**:如果用户给出任何明确字数要求(如“700-800 字”“1000 字左右”“不少于 500 字”“控制在 800 字以内”),本步骤必须执行,不属于按需项。读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;未得到脚本统计结果前,不得向用户声明“符合字数要求”。若没有明确字数要求,则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现目标区间、`word_count` 和达标结论
|
|
47
|
-
10. **重复标题检查**:文档生成后,检查文档标题和正文第一个标题块是否重复;若重复,删除或改写正文第一个标题块,避免读者看到同一标题连续出现
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# 飞书文档写作原则
|
|
2
|
-
|
|
3
|
-
写飞书文档,像一个该领域资深的人类作者那样写,而不是把内容"装配"成组件。
|
|
4
|
-
本文只讲"何时用、什么风格";具体标签 / 命令语法见 [`lark-doc-xml.md`](../lark-doc-xml.md)。
|
|
5
|
-
|
|
6
|
-
## 一、用户明确要求优先
|
|
7
|
-
|
|
8
|
-
用户点名要某种格式——高亮块、分栏、列表、某编号体例、表格、画板、某模板、某已有文档的风格——**一律照用户的来,下面的"默认克制"全部让位**。用户给了样例或已有文档,就沿用它的结构与语气。
|
|
9
|
-
|
|
10
|
-
## 二、默认写连贯段落
|
|
11
|
-
|
|
12
|
-
用户没指定时,**默认是连贯段落**;其余按内容类型分流,别一律"少用结构",也别什么都升标题:
|
|
13
|
-
|
|
14
|
-
| 内容 | 用什么 | ❌ 别 |
|
|
15
|
-
|---|---|---|
|
|
16
|
-
| 叙述、论证、分析、说明 | **连贯段落** | 拆成列举 |
|
|
17
|
-
| 真·行列数据(预算、指标、对比、排期、字段说明) | **表格** | 写成段落或把字段堆成一行 |
|
|
18
|
-
| 字段:值(主题、时长、负责人等,少量) | **加粗标签行**或一句话 | 每字段一个标题 |
|
|
19
|
-
| 方法 / 措施 + 每项一段描述 | **加粗引导句段落**(「**全程督导。**…」) | 每项升标题 |
|
|
20
|
-
| 任务清单 / 检查项 / 待办事项 | **`<checkbox>`** | 用普通列表替代可交互待办 |
|
|
21
|
-
| 纯短并列项(无描述,如材料清单) | 列表 | — |
|
|
22
|
-
| 章节(内容成块、需在目录导航) | 标题层级 | — |
|
|
23
|
-
|
|
24
|
-
- 判断标准:**去掉结构后能顺成段落,就用段落;成行成列的数据,就用表格。**
|
|
25
|
-
- **红线一:标题层级只给"章节"。** "小标题 + 一两句话"的小项(字段、方法、要点)不该占标题层级——按上表降成标签行 / 加粗引导句段落(否则目录里全是没信息量的条目)。
|
|
26
|
-
- **红线二:列举(「一是 / 二是」「第一 / 第二」「(1)(2)(3)」)只给真正并列的具体项,且别每节都用。**
|
|
27
|
-
- 「一是 / 二是」是党务列举的措辞——只用在列具体的**问题 / 措施**那一处;背景、现状、认识、分析、过渡、总结**一律成段**。
|
|
28
|
-
- **整篇每段 / 每节都"一是 / 二是",和"每段一个 bullet"是同一个骨架化的错——不因为是党务就变对**(纯清单 / 台账类除外)。
|
|
29
|
-
|
|
30
|
-
## 三、按体裁写
|
|
31
|
-
|
|
32
|
-
- **公文 / 法律 / 学术 / 申报 / 项目方案等严肃正式提交物**:靠规范的标题层级、段落与编号体系表达;**默认不用高亮块、分栏**,要强调用加粗或规范小标题。
|
|
33
|
-
- **面向公众号、微信等外部平台粘贴 / 发布的内容**:不用飞书特有富 block(高亮块、分栏等),粘出去会丢样式 / 错乱;改用标准标题、段落、列表、引用。
|
|
34
|
-
- **一般文档**:以可读为先,不堆砌结构。
|
|
35
|
-
|
|
36
|
-
## 四、编号与层级
|
|
37
|
-
|
|
38
|
-
- **一套编号体例、全篇一致;最忌中文大层级与阿拉伯小数编号混用。**
|
|
39
|
-
- 公文 / 正式材料常用:「一、→(一)→ 1.→(1)」(中文大层级 + 阿拉伯细分层级)。
|
|
40
|
-
- 学术 / 技术 / 商业报告:「1 → 1.1 → 1.1.1」或「一、→(一)→ 1.」,**择一**。
|
|
41
|
-
- ⚠️ **「一、」只能配「(一)」;要用阿拉伯小数就从顶层全用「1 / 1.1」。绝不「一、」配「1.1 / 2.1」**——这是最常见的混用。
|
|
42
|
-
- **不混用**多套(别"第X部分"+"一、"+"1."混着来);**同级不跳号**;**不跳级**。
|
|
43
|
-
- **编号 / 标题层级只给"章节"**,不要为了凑齐体例把每个小项都编上「(一)」、升成标题(小项处理方式见上文「二、默认写连贯段落」)。
|
|
44
|
-
- 简单的 1.2.3 并列项用原生 `<ol><li seq="auto">…</li></ol>` 让飞书自动编号、自动对齐;「一、(一)」原生产不出,才手打成文字——此时用标题级别表达层次,**不靠手动缩进**、各级顶格(全角括号「()」叠手动缩进会视觉错位)。
|
|
45
|
-
|
|
46
|
-
## 五、飞书特有组件,克制使用
|
|
47
|
-
|
|
48
|
-
- **高亮块 `<callout>`**:很重的强提醒信号,**默认不用**;只给"不提醒就会出错 / 遗漏"的关键项,全文极少(0~1 个),不要每节导语 / 结论都做成高亮块。
|
|
49
|
-
- **分栏 `<grid>`**:仅左右信息量相当、确需并排对照的短内容;否则用段落或表格。
|
|
50
|
-
- **画板**:默认用文字,只在**图示明显比文字更易懂**(流程、架构、时间线、对比、占比等)或用户要求时才用。怎么插、用哪种类型见 [`lark-doc-xml.md`](../lark-doc-xml.md) 与 [`lark-doc-whiteboard.md`](../lark-doc-whiteboard.md)。
|
|
51
|
-
- **颜色**:默认朴素、不上色;需要时保持语义一致,按下表选择对应颜色,不为装饰上色。可用色见 [`lark-doc-xml.md`](../lark-doc-xml.md) 的「美化系统」。
|
|
52
|
-
|
|
53
|
-
| 语义 | 背景色 | 文字色 |
|
|
54
|
-
|-|-|-|
|
|
55
|
-
| 信息、说明 | `light-blue` | `blue` |
|
|
56
|
-
| 成功、推荐 | `light-green` | `green` |
|
|
57
|
-
| 警告 / 错误 / 风险 | `light-red` | `red` |
|
|
58
|
-
| 注意、待确认 | `light-yellow` | `yellow` |
|
|
59
|
-
| 中性、辅助 | `light-gray` | — |
|
|
60
|
-
|
|
61
|
-
## 六、写完自检
|
|
62
|
-
|
|
63
|
-
交付前快速回看:
|
|
64
|
-
- **叙述是否被列举化**:背景 / 现状 / 认识 / 分析 / 成效 / 过渡 / 总结等应成段;列举只用于同层级、可并列处理的信息,如问题、措施、步骤、任务或材料清单。若正文反复使用连续编号、项目符号或固定并列句式,导致内容缺少叙述,应把背景 / 认识 / 分析 / 过渡改写成有承接关系的段落(纯清单 / 台账类除外)。
|
|
65
|
-
- **数据是否正确呈现**:成行成列的数据应使用表格呈现,不要写成段落,也不要用分隔符把多个字段硬串在一起。
|
|
66
|
-
- **标题是否滥用**:"小标题 + 一句话"的小项不要升成标题;应改成标签行、加粗引导句段落或普通段落。
|
|
67
|
-
- **编号是否统一**:全篇一套、不跳号、不跳级,尤其不要中文 + 阿拉伯混用(如「一、」配「1.1」)。
|
|
68
|
-
- **组件是否克制且保真**:高亮块 / 分栏 / 画板 / 颜色应符合体裁和用户要求;引用 / 图片 / 资源块必须保留。
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# 改写增强工作流
|
|
2
|
-
|
|
3
|
-
用户提供已有文档链接或 token,需要改写、润色、补充或重排版时,遵循本工作流。
|
|
4
|
-
|
|
5
|
-
## 核心方法论 — Code-Act Loop
|
|
6
|
-
通过自适应的 **Code-Act Loop** 驱动文档改写,而非固定模板式的工作流。每次任务都循环执行:
|
|
7
|
-
1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么
|
|
8
|
-
2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进改写;仅画板渲染按需隔离到 SubAgent(见步骤二)
|
|
9
|
-
3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标
|
|
10
|
-
4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环
|
|
11
|
-
|
|
12
|
-
## 核心原则:精准手术优于全量覆盖
|
|
13
|
-
1. **精准手术**:只改用户指定的 block,不改其他 block。
|
|
14
|
-
2. **全量覆盖**:如果用户明确要改整篇,才用 `overwrite` 命令。
|
|
15
|
-
3. **保真约束**:改写时原文里的 `<cite type="user">`(@人)、`<cite type="doc">`(@文档)、`<img>`、`<source>`、`<whiteboard>`、`<sheet>`、`<bitable>`、`<synced_reference>` 等行内组件和资源块一律原样保留(含所有 token / user-id / doc-id 属性),不许替换成纯文本姓名、链接或占位符。
|
|
16
|
-
|
|
17
|
-
## 工作流程
|
|
18
|
-
|
|
19
|
-
### 步骤一:分析与画板识别(串行)
|
|
20
|
-
|
|
21
|
-
1. **选择读取范围**(节省上下文的关键):
|
|
22
|
-
- 用户只改某一节 / 文档较大 → 先 `docs +fetch --scope outline --max-depth 2` 拿目录,再 `docs +fetch --scope section --start-block-id <目标标题id> --detail with-ids` 精读该节(`section` 会自动展开到下一个同级/更高级标题前,不用手动算结束 block id)
|
|
23
|
-
- 需要精确跨节区间 → `docs +fetch --scope range --start-block-id xxx --end-block-id yyy`(或 `--end-block-id -1` 读到末尾)
|
|
24
|
-
- 用户只给了模糊关键词 → `docs +fetch --scope keyword --keyword xxx --context-before 1 --context-after 1 --detail with-ids`
|
|
25
|
-
- 用户明确要改整篇 → `docs +fetch --detail with-ids`
|
|
26
|
-
- 详见 [`lark-doc-fetch.md`](../lark-doc-fetch.md) 中「选 `--scope`(读取范围)」小节
|
|
27
|
-
2. 系统性评估:用户想改什么、现有文档风格是什么、哪些内容需要保留、哪些问题影响理解
|
|
28
|
-
3. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节(block ID)、推荐画板类型、mermaid/SVG路径和源内容片段
|
|
29
|
-
4. 向用户简要说明改进计划(包含识别出的画板机会)
|
|
30
|
-
|
|
31
|
-
### 步骤二:定向改写(单 Agent 串行)
|
|
32
|
-
|
|
33
|
-
5. **优先处理步骤一识别出的画板候选段落**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent
|
|
34
|
-
6. 由主 Agent **顺序逐节**改写,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效:
|
|
35
|
-
- 沿用或轻微调整已有文档风格,除非用户要求彻底重排版
|
|
36
|
-
- 优先通过重写段落、调整标题、补充小标题提升可读性;叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`)
|
|
37
|
-
- 富 block 是可选表达手段,不因固定比例而添加,取舍遵循 `lark-doc-style.md` 的写作原则;画板类需求只走第 5 步
|
|
38
|
-
|
|
39
|
-
### 步骤三:验证(串行)
|
|
40
|
-
|
|
41
|
-
7. 获取更新后文档局部内容,检查是否符合用户目标和已有风格
|
|
42
|
-
8. 检查是否满足用户目标并保留原有关键内容。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题则定向修正
|
|
43
|
-
|
|
44
|
-
### 步骤四:专项校验(按需执行)
|
|
45
|
-
|
|
46
|
-
9. 仅当用户预期需要校验字数时,才读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;否则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现结果
|
|
47
|
-
|
|
48
|
-
**上下文节省提示**:主 Agent 改某节时如需重新读取,优先用 `docs +fetch --scope section --start-block-id <章节标题id>`(自动覆盖整节),或 `--scope range --start-block-id xxx --end-block-id yyy` 精确区间,只拉当前章节,不要重复拉全文。
|