@amaster.ai/pi-lark 0.1.2-beta.45 → 0.1.2-beta.46
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/references/lark-apps-file.md +1 -1
- package/skills/lark-base/SKILL.md +3 -4
- package/skills/lark-base/references/lark-base-form-submit.md +16 -7
- package/skills/lark-doc/references/lark-doc-xml.md +1 -1
- package/skills/lark-drive/references/lark-drive-search.md +1 -0
- package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
- package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
- package/skills/lark-im/references/card/resource/icons.md +14 -0
- package/skills/lark-slides/SKILL.md +2 -2
- package/skills/lark-slides/references/lark-slides-screenshot.md +4 -4
- package/skills/lark-slides/references/troubleshooting.md +1 -1
- package/skills/lark-slides/references/validation-checklist.md +24 -7
- package/skills/lark-slides/references/xml-schema-quick-ref.md +18 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +831 -56
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +781 -33
- package/skills/lark-task/SKILL.md +7 -0
- package/skills/lark-task/references/lark-task-complete.md +6 -2
- package/skills/lark-task/references/lark-task-update.md +6 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-lark",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.46",
|
|
4
4
|
"description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"vitest": "^4.0.0"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@amaster.ai/pi-shared": "0.1.2-beta.
|
|
64
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.46"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"fetch-skills": "node scripts/fetch-skills.mjs",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
## 各命令
|
|
29
29
|
|
|
30
30
|
### +file-list
|
|
31
|
-
列出应用文件,支持精确过滤:`--name`(文件名)、`--path`(远端路径)、`--type`(MIME 类型)、`--size-gt`/`--size-lt`(字节)、`--uploaded-since`/`--uploaded-until`(上传时间区间,时间格式见末尾)。分页 `--page-size`(默认 20)/ `--page-token`。列表每项给名称、路径、大小、类型、上传时间(pretty 表格即这 5 列);上传者、下载地址(如有)仅在 JSON 输出里,单文件详情用 `+file-get`。
|
|
31
|
+
列出应用文件,支持精确过滤:`--name`(文件名)、`--path`(远端路径)、`--type`(MIME 类型)、`--size-gt`/`--size-lt`(字节)、`--uploaded-since`/`--uploaded-until`(上传时间区间,时间格式见末尾)。分页 `--page-size`(默认 20,范围 1..200)/ `--page-token`。列表每项给名称、路径、大小、类型、上传时间(pretty 表格即这 5 列);上传者、下载地址(如有)仅在 JSON 输出里,单文件详情用 `+file-get`。
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
lark-cli apps +file-list --app-id app_xxx
|
|
@@ -29,7 +29,7 @@ metadata:
|
|
|
29
29
|
## 使用边界
|
|
30
30
|
|
|
31
31
|
- Base 业务操作只使用 `lark-cli base +...` shortcut,不使用旧聚合式 `+table / +field / +record / +view / +history / +workspace`。
|
|
32
|
-
-
|
|
32
|
+
- 执行 update 前必须先查当前 shortcut 的 `--help` 或对应 reference。若命令要求完整配置,首次请求必须基于可信的当前配置执行 read-modify-write:只修改用户明确指定的内容,保留其他仍适用的可写配置,并按命令要求的结构提交。若命令支持局部/delta update,按其契约提交最小合法 payload;不得以不完整请求试错补参。
|
|
33
33
|
- 用户要把 Excel / CSV / `.base` 导入成 Base 时,先转 `lark-cli drive +import --type bitable`,导入完成后再回到 Base 命令。
|
|
34
34
|
- 认证、初始化、scope、身份切换、权限不足恢复属于 `lark-shared`;Base 文档只保留会影响 Base 路径选择的权限规则。
|
|
35
35
|
|
|
@@ -104,19 +104,18 @@ metadata:
|
|
|
104
104
|
|
|
105
105
|
## 写入前置规则
|
|
106
106
|
|
|
107
|
-
- 更新前先看命令说明:需要完整提交时,先读取并补齐当前配置,只改用户指定的内容,再按命令要求提交;支持局部修改时,按命令说明和 reference 提交最小合法 payload。
|
|
108
107
|
- 优先用写入返回确认结果;返回信息不足或任务明确要求核验时,再读回。
|
|
109
108
|
- 写记录前先读字段结构;只写存储字段。系统字段、附件字段、`formula`、`lookup` 不作为普通记录写入目标。
|
|
110
109
|
- 附件上传、下载、删除走专用 `+record-*-attachment` 命令。
|
|
111
110
|
- 写字段前先读 [lark-base-field-json.md](references/lark-base-field-json.md);涉及 `formula` / `lookup` 时必须读 [formula-field-guide.md](references/formula-field-guide.md) / [lookup-field-guide.md](references/lookup-field-guide.md)。
|
|
112
111
|
- 表名、字段名、视图名、workflow 配置中的名称必须来自真实返回;跨表场景还要读取目标表结构。
|
|
113
|
-
-
|
|
112
|
+
- 删除、角色更新、字段更新、表单提交(`+form-submit`)等高风险操作遵循 CLI 的 confirmation gate,必须带 `--yes`;目标不明确时先用 get/list 消歧。
|
|
114
113
|
- 批量写入单批最多 200 条;连续写同一表时串行执行,遇到 `1254291` 按短暂等待后重试处理。
|
|
115
114
|
- `select` 字段只支持写入字段中已有的选项;构造 CellValue 前先用 `+field-list` 或 `+field-search-options` 确认目标选项存在。
|
|
116
115
|
|
|
117
116
|
## 表单与视图细节
|
|
118
117
|
|
|
119
|
-
- `+form-submit`
|
|
118
|
+
- `+form-submit` 是高风险写操作,必须带 `--yes` 确认;调用前必须先跑 `+form-detail`,读取 `questions[].type`、`required`、`filter` 和附件场景需要的 `base_token`;不要填写被 filter 隐藏的问题。
|
|
120
119
|
- 表单附件不要写进 `fields`,放在 `--json.attachments`;提交附件时必须同时传表单所属 Base 的 `--base-token`。
|
|
121
120
|
- `+view-set-filter` 是唯一保留的 view reference;sort/group/card/timebar/visible-fields 这类配置先用对应 get 命令读现状,保留未修改字段,只替换用户要求变更的配置。
|
|
122
121
|
- 视图适合持久化、共享和 UI 复用;一次性筛选/排序可先用 `+record-list` / `+record-search` 的 filter/sort 验证结果,再按需要沉淀为持久视图。
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
通过表单分享链接填写并提交多维表格表单。仅支持分享模式(share_token),支持填写普通字段值和上传本地文件作为附件。
|
|
6
6
|
|
|
7
|
+
> **⚠️ 高风险写操作(high-risk-write):** 本命令会向表单写入并提交数据,属于高风险写操作,必须额外传递 `--yes` 进行确认,否则会返回 `confirmation_required` 错误并退出。当用户明确要求提交且目标表单无歧义时,直接附加 `--yes`,无需再次询问。
|
|
8
|
+
|
|
7
9
|
## 填写前必读:先获取表单详情
|
|
8
10
|
|
|
9
11
|
**在调用 `+form-submit` 之前,必须先使用 `+form-detail` 获取表单详情。** 原因如下:
|
|
@@ -21,10 +23,11 @@ lark-cli base +form-detail --share-token <share_token>
|
|
|
21
23
|
|
|
22
24
|
# 2️⃣ 根据返回的 questions 列表,按 type 格式化值、检查 required、判断 filter 条件
|
|
23
25
|
|
|
24
|
-
# 3️⃣
|
|
26
|
+
# 3️⃣ 再提交(高风险写操作,必须带 --yes)
|
|
25
27
|
lark-cli base +form-submit \
|
|
26
28
|
--share-token <share_token> \
|
|
27
|
-
--json '{"fields":{...}}'
|
|
29
|
+
--json '{"fields":{...}}' \
|
|
30
|
+
--yes
|
|
28
31
|
```
|
|
29
32
|
|
|
30
33
|
`+form-detail` 的返回中要重点读取 `questions[].type`、`questions[].required`、题目 `filter` 和附件场景所需的 `data.base_token`。
|
|
@@ -35,7 +38,8 @@ lark-cli base +form-submit \
|
|
|
35
38
|
# 基本提交(填写普通字段)
|
|
36
39
|
lark-cli base +form-submit \
|
|
37
40
|
--share-token <share_token> \
|
|
38
|
-
--json '{"fields":{"服务评分":5,"评价内容":"服务态度好"}}'
|
|
41
|
+
--json '{"fields":{"服务评分":5,"评价内容":"服务态度好"}}' \
|
|
42
|
+
--yes
|
|
39
43
|
|
|
40
44
|
# 带附件提交(需要额外提供 --base-token)
|
|
41
45
|
lark-cli base +form-submit \
|
|
@@ -47,15 +51,17 @@ lark-cli base +form-submit \
|
|
|
47
51
|
"附件字段名": ["./report.pdf", "./photo.png"],
|
|
48
52
|
"另一个附件字段": ["./doc.docx"]
|
|
49
53
|
}
|
|
50
|
-
}'
|
|
54
|
+
}' \
|
|
55
|
+
--yes
|
|
51
56
|
|
|
52
57
|
# 使用应用身份(bot)
|
|
53
58
|
lark-cli base +form-submit \
|
|
54
59
|
--share-token <share_token> \
|
|
55
60
|
--json '{"fields":{...}}' \
|
|
56
|
-
--as bot
|
|
61
|
+
--as bot \
|
|
62
|
+
--yes
|
|
57
63
|
|
|
58
|
-
# 预览 API
|
|
64
|
+
# 预览 API 调用(不实际执行,dry-run 无需 --yes)
|
|
59
65
|
lark-cli base +form-submit \
|
|
60
66
|
--share-token <share_token> \
|
|
61
67
|
--json '{"fields":{...}}' \
|
|
@@ -69,6 +75,7 @@ lark-cli base +form-submit \
|
|
|
69
75
|
| `--share-token <token>` | 是 | 表单分享 Token(必填),从表单分享链接中提取 |
|
|
70
76
|
| `--base-token <token>` | 条件必填 | Base token;**当 `--json` 包含 `attachments` 时必须提供**,用于将附件上传到 Base Drive Media |
|
|
71
77
|
| `--json <json>` | 是 | JSON 对象,包含 `"fields"`(普通字段值)和 `"attachments"`(附件上传),详见下方说明 |
|
|
78
|
+
| `--yes` | 是 | 确认高风险写操作。本命令为 high-risk-write,不带 `--yes` 会返回 `confirmation_required` |
|
|
72
79
|
| `--format` | 否 | 输出格式:json(默认)\| pretty \| table \| ndjson \| csv |
|
|
73
80
|
| `--as` | 否 | 身份:user(默认)\| bot |
|
|
74
81
|
| `--dry-run` | 否 | 预览 API 调用,不执行 |
|
|
@@ -138,7 +145,8 @@ https://www.example.com/share/base/form/shrbcvST8eZy0vk8zjVZ1CAXNye
|
|
|
138
145
|
```bash
|
|
139
146
|
lark-cli base +form-submit \
|
|
140
147
|
--share-token shrbcvST8eZy0vk8zjVZ1CAXNye \
|
|
141
|
-
--json '{"fields":{...}}'
|
|
148
|
+
--json '{"fields":{...}}' \
|
|
149
|
+
--yes
|
|
142
150
|
```
|
|
143
151
|
|
|
144
152
|
## 输出格式
|
|
@@ -158,6 +166,7 @@ lark-cli base +form-submit \
|
|
|
158
166
|
|
|
159
167
|
## 提示
|
|
160
168
|
|
|
169
|
+
- **本命令为高风险写操作(high-risk-write),必须额外传递 `--yes` 确认**,否则返回 `confirmation_required` 并以非零码退出;`--dry-run` 预览除外
|
|
161
170
|
- 本命令仅支持通过表单分享链接(share_token)提交,不支持通过 base_token + table_id + view_id 方式提交
|
|
162
171
|
- **当 `--json` 包含 `attachments` 时,必须额外提供 `--base-token`**,因为附件上传到 Base Drive Media 需要指定目标 Base
|
|
163
172
|
- 附件字段只需在 `--json.attachments` 中提供本地路径即可,CLI 自动完成校验、并行上传、Token 获取和合并写入
|
|
@@ -13,7 +13,7 @@ p, h1-h9, ul, ol, li, table, thead, tbody, tr, th, td, blockquote, pre, code, hr
|
|
|
13
13
|
## 容器标签
|
|
14
14
|
|标签|说明|关键属性|
|
|
15
15
|
|-|-|-|
|
|
16
|
-
| `<callout>` |
|
|
16
|
+
| `<callout>` | 高亮框,子块仅支持文本块(如 `<p>`)、标题、列表、待办、引用;禁止裸文本及 `<table>`、`<img>`、`<pre>`、`<hr>`、`<grid>`、`<whiteboard>`、`<sheet>` 等其他块级标签或资源块 | `emoji`(默认 bulb), `background-color`, `border-color`, `text-color` |
|
|
17
17
|
| `<grid>` + `<column>` | 分栏布局,各列 width-ratio 之和为 1 | `width-ratio` |
|
|
18
18
|
| `<whiteboard>` | 嵌入画板 | `type`: `blank` \| `mermaid` \| `plantuml` \| `svg` |
|
|
19
19
|
| `<pre>` | (代码块,内含 `code`)| `lang`, `caption` |
|
|
@@ -96,6 +96,7 @@ lark-cli drive +search --query 方案 --page-token '<PAGE_TOKEN>'
|
|
|
96
96
|
- "某项目发布会重点" → 先搜项目名 + "发布会" + "重点/功能/一览",再按标题和摘要判断是否需要只搜标题或扩大到正文。
|
|
97
97
|
|
|
98
98
|
每轮扩展都要保留非污染、可解释的 evidence(URL/token/标题/摘要);不能因为某个扩展词搜到高相似标题就跳过证据核验。
|
|
99
|
+
扩展 query 时,优先保留用户已经指定的空间、文件夹、群聊、人员、时间和类型等 filter;确需放宽检索范围时,先向用户说明原因并征得确认。
|
|
99
100
|
|
|
100
101
|
## 参数
|
|
101
102
|
|
|
@@ -29,7 +29,7 @@ Card 2.0 组件按**容器 / 展示 / 交互**三类,均通过 `tag` 字段声
|
|
|
29
29
|
"title": { "tag": "plain_text", "content": "卡片标题" },
|
|
30
30
|
"subtitle": { "tag": "plain_text", "content": "副标题:一句上下文(时间/来源/状态)" },
|
|
31
31
|
"template": "blue",
|
|
32
|
-
"icon": { "tag": "standard_icon", "token": "
|
|
32
|
+
"icon": { "tag": "standard_icon", "token": "lark-logo_colorful" },
|
|
33
33
|
"text_tag_list": [
|
|
34
34
|
{ "tag": "text_tag", "text": { "tag": "plain_text", "content": "状态标签" }, "color": "blue" }
|
|
35
35
|
]
|
|
@@ -105,12 +105,12 @@
|
|
|
105
105
|
"header": {
|
|
106
106
|
"title": { "tag": "plain_text", "content": "卡片标题" },
|
|
107
107
|
"template": "blue",
|
|
108
|
-
"icon": { "tag": "standard_icon", "token": "
|
|
108
|
+
"icon": { "tag": "standard_icon", "token": "calendar_colorful" }
|
|
109
109
|
}
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
- `token`
|
|
113
|
-
-
|
|
112
|
+
- `token` 必须从 `resource/icons.md` 的精确枚举中选择;禁止根据名称规律自行拼接 token。没有合适的 token 时省略 icon。
|
|
113
|
+
- 场景速查:日历 `calendar_colorful`、待办 `todo_colorful`、投票 `vote_colorful`、妙记 `file-lark-minutes_colorful`、多维表格 `wiki-bitable_colorful`、表单 `file-form_colorful`、社区 `larkcommunity_colorful`、招聘 `hirelogo_colorful`、飞书品牌 `lark-logo_colorful`、Meego `meego_colorful`、AI `myai_colorful`、aPaaS `apaas_colorful`、审批 `approval_colorful`、通用 AI `ai-common_colorful`。
|
|
114
114
|
|
|
115
115
|
### 1. 配色纪律(服务 P6 语义一致)
|
|
116
116
|
|
|
@@ -212,7 +212,7 @@ header 有三层能力,**尽量用满**(至少用 `title` + `icon`;`subtit
|
|
|
212
212
|
"title": { "tag": "plain_text", "content": "发版审批" },
|
|
213
213
|
"subtitle": { "tag": "plain_text", "content": "2026-06-25 · 后端服务" },
|
|
214
214
|
"template": "blue",
|
|
215
|
-
"icon": { "tag": "standard_icon", "token": "
|
|
215
|
+
"icon": { "tag": "standard_icon", "token": "approval_colorful" },
|
|
216
216
|
"text_tag_list": [
|
|
217
217
|
{ "tag": "text_tag", "text": { "tag": "plain_text", "content": "待审批" }, "color": "yellow" }
|
|
218
218
|
]
|
|
@@ -34,5 +34,19 @@
|
|
|
34
34
|
| 通知/铃铛 | `bell_outlined` | 定位 | `pin_outlined` |
|
|
35
35
|
| 附件 | `attachment_outlined` | 审批 | `approval_outlined` |
|
|
36
36
|
|
|
37
|
+
## 彩色图标(精确 token)
|
|
38
|
+
|
|
39
|
+
彩色图标必须从下表按**完整字符串**选择,禁止根据名称规律自行拼接。彩色 token 自带颜色,不要再推导其他后缀或变体。
|
|
40
|
+
|
|
41
|
+
| 含义 | token | 含义 | token |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| 日历 | `calendar_colorful` | 待办 | `todo_colorful` |
|
|
44
|
+
| 投票 | `vote_colorful` | 飞书妙记 | `file-lark-minutes_colorful` |
|
|
45
|
+
| 多维表格 | `wiki-bitable_colorful` | 表单 | `file-form_colorful` |
|
|
46
|
+
| 飞书社区 | `larkcommunity_colorful` | 招聘 | `hirelogo_colorful` |
|
|
47
|
+
| 飞书品牌 | `lark-logo_colorful` | Meego | `meego_colorful` |
|
|
48
|
+
| AI | `myai_colorful` | aPaaS | `apaas_colorful` |
|
|
49
|
+
| 审批 | `approval_colorful` | 通用 AI | `ai-common_colorful` |
|
|
50
|
+
|
|
37
51
|
> token 必须与官方完全一致,否则图标不渲染。上表为常用项,全量(数百个,分系统/商务/沟通/用户/媒体/文档等类目)以官方图标库为准:
|
|
38
52
|
> https://open.larkoffice.com/document/feishu-cards/enumerations-for-icons
|
|
@@ -101,9 +101,9 @@ metadata:
|
|
|
101
101
|
|
|
102
102
|
**CRITICAL — 新建演示文稿或大幅改写页面时,规划 `asset_need` MUST 遵循 [asset-planning.md](references/asset-planning.md):只做元数据规划,必须有 `fallback_if_missing`,不得要求真实搜索、下载或上传素材。**
|
|
103
103
|
|
|
104
|
-
**CRITICAL — 将完整 `<slide>` XML 提交给 `slides +create --slides`、`xml_presentation.slide create` 或 `slides +replace-pages` 之前,MUST 先把待提交 XML
|
|
104
|
+
**CRITICAL — 将完整 `<slide>` XML 提交给 `slides +create --slides`、`xml_presentation.slide create` 或 `slides +replace-pages` 之前,MUST 先把待提交 XML 保存到本地文件并运行唯一版式准出入口 [`scripts/xml_text_overlap_lint.py`](scripts/xml_text_overlap_lint.py);`summary.error_count` 必须为 0 才能调用接口,`summary.warning_count > 0` 时必须先做对应页面的截图复核。**
|
|
105
105
|
|
|
106
|
-
**CRITICAL — 创建或大幅改写后,MUST 按 [validation-checklist.md](references/validation-checklist.md) 做显式验证:回读全文 XML
|
|
106
|
+
**CRITICAL — 创建或大幅改写后,MUST 按 [validation-checklist.md](references/validation-checklist.md) 做显式验证:回读全文 XML、核对页数和关键元素,并使用 [`scripts/xml_text_overlap_lint.py`](scripts/xml_text_overlap_lint.py) 统一检查 XML、越界、重叠、空白页和内容稀疏风险。**
|
|
107
107
|
|
|
108
108
|
**CRITICAL — 创建前自检或失败排障时,MUST 按 [troubleshooting.md](references/troubleshooting.md) 检查 XML 转义、结构、shell 截断、图片 token、3350001 和布局风险。**
|
|
109
109
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
获取幻灯片页面截图并保存为本地图片文件。默认用于已存在 PPT 页面截图;传入 `--content` 时用于直接渲染单个 `<slide>` XML 片段预览。本 shortcut 会在 CLI 进程内解码并写入文件,stdout 只返回文件路径、大小、页面 ID 等元信息,避免把图片 Base64 输出给模型。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
截图失败则降级到 XML 读回、结构 lint等非截图检查路径。
|
|
8
8
|
|
|
9
9
|
## 命令
|
|
10
10
|
|
|
@@ -26,8 +26,8 @@ lark-cli slides +screenshot --as user \
|
|
|
26
26
|
| 参数 | 必需 | 说明 |
|
|
27
27
|
|------|------|------|
|
|
28
28
|
| `--presentation` | list 模式必需 | `xml_presentation_id`、`/slides/` URL,或解析后为 slides 的 `/wiki/` URL。传 `--content` 时不能使用 |
|
|
29
|
-
| `--slide-id` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面 short ID
|
|
30
|
-
| `--slide-number` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 |
|
|
29
|
+
| `--slide-id` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面 short ID;多页截图时重复传入,或用逗号分隔一次传多个(如 `--slide-id slide_1,slide_2`);一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
|
|
30
|
+
| `--slide-number` | list 模式至少提供 `--slide-id` / `--slide-number` 之一 | 页面页号;多页截图时重复传入,或用逗号分隔一次传多个(如 `--slide-number 1,2,3`);一次最多 10 页(`--slide-id` + `--slide-number` 合计小于等于 10) |
|
|
31
31
|
| `--content` | render 模式必需 | 要直接渲染的 `<slide>` XML 片段;支持直接传值、`@file`、`-` stdin。传入后不能同时传 `--slide-id` / `--slide-number` |
|
|
32
32
|
| `--output-dir` | 否 | 输出目录,默认 `.lark-slides/screenshots`;必须是当前目录内的相对路径 |
|
|
33
33
|
| `--output-name` | 否 | render 模式的输出文件名 stem;未指定时优先用返回的 `slide_id`,否则用 `rendered-slide`。若目标文件已存在,会自动追加递增后缀避免覆盖 |
|
|
@@ -44,7 +44,7 @@ lark-cli slides +screenshot --as user \
|
|
|
44
44
|
|
|
45
45
|
### 多页截图
|
|
46
46
|
|
|
47
|
-
一次不要超过 10
|
|
47
|
+
一次不要超过 10 页;如需更多页面,分批调用。可以重复传参,也可以用逗号分隔一次传多个:
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
50
|
lark-cli slides +screenshot --as user \
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
2. 用 `slides +xml-get` 回读,确认是否已有部分页面写入。
|
|
20
20
|
3. 检查失败页是否含未转义字符:`Q&A -> Q&A`,文本 `<` / `>` 写成 `<` / `>`,属性 URL `a=1&b=2 -> a=1&b=2`。
|
|
21
21
|
4. 检查标签闭合、属性引号、`<content>` 结构,以及 `<slide>` 直接子元素。
|
|
22
|
-
5. 页面空白、溢出、重叠或越界时,按 [validation-checklist.md](validation-checklist.md) 运行
|
|
22
|
+
5. 页面空白、溢出、重叠或越界时,按 [validation-checklist.md](validation-checklist.md) 运行 `xml_text_overlap_lint.py`;先修复所有 `error`,再对 `warning` 指向的页面和元素做截图复核。
|
|
23
23
|
6. 如果使用 `--slides '[...]'`,怀疑 shell 截断时直接切到两步创建:先 `slides +create`,再用 `xml_presentation.slide.create` 逐页添加。
|
|
24
24
|
7. 局部问题用 `+replace-slide` 块级修正;整页结构要改时再用 `slide.delete` 旧页 + `slide.create` 新页。
|
|
25
25
|
|
|
@@ -25,19 +25,32 @@ lark-cli slides +xml-get --as user \
|
|
|
25
25
|
--json
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
## Automated XML
|
|
28
|
+
## Automated XML Layout Lint
|
|
29
29
|
|
|
30
|
-
`slides +xml-get` 保存 XML
|
|
30
|
+
`slides +xml-get` 保存 XML 后,只运行统一版式准出入口。先取得当前已加载 `lark-slides/SKILL.md` 的父目录,记为 `<lark-slides-skill-dir>`;不要猜测全局安装路径。
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
python3
|
|
33
|
+
python3 "<lark-slides-skill-dir>/scripts/xml_text_overlap_lint.py" --input <presentation.xml>
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
它一次检查 XML/SXSD 合法性、元素越界、文本重叠、空白页、文本高度风险、整页内容稀疏和大卡片内容覆盖率。大卡片自身 `<content>` 的估算文本面积与卡片内平级元素一起参与覆盖率并集计算。
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
38
|
+
准出规则:
|
|
39
|
+
|
|
40
|
+
- `summary.error_count > 0` 或 `summary.release_ready == false`:阻断创建、替换或交付,必须先修复。
|
|
41
|
+
- `summary.warning_count > 0`:静态检查不直接阻断,但 `summary.screenshot_review_required == true`,必须复核对应页面截图。
|
|
42
|
+
- `slides[].status` 为 `blocked`、`needs_screenshot_review` 或 `passed`,可直接决定逐页后续动作。
|
|
43
|
+
- CLI 在存在 `error` 时退出码为 1;只有 `warning` 时仍输出 JSON 并退出 0,供截图复核链路继续执行。
|
|
44
|
+
|
|
45
|
+
每条 `error` / `warning` 都包含:
|
|
46
|
+
|
|
47
|
+
- `element_ids`:相关 XML 元素 ID;
|
|
48
|
+
- `rule`:规则 ID、名称、阈值和比较关系;
|
|
49
|
+
- `measurement`:越界量、交叠面积、覆盖率等实测值;
|
|
50
|
+
- `related_objects`:相关对象的类型与坐标框;
|
|
51
|
+
- `target`、`message`、`hint`:页码、语义说明和处理建议。
|
|
52
|
+
|
|
53
|
+
当 `sparse_container_content.measurement.content_coverage_ratio < rule.threshold` 时,需要结合同页截图判断留白是否有意设计;不要仅凭 warning 自动扩充内容。
|
|
41
54
|
|
|
42
55
|
常见 code 的处理方向:
|
|
43
56
|
|
|
@@ -51,6 +64,10 @@ python3 skills/lark-slides/scripts/xml_text_overlap_lint.py --input <presentatio
|
|
|
51
64
|
| `icon_missing_fill_color` | 视觉规范要求 `<icon>` 设置 `<fill><fillColor color="..."/></fill>`,避免图标不可见 | 给 `<icon>` 添加显式非透明填充色,例如 `rgba(37, 99, 235, 1)` |
|
|
52
65
|
| `icon_transparent_fill_color` | `<icon>` 的 `fillColor` 是透明色,不满足视觉可见性要求 | 改成与背景有足够对比的非透明颜色 |
|
|
53
66
|
| `bbox_overlap` | 文本元素的估算绘制区域明显重叠 | 拉开文本坐标、缩小文本框/字号,或改成明确的分栏/分组结构 |
|
|
67
|
+
| `*_out_of_canvas` | 元素边界超出页面画布 | 根据 `measurement.overflow` 移回画布或缩小尺寸 |
|
|
68
|
+
| `blank_slide` | 页面没有画布内可见内容 | 补充主体内容;仅有空背景或空形状不能准出 |
|
|
69
|
+
| `sparse_container_content` | 大卡片内容覆盖率低于阈值 | 按元素 ID 定位卡片,结合截图判断是否补充或放大内容 |
|
|
70
|
+
| `sparse_slide_content` | 全页有效内容覆盖率偏低 | 复核截图,确认是否为有意留白 |
|
|
54
71
|
|
|
55
72
|
## Screenshot QA
|
|
56
73
|
|
|
@@ -188,6 +188,13 @@ XSD 中的 `title`、`headline`、`sub-headline`、`body`、`caption` 主要出
|
|
|
188
188
|
- `<shadow>`
|
|
189
189
|
- `<content>`
|
|
190
190
|
|
|
191
|
+
`type` 常用取值:`text`(文本框)、`rect`、`round-rect`(圆角矩形)、`ellipse`(椭圆/圆)、`triangle`、`diamond`、`parallelogram`、`trapezoid`、`custom`(配合 `path` 属性写 SVG 路径串)。箭头、星形、标注气泡、`chevron`、`flow-chart-*` 等更多形状见 XSD `ShapeType` 枚举。
|
|
192
|
+
|
|
193
|
+
其它可选属性:
|
|
194
|
+
|
|
195
|
+
- `presetHandlers`:控制点,用于圆角等。例如 `<shape type="rect" presetHandlers="60">` = 圆角半径 60px 的圆角矩形;多个控制点用逗号分隔。
|
|
196
|
+
- `path`:仅 `type="custom"` 时使用,SVG 路径串。
|
|
197
|
+
|
|
191
198
|
### line
|
|
192
199
|
|
|
193
200
|
```xml
|
|
@@ -198,6 +205,16 @@ XSD 中的 `title`、`headline`、`sub-headline`、`body`、`caption` 主要出
|
|
|
198
205
|
|
|
199
206
|
`line` 使用的是 `startX` / `startY` / `endX` / `endY`,不是 `x1` / `y1` / `x2` / `y2`。
|
|
200
207
|
|
|
208
|
+
### polyline
|
|
209
|
+
|
|
210
|
+
折线 / 曲线连接线,用外接矩形定位(`topLeftX` / `topLeftY` / `width` / `height`),不是端点坐标;`<border>` 必填(无 border 不可见)。`type` 默认 `bent-connector2`(可选 `bent-connector2-5` 折线 / `curved-connector2-5` 曲线)。
|
|
211
|
+
|
|
212
|
+
```xml
|
|
213
|
+
<polyline topLeftX="120" topLeftY="120" width="200" height="100">
|
|
214
|
+
<border color="rgb(43, 47, 54)" width="2"/>
|
|
215
|
+
</polyline>
|
|
216
|
+
```
|
|
217
|
+
|
|
201
218
|
### img
|
|
202
219
|
|
|
203
220
|
```xml
|
|
@@ -238,6 +255,7 @@ XSD 中的 `title`、`headline`、`sub-headline`、`body`、`caption` 主要出
|
|
|
238
255
|
- `<colgroup>` 直接子元素只有 `<col width="...">`,width 定义列宽,默认 110。
|
|
239
256
|
- `<tr height="...">` 直接子元素只有 `<td>`,height 定义行高,默认 37。
|
|
240
257
|
- `<td>` 直接子元素只有 `<fill>`(背景)、`<content>`(文字)和边框配置(一般不用),不能嵌套 `<shape>`、`<img>`、`<icon>`。
|
|
258
|
+
- 合并单元格:`<td>` 上用 `colspan`(跨列,默认 1)和 `rowspan`(跨行,默认 1);被合并覆盖的单元格不再写对应 `<td>`。
|
|
241
259
|
|
|
242
260
|
表头默认的白底白字视觉效果极差,必须设置背景和文字颜色,需在首行每个 `<td>` 上加 `<fill>`(配合 `bold` 与对比文字色)与正文行区分。
|
|
243
261
|
|