Skip to content

Commit febe231

Browse files
committed
docs(skills): 优化钉钉文档技能输出
1 parent 0f37e31 commit febe231

4 files changed

Lines changed: 26 additions & 17 deletions

File tree

‎ai/skills/dev/dingtalk-doc-playwright/SKILL.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,17 @@ description: 使用 Playwright 自动编辑钉钉文档,包括写入 Markdown/
1818
5. 文档是虚拟滚动,不能只用 `window.scrollTo`。内部滚动容器通常是 `#layout_body`。
1919
6. 完成后校验“已保存”、关键标题、占位文字和图片数量。
2020

21+
## 省 token 原则
22+
23+
- 默认不要跑 `snapshot --depth=8`,钉钉文档 DOM 很大。先用 `--raw run-code` 调脚本拿紧凑 JSON。
24+
- 脚本默认只返回状态、计数、少量坐标;需要正文片段时再设置 `DINGTALK_VERBOSE=1`。
25+
- 上传图片后 ref 会失效,不要反复 snapshot 找 ref;用占位文本 + 脚本重新定位。
26+
- 验证只扫占位和图片数,避免输出整段正文。
27+
2128
## 常用命令
2229

2330
```powershell
24-
playwright-cli -s=docs snapshot --depth=8
25-
playwright-cli -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\inspect-doc.js"
31+
playwright-cli --raw -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\inspect-doc.js"
2632
playwright-cli -s=docs drop "<ref-or-selector>" --path="C:\path\to\screenshot.png"
2733
```
2834

@@ -43,15 +49,15 @@ playwright-cli -s=docs drop "<ref-or-selector>" --path="C:\path\to\screenshot.pn
4349
然后用占位文本定位并拖放图片:
4450

4551
```powershell
46-
playwright-cli -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\drop-image-after-placeholder.js"
52+
playwright-cli --raw -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\drop-image-after-placeholder.js"
4753
```
4854

4955
脚本默认通过环境变量传参:
5056

5157
```powershell
5258
$env:DINGTALK_PLACEHOLDER='截图:设置页面'
5359
$env:DINGTALK_IMAGE_PATH='C:\path\to\settings.png'
54-
playwright-cli -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\drop-image-after-placeholder.js"
60+
playwright-cli --raw -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\dingtalk-doc-playwright\scripts\drop-image-after-placeholder.js"
5561
```
5662

5763
## 修正错图
@@ -69,4 +75,3 @@ playwright-cli -s=docs run-code --filename="$env:USERPROFILE\.agents\skills\ding
6975
- 不要假设滚动是 `window`;钉钉文档正文滚动多半在 `#layout_body`。
7076
- 上传图片后 DOM ref 会失效,需要重新 snapshot 或重新按文本定位。
7177
- 校验图片去重时不要截断 URL 前缀,钉钉资源 URL 前缀高度相似。
72-

‎ai/skills/dev/dingtalk-doc-playwright/scripts/drop-image-after-placeholder.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,3 @@ async (page) => {
4848
}
4949
}, placeholder)
5050
}
51-

‎ai/skills/dev/dingtalk-doc-playwright/scripts/find-placeholder.js‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ async (page) => {
55
const frame = page.frames().find((item) => item.url().includes('/note/edit'))
66
if (!frame) throw new Error('未找到 /note/edit iframe')
77

8-
return await frame.evaluate(async (target) => {
8+
return await frame.evaluate(async ({ target, verbose }) => {
99
const scroller = document.querySelector('#layout_body')
1010
if (!scroller) throw new Error('未找到 #layout_body 滚动容器')
1111

@@ -38,11 +38,11 @@ async (page) => {
3838
}
3939
}
4040

41-
return {
41+
const result = {
4242
ok: false,
4343
scrollTop: scroller.scrollTop,
44-
textTail: document.body.innerText.slice(-1000),
4544
}
46-
}, placeholder)
45+
if (verbose) result.textTail = document.body.innerText.slice(-500)
46+
return result
47+
}, { target: placeholder, verbose: process.env.DINGTALK_VERBOSE === '1' })
4748
}
48-

‎ai/skills/dev/dingtalk-doc-playwright/scripts/inspect-doc.js‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ async (page) => {
22
const frame = page.frames().find((item) => item.url().includes('/note/edit'))
33
if (!frame) return { ok: false, error: '未找到 /note/edit iframe' }
44

5-
return await frame.evaluate(() => {
5+
return await frame.evaluate((verbose) => {
66
const text = document.body.innerText
77
const scroller = document.querySelector('#layout_body')
88
const largeImages = [...document.querySelectorAll('img')]
@@ -25,7 +25,7 @@ async (page) => {
2525
item.src.includes('/core/api/resources/img/'),
2626
)
2727

28-
return {
28+
const result = {
2929
ok: true,
3030
saved: text.includes('已保存'),
3131
title: document.title,
@@ -38,9 +38,14 @@ async (page) => {
3838
}
3939
: null,
4040
visibleLargeImages: largeImages.length,
41-
textSample: text.slice(0, 1500),
42-
textTail: text.slice(-1500),
4341
}
44-
})
42+
if (verbose) {
43+
return {
44+
...result,
45+
textSample: text.slice(0, 500),
46+
textTail: text.slice(-500),
47+
}
48+
}
49+
return result
50+
}, process.env.DINGTALK_VERBOSE === '1')
4551
}
46-

0 commit comments

Comments
 (0)