@qcplay/cli 1.0.18 → 1.0.19
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/bin/qcplay.js +400 -56
- package/lib/platform-publish.js +977 -79
- package/lib/rich-article-upload.js +116 -0
- package/lib/wechat-article.js +104 -23
- package/lib/wechat-data.js +155 -0
- package/package.json +2 -1
- package/templates/skills/qcplay-publish-article/SKILL.md +41 -12
- package/templates/skills/qcplay-wechat-data/SKILL.md +101 -0
|
@@ -18,6 +18,18 @@ metadata:
|
|
|
18
18
|
|
|
19
19
|
# qcplay www-article-list.store
|
|
20
20
|
|
|
21
|
+
## 最高优先级:准备发布到指定平台
|
|
22
|
+
|
|
23
|
+
用户首次说“发布到 <项目> <平台>”“帮我把这篇文章发布到 <平台>”“准备发布到 <项目> <平台>”“把这篇文章准备发布到 <平台>”或“准备投递到 <平台>”时,只要项目和浏览器平台已经明确,都表示**打开真实编辑页以等待 AI 对话授权**,不是正式发布,也不是“只生成本地待发布稿”。“发布到”仅说明目标平台,不是对最终提交的授权。必须先完成文章导入和 `rule.docx` 的处理,再执行默认发布命令,例如:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
qcplay publish article.md --project 提灯与地下城 --region 国内 --platform B站 --rules-file rule.docx
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
该命令不得附加 `--dry-run`、`--review-draft`、`--direct`、`--draft-only` 或 `--publish-draft`。它会按用户指定顺序只打开并准备第一个浏览器平台:上传正文图片、填入标题正文及必要设置,但不点击保存或发布,然后立即返回 `qcplay.publish-action-required` 事件;其他平台必须保持未执行,等当前平台在 AI 对话获得明确动作后再逐个平台开始。预览完成后必须保留浏览器页面;事件的 `imagesPending` 仅表示因平台限制而尚未处理的图片数。事件中的 `pages` 必须包含该平台的非空编辑页 URL,`contentPrepared: true` 时可说明“内容和图片已填入”。小红书常在上传首图后才显示标题和正文,因而仍是例外:当事件含 `requiresMediaBeforeText: true` 与 `contentPrepared: false` 时,只能说明“编辑页已打开,图片和文字会在授权后处理”,但仍必须在当前 AI 对话给出“发布 / 保存草稿箱 / 取消”选择。小红书没有可安全调用的原生草稿保存时,选择“保存草稿箱”只允许填写内容后停留在编辑页,绝不能点击“发布”。只有用户在收到该三项选择后,在后续一条 AI 对话中明确选择“发布 <平台>”时,才能执行 `--direct --confirmed`;选择“保存草稿箱 <平台>”时才可执行 `--draft-only`。`--confirmed` 是 CLI 的提交保护标记,绝不能在首次“发布到”请求中添加。即使显式添加 `--review-draft`,也必须返回当前 AI 对话的授权事件,不能等待终端输入、点击保存或关闭编辑页。用户明确选择发布或保存草稿后,重新进入正式流程并按原顺序处理提交。
|
|
30
|
+
|
|
31
|
+
不得把 `*-prepared.md`、导入稿或规则校验成功当作“准备发布完成”,也不得在此意图下直接回复选择项。除非用户明确要求“仅生成本地稿”“只校验”或“不要打开网页”,否则这些本地文件只能是发布前的中间产物,不能替代打开网页的步骤。
|
|
32
|
+
|
|
21
33
|
## 多平台发布入口
|
|
22
34
|
|
|
23
35
|
当用户要求把同一篇文章分发到官网之外的平台时,使用:
|
|
@@ -32,13 +44,13 @@ qcplay publish article.md --project 最强蜗牛
|
|
|
32
44
|
qcplay publish article.md --project 最强蜗牛 --region 国内 --platform TapTap --platform B站
|
|
33
45
|
```
|
|
34
46
|
|
|
35
|
-
|
|
47
|
+
用户没有指定平台时,不要替用户猜测;先在当前 AI 对话中列出当前项目可用平台并等待用户选择,再把明确选择传给 `publish` 命令。不要依赖终端交互选择。只查看清单使用:
|
|
36
48
|
|
|
37
49
|
```bash
|
|
38
50
|
qcplay publish --project 最强蜗牛 --list-platforms
|
|
39
51
|
```
|
|
40
52
|
|
|
41
|
-
平台配置由 CLI 从飞书只读获取,不得把账号、密码或 webhook 写进文章、项目文件、命令参数或回复。TapTap、好游快爆、B站和微博的账号密码配置必须在加载后丢弃;未登录时必须由用户在浏览器中自行填写登录信息或扫码,CLI 不得向登录页写入账号密码或点击登录提交。浏览器出现扫码、验证码、二次验证或反爬校验时必须暂停并请用户完成,不得绕过。官网单独发布仍使用下文的 `www-article-list.store`
|
|
53
|
+
平台配置由 CLI 从飞书只读获取,不得把账号、密码或 webhook 写进文章、项目文件、命令参数或回复。TapTap、好游快爆、B站和微博的账号密码配置必须在加载后丢弃;未登录时必须由用户在浏览器中自行填写登录信息或扫码,CLI 不得向登录页写入账号密码或点击登录提交。浏览器出现扫码、验证码、二次验证或反爬校验时必须暂停并请用户完成,不得绕过。官网单独发布仍使用下文的 `www-article-list.store` 流程,草稿预览和上线确认统一按本 Skill 的“AI 对话授权与反馈”执行。
|
|
42
54
|
|
|
43
55
|
平台内容用户规则存放在 `~/.qcplay/platform-rules.json`。`install/update` 仅在文件不存在时创建,已有文件不得覆盖;单次发布或导入可用 `--rules-file <json>`。使用 `qcplay rules init|validate|list` 创建、校验和查看规则。规则可以按来源、项目、区域、平台和 `phase` 匹配,使用有限动作删除标题区间/文案/图片、替换文案/图片或清理图片说明,不得执行 JavaScript。飞书“特殊要求”继续负责动态密令、项目排版和平台配置;用户规则在内置平台处理后应用。
|
|
44
56
|
|
|
@@ -46,7 +58,17 @@ qcplay publish --project 最强蜗牛 --list-platforms
|
|
|
46
58
|
|
|
47
59
|
公众号文章导入必须保留正文和安全排版,并应用 `phase: "import"` 的用户删除规则。`remove_image` 可按 `src`、`alt`、`title`、`caption`、`nearby_text` 或图片 `sha256` 匹配;前五种在下载前删除,指纹规则在下载后、上传前删除。图片动作必须先于章节和文案删除,避免相邻文案先被移除而导致图片无法匹配。默认模板包含删除“回复有奖/评论抽奖”标题区间的规则和一条禁用的导入删除示例。替换和图片说明清理动作在具体平台发布阶段执行。其他引导按当前“项目 + 区域 + 平台”行的飞书“特殊要求”处理。
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
默认 `qcplay publish` 不得进入正式发布或填入文章;它会先打开每个浏览器平台的真实编辑器页面,再返回 `qcplay.publish-action-required` 事件。Agent 收到该事件后,必须立即在当前 AI 对话提供“发布”“保存草稿箱”“取消发布”三个选项,不能用终端提问。用户明确选择发布后才添加 `--direct`;选择保存草稿箱后才添加 `--draft-only`。用户说“保存到草稿箱”“发布到草稿箱”时,直接使用 `--draft-only`,不得调用默认发布命令。`--draft-only` 填完内容后只保存原生草稿或停留在编辑页,且草稿页面保持打开。草稿成功后,CLI 会立即返回 `qcplay.draft-approval-required` 事件;Agent 必须立刻在 AI 对话提供“发布”“取消”两个选项,不能等待用户在网页中操作,也不能等待终端输入。用户明确要求先查看官网外平台的待发布稿时,增加 `--review-draft`(或 `--review`):CLI 填完标题、富文本、图片、封面和发布设置后,在最终提交前保持浏览器打开;必须回到当前 AI 对话询问用户“发布”“保存草稿”或“取消”,并等待明确回复,禁止要求用户在 CMD/终端输入确认或按 Enter。用户明确授权跳过二次确认时使用 `--direct`(或 `--no-review`),该参数仅跳过发布前预览确认,不跳过登录、验证码或安全验证。该参数不改变官网流程。TapTap 已保存草稿且用户明确要求发布时,使用 `--publish-draft`,只恢复标题匹配的已有草稿并提交,禁止再次覆盖正文、图片或封面。好游快爆没有原生草稿箱,只能保持已填好的编辑页供用户预览。
|
|
62
|
+
|
|
63
|
+
## AI 对话授权与反馈
|
|
64
|
+
|
|
65
|
+
发布或保存草稿前,只要流程需要用户确认,必须在当前 AI 对话中询问并等待明确回复,不得唤起终端或要求用户在 CMD/终端输入“发布”“可以发布”或按 Enter。询问时说明目标平台、文章标题或文章 ID(不得包含 token),并提供以下动作:
|
|
66
|
+
|
|
67
|
+
- **发布/上线**:执行正式发布;官网文章才允许继续执行 `article update [id]` 将 `status` 更新为 `1`。
|
|
68
|
+
- **保存草稿**:仅执行目标平台原生的草稿保存;官网首次保存已经是 `status: "0"`,保持草稿时不要执行 `update`。TapTap 草稿保存成功后保持编辑页打开;用户后续明确选择“发布”时,使用 `--publish-draft` 提交该草稿,不重新填入文章。没有原生草稿箱的平台只能保持编辑页打开并停止提交。
|
|
69
|
+
- **取消**:停止当前平台或整个流程,不点击发布、不保存草稿。
|
|
70
|
+
|
|
71
|
+
只把明确指向某一动作和目标平台的回复视为授权;“好的”“继续”等不明确回复必须追问。用户最初说“准备/查看/处理文章”不等于发布授权;多个平台应逐个平台获得授权,未授权的平台不得提交。登录、扫码、验证码和二次验证仍由用户在浏览器页面完成,不能在 AI 对话中索取或填写账号、密码或 token。
|
|
50
72
|
|
|
51
73
|
多个浏览器平台必须逐个处理:当前平台登录或验证未完成时不得进入下一个平台;当前浏览器平台失败时,后续平台保持未执行。已有有效持久登录态时必须等待编辑器加载并直接填充内容,不得重复提示登录。好游快爆只允许使用飞书配置中当前游戏对应的 `bbs.3839.com` 发布链接,必须保留有效项目 `fid`(阿瑞斯病毒2 为 `20313`、新仙剑为 `24008`、最强蜗牛为 `12201`),缺失或为 `0` 时停止;未登录时先打开官网首页头像登录入口,完成官方 iframe 登录后最多重试 3 次返回原游戏发布页,并校验登录后的 `m/c/a/fid/type`,禁止落到首页或其他游戏发布页。任何图片或视频都必须确认上传或处理完成后再提交;失败或超时必须停止当前平台。
|
|
52
74
|
|
|
@@ -180,7 +202,7 @@ qcplay article import "https://tenant.feishu.cn/wiki/..." article.md
|
|
|
180
202
|
|
|
181
203
|
该命令只生成本地官网文章草稿,不会提交到官网。确认草稿正文和 Front Matter 后,再执行保存命令。
|
|
182
204
|
|
|
183
|
-
保存命令始终以 `status: "0"` 创建未上线文章,并输出文章 ID
|
|
205
|
+
保存命令始终以 `status: "0"` 创建未上线文章,并输出文章 ID 和可点击预览地址。保存成功后必须打开该预览网页,只让用户本人检查文章内容和排版,然后在当前 AI 对话中询问“发布/上线、保存草稿或取消”。AI 不得自动访问、抓取、截图、分析、比较或判断预览内容;只有收到明确的对话授权后,才能执行对应动作:
|
|
184
206
|
|
|
185
207
|
```bash
|
|
186
208
|
qcplay article update [id]
|
|
@@ -262,7 +284,7 @@ QCPlay CLI 调用认证后端保存文章
|
|
|
262
284
|
```yaml
|
|
263
285
|
status: "0"
|
|
264
286
|
```
|
|
265
|
-
CLI 打开预览网页后,由用户本人检查。AI
|
|
287
|
+
CLI 打开预览网页后,由用户本人检查。AI 不检查预览内容,也不代替用户判断。用户在 AI 对话中明确选择“发布/上线”后,才使用 `article update [id]` 将状态更新为 `1`;选择“保存草稿”或“取消”时不得更新。不得通过首次保存直接上线。
|
|
266
288
|
|
|
267
289
|
8. **不得伪造发布结果**
|
|
268
290
|
如果接口返回失败,必须原样提示失败原因,不得编造文章 URL 或成功状态。
|
|
@@ -489,7 +511,9 @@ qcplay www-article-list.store article.md
|
|
|
489
511
|
预览地址: https://snail.qingcigame.com/official/news-details.html?id=123
|
|
490
512
|
```
|
|
491
513
|
|
|
492
|
-
|
|
514
|
+
提灯与地下城文章的预览地址必须包含分类参数,例如:`https://tideng.qingcigame.com/official/news.html?id=123&cate_id=40`。
|
|
515
|
+
|
|
516
|
+
CLI 必须自动打开预览地址,然后停止流程并让用户本人检查。AI 不读取或分析预览页面,不得自行确认上线;应在 AI 对话中等待用户明确选择“发布/上线、保存草稿或取消”。只有选择“发布/上线”后才能执行:
|
|
493
517
|
|
|
494
518
|
```bash
|
|
495
519
|
qcplay article update 123
|
|
@@ -578,6 +602,8 @@ qcplay www-article-list.store article.md
|
|
|
578
602
|
|
|
579
603
|
### 确认上线
|
|
580
604
|
|
|
605
|
+
只有用户在当前 AI 对话中明确选择“发布/上线”后,才能执行以下命令;选择“保存草稿”或“取消”时不得执行:
|
|
606
|
+
|
|
581
607
|
```bash
|
|
582
608
|
qcplay article update [id]
|
|
583
609
|
```
|
|
@@ -773,7 +799,7 @@ Front Matter.index_move_img -> index_move_img
|
|
|
773
799
|
status: "0"
|
|
774
800
|
```
|
|
775
801
|
|
|
776
|
-
|
|
802
|
+
用户在 AI 对话中明确确认预览排版无误并选择“发布/上线”后,不修改 Front Matter,执行 `qcplay article update [id]` 上线;选择“保存草稿”或“取消”时保持 `status: "0"`。
|
|
777
803
|
|
|
778
804
|
---
|
|
779
805
|
|
|
@@ -1150,7 +1176,9 @@ CLI 必须兼容:
|
|
|
1150
1176
|
已打开文章预览页面,请由用户检查文章内容和排版。
|
|
1151
1177
|
```
|
|
1152
1178
|
|
|
1153
|
-
|
|
1179
|
+
输出后必须在当前 AI 对话中等待用户明确答复。不能因为接口成功、页面可以打开或 AI 自行检查通过而自动上线,也不能要求用户通过终端确认。
|
|
1180
|
+
|
|
1181
|
+
当文章属于提灯与地下城时,输出的预览/文章地址必须使用 `https://tideng.qingcigame.com/official/news.html?id=<id>&cate_id=<cate_id>` 格式。
|
|
1154
1182
|
|
|
1155
1183
|
确认上线成功后输出:
|
|
1156
1184
|
|
|
@@ -1261,11 +1289,11 @@ release_time 格式错误,请使用 YYYY-MM-DD,例如 2026-07-09
|
|
|
1261
1289
|
6. Markdown 正文作为 `article_content`;
|
|
1262
1290
|
7. Node CLI 负责解析、校验、读取 auth 并调用后端接口;
|
|
1263
1291
|
8. Go 后端负责权限校验、强制草稿状态和数据库更新;
|
|
1264
|
-
9.
|
|
1292
|
+
9. 保存、上线或删除的成功和失败都在当前 AI 对话反馈;不得把授权确认转移到终端;
|
|
1265
1293
|
10. 不得打印完整 token;
|
|
1266
|
-
11.
|
|
1294
|
+
11. 未得到当前 AI 对话中针对目标平台和动作的明确授权,不得执行上线或提交草稿;
|
|
1267
1295
|
12. 删除只能更新 `status=2`,不得物理删除数据;
|
|
1268
|
-
13.
|
|
1296
|
+
13. 保存成功后只负责打开预览网页并在 AI 对话中询问发布/保存草稿/取消,由用户本人检查和授权;
|
|
1269
1297
|
14. AI 不得访问、抓取、截图、分析、比较或判断预览内容。
|
|
1270
1298
|
|
|
1271
1299
|
---
|
|
@@ -1286,6 +1314,7 @@ release_time 格式错误,请使用 YYYY-MM-DD,例如 2026-07-09
|
|
|
1286
1314
|
10. 发布失败时伪造成功结果;
|
|
1287
1315
|
11. AI 自动检查预览页面并代替用户决定上线;
|
|
1288
1316
|
12. 未收到用户明确确认就把文章更新为 `status=1`。
|
|
1317
|
+
13. 要求用户唤起终端、在 CMD 输入发布确认或按 Enter 作为授权。
|
|
1289
1318
|
|
|
1290
1319
|
---
|
|
1291
1320
|
|
|
@@ -1342,7 +1371,7 @@ Node 解析文章并调用后端。
|
|
|
1342
1371
|
Go 后端负责权限和数据库更新。
|
|
1343
1372
|
默认参数程序内部补齐。
|
|
1344
1373
|
首次保存固定 status=0。
|
|
1345
|
-
|
|
1374
|
+
收到当前 AI 对话中明确的“发布/上线”授权后更新 status=1;“保存草稿”或“取消”不更新。
|
|
1346
1375
|
删除更新 status=2。
|
|
1347
1376
|
发布失败不得伪造成成功。
|
|
1348
1377
|
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qcplay-wechat-data
|
|
3
|
+
description: 拉取微信公众号文章统计数据并按游戏、月份整理为 Markdown 表格或 JSON;当用户需要查询公众号文章阅读、分享、点赞、留言等汇总数据时使用。不要用于微信公众号正文导入、文章发布或平台分发。
|
|
4
|
+
metadata:
|
|
5
|
+
cliHelp: "qcplay wechat article --help"
|
|
6
|
+
backendEndpoint: "/api/wechat/article"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# QCPlay 微信公众号数据
|
|
10
|
+
|
|
11
|
+
这个 Skill 用于调用 QCPlay 后端代理,读取微信公众号文章统计接口返回的 `day_total`,并生成按游戏和月份分组的报表。
|
|
12
|
+
|
|
13
|
+
## 命令
|
|
14
|
+
|
|
15
|
+
按自然月查询:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
qcplay wechat article --game-id 39 --month 2026-08 --output wechat-2026-08.md
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
查询任意日期范围:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
qcplay wechat article \
|
|
25
|
+
--game-id 39 --game-id 41 \
|
|
26
|
+
--begin-date 2026-01-01 --end-date 2026-08-24 \
|
|
27
|
+
--output wechat-report.md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
需要机器可读结果时使用:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
qcplay wechat article --game-id 39 --month 2026-08 --format json --output wechat-2026-08.json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
不指定 `--output` 时直接输出到终端。输出文件已经存在时不得覆盖。
|
|
37
|
+
|
|
38
|
+
## 请求边界
|
|
39
|
+
|
|
40
|
+
CLI 只能请求 QCPlay 后端的:
|
|
41
|
+
|
|
42
|
+
```http
|
|
43
|
+
GET /api/wechat/article?game_id=<id>&begin_date=<date>&end_date=<date>
|
|
44
|
+
Authorization: Bearer <当前登录凭证>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
后端负责调用上游微信公众号数据服务、鉴权、参数校验和上游错误处理。CLI 不得直接请求外部微信公众号数据接口,也不得把 Access Token、签名或其他凭证写入命令参数、报表或回复。
|
|
48
|
+
|
|
49
|
+
执行前需要有效的 `qcplay auth` 登录状态。用户未登录时停止并提示先登录。
|
|
50
|
+
|
|
51
|
+
## 游戏 ID
|
|
52
|
+
|
|
53
|
+
支持以下 `game_id`:
|
|
54
|
+
|
|
55
|
+
| ID | 游戏 |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| 25 | 使魔计划 |
|
|
58
|
+
| 39 | 最强蜗牛 |
|
|
59
|
+
| 33 | 提灯与地下城 |
|
|
60
|
+
| 69 | 新仙剑奇侠传之挥剑问情 |
|
|
61
|
+
| 35 | 时光旅行社 |
|
|
62
|
+
| 74 | 魔卡少女樱回忆钥匙 |
|
|
63
|
+
| 50 | 迷途之光手游 |
|
|
64
|
+
| 47 | 骑士冲呀 |
|
|
65
|
+
| 41 | 阿瑞斯病毒 |
|
|
66
|
+
|
|
67
|
+
用户没有明确指定游戏时,不要猜测;可以让用户选择,或在明确要求全部游戏时使用 `--all-games`。
|
|
68
|
+
|
|
69
|
+
## 日期规则
|
|
70
|
+
|
|
71
|
+
- 日期格式必须是 `YYYY-MM-DD`。
|
|
72
|
+
- `end_date` 必须早于今天,不能查询今天或未来。
|
|
73
|
+
- `end_date` 不能早于 `begin_date`。
|
|
74
|
+
- 使用 `--month YYYY-MM` 时,整月查询;当前月自动截止到昨天。
|
|
75
|
+
- 日期范围超过上游单次限制时,CLI 会按月份和最多 30 个自然日自动拆分请求。
|
|
76
|
+
- 任一分段请求失败时停止整个报表,不生成不完整结果。
|
|
77
|
+
|
|
78
|
+
## 数据处理
|
|
79
|
+
|
|
80
|
+
只读取响应中的 `data.day_total`,不使用 `data.total` 代替文章明细。
|
|
81
|
+
|
|
82
|
+
- 按 `ref_date` 的 `YYYY-MM` 分组生成月份表格。
|
|
83
|
+
- 每篇文章按 `detail_list` 展开统计日明细。
|
|
84
|
+
- `detail_list` 是截至对应 `stat_date` 的累计数据,不是每日增量;分析单篇文章时不得把多个统计日直接相加。
|
|
85
|
+
- 保留文章的 `ref_date`、`msgid`、`title`、`content_url` 和明细指标。
|
|
86
|
+
- Markdown 输出只展示常用指标;需要完整字段、嵌套阅读来源或跳出位置时使用 `--format json`。
|
|
87
|
+
- 不要把统计数据当作文章正文,也不要自动创建、保存或发布官网文章。
|
|
88
|
+
|
|
89
|
+
## 错误处理
|
|
90
|
+
|
|
91
|
+
保留后端或上游返回的具体错误信息。常见错误包括:
|
|
92
|
+
|
|
93
|
+
- 未登录或认证失效;
|
|
94
|
+
- `game_id` 不支持;
|
|
95
|
+
- 日期格式错误;
|
|
96
|
+
- 结束日期为今天或未来;
|
|
97
|
+
- 日期范围超过限制;
|
|
98
|
+
- 上游接口返回业务 `code != 200`;
|
|
99
|
+
- 后端无法连接上游接口。
|
|
100
|
+
|
|
101
|
+
报表生成成功只表示数据已拉取并写入本地输出,不表示微信公众号文章已发布,也不表示官网文章已上线。
|