@geoly-ai/social-hub-cli 0.3.42 → 0.3.44
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/CHANGELOG.md +23 -0
- package/dist/cmd-manifest.json +6 -2
- package/dist/cmd-manifest.test.js +10 -0
- package/dist/cmd-manifest.test.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +102 -8
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/skills/integrity.json +18 -17
- package/skills/manifest.json +2 -2
- package/skills/reddit-answers-research/SKILL.md +1 -1
- package/skills/reddit-matrix.lock.json +5 -5
- package/skills/reddit-phase-brief/references/phase4-brief-workflow.md +2 -2
- package/skills/reddit-phase-research/references/phase01-research.md +2 -2
- package/skills/reddit-strategy-shared/references/version-manifest.md +2 -2
- package/skills/reddit-voc-volume/SKILL.md +35 -28
- package/skills/reddit-voc-volume/matrix-contract.md +1 -1
- package/skills/reddit-voc-volume/references/arctic-shift.md +8 -7
- package/skills/reddit-voc-volume/references/browser-fallback.md +9 -4
- package/skills/reddit-voc-volume/requirements.txt +3 -1
- package/skills/reddit-voc-volume/scripts/reddit_voc_volume.py +3 -20
- package/skills/reddit-voc-volume/tests/test_links_fallback.py +87 -0
- package/skills/social-hub-content-classification/SKILL.md +4 -0
- package/skills/social-hub-intelligence/SKILL.md +103 -5
- package/skills/social-hub-openclaw-context/SKILL.md +21 -16
- package/skills/social-hub-scrape/SKILL.md +18 -16
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,29 @@ All notable changes to `@geoly-ai/social-hub-cli` are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Release workflow: `pnpm release:cli` → `pnpm publish:cli`.
|
|
6
6
|
|
|
7
|
+
## [0.3.44] - 2026-09-18
|
|
8
|
+
|
|
9
|
+
Reddit VOC Arctic-only docs, cookie initialization removal, and links fallback regression tests
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- 分页 B8b —— account-pools / subreddit-candidates 自曝截断
|
|
14
|
+
- 分页 B8a —— 分类 run 列表自曝截断
|
|
15
|
+
- Aporro 块 5 代码面 —— SDK 补齐四象限声明与回执类型
|
|
16
|
+
- 配置更新走独立 PATCH,不再隐式重启监听 + CI 真库门补齐
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- remove legacy JSON fallback and cookie init
|
|
21
|
+
- B8a/B8b truncated 语义与覆盖补全(Codex 复审)
|
|
22
|
+
- 发布校验改看 tarball + 提醒下游包钉着旧版
|
|
23
|
+
|
|
24
|
+
## [0.3.43] - 2026-09-10
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- 板块新帖监听 P3 —— 排除词 + 回放 + 通知聚合 + 正文补抓
|
|
29
|
+
|
|
7
30
|
## [0.3.42] - 2026-09-10
|
|
8
31
|
|
|
9
32
|
### Added
|
package/dist/cmd-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-09-
|
|
3
|
-
"cliVersion": "0.3.
|
|
2
|
+
"generatedAt": "2026-09-18T10:33:18.086Z",
|
|
3
|
+
"cliVersion": "0.3.44",
|
|
4
4
|
"commands": [
|
|
5
5
|
"accounts",
|
|
6
6
|
"accounts brand-bindings",
|
|
@@ -262,6 +262,9 @@
|
|
|
262
262
|
"intelligence monitor-label-spec-delete",
|
|
263
263
|
"intelligence monitor-label-spec-retire",
|
|
264
264
|
"intelligence monitor-label-specs-list",
|
|
265
|
+
"intelligence monitor-replay-get",
|
|
266
|
+
"intelligence monitor-replay-run",
|
|
267
|
+
"intelligence monitor-replays-list",
|
|
265
268
|
"intelligence monitor-ruleset-activate",
|
|
266
269
|
"intelligence monitor-ruleset-apply-expansions",
|
|
267
270
|
"intelligence monitor-ruleset-create",
|
|
@@ -276,6 +279,7 @@
|
|
|
276
279
|
"intelligence monitors-enable",
|
|
277
280
|
"intelligence monitors-list",
|
|
278
281
|
"intelligence monitors-run",
|
|
282
|
+
"intelligence monitors-update",
|
|
279
283
|
"intelligence opportunity-map",
|
|
280
284
|
"intelligence posts-import",
|
|
281
285
|
"intelligence runs-list",
|
|
@@ -29,6 +29,16 @@ describe("cmd-manifest", () => {
|
|
|
29
29
|
expect(paths).toContain("style-profiles active");
|
|
30
30
|
expect(paths).toContain("style-profiles approve");
|
|
31
31
|
expect(paths).toContain("subreddit-annotations upsert");
|
|
32
|
+
/*
|
|
33
|
+
* 板块新帖监听 P3(0171)的三条回放命令。
|
|
34
|
+
* ⚠️ 钉在这里的理由:五层同步(API → SDK → CLI → skills → 页面)里,CLI 这一层
|
|
35
|
+
* 最容易「写了但没接上」—— 而症状是用户反馈「不支持」,实际是层级缺口。
|
|
36
|
+
* 🔴 回放**不发通知**:它算的是「如果当时用这套规则会怎样」这个假设,
|
|
37
|
+
* 命中账本与投递水位一个字都不碰。
|
|
38
|
+
*/
|
|
39
|
+
expect(paths).toContain("intelligence monitor-replay-run");
|
|
40
|
+
expect(paths).toContain("intelligence monitor-replays-list");
|
|
41
|
+
expect(paths).toContain("intelligence monitor-replay-get");
|
|
32
42
|
// 事件订阅通知:agent 的消费面(pull/ack 是两条独立命令 —— 本期不提供 --auto-ack)。
|
|
33
43
|
expect(paths).toContain("notify subscriptions create");
|
|
34
44
|
expect(paths).toContain("notify subscriptions list");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-manifest.test.js","sourceRoot":"","sources":["../src/cmd-manifest.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cmd-manifest.test.js","sourceRoot":"","sources":["../src/cmd-manifest.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAunF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAunF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;AAwyCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,GAAG,MAAM,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAyCpD;AAqzDD,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -513,7 +513,7 @@ content
|
|
|
513
513
|
.command("review")
|
|
514
514
|
.description("POST /content-review — 评论发布前独立 LLM 复审+优化(层③);degraded 时降级本地自审")
|
|
515
515
|
.option("-t, --team <teamId>", "Team UUID(缺省用当前 context)")
|
|
516
|
-
.option("-j, --json <json>", "{ accountId?, draft, commentType, thread:{subreddit,postTitle,...}, brandContext?:{brandKey|campaignId}, rewrite?, stage?, attempt? } (omit accountId for persona-less ContentOnly review)。也可 -j @<path> 读文件 / -j - 读 stdin")
|
|
516
|
+
.option("-j, --json <json>", "{ accountId?, draft, commentType, thread:{subreddit,postTitle,...}, brandContext?:{brandKey|campaignId}, rewrite?, stage?, attempt?, requestedScope?:{accountBinding,brandTreatment}, knowledgeContext?, requestedAcceptanceProfile? } (omit accountId for persona-less ContentOnly review)。requestedScope 声明四象限(account_bound|persona_less × managed_brand|organic);三个字段各自可选,同步入口不要求成对(只传 knowledgeContext 时按 legacy_derived 象限审,不满足 native_copy)。也可 -j @<path> 读文件 / -j - 读 stdin")
|
|
517
517
|
.option("--json-file <path>", "从文件读 body JSON(路径,或 - 表示 stdin);与 -j 二选一。Windows 建议用此绕开 shell 引号问题")
|
|
518
518
|
.option("--brand-context <json>", '品牌上下文 { "brandKey":"..." } 或 { "campaignId":"..." }(§0.3;便捷参数,覆盖 -j 里的 brandContext)')
|
|
519
519
|
.option("--thread-permalink <url>", "本次所审原帖的 permalink,写进 thread.threadPermalink(覆盖 -j 里的同名值)。供 Hub 独立核验作者关系;不保证 Hub 侧有该帖快照,也不改变评分标准")
|
|
@@ -559,7 +559,7 @@ content
|
|
|
559
559
|
.command("post-review")
|
|
560
560
|
.description("POST /post-review — 帖子(title+body)发布前独立 LLM 审核(七维,独立模型 key);仅审帖子正文,评论审核用 content review")
|
|
561
561
|
.option("-t, --team <teamId>", "Team UUID(缺省用当前 context)")
|
|
562
|
-
.option("-j, --json <json>", "{ accountId?, title, body, subreddit, subredditRules?, brandContext?:{brandKey|campaignId}, rewrite?, stage?, attempt? } (omit accountId for persona-less ContentOnly review)。也可 -j @<path> 读文件 / -j - 读 stdin")
|
|
562
|
+
.option("-j, --json <json>", "{ accountId?, title, body, subreddit, subredditRules?, brandContext?:{brandKey|campaignId}, rewrite?, stage?, attempt?, requestedScope?:{accountBinding,brandTreatment}, knowledgeContext?, requestedAcceptanceProfile? } (omit accountId for persona-less ContentOnly review)。requestedScope 声明四象限(account_bound|persona_less × managed_brand|organic);三个字段各自可选,同步入口不要求成对(只传 knowledgeContext 时按 legacy_derived 象限审,不满足 native_copy)。也可 -j @<path> 读文件 / -j - 读 stdin")
|
|
563
563
|
.option("--json-file <path>", "从文件读 body JSON(路径,或 - 表示 stdin);与 -j 二选一。Windows 建议用此绕开 shell 引号问题")
|
|
564
564
|
.option("--brand-context <json>", '品牌上下文 { "brandKey":"..." } 或 { "campaignId":"..." }(便捷参数,覆盖 -j 里的 brandContext)')
|
|
565
565
|
.action(async (opts) => {
|
|
@@ -1227,7 +1227,7 @@ reviewTargets
|
|
|
1227
1227
|
.command("create")
|
|
1228
1228
|
.description("POST /content-review-targets — 建 pending 审核目标 + 待审正文(幂等 dedupeKey)")
|
|
1229
1229
|
.option("-t, --team <teamId>", "Team UUID(缺省用当前 context)")
|
|
1230
|
-
.requiredOption("-j, --json <json>", "createReviewTargetBody JSON({ sourceKind, contentType, deliveryMode, reviewLevel, contentVersion, contentHash, dedupeKey, subject:{body,...}, ...refs }
|
|
1230
|
+
.requiredOption("-j, --json <json>", "createReviewTargetBody JSON({ sourceKind, contentType, deliveryMode, reviewLevel, contentVersion, contentHash, dedupeKey, subject:{body,threadContext?:{subredditRules?},...}, requestedScope?, knowledgeContext?, requestedAcceptanceProfile?, ...refs })。声明 requestedScope 后象限/Card/acceptance 在建 target 时固化,worker 与发布 gate 不再重新解析;knowledgeContext / requestedAcceptanceProfile 缺 requestedScope 返回 400")
|
|
1231
1231
|
.action(async (opts) => {
|
|
1232
1232
|
let body;
|
|
1233
1233
|
try {
|
|
@@ -3090,6 +3090,18 @@ intel
|
|
|
3090
3090
|
});
|
|
3091
3091
|
console.log(JSON.stringify(res, null, 2));
|
|
3092
3092
|
});
|
|
3093
|
+
intel
|
|
3094
|
+
.command("monitors-update")
|
|
3095
|
+
.description("PATCH .../subreddit-intelligence/monitors/:watchlistId —— 只改监听配置,不碰启停。" +
|
|
3096
|
+
"⚠️ 用 monitors-enable 改 fetch-limit 会顺带把一个已停止的监听重新启用(那是个 upsert," +
|
|
3097
|
+
"DO UPDATE 里写死 enabled=true);要在停止状态下改配置就用本命令。" +
|
|
3098
|
+
"该 watchlist 没配置过监听时 404 —— 本命令不会凭空把它创建成监听")
|
|
3099
|
+
.requiredOption("--watchlist <uuid>", "Watchlist UUID")
|
|
3100
|
+
.requiredOption("--fetch-limit <n>", "单页抓取条数上限 1–100")
|
|
3101
|
+
.action(async (opts) => {
|
|
3102
|
+
const res = await requireClient().updateSubredditMonitorConfig(opts.watchlist, { fetchLimit: Number(opts.fetchLimit) });
|
|
3103
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3104
|
+
});
|
|
3093
3105
|
intel
|
|
3094
3106
|
.command("monitors-disable")
|
|
3095
3107
|
.description("DELETE .../subreddit-intelligence/monitors/:watchlistId —— 软停监听;" +
|
|
@@ -3132,9 +3144,20 @@ intel
|
|
|
3132
3144
|
*
|
|
3133
3145
|
* 🔴 版本语义:draft 可反复改 → activate 之后**不可原地修改,只能新建版本**。
|
|
3134
3146
|
* 🔴 激活/停用**不会重发历史命中** —— 观察的水位在被评估的那一轮就推进了(无论命中与否)。
|
|
3135
|
-
*
|
|
3147
|
+
* 这是刻意的:否则调一次关键词,负责人就被历史帖子刷一次屏。
|
|
3148
|
+
* 要看「新规则放回历史窗口会怎样」,用 `monitor-replay-run`(0171)——
|
|
3149
|
+
* 它**同样不发通知**,只是把结果落库供对照。
|
|
3136
3150
|
* ⚠️ 停用当前版本 = 回到「不设关键词门」,报告**恢复全量新帖**,不是一条都不报。
|
|
3137
|
-
*
|
|
3151
|
+
*
|
|
3152
|
+
* 🔴 **排除词(0171)**:规则 JSON 支持 `"polarity": "exclude"`。
|
|
3153
|
+
* - exclude 命中时**撤销**同等或更低来源优先级的 include 命中
|
|
3154
|
+
* (优先级 manual > brand_keyword > expansion —— 模型扩出来的否定词不该把运营
|
|
3155
|
+
* 亲手填的 include 词否掉);
|
|
3156
|
+
* - exclude **自己不产生命中**,所以一条 include 都没有的规则集会被拒绝激活(409);
|
|
3157
|
+
* - 同一个 (term, scope, matchMode) 上可以同时有 include 与 exclude 两条
|
|
3158
|
+
* (`espresso` 收进来、`espresso martini` 排出去)。
|
|
3159
|
+
* ⚠️ 加了排除词一定先 `monitor-ruleset-dry-run` 看一眼:一条配宽的排除词能把
|
|
3160
|
+
* 整个板块吃掉,而卡片上看起来只是「今天没有相关新帖」。
|
|
3138
3161
|
* ────────────────────────────────────────────────────────────────────────── */
|
|
3139
3162
|
intel
|
|
3140
3163
|
.command("monitor-rulesets-list")
|
|
@@ -3161,7 +3184,9 @@ intel
|
|
|
3161
3184
|
intel
|
|
3162
3185
|
.command("monitor-ruleset-create")
|
|
3163
3186
|
.description("POST .../monitors/:monitorId/rule-sets —— 新建 **draft** 版本(不会自动激活)。" +
|
|
3164
|
-
"规则形状:[{term,scope?,matchMode?,weight?}];scope=title|body|both,
|
|
3187
|
+
"规则形状:[{term,scope?,matchMode?,polarity?,weight?}];scope=title|body|both," +
|
|
3188
|
+
"matchMode=word|substring|phrase,polarity=include|exclude(默认 include)。" +
|
|
3189
|
+
"⚠️ 全是 exclude 的规则集不许激活 —— 那等于把整个板块静音")
|
|
3165
3190
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3166
3191
|
.option("--lookback <minutes>", "回看窗口,只允许 720(12h)或 1440(24h);run 窗口取所有启用监听里最长的一档")
|
|
3167
3192
|
.option("--note <text>", "本版说明(会随版本链留痕,作为审计的一部分)")
|
|
@@ -3179,7 +3204,8 @@ intel
|
|
|
3179
3204
|
intel
|
|
3180
3205
|
.command("monitor-ruleset-rules-set")
|
|
3181
3206
|
.description("PUT .../rule-sets/:ruleSetId/rules —— **整批替换** draft 的规则(传什么就是最终全量)。" +
|
|
3182
|
-
"已激活的版本会被服务端 409
|
|
3207
|
+
"已激活的版本会被服务端 409 拒绝:改规则必须新建版本。" +
|
|
3208
|
+
'排除词:在规则对象里加 "polarity":"exclude"(默认 include)')
|
|
3183
3209
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3184
3210
|
.requiredOption("--rule-set <uuid>", "Rule set UUID(必须是 draft)")
|
|
3185
3211
|
.requiredOption("-j, --json <json>", "规则数组 JSON(全量)")
|
|
@@ -3227,7 +3253,10 @@ intel
|
|
|
3227
3253
|
.description("POST .../rule-sets/:ruleSetId/dry-run —— 🔴 **试跑**:拿过去 12h/24h 的历史帖子跑一遍," +
|
|
3228
3254
|
"看会命中什么。**只读:不写命中账本、不推进水位、不发任何通知**。" +
|
|
3229
3255
|
"先看 sampled:它是 0 时「0 命中」说明的是没有样本,不是规则太窄。" +
|
|
3230
|
-
"termHitCounts 看哪个词过宽,
|
|
3256
|
+
"termHitCounts 看哪个词过宽,exclusionHitCounts 看哪条排除词吃掉了多少," +
|
|
3257
|
+
"unusedTerms 看哪个词拼错了(include 与 exclude 分别按各自的命中表判断)。" +
|
|
3258
|
+
"⚠️ excluded 与 screenedOut 是**两个数**:前者命中了但被排除词否掉(去看排除词)," +
|
|
3259
|
+
"后者一个 include 都没命中(去看 include 词)")
|
|
3231
3260
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3232
3261
|
.requiredOption("--rule-set <uuid>", "Rule set UUID(draft 或 active 都可以)")
|
|
3233
3262
|
.option("--lookback <minutes>", "720|1440;缺省用规则集自己的 lookback")
|
|
@@ -3243,6 +3272,71 @@ intel
|
|
|
3243
3272
|
});
|
|
3244
3273
|
console.log(JSON.stringify(res, null, 2));
|
|
3245
3274
|
});
|
|
3275
|
+
/* ── 回放(0171)· 板块新帖监听 P3 ────────────────────────────────────────────
|
|
3276
|
+
*
|
|
3277
|
+
* 🔴 **回放不写命中账本、不推进投递水位、不发任何通知。**
|
|
3278
|
+
* 它回答的是「把这版规则放回那段历史窗口会命中什么 / 比当初多报少报了哪些」——
|
|
3279
|
+
* 是**假设**不是事实,所以结果落在独立的回放表上,原始命中账本一个字都不会被改。
|
|
3280
|
+
*
|
|
3281
|
+
* ⚠️ 与 dry-run 的分工:
|
|
3282
|
+
* - `monitor-ruleset-dry-run`:**不落库**的即时预览,窗口只能取 720/1440;
|
|
3283
|
+
* - `monitor-replay-run`:**落库**、窗口任意(最长 30 天),并给出与真实账本的差分。
|
|
3284
|
+
* 要拿去做上线决策、要能事后复看的,用这个。
|
|
3285
|
+
* ────────────────────────────────────────────────────────────────────────── */
|
|
3286
|
+
intel
|
|
3287
|
+
.command("monitor-replay-run")
|
|
3288
|
+
.description("POST .../monitors/:monitorId/replays —— 🔴 **回放**:把某版规则放回指定历史窗口重判。" +
|
|
3289
|
+
"**不写命中账本、不推进水位、不发任何通知**(响应里的 sideEffects 显式声明了这三条)。" +
|
|
3290
|
+
"diff.wouldStopReporting = 当初报过、新规则下不再报;" +
|
|
3291
|
+
"diff.wouldNewlyReport = 当初被筛掉、新规则下会报;" +
|
|
3292
|
+
"diff.neverObserved = 当时**根本没被观察到**(监听还没开 / VOC 回灌进来的)——" +
|
|
3293
|
+
"⛔ 这一项不是「规则漏了」,别读成收益")
|
|
3294
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3295
|
+
.option("--rule-set <uuid>", "用哪一版规则;缺省用当前 active。可以传 draft —— 「新写的这版放到上周会命中什么」是主要用法")
|
|
3296
|
+
.requiredOption("--from <iso>", "窗口起点(ISO 时间串),按帖子 postedAt 取,左闭")
|
|
3297
|
+
.requiredOption("--to <iso>", "窗口终点(ISO 时间串),右开;跨度最长 30 天")
|
|
3298
|
+
.option("-n, --limit <n>", "硬顶(最大 2000);撞顶时结果 truncated=true", "500")
|
|
3299
|
+
.option("--note <text>", "本次回放的说明(随记录留痕)")
|
|
3300
|
+
.action(async (opts) => {
|
|
3301
|
+
const res = await requireClient().runSubredditMonitorReplay(opts.monitor, {
|
|
3302
|
+
...(opts.ruleSet === undefined ? {} : { ruleSetId: opts.ruleSet }),
|
|
3303
|
+
windowStart: opts.from,
|
|
3304
|
+
windowEnd: opts.to,
|
|
3305
|
+
limit: Number(opts.limit),
|
|
3306
|
+
...(opts.note === undefined ? {} : { note: opts.note }),
|
|
3307
|
+
});
|
|
3308
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3309
|
+
});
|
|
3310
|
+
intel
|
|
3311
|
+
.command("monitor-replays-list")
|
|
3312
|
+
.description("GET .../monitors/:monitorId/replays —— 该监听的回放记录(created_at DESC)")
|
|
3313
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3314
|
+
.option("-n, --limit <n>", "limit", "20")
|
|
3315
|
+
.action(async (opts) => {
|
|
3316
|
+
const res = await requireClient().listSubredditMonitorReplays(opts.monitor, { limit: Number(opts.limit) });
|
|
3317
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3318
|
+
});
|
|
3319
|
+
intel
|
|
3320
|
+
.command("monitor-replay-get")
|
|
3321
|
+
.description("GET .../monitors/:monitorId/replays/:replayRunId —— 含逐帖明细。" +
|
|
3322
|
+
"⚠️ decision 有四值:matched / indeterminate(正文拿不到判不了) / " +
|
|
3323
|
+
"**excluded**(命中了但被排除词否掉) / no_match(一个 include 都没命中)。" +
|
|
3324
|
+
"⛔ excluded 与 no_match 别合并看 —— 处置方向相反")
|
|
3325
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3326
|
+
.requiredOption("--replay <uuid>", "Replay run UUID")
|
|
3327
|
+
.option("--decision <d>", "matched|indeterminate|excluded|no_match;缺省回全部(要判断词配窄没配窄,必须看到没命中的长什么样)")
|
|
3328
|
+
.option("-n, --limit <n>", "明细上限", "200")
|
|
3329
|
+
.action(async (opts) => {
|
|
3330
|
+
// ⚠️ 枚举透传、由服务端 zod 400 —— 与 hot-posts / voc 的 --sort-by 同一惯例。
|
|
3331
|
+
// 只有**会被静默强转**的选项才在本地拦(如 Boolean() 强转的开关),decision 不是。
|
|
3332
|
+
const res = await requireClient().getSubredditMonitorReplay(opts.monitor, opts.replay, {
|
|
3333
|
+
...(opts.decision === undefined
|
|
3334
|
+
? {}
|
|
3335
|
+
: { decision: opts.decision }),
|
|
3336
|
+
limit: Number(opts.limit),
|
|
3337
|
+
});
|
|
3338
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3339
|
+
});
|
|
3246
3340
|
intel
|
|
3247
3341
|
.command("monitor-brand-keyword-candidates")
|
|
3248
3342
|
.description("GET .../monitors/:monitorId/brand-keyword-candidates —— 从品牌词取导入候选(只读)。" +
|