@geoly-ai/social-hub-cli 0.3.41 → 0.3.43
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 +12 -0
- package/dist/cmd-manifest.json +5 -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 +116 -5
- package/dist/index.js.map +1 -1
- package/dist/watchlists-list-filters.test.d.ts +2 -0
- package/dist/watchlists-list-filters.test.d.ts.map +1 -0
- package/dist/watchlists-list-filters.test.js +143 -0
- package/dist/watchlists-list-filters.test.js.map +1 -0
- package/package.json +2 -2
- package/skills/integrity.json +2 -2
- package/skills/manifest.json +1 -1
- package/skills/social-hub-intelligence/SKILL.md +119 -5
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ 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.43] - 2026-09-10
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- 板块新帖监听 P3 —— 排除词 + 回放 + 通知聚合 + 正文补抓
|
|
12
|
+
|
|
13
|
+
## [0.3.42] - 2026-09-10
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- watchlist 筛选补齐 CLI/skills 层 + 清两处 sticky 死代码
|
|
18
|
+
|
|
7
19
|
## [0.3.41] - 2026-09-09
|
|
8
20
|
|
|
9
21
|
### 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-10T07:24:06.541Z",
|
|
3
|
+
"cliVersion": "0.3.43",
|
|
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",
|
|
@@ -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;AAsxCD;;;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
|
@@ -2985,12 +2985,41 @@ intel
|
|
|
2985
2985
|
.description("GET .../subreddit-intelligence/watchlists")
|
|
2986
2986
|
.option("--campaign <uuid>", "campaignId")
|
|
2987
2987
|
.option("--subreddit <name>", "按板块名精确查归属(r/ 可省)")
|
|
2988
|
+
.option("--subreddit-query <text>", "板块名**子串**搜索(大小写不敏感,r/ 可省);与 --subreddit 是两个独立谓词,后者是精确匹配")
|
|
2989
|
+
.option("--status <st>", "active|paused|archived")
|
|
2990
|
+
.option("--brand <uuid>", "brandId:只返回**显式绑定**该品牌的监控池(不含全局池)")
|
|
2991
|
+
.option("--industry-keys <list>", "industryKey 过滤(逗号分隔可多个)")
|
|
2992
|
+
.option("--tag <tag>", "标签精确包含(tags 是 jsonb 数组)")
|
|
2993
|
+
.option("--monitor-state <state>", "新帖监听状态,三值:enabled=在监听 | disabled=加过但已停(软停,配置行还在) | never=从没加过。" +
|
|
2994
|
+
"⚠️ 受限主体(client)传这个会 403")
|
|
2995
|
+
.option("--sort-by <f>", "createdAt|subreddit|monitorLastObservedAt")
|
|
2996
|
+
.option("--sort-dir <d>", "asc|desc")
|
|
2988
2997
|
.option("-n, --limit <n>", "limit", "100")
|
|
2989
2998
|
.option("--offset <n>", "offset", "0")
|
|
2990
2999
|
.action(async (opts) => {
|
|
3000
|
+
// 🔴 显式校验只给 --monitor-state 一个,不是漏了别的:本仓 CLI 的既有惯例是
|
|
3001
|
+
// 枚举透传、由服务端 zod 400(见 hot-posts / voc 的 --sort-by),只有**会被静默
|
|
3002
|
+
// 强转**的选项才本地拦(monitors-list 的 `--enabled` 是 Boolean() 强转)。
|
|
3003
|
+
// monitorState 拦下来的理由不是强转,而是**语义**:它最容易被当成布尔用
|
|
3004
|
+
// (`--monitor-state true` / `false`),而服务端那句 "invalid enum value"
|
|
3005
|
+
// 讲不清 disabled(停了的) 与 never(从没加过) 的区别 —— 而用户提这个需求
|
|
3006
|
+
// 要的正是这个区别。
|
|
3007
|
+
if (opts.monitorState !== undefined &&
|
|
3008
|
+
!["enabled", "disabled", "never"].includes(opts.monitorState))
|
|
3009
|
+
throw new Error("--monitor-state 必须是 enabled | disabled | never 之一(三值,不是布尔):" +
|
|
3010
|
+
"disabled = 加过监听后停了(软停,配置行与观察水位都还在,重新启用不会重复报旧帖);" +
|
|
3011
|
+
"never = 压根没加过监听(需要新建配置行)。想要「没在监听的全部」请分两次查。");
|
|
2991
3012
|
const res = await requireClient().listSubredditWatchlists({
|
|
2992
3013
|
campaignId: opts.campaign,
|
|
2993
3014
|
subreddit: opts.subreddit,
|
|
3015
|
+
subredditQuery: opts.subredditQuery,
|
|
3016
|
+
status: opts.status,
|
|
3017
|
+
brandId: opts.brand,
|
|
3018
|
+
industryKeys: opts.industryKeys,
|
|
3019
|
+
tag: opts.tag,
|
|
3020
|
+
monitorState: opts.monitorState,
|
|
3021
|
+
sortBy: opts.sortBy,
|
|
3022
|
+
sortDir: opts.sortDir,
|
|
2994
3023
|
limit: Number(opts.limit),
|
|
2995
3024
|
offset: Number(opts.offset),
|
|
2996
3025
|
});
|
|
@@ -3103,9 +3132,20 @@ intel
|
|
|
3103
3132
|
*
|
|
3104
3133
|
* 🔴 版本语义:draft 可反复改 → activate 之后**不可原地修改,只能新建版本**。
|
|
3105
3134
|
* 🔴 激活/停用**不会重发历史命中** —— 观察的水位在被评估的那一轮就推进了(无论命中与否)。
|
|
3106
|
-
*
|
|
3135
|
+
* 这是刻意的:否则调一次关键词,负责人就被历史帖子刷一次屏。
|
|
3136
|
+
* 要看「新规则放回历史窗口会怎样」,用 `monitor-replay-run`(0171)——
|
|
3137
|
+
* 它**同样不发通知**,只是把结果落库供对照。
|
|
3107
3138
|
* ⚠️ 停用当前版本 = 回到「不设关键词门」,报告**恢复全量新帖**,不是一条都不报。
|
|
3108
|
-
*
|
|
3139
|
+
*
|
|
3140
|
+
* 🔴 **排除词(0171)**:规则 JSON 支持 `"polarity": "exclude"`。
|
|
3141
|
+
* - exclude 命中时**撤销**同等或更低来源优先级的 include 命中
|
|
3142
|
+
* (优先级 manual > brand_keyword > expansion —— 模型扩出来的否定词不该把运营
|
|
3143
|
+
* 亲手填的 include 词否掉);
|
|
3144
|
+
* - exclude **自己不产生命中**,所以一条 include 都没有的规则集会被拒绝激活(409);
|
|
3145
|
+
* - 同一个 (term, scope, matchMode) 上可以同时有 include 与 exclude 两条
|
|
3146
|
+
* (`espresso` 收进来、`espresso martini` 排出去)。
|
|
3147
|
+
* ⚠️ 加了排除词一定先 `monitor-ruleset-dry-run` 看一眼:一条配宽的排除词能把
|
|
3148
|
+
* 整个板块吃掉,而卡片上看起来只是「今天没有相关新帖」。
|
|
3109
3149
|
* ────────────────────────────────────────────────────────────────────────── */
|
|
3110
3150
|
intel
|
|
3111
3151
|
.command("monitor-rulesets-list")
|
|
@@ -3132,7 +3172,9 @@ intel
|
|
|
3132
3172
|
intel
|
|
3133
3173
|
.command("monitor-ruleset-create")
|
|
3134
3174
|
.description("POST .../monitors/:monitorId/rule-sets —— 新建 **draft** 版本(不会自动激活)。" +
|
|
3135
|
-
"规则形状:[{term,scope?,matchMode?,weight?}];scope=title|body|both,
|
|
3175
|
+
"规则形状:[{term,scope?,matchMode?,polarity?,weight?}];scope=title|body|both," +
|
|
3176
|
+
"matchMode=word|substring|phrase,polarity=include|exclude(默认 include)。" +
|
|
3177
|
+
"⚠️ 全是 exclude 的规则集不许激活 —— 那等于把整个板块静音")
|
|
3136
3178
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3137
3179
|
.option("--lookback <minutes>", "回看窗口,只允许 720(12h)或 1440(24h);run 窗口取所有启用监听里最长的一档")
|
|
3138
3180
|
.option("--note <text>", "本版说明(会随版本链留痕,作为审计的一部分)")
|
|
@@ -3150,7 +3192,8 @@ intel
|
|
|
3150
3192
|
intel
|
|
3151
3193
|
.command("monitor-ruleset-rules-set")
|
|
3152
3194
|
.description("PUT .../rule-sets/:ruleSetId/rules —— **整批替换** draft 的规则(传什么就是最终全量)。" +
|
|
3153
|
-
"已激活的版本会被服务端 409
|
|
3195
|
+
"已激活的版本会被服务端 409 拒绝:改规则必须新建版本。" +
|
|
3196
|
+
'排除词:在规则对象里加 "polarity":"exclude"(默认 include)')
|
|
3154
3197
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3155
3198
|
.requiredOption("--rule-set <uuid>", "Rule set UUID(必须是 draft)")
|
|
3156
3199
|
.requiredOption("-j, --json <json>", "规则数组 JSON(全量)")
|
|
@@ -3198,7 +3241,10 @@ intel
|
|
|
3198
3241
|
.description("POST .../rule-sets/:ruleSetId/dry-run —— 🔴 **试跑**:拿过去 12h/24h 的历史帖子跑一遍," +
|
|
3199
3242
|
"看会命中什么。**只读:不写命中账本、不推进水位、不发任何通知**。" +
|
|
3200
3243
|
"先看 sampled:它是 0 时「0 命中」说明的是没有样本,不是规则太窄。" +
|
|
3201
|
-
"termHitCounts 看哪个词过宽,
|
|
3244
|
+
"termHitCounts 看哪个词过宽,exclusionHitCounts 看哪条排除词吃掉了多少," +
|
|
3245
|
+
"unusedTerms 看哪个词拼错了(include 与 exclude 分别按各自的命中表判断)。" +
|
|
3246
|
+
"⚠️ excluded 与 screenedOut 是**两个数**:前者命中了但被排除词否掉(去看排除词)," +
|
|
3247
|
+
"后者一个 include 都没命中(去看 include 词)")
|
|
3202
3248
|
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3203
3249
|
.requiredOption("--rule-set <uuid>", "Rule set UUID(draft 或 active 都可以)")
|
|
3204
3250
|
.option("--lookback <minutes>", "720|1440;缺省用规则集自己的 lookback")
|
|
@@ -3214,6 +3260,71 @@ intel
|
|
|
3214
3260
|
});
|
|
3215
3261
|
console.log(JSON.stringify(res, null, 2));
|
|
3216
3262
|
});
|
|
3263
|
+
/* ── 回放(0171)· 板块新帖监听 P3 ────────────────────────────────────────────
|
|
3264
|
+
*
|
|
3265
|
+
* 🔴 **回放不写命中账本、不推进投递水位、不发任何通知。**
|
|
3266
|
+
* 它回答的是「把这版规则放回那段历史窗口会命中什么 / 比当初多报少报了哪些」——
|
|
3267
|
+
* 是**假设**不是事实,所以结果落在独立的回放表上,原始命中账本一个字都不会被改。
|
|
3268
|
+
*
|
|
3269
|
+
* ⚠️ 与 dry-run 的分工:
|
|
3270
|
+
* - `monitor-ruleset-dry-run`:**不落库**的即时预览,窗口只能取 720/1440;
|
|
3271
|
+
* - `monitor-replay-run`:**落库**、窗口任意(最长 30 天),并给出与真实账本的差分。
|
|
3272
|
+
* 要拿去做上线决策、要能事后复看的,用这个。
|
|
3273
|
+
* ────────────────────────────────────────────────────────────────────────── */
|
|
3274
|
+
intel
|
|
3275
|
+
.command("monitor-replay-run")
|
|
3276
|
+
.description("POST .../monitors/:monitorId/replays —— 🔴 **回放**:把某版规则放回指定历史窗口重判。" +
|
|
3277
|
+
"**不写命中账本、不推进水位、不发任何通知**(响应里的 sideEffects 显式声明了这三条)。" +
|
|
3278
|
+
"diff.wouldStopReporting = 当初报过、新规则下不再报;" +
|
|
3279
|
+
"diff.wouldNewlyReport = 当初被筛掉、新规则下会报;" +
|
|
3280
|
+
"diff.neverObserved = 当时**根本没被观察到**(监听还没开 / VOC 回灌进来的)——" +
|
|
3281
|
+
"⛔ 这一项不是「规则漏了」,别读成收益")
|
|
3282
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3283
|
+
.option("--rule-set <uuid>", "用哪一版规则;缺省用当前 active。可以传 draft —— 「新写的这版放到上周会命中什么」是主要用法")
|
|
3284
|
+
.requiredOption("--from <iso>", "窗口起点(ISO 时间串),按帖子 postedAt 取,左闭")
|
|
3285
|
+
.requiredOption("--to <iso>", "窗口终点(ISO 时间串),右开;跨度最长 30 天")
|
|
3286
|
+
.option("-n, --limit <n>", "硬顶(最大 2000);撞顶时结果 truncated=true", "500")
|
|
3287
|
+
.option("--note <text>", "本次回放的说明(随记录留痕)")
|
|
3288
|
+
.action(async (opts) => {
|
|
3289
|
+
const res = await requireClient().runSubredditMonitorReplay(opts.monitor, {
|
|
3290
|
+
...(opts.ruleSet === undefined ? {} : { ruleSetId: opts.ruleSet }),
|
|
3291
|
+
windowStart: opts.from,
|
|
3292
|
+
windowEnd: opts.to,
|
|
3293
|
+
limit: Number(opts.limit),
|
|
3294
|
+
...(opts.note === undefined ? {} : { note: opts.note }),
|
|
3295
|
+
});
|
|
3296
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3297
|
+
});
|
|
3298
|
+
intel
|
|
3299
|
+
.command("monitor-replays-list")
|
|
3300
|
+
.description("GET .../monitors/:monitorId/replays —— 该监听的回放记录(created_at DESC)")
|
|
3301
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3302
|
+
.option("-n, --limit <n>", "limit", "20")
|
|
3303
|
+
.action(async (opts) => {
|
|
3304
|
+
const res = await requireClient().listSubredditMonitorReplays(opts.monitor, { limit: Number(opts.limit) });
|
|
3305
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3306
|
+
});
|
|
3307
|
+
intel
|
|
3308
|
+
.command("monitor-replay-get")
|
|
3309
|
+
.description("GET .../monitors/:monitorId/replays/:replayRunId —— 含逐帖明细。" +
|
|
3310
|
+
"⚠️ decision 有四值:matched / indeterminate(正文拿不到判不了) / " +
|
|
3311
|
+
"**excluded**(命中了但被排除词否掉) / no_match(一个 include 都没命中)。" +
|
|
3312
|
+
"⛔ excluded 与 no_match 别合并看 —— 处置方向相反")
|
|
3313
|
+
.requiredOption("--monitor <uuid>", "Monitor UUID")
|
|
3314
|
+
.requiredOption("--replay <uuid>", "Replay run UUID")
|
|
3315
|
+
.option("--decision <d>", "matched|indeterminate|excluded|no_match;缺省回全部(要判断词配窄没配窄,必须看到没命中的长什么样)")
|
|
3316
|
+
.option("-n, --limit <n>", "明细上限", "200")
|
|
3317
|
+
.action(async (opts) => {
|
|
3318
|
+
// ⚠️ 枚举透传、由服务端 zod 400 —— 与 hot-posts / voc 的 --sort-by 同一惯例。
|
|
3319
|
+
// 只有**会被静默强转**的选项才在本地拦(如 Boolean() 强转的开关),decision 不是。
|
|
3320
|
+
const res = await requireClient().getSubredditMonitorReplay(opts.monitor, opts.replay, {
|
|
3321
|
+
...(opts.decision === undefined
|
|
3322
|
+
? {}
|
|
3323
|
+
: { decision: opts.decision }),
|
|
3324
|
+
limit: Number(opts.limit),
|
|
3325
|
+
});
|
|
3326
|
+
console.log(JSON.stringify(res, null, 2));
|
|
3327
|
+
});
|
|
3217
3328
|
intel
|
|
3218
3329
|
.command("monitor-brand-keyword-candidates")
|
|
3219
3330
|
.description("GET .../monitors/:monitorId/brand-keyword-candidates —— 从品牌词取导入候选(只读)。" +
|