@geoly-ai/social-hub-cli 0.3.42 → 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 +6 -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 +87 -5
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/skills/integrity.json +2 -2
- package/skills/manifest.json +1 -1
- package/skills/social-hub-intelligence/SKILL.md +79 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoly-ai/social-hub-cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.43",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "social-hub CLI for Social Ops Hub",
|
|
6
6
|
"repository": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"commander": "^12.1.0",
|
|
25
25
|
"@geoly-ai/social-hub-authz": "0.0.20",
|
|
26
|
-
"@geoly-ai/social-hub-sdk": "0.1.
|
|
26
|
+
"@geoly-ai/social-hub-sdk": "0.1.16"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^22.10.2",
|
package/skills/integrity.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"fileCount": 1656,
|
|
5
5
|
"files": {
|
|
6
6
|
"README.md": "5246d4ae2712e3e656b101041929183d7ae7f8ea487dacf5854187826ab7c335",
|
|
7
|
-
"manifest.json": "
|
|
7
|
+
"manifest.json": "aa878b3b0abb3e120e88d54f293f7ca30157e9fd4467ce26e148976d26e31952",
|
|
8
8
|
"reddit-answers-research/SKILL.md": "ab6fd12eeb2fef4dc31a6f3c21a84810d6b5bdb309f130bcdc9eb902f075294a",
|
|
9
9
|
"reddit-answers-research/references/browser-playbook.md": "a8f61d3d43ca93d46dadc8a092a515ddcd32df12fb1d08d334cce2e02709d915",
|
|
10
10
|
"reddit-answers-research/references/report-template.md": "9aa9acf555ba8b2ca503bdbdf5750a5f53c66e19989bf6807fa6200c7317e306",
|
|
@@ -1643,7 +1643,7 @@
|
|
|
1643
1643
|
"social-hub-content-review/SKILL.md": "6d10a84ab56552fd953863b97978bddc0e925e3a2667d64a7a4c51e33a3ddb58",
|
|
1644
1644
|
"social-hub-events-observability/SKILL.md": "f4c17487c64bb1f48381d8d60e97cfa160a94a0f120153b1c0e798a0c7ee7ebe",
|
|
1645
1645
|
"social-hub-graph-compliance/SKILL.md": "2270aeb321733f0318f75da4838ca1ca03996c6cac59e5a12f7152bd1ecdfa26",
|
|
1646
|
-
"social-hub-intelligence/SKILL.md": "
|
|
1646
|
+
"social-hub-intelligence/SKILL.md": "69f4a3d97b36e13f8ee594708f84e268996559ace86982194dbc23d353cc2923",
|
|
1647
1647
|
"social-hub-migration/SKILL.md": "1c13f231bb81ae8d242c834eec93a499830481804c66f6dba95922972f56f9ce",
|
|
1648
1648
|
"social-hub-notifications/SKILL.md": "f80f4cf2f9ef0dbf60bd6e8bb4ad7e27dc0ff1fe59f4c7e79e49cc691ed4be6a",
|
|
1649
1649
|
"social-hub-openclaw-context/SKILL.md": "97c48f38f1f1a206c3af2af49fcd445a1cd5b78d4a9c805c2456de4ce98fec09",
|
package/skills/manifest.json
CHANGED
|
@@ -278,7 +278,8 @@ social-hub intelligence monitor-runs-list [--status degraded] [-n 20]
|
|
|
278
278
|
social-hub intelligence monitor-ruleset-create --monitor <uuid> --lookback 1440 \
|
|
279
279
|
--note "第一版:品牌词 + 竞品词" \
|
|
280
280
|
-j '[{"term":"aporro","scope":"both","matchMode":"word","weight":3},
|
|
281
|
-
{"term":"cold brew","scope":"body","matchMode":"phrase"}
|
|
281
|
+
{"term":"cold brew","scope":"body","matchMode":"phrase"},
|
|
282
|
+
{"term":"espresso martini","polarity":"exclude","matchMode":"phrase"}]'
|
|
282
283
|
|
|
283
284
|
# 2) 🔴 试跑:拿过去 24h 的历史帖子跑一遍,看会命中什么(只读,不发任何通知)
|
|
284
285
|
social-hub intelligence monitor-ruleset-dry-run --monitor <uuid> --rule-set <uuid> --lookback 1440
|
|
@@ -301,7 +302,8 @@ social-hub intelligence monitor-brand-keyword-candidates --monitor <uuid> [--bra
|
|
|
301
302
|
1. **active 之后不可原地修改,只能新建版本**(DB 触发器焊死)。改词的正确流程是
|
|
302
303
|
create draft → dry-run → activate,不是去改已激活的那一版。
|
|
303
304
|
2. **激活/停用不会重发历史命中**。观察的水位在被评估的那一轮就推进了,**无论命中与否** ——
|
|
304
|
-
|
|
305
|
+
否则调宽一次关键词,负责人就被历史帖子刷一次屏。要看「新规则放回历史窗口会怎样」,
|
|
306
|
+
用 `monitor-replay-run`(见下面「回放」)—— 它**同样不发通知**。
|
|
305
307
|
3. **停用 ≠ 静音**。retire 之后该监听回到「不设关键词门」,报告**恢复全量新帖**。
|
|
306
308
|
要减少推送就改规则,不要指望 retire。
|
|
307
309
|
4. **词边界**:`matchMode=word` 时 `art` **不会**命中 `earth`,但会命中 `art-house`。
|
|
@@ -321,9 +323,82 @@ social-hub intelligence monitor-brand-keyword-candidates --monitor <uuid> [--bra
|
|
|
321
323
|
watchlist 与品牌是多对多,若监听直接读品牌词并集,「给某品牌加一个词」或「把品牌绑到
|
|
322
324
|
这个 watchlist」都会让**监听范围悄然扩大**,而运营没做过任何监听侧的动作。
|
|
323
325
|
|
|
324
|
-
|
|
326
|
+
**卡片上「未发现新帖」要分五种读法**(卡片会自己区分,别再一律当成「没动静」):
|
|
325
327
|
覆盖完整且没被过滤 ⇒ 真的没新帖;板块疑似截断 / 拿不到分页游标 ⇒ **采集没抓全**,
|
|
326
|
-
|
|
328
|
+
按采集问题排查;全被**排除词**否掉 ⇒ 去看排除词是不是配宽了;
|
|
329
|
+
全都没命中 include 词 ⇒ 去看 include 词是不是配窄了;
|
|
330
|
+
正文补抓全部失败 ⇒ **采集问题**,关键词只在正文里的帖子这轮判不了。
|
|
331
|
+
🔴 后两组的处置方向**相反**(放宽 vs 收窄),所以卡片刻意分开表述,别当成同一句话。
|
|
332
|
+
|
|
333
|
+
### 排除词 / 布尔规则(0171)
|
|
334
|
+
|
|
335
|
+
规则对象加 `"polarity":"exclude"` 就是排除词(缺省 `include`)。
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# espresso 收进来,但 espresso martini 排出去 —— 两条可以共存(唯一键含 polarity)
|
|
339
|
+
-j '[{"term":"espresso","scope":"both","matchMode":"word"},
|
|
340
|
+
{"term":"espresso martini","polarity":"exclude","matchMode":"phrase"}]'
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**四条口径**:
|
|
344
|
+
|
|
345
|
+
1. **exclude 只撤销,自己不产生命中**。所以**一条 include 都没有的规则集不许激活**
|
|
346
|
+
(409 `monitor_rule_set_exclude_only`)—— 那等于把整个板块静音,而卡片上看起来
|
|
347
|
+
只是「今天没有相关新帖」。
|
|
348
|
+
2. **撤销按来源优先级由低到高**:`manual`(30) > `brand_keyword`(20) > `expansion`(10)。
|
|
349
|
+
一条 exclude 只能撤销**优先级不高于它自己**的 include 命中 —— 近义词扩展出来的
|
|
350
|
+
否定词压不住运营亲手填的 include 词。同源的一对(都是 manual)**可以**互相作用。
|
|
351
|
+
3. **被排除掉 ≠ 没命中**。dry-run 与回放都把它们分成 `excluded` / `no_match` 两个数,
|
|
352
|
+
卡片上也是两句话。⛔ 别合并看:前者去看排除词是不是配宽了,后者去看 include 词
|
|
353
|
+
是不是配窄了 —— 方向相反。
|
|
354
|
+
4. **正文拿不到时排除判定也可能不完整**:有 `scope=body` 的排除词而正文没采到时,
|
|
355
|
+
帖子**照发**,但卡片标注「正文缺失,排除词未能完整判定(可能本应被排除)」。
|
|
356
|
+
取向与 include 侧一致:拿不准时不敢当成已排除,那会漏报。
|
|
357
|
+
|
|
358
|
+
⚠️ **加了排除词一定先 dry-run**。一条配宽的排除词能把整个板块吃掉,
|
|
359
|
+
而通知上看起来只是「今天没有相关新帖」。
|
|
360
|
+
|
|
361
|
+
### 回放:改完规则想看效果,别等下一轮 cron(0171)
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# 把某版规则(缺省 active;可传 draft)放回指定历史窗口重判
|
|
365
|
+
social-hub intelligence monitor-replay-run --monitor <uuid> \
|
|
366
|
+
--from 2026-09-01T00:00:00Z --to 2026-09-08T00:00:00Z \
|
|
367
|
+
[--rule-set <draft-uuid>] [-n 500] [--note "第 3 版排除词效果"]
|
|
368
|
+
|
|
369
|
+
social-hub intelligence monitor-replays-list --monitor <uuid>
|
|
370
|
+
social-hub intelligence monitor-replay-get --monitor <uuid> --replay <uuid> \
|
|
371
|
+
[--decision matched|indeterminate|excluded|no_match]
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
🔴 **回放不写命中账本、不推进投递水位、不发任何通知**。它算的是「如果当时用这套规则
|
|
375
|
+
会怎样」这个**假设**,结果落在独立的回放表上 —— 原始命中账本(「当初按哪版规则、
|
|
376
|
+
因为什么命中」这个审计事实)一个字都不会被改。响应里的 `sideEffects` 显式声明了这三条。
|
|
377
|
+
|
|
378
|
+
**差分怎么读**(`diff`,回放的产品价值就在这里):
|
|
379
|
+
|
|
380
|
+
| 字段 | 含义 | 怎么用 |
|
|
381
|
+
| -------------------- | ------------------------------ | ----------------------------- |
|
|
382
|
+
| `wouldStopReporting` | 当初报过、新规则下不再报 | 排除词的收益;顺便看有没有误杀 |
|
|
383
|
+
| `wouldNewlyReport` | 当初**被筛掉**、新规则下会报 | 新加的 include 词的收益 |
|
|
384
|
+
| `neverObserved` | 当时**根本没被这个监听观察到** | ⛔ **不是**「规则漏了」 |
|
|
385
|
+
|
|
386
|
+
🔴 `neverObserved` 单列的理由:命中账本对「不命中」**一条都不写**,所以「当初没有账本行」
|
|
387
|
+
既可能是被规则筛掉、也可能是监听那时还没开(或这条帖子是 VOC / 回灌进库的)。
|
|
388
|
+
把两者合并成一句「原来没报」,会让「监听还没开」被读成「规则漏了」。
|
|
389
|
+
|
|
390
|
+
**与 dry-run 的分工**:dry-run 是**不落库**的即时预览、窗口只能取 720/1440;
|
|
391
|
+
回放**落库**、窗口任意(最长 30 天)、并给出上面那份差分。要拿去做上线决策的用回放。
|
|
392
|
+
|
|
393
|
+
### 正文补抓(0171)
|
|
394
|
+
|
|
395
|
+
listing 走渲染兜底时经常拿不到正文,采集端如实标 `unknown`,匹配侧据此判 `missing`。
|
|
396
|
+
0171 起,当该板块**确实有 `scope=body`/`both` 的规则**时,系统会对这些帖子回头补抓一次
|
|
397
|
+
(走既有的 Firecrawl 兜底链,每轮硬顶 12 条、看 deadline、失败不影响报告)。
|
|
398
|
+
|
|
399
|
+
卡片覆盖行会给出「候选 N 条 · 补到 M 条 · 仍拿不到 K 条」。
|
|
400
|
+
🔴 **只报成功数是不够的**:「12 条候选补了 0 条」与「根本没有候选」在通知上必须能分辨 ——
|
|
401
|
+
前者意味着关键词只出现在正文里的帖子这一轮判不了,是**采集问题**。
|
|
327
402
|
|
|
328
403
|
### 近义词扩展(0169)
|
|
329
404
|
|