@geoly-ai/social-hub-cli 0.3.2 → 0.3.4
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 +13 -0
- package/dist/client-delivery.test.d.ts +2 -0
- package/dist/client-delivery.test.d.ts.map +1 -0
- package/dist/client-delivery.test.js +201 -0
- package/dist/client-delivery.test.js.map +1 -0
- package/dist/cmd-manifest.json +25 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +279 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/manifest.json +1 -1
- package/skills/reddit-content-rewrite/SKILL.md +58 -3
- package/skills/reddit-content-writing/SKILL.md +43 -5
- package/skills/reddit-content-writing/references/phase4-writing.md +3 -1
- package/skills/reddit-matrix.lock.json +4 -4
- package/skills/reddit-phase-brief/SKILL.md +30 -13
- package/skills/reddit-phase-brief/references/phase4-brief-workflow.md +39 -4
- package/skills/reddit-strategy-shared/references/content-diversity-contract.md +60 -5
- package/skills/reddit-strategy-shared/references/evidence-policy.md +30 -0
- package/skills/reddit-strategy-shared/references/handoff-schemas.md +7 -3
- package/skills/social-hub-cli/SKILL.md +2 -0
- package/skills/social-hub-intelligence/SKILL.md +33 -0
|
@@ -69,8 +69,8 @@ Required:
|
|
|
69
69
|
- `memory/phase4-内容排期表.md`
|
|
70
70
|
- `memory/phase4-brand-risk-review.md` for any batch with brand-word rows, PGC rows, comparison/review language, external links, product claims, prior negative signals, or subreddit sensitivity; otherwise an explicit low-risk waiver from `reddit-brand-risk-response`
|
|
71
71
|
- `memory/phase4-叙事指纹索引.md` exists as a fixed table with the schema header (`WindowCount`, `WindowDays`, `WindowScope`, `WindowSort`, `BaselineMaxAgeDays`, `HashSchemaVersion`, `IndexRevision`), and has exactly one active `Planned` row for every briefed post Key
|
|
72
|
-
- a valid `SampleSetID` (subreddit baseline, 5–10 recent real posts, word-count median + IQR, with `AcquiredAt` / `ValidUntil`) for every target subreddit in the batch; missing or expired baseline is a `BlockingGap`
|
|
73
|
-
- every post Brief row carries the nine `LockedFingerprintFields` (`ContentFunction`, `StructureFamily`, `OpeningMove`, `EvidenceShape`, `BrandEntryMode`, `CaveatMode`, `EndingMode`, `LengthBand`, `AnchorSlot`) and the four `TraceFields` (`SampleSetID`, `RecentCollisionCheck`, `MappingRuleID`, `MappingVersion`)
|
|
72
|
+
- a valid `SampleSetID` (flair-level subreddit baseline, 5–10 recent real posts, word-count median + IQR, with `AcquiredAt` / `ValidUntil`) for every target subreddit in the batch, recording flair coverage (`BaselineScope` / `BaselineFlair` / `FlairCoverageStatus`); missing or expired baseline, or `FlairCoverageStatus: Insufficient`, is a `BlockingGap`
|
|
73
|
+
- every post Brief row carries the nine `LockedFingerprintFields` (`ContentFunction`, `StructureFamily`, `OpeningMove`, `EvidenceShape`, `BrandEntryMode`, `CaveatMode`, `EndingMode`, `LengthBand`, `AnchorSlot`), the two `PrewritingControlFields` (`AssignedFlair` non-empty; `PostingTrigger` from the controlled five values satisfying the `PostingTrigger × BrandEntryMode` cross-constraint), and the four `TraceFields` (`SampleSetID`, `RecentCollisionCheck`, `MappingRuleID`, `MappingVersion`)
|
|
74
74
|
- every post Brief row carries a `Routing Decision` block with the five candidate-narrowing steps, `MatchedPredicate`, `SelectedStructureFamily`, and `CollisionRepairPath`
|
|
75
75
|
- `RecentCollisionCheck` is `Pass` (or `Exception` with an approved `ExceptionRef`) for every row
|
|
76
76
|
- `brief_approval_mode`
|
|
@@ -118,6 +118,8 @@ ForbiddenStructuralChanges:
|
|
|
118
118
|
PrimaryPostType: # one of the authoritative 9
|
|
119
119
|
MappingRuleID: # when a client prototype applies
|
|
120
120
|
StructureFamily:
|
|
121
|
+
AssignedFlair: # PrewritingControlField; non-empty; NoFlairAvailable/NoFlairRequired for flairless boards
|
|
122
|
+
PostingTrigger: # PrewritingControlField; controlled 5 values; not in the collision triple
|
|
121
123
|
OpeningMove:
|
|
122
124
|
EvidenceShape:
|
|
123
125
|
BrandEntryMode:
|
|
@@ -125,6 +127,7 @@ CaveatMode:
|
|
|
125
127
|
EndingMode:
|
|
126
128
|
LengthBand:
|
|
127
129
|
SampleSetID:
|
|
130
|
+
FlairCoverageStatus: # Exact | ApprovedFallback (Insufficient is a BlockingGap upstream)
|
|
128
131
|
AnchorSlot: # single value, never an "A + B" composite
|
|
129
132
|
SecondaryAnchorSlot: # only for >350-word posts with two ABUs; "—" otherwise
|
|
130
133
|
RecentCollisionCheck:
|
|
@@ -148,6 +151,7 @@ Rules:
|
|
|
148
151
|
in the source, do not guess one and do not load `推荐转化叙事`.
|
|
149
152
|
- Rewrite may only fix factual expression, marketing tone, readability, and explicitly flagged problems.
|
|
150
153
|
- Rewrite may not reorder sections, add a failed attempt, add a question ending, add a caveat, add a community-observation line, move the brand mention, change `AnchorSlot`, or change any of the nine `LockedFingerprintFields`.
|
|
154
|
+
- Rewrite must **preserve `PostingTrigger`** for `ArtifactType: Post`: a body edit that changes the post's real-world trigger (or that breaks the `PostingTrigger × BrandEntryMode` cross-constraint) is out of allowance — flag it instead of applying, so the finished body still re-derives to the `Planned` `PostingTrigger`.
|
|
151
155
|
- Hub `optimized` output that changes a protected structure field may not be adopted wholesale; record `HubStructureConflictStatus: None | Escalated` (see `content-review-gate.md` §3.1). `Escalated` holds the draft and routes to `reddit-phase-brief`.
|
|
152
156
|
- `reddit-content-rewrite` does **not** own `memory/phase4-叙事指纹索引.md`. When its edits change the body, it returns `FingerprintSyncRequired: Yes` / `FingerprintSyncStatus: PendingWritingOwner`; `reddit-content-writing` (the index owner) performs the re-review and hash write-back.
|
|
153
157
|
|
|
@@ -179,7 +183,7 @@ Required:
|
|
|
179
183
|
- `memory/content-review-log.md`
|
|
180
184
|
- `memory/phase4-叙事指纹索引.md` has exactly one active `Final` row for every delivered **main-post** Key (`WindowScope: PostOnly`; comments and external comments need no fingerprint row, only Hub `FinalDraftSha256`)
|
|
181
185
|
- each `Final` row's `DraftHash` equals the `FinalDraftSha256` in `memory/content-review-log.md` and a recomputation from the delivered text using `HashSchemaVersion: reddit-final-draft-sha256-v1`
|
|
182
|
-
- all nine `LockedFingerprintFields` of a delivered post match the Brief's `Planned` values
|
|
186
|
+
- all nine `LockedFingerprintFields` of a delivered post match the Brief's `Planned` values, and the two `PrewritingControlFields` match too: `AssignedFlair` equals the Brief value (and the baseline flair coverage it was written against), and the delivered body's re-derived `PostingTrigger` equals the `Planned` value while satisfying the `PostingTrigger × BrandEntryMode` cross-constraint
|
|
183
187
|
- no delivered post Key collides with any other Key in the rolling window unless an approved `ExceptionRef` exists
|
|
184
188
|
- every post/comment to be delivered has Hub `executionStatus=completed` and `verdict=pass`
|
|
185
189
|
- final delivery rows have `ReviewMode: AccountBound` and a real `accountId`
|
|
@@ -54,6 +54,8 @@ social-hub version --json
|
|
|
54
54
|
|
|
55
55
|
命中上表场景时,**打开对应领域 skill**;不要在总路由里重复展开领域命令细节。
|
|
56
56
|
|
|
57
|
+
> **深度历史(绝对日期 / 往年 / 跨年 / 长期趋势)不是 Hub 能力。** `social-hub intelligence hot-posts` 只读 Hub 近实时缓存(当下热帖,且仅覆盖已入库 watchlist 板块),**不持有深度归档**。凡「历史帖 / 往年数据 / 某年某月 / 绝对日期区间 / 长期趋势演变 / 建 baseline 需历史样本」或用户明确「只用 Arctic」,改用 `reddit-voc-volume` 的 `history` 模式(Arctic Shift 权威源),**不要**用 `intelligence hot-posts` 顶替。注意「最近一天 / 周 / 月」仍是当下声量,走 `reddit-voc-volume` 的 `keyword` / `subreddit`(Hub-First),也不是 hot-posts。详见 `social-hub-intelligence` 的「热帖」三态路由。
|
|
58
|
+
|
|
57
59
|
## CLI 新版本提醒
|
|
58
60
|
|
|
59
61
|
运行任意子命令时(`version`/`help` 除外),CLI 会检测 npm 上的最新版并在 stderr 提示升级;**Agent 应转告用户** 并执行 `npm install -g @geoly-ai/social-hub-cli@latest`。CLI 升级后,新发布的 skill 会在后续运行时同步到已托管目录(含本次新增的 skill)——开启 `SOCIAL_HUB_SKILLS_AUTO_UPDATE=1` 时自动完成,未开启则在 stderr 提示你补齐;无论哪种,手动补齐一律用 `social-hub skills install`(**不是** `update` —— `update` 只刷新已安装的 skill,不会装上新增的)。详见 `social-hub-shared` 的「CLI 新版本检测」。
|
|
@@ -185,6 +185,39 @@ social-hub intelligence hot-posts-create -j '{ ... }'
|
|
|
185
185
|
social-hub intelligence hot-posts-export --subreddit technology > hot-posts.csv
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
+
**口径(`hot-posts` = Hub 近实时缓存,不是历史/归档源)**:`hot-posts` /
|
|
189
|
+
`hot-posts-export` 只返回 Hub **当下/近期**已缓存的热帖快照,且**仅覆盖已入库
|
|
190
|
+
watchlist 的 subreddit**(未监控的板块查不到)。它读的是 Hub 缓存,**不是深度归档**,
|
|
191
|
+
不持有往年数据、不支持时间窗回溯。
|
|
192
|
+
|
|
193
|
+
**负路由(何时 _不_ 用 hot-posts,改用 `reddit-voc-volume` 的 `history` 深归档模式)**:凡下列
|
|
194
|
+
**深度历史**意图**一律不要用 `hot-posts`**,必须改用 **`reddit-voc-volume` 的 `history` 模式**
|
|
195
|
+
(Arctic Shift 深度归档,2005 至今权威源,正文不截断):
|
|
196
|
+
|
|
197
|
+
- 历史帖 / 往年数据 / 某年某月的帖子 / 回溯到 20xx 年 / 截至某日
|
|
198
|
+
- 任意**绝对日期区间**回溯、早于 Hub 覆盖窗口的样本
|
|
199
|
+
- 过去 N 年、跨年 / 同比、按季度、**长期趋势 / 趋势演变**、逐年 / 逐月抽样、历史基准 / 回测
|
|
200
|
+
- 建 subreddit baseline 卡需要历史正文样本 / 长度分布语料
|
|
201
|
+
- 未入库 watchlist 的 subreddit 的历史内容(hot-posts 根本查不到)
|
|
202
|
+
|
|
203
|
+
**用户明确要「只用 Arctic」/「不要用 Hub 数据」时**:固定走 `reddit-voc-volume history`
|
|
204
|
+
(脚本层恒 `arctic_search_posts`、**不接受** `--acquisition-policy`、provenance 恒
|
|
205
|
+
`arctic_shift`),**绝不**用 `hot-posts` 顶替——hot-posts 拿到的是 Hub 缓存,不是 Arctic。
|
|
206
|
+
|
|
207
|
+
**近期窗口 carve-out(别把「最近」误判成深归档)**:「最近一天 / 一周 / 一月、本周、本月、
|
|
208
|
+
当前热度」仍是**当下声量**,**不进 `history`**;但它也不等于 `hot-posts`——按关键词 / 板块
|
|
209
|
+
的近期声量查询应走 **`reddit-voc-volume` 的 `keyword` / `subreddit` 模式(Hub-First,
|
|
210
|
+
`--hub-time-window day|week|month`)**。`hot-posts` 只负责 Hub 已缓存的 watchlist 当前热榜快照。
|
|
211
|
+
|
|
212
|
+
**三态路由判据**:
|
|
213
|
+
|
|
214
|
+
1. 要「**Hub watchlist 现在的热榜 / 缓存快照**」(现在热什么、导出近期热帖 CSV)→ `hot-posts`(本命令,照常用)。
|
|
215
|
+
2. 要「**最近一天 / 周 / 月的关键词或板块当下声量**」→ `reddit-voc-volume` 的 `keyword` / `subreddit`(Hub-First)。
|
|
216
|
+
3. 要「**绝对历史日期 / 跨年 / 早于 Hub 覆盖 / 历史 baseline / 长期趋势演变**」→ `reddit-voc-volume` 的 `history`(Arctic 权威源)。
|
|
217
|
+
|
|
218
|
+
**hot-posts 的合法用途(照常用,别误伤)**:查「当下 watchlist 热榜」、消费 Hub 已缓存的热帖
|
|
219
|
+
快照、按 watchlist 板块看当前热度榜、导出近期热帖 CSV。
|
|
220
|
+
|
|
188
221
|
## KOL
|
|
189
222
|
|
|
190
223
|
```bash
|