@geoly-ai/social-hub-cli 0.3.32 → 0.3.33

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 CHANGED
@@ -4,6 +4,16 @@ 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.33] - 2026-08-28
8
+
9
+ ### Added
10
+
11
+ - subreddit-candidates 返回 exhaustion,区分「空」的三类含义
12
+
13
+ ### Fixed
14
+
15
+ - 全量跑的偶发红是 5000ms 默认超时,不是「机制未查实的 flaky」
16
+
7
17
  ## [0.3.32] - 2026-08-28
8
18
 
9
19
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-08-28T07:20:24.565Z",
3
- "cliVersion": "0.3.32",
2
+ "generatedAt": "2026-08-28T14:35:51.817Z",
3
+ "cliVersion": "0.3.33",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoly-ai/social-hub-cli",
3
- "version": "0.3.32",
3
+ "version": "0.3.33",
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.19",
26
- "@geoly-ai/social-hub-sdk": "0.1.5"
26
+ "@geoly-ai/social-hub-sdk": "0.1.6"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "^22.10.2",
@@ -4,7 +4,7 @@
4
4
  "fileCount": 1656,
5
5
  "files": {
6
6
  "README.md": "5246d4ae2712e3e656b101041929183d7ae7f8ea487dacf5854187826ab7c335",
7
- "manifest.json": "41f3c460692b973135e79d63882f490c167e4d2d9fd699e39f67c24acfd0fc9e",
7
+ "manifest.json": "31478ce9f69ae1e789065feba800e702fdf6f7bf8e6a2f18a5c45cb84fabfe63",
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",
@@ -1646,7 +1646,7 @@
1646
1646
  "social-hub-intelligence/SKILL.md": "a3f615eb19c96161cbbcf7d014b51f9980149ffa4a5ef11f19352db813fa047d",
1647
1647
  "social-hub-migration/SKILL.md": "1c13f231bb81ae8d242c834eec93a499830481804c66f6dba95922972f56f9ce",
1648
1648
  "social-hub-notifications/SKILL.md": "f80f4cf2f9ef0dbf60bd6e8bb4ad7e27dc0ff1fe59f4c7e79e49cc691ed4be6a",
1649
- "social-hub-openclaw-context/SKILL.md": "701c5f7dd97f10fcf6d0bd34d1ca4d173d44e1d8a21a2b3b225da99549bf2710",
1649
+ "social-hub-openclaw-context/SKILL.md": "97c48f38f1f1a206c3af2af49fcd445a1cd5b78d4a9c805c2456de4ce98fec09",
1650
1650
  "social-hub-ops-runtime/SKILL.md": "2fcf257f9c2a36236564fc9056605f2df1d706e0a6f290de68b05ac44890ae3e",
1651
1651
  "social-hub-post-review/SKILL.md": "20a0d4886d1fc70397f9f3e5e25672e69608b1cce56971e1b2401e817fbf3cb6",
1652
1652
  "social-hub-posts/SKILL.md": "bacb6e8f6880f4f60ad9068c6f7ba07e38fa68560dcd03052b0f82ad064391ab",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "package": "social-ops-hub",
4
- "cliVersion": "0.3.32",
4
+ "cliVersion": "0.3.33",
5
5
  "repository": "social-ops-hub",
6
6
  "publish": {
7
7
  "registry": "https://skill.sh",
@@ -144,6 +144,37 @@ social-hub query subreddit-candidates -t <team-id> --account A1 --action browse
144
144
  | `personaPools.brandPools` | 账号品牌绑定及对应 `brand_pools.*` ref 展开结果 |
145
145
  | `personaPools.unresolvedRefs` | alias 表无法解析的 ref;正常 seed 后 P01-P57 的 `starter/advanced/pet_pool` 不应出现 |
146
146
  | `fallback.reason` | 如 `candidate_pool_exhausted` 须在 Agent 回执说明 |
147
+ | `exhaustion.reason` | **`items` 为空时是哪一类空** —— 用它判「要不要惊动人」,见下 |
148
+
149
+ ### `items: []` 到底是哪一类空(`exhaustion`)
150
+
151
+ `items: []` 至少有三种**处置方式完全相反**的含义,**不要**靠再查一次 browse 反推——
152
+ 直接读 `exhaustion.reason`:
153
+
154
+ | `reason` | 含义 | 要不要惊动人 |
155
+ | ------------------------------------------- | --------------------------------------------- | -------------------------------- |
156
+ | `all_comment_cooldown` | 近 24h 已在这些板评论过 | **不要**,回执写「已达当日覆盖」 |
157
+ | `all_action_not_permitted` | 结构性:系统共享池不作评论目标 | **不要**,换 `--action browse` |
158
+ | `all_sanctioned` / `all_blocklisted` | 被账号制裁 / 系统 blocklist 拦光 | **要**,人工换板 |
159
+ | `all_tier_filtered` / `all_quota_truncated` | tier 不匹配 / 被分档配额挤掉 | **要**,调参数 |
160
+ | `pool_empty` | 池子真的空 | **要**,修池子数据 |
161
+ | `persona_unavailable` | 没挂人设 / 人设停用 / `--persona-aware false` | **要**,去绑人设 |
162
+ | `resolution_incomplete` | **源集合没查全,说不清** | **要**,按说不清处置 |
163
+ | `mixed_exhausted` | 多个原因并存,不硬选一个 | **要**,看 `terminal` 明细 |
164
+
165
+ 🔴 **`complete: false` 时任何 `all_*` 都不成立**,`reason` 会是 `resolution_incomplete`,
166
+ `incompleteReasons` 说明是哪一种(人设 industry key 超 50 的硬门 / 单 key 500 行打满 /
167
+ 互动事件扫描打满 / 有未解析的池 ref)。这时**不要**去查制裁列表——
168
+ 「没查到」和「查了但都被拦掉」是两回事。
169
+
170
+ - `terminal`:**互斥且守恒**的终局归属,`Σ terminal + returnedBoards === eligibleBeforeFilters`。
171
+ - `filtered`:各闸 raw 命中数,**允许重叠**(一个板可能既命中 blocklist 又命中制裁),
172
+ 只用于排障,**不要**拿它选 reason。
173
+ - `returnedBoards` 按板块去重,`returned` 与 `items` 条数对齐(同板不同 scope 占两条)。
174
+
175
+ ⛔ **`exhaustion` 不是准入依据。** 它是诊断快照,可能因并发变更或查询上限而滞后。
176
+ 能不能去某个板**只由** `items` 与 `items[].allowedActions` 决定。
177
+ (`affinity` 就差点被当成「可去板块」的依据——同一个坑不要换个字段再踩一次。)
147
178
 
148
179
  **Agent 门禁**:
149
180