@geoly-ai/social-hub-cli 0.1.9 → 0.1.11

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.
Files changed (105) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/dist/cmd-manifest.json +2 -2
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +1 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/config.test.js +4 -1
  7. package/dist/config.test.js.map +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +41 -16
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.test.js +7 -1
  12. package/dist/index.test.js.map +1 -1
  13. package/dist/output.d.ts.map +1 -1
  14. package/dist/output.js.map +1 -1
  15. package/dist/permissions-gates-admin.d.ts.map +1 -1
  16. package/dist/permissions-gates-admin.js +35 -7
  17. package/dist/permissions-gates-admin.js.map +1 -1
  18. package/dist/permissions.d.ts.map +1 -1
  19. package/dist/permissions.js +5 -1
  20. package/dist/permissions.js.map +1 -1
  21. package/dist/permissions.test.js +1 -1
  22. package/dist/permissions.test.js.map +1 -1
  23. package/dist/register-admin.d.ts.map +1 -1
  24. package/dist/register-admin.js +1 -3
  25. package/dist/register-admin.js.map +1 -1
  26. package/dist/register-batch.d.ts.map +1 -1
  27. package/dist/register-batch.js +1 -1
  28. package/dist/register-batch.js.map +1 -1
  29. package/dist/register-extensions.d.ts.map +1 -1
  30. package/dist/register-extensions.js +8 -2
  31. package/dist/register-extensions.js.map +1 -1
  32. package/dist/register-shared.d.ts.map +1 -1
  33. package/dist/register-shared.js +2 -4
  34. package/dist/register-shared.js.map +1 -1
  35. package/dist/register-skills.d.ts +26 -0
  36. package/dist/register-skills.d.ts.map +1 -1
  37. package/dist/register-skills.js +41 -14
  38. package/dist/register-skills.js.map +1 -1
  39. package/dist/register-skills.test.d.ts +2 -0
  40. package/dist/register-skills.test.d.ts.map +1 -0
  41. package/dist/register-skills.test.js +15 -0
  42. package/dist/register-skills.test.js.map +1 -0
  43. package/dist/skills/doctor.d.ts.map +1 -1
  44. package/dist/skills/doctor.js +3 -3
  45. package/dist/skills/doctor.js.map +1 -1
  46. package/dist/skills/github-source.d.ts.map +1 -1
  47. package/dist/skills/github-source.js +10 -3
  48. package/dist/skills/github-source.js.map +1 -1
  49. package/dist/skills/install-planner.d.ts.map +1 -1
  50. package/dist/skills/install-planner.js +8 -2
  51. package/dist/skills/install-planner.js.map +1 -1
  52. package/dist/skills/installer.d.ts.map +1 -1
  53. package/dist/skills/installer.js +3 -2
  54. package/dist/skills/installer.js.map +1 -1
  55. package/dist/skills/manifest.d.ts.map +1 -1
  56. package/dist/skills/manifest.js.map +1 -1
  57. package/dist/skills/marketplace-adapters/claude-plugin.d.ts.map +1 -1
  58. package/dist/skills/marketplace-adapters/claude-plugin.js.map +1 -1
  59. package/dist/skills/marketplace-adapters/skills-sh.d.ts.map +1 -1
  60. package/dist/skills/marketplace-adapters/skills-sh.js +1 -1
  61. package/dist/skills/marketplace-adapters/skills-sh.js.map +1 -1
  62. package/dist/skills/prompt-state.d.ts +56 -0
  63. package/dist/skills/prompt-state.d.ts.map +1 -0
  64. package/dist/skills/prompt-state.js +182 -0
  65. package/dist/skills/prompt-state.js.map +1 -0
  66. package/dist/skills/prompt-state.test.d.ts +2 -0
  67. package/dist/skills/prompt-state.test.d.ts.map +1 -0
  68. package/dist/skills/prompt-state.test.js +172 -0
  69. package/dist/skills/prompt-state.test.js.map +1 -0
  70. package/dist/skills/prompt.d.ts +23 -0
  71. package/dist/skills/prompt.d.ts.map +1 -0
  72. package/dist/skills/prompt.js +92 -0
  73. package/dist/skills/prompt.js.map +1 -0
  74. package/dist/skills/prompt.test.d.ts +2 -0
  75. package/dist/skills/prompt.test.d.ts.map +1 -0
  76. package/dist/skills/prompt.test.js +98 -0
  77. package/dist/skills/prompt.test.js.map +1 -0
  78. package/dist/skills/source-resolver.d.ts.map +1 -1
  79. package/dist/skills/source-resolver.js +6 -3
  80. package/dist/skills/source-resolver.js.map +1 -1
  81. package/dist/skills/state-store.d.ts.map +1 -1
  82. package/dist/skills/state-store.js.map +1 -1
  83. package/dist/skills/target-detector.d.ts.map +1 -1
  84. package/dist/skills/target-detector.js +3 -1
  85. package/dist/skills/target-detector.js.map +1 -1
  86. package/dist/skills/target-detector.test.js +3 -1
  87. package/dist/skills/target-detector.test.js.map +1 -1
  88. package/dist/skills/tui.d.ts +3 -0
  89. package/dist/skills/tui.d.ts.map +1 -1
  90. package/dist/skills/tui.js +79 -23
  91. package/dist/skills/tui.js.map +1 -1
  92. package/dist/skills/tui.test.js +10 -2
  93. package/dist/skills/tui.test.js.map +1 -1
  94. package/dist/update-check.d.ts.map +1 -1
  95. package/dist/update-check.js.map +1 -1
  96. package/dist/update-check.test.js.map +1 -1
  97. package/package.json +2 -2
  98. package/skills/manifest.json +1 -1
  99. package/skills/social-hub-accounts/SKILL.md +4 -4
  100. package/skills/social-hub-cli/evals/evals.json +4 -1
  101. package/skills/social-hub-events-observability/SKILL.md +4 -4
  102. package/skills/social-hub-intelligence/SKILL.md +34 -3
  103. package/skills/social-hub-openclaw-context/SKILL.md +1 -1
  104. package/skills/social-hub-posts/SKILL.md +5 -0
  105. package/skills/social-hub-shared/SKILL.md +28 -28
@@ -50,25 +50,56 @@ social-hub intelligence tier-rules-delete -t <team-id> --id <uuid>
50
50
 
51
51
  ## 抓取任务(异步 run)
52
52
 
53
+ 品牌洞察默认使用 **Reddit 搜索 VOC 采样**(`sourceMode=search`),不是 watchlist 热帖过滤。
54
+ `sourceMode=watchlists` 保留给运营热帖扫描;`hybrid` 先搜索再补充 watchlist 结果。
55
+
53
56
  ```bash
54
57
  social-hub intelligence fetch-by-industry -t <team-id> -j '{"mode":"all","industryKeys":["tech"],"sort":"hot","limitPerSubreddit":25}'
55
58
  social-hub intelligence fetch-by-tier -t <team-id> -j '{"mode":"all","tier":"T1","sort":"hot"}'
56
- social-hub intelligence fetch-by-keywords -t <team-id> -j '{"mode":"all","brandKeywords":["brand"],"competitorKeywords":["rival"]}'
57
- social-hub intelligence runs-list -t <team-id> [--dimension industry] [--status queued]
59
+ social-hub intelligence fetch-by-keywords -t <team-id> -j '{
60
+ "mode":"all",
61
+ "brandKeywords":["brand"],
62
+ "competitorKeywords":["rival"],
63
+ "sourceMode":"search",
64
+ "redditSort":"relevance",
65
+ "redditTime":"month",
66
+ "limitPerQuery":10,
67
+ "maxPages":1
68
+ }'
69
+ social-hub intelligence fetch-by-keywords -t <team-id> -j '{
70
+ "mode":"all",
71
+ "brandKeywords":["brand"],
72
+ "sourceMode":"watchlists",
73
+ "sort":"hot",
74
+ "limitPerSubreddit":30
75
+ }'
76
+ social-hub intelligence runs-list -t <team-id> [--dimension keywords] [--status queued]
58
77
  ```
59
78
 
79
+ Run 的 `resultPayload` 会保存 VOC 结构化结果(items/summary/rateLimit/requestIdentity/notes/errors),
80
+ 便于 UI 诊断。输出口径与 `reddit-voc-volume` skill 一致:低频采样、结构化 JSON、
81
+ score/upvote_ratio 为 Reddit 公开字段而非全站真实总量。
82
+
60
83
  ## Insights
61
84
 
62
85
  ```bash
63
86
  social-hub intelligence brand-mention-radar -t <team-id> -j '{"keywords":["brand"]}'
64
87
  social-hub intelligence opportunity-map -t <team-id> -j '{"keywords":["topic"]}'
65
88
  social-hub intelligence sov -t <team-id> -j '{"brandKeywords":["brand"],"competitorKeywords":["rival"]}'
66
- social-hub intelligence sentiment-intent -t <team-id>
89
+ social-hub intelligence sentiment-intent -t <team-id> --keywords brand,rival
67
90
  social-hub intelligence campaign-lift -t <team-id> -j '{"keywords":["brand"],"campaignStartAt":"2026-01-01T00:00:00Z","campaignEndAt":"2026-02-01T00:00:00Z"}'
68
91
  social-hub intelligence snapshot-latest -t <team-id>
69
92
  social-hub intelligence snapshot-save -t <team-id> -j '{"payload":{"note":"manual snapshot"}}'
70
93
  ```
71
94
 
95
+ ## Reddit 帖子表现刷新(worker)
96
+
97
+ Worker 侧帖子刷新与 VOC 采样共用 `PublicRedditClient`:
98
+
99
+ - 主路径:匿名 `.json` + `curl_cffi` / native fetch(`REDDIT_REFRESH_AUTH_MODE=none`)
100
+ - 兜底:headless Chromium(`REDDIT_BROWSER_FALLBACK_ENABLED=true` 时启用)
101
+ - 容器默认关闭 browser fallback;需要灰度时在 worker 环境打开并确保 Chromium 可用
102
+
72
103
  ## 派发到调度任务
73
104
 
74
105
  ```bash
@@ -81,7 +81,7 @@ social-hub query subreddit-candidates -t <team-id> --account A1 --action browse
81
81
  | `personaPools.expandedByKind` | 按来源汇总:`direct` / `common` / `industry` / `pet` / `brand` 的 `r/...` 列表 |
82
82
  | `personaPools.expandedPools[].subreddits` | 每个 pool ref 展开后的具体板块(可多条) |
83
83
  | `personaPools.brandPools` | 账号品牌绑定及对应 `brand_pools.*` ref 展开结果 |
84
- | `personaPools.unresolvedRefs` | alias 表无法解析的 ref;正常 seed 后 P01-P57 的 `starter/advanced/pet_pool` 不应出现 |
84
+ | `personaPools.unresolvedRefs` | alias 表无法解析的 ref;正常 seed 后 P01-P57 的 `starter/advanced/pet_pool` 不应出现 |
85
85
  | `fallback.reason` | 如 `candidate_pool_exhausted` 须在 Agent 回执说明 |
86
86
 
87
87
  **Agent 门禁**:
@@ -34,11 +34,13 @@ metadata:
34
34
 
35
35
  ```bash
36
36
  social-hub reddit list -t <team-id> -n 20
37
+ social-hub reddit list -t <team-id> --ops-status normal --post-type post
37
38
  social-hub reddit list-full -t <team-id> --brand <brand-uuid> -n 50
38
39
  social-hub reddit list -t <team-id> --aggregate --all
39
40
  social-hub reddit stats -t <team-id> --aggregate --range 30
40
41
  social-hub reddit stats -t <team-id> --aggregate --range all
41
42
  social-hub reddit stats -t <team-id> --brand <uuid> --aggregate --range 90
43
+ social-hub reddit stats -t <team-id> --ops-status risk --contains-brand-keyword true --primary-product "PLAUD Note"
42
44
  social-hub reddit refresh-status -t <team-id>
43
45
  social-hub reddit refresh -t <team-id> --snapshot <snapshotId>
44
46
  social-hub reddit refresh-progress -t <team-id> --batch <batchId>
@@ -48,6 +50,8 @@ social-hub reddit refresh-logs -t <team-id> -n 20
48
50
 
49
51
  筛选帖表现时优先 **`--brand`**,勿把 `--campaign` 当作品牌 ID。
50
52
 
53
+ **`opsStatus` 约定(canonical,勿传中文或 `banned`):** `normal` | `risk` | `deleted` | `abnormal` | `unknown`。列表与 stats 均支持 `--ops-status`;stats 同样支持 `--contains-brand-keyword` 与 `--primary-product`,筛选口径与 Web 帖子表现页一致。
54
+
51
55
  ## 单条写入与更新
52
56
 
53
57
  ```bash
@@ -103,6 +107,7 @@ social-hub reddit batch-upsert -t <team-id> -j '{
103
107
 
104
108
  - **必填(推荐)**:`subreddit`;有真实 Reddit 链接时带 `permalink`
105
109
  - **可选**:`title`、`score`、`commentsCount`、`viewCount`、`upvoteRatio`、`postedAt`、`source`、`publishDoc`、`rawPayload`
110
+ - **`opsStatus`**:只写 canonical 值(`normal|risk|deleted|abnormal|unknown`),导入/更新时勿写中文标签。
106
111
  - **`socialAccountId`**:OpenClaw profile 扫描时建议带上(来自 `context account` 的 `account.id`),用于把快照归因到运营账号。
107
112
  - **`viewCount`**:浏览/曝光。平台页面不可见时传 `null`,不要臆造。
108
113
  - **`upvoteRatio`**:页面可读时传 0–1 小数;不可得时省略。
@@ -15,11 +15,11 @@ metadata:
15
15
 
16
16
  ## 凭证与配置真源
17
17
 
18
- | 项 | 推荐来源 | 说明 |
19
- |---|---|---|
20
- | API 地址 | `~/.config/social-hub/config.json` → `apiUrl` | 生产默认 `https://reddit.eclick-geo.com/api` |
21
- | 凭证 | 同上 → `authToken`(Device Code 登录后写入) | CLI 内部以 Bearer 发送;**不要用环境变量传 key** |
22
- | 默认 team | `context.json` 的 `currentTeamId` 或 config 的 `teamId` | 用 `social-hub context use` 持久化 |
18
+ | 项 | 推荐来源 | 说明 |
19
+ | --------- | ------------------------------------------------------- | ------------------------------------------------ |
20
+ | API 地址 | `~/.config/social-hub/config.json` → `apiUrl` | 生产默认 `https://reddit.eclick-geo.com/api` |
21
+ | 凭证 | 同上 → `authToken`(Device Code 登录后写入) | CLI 内部以 Bearer 发送;**不要用环境变量传 key** |
22
+ | 默认 team | `context.json` 的 `currentTeamId` 或 config 的 `teamId` | 用 `social-hub context use` 持久化 |
23
23
 
24
24
  配置文件路径:`~/.config/social-hub/config.json`(权限 `600`)。
25
25
 
@@ -128,11 +128,11 @@ CLI 仍兼容 `social-hub auth login --api-key sk_live_…` 与 `SOCIAL_HUB_API_
128
128
 
129
129
  Device Code 授权后,**`internal` 不足以**完成互动 CRON / ip-check / onboard 的常见 Hub 主写(例如 `events append`、`accounts update`、`accounts browser-envs update`)。部署 OpenClaw 执行 Agent 时,请为对应 Web 用户分配:
130
130
 
131
- | 最低 role | 典型 runtime 能力 |
132
- |-----------|-------------------|
131
+ | 最低 role | 典型 runtime 能力 |
132
+ | -------------- | -------------------------------------------------------------------------------------------------------------- |
133
133
  | **supervisor** | 推荐默认:`events append`、`accounts update`、`status-snapshots create`、`browser-envs create/update`、`ops *` |
134
- | **senior** | 只读 + `events append` / `ops *`(**不能** `accounts update` 或 browser-env telemetry) |
135
- | **internal** | 只读 + `ops` 状态更新;**不能** `events append` 或账号/browser-env 写 |
134
+ | **senior** | 只读 + `events append` / `ops *`(**不能** `accounts update` 或 browser-env telemetry) |
135
+ | **internal** | 只读 + `ops` 状态更新;**不能** `events append` 或账号/browser-env 写 |
136
136
 
137
137
  若不能升 role,请 admin 在 Hub 为成员配置 **permission overrides**(覆盖 `task:create`、`socialAccount:update`、`browserEnvironment:update` 等)。`auth explain` 与 `authz evaluate` 均应在上线前跑一遍。
138
138
 
@@ -142,13 +142,13 @@ admin 专属操作(如 `agent-teams create`)需要 **admin** role 的 CLI to
142
142
 
143
143
  ## 品牌 vs Campaign(Agent 必读)
144
144
 
145
- | 概念 | 正确 CLI / 字段 | 勿用于新流程 |
146
- |------|-----------------|-------------|
147
- | 品牌(系统级) | `brands system-list` / `brandId` | `campaigns list` 当品牌目录 |
148
- | 品牌成员 | `brand-members system-*` | `brand-members list -t`(compat) |
149
- | 账号归属品牌 | `accounts brand-bindings *` | `campaigns accounts *` |
150
- | 草稿 / 计划 | `drafts create -j '{"brandId":...}'` | 必填 `campaignId` 创建新草稿 |
151
- | 筛选 | `--brand <uuid>` | 仅 `--campaign` 作新默认 |
145
+ | 概念 | 正确 CLI / 字段 | 勿用于新流程 |
146
+ | -------------- | ------------------------------------ | --------------------------------- |
147
+ | 品牌(系统级) | `brands system-list` / `brandId` | `campaigns list` 当品牌目录 |
148
+ | 品牌成员 | `brand-members system-*` | `brand-members list -t`(compat) |
149
+ | 账号归属品牌 | `accounts brand-bindings *` | `campaigns accounts *` |
150
+ | 草稿 / 计划 | `drafts create -j '{"brandId":...}'` | 必填 `campaignId` 创建新草稿 |
151
+ | 筛选 | `--brand <uuid>` | 仅 `--campaign` 作新默认 |
152
152
 
153
153
  **禁止**向用户推荐:`campaigns create`、`campaigns update`、`campaigns accounts bind` 作为新客户/品牌建模。
154
154
 
@@ -163,13 +163,13 @@ admin 专属操作(如 `agent-teams create`)需要 **admin** role 的 CLI to
163
163
 
164
164
  ## 排障顺序(简表)
165
165
 
166
- | 现象 | 检查 |
167
- |------|------|
168
- | Not logged in | `social-hub auth login` |
169
- | API unreachable | `config show` 的 apiUrl;生产应为 `https://reddit.eclick-geo.com/api` |
170
- | Missing team id | `context use <uuid>` 或命令加 `-t` |
171
- | team 不一致 warning | `auth whoami` 的 teamId vs `context current` |
172
- | 401 / auth failed | 重新 `auth login`;过期则 `auth logout` 后重登 |
166
+ | 现象 | 检查 |
167
+ | ------------------- | --------------------------------------------------------------------- |
168
+ | Not logged in | `social-hub auth login` |
169
+ | API unreachable | `config show` 的 apiUrl;生产应为 `https://reddit.eclick-geo.com/api` |
170
+ | Missing team id | `context use <uuid>` 或命令加 `-t` |
171
+ | team 不一致 warning | `auth whoami` 的 teamId vs `context current` |
172
+ | 401 / auth failed | 重新 `auth login`;过期则 `auth logout` 后重登 |
173
173
 
174
174
  ## CLI 新版本检测(自动)
175
175
 
@@ -184,12 +184,12 @@ admin 专属操作(如 `agent-teams create`)需要 **admin** role 的 CLI to
184
184
  [social-hub] Agent: tell the user a newer CLI is available; ...
185
185
  ```
186
186
 
187
- | 场景 | 行为 |
188
- |------|------|
189
- | 全局安装 | `npm install -g @geoly-ai/social-hub-cli@<latest>` |
190
- | npx 调用 | 后续命令使用 `npx @geoly-ai/social-hub-cli@<latest> …` |
187
+ | 场景 | 行为 |
188
+ | -------- | ------------------------------------------------------------------ |
189
+ | 全局安装 | `npm install -g @geoly-ai/social-hub-cli@<latest>` |
190
+ | npx 调用 | 后续命令使用 `npx @geoly-ai/social-hub-cli@<latest> …` |
191
191
  | 跳过检查 | `SOCIAL_HUB_NO_UPDATE_CHECK=1` 或 `social-hub --no-update-check …` |
192
- | CI | 设置 `CI=true` 时自动跳过 |
192
+ | CI | 设置 `CI=true` 时自动跳过 |
193
193
 
194
194
  Agent 看到上述 stderr 时:**先向用户说明有新版本**,再执行升级命令,最后 `social-hub skills update --yes`(避免 CLI 与 skill 文档/命令漂移)。
195
195