@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.
- package/CHANGELOG.md +75 -1
- package/dist/cmd-manifest.json +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +4 -1
- package/dist/config.test.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -16
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +7 -1
- package/dist/index.test.js.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js.map +1 -1
- package/dist/permissions-gates-admin.d.ts.map +1 -1
- package/dist/permissions-gates-admin.js +35 -7
- package/dist/permissions-gates-admin.js.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +5 -1
- package/dist/permissions.js.map +1 -1
- package/dist/permissions.test.js +1 -1
- package/dist/permissions.test.js.map +1 -1
- package/dist/register-admin.d.ts.map +1 -1
- package/dist/register-admin.js +1 -3
- package/dist/register-admin.js.map +1 -1
- package/dist/register-batch.d.ts.map +1 -1
- package/dist/register-batch.js +1 -1
- package/dist/register-batch.js.map +1 -1
- package/dist/register-extensions.d.ts.map +1 -1
- package/dist/register-extensions.js +8 -2
- package/dist/register-extensions.js.map +1 -1
- package/dist/register-shared.d.ts.map +1 -1
- package/dist/register-shared.js +2 -4
- package/dist/register-shared.js.map +1 -1
- package/dist/register-skills.d.ts +26 -0
- package/dist/register-skills.d.ts.map +1 -1
- package/dist/register-skills.js +41 -14
- package/dist/register-skills.js.map +1 -1
- package/dist/register-skills.test.d.ts +2 -0
- package/dist/register-skills.test.d.ts.map +1 -0
- package/dist/register-skills.test.js +15 -0
- package/dist/register-skills.test.js.map +1 -0
- package/dist/skills/doctor.d.ts.map +1 -1
- package/dist/skills/doctor.js +3 -3
- package/dist/skills/doctor.js.map +1 -1
- package/dist/skills/github-source.d.ts.map +1 -1
- package/dist/skills/github-source.js +10 -3
- package/dist/skills/github-source.js.map +1 -1
- package/dist/skills/install-planner.d.ts.map +1 -1
- package/dist/skills/install-planner.js +8 -2
- package/dist/skills/install-planner.js.map +1 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +3 -2
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/manifest.d.ts.map +1 -1
- package/dist/skills/manifest.js.map +1 -1
- package/dist/skills/marketplace-adapters/claude-plugin.d.ts.map +1 -1
- package/dist/skills/marketplace-adapters/claude-plugin.js.map +1 -1
- package/dist/skills/marketplace-adapters/skills-sh.d.ts.map +1 -1
- package/dist/skills/marketplace-adapters/skills-sh.js +1 -1
- package/dist/skills/marketplace-adapters/skills-sh.js.map +1 -1
- package/dist/skills/prompt-state.d.ts +56 -0
- package/dist/skills/prompt-state.d.ts.map +1 -0
- package/dist/skills/prompt-state.js +182 -0
- package/dist/skills/prompt-state.js.map +1 -0
- package/dist/skills/prompt-state.test.d.ts +2 -0
- package/dist/skills/prompt-state.test.d.ts.map +1 -0
- package/dist/skills/prompt-state.test.js +172 -0
- package/dist/skills/prompt-state.test.js.map +1 -0
- package/dist/skills/prompt.d.ts +23 -0
- package/dist/skills/prompt.d.ts.map +1 -0
- package/dist/skills/prompt.js +92 -0
- package/dist/skills/prompt.js.map +1 -0
- package/dist/skills/prompt.test.d.ts +2 -0
- package/dist/skills/prompt.test.d.ts.map +1 -0
- package/dist/skills/prompt.test.js +98 -0
- package/dist/skills/prompt.test.js.map +1 -0
- package/dist/skills/source-resolver.d.ts.map +1 -1
- package/dist/skills/source-resolver.js +6 -3
- package/dist/skills/source-resolver.js.map +1 -1
- package/dist/skills/state-store.d.ts.map +1 -1
- package/dist/skills/state-store.js.map +1 -1
- package/dist/skills/target-detector.d.ts.map +1 -1
- package/dist/skills/target-detector.js +3 -1
- package/dist/skills/target-detector.js.map +1 -1
- package/dist/skills/target-detector.test.js +3 -1
- package/dist/skills/target-detector.test.js.map +1 -1
- package/dist/skills/tui.d.ts +3 -0
- package/dist/skills/tui.d.ts.map +1 -1
- package/dist/skills/tui.js +79 -23
- package/dist/skills/tui.js.map +1 -1
- package/dist/skills/tui.test.js +10 -2
- package/dist/skills/tui.test.js.map +1 -1
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js.map +1 -1
- package/dist/update-check.test.js.map +1 -1
- package/package.json +2 -2
- package/skills/manifest.json +1 -1
- package/skills/social-hub-accounts/SKILL.md +4 -4
- package/skills/social-hub-cli/evals/evals.json +4 -1
- package/skills/social-hub-events-observability/SKILL.md +4 -4
- package/skills/social-hub-intelligence/SKILL.md +34 -3
- package/skills/social-hub-openclaw-context/SKILL.md +1 -1
- package/skills/social-hub-posts/SKILL.md +5 -0
- 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 '{
|
|
57
|
-
|
|
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 地址
|
|
21
|
-
| 凭证
|
|
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
|
|
132
|
-
|
|
131
|
+
| 最低 role | 典型 runtime 能力 |
|
|
132
|
+
| -------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
133
133
|
| **supervisor** | 推荐默认:`events append`、`accounts update`、`status-snapshots create`、`browser-envs create/update`、`ops *` |
|
|
134
|
-
| **senior**
|
|
135
|
-
| **internal**
|
|
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
|
-
| 概念
|
|
146
|
-
|
|
147
|
-
| 品牌(系统级) | `brands system-list` / `brandId`
|
|
148
|
-
| 品牌成员
|
|
149
|
-
| 账号归属品牌
|
|
150
|
-
| 草稿 / 计划
|
|
151
|
-
| 筛选
|
|
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
|
|
169
|
-
| API unreachable
|
|
170
|
-
| Missing team id
|
|
171
|
-
| team 不一致 warning | `auth whoami` 的 teamId vs `context current`
|
|
172
|
-
| 401 / auth failed
|
|
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
|
|
192
|
+
| CI | 设置 `CI=true` 时自动跳过 |
|
|
193
193
|
|
|
194
194
|
Agent 看到上述 stderr 时:**先向用户说明有新版本**,再执行升级命令,最后 `social-hub skills update --yes`(避免 CLI 与 skill 文档/命令漂移)。
|
|
195
195
|
|