@geoly-ai/social-hub-cli 0.1.6 → 0.1.8

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,29 @@ 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.1.8] - 2026-06-05
8
+
9
+ Bundle updated Social Hub subreddit pool skills and persona pool alias guidance.
10
+ ## [0.1.7] - 2026-06-04
11
+
12
+ ### Added
13
+ - Hub-first ops runtime, style-curator skill, and post list UX
14
+ - complete repost link support
15
+ - brand-first publishing scope, persona-aware pools, cli update check
16
+ - persona-aware subreddit candidates and diversity selection
17
+ - extend system library fields and import dataset
18
+ - server-side filters, refresh run logs, CLI/SDK sync
19
+ - sanctions update/delete and blocklist UI on RiskCenter
20
+ - move subreddit blocklists to system level
21
+ - status-snapshot externalRef idempotency and CLI cmd manifest
22
+ - add system persona library and account personaId linking
23
+ - reddit --aggregate/--all 分页,stats --range 365|all;SDK 补聚合与 offset 参数
24
+
25
+ ### Fixed
26
+ - auto-detect managed dirs for skills update/remove
27
+
28
+ ### Changed
29
+ - close admin gap with db/api/e2e coverage
7
30
  ## [0.1.6] - 2026-06-04
8
31
 
9
32
  Post Performance repost-link fields and CLI skill/help alignment.
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-06-04T07:26:49.318Z",
3
- "cliVersion": "0.1.6",
2
+ "generatedAt": "2026-06-05T01:51:36.942Z",
3
+ "cliVersion": "0.1.8",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
@@ -1 +1 @@
1
- {"version":3,"file":"register-ops.d.ts","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsHzD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+E3D"}
1
+ {"version":3,"file":"register-ops.d.ts","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyHzD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF3D"}
@@ -1,13 +1,16 @@
1
1
  import { requireClient, resolveTeamId } from "./client.js";
2
- import { parseJsonOption, printResult, withCliErrorBoundary } from "./output.js";
2
+ import { parseJsonOption, printResult, withCliErrorBoundary, } from "./output.js";
3
3
  export function registerOpsRuntime(program) {
4
4
  const ops = program.command("ops").description("OpenClaw Agent 任务运行时");
5
- const agentOpt = ["--agent <agentId>", "Agent 标识"];
5
+ const agentRequired = [
6
+ "--agent <agentId>",
7
+ "Agent 标识(OpenClaw 执行岗 ID)",
8
+ ];
6
9
  ops
7
10
  .command("claim-next")
8
11
  .description("领取下一条可执行任务")
9
12
  .requiredOption("-t, --team <teamId>", "Team UUID")
10
- .option(...agentOpt)
13
+ .requiredOption(...agentRequired)
11
14
  .option("--account <socialAccountId>", "限定账号")
12
15
  .option("--lease-seconds <n>", "租约秒数", "300")
13
16
  .action(async (opts) => {
@@ -26,7 +29,7 @@ export function registerOpsRuntime(program) {
26
29
  .description("领取指定任务")
27
30
  .requiredOption("-t, --team <teamId>", "Team UUID")
28
31
  .requiredOption("--job <jobId>", "Scheduled job UUID")
29
- .option(...agentOpt)
32
+ .requiredOption(...agentRequired)
30
33
  .option("--lease-seconds <n>", "租约秒数", "300")
31
34
  .action(async (opts) => {
32
35
  await withCliErrorBoundary(async () => {
@@ -43,7 +46,7 @@ export function registerOpsRuntime(program) {
43
46
  .command("heartbeat")
44
47
  .requiredOption("-t, --team <teamId>", "Team UUID")
45
48
  .requiredOption("--job <jobId>", "Job UUID")
46
- .option(...agentOpt)
49
+ .requiredOption(...agentRequired)
47
50
  .action(async (opts) => {
48
51
  await withCliErrorBoundary(async () => {
49
52
  const teamId = resolveTeamId(opts.team);
@@ -58,7 +61,7 @@ export function registerOpsRuntime(program) {
58
61
  .command("complete")
59
62
  .requiredOption("-t, --team <teamId>", "Team UUID")
60
63
  .requiredOption("--job <jobId>", "Job UUID")
61
- .option(...agentOpt)
64
+ .requiredOption(...agentRequired)
62
65
  .option("--permalink <url>", "Reddit permalink")
63
66
  .option("-j, --json <json>", "附加结果 JSON", "{}")
64
67
  .action(async (opts) => {
@@ -78,7 +81,7 @@ export function registerOpsRuntime(program) {
78
81
  .requiredOption("-t, --team <teamId>", "Team UUID")
79
82
  .requiredOption("--job <jobId>", "Job UUID")
80
83
  .requiredOption("--reason <code>", "标准失败原因枚举")
81
- .option(...agentOpt)
84
+ .requiredOption(...agentRequired)
82
85
  .option("--message <text>", "详情")
83
86
  .action(async (opts) => {
84
87
  await withCliErrorBoundary(async () => {
@@ -97,7 +100,7 @@ export function registerOpsRuntime(program) {
97
100
  .requiredOption("-t, --team <teamId>", "Team UUID")
98
101
  .requiredOption("--job <jobId>", "Job UUID")
99
102
  .requiredOption("--reason <code>", "标准跳过原因枚举")
100
- .option(...agentOpt)
103
+ .requiredOption(...agentRequired)
101
104
  .option("--message <text>", "详情")
102
105
  .action(async (opts) => {
103
106
  await withCliErrorBoundary(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"register-ops.js","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-ops.js","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoly-ai/social-hub-cli",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "description": "social-hub CLI for Social Ops Hub",
6
6
  "repository": {
package/skills/README.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  ### Skills 来源
6
6
 
7
- | 来源 | 命令 | 说明 |
8
- |------|------|------|
9
- | **bundled(默认)** | `social-hub skills install …` | npm 包内置,离线可用,与 CLI 版本对齐 |
10
- | **GitHub** | `--source github --repo geoly-ai/geoly-reddit [--ref main]` | 从 GitHub 拉取 `social-ops-hub/skills`,缓存 24h |
11
- | **skill.sh** | `--source skillsh --repo owner/name` | 与 GitHub 相同拉取逻辑(skill.sh 导入仓库) |
12
- | **local** | `--source local --local-path ./skills` | 本地目录 |
7
+ | 来源 | 命令 | 说明 |
8
+ | ------------------- | ----------------------------------------------------------- | ------------------------------------------------ |
9
+ | **bundled(默认)** | `social-hub skills install …` | npm 包内置,离线可用,与 CLI 版本对齐 |
10
+ | **GitHub** | `--source github --repo geoly-ai/geoly-reddit [--ref main]` | 从 GitHub 拉取 `social-ops-hub/skills`,缓存 24h |
11
+ | **skill.sh** | `--source skillsh --repo owner/name` | 与 GitHub 相同拉取逻辑(skill.sh 导入仓库) |
12
+ | **local** | `--source local --local-path ./skills` | 本地目录 |
13
13
 
14
14
  ```bash
15
15
  # 从 GitHub 安装最新 skill(缓存 ~/.cache/social-hub/skills/github/…)
@@ -74,13 +74,13 @@ skill add <org>/social-ops-hub/social-hub-ops-runtime
74
74
 
75
75
  ## 本地开发安装(任意 IDE)
76
76
 
77
- | 方式 | 说明 |
78
- |------|------|
77
+ | 方式 | 说明 |
78
+ | --------------- | ---------------------------------------------------------------------------------------------- |
79
79
  | **CLI(推荐)** | `social-hub skills install`(TUI)或 `social-hub skills install --agent cursor --global --yes` |
80
- | **npx** | `npx @geoly-ai/social-hub-cli skills bootstrap` |
81
- | **项目内脚本** | `pnpm skills:install` → 默认 `.agents/skills/` |
82
- | **指定目录** | `SKILLS_INSTALL_DIR=~/.cursor/skills pnpm skills:install` |
83
- | **符号链接** | `social-hub skills install --symlink --dir <path>` |
80
+ | **npx** | `npx @geoly-ai/social-hub-cli skills bootstrap` |
81
+ | **项目内脚本** | `pnpm skills:install` → 默认 `.agents/skills/` |
82
+ | **指定目录** | `SKILLS_INSTALL_DIR=~/.cursor/skills pnpm skills:install` |
83
+ | **符号链接** | `social-hub skills install --symlink --dir <path>` |
84
84
 
85
85
  ```bash
86
86
  # 默认:复制到 social-ops-hub/.agents/skills/
@@ -97,21 +97,22 @@ pnpm skills:check
97
97
 
98
98
  ## Skill 列表
99
99
 
100
- | Skill | 用途 |
101
- |-------|------|
102
- | [social-hub-cli](social-hub-cli) | 总路由 + 领域 skill 索引 |
103
- | [social-hub-shared](social-hub-shared) | config、auth、doctor、context |
104
- | [social-hub-ops-runtime](social-hub-ops-runtime) | claim / complete / fail |
105
- | [social-hub-openclaw-context](social-hub-openclaw-context) | DB 聚合上下文 |
106
- | [social-hub-accounts](social-hub-accounts) | 账号 CRUD、browser-envs、personas |
107
- | [social-hub-posts](social-hub-posts) | Reddit 帖快照 CRUD、batch-upsert |
108
- | [social-hub-calendar-jobs](social-hub-calendar-jobs) | 日历与任务 |
109
- | [social-hub-publishing](social-hub-publishing) | 发布闭环 |
100
+ | Skill | 用途 |
101
+ | ------------------------------------------------------------------ | --------------------------------- |
102
+ | [social-hub-cli](social-hub-cli) | 总路由 + 领域 skill 索引 |
103
+ | [social-hub-shared](social-hub-shared) | config、auth、doctor、context |
104
+ | [social-hub-ops-runtime](social-hub-ops-runtime) | claim / complete / fail |
105
+ | [social-hub-openclaw-context](social-hub-openclaw-context) | DB 聚合上下文 |
106
+ | [social-hub-accounts](social-hub-accounts) | 账号 CRUD、browser-envs、personas |
107
+ | [social-hub-posts](social-hub-posts) | Reddit 帖快照 CRUD、batch-upsert |
108
+ | [social-hub-style-curator](social-hub-style-curator) | style-marks、curator、style-guide |
109
+ | [social-hub-calendar-jobs](social-hub-calendar-jobs) | 日历与任务 |
110
+ | [social-hub-publishing](social-hub-publishing) | 发布闭环 |
110
111
  | [social-hub-events-observability](social-hub-events-observability) | events、dashboard、audit、reports |
111
- | [social-hub-graph-compliance](social-hub-graph-compliance) | 图谱与合规风控 |
112
- | [social-hub-admin](social-hub-admin) | 系统/团队管理、通知渠道 |
113
- | [social-hub-intelligence](social-hub-intelligence) | 板块情报与 insights |
114
- | [social-hub-migration](social-hub-migration) | 导入导出与 replay |
112
+ | [social-hub-graph-compliance](social-hub-graph-compliance) | 图谱与合规风控 |
113
+ | [social-hub-admin](social-hub-admin) | 系统/团队管理、通知渠道 |
114
+ | [social-hub-intelligence](social-hub-intelligence) | 板块情报与 insights |
115
+ | [social-hub-migration](social-hub-migration) | 导入导出与 replay |
115
116
 
116
117
  清单见 [manifest.json](manifest.json)。与 API/CLI 对齐情况见仓库 `docs/cli-api-coverage.md`。
117
118
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "package": "social-ops-hub",
4
- "cliVersion": "0.1.6",
4
+ "cliVersion": "0.1.8",
5
5
  "repository": "social-ops-hub",
6
6
  "publish": {
7
7
  "registry": "https://skill.sh",
@@ -39,6 +39,11 @@
39
39
  "path": "social-hub-posts",
40
40
  "description": "Reddit 帖快照 CRUD、刷新、batch-upsert"
41
41
  },
42
+ {
43
+ "id": "social-hub-style-curator",
44
+ "path": "social-hub-style-curator",
45
+ "description": "style-marks 审核/沉淀、curator run、accounts style-guide"
46
+ },
42
47
  {
43
48
  "id": "social-hub-calendar-jobs",
44
49
  "path": "social-hub-calendar-jobs",
@@ -30,21 +30,22 @@ social-hub version --json
30
30
 
31
31
  ## 领域 Skill 路由
32
32
 
33
- | 场景 | Skill |
34
- |------|--------|
35
- | 鉴权 / config / doctor / context list·use·current | **`social-hub-shared`**(必读) |
36
- | OpenClaw 领任务 / 回填 | `social-hub-ops-runtime` |
37
- | 账号/任务上下文(DB) | `social-hub-openclaw-context` |
38
- | 社交账号 CRUD / browser-envs / personas | `social-hub-accounts` |
39
- | Reddit 帖快照 CRUD / batch-upsert | `social-hub-posts` |
40
- | 日历 / scheduled jobs | `social-hub-calendar-jobs` |
41
- | 发布闭环(brand→report) | `social-hub-publishing` |
42
- | 事件 / dashboard / audit / reports | `social-hub-events-observability` |
43
- | 图谱 / 合规 / 风控 | `social-hub-graph-compliance` |
44
- | settings / invites / members / api-keys | `social-hub-admin` |
45
- | 板块情报 / KOL / insights | `social-hub-intelligence` |
46
- | 运营板块池 catalog / aliases / tier rules | `social-hub-subreddit-pools` |
47
- | 导入导出 / runbook / openclaw-ingest | `social-hub-migration` |
33
+ | 场景 | Skill |
34
+ | ------------------------------------------------- | --------------------------------- |
35
+ | 鉴权 / config / doctor / context list·use·current | **`social-hub-shared`**(必读) |
36
+ | OpenClaw 领任务 / 回填 | `social-hub-ops-runtime` |
37
+ | 账号/任务上下文(DB) | `social-hub-openclaw-context` |
38
+ | 社交账号 CRUD / browser-envs / personas | `social-hub-accounts` |
39
+ | Reddit 帖快照 CRUD / batch-upsert | `social-hub-posts` |
40
+ | style-marks / curator / style-guide | `social-hub-style-curator` |
41
+ | 日历 / scheduled jobs | `social-hub-calendar-jobs` |
42
+ | 发布闭环(brand→report) | `social-hub-publishing` |
43
+ | 事件 / dashboard / audit / reports | `social-hub-events-observability` |
44
+ | 图谱 / 合规 / 风控 | `social-hub-graph-compliance` |
45
+ | settings / invites / members / api-keys | `social-hub-admin` |
46
+ | 板块情报 / KOL / insights | `social-hub-intelligence` |
47
+ | 运营板块池 catalog / aliases / tier rules | `social-hub-subreddit-pools` |
48
+ | 导入导出 / runbook / openclaw-ingest | `social-hub-migration` |
48
49
 
49
50
  命中上表场景时,**打开对应领域 skill**;不要在总路由里重复展开领域命令细节。
50
51
 
@@ -16,12 +16,12 @@ metadata:
16
16
 
17
17
  ## 与 shared 的分工
18
18
 
19
- | 命令 | 所在 skill |
20
- |------|------------|
21
- | `context list` / `use` / `current` | `social-hub-shared` |
22
- | `context account` / `context job` | 本 skill |
23
- | `query account-pools` / `account-pool-context` / `subreddit-candidates` | 本 skill |
24
- | `export agent-context` | 本 skill(亦见 `social-hub-migration`) |
19
+ | 命令 | 所在 skill |
20
+ | ----------------------------------------------------------------------- | --------------------------------------- |
21
+ | `context list` / `use` / `current` | `social-hub-shared` |
22
+ | `context account` / `context job` | 本 skill |
23
+ | `query account-pools` / `account-pool-context` / `subreddit-candidates` | 本 skill |
24
+ | `export agent-context` | 本 skill(亦见 `social-hub-migration`) |
25
25
 
26
26
  ## 账号上下文
27
27
 
@@ -30,7 +30,7 @@ social-hub context account -t <team-id> --account A1 \
30
30
  --expand pools,events,jobs,persona,risk,env,guardrails,style,quota
31
31
  ```
32
32
 
33
- - `--expand pools`:persona-aware 板块池(含 `personaPools.expandedByKind` / `expandedPools` / `brandPools` / `fallback`)
33
+ - `--expand pools`:板块池**清单/上下文**(`pools`、`personaPools`、`systemPools`、`fallback`);**不含** `selectionWeight` / `cooldownUntil`(互动选板用 `query subreddit-candidates`)
34
34
  - `--expand persona`:账号绑定系统人设摘要
35
35
  - `--expand events`:该账号最近 20 条互动事件摘要
36
36
 
@@ -59,30 +59,30 @@ social-hub query subreddit-candidates -t <team-id> --account A1 \
59
59
  social-hub query subreddit-candidates -t <team-id> --account A1 --action browse
60
60
  ```
61
61
 
62
- | 参数 | 默认 | 说明 |
63
- |------|------|------|
64
- | `--persona-aware` | `true` | `true`:系统 catalog + 人设/品牌展开并集;`false`:仅系统级 catalog |
65
- | `--tier` | `all` | `starter` / `advanced` / `all` |
66
- | `--include-debug` | `subreddit-candidates` 默认开启 | 输出 `systemPools`、`personaPools`、`fallback`、`sourceScope` 等 |
67
- | `--action` | 无 | `comment` / `browse` / `publish_post` 等,影响 `allowedActions` 与冷却 |
62
+ | 参数 | 默认 | 说明 |
63
+ | ----------------- | ------------------------------- | ---------------------------------------------------------------------- |
64
+ | `--persona-aware` | `true` | `true`:系统 catalog + 人设/品牌展开并集;`false`:仅系统级 catalog |
65
+ | `--tier` | `all` | `starter` / `advanced` / `all` |
66
+ | `--include-debug` | `subreddit-candidates` 默认开启 | 输出 `systemPools`、`personaPools`、`fallback`、`sourceScope` 等 |
67
+ | `--action` | 无 | `comment` / `browse` / `publish_post` 等,影响 `allowedActions` 与冷却 |
68
68
 
69
69
  **响应要点**(`subreddit-candidates`):
70
70
 
71
- | 字段 | 说明 |
72
- |------|------|
73
- | `items[].source` | `system_pool`、`persona.*`、`brand.binding`;`fallback_team_pool` 仅表示是否用系统池补足 |
74
- | `items[].sourceScope` | `system`(全局 catalog)或 `account`(人设/品牌展开) |
75
- | `items[].poolKind` | `pet` / `common` / `industry` / `brand` / `direct` / `other` |
76
- | `systemPools.expandedByKind` | 系统级 pet/common/industry/brand 汇总(选板前先看) |
77
- | `items[].subreddit` | 可直接消费的 `r/Subreddit` 格式 |
78
- | `items[].selectionWeight` | 加权随机用;**禁止直接取 `items[0]`** |
79
- | `items[].cooldownUntil` | 未过期时禁止 `comment`/`reply` |
80
- | `items[].allowedActions` | 当前动作允许的操作 |
81
- | `personaPools.expandedByKind` | 按来源汇总:`direct` / `common` / `industry` / `pet` / `brand` 的 `r/...` 列表 |
82
- | `personaPools.expandedPools[].subreddits` | 每个 pool ref 展开后的具体板块(可多条) |
83
- | `personaPools.brandPools` | 账号品牌绑定及对应 `brand_pools.*` ref 展开结果 |
84
- | `personaPools.unresolvedRefs` | alias 表无法解析的 ref(含部分 `persona_pools.Pxx.*`) |
85
- | `fallback.reason` | 如 `candidate_pool_exhausted` 须在 Agent 回执说明 |
71
+ | 字段 | 说明 |
72
+ | ----------------------------------------- | ---------------------------------------------------------------------------------------- |
73
+ | `items[].source` | `system_pool`、`persona.*`、`brand.binding`;`fallback_team_pool` 仅表示是否用系统池补足 |
74
+ | `items[].sourceScope` | `system`(全局 catalog)或 `account`(人设/品牌展开) |
75
+ | `items[].poolKind` | `pet` / `common` / `industry` / `brand` / `direct` / `other` |
76
+ | `systemPools.expandedByKind` | 系统级 pet/common/industry/brand 汇总(选板前先看) |
77
+ | `items[].subreddit` | 可直接消费的 `r/Subreddit` 格式 |
78
+ | `items[].selectionWeight` | 加权随机用;**禁止直接取 `items[0]`** |
79
+ | `items[].cooldownUntil` | 未过期时禁止 `comment`/`reply` |
80
+ | `items[].allowedActions` | 当前动作允许的操作 |
81
+ | `personaPools.expandedByKind` | 按来源汇总:`direct` / `common` / `industry` / `pet` / `brand` 的 `r/...` 列表 |
82
+ | `personaPools.expandedPools[].subreddits` | 每个 pool ref 展开后的具体板块(可多条) |
83
+ | `personaPools.brandPools` | 账号品牌绑定及对应 `brand_pools.*` ref 展开结果 |
84
+ | `personaPools.unresolvedRefs` | alias 表无法解析的 ref;正常 seed 后 P01-P57 的 `starter/advanced/pet_pool` 不应出现 |
85
+ | `fallback.reason` | 如 `candidate_pool_exhausted` 须在 Agent 回执说明 |
86
86
 
87
87
  **Agent 门禁**:
88
88
 
@@ -92,6 +92,12 @@ social-hub query subreddit-candidates -t <team-id> --account A1 --action browse
92
92
  4. 养号阶段 `poolKind=pet` 且可用宠物 sub **≥3** 时须轮换;**不得**用 `brand` 池替代宠物主池。
93
93
  5. 运营期品牌池(`poolKind=brand` / `source=brand.binding`)仅低占比补充(建议 10%–20%)。
94
94
 
95
+ **Persona pool 排障**:
96
+
97
+ - `persona_pools.Pxx.starter/advanced` 应通过 `subreddit_pool_aliases` 解析到 `persona_pools__Pxx_starter/advanced`。
98
+ - 若 `unresolvedRefs` 出现 P01-P57 的 starter/advanced,先检查 Pool Aliases 是否存在,再检查对应 `subreddit_industry_pools` catalog rows 是否存在。
99
+ - 若 Hub 不可用,OpenClaw 本地 fallback 只读 `openclaw-template/shared/subreddit-pools.json` 的 `persona_pools`;不要临时解析团队 workspace copy。
100
+
95
101
  配合 `social-hub-events-observability` 的 `events list-full` 可核对近期 sub;`social-hub-graph-compliance` 的 blocklist 已由候选接口过滤。
96
102
 
97
103
  ## 导出(审计 / 离线查看)
@@ -14,6 +14,22 @@ metadata:
14
14
 
15
15
  Hub DB 是执行状态的真源;不要用 agent 工作区 `shared/*.md` 记录任务结果。
16
16
 
17
+ ## 空闲队列(`claim-next` 无任务)
18
+
19
+ 当没有可领取任务时,API 返回 **HTTP 200**(不是错误,也不是 `[hub-offline-fallback]`):
20
+
21
+ ```json
22
+ { "job": null, "code": "no_claimable_job", "message": "No claimable job" }
23
+ ```
24
+
25
+ HEARTBEAT / 矩阵岗应将此视为「当前无工作」,正常结束本轮,不要当作 Hub 故障重试。
26
+
27
+ ## 租约与 heartbeat
28
+
29
+ - 默认租约:**300 秒**(`--lease-seconds`,范围 30–3600)。
30
+ - 浏览器任务超过 **2 分钟** 或 `timeoutSeconds` 较大的 CRON:在环境启动后、进入 Reddit 互动循环前各打一次 `ops heartbeat`;长任务期间每 **120–180 秒** 续租一次。
31
+ - 已 `claim` 后 Hub 离线:**禁止**手改本地 calendar;保持 lease 直至超时或人工 `ops fail`。
32
+
17
33
  ## 推荐流程
18
34
 
19
35
  ```bash
@@ -48,10 +64,12 @@ social-hub ops skip -t <team-id> --job <jobId> --agent "$AGENT" --reason manual_
48
64
 
49
65
  ## 写操作护栏
50
66
 
51
- | 命令 | 要求 |
52
- |------|------|
53
- | `ops complete` | `permalink` 须为 reddit.com URL;先 `claim` 或 `claim-next` |
54
- | `ops fail` / `ops skip` | `--reason` 必须用文档枚举值 |
55
- | `ops claim` | 确认 `jobId` 来自 `jobs list`,勿猜测 UUID |
67
+ | 命令 | 要求 |
68
+ | ----------------------------------------------------------------------- | ----------------------------------------------------------- |
69
+ | `ops complete` | `permalink` 须为 reddit.com URL;先 `claim` 或 `claim-next` |
70
+ | `ops fail` / `ops skip` | `--reason` 必须用文档枚举值 |
71
+ | `ops claim` / `claim-next` / `heartbeat` / `complete` / `fail` / `skip` | **`--agent` 必填** |
72
+ | `ops claim` | 确认 `jobId` 来自 `jobs list`,勿猜测 UUID |
73
+ | `ops skip` | 配额/规则/前置条件不满足时用 `skip`;运行时异常用 `fail` |
56
74
 
57
75
  无 `--dry-run`;误操作后用 `fail`/`skip` 记录原因,勿改本地 Markdown 状态。
@@ -15,11 +15,12 @@ metadata:
15
15
 
16
16
  ## 职责边界
17
17
 
18
- | 做 | 不做 |
19
- |---|---|
20
- | Hub 内 Reddit 帖快照的查询、刷新、单条/批量写入 | 从飞书 Base、CSV、工作区 Markdown 读取并映射字段 |
21
- | 说明 `batch-upsert` JSON item 字段与幂等行为 | team 路由、外部 ETL 脚本、来源系统鉴权 |
22
- | 删除/刷新前提示风险 | `reddit import-feishu`(已废弃) |
18
+ | 做 | 不做 |
19
+ | ------------------------------------------------------------------------------------- | ------------------------------------------------ |
20
+ | Hub 内 Reddit 帖快照的查询、刷新、单条/批量写入 | 从飞书 Base、CSV、工作区 Markdown 读取并映射字段 |
21
+ | OpenClaw profile/post 扫描后的帖子表现回填(`score` / `commentsCount` / `viewCount`) | 浏览器采集、评论维护、style mark / curator |
22
+ | 说明 `batch-upsert` 的 JSON item 字段与幂等行为 | team 路由、外部 ETL 脚本、来源系统鉴权 |
23
+ | 删除/刷新前提示风险 | 用 `reddit import-feishu`(已废弃) |
23
24
 
24
25
  外部数据(飞书、表格、爬虫)应先在你自己的流程里整理成 JSON,再调用本模块命令写入 Hub。
25
26
 
@@ -70,7 +71,7 @@ social-hub reddit update -t <team-id> --snapshot <uuid> -j '{
70
71
  social-hub reddit delete -t <team-id> --snapshot <uuid> # 危险:确认用户意图
71
72
  ```
72
73
 
73
- ## 批量 upsert(外部来源帖快照)
74
+ ## 批量 upsert(外部来源 / OpenClaw 扫描帖快照)
74
75
 
75
76
  ```bash
76
77
  social-hub reddit batch-upsert -t <team-id> -j '{
@@ -81,11 +82,13 @@ social-hub reddit batch-upsert -t <team-id> -j '{
81
82
  "title": "...",
82
83
  "score": 12,
83
84
  "commentsCount": 3,
85
+ "socialAccountId": "<account-uuid>",
84
86
  "source": "external",
85
87
  "feishuRecordId": "recXXX",
86
88
  "baseToken": "optional-base-token",
87
89
  "tableId": "optional-table-id",
88
90
  "viewCount": 100,
91
+ "upvoteRatio": 0.92,
89
92
  "brandRaw": "BrandName",
90
93
  "publishDoc": "https://docs.example.com/publish",
91
94
  "firstRepostLink": "https://www.reddit.com/r/example/comments/repost1/",
@@ -99,7 +102,10 @@ social-hub reddit batch-upsert -t <team-id> -j '{
99
102
  ### Item 字段说明
100
103
 
101
104
  - **必填(推荐)**:`subreddit`;有真实 Reddit 链接时带 `permalink`
102
- - **可选**:`title`、`score`、`commentsCount`、`postedAt`、`source`、`publishDoc`、`rawPayload`
105
+ - **可选**:`title`、`score`、`commentsCount`、`viewCount`、`upvoteRatio`、`postedAt`、`source`、`publishDoc`、`rawPayload`
106
+ - **`socialAccountId`**:OpenClaw profile 扫描时建议带上(来自 `context account` 的 `account.id`),用于把快照归因到运营账号。
107
+ - **`viewCount`**:浏览/曝光。平台页面不可见时传 `null`,不要臆造。
108
+ - **`upvoteRatio`**:页面可读时传 0–1 小数;不可得时省略。
103
109
  - **`firstRepostLink` / `secondRepostLink`**:首次/二次补发链接(nullable string)。用于 Hub 持久化与 Web 新增/编辑表单;**帖子表现列表不展示这两列**。飞书来源字段别名:`首次补发链接`、`二次补发链接`(见 `sync-feishu-reddit-via-hub-cli` / import 脚本)。`create-snapshot`、`update`、batch item 均支持。
104
110
  - **`feishuRecordId`**:飞书记录 ID。当输入来自飞书时,Hub 优先按 `(teamId, feishuRecordId)` 幂等;同一 permalink 对应不同飞书记录时,后续记录可能获得 `feishu.local` 占位 permalink
105
111
  - **无 permalink**:可只带 `feishuRecordId`(及 `baseToken`/`tableId`),Hub 会生成稳定占位 URL
@@ -116,3 +122,5 @@ social-hub reddit batch-upsert -t <team-id> -j '{
116
122
  需要手动补快照时用 `create-snapshot` 或 `batch-upsert`。
117
123
 
118
124
  **维护 CRON / 手动维护**:OpenClaw `reddit-post-reply-maintenance` Step 4.7 在 profile 扫描后应 `batch-upsert` 更新 `score` / `commentsCount` / `viewCount`(曝光);见 OpenClaw `hub-adapter.md` §5d 与 `references/cron-message-skeleton.md`。
125
+
126
+ **独立回填 CRON**:若只需要定期扫描已发帖表现、不要回复评论 / 不做 style curator,用 OpenClaw `reddit-post-data-backfill-cron`,它只负责 profile/post 扫描 → `reddit batch-upsert` → 回执/通知。
@@ -41,7 +41,7 @@ social-hub brands system-create -j '{"name":"My Brand","slug":"my-brand"}'
41
41
  social-hub brand-members system-list
42
42
  social-hub brand-members system-create -j '{"brandId":"<uuid>","userId":"<uuid>","role":"manager"}'
43
43
  social-hub accounts brand-bindings list -t <team-id> --account <uuid>
44
- social-hub accounts brand-bindings upsert -t <team-id> --account <uuid> -j '{"brandId":"<uuid>"}'
44
+ social-hub accounts brand-bindings add -t <team-id> --account <uuid> -j '{"brandId":"<uuid>"}'
45
45
  ```
46
46
 
47
47
  ## 草稿与计划(brandId 必填)
@@ -80,17 +80,36 @@ social-hub events append -t <team-id> --type post.published --payload '{"permali
80
80
 
81
81
  ## 写操作护栏
82
82
 
83
- | 操作 | 要求 |
84
- |------|------|
85
- | `drafts delete` / `plans cancel` | 先 `list`/`get` 核对 id;无 `--dry-run` |
86
- | `plans create` | JSON 含 `brandId` + `entries`;guardrail 失败会 400 |
87
- | `events append` | 带 `--external-ref` 幂等 |
83
+ | 操作 | 要求 |
84
+ | -------------------------------- | --------------------------------------------------- |
85
+ | `drafts delete` / `plans cancel` | 先 `list`/`get` 核对 id;无 `--dry-run` |
86
+ | `plans create` | JSON 含 `brandId` + `entries`;guardrail 失败会 400 |
87
+ | `events append` | 带 `--external-ref` 幂等 |
88
88
 
89
89
  ## 决策表
90
90
 
91
- | 场景 | 推荐 skill |
92
- |------|------------|
93
- | 只查/改 calendar 或 jobs | `social-hub-calendar-jobs` |
94
- | OpenClaw 领任务/回填 | `social-hub-ops-runtime` |
95
- | Reddit 帖表现/刷新 | `social-hub-posts` |
96
- | 仪表盘/审计/批量事件 | `social-hub-events-observability` |
91
+ | 场景 | 推荐 skill |
92
+ | ------------------------ | ------------------------------------------------------------- |
93
+ | 只查/改 calendar 或 jobs | `social-hub-calendar-jobs` |
94
+ | OpenClaw 领任务/回填 | `social-hub-ops-runtime` |
95
+ | Reddit 帖表现/刷新 | `social-hub-posts` |
96
+ | 仪表盘/审计/批量事件 | `social-hub-events-observability` |
97
+ | subreddit 规则缓存刷新 | `social-hub-graph-compliance`(`rule-caches-*`) |
98
+ | 板块情报 / hot-posts | `social-hub-intelligence` |
99
+ | 工作区 Markdown 批量导入 | `social-hub-migration`(`openclaw-ingest`);**非**运行时主写 |
100
+
101
+ ## OpenClaw 双模式(战略 vs 运行时)
102
+
103
+ | 模式 | 路径 | 何时用 |
104
+ | -------------- | ------------------------------------------------------------------------------ | ------------------------------- |
105
+ | **战略排期** | `brand → draft → plan → calendar_entry → scheduled_job` | 新活动、批量排期、品牌内容管线 |
106
+ | **运行时执行** | `ops claim-next/claim → 浏览器发帖 → events append → ops complete --permalink` | CRON/矩阵岗已存在 calendar job |
107
+ | **应急/遗留** | 直接 `calendar patch` + `events append` | 无 ops 链路或手工修补单条 entry |
108
+
109
+ 日常矩阵互动 CRON **不必**创建 draft/plan;发帖类 job 才走发布闭环。
110
+
111
+ ## Deferred(本 skill 不覆盖)
112
+
113
+ - **Bot Bouncer 黑名单**:`compliance blocklists-*`(见 `social-hub-graph-compliance`),勿用 `rule-caches --kind bot_bouncer`。
114
+ - **Agent 板块候选与 diversity**:`query subreddit-candidates`(见 `social-hub-openclaw-context`)。
115
+ - **风格沉淀**:`style-marks` / `curator run`(见 `social-hub-style-curator`)。
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: social-hub-style-curator
3
+ description: >-
4
+ Hub 账号风格沉淀:style-marks list/approve/reject/extract/set 与 curator run、
5
+ accounts style-guide get。用户要提取高赞评论风格、审核 style mark、批量 curator 写回风格资产时用本 skill。
6
+ 不负责 Reddit 帖快照 CRUD(见 social-hub-posts)。
7
+ metadata:
8
+ cliVersion: ">=0.1.4"
9
+ ---
10
+
11
+ # social-hub-style-curator
12
+
13
+ > **前置条件:** 先阅读 [`../social-hub-shared/SKILL.md`](../social-hub-shared/SKILL.md),
14
+ > 确认已 `auth login` 并 `context use <team-id>`。
15
+
16
+ ## 职责边界
17
+
18
+ | 做 | 不做 |
19
+ | ----------------------------------------- | ------------------------------------------- |
20
+ | `style-marks` CRUD / 按 event 幂等 upsert | `reddit list` / `batch-upsert` / 帖表现刷新 |
21
+ | `curator run` 批量沉淀到 Hub style-guide | 从飞书/本地 JSON 直接当 SSOT 主写 |
22
+
23
+ ## 列出与审核
24
+
25
+ `style-marks list` 当前按 `socialAccountId` 过滤,`--account` 必须传 **账号 UUID**。如果手里只有 OpenClaw 槽位/handle,先用 `context account` 解析:
26
+
27
+ ```bash
28
+ social-hub context account -t <team-id> --account <slot-or-handle>
29
+ # 取响应 account.id,作为下方 <account-uuid>
30
+ ```
31
+
32
+ ```bash
33
+ social-hub style-marks list -t <team-id> --account <account-uuid> \
34
+ --extract-status pending --approved true -n 50
35
+
36
+ social-hub style-marks approve -t <team-id> --id <styleMarkId> [--note "..."]
37
+ social-hub style-marks reject -t <team-id> --id <styleMarkId> [--note "..."]
38
+ social-hub style-marks extract -t <team-id> --id <styleMarkId> [--dry-run]
39
+ ```
40
+
41
+ ## 按 event 幂等写入 mark
42
+
43
+ ```bash
44
+ social-hub style-marks set -t <team-id> --event-ref <externalRef> -j '{
45
+ "styleTags": ["concise", "helpful"],
46
+ "markExternalRef": "mk_evt_001",
47
+ "onConflict": "update"
48
+ }'
49
+ ```
50
+
51
+ `--event-ref` 对齐 OpenClaw `event_id` / Hub `externalRef`。
52
+
53
+ ## Curator 批量沉淀
54
+
55
+ ```bash
56
+ social-hub curator run -t <team-id> --account <slot-or-uuid> [--dry-run]
57
+ social-hub accounts style-guide get -t <team-id> --account <slot-or-uuid>
58
+ ```
59
+
60
+ 成功后 Hub 将对应 marks 的 `extractStatus` 置为 `extracted`(幂等:`markExternalRef`)。
61
+
62
+ ## 离线回退
63
+
64
+ `doctor` 失败时:只读/写本地 `interaction-history.json` 的 `style_marks[]` 与 `account-style-guides/*.md`,回执标注 `[hub-offline-fallback]`。Hub 在线时禁止对同一 mark 双主写。
65
+
66
+ ## 与维护 CRON 的关系
67
+
68
+ `reddit-post-reply-maintenance` Step 4.5–4.6 在 metrics 达标后调用本 skill;互动 CRON 不负责写 style marks。
@@ -20,7 +20,7 @@ social-hub pools catalog-update -t <team-id> --id <pool-id> -j '{...}'
20
20
  social-hub pools catalog-delete -t <team-id> --id <pool-id>
21
21
 
22
22
  social-hub pools aliases-list -t <team-id> [--alias-ref persona_pools.P23.starter]
23
- social-hub pools aliases-create -t <team-id> -j '{"aliasRef":"persona_pools.P23.starter","industryKey":"common_pools__starter_casual"}'
23
+ social-hub pools aliases-create -t <team-id> -j '{"aliasRef":"persona_pools.P23.starter","industryKey":"persona_pools__P23_starter","poolKind":"industry","tier":"starter"}'
24
24
  social-hub pools aliases-update -t <team-id> --id <alias-id> -j '{...}'
25
25
  social-hub pools aliases-delete -t <team-id> --id <alias-id>
26
26
 
@@ -39,3 +39,21 @@ social-hub pools tier-rules-delete -t <team-id> --id <rule-id>
39
39
  权限资源:`subredditPool`(与 `subredditIntelligence` 分析只读分离)。
40
40
 
41
41
  兼容:旧 `subreddit-intelligence/industry-pools` 仍可读;新写操作优先走 `subreddit-pools/*`。
42
+
43
+ ## Persona Pool Aliases 约定
44
+
45
+ - Hub persona key 以本地 `persona_pools.Pxx.*` 为准,不用飞书编号做主键。
46
+ - `persona_pools.Pxx.starter` / `persona_pools.Pxx.advanced` 的标准 `industryKey`:
47
+ - `persona_pools__Pxx_starter`
48
+ - `persona_pools__Pxx_advanced`
49
+ - alias 不能单独建:必须先有对应 `subreddit_industry_pools` catalog rows,否则页面能看到 alias,但运行时展开不到具体 subreddit。
50
+ - P32-P57 的本地 fallback 来源是 `openclaw-template/shared/subreddit-pools.json`;团队 workspace copy 不作为同步目标。
51
+ - `redditRefs` 是 persona 直接候选社区,不等同于 starter/advanced pool;不要直接用 `redditRefs` 覆盖 alias。
52
+ - `pet_pool` 继续映射到 `common_pools__starter_pet`,不随 starter/advanced backfill 改动。
53
+
54
+ ## 常见排障
55
+
56
+ - Pool Aliases 页面为空:先确认是否跑过 `db:seed` 或 persona pool bootstrap;再用 `aliases-list` 查当前 team,而不是只看 catalog。
57
+ - `personaPools.unresolvedRefs` 仍有 `persona_pools.Pxx.starter/advanced`:说明 alias 缺失,或 alias 指向的 `industryKey` catalog rows 未创建。
58
+ - catalog 有数据但候选为空:检查 subreddit 是否被 `bot_bouncer_blocklist`、`previously_banned`、team blocklist 或 tier policy 过滤。
59
+ - 本地 fallback 与 Hub 漂移:对比 `openclaw-template/shared/subreddit-pools.json` 里的 `persona_pools.Pxx.starter/advanced` 和 Hub catalog 的 `persona_pools__Pxx_*` rows。