@geoly-ai/social-hub-cli 0.1.5 → 0.1.7
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 +28 -0
- package/dist/cmd-manifest.json +16 -2
- package/dist/cmd-manifest.test.js +2 -0
- package/dist/cmd-manifest.test.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +147 -1
- package/dist/index.js.map +1 -1
- package/dist/register-extensions.d.ts.map +1 -1
- package/dist/register-extensions.js +2 -2
- package/dist/register-extensions.js.map +1 -1
- package/dist/register-ops.d.ts.map +1 -1
- package/dist/register-ops.js +34 -8
- package/dist/register-ops.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +27 -26
- package/skills/manifest.json +12 -2
- package/skills/social-hub-cli/SKILL.md +16 -14
- package/skills/social-hub-intelligence/SKILL.md +4 -5
- package/skills/social-hub-openclaw-context/SKILL.md +31 -27
- package/skills/social-hub-ops-runtime/SKILL.md +23 -5
- package/skills/social-hub-posts/SKILL.md +28 -9
- package/skills/social-hub-publishing/SKILL.md +31 -12
- package/skills/social-hub-style-curator/SKILL.md +68 -0
- package/skills/social-hub-subreddit-pools/SKILL.md +41 -0
package/dist/register-ops.js
CHANGED
|
@@ -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
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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
|
-
.
|
|
103
|
+
.requiredOption(...agentRequired)
|
|
101
104
|
.option("--message <text>", "详情")
|
|
102
105
|
.action(async (opts) => {
|
|
103
106
|
await withCliErrorBoundary(async () => {
|
|
@@ -114,6 +117,29 @@ export function registerOpsRuntime(program) {
|
|
|
114
117
|
}
|
|
115
118
|
export function registerAgentContext(program) {
|
|
116
119
|
const query = program.command("query").description("Agent 结构化查询");
|
|
120
|
+
query
|
|
121
|
+
.command("account-pool-context")
|
|
122
|
+
.description("与 account-pools 相同:系统级 + 账号级板块池聚合(含 systemPools)")
|
|
123
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
124
|
+
.requiredOption("--account <ref>", "账号 UUID 或 handle")
|
|
125
|
+
.option("--industry <key>", "行业 key")
|
|
126
|
+
.option("--limit <n>", "条数", "50")
|
|
127
|
+
.option("--persona-aware <bool>", "按系统人设解析候选池", "true")
|
|
128
|
+
.option("--tier <tier>", "starter|advanced|all", "all")
|
|
129
|
+
.option("--include-debug", "输出 systemPools / personaPools / fallback")
|
|
130
|
+
.action(async (opts) => {
|
|
131
|
+
await withCliErrorBoundary(async () => {
|
|
132
|
+
const teamId = resolveTeamId(opts.team);
|
|
133
|
+
const res = await requireClient().listAccountPoolContext(teamId, opts.account, {
|
|
134
|
+
industry: opts.industry,
|
|
135
|
+
limit: Number(opts.limit),
|
|
136
|
+
personaAware: opts.personaAware !== "false",
|
|
137
|
+
tier: opts.tier,
|
|
138
|
+
includeDebug: Boolean(opts.includeDebug),
|
|
139
|
+
});
|
|
140
|
+
printResult(res);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
117
143
|
query
|
|
118
144
|
.command("account-pools")
|
|
119
145
|
.requiredOption("-t, --team <teamId>", "Team UUID")
|
package/dist/register-ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-ops.js","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"register-ops.js","sourceRoot":"","sources":["../src/register-ops.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/README.md
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
### Skills 来源
|
|
6
6
|
|
|
7
|
-
| 来源
|
|
8
|
-
|
|
9
|
-
| **bundled(默认)** | `social-hub skills install …`
|
|
10
|
-
| **GitHub**
|
|
11
|
-
| **skill.sh**
|
|
12
|
-
| **local**
|
|
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**
|
|
81
|
-
| **项目内脚本**
|
|
82
|
-
| **指定目录**
|
|
83
|
-
| **符号链接**
|
|
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)
|
|
103
|
-
| [social-hub-shared](social-hub-shared)
|
|
104
|
-
| [social-hub-ops-runtime](social-hub-ops-runtime)
|
|
105
|
-
| [social-hub-openclaw-context](social-hub-openclaw-context)
|
|
106
|
-
| [social-hub-accounts](social-hub-accounts)
|
|
107
|
-
| [social-hub-posts](social-hub-posts)
|
|
108
|
-
| [social-hub-
|
|
109
|
-
| [social-hub-
|
|
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)
|
|
114
|
-
| [social-hub-migration](social-hub-migration)
|
|
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
|
|
package/skills/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"package": "social-ops-hub",
|
|
4
|
-
"cliVersion": "0.1.
|
|
4
|
+
"cliVersion": "0.1.7",
|
|
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",
|
|
@@ -67,7 +72,12 @@
|
|
|
67
72
|
{
|
|
68
73
|
"id": "social-hub-intelligence",
|
|
69
74
|
"path": "social-hub-intelligence",
|
|
70
|
-
"description": "watchlists、hot-posts、
|
|
75
|
+
"description": "watchlists、hot-posts、runs、insights、fetch-by-*"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "social-hub-subreddit-pools",
|
|
79
|
+
"path": "social-hub-subreddit-pools",
|
|
80
|
+
"description": "运营板块池 catalog、pool aliases、tier rules CRUD"
|
|
71
81
|
},
|
|
72
82
|
{
|
|
73
83
|
"id": "social-hub-migration",
|
|
@@ -30,20 +30,22 @@ social-hub version --json
|
|
|
30
30
|
|
|
31
31
|
## 领域 Skill 路由
|
|
32
32
|
|
|
33
|
-
| 场景
|
|
34
|
-
|
|
35
|
-
| 鉴权 / config / doctor / context list·use·current | **`social-hub-shared`**(必读)
|
|
36
|
-
| OpenClaw 领任务 / 回填
|
|
37
|
-
| 账号/任务上下文(DB)
|
|
38
|
-
| 社交账号 CRUD / browser-envs / personas
|
|
39
|
-
| Reddit 帖快照 CRUD / batch-upsert
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
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` |
|
|
47
49
|
|
|
48
50
|
命中上表场景时,**打开对应领域 skill**;不要在总路由里重复展开领域命令细节。
|
|
49
51
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: social-hub-intelligence
|
|
3
3
|
description: >-
|
|
4
|
-
板块情报:watchlists、hot-posts、kol-intents、
|
|
5
|
-
|
|
6
|
-
用户要盯 subreddit
|
|
4
|
+
板块情报:watchlists、hot-posts、kol-intents、runs、kol-profiles、fetch-by-*、
|
|
5
|
+
insights/*、dispatch 等分析/抓取命令。运营板块池 CRUD 用 social-hub-subreddit-pools。
|
|
6
|
+
用户要盯 subreddit、拉热帖、情报派发或洞察分析时用本 skill。
|
|
7
7
|
metadata:
|
|
8
8
|
cliVersion: ">=0.0.12"
|
|
9
9
|
---
|
|
@@ -13,10 +13,9 @@ metadata:
|
|
|
13
13
|
> **前置条件:** 先阅读 [`../social-hub-shared/SKILL.md`](../social-hub-shared/SKILL.md),
|
|
14
14
|
> 确认已 `auth login` 并 `context use <team-id>`。
|
|
15
15
|
|
|
16
|
-
## Watchlists
|
|
16
|
+
## Watchlists(只读行业池列表见 `social-hub-subreddit-pools` 或兼容 `industry-pools-list`)
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
social-hub intelligence industry-pools-list -t <team-id>
|
|
20
19
|
social-hub intelligence watchlists-list -t <team-id> [--campaign <uuid>]
|
|
21
20
|
social-hub intelligence watchlists-create -t <team-id> -j '{"subreddit":"technology","tags":["core"]}'
|
|
22
21
|
social-hub intelligence watchlists-update -t <team-id> --id <uuid> -j '{"tags":["updated"]}'
|
|
@@ -16,12 +16,12 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
## 与 shared 的分工
|
|
18
18
|
|
|
19
|
-
| 命令
|
|
20
|
-
|
|
21
|
-
| `context list` / `use` / `current`
|
|
22
|
-
| `context account` / `context job`
|
|
23
|
-
| `query account-pools` / `subreddit-candidates` | 本 skill
|
|
24
|
-
| `export agent-context`
|
|
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
|
|
33
|
+
- `--expand pools`:板块池**清单/上下文**(`pools`、`personaPools`、`systemPools`、`fallback`);**不含** `selectionWeight` / `cooldownUntil`(互动选板用 `query subreddit-candidates`)
|
|
34
34
|
- `--expand persona`:账号绑定系统人设摘要
|
|
35
35
|
- `--expand events`:该账号最近 20 条互动事件摘要
|
|
36
36
|
|
|
@@ -45,9 +45,11 @@ social-hub context job -t <team-id> --job <scheduledJobId>
|
|
|
45
45
|
互动选板 **主读** `subreddit-candidates`;发布前查池可用 `account-pools`。
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
#
|
|
48
|
+
# 账号板块聚合(系统级 + 账号级;与 account-pool-context 同响应)
|
|
49
49
|
social-hub query account-pools -t <team-id> --account A1 \
|
|
50
50
|
--limit 50 --persona-aware true --tier all --include-debug
|
|
51
|
+
# 或语义化别名:
|
|
52
|
+
social-hub query account-pool-context -t <team-id> --account A1 --include-debug
|
|
51
53
|
|
|
52
54
|
# 互动/评论候选(默认带 diversity debug)
|
|
53
55
|
social-hub query subreddit-candidates -t <team-id> --account A1 \
|
|
@@ -57,28 +59,30 @@ social-hub query subreddit-candidates -t <team-id> --account A1 \
|
|
|
57
59
|
social-hub query subreddit-candidates -t <team-id> --account A1 --action browse
|
|
58
60
|
```
|
|
59
61
|
|
|
60
|
-
| 参数
|
|
61
|
-
|
|
62
|
-
| `--persona-aware` | `true`
|
|
63
|
-
| `--tier`
|
|
64
|
-
| `--include-debug` | `subreddit-candidates` 默认开启 | 输出 `personaPools`、`fallback`、`
|
|
65
|
-
| `--action`
|
|
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` 与冷却 |
|
|
66
68
|
|
|
67
69
|
**响应要点**(`subreddit-candidates`):
|
|
68
70
|
|
|
69
|
-
| 字段
|
|
70
|
-
|
|
71
|
-
| `items[].source`
|
|
72
|
-
| `items[].
|
|
73
|
-
| `items[].
|
|
74
|
-
| `
|
|
75
|
-
| `items[].
|
|
76
|
-
| `items[].
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `personaPools.
|
|
80
|
-
| `personaPools.
|
|
81
|
-
| `
|
|
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 回执说明 |
|
|
82
86
|
|
|
83
87
|
**Agent 门禁**:
|
|
84
88
|
|
|
@@ -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`
|
|
54
|
-
| `ops fail` / `ops skip`
|
|
55
|
-
| `ops claim`
|
|
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 帖快照的查询、刷新、单条/批量写入
|
|
21
|
-
|
|
|
22
|
-
|
|
|
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
|
|
|
@@ -56,14 +57,21 @@ social-hub reddit create-snapshot -t <team-id> -j '{
|
|
|
56
57
|
"title": "Post title",
|
|
57
58
|
"score": 0,
|
|
58
59
|
"commentsCount": 0,
|
|
59
|
-
"source": "manual"
|
|
60
|
+
"source": "manual",
|
|
61
|
+
"firstRepostLink": "https://www.reddit.com/r/example/comments/repost1/",
|
|
62
|
+
"secondRepostLink": null
|
|
60
63
|
}'
|
|
61
64
|
|
|
62
|
-
social-hub reddit update -t <team-id> --snapshot <uuid> -j '{
|
|
65
|
+
social-hub reddit update -t <team-id> --snapshot <uuid> -j '{
|
|
66
|
+
"score": 42,
|
|
67
|
+
"commentsCount": 3,
|
|
68
|
+
"firstRepostLink": "https://www.reddit.com/r/example/comments/repost1/",
|
|
69
|
+
"secondRepostLink": "https://www.reddit.com/r/example/comments/repost2/"
|
|
70
|
+
}'
|
|
63
71
|
social-hub reddit delete -t <team-id> --snapshot <uuid> # 危险:确认用户意图
|
|
64
72
|
```
|
|
65
73
|
|
|
66
|
-
## 批量 upsert
|
|
74
|
+
## 批量 upsert(外部来源 / OpenClaw 扫描帖快照)
|
|
67
75
|
|
|
68
76
|
```bash
|
|
69
77
|
social-hub reddit batch-upsert -t <team-id> -j '{
|
|
@@ -74,12 +82,17 @@ social-hub reddit batch-upsert -t <team-id> -j '{
|
|
|
74
82
|
"title": "...",
|
|
75
83
|
"score": 12,
|
|
76
84
|
"commentsCount": 3,
|
|
85
|
+
"socialAccountId": "<account-uuid>",
|
|
77
86
|
"source": "external",
|
|
78
87
|
"feishuRecordId": "recXXX",
|
|
79
88
|
"baseToken": "optional-base-token",
|
|
80
89
|
"tableId": "optional-table-id",
|
|
81
90
|
"viewCount": 100,
|
|
91
|
+
"upvoteRatio": 0.92,
|
|
82
92
|
"brandRaw": "BrandName",
|
|
93
|
+
"publishDoc": "https://docs.example.com/publish",
|
|
94
|
+
"firstRepostLink": "https://www.reddit.com/r/example/comments/repost1/",
|
|
95
|
+
"secondRepostLink": "https://www.reddit.com/r/example/comments/repost2/",
|
|
83
96
|
"rawPayload": { "custom": "fields" }
|
|
84
97
|
}
|
|
85
98
|
]
|
|
@@ -89,7 +102,11 @@ social-hub reddit batch-upsert -t <team-id> -j '{
|
|
|
89
102
|
### Item 字段说明
|
|
90
103
|
|
|
91
104
|
- **必填(推荐)**:`subreddit`;有真实 Reddit 链接时带 `permalink`
|
|
92
|
-
- **可选**:`title`、`score`、`commentsCount`、`postedAt`、`source`、`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 小数;不可得时省略。
|
|
109
|
+
- **`firstRepostLink` / `secondRepostLink`**:首次/二次补发链接(nullable string)。用于 Hub 持久化与 Web 新增/编辑表单;**帖子表现列表不展示这两列**。飞书来源字段别名:`首次补发链接`、`二次补发链接`(见 `sync-feishu-reddit-via-hub-cli` / import 脚本)。`create-snapshot`、`update`、batch item 均支持。
|
|
93
110
|
- **`feishuRecordId`**:飞书记录 ID。当输入来自飞书时,Hub 优先按 `(teamId, feishuRecordId)` 幂等;同一 permalink 对应不同飞书记录时,后续记录可能获得 `feishu.local` 占位 permalink
|
|
94
111
|
- **无 permalink**:可只带 `feishuRecordId`(及 `baseToken`/`tableId`),Hub 会生成稳定占位 URL
|
|
95
112
|
|
|
@@ -105,3 +122,5 @@ social-hub reddit batch-upsert -t <team-id> -j '{
|
|
|
105
122
|
需要手动补快照时用 `create-snapshot` 或 `batch-upsert`。
|
|
106
123
|
|
|
107
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
|
|
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`
|
|
87
|
-
| `events append`
|
|
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
|
-
| 场景
|
|
92
|
-
|
|
93
|
-
| 只查/改 calendar 或 jobs | `social-hub-calendar-jobs`
|
|
94
|
-
| OpenClaw 领任务/回填
|
|
95
|
-
| Reddit 帖表现/刷新
|
|
96
|
-
| 仪表盘/审计/批量事件
|
|
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`)。
|