@geoly-ai/social-hub-cli 0.0.1 → 0.0.3
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/register-shared.d.ts.map +1 -1
- package/dist/register-shared.js +2 -6
- package/dist/register-shared.js.map +1 -1
- package/dist/register-skills.d.ts +3 -0
- package/dist/register-skills.d.ts.map +1 -0
- package/dist/register-skills.js +273 -0
- package/dist/register-skills.js.map +1 -0
- package/dist/skills/agent-targets.d.ts +7 -0
- package/dist/skills/agent-targets.d.ts.map +1 -0
- package/dist/skills/agent-targets.js +367 -0
- package/dist/skills/agent-targets.js.map +1 -0
- package/dist/skills/agent-targets.test.d.ts +2 -0
- package/dist/skills/agent-targets.test.d.ts.map +1 -0
- package/dist/skills/agent-targets.test.js +19 -0
- package/dist/skills/agent-targets.test.js.map +1 -0
- package/dist/skills/doctor.d.ts +23 -0
- package/dist/skills/doctor.d.ts.map +1 -0
- package/dist/skills/doctor.js +102 -0
- package/dist/skills/doctor.js.map +1 -0
- package/dist/skills/install-planner.d.ts +18 -0
- package/dist/skills/install-planner.d.ts.map +1 -0
- package/dist/skills/install-planner.js +91 -0
- package/dist/skills/install-planner.js.map +1 -0
- package/dist/skills/install-planner.test.d.ts +2 -0
- package/dist/skills/install-planner.test.d.ts.map +1 -0
- package/dist/skills/install-planner.test.js +41 -0
- package/dist/skills/install-planner.test.js.map +1 -0
- package/dist/skills/installer.d.ts +10 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +108 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/skills/manifest.d.ts +9 -0
- package/dist/skills/manifest.d.ts.map +1 -0
- package/dist/skills/manifest.js +105 -0
- package/dist/skills/manifest.js.map +1 -0
- package/dist/skills/marketplace-adapters/claude-plugin.d.ts +6 -0
- package/dist/skills/marketplace-adapters/claude-plugin.d.ts.map +1 -0
- package/dist/skills/marketplace-adapters/claude-plugin.js +39 -0
- package/dist/skills/marketplace-adapters/claude-plugin.js.map +1 -0
- package/dist/skills/marketplace-adapters/skills-sh.d.ts +14 -0
- package/dist/skills/marketplace-adapters/skills-sh.d.ts.map +1 -0
- package/dist/skills/marketplace-adapters/skills-sh.js +9 -0
- package/dist/skills/marketplace-adapters/skills-sh.js.map +1 -0
- package/dist/skills/paths.d.ts +3 -0
- package/dist/skills/paths.d.ts.map +1 -0
- package/dist/skills/paths.js +13 -0
- package/dist/skills/paths.js.map +1 -0
- package/dist/skills/source-resolver.d.ts +11 -0
- package/dist/skills/source-resolver.d.ts.map +1 -0
- package/dist/skills/source-resolver.js +64 -0
- package/dist/skills/source-resolver.js.map +1 -0
- package/dist/skills/state-store.d.ts +9 -0
- package/dist/skills/state-store.d.ts.map +1 -0
- package/dist/skills/state-store.js +39 -0
- package/dist/skills/state-store.js.map +1 -0
- package/dist/skills/target-detector.d.ts +13 -0
- package/dist/skills/target-detector.d.ts.map +1 -0
- package/dist/skills/target-detector.js +132 -0
- package/dist/skills/target-detector.js.map +1 -0
- package/dist/skills/tui.d.ts +10 -0
- package/dist/skills/tui.d.ts.map +1 -0
- package/dist/skills/tui.js +140 -0
- package/dist/skills/tui.js.map +1 -0
- package/dist/skills/types.d.ts +86 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/update-check.d.ts +3 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +117 -0
- package/dist/update-check.js.map +1 -0
- package/dist/update-check.test.d.ts +2 -0
- package/dist/update-check.test.d.ts.map +1 -0
- package/dist/update-check.test.js +17 -0
- package/dist/update-check.test.js.map +1 -0
- package/dist/version-info.d.ts +9 -0
- package/dist/version-info.d.ts.map +1 -0
- package/dist/version-info.js +28 -0
- package/dist/version-info.js.map +1 -0
- package/package.json +7 -5
- package/skills/README.md +89 -0
- package/skills/manifest.json +68 -0
- package/skills/social-hub-accounts/SKILL.md +25 -0
- package/skills/social-hub-admin/SKILL.md +36 -0
- package/skills/social-hub-calendar-jobs/SKILL.md +25 -0
- package/skills/social-hub-cli/SKILL.md +362 -0
- package/skills/social-hub-cli/evals/evals.json +23 -0
- package/skills/social-hub-intelligence/SKILL.md +25 -0
- package/skills/social-hub-migration/SKILL.md +32 -0
- package/skills/social-hub-openclaw-context/SKILL.md +45 -0
- package/skills/social-hub-ops-runtime/SKILL.md +40 -0
- package/skills/social-hub-posts/SKILL.md +20 -0
- package/skills/social-hub-publishing/SKILL.md +31 -0
- package/skills/social-hub-shared/SKILL.md +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-info.d.ts","sourceRoot":"","sources":["../src/version-info.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc;;;;EAM7B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
function readPackageVersion(modulePath) {
|
|
4
|
+
try {
|
|
5
|
+
const pkg = require(modulePath);
|
|
6
|
+
return pkg.version ?? "unknown";
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return "unknown";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function getCliVersion() {
|
|
13
|
+
return readPackageVersion("../package.json");
|
|
14
|
+
}
|
|
15
|
+
export function getSdkVersion() {
|
|
16
|
+
return readPackageVersion("@geoly-ai/social-hub-sdk/package.json");
|
|
17
|
+
}
|
|
18
|
+
export function getAuthzVersion() {
|
|
19
|
+
return readPackageVersion("@geoly-ai/social-hub-authz/package.json");
|
|
20
|
+
}
|
|
21
|
+
export function getVersionInfo() {
|
|
22
|
+
return {
|
|
23
|
+
cliVersion: getCliVersion(),
|
|
24
|
+
sdkVersion: getSdkVersion(),
|
|
25
|
+
authzVersion: getAuthzVersion(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=version-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-info.js","sourceRoot":"","sources":["../src/version-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAyB,CAAC;QACxD,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,kBAAkB,CAAC,uCAAuC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,UAAU,EAAE,aAAa,EAAE;QAC3B,UAAU,EAAE,aAAa,EAAE;QAC3B,YAAY,EAAE,eAAe,EAAE;KAChC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoly-ai/social-hub-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "social-hub CLI for Social Ops Hub",
|
|
6
6
|
"repository": {
|
|
@@ -12,15 +12,16 @@
|
|
|
12
12
|
"access": "public"
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
|
-
"dist"
|
|
15
|
+
"dist",
|
|
16
|
+
"skills"
|
|
16
17
|
],
|
|
17
18
|
"bin": {
|
|
18
19
|
"social-hub": "./dist/index.js"
|
|
19
20
|
},
|
|
20
21
|
"dependencies": {
|
|
21
22
|
"commander": "^12.1.0",
|
|
22
|
-
"@geoly-ai/social-hub-authz": "0.0.
|
|
23
|
-
"@geoly-ai/social-hub-sdk": "0.0.
|
|
23
|
+
"@geoly-ai/social-hub-authz": "0.0.3",
|
|
24
|
+
"@geoly-ai/social-hub-sdk": "0.0.3"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@types/node": "^22.10.2",
|
|
@@ -28,7 +29,8 @@
|
|
|
28
29
|
"vitest": "^2.1.8"
|
|
29
30
|
},
|
|
30
31
|
"scripts": {
|
|
31
|
-
"
|
|
32
|
+
"copy-skills": "node ../../scripts/copy-skills-to-cli.mjs",
|
|
33
|
+
"build": "pnpm run copy-skills && tsc",
|
|
32
34
|
"typecheck": "tsc --noEmit",
|
|
33
35
|
"test": "vitest run"
|
|
34
36
|
}
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Social Hub Agent Skills
|
|
2
|
+
|
|
3
|
+
本目录与 `@geoly-ai/social-hub-cli`、SDK、`@social-ops-hub/contracts` 同仓发布。Agent 通过 **`social-hub` CLI** 读写 Hub;Skill 只描述何时用哪条命令、权限与流程。
|
|
4
|
+
|
|
5
|
+
## 安装 Agent Skills(推荐 CLI)
|
|
6
|
+
|
|
7
|
+
Skills 随 `@geoly-ai/social-hub-cli` 一起发布(npm tarball 内置 `skills/`)。
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 交互式(选 agent、skill、install/update)
|
|
11
|
+
social-hub skills tui
|
|
12
|
+
|
|
13
|
+
# 或脚本化
|
|
14
|
+
social-hub skills install --agent cursor --global --yes
|
|
15
|
+
social-hub skills install --agent claude-code --project --yes
|
|
16
|
+
social-hub skills install --agent codex --global --all --yes
|
|
17
|
+
|
|
18
|
+
# 更新到当前 CLI 内置版本
|
|
19
|
+
social-hub skills update --all --yes
|
|
20
|
+
|
|
21
|
+
# 健康检查
|
|
22
|
+
social-hub skills doctor --json
|
|
23
|
+
|
|
24
|
+
# 无需全局安装
|
|
25
|
+
npx @geoly-ai/social-hub-cli skills bootstrap
|
|
26
|
+
pnpm dlx @geoly-ai/social-hub-cli skills list
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
支持 [skill.sh](https://skill.sh) 兼容的全部 agent(`social-hub skills list --agents`)。安装状态记录在目标目录下的 `.social-hub-skills.json`。
|
|
30
|
+
|
|
31
|
+
## 发布到 skill 市场(skill.sh / Agent Skill Hub)
|
|
32
|
+
|
|
33
|
+
1. 将本仓库推送到 GitHub(`skills/` 保持在仓库内)。
|
|
34
|
+
2. 在 [skill.sh](https://skill.sh) 或 Agent Skill Hub 添加仓库 URL,选择要导入的 skill 目录(如 `skills/social-hub-cli`)。
|
|
35
|
+
3. 用户安装示例(以市场 CLI 为准,名称可能为 `skill`、`skhub` 等):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 示例:从 registry 安装(具体命令以 skill.sh 文档为准)
|
|
39
|
+
skill add <org>/social-ops-hub/social-hub-cli
|
|
40
|
+
skill add <org>/social-ops-hub/social-hub-ops-runtime
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
每个 skill 为独立目录,内含 `SKILL.md`(YAML frontmatter 含 `name`、`description`)。
|
|
44
|
+
|
|
45
|
+
## 本地开发安装(任意 IDE)
|
|
46
|
+
|
|
47
|
+
| 方式 | 说明 |
|
|
48
|
+
|------|------|
|
|
49
|
+
| **CLI(推荐)** | `social-hub skills install --agent cursor` 或 `social-hub skills tui` |
|
|
50
|
+
| **npx** | `npx @geoly-ai/social-hub-cli skills bootstrap` |
|
|
51
|
+
| **项目内脚本** | `pnpm skills:install` → 默认 `.agents/skills/` |
|
|
52
|
+
| **指定目录** | `SKILLS_INSTALL_DIR=~/.cursor/skills pnpm skills:install` |
|
|
53
|
+
| **符号链接** | `social-hub skills install --symlink --dir <path>` |
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 默认:复制到 social-ops-hub/.agents/skills/
|
|
57
|
+
pnpm skills:install
|
|
58
|
+
|
|
59
|
+
# 安装到自定义目录(Cursor / Codex / Claude Code / 其他)
|
|
60
|
+
SKILLS_INSTALL_DIR="$HOME/.config/your-agent/skills" pnpm skills:install
|
|
61
|
+
|
|
62
|
+
# 校验 frontmatter 与 manifest
|
|
63
|
+
pnpm skills:check
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
安装后**重启或重新加载**当前 IDE/Agent 的 skill 列表(各产品入口不同)。
|
|
67
|
+
|
|
68
|
+
## Skill 列表
|
|
69
|
+
|
|
70
|
+
| Skill | 用途 |
|
|
71
|
+
|-------|------|
|
|
72
|
+
| [social-hub-cli](social-hub-cli) | 总路由 + 命令速查 |
|
|
73
|
+
| [social-hub-shared](social-hub-shared) | config、auth、doctor、context |
|
|
74
|
+
| [social-hub-ops-runtime](social-hub-ops-runtime) | claim / complete / fail |
|
|
75
|
+
| [social-hub-openclaw-context](social-hub-openclaw-context) | DB 聚合上下文 |
|
|
76
|
+
| [social-hub-accounts](social-hub-accounts) | 账号 |
|
|
77
|
+
| [social-hub-posts](social-hub-posts) | Reddit 帖 |
|
|
78
|
+
| [social-hub-calendar-jobs](social-hub-calendar-jobs) | 日历与任务 |
|
|
79
|
+
| [social-hub-publishing](social-hub-publishing) | 发布闭环 |
|
|
80
|
+
| [social-hub-admin](social-hub-admin) | 系统/团队管理 |
|
|
81
|
+
| [social-hub-intelligence](social-hub-intelligence) | 板块情报 |
|
|
82
|
+
| [social-hub-migration](social-hub-migration) | 导入导出与 replay |
|
|
83
|
+
|
|
84
|
+
清单见 [manifest.json](manifest.json)。与 API/CLI 对齐情况见仓库 `docs/cli-api-coverage.md`。
|
|
85
|
+
|
|
86
|
+
## 版本
|
|
87
|
+
|
|
88
|
+
- CLI / SDK / contracts 与 skills 使用同一 git tag 发布。
|
|
89
|
+
- 各 `SKILL.md` 的 `metadata` 可声明 `cliVersion: ">=0.0.1"`(见 frontmatter)。
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"package": "social-ops-hub",
|
|
4
|
+
"cliVersion": "0.0.3",
|
|
5
|
+
"repository": "social-ops-hub",
|
|
6
|
+
"publish": {
|
|
7
|
+
"registry": "https://skill.sh",
|
|
8
|
+
"layout": "skills/<skill-id>/SKILL.md",
|
|
9
|
+
"note": "Import this GitHub repo on skill.sh; select skill subdirectories under skills/"
|
|
10
|
+
},
|
|
11
|
+
"skills": [
|
|
12
|
+
{
|
|
13
|
+
"id": "social-hub-cli",
|
|
14
|
+
"path": "social-hub-cli",
|
|
15
|
+
"description": "总路由:Hub CLI 触发词与领域 Skill 索引"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "social-hub-shared",
|
|
19
|
+
"path": "social-hub-shared",
|
|
20
|
+
"description": "config、auth、doctor、permissions、context"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "social-hub-ops-runtime",
|
|
24
|
+
"path": "social-hub-ops-runtime",
|
|
25
|
+
"description": "OpenClaw 任务 claim、heartbeat、complete、fail、skip"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "social-hub-openclaw-context",
|
|
29
|
+
"path": "social-hub-openclaw-context",
|
|
30
|
+
"description": "DB-first 账号/任务上下文与板块候选"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "social-hub-accounts",
|
|
34
|
+
"path": "social-hub-accounts",
|
|
35
|
+
"description": "账号 CRUD、品牌绑定、状态快照"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "social-hub-posts",
|
|
39
|
+
"path": "social-hub-posts",
|
|
40
|
+
"description": "Reddit 帖快照、刷新、统计"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "social-hub-calendar-jobs",
|
|
44
|
+
"path": "social-hub-calendar-jobs",
|
|
45
|
+
"description": "日历、调度任务、retry/cancel"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "social-hub-publishing",
|
|
49
|
+
"path": "social-hub-publishing",
|
|
50
|
+
"description": "campaign 到 report 发布闭环"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "social-hub-admin",
|
|
54
|
+
"path": "social-hub-admin",
|
|
55
|
+
"description": "settings、invites、members、api-keys"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "social-hub-intelligence",
|
|
59
|
+
"path": "social-hub-intelligence",
|
|
60
|
+
"description": "板块情报 watchlists、hot posts、industry pools"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "social-hub-migration",
|
|
64
|
+
"path": "social-hub-migration",
|
|
65
|
+
"description": "JSONL 导入导出、runbook replay"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-hub-accounts
|
|
3
|
+
description: >-
|
|
4
|
+
Social Hub 社交账号:social-hub accounts list/get/create/update/delete、brand-bindings、status-snapshots。
|
|
5
|
+
用户要查 Reddit 账号、改 handle、绑品牌、看账号状态快照、同步飞书账号字段时用本 skill。
|
|
6
|
+
metadata:
|
|
7
|
+
cliVersion: ">=0.0.1"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# social-hub-accounts
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
social-hub accounts list -t "$T" -n 50
|
|
14
|
+
social-hub accounts get -t "$T" --id "<uuid>"
|
|
15
|
+
social-hub accounts update -t "$T" --id "<uuid>" -j '{"workflowStage":"active",...}'
|
|
16
|
+
social-hub accounts delete -t "$T" --id "<uuid>" # 危险:需确认
|
|
17
|
+
|
|
18
|
+
social-hub accounts brand-bindings list -t "$T" --account "<uuid>"
|
|
19
|
+
social-hub accounts brand-bindings add -t "$T" --account "<uuid>" -j '{"brandId":"..."}'
|
|
20
|
+
social-hub accounts brand-bindings remove -t "$T" --account "<uuid>" --brand "<brandId>"
|
|
21
|
+
|
|
22
|
+
social-hub accounts status-snapshots list -t "$T" --account "<uuid>"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
OpenClaw 执行前优先 `social-hub context account`(见 `social-hub-openclaw-context`),不要只读本地 `account-profiles/*.md`。
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-hub-admin
|
|
3
|
+
description: >-
|
|
4
|
+
Social Hub 管理面:settings、invites、members、api-keys、agent-teams、users。
|
|
5
|
+
用户要改系统设置、发团队邀请、列成员、轮换 API Key 时用本 skill;高风险写操作需 --apply。
|
|
6
|
+
metadata:
|
|
7
|
+
cliVersion: ">=0.0.1"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# social-hub-admin
|
|
11
|
+
|
|
12
|
+
## Settings(admin)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
social-hub settings list
|
|
16
|
+
social-hub settings get <key>
|
|
17
|
+
social-hub settings set <key> --value "..." --dry-run
|
|
18
|
+
social-hub settings set <key> --value "..." --apply
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Invites
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
social-hub invites list -t "$T"
|
|
25
|
+
social-hub invites create -t "$T" --email user@example.com --role manager --dry-run
|
|
26
|
+
social-hub invites create -t "$T" --email user@example.com --role manager --apply
|
|
27
|
+
social-hub invites revoke -t "$T" --id "<inviteId>" --apply
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Members
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
social-hub members list
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
API Keys、users、agent-teams 等见 `social-hub-cli` 管理章节。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-hub-calendar-jobs
|
|
3
|
+
description: >-
|
|
4
|
+
发布日历与调度任务:social-hub calendar list、jobs list/create/batch/retry/cancel。
|
|
5
|
+
用户要排期、查 scheduled job、重试失败任务、取消任务时用本 skill;Agent 执行态回填优先 ops-runtime。
|
|
6
|
+
metadata:
|
|
7
|
+
cliVersion: ">=0.0.1"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# social-hub-calendar-jobs
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
social-hub calendar list -t "$T"
|
|
14
|
+
social-hub jobs list -t "$T" --status scheduled
|
|
15
|
+
social-hub jobs create -t "$T" -j '{"socialAccountId":"...","subreddit":"...","runAt":"..."}'
|
|
16
|
+
social-hub jobs retry -t "$T" --job "<id>"
|
|
17
|
+
social-hub jobs cancel -t "$T" --job "<id>"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
遗留:`jobs agent-status` 仍可更新状态,但 OpenClaw 推荐:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
social-hub ops claim-next -t "$T" --agent "<agentId>"
|
|
24
|
+
social-hub ops complete|fail|skip ...
|
|
25
|
+
```
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-hub-cli
|
|
3
|
+
description: >-
|
|
4
|
+
Social Ops Hub 命令行 social-hub:账号、事件、日历、调度任务、Reddit 帖、报告、API Key、OpenClaw 回填等。
|
|
5
|
+
只要用户提到 social-hub、Social Ops Hub、Hub 写数据、查账号、发帖计划、permalink 回填、openclaw、
|
|
6
|
+
调度任务、团队 API Key、互动事件,或要在 Hub 里查/改运营数据,就应使用本 skill(即使用户没说 CLI)。
|
|
7
|
+
先读本 skill 做路由,再打开对应领域 skill(ops-runtime、openclaw-context 等)。
|
|
8
|
+
metadata:
|
|
9
|
+
cliVersion: ">=0.0.3"
|
|
10
|
+
homepage: https://github.com/your-org/social-ops-hub/tree/main/skills
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Social Hub CLI
|
|
14
|
+
|
|
15
|
+
`social-hub` 封装 Social Ops Hub REST API,供人工与 Agent 使用。配套领域 skill 与本目录同级(`skills/social-hub-*`)。
|
|
16
|
+
|
|
17
|
+
## 安装 Skill
|
|
18
|
+
|
|
19
|
+
- **推荐(CLI)**:`social-hub skills tui` 或 `social-hub skills install --agent cursor --global --yes`
|
|
20
|
+
- **免全局安装**:`npx @geoly-ai/social-hub-cli skills bootstrap`
|
|
21
|
+
- **更新已装 skill**:`social-hub skills update --all --yes`
|
|
22
|
+
- **检查状态**:`social-hub skills doctor`
|
|
23
|
+
- **同仓开发**:`pnpm skills:install`(或 `pnpm --filter @geoly-ai/social-hub-cli run build` 后使用内置 bundle)
|
|
24
|
+
- **skill.sh / 公开市场**:从 [skill.sh](https://skill.sh) 导入本仓库 `skills/` 子目录(见 `skills/README.md`)
|
|
25
|
+
|
|
26
|
+
## 领域 Skill 路由(先读子 skill)
|
|
27
|
+
|
|
28
|
+
| 场景 | Skill |
|
|
29
|
+
|------|--------|
|
|
30
|
+
| 配置 / doctor / auth | `social-hub-shared` |
|
|
31
|
+
| OpenClaw 领任务 / 回填 | `social-hub-ops-runtime` |
|
|
32
|
+
| 账号/任务上下文(DB) | `social-hub-openclaw-context` |
|
|
33
|
+
| 账号 CRUD | `social-hub-accounts` |
|
|
34
|
+
| Reddit 帖 | `social-hub-posts` |
|
|
35
|
+
| 日历 / jobs | `social-hub-calendar-jobs` |
|
|
36
|
+
| 发布闭环 | `social-hub-publishing` |
|
|
37
|
+
| settings / invites | `social-hub-admin` |
|
|
38
|
+
| 情报 | `social-hub-intelligence` |
|
|
39
|
+
| 导入导出 replay | `social-hub-migration` |
|
|
40
|
+
|
|
41
|
+
`social-hub` 是 Social Ops Hub 的命令行工具,封装了全部 REST API。
|
|
42
|
+
|
|
43
|
+
## 配置(环境变量)
|
|
44
|
+
|
|
45
|
+
使用前需设置以下环境变量:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
export SOCIAL_HUB_API_URL="http://localhost:3000" # Hub API 地址,默认 localhost:3000
|
|
49
|
+
export SOCIAL_HUB_API_KEY="soh_..." # API Key(除 health 外均必需)
|
|
50
|
+
export SOCIAL_HUB_TEAM_ID="<uuid>" # 当前操作的 Team UUID(命令中用 $SOCIAL_HUB_TEAM_ID)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`health` 命令不需要 API Key。其他所有命令必须设置 `SOCIAL_HUB_API_KEY`。
|
|
54
|
+
|
|
55
|
+
## 前置步骤:Build
|
|
56
|
+
|
|
57
|
+
在 **本 monorepo 根目录** 首次使用或更新代码后,需先 build:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
cd "$(git rev-parse --show-toplevel)"
|
|
61
|
+
pnpm --filter @geoly-ai/social-hub-sdk run build
|
|
62
|
+
pnpm --filter @geoly-ai/social-hub-cli run build
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 初始化工作流(新环境冷启动)
|
|
68
|
+
|
|
69
|
+
### 步骤 0:部署前置
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# 1. 复制并填写环境变量
|
|
73
|
+
cp .env.example .env
|
|
74
|
+
# 至少填写:DATABASE_URL、REDIS_URL、API_KEY_PEPPER、JWT_SECRET
|
|
75
|
+
|
|
76
|
+
# 2. 执行数据库迁移
|
|
77
|
+
pnpm run db:migrate
|
|
78
|
+
|
|
79
|
+
# 3. 初始化最小管理员种子(自动创建 moss team + admin 用户 + seed-cli API Key)
|
|
80
|
+
SOCIAL_OPS_SEED_MODE=minimal-admin pnpm run db:seed
|
|
81
|
+
# 控制台输出:
|
|
82
|
+
# admin@local.test / password123
|
|
83
|
+
# SOCIAL_HUB_TEAM_ID=<uuid>
|
|
84
|
+
# SOCIAL_HUB_API_KEY=soh_...
|
|
85
|
+
|
|
86
|
+
# 4. 导出环境变量(或写入 .env)
|
|
87
|
+
export SOCIAL_HUB_API_URL="http://localhost:3000"
|
|
88
|
+
export SOCIAL_HUB_API_KEY="soh_..." # 从上面控制台复制
|
|
89
|
+
export SOCIAL_HUB_TEAM_ID="<moss-team-uuid>" # 从上面控制台复制
|
|
90
|
+
|
|
91
|
+
# 5. 验证 Hub 是否正常
|
|
92
|
+
social-hub health
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 步骤 1:创建新团队(若需要独立 team)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# 使用 admin API Key 创建新团队
|
|
99
|
+
NEW_TEAM=$(social-hub agent-teams create --slug javis --name "Javis Agent Team" | jq -r '.id')
|
|
100
|
+
export T=$NEW_TEAM
|
|
101
|
+
|
|
102
|
+
# 创建运营用户(密码直接设置,不需要 set-password 额外操作)
|
|
103
|
+
social-hub users create -t $T -j '{"email":"ops@javis.local","password":"Ops2026!","name":"Javis Ops","role":"manager"}'
|
|
104
|
+
|
|
105
|
+
# 为新团队创建 API Key(Web 登录后进入 API Keys 页面,或用 admin key)
|
|
106
|
+
social-hub api-keys create -t $T -j '{"name":"javis-ops","role":"manager"}'
|
|
107
|
+
# → 记录返回的 rawKey,后续操作换用该 Key
|
|
108
|
+
|
|
109
|
+
export SOCIAL_HUB_TEAM_ID=$T
|
|
110
|
+
export SOCIAL_HUB_API_KEY="soh_..." # 上面新建的 Key
|
|
111
|
+
|
|
112
|
+
# 确认团队列表
|
|
113
|
+
social-hub agent-teams list
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 步骤 2:创建业务数据(Brand → Campaign → Account → Plan)
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
T=$SOCIAL_HUB_TEAM_ID
|
|
120
|
+
|
|
121
|
+
# 创建品牌
|
|
122
|
+
BRAND_ID=$(social-hub brands create -t $T -j '{"name":"My Brand","slug":"my-brand"}' | jq -r '.id')
|
|
123
|
+
|
|
124
|
+
# 创建 Campaign
|
|
125
|
+
CAMP_ID=$(social-hub campaigns create -t $T -j \
|
|
126
|
+
"{\"brandId\":\"$BRAND_ID\",\"name\":\"2026 Q3 Launch\"}" | jq -r '.id')
|
|
127
|
+
|
|
128
|
+
# 添加 Reddit 账号
|
|
129
|
+
ACCOUNT_ID=$(social-hub accounts create -t $T -j \
|
|
130
|
+
"{\"platform\":\"reddit\",\"handle\":\"u/my_ops_account\",\"credentialsRef\":\"vault:javis/main\"}" | jq -r '.id')
|
|
131
|
+
|
|
132
|
+
# 创建内容草稿
|
|
133
|
+
DRAFT_ID=$(social-hub drafts create -t $T -j \
|
|
134
|
+
"{\"campaignId\":\"$CAMP_ID\",\"title\":\"Launch Post\",\"body\":\"...\"}" | jq -r '.id')
|
|
135
|
+
|
|
136
|
+
# 创建发布计划(自动生成 scheduled_jobs)
|
|
137
|
+
social-hub plans create -t $T -j "{
|
|
138
|
+
\"campaignId\": \"$CAMP_ID\",
|
|
139
|
+
\"name\": \"Q3 Week 1\",
|
|
140
|
+
\"entries\": [{
|
|
141
|
+
\"socialAccountId\": \"$ACCOUNT_ID\",
|
|
142
|
+
\"subreddit\": \"LocalLLaMA\",
|
|
143
|
+
\"plannedAt\": \"2026-07-01T09:00:00Z\",
|
|
144
|
+
\"contentDraftId\": \"$DRAFT_ID\"
|
|
145
|
+
}]
|
|
146
|
+
}"
|
|
147
|
+
|
|
148
|
+
# 验证:查看日历和任务
|
|
149
|
+
social-hub calendar list -t $T --status scheduled
|
|
150
|
+
social-hub jobs list -t $T --status scheduled
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 命令速查表
|
|
156
|
+
|
|
157
|
+
### health & dashboard
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
social-hub health
|
|
161
|
+
social-hub dashboard summary -t $T
|
|
162
|
+
social-hub dashboard summary -t $T # 支持 campaignId 过滤(通过 API 传参)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 互动事件
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
social-hub events append -t $T --type comment --payload '{"permalink":"https://..."}'
|
|
169
|
+
social-hub events list -t $T -n 20 # 简单列表
|
|
170
|
+
social-hub events list-full -t $T --account <uuid> # 按账号过滤
|
|
171
|
+
social-hub events list-full -t $T --type comment --result succeeded --from 2026-05-01T00:00:00Z
|
|
172
|
+
social-hub events export-csv -t $T > events.csv
|
|
173
|
+
social-hub events export-csv -t $T --account <uuid> --from 2026-05-01T00:00:00Z > filtered.csv
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 发布日历
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
social-hub calendar list -t $T --status scheduled
|
|
180
|
+
social-hub calendar list-full -t $T --account <accountId> --status scheduled
|
|
181
|
+
social-hub calendar patch -t $T -e <entryId> --body '{"status":"succeeded","permalink":"https://..."}'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 调度任务
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
social-hub jobs list -t $T --status scheduled
|
|
188
|
+
social-hub jobs list-full -t $T --account <accountId>
|
|
189
|
+
social-hub jobs create -t $T -j '{"socialAccountId":"<uuid>","action":"engage","subreddit":"LocalLLaMA","runAt":"2026-05-07T09:00:00Z"}'
|
|
190
|
+
social-hub jobs agent-status -t $T -i <jobId> -j '{"status":"succeeded"}'
|
|
191
|
+
social-hub jobs agent-status -t $T -i <jobId> -j '{"status":"failed","lastError":"timeout"}'
|
|
192
|
+
social-hub jobs retry -t $T -i <jobId>
|
|
193
|
+
social-hub jobs cancel -t $T -i <jobId>
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 发布计划
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
social-hub plans list -t $T
|
|
200
|
+
social-hub plans list -t $T --campaign <campaignId>
|
|
201
|
+
social-hub plans create -t $T -j '{"campaignId":"<uuid>","name":"Q3 Week1","entries":[{"socialAccountId":"<uuid>","subreddit":"LocalLLaMA","plannedAt":"2026-07-01T09:00:00Z"}]}'
|
|
202
|
+
social-hub plans cancel -t $T --plan <planId>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 内容草稿
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
social-hub drafts list -t $T -n 20
|
|
209
|
+
social-hub drafts create -t $T -j '{"campaignId":"<uuid>","title":"Test Post","body":"Content..."}'
|
|
210
|
+
social-hub drafts get -t $T --draft <uuid>
|
|
211
|
+
social-hub drafts update -t $T --draft <uuid> -j '{"status":"approved"}'
|
|
212
|
+
social-hub drafts delete -t $T --draft <uuid>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 报告库
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
social-hub reports list -t $T -n 20
|
|
219
|
+
social-hub reports create -t $T -j '{"reportType":"campaign-digest","title":"5月报告","source":"manual","contentMarkdown":"# 报告..."}'
|
|
220
|
+
social-hub reports ingest -t $T -j '{"reportType":"reddit-post-snapshot","source":"path/to/file.md"}'
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 账号管理
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
social-hub accounts list -t $T
|
|
227
|
+
social-hub accounts list -t $T --status active
|
|
228
|
+
social-hub accounts get -t $T --account <uuid>
|
|
229
|
+
social-hub accounts create -t $T -j '{"platform":"reddit","handle":"u_example","externalId":"..."}'
|
|
230
|
+
social-hub compliance risk-get -t $T -a <accountId>
|
|
231
|
+
social-hub compliance risk-put -t $T -a <accountId> -j '{"riskLevel":"medium","notes":"..."}'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### 品牌与 Campaign
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
social-hub brands list -t $T
|
|
238
|
+
social-hub brands create -t $T -j '{"name":"My Brand","slug":"my-brand"}'
|
|
239
|
+
social-hub brands update -t $T --brand <brandId> -j '{"name":"New Name"}'
|
|
240
|
+
social-hub campaigns list -t $T --brand <brandId>
|
|
241
|
+
social-hub campaigns get -t $T --campaign <uuid>
|
|
242
|
+
social-hub campaigns create -t $T -j '{"brandId":"<uuid>","name":"2026 Q2"}'
|
|
243
|
+
social-hub campaigns update -t $T --campaign <uuid> -j '{"name":"2026 Q3"}'
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### 板块情报
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
social-hub intelligence hot-posts -t $T --subreddit LocalLLaMA
|
|
250
|
+
social-hub intelligence hot-posts -t $T --sort score -n 50
|
|
251
|
+
social-hub intelligence dispatch -t $T -j '{"hotPostId":"<uuid>","socialAccountId":"<uuid>","action":"engage"}'
|
|
252
|
+
social-hub intelligence kol-intents -t $T -n 20
|
|
253
|
+
social-hub intelligence watchlists-list -t $T
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 团队与用户管理
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
social-hub agent-teams list
|
|
260
|
+
social-hub agent-teams create --slug moss --name "Moss Agent Team" # admin only
|
|
261
|
+
social-hub agent-teams add-member -t $T --user <userId> --role manager # admin only
|
|
262
|
+
social-hub users list -t $T
|
|
263
|
+
social-hub users create -t $T -j '{"email":"agent@example.com","password":"xxx","role":"manager"}'
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 通知渠道
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
social-hub notification-channels list -t $T
|
|
270
|
+
social-hub notification-channels create -t $T -j '{"provider":"feishu","externalId":"https://open.feishu.cn/open-apis/bot/v2/hook/..."}'
|
|
271
|
+
social-hub notification-channels test -t $T --channel <uuid>
|
|
272
|
+
social-hub notification-channels delete -t $T --channel <uuid>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### API Key 管理
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
social-hub api-keys list -t $T
|
|
279
|
+
social-hub api-keys create -t $T -j '{"name":"agent-key","role":"manager"}'
|
|
280
|
+
social-hub api-keys rotate -t $T --key <uuid>
|
|
281
|
+
social-hub api-keys delete -t $T --key <uuid>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 典型工作流
|
|
287
|
+
|
|
288
|
+
### 工作流 1:Agent 执行完成后回填 Hub
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
T=$SOCIAL_HUB_TEAM_ID
|
|
292
|
+
ENTRY_ID="<calendarEntryId>"
|
|
293
|
+
PERMALINK="https://www.reddit.com/r/LocalLLaMA/comments/xxx/yyy/"
|
|
294
|
+
|
|
295
|
+
# 1. 更新日历条目状态为 succeeded
|
|
296
|
+
social-hub calendar patch -t $T -e $ENTRY_ID \
|
|
297
|
+
--body "{\"status\":\"succeeded\",\"permalink\":\"$PERMALINK\"}"
|
|
298
|
+
|
|
299
|
+
# 2. 写入互动事件
|
|
300
|
+
social-hub events append -t $T \
|
|
301
|
+
--type "post.published" \
|
|
302
|
+
--payload "{\"permalink\":\"$PERMALINK\",\"calendarEntryId\":\"$ENTRY_ID\"}"
|
|
303
|
+
|
|
304
|
+
# 3. 查看该账号近期事件(验证写入)
|
|
305
|
+
social-hub events list-full -t $T --account $ACCOUNT_ID -n 10
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 工作流 2:查看账号运营数据
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
T=$SOCIAL_HUB_TEAM_ID
|
|
312
|
+
ACCOUNT_ID="<socialAccountId>"
|
|
313
|
+
|
|
314
|
+
# 账号详情
|
|
315
|
+
social-hub accounts get -t $T --account $ACCOUNT_ID
|
|
316
|
+
|
|
317
|
+
# 近期事件
|
|
318
|
+
social-hub events list-full -t $T --account $ACCOUNT_ID -n 20
|
|
319
|
+
|
|
320
|
+
# 近期调度任务
|
|
321
|
+
social-hub jobs list-full -t $T --account $ACCOUNT_ID --status scheduled
|
|
322
|
+
|
|
323
|
+
# 关联发布日历
|
|
324
|
+
social-hub calendar list-full -t $T --account $ACCOUNT_ID --status scheduled
|
|
325
|
+
|
|
326
|
+
# 风险档案
|
|
327
|
+
social-hub compliance risk-get -t $T -a $ACCOUNT_ID
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### 工作流 3:情报热帖派发任务
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
T=$SOCIAL_HUB_TEAM_ID
|
|
334
|
+
|
|
335
|
+
# 1. 查看热帖
|
|
336
|
+
social-hub intelligence hot-posts -t $T --sort score -n 10
|
|
337
|
+
|
|
338
|
+
# 2. 查看可用账号
|
|
339
|
+
social-hub accounts list -t $T --status active
|
|
340
|
+
|
|
341
|
+
# 3. 派发互动任务
|
|
342
|
+
social-hub intelligence dispatch -t $T -j '{
|
|
343
|
+
"hotPostId": "<hotPostId>",
|
|
344
|
+
"socialAccountId": "<accountId>",
|
|
345
|
+
"action": "engage",
|
|
346
|
+
"runAt": "2026-05-07T09:00:00Z"
|
|
347
|
+
}'
|
|
348
|
+
|
|
349
|
+
# 4. 确认任务已创建
|
|
350
|
+
social-hub jobs list -t $T --status scheduled -n 5
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 注意事项
|
|
356
|
+
|
|
357
|
+
- 所有命令输出均为 **JSON**,可管道传给 `jq` 处理:`social-hub accounts list -t $T | jq '.items[].handle'`
|
|
358
|
+
- `DELETE` 端点(drafts delete、plans cancel、notification-channels delete)返回空响应(204),成功时打印 `OK`
|
|
359
|
+
- `events export-csv` 和 `intelligence hot-posts-export` 输出 CSV 到 stdout,可直接重定向:`> output.csv`
|
|
360
|
+
- 团队管理操作(`agent-teams create/update/add-member`)需要 **admin** 角色的 API Key
|
|
361
|
+
- Session(Cookie)认证不在 CLI 支持范围内,始终使用 API Key
|
|
362
|
+
|