@geoly-ai/social-hub-cli 0.1.8 → 0.1.10
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 +30 -0
- package/dist/cmd-manifest.json +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +151 -9
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +16 -1
- package/dist/index.test.js.map +1 -1
- package/dist/register-extensions.d.ts.map +1 -1
- package/dist/register-extensions.js +5 -1
- package/dist/register-extensions.js.map +1 -1
- package/dist/register-skills.d.ts +25 -0
- package/dist/register-skills.d.ts.map +1 -1
- package/dist/register-skills.js +24 -7
- package/dist/register-skills.js.map +1 -1
- package/dist/register-skills.test.d.ts +2 -0
- package/dist/register-skills.test.d.ts.map +1 -0
- package/dist/register-skills.test.js +15 -0
- package/dist/register-skills.test.js.map +1 -0
- package/package.json +2 -2
- package/skills/manifest.json +2 -2
- package/skills/social-hub-accounts/SKILL.md +41 -4
- package/skills/social-hub-intelligence/SKILL.md +34 -3
- package/skills/social-hub-migration/SKILL.md +37 -4
- package/skills/social-hub-posts/SKILL.md +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,36 @@ 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.10] - 2026-06-09
|
|
8
|
+
|
|
9
|
+
Normalize reddit post opsStatus filters; align stats filters; update social-hub-posts skill and reddit stats CLI options.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- improve refresh fallback routing and post performance UX
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- normalize opsStatus filters and align stats query scope
|
|
16
|
+
## [0.1.9] - 2026-06-08
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- systematize hub ingest and runtime gates
|
|
20
|
+
- add persona pool alias seeding
|
|
21
|
+
- Hub-first ops runtime, style-curator skill, and post list UX
|
|
22
|
+
- complete repost link support
|
|
23
|
+
- brand-first publishing scope, persona-aware pools, cli update check
|
|
24
|
+
- persona-aware subreddit candidates and diversity selection
|
|
25
|
+
- extend system library fields and import dataset
|
|
26
|
+
- server-side filters, refresh run logs, CLI/SDK sync
|
|
27
|
+
- sanctions update/delete and blocklist UI on RiskCenter
|
|
28
|
+
- move subreddit blocklists to system level
|
|
29
|
+
- status-snapshot externalRef idempotency and CLI cmd manifest
|
|
30
|
+
- add system persona library and account personaId linking
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- auto-detect managed dirs for skills update/remove
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- close admin gap with db/api/e2e coverage
|
|
7
37
|
## [0.1.8] - 2026-06-05
|
|
8
38
|
|
|
9
39
|
Bundle updated Social Hub subreddit pool skills and persona pool alias guidance.
|
package/dist/cmd-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-06-
|
|
3
|
-
"cliVersion": "0.1.
|
|
2
|
+
"generatedAt": "2026-06-09T10:02:44.163Z",
|
|
3
|
+
"cliVersion": "0.1.10",
|
|
4
4
|
"commands": [
|
|
5
5
|
"accounts",
|
|
6
6
|
"accounts brand-bindings",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"accounts browser-envs create",
|
|
12
12
|
"accounts browser-envs list",
|
|
13
13
|
"accounts browser-envs list-team",
|
|
14
|
+
"accounts browser-envs telemetry",
|
|
15
|
+
"accounts browser-envs telemetry append",
|
|
16
|
+
"accounts browser-envs telemetry list",
|
|
14
17
|
"accounts browser-envs update",
|
|
15
18
|
"accounts create",
|
|
16
19
|
"accounts delete",
|
|
@@ -24,6 +27,10 @@
|
|
|
24
27
|
"accounts status-snapshots list",
|
|
25
28
|
"accounts style-guide",
|
|
26
29
|
"accounts style-guide get",
|
|
30
|
+
"accounts subreddit-affinities",
|
|
31
|
+
"accounts subreddit-affinities list",
|
|
32
|
+
"accounts subreddit-affinities recompute",
|
|
33
|
+
"accounts subreddit-affinities upsert",
|
|
27
34
|
"accounts update",
|
|
28
35
|
"agent-teams",
|
|
29
36
|
"agent-teams add-member",
|
|
@@ -181,6 +188,10 @@
|
|
|
181
188
|
"members teams-list",
|
|
182
189
|
"members teams-remove",
|
|
183
190
|
"members update-role",
|
|
191
|
+
"migration",
|
|
192
|
+
"migration workspace-docs",
|
|
193
|
+
"migration workspace-docs list",
|
|
194
|
+
"migration workspace-docs refs",
|
|
184
195
|
"notification-channels",
|
|
185
196
|
"notification-channels create",
|
|
186
197
|
"notification-channels delete",
|
|
@@ -188,6 +199,7 @@
|
|
|
188
199
|
"notification-channels test",
|
|
189
200
|
"notification-channels update",
|
|
190
201
|
"openclaw-ingest",
|
|
202
|
+
"openclaw-ingest status",
|
|
191
203
|
"ops",
|
|
192
204
|
"ops claim",
|
|
193
205
|
"ops claim-next",
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2lG9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -303,7 +303,7 @@ reddit
|
|
|
303
303
|
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
304
304
|
.option("--brand <uuid>", "system-level brandId")
|
|
305
305
|
.option("--entry <uuid>", "calendarEntryId")
|
|
306
|
-
.option("--ops-status <st>", "opsStatus filter")
|
|
306
|
+
.option("--ops-status <st>", "opsStatus filter (normal|risk|deleted|abnormal|unknown)")
|
|
307
307
|
.option("--post-type <t>", "postType filter")
|
|
308
308
|
.option("--contains-brand-keyword <v>", "true | false | unset")
|
|
309
309
|
.option("--primary-product <text>", "primary product contains match")
|
|
@@ -951,27 +951,81 @@ compliance
|
|
|
951
951
|
console.log(JSON.stringify(res, null, 2));
|
|
952
952
|
});
|
|
953
953
|
// --- openclaw ---
|
|
954
|
-
program
|
|
954
|
+
const openclawIngest = program
|
|
955
955
|
.command("openclaw-ingest")
|
|
956
|
-
.description("POST /openclaw-ingest")
|
|
957
|
-
|
|
958
|
-
.
|
|
959
|
-
.
|
|
956
|
+
.description("POST /openclaw-ingest — import OpenClaw shared state into Hub");
|
|
957
|
+
openclawIngest
|
|
958
|
+
.command("status")
|
|
959
|
+
.description("GET /openclaw-ingest/runs/:runId")
|
|
960
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
961
|
+
.requiredOption("--run <runId>", "Ingest run UUID")
|
|
962
|
+
.action(async (opts) => {
|
|
963
|
+
const res = await requireClient().getOpenClawIngestRun(opts.team, opts.run);
|
|
964
|
+
console.log(JSON.stringify(res, null, 2));
|
|
965
|
+
});
|
|
966
|
+
openclawIngest
|
|
967
|
+
.option("-t, --team <teamId>", "Team UUID")
|
|
968
|
+
.option("--dry-run", "mode=dry-run (default)")
|
|
969
|
+
.option("--apply", "mode=apply")
|
|
970
|
+
.option("--wait", "block until run completes")
|
|
971
|
+
.option("--idempotency-key <key>", "dedupe key for repeated ingest")
|
|
972
|
+
.option("--source-root <path>", "OpenClaw workspace root")
|
|
973
|
+
.option("--account-status <path>", "account status markdown path")
|
|
974
|
+
.option("--interaction-history <path>", "interaction history JSON path")
|
|
975
|
+
.option("--post-performance-log <path>", "post performance log path")
|
|
976
|
+
.option("--campaigns-dir <path>", "campaigns directory")
|
|
977
|
+
.option("--op-reports-dir <path>", "op reports directory (repeatable)", collect, [])
|
|
978
|
+
.option("--op-report-file <path>", "op report file (repeatable)", collect, [])
|
|
979
|
+
.option("-j, --json <json>", "advanced body override JSON")
|
|
980
|
+
.action(async (opts) => {
|
|
981
|
+
if (!opts.team) {
|
|
982
|
+
console.error("Missing required option -t / --team (or use: openclaw-ingest status)");
|
|
983
|
+
process.exit(1);
|
|
984
|
+
}
|
|
960
985
|
let body = {
|
|
961
|
-
mode: "dry-run",
|
|
986
|
+
mode: opts.apply ? "apply" : "dry-run",
|
|
962
987
|
};
|
|
963
988
|
if (opts.json) {
|
|
964
989
|
try {
|
|
965
|
-
body = JSON.parse(opts.json);
|
|
990
|
+
body = { ...body, ...JSON.parse(opts.json) };
|
|
966
991
|
}
|
|
967
992
|
catch {
|
|
968
993
|
console.error("Invalid -j / --json");
|
|
969
994
|
process.exit(1);
|
|
970
995
|
}
|
|
971
996
|
}
|
|
997
|
+
if (opts.sourceRoot)
|
|
998
|
+
body.sourceRoot = opts.sourceRoot;
|
|
999
|
+
if (opts.idempotencyKey)
|
|
1000
|
+
body.idempotencyKey = opts.idempotencyKey;
|
|
1001
|
+
if (opts.wait)
|
|
1002
|
+
body.wait = true;
|
|
1003
|
+
const sourcePaths = {
|
|
1004
|
+
...(body.sourcePaths ?? {}),
|
|
1005
|
+
};
|
|
1006
|
+
if (opts.accountStatus)
|
|
1007
|
+
sourcePaths.accountStatus = opts.accountStatus;
|
|
1008
|
+
if (opts.interactionHistory) {
|
|
1009
|
+
sourcePaths.interactionHistoryFile = opts.interactionHistory;
|
|
1010
|
+
}
|
|
1011
|
+
if (opts.postPerformanceLog) {
|
|
1012
|
+
sourcePaths.postPerformanceLog = opts.postPerformanceLog;
|
|
1013
|
+
}
|
|
1014
|
+
if (opts.campaignsDir)
|
|
1015
|
+
sourcePaths.campaignsDir = opts.campaignsDir;
|
|
1016
|
+
if (opts.opReportsDir?.length)
|
|
1017
|
+
sourcePaths.opReportsDirs = opts.opReportsDir;
|
|
1018
|
+
if (opts.opReportFile?.length)
|
|
1019
|
+
sourcePaths.opReportFiles = opts.opReportFile;
|
|
1020
|
+
if (Object.keys(sourcePaths).length > 0) {
|
|
1021
|
+
body.sourcePaths = sourcePaths;
|
|
1022
|
+
}
|
|
972
1023
|
const res = await requireClient().triggerOpenClawIngest(opts.team, body);
|
|
973
1024
|
console.log(JSON.stringify(res, null, 2));
|
|
974
1025
|
});
|
|
1026
|
+
function collect(value, previous) {
|
|
1027
|
+
return previous.concat([value]);
|
|
1028
|
+
}
|
|
975
1029
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
976
1030
|
// Group A: single-resource CRUD additions to existing command groups
|
|
977
1031
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -1091,6 +1145,32 @@ agentTeams
|
|
|
1091
1145
|
console.log(JSON.stringify(res, null, 2));
|
|
1092
1146
|
});
|
|
1093
1147
|
});
|
|
1148
|
+
const migration = program.command("migration").description("Hub migration helpers");
|
|
1149
|
+
const migrationWorkspaceDocs = migration
|
|
1150
|
+
.command("workspace-docs")
|
|
1151
|
+
.description("Workspace document refs");
|
|
1152
|
+
migrationWorkspaceDocs
|
|
1153
|
+
.command("list")
|
|
1154
|
+
.description("List workspace documents")
|
|
1155
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
1156
|
+
.option("--kind <kind>", "document kind filter")
|
|
1157
|
+
.option("-n, --limit <n>", "limit", "50")
|
|
1158
|
+
.action(async (opts) => {
|
|
1159
|
+
const res = await requireClient().listWorkspaceDocuments(opts.team, {
|
|
1160
|
+
kind: opts.kind,
|
|
1161
|
+
limit: Number(opts.limit),
|
|
1162
|
+
});
|
|
1163
|
+
console.log(JSON.stringify(res, null, 2));
|
|
1164
|
+
});
|
|
1165
|
+
migrationWorkspaceDocs
|
|
1166
|
+
.command("refs")
|
|
1167
|
+
.description("GET workspace document parsed refs")
|
|
1168
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
1169
|
+
.requiredOption("--doc <documentId>", "Workspace document UUID")
|
|
1170
|
+
.action(async (opts) => {
|
|
1171
|
+
const res = await requireClient().listWorkspaceDocumentRefs(opts.team, opts.doc);
|
|
1172
|
+
console.log(JSON.stringify(res, null, 2));
|
|
1173
|
+
});
|
|
1094
1174
|
agentTeams
|
|
1095
1175
|
.command("create")
|
|
1096
1176
|
.description("POST /v1/agent-teams — 新建团队(admin only)")
|
|
@@ -2295,7 +2375,7 @@ reddit
|
|
|
2295
2375
|
.option("--brand <uuid>", "system-level brandId")
|
|
2296
2376
|
.option("--entry <uuid>", "calendarEntryId")
|
|
2297
2377
|
.option("--account <uuid>", "socialAccountId")
|
|
2298
|
-
.option("--ops-status <st>", "opsStatus filter")
|
|
2378
|
+
.option("--ops-status <st>", "opsStatus filter (normal|risk|deleted|abnormal|unknown)")
|
|
2299
2379
|
.option("--post-type <t>", "postType filter")
|
|
2300
2380
|
.option("--contains-brand-keyword <v>", "true | false | unset")
|
|
2301
2381
|
.option("--primary-product <text>", "primary product contains match")
|
|
@@ -2432,6 +2512,68 @@ browserEnvs
|
|
|
2432
2512
|
console.log(JSON.stringify(res, null, 2));
|
|
2433
2513
|
});
|
|
2434
2514
|
});
|
|
2515
|
+
const browserEnvTelemetry = browserEnvs
|
|
2516
|
+
.command("telemetry")
|
|
2517
|
+
.description("Browser environment telemetry events");
|
|
2518
|
+
browserEnvTelemetry
|
|
2519
|
+
.command("append")
|
|
2520
|
+
.description("POST /browser-environments/:envId/telemetry-events")
|
|
2521
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
2522
|
+
.requiredOption("-e, --env <envId>", "Browser environment UUID")
|
|
2523
|
+
.requiredOption("-j, --json <json>", "telemetry event body JSON")
|
|
2524
|
+
.action(async (opts) => {
|
|
2525
|
+
const body = JSON.parse(opts.json);
|
|
2526
|
+
const res = await requireClient().appendBrowserEnvironmentTelemetryEvent(opts.team, opts.env, body);
|
|
2527
|
+
console.log(JSON.stringify(res, null, 2));
|
|
2528
|
+
});
|
|
2529
|
+
browserEnvTelemetry
|
|
2530
|
+
.command("list")
|
|
2531
|
+
.description("GET /browser-environments/:envId/telemetry-events")
|
|
2532
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
2533
|
+
.requiredOption("-e, --env <envId>", "Browser environment UUID")
|
|
2534
|
+
.option("-n, --limit <n>", "limit", "100")
|
|
2535
|
+
.action(async (opts) => {
|
|
2536
|
+
const res = await requireClient().listBrowserEnvironmentTelemetryEvents(opts.team, opts.env, { limit: Number(opts.limit) });
|
|
2537
|
+
console.log(JSON.stringify(res, null, 2));
|
|
2538
|
+
});
|
|
2539
|
+
const accountAffinities = accounts
|
|
2540
|
+
.command("subreddit-affinities")
|
|
2541
|
+
.description("Account-subreddit affinity/cooldown/risk overrides");
|
|
2542
|
+
accountAffinities
|
|
2543
|
+
.command("list")
|
|
2544
|
+
.description("GET /accounts/:accountId/subreddit-affinities")
|
|
2545
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
2546
|
+
.requiredOption("-a, --account <ref>", "Account UUID or slot")
|
|
2547
|
+
.action(async (opts) => {
|
|
2548
|
+
const res = await requireClient().listAccountSubredditAffinities(opts.team, opts.account);
|
|
2549
|
+
console.log(JSON.stringify(res, null, 2));
|
|
2550
|
+
});
|
|
2551
|
+
accountAffinities
|
|
2552
|
+
.command("upsert")
|
|
2553
|
+
.description("PUT /accounts/:accountId/subreddit-affinities/:subreddit")
|
|
2554
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
2555
|
+
.requiredOption("-a, --account <ref>", "Account UUID or slot")
|
|
2556
|
+
.requiredOption("--subreddit <name>", "Subreddit name")
|
|
2557
|
+
.requiredOption("-j, --json <json>", "affinity body JSON")
|
|
2558
|
+
.action(async (opts) => {
|
|
2559
|
+
const body = JSON.parse(opts.json);
|
|
2560
|
+
const res = await requireClient().upsertAccountSubredditAffinity(opts.team, opts.account, opts.subreddit, body);
|
|
2561
|
+
console.log(JSON.stringify(res, null, 2));
|
|
2562
|
+
});
|
|
2563
|
+
accountAffinities
|
|
2564
|
+
.command("recompute")
|
|
2565
|
+
.description("Enqueue affinity recompute worker job")
|
|
2566
|
+
.requiredOption("-t, --team <teamId>", "Team UUID")
|
|
2567
|
+
.requiredOption("-a, --account <uuid>", "Account UUID")
|
|
2568
|
+
.option("--dry-run", "dry run only", false)
|
|
2569
|
+
.action(async (opts) => {
|
|
2570
|
+
const res = await requireClient().triggerOpenClawRuntimeMaintenance(opts.team, {
|
|
2571
|
+
jobType: "affinity-recompute",
|
|
2572
|
+
socialAccountId: opts.account,
|
|
2573
|
+
dryRun: Boolean(opts.dryRun),
|
|
2574
|
+
});
|
|
2575
|
+
console.log(JSON.stringify(res, null, 2));
|
|
2576
|
+
});
|
|
2435
2577
|
// --- accounts personas ---
|
|
2436
2578
|
const accountPersonas = accounts.command("personas").description("账号人设");
|
|
2437
2579
|
accountPersonas
|