@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 CHANGED
@@ -4,6 +4,34 @@ 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.7] - 2026-06-04
8
+
9
+ ### Added
10
+ - Hub-first ops runtime, style-curator skill, and post list UX
11
+ - complete repost link support
12
+ - brand-first publishing scope, persona-aware pools, cli update check
13
+ - persona-aware subreddit candidates and diversity selection
14
+ - extend system library fields and import dataset
15
+ - server-side filters, refresh run logs, CLI/SDK sync
16
+ - sanctions update/delete and blocklist UI on RiskCenter
17
+ - move subreddit blocklists to system level
18
+ - status-snapshot externalRef idempotency and CLI cmd manifest
19
+ - add system persona library and account personaId linking
20
+ - reddit --aggregate/--all 分页,stats --range 365|all;SDK 补聚合与 offset 参数
21
+
22
+ ### Fixed
23
+ - auto-detect managed dirs for skills update/remove
24
+
25
+ ### Changed
26
+ - close admin gap with db/api/e2e coverage
27
+ ## [0.1.6] - 2026-06-04
28
+
29
+ Post Performance repost-link fields and CLI skill/help alignment.
30
+
31
+ ### Added
32
+ - `reddit create-snapshot`, `reddit update`, and `reddit batch-upsert` help examples now document `firstRepostLink` / `secondRepostLink`.
33
+ - bundled `social-hub-posts` skill documents repost-link create/update/batch-upsert payloads.
34
+
7
35
  ## [0.1.5] - 2026-06-03
8
36
 
9
37
  npm registry update check with agent upgrade hints; brand-first and persona-aware bundled skills.
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-06-03T09:29:35.732Z",
3
- "cliVersion": "0.1.5",
2
+ "generatedAt": "2026-06-04T08:41:41.416Z",
3
+ "cliVersion": "0.1.7",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
@@ -208,7 +208,21 @@
208
208
  "plans cancel",
209
209
  "plans create",
210
210
  "plans list",
211
+ "pools",
212
+ "pools aliases-create",
213
+ "pools aliases-delete",
214
+ "pools aliases-list",
215
+ "pools aliases-update",
216
+ "pools catalog-create",
217
+ "pools catalog-delete",
218
+ "pools catalog-list",
219
+ "pools catalog-update",
220
+ "pools tier-rules-create",
221
+ "pools tier-rules-delete",
222
+ "pools tier-rules-list",
223
+ "pools tier-rules-update",
211
224
  "query",
225
+ "query account-pool-context",
212
226
  "query account-pools",
213
227
  "query subreddit-candidates",
214
228
  "reddit",
@@ -21,6 +21,8 @@ describe("cmd-manifest", () => {
21
21
  expect(paths).toContain("compliance sanctions-create");
22
22
  expect(paths).toContain("compliance sanctions-update");
23
23
  expect(paths).toContain("compliance sanctions-delete");
24
+ expect(paths).toContain("pools catalog-list");
25
+ expect(paths).toContain("query account-pool-context");
24
26
  });
25
27
  it("buildCmdManifest includes all registered leaf paths", () => {
26
28
  const manifest = buildCmdManifest(program);
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-manifest.test.js","sourceRoot":"","sources":["../src/cmd-manifest.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC5B,CAAC,CAAC,CAAC;AAEJ,IAAI,OAAwD,CAAC;AAE7D,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cmd-manifest.test.js","sourceRoot":"","sources":["../src/cmd-manifest.test.ts"],"names":[],"mappings":"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"}
@@ -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;AAqvF9B,OAAO,EAAE,OAAO,EAAE,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;AAw5F9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -330,7 +330,7 @@ reddit
330
330
  .command("create-snapshot")
331
331
  .description("POST /reddit-post-snapshots(手工补录)")
332
332
  .requiredOption("-t, --team <teamId>", "Team UUID")
333
- .requiredOption("-j, --json <json>", "createRedditPostSnapshot body JSON")
333
+ .requiredOption("-j, --json <json>", '{"permalink":"...","subreddit":"...","score":0,"commentsCount":0,"firstRepostLink":null,"secondRepostLink":null}')
334
334
  .action(async (opts) => {
335
335
  let body;
336
336
  try {
@@ -1178,6 +1178,152 @@ agentTeams
1178
1178
  });
1179
1179
  });
1180
1180
  // --- intelligence (subreddit-intelligence) ---
1181
+ const pools = program.command("pools").description("运营板块池:目录、别名、准入规则");
1182
+ pools
1183
+ .command("catalog-list")
1184
+ .description("GET .../subreddit-pools/catalog")
1185
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1186
+ .option("--status <s>", "active|paused|archived")
1187
+ .option("--industry-key <key>", "industryKey filter")
1188
+ .option("--pool-kind <kind>", "pet|common|industry|brand|other")
1189
+ .option("-n, --limit <n>", "limit", "50")
1190
+ .option("--offset <n>", "offset", "0")
1191
+ .action(async (opts) => {
1192
+ const res = await requireClient().listSubredditPoolsCatalog(opts.team, {
1193
+ status: opts.status,
1194
+ industryKey: opts.industryKey,
1195
+ poolKind: opts.poolKind,
1196
+ limit: Number(opts.limit),
1197
+ offset: Number(opts.offset),
1198
+ });
1199
+ console.log(JSON.stringify(res, null, 2));
1200
+ });
1201
+ pools
1202
+ .command("catalog-create")
1203
+ .description("POST .../subreddit-pools/catalog")
1204
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1205
+ .requiredOption("-j, --json <json>", "pool catalog body")
1206
+ .action(async (opts) => {
1207
+ const body = JSON.parse(opts.json);
1208
+ const res = await requireClient().createSubredditPool(opts.team, body);
1209
+ console.log(JSON.stringify(res, null, 2));
1210
+ });
1211
+ pools
1212
+ .command("catalog-update")
1213
+ .description("PATCH .../subreddit-pools/catalog/:poolId")
1214
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1215
+ .requiredOption("--id <uuid>", "Pool UUID")
1216
+ .requiredOption("-j, --json <json>", "update body")
1217
+ .action(async (opts) => {
1218
+ const body = JSON.parse(opts.json);
1219
+ const res = await requireClient().updateSubredditPool(opts.team, opts.id, body);
1220
+ console.log(JSON.stringify(res, null, 2));
1221
+ });
1222
+ pools
1223
+ .command("catalog-delete")
1224
+ .description("DELETE .../subreddit-pools/catalog/:poolId (archive)")
1225
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1226
+ .requiredOption("--id <uuid>", "Pool UUID")
1227
+ .action(async (opts) => {
1228
+ const res = await requireClient().deleteSubredditPool(opts.team, opts.id);
1229
+ console.log(JSON.stringify(res, null, 2));
1230
+ });
1231
+ pools
1232
+ .command("aliases-list")
1233
+ .description("GET .../subreddit-pools/aliases")
1234
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1235
+ .option("--alias-ref <ref>", "aliasRef filter")
1236
+ .option("--industry-key <key>", "industryKey filter")
1237
+ .option("-n, --limit <n>", "limit", "50")
1238
+ .option("--offset <n>", "offset", "0")
1239
+ .action(async (opts) => {
1240
+ const res = await requireClient().listPoolAliases(opts.team, {
1241
+ aliasRef: opts.aliasRef,
1242
+ industryKey: opts.industryKey,
1243
+ limit: Number(opts.limit),
1244
+ offset: Number(opts.offset),
1245
+ });
1246
+ console.log(JSON.stringify(res, null, 2));
1247
+ });
1248
+ pools
1249
+ .command("aliases-create")
1250
+ .description("POST .../subreddit-pools/aliases")
1251
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1252
+ .requiredOption("-j, --json <json>", "alias body")
1253
+ .action(async (opts) => {
1254
+ const body = JSON.parse(opts.json);
1255
+ const res = await requireClient().createPoolAlias(opts.team, body);
1256
+ console.log(JSON.stringify(res, null, 2));
1257
+ });
1258
+ pools
1259
+ .command("aliases-update")
1260
+ .description("PATCH .../subreddit-pools/aliases/:aliasId")
1261
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1262
+ .requiredOption("--id <uuid>", "Alias UUID")
1263
+ .requiredOption("-j, --json <json>", "update body")
1264
+ .action(async (opts) => {
1265
+ const body = JSON.parse(opts.json);
1266
+ const res = await requireClient().updatePoolAlias(opts.team, opts.id, body);
1267
+ console.log(JSON.stringify(res, null, 2));
1268
+ });
1269
+ pools
1270
+ .command("aliases-delete")
1271
+ .description("DELETE .../subreddit-pools/aliases/:aliasId (archive)")
1272
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1273
+ .requiredOption("--id <uuid>", "Alias UUID")
1274
+ .action(async (opts) => {
1275
+ const res = await requireClient().deletePoolAlias(opts.team, opts.id);
1276
+ console.log(JSON.stringify(res, null, 2));
1277
+ });
1278
+ pools
1279
+ .command("tier-rules-list")
1280
+ .description("GET .../subreddit-pools/tier-rules")
1281
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1282
+ .option("--tier <tier>", "S0|S1|S2|S3")
1283
+ .option("--enabled <bool>", "true|false")
1284
+ .option("-n, --limit <n>", "limit", "50")
1285
+ .option("--offset <n>", "offset", "0")
1286
+ .action(async (opts) => {
1287
+ const res = await requireClient().listSubredditPoolTierRules(opts.team, {
1288
+ tier: opts.tier,
1289
+ enabled: opts.enabled === undefined
1290
+ ? undefined
1291
+ : opts.enabled === "true" || opts.enabled === "1",
1292
+ limit: Number(opts.limit),
1293
+ offset: Number(opts.offset),
1294
+ });
1295
+ console.log(JSON.stringify(res, null, 2));
1296
+ });
1297
+ pools
1298
+ .command("tier-rules-create")
1299
+ .description("POST .../subreddit-pools/tier-rules")
1300
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1301
+ .requiredOption("-j, --json <json>", "tier rule body")
1302
+ .action(async (opts) => {
1303
+ const body = JSON.parse(opts.json);
1304
+ const res = await requireClient().createSubredditPoolTierRule(opts.team, body);
1305
+ console.log(JSON.stringify(res, null, 2));
1306
+ });
1307
+ pools
1308
+ .command("tier-rules-update")
1309
+ .description("PATCH .../subreddit-pools/tier-rules/:ruleId")
1310
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1311
+ .requiredOption("--id <uuid>", "Rule UUID")
1312
+ .requiredOption("-j, --json <json>", "update body")
1313
+ .action(async (opts) => {
1314
+ const body = JSON.parse(opts.json);
1315
+ const res = await requireClient().updateSubredditPoolTierRule(opts.team, opts.id, body);
1316
+ console.log(JSON.stringify(res, null, 2));
1317
+ });
1318
+ pools
1319
+ .command("tier-rules-delete")
1320
+ .description("DELETE .../subreddit-pools/tier-rules/:ruleId")
1321
+ .requiredOption("-t, --team <teamId>", "Team UUID")
1322
+ .requiredOption("--id <uuid>", "Rule UUID")
1323
+ .action(async (opts) => {
1324
+ const res = await requireClient().deleteSubredditPoolTierRule(opts.team, opts.id);
1325
+ console.log(JSON.stringify(res, null, 2));
1326
+ });
1181
1327
  const intel = program.command("intelligence").description("板块情报与 KOL 挖掘");
1182
1328
  intel
1183
1329
  .command("industry-pools-list")