@geoly-ai/social-hub-cli 0.0.12 → 0.0.14

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/admin-index-gates.test.d.ts +2 -0
  3. package/dist/admin-index-gates.test.d.ts.map +1 -0
  4. package/dist/admin-index-gates.test.js +33 -0
  5. package/dist/admin-index-gates.test.js.map +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +810 -63
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.test.js +87 -5
  10. package/dist/index.test.js.map +1 -1
  11. package/dist/permission-runner.d.ts +11 -0
  12. package/dist/permission-runner.d.ts.map +1 -0
  13. package/dist/permission-runner.js +30 -0
  14. package/dist/permission-runner.js.map +1 -0
  15. package/dist/permission-runner.test.d.ts +2 -0
  16. package/dist/permission-runner.test.d.ts.map +1 -0
  17. package/dist/permission-runner.test.js +69 -0
  18. package/dist/permission-runner.test.js.map +1 -0
  19. package/dist/permissions-gates-admin.d.ts +4 -0
  20. package/dist/permissions-gates-admin.d.ts.map +1 -0
  21. package/dist/permissions-gates-admin.js +80 -0
  22. package/dist/permissions-gates-admin.js.map +1 -0
  23. package/dist/permissions-gates-admin.test.d.ts +2 -0
  24. package/dist/permissions-gates-admin.test.d.ts.map +1 -0
  25. package/dist/permissions-gates-admin.test.js +25 -0
  26. package/dist/permissions-gates-admin.test.js.map +1 -0
  27. package/dist/permissions.d.ts.map +1 -1
  28. package/dist/permissions.js +2 -3
  29. package/dist/permissions.js.map +1 -1
  30. package/dist/register-admin.d.ts.map +1 -1
  31. package/dist/register-admin.js +343 -29
  32. package/dist/register-admin.js.map +1 -1
  33. package/dist/register-extensions.d.ts.map +1 -1
  34. package/dist/register-extensions.js +26 -19
  35. package/dist/register-extensions.js.map +1 -1
  36. package/dist/register-shared.js +1 -1
  37. package/dist/register-shared.js.map +1 -1
  38. package/package.json +2 -2
  39. package/skills/README.md +7 -5
  40. package/skills/manifest.json +17 -7
  41. package/skills/social-hub-accounts/SKILL.md +46 -13
  42. package/skills/social-hub-admin/SKILL.md +76 -10
  43. package/skills/social-hub-calendar-jobs/SKILL.md +26 -10
  44. package/skills/social-hub-cli/SKILL.md +35 -191
  45. package/skills/social-hub-cli/evals/evals.json +4 -4
  46. package/skills/social-hub-events-observability/SKILL.md +50 -0
  47. package/skills/social-hub-graph-compliance/SKILL.md +60 -0
  48. package/skills/social-hub-intelligence/SKILL.md +72 -7
  49. package/skills/social-hub-migration/SKILL.md +18 -5
  50. package/skills/social-hub-openclaw-context/SKILL.md +23 -8
  51. package/skills/social-hub-ops-runtime/SKILL.md +10 -5
  52. package/skills/social-hub-posts/SKILL.md +56 -23
  53. package/skills/social-hub-posts/evals/evals.json +23 -0
  54. package/skills/social-hub-publishing/SKILL.md +75 -11
  55. package/skills/social-hub-shared/SKILL.md +8 -4
@@ -1,13 +1,28 @@
1
1
  import { requireClient, resolveTeamId } from "./client.js";
2
2
  import { assertApplyOrDryRun } from "./dry-run.js";
3
+ import { withPermissionGate } from "./permission-runner.js";
3
4
  import { printResult, withCliErrorBoundary } from "./output.js";
5
+ function redactSettingsBatchSummary(body) {
6
+ return {
7
+ settings: body.settings.map((s) => ({
8
+ key: s.key,
9
+ value: "[redacted]",
10
+ })),
11
+ };
12
+ }
4
13
  export function registerAdminCommands(program) {
5
14
  const settings = program.command("settings").description("系统设置(admin)");
6
15
  settings
7
16
  .command("list")
8
17
  .action(async () => {
9
18
  await withCliErrorBoundary(async () => {
10
- printResult(await requireClient().listSettings());
19
+ await withPermissionGate({
20
+ command: "settings list",
21
+ resource: "systemSetting",
22
+ action: "list",
23
+ }, async () => {
24
+ printResult(await requireClient().listSettings());
25
+ });
11
26
  });
12
27
  });
13
28
  settings
@@ -15,7 +30,13 @@ export function registerAdminCommands(program) {
15
30
  .argument("<key>", "Setting key")
16
31
  .action(async (key) => {
17
32
  await withCliErrorBoundary(async () => {
18
- printResult(await requireClient().getSetting(key));
33
+ await withPermissionGate({
34
+ command: "settings get",
35
+ resource: "systemSetting",
36
+ action: "read",
37
+ }, async () => {
38
+ printResult(await requireClient().getSetting(key));
39
+ });
19
40
  });
20
41
  });
21
42
  settings
@@ -26,23 +47,65 @@ export function registerAdminCommands(program) {
26
47
  .option("--apply", "执行写入", false)
27
48
  .action(async (key, opts) => {
28
49
  await withCliErrorBoundary(async () => {
29
- if (!assertApplyOrDryRun(opts, {
50
+ await withPermissionGate({
30
51
  command: "settings set",
31
- danger: "admin",
32
- summary: { key, value: opts.value },
33
- })) {
34
- return;
35
- }
36
- printResult(await requireClient().upsertSetting(key, { value: opts.value }));
52
+ resource: "systemSetting",
53
+ action: "update",
54
+ }, async () => {
55
+ if (!assertApplyOrDryRun(opts, {
56
+ command: "settings set",
57
+ danger: "admin",
58
+ summary: { key, value: opts.value },
59
+ })) {
60
+ return;
61
+ }
62
+ printResult(await requireClient().upsertSetting(key, { value: opts.value }));
63
+ });
64
+ });
65
+ });
66
+ settings
67
+ .command("batch-set")
68
+ .description("PUT /v1/settings — 批量更新系统设置")
69
+ .requiredOption("-j, --json <json>", '{ "settings": [{ "key", "value", "description?" }] }')
70
+ .option("--dry-run", "预览", false)
71
+ .option("--apply", "执行写入", false)
72
+ .action(async (opts) => {
73
+ await withCliErrorBoundary(async () => {
74
+ await withPermissionGate({
75
+ command: "settings batch-set",
76
+ resource: "systemSetting",
77
+ action: "update",
78
+ }, async () => {
79
+ const body = JSON.parse(opts.json);
80
+ if (!assertApplyOrDryRun(opts, {
81
+ command: "settings batch-set",
82
+ danger: "admin",
83
+ summary: redactSettingsBatchSummary(body),
84
+ })) {
85
+ return;
86
+ }
87
+ printResult(await requireClient().upsertSettingsBatch(body));
88
+ });
37
89
  });
38
90
  });
39
91
  const invites = program.command("invites").description("团队邀请");
40
92
  invites
41
93
  .command("list")
42
94
  .requiredOption("-t, --team <teamId>", "Team UUID")
95
+ .option("--status <status>", "pending|accepted|revoked|expired")
43
96
  .action(async (opts) => {
44
97
  await withCliErrorBoundary(async () => {
45
- printResult(await requireClient().listTeamInvites(resolveTeamId(opts.team)));
98
+ const teamId = resolveTeamId(opts.team);
99
+ await withPermissionGate({
100
+ command: "invites list",
101
+ resource: "invite",
102
+ action: "list",
103
+ teamId,
104
+ }, async () => {
105
+ printResult(await requireClient().listTeamInvites(teamId, {
106
+ status: opts.status,
107
+ }));
108
+ });
46
109
  });
47
110
  });
48
111
  invites
@@ -50,22 +113,38 @@ export function registerAdminCommands(program) {
50
113
  .requiredOption("-t, --team <teamId>", "Team UUID")
51
114
  .requiredOption("--email <email>", "邮箱")
52
115
  .requiredOption("--role <role>", "角色")
116
+ .option("--brand <uuid>", "client 邀请关联品牌 brandId")
53
117
  .option("--dry-run", "预览", false)
54
118
  .option("--apply", "执行写入", false)
55
119
  .action(async (opts) => {
56
120
  await withCliErrorBoundary(async () => {
57
121
  const teamId = resolveTeamId(opts.team);
58
- if (!assertApplyOrDryRun(opts, {
122
+ await withPermissionGate({
59
123
  command: "invites create",
60
- danger: "write",
61
- summary: { teamId, email: opts.email, role: opts.role },
62
- })) {
63
- return;
64
- }
65
- printResult(await requireClient().createTeamInvite(teamId, {
66
- email: opts.email,
67
- role: opts.role,
68
- }));
124
+ resource: "invite",
125
+ action: "create",
126
+ teamId,
127
+ }, async () => {
128
+ const summary = {
129
+ teamId,
130
+ email: opts.email,
131
+ role: opts.role,
132
+ };
133
+ if (opts.brand)
134
+ summary.brandId = opts.brand;
135
+ if (!assertApplyOrDryRun(opts, {
136
+ command: "invites create",
137
+ danger: "write",
138
+ summary,
139
+ })) {
140
+ return;
141
+ }
142
+ printResult(await requireClient().createTeamInvite(teamId, {
143
+ email: opts.email,
144
+ role: opts.role,
145
+ ...(opts.brand ? { brandId: opts.brand } : {}),
146
+ }));
147
+ });
69
148
  });
70
149
  });
71
150
  invites
@@ -77,23 +156,258 @@ export function registerAdminCommands(program) {
77
156
  .action(async (opts) => {
78
157
  await withCliErrorBoundary(async () => {
79
158
  const teamId = resolveTeamId(opts.team);
80
- if (!assertApplyOrDryRun(opts, {
159
+ await withPermissionGate({
81
160
  command: "invites revoke",
82
- danger: "delete",
83
- summary: { teamId, inviteId: opts.id },
84
- })) {
85
- return;
86
- }
87
- printResult(await requireClient().revokeTeamInvite(teamId, opts.id));
161
+ resource: "invite",
162
+ action: "delete",
163
+ teamId,
164
+ }, async () => {
165
+ if (!assertApplyOrDryRun(opts, {
166
+ command: "invites revoke",
167
+ danger: "delete",
168
+ summary: { teamId, inviteId: opts.id },
169
+ })) {
170
+ return;
171
+ }
172
+ printResult(await requireClient().revokeTeamInvite(teamId, opts.id));
173
+ });
88
174
  });
89
175
  });
90
176
  const members = program.command("members").description("成员管理");
91
177
  members
92
178
  .command("list")
93
- .option("-t, --team <teamId>", "Team UUID(可选,默认 system")
179
+ .description("GET /v1/system/members")
180
+ .action(async () => {
181
+ await withCliErrorBoundary(async () => {
182
+ await withPermissionGate({
183
+ command: "members list",
184
+ resource: "systemMember",
185
+ action: "list",
186
+ }, async () => {
187
+ printResult(await requireClient().listSystemMembers());
188
+ });
189
+ });
190
+ });
191
+ members
192
+ .command("system-teams")
193
+ .description("GET /v1/system/teams")
194
+ .action(async () => {
195
+ await withCliErrorBoundary(async () => {
196
+ await withPermissionGate({
197
+ command: "members system-teams",
198
+ resource: "systemMember",
199
+ action: "list",
200
+ }, async () => {
201
+ printResult(await requireClient().listSystemTeams());
202
+ });
203
+ });
204
+ });
205
+ members
206
+ .command("update-role")
207
+ .description("PATCH /v1/system/members/:userId")
208
+ .requiredOption("--user <userId>", "User UUID")
209
+ .requiredOption("--role <role>", "internal|senior|supervisor|manager|client")
210
+ .option("--dry-run", "预览", false)
211
+ .option("--apply", "执行写入", false)
212
+ .action(async (opts) => {
213
+ await withCliErrorBoundary(async () => {
214
+ await withPermissionGate({
215
+ command: "members update-role",
216
+ resource: "systemMember",
217
+ action: "update",
218
+ }, async () => {
219
+ if (!assertApplyOrDryRun(opts, {
220
+ command: "members update-role",
221
+ danger: "write",
222
+ summary: { userId: opts.user, role: opts.role },
223
+ })) {
224
+ return;
225
+ }
226
+ printResult(await requireClient().updateSystemMemberRole(opts.user, {
227
+ role: opts.role,
228
+ }));
229
+ });
230
+ });
231
+ });
232
+ members
233
+ .command("remove")
234
+ .description("DELETE /v1/system/members/:userId")
235
+ .requiredOption("--user <userId>", "User UUID")
236
+ .option("--dry-run", "预览", false)
237
+ .option("--apply", "执行写入", false)
238
+ .action(async (opts) => {
239
+ await withCliErrorBoundary(async () => {
240
+ await withPermissionGate({
241
+ command: "members remove",
242
+ resource: "systemMember",
243
+ action: "delete",
244
+ }, async () => {
245
+ if (!assertApplyOrDryRun(opts, {
246
+ command: "members remove",
247
+ danger: "delete",
248
+ summary: { userId: opts.user },
249
+ })) {
250
+ return;
251
+ }
252
+ printResult(await requireClient().deleteSystemMember(opts.user));
253
+ });
254
+ });
255
+ });
256
+ members
257
+ .command("teams-list")
258
+ .description("GET /v1/system/members/:userId/teams")
259
+ .requiredOption("--user <userId>", "User UUID")
260
+ .action(async (opts) => {
261
+ await withCliErrorBoundary(async () => {
262
+ await withPermissionGate({
263
+ command: "members teams-list",
264
+ resource: "systemMember",
265
+ action: "read",
266
+ }, async () => {
267
+ printResult(await requireClient().listSystemMemberTeams(opts.user));
268
+ });
269
+ });
270
+ });
271
+ members
272
+ .command("teams-add")
273
+ .description("POST /v1/system/members/:userId/teams")
274
+ .requiredOption("--user <userId>", "User UUID")
275
+ .requiredOption("-t, --team <teamId>", "Team UUID")
276
+ .option("--role <role>", "internal|senior|supervisor|manager|client")
277
+ .option("--dry-run", "预览", false)
278
+ .option("--apply", "执行写入", false)
279
+ .action(async (opts) => {
280
+ await withCliErrorBoundary(async () => {
281
+ const teamId = resolveTeamId(opts.team);
282
+ await withPermissionGate({
283
+ command: "members teams-add",
284
+ resource: "systemMember",
285
+ action: "create",
286
+ teamId,
287
+ }, async () => {
288
+ const summary = {
289
+ userId: opts.user,
290
+ teamId,
291
+ };
292
+ if (opts.role)
293
+ summary.role = opts.role;
294
+ if (!assertApplyOrDryRun(opts, {
295
+ command: "members teams-add",
296
+ danger: "write",
297
+ summary,
298
+ })) {
299
+ return;
300
+ }
301
+ printResult(await requireClient().addSystemMemberTeam(opts.user, {
302
+ teamId,
303
+ ...(opts.role ? { role: opts.role } : {}),
304
+ }));
305
+ });
306
+ });
307
+ });
308
+ members
309
+ .command("teams-remove")
310
+ .description("DELETE /v1/system/members/:userId/teams/:teamId")
311
+ .requiredOption("--user <userId>", "User UUID")
312
+ .requiredOption("-t, --team <teamId>", "Team UUID")
313
+ .option("--dry-run", "预览", false)
314
+ .option("--apply", "执行写入", false)
315
+ .action(async (opts) => {
316
+ await withCliErrorBoundary(async () => {
317
+ const teamId = resolveTeamId(opts.team);
318
+ await withPermissionGate({
319
+ command: "members teams-remove",
320
+ resource: "systemMember",
321
+ action: "delete",
322
+ teamId,
323
+ }, async () => {
324
+ if (!assertApplyOrDryRun(opts, {
325
+ command: "members teams-remove",
326
+ danger: "delete",
327
+ summary: { userId: opts.user, teamId },
328
+ })) {
329
+ return;
330
+ }
331
+ printResult(await requireClient().removeSystemMemberTeam(opts.user, teamId));
332
+ });
333
+ });
334
+ });
335
+ members
336
+ .command("team-list")
337
+ .description("GET /v1/teams/:teamId/members")
338
+ .requiredOption("-t, --team <teamId>", "Team UUID")
94
339
  .action(async (opts) => {
95
340
  await withCliErrorBoundary(async () => {
96
- printResult(await requireClient().listSystemMembers());
341
+ const teamId = resolveTeamId(opts.team);
342
+ await withPermissionGate({
343
+ command: "members team-list",
344
+ resource: "systemMember",
345
+ action: "list",
346
+ teamId,
347
+ }, async () => {
348
+ printResult(await requireClient().listTeamMembers(teamId));
349
+ });
350
+ });
351
+ });
352
+ members
353
+ .command("team-update-role")
354
+ .description("PATCH /v1/teams/:teamId/members/:userId")
355
+ .requiredOption("-t, --team <teamId>", "Team UUID")
356
+ .requiredOption("--user <userId>", "User UUID")
357
+ .requiredOption("--role <role>", "internal|senior|supervisor|manager|client")
358
+ .option("--dry-run", "预览", false)
359
+ .option("--apply", "执行写入", false)
360
+ .action(async (opts) => {
361
+ await withCliErrorBoundary(async () => {
362
+ const teamId = resolveTeamId(opts.team);
363
+ await withPermissionGate({
364
+ command: "members team-update-role",
365
+ resource: "systemMember",
366
+ action: "update",
367
+ teamId,
368
+ }, async () => {
369
+ if (!assertApplyOrDryRun(opts, {
370
+ command: "members team-update-role",
371
+ danger: "write",
372
+ summary: {
373
+ teamId,
374
+ userId: opts.user,
375
+ role: opts.role,
376
+ },
377
+ })) {
378
+ return;
379
+ }
380
+ printResult(await requireClient().updateTeamMemberRole(teamId, opts.user, {
381
+ role: opts.role,
382
+ }));
383
+ });
384
+ });
385
+ });
386
+ members
387
+ .command("team-remove")
388
+ .description("DELETE /v1/teams/:teamId/members/:userId")
389
+ .requiredOption("-t, --team <teamId>", "Team UUID")
390
+ .requiredOption("--user <userId>", "User UUID")
391
+ .option("--dry-run", "预览", false)
392
+ .option("--apply", "执行写入", false)
393
+ .action(async (opts) => {
394
+ await withCliErrorBoundary(async () => {
395
+ const teamId = resolveTeamId(opts.team);
396
+ await withPermissionGate({
397
+ command: "members team-remove",
398
+ resource: "systemMember",
399
+ action: "delete",
400
+ teamId,
401
+ }, async () => {
402
+ if (!assertApplyOrDryRun(opts, {
403
+ command: "members team-remove",
404
+ danger: "delete",
405
+ summary: { teamId, userId: opts.user },
406
+ })) {
407
+ return;
408
+ }
409
+ printResult(await requireClient().removeTeamMember(teamId, opts.user));
410
+ });
97
411
  });
98
412
  });
99
413
  }
@@ -1 +1 @@
1
- {"version":3,"file":"register-admin.js","sourceRoot":"","sources":["../src/register-admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-admin.js","sourceRoot":"","sources":["../src/register-admin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-extensions.d.ts","sourceRoot":"","sources":["../src/register-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAoB,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAqDzE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyT5D;AAED,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAiBxE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA0R9D;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAkJlE;AAED,kFAAkF;AAClF,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,GACT,IAAI,CASN"}
1
+ {"version":3,"file":"register-extensions.d.ts","sourceRoot":"","sources":["../src/register-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAoB,IAAI,EAAE,MAAM,4BAA4B,CAAC;AA+CzE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyT5D;AAED,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAiBxE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAwR9D;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAiKlE;AAED,kFAAkF;AAClF,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,GACT,IAAI,CASN"}
@@ -3,25 +3,18 @@ import { hostname } from "node:os";
3
3
  import { requireClient, resolveTeamId } from "./client.js";
4
4
  import { DEFAULT_API_URL, getConfigPath, loadConfigFile, maskSecret, mergeConfigPatch, resolveCliConfig, saveConfigFile, } from "./config.js";
5
5
  import { assertCliPermission, explainCliPermissions, findGateForCommand, } from "./permissions.js";
6
+ import { withPermissionGate } from "./permission-runner.js";
6
7
  import { withCliErrorBoundary } from "./output.js";
7
8
  async function withRoleCheck(commandPath, resource, action, run, teamOpt) {
8
- const client = requireClient();
9
- const teamId = resolveTeamId(teamOpt);
10
- let role = "manager";
11
- try {
12
- const ctx = await client.getAuthContext();
13
- role = ctx.role ?? "manager";
14
- if (ctx.teamId !== teamId && ctx.kind === "api_key") {
15
- console.error(`API Key is bound to team ${ctx.teamId}, but command targets ${teamId}.`);
16
- process.exit(1);
17
- }
18
- }
19
- catch (e) {
20
- console.error(e instanceof Error ? e.message : "Failed to load auth context");
21
- process.exit(1);
22
- }
23
- assertCliPermission({ role, resource, action, command: commandPath });
24
- await run(role, teamId);
9
+ await withPermissionGate({
10
+ command: commandPath,
11
+ resource,
12
+ action,
13
+ teamId: teamOpt,
14
+ }, async (ctx) => {
15
+ const teamId = ctx.teamId ?? resolveTeamId(teamOpt);
16
+ await run(ctx.role, teamId);
17
+ });
25
18
  }
26
19
  export function registerAuthAndConfig(program) {
27
20
  const configCmd = program.command("config").description("本地 CLI 配置");
@@ -422,9 +415,9 @@ export function registerRedditExtensions(reddit) {
422
415
  });
423
416
  reddit
424
417
  .command("batch-upsert")
425
- .description("POST /reddit-post-snapshots/batch-upsert(按 permalink 幂等写入帖快照)")
418
+ .description("POST /reddit-post-snapshots/batch-upsert(批量 upsert 帖快照;可选 feishuRecordId 作飞书来源幂等键)")
426
419
  .requiredOption("-t, --team <teamId>", "Team UUID")
427
- .requiredOption("-j, --json <json>", '{"items":[{"permalink":"...","subreddit":"...","score":0,"commentsCount":0}]}')
420
+ .requiredOption("-j, --json <json>", '{"items":[{"permalink":"...","subreddit":"...","feishuRecordId":"recXXX","baseToken":"...","tableId":"...","score":0,"commentsCount":0,"viewCount":null,"brandRaw":"..."}]}')
428
421
  .option("--dry-run", "仅打印将写入的条目数,不调用 API")
429
422
  .action(async (opts) => {
430
423
  let body;
@@ -439,11 +432,15 @@ export function registerRedditExtensions(reddit) {
439
432
  console.error("JSON body must include a non-empty items array");
440
433
  process.exit(1);
441
434
  }
435
+ const missingPermalink = body.items.filter((item) => !item.permalink).length;
436
+ const withFeishuRecordId = body.items.filter((item) => item.feishuRecordId).length;
442
437
  if (opts.dryRun) {
443
438
  console.log(JSON.stringify({
444
439
  dryRun: true,
445
440
  teamId: resolveTeamId(opts.team),
446
441
  count: body.items.length,
442
+ missingPermalink,
443
+ withFeishuRecordId,
447
444
  }, null, 2));
448
445
  return;
449
446
  }
@@ -540,6 +537,16 @@ export function registerAccountsExtensions(accounts) {
540
537
  const res = await requireClient().listAccountStatusSnapshots(resolveTeamId(opts.team), opts.account, Number(opts.limit));
541
538
  console.log(JSON.stringify(res, null, 2));
542
539
  });
540
+ const styleGuide = accounts.command("style-guide").description("账号风格资产");
541
+ styleGuide
542
+ .command("get")
543
+ .description("GET /accounts/:ref/style-guide")
544
+ .requiredOption("-t, --team <teamId>", "Team UUID")
545
+ .requiredOption("--account <ref>", "Account UUID 或 handle/slot")
546
+ .action(async (opts) => {
547
+ const res = await requireClient().getAccountStyleGuide(resolveTeamId(opts.team), opts.account);
548
+ console.log(JSON.stringify(res, null, 2));
549
+ });
543
550
  }
544
551
  /** Optional helper for existing commands — gate by command path if registered. */
545
552
  export function maybeAssertCliPermission(commandPath, role) {