@geoly-ai/social-hub-cli 0.3.20 → 0.3.22

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 +39 -0
  2. package/dist/accounts-list-offset.test.d.ts +2 -0
  3. package/dist/accounts-list-offset.test.d.ts.map +1 -0
  4. package/dist/accounts-list-offset.test.js +53 -0
  5. package/dist/accounts-list-offset.test.js.map +1 -0
  6. package/dist/cmd-manifest.json +2 -2
  7. package/dist/compliance-risk-list-offset.test.d.ts +2 -0
  8. package/dist/compliance-risk-list-offset.test.d.ts.map +1 -0
  9. package/dist/compliance-risk-list-offset.test.js +63 -0
  10. package/dist/compliance-risk-list-offset.test.js.map +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +11 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.test.js +16 -0
  15. package/dist/index.test.js.map +1 -1
  16. package/dist/postinstall.d.ts.map +1 -1
  17. package/dist/postinstall.js +4 -1
  18. package/dist/postinstall.js.map +1 -1
  19. package/dist/register-shared.d.ts.map +1 -1
  20. package/dist/register-shared.js +13 -2
  21. package/dist/register-shared.js.map +1 -1
  22. package/dist/register-shared.test.js +78 -0
  23. package/dist/register-shared.test.js.map +1 -1
  24. package/dist/register-skills.js +2 -2
  25. package/dist/register-skills.js.map +1 -1
  26. package/dist/skill-update-check.d.ts.map +1 -1
  27. package/dist/skill-update-check.js +6 -8
  28. package/dist/skill-update-check.js.map +1 -1
  29. package/dist/skills/doctor.d.ts.map +1 -1
  30. package/dist/skills/doctor.js +3 -2
  31. package/dist/skills/doctor.js.map +1 -1
  32. package/dist/skills/install-planner.d.ts.map +1 -1
  33. package/dist/skills/install-planner.js +4 -2
  34. package/dist/skills/install-planner.js.map +1 -1
  35. package/dist/skills/installer.d.ts.map +1 -1
  36. package/dist/skills/installer.js +30 -5
  37. package/dist/skills/installer.js.map +1 -1
  38. package/dist/skills/managed-sync.integration.test.js +106 -0
  39. package/dist/skills/managed-sync.integration.test.js.map +1 -1
  40. package/dist/skills/manifest.d.ts +15 -0
  41. package/dist/skills/manifest.d.ts.map +1 -1
  42. package/dist/skills/manifest.js +15 -0
  43. package/dist/skills/manifest.js.map +1 -1
  44. package/dist/skills/types.d.ts +8 -0
  45. package/dist/skills/types.d.ts.map +1 -1
  46. package/dist/update-check.d.ts +7 -0
  47. package/dist/update-check.d.ts.map +1 -1
  48. package/dist/update-check.js +8 -0
  49. package/dist/update-check.js.map +1 -1
  50. package/package.json +2 -2
  51. package/skills/README.md +2 -0
  52. package/skills/manifest.json +6 -1
  53. package/skills/social-hub-cli/SKILL.md +25 -24
  54. package/skills/social-hub-content-classification/SKILL.md +11 -2
  55. package/skills/social-hub-shared/SKILL.md +6 -2
package/CHANGELOG.md CHANGED
@@ -4,6 +4,45 @@ 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.3.22] - 2026-08-21
8
+
9
+ ### Notes
10
+
11
+ - 更正 0.3.21 的表述:0.3.21 只修了 SDK 侧的 `TypeError`;两条 CSV 导出命令
12
+ 在当时**仍然 HTTP 400** —— 已发布客户端默认传 `limit=1000`(CLI `-n 1000`、Web 500),
13
+ 超出契约 `paginationQuerySchema` 的上限 200。真正解锁是服务端 `d4b48e78`
14
+ (导出端点的 `limit` 改为「每批页大小」语义,`maxRows` 才是总量顶),
15
+ **无需客户端发版即生效**。0.3.21 的历史条目保持原样不改(tarball 已发布)。
16
+
17
+ ### Fixed
18
+
19
+ - skills 状态文件顶层 `version`/`sourceDigest` 每次同步都刷新 —— 此前只在首次
20
+ 创建时写一次,导致 `.social-hub-skills.json` 顶层长期停在首装版本(实测 0.1.12),
21
+ 与逐条 `skillVersion: 0.3.21` 自相矛盾,持续制造「skills 几个月没更新」的误报。
22
+ `installedAt` 仍保留首装时间。
23
+ - `social-hub-content-classification` 补进 `skills/manifest.json` —— 该 skill 自
24
+ 0.2.25 起就随包分发,但因不在 manifest 里而**从未安装到任何机器**。
25
+ `scripts/skills-check.mjs` 同步改为**双向**断言(磁盘上有 `SKILL.md` 的目录
26
+ 必须在 manifest 里),堵住这个只查 manifest→磁盘的盲区。
27
+ - 统一 skillVersion 口径(`manifest.effectiveSkillVersion`)—— planner 读
28
+ SKILL.md frontmatter 的 `skillVersion`,installer 却恒存 `source.version`;
29
+ 第一个给 SKILL.md 加上该键的 skill 会被永久判为 outdated、每条命令重装一遍。
30
+
31
+ ### Documentation
32
+
33
+ - 更正「自动更新静默同步 skills」的说法:二进制后台自更新(`npm i -g`)**不碰
34
+ skills**,同步发生在**升级后的下一条** `social-hub` 命令上(一拍延迟),
35
+ `postinstall` 也不补这一拍。要立刻同步跑 `social-hub skills sync`,
36
+ 或用 `social-hub self-update`(升级 + 同步一次做完)。
37
+
38
+ ## [0.3.21] - 2026-08-21
39
+
40
+ ### Fixed
41
+
42
+ - risk-list 分页补 ORDER BY 与 --offset
43
+ - doctor 不再明文打印 API token(R11)
44
+ - SDK 请求管线收敛 —— 两条 CSV 导出命令首次可用(R8/R9)
45
+
7
46
  ## [0.3.20] - 2026-08-18
8
47
 
9
48
  ### Added
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accounts-list-offset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-list-offset.test.d.ts","sourceRoot":"","sources":["../src/accounts-list-offset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * R9 回归:`accounts list` 的分页游标。
3
+ *
4
+ * `limit` 上限 200(contracts `paginationQuerySchema`),此前 CLI 只有 `-n/--limit`,
5
+ * 账号数超过 200 的 team 无法穷举 —— SDK 与服务端一直支持 `offset`,缺的只有 CLI 这一层。
6
+ * 只断言选项已注册挡不住「注册了但忘了转发/转成 NaN」,所以这里跑真实 handler,
7
+ * 断言 SDK 收到的是**数值** offset,且不传时不发 offset(保持服务端默认 0)。
8
+ */
9
+ import { beforeAll, afterEach, describe, expect, it, vi } from "vitest";
10
+ const listAccounts = vi.fn().mockResolvedValue({ items: [], total: 0 });
11
+ vi.mock("@geoly-ai/social-hub-sdk", () => ({
12
+ SocialHubClient: vi.fn(),
13
+ getSocialHubHealth: vi.fn(),
14
+ }));
15
+ vi.mock("./client.js", () => ({
16
+ requireClient: () => ({ listAccounts }),
17
+ resolveTeamId: (t) => t ?? "team-1",
18
+ getBaseUrl: () => "http://localhost",
19
+ }));
20
+ let program;
21
+ beforeAll(async () => {
22
+ program = (await import("./index.js")).program;
23
+ vi.spyOn(console, "log").mockImplementation(() => { });
24
+ }, 30000);
25
+ afterEach(() => {
26
+ listAccounts.mockClear();
27
+ });
28
+ describe("accounts list 分页", () => {
29
+ // 两次 parse 放在同一个用例里且「不传」在前:commander 会把上一次 parse 的
30
+ // option 值留在同一个 command 实例上,拆成两个用例会互相污染。
31
+ it("--offset 以数值透传给 SDK,不传时则不发送(沿用服务端默认 0)", async () => {
32
+ await program.parseAsync(["node", "social-hub", "accounts", "list"]);
33
+ expect(listAccounts).toHaveBeenCalledTimes(1);
34
+ expect(listAccounts.mock.calls[0]?.[1]?.offset).toBeUndefined();
35
+ await program.parseAsync([
36
+ "node",
37
+ "social-hub",
38
+ "accounts",
39
+ "list",
40
+ "--limit",
41
+ "200",
42
+ "--offset",
43
+ "400",
44
+ ]);
45
+ expect(listAccounts).toHaveBeenCalledTimes(2);
46
+ expect(listAccounts.mock.calls[1]?.[0]).toBe("team-1");
47
+ expect(listAccounts.mock.calls[1]?.[1]).toMatchObject({
48
+ limit: 200,
49
+ offset: 400,
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=accounts-list-offset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-list-offset.test.js","sourceRoot":"","sources":["../src/accounts-list-offset.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAExE,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAExE,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;IACxB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC5B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,aAAa,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ;IAC5C,UAAU,EAAE,GAAG,EAAE,CAAC,kBAAkB;CACrC,CAAC,CAAC,CAAC;AAEJ,IAAI,OAAwD,CAAC;AAE7D,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACxD,CAAC,EAAE,KAAK,CAAC,CAAC;AAEV,SAAS,CAAC,GAAG,EAAE;IACb,YAAY,CAAC,SAAS,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,mDAAmD;IACnD,yCAAyC;IACzC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAEhE,MAAM,OAAO,CAAC,UAAU,CAAC;YACvB,MAAM;YACN,YAAY;YACZ,UAAU;YACV,MAAM;YACN,SAAS;YACT,KAAK;YACL,UAAU;YACV,KAAK;SACN,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-08-18T09:08:50.530Z",
3
- "cliVersion": "0.3.20",
2
+ "generatedAt": "2026-08-21T10:44:34.912Z",
3
+ "cliVersion": "0.3.22",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=compliance-risk-list-offset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-risk-list-offset.test.d.ts","sourceRoot":"","sources":["../src/compliance-risk-list-offset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 回归:`compliance risk-list` 的分页游标。
3
+ *
4
+ * `limit` 上限 200(contracts `listAccountRiskProfilesQuerySchema`),此前 CLI 只有
5
+ * `-n/--limit`,风险画像超过 200 个的 team 无法穷举 —— 调用方拿到 200 条会以为
6
+ * 那就是全部(生产上某团队已有 125 个)。与 `accounts list --offset`(R9)同形。
7
+ *
8
+ * 只断言选项已注册挡不住「注册了但忘了转发/转成 NaN」,所以这里跑真实 handler,
9
+ * 断言 SDK 收到的是**数值** offset,且不传时不发 offset(保持服务端默认 0)。
10
+ */
11
+ import { beforeAll, afterEach, describe, expect, it, vi } from "vitest";
12
+ const listAccountRiskProfiles = vi
13
+ .fn()
14
+ .mockResolvedValue({ items: [], total: 0 });
15
+ vi.mock("@geoly-ai/social-hub-sdk", () => ({
16
+ SocialHubClient: vi.fn(),
17
+ getSocialHubHealth: vi.fn(),
18
+ }));
19
+ vi.mock("./client.js", () => ({
20
+ requireClient: () => ({ listAccountRiskProfiles }),
21
+ resolveTeamId: (t) => t ?? "team-1",
22
+ getBaseUrl: () => "http://localhost",
23
+ }));
24
+ let program;
25
+ beforeAll(async () => {
26
+ program = (await import("./index.js")).program;
27
+ vi.spyOn(console, "log").mockImplementation(() => { });
28
+ }, 30000);
29
+ afterEach(() => {
30
+ listAccountRiskProfiles.mockClear();
31
+ });
32
+ describe("compliance risk-list 分页", () => {
33
+ // 两次 parse 放在同一个用例里且「不传」在前:commander 会把上一次 parse 的
34
+ // option 值留在同一个 command 实例上,拆成两个用例会互相污染。
35
+ it("--offset 以数值透传给 SDK,不传时则不发送(沿用服务端默认 0)", async () => {
36
+ await program.parseAsync(["node", "social-hub", "compliance", "risk-list"]);
37
+ expect(listAccountRiskProfiles).toHaveBeenCalledTimes(1);
38
+ expect(listAccountRiskProfiles.mock.calls[0]?.[0]).toBe("team-1");
39
+ expect(listAccountRiskProfiles.mock.calls[0]?.[1]?.offset).toBeUndefined();
40
+ expect(listAccountRiskProfiles.mock.calls[0]?.[1]?.limit).toBe(100);
41
+ await program.parseAsync([
42
+ "node",
43
+ "social-hub",
44
+ "compliance",
45
+ "risk-list",
46
+ "--limit",
47
+ "200",
48
+ "--offset",
49
+ "400",
50
+ "--search",
51
+ "espresso",
52
+ ]);
53
+ expect(listAccountRiskProfiles).toHaveBeenCalledTimes(2);
54
+ expect(listAccountRiskProfiles.mock.calls[1]?.[1]).toMatchObject({
55
+ limit: 200,
56
+ offset: 400,
57
+ search: "espresso",
58
+ });
59
+ // 老的 number 位置参数已经换成对象;传成数字会让 offset/search 静默丢失。
60
+ expect(typeof listAccountRiskProfiles.mock.calls[1]?.[1]).toBe("object");
61
+ });
62
+ });
63
+ //# sourceMappingURL=compliance-risk-list-offset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-risk-list-offset.test.js","sourceRoot":"","sources":["../src/compliance-risk-list-offset.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;AA4DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2gF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;AAyqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,GAAG,MAAM,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAyCpD;AAgyDD,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;AA4DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAyhF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;AAyqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,GAAG,MAAM,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAyCpD;AAgyDD,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -608,10 +608,12 @@ accounts
608
608
  .option("--campaign <uuid>", "campaignId 过滤(legacy)")
609
609
  .option("--persona <uuid>", "personaId")
610
610
  .option("--category <cat>", "人设分类")
611
- .option("-n, --limit <n>", "limit", "50")
611
+ .option("-n, --limit <n>", "limit(上限 200)", "50")
612
+ .option("--offset <n>", "offset(翻页:offset 每次 += limit;返回体的 total 是过滤后的总数,offset + items.length >= total 即翻完)")
612
613
  .action(async (opts) => {
613
614
  const res = await requireClient().listAccounts(resolveTeamId(opts.team), {
614
615
  limit: Number(opts.limit),
616
+ offset: opts.offset === undefined ? undefined : Number(opts.offset),
615
617
  status: opts.status,
616
618
  platform: opts.platform,
617
619
  brandId: opts.brand,
@@ -1657,9 +1659,15 @@ compliance
1657
1659
  .command("risk-list")
1658
1660
  .description("GET /account-risk-profiles")
1659
1661
  .option("-t, --team <teamId>", "Team UUID(缺省用当前 context)")
1660
- .option("-n, --limit <n>", "limit", "100")
1662
+ .option("-n, --limit <n>", "limit(上限 200)", "100")
1663
+ .option("--offset <n>", "offset(翻页:offset 每次 += limit;返回体的 total 是过滤后的总数,集合在翻页期间不变时 offset + items.length >= total 即翻完。offset 分页不是快照分页,并发写入下同一行可能重复出现或被跳过)")
1664
+ .option("--search <text>", "按 handle / platform 模糊过滤")
1661
1665
  .action(async (opts) => {
1662
- const res = await requireClient().listAccountRiskProfiles(resolveTeamId(opts.team), Number(opts.limit));
1666
+ const res = await requireClient().listAccountRiskProfiles(resolveTeamId(opts.team), {
1667
+ limit: Number(opts.limit),
1668
+ offset: opts.offset === undefined ? undefined : Number(opts.offset),
1669
+ search: opts.search,
1670
+ });
1663
1671
  console.log(JSON.stringify(res, null, 2));
1664
1672
  });
1665
1673
  compliance