@geoly-ai/social-hub-cli 0.2.5 → 0.2.6

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,14 @@ 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.2.6] - 2026-07-17
8
+
9
+ ### Added
10
+
11
+ - watchlist 行业归类修复(根因:关联子查询列遮蔽)+ 品牌绑定
12
+ - team 级命令 -t 全量可省略,缺省回退 context(用户反馈 industry-pools-list)
13
+ - 手动录入/导入已发布帖自动建舆情检测档(worker 补扫)
14
+
7
15
  ## [0.2.5] - 2026-07-16
8
16
 
9
17
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAI3D,wBAAgB,aAAa,IAAI,eAAe,CAS/C;AAED,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAI3D,wBAAgB,aAAa,IAAI,eAAe,CAS/C;AAOD,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAavD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
package/dist/client.js CHANGED
@@ -9,12 +9,22 @@ export function requireClient() {
9
9
  }
10
10
  return new SocialHubClient({ baseUrl: apiUrl, apiKey });
11
11
  }
12
+ // 进程内缓存默认 team(Codex P1):同一 action 多次调用不重读可变的
13
+ // context.json/config,消除"校验 A 队、执行 B 队"的并发窗口(CLI 单次调用
14
+ // 只跑一个 action,缓存即等价于 action 顶部解析一次)。显式 -t 不走缓存。
15
+ let cachedDefaultTeamId;
12
16
  export function resolveTeamId(explicit) {
13
- const teamId = resolveEffectiveTeamId(explicit);
17
+ const trimmed = explicit?.trim();
18
+ if (trimmed)
19
+ return trimmed;
20
+ if (cachedDefaultTeamId)
21
+ return cachedDefaultTeamId;
22
+ const teamId = resolveEffectiveTeamId(undefined);
14
23
  if (!teamId) {
15
- console.error("Missing team id. Pass -t/--team, set SOCIAL_HUB_TEAM_ID, or run `social-hub config set teamId <uuid>`.");
24
+ console.error("Missing team id. Pass -t/--team, run `social-hub context use <uuid>`, set SOCIAL_HUB_TEAM_ID, or `social-hub config set teamId <uuid>`.");
16
25
  process.exit(1);
17
26
  }
27
+ cachedDefaultTeamId = teamId;
18
28
  return teamId;
19
29
  }
20
30
  export function getBaseUrl() {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,6EAA6E,CAC9E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,wGAAwG,CACzG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,EAAE,CAAC,MAAM,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,6EAA6E,CAC9E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,8CAA8C;AAC9C,sDAAsD;AACtD,gDAAgD;AAChD,IAAI,mBAAuC,CAAC;AAE5C,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,mBAAmB;QAAE,OAAO,mBAAmB,CAAC;IACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,yIAAyI,CAC1I,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,mBAAmB,GAAG,MAAM,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,EAAE,CAAC,MAAM,CAAC;AACnC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-07-16T14:35:37.618Z",
3
- "cliVersion": "0.2.5",
2
+ "generatedAt": "2026-07-17T04:10:02.203Z",
3
+ "cliVersion": "0.2.6",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-state.test.d.ts","sourceRoot":"","sources":["../src/context-state.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { mkdtempSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ // -t 全量可省略化(用户反馈 industry-pools-list 必填 -t)后的解析链回归:
6
+ // 显式 → context.json → config.teamId → SOCIAL_HUB_TEAM_ID。
7
+ // CONFIG_DIR 在模块加载时求值,须先设 env 再动态 import(每例 resetModules)。
8
+ describe("resolveEffectiveTeamId precedence", () => {
9
+ let dir;
10
+ const envBackup = { ...process.env };
11
+ async function loadResolver() {
12
+ vi.resetModules();
13
+ const mod = await import("./context-state.js");
14
+ return mod.resolveEffectiveTeamId;
15
+ }
16
+ beforeEach(() => {
17
+ dir = mkdtempSync(join(tmpdir(), "soh-cli-ctx-"));
18
+ process.env.SOCIAL_HUB_CONFIG_DIR = dir;
19
+ delete process.env.SOCIAL_HUB_TEAM_ID;
20
+ });
21
+ afterEach(() => {
22
+ process.env = { ...envBackup };
23
+ vi.restoreAllMocks();
24
+ });
25
+ it("显式参数最优先", async () => {
26
+ writeFileSync(join(dir, "context.json"), JSON.stringify({ currentTeamId: "team-ctx" }));
27
+ const resolve = await loadResolver();
28
+ expect(resolve("team-explicit")).toBe("team-explicit");
29
+ });
30
+ it("缺省回退 context.json 的 currentTeamId", async () => {
31
+ writeFileSync(join(dir, "context.json"), JSON.stringify({ currentTeamId: "team-ctx" }));
32
+ writeFileSync(join(dir, "config.json"), JSON.stringify({ teamId: "team-config" }));
33
+ const resolve = await loadResolver();
34
+ expect(resolve(undefined)).toBe("team-ctx");
35
+ });
36
+ it("context 缺失回退 config.teamId", async () => {
37
+ writeFileSync(join(dir, "config.json"), JSON.stringify({ teamId: "team-config" }));
38
+ const resolve = await loadResolver();
39
+ expect(resolve(undefined)).toBe("team-config");
40
+ });
41
+ it("config 也缺失回退 SOCIAL_HUB_TEAM_ID", async () => {
42
+ process.env.SOCIAL_HUB_TEAM_ID = "team-env";
43
+ const resolve = await loadResolver();
44
+ expect(resolve(undefined)).toBe("team-env");
45
+ });
46
+ it("全缺失返回 undefined(resolveTeamId 会报 Missing team id)", async () => {
47
+ const resolve = await loadResolver();
48
+ expect(resolve(undefined)).toBeUndefined();
49
+ });
50
+ });
51
+ //# sourceMappingURL=context-state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-state.test.js","sourceRoot":"","sources":["../src/context-state.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;AA2BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAqiD9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AA23ED,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;AA2BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAyoD9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AA6/ED,OAAO,EAAE,OAAO,EAAE,CAAC"}