@geoly-ai/social-hub-cli 0.2.5 → 0.2.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 +24 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -2
- package/dist/client.js.map +1 -1
- package/dist/cmd-manifest.json +8 -2
- package/dist/context-state.test.d.ts +2 -0
- package/dist/context-state.test.d.ts.map +1 -0
- package/dist/context-state.test.js +51 -0
- package/dist/context-state.test.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +423 -298
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/manifest.json +1 -1
- package/skills/social-hub-accounts/SKILL.md +2 -2
- package/skills/social-hub-intelligence/SKILL.md +64 -2
- package/skills/social-hub-shared/SKILL.md +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ 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.7] - 2026-07-17
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- H 阶段——sop_handoffs 固化 + per-phase requiredFields 校验
|
|
12
|
+
- V 阶段——VOC 覆盖率评估 API(纯读)+五层交付
|
|
13
|
+
- E4 交付面——SDK 三方法 + CLI evidence-list/status/fetch + skill 文档
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- 二审修订——challenge 内容判据/evidence scope/rules 并集/freshnessHours(Codex 4P1)
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
- skill TTL 表补 submit_text/installed_apps(Codex E4 复审)
|
|
22
|
+
|
|
23
|
+
## [0.2.6] - 2026-07-17
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- watchlist 行业归类修复(根因:关联子查询列遮蔽)+ 品牌绑定
|
|
28
|
+
- team 级命令 -t 全量可省略,缺省回退 context(用户反馈 industry-pools-list)
|
|
29
|
+
- 手动录入/导入已发布帖自动建舆情检测档(worker 补扫)
|
|
30
|
+
|
|
7
31
|
## [0.2.5] - 2026-07-16
|
|
8
32
|
|
|
9
33
|
### Added
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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
|
|
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() {
|
package/dist/client.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/cmd-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-07-
|
|
3
|
-
"cliVersion": "0.2.
|
|
2
|
+
"generatedAt": "2026-07-17T06:52:38.388Z",
|
|
3
|
+
"cliVersion": "0.2.7",
|
|
4
4
|
"commands": [
|
|
5
5
|
"accounts",
|
|
6
6
|
"accounts brand-bindings",
|
|
@@ -148,10 +148,16 @@
|
|
|
148
148
|
"intelligence",
|
|
149
149
|
"intelligence brand-mention-radar",
|
|
150
150
|
"intelligence campaign-lift",
|
|
151
|
+
"intelligence coverage",
|
|
151
152
|
"intelligence dispatch",
|
|
153
|
+
"intelligence evidence-fetch",
|
|
154
|
+
"intelligence evidence-list",
|
|
155
|
+
"intelligence evidence-status",
|
|
152
156
|
"intelligence fetch-by-industry",
|
|
153
157
|
"intelligence fetch-by-keywords",
|
|
154
158
|
"intelligence fetch-by-tier",
|
|
159
|
+
"intelligence handoff-create",
|
|
160
|
+
"intelligence handoffs-list",
|
|
155
161
|
"intelligence hot-posts",
|
|
156
162
|
"intelligence hot-posts-create",
|
|
157
163
|
"intelligence hot-posts-export",
|
|
@@ -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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"}
|
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;AA2BpC,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;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;AA+oFD,OAAO,EAAE,OAAO,EAAE,CAAC"}
|