e10-data 0.1.23 → 0.1.25
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 +50 -0
- package/README.md +53 -0
- package/bin/e10-data.mjs +135 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.1.25(2026-10-14)—— 新增 `scene groups|items`:场景定位元数据
|
|
4
|
+
|
|
5
|
+
### 1. 新命令族 `scene`(子命令 `groups` / `items`)
|
|
6
|
+
|
|
7
|
+
- 端点:`/api/dw/newetl/chatBi/getSceneGroups`(别名 `/getAgentSceneGroups`,等价),**不传 `groupId` = ① 分组骨架,传 `groupId` = ② 组内条目**。
|
|
8
|
+
- 来源:技能 `references/scene-locate/scripts/locate.mjs` **整体迁入**(scene-locate.md §6 原计划的 CLI 替换),迁入后技能侧不再直连接口。
|
|
9
|
+
参数名、输出字段集、计数走 stderr 等口径与原脚本**保持一致**。
|
|
10
|
+
- 定位:这是**元数据定位**接口(**不取业务数据**)—— 技能硬约束「禁手工 HTTP」的明确例外项;取数仍必须走 `module call` / `query` / `ds` / `hrm`。
|
|
11
|
+
- 输出:默认打印**精简 JSON**(`groups` → `groupId/groupName/itemCount/groupDesc`;
|
|
12
|
+
`items` → `id/datasetName/datasetType/sourceId`,接口/数据源条目另带 `moduleName`/`sourceType`/`sourceGroupId`/`appId`,并保留 `datasetDesc`);
|
|
13
|
+
`--json` = 原样输出接口返回(等价原脚本 `--raw`);分组数 / 条目数打印到 stderr,**stdout 保持纯净**。
|
|
14
|
+
⚠️ **顶层形状(见 §4):默认与 `--json` 一律为数组** —— `groups` = 分组数组、`items` = 分组数组(元素内含 `datasets`)。
|
|
15
|
+
- `--client agent|all|connector`(= `datasetClient`),默认 `agent`;取值非法直接报用法错误。
|
|
16
|
+
- 错误语义与原脚本对齐:HTTP 401 / `code=401「暂无权限!」` / `code=-1「token为空或失效」` 均原样报出并终止,**不换参数重试**。
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
e10-data scene groups # ① 分组骨架(24 个分组)
|
|
20
|
+
e10-data scene items --group 1060565684758507520 # ② 该分组的条目(接口 / 数据源)
|
|
21
|
+
e10-data scene items --group 1060565684758507520 --json # 原样输出接口返回(排查用)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 2. 同步改动
|
|
25
|
+
|
|
26
|
+
- `CMD_SUBS` 白名单新增 `scene: ["groups","items"]`;`main()` 分发表新增 `scene` 分支;`usage()` 新增 `scene` 帮助段;
|
|
27
|
+
头部注释与 `package.json` description 同步。
|
|
28
|
+
- ⚠️ 与原脚本的**差异**:不再支持单次 `--base-url` 覆盖(环境一律取当前登录 profile 的 baseUrl,避免"同一凭据打错环境");
|
|
29
|
+
原脚本内置的调试 `eteamsid` 亦不迁入(凭据唯一来源 = `weaver-work-cli`)。
|
|
30
|
+
|
|
31
|
+
### 3. 实测确认(2026-10-14)
|
|
32
|
+
|
|
33
|
+
- 用法/参数分支实测:未知子命令 → 用法提示(退出码 1);`scene items` 缺 `--group` → `ERROR: 缺少必填参数 --group <groupId>`;
|
|
34
|
+
`--client bad` → `ERROR: --client 值必须为 agent|all|connector(当前: bad)`。
|
|
35
|
+
- 接口连通性:当前登录 profile(`https://www.e-cology.com.cn`)下 `scene groups` 返回 **HTTP 401**,
|
|
36
|
+
与同环境已知接口(`skill/getChatDocsBySkillKey`)表现一致 ⇒ **登录态已过期所致**,非本命令特有问题(重新登录后即可用)。
|
|
37
|
+
|
|
38
|
+
### 4. 形状修订(2026-10-14 复核后修正,未发布即改,不新开版本)
|
|
39
|
+
|
|
40
|
+
**问题**:`scene items` 默认输出把接口返回的单元素数组展开成了**对象**(`const g = Array.isArray(data) ? data[0] : data`),
|
|
41
|
+
导致 ① `groups` 默认=数组 / `items` 默认=对象(**跨子命令不一致**);② `items` 的**默认(对象)与 `--json`(数组)顶层类型相反**;
|
|
42
|
+
③ `data[0]` 会**静默丢弃**第 2 个及以后的分组元素;④ 空分组输出裸 `[]`,与对象形态不自洽;
|
|
43
|
+
⑤ 与本技能 `references/scene-locate/scene-locate.md` §1.1/§1.2 的既有契约(数组)**矛盾**,也与本仓库 `README.md` 的原示例(对象)互相打架。
|
|
44
|
+
|
|
45
|
+
**修正**:`cmdSceneItems` **不再展开 `data[0]`**,默认输出与接口同构的**数组**(仅裁字段),空集合统一为 `[]`。
|
|
46
|
+
修正后 —— ① 两条子命令顶层一律数组、互相同构;② 与技能 §1.1/§1.2 契约一致(**技能文档无需改动**);
|
|
47
|
+
③ 默认 / `--json` 的差异**收敛为"字段是否裁剪"**,形状不再翻转;④ 消除丢元素与空集合不自洽。
|
|
48
|
+
|
|
49
|
+
**顺带**:`cmdSceneGroups` 对「接口返回非数组形态」不再静默当空数组,改为包成单元素数组并在 stderr 提示;
|
|
50
|
+
`usage()` 末尾「认证」段为 2026-09-24 之前的旧口径(写 `e10-login` 出口 + 明文镜像),已同步为
|
|
51
|
+
「凭据唯一来源 = `weaver-work-cli`,不设 `e10-login` 回退」。
|
|
52
|
+
|
|
3
53
|
## 0.1.23(2026-10-13)—— 新增 `refusal get`:拒答话术
|
|
4
54
|
|
|
5
55
|
### 1. 新命令族 `refusal`(子命令 `get`)
|
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ e10-data exp status|manifest|commits|file|pull|init|commit|lock|release|roll
|
|
|
27
27
|
e10-data attend statis 考勤假期余额统计 getAttendInfoStatis(hr-attendance 病假/事假等,v0.1.5 新增)
|
|
28
28
|
e10-data module call 模块配置接口调用(配置中心驱动;已确定「哪个模块的哪条具体接口」之后的统一取数入口,v0.1.21 新增)
|
|
29
29
|
e10-data refusal get --type <type> 拒答话术 getRefusalSpeechTechnique(入参 type → data 话术字符串,v0.1.23 新增)
|
|
30
|
+
e10-data scene groups|items 场景定位元数据 getSceneGroups(① 分组骨架 ② 组内条目;**不取业务数据**,v0.1.25 新增)
|
|
30
31
|
```
|
|
31
32
|
|
|
32
33
|
## 通用约定
|
|
@@ -352,3 +353,55 @@ e10-data refusal get --type 1 --json
|
|
|
352
353
|
e10-data refusal get --type 1 --http get
|
|
353
354
|
```
|
|
354
355
|
|
|
356
|
+
## scene groups|items 场景定位元数据(v0.1.25 新增)
|
|
357
|
+
|
|
358
|
+
**用途**:E10「场景分组 → 接口/数据源」两级**定位**(**不取业务数据**)。端点 `/api/dw/newetl/chatBi/getSceneGroups`
|
|
359
|
+
(别名 `/getAgentSceneGroups`,等价),**不传 `groupId` 返回分组骨架,传 `groupId` 返回该分组的条目**。
|
|
360
|
+
本命令由技能 `references/scene-locate/scripts/locate.mjs` **整体迁入**(属技能硬约束「禁手工 HTTP」的例外项;
|
|
361
|
+
**取数**仍必须走 `module call` / `query` / `ds` / `hrm`)。
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
e10-data scene groups # ① 分组骨架
|
|
365
|
+
e10-data scene items --group <groupId> # ② 组内条目
|
|
366
|
+
e10-data scene groups [--client agent|all|connector] [--json]
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
| 参数 | 说明 |
|
|
370
|
+
|---|---|
|
|
371
|
+
| `groups` / `items` | `groups` = 分组骨架(每个分组带 `groupDesc` = `【场景】`+`【触发词】`+`【取数顺序】`);`items` = 组内条目 |
|
|
372
|
+
| `--group` | `items` **必填**;分组 id(19 位雪花号,按字符串传参) |
|
|
373
|
+
| `--client` | `datasetClient`,取值 `agent`(默认)/ `all` / `connector`;取值非法直接报用法错误 |
|
|
374
|
+
| `--json` | 原样输出接口返回(等价原脚本 `--raw`),供排查 |
|
|
375
|
+
|
|
376
|
+
**默认输出(精简 JSON,供 Agent 消费;分组数 / 条目数打印到 stderr,stdout 保持纯净)**:
|
|
377
|
+
|
|
378
|
+
> ⚠️ **顶层形状(2026-10-14 修订)**:两条子命令的默认输出**与 `--json` 一律为数组**,二者同构 ——
|
|
379
|
+
> `groups` = 分组数组;`items` = 分组数组(元素内含 `datasets`)。默认与 `--json` 的差异**仅在于字段是否裁剪**,
|
|
380
|
+
> 顶层形状不翻转。此口径与技能 `references/scene-locate/scene-locate.md` §1.1 / §1.2 契约一致。
|
|
381
|
+
|
|
382
|
+
```jsonc
|
|
383
|
+
// scene groups
|
|
384
|
+
[{ "groupId": "1060565684758507520", "groupName": "EHR考勤/人事", "itemCount": 47, "groupDesc": "【场景】… 【触发词】… 【取数顺序】…" }]
|
|
385
|
+
|
|
386
|
+
// scene items --group 1060565684758507520
|
|
387
|
+
[{ "groupId": "…", "groupName": "…", "itemCount": 47, "datasets": [
|
|
388
|
+
{ "id": "…", "datasetName": "查询历史在职数量统计", "datasetType": "interface",
|
|
389
|
+
"sourceId": "POST_EHR_GET_COUNT_DATA_4", "datasetDesc": "…" },
|
|
390
|
+
{ "id": "…", "datasetName": "项目 PMO 指标宽表", "datasetType": "datasource",
|
|
391
|
+
"sourceId": "1307594250577248258", "moduleName": "项目 PMO 指标", "sourceType": "ETEAMS",
|
|
392
|
+
"sourceGroupId": "-98", "appId": "…", "datasetDesc": "【通道】…【口径】…【回退】…【禁项】…【边界】…" }
|
|
393
|
+
] }]
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
**分流(拿到条目后)**:
|
|
397
|
+
|
|
398
|
+
- `datasetType=interface` → `e10-data module call --conf-key <sourceId> --group <moduleName>`(`moduleName` 随条目下发,勿用 confKey 拆段猜);
|
|
399
|
+
- `datasetType=datasource` → 按 `datasetDesc` 五段式走 `query`(DSL,`from.table` 用 desc 里的密文表 `t_*`)
|
|
400
|
+
或 `ds`(`--source-type <sourceType>` / `--group <sourceGroupId>` / `--app-id <appId>`,⚠️ `ds --table` 用 `sourceId`,**不是**密文表名)。
|
|
401
|
+
|
|
402
|
+
**错误语义**(与原脚本对齐):`code=401「暂无权限!」` = 该接口在当前环境未开放或账号无权限(**先确认接口已部署**,不要反复重登);
|
|
403
|
+
`code=-1「token为空或失效」` / HTTP 401 = 登录态失效 → 重新登录;均**原样报错终止,不换参数重试**。
|
|
404
|
+
|
|
405
|
+
> ⚠️ 与原脚本的**差异**:不再支持单次 `--base-url` 覆盖(环境一律取当前登录 profile 的 `baseUrl`,避免"同一凭据打错环境"),
|
|
406
|
+
> 内置调试 `eteamsid` 亦不迁入(凭据唯一来源 = `weaver-work-cli`)。
|
|
407
|
+
|
package/bin/e10-data.mjs
CHANGED
|
@@ -30,6 +30,11 @@
|
|
|
30
30
|
* 复用本 CLI 凭据缓存与 conf 通道、零临时文件
|
|
31
31
|
* e10-data refusal get 拒答话术 getRefusalSpeechTechnique(入参 type → data 话术字符串;
|
|
32
32
|
* auto 通道 = POST 表单优先、GET ?type= 回退,2026-10-13)
|
|
33
|
+
* e10-data scene groups|items 场景定位元数据 getSceneGroups(2026-10-14 新增)
|
|
34
|
+
* groups 分组骨架(每个分组带 groupDesc =【场景】【触发词】【取数顺序】)
|
|
35
|
+
* items 组内条目(interface=接口 / datasource=数据源,每条带 datasetDesc)
|
|
36
|
+
* 来源:技能 references/scene-locate/scripts/locate.mjs 整体迁入 ——
|
|
37
|
+
* 属**元数据定位**接口(不取业务数据),技能硬约束「禁手工 HTTP」的例外项
|
|
33
38
|
*
|
|
34
39
|
* 通用:--json 原样输出;复杂 JSON 参数支持 @文件 或 内联(中文走 @文件 更稳)
|
|
35
40
|
* 认证:凭据**唯一来源 = weaver-work-cli**(本 CLI 不实现任何加解密,**不设 e10-login 回退**):
|
|
@@ -710,6 +715,7 @@ const CMD_SUBS = {
|
|
|
710
715
|
attend: ["statis"],
|
|
711
716
|
module: ["call"],
|
|
712
717
|
refusal: ["get"],
|
|
718
|
+
scene: ["groups", "items"],
|
|
713
719
|
};
|
|
714
720
|
function commandIsKnown(pos) {
|
|
715
721
|
const family = pos[0], sub = pos[1];
|
|
@@ -2731,6 +2737,117 @@ async function cmdRefusalGet(args, json) {
|
|
|
2731
2737
|
console.log(typeof d === "object" ? JSON.stringify(d, null, 1) : String(d));
|
|
2732
2738
|
}
|
|
2733
2739
|
|
|
2740
|
+
// ---------------- scene:场景定位元数据 getSceneGroups(2026-10-14 新增)----------------
|
|
2741
|
+
// 端点:/api/dw/newetl/chatBi/getSceneGroups(别名 /getAgentSceneGroups,等价)
|
|
2742
|
+
// ① scene groups → 分组骨架(不传 groupId;每个分组带 groupDesc 三段式)
|
|
2743
|
+
// ② scene items --group <groupId> → 该分组的条目(传 groupId;datasetType = interface / datasource)
|
|
2744
|
+
// 来源:由技能 `references/scene-locate/scripts/locate.mjs` **整体迁入**(scene-locate.md §6 原计划的 CLI 替换),
|
|
2745
|
+
// 迁入后技能侧不再直连接口。参数与输出口径与脚本保持一致(`--client` 默认 agent、精简字段集、计数走 stderr)。
|
|
2746
|
+
// 形状口径(2026-10-14 修订):**默认输出顶层一律为数组** —— ① groups = 分组数组;② items = 分组数组
|
|
2747
|
+
// (元素内含 `datasets`)。`--json` 仍为「接口原样返回」(同为数组)⇒ 默认与 `--json` 的差异**仅在于字段是否裁剪**,
|
|
2748
|
+
// 顶层形状不翻转。该口径与技能 `references/scene-locate/scene-locate.md` §1.1 / §1.2 契约一致。
|
|
2749
|
+
// 定位:这是**元数据定位**接口(不取业务数据)—— 技能硬约束「禁手工 HTTP」的明确例外项;
|
|
2750
|
+
// 取数仍必须走 `module call` / `query` / `ds` / `hrm`,不得用本命令替代取数。
|
|
2751
|
+
// 代理:Node 原生 fetch **不读** `https_proxy` ⇒ 内网域名可直连;用 curl 手工验证才需 `--noproxy '*'`。
|
|
2752
|
+
const SCENE_PATH = "/api/dw/newetl/chatBi/getSceneGroups";
|
|
2753
|
+
const SCENE_CLIENTS = ["agent", "all", "connector"];
|
|
2754
|
+
|
|
2755
|
+
/** --client(datasetClient):限定取「哪个客户端」的场景集,默认 agent */
|
|
2756
|
+
function sceneClient(args) {
|
|
2757
|
+
const c = args.client === undefined ? "agent" : String(args.client).trim();
|
|
2758
|
+
if (!SCENE_CLIENTS.includes(c)) {
|
|
2759
|
+
throw new Error("--client 值必须为 " + SCENE_CLIENTS.join("|") + "(当前: " + args.client + ")");
|
|
2760
|
+
}
|
|
2761
|
+
return c;
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2764
|
+
/** 发一次 scene 元数据请求(GET;Cookie/eteamsid/AgentType-UA 三件套 + X-Requested-With),返回解包后的 data */
|
|
2765
|
+
async function sceneRequest(params) {
|
|
2766
|
+
const q = new URLSearchParams(params).toString();
|
|
2767
|
+
const resp = await fetch(BASE + SCENE_PATH + (q ? "?" + q : ""), {
|
|
2768
|
+
method: "GET",
|
|
2769
|
+
headers: {
|
|
2770
|
+
"accept": "application/json, text/plain, */*",
|
|
2771
|
+
"langType": "zh_CN",
|
|
2772
|
+
"cookie": auth.cookie,
|
|
2773
|
+
"eteamsid": auth.eteamsid,
|
|
2774
|
+
"user-agent": moduleUserAgent(),
|
|
2775
|
+
"x-requested-with": "XMLHttpRequest",
|
|
2776
|
+
},
|
|
2777
|
+
});
|
|
2778
|
+
const text = await resp.text();
|
|
2779
|
+
let j; try { j = parseJsonSafe(text); } catch { throw new Error("HTTP " + resp.status + " 非JSON响应: " + text.slice(0, 300)); }
|
|
2780
|
+
checkAuthFail(resp, text, j);
|
|
2781
|
+
// 业务错误校验:E10 常见形态 { code:401|-1, msg },HTTP 仍为 200(与原脚本同口径)
|
|
2782
|
+
if (j && typeof j === "object" && !Array.isArray(j)) {
|
|
2783
|
+
const bad = (j.code !== undefined && Number(j.code) !== 0) || j.fail === true;
|
|
2784
|
+
if (bad) {
|
|
2785
|
+
throw new Error("getSceneGroups 返回业务错误:code=" + j.code + " msg=" + (j.msg || j.message || "(无 msg)")
|
|
2786
|
+
+ "(HTTP " + resp.status + ";常见:401「暂无权限!」= 该接口在当前环境未开放或账号无权限;"
|
|
2787
|
+
+ "-1「token为空或失效」= 登录态失效,请重新登录)");
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
// 兼容 ResultBean 包装({ code, data })与裸数组
|
|
2791
|
+
return j && typeof j === "object" && !Array.isArray(j) && "data" in j ? j.data : j;
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
/** ① 分组骨架(24 个分组;默认输出精简字段,--json 原样输出接口返回)
|
|
2795
|
+
* ⚠️ 形状口径(2026-10-14 修订):默认输出**顶层为数组**(与 ② items 同构)。 */
|
|
2796
|
+
async function cmdSceneGroups(args, json) {
|
|
2797
|
+
const data = await sceneRequest({ datasetClient: sceneClient(args) });
|
|
2798
|
+
if (json) return data;
|
|
2799
|
+
// 非数组形态一律包成数组 —— 避免「接口异常形态」被静默当成「没有分组」
|
|
2800
|
+
const arr = Array.isArray(data) ? data : (data == null ? [] : [data]);
|
|
2801
|
+
if (data != null && !Array.isArray(data)) {
|
|
2802
|
+
process.stderr.write("# 注意:接口返回非数组形态(" + typeof data + "),已按单元素数组处理\n");
|
|
2803
|
+
}
|
|
2804
|
+
process.stderr.write("# 分组 " + arr.length + " 个\n");
|
|
2805
|
+
console.log(JSON.stringify(arr.map((g) => ({
|
|
2806
|
+
groupId: String(g.groupId ?? ""),
|
|
2807
|
+
groupName: g.groupName ?? "",
|
|
2808
|
+
itemCount: Number(g.itemCount ?? 0),
|
|
2809
|
+
groupDesc: g.groupDesc ?? "",
|
|
2810
|
+
})), null, 1));
|
|
2811
|
+
}
|
|
2812
|
+
|
|
2813
|
+
/** ② 组内条目(接口 / 数据源;groupId 为 19 位雪花号,按字符串传参)
|
|
2814
|
+
* ⚠️ 形状口径(2026-10-14 修订):默认输出**顶层一律数组**(与 ① groups 同构,亦与技能
|
|
2815
|
+
* `references/scene-locate/scene-locate.md` §1.2 契约一致);**不得**再展开 `data[0]` 成单对象
|
|
2816
|
+
* —— 展开会(a)与 ① 及 `--json` 的形状翻转、(b)静默丢弃第 2 个及以后的分组元素。 */
|
|
2817
|
+
async function cmdSceneItems(args, json) {
|
|
2818
|
+
const group = args.group || args.groupId;
|
|
2819
|
+
if (!group) throw new Error("缺少必填参数 --group <groupId>");
|
|
2820
|
+
const data = await sceneRequest({ datasetClient: sceneClient(args), groupId: String(group) });
|
|
2821
|
+
if (json) return data;
|
|
2822
|
+
const arr = Array.isArray(data) ? data : (data == null ? [] : [data]);
|
|
2823
|
+
const out = arr.map((g) => {
|
|
2824
|
+
const items = (g.datasets || []).map((d) => {
|
|
2825
|
+
const o = {
|
|
2826
|
+
id: String(d.id ?? ""),
|
|
2827
|
+
datasetName: d.datasetName ?? "",
|
|
2828
|
+
datasetType: d.datasetType ?? "",
|
|
2829
|
+
sourceId: d.sourceId ?? "",
|
|
2830
|
+
};
|
|
2831
|
+
// 取数通道参数(接口已下发时带出):模块标识 / 数据源类型 / 数据源分组 / 应用标识
|
|
2832
|
+
if (d.moduleName) o.moduleName = d.moduleName;
|
|
2833
|
+
if (d.sourceType) o.sourceType = d.sourceType;
|
|
2834
|
+
if (d.sourceGroupId) o.sourceGroupId = d.sourceGroupId;
|
|
2835
|
+
if (d.appId) o.appId = d.appId;
|
|
2836
|
+
o.datasetDesc = d.datasetDesc ?? "";
|
|
2837
|
+
return o;
|
|
2838
|
+
});
|
|
2839
|
+
return {
|
|
2840
|
+
groupId: String(g.groupId ?? group),
|
|
2841
|
+
groupName: g.groupName ?? "",
|
|
2842
|
+
itemCount: Number(g.itemCount ?? items.length),
|
|
2843
|
+
datasets: items,
|
|
2844
|
+
};
|
|
2845
|
+
});
|
|
2846
|
+
if (!out.length) { console.log("[]"); process.stderr.write("# 未找到该分组\n"); return; }
|
|
2847
|
+
process.stderr.write("# 条目 " + out.reduce((n, g) => n + g.datasets.length, 0) + " 条\n");
|
|
2848
|
+
console.log(JSON.stringify(out, null, 1));
|
|
2849
|
+
}
|
|
2850
|
+
|
|
2734
2851
|
// ---------------- main ----------------
|
|
2735
2852
|
function usage() {
|
|
2736
2853
|
console.log(`e10-data CLI(data-assistant 数据接口统一命令行,2026-09-03 扩展)
|
|
@@ -2841,8 +2958,20 @@ refusal 拒答话术(chatBi,2026-10-13 新增)
|
|
|
2841
2958
|
# --http:auto(默认)= 先 POST multipart 表单(同 ds fields-dsl 口径),
|
|
2842
2959
|
# 返回不含 data 时自动回退 GET ?type=;post = 仅 POST 表单;get = 仅 GET query
|
|
2843
2960
|
# 人读输出直接打印 data 话术正文(空串 → 提示该 type 无话术);--json 原样输出整个响应对象
|
|
2844
|
-
|
|
2845
|
-
|
|
2961
|
+
scene 场景定位元数据(chatBi getSceneGroups,2026-10-14 新增;**不取业务数据**,只做「分组 → 条目」定位)
|
|
2962
|
+
scene groups [--client agent|all|connector] # ① 分组骨架(groupDesc =【场景】【触发词】【取数顺序】)
|
|
2963
|
+
scene items --group <groupId> [--client …] # ② 组内条目(每组带 datasetDesc;datasetType 决定分流)
|
|
2964
|
+
# 端点 /api/dw/newetl/chatBi/getSceneGroups(别名 getAgentSceneGroups,等价)
|
|
2965
|
+
# 默认输出**精简 JSON**(groups: groupId/groupName/itemCount/groupDesc;
|
|
2966
|
+
# items: id/datasetName/datasetType/sourceId[/moduleName/sourceType/sourceGroupId/appId]/datasetDesc);
|
|
2967
|
+
# --json = 原样输出接口返回;分组数 / 条目数打印到 stderr(stdout 保持纯净)
|
|
2968
|
+
# ⚠️ 顶层形状(2026-10-14 修订):默认与 --json **一律为数组** —— groups = 分组数组;
|
|
2969
|
+
# items = 分组数组(元素内含 datasets),二者同构;默认与 --json 只差「字段是否裁剪」
|
|
2970
|
+
# 分流提示:items 里 datasetType=interface → module call(--conf-key sourceId,--group 取 moduleName);
|
|
2971
|
+
# datasetType=datasource → query(DSL)/ ds(数据源,--source-type/--group/--app-id 见条目字段)
|
|
2972
|
+
# 示例: scene groups | scene items --group 1060565684758507520
|
|
2973
|
+
认证: 凭据**唯一来源 = weaver-work-cli**(本 CLI 不实现任何加解密,**不设 e10-login 回退**);
|
|
2974
|
+
未登录 / 凭据失效时执行 weaver-work-cli auth login(无浏览器:login xiaoe-env 用环境变量 token)`);
|
|
2846
2975
|
}
|
|
2847
2976
|
|
|
2848
2977
|
async function main() {
|
|
@@ -2905,6 +3034,10 @@ async function main() {
|
|
|
2905
3034
|
} else if (family === "refusal") {
|
|
2906
3035
|
if (sub === "get") result = await cmdRefusalGet(args, json);
|
|
2907
3036
|
else { usage(); process.exit(1); }
|
|
3037
|
+
} else if (family === "scene") {
|
|
3038
|
+
if (sub === "groups") result = await cmdSceneGroups(args, json);
|
|
3039
|
+
else if (sub === "items") result = await cmdSceneItems(args, json);
|
|
3040
|
+
else { usage(); process.exit(1); }
|
|
2908
3041
|
} else if (family === "attend") {
|
|
2909
3042
|
if (sub === "statis") result = await cmdAttendStatis(args, json);
|
|
2910
3043
|
else { usage(); process.exit(1); }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "e10-data",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "泛微 E10 数据接口统一 CLI(data-assistant 专家配套):登录(login xiaoe-env,环境变量 XiaoE 全局 token 换 ETEAMSID,免浏览器/免 python)/DSL 查询/数据源/文档/词库/关联字段翻译/环境参数配置中心(conf,支持 confGroup 分组)/专家包版本管理;ds 取数(list/chart/stat/count)的 appId 由调用方显式传入 --app-id(v0.1.14 起 CLI 不再自动反查;EB 建模表单 weaver-ebuilder-form-service 必须带,appId 取自 ebdf_obj.app_id;2026-10-09 起不再做 EB 权限前置校验);认证凭据**唯一来源 = weaver-work-cli**(通过 `auth export-weaver-env` 命令出口取明文凭据,**不设 e10-login 回退**;加解密由该 CLI 自行负责,本 CLI 不实现任何加解密;仅 login xiaoe-env 在无凭据时自行换 token,写 profile 仍交 e10-login set)。v0.1.17 性能改造:免凭据命令(--version/--help/未知命令)提前返回、直连 e10-login JS 入口(去掉 shell:true 的 cmd.exe 开销)、新增凭据进程间 TTL 缓存(不落明文);v0.1.19(2026-09-24)新增 ds 发现层聚合 groups/find/describe(进程内并发,全 58 分组扫表实测 ~5.5s),并修复 ds tables --name 因 listByPage 端点切换导致的关键词过滤静默失效;v0.1.18(2026-09-24)新增 ds fields-dsl(接口 /api/dw/newetl/chatBi/ds/fieldsForDSL),并移除凭据明文镜像同步(不再写 ~/.workbuddy/e10-login-cache.md);v0.1.20(2026-09-24)凭据来源切换为 weaver-work-cli 唯一来源、移除 e10-login 回退,并补齐 userId/tenantKey 传递(修复 attend statis 等命令报「缺少查询人员」的问题)。v0.1.21(2026-09-28)新增 module call —— 模块配置接口调用(配置中心驱动):已确定「哪个模块的哪条具体接口」之后的一条命令取数入口(精取该条 confAttrs → 按 http_method/input_params 组参 → 发请求(自动禁代理 + Cookie/eteamsid/UA 三件套)→ 提取精简结果),与技能自带 script/call_module.py 等价(参数名/退出码/提取口径全对齐),复用本 CLI 凭据缓存与 conf 通道、零临时文件;同时 auth 归一化与凭据缓存补齐 userAgent(供 AgentType UA 使用,缺失时从 cookie 的 agentType= 推导)。v0.1.22(2026-10-10):移除 `eb perm-page` 命令(EB 建模表单取数不再做权限前置校验,appId 直接取 ebdf_obj.app_id);`--fields`/`--group-by`/`--order` 等逗号列表支持 `@文件`(逗号字符串或 JSON 数组,与 --where/--stat/--dsl 一致,规避 shell 拆分导致的静默丢列/0 行)。v0.1.23(2026-10-13)新增 `refusal get` —— 拒答话术 getRefusalSpeechTechnique(入参仅 type,返回对象的 data = 话术字符串;默认 auto 通道 = POST multipart 表单优先、返回不含 data 时自动回退 GET ?type=,可用 --http post|get 锁定单通道)。",
|
|
3
|
+
"version": "0.1.25",
|
|
4
|
+
"description": "泛微 E10 数据接口统一 CLI(data-assistant 专家配套):登录(login xiaoe-env,环境变量 XiaoE 全局 token 换 ETEAMSID,免浏览器/免 python)/DSL 查询/数据源/文档/词库/关联字段翻译/环境参数配置中心(conf,支持 confGroup 分组)/专家包版本管理;ds 取数(list/chart/stat/count)的 appId 由调用方显式传入 --app-id(v0.1.14 起 CLI 不再自动反查;EB 建模表单 weaver-ebuilder-form-service 必须带,appId 取自 ebdf_obj.app_id;2026-10-09 起不再做 EB 权限前置校验);认证凭据**唯一来源 = weaver-work-cli**(通过 `auth export-weaver-env` 命令出口取明文凭据,**不设 e10-login 回退**;加解密由该 CLI 自行负责,本 CLI 不实现任何加解密;仅 login xiaoe-env 在无凭据时自行换 token,写 profile 仍交 e10-login set)。v0.1.17 性能改造:免凭据命令(--version/--help/未知命令)提前返回、直连 e10-login JS 入口(去掉 shell:true 的 cmd.exe 开销)、新增凭据进程间 TTL 缓存(不落明文);v0.1.19(2026-09-24)新增 ds 发现层聚合 groups/find/describe(进程内并发,全 58 分组扫表实测 ~5.5s),并修复 ds tables --name 因 listByPage 端点切换导致的关键词过滤静默失效;v0.1.18(2026-09-24)新增 ds fields-dsl(接口 /api/dw/newetl/chatBi/ds/fieldsForDSL),并移除凭据明文镜像同步(不再写 ~/.workbuddy/e10-login-cache.md);v0.1.20(2026-09-24)凭据来源切换为 weaver-work-cli 唯一来源、移除 e10-login 回退,并补齐 userId/tenantKey 传递(修复 attend statis 等命令报「缺少查询人员」的问题)。v0.1.21(2026-09-28)新增 module call —— 模块配置接口调用(配置中心驱动):已确定「哪个模块的哪条具体接口」之后的一条命令取数入口(精取该条 confAttrs → 按 http_method/input_params 组参 → 发请求(自动禁代理 + Cookie/eteamsid/UA 三件套)→ 提取精简结果),与技能自带 script/call_module.py 等价(参数名/退出码/提取口径全对齐),复用本 CLI 凭据缓存与 conf 通道、零临时文件;同时 auth 归一化与凭据缓存补齐 userAgent(供 AgentType UA 使用,缺失时从 cookie 的 agentType= 推导)。v0.1.22(2026-10-10):移除 `eb perm-page` 命令(EB 建模表单取数不再做权限前置校验,appId 直接取 ebdf_obj.app_id);`--fields`/`--group-by`/`--order` 等逗号列表支持 `@文件`(逗号字符串或 JSON 数组,与 --where/--stat/--dsl 一致,规避 shell 拆分导致的静默丢列/0 行)。v0.1.23(2026-10-13)新增 `refusal get` —— 拒答话术 getRefusalSpeechTechnique(入参仅 type,返回对象的 data = 话术字符串;默认 auto 通道 = POST multipart 表单优先、返回不含 data 时自动回退 GET ?type=,可用 --http post|get 锁定单通道)。v0.1.25(2026-10-14)新增 `scene groups|items` —— 场景定位元数据 getSceneGroups(① groups 分组骨架 / ② items --group <groupId> 组内条目),由技能 references/scene-locate/scripts/locate.mjs 整体迁入(属元数据定位接口、不取业务数据):默认输出精简 JSON(groups: groupId/groupName/itemCount/groupDesc;items: id/datasetName/datasetType/sourceId[/moduleName/sourceType/sourceGroupId/appId]/datasetDesc),--json 原样输出接口返回,计数走 stderr;--client agent|all|connector 默认 agent。",
|
|
5
5
|
"author": "e10-dw",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|