e10-data 0.1.17 → 0.1.20

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
@@ -1,5 +1,111 @@
1
1
  # 变更记录
2
2
 
3
+ ## 0.1.20(2026-09-24)—— 凭据来源切换为 `weaver-work-cli`(唯一来源,移除 e10-login 回退)
4
+
5
+ ### 1. 凭据出口改为 `weaver-work-cli auth export-weaver-env`
6
+
7
+ 执行 `auth export-weaver-env --shell posix`,解析 `WEAVER_BASE_URL` / `WEAVER_ETEAMSID` /
8
+ `WEAVER_COOKIE` 三项(正好对应本 CLI 需要的 `baseUrl` / `eteamsid` / `cookie`)。
9
+ 凭据**只在进程内存中解析**——不经 shell、不落盘、不打印。
10
+
11
+ - 入口定位沿用与 e10-login 相同的四段式:`WEAVER_WORK_CLI_ENTRY` → Node 模块解析 →
12
+ PATH shim → 常见全局前缀;
13
+ - `weaver-work-cli` 的登录态存于 `~/.weaver-work-cli/`(`@napi-rs/keyring` 加密),
14
+ 与 e10-login **完全独立、互不通用**。
15
+
16
+ ### 2. ⚠️ 破坏性变更:移除 e10-login 回退
17
+
18
+ `AUTH_PROVIDERS` **收敛为只保留 `weaver-work-cli`**。原四个 e10-login 系出口
19
+ (`auth --json` / `whoami --json` / `whoami` 文本 / 明文镜像)**保留函数定义但不再挂载**;
20
+ 如需恢复回退,把对应条目加回 `AUTH_PROVIDERS` 数组即可。
21
+
22
+ - 未取得凭据的报错与 401 提示统一改为「唯一来源 = weaver-work-cli,**不设回退**」,
23
+ 并直接引导 `weaver-work-cli auth login --base-url <域名>`;
24
+ - ⇒ **使用前必须已登录 `weaver-work-cli`**,否则所有需要凭据的命令都会报错
25
+ (用 `weaver-work-cli auth status --no-check` 确认)。`login xiaoe-env` 不受影响。
26
+
27
+ ### 3. 修复:补齐 `userId` / `tenantKey` 传递
28
+
29
+ `auth export-weaver-env` **只导出 5 个变量**(`WEAVER_BASE_URL` / `WEAVER_ETEAMSID` /
30
+ `WEAVER_COOKIE` / `WEAVER_USER_AGENT` / `WEAVER_AGENT_TYPE`),**不含 `userId`**。
31
+ 而 `auth.userId` 会被部分命令用作「当前登录用户」的默认值——实测 `e10-data attend statis`
32
+ 缺它直接报 `ERROR: 缺少查询人员:--user <人员ID>`。
33
+
34
+ ⇒ 在凭据出口内**追加一次 `auth status --json --no-check`** 取回 `userId` / `tenantKey`
35
+ (二者为非凭据身份字段,取不到不影响凭据可用性;凭据进程间 TTL 缓存仍兜住额外开销)。
36
+
37
+ ## 0.1.19(2026-09-24)—— 发现层聚合:新增 `ds find` / `ds describe` / `ds groups`,修复 `--name` 静默失效
38
+
39
+ ### 1. 新增 `ds find`(跨分组找表,进程内并发)
40
+
41
+ 把原来「定分组 → 找表」的多跳串行收敛成一次调用。**关键收益来自进程内并发**:单次 CLI 调用约 5.4s,
42
+ 其中「凭据现取」固定约 4.8s 且**与请求条数无关**(实测取 48 条 vs 取 1 条:5.5s vs 5.8s),
43
+ 所以 N 个分组分散在 N 个进程里是纯浪费。
44
+
45
+ - `ds find --name <关键词>`:默认扫**核心 3 组**(业务表单 / e-builder表单 / 流程)+ 语义命中组(≤ `--max-groups`,默认 6)
46
+ - `--all-groups`:扫全部 58 个内置分组 —— 实测 **5.3~5.9s**(对比:逐进程并发 47.5s、逐进程串行 ~313s)
47
+ - 默认集合全 miss 时**自动升级为全分组扫一次**(`--no-escalate` 可关)
48
+ - 输出按**实体归并去重**:同一流程会同时出现在「流程」与 3 个「工作流*效率」分组,去重后落选分组记入 `alsoInGroups`
49
+ - 附带 `routeHint`:**命中分组分布本身就是通道信号**(命中 workflow 类分组 → 该走 WORKFLOW 模块通道,不走数据源)
50
+ - ⚠️ 该端点当前忽略 `name` ⇒ 关键词过滤暂由**本地**完成(抓 `--pages` × `--size` 行后按表名过滤),
51
+ 计数与样例放在 `nameFilter`(**不静默丢弃**),`--loose` 关闭该过滤;**未命中 ≠ 表不存在**(详见第 3 节)
52
+
53
+ ### 2. 新增 `ds describe`(一次并发取回「字段 + 词库」)
54
+
55
+ 两者入参同为 `(groupId, tableId)`、彼此无依赖,故并行合成一次调用(实测 ~0.5s)。
56
+
57
+ - 字段:归一化为 `main[] / detail[]`(明细子表单独成组),保留 `name / text / type / dbFieldType / isPK / dataKey`
58
+ - 词库:自动带 `data-source-query` 四参数(skillKey + sourceType + sourceGroupId + sourceTableId);
59
+ 返回 `noLexicon: true` 时是**确定结论**(四参数均取自本次调用),不再是难以区分的 500
60
+ - `relatedFields`:按 groupId/serviceMark **预判**关联字段提取是否适用 ——
61
+ 业务表单(formreport)表名是中文显示名、非物理表名,六类判定全部不适用,该跳必然空转,直接标注不必发起
62
+ - ⚠️ **不做权限校验**:`ds/listByPage` 虽然也回带 appId,但**数据源通道不拦权限**(实测未授权表照样能取到数据),
63
+ 拿它跳过校验 = 权限闸门静默失效。⇒ EB 表取数前的权限闸门仍必须单独执行 `eb perm-page`(appId 只从那次调用取)。
64
+
65
+ ### 3. `ds listByPage` 端点收敛为唯一入口 + 关键词过滤的过渡方案
66
+
67
+ **端点决策(用户 2026-09-24 确认):只保留 `/api/dw/newetl/chatBi/ds/listByPage`** ——
68
+ 另一条 `/api/ebuilder/common/ds/listByPage` **已从代码中移除**(对应的 `DS_LB_*` 双端点常量、
69
+ `E10_DS_LISTBY_PAGE_ORDER` 环境变量开关一并删除)。现由 `dsListByPage()` 单一封装发起(`DS_LB_PATH`)。
70
+
71
+ **为什么需要过渡方案**:该端点**当前忽略 `name`**(传 `name`/`tableName`/`keyword`/`searchKey`/`tableText`/`title` 任意字段名,
72
+ 都返回该分组全量,实测 8531 条)⇒ 服务端无法按关键词过滤。**后端后续会升级支持 `name`(已确认)**。
73
+
74
+ ⇒ 过渡做法:`ds find` 改为「**分页抓取 + 本地按表名过滤**」,抓取窗口 = `--size`(≤2000)× `--pages`(≤50)。
75
+
76
+ - 实测后端**接受大 pageSize**(100/500/1000/2000 均按量返回,非只认 100)→ 单次即可覆盖多数分组
77
+ - 输出新增 `nameFilter`:写明 `serverSide:false`、`pages/pageSize/rowsScanned/dropped` 与说明
78
+ - ⚠️ **未命中不再等于「表不存在」**:交付话术与输出都改为「未落在已扫描的 N 行窗口内」,
79
+ 并提示调大 `--size/--pages`;避免把「窗口不够大」误判成「没有这张表」
80
+ - 自动升级全扫增加护栏:窗口 >2000 行时不再自动全扫(否则会变成 58 组 × N 页的请求风暴)
81
+ - **后端支持 `name` 后无需改任何调用方式**:分页与 `total` 语义已按「服务端过滤」写好,届时自动恢复精确过滤
82
+
83
+ > 参照:两端点返回结构**逐字段相同**(26 个键);差异在 `name` 是否生效与数据范围
84
+ > (实测 EB 分组:ebuilder 不带 appId=633、chatBi=11535、ebuilder+appId=55,且 `name` 只在前者域内生效)——
85
+ > 这是当初考虑双端点的原因,现按决策统一走 chatBi 端点,并保留 `--app-id` 透传(EB 分组按应用分域时需要)。
86
+
87
+ ### 4. 新增 `ds groups`
88
+
89
+ 打印内置分组清单(含 `groupId` / 中文名 / `serviceMark`)、核心分组与语义规则,便于挑选 `--groups`。
90
+ ⚠️ 该清单仅用于 `ds find` 的默认扫描候选集,**不参与任何取数参数推导**;分组随环境变动时用 `--groups` 显式覆盖。
91
+
92
+ ## 0.1.18(2026-09-24)—— 新增 ds fields-dsl / 收敛凭据明文落盘
93
+
94
+ ### 1. 新增 `ds fields-dsl` 子命令
95
+
96
+ - 新增 `ds fields-dsl --group <gid> --table <tid> [--app-id <id>]`,参数与输出结构同 `ds fields`,
97
+ 仅接口换为 `/api/dw/newetl/chatBi/ds/fieldsForDSL`(`postMultipart` 复用同一套表单构造)
98
+ - 已在 `CMD_SUBS.ds` 白名单与顶层 `main()` 分发表同步登记,`--help` 增加对应用法行
99
+ - 输出与 `ds fields` 一致(`== 表: <name> (id=..) 字段 N 个 ==` 逐字段制表符输出);带 `--json` 时原样输出响应
100
+
101
+ ### 2. 移除 `syncCacheMd()` 明文镜像同步
102
+
103
+ - 删除 `syncCacheMd()` 函数及其在 `loadAuth()` 中的调用:不再把 `baseUrl` / `ETEAMSID` /
104
+ 完整 Cookie 串 / `userId` / `tenantKey` 明文刷新写入 `~/.workbuddy/e10-login-cache.md`
105
+ - 影响:该明文镜像不再由本 CLI 维护(存量文件属历史遗留,可自行清理);
106
+ 取数与鉴权链路不受影响(凭据仍走 e10-login 出口 + 进程间 TTL 缓存,均不落明文)
107
+ - 已确认全仓无 `syncCacheMd` 残留引用,`node --check` 通过
108
+
3
109
  ## 0.1.17(2026-09-20)—— 启动性能改造
4
110
 
5
111
  本次只做性能与健壮性改造,**不改变任何命令的参数、输出与退出码**(已用 10 条命令做新旧输出逐字节对比,全部一致)。
package/README.md CHANGED
@@ -9,7 +9,7 @@ npm i -g e10-data # 全局安装
9
9
  e10-data --version # 验证
10
10
  ```
11
11
 
12
- > 依赖:认证复用 `weaver-e10-login` 的登录态。**加解密全部由 `e10-login` 负责,本 CLI 不实现任何加解密**(auth 文件由 e10-login 自己的密钥体系加密:1.5.0 起为「每机随机密钥 + OS keychain」,早期版本为固定 seed,只有 e10-login 解得开)。CLI 通过 e10-login 的命令出口取明文凭据,优先级:**① `e10-login auth --json`**(推荐的正式契约)→ **② `e10-login whoami --json`**(其 JSON 带 `cookies` 时)→ **③ `e10-login whoami`**(文本解析,当前实际路径)→ **④ 明文镜像 `~/.workbuddy/e10-login-cache.md`**(兜底,命中时打印告警)。请先安装并登录 weaver-e10-login(`e10-login oidc`)。
12
+ > 依赖:认证**唯一来源 = `weaver-work-cli`(不设回退)**。**加解密全部由 `e10-login` 负责,本 CLI 不实现任何加解密**(auth 文件由 e10-login 自己的密钥体系加密:1.5.0 起为「每机随机密钥 + OS keychain」,早期版本为固定 seed,只有 e10-login 解得开)。CLI 通过 e10-login 的命令出口取明文凭据,优先级:**① `e10-login auth --json`**(推荐的正式契约)→ **② `e10-login whoami --json`**(其 JSON 带 `cookies` 时)→ **③ `e10-login whoami`**(文本解析,当前实际路径)→ **④ 明文镜像 `~/.workbuddy/e10-login-cache.md`**(兜底,命中时打印告警)。请先安装并登录 weaver-e10-login(`e10-login oidc`)。
13
13
  >
14
14
  > 唯一例外:**`e10-data login xiaoe-env`** 在「还没有任何凭据」时也能独立完成登录(用环境变量里的 XiaoE 全局 token 换 ETEAMSID;换 token 本 CLI 自己算,写 profile 仍交 `e10-login set`)。
15
15
 
@@ -32,7 +32,7 @@ e10-data attend statis 考勤假期余额统计 getAttendInfoStatis(hr-atte
32
32
  - `--json`:原样输出接口 JSON(供脚本/Agent 消费);默认人读输出。
33
33
  - 复杂 JSON/中文参数:推荐 `@文件` 承载(如 `--dsl @q.json`、`--where @cond.json`)。
34
34
  - ⚠️ 大整数精度(自动处理):E10 的 ID 多为 19 位,超过 JS 安全整数(2^53-1≈9e15)。CLI 解析 JSON 时**自动把超范围裸整数转成字符串**再发请求/输出(实测后端接受字符串做 =/IN/BETWEEN 数值比较),无需手动加引号,也不误伤字符串正文。
35
- - 认证:**加解密由 `e10-login` 负责(本 CLI 不参与)**。凭据出口优先级:`e10-login auth --json` → `e10-login whoami --json` → `e10-login whoami`(文本)→ 明文镜像 `~/.workbuddy/e10-login-cache.md`(兜底,命中时告警)。命中的出口会记入 `~/.e10-cli/.e10-data-auth-mode`(只存模式名、不存凭据),下次优先复用。环境变量:`E10_DATA_AUTH_PROBE=1` 强制重新探测、`E10_DATA_AUTH_MODE=<模式名>` 手动指定、`E10_DATA_QUIET=1` 抑制告警(告警只走 stderr)。**没有任何可用凭据时**用 `e10-data login xiaoe-env` 登录(见下节)。
35
+ - 认证:**加解密由 `e10-login` 负责(本 CLI 不参与)**。凭据出口:`weaver-work-cli auth export-weaver-env`(解析 `WEAVER_BASE_URL` / `WEAVER_ETEAMSID` / `WEAVER_COOKIE`,另补一次 `auth status` 取 `userId` / `tenantKey`),**已移除 e10-login 回退**。命中的出口会记入 `~/.e10-cli/.e10-data-auth-mode`(只存模式名、不存凭据),下次优先复用。环境变量:`E10_DATA_AUTH_PROBE=1` 强制重新探测、`E10_DATA_AUTH_MODE=<模式名>` 手动指定、`E10_DATA_QUIET=1` 抑制告警(告警只走 stderr)。**没有任何可用凭据时**用 `e10-data login xiaoe-env` 登录(见下节)。
36
36
  - 版本更新:`npm i -g e10-data@latest`;查看源上最新 `npm view e10-data version`。
37
37
 
38
38
  ## 性能:免凭据命令与凭据缓存(v0.1.17 新增)
@@ -54,9 +54,10 @@ e10-data attend statis 考勤假期余额统计 getAttendInfoStatis(hr-atte
54
54
  | 变量 | 作用 |
55
55
  |---|---|
56
56
  | `E10_DATA_CRED_TTL` | 缓存 TTL 秒数,默认 `300` |
57
- | `E10_DATA_NO_CRED_CACHE=1` | 整体关闭凭据缓存(每次仍直连 e10-login) |
57
+ | `E10_DATA_NO_CRED_CACHE=1` | 整体关闭凭据缓存(每次仍直连 weaver-work-cli) |
58
58
  | `E10_DATA_AUTH_PROBE=1` / `E10_DATA_AUTH_MODE=…` | 存在时**绕过缓存**,强制重新解析凭据 |
59
- | `E10_LOGIN_ENTRY` | 显式指定 `e10-login` 的 JS 入口路径(排障用) |
59
+ | `WEAVER_WORK_CLI_ENTRY` | 显式指定 `weaver-work-cli` 的 JS 入口路径(凭据出口排障用) |
60
+ | `E10_LOGIN_ENTRY` | 显式指定 `e10-login` 的 JS 入口路径(仅 `login xiaoe-env` 落 profile 时用) |
60
61
 
61
62
  > ⚠️ TTL 采用「先到先得」:若已有一个 TTL=300 的持有者在服务,此时以更短的 `E10_DATA_CRED_TTL` 再调用不会立刻缩短它的寿命(新持有者因通道被占而静默退出)。日常使用无需关注。
62
63