@openlibing/openlibing-cli 0.1.10 → 0.1.12

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/README.md CHANGED
@@ -4,7 +4,16 @@ OpenLibing MCP 本地 CLI:把 ops 报告等只读能力包装为 MCP 工具(
4
4
 
5
5
  - **源码仓库**:<https://gitcode.com/w30060144/openlibing-cli>
6
6
  - **npm**:<https://www.npmjs.com/package/@openlibing/openlibing-cli>
7
- - 发布维护:`@openlibing/openlibing-cli`(npmjs latest)
7
+
8
+ ## MCP 工具
9
+
10
+ | 工具 | 说明 |
11
+ | --- | --- |
12
+ | `report_listTemplates` | 查询报告模板:不传参数返回模板概览列表(modelCode / modelName / description);传 `modelCode` 返回该模板完整详情(字段元数据 + 已上报仓库列表) |
13
+ | `report_queryData` | 按模板与条件查询报告数据:支持仓库多选、时间范围、字段过滤与分页(默认 20 条/页,上限 500) |
14
+ | `auth_login` | 触发登录授权(自动弹浏览器,点一次授权即完成);其他工具返回 401 / 提示凭证失效时调用 |
15
+
16
+ > 推荐流程:先 `report_listTemplates` 确认模板与字段,再 `report_queryData` 查询数据(AI 客户端会按此流程自动调用)。
8
17
 
9
18
  ## 特性
10
19
 
@@ -12,10 +21,12 @@ OpenLibing MCP 本地 CLI:把 ops 报告等只读能力包装为 MCP 工具(
12
21
  - **连接即授权**:`mcp start` 启动时自动续期凭证;凭证失效自动弹出浏览器授权,**点一次即完成**
13
22
  - **平台选择**:登录时弹出平台选择页(GitCode / Gitee / GitHub / UniPortal / OpenUBMC),点选后跳转对应平台授权
14
23
  - **凭证安全**:token/refresh/csrf 本地 AES-256-GCM 加密存储(`~/.openlibing-cli/auth.{env}.json`,**按环境分文件**,beta/prod 互不覆盖),不落服务端
15
- - **401 自愈**:工具调用遇 401 自动 refresh 续期重试;续期失败返回明确引导(不依赖外部 cookie)
24
+ - **401 自愈**:工具调用遇 401 自动 refresh 续期重试;续期失败返回明确引导(提示 AI 调用 `auth_login` 工具重新授权,不依赖外部 cookie)
16
25
 
17
26
  ## 安装
18
27
 
28
+ 要求 Node.js ≥ 20.19(或 ≥ 22.12),npx 随 Node 自带。
29
+
19
30
  ```powershell
20
31
  # 直接通过 npx 使用(推荐,AI 客户端配置方式)
21
32
  npx -y @openlibing/openlibing-cli --version
@@ -24,6 +35,8 @@ npx -y @openlibing/openlibing-cli --version
24
35
  npm install -g @openlibing/openlibing-cli
25
36
  ```
26
37
 
38
+ > 提示:若 npx 缓存导致版本滞后,可在包名后加 `@latest` 强制拉取最新版。
39
+
27
40
  ## 客户端配置
28
41
 
29
42
  ### Trae(手动添加 MCP)
@@ -35,7 +48,7 @@ npm install -g @openlibing/openlibing-cli
35
48
  "command": "npx",
36
49
  "args": ["-y", "@openlibing/openlibing-cli", "mcp", "start"],
37
50
  "env": {
38
- "OPENLIBING_ENV": "beta",
51
+ "OPENLIBING_ENV": "prod",
39
52
  "START_MCP_TIMEOUT_MS": "300000"
40
53
  }
41
54
  }
@@ -43,7 +56,7 @@ npm install -g @openlibing/openlibing-cli
43
56
  }
44
57
  ```
45
58
 
46
- > `START_MCP_TIMEOUT_MS` 建议 ≥ 300000(5 分钟),给首次授权留足时间,避免 60 秒默认超时误判失败。
59
+ > `START_MCP_TIMEOUT_MS` / `RUN_MCP_TIMEOUT_MS` 为 **Trae 客户端读取的配置**(不是 CLI 环境变量):前者是 MCP 服务启动超时(默认 60000ms),首次授权建议 ≥ 300000(5 分钟),避免超时误判失败;后者是工具调用超时(默认 60000ms),大查询可适当调大。
47
60
 
48
61
  ### OpenCode(opencode.jsonc)
49
62
 
@@ -53,7 +66,7 @@ npm install -g @openlibing/openlibing-cli
53
66
  "openlibing-report": {
54
67
  "type": "local",
55
68
  "command": ["npx", "-y", "@openlibing/openlibing-cli", "mcp", "start"],
56
- "environment": { "OPENLIBING_ENV": "beta" },
69
+ "environment": { "OPENLIBING_ENV": "prod" },
57
70
  "enabled": true
58
71
  }
59
72
  }
@@ -89,7 +102,7 @@ npx -y @openlibing/openlibing-cli auth logout
89
102
 
90
103
  | 变量 | 默认 | 说明 |
91
104
  | --- | --- | --- |
92
- | `OPENLIBING_ENV` | `beta` | 环境:`beta` / `prod` / `gamma` / `local`,决定网关与 ops 地址 |
105
+ | `OPENLIBING_ENV` | `prod` | 环境:`prod`(建议使用)/ `beta`(开发调试,数据不实时、与正式不一致)/ `local`,决定网关与 ops 地址 |
93
106
  | `OPENLIBING_PLATFORM` | `gitcode` | 默认登录平台(手动模式兜底用;自动模式弹选择页) |
94
107
  | `OPENLIBING_GATEWAY_URL` | 按 env | 覆盖网关地址 |
95
108
  | `OPENLIBING_OPS_URL` | 按 env | 覆盖 ops 报告接口地址 |
@@ -103,12 +116,12 @@ npx -y @openlibing/openlibing-cli auth logout
103
116
  - **环境隔离**:各环境独立登录、独立凭证文件;切换 `OPENLIBING_ENV` 自动读写对应环境凭证,不再互相覆盖
104
117
  - token / csrf 有效期约 30 分钟:`mcp start` 启动和 401 时自动用 refresh token 续期,无需手动干预
105
118
  - refresh token 失效后需重新授权(自动弹浏览器,点一次即可)
106
- - 401 错误信息明确指引运行 `auth login` / `auth refresh`,不会引导获取网关 cookie
119
+ - 401 错误信息明确指引 AI 调用 `auth_login` 工具重新授权(命令行 `auth login` 为备选),不会引导获取网关 cookie
107
120
 
108
121
  ## 发布与维护
109
122
 
110
123
  - 版本发布走项目级 `npm-manage` skill(`publish.py` 解密 npm token 发布,token 不落明文)
111
- - 版本:`0.1.8`(登录平台选择 / 连接即授权 / 401 自愈 / Playwright 自动登录 / 登录态持久化 / 字段命名同步 workflow 与 job 级时间)
124
+ - 当前版本:`0.1.11`(0.1.9 凭证按环境分文件 / 0.1.10 401 引导调用 auth_login / 0.1.11 默认环境改为 prod;更早特性:登录平台选择、连接即授权、Playwright 自动登录、登录态持久化)
112
125
  - 包名:`@openlibing/openlibing-cli`(原 `@openlibing/mcp-cli` 已 deprecated,迁移说明见下)
113
126
 
114
127
  ### 迁移说明(mcp-cli → openlibing-cli)
@@ -135,4 +148,6 @@ npm test # vitest(握手/凭证/工具注册)
135
148
  | `src/auth/login.ts` | 插件登录 / 自动授权 / 凭证续期 / MCP 启动鉴权 |
136
149
  | `src/auth/store.ts` | 凭证 AES-256-GCM 本地加密存储 |
137
150
  | `src/client/reportApi.ts` | 报告接口客户端(401 自动续期 + 引导错误) |
151
+ | `src/tools/` | MCP 工具定义(name / description / schema / handler) |
152
+ | `src/config/env.ts` | 环境解析(网关 / ops 地址、默认 prod) |
138
153
  | `src/mcp/server.ts` | MCP stdio server 组装 |
@@ -1,6 +1,7 @@
1
1
  import { login, logout, fingerprint } from "../auth/login.js";
2
2
  import { refreshToken } from "../auth/refresh.js";
3
3
  import { loadAuth, authFilePath } from "../auth/store.js";
4
+ import { env } from "../config/env.js";
4
5
  export function authCommand(program) {
5
6
  const cmd = program
6
7
  .command("auth")
@@ -12,7 +13,7 @@ export function authCommand(program) {
12
13
  .action(async (opts) => {
13
14
  try {
14
15
  const auth = await login(!!opts.manual);
15
- console.log(`登录成功:${auth.accountName ?? "unknown"}(fingerprint=${fingerprint(auth.accountId)})`);
16
+ console.log(`登录成功:${auth.accountName ?? "unknown"}(环境:${env.env},fingerprint=${fingerprint(auth.accountId)})`);
16
17
  }
17
18
  catch (err) {
18
19
  console.error(`登录失败:${err.message}`);
@@ -23,6 +24,7 @@ export function authCommand(program) {
23
24
  .command("status")
24
25
  .description("查看登录状态与凭证位置")
25
26
  .action(() => {
27
+ console.log(`当前环境:${env.env}`);
26
28
  const auth = loadAuth();
27
29
  if (!auth) {
28
30
  console.log("未登录。执行 openlibing-cli auth login 完成授权。");
@@ -37,7 +39,7 @@ export function authCommand(program) {
37
39
  .description("清除本地凭证")
38
40
  .action(() => {
39
41
  logout();
40
- console.log("已清除本地凭证。");
42
+ console.log(`已清除本地凭证(环境:${env.env})。`);
41
43
  });
42
44
  cmd
43
45
  .command("refresh")
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,WAAW,CAAC,CAAC;IAE5B,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAA0B,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAS,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,SAAS,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,QAAQ,YAAY,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAS,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,WAAW,CAAC,CAAC;IAE5B,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAA0B,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,GAAG,CAAC,GAAG,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAS,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,SAAS,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,QAAQ,YAAY,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAS,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,6 +1,9 @@
1
1
  /**
2
- * 环境配置:beta/prod 网关与 ops REST 地址、插件登录参数。
2
+ * 环境配置:prod/beta 网关与 ops REST 地址、插件登录参数。
3
3
  * 插件链路复用 gateway 现有插件凭证机制(LoginController /plugin/*)。
4
+ *
5
+ * 默认环境为 prod(面向使用者的主环境,与 MCP 客户端配置保持一致);
6
+ * CLI 手动调试可用 OPENLIBING_ENV=beta 覆盖。
4
7
  */
5
8
  export interface EnvConfig {
6
9
  /** 环境标识:local / beta / prod */
@@ -17,11 +17,15 @@ function gatewayHost(env) {
17
17
  return "http://localhost:8073";
18
18
  }
19
19
  }
20
+ /** 默认环境:prod(使用者主环境);未设置 OPENLIBING_ENV 时生效 */
21
+ const DEFAULT_ENV = "prod";
22
+ function resolveEnv() {
23
+ return process.env.OPENLIBING_ENV ?? DEFAULT_ENV;
24
+ }
20
25
  export const env = {
21
- env: process.env.OPENLIBING_ENV ?? "beta",
22
- gatewayBaseUrl: process.env.OPENLIBING_GATEWAY_URL ?? gatewayHost(process.env.OPENLIBING_ENV ?? "beta"),
23
- opsBaseUrl: process.env.OPENLIBING_OPS_URL ??
24
- `${gatewayHost(process.env.OPENLIBING_ENV ?? "beta")}/openlibing-ops`,
26
+ env: resolveEnv(),
27
+ gatewayBaseUrl: process.env.OPENLIBING_GATEWAY_URL ?? gatewayHost(resolveEnv()),
28
+ opsBaseUrl: process.env.OPENLIBING_OPS_URL ?? `${gatewayHost(resolveEnv())}/openlibing-ops`,
25
29
  pluginClient: process.env.OPENLIBING_PLUGIN_CLIENT ?? "agent_arena",
26
30
  pluginId: process.env.OPENLIBING_PLUGIN_ID ?? "openlibing-cli",
27
31
  platform: resolvePlatform(process.env.OPENLIBING_PLATFORM),
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAmBA,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAEnF,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,CAAC,IAAK,SAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,CAA0B,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,oCAAoC,CAAC;QAC9C,KAAK,MAAM;YACT,OAAO,qCAAqC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,sCAAsC,CAAC;QAChD;YACE,OAAO,uBAAuB,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAc;IAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM;IACzC,cAAc,EACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC;IACzF,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC9B,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,iBAAiB;IACvE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,aAAa;IACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB;IAC9D,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;CAC3D,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAsBA,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAEnF,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,CAAC,IAAK,SAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,CAA0B,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,oCAAoC,CAAC;QAC9C,KAAK,MAAM;YACT,OAAO,qCAAqC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,sCAAsC,CAAC;QAChD;YACE,OAAO,uBAAuB,CAAC;IACnC,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAc;IAC5B,GAAG,EAAE,UAAU,EAAE;IACjB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;IAC/E,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC,iBAAiB;IACjF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,aAAa;IACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB;IAC9D,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;CAC3D,CAAC"}
@@ -1,2 +1,12 @@
1
+ /**
2
+ * report 功能组:查询测试报告模板。
3
+ * 渐进式披露:默认返回模板概览列表(code/名称/描述);传 modelCode 返回单模板完整详情
4
+ * (字段元数据 + 仓库列表),避免模板较多时全量字段一次性返回、不便查看。
5
+ * 对齐 ops ReportMcpTools#listReportTemplates(REST 消费面 / MCP 工具同源)。
6
+ */
7
+ import { z } from "zod";
1
8
  import { type ToolDefinition } from "../types.js";
9
+ export declare const listTemplatesSchema: {
10
+ modelCode: z.ZodOptional<z.ZodString>;
11
+ };
2
12
  export declare const listTemplatesTool: ToolDefinition;
@@ -1,16 +1,42 @@
1
1
  /**
2
- * report 功能组:查询测试报告模板列表。
2
+ * report 功能组:查询测试报告模板。
3
+ * 渐进式披露:默认返回模板概览列表(code/名称/描述);传 modelCode 返回单模板完整详情
4
+ * (字段元数据 + 仓库列表),避免模板较多时全量字段一次性返回、不便查看。
3
5
  * 对齐 ops ReportMcpTools#listReportTemplates(REST 消费面 / MCP 工具同源)。
4
6
  */
7
+ import { z } from "zod";
5
8
  import { listReportTemplates } from "../../client/reportApi.js";
6
9
  import { textResult } from "../types.js";
10
+ export const listTemplatesSchema = {
11
+ modelCode: z
12
+ .string()
13
+ .optional()
14
+ .describe("模板 code(可选):传入时返回该模板完整详情(字段元数据 columns 与仓库列表 repoUrls);不传则返回全部模板的概览列表"),
15
+ };
7
16
  export const listTemplatesTool = {
8
17
  name: "report_listTemplates",
9
- description: "查询测试报告模板列表,返回模板 code、模板名、字段元数据(列名/注释/类型/必填)与已上报数据的仓库地址列表",
10
- schema: {},
11
- handler: async () => {
18
+ description: "查询测试报告模板。不传 modelCode:返回模板概览列表(每项含 modelCode/modelName/description)," +
19
+ "模板较多时先看概览确认模板 code;传入 modelCode:返回该模板完整详情(字段元数据 columns、已上报仓库列表 repoUrls)," +
20
+ "用于确认可用字段与查询范围后再调用 report_queryData 查数据。",
21
+ schema: listTemplatesSchema,
22
+ handler: async (args) => {
12
23
  const templates = await listReportTemplates();
13
- return textResult(templates);
24
+ const modelCode = args.modelCode?.trim();
25
+ if (!modelCode) {
26
+ return textResult(templates.map((t) => ({
27
+ modelCode: t.modelCode,
28
+ modelName: t.modelName,
29
+ description: t.description ?? "",
30
+ })));
31
+ }
32
+ const target = templates.find((t) => t.modelCode === modelCode);
33
+ if (!target) {
34
+ return textResult({
35
+ error: `未找到模板:${modelCode}`,
36
+ availableModelCodes: templates.map((t) => t.modelCode),
37
+ });
38
+ }
39
+ return textResult(target);
14
40
  },
15
41
  };
16
42
  //# sourceMappingURL=listTemplates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listTemplates.js","sourceRoot":"","sources":["../../../src/tools/report/listTemplates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,0DAA0D;IAC5D,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"listTemplates.js","sourceRoot":"","sources":["../../../src/tools/report/listTemplates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE,CACxE;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,sEAAsE;QACtE,4EAA4E;QAC5E,yCAAyC;IAC3C,MAAM,EAAE,mBAAmB;IAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAI,IAAI,CAAC,SAAgC,EAAE,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,UAAU,CACf,SAAS,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;gBACpC,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;aACjC,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,UAAU,CAAC;gBAChB,KAAK,EAAE,SAAS,SAAS,EAAE;gBAC3B,mBAAmB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openlibing/openlibing-cli",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "OpenLibing MCP 本地 CLI:把 ops 报告等只读能力包装为 MCP 工具(stdio 传输)",
5
5
  "type": "module",
6
6
  "bin": {