@openlibing/openlibing-cli 0.1.13 → 0.1.14
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 +17 -0
- package/README.md +12 -4
- package/dist/commands/auth.js +3 -0
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -0
- package/dist/commands/mcp.js +13 -0
- package/dist/commands/mcp.js.map +1 -1
- package/dist/mcp/registry.js +2 -1
- package/dist/mcp/registry.js.map +1 -1
- package/dist/tools/cli/version.d.ts +4 -0
- package/dist/tools/cli/version.js +38 -0
- package/dist/tools/cli/version.js.map +1 -0
- package/dist/updateCheck.d.ts +18 -0
- package/dist/updateCheck.js +100 -0
- package/dist/updateCheck.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +6 -3
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@
|
|
|
5
5
|
|
|
6
6
|
格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [SemVer](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [0.1.14] - 2026-10-29
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- 新增 MCP 工具 `cli_version`:查询当前运行的 CLI 版本并检查是否有新版本(24h 节流、失败静默)
|
|
13
|
+
- `mcp start` 启动横幅(stderr)打印 CLI 版本,并后台检查更新(有新版时提示改用 `@latest` 升级)
|
|
14
|
+
- `mcp list` / `auth status` 展示 CLI 版本(`--json` 输出含 `cliVersion` 字段)
|
|
15
|
+
- 环境变量 `OPENLIBING_NO_UPDATE_NOTIFIER=1`:关闭更新检查(MCP 客户端配置 `env` 中设置)
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- 客户端配置示例改用 `@openlibing/openlibing-cli@latest`(固定版本会导致升级后仍运行旧版)
|
|
20
|
+
|
|
21
|
+
### Docs
|
|
22
|
+
|
|
23
|
+
- README 补充更新检查开关说明与"如何查询当前实际运行版本"指引
|
|
24
|
+
|
|
8
25
|
## [0.1.13] - 2026-10-29
|
|
9
26
|
|
|
10
27
|
### Added
|
package/README.md
CHANGED
|
@@ -12,12 +12,14 @@ OpenLibing MCP 本地 CLI:把 ops 报告等只读能力包装为 MCP 工具(
|
|
|
12
12
|
| `report_listTemplates` | 查询报告模板:不传参数返回模板概览列表(modelCode / modelName / description);传 `modelCode` 返回该模板完整详情(字段元数据 + 已上报仓库列表) |
|
|
13
13
|
| `report_queryData` | 按模板与条件查询报告数据:支持仓库多选、时间范围、字段过滤与分页(默认 20 条/页,上限 500) |
|
|
14
14
|
| `auth_login` | 触发登录授权(自动弹浏览器,点一次授权即完成);其他工具返回 401 / 提示凭证失效时调用 |
|
|
15
|
+
| `cli_version` | 查询当前运行的 CLI 版本并检查是否有新版本(24h 节流;用户问版本 / 是否最新 / 如何升级时调用) |
|
|
15
16
|
|
|
16
17
|
> 推荐流程:先 `report_listTemplates` 确认模板与字段,再 `report_queryData` 查询数据(AI 客户端会按此流程自动调用)。
|
|
17
18
|
|
|
18
19
|
## 特性
|
|
19
20
|
|
|
20
|
-
- **MCP 工具**(stdio):`report_listTemplates` / `report_queryData` / `auth_login`
|
|
21
|
+
- **MCP 工具**(stdio):`report_listTemplates` / `report_queryData` / `auth_login` / `cli_version`
|
|
22
|
+
- **版本可见与更新提示**:`mcp start` 启动横幅与 `auth status` 展示 CLI 版本;`cli_version` 工具可查询是否有新版;启动时后台检查更新(24h 节流,`OPENLIBING_NO_UPDATE_NOTIFIER=1` 可关)
|
|
21
23
|
- **连接即授权**:`mcp start` 启动时自动续期凭证;凭证失效自动弹出浏览器授权,**点一次即完成**
|
|
22
24
|
- **平台选择**:登录时弹出平台选择页(GitCode / Gitee / GitHub / UniPortal / OpenUBMC),点选后跳转对应平台授权
|
|
23
25
|
- **凭证安全**:token/refresh/csrf 本地 AES-256-GCM 加密存储(`~/.openlibing-cli/auth.{env}.json`,**按环境分文件**,beta/prod 互不覆盖),不落服务端
|
|
@@ -46,7 +48,7 @@ npm install -g @openlibing/openlibing-cli
|
|
|
46
48
|
"mcpServers": {
|
|
47
49
|
"openlibing-report": {
|
|
48
50
|
"command": "npx",
|
|
49
|
-
"args": ["-y", "@openlibing/openlibing-cli", "mcp", "start"],
|
|
51
|
+
"args": ["-y", "@openlibing/openlibing-cli@latest", "mcp", "start"],
|
|
50
52
|
"env": {
|
|
51
53
|
"OPENLIBING_ENV": "prod",
|
|
52
54
|
"START_MCP_TIMEOUT_MS": "300000"
|
|
@@ -56,7 +58,9 @@ npm install -g @openlibing/openlibing-cli
|
|
|
56
58
|
}
|
|
57
59
|
```
|
|
58
60
|
|
|
59
|
-
>
|
|
61
|
+
> - 包名后缀 `@latest` 让 npx 每次解析最新版本(推荐);固定版本会导致升级后仍运行旧版。
|
|
62
|
+
> - `OPENLIBING_NO_UPDATE_NOTIFIER=1`:加到 `env` 中可关闭启动时的版本更新检查(默认开启:24h 只查一次、后台异步、失败静默)。
|
|
63
|
+
> - `START_MCP_TIMEOUT_MS` / `RUN_MCP_TIMEOUT_MS` 为 **Trae 客户端读取的配置**(不是 CLI 环境变量):前者是 MCP 服务启动超时(默认 60000ms),首次授权建议 ≥ 300000(5 分钟),避免超时误判失败;后者是工具调用超时(默认 60000ms),大查询可适当调大。
|
|
60
64
|
|
|
61
65
|
### OpenCode(opencode.jsonc)
|
|
62
66
|
|
|
@@ -65,7 +69,7 @@ npm install -g @openlibing/openlibing-cli
|
|
|
65
69
|
"mcp": {
|
|
66
70
|
"openlibing-report": {
|
|
67
71
|
"type": "local",
|
|
68
|
-
"command": ["npx", "-y", "@openlibing/openlibing-cli", "mcp", "start"],
|
|
72
|
+
"command": ["npx", "-y", "@openlibing/openlibing-cli@latest", "mcp", "start"],
|
|
69
73
|
"environment": { "OPENLIBING_ENV": "prod" },
|
|
70
74
|
"enabled": true
|
|
71
75
|
}
|
|
@@ -73,6 +77,8 @@ npm install -g @openlibing/openlibing-cli
|
|
|
73
77
|
}
|
|
74
78
|
```
|
|
75
79
|
|
|
80
|
+
> 想确认当前实际运行的版本:让 AI 调用 `cli_version` 工具,或查看 `mcp start` 的启动日志(首行打印版本横幅)。
|
|
81
|
+
|
|
76
82
|
## 登录(点一次授权)
|
|
77
83
|
|
|
78
84
|
MCP 连接时若本地无有效凭证,会自动弹出浏览器:
|
|
@@ -111,6 +117,7 @@ npx -y @openlibing/openlibing-cli auth logout
|
|
|
111
117
|
| `OPENLIBING_PLUGIN_CLIENT` | `agent_arena` | 插件登录 client(须在网关白名单) |
|
|
112
118
|
| `OPENLIBING_PLUGIN_ID` | `openlibing-cli` | 插件标识 |
|
|
113
119
|
| `OPENLIBING_AUTH_FILE` | `~/.openlibing-cli/auth.{env}.json` | 覆盖凭证文件路径(测试隔离用) |
|
|
120
|
+
| `OPENLIBING_NO_UPDATE_NOTIFIER` | 未设置(开启检查) | 设为 `1` 关闭启动时的 npm 版本更新检查(结果缓存 24h,见 `~/.openlibing-cli/update-check.json`) |
|
|
114
121
|
|
|
115
122
|
## 凭证与安全
|
|
116
123
|
|
|
@@ -150,6 +157,7 @@ npm test # vitest(握手/凭证/工具注册)
|
|
|
150
157
|
| `src/auth/login.ts` | 插件登录 / 自动授权 / 凭证续期 / MCP 启动鉴权 |
|
|
151
158
|
| `src/auth/store.ts` | 凭证 AES-256-GCM 本地加密存储 |
|
|
152
159
|
| `src/auth/authedRequest.ts` | 认证请求入口:预刷新 + 401 续期重试 + 结构化错误(业务 API 统一经此) |
|
|
160
|
+
| `src/updateCheck.ts` | 版本更新检查(npm registry、24h 节流缓存、静默失败、可开关) |
|
|
153
161
|
| `src/client/reportApi.ts` | 报告接口客户端 |
|
|
154
162
|
| `src/tools/` | MCP 工具定义(name / description / schema / handler) |
|
|
155
163
|
| `src/config/env.ts` | 环境解析(网关 / ops 地址、默认 prod) |
|
package/dist/commands/auth.js
CHANGED
|
@@ -2,6 +2,7 @@ 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
4
|
import { env } from "../config/env.js";
|
|
5
|
+
import { APP_VERSION } from "../version.js";
|
|
5
6
|
import { EXIT_AUTH } from "../exitCodes.js";
|
|
6
7
|
/** 剩余有效时间的人类可读描述(基于本地时钟差值,仅作展示) */
|
|
7
8
|
function remainingText(iso) {
|
|
@@ -40,6 +41,7 @@ export function authCommand(program) {
|
|
|
40
41
|
if (opts.json) {
|
|
41
42
|
const payload = {
|
|
42
43
|
env: env.env,
|
|
44
|
+
cliVersion: APP_VERSION,
|
|
43
45
|
loggedIn: auth !== null,
|
|
44
46
|
accountName: auth?.accountName,
|
|
45
47
|
accountId: auth?.accountId,
|
|
@@ -56,6 +58,7 @@ export function authCommand(program) {
|
|
|
56
58
|
return;
|
|
57
59
|
}
|
|
58
60
|
console.log(`当前环境:${env.env}`);
|
|
61
|
+
console.log(`CLI 版本:${APP_VERSION}`);
|
|
59
62
|
if (!auth) {
|
|
60
63
|
console.log("未登录。执行 openlibing-cli auth login 完成授权。");
|
|
61
64
|
process.exitCode = EXIT_AUTH;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.d.ts
CHANGED
package/dist/commands/mcp.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { startStdioServer } from "../mcp/server.js";
|
|
2
2
|
import { tools } from "../mcp/registry.js";
|
|
3
3
|
import { ensureAuthenticated } from "../auth/login.js";
|
|
4
|
+
import { env } from "../config/env.js";
|
|
5
|
+
import { APP_VERSION } from "../version.js";
|
|
6
|
+
import { checkForUpdate } from "../updateCheck.js";
|
|
4
7
|
import { EXIT_AUTH } from "../exitCodes.js";
|
|
5
8
|
export function mcpCommand(program) {
|
|
6
9
|
const cmd = program
|
|
@@ -10,6 +13,8 @@ export function mcpCommand(program) {
|
|
|
10
13
|
.command("start")
|
|
11
14
|
.description("启动 MCP stdio server(自动完成授权:已有凭证自动续期,无凭证弹出浏览器点一次授权)")
|
|
12
15
|
.action(async () => {
|
|
16
|
+
// 版本横幅:让客户端日志中能直接确认本次运行的实际版本(npx 缓存/配置差异时尤为重要)
|
|
17
|
+
console.error(`[mcp] openlibing-cli v${APP_VERSION} 启动(环境 ${env.env},${tools.length} 个工具)`);
|
|
13
18
|
try {
|
|
14
19
|
// 连接即授权:凭证续期/授权失败则退出,提示用户处理,避免无凭证空跑
|
|
15
20
|
await ensureAuthenticated();
|
|
@@ -21,12 +26,20 @@ export function mcpCommand(program) {
|
|
|
21
26
|
process.exitCode = EXIT_AUTH;
|
|
22
27
|
return;
|
|
23
28
|
}
|
|
29
|
+
// 后台检查更新(fire-and-forget:不阻塞启动;24h 节流;失败静默)
|
|
30
|
+
void checkForUpdate().then((info) => {
|
|
31
|
+
if (info?.hasUpdate) {
|
|
32
|
+
console.error(`[mcp] 提示:openlibing-cli 有新版本 v${info.latest}(当前 v${info.current})。` +
|
|
33
|
+
"建议 MCP 客户端配置中的包名使用 @latest 并重连以升级;也可调用 cli_version 工具查看详情");
|
|
34
|
+
}
|
|
35
|
+
});
|
|
24
36
|
await startStdioServer();
|
|
25
37
|
});
|
|
26
38
|
cmd
|
|
27
39
|
.command("list")
|
|
28
40
|
.description("列出已注册的 MCP 工具")
|
|
29
41
|
.action(() => {
|
|
42
|
+
console.log(`openlibing-cli v${APP_VERSION}(${tools.length} 个工具):`);
|
|
30
43
|
for (const tool of tools) {
|
|
31
44
|
console.log(`${tool.name}\t${tool.description}`);
|
|
32
45
|
}
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,UAAU,CAAC,CAAC;IAE3B,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,+CAA+C;QAC/C,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,UAAU,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC;QAC5F,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,mBAAmB,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gBAAiB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,+CAA+C;YAC/C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,4CAA4C;QAC5C,KAAK,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CACX,iCAAiC,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC,OAAO,IAAI;oBAClE,2DAA2D,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,IAAI,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/mcp/registry.js
CHANGED
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { reportTools } from "../tools/report/index.js";
|
|
6
6
|
import { authTools } from "../tools/auth/login.js";
|
|
7
|
-
|
|
7
|
+
import { cliTools } from "../tools/cli/version.js";
|
|
8
|
+
export const tools = [...reportTools, ...authTools, ...cliTools];
|
|
8
9
|
//# sourceMappingURL=registry.js.map
|
package/dist/mcp/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,CAAC,MAAM,KAAK,GAAqB,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,CAAC,MAAM,KAAK,GAAqB,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli 功能组:cli_version —— 查询当前运行的 CLI/MCP 服务版本,并检查是否有新版本。
|
|
3
|
+
* 场景:MCP 使用中用户/AI 无法直接得知 npx 拉起的实际版本(配置缓存差异),
|
|
4
|
+
* 也无法感知版本落后;本工具提供单一查询入口(24h 节流,失败静默)。
|
|
5
|
+
*/
|
|
6
|
+
import { env } from "../../config/env.js";
|
|
7
|
+
import { APP_VERSION } from "../../version.js";
|
|
8
|
+
import { checkForUpdate, updateCheckDisabled } from "../../updateCheck.js";
|
|
9
|
+
import { textResult } from "../types.js";
|
|
10
|
+
export const cliVersionTool = {
|
|
11
|
+
name: "cli_version",
|
|
12
|
+
description: "查询当前运行的 openlibing-cli 版本,并检查是否有新版本可用(检查结果缓存 24 小时,网络失败时静默)。" +
|
|
13
|
+
"当用户询问 CLI 版本 / 是否最新 / 如何升级,或怀疑本地版本过旧导致行为不一致时调用。",
|
|
14
|
+
schema: {},
|
|
15
|
+
handler: async () => {
|
|
16
|
+
const update = await checkForUpdate();
|
|
17
|
+
const payload = {
|
|
18
|
+
version: APP_VERSION,
|
|
19
|
+
env: env.env,
|
|
20
|
+
/** ok=已检查;disabled=用户关闭了更新检查;unavailable=网络不可达/超时 */
|
|
21
|
+
updateCheck: updateCheckDisabled() ? "disabled" : update ? "ok" : "unavailable",
|
|
22
|
+
};
|
|
23
|
+
if (update) {
|
|
24
|
+
payload.latestVersion = update.latest;
|
|
25
|
+
payload.hasUpdate = update.hasUpdate;
|
|
26
|
+
}
|
|
27
|
+
if (update?.hasUpdate) {
|
|
28
|
+
payload.updateHint =
|
|
29
|
+
`检测到新版本 v${update.latest}(当前 v${update.current})。升级方式:` +
|
|
30
|
+
"MCP 客户端配置中的包名使用 @openlibing/openlibing-cli@latest 并重连(npx 自动拉取最新版);" +
|
|
31
|
+
"或在终端运行 npx -y @openlibing/openlibing-cli@latest --version 验证。";
|
|
32
|
+
}
|
|
33
|
+
return textResult(payload);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
/** cli 功能组工具列表(供 registry 聚合) */
|
|
37
|
+
export const cliTools = [cliVersionTool];
|
|
38
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/tools/cli/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,8DAA8D;QAC9D,iDAAiD;IACnD,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,MAAM,OAAO,GAA4B;YACvC,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,qDAAqD;YACrD,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;SAChF,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;YACtC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,UAAU;gBAChB,WAAW,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,OAAO,SAAS;oBACvD,qEAAqE;oBACrE,+DAA+D,CAAC;QACpE,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAqB,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface UpdateInfo {
|
|
2
|
+
/** 当前版本 */
|
|
3
|
+
current: string;
|
|
4
|
+
/** registry 上的最新版本 */
|
|
5
|
+
latest: string;
|
|
6
|
+
/** 是否有新版本可用 */
|
|
7
|
+
hasUpdate: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** 更新检查是否被禁用(OPENLIBING_NO_UPDATE_NOTIFIER=1) */
|
|
10
|
+
export declare function updateCheckDisabled(): boolean;
|
|
11
|
+
/** 比较 x.y.z 版本号:a > b 返回正数,相等返回 0(按数字段比较,非字符串比较) */
|
|
12
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
13
|
+
/**
|
|
14
|
+
* 检查是否有新版本可用(24h 节流):
|
|
15
|
+
* - 禁用 / 网络失败 → null(调用方按“无法判断”静默处理)
|
|
16
|
+
* - 其余返回 UpdateInfo(hasUpdate 表示是否落后)
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkForUpdate(): Promise<UpdateInfo | null>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 版本更新检查(借鉴 gh 的 24h 节流 + lark-cli 的缓存优先策略):
|
|
3
|
+
* - 检查源:npm registry 的 latest 版本(包名从 package.json 动态读取)
|
|
4
|
+
* - 节流:结果缓存 24 小时(~/.openlibing-cli/update-check.json),避免频繁网络请求
|
|
5
|
+
* - 静默失败:网络错误 / 超时(3s)返回 null,不影响调用方主流程
|
|
6
|
+
* - 开关:OPENLIBING_NO_UPDATE_NOTIFIER=1 完全禁用检查(MCP 客户端配置 env 中设置)
|
|
7
|
+
* - 测试隔离:OPENLIBING_UPDATE_CHECK_FILE 可覆盖缓存文件路径
|
|
8
|
+
* 注意:环境变量均在调用时读取(而非模块加载时),便于测试覆盖与运行期生效。
|
|
9
|
+
*/
|
|
10
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { homedir } from "node:os";
|
|
12
|
+
import { dirname, join } from "node:path";
|
|
13
|
+
import { APP_VERSION, PKG_NAME } from "./version.js";
|
|
14
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60_000;
|
|
15
|
+
const FETCH_TIMEOUT_MS = 3_000;
|
|
16
|
+
function cacheFilePath() {
|
|
17
|
+
return (process.env.OPENLIBING_UPDATE_CHECK_FILE ??
|
|
18
|
+
join(homedir(), ".openlibing-cli", "update-check.json"));
|
|
19
|
+
}
|
|
20
|
+
/** 更新检查是否被禁用(OPENLIBING_NO_UPDATE_NOTIFIER=1) */
|
|
21
|
+
export function updateCheckDisabled() {
|
|
22
|
+
return !!process.env.OPENLIBING_NO_UPDATE_NOTIFIER;
|
|
23
|
+
}
|
|
24
|
+
function readCache() {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(readFileSync(cacheFilePath(), "utf8"));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function writeCache(state) {
|
|
33
|
+
try {
|
|
34
|
+
const file = cacheFilePath();
|
|
35
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
36
|
+
writeFileSync(file, JSON.stringify(state, null, 2));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// 缓存写入失败不影响主流程(下次调用重新检查)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** 比较 x.y.z 版本号:a > b 返回正数,相等返回 0(按数字段比较,非字符串比较) */
|
|
43
|
+
export function compareVersions(a, b) {
|
|
44
|
+
const pa = a.split(".").map((n) => parseInt(n, 10) || 0);
|
|
45
|
+
const pb = b.split(".").map((n) => parseInt(n, 10) || 0);
|
|
46
|
+
for (let i = 0; i < 3; i++) {
|
|
47
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
48
|
+
if (diff !== 0)
|
|
49
|
+
return diff;
|
|
50
|
+
}
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
function toInfo(latest) {
|
|
54
|
+
return {
|
|
55
|
+
current: APP_VERSION,
|
|
56
|
+
latest,
|
|
57
|
+
hasUpdate: compareVersions(latest, APP_VERSION) > 0,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** 从 npm registry 拉取 latest 版本号(超时/失败返回 null) */
|
|
61
|
+
async function fetchLatestVersion() {
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
64
|
+
try {
|
|
65
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(PKG_NAME)}/latest`;
|
|
66
|
+
const resp = await fetch(url, {
|
|
67
|
+
signal: controller.signal,
|
|
68
|
+
headers: { Accept: "application/json" },
|
|
69
|
+
});
|
|
70
|
+
if (!resp.ok)
|
|
71
|
+
return null;
|
|
72
|
+
const data = (await resp.json());
|
|
73
|
+
return typeof data.version === "string" ? data.version : null;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 检查是否有新版本可用(24h 节流):
|
|
84
|
+
* - 禁用 / 网络失败 → null(调用方按“无法判断”静默处理)
|
|
85
|
+
* - 其余返回 UpdateInfo(hasUpdate 表示是否落后)
|
|
86
|
+
*/
|
|
87
|
+
export async function checkForUpdate() {
|
|
88
|
+
if (updateCheckDisabled())
|
|
89
|
+
return null;
|
|
90
|
+
const cached = readCache();
|
|
91
|
+
if (cached && Date.now() - Date.parse(cached.checkedAt) < CHECK_INTERVAL_MS) {
|
|
92
|
+
return toInfo(cached.latestVersion);
|
|
93
|
+
}
|
|
94
|
+
const latest = await fetchLatestVersion();
|
|
95
|
+
if (!latest)
|
|
96
|
+
return null;
|
|
97
|
+
writeCache({ checkedAt: new Date().toISOString(), latestVersion: latest });
|
|
98
|
+
return toInfo(latest);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=updateCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../src/updateCheck.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 供 CLI --version
|
|
2
|
+
* 应用元信息:统一从 package.json 动态读取,
|
|
3
|
+
* 供 CLI --version、MCP ServerInfo.version、更新检查(包名拼 registry URL)共用,
|
|
4
|
+
* 避免硬编码导致版本/包名漂移。
|
|
4
5
|
*/
|
|
5
6
|
import { readFileSync } from "node:fs";
|
|
6
|
-
|
|
7
|
+
const PKG = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
8
|
+
export const APP_VERSION = PKG.version;
|
|
9
|
+
export const PKG_NAME = PKG.name;
|
|
7
10
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC7B,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAW,GAAG,CAAC,OAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAW,GAAG,CAAC,IAAI,CAAC"}
|