@jesonliu/lark-claudecode-bridge 0.11.0 → 0.13.0
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 +81 -46
- package/assets/web/index.html +1416 -0
- package/config.example.yaml +22 -2
- package/dist/auth-precheck.d.ts +5 -2
- package/dist/auth-precheck.js +8 -2
- package/dist/auth-precheck.js.map +1 -1
- package/dist/bin/lcb.js +32 -3
- package/dist/bin/lcb.js.map +1 -1
- package/dist/claude-config.d.ts +19 -0
- package/dist/claude-config.js +76 -0
- package/dist/claude-config.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +1 -0
- package/dist/cli/setup-wizard.js +4 -0
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/config-defaults.d.ts +4 -0
- package/dist/config-defaults.js +15 -0
- package/dist/config-defaults.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +190 -6
- package/dist/config.js.map +1 -1
- package/dist/executor/permission-gate.d.ts +8 -1
- package/dist/executor/permission-gate.js +21 -14
- package/dist/executor/permission-gate.js.map +1 -1
- package/dist/executor/plugin-discovery.d.ts +11 -0
- package/dist/executor/plugin-discovery.js +28 -0
- package/dist/executor/plugin-discovery.js.map +1 -1
- package/dist/executor/plugin-manager.d.ts +19 -0
- package/dist/executor/plugin-manager.js +84 -0
- package/dist/executor/plugin-manager.js.map +1 -0
- package/dist/feishu/slash-commands.d.ts +77 -0
- package/dist/feishu/slash-commands.js +188 -0
- package/dist/feishu/slash-commands.js.map +1 -0
- package/dist/index.js +80 -17
- package/dist/index.js.map +1 -1
- package/dist/session/commands.d.ts +16 -1
- package/dist/session/commands.js +33 -1
- package/dist/session/commands.js.map +1 -1
- package/dist/session/plugin-command.d.ts +14 -0
- package/dist/session/plugin-command.js +110 -0
- package/dist/session/plugin-command.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/util/open-browser.d.ts +1 -0
- package/dist/util/open-browser.js +20 -0
- package/dist/util/open-browser.js.map +1 -0
- package/dist/util/server-url.d.ts +3 -0
- package/dist/util/server-url.js +10 -0
- package/dist/util/server-url.js.map +1 -0
- package/dist/web/config-api.d.ts +50 -0
- package/dist/web/config-api.js +184 -0
- package/dist/web/config-api.js.map +1 -0
- package/dist/web/lifecycle.d.ts +52 -0
- package/dist/web/lifecycle.js +167 -0
- package/dist/web/lifecycle.js.map +1 -0
- package/dist/web/model-list.d.ts +36 -0
- package/dist/web/model-list.js +101 -0
- package/dist/web/model-list.js.map +1 -0
- package/dist/web/server.d.ts +22 -0
- package/dist/web/server.js +543 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/update.d.ts +26 -0
- package/dist/web/update.js +64 -0
- package/dist/web/update.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// 版本检查与自更新:统一走 npm CLI(npm view / npm install -g),天然尊重用户
|
|
2
|
+
// .npmrc 的 registry 镜像与代理配置(国内 npmmirror 场景),不做直连 registry.npmjs.org
|
|
3
|
+
import { execFile } from 'node:child_process';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { sep } from 'node:path';
|
|
6
|
+
import { VERSION } from '../version.js';
|
|
7
|
+
export const PKG_NAME = '@jesonliu/lark-claudecode-bridge';
|
|
8
|
+
/** win32 下 npm 是 npm.cmd(execFile 无 PATHEXT 处理),走 cmd /c——open-browser.ts 同款先例 */
|
|
9
|
+
export function npmCommand() {
|
|
10
|
+
return process.platform === 'win32'
|
|
11
|
+
? { file: 'cmd', prefixArgs: ['/c', 'npm'] }
|
|
12
|
+
: { file: 'npm', prefixArgs: [] };
|
|
13
|
+
}
|
|
14
|
+
/** 纯函数(可测):从 `npm view <pkg> version` 输出解析版本号——取最后一行非空并去 json 引号(旧 npm 习惯) */
|
|
15
|
+
export function parseLatestVersion(out) {
|
|
16
|
+
return (out.split(/\r?\n/).filter(Boolean).pop() ?? '').trim().replace(/^"|"$/g, '');
|
|
17
|
+
}
|
|
18
|
+
/** 纯函数(可测):三段语义化版本比较,latest 严格大于 current 才算有更新(镜像落后于本地时不算) */
|
|
19
|
+
export function hasNewerVersion(latest, current) {
|
|
20
|
+
const pa = latest.split('.').map(Number);
|
|
21
|
+
const pb = current.split('.').map(Number);
|
|
22
|
+
for (let i = 0; i < 3; i++) {
|
|
23
|
+
if ((pa[i] || 0) !== (pb[i] || 0))
|
|
24
|
+
return (pa[i] || 0) > (pb[i] || 0);
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
export async function checkUpdate() {
|
|
29
|
+
const out = await runNpm(['view', PKG_NAME, 'version'], 15_000);
|
|
30
|
+
const latest = parseLatestVersion(out);
|
|
31
|
+
if (!/^\d+\.\d+\.\d+/.test(latest))
|
|
32
|
+
throw new Error(`无法解析 npm 返回的版本号:"${latest.slice(0, 50)}"`);
|
|
33
|
+
return { current: VERSION, latest, hasUpdate: hasNewerVersion(latest, VERSION) };
|
|
34
|
+
}
|
|
35
|
+
/** 执行全局更新(npm install -g pkg@latest);返回 npm 输出供页面展示。耗时 1-2 分钟属正常 */
|
|
36
|
+
export async function runUpdate() {
|
|
37
|
+
return runNpm(['install', '-g', `${PKG_NAME}@latest`], 5 * 60_000);
|
|
38
|
+
}
|
|
39
|
+
/** 纯函数(可测):模块目录是否位于 npm 安装的包目录内 */
|
|
40
|
+
export function detectInstallMode(moduleDir) {
|
|
41
|
+
const marker = `node_modules${sep}@jesonliu${sep}lark-claudecode-bridge`;
|
|
42
|
+
return moduleDir.includes(marker) ? 'global' : 'other';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 安装方式探测:非 npm 安装(源码运行等)时 npm i -g 会装出另一份全局副本,
|
|
46
|
+
* 并非更新当前运行实例——页面据此提示手动更新而非一键更新
|
|
47
|
+
*/
|
|
48
|
+
export function installMode() {
|
|
49
|
+
return detectInstallMode(fileURLToPath(new URL('./', import.meta.url)));
|
|
50
|
+
}
|
|
51
|
+
function runNpm(args, timeoutMs) {
|
|
52
|
+
const { file, prefixArgs } = npmCommand();
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
execFile(file, [...prefixArgs, ...args], { timeout: timeoutMs, windowsHide: true, encoding: 'utf8' }, (e, stdout, stderr) => {
|
|
55
|
+
if (e) {
|
|
56
|
+
const detail = String(stderr || stdout || '').trim().slice(0, 500);
|
|
57
|
+
reject(new Error(detail || `npm ${args[0]} 执行失败(${e.code ?? '超时或退出码非 0'})`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
resolve(String(stdout).trim());
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/web/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jesonliu/lark-claudecode-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "飞书 ↔ Claude Code 桥接器:卡片确认走长连接,免公网 IP",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
|
+
"assets",
|
|
22
23
|
"config.example.yaml",
|
|
23
24
|
"deploy"
|
|
24
25
|
],
|