@jesonliu/lark-claudecode-bridge 0.18.1 → 0.20.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 +14 -12
- package/assets/web/css/main.css +509 -111
- package/assets/web/index.html +12 -2
- package/assets/web/js/main.js +19 -11
- package/assets/web/js/pages/apps.js +10 -5
- package/assets/web/js/pages/claude.js +15 -5
- package/assets/web/js/pages/mcp.js +265 -0
- package/assets/web/js/pages/overview.js +5 -4
- package/assets/web/js/pages/permissions.js +56 -30
- package/assets/web/js/pages/plugins.js +29 -6
- package/assets/web/js/pages/skills.js +342 -0
- package/assets/web/js/pages/slash.js +11 -5
- package/assets/web/js/pages/workspaces.js +36 -14
- package/assets/web/js/theme.js +23 -0
- package/assets/web/js/ui.js +75 -4
- package/config.example.yaml +2 -3
- package/dist/access/access-control.d.ts +17 -1
- package/dist/access/access-control.js +31 -2
- package/dist/access/access-control.js.map +1 -1
- package/dist/bin/lcb.js +5 -0
- package/dist/bin/lcb.js.map +1 -1
- package/dist/claude-config.d.ts +14 -2
- package/dist/claude-config.js +75 -4
- package/dist/claude-config.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +0 -1
- package/dist/cli/setup-wizard.js +2 -4
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/config.js +39 -14
- package/dist/config.js.map +1 -1
- package/dist/executor/claude-executor.d.ts +1 -1
- package/dist/executor/claude-executor.js +4 -2
- package/dist/executor/claude-executor.js.map +1 -1
- package/dist/executor/notify-server.d.ts +20 -0
- package/dist/executor/notify-server.js +85 -4
- package/dist/executor/notify-server.js.map +1 -1
- package/dist/executor/plugin-discovery.d.ts +6 -0
- package/dist/executor/plugin-discovery.js +14 -0
- package/dist/executor/plugin-discovery.js.map +1 -1
- package/dist/gateway/card-builder.d.ts +60 -24
- package/dist/gateway/card-builder.js +200 -109
- package/dist/gateway/card-builder.js.map +1 -1
- package/dist/gateway/diff-card.js +1 -1
- package/dist/gateway/diff-card.js.map +1 -1
- package/dist/gateway/feishu-gateway.d.ts +27 -0
- package/dist/gateway/feishu-gateway.js +106 -4
- package/dist/gateway/feishu-gateway.js.map +1 -1
- package/dist/gateway/progress-card.d.ts +77 -0
- package/dist/gateway/progress-card.js +231 -8
- package/dist/gateway/progress-card.js.map +1 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.js +354 -98
- package/dist/index.js.map +1 -1
- package/dist/notify-sop.d.ts +1 -0
- package/dist/notify-sop.js +33 -0
- package/dist/notify-sop.js.map +1 -0
- package/dist/session/commands.d.ts +1 -1
- package/dist/session/commands.js +25 -2
- package/dist/session/commands.js.map +1 -1
- package/dist/session/session-store.d.ts +3 -0
- package/dist/session/session-store.js.map +1 -1
- package/dist/types.d.ts +23 -5
- package/dist/util/log-tee.d.ts +4 -0
- package/dist/util/log-tee.js +99 -0
- package/dist/util/log-tee.js.map +1 -0
- package/dist/util/runtime-dirs.d.ts +4 -0
- package/dist/util/runtime-dirs.js +27 -0
- package/dist/util/runtime-dirs.js.map +1 -0
- package/dist/util/workspace-diff.js +2 -2
- package/dist/util/workspace-diff.js.map +1 -1
- package/dist/web/lifecycle.d.ts +4 -1
- package/dist/web/lifecycle.js +11 -25
- package/dist/web/lifecycle.js.map +1 -1
- package/dist/web/server.js +404 -11
- package/dist/web/server.js.map +1 -1
- package/dist/web/skills-mcp-api.d.ts +120 -0
- package/dist/web/skills-mcp-api.js +348 -0
- package/dist/web/skills-mcp-api.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// 运行时目录初始化:lcb 任意入口(start/ui/setup/pair/ws/app)与 Web 配置页启动前
|
|
2
|
+
// 先把 ~/.lark-claudecode-bridge 及标准子目录建好(幂等),保证「首次安装先配置」的
|
|
3
|
+
// 一切写盘(config.yaml.tmp / access.json / 日志 / 落盘等)不因目录缺失 ENOENT。
|
|
4
|
+
// 注意:config.yaml 不在此创建——首装 bootstrap 向导依赖「文件不存在」判定 firstRun
|
|
5
|
+
import { mkdirSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { CONFIG_DIR } from '../config.js';
|
|
8
|
+
/** 标准子目录:
|
|
9
|
+
* logs 按天日志 / transcripts 对话落盘 / claude 自管目录 / claude/plans 计划文件 /
|
|
10
|
+
* mcp 配置页管理的 MCP servers.json / notify SOP 硬兜底强制转 send_file 的中间产物(changes-YYYYMMDD-HHMMSS.md)*/
|
|
11
|
+
export function ensureRuntimeDirs() {
|
|
12
|
+
for (const dir of [
|
|
13
|
+
CONFIG_DIR,
|
|
14
|
+
join(CONFIG_DIR, 'logs'),
|
|
15
|
+
join(CONFIG_DIR, 'transcripts'),
|
|
16
|
+
join(CONFIG_DIR, 'claude'),
|
|
17
|
+
join(CONFIG_DIR, 'claude', 'plans'),
|
|
18
|
+
join(CONFIG_DIR, 'mcp'),
|
|
19
|
+
join(CONFIG_DIR, 'notify'),
|
|
20
|
+
]) {
|
|
21
|
+
try {
|
|
22
|
+
mkdirSync(dir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
catch { /* 已存在 / 极端权限异常:不阻断启动,具体写盘点各自兜底 */ }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=runtime-dirs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-dirs.js","sourceRoot":"","sources":["../../src/util/runtime-dirs.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yDAAyD;AACzD,+DAA+D;AAC/D,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;kGAEkG;AAClG,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,GAAG,IAAI;QAChB,UAAU;QACV,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;QAC/B,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;KAC3B,EAAE,CAAC;QACF,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// 工作区改动收集:
|
|
2
|
-
// 不做文件快照——git
|
|
1
|
+
// 工作区改动收集:git 仓库工作区任务收尾时用 git diff 生成全量 unified diff。
|
|
2
|
+
// 不做文件快照——git 是代码工作区的既有事实(非 git 仓库返回 null,由调用方跳过)
|
|
3
3
|
import { execFile } from 'node:child_process';
|
|
4
4
|
import { readFile } from 'node:fs/promises';
|
|
5
5
|
import { join } from 'node:path';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-diff.js","sourceRoot":"","sources":["../../src/util/workspace-diff.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"workspace-diff.js","sourceRoot":"","sources":["../../src/util/workspace-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/web/lifecycle.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** 后台运行日志落 ~/.lark-claudecode-bridge/logs/bridge-YYYY-MM-DD.log(#7:按天拆分,由进程内 console tee 自管)。
|
|
2
|
+
* 历史版本曾重定向 stdio 到 bridge.log(被本文件保留字段 LOG_PATH 引用但不再使用),现统一走 logs/。 */
|
|
1
3
|
/** 桥接器进程启动成功后自写 PID 文件(页面据此探活/跨进程停止) */
|
|
2
4
|
export declare function writePidFile(pidPath?: string): void;
|
|
3
5
|
/** 优雅关闭时自清 PID 文件;文件已被其它进程覆写(重启竞态)时不误删 */
|
|
@@ -19,7 +21,8 @@ export declare function resolveLcbEntry(): {
|
|
|
19
21
|
ok: false;
|
|
20
22
|
error: string;
|
|
21
23
|
};
|
|
22
|
-
/** 后台拉起桥接器:detached 守护进程,stdio
|
|
24
|
+
/** 后台拉起桥接器:detached 守护进程,stdio 走 ignore(#7:日志由进程内 console tee 自管到 logs/,
|
|
25
|
+
* 不再重定向到 bridge.log——既避免文件双写分裂,也避免 detach 后日志继续堆在单文件) */
|
|
23
26
|
export declare function spawnBridgeDetached(): {
|
|
24
27
|
ok: true;
|
|
25
28
|
pid: number;
|
package/dist/web/lifecycle.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
// 桥接器进程生命周期:PID 文件探活 / 后台拉起 / 跨进程停止 / 旧进程退出后重启。
|
|
2
2
|
// 消费方:Web 配置页 /api/bridge/* 端点(页面按钮启停);startBridge 写/清 PID(src/index.ts)。
|
|
3
3
|
// 路径参数可注入(默认 CONFIG_DIR),便于测试用临时目录
|
|
4
|
-
import {
|
|
4
|
+
import { existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
5
5
|
import { spawn } from 'node:child_process';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import { CONFIG_DIR } from '../config.js';
|
|
9
9
|
const PID_PATH = join(CONFIG_DIR, 'bridge.pid');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const LOG_TRUNCATE_BYTES = 5 * 1024 * 1024;
|
|
10
|
+
/** 后台运行日志落 ~/.lark-claudecode-bridge/logs/bridge-YYYY-MM-DD.log(#7:按天拆分,由进程内 console tee 自管)。
|
|
11
|
+
* 历史版本曾重定向 stdio 到 bridge.log(被本文件保留字段 LOG_PATH 引用但不再使用),现统一走 logs/。 */
|
|
13
12
|
/** 桥接器进程启动成功后自写 PID 文件(页面据此探活/跨进程停止) */
|
|
14
13
|
export function writePidFile(pidPath = PID_PATH) {
|
|
15
14
|
writeFileSync(pidPath, String(process.pid), 'utf8');
|
|
@@ -67,28 +66,18 @@ export function resolveLcbEntry() {
|
|
|
67
66
|
}
|
|
68
67
|
return { ok: true, entry };
|
|
69
68
|
}
|
|
70
|
-
/**
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
if (existsSync(LOG_PATH) && statSync(LOG_PATH).size > LOG_TRUNCATE_BYTES)
|
|
74
|
-
rmSync(LOG_PATH, { force: true });
|
|
75
|
-
}
|
|
76
|
-
catch { /* 截断失败继续 append */ }
|
|
77
|
-
return openSync(LOG_PATH, 'a');
|
|
78
|
-
}
|
|
79
|
-
/** 后台拉起桥接器:detached 守护进程,stdio 落 bridge.log,父进程退出不影响其存活 */
|
|
69
|
+
/** 后台拉起桥接器:detached 守护进程,stdio 走 ignore(#7:日志由进程内 console tee 自管到 logs/,
|
|
70
|
+
* 不再重定向到 bridge.log——既避免文件双写分裂,也避免 detach 后日志继续堆在单文件) */
|
|
80
71
|
export function spawnBridgeDetached() {
|
|
81
72
|
const r = resolveLcbEntry();
|
|
82
73
|
if (!r.ok)
|
|
83
74
|
return r;
|
|
84
|
-
const fd = openLogFd();
|
|
85
75
|
const child = spawn(process.execPath, [r.entry, 'start'], {
|
|
86
76
|
detached: true,
|
|
87
|
-
stdio:
|
|
77
|
+
stdio: 'ignore',
|
|
88
78
|
windowsHide: true,
|
|
89
79
|
});
|
|
90
80
|
child.unref();
|
|
91
|
-
closeSync(fd); // 父进程关闭自有 fd 副本(子进程已继承)
|
|
92
81
|
return { ok: true, pid: child.pid ?? -1 };
|
|
93
82
|
}
|
|
94
83
|
/**
|
|
@@ -108,21 +97,18 @@ export function stopBridgeByPid(pid) {
|
|
|
108
97
|
/**
|
|
109
98
|
* 内嵌重启 helper(CJS,node -e 执行):轮询旧进程退出 → 拉起新桥接器 → 自退。
|
|
110
99
|
* 不能「先拉新再杀旧」:新进程的 Web 配置页会因端口仍被旧进程占用而启动失败,
|
|
111
|
-
* 导致重启后页面失联。超时 30s
|
|
100
|
+
* 导致重启后页面失联。超时 30s 放弃(保留旧进程运行态,页面可重试)。
|
|
101
|
+
* #7:stdio 走 ignore,日志由进程内 console tee 自管到 logs/bridge-YYYY-MM-DD.log
|
|
112
102
|
*/
|
|
113
103
|
const RESTART_HELPER = `
|
|
114
104
|
const { spawn } = require('node:child_process');
|
|
115
|
-
const
|
|
116
|
-
const [oldPid, entry, logPath] = process.argv.slice(1);
|
|
105
|
+
const [oldPid, entry] = process.argv.slice(1);
|
|
117
106
|
const t0 = Date.now();
|
|
118
107
|
(function wait() {
|
|
119
108
|
try { process.kill(+oldPid, 0); } catch {
|
|
120
109
|
try {
|
|
121
|
-
|
|
122
|
-
const fd = openSync(logPath, 'a');
|
|
123
|
-
const child = spawn(process.execPath, [entry, 'start'], { detached: true, stdio: ['ignore', fd, fd], windowsHide: true });
|
|
110
|
+
const child = spawn(process.execPath, [entry, 'start'], { detached: true, stdio: 'ignore', windowsHide: true });
|
|
124
111
|
child.unref();
|
|
125
|
-
closeSync(fd);
|
|
126
112
|
} catch (e) { try { console.error('restart helper failed:', e); } catch {} }
|
|
127
113
|
process.exit(0);
|
|
128
114
|
}
|
|
@@ -135,7 +121,7 @@ export function restartBridgeWithHelper(oldPid) {
|
|
|
135
121
|
const r = resolveLcbEntry();
|
|
136
122
|
if (!r.ok)
|
|
137
123
|
return r;
|
|
138
|
-
const helper = spawn(process.execPath, ['-e', RESTART_HELPER, String(oldPid), r.entry
|
|
124
|
+
const helper = spawn(process.execPath, ['-e', RESTART_HELPER, String(oldPid), r.entry], {
|
|
139
125
|
detached: true,
|
|
140
126
|
stdio: 'ignore',
|
|
141
127
|
windowsHide: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/web/lifecycle.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,0EAA0E;AAC1E,mCAAmC;AACnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/web/lifecycle.ts"],"names":[],"mappings":"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"}
|