@jesonliu/lark-claudecode-bridge 0.11.0 → 0.14.2
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 +89 -49
- package/assets/web/index.html +1769 -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 +24 -0
- package/dist/claude-config.js +143 -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 +207 -6
- package/dist/config.js.map +1 -1
- package/dist/executor/claude-executor.d.ts +7 -2
- package/dist/executor/claude-executor.js +62 -17
- package/dist/executor/claude-executor.js.map +1 -1
- package/dist/executor/output-collector.d.ts +2 -0
- package/dist/executor/output-collector.js +15 -3
- package/dist/executor/output-collector.js.map +1 -1
- package/dist/executor/permission-gate.d.ts +37 -3
- package/dist/executor/permission-gate.js +86 -16
- package/dist/executor/permission-gate.js.map +1 -1
- package/dist/executor/plugin-discovery.d.ts +30 -0
- package/dist/executor/plugin-discovery.js +68 -1
- package/dist/executor/plugin-discovery.js.map +1 -1
- package/dist/executor/plugin-manager.d.ts +35 -0
- package/dist/executor/plugin-manager.js +109 -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/gateway/card-builder.d.ts +18 -0
- package/dist/gateway/card-builder.js +61 -1
- package/dist/gateway/card-builder.js.map +1 -1
- package/dist/gateway/feishu-gateway.d.ts +10 -0
- package/dist/gateway/feishu-gateway.js +4 -0
- package/dist/gateway/feishu-gateway.js.map +1 -1
- package/dist/gateway/progress-card.d.ts +8 -0
- package/dist/gateway/progress-card.js +16 -0
- package/dist/gateway/progress-card.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +210 -28
- package/dist/index.js.map +1 -1
- package/dist/session/commands.d.ts +16 -1
- package/dist/session/commands.js +77 -17
- 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/session/session-store.d.ts +14 -1
- package/dist/session/session-store.js +15 -0
- package/dist/session/session-store.js.map +1 -1
- package/dist/types.d.ts +69 -1
- 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 +52 -0
- package/dist/web/config-api.js +186 -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 +618 -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
package/config.example.yaml
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
# 所有机器人共用本机 ~/.claude:模型设置(settings.json)、登录态、user 级 MCP、skills、
|
|
3
3
|
# 已启用的 marketplace 插件全部自动继承,无须在此重复配置认证/模型。
|
|
4
4
|
# 升级提示:旧版单应用 feishu: 格式仍可直接使用(启动时自动归一化,首次 lcb app add 时原地转格式)。
|
|
5
|
-
#
|
|
6
|
-
#
|
|
5
|
+
# 快捷操作:推荐用「斜杠命令」(配置页一键同步,输入 / 选择后可继续输入描述);
|
|
6
|
+
# 备选机器人菜单(开放平台后台配置,点击即发送):如「内容生成」→ 发送消息 /content-producer:content-producer。
|
|
7
7
|
apps:
|
|
8
8
|
- name: 主力助手 # 显示名(日志前缀 / /status / lcb app list),缺省取 app_id
|
|
9
9
|
app_id: cli_xxxx # 飞书开放平台 → 凭证与基础信息
|
|
@@ -63,5 +63,25 @@ concurrency: 3 # 全局并发上限(未单独配置的 app 沿
|
|
|
63
63
|
# # dd if= / chmod 777 / curl|wget 管道执行脚本 / shutdown|reboot
|
|
64
64
|
# - 'rm\s+-rf'
|
|
65
65
|
# - 'sudo\s'
|
|
66
|
+
# server: # Web 配置页(随 lcb start 常驻,浏览器打开 http://127.0.0.1:17317 随时改配置;
|
|
67
|
+
# # 也可 lcb ui 单独启动。整块可选,缺省 enabled/127.0.0.1/17317)
|
|
68
|
+
# enabled: true # false = 不启动配置页
|
|
69
|
+
# host: 127.0.0.1 # 仅本机可访问;改非回环地址 = 局域网可见(页面可读写全部凭证,慎用)
|
|
70
|
+
# port: 17317
|
|
71
|
+
# claude: # Claude 认证双模式(整块可选)。缺省/inherit = 共享本机 ~/.claude
|
|
72
|
+
# # (登录态/模型/MCP/skills/插件全部自动继承,见 README「配置继承」);
|
|
73
|
+
# # managed = bridge 托管(无需本机 claude login,一键安装开箱即用)
|
|
74
|
+
# mode: managed
|
|
75
|
+
# auth_token: sk-xxx # ANTHROPIC_AUTH_TOKEN(中转站常用,Bearer);与 api_key 二选一
|
|
76
|
+
# # api_key: sk-ant-xxx # ANTHROPIC_API_KEY(官方,x-api-key)
|
|
77
|
+
# base_url: https://relay.example # 中转站端点(ANTHROPIC_BASE_URL);官方 API 留空
|
|
78
|
+
# model: claude-sonnet-5 # 模型(写入托管目录 ~/.lark-claudecode-bridge/claude/settings.json)
|
|
79
|
+
# slash_commands: # 飞书斜杠命令同步(配置页「斜杠命令」tab 一键同步到开放平台;
|
|
80
|
+
# # 内置命令 help/new/resume/stop/status/ws/model/skills/plugins/mcp/plugin 恒参与,
|
|
81
|
+
# # 此处仅配置自定义透传命令;需开通 application:app_slash_command 读写权限)
|
|
82
|
+
# extra:
|
|
83
|
+
# - command: produce # 不带 / 前缀,1-32 位字母/数字/下划线/连字符
|
|
84
|
+
# description: 内容生产流程 # 指令面板展示文案
|
|
85
|
+
# icon: skill_outlined # 图标(可选,icon_key 列表见飞书文档)
|
|
66
86
|
# transcripts: # 对话落盘清理策略;缺省 = 永久保留
|
|
67
87
|
# retention_days: 90
|
package/dist/auth-precheck.d.ts
CHANGED
|
@@ -3,5 +3,8 @@
|
|
|
3
3
|
* 环境变量(进程透传或 apps[].env)→ ~/.claude OAuth 凭证 → ~/.claude settings.json 认证声明。
|
|
4
4
|
*/
|
|
5
5
|
export declare function hasClaudeAuth(appEnv: Record<string, string | undefined>, claudeConfigDir: string): boolean;
|
|
6
|
-
/** 启动预检:无任何认证来源时 warn
|
|
7
|
-
export declare function warnIfNoClaudeAuth(appName: string, appEnv: Record<string, string | undefined>, claudeConfigDir: string
|
|
6
|
+
/** 启动预检:无任何认证来源时 warn 修复出路(managed 模式指向配置页,inherit 指向 claude login);返回是否存在认证(测试断言用) */
|
|
7
|
+
export declare function warnIfNoClaudeAuth(appName: string, appEnv: Record<string, string | undefined>, claudeConfigDir: string, opts?: {
|
|
8
|
+
managed?: boolean;
|
|
9
|
+
serverUrl?: string | null;
|
|
10
|
+
}): boolean;
|
package/dist/auth-precheck.js
CHANGED
|
@@ -31,10 +31,16 @@ export function hasClaudeAuth(appEnv, claudeConfigDir) {
|
|
|
31
31
|
|| existsSync(join(claudeConfigDir, '.credentials.json'))
|
|
32
32
|
|| hasSettingsAuth(claudeConfigDir);
|
|
33
33
|
}
|
|
34
|
-
/** 启动预检:无任何认证来源时 warn
|
|
35
|
-
export function warnIfNoClaudeAuth(appName, appEnv, claudeConfigDir) {
|
|
34
|
+
/** 启动预检:无任何认证来源时 warn 修复出路(managed 模式指向配置页,inherit 指向 claude login);返回是否存在认证(测试断言用) */
|
|
35
|
+
export function warnIfNoClaudeAuth(appName, appEnv, claudeConfigDir, opts = {}) {
|
|
36
36
|
if (hasClaudeAuth(appEnv, claudeConfigDir))
|
|
37
37
|
return true;
|
|
38
|
+
if (opts.managed) {
|
|
39
|
+
console.warn(`[app:${appName}] [配置] 未检测到 Claude Code 认证来源(managed 模式):config.yaml 的 claude 段未配置 auth_token / api_key。`
|
|
40
|
+
+ `发消息将报「Not logged in · Please run /login」。`
|
|
41
|
+
+ `修复:${opts.serverUrl ? `打开 ${opts.serverUrl} 在「Claude 认证」区填写(中转站另配 base_url),保存并重启 bridge` : '在 config.yaml 的 claude 段配置 auth_token / api_key 后重启 bridge'}`);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
38
44
|
console.warn(`[app:${appName}] [配置] 未检测到 Claude Code 认证来源:环境变量无 ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY,`
|
|
39
45
|
+ `且 ${claudeConfigDir} 下无 .credentials.json,settings.json 也未声明认证。`
|
|
40
46
|
+ `发消息将报「Not logged in · Please run /login」。二选一修复:`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-precheck.js","sourceRoot":"","sources":["../src/auth-precheck.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAA0C;IAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,eAAuB;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAG7C,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,OAAO,OAAO,CACZ,CAAC,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;eAC9E,CAAC,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;eAC3E,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0C,EAAE,eAAuB;IAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;WACpB,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;WACtD,eAAe,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"auth-precheck.js","sourceRoot":"","sources":["../src/auth-precheck.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAA0C;IAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,eAAuB;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAG7C,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,OAAO,OAAO,CACZ,CAAC,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;eAC9E,CAAC,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;eAC3E,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0C,EAAE,eAAuB;IAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;WACpB,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;WACtD,eAAe,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAA0C,EAC1C,eAAuB,EACvB,IAAI,GAAqD,EAAE;IAE3D,IAAI,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CACV,QAAQ,OAAO,0FAA0F;cACvG,2CAA2C;cAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,+CAA+C,CAAC,CAAC,CAAC,4DAA4D,EAAE,CAC9J,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,CACV,QAAQ,OAAO,4EAA4E;UACzF,KAAK,eAAe,6CAA6C;UACjE,iDAAiD;UACjD,oDAAoD;UACpD,sFAAsF,CACzF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/bin/lcb.js
CHANGED
|
@@ -9,6 +9,8 @@ import { asker } from '../cli/asker.js';
|
|
|
9
9
|
import { approvePairingLine } from '../cli/stdin-pairing.js';
|
|
10
10
|
import { startBridge } from '../index.js';
|
|
11
11
|
import { loadConfig, CONFIG_PATH, CONFIG_DIR } from '../config.js';
|
|
12
|
+
import { initManagedClaudeDir } from '../claude-config.js';
|
|
13
|
+
import { startWebServer } from '../web/server.js';
|
|
12
14
|
import { AccessControl } from '../access/access-control.js';
|
|
13
15
|
import { VERSION } from '../version.js';
|
|
14
16
|
import { join } from 'node:path';
|
|
@@ -24,13 +26,32 @@ async function main() {
|
|
|
24
26
|
await runSetup(CONFIG_PATH);
|
|
25
27
|
break;
|
|
26
28
|
case 'start': {
|
|
27
|
-
|
|
29
|
+
let config;
|
|
30
|
+
try {
|
|
31
|
+
config = loadConfig(CONFIG_PATH); // 启动前校验:文件缺失/字段非法立即报错退出
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
35
|
+
// 首次安装(无配置文件):不报错退出,起配置页引导用户在浏览器完成全部配置
|
|
36
|
+
if (msg.includes('找不到配置文件')) {
|
|
37
|
+
console.log('📦 检测到首次安装(尚无 config.yaml),正在打开配置页…');
|
|
38
|
+
const handle = await startWebServer({ autoOpen: !args.includes('--no-open') });
|
|
39
|
+
if (handle) {
|
|
40
|
+
console.log(` 在浏览器完成配置后,重新运行 lcb start 即可启动桥接器(Ctrl+C 退出本页)`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
throw e; // server.enabled 默认开,理论上不会走到;保持兜底
|
|
44
|
+
}
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
28
47
|
// Task 6 遗留建议:App ID 形状不符仅打警告,不阻止启动(形状非强约束,避免误杀合法 ID)
|
|
29
48
|
for (const app of config.apps) {
|
|
30
49
|
if (!APP_ID_RE.test(app.appId)) {
|
|
31
50
|
console.warn(`⚠️ 应用 ${app.name} 的 App ID "${app.appId}" 不符合常见形状 cli_ + 16 位十六进制,启动继续;若后续连接失败请先核对`);
|
|
32
51
|
}
|
|
33
52
|
}
|
|
53
|
+
// managed 模式:把 claude 段最新认证/模型值合并进自管目录 settings.json(首条消息前就位)
|
|
54
|
+
initManagedClaudeDir(config);
|
|
34
55
|
await startBridge(CONFIG_PATH);
|
|
35
56
|
// 前台监听 stdin:管理员可直接在运行终端输入配对码批准。
|
|
36
57
|
// 现读现批(每次 load 新实例再 approve):桥运行中 beginPairing 写入的新 pending
|
|
@@ -40,6 +61,13 @@ async function main() {
|
|
|
40
61
|
rl.on('line', (line) => approvePairingLine(line, join(CONFIG_DIR, 'access.json')));
|
|
41
62
|
break;
|
|
42
63
|
}
|
|
64
|
+
case 'ui': {
|
|
65
|
+
// 仅起 Web 配置页(不启动桥接器):可与运行中的 bridge 共存——
|
|
66
|
+
// 页面写盘后,bridge 的热重载器下一条消息拾取可热字段;需重启字段由页面提示
|
|
67
|
+
await startWebServer({ autoOpen: !args.includes('--no-open') });
|
|
68
|
+
console.log('按 Ctrl+C 退出配置页');
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
43
71
|
case 'pair': {
|
|
44
72
|
const access = AccessControl.load(join(CONFIG_DIR, 'access.json'));
|
|
45
73
|
const code = args[0];
|
|
@@ -173,8 +201,9 @@ async function main() {
|
|
|
173
201
|
console.log(`lcb — 飞书 ↔ Claude Code 桥接器 v${VERSION}
|
|
174
202
|
|
|
175
203
|
用法:
|
|
176
|
-
lcb setup
|
|
177
|
-
lcb start
|
|
204
|
+
lcb setup 引导式配置(命令行问答,支持多个机器人应用)
|
|
205
|
+
lcb start 启动桥接器(前台;含 Web 配置页,首次安装自动进入引导)
|
|
206
|
+
lcb ui 仅启动 Web 配置页(可与运行中的桥接器共存)
|
|
178
207
|
lcb pair <code> 批准配对码
|
|
179
208
|
lcb app list 列出机器人应用
|
|
180
209
|
lcb app add 添加机器人应用(重启后生效)
|
package/dist/bin/lcb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lcb.js","sourceRoot":"","sources":["../../src/bin/lcb.ts"],"names":[],"mappings":";AACA,sDAAsD;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,WAAW,CAAC,MAAqB;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5B,MAAM;QACR,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"lcb.js","sourceRoot":"","sources":["../../src/bin/lcb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BridgeConfig, ClaudeConfig } from './types.js';
|
|
2
|
+
export declare const MANAGED_CLAUDE_DIR: string;
|
|
3
|
+
/** 本机默认 ~/.claude(inherit 模式生效目录;managed 模式下作为插件第二来源目录) */
|
|
4
|
+
export declare const DEFAULT_CLAUDE_DIR: string;
|
|
5
|
+
/** 双模式目录解析:managed → bridge 自管目录;其余(含缺省)→ 共享 ~/.claude */
|
|
6
|
+
export declare function resolveClaudeDir(config: BridgeConfig): string;
|
|
7
|
+
/**
|
|
8
|
+
* managed 目录 settings.json 构建(纯函数):
|
|
9
|
+
* 现有内容整体保留(enabledPlugins / 用户或 CLI 写入的其余键),仅重写 bridge 领土键——
|
|
10
|
+
* env.ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL / ANTHROPIC_MODEL 与顶层 model。
|
|
11
|
+
* config.yaml 的 claude 段是这几个键的唯一事实源:字段清空 = 删除对应键。
|
|
12
|
+
* env 块非领土键的合并优先级(低→高):托管目录既有值 → userEnv(本机 ~/.claude
|
|
13
|
+
* settings env 自动继承,已剔除领土键)→ configEnv(claude.env 显式配置)。
|
|
14
|
+
* 两处入口都过滤领土键:认证与模型由 config 认证字段全权决定,清空即删除的语义
|
|
15
|
+
* 不能被本机值或 env 配置绕过。
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildManagedSettings(existing: unknown, claude: ClaudeConfig, userEnv?: Record<string, string>, configEnv?: Record<string, string>): Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* managed 模式初始化:建目录 + 把 claude 段最新值合并进 settings.json,
|
|
20
|
+
* 并从本机 ~/.claude 继承 MCP servers(.claude.json mcpServers)与自定义环境变量
|
|
21
|
+
* (settings.json env 块,领土键除外)——否则托管会话读不到用户全局 MCP 及其依赖变量。
|
|
22
|
+
* lcb start 启动 bridge 前调用,保证首条消息前认证/环境就位;非 managed 模式为 no-op。
|
|
23
|
+
*/
|
|
24
|
+
export declare function initManagedClaudeDir(config: BridgeConfig, userClaudeDir?: string): void;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Claude 配置目录双模式解析与 managed 模式初始化。
|
|
2
|
+
// inherit(缺省)= 共享本机 ~/.claude(0.4 起行为:登录态/settings/user MCP/skills 全继承);
|
|
3
|
+
// managed = bridge 自管 ~/.lark-claudecode-bridge/claude/,认证与模型由 config.yaml claude 段
|
|
4
|
+
// 全权写入该目录 settings.json——彻底摆脱对本机 claude login 的依赖(一键安装开箱即用)。
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { homedir } from 'node:os';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { CONFIG_DIR } from './config.js';
|
|
9
|
+
export const MANAGED_CLAUDE_DIR = join(CONFIG_DIR, 'claude');
|
|
10
|
+
/** 本机默认 ~/.claude(inherit 模式生效目录;managed 模式下作为插件第二来源目录) */
|
|
11
|
+
export const DEFAULT_CLAUDE_DIR = join(homedir(), '.claude');
|
|
12
|
+
/** 双模式目录解析:managed → bridge 自管目录;其余(含缺省)→ 共享 ~/.claude */
|
|
13
|
+
export function resolveClaudeDir(config) {
|
|
14
|
+
return config.claude?.mode === 'managed' ? MANAGED_CLAUDE_DIR : DEFAULT_CLAUDE_DIR;
|
|
15
|
+
}
|
|
16
|
+
/** 领土键清单:managed 模式下由 config.yaml claude 段认证/模型字段全权决定,不从任何 env 配置并入 */
|
|
17
|
+
const TERRITORY_ENV_KEYS = new Set(['ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'ANTHROPIC_MODEL']);
|
|
18
|
+
/**
|
|
19
|
+
* managed 目录 settings.json 构建(纯函数):
|
|
20
|
+
* 现有内容整体保留(enabledPlugins / 用户或 CLI 写入的其余键),仅重写 bridge 领土键——
|
|
21
|
+
* env.ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL / ANTHROPIC_MODEL 与顶层 model。
|
|
22
|
+
* config.yaml 的 claude 段是这几个键的唯一事实源:字段清空 = 删除对应键。
|
|
23
|
+
* env 块非领土键的合并优先级(低→高):托管目录既有值 → userEnv(本机 ~/.claude
|
|
24
|
+
* settings env 自动继承,已剔除领土键)→ configEnv(claude.env 显式配置)。
|
|
25
|
+
* 两处入口都过滤领土键:认证与模型由 config 认证字段全权决定,清空即删除的语义
|
|
26
|
+
* 不能被本机值或 env 配置绕过。
|
|
27
|
+
*/
|
|
28
|
+
export function buildManagedSettings(existing, claude, userEnv, configEnv) {
|
|
29
|
+
const doc = existing && typeof existing === 'object' && !Array.isArray(existing)
|
|
30
|
+
? { ...existing }
|
|
31
|
+
: {};
|
|
32
|
+
const envSrc = doc.env && typeof doc.env === 'object' && !Array.isArray(doc.env)
|
|
33
|
+
? { ...doc.env }
|
|
34
|
+
: {};
|
|
35
|
+
const mergeNonTerritory = (src) => {
|
|
36
|
+
if (!src)
|
|
37
|
+
return;
|
|
38
|
+
for (const [k, v] of Object.entries(src)) {
|
|
39
|
+
if (TERRITORY_ENV_KEYS.has(k) || typeof v !== 'string' || !v)
|
|
40
|
+
continue;
|
|
41
|
+
envSrc[k] = v;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
mergeNonTerritory(userEnv);
|
|
45
|
+
mergeNonTerritory(configEnv);
|
|
46
|
+
const setEnv = (key, v) => {
|
|
47
|
+
if (v)
|
|
48
|
+
envSrc[key] = v;
|
|
49
|
+
else
|
|
50
|
+
delete envSrc[key];
|
|
51
|
+
};
|
|
52
|
+
setEnv('ANTHROPIC_AUTH_TOKEN', claude.authToken);
|
|
53
|
+
setEnv('ANTHROPIC_API_KEY', claude.apiKey);
|
|
54
|
+
setEnv('ANTHROPIC_BASE_URL', claude.baseUrl);
|
|
55
|
+
setEnv('ANTHROPIC_MODEL', claude.model);
|
|
56
|
+
if (Object.keys(envSrc).length > 0)
|
|
57
|
+
doc.env = envSrc;
|
|
58
|
+
else
|
|
59
|
+
delete doc.env;
|
|
60
|
+
if (claude.model)
|
|
61
|
+
doc.model = claude.model;
|
|
62
|
+
else
|
|
63
|
+
delete doc.model;
|
|
64
|
+
return doc;
|
|
65
|
+
}
|
|
66
|
+
/** 领土键清单:managed 模式下由 config.yaml claude 段全权决定,不从用户 settings.json 并入 */
|
|
67
|
+
/** 读本机 ~/.claude/settings.json 的 env 块(剔除领土键);读取失败/不存在返回 undefined */
|
|
68
|
+
function readUserSettingsEnv(userClaudeDir) {
|
|
69
|
+
try {
|
|
70
|
+
const raw = JSON.parse(readFileSync(join(userClaudeDir, 'settings.json'), 'utf8'));
|
|
71
|
+
const env = raw?.env;
|
|
72
|
+
if (!env || typeof env !== 'object' || Array.isArray(env))
|
|
73
|
+
return undefined;
|
|
74
|
+
const picked = {};
|
|
75
|
+
for (const [k, v] of Object.entries(env)) {
|
|
76
|
+
if (!TERRITORY_ENV_KEYS.has(k) && typeof v === 'string' && v)
|
|
77
|
+
picked[k] = v;
|
|
78
|
+
}
|
|
79
|
+
return Object.keys(picked).length > 0 ? picked : undefined;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 同步本机 ~/.claude.json 的 mcpServers 到 managed 目录 .claude.json(单向:本机 → 自管)。
|
|
87
|
+
* CLI 的全局 MCP 读 $CLAUDE_CONFIG_DIR/.claude.json,managed 模式下自管目录没有这份配置,
|
|
88
|
+
* 用户的全局 MCP server 会全体消失。仅整体搬运 mcpServers 键,其余键(pluginUsage 等
|
|
89
|
+
* CLI 运行时状态)不动;本机无 mcpServers 时 no-op(不清空自管侧)。
|
|
90
|
+
*/
|
|
91
|
+
function syncMcpServers(managedDir, userClaudeDir) {
|
|
92
|
+
let mcpServers;
|
|
93
|
+
try {
|
|
94
|
+
const raw = JSON.parse(readFileSync(join(userClaudeDir, '..', '.claude.json'), 'utf8'));
|
|
95
|
+
if (raw?.mcpServers && typeof raw.mcpServers === 'object')
|
|
96
|
+
mcpServers = raw.mcpServers;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return; // 本机无 .claude.json(未用过 claude login):no-op
|
|
100
|
+
}
|
|
101
|
+
if (!mcpServers)
|
|
102
|
+
return;
|
|
103
|
+
const target = join(managedDir, '.claude.json');
|
|
104
|
+
let doc = {};
|
|
105
|
+
try {
|
|
106
|
+
const raw = JSON.parse(readFileSync(target, 'utf8'));
|
|
107
|
+
if (raw && typeof raw === 'object' && !Array.isArray(raw))
|
|
108
|
+
doc = raw;
|
|
109
|
+
}
|
|
110
|
+
catch { /* 损坏按全新处理 */ }
|
|
111
|
+
doc.mcpServers = mcpServers;
|
|
112
|
+
writeAtomicJson(target, doc);
|
|
113
|
+
}
|
|
114
|
+
/** 原子写 JSON(tmp + rename):读-改-写窗口内崩溃不留半截文件 */
|
|
115
|
+
function writeAtomicJson(path, value) {
|
|
116
|
+
const tmp = `${path}.tmp`;
|
|
117
|
+
writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
118
|
+
renameSync(tmp, path);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* managed 模式初始化:建目录 + 把 claude 段最新值合并进 settings.json,
|
|
122
|
+
* 并从本机 ~/.claude 继承 MCP servers(.claude.json mcpServers)与自定义环境变量
|
|
123
|
+
* (settings.json env 块,领土键除外)——否则托管会话读不到用户全局 MCP 及其依赖变量。
|
|
124
|
+
* lcb start 启动 bridge 前调用,保证首条消息前认证/环境就位;非 managed 模式为 no-op。
|
|
125
|
+
*/
|
|
126
|
+
export function initManagedClaudeDir(config, userClaudeDir = DEFAULT_CLAUDE_DIR) {
|
|
127
|
+
if (config.claude?.mode !== 'managed')
|
|
128
|
+
return;
|
|
129
|
+
mkdirSync(MANAGED_CLAUDE_DIR, { recursive: true });
|
|
130
|
+
const settingsPath = join(MANAGED_CLAUDE_DIR, 'settings.json');
|
|
131
|
+
let existing;
|
|
132
|
+
if (existsSync(settingsPath)) {
|
|
133
|
+
try {
|
|
134
|
+
existing = JSON.parse(readFileSync(settingsPath, 'utf8'));
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
existing = undefined; // 现有文件损坏:按全新处理(rename 原子覆盖)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
writeAtomicJson(settingsPath, buildManagedSettings(existing, config.claude, readUserSettingsEnv(userClaudeDir), config.claude.env));
|
|
141
|
+
syncMcpServers(MANAGED_CLAUDE_DIR, userClaudeDir);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=claude-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../src/claude-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export declare function answersToConfig(a: SetupAnswers): BridgeConfig;
|
|
|
24
24
|
* 配置 → 可写盘的 YAML 文档。
|
|
25
25
|
* ⚠️ 键名必须用 snake_case(apps[].app_id / app_secret)——loadConfig 按此形状解析,
|
|
26
26
|
* 直接 stringify(camelCase 的 BridgeConfig) 会写出 loadConfig 读不回的配置。
|
|
27
|
+
* permissions / server 段预置完整默认值(页面可增删),保证新用户开箱即得可调的白名单。
|
|
27
28
|
*/
|
|
28
29
|
export declare function toYamlDocument(cfg: BridgeConfig): Record<string, unknown>;
|
|
29
30
|
export declare function runSetup(configPath: string): Promise<void>;
|
package/dist/cli/setup-wizard.js
CHANGED
|
@@ -5,6 +5,7 @@ import { mkdirSync, writeFileSync, existsSync, readFileSync } from 'node:fs';
|
|
|
5
5
|
import { dirname } from 'node:path';
|
|
6
6
|
import { stringify } from 'yaml';
|
|
7
7
|
import { asker } from './asker.js';
|
|
8
|
+
import { defaultPermissionsDoc, defaultServerDoc } from '../config-defaults.js';
|
|
8
9
|
/** App ID 形状(Task 6 遗留建议:不符仅警告,不阻止) */
|
|
9
10
|
export const APP_ID_RE = /^cli_[0-9a-fA-F]{16}$/;
|
|
10
11
|
/**
|
|
@@ -29,6 +30,7 @@ export function answersToConfig(a) {
|
|
|
29
30
|
* 配置 → 可写盘的 YAML 文档。
|
|
30
31
|
* ⚠️ 键名必须用 snake_case(apps[].app_id / app_secret)——loadConfig 按此形状解析,
|
|
31
32
|
* 直接 stringify(camelCase 的 BridgeConfig) 会写出 loadConfig 读不回的配置。
|
|
33
|
+
* permissions / server 段预置完整默认值(页面可增删),保证新用户开箱即得可调的白名单。
|
|
32
34
|
*/
|
|
33
35
|
export function toYamlDocument(cfg) {
|
|
34
36
|
return {
|
|
@@ -41,6 +43,8 @@ export function toYamlDocument(cfg) {
|
|
|
41
43
|
workspaces: cfg.workspaces,
|
|
42
44
|
defaults: { workspace: cfg.defaults.workspace },
|
|
43
45
|
concurrency: cfg.concurrency,
|
|
46
|
+
permissions: defaultPermissionsDoc(),
|
|
47
|
+
server: defaultServerDoc(),
|
|
44
48
|
};
|
|
45
49
|
}
|
|
46
50
|
export async function runSetup(configPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,6DAA6D;AAC7D,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// 新建配置的默认段构建:lcb setup / Web 配置页 bootstrap / config.example 三处共用,
|
|
2
|
+
// 保证「预置写盘的默认值」与「未配置时的运行期内置默认」逐字一致(单源:permission-gate 常量)
|
|
3
|
+
import { DEFAULT_ALLOW_TOOLS_LIST, DEFAULT_DANGEROUS_COMMAND_SOURCES } from './executor/permission-gate.js';
|
|
4
|
+
/** permissions 段完整默认值(snake_case,直接可 stringify 写盘;页面可增删条目) */
|
|
5
|
+
export function defaultPermissionsDoc() {
|
|
6
|
+
return {
|
|
7
|
+
allow_tools: [...DEFAULT_ALLOW_TOOLS_LIST],
|
|
8
|
+
dangerous_commands: [...DEFAULT_DANGEROUS_COMMAND_SOURCES],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** server 段默认值(Web 配置页随 lcb start 常驻,仅绑回环) */
|
|
12
|
+
export function defaultServerDoc() {
|
|
13
|
+
return { enabled: true, host: '127.0.0.1', port: 17317 };
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=config-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-defaults.js","sourceRoot":"","sources":["../src/config-defaults.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yDAAyD;AACzD,OAAO,EAAE,wBAAwB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAE5G,8DAA8D;AAC9D,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,WAAW,EAAE,CAAC,GAAG,wBAAwB,CAAC;QAC1C,kBAAkB,EAAE,CAAC,GAAG,iCAAiC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,6 +2,13 @@ import type { BridgeConfig, FeishuAppConfig } from './types.js';
|
|
|
2
2
|
/** LCB_CONFIG_DIR 环境变量可覆盖配置根目录(多租户分进程场景用;正常用户无须设置) */
|
|
3
3
|
export declare const CONFIG_DIR: string;
|
|
4
4
|
export declare const CONFIG_PATH: string;
|
|
5
|
+
/** 斜杠命令名合法性(飞书侧注册约束):1-32 位字母/数字/下划线/连字符。extra 解析与 Web 远端 create 端点共用 */
|
|
6
|
+
export declare const SLASH_COMMAND_RE: RegExp;
|
|
5
7
|
export declare function loadConfig(path?: string): BridgeConfig;
|
|
8
|
+
/**
|
|
9
|
+
* 从 YAML 文本解析配置(loadConfig 的字符串版):Web 配置页 PUT /api/config 写盘前
|
|
10
|
+
* 的内存校验复用同一套 normalize 逻辑,保证「页面能保存的」与「启动能加载的」完全一致。
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseConfigText(raw: string, pathForError?: string): BridgeConfig;
|
|
6
13
|
/** 热重载比较:任一 app 的凭证/名称/工作区/并发/配置目录/人格变化即视为需重启的变更(顺序敏感) */
|
|
7
14
|
export declare function sameApps(a: FeishuAppConfig[], b: FeishuAppConfig[]): boolean;
|