@jesonliu/lark-claudecode-bridge 1.4.3 → 2.0.1
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/assets/web/css/main.css +774 -574
- package/assets/web/index.html +37 -17
- package/assets/web/js/auth.js +218 -0
- package/assets/web/js/bootstrap.js +36 -34
- package/assets/web/js/core.js +4 -3
- package/assets/web/js/main.js +79 -20
- package/assets/web/js/markdown.js +64 -0
- package/assets/web/js/pages/apps.js +338 -251
- package/assets/web/js/pages/chats.js +481 -0
- package/assets/web/js/pages/claude.js +243 -180
- package/assets/web/js/pages/mcp.js +59 -43
- package/assets/web/js/pages/memory.js +43 -46
- package/assets/web/js/pages/overview.js +426 -88
- package/assets/web/js/pages/permissions.js +121 -34
- package/assets/web/js/pages/plugins.js +51 -37
- package/assets/web/js/pages/skills.js +68 -92
- package/assets/web/js/pages/slash.js +31 -23
- package/assets/web/js/pages/workspaces.js +114 -73
- package/assets/web/js/theme.js +21 -18
- package/assets/web/js/ui.js +75 -32
- package/dist/access/access-control.d.ts +18 -0
- package/dist/access/access-control.js +29 -0
- package/dist/access/access-control.js.map +1 -1
- package/dist/bin/lcb.js +15 -0
- package/dist/bin/lcb.js.map +1 -1
- package/dist/feishu/name-cache.d.ts +15 -0
- package/dist/feishu/name-cache.js +82 -0
- package/dist/feishu/name-cache.js.map +1 -0
- package/dist/feishu/sibling-names.d.ts +1 -0
- package/dist/feishu/sibling-names.js +63 -0
- package/dist/feishu/sibling-names.js.map +1 -0
- package/dist/gateway/feishu-gateway.d.ts +24 -0
- package/dist/gateway/feishu-gateway.js +132 -0
- package/dist/gateway/feishu-gateway.js.map +1 -1
- package/dist/gateway/gateway-registry.d.ts +18 -0
- package/dist/gateway/gateway-registry.js +14 -0
- package/dist/gateway/gateway-registry.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +52 -9
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/web/chats-api.d.ts +93 -0
- package/dist/web/chats-api.js +603 -0
- package/dist/web/chats-api.js.map +1 -0
- package/dist/web/lifecycle.d.ts +21 -0
- package/dist/web/lifecycle.js +80 -3
- package/dist/web/lifecycle.js.map +1 -1
- package/dist/web/logs-api.d.ts +37 -0
- package/dist/web/logs-api.js +141 -0
- package/dist/web/logs-api.js.map +1 -0
- package/dist/web/server.js +196 -13
- package/dist/web/server.js.map +1 -1
- package/dist/web/webauth.d.ts +44 -0
- package/dist/web/webauth.js +221 -0
- package/dist/web/webauth.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,101 +1,141 @@
|
|
|
1
|
-
// ============
|
|
1
|
+
// ============ 工作区(卡片列表 + 两步选目录弹窗 + 全局默认;卡级保存,热生效) ============
|
|
2
|
+
// 列表行内「设为默认」改 defaults.workspace;添加/修改走弹窗:第一步选文件夹,第二步填名称。
|
|
2
3
|
import { S, $, esc, toast, cardDirty, applyDirty } from '../core.js';
|
|
3
|
-
import { saveBarHtml, dirtyDotHtml, bindSaveBar, pickDirectory, confirmDialog } from '../ui.js';
|
|
4
|
+
import { saveBarHtml, dirtyDotHtml, bindSaveBar, pickDirectory, confirmDialog, openModal, closeModal } from '../ui.js';
|
|
5
|
+
|
|
6
|
+
const svg = (inner, s = 16) => `<svg viewBox="0 0 24 24" width="${s}" height="${s}" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${inner}</svg>`;
|
|
7
|
+
const IC = {
|
|
8
|
+
folder: '<path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>',
|
|
9
|
+
folderOpen: '<path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"/>',
|
|
10
|
+
info: '<circle cx="12" cy="12" r="9"/><path d="M12 8h.01"/><path d="M12 12v4"/>',
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** 两步式工作区弹窗:选目录(pickDirectory)→ 已选路径卡 + 名称输入 → 确认写回 doc */
|
|
14
|
+
function wsFolderModal(doc, idx, el) {
|
|
15
|
+
const isNew = idx < 0;
|
|
16
|
+
const old = isNew ? { name: '', path: '' } : doc.workspaces[idx];
|
|
17
|
+
const w = { name: old.name || '', path: old.path || '' };
|
|
18
|
+
const paint = () => {
|
|
19
|
+
openModal({
|
|
20
|
+
title: isNew ? '添加工作区' : '修改工作区',
|
|
21
|
+
width: 'min(460px,92vw)',
|
|
22
|
+
bodyHtml: `
|
|
23
|
+
<div class="mut" style="font-size:12.5px;margin:-4px 0 12px">第一步选择文件夹,接着填写名称。</div>
|
|
24
|
+
${w.path
|
|
25
|
+
? `<div class="picked-path"><span class="ws-ico">${svg(IC.folderOpen)}</span>
|
|
26
|
+
<div style="min-width:0"><b>${esc(w.path.replace(/[\\/]+$/, '').split(/[\\/]/).pop())}</b><div class="hint mono" style="word-break:break-all">${esc(w.path)}</div></div></div>
|
|
27
|
+
<button class="btn primary" id="wsPick" style="margin-top:8px">${svg(IC.folder, 14)} 重新选择文件夹</button>`
|
|
28
|
+
: `<button class="btn primary" id="wsPick" style="width:100%;justify-content:center">${svg(IC.folder, 14)} 选择文件夹</button>`}
|
|
29
|
+
<label class="fld" style="margin-top:16px">工作区名称</label>
|
|
30
|
+
<input type="text" id="wsName" value="${esc(w.name)}" placeholder="如 电商项目">
|
|
31
|
+
<div class="mini-note" style="margin-top:6px">名称用于在工作区列表中识别,可随时修改。</div>
|
|
32
|
+
${w.path ? '' : '<div class="mini-note" style="margin-top:10px">如需更换目录,请点击上方按钮重新选择。</div>'}`,
|
|
33
|
+
footHtml: `<span class="sp"></span><button class="btn" id="wsMCancel">取消</button><button class="btn primary" id="wsMOk">${isNew ? '确认添加' : '保存'}</button>`,
|
|
34
|
+
});
|
|
35
|
+
$('#wsPick').onclick = async () => {
|
|
36
|
+
const picked = await pickDirectory(w.path || '');
|
|
37
|
+
if (picked == null) return; // 取消选择:留在弹窗,原路径不动
|
|
38
|
+
w.path = picked;
|
|
39
|
+
if (!w.name) w.name = picked.replace(/[\\/]+$/, '').split(/[\\/]/).pop() || '';
|
|
40
|
+
paint();
|
|
41
|
+
$('#wsName').value = w.name;
|
|
42
|
+
};
|
|
43
|
+
$('#wsMCancel').onclick = closeModal;
|
|
44
|
+
$('#wsMOk').onclick = () => {
|
|
45
|
+
if (!w.path) return toast('请先选择文件夹', true);
|
|
46
|
+
w.name = $('#wsName').value.trim();
|
|
47
|
+
if (!w.name) return toast('请填写工作区名称', true);
|
|
48
|
+
if (isNew) doc.workspaces.push({ ...w });
|
|
49
|
+
else doc.workspaces[idx] = { ...w };
|
|
50
|
+
// 改名联动:全局默认指向旧名时同步,否则保存会因 defaults.workspace 不在工作区列表报错
|
|
51
|
+
if (!isNew && doc.defaults?.workspace && doc.defaults.workspace === old.name) {
|
|
52
|
+
doc.defaults = { ...(doc.defaults || {}), workspace: w.name };
|
|
53
|
+
cardDirty('def', true);
|
|
54
|
+
}
|
|
55
|
+
closeModal();
|
|
56
|
+
cardDirty('ws', true);
|
|
57
|
+
renderWorkspaces(el);
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
paint();
|
|
61
|
+
}
|
|
4
62
|
|
|
5
63
|
function renderWorkspaces(el) {
|
|
6
64
|
const doc = S.doc;
|
|
7
65
|
doc.workspaces = doc.workspaces || [];
|
|
66
|
+
const defWs = doc.defaults?.workspace || '';
|
|
8
67
|
el.innerHTML = `
|
|
9
|
-
<div class="
|
|
10
|
-
<h3
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<table><thead><tr><th style="width:180px">名字</th><th>路径</th><th style="width:50px"></th></tr></thead>
|
|
16
|
-
<tbody id="wsBody"></tbody></table>
|
|
68
|
+
<div class="panel">
|
|
69
|
+
<header class="panel-head"><h3>工作区目录${dirtyDotHtml('ws')}</h3>
|
|
70
|
+
<span class="panel-sub">选择本机文件夹并设置一个便于识别的名称</span>
|
|
71
|
+
<div class="panel-actions"><button class="btn primary sm" id="wsAdd">+ 添加工作区</button></div>
|
|
72
|
+
</header>
|
|
73
|
+
<div class="panel-body"><div class="ws-list" id="wsList"></div></div>
|
|
17
74
|
${saveBarHtml('ws')}
|
|
18
|
-
<
|
|
75
|
+
<footer class="panel-foot">${svg(IC.info, 13)} git 仓库工作区的任务收尾会自动发送汇总 diff 卡片;运行中的桥接器下一条消息自动生效,无需重启。</footer>
|
|
19
76
|
</div>
|
|
20
|
-
<div class="
|
|
21
|
-
<h3>全局默认${dirtyDotHtml('def')}</h3>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
<div
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
77
|
+
<div class="panel">
|
|
78
|
+
<header class="panel-head"><h3>全局默认${dirtyDotHtml('def')}</h3>
|
|
79
|
+
<span class="panel-sub">用于新会话的默认行为;默认工作区在上方列表行内「设为默认」</span></header>
|
|
80
|
+
<div class="panel-body">
|
|
81
|
+
<div class="grid3">
|
|
82
|
+
<div><label class="fld">全局并发(concurrency)</label><input type="number" id="globalCc" min="1" max="100"></div>
|
|
83
|
+
<div><label class="fld">上下文提醒阈值(session.context_remind_tokens;0=关闭)</label><input type="number" id="defCtxRemind" min="0" max="10000000"></div>
|
|
84
|
+
<div><label class="fld">飞书卡片宽度(card.width)</label>
|
|
85
|
+
<select id="cardWidth">
|
|
86
|
+
<option value="default">默认(飞书默认)</option>
|
|
87
|
+
<option value="fill">撑满聊天窗口</option>
|
|
88
|
+
</select>
|
|
89
|
+
</div>
|
|
31
90
|
</div>
|
|
32
91
|
</div>
|
|
33
92
|
${saveBarHtml('def')}
|
|
34
93
|
</div>`;
|
|
35
94
|
bindSaveBar(el, 'ws');
|
|
36
95
|
bindSaveBar(el, 'def');
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
</div></td>
|
|
56
|
-
<td><button class="btn sm danger">删除</button></td>`;
|
|
57
|
-
tr.querySelectorAll('[data-f]').forEach((input) => {
|
|
58
|
-
input.oninput = input.onchange = () => {
|
|
59
|
-
const f = input.dataset.f;
|
|
60
|
-
if (f === 'name') {
|
|
61
|
-
// 改名联动:全局默认指向旧名时同步,否则保存会因 defaults.workspace 不在工作区列表报错
|
|
62
|
-
if (doc.defaults?.workspace && doc.defaults.workspace === ws.name) {
|
|
63
|
-
doc.defaults = { ...(doc.defaults || {}), workspace: input.value };
|
|
64
|
-
}
|
|
65
|
-
ws.name = input.value;
|
|
66
|
-
syncDefWsOptions();
|
|
67
|
-
}
|
|
68
|
-
else ws[f] = input.value;
|
|
69
|
-
cardDirty('ws', true);
|
|
70
|
-
};
|
|
96
|
+
const drawRows = () => {
|
|
97
|
+
$('#wsList').innerHTML = doc.workspaces.map((w, i) => `
|
|
98
|
+
<div class="ws-item">
|
|
99
|
+
<span class="ws-ico">${svg(IC.folder)}</span>
|
|
100
|
+
<div class="ws-main">
|
|
101
|
+
<div class="ws-name">${esc(w.name) || '<span class="mut">(未命名)</span>'} ${defWs === w.name ? '<span class="tag ok">默认</span>' : ''}</div>
|
|
102
|
+
<div class="ws-path">${esc(w.path) || '(未选择目录)'}</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="ws-ops">
|
|
105
|
+
${defWs === w.name ? '' : `<button class="btn sm" data-wdef="${i}">设为默认</button>`}
|
|
106
|
+
<button class="btn sm" data-wedit="${i}">修改</button>
|
|
107
|
+
<button class="btn sm danger" data-wdel="${i}">删除</button>
|
|
108
|
+
</div>
|
|
109
|
+
</div>`).join('') || '<div class="empty">暂无工作区,点右上「+ 添加工作区」开始</div>';
|
|
110
|
+
$('#wsList').querySelectorAll('[data-wdef]').forEach((b) => b.onclick = () => {
|
|
111
|
+
doc.defaults = { ...(doc.defaults || {}), workspace: doc.workspaces[Number(b.dataset.wdef)].name };
|
|
112
|
+
cardDirty('def', true);
|
|
113
|
+
renderWorkspaces(el);
|
|
71
114
|
});
|
|
72
|
-
|
|
73
|
-
|
|
115
|
+
$('#wsList').querySelectorAll('[data-wedit]').forEach((b) => b.onclick = () => wsFolderModal(doc, Number(b.dataset.wedit), el));
|
|
116
|
+
$('#wsList').querySelectorAll('[data-wdel]').forEach((b) => b.onclick = async () => {
|
|
74
117
|
if (doc.workspaces.length <= 1) return toast('至少保留一个工作区', true);
|
|
118
|
+
const idx = Number(b.dataset.wdel);
|
|
119
|
+
const w = doc.workspaces[idx];
|
|
75
120
|
if (!(await confirmDialog({
|
|
76
121
|
title: '删除工作区',
|
|
77
|
-
message: `确定删除工作区「${esc(
|
|
122
|
+
message: `确定删除工作区「${esc(w.name || '未命名')}」?随本卡「保存」生效,保存前可点「还原」撤销。`,
|
|
78
123
|
danger: true,
|
|
79
124
|
confirmText: '删除',
|
|
80
125
|
}))) return;
|
|
81
126
|
doc.workspaces.splice(idx, 1);
|
|
127
|
+
// 删除的是默认工作区:默认顺移到剩余第一个,避免保存时 defaults.workspace 悬空报错
|
|
128
|
+
if (doc.defaults?.workspace === w.name) {
|
|
129
|
+
doc.defaults = { ...(doc.defaults || {}), workspace: doc.workspaces[0]?.name || '' };
|
|
130
|
+
cardDirty('def', true);
|
|
131
|
+
toast('已同步切换全局默认工作区,请一并保存', true);
|
|
132
|
+
}
|
|
82
133
|
cardDirty('ws', true);
|
|
83
134
|
renderWorkspaces(el);
|
|
84
|
-
};
|
|
85
|
-
// 浏览选目录:回填后手动同步 ws.path(直接改 input.value 不触发 oninput)
|
|
86
|
-
tr.querySelector('[data-browse]').onclick = async () => {
|
|
87
|
-
const picked = await pickDirectory(ws.path || '');
|
|
88
|
-
if (picked == null) return;
|
|
89
|
-
ws.path = picked;
|
|
90
|
-
tr.querySelector('input[data-f=path]').value = picked;
|
|
91
|
-
cardDirty('ws', true);
|
|
92
|
-
};
|
|
93
|
-
body.appendChild(tr);
|
|
135
|
+
});
|
|
94
136
|
};
|
|
95
|
-
|
|
96
|
-
$('#wsAdd').onclick = () =>
|
|
97
|
-
syncDefWsOptions();
|
|
98
|
-
$('#defWs').onchange = () => { doc.defaults = { ...(doc.defaults || {}), workspace: $('#defWs').value }; cardDirty('def', true); };
|
|
137
|
+
drawRows();
|
|
138
|
+
$('#wsAdd').onclick = () => wsFolderModal(doc, -1, el);
|
|
99
139
|
$('#globalCc').value = doc.concurrency ?? 3;
|
|
100
140
|
$('#globalCc').oninput = () => { doc.concurrency = Number($('#globalCc').value) || 3; cardDirty('def', true); };
|
|
101
141
|
// 上下文提醒阈值:空值 = 移除 session 段(PUT 跳过 = 磁盘原值未变,等价回滚);合法数字 = 写 session 段
|
|
@@ -117,6 +157,7 @@ function renderWorkspaces(el) {
|
|
|
117
157
|
export const page = {
|
|
118
158
|
id: 'workspaces',
|
|
119
159
|
title: '工作区',
|
|
160
|
+
desc: 'Claude 的工作目录白名单与全局默认',
|
|
120
161
|
icon: '<path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>',
|
|
121
162
|
render: renderWorkspaces,
|
|
122
163
|
};
|
package/assets/web/js/theme.js
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
// ============
|
|
2
|
-
|
|
1
|
+
// ============ 主题切换:亮 / 暗单按钮(原型同款),localStorage 持久化 ============
|
|
2
|
+
import { $ } from './core.js';
|
|
3
|
+
|
|
3
4
|
const KEY = 'lcb-theme';
|
|
4
|
-
const mq = window.matchMedia('(prefers-color-scheme: dark)');
|
|
5
|
-
let current = 'auto';
|
|
6
5
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
6
|
+
const IC_SUN = '<circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.3 11.3 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4m11.3-11.3 1.4-1.4"/>';
|
|
7
|
+
const IC_MOON = '<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/>';
|
|
8
|
+
const svg = (inner) => `<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${inner}</svg>`;
|
|
9
|
+
|
|
10
|
+
function apply(theme) {
|
|
11
|
+
document.documentElement.dataset.theme = theme;
|
|
12
|
+
const btn = $('#themeBtn');
|
|
13
|
+
if (btn) btn.innerHTML = svg(theme === 'dark' ? IC_SUN : IC_MOON); // 暗色时显示「切回亮色」的太阳
|
|
14
|
+
}
|
|
16
15
|
|
|
17
|
-
/** main.js 启动时调用一次:恢复上次选择 + 绑定切换
|
|
16
|
+
/** main.js 启动时调用一次:恢复上次选择 + 绑定切换 */
|
|
18
17
|
export function initTheme() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
let saved = null;
|
|
19
|
+
try { saved = localStorage.getItem(KEY); } catch { /* 隐私模式等:读失败按默认 */ }
|
|
20
|
+
apply(saved === 'dark' ? 'dark' : 'light');
|
|
21
|
+
$('#themeBtn').onclick = () => {
|
|
22
|
+
const next = document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark';
|
|
23
|
+
apply(next);
|
|
24
|
+
try { localStorage.setItem(KEY, next); } catch { /* 写失败可容忍 */ }
|
|
25
|
+
};
|
|
23
26
|
}
|
package/assets/web/js/ui.js
CHANGED
|
@@ -90,7 +90,7 @@ const joinPath = (base, name) => {
|
|
|
90
90
|
return base.replace(/[\\/]+$/, '') + sepCh + name;
|
|
91
91
|
};
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
93
|
+
* 打开目录浏览弹层(文件管理器风格):盘符/根层 → 逐级进入 → 「选择此目录」确定。
|
|
94
94
|
* resolve(选中的绝对路径) / resolve(null)(取消)。手输路径可直接跳转,
|
|
95
95
|
* 路径不存在等错误在弹层内联提示(不关层、可改可回退)。
|
|
96
96
|
*/
|
|
@@ -99,64 +99,97 @@ export function pickDirectory(initialPath) {
|
|
|
99
99
|
const mask = document.createElement('div');
|
|
100
100
|
mask.className = 'modal-mask';
|
|
101
101
|
mask.innerHTML = `
|
|
102
|
-
<div class="modal" role="dialog" aria-modal="true">
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
<
|
|
106
|
-
<button class="btn pd-go" title="跳转到输入的路径">前往</button>
|
|
107
|
-
<button class="btn pd-up" title="返回上一级">上级目录</button>
|
|
102
|
+
<div class="modal dp" role="dialog" aria-modal="true" style = "padding:30px;">
|
|
103
|
+
<div class="dp-head">
|
|
104
|
+
<b>选择目录</b>
|
|
105
|
+
<span class="dp-path mono" title=""></span>
|
|
108
106
|
</div>
|
|
109
|
-
<div class="
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
<div class="dp-toolbar">
|
|
108
|
+
<input type="text" class="dp-jump" placeholder="输入或粘贴路径,回车前往">
|
|
109
|
+
<button class="btn sm dp-go" title="跳转到输入的路径">前往</button>
|
|
110
|
+
<button class="btn sm dp-up" title="返回上一级">上级</button>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="dp-grid"><div class="dp-empty">加载中…</div></div>
|
|
113
|
+
<div class="dp-foot">
|
|
114
|
+
<span class="hint dp-note"></span>
|
|
115
|
+
<span style="flex:1"></span>
|
|
116
|
+
<button class="btn dp-cancel">取消</button>
|
|
117
|
+
<button class="btn primary dp-ok">选择此目录</button>
|
|
115
118
|
</div>
|
|
116
119
|
</div>`;
|
|
117
120
|
document.body.appendChild(mask);
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
const upBtn = mask.querySelector('.
|
|
121
|
-
const okBtn = mask.querySelector('.
|
|
122
|
-
const note = mask.querySelector('.
|
|
123
|
-
const jumpInput = mask.querySelector('.
|
|
121
|
+
const grid = mask.querySelector('.dp-grid');
|
|
122
|
+
const pathEl = mask.querySelector('.dp-path');
|
|
123
|
+
const upBtn = mask.querySelector('.dp-up');
|
|
124
|
+
const okBtn = mask.querySelector('.dp-ok');
|
|
125
|
+
const note = mask.querySelector('.dp-note');
|
|
126
|
+
const jumpInput = mask.querySelector('.dp-jump');
|
|
127
|
+
const FOLDER_SVG = '<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/></svg>';
|
|
124
128
|
let current = ''; // '' = 盘符/根层(此层不可作为选择结果)
|
|
125
129
|
let currentParent = null;
|
|
126
130
|
const close = (val) => { mask.remove(); resolveP(val); };
|
|
127
131
|
const render = (r) => {
|
|
128
132
|
current = r.path || '';
|
|
129
133
|
currentParent = r.parent;
|
|
130
|
-
|
|
134
|
+
const curText = r.drives ? '此电脑(选择一个盘符)' : (r.path || '');
|
|
135
|
+
pathEl.textContent = curText;
|
|
136
|
+
pathEl.title = curText;
|
|
131
137
|
upBtn.hidden = !r.parent;
|
|
132
138
|
okBtn.disabled = !current;
|
|
133
139
|
note.textContent = r.error || '';
|
|
134
140
|
const items = r.drives
|
|
135
141
|
? r.drives.map((d) => ({ label: d, next: d }))
|
|
136
142
|
: (r.dirs || []).map((d) => ({ label: d, next: joinPath(current, d) }));
|
|
137
|
-
|
|
138
|
-
? items.map((it) => `<button data-next="${esc(it.next)}">${esc(it.label)}</button>`).join('')
|
|
139
|
-
: `<div class="empty">${r.error ? '(上述路径无法列出子目录)' : '(没有子目录)'}</div>`;
|
|
140
|
-
|
|
143
|
+
grid.innerHTML = items.length
|
|
144
|
+
? items.map((it) => `<button type="button" class="dp-item" data-next="${esc(it.next)}" title="${esc(it.next)}">${FOLDER_SVG}<span>${esc(it.label)}</span></button>`).join('')
|
|
145
|
+
: `<div class="dp-empty">${r.error ? '(上述路径无法列出子目录)' : '(没有子目录)'}</div>`;
|
|
146
|
+
grid.querySelectorAll('.dp-item').forEach((b) => b.onclick = () => go(b.dataset.next));
|
|
141
147
|
};
|
|
142
148
|
const go = async (p) => {
|
|
143
|
-
|
|
149
|
+
grid.innerHTML = '<div class="dp-empty">加载中…</div>';
|
|
144
150
|
try { render(await api('GET', `/api/fs/dirs?p=${encodeURIComponent(p)}`)); }
|
|
145
|
-
catch (e) {
|
|
151
|
+
catch (e) { grid.innerHTML = `<div class="dp-empty">加载失败:${esc(e.message)}</div>`; }
|
|
146
152
|
};
|
|
147
153
|
const jump = () => { const v = jumpInput.value.trim(); if (v) go(v); };
|
|
148
|
-
mask.querySelector('.
|
|
154
|
+
mask.querySelector('.dp-go').onclick = jump;
|
|
149
155
|
jumpInput.onkeydown = (e) => { if (e.key === 'Enter') { e.preventDefault(); jump(); } };
|
|
150
156
|
upBtn.onclick = () => { if (currentParent) go(currentParent); };
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
157
|
+
// 关闭统一走 closeWithUnbind:弹层销毁时解绑捕获段按键监听
|
|
158
|
+
const unbind = bindDialogKeys((k) => { if (k === 'Escape') close(null); });
|
|
159
|
+
const closeWithUnbind = (val) => { unbind(); close(val); };
|
|
160
|
+
okBtn.onclick = () => { if (current) closeWithUnbind(current); };
|
|
161
|
+
mask.querySelector('.dp-cancel').onclick = () => closeWithUnbind(null);
|
|
162
|
+
mask.onclick = (e) => { if (e.target === mask) closeWithUnbind(null); };
|
|
154
163
|
// 初始位置:现值路径存在则从它开始,否则停在盘符/根层(跳转框预填现值方便改错)
|
|
155
164
|
jumpInput.value = initialPath || '';
|
|
156
165
|
go(initialPath || '');
|
|
166
|
+
jumpInput.focus();
|
|
157
167
|
});
|
|
158
168
|
}
|
|
159
169
|
|
|
170
|
+
// ============ 通用居中弹窗(挂壳层 #modalMask;CLI 授权 / 设置 / 改密 / 工作区选目录用) ============
|
|
171
|
+
let modalOnClose = null;
|
|
172
|
+
/** 打开通用居中弹窗。width 例:'min(460px,92vw)';closeOnMask=false 时点遮罩不关(强制引导类) */
|
|
173
|
+
export function openModal({ title, bodyHtml, footHtml, width = '', onClose = null, closeOnMask = true }) {
|
|
174
|
+
$('#modalTitle').textContent = title;
|
|
175
|
+
$('#modalBody').innerHTML = bodyHtml;
|
|
176
|
+
$('#modalFoot').innerHTML = footHtml || '';
|
|
177
|
+
$('#modalBox').style.width = width || '';
|
|
178
|
+
modalOnClose = onClose || null;
|
|
179
|
+
$('#modalMask').dataset.closeOnMask = closeOnMask ? '1' : '';
|
|
180
|
+
$('#modalMask').hidden = false;
|
|
181
|
+
return $('#modalBody');
|
|
182
|
+
}
|
|
183
|
+
export function closeModal() {
|
|
184
|
+
if ($('#modalMask').hidden) return;
|
|
185
|
+
$('#modalMask').hidden = true;
|
|
186
|
+
$('#modalBox').style.width = '';
|
|
187
|
+
const f = modalOnClose;
|
|
188
|
+
modalOnClose = null;
|
|
189
|
+
f?.();
|
|
190
|
+
}
|
|
191
|
+
export const isModalOpen = () => !$('#modalMask').hidden;
|
|
192
|
+
|
|
160
193
|
// ============ 通用右侧抽屉(应用编辑 / 斜杆命令编辑 / 档案编辑共用) ============
|
|
161
194
|
let drawerOnMount = null;
|
|
162
195
|
let drawerSnap = null; // 抽屉打开前的 doc 快照(取消回滚用;远端 CRUD 抽屉不传 snap 则不回滚)
|
|
@@ -233,8 +266,18 @@ function initDrawerResize() {
|
|
|
233
266
|
export function initDrawer() {
|
|
234
267
|
$('#drawerClose').onclick = dismissDrawer;
|
|
235
268
|
$('#drawerMask').addEventListener('mousedown', (e) => { if (e.target === e.currentTarget) dismissDrawer(); });
|
|
236
|
-
// ESC
|
|
237
|
-
|
|
269
|
+
// 通用弹窗关闭路径:X / 点遮罩(closeOnMask 才关)/ ESC;层级 = 确认框 > 弹窗 > 抽屉
|
|
270
|
+
$('#modalClose').onclick = closeModal;
|
|
271
|
+
$('#modalMask').addEventListener('mousedown', (e) => {
|
|
272
|
+
if (e.target === e.currentTarget && $('#modalMask').dataset.closeOnMask) closeModal();
|
|
273
|
+
});
|
|
274
|
+
// ESC 分层:风格化弹窗(确认/输入/进度)自己在捕获段拦截;其次通用弹窗;最后抽屉
|
|
275
|
+
document.addEventListener('keydown', (e) => {
|
|
276
|
+
if (e.key !== 'Escape') return;
|
|
277
|
+
if (openDialogs) return;
|
|
278
|
+
if (isModalOpen()) { closeModal(); return; }
|
|
279
|
+
dismissDrawer();
|
|
280
|
+
});
|
|
238
281
|
initDrawerResize();
|
|
239
282
|
}
|
|
240
283
|
|
|
@@ -42,11 +42,29 @@ export declare class AccessControl {
|
|
|
42
42
|
addUser(userId: string, name: string, role: 'admin' | 'member', appId?: string): void;
|
|
43
43
|
/** 历史用户记录缺 appId 时按当前来路补登(老版本 access.json 的平滑迁移) */
|
|
44
44
|
ensureAppId(userId: string, appId: string): void;
|
|
45
|
+
/** 待审列表(配置页「接入申请」用):带过期时刻与来源应用,供前端算剩余有效期/按机器人分组 */
|
|
46
|
+
listPendingDetailed(): Array<{
|
|
47
|
+
userId: string;
|
|
48
|
+
name: string;
|
|
49
|
+
code: string;
|
|
50
|
+
expiresAt: number;
|
|
51
|
+
appId?: string;
|
|
52
|
+
}>;
|
|
45
53
|
listPending(): Array<{
|
|
46
54
|
userId: string;
|
|
47
55
|
name: string;
|
|
48
56
|
code: string;
|
|
49
57
|
}>;
|
|
58
|
+
/**
|
|
59
|
+
* 当前配置的管理员(配对码私发对象):该应用**最早**成为 admin 的用户——
|
|
60
|
+
* 即首个使用者(产品语义=应用创建人)。按 appId 过滤为空(老数据缺 appId)时
|
|
61
|
+
* 回退全部 admin 中最早者。只发这一个人,不群发所有 admin(主人拍板 2026-10-17)
|
|
62
|
+
*/
|
|
63
|
+
primaryAdmin(appId?: string): {
|
|
64
|
+
userId: string;
|
|
65
|
+
name: string;
|
|
66
|
+
} | null;
|
|
67
|
+
/** 发起配对:已有未过期申请则复用原码(用户连发消息不换码,管理员侧通知可节流) */
|
|
50
68
|
beginPairing(userId: string, name: string, appId?: string): string;
|
|
51
69
|
approvePairing(code: string): {
|
|
52
70
|
ok: boolean;
|
|
@@ -71,12 +71,41 @@ export class AccessControl {
|
|
|
71
71
|
this.save();
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
+
/** 待审列表(配置页「接入申请」用):带过期时刻与来源应用,供前端算剩余有效期/按机器人分组 */
|
|
75
|
+
listPendingDetailed() {
|
|
76
|
+
this.evict();
|
|
77
|
+
return Object.values(this.data.pending).map(({ userId, name, code, expiresAt, appId }) => ({ userId, name, code, expiresAt, ...(appId ? { appId } : {}) }));
|
|
78
|
+
}
|
|
74
79
|
listPending() {
|
|
75
80
|
this.evict();
|
|
76
81
|
return Object.values(this.data.pending).map(({ userId, name, code }) => ({ userId, name, code }));
|
|
77
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* 当前配置的管理员(配对码私发对象):该应用**最早**成为 admin 的用户——
|
|
85
|
+
* 即首个使用者(产品语义=应用创建人)。按 appId 过滤为空(老数据缺 appId)时
|
|
86
|
+
* 回退全部 admin 中最早者。只发这一个人,不群发所有 admin(主人拍板 2026-10-17)
|
|
87
|
+
*/
|
|
88
|
+
primaryAdmin(appId) {
|
|
89
|
+
const byOldest = (list) => list.sort((a, b) => (a[1].pairedAt || '').localeCompare(b[1].pairedAt || ''));
|
|
90
|
+
const adminsOf = (pred) => byOldest(Object.entries(this.data.users).filter(([, u]) => u.role === 'admin' && pred(u)));
|
|
91
|
+
const pick = adminsOf((u) => appId === undefined || u.appId === appId)[0]
|
|
92
|
+
?? adminsOf(() => true)[0];
|
|
93
|
+
return pick ? { userId: pick[0], name: pick[1].name } : null;
|
|
94
|
+
}
|
|
95
|
+
/** 发起配对:已有未过期申请则复用原码(用户连发消息不换码,管理员侧通知可节流) */
|
|
78
96
|
beginPairing(userId, name, appId) {
|
|
79
97
|
this.evict();
|
|
98
|
+
const existing = this.data.pending[userId];
|
|
99
|
+
if (existing && existing.expiresAt > Date.now()) {
|
|
100
|
+
if (appId && !existing.appId)
|
|
101
|
+
existing.appId = appId;
|
|
102
|
+
// 真名升级:早期记录曾把 open_id 当 name 落库(解析失败降级)——后续解析出真名即覆盖,
|
|
103
|
+
// 配置页/通知随之显示真名;已存真名(用户自填或先到先解析)永不被 ou_ 串回写
|
|
104
|
+
if (name && !name.startsWith('ou_') && existing.name.startsWith('ou_'))
|
|
105
|
+
existing.name = name;
|
|
106
|
+
this.save();
|
|
107
|
+
return existing.code;
|
|
108
|
+
}
|
|
80
109
|
const code = String(randomInt(0, 1_000_000)).padStart(6, '0');
|
|
81
110
|
this.data.pending[userId] = { userId, name, code, expiresAt: Date.now() + TTL_MS, ...(appId ? { appId } : {}) };
|
|
82
111
|
this.save();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/access/access-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/access/access-control.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/lcb.js
CHANGED
|
@@ -11,6 +11,7 @@ import { startBridge } from '../index.js';
|
|
|
11
11
|
import { loadConfig, CONFIG_PATH, CONFIG_DIR } from '../config.js';
|
|
12
12
|
import { initManagedClaudeDir } from '../claude-config.js';
|
|
13
13
|
import { startWebServer } from '../web/server.js';
|
|
14
|
+
import { resetPasswordToDefault } from '../web/webauth.js';
|
|
14
15
|
import { AccessControl } from '../access/access-control.js';
|
|
15
16
|
import { VERSION } from '../version.js';
|
|
16
17
|
import { join } from 'node:path';
|
|
@@ -84,6 +85,19 @@ async function main() {
|
|
|
84
85
|
console.log('按 Ctrl+C 退出配置页');
|
|
85
86
|
break;
|
|
86
87
|
}
|
|
88
|
+
case 'reset-password': {
|
|
89
|
+
// 忘记配置页密码的兜底:恢复初始密码 123456(下次登录会再次引导修改)。
|
|
90
|
+
// 只有能登上这台机器的人才能执行——内网里隔着浏览器的人做不到,因此是安全的恢复通道
|
|
91
|
+
const r = resetPasswordToDefault(CONFIG_PATH);
|
|
92
|
+
if (!r.ok) {
|
|
93
|
+
console.error(`❌ ${r.error}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
console.log('✅ 配置页密码已恢复为初始密码 123456');
|
|
97
|
+
console.log('注:webauth.json 每次校验现读现验,配置页无需重启,刷新页面输入 123456 即可进入;');
|
|
98
|
+
console.log(' 登录后会再次引导你设置新密码。');
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
87
101
|
case 'pair': {
|
|
88
102
|
const access = AccessControl.load(join(CONFIG_DIR, 'access.json'));
|
|
89
103
|
const code = args[0];
|
|
@@ -220,6 +234,7 @@ async function main() {
|
|
|
220
234
|
lcb setup 引导式配置(命令行问答,支持多个机器人应用)
|
|
221
235
|
lcb start 启动桥接器(前台;含 Web 配置页,首次安装自动进入引导)
|
|
222
236
|
lcb ui 仅启动 Web 配置页(可与运行中的桥接器共存)
|
|
237
|
+
lcb reset-password 配置页密码忘记时,恢复初始密码 123456
|
|
223
238
|
lcb pair <code> 批准配对码
|
|
224
239
|
lcb app list 列出机器人应用
|
|
225
240
|
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":"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
|
|
1
|
+
{"version":3,"file":"lcb.js","sourceRoot":"","sources":["../../src/bin/lcb.ts"],"names":[],"mappings":"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"}
|