@jesonliu/lark-claudecode-bridge 1.4.1 → 1.4.3

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.
@@ -24,7 +24,7 @@ const DOC_URL = 'https://github.com/volcengine/OpenViking';
24
24
 
25
25
  /** 探活失败分类 → 下一步行动建议(后端 reason 驱动;not-running 由状态机接管,不在此列) */
26
26
  const REASON_HINT = {
27
- auth: '鉴权失败——api_key 模式下网页/机器人各需一把用户密钥。点「用户与密钥」Tab 一键初始化,或检查 ov.conf 的 root key 与本页保存的 API Key 是否一致',
27
+ auth: '鉴权失败——api_key 模式下网页/机器人各需一把用户密钥。点「用户与密钥」Tab 一键初始化,或检查 ov.conf 的 root key 与本页保存的 API Key 是否一致。(若是在 1933 的 Studio 里登录被拒:要填的是 **Root 或账号管理员 API 密钥**,见「用户与密钥」Tab 顶部的「连接 OpenViking Studio」指引卡,一键复制即可)',
28
28
  timeout: '服务无响应——进程可能卡死,可「一键检查 / 修复」重拉',
29
29
  unreachable: '端点不可达——检查服务端点地址与网络(远程模式常见),或服务是否监听该地址',
30
30
  'http-error': '服务返回异常状态码——可「一键检查 / 修复」重拉,或查看服务日志定位',
@@ -533,6 +533,12 @@ function renderInstalled(el, { st, m, model, inst, state, meta, remoteConfigured
533
533
  ? `LCB 受管${inst.managedRunning ? '' : ' <span class="hint">(未运行)</span>'}`
534
534
  : `外部自管 <span class="hint">非 LCB 拉起</span>`),
535
535
  ...(inst.managedSince ? [infoCell('clock', '运行时间', esc(fmtSince(inst.managedSince)))] : []),
536
+ // 随 LCB 启动的自动拉起结果:成功只作留痕,失败把「手动开启指引」摆到状态区
537
+ // (自举失败不阻断 LCB,用户必须能从页面一眼看到该去哪手动起)
538
+ ...(inst.autoStart ? [infoCell('clock', '启动自举', inst.autoStart.ready
539
+ ? `<span style="color:var(--ok-tx);font-weight:600">✓</span> 随 LCB 自动拉起 <span class="hint">${esc(fmtSince(inst.autoStart.at))}</span>`
540
+ : `<span style="color:var(--warn-tx);font-weight:600">⚠ 未就绪</span> <span class="hint" title="${esc(inst.autoStart.hint || '')}">${esc(inst.autoStart.detail)}</span>`
541
+ + `${inst.autoStart.hint ? `<div class="hint" style="margin-top:2px">手动开启:${esc(inst.autoStart.hint)}</div>` : ''}`)] : []),
536
542
  ...(st.health?.authMode ? [infoCell('server', '鉴权模式', `${esc(st.health.authMode)}${authNote ? ` <span class="hint" title="${esc(authNote)}">ⓘ</span>` : ''}`)] : []),
537
543
  infoCell('spark', '记忆插件', (st.plugin?.found
538
544
  ? `<span style="white-space:nowrap;display:inline-flex;align-items:center;gap:6px"><span style="color:var(--ok-tx);font-weight:600">✓</span><code>${esc(st.plugin.name)}</code>${st.plugin.version ? `<span class="hint">v${esc(st.plugin.version)}</span>` : ''}${st.plugin.source && PLUGIN_SOURCE_LABEL[st.plugin.source] ? `<span class="hint" title="实际加载渠道:与机器人任务装配一致">${esc(PLUGIN_SOURCE_LABEL[st.plugin.source])}</span>` : ''}</span>`
@@ -693,15 +699,85 @@ function userRowHtml(u) {
693
699
  <span class="hint">${keyState}</span>
694
700
  </div>
695
701
  <div class="hint" style="margin-top:3px">${meta}</div>
702
+ <div class="hint" style="margin-top:2px">${u.kind === 'web'
703
+ ? '用途:网页端(Studio 记忆空间 / 文件系统页)用它这把'
704
+ : u.kind === 'bot'
705
+ ? `用途:飞书会话由 LCB 自动注入(无须手填);想在本页看它的记忆,点右侧「打开记忆空间」以 <code>${esc(u.userId)}</code> 身份进入——与其他机器人的记忆完全隔离`
706
+ : '用途:历史聊天者身份'}</div>
696
707
  </div>
697
- <button class="btn sm primary" data-open="${esc(u.userId)}" title="密钥进剪贴板 + 自动打开记忆空间(文件系统页),粘贴一次即可连接">打开记忆空间</button>
708
+ <button class="btn sm primary" data-open="${esc(u.userId)}" title="以「${esc(displayName)}」的身份进入记忆空间:该密钥进剪贴板并自动打开 Studio 文件系统页,粘贴一次即连接。打开的是这一个身份自己的记忆,与其他机器人完全隔离">打开记忆空间</button>
698
709
  <button class="btn sm" data-copy="${esc(u.userId)}" title="复制密钥(脱敏显示,此操作会留痕)">⧉ 复制key</button>
699
710
  <button class="btn sm" data-reset="${esc(u.userId)}" title="重签密钥:旧密钥立即失效,所有使用方需同步更新">重置</button>
700
711
  <button class="btn sm danger" data-del="${esc(u.userId)}" title="删除用户与记忆(先自动备份本地数据)">删除</button>
701
712
  </div>`;
702
713
  }
703
714
 
704
- /** Tab2 主渲染:一键初始化 + 用户列表(网页管理 / 机器人分组)+ 粒度向导 */
715
+ /**
716
+ * 「连接 1933 网页控制台」指引卡 —— 回答两个问题:① Studio 那个框填哪把钥匙;② 为什么进去之后
717
+ * 身份显示 default 且切不了。
718
+ *
719
+ * 起因(用户实测卡点):
720
+ * - 登录框要「Root 或账号管理员 API 密钥」,而本页此前没有任何 root key 线索,唯一长得像的
721
+ * 「模型配置 → API Key」是模型厂商 key,填进去必 401;
722
+ * - 用 Root key 进去后身份恒为 default,切不动 → 误以为「LCB 没按机器人隔离」。
723
+ *
724
+ * 事实(实弹探针 + Studio 前端文案双向确认):
725
+ * - **Root key 是单段 48 字符**(无 account/user 段),代表 default 账号的管理员;Studio 明说
726
+ * 「当前服务器模式不支持切换身份」,且「切换身份」不改 Root 管理凭证 → Root 登录态就是 default,
727
+ * 这是 Studio 的设计,不是 LCB 隔离失效;
728
+ * - **用户 key 是三段 base64url(account).user.secret**,每个机器人一把(user 段 = appId);
729
+ * 服务端磁盘 `data/viking/default/user/{appId}/` 一机一目录,记忆物理隔离。
730
+ * → 所以「看某个机器人的记忆」必须用**那个机器人的用户 key 登录**,不是「在 Root 里切换」。
731
+ */
732
+ function studioGuideCardHtml(rk, endpoint) {
733
+ const srcLabel = rk?.source === 'config' ? 'config.yaml 的 memory.api_key'
734
+ : rk?.source === 'ov-conf' ? '受管 ov.conf 的 server.root_api_key' : '';
735
+ const state = rk?.configured
736
+ ? `<span style="color:var(--ok-tx);font-weight:600">✓ 已配置</span> <span class="hint">来源:${esc(srcLabel)}</span>`
737
+ : '<span style="color:var(--danger);font-weight:600">✗ 未配置</span> <span class="hint">请到「服务与配置」点「检查修复」重新生成</span>';
738
+ const login = (title, badge, key, body, btn) => `
739
+ <div style="flex:1;min-width:280px;border:1px solid var(--border);border-radius:10px;padding:12px 14px">
740
+ <div style="font-size:13px;font-weight:700">${esc(title)} ${esc(badge)}</div>
741
+ <div class="hint" style="margin-top:6px;line-height:1.8">${body}</div>
742
+ <div style="margin-top:8px">${btn}</div>
743
+ </div>`;
744
+ return `<div class="card" style="margin-top:12px;border-left:3px solid var(--accent)">
745
+ <div style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">
746
+ <b style="font-size:13.5px">🌐 连接 OpenViking Studio(${esc((endpoint || DEFAULT_ENDPOINT).replace(/\/+$/, ''))}/studio)</b>
747
+ <span style="flex:1"></span>
748
+ <button class="btn sm" id="memCopyRoot" title="复制 Root 密钥到剪贴板(查看行为留痕)" ${rk?.configured ? '' : 'disabled style="opacity:.5;cursor:not-allowed"'}>⧉ 复制 Root 密钥</button>
749
+ <button class="btn sm primary" id="memOpenStudio" title="复制 Root 密钥 → 打开 Studio 新标签 → 在「Root 或账号管理员 API 密钥」框 Ctrl+V 即可进入">打开 Studio 并复制</button>
750
+ </div>
751
+ <div style="display:flex;gap:12px;flex-wrap:wrap;margin-top:10px">
752
+ ${login(
753
+ '登录方式一 · 管理员', 'Root 密钥',
754
+ 'root',
755
+ `用于<b>管理</b>:列出用户、复制/重置他人密钥、账号设置。<br>
756
+ 用它登录后,Studio 里的身份<b>固定显示为 <code>default</code>,且无法切换</b>——
757
+ 这是 Studio 的设计(管理员凭证不含具体用户身份),<b>不代表机器人记忆没隔离</b>。<br>
758
+ <span class="hint">密钥即受管 ov.conf 的 <code>server.root_api_key</code>;查看行为会留痕。</span>`,
759
+ `<button class="btn sm" data-root-copy title="复制 Root 密钥(查看行为留痕)" ${rk?.configured ? '' : 'disabled style="opacity:.5;cursor:not-allowed"'}>⧉ 复制 Root 密钥</button>`,
760
+ )}
761
+ ${login(
762
+ '登录方式二 · 查看某个机器人的记忆', '该机器人的用户密钥',
763
+ 'user',
764
+ `用于<b>浏览某一个机器人(或网页用户)自己的记忆空间</b>。<br>
765
+ 在下方用户列表点那一行的「打开记忆空间」,密钥自动进剪贴板并跳转,粘贴即以<b>该机器人身份</b>进入。<br>
766
+ <span class="hint">每个机器人一把独立密钥、一机一目录,数据物理隔离,互不可见。</span>`,
767
+ '<span class="hint">↓ 在下方「机器人」分组里点对应那一行的「打开记忆空间」</span>',
768
+ )}
769
+ </div>
770
+ <div class="hint" style="margin-top:10px;padding:8px 12px;background:var(--warn-bg);color:var(--warn-tx);border-radius:10px;line-height:1.7">
771
+ ⚠️ 两种登录态<b>不能互相切换</b>:想看 A 机器人的记忆就用 A 的密钥进,看 B 就用 B 的密钥进。
772
+ 用 Root 进去只会看到管理员(default)视角,看不到各机器人的记忆。<br>
773
+ ⚠️ <b>更不要填</b>「模型配置」里那个模型厂商 API Key(智谱等)——那是调用模型用的,与 OpenViking 鉴权无关。
774
+ </div>
775
+ <div class="hint" style="margin-top:8px;line-height:1.7">Root 密钥状态:${state}</div>
776
+ <div id="memRootStatus" class="hint" style="margin-top:4px;line-height:1.7"></div>
777
+ </div>`;
778
+ }
779
+
780
+ /** Tab2 主渲染:一键初始化 + Studio 接入指引 + 用户列表(网页管理 / 机器人分组)+ 粒度向导 */
705
781
  function renderUsersTab(el, { st, m }) {
706
782
  const u = usersSnapshot;
707
783
  const healthy = !!st.health?.healthy;
@@ -754,8 +830,9 @@ function renderUsersTab(el, { st, m }) {
754
830
  <div class="hint" style="margin-top:6px">ⓘ 1933 网页右上角的身份切换显示的是技术 ID(OpenViking 暂不支持显示名)——哪个 ID 对应哪台机器人,以本页对照为准。</div>
755
831
  ${u.authInitNeeded ? `<div class="hint" style="margin-top:10px;padding:9px 14px;background:var(--warn-bg);color:var(--warn-tx);border-radius:10px">🔑 待初始化鉴权:网页端用户(web)尚未创建——浏览器打开记忆空间会 401。点右上「⚡ 一键初始化」自动创建网页 + 各机器人用户并签发密钥。</div>` : ''}
756
832
  ${u.users.length === 0 && !u.authInitNeeded ? '<div class="hint" style="margin-top:12px">暂无用户——点「⚡ 一键初始化」创建。</div>' : ''}
757
- ${group('网页管理', webUsers, '浏览器打开记忆空间用')}
758
- ${group('机器人', botUsers, '每个 bot 一把独立密钥(升级 bot×人 后此处可展开聊天者维度)')}
833
+ ${studioGuideCardHtml(u.rootKey, m.endpoint)}
834
+ ${group('网页管理', webUsers, '浏览器打开记忆空间用这一把(Studio 里的「用户 API 密钥」也用它)')}
835
+ ${group('机器人', botUsers, '每个 bot 一把独立密钥;机器人会话由 LCB 自动注入,你不需要手填到任何地方')}
759
836
  ${group('聊天者与其他', otherUsers, '历史身份({appId}-{ou_xxx})已自动归属到对应机器人')}
760
837
  ${granularityCardHtml(gran)}
761
838
  </div>`;
@@ -805,6 +882,50 @@ function bindUsersTabActions(el, { m }) {
805
882
  await reload();
806
883
  };
807
884
 
885
+ // Root 密钥放行 → 剪贴板 →(可选)打开 Studio。后端顺带做了「拿这把 key 实打服务端」的校验,
886
+ // 结果直接回显在卡片里:拷贝即用,不必等 Studio 报 401 才回头猜是哪把钥匙不对
887
+ const showRootResult = (r) => {
888
+ const box = $('#memRootStatus');
889
+ if (!box) return;
890
+ if (r.valid === false) {
891
+ box.innerHTML = `<span style="color:var(--danger)">⚠ ${esc(r.validDetail || '这把 Root 密钥未通过服务端校验')}</span>`;
892
+ } else if (r.valid) {
893
+ box.innerHTML = `<span style="color:var(--ok-tx)">✓ 这把 Root 密钥已通过服务端校验,可直接粘贴</span>`;
894
+ }
895
+ };
896
+ const fetchRootKey = async () => {
897
+ const r = await api('POST', '/api/memory/users/reveal-root', {});
898
+ if (!r.ok || !r.key) { toast(r.error || 'Root 密钥未配置', true); return null; }
899
+ showRootResult(r);
900
+ return r.key;
901
+ };
902
+ const copyRoot = async () => {
903
+ try {
904
+ const key = await fetchRootKey();
905
+ if (!key) return;
906
+ try { await navigator.clipboard.writeText(key); } catch { return toast('Root 密钥已放行但剪贴板不可用——请手动复制', true); }
907
+ toast('Root 密钥已复制(查看行为已留痕)——到 Studio 的「Root 或账号管理员 API 密钥」框 Ctrl+V');
908
+ } catch (e) { toast(e.message, true); }
909
+ };
910
+ const openStudio = async () => {
911
+ try {
912
+ const key = await fetchRootKey();
913
+ if (!key) return;
914
+ let copied = true;
915
+ try { await navigator.clipboard.writeText(key); } catch { copied = false; }
916
+ window.open(`${endpoint}/studio`, '_blank', 'noopener');
917
+ toast(copied
918
+ ? 'Root 密钥已复制并打开 Studio——在「Root 或账号管理员 API 密钥」框 Ctrl+V 即可进入'
919
+ : '已打开 Studio(剪贴板不可用,请手动填写 Root 密钥)');
920
+ } catch (e) { toast(e.message, true); }
921
+ };
922
+ const copyRootBtn = $('#memCopyRoot');
923
+ if (copyRootBtn) copyRootBtn.onclick = copyRoot;
924
+ const openStudioBtn = $('#memOpenStudio');
925
+ if (openStudioBtn) openStudioBtn.onclick = openStudio;
926
+ // 指引卡内的「复制 Root 密钥」(同一 handler,多入口)
927
+ el.querySelectorAll('[data-root-copy]').forEach((b) => { b.onclick = copyRoot; });
928
+
808
929
  // 打开记忆空间(最终方案 §三 决策 5):密钥进剪贴板 → 自动新标签开 Web Studio 文件系统页
809
930
  //(深链 /studio/filesystem 直落记忆目录树,避开默认的 VikingBot 标签——那是 OpenViking
810
931
  // 自带的 Agent 对话功能,需 --with-bot 启动,与记忆浏览无关)。未连接的浏览器会被
@@ -1,7 +1,7 @@
1
1
  // ============ 概览 ============
2
2
  // 桥接器启停 / 版本更新(宿主进程管理:embedded 页面随进程生死,独立页面经 PID 跨进程操作)
3
3
  import { S, $, esc, toast, api, refresh } from '../core.js';
4
- import { bindDialogKeys, confirmDialog, mountDialog, progressDialog } from '../ui.js';
4
+ import { bindDialogKeys, confirmDialog, mountDialog, progressDialog, stepsDialog } from '../ui.js';
5
5
  // larkNotConfigured 与后端 needsLarkCliConfig 同源(detail 含 not_configured 即「未配置应用」),
6
6
  // 判定只有一份、放在弹窗模块里,避免两处漂移
7
7
  import { larkNotConfigured, openLarkCliDeviceDialog } from './larkcli-device.js';
@@ -20,7 +20,6 @@ function showMask(inner) {
20
20
  m.innerHTML = `<div class="br-mask-card">${inner}</div>`;
21
21
  m.style.display = 'flex';
22
22
  }
23
- function hideMask() { const m = $('#brMask'); if (m) m.style.display = 'none'; }
24
23
 
25
24
  /** 启停请求的容错:embedded 停止/重启时进程退出可能先于响应到达,网络断开视为已受理 */
26
25
  async function bridgeActionSafe(op) {
@@ -31,20 +30,96 @@ async function bridgeActionSafe(op) {
31
30
  }
32
31
  }
33
32
 
34
- /** 等配置页服务恢复(重启轮询):连续两次成功才确认,排除旧进程残影 */
35
- async function waitServerBack(timeoutMs = 45000) {
33
+ /**
34
+ * 重启进度分步弹窗(两种运行模式统一)。步骤① LCB 重启(探测新进程上线),步骤② 记忆增强
35
+ * OpenViking(轮询自举状态/健康探活)——两步状态源不同、节奏不同,旧版单句遮罩 + 45s 超时
36
+ * 报错的做法在 OpenViking 冷启动(30-60s+)时必撞「重启超时」误报,整体重做:
37
+ * - LCB 自身恢复只取决于 LCB 本体(服务端已把配置页启动前移、记忆自举后台化)
38
+ * - 记忆增强**永不导致「重启失败」**:未就绪呈现为黄色警示 + 手动开启指引,弹窗可随时关闭
39
+ */
40
+ async function restartFlow() {
41
+ const embedded = !!S.status?.embedded;
42
+ const oldPid = S.status?.bridge?.pid ?? null;
43
+ const st = [
44
+ { title: 'LCB 重启中', detail: '正在停止旧进程并拉起新进程…', status: 'running' },
45
+ { title: '记忆增强(OpenViking)', detail: '等待 LCB 重启完成后检测…', status: 'pending' },
46
+ ];
47
+ let stopped = false;
48
+ const dlg = stepsDialog({ title: '重启桥接器', steps: st });
49
+ // 关弹窗 = 后台运行:停轮询,稍后刷新概览状态(重启幂等,流程在桥接器侧继续不受影响)
50
+ dlg.onClose(() => { stopped = true; setTimeout(() => void refresh(), 3000); });
51
+ const paint = (i, patch) => { Object.assign(st[i], patch); dlg.setSteps(st.map((s) => ({ ...s }))); };
52
+
53
+ try { await bridgeActionSafe('restart'); }
54
+ catch (e) { paint(0, { status: 'failed', detail: e.message }); toast(e.message, true); return; }
55
+
56
+ // ---- 步骤①:等 LCB 回归。embedded:本页随进程失联,连续两次 /api/status 成功才算新进程
57
+ //(排除旧进程残影);独立:本页不失联,等 PID 文件换新(bridge.running 且 pid 变化)。
58
+ // 超时不再报「重启失败」退出——如实呈现等待中 + 给手动刷新出口,弹窗保持观测
36
59
  const t0 = Date.now();
37
60
  await sleep(2500); // 留给旧进程退场:立刻探测可能命中尚未退出的旧 server
38
- while (Date.now() - t0 < timeoutMs) {
39
- try {
40
- await api('GET', '/api/status');
41
- await sleep(1000);
42
- await api('GET', '/api/status');
43
- return;
44
- } catch {}
61
+ let streak = false;
62
+ let back = false;
63
+ while (!stopped && Date.now() - t0 < 120_000) {
64
+ const sec = Math.round((Date.now() - t0) / 1000);
65
+ let s = null;
66
+ try { s = await api('GET', '/api/status'); } catch { /* 失联窗口属预期 */ }
67
+ if (s) {
68
+ if (embedded) {
69
+ if (streak) { back = true; break; }
70
+ streak = true;
71
+ await sleep(1000); // 快速二次确认(旧实现同口径)
72
+ continue;
73
+ }
74
+ if (s.bridge?.running && (oldPid == null || s.bridge?.pid !== oldPid)) { back = true; break; }
75
+ } else if (embedded) streak = false;
76
+ paint(0, { detail: `已等 ${sec} 秒…(新进程上线即自动恢复)` });
45
77
  await sleep(1500);
46
78
  }
47
- throw new Error('重启超时:请手动刷新页面查看状态');
79
+ if (stopped) return;
80
+ if (!back) {
81
+ paint(0, { status: 'failed', detail: '超过 120 秒未见新进程上线——可能端口占用等启动异常,请查看日志' });
82
+ dlg.setHint('<button class="btn sm" id="sdReload">手动刷新页面</button>');
83
+ document.querySelector('#sdReload').onclick = () => location.reload();
84
+ return;
85
+ }
86
+ paint(0, { status: 'done', detail: `LCB 已重启(用时 ${Math.round((Date.now() - t0) / 1000)} 秒)` });
87
+ toast('✅ LCB 已重启'); // 弹窗可能已被用户关掉(后台运行),toast 兜一条完成通知
88
+
89
+ // ---- 步骤②:记忆增强 OpenViking。embedded 轮询 /api/memory/status:enabled=false → 跳过;
90
+ // health 探活通过 → 就绪;自举 phase=starting → 实时「已等 N 秒」;phase=failed → 黄色警示
91
+ //(不红叉、不阻断——LCB 本体已正常,只是记忆增强没起来)。独立模式本页拿不到桥接器进程内
92
+ // 的自举报告,以 health 探活为准(新桥接器起来会自动拉起受管服务)。
93
+ paint(1, { status: 'running', detail: '正在检测记忆服务…' });
94
+ const MEM_POLL_MAX_MS = embedded ? 620_000 : 150_000; // embedded 与后端慢启动续等窗口(600s)对齐
95
+ const m0 = Date.now();
96
+ while (!stopped) {
97
+ let ms = null;
98
+ try { ms = await api('GET', '/api/memory/status'); } catch { /* 新进程刚回来时的空窗:静默重试 */ }
99
+ const sec = Math.round((Date.now() - m0) / 1000);
100
+ if (ms) {
101
+ if (ms.memory?.enabled === false) { paint(1, { status: 'skipped', detail: '未启用(config.yaml 的 memory.enabled=false)' }); break; }
102
+ if (ms.health?.healthy) { paint(1, { status: 'done', detail: `记忆服务已就绪:${ms.memory?.endpoint || ''}` }); break; }
103
+ const auto = embedded ? ms.install?.autoStart : undefined;
104
+ if (auto?.phase === 'failed') {
105
+ paint(1, { status: 'warn', detail: `${auto.detail}${auto.hint ? `。${auto.hint}` : ''}` });
106
+ break;
107
+ }
108
+ if (auto?.phase === 'starting') {
109
+ const waited = auto.at ? Math.max(0, Math.round((Date.now() - new Date(auto.at).getTime()) / 1000)) : sec;
110
+ paint(1, { detail: `${auto.detail}(已等 ${waited} 秒)` });
111
+ } else {
112
+ paint(1, { detail: embedded ? `检测记忆服务状态…(${sec} 秒)` : `等待桥接器拉起记忆服务…(已等 ${sec} 秒)` });
113
+ }
114
+ }
115
+ if (Date.now() - m0 > MEM_POLL_MAX_MS) {
116
+ paint(1, { status: 'warn', detail: '长时间未见就绪,请到「记忆增强」页查看服务状态或手动启动' });
117
+ break;
118
+ }
119
+ await sleep(2000);
120
+ }
121
+ dlg.setHint('本弹窗可随时关闭(后台运行),重启与记忆启动不受影响');
122
+ void refresh();
48
123
  }
49
124
 
50
125
  async function startFlow() {
@@ -77,20 +152,6 @@ async function stopFlow() {
77
152
  } catch (e) { toast(e.message, true); }
78
153
  }
79
154
 
80
- async function restartFlow() {
81
- if (S.status?.embedded) {
82
- showMask('<div class="br-spin"></div>正在重启桥接器,页面将自动恢复…');
83
- try { await bridgeActionSafe('restart'); } catch (e) { hideMask(); toast(e.message, true); return; }
84
- try { await waitServerBack(); hideMask(); toast('✅ 桥接器已重启'); await refresh(); }
85
- catch (e) { hideMask(); toast(e.message, true); }
86
- } else {
87
- try { const r = await bridgeActionSafe('restart'); toast(r.message || '正在重启…'); }
88
- catch (e) { toast(e.message, true); return; }
89
- setTimeout(() => refresh(), 4000);
90
- setTimeout(() => refresh(), 10000);
91
- }
92
- }
93
-
94
155
  function renderUpdateResult() {
95
156
  const el = $('#updLatest');
96
157
  const r = UPD.data;
@@ -305,6 +305,66 @@ export function progressDialog({ title = '执行中', note = '请稍候…', rep
305
305
  };
306
306
  }
307
307
 
308
+ // ============ 分步进度弹窗(重启流程等真实状态驱动的串行步骤展示) ============
309
+ /**
310
+ * 分步进度弹窗:步骤状态由调用方按**真实探测结果**驱动(区别于 progressDialog 的时间缓动
311
+ * 假进度),适合「LCB 重启 → 记忆增强启动」这类前后步骤状态源不同的流程。
312
+ * 视觉沿用记忆页安装流水线 stepper 的 badge 语言(✓/✗/spinner/序号圆),纵向排布。
313
+ *
314
+ * 可随时关闭是刻意设计:重启是幂等操作、记忆自举在桥接器进程内后台进行,关弹窗只是
315
+ * 停止**观看**,不影响流程本身——所以这里不做 progressDialog 那种「完成前禁关」。
316
+ *
317
+ * @param {string} opts.title 弹窗标题
318
+ * @param {Array<{title: string, detail?: string, status?: 'pending'|'running'|'done'|'failed'|'warn'|'skipped'}>} opts.steps 初始步骤
319
+ * @returns {{ setSteps(steps): void, setHint(html): void, onClose(fn): void, unmount(): void }}
320
+ * setSteps 整体替换步骤并重绘;setHint 设置底部提示区(放「手动刷新」等动作);
321
+ * onClose 注册关闭回调(调用方停轮询/刷新状态);unmount 直接销毁。
322
+ */
323
+ export function stepsDialog({ title = '执行进度', steps = [] } = {}) {
324
+ const { mask, unmount } = mountDialog(`
325
+ <div class="modal dlg" role="dialog" aria-modal="true" style="width:min(520px,94vw)">
326
+ <div style="display:flex;align-items:center;gap:10px">
327
+ <b class="dlg-title" style="margin:0;flex:1">${esc(title)}</b>
328
+ <button class="btn sm" data-sd="close">后台运行</button>
329
+ </div>
330
+ <div data-sd="steps" style="display:flex;flex-direction:column;gap:6px;margin-top:14px"></div>
331
+ <div class="hint" data-sd="hint" style="margin-top:10px"></div>
332
+ </div>`);
333
+ const stepsEl = mask.querySelector('[data-sd="steps"]');
334
+ const hintEl = mask.querySelector('[data-sd="hint"]');
335
+ let onCloseFn = null;
336
+ // badge 视觉与 memory.js installStepsHtml 同源:done=绿✓ failed=红✗ running=spinner
337
+ // pending=序号圈;warn(黄!)为本组件扩展——「未就绪但不构成失败」(记忆增强不阻断语义)
338
+ const BADGE = {
339
+ done: '<span style="width:20px;height:20px;border-radius:50%;background:var(--ok-tx);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto">✓</span>',
340
+ failed: '<span style="width:20px;height:20px;border-radius:50%;background:var(--err-tx);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto">✗</span>',
341
+ warn: '<span style="width:20px;height:20px;border-radius:50%;background:var(--warn-tx);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto">!</span>',
342
+ running: '<span class="br-spin-sm" style="margin:0;flex:0 0 auto"></span>',
343
+ skipped: '<span style="width:20px;height:20px;border-radius:50%;background:var(--muted);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto">–</span>',
344
+ };
345
+ const paint = (list) => {
346
+ stepsEl.innerHTML = list.map((s) => {
347
+ const status = s.status || 'pending';
348
+ const badge = BADGE[status]
349
+ || `<span style="width:20px;height:20px;border-radius:50%;border:1.5px solid var(--muted);color:var(--muted);display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto">${list.indexOf(s) + 1}</span>`;
350
+ return `<div style="background:var(--off-bg);border-radius:10px;padding:10px 12px">
351
+ <div style="display:flex;align-items:center;gap:8px">${badge}<b style="font-size:12.5px">${esc(s.title)}</b></div>
352
+ <div class="hint" style="margin-top:5px;font-size:11px;line-height:1.55;word-break:break-all">${s.detail ? esc(s.detail) : '&nbsp;'}</div>
353
+ </div>`;
354
+ }).join('');
355
+ };
356
+ paint(steps);
357
+ const close = () => { unbind(); unmount(); onCloseFn?.(); };
358
+ const unbind = bindDialogKeys((k) => { if (k === 'Escape') close(); });
359
+ mask.querySelector('[data-sd="close"]').onclick = close;
360
+ return {
361
+ setSteps(list) { steps = list; paint(list); },
362
+ setHint(html) { hintEl.innerHTML = html || ''; },
363
+ onClose(fn) { onCloseFn = fn; },
364
+ unmount() { unbind(); unmount(); },
365
+ };
366
+ }
367
+
308
368
  // ============ 可搜索多选字段(分身白名单等;仅限候选内选择,遗留值保留可删) ============
309
369
  /** 纯函数(可测):候选过滤——大小写不敏感子串匹配 value+label+desc;>50 项截断(面板尾行提示) */
310
370
  export function filterMselOptions(options, query) {
@@ -37,6 +37,11 @@ export declare class ProgressCard {
37
37
  private qaButtonsDirty;
38
38
  /** 挂起输入期间收到的沉底请求(sinkToBottom 会删卡重发清空输入态):挂起解除后补执行 */
39
39
  private deferSink;
40
+ /** 「已沉底」迁移标记补打状态:沉底撤回失败 → 迁移标记 PATCH 也失败(典型 230020
41
+ * 单消息更新限频,数秒自愈)时记入,heartbeatTimer 每秒检查、间隔
42
+ * SINK_NOTICE_RETRY_DELAY_MS 补打,成功或达 SINK_NOTICE_RETRY_MAX 放弃。
43
+ * 单槽位:同刻两张以上旧卡残留概率极低,新沉底覆盖旧记录 */
44
+ private sinkNoticeRetry?;
40
45
  private state;
41
46
  private flushTimer?;
42
47
  private heartbeatTimer?;
@@ -128,6 +133,14 @@ export declare class ProgressCard {
128
133
  sinkToBottom(opts?: {
129
134
  force?: boolean;
130
135
  }): Promise<void>;
136
+ /**
137
+ * 「已沉底」迁移标记心跳补打(heartbeatTimer 每秒调用):距上次尝试 ≥
138
+ * SINK_NOTICE_RETRY_DELAY_MS 才发(230020 单消息限频数秒自愈,密集重试反而加剧频控),
139
+ * 成功清槽;达 SINK_NOTICE_RETRY_MAX 放弃并清槽——轻量加固定位,固定次数后不再照看
140
+ * (旧卡保持冻结但不影响任务;需无限期照看见「弃卡补偿队列」扩展方向,暂不引入)。
141
+ * fire-and-forget:不 await,避免阻塞心跳;withTimeout 防网络黑洞挂死槽位。
142
+ */
143
+ private retrySinkNotice;
131
144
  /**
132
145
  * 串行化 flush:所有更新走同一条 promise 链按发起顺序落地。
133
146
  * - in-flight 中再来请求 → 标记 dirty,本轮落地后自动补刷一次(带上最新 state);
@@ -13,6 +13,16 @@ const UPDATE_TIMEOUT_MS = 30_000;
13
13
  * 真机观测假阴性(300308 Server Internal Error 但请求实际已落地)均为单次超前 1,
14
14
  * 上限 3 足够覆盖;跳满仍未对齐说明错位成因未知,弃卡沉底重建兜底 */
15
15
  const MAX_SEQ_SKIP = 3;
16
+ /** 沉底撤回旧卡失败后的补撤退避:服务端 500/2200 多为秒级瞬态(1.4.1 真机事故:撤回撞
17
+ * 2200 Internal Error 一次即降级,旧卡原样冻结成第二张进度卡),1.2s 后补撤一次,
18
+ * 成功即不产生双卡;仍失败才转「已沉底」迁移标记兜底 */
19
+ const DELETE_RETRY_DELAY_MS = 1_200;
20
+ /** 「已沉底」迁移标记补打间隔:230020 单消息更新限频(撤回前旧卡刚经历每秒级 seq 重试,
21
+ * 极易触发频控)通常数秒自愈,5s 后补打大概率成功 */
22
+ const SINK_NOTICE_RETRY_DELAY_MS = 5_000;
23
+ /** 「已沉底」迁移标记补打次数上限(不含首次):轻量加固定位——固定次数放弃,不引入
24
+ * 常驻弃卡补偿队列(持续重试反而有加剧限频的风险面) */
25
+ const SINK_NOTICE_RETRY_MAX = 3;
16
26
  /** 给单次更新请求加超时闸:到点 reject 由 flush catch 统一按失败重试 */
17
27
  function withTimeout(p, ms) {
18
28
  return new Promise((resolve, reject) => {
@@ -42,6 +52,11 @@ export class ProgressCard {
42
52
  qaButtonsDirty = false;
43
53
  /** 挂起输入期间收到的沉底请求(sinkToBottom 会删卡重发清空输入态):挂起解除后补执行 */
44
54
  deferSink = false;
55
+ /** 「已沉底」迁移标记补打状态:沉底撤回失败 → 迁移标记 PATCH 也失败(典型 230020
56
+ * 单消息更新限频,数秒自愈)时记入,heartbeatTimer 每秒检查、间隔
57
+ * SINK_NOTICE_RETRY_DELAY_MS 补打,成功或达 SINK_NOTICE_RETRY_MAX 放弃。
58
+ * 单槽位:同刻两张以上旧卡残留概率极低,新沉底覆盖旧记录 */
59
+ sinkNoticeRetry;
45
60
  state;
46
61
  flushTimer;
47
62
  heartbeatTimer;
@@ -82,6 +97,8 @@ export class ProgressCard {
82
97
  const interval = this.opts.flushIntervalMs ?? 1000;
83
98
  this.flushTimer = setInterval(() => void this.flush(), interval).unref();
84
99
  this.heartbeatTimer = setInterval(() => {
100
+ if (this.sinkNoticeRetry)
101
+ this.retrySinkNotice(); // 沉底迁移标记补打(见 retrySinkNotice)
85
102
  if (Date.now() - this.lastActivityAt >= (this.opts.idleHeartbeatMs ?? 30_000)) {
86
103
  this.lastActivityAt = Date.now(); // I1 修复:心跳刷过即重置空闲计时,否则退化为每秒连刷
87
104
  void this.flush(); // 心跳:刷新运行时长,证明没卡死
@@ -251,6 +268,7 @@ export class ProgressCard {
251
268
  this.state.done = true;
252
269
  clearInterval(this.flushTimer);
253
270
  clearInterval(this.heartbeatTimer);
271
+ this.sinkNoticeRetry = undefined; // 心跳已停,补打失去驱动;终态后旧卡提示已无意义
254
272
  this.state.status = summary;
255
273
  this.state.toolLine = '';
256
274
  this.state.resultChars = resultChars;
@@ -289,13 +307,31 @@ export class ProgressCard {
289
307
  this.messageId = undefined; // 期间 flush 自动跳过,避免 PATCH 打到已删除的旧卡
290
308
  this.cardId = undefined;
291
309
  if (this.sender.deleteCard) {
292
- await this.sender.deleteCard(old).catch((e) => {
310
+ await this.sender.deleteCard(old).catch(async (e) => {
293
311
  // 撤回失败不再静默:1.3.7 真机事故里旧卡冻结在中间态无结束文案,被误读成任务中断。
294
312
  // 每次沉底都出现此日志 ≈ 应用缺 im:message:delete 撤回权限(去开发者后台开通并发布)
295
313
  console.warn('[进度卡] 旧卡撤回失败(若每次沉底都出现,多为应用缺 im:message:delete 撤回权限,请在飞书开发者后台开通并发布新版本):', e instanceof Error ? e.message : e, feishuErrorBody(e) ?? '');
296
- // 撤不掉就整卡 PATCH 打迁移标记(消息级 PATCH 无 cardkit sequence 依赖,同 done 分支做法),
297
- // 旧卡不再停在中间态;PATCH 也失败则静默(尽力而为,不阻断沉底主流程)
298
- void this.sender.updateCard(old, buildSinkNoticeCard(this.state.title)).catch(() => { });
314
+ // 1.4.1 加固①:撤回失败多为秒级瞬态(2200 Internal Error 等服务端 500)——退避
315
+ // 补撤一次,成功即不产生双卡;仍失败才转「已沉底」迁移标记兜底
316
+ await new Promise((r) => setTimeout(r, DELETE_RETRY_DELAY_MS));
317
+ try {
318
+ await this.sender.deleteCard(old);
319
+ return;
320
+ }
321
+ catch (e2) {
322
+ console.warn('[进度卡] 旧卡补撤仍失败,转迁移标记兜底:', e2 instanceof Error ? e2.message : e2, feishuErrorBody(e2) ?? '');
323
+ }
324
+ // 1.4.1 加固②:迁移标记 PATCH 常撞 230020 单消息更新限频(撤回前旧卡刚经历每秒级
325
+ // seq 重试,极易触发频控,数秒自愈)——首次失败不再静默放弃(静默会让旧卡原样冻结
326
+ // 在中间态被误读成任务中断,1.4.1 真机事故即「撤回 500 + 标记限频」双失败双卡),
327
+ // 记入待补由心跳延迟补打(retrySinkNotice)
328
+ try {
329
+ await withTimeout(this.sender.updateCard(old, buildSinkNoticeCard(this.state.title)), this.opts.updateTimeoutMs ?? UPDATE_TIMEOUT_MS);
330
+ }
331
+ catch (e2) {
332
+ this.sinkNoticeRetry = { messageId: old, attempts: 1, lastAt: Date.now() };
333
+ console.warn(`[进度卡] 「已沉底」提示改写失败(限频/网络),将由心跳每 ${SINK_NOTICE_RETRY_DELAY_MS / 1000}s 补打(最多 ${SINK_NOTICE_RETRY_MAX} 次):`, e2 instanceof Error ? e2.message : e2, feishuErrorBody(e2) ?? '');
334
+ }
299
335
  });
300
336
  }
301
337
  for (let attempt = 0; attempt < 2; attempt++) {
@@ -324,6 +360,29 @@ export class ProgressCard {
324
360
  }
325
361
  }
326
362
  }
363
+ /**
364
+ * 「已沉底」迁移标记心跳补打(heartbeatTimer 每秒调用):距上次尝试 ≥
365
+ * SINK_NOTICE_RETRY_DELAY_MS 才发(230020 单消息限频数秒自愈,密集重试反而加剧频控),
366
+ * 成功清槽;达 SINK_NOTICE_RETRY_MAX 放弃并清槽——轻量加固定位,固定次数后不再照看
367
+ * (旧卡保持冻结但不影响任务;需无限期照看见「弃卡补偿队列」扩展方向,暂不引入)。
368
+ * fire-and-forget:不 await,避免阻塞心跳;withTimeout 防网络黑洞挂死槽位。
369
+ */
370
+ retrySinkNotice() {
371
+ const n = this.sinkNoticeRetry;
372
+ if (Date.now() - n.lastAt < SINK_NOTICE_RETRY_DELAY_MS)
373
+ return;
374
+ void withTimeout(this.sender.updateCard(n.messageId, buildSinkNoticeCard(this.state.title)), this.opts.updateTimeoutMs ?? UPDATE_TIMEOUT_MS)
375
+ .then(() => { this.sinkNoticeRetry = undefined; })
376
+ .catch((e) => {
377
+ if (n.attempts >= SINK_NOTICE_RETRY_MAX) {
378
+ this.sinkNoticeRetry = undefined;
379
+ console.warn('[进度卡] 「已沉底」提示补打放弃,旧卡保持冻结(不影响任务):', e instanceof Error ? e.message : e, feishuErrorBody(e) ?? '');
380
+ return;
381
+ }
382
+ n.attempts += 1;
383
+ n.lastAt = Date.now();
384
+ });
385
+ }
327
386
  /**
328
387
  * 串行化 flush:所有更新走同一条 promise 链按发起顺序落地。
329
388
  * - in-flight 中再来请求 → 标记 dirty,本轮落地后自动补刷一次(带上最新 state);
@@ -1 +1 @@
1
- {"version":3,"file":"progress-card.js","sourceRoot":"","sources":["../../src/gateway/progress-card.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress-card.js","sourceRoot":"","sources":["../../src/gateway/progress-card.ts"],"names":[],"mappings":"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"}