@jesonliu/lark-claudecode-bridge 1.4.1 → 1.4.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/assets/web/js/pages/memory.js +126 -5
- package/dist/gateway/progress-card.d.ts +13 -0
- package/dist/gateway/progress-card.js +63 -4
- package/dist/gateway/progress-card.js.map +1 -1
- package/dist/index.js +81 -17
- package/dist/index.js.map +1 -1
- package/dist/memory-installer.d.ts +32 -0
- package/dist/memory-installer.js +108 -9
- package/dist/memory-installer.js.map +1 -1
- package/dist/memory.d.ts +22 -2
- package/dist/memory.js +123 -26
- package/dist/memory.js.map +1 -1
- package/dist/web/memory-api.js +4 -1
- package/dist/web/memory-api.js.map +1 -1
- package/dist/web/memory-users-api.d.ts +30 -0
- package/dist/web/memory-users-api.js +85 -12
- package/dist/web/memory-users-api.js.map +1 -1
- package/dist/web/server.js +11 -1
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -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="
|
|
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
|
-
/**
|
|
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
|
-
${
|
|
758
|
-
${group('
|
|
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 启动,与记忆浏览无关)。未连接的浏览器会被
|
|
@@ -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
|
-
//
|
|
297
|
-
//
|
|
298
|
-
|
|
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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"}
|
package/dist/index.js
CHANGED
|
@@ -23,8 +23,8 @@ import { createGatewaySender, createNotifyServer, createNotifySenderSlot, NOTIFY
|
|
|
23
23
|
import { BRIDGE_MCP_JSON, readMcpServersFromJsonFile } from './web/skills-mcp-api.js';
|
|
24
24
|
import { FEISHU_NOTIFY_SOP_PROMPT, TOOL_HINT_PROMPT } from './notify-sop.js';
|
|
25
25
|
import { ensureProfileSettingsFile, resolveAppProfile, resolveAppProfileModel } from './app-profile.js';
|
|
26
|
-
import { MEMORY_PLUGIN_NAME, createMemoryProvider, ensureMemoryUserKeys, memoryEnvFor, } from './memory.js';
|
|
27
|
-
import { cleanupClientCliConf, ensureClientCliConf, stopManagedServer } from './memory-installer.js';
|
|
26
|
+
import { MEMORY_PLUGIN_NAME, createMemoryProvider, ensureMemoryUserKeys, memoryEndpoint, memoryEnvFor, } from './memory.js';
|
|
27
|
+
import { cleanupClientCliConf, ensureClientCliConf, ensureMemoryServiceRunning, stopManagedServer } from './memory-installer.js';
|
|
28
28
|
import { isImageFile } from './util/file-types.js';
|
|
29
29
|
import { FileTracker } from './util/file-tracker.js';
|
|
30
30
|
import { SessionStore, migrateLegacySessions } from './session/session-store.js';
|
|
@@ -1434,6 +1434,11 @@ export function createConfigReloader(config, configPath, opts = {}) {
|
|
|
1434
1434
|
};
|
|
1435
1435
|
}
|
|
1436
1436
|
export async function startBridge(configPath = CONFIG_PATH) {
|
|
1437
|
+
// 启动分步进度(主人可见的启动过程):[1/4] 长连接 → [2/4] 记忆服务 → [3/4] 记忆身份 → [4/4] 配置页。
|
|
1438
|
+
// 记忆两步全程非阻断——失败只提示 + 给出「去哪手动起」的指引,桥接器本体照常服务
|
|
1439
|
+
const TOTAL_STEPS = 4;
|
|
1440
|
+
let stepNo = 0;
|
|
1441
|
+
const step = (title) => `[${++stepNo}/${TOTAL_STEPS}] ${title}`;
|
|
1437
1442
|
const config = loadConfig(configPath);
|
|
1438
1443
|
// 双实例治理:旧实例占着 Web 配置页端口会让本进程配置页静默失联(浏览器仍打到旧进程),启动先接管
|
|
1439
1444
|
const oldBridge = await stopExistingBridgeAndWait();
|
|
@@ -1456,6 +1461,11 @@ export async function startBridge(configPath = CONFIG_PATH) {
|
|
|
1456
1461
|
// 跳过即正解);memory 段热重载变化时后台重签(account/root key 改动会使旧 key 失配)。
|
|
1457
1462
|
// key 只进内存缓存与子进程 env,永不落日志/配置页
|
|
1458
1463
|
const memoryUserKeys = new Map();
|
|
1464
|
+
/** 服务不可达时的签发重试预算(15s × 6 ≈ 90s):旧实现探活失败即跳过且永不重试,导致
|
|
1465
|
+
* 「记忆服务稍后才起 → 整个会话生命周期都没有记忆」。重试只在「服务不可达」时进行,
|
|
1466
|
+
* 且有 flag 防并发叠加(热重载与启动重试可能同时触发) */
|
|
1467
|
+
const MEMORY_KEY_RETRY = { intervalMs: 15_000, rounds: 6 };
|
|
1468
|
+
let memoryKeyRetrying = false;
|
|
1459
1469
|
const refreshMemoryKeys = async () => {
|
|
1460
1470
|
if (!config.memory?.enabled) {
|
|
1461
1471
|
memoryUserKeys.clear();
|
|
@@ -1463,30 +1473,43 @@ export async function startBridge(configPath = CONFIG_PATH) {
|
|
|
1463
1473
|
}
|
|
1464
1474
|
const outcomes = await ensureMemoryUserKeys(config.memory, config.apps.map((a) => a.appId));
|
|
1465
1475
|
memoryUserKeys.clear();
|
|
1476
|
+
let unreachable = outcomes.size > 0;
|
|
1466
1477
|
for (const o of outcomes.values()) {
|
|
1467
1478
|
if (o.userKey) {
|
|
1468
1479
|
memoryUserKeys.set(o.appId, o.userKey);
|
|
1480
|
+
unreachable = false;
|
|
1469
1481
|
console.log(`[memory] bot ${o.appId}:user key 已签发(api_key 模式)`);
|
|
1470
1482
|
}
|
|
1471
|
-
else if (o.error)
|
|
1483
|
+
else if (o.error) {
|
|
1484
|
+
unreachable = false;
|
|
1472
1485
|
console.warn(`[memory] bot ${o.appId}:user key ${o.error}`);
|
|
1473
|
-
|
|
1486
|
+
}
|
|
1487
|
+
else {
|
|
1488
|
+
if (o.skipped && !o.skipped.startsWith('服务不可达'))
|
|
1489
|
+
unreachable = false;
|
|
1474
1490
|
console.log(`[memory] bot ${o.appId}:${o.skipped}`);
|
|
1491
|
+
}
|
|
1475
1492
|
}
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1493
|
+
// 全员因服务不可达被跳过 → 退避重试;服务起来后自动补签,无需重启 LCB
|
|
1494
|
+
if (unreachable && !memoryKeyRetrying) {
|
|
1495
|
+
memoryKeyRetrying = true;
|
|
1496
|
+
void (async () => {
|
|
1497
|
+
for (let i = 1; i <= MEMORY_KEY_RETRY.rounds; i++) {
|
|
1498
|
+
await new Promise((r) => setTimeout(r, MEMORY_KEY_RETRY.intervalMs));
|
|
1499
|
+
await refreshMemoryKeys();
|
|
1500
|
+
if (memoryUserKeys.size > 0 || !config.memory?.enabled) {
|
|
1501
|
+
memoryKeyRetrying = false;
|
|
1502
|
+
if (memoryUserKeys.size > 0)
|
|
1503
|
+
console.log(`[memory] 记忆身份已补签(服务就绪后自动恢复,无需重启)`);
|
|
1504
|
+
return;
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
memoryKeyRetrying = false;
|
|
1508
|
+
console.warn(`[memory] 记忆服务在 ${MEMORY_KEY_RETRY.rounds} 次重试后仍不可达,本会话无记忆注入;`
|
|
1509
|
+
+ '可在配置页「记忆增强」点「启动服务」后重启 LCB,或等下一条消息触发重试');
|
|
1510
|
+
})();
|
|
1488
1511
|
}
|
|
1489
|
-
}
|
|
1512
|
+
};
|
|
1490
1513
|
const memoryProvider = createMemoryProvider(config, memoryUserKeys);
|
|
1491
1514
|
// reloader 共享:所有 bridge 持有同一 config 对象引用,mutate 一处全员可见
|
|
1492
1515
|
const reloadConfig = createConfigReloader(config, configPath, {
|
|
@@ -1562,6 +1585,7 @@ export async function startBridge(configPath = CONFIG_PATH) {
|
|
|
1562
1585
|
// 部分失败不拖垮其它 app:一个凭证写错时其余机器人照常服务。
|
|
1563
1586
|
// 注意:SDK 对非法 appId 的 start() 是静默 return 不抛错——Promise resolve 不等于连接成功,
|
|
1564
1587
|
// 逐 app 状态行是运维观测的主要手段
|
|
1588
|
+
console.log(`${step('飞书长连接启动 …')}`);
|
|
1565
1589
|
const results = await Promise.allSettled(runners.map((r) => r.gateway.start(r.bridge)));
|
|
1566
1590
|
runners.forEach((r, i) => {
|
|
1567
1591
|
if (results[i].status === 'fulfilled')
|
|
@@ -1573,6 +1597,45 @@ export async function startBridge(configPath = CONFIG_PATH) {
|
|
|
1573
1597
|
if (results.every((r) => r.status === 'rejected'))
|
|
1574
1598
|
throw new Error('所有应用均启动失败,请检查 config.yaml 中的 apps 配置');
|
|
1575
1599
|
console.log(`🚀 lark-claudecode-bridge 已启动(${results.length - results.filter((r) => r.status === 'rejected').length}/${results.length} 个应用,长连接模式,无需公网 IP)`);
|
|
1600
|
+
// 第二步:记忆增强自举。LCB 先起来(机器人可用性优先),记忆随后尽力而为:
|
|
1601
|
+
// 服务没起就自动拉起(embedded 受管),起不来只提示 + 指引手动开启,绝不阻断启动
|
|
1602
|
+
if (config.memory?.enabled) {
|
|
1603
|
+
console.log(`${step('记忆增强 · 启动 OpenViking 服务 …')}`);
|
|
1604
|
+
let report;
|
|
1605
|
+
try {
|
|
1606
|
+
report = await ensureMemoryServiceRunning({
|
|
1607
|
+
endpoint: memoryEndpoint(config.memory),
|
|
1608
|
+
mode: config.memory.mode,
|
|
1609
|
+
});
|
|
1610
|
+
}
|
|
1611
|
+
catch (e) {
|
|
1612
|
+
// 自举自身抛错(理论上 ensureMemoryServiceRunning 全程收敛为 report,这里是最后一道兜底)
|
|
1613
|
+
report = {
|
|
1614
|
+
ready: false, started: false,
|
|
1615
|
+
detail: `自举异常:${e instanceof Error ? e.message : String(e)}`,
|
|
1616
|
+
hint: '请到配置页「记忆增强」点「检查修复」',
|
|
1617
|
+
};
|
|
1618
|
+
}
|
|
1619
|
+
console.log(` ${report.ready ? '✅' : '⚠️'} ${report.detail}`);
|
|
1620
|
+
if (!report.ready && report.hint)
|
|
1621
|
+
console.log(` 手动开启指引:${report.hint}`);
|
|
1622
|
+
// 第三步:签发各 bot 记忆身份(服务不可达时内部自动退避重试,服务后就绪即补签)
|
|
1623
|
+
console.log(`${step('记忆增强 · 签发各 bot 记忆身份 …')}`);
|
|
1624
|
+
await refreshMemoryKeys();
|
|
1625
|
+
// 客户端接入配置兜底(§6.7 第 4 步):外部自管域自动 skipped-external;LCB 骨架已存在
|
|
1626
|
+
// kept 零写。失败只 warn——本机直连 claude 的插件启用受影响,LCB 会话有 env 通道不受影响
|
|
1627
|
+
try {
|
|
1628
|
+
const w = ensureClientCliConf(config.memory);
|
|
1629
|
+
if (w === 'written' || w === 'updated')
|
|
1630
|
+
console.log(` 客户端配置 ovcli.conf 已${w === 'written' ? '写入' : '刷新'}(${w})`);
|
|
1631
|
+
}
|
|
1632
|
+
catch (e) {
|
|
1633
|
+
console.warn('[memory] ovcli.conf 写入失败:', e instanceof Error ? e.message : e);
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
else {
|
|
1637
|
+
console.log(`${step('记忆增强 · 未启用(config.yaml 的 memory.enabled=false),跳过')}`);
|
|
1638
|
+
}
|
|
1576
1639
|
// 页面托管启停的探活依据:进程存活期间持有 PID 文件(崩溃/被硬杀时由读取方清理陈旧文件)
|
|
1577
1640
|
writePidFile();
|
|
1578
1641
|
// 优雅关闭:SIGINT/SIGTERM(或页面 stop/restart 经 selfStop 注入)时逐个关闭全部长连接
|
|
@@ -1592,6 +1655,7 @@ export async function startBridge(configPath = CONFIG_PATH) {
|
|
|
1592
1655
|
// 启动失败只 warn 不阻断机器人服务(端口冲突等场景桥接器本体仍可用)
|
|
1593
1656
|
if (config.server?.enabled !== false) {
|
|
1594
1657
|
try {
|
|
1658
|
+
console.log(`${step('配置页启动 …')}`);
|
|
1595
1659
|
webHandle = await startWebServer({
|
|
1596
1660
|
server: config.server,
|
|
1597
1661
|
configPath,
|